@elite.framework/ng.ui.core 2.0.2 → 2.0.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"elite.framework-ng.ui.core-generic-view.mjs","sources":["../tmp-esm2022/generic-view/lib/generic-view.js","../tmp-esm2022/generic-view/lib/generic-view-module.js","../tmp-esm2022/generic-view/elite.framework-ng.ui.core-generic-view.js"],"sourcesContent":["import { TooltipModule } from 'primeng/tooltip';\nimport { Component, EventEmitter, inject, Input, Output, ViewChild } from '@angular/core';\nimport { CommonModule, Location } from '@angular/common';\nimport { ToolbarModule } from 'primeng/toolbar';\nimport { ButtonModule } from 'primeng/button';\nimport { FormlyForm } from '@ngx-formly/core';\nimport { FormGroup, FormsModule, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms';\nimport { TabsModule } from 'primeng/tabs';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { BreadcrumbComponent } from '@elite.framework/ng.ui.core/breadcrumb';\nimport { BaseService, SwalService } from '@elite.framework/ng.core/services';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\nimport { GenericDialogComponent } from '@elite.framework/ng.ui.core/generic-dialog';\nimport { GenericButton } from '@elite.framework/ng.ui.core/generic-button';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"primeng/toolbar\";\nimport * as i3 from \"primeng/api\";\nimport * as i4 from \"primeng/button\";\nimport * as i5 from \"primeng/tabs\";\nimport * as i6 from \"@angular/forms\";\nimport * as i7 from \"primeng/tooltip\";\nimport * as i8 from \"primeng/progressspinner\";\nimport * as i9 from \"@ngx-translate/core\";\nexport class GenericViewComponent {\n route = inject(ActivatedRoute);\n router = inject(Router);\n form = new UntypedFormGroup({});\n title = '';\n actions = [];\n createEditActions = [];\n actions_ = [];\n tabs = [];\n viewMode = true;\n breadcrumb;\n service = inject(BaseService);\n formFields = [];\n apiName = '';\n idField = 'id';\n standaloneMode = false;\n isViewMode = true; // وضع المشاهدة فقط\n isCreateMode = false; // وضع الاضافة فقط\n isEditMode = false; // وضع التعديل\n model = {};\n displayMode = 'drawer';\n mode = 'full';\n action = new EventEmitter();\n afterDelete = new EventEmitter();\n dialog;\n inlineForm;\n tabs_ = [];\n model_ = {};\n currentId;\n list = [];\n totalRecords = 0;\n loading = false;\n // pagination state\n pageSize = 10;\n pageIndex = 0;\n sort = '';\n currentFilters = {};\n pageFilters = {};\n searchGlobal = '';\n swalService = inject(SwalService);\n _location = inject(Location);\n ngOnInit() {\n this.loading = true;\n if (this.apiName) {\n this.service.apiName = this.apiName;\n }\n this.actions_ = this.actions.filter(c => c.name != 'view');\n this.route.paramMap.subscribe(params => {\n const id = params.get(this.idField);\n if (id) {\n this.currentId = id;\n if (this.standaloneMode) {\n this.loadList();\n }\n }\n this.refresh();\n });\n }\n refresh() {\n // detect mode based on route\n const url = this.router.url.toLowerCase();\n this.isViewMode = url.includes('/view');\n this.isEditMode = url.includes('/edit');\n this.isCreateMode = url.includes('/create') || url.endsWith('/new') || url.endsWith('/add');\n this.tabs_ = [];\n for (let i = 0; i < this.tabs.length; i++) {\n const t = this.tabs[i];\n this.tabs_.push({\n ...t,\n fields: [\n {\n props: { label: '' },\n fieldGroupClassName: 'grid grid-cols-1 md:grid-cols-2 gap-3',\n fieldGroup: this.isCreateMode || this.isEditMode\n ? this.getCreateEditFields(i == 0 ? this.formFields : t.fields)\n : this.getViewFields(i == 0 ? this.formFields : t.fields),\n },\n ],\n });\n }\n this.loading = false;\n }\n // as form\n getCreateEditFields(fields = []) {\n return fields.map(f => ({\n ...f,\n props: { ...f.props, readonly: this.viewMode, disabled: this.viewMode },\n }));\n }\n getViewFields(fields = []) {\n const flatten = (fields) => fields.flatMap(field => {\n // 1. HANDLE NORMAL FIELD GROUP\n if (field.fieldGroup?.length) {\n return flatten(field.fieldGroup);\n }\n // 2. HANDLE FIELD ARRAY (REPEAT)\n const fieldArrayConfig = typeof field.fieldArray === 'function'\n ? field.fieldArray(field)\n : field.fieldArray;\n if (field.fieldArray) {\n // If the whole array is hidden in view, skip it\n if (field.props && (field.props['view']?.hidden))\n return [];\n const children = flatten(fieldArrayConfig?.fieldGroup || []);\n // IF NO CHILDREN RETURN EMPTY\n if (!children.length)\n return [];\n // Return copy of repeat wrapper but in view-mode\n return [{\n ...field,\n type: field.props ? field.props['view']?.type || field.type : 'custom-label-type',\n readonly: this.viewMode,\n disabled: this.viewMode,\n fieldArray: {\n ...fieldArrayConfig,\n fieldGroup: children\n }\n }];\n }\n // 3. NORMAL FIELD (SINGLE)\n if (!field.props ||\n field.props['view']?.hidden) {\n return [];\n }\n const type = field.props['view']?.type ||\n field.props['table']?.type ||\n field.props['filter']?.type ||\n 'custom-label-type';\n return [{\n type,\n key: field.key,\n readonly: this.viewMode,\n disabled: this.viewMode,\n wrappers: field.wrappers ?? ['field-wrapper'],\n className: field.className,\n props: {\n ...field.props,\n ...(field.props['view']?.props ||\n field.props['table']?.props ||\n field.props['filter']?.props ||\n {}),\n },\n expressions: field.props['view']?.expressions ||\n field.props['table']?.expressions ||\n field.props['filter']?.expressions\n }];\n });\n return flatten(fields);\n }\n // getViewFields(fields: FormlyFieldConfig[] = []): FormlyFieldConfig[] {\n // const flatten = (fields: FormlyFieldConfig[]): FormlyFieldConfig[] =>\n // fields.flatMap(field => {\n // if (field.fieldGroup?.length) return flatten(field.fieldGroup);\n // if (!field.props\n // || field.props['view']?.hidden\n // // || field.props['table']?.hidden\n // ) return [];\n // const type = field.props['view']?.type || field.props['table']?.type || 'custom-label-type';\n // return [{\n // type,\n // key: field['key'],\n // readonly: this.viewMode,\n // disabled: this.viewMode,\n // wrappers: field.wrappers ?? ['field-wrapper'],\n // props: {\n // ...field.props,\n // ...(field.props['view']?.props || field.props['table']?.props),\n // },\n // expressions: field.props['view']?.expressions || field.props['view']?.expressions,\n // }];\n // });\n // return flatten(fields);\n // }\n // Use a map to store form groups for each row and column\n cellForms = new Map();\n getForm(rowIndex) {\n const key = `${rowIndex}_`;\n let form = this.cellForms.get(key);\n if (!form) {\n form = new FormGroup({});\n this.cellForms.set(key, form);\n }\n return form;\n }\n async handleCreateEditAction(btn) {\n try {\n if (btn.action) {\n // Execute the provided action\n await btn.action(null); // You can pass row or context here\n }\n else {\n // Fallback to emitting event\n if (btn.actionName == 'cancel') {\n this.back();\n }\n else {\n this.action.emit({\n name: btn.actionName ?? 'cancel',\n row: null, // provide row if available\n });\n }\n }\n }\n catch (err) {\n console.error('Button action error', err);\n }\n }\n onAction(act, model) {\n if (act.action) {\n act.action(model);\n }\n else {\n // this.action.emit({ name: act.name, row:model });\n this.emitAction({ name: act.name, row: model });\n }\n }\n emitAction(event) {\n switch (event.name) {\n case 'edit':\n this.dialog.openForm(\"edit\", event.row);\n break;\n case 'delete':\n this.onDelete(event.row);\n break;\n default:\n this.action.emit(event);\n break;\n }\n }\n onDelete(item) {\n const id = item[this.idField];\n this.swalService.confirm('تأكيد الحذف', 'هل تريد حذف هذا السجل فعلاً؟', 'نعم، احذف', 'إلغاء').then((result) => {\n if (result.isConfirmed) {\n this.service.delete(id).subscribe({\n next: () => {\n this.swalService.success('تم الحذف بنجاح');\n this.back();\n },\n error: (err) => {\n this.loading = false;\n }\n });\n }\n });\n }\n afterSave(event) {\n this.model = event.response;\n // set the id from backend response\n this.currentId = event.response[this.idField];\n if (this.isCreateMode) {\n this.goToMode('view');\n }\n else if (this.isEditMode) {\n this.goToMode('view');\n }\n }\n goToMode(mode) {\n const tree = this.router.parseUrl(this.router.url);\n const segments = tree.root.children['primary']?.segments.map(s => s.path) ?? [];\n let newSegments;\n if (mode === 'create') {\n // always navigate to \"add\"\n newSegments = [\n ...segments.filter(s => !['view', 'edit', 'add'].includes(s)),\n 'add',\n ];\n }\n else {\n // if in \"add\" mode, replace it with the new id\n if (segments.includes('add')) {\n newSegments = [\n ...segments.filter(s => s !== 'add'),\n String(this.currentId),\n mode,\n ];\n }\n else {\n const idIndex = segments.findIndex(s => s === String(this.currentId));\n if (idIndex === -1) {\n newSegments = [...segments, String(this.currentId), mode];\n }\n else {\n newSegments = segments.slice(0, idIndex + 1);\n newSegments.push(mode);\n }\n }\n }\n this.router.navigate(newSegments);\n this.refresh();\n }\n backToList() {\n this.router.navigate(['../']);\n }\n back() {\n // this.router.navigate(['..']);\n this._location.back();\n }\n loadList() {\n this.loading = true;\n const filters = {\n maxResultCount: this.pageSize,\n skipCount: this.pageIndex * this.pageSize,\n sorting: this.sort,\n ...this.currentFilters,\n ...this.pageFilters,\n ...(this.searchGlobal ? { filter: this.searchGlobal } : {}),\n };\n this.service.getList(filters).subscribe({\n next: (res) => {\n this.list = res.items;\n this.totalRecords = res.totalCount;\n this.loading = false;\n // set model_ to current id item\n const found = this.list.find(x => x[this.idField] == this.currentId);\n if (found) {\n this.model_ = found;\n }\n },\n error: err => {\n console.error('Error loading list', err);\n this.loading = false;\n }\n });\n }\n next() {\n if (!this.currentId)\n return;\n // increment currentId numerically\n // const newId = Number(this.currentId) + 1;\n // this.currentId = newId;\n // use goToMode to navigate and keep mode\n const currentMode = this.isEditMode ? 'edit' : 'view';\n // this.goToMode(currentMode);\n }\n previous() {\n if (!this.currentId)\n return;\n // decrement currentId numerically\n // const newId = Number(this.currentId) - 1;\n // if (newId <= 0) return;\n // this.currentId = newId;\n // use goToMode to navigate and keep mode\n const currentMode = this.isEditMode ? 'edit' : 'view';\n // this.goToMode(currentMode);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.8\", type: GenericViewComponent, isStandalone: true, selector: \"app-detail-view\", inputs: { title: \"title\", actions: \"actions\", createEditActions: \"createEditActions\", tabs: \"tabs\", viewMode: \"viewMode\", breadcrumb: \"breadcrumb\", service: \"service\", formFields: \"formFields\", apiName: \"apiName\", idField: \"idField\", standaloneMode: \"standaloneMode\", isViewMode: \"isViewMode\", isCreateMode: \"isCreateMode\", isEditMode: \"isEditMode\", model: \"model\", displayMode: \"displayMode\", mode: \"mode\", loading: \"loading\" }, outputs: { action: \"action\", afterDelete: \"afterDelete\" }, viewQueries: [{ propertyName: \"dialog\", first: true, predicate: [\"dialog\"], descendants: true }, { propertyName: \"inlineForm\", first: true, predicate: [\"inlineForm\"], descendants: true }], ngImport: i0, template: \"\\r\\n@if (mode === 'detail') {\\r\\n<div class=\\\"w-full flex flex-col gap-3\\\">\\r\\n <!-- overlay -->\\r\\n <div *ngIf=\\\"loading\\\"\\r\\n class=\\\"absolute inset-0 bg-white/70 flex items-center justify-center z-50\\\">\\r\\n <p-progress-spinner/>\\r\\n </div>\\r\\n\\r\\n <!-- actual content -->\\r\\n <!-- Toolbar -->\\r\\n <p-toolbar style=\\\"background: transparent;border: 0px;box-shadow: none;\\\" class=\\\"bg-transparent shadow-none border-none rounded-md px-3\\\">\\r\\n <ng-template pTemplate=\\\"left\\\">\\r\\n <!-- <span class=\\\"font-semibold text-lg xs:hidden block\\\">{{ title }}</span> -->\\r\\n <app-breadcrumb class=\\\"xs:block\\\" [breadcrumb]=\\\"breadcrumb\\\"></app-breadcrumb> <!-- xs:block hidden -->\\r\\n </ng-template>\\r\\n <ng-template pTemplate=\\\"right\\\">\\r\\n <div class=\\\"flex gap-2\\\">\\r\\n\\r\\n <button\\r\\n pButton pRipple\\r\\n icon=\\\"pi pi-chevron-right\\\"\\r\\n class=\\\"p-button-text p-button-sm fd-btn\\\"\\r\\n pTooltip=\\\"\\u0627\\u0644\\u062A\\u0627\\u0644\\u064A\\\"\\r\\n (click)=\\\"next()\\\"\\r\\n ></button>\\r\\n <button\\r\\n pButton pRipple\\r\\n icon=\\\"pi pi-chevron-left\\\"\\r\\n class=\\\"p-button-text p-button-sm fd-btn\\\"\\r\\n pTooltip=\\\"\\u0627\\u0644\\u0633\\u0627\\u0628\\u0642\\\"\\r\\n (click)=\\\"previous()\\\"\\r\\n ></button>\\r\\n </div>\\r\\n </ng-template>\\r\\n </p-toolbar>\\r\\n <p-toolbar class=\\\"bg-white shadow rounded-md px-3\\\">\\r\\n\\r\\n <ng-template pTemplate=\\\"left\\\">\\r\\n @if (isViewMode) {\\r\\n <div class=\\\"flex gap-1\\\">\\r\\n @for (action of actions_; track $index) {\\r\\n <button\\r\\n pButton pRipple\\r\\n [icon]=\\\"action.icon ?? ''\\\"\\r\\n [label]=\\\"(action.label ?? '') | translate\\\"\\r\\n class=\\\"fd-btn\\\"\\r\\n (click)=\\\"onAction(action,model)\\\"\\r\\n ></button>\\r\\n }\\r\\n </div>\\r\\n }\\r\\n </ng-template>\\r\\n <ng-template pTemplate=\\\"right\\\">\\r\\n @if (isEditMode || isCreateMode) {\\r\\n <div class=\\\"flex gap-1\\\">\\r\\n @for (btn of createEditActions; track $index) {\\r\\n @if (!btn.visible || (btn.visible && btn.visible === true)) {\\r\\n @if (btn.type === 'submit' && inlineForm) {\\r\\n <lib-generic-button\\r\\n [type]=\\\"'submit'\\\"\\r\\n [loading]=\\\"inlineForm.loading\\\"\\r\\n [disabled]=\\\"inlineForm.loading || form.invalid\\\"\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"inlineForm.onSubmit()\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n @else{\\r\\n <lib-generic-button\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"handleCreateEditAction(btn)\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n }\\r\\n }\\r\\n </div>\\r\\n }\\r\\n </ng-template>\\r\\n\\r\\n </p-toolbar>\\r\\n\\r\\n <!-- Tabs -->\\r\\n <p-tabs value=\\\"0\\\">\\r\\n <p-tablist>\\r\\n @for (tab of tabs_; track $index) {\\r\\n <p-tab value=\\\"{{$index}}\\\">\\r\\n <i [class]=\\\"tab.icon\\\"></i>\\r\\n <span class=\\\"mr-1 ml-1\\\">{{ tab.header }}</span>\\r\\n </p-tab>\\r\\n }\\r\\n </p-tablist>\\r\\n <p-tabpanels>\\r\\n @for (tab of tabs_; track $index) {\\r\\n <p-tabpanel value=\\\"{{$index}}\\\">\\r\\n\\r\\n <!-- Formly fields -->\\r\\n <!-- p-4 grid grid-cols-1 md:grid-cols-2 gap-4 -->\\r\\n <div class=\\\"border border-surface p-4\\\">\\r\\n @if (tab.fields.length && $index === 0) {\\r\\n\\r\\n <form *ngIf=\\\"form\\\" [formGroup]=\\\"form\\\">\\r\\n @if (tab.fields.length && $index === 0 ) {\\r\\n @if (isEditMode || isCreateMode) {\\r\\n <app-generic-dialog\\r\\n #inlineForm\\r\\n [form]=\\\"form\\\"\\r\\n [model]=\\\"model\\\"\\r\\n [formFields]=\\\"formFields ?? []\\\"\\r\\n [apiName]=\\\"apiName\\\"\\r\\n [idField]=\\\"idField ??'id'\\\"\\r\\n [displayMode]=\\\"'inline'\\\"\\r\\n [mode]=\\\"'form-only'\\\"\\r\\n [forceState]=\\\"isCreateMode ? 'create':'edit'\\\"\\r\\n (afterSave)=\\\"afterSave($event)\\\"\\r\\n >\\r\\n </app-generic-dialog>\\r\\n}\\r\\n@else if(isViewMode){\\r\\n <formly-form\\r\\n [form]=\\\"form\\\"\\r\\n [fields]=\\\"tab.fields\\\"\\r\\n [model]=\\\"model\\\"\\r\\n ></formly-form>\\r\\n}\\r\\n}\\r\\n </form>\\r\\n\\r\\n }\\r\\n @if (tab.fields.length && $index > 0) {\\r\\n\\r\\n\\r\\n <formly-form\\r\\n [form]=\\\"getForm($index)\\\"\\r\\n [fields]=\\\"tab.fields\\\"\\r\\n [model]=\\\"tab.model || model\\\"\\r\\n ></formly-form>\\r\\n\\r\\n }\\r\\n\\r\\n <!-- Custom template -->\\r\\n @if (tab.content) {\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"tab.content; context: { model: model }\\\">\\r\\n </ng-container>\\r\\n }\\r\\n </div>\\r\\n </p-tabpanel>\\r\\n }\\r\\n </p-tabpanels>\\r\\n </p-tabs>\\r\\n</div>\\r\\n\\r\\n<!-- [model]=\\\"model\\\" -->\\r\\n <app-generic-dialog\\r\\n #dialog\\r\\n [formFields]=\\\"formFields ?? []\\\"\\r\\n [apiName]=\\\"apiName\\\"\\r\\n [idField]=\\\"idField ??'id'\\\"\\r\\n [displayMode]=\\\"displayMode ?? 'dialog'\\\"\\r\\n (afterSave)=\\\"afterSave($event)\\\"\\r\\n >\\r\\n </app-generic-dialog>\\r\\n}\\r\\n\", dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"ngmodule\", type: ToolbarModule }, { kind: \"component\", type: i2.Toolbar, selector: \"p-toolbar\", inputs: [\"styleClass\", \"ariaLabelledBy\"] }, { kind: \"directive\", type: i3.PrimeTemplate, selector: \"[pTemplate]\", inputs: [\"type\", \"pTemplate\"] }, { kind: \"ngmodule\", type: ButtonModule }, { kind: \"directive\", type: i4.ButtonDirective, selector: \"[pButton]\", inputs: [\"iconPos\", \"loadingIcon\", \"loading\", \"severity\", \"raised\", \"rounded\", \"text\", \"outlined\", \"size\", \"plain\", \"fluid\", \"label\", \"icon\", \"buttonProps\"] }, { kind: \"ngmodule\", type: TabsModule }, { kind: \"component\", type: i5.Tabs, selector: \"p-tabs\", inputs: [\"value\", \"scrollable\", \"lazy\", \"selectOnFocus\", \"showNavigators\", \"tabindex\"], outputs: [\"valueChange\"] }, { kind: \"component\", type: i5.TabPanels, selector: \"p-tabpanels\" }, { kind: \"component\", type: i5.TabPanel, selector: \"p-tabpanel\", inputs: [\"value\"], outputs: [\"valueChange\"] }, { kind: \"component\", type: i5.TabList, selector: \"p-tablist\" }, { kind: \"component\", type: i5.Tab, selector: \"p-tab\", inputs: [\"value\", \"disabled\"], outputs: [\"valueChange\"] }, { kind: \"component\", type: FormlyForm, selector: \"formly-form\", inputs: [\"form\", \"model\", \"fields\", \"options\"], outputs: [\"modelChange\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i6.ɵNgNoValidate, selector: \"form:not([ngNoForm]):not([ngNativeValidate])\" }, { kind: \"directive\", type: i6.NgControlStatusGroup, selector: \"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]\" }, { kind: \"ngmodule\", type: ReactiveFormsModule }, { kind: \"directive\", type: i6.FormGroupDirective, selector: \"[formGroup]\", inputs: [\"formGroup\"], outputs: [\"ngSubmit\"], exportAs: [\"ngForm\"] }, { kind: \"ngmodule\", type: TranslateModule }, { kind: \"component\", type: BreadcrumbComponent, selector: \"app-breadcrumb\", inputs: [\"breadcrumb\"] }, { kind: \"ngmodule\", type: TooltipModule }, { kind: \"directive\", type: i7.Tooltip, selector: \"[pTooltip]\", inputs: [\"tooltipPosition\", \"tooltipEvent\", \"positionStyle\", \"tooltipStyleClass\", \"tooltipZIndex\", \"escape\", \"showDelay\", \"hideDelay\", \"life\", \"positionTop\", \"positionLeft\", \"autoHide\", \"fitContent\", \"hideOnEscape\", \"pTooltip\", \"tooltipDisabled\", \"tooltipOptions\", \"appendTo\"] }, { kind: \"component\", type: GenericDialogComponent, selector: \"app-generic-dialog\", inputs: [\"form\", \"service\", \"formFields\", \"model\", \"apiName\", \"idField\", \"dialogMaxWidth\", \"displayMode\", \"mode\", \"forceState\", \"drawerVisible\", \"dialogVisible\", \"isViewMode\", \"isEditMode\", \"useConfirmOnSave\", \"loading\", \"errorMsg\", \"errorMessage\", \"beforeSaveTransform\", \"hideTable\", \"autoShowForm\"], outputs: [\"action\", \"afterSave\", \"afterDelete\", \"beforeSave\", \"beforeDelete\", \"formCancel\", \"formInit\", \"dataLoaded\", \"selectionChange\", \"error\", \"visibleChange\"] }, { kind: \"component\", type: GenericButton, selector: \"lib-generic-button\", inputs: [\"model\", \"type\", \"icon\", \"label\", \"variant\", \"severity\", \"size\", \"iconPosition\", \"disabled\", \"loading\", \"ariaLabel\", \"extraClasses\", \"permission\"], outputs: [\"clicked\", \"itemClick\"] }, { kind: \"ngmodule\", type: ProgressSpinnerModule }, { kind: \"component\", type: i8.ProgressSpinner, selector: \"p-progressSpinner, p-progress-spinner, p-progressspinner\", inputs: [\"styleClass\", \"strokeWidth\", \"fill\", \"animationDuration\", \"ariaLabel\"] }, { kind: \"pipe\", type: i9.TranslatePipe, name: \"translate\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'app-detail-view', standalone: true, imports: [\n CommonModule,\n ToolbarModule,\n ButtonModule,\n TabsModule,\n FormlyForm,\n FormsModule,\n ReactiveFormsModule,\n TranslateModule,\n BreadcrumbComponent,\n TooltipModule,\n GenericDialogComponent,\n GenericButton,\n ProgressSpinnerModule\n ], template: \"\\r\\n@if (mode === 'detail') {\\r\\n<div class=\\\"w-full flex flex-col gap-3\\\">\\r\\n <!-- overlay -->\\r\\n <div *ngIf=\\\"loading\\\"\\r\\n class=\\\"absolute inset-0 bg-white/70 flex items-center justify-center z-50\\\">\\r\\n <p-progress-spinner/>\\r\\n </div>\\r\\n\\r\\n <!-- actual content -->\\r\\n <!-- Toolbar -->\\r\\n <p-toolbar style=\\\"background: transparent;border: 0px;box-shadow: none;\\\" class=\\\"bg-transparent shadow-none border-none rounded-md px-3\\\">\\r\\n <ng-template pTemplate=\\\"left\\\">\\r\\n <!-- <span class=\\\"font-semibold text-lg xs:hidden block\\\">{{ title }}</span> -->\\r\\n <app-breadcrumb class=\\\"xs:block\\\" [breadcrumb]=\\\"breadcrumb\\\"></app-breadcrumb> <!-- xs:block hidden -->\\r\\n </ng-template>\\r\\n <ng-template pTemplate=\\\"right\\\">\\r\\n <div class=\\\"flex gap-2\\\">\\r\\n\\r\\n <button\\r\\n pButton pRipple\\r\\n icon=\\\"pi pi-chevron-right\\\"\\r\\n class=\\\"p-button-text p-button-sm fd-btn\\\"\\r\\n pTooltip=\\\"\\u0627\\u0644\\u062A\\u0627\\u0644\\u064A\\\"\\r\\n (click)=\\\"next()\\\"\\r\\n ></button>\\r\\n <button\\r\\n pButton pRipple\\r\\n icon=\\\"pi pi-chevron-left\\\"\\r\\n class=\\\"p-button-text p-button-sm fd-btn\\\"\\r\\n pTooltip=\\\"\\u0627\\u0644\\u0633\\u0627\\u0628\\u0642\\\"\\r\\n (click)=\\\"previous()\\\"\\r\\n ></button>\\r\\n </div>\\r\\n </ng-template>\\r\\n </p-toolbar>\\r\\n <p-toolbar class=\\\"bg-white shadow rounded-md px-3\\\">\\r\\n\\r\\n <ng-template pTemplate=\\\"left\\\">\\r\\n @if (isViewMode) {\\r\\n <div class=\\\"flex gap-1\\\">\\r\\n @for (action of actions_; track $index) {\\r\\n <button\\r\\n pButton pRipple\\r\\n [icon]=\\\"action.icon ?? ''\\\"\\r\\n [label]=\\\"(action.label ?? '') | translate\\\"\\r\\n class=\\\"fd-btn\\\"\\r\\n (click)=\\\"onAction(action,model)\\\"\\r\\n ></button>\\r\\n }\\r\\n </div>\\r\\n }\\r\\n </ng-template>\\r\\n <ng-template pTemplate=\\\"right\\\">\\r\\n @if (isEditMode || isCreateMode) {\\r\\n <div class=\\\"flex gap-1\\\">\\r\\n @for (btn of createEditActions; track $index) {\\r\\n @if (!btn.visible || (btn.visible && btn.visible === true)) {\\r\\n @if (btn.type === 'submit' && inlineForm) {\\r\\n <lib-generic-button\\r\\n [type]=\\\"'submit'\\\"\\r\\n [loading]=\\\"inlineForm.loading\\\"\\r\\n [disabled]=\\\"inlineForm.loading || form.invalid\\\"\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"inlineForm.onSubmit()\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n @else{\\r\\n <lib-generic-button\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"handleCreateEditAction(btn)\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n }\\r\\n }\\r\\n </div>\\r\\n }\\r\\n </ng-template>\\r\\n\\r\\n </p-toolbar>\\r\\n\\r\\n <!-- Tabs -->\\r\\n <p-tabs value=\\\"0\\\">\\r\\n <p-tablist>\\r\\n @for (tab of tabs_; track $index) {\\r\\n <p-tab value=\\\"{{$index}}\\\">\\r\\n <i [class]=\\\"tab.icon\\\"></i>\\r\\n <span class=\\\"mr-1 ml-1\\\">{{ tab.header }}</span>\\r\\n </p-tab>\\r\\n }\\r\\n </p-tablist>\\r\\n <p-tabpanels>\\r\\n @for (tab of tabs_; track $index) {\\r\\n <p-tabpanel value=\\\"{{$index}}\\\">\\r\\n\\r\\n <!-- Formly fields -->\\r\\n <!-- p-4 grid grid-cols-1 md:grid-cols-2 gap-4 -->\\r\\n <div class=\\\"border border-surface p-4\\\">\\r\\n @if (tab.fields.length && $index === 0) {\\r\\n\\r\\n <form *ngIf=\\\"form\\\" [formGroup]=\\\"form\\\">\\r\\n @if (tab.fields.length && $index === 0 ) {\\r\\n @if (isEditMode || isCreateMode) {\\r\\n <app-generic-dialog\\r\\n #inlineForm\\r\\n [form]=\\\"form\\\"\\r\\n [model]=\\\"model\\\"\\r\\n [formFields]=\\\"formFields ?? []\\\"\\r\\n [apiName]=\\\"apiName\\\"\\r\\n [idField]=\\\"idField ??'id'\\\"\\r\\n [displayMode]=\\\"'inline'\\\"\\r\\n [mode]=\\\"'form-only'\\\"\\r\\n [forceState]=\\\"isCreateMode ? 'create':'edit'\\\"\\r\\n (afterSave)=\\\"afterSave($event)\\\"\\r\\n >\\r\\n </app-generic-dialog>\\r\\n}\\r\\n@else if(isViewMode){\\r\\n <formly-form\\r\\n [form]=\\\"form\\\"\\r\\n [fields]=\\\"tab.fields\\\"\\r\\n [model]=\\\"model\\\"\\r\\n ></formly-form>\\r\\n}\\r\\n}\\r\\n </form>\\r\\n\\r\\n }\\r\\n @if (tab.fields.length && $index > 0) {\\r\\n\\r\\n\\r\\n <formly-form\\r\\n [form]=\\\"getForm($index)\\\"\\r\\n [fields]=\\\"tab.fields\\\"\\r\\n [model]=\\\"tab.model || model\\\"\\r\\n ></formly-form>\\r\\n\\r\\n }\\r\\n\\r\\n <!-- Custom template -->\\r\\n @if (tab.content) {\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"tab.content; context: { model: model }\\\">\\r\\n </ng-container>\\r\\n }\\r\\n </div>\\r\\n </p-tabpanel>\\r\\n }\\r\\n </p-tabpanels>\\r\\n </p-tabs>\\r\\n</div>\\r\\n\\r\\n<!-- [model]=\\\"model\\\" -->\\r\\n <app-generic-dialog\\r\\n #dialog\\r\\n [formFields]=\\\"formFields ?? []\\\"\\r\\n [apiName]=\\\"apiName\\\"\\r\\n [idField]=\\\"idField ??'id'\\\"\\r\\n [displayMode]=\\\"displayMode ?? 'dialog'\\\"\\r\\n (afterSave)=\\\"afterSave($event)\\\"\\r\\n >\\r\\n </app-generic-dialog>\\r\\n}\\r\\n\" }]\n }], propDecorators: { title: [{\n type: Input\n }], actions: [{\n type: Input\n }], createEditActions: [{\n type: Input\n }], tabs: [{\n type: Input\n }], viewMode: [{\n type: Input\n }], breadcrumb: [{\n type: Input\n }], service: [{\n type: Input\n }], formFields: [{\n type: Input\n }], apiName: [{\n type: Input\n }], idField: [{\n type: Input\n }], standaloneMode: [{\n type: Input\n }], isViewMode: [{\n type: Input\n }], isCreateMode: [{\n type: Input\n }], isEditMode: [{\n type: Input\n }], model: [{\n type: Input\n }], displayMode: [{\n type: Input\n }], mode: [{\n type: Input\n }], action: [{\n type: Output\n }], afterDelete: [{\n type: Output\n }], dialog: [{\n type: ViewChild,\n args: ['dialog']\n }], inlineForm: [{\n type: ViewChild,\n args: ['inlineForm']\n }], loading: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy12aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtdmlldy9zcmMvbGliL2dlbmVyaWMtdmlldy50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXZpZXcvc3JjL2xpYi9nZW5lcmljLXZpZXcuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFxQixNQUFNLGtCQUFrQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlC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LGNBQ2YsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixZQUFZO3dCQUNaLFVBQVU7d0JBQ1YsVUFBVTt3QkFDVixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLGFBQWE7d0JBQ2Isc0JBQXNCO3dCQUN0QixhQUFhO3dCQUNiLHFCQUFxQjtxQkFDdEI7OEJBU1EsS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDSSxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRUUsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNFLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNJLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0UsS0FBSztzQkFBYixLQUFLO2dCQUNJLFdBQVc7c0JBQW5CLEtBQUs7Z0JBV0MsSUFBSTtzQkFBWixLQUFLO2dCQUVPLE1BQU07c0JBQWYsTUFBTTtnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQUVjLE1BQU07c0JBQTFCLFNBQVM7dUJBQUMsUUFBUTtnQkFDTSxVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBUWhCLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFRvb2xiYXJNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Rvb2xiYXInO1xyXG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XHJcbmltcG9ydCB7IEZvcm1seUZvcm0sIEZvcm1seUZpZWxkQ29uZmlnIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRhYnNNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RhYnMnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IEJyZWFkY3J1bWJDb21wb25lbnQgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLnVpLmNvcmUvYnJlYWRjcnVtYic7XHJcbmltcG9ydCB7IEJhc2VTZXJ2aWNlLCBTd2FsU2VydmljZSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBBY3Rpb25EZWYsIEJ1dHRvbkNvbmZpZywgUGFnaW5hdGVkUmVzdWx0IH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL21vZGVscyc7XHJcbmltcG9ydCB7IFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvcHJvZ3Jlc3NzcGlubmVyJztcclxuaW1wb3J0IHsgR2VuZXJpY0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcudWkuY29yZS9nZW5lcmljLWRpYWxvZyc7XHJcbmltcG9ydCB7IEdlbmVyaWNCdXR0b24gfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLnVpLmNvcmUvZ2VuZXJpYy1idXR0b24nO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEZXRhaWxUYWIge1xyXG4gIGhlYWRlcjogc3RyaW5nO1xyXG4gIGljb24/OiBzdHJpbmc7XHJcbiAgZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdO1xyXG4gIG1vZGVsPzogYW55O1xyXG4gIGNvbnRlbnQ/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1kZXRhaWwtdmlldycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBUb29sYmFyTW9kdWxlLFxyXG4gICAgQnV0dG9uTW9kdWxlLFxyXG4gICAgVGFic01vZHVsZSxcclxuICAgIEZvcm1seUZvcm0sXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBUcmFuc2xhdGVNb2R1bGUsXHJcbiAgICBCcmVhZGNydW1iQ29tcG9uZW50LFxyXG4gICAgVG9vbHRpcE1vZHVsZSxcclxuICAgIEdlbmVyaWNEaWFsb2dDb21wb25lbnQsXHJcbiAgICBHZW5lcmljQnV0dG9uLFxyXG4gICAgUHJvZ3Jlc3NTcGlubmVyTW9kdWxlXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ2VuZXJpYy12aWV3Lmh0bWwnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgR2VuZXJpY1ZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHByaXZhdGUgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xyXG4gIHByaXZhdGUgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcblxyXG4gIGZvcm0gPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh7fSk7XHJcblxyXG4gIEBJbnB1dCgpIHRpdGxlID0gJyc7XHJcbiAgQElucHV0KCkgYWN0aW9uczogQWN0aW9uRGVmPGFueT5bXSA9IFtdO1xyXG4gICBASW5wdXQoKSBjcmVhdGVFZGl0QWN0aW9uczogQnV0dG9uQ29uZmlnW10gPSBbXTtcclxuICAgYWN0aW9uc186IEFjdGlvbkRlZjxhbnk+W10gPSBbXTtcclxuICBASW5wdXQoKSB0YWJzOiBEZXRhaWxUYWJbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIHZpZXdNb2RlID0gdHJ1ZTtcclxuICBASW5wdXQoKSBicmVhZGNydW1iOiBNZW51SXRlbVtdIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIHNlcnZpY2U6IEJhc2VTZXJ2aWNlID0gaW5qZWN0KEJhc2VTZXJ2aWNlKTtcclxuICBASW5wdXQoKSBmb3JtRmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW107XHJcbiAgQElucHV0KCkgYXBpTmFtZSA9ICcnO1xyXG4gIEBJbnB1dCgpIGlkRmllbGQgPSAnaWQnO1xyXG4gQElucHV0KCkgc3RhbmRhbG9uZU1vZGUgPSBmYWxzZTtcclxuIEBJbnB1dCgpIGlzVmlld01vZGUgPSB0cnVlOyAvLyDZiNi22Lkg2KfZhNmF2LTYp9mH2K/YqSDZgdmC2LdcclxuIEBJbnB1dCgpIGlzQ3JlYXRlTW9kZSA9IGZhbHNlOyAvLyDZiNi22Lkg2KfZhNin2LbYp9mB2Kkg2YHZgti3XHJcbiAgQElucHV0KCkgaXNFZGl0TW9kZSA9IGZhbHNlOyAvLyDZiNi22Lkg2KfZhNiq2LnYr9mK2YRcclxuIEBJbnB1dCgpIG1vZGVsID0ge307XHJcbiAgQElucHV0KCkgZGlzcGxheU1vZGU6XHJcbiAgICB8ICdkcmF3ZXInXHJcbiAgICB8ICdkaWFsb2cnXHJcbiAgICB8ICdyb3V0ZSdcclxuICAgIHwgJ2lubGluZSdcclxuICAgIHwgUGFydGlhbDxcclxuICAgICAgUmVjb3JkPFxyXG4gICAgICAgICdhZGQnIHwgJ2VkaXQnIHwgJ3ZpZXcnLFxyXG4gICAgICAgICdkcmF3ZXInIHwgJ2RpYWxvZycgfCAncm91dGUnIHwgJ2lubGluZSdcclxuICAgICAgPlxyXG4gICAgPiA9ICdkcmF3ZXInO1xyXG5ASW5wdXQoKSBtb2RlOiAnZnVsbCcgfCAnZm9ybS1vbmx5JyB8ICd0YWJsZS1vbmx5JyB8ICdkZXRhaWwnID0gJ2Z1bGwnO1xyXG5cclxuICAgQE91dHB1dCgpIGFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8eyBuYW1lOiBzdHJpbmc7IHJvdzogYW55IH0+KCk7XHJcbiAgICBAT3V0cHV0KCkgYWZ0ZXJEZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcmVjb3JkOiBhbnk7IHJlc3BvbnNlPzogYW55IH0+KCk7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnZGlhbG9nJykgZGlhbG9nITogR2VuZXJpY0RpYWxvZ0NvbXBvbmVudDtcclxuICAgIEBWaWV3Q2hpbGQoJ2lubGluZUZvcm0nKSBpbmxpbmVGb3JtITogR2VuZXJpY0RpYWxvZ0NvbXBvbmVudDtcclxuXHJcbiAgdGFic186IERldGFpbFRhYltdID0gW107XHJcbiAgbW9kZWxfOiBhbnkgPSB7fTtcclxuXHJcbiAgY3VycmVudElkITogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIGxpc3Q6IGFueVtdID0gW107XHJcbiAgdG90YWxSZWNvcmRzID0gMDtcclxuICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gIC8vIHBhZ2luYXRpb24gc3RhdGVcclxuICBwYWdlU2l6ZSA9IDEwO1xyXG4gIHBhZ2VJbmRleCA9IDA7XHJcbiAgc29ydCA9ICcnO1xyXG4gIGN1cnJlbnRGaWx0ZXJzOiBhbnkgPSB7fTtcclxuICBwYWdlRmlsdGVyczogYW55ID0ge307XHJcbiAgc2VhcmNoR2xvYmFsID0gJyc7XHJcbiBwcml2YXRlIHN3YWxTZXJ2aWNlID0gaW5qZWN0KFN3YWxTZXJ2aWNlKTtcclxuXHJcbiBfbG9jYXRpb246IExvY2F0aW9uID0gaW5qZWN0KExvY2F0aW9uKTtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMuYXBpTmFtZSkge1xyXG4gICAgICB0aGlzLnNlcnZpY2UuYXBpTmFtZSA9IHRoaXMuYXBpTmFtZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5hY3Rpb25zXyA9IHRoaXMuYWN0aW9ucy5maWx0ZXIoYz0+Yy5uYW1lICE9ICd2aWV3Jyk7XHJcblxyXG4gICAgICB0aGlzLnJvdXRlLnBhcmFtTWFwLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpZCA9IHBhcmFtcy5nZXQodGhpcy5pZEZpZWxkKTtcclxuICAgICAgICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SWQgPSBpZDtcclxuICAgICAgICAgICAgICAgaWYodGhpcy5zdGFuZGFsb25lTW9kZSl7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkTGlzdCgpO1xyXG4gICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcblxyXG4gICAgICAgICAgfSk7XHJcblxyXG5cclxuICB9XHJcblxyXG4gIHJlZnJlc2goKXtcclxuXHJcbiAgICAvLyBkZXRlY3QgbW9kZSBiYXNlZCBvbiByb3V0ZVxyXG4gIGNvbnN0IHVybCA9IHRoaXMucm91dGVyLnVybC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgIHRoaXMuaXNWaWV3TW9kZSA9IHVybC5pbmNsdWRlcygnL3ZpZXcnKTtcclxuICB0aGlzLmlzRWRpdE1vZGUgPSB1cmwuaW5jbHVkZXMoJy9lZGl0Jyk7XHJcbiAgdGhpcy5pc0NyZWF0ZU1vZGUgPSB1cmwuaW5jbHVkZXMoJy9jcmVhdGUnKSB8fCB1cmwuZW5kc1dpdGgoJy9uZXcnKSB8fCB1cmwuZW5kc1dpdGgoJy9hZGQnKTtcclxuXHJcbiAgdGhpcy50YWJzXyA9IFtdO1xyXG5mb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudGFicy5sZW5ndGg7IGkrKykge1xyXG4gIGNvbnN0IHQgPSB0aGlzLnRhYnNbaV07XHJcbiAgdGhpcy50YWJzXy5wdXNoKHtcclxuICAgIC4uLnQsXHJcbiAgICBmaWVsZHM6IFtcclxuICAgICAge1xyXG4gICAgICAgIHByb3BzOiB7IGxhYmVsOiAnJyB9LFxyXG4gICAgICAgIGZpZWxkR3JvdXBDbGFzc05hbWU6ICdncmlkIGdyaWQtY29scy0xIG1kOmdyaWQtY29scy0yIGdhcC0zJyxcclxuICAgICAgICBmaWVsZEdyb3VwOlxyXG4gICAgICAgICAgdGhpcy5pc0NyZWF0ZU1vZGUgfHwgdGhpcy5pc0VkaXRNb2RlXHJcbiAgICAgICAgICAgID8gdGhpcy5nZXRDcmVhdGVFZGl0RmllbGRzKGkgPT0gMCA/IHRoaXMuZm9ybUZpZWxkczogdC5maWVsZHMpXHJcbiAgICAgICAgICAgIDogdGhpcy5nZXRWaWV3RmllbGRzKGkgPT0gMCA/IHRoaXMuZm9ybUZpZWxkcyA6IHQuZmllbGRzKSxcclxuICAgICAgfSxcclxuICAgIF0sXHJcbiAgfSk7XHJcbn1cclxudGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgfVxyXG4gIC8vIGFzIGZvcm1cclxuICAgZ2V0Q3JlYXRlRWRpdEZpZWxkcyhmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXSk6IEZvcm1seUZpZWxkQ29uZmlnW10ge1xyXG4gICAgcmV0dXJuIGZpZWxkcy5tYXAoZiA9PiAoe1xyXG4gICAgICAuLi5mLFxyXG4gICAgICBwcm9wczogeyAuLi5mLnByb3BzLCByZWFkb25seTogdGhpcy52aWV3TW9kZSwgZGlzYWJsZWQ6IHRoaXMudmlld01vZGUgfSxcclxuICAgIH0pKTtcclxuICB9XHJcbiAgZ2V0Vmlld0ZpZWxkcyhmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXSk6IEZvcm1seUZpZWxkQ29uZmlnW10ge1xyXG4gIGNvbnN0IGZsYXR0ZW4gPSAoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdKTogRm9ybWx5RmllbGRDb25maWdbXSA9PlxyXG4gICAgZmllbGRzLmZsYXRNYXAoZmllbGQgPT4ge1xyXG5cclxuICAgICAgLy8gMS4gSEFORExFIE5PUk1BTCBGSUVMRCBHUk9VUFxyXG4gICAgICBpZiAoZmllbGQuZmllbGRHcm91cD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZsYXR0ZW4oZmllbGQuZmllbGRHcm91cCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIDIuIEhBTkRMRSBGSUVMRCBBUlJBWSAoUkVQRUFUKVxyXG4gICAgICAgICAgIGNvbnN0IGZpZWxkQXJyYXlDb25maWcgPVxyXG4gICAgICAgICAgdHlwZW9mIGZpZWxkLmZpZWxkQXJyYXkgPT09ICdmdW5jdGlvbidcclxuICAgICAgICAgICAgPyBmaWVsZC5maWVsZEFycmF5KGZpZWxkKVxyXG4gICAgICAgICAgICA6IGZpZWxkLmZpZWxkQXJyYXk7XHJcblxyXG4gICAgICBpZiAoZmllbGQuZmllbGRBcnJheSkge1xyXG5cclxuICAgICAgICAvLyBJZiB0aGUgd2hvbGUgYXJyYXkgaXMgaGlkZGVuIGluIHZpZXcsIHNraXAgaXRcclxuICAgICAgICBpZiAoZmllbGQucHJvcHMgJiYgKFxyXG4gICAgICAgICAgZmllbGQucHJvcHNbJ3ZpZXcnXT8uaGlkZGVuKVxyXG4gICAgICAgICkgcmV0dXJuIFtdO1xyXG5cclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGZsYXR0ZW4oZmllbGRBcnJheUNvbmZpZz8uZmllbGRHcm91cHx8IFtdKTtcclxuXHJcbiAgICAgICAgLy8gSUYgTk8gQ0hJTERSRU4gUkVUVVJOIEVNUFRZXHJcbiAgICAgICAgaWYgKCFjaGlsZHJlbi5sZW5ndGgpIHJldHVybiBbXTtcclxuXHJcbiAgICAgICAgLy8gUmV0dXJuIGNvcHkgb2YgcmVwZWF0IHdyYXBwZXIgYnV0IGluIHZpZXctbW9kZVxyXG4gICAgICAgIHJldHVybiBbe1xyXG4gICAgICAgICAgLi4uZmllbGQsXHJcbiAgICAgICAgICB0eXBlOiBmaWVsZC5wcm9wcyA/IGZpZWxkLnByb3BzWyd2aWV3J10/LnR5cGUgfHwgZmllbGQudHlwZSA6ICAnY3VzdG9tLWxhYmVsLXR5cGUnLFxyXG4gICAgICAgICAgcmVhZG9ubHk6IHRoaXMudmlld01vZGUsXHJcbiAgICAgICAgICBkaXNhYmxlZDogdGhpcy52aWV3TW9kZSxcclxuICAgICAgICAgIGZpZWxkQXJyYXk6IHtcclxuICAgICAgICAgICAgLi4uZmllbGRBcnJheUNvbmZpZyxcclxuICAgICAgICAgICAgZmllbGRHcm91cDogY2hpbGRyZW5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gMy4gTk9STUFMIEZJRUxEIChTSU5HTEUpXHJcbiAgICAgIGlmIChcclxuICAgICAgICAhZmllbGQucHJvcHMgfHxcclxuICAgICAgICBmaWVsZC5wcm9wc1sndmlldyddPy5oaWRkZW5cclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCB0eXBlID1cclxuICAgICAgICBmaWVsZC5wcm9wc1sndmlldyddPy50eXBlIHx8XHJcbiAgICAgICAgZmllbGQucHJvcHNbJ3RhYmxlJ10/LnR5cGUgfHxcclxuICAgICAgICBmaWVsZC5wcm9wc1snZmlsdGVyJ10/LnR5cGUgfHxcclxuICAgICAgICAnY3VzdG9tLWxhYmVsLXR5cGUnO1xyXG5cclxuICAgICAgcmV0dXJuIFt7XHJcbiAgICAgICAgdHlwZSxcclxuICAgICAgICBrZXk6IGZpZWxkLmtleSxcclxuICAgICAgICByZWFkb25seTogdGhpcy52aWV3TW9kZSxcclxuICAgICAgICBkaXNhYmxlZDogdGhpcy52aWV3TW9kZSxcclxuICAgICAgICB3cmFwcGVyczogZmllbGQud3JhcHBlcnMgPz8gWydmaWVsZC13cmFwcGVyJ10sXHJcbiAgICAgICAgY2xhc3NOYW1lOiBmaWVsZC5jbGFzc05hbWUsXHJcbiAgICAgICAgcHJvcHM6IHtcclxuICAgICAgICAgIC4uLmZpZWxkLnByb3BzLFxyXG4gICAgICAgICAgLi4uKGZpZWxkLnByb3BzWyd2aWV3J10/LnByb3BzIHx8XHJcbiAgICAgICAgICAgIGZpZWxkLnByb3BzWyd0YWJsZSddPy5wcm9wcyB8fFxyXG4gICAgICAgICAgICBmaWVsZC5wcm9wc1snZmlsdGVyJ10/LnByb3BzIHx8XHJcbiAgICAgICAgICAgIHt9KSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGV4cHJlc3Npb25zOlxyXG4gICAgICAgICAgZmllbGQucHJvcHNbJ3ZpZXcnXT8uZXhwcmVzc2lvbnMgfHxcclxuICAgICAgICAgIGZpZWxkLnByb3BzWyd0YWJsZSddPy5leHByZXNzaW9ucyB8fFxyXG4gICAgICAgICAgZmllbGQucHJvcHNbJ2ZpbHRlciddPy5leHByZXNzaW9uc1xyXG4gICAgICB9XTtcclxuICAgIH0pO1xyXG5cclxuICByZXR1cm4gZmxhdHRlbihmaWVsZHMpO1xyXG59XHJcblxyXG4gIC8vIGdldFZpZXdGaWVsZHMoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW10pOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcclxuICAvLyAgIGNvbnN0IGZsYXR0ZW4gPSAoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdKTogRm9ybWx5RmllbGRDb25maWdbXSA9PlxyXG4gIC8vICAgICBmaWVsZHMuZmxhdE1hcChmaWVsZCA9PiB7XHJcbiAgLy8gICAgICAgaWYgKGZpZWxkLmZpZWxkR3JvdXA/Lmxlbmd0aCkgcmV0dXJuIGZsYXR0ZW4oZmllbGQuZmllbGRHcm91cCk7XHJcbiAgLy8gICAgICAgaWYgKCFmaWVsZC5wcm9wc1xyXG4gIC8vICAgICAgICAgfHwgZmllbGQucHJvcHNbJ3ZpZXcnXT8uaGlkZGVuXHJcbiAgLy8gICAgICAgICAvLyB8fCBmaWVsZC5wcm9wc1sndGFibGUnXT8uaGlkZGVuXHJcbiAgLy8gICAgICAgICkgcmV0dXJuIFtdO1xyXG5cclxuICAvLyAgICAgICBjb25zdCB0eXBlID0gZmllbGQucHJvcHNbJ3ZpZXcnXT8udHlwZSB8fCBmaWVsZC5wcm9wc1sndGFibGUnXT8udHlwZSB8fCAnY3VzdG9tLWxhYmVsLXR5cGUnO1xyXG4gIC8vICAgICAgIHJldHVybiBbe1xyXG4gIC8vICAgICAgICAgdHlwZSxcclxuICAvLyAgICAgICAgIGtleTogZmllbGRbJ2tleSddLFxyXG4gIC8vICAgICAgICAgcmVhZG9ubHk6IHRoaXMudmlld01vZGUsXHJcbiAgLy8gICAgICAgICBkaXNhYmxlZDogdGhpcy52aWV3TW9kZSxcclxuICAvLyAgICAgICAgIHdyYXBwZXJzOiBmaWVsZC53cmFwcGVycyA/PyBbJ2ZpZWxkLXdyYXBwZXInXSxcclxuICAvLyAgICAgICAgIHByb3BzOiB7XHJcbiAgLy8gICAgICAgICAgIC4uLmZpZWxkLnByb3BzLFxyXG4gIC8vICAgICAgICAgICAuLi4oZmllbGQucHJvcHNbJ3ZpZXcnXT8ucHJvcHMgfHwgZmllbGQucHJvcHNbJ3RhYmxlJ10/LnByb3BzKSxcclxuICAvLyAgICAgICAgIH0sXHJcbiAgLy8gICAgICAgICBleHByZXNzaW9uczogZmllbGQucHJvcHNbJ3ZpZXcnXT8uZXhwcmVzc2lvbnMgfHwgZmllbGQucHJvcHNbJ3ZpZXcnXT8uZXhwcmVzc2lvbnMsXHJcbiAgLy8gICAgICAgfV07XHJcbiAgLy8gICAgIH0pO1xyXG5cclxuICAvLyAgIHJldHVybiBmbGF0dGVuKGZpZWxkcyk7XHJcbiAgLy8gfVxyXG5cclxuICAgICAvLyBVc2UgYSBtYXAgdG8gc3RvcmUgZm9ybSBncm91cHMgZm9yIGVhY2ggcm93IGFuZCBjb2x1bW5cclxuICBwcml2YXRlIGNlbGxGb3JtczogTWFwPHN0cmluZywgRm9ybUdyb3VwPiA9IG5ldyBNYXAoKTtcclxuICAgIGdldEZvcm0ocm93SW5kZXg6IG51bWJlcik6IEZvcm1Hcm91cCB7XHJcbiAgICBjb25zdCBrZXkgPSBgJHtyb3dJbmRleH1fYDtcclxuICAgIGxldCBmb3JtID0gdGhpcy5jZWxsRm9ybXMuZ2V0KGtleSk7XHJcblxyXG4gICAgaWYgKCFmb3JtKSB7XHJcbiAgICAgIGZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgICAgdGhpcy5jZWxsRm9ybXMuc2V0KGtleSwgZm9ybSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ybTtcclxuICB9XHJcblxyXG5cclxuICAgYXN5bmMgaGFuZGxlQ3JlYXRlRWRpdEFjdGlvbihidG46IEJ1dHRvbkNvbmZpZykge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKGJ0bi5hY3Rpb24pIHtcclxuICAgICAgICAvLyBFeGVjdXRlIHRoZSBwcm92aWRlZCBhY3Rpb25cclxuICAgICAgICBhd2FpdCBidG4uYWN0aW9uKG51bGwpOyAvLyBZb3UgY2FuIHBhc3Mgcm93IG9yIGNvbnRleHQgaGVyZVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIEZhbGxiYWNrIHRvIGVtaXR0aW5nIGV2ZW50XHJcbiAgICAgICAgaWYoYnRuLmFjdGlvbk5hbWUgPT0gJ2NhbmNlbCcpe1xyXG4gICAgICAgICAgdGhpcy5iYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgdGhpcy5hY3Rpb24uZW1pdCh7XHJcbiAgICAgICAgICBuYW1lOiBidG4uYWN0aW9uTmFtZSA/PyAnY2FuY2VsJyxcclxuICAgICAgICAgIHJvdzogbnVsbCEsIC8vIHByb3ZpZGUgcm93IGlmIGF2YWlsYWJsZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdCdXR0b24gYWN0aW9uIGVycm9yJywgZXJyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxub25BY3Rpb24oYWN0OiBBY3Rpb25EZWY8YW55PiwgbW9kZWw6IGFueSkge1xyXG4gICAgaWYgKGFjdC5hY3Rpb24pIHtcclxuICAgICAgYWN0LmFjdGlvbihtb2RlbCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyB0aGlzLmFjdGlvbi5lbWl0KHsgbmFtZTogYWN0Lm5hbWUsIHJvdzptb2RlbCB9KTtcclxuICAgICAgdGhpcy5lbWl0QWN0aW9uKHsgbmFtZTogYWN0Lm5hbWUsIHJvdzptb2RlbCB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICAgZW1pdEFjdGlvbihldmVudDogeyBuYW1lOiBzdHJpbmc7IHJvdzogYW55IHwgbnVsbCB9KTogdm9pZCB7XHJcbiAgc3dpdGNoIChldmVudC5uYW1lKSB7XHJcbiAgICBjYXNlICdlZGl0JzpcclxuICAgICAgdGhpcy5kaWFsb2cub3BlbkZvcm0oXCJlZGl0XCIsZXZlbnQucm93KTtcclxuICAgICAgYnJlYWs7XHJcbiAgICBjYXNlICdkZWxldGUnOlxyXG4gICAgICB0aGlzLm9uRGVsZXRlKGV2ZW50LnJvdyEpO1xyXG4gICAgICBicmVhaztcclxuICAgIGRlZmF1bHQgOlxyXG4gICAgICB0aGlzLmFjdGlvbi5lbWl0KGV2ZW50KTtcclxuICAgICAgYnJlYWs7XHJcbiAgfVxyXG59XHJcblxyXG5vbkRlbGV0ZShpdGVtOiBhbnkpOiB2b2lkIHtcclxuICBjb25zdCBpZCA9IGl0ZW1bdGhpcy5pZEZpZWxkXTtcclxuXHJcbiAgdGhpcy5zd2FsU2VydmljZS5jb25maXJtKFxyXG4gICAgJ9iq2KPZg9mK2K8g2KfZhNit2LDZgScsXHJcbiAgICAn2YfZhCDYqtix2YrYryDYrdiw2YEg2YfYsNinINin2YTYs9is2YQg2YHYudmE2KfZi9ifJyxcclxuICAgICfZhti52YXYjCDYp9it2LDZgScsXHJcbiAgICAn2KXZhNi62KfYoSdcclxuICApLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgaWYgKHJlc3VsdC5pc0NvbmZpcm1lZCkge1xyXG4gICAgICB0aGlzLnNlcnZpY2UuZGVsZXRlKGlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc3dhbFNlcnZpY2Uuc3VjY2Vzcygn2KrZhSDYp9mE2K3YsNmBINio2YbYrNin2K0nKTtcclxuICAgICAgICAgIHRoaXMuYmFjaygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuIGFmdGVyU2F2ZShldmVudDogYW55KSB7XHJcbiAgdGhpcy5tb2RlbCA9IGV2ZW50LnJlc3BvbnNlO1xyXG5cclxuICAvLyBzZXQgdGhlIGlkIGZyb20gYmFja2VuZCByZXNwb25zZVxyXG4gIHRoaXMuY3VycmVudElkID0gZXZlbnQucmVzcG9uc2VbdGhpcy5pZEZpZWxkXTtcclxuXHJcbiAgaWYgKHRoaXMuaXNDcmVhdGVNb2RlKSB7XHJcbiAgICB0aGlzLmdvVG9Nb2RlKCd2aWV3Jyk7XHJcbiAgfSBlbHNlIGlmICh0aGlzLmlzRWRpdE1vZGUpIHtcclxuICAgIHRoaXMuZ29Ub01vZGUoJ3ZpZXcnKTtcclxuICB9XHJcbn1cclxuXHJcblxyXG5cclxuZ29Ub01vZGUobW9kZTogJ3ZpZXcnIHwgJ2VkaXQnIHwgJ2NyZWF0ZScpIHtcclxuICBjb25zdCB0cmVlID0gdGhpcy5yb3V0ZXIucGFyc2VVcmwodGhpcy5yb3V0ZXIudXJsKTtcclxuICBjb25zdCBzZWdtZW50cyA9IHRyZWUucm9vdC5jaGlsZHJlblsncHJpbWFyeSddPy5zZWdtZW50cy5tYXAocyA9PiBzLnBhdGgpID8/IFtdO1xyXG5cclxuICBsZXQgbmV3U2VnbWVudHM6IHN0cmluZ1tdO1xyXG5cclxuICBpZiAobW9kZSA9PT0gJ2NyZWF0ZScpIHtcclxuICAgIC8vIGFsd2F5cyBuYXZpZ2F0ZSB0byBcImFkZFwiXHJcbiAgICBuZXdTZWdtZW50cyA9IFtcclxuICAgICAgLi4uc2VnbWVudHMuZmlsdGVyKHMgPT4gIVsndmlldycsICdlZGl0JywgJ2FkZCddLmluY2x1ZGVzKHMpKSxcclxuICAgICAgJ2FkZCcsXHJcbiAgICBdO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBpZiBpbiBcImFkZFwiIG1vZGUsIHJlcGxhY2UgaXQgd2l0aCB0aGUgbmV3IGlkXHJcbiAgICBpZiAoc2VnbWVudHMuaW5jbHVkZXMoJ2FkZCcpKSB7XHJcbiAgICAgIG5ld1NlZ21lbnRzID0gW1xyXG4gICAgICAgIC4uLnNlZ21lbnRzLmZpbHRlcihzID0+IHMgIT09ICdhZGQnKSxcclxuICAgICAgICBTdHJpbmcodGhpcy5jdXJyZW50SWQpLFxyXG4gICAgICAgIG1vZGUsXHJcbiAgICAgIF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBpZEluZGV4ID0gc2VnbWVudHMuZmluZEluZGV4KHMgPT4gcyA9PT0gU3RyaW5nKHRoaXMuY3VycmVudElkKSk7XHJcbiAgICAgIGlmIChpZEluZGV4ID09PSAtMSkge1xyXG4gICAgICAgIG5ld1NlZ21lbnRzID0gWy4uLnNlZ21lbnRzLCBTdHJpbmcodGhpcy5jdXJyZW50SWQpLCBtb2RlXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuZXdTZWdtZW50cyA9IHNlZ21lbnRzLnNsaWNlKDAsIGlkSW5kZXggKyAxKTtcclxuICAgICAgICBuZXdTZWdtZW50cy5wdXNoKG1vZGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShuZXdTZWdtZW50cyk7XHJcbiAgdGhpcy5yZWZyZXNoKCk7XHJcbn1cclxuXHJcblxyXG5iYWNrVG9MaXN0KCl7XHJcbiAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uLyddKTtcclxuICAgIH1cclxuYmFjaygpe1xyXG4gICAgICAvLyAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLiddKTtcclxuICAgICAgIHRoaXMuX2xvY2F0aW9uLmJhY2soKVxyXG4gICAgfVxyXG4gIGxvYWRMaXN0KCkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IGZpbHRlcnMgPSB7XHJcbiAgICAgIG1heFJlc3VsdENvdW50OiB0aGlzLnBhZ2VTaXplLFxyXG4gICAgICBza2lwQ291bnQ6IHRoaXMucGFnZUluZGV4ICogdGhpcy5wYWdlU2l6ZSxcclxuICAgICAgc29ydGluZzogdGhpcy5zb3J0LFxyXG4gICAgICAuLi50aGlzLmN1cnJlbnRGaWx0ZXJzLFxyXG4gICAgICAuLi50aGlzLnBhZ2VGaWx0ZXJzLFxyXG4gICAgICAuLi4odGhpcy5zZWFyY2hHbG9iYWwgPyB7IGZpbHRlcjogdGhpcy5zZWFyY2hHbG9iYWwgfSA6IHt9KSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zZXJ2aWNlLmdldExpc3QoZmlsdGVycykuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogUGFnaW5hdGVkUmVzdWx0PGFueT4pID0+IHtcclxuICAgICAgICB0aGlzLmxpc3QgPSByZXMuaXRlbXM7XHJcbiAgICAgICAgdGhpcy50b3RhbFJlY29yZHMgPSByZXMudG90YWxDb3VudDtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gc2V0IG1vZGVsXyB0byBjdXJyZW50IGlkIGl0ZW1cclxuICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMubGlzdC5maW5kKHggPT4geFt0aGlzLmlkRmllbGRdID09IHRoaXMuY3VycmVudElkKTtcclxuICAgICAgICBpZiAoZm91bmQpIHtcclxuICAgICAgICAgIHRoaXMubW9kZWxfID0gZm91bmQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIGxpc3QnLCBlcnIpO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiBuZXh0KCkge1xyXG4gIGlmICghdGhpcy5jdXJyZW50SWQpIHJldHVybjtcclxuXHJcbiAgLy8gaW5jcmVtZW50IGN1cnJlbnRJZCBudW1lcmljYWxseVxyXG4gIC8vIGNvbnN0IG5ld0lkID0gTnVtYmVyKHRoaXMuY3VycmVudElkKSArIDE7XHJcbiAgLy8gdGhpcy5jdXJyZW50SWQgPSBuZXdJZDtcclxuICAvLyB1c2UgZ29Ub01vZGUgdG8gbmF2aWdhdGUgYW5kIGtlZXAgbW9kZVxyXG4gIGNvbnN0IGN1cnJlbnRNb2RlID0gdGhpcy5pc0VkaXRNb2RlID8gJ2VkaXQnIDogJ3ZpZXcnO1xyXG4gIC8vIHRoaXMuZ29Ub01vZGUoY3VycmVudE1vZGUpO1xyXG59XHJcblxyXG5wcmV2aW91cygpIHtcclxuICBpZiAoIXRoaXMuY3VycmVudElkKSByZXR1cm47XHJcblxyXG4gIC8vIGRlY3JlbWVudCBjdXJyZW50SWQgbnVtZXJpY2FsbHlcclxuICAvLyBjb25zdCBuZXdJZCA9IE51bWJlcih0aGlzLmN1cnJlbnRJZCkgLSAxO1xyXG4gIC8vIGlmIChuZXdJZCA8PSAwKSByZXR1cm47XHJcblxyXG4gIC8vIHRoaXMuY3VycmVudElkID0gbmV3SWQ7XHJcblxyXG4gIC8vIHVzZSBnb1RvTW9kZSB0byBuYXZpZ2F0ZSBhbmQga2VlcCBtb2RlXHJcbiAgY29uc3QgY3VycmVudE1vZGUgPSB0aGlzLmlzRWRpdE1vZGUgPyAnZWRpdCcgOiAndmlldyc7XHJcbiAgLy8gdGhpcy5nb1RvTW9kZShjdXJyZW50TW9kZSk7XHJcbn1cclxuXHJcblxyXG4gIC8vIG5leHQoKSB7XHJcbiAgLy8gICBjb25zdCBpZHggPSB0aGlzLmxpc3QuZmluZEluZGV4KHggPT4geFt0aGlzLmlkRmllbGRdID09IHRoaXMuY3VycmVudElkKTtcclxuICAvLyAgIGlmIChpZHggPj0gMCAmJiBpZHggPCB0aGlzLmxpc3QubGVuZ3RoIC0gMSkge1xyXG4gIC8vICAgICBjb25zdCBuZXdJZCA9IHRoaXMubGlzdFtpZHggKyAxXVt0aGlzLmlkRmllbGRdO1xyXG4gIC8vICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uLycsIG5ld0lkXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgLy8gcHJldmlvdXMoKSB7XHJcbiAgLy8gICBjb25zdCBpZHggPSB0aGlzLmxpc3QuZmluZEluZGV4KHggPT4geFt0aGlzLmlkRmllbGRdID09IHRoaXMuY3VycmVudElkKTtcclxuICAvLyAgIGlmIChpZHggPiAwKSB7XHJcbiAgLy8gICAgIGNvbnN0IG5ld0lkID0gdGhpcy5saXN0W2lkeCAtIDFdW3RoaXMuaWRGaWVsZF07XHJcbiAgLy8gICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4vJywgbmV3SWRdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG59XHJcblxyXG4iLCJcclxuQGlmIChtb2RlID09PSAnZGV0YWlsJykge1xyXG48ZGl2ICBjbGFzcz1cInctZnVsbCBmbGV4IGZsZXgtY29sIGdhcC0zXCI+XHJcbiAgPCEtLSBvdmVybGF5IC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJsb2FkaW5nXCJcclxuICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgaW5zZXQtMCBiZy13aGl0ZS83MCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB6LTUwXCI+XHJcbiAgICA8cC1wcm9ncmVzcy1zcGlubmVyLz5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBhY3R1YWwgY29udGVudCAtLT5cclxuICA8IS0tIFRvb2xiYXIgLS0+XHJcbiAgPHAtdG9vbGJhciBzdHlsZT1cImJhY2tncm91bmQ6IHRyYW5zcGFyZW50O2JvcmRlcjogMHB4O2JveC1zaGFkb3c6IG5vbmU7XCIgY2xhc3M9XCJiZy10cmFuc3BhcmVudCBzaGFkb3ctbm9uZSBib3JkZXItbm9uZSByb3VuZGVkLW1kIHB4LTNcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJsZWZ0XCI+XHJcbiAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJmb250LXNlbWlib2xkIHRleHQtbGcgeHM6aGlkZGVuIGJsb2NrXCI+e3sgdGl0bGUgfX08L3NwYW4+IC0tPlxyXG4gICAgICA8YXBwLWJyZWFkY3J1bWIgY2xhc3M9XCJ4czpibG9ja1wiIFticmVhZGNydW1iXT1cImJyZWFkY3J1bWJcIj48L2FwcC1icmVhZGNydW1iPiA8IS0tIHhzOmJsb2NrIGhpZGRlbiAtLT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicmlnaHRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTJcIj5cclxuXHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBwQnV0dG9uIHBSaXBwbGVcclxuICAgICAgICBpY29uPVwicGkgcGktY2hldnJvbi1yaWdodFwiXHJcbiAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXNtIGZkLWJ0blwiXHJcbiAgICAgICAgcFRvb2x0aXA9XCLYp9mE2KrYp9mE2YpcIlxyXG4gICAgICAgIChjbGljayk9XCJuZXh0KClcIlxyXG4gICAgICA+PC9idXR0b24+XHJcbiAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgcEJ1dHRvbiBwUmlwcGxlXHJcbiAgICAgICAgaWNvbj1cInBpIHBpLWNoZXZyb24tbGVmdFwiXHJcbiAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXNtIGZkLWJ0blwiXHJcbiAgICAgICAgcFRvb2x0aXA9XCLYp9mE2LPYp9io2YJcIlxyXG4gICAgICAgIChjbGljayk9XCJwcmV2aW91cygpXCJcclxuICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9wLXRvb2xiYXI+XHJcbiAgIDxwLXRvb2xiYXIgY2xhc3M9XCJiZy13aGl0ZSBzaGFkb3cgcm91bmRlZC1tZCBweC0zXCI+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxlZnRcIj5cclxuICAgICAgIEBpZiAoaXNWaWV3TW9kZSkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMVwiPlxyXG4gICAgICAgICAgQGZvciAoYWN0aW9uIG9mIGFjdGlvbnNfOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgcEJ1dHRvbiBwUmlwcGxlXHJcbiAgICAgIFtpY29uXT1cImFjdGlvbi5pY29uID8/ICcnXCJcclxuICAgICAgICAgIFtsYWJlbF09XCIoYWN0aW9uLmxhYmVsID8/ICcnKSB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgY2xhc3M9XCJmZC1idG5cIlxyXG4gICAgICAgIChjbGljayk9XCJvbkFjdGlvbihhY3Rpb24sbW9kZWwpXCJcclxuICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgIH1cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicmlnaHRcIj5cclxuICAgICAgQGlmIChpc0VkaXRNb2RlIHx8IGlzQ3JlYXRlTW9kZSkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMVwiPlxyXG4gICAgICAgQGZvciAoYnRuIG9mIGNyZWF0ZUVkaXRBY3Rpb25zOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgQGlmICghYnRuLnZpc2libGUgfHwgKGJ0bi52aXNpYmxlICYmIGJ0bi52aXNpYmxlID09PSB0cnVlKSkge1xyXG4gICAgICAgICAgICAgICBAaWYgKGJ0bi50eXBlID09PSAnc3VibWl0JyAmJiBpbmxpbmVGb3JtKSB7XHJcbiAgICAgICAgICAgICAgPGxpYi1nZW5lcmljLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgW3R5cGVdPVwiJ3N1Ym1pdCdcIlxyXG4gICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiaW5saW5lRm9ybS5sb2FkaW5nXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpbmxpbmVGb3JtLmxvYWRpbmcgfHwgZm9ybS5pbnZhbGlkXCJcclxuICAgICAgICAgICAgICAgIFtpY29uXT1cImJ0bi5pY29uXCJcclxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJidG4ubGFiZWwgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgW3ZhcmlhbnRdPVwiYnRuLnZhcmlhbnRcIlxyXG4gICAgICAgICAgICAgICAgW3NldmVyaXR5XT1cImJ0bi5zZXZlcml0eVwiXHJcbiAgICAgICAgICAgICAgICBbc2l6ZV09XCJidG4uc2l6ZVwiXHJcbiAgICAgICAgICAgICAgICBbbW9kZWxdPVwiYnRuLnNwbGl0QWN0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICBbcGVybWlzc2lvbl09XCJidG4ucGVybWlzc2lvblwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJpbmxpbmVGb3JtLm9uU3VibWl0KClcIlxyXG4gICAgICAgICAgICAgID48L2xpYi1nZW5lcmljLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICBAZWxzZXtcclxuICAgICAgICAgICAgICAgICA8bGliLWdlbmVyaWMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBbaWNvbl09XCJidG4uaWNvblwiXHJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiYnRuLmxhYmVsIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgIFt2YXJpYW50XT1cImJ0bi52YXJpYW50XCJcclxuICAgICAgICAgICAgICAgIFtzZXZlcml0eV09XCJidG4uc2V2ZXJpdHlcIlxyXG4gICAgICAgICAgICAgICAgW3NpemVdPVwiYnRuLnNpemVcIlxyXG4gICAgICAgICAgICAgICAgW21vZGVsXT1cImJ0bi5zcGxpdEFjdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgW3Blcm1pc3Npb25dPVwiYnRuLnBlcm1pc3Npb25cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwiaGFuZGxlQ3JlYXRlRWRpdEFjdGlvbihidG4pXCJcclxuICAgICAgICAgICAgICA+PC9saWItZ2VuZXJpYy1idXR0b24+XHJcbiAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgfVxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPC9wLXRvb2xiYXI+XHJcblxyXG4gIDwhLS0gVGFicyAtLT5cclxuICA8cC10YWJzIHZhbHVlPVwiMFwiPlxyXG4gICAgPHAtdGFibGlzdD5cclxuICAgICAgIEBmb3IgKHRhYiBvZiB0YWJzXzsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgPHAtdGFiIHZhbHVlPVwie3skaW5kZXh9fVwiPlxyXG4gICAgICAgICAgPGkgW2NsYXNzXT1cInRhYi5pY29uXCI+PC9pPlxyXG4gICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXItMSBtbC0xXCI+e3sgdGFiLmhlYWRlciB9fTwvc3Bhbj5cclxuICAgICAgICA8L3AtdGFiPlxyXG4gICAgICAgfVxyXG4gICAgPC9wLXRhYmxpc3Q+XHJcbiAgICA8cC10YWJwYW5lbHM+XHJcbiAgICAgIEBmb3IgKHRhYiBvZiB0YWJzXzsgdHJhY2sgJGluZGV4KSB7XHJcbiA8cC10YWJwYW5lbCB2YWx1ZT1cInt7JGluZGV4fX1cIj5cclxuXHJcbiAgICAgIDwhLS0gRm9ybWx5IGZpZWxkcyAtLT5cclxuICAgICAgPCEtLSBwLTQgZ3JpZCBncmlkLWNvbHMtMSBtZDpncmlkLWNvbHMtMiBnYXAtNCAtLT5cclxuICAgICAgPGRpdiAgY2xhc3M9XCJib3JkZXIgYm9yZGVyLXN1cmZhY2UgcC00XCI+XHJcbiAgICAgICAgQGlmICh0YWIuZmllbGRzLmxlbmd0aCAmJiAkaW5kZXggPT09IDApIHtcclxuXHJcbiAgICAgICA8Zm9ybSAqbmdJZj1cImZvcm1cIiBbZm9ybUdyb3VwXT1cImZvcm1cIj5cclxuICAgICAgICAgQGlmICh0YWIuZmllbGRzLmxlbmd0aCAmJiAkaW5kZXggPT09IDAgKSB7XHJcbiBAaWYgKGlzRWRpdE1vZGUgfHwgaXNDcmVhdGVNb2RlKSB7XHJcbiAgICAgICAgIDxhcHAtZ2VuZXJpYy1kaWFsb2dcclxuICAgICAgICAgI2lubGluZUZvcm1cclxuICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgICAgICAgIFttb2RlbF09XCJtb2RlbFwiXHJcbiAgICBbZm9ybUZpZWxkc109XCJmb3JtRmllbGRzID8/IFtdXCJcclxuICAgIFthcGlOYW1lXT1cImFwaU5hbWVcIlxyXG4gICAgW2lkRmllbGRdPVwiaWRGaWVsZCA/PydpZCdcIlxyXG4gICAgW2Rpc3BsYXlNb2RlXT1cIidpbmxpbmUnXCJcclxuICAgICBbbW9kZV09XCInZm9ybS1vbmx5J1wiXHJcbiAgICAgW2ZvcmNlU3RhdGVdPVwiaXNDcmVhdGVNb2RlID8gJ2NyZWF0ZSc6J2VkaXQnXCJcclxuICAgIChhZnRlclNhdmUpPVwiYWZ0ZXJTYXZlKCRldmVudClcIlxyXG4gID5cclxuICA8L2FwcC1nZW5lcmljLWRpYWxvZz5cclxufVxyXG5AZWxzZSBpZihpc1ZpZXdNb2RlKXtcclxuIDxmb3JtbHktZm9ybVxyXG4gICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgICAgICAgICBbZmllbGRzXT1cInRhYi5maWVsZHNcIlxyXG4gICAgICAgICAgW21vZGVsXT1cIm1vZGVsXCJcclxuICAgICAgICA+PC9mb3JtbHktZm9ybT5cclxufVxyXG59XHJcbiAgICAgICAgPC9mb3JtPlxyXG5cclxuICAgICAgfVxyXG4gICAgICBAaWYgKHRhYi5maWVsZHMubGVuZ3RoICYmICRpbmRleCA+IDApIHtcclxuXHJcblxyXG4gICAgICAgIDxmb3JtbHktZm9ybVxyXG4gICAgICAgICAgW2Zvcm1dPVwiZ2V0Rm9ybSgkaW5kZXgpXCJcclxuICAgICAgICAgIFtmaWVsZHNdPVwidGFiLmZpZWxkc1wiXHJcbiAgICAgICAgICBbbW9kZWxdPVwidGFiLm1vZGVsIHx8IG1vZGVsXCJcclxuICAgICAgICA+PC9mb3JtbHktZm9ybT5cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIDwhLS0gQ3VzdG9tIHRlbXBsYXRlIC0tPlxyXG4gICAgICBAaWYgKHRhYi5jb250ZW50KSB7XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRhYi5jb250ZW50OyBjb250ZXh0OiB7IG1vZGVsOiBtb2RlbCB9XCI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgICAgIDwvcC10YWJwYW5lbD5cclxuICAgIH1cclxuICAgIDwvcC10YWJwYW5lbHM+XHJcbiAgPC9wLXRhYnM+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSBbbW9kZWxdPVwibW9kZWxcIiAtLT5cclxuICA8YXBwLWdlbmVyaWMtZGlhbG9nXHJcbiAgICAjZGlhbG9nXHJcbiAgICBbZm9ybUZpZWxkc109XCJmb3JtRmllbGRzID8/IFtdXCJcclxuICAgIFthcGlOYW1lXT1cImFwaU5hbWVcIlxyXG4gICAgW2lkRmllbGRdPVwiaWRGaWVsZCA/PydpZCdcIlxyXG4gICAgW2Rpc3BsYXlNb2RlXT1cImRpc3BsYXlNb2RlID8/ICdkaWFsb2cnXCJcclxuICAgIChhZnRlclNhdmUpPVwiYWZ0ZXJTYXZlKCRldmVudClcIlxyXG4gID5cclxuICA8L2FwcC1nZW5lcmljLWRpYWxvZz5cclxufVxyXG4iXX0=","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport * as i0 from \"@angular/core\";\nexport class GenericViewModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericViewModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericViewModule, imports: [CommonModule] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericViewModule, imports: [CommonModule] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericViewModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy12aWV3LW1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXZpZXcvc3JjL2xpYi9nZW5lcmljLXZpZXctbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUsvQyxNQUFNLE9BQU8saUJBQWlCO3VHQUFqQixpQkFBaUI7d0dBQWpCLGlCQUFpQixZQUZsQixZQUFZO3dHQUVYLGlCQUFpQixZQUZsQixZQUFZOzsyRkFFWCxpQkFBaUI7a0JBSDdCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJpY1ZpZXdNb2R1bGUge31cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxpdGUuZnJhbWV3b3JrLW5nLnVpLmNvcmUtZ2VuZXJpYy12aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtdmlldy9zcmMvZWxpdGUuZnJhbWV3b3JrLW5nLnVpLmNvcmUtZ2VuZXJpYy12aWV3LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"elite.framework-ng.ui.core-generic-view.mjs","sources":["../tmp-esm2022/generic-view/lib/generic-view.js","../tmp-esm2022/generic-view/lib/generic-view-module.js","../tmp-esm2022/generic-view/elite.framework-ng.ui.core-generic-view.js"],"sourcesContent":["import { TooltipModule } from 'primeng/tooltip';\nimport { Component, EventEmitter, inject, Input, Output, ViewChild } from '@angular/core';\nimport { CommonModule, Location } from '@angular/common';\nimport { ToolbarModule } from 'primeng/toolbar';\nimport { ButtonModule } from 'primeng/button';\nimport { FormlyForm } from '@ngx-formly/core';\nimport { FormGroup, FormsModule, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms';\nimport { TabsModule } from 'primeng/tabs';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { BreadcrumbComponent } from '@elite.framework/ng.ui.core/breadcrumb';\nimport { BaseService, SwalService } from '@elite.framework/ng.core/services';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\nimport { GenericDialogComponent } from '@elite.framework/ng.ui.core/generic-dialog';\nimport { GenericButton } from '@elite.framework/ng.ui.core/generic-button';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"primeng/toolbar\";\nimport * as i3 from \"primeng/api\";\nimport * as i4 from \"primeng/button\";\nimport * as i5 from \"primeng/tabs\";\nimport * as i6 from \"@angular/forms\";\nimport * as i7 from \"primeng/tooltip\";\nimport * as i8 from \"primeng/progressspinner\";\nimport * as i9 from \"@ngx-translate/core\";\nexport class GenericViewComponent {\n route = inject(ActivatedRoute);\n router = inject(Router);\n form = new UntypedFormGroup({});\n title = '';\n actions = [];\n createEditActions = [];\n actions_ = [];\n tabs = [];\n viewMode = true;\n breadcrumb;\n service = inject(BaseService);\n formFields = [];\n apiName = '';\n idField = 'id';\n standaloneMode = false;\n isViewMode = true; // وضع المشاهدة فقط\n isCreateMode = false; // وضع الاضافة فقط\n isEditMode = false; // وضع التعديل\n model = {};\n displayMode = 'drawer';\n mode = 'full';\n action = new EventEmitter();\n afterDelete = new EventEmitter();\n dialog;\n inlineForm;\n tabs_ = [];\n model_ = {};\n currentId;\n list = [];\n totalRecords = 0;\n loading = false;\n // pagination state\n pageSize = 10;\n pageIndex = 0;\n sort = '';\n currentFilters = {};\n pageFilters = {};\n searchGlobal = '';\n swalService = inject(SwalService);\n _location = inject(Location);\n ngOnInit() {\n this.loading = true;\n if (this.apiName) {\n this.service.apiName = this.apiName;\n }\n this.actions_ = this.actions.filter(c => c.name != 'view');\n this.route.paramMap.subscribe(params => {\n const id = params.get(this.idField);\n if (id) {\n this.currentId = id;\n if (this.standaloneMode) {\n this.loadList();\n }\n }\n this.refresh();\n });\n }\n refresh() {\n // detect mode based on route\n const url = this.router.url.toLowerCase();\n this.isViewMode = url.includes('/view');\n this.isEditMode = url.includes('/edit');\n this.isCreateMode = url.includes('/create') || url.endsWith('/new') || url.endsWith('/add');\n this.tabs_ = [];\n for (let i = 0; i < this.tabs.length; i++) {\n const t = this.tabs[i];\n this.tabs_.push({\n ...t,\n fields: [\n {\n props: { label: '' },\n fieldGroupClassName: 'grid grid-cols-1 md:grid-cols-2 gap-3',\n fieldGroup: this.isCreateMode || this.isEditMode\n ? this.getCreateEditFields(i == 0 ? this.formFields : t.fields)\n : this.getViewFields(i == 0 ? this.formFields : t.fields),\n },\n ],\n });\n }\n this.loading = false;\n }\n // as form\n getCreateEditFields(fields = []) {\n return fields.map(f => ({\n ...f,\n props: { ...f.props, readonly: this.viewMode, disabled: this.viewMode },\n }));\n }\n getViewFields(fields = []) {\n const flatten = (fields) => fields.flatMap((field) => {\n /* 1. GROUP / PANEL / WRAPPER */\n if (field.fieldGroup?.length) {\n const children = flatten(field.fieldGroup);\n if (!children.length)\n return [];\n return [{\n ...field,\n wrappers: field.wrappers,\n props: { ...field.props },\n fieldGroupClassName: field.fieldGroupClassName,\n fieldGroup: children\n }];\n }\n /* 2. FIELD ARRAY (REPEAT / TABLE / MULTI) */\n const fieldArrayConfig = typeof field.fieldArray === 'function'\n ? field.fieldArray(field)\n : field.fieldArray;\n if (field.fieldArray) {\n if (field.props?.['view']?.hidden)\n return [];\n const children = flatten(fieldArrayConfig?.fieldGroup || []);\n if (!children.length)\n return [];\n return [{\n ...field,\n type: field.props?.['view']?.type || field.type,\n readonly: this.viewMode,\n disabled: this.viewMode,\n fieldArray: {\n ...fieldArrayConfig,\n fieldGroup: children\n }\n }];\n }\n /* 3. SINGLE FIELD */\n if (!field.props || field.props['view']?.hidden)\n return [];\n const type = field.props['view']?.type ||\n field.props['table']?.type ||\n field.props['filter']?.type ||\n 'custom-label-type';\n return [{\n type,\n key: field.key,\n readonly: this.viewMode,\n disabled: this.viewMode,\n wrappers: field.wrappers ?? ['field-wrapper'],\n className: field.className,\n props: {\n ...field.props,\n ...(field.props['view']?.props ||\n field.props['table']?.props ||\n field.props['filter']?.props ||\n {}),\n },\n expressions: field.props['view']?.expressions ||\n field.props['table']?.expressions ||\n field.props['filter']?.expressions\n }];\n });\n return flatten(fields);\n }\n // getViewFields(fields: FormlyFieldConfig[] = []): FormlyFieldConfig[] {\n // const flatten = (fields: FormlyFieldConfig[]): FormlyFieldConfig[] =>\n // fields.flatMap(field => {\n // if (field.fieldGroup?.length) return flatten(field.fieldGroup);\n // if (!field.props\n // || field.props['view']?.hidden\n // // || field.props['table']?.hidden\n // ) return [];\n // const type = field.props['view']?.type || field.props['table']?.type || 'custom-label-type';\n // return [{\n // type,\n // key: field['key'],\n // readonly: this.viewMode,\n // disabled: this.viewMode,\n // wrappers: field.wrappers ?? ['field-wrapper'],\n // props: {\n // ...field.props,\n // ...(field.props['view']?.props || field.props['table']?.props),\n // },\n // expressions: field.props['view']?.expressions || field.props['view']?.expressions,\n // }];\n // });\n // return flatten(fields);\n // }\n // Use a map to store form groups for each row and column\n cellForms = new Map();\n getForm(rowIndex) {\n const key = `${rowIndex}_`;\n let form = this.cellForms.get(key);\n if (!form) {\n form = new FormGroup({});\n this.cellForms.set(key, form);\n }\n return form;\n }\n async handleCreateEditAction(btn) {\n try {\n if (btn.action) {\n // Execute the provided action\n await btn.action(null); // You can pass row or context here\n }\n else {\n // Fallback to emitting event\n if (btn.actionName == 'cancel') {\n this.back();\n }\n else {\n this.action.emit({\n name: btn.actionName ?? 'cancel',\n row: null, // provide row if available\n });\n }\n }\n }\n catch (err) {\n console.error('Button action error', err);\n }\n }\n onAction(act, model) {\n if (act.action) {\n act.action(model);\n }\n else {\n // this.action.emit({ name: act.name, row:model });\n this.emitAction({ name: act.name, row: model });\n }\n }\n emitAction(event) {\n switch (event.name) {\n case 'edit':\n this.dialog.openForm(\"edit\", event.row);\n break;\n case 'delete':\n this.onDelete(event.row);\n break;\n default:\n this.action.emit(event);\n break;\n }\n }\n onDelete(item) {\n const id = item[this.idField];\n this.swalService.confirm('تأكيد الحذف', 'هل تريد حذف هذا السجل فعلاً؟', 'نعم، احذف', 'إلغاء').then((result) => {\n if (result.isConfirmed) {\n this.service.delete(id).subscribe({\n next: () => {\n this.swalService.success('تم الحذف بنجاح');\n this.back();\n },\n error: (err) => {\n this.loading = false;\n }\n });\n }\n });\n }\n afterSave(event) {\n this.model = event.response;\n // set the id from backend response\n this.currentId = event.response[this.idField];\n if (this.isCreateMode) {\n this.goToMode('view');\n }\n else if (this.isEditMode) {\n this.goToMode('view');\n }\n }\n goToMode(mode) {\n const tree = this.router.parseUrl(this.router.url);\n const segments = tree.root.children['primary']?.segments.map(s => s.path) ?? [];\n let newSegments;\n if (mode === 'create') {\n // always navigate to \"add\"\n newSegments = [\n ...segments.filter(s => !['view', 'edit', 'add'].includes(s)),\n 'add',\n ];\n }\n else {\n // if in \"add\" mode, replace it with the new id\n if (segments.includes('add')) {\n newSegments = [\n ...segments.filter(s => s !== 'add'),\n String(this.currentId),\n mode,\n ];\n }\n else {\n const idIndex = segments.findIndex(s => s === String(this.currentId));\n if (idIndex === -1) {\n newSegments = [...segments, String(this.currentId), mode];\n }\n else {\n newSegments = segments.slice(0, idIndex + 1);\n newSegments.push(mode);\n }\n }\n }\n this.router.navigate(newSegments);\n this.refresh();\n }\n backToList() {\n this.router.navigate(['../']);\n }\n back() {\n // this.router.navigate(['..']);\n this._location.back();\n }\n loadList() {\n this.loading = true;\n const filters = {\n maxResultCount: this.pageSize,\n skipCount: this.pageIndex * this.pageSize,\n sorting: this.sort,\n ...this.currentFilters,\n ...this.pageFilters,\n ...(this.searchGlobal ? { filter: this.searchGlobal } : {}),\n };\n this.service.getList(filters).subscribe({\n next: (res) => {\n this.list = res.items;\n this.totalRecords = res.totalCount;\n this.loading = false;\n // set model_ to current id item\n const found = this.list.find(x => x[this.idField] == this.currentId);\n if (found) {\n this.model_ = found;\n }\n },\n error: err => {\n console.error('Error loading list', err);\n this.loading = false;\n }\n });\n }\n next() {\n if (!this.currentId)\n return;\n // increment currentId numerically\n // const newId = Number(this.currentId) + 1;\n // this.currentId = newId;\n // use goToMode to navigate and keep mode\n const currentMode = this.isEditMode ? 'edit' : 'view';\n // this.goToMode(currentMode);\n }\n previous() {\n if (!this.currentId)\n return;\n // decrement currentId numerically\n // const newId = Number(this.currentId) - 1;\n // if (newId <= 0) return;\n // this.currentId = newId;\n // use goToMode to navigate and keep mode\n const currentMode = this.isEditMode ? 'edit' : 'view';\n // this.goToMode(currentMode);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.8\", type: GenericViewComponent, isStandalone: true, selector: \"app-detail-view\", inputs: { title: \"title\", actions: \"actions\", createEditActions: \"createEditActions\", tabs: \"tabs\", viewMode: \"viewMode\", breadcrumb: \"breadcrumb\", service: \"service\", formFields: \"formFields\", apiName: \"apiName\", idField: \"idField\", standaloneMode: \"standaloneMode\", isViewMode: \"isViewMode\", isCreateMode: \"isCreateMode\", isEditMode: \"isEditMode\", model: \"model\", displayMode: \"displayMode\", mode: \"mode\", loading: \"loading\" }, outputs: { action: \"action\", afterDelete: \"afterDelete\" }, viewQueries: [{ propertyName: \"dialog\", first: true, predicate: [\"dialog\"], descendants: true }, { propertyName: \"inlineForm\", first: true, predicate: [\"inlineForm\"], descendants: true }], ngImport: i0, template: \"\\r\\n@if (mode === 'detail') {\\r\\n<div class=\\\"w-full flex flex-col gap-3\\\">\\r\\n <!-- overlay -->\\r\\n <div *ngIf=\\\"loading\\\"\\r\\n class=\\\"absolute inset-0 bg-white/70 flex items-center justify-center z-50\\\">\\r\\n <p-progress-spinner/>\\r\\n </div>\\r\\n\\r\\n <!-- actual content -->\\r\\n <!-- Toolbar -->\\r\\n <p-toolbar style=\\\"background: transparent;border: 0px;box-shadow: none;\\\" class=\\\"bg-transparent shadow-none border-none rounded-md px-3\\\">\\r\\n <ng-template pTemplate=\\\"left\\\">\\r\\n <!-- <span class=\\\"font-semibold text-lg xs:hidden block\\\">{{ title }}</span> -->\\r\\n <app-breadcrumb class=\\\"xs:block\\\" [breadcrumb]=\\\"breadcrumb\\\"></app-breadcrumb> <!-- xs:block hidden -->\\r\\n </ng-template>\\r\\n <ng-template pTemplate=\\\"right\\\">\\r\\n <div class=\\\"flex gap-2\\\">\\r\\n\\r\\n <button\\r\\n pButton pRipple\\r\\n icon=\\\"pi pi-chevron-right\\\"\\r\\n class=\\\"p-button-text p-button-sm fd-btn\\\"\\r\\n pTooltip=\\\"\\u0627\\u0644\\u062A\\u0627\\u0644\\u064A\\\"\\r\\n (click)=\\\"next()\\\"\\r\\n ></button>\\r\\n <button\\r\\n pButton pRipple\\r\\n icon=\\\"pi pi-chevron-left\\\"\\r\\n class=\\\"p-button-text p-button-sm fd-btn\\\"\\r\\n pTooltip=\\\"\\u0627\\u0644\\u0633\\u0627\\u0628\\u0642\\\"\\r\\n (click)=\\\"previous()\\\"\\r\\n ></button>\\r\\n </div>\\r\\n </ng-template>\\r\\n </p-toolbar>\\r\\n <p-toolbar class=\\\"bg-white shadow rounded-md px-3\\\">\\r\\n\\r\\n <ng-template pTemplate=\\\"left\\\">\\r\\n @if (isViewMode) {\\r\\n <div class=\\\"flex gap-1\\\">\\r\\n @for (action of actions_; track $index) {\\r\\n <button\\r\\n pButton pRipple\\r\\n [icon]=\\\"action.icon ?? ''\\\"\\r\\n [label]=\\\"(action.label ?? '') | translate\\\"\\r\\n class=\\\"fd-btn\\\"\\r\\n (click)=\\\"onAction(action,model)\\\"\\r\\n ></button>\\r\\n }\\r\\n </div>\\r\\n }\\r\\n </ng-template>\\r\\n <ng-template pTemplate=\\\"right\\\">\\r\\n @if (isEditMode || isCreateMode) {\\r\\n <div class=\\\"flex gap-1\\\">\\r\\n @for (btn of createEditActions; track $index) {\\r\\n @if (!btn.visible || (btn.visible && btn.visible === true)) {\\r\\n @if (btn.type === 'submit' && inlineForm) {\\r\\n <lib-generic-button\\r\\n [type]=\\\"'submit'\\\"\\r\\n [loading]=\\\"inlineForm.loading\\\"\\r\\n [disabled]=\\\"inlineForm.loading || form.invalid\\\"\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"inlineForm.onSubmit()\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n @else{\\r\\n <lib-generic-button\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"handleCreateEditAction(btn)\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n }\\r\\n }\\r\\n </div>\\r\\n }\\r\\n </ng-template>\\r\\n\\r\\n </p-toolbar>\\r\\n\\r\\n <!-- Tabs -->\\r\\n <p-tabs value=\\\"0\\\">\\r\\n <p-tablist>\\r\\n @for (tab of tabs_; track $index) {\\r\\n <p-tab value=\\\"{{$index}}\\\">\\r\\n <i [class]=\\\"tab.icon\\\"></i>\\r\\n <span class=\\\"mr-1 ml-1\\\">{{ tab.header }}</span>\\r\\n </p-tab>\\r\\n }\\r\\n </p-tablist>\\r\\n <p-tabpanels>\\r\\n @for (tab of tabs_; track $index) {\\r\\n <p-tabpanel value=\\\"{{$index}}\\\">\\r\\n\\r\\n <!-- Formly fields -->\\r\\n <!-- border border-surface p-4-->\\r\\n <div class=\\\"\\\">\\r\\n @if (tab.fields.length && $index === 0) {\\r\\n\\r\\n <form *ngIf=\\\"form\\\" [formGroup]=\\\"form\\\">\\r\\n @if (tab.fields.length && $index === 0 ) {\\r\\n @if (isEditMode || isCreateMode) {\\r\\n <app-generic-dialog\\r\\n #inlineForm\\r\\n [form]=\\\"form\\\"\\r\\n [model]=\\\"model\\\"\\r\\n [formFields]=\\\"formFields ?? []\\\"\\r\\n [apiName]=\\\"apiName\\\"\\r\\n [idField]=\\\"idField ??'id'\\\"\\r\\n [displayMode]=\\\"'inline'\\\"\\r\\n [mode]=\\\"'form-only'\\\"\\r\\n [forceState]=\\\"isCreateMode ? 'create':'edit'\\\"\\r\\n (afterSave)=\\\"afterSave($event)\\\"\\r\\n >\\r\\n </app-generic-dialog>\\r\\n}\\r\\n@else if(isViewMode){\\r\\n <formly-form\\r\\n [form]=\\\"form\\\"\\r\\n [fields]=\\\"tab.fields\\\"\\r\\n [model]=\\\"model\\\"\\r\\n ></formly-form>\\r\\n}\\r\\n}\\r\\n </form>\\r\\n\\r\\n }\\r\\n @if (tab.fields.length && $index > 0) {\\r\\n\\r\\n\\r\\n <formly-form\\r\\n [form]=\\\"getForm($index)\\\"\\r\\n [fields]=\\\"tab.fields\\\"\\r\\n [model]=\\\"tab.model || model\\\"\\r\\n ></formly-form>\\r\\n\\r\\n }\\r\\n\\r\\n <!-- Custom template -->\\r\\n @if (tab.content) {\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"tab.content; context: { model: model }\\\">\\r\\n </ng-container>\\r\\n }\\r\\n </div>\\r\\n </p-tabpanel>\\r\\n }\\r\\n </p-tabpanels>\\r\\n </p-tabs>\\r\\n</div>\\r\\n\\r\\n<!-- [model]=\\\"model\\\" -->\\r\\n <app-generic-dialog\\r\\n #dialog\\r\\n [formFields]=\\\"formFields ?? []\\\"\\r\\n [apiName]=\\\"apiName\\\"\\r\\n [idField]=\\\"idField ??'id'\\\"\\r\\n [displayMode]=\\\"displayMode ?? 'dialog'\\\"\\r\\n (afterSave)=\\\"afterSave($event)\\\"\\r\\n >\\r\\n </app-generic-dialog>\\r\\n}\\r\\n\", dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"ngmodule\", type: ToolbarModule }, { kind: \"component\", type: i2.Toolbar, selector: \"p-toolbar\", inputs: [\"styleClass\", \"ariaLabelledBy\"] }, { kind: \"directive\", type: i3.PrimeTemplate, selector: \"[pTemplate]\", inputs: [\"type\", \"pTemplate\"] }, { kind: \"ngmodule\", type: ButtonModule }, { kind: \"directive\", type: i4.ButtonDirective, selector: \"[pButton]\", inputs: [\"iconPos\", \"loadingIcon\", \"loading\", \"severity\", \"raised\", \"rounded\", \"text\", \"outlined\", \"size\", \"plain\", \"fluid\", \"label\", \"icon\", \"buttonProps\"] }, { kind: \"ngmodule\", type: TabsModule }, { kind: \"component\", type: i5.Tabs, selector: \"p-tabs\", inputs: [\"value\", \"scrollable\", \"lazy\", \"selectOnFocus\", \"showNavigators\", \"tabindex\"], outputs: [\"valueChange\"] }, { kind: \"component\", type: i5.TabPanels, selector: \"p-tabpanels\" }, { kind: \"component\", type: i5.TabPanel, selector: \"p-tabpanel\", inputs: [\"value\"], outputs: [\"valueChange\"] }, { kind: \"component\", type: i5.TabList, selector: \"p-tablist\" }, { kind: \"component\", type: i5.Tab, selector: \"p-tab\", inputs: [\"value\", \"disabled\"], outputs: [\"valueChange\"] }, { kind: \"component\", type: FormlyForm, selector: \"formly-form\", inputs: [\"form\", \"model\", \"fields\", \"options\"], outputs: [\"modelChange\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i6.ɵNgNoValidate, selector: \"form:not([ngNoForm]):not([ngNativeValidate])\" }, { kind: \"directive\", type: i6.NgControlStatusGroup, selector: \"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]\" }, { kind: \"ngmodule\", type: ReactiveFormsModule }, { kind: \"directive\", type: i6.FormGroupDirective, selector: \"[formGroup]\", inputs: [\"formGroup\"], outputs: [\"ngSubmit\"], exportAs: [\"ngForm\"] }, { kind: \"ngmodule\", type: TranslateModule }, { kind: \"component\", type: BreadcrumbComponent, selector: \"app-breadcrumb\", inputs: [\"breadcrumb\"] }, { kind: \"ngmodule\", type: TooltipModule }, { kind: \"directive\", type: i7.Tooltip, selector: \"[pTooltip]\", inputs: [\"tooltipPosition\", \"tooltipEvent\", \"positionStyle\", \"tooltipStyleClass\", \"tooltipZIndex\", \"escape\", \"showDelay\", \"hideDelay\", \"life\", \"positionTop\", \"positionLeft\", \"autoHide\", \"fitContent\", \"hideOnEscape\", \"pTooltip\", \"tooltipDisabled\", \"tooltipOptions\", \"appendTo\"] }, { kind: \"component\", type: GenericDialogComponent, selector: \"app-generic-dialog\", inputs: [\"form\", \"service\", \"formFields\", \"model\", \"apiName\", \"idField\", \"dialogMaxWidth\", \"displayMode\", \"mode\", \"forceState\", \"drawerVisible\", \"dialogVisible\", \"isViewMode\", \"isEditMode\", \"useConfirmOnSave\", \"loading\", \"errorMsg\", \"errorMessage\", \"beforeSaveTransform\", \"hideTable\", \"autoShowForm\"], outputs: [\"action\", \"afterSave\", \"afterDelete\", \"beforeSave\", \"beforeDelete\", \"formCancel\", \"formInit\", \"dataLoaded\", \"selectionChange\", \"error\", \"visibleChange\"] }, { kind: \"component\", type: GenericButton, selector: \"lib-generic-button\", inputs: [\"model\", \"type\", \"icon\", \"label\", \"variant\", \"severity\", \"size\", \"iconPosition\", \"disabled\", \"loading\", \"ariaLabel\", \"extraClasses\", \"permission\"], outputs: [\"clicked\", \"itemClick\"] }, { kind: \"ngmodule\", type: ProgressSpinnerModule }, { kind: \"component\", type: i8.ProgressSpinner, selector: \"p-progressSpinner, p-progress-spinner, p-progressspinner\", inputs: [\"styleClass\", \"strokeWidth\", \"fill\", \"animationDuration\", \"ariaLabel\"] }, { kind: \"pipe\", type: i9.TranslatePipe, name: \"translate\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'app-detail-view', standalone: true, imports: [\n CommonModule,\n ToolbarModule,\n ButtonModule,\n TabsModule,\n FormlyForm,\n FormsModule,\n ReactiveFormsModule,\n TranslateModule,\n BreadcrumbComponent,\n TooltipModule,\n GenericDialogComponent,\n GenericButton,\n ProgressSpinnerModule\n ], template: \"\\r\\n@if (mode === 'detail') {\\r\\n<div class=\\\"w-full flex flex-col gap-3\\\">\\r\\n <!-- overlay -->\\r\\n <div *ngIf=\\\"loading\\\"\\r\\n class=\\\"absolute inset-0 bg-white/70 flex items-center justify-center z-50\\\">\\r\\n <p-progress-spinner/>\\r\\n </div>\\r\\n\\r\\n <!-- actual content -->\\r\\n <!-- Toolbar -->\\r\\n <p-toolbar style=\\\"background: transparent;border: 0px;box-shadow: none;\\\" class=\\\"bg-transparent shadow-none border-none rounded-md px-3\\\">\\r\\n <ng-template pTemplate=\\\"left\\\">\\r\\n <!-- <span class=\\\"font-semibold text-lg xs:hidden block\\\">{{ title }}</span> -->\\r\\n <app-breadcrumb class=\\\"xs:block\\\" [breadcrumb]=\\\"breadcrumb\\\"></app-breadcrumb> <!-- xs:block hidden -->\\r\\n </ng-template>\\r\\n <ng-template pTemplate=\\\"right\\\">\\r\\n <div class=\\\"flex gap-2\\\">\\r\\n\\r\\n <button\\r\\n pButton pRipple\\r\\n icon=\\\"pi pi-chevron-right\\\"\\r\\n class=\\\"p-button-text p-button-sm fd-btn\\\"\\r\\n pTooltip=\\\"\\u0627\\u0644\\u062A\\u0627\\u0644\\u064A\\\"\\r\\n (click)=\\\"next()\\\"\\r\\n ></button>\\r\\n <button\\r\\n pButton pRipple\\r\\n icon=\\\"pi pi-chevron-left\\\"\\r\\n class=\\\"p-button-text p-button-sm fd-btn\\\"\\r\\n pTooltip=\\\"\\u0627\\u0644\\u0633\\u0627\\u0628\\u0642\\\"\\r\\n (click)=\\\"previous()\\\"\\r\\n ></button>\\r\\n </div>\\r\\n </ng-template>\\r\\n </p-toolbar>\\r\\n <p-toolbar class=\\\"bg-white shadow rounded-md px-3\\\">\\r\\n\\r\\n <ng-template pTemplate=\\\"left\\\">\\r\\n @if (isViewMode) {\\r\\n <div class=\\\"flex gap-1\\\">\\r\\n @for (action of actions_; track $index) {\\r\\n <button\\r\\n pButton pRipple\\r\\n [icon]=\\\"action.icon ?? ''\\\"\\r\\n [label]=\\\"(action.label ?? '') | translate\\\"\\r\\n class=\\\"fd-btn\\\"\\r\\n (click)=\\\"onAction(action,model)\\\"\\r\\n ></button>\\r\\n }\\r\\n </div>\\r\\n }\\r\\n </ng-template>\\r\\n <ng-template pTemplate=\\\"right\\\">\\r\\n @if (isEditMode || isCreateMode) {\\r\\n <div class=\\\"flex gap-1\\\">\\r\\n @for (btn of createEditActions; track $index) {\\r\\n @if (!btn.visible || (btn.visible && btn.visible === true)) {\\r\\n @if (btn.type === 'submit' && inlineForm) {\\r\\n <lib-generic-button\\r\\n [type]=\\\"'submit'\\\"\\r\\n [loading]=\\\"inlineForm.loading\\\"\\r\\n [disabled]=\\\"inlineForm.loading || form.invalid\\\"\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"inlineForm.onSubmit()\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n @else{\\r\\n <lib-generic-button\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"handleCreateEditAction(btn)\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n }\\r\\n }\\r\\n </div>\\r\\n }\\r\\n </ng-template>\\r\\n\\r\\n </p-toolbar>\\r\\n\\r\\n <!-- Tabs -->\\r\\n <p-tabs value=\\\"0\\\">\\r\\n <p-tablist>\\r\\n @for (tab of tabs_; track $index) {\\r\\n <p-tab value=\\\"{{$index}}\\\">\\r\\n <i [class]=\\\"tab.icon\\\"></i>\\r\\n <span class=\\\"mr-1 ml-1\\\">{{ tab.header }}</span>\\r\\n </p-tab>\\r\\n }\\r\\n </p-tablist>\\r\\n <p-tabpanels>\\r\\n @for (tab of tabs_; track $index) {\\r\\n <p-tabpanel value=\\\"{{$index}}\\\">\\r\\n\\r\\n <!-- Formly fields -->\\r\\n <!-- border border-surface p-4-->\\r\\n <div class=\\\"\\\">\\r\\n @if (tab.fields.length && $index === 0) {\\r\\n\\r\\n <form *ngIf=\\\"form\\\" [formGroup]=\\\"form\\\">\\r\\n @if (tab.fields.length && $index === 0 ) {\\r\\n @if (isEditMode || isCreateMode) {\\r\\n <app-generic-dialog\\r\\n #inlineForm\\r\\n [form]=\\\"form\\\"\\r\\n [model]=\\\"model\\\"\\r\\n [formFields]=\\\"formFields ?? []\\\"\\r\\n [apiName]=\\\"apiName\\\"\\r\\n [idField]=\\\"idField ??'id'\\\"\\r\\n [displayMode]=\\\"'inline'\\\"\\r\\n [mode]=\\\"'form-only'\\\"\\r\\n [forceState]=\\\"isCreateMode ? 'create':'edit'\\\"\\r\\n (afterSave)=\\\"afterSave($event)\\\"\\r\\n >\\r\\n </app-generic-dialog>\\r\\n}\\r\\n@else if(isViewMode){\\r\\n <formly-form\\r\\n [form]=\\\"form\\\"\\r\\n [fields]=\\\"tab.fields\\\"\\r\\n [model]=\\\"model\\\"\\r\\n ></formly-form>\\r\\n}\\r\\n}\\r\\n </form>\\r\\n\\r\\n }\\r\\n @if (tab.fields.length && $index > 0) {\\r\\n\\r\\n\\r\\n <formly-form\\r\\n [form]=\\\"getForm($index)\\\"\\r\\n [fields]=\\\"tab.fields\\\"\\r\\n [model]=\\\"tab.model || model\\\"\\r\\n ></formly-form>\\r\\n\\r\\n }\\r\\n\\r\\n <!-- Custom template -->\\r\\n @if (tab.content) {\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"tab.content; context: { model: model }\\\">\\r\\n </ng-container>\\r\\n }\\r\\n </div>\\r\\n </p-tabpanel>\\r\\n }\\r\\n </p-tabpanels>\\r\\n </p-tabs>\\r\\n</div>\\r\\n\\r\\n<!-- [model]=\\\"model\\\" -->\\r\\n <app-generic-dialog\\r\\n #dialog\\r\\n [formFields]=\\\"formFields ?? []\\\"\\r\\n [apiName]=\\\"apiName\\\"\\r\\n [idField]=\\\"idField ??'id'\\\"\\r\\n [displayMode]=\\\"displayMode ?? 'dialog'\\\"\\r\\n (afterSave)=\\\"afterSave($event)\\\"\\r\\n >\\r\\n </app-generic-dialog>\\r\\n}\\r\\n\" }]\n }], propDecorators: { title: [{\n type: Input\n }], actions: [{\n type: Input\n }], createEditActions: [{\n type: Input\n }], tabs: [{\n type: Input\n }], viewMode: [{\n type: Input\n }], breadcrumb: [{\n type: Input\n }], service: [{\n type: Input\n }], formFields: [{\n type: Input\n }], apiName: [{\n type: Input\n }], idField: [{\n type: Input\n }], standaloneMode: [{\n type: Input\n }], isViewMode: [{\n type: Input\n }], isCreateMode: [{\n type: Input\n }], isEditMode: [{\n type: Input\n }], model: [{\n type: Input\n }], displayMode: [{\n type: Input\n }], mode: [{\n type: Input\n }], action: [{\n type: Output\n }], afterDelete: [{\n type: Output\n }], dialog: [{\n type: ViewChild,\n args: ['dialog']\n }], inlineForm: [{\n type: ViewChild,\n args: ['inlineForm']\n }], loading: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy12aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtdmlldy9zcmMvbGliL2dlbmVyaWMtdmlldy50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXZpZXcvc3JjL2xpYi9nZW5lcmljLXZpZXcuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFxQixNQUFNLGtCQUFrQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlC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QiwrS0FDbkIsZUFBZSwrQkFDZixtQkFBbUIsa0ZBQ25CLGFBQWEsc1hBQ2Isc0JBQXNCLGloQkFDdEIsYUFBYSw4UEFDYixxQkFBcUI7OzJGQUlaLG9CQUFvQjtrQkFwQmhDLFNBQVM7K0JBQ0UsaUJBQWlCLGNBQ2YsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixZQUFZO3dCQUNaLFVBQVU7d0JBQ1YsVUFBVTt3QkFDVixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLGFBQWE7d0JBQ2Isc0JBQXNCO3dCQUN0QixhQUFhO3dCQUNiLHFCQUFxQjtxQkFDdEI7OEJBU1EsS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDSSxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRUUsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNFLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNJLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0UsS0FBSztzQkFBYixLQUFLO2dCQUNJLFdBQVc7c0JBQW5CLEtBQUs7Z0JBV0MsSUFBSTtzQkFBWixLQUFLO2dCQUVPLE1BQU07c0JBQWYsTUFBTTtnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQUVjLE1BQU07c0JBQTFCLFNBQVM7dUJBQUMsUUFBUTtnQkFDTSxVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBUWhCLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFRvb2xiYXJNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Rvb2xiYXInO1xyXG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XHJcbmltcG9ydCB7IEZvcm1seUZvcm0sIEZvcm1seUZpZWxkQ29uZmlnIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRhYnNNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RhYnMnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IEJyZWFkY3J1bWJDb21wb25lbnQgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLnVpLmNvcmUvYnJlYWRjcnVtYic7XHJcbmltcG9ydCB7IEJhc2VTZXJ2aWNlLCBTd2FsU2VydmljZSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBBY3Rpb25EZWYsIEJ1dHRvbkNvbmZpZywgUGFnaW5hdGVkUmVzdWx0IH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL21vZGVscyc7XHJcbmltcG9ydCB7IFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvcHJvZ3Jlc3NzcGlubmVyJztcclxuaW1wb3J0IHsgR2VuZXJpY0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcudWkuY29yZS9nZW5lcmljLWRpYWxvZyc7XHJcbmltcG9ydCB7IEdlbmVyaWNCdXR0b24gfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLnVpLmNvcmUvZ2VuZXJpYy1idXR0b24nO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEZXRhaWxUYWIge1xyXG4gIGhlYWRlcjogc3RyaW5nO1xyXG4gIGljb24/OiBzdHJpbmc7XHJcbiAgZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdO1xyXG4gIG1vZGVsPzogYW55O1xyXG4gIGNvbnRlbnQ/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1kZXRhaWwtdmlldycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBUb29sYmFyTW9kdWxlLFxyXG4gICAgQnV0dG9uTW9kdWxlLFxyXG4gICAgVGFic01vZHVsZSxcclxuICAgIEZvcm1seUZvcm0sXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBUcmFuc2xhdGVNb2R1bGUsXHJcbiAgICBCcmVhZGNydW1iQ29tcG9uZW50LFxyXG4gICAgVG9vbHRpcE1vZHVsZSxcclxuICAgIEdlbmVyaWNEaWFsb2dDb21wb25lbnQsXHJcbiAgICBHZW5lcmljQnV0dG9uLFxyXG4gICAgUHJvZ3Jlc3NTcGlubmVyTW9kdWxlXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ2VuZXJpYy12aWV3Lmh0bWwnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgR2VuZXJpY1ZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHByaXZhdGUgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xyXG4gIHByaXZhdGUgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcblxyXG4gIGZvcm0gPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh7fSk7XHJcblxyXG4gIEBJbnB1dCgpIHRpdGxlID0gJyc7XHJcbiAgQElucHV0KCkgYWN0aW9uczogQWN0aW9uRGVmPGFueT5bXSA9IFtdO1xyXG4gICBASW5wdXQoKSBjcmVhdGVFZGl0QWN0aW9uczogQnV0dG9uQ29uZmlnW10gPSBbXTtcclxuICAgYWN0aW9uc186IEFjdGlvbkRlZjxhbnk+W10gPSBbXTtcclxuICBASW5wdXQoKSB0YWJzOiBEZXRhaWxUYWJbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIHZpZXdNb2RlID0gdHJ1ZTtcclxuICBASW5wdXQoKSBicmVhZGNydW1iOiBNZW51SXRlbVtdIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIHNlcnZpY2U6IEJhc2VTZXJ2aWNlID0gaW5qZWN0KEJhc2VTZXJ2aWNlKTtcclxuICBASW5wdXQoKSBmb3JtRmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW107XHJcbiAgQElucHV0KCkgYXBpTmFtZSA9ICcnO1xyXG4gIEBJbnB1dCgpIGlkRmllbGQgPSAnaWQnO1xyXG4gQElucHV0KCkgc3RhbmRhbG9uZU1vZGUgPSBmYWxzZTtcclxuIEBJbnB1dCgpIGlzVmlld01vZGUgPSB0cnVlOyAvLyDZiNi22Lkg2KfZhNmF2LTYp9mH2K/YqSDZgdmC2LdcclxuIEBJbnB1dCgpIGlzQ3JlYXRlTW9kZSA9IGZhbHNlOyAvLyDZiNi22Lkg2KfZhNin2LbYp9mB2Kkg2YHZgti3XHJcbiAgQElucHV0KCkgaXNFZGl0TW9kZSA9IGZhbHNlOyAvLyDZiNi22Lkg2KfZhNiq2LnYr9mK2YRcclxuIEBJbnB1dCgpIG1vZGVsID0ge307XHJcbiAgQElucHV0KCkgZGlzcGxheU1vZGU6XHJcbiAgICB8ICdkcmF3ZXInXHJcbiAgICB8ICdkaWFsb2cnXHJcbiAgICB8ICdyb3V0ZSdcclxuICAgIHwgJ2lubGluZSdcclxuICAgIHwgUGFydGlhbDxcclxuICAgICAgUmVjb3JkPFxyXG4gICAgICAgICdhZGQnIHwgJ2VkaXQnIHwgJ3ZpZXcnLFxyXG4gICAgICAgICdkcmF3ZXInIHwgJ2RpYWxvZycgfCAncm91dGUnIHwgJ2lubGluZSdcclxuICAgICAgPlxyXG4gICAgPiA9ICdkcmF3ZXInO1xyXG5ASW5wdXQoKSBtb2RlOiAnZnVsbCcgfCAnZm9ybS1vbmx5JyB8ICd0YWJsZS1vbmx5JyB8ICdkZXRhaWwnID0gJ2Z1bGwnO1xyXG5cclxuICAgQE91dHB1dCgpIGFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8eyBuYW1lOiBzdHJpbmc7IHJvdzogYW55IH0+KCk7XHJcbiAgICBAT3V0cHV0KCkgYWZ0ZXJEZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcmVjb3JkOiBhbnk7IHJlc3BvbnNlPzogYW55IH0+KCk7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnZGlhbG9nJykgZGlhbG9nITogR2VuZXJpY0RpYWxvZ0NvbXBvbmVudDtcclxuICAgIEBWaWV3Q2hpbGQoJ2lubGluZUZvcm0nKSBpbmxpbmVGb3JtITogR2VuZXJpY0RpYWxvZ0NvbXBvbmVudDtcclxuXHJcbiAgdGFic186IERldGFpbFRhYltdID0gW107XHJcbiAgbW9kZWxfOiBhbnkgPSB7fTtcclxuXHJcbiAgY3VycmVudElkITogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIGxpc3Q6IGFueVtdID0gW107XHJcbiAgdG90YWxSZWNvcmRzID0gMDtcclxuICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gIC8vIHBhZ2luYXRpb24gc3RhdGVcclxuICBwYWdlU2l6ZSA9IDEwO1xyXG4gIHBhZ2VJbmRleCA9IDA7XHJcbiAgc29ydCA9ICcnO1xyXG4gIGN1cnJlbnRGaWx0ZXJzOiBhbnkgPSB7fTtcclxuICBwYWdlRmlsdGVyczogYW55ID0ge307XHJcbiAgc2VhcmNoR2xvYmFsID0gJyc7XHJcbiBwcml2YXRlIHN3YWxTZXJ2aWNlID0gaW5qZWN0KFN3YWxTZXJ2aWNlKTtcclxuXHJcbiBfbG9jYXRpb246IExvY2F0aW9uID0gaW5qZWN0KExvY2F0aW9uKTtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMuYXBpTmFtZSkge1xyXG4gICAgICB0aGlzLnNlcnZpY2UuYXBpTmFtZSA9IHRoaXMuYXBpTmFtZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5hY3Rpb25zXyA9IHRoaXMuYWN0aW9ucy5maWx0ZXIoYz0+Yy5uYW1lICE9ICd2aWV3Jyk7XHJcblxyXG4gICAgICB0aGlzLnJvdXRlLnBhcmFtTWFwLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpZCA9IHBhcmFtcy5nZXQodGhpcy5pZEZpZWxkKTtcclxuICAgICAgICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SWQgPSBpZDtcclxuICAgICAgICAgICAgICAgaWYodGhpcy5zdGFuZGFsb25lTW9kZSl7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkTGlzdCgpO1xyXG4gICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcblxyXG4gICAgICAgICAgfSk7XHJcblxyXG5cclxuICB9XHJcblxyXG4gIHJlZnJlc2goKXtcclxuXHJcbiAgICAvLyBkZXRlY3QgbW9kZSBiYXNlZCBvbiByb3V0ZVxyXG4gIGNvbnN0IHVybCA9IHRoaXMucm91dGVyLnVybC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgIHRoaXMuaXNWaWV3TW9kZSA9IHVybC5pbmNsdWRlcygnL3ZpZXcnKTtcclxuICB0aGlzLmlzRWRpdE1vZGUgPSB1cmwuaW5jbHVkZXMoJy9lZGl0Jyk7XHJcbiAgdGhpcy5pc0NyZWF0ZU1vZGUgPSB1cmwuaW5jbHVkZXMoJy9jcmVhdGUnKSB8fCB1cmwuZW5kc1dpdGgoJy9uZXcnKSB8fCB1cmwuZW5kc1dpdGgoJy9hZGQnKTtcclxuXHJcbiAgdGhpcy50YWJzXyA9IFtdO1xyXG5mb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudGFicy5sZW5ndGg7IGkrKykge1xyXG4gIGNvbnN0IHQgPSB0aGlzLnRhYnNbaV07XHJcbiAgdGhpcy50YWJzXy5wdXNoKHtcclxuICAgIC4uLnQsXHJcbiAgICBmaWVsZHM6IFtcclxuICAgICAge1xyXG4gICAgICAgIHByb3BzOiB7IGxhYmVsOiAnJyB9LFxyXG4gICAgICAgIGZpZWxkR3JvdXBDbGFzc05hbWU6ICdncmlkIGdyaWQtY29scy0xIG1kOmdyaWQtY29scy0yIGdhcC0zJyxcclxuICAgICAgICBmaWVsZEdyb3VwOlxyXG4gICAgICAgICAgdGhpcy5pc0NyZWF0ZU1vZGUgfHwgdGhpcy5pc0VkaXRNb2RlXHJcbiAgICAgICAgICAgID8gdGhpcy5nZXRDcmVhdGVFZGl0RmllbGRzKGkgPT0gMCA/IHRoaXMuZm9ybUZpZWxkczogdC5maWVsZHMpXHJcbiAgICAgICAgICAgIDogdGhpcy5nZXRWaWV3RmllbGRzKGkgPT0gMCA/IHRoaXMuZm9ybUZpZWxkcyA6IHQuZmllbGRzKSxcclxuICAgICAgfSxcclxuICAgIF0sXHJcbiAgfSk7XHJcbn1cclxudGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgfVxyXG4gIC8vIGFzIGZvcm1cclxuICAgZ2V0Q3JlYXRlRWRpdEZpZWxkcyhmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXSk6IEZvcm1seUZpZWxkQ29uZmlnW10ge1xyXG4gICAgcmV0dXJuIGZpZWxkcy5tYXAoZiA9PiAoe1xyXG4gICAgICAuLi5mLFxyXG4gICAgICBwcm9wczogeyAuLi5mLnByb3BzLCByZWFkb25seTogdGhpcy52aWV3TW9kZSwgZGlzYWJsZWQ6IHRoaXMudmlld01vZGUgfSxcclxuICAgIH0pKTtcclxuICB9XHJcbiAgZ2V0Vmlld0ZpZWxkcyhmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXSk6IEZvcm1seUZpZWxkQ29uZmlnW10ge1xyXG4gIGNvbnN0IGZsYXR0ZW4gPSAoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdKTogRm9ybWx5RmllbGRDb25maWdbXSA9PlxyXG4gICAgZmllbGRzLmZsYXRNYXAoKGZpZWxkOmFueSkgPT4ge1xyXG5cclxuICAgICAgLyogMS4gR1JPVVAgLyBQQU5FTCAvIFdSQVBQRVIgKi9cclxuICAgICAgaWYgKGZpZWxkLmZpZWxkR3JvdXA/Lmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZmxhdHRlbihmaWVsZC5maWVsZEdyb3VwKTtcclxuXHJcbiAgICAgICAgaWYgKCFjaGlsZHJlbi5sZW5ndGgpIHJldHVybiBbXTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFt7XHJcbiAgICAgICAgICAuLi5maWVsZCxcclxuICAgICAgICAgIHdyYXBwZXJzOiBmaWVsZC53cmFwcGVycyxcclxuICAgICAgICAgIHByb3BzOiB7IC4uLmZpZWxkLnByb3BzIH0sXHJcbiAgICAgICAgICBmaWVsZEdyb3VwQ2xhc3NOYW1lOiBmaWVsZC5maWVsZEdyb3VwQ2xhc3NOYW1lLFxyXG4gICAgICAgICAgZmllbGRHcm91cDogY2hpbGRyZW5cclxuICAgICAgICB9XTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLyogMi4gRklFTEQgQVJSQVkgKFJFUEVBVCAvIFRBQkxFIC8gTVVMVEkpICovXHJcbiAgICAgIGNvbnN0IGZpZWxkQXJyYXlDb25maWcgPVxyXG4gICAgICAgIHR5cGVvZiBmaWVsZC5maWVsZEFycmF5ID09PSAnZnVuY3Rpb24nXHJcbiAgICAgICAgICA/IGZpZWxkLmZpZWxkQXJyYXkoZmllbGQpXHJcbiAgICAgICAgICA6IGZpZWxkLmZpZWxkQXJyYXk7XHJcblxyXG4gICAgICBpZiAoZmllbGQuZmllbGRBcnJheSkge1xyXG5cclxuICAgICAgICBpZiAoZmllbGQucHJvcHM/LlsndmlldyddPy5oaWRkZW4pIHJldHVybiBbXTtcclxuXHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBmbGF0dGVuKGZpZWxkQXJyYXlDb25maWc/LmZpZWxkR3JvdXAgfHwgW10pO1xyXG5cclxuICAgICAgICBpZiAoIWNoaWxkcmVuLmxlbmd0aCkgcmV0dXJuIFtdO1xyXG5cclxuICAgICAgICByZXR1cm4gW3tcclxuICAgICAgICAgIC4uLmZpZWxkLFxyXG4gICAgICAgICAgdHlwZTogZmllbGQucHJvcHM/LlsndmlldyddPy50eXBlIHx8IGZpZWxkLnR5cGUsXHJcbiAgICAgICAgICByZWFkb25seTogdGhpcy52aWV3TW9kZSxcclxuICAgICAgICAgIGRpc2FibGVkOiB0aGlzLnZpZXdNb2RlLFxyXG4gICAgICAgICAgZmllbGRBcnJheToge1xyXG4gICAgICAgICAgICAuLi5maWVsZEFycmF5Q29uZmlnLFxyXG4gICAgICAgICAgICBmaWVsZEdyb3VwOiBjaGlsZHJlblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1dO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvKiAzLiBTSU5HTEUgRklFTEQgKi9cclxuICAgICAgaWYgKCFmaWVsZC5wcm9wcyB8fCBmaWVsZC5wcm9wc1sndmlldyddPy5oaWRkZW4pIHJldHVybiBbXTtcclxuXHJcbiAgICAgIGNvbnN0IHR5cGUgPVxyXG4gICAgICAgIGZpZWxkLnByb3BzWyd2aWV3J10/LnR5cGUgfHxcclxuICAgICAgICBmaWVsZC5wcm9wc1sndGFibGUnXT8udHlwZSB8fFxyXG4gICAgICAgIGZpZWxkLnByb3BzWydmaWx0ZXInXT8udHlwZSB8fFxyXG4gICAgICAgICdjdXN0b20tbGFiZWwtdHlwZSc7XHJcblxyXG4gICAgICByZXR1cm4gW3tcclxuICAgICAgICB0eXBlLFxyXG4gICAgICAgIGtleTogZmllbGQua2V5LFxyXG4gICAgICAgIHJlYWRvbmx5OiB0aGlzLnZpZXdNb2RlLFxyXG4gICAgICAgIGRpc2FibGVkOiB0aGlzLnZpZXdNb2RlLFxyXG4gICAgICAgIHdyYXBwZXJzOiBmaWVsZC53cmFwcGVycyA/PyBbJ2ZpZWxkLXdyYXBwZXInXSxcclxuICAgICAgICBjbGFzc05hbWU6IGZpZWxkLmNsYXNzTmFtZSxcclxuICAgICAgICBwcm9wczoge1xyXG4gICAgICAgICAgLi4uZmllbGQucHJvcHMsXHJcbiAgICAgICAgICAuLi4oZmllbGQucHJvcHNbJ3ZpZXcnXT8ucHJvcHMgfHxcclxuICAgICAgICAgICAgZmllbGQucHJvcHNbJ3RhYmxlJ10/LnByb3BzIHx8XHJcbiAgICAgICAgICAgIGZpZWxkLnByb3BzWydmaWx0ZXInXT8ucHJvcHMgfHxcclxuICAgICAgICAgICAge30pLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXhwcmVzc2lvbnM6XHJcbiAgICAgICAgICBmaWVsZC5wcm9wc1sndmlldyddPy5leHByZXNzaW9ucyB8fFxyXG4gICAgICAgICAgZmllbGQucHJvcHNbJ3RhYmxlJ10/LmV4cHJlc3Npb25zIHx8XHJcbiAgICAgICAgICBmaWVsZC5wcm9wc1snZmlsdGVyJ10/LmV4cHJlc3Npb25zXHJcbiAgICAgIH1dO1xyXG4gICAgfSk7XHJcblxyXG4gIHJldHVybiBmbGF0dGVuKGZpZWxkcyk7XHJcbn1cclxuXHJcbiAgLy8gZ2V0Vmlld0ZpZWxkcyhmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXSk6IEZvcm1seUZpZWxkQ29uZmlnW10ge1xyXG4gIC8vICAgY29uc3QgZmxhdHRlbiA9IChmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10pOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0+XHJcbiAgLy8gICAgIGZpZWxkcy5mbGF0TWFwKGZpZWxkID0+IHtcclxuICAvLyAgICAgICBpZiAoZmllbGQuZmllbGRHcm91cD8ubGVuZ3RoKSByZXR1cm4gZmxhdHRlbihmaWVsZC5maWVsZEdyb3VwKTtcclxuICAvLyAgICAgICBpZiAoIWZpZWxkLnByb3BzXHJcbiAgLy8gICAgICAgICB8fCBmaWVsZC5wcm9wc1sndmlldyddPy5oaWRkZW5cclxuICAvLyAgICAgICAgIC8vIHx8IGZpZWxkLnByb3BzWyd0YWJsZSddPy5oaWRkZW5cclxuICAvLyAgICAgICAgKSByZXR1cm4gW107XHJcblxyXG4gIC8vICAgICAgIGNvbnN0IHR5cGUgPSBmaWVsZC5wcm9wc1sndmlldyddPy50eXBlIHx8IGZpZWxkLnByb3BzWyd0YWJsZSddPy50eXBlIHx8ICdjdXN0b20tbGFiZWwtdHlwZSc7XHJcbiAgLy8gICAgICAgcmV0dXJuIFt7XHJcbiAgLy8gICAgICAgICB0eXBlLFxyXG4gIC8vICAgICAgICAga2V5OiBmaWVsZFsna2V5J10sXHJcbiAgLy8gICAgICAgICByZWFkb25seTogdGhpcy52aWV3TW9kZSxcclxuICAvLyAgICAgICAgIGRpc2FibGVkOiB0aGlzLnZpZXdNb2RlLFxyXG4gIC8vICAgICAgICAgd3JhcHBlcnM6IGZpZWxkLndyYXBwZXJzID8/IFsnZmllbGQtd3JhcHBlciddLFxyXG4gIC8vICAgICAgICAgcHJvcHM6IHtcclxuICAvLyAgICAgICAgICAgLi4uZmllbGQucHJvcHMsXHJcbiAgLy8gICAgICAgICAgIC4uLihmaWVsZC5wcm9wc1sndmlldyddPy5wcm9wcyB8fCBmaWVsZC5wcm9wc1sndGFibGUnXT8ucHJvcHMpLFxyXG4gIC8vICAgICAgICAgfSxcclxuICAvLyAgICAgICAgIGV4cHJlc3Npb25zOiBmaWVsZC5wcm9wc1sndmlldyddPy5leHByZXNzaW9ucyB8fCBmaWVsZC5wcm9wc1sndmlldyddPy5leHByZXNzaW9ucyxcclxuICAvLyAgICAgICB9XTtcclxuICAvLyAgICAgfSk7XHJcblxyXG4gIC8vICAgcmV0dXJuIGZsYXR0ZW4oZmllbGRzKTtcclxuICAvLyB9XHJcblxyXG4gICAgIC8vIFVzZSBhIG1hcCB0byBzdG9yZSBmb3JtIGdyb3VwcyBmb3IgZWFjaCByb3cgYW5kIGNvbHVtblxyXG4gIHByaXZhdGUgY2VsbEZvcm1zOiBNYXA8c3RyaW5nLCBGb3JtR3JvdXA+ID0gbmV3IE1hcCgpO1xyXG4gICAgZ2V0Rm9ybShyb3dJbmRleDogbnVtYmVyKTogRm9ybUdyb3VwIHtcclxuICAgIGNvbnN0IGtleSA9IGAke3Jvd0luZGV4fV9gO1xyXG4gICAgbGV0IGZvcm0gPSB0aGlzLmNlbGxGb3Jtcy5nZXQoa2V5KTtcclxuXHJcbiAgICBpZiAoIWZvcm0pIHtcclxuICAgICAgZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgICB0aGlzLmNlbGxGb3Jtcy5zZXQoa2V5LCBmb3JtKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmb3JtO1xyXG4gIH1cclxuXHJcblxyXG4gICBhc3luYyBoYW5kbGVDcmVhdGVFZGl0QWN0aW9uKGJ0bjogQnV0dG9uQ29uZmlnKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoYnRuLmFjdGlvbikge1xyXG4gICAgICAgIC8vIEV4ZWN1dGUgdGhlIHByb3ZpZGVkIGFjdGlvblxyXG4gICAgICAgIGF3YWl0IGJ0bi5hY3Rpb24obnVsbCk7IC8vIFlvdSBjYW4gcGFzcyByb3cgb3IgY29udGV4dCBoZXJlXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gRmFsbGJhY2sgdG8gZW1pdHRpbmcgZXZlbnRcclxuICAgICAgICBpZihidG4uYWN0aW9uTmFtZSA9PSAnY2FuY2VsJyl7XHJcbiAgICAgICAgICB0aGlzLmJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICB0aGlzLmFjdGlvbi5lbWl0KHtcclxuICAgICAgICAgIG5hbWU6IGJ0bi5hY3Rpb25OYW1lID8/ICdjYW5jZWwnLFxyXG4gICAgICAgICAgcm93OiBudWxsISwgLy8gcHJvdmlkZSByb3cgaWYgYXZhaWxhYmxlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0J1dHRvbiBhY3Rpb24gZXJyb3InLCBlcnIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG5vbkFjdGlvbihhY3Q6IEFjdGlvbkRlZjxhbnk+LCBtb2RlbDogYW55KSB7XHJcbiAgICBpZiAoYWN0LmFjdGlvbikge1xyXG4gICAgICBhY3QuYWN0aW9uKG1vZGVsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHRoaXMuYWN0aW9uLmVtaXQoeyBuYW1lOiBhY3QubmFtZSwgcm93Om1vZGVsIH0pO1xyXG4gICAgICB0aGlzLmVtaXRBY3Rpb24oeyBuYW1lOiBhY3QubmFtZSwgcm93Om1vZGVsIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgICBlbWl0QWN0aW9uKGV2ZW50OiB7IG5hbWU6IHN0cmluZzsgcm93OiBhbnkgfCBudWxsIH0pOiB2b2lkIHtcclxuICBzd2l0Y2ggKGV2ZW50Lm5hbWUpIHtcclxuICAgIGNhc2UgJ2VkaXQnOlxyXG4gICAgICB0aGlzLmRpYWxvZy5vcGVuRm9ybShcImVkaXRcIixldmVudC5yb3cpO1xyXG4gICAgICBicmVhaztcclxuICAgIGNhc2UgJ2RlbGV0ZSc6XHJcbiAgICAgIHRoaXMub25EZWxldGUoZXZlbnQucm93ISk7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgZGVmYXVsdCA6XHJcbiAgICAgIHRoaXMuYWN0aW9uLmVtaXQoZXZlbnQpO1xyXG4gICAgICBicmVhaztcclxuICB9XHJcbn1cclxuXHJcbm9uRGVsZXRlKGl0ZW06IGFueSk6IHZvaWQge1xyXG4gIGNvbnN0IGlkID0gaXRlbVt0aGlzLmlkRmllbGRdO1xyXG5cclxuICB0aGlzLnN3YWxTZXJ2aWNlLmNvbmZpcm0oXHJcbiAgICAn2KrYo9mD2YrYryDYp9mE2K3YsNmBJyxcclxuICAgICfZh9mEINiq2LHZitivINit2LDZgSDZh9iw2Kcg2KfZhNiz2KzZhCDZgdi52YTYp9mL2J8nLFxyXG4gICAgJ9mG2LnZhdiMINin2K3YsNmBJyxcclxuICAgICfYpdmE2LrYp9ihJ1xyXG4gICkudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICBpZiAocmVzdWx0LmlzQ29uZmlybWVkKSB7XHJcbiAgICAgIHRoaXMuc2VydmljZS5kZWxldGUoaWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zd2FsU2VydmljZS5zdWNjZXNzKCfYqtmFINin2YTYrdiw2YEg2KjZhtis2KfYrScpO1xyXG4gICAgICAgICAgdGhpcy5iYWNrKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9KTtcclxufVxyXG4gYWZ0ZXJTYXZlKGV2ZW50OiBhbnkpIHtcclxuICB0aGlzLm1vZGVsID0gZXZlbnQucmVzcG9uc2U7XHJcblxyXG4gIC8vIHNldCB0aGUgaWQgZnJvbSBiYWNrZW5kIHJlc3BvbnNlXHJcbiAgdGhpcy5jdXJyZW50SWQgPSBldmVudC5yZXNwb25zZVt0aGlzLmlkRmllbGRdO1xyXG5cclxuICBpZiAodGhpcy5pc0NyZWF0ZU1vZGUpIHtcclxuICAgIHRoaXMuZ29Ub01vZGUoJ3ZpZXcnKTtcclxuICB9IGVsc2UgaWYgKHRoaXMuaXNFZGl0TW9kZSkge1xyXG4gICAgdGhpcy5nb1RvTW9kZSgndmlldycpO1xyXG4gIH1cclxufVxyXG5cclxuXHJcblxyXG5nb1RvTW9kZShtb2RlOiAndmlldycgfCAnZWRpdCcgfCAnY3JlYXRlJykge1xyXG4gIGNvbnN0IHRyZWUgPSB0aGlzLnJvdXRlci5wYXJzZVVybCh0aGlzLnJvdXRlci51cmwpO1xyXG4gIGNvbnN0IHNlZ21lbnRzID0gdHJlZS5yb290LmNoaWxkcmVuWydwcmltYXJ5J10/LnNlZ21lbnRzLm1hcChzID0+IHMucGF0aCkgPz8gW107XHJcblxyXG4gIGxldCBuZXdTZWdtZW50czogc3RyaW5nW107XHJcblxyXG4gIGlmIChtb2RlID09PSAnY3JlYXRlJykge1xyXG4gICAgLy8gYWx3YXlzIG5hdmlnYXRlIHRvIFwiYWRkXCJcclxuICAgIG5ld1NlZ21lbnRzID0gW1xyXG4gICAgICAuLi5zZWdtZW50cy5maWx0ZXIocyA9PiAhWyd2aWV3JywgJ2VkaXQnLCAnYWRkJ10uaW5jbHVkZXMocykpLFxyXG4gICAgICAnYWRkJyxcclxuICAgIF07XHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIGlmIGluIFwiYWRkXCIgbW9kZSwgcmVwbGFjZSBpdCB3aXRoIHRoZSBuZXcgaWRcclxuICAgIGlmIChzZWdtZW50cy5pbmNsdWRlcygnYWRkJykpIHtcclxuICAgICAgbmV3U2VnbWVudHMgPSBbXHJcbiAgICAgICAgLi4uc2VnbWVudHMuZmlsdGVyKHMgPT4gcyAhPT0gJ2FkZCcpLFxyXG4gICAgICAgIFN0cmluZyh0aGlzLmN1cnJlbnRJZCksXHJcbiAgICAgICAgbW9kZSxcclxuICAgICAgXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGlkSW5kZXggPSBzZWdtZW50cy5maW5kSW5kZXgocyA9PiBzID09PSBTdHJpbmcodGhpcy5jdXJyZW50SWQpKTtcclxuICAgICAgaWYgKGlkSW5kZXggPT09IC0xKSB7XHJcbiAgICAgICAgbmV3U2VnbWVudHMgPSBbLi4uc2VnbWVudHMsIFN0cmluZyh0aGlzLmN1cnJlbnRJZCksIG1vZGVdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5ld1NlZ21lbnRzID0gc2VnbWVudHMuc2xpY2UoMCwgaWRJbmRleCArIDEpO1xyXG4gICAgICAgIG5ld1NlZ21lbnRzLnB1c2gobW9kZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRoaXMucm91dGVyLm5hdmlnYXRlKG5ld1NlZ21lbnRzKTtcclxuICB0aGlzLnJlZnJlc2goKTtcclxufVxyXG5cclxuXHJcbmJhY2tUb0xpc3QoKXtcclxuICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4vJ10pO1xyXG4gICAgfVxyXG5iYWNrKCl7XHJcbiAgICAgIC8vICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uJ10pO1xyXG4gICAgICAgdGhpcy5fbG9jYXRpb24uYmFjaygpXHJcbiAgICB9XHJcbiAgbG9hZExpc3QoKSB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgZmlsdGVycyA9IHtcclxuICAgICAgbWF4UmVzdWx0Q291bnQ6IHRoaXMucGFnZVNpemUsXHJcbiAgICAgIHNraXBDb3VudDogdGhpcy5wYWdlSW5kZXggKiB0aGlzLnBhZ2VTaXplLFxyXG4gICAgICBzb3J0aW5nOiB0aGlzLnNvcnQsXHJcbiAgICAgIC4uLnRoaXMuY3VycmVudEZpbHRlcnMsXHJcbiAgICAgIC4uLnRoaXMucGFnZUZpbHRlcnMsXHJcbiAgICAgIC4uLih0aGlzLnNlYXJjaEdsb2JhbCA/IHsgZmlsdGVyOiB0aGlzLnNlYXJjaEdsb2JhbCB9IDoge30pLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnNlcnZpY2UuZ2V0TGlzdChmaWx0ZXJzKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBQYWdpbmF0ZWRSZXN1bHQ8YW55PikgPT4ge1xyXG4gICAgICAgIHRoaXMubGlzdCA9IHJlcy5pdGVtcztcclxuICAgICAgICB0aGlzLnRvdGFsUmVjb3JkcyA9IHJlcy50b3RhbENvdW50O1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBzZXQgbW9kZWxfIHRvIGN1cnJlbnQgaWQgaXRlbVxyXG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5saXN0LmZpbmQoeCA9PiB4W3RoaXMuaWRGaWVsZF0gPT0gdGhpcy5jdXJyZW50SWQpO1xyXG4gICAgICAgIGlmIChmb3VuZCkge1xyXG4gICAgICAgICAgdGhpcy5tb2RlbF8gPSBmb3VuZDtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgbGlzdCcsIGVycik7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuIG5leHQoKSB7XHJcbiAgaWYgKCF0aGlzLmN1cnJlbnRJZCkgcmV0dXJuO1xyXG5cclxuICAvLyBpbmNyZW1lbnQgY3VycmVudElkIG51bWVyaWNhbGx5XHJcbiAgLy8gY29uc3QgbmV3SWQgPSBOdW1iZXIodGhpcy5jdXJyZW50SWQpICsgMTtcclxuICAvLyB0aGlzLmN1cnJlbnRJZCA9IG5ld0lkO1xyXG4gIC8vIHVzZSBnb1RvTW9kZSB0byBuYXZpZ2F0ZSBhbmQga2VlcCBtb2RlXHJcbiAgY29uc3QgY3VycmVudE1vZGUgPSB0aGlzLmlzRWRpdE1vZGUgPyAnZWRpdCcgOiAndmlldyc7XHJcbiAgLy8gdGhpcy5nb1RvTW9kZShjdXJyZW50TW9kZSk7XHJcbn1cclxuXHJcbnByZXZpb3VzKCkge1xyXG4gIGlmICghdGhpcy5jdXJyZW50SWQpIHJldHVybjtcclxuXHJcbiAgLy8gZGVjcmVtZW50IGN1cnJlbnRJZCBudW1lcmljYWxseVxyXG4gIC8vIGNvbnN0IG5ld0lkID0gTnVtYmVyKHRoaXMuY3VycmVudElkKSAtIDE7XHJcbiAgLy8gaWYgKG5ld0lkIDw9IDApIHJldHVybjtcclxuXHJcbiAgLy8gdGhpcy5jdXJyZW50SWQgPSBuZXdJZDtcclxuXHJcbiAgLy8gdXNlIGdvVG9Nb2RlIHRvIG5hdmlnYXRlIGFuZCBrZWVwIG1vZGVcclxuICBjb25zdCBjdXJyZW50TW9kZSA9IHRoaXMuaXNFZGl0TW9kZSA/ICdlZGl0JyA6ICd2aWV3JztcclxuICAvLyB0aGlzLmdvVG9Nb2RlKGN1cnJlbnRNb2RlKTtcclxufVxyXG5cclxuXHJcbiAgLy8gbmV4dCgpIHtcclxuICAvLyAgIGNvbnN0IGlkeCA9IHRoaXMubGlzdC5maW5kSW5kZXgoeCA9PiB4W3RoaXMuaWRGaWVsZF0gPT0gdGhpcy5jdXJyZW50SWQpO1xyXG4gIC8vICAgaWYgKGlkeCA+PSAwICYmIGlkeCA8IHRoaXMubGlzdC5sZW5ndGggLSAxKSB7XHJcbiAgLy8gICAgIGNvbnN0IG5ld0lkID0gdGhpcy5saXN0W2lkeCArIDFdW3RoaXMuaWRGaWVsZF07XHJcbiAgLy8gICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4vJywgbmV3SWRdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICAvLyBwcmV2aW91cygpIHtcclxuICAvLyAgIGNvbnN0IGlkeCA9IHRoaXMubGlzdC5maW5kSW5kZXgoeCA9PiB4W3RoaXMuaWRGaWVsZF0gPT0gdGhpcy5jdXJyZW50SWQpO1xyXG4gIC8vICAgaWYgKGlkeCA+IDApIHtcclxuICAvLyAgICAgY29uc3QgbmV3SWQgPSB0aGlzLmxpc3RbaWR4IC0gMV1bdGhpcy5pZEZpZWxkXTtcclxuICAvLyAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLi8nLCBuZXdJZF0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcbn1cclxuXHJcbiIsIlxyXG5AaWYgKG1vZGUgPT09ICdkZXRhaWwnKSB7XHJcbjxkaXYgIGNsYXNzPVwidy1mdWxsIGZsZXggZmxleC1jb2wgZ2FwLTNcIj5cclxuICA8IS0tIG92ZXJsYXkgLS0+XHJcbiAgPGRpdiAqbmdJZj1cImxvYWRpbmdcIlxyXG4gICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBpbnNldC0wIGJnLXdoaXRlLzcwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHotNTBcIj5cclxuICAgIDxwLXByb2dyZXNzLXNwaW5uZXIvPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIGFjdHVhbCBjb250ZW50IC0tPlxyXG4gIDwhLS0gVG9vbGJhciAtLT5cclxuICA8cC10b29sYmFyIHN0eWxlPVwiYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Ym9yZGVyOiAwcHg7Ym94LXNoYWRvdzogbm9uZTtcIiBjbGFzcz1cImJnLXRyYW5zcGFyZW50IHNoYWRvdy1ub25lIGJvcmRlci1ub25lIHJvdW5kZWQtbWQgcHgtM1wiPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxlZnRcIj5cclxuICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC1sZyB4czpoaWRkZW4gYmxvY2tcIj57eyB0aXRsZSB9fTwvc3Bhbj4gLS0+XHJcbiAgICAgIDxhcHAtYnJlYWRjcnVtYiBjbGFzcz1cInhzOmJsb2NrXCIgW2JyZWFkY3J1bWJdPVwiYnJlYWRjcnVtYlwiPjwvYXBwLWJyZWFkY3J1bWI+IDwhLS0geHM6YmxvY2sgaGlkZGVuIC0tPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJyaWdodFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMlwiPlxyXG5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIHBCdXR0b24gcFJpcHBsZVxyXG4gICAgICAgIGljb249XCJwaSBwaS1jaGV2cm9uLXJpZ2h0XCJcclxuICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24tc20gZmQtYnRuXCJcclxuICAgICAgICBwVG9vbHRpcD1cItin2YTYqtin2YTZilwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm5leHQoKVwiXHJcbiAgICAgID48L2J1dHRvbj5cclxuICAgICAgIDxidXR0b25cclxuICAgICAgICBwQnV0dG9uIHBSaXBwbGVcclxuICAgICAgICBpY29uPVwicGkgcGktY2hldnJvbi1sZWZ0XCJcclxuICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24tc20gZmQtYnRuXCJcclxuICAgICAgICBwVG9vbHRpcD1cItin2YTYs9in2KjZglwiXHJcbiAgICAgICAgKGNsaWNrKT1cInByZXZpb3VzKClcIlxyXG4gICAgICA+PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3AtdG9vbGJhcj5cclxuICAgPHAtdG9vbGJhciBjbGFzcz1cImJnLXdoaXRlIHNoYWRvdyByb3VuZGVkLW1kIHB4LTNcIj5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwibGVmdFwiPlxyXG4gICAgICAgQGlmIChpc1ZpZXdNb2RlKSB7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0xXCI+XHJcbiAgICAgICAgICBAZm9yIChhY3Rpb24gb2YgYWN0aW9uc187IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICBwQnV0dG9uIHBSaXBwbGVcclxuICAgICAgW2ljb25dPVwiYWN0aW9uLmljb24gPz8gJydcIlxyXG4gICAgICAgICAgW2xhYmVsXT1cIihhY3Rpb24ubGFiZWwgPz8gJycpIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICBjbGFzcz1cImZkLWJ0blwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uQWN0aW9uKGFjdGlvbixtb2RlbClcIlxyXG4gICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJyaWdodFwiPlxyXG4gICAgICBAaWYgKGlzRWRpdE1vZGUgfHwgaXNDcmVhdGVNb2RlKSB7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0xXCI+XHJcbiAgICAgICBAZm9yIChidG4gb2YgY3JlYXRlRWRpdEFjdGlvbnM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICBAaWYgKCFidG4udmlzaWJsZSB8fCAoYnRuLnZpc2libGUgJiYgYnRuLnZpc2libGUgPT09IHRydWUpKSB7XHJcbiAgICAgICAgICAgICAgIEBpZiAoYnRuLnR5cGUgPT09ICdzdWJtaXQnICYmIGlubGluZUZvcm0pIHtcclxuICAgICAgICAgICAgICA8bGliLWdlbmVyaWMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBbdHlwZV09XCInc3VibWl0J1wiXHJcbiAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJpbmxpbmVGb3JtLmxvYWRpbmdcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlubGluZUZvcm0ubG9hZGluZyB8fCBmb3JtLmludmFsaWRcIlxyXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiYnRuLmljb25cIlxyXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cImJ0bi5sYWJlbCB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICBbdmFyaWFudF09XCJidG4udmFyaWFudFwiXHJcbiAgICAgICAgICAgICAgICBbc2V2ZXJpdHldPVwiYnRuLnNldmVyaXR5XCJcclxuICAgICAgICAgICAgICAgIFtzaXplXT1cImJ0bi5zaXplXCJcclxuICAgICAgICAgICAgICAgIFttb2RlbF09XCJidG4uc3BsaXRBY3Rpb25zXCJcclxuICAgICAgICAgICAgICAgIFtwZXJtaXNzaW9uXT1cImJ0bi5wZXJtaXNzaW9uXCJcclxuICAgICAgICAgICAgICAgIChjbGlja2VkKT1cImlubGluZUZvcm0ub25TdWJtaXQoKVwiXHJcbiAgICAgICAgICAgICAgPjwvbGliLWdlbmVyaWMtYnV0dG9uPlxyXG4gICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgIEBlbHNle1xyXG4gICAgICAgICAgICAgICAgIDxsaWItZ2VuZXJpYy1idXR0b25cclxuICAgICAgICAgICAgICAgIFtpY29uXT1cImJ0bi5pY29uXCJcclxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJidG4ubGFiZWwgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgW3ZhcmlhbnRdPVwiYnRuLnZhcmlhbnRcIlxyXG4gICAgICAgICAgICAgICAgW3NldmVyaXR5XT1cImJ0bi5zZXZlcml0eVwiXHJcbiAgICAgICAgICAgICAgICBbc2l6ZV09XCJidG4uc2l6ZVwiXHJcbiAgICAgICAgICAgICAgICBbbW9kZWxdPVwiYnRuLnNwbGl0QWN0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICBbcGVybWlzc2lvbl09XCJidG4ucGVybWlzc2lvblwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJoYW5kbGVDcmVhdGVFZGl0QWN0aW9uKGJ0bilcIlxyXG4gICAgICAgICAgICAgID48L2xpYi1nZW5lcmljLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICB9XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8L3AtdG9vbGJhcj5cclxuXHJcbiAgPCEtLSBUYWJzIC0tPlxyXG4gIDxwLXRhYnMgdmFsdWU9XCIwXCI+XHJcbiAgICA8cC10YWJsaXN0PlxyXG4gICAgICAgQGZvciAodGFiIG9mIHRhYnNfOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICA8cC10YWIgdmFsdWU9XCJ7eyRpbmRleH19XCI+XHJcbiAgICAgICAgICA8aSBbY2xhc3NdPVwidGFiLmljb25cIj48L2k+XHJcbiAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtci0xIG1sLTFcIj57eyB0YWIuaGVhZGVyIH19PC9zcGFuPlxyXG4gICAgICAgIDwvcC10YWI+XHJcbiAgICAgICB9XHJcbiAgICA8L3AtdGFibGlzdD5cclxuICAgIDxwLXRhYnBhbmVscz5cclxuICAgICAgQGZvciAodGFiIG9mIHRhYnNfOyB0cmFjayAkaW5kZXgpIHtcclxuIDxwLXRhYnBhbmVsIHZhbHVlPVwie3skaW5kZXh9fVwiPlxyXG5cclxuICAgICAgPCEtLSBGb3JtbHkgZmllbGRzIC0tPlxyXG4gICAgICA8IS0tIGJvcmRlciBib3JkZXItc3VyZmFjZSBwLTQtLT5cclxuICAgICAgPGRpdiAgY2xhc3M9XCJcIj5cclxuICAgICAgICBAaWYgKHRhYi5maWVsZHMubGVuZ3RoICYmICRpbmRleCA9PT0gMCkge1xyXG5cclxuICAgICAgIDxmb3JtICpuZ0lmPVwiZm9ybVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxyXG4gICAgICAgICBAaWYgKHRhYi5maWVsZHMubGVuZ3RoICYmICRpbmRleCA9PT0gMCApIHtcclxuIEBpZiAoaXNFZGl0TW9kZSB8fCBpc0NyZWF0ZU1vZGUpIHtcclxuICAgICAgICAgPGFwcC1nZW5lcmljLWRpYWxvZ1xyXG4gICAgICAgICAjaW5saW5lRm9ybVxyXG4gICAgICAgICBbZm9ybV09XCJmb3JtXCJcclxuICAgICAgICAgW21vZGVsXT1cIm1vZGVsXCJcclxuICAgIFtmb3JtRmllbGRzXT1cImZvcm1GaWVsZHMgPz8gW11cIlxyXG4gICAgW2FwaU5hbWVdPVwiYXBpTmFtZVwiXHJcbiAgICBbaWRGaWVsZF09XCJpZEZpZWxkID8/J2lkJ1wiXHJcbiAgICBbZGlzcGxheU1vZGVdPVwiJ2lubGluZSdcIlxyXG4gICAgIFttb2RlXT1cIidmb3JtLW9ubHknXCJcclxuICAgICBbZm9yY2VTdGF0ZV09XCJpc0NyZWF0ZU1vZGUgPyAnY3JlYXRlJzonZWRpdCdcIlxyXG4gICAgKGFmdGVyU2F2ZSk9XCJhZnRlclNhdmUoJGV2ZW50KVwiXHJcbiAgPlxyXG4gIDwvYXBwLWdlbmVyaWMtZGlhbG9nPlxyXG59XHJcbkBlbHNlIGlmKGlzVmlld01vZGUpe1xyXG4gPGZvcm1seS1mb3JtXHJcbiAgICAgICAgICBbZm9ybV09XCJmb3JtXCJcclxuICAgICAgICAgIFtmaWVsZHNdPVwidGFiLmZpZWxkc1wiXHJcbiAgICAgICAgICBbbW9kZWxdPVwibW9kZWxcIlxyXG4gICAgICAgID48L2Zvcm1seS1mb3JtPlxyXG59XHJcbn1cclxuICAgICAgICA8L2Zvcm0+XHJcblxyXG4gICAgICB9XHJcbiAgICAgIEBpZiAodGFiLmZpZWxkcy5sZW5ndGggJiYgJGluZGV4ID4gMCkge1xyXG5cclxuXHJcbiAgICAgICAgPGZvcm1seS1mb3JtXHJcbiAgICAgICAgICBbZm9ybV09XCJnZXRGb3JtKCRpbmRleClcIlxyXG4gICAgICAgICAgW2ZpZWxkc109XCJ0YWIuZmllbGRzXCJcclxuICAgICAgICAgIFttb2RlbF09XCJ0YWIubW9kZWwgfHwgbW9kZWxcIlxyXG4gICAgICAgID48L2Zvcm1seS1mb3JtPlxyXG5cclxuICAgICAgfVxyXG5cclxuICAgICAgPCEtLSBDdXN0b20gdGVtcGxhdGUgLS0+XHJcbiAgICAgIEBpZiAodGFiLmNvbnRlbnQpIHtcclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFiLmNvbnRlbnQ7IGNvbnRleHQ6IHsgbW9kZWw6IG1vZGVsIH1cIj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICAgICAgPC9wLXRhYnBhbmVsPlxyXG4gICAgfVxyXG4gICAgPC9wLXRhYnBhbmVscz5cclxuICA8L3AtdGFicz5cclxuPC9kaXY+XHJcblxyXG48IS0tIFttb2RlbF09XCJtb2RlbFwiIC0tPlxyXG4gIDxhcHAtZ2VuZXJpYy1kaWFsb2dcclxuICAgICNkaWFsb2dcclxuICAgIFtmb3JtRmllbGRzXT1cImZvcm1GaWVsZHMgPz8gW11cIlxyXG4gICAgW2FwaU5hbWVdPVwiYXBpTmFtZVwiXHJcbiAgICBbaWRGaWVsZF09XCJpZEZpZWxkID8/J2lkJ1wiXHJcbiAgICBbZGlzcGxheU1vZGVdPVwiZGlzcGxheU1vZGUgPz8gJ2RpYWxvZydcIlxyXG4gICAgKGFmdGVyU2F2ZSk9XCJhZnRlclNhdmUoJGV2ZW50KVwiXHJcbiAgPlxyXG4gIDwvYXBwLWdlbmVyaWMtZGlhbG9nPlxyXG59XHJcbiJdfQ==","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport * as i0 from \"@angular/core\";\nexport class GenericViewModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericViewModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericViewModule, imports: [CommonModule] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericViewModule, imports: [CommonModule] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericViewModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy12aWV3LW1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXZpZXcvc3JjL2xpYi9nZW5lcmljLXZpZXctbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUsvQyxNQUFNLE9BQU8saUJBQWlCO3VHQUFqQixpQkFBaUI7d0dBQWpCLGlCQUFpQixZQUZsQixZQUFZO3dHQUVYLGlCQUFpQixZQUZsQixZQUFZOzsyRkFFWCxpQkFBaUI7a0JBSDdCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJpY1ZpZXdNb2R1bGUge31cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxpdGUuZnJhbWV3b3JrLW5nLnVpLmNvcmUtZ2VuZXJpYy12aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtdmlldy9zcmMvZWxpdGUuZnJhbWV3b3JrLW5nLnVpLmNvcmUtZ2VuZXJpYy12aWV3LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":"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"}