ets-fe-ng-sdk 17.0.169 → 17.0.170
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/Shared/components/table-input/table-input.component.mjs +3 -3
- package/fesm2022/ets-fe-ng-sdk.mjs +2 -2
- package/fesm2022/ets-fe-ng-sdk.mjs.map +1 -1
- package/lib/Services/api.service.d.ts +1 -1
- package/lib/Services/utility.service.d.ts +1 -1
- package/lib/Shared/components/table-https/table-https.component.d.ts +1 -1
- package/package.json +1 -1
|
@@ -159,7 +159,7 @@ export class TableInputComponent extends FormGeneratorComponent {
|
|
|
159
159
|
scheme.isRequired = scheme.isRequired || this.singleFormStructure?.controls[scheme.field]?.hasValidator(Validators.required);
|
|
160
160
|
}
|
|
161
161
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.0", ngImport: i0, type: TableInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
162
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.0", type: TableInputComponent, isStandalone: true, selector: "table-input", inputs: { formArray: { classPropertyName: "formArray", publicName: "formArray", isSignal: true, isRequired: false, transformFunction: null }, filterContainerClass: { classPropertyName: "filterContainerClass", publicName: "filterContainerClass", isSignal: true, isRequired: false, transformFunction: null }, border: { classPropertyName: "border", publicName: "border", isSignal: true, isRequired: false, transformFunction: null }, isShow: { classPropertyName: "isShow", publicName: "isShow", isSignal: true, isRequired: false, transformFunction: null }, _pageSize: { classPropertyName: "_pageSize", publicName: "pageSize", isSignal: false, isRequired: false, transformFunction: null }, actionBtns: { classPropertyName: "actionBtns", publicName: "actionBtns", isSignal: true, isRequired: false, transformFunction: null }, _formSchema: { classPropertyName: "_formSchema", publicName: "formSchema", isSignal: false, isRequired: true, transformFunction: null }, singleFormStructure: { classPropertyName: "singleFormStructure", publicName: "singleFormStructure", isSignal: false, isRequired: true, transformFunction: null }, deleteRowFunc: { classPropertyName: "deleteRowFunc", publicName: "deleteRowFunc", isSignal: false, isRequired: false, transformFunction: null }, addRowFunc: { classPropertyName: "addRowFunc", publicName: "addRowFunc", isSignal: false, isRequired: false, transformFunction: null }, _usePaginator: { classPropertyName: "_usePaginator", publicName: "usePaginator", isSignal: false, isRequired: false, transformFunction: null }, tableClass: { classPropertyName: "tableClass", publicName: "tableClass", isSignal: true, isRequired: false, transformFunction: null } }, providers: [FilterFormArrayGroupPipe], viewQueries: [{ propertyName: "paginatorComponent", first: true, predicate: PaginatorComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"table-input\">\n @if (filterForms()?.length) {\n <div class=\"mb-3 {{ filterContainerClass() }}\">\n <div class=\"d-flex\">\n <app-btn\n text=\"{{ filterSection.hidden ? 'Show Filter' : 'Hide Filter' }}\"\n [icon]=\"filterSection.hidden ? 'search' : 'close'\"\n (mclick)=\"filterSection.hidden = !filterSection.hidden\" />\n </div>\n <div class=\"border p-3 mt-3 rounded-10\" #filterSection [hidden]=\"true\">\n <form-generator [form]=\"filterForm\" [formSchema]=\"filterForms()\" [gridLGStyle]=\"3\" [showSubmitBtn]=\"false\" (mchange)=\"resetPaginator()\" />\n <div class=\"d-flex justify-content-end\">\n <app-btn type=\"danger-outline\" text=\"Clear\" (mclick)=\"filterForm.reset()\" />\n </div>\n </div>\n </div>\n }\n\n <div class=\"bg-white\" [ngClass]=\"{ 'border rounded-10': border() }\">\n <div class=\" \">\n <table class=\" {{ tableClass() }} \" [ngClass]=\"{ 'is-show-form': isShow() }\">\n <thead (click)=\"utilityService.logForm(filteredFormArray())\">\n <tr class=\"text-center\">\n @for (item of formSchema(); track item.label) {\n <th class=\"{{ item.cls }}\">\n {{ item.label | appTranslate | async }}\n {{ item.isRequired ? '*' : '' }}\n </th>\n }\n @if (!isShow()) {\n <th></th>\n <th></th>\n @for (actionBtn of actionBtns(); track actionBtn) {\n <th></th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (subForm of paginatedAndFilteredFormArray(); track subForm; let i = $index) {\n <tr\n table-input-row\n (onAddRowFunc)=\"addRowClicked(subForm.index)\"\n [isShow]=\"isShow()\"\n [form]=\"subForm.form\"\n [actionBtns]=\"actionBtns()\"\n [formSchema]=\"formSchema()\"\n [childrenFormSchemaMap]=\"childrenFormSchemaMap\"\n (onDeleteRowFunc)=\"\n deleteRowClicked(subForm.index, subForm.form, {\n btn: $event?.btn\n })\n \"\n (onActionButtonClick)=\"handleActionButtonClick(subForm.index, subForm.form, $event)\"></tr>\n } @empty {\n <tr>\n <td class=\"text-center\" [colSpan]=\"formSchema?.length\">\n {{ 'There are no items' | appTranslate | async }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"\" [hidden]=\"!usePaginator() || !filteredFormArrayLength() || filteredFormArrayLength() < pageSize()\">\n <paginator\n #paginatorTag\n [arrayLength]=\"filteredFormArrayLength()\"\n (pageChanged)=\"pageChanged($event)\"\n [pageSize]=\"pageSize()\"\n [resetIndexFunc]=\"filterForm.valueChanges\" />\n </div>\n </div>\n</div>\n", styles: ["tr{vertical-align:top}:host ::ng-deep .text-center input{text-align:center}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "disabled", "form", "forms", "help", "iconBtn", "loading", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid"], outputs: ["mclick"] }, { kind: "component", type: FormGeneratorComponent, selector: "form-generator", inputs: ["keyField", "submitFunc", "submitBtnText", "submitBtnTemplate", "submitSuccessText", "showSubmitBtn", "gridStyle", "gridMDStyle", "gridLGStyle", "gridXXLStyle", "formGridClass", "useLoader", "loading", "form", "formSchema", "isShow"], outputs: ["onSubmit", "mchange", "submissionResponse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "ngmodule", type: MatTabsModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: PaginatorComponent, selector: "paginator", inputs: ["pageSize", "pageIndex", "arrayLength", "resetIndexFunc", "pageSizeOptions"], outputs: ["pageChanged"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: TableInputRowComponent, selector: "tr[table-input-row]", inputs: ["isShow", "hideAdd", "actionBtns", "childrenFormSchemaMap"], outputs: ["onDeleteRowFunc", "onAddRowFunc", "onActionButtonClick"] }, { kind: "pipe", type: TranslatePipe, name: "appTranslate" }] }); }
|
|
162
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.0", type: TableInputComponent, isStandalone: true, selector: "table-input", inputs: { formArray: { classPropertyName: "formArray", publicName: "formArray", isSignal: true, isRequired: false, transformFunction: null }, filterContainerClass: { classPropertyName: "filterContainerClass", publicName: "filterContainerClass", isSignal: true, isRequired: false, transformFunction: null }, border: { classPropertyName: "border", publicName: "border", isSignal: true, isRequired: false, transformFunction: null }, isShow: { classPropertyName: "isShow", publicName: "isShow", isSignal: true, isRequired: false, transformFunction: null }, _pageSize: { classPropertyName: "_pageSize", publicName: "pageSize", isSignal: false, isRequired: false, transformFunction: null }, actionBtns: { classPropertyName: "actionBtns", publicName: "actionBtns", isSignal: true, isRequired: false, transformFunction: null }, _formSchema: { classPropertyName: "_formSchema", publicName: "formSchema", isSignal: false, isRequired: true, transformFunction: null }, singleFormStructure: { classPropertyName: "singleFormStructure", publicName: "singleFormStructure", isSignal: false, isRequired: true, transformFunction: null }, deleteRowFunc: { classPropertyName: "deleteRowFunc", publicName: "deleteRowFunc", isSignal: false, isRequired: false, transformFunction: null }, addRowFunc: { classPropertyName: "addRowFunc", publicName: "addRowFunc", isSignal: false, isRequired: false, transformFunction: null }, _usePaginator: { classPropertyName: "_usePaginator", publicName: "usePaginator", isSignal: false, isRequired: false, transformFunction: null }, tableClass: { classPropertyName: "tableClass", publicName: "tableClass", isSignal: true, isRequired: false, transformFunction: null } }, providers: [FilterFormArrayGroupPipe, PaginatorPipe], viewQueries: [{ propertyName: "paginatorComponent", first: true, predicate: PaginatorComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"table-input\">\n @if (filterForms()?.length) {\n <div class=\"mb-3 {{ filterContainerClass() }}\">\n <div class=\"d-flex\">\n <app-btn\n text=\"{{ filterSection.hidden ? 'Show Filter' : 'Hide Filter' }}\"\n [icon]=\"filterSection.hidden ? 'search' : 'close'\"\n (mclick)=\"filterSection.hidden = !filterSection.hidden\" />\n </div>\n <div class=\"border p-3 mt-3 rounded-10\" #filterSection [hidden]=\"true\">\n <form-generator [form]=\"filterForm\" [formSchema]=\"filterForms()\" [gridLGStyle]=\"3\" [showSubmitBtn]=\"false\" (mchange)=\"resetPaginator()\" />\n <div class=\"d-flex justify-content-end\">\n <app-btn type=\"danger-outline\" text=\"Clear\" (mclick)=\"filterForm.reset()\" />\n </div>\n </div>\n </div>\n }\n\n <div class=\"bg-white\" [ngClass]=\"{ 'border rounded-10': border() }\">\n <div class=\" \">\n <table class=\" {{ tableClass() }} \" [ngClass]=\"{ 'is-show-form': isShow() }\">\n <thead (click)=\"utilityService.logForm(filteredFormArray())\">\n <tr class=\"text-center\">\n @for (item of formSchema(); track item.label) {\n <th class=\"{{ item.cls }}\">\n {{ item.label | appTranslate | async }}\n {{ item.isRequired ? '*' : '' }}\n </th>\n }\n @if (!isShow()) {\n <th></th>\n <th></th>\n @for (actionBtn of actionBtns(); track actionBtn) {\n <th></th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (subForm of paginatedAndFilteredFormArray(); track subForm; let i = $index) {\n <tr\n table-input-row\n (onAddRowFunc)=\"addRowClicked(subForm.index)\"\n [isShow]=\"isShow()\"\n [form]=\"subForm.form\"\n [actionBtns]=\"actionBtns()\"\n [formSchema]=\"formSchema()\"\n [childrenFormSchemaMap]=\"childrenFormSchemaMap\"\n (onDeleteRowFunc)=\"\n deleteRowClicked(subForm.index, subForm.form, {\n btn: $event?.btn\n })\n \"\n (onActionButtonClick)=\"handleActionButtonClick(subForm.index, subForm.form, $event)\"></tr>\n } @empty {\n <tr>\n <td class=\"text-center\" [colSpan]=\"formSchema?.length\">\n {{ 'There are no items' | appTranslate | async }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"\" [hidden]=\"!usePaginator() || !filteredFormArrayLength() || filteredFormArrayLength() < pageSize()\">\n <paginator\n #paginatorTag\n [arrayLength]=\"filteredFormArrayLength()\"\n (pageChanged)=\"pageChanged($event)\"\n [pageSize]=\"pageSize()\"\n [resetIndexFunc]=\"filterForm.valueChanges\" />\n </div>\n </div>\n</div>\n", styles: ["tr{vertical-align:top}:host ::ng-deep .text-center input{text-align:center}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "disabled", "form", "forms", "help", "iconBtn", "loading", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid"], outputs: ["mclick"] }, { kind: "component", type: FormGeneratorComponent, selector: "form-generator", inputs: ["keyField", "submitFunc", "submitBtnText", "submitBtnTemplate", "submitSuccessText", "showSubmitBtn", "gridStyle", "gridMDStyle", "gridLGStyle", "gridXXLStyle", "formGridClass", "useLoader", "loading", "form", "formSchema", "isShow"], outputs: ["onSubmit", "mchange", "submissionResponse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "ngmodule", type: MatTabsModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: PaginatorComponent, selector: "paginator", inputs: ["pageSize", "pageIndex", "arrayLength", "resetIndexFunc", "pageSizeOptions"], outputs: ["pageChanged"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: TableInputRowComponent, selector: "tr[table-input-row]", inputs: ["isShow", "hideAdd", "actionBtns", "childrenFormSchemaMap"], outputs: ["onDeleteRowFunc", "onAddRowFunc", "onActionButtonClick"] }, { kind: "pipe", type: TranslatePipe, name: "appTranslate" }] }); }
|
|
163
163
|
}
|
|
164
164
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImport: i0, type: TableInputComponent, decorators: [{
|
|
165
165
|
type: Component,
|
|
@@ -195,7 +195,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImpor
|
|
|
195
195
|
TranslatePipe,
|
|
196
196
|
FilterFormArrayGroupPipe,
|
|
197
197
|
ValidationMessageComponent,
|
|
198
|
-
], providers: [FilterFormArrayGroupPipe], template: "<div class=\"table-input\">\n @if (filterForms()?.length) {\n <div class=\"mb-3 {{ filterContainerClass() }}\">\n <div class=\"d-flex\">\n <app-btn\n text=\"{{ filterSection.hidden ? 'Show Filter' : 'Hide Filter' }}\"\n [icon]=\"filterSection.hidden ? 'search' : 'close'\"\n (mclick)=\"filterSection.hidden = !filterSection.hidden\" />\n </div>\n <div class=\"border p-3 mt-3 rounded-10\" #filterSection [hidden]=\"true\">\n <form-generator [form]=\"filterForm\" [formSchema]=\"filterForms()\" [gridLGStyle]=\"3\" [showSubmitBtn]=\"false\" (mchange)=\"resetPaginator()\" />\n <div class=\"d-flex justify-content-end\">\n <app-btn type=\"danger-outline\" text=\"Clear\" (mclick)=\"filterForm.reset()\" />\n </div>\n </div>\n </div>\n }\n\n <div class=\"bg-white\" [ngClass]=\"{ 'border rounded-10': border() }\">\n <div class=\" \">\n <table class=\" {{ tableClass() }} \" [ngClass]=\"{ 'is-show-form': isShow() }\">\n <thead (click)=\"utilityService.logForm(filteredFormArray())\">\n <tr class=\"text-center\">\n @for (item of formSchema(); track item.label) {\n <th class=\"{{ item.cls }}\">\n {{ item.label | appTranslate | async }}\n {{ item.isRequired ? '*' : '' }}\n </th>\n }\n @if (!isShow()) {\n <th></th>\n <th></th>\n @for (actionBtn of actionBtns(); track actionBtn) {\n <th></th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (subForm of paginatedAndFilteredFormArray(); track subForm; let i = $index) {\n <tr\n table-input-row\n (onAddRowFunc)=\"addRowClicked(subForm.index)\"\n [isShow]=\"isShow()\"\n [form]=\"subForm.form\"\n [actionBtns]=\"actionBtns()\"\n [formSchema]=\"formSchema()\"\n [childrenFormSchemaMap]=\"childrenFormSchemaMap\"\n (onDeleteRowFunc)=\"\n deleteRowClicked(subForm.index, subForm.form, {\n btn: $event?.btn\n })\n \"\n (onActionButtonClick)=\"handleActionButtonClick(subForm.index, subForm.form, $event)\"></tr>\n } @empty {\n <tr>\n <td class=\"text-center\" [colSpan]=\"formSchema?.length\">\n {{ 'There are no items' | appTranslate | async }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"\" [hidden]=\"!usePaginator() || !filteredFormArrayLength() || filteredFormArrayLength() < pageSize()\">\n <paginator\n #paginatorTag\n [arrayLength]=\"filteredFormArrayLength()\"\n (pageChanged)=\"pageChanged($event)\"\n [pageSize]=\"pageSize()\"\n [resetIndexFunc]=\"filterForm.valueChanges\" />\n </div>\n </div>\n</div>\n", styles: ["tr{vertical-align:top}:host ::ng-deep .text-center input{text-align:center}\n"] }]
|
|
198
|
+
], providers: [FilterFormArrayGroupPipe, PaginatorPipe], template: "<div class=\"table-input\">\n @if (filterForms()?.length) {\n <div class=\"mb-3 {{ filterContainerClass() }}\">\n <div class=\"d-flex\">\n <app-btn\n text=\"{{ filterSection.hidden ? 'Show Filter' : 'Hide Filter' }}\"\n [icon]=\"filterSection.hidden ? 'search' : 'close'\"\n (mclick)=\"filterSection.hidden = !filterSection.hidden\" />\n </div>\n <div class=\"border p-3 mt-3 rounded-10\" #filterSection [hidden]=\"true\">\n <form-generator [form]=\"filterForm\" [formSchema]=\"filterForms()\" [gridLGStyle]=\"3\" [showSubmitBtn]=\"false\" (mchange)=\"resetPaginator()\" />\n <div class=\"d-flex justify-content-end\">\n <app-btn type=\"danger-outline\" text=\"Clear\" (mclick)=\"filterForm.reset()\" />\n </div>\n </div>\n </div>\n }\n\n <div class=\"bg-white\" [ngClass]=\"{ 'border rounded-10': border() }\">\n <div class=\" \">\n <table class=\" {{ tableClass() }} \" [ngClass]=\"{ 'is-show-form': isShow() }\">\n <thead (click)=\"utilityService.logForm(filteredFormArray())\">\n <tr class=\"text-center\">\n @for (item of formSchema(); track item.label) {\n <th class=\"{{ item.cls }}\">\n {{ item.label | appTranslate | async }}\n {{ item.isRequired ? '*' : '' }}\n </th>\n }\n @if (!isShow()) {\n <th></th>\n <th></th>\n @for (actionBtn of actionBtns(); track actionBtn) {\n <th></th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (subForm of paginatedAndFilteredFormArray(); track subForm; let i = $index) {\n <tr\n table-input-row\n (onAddRowFunc)=\"addRowClicked(subForm.index)\"\n [isShow]=\"isShow()\"\n [form]=\"subForm.form\"\n [actionBtns]=\"actionBtns()\"\n [formSchema]=\"formSchema()\"\n [childrenFormSchemaMap]=\"childrenFormSchemaMap\"\n (onDeleteRowFunc)=\"\n deleteRowClicked(subForm.index, subForm.form, {\n btn: $event?.btn\n })\n \"\n (onActionButtonClick)=\"handleActionButtonClick(subForm.index, subForm.form, $event)\"></tr>\n } @empty {\n <tr>\n <td class=\"text-center\" [colSpan]=\"formSchema?.length\">\n {{ 'There are no items' | appTranslate | async }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"\" [hidden]=\"!usePaginator() || !filteredFormArrayLength() || filteredFormArrayLength() < pageSize()\">\n <paginator\n #paginatorTag\n [arrayLength]=\"filteredFormArrayLength()\"\n (pageChanged)=\"pageChanged($event)\"\n [pageSize]=\"pageSize()\"\n [resetIndexFunc]=\"filterForm.valueChanges\" />\n </div>\n </div>\n</div>\n", styles: ["tr{vertical-align:top}:host ::ng-deep .text-center input{text-align:center}\n"] }]
|
|
199
199
|
}], propDecorators: { _pageSize: [{
|
|
200
200
|
type: Input,
|
|
201
201
|
args: ['pageSize']
|
|
@@ -216,4 +216,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImpor
|
|
|
216
216
|
type: ViewChild,
|
|
217
217
|
args: [PaginatorComponent]
|
|
218
218
|
}] } });
|
|
219
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NoYXJlZC9jb21wb25lbnRzL3RhYmxlLWlucHV0L3RhYmxlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy90YWJsZS1pbnB1dC90YWJsZS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBOEIsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEksT0FBTyxFQUFFLHdCQUF3QixFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFakksT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUs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NEMsV0FBVztzQkFBdkUsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRTtnQkFLOUMsbUJBQW1CO3NCQURsQixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFLaEIsYUFBYTtzQkFBckIsS0FBSztnQkFJRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNxQixhQUFhO3NCQUF2QyxLQUFLO3VCQUFDLGNBQWM7Z0JBdUJVLGtCQUFrQjtzQkFBaEQsU0FBUzt1QkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCwgY29tcHV0ZWQsIGluamVjdCwgaW5wdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSUZvcm1TY2hlbWEgfSBmcm9tICcuLi8uLi9tb2RlbHMvZm9ybS1zY2hlbWEubW9kZWwnO1xuaW1wb3J0IHsgRmlsdGVyRm9ybUFycmF5R3JvdXBQaXBlLCBGb3JtVmFsdWVQaXBlLCBGdW5jdGlvbkNhbGxlcjIsIEhhc0Zvcm1WYWx1ZVBpcGUsIFRvQW55UGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3V0aWxpdHkucGlwZSc7XG5cbmltcG9ydCB7IEJ0bkNvbXBvbmVudCB9IGZyb20gJy4uL2J0bi9idG4uY29tcG9uZW50JztcbmltcG9ydCB7IElucHV0QmFzaWNDb21wb25lbnQgfSBmcm9tICcuLi9pbnB1dC9pbnB1dC1iYXNpYy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXV0b2NvbXBsZXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVmFsaWRhdGlvbk1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICcuLi9pbnB1dC92YWxpZGF0aW9uLW1lc3NhZ2UvdmFsaWRhdGlvbi1tZXNzYWdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQaG9uZU51bWJlckNvbXBvbmVudCB9IGZyb20gJy4uL3Bob25lLW51bWJlci9waG9uZS1udW1iZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFzeW5jUGlwZSwgSnNvblBpcGUsIE5nQ2xhc3MsIE5nRm9yLCBOZ0lmLCBOZ1N3aXRjaCwgTmdTd2l0Y2hDYXNlLCBOZ1N3aXRjaERlZmF1bHQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vbG9hZGVyL2xvYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybUdlbmVyYXRvckNvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0tZ2VuZXJhdG9yL2Zvcm0tZ2VuZXJhdG9yLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IFBhZ2luYXRvckNvbXBvbmVudCB9IGZyb20gJy4uL3BhZ2luYXRvci9wYWdpbmF0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vbW9kYWwvbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IE1hdEV4cGFuc2lvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbic7XG5pbXBvcnQgeyBNYXRUYWJzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFicyc7XG5pbXBvcnQgeyBUYWJsZUlucHV0Um93Q29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS1pbnB1dC1yb3cvdGFibGUtaW5wdXQtcm93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGZpbHRlciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSUJ0biB9IGZyb20gJy4uL2J0bi9idG4ubW9kZWwnO1xuaW1wb3J0IHsgVXRpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9TZXJ2aWNlcy91dGlsaXR5LnNlcnZpY2UnO1xuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3RyYW5zbGF0ZS5waXBlJztcbmltcG9ydCB7IFBhZ2luYXRvclBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9wYWdpbmF0b3IucGlwZSc7XG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuLyoqXG4gKiBUYWJsZSBJbnB1dCBDb21wb25lbnRcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGFibGUtaW5wdXQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQXN5bmNQaXBlLFxuICAgIEF1dG9jb21wbGV0ZUNvbXBvbmVudCxcbiAgICBCdG5Db21wb25lbnQsXG4gICAgRmlsdGVyRm9ybUFycmF5R3JvdXBQaXBlLFxuICAgIEZvcm1HZW5lcmF0b3JDb21wb25lbnQsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgRm9ybVZhbHVlUGlwZSxcbiAgICBGdW5jdGlvbkNhbGxlcjIsXG4gICAgSGFzRm9ybVZhbHVlUGlwZSxcbiAgICBJbnB1dEJhc2ljQ29tcG9uZW50LFxuICAgIEpzb25QaXBlLFxuICAgIExvYWRlckNvbXBvbmVudCxcbiAgICBNYXRFeHBhbnNpb25Nb2R1bGUsXG4gICAgTWF0VGFic01vZHVsZSxcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxuICAgIE1vZGFsQ29tcG9uZW50LFxuICAgIE5nQ2xhc3MsXG4gICAgTmdGb3IsXG4gICAgTmdJZixcbiAgICBOZ1N3aXRjaCxcbiAgICBOZ1N3aXRjaENhc2UsXG4gICAgTmdTd2l0Y2hEZWZhdWx0LFxuICAgIFBhZ2luYXRvckNvbXBvbmVudCxcbiAgICBQYWdpbmF0b3JQaXBlLFxuICAgIFBob25lTnVtYmVyQ29tcG9uZW50LFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgVGFibGVJbnB1dFJvd0NvbXBvbmVudCxcbiAgICBUb0FueVBpcGUsXG4gICAgVHJhbnNsYXRlUGlwZSxcbiAgICBGaWx0ZXJGb3JtQXJyYXlHcm91cFBpcGUsXG4gICAgVmFsaWRhdGlvbk1lc3NhZ2VDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW0ZpbHRlckZvcm1BcnJheUdyb3VwUGlwZV0sXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlSW5wdXRDb21wb25lbnQ8XG4gICAgVEZvcm1Hcm91cCBleHRlbmRzIHtcbiAgICAgIFtLIGluIGtleW9mIFRGb3JtR3JvdXBdOiBBYnN0cmFjdENvbnRyb2w8YW55LCBhbnk+O1xuICAgIH0gPSBhbnksXG4gID5cbiAgZXh0ZW5kcyBGb3JtR2VuZXJhdG9yQ29tcG9uZW50PFRGb3JtR3JvdXA+XG4gIGltcGxlbWVudHMgT25Jbml0XG57XG4gIC8vIEBJbnB1dCgpIHBhZ2VUeXBlXG4gIGZvcm1BcnJheSA9IGlucHV0PEZvcm1BcnJheTxGb3JtR3JvdXA8VEZvcm1Hcm91cD4+PigpO1xuICBmaWx0ZXJDb250YWluZXJDbGFzcyA9IGlucHV0PHN0cmluZz4oKTtcbiAgYm9yZGVyID0gaW5wdXQodHJ1ZSk7XG4gIGlzU2hvdyA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIEBJbnB1dCgncGFnZVNpemUnKSBzZXQgX3BhZ2VTaXplKHY6IG51bWJlcikge1xuICAgIHRoaXMucGFnZVNpemUuc2V0KHYpO1xuICB9XG4gIHBhZ2VTaXplID0gc2lnbmFsPG51bWJlcj4oMTApO1xuICBwYWdlU3RhdGUgPSBzaWduYWw8eyBwYWdlSW5kZXg6IG51bWJlcjsgcGFnZVNpemU6IG51bWJlciB9PihudWxsKTtcbiAgYWN0aW9uQnRucyA9IGlucHV0PElUYWJsZUlucHV0QnRuW10+KCk7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlLCBhbGlhczogJ2Zvcm1TY2hlbWEnIH0pIG92ZXJyaWRlIHNldCBfZm9ybVNjaGVtYSh2OiBJRm9ybVNjaGVtYTxURm9ybUdyb3VwPltdKSB7XG4gICAgdGhpcy5wcmVGb3JtYXRGb3JtU2NoZW1hKHYpO1xuICAgIHN1cGVyLl9mb3JtU2NoZW1hID0gdjtcbiAgfVxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBzaW5nbGVGb3JtU3RydWN0dXJlOiBGb3JtR3JvdXA8VEZvcm1Hcm91cD47XG4gIC8qKlxuICAgKiBMZWF2ZSBlbXB0eSBpZiB5b3UgZG9uJ3Qgd2FudCB0aGUgZGVsZXRlIGJ1dHRvbiB0byBzaG93XG4gICAqL1xuICBASW5wdXQoKSBkZWxldGVSb3dGdW5jOiAoaW5kZXg6IG51bWJlciwgZGF0YT86IEZvcm1Hcm91cDxURm9ybUdyb3VwPlsndmFsdWUnXSwgY29uZmlnPzogeyBidG46IEJ0bkNvbXBvbmVudCB9KSA9PiBhbnk7XG4gIC8qKlxuICAgKiBMZWF2ZSBlbXB0eSBpZiB5b3UgZG9uJ3Qgd2FudCB0aGUgYWRkIGJ1dHRvbiB0byBzaG93XG4gICAqL1xuICBASW5wdXQoKSBhZGRSb3dGdW5jOiAoaW5kZXg6IG51bWJlciwgZGF0YT86IEZvcm1Hcm91cDxURm9ybUdyb3VwPlsndmFsdWUnXSkgPT4gYW55O1xuICBASW5wdXQoJ3VzZVBhZ2luYXRvcicpIHNldCBfdXNlUGFnaW5hdG9yKHY6IGJvb2xlYW4pIHtcbiAgICBpZiAodikge1xuICAgICAgdGhpcy51c2VQYWdpbmF0b3Iuc2V0KHRydWUpO1xuICAgICAgdGhpcy5wYWdlU2l6ZS51cGRhdGUoKHBhZ2VTaXplKSA9PiBwYWdlU2l6ZSB8fCAxMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXNlUGFnaW5hdG9yLnNldChmYWxzZSk7XG4gICAgICB0aGlzLnBhZ2VTaXplID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHRhYmxlQ2xhc3MgPSBpbnB1dDwndGFibGUgdGFibGUtcmVzcG9uc2l2ZSB0YWJsZS1yZXNwb25zaXZlIHRhYmxlLWJvcmRlcmxlc3MnPigpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmlsdGVyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICBwcm90ZWN0ZWQgZmlsdGVyRm9ybXMgPSBzaWduYWw8SUZvcm1TY2hlbWFbXT4oW10pO1xuICBwcm90ZWN0ZWQgdXNlUGFnaW5hdG9yID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xuICBwcm90ZWN0ZWQgY2hpbGRyZW5Gb3JtU2NoZW1hTWFwOiB7XG4gICAgW2sgaW4ga2V5b2YgVEZvcm1Hcm91cF0/OiB7XG4gICAgICBmb3JtU2NoZW1hOiBJRm9ybVNjaGVtYVtdO1xuICAgICAgZm9ybVNjaGVtYVN0cjogc3RyaW5nW107XG4gICAgfTtcbiAgfSA9IHt9O1xuICByZWZyZXNoZXI6IG51bWJlcjtcbiAgZm9ybUFycmF5UGFnaW5hdGlvblN1YjogU3Vic2NyaXB0aW9uO1xuXG4gIEBWaWV3Q2hpbGQoUGFnaW5hdG9yQ29tcG9uZW50KSBwYWdpbmF0b3JDb21wb25lbnQ6IFBhZ2luYXRvckNvbXBvbmVudDtcblxuICBmaWx0ZXJGb3JtVmFsdWVTaWduYWwgPSB0b1NpZ25hbCh0aGlzLmZpbHRlckZvcm0udmFsdWVDaGFuZ2VzKTtcblxuICBmaWx0ZXJlZEZvcm1BcnJheSA9IGNvbXB1dGVkPHsgZm9ybTogRm9ybUdyb3VwPFRGb3JtR3JvdXA+OyBpbmRleDogbnVtYmVyIH1bXT4oKCkgPT4ge1xuICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuZm9ybUFycmF5KCksXG4gICAgICBmaWx0ZXJGb3JtVmFsdWUgPSB0aGlzLmZpbHRlckZvcm0uZ2V0UmF3VmFsdWUoKTtcbiAgICBjb25zdCBmb3JtR3JvdXBzID0gZm9ybUFycmF5Py5jb250cm9scz8ubWFwKChjLCBpbmRleCkgPT4gKHsgaW5kZXgsIGZvcm06IGMgfSkpO1xuICAgIGNvbnN0IGZpbHRlck9iamVjdCA9IHRoaXMuZmlsdGVyRm9ybUFycmF5R3JvdXBQaXBlLnF1ZXJ5TWFwcGVyKGZpbHRlckZvcm1WYWx1ZSk7XG4gICAgcmV0dXJuIGZvcm1Hcm91cHMuZmlsdGVyKCh7IGZvcm0gfSkgPT4gdGhpcy5maWx0ZXJGb3JtQXJyYXlHcm91cFBpcGUuZmlsdGVyRnVuYyhmaWx0ZXJPYmplY3QpKGZvcm0pKTtcbiAgfSk7XG4gIHBhZ2luYXRlZEFuZEZpbHRlcmVkRm9ybUFycmF5ID0gY29tcHV0ZWQ8eyBmb3JtOiBGb3JtR3JvdXA8VEZvcm1Hcm91cD47IGluZGV4OiBudW1iZXIgfVtdPigoKSA9PiB7XG4gICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5maWx0ZXJlZEZvcm1BcnJheSgpLFxuICAgICAgcGFnZVN0YXRlID0gdGhpcy5wYWdlU3RhdGUoKTtcbiAgICByZXR1cm4gdGhpcy51c2VQYWdpbmF0b3IoKSA/IHRoaXMucGFnaW5hdG9yUGlwZS50cmFuc2Zvcm0oZm9ybUFycmF5LCBwYWdlU3RhdGUucGFnZVNpemUsIHBhZ2VTdGF0ZS5wYWdlSW5kZXgpIDogZm9ybUFycmF5O1xuICB9KTtcblxuICBmaWx0ZXJlZEZvcm1BcnJheUxlbmd0aCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZmlsdGVyZWRGb3JtQXJyYXkoKS5sZW5ndGgpO1xuXG4gIHB1YmxpYyBvdmVycmlkZSB1dGlsaXR5U2VydmljZSA9IGluamVjdChVdGlsaXR5U2VydmljZSk7XG4gIHB1YmxpYyBmaWx0ZXJGb3JtQXJyYXlHcm91cFBpcGUgPSBpbmplY3QoRmlsdGVyRm9ybUFycmF5R3JvdXBQaXBlKTtcbiAgcHVibGljIHBhZ2luYXRvclBpcGUgPSBpbmplY3QoUGFnaW5hdG9yUGlwZSk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudXNlUGFnaW5hdG9yID09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fdXNlUGFnaW5hdG9yID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9LCAxMDAwKTtcbiAgfVxuXG4gIHJlZnJlc2goKSB7XG4gICAgdGhpcy5yZWZyZXNoZXIgPSBNYXRoLnJhbmRvbSgpO1xuICB9XG5cbiAgb3ZlcnJpZGUgb25EZXN0cm95KCkge1xuICAgIHRoaXMuZm9ybUFycmF5UGFnaW5hdGlvblN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICByZXR1cm4gc3VwZXIub25EZXN0cm95KCk7XG4gIH1cblxuICBwYWdlQ2hhbmdlZCgkZXZlbnQ6IHsgcGFnZUluZGV4OiBudW1iZXI7IHBhZ2VTaXplOiBudW1iZXIgfSkge1xuICAgIHRoaXMucGFnZVN0YXRlLnNldCgkZXZlbnQpO1xuICB9XG5cbiAgcmVzZXRQYWdpbmF0b3IoKSB7XG4gICAgdGhpcy5wYWdpbmF0b3JDb21wb25lbnQ/LnJlc2V0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJlRm9ybWF0Rm9ybVNjaGVtYSA9IChpdGVtczogSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD5bXSkgPT4ge1xuICAgIGl0ZW1zLmZvckVhY2goKHgpID0+IHtcbiAgICAgIGlmICh4Lm9uQ2hhbmdlRnVuYykgeC50cmlnZ2VyT25DaGFuZ2VPbkluaXQgPSB0cnVlO1xuICAgICAgZWxzZSBpZiAoeC50eXBlID09ICdidXR0b24nKSB0aGlzLnByZUZvcm1hdEZvcm1TY2hlbWEoeC5jaGlsZHJlbik7XG4gICAgfSk7XG4gIH07XG5cbiAgb3ZlcnJpZGUgaW5pdChzY2hlbWE6IElGb3JtU2NoZW1hPFRGb3JtR3JvdXA+W10pOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlckZvcm1zLnNldChbXSk7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5maWx0ZXJGb3JtLmNvbnRyb2xzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuZmlsdGVyRm9ybS5jb250cm9scywga2V5KSkge1xuICAgICAgICB0aGlzLmZpbHRlckZvcm0ucmVtb3ZlQ29udHJvbChrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICB0aGlzLm9uRGVzdHJveSgpO1xuICAgIGlmIChzY2hlbWEpXG4gICAgICBmb3IgKGNvbnN0IHNjaGVtZSBvZiBzY2hlbWEpIHtcbiAgICAgICAgLy8gc2NoZW1lLmZvcm0gPSB0aGlzLmZvcm0gfHwgc2NoZW1lLmZvcm07XG4gICAgICAgIHRoaXMuaGFuZGxlRm9ybVNjaGVtZShzY2hlbWUpO1xuICAgICAgfVxuICAgIHRoaXMuX3NldEZvcm1TY2hlbWFzKHNjaGVtYSk7XG4gIH1cblxuICBoYW5kbGVBY3Rpb25CdXR0b25DbGljayhpbmRleDogbnVtYmVyLCBmb3JtOiBGb3JtR3JvdXA8VEZvcm1Hcm91cD4sIGU6IHsgYnRuPzogQnRuQ29tcG9uZW50OyBhY3Rpb25CdXR0b246IElUYWJsZUlucHV0QnRuIH0pIHtcbiAgICBlLmFjdGlvbkJ1dHRvbi5hY3Rpb24oeyBpbmRleCwgZm9ybSwgYnRuOiBlLmJ0biB9KTtcbiAgICAvLyB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIGRlbGV0ZVJvd0NsaWNrZWQgPSAoaW5kZXg6IG51bWJlciwgcm93Rm9ybTogRm9ybUdyb3VwPFRGb3JtR3JvdXA+LCBjb25maWc/OiB7IGJ0bjogQnRuQ29tcG9uZW50IH0pID0+IHtcbiAgICB0aGlzLmRlbGV0ZVJvd0Z1bmMoaW5kZXgsIHJvd0Zvcm0/LmdldFJhd1ZhbHVlKCksIGNvbmZpZyk7XG4gICAgLy8gdGhpcy5yZWZyZXNoKCk7XG4gIH07XG5cbiAgYWRkUm93Q2xpY2tlZCA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgdGhpcy5hZGRSb3dGdW5jKGluZGV4ICsgMSwgdGhpcy5maWx0ZXJGb3JtVmFsdWVTaWduYWwoKSk7XG4gICAgLy8gdGhpcy5yZWZyZXNoKCk7XG4gICAgLy8gdGhpcy5maWx0ZXJGb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfTtcblxuICBjaGVja1JlcXVpcmVkRmllbGRzID0gKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKHRoaXMuc2luZ2xlRm9ybVN0cnVjdHVyZSk7XG4gIH07XG5cbiAgb3ZlcnJpZGUgaGFuZGxlRm9ybVNjaGVtZShzY2hlbWU6IElGb3JtU2NoZW1hKSB7XG4gICAgc2NoZW1lLmlkID0gdGhpcy51dGlsaXR5U2VydmljZS5nZW5lcmF0ZVVVSUQoKTtcbiAgICBpZiAoc2NoZW1lLmF1dG9QaWNrVmFsdWVGaWVsZCA9PSBudWxsICYmICghc2NoZW1lLnZhbHVlRmllbGQgfHwgIXNjaGVtZS5sYWJlbEZpZWxkKSkgc2NoZW1lLmF1dG9QaWNrVmFsdWVGaWVsZCA9IHRydWU7XG5cbiAgICBpZiAoc2NoZW1lLm9wdGlvbnNJbml0RnVuYykge1xuICAgICAgc2NoZW1lLm9wdGlvbnNJbml0RnVuYy5zdWJzY3JpYmUoKHIpID0+IHtcbiAgICAgICAgc2NoZW1lLm9wdGlvbnMgPSByO1xuICAgICAgICAvLyB0aGlzLm9wdGlvbnNNYXBbc2NoZW1lLmZpZWxkXSA9IHI7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHNjaGVtZS5pc1NlYXJjaEZpZWxkKSB7XG4gICAgICB0aGlzLmZpbHRlckZvcm1zLnVwZGF0ZSgoZmlsdGVyRm9ybXMpID0+IGZpbHRlckZvcm1zLmNvbmNhdChbc2NoZW1lXSkpO1xuICAgICAgdGhpcy5maWx0ZXJGb3JtLmFkZENvbnRyb2woc2NoZW1lLmZpZWxkPy50b1N0cmluZygpLCBuZXcgRm9ybUNvbnRyb2woKSk7XG4gICAgfSBlbHNlIGlmIChzY2hlbWUudHlwZSA9PSAnYnV0dG9uJykge1xuICAgICAgaWYgKHNjaGVtZS5jaGlsZHJlbj8ubGVuZ3RoKVxuICAgICAgICB0aGlzLmNoaWxkcmVuRm9ybVNjaGVtYU1hcFtzY2hlbWUuZmllbGQgYXMgc3RyaW5nXSA9IHtcbiAgICAgICAgICBmb3JtU2NoZW1hOiBzY2hlbWUuY2hpbGRyZW4sXG4gICAgICAgICAgZm9ybVNjaGVtYVN0cjogc2NoZW1lLmNoaWxkcmVuLm1hcCgoeCkgPT4geC5maWVsZCBhcyBzdHJpbmcpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBzY2hlbWUuaXNSZXF1aXJlZCA9IHNjaGVtZS5pc1JlcXVpcmVkIHx8ICg8Rm9ybUdyb3VwPnRoaXMuc2luZ2xlRm9ybVN0cnVjdHVyZT8uY29udHJvbHNbc2NoZW1lLmZpZWxkXSk/Lmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUYWJsZUlucHV0QnRuIGV4dGVuZHMgSUJ0biB7XG4gIGFjdGlvbj86IChhcmc/OiB7IGluZGV4OiBudW1iZXI7IGZvcm06IEZvcm1Hcm91cDsgYnRuOiBCdG5Db21wb25lbnQgfSkgPT4gdm9pZDtcbn1cbiIsIjxkaXYgY2xhc3M9XCJ0YWJsZS1pbnB1dFwiPlxuICBAaWYgKGZpbHRlckZvcm1zKCk/Lmxlbmd0aCkge1xuICAgIDxkaXYgY2xhc3M9XCJtYi0zIHt7IGZpbHRlckNvbnRhaW5lckNsYXNzKCkgfX1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgPGFwcC1idG5cbiAgICAgICAgICB0ZXh0PVwie3sgZmlsdGVyU2VjdGlvbi5oaWRkZW4gPyAnU2hvdyBGaWx0ZXInIDogJ0hpZGUgRmlsdGVyJyB9fVwiXG4gICAgICAgICAgW2ljb25dPVwiZmlsdGVyU2VjdGlvbi5oaWRkZW4gPyAnc2VhcmNoJyA6ICdjbG9zZSdcIlxuICAgICAgICAgIChtY2xpY2spPVwiZmlsdGVyU2VjdGlvbi5oaWRkZW4gPSAhZmlsdGVyU2VjdGlvbi5oaWRkZW5cIiAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIHAtMyBtdC0zIHJvdW5kZWQtMTBcIiAjZmlsdGVyU2VjdGlvbiBbaGlkZGVuXT1cInRydWVcIj5cbiAgICAgICAgPGZvcm0tZ2VuZXJhdG9yIFtmb3JtXT1cImZpbHRlckZvcm1cIiBbZm9ybVNjaGVtYV09XCJmaWx0ZXJGb3JtcygpXCIgW2dyaWRMR1N0eWxlXT1cIjNcIiBbc2hvd1N1Ym1pdEJ0bl09XCJmYWxzZVwiIChtY2hhbmdlKT1cInJlc2V0UGFnaW5hdG9yKClcIiAvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cbiAgICAgICAgICA8YXBwLWJ0biB0eXBlPVwiZGFuZ2VyLW91dGxpbmVcIiB0ZXh0PVwiQ2xlYXJcIiAobWNsaWNrKT1cImZpbHRlckZvcm0ucmVzZXQoKVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIH1cblxuICA8ZGl2IGNsYXNzPVwiYmctd2hpdGVcIiBbbmdDbGFzc109XCJ7ICdib3JkZXIgcm91bmRlZC0xMCc6IGJvcmRlcigpIH1cIj5cbiAgICA8ZGl2IGNsYXNzPVwiIFwiPlxuICAgICAgPHRhYmxlIGNsYXNzPVwiIHt7IHRhYmxlQ2xhc3MoKSB9fSBcIiBbbmdDbGFzc109XCJ7ICdpcy1zaG93LWZvcm0nOiBpc1Nob3coKSB9XCI+XG4gICAgICAgIDx0aGVhZCAoY2xpY2spPVwidXRpbGl0eVNlcnZpY2UubG9nRm9ybShmaWx0ZXJlZEZvcm1BcnJheSgpKVwiPlxuICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICBAZm9yIChpdGVtIG9mIGZvcm1TY2hlbWEoKTsgdHJhY2sgaXRlbS5sYWJlbCkge1xuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ7eyBpdGVtLmNscyB9fVwiPlxuICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfCBhcHBUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgIHt7IGl0ZW0uaXNSZXF1aXJlZCA/ICcqJyA6ICcnIH19XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKCFpc1Nob3coKSkge1xuICAgICAgICAgICAgICA8dGg+PC90aD5cbiAgICAgICAgICAgICAgPHRoPjwvdGg+XG4gICAgICAgICAgICAgIEBmb3IgKGFjdGlvbkJ0biBvZiBhY3Rpb25CdG5zKCk7IHRyYWNrIGFjdGlvbkJ0bikge1xuICAgICAgICAgICAgICAgIDx0aD48L3RoPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90aGVhZD5cbiAgICAgICAgPHRib2R5PlxuICAgICAgICAgIEBmb3IgKHN1YkZvcm0gb2YgcGFnaW5hdGVkQW5kRmlsdGVyZWRGb3JtQXJyYXkoKTsgdHJhY2sgc3ViRm9ybTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICB0YWJsZS1pbnB1dC1yb3dcbiAgICAgICAgICAgICAgKG9uQWRkUm93RnVuYyk9XCJhZGRSb3dDbGlja2VkKHN1YkZvcm0uaW5kZXgpXCJcbiAgICAgICAgICAgICAgW2lzU2hvd109XCJpc1Nob3coKVwiXG4gICAgICAgICAgICAgIFtmb3JtXT1cInN1YkZvcm0uZm9ybVwiXG4gICAgICAgICAgICAgIFthY3Rpb25CdG5zXT1cImFjdGlvbkJ0bnMoKVwiXG4gICAgICAgICAgICAgIFtmb3JtU2NoZW1hXT1cImZvcm1TY2hlbWEoKVwiXG4gICAgICAgICAgICAgIFtjaGlsZHJlbkZvcm1TY2hlbWFNYXBdPVwiY2hpbGRyZW5Gb3JtU2NoZW1hTWFwXCJcbiAgICAgICAgICAgICAgKG9uRGVsZXRlUm93RnVuYyk9XCJcbiAgICAgICAgICAgICAgICBkZWxldGVSb3dDbGlja2VkKHN1YkZvcm0uaW5kZXgsIHN1YkZvcm0uZm9ybSwge1xuICAgICAgICAgICAgICAgICAgYnRuOiAkZXZlbnQ/LmJ0blxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIChvbkFjdGlvbkJ1dHRvbkNsaWNrKT1cImhhbmRsZUFjdGlvbkJ1dHRvbkNsaWNrKHN1YkZvcm0uaW5kZXgsIHN1YkZvcm0uZm9ybSwgJGV2ZW50KVwiPjwvdHI+XG4gICAgICAgICAgfSBAZW1wdHkge1xuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiIFtjb2xTcGFuXT1cImZvcm1TY2hlbWE/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgIHt7ICdUaGVyZSBhcmUgbm8gaXRlbXMnIHwgYXBwVHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgfVxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJcIiBbaGlkZGVuXT1cIiF1c2VQYWdpbmF0b3IoKSB8fCAhZmlsdGVyZWRGb3JtQXJyYXlMZW5ndGgoKSB8fCBmaWx0ZXJlZEZvcm1BcnJheUxlbmd0aCgpIDwgcGFnZVNpemUoKVwiPlxuICAgICAgPHBhZ2luYXRvclxuICAgICAgICAjcGFnaW5hdG9yVGFnXG4gICAgICAgIFthcnJheUxlbmd0aF09XCJmaWx0ZXJlZEZvcm1BcnJheUxlbmd0aCgpXCJcbiAgICAgICAgKHBhZ2VDaGFuZ2VkKT1cInBhZ2VDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICBbcGFnZVNpemVdPVwicGFnZVNpemUoKVwiXG4gICAgICAgIFtyZXNldEluZGV4RnVuY109XCJmaWx0ZXJGb3JtLnZhbHVlQ2hhbmdlc1wiIC8+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
219
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NoYXJlZC9jb21wb25lbnRzL3RhYmxlLWlucHV0L3RhYmxlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy90YWJsZS1pbnB1dC90YWJsZS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBOEIsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEksT0FBTyxFQUFFLHdCQUF3QixFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFakksT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRXBGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFHckYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQUV0RDs7R0FFRztBQXlDSCxNQUFNLE9BQU8sbUJBS1gsU0FBUSxzQkFBa0M7SUE3QzVDOztRQWdERSxvQkFBb0I7UUFDcEIsY0FBUyxHQUFHLEtBQUssRUFBb0MsQ0FBQztRQUN0RCx5QkFBb0IsR0FBRyxLQUFLLEVBQVUsQ0FBQztRQUN2QyxXQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JCLFdBQU0sR0FBRyxLQUFLLEVBQVcsQ0FBQztRQUkxQixhQUFRLEdBQUcsTUFBTSxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLGNBQVMsR0FBRyxNQUFNLENBQTBDLElBQUksQ0FBQyxDQUFDO1FBQ2xFLGVBQVUsR0FBRyxLQUFLLEVBQW9CLENBQUM7UUF5QnZDLGVBQVUsR0FBRyxLQUFLLEVBQThELENBQUM7UUFDOUQsZUFBVSxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLGdCQUFXLEdBQUcsTUFBTSxDQUFnQixFQUFFLENBQUMsQ0FBQztRQUN4QyxpQkFBWSxHQUFHLE1BQU0sQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUNyQywwQkFBcUIsR0FLM0IsRUFBRSxDQUFDO1FBTVAsMEJBQXFCLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFL0Qsc0JBQWlCLEdBQUcsUUFBUSxDQUFtRCxHQUFHLEVBQUU7WUFDbEYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUNoQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNsRCxNQUFNLFVBQVUsR0FBRyxTQUFTLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNoRixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ2hGLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN2RyxDQUFDLENBQUMsQ0FBQztRQUNILGtDQUE2QixHQUFHLFFBQVEsQ0FBbUQsR0FBRyxFQUFFO1lBQzlGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUN4QyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQy9CLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUM1SCxDQUFDLENBQUMsQ0FBQztRQUVILDRCQUF1QixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUxRCxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNqRCw2QkFBd0IsR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUM1RCxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQStCbkMsd0JBQW1CLEdBQUcsQ0FBQyxLQUFnQyxFQUFFLEVBQUU7WUFDbkUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNsQixJQUFJLENBQUMsQ0FBQyxZQUFZO29CQUFFLENBQUMsQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7cUJBQzlDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxRQUFRO29CQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7UUF3QkYscUJBQWdCLEdBQUcsQ0FBQyxLQUFhLEVBQUUsT0FBOEIsRUFBRSxNQUE4QixFQUFFLEVBQUU7WUFDbkcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzFELGtCQUFrQjtRQUNwQixDQUFDLENBQUM7UUFFRixrQkFBYSxHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUM7WUFDekQsa0JBQWtCO1lBQ2xCLDRDQUE0QztRQUM5QyxDQUFDLENBQUM7UUFFRix3QkFBbUIsR0FBRyxHQUFHLEVBQUU7WUFDekIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUM7S0F3Qkg7SUFqS0MsSUFBdUIsU0FBUyxDQUFDLENBQVM7UUFDeEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUlELElBQTZELFdBQVcsQ0FBQyxDQUE0QjtRQUNuRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQVdELElBQTJCLGFBQWEsQ0FBQyxDQUFVO1FBQ2pELElBQUksQ0FBQyxFQUFFO1lBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUNwRDthQUFNO1lBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7U0FDM0I7SUFDSCxDQUFDO0lBc0NELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksU0FBUyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVRLFNBQVM7UUFDaEIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQzNDLE9BQU8sS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxXQUFXLENBQUMsTUFBK0M7UUFDekQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQVNRLElBQUksQ0FBQyxNQUFpQztRQUM3QyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6QixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFO1lBQzFDLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUN2RSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNwQztTQUNGO1FBQ0QsWUFBWTtRQUNaLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqQixJQUFJLE1BQU07WUFDUixLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sRUFBRTtnQkFDM0IsMENBQTBDO2dCQUMxQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDL0I7UUFDSCxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxLQUFhLEVBQUUsSUFBMkIsRUFBRSxDQUF1RDtRQUN6SCxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELGtCQUFrQjtJQUNwQixDQUFDO0lBaUJRLGdCQUFnQixDQUFDLE1BQW1CO1FBQzNDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMvQyxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO1lBQUUsTUFBTSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztRQUV0SCxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUU7WUFDMUIsTUFBTSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDckMsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7Z0JBQ25CLHFDQUFxQztZQUN2QyxDQUFDLENBQUMsQ0FBQztTQUNKO1FBQ0QsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1NBQ3pFO2FBQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLFFBQVEsRUFBRTtZQUNsQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTTtnQkFDekIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxLQUFlLENBQUMsR0FBRztvQkFDbkQsVUFBVSxFQUFFLE1BQU0sQ0FBQyxRQUFRO29CQUMzQixhQUFhLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFlLENBQUM7aUJBQzdELENBQUM7U0FDTDtRQUNELE1BQU0sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsSUFBZ0IsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFFLEVBQUUsWUFBWSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1SSxDQUFDOzhHQTdLVSxtQkFBbUI7a0dBQW5CLG1CQUFtQiwyc0RBRm5CLENBQUMsd0JBQXdCLEVBQUUsYUFBYSxDQUFDLDhFQTBEekMsa0JBQWtCLHVFQzlIL0IsbTlGQTJFQSxrSUR6Q0ksU0FBUyw4Q0FFVCxZQUFZLDZiQUVaLHNCQUFzQixzV0FDdEIsV0FBVyw4QkFPWCxrQkFBa0IsOEJBQ2xCLGFBQWEsOEJBQ2IsZ0JBQWdCLCtCQUVoQixPQUFPLG9GQU1QLGtCQUFrQixzS0FHbEIsbUJBQW1CLCtCQUNuQixzQkFBc0Isc01BRXRCLGFBQWE7OzJGQVFKLG1CQUFtQjtrQkF4Qy9CLFNBQVM7K0JBQ0UsYUFBYSxjQUNYLElBQUksV0FDUDt3QkFDUCxTQUFTO3dCQUNULHFCQUFxQjt3QkFDckIsWUFBWTt3QkFDWix3QkFBd0I7d0JBQ3hCLHNCQUFzQjt3QkFDdEIsV0FBVzt3QkFDWCxhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixtQkFBbUI7d0JBQ25CLFFBQVE7d0JBQ1IsZUFBZTt3QkFDZixrQkFBa0I7d0JBQ2xCLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLE9BQU87d0JBQ1AsS0FBSzt3QkFDTCxJQUFJO3dCQUNKLFFBQVE7d0JBQ1IsWUFBWTt3QkFDWixlQUFlO3dCQUNmLGtCQUFrQjt3QkFDbEIsYUFBYTt3QkFDYixvQkFBb0I7d0JBQ3BCLG1CQUFtQjt3QkFDbkIsc0JBQXNCO3dCQUN0QixTQUFTO3dCQUNULGFBQWE7d0JBQ2Isd0JBQXdCO3dCQUN4QiwwQkFBMEI7cUJBQzNCLGFBR1UsQ0FBQyx3QkFBd0IsRUFBRSxhQUFhLENBQUM7OEJBZTdCLFNBQVM7c0JBQS9CLEtBQUs7dUJBQUMsVUFBVTtnQkFNNEMsV0FBVztzQkFBdkUsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRTtnQkFLOUMsbUJBQW1CO3NCQURsQixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFLaEIsYUFBYTtzQkFBckIsS0FBSztnQkFJRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNxQixhQUFhO3NCQUF2QyxLQUFLO3VCQUFDLGNBQWM7Z0JBdUJVLGtCQUFrQjtzQkFBaEQsU0FBUzt1QkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCwgY29tcHV0ZWQsIGluamVjdCwgaW5wdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSUZvcm1TY2hlbWEgfSBmcm9tICcuLi8uLi9tb2RlbHMvZm9ybS1zY2hlbWEubW9kZWwnO1xuaW1wb3J0IHsgRmlsdGVyRm9ybUFycmF5R3JvdXBQaXBlLCBGb3JtVmFsdWVQaXBlLCBGdW5jdGlvbkNhbGxlcjIsIEhhc0Zvcm1WYWx1ZVBpcGUsIFRvQW55UGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3V0aWxpdHkucGlwZSc7XG5cbmltcG9ydCB7IEJ0bkNvbXBvbmVudCB9IGZyb20gJy4uL2J0bi9idG4uY29tcG9uZW50JztcbmltcG9ydCB7IElucHV0QmFzaWNDb21wb25lbnQgfSBmcm9tICcuLi9pbnB1dC9pbnB1dC1iYXNpYy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXV0b2NvbXBsZXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVmFsaWRhdGlvbk1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICcuLi9pbnB1dC92YWxpZGF0aW9uLW1lc3NhZ2UvdmFsaWRhdGlvbi1tZXNzYWdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQaG9uZU51bWJlckNvbXBvbmVudCB9IGZyb20gJy4uL3Bob25lLW51bWJlci9waG9uZS1udW1iZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFzeW5jUGlwZSwgSnNvblBpcGUsIE5nQ2xhc3MsIE5nRm9yLCBOZ0lmLCBOZ1N3aXRjaCwgTmdTd2l0Y2hDYXNlLCBOZ1N3aXRjaERlZmF1bHQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vbG9hZGVyL2xvYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybUdlbmVyYXRvckNvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0tZ2VuZXJhdG9yL2Zvcm0tZ2VuZXJhdG9yLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IFBhZ2luYXRvckNvbXBvbmVudCB9IGZyb20gJy4uL3BhZ2luYXRvci9wYWdpbmF0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vbW9kYWwvbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IE1hdEV4cGFuc2lvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbic7XG5pbXBvcnQgeyBNYXRUYWJzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFicyc7XG5pbXBvcnQgeyBUYWJsZUlucHV0Um93Q29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS1pbnB1dC1yb3cvdGFibGUtaW5wdXQtcm93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGZpbHRlciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSUJ0biB9IGZyb20gJy4uL2J0bi9idG4ubW9kZWwnO1xuaW1wb3J0IHsgVXRpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9TZXJ2aWNlcy91dGlsaXR5LnNlcnZpY2UnO1xuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3RyYW5zbGF0ZS5waXBlJztcbmltcG9ydCB7IFBhZ2luYXRvclBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9wYWdpbmF0b3IucGlwZSc7XG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuLyoqXG4gKiBUYWJsZSBJbnB1dCBDb21wb25lbnRcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGFibGUtaW5wdXQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQXN5bmNQaXBlLFxuICAgIEF1dG9jb21wbGV0ZUNvbXBvbmVudCxcbiAgICBCdG5Db21wb25lbnQsXG4gICAgRmlsdGVyRm9ybUFycmF5R3JvdXBQaXBlLFxuICAgIEZvcm1HZW5lcmF0b3JDb21wb25lbnQsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgRm9ybVZhbHVlUGlwZSxcbiAgICBGdW5jdGlvbkNhbGxlcjIsXG4gICAgSGFzRm9ybVZhbHVlUGlwZSxcbiAgICBJbnB1dEJhc2ljQ29tcG9uZW50LFxuICAgIEpzb25QaXBlLFxuICAgIExvYWRlckNvbXBvbmVudCxcbiAgICBNYXRFeHBhbnNpb25Nb2R1bGUsXG4gICAgTWF0VGFic01vZHVsZSxcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxuICAgIE1vZGFsQ29tcG9uZW50LFxuICAgIE5nQ2xhc3MsXG4gICAgTmdGb3IsXG4gICAgTmdJZixcbiAgICBOZ1N3aXRjaCxcbiAgICBOZ1N3aXRjaENhc2UsXG4gICAgTmdTd2l0Y2hEZWZhdWx0LFxuICAgIFBhZ2luYXRvckNvbXBvbmVudCxcbiAgICBQYWdpbmF0b3JQaXBlLFxuICAgIFBob25lTnVtYmVyQ29tcG9uZW50LFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgVGFibGVJbnB1dFJvd0NvbXBvbmVudCxcbiAgICBUb0FueVBpcGUsXG4gICAgVHJhbnNsYXRlUGlwZSxcbiAgICBGaWx0ZXJGb3JtQXJyYXlHcm91cFBpcGUsXG4gICAgVmFsaWRhdGlvbk1lc3NhZ2VDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW0ZpbHRlckZvcm1BcnJheUdyb3VwUGlwZSwgUGFnaW5hdG9yUGlwZV0sXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlSW5wdXRDb21wb25lbnQ8XG4gICAgVEZvcm1Hcm91cCBleHRlbmRzIHtcbiAgICAgIFtLIGluIGtleW9mIFRGb3JtR3JvdXBdOiBBYnN0cmFjdENvbnRyb2w8YW55LCBhbnk+O1xuICAgIH0gPSBhbnksXG4gID5cbiAgZXh0ZW5kcyBGb3JtR2VuZXJhdG9yQ29tcG9uZW50PFRGb3JtR3JvdXA+XG4gIGltcGxlbWVudHMgT25Jbml0XG57XG4gIC8vIEBJbnB1dCgpIHBhZ2VUeXBlXG4gIGZvcm1BcnJheSA9IGlucHV0PEZvcm1BcnJheTxGb3JtR3JvdXA8VEZvcm1Hcm91cD4+PigpO1xuICBmaWx0ZXJDb250YWluZXJDbGFzcyA9IGlucHV0PHN0cmluZz4oKTtcbiAgYm9yZGVyID0gaW5wdXQodHJ1ZSk7XG4gIGlzU2hvdyA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIEBJbnB1dCgncGFnZVNpemUnKSBzZXQgX3BhZ2VTaXplKHY6IG51bWJlcikge1xuICAgIHRoaXMucGFnZVNpemUuc2V0KHYpO1xuICB9XG4gIHBhZ2VTaXplID0gc2lnbmFsPG51bWJlcj4oMTApO1xuICBwYWdlU3RhdGUgPSBzaWduYWw8eyBwYWdlSW5kZXg6IG51bWJlcjsgcGFnZVNpemU6IG51bWJlciB9PihudWxsKTtcbiAgYWN0aW9uQnRucyA9IGlucHV0PElUYWJsZUlucHV0QnRuW10+KCk7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlLCBhbGlhczogJ2Zvcm1TY2hlbWEnIH0pIG92ZXJyaWRlIHNldCBfZm9ybVNjaGVtYSh2OiBJRm9ybVNjaGVtYTxURm9ybUdyb3VwPltdKSB7XG4gICAgdGhpcy5wcmVGb3JtYXRGb3JtU2NoZW1hKHYpO1xuICAgIHN1cGVyLl9mb3JtU2NoZW1hID0gdjtcbiAgfVxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBzaW5nbGVGb3JtU3RydWN0dXJlOiBGb3JtR3JvdXA8VEZvcm1Hcm91cD47XG4gIC8qKlxuICAgKiBMZWF2ZSBlbXB0eSBpZiB5b3UgZG9uJ3Qgd2FudCB0aGUgZGVsZXRlIGJ1dHRvbiB0byBzaG93XG4gICAqL1xuICBASW5wdXQoKSBkZWxldGVSb3dGdW5jOiAoaW5kZXg6IG51bWJlciwgZGF0YT86IEZvcm1Hcm91cDxURm9ybUdyb3VwPlsndmFsdWUnXSwgY29uZmlnPzogeyBidG46IEJ0bkNvbXBvbmVudCB9KSA9PiBhbnk7XG4gIC8qKlxuICAgKiBMZWF2ZSBlbXB0eSBpZiB5b3UgZG9uJ3Qgd2FudCB0aGUgYWRkIGJ1dHRvbiB0byBzaG93XG4gICAqL1xuICBASW5wdXQoKSBhZGRSb3dGdW5jOiAoaW5kZXg6IG51bWJlciwgZGF0YT86IEZvcm1Hcm91cDxURm9ybUdyb3VwPlsndmFsdWUnXSkgPT4gYW55O1xuICBASW5wdXQoJ3VzZVBhZ2luYXRvcicpIHNldCBfdXNlUGFnaW5hdG9yKHY6IGJvb2xlYW4pIHtcbiAgICBpZiAodikge1xuICAgICAgdGhpcy51c2VQYWdpbmF0b3Iuc2V0KHRydWUpO1xuICAgICAgdGhpcy5wYWdlU2l6ZS51cGRhdGUoKHBhZ2VTaXplKSA9PiBwYWdlU2l6ZSB8fCAxMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXNlUGFnaW5hdG9yLnNldChmYWxzZSk7XG4gICAgICB0aGlzLnBhZ2VTaXplID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHRhYmxlQ2xhc3MgPSBpbnB1dDwndGFibGUgdGFibGUtcmVzcG9uc2l2ZSB0YWJsZS1yZXNwb25zaXZlIHRhYmxlLWJvcmRlcmxlc3MnPigpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmlsdGVyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICBwcm90ZWN0ZWQgZmlsdGVyRm9ybXMgPSBzaWduYWw8SUZvcm1TY2hlbWFbXT4oW10pO1xuICBwcm90ZWN0ZWQgdXNlUGFnaW5hdG9yID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xuICBwcm90ZWN0ZWQgY2hpbGRyZW5Gb3JtU2NoZW1hTWFwOiB7XG4gICAgW2sgaW4ga2V5b2YgVEZvcm1Hcm91cF0/OiB7XG4gICAgICBmb3JtU2NoZW1hOiBJRm9ybVNjaGVtYVtdO1xuICAgICAgZm9ybVNjaGVtYVN0cjogc3RyaW5nW107XG4gICAgfTtcbiAgfSA9IHt9O1xuICByZWZyZXNoZXI6IG51bWJlcjtcbiAgZm9ybUFycmF5UGFnaW5hdGlvblN1YjogU3Vic2NyaXB0aW9uO1xuXG4gIEBWaWV3Q2hpbGQoUGFnaW5hdG9yQ29tcG9uZW50KSBwYWdpbmF0b3JDb21wb25lbnQ6IFBhZ2luYXRvckNvbXBvbmVudDtcblxuICBmaWx0ZXJGb3JtVmFsdWVTaWduYWwgPSB0b1NpZ25hbCh0aGlzLmZpbHRlckZvcm0udmFsdWVDaGFuZ2VzKTtcblxuICBmaWx0ZXJlZEZvcm1BcnJheSA9IGNvbXB1dGVkPHsgZm9ybTogRm9ybUdyb3VwPFRGb3JtR3JvdXA+OyBpbmRleDogbnVtYmVyIH1bXT4oKCkgPT4ge1xuICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuZm9ybUFycmF5KCksXG4gICAgICBmaWx0ZXJGb3JtVmFsdWUgPSB0aGlzLmZpbHRlckZvcm0uZ2V0UmF3VmFsdWUoKTtcbiAgICBjb25zdCBmb3JtR3JvdXBzID0gZm9ybUFycmF5Py5jb250cm9scz8ubWFwKChjLCBpbmRleCkgPT4gKHsgaW5kZXgsIGZvcm06IGMgfSkpO1xuICAgIGNvbnN0IGZpbHRlck9iamVjdCA9IHRoaXMuZmlsdGVyRm9ybUFycmF5R3JvdXBQaXBlLnF1ZXJ5TWFwcGVyKGZpbHRlckZvcm1WYWx1ZSk7XG4gICAgcmV0dXJuIGZvcm1Hcm91cHMuZmlsdGVyKCh7IGZvcm0gfSkgPT4gdGhpcy5maWx0ZXJGb3JtQXJyYXlHcm91cFBpcGUuZmlsdGVyRnVuYyhmaWx0ZXJPYmplY3QpKGZvcm0pKTtcbiAgfSk7XG4gIHBhZ2luYXRlZEFuZEZpbHRlcmVkRm9ybUFycmF5ID0gY29tcHV0ZWQ8eyBmb3JtOiBGb3JtR3JvdXA8VEZvcm1Hcm91cD47IGluZGV4OiBudW1iZXIgfVtdPigoKSA9PiB7XG4gICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5maWx0ZXJlZEZvcm1BcnJheSgpLFxuICAgICAgcGFnZVN0YXRlID0gdGhpcy5wYWdlU3RhdGUoKTtcbiAgICByZXR1cm4gdGhpcy51c2VQYWdpbmF0b3IoKSA/IHRoaXMucGFnaW5hdG9yUGlwZS50cmFuc2Zvcm0oZm9ybUFycmF5LCBwYWdlU3RhdGUucGFnZVNpemUsIHBhZ2VTdGF0ZS5wYWdlSW5kZXgpIDogZm9ybUFycmF5O1xuICB9KTtcblxuICBmaWx0ZXJlZEZvcm1BcnJheUxlbmd0aCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZmlsdGVyZWRGb3JtQXJyYXkoKS5sZW5ndGgpO1xuXG4gIHB1YmxpYyBvdmVycmlkZSB1dGlsaXR5U2VydmljZSA9IGluamVjdChVdGlsaXR5U2VydmljZSk7XG4gIHB1YmxpYyBmaWx0ZXJGb3JtQXJyYXlHcm91cFBpcGUgPSBpbmplY3QoRmlsdGVyRm9ybUFycmF5R3JvdXBQaXBlKTtcbiAgcHVibGljIHBhZ2luYXRvclBpcGUgPSBpbmplY3QoUGFnaW5hdG9yUGlwZSk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudXNlUGFnaW5hdG9yID09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fdXNlUGFnaW5hdG9yID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9LCAxMDAwKTtcbiAgfVxuXG4gIHJlZnJlc2goKSB7XG4gICAgdGhpcy5yZWZyZXNoZXIgPSBNYXRoLnJhbmRvbSgpO1xuICB9XG5cbiAgb3ZlcnJpZGUgb25EZXN0cm95KCkge1xuICAgIHRoaXMuZm9ybUFycmF5UGFnaW5hdGlvblN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICByZXR1cm4gc3VwZXIub25EZXN0cm95KCk7XG4gIH1cblxuICBwYWdlQ2hhbmdlZCgkZXZlbnQ6IHsgcGFnZUluZGV4OiBudW1iZXI7IHBhZ2VTaXplOiBudW1iZXIgfSkge1xuICAgIHRoaXMucGFnZVN0YXRlLnNldCgkZXZlbnQpO1xuICB9XG5cbiAgcmVzZXRQYWdpbmF0b3IoKSB7XG4gICAgdGhpcy5wYWdpbmF0b3JDb21wb25lbnQ/LnJlc2V0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJlRm9ybWF0Rm9ybVNjaGVtYSA9IChpdGVtczogSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD5bXSkgPT4ge1xuICAgIGl0ZW1zLmZvckVhY2goKHgpID0+IHtcbiAgICAgIGlmICh4Lm9uQ2hhbmdlRnVuYykgeC50cmlnZ2VyT25DaGFuZ2VPbkluaXQgPSB0cnVlO1xuICAgICAgZWxzZSBpZiAoeC50eXBlID09ICdidXR0b24nKSB0aGlzLnByZUZvcm1hdEZvcm1TY2hlbWEoeC5jaGlsZHJlbik7XG4gICAgfSk7XG4gIH07XG5cbiAgb3ZlcnJpZGUgaW5pdChzY2hlbWE6IElGb3JtU2NoZW1hPFRGb3JtR3JvdXA+W10pOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlckZvcm1zLnNldChbXSk7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5maWx0ZXJGb3JtLmNvbnRyb2xzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuZmlsdGVyRm9ybS5jb250cm9scywga2V5KSkge1xuICAgICAgICB0aGlzLmZpbHRlckZvcm0ucmVtb3ZlQ29udHJvbChrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICB0aGlzLm9uRGVzdHJveSgpO1xuICAgIGlmIChzY2hlbWEpXG4gICAgICBmb3IgKGNvbnN0IHNjaGVtZSBvZiBzY2hlbWEpIHtcbiAgICAgICAgLy8gc2NoZW1lLmZvcm0gPSB0aGlzLmZvcm0gfHwgc2NoZW1lLmZvcm07XG4gICAgICAgIHRoaXMuaGFuZGxlRm9ybVNjaGVtZShzY2hlbWUpO1xuICAgICAgfVxuICAgIHRoaXMuX3NldEZvcm1TY2hlbWFzKHNjaGVtYSk7XG4gIH1cblxuICBoYW5kbGVBY3Rpb25CdXR0b25DbGljayhpbmRleDogbnVtYmVyLCBmb3JtOiBGb3JtR3JvdXA8VEZvcm1Hcm91cD4sIGU6IHsgYnRuPzogQnRuQ29tcG9uZW50OyBhY3Rpb25CdXR0b246IElUYWJsZUlucHV0QnRuIH0pIHtcbiAgICBlLmFjdGlvbkJ1dHRvbi5hY3Rpb24oeyBpbmRleCwgZm9ybSwgYnRuOiBlLmJ0biB9KTtcbiAgICAvLyB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIGRlbGV0ZVJvd0NsaWNrZWQgPSAoaW5kZXg6IG51bWJlciwgcm93Rm9ybTogRm9ybUdyb3VwPFRGb3JtR3JvdXA+LCBjb25maWc/OiB7IGJ0bjogQnRuQ29tcG9uZW50IH0pID0+IHtcbiAgICB0aGlzLmRlbGV0ZVJvd0Z1bmMoaW5kZXgsIHJvd0Zvcm0/LmdldFJhd1ZhbHVlKCksIGNvbmZpZyk7XG4gICAgLy8gdGhpcy5yZWZyZXNoKCk7XG4gIH07XG5cbiAgYWRkUm93Q2xpY2tlZCA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgdGhpcy5hZGRSb3dGdW5jKGluZGV4ICsgMSwgdGhpcy5maWx0ZXJGb3JtVmFsdWVTaWduYWwoKSk7XG4gICAgLy8gdGhpcy5yZWZyZXNoKCk7XG4gICAgLy8gdGhpcy5maWx0ZXJGb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfTtcblxuICBjaGVja1JlcXVpcmVkRmllbGRzID0gKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKHRoaXMuc2luZ2xlRm9ybVN0cnVjdHVyZSk7XG4gIH07XG5cbiAgb3ZlcnJpZGUgaGFuZGxlRm9ybVNjaGVtZShzY2hlbWU6IElGb3JtU2NoZW1hKSB7XG4gICAgc2NoZW1lLmlkID0gdGhpcy51dGlsaXR5U2VydmljZS5nZW5lcmF0ZVVVSUQoKTtcbiAgICBpZiAoc2NoZW1lLmF1dG9QaWNrVmFsdWVGaWVsZCA9PSBudWxsICYmICghc2NoZW1lLnZhbHVlRmllbGQgfHwgIXNjaGVtZS5sYWJlbEZpZWxkKSkgc2NoZW1lLmF1dG9QaWNrVmFsdWVGaWVsZCA9IHRydWU7XG5cbiAgICBpZiAoc2NoZW1lLm9wdGlvbnNJbml0RnVuYykge1xuICAgICAgc2NoZW1lLm9wdGlvbnNJbml0RnVuYy5zdWJzY3JpYmUoKHIpID0+IHtcbiAgICAgICAgc2NoZW1lLm9wdGlvbnMgPSByO1xuICAgICAgICAvLyB0aGlzLm9wdGlvbnNNYXBbc2NoZW1lLmZpZWxkXSA9IHI7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHNjaGVtZS5pc1NlYXJjaEZpZWxkKSB7XG4gICAgICB0aGlzLmZpbHRlckZvcm1zLnVwZGF0ZSgoZmlsdGVyRm9ybXMpID0+IGZpbHRlckZvcm1zLmNvbmNhdChbc2NoZW1lXSkpO1xuICAgICAgdGhpcy5maWx0ZXJGb3JtLmFkZENvbnRyb2woc2NoZW1lLmZpZWxkPy50b1N0cmluZygpLCBuZXcgRm9ybUNvbnRyb2woKSk7XG4gICAgfSBlbHNlIGlmIChzY2hlbWUudHlwZSA9PSAnYnV0dG9uJykge1xuICAgICAgaWYgKHNjaGVtZS5jaGlsZHJlbj8ubGVuZ3RoKVxuICAgICAgICB0aGlzLmNoaWxkcmVuRm9ybVNjaGVtYU1hcFtzY2hlbWUuZmllbGQgYXMgc3RyaW5nXSA9IHtcbiAgICAgICAgICBmb3JtU2NoZW1hOiBzY2hlbWUuY2hpbGRyZW4sXG4gICAgICAgICAgZm9ybVNjaGVtYVN0cjogc2NoZW1lLmNoaWxkcmVuLm1hcCgoeCkgPT4geC5maWVsZCBhcyBzdHJpbmcpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBzY2hlbWUuaXNSZXF1aXJlZCA9IHNjaGVtZS5pc1JlcXVpcmVkIHx8ICg8Rm9ybUdyb3VwPnRoaXMuc2luZ2xlRm9ybVN0cnVjdHVyZT8uY29udHJvbHNbc2NoZW1lLmZpZWxkXSk/Lmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUYWJsZUlucHV0QnRuIGV4dGVuZHMgSUJ0biB7XG4gIGFjdGlvbj86IChhcmc/OiB7IGluZGV4OiBudW1iZXI7IGZvcm06IEZvcm1Hcm91cDsgYnRuOiBCdG5Db21wb25lbnQgfSkgPT4gdm9pZDtcbn1cbiIsIjxkaXYgY2xhc3M9XCJ0YWJsZS1pbnB1dFwiPlxuICBAaWYgKGZpbHRlckZvcm1zKCk/Lmxlbmd0aCkge1xuICAgIDxkaXYgY2xhc3M9XCJtYi0zIHt7IGZpbHRlckNvbnRhaW5lckNsYXNzKCkgfX1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgPGFwcC1idG5cbiAgICAgICAgICB0ZXh0PVwie3sgZmlsdGVyU2VjdGlvbi5oaWRkZW4gPyAnU2hvdyBGaWx0ZXInIDogJ0hpZGUgRmlsdGVyJyB9fVwiXG4gICAgICAgICAgW2ljb25dPVwiZmlsdGVyU2VjdGlvbi5oaWRkZW4gPyAnc2VhcmNoJyA6ICdjbG9zZSdcIlxuICAgICAgICAgIChtY2xpY2spPVwiZmlsdGVyU2VjdGlvbi5oaWRkZW4gPSAhZmlsdGVyU2VjdGlvbi5oaWRkZW5cIiAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIHAtMyBtdC0zIHJvdW5kZWQtMTBcIiAjZmlsdGVyU2VjdGlvbiBbaGlkZGVuXT1cInRydWVcIj5cbiAgICAgICAgPGZvcm0tZ2VuZXJhdG9yIFtmb3JtXT1cImZpbHRlckZvcm1cIiBbZm9ybVNjaGVtYV09XCJmaWx0ZXJGb3JtcygpXCIgW2dyaWRMR1N0eWxlXT1cIjNcIiBbc2hvd1N1Ym1pdEJ0bl09XCJmYWxzZVwiIChtY2hhbmdlKT1cInJlc2V0UGFnaW5hdG9yKClcIiAvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cbiAgICAgICAgICA8YXBwLWJ0biB0eXBlPVwiZGFuZ2VyLW91dGxpbmVcIiB0ZXh0PVwiQ2xlYXJcIiAobWNsaWNrKT1cImZpbHRlckZvcm0ucmVzZXQoKVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIH1cblxuICA8ZGl2IGNsYXNzPVwiYmctd2hpdGVcIiBbbmdDbGFzc109XCJ7ICdib3JkZXIgcm91bmRlZC0xMCc6IGJvcmRlcigpIH1cIj5cbiAgICA8ZGl2IGNsYXNzPVwiIFwiPlxuICAgICAgPHRhYmxlIGNsYXNzPVwiIHt7IHRhYmxlQ2xhc3MoKSB9fSBcIiBbbmdDbGFzc109XCJ7ICdpcy1zaG93LWZvcm0nOiBpc1Nob3coKSB9XCI+XG4gICAgICAgIDx0aGVhZCAoY2xpY2spPVwidXRpbGl0eVNlcnZpY2UubG9nRm9ybShmaWx0ZXJlZEZvcm1BcnJheSgpKVwiPlxuICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICBAZm9yIChpdGVtIG9mIGZvcm1TY2hlbWEoKTsgdHJhY2sgaXRlbS5sYWJlbCkge1xuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ7eyBpdGVtLmNscyB9fVwiPlxuICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfCBhcHBUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgIHt7IGl0ZW0uaXNSZXF1aXJlZCA/ICcqJyA6ICcnIH19XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKCFpc1Nob3coKSkge1xuICAgICAgICAgICAgICA8dGg+PC90aD5cbiAgICAgICAgICAgICAgPHRoPjwvdGg+XG4gICAgICAgICAgICAgIEBmb3IgKGFjdGlvbkJ0biBvZiBhY3Rpb25CdG5zKCk7IHRyYWNrIGFjdGlvbkJ0bikge1xuICAgICAgICAgICAgICAgIDx0aD48L3RoPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90aGVhZD5cbiAgICAgICAgPHRib2R5PlxuICAgICAgICAgIEBmb3IgKHN1YkZvcm0gb2YgcGFnaW5hdGVkQW5kRmlsdGVyZWRGb3JtQXJyYXkoKTsgdHJhY2sgc3ViRm9ybTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICB0YWJsZS1pbnB1dC1yb3dcbiAgICAgICAgICAgICAgKG9uQWRkUm93RnVuYyk9XCJhZGRSb3dDbGlja2VkKHN1YkZvcm0uaW5kZXgpXCJcbiAgICAgICAgICAgICAgW2lzU2hvd109XCJpc1Nob3coKVwiXG4gICAgICAgICAgICAgIFtmb3JtXT1cInN1YkZvcm0uZm9ybVwiXG4gICAgICAgICAgICAgIFthY3Rpb25CdG5zXT1cImFjdGlvbkJ0bnMoKVwiXG4gICAgICAgICAgICAgIFtmb3JtU2NoZW1hXT1cImZvcm1TY2hlbWEoKVwiXG4gICAgICAgICAgICAgIFtjaGlsZHJlbkZvcm1TY2hlbWFNYXBdPVwiY2hpbGRyZW5Gb3JtU2NoZW1hTWFwXCJcbiAgICAgICAgICAgICAgKG9uRGVsZXRlUm93RnVuYyk9XCJcbiAgICAgICAgICAgICAgICBkZWxldGVSb3dDbGlja2VkKHN1YkZvcm0uaW5kZXgsIHN1YkZvcm0uZm9ybSwge1xuICAgICAgICAgICAgICAgICAgYnRuOiAkZXZlbnQ/LmJ0blxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIChvbkFjdGlvbkJ1dHRvbkNsaWNrKT1cImhhbmRsZUFjdGlvbkJ1dHRvbkNsaWNrKHN1YkZvcm0uaW5kZXgsIHN1YkZvcm0uZm9ybSwgJGV2ZW50KVwiPjwvdHI+XG4gICAgICAgICAgfSBAZW1wdHkge1xuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiIFtjb2xTcGFuXT1cImZvcm1TY2hlbWE/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgIHt7ICdUaGVyZSBhcmUgbm8gaXRlbXMnIHwgYXBwVHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgfVxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJcIiBbaGlkZGVuXT1cIiF1c2VQYWdpbmF0b3IoKSB8fCAhZmlsdGVyZWRGb3JtQXJyYXlMZW5ndGgoKSB8fCBmaWx0ZXJlZEZvcm1BcnJheUxlbmd0aCgpIDwgcGFnZVNpemUoKVwiPlxuICAgICAgPHBhZ2luYXRvclxuICAgICAgICAjcGFnaW5hdG9yVGFnXG4gICAgICAgIFthcnJheUxlbmd0aF09XCJmaWx0ZXJlZEZvcm1BcnJheUxlbmd0aCgpXCJcbiAgICAgICAgKHBhZ2VDaGFuZ2VkKT1cInBhZ2VDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICBbcGFnZVNpemVdPVwicGFnZVNpemUoKVwiXG4gICAgICAgIFtyZXNldEluZGV4RnVuY109XCJmaWx0ZXJGb3JtLnZhbHVlQ2hhbmdlc1wiIC8+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -14489,7 +14489,7 @@ class TableInputComponent extends FormGeneratorComponent {
|
|
|
14489
14489
|
scheme.isRequired = scheme.isRequired || this.singleFormStructure?.controls[scheme.field]?.hasValidator(Validators.required);
|
|
14490
14490
|
}
|
|
14491
14491
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.0", ngImport: i0, type: TableInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
14492
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.0", type: TableInputComponent, isStandalone: true, selector: "table-input", inputs: { formArray: { classPropertyName: "formArray", publicName: "formArray", isSignal: true, isRequired: false, transformFunction: null }, filterContainerClass: { classPropertyName: "filterContainerClass", publicName: "filterContainerClass", isSignal: true, isRequired: false, transformFunction: null }, border: { classPropertyName: "border", publicName: "border", isSignal: true, isRequired: false, transformFunction: null }, isShow: { classPropertyName: "isShow", publicName: "isShow", isSignal: true, isRequired: false, transformFunction: null }, _pageSize: { classPropertyName: "_pageSize", publicName: "pageSize", isSignal: false, isRequired: false, transformFunction: null }, actionBtns: { classPropertyName: "actionBtns", publicName: "actionBtns", isSignal: true, isRequired: false, transformFunction: null }, _formSchema: { classPropertyName: "_formSchema", publicName: "formSchema", isSignal: false, isRequired: true, transformFunction: null }, singleFormStructure: { classPropertyName: "singleFormStructure", publicName: "singleFormStructure", isSignal: false, isRequired: true, transformFunction: null }, deleteRowFunc: { classPropertyName: "deleteRowFunc", publicName: "deleteRowFunc", isSignal: false, isRequired: false, transformFunction: null }, addRowFunc: { classPropertyName: "addRowFunc", publicName: "addRowFunc", isSignal: false, isRequired: false, transformFunction: null }, _usePaginator: { classPropertyName: "_usePaginator", publicName: "usePaginator", isSignal: false, isRequired: false, transformFunction: null }, tableClass: { classPropertyName: "tableClass", publicName: "tableClass", isSignal: true, isRequired: false, transformFunction: null } }, providers: [FilterFormArrayGroupPipe], viewQueries: [{ propertyName: "paginatorComponent", first: true, predicate: PaginatorComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"table-input\">\n @if (filterForms()?.length) {\n <div class=\"mb-3 {{ filterContainerClass() }}\">\n <div class=\"d-flex\">\n <app-btn\n text=\"{{ filterSection.hidden ? 'Show Filter' : 'Hide Filter' }}\"\n [icon]=\"filterSection.hidden ? 'search' : 'close'\"\n (mclick)=\"filterSection.hidden = !filterSection.hidden\" />\n </div>\n <div class=\"border p-3 mt-3 rounded-10\" #filterSection [hidden]=\"true\">\n <form-generator [form]=\"filterForm\" [formSchema]=\"filterForms()\" [gridLGStyle]=\"3\" [showSubmitBtn]=\"false\" (mchange)=\"resetPaginator()\" />\n <div class=\"d-flex justify-content-end\">\n <app-btn type=\"danger-outline\" text=\"Clear\" (mclick)=\"filterForm.reset()\" />\n </div>\n </div>\n </div>\n }\n\n <div class=\"bg-white\" [ngClass]=\"{ 'border rounded-10': border() }\">\n <div class=\" \">\n <table class=\" {{ tableClass() }} \" [ngClass]=\"{ 'is-show-form': isShow() }\">\n <thead (click)=\"utilityService.logForm(filteredFormArray())\">\n <tr class=\"text-center\">\n @for (item of formSchema(); track item.label) {\n <th class=\"{{ item.cls }}\">\n {{ item.label | appTranslate | async }}\n {{ item.isRequired ? '*' : '' }}\n </th>\n }\n @if (!isShow()) {\n <th></th>\n <th></th>\n @for (actionBtn of actionBtns(); track actionBtn) {\n <th></th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (subForm of paginatedAndFilteredFormArray(); track subForm; let i = $index) {\n <tr\n table-input-row\n (onAddRowFunc)=\"addRowClicked(subForm.index)\"\n [isShow]=\"isShow()\"\n [form]=\"subForm.form\"\n [actionBtns]=\"actionBtns()\"\n [formSchema]=\"formSchema()\"\n [childrenFormSchemaMap]=\"childrenFormSchemaMap\"\n (onDeleteRowFunc)=\"\n deleteRowClicked(subForm.index, subForm.form, {\n btn: $event?.btn\n })\n \"\n (onActionButtonClick)=\"handleActionButtonClick(subForm.index, subForm.form, $event)\"></tr>\n } @empty {\n <tr>\n <td class=\"text-center\" [colSpan]=\"formSchema?.length\">\n {{ 'There are no items' | appTranslate | async }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"\" [hidden]=\"!usePaginator() || !filteredFormArrayLength() || filteredFormArrayLength() < pageSize()\">\n <paginator\n #paginatorTag\n [arrayLength]=\"filteredFormArrayLength()\"\n (pageChanged)=\"pageChanged($event)\"\n [pageSize]=\"pageSize()\"\n [resetIndexFunc]=\"filterForm.valueChanges\" />\n </div>\n </div>\n</div>\n", styles: ["tr{vertical-align:top}:host ::ng-deep .text-center input{text-align:center}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "disabled", "form", "forms", "help", "iconBtn", "loading", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid"], outputs: ["mclick"] }, { kind: "component", type: FormGeneratorComponent, selector: "form-generator", inputs: ["keyField", "submitFunc", "submitBtnText", "submitBtnTemplate", "submitSuccessText", "showSubmitBtn", "gridStyle", "gridMDStyle", "gridLGStyle", "gridXXLStyle", "formGridClass", "useLoader", "loading", "form", "formSchema", "isShow"], outputs: ["onSubmit", "mchange", "submissionResponse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "ngmodule", type: MatTabsModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: PaginatorComponent, selector: "paginator", inputs: ["pageSize", "pageIndex", "arrayLength", "resetIndexFunc", "pageSizeOptions"], outputs: ["pageChanged"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: TableInputRowComponent, selector: "tr[table-input-row]", inputs: ["isShow", "hideAdd", "actionBtns", "childrenFormSchemaMap"], outputs: ["onDeleteRowFunc", "onAddRowFunc", "onActionButtonClick"] }, { kind: "pipe", type: TranslatePipe, name: "appTranslate" }] }); }
|
|
14492
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.0", type: TableInputComponent, isStandalone: true, selector: "table-input", inputs: { formArray: { classPropertyName: "formArray", publicName: "formArray", isSignal: true, isRequired: false, transformFunction: null }, filterContainerClass: { classPropertyName: "filterContainerClass", publicName: "filterContainerClass", isSignal: true, isRequired: false, transformFunction: null }, border: { classPropertyName: "border", publicName: "border", isSignal: true, isRequired: false, transformFunction: null }, isShow: { classPropertyName: "isShow", publicName: "isShow", isSignal: true, isRequired: false, transformFunction: null }, _pageSize: { classPropertyName: "_pageSize", publicName: "pageSize", isSignal: false, isRequired: false, transformFunction: null }, actionBtns: { classPropertyName: "actionBtns", publicName: "actionBtns", isSignal: true, isRequired: false, transformFunction: null }, _formSchema: { classPropertyName: "_formSchema", publicName: "formSchema", isSignal: false, isRequired: true, transformFunction: null }, singleFormStructure: { classPropertyName: "singleFormStructure", publicName: "singleFormStructure", isSignal: false, isRequired: true, transformFunction: null }, deleteRowFunc: { classPropertyName: "deleteRowFunc", publicName: "deleteRowFunc", isSignal: false, isRequired: false, transformFunction: null }, addRowFunc: { classPropertyName: "addRowFunc", publicName: "addRowFunc", isSignal: false, isRequired: false, transformFunction: null }, _usePaginator: { classPropertyName: "_usePaginator", publicName: "usePaginator", isSignal: false, isRequired: false, transformFunction: null }, tableClass: { classPropertyName: "tableClass", publicName: "tableClass", isSignal: true, isRequired: false, transformFunction: null } }, providers: [FilterFormArrayGroupPipe, PaginatorPipe], viewQueries: [{ propertyName: "paginatorComponent", first: true, predicate: PaginatorComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"table-input\">\n @if (filterForms()?.length) {\n <div class=\"mb-3 {{ filterContainerClass() }}\">\n <div class=\"d-flex\">\n <app-btn\n text=\"{{ filterSection.hidden ? 'Show Filter' : 'Hide Filter' }}\"\n [icon]=\"filterSection.hidden ? 'search' : 'close'\"\n (mclick)=\"filterSection.hidden = !filterSection.hidden\" />\n </div>\n <div class=\"border p-3 mt-3 rounded-10\" #filterSection [hidden]=\"true\">\n <form-generator [form]=\"filterForm\" [formSchema]=\"filterForms()\" [gridLGStyle]=\"3\" [showSubmitBtn]=\"false\" (mchange)=\"resetPaginator()\" />\n <div class=\"d-flex justify-content-end\">\n <app-btn type=\"danger-outline\" text=\"Clear\" (mclick)=\"filterForm.reset()\" />\n </div>\n </div>\n </div>\n }\n\n <div class=\"bg-white\" [ngClass]=\"{ 'border rounded-10': border() }\">\n <div class=\" \">\n <table class=\" {{ tableClass() }} \" [ngClass]=\"{ 'is-show-form': isShow() }\">\n <thead (click)=\"utilityService.logForm(filteredFormArray())\">\n <tr class=\"text-center\">\n @for (item of formSchema(); track item.label) {\n <th class=\"{{ item.cls }}\">\n {{ item.label | appTranslate | async }}\n {{ item.isRequired ? '*' : '' }}\n </th>\n }\n @if (!isShow()) {\n <th></th>\n <th></th>\n @for (actionBtn of actionBtns(); track actionBtn) {\n <th></th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (subForm of paginatedAndFilteredFormArray(); track subForm; let i = $index) {\n <tr\n table-input-row\n (onAddRowFunc)=\"addRowClicked(subForm.index)\"\n [isShow]=\"isShow()\"\n [form]=\"subForm.form\"\n [actionBtns]=\"actionBtns()\"\n [formSchema]=\"formSchema()\"\n [childrenFormSchemaMap]=\"childrenFormSchemaMap\"\n (onDeleteRowFunc)=\"\n deleteRowClicked(subForm.index, subForm.form, {\n btn: $event?.btn\n })\n \"\n (onActionButtonClick)=\"handleActionButtonClick(subForm.index, subForm.form, $event)\"></tr>\n } @empty {\n <tr>\n <td class=\"text-center\" [colSpan]=\"formSchema?.length\">\n {{ 'There are no items' | appTranslate | async }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"\" [hidden]=\"!usePaginator() || !filteredFormArrayLength() || filteredFormArrayLength() < pageSize()\">\n <paginator\n #paginatorTag\n [arrayLength]=\"filteredFormArrayLength()\"\n (pageChanged)=\"pageChanged($event)\"\n [pageSize]=\"pageSize()\"\n [resetIndexFunc]=\"filterForm.valueChanges\" />\n </div>\n </div>\n</div>\n", styles: ["tr{vertical-align:top}:host ::ng-deep .text-center input{text-align:center}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "disabled", "form", "forms", "help", "iconBtn", "loading", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid"], outputs: ["mclick"] }, { kind: "component", type: FormGeneratorComponent, selector: "form-generator", inputs: ["keyField", "submitFunc", "submitBtnText", "submitBtnTemplate", "submitSuccessText", "showSubmitBtn", "gridStyle", "gridMDStyle", "gridLGStyle", "gridXXLStyle", "formGridClass", "useLoader", "loading", "form", "formSchema", "isShow"], outputs: ["onSubmit", "mchange", "submissionResponse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "ngmodule", type: MatTabsModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: PaginatorComponent, selector: "paginator", inputs: ["pageSize", "pageIndex", "arrayLength", "resetIndexFunc", "pageSizeOptions"], outputs: ["pageChanged"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: TableInputRowComponent, selector: "tr[table-input-row]", inputs: ["isShow", "hideAdd", "actionBtns", "childrenFormSchemaMap"], outputs: ["onDeleteRowFunc", "onAddRowFunc", "onActionButtonClick"] }, { kind: "pipe", type: TranslatePipe, name: "appTranslate" }] }); }
|
|
14493
14493
|
}
|
|
14494
14494
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImport: i0, type: TableInputComponent, decorators: [{
|
|
14495
14495
|
type: Component,
|
|
@@ -14525,7 +14525,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImpor
|
|
|
14525
14525
|
TranslatePipe,
|
|
14526
14526
|
FilterFormArrayGroupPipe,
|
|
14527
14527
|
ValidationMessageComponent,
|
|
14528
|
-
], providers: [FilterFormArrayGroupPipe], template: "<div class=\"table-input\">\n @if (filterForms()?.length) {\n <div class=\"mb-3 {{ filterContainerClass() }}\">\n <div class=\"d-flex\">\n <app-btn\n text=\"{{ filterSection.hidden ? 'Show Filter' : 'Hide Filter' }}\"\n [icon]=\"filterSection.hidden ? 'search' : 'close'\"\n (mclick)=\"filterSection.hidden = !filterSection.hidden\" />\n </div>\n <div class=\"border p-3 mt-3 rounded-10\" #filterSection [hidden]=\"true\">\n <form-generator [form]=\"filterForm\" [formSchema]=\"filterForms()\" [gridLGStyle]=\"3\" [showSubmitBtn]=\"false\" (mchange)=\"resetPaginator()\" />\n <div class=\"d-flex justify-content-end\">\n <app-btn type=\"danger-outline\" text=\"Clear\" (mclick)=\"filterForm.reset()\" />\n </div>\n </div>\n </div>\n }\n\n <div class=\"bg-white\" [ngClass]=\"{ 'border rounded-10': border() }\">\n <div class=\" \">\n <table class=\" {{ tableClass() }} \" [ngClass]=\"{ 'is-show-form': isShow() }\">\n <thead (click)=\"utilityService.logForm(filteredFormArray())\">\n <tr class=\"text-center\">\n @for (item of formSchema(); track item.label) {\n <th class=\"{{ item.cls }}\">\n {{ item.label | appTranslate | async }}\n {{ item.isRequired ? '*' : '' }}\n </th>\n }\n @if (!isShow()) {\n <th></th>\n <th></th>\n @for (actionBtn of actionBtns(); track actionBtn) {\n <th></th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (subForm of paginatedAndFilteredFormArray(); track subForm; let i = $index) {\n <tr\n table-input-row\n (onAddRowFunc)=\"addRowClicked(subForm.index)\"\n [isShow]=\"isShow()\"\n [form]=\"subForm.form\"\n [actionBtns]=\"actionBtns()\"\n [formSchema]=\"formSchema()\"\n [childrenFormSchemaMap]=\"childrenFormSchemaMap\"\n (onDeleteRowFunc)=\"\n deleteRowClicked(subForm.index, subForm.form, {\n btn: $event?.btn\n })\n \"\n (onActionButtonClick)=\"handleActionButtonClick(subForm.index, subForm.form, $event)\"></tr>\n } @empty {\n <tr>\n <td class=\"text-center\" [colSpan]=\"formSchema?.length\">\n {{ 'There are no items' | appTranslate | async }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"\" [hidden]=\"!usePaginator() || !filteredFormArrayLength() || filteredFormArrayLength() < pageSize()\">\n <paginator\n #paginatorTag\n [arrayLength]=\"filteredFormArrayLength()\"\n (pageChanged)=\"pageChanged($event)\"\n [pageSize]=\"pageSize()\"\n [resetIndexFunc]=\"filterForm.valueChanges\" />\n </div>\n </div>\n</div>\n", styles: ["tr{vertical-align:top}:host ::ng-deep .text-center input{text-align:center}\n"] }]
|
|
14528
|
+
], providers: [FilterFormArrayGroupPipe, PaginatorPipe], template: "<div class=\"table-input\">\n @if (filterForms()?.length) {\n <div class=\"mb-3 {{ filterContainerClass() }}\">\n <div class=\"d-flex\">\n <app-btn\n text=\"{{ filterSection.hidden ? 'Show Filter' : 'Hide Filter' }}\"\n [icon]=\"filterSection.hidden ? 'search' : 'close'\"\n (mclick)=\"filterSection.hidden = !filterSection.hidden\" />\n </div>\n <div class=\"border p-3 mt-3 rounded-10\" #filterSection [hidden]=\"true\">\n <form-generator [form]=\"filterForm\" [formSchema]=\"filterForms()\" [gridLGStyle]=\"3\" [showSubmitBtn]=\"false\" (mchange)=\"resetPaginator()\" />\n <div class=\"d-flex justify-content-end\">\n <app-btn type=\"danger-outline\" text=\"Clear\" (mclick)=\"filterForm.reset()\" />\n </div>\n </div>\n </div>\n }\n\n <div class=\"bg-white\" [ngClass]=\"{ 'border rounded-10': border() }\">\n <div class=\" \">\n <table class=\" {{ tableClass() }} \" [ngClass]=\"{ 'is-show-form': isShow() }\">\n <thead (click)=\"utilityService.logForm(filteredFormArray())\">\n <tr class=\"text-center\">\n @for (item of formSchema(); track item.label) {\n <th class=\"{{ item.cls }}\">\n {{ item.label | appTranslate | async }}\n {{ item.isRequired ? '*' : '' }}\n </th>\n }\n @if (!isShow()) {\n <th></th>\n <th></th>\n @for (actionBtn of actionBtns(); track actionBtn) {\n <th></th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (subForm of paginatedAndFilteredFormArray(); track subForm; let i = $index) {\n <tr\n table-input-row\n (onAddRowFunc)=\"addRowClicked(subForm.index)\"\n [isShow]=\"isShow()\"\n [form]=\"subForm.form\"\n [actionBtns]=\"actionBtns()\"\n [formSchema]=\"formSchema()\"\n [childrenFormSchemaMap]=\"childrenFormSchemaMap\"\n (onDeleteRowFunc)=\"\n deleteRowClicked(subForm.index, subForm.form, {\n btn: $event?.btn\n })\n \"\n (onActionButtonClick)=\"handleActionButtonClick(subForm.index, subForm.form, $event)\"></tr>\n } @empty {\n <tr>\n <td class=\"text-center\" [colSpan]=\"formSchema?.length\">\n {{ 'There are no items' | appTranslate | async }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"\" [hidden]=\"!usePaginator() || !filteredFormArrayLength() || filteredFormArrayLength() < pageSize()\">\n <paginator\n #paginatorTag\n [arrayLength]=\"filteredFormArrayLength()\"\n (pageChanged)=\"pageChanged($event)\"\n [pageSize]=\"pageSize()\"\n [resetIndexFunc]=\"filterForm.valueChanges\" />\n </div>\n </div>\n</div>\n", styles: ["tr{vertical-align:top}:host ::ng-deep .text-center input{text-align:center}\n"] }]
|
|
14529
14529
|
}], propDecorators: { _pageSize: [{
|
|
14530
14530
|
type: Input,
|
|
14531
14531
|
args: ['pageSize']
|