ets-fe-ng-sdk 17.0.396 → 17.0.398

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.
@@ -75,7 +75,7 @@ export class FieldsToDisplayComponent {
75
75
  e ? (item.type = 'number') : null;
76
76
  }
77
77
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: FieldsToDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
78
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.2", type: FieldsToDisplayComponent, isStandalone: true, selector: "fields-to-display", inputs: { query1: { classPropertyName: "query1", publicName: "query1", isSignal: true, isRequired: false, transformFunction: null }, query2: { classPropertyName: "query2", publicName: "query2", isSignal: true, isRequired: false, transformFunction: null }, _fields: { classPropertyName: "_fields", publicName: "fields", isSignal: false, isRequired: false, transformFunction: null }, _currentColumns: { classPropertyName: "_currentColumns", publicName: "currentColumns", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { query1: "query1Change", query2: "query2Change", fieldsChanged: "fieldsChanged" }, providers: [FilterArrayByStringPipe], ngImport: i0, template: "<app-btn\n type=\"outline\"\n customIcon=\"fa fa-bars\"\n iconPosition=\"right\"\n text=\"Define Outputs\"\n (mclick)=\"acModal.open()\" />\n<modal-comp\n header=\"Arrange Columns\"\n [width]=\"{ XLarge: '70%', Large: '80%' } | responsiveVal\"\n height=\"80vh\"\n #acModal>\n <div *modalBody>\n @if (uS.isMobileSignal()) {\n <div class=\"mb-2\">\n <app-input-td-rf [noFormat]=\"true\" [(model)]=\"query1\" placeholder=\"Filter\" />\n </div>\n <div class=\"border rounded-10\">\n <table class=\"table\">\n <thead>\n <tr>\n <th>{{ 'Column' | appTranslate | async }}</th>\n <th>{{ 'Visible' | appTranslate | async }}</th>\n <th>{{ 'Sticky' | appTranslate | async }}</th>\n </tr>\n </thead>\n <tbody>\n @for (item of filteredAllFields(); track item) {\n <tr>\n <td scope=\"row\">\n {{ item.t | titlecase | appTranslate | async }}\n </td>\n <td>\n <mat-slide-toggle [(ngModel)]=\"item.active\"></mat-slide-toggle>\n </td>\n <td>\n @if (item.active) {\n <mat-slide-toggle [(ngModel)]=\"item.sticky\"></mat-slide-toggle>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <!-- <div>query2 {{ query2() }}</div>\n <div class=\"\">\n searchRef.valueSignal {{ searchRef.valueSignal() }}\n </div> -->\n <div class=\"row row-cols-2\">\n <div>\n <div class=\"text-primary f-600 mb-2\">\n {{ 'Non-Selected Columns' | appTranslate | async }}\n </div>\n <!-- <div class=\"mb-2\">\n <app-input-td-rf [(model)]=\"query\" placeholder=\"Filter\" />\n </div> -->\n <div class=\"border rounded-10 p-2 bg-light cage overflow-auto\">\n <div class=\"row my-2 mx-0 justify-content-center\">\n <div class=\"col-sm-10\">\n <app-input-td-rf\n #searchRef\n [noFormat]=\"true\"\n [(model)]=\"query2\"\n placeholder=\"Search by name\"/>\n </div>\n </div>\n <div\n class=\"row row-cols-1 g-2\"\n cdkDropList\n #sourceList=\"cdkDropList\"\n [cdkDropListData]=\"nonActiveFields()\"\n cdkDropListSortingDisabled\n [cdkDropListConnectedTo]=\"[destinationList]\"\n (cdkDropListDropped)=\"drop($event)\">\n @for (item of nonActiveFields(); track item.f; let i = $index) {\n <div class=\"\" cdkDrag>\n <div class=\"example-custom-placeholder\" *cdkDragPlaceholder></div>\n <div class=\"border p-2 rounded-10 bg-white\">\n <div class=\"row row-cols-auto justify-content-between\">\n <div class=\"d-flex align-items-center\">\n <i\n cdkDragHandle\n matTooltip=\"Drag the icon to move the column to the selected columns group\"\n class=\"drag-cursor material-icons\">\n drag_handle\n </i>\n {{ item.t | titlecase | appTranslate | async }}\n </div>\n <div class=\"col-md-auto\">\n <div class=\"row\">\n <div class=\"col-md-auto\" *ngIf=\"!uS.environment.production\">\n {{ item.type }}\n </div>\n <!-- <div class=\"col-md-auto\">\n <app-input-td-rf [xsmall]=\"true\" [label]=\"'Is Number?'\"\n [stacked]=\"false\" type=\"checkbox\"\n (modelChange)=\"isNumType($event, item)\" />\n </div> -->\n <div class=\"col-md-auto\">\n <app-btn text=\"Select\" (mclick)=\"changeToActive(item)\" />\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n <div>\n <div class=\"text-primary f-600 mb-2\">\n {{ 'Selected Columns' | appTranslate | async }}\n </div>\n <div class=\"border rounded-10 p-2 bg-light cage overflow-auto\">\n <div\n class=\"row row-cols-1 g-2\"\n cdkDropList\n #destinationList=\"cdkDropList\"\n [cdkDropListData]=\"activeFields()\"\n [cdkDropListConnectedTo]=\"[sourceList]\"\n (cdkDropListDropped)=\"drop($event)\">\n @for (item of activeFields(); track item.f; let i = $index) {\n <div class=\"\" cdkDrag>\n <div class=\"example-custom-placeholder\" *cdkDragPlaceholder></div>\n <div class=\"border p-2 rounded-10 bg-white\">\n <div class=\"row row-cols-auto justify-content-between\">\n <div class=\"d-flex align-items-center\">\n <i\n cdkDragHandle\n matTooltip=\"Drag the icon to move the column to the non-selected columns group or re-order\"\n class=\"drag-cursor material-icons\">\n drag_handle\n </i>\n {{ item.t | titlecase | appTranslate | async }}\n </div>\n <div>\n <mat-slide-toggle *ngIf=\"item.active\" [(ngModel)]=\"item.sticky\">\n {{ 'Sticky' | appTranslate | async }}\n </mat-slide-toggle>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n <div class=\"w-100 pt-2 d-flex justify-content-end\" *modalFooter>\n <app-btn text=\"Update Columns\" (mclick)=\"emitFieldsChanged(); acModal.close()\" />\n </div>\n</modal-comp>\n", styles: [".example-custom-placeholder{background:#ccc;border:dotted 3px #999;border-radius:var(--border-radius);min-height:42px;transition:transform .25s cubic-bezier(0,0,.2,1)}.cage{height:calc(80vh - 215px)}\n"], dependencies: [{ kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "loading", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "form", "forms", "help", "iconBtn", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid", "disabled"], outputs: ["loadingChange", "leftCustomIconChange", "mclick", "disabledChange"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: InputTD_RFComponent, selector: "app-input-td-rf", inputs: ["validators", "asyncValidators", "model"], outputs: ["modelChange"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i1.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "directive", type: CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }, { kind: "component", type: i4.ModalComponent, selector: "modal-comp", inputs: ["header", "bodyTemplateRef", "footerTemplateRef", "showHeader", "loading", "isFullscreen", "showFooter", "width", "minWidth", "height", "maxHeight", "icon", "data", "disableClose", "hasBackdrop"], outputs: ["showHeaderChange", "loadingChange", "showFooterChange", "modalOpen", "modalClose"] }, { kind: "directive", type: i5.ModalBodyDirective, selector: "[modalBody]" }, { kind: "directive", type: i6.ModalFooterDirective, selector: "[modalFooter]" }, { kind: "pipe", type: ResponsiveValPipe, name: "responsiveVal" }, { kind: "pipe", type: TranslatePipe, name: "appTranslate" }] }); }
78
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.2", type: FieldsToDisplayComponent, isStandalone: true, selector: "fields-to-display", inputs: { query1: { classPropertyName: "query1", publicName: "query1", isSignal: true, isRequired: false, transformFunction: null }, query2: { classPropertyName: "query2", publicName: "query2", isSignal: true, isRequired: false, transformFunction: null }, _fields: { classPropertyName: "_fields", publicName: "fields", isSignal: false, isRequired: false, transformFunction: null }, _currentColumns: { classPropertyName: "_currentColumns", publicName: "currentColumns", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { query1: "query1Change", query2: "query2Change", fieldsChanged: "fieldsChanged" }, providers: [FilterArrayByStringPipe], ngImport: i0, template: "<app-btn\n type=\"outline\"\n customIcon=\"fa fa-bars\"\n iconPosition=\"right\"\n text=\"Define Outputs\"\n (mclick)=\"acModal.open()\" />\n<modal-comp\n header=\"Arrange Columns\"\n [width]=\"{ XLarge: '70%', Large: '80%' } | responsiveVal\"\n height=\"80vh\"\n #acModal>\n <div *modalBody>\n @if (uS.isMobileSignal()) {\n <div class=\"mb-2\">\n <app-input-td-rf [noFormat]=\"true\" [(model)]=\"query1\" placeholder=\"Filter\" />\n </div>\n <div class=\"border rounded-10\">\n <table class=\"table\">\n <thead>\n <tr>\n <th>{{ 'Column' | appTranslate | async }}</th>\n <th>{{ 'Visible' | appTranslate | async }}</th>\n <th>{{ 'Sticky' | appTranslate | async }}</th>\n </tr>\n </thead>\n <tbody>\n @for (item of filteredAllFields(); track item) {\n <tr>\n <td scope=\"row\">\n {{ item.t | titlecase | appTranslate | async }}\n </td>\n <td>\n <mat-slide-toggle [(ngModel)]=\"item.active\"></mat-slide-toggle>\n </td>\n <td>\n @if (item.active) {\n <mat-slide-toggle [(ngModel)]=\"item.sticky\"></mat-slide-toggle>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <!-- <div>query2 {{ query2() }}</div>\n <div class=\"\">\n searchRef.valueSignal {{ searchRef.valueSignal() }}\n </div> -->\n <div class=\"row row-cols-2\">\n <div>\n <div class=\"text-primary f-600 mb-2\">\n {{ 'Non-Selected Columns' | appTranslate | async }}\n </div>\n <!-- <div class=\"mb-2\">\n <app-input-td-rf [(model)]=\"query\" placeholder=\"Filter\" />\n </div> -->\n <div class=\"border rounded-10 p-2 bg-light cage overflow-auto\">\n <div class=\"row my-2 mx-0 justify-content-center\">\n <div class=\"col-sm-10\">\n <app-input-td-rf\n #searchRef\n [noFormat]=\"true\"\n [(model)]=\"query2\"\n placeholder=\"Search by name\"/>\n </div>\n </div>\n <div\n class=\"row row-cols-1 g-2\"\n cdkDropList\n #sourceList=\"cdkDropList\"\n [cdkDropListData]=\"nonActiveFields()\"\n cdkDropListSortingDisabled\n [cdkDropListConnectedTo]=\"[destinationList]\"\n (cdkDropListDropped)=\"drop($event)\">\n @for (item of nonActiveFields(); track item.f; let i = $index) {\n <div class=\"\" cdkDrag>\n <div class=\"example-custom-placeholder\" *cdkDragPlaceholder></div>\n <div class=\"border p-2 rounded-10 bg-white\">\n <div class=\"row row-cols-auto justify-content-between\">\n <div class=\"d-flex align-items-center\">\n <i\n cdkDragHandle\n matTooltip=\"Drag the icon to move the column to the selected columns group\"\n class=\"drag-cursor material-icons\">\n drag_handle\n </i>\n {{ item.t | titlecase | appTranslate | async }}\n </div>\n <div class=\"col-md-auto\">\n <div class=\"row\">\n <div class=\"col-md-auto\" *ngIf=\"!uS.environment.production\">\n {{ item.type }}\n </div>\n <!-- <div class=\"col-md-auto\">\n <app-input-td-rf [xsmall]=\"true\" [label]=\"'Is Number?'\"\n [stacked]=\"false\" type=\"checkbox\"\n (modelChange)=\"isNumType($event, item)\" />\n </div> -->\n <div class=\"col-md-auto\">\n <app-btn text=\"Select\" (mclick)=\"changeToActive(item)\" />\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n <div>\n <div class=\"text-primary f-600 mb-2\">\n {{ 'Selected Columns' | appTranslate | async }}\n </div>\n <div class=\"border rounded-10 p-2 bg-light cage overflow-auto\">\n <div\n class=\"row row-cols-1 g-2\"\n cdkDropList\n #destinationList=\"cdkDropList\"\n [cdkDropListData]=\"activeFields()\"\n [cdkDropListConnectedTo]=\"[sourceList]\"\n (cdkDropListDropped)=\"drop($event)\">\n @for (item of activeFields(); track item.f; let i = $index) {\n <div class=\"\" cdkDrag>\n <div class=\"example-custom-placeholder\" *cdkDragPlaceholder></div>\n <div class=\"border p-2 rounded-10 bg-white\">\n <div class=\"row row-cols-auto justify-content-between\">\n <div class=\"d-flex align-items-center\">\n <i\n cdkDragHandle\n matTooltip=\"Drag the icon to move the column to the non-selected columns group or re-order\"\n class=\"drag-cursor material-icons\">\n drag_handle\n </i>\n {{ item.t | titlecase | appTranslate | async }}\n </div>\n <div>\n <mat-slide-toggle *ngIf=\"item.active\" [(ngModel)]=\"item.sticky\">\n {{ 'Sticky' | appTranslate | async }}\n </mat-slide-toggle>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n <div class=\"w-100 pt-2 d-flex justify-content-end\" *modalFooter>\n <app-btn text=\"Update Columns\" (mclick)=\"emitFieldsChanged(); acModal.close()\" />\n </div>\n</modal-comp>\n", styles: [".example-custom-placeholder{background:#ccc;border:dotted 3px #999;border-radius:var(--border-radius);min-height:42px;transition:transform .25s cubic-bezier(0,0,.2,1)}.cage{height:calc(80vh - 215px)}\n"], dependencies: [{ kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "loading", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "form", "forms", "help", "iconBtn", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid", "disabled"], outputs: ["loadingChange", "leftCustomIconChange", "mclick", "disabledChange"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: InputTD_RFComponent, selector: "app-input-td-rf", inputs: ["validators", "asyncValidators", "model"], outputs: ["modelChange"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i1.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "directive", type: CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }, { kind: "component", type: i4.ModalComponent, selector: "modal-comp", inputs: ["header", "bodyTemplateRef", "footerTemplateRef", "showHeader", "loading", "isFullscreen", "showFooter", "width", "minWidth", "height", "maxHeight", "icon", "data", "disableClose", "hasBackdrop"], outputs: ["headerChange", "showHeaderChange", "loadingChange", "showFooterChange", "modalOpen", "modalClose"] }, { kind: "directive", type: i5.ModalBodyDirective, selector: "[modalBody]" }, { kind: "directive", type: i6.ModalFooterDirective, selector: "[modalFooter]" }, { kind: "pipe", type: ResponsiveValPipe, name: "responsiveVal" }, { kind: "pipe", type: TranslatePipe, name: "appTranslate" }] }); }
79
79
  }
80
80
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: FieldsToDisplayComponent, decorators: [{
81
81
  type: Component,
@@ -107,4 +107,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImpor
107
107
  }], fieldsChanged: [{
108
108
  type: Output
109
109
  }] } });
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzLXRvLWRpc3BsYXkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NoYXJlZC9jb21wb25lbnRzL2ZpZWxkcy10by1kaXNwbGF5L2ZpZWxkcy10by1kaXNwbGF5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy9maWVsZHMtdG8tZGlzcGxheS9maWVsZHMtdG8tZGlzcGxheS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixXQUFXLEVBQ1gsT0FBTyxFQUNQLGtCQUFrQixFQUNsQixhQUFhLEdBQ2QsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM5QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JFLE9BQU8sRUFB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O1FBQzlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDcEMsQ0FBQzs4R0ExRlUsd0JBQXdCO2tHQUF4Qix3QkFBd0IsbXJCQUZ4QixDQUFDLHVCQUF1QixDQUFDLDBCQzFEdEMsOCtNQTRKQSxtUURwSEksWUFBWSx3ZkFDWixJQUFJLDZGQUNKLG1CQUFtQix5SUFFbkIsb0JBQW9CLGtXQUNwQixXQUFXLCtWQUNYLFdBQVcsK2RBQ1gsT0FBTyx3YkFDUCxrQkFBa0IsOEZBQ2xCLGFBQWEsOEZBQ2IsZ0JBQWdCLHdUQUNoQixTQUFTLHlDQUNULGFBQWEsZ2tCQUdiLGlCQUFpQixpREFDakIsYUFBYTs7MkZBSUosd0JBQXdCO2tCQTNCcEMsU0FBUzsrQkFDRSxtQkFBbUIsY0FHakIsSUFBSSxXQUVQO3dCQUNQLFlBQVk7d0JBQ1osSUFBSTt3QkFDSixtQkFBbUI7d0JBQ25CLEtBQUs7d0JBQ0wsb0JBQW9CO3dCQUNwQixXQUFXO3dCQUNYLFdBQVc7d0JBQ1gsT0FBTzt3QkFDUCxrQkFBa0I7d0JBQ2xCLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQixTQUFTO3dCQUNULGFBQWE7d0JBQ2IsdUJBQXVCO3dCQUN2QixlQUFlO3dCQUNmLGlCQUFpQjt3QkFDakIsYUFBYTtxQkFDZCxhQUNVLENBQUMsdUJBQXVCLENBQUM7d0RBTWYsT0FBTztzQkFBM0IsS0FBSzt1QkFBQyxRQUFRO2dCQVNjLGVBQWU7c0JBQTNDLEtBQUs7dUJBQUMsZ0JBQWdCO2dCQWlDYixhQUFhO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2RrRHJhZ0Ryb3AsXG4gIG1vdmVJdGVtSW5BcnJheSxcbiAgdHJhbnNmZXJBcnJheUl0ZW0sXG4gIENka0Ryb3BMaXN0LFxuICBDZGtEcmFnLFxuICBDZGtEcmFnUGxhY2Vob2xkZXIsXG4gIENka0RyYWdIYW5kbGUsXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBtb2RlbCxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFNsaWRlVG9nZ2xlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgdW5pcUJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEZpbHRlckFycmF5QnlTdHJpbmdQaXBlLCBSZXNwb25zaXZlVmFsUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3V0aWxpdHkucGlwZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJbnB1dFREX1JGQ29tcG9uZW50IH0gZnJvbSAnLi4vaW5wdXQvaW5wdXQtdGQtcmYuY29tcG9uZW50JztcbmltcG9ydCB7IE5nSWYsIE5nRm9yLCBBc3luY1BpcGUsIFRpdGxlQ2FzZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTW9kYWxDb21wb25lbnRzIH0gZnJvbSAnLi4vbW9kYWwtY29tcG9uZW50cy9tb2RhbC5jb21wb25lbnRzJztcbmltcG9ydCB7IEJ0bkNvbXBvbmVudCB9IGZyb20gJy4uL2J0bi9idG4uY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlQ29sIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2luZGV4Lm1vZGVsJztcbmltcG9ydCB7IFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vU2VydmljZXMvdXRpbGl0eS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZmllbGRzLXRvLWRpc3BsYXknLFxuICB0ZW1wbGF0ZVVybDogJy4vZmllbGRzLXRvLWRpc3BsYXkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWVsZHMtdG8tZGlzcGxheS5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICAvLyAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBCdG5Db21wb25lbnQsXG4gICAgTmdJZixcbiAgICBJbnB1dFREX1JGQ29tcG9uZW50LFxuICAgIE5nRm9yLFxuICAgIE1hdFNsaWRlVG9nZ2xlTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIENka0Ryb3BMaXN0LFxuICAgIENka0RyYWcsXG4gICAgQ2RrRHJhZ1BsYWNlaG9sZGVyLFxuICAgIENka0RyYWdIYW5kbGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBBc3luY1BpcGUsXG4gICAgVGl0bGVDYXNlUGlwZSxcbiAgICBGaWx0ZXJBcnJheUJ5U3RyaW5nUGlwZSxcbiAgICBNb2RhbENvbXBvbmVudHMsXG4gICAgUmVzcG9uc2l2ZVZhbFBpcGUsXG4gICAgVHJhbnNsYXRlUGlwZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbRmlsdGVyQXJyYXlCeVN0cmluZ1BpcGVdLFxufSlcbmV4cG9ydCBjbGFzcyBGaWVsZHNUb0Rpc3BsYXlDb21wb25lbnQge1xuICByZWFkb25seSBxdWVyeTEgPSBtb2RlbDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IHF1ZXJ5MiA9IG1vZGVsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBASW5wdXQoJ2ZpZWxkcycpIHNldCBfZmllbGRzKHY6IFRhYmxlQ29sW10pIHtcbiAgICB0aGlzLmFsbEZpZWxkcy5zZXQoXG4gICAgICBjbG9uZURlZXAodikubWFwKCh4KSA9PiB7XG4gICAgICAgIHhbJ2lkJ10gPSB4LmY/LnRvU3RyaW5nKCk7XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfSkgfHwgW10sXG4gICAgKTtcbiAgfVxuXG4gIEBJbnB1dCgnY3VycmVudENvbHVtbnMnKSBzZXQgX2N1cnJlbnRDb2x1bW5zKHY6IFRhYmxlQ29sW10pIHtcbiAgICB0aGlzLmFsbEZpZWxkcy51cGRhdGUoKGFsbEZpZWxkcykgPT5cbiAgICAgIHVuaXFCeShcbiAgICAgICAgKFxuICAgICAgICAgIHYubWFwKCh4KSA9PiB7XG4gICAgICAgICAgICB4LmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgICB9KSB8fCBbXVxuICAgICAgICApLmNvbmNhdChhbGxGaWVsZHMpLFxuICAgICAgICAnZicsXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICByZWFkb25seSBhbGxGaWVsZHMgPSBzaWduYWw8VGFibGVDb2xbXT4oW10pO1xuXG4gIHJlYWRvbmx5IGZpbHRlcmVkQWxsRmllbGRzID0gY29tcHV0ZWQ8VGFibGVDb2xbXT4oKCkgPT5cbiAgICB0aGlzLmZpbHRlckFycmF5QnlTdHJpbmdQaXBlLnRyYW5zZm9ybSh0aGlzLmFsbEZpZWxkcygpLCB0aGlzLnF1ZXJ5MSgpISwgWydmJywgJ3QnXSksXG4gICk7XG5cbiAgcmVhZG9ubHkgYWN0aXZlRmllbGRzID0gY29tcHV0ZWQ8VGFibGVDb2xbXT4oKCkgPT4gdGhpcy5hbGxGaWVsZHMoKS5maWx0ZXIoKHgpID0+IHguYWN0aXZlKSk7XG4gIC8vIGFjdGl2ZUZpZWxkcyA9IHNpZ25hbDxUYWJsZUNvbFtdPihbXSk7XG5cbiAgcmVhZG9ubHkgbm9uQWN0aXZlRmllbGRzID0gY29tcHV0ZWQ8VGFibGVDb2xbXT4oKCkgPT5cbiAgICB0aGlzLmZpbHRlckFycmF5QnlTdHJpbmdQaXBlXG4gICAgICAudHJhbnNmb3JtKFxuICAgICAgICB0aGlzLmFsbEZpZWxkcygpLmZpbHRlcigoeCkgPT4gIXguYWN0aXZlKSxcbiAgICAgICAgdGhpcy5xdWVyeTIoKSEsXG4gICAgICAgIFsnZicsICd0J10sXG4gICAgICApXG4gICAgICAuc29ydDIoJ3QnLCB0cnVlKSxcbiAgKTtcblxuICBAT3V0cHV0KCkgZmllbGRzQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIG5GaWVsZHM6IFRhYmxlQ29sW107XG4gICAgYWxsRmllbGRzOiBUYWJsZUNvbFtdO1xuICB9PigpO1xuXG4gIHB1YmxpYyBmaWx0ZXJBcnJheUJ5U3RyaW5nUGlwZSA9IGluamVjdChGaWx0ZXJBcnJheUJ5U3RyaW5nUGlwZSk7XG4gIHB1YmxpYyB1UyA9IGluamVjdChVdGlsaXR5U2VydmljZSk7XG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxUYWJsZUNvbFtdPikge1xuICAgIGlmIChldmVudC5wcmV2aW91c0NvbnRhaW5lciA9PT0gZXZlbnQuY29udGFpbmVyKSB7XG4gICAgICBtb3ZlSXRlbUluQXJyYXkoZXZlbnQuY29udGFpbmVyLmRhdGEsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRlYnVnZ2VyO1xuICAgICAgY29uc3QgaXRlbSA9IGV2ZW50LnByZXZpb3VzQ29udGFpbmVyLmRhdGFbZXZlbnQucHJldmlvdXNJbmRleF07XG4gICAgICBpdGVtLmFjdGl2ZSA9ICFpdGVtLmFjdGl2ZTtcbiAgICAgIGlmICghaXRlbS5hY3RpdmUpIGl0ZW0uc3RpY2t5ID0gZmFsc2U7XG4gICAgICB0cmFuc2ZlckFycmF5SXRlbShcbiAgICAgICAgZXZlbnQucHJldmlvdXNDb250YWluZXIuZGF0YSxcbiAgICAgICAgZXZlbnQuY29udGFpbmVyLmRhdGEsXG4gICAgICAgIGV2ZW50LnByZXZpb3VzSW5kZXgsXG4gICAgICAgIGV2ZW50LmN1cnJlbnRJbmRleCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlVG9BY3RpdmUobm9uQWN0aXZlT2JqOiBUYWJsZUNvbCkge1xuICAgIHRoaXMuYWxsRmllbGRzLnVwZGF0ZSgoYWxsRmllbGRzKSA9PlxuICAgICAgYWxsRmllbGRzLm1hcCgoeCkgPT4ge1xuICAgICAgICBpZiAobm9uQWN0aXZlT2JqLmYgPT0geC5mKSB4LmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIGVtaXRGaWVsZHNDaGFuZ2VkKCkge1xuICAgIHRoaXMuZmllbGRzQ2hhbmdlZC5lbWl0KHtcbiAgICAgIG5GaWVsZHM6IHRoaXMudVMuaXNNb2JpbGUgPyB0aGlzLmFsbEZpZWxkcygpLmZpbHRlcigoeCkgPT4geC5hY3RpdmUpIDogdGhpcy5hY3RpdmVGaWVsZHMoKSxcbiAgICAgIGFsbEZpZWxkczogdGhpcy5hbGxGaWVsZHMoKSxcbiAgICB9KTtcbiAgfVxuXG4gIGlzTnVtVHlwZShlOiBhbnksIGl0ZW06IFRhYmxlQ29sKSB7XG4gICAgZSA/IChpdGVtLnR5cGUgPSAnbnVtYmVyJykgOiBudWxsO1xuICB9XG59XG4iLCI8YXBwLWJ0blxuICB0eXBlPVwib3V0bGluZVwiXG4gIGN1c3RvbUljb249XCJmYSBmYS1iYXJzXCJcbiAgaWNvblBvc2l0aW9uPVwicmlnaHRcIlxuICB0ZXh0PVwiRGVmaW5lIE91dHB1dHNcIlxuICAobWNsaWNrKT1cImFjTW9kYWwub3BlbigpXCIgLz5cbjxtb2RhbC1jb21wXG4gIGhlYWRlcj1cIkFycmFuZ2UgQ29sdW1uc1wiXG4gIFt3aWR0aF09XCJ7IFhMYXJnZTogJzcwJScsIExhcmdlOiAnODAlJyB9IHwgcmVzcG9uc2l2ZVZhbFwiXG4gIGhlaWdodD1cIjgwdmhcIlxuICAjYWNNb2RhbD5cbiAgPGRpdiAqbW9kYWxCb2R5PlxuICAgIEBpZiAodVMuaXNNb2JpbGVTaWduYWwoKSkge1xuICAgICAgPGRpdiBjbGFzcz1cIm1iLTJcIj5cbiAgICAgICAgPGFwcC1pbnB1dC10ZC1yZiBbbm9Gb3JtYXRdPVwidHJ1ZVwiIFsobW9kZWwpXT1cInF1ZXJ5MVwiIHBsYWNlaG9sZGVyPVwiRmlsdGVyXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkLTEwXCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlXCI+XG4gICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGg+e3sgJ0NvbHVtbicgfCBhcHBUcmFuc2xhdGUgfCBhc3luYyB9fTwvdGg+XG4gICAgICAgICAgICAgIDx0aD57eyAnVmlzaWJsZScgfCBhcHBUcmFuc2xhdGUgfCBhc3luYyB9fTwvdGg+XG4gICAgICAgICAgICAgIDx0aD57eyAnU3RpY2t5JyB8IGFwcFRyYW5zbGF0ZSB8IGFzeW5jIH19PC90aD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICBAZm9yIChpdGVtIG9mIGZpbHRlcmVkQWxsRmllbGRzKCk7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgIDx0ZCBzY29wZT1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAge3sgaXRlbS50IHwgdGl0bGVjYXNlIHwgYXBwVHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFsobmdNb2RlbCldPVwiaXRlbS5hY3RpdmVcIj48L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0uYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFsobmdNb2RlbCldPVwiaXRlbS5zdGlja3lcIj48L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8IS0tIDxkaXY+cXVlcnkyIHt7IHF1ZXJ5MigpIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiXCI+XG4gICAgICAgIHNlYXJjaFJlZi52YWx1ZVNpZ25hbCAgICB7eyBzZWFyY2hSZWYudmFsdWVTaWduYWwoKSB9fVxuICAgICAgPC9kaXY+IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInJvdyByb3ctY29scy0yXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcHJpbWFyeSBmLTYwMCBtYi0yXCI+XG4gICAgICAgICAgICB7eyAnTm9uLVNlbGVjdGVkIENvbHVtbnMnIHwgYXBwVHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWlucHV0LXRkLXJmIFsobW9kZWwpXT1cInF1ZXJ5XCIgcGxhY2Vob2xkZXI9XCJGaWx0ZXJcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkLTEwIHAtMiBiZy1saWdodCBjYWdlIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXktMiBteC0wIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMFwiPlxuICAgICAgICAgICAgICAgIDxhcHAtaW5wdXQtdGQtcmZcbiAgICAgICAgICAgICAgICAgICNzZWFyY2hSZWZcbiAgICAgICAgICAgICAgICAgIFtub0Zvcm1hdF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFsobW9kZWwpXT1cInF1ZXJ5MlwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBieSBuYW1lXCIvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInJvdyByb3ctY29scy0xIGctMlwiXG4gICAgICAgICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgICAgICAgICNzb3VyY2VMaXN0PVwiY2RrRHJvcExpc3RcIlxuICAgICAgICAgICAgICBbY2RrRHJvcExpc3REYXRhXT1cIm5vbkFjdGl2ZUZpZWxkcygpXCJcbiAgICAgICAgICAgICAgY2RrRHJvcExpc3RTb3J0aW5nRGlzYWJsZWRcbiAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0Q29ubmVjdGVkVG9dPVwiW2Rlc3RpbmF0aW9uTGlzdF1cIlxuICAgICAgICAgICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3AoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIG5vbkFjdGl2ZUZpZWxkcygpOyB0cmFjayBpdGVtLmY7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiIGNka0RyYWc+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhhbXBsZS1jdXN0b20tcGxhY2Vob2xkZXJcIiAqY2RrRHJhZ1BsYWNlaG9sZGVyPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciBwLTIgcm91bmRlZC0xMCBiZy13aGl0ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHJvdy1jb2xzLWF1dG8ganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2RrRHJhZ0hhbmRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiRHJhZyB0aGUgaWNvbiB0byBtb3ZlIHRoZSBjb2x1bW4gdG8gdGhlIHNlbGVjdGVkIGNvbHVtbnMgZ3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyYWctY3Vyc29yIG1hdGVyaWFsLWljb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRyYWdfaGFuZGxlXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnQgfCB0aXRsZWNhc2UgfCBhcHBUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLWF1dG9cIiAqbmdJZj1cIiF1Uy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS50eXBlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjb2wtbWQtYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtaW5wdXQtdGQtcmYgW3hzbWFsbF09XCJ0cnVlXCIgW2xhYmVsXT1cIidJcyBOdW1iZXI/J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdGFja2VkXT1cImZhbHNlXCIgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cImlzTnVtVHlwZSgkZXZlbnQsIGl0ZW0pXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC1hdXRvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1idG4gdGV4dD1cIlNlbGVjdFwiIChtY2xpY2spPVwiY2hhbmdlVG9BY3RpdmUoaXRlbSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcHJpbWFyeSBmLTYwMCBtYi0yXCI+XG4gICAgICAgICAgICB7eyAnU2VsZWN0ZWQgQ29sdW1ucycgfCBhcHBUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcm91bmRlZC0xMCBwLTIgYmctbGlnaHQgY2FnZSBvdmVyZmxvdy1hdXRvXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwicm93IHJvdy1jb2xzLTEgZy0yXCJcbiAgICAgICAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgICAgICAgI2Rlc3RpbmF0aW9uTGlzdD1cImNka0Ryb3BMaXN0XCJcbiAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJhY3RpdmVGaWVsZHMoKVwiXG4gICAgICAgICAgICAgIFtjZGtEcm9wTGlzdENvbm5lY3RlZFRvXT1cIltzb3VyY2VMaXN0XVwiXG4gICAgICAgICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgYWN0aXZlRmllbGRzKCk7IHRyYWNrIGl0ZW0uZjsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgY2RrRHJhZz5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGFtcGxlLWN1c3RvbS1wbGFjZWhvbGRlclwiICpjZGtEcmFnUGxhY2Vob2xkZXI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIHAtMiByb3VuZGVkLTEwIGJnLXdoaXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcm93LWNvbHMtYXV0byBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjZGtEcmFnSGFuZGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJEcmFnIHRoZSBpY29uIHRvIG1vdmUgdGhlIGNvbHVtbiB0byB0aGUgbm9uLXNlbGVjdGVkIGNvbHVtbnMgZ3JvdXAgb3IgcmUtb3JkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyYWctY3Vyc29yIG1hdGVyaWFsLWljb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRyYWdfaGFuZGxlXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnQgfCB0aXRsZWNhc2UgfCBhcHBUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSAqbmdJZj1cIml0ZW0uYWN0aXZlXCIgWyhuZ01vZGVsKV09XCJpdGVtLnN0aWNreVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnU3RpY2t5JyB8IGFwcFRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJ3LTEwMCBwdC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCIgKm1vZGFsRm9vdGVyPlxuICAgIDxhcHAtYnRuIHRleHQ9XCJVcGRhdGUgQ29sdW1uc1wiIChtY2xpY2spPVwiZW1pdEZpZWxkc0NoYW5nZWQoKTsgYWNNb2RhbC5jbG9zZSgpXCIgLz5cbiAgPC9kaXY+XG48L21vZGFsLWNvbXA+XG4iXX0=
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzLXRvLWRpc3BsYXkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NoYXJlZC9jb21wb25lbnRzL2ZpZWxkcy10by1kaXNwbGF5L2ZpZWxkcy10by1kaXNwbGF5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy9maWVsZHMtdG8tZGlzcGxheS9maWVsZHMtdG8tZGlzcGxheS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixXQUFXLEVBQ1gsT0FBTyxFQUNQLGtCQUFrQixFQUNsQixhQUFhLEdBQ2QsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM5QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXBELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7Ozs7QUE2Qm5FLE1BQU0sT0FBTyx3QkFBd0I7SUFJbkMsSUFBcUIsT0FBTyxDQUFDLENBQWE7UUFDeEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQ2hCLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNyQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQztZQUMxQixPQUFPLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FDVCxDQUFDO0lBQ0osQ0FBQztJQUVELElBQTZCLGVBQWUsQ0FBQyxDQUFhO1FBQ3hELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FDbEMsTUFBTSxDQUNKLENBQ0UsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ1YsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDaEIsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsSUFBSSxFQUFFLENBQ1QsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQ25CLEdBQUcsQ0FDSixDQUNGLENBQUM7SUFDSixDQUFDO0lBNEJEO1FBcERTLFdBQU0sR0FBRyxLQUFLLENBQXFCLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLFdBQU0sR0FBRyxLQUFLLENBQXFCLFNBQVMsQ0FBQyxDQUFDO1FBeUI5QyxjQUFTLEdBQUcsTUFBTSxDQUFhLEVBQUUsQ0FBQyxDQUFDO1FBRW5DLHNCQUFpQixHQUFHLFFBQVEsQ0FBYSxHQUFHLEVBQUUsQ0FDckQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQ3JGLENBQUM7UUFFTyxpQkFBWSxHQUFHLFFBQVEsQ0FBYSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUM3Rix5Q0FBeUM7UUFFaEMsb0JBQWUsR0FBRyxRQUFRLENBQWEsR0FBRyxFQUFFLENBQ25ELElBQUksQ0FBQyx1QkFBdUI7YUFDekIsU0FBUyxDQUNSLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUN6QyxJQUFJLENBQUMsTUFBTSxFQUFHLEVBQ2QsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQ1g7YUFDQSxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUNwQixDQUFDO1FBRVEsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFHdEMsQ0FBQztRQUVFLDRCQUF1QixHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzFELE9BQUUsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVoQixJQUFJLENBQUMsS0FBOEI7UUFDakMsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEtBQUssS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUMvQyxlQUFlLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDaEY7YUFBTTtZQUNMLFlBQVk7WUFDWixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07Z0JBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDdEMsaUJBQWlCLENBQ2YsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFDNUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQ3BCLEtBQUssQ0FBQyxhQUFhLEVBQ25CLEtBQUssQ0FBQyxZQUFZLENBQ25CLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsWUFBc0I7UUFDbkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUNsQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDbEIsSUFBSSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQzNDLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQztZQUN0QixPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUMxRixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRTtTQUM1QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBUyxDQUFDLENBQU0sRUFBRSxJQUFjO1FBQzlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDcEMsQ0FBQzs4R0ExRlUsd0JBQXdCO2tHQUF4Qix3QkFBd0IsbXJCQUZ4QixDQUFDLHVCQUF1QixDQUFDLDBCQzFEdEMsOCtNQTRKQSxtUURwSEksWUFBWSx3ZkFDWixJQUFJLDZGQUNKLG1CQUFtQix5SUFFbkIsb0JBQW9CLGtXQUNwQixXQUFXLCtWQUNYLFdBQVcsK2RBQ1gsT0FBTyx3YkFDUCxrQkFBa0IsOEZBQ2xCLGFBQWEsOEZBQ2IsZ0JBQWdCLHdUQUNoQixTQUFTLHlDQUNULGFBQWEsZ2xCQUdiLGlCQUFpQixpREFDakIsYUFBYTs7MkZBSUosd0JBQXdCO2tCQTNCcEMsU0FBUzsrQkFDRSxtQkFBbUIsY0FHakIsSUFBSSxXQUVQO3dCQUNQLFlBQVk7d0JBQ1osSUFBSTt3QkFDSixtQkFBbUI7d0JBQ25CLEtBQUs7d0JBQ0wsb0JBQW9CO3dCQUNwQixXQUFXO3dCQUNYLFdBQVc7d0JBQ1gsT0FBTzt3QkFDUCxrQkFBa0I7d0JBQ2xCLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQixTQUFTO3dCQUNULGFBQWE7d0JBQ2IsdUJBQXVCO3dCQUN2QixlQUFlO3dCQUNmLGlCQUFpQjt3QkFDakIsYUFBYTtxQkFDZCxhQUNVLENBQUMsdUJBQXVCLENBQUM7d0RBTWYsT0FBTztzQkFBM0IsS0FBSzt1QkFBQyxRQUFRO2dCQVNjLGVBQWU7c0JBQTNDLEtBQUs7dUJBQUMsZ0JBQWdCO2dCQWlDYixhQUFhO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2RrRHJhZ0Ryb3AsXG4gIG1vdmVJdGVtSW5BcnJheSxcbiAgdHJhbnNmZXJBcnJheUl0ZW0sXG4gIENka0Ryb3BMaXN0LFxuICBDZGtEcmFnLFxuICBDZGtEcmFnUGxhY2Vob2xkZXIsXG4gIENka0RyYWdIYW5kbGUsXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBtb2RlbCxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFNsaWRlVG9nZ2xlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgdW5pcUJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEZpbHRlckFycmF5QnlTdHJpbmdQaXBlLCBSZXNwb25zaXZlVmFsUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3V0aWxpdHkucGlwZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJbnB1dFREX1JGQ29tcG9uZW50IH0gZnJvbSAnLi4vaW5wdXQvaW5wdXQtdGQtcmYuY29tcG9uZW50JztcbmltcG9ydCB7IE5nSWYsIE5nRm9yLCBBc3luY1BpcGUsIFRpdGxlQ2FzZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTW9kYWxDb21wb25lbnRzIH0gZnJvbSAnLi4vbW9kYWwtY29tcG9uZW50cy9tb2RhbC5jb21wb25lbnRzJztcbmltcG9ydCB7IEJ0bkNvbXBvbmVudCB9IGZyb20gJy4uL2J0bi9idG4uY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlQ29sIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2luZGV4Lm1vZGVsJztcbmltcG9ydCB7IFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vU2VydmljZXMvdXRpbGl0eS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZmllbGRzLXRvLWRpc3BsYXknLFxuICB0ZW1wbGF0ZVVybDogJy4vZmllbGRzLXRvLWRpc3BsYXkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWVsZHMtdG8tZGlzcGxheS5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICAvLyAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBCdG5Db21wb25lbnQsXG4gICAgTmdJZixcbiAgICBJbnB1dFREX1JGQ29tcG9uZW50LFxuICAgIE5nRm9yLFxuICAgIE1hdFNsaWRlVG9nZ2xlTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIENka0Ryb3BMaXN0LFxuICAgIENka0RyYWcsXG4gICAgQ2RrRHJhZ1BsYWNlaG9sZGVyLFxuICAgIENka0RyYWdIYW5kbGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBBc3luY1BpcGUsXG4gICAgVGl0bGVDYXNlUGlwZSxcbiAgICBGaWx0ZXJBcnJheUJ5U3RyaW5nUGlwZSxcbiAgICBNb2RhbENvbXBvbmVudHMsXG4gICAgUmVzcG9uc2l2ZVZhbFBpcGUsXG4gICAgVHJhbnNsYXRlUGlwZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbRmlsdGVyQXJyYXlCeVN0cmluZ1BpcGVdLFxufSlcbmV4cG9ydCBjbGFzcyBGaWVsZHNUb0Rpc3BsYXlDb21wb25lbnQge1xuICByZWFkb25seSBxdWVyeTEgPSBtb2RlbDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IHF1ZXJ5MiA9IG1vZGVsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBASW5wdXQoJ2ZpZWxkcycpIHNldCBfZmllbGRzKHY6IFRhYmxlQ29sW10pIHtcbiAgICB0aGlzLmFsbEZpZWxkcy5zZXQoXG4gICAgICBjbG9uZURlZXAodikubWFwKCh4KSA9PiB7XG4gICAgICAgIHhbJ2lkJ10gPSB4LmY/LnRvU3RyaW5nKCk7XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfSkgfHwgW10sXG4gICAgKTtcbiAgfVxuXG4gIEBJbnB1dCgnY3VycmVudENvbHVtbnMnKSBzZXQgX2N1cnJlbnRDb2x1bW5zKHY6IFRhYmxlQ29sW10pIHtcbiAgICB0aGlzLmFsbEZpZWxkcy51cGRhdGUoKGFsbEZpZWxkcykgPT5cbiAgICAgIHVuaXFCeShcbiAgICAgICAgKFxuICAgICAgICAgIHYubWFwKCh4KSA9PiB7XG4gICAgICAgICAgICB4LmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgICB9KSB8fCBbXVxuICAgICAgICApLmNvbmNhdChhbGxGaWVsZHMpLFxuICAgICAgICAnZicsXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICByZWFkb25seSBhbGxGaWVsZHMgPSBzaWduYWw8VGFibGVDb2xbXT4oW10pO1xuXG4gIHJlYWRvbmx5IGZpbHRlcmVkQWxsRmllbGRzID0gY29tcHV0ZWQ8VGFibGVDb2xbXT4oKCkgPT5cbiAgICB0aGlzLmZpbHRlckFycmF5QnlTdHJpbmdQaXBlLnRyYW5zZm9ybSh0aGlzLmFsbEZpZWxkcygpLCB0aGlzLnF1ZXJ5MSgpISwgWydmJywgJ3QnXSksXG4gICk7XG5cbiAgcmVhZG9ubHkgYWN0aXZlRmllbGRzID0gY29tcHV0ZWQ8VGFibGVDb2xbXT4oKCkgPT4gdGhpcy5hbGxGaWVsZHMoKS5maWx0ZXIoKHgpID0+IHguYWN0aXZlKSk7XG4gIC8vIGFjdGl2ZUZpZWxkcyA9IHNpZ25hbDxUYWJsZUNvbFtdPihbXSk7XG5cbiAgcmVhZG9ubHkgbm9uQWN0aXZlRmllbGRzID0gY29tcHV0ZWQ8VGFibGVDb2xbXT4oKCkgPT5cbiAgICB0aGlzLmZpbHRlckFycmF5QnlTdHJpbmdQaXBlXG4gICAgICAudHJhbnNmb3JtKFxuICAgICAgICB0aGlzLmFsbEZpZWxkcygpLmZpbHRlcigoeCkgPT4gIXguYWN0aXZlKSxcbiAgICAgICAgdGhpcy5xdWVyeTIoKSEsXG4gICAgICAgIFsnZicsICd0J10sXG4gICAgICApXG4gICAgICAuc29ydDIoJ3QnLCB0cnVlKSxcbiAgKTtcblxuICBAT3V0cHV0KCkgZmllbGRzQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIG5GaWVsZHM6IFRhYmxlQ29sW107XG4gICAgYWxsRmllbGRzOiBUYWJsZUNvbFtdO1xuICB9PigpO1xuXG4gIHB1YmxpYyBmaWx0ZXJBcnJheUJ5U3RyaW5nUGlwZSA9IGluamVjdChGaWx0ZXJBcnJheUJ5U3RyaW5nUGlwZSk7XG4gIHB1YmxpYyB1UyA9IGluamVjdChVdGlsaXR5U2VydmljZSk7XG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxUYWJsZUNvbFtdPikge1xuICAgIGlmIChldmVudC5wcmV2aW91c0NvbnRhaW5lciA9PT0gZXZlbnQuY29udGFpbmVyKSB7XG4gICAgICBtb3ZlSXRlbUluQXJyYXkoZXZlbnQuY29udGFpbmVyLmRhdGEsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRlYnVnZ2VyO1xuICAgICAgY29uc3QgaXRlbSA9IGV2ZW50LnByZXZpb3VzQ29udGFpbmVyLmRhdGFbZXZlbnQucHJldmlvdXNJbmRleF07XG4gICAgICBpdGVtLmFjdGl2ZSA9ICFpdGVtLmFjdGl2ZTtcbiAgICAgIGlmICghaXRlbS5hY3RpdmUpIGl0ZW0uc3RpY2t5ID0gZmFsc2U7XG4gICAgICB0cmFuc2ZlckFycmF5SXRlbShcbiAgICAgICAgZXZlbnQucHJldmlvdXNDb250YWluZXIuZGF0YSxcbiAgICAgICAgZXZlbnQuY29udGFpbmVyLmRhdGEsXG4gICAgICAgIGV2ZW50LnByZXZpb3VzSW5kZXgsXG4gICAgICAgIGV2ZW50LmN1cnJlbnRJbmRleCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlVG9BY3RpdmUobm9uQWN0aXZlT2JqOiBUYWJsZUNvbCkge1xuICAgIHRoaXMuYWxsRmllbGRzLnVwZGF0ZSgoYWxsRmllbGRzKSA9PlxuICAgICAgYWxsRmllbGRzLm1hcCgoeCkgPT4ge1xuICAgICAgICBpZiAobm9uQWN0aXZlT2JqLmYgPT0geC5mKSB4LmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIGVtaXRGaWVsZHNDaGFuZ2VkKCkge1xuICAgIHRoaXMuZmllbGRzQ2hhbmdlZC5lbWl0KHtcbiAgICAgIG5GaWVsZHM6IHRoaXMudVMuaXNNb2JpbGUgPyB0aGlzLmFsbEZpZWxkcygpLmZpbHRlcigoeCkgPT4geC5hY3RpdmUpIDogdGhpcy5hY3RpdmVGaWVsZHMoKSxcbiAgICAgIGFsbEZpZWxkczogdGhpcy5hbGxGaWVsZHMoKSxcbiAgICB9KTtcbiAgfVxuXG4gIGlzTnVtVHlwZShlOiBhbnksIGl0ZW06IFRhYmxlQ29sKSB7XG4gICAgZSA/IChpdGVtLnR5cGUgPSAnbnVtYmVyJykgOiBudWxsO1xuICB9XG59XG4iLCI8YXBwLWJ0blxuICB0eXBlPVwib3V0bGluZVwiXG4gIGN1c3RvbUljb249XCJmYSBmYS1iYXJzXCJcbiAgaWNvblBvc2l0aW9uPVwicmlnaHRcIlxuICB0ZXh0PVwiRGVmaW5lIE91dHB1dHNcIlxuICAobWNsaWNrKT1cImFjTW9kYWwub3BlbigpXCIgLz5cbjxtb2RhbC1jb21wXG4gIGhlYWRlcj1cIkFycmFuZ2UgQ29sdW1uc1wiXG4gIFt3aWR0aF09XCJ7IFhMYXJnZTogJzcwJScsIExhcmdlOiAnODAlJyB9IHwgcmVzcG9uc2l2ZVZhbFwiXG4gIGhlaWdodD1cIjgwdmhcIlxuICAjYWNNb2RhbD5cbiAgPGRpdiAqbW9kYWxCb2R5PlxuICAgIEBpZiAodVMuaXNNb2JpbGVTaWduYWwoKSkge1xuICAgICAgPGRpdiBjbGFzcz1cIm1iLTJcIj5cbiAgICAgICAgPGFwcC1pbnB1dC10ZC1yZiBbbm9Gb3JtYXRdPVwidHJ1ZVwiIFsobW9kZWwpXT1cInF1ZXJ5MVwiIHBsYWNlaG9sZGVyPVwiRmlsdGVyXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkLTEwXCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlXCI+XG4gICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGg+e3sgJ0NvbHVtbicgfCBhcHBUcmFuc2xhdGUgfCBhc3luYyB9fTwvdGg+XG4gICAgICAgICAgICAgIDx0aD57eyAnVmlzaWJsZScgfCBhcHBUcmFuc2xhdGUgfCBhc3luYyB9fTwvdGg+XG4gICAgICAgICAgICAgIDx0aD57eyAnU3RpY2t5JyB8IGFwcFRyYW5zbGF0ZSB8IGFzeW5jIH19PC90aD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICBAZm9yIChpdGVtIG9mIGZpbHRlcmVkQWxsRmllbGRzKCk7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgIDx0ZCBzY29wZT1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAge3sgaXRlbS50IHwgdGl0bGVjYXNlIHwgYXBwVHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFsobmdNb2RlbCldPVwiaXRlbS5hY3RpdmVcIj48L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0uYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFsobmdNb2RlbCldPVwiaXRlbS5zdGlja3lcIj48L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8IS0tIDxkaXY+cXVlcnkyIHt7IHF1ZXJ5MigpIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiXCI+XG4gICAgICAgIHNlYXJjaFJlZi52YWx1ZVNpZ25hbCAgICB7eyBzZWFyY2hSZWYudmFsdWVTaWduYWwoKSB9fVxuICAgICAgPC9kaXY+IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInJvdyByb3ctY29scy0yXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcHJpbWFyeSBmLTYwMCBtYi0yXCI+XG4gICAgICAgICAgICB7eyAnTm9uLVNlbGVjdGVkIENvbHVtbnMnIHwgYXBwVHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWlucHV0LXRkLXJmIFsobW9kZWwpXT1cInF1ZXJ5XCIgcGxhY2Vob2xkZXI9XCJGaWx0ZXJcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkLTEwIHAtMiBiZy1saWdodCBjYWdlIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXktMiBteC0wIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMFwiPlxuICAgICAgICAgICAgICAgIDxhcHAtaW5wdXQtdGQtcmZcbiAgICAgICAgICAgICAgICAgICNzZWFyY2hSZWZcbiAgICAgICAgICAgICAgICAgIFtub0Zvcm1hdF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFsobW9kZWwpXT1cInF1ZXJ5MlwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBieSBuYW1lXCIvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInJvdyByb3ctY29scy0xIGctMlwiXG4gICAgICAgICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgICAgICAgICNzb3VyY2VMaXN0PVwiY2RrRHJvcExpc3RcIlxuICAgICAgICAgICAgICBbY2RrRHJvcExpc3REYXRhXT1cIm5vbkFjdGl2ZUZpZWxkcygpXCJcbiAgICAgICAgICAgICAgY2RrRHJvcExpc3RTb3J0aW5nRGlzYWJsZWRcbiAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0Q29ubmVjdGVkVG9dPVwiW2Rlc3RpbmF0aW9uTGlzdF1cIlxuICAgICAgICAgICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3AoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIG5vbkFjdGl2ZUZpZWxkcygpOyB0cmFjayBpdGVtLmY7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiIGNka0RyYWc+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhhbXBsZS1jdXN0b20tcGxhY2Vob2xkZXJcIiAqY2RrRHJhZ1BsYWNlaG9sZGVyPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciBwLTIgcm91bmRlZC0xMCBiZy13aGl0ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHJvdy1jb2xzLWF1dG8ganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2RrRHJhZ0hhbmRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiRHJhZyB0aGUgaWNvbiB0byBtb3ZlIHRoZSBjb2x1bW4gdG8gdGhlIHNlbGVjdGVkIGNvbHVtbnMgZ3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyYWctY3Vyc29yIG1hdGVyaWFsLWljb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRyYWdfaGFuZGxlXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnQgfCB0aXRsZWNhc2UgfCBhcHBUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLWF1dG9cIiAqbmdJZj1cIiF1Uy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS50eXBlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjb2wtbWQtYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtaW5wdXQtdGQtcmYgW3hzbWFsbF09XCJ0cnVlXCIgW2xhYmVsXT1cIidJcyBOdW1iZXI/J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdGFja2VkXT1cImZhbHNlXCIgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cImlzTnVtVHlwZSgkZXZlbnQsIGl0ZW0pXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC1hdXRvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1idG4gdGV4dD1cIlNlbGVjdFwiIChtY2xpY2spPVwiY2hhbmdlVG9BY3RpdmUoaXRlbSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcHJpbWFyeSBmLTYwMCBtYi0yXCI+XG4gICAgICAgICAgICB7eyAnU2VsZWN0ZWQgQ29sdW1ucycgfCBhcHBUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcm91bmRlZC0xMCBwLTIgYmctbGlnaHQgY2FnZSBvdmVyZmxvdy1hdXRvXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwicm93IHJvdy1jb2xzLTEgZy0yXCJcbiAgICAgICAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgICAgICAgI2Rlc3RpbmF0aW9uTGlzdD1cImNka0Ryb3BMaXN0XCJcbiAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJhY3RpdmVGaWVsZHMoKVwiXG4gICAgICAgICAgICAgIFtjZGtEcm9wTGlzdENvbm5lY3RlZFRvXT1cIltzb3VyY2VMaXN0XVwiXG4gICAgICAgICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgYWN0aXZlRmllbGRzKCk7IHRyYWNrIGl0ZW0uZjsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgY2RrRHJhZz5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGFtcGxlLWN1c3RvbS1wbGFjZWhvbGRlclwiICpjZGtEcmFnUGxhY2Vob2xkZXI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIHAtMiByb3VuZGVkLTEwIGJnLXdoaXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcm93LWNvbHMtYXV0byBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjZGtEcmFnSGFuZGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJEcmFnIHRoZSBpY29uIHRvIG1vdmUgdGhlIGNvbHVtbiB0byB0aGUgbm9uLXNlbGVjdGVkIGNvbHVtbnMgZ3JvdXAgb3IgcmUtb3JkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyYWctY3Vyc29yIG1hdGVyaWFsLWljb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRyYWdfaGFuZGxlXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnQgfCB0aXRsZWNhc2UgfCBhcHBUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSAqbmdJZj1cIml0ZW0uYWN0aXZlXCIgWyhuZ01vZGVsKV09XCJpdGVtLnN0aWNreVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnU3RpY2t5JyB8IGFwcFRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJ3LTEwMCBwdC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCIgKm1vZGFsRm9vdGVyPlxuICAgIDxhcHAtYnRuIHRleHQ9XCJVcGRhdGUgQ29sdW1uc1wiIChtY2xpY2spPVwiZW1pdEZpZWxkc0NoYW5nZWQoKTsgYWNNb2RhbC5jbG9zZSgpXCIgLz5cbiAgPC9kaXY+XG48L21vZGFsLWNvbXA+XG4iXX0=
@@ -78,7 +78,7 @@ export class FileUploadComponent {
78
78
  inp.click();
79
79
  }
80
80
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: FileUploadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
81
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.2", type: FileUploadComponent, isStandalone: true, selector: "app-file-upload", inputs: { help: { classPropertyName: "help", publicName: "help", isSignal: false, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: false, isRequired: false, transformFunction: null }, mediaWidth: { classPropertyName: "mediaWidth", publicName: "mediaWidth", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, useWebcam: { classPropertyName: "useWebcam", publicName: "useWebcam", isSignal: true, isRequired: false, transformFunction: null }, fileName: { classPropertyName: "fileName", publicName: "fileName", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: false, isRequired: false, transformFunction: null }, mini: { classPropertyName: "mini", publicName: "mini", isSignal: true, isRequired: false, transformFunction: null }, useDocumentModal: { classPropertyName: "useDocumentModal", publicName: "useDocumentModal", isSignal: false, isRequired: false, transformFunction: null }, listFiles: { classPropertyName: "listFiles", publicName: "listFiles", isSignal: true, isRequired: false, transformFunction: null }, _accept: { classPropertyName: "_accept", publicName: "accept", isSignal: false, isRequired: false, transformFunction: null }, file: { classPropertyName: "file", publicName: "file", isSignal: true, isRequired: false, transformFunction: null }, files: { classPropertyName: "files", publicName: "files", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { mediaWidth: "mediaWidthChange", file: "fileChange", fileChange: "fileChange", files: "filesChange", filesChange: "filesChange" }, ngImport: i0, template: "@if (listFiles()) {\n <div [ngClass]=\"{ meta: mini() }\" class=\"{{ class() }} form-label mb-2 hide-scroll\">\n @for (item of files(); track item) {\n <div class=\"row align-items-start mb-1\">\n <div class=\"col\">\n <div class=\"hide-scroll file-name\">\n {{ item?.name }}\n </div>\n </div>\n <div class=\"col-auto text-end\">\n <span class=\"text-danger pointer p-1 fa fa-close\" (click)=\"removeFile($index)\"></span>\n </div>\n </div>\n }\n </div>\n}\n<!-- <input type=\"file\" style=\"display: none;\" accept=\"{{accept}}\" (change)=\"onUpload($event)\" #uploadInput [multiple]=\"multiple\"> -->\n<app-btn\n icon=\"upload\"\n (mclick)=\"useWebcam() ? null : openDialog()\"\n [type]=\"file() ? 'primary' : 'secondary'\"\n [disabled]=\"disabled\"\n [help]=\"help\"\n [text]=\"label\"\n [matMenuTriggerFor]=\"useWebcam() ? menu : null\" />\n\n<mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"openDialog()\">Upload</button>\n <button mat-menu-item (click)=\"webcamModal.open()\">Use Camera</button>\n</mat-menu>\n\n<modal-comp #webcamModal width=\"1080px\" [showFooter]=\"false\" header=\"Webcam\">\n <ng-template modalBody>\n <lib-webcam-media [fileName]=\"fileName()\" [width]=\"mediaWidth()\" (closed)=\"webcamModal.close(); $event ? acceptFiles($event?.latestFile) : null\" />\n </ng-template>\n</modal-comp>\n", styles: [".meta,.file-name{height:23px}.meta{overflow-y:auto}.file-name{overflow:auto}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "loading", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "form", "forms", "help", "iconBtn", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid", "disabled"], outputs: ["loadingChange", "leftCustomIconChange", "mclick", "disabledChange"] }, { kind: "component", type: i1.ModalComponent, selector: "modal-comp", inputs: ["header", "bodyTemplateRef", "footerTemplateRef", "showHeader", "loading", "isFullscreen", "showFooter", "width", "minWidth", "height", "maxHeight", "icon", "data", "disableClose", "hasBackdrop"], outputs: ["showHeaderChange", "loadingChange", "showFooterChange", "modalOpen", "modalClose"] }, { kind: "directive", type: i2.ModalBodyDirective, selector: "[modalBody]" }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i3.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i3.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i3.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: WebcamMediaComponent, selector: "lib-webcam-media", inputs: ["controlTemplate", "isVideo", "useAudio", "fileName", "fileNameFactory", "fileType", "extraClass", "recordingNotificationInterval", "imageSnapshotInterval", "isBackground", "width"], outputs: ["closed", "recorderStopped", "recorderErrored", "recorderStarted", "recordingState", "recordingChanged", "newImageSnapshot", "webcamError", "widthChange"] }], changeDetection: i0.ChangeDetectionStrategy.Default }); }
81
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.2", type: FileUploadComponent, isStandalone: true, selector: "app-file-upload", inputs: { help: { classPropertyName: "help", publicName: "help", isSignal: false, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: false, isRequired: false, transformFunction: null }, mediaWidth: { classPropertyName: "mediaWidth", publicName: "mediaWidth", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, useWebcam: { classPropertyName: "useWebcam", publicName: "useWebcam", isSignal: true, isRequired: false, transformFunction: null }, fileName: { classPropertyName: "fileName", publicName: "fileName", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: false, isRequired: false, transformFunction: null }, mini: { classPropertyName: "mini", publicName: "mini", isSignal: true, isRequired: false, transformFunction: null }, useDocumentModal: { classPropertyName: "useDocumentModal", publicName: "useDocumentModal", isSignal: false, isRequired: false, transformFunction: null }, listFiles: { classPropertyName: "listFiles", publicName: "listFiles", isSignal: true, isRequired: false, transformFunction: null }, _accept: { classPropertyName: "_accept", publicName: "accept", isSignal: false, isRequired: false, transformFunction: null }, file: { classPropertyName: "file", publicName: "file", isSignal: true, isRequired: false, transformFunction: null }, files: { classPropertyName: "files", publicName: "files", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { mediaWidth: "mediaWidthChange", file: "fileChange", fileChange: "fileChange", files: "filesChange", filesChange: "filesChange" }, ngImport: i0, template: "@if (listFiles()) {\n <div [ngClass]=\"{ meta: mini() }\" class=\"{{ class() }} form-label mb-2 hide-scroll\">\n @for (item of files(); track item) {\n <div class=\"row align-items-start mb-1\">\n <div class=\"col\">\n <div class=\"hide-scroll file-name\">\n {{ item?.name }}\n </div>\n </div>\n <div class=\"col-auto text-end\">\n <span class=\"text-danger pointer p-1 fa fa-close\" (click)=\"removeFile($index)\"></span>\n </div>\n </div>\n }\n </div>\n}\n<!-- <input type=\"file\" style=\"display: none;\" accept=\"{{accept}}\" (change)=\"onUpload($event)\" #uploadInput [multiple]=\"multiple\"> -->\n<app-btn\n icon=\"upload\"\n (mclick)=\"useWebcam() ? null : openDialog()\"\n [type]=\"file() ? 'primary' : 'secondary'\"\n [disabled]=\"disabled\"\n [help]=\"help\"\n [text]=\"label\"\n [matMenuTriggerFor]=\"useWebcam() ? menu : null\" />\n\n<mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"openDialog()\">Upload</button>\n <button mat-menu-item (click)=\"webcamModal.open()\">Use Camera</button>\n</mat-menu>\n\n<modal-comp #webcamModal width=\"1080px\" [showFooter]=\"false\" header=\"Webcam\">\n <ng-template modalBody>\n <lib-webcam-media [fileName]=\"fileName()\" [width]=\"mediaWidth()\" (closed)=\"webcamModal.close(); $event ? acceptFiles($event?.latestFile) : null\" />\n </ng-template>\n</modal-comp>\n", styles: [".meta,.file-name{height:23px}.meta{overflow-y:auto}.file-name{overflow:auto}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "loading", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "form", "forms", "help", "iconBtn", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid", "disabled"], outputs: ["loadingChange", "leftCustomIconChange", "mclick", "disabledChange"] }, { kind: "component", type: i1.ModalComponent, selector: "modal-comp", inputs: ["header", "bodyTemplateRef", "footerTemplateRef", "showHeader", "loading", "isFullscreen", "showFooter", "width", "minWidth", "height", "maxHeight", "icon", "data", "disableClose", "hasBackdrop"], outputs: ["headerChange", "showHeaderChange", "loadingChange", "showFooterChange", "modalOpen", "modalClose"] }, { kind: "directive", type: i2.ModalBodyDirective, selector: "[modalBody]" }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i3.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i3.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i3.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: WebcamMediaComponent, selector: "lib-webcam-media", inputs: ["controlTemplate", "isVideo", "useAudio", "fileName", "fileNameFactory", "fileType", "extraClass", "recordingNotificationInterval", "imageSnapshotInterval", "isBackground", "width"], outputs: ["closed", "recorderStopped", "recorderErrored", "recorderStarted", "recordingState", "recordingChanged", "newImageSnapshot", "webcamError", "widthChange"] }], changeDetection: i0.ChangeDetectionStrategy.Default }); }
82
82
  }
83
83
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: FileUploadComponent, decorators: [{
84
84
  type: Component,
@@ -105,4 +105,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImpor
105
105
  type: Input,
106
106
  args: ['accept']
107
107
  }] } });
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NoYXJlZC9jb21wb25lbnRzL2ZpbGUtdXBsb2FkL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy9maWxlLXVwbG9hZC9maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxLQUFLLEVBR0wsTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxlQUFlLE1BQU0sc0NBQXNDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7OztBQWtCOUUsTUFBTSxPQUFPLG1CQUFtQjtJQWdCOUIsSUFBcUIsT0FBTyxDQUFDLENBQVM7UUFDcEMsUUFBUSxDQUFDLEVBQUU7WUFDVCxLQUFLLE9BQU87Z0JBQ1YsSUFBSSxDQUFDLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQztnQkFDckMsTUFBTTtZQUVSO2dCQUNFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUNoQixNQUFNO1NBQ1Q7SUFDSCxDQUFDO0lBU0Q7UUFoQ0EsZUFBVSxHQUFHLEtBQUssQ0FBUyxJQUFJLENBQUMsQ0FBQztRQUNqQyxVQUFLLEdBQUcsS0FBSyxFQUFVLENBQUM7UUFDeEIsY0FBUyxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNsQzs7V0FFRztRQUNILGFBQVEsR0FBRyxLQUFLLEVBQVUsQ0FBQztRQUczQixTQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRW5CLGNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFheEIsMEVBQTBFO1FBQ2pFLFNBQUksR0FBRyxLQUFLLEVBQVEsQ0FBQztRQUNyQixlQUFVLEdBQUcsTUFBTSxFQUFRLENBQUM7UUFDNUIsVUFBSyxHQUFHLEtBQUssRUFBVSxDQUFDO1FBQ3hCLGdCQUFXLEdBQUcsTUFBTSxFQUFVLENBQUM7UUFFakMsT0FBRSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUVwQixDQUFDO0lBRWhCLFFBQVEsS0FBVSxDQUFDO0lBRW5CLElBQUksUUFBUTtRQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3hCLENBQUM7SUFDUyxXQUFXLENBQUMsR0FBRyxLQUFhO1FBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUNTLFNBQVM7UUFDakIsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDOztZQUNsRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQVU7UUFDakIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWE7UUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUMxQixLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN2QixPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXZELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDRCxVQUFVO1FBQ1IsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QyxHQUFHLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztRQUNsQixHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDekIsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzdCLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNmLENBQUMsQ0FBQztRQUNGLGtDQUFrQztRQUNsQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZCxDQUFDOzhHQTlFVSxtQkFBbUI7a0dBQW5CLG1CQUFtQix5OURDbkNoQyx3NUNBb0NBLHdJRFRJLE9BQU8sb0ZBRVAsWUFBWSx5N0JBRVosYUFBYSw4dkJBQ2Isb0JBQW9COzsyRkFHWCxtQkFBbUI7a0JBaEIvQixTQUFTOytCQUNFLGlCQUFpQixjQUdmLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsT0FBTyxXQUN2Qzt3QkFDUCxJQUFJO3dCQUNKLE9BQU87d0JBQ1AsS0FBSzt3QkFDTCxZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixvQkFBb0I7cUJBQ3JCO3dEQUdRLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBUUcsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHZSxPQUFPO3NCQUEzQixLQUFLO3VCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgbW9kZWwsXG4gIG91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ0lmLCBOZ0NsYXNzLCBOZ0ZvciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBCdG5Db21wb25lbnQgfSBmcm9tICcuLi9idG4vYnRuLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVdGlsaXR5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL1NlcnZpY2VzL3V0aWxpdHkuc2VydmljZSc7XG5pbXBvcnQgTW9kYWxDb21wb25lbnRzIGZyb20gJy4uL21vZGFsLWNvbXBvbmVudHMvbW9kYWwuY29tcG9uZW50cyc7XG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQgeyBXZWJjYW1NZWRpYUNvbXBvbmVudCB9IGZyb20gJy4uL3dlYmNhbS1tZWRpYS93ZWJjYW0tbWVkaWEuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWZpbGUtdXBsb2FkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmlsZS11cGxvYWQuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5EZWZhdWx0LFxuICBpbXBvcnRzOiBbXG4gICAgTmdJZixcbiAgICBOZ0NsYXNzLFxuICAgIE5nRm9yLFxuICAgIEJ0bkNvbXBvbmVudCxcbiAgICBNb2RhbENvbXBvbmVudHMsXG4gICAgTWF0TWVudU1vZHVsZSxcbiAgICBXZWJjYW1NZWRpYUNvbXBvbmVudCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRmlsZVVwbG9hZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGhlbHA6IHN0cmluZztcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZztcbiAgbWVkaWFXaWR0aCA9IG1vZGVsPG51bWJlcj4oMTA4MCk7XG4gIGNsYXNzID0gaW5wdXQ8c3RyaW5nPigpO1xuICB1c2VXZWJjYW0gPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIC8qKlxuICAgKiBPbmx5IHVzZWZ1bCBpZiB1c2luZyB0aGUgd2ViY2FtIG9wdGlvblxuICAgKi9cbiAgZmlsZU5hbWUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuO1xuICBASW5wdXQoKSBtdWx0aXBsZTogYm9vbGVhbjtcbiAgbWluaSA9IGlucHV0KHRydWUpO1xuICBASW5wdXQoKSB1c2VEb2N1bWVudE1vZGFsOiBib29sZWFuO1xuICBsaXN0RmlsZXMgPSBpbnB1dCh0cnVlKTtcbiAgYWNjZXB0OiBzdHJpbmc7XG4gIEBJbnB1dCgnYWNjZXB0Jykgc2V0IF9hY2NlcHQodjogc3RyaW5nKSB7XG4gICAgc3dpdGNoICh2KSB7XG4gICAgICBjYXNlICdpbWFnZSc6XG4gICAgICAgIHRoaXMuYWNjZXB0ID0gJy5wbmcsLmpwZywuanBlZywuYm1wJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuYWNjZXB0ID0gdjtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIC8vIEBWaWV3Q2hpbGQoJ3VwbG9hZElucHV0JykgdXBsb2FkSW5wdXRSZWY6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gIHJlYWRvbmx5IGZpbGUgPSBtb2RlbDxGaWxlPigpO1xuICByZWFkb25seSBmaWxlQ2hhbmdlID0gb3V0cHV0PEZpbGU+KCk7XG4gIHJlYWRvbmx5IGZpbGVzID0gbW9kZWw8RmlsZVtdPigpO1xuICByZWFkb25seSBmaWxlc0NoYW5nZSA9IG91dHB1dDxGaWxlW10+KCk7XG5cbiAgcHVibGljIHVTID0gaW5qZWN0KFV0aWxpdHlTZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7fVxuXG4gIGdldCBpc1NpbmdsZSgpIHtcbiAgICByZXR1cm4gIXRoaXMubXVsdGlwbGU7XG4gIH1cbiAgcHJvdGVjdGVkIGFjY2VwdEZpbGVzKC4uLmZpbGVzOiBGaWxlW10pIHtcbiAgICB0aGlzLmZpbGVzLnNldChmaWxlcyk7XG4gICAgdGhpcy5maWxlLnNldChmaWxlcyA/IGZpbGVzWzBdIDogbnVsbCk7XG4gICAgdGhpcy5lbWl0RmlsZXMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZW1pdEZpbGVzKCkge1xuICAgIGlmICh0aGlzLm11bHRpcGxlKSB0aGlzLmZpbGVzQ2hhbmdlLmVtaXQodGhpcy5maWxlcygpKTtcbiAgICBlbHNlIHRoaXMuZmlsZUNoYW5nZS5lbWl0KHRoaXMuZmlsZSgpKTtcbiAgfVxuXG4gIG9uVXBsb2FkKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBmaWxlcyA9IEFycmF5LmZyb208RmlsZT4oZXZlbnQudGFyZ2V0LmZpbGVzKTtcbiAgICB0aGlzLmFjY2VwdEZpbGVzKC4uLmZpbGVzKTtcbiAgfVxuXG4gIHJlbW92ZUZpbGUoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuZmlsZXMudXBkYXRlKChmaWxlcykgPT4ge1xuICAgICAgZmlsZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHJldHVybiBbLi4uZmlsZXNdO1xuICAgIH0pO1xuICAgIHRoaXMuZmlsZS5zZXQodGhpcy5maWxlcygpID8gdGhpcy5maWxlcygpPy5bMF0gOiBudWxsKTtcblxuICAgIHRoaXMuZmlsZUNoYW5nZS5lbWl0KHRoaXMuZmlsZSgpKTtcbiAgICB0aGlzLmZpbGVzQ2hhbmdlLmVtaXQodGhpcy5maWxlcygpKTtcbiAgfVxuICBvcGVuRGlhbG9nKCkge1xuICAgIGNvbnN0IGlucCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgaW5wLnR5cGUgPSAnZmlsZSc7XG4gICAgaW5wLmFjY2VwdCA9IHRoaXMuYWNjZXB0O1xuICAgIGlucC5tdWx0aXBsZSA9IHRoaXMubXVsdGlwbGU7XG4gICAgaW5wLm9uY2hhbmdlID0gKGUpID0+IHtcbiAgICAgIHRoaXMub25VcGxvYWQoZSk7XG4gICAgICBpbnAucmVtb3ZlKCk7XG4gICAgfTtcbiAgICAvLyBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlucCk7XG4gICAgaW5wLmNsaWNrKCk7XG4gIH1cbn1cbiIsIkBpZiAobGlzdEZpbGVzKCkpIHtcbiAgPGRpdiBbbmdDbGFzc109XCJ7IG1ldGE6IG1pbmkoKSB9XCIgY2xhc3M9XCJ7eyBjbGFzcygpIH19IGZvcm0tbGFiZWwgbWItMiBoaWRlLXNjcm9sbFwiPlxuICAgIEBmb3IgKGl0ZW0gb2YgZmlsZXMoKTsgdHJhY2sgaXRlbSkge1xuICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1zdGFydCBtYi0xXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGlkZS1zY3JvbGwgZmlsZS1uYW1lXCI+XG4gICAgICAgICAgICB7eyBpdGVtPy5uYW1lIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gdGV4dC1lbmRcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyIHBvaW50ZXIgcC0xIGZhIGZhLWNsb3NlXCIgKGNsaWNrKT1cInJlbW92ZUZpbGUoJGluZGV4KVwiPjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxufVxuPCEtLSA8aW5wdXQgdHlwZT1cImZpbGVcIiAgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIGFjY2VwdD1cInt7YWNjZXB0fX1cIiAoY2hhbmdlKT1cIm9uVXBsb2FkKCRldmVudClcIiAjdXBsb2FkSW5wdXQgW211bHRpcGxlXT1cIm11bHRpcGxlXCI+IC0tPlxuPGFwcC1idG5cbiAgaWNvbj1cInVwbG9hZFwiXG4gIChtY2xpY2spPVwidXNlV2ViY2FtKCkgPyBudWxsIDogb3BlbkRpYWxvZygpXCJcbiAgW3R5cGVdPVwiZmlsZSgpID8gJ3ByaW1hcnknIDogJ3NlY29uZGFyeSdcIlxuICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICBbaGVscF09XCJoZWxwXCJcbiAgW3RleHRdPVwibGFiZWxcIlxuICBbbWF0TWVudVRyaWdnZXJGb3JdPVwidXNlV2ViY2FtKCkgPyBtZW51IDogbnVsbFwiIC8+XG5cbjxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJvcGVuRGlhbG9nKClcIj5VcGxvYWQ8L2J1dHRvbj5cbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJ3ZWJjYW1Nb2RhbC5vcGVuKClcIj5Vc2UgQ2FtZXJhPC9idXR0b24+XG48L21hdC1tZW51PlxuXG48bW9kYWwtY29tcCAjd2ViY2FtTW9kYWwgd2lkdGg9XCIxMDgwcHhcIiBbc2hvd0Zvb3Rlcl09XCJmYWxzZVwiIGhlYWRlcj1cIldlYmNhbVwiPlxuICA8bmctdGVtcGxhdGUgbW9kYWxCb2R5PlxuICAgIDxsaWItd2ViY2FtLW1lZGlhIFtmaWxlTmFtZV09XCJmaWxlTmFtZSgpXCIgW3dpZHRoXT1cIm1lZGlhV2lkdGgoKVwiIChjbG9zZWQpPVwid2ViY2FtTW9kYWwuY2xvc2UoKTsgJGV2ZW50ID8gYWNjZXB0RmlsZXMoJGV2ZW50Py5sYXRlc3RGaWxlKSA6IG51bGxcIiAvPlxuICA8L25nLXRlbXBsYXRlPlxuPC9tb2RhbC1jb21wPlxuIl19
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NoYXJlZC9jb21wb25lbnRzL2ZpbGUtdXBsb2FkL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy9maWxlLXVwbG9hZC9maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxLQUFLLEVBR0wsTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxlQUFlLE1BQU0sc0NBQXNDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7OztBQWtCOUUsTUFBTSxPQUFPLG1CQUFtQjtJQWdCOUIsSUFBcUIsT0FBTyxDQUFDLENBQVM7UUFDcEMsUUFBUSxDQUFDLEVBQUU7WUFDVCxLQUFLLE9BQU87Z0JBQ1YsSUFBSSxDQUFDLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQztnQkFDckMsTUFBTTtZQUVSO2dCQUNFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUNoQixNQUFNO1NBQ1Q7SUFDSCxDQUFD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QUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNmLENBQUMsQ0FBQztRQUNGLGtDQUFrQztRQUNsQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZCxDQUFDOzhHQTlFVSxtQkFBbUI7a0dBQW5CLG1CQUFtQix5OURDbkNoQyx3NUNBb0NBLHdJRFRJLE9BQU8sb0ZBRVAsWUFBWSx5OEJBRVosYUFBYSw4dkJBQ2Isb0JBQW9COzsyRkFHWCxtQkFBbUI7a0JBaEIvQixTQUFTOytCQUNFLGlCQUFpQixjQUdmLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsT0FBTyxXQUN2Qzt3QkFDUCxJQUFJO3dCQUNKLE9BQU87d0JBQ1AsS0FBSzt3QkFDTCxZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixvQkFBb0I7cUJBQ3JCO3dEQUdRLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBUUcsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHZSxPQUFPO3NCQUEzQixLQUFLO3VCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgbW9kZWwsXG4gIG91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ0lmLCBOZ0NsYXNzLCBOZ0ZvciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBCdG5Db21wb25lbnQgfSBmcm9tICcuLi9idG4vYnRuLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVdGlsaXR5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL1NlcnZpY2VzL3V0aWxpdHkuc2VydmljZSc7XG5pbXBvcnQgTW9kYWxDb21wb25lbnRzIGZyb20gJy4uL21vZGFsLWNvbXBvbmVudHMvbW9kYWwuY29tcG9uZW50cyc7XG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQgeyBXZWJjYW1NZWRpYUNvbXBvbmVudCB9IGZyb20gJy4uL3dlYmNhbS1tZWRpYS93ZWJjYW0tbWVkaWEuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWZpbGUtdXBsb2FkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmlsZS11cGxvYWQuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5EZWZhdWx0LFxuICBpbXBvcnRzOiBbXG4gICAgTmdJZixcbiAgICBOZ0NsYXNzLFxuICAgIE5nRm9yLFxuICAgIEJ0bkNvbXBvbmVudCxcbiAgICBNb2RhbENvbXBvbmVudHMsXG4gICAgTWF0TWVudU1vZHVsZSxcbiAgICBXZWJjYW1NZWRpYUNvbXBvbmVudCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRmlsZVVwbG9hZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGhlbHA6IHN0cmluZztcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZztcbiAgbWVkaWFXaWR0aCA9IG1vZGVsPG51bWJlcj4oMTA4MCk7XG4gIGNsYXNzID0gaW5wdXQ8c3RyaW5nPigpO1xuICB1c2VXZWJjYW0gPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIC8qKlxuICAgKiBPbmx5IHVzZWZ1bCBpZiB1c2luZyB0aGUgd2ViY2FtIG9wdGlvblxuICAgKi9cbiAgZmlsZU5hbWUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuO1xuICBASW5wdXQoKSBtdWx0aXBsZTogYm9vbGVhbjtcbiAgbWluaSA9IGlucHV0KHRydWUpO1xuICBASW5wdXQoKSB1c2VEb2N1bWVudE1vZGFsOiBib29sZWFuO1xuICBsaXN0RmlsZXMgPSBpbnB1dCh0cnVlKTtcbiAgYWNjZXB0OiBzdHJpbmc7XG4gIEBJbnB1dCgnYWNjZXB0Jykgc2V0IF9hY2NlcHQodjogc3RyaW5nKSB7XG4gICAgc3dpdGNoICh2KSB7XG4gICAgICBjYXNlICdpbWFnZSc6XG4gICAgICAgIHRoaXMuYWNjZXB0ID0gJy5wbmcsLmpwZywuanBlZywuYm1wJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuYWNjZXB0ID0gdjtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIC8vIEBWaWV3Q2hpbGQoJ3VwbG9hZElucHV0JykgdXBsb2FkSW5wdXRSZWY6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gIHJlYWRvbmx5IGZpbGUgPSBtb2RlbDxGaWxlPigpO1xuICByZWFkb25seSBmaWxlQ2hhbmdlID0gb3V0cHV0PEZpbGU+KCk7XG4gIHJlYWRvbmx5IGZpbGVzID0gbW9kZWw8RmlsZVtdPigpO1xuICByZWFkb25seSBmaWxlc0NoYW5nZSA9IG91dHB1dDxGaWxlW10+KCk7XG5cbiAgcHVibGljIHVTID0gaW5qZWN0KFV0aWxpdHlTZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7fVxuXG4gIGdldCBpc1NpbmdsZSgpIHtcbiAgICByZXR1cm4gIXRoaXMubXVsdGlwbGU7XG4gIH1cbiAgcHJvdGVjdGVkIGFjY2VwdEZpbGVzKC4uLmZpbGVzOiBGaWxlW10pIHtcbiAgICB0aGlzLmZpbGVzLnNldChmaWxlcyk7XG4gICAgdGhpcy5maWxlLnNldChmaWxlcyA/IGZpbGVzWzBdIDogbnVsbCk7XG4gICAgdGhpcy5lbWl0RmlsZXMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZW1pdEZpbGVzKCkge1xuICAgIGlmICh0aGlzLm11bHRpcGxlKSB0aGlzLmZpbGVzQ2hhbmdlLmVtaXQodGhpcy5maWxlcygpKTtcbiAgICBlbHNlIHRoaXMuZmlsZUNoYW5nZS5lbWl0KHRoaXMuZmlsZSgpKTtcbiAgfVxuXG4gIG9uVXBsb2FkKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBmaWxlcyA9IEFycmF5LmZyb208RmlsZT4oZXZlbnQudGFyZ2V0LmZpbGVzKTtcbiAgICB0aGlzLmFjY2VwdEZpbGVzKC4uLmZpbGVzKTtcbiAgfVxuXG4gIHJlbW92ZUZpbGUoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuZmlsZXMudXBkYXRlKChmaWxlcykgPT4ge1xuICAgICAgZmlsZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHJldHVybiBbLi4uZmlsZXNdO1xuICAgIH0pO1xuICAgIHRoaXMuZmlsZS5zZXQodGhpcy5maWxlcygpID8gdGhpcy5maWxlcygpPy5bMF0gOiBudWxsKTtcblxuICAgIHRoaXMuZmlsZUNoYW5nZS5lbWl0KHRoaXMuZmlsZSgpKTtcbiAgICB0aGlzLmZpbGVzQ2hhbmdlLmVtaXQodGhpcy5maWxlcygpKTtcbiAgfVxuICBvcGVuRGlhbG9nKCkge1xuICAgIGNvbnN0IGlucCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgaW5wLnR5cGUgPSAnZmlsZSc7XG4gICAgaW5wLmFjY2VwdCA9IHRoaXMuYWNjZXB0O1xuICAgIGlucC5tdWx0aXBsZSA9IHRoaXMubXVsdGlwbGU7XG4gICAgaW5wLm9uY2hhbmdlID0gKGUpID0+IHtcbiAgICAgIHRoaXMub25VcGxvYWQoZSk7XG4gICAgICBpbnAucmVtb3ZlKCk7XG4gICAgfTtcbiAgICAvLyBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlucCk7XG4gICAgaW5wLmNsaWNrKCk7XG4gIH1cbn1cbiIsIkBpZiAobGlzdEZpbGVzKCkpIHtcbiAgPGRpdiBbbmdDbGFzc109XCJ7IG1ldGE6IG1pbmkoKSB9XCIgY2xhc3M9XCJ7eyBjbGFzcygpIH19IGZvcm0tbGFiZWwgbWItMiBoaWRlLXNjcm9sbFwiPlxuICAgIEBmb3IgKGl0ZW0gb2YgZmlsZXMoKTsgdHJhY2sgaXRlbSkge1xuICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1zdGFydCBtYi0xXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGlkZS1zY3JvbGwgZmlsZS1uYW1lXCI+XG4gICAgICAgICAgICB7eyBpdGVtPy5uYW1lIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gdGV4dC1lbmRcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyIHBvaW50ZXIgcC0xIGZhIGZhLWNsb3NlXCIgKGNsaWNrKT1cInJlbW92ZUZpbGUoJGluZGV4KVwiPjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxufVxuPCEtLSA8aW5wdXQgdHlwZT1cImZpbGVcIiAgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIGFjY2VwdD1cInt7YWNjZXB0fX1cIiAoY2hhbmdlKT1cIm9uVXBsb2FkKCRldmVudClcIiAjdXBsb2FkSW5wdXQgW211bHRpcGxlXT1cIm11bHRpcGxlXCI+IC0tPlxuPGFwcC1idG5cbiAgaWNvbj1cInVwbG9hZFwiXG4gIChtY2xpY2spPVwidXNlV2ViY2FtKCkgPyBudWxsIDogb3BlbkRpYWxvZygpXCJcbiAgW3R5cGVdPVwiZmlsZSgpID8gJ3ByaW1hcnknIDogJ3NlY29uZGFyeSdcIlxuICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICBbaGVscF09XCJoZWxwXCJcbiAgW3RleHRdPVwibGFiZWxcIlxuICBbbWF0TWVudVRyaWdnZXJGb3JdPVwidXNlV2ViY2FtKCkgPyBtZW51IDogbnVsbFwiIC8+XG5cbjxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJvcGVuRGlhbG9nKClcIj5VcGxvYWQ8L2J1dHRvbj5cbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJ3ZWJjYW1Nb2RhbC5vcGVuKClcIj5Vc2UgQ2FtZXJhPC9idXR0b24+XG48L21hdC1tZW51PlxuXG48bW9kYWwtY29tcCAjd2ViY2FtTW9kYWwgd2lkdGg9XCIxMDgwcHhcIiBbc2hvd0Zvb3Rlcl09XCJmYWxzZVwiIGhlYWRlcj1cIldlYmNhbVwiPlxuICA8bmctdGVtcGxhdGUgbW9kYWxCb2R5PlxuICAgIDxsaWItd2ViY2FtLW1lZGlhIFtmaWxlTmFtZV09XCJmaWxlTmFtZSgpXCIgW3dpZHRoXT1cIm1lZGlhV2lkdGgoKVwiIChjbG9zZWQpPVwid2ViY2FtTW9kYWwuY2xvc2UoKTsgJGV2ZW50ID8gYWNjZXB0RmlsZXMoJGV2ZW50Py5sYXRlc3RGaWxlKSA6IG51bGxcIiAvPlxuICA8L25nLXRlbXBsYXRlPlxuPC9tb2RhbC1jb21wPlxuIl19
@@ -207,7 +207,7 @@ export class FormGeneratorComponent extends BaseFormGenerator {
207
207
  this.onSubmit.emit(this.formValue());
208
208
  }
209
209
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: FormGeneratorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
210
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.2", type: FormGeneratorComponent, isStandalone: true, selector: "form-generator", inputs: { keyField: { classPropertyName: "keyField", publicName: "keyField", isSignal: false, isRequired: false, transformFunction: null }, presetValueForSingleOption: { classPropertyName: "presetValueForSingleOption", publicName: "presetValueForSingleOption", isSignal: true, isRequired: false, transformFunction: null }, isCreate: { classPropertyName: "isCreate", publicName: "isCreate", isSignal: true, isRequired: false, transformFunction: null }, submitOnEnterKey: { classPropertyName: "submitOnEnterKey", publicName: "submitOnEnterKey", isSignal: true, isRequired: false, transformFunction: null }, submitFunc: { classPropertyName: "submitFunc", publicName: "submitFunc", isSignal: false, isRequired: false, transformFunction: null }, submitBtnText: { classPropertyName: "submitBtnText", publicName: "submitBtnText", isSignal: true, isRequired: false, transformFunction: null }, submitBtnTemplate: { classPropertyName: "submitBtnTemplate", publicName: "submitBtnTemplate", isSignal: true, isRequired: false, transformFunction: null }, submitSuccessText: { classPropertyName: "submitSuccessText", publicName: "submitSuccessText", isSignal: true, isRequired: false, transformFunction: null }, showSubmitBtn: { classPropertyName: "showSubmitBtn", publicName: "showSubmitBtn", isSignal: true, isRequired: false, transformFunction: null }, gridStyle: { classPropertyName: "gridStyle", publicName: "gridStyle", isSignal: true, isRequired: false, transformFunction: null }, gridMDStyle: { classPropertyName: "gridMDStyle", publicName: "gridMDStyle", isSignal: true, isRequired: false, transformFunction: null }, gridLGStyle: { classPropertyName: "gridLGStyle", publicName: "gridLGStyle", isSignal: true, isRequired: false, transformFunction: null }, gridXXLStyle: { classPropertyName: "gridXXLStyle", publicName: "gridXXLStyle", isSignal: true, isRequired: false, transformFunction: null }, formGridClass: { classPropertyName: "formGridClass", publicName: "formGridClass", isSignal: true, isRequired: false, transformFunction: null }, useLoader: { classPropertyName: "useLoader", publicName: "useLoader", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: false, transformFunction: null }, _formSchema: { classPropertyName: "_formSchema", publicName: "formSchema", isSignal: false, isRequired: false, transformFunction: null }, _formSchemaNoForm: { classPropertyName: "_formSchemaNoForm", publicName: "formSchemaNoForm", isSignal: false, isRequired: false, transformFunction: null }, _isShow: { classPropertyName: "_isShow", publicName: "isShow", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { onSubmit: "onSubmit", mchange: "mchange", saved: "saved", form: "formChange" }, viewQueries: [{ propertyName: "formTagRef", first: true, predicate: ["formTag"], descendants: true, isSignal: true }, { propertyName: "submitBtnRef", first: true, predicate: ["submitBtn"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<!-- {{formValue()|json}}\n{{formValid()|json}} -->\n<loader [loading]=\"computedLoading()\">\n <form [formGroup]=\"form()\" #formTag>\n <div\n class=\"row row-cols-{{ gridStyle() }} row-cols-md-{{ gridMDStyle() }} row-cols-lg-{{\n gridLGStyle()\n }} row-cols-xxl-{{ gridXXLStyle() }} align-items-center {{ formGridClass() }}\">\n @for (scheme of computedFormSchema(); track scheme.id) {\n <div class=\"col {{ scheme.cls }} \">\n @switch (true) {\n @case (scheme.type == 'tel') {\n <app-phone-number\n [form]=\"scheme.form || form()\"\n [label]=\"scheme.label\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [stacked]=\"scheme.stacked\"\n [name]=\"scheme.field\"\n [noFormat]=\"scheme.noFormat\"\n [verbose]=\"scheme.verbose\"\n [debug]=\"scheme.debug\"\n (mchange)=\"mchangeEmitter()\"\n [showValidation]=\"scheme.showValidation\"\n [autoPickValueField]=\"scheme.autoPickValueField\"\n [showRequiredTag]=\"scheme.showRequiredTag\"\n [showValidationMsg]=\"scheme.showValidationMsg\"\n [showValidationIcon]=\"scheme.showValidationIcon\"\n [countryCode3]=\"scheme.countryCode3\"\n [disabled]=\"\n scheme.disabled ||\n (scheme.disabledIf | functionCaller2: formValue() : (scheme.field | toAny))\n \" />\n }\n @case (scheme.type == 'autocomplete') {\n <app-autocomplete\n [form]=\"scheme.form || form()\"\n [label]=\"scheme.label\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [stacked]=\"scheme.stacked\"\n [verbose]=\"scheme.verbose\"\n [presetValue]=\"scheme.presetValue\"\n [labelField]=\"scheme.labelField\"\n [noFormat]=\"scheme.noFormat\"\n [labelType]=\"scheme.labelType | toAny\"\n (mchange)=\"mchangeEmitter()\"\n (mSelectedOptionLabel)=\"setOptionLabel($event, scheme)\"\n [name]=\"scheme.field\"\n [debug]=\"scheme.debug\"\n [setFormattedValue]=\"scheme.setControlFormattedValue\"\n [showRequiredTag]=\"scheme.showRequiredTag\"\n [optionFormatter]=\"scheme.optionFormatter\"\n [valueField]=\"scheme.valueField\"\n [optionsFunc]=\"scheme.optionsFunc\"\n [showValidationMsg]=\"scheme.showValidationMsg\"\n [autoPickValueField]=\"scheme.autoPickValueField\"\n [options]=\"scheme.options || optionsMap()[scheme.field | toAny]\"\n [hint]=\"scheme.hint\"\n [disabled]=\"\n scheme.disabled ||\n (scheme.disabledIf | functionCaller2: formValue() : (scheme.field | toAny))\n \" />\n }\n @case (scheme.type == 'richtext') {\n <rich-text-editor-rf\n [form]=\"scheme.form || form()\"\n [label]=\"scheme.label!\"\n [clearOnDisable]=\"scheme.clearOnDisable!\"\n [stacked]=\"scheme.stacked\"\n [verbose]=\"scheme.verbose\"\n [labelField]=\"scheme.labelField!\"\n [noFormat]=\"scheme.noFormat!\"\n [labelType]=\"scheme.labelType | toAny\"\n (mchange)=\"mchangeEmitter()\"\n (mSelectedOptionLabel)=\"setOptionLabel($event, scheme)\"\n [name]=\"scheme.field\"\n [debug]=\"scheme.debug!\"\n [setFormattedValue]=\"scheme.setControlFormattedValue\"\n [showRequiredTag]=\"scheme.showRequiredTag!\"\n [optionFormatter]=\"scheme.optionFormatter!\"\n [valueField]=\"scheme.valueField!\"\n [optionsFunc]=\"scheme.optionsFunc!\"\n [showValidationMsg]=\"scheme.showValidationMsg\"\n [autoPickValueField]=\"scheme.autoPickValueField!\"\n [options]=\"scheme.options || optionsMap()[scheme.field | toAny]\"\n [hint]=\"scheme.hint!\"\n [maxLength]=\"scheme.maxLength\"\n [minLength]=\"scheme.minLength\"\n [disabled]=\"\n scheme.disabled ||\n (scheme.disabledIf! | functionCaller2: formValue() : (scheme.field | toAny))\n \" />\n }\n @default {\n <app-input-basic\n [noFormat]=\"scheme.noFormat\"\n [name]=\"scheme.field\"\n [form]=\"scheme.form || form()\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [type]=\"scheme.type\"\n [verbose]=\"scheme.verbose\"\n [valueField]=\"scheme.valueField\"\n [autoPickValueField]=\"scheme.autoPickValueField\"\n [presetValue]=\"scheme.presetValue\"\n [stacked]=\"scheme.stacked\"\n [labelType]=\"scheme.labelType | toAny\"\n [checkedSignal]=\"scheme.checked\"\n [showValidation]=\"!!scheme.asyncValidators\"\n [showValidationIcon]=\"!!scheme.asyncValidators\"\n [debug]=\"scheme.debug\"\n (mchange)=\"mchangeEmitter()\"\n [setFormattedValue]=\"scheme.setControlFormattedValue\"\n [showRequiredTag]=\"scheme.showRequiredTag\"\n [labelField]=\"scheme.labelField\"\n [optionFormatter]=\"scheme.optionFormatter\"\n (mSelectedOptionLabel)=\"setOptionLabel($event, scheme)\"\n [options]=\"scheme.options || optionsMap()[scheme.field | toAny]\"\n [decimalPoints]=\"scheme.decimalPoints\"\n [hint]=\"scheme.hint\"\n [max]=\"scheme.max\"\n [min]=\"scheme.min\"\n [maxLength]=\"scheme.maxLength\"\n [minLength]=\"scheme.minLength\"\n [placeholder]=\"scheme.placeholder\"\n [label]=\"scheme.label\"\n [showValidationMsg]=\"scheme.showValidationMsg\"\n [disabled]=\"\n scheme.disabled ||\n (scheme.disabledIf | functionCaller2: formValue() : (scheme.field | toAny))\n \" />\n }\n }\n </div>\n }\n </div>\n <div class=\"row row-cols-auto justify-content-end\">\n <div class=\"\">\n @if (showSubmitBtn()) {\n <app-btn\n [text]=\"submitBtnText()\"\n group=\"submit\"\n [form]=\"form()\"\n (mclick)=\"submit(submitBtn)\"\n #submitBtn />\n }\n @if (submitBtnTemplate()) {\n <ng-container *ngTemplateOutlet=\"submitBtnTemplate()\"></ng-container>\n }\n </div>\n </div>\n </form>\n</loader>\n", styles: [""], dependencies: [{ kind: "component", type: LoaderComponent, selector: "loader", inputs: ["class", "text", "loading", "height", "width", "ratioHW"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: PhoneNumberComponent, selector: "app-phone-number", inputs: ["showLabel", "countryCode3", "config"], outputs: ["onCountrySelect"] }, { kind: "component", type: AutocompleteComponent, selector: "app-autocomplete,autocomplete", inputs: ["showRequiredTag", "validate", "options"] }, { kind: "component", type: InputBasicComponent, selector: "app-input-basic,app-input", inputs: ["accept", "autocomplete", "input", "contextData", "decimalPoints", "files", "hide", "hint", "labelLink", "lblCl", "light", "loading", "multiple", "optionsFunc", "theme", "vms", "xsmall", "setCurrentDate", "options"], outputs: ["mSelectedOptionLabel"] }, { kind: "component", type: RichTextEditorRFComponent, selector: "rich-text-editor-rf" }, { kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "loading", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "form", "forms", "help", "iconBtn", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid", "disabled"], outputs: ["loadingChange", "leftCustomIconChange", "mclick", "disabledChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "pipe", type: FunctionCaller2, name: "functionCaller2" }, { kind: "pipe", type: ToAnyPipe, name: "toAny" }] }); }
210
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.2", type: FormGeneratorComponent, isStandalone: true, selector: "form-generator", inputs: { keyField: { classPropertyName: "keyField", publicName: "keyField", isSignal: false, isRequired: false, transformFunction: null }, presetValueForSingleOption: { classPropertyName: "presetValueForSingleOption", publicName: "presetValueForSingleOption", isSignal: true, isRequired: false, transformFunction: null }, isCreate: { classPropertyName: "isCreate", publicName: "isCreate", isSignal: true, isRequired: false, transformFunction: null }, submitOnEnterKey: { classPropertyName: "submitOnEnterKey", publicName: "submitOnEnterKey", isSignal: true, isRequired: false, transformFunction: null }, submitFunc: { classPropertyName: "submitFunc", publicName: "submitFunc", isSignal: false, isRequired: false, transformFunction: null }, submitBtnText: { classPropertyName: "submitBtnText", publicName: "submitBtnText", isSignal: true, isRequired: false, transformFunction: null }, submitBtnTemplate: { classPropertyName: "submitBtnTemplate", publicName: "submitBtnTemplate", isSignal: true, isRequired: false, transformFunction: null }, submitSuccessText: { classPropertyName: "submitSuccessText", publicName: "submitSuccessText", isSignal: true, isRequired: false, transformFunction: null }, showSubmitBtn: { classPropertyName: "showSubmitBtn", publicName: "showSubmitBtn", isSignal: true, isRequired: false, transformFunction: null }, gridStyle: { classPropertyName: "gridStyle", publicName: "gridStyle", isSignal: true, isRequired: false, transformFunction: null }, gridMDStyle: { classPropertyName: "gridMDStyle", publicName: "gridMDStyle", isSignal: true, isRequired: false, transformFunction: null }, gridLGStyle: { classPropertyName: "gridLGStyle", publicName: "gridLGStyle", isSignal: true, isRequired: false, transformFunction: null }, gridXXLStyle: { classPropertyName: "gridXXLStyle", publicName: "gridXXLStyle", isSignal: true, isRequired: false, transformFunction: null }, formGridClass: { classPropertyName: "formGridClass", publicName: "formGridClass", isSignal: true, isRequired: false, transformFunction: null }, useLoader: { classPropertyName: "useLoader", publicName: "useLoader", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: false, transformFunction: null }, _formSchema: { classPropertyName: "_formSchema", publicName: "formSchema", isSignal: false, isRequired: false, transformFunction: null }, _formSchemaNoForm: { classPropertyName: "_formSchemaNoForm", publicName: "formSchemaNoForm", isSignal: false, isRequired: false, transformFunction: null }, _isShow: { classPropertyName: "_isShow", publicName: "isShow", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { onSubmit: "onSubmit", mchange: "mchange", saved: "saved", form: "formChange" }, viewQueries: [{ propertyName: "formTagRef", first: true, predicate: ["formTag"], descendants: true, isSignal: true }, { propertyName: "submitBtnRef", first: true, predicate: ["submitBtn"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<!-- {{formValue()|json}}\n{{formValid()|json}} -->\n<loader [loading]=\"computedLoading()\">\n <form [formGroup]=\"form()\" #formTag>\n <div\n class=\"row row-cols-{{ gridStyle() }} row-cols-md-{{ gridMDStyle() }} row-cols-lg-{{\n gridLGStyle()\n }} row-cols-xxl-{{ gridXXLStyle() }} align-items-center {{ formGridClass() }}\">\n @for (scheme of computedFormSchema(); track scheme.id) {\n <div class=\"col {{ scheme.cls }} \">\n @switch (true) {\n @case (scheme.type == 'tel') {\n <app-phone-number\n [form]=\"scheme.form || form()\"\n [label]=\"scheme.label\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [stacked]=\"scheme.stacked\"\n [name]=\"scheme.field\"\n [noFormat]=\"scheme.noFormat\"\n [verbose]=\"scheme.verbose\"\n [debug]=\"scheme.debug\"\n (mchange)=\"mchangeEmitter()\"\n [showValidation]=\"scheme.showValidation || !!scheme.asyncValidators\"\n [showValidationIcon]=\"scheme.showValidationIcon || !!scheme.asyncValidators\"\n [autoPickValueField]=\"scheme.autoPickValueField\"\n [showRequiredTag]=\"scheme.showRequiredTag\"\n [showValidationMsg]=\"scheme.showValidationMsg\" \n [countryCode3]=\"scheme.countryCode3\"\n [disabled]=\"\n scheme.disabled ||\n (scheme.disabledIf | functionCaller2: formValue() : (scheme.field | toAny))\n \" />\n }\n @case (scheme.type == 'autocomplete') {\n <app-autocomplete\n [form]=\"scheme.form || form()\"\n [label]=\"scheme.label\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [stacked]=\"scheme.stacked\"\n [verbose]=\"scheme.verbose\"\n [presetValue]=\"scheme.presetValue\"\n [labelField]=\"scheme.labelField\"\n [noFormat]=\"scheme.noFormat\"\n [showValidation]=\"scheme.showValidation || !!scheme.asyncValidators\"\n [showValidationIcon]=\"scheme.showValidationIcon || !!scheme.asyncValidators\"\n [labelType]=\"scheme.labelType | toAny\"\n (mchange)=\"mchangeEmitter()\"\n (mSelectedOptionLabel)=\"setOptionLabel($event, scheme)\"\n [name]=\"scheme.field\"\n [debug]=\"scheme.debug\"\n [setFormattedValue]=\"scheme.setControlFormattedValue\"\n [showRequiredTag]=\"scheme.showRequiredTag\"\n [optionFormatter]=\"scheme.optionFormatter\"\n [valueField]=\"scheme.valueField\"\n [optionsFunc]=\"scheme.optionsFunc\"\n [showValidationMsg]=\"scheme.showValidationMsg\"\n [autoPickValueField]=\"scheme.autoPickValueField\"\n [options]=\"scheme.options || optionsMap()[scheme.field | toAny]\"\n [hint]=\"scheme.hint\"\n [disabled]=\"\n scheme.disabled ||\n (scheme.disabledIf | functionCaller2: formValue() : (scheme.field | toAny))\n \" />\n }\n @case (scheme.type == 'richtext') {\n <rich-text-editor-rf\n [form]=\"scheme.form || form()\"\n [label]=\"scheme.label!\"\n [clearOnDisable]=\"scheme.clearOnDisable!\"\n [stacked]=\"scheme.stacked\"\n [verbose]=\"scheme.verbose\"\n [labelField]=\"scheme.labelField!\"\n [noFormat]=\"scheme.noFormat!\"\n [showValidation]=\"scheme.showValidation || !!scheme.asyncValidators\"\n [showValidationIcon]=\"scheme.showValidationIcon || !!scheme.asyncValidators\"\n [labelType]=\"scheme.labelType | toAny\"\n (mchange)=\"mchangeEmitter()\"\n (mSelectedOptionLabel)=\"setOptionLabel($event, scheme)\"\n [name]=\"scheme.field\"\n [debug]=\"scheme.debug!\"\n [setFormattedValue]=\"scheme.setControlFormattedValue\"\n [showRequiredTag]=\"scheme.showRequiredTag!\"\n [optionFormatter]=\"scheme.optionFormatter!\"\n [valueField]=\"scheme.valueField!\"\n [optionsFunc]=\"scheme.optionsFunc!\"\n [showValidationMsg]=\"scheme.showValidationMsg\"\n [autoPickValueField]=\"scheme.autoPickValueField!\"\n [options]=\"scheme.options || optionsMap()[scheme.field | toAny]\"\n [hint]=\"scheme.hint!\"\n [maxLength]=\"scheme.maxLength\"\n [minLength]=\"scheme.minLength\"\n [disabled]=\"\n scheme.disabled ||\n (scheme.disabledIf! | functionCaller2: formValue() : (scheme.field | toAny))\n \" />\n }\n @default {\n <app-input-basic\n [noFormat]=\"scheme.noFormat\"\n [name]=\"scheme.field\"\n [form]=\"scheme.form || form()\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [type]=\"scheme.type\"\n [verbose]=\"scheme.verbose\"\n [valueField]=\"scheme.valueField\"\n [autoPickValueField]=\"scheme.autoPickValueField\"\n [presetValue]=\"scheme.presetValue\"\n [stacked]=\"scheme.stacked\"\n [labelType]=\"scheme.labelType | toAny\"\n [checkedSignal]=\"scheme.checked\"\n [showValidation]=\"scheme.showValidation || !!scheme.asyncValidators\"\n [showValidationIcon]=\"scheme.showValidationIcon || !!scheme.asyncValidators\"\n [debug]=\"scheme.debug\"\n (mchange)=\"mchangeEmitter()\"\n [setFormattedValue]=\"scheme.setControlFormattedValue\"\n [showRequiredTag]=\"scheme.showRequiredTag\"\n [labelField]=\"scheme.labelField\"\n [optionFormatter]=\"scheme.optionFormatter\"\n (mSelectedOptionLabel)=\"setOptionLabel($event, scheme)\"\n [options]=\"scheme.options || optionsMap()[scheme.field | toAny]\"\n [decimalPoints]=\"scheme.decimalPoints\"\n [hint]=\"scheme.hint\"\n [max]=\"scheme.max\"\n [min]=\"scheme.min\"\n [maxLength]=\"scheme.maxLength\"\n [minLength]=\"scheme.minLength\"\n [placeholder]=\"scheme.placeholder\"\n [label]=\"scheme.label\"\n [showValidationMsg]=\"scheme.showValidationMsg\"\n [disabled]=\"\n scheme.disabled ||\n (scheme.disabledIf | functionCaller2: formValue() : (scheme.field | toAny))\n \" />\n }\n }\n </div>\n }\n </div>\n <div class=\"row row-cols-auto justify-content-end\">\n <div class=\"\">\n @if (showSubmitBtn()) {\n <app-btn\n [text]=\"submitBtnText()\"\n group=\"submit\"\n [form]=\"form()\"\n (mclick)=\"submit(submitBtn)\"\n #submitBtn />\n }\n @if (submitBtnTemplate()) {\n <ng-container *ngTemplateOutlet=\"submitBtnTemplate()\"></ng-container>\n }\n </div>\n </div>\n </form>\n</loader>\n", styles: [""], dependencies: [{ kind: "component", type: LoaderComponent, selector: "loader", inputs: ["class", "text", "loading", "height", "width", "ratioHW"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: PhoneNumberComponent, selector: "app-phone-number", inputs: ["showLabel", "countryCode3", "config"], outputs: ["onCountrySelect"] }, { kind: "component", type: AutocompleteComponent, selector: "app-autocomplete,autocomplete", inputs: ["showRequiredTag", "validate", "options"] }, { kind: "component", type: InputBasicComponent, selector: "app-input-basic,app-input", inputs: ["accept", "autocomplete", "input", "contextData", "decimalPoints", "files", "hide", "hint", "labelLink", "lblCl", "light", "loading", "multiple", "optionsFunc", "theme", "vms", "xsmall", "setCurrentDate", "options"], outputs: ["mSelectedOptionLabel"] }, { kind: "component", type: RichTextEditorRFComponent, selector: "rich-text-editor-rf" }, { kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "loading", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "form", "forms", "help", "iconBtn", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid", "disabled"], outputs: ["loadingChange", "leftCustomIconChange", "mclick", "disabledChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "pipe", type: FunctionCaller2, name: "functionCaller2" }, { kind: "pipe", type: ToAnyPipe, name: "toAny" }] }); }
211
211
  }
212
212
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: FormGeneratorComponent, decorators: [{
213
213
  type: Component,
@@ -226,7 +226,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImpor
226
226
  ReactiveFormsModule,
227
227
  FunctionCaller2,
228
228
  ToAnyPipe,
229
- ], template: "<!-- {{formValue()|json}}\n{{formValid()|json}} -->\n<loader [loading]=\"computedLoading()\">\n <form [formGroup]=\"form()\" #formTag>\n <div\n class=\"row row-cols-{{ gridStyle() }} row-cols-md-{{ gridMDStyle() }} row-cols-lg-{{\n gridLGStyle()\n }} row-cols-xxl-{{ gridXXLStyle() }} align-items-center {{ formGridClass() }}\">\n @for (scheme of computedFormSchema(); track scheme.id) {\n <div class=\"col {{ scheme.cls }} \">\n @switch (true) {\n @case (scheme.type == 'tel') {\n <app-phone-number\n [form]=\"scheme.form || form()\"\n [label]=\"scheme.label\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [stacked]=\"scheme.stacked\"\n [name]=\"scheme.field\"\n [noFormat]=\"scheme.noFormat\"\n [verbose]=\"scheme.verbose\"\n [debug]=\"scheme.debug\"\n (mchange)=\"mchangeEmitter()\"\n [showValidation]=\"scheme.showValidation\"\n [autoPickValueField]=\"scheme.autoPickValueField\"\n [showRequiredTag]=\"scheme.showRequiredTag\"\n [showValidationMsg]=\"scheme.showValidationMsg\"\n [showValidationIcon]=\"scheme.showValidationIcon\"\n [countryCode3]=\"scheme.countryCode3\"\n [disabled]=\"\n scheme.disabled ||\n (scheme.disabledIf | functionCaller2: formValue() : (scheme.field | toAny))\n \" />\n }\n @case (scheme.type == 'autocomplete') {\n <app-autocomplete\n [form]=\"scheme.form || form()\"\n [label]=\"scheme.label\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [stacked]=\"scheme.stacked\"\n [verbose]=\"scheme.verbose\"\n [presetValue]=\"scheme.presetValue\"\n [labelField]=\"scheme.labelField\"\n [noFormat]=\"scheme.noFormat\"\n [labelType]=\"scheme.labelType | toAny\"\n (mchange)=\"mchangeEmitter()\"\n (mSelectedOptionLabel)=\"setOptionLabel($event, scheme)\"\n [name]=\"scheme.field\"\n [debug]=\"scheme.debug\"\n [setFormattedValue]=\"scheme.setControlFormattedValue\"\n [showRequiredTag]=\"scheme.showRequiredTag\"\n [optionFormatter]=\"scheme.optionFormatter\"\n [valueField]=\"scheme.valueField\"\n [optionsFunc]=\"scheme.optionsFunc\"\n [showValidationMsg]=\"scheme.showValidationMsg\"\n [autoPickValueField]=\"scheme.autoPickValueField\"\n [options]=\"scheme.options || optionsMap()[scheme.field | toAny]\"\n [hint]=\"scheme.hint\"\n [disabled]=\"\n scheme.disabled ||\n (scheme.disabledIf | functionCaller2: formValue() : (scheme.field | toAny))\n \" />\n }\n @case (scheme.type == 'richtext') {\n <rich-text-editor-rf\n [form]=\"scheme.form || form()\"\n [label]=\"scheme.label!\"\n [clearOnDisable]=\"scheme.clearOnDisable!\"\n [stacked]=\"scheme.stacked\"\n [verbose]=\"scheme.verbose\"\n [labelField]=\"scheme.labelField!\"\n [noFormat]=\"scheme.noFormat!\"\n [labelType]=\"scheme.labelType | toAny\"\n (mchange)=\"mchangeEmitter()\"\n (mSelectedOptionLabel)=\"setOptionLabel($event, scheme)\"\n [name]=\"scheme.field\"\n [debug]=\"scheme.debug!\"\n [setFormattedValue]=\"scheme.setControlFormattedValue\"\n [showRequiredTag]=\"scheme.showRequiredTag!\"\n [optionFormatter]=\"scheme.optionFormatter!\"\n [valueField]=\"scheme.valueField!\"\n [optionsFunc]=\"scheme.optionsFunc!\"\n [showValidationMsg]=\"scheme.showValidationMsg\"\n [autoPickValueField]=\"scheme.autoPickValueField!\"\n [options]=\"scheme.options || optionsMap()[scheme.field | toAny]\"\n [hint]=\"scheme.hint!\"\n [maxLength]=\"scheme.maxLength\"\n [minLength]=\"scheme.minLength\"\n [disabled]=\"\n scheme.disabled ||\n (scheme.disabledIf! | functionCaller2: formValue() : (scheme.field | toAny))\n \" />\n }\n @default {\n <app-input-basic\n [noFormat]=\"scheme.noFormat\"\n [name]=\"scheme.field\"\n [form]=\"scheme.form || form()\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [type]=\"scheme.type\"\n [verbose]=\"scheme.verbose\"\n [valueField]=\"scheme.valueField\"\n [autoPickValueField]=\"scheme.autoPickValueField\"\n [presetValue]=\"scheme.presetValue\"\n [stacked]=\"scheme.stacked\"\n [labelType]=\"scheme.labelType | toAny\"\n [checkedSignal]=\"scheme.checked\"\n [showValidation]=\"!!scheme.asyncValidators\"\n [showValidationIcon]=\"!!scheme.asyncValidators\"\n [debug]=\"scheme.debug\"\n (mchange)=\"mchangeEmitter()\"\n [setFormattedValue]=\"scheme.setControlFormattedValue\"\n [showRequiredTag]=\"scheme.showRequiredTag\"\n [labelField]=\"scheme.labelField\"\n [optionFormatter]=\"scheme.optionFormatter\"\n (mSelectedOptionLabel)=\"setOptionLabel($event, scheme)\"\n [options]=\"scheme.options || optionsMap()[scheme.field | toAny]\"\n [decimalPoints]=\"scheme.decimalPoints\"\n [hint]=\"scheme.hint\"\n [max]=\"scheme.max\"\n [min]=\"scheme.min\"\n [maxLength]=\"scheme.maxLength\"\n [minLength]=\"scheme.minLength\"\n [placeholder]=\"scheme.placeholder\"\n [label]=\"scheme.label\"\n [showValidationMsg]=\"scheme.showValidationMsg\"\n [disabled]=\"\n scheme.disabled ||\n (scheme.disabledIf | functionCaller2: formValue() : (scheme.field | toAny))\n \" />\n }\n }\n </div>\n }\n </div>\n <div class=\"row row-cols-auto justify-content-end\">\n <div class=\"\">\n @if (showSubmitBtn()) {\n <app-btn\n [text]=\"submitBtnText()\"\n group=\"submit\"\n [form]=\"form()\"\n (mclick)=\"submit(submitBtn)\"\n #submitBtn />\n }\n @if (submitBtnTemplate()) {\n <ng-container *ngTemplateOutlet=\"submitBtnTemplate()\"></ng-container>\n }\n </div>\n </div>\n </form>\n</loader>\n" }]
229
+ ], template: "<!-- {{formValue()|json}}\n{{formValid()|json}} -->\n<loader [loading]=\"computedLoading()\">\n <form [formGroup]=\"form()\" #formTag>\n <div\n class=\"row row-cols-{{ gridStyle() }} row-cols-md-{{ gridMDStyle() }} row-cols-lg-{{\n gridLGStyle()\n }} row-cols-xxl-{{ gridXXLStyle() }} align-items-center {{ formGridClass() }}\">\n @for (scheme of computedFormSchema(); track scheme.id) {\n <div class=\"col {{ scheme.cls }} \">\n @switch (true) {\n @case (scheme.type == 'tel') {\n <app-phone-number\n [form]=\"scheme.form || form()\"\n [label]=\"scheme.label\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [stacked]=\"scheme.stacked\"\n [name]=\"scheme.field\"\n [noFormat]=\"scheme.noFormat\"\n [verbose]=\"scheme.verbose\"\n [debug]=\"scheme.debug\"\n (mchange)=\"mchangeEmitter()\"\n [showValidation]=\"scheme.showValidation || !!scheme.asyncValidators\"\n [showValidationIcon]=\"scheme.showValidationIcon || !!scheme.asyncValidators\"\n [autoPickValueField]=\"scheme.autoPickValueField\"\n [showRequiredTag]=\"scheme.showRequiredTag\"\n [showValidationMsg]=\"scheme.showValidationMsg\" \n [countryCode3]=\"scheme.countryCode3\"\n [disabled]=\"\n scheme.disabled ||\n (scheme.disabledIf | functionCaller2: formValue() : (scheme.field | toAny))\n \" />\n }\n @case (scheme.type == 'autocomplete') {\n <app-autocomplete\n [form]=\"scheme.form || form()\"\n [label]=\"scheme.label\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [stacked]=\"scheme.stacked\"\n [verbose]=\"scheme.verbose\"\n [presetValue]=\"scheme.presetValue\"\n [labelField]=\"scheme.labelField\"\n [noFormat]=\"scheme.noFormat\"\n [showValidation]=\"scheme.showValidation || !!scheme.asyncValidators\"\n [showValidationIcon]=\"scheme.showValidationIcon || !!scheme.asyncValidators\"\n [labelType]=\"scheme.labelType | toAny\"\n (mchange)=\"mchangeEmitter()\"\n (mSelectedOptionLabel)=\"setOptionLabel($event, scheme)\"\n [name]=\"scheme.field\"\n [debug]=\"scheme.debug\"\n [setFormattedValue]=\"scheme.setControlFormattedValue\"\n [showRequiredTag]=\"scheme.showRequiredTag\"\n [optionFormatter]=\"scheme.optionFormatter\"\n [valueField]=\"scheme.valueField\"\n [optionsFunc]=\"scheme.optionsFunc\"\n [showValidationMsg]=\"scheme.showValidationMsg\"\n [autoPickValueField]=\"scheme.autoPickValueField\"\n [options]=\"scheme.options || optionsMap()[scheme.field | toAny]\"\n [hint]=\"scheme.hint\"\n [disabled]=\"\n scheme.disabled ||\n (scheme.disabledIf | functionCaller2: formValue() : (scheme.field | toAny))\n \" />\n }\n @case (scheme.type == 'richtext') {\n <rich-text-editor-rf\n [form]=\"scheme.form || form()\"\n [label]=\"scheme.label!\"\n [clearOnDisable]=\"scheme.clearOnDisable!\"\n [stacked]=\"scheme.stacked\"\n [verbose]=\"scheme.verbose\"\n [labelField]=\"scheme.labelField!\"\n [noFormat]=\"scheme.noFormat!\"\n [showValidation]=\"scheme.showValidation || !!scheme.asyncValidators\"\n [showValidationIcon]=\"scheme.showValidationIcon || !!scheme.asyncValidators\"\n [labelType]=\"scheme.labelType | toAny\"\n (mchange)=\"mchangeEmitter()\"\n (mSelectedOptionLabel)=\"setOptionLabel($event, scheme)\"\n [name]=\"scheme.field\"\n [debug]=\"scheme.debug!\"\n [setFormattedValue]=\"scheme.setControlFormattedValue\"\n [showRequiredTag]=\"scheme.showRequiredTag!\"\n [optionFormatter]=\"scheme.optionFormatter!\"\n [valueField]=\"scheme.valueField!\"\n [optionsFunc]=\"scheme.optionsFunc!\"\n [showValidationMsg]=\"scheme.showValidationMsg\"\n [autoPickValueField]=\"scheme.autoPickValueField!\"\n [options]=\"scheme.options || optionsMap()[scheme.field | toAny]\"\n [hint]=\"scheme.hint!\"\n [maxLength]=\"scheme.maxLength\"\n [minLength]=\"scheme.minLength\"\n [disabled]=\"\n scheme.disabled ||\n (scheme.disabledIf! | functionCaller2: formValue() : (scheme.field | toAny))\n \" />\n }\n @default {\n <app-input-basic\n [noFormat]=\"scheme.noFormat\"\n [name]=\"scheme.field\"\n [form]=\"scheme.form || form()\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [type]=\"scheme.type\"\n [verbose]=\"scheme.verbose\"\n [valueField]=\"scheme.valueField\"\n [autoPickValueField]=\"scheme.autoPickValueField\"\n [presetValue]=\"scheme.presetValue\"\n [stacked]=\"scheme.stacked\"\n [labelType]=\"scheme.labelType | toAny\"\n [checkedSignal]=\"scheme.checked\"\n [showValidation]=\"scheme.showValidation || !!scheme.asyncValidators\"\n [showValidationIcon]=\"scheme.showValidationIcon || !!scheme.asyncValidators\"\n [debug]=\"scheme.debug\"\n (mchange)=\"mchangeEmitter()\"\n [setFormattedValue]=\"scheme.setControlFormattedValue\"\n [showRequiredTag]=\"scheme.showRequiredTag\"\n [labelField]=\"scheme.labelField\"\n [optionFormatter]=\"scheme.optionFormatter\"\n (mSelectedOptionLabel)=\"setOptionLabel($event, scheme)\"\n [options]=\"scheme.options || optionsMap()[scheme.field | toAny]\"\n [decimalPoints]=\"scheme.decimalPoints\"\n [hint]=\"scheme.hint\"\n [max]=\"scheme.max\"\n [min]=\"scheme.min\"\n [maxLength]=\"scheme.maxLength\"\n [minLength]=\"scheme.minLength\"\n [placeholder]=\"scheme.placeholder\"\n [label]=\"scheme.label\"\n [showValidationMsg]=\"scheme.showValidationMsg\"\n [disabled]=\"\n scheme.disabled ||\n (scheme.disabledIf | functionCaller2: formValue() : (scheme.field | toAny))\n \" />\n }\n }\n </div>\n }\n </div>\n <div class=\"row row-cols-auto justify-content-end\">\n <div class=\"\">\n @if (showSubmitBtn()) {\n <app-btn\n [text]=\"submitBtnText()\"\n group=\"submit\"\n [form]=\"form()\"\n (mclick)=\"submit(submitBtn)\"\n #submitBtn />\n }\n @if (submitBtnTemplate()) {\n <ng-container *ngTemplateOutlet=\"submitBtnTemplate()\"></ng-container>\n }\n </div>\n </div>\n </form>\n</loader>\n" }]
230
230
  }], ctorParameters: () => [], propDecorators: { keyField: [{
231
231
  type: Input
232
232
  }], onSubmit: [{
@@ -247,4 +247,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImpor
247
247
  type: Input,
248
248
  args: ['isShow']
249
249
  }] } });
250
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1nZW5lcmF0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NoYXJlZC9jb21wb25lbnRzL2Zvcm0tZ2VuZXJhdG9yL2Zvcm0tZ2VuZXJhdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy9mb3JtLWdlbmVyYXRvci9mb3JtLWdlbmVyYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUdULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUVOLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsV0FBVyxFQUNYLFNBQVMsRUFDVCxXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxTQUFTLEVBQVcsTUFBTSxXQUFXLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQVEsU0FBUyxFQUFPLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RixPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsbUJBQW1CLEVBQW1CLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1B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QixZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZixTQUFTO3FCQUNWO3dEQUtRLFFBQVE7c0JBQWhCLEtBQUs7Z0JBT0ksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUVHLEtBQUs7c0JBQWQsTUFBTTtnQkFDRSxVQUFVO3NCQUFsQixLQUFLO2dCQXFDOEIsV0FBVztzQkFBOUMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUU7Z0JBR1ksaUJBQWlCO3NCQUExRCxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFO2dCQWFmLE9BQU87c0JBQTNCLEtBQUs7dUJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIERlc3Ryb3lSZWYsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG1vZGVsLFxuICBzaWduYWwsXG4gIHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIEZvcm1Db250cm9sLFxuICBGb3JtR3JvdXAsXG4gIEZvcm1zTW9kdWxlLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBWYWxpZGF0b3JzLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIGxhc3QsIHN3aXRjaE1hcCwgdGFwLCBtYXAsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEZ1bmN0aW9uQ2FsbGVyMiwgVG9BbnlQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvdXRpbGl0eS5waXBlJztcbmltcG9ydCB7IEJ0bkNvbXBvbmVudCB9IGZyb20gJy4uL2J0bi9idG4uY29tcG9uZW50JztcbmltcG9ydCB7IElucHV0QmFzaWNDb21wb25lbnQsIE9wdGlvbkxhYmVsVHlwZSB9IGZyb20gJy4uL2lucHV0L2lucHV0LWJhc2ljLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBdXRvY29tcGxldGVDb21wb25lbnQgfSBmcm9tICcuLi9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uTWVzc2FnZUNvbXBvbmVudCB9IGZyb20gJy4uL2lucHV0L3ZhbGlkYXRpb24tbWVzc2FnZS92YWxpZGF0aW9uLW1lc3NhZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IFBob25lTnVtYmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vcGhvbmUtbnVtYmVyL3Bob25lLW51bWJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBOZ1N3aXRjaERlZmF1bHQsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vbG9hZGVyL2xvYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW5wdXRTdWJUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2luZGV4Lm1vZGVsJztcbmltcG9ydCB7IFJpY2hUZXh0RWRpdG9yUkZDb21wb25lbnQgfSBmcm9tICcuLi9yaWNoLXRleHQtZWRpdG9yLXJmL3JpY2gtdGV4dC1lZGl0b3ItcmYuY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1HZW5lcmF0b3JTZXJ2aWNlIH0gZnJvbSAnLi9mb3JtLWdlbmVyYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VGb3JtR2VuZXJhdG9yLCBJQmFzZUZvcm1TY2hlbWEgfSBmcm9tICcuL2Zvcm0tZ2VuZXJhdG9yLmJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUsIHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG4vKipcbiAqIEZvcm0gc2hvdWxkIGJlIHNldCBiZWZvcmUgdGhlIHRoZSBmb3JtU2NoZW1hXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Zvcm0tZ2VuZXJhdG9yJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tZ2VuZXJhdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS1nZW5lcmF0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgLy8gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgTG9hZGVyQ29tcG9uZW50LFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBQaG9uZU51bWJlckNvbXBvbmVudCxcbiAgICBWYWxpZGF0aW9uTWVzc2FnZUNvbXBvbmVudCxcbiAgICBBdXRvY29tcGxldGVDb21wb25lbnQsXG4gICAgTmdTd2l0Y2hEZWZhdWx0LFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgSW5wdXRCYXNpY0NvbXBvbmVudCxcbiAgICBSaWNoVGV4dEVkaXRvclJGQ29tcG9uZW50LFxuICAgIEJ0bkNvbXBvbmVudCxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZ1bmN0aW9uQ2FsbGVyMixcbiAgICBUb0FueVBpcGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1HZW5lcmF0b3JDb21wb25lbnQ8XG4gIFRGb3JtR3JvdXAgZXh0ZW5kcyB7IFtLIGluIGtleW9mIFRGb3JtR3JvdXBdOiBBYnN0cmFjdENvbnRyb2w8YW55LCBhbnk+IH0sXG4+IGV4dGVuZHMgQmFzZUZvcm1HZW5lcmF0b3I8VEZvcm1Hcm91cCwgSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD4+IHtcbiAgQElucHV0KCkga2V5RmllbGQ6ICdmaWVsZCcgfCAnbGFiZWwnID0gJ2ZpZWxkJztcbiAgcmVhZG9ubHkgcHJlc2V0VmFsdWVGb3JTaW5nbGVPcHRpb24gPSBpbnB1dChmYWxzZSk7XG4gIHJlYWRvbmx5IGlzQ3JlYXRlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgc3VibWl0T25FbnRlcktleSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgZm9ybVRhZ1JlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPEhUTUxGb3JtRWxlbWVudD4+KCdmb3JtVGFnJyk7XG5cbiAgLyoqRW1pdHRlZCBqdXN0IGJlZm9yZSBjYWxsaW5nIHRoZSBzYXZlIGZ1bmN0aW9uICovXG4gIEBPdXRwdXQoKSBvblN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbWNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAvKipFbWl0dGVkIGFmdGVyIHJlY2VpdmluZyBmZWVkYmFjayBmcm9tIHRoZSBzdWJtaXQgZnVuY3Rpb24gKi9cbiAgQE91dHB1dCgpIHNhdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBJbnB1dCgpIHN1Ym1pdEZ1bmM6ICh2YWx1ZTogYW55KSA9PiBQcm9taXNlPGFueT47XG4gIHJlYWRvbmx5IHN1Ym1pdEJ0blRleHQgPSBpbnB1dCgnU3VibWl0Jyk7XG4gIHJlYWRvbmx5IHN1Ym1pdEJ0blRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8YW55Pj4oKTtcbiAgcmVhZG9ubHkgc3VibWl0U3VjY2Vzc1RleHQgPSBpbnB1dCgnU2F2ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gIHJlYWRvbmx5IHNob3dTdWJtaXRCdG4gPSBpbnB1dCh0cnVlKTtcblxuICByZWFkb25seSBncmlkU3R5bGUgPSBpbnB1dDxudW1iZXIgfCAnYXV0byc+KCk7XG4gIHJlYWRvbmx5IGdyaWRNRFN0eWxlID0gaW5wdXQ8bnVtYmVyIHwgJ2F1dG8nPigpO1xuICByZWFkb25seSBncmlkTEdTdHlsZSA9IGlucHV0PG51bWJlciB8ICdhdXRvJz4oKTtcbiAgcmVhZG9ubHkgZ3JpZFhYTFN0eWxlID0gaW5wdXQ8bnVtYmVyIHwgJ2F1dG8nPigpO1xuXG4gIHJlYWRvbmx5IGZvcm1HcmlkQ2xhc3MgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHVzZUxvYWRlciA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGxvYWRpbmcgPSBpbnB1dDxib29sZWFuPigpO1xuXG4gIHJlYWRvbmx5IF9sb2FkaW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICByZWFkb25seSBjb21wdXRlZExvYWRpbmcgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMudXNlTG9hZGVyKCkgPyB0aGlzLmxvYWRpbmcoKSB8fCB0aGlzLl9sb2FkaW5nKCkgOiBmYWxzZSxcbiAgKTtcblxuICByZWFkb25seSBzdWJtaXRCdG5SZWYgPSB2aWV3Q2hpbGQ8QnRuQ29tcG9uZW50Pignc3VibWl0QnRuJyk7XG4gIHJlYWRvbmx5IGZvcm0gPSBtb2RlbDxGb3JtR3JvdXA8VEZvcm1Hcm91cD4+KCk7XG5cbiAgcmVhZG9ubHkgIGZvcm1WYWx1ZSA9IHRvU2lnbmFsKFxuICAgIHRvT2JzZXJ2YWJsZSh0aGlzLmZvcm0pLnBpcGUoXG4gICAgICBmaWx0ZXIoKCkgPT4gISF0aGlzLmZvcm0oKSksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgdGhpcy5mb3JtKClcbiAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUobWFwKCgpID0+IHRoaXMuZm9ybSgpPy5nZXRSYXdWYWx1ZSgpIHx8IHt9KSlcbiAgICAgICAgICAucGlwZShzdGFydFdpdGgodGhpcy5mb3JtKCk/LmdldFJhd1ZhbHVlKCkgfHwge30pKSxcbiAgICAgICksXG4gICAgKSxcbiAgICAvLyB7IGluaXRpYWxWYWx1ZTogdGhpcy5mb3JtKCk/LmdldFJhd1ZhbHVlKCkgfHwge30gfSxcbiAgKTtcblxuICBzdWJtaXNzaW9uUmVzcG9uc2U6IGFueTtcbiAgQElucHV0KHsgYWxpYXM6ICdmb3JtU2NoZW1hJyB9KSBzZXQgX2Zvcm1TY2hlbWEodjogSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD5bXSkge1xuICAgIHRoaXMuaW5pdChjbG9uZURlZXAodi5maWx0ZXIoKHgpID0+IHgpKSk7XG4gIH1cbiAgQElucHV0KHsgYWxpYXM6ICdmb3JtU2NoZW1hTm9Gb3JtJyB9KSBzZXQgX2Zvcm1TY2hlbWFOb0Zvcm0odjogSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD5bXSkge1xuICAgIGlmICh2KSB7XG4gICAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygdikge1xuICAgICAgICBmb3JtLmFkZENvbnRyb2woXG4gICAgICAgICAgaXRlbS5maWVsZD8udG9TdHJpbmcoKSxcbiAgICAgICAgICBuZXcgRm9ybUNvbnRyb2woaXRlbS52YWx1ZSwgW10uY29uY2F0KGl0ZW0uaXNSZXF1aXJlZCA/IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSA6IFtdKSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLmZvcm0uc2V0KGZvcm0gYXMgYW55IGFzIEZvcm1Hcm91cDxURm9ybUdyb3VwPik7XG4gICAgICB0aGlzLl9mb3JtU2NoZW1hID0gdjtcbiAgICB9XG4gIH1cbiAgQElucHV0KCdpc1Nob3cnKSBzZXQgX2lzU2hvdyh2OiBib29sZWFuKSB7XG4gICAgaWYgKHYpIHRoaXMuZm9ybSgpPy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICBlbHNlIHRoaXMuZm9ybSgpPy5lbmFibGUoKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHYpIHRoaXMuZm9ybSgpPy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIGVsc2UgdGhpcy5mb3JtKCk/LmVuYWJsZSgpO1xuICAgIH0sIDUwMCk7XG4gIH1cbiAgcmVhZG9ubHkgICBvcHRpb25zTWFwID0gc2lnbmFsPElGb3JtT3B0aW9ucz4oe30pO1xuICAvLyBmb3JtVmFsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5mb3JtPy5nZXRSYXdWYWx1ZSgpKTtcblxuICByZWFkb25seSAgIGNvbXB1dGVkRm9ybVNjaGVtYSA9IGNvbXB1dGVkPElGb3JtU2NoZW1hPFRGb3JtR3JvdXA+W10+KCgpID0+IHtcbiAgICBjb25zdCBmb3JtU2NoZW1hID0gdGhpcy5mb3JtU2NoZW1hKCkgfHwgW10sXG4gICAgICBwcmVzZXRWYWx1ZUZvclNpbmdsZU9wdGlvbiA9IHRoaXMucHJlc2V0VmFsdWVGb3JTaW5nbGVPcHRpb24oKSxcbiAgICAgIGlzQ3JlYXRlID0gdGhpcy5pc0NyZWF0ZSgpLFxuICAgICAgcmV0OiBJRm9ybVNjaGVtYTxURm9ybUdyb3VwPltdID0gW107XG4gICAgZm9ybVNjaGVtYS5mb3JFYWNoKChzY2hlbWUpID0+IHtcbiAgICAgIGlmICghc2NoZW1lLmhpZGRlbikge1xuICAgICAgICBpZiAoaXNDcmVhdGUpXG4gICAgICAgICAgc2NoZW1lLnByZXNldFZhbHVlID1cbiAgICAgICAgICAgIHNjaGVtZS5wcmVzZXRWYWx1ZSA9PSBudWxsID8gcHJlc2V0VmFsdWVGb3JTaW5nbGVPcHRpb24gOiBzY2hlbWUucHJlc2V0VmFsdWU7XG4gICAgICAgIHJldC5wdXNoKHNjaGVtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHJldC5zb21lKCh4KSA9PiAheC5maWVsZCkpIGRlYnVnZ2VyO1xuICAgIHJldHVybiByZXQ7XG4gIH0pO1xuICAvLyBtaXNjSW5kZXg6IFRNaXNjSW5kZXg7XG4gIHB1YmxpYyBmb3JtU2VydmljZSA9IGluamVjdChGb3JtR2VuZXJhdG9yU2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGxldCBsaXN0ZW5Ub0tleTogU3Vic2NyaXB0aW9uO1xuICAgIHRoaXMuZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuICAgICAgbGlzdGVuVG9LZXk/LnVuc3Vic2NyaWJlKCk7XG4gICAgfSk7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGZ0ciA9IHRoaXMuZm9ybVRhZ1JlZigpLFxuICAgICAgICBzdWJtaXRPbkVudGVyS2V5ID0gdGhpcy5zdWJtaXRPbkVudGVyS2V5KCk7XG4gICAgICAvLyBkZWJ1Z2dlcjtcblxuICAgICAgbGlzdGVuVG9LZXk/LnVuc3Vic2NyaWJlKCk7XG4gICAgICBpZiAoZnRyPy5uYXRpdmVFbGVtZW50ICYmIHN1Ym1pdE9uRW50ZXJLZXkpXG4gICAgICAgIGxpc3RlblRvS2V5ID0gZnJvbUV2ZW50KGZ0ci5uYXRpdmVFbGVtZW50LCAna2V5ZG93bicpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcbiAgICAgICAgICAgIGZpbHRlcihcbiAgICAgICAgICAgICAgKHI6IEtleWJvYXJkRXZlbnQpID0+IChyLmNvZGUgPT09ICdFbnRlcicgfHwgci5rZXlDb2RlID09PSAxMykgJiYgdGhpcy5mb3JtKCkudmFsaWQsXG4gICAgICAgICAgICApLFxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKChyOiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN1Ym1pdCh0aGlzLnN1Ym1pdEJ0blJlZigpKTtcbiAgICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGluaXQoc2NoZW1hOiBJRm9ybVNjaGVtYTxURm9ybUdyb3VwPltdKSB7XG4gICAgLy8gZGVidWdnZXI7XG4gICAgdGhpcy5vbkRlc3Ryb3koKTtcbiAgICB0aGlzLl9zZXRGb3JtU2NoZW1hcyhzY2hlbWEgfHwgW10pO1xuICAgIGlmIChzY2hlbWEpIGZvciAoY29uc3Qgc2NoZW1lIG9mIHNjaGVtYSkgdGhpcy5oYW5kbGVGb3JtU2NoZW1lKHNjaGVtZSk7XG4gICAgaWYgKHNjaGVtYSlcbiAgICAgIGZvciAoY29uc3Qgc2NoZW1lIG9mIHNjaGVtYSlcbiAgICAgICAgaWYgKHNjaGVtZS50cmlnZ2VyT25DaGFuZ2VPbkluaXQpIHtcbiAgICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLmZvcm0oKT8uZ2V0UmF3VmFsdWUoKTtcbiAgICAgICAgICBzY2hlbWUub25DaGFuZ2VGdW5jKGZvcm1WYWx1ZSwgZm9ybVZhbHVlW3NjaGVtZS5maWVsZD8udG9TdHJpbmcoKV0sIHRoaXMpO1xuICAgICAgICB9XG4gIH1cblxuICBoYW5kbGVGb3JtU2NoZW1lKHNjaGVtZTogSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD4pIHtcbiAgICBzY2hlbWUuaWQgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdlbmVyYXRlVVVJRCgpO1xuICAgIGlmIChzY2hlbWUuc3RhY2tlZCA9PSBudWxsKSBzY2hlbWUuc3RhY2tlZCA9IHRydWU7XG4gICAgaWYgKHNjaGVtZS5zaG93VmFsaWRhdGlvbk1zZyA9PSBudWxsKSBzY2hlbWUuc2hvd1ZhbGlkYXRpb25Nc2cgPSB0cnVlO1xuICAgIGlmICh0aGlzLmZvcm1TZXJ2aWNlLmNvbmZpZy5zaG93VmFsaWRhdGlvbk1lc3NhZ2VzQnlEZWZhdWx0KVxuICAgICAgaWYgKHNjaGVtZS5hdXRvUGlja1ZhbHVlRmllbGQgPT0gbnVsbCAmJiAoIXNjaGVtZS52YWx1ZUZpZWxkIHx8ICFzY2hlbWUubGFiZWxGaWVsZCkpXG4gICAgICAgIHNjaGVtZS5hdXRvUGlja1ZhbHVlRmllbGQgPSB0cnVlO1xuICAgIC8vIGlmICghdGhpcy5mb3JtLmNvbnRyb2xzW3NjaGVtZS5maWVsZCBhcyBhbnldKSBkZWJ1Z2dlcjtcbiAgICB0aGlzLnVwZGF0ZUZvcm1TY2hlbWEoc2NoZW1lLmZpZWxkLCBzY2hlbWUpO1xuXG4gICAgaWYgKHNjaGVtZS5vcHRpb25zSW5pdEZ1bmMpIHRoaXMuaGFuZGxlT3B0aW9uc0ZldGNoZWQoc2NoZW1lLCBzY2hlbWUub3B0aW9uc0luaXRGdW5jKTtcbiAgICBpZiAoc2NoZW1lLm9wdGlvbnNJbml0RnVuYzIpIHRoaXMuaGFuZGxlT3B0aW9uc0ZldGNoZWQoc2NoZW1lLCBzY2hlbWUub3B0aW9uc0luaXRGdW5jMigpKTtcbiAgICBpZiAoc2NoZW1lLm9uQ2hhbmdlRnVuYykge1xuICAgICAgaWYgKHNjaGVtZS5kZWJ1ZykgZGVidWdnZXI7XG4gICAgICB0aGlzLnN1YnNbc2NoZW1lLmZpZWxkPy50b1N0cmluZygpXSA9IHRoaXMuZm9ybSgpXG4gICAgICAgID8uY29udHJvbHNbc2NoZW1lLmZpZWxkPy50b1N0cmluZygpXT8udmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDApKVxuICAgICAgICAuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgICAgc2NoZW1lLm9uQ2hhbmdlRnVuYyh0aGlzLmZvcm1WYWx1ZSgpLCByLCB0aGlzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZU9wdGlvbnNGZXRjaGVkKHNjaGVtZTogSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD4sIG9wdGlvbnMkOiBPYnNlcnZhYmxlPGFueVtdPikge1xuICAgIG9wdGlvbnMkLnN1YnNjcmliZSgocikgPT4ge1xuICAgICAgLy8gc2NoZW1lLm9wdGlvbnMgPSByO1xuICAgICAgdGhpcy51cGRhdGVGb3JtU2NoZW1hKHNjaGVtZS5maWVsZCwgeyBvcHRpb25zOiByIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZGV0YWNoRm9ybVNjaGVtZShmaWVsZE5hbWU/OiBrZXlvZiBURm9ybUdyb3VwKSB7XG4gICAgdGhpcy5zdWJzW2ZpZWxkTmFtZSBhcyBzdHJpbmddPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1jaGFuZ2VFbWl0dGVyKCkge1xuICAgIHRoaXMubWNoYW5nZS5lbWl0KHRoaXMuZm9ybVZhbHVlKCkpO1xuICB9XG5cbiAgZ2V0Rm9ybVNjaGVtZSA9IChmaWVsZE5hbWU6IGtleW9mIFRGb3JtR3JvdXApID0+IHtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICByZXR1cm4gdGhpcy5mb3JtU2NoZW1hTWFwKClbZmllbGROYW1lIGFzIHN0cmluZ107XG4gIH07XG5cbiAgYWRkVG9Gb3JtU2NoZW1hKGZvcm1TY2hlbWU6IElGb3JtU2NoZW1hPFRGb3JtR3JvdXA+KSB7XG4gICAgdGhpcy5yZW1vdmVGcm9tRm9ybVNjaGVtYShmb3JtU2NoZW1lLmZpZWxkKTtcbiAgICB0aGlzLmhhbmRsZUZvcm1TY2hlbWUoZm9ybVNjaGVtZSk7XG4gIH1cblxuICB1cGRhdGVGb3JtU2NoZW1hKGZpZWxkTmFtZToga2V5b2YgVEZvcm1Hcm91cCwgc2NoZW1lOiBQYXJ0aWFsPElGb3JtU2NoZW1hPFRGb3JtR3JvdXA+Pikge1xuICAgIHJldHVybiBzdXBlci5fdXBkYXRlRm9ybVNjaGVtYShmaWVsZE5hbWUgYXMgc3RyaW5nLCBzY2hlbWUpO1xuICB9XG4gIHVwZGF0ZUFsbEZvcm1TY2hlbWEobWFwOiAoZm9ybUZpZWxkOiBJRm9ybVNjaGVtYTxURm9ybUdyb3VwPikgPT4gSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD4pIHtcbiAgICByZXR1cm4gc3VwZXIuX3VwZGF0ZUFsbEZvcm1TY2hlbWEobWFwKTtcbiAgfVxuXG4gIHJlbW92ZUZyb21Gb3JtU2NoZW1hKGZpZWxkTmFtZToga2V5b2YgVEZvcm1Hcm91cCkge1xuICAgIHRoaXMuZGV0YWNoRm9ybVNjaGVtZShmaWVsZE5hbWUpO1xuICAgIGNvbnN0IG9uUmVtb3ZlID0gdGhpcy5mb3JtU2NoZW1hTWFwKClbZmllbGROYW1lIGFzIHN0cmluZ10/Lm9uUmVtb3ZlRnVuYztcbiAgICBpZiAob25SZW1vdmUpIG9uUmVtb3ZlKHRoaXMuZm9ybVZhbHVlKCkgYXMgYW55LCB0aGlzLmZvcm1WYWx1ZSgpW2ZpZWxkTmFtZSBhcyBhbnldLCB0aGlzKTtcbiAgICB0aGlzLl9yZW1vdmVGb3JtU2NoZW1hKGZpZWxkTmFtZSBhcyBzdHJpbmcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldE9wdGlvbkxhYmVsKCRldmVudDogYW55LCBzY2hlbWU6IElGb3JtU2NoZW1hPFRGb3JtR3JvdXA+KSB7XG4gICAgc2NoZW1lLnNlbGVjdGVkT3B0aW9uTGFiZWwgPSAkZXZlbnQ7XG4gIH1cblxuICBhc3luYyBzdWJtaXQoYnRuPzogQnRuQ29tcG9uZW50KSB7XG4gICAgaWYgKHRoaXMuc3VibWl0RnVuYykge1xuICAgICAgYnRuPy5zZXRMb2FkZXIodHJ1ZSk7XG4gICAgICB0aGlzLl9sb2FkaW5nLnNldCh0cnVlKTtcbiAgICAgIGNvbnN0IGZvcm1WYWwgPSB0aGlzLmZvcm1WYWx1ZSgpO1xuICAgICAgdGhpcy5vblN1Ym1pdC5lbWl0KGZvcm1WYWwpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5zdWJtaXNzaW9uUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnN1Ym1pdEZ1bmMoZm9ybVZhbCk7XG4gICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaW5mbyh0aGlzLnN1Ym1pdFN1Y2Nlc3NUZXh0KCksIDEpO1xuICAgICAgICB0aGlzLnNhdmVkLmVtaXQodGhpcy5zdWJtaXNzaW9uUmVzcG9uc2UpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5pbmZvKGVycm9yLCAwKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgIGJ0bj8uc2V0TG9hZGVyKGZhbHNlKTtcbiAgICB9IGVsc2UgdGhpcy5vblN1Ym1pdC5lbWl0KHRoaXMuZm9ybVZhbHVlKCkpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUZvcm1TY2hlbWE8XG4gIFRGb3JtR3JvdXAgZXh0ZW5kcyB7XG4gICAgW0sgaW4ga2V5b2YgVEZvcm1Hcm91cF06IEFic3RyYWN0Q29udHJvbDxhbnksIGFueT47XG4gIH0gPSBhbnksXG4+IGV4dGVuZHMgSUJhc2VGb3JtU2NoZW1hPFRGb3JtR3JvdXAsIEZvcm1HZW5lcmF0b3JDb21wb25lbnQ8VEZvcm1Hcm91cD4+IHtcbiAgY2hpbGRyZW4/OiBJRm9ybVNjaGVtYTxURm9ybUdyb3VwPltdO1xuICBsYWJlbFR5cGU/OiBPcHRpb25MYWJlbFR5cGU7XG4gIGZpZWxkOiBrZXlvZiBURm9ybUdyb3VwO1xuICBzdWJUeXBlPzogSW5wdXRTdWJUeXBlO1xuICBwcmVzZXRWYWx1ZT86IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIElGb3JtU2NoZW1hMjxUU3RydWN0ID0gYW55PlxuICBleHRlbmRzIElGb3JtU2NoZW1hPHtcbiAgICBbSyBpbiBrZXlvZiBUU3RydWN0XT86IEFic3RyYWN0Q29udHJvbDxhbnksIGFueT47XG4gIH0+IHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUZvcm1PcHRpb25zIHtcbiAgW2ZpZWxkOiBzdHJpbmddOiBhbnk7XG59XG4iLCI8IS0tIHt7Zm9ybVZhbHVlKCl8anNvbn19XG57e2Zvcm1WYWxpZCgpfGpzb259fSAtLT5cbjxsb2FkZXIgW2xvYWRpbmddPVwiY29tcHV0ZWRMb2FkaW5nKClcIj5cbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtKClcIiAjZm9ybVRhZz5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInJvdyByb3ctY29scy17eyBncmlkU3R5bGUoKSB9fSByb3ctY29scy1tZC17eyBncmlkTURTdHlsZSgpIH19IHJvdy1jb2xzLWxnLXt7XG4gICAgICAgIGdyaWRMR1N0eWxlKClcbiAgICAgIH19IHJvdy1jb2xzLXh4bC17eyBncmlkWFhMU3R5bGUoKSB9fSBhbGlnbi1pdGVtcy1jZW50ZXIge3sgZm9ybUdyaWRDbGFzcygpIH19XCI+XG4gICAgICBAZm9yIChzY2hlbWUgb2YgY29tcHV0ZWRGb3JtU2NoZW1hKCk7IHRyYWNrIHNjaGVtZS5pZCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIHt7IHNjaGVtZS5jbHMgfX0gXCI+XG4gICAgICAgICAgQHN3aXRjaCAodHJ1ZSkge1xuICAgICAgICAgICAgQGNhc2UgKHNjaGVtZS50eXBlID09ICd0ZWwnKSB7XG4gICAgICAgICAgICAgIDxhcHAtcGhvbmUtbnVtYmVyXG4gICAgICAgICAgICAgICAgW2Zvcm1dPVwic2NoZW1lLmZvcm0gfHwgZm9ybSgpXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwic2NoZW1lLmxhYmVsXCJcbiAgICAgICAgICAgICAgICBbY2xlYXJPbkRpc2FibGVdPVwic2NoZW1lLmNsZWFyT25EaXNhYmxlXCJcbiAgICAgICAgICAgICAgICBbc3RhY2tlZF09XCJzY2hlbWUuc3RhY2tlZFwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwic2NoZW1lLmZpZWxkXCJcbiAgICAgICAgICAgICAgICBbbm9Gb3JtYXRdPVwic2NoZW1lLm5vRm9ybWF0XCJcbiAgICAgICAgICAgICAgICBbdmVyYm9zZV09XCJzY2hlbWUudmVyYm9zZVwiXG4gICAgICAgICAgICAgICAgW2RlYnVnXT1cInNjaGVtZS5kZWJ1Z1wiXG4gICAgICAgICAgICAgICAgKG1jaGFuZ2UpPVwibWNoYW5nZUVtaXR0ZXIoKVwiXG4gICAgICAgICAgICAgICAgW3Nob3dWYWxpZGF0aW9uXT1cInNjaGVtZS5zaG93VmFsaWRhdGlvblwiXG4gICAgICAgICAgICAgICAgW2F1dG9QaWNrVmFsdWVGaWVsZF09XCJzY2hlbWUuYXV0b1BpY2tWYWx1ZUZpZWxkXCJcbiAgICAgICAgICAgICAgICBbc2hvd1JlcXVpcmVkVGFnXT1cInNjaGVtZS5zaG93UmVxdWlyZWRUYWdcIlxuICAgICAgICAgICAgICAgIFtzaG93VmFsaWRhdGlvbk1zZ109XCJzY2hlbWUuc2hvd1ZhbGlkYXRpb25Nc2dcIlxuICAgICAgICAgICAgICAgIFtzaG93VmFsaWRhdGlvbkljb25dPVwic2NoZW1lLnNob3dWYWxpZGF0aW9uSWNvblwiXG4gICAgICAgICAgICAgICAgW2NvdW50cnlDb2RlM109XCJzY2hlbWUuY291bnRyeUNvZGUzXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgICBzY2hlbWUuZGlzYWJsZWQgfHxcbiAgICAgICAgICAgICAgICAgIChzY2hlbWUuZGlzYWJsZWRJZiB8IGZ1bmN0aW9uQ2FsbGVyMjogZm9ybVZhbHVlKCkgOiAoc2NoZW1lLmZpZWxkIHwgdG9BbnkpKVxuICAgICAgICAgICAgICAgIFwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAY2FzZSAoc2NoZW1lLnR5cGUgPT0gJ2F1dG9jb21wbGV0ZScpIHtcbiAgICAgICAgICAgICAgPGFwcC1hdXRvY29tcGxldGVcbiAgICAgICAgICAgICAgICBbZm9ybV09XCJzY2hlbWUuZm9ybSB8fCBmb3JtKClcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJzY2hlbWUubGFiZWxcIlxuICAgICAgICAgICAgICAgIFtjbGVhck9uRGlzYWJsZV09XCJzY2hlbWUuY2xlYXJPbkRpc2FibGVcIlxuICAgICAgICAgICAgICAgIFtzdGFja2VkXT1cInNjaGVtZS5zdGFja2VkXCJcbiAgICAgICAgICAgICAgICBbdmVyYm9zZV09XCJzY2hlbWUudmVyYm9zZVwiXG4gICAgICAgICAgICAgICAgW3ByZXNldFZhbHVlXT1cInNjaGVtZS5wcmVzZXRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgW2xhYmVsRmllbGRdPVwic2NoZW1lLmxhYmVsRmllbGRcIlxuICAgICAgICAgICAgICAgIFtub0Zvcm1hdF09XCJzY2hlbWUubm9Gb3JtYXRcIlxuICAgICAgICAgICAgICAgIFtsYWJlbFR5cGVdPVwic2NoZW1lLmxhYmVsVHlwZSB8IHRvQW55XCJcbiAgICAgICAgICAgICAgICAobWNoYW5nZSk9XCJtY2hhbmdlRW1pdHRlcigpXCJcbiAgICAgICAgICAgICAgICAobVNlbGVjdGVkT3B0aW9uTGFiZWwpPVwic2V0T3B0aW9uTGFiZWwoJGV2ZW50LCBzY2hlbWUpXCJcbiAgICAgICAgICAgICAgICBbbmFtZV09XCJzY2hlbWUuZmllbGRcIlxuICAgICAgICAgICAgICAgIFtkZWJ1Z109XCJzY2hlbWUuZGVidWdcIlxuICAgICAgICAgICAgICAgIFtzZXRGb3JtYXR0ZWRWYWx1ZV09XCJzY2hlbWUuc2V0Q29udHJvbEZvcm1hdHRlZFZhbHVlXCJcbiAgICAgICAgICAgICAgICBbc2hvd1JlcXVpcmVkVGFnXT1cInNjaGVtZS5zaG93UmVxdWlyZWRUYWdcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25Gb3JtYXR0ZXJdPVwic2NoZW1lLm9wdGlvbkZvcm1hdHRlclwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlRmllbGRdPVwic2NoZW1lLnZhbHVlRmllbGRcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25zRnVuY109XCJzY2hlbWUub3B0aW9uc0Z1bmNcIlxuICAgICAgICAgICAgICAgIFtzaG93VmFsaWRhdGlvbk1zZ109XCJzY2hlbWUuc2hvd1ZhbGlkYXRpb25Nc2dcIlxuICAgICAgICAgICAgICAgIFthdXRvUGlja1ZhbHVlRmllbGRdPVwic2NoZW1lLmF1dG9QaWNrVmFsdWVGaWVsZFwiXG4gICAgICAgICAgICAgICAgW29wdGlvbnNdPVwic2NoZW1lLm9wdGlvbnMgfHwgb3B0aW9uc01hcCgpW3NjaGVtZS5maWVsZCB8IHRvQW55XVwiXG4gICAgICAgICAgICAgICAgW2hpbnRdPVwic2NoZW1lLmhpbnRcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICAgICAgICAgICAgIHNjaGVtZS5kaXNhYmxlZCB8fFxuICAgICAgICAgICAgICAgICAgKHNjaGVtZS5kaXNhYmxlZElmIHwgZnVuY3Rpb25DYWxsZXIyOiBmb3JtVmFsdWUoKSA6IChzY2hlbWUuZmllbGQgfCB0b0FueSkpXG4gICAgICAgICAgICAgICAgXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlIChzY2hlbWUudHlwZSA9PSAncmljaHRleHQnKSB7XG4gICAgICAgICAgICAgIDxyaWNoLXRleHQtZWRpdG9yLXJmXG4gICAgICAgICAgICAgICAgW2Zvcm1dPVwic2NoZW1lLmZvcm0gfHwgZm9ybSgpXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwic2NoZW1lLmxhYmVsIVwiXG4gICAgICAgICAgICAgICAgW2NsZWFyT25EaXNhYmxlXT1cInNjaGVtZS5jbGVhck9uRGlzYWJsZSFcIlxuICAgICAgICAgICAgICAgIFtzdGFja2VkXT1cInNjaGVtZS5zdGFja2VkXCJcbiAgICAgICAgICAgICAgICBbdmVyYm9zZV09XCJzY2hlbWUudmVyYm9zZVwiXG4gICAgICAgICAgICAgICAgW2xhYmVsRmllbGRdPVwic2NoZW1lLmxhYmVsRmllbGQhXCJcbiAgICAgICAgICAgICAgICBbbm9Gb3JtYXRdPVwic2NoZW1lLm5vRm9ybWF0IVwiXG4gICAgICAgICAgICAgICAgW2xhYmVsVHlwZV09XCJzY2hlbWUubGFiZWxUeXBlIHwgdG9BbnlcIlxuICAgICAgICAgICAgICAgIChtY2hhbmdlKT1cIm1jaGFuZ2VFbWl0dGVyKClcIlxuICAgICAgICAgICAgICAgIChtU2VsZWN0ZWRPcHRpb25MYWJlbCk9XCJzZXRPcHRpb25MYWJlbCgkZXZlbnQsIHNjaGVtZSlcIlxuICAgICAgICAgICAgICAgIFtuYW1lXT1cInNjaGVtZS5maWVsZFwiXG4gICAgICAgICAgICAgICAgW2RlYnVnXT1cInNjaGVtZS5kZWJ1ZyFcIlxuICAgICAgICAgICAgICAgIFtzZXRGb3JtYXR0ZWRWYWx1ZV09XCJzY2hlbWUuc2V0Q29udHJvbEZvcm1hdHRlZFZhbHVlXCJcbiAgICAgICAgICAgICAgICBbc2hvd1JlcXVpcmVkVGFnXT1cInNjaGVtZS5zaG93UmVxdWlyZWRUYWchXCJcbiAgICAgICAgICAgICAgICBbb3B0aW9uRm9ybWF0dGVyXT1cInNjaGVtZS5vcHRpb25Gb3JtYXR0ZXIhXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVGaWVsZF09XCJzY2hlbWUudmFsdWVGaWVsZCFcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25zRnVuY109XCJzY2hlbWUub3B0aW9uc0Z1bmMhXCJcbiAgICAgICAgICAgICAgICBbc2hvd1ZhbGlkYXRpb25Nc2ddPVwic2NoZW1lLnNob3dWYWxpZGF0aW9uTXNnXCJcbiAgICAgICAgICAgICAgICBbYXV0b1BpY2tWYWx1ZUZpZWxkXT1cInNjaGVtZS5hdXRvUGlja1ZhbHVlRmllbGQhXCJcbiAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJzY2hlbWUub3B0aW9ucyB8fCBvcHRpb25zTWFwKClbc2NoZW1lLmZpZWxkIHwgdG9BbnldXCJcbiAgICAgICAgICAgICAgICBbaGludF09XCJzY2hlbWUuaGludCFcIlxuICAgICAgICAgICAgICAgIFttYXhMZW5ndGhdPVwic2NoZW1lLm1heExlbmd0aFwiXG4gICAgICAgICAgICAgICAgW21pbkxlbmd0aF09XCJzY2hlbWUubWluTGVuZ3RoXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgICBzY2hlbWUuZGlzYWJsZWQgfHxcbiAgICAgICAgICAgICAgICAgIChzY2hlbWUuZGlzYWJsZWRJZiEgfCBmdW5jdGlvbkNhbGxlcjI6IGZvcm1WYWx1ZSgpIDogKHNjaGVtZS5maWVsZCB8IHRvQW55KSlcbiAgICAgICAgICAgICAgICBcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGRlZmF1bHQge1xuICAgICAgICAgICAgICA8YXBwLWlucHV0LWJhc2ljXG4gICAgICAgICAgICAgICAgW25vRm9ybWF0XT1cInNjaGVtZS5ub0Zvcm1hdFwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwic2NoZW1lLmZpZWxkXCJcbiAgICAgICAgICAgICAgICBbZm9ybV09XCJzY2hlbWUuZm9ybSB8fCBmb3JtKClcIlxuICAgICAgICAgICAgICAgIFtjbGVhck9uRGlzYWJsZV09XCJzY2hlbWUuY2xlYXJPbkRpc2FibGVcIlxuICAgICAgICAgICAgICAgIFt0eXBlXT1cInNjaGVtZS50eXBlXCJcbiAgICAgICAgICAgICAgICBbdmVyYm9zZV09XCJzY2hlbWUudmVyYm9zZVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlRmllbGRdPVwic2NoZW1lLnZhbHVlRmllbGRcIlxuICAgICAgICAgICAgICAgIFthdXRvUGlja1ZhbHVlRmllbGRdPVwic2NoZW1lLmF1dG9QaWNrVmFsdWVGaWVsZFwiXG4gICAgICAgICAgICAgICAgW3ByZXNldFZhbHVlXT1cInNjaGVtZS5wcmVzZXRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgW3N0YWNrZWRdPVwic2NoZW1lLnN0YWNrZWRcIlxuICAgICAgICAgICAgICAgIFtsYWJlbFR5cGVdPVwic2NoZW1lLmxhYmVsVHlwZSB8IHRvQW55XCJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZFNpZ25hbF09XCJzY2hlbWUuY2hlY2tlZFwiXG4gICAgICAgICAgICAgICAgW3Nob3dWYWxpZGF0aW9uXT1cIiEhc2NoZW1lLmFzeW5jVmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgICAgW3Nob3dWYWxpZGF0aW9uSWNvbl09XCIhIXNjaGVtZS5hc3luY1ZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAgIFtkZWJ1Z109XCJzY2hlbWUuZGVidWdcIlxuICAgICAgICAgICAgICAgIChtY2hhbmdlKT1cIm1jaGFuZ2VFbWl0dGVyKClcIlxuICAgICAgICAgICAgICAgIFtzZXRGb3JtYXR0ZWRWYWx1ZV09XCJzY2hlbWUuc2V0Q29udHJvbEZvcm1hdHRlZFZhbHVlXCJcbiAgICAgICAgICAgICAgICBbc2hvd1JlcXVpcmVkVGFnXT1cInNjaGVtZS5zaG93UmVxdWlyZWRUYWdcIlxuICAgICAgICAgICAgICAgIFtsYWJlbEZpZWxkXT1cInNjaGVtZS5sYWJlbEZpZWxkXCJcbiAgICAgICAgICAgICAgICBbb3B0aW9uRm9ybWF0dGVyXT1cInNjaGVtZS5vcHRpb25Gb3JtYXR0ZXJcIlxuICAgICAgICAgICAgICAgIChtU2VsZWN0ZWRPcHRpb25MYWJlbCk9XCJzZXRPcHRpb25MYWJlbCgkZXZlbnQsIHNjaGVtZSlcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInNjaGVtZS5vcHRpb25zIHx8IG9wdGlvbnNNYXAoKVtzY2hlbWUuZmllbGQgfCB0b0FueV1cIlxuICAgICAgICAgICAgICAgIFtkZWNpbWFsUG9pbnRzXT1cInNjaGVtZS5kZWNpbWFsUG9pbnRzXCJcbiAgICAgICAgICAgICAgICBbaGludF09XCJzY2hlbWUuaGludFwiXG4gICAgICAgICAgICAgICAgW21heF09XCJzY2hlbWUubWF4XCJcbiAgICAgICAgICAgICAgICBbbWluXT1cInNjaGVtZS5taW5cIlxuICAgICAgICAgICAgICAgIFttYXhMZW5ndGhdPVwic2NoZW1lLm1heExlbmd0aFwiXG4gICAgICAgICAgICAgICAgW21pbkxlbmd0aF09XCJzY2hlbWUubWluTGVuZ3RoXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2NoZW1lLnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwic2NoZW1lLmxhYmVsXCJcbiAgICAgICAgICAgICAgICBbc2hvd1ZhbGlkYXRpb25Nc2ddPVwic2NoZW1lLnNob3dWYWxpZGF0aW9uTXNnXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgICBzY2hlbWUuZGlzYWJsZWQgfHxcbiAgICAgICAgICAgICAgICAgIChzY2hlbWUuZGlzYWJsZWRJZiB8IGZ1bmN0aW9uQ2FsbGVyMjogZm9ybVZhbHVlKCkgOiAoc2NoZW1lLmZpZWxkIHwgdG9BbnkpKVxuICAgICAgICAgICAgICAgIFwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicm93IHJvdy1jb2xzLWF1dG8ganVzdGlmeS1jb250ZW50LWVuZFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIlwiPlxuICAgICAgICBAaWYgKHNob3dTdWJtaXRCdG4oKSkge1xuICAgICAgICAgIDxhcHAtYnRuXG4gICAgICAgICAgICBbdGV4dF09XCJzdWJtaXRCdG5UZXh0KClcIlxuICAgICAgICAgICAgZ3JvdXA9XCJzdWJtaXRcIlxuICAgICAgICAgICAgW2Zvcm1dPVwiZm9ybSgpXCJcbiAgICAgICAgICAgIChtY2xpY2spPVwic3VibWl0KHN1Ym1pdEJ0bilcIlxuICAgICAgICAgICAgI3N1Ym1pdEJ0biAvPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoc3VibWl0QnRuVGVtcGxhdGUoKSkge1xuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdWJtaXRCdG5UZW1wbGF0ZSgpXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG48L2xvYWRlcj5cbiJdfQ==
250
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1nZW5lcmF0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NoYXJlZC9jb21wb25lbnRzL2Zvcm0tZ2VuZXJhdG9yL2Zvcm0tZ2VuZXJhdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy9mb3JtLWdlbmVyYXRvci9mb3JtLWdlbmVyYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUdULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUVOLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsV0FBVyxFQUNYLFNBQVMsRUFDVCxXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxTQUFTLEVBQVcsTUFBTSxXQUFXLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQVEsU0FBUyxFQUFPLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RixPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsbUJBQW1CLEVBQW1CLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1B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QixZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZixTQUFTO3FCQUNWO3dEQUtRLFFBQVE7c0JBQWhCLEtBQUs7Z0JBT0ksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUVHLEtBQUs7c0JBQWQsTUFBTTtnQkFDRSxVQUFVO3NCQUFsQixLQUFLO2dCQXFDOEIsV0FBVztzQkFBOUMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUU7Z0JBR1ksaUJBQWlCO3NCQUExRCxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFO2dCQWFmLE9BQU87c0JBQTNCLEtBQUs7dUJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIERlc3Ryb3lSZWYsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG1vZGVsLFxuICBzaWduYWwsXG4gIHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIEZvcm1Db250cm9sLFxuICBGb3JtR3JvdXAsXG4gIEZvcm1zTW9kdWxlLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBWYWxpZGF0b3JzLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIGxhc3QsIHN3aXRjaE1hcCwgdGFwLCBtYXAsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEZ1bmN0aW9uQ2FsbGVyMiwgVG9BbnlQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvdXRpbGl0eS5waXBlJztcbmltcG9ydCB7IEJ0bkNvbXBvbmVudCB9IGZyb20gJy4uL2J0bi9idG4uY29tcG9uZW50JztcbmltcG9ydCB7IElucHV0QmFzaWNDb21wb25lbnQsIE9wdGlvbkxhYmVsVHlwZSB9IGZyb20gJy4uL2lucHV0L2lucHV0LWJhc2ljLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBdXRvY29tcGxldGVDb21wb25lbnQgfSBmcm9tICcuLi9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uTWVzc2FnZUNvbXBvbmVudCB9IGZyb20gJy4uL2lucHV0L3ZhbGlkYXRpb24tbWVzc2FnZS92YWxpZGF0aW9uLW1lc3NhZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IFBob25lTnVtYmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vcGhvbmUtbnVtYmVyL3Bob25lLW51bWJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBOZ1N3aXRjaERlZmF1bHQsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vbG9hZGVyL2xvYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW5wdXRTdWJUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2luZGV4Lm1vZGVsJztcbmltcG9ydCB7IFJpY2hUZXh0RWRpdG9yUkZDb21wb25lbnQgfSBmcm9tICcuLi9yaWNoLXRleHQtZWRpdG9yLXJmL3JpY2gtdGV4dC1lZGl0b3ItcmYuY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1HZW5lcmF0b3JTZXJ2aWNlIH0gZnJvbSAnLi9mb3JtLWdlbmVyYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VGb3JtR2VuZXJhdG9yLCBJQmFzZUZvcm1TY2hlbWEgfSBmcm9tICcuL2Zvcm0tZ2VuZXJhdG9yLmJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUsIHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG4vKipcbiAqIEZvcm0gc2hvdWxkIGJlIHNldCBiZWZvcmUgdGhlIHRoZSBmb3JtU2NoZW1hXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Zvcm0tZ2VuZXJhdG9yJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tZ2VuZXJhdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS1nZW5lcmF0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgLy8gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgTG9hZGVyQ29tcG9uZW50LFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBQaG9uZU51bWJlckNvbXBvbmVudCxcbiAgICBWYWxpZGF0aW9uTWVzc2FnZUNvbXBvbmVudCxcbiAgICBBdXRvY29tcGxldGVDb21wb25lbnQsXG4gICAgTmdTd2l0Y2hEZWZhdWx0LFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgSW5wdXRCYXNpY0NvbXBvbmVudCxcbiAgICBSaWNoVGV4dEVkaXRvclJGQ29tcG9uZW50LFxuICAgIEJ0bkNvbXBvbmVudCxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZ1bmN0aW9uQ2FsbGVyMixcbiAgICBUb0FueVBpcGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1HZW5lcmF0b3JDb21wb25lbnQ8XG4gIFRGb3JtR3JvdXAgZXh0ZW5kcyB7IFtLIGluIGtleW9mIFRGb3JtR3JvdXBdOiBBYnN0cmFjdENvbnRyb2w8YW55LCBhbnk+IH0sXG4+IGV4dGVuZHMgQmFzZUZvcm1HZW5lcmF0b3I8VEZvcm1Hcm91cCwgSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD4+IHtcbiAgQElucHV0KCkga2V5RmllbGQ6ICdmaWVsZCcgfCAnbGFiZWwnID0gJ2ZpZWxkJztcbiAgcmVhZG9ubHkgcHJlc2V0VmFsdWVGb3JTaW5nbGVPcHRpb24gPSBpbnB1dChmYWxzZSk7XG4gIHJlYWRvbmx5IGlzQ3JlYXRlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgc3VibWl0T25FbnRlcktleSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgZm9ybVRhZ1JlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPEhUTUxGb3JtRWxlbWVudD4+KCdmb3JtVGFnJyk7XG5cbiAgLyoqRW1pdHRlZCBqdXN0IGJlZm9yZSBjYWxsaW5nIHRoZSBzYXZlIGZ1bmN0aW9uICovXG4gIEBPdXRwdXQoKSBvblN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbWNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAvKipFbWl0dGVkIGFmdGVyIHJlY2VpdmluZyBmZWVkYmFjayBmcm9tIHRoZSBzdWJtaXQgZnVuY3Rpb24gKi9cbiAgQE91dHB1dCgpIHNhdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBJbnB1dCgpIHN1Ym1pdEZ1bmM6ICh2YWx1ZTogYW55KSA9PiBQcm9taXNlPGFueT47XG4gIHJlYWRvbmx5IHN1Ym1pdEJ0blRleHQgPSBpbnB1dCgnU3VibWl0Jyk7XG4gIHJlYWRvbmx5IHN1Ym1pdEJ0blRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8YW55Pj4oKTtcbiAgcmVhZG9ubHkgc3VibWl0U3VjY2Vzc1RleHQgPSBpbnB1dCgnU2F2ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gIHJlYWRvbmx5IHNob3dTdWJtaXRCdG4gPSBpbnB1dCh0cnVlKTtcblxuICByZWFkb25seSBncmlkU3R5bGUgPSBpbnB1dDxudW1iZXIgfCAnYXV0byc+KCk7XG4gIHJlYWRvbmx5IGdyaWRNRFN0eWxlID0gaW5wdXQ8bnVtYmVyIHwgJ2F1dG8nPigpO1xuICByZWFkb25seSBncmlkTEdTdHlsZSA9IGlucHV0PG51bWJlciB8ICdhdXRvJz4oKTtcbiAgcmVhZG9ubHkgZ3JpZFhYTFN0eWxlID0gaW5wdXQ8bnVtYmVyIHwgJ2F1dG8nPigpO1xuXG4gIHJlYWRvbmx5IGZvcm1HcmlkQ2xhc3MgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHVzZUxvYWRlciA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGxvYWRpbmcgPSBpbnB1dDxib29sZWFuPigpO1xuXG4gIHJlYWRvbmx5IF9sb2FkaW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICByZWFkb25seSBjb21wdXRlZExvYWRpbmcgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMudXNlTG9hZGVyKCkgPyB0aGlzLmxvYWRpbmcoKSB8fCB0aGlzLl9sb2FkaW5nKCkgOiBmYWxzZSxcbiAgKTtcblxuICByZWFkb25seSBzdWJtaXRCdG5SZWYgPSB2aWV3Q2hpbGQ8QnRuQ29tcG9uZW50Pignc3VibWl0QnRuJyk7XG4gIHJlYWRvbmx5IGZvcm0gPSBtb2RlbDxGb3JtR3JvdXA8VEZvcm1Hcm91cD4+KCk7XG5cbiAgcmVhZG9ubHkgIGZvcm1WYWx1ZSA9IHRvU2lnbmFsKFxuICAgIHRvT2JzZXJ2YWJsZSh0aGlzLmZvcm0pLnBpcGUoXG4gICAgICBmaWx0ZXIoKCkgPT4gISF0aGlzLmZvcm0oKSksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgdGhpcy5mb3JtKClcbiAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUobWFwKCgpID0+IHRoaXMuZm9ybSgpPy5nZXRSYXdWYWx1ZSgpIHx8IHt9KSlcbiAgICAgICAgICAucGlwZShzdGFydFdpdGgodGhpcy5mb3JtKCk/LmdldFJhd1ZhbHVlKCkgfHwge30pKSxcbiAgICAgICksXG4gICAgKSxcbiAgICAvLyB7IGluaXRpYWxWYWx1ZTogdGhpcy5mb3JtKCk/LmdldFJhd1ZhbHVlKCkgfHwge30gfSxcbiAgKTtcblxuICBzdWJtaXNzaW9uUmVzcG9uc2U6IGFueTtcbiAgQElucHV0KHsgYWxpYXM6ICdmb3JtU2NoZW1hJyB9KSBzZXQgX2Zvcm1TY2hlbWEodjogSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD5bXSkge1xuICAgIHRoaXMuaW5pdChjbG9uZURlZXAodi5maWx0ZXIoKHgpID0+IHgpKSk7XG4gIH1cbiAgQElucHV0KHsgYWxpYXM6ICdmb3JtU2NoZW1hTm9Gb3JtJyB9KSBzZXQgX2Zvcm1TY2hlbWFOb0Zvcm0odjogSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD5bXSkge1xuICAgIGlmICh2KSB7XG4gICAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygdikge1xuICAgICAgICBmb3JtLmFkZENvbnRyb2woXG4gICAgICAgICAgaXRlbS5maWVsZD8udG9TdHJpbmcoKSxcbiAgICAgICAgICBuZXcgRm9ybUNvbnRyb2woaXRlbS52YWx1ZSwgW10uY29uY2F0KGl0ZW0uaXNSZXF1aXJlZCA/IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSA6IFtdKSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLmZvcm0uc2V0KGZvcm0gYXMgYW55IGFzIEZvcm1Hcm91cDxURm9ybUdyb3VwPik7XG4gICAgICB0aGlzLl9mb3JtU2NoZW1hID0gdjtcbiAgICB9XG4gIH1cbiAgQElucHV0KCdpc1Nob3cnKSBzZXQgX2lzU2hvdyh2OiBib29sZWFuKSB7XG4gICAgaWYgKHYpIHRoaXMuZm9ybSgpPy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICBlbHNlIHRoaXMuZm9ybSgpPy5lbmFibGUoKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHYpIHRoaXMuZm9ybSgpPy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIGVsc2UgdGhpcy5mb3JtKCk/LmVuYWJsZSgpO1xuICAgIH0sIDUwMCk7XG4gIH1cbiAgcmVhZG9ubHkgICBvcHRpb25zTWFwID0gc2lnbmFsPElGb3JtT3B0aW9ucz4oe30pO1xuICAvLyBmb3JtVmFsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5mb3JtPy5nZXRSYXdWYWx1ZSgpKTtcblxuICByZWFkb25seSAgIGNvbXB1dGVkRm9ybVNjaGVtYSA9IGNvbXB1dGVkPElGb3JtU2NoZW1hPFRGb3JtR3JvdXA+W10+KCgpID0+IHtcbiAgICBjb25zdCBmb3JtU2NoZW1hID0gdGhpcy5mb3JtU2NoZW1hKCkgfHwgW10sXG4gICAgICBwcmVzZXRWYWx1ZUZvclNpbmdsZU9wdGlvbiA9IHRoaXMucHJlc2V0VmFsdWVGb3JTaW5nbGVPcHRpb24oKSxcbiAgICAgIGlzQ3JlYXRlID0gdGhpcy5pc0NyZWF0ZSgpLFxuICAgICAgcmV0OiBJRm9ybVNjaGVtYTxURm9ybUdyb3VwPltdID0gW107XG4gICAgZm9ybVNjaGVtYS5mb3JFYWNoKChzY2hlbWUpID0+IHtcbiAgICAgIGlmICghc2NoZW1lLmhpZGRlbikge1xuICAgICAgICBpZiAoaXNDcmVhdGUpXG4gICAgICAgICAgc2NoZW1lLnByZXNldFZhbHVlID1cbiAgICAgICAgICAgIHNjaGVtZS5wcmVzZXRWYWx1ZSA9PSBudWxsID8gcHJlc2V0VmFsdWVGb3JTaW5nbGVPcHRpb24gOiBzY2hlbWUucHJlc2V0VmFsdWU7XG4gICAgICAgIHJldC5wdXNoKHNjaGVtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHJldC5zb21lKCh4KSA9PiAheC5maWVsZCkpIGRlYnVnZ2VyO1xuICAgIHJldHVybiByZXQ7XG4gIH0pO1xuICAvLyBtaXNjSW5kZXg6IFRNaXNjSW5kZXg7XG4gIHB1YmxpYyBmb3JtU2VydmljZSA9IGluamVjdChGb3JtR2VuZXJhdG9yU2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGxldCBsaXN0ZW5Ub0tleTogU3Vic2NyaXB0aW9uO1xuICAgIHRoaXMuZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuICAgICAgbGlzdGVuVG9LZXk/LnVuc3Vic2NyaWJlKCk7XG4gICAgfSk7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGZ0ciA9IHRoaXMuZm9ybVRhZ1JlZigpLFxuICAgICAgICBzdWJtaXRPbkVudGVyS2V5ID0gdGhpcy5zdWJtaXRPbkVudGVyS2V5KCk7XG4gICAgICAvLyBkZWJ1Z2dlcjtcblxuICAgICAgbGlzdGVuVG9LZXk/LnVuc3Vic2NyaWJlKCk7XG4gICAgICBpZiAoZnRyPy5uYXRpdmVFbGVtZW50ICYmIHN1Ym1pdE9uRW50ZXJLZXkpXG4gICAgICAgIGxpc3RlblRvS2V5ID0gZnJvbUV2ZW50KGZ0ci5uYXRpdmVFbGVtZW50LCAna2V5ZG93bicpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcbiAgICAgICAgICAgIGZpbHRlcihcbiAgICAgICAgICAgICAgKHI6IEtleWJvYXJkRXZlbnQpID0+IChyLmNvZGUgPT09ICdFbnRlcicgfHwgci5rZXlDb2RlID09PSAxMykgJiYgdGhpcy5mb3JtKCkudmFsaWQsXG4gICAgICAgICAgICApLFxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKChyOiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN1Ym1pdCh0aGlzLnN1Ym1pdEJ0blJlZigpKTtcbiAgICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGluaXQoc2NoZW1hOiBJRm9ybVNjaGVtYTxURm9ybUdyb3VwPltdKSB7XG4gICAgLy8gZGVidWdnZXI7XG4gICAgdGhpcy5vbkRlc3Ryb3koKTtcbiAgICB0aGlzLl9zZXRGb3JtU2NoZW1hcyhzY2hlbWEgfHwgW10pO1xuICAgIGlmIChzY2hlbWEpIGZvciAoY29uc3Qgc2NoZW1lIG9mIHNjaGVtYSkgdGhpcy5oYW5kbGVGb3JtU2NoZW1lKHNjaGVtZSk7XG4gICAgaWYgKHNjaGVtYSlcbiAgICAgIGZvciAoY29uc3Qgc2NoZW1lIG9mIHNjaGVtYSlcbiAgICAgICAgaWYgKHNjaGVtZS50cmlnZ2VyT25DaGFuZ2VPbkluaXQpIHtcbiAgICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLmZvcm0oKT8uZ2V0UmF3VmFsdWUoKTtcbiAgICAgICAgICBzY2hlbWUub25DaGFuZ2VGdW5jKGZvcm1WYWx1ZSwgZm9ybVZhbHVlW3NjaGVtZS5maWVsZD8udG9TdHJpbmcoKV0sIHRoaXMpO1xuICAgICAgICB9XG4gIH1cblxuICBoYW5kbGVGb3JtU2NoZW1lKHNjaGVtZTogSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD4pIHtcbiAgICBzY2hlbWUuaWQgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdlbmVyYXRlVVVJRCgpO1xuICAgIGlmIChzY2hlbWUuc3RhY2tlZCA9PSBudWxsKSBzY2hlbWUuc3RhY2tlZCA9IHRydWU7XG4gICAgaWYgKHNjaGVtZS5zaG93VmFsaWRhdGlvbk1zZyA9PSBudWxsKSBzY2hlbWUuc2hvd1ZhbGlkYXRpb25Nc2cgPSB0cnVlO1xuICAgIGlmICh0aGlzLmZvcm1TZXJ2aWNlLmNvbmZpZy5zaG93VmFsaWRhdGlvbk1lc3NhZ2VzQnlEZWZhdWx0KVxuICAgICAgaWYgKHNjaGVtZS5hdXRvUGlja1ZhbHVlRmllbGQgPT0gbnVsbCAmJiAoIXNjaGVtZS52YWx1ZUZpZWxkIHx8ICFzY2hlbWUubGFiZWxGaWVsZCkpXG4gICAgICAgIHNjaGVtZS5hdXRvUGlja1ZhbHVlRmllbGQgPSB0cnVlO1xuICAgIC8vIGlmICghdGhpcy5mb3JtLmNvbnRyb2xzW3NjaGVtZS5maWVsZCBhcyBhbnldKSBkZWJ1Z2dlcjtcbiAgICB0aGlzLnVwZGF0ZUZvcm1TY2hlbWEoc2NoZW1lLmZpZWxkLCBzY2hlbWUpO1xuXG4gICAgaWYgKHNjaGVtZS5vcHRpb25zSW5pdEZ1bmMpIHRoaXMuaGFuZGxlT3B0aW9uc0ZldGNoZWQoc2NoZW1lLCBzY2hlbWUub3B0aW9uc0luaXRGdW5jKTtcbiAgICBpZiAoc2NoZW1lLm9wdGlvbnNJbml0RnVuYzIpIHRoaXMuaGFuZGxlT3B0aW9uc0ZldGNoZWQoc2NoZW1lLCBzY2hlbWUub3B0aW9uc0luaXRGdW5jMigpKTtcbiAgICBpZiAoc2NoZW1lLm9uQ2hhbmdlRnVuYykge1xuICAgICAgaWYgKHNjaGVtZS5kZWJ1ZykgZGVidWdnZXI7XG4gICAgICB0aGlzLnN1YnNbc2NoZW1lLmZpZWxkPy50b1N0cmluZygpXSA9IHRoaXMuZm9ybSgpXG4gICAgICAgID8uY29udHJvbHNbc2NoZW1lLmZpZWxkPy50b1N0cmluZygpXT8udmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDApKVxuICAgICAgICAuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgICAgc2NoZW1lLm9uQ2hhbmdlRnVuYyh0aGlzLmZvcm1WYWx1ZSgpLCByLCB0aGlzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZU9wdGlvbnNGZXRjaGVkKHNjaGVtZTogSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD4sIG9wdGlvbnMkOiBPYnNlcnZhYmxlPGFueVtdPikge1xuICAgIG9wdGlvbnMkLnN1YnNjcmliZSgocikgPT4ge1xuICAgICAgLy8gc2NoZW1lLm9wdGlvbnMgPSByO1xuICAgICAgdGhpcy51cGRhdGVGb3JtU2NoZW1hKHNjaGVtZS5maWVsZCwgeyBvcHRpb25zOiByIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZGV0YWNoRm9ybVNjaGVtZShmaWVsZE5hbWU/OiBrZXlvZiBURm9ybUdyb3VwKSB7XG4gICAgdGhpcy5zdWJzW2ZpZWxkTmFtZSBhcyBzdHJpbmddPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1jaGFuZ2VFbWl0dGVyKCkge1xuICAgIHRoaXMubWNoYW5nZS5lbWl0KHRoaXMuZm9ybVZhbHVlKCkpO1xuICB9XG5cbiAgZ2V0Rm9ybVNjaGVtZSA9IChmaWVsZE5hbWU6IGtleW9mIFRGb3JtR3JvdXApID0+IHtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICByZXR1cm4gdGhpcy5mb3JtU2NoZW1hTWFwKClbZmllbGROYW1lIGFzIHN0cmluZ107XG4gIH07XG5cbiAgYWRkVG9Gb3JtU2NoZW1hKGZvcm1TY2hlbWU6IElGb3JtU2NoZW1hPFRGb3JtR3JvdXA+KSB7XG4gICAgdGhpcy5yZW1vdmVGcm9tRm9ybVNjaGVtYShmb3JtU2NoZW1lLmZpZWxkKTtcbiAgICB0aGlzLmhhbmRsZUZvcm1TY2hlbWUoZm9ybVNjaGVtZSk7XG4gIH1cblxuICB1cGRhdGVGb3JtU2NoZW1hKGZpZWxkTmFtZToga2V5b2YgVEZvcm1Hcm91cCwgc2NoZW1lOiBQYXJ0aWFsPElGb3JtU2NoZW1hPFRGb3JtR3JvdXA+Pikge1xuICAgIHJldHVybiBzdXBlci5fdXBkYXRlRm9ybVNjaGVtYShmaWVsZE5hbWUgYXMgc3RyaW5nLCBzY2hlbWUpO1xuICB9XG4gIHVwZGF0ZUFsbEZvcm1TY2hlbWEobWFwOiAoZm9ybUZpZWxkOiBJRm9ybVNjaGVtYTxURm9ybUdyb3VwPikgPT4gSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD4pIHtcbiAgICByZXR1cm4gc3VwZXIuX3VwZGF0ZUFsbEZvcm1TY2hlbWEobWFwKTtcbiAgfVxuXG4gIHJlbW92ZUZyb21Gb3JtU2NoZW1hKGZpZWxkTmFtZToga2V5b2YgVEZvcm1Hcm91cCkge1xuICAgIHRoaXMuZGV0YWNoRm9ybVNjaGVtZShmaWVsZE5hbWUpO1xuICAgIGNvbnN0IG9uUmVtb3ZlID0gdGhpcy5mb3JtU2NoZW1hTWFwKClbZmllbGROYW1lIGFzIHN0cmluZ10/Lm9uUmVtb3ZlRnVuYztcbiAgICBpZiAob25SZW1vdmUpIG9uUmVtb3ZlKHRoaXMuZm9ybVZhbHVlKCkgYXMgYW55LCB0aGlzLmZvcm1WYWx1ZSgpW2ZpZWxkTmFtZSBhcyBhbnldLCB0aGlzKTtcbiAgICB0aGlzLl9yZW1vdmVGb3JtU2NoZW1hKGZpZWxkTmFtZSBhcyBzdHJpbmcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldE9wdGlvbkxhYmVsKCRldmVudDogYW55LCBzY2hlbWU6IElGb3JtU2NoZW1hPFRGb3JtR3JvdXA+KSB7XG4gICAgc2NoZW1lLnNlbGVjdGVkT3B0aW9uTGFiZWwgPSAkZXZlbnQ7XG4gIH1cblxuICBhc3luYyBzdWJtaXQoYnRuPzogQnRuQ29tcG9uZW50KSB7XG4gICAgaWYgKHRoaXMuc3VibWl0RnVuYykge1xuICAgICAgYnRuPy5zZXRMb2FkZXIodHJ1ZSk7XG4gICAgICB0aGlzLl9sb2FkaW5nLnNldCh0cnVlKTtcbiAgICAgIGNvbnN0IGZvcm1WYWwgPSB0aGlzLmZvcm1WYWx1ZSgpO1xuICAgICAgdGhpcy5vblN1Ym1pdC5lbWl0KGZvcm1WYWwpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5zdWJtaXNzaW9uUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnN1Ym1pdEZ1bmMoZm9ybVZhbCk7XG4gICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaW5mbyh0aGlzLnN1Ym1pdFN1Y2Nlc3NUZXh0KCksIDEpO1xuICAgICAgICB0aGlzLnNhdmVkLmVtaXQodGhpcy5zdWJtaXNzaW9uUmVzcG9uc2UpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5pbmZvKGVycm9yLCAwKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgIGJ0bj8uc2V0TG9hZGVyKGZhbHNlKTtcbiAgICB9IGVsc2UgdGhpcy5vblN1Ym1pdC5lbWl0KHRoaXMuZm9ybVZhbHVlKCkpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUZvcm1TY2hlbWE8XG4gIFRGb3JtR3JvdXAgZXh0ZW5kcyB7XG4gICAgW0sgaW4ga2V5b2YgVEZvcm1Hcm91cF06IEFic3RyYWN0Q29udHJvbDxhbnksIGFueT47XG4gIH0gPSBhbnksXG4+IGV4dGVuZHMgSUJhc2VGb3JtU2NoZW1hPFRGb3JtR3JvdXAsIEZvcm1HZW5lcmF0b3JDb21wb25lbnQ8VEZvcm1Hcm91cD4+IHtcbiAgY2hpbGRyZW4/OiBJRm9ybVNjaGVtYTxURm9ybUdyb3VwPltdO1xuICBsYWJlbFR5cGU/OiBPcHRpb25MYWJlbFR5cGU7XG4gIGZpZWxkOiBrZXlvZiBURm9ybUdyb3VwO1xuICBzdWJUeXBlPzogSW5wdXRTdWJUeXBlO1xuICBwcmVzZXRWYWx1ZT86IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIElGb3JtU2NoZW1hMjxUU3RydWN0ID0gYW55PlxuICBleHRlbmRzIElGb3JtU2NoZW1hPHtcbiAgICBbSyBpbiBrZXlvZiBUU3RydWN0XT86IEFic3RyYWN0Q29udHJvbDxhbnksIGFueT47XG4gIH0+IHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUZvcm1PcHRpb25zIHtcbiAgW2ZpZWxkOiBzdHJpbmddOiBhbnk7XG59XG4iLCI8IS0tIHt7Zm9ybVZhbHVlKCl8anNvbn19XG57e2Zvcm1WYWxpZCgpfGpzb259fSAtLT5cbjxsb2FkZXIgW2xvYWRpbmddPVwiY29tcHV0ZWRMb2FkaW5nKClcIj5cbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtKClcIiAjZm9ybVRhZz5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInJvdyByb3ctY29scy17eyBncmlkU3R5bGUoKSB9fSByb3ctY29scy1tZC17eyBncmlkTURTdHlsZSgpIH19IHJvdy1jb2xzLWxnLXt7XG4gICAgICAgIGdyaWRMR1N0eWxlKClcbiAgICAgIH19IHJvdy1jb2xzLXh4bC17eyBncmlkWFhMU3R5bGUoKSB9fSBhbGlnbi1pdGVtcy1jZW50ZXIge3sgZm9ybUdyaWRDbGFzcygpIH19XCI+XG4gICAgICBAZm9yIChzY2hlbWUgb2YgY29tcHV0ZWRGb3JtU2NoZW1hKCk7IHRyYWNrIHNjaGVtZS5pZCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIHt7IHNjaGVtZS5jbHMgfX0gXCI+XG4gICAgICAgICAgQHN3aXRjaCAodHJ1ZSkge1xuICAgICAgICAgICAgQGNhc2UgKHNjaGVtZS50eXBlID09ICd0ZWwnKSB7XG4gICAgICAgICAgICAgIDxhcHAtcGhvbmUtbnVtYmVyXG4gICAgICAgICAgICAgICAgW2Zvcm1dPVwic2NoZW1lLmZvcm0gfHwgZm9ybSgpXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwic2NoZW1lLmxhYmVsXCJcbiAgICAgICAgICAgICAgICBbY2xlYXJPbkRpc2FibGVdPVwic2NoZW1lLmNsZWFyT25EaXNhYmxlXCJcbiAgICAgICAgICAgICAgICBbc3RhY2tlZF09XCJzY2hlbWUuc3RhY2tlZFwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwic2NoZW1lLmZpZWxkXCJcbiAgICAgICAgICAgICAgICBbbm9Gb3JtYXRdPVwic2NoZW1lLm5vRm9ybWF0XCJcbiAgICAgICAgICAgICAgICBbdmVyYm9zZV09XCJzY2hlbWUudmVyYm9zZVwiXG4gICAgICAgICAgICAgICAgW2RlYnVnXT1cInNjaGVtZS5kZWJ1Z1wiXG4gICAgICAgICAgICAgICAgKG1jaGFuZ2UpPVwibWNoYW5nZUVtaXR0ZXIoKVwiXG4gICAgICAgICAgICAgICAgW3Nob3dWYWxpZGF0aW9uXT1cInNjaGVtZS5zaG93VmFsaWRhdGlvbiB8fCAhIXNjaGVtZS5hc3luY1ZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAgIFtzaG93VmFsaWRhdGlvbkljb25dPVwic2NoZW1lLnNob3dWYWxpZGF0aW9uSWNvbiB8fCAhIXNjaGVtZS5hc3luY1ZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAgIFthdXRvUGlja1ZhbHVlRmllbGRdPVwic2NoZW1lLmF1dG9QaWNrVmFsdWVGaWVsZFwiXG4gICAgICAgICAgICAgICAgW3Nob3dSZXF1aXJlZFRhZ109XCJzY2hlbWUuc2hvd1JlcXVpcmVkVGFnXCJcbiAgICAgICAgICAgICAgICBbc2hvd1ZhbGlkYXRpb25Nc2ddPVwic2NoZW1lLnNob3dWYWxpZGF0aW9uTXNnXCIgXG4gICAgICAgICAgICAgICAgW2NvdW50cnlDb2RlM109XCJzY2hlbWUuY291bnRyeUNvZGUzXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgICBzY2hlbWUuZGlzYWJsZWQgfHxcbiAgICAgICAgICAgICAgICAgIChzY2hlbWUuZGlzYWJsZWRJZiB8IGZ1bmN0aW9uQ2FsbGVyMjogZm9ybVZhbHVlKCkgOiAoc2NoZW1lLmZpZWxkIHwgdG9BbnkpKVxuICAgICAgICAgICAgICAgIFwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAY2FzZSAoc2NoZW1lLnR5cGUgPT0gJ2F1dG9jb21wbGV0ZScpIHtcbiAgICAgICAgICAgICAgPGFwcC1hdXRvY29tcGxldGVcbiAgICAgICAgICAgICAgICBbZm9ybV09XCJzY2hlbWUuZm9ybSB8fCBmb3JtKClcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJzY2hlbWUubGFiZWxcIlxuICAgICAgICAgICAgICAgIFtjbGVhck9uRGlzYWJsZV09XCJzY2hlbWUuY2xlYXJPbkRpc2FibGVcIlxuICAgICAgICAgICAgICAgIFtzdGFja2VkXT1cInNjaGVtZS5zdGFja2VkXCJcbiAgICAgICAgICAgICAgICBbdmVyYm9zZV09XCJzY2hlbWUudmVyYm9zZVwiXG4gICAgICAgICAgICAgICAgW3ByZXNldFZhbHVlXT1cInNjaGVtZS5wcmVzZXRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgW2xhYmVsRmllbGRdPVwic2NoZW1lLmxhYmVsRmllbGRcIlxuICAgICAgICAgICAgICAgIFtub0Zvcm1hdF09XCJzY2hlbWUubm9Gb3JtYXRcIlxuICAgICAgICAgICAgICAgIFtzaG93VmFsaWRhdGlvbl09XCJzY2hlbWUuc2hvd1ZhbGlkYXRpb24gfHwgISFzY2hlbWUuYXN5bmNWYWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgICBbc2hvd1ZhbGlkYXRpb25JY29uXT1cInNjaGVtZS5zaG93VmFsaWRhdGlvbkljb24gfHwgISFzY2hlbWUuYXN5bmNWYWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxUeXBlXT1cInNjaGVtZS5sYWJlbFR5cGUgfCB0b0FueVwiXG4gICAgICAgICAgICAgICAgKG1jaGFuZ2UpPVwibWNoYW5nZUVtaXR0ZXIoKVwiXG4gICAgICAgICAgICAgICAgKG1TZWxlY3RlZE9wdGlvbkxhYmVsKT1cInNldE9wdGlvbkxhYmVsKCRldmVudCwgc2NoZW1lKVwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwic2NoZW1lLmZpZWxkXCJcbiAgICAgICAgICAgICAgICBbZGVidWddPVwic2NoZW1lLmRlYnVnXCJcbiAgICAgICAgICAgICAgICBbc2V0Rm9ybWF0dGVkVmFsdWVdPVwic2NoZW1lLnNldENvbnRyb2xGb3JtYXR0ZWRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgW3Nob3dSZXF1aXJlZFRhZ109XCJzY2hlbWUuc2hvd1JlcXVpcmVkVGFnXCJcbiAgICAgICAgICAgICAgICBbb3B0aW9uRm9ybWF0dGVyXT1cInNjaGVtZS5vcHRpb25Gb3JtYXR0ZXJcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZUZpZWxkXT1cInNjaGVtZS52YWx1ZUZpZWxkXCJcbiAgICAgICAgICAgICAgICBbb3B0aW9uc0Z1bmNdPVwic2NoZW1lLm9wdGlvbnNGdW5jXCJcbiAgICAgICAgICAgICAgICBbc2hvd1ZhbGlkYXRpb25Nc2ddPVwic2NoZW1lLnNob3dWYWxpZGF0aW9uTXNnXCJcbiAgICAgICAgICAgICAgICBbYXV0b1BpY2tWYWx1ZUZpZWxkXT1cInNjaGVtZS5hdXRvUGlja1ZhbHVlRmllbGRcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInNjaGVtZS5vcHRpb25zIHx8IG9wdGlvbnNNYXAoKVtzY2hlbWUuZmllbGQgfCB0b0FueV1cIlxuICAgICAgICAgICAgICAgIFtoaW50XT1cInNjaGVtZS5oaW50XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgICBzY2hlbWUuZGlzYWJsZWQgfHxcbiAgICAgICAgICAgICAgICAgIChzY2hlbWUuZGlzYWJsZWRJZiB8IGZ1bmN0aW9uQ2FsbGVyMjogZm9ybVZhbHVlKCkgOiAoc2NoZW1lLmZpZWxkIHwgdG9BbnkpKVxuICAgICAgICAgICAgICAgIFwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAY2FzZSAoc2NoZW1lLnR5cGUgPT0gJ3JpY2h0ZXh0Jykge1xuICAgICAgICAgICAgICA8cmljaC10ZXh0LWVkaXRvci1yZlxuICAgICAgICAgICAgICAgIFtmb3JtXT1cInNjaGVtZS5mb3JtIHx8IGZvcm0oKVwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cInNjaGVtZS5sYWJlbCFcIlxuICAgICAgICAgICAgICAgIFtjbGVhck9uRGlzYWJsZV09XCJzY2hlbWUuY2xlYXJPbkRpc2FibGUhXCJcbiAgICAgICAgICAgICAgICBbc3RhY2tlZF09XCJzY2hlbWUuc3RhY2tlZFwiXG4gICAgICAgICAgICAgICAgW3ZlcmJvc2VdPVwic2NoZW1lLnZlcmJvc2VcIlxuICAgICAgICAgICAgICAgIFtsYWJlbEZpZWxkXT1cInNjaGVtZS5sYWJlbEZpZWxkIVwiXG4gICAgICAgICAgICAgICAgW25vRm9ybWF0XT1cInNjaGVtZS5ub0Zvcm1hdCFcIlxuICAgICAgICAgICAgICAgIFtzaG93VmFsaWRhdGlvbl09XCJzY2hlbWUuc2hvd1ZhbGlkYXRpb24gfHwgISFzY2hlbWUuYXN5bmNWYWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgICBbc2hvd1ZhbGlkYXRpb25JY29uXT1cInNjaGVtZS5zaG93VmFsaWRhdGlvbkljb24gfHwgISFzY2hlbWUuYXN5bmNWYWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxUeXBlXT1cInNjaGVtZS5sYWJlbFR5cGUgfCB0b0FueVwiXG4gICAgICAgICAgICAgICAgKG1jaGFuZ2UpPVwibWNoYW5nZUVtaXR0ZXIoKVwiXG4gICAgICAgICAgICAgICAgKG1TZWxlY3RlZE9wdGlvbkxhYmVsKT1cInNldE9wdGlvbkxhYmVsKCRldmVudCwgc2NoZW1lKVwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwic2NoZW1lLmZpZWxkXCJcbiAgICAgICAgICAgICAgICBbZGVidWddPVwic2NoZW1lLmRlYnVnIVwiXG4gICAgICAgICAgICAgICAgW3NldEZvcm1hdHRlZFZhbHVlXT1cInNjaGVtZS5zZXRDb250cm9sRm9ybWF0dGVkVmFsdWVcIlxuICAgICAgICAgICAgICAgIFtzaG93UmVxdWlyZWRUYWddPVwic2NoZW1lLnNob3dSZXF1aXJlZFRhZyFcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25Gb3JtYXR0ZXJdPVwic2NoZW1lLm9wdGlvbkZvcm1hdHRlciFcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZUZpZWxkXT1cInNjaGVtZS52YWx1ZUZpZWxkIVwiXG4gICAgICAgICAgICAgICAgW29wdGlvbnNGdW5jXT1cInNjaGVtZS5vcHRpb25zRnVuYyFcIlxuICAgICAgICAgICAgICAgIFtzaG93VmFsaWRhdGlvbk1zZ109XCJzY2hlbWUuc2hvd1ZhbGlkYXRpb25Nc2dcIlxuICAgICAgICAgICAgICAgIFthdXRvUGlja1ZhbHVlRmllbGRdPVwic2NoZW1lLmF1dG9QaWNrVmFsdWVGaWVsZCFcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInNjaGVtZS5vcHRpb25zIHx8IG9wdGlvbnNNYXAoKVtzY2hlbWUuZmllbGQgfCB0b0FueV1cIlxuICAgICAgICAgICAgICAgIFtoaW50XT1cInNjaGVtZS5oaW50IVwiXG4gICAgICAgICAgICAgICAgW21heExlbmd0aF09XCJzY2hlbWUubWF4TGVuZ3RoXCJcbiAgICAgICAgICAgICAgICBbbWluTGVuZ3RoXT1cInNjaGVtZS5taW5MZW5ndGhcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICAgICAgICAgICAgIHNjaGVtZS5kaXNhYmxlZCB8fFxuICAgICAgICAgICAgICAgICAgKHNjaGVtZS5kaXNhYmxlZElmISB8IGZ1bmN0aW9uQ2FsbGVyMjogZm9ybVZhbHVlKCkgOiAoc2NoZW1lLmZpZWxkIHwgdG9BbnkpKVxuICAgICAgICAgICAgICAgIFwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAZGVmYXVsdCB7XG4gICAgICAgICAgICAgIDxhcHAtaW5wdXQtYmFzaWNcbiAgICAgICAgICAgICAgICBbbm9Gb3JtYXRdPVwic2NoZW1lLm5vRm9ybWF0XCJcbiAgICAgICAgICAgICAgICBbbmFtZV09XCJzY2hlbWUuZmllbGRcIlxuICAgICAgICAgICAgICAgIFtmb3JtXT1cInNjaGVtZS5mb3JtIHx8IGZvcm0oKVwiXG4gICAgICAgICAgICAgICAgW2NsZWFyT25EaXNhYmxlXT1cInNjaGVtZS5jbGVhck9uRGlzYWJsZVwiXG4gICAgICAgICAgICAgICAgW3R5cGVdPVwic2NoZW1lLnR5cGVcIlxuICAgICAgICAgICAgICAgIFt2ZXJib3NlXT1cInNjaGVtZS52ZXJib3NlXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVGaWVsZF09XCJzY2hlbWUudmFsdWVGaWVsZFwiXG4gICAgICAgICAgICAgICAgW2F1dG9QaWNrVmFsdWVGaWVsZF09XCJzY2hlbWUuYXV0b1BpY2tWYWx1ZUZpZWxkXCJcbiAgICAgICAgICAgICAgICBbcHJlc2V0VmFsdWVdPVwic2NoZW1lLnByZXNldFZhbHVlXCJcbiAgICAgICAgICAgICAgICBbc3RhY2tlZF09XCJzY2hlbWUuc3RhY2tlZFwiXG4gICAgICAgICAgICAgICAgW2xhYmVsVHlwZV09XCJzY2hlbWUubGFiZWxUeXBlIHwgdG9BbnlcIlxuICAgICAgICAgICAgICAgIFtjaGVja2VkU2lnbmFsXT1cInNjaGVtZS5jaGVja2VkXCJcbiAgICAgICAgICAgICAgICBbc2hvd1ZhbGlkYXRpb25dPVwic2NoZW1lLnNob3dWYWxpZGF0aW9uIHx8ICEhc2NoZW1lLmFzeW5jVmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgICAgW3Nob3dWYWxpZGF0aW9uSWNvbl09XCJzY2hlbWUuc2hvd1ZhbGlkYXRpb25JY29uIHx8ICEhc2NoZW1lLmFzeW5jVmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgICAgW2RlYnVnXT1cInNjaGVtZS5kZWJ1Z1wiXG4gICAgICAgICAgICAgICAgKG1jaGFuZ2UpPVwibWNoYW5nZUVtaXR0ZXIoKVwiXG4gICAgICAgICAgICAgICAgW3NldEZvcm1hdHRlZFZhbHVlXT1cInNjaGVtZS5zZXRDb250cm9sRm9ybWF0dGVkVmFsdWVcIlxuICAgICAgICAgICAgICAgIFtzaG93UmVxdWlyZWRUYWddPVwic2NoZW1lLnNob3dSZXF1aXJlZFRhZ1wiXG4gICAgICAgICAgICAgICAgW2xhYmVsRmllbGRdPVwic2NoZW1lLmxhYmVsRmllbGRcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25Gb3JtYXR0ZXJdPVwic2NoZW1lLm9wdGlvbkZvcm1hdHRlclwiXG4gICAgICAgICAgICAgICAgKG1TZWxlY3RlZE9wdGlvbkxhYmVsKT1cInNldE9wdGlvbkxhYmVsKCRldmVudCwgc2NoZW1lKVwiXG4gICAgICAgICAgICAgICAgW29wdGlvbnNdPVwic2NoZW1lLm9wdGlvbnMgfHwgb3B0aW9uc01hcCgpW3NjaGVtZS5maWVsZCB8IHRvQW55XVwiXG4gICAgICAgICAgICAgICAgW2RlY2ltYWxQb2ludHNdPVwic2NoZW1lLmRlY2ltYWxQb2ludHNcIlxuICAgICAgICAgICAgICAgIFtoaW50XT1cInNjaGVtZS5oaW50XCJcbiAgICAgICAgICAgICAgICBbbWF4XT1cInNjaGVtZS5tYXhcIlxuICAgICAgICAgICAgICAgIFttaW5dPVwic2NoZW1lLm1pblwiXG4gICAgICAgICAgICAgICAgW21heExlbmd0aF09XCJzY2hlbWUubWF4TGVuZ3RoXCJcbiAgICAgICAgICAgICAgICBbbWluTGVuZ3RoXT1cInNjaGVtZS5taW5MZW5ndGhcIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzY2hlbWUucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJzY2hlbWUubGFiZWxcIlxuICAgICAgICAgICAgICAgIFtzaG93VmFsaWRhdGlvbk1zZ109XCJzY2hlbWUuc2hvd1ZhbGlkYXRpb25Nc2dcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICAgICAgICAgICAgIHNjaGVtZS5kaXNhYmxlZCB8fFxuICAgICAgICAgICAgICAgICAgKHNjaGVtZS5kaXNhYmxlZElmIHwgZnVuY3Rpb25DYWxsZXIyOiBmb3JtVmFsdWUoKSA6IChzY2hlbWUuZmllbGQgfCB0b0FueSkpXG4gICAgICAgICAgICAgICAgXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyb3cgcm93LWNvbHMtYXV0byBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiXCI+XG4gICAgICAgIEBpZiAoc2hvd1N1Ym1pdEJ0bigpKSB7XG4gICAgICAgICAgPGFwcC1idG5cbiAgICAgICAgICAgIFt0ZXh0XT1cInN1Ym1pdEJ0blRleHQoKVwiXG4gICAgICAgICAgICBncm91cD1cInN1Ym1pdFwiXG4gICAgICAgICAgICBbZm9ybV09XCJmb3JtKClcIlxuICAgICAgICAgICAgKG1jbGljayk9XCJzdWJtaXQoc3VibWl0QnRuKVwiXG4gICAgICAgICAgICAjc3VibWl0QnRuIC8+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChzdWJtaXRCdG5UZW1wbGF0ZSgpKSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN1Ym1pdEJ0blRlbXBsYXRlKClcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cbjwvbG9hZGVyPlxuIl19