@lenne.tech/ng-base 15.0.0-beta → 15.0.0-beta-2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/base-components/base-components.module.d.ts +3 -1
- package/base-components/components/input/input.component.d.ts +2 -1
- package/base-components/components/refence-input/refence-input.component.d.ts +10 -2
- package/base-components/components/select/select.component.d.ts +2 -1
- package/base-components/components/tags/tags.component.d.ts +2 -1
- package/base-components/components/textarea/textarea.component.d.ts +9 -2
- package/base-components/components/upload-image/upload-image.component.d.ts +19 -4
- package/base-prototype/pages/login/login.component.d.ts +5 -8
- package/base-prototype/pages/profile/profile.component.d.ts +5 -29
- package/base-prototype/pages/register/register.component.d.ts +6 -2
- package/esm2020/base-cms/base-cms-routing.module.mjs +4 -4
- package/esm2020/base-cms/base-cms.module.mjs +4 -4
- package/esm2020/base-cms/pages/base-cms/base-cms.component.mjs +5 -5
- package/esm2020/base-components/base-components.module.mjs +9 -7
- package/esm2020/base-components/components/breadcrumb/breadcrumb.component.mjs +3 -3
- package/esm2020/base-components/components/change-password/change-password.component.mjs +3 -3
- package/esm2020/base-components/components/checkbox/checkbox.component.mjs +3 -3
- package/esm2020/base-components/components/delete-account/delete-account.component.mjs +3 -3
- package/esm2020/base-components/components/fab-button/fab-button.component.mjs +3 -3
- package/esm2020/base-components/components/input/input.component.mjs +8 -5
- package/esm2020/base-components/components/loading-bar/loading-bar.component.mjs +3 -3
- package/esm2020/base-components/components/model-form/model-form-base.component.mjs +3 -3
- package/esm2020/base-components/components/model-form/model-form.component.mjs +14 -14
- package/esm2020/base-components/components/model-form-sub/model-form-sub.component.mjs +5 -5
- package/esm2020/base-components/components/model-table/model-table.component.mjs +3 -3
- package/esm2020/base-components/components/refence-input/refence-input.component.mjs +24 -10
- package/esm2020/base-components/components/select/select.component.mjs +9 -6
- package/esm2020/base-components/components/skeleton-loader/skeleton-loader.component.mjs +3 -3
- package/esm2020/base-components/components/tags/tags.component.mjs +8 -5
- package/esm2020/base-components/components/textarea/textarea.component.mjs +41 -7
- package/esm2020/base-components/components/toast/toast.component.mjs +3 -3
- package/esm2020/base-components/components/upload-image/upload-image.component.mjs +100 -28
- package/esm2020/base-components/directives/back-button.directive.mjs +3 -3
- package/esm2020/base-components/directives/context-menu.directive.mjs +3 -3
- package/esm2020/base-components/directives/sort.directive.mjs +3 -3
- package/esm2020/base-components/directives/stop-propagation.directive.mjs +3 -3
- package/esm2020/base-components/pipes/ellipses.pipe.mjs +3 -3
- package/esm2020/base-prototype/base-prototype.module.mjs +4 -4
- package/esm2020/base-prototype/pages/email-verification/email-verification.component.mjs +3 -3
- package/esm2020/base-prototype/pages/forgot-password/forgot-password.component.mjs +3 -3
- package/esm2020/base-prototype/pages/login/login.component.mjs +17 -10
- package/esm2020/base-prototype/pages/profile/profile.component.mjs +15 -5
- package/esm2020/base-prototype/pages/register/register.component.mjs +15 -8
- package/esm2020/base-prototype/pages/set-password/set-password.component.mjs +3 -3
- package/esm2020/shared/classes/auth.class.mjs +2 -1
- package/esm2020/shared/interfaces/cms-field-config.interface.mjs +1 -1
- package/esm2020/shared/interfaces/cropping-options.interface.mjs +2 -0
- package/esm2020/shared/interfaces/login-config.interface.mjs +2 -0
- package/esm2020/shared/public-api.mjs +3 -1
- package/esm2020/shared/services/auth.service.mjs +88 -17
- package/esm2020/shared/services/breadcrumb.service.mjs +9 -9
- package/esm2020/shared/services/cms.service.mjs +3 -3
- package/esm2020/shared/services/file.service.mjs +3 -3
- package/esm2020/shared/services/forms.service.mjs +3 -3
- package/esm2020/shared/services/graphql-meta.service.mjs +3 -3
- package/esm2020/shared/services/graphql-plus.service.mjs +3 -3
- package/esm2020/shared/services/graphql.service.mjs +3 -3
- package/esm2020/shared/services/image.service.mjs +3 -3
- package/esm2020/shared/services/loader.service.mjs +3 -3
- package/esm2020/shared/services/navigation.service.mjs +3 -3
- package/esm2020/shared/services/scroll.service.mjs +3 -3
- package/esm2020/shared/services/storage.service.mjs +3 -3
- package/esm2020/shared/services/toast.service.mjs +3 -3
- package/esm2020/shared/services/user.service.mjs +12 -10
- package/esm2020/shared/services/ws.service.mjs +3 -3
- package/esm2020/src/base.module.mjs +4 -4
- package/esm2020/src/directives/lazy-load.directive.mjs +3 -3
- package/esm2020/src/directives/match-height.directive.mjs +9 -4
- package/esm2020/src/directives/resizable.directive.mjs +3 -3
- package/esm2020/src/factories/apollo-options.factory.mjs +45 -4
- package/esm2020/src/guards/auth.guard.mjs +28 -9
- package/esm2020/src/guards/can-deactivate.guard.mjs +3 -3
- package/esm2020/src/guards/logout.guard.mjs +3 -3
- package/esm2020/src/pipes/date-ago.pipe.mjs +3 -3
- package/esm2020/src/pipes/safe-html.pipe.mjs +3 -3
- package/esm2020/src/services/fullscreen.service.mjs +3 -3
- package/esm2020/src/services/seo.service.mjs +3 -3
- package/esm2020/src/services/theme.service.mjs +14 -14
- package/fesm2015/lenne.tech-ng-base-base-cms.mjs +12 -13
- package/fesm2015/lenne.tech-ng-base-base-cms.mjs.map +1 -1
- package/fesm2015/lenne.tech-ng-base-base-components.mjs +234 -117
- package/fesm2015/lenne.tech-ng-base-base-components.mjs.map +1 -1
- package/fesm2015/lenne.tech-ng-base-base-prototype.mjs +55 -33
- package/fesm2015/lenne.tech-ng-base-base-prototype.mjs.map +1 -1
- package/fesm2015/lenne.tech-ng-base-shared.mjs +353 -283
- package/fesm2015/lenne.tech-ng-base-shared.mjs.map +1 -1
- package/fesm2015/lenne.tech-ng-base.mjs +119 -58
- package/fesm2015/lenne.tech-ng-base.mjs.map +1 -1
- package/fesm2020/lenne.tech-ng-base-base-cms.mjs +12 -13
- package/fesm2020/lenne.tech-ng-base-base-cms.mjs.map +1 -1
- package/fesm2020/lenne.tech-ng-base-base-components.mjs +241 -117
- package/fesm2020/lenne.tech-ng-base-base-components.mjs.map +1 -1
- package/fesm2020/lenne.tech-ng-base-base-prototype.mjs +55 -33
- package/fesm2020/lenne.tech-ng-base-base-prototype.mjs.map +1 -1
- package/fesm2020/lenne.tech-ng-base-shared.mjs +350 -278
- package/fesm2020/lenne.tech-ng-base-shared.mjs.map +1 -1
- package/fesm2020/lenne.tech-ng-base.mjs +120 -57
- package/fesm2020/lenne.tech-ng-base.mjs.map +1 -1
- package/package.json +9 -7
- package/shared/classes/auth.class.d.ts +1 -0
- package/shared/interfaces/cms-field-config.interface.d.ts +6 -1
- package/shared/interfaces/cropping-options.interface.d.ts +12 -0
- package/shared/interfaces/field.interface.d.ts +1 -1
- package/shared/interfaces/login-config.interface.d.ts +6 -0
- package/shared/public-api.d.ts +2 -0
- package/shared/services/auth.service.d.ts +16 -4
- package/shared/types/graphql-fields.type.d.ts +1 -1
- package/shared/types/storage.type.d.ts +1 -1
- package/src/directives/match-height.directive.d.ts +1 -0
|
@@ -79,11 +79,11 @@ export class ModelFormSubComponent {
|
|
|
79
79
|
return control;
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
|
-
ModelFormSubComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
83
|
-
ModelFormSubComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ModelFormSubComponent, selector: "base-model-form-sub", inputs: { id: "id", parentKey: "parentKey", fields: "fields", form: "form", config: "config" }, outputs: { imageChanged: "imageChanged", fileChanged: "fileChanged" }, ngImport: i0, template: "<div class=\"mt-3\" *ngFor=\"let key of keys\">\n <ng-container\n *ngIf=\"checkFieldHasFields(fields[key]) && (config[key]?.roles ? user?.hasAllRoles(config[key]?.roles) : true)\"\n >\n <fieldset class=\"border rounded-3 p-3 mt-3\">\n <legend class=\"float-none w-auto px-3\">\n {{ config[key]?.label ? config[key].label : capitalizeFirstLetter(key) }}\n </legend>\n <base-model-form-sub\n [parentKey]=\"key\"\n [fields]=\"fields[key].fields\"\n [config]=\"config[key]?.fields || {}\"\n [form]=\"form.get(key)\"\n (imageChanged)=\"imageChanged.emit($event)\"\n (fileChanged)=\"fileChanged.emit($event)\"\n ></base-model-form-sub>\n </fieldset>\n </ng-container>\n\n <ng-container\n *ngIf=\"!checkFieldHasFields(fields[key]) && (config[key]?.roles ? user?.hasAllRoles(config[key]?.roles) : true)\"\n >\n <ng-container *ngIf=\"fields[key]?.isEnum && !config[key]?.exclude\">\n <base-select\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || 'Bitte einen Wert ausw\u00E4hlen'\"\n [options]=\"prepareEnumForSelect(fields[key]?.validEnums, config[key]?.enumValues)\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\"\n [objectPath]=\"objectPath\"\n ></base-select>\n </ng-container>\n\n <ng-container *ngIf=\"!fields[key]?.isEnum && !config[key]?.exclude\">\n <ng-container [ngSwitch]=\"config[key]?.type ? config[key]?.type : fields[key]?.type\">\n <ng-container *ngSwitchCase=\"'String'\">\n <ng-container *ngIf=\"fields[key]?.isList && !config[key]?.exclude\">\n <base-tags\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [validators]=\"config[key]?.validators\"\n [objectPath]=\"objectPath\"\n ></base-tags>\n </ng-container>\n\n <ng-container *ngIf=\"!fields[key]?.isList && !config[key]?.exclude\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'text'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Image'\">\n <base-upload-image\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [url]=\"config[key]?.url\"\n [path]=\"config[key]?.path || '/files/'\"\n [uploadPath]=\"config[key]?.uploadPath || '/files/upload'\"\n [deletePath]=\"config[key]?.deletePath || '/files/'\"\n [supportText]=\"config[key]?.supportText || 'Unterst\u00FCtzte Formate: JPEG, JPG, PNG'\"\n [defaultDragText]=\"config[key]?.dragText || 'Drag & Drop'\"\n [defaultReleaseText]=\"config[key]?.releaseText || 'Loslassen zum hochladen'\"\n [preButtonText]=\"config[key]?.preButtonText || 'or'\"\n [buttonText]=\"config[key]?.buttonText || 'browse'\"\n [validExtensions]=\"config[key]?.validExtensions || ['image/jpeg', 'image/jpg', 'image/png', 'image/webp']\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [compressOptions]=\"config[key]?.compressOptions\"\n [maxSize]=\"config[key]?.maxSize\"\n [uploadDirectly]=\"false\"\n [objectPath]=\"objectPath\"\n [mode]=\"config[key]?.imageMode || 'base64'\"\n (fileChanged)=\"fileChanged.emit($event)\"\n (imageDeleted)=\"imageChanged.emit(key)\"\n (imageUploaded)=\"imageChanged.emit(key)\"\n ></base-upload-image>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Upload'\">\n <base-upload-image\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [supportText]=\"config[key]?.supportText || 'Unterst\u00FCtzte Formate: JPEG, JPG, PNG'\"\n [defaultDragText]=\"config[key]?.dragText || 'Drag & Drop'\"\n [defaultReleaseText]=\"config[key]?.releaseText || 'Loslassen zum hochladen'\"\n [preButtonText]=\"config[key]?.preButtonText || 'or'\"\n [buttonText]=\"config[key]?.buttonText || 'browse'\"\n [validExtensions]=\"config[key]?.validExtensions || ['image/jpeg', 'image/jpg', 'image/png', 'image/webp']\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [compressOptions]=\"config[key]?.compressOptions\"\n [maxSize]=\"config[key]?.maxSize\"\n [objectPath]=\"objectPath\"\n [mode]=\"'file'\"\n ></base-upload-image>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Reference'\">\n <base-refence-input\n [id]=\"key\"\n [name]=\"key\"\n [isList]=\"fields[key]?.isList\"\n [useParamAsArg]=\"config[key]?.useParamAsArg ?? false\"\n [param]=\"id\"\n [search]=\"config[key]?.searchable ?? true\"\n [placeholder]=\"config[key]?.placeholder || 'Bitte einen Wert ausw\u00E4hlen'\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [method]=\"config[key]?.method || 'find'\"\n [fields]=\"config[key]?.requestFields || ['id', 'name']\"\n [valueField]=\"config[key]?.valueField || 'id'\"\n [nameField]=\"config[key]?.nameField || 'name'\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-refence-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Boolean'\">\n <base-checkbox\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-checkbox>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'LongText'\">\n <base-textarea\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-textarea>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Float'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [type]=\"'number'\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Password'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [type]=\"'password'\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Color'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [type]=\"'color'\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'URL'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'url'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Email'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'email'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'DateTime'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'datetime-local'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i3.InputComponent, selector: "base-input", inputs: ["id", "name", "label", "placeholder", "autocomplete", "tabIndex", "control", "type", "required", "eyeButton", "objectPath"], outputs: ["enter"] }, { kind: "component", type: i4.SelectComponent, selector: "base-select", inputs: ["id", "name", "label", "placeholder", "objectPath", "control", "tabIndex", "required", "multiple", "search", "options"] }, { kind: "component", type: i5.CheckboxComponent, selector: "base-checkbox", inputs: ["id", "name", "label", "value", "control", "required", "objectPath"] }, { kind: "component", type: i6.TextareaComponent, selector: "base-textarea", inputs: ["id", "name", "label", "placeholder", "control", "rows", "required", "tabIndex", "objectPath"] }, { kind: "component", type: i7.TagsComponent, selector: "base-tags", inputs: ["id", "name", "label", "placeholder", "autocomplete", "tabIndex", "control", "options", "custom", "removeByKey", "required", "objectPath", "validators"] }, { kind: "component", type: ModelFormSubComponent, selector: "base-model-form-sub", inputs: ["id", "parentKey", "fields", "form", "config"], outputs: ["imageChanged", "fileChanged"] }, { kind: "component", type: i8.UploadImageComponent, selector: "base-upload-image", inputs: ["id", "name", "label", "supportText", "required", "defaultDragText", "defaultReleaseText", "preButtonText", "buttonText", "validExtensions", "control", "url", "uploadPath", "deletePath", "path", "compressOptions", "maxSize", "uploadDirectly", "objectPath", "mode"], outputs: ["imageUploaded", "imageDeleted", "fileChanged"] }, { kind: "component", type: i9.RefenceInputComponent, selector: "base-refence-input", inputs: ["id", "name", "label", "isList", "search", "useParamAsArg", "param", "placeholder", "autocomplete", "tabIndex", "control", "required", "method", "fields", "valueField", "objectPath", "nameField"] }] });
|
|
84
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
82
|
+
ModelFormSubComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: ModelFormSubComponent, deps: [{ token: i1.AuthService }], target: i0.ɵɵFactoryTarget.Component });
|
|
83
|
+
ModelFormSubComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.5", type: ModelFormSubComponent, selector: "base-model-form-sub", inputs: { id: "id", parentKey: "parentKey", fields: "fields", form: "form", config: "config" }, outputs: { imageChanged: "imageChanged", fileChanged: "fileChanged" }, ngImport: i0, template: "<div class=\"mt-3\" *ngFor=\"let key of keys\">\n <ng-container\n *ngIf=\"checkFieldHasFields(fields[key]) && (config[key]?.roles ? user?.hasAllRoles(config[key]?.roles) : true)\"\n >\n <fieldset class=\"border rounded-3 p-3 mt-3\">\n <legend class=\"float-none w-auto px-3\">\n {{ config[key]?.label ? config[key].label : capitalizeFirstLetter(key) }}\n </legend>\n <base-model-form-sub\n [parentKey]=\"key\"\n [fields]=\"fields[key].fields\"\n [config]=\"config[key]?.fields || {}\"\n [form]=\"form.get(key)\"\n (imageChanged)=\"imageChanged.emit($event)\"\n (fileChanged)=\"fileChanged.emit($event)\"\n ></base-model-form-sub>\n </fieldset>\n </ng-container>\n\n <ng-container\n *ngIf=\"!checkFieldHasFields(fields[key]) && (config[key]?.roles ? user?.hasAllRoles(config[key]?.roles) : true)\"\n >\n <ng-container *ngIf=\"fields[key]?.isEnum && !config[key]?.exclude\">\n <base-select\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || 'Bitte einen Wert ausw\u00E4hlen'\"\n [options]=\"prepareEnumForSelect(fields[key]?.validEnums, config[key]?.enumValues)\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\"\n [objectPath]=\"objectPath\"\n ></base-select>\n </ng-container>\n\n <ng-container *ngIf=\"!fields[key]?.isEnum && !config[key]?.exclude\">\n <ng-container [ngSwitch]=\"config[key]?.type ? config[key]?.type : fields[key]?.type\">\n <ng-container *ngSwitchCase=\"'String'\">\n <ng-container *ngIf=\"fields[key]?.isList && !config[key]?.exclude\">\n <base-tags\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [validators]=\"config[key]?.validators\"\n [objectPath]=\"objectPath\"\n ></base-tags>\n </ng-container>\n\n <ng-container *ngIf=\"!fields[key]?.isList && !config[key]?.exclude\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'text'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Image'\">\n <base-upload-image\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [url]=\"config[key]?.url\"\n [path]=\"config[key]?.path || '/files/'\"\n [uploadPath]=\"config[key]?.uploadPath || '/files/upload'\"\n [deletePath]=\"config[key]?.deletePath || '/files/'\"\n [supportText]=\"config[key]?.supportText || 'Unterst\u00FCtzte Formate: JPEG, JPG, PNG'\"\n [defaultDragText]=\"config[key]?.dragText || 'Drag & Drop'\"\n [defaultReleaseText]=\"config[key]?.releaseText || 'Loslassen zum hochladen'\"\n [preButtonText]=\"config[key]?.preButtonText || 'or'\"\n [buttonText]=\"config[key]?.buttonText || 'browse'\"\n [validExtensions]=\"config[key]?.validExtensions || ['image/jpeg', 'image/jpg', 'image/png', 'image/webp']\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [compressOptions]=\"config[key]?.compressOptions\"\n [croppingOptions]=\"config[key]?.croppingOptions\"\n [croppingImage]=\"config[key]?.croppingImage\"\n [maxSize]=\"config[key]?.maxSize\"\n [uploadDirectly]=\"false\"\n [objectPath]=\"objectPath\"\n [mode]=\"config[key]?.imageMode || 'base64'\"\n (fileChanged)=\"fileChanged.emit($event)\"\n (imageDeleted)=\"imageChanged.emit(key)\"\n (imageUploaded)=\"imageChanged.emit(key)\"\n ></base-upload-image>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Upload'\">\n <base-upload-image\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [supportText]=\"config[key]?.supportText || 'Unterst\u00FCtzte Formate: JPEG, JPG, PNG'\"\n [defaultDragText]=\"config[key]?.dragText || 'Drag & Drop'\"\n [defaultReleaseText]=\"config[key]?.releaseText || 'Loslassen zum hochladen'\"\n [preButtonText]=\"config[key]?.preButtonText || 'or'\"\n [buttonText]=\"config[key]?.buttonText || 'browse'\"\n [validExtensions]=\"config[key]?.validExtensions || ['image/jpeg', 'image/jpg', 'image/png', 'image/webp']\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [compressOptions]=\"config[key]?.compressOptions\"\n [maxSize]=\"config[key]?.maxSize\"\n [objectPath]=\"objectPath\"\n [mode]=\"'file'\"\n ></base-upload-image>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Reference'\">\n <base-refence-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [isList]=\"fields[key]?.isList\"\n [useParamAsArg]=\"config[key]?.useParamAsArg ?? false\"\n [param]=\"id\"\n [search]=\"config[key]?.searchable ?? true\"\n [placeholder]=\"config[key]?.placeholder || 'Bitte einen Wert ausw\u00E4hlen'\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [method]=\"config[key]?.method || 'find'\"\n [fields]=\"config[key]?.requestFields || ['id', 'name']\"\n [valueField]=\"config[key]?.valueField || 'id'\"\n [nameField]=\"config[key]?.nameField || 'name'\"\n [creationLink]=\"config[key]?.creationLink || ''\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-refence-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Boolean'\">\n <base-checkbox\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-checkbox>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'LongText'\">\n <base-textarea\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-textarea>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Float'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [type]=\"'number'\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Password'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [type]=\"'password'\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Color'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [type]=\"'color'\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'URL'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'url'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Email'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'email'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'DateTime'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'datetime-local'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i3.InputComponent, selector: "base-input", inputs: ["id", "name", "infoText", "label", "placeholder", "autocomplete", "tabIndex", "control", "type", "required", "eyeButton", "objectPath"], outputs: ["enter"] }, { kind: "component", type: i4.SelectComponent, selector: "base-select", inputs: ["id", "name", "infoText", "label", "placeholder", "objectPath", "control", "tabIndex", "required", "multiple", "search", "options"] }, { kind: "component", type: i5.CheckboxComponent, selector: "base-checkbox", inputs: ["id", "name", "label", "value", "control", "required", "objectPath"] }, { kind: "component", type: i6.TextareaComponent, selector: "base-textarea", inputs: ["id", "name", "infoText", "label", "placeholder", "control", "rows", "required", "autoHeight", "tabIndex", "objectPath"] }, { kind: "component", type: i7.TagsComponent, selector: "base-tags", inputs: ["id", "name", "infoText", "label", "placeholder", "autocomplete", "tabIndex", "control", "options", "custom", "removeByKey", "required", "objectPath", "validators"] }, { kind: "component", type: ModelFormSubComponent, selector: "base-model-form-sub", inputs: ["id", "parentKey", "fields", "form", "config"], outputs: ["imageChanged", "fileChanged"] }, { kind: "component", type: i8.UploadImageComponent, selector: "base-upload-image", inputs: ["id", "name", "infoText", "label", "supportText", "required", "defaultDragText", "defaultReleaseText", "preButtonText", "buttonText", "validExtensions", "control", "url", "uploadPath", "deletePath", "path", "compressOptions", "maxSize", "uploadDirectly", "croppingImage", "croppingOptions", "objectPath", "mode"], outputs: ["imageUploaded", "imageDeleted", "fileChanged"] }, { kind: "component", type: i9.RefenceInputComponent, selector: "base-refence-input", inputs: ["id", "name", "infoText", "label", "isList", "search", "useParamAsArg", "param", "placeholder", "autocomplete", "tabIndex", "control", "required", "method", "fields", "valueField", "objectPath", "nameField", "creationLink"] }] });
|
|
84
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: ModelFormSubComponent, decorators: [{
|
|
85
85
|
type: Component,
|
|
86
|
-
args: [{ selector: 'base-model-form-sub', template: "<div class=\"mt-3\" *ngFor=\"let key of keys\">\n <ng-container\n *ngIf=\"checkFieldHasFields(fields[key]) && (config[key]?.roles ? user?.hasAllRoles(config[key]?.roles) : true)\"\n >\n <fieldset class=\"border rounded-3 p-3 mt-3\">\n <legend class=\"float-none w-auto px-3\">\n {{ config[key]?.label ? config[key].label : capitalizeFirstLetter(key) }}\n </legend>\n <base-model-form-sub\n [parentKey]=\"key\"\n [fields]=\"fields[key].fields\"\n [config]=\"config[key]?.fields || {}\"\n [form]=\"form.get(key)\"\n (imageChanged)=\"imageChanged.emit($event)\"\n (fileChanged)=\"fileChanged.emit($event)\"\n ></base-model-form-sub>\n </fieldset>\n </ng-container>\n\n <ng-container\n *ngIf=\"!checkFieldHasFields(fields[key]) && (config[key]?.roles ? user?.hasAllRoles(config[key]?.roles) : true)\"\n >\n <ng-container *ngIf=\"fields[key]?.isEnum && !config[key]?.exclude\">\n <base-select\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || 'Bitte einen Wert ausw\u00E4hlen'\"\n [options]=\"prepareEnumForSelect(fields[key]?.validEnums, config[key]?.enumValues)\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\"\n [objectPath]=\"objectPath\"\n ></base-select>\n </ng-container>\n\n <ng-container *ngIf=\"!fields[key]?.isEnum && !config[key]?.exclude\">\n <ng-container [ngSwitch]=\"config[key]?.type ? config[key]?.type : fields[key]?.type\">\n <ng-container *ngSwitchCase=\"'String'\">\n <ng-container *ngIf=\"fields[key]?.isList && !config[key]?.exclude\">\n <base-tags\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [validators]=\"config[key]?.validators\"\n [objectPath]=\"objectPath\"\n ></base-tags>\n </ng-container>\n\n <ng-container *ngIf=\"!fields[key]?.isList && !config[key]?.exclude\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'text'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Image'\">\n <base-upload-image\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [url]=\"config[key]?.url\"\n [path]=\"config[key]?.path || '/files/'\"\n [uploadPath]=\"config[key]?.uploadPath || '/files/upload'\"\n [deletePath]=\"config[key]?.deletePath || '/files/'\"\n [supportText]=\"config[key]?.supportText || 'Unterst\u00FCtzte Formate: JPEG, JPG, PNG'\"\n [defaultDragText]=\"config[key]?.dragText || 'Drag & Drop'\"\n [defaultReleaseText]=\"config[key]?.releaseText || 'Loslassen zum hochladen'\"\n [preButtonText]=\"config[key]?.preButtonText || 'or'\"\n [buttonText]=\"config[key]?.buttonText || 'browse'\"\n [validExtensions]=\"config[key]?.validExtensions || ['image/jpeg', 'image/jpg', 'image/png', 'image/webp']\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [compressOptions]=\"config[key]?.compressOptions\"\n [maxSize]=\"config[key]?.maxSize\"\n [uploadDirectly]=\"false\"\n [objectPath]=\"objectPath\"\n [mode]=\"config[key]?.imageMode || 'base64'\"\n (fileChanged)=\"fileChanged.emit($event)\"\n (imageDeleted)=\"imageChanged.emit(key)\"\n (imageUploaded)=\"imageChanged.emit(key)\"\n ></base-upload-image>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Upload'\">\n <base-upload-image\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [supportText]=\"config[key]?.supportText || 'Unterst\u00FCtzte Formate: JPEG, JPG, PNG'\"\n [defaultDragText]=\"config[key]?.dragText || 'Drag & Drop'\"\n [defaultReleaseText]=\"config[key]?.releaseText || 'Loslassen zum hochladen'\"\n [preButtonText]=\"config[key]?.preButtonText || 'or'\"\n [buttonText]=\"config[key]?.buttonText || 'browse'\"\n [validExtensions]=\"config[key]?.validExtensions || ['image/jpeg', 'image/jpg', 'image/png', 'image/webp']\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [compressOptions]=\"config[key]?.compressOptions\"\n [maxSize]=\"config[key]?.maxSize\"\n [objectPath]=\"objectPath\"\n [mode]=\"'file'\"\n ></base-upload-image>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Reference'\">\n <base-refence-input\n [id]=\"key\"\n [name]=\"key\"\n [isList]=\"fields[key]?.isList\"\n [useParamAsArg]=\"config[key]?.useParamAsArg ?? false\"\n [param]=\"id\"\n [search]=\"config[key]?.searchable ?? true\"\n [placeholder]=\"config[key]?.placeholder || 'Bitte einen Wert ausw\u00E4hlen'\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [method]=\"config[key]?.method || 'find'\"\n [fields]=\"config[key]?.requestFields || ['id', 'name']\"\n [valueField]=\"config[key]?.valueField || 'id'\"\n [nameField]=\"config[key]?.nameField || 'name'\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-refence-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Boolean'\">\n <base-checkbox\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-checkbox>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'LongText'\">\n <base-textarea\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-textarea>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Float'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [type]=\"'number'\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Password'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [type]=\"'password'\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Color'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [type]=\"'color'\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'URL'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'url'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Email'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'email'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'DateTime'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'datetime-local'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n</div>\n" }]
|
|
86
|
+
args: [{ selector: 'base-model-form-sub', template: "<div class=\"mt-3\" *ngFor=\"let key of keys\">\n <ng-container\n *ngIf=\"checkFieldHasFields(fields[key]) && (config[key]?.roles ? user?.hasAllRoles(config[key]?.roles) : true)\"\n >\n <fieldset class=\"border rounded-3 p-3 mt-3\">\n <legend class=\"float-none w-auto px-3\">\n {{ config[key]?.label ? config[key].label : capitalizeFirstLetter(key) }}\n </legend>\n <base-model-form-sub\n [parentKey]=\"key\"\n [fields]=\"fields[key].fields\"\n [config]=\"config[key]?.fields || {}\"\n [form]=\"form.get(key)\"\n (imageChanged)=\"imageChanged.emit($event)\"\n (fileChanged)=\"fileChanged.emit($event)\"\n ></base-model-form-sub>\n </fieldset>\n </ng-container>\n\n <ng-container\n *ngIf=\"!checkFieldHasFields(fields[key]) && (config[key]?.roles ? user?.hasAllRoles(config[key]?.roles) : true)\"\n >\n <ng-container *ngIf=\"fields[key]?.isEnum && !config[key]?.exclude\">\n <base-select\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || 'Bitte einen Wert ausw\u00E4hlen'\"\n [options]=\"prepareEnumForSelect(fields[key]?.validEnums, config[key]?.enumValues)\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\"\n [objectPath]=\"objectPath\"\n ></base-select>\n </ng-container>\n\n <ng-container *ngIf=\"!fields[key]?.isEnum && !config[key]?.exclude\">\n <ng-container [ngSwitch]=\"config[key]?.type ? config[key]?.type : fields[key]?.type\">\n <ng-container *ngSwitchCase=\"'String'\">\n <ng-container *ngIf=\"fields[key]?.isList && !config[key]?.exclude\">\n <base-tags\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [validators]=\"config[key]?.validators\"\n [objectPath]=\"objectPath\"\n ></base-tags>\n </ng-container>\n\n <ng-container *ngIf=\"!fields[key]?.isList && !config[key]?.exclude\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'text'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Image'\">\n <base-upload-image\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [url]=\"config[key]?.url\"\n [path]=\"config[key]?.path || '/files/'\"\n [uploadPath]=\"config[key]?.uploadPath || '/files/upload'\"\n [deletePath]=\"config[key]?.deletePath || '/files/'\"\n [supportText]=\"config[key]?.supportText || 'Unterst\u00FCtzte Formate: JPEG, JPG, PNG'\"\n [defaultDragText]=\"config[key]?.dragText || 'Drag & Drop'\"\n [defaultReleaseText]=\"config[key]?.releaseText || 'Loslassen zum hochladen'\"\n [preButtonText]=\"config[key]?.preButtonText || 'or'\"\n [buttonText]=\"config[key]?.buttonText || 'browse'\"\n [validExtensions]=\"config[key]?.validExtensions || ['image/jpeg', 'image/jpg', 'image/png', 'image/webp']\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [compressOptions]=\"config[key]?.compressOptions\"\n [croppingOptions]=\"config[key]?.croppingOptions\"\n [croppingImage]=\"config[key]?.croppingImage\"\n [maxSize]=\"config[key]?.maxSize\"\n [uploadDirectly]=\"false\"\n [objectPath]=\"objectPath\"\n [mode]=\"config[key]?.imageMode || 'base64'\"\n (fileChanged)=\"fileChanged.emit($event)\"\n (imageDeleted)=\"imageChanged.emit(key)\"\n (imageUploaded)=\"imageChanged.emit(key)\"\n ></base-upload-image>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Upload'\">\n <base-upload-image\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [supportText]=\"config[key]?.supportText || 'Unterst\u00FCtzte Formate: JPEG, JPG, PNG'\"\n [defaultDragText]=\"config[key]?.dragText || 'Drag & Drop'\"\n [defaultReleaseText]=\"config[key]?.releaseText || 'Loslassen zum hochladen'\"\n [preButtonText]=\"config[key]?.preButtonText || 'or'\"\n [buttonText]=\"config[key]?.buttonText || 'browse'\"\n [validExtensions]=\"config[key]?.validExtensions || ['image/jpeg', 'image/jpg', 'image/png', 'image/webp']\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [compressOptions]=\"config[key]?.compressOptions\"\n [maxSize]=\"config[key]?.maxSize\"\n [objectPath]=\"objectPath\"\n [mode]=\"'file'\"\n ></base-upload-image>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Reference'\">\n <base-refence-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [isList]=\"fields[key]?.isList\"\n [useParamAsArg]=\"config[key]?.useParamAsArg ?? false\"\n [param]=\"id\"\n [search]=\"config[key]?.searchable ?? true\"\n [placeholder]=\"config[key]?.placeholder || 'Bitte einen Wert ausw\u00E4hlen'\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [method]=\"config[key]?.method || 'find'\"\n [fields]=\"config[key]?.requestFields || ['id', 'name']\"\n [valueField]=\"config[key]?.valueField || 'id'\"\n [nameField]=\"config[key]?.nameField || 'name'\"\n [creationLink]=\"config[key]?.creationLink || ''\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-refence-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Boolean'\">\n <base-checkbox\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-checkbox>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'LongText'\">\n <base-textarea\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-textarea>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Float'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [type]=\"'number'\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Password'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [type]=\"'password'\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Color'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [type]=\"'color'\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'URL'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'url'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Email'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'email'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'DateTime'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'datetime-local'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n</div>\n" }]
|
|
87
87
|
}], ctorParameters: function () { return [{ type: i1.AuthService }]; }, propDecorators: { id: [{
|
|
88
88
|
type: Input
|
|
89
89
|
}], parentKey: [{
|
|
@@ -99,4 +99,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
|
|
|
99
99
|
}], fileChanged: [{
|
|
100
100
|
type: Output
|
|
101
101
|
}] } });
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtZm9ybS1zdWIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9iYXNlLWNvbXBvbmVudHMvY29tcG9uZW50cy9tb2RlbC1mb3JtLXN1Yi9tb2RlbC1mb3JtLXN1Yi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL21vZGVsLWZvcm0tc3ViL21vZGVsLWZvcm0tc3ViLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0UsT0FBTyxFQUFlLFNBQVMsRUFBK0IsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7Ozs7QUFPakcsTUFBTSxPQUFPLHFCQUFxQjtJQWNoQyxZQUFvQixXQUF3QjtRQUF4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQVBsQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDMUMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBK0QsQ0FBQztRQUV4RyxTQUFJLEdBQWEsRUFBRSxDQUFDO0lBSTJCLENBQUM7SUFFaEQsUUFBUTtRQUNOLFdBQVc7UUFDWCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU5Qyw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLElBQUksR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JDLE9BQU8sQ0FDTCxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUM1RyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFeEQsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7YUFDbEM7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO2FBQzFEO1NBQ0Y7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxtQkFBbUIsQ0FBQyxLQUFrQjtRQUNwQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gscUJBQXFCLENBQUMsS0FBYTtRQUNqQyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsb0JBQW9CLENBQUMsTUFBYSxFQUFFLE1BQU0sR0FBRyxFQUFFO1FBQzdDLE9BQU8sTUFBTTthQUNWLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ1osT0FBTyxDQUFDLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNuRixDQUFDLENBQUM7YUFDRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNULE9BQU87Z0JBQ0wsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsSUFBSSxFQUFFLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3JELENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGtCQUFrQixDQUFDLE9BQTJDO1FBQzVELE9BQU8sT0FBNkIsQ0FBQztJQUN2QyxDQUFDOztrSEFwRlUscUJBQXFCO3NHQUFyQixxQkFBcUIsa09DVGxDLGczWEFzUUEsazhDRDdQYSxxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSxxQkFBcUI7a0dBS3RCLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVW50eXBlZEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UsIEJhc2ljVXNlciwgQ01TRmllbGRDb25maWcsIEdyYXBoUUxUeXBlIH0gZnJvbSAnQGxlbm5lLnRlY2gvbmctYmFzZS9zaGFyZWQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdiYXNlLW1vZGVsLWZvcm0tc3ViJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21vZGVsLWZvcm0tc3ViLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbW9kZWwtZm9ybS1zdWIuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTW9kZWxGb3JtU3ViQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgaWQ6IHN0cmluZztcbiAgQElucHV0KCkgcGFyZW50S2V5OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZpZWxkczogUmVjb3JkPHN0cmluZywgR3JhcGhRTFR5cGU+O1xuICBASW5wdXQoKSBmb3JtOiBhbnk7XG4gIEBJbnB1dCgpIGNvbmZpZzogeyBba2V5OiBzdHJpbmddOiBDTVNGaWVsZENvbmZpZyB9O1xuXG4gIEBPdXRwdXQoKSBpbWFnZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGZpbGVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx7IGZpZWxkOiBzdHJpbmc7IGZpbGU6IEZpbGUgfCBudWxsOyBiYXNlNjQ6IHN0cmluZyB8IG51bGwgfT4oKTtcblxuICBrZXlzOiBzdHJpbmdbXSA9IFtdO1xuICB1c2VyOiBCYXNpY1VzZXI7XG4gIG9iamVjdFBhdGg6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBHZXQga2V5c1xuICAgIGNvbnN0IHVuc29ydGVkS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZmllbGRzKTtcblxuICAgIC8vIFNvcnQga2V5cyBieSBjb25maWcgb3JkZXJcbiAgICB0aGlzLmtleXMgPSB1bnNvcnRlZEtleXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHRoaXMuY29uZmlnW2FdPy5vcmRlciA/IHRoaXMuY29uZmlnW2FdPy5vcmRlciA6IDk5KSAtICh0aGlzLmNvbmZpZ1tiXT8ub3JkZXIgPyB0aGlzLmNvbmZpZ1tiXT8ub3JkZXIgOiA5OSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvLyBTZXQgdXNlciBmb3Igcm9sZXMgY2hlY2tcbiAgICB0aGlzLnVzZXIgPSBCYXNpY1VzZXIubWFwKHRoaXMuYXV0aFNlcnZpY2UuY3VycmVudFVzZXIpO1xuXG4gICAgaWYgKHRoaXMucGFyZW50S2V5KSB7XG4gICAgICBpZiAoIXRoaXMub2JqZWN0UGF0aCkge1xuICAgICAgICB0aGlzLm9iamVjdFBhdGggPSB0aGlzLnBhcmVudEtleTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub2JqZWN0UGF0aCA9IHRoaXMub2JqZWN0UGF0aCArICcuJyArIHRoaXMucGFyZW50S2V5O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgZmllbGQgaGFzIGZpZWxkcywgcmV0dXJuIHRydWUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXG4gICAqL1xuICBjaGVja0ZpZWxkSGFzRmllbGRzKGZpZWxkOiBHcmFwaFFMVHlwZSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhmaWVsZC5maWVsZHMpPy5sZW5ndGggIT09IDA7XG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgYSBzdHJpbmcsIGNhcGl0YWxpemVzIHRoZSBmaXJzdCBsZXR0ZXIsIGFuZCByZXR1cm5zIHRoZSBuZXcgc3RyaW5nXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBzdHJpbmcgdGhhdCB5b3Ugd2FudCB0byBjYXBpdGFsaXplIHRoZSBmaXJzdCBsZXR0ZXIgb2YuXG4gICAqIEByZXR1cm5zIFRoZSBmaXJzdCBsZXR0ZXIgb2YgdGhlIHN0cmluZyBpcyBiZWluZyBjYXBpdGFsaXplZCBhbmQgdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyBpcyBiZWluZyByZXR1cm5lZC5cbiAgICovXG4gIGNhcGl0YWxpemVGaXJzdExldHRlcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHZhbHVlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdmFsdWUuc2xpY2UoMSk7XG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgYW4gYXJyYXkgb2YgdmFsdWVzIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBhIHZhbHVlIGFuZCB0ZXh0IHByb3BlcnR5XG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZXMgLSBhbnlbXSAtIHRoZSBhcnJheSBvZiB2YWx1ZXMgdGhhdCB5b3Ugd2FudCB0byBjb252ZXJ0IHRvIGEgc2VsZWN0YWJsZSBsaXN0XG4gICAqIEBwYXJhbSBjb25maWdcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGEgdmFsdWUgYW5kIHRleHQgcHJvcGVydHkuXG4gICAqL1xuICBwcmVwYXJlRW51bUZvclNlbGVjdCh2YWx1ZXM6IGFueVtdLCBjb25maWcgPSB7fSkge1xuICAgIHJldHVybiB2YWx1ZXNcbiAgICAgIC5maWx0ZXIoKGkpID0+IHtcbiAgICAgICAgcmV0dXJuICEoY29uZmlnICYmIGNvbmZpZ1tpXT8ucm9sZXMgJiYgIXRoaXMudXNlci5oYXNBbGxSb2xlcyhjb25maWdbaV0/LnJvbGVzKSk7XG4gICAgICB9KVxuICAgICAgLm1hcCgoZSkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlOiBlLFxuICAgICAgICAgIHRleHQ6IGNvbmZpZyAmJiBjb25maWdbZV0/LnRleHQgPyBjb25maWdbZV0udGV4dCA6IGUsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBhbiBBYnN0cmFjdENvbnRyb2wgYW5kIHJldHVybnMgYSBGb3JtQ29udHJvbFxuICAgKlxuICAgKiBAcGFyYW0gY29udHJvbCAtIEFic3RyYWN0Q29udHJvbCB8IG51bGwgfCB1bmRlZmluZWRcbiAgICogQHJldHVybnMgQSBGb3JtQ29udHJvbFxuICAgKi9cbiAgdHJhbnNmb3JtVG9Db250cm9sKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY29udHJvbCBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtdC0zXCIgKm5nRm9yPVwibGV0IGtleSBvZiBrZXlzXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cImNoZWNrRmllbGRIYXNGaWVsZHMoZmllbGRzW2tleV0pICYmIChjb25maWdba2V5XT8ucm9sZXMgPyB1c2VyPy5oYXNBbGxSb2xlcyhjb25maWdba2V5XT8ucm9sZXMpIDogdHJ1ZSlcIlxuICA+XG4gICAgPGZpZWxkc2V0IGNsYXNzPVwiYm9yZGVyIHJvdW5kZWQtMyBwLTMgbXQtM1wiPlxuICAgICAgPGxlZ2VuZCBjbGFzcz1cImZsb2F0LW5vbmUgdy1hdXRvIHB4LTNcIj5cbiAgICAgICAge3sgY29uZmlnW2tleV0/LmxhYmVsID8gY29uZmlnW2tleV0ubGFiZWwgOiBjYXBpdGFsaXplRmlyc3RMZXR0ZXIoa2V5KSB9fVxuICAgICAgPC9sZWdlbmQ+XG4gICAgICA8YmFzZS1tb2RlbC1mb3JtLXN1YlxuICAgICAgICBbcGFyZW50S2V5XT1cImtleVwiXG4gICAgICAgIFtmaWVsZHNdPVwiZmllbGRzW2tleV0uZmllbGRzXCJcbiAgICAgICAgW2NvbmZpZ109XCJjb25maWdba2V5XT8uZmllbGRzIHx8IHt9XCJcbiAgICAgICAgW2Zvcm1dPVwiZm9ybS5nZXQoa2V5KVwiXG4gICAgICAgIChpbWFnZUNoYW5nZWQpPVwiaW1hZ2VDaGFuZ2VkLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChmaWxlQ2hhbmdlZCk9XCJmaWxlQ2hhbmdlZC5lbWl0KCRldmVudClcIlxuICAgICAgPjwvYmFzZS1tb2RlbC1mb3JtLXN1Yj5cbiAgICA8L2ZpZWxkc2V0PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCIhY2hlY2tGaWVsZEhhc0ZpZWxkcyhmaWVsZHNba2V5XSkgJiYgKGNvbmZpZ1trZXldPy5yb2xlcyA/IHVzZXI/Lmhhc0FsbFJvbGVzKGNvbmZpZ1trZXldPy5yb2xlcykgOiB0cnVlKVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmllbGRzW2tleV0/LmlzRW51bSAmJiAhY29uZmlnW2tleV0/LmV4Y2x1ZGVcIj5cbiAgICAgIDxiYXNlLXNlbGVjdFxuICAgICAgICBbaWRdPVwia2V5XCJcbiAgICAgICAgW25hbWVdPVwia2V5XCJcbiAgICAgICAgW2xhYmVsXT1cImNvbmZpZ1trZXldPy5sYWJlbCA/IGNvbmZpZ1trZXldLmxhYmVsIDogY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKGtleSlcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiY29uZmlnW2tleV0/LnBsYWNlaG9sZGVyIHx8ICdCaXR0ZSBlaW5lbiBXZXJ0IGF1c3fDpGhsZW4nXCJcbiAgICAgICAgW29wdGlvbnNdPVwicHJlcGFyZUVudW1Gb3JTZWxlY3QoZmllbGRzW2tleV0/LnZhbGlkRW51bXMsIGNvbmZpZ1trZXldPy5lbnVtVmFsdWVzKVwiXG4gICAgICAgIFtjb250cm9sXT1cInRyYW5zZm9ybVRvQ29udHJvbChmb3JtPy5nZXQoa2V5KSlcIlxuICAgICAgICBbcmVxdWlyZWRdPVwiY29uZmlnW2tleV0gJiYgY29uZmlnW2tleV0/LnJlcXVpcmVkICE9PSB1bmRlZmluZWQgPyBjb25maWdba2V5XT8ucmVxdWlyZWQgOiBmaWVsZHNba2V5XS5pc1JlcXVpcmVkXCJcbiAgICAgICAgW29iamVjdFBhdGhdPVwib2JqZWN0UGF0aFwiXG4gICAgICA+PC9iYXNlLXNlbGVjdD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmllbGRzW2tleV0/LmlzRW51bSAmJiAhY29uZmlnW2tleV0/LmV4Y2x1ZGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbmZpZ1trZXldPy50eXBlID8gY29uZmlnW2tleV0/LnR5cGUgOiBmaWVsZHNba2V5XT8udHlwZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInU3RyaW5nJ1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWVsZHNba2V5XT8uaXNMaXN0ICYmICFjb25maWdba2V5XT8uZXhjbHVkZVwiPlxuICAgICAgICAgICAgPGJhc2UtdGFnc1xuICAgICAgICAgICAgICBbaWRdPVwia2V5XCJcbiAgICAgICAgICAgICAgW25hbWVdPVwia2V5XCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImNvbmZpZ1trZXldPy5sYWJlbCA/IGNvbmZpZ1trZXldLmxhYmVsIDogY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKGtleSlcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiY29uZmlnW2tleV0/LnBsYWNlaG9sZGVyIHx8ICcnXCJcbiAgICAgICAgICAgICAgW2NvbnRyb2xdPVwidHJhbnNmb3JtVG9Db250cm9sKGZvcm0/LmdldChrZXkpKVwiXG4gICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJcbiAgICAgICAgICAgICAgICBjb25maWdba2V5XSAmJiBjb25maWdba2V5XT8ucmVxdWlyZWQgIT09IHVuZGVmaW5lZCA/IGNvbmZpZ1trZXldPy5yZXF1aXJlZCA6IGZpZWxkc1trZXldLmlzUmVxdWlyZWRcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiY29uZmlnW2tleV0/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICBbb2JqZWN0UGF0aF09XCJvYmplY3RQYXRoXCJcbiAgICAgICAgICAgID48L2Jhc2UtdGFncz5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmllbGRzW2tleV0/LmlzTGlzdCAmJiAhY29uZmlnW2tleV0/LmV4Y2x1ZGVcIj5cbiAgICAgICAgICAgIDxiYXNlLWlucHV0XG4gICAgICAgICAgICAgIFtpZF09XCJrZXlcIlxuICAgICAgICAgICAgICBbbmFtZV09XCJrZXlcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnW2tleV0/LmxhYmVsID8gY29uZmlnW2tleV0ubGFiZWwgOiBjYXBpdGFsaXplRmlyc3RMZXR0ZXIoa2V5KVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjb25maWdba2V5XT8ucGxhY2Vob2xkZXIgfHwgJydcIlxuICAgICAgICAgICAgICBbdHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICBbY29udHJvbF09XCJ0cmFuc2Zvcm1Ub0NvbnRyb2woZm9ybT8uZ2V0KGtleSkpXCJcbiAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cIlxuICAgICAgICAgICAgICAgIGNvbmZpZ1trZXldICYmIGNvbmZpZ1trZXldPy5yZXF1aXJlZCAhPT0gdW5kZWZpbmVkID8gY29uZmlnW2tleV0/LnJlcXVpcmVkIDogZmllbGRzW2tleV0uaXNSZXF1aXJlZFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbb2JqZWN0UGF0aF09XCJvYmplY3RQYXRoXCJcbiAgICAgICAgICAgID48L2Jhc2UtaW5wdXQ+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidJbWFnZSdcIj5cbiAgICAgICAgICA8YmFzZS11cGxvYWQtaW1hZ2VcbiAgICAgICAgICAgIFtpZF09XCJrZXlcIlxuICAgICAgICAgICAgW25hbWVdPVwia2V5XCJcbiAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWdba2V5XT8ubGFiZWwgPyBjb25maWdba2V5XS5sYWJlbCA6IGNhcGl0YWxpemVGaXJzdExldHRlcihrZXkpXCJcbiAgICAgICAgICAgIFtjb250cm9sXT1cInRyYW5zZm9ybVRvQ29udHJvbChmb3JtPy5nZXQoa2V5KSlcIlxuICAgICAgICAgICAgW3VybF09XCJjb25maWdba2V5XT8udXJsXCJcbiAgICAgICAgICAgIFtwYXRoXT1cImNvbmZpZ1trZXldPy5wYXRoIHx8ICcvZmlsZXMvJ1wiXG4gICAgICAgICAgICBbdXBsb2FkUGF0aF09XCJjb25maWdba2V5XT8udXBsb2FkUGF0aCB8fCAnL2ZpbGVzL3VwbG9hZCdcIlxuICAgICAgICAgICAgW2RlbGV0ZVBhdGhdPVwiY29uZmlnW2tleV0/LmRlbGV0ZVBhdGggfHwgJy9maWxlcy8nXCJcbiAgICAgICAgICAgIFtzdXBwb3J0VGV4dF09XCJjb25maWdba2V5XT8uc3VwcG9ydFRleHQgfHwgJ1VudGVyc3TDvHR6dGUgRm9ybWF0ZTogSlBFRywgSlBHLCBQTkcnXCJcbiAgICAgICAgICAgIFtkZWZhdWx0RHJhZ1RleHRdPVwiY29uZmlnW2tleV0/LmRyYWdUZXh0IHx8ICdEcmFnICYgRHJvcCdcIlxuICAgICAgICAgICAgW2RlZmF1bHRSZWxlYXNlVGV4dF09XCJjb25maWdba2V5XT8ucmVsZWFzZVRleHQgfHwgJ0xvc2xhc3NlbiB6dW0gaG9jaGxhZGVuJ1wiXG4gICAgICAgICAgICBbcHJlQnV0dG9uVGV4dF09XCJjb25maWdba2V5XT8ucHJlQnV0dG9uVGV4dCB8fCAnb3InXCJcbiAgICAgICAgICAgIFtidXR0b25UZXh0XT1cImNvbmZpZ1trZXldPy5idXR0b25UZXh0IHx8ICdicm93c2UnXCJcbiAgICAgICAgICAgIFt2YWxpZEV4dGVuc2lvbnNdPVwiY29uZmlnW2tleV0/LnZhbGlkRXh0ZW5zaW9ucyB8fCBbJ2ltYWdlL2pwZWcnLCAnaW1hZ2UvanBnJywgJ2ltYWdlL3BuZycsICdpbWFnZS93ZWJwJ11cIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cIlxuICAgICAgICAgICAgICBjb25maWdba2V5XSAmJiBjb25maWdba2V5XT8ucmVxdWlyZWQgIT09IHVuZGVmaW5lZCA/IGNvbmZpZ1trZXldPy5yZXF1aXJlZCA6IGZpZWxkc1trZXldLmlzUmVxdWlyZWRcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbY29tcHJlc3NPcHRpb25zXT1cImNvbmZpZ1trZXldPy5jb21wcmVzc09wdGlvbnNcIlxuICAgICAgICAgICAgW21heFNpemVdPVwiY29uZmlnW2tleV0/Lm1heFNpemVcIlxuICAgICAgICAgICAgW3VwbG9hZERpcmVjdGx5XT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtvYmplY3RQYXRoXT1cIm9iamVjdFBhdGhcIlxuICAgICAgICAgICAgW21vZGVdPVwiY29uZmlnW2tleV0/LmltYWdlTW9kZSB8fCAnYmFzZTY0J1wiXG4gICAgICAgICAgICAoZmlsZUNoYW5nZWQpPVwiZmlsZUNoYW5nZWQuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChpbWFnZURlbGV0ZWQpPVwiaW1hZ2VDaGFuZ2VkLmVtaXQoa2V5KVwiXG4gICAgICAgICAgICAoaW1hZ2VVcGxvYWRlZCk9XCJpbWFnZUNoYW5nZWQuZW1pdChrZXkpXCJcbiAgICAgICAgICA+PC9iYXNlLXVwbG9hZC1pbWFnZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1VwbG9hZCdcIj5cbiAgICAgICAgICA8YmFzZS11cGxvYWQtaW1hZ2VcbiAgICAgICAgICAgIFtpZF09XCJrZXlcIlxuICAgICAgICAgICAgW25hbWVdPVwia2V5XCJcbiAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWdba2V5XT8ubGFiZWwgPyBjb25maWdba2V5XS5sYWJlbCA6IGNhcGl0YWxpemVGaXJzdExldHRlcihrZXkpXCJcbiAgICAgICAgICAgIFtjb250cm9sXT1cInRyYW5zZm9ybVRvQ29udHJvbChmb3JtPy5nZXQoa2V5KSlcIlxuICAgICAgICAgICAgW3N1cHBvcnRUZXh0XT1cImNvbmZpZ1trZXldPy5zdXBwb3J0VGV4dCB8fCAnVW50ZXJzdMO8dHp0ZSBGb3JtYXRlOiBKUEVHLCBKUEcsIFBORydcIlxuICAgICAgICAgICAgW2RlZmF1bHREcmFnVGV4dF09XCJjb25maWdba2V5XT8uZHJhZ1RleHQgfHwgJ0RyYWcgJiBEcm9wJ1wiXG4gICAgICAgICAgICBbZGVmYXVsdFJlbGVhc2VUZXh0XT1cImNvbmZpZ1trZXldPy5yZWxlYXNlVGV4dCB8fCAnTG9zbGFzc2VuIHp1bSBob2NobGFkZW4nXCJcbiAgICAgICAgICAgIFtwcmVCdXR0b25UZXh0XT1cImNvbmZpZ1trZXldPy5wcmVCdXR0b25UZXh0IHx8ICdvcidcIlxuICAgICAgICAgICAgW2J1dHRvblRleHRdPVwiY29uZmlnW2tleV0/LmJ1dHRvblRleHQgfHwgJ2Jyb3dzZSdcIlxuICAgICAgICAgICAgW3ZhbGlkRXh0ZW5zaW9uc109XCJjb25maWdba2V5XT8udmFsaWRFeHRlbnNpb25zIHx8IFsnaW1hZ2UvanBlZycsICdpbWFnZS9qcGcnLCAnaW1hZ2UvcG5nJywgJ2ltYWdlL3dlYnAnXVwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwiXG4gICAgICAgICAgICAgIGNvbmZpZ1trZXldICYmIGNvbmZpZ1trZXldPy5yZXF1aXJlZCAhPT0gdW5kZWZpbmVkID8gY29uZmlnW2tleV0/LnJlcXVpcmVkIDogZmllbGRzW2tleV0uaXNSZXF1aXJlZFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtjb21wcmVzc09wdGlvbnNdPVwiY29uZmlnW2tleV0/LmNvbXByZXNzT3B0aW9uc1wiXG4gICAgICAgICAgICBbbWF4U2l6ZV09XCJjb25maWdba2V5XT8ubWF4U2l6ZVwiXG4gICAgICAgICAgICBbb2JqZWN0UGF0aF09XCJvYmplY3RQYXRoXCJcbiAgICAgICAgICAgIFttb2RlXT1cIidmaWxlJ1wiXG4gICAgICAgICAgPjwvYmFzZS11cGxvYWQtaW1hZ2U+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidSZWZlcmVuY2UnXCI+XG4gICAgICAgICAgPGJhc2UtcmVmZW5jZS1pbnB1dFxuICAgICAgICAgICAgW2lkXT1cImtleVwiXG4gICAgICAgICAgICBbbmFtZV09XCJrZXlcIlxuICAgICAgICAgICAgW2lzTGlzdF09XCJmaWVsZHNba2V5XT8uaXNMaXN0XCJcbiAgICAgICAgICAgIFt1c2VQYXJhbUFzQXJnXT1cImNvbmZpZ1trZXldPy51c2VQYXJhbUFzQXJnID8/IGZhbHNlXCJcbiAgICAgICAgICAgIFtwYXJhbV09XCJpZFwiXG4gICAgICAgICAgICBbc2VhcmNoXT1cImNvbmZpZ1trZXldPy5zZWFyY2hhYmxlID8/IHRydWVcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbmZpZ1trZXldPy5wbGFjZWhvbGRlciB8fCAnQml0dGUgZWluZW4gV2VydCBhdXN3w6RobGVuJ1wiXG4gICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnW2tleV0/LmxhYmVsID8gY29uZmlnW2tleV0ubGFiZWwgOiBjYXBpdGFsaXplRmlyc3RMZXR0ZXIoa2V5KVwiXG4gICAgICAgICAgICBbY29udHJvbF09XCJ0cmFuc2Zvcm1Ub0NvbnRyb2woZm9ybT8uZ2V0KGtleSkpXCJcbiAgICAgICAgICAgIFttZXRob2RdPVwiY29uZmlnW2tleV0/Lm1ldGhvZCB8fCAnZmluZCdcIlxuICAgICAgICAgICAgW2ZpZWxkc109XCJjb25maWdba2V5XT8ucmVxdWVzdEZpZWxkcyB8fCBbJ2lkJywgJ25hbWUnXVwiXG4gICAgICAgICAgICBbdmFsdWVGaWVsZF09XCJjb25maWdba2V5XT8udmFsdWVGaWVsZCB8fCAnaWQnXCJcbiAgICAgICAgICAgIFtuYW1lRmllbGRdPVwiY29uZmlnW2tleV0/Lm5hbWVGaWVsZCB8fCAnbmFtZSdcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cIlxuICAgICAgICAgICAgICBjb25maWdba2V5XSAmJiBjb25maWdba2V5XT8ucmVxdWlyZWQgIT09IHVuZGVmaW5lZCA/IGNvbmZpZ1trZXldPy5yZXF1aXJlZCA6IGZpZWxkc1trZXldLmlzUmVxdWlyZWRcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbb2JqZWN0UGF0aF09XCJvYmplY3RQYXRoXCJcbiAgICAgICAgICA+PC9iYXNlLXJlZmVuY2UtaW5wdXQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidCb29sZWFuJ1wiPlxuICAgICAgICAgIDxiYXNlLWNoZWNrYm94XG4gICAgICAgICAgICBbaWRdPVwia2V5XCJcbiAgICAgICAgICAgIFtuYW1lXT1cImtleVwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnW2tleV0/LmxhYmVsID8gY29uZmlnW2tleV0ubGFiZWwgOiBjYXBpdGFsaXplRmlyc3RMZXR0ZXIoa2V5KVwiXG4gICAgICAgICAgICBbY29udHJvbF09XCJ0cmFuc2Zvcm1Ub0NvbnRyb2woZm9ybT8uZ2V0KGtleSkpXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJcbiAgICAgICAgICAgICAgY29uZmlnW2tleV0gJiYgY29uZmlnW2tleV0/LnJlcXVpcmVkICE9PSB1bmRlZmluZWQgPyBjb25maWdba2V5XT8ucmVxdWlyZWQgOiBmaWVsZHNba2V5XS5pc1JlcXVpcmVkXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW29iamVjdFBhdGhdPVwib2JqZWN0UGF0aFwiXG4gICAgICAgICAgPjwvYmFzZS1jaGVja2JveD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ0xvbmdUZXh0J1wiPlxuICAgICAgICAgIDxiYXNlLXRleHRhcmVhXG4gICAgICAgICAgICBbaWRdPVwia2V5XCJcbiAgICAgICAgICAgIFtuYW1lXT1cImtleVwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnW2tleV0/LmxhYmVsID8gY29uZmlnW2tleV0ubGFiZWwgOiBjYXBpdGFsaXplRmlyc3RMZXR0ZXIoa2V5KVwiXG4gICAgICAgICAgICBbY29udHJvbF09XCJ0cmFuc2Zvcm1Ub0NvbnRyb2woZm9ybT8uZ2V0KGtleSkpXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJcbiAgICAgICAgICAgICAgY29uZmlnW2tleV0gJiYgY29uZmlnW2tleV0/LnJlcXVpcmVkICE9PSB1bmRlZmluZWQgPyBjb25maWdba2V5XT8ucmVxdWlyZWQgOiBmaWVsZHNba2V5XS5pc1JlcXVpcmVkXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW29iamVjdFBhdGhdPVwib2JqZWN0UGF0aFwiXG4gICAgICAgICAgPjwvYmFzZS10ZXh0YXJlYT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ0Zsb2F0J1wiPlxuICAgICAgICAgIDxiYXNlLWlucHV0XG4gICAgICAgICAgICBbaWRdPVwia2V5XCJcbiAgICAgICAgICAgIFtuYW1lXT1cImtleVwiXG4gICAgICAgICAgICBbdHlwZV09XCInbnVtYmVyJ1wiXG4gICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnW2tleV0/LmxhYmVsID8gY29uZmlnW2tleV0ubGFiZWwgOiBjYXBpdGFsaXplRmlyc3RMZXR0ZXIoa2V5KVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiY29uZmlnW2tleV0/LnBsYWNlaG9sZGVyIHx8ICcnXCJcbiAgICAgICAgICAgIFtjb250cm9sXT1cInRyYW5zZm9ybVRvQ29udHJvbChmb3JtPy5nZXQoa2V5KSlcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cIlxuICAgICAgICAgICAgICBjb25maWdba2V5XSAmJiBjb25maWdba2V5XT8ucmVxdWlyZWQgIT09IHVuZGVmaW5lZCA/IGNvbmZpZ1trZXldPy5yZXF1aXJlZCA6IGZpZWxkc1trZXldLmlzUmVxdWlyZWRcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbb2JqZWN0UGF0aF09XCJvYmplY3RQYXRoXCJcbiAgICAgICAgICA+PC9iYXNlLWlucHV0PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInUGFzc3dvcmQnXCI+XG4gICAgICAgICAgPGJhc2UtaW5wdXRcbiAgICAgICAgICAgIFtpZF09XCJrZXlcIlxuICAgICAgICAgICAgW25hbWVdPVwia2V5XCJcbiAgICAgICAgICAgIFt0eXBlXT1cIidwYXNzd29yZCdcIlxuICAgICAgICAgICAgW2xhYmVsXT1cImNvbmZpZ1trZXldPy5sYWJlbCA/IGNvbmZpZ1trZXldLmxhYmVsIDogY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKGtleSlcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbmZpZ1trZXldPy5wbGFjZWhvbGRlciB8fCAnJ1wiXG4gICAgICAgICAgICBbY29udHJvbF09XCJ0cmFuc2Zvcm1Ub0NvbnRyb2woZm9ybT8uZ2V0KGtleSkpXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJcbiAgICAgICAgICAgICAgY29uZmlnW2tleV0gJiYgY29uZmlnW2tleV0/LnJlcXVpcmVkICE9PSB1bmRlZmluZWQgPyBjb25maWdba2V5XT8ucmVxdWlyZWQgOiBmaWVsZHNba2V5XS5pc1JlcXVpcmVkXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW29iamVjdFBhdGhdPVwib2JqZWN0UGF0aFwiXG4gICAgICAgICAgPjwvYmFzZS1pbnB1dD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ0NvbG9yJ1wiPlxuICAgICAgICAgIDxiYXNlLWlucHV0XG4gICAgICAgICAgICBbaWRdPVwia2V5XCJcbiAgICAgICAgICAgIFtuYW1lXT1cImtleVwiXG4gICAgICAgICAgICBbdHlwZV09XCInY29sb3InXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWdba2V5XT8ubGFiZWwgPyBjb25maWdba2V5XS5sYWJlbCA6IGNhcGl0YWxpemVGaXJzdExldHRlcihrZXkpXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjb25maWdba2V5XT8ucGxhY2Vob2xkZXIgfHwgJydcIlxuICAgICAgICAgICAgW2NvbnRyb2xdPVwidHJhbnNmb3JtVG9Db250cm9sKGZvcm0/LmdldChrZXkpKVwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwiXG4gICAgICAgICAgICAgIGNvbmZpZ1trZXldICYmIGNvbmZpZ1trZXldPy5yZXF1aXJlZCAhPT0gdW5kZWZpbmVkID8gY29uZmlnW2tleV0/LnJlcXVpcmVkIDogZmllbGRzW2tleV0uaXNSZXF1aXJlZFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtvYmplY3RQYXRoXT1cIm9iamVjdFBhdGhcIlxuICAgICAgICAgID48L2Jhc2UtaW5wdXQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidVUkwnXCI+XG4gICAgICAgICAgPGJhc2UtaW5wdXRcbiAgICAgICAgICAgIFtpZF09XCJrZXlcIlxuICAgICAgICAgICAgW25hbWVdPVwia2V5XCJcbiAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWdba2V5XT8ubGFiZWwgPyBjb25maWdba2V5XS5sYWJlbCA6IGNhcGl0YWxpemVGaXJzdExldHRlcihrZXkpXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjb25maWdba2V5XT8ucGxhY2Vob2xkZXIgfHwgJydcIlxuICAgICAgICAgICAgW3R5cGVdPVwiJ3VybCdcIlxuICAgICAgICAgICAgW2NvbnRyb2xdPVwidHJhbnNmb3JtVG9Db250cm9sKGZvcm0/LmdldChrZXkpKVwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwiXG4gICAgICAgICAgICAgIGNvbmZpZ1trZXldICYmIGNvbmZpZ1trZXldPy5yZXF1aXJlZCAhPT0gdW5kZWZpbmVkID8gY29uZmlnW2tleV0/LnJlcXVpcmVkIDogZmllbGRzW2tleV0uaXNSZXF1aXJlZFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtvYmplY3RQYXRoXT1cIm9iamVjdFBhdGhcIlxuICAgICAgICAgID48L2Jhc2UtaW5wdXQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidFbWFpbCdcIj5cbiAgICAgICAgICA8YmFzZS1pbnB1dFxuICAgICAgICAgICAgW2lkXT1cImtleVwiXG4gICAgICAgICAgICBbbmFtZV09XCJrZXlcIlxuICAgICAgICAgICAgW2xhYmVsXT1cImNvbmZpZ1trZXldPy5sYWJlbCA/IGNvbmZpZ1trZXldLmxhYmVsIDogY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKGtleSlcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbmZpZ1trZXldPy5wbGFjZWhvbGRlciB8fCAnJ1wiXG4gICAgICAgICAgICBbdHlwZV09XCInZW1haWwnXCJcbiAgICAgICAgICAgIFtjb250cm9sXT1cInRyYW5zZm9ybVRvQ29udHJvbChmb3JtPy5nZXQoa2V5KSlcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cIlxuICAgICAgICAgICAgICBjb25maWdba2V5XSAmJiBjb25maWdba2V5XT8ucmVxdWlyZWQgIT09IHVuZGVmaW5lZCA/IGNvbmZpZ1trZXldPy5yZXF1aXJlZCA6IGZpZWxkc1trZXldLmlzUmVxdWlyZWRcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbb2JqZWN0UGF0aF09XCJvYmplY3RQYXRoXCJcbiAgICAgICAgICA+PC9iYXNlLWlucHV0PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInRGF0ZVRpbWUnXCI+XG4gICAgICAgICAgPGJhc2UtaW5wdXRcbiAgICAgICAgICAgIFtpZF09XCJrZXlcIlxuICAgICAgICAgICAgW25hbWVdPVwia2V5XCJcbiAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWdba2V5XT8ubGFiZWwgPyBjb25maWdba2V5XS5sYWJlbCA6IGNhcGl0YWxpemVGaXJzdExldHRlcihrZXkpXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjb25maWdba2V5XT8ucGxhY2Vob2xkZXIgfHwgJydcIlxuICAgICAgICAgICAgW3R5cGVdPVwiJ2RhdGV0aW1lLWxvY2FsJ1wiXG4gICAgICAgICAgICBbY29udHJvbF09XCJ0cmFuc2Zvcm1Ub0NvbnRyb2woZm9ybT8uZ2V0KGtleSkpXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJcbiAgICAgICAgICAgICAgY29uZmlnW2tleV0gJiYgY29uZmlnW2tleV0/LnJlcXVpcmVkICE9PSB1bmRlZmluZWQgPyBjb25maWdba2V5XT8ucmVxdWlyZWQgOiBmaWVsZHNba2V5XS5pc1JlcXVpcmVkXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW29iamVjdFBhdGhdPVwib2JqZWN0UGF0aFwiXG4gICAgICAgICAgPjwvYmFzZS1pbnB1dD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cbiJdfQ==
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtZm9ybS1zdWIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9iYXNlLWNvbXBvbmVudHMvY29tcG9uZW50cy9tb2RlbC1mb3JtLXN1Yi9tb2RlbC1mb3JtLXN1Yi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL21vZGVsLWZvcm0tc3ViL21vZGVsLWZvcm0tc3ViLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0UsT0FBTyxFQUFlLFNBQVMsRUFBK0IsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7Ozs7QUFPakcsTUFBTSxPQUFPLHFCQUFxQjtJQWNoQyxZQUFvQixXQUF3QjtRQUF4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQVBsQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDMUMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBK0QsQ0FBQztRQUV4RyxTQUFJLEdBQWEsRUFBRSxDQUFDO0lBSTJCLENBQUM7SUFFaEQsUUFBUTtRQUNOLFdBQVc7UUFDWCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU5Qyw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLElBQUksR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JDLE9BQU8sQ0FDTCxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUM1RyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFeEQsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7YUFDbEM7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO2FBQzFEO1NBQ0Y7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxtQkFBbUIsQ0FBQyxLQUFrQjtRQUNwQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gscUJBQXFCLENBQUMsS0FBYTtRQUNqQyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsb0JBQW9CLENBQUMsTUFBYSxFQUFFLE1BQU0sR0FBRyxFQUFFO1FBQzdDLE9BQU8sTUFBTTthQUNWLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ1osT0FBTyxDQUFDLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNuRixDQUFDLENBQUM7YUFDRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNULE9BQU87Z0JBQ0wsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsSUFBSSxFQUFFLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3JELENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGtCQUFrQixDQUFDLE9BQTJDO1FBQzVELE9BQU8sT0FBNkIsQ0FBQztJQUN2QyxDQUFDOztrSEFwRlUscUJBQXFCO3NHQUFyQixxQkFBcUIsa09DVGxDLDRqYUFzUkEsZ2dERDdRYSxxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSxxQkFBcUI7a0dBS3RCLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVW50eXBlZEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UsIEJhc2ljVXNlciwgQ01TRmllbGRDb25maWcsIEdyYXBoUUxUeXBlIH0gZnJvbSAnQGxlbm5lLnRlY2gvbmctYmFzZS9zaGFyZWQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdiYXNlLW1vZGVsLWZvcm0tc3ViJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21vZGVsLWZvcm0tc3ViLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbW9kZWwtZm9ybS1zdWIuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTW9kZWxGb3JtU3ViQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgaWQ6IHN0cmluZztcbiAgQElucHV0KCkgcGFyZW50S2V5OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZpZWxkczogUmVjb3JkPHN0cmluZywgR3JhcGhRTFR5cGU+O1xuICBASW5wdXQoKSBmb3JtOiBhbnk7XG4gIEBJbnB1dCgpIGNvbmZpZzogeyBba2V5OiBzdHJpbmddOiBDTVNGaWVsZENvbmZpZyB9O1xuXG4gIEBPdXRwdXQoKSBpbWFnZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGZpbGVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx7IGZpZWxkOiBzdHJpbmc7IGZpbGU6IEZpbGUgfCBudWxsOyBiYXNlNjQ6IHN0cmluZyB8IG51bGwgfT4oKTtcblxuICBrZXlzOiBzdHJpbmdbXSA9IFtdO1xuICB1c2VyOiBCYXNpY1VzZXI7XG4gIG9iamVjdFBhdGg6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBHZXQga2V5c1xuICAgIGNvbnN0IHVuc29ydGVkS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZmllbGRzKTtcblxuICAgIC8vIFNvcnQga2V5cyBieSBjb25maWcgb3JkZXJcbiAgICB0aGlzLmtleXMgPSB1bnNvcnRlZEtleXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHRoaXMuY29uZmlnW2FdPy5vcmRlciA/IHRoaXMuY29uZmlnW2FdPy5vcmRlciA6IDk5KSAtICh0aGlzLmNvbmZpZ1tiXT8ub3JkZXIgPyB0aGlzLmNvbmZpZ1tiXT8ub3JkZXIgOiA5OSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvLyBTZXQgdXNlciBmb3Igcm9sZXMgY2hlY2tcbiAgICB0aGlzLnVzZXIgPSBCYXNpY1VzZXIubWFwKHRoaXMuYXV0aFNlcnZpY2UuY3VycmVudFVzZXIpO1xuXG4gICAgaWYgKHRoaXMucGFyZW50S2V5KSB7XG4gICAgICBpZiAoIXRoaXMub2JqZWN0UGF0aCkge1xuICAgICAgICB0aGlzLm9iamVjdFBhdGggPSB0aGlzLnBhcmVudEtleTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub2JqZWN0UGF0aCA9IHRoaXMub2JqZWN0UGF0aCArICcuJyArIHRoaXMucGFyZW50S2V5O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgZmllbGQgaGFzIGZpZWxkcywgcmV0dXJuIHRydWUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXG4gICAqL1xuICBjaGVja0ZpZWxkSGFzRmllbGRzKGZpZWxkOiBHcmFwaFFMVHlwZSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhmaWVsZC5maWVsZHMpPy5sZW5ndGggIT09IDA7XG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgYSBzdHJpbmcsIGNhcGl0YWxpemVzIHRoZSBmaXJzdCBsZXR0ZXIsIGFuZCByZXR1cm5zIHRoZSBuZXcgc3RyaW5nXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBzdHJpbmcgdGhhdCB5b3Ugd2FudCB0byBjYXBpdGFsaXplIHRoZSBmaXJzdCBsZXR0ZXIgb2YuXG4gICAqIEByZXR1cm5zIFRoZSBmaXJzdCBsZXR0ZXIgb2YgdGhlIHN0cmluZyBpcyBiZWluZyBjYXBpdGFsaXplZCBhbmQgdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyBpcyBiZWluZyByZXR1cm5lZC5cbiAgICovXG4gIGNhcGl0YWxpemVGaXJzdExldHRlcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHZhbHVlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdmFsdWUuc2xpY2UoMSk7XG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgYW4gYXJyYXkgb2YgdmFsdWVzIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBhIHZhbHVlIGFuZCB0ZXh0IHByb3BlcnR5XG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZXMgLSBhbnlbXSAtIHRoZSBhcnJheSBvZiB2YWx1ZXMgdGhhdCB5b3Ugd2FudCB0byBjb252ZXJ0IHRvIGEgc2VsZWN0YWJsZSBsaXN0XG4gICAqIEBwYXJhbSBjb25maWdcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGEgdmFsdWUgYW5kIHRleHQgcHJvcGVydHkuXG4gICAqL1xuICBwcmVwYXJlRW51bUZvclNlbGVjdCh2YWx1ZXM6IGFueVtdLCBjb25maWcgPSB7fSkge1xuICAgIHJldHVybiB2YWx1ZXNcbiAgICAgIC5maWx0ZXIoKGkpID0+IHtcbiAgICAgICAgcmV0dXJuICEoY29uZmlnICYmIGNvbmZpZ1tpXT8ucm9sZXMgJiYgIXRoaXMudXNlci5oYXNBbGxSb2xlcyhjb25maWdbaV0/LnJvbGVzKSk7XG4gICAgICB9KVxuICAgICAgLm1hcCgoZSkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlOiBlLFxuICAgICAgICAgIHRleHQ6IGNvbmZpZyAmJiBjb25maWdbZV0/LnRleHQgPyBjb25maWdbZV0udGV4dCA6IGUsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBhbiBBYnN0cmFjdENvbnRyb2wgYW5kIHJldHVybnMgYSBGb3JtQ29udHJvbFxuICAgKlxuICAgKiBAcGFyYW0gY29udHJvbCAtIEFic3RyYWN0Q29udHJvbCB8IG51bGwgfCB1bmRlZmluZWRcbiAgICogQHJldHVybnMgQSBGb3JtQ29udHJvbFxuICAgKi9cbiAgdHJhbnNmb3JtVG9Db250cm9sKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY29udHJvbCBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtdC0zXCIgKm5nRm9yPVwibGV0IGtleSBvZiBrZXlzXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cImNoZWNrRmllbGRIYXNGaWVsZHMoZmllbGRzW2tleV0pICYmIChjb25maWdba2V5XT8ucm9sZXMgPyB1c2VyPy5oYXNBbGxSb2xlcyhjb25maWdba2V5XT8ucm9sZXMpIDogdHJ1ZSlcIlxuICA+XG4gICAgPGZpZWxkc2V0IGNsYXNzPVwiYm9yZGVyIHJvdW5kZWQtMyBwLTMgbXQtM1wiPlxuICAgICAgPGxlZ2VuZCBjbGFzcz1cImZsb2F0LW5vbmUgdy1hdXRvIHB4LTNcIj5cbiAgICAgICAge3sgY29uZmlnW2tleV0/LmxhYmVsID8gY29uZmlnW2tleV0ubGFiZWwgOiBjYXBpdGFsaXplRmlyc3RMZXR0ZXIoa2V5KSB9fVxuICAgICAgPC9sZWdlbmQ+XG4gICAgICA8YmFzZS1tb2RlbC1mb3JtLXN1YlxuICAgICAgICBbcGFyZW50S2V5XT1cImtleVwiXG4gICAgICAgIFtmaWVsZHNdPVwiZmllbGRzW2tleV0uZmllbGRzXCJcbiAgICAgICAgW2NvbmZpZ109XCJjb25maWdba2V5XT8uZmllbGRzIHx8IHt9XCJcbiAgICAgICAgW2Zvcm1dPVwiZm9ybS5nZXQoa2V5KVwiXG4gICAgICAgIChpbWFnZUNoYW5nZWQpPVwiaW1hZ2VDaGFuZ2VkLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChmaWxlQ2hhbmdlZCk9XCJmaWxlQ2hhbmdlZC5lbWl0KCRldmVudClcIlxuICAgICAgPjwvYmFzZS1tb2RlbC1mb3JtLXN1Yj5cbiAgICA8L2ZpZWxkc2V0PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCIhY2hlY2tGaWVsZEhhc0ZpZWxkcyhmaWVsZHNba2V5XSkgJiYgKGNvbmZpZ1trZXldPy5yb2xlcyA/IHVzZXI/Lmhhc0FsbFJvbGVzKGNvbmZpZ1trZXldPy5yb2xlcykgOiB0cnVlKVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmllbGRzW2tleV0/LmlzRW51bSAmJiAhY29uZmlnW2tleV0/LmV4Y2x1ZGVcIj5cbiAgICAgIDxiYXNlLXNlbGVjdFxuICAgICAgICBbaWRdPVwia2V5XCJcbiAgICAgICAgW25hbWVdPVwia2V5XCJcbiAgICAgICAgW2luZm9UZXh0XT1cImNvbmZpZ1trZXldPy5pbmZvVGV4dCA/IGNvbmZpZ1trZXldLmluZm9UZXh0IDogbnVsbFwiXG4gICAgICAgIFtsYWJlbF09XCJjb25maWdba2V5XT8ubGFiZWwgPyBjb25maWdba2V5XS5sYWJlbCA6IGNhcGl0YWxpemVGaXJzdExldHRlcihrZXkpXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbmZpZ1trZXldPy5wbGFjZWhvbGRlciB8fCAnQml0dGUgZWluZW4gV2VydCBhdXN3w6RobGVuJ1wiXG4gICAgICAgIFtvcHRpb25zXT1cInByZXBhcmVFbnVtRm9yU2VsZWN0KGZpZWxkc1trZXldPy52YWxpZEVudW1zLCBjb25maWdba2V5XT8uZW51bVZhbHVlcylcIlxuICAgICAgICBbY29udHJvbF09XCJ0cmFuc2Zvcm1Ub0NvbnRyb2woZm9ybT8uZ2V0KGtleSkpXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cImNvbmZpZ1trZXldICYmIGNvbmZpZ1trZXldPy5yZXF1aXJlZCAhPT0gdW5kZWZpbmVkID8gY29uZmlnW2tleV0/LnJlcXVpcmVkIDogZmllbGRzW2tleV0uaXNSZXF1aXJlZFwiXG4gICAgICAgIFtvYmplY3RQYXRoXT1cIm9iamVjdFBhdGhcIlxuICAgICAgPjwvYmFzZS1zZWxlY3Q+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZpZWxkc1trZXldPy5pc0VudW0gJiYgIWNvbmZpZ1trZXldPy5leGNsdWRlXCI+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb25maWdba2V5XT8udHlwZSA/IGNvbmZpZ1trZXldPy50eXBlIDogZmllbGRzW2tleV0/LnR5cGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1N0cmluZydcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmllbGRzW2tleV0/LmlzTGlzdCAmJiAhY29uZmlnW2tleV0/LmV4Y2x1ZGVcIj5cbiAgICAgICAgICAgIDxiYXNlLXRhZ3NcbiAgICAgICAgICAgICAgW2lkXT1cImtleVwiXG4gICAgICAgICAgICAgIFtuYW1lXT1cImtleVwiXG4gICAgICAgICAgICAgIFtpbmZvVGV4dF09XCJjb25maWdba2V5XT8uaW5mb1RleHQgPyBjb25maWdba2V5XS5pbmZvVGV4dCA6IG51bGxcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnW2tleV0/LmxhYmVsID8gY29uZmlnW2tleV0ubGFiZWwgOiBjYXBpdGFsaXplRmlyc3RMZXR0ZXIoa2V5KVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjb25maWdba2V5XT8ucGxhY2Vob2xkZXIgfHwgJydcIlxuICAgICAgICAgICAgICBbY29udHJvbF09XCJ0cmFuc2Zvcm1Ub0NvbnRyb2woZm9ybT8uZ2V0KGtleSkpXCJcbiAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cIlxuICAgICAgICAgICAgICAgIGNvbmZpZ1trZXldICYmIGNvbmZpZ1trZXldPy5yZXF1aXJlZCAhPT0gdW5kZWZpbmVkID8gY29uZmlnW2tleV0/LnJlcXVpcmVkIDogZmllbGRzW2tleV0uaXNSZXF1aXJlZFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJjb25maWdba2V5XT8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIFtvYmplY3RQYXRoXT1cIm9iamVjdFBhdGhcIlxuICAgICAgICAgICAgPjwvYmFzZS10YWdzPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmaWVsZHNba2V5XT8uaXNMaXN0ICYmICFjb25maWdba2V5XT8uZXhjbHVkZVwiPlxuICAgICAgICAgICAgPGJhc2UtaW5wdXRcbiAgICAgICAgICAgICAgW2lkXT1cImtleVwiXG4gICAgICAgICAgICAgIFtuYW1lXT1cImtleVwiXG4gICAgICAgICAgICAgIFtpbmZvVGV4dF09XCJjb25maWdba2V5XT8uaW5mb1RleHQgPyBjb25maWdba2V5XS5pbmZvVGV4dCA6IG51bGxcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnW2tleV0/LmxhYmVsID8gY29uZmlnW2tleV0ubGFiZWwgOiBjYXBpdGFsaXplRmlyc3RMZXR0ZXIoa2V5KVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjb25maWdba2V5XT8ucGxhY2Vob2xkZXIgfHwgJydcIlxuICAgICAgICAgICAgICBbdHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICBbY29udHJvbF09XCJ0cmFuc2Zvcm1Ub0NvbnRyb2woZm9ybT8uZ2V0KGtleSkpXCJcbiAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cIlxuICAgICAgICAgICAgICAgIGNvbmZpZ1trZXldICYmIGNvbmZpZ1trZXldPy5yZXF1aXJlZCAhPT0gdW5kZWZpbmVkID8gY29uZmlnW2tleV0/LnJlcXVpcmVkIDogZmllbGRzW2tleV0uaXNSZXF1aXJlZFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbb2JqZWN0UGF0aF09XCJvYmplY3RQYXRoXCJcbiAgICAgICAgICAgID48L2Jhc2UtaW5wdXQ+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidJbWFnZSdcIj5cbiAgICAgICAgICA8YmFzZS11cGxvYWQtaW1hZ2VcbiAgICAgICAgICAgIFtpZF09XCJrZXlcIlxuICAgICAgICAgICAgW25hbWVdPVwia2V5XCJcbiAgICAgICAgICAgIFtpbmZvVGV4dF09XCJjb25maWdba2V5XT8uaW5mb1RleHQgPyBjb25maWdba2V5XS5pbmZvVGV4dCA6IG51bGxcIlxuICAgICAgICAgICAgW2xhYmVsXT1cImNvbmZpZ1trZXldPy5sYWJlbCA/IGNvbmZpZ1trZXldLmxhYmVsIDogY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKGtleSlcIlxuICAgICAgICAgICAgW2NvbnRyb2xdPVwidHJhbnNmb3JtVG9Db250cm9sKGZvcm0/LmdldChrZXkpKVwiXG4gICAgICAgICAgICBbdXJsXT1cImNvbmZpZ1trZXldPy51cmxcIlxuICAgICAgICAgICAgW3BhdGhdPVwiY29uZmlnW2tleV0/LnBhdGggfHwgJy9maWxlcy8nXCJcbiAgICAgICAgICAgIFt1cGxvYWRQYXRoXT1cImNvbmZpZ1trZXldPy51cGxvYWRQYXRoIHx8ICcvZmlsZXMvdXBsb2FkJ1wiXG4gICAgICAgICAgICBbZGVsZXRlUGF0aF09XCJjb25maWdba2V5XT8uZGVsZXRlUGF0aCB8fCAnL2ZpbGVzLydcIlxuICAgICAgICAgICAgW3N1cHBvcnRUZXh0XT1cImNvbmZpZ1trZXldPy5zdXBwb3J0VGV4dCB8fCAnVW50ZXJzdMO8dHp0ZSBGb3JtYXRlOiBKUEVHLCBKUEcsIFBORydcIlxuICAgICAgICAgICAgW2RlZmF1bHREcmFnVGV4dF09XCJjb25maWdba2V5XT8uZHJhZ1RleHQgfHwgJ0RyYWcgJiBEcm9wJ1wiXG4gICAgICAgICAgICBbZGVmYXVsdFJlbGVhc2VUZXh0XT1cImNvbmZpZ1trZXldPy5yZWxlYXNlVGV4dCB8fCAnTG9zbGFzc2VuIHp1bSBob2NobGFkZW4nXCJcbiAgICAgICAgICAgIFtwcmVCdXR0b25UZXh0XT1cImNvbmZpZ1trZXldPy5wcmVCdXR0b25UZXh0IHx8ICdvcidcIlxuICAgICAgICAgICAgW2J1dHRvblRleHRdPVwiY29uZmlnW2tleV0/LmJ1dHRvblRleHQgfHwgJ2Jyb3dzZSdcIlxuICAgICAgICAgICAgW3ZhbGlkRXh0ZW5zaW9uc109XCJjb25maWdba2V5XT8udmFsaWRFeHRlbnNpb25zIHx8IFsnaW1hZ2UvanBlZycsICdpbWFnZS9qcGcnLCAnaW1hZ2UvcG5nJywgJ2ltYWdlL3dlYnAnXVwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwiXG4gICAgICAgICAgICAgIGNvbmZpZ1trZXldICYmIGNvbmZpZ1trZXldPy5yZXF1aXJlZCAhPT0gdW5kZWZpbmVkID8gY29uZmlnW2tleV0/LnJlcXVpcmVkIDogZmllbGRzW2tleV0uaXNSZXF1aXJlZFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtjb21wcmVzc09wdGlvbnNdPVwiY29uZmlnW2tleV0/LmNvbXByZXNzT3B0aW9uc1wiXG4gICAgICAgICAgICBbY3JvcHBpbmdPcHRpb25zXT1cImNvbmZpZ1trZXldPy5jcm9wcGluZ09wdGlvbnNcIlxuICAgICAgICAgICAgW2Nyb3BwaW5nSW1hZ2VdPVwiY29uZmlnW2tleV0/LmNyb3BwaW5nSW1hZ2VcIlxuICAgICAgICAgICAgW21heFNpemVdPVwiY29uZmlnW2tleV0/Lm1heFNpemVcIlxuICAgICAgICAgICAgW3VwbG9hZERpcmVjdGx5XT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtvYmplY3RQYXRoXT1cIm9iamVjdFBhdGhcIlxuICAgICAgICAgICAgW21vZGVdPVwiY29uZmlnW2tleV0/LmltYWdlTW9kZSB8fCAnYmFzZTY0J1wiXG4gICAgICAgICAgICAoZmlsZUNoYW5nZWQpPVwiZmlsZUNoYW5nZWQuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChpbWFnZURlbGV0ZWQpPVwiaW1hZ2VDaGFuZ2VkLmVtaXQoa2V5KVwiXG4gICAgICAgICAgICAoaW1hZ2VVcGxvYWRlZCk9XCJpbWFnZUNoYW5nZWQuZW1pdChrZXkpXCJcbiAgICAgICAgICA+PC9iYXNlLXVwbG9hZC1pbWFnZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1VwbG9hZCdcIj5cbiAgICAgICAgICA8YmFzZS11cGxvYWQtaW1hZ2VcbiAgICAgICAgICAgIFtpZF09XCJrZXlcIlxuICAgICAgICAgICAgW25hbWVdPVwia2V5XCJcbiAgICAgICAgICAgIFtpbmZvVGV4dF09XCJjb25maWdba2V5XT8uaW5mb1RleHQgPyBjb25maWdba2V5XS5pbmZvVGV4dCA6IG51bGxcIlxuICAgICAgICAgICAgW2xhYmVsXT1cImNvbmZpZ1trZXldPy5sYWJlbCA/IGNvbmZpZ1trZXldLmxhYmVsIDogY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKGtleSlcIlxuICAgICAgICAgICAgW2NvbnRyb2xdPVwidHJhbnNmb3JtVG9Db250cm9sKGZvcm0/LmdldChrZXkpKVwiXG4gICAgICAgICAgICBbc3VwcG9ydFRleHRdPVwiY29uZmlnW2tleV0/LnN1cHBvcnRUZXh0IHx8ICdVbnRlcnN0w7x0enRlIEZvcm1hdGU6IEpQRUcsIEpQRywgUE5HJ1wiXG4gICAgICAgICAgICBbZGVmYXVsdERyYWdUZXh0XT1cImNvbmZpZ1trZXldPy5kcmFnVGV4dCB8fCAnRHJhZyAmIERyb3AnXCJcbiAgICAgICAgICAgIFtkZWZhdWx0UmVsZWFzZVRleHRdPVwiY29uZmlnW2tleV0/LnJlbGVhc2VUZXh0IHx8ICdMb3NsYXNzZW4genVtIGhvY2hsYWRlbidcIlxuICAgICAgICAgICAgW3ByZUJ1dHRvblRleHRdPVwiY29uZmlnW2tleV0/LnByZUJ1dHRvblRleHQgfHwgJ29yJ1wiXG4gICAgICAgICAgICBbYnV0dG9uVGV4dF09XCJjb25maWdba2V5XT8uYnV0dG9uVGV4dCB8fCAnYnJvd3NlJ1wiXG4gICAgICAgICAgICBbdmFsaWRFeHRlbnNpb25zXT1cImNvbmZpZ1trZXldPy52YWxpZEV4dGVuc2lvbnMgfHwgWydpbWFnZS9qcGVnJywgJ2ltYWdlL2pwZycsICdpbWFnZS9wbmcnLCAnaW1hZ2Uvd2VicCddXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJcbiAgICAgICAgICAgICAgY29uZmlnW2tleV0gJiYgY29uZmlnW2tleV0/LnJlcXVpcmVkICE9PSB1bmRlZmluZWQgPyBjb25maWdba2V5XT8ucmVxdWlyZWQgOiBmaWVsZHNba2V5XS5pc1JlcXVpcmVkXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2NvbXByZXNzT3B0aW9uc109XCJjb25maWdba2V5XT8uY29tcHJlc3NPcHRpb25zXCJcbiAgICAgICAgICAgIFttYXhTaXplXT1cImNvbmZpZ1trZXldPy5tYXhTaXplXCJcbiAgICAgICAgICAgIFtvYmplY3RQYXRoXT1cIm9iamVjdFBhdGhcIlxuICAgICAgICAgICAgW21vZGVdPVwiJ2ZpbGUnXCJcbiAgICAgICAgICA+PC9iYXNlLXVwbG9hZC1pbWFnZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1JlZmVyZW5jZSdcIj5cbiAgICAgICAgICA8YmFzZS1yZWZlbmNlLWlucHV0XG4gICAgICAgICAgICBbaWRdPVwia2V5XCJcbiAgICAgICAgICAgIFtuYW1lXT1cImtleVwiXG4gICAgICAgICAgICBbaW5mb1RleHRdPVwiY29uZmlnW2tleV0/LmluZm9UZXh0ID8gY29uZmlnW2tleV0uaW5mb1RleHQgOiBudWxsXCJcbiAgICAgICAgICAgIFtpc0xpc3RdPVwiZmllbGRzW2tleV0/LmlzTGlzdFwiXG4gICAgICAgICAgICBbdXNlUGFyYW1Bc0FyZ109XCJjb25maWdba2V5XT8udXNlUGFyYW1Bc0FyZyA/PyBmYWxzZVwiXG4gICAgICAgICAgICBbcGFyYW1dPVwiaWRcIlxuICAgICAgICAgICAgW3NlYXJjaF09XCJjb25maWdba2V5XT8uc2VhcmNoYWJsZSA/PyB0cnVlXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjb25maWdba2V5XT8ucGxhY2Vob2xkZXIgfHwgJ0JpdHRlIGVpbmVuIFdlcnQgYXVzd8OkaGxlbidcIlxuICAgICAgICAgICAgW2xhYmVsXT1cImNvbmZpZ1trZXldPy5sYWJlbCA/IGNvbmZpZ1trZXldLmxhYmVsIDogY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKGtleSlcIlxuICAgICAgICAgICAgW2NvbnRyb2xdPVwidHJhbnNmb3JtVG9Db250cm9sKGZvcm0/LmdldChrZXkpKVwiXG4gICAgICAgICAgICBbbWV0aG9kXT1cImNvbmZpZ1trZXldPy5tZXRob2QgfHwgJ2ZpbmQnXCJcbiAgICAgICAgICAgIFtmaWVsZHNdPVwiY29uZmlnW2tleV0/LnJlcXVlc3RGaWVsZHMgfHwgWydpZCcsICduYW1lJ11cIlxuICAgICAgICAgICAgW3ZhbHVlRmllbGRdPVwiY29uZmlnW2tleV0/LnZhbHVlRmllbGQgfHwgJ2lkJ1wiXG4gICAgICAgICAgICBbbmFtZUZpZWxkXT1cImNvbmZpZ1trZXldPy5uYW1lRmllbGQgfHwgJ25hbWUnXCJcbiAgICAgICAgICAgIFtjcmVhdGlvbkxpbmtdPVwiY29uZmlnW2tleV0/LmNyZWF0aW9uTGluayB8fCAnJ1wiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwiXG4gICAgICAgICAgICAgIGNvbmZpZ1trZXldICYmIGNvbmZpZ1trZXldPy5yZXF1aXJlZCAhPT0gdW5kZWZpbmVkID8gY29uZmlnW2tleV0/LnJlcXVpcmVkIDogZmllbGRzW2tleV0uaXNSZXF1aXJlZFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtvYmplY3RQYXRoXT1cIm9iamVjdFBhdGhcIlxuICAgICAgICAgID48L2Jhc2UtcmVmZW5jZS1pbnB1dD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ0Jvb2xlYW4nXCI+XG4gICAgICAgICAgPGJhc2UtY2hlY2tib3hcbiAgICAgICAgICAgIFtpZF09XCJrZXlcIlxuICAgICAgICAgICAgW25hbWVdPVwia2V5XCJcbiAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWdba2V5XT8ubGFiZWwgPyBjb25maWdba2V5XS5sYWJlbCA6IGNhcGl0YWxpemVGaXJzdExldHRlcihrZXkpXCJcbiAgICAgICAgICAgIFtjb250cm9sXT1cInRyYW5zZm9ybVRvQ29udHJvbChmb3JtPy5nZXQoa2V5KSlcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cIlxuICAgICAgICAgICAgICBjb25maWdba2V5XSAmJiBjb25maWdba2V5XT8ucmVxdWlyZWQgIT09IHVuZGVmaW5lZCA/IGNvbmZpZ1trZXldPy5yZXF1aXJlZCA6IGZpZWxkc1trZXldLmlzUmVxdWlyZWRcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbb2JqZWN0UGF0aF09XCJvYmplY3RQYXRoXCJcbiAgICAgICAgICA+PC9iYXNlLWNoZWNrYm94PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInTG9uZ1RleHQnXCI+XG4gICAgICAgICAgPGJhc2UtdGV4dGFyZWFcbiAgICAgICAgICAgIFtpZF09XCJrZXlcIlxuICAgICAgICAgICAgW25hbWVdPVwia2V5XCJcbiAgICAgICAgICAgIFtpbmZvVGV4dF09XCJjb25maWdba2V5XT8uaW5mb1RleHQgPyBjb25maWdba2V5XS5pbmZvVGV4dCA6IG51bGxcIlxuICAgICAgICAgICAgW2xhYmVsXT1cImNvbmZpZ1trZXldPy5sYWJlbCA/IGNvbmZpZ1trZXldLmxhYmVsIDogY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKGtleSlcIlxuICAgICAgICAgICAgW2NvbnRyb2xdPVwidHJhbnNmb3JtVG9Db250cm9sKGZvcm0/LmdldChrZXkpKVwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwiXG4gICAgICAgICAgICAgIGNvbmZpZ1trZXldICYmIGNvbmZpZ1trZXldPy5yZXF1aXJlZCAhPT0gdW5kZWZpbmVkID8gY29uZmlnW2tleV0/LnJlcXVpcmVkIDogZmllbGRzW2tleV0uaXNSZXF1aXJlZFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtvYmplY3RQYXRoXT1cIm9iamVjdFBhdGhcIlxuICAgICAgICAgID48L2Jhc2UtdGV4dGFyZWE+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidGbG9hdCdcIj5cbiAgICAgICAgICA8YmFzZS1pbnB1dFxuICAgICAgICAgICAgW2lkXT1cImtleVwiXG4gICAgICAgICAgICBbbmFtZV09XCJrZXlcIlxuICAgICAgICAgICAgW2luZm9UZXh0XT1cImNvbmZpZ1trZXldPy5pbmZvVGV4dCA/IGNvbmZpZ1trZXldLmluZm9UZXh0IDogbnVsbFwiXG4gICAgICAgICAgICBbdHlwZV09XCInbnVtYmVyJ1wiXG4gICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnW2tleV0/LmxhYmVsID8gY29uZmlnW2tleV0ubGFiZWwgOiBjYXBpdGFsaXplRmlyc3RMZXR0ZXIoa2V5KVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiY29uZmlnW2tleV0/LnBsYWNlaG9sZGVyIHx8ICcnXCJcbiAgICAgICAgICAgIFtjb250cm9sXT1cInRyYW5zZm9ybVRvQ29udHJvbChmb3JtPy5nZXQoa2V5KSlcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cIlxuICAgICAgICAgICAgICBjb25maWdba2V5XSAmJiBjb25maWdba2V5XT8ucmVxdWlyZWQgIT09IHVuZGVmaW5lZCA/IGNvbmZpZ1trZXldPy5yZXF1aXJlZCA6IGZpZWxkc1trZXldLmlzUmVxdWlyZWRcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbb2JqZWN0UGF0aF09XCJvYmplY3RQYXRoXCJcbiAgICAgICAgICA+PC9iYXNlLWlucHV0PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInUGFzc3dvcmQnXCI+XG4gICAgICAgICAgPGJhc2UtaW5wdXRcbiAgICAgICAgICAgIFtpZF09XCJrZXlcIlxuICAgICAgICAgICAgW25hbWVdPVwia2V5XCJcbiAgICAgICAgICAgIFtpbmZvVGV4dF09XCJjb25maWdba2V5XT8uaW5mb1RleHQgPyBjb25maWdba2V5XS5pbmZvVGV4dCA6IG51bGxcIlxuICAgICAgICAgICAgW3R5cGVdPVwiJ3Bhc3N3b3JkJ1wiXG4gICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnW2tleV0/LmxhYmVsID8gY29uZmlnW2tleV0ubGFiZWwgOiBjYXBpdGFsaXplRmlyc3RMZXR0ZXIoa2V5KVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiY29uZmlnW2tleV0/LnBsYWNlaG9sZGVyIHx8ICcnXCJcbiAgICAgICAgICAgIFtjb250cm9sXT1cInRyYW5zZm9ybVRvQ29udHJvbChmb3JtPy5nZXQoa2V5KSlcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cIlxuICAgICAgICAgICAgICBjb25maWdba2V5XSAmJiBjb25maWdba2V5XT8ucmVxdWlyZWQgIT09IHVuZGVmaW5lZCA/IGNvbmZpZ1trZXldPy5yZXF1aXJlZCA6IGZpZWxkc1trZXldLmlzUmVxdWlyZWRcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbb2JqZWN0UGF0aF09XCJvYmplY3RQYXRoXCJcbiAgICAgICAgICA+PC9iYXNlLWlucHV0PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInQ29sb3InXCI+XG4gICAgICAgICAgPGJhc2UtaW5wdXRcbiAgICAgICAgICAgIFtpZF09XCJrZXlcIlxuICAgICAgICAgICAgW25hbWVdPVwia2V5XCJcbiAgICAgICAgICAgIFtpbmZvVGV4dF09XCJjb25maWdba2V5XT8uaW5mb1RleHQgPyBjb25maWdba2V5XS5pbmZvVGV4dCA6IG51bGxcIlxuICAgICAgICAgICAgW3R5cGVdPVwiJ2NvbG9yJ1wiXG4gICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnW2tleV0/LmxhYmVsID8gY29uZmlnW2tleV0ubGFiZWwgOiBjYXBpdGFsaXplRmlyc3RMZXR0ZXIoa2V5KVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiY29uZmlnW2tleV0/LnBsYWNlaG9sZGVyIHx8ICcnXCJcbiAgICAgICAgICAgIFtjb250cm9sXT1cInRyYW5zZm9ybVRvQ29udHJvbChmb3JtPy5nZXQoa2V5KSlcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cIlxuICAgICAgICAgICAgICBjb25maWdba2V5XSAmJiBjb25maWdba2V5XT8ucmVxdWlyZWQgIT09IHVuZGVmaW5lZCA/IGNvbmZpZ1trZXldPy5yZXF1aXJlZCA6IGZpZWxkc1trZXldLmlzUmVxdWlyZWRcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbb2JqZWN0UGF0aF09XCJvYmplY3RQYXRoXCJcbiAgICAgICAgICA+PC9iYXNlLWlucHV0PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInVVJMJ1wiPlxuICAgICAgICAgIDxiYXNlLWlucHV0XG4gICAgICAgICAgICBbaWRdPVwia2V5XCJcbiAgICAgICAgICAgIFtuYW1lXT1cImtleVwiXG4gICAgICAgICAgICBbaW5mb1RleHRdPVwiY29uZmlnW2tleV0/LmluZm9UZXh0ID8gY29uZmlnW2tleV0uaW5mb1RleHQgOiBudWxsXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWdba2V5XT8ubGFiZWwgPyBjb25maWdba2V5XS5sYWJlbCA6IGNhcGl0YWxpemVGaXJzdExldHRlcihrZXkpXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjb25maWdba2V5XT8ucGxhY2Vob2xkZXIgfHwgJydcIlxuICAgICAgICAgICAgW3R5cGVdPVwiJ3VybCdcIlxuICAgICAgICAgICAgW2NvbnRyb2xdPVwidHJhbnNmb3JtVG9Db250cm9sKGZvcm0/LmdldChrZXkpKVwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwiXG4gICAgICAgICAgICAgIGNvbmZpZ1trZXldICYmIGNvbmZpZ1trZXldPy5yZXF1aXJlZCAhPT0gdW5kZWZpbmVkID8gY29uZmlnW2tleV0/LnJlcXVpcmVkIDogZmllbGRzW2tleV0uaXNSZXF1aXJlZFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtvYmplY3RQYXRoXT1cIm9iamVjdFBhdGhcIlxuICAgICAgICAgID48L2Jhc2UtaW5wdXQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidFbWFpbCdcIj5cbiAgICAgICAgICA8YmFzZS1pbnB1dFxuICAgICAgICAgICAgW2lkXT1cImtleVwiXG4gICAgICAgICAgICBbbmFtZV09XCJrZXlcIlxuICAgICAgICAgICAgW2luZm9UZXh0XT1cImNvbmZpZ1trZXldPy5pbmZvVGV4dCA/IGNvbmZpZ1trZXldLmluZm9UZXh0IDogbnVsbFwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnW2tleV0/LmxhYmVsID8gY29uZmlnW2tleV0ubGFiZWwgOiBjYXBpdGFsaXplRmlyc3RMZXR0ZXIoa2V5KVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiY29uZmlnW2tleV0/LnBsYWNlaG9sZGVyIHx8ICcnXCJcbiAgICAgICAgICAgIFt0eXBlXT1cIidlbWFpbCdcIlxuICAgICAgICAgICAgW2NvbnRyb2xdPVwidHJhbnNmb3JtVG9Db250cm9sKGZvcm0/LmdldChrZXkpKVwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwiXG4gICAgICAgICAgICAgIGNvbmZpZ1trZXldICYmIGNvbmZpZ1trZXldPy5yZXF1aXJlZCAhPT0gdW5kZWZpbmVkID8gY29uZmlnW2tleV0/LnJlcXVpcmVkIDogZmllbGRzW2tleV0uaXNSZXF1aXJlZFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtvYmplY3RQYXRoXT1cIm9iamVjdFBhdGhcIlxuICAgICAgICAgID48L2Jhc2UtaW5wdXQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidEYXRlVGltZSdcIj5cbiAgICAgICAgICA8YmFzZS1pbnB1dFxuICAgICAgICAgICAgW2lkXT1cImtleVwiXG4gICAgICAgICAgICBbbmFtZV09XCJrZXlcIlxuICAgICAgICAgICAgW2luZm9UZXh0XT1cImNvbmZpZ1trZXldPy5pbmZvVGV4dCA/IGNvbmZpZ1trZXldLmluZm9UZXh0IDogbnVsbFwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnW2tleV0/LmxhYmVsID8gY29uZmlnW2tleV0ubGFiZWwgOiBjYXBpdGFsaXplRmlyc3RMZXR0ZXIoa2V5KVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiY29uZmlnW2tleV0/LnBsYWNlaG9sZGVyIHx8ICcnXCJcbiAgICAgICAgICAgIFt0eXBlXT1cIidkYXRldGltZS1sb2NhbCdcIlxuICAgICAgICAgICAgW2NvbnRyb2xdPVwidHJhbnNmb3JtVG9Db250cm9sKGZvcm0/LmdldChrZXkpKVwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwiXG4gICAgICAgICAgICAgIGNvbmZpZ1trZXldICYmIGNvbmZpZ1trZXldPy5yZXF1aXJlZCAhPT0gdW5kZWZpbmVkID8gY29uZmlnW2tleV0/LnJlcXVpcmVkIDogZmllbGRzW2tleV0uaXNSZXF1aXJlZFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtvYmplY3RQYXRoXT1cIm9iamVjdFBhdGhcIlxuICAgICAgICAgID48L2Jhc2UtaW5wdXQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=
|
|
@@ -355,9 +355,9 @@ export class ModelTableComponent {
|
|
|
355
355
|
this.objects = await this.loadObjects(this.availableFields, this.pages[this.selectedPageIndex].skip, this.pages[this.selectedPageIndex].limit);
|
|
356
356
|
}
|
|
357
357
|
}
|
|
358
|
-
ModelTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
359
|
-
ModelTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.
|
|
360
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
358
|
+
ModelTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: ModelTableComponent, deps: [{ token: i1.GraphQLMetaService }, { token: i1.GraphQLService }, { token: i1.CmsService }, { token: i1.ToastService }, { token: i1.ScrollService }], target: i0.ɵɵFactoryTarget.Component });
|
|
359
|
+
ModelTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.5", type: ModelTableComponent, selector: "base-model-table", inputs: { modelName: "modelName", objectId: "objectId", createMode: "createMode", logging: "logging", create: "create", update: "update", delete: "delete", import: "import", export: "export", duplicate: "duplicate", modelConfig: "modelConfig", config: "config", showFavButton: "showFavButton" }, outputs: { idSelected: "idSelected", createModeChanged: "createModeChanged" }, viewQueries: [{ propertyName: "customFormTemplate", first: true, predicate: ["customFormTemplate"], descendants: true, read: ViewContainerRef }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"!id && !createMode\">\n <div class=\"w-100 d-flex flex-row justify-content-between align-items-center mb-2 mb-lg-4\">\n <h2 id=\"model-table-top\" class=\"mb-0\" *ngIf=\"modelName\">\n {{\n modelConfig?.plural\n ? modelConfig?.plural\n : modelConfig?.label\n ? modelConfig?.label\n : capitalizeFirstLetter(camelModelName) + 's'\n }}\n </h2>\n <div class=\"d-flex align-items-center d-none d-lg-block\">\n <input #importFile type=\"file\" accept=\".json\" class=\"d-none\" (change)=\"processImport($event)\" />\n <div class=\"btn-group me-4\" *ngIf=\"import || export\">\n <i\n class=\"bi bi-three-dots-vertical\"\n id=\"settingsDropdown\"\n type=\"button\"\n data-bs-toggle=\"dropdown\"\n data-bs-auto-close=\"true\"\n aria-expanded=\"false\"\n ></i>\n <ul class=\"dropdown-menu dropdown-menu-end\" aria-labelledby=\"settingsDropdown\">\n <li><a class=\"dropdown-item cursor-pointer\" *ngIf=\"export\" (click)=\"processExport()\">Export</a></li>\n <li><a class=\"dropdown-item cursor-pointer\" *ngIf=\"import\" (click)=\"importFile.click()\"> Import </a></li>\n </ul>\n </div>\n <button class=\"btn btn-primary\" (click)=\"createNewObject()\" *ngIf=\"create\">Erstellen</button>\n </div>\n </div>\n\n <div\n class=\"table-responsive\"\n [ltContextMenu]=\"contextMenu\"\n [selectors]=\"'.object-col'\"\n #contextMenuData=\"contextMenuData\"\n >\n <table class=\"table table-hover bg-white d-none d-lg-table\">\n <thead>\n <tr>\n <th\n scope=\"col\"\n *ngFor=\"let field of availableFields\"\n [baseSort]=\"objects\"\n data-order=\"desc\"\n [attr.data-name]=\"field\"\n >\n {{ tableFields[field]?.label ? tableFields[field]?.label : capitalizeFirstLetter(field) }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr class=\"object-col\" *ngFor=\"let object of objects\" [id]=\"object[uniqueField]\">\n <td class=\"cursor-pointer\" *ngFor=\"let field of availableFields\" (click)=\"selectId(object)\">\n <ng-container *ngIf=\"tableFields[field]?.dateFormat\">\n {{ object[field] | date: tableFields[field]?.dateFormat }} Uhr\n </ng-container>\n\n <ng-container *ngIf=\"tableFields[field]?.enumValues\">\n {{ tableFields[field]?.enumValues[object[field]]?.text }}\n </ng-container>\n\n <ng-container *ngIf=\"!tableFields[field]?.dateFormat && !tableFields[field]?.enumValues\">\n {{ object[field] | baseEllipses: 60 }}\n </ng-container>\n </td>\n </tr>\n </tbody>\n </table>\n\n <div class=\"d-flex d-lg-none flex-column flex-grow-1\">\n <div class=\"table-card\" *ngFor=\"let object of objects\" [id]=\"object[uniqueField]\">\n <div class=\"table-card-entry\" *ngFor=\"let field of availableFields; let i = index\" (click)=\"selectId(object)\">\n <b *ngIf=\"i > 0\"\n >{{ tableFields[field]?.label ? tableFields[field]?.label : capitalizeFirstLetter(field) }}:</b\n >\n <p [ngClass]=\"{ 'table-card-entry-first': i === 0 }\">\n <ng-container *ngIf=\"tableFields[field]?.dateFormat\">\n {{ object[field] | date: tableFields[field]?.dateFormat }} Uhr\n </ng-container>\n\n <ng-container *ngIf=\"tableFields[field]?.enumValues\">\n {{ tableFields[field]?.enumValues[object[field]]?.text }}\n </ng-container>\n\n <ng-container *ngIf=\"!tableFields[field]?.dateFormat && !tableFields[field]?.enumValues\">\n {{ object[field] | baseEllipses: 60 }}\n </ng-container>\n </p>\n </div>\n </div>\n </div>\n\n <nav *ngIf=\"totalCount >= 0\">\n <ul class=\"pagination justify-content-center\">\n <li class=\"page-item\">\n <a\n class=\"page-link\"\n (click)=\"selectPage(selectedPageIndex - 1)\"\n aria-label=\"Previous\"\n [ngClass]=\"{ disabled: selectedPageIndex - 1 > 0 }\"\n >\n <span aria-hidden=\"true\">«</span>\n </a>\n </li>\n <li class=\"page-item\" *ngFor=\"let page of pages; let i = index\">\n <a class=\"page-link\" [ngClass]=\"{ active: selectedPageIndex === i }\" (click)=\"selectPage(i)\">{{ i + 1 }}</a>\n </li>\n <li class=\"page-item\">\n <a\n class=\"page-link\"\n (click)=\"selectPage(selectedPageIndex + 1)\"\n aria-label=\"Next\"\n [ngClass]=\"{ disabled: pages[selectedPageIndex + 1] }\"\n >\n <span aria-hidden=\"true\">»</span>\n </a>\n </li>\n </ul>\n </nav>\n\n <div class=\"context-menu\" #contextMenu>\n <div class=\"context-menu-item\" (click)=\"selectId({ id: contextMenuData.clickedElement?.id })\">Bearbeiten</div>\n <div class=\"context-menu-item\" *ngIf=\"duplicate\" (click)=\"duplicateObject(contextMenuData.clickedElement?.id)\">\n Duplizieren\n </div>\n <div class=\"context-menu-item\" *ngIf=\"delete\" (click)=\"deleteObject(contextMenuData.clickedElement?.id)\">\n L\u00F6schen\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"w-100\" *ngIf=\"id || createMode\">\n <button class=\"d-none d-lg-block btn btn-outline-primary mb-3\" (click)=\"selectId('')\">Zur\u00FCck</button>\n <base-model-form\n *ngIf=\"!modelConfig?.customTemplateComponent\"\n [modelName]=\"camelModelName\"\n [label]=\"modelConfig?.label\"\n [config]=\"config\"\n [logging]=\"logging\"\n [id]=\"id\"\n (finished)=\"selectId('')\"\n [delete]=\"delete\"\n [duplicate]=\"duplicate\"\n [showFavButton]=\"showFavButton\"\n ></base-model-form>\n <ng-template *ngIf=\"modelConfig?.customTemplateComponent\" #customFormTemplate></ng-template>\n</div>\n\n<div class=\"responsive-action-button d-block d-lg-none\">\n <base-fab-button\n [fabIcon]=\"'bi-plus'\"\n (click)=\"createNewObject()\"\n *ngIf=\"!(id || createMode) && showFavButton\"\n ></base-fab-button>\n</div>\n", styles: [".cursor-pointer{cursor:pointer}.asc:after,.desc:after{border-style:solid;border-width:.2em .2em 0 0;content:\"\";display:inline-block;height:.45em;left:5px;position:relative;transform:rotate(-45deg);vertical-align:middle;width:.45em}.asc:after{transform:rotate(135deg)}td{vertical-align:middle}.bi,th{cursor:pointer;-webkit-user-select:none;user-select:none}.table>:not(:first-child){border-top:0}table{border-radius:.25rem;border-color:#e2e8f0!important}table thead{text-transform:uppercase;font-size:12px}table thead th{padding:12px 24px}table tbody tr td{font-weight:400!important;font-size:16px;padding:16px 24px}.context-menu{opacity:.01%;pointer-events:none;background-color:#fff;border:1px solid #ccc;box-shadow:1px 1px 10px #0000001a;padding:10px 0;position:fixed;top:0;left:0;width:200px}.context-menu-item{cursor:pointer;padding:8px 15px}.context-menu-item:hover{color:var(--bs-primary)}.table-card{background:var(--bs-white);padding:10px;margin-bottom:10px}.table-card-entry{margin-top:4px}.table-card-entry-first{font-size:18px;font-weight:800;color:var(--bs-primary)}.responsive-action-button{position:fixed;bottom:15px;right:15px}.bi-three-dots-vertical{font-size:18px;line-height:18px}.page-item{cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.SortDirective, selector: "[baseSort]", inputs: ["baseSort"] }, { kind: "directive", type: i4.ContextMenuDirective, selector: "[ltContextMenu]", inputs: ["contextMenuData", "ltContextMenu", "xGap", "yGap", "overflowSpace", "selectors"], outputs: ["clickedElement"], exportAs: ["contextMenuData"] }, { kind: "component", type: i5.ModelFormComponent, selector: "base-model-form", inputs: ["modelName", "label", "id", "delete", "onlyUpdateMode", "duplicate", "logging", "config", "showFavButton"], outputs: ["finished"] }, { kind: "component", type: i6.FabButtonComponent, selector: "base-fab-button", inputs: ["fabIcon", "buttons"] }, { kind: "pipe", type: i2.DatePipe, name: "date" }, { kind: "pipe", type: i7.EllipsesPipe, name: "baseEllipses" }] });
|
|
360
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: ModelTableComponent, decorators: [{
|
|
361
361
|
type: Component,
|
|
362
362
|
args: [{ selector: 'base-model-table', template: "<div *ngIf=\"!id && !createMode\">\n <div class=\"w-100 d-flex flex-row justify-content-between align-items-center mb-2 mb-lg-4\">\n <h2 id=\"model-table-top\" class=\"mb-0\" *ngIf=\"modelName\">\n {{\n modelConfig?.plural\n ? modelConfig?.plural\n : modelConfig?.label\n ? modelConfig?.label\n : capitalizeFirstLetter(camelModelName) + 's'\n }}\n </h2>\n <div class=\"d-flex align-items-center d-none d-lg-block\">\n <input #importFile type=\"file\" accept=\".json\" class=\"d-none\" (change)=\"processImport($event)\" />\n <div class=\"btn-group me-4\" *ngIf=\"import || export\">\n <i\n class=\"bi bi-three-dots-vertical\"\n id=\"settingsDropdown\"\n type=\"button\"\n data-bs-toggle=\"dropdown\"\n data-bs-auto-close=\"true\"\n aria-expanded=\"false\"\n ></i>\n <ul class=\"dropdown-menu dropdown-menu-end\" aria-labelledby=\"settingsDropdown\">\n <li><a class=\"dropdown-item cursor-pointer\" *ngIf=\"export\" (click)=\"processExport()\">Export</a></li>\n <li><a class=\"dropdown-item cursor-pointer\" *ngIf=\"import\" (click)=\"importFile.click()\"> Import </a></li>\n </ul>\n </div>\n <button class=\"btn btn-primary\" (click)=\"createNewObject()\" *ngIf=\"create\">Erstellen</button>\n </div>\n </div>\n\n <div\n class=\"table-responsive\"\n [ltContextMenu]=\"contextMenu\"\n [selectors]=\"'.object-col'\"\n #contextMenuData=\"contextMenuData\"\n >\n <table class=\"table table-hover bg-white d-none d-lg-table\">\n <thead>\n <tr>\n <th\n scope=\"col\"\n *ngFor=\"let field of availableFields\"\n [baseSort]=\"objects\"\n data-order=\"desc\"\n [attr.data-name]=\"field\"\n >\n {{ tableFields[field]?.label ? tableFields[field]?.label : capitalizeFirstLetter(field) }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr class=\"object-col\" *ngFor=\"let object of objects\" [id]=\"object[uniqueField]\">\n <td class=\"cursor-pointer\" *ngFor=\"let field of availableFields\" (click)=\"selectId(object)\">\n <ng-container *ngIf=\"tableFields[field]?.dateFormat\">\n {{ object[field] | date: tableFields[field]?.dateFormat }} Uhr\n </ng-container>\n\n <ng-container *ngIf=\"tableFields[field]?.enumValues\">\n {{ tableFields[field]?.enumValues[object[field]]?.text }}\n </ng-container>\n\n <ng-container *ngIf=\"!tableFields[field]?.dateFormat && !tableFields[field]?.enumValues\">\n {{ object[field] | baseEllipses: 60 }}\n </ng-container>\n </td>\n </tr>\n </tbody>\n </table>\n\n <div class=\"d-flex d-lg-none flex-column flex-grow-1\">\n <div class=\"table-card\" *ngFor=\"let object of objects\" [id]=\"object[uniqueField]\">\n <div class=\"table-card-entry\" *ngFor=\"let field of availableFields; let i = index\" (click)=\"selectId(object)\">\n <b *ngIf=\"i > 0\"\n >{{ tableFields[field]?.label ? tableFields[field]?.label : capitalizeFirstLetter(field) }}:</b\n >\n <p [ngClass]=\"{ 'table-card-entry-first': i === 0 }\">\n <ng-container *ngIf=\"tableFields[field]?.dateFormat\">\n {{ object[field] | date: tableFields[field]?.dateFormat }} Uhr\n </ng-container>\n\n <ng-container *ngIf=\"tableFields[field]?.enumValues\">\n {{ tableFields[field]?.enumValues[object[field]]?.text }}\n </ng-container>\n\n <ng-container *ngIf=\"!tableFields[field]?.dateFormat && !tableFields[field]?.enumValues\">\n {{ object[field] | baseEllipses: 60 }}\n </ng-container>\n </p>\n </div>\n </div>\n </div>\n\n <nav *ngIf=\"totalCount >= 0\">\n <ul class=\"pagination justify-content-center\">\n <li class=\"page-item\">\n <a\n class=\"page-link\"\n (click)=\"selectPage(selectedPageIndex - 1)\"\n aria-label=\"Previous\"\n [ngClass]=\"{ disabled: selectedPageIndex - 1 > 0 }\"\n >\n <span aria-hidden=\"true\">«</span>\n </a>\n </li>\n <li class=\"page-item\" *ngFor=\"let page of pages; let i = index\">\n <a class=\"page-link\" [ngClass]=\"{ active: selectedPageIndex === i }\" (click)=\"selectPage(i)\">{{ i + 1 }}</a>\n </li>\n <li class=\"page-item\">\n <a\n class=\"page-link\"\n (click)=\"selectPage(selectedPageIndex + 1)\"\n aria-label=\"Next\"\n [ngClass]=\"{ disabled: pages[selectedPageIndex + 1] }\"\n >\n <span aria-hidden=\"true\">»</span>\n </a>\n </li>\n </ul>\n </nav>\n\n <div class=\"context-menu\" #contextMenu>\n <div class=\"context-menu-item\" (click)=\"selectId({ id: contextMenuData.clickedElement?.id })\">Bearbeiten</div>\n <div class=\"context-menu-item\" *ngIf=\"duplicate\" (click)=\"duplicateObject(contextMenuData.clickedElement?.id)\">\n Duplizieren\n </div>\n <div class=\"context-menu-item\" *ngIf=\"delete\" (click)=\"deleteObject(contextMenuData.clickedElement?.id)\">\n L\u00F6schen\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"w-100\" *ngIf=\"id || createMode\">\n <button class=\"d-none d-lg-block btn btn-outline-primary mb-3\" (click)=\"selectId('')\">Zur\u00FCck</button>\n <base-model-form\n *ngIf=\"!modelConfig?.customTemplateComponent\"\n [modelName]=\"camelModelName\"\n [label]=\"modelConfig?.label\"\n [config]=\"config\"\n [logging]=\"logging\"\n [id]=\"id\"\n (finished)=\"selectId('')\"\n [delete]=\"delete\"\n [duplicate]=\"duplicate\"\n [showFavButton]=\"showFavButton\"\n ></base-model-form>\n <ng-template *ngIf=\"modelConfig?.customTemplateComponent\" #customFormTemplate></ng-template>\n</div>\n\n<div class=\"responsive-action-button d-block d-lg-none\">\n <base-fab-button\n [fabIcon]=\"'bi-plus'\"\n (click)=\"createNewObject()\"\n *ngIf=\"!(id || createMode) && showFavButton\"\n ></base-fab-button>\n</div>\n", styles: [".cursor-pointer{cursor:pointer}.asc:after,.desc:after{border-style:solid;border-width:.2em .2em 0 0;content:\"\";display:inline-block;height:.45em;left:5px;position:relative;transform:rotate(-45deg);vertical-align:middle;width:.45em}.asc:after{transform:rotate(135deg)}td{vertical-align:middle}.bi,th{cursor:pointer;-webkit-user-select:none;user-select:none}.table>:not(:first-child){border-top:0}table{border-radius:.25rem;border-color:#e2e8f0!important}table thead{text-transform:uppercase;font-size:12px}table thead th{padding:12px 24px}table tbody tr td{font-weight:400!important;font-size:16px;padding:16px 24px}.context-menu{opacity:.01%;pointer-events:none;background-color:#fff;border:1px solid #ccc;box-shadow:1px 1px 10px #0000001a;padding:10px 0;position:fixed;top:0;left:0;width:200px}.context-menu-item{cursor:pointer;padding:8px 15px}.context-menu-item:hover{color:var(--bs-primary)}.table-card{background:var(--bs-white);padding:10px;margin-bottom:10px}.table-card-entry{margin-top:4px}.table-card-entry-first{font-size:18px;font-weight:800;color:var(--bs-primary)}.responsive-action-button{position:fixed;bottom:15px;right:15px}.bi-three-dots-vertical{font-size:18px;line-height:18px}.page-item{cursor:pointer}\n"] }]
|
|
363
363
|
}], ctorParameters: function () { return [{ type: i1.GraphQLMetaService }, { type: i1.GraphQLService }, { type: i1.CmsService }, { type: i1.ToastService }, { type: i1.ScrollService }]; }, propDecorators: { modelName: [{
|