@messaia/cdk 13.0.2 → 13.3.0-rc02
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/esm2020/lib/base/base.module.mjs +4 -4
- package/esm2020/lib/base/components/base.component.mjs +3 -3
- package/esm2020/lib/base/components/generic-form-base.component.mjs +3 -3
- package/esm2020/lib/base/components/generic-form.component.mjs +3 -3
- package/esm2020/lib/base/components/generic-list.component.mjs +60 -28
- package/esm2020/lib/base/components/generic-reactive-form.component.mjs +3 -3
- package/esm2020/lib/base/interceptors/base.interceptor.mjs +3 -3
- package/esm2020/lib/base/interceptors/caching-interceptor.mjs +3 -3
- package/esm2020/lib/base/interceptors/loading.interceptor.mjs +3 -3
- package/esm2020/lib/base/services/file.service.mjs +3 -3
- package/esm2020/lib/base/services/loading-screen.service.mjs +3 -3
- package/esm2020/lib/base/services/print.service.mjs +3 -3
- package/esm2020/lib/chips/chips.module.mjs +4 -4
- package/esm2020/lib/chips/components/chips.component.mjs +10 -10
- package/esm2020/lib/common/common.module.mjs +4 -4
- package/esm2020/lib/common/directives/disable-control.directive.mjs +3 -3
- package/esm2020/lib/common/functions/utils.mjs +3 -3
- package/esm2020/lib/common/helpers/app-storage.mjs +3 -3
- package/esm2020/lib/common/helpers/dynamic-builder.mjs +3 -3
- package/esm2020/lib/common/models/app-setting.mjs +3 -3
- package/esm2020/lib/common/pipes/data-source.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/enum.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/file-size.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/filter.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/first-letter.mjs +3 -3
- package/esm2020/lib/common/pipes/keys.mjs +3 -3
- package/esm2020/lib/common/pipes/month-name.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/only-number.mjs +3 -3
- package/esm2020/lib/common/pipes/order.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/placeholder.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/safe-html.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/time.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/titlecase.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/truncate.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/values.mjs +3 -3
- package/esm2020/lib/common/services/base.service.mjs +3 -3
- package/esm2020/lib/common/services/enum.service.mjs +3 -3
- package/esm2020/lib/dialogs/alert-dialog/alert-dialog.component.mjs +3 -3
- package/esm2020/lib/dialogs/confirm-dialog/confirm-dialog.component.mjs +3 -3
- package/esm2020/lib/dialogs/dialog.component.mjs +12 -12
- package/esm2020/lib/dialogs/dialogs.module.mjs +4 -4
- package/esm2020/lib/dialogs/prompt-dialog/prompt-dialog.component.mjs +3 -3
- package/esm2020/lib/dialogs/services/dialog.service.mjs +3 -3
- package/esm2020/lib/file/file-input.component.mjs +3 -3
- package/esm2020/lib/file/file.module.mjs +4 -4
- package/esm2020/lib/form-validators/directives/base-directive.mjs +3 -3
- package/esm2020/lib/form-validators/directives/control-host.directive.mjs +3 -3
- package/esm2020/lib/form-validators/directives/html-control-template.directive.mjs +3 -3
- package/esm2020/lib/form-validators/directives/rx-form.directive.mjs +3 -3
- package/esm2020/lib/form-validators/directives/template-validations/async-validation.directive.mjs +3 -3
- package/esm2020/lib/form-validators/directives/template-validations/base-validator.directive.mjs +3 -3
- package/esm2020/lib/form-validators/directives/template-validations/control-expression-process.mjs +3 -3
- package/esm2020/lib/form-validators/directives/template-validations/file-control.directive.mjs +3 -3
- package/esm2020/lib/form-validators/directives/template-validations/image-file-control.directive.mjs +3 -3
- package/esm2020/lib/form-validators/directives/template-validations/rxformcontrol.directive.mjs +3 -3
- package/esm2020/lib/form-validators/domain/element-processor/decimal.provider.mjs +3 -3
- package/esm2020/lib/form-validators/services/reactive-form.module.mjs +8 -8
- package/esm2020/lib/form-validators/services/rx-form-builder.mjs +3 -3
- package/esm2020/lib/form-validators/services/typed-form-builder.mjs +3 -3
- package/esm2020/lib/forms/components/generic-form/generic-form.component.mjs +15 -15
- package/esm2020/lib/forms/directives/mat-form-field-readonly.directive.mjs +3 -3
- package/esm2020/lib/forms/forms.module.mjs +4 -4
- package/esm2020/lib/forms/helpers/abstract-mat-form-field.mjs +3 -3
- package/esm2020/lib/forms/helpers/value-accessor-base.mjs +3 -3
- package/esm2020/lib/forms/validators/equal-validator.directive.mjs +3 -3
- package/esm2020/lib/forms/validators/native-element-injector.directive.mjs +3 -3
- package/esm2020/lib/forms/validators/unique-validator-directive.mjs +3 -3
- package/esm2020/lib/http/http.module.mjs +4 -4
- package/esm2020/lib/layout/layout-card-over/layout-card-over.component.mjs +3 -3
- package/esm2020/lib/layout/layout-footer/layout-footer.component.mjs +3 -3
- package/esm2020/lib/layout/layout-manage-list/layout-manage-list.component.mjs +3 -3
- package/esm2020/lib/layout/layout-manage-list/layout-manage-list.directives.mjs +9 -9
- package/esm2020/lib/layout/layout-nav/layout-nav.component.mjs +3 -3
- package/esm2020/lib/layout/layout-nav-list/layout-nav-list.component.mjs +3 -3
- package/esm2020/lib/layout/layout-nav-list/layout-nav-list.directives.mjs +9 -9
- package/esm2020/lib/layout/layout-toggle.class.mjs +3 -3
- package/esm2020/lib/layout/layout.component.mjs +3 -3
- package/esm2020/lib/layout/layout.directives.mjs +9 -9
- package/esm2020/lib/layout/layout.module.mjs +4 -4
- package/esm2020/lib/layout/navigation-drawer/navigation-drawer.component.mjs +9 -9
- package/esm2020/lib/media/directives/media-toggle.directive.mjs +3 -3
- package/esm2020/lib/media/media.module.mjs +4 -4
- package/esm2020/lib/media/services/media.service.mjs +3 -3
- package/esm2020/lib/menu/components/menu.component.mjs +3 -3
- package/esm2020/lib/menu/menu.module.mjs +4 -4
- package/esm2020/lib/menu/services/menu-items.service.mjs +3 -3
- package/esm2020/lib/menu/services/menu.resolve.mjs +6 -6
- package/esm2020/lib/menu/services/menu.service.mjs +3 -3
- package/esm2020/lib/search/search.module.mjs +4 -4
- package/esm2020/lib/search/vd-search-box/vd-search-box.component.mjs +3 -3
- package/esm2020/lib/search/vd-search-input/vd-search-input.component.mjs +3 -3
- package/esm2020/lib/select/select.component.mjs +6 -6
- package/esm2020/lib/select/select.module.mjs +4 -4
- package/esm2020/lib/table/components/dynamic-table/dynamic-table.component.mjs +5 -5
- package/esm2020/lib/table/components/filter-clear.component.mjs +3 -3
- package/esm2020/lib/table/components/filter-date.component.mjs +3 -3
- package/esm2020/lib/table/components/filter-input.component.mjs +3 -3
- package/esm2020/lib/table/components/filter-select.component.mjs +6 -6
- package/esm2020/lib/table/directives/data-source-filter.directive.mjs +3 -3
- package/esm2020/lib/table/models/table-menu-item.mjs +2 -1
- package/esm2020/lib/table/paginator-intl.mjs +3 -3
- package/esm2020/lib/table/table.module.mjs +4 -4
- package/fesm2015/messaia-cdk.mjs +440 -407
- package/fesm2015/messaia-cdk.mjs.map +1 -1
- package/fesm2020/messaia-cdk.mjs +440 -407
- package/fesm2020/messaia-cdk.mjs.map +1 -1
- package/lib/base/components/generic-list.component.d.ts +5 -3
- package/lib/table/models/table-menu-item.d.ts +1 -0
- package/package.json +1 -1
|
@@ -551,9 +551,9 @@ export class RxFormBuilder extends BaseFormBuilder {
|
|
|
551
551
|
});
|
|
552
552
|
}
|
|
553
553
|
}
|
|
554
|
-
/** @nocollapse */ /** @nocollapse */ RxFormBuilder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
555
|
-
/** @nocollapse */ /** @nocollapse */ RxFormBuilder.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.
|
|
556
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
554
|
+
/** @nocollapse */ /** @nocollapse */ RxFormBuilder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: RxFormBuilder, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
555
|
+
/** @nocollapse */ /** @nocollapse */ RxFormBuilder.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: RxFormBuilder });
|
|
556
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: RxFormBuilder, decorators: [{
|
|
557
557
|
type: Injectable
|
|
558
558
|
}], ctorParameters: function () { return []; } });
|
|
559
559
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicngtZm9ybS1idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvZm9ybS12YWxpZGF0b3JzL3NlcnZpY2VzL3J4LWZvcm0tYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBaUMsV0FBVyxFQUEwQixNQUFNLGdCQUFnQixDQUFBO0FBRXRJLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUc1RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBR3RKLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ25DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQTtBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FB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QUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQSxDQUFDLENBQUM7WUFDNUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ1AsS0FBSyxHQUFHLENBQUMsQ0FBQztnQkFDVixJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUU7b0JBQ2YsSUFBSSxVQUFVO3dCQUNWLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDekMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTt3QkFDckQsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzVDO2lCQUNKO2dCQUNELFFBQVEsR0FBRyxDQUFDLENBQUM7WUFDakIsQ0FBQztTQUNKLENBQUMsQ0FBQTtJQUNOLENBQUM7O2dKQXJqQlEsYUFBYTtvSkFBYixhQUFhOzJGQUFiLGFBQWE7a0JBRHpCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIFZhbGlkYXRvckZuLCBBc3luY1ZhbGlkYXRvckZuLCBGb3JtQnVpbGRlciwgQWJzdHJhY3RDb250cm9sT3B0aW9ucyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiXHJcbmltcG9ydCB7IFR5cGUgfSBmcm9tIFwiLi4vdXRpbFwiXHJcbmltcG9ydCB7IEJhc2VGb3JtQnVpbGRlciB9IGZyb20gJy4vYmFzZS1mb3JtLWJ1aWxkZXInO1xyXG5cclxuaW1wb3J0IHsgUmVhY3RpdmVGb3JtQ29uZmlnIH0gZnJvbSAnLi4vdXRpbC9yZWFjdGl2ZS1mb3JtLWNvbmZpZydcclxuaW1wb3J0IHsgZGVmYXVsdENvbnRhaW5lciB9IGZyb20gJy4uL2NvcmUvZGVmYXVsdENvbnRhaW5lcic7XHJcbmltcG9ydCB7IERlY29yYXRvckNvbmZpZ3VyYXRpb24sIEluc3RhbmNlQ29udGFpbmVyLCBQcm9wZXJ0eUluZm8gfSBmcm9tICcuLi9jb3JlL3ZhbGlkYXRvci5pbnRlcmZhY2UnO1xyXG5cclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4uL21vZGVsc1wiXHJcbmltcG9ydCB7IEFSUkFZX1BST1BFUlRZLCBPQkpFQ1RfUFJPUEVSVFksIFBST1BFUlRZLCBGVU5DVElPTl9TVFJJTkcsIE9CSkVDVF9TVFJJTkcsIFJYX1dFQl9WQUxJREFUT1IsIE5VTUJFUiwgQk9PTEVBTiwgU1RSSU5HLCBNT0RFTCB9IGZyb20gXCIuLi9jb25zdFwiXHJcbmltcG9ydCB7IFByb3BWYWxpZGF0aW9uQ29uZmlnIH0gZnJvbSBcIi4uL21vZGVscy9wcm9wLXZhbGlkYXRpb24tY29uZmlnXCI7XHJcblxyXG5pbXBvcnQgeyBBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiLi4vY29yZS92YWxpZGF0b3Iuc3RhdGljXCI7XHJcbmltcG9ydCB7IGNvbmRpdGlvbmFsQ2hhbmdlVmFsaWRhdG9yIH0gZnJvbSBcIi4uL3JlYWN0aXZlLWZvcm0tdmFsaWRhdG9ycy9jb25kaXRpb25hbC1jaGFuZ2UudmFsaWRhdG9yXCI7XHJcbmltcG9ydCB7IExpbnEgfSBmcm9tICcuLi91dGlsL2xpbnEnXHJcbmltcG9ydCB7IEFQUF9WQUxJREFUT1JTIH0gZnJvbSAnLi4vY29uc3QvYXBwLXZhbGlkYXRvcnMuY29uc3QnXHJcbmltcG9ydCB7IFJ4Rm9ybUNvbnRyb2wgfSBmcm9tICcuL2Zvcm0tY29udHJvbCc7XHJcbmltcG9ydCB7IFJ4Rm9ybUdyb3VwIH0gZnJvbSAnLi9yeC1mb3JtLWdyb3VwJ1xyXG5pbXBvcnQgeyBSeEZvcm1BcnJheSB9IGZyb20gJy4vcngtZm9ybS1hcnJheSc7XHJcbmltcG9ydCB7IGFuZFZhbGlkYXRvciB9IGZyb20gJy4uL3JlYWN0aXZlLWZvcm0tdmFsaWRhdG9ycy9hbmQudmFsaWRhdG9yJ1xyXG5pbXBvcnQgeyBvclZhbGlkYXRvciB9IGZyb20gJy4uL3JlYWN0aXZlLWZvcm0tdmFsaWRhdG9ycy9vci52YWxpZGF0b3InXHJcbmltcG9ydCB7IG5vdFZhbGlkYXRvciB9IGZyb20gJy4uL3JlYWN0aXZlLWZvcm0tdmFsaWRhdG9ycy9ub3QudmFsaWRhdG9yJ1xyXG5pbXBvcnQgeyBBcHBGb3JtR3JvdXAgfSBmcm9tICcuLi9tb2RlbHMvaW50ZXJmYWNlL2ktZm9ybS1ncm91cCdcclxuaW1wb3J0IHsgUmVnZXhWYWxpZGF0b3IgfSBmcm9tIFwiLi4vdXRpbC9yZWdleC12YWxpZGF0b3JcIjtcclxuaW1wb3J0IHsgZ2V0SW5zdGFuY2UgfSBmcm9tIFwiLi4vdXRpbC9pbnN0YW5jZS1wcm92aWRlci5mdW5jdGlvblwiO1xyXG5pbXBvcnQgeyBJQWJzdHJhY3RDb250cm9sIH0gZnJvbSBcIi4uL21vZGVscy9pbnRlcmZhY2UvaS1hYnN0cmFjdC1jb250cm9sXCJcclxuY29uc3QgTE9HSUNBTF9WQUxJREFUT1JTOiB7IFtrZXk6IHN0cmluZ106IEZ1bmN0aW9uIH0gPSB7IGFuZDogYW5kVmFsaWRhdG9yLCBvcjogb3JWYWxpZGF0b3IsIG5vdDogbm90VmFsaWRhdG9yIH1cclxuY29uc3QgQVNZTkM6IHN0cmluZyA9IFwiYXN5bmNcIlxyXG5jb25zdCBFTlRJVFlfT0JKRUNUOiBzdHJpbmcgPSBcImVudGl0eU9iamVjdFwiO1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBSeEZvcm1CdWlsZGVyIGV4dGVuZHMgQmFzZUZvcm1CdWlsZGVyIHtcclxuICAgIHByaXZhdGUgbmVzdGVkUHJvcDogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBjb25kaXRpb25hbE9iamVjdFByb3BzOiBhbnlbXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBjb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZTogYW55ID0ge307XHJcbiAgICBwcml2YXRlIGJ1aWxkZXJDb25maWd1cmF0aW9uQ29uZGl0aW9uYWxPYmplY3RQcm9wczogYW55W10gPSBbXTtcclxuICAgIHByaXZhdGUgZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XHJcbiAgICBwcml2YXRlIGN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3I6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuICAgIHByaXZhdGUgaXNOZXN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgaXNHcm91cENhbGxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBpc05lc3RlZEJpbmRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBnZXRJbnN0YW5jZUNvbnRhaW5lcihpbnN0YW5jZUZ1bmM6IGFueSwgZW50aXR5T2JqZWN0OiBhbnkpOiBJbnN0YW5jZUNvbnRhaW5lciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFjZVByb3ZpZGVyKGluc3RhbmNlRnVuYywgZW50aXR5T2JqZWN0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldFZhbHVlKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBvYmplY3Q6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGZvciAodmFyIGNvbCBpbiBvYmplY3QpIHtcclxuICAgICAgICAgICAgdmFyIGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KFtjb2xdKTtcclxuICAgICAgICAgICAgY29udHJvbC5zZXRWYWx1ZShvYmplY3RbY29sXSk7XHJcbiAgICAgICAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGV4dHJhY3RFeHByZXNzaW9ucyhmb21yQnVpbGRlckNvbmZpZ3VyYXRpb246IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbik6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nW10gfSB7XHJcbiAgICAgICAgaWYgKGZvbXJCdWlsZGVyQ29uZmlndXJhdGlvbiAmJiBmb21yQnVpbGRlckNvbmZpZ3VyYXRpb24uZHluYW1pY1ZhbGlkYXRpb24pIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZm9tckJ1aWxkZXJDb25maWd1cmF0aW9uLmR5bmFtaWNWYWxpZGF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBkZWNvcmF0b3IgaW4gZm9tckJ1aWxkZXJDb25maWd1cmF0aW9uLmR5bmFtaWNWYWxpZGF0aW9uW3Byb3BlcnR5XSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmb21yQnVpbGRlckNvbmZpZ3VyYXRpb24uZHluYW1pY1ZhbGlkYXRpb25bcHJvcGVydHldW2RlY29yYXRvcl0uY29uZGl0aW9uYWxFeHByZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2x1bW5zID0gTGlucS5leHByZXNzaW9uQ29sdW1ucyhmb21yQnVpbGRlckNvbmZpZ3VyYXRpb24uZHluYW1pY1ZhbGlkYXRpb25bcHJvcGVydHldW2RlY29yYXRvcl0uY29uZGl0aW9uYWxFeHByZXNzaW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbnRhaW5lci5hZGRDaGFuZ2VWYWxpZGF0aW9uKHRoaXMuY29uZGl0aW9uYWxWYWxpZGF0aW9uSW5zdGFuY2UsIHByb3BlcnR5LCBjb2x1bW5zKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRBc3luY1ZhbGlkYXRpb24ocHJvcGVydHk6IFByb3BlcnR5SW5mbywgcHJvcGVydHlWYWxpZGF0b3JzOiBEZWNvcmF0b3JDb25maWd1cmF0aW9uW10sIHByb3BWYWxpZGF0aW9uQ29uZmlnOiBQcm9wVmFsaWRhdGlvbkNvbmZpZykge1xyXG4gICAgICAgIGxldCBhc3luY1ZhbGlkYXRvcnMgPSBbXTtcclxuICAgICAgICBpZiAocHJvcGVydHlWYWxpZGF0b3JzKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHByb3BlcnR5VmFsaWRhdG9yIG9mIHByb3BlcnR5VmFsaWRhdG9ycykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5VmFsaWRhdG9yLmlzQXN5bmMpXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlWYWxpZGF0b3IuY29uZmlnLmZvckVhY2godCA9PiB7IGFzeW5jVmFsaWRhdG9ycy5wdXNoKHQpIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwcm9wVmFsaWRhdGlvbkNvbmZpZyAmJiBwcm9wVmFsaWRhdGlvbkNvbmZpZ1tBU1lOQ10pIHtcclxuICAgICAgICAgICAgcHJvcFZhbGlkYXRpb25Db25maWdbQVNZTkNdLmZvckVhY2godCA9PiB7IGFzeW5jVmFsaWRhdG9ycy5wdXNoKHQpIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhc3luY1ZhbGlkYXRvcnM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRGb3JtQ29udHJvbChwcm9wZXJ0eTogUHJvcGVydHlJbmZvLCBwcm9wZXJ0eVZhbGlkYXRvcnM6IERlY29yYXRvckNvbmZpZ3VyYXRpb25bXSwgcHJvcFZhbGlkYXRpb25Db25maWc6IFByb3BWYWxpZGF0aW9uQ29uZmlnLCBpbnN0YW5jZTogSW5zdGFuY2VDb250YWluZXIsIGVudGl0eTogYW55KSB7XHJcbiAgICAgICAgbGV0IHZhbGlkYXRvcnMgPSBbXTtcclxuICAgICAgICBsZXQgY29sdW1ucyA9IFtdO1xyXG4gICAgICAgIGlmICgoaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMgJiYgaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNbcHJvcGVydHkubmFtZV0pIHx8ICh0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzICYmIHRoaXMuY29uZGl0aW9uYWxWYWxpZGF0aW9uSW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNbcHJvcGVydHkubmFtZV0pKSB7XHJcbiAgICAgICAgICAgIGxldCBwcm9wcyA9IFtdO1xyXG4gICAgICAgICAgICBpZiAoKGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzICYmIGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW3Byb3BlcnR5Lm5hbWVdKSlcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW3Byb3BlcnR5Lm5hbWVdLmZvckVhY2godCA9PiBwcm9wcy5wdXNoKHQpKVxyXG4gICAgICAgICAgICBpZiAodGhpcy5jb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wcyAmJiB0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW3Byb3BlcnR5Lm5hbWVdKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1twcm9wZXJ0eS5uYW1lXS5mb3JFYWNoKHQgPT4gcHJvcHMucHVzaCh0KSk7XHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChjb25kaXRpb25hbENoYW5nZVZhbGlkYXRvcihwcm9wcykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jb25kaXRpb25hbE9iamVjdFByb3BzLmxlbmd0aCA+IDAgfHwgdGhpcy5idWlsZGVyQ29uZmlndXJhdGlvbkNvbmRpdGlvbmFsT2JqZWN0UHJvcHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgcHJvcENvbmRpdGlvbnMgPSBbXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uYWxPYmplY3RQcm9wcylcclxuICAgICAgICAgICAgICAgIHByb3BDb25kaXRpb25zID0gdGhpcy5jb25kaXRpb25hbE9iamVjdFByb3BzLmZpbHRlcih0ID0+IHQucHJvcE5hbWUgPT0gcHJvcGVydHkubmFtZSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmJ1aWxkZXJDb25maWd1cmF0aW9uQ29uZGl0aW9uYWxPYmplY3RQcm9wcylcclxuICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlckNvbmZpZ3VyYXRpb25Db25kaXRpb25hbE9iamVjdFByb3BzLmZpbHRlcih0ID0+IHQucHJvcE5hbWUgPT0gcHJvcGVydHkubmFtZSkuZm9yRWFjaCh0ID0+IHByb3BDb25kaXRpb25zLnB1c2godCkpO1xyXG4gICAgICAgICAgICBwcm9wQ29uZGl0aW9ucy5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHQucmVmZXJlbmNlUHJvcE5hbWUgJiYgY29sdW1ucy5pbmRleE9mKHQucmVmZXJlbmNlUHJvcE5hbWUpID09IC0xKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaCh0LnJlZmVyZW5jZVByb3BOYW1lKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgaWYgKGNvbHVtbnMubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChjb25kaXRpb25hbENoYW5nZVZhbGlkYXRvcihjb2x1bW5zKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IHByb3BlcnR5VmFsaWRhdG9yIG9mIHByb3BlcnR5VmFsaWRhdG9ycykge1xyXG4gICAgICAgICAgICBpZiAoIXByb3BlcnR5VmFsaWRhdG9yLmlzQXN5bmMpXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb3BlcnR5VmFsaWRhdG9yLmFubm90YXRpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBbm5vdGF0aW9uVHlwZXMucnVsZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKEFQUF9WQUxJREFUT1JTW3Byb3BlcnR5VmFsaWRhdG9yLmFubm90YXRpb25UeXBlXShwcm9wZXJ0eVZhbGlkYXRvci5jb25maWcsIGVudGl0eSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQW5ub3RhdGlvblR5cGVzLmFuZDpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIEFubm90YXRpb25UeXBlcy5vcjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIEFubm90YXRpb25UeXBlcy5ub3Q6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChMT0dJQ0FMX1ZBTElEQVRPUlNbcHJvcGVydHlWYWxpZGF0b3IuYW5ub3RhdGlvblR5cGVdKHByb3BlcnR5VmFsaWRhdG9yLmNvbmZpZykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChBUFBfVkFMSURBVE9SU1twcm9wZXJ0eVZhbGlkYXRvci5hbm5vdGF0aW9uVHlwZV0ocHJvcGVydHlWYWxpZGF0b3IuY29uZmlnKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwcm9wVmFsaWRhdGlvbkNvbmZpZylcclxuICAgICAgICAgICAgdGhpcy5hZGRpdGlvbmFsVmFsaWRhdGlvbih2YWxpZGF0b3JzLCBwcm9wVmFsaWRhdGlvbkNvbmZpZyk7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wZXJ0eS5uYW1lXSlcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yW3Byb3BlcnR5Lm5hbWVdLmZvckVhY2godCA9PiB7IHZhbGlkYXRvcnMucHVzaCh0KTsgfSlcclxuICAgICAgICByZXR1cm4gdmFsaWRhdG9ycztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZGl0aW9uYWxWYWxpZGF0aW9uKHZhbGlkYXRpb25zOiBhbnlbXSwgcHJvcFZhbGlkYXRpb25Db25maWc6IFByb3BWYWxpZGF0aW9uQ29uZmlnIHwgYW55KSB7XHJcbiAgICAgICAgZm9yICh2YXIgY29sIGluIEFubm90YXRpb25UeXBlcykge1xyXG4gICAgICAgICAgICBpZiAocHJvcFZhbGlkYXRpb25Db25maWdbQW5ub3RhdGlvblR5cGVzW2NvbF1dICYmIGNvbCAhPSBcImN1c3RvbVwiKSB7XHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0aW9ucy5wdXNoKEFQUF9WQUxJREFUT1JTW0Fubm90YXRpb25UeXBlc1tjb2xdXShwcm9wVmFsaWRhdGlvbkNvbmZpZ1tBbm5vdGF0aW9uVHlwZXNbY29sXV0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChjb2wgPT0gQW5ub3RhdGlvblR5cGVzLmN1c3RvbSAmJiBwcm9wVmFsaWRhdGlvbkNvbmZpZ1tBbm5vdGF0aW9uVHlwZXNbY29sXV0pXHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0aW9ucy5wdXNoKHByb3BWYWxpZGF0aW9uQ29uZmlnW2NvbF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEVudGl0eTxUPihvYmplY3Q6IFQsIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbjogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBwcm9wZXJ0eU5hbWU6IHN0cmluZywgaXNTYW1lT2JqZWN0Q29uc3RydWN0b3I6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGlmIChmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24gJiYgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmdlbmVyaWNFbnRpdGllcyAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uZ2VuZXJpY0VudGl0aWVzW3Byb3BlcnR5TmFtZV0pXHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uZ2VuZXJpY0VudGl0aWVzW3Byb3BlcnR5TmFtZV07XHJcbiAgICAgICAgcmV0dXJuIGlzU2FtZU9iamVjdENvbnN0cnVjdG9yID8gb2JqZWN0LmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0T2JqZWN0UHJvcGVydHlJbnN0YW5jZShvYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIHByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb246IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbikge1xyXG4gICAgICAgIGlmIChwcm9wZXJ0eUluZm8ucHJvcGVydHlUeXBlID09IE9CSkVDVF9QUk9QRVJUWSAmJiBvYmplY3RbcHJvcGVydHlJbmZvLm5hbWVdKVxyXG4gICAgICAgICAgICByZXR1cm4gb2JqZWN0W3Byb3BlcnR5SW5mby5uYW1lXS5jb25zdHJ1Y3RvcjtcclxuICAgICAgICBlbHNlIGlmIChwcm9wZXJ0eUluZm8ucHJvcGVydHlUeXBlID09IEFSUkFZX1BST1BFUlRZICYmIG9iamVjdFtwcm9wZXJ0eUluZm8ubmFtZV0gJiYgb2JqZWN0W3Byb3BlcnR5SW5mby5uYW1lXS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICByZXR1cm4gb2JqZWN0W3Byb3BlcnR5SW5mby5uYW1lXVswXS5jb25zdHJ1Y3RvcjtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRFbnRpdHkob2JqZWN0LCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIHByb3BlcnR5SW5mby5uYW1lKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoZWNrT2JqZWN0UHJvcEFkZGl0aW9uYWxWYWxpZGF0aW9uPFQ+KGluc3RhbmNlQ29udGFpbmVyOiBJbnN0YW5jZUNvbnRhaW5lciwgb2JqZWN0OiBULCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb246IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbikge1xyXG4gICAgICAgIHZhciBwcm9wcyA9IGluc3RhbmNlQ29udGFpbmVyLnByb3BlcnRpZXMuZmlsdGVyKHQgPT4gdC5wcm9wZXJ0eVR5cGUgPT0gT0JKRUNUX1BST1BFUlRZIHx8IHQucHJvcGVydHlUeXBlID09IEFSUkFZX1BST1BFUlRZKVxyXG4gICAgICAgIHByb3BzLmZvckVhY2godCA9PiB7XHJcbiAgICAgICAgICAgIGxldCBlbnRpdHkgPSB0LmVudGl0eTtcclxuICAgICAgICAgICAgaWYgKCF0LmVudGl0eSlcclxuICAgICAgICAgICAgICAgIGVudGl0eSA9IHRoaXMuZ2V0T2JqZWN0UHJvcGVydHlJbnN0YW5jZShvYmplY3QsIHQsIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbilcclxuICAgICAgICAgICAgaWYgKGVudGl0eSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGluc3RhbmNlID0gdGhpcy5nZXRJbnN0YW5jZUNvbnRhaW5lcihlbnRpdHksIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9wID0gaW5zdGFuY2VDb250YWluZXIucHJvcGVydGllcy5maWx0ZXIodCA9PiB0Lm5hbWUgPT0ga2V5KVswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaW5zdGFuY2VDb250YWluZXIuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VDb250YWluZXIuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaW5zdGFuY2VDb250YWluZXIuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNba2V5XSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZUNvbnRhaW5lci5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1trZXldID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1trZXldLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQucHJvcGVydHlUeXBlICE9IEFSUkFZX1BST1BFUlRZKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZUNvbnRhaW5lci5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1trZXldLnB1c2goW3QubmFtZSwgeF0uam9pbignLicpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VDb250YWluZXIuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNba2V5XS5wdXNoKFt0Lm5hbWUsIHhdLmpvaW4oJ1tdJykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRPYmplY3QobW9kZWw6IGFueSB8IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGVudGl0eU9iamVjdD86IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbj86IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbik6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xyXG4gICAgICAgIGxldCBqc29uOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgbW9kZWwgPT0gRlVOQ1RJT05fU1RSSU5HKVxyXG4gICAgICAgICAgICBqc29uLm1vZGVsID0gbW9kZWw7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgbW9kZWwgPT0gRlVOQ1RJT05fU1RSSU5HICYmIChlbnRpdHlPYmplY3QgaW5zdGFuY2VvZiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pKSB7XHJcbiAgICAgICAgICAgIGpzb24uZW50aXR5T2JqZWN0ID0gdGhpcy5jcmVhdGVDbGFzc09iamVjdChqc29uLm1vZGVsLCBlbnRpdHlPYmplY3QpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbnRpdHlPYmplY3QgJiYgIShlbnRpdHlPYmplY3QgaW5zdGFuY2VvZiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pKVxyXG4gICAgICAgICAgICBqc29uLmVudGl0eU9iamVjdCA9IGVudGl0eU9iamVjdDtcclxuXHJcbiAgICAgICAgaWYgKGVudGl0eU9iamVjdCBpbnN0YW5jZW9mIEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiAmJiAhZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKVxyXG4gICAgICAgICAgICBqc29uLmZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiA9IGVudGl0eU9iamVjdDtcclxuICAgICAgICBlbHNlIGlmICghKGVudGl0eU9iamVjdCBpbnN0YW5jZW9mIEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbikgJiYgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgICAgIGpzb24uZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uID0gZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uO1xyXG4gICAgICAgICAgICBqc29uLmVudGl0eU9iamVjdCA9IHRoaXMuY3JlYXRlQ2xhc3NPYmplY3QoanNvbi5tb2RlbCwganNvbi5mb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIGpzb24uZW50aXR5T2JqZWN0KVxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmICghZW50aXR5T2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kZWwgPT0gT0JKRUNUX1NUUklORylcclxuICAgICAgICAgICAgICAgIGpzb24ubW9kZWwgPSBtb2RlbC5jb25zdHJ1Y3RvcjtcclxuICAgICAgICAgICAganNvbi5lbnRpdHlPYmplY3QgPSB0aGlzLmNyZWF0ZUNsYXNzT2JqZWN0KGpzb24ubW9kZWwsIGpzb24uZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBtb2RlbClcclxuICAgICAgICB9IGVsc2UgaWYgKG1vZGVsICYmIChlbnRpdHlPYmplY3QgaW5zdGFuY2VvZiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pICYmICh0eXBlb2YgbW9kZWwgPT0gT0JKRUNUX1NUUklORykpIHtcclxuICAgICAgICAgICAganNvbltNT0RFTF0gPSBtb2RlbC5jb25zdHJ1Y3RvcjtcclxuICAgICAgICAgICAganNvbltFTlRJVFlfT0JKRUNUXSA9IHRoaXMuY3JlYXRlQ2xhc3NPYmplY3QoanNvbi5tb2RlbCwganNvbi5mb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIG1vZGVsKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4ganNvbjtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIGNvbnRyb2wodmFsdWU/OiBhbnksIHZhbGlkYXRvcnM/OiBWYWxpZGF0b3JGbltdLCBhc3luY1ZhbGlkYXRvcnM/OiBBc3luY1ZhbGlkYXRvckZuW10pOiBJQWJzdHJhY3RDb250cm9sIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJ4Rm9ybUNvbnRyb2wodmFsdWUsIHZhbGlkYXRvcnMsIGFzeW5jVmFsaWRhdG9ycywge30sIHt9LCAnJywgW10pO1xyXG4gICAgfVxyXG5cclxuICAgIGFycmF5KHZhbHVlczogW3sgW2tleTogc3RyaW5nXTogYW55IH1dLCB2YWxpZGF0b3JDb25maWc/OiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgICBsZXQgZm9ybUFycmF5ID0gdGhpcy5ncm91cCh7IHRlbXA6IHZhbHVlcyB9LCB2YWxpZGF0b3JDb25maWcpLmdldChcInRlbXBcIikgYXMgRm9ybUFycmF5O1xyXG4gICAgICAgIHZhciBmb3JtQnVpbGRlciA9IG5ldyBGb3JtQnVpbGRlcigpO1xyXG4gICAgICAgIHJldHVybiBmb3JtQnVpbGRlci5hcnJheShmb3JtQXJyYXkuY29udHJvbHMpO1xyXG4gICAgfVxyXG5cclxuICAgIGdyb3VwKGdyb3VwT2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCB2YWxpZGF0b3JDb25maWc/OiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pOiBGb3JtR3JvdXAge1xyXG4gICAgICAgIGxldCBtb2RlbEluc3RhbmNlID0gc3VwZXIuY3JlYXRlSW5zdGFuY2UoKTtcclxuICAgICAgICBsZXQgZW50aXR5T2JqZWN0ID0ge307XHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3IgPSB7fTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3IgPSB0aGlzLmZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcjtcclxuICAgICAgICB0aGlzLmNyZWF0ZVZhbGlkYXRvckZvcm1Hcm91cChncm91cE9iamVjdCwgZW50aXR5T2JqZWN0LCBtb2RlbEluc3RhbmNlLCB2YWxpZGF0b3JDb25maWcpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvciA9IHRoaXMuZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yO1xyXG4gICAgICAgIHRoaXMuaXNHcm91cENhbGxlZCA9IHRydWU7XHJcbiAgICAgICAgbGV0IGZvcm1Hcm91cCA9IHRoaXMuZm9ybUdyb3VwKG1vZGVsSW5zdGFuY2UuY29uc3RydWN0b3IsIGVudGl0eU9iamVjdCwgdmFsaWRhdG9yQ29uZmlnKTtcclxuICAgICAgICB0aGlzLmlzR3JvdXBDYWxsZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvciA9IHt9O1xyXG4gICAgICAgIHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvciA9IHRoaXMuZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yO1xyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yID0ge307XHJcbiAgICAgICAgcmV0dXJuIGZvcm1Hcm91cDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFwcGx5QWxsUHJvcFZhbGlkYXRvcihwcm9wTmFtZTogc3RyaW5nLCB2YWxpZGF0b3JDb25maWc6IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgbW9kZWxJbnN0YW5jZTogYW55KSB7XHJcbiAgICAgICAgaWYgKHZhbGlkYXRvckNvbmZpZyAmJiB2YWxpZGF0b3JDb25maWcuYXBwbHlBbGxQcm9wcykge1xyXG4gICAgICAgICAgICBpZiAoISh2YWxpZGF0b3JDb25maWcuZXhjbHVkZVByb3BzICYmIHZhbGlkYXRvckNvbmZpZy5leGNsdWRlUHJvcHMubGVuZ3RoID4gMCAmJiB2YWxpZGF0b3JDb25maWcuZXhjbHVkZVByb3BzLmluZGV4T2YocHJvcE5hbWUpID09IC0xKSkge1xyXG4gICAgICAgICAgICAgICAgdmFsaWRhdG9yQ29uZmlnLmFwcGx5QWxsUHJvcHMuZm9yRWFjaCgodDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQubmFtZSA9PSBSWF9XRUJfVkFMSURBVE9SKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHQocHJvcE5hbWUsIG1vZGVsSW5zdGFuY2UpXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcE5hbWVdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yW3Byb3BOYW1lXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcE5hbWVdLnB1c2godClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZHluYW1pY1ZhbGlkYXRpb25Qcm9wQ2hlY2socHJvcE5hbWU6IHN0cmluZywgdmFsaWRhdG9yQ29uZmlnOiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgICByZXR1cm4gKHZhbGlkYXRvckNvbmZpZyA9PSB1bmRlZmluZWQpID8gdHJ1ZSA6ICghdmFsaWRhdG9yQ29uZmlnLmR5bmFtaWNWYWxpZGF0aW9uQ29uZmlndXJhdGlvblByb3BlcnR5TmFtZSkgPyB0cnVlIDogdmFsaWRhdG9yQ29uZmlnLmR5bmFtaWNWYWxpZGF0aW9uQ29uZmlndXJhdGlvblByb3BlcnR5TmFtZSA9PSBwcm9wTmFtZSA/IGZhbHNlIDogdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzTm90T2JqZWN0KHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT0gT0JKRUNUX1NUUklORztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZVZhbGlkYXRvckZvcm1Hcm91cChncm91cE9iamVjdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgZW50aXR5T2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBtb2RlbEluc3RhbmNlOiBhbnksIHZhbGlkYXRvckNvbmZpZzogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gZ3JvdXBPYmplY3QpIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBwcm9wID0gZ3JvdXBPYmplY3RbcHJvcE5hbWVdO1xyXG4gICAgICAgICAgICBpZiAocHJvcCBpbnN0YW5jZW9mIEFycmF5ICYmIHByb3AubGVuZ3RoID4gMCAmJiB0aGlzLmlzTm90T2JqZWN0KHByb3BbMF0pKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcHJvcFZhbGlkYXRvcnMgPSAocHJvcC5sZW5ndGggPiAxICYmIHByb3BbMV0gaW5zdGFuY2VvZiBBcnJheSkgPyBwcm9wWzFdIDogKHByb3AubGVuZ3RoID09IDIpID8gW3Byb3BbMV1dIDogW107XHJcbiAgICAgICAgICAgICAgICBsZXQgcHJvcGVydHlBZGRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsaWRhdG9ycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wVmFsaWRhdG9yc1tpXS5uYW1lID09IFJYX1dFQl9WQUxJREFUT1IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcFZhbGlkYXRvcnNbaV0ocHJvcE5hbWUsIG1vZGVsSW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUFkZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yW3Byb3BOYW1lXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wTmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yW3Byb3BOYW1lXS5wdXNoKHByb3BWYWxpZGF0b3JzW2ldKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHlBZGRlZClcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29udGFpbmVyLmluaXRQcm9wZXJ0eU9iamVjdChwcm9wTmFtZSwgUFJPUEVSVFksIHVuZGVmaW5lZCwgdHlwZW9mIG1vZGVsSW5zdGFuY2UgPT0gT0JKRUNUX1NUUklORyA/IG1vZGVsSW5zdGFuY2UgOiB7IGNvbnN0cnVjdG9yOiBtb2RlbEluc3RhbmNlIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseUFsbFByb3BWYWxpZGF0b3IocHJvcE5hbWUsIHZhbGlkYXRvckNvbmZpZywgbW9kZWxJbnN0YW5jZSlcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wID09PSBudWxsIHx8IHByb3AgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgcHJvcCA9PSBTVFJJTkcgfHwgdHlwZW9mIHByb3AgPT0gTlVNQkVSIHx8IHR5cGVvZiBwcm9wID09IEJPT0xFQU4gfHwgcHJvcCBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHRDb250YWluZXIuaW5pdFByb3BlcnR5T2JqZWN0KHByb3BOYW1lLCBQUk9QRVJUWSwgdW5kZWZpbmVkLCB0eXBlb2YgbW9kZWxJbnN0YW5jZSA9PSBPQkpFQ1RfU1RSSU5HID8gbW9kZWxJbnN0YW5jZSA6IHsgY29uc3RydWN0b3I6IG1vZGVsSW5zdGFuY2UgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5QWxsUHJvcFZhbGlkYXRvcihwcm9wTmFtZSwgdmFsaWRhdG9yQ29uZmlnLCBtb2RlbEluc3RhbmNlKVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3AgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb3AgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlPYmplY3RbcHJvcE5hbWVdID0gcHJvcDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByb3BNb2RlbEluc3RhbmNlID0gc3VwZXIuY3JlYXRlSW5zdGFuY2UoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZGVsSW5zdGFuY2UgPT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlbEluc3RhbmNlLmNvbnN0cnVjdG9yID0gbW9kZWxJbnN0YW5jZTtcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29udGFpbmVyLmluaXRQcm9wZXJ0eU9iamVjdChwcm9wTmFtZSwgQVJSQVlfUFJPUEVSVFksIHByb3BNb2RlbEluc3RhbmNlLmNvbnN0cnVjdG9yLCBtb2RlbEluc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlPYmplY3RbcHJvcE5hbWVdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgcm93IG9mIHByb3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGpPYmplY3QgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BOYW1lXS5wdXNoKGpPYmplY3QpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlVmFsaWRhdG9yRm9ybUdyb3VwKHJvdywgak9iamVjdCwgcHJvcE1vZGVsSW5zdGFuY2UuY29uc3RydWN0b3IsIHZhbGlkYXRvckNvbmZpZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHByb3AgPT0gT0JKRUNUX1NUUklORyAmJiAhKHByb3AgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCB8fCBwcm9wIGluc3RhbmNlb2YgUnhGb3JtQ29udHJvbCkpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgZm9ybUdyb3VwOiBhbnkgPSAocHJvcCBpbnN0YW5jZW9mIEZvcm1BcnJheSkgPyBwcm9wLmNvbnRyb2xzWzBdIDogcHJvcFxyXG4gICAgICAgICAgICAgICAgaWYgKCFmb3JtR3JvdXAubW9kZWwgJiYgKHByb3AgaW5zdGFuY2VvZiBGb3JtR3JvdXAgfHwgcHJvcCBpbnN0YW5jZW9mIFJ4Rm9ybUdyb3VwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cCA9IHRoaXMuZ3JvdXAoZm9ybUdyb3VwLmNvbnRyb2xzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwcm9wIGluc3RhbmNlb2YgRm9ybUdyb3VwIHx8IHByb3AgaW5zdGFuY2VvZiBSeEZvcm1Hcm91cCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVudGl0eU9iamVjdFtwcm9wTmFtZV0gPSBwcm9wO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb250YWluZXIuaW5pdFByb3BlcnR5T2JqZWN0KHByb3BOYW1lLCBPQkpFQ1RfUFJPUEVSVFksIGZvcm1Hcm91cC5tb2RlbCwgbW9kZWxJbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByb3AgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlPYmplY3RbcHJvcE5hbWVdID0gcHJvcDtcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29udGFpbmVyLmluaXRQcm9wZXJ0eU9iamVjdChwcm9wTmFtZSwgQVJSQVlfUFJPUEVSVFksIGZvcm1Hcm91cC5tb2RlbCwgbW9kZWxJbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmR5bmFtaWNWYWxpZGF0aW9uUHJvcENoZWNrKHByb3BOYW1lLCB2YWxpZGF0b3JDb25maWcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yW3Byb3BOYW1lXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3IgPSB0aGlzLmZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wTmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9wTW9kZWxJbnN0YW5jZSA9IHN1cGVyLmNyZWF0ZUluc3RhbmNlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eU9iamVjdFtwcm9wTmFtZV0gPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BOYW1lXS5jb25zdHJ1Y3RvciA9IHByb3BNb2RlbEluc3RhbmNlLmNvbnN0cnVjdG9yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29udGFpbmVyLmluaXRQcm9wZXJ0eU9iamVjdChwcm9wTmFtZSwgT0JKRUNUX1BST1BFUlRZLCBlbnRpdHlPYmplY3RbcHJvcE5hbWVdLmNvbnN0cnVjdG9yLCBtb2RlbEluc3RhbmNlLmNvbnN0cnVjdG9yID09IEZ1bmN0aW9uID8geyBjb25zdHJ1Y3RvcjogbW9kZWxJbnN0YW5jZSB9IDogbW9kZWxJbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmplY3RWYWxpZGF0aW9uQ29uZmlnID0gdGhpcy5nZXRWYWxpZGF0b3JDb25maWcodmFsaWRhdG9yQ29uZmlnLCBncm91cE9iamVjdCwgcHJvcE5hbWUgKyBcIi5cIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVWYWxpZGF0b3JGb3JtR3JvdXAoZ3JvdXBPYmplY3RbcHJvcE5hbWVdLCBlbnRpdHlPYmplY3RbcHJvcE5hbWVdLCBlbnRpdHlPYmplY3RbcHJvcE5hbWVdLmNvbnN0cnVjdG9yLCBvYmplY3RWYWxpZGF0aW9uQ29uZmlnKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgZW50aXR5T2JqZWN0W3Byb3BOYW1lXSA9IGdyb3VwT2JqZWN0W3Byb3BOYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wID09IFNUUklORyB8fCB0eXBlb2YgcHJvcCA9PSBOVU1CRVIgfHwgdHlwZW9mIHByb3AgPT0gQk9PTEVBTiB8fCBwcm9wIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BOYW1lXSA9IHByb3BcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgocHJvcCAmJiBwcm9wLmxlbmd0aCA+IDAgJiYgdGhpcy5pc05vdE9iamVjdChwcm9wWzBdKSAmJiAhKHByb3AgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCB8fCBwcm9wIGluc3RhbmNlb2YgUnhGb3JtQ29udHJvbCkgJiYgIShwcm9wIGluc3RhbmNlb2YgRm9ybUFycmF5KSkpIHtcclxuICAgICAgICAgICAgICAgIGVudGl0eU9iamVjdFtwcm9wTmFtZV0gPSBwcm9wWzBdXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xyXG4gICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BOYW1lXSA9IHByb3BcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wgfHwgcHJvcCBpbnN0YW5jZW9mIFJ4Rm9ybUNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgIGVudGl0eU9iamVjdFtwcm9wTmFtZV0gPSBwcm9wXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0Q29udGFpbmVyLmluaXRQcm9wZXJ0eU9iamVjdChwcm9wTmFtZSwgUFJPUEVSVFksIHVuZGVmaW5lZCwgbW9kZWxJbnN0YW5jZS5jb25zdHJ1Y3RvciA/IG1vZGVsSW5zdGFuY2UgOiB7IGNvbnN0cnVjdG9yOiBtb2RlbEluc3RhbmNlIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VmFsaWRhdG9yQ29uZmlnKHZhbGlkYXRvckNvbmZpZzogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBlbnRpdHlPYmplY3Q6IGFueSwgcm9vdFByb3BlcnR5TmFtZTogc3RyaW5nLCBhcnJheVByb3BlcnR5TmFtZT86IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgbGV0IGV4Y2x1ZGVQcm9wcyA9IFtdO1xyXG4gICAgICAgIGxldCBpbmNsdWRlUHJvcHMgPSBbXTtcclxuICAgICAgICBsZXQgaWdub3JlVW5kZWZpbmVkUHJvcHMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKCF2YWxpZGF0b3JDb25maWcpIHJldHVybiB7fTtcclxuXHJcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvblByb3BzID0gdGhpcy5nZXRPYmplY3RGb3JQcm9wZXJ0eSh2YWxpZGF0b3JDb25maWcuZHluYW1pY1ZhbGlkYXRpb24sIHJvb3RQcm9wZXJ0eU5hbWUsIGFycmF5UHJvcGVydHlOYW1lKTtcclxuICAgICAgICBjb25zdCBhYnN0cmFjdENvbnRyb2xPcHRpb25zID0gdGhpcy5nZXRPYmplY3RGb3JQcm9wZXJ0eSh2YWxpZGF0b3JDb25maWcuYWJzdHJhY3RDb250cm9sT3B0aW9ucywgcm9vdFByb3BlcnR5TmFtZSwgYXJyYXlQcm9wZXJ0eU5hbWUpO1xyXG5cclxuICAgICAgICBpZiAodmFsaWRhdG9yQ29uZmlnLmV4Y2x1ZGVQcm9wcylcclxuICAgICAgICAgICAgZXhjbHVkZVByb3BzID0gdGhpcy5nZXRQcm9wcyh2YWxpZGF0b3JDb25maWcuZXhjbHVkZVByb3BzLCByb290UHJvcGVydHlOYW1lKTtcclxuICAgICAgICBpZiAodmFsaWRhdG9yQ29uZmlnLmluY2x1ZGVQcm9wcylcclxuICAgICAgICAgICAgaW5jbHVkZVByb3BzID0gdGhpcy5nZXRQcm9wcyh2YWxpZGF0b3JDb25maWcuaW5jbHVkZVByb3BzLCByb290UHJvcGVydHlOYW1lKTtcclxuICAgICAgICBpZiAodmFsaWRhdG9yQ29uZmlnLmlnbm9yZVVuZGVmaW5lZFByb3BzKVxyXG4gICAgICAgICAgICBpZ25vcmVVbmRlZmluZWRQcm9wcyA9IHRoaXMuZ2V0UHJvcHModmFsaWRhdG9yQ29uZmlnLmlnbm9yZVVuZGVmaW5lZFByb3BzLCByb290UHJvcGVydHlOYW1lLCB0cnVlKTtcclxuICAgICAgICBpZiAoIU9iamVjdC5rZXlzKGFic3RyYWN0Q29udHJvbE9wdGlvbnMpLmxlbmd0aCAmJiByb290UHJvcGVydHlOYW1lLmVuZHNXaXRoKCcuJykgJiYgdmFsaWRhdG9yQ29uZmlnLmFic3RyYWN0Q29udHJvbE9wdGlvbnMgJiYgdmFsaWRhdG9yQ29uZmlnLmFic3RyYWN0Q29udHJvbE9wdGlvbnNbcm9vdFByb3BlcnR5TmFtZS5zdWJzdHJpbmcoMCwgcm9vdFByb3BlcnR5TmFtZS5sZW5ndGggLSAxKV0pXHJcbiAgICAgICAgICAgIGFic3RyYWN0Q29udHJvbE9wdGlvbnNbJ2dsb2JhbCddID0gdmFsaWRhdG9yQ29uZmlnLmFic3RyYWN0Q29udHJvbE9wdGlvbnNbcm9vdFByb3BlcnR5TmFtZS5zdWJzdHJpbmcoMCwgcm9vdFByb3BlcnR5TmFtZS5sZW5ndGggLSAxKV07XHJcblxyXG4gICAgICAgIGNvbnN0IGR5bmFtaWNWYWxpZGF0aW9uID0gKHZhbGlkYXRvckNvbmZpZy5keW5hbWljVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb25Qcm9wZXJ0eU5hbWUgJiYgZW50aXR5T2JqZWN0W3ZhbGlkYXRvckNvbmZpZy5keW5hbWljVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb25Qcm9wZXJ0eU5hbWVdKSA/IGVudGl0eU9iamVjdFt2YWxpZGF0b3JDb25maWcuZHluYW1pY1ZhbGlkYXRpb25Db25maWd1cmF0aW9uUHJvcGVydHlOYW1lXSA6IHZhbGlkYXRpb25Qcm9wcztcclxuICAgICAgICByZXR1cm4geyBpZ25vcmVVbmRlZmluZWRQcm9wczogaWdub3JlVW5kZWZpbmVkUHJvcHMsIGluY2x1ZGVQcm9wczogaW5jbHVkZVByb3BzLCBkeW5hbWljVmFsaWRhdGlvbjogZHluYW1pY1ZhbGlkYXRpb24sIGV4Y2x1ZGVQcm9wczogZXhjbHVkZVByb3BzLCBhYnN0cmFjdENvbnRyb2xPcHRpb25zOiBhYnN0cmFjdENvbnRyb2xPcHRpb25zIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldE9iamVjdEZvclByb3BlcnR5PFQ+KHJvb3RPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogVCB9LCByb290UHJvcGVydHlOYW1lOiBzdHJpbmcsIGFycmF5UHJvcGVydHlOYW1lPzogc3RyaW5nKTogeyBba2V5OiBzdHJpbmddOiBUIH0ge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdDogeyBba2V5OiBzdHJpbmddOiBUIH0gPSB7fTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgcHJvcE5hbWUgaW4gcm9vdE9iamVjdCkge1xyXG4gICAgICAgICAgICBpZiAoIXByb3BOYW1lLnN0YXJ0c1dpdGgocm9vdFByb3BlcnR5TmFtZSkgJiYgKCFhcnJheVByb3BlcnR5TmFtZSB8fCAhcHJvcE5hbWUuc3RhcnRzV2l0aChhcnJheVByb3BlcnR5TmFtZSkpKVxyXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBsZXQgc3BsaXRQcm9wID0gcHJvcE5hbWUuc3BsaXQoXCIuXCIsIDIpWzFdO1xyXG4gICAgICAgICAgICBpZiAoIXNwbGl0UHJvcClcclxuICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgcmVzdWx0W3NwbGl0UHJvcF0gPSByb290T2JqZWN0W3Byb3BOYW1lXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRQcm9wcyhwcm9wZXJ0aWVzOiBzdHJpbmdbXSwgcm9vdFByb3BlcnR5TmFtZTogc3RyaW5nLCBpc0lnbm9yZVByb3A6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGxldCBwcm9wczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBwcm9wIG9mIHByb3BlcnRpZXMpIHtcclxuICAgICAgICAgICAgaWYgKHByb3AuaW5kZXhPZihyb290UHJvcGVydHlOYW1lKSAhPSAtMSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHNwbGl0UHJvcHMgPSBwcm9wLnNwbGl0KFwiLlwiKTtcclxuICAgICAgICAgICAgICAgIGlmIChzcGxpdFByb3BzLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMucHVzaChzcGxpdFByb3BzWzFdKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3BsaXRQcm9wcy5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3BsaXRQcm9wcy5zcGxpY2UoMCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMucHVzaChzcGxpdFByb3BzLmpvaW4oXCIuXCIpKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc0lnbm9yZVByb3AgJiYgcHJvcGVydGllcy5maWx0ZXIoeCA9PiB4ID09IHJvb3RQcm9wZXJ0eU5hbWUucmVwbGFjZSgnLicsICcnKSkubGVuZ3RoID09IDEpXHJcbiAgICAgICAgICAgIHByb3BzLnB1c2goJzpzZWxmOicpO1xyXG5cclxuICAgICAgICByZXR1cm4gcHJvcHM7XHJcbiAgICB9XHJcblxyXG4gICAgZm9ybUdyb3VwPFQ+KG1vZGVsOiBUeXBlPFQ+IHwgeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgZW50aXR5T2JqZWN0PzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uPzogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKTogUnhGb3JtR3JvdXAgfCBGb3JtR3JvdXAgfCBBcHBGb3JtR3JvdXA8VD4ge1xyXG4gICAgICAgIGxldCBqc29uID0gdGhpcy5nZXRPYmplY3QobW9kZWwsIGVudGl0eU9iamVjdCwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKTtcclxuICAgICAgICBtb2RlbCA9IGpzb24ubW9kZWw7XHJcbiAgICAgICAgZW50aXR5T2JqZWN0ID0ganNvbi5lbnRpdHlPYmplY3Q7XHJcbiAgICAgICAgaWYgKGVudGl0eU9iamVjdC5jb25zdHJ1Y3RvciAhPSBtb2RlbCAmJiAhdGhpcy5pc0dyb3VwQ2FsbGVkKSB7XHJcbiAgICAgICAgICAgIGVudGl0eU9iamVjdCA9IGpzb24uZW50aXR5T2JqZWN0ID0gdGhpcy51cGRhdGVPYmplY3QobW9kZWwsIGpzb24uZW50aXR5T2JqZWN0LCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24gPSBqc29uLmZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbjtcclxuICAgICAgICBpZiAoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKVxyXG4gICAgICAgICAgICB0aGlzLmV4dHJhY3RFeHByZXNzaW9ucyhmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgIGxldCBpbnN0YW5jZUNvbnRhaW5lcjogSW5zdGFuY2VDb250YWluZXIgPSB0aGlzLmdldEluc3RhbmNlQ29udGFpbmVyKG1vZGVsLCBlbnRpdHlPYmplY3QpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tPYmplY3RQcm9wQWRkaXRpb25hbFZhbGlkYXRpb24oaW5zdGFuY2VDb250YWluZXIsIGVudGl0eU9iamVjdCwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKTtcclxuICAgICAgICBsZXQgZm9ybUdyb3VwT2JqZWN0ID0ge307XHJcbiAgICAgICAgbGV0IGV4dGVuZGVkUHJvcGVydGllcyA9IHt9O1xyXG4gICAgICAgIGxldCBmb3JtQ2hpbGRHcm91cCA9IHVuZGVmaW5lZDtcclxuICAgICAgICBsZXQgZm9ybUFycmF5R3JvdXAgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdmFyIGFkZGl0aW9uYWxWYWxpZGF0aW9uczogeyBba2V5OiBzdHJpbmddOiBQcm9wVmFsaWRhdGlvbkNvbmZpZyB9ID0ge307XHJcbiAgICAgICAgaW5zdGFuY2VDb250YWluZXIucHJvcGVydGllcy5mb3JFYWNoKHByb3BlcnR5ID0+IHtcclxuICAgICAgICAgICAgbGV0IGlzSW5jbHVkZVByb3AgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmV4Y2x1ZGVQcm9wcyAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uZXhjbHVkZVByb3BzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgICAgICAgaXNJbmNsdWRlUHJvcCA9IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5leGNsdWRlUHJvcHMuaW5kZXhPZihwcm9wZXJ0eS5uYW1lKSA9PSAtMVxyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5keW5hbWljVmFsaWRhdGlvbilcclxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsVmFsaWRhdGlvbnMgPSBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uZHluYW1pY1ZhbGlkYXRpb247XHJcbiAgICAgICAgICAgICAgICBpZiAoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmluY2x1ZGVQcm9wcyAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uaW5jbHVkZVByb3BzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgICAgICAgaXNJbmNsdWRlUHJvcCA9IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5pbmNsdWRlUHJvcHMuaW5kZXhPZihwcm9wZXJ0eS5uYW1lKSAhPSAtMVxyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5pZ25vcmVVbmRlZmluZWRQcm9wcyAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uaWdub3JlVW5kZWZpbmVkUHJvcHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlzSW5jbHVkZVByb3AgPSAhKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PSBQUk9QRVJUWSAmJiAhUmVnZXhWYWxpZGF0b3IuaXNOb3RCbGFuayhqc29uLmVudGl0eU9iamVjdFtwcm9wZXJ0eS5uYW1lXSkgJiYgKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5pZ25vcmVVbmRlZmluZWRQcm9wcy5pbmRleE9mKHByb3BlcnR5Lm5hbWUpICE9PSAtMSB8fCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uaWdub3JlVW5kZWZpbmVkUHJvcHMuaW5kZXhPZihcIjpzZWxmOlwiKSAhPT0gLTEpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5pZ25vcmUpXHJcbiAgICAgICAgICAgICAgICBpc0luY2x1ZGVQcm9wID0gIXByb3BlcnR5Lmlnbm9yZS5jYWxsKGpzb24uZW50aXR5T2JqZWN0LCBqc29uLmVudGl0eU9iamVjdCk7XHJcbiAgICAgICAgICAgIGlmIChpc0luY2x1ZGVQcm9wKSB7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb3BlcnR5LnByb3BlcnR5VHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgUFJPUEVSVFk6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGVudGl0eU9iamVjdFtwcm9wZXJ0eS5uYW1lXSBpbnN0YW5jZW9mIEZvcm1Db250cm9sIHx8IGVudGl0eU9iamVjdFtwcm9wZXJ0eS5uYW1lXSBpbnN0YW5jZW9mIFJ4Rm9ybUNvbnRyb2wpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJvcGVydHlWYWxpZGF0b3JzID0gaW5zdGFuY2VDb250YWluZXIucHJvcGVydHlBbm5vdGF0aW9ucy5maWx0ZXIodCA9PiB0LnByb3BlcnR5TmFtZSA9PSBwcm9wZXJ0eS5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzYW5pdGl6ZVZhbHVlID0gc3VwZXIuc2FuaXRpemVWYWx1ZShpbnN0YW5jZUNvbnRhaW5lciwgcHJvcGVydHkubmFtZSwgc3VwZXIuZ2V0RGVmYXVsdFZhbHVlKHByb3BlcnR5LCBlbnRpdHlPYmplY3RbcHJvcGVydHkubmFtZV0sIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiksIGpzb24uZW50aXR5T2JqZWN0LCBPYmplY3QuYXNzaWduKHt9LCBqc29uLmVudGl0eU9iamVjdCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudGl0eU9iamVjdFtwcm9wZXJ0eS5uYW1lXSA9PT0gdW5kZWZpbmVkICYmIHNhbml0aXplVmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BlcnR5Lm5hbWVdID0gc2FuaXRpemVWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWxpZGF0b3JzID0gdGhpcy5hZGRGb3JtQ29udHJvbChwcm9wZXJ0eSwgcHJvcGVydHlWYWxpZGF0b3JzLCBhZGRpdGlvbmFsVmFsaWRhdGlvbnNbcHJvcGVydHkubmFtZV0sIGluc3RhbmNlQ29udGFpbmVyLCBlbnRpdHlPYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFic3RyYWN0Q29udHJvbE9wdGlvbnM6IEFic3RyYWN0Q29udHJvbE9wdGlvbnMgPSB7IHZhbGlkYXRvcnM6IHZhbGlkYXRvcnMsIGFzeW5jVmFsaWRhdG9yczogdGhpcy5hZGRBc3luY1ZhbGlkYXRpb24ocHJvcGVydHksIHByb3BlcnR5VmFsaWRhdG9ycywgYWRkaXRpb25hbFZhbGlkYXRpb25zW3Byb3BlcnR5Lm5hbWVdKSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzdHJhY3RDb250cm9sT3B0aW9ucyA9IHRoaXMuZ2V0QWJzdHJhY3RDb250cm9sT3B0aW9ucyhwcm9wZXJ0eS5uYW1lLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIGFic3RyYWN0Q29udHJvbE9wdGlvbnMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkudXBkYXRlT24gJiYgIWFic3RyYWN0Q29udHJvbE9wdGlvbnMudXBkYXRlT24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzdHJhY3RDb250cm9sT3B0aW9ucy51cGRhdGVPbiA9IHByb3BlcnR5LnVwZGF0ZU9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwT2JqZWN0W3Byb3BlcnR5Lm5hbWVdID0gbmV3IFJ4Rm9ybUNvbnRyb2woc2FuaXRpemVWYWx1ZSwgYWJzdHJhY3RDb250cm9sT3B0aW9ucywgW10sIGpzb24uZW50aXR5T2JqZWN0LCBPYmplY3QuYXNzaWduKHt9LCBqc29uLmVudGl0eU9iamVjdCksIHByb3BlcnR5Lm5hbWUsIGluc3RhbmNlQ29udGFpbmVyLnNhbml0aXplcnNbcHJvcGVydHkubmFtZV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc05lc3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cE9iamVjdFtwcm9wZXJ0eS5uYW1lXSA9IHN1cGVyLmdldERlZmF1bHRWYWx1ZShwcm9wZXJ0eSwgZW50aXR5T2JqZWN0W3Byb3BlcnR5Lm5hbWVdLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlbmRlZFByb3BlcnRpZXNbcHJvcGVydHkubmFtZV0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIE9CSkVDVF9QUk9QRVJUWTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9iamVjdFZhbHVlID0gZW50aXR5T2JqZWN0W3Byb3BlcnR5Lm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0VmFsdWUgJiYgb2JqZWN0VmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgJiYgIShvYmplY3RWYWx1ZSBpbnN0YW5jZW9mIEZvcm1Hcm91cCB8fCBvYmplY3RWYWx1ZSBpbnN0YW5jZW9mIFJ4Rm9ybUdyb3VwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc05lc3RlZEJpbmRpbmcgPSB0aGlzLmlzTmVzdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZUNvbnRhaW5lciAmJiBpbnN0YW5jZUNvbnRhaW5lci5jb25kaXRpb25hbE9iamVjdFByb3BzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uYWxPYmplY3RQcm9wcyA9IGluc3RhbmNlQ29udGFpbmVyLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMuZmlsdGVyKHQgPT4gdC5vYmplY3RQcm9wTmFtZSA9PSBwcm9wZXJ0eS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uYWxWYWxpZGF0aW9uSW5zdGFuY2UgJiYgdGhpcy5jb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZS5jb25kaXRpb25hbE9iamVjdFByb3BzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlckNvbmZpZ3VyYXRpb25Db25kaXRpb25hbE9iamVjdFByb3BzID0gdGhpcy5jb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZS5jb25kaXRpb25hbE9iamVjdFByb3BzLmZpbHRlcih0ID0+IHQub2JqZWN0UHJvcE5hbWUgPT0gcHJvcGVydHkubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5mb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcGVydHkubmFtZV0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yID0gdGhpcy5mb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcGVydHkubmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgb2JqZWN0VmFsaWRhdGlvbkNvbmZpZyA9IHRoaXMuZ2V0VmFsaWRhdG9yQ29uZmlnKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgb2JqZWN0VmFsdWUsIGAke3Byb3BlcnR5Lm5hbWV9LmApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZW50aXR5ID0gcHJvcGVydHkuZW50aXR5UHJvdmlkZXIgPyBwcm9wZXJ0eS5lbnRpdHlQcm92aWRlci5jYWxsKGVudGl0eU9iamVjdCkgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBPYmplY3RbcHJvcGVydHkubmFtZV0gPSB0aGlzLmZvcm1Hcm91cChlbnRpdHkgfHwgcHJvcGVydHkuZW50aXR5IHx8IHRoaXMuZ2V0RW50aXR5KG9iamVjdFZhbHVlLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIHByb3BlcnR5Lm5hbWUsIHRydWUpLCBvYmplY3RWYWx1ZSwgb2JqZWN0VmFsaWRhdGlvbkNvbmZpZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlckNvbmZpZ3VyYXRpb25Db25kaXRpb25hbE9iamVjdFByb3BzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTmVzdGVkQmluZGluZyA9IHRoaXMuaXNOZXN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvYmplY3RWYWx1ZSBpbnN0YW5jZW9mIEZvcm1Hcm91cCB8fCBvYmplY3RWYWx1ZSBpbnN0YW5jZW9mIFJ4Rm9ybUdyb3VwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwT2JqZWN0W3Byb3BlcnR5Lm5hbWVdID0gb2JqZWN0VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQVJSQVlfUFJPUEVSVFk6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnJheU9iamVjdFZhbHVlID0gZW50aXR5T2JqZWN0W3Byb3BlcnR5Lm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyYXlPYmplY3RWYWx1ZSAmJiBhcnJheU9iamVjdFZhbHVlIGluc3RhbmNlb2YgQXJyYXkgJiYgIShhcnJheU9iamVjdFZhbHVlIGluc3RhbmNlb2YgRm9ybUFycmF5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc05lc3RlZEJpbmRpbmcgPSB0aGlzLmlzTmVzdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JtQXJyYXlHcm91cCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbnRpdHkgPSBwcm9wZXJ0eS5lbnRpdHlQcm92aWRlciA/IHByb3BlcnR5LmVudGl0eVByb3ZpZGVyLmNhbGwoZW50aXR5T2JqZWN0KSA6IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmplY3RWYWxpZGF0aW9uQ29uZmlnID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHN1Yk9iamVjdCBvZiBhcnJheU9iamVjdFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlQ29udGFpbmVyICYmIGluc3RhbmNlQ29udGFpbmVyLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uYWxPYmplY3RQcm9wcyA9IGluc3RhbmNlQ29udGFpbmVyLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMuZmlsdGVyKHQgPT4gdC5vYmplY3RQcm9wTmFtZSA9PSBwcm9wZXJ0eS5uYW1lICYmIHQuYXJyYXlJbmRleCA9PSBpbmRleClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZSAmJiB0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlckNvbmZpZ3VyYXRpb25Db25kaXRpb25hbE9iamVjdFByb3BzID0gdGhpcy5jb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZS5jb25kaXRpb25hbE9iamVjdFByb3BzLmZpbHRlcih0ID0+IHQub2JqZWN0UHJvcE5hbWUgPT0gcHJvcGVydHkubmFtZSAmJiB0LmFycmF5SW5kZXggPT0gaW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wZXJ0eS5uYW1lXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yID0gdGhpcy5mb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcGVydHkubmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0VmFsaWRhdGlvbkNvbmZpZyA9IHRoaXMuZ2V0VmFsaWRhdG9yQ29uZmlnKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgc3ViT2JqZWN0LCBgJHtwcm9wZXJ0eS5uYW1lfS5gLCBgJHtwcm9wZXJ0eS5uYW1lfVske2luZGV4fV0uYClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQXJyYXlHcm91cC5wdXNoKHRoaXMuZm9ybUdyb3VwKGVudGl0eSB8fCBwcm9wZXJ0eS5lbnRpdHkgfHwgdGhpcy5nZXRFbnRpdHkoc3ViT2JqZWN0LCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIHByb3BlcnR5Lm5hbWUsIHRydWUpLCBzdWJPYmplY3QsIG9iamVjdFZhbGlkYXRpb25Db25maWcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uYWxPYmplY3RQcm9wcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlckNvbmZpZ3VyYXRpb25Db25kaXRpb25hbE9iamVjdFByb3BzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWJzdHJhY3RDb250cm9sT3B0aW9ucyA9IHRoaXMuZ2V0QWJzdHJhY3RDb250cm9sT3B0aW9ucyhwcm9wZXJ0eS5uYW1lLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24gLCB7IH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBPYmplY3RbcHJvcGVydHkubmFtZV0gPSBuZXcgUnhGb3JtQXJyYXkoYXJyYXlPYmplY3RWYWx1ZSwgZm9ybUFycmF5R3JvdXAsIGFic3RyYWN0Q29udHJvbE9wdGlvbnMsIG51bGwsIHByb3BlcnR5LmFycmF5Q29uZmlnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSZWFjdGl2ZUZvcm1Db25maWcuYXV0b0luc3RhbmNlUHVzaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5T2JqZWN0VmFsdWUucHVzaCA9IChpbnN0YW5jZTogYW55W10pOiBudW1iZXIgPT4geyBsZXQgZm9ybUdyb3VwID0gdGhpcy5mb3JtR3JvdXAoaW5zdGFuY2UuY29uc3RydWN0b3IsIGluc3RhbmNlLCBvYmplY3RWYWxpZGF0aW9uQ29uZmlnKTsgZm9ybUdyb3VwT2JqZWN0W3Byb3BlcnR5Lm5hbWVdLnB1c2goZm9ybUdyb3VwLCB7IGlzQWRkZWRJbnN0YW5jZTogdHJ1ZSB9KTsgcmV0dXJuIDA7IH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlPYmplY3RWYWx1ZS5zcGxpY2UgPSAoc3RhcnQsIGRlbGV0ZUNvdW50KTogYW55W10gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZW5kID0gKHN0YXJ0ICsgZGVsZXRlQ291bnQpIC0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBPYmplY3RbcHJvcGVydHkubmFtZV0ucmVtb3ZlQXQoaSwgeyBpc1JlbW92ZWRJbnN0YW5jZTogdHJ1ZSB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc05lc3RlZEJpbmRpbmcgPSB0aGlzLmlzTmVzdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJyYXlPYmplY3RWYWx1ZSBpbnN0YW5jZW9mIEZvcm1BcnJheSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cE9iamVjdFtwcm9wZXJ0eS5uYW1lXSA9IGFycmF5T2JqZWN0VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb3BlcnR5LmFycmF5Q29uZmlnICYmIHByb3BlcnR5LmFycmF5Q29uZmlnLmNyZWF0ZUJsYW5rKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwT2JqZWN0W3Byb3BlcnR5Lm5hbWVdID0gbmV3IFJ4Rm9ybUFycmF5KFtdLCBbXSwgbnVsbCwgbnVsbCwgcHJvcGVydHkuYXJyYXlDb25maWcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzTmVzdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uYWxWYWxpZGF0aW9uSW5zdGFuY2UgPSB7fTtcclxuICAgICAgICAgICAgdGhpcy5idWlsZGVyQ29uZmlndXJhdGlvbkNvbmRpdGlvbmFsT2JqZWN0UHJvcHMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGFic3RyYWN0Q29udHJvbE9wdGlvbnM6IEFic3RyYWN0Q29udHJvbE9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtdLFxyXG4gICAgICAgICAgICBhc3luY1ZhbGlkYXRvcnM6IFtdLFxyXG4gICAgICAgICAgICB1cGRhdGVPbjogZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uICYmIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5hYnN0cmFjdENvbnRyb2xPcHRpb25zICYmIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5hYnN0cmFjdENvbnRyb2xPcHRpb25zWydnbG9iYWwnXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5hYnN0cmFjdENvbnRyb2xPcHRpb25zWydnbG9iYWwnXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICBhYnN0cmFjdENvbnRyb2xPcHRpb25zID0gdGhpcy5nZXRBYnN0cmFjdENvbnRyb2xPcHRpb25zKFwiZ2xvYmFsXCIsIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgYWJzdHJhY3RDb250cm9sT3B0aW9ucyk7XHJcbiAgICAgICAgbGV0IGZvcm1Hcm91cCA9IG5ldyBSeEZvcm1Hcm91cChqc29uLm1vZGVsLCBqc29uLmVudGl0eU9iamVjdCwgZm9ybUdyb3VwT2JqZWN0LCBhYnN0cmFjdENvbnRyb2xPcHRpb25zKTtcclxuICAgICAgICBpZiAoZGVmYXVsdENvbnRhaW5lci5pc0V4cGVyaW1lbnRhbCkge1xyXG4gICAgICAgICAgICBqc29uLmVudGl0eU9iamVjdFtcImZvcm1Hcm91cFwiXSA9IGZvcm1Hcm91cDtcclxuICAgICAgICAgICAgdGhpcy5vdmVycmlkZVByb3BlcnRpZXMoZm9ybUdyb3VwLCBqc29uLmVudGl0eU9iamVjdCwgZXh0ZW5kZWRQcm9wZXJ0aWVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzTmVzdGVkQmluZGluZyAmJiAhdGhpcy5pc0dyb3VwQ2FsbGVkKVxyXG4gICAgICAgICAgICBmb3JtR3JvdXAucmVmcmVzaERpc2FibGUoKTtcclxuICAgICAgICByZXR1cm4gZm9ybUdyb3VwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG92ZXJyaWRlUHJvcGVydGllcyhmb3JtR3JvdXA6IFJ4Rm9ybUdyb3VwLCBlbnRpdHlPYmplY3Q6IGFueSwgcHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0pIHtcclxuICAgICAgICBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKS5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm92ZXJyaWRlUHJvcChlbnRpdHlPYmplY3QsIHQsIGZvcm1Hcm91cCk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0QWJzdHJhY3RDb250cm9sT3B0aW9ucyhuYW1lOiBzdHJpbmcsIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbjogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBhYnN0cmFjdENvbnRyb2xPcHRpb25zOiBBYnN0cmFjdENvbnRyb2xPcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uYWJzdHJhY3RDb250cm9sT3B0aW9ucyAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uYWJzdHJhY3RDb250cm9sT3B0aW9uc1tuYW1lXSlcclxuICAgICAgICAgICAgYWJzdHJhY3RDb250cm9sT3B0aW9ucy51cGRhdGVPbiA9IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5hYnN0cmFjdENvbnRyb2xPcHRpb25zW25hbWVdO1xyXG5cclxuICAgICAgICBjb25zdCBjb250cm9sT3B0aW9ucyA9IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiA/IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5iYXNlQWJzdHJhY3RDb250cm9sT3B0aW9ucyA6IG51bGw7XHJcbiAgICAgICAgaWYgKGNvbnRyb2xPcHRpb25zICYmIGNvbnRyb2xPcHRpb25zW25hbWVdKSB7XHJcbiAgICAgICAgICAgIGlmIChjb250cm9sT3B0aW9uc1tuYW1lXS51cGRhdGVPbilcclxuICAgICAgICAgICAgICAgIGFic3RyYWN0Q29udHJvbE9wdGlvbnMudXBkYXRlT24gPSBjb250cm9sT3B0aW9uc1tuYW1lXS51cGRhdGVPbjtcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2xPcHRpb25zW25hbWVdLnZhbGlkYXRvcnMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbnRyb2xPcHRpb25zW25hbWVdLnZhbGlkYXRvcnMpKVxyXG4gICAgICAgICAgICAgICAgICAgICg8VmFsaWRhdG9yRm5bXT5jb250cm9sT3B0aW9uc1tuYW1lXS52YWxpZGF0b3JzKS5mb3JFYWNoKHZhbGlkYXRvciA9PiAoPFZhbGlkYXRvckZuW10+YWJzdHJhY3RDb250cm9sT3B0aW9ucy52YWxpZGF0b3JzKS5wdXNoKHZhbGlkYXRvcikpXHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgKDxWYWxpZGF0b3JGbltdPmFic3RyYWN0Q29udHJvbE9wdGlvbnMudmFsaWRhdG9ycykucHVzaCg8VmFsaWRhdG9yRm4+Y29udHJvbE9wdGlvbnNbbmFtZV0udmFsaWRhdG9ycyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjb250cm9sT3B0aW9uc1tuYW1lXS5hc3luY1ZhbGlkYXRvcnMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbnRyb2xPcHRpb25zW25hbWVdLmFzeW5jVmFsaWRhdG9ycykpXHJcbiAgICAgICAgICAgICAgICAgICAgKDxWYWxpZGF0b3JGbltdPmNvbnRyb2xPcHRpb25zW25hbWVdLmFzeW5jVmFsaWRhdG9ycykuZm9yRWFjaCh2YWxpZGF0b3IgPT4gKDxWYWxpZGF0b3JGbltdPmFic3RyYWN0Q29udHJvbE9wdGlvbnMuYXN5bmNWYWxpZGF0b3JzKS5wdXNoKHZhbGlkYXRvcikpXHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgKDxWYWxpZGF0b3JGbltdPmFic3RyYWN0Q29udHJvbE9wdGlvbnMuYXN5bmNWYWxpZGF0b3JzKS5wdXNoKDxWYWxpZGF0b3JGbj5jb250cm9sT3B0aW9uc1tuYW1lXS52YWxpZGF0b3JzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYWJzdHJhY3RDb250cm9sT3B0aW9ucztcclxuICAgIH1cclxuICAgIHByaXZhdGUgb3ZlcnJpZGVQcm9wKGVudGl0eU9iamVjdDogYW55LCBwcm9wTmFtZTogc3RyaW5nLCBmb3JtR3JvdXA6IFJ4Rm9ybUdyb3VwKSB7XHJcbiAgICAgICAgbGV0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5nZXRQcm90b3R5cGVPZihlbnRpdHlPYmplY3QpLCBwcm9wTmFtZSk7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gZW50aXR5T2JqZWN0W3Byb3BOYW1lXTtcclxuICAgICAgICBsZXQgb2xkVmFsdWUgPSBudWxsO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbnRpdHlPYmplY3QsIHByb3BOYW1lLCB7XHJcbiAgICAgICAgICAgIGdldDogKCkgPT4geyByZXR1cm4gZGVzY3JpcHRvciA/IGRlc2NyaXB0b3IuZ2V0LmNhbGwoZW50aXR5T2JqZWN0KSA6IHZhbHVlIH0sXHJcbiAgICAgICAgICAgIHNldDogKHYpID0+IHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gdjtcclxuICAgICAgICAgICAgICAgIGlmIChvbGRWYWx1ZSAhPSB2KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0LmNhbGwoZW50aXR5T2JqZWN0LCB2KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZvcm1Hcm91cC5jaGFuZ2luZyAmJiBmb3JtR3JvdXAuY29udHJvbHNbcHJvcE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1twcm9wTmFtZV0uc2V0VmFsdWUodik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgb2xkVmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -15,9 +15,9 @@ export class TypedFormBuilder {
|
|
|
15
15
|
return this.formBuilder.group(controlsConfig, options);
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
|
-
/** @nocollapse */ /** @nocollapse */ TypedFormBuilder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
19
|
-
/** @nocollapse */ /** @nocollapse */ TypedFormBuilder.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.
|
|
20
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
18
|
+
/** @nocollapse */ /** @nocollapse */ TypedFormBuilder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: TypedFormBuilder, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
19
|
+
/** @nocollapse */ /** @nocollapse */ TypedFormBuilder.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: TypedFormBuilder });
|
|
20
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: TypedFormBuilder, decorators: [{
|
|
21
21
|
type: Injectable
|
|
22
22
|
}], ctorParameters: function () { return []; } });
|
|
23
23
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWQtZm9ybS1idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvZm9ybS12YWxpZGF0b3JzL3NlcnZpY2VzL3R5cGVkLWZvcm0tYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFxQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFJcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFM0MsTUFBTSxPQUFPLGdCQUFnQjtJQUd6QjtRQUNJLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVELEtBQUssQ0FBSSxjQUVSLEVBQUUsT0FFSztRQUNKLElBQUksWUFBWSxHQUFZLE9BQU8sSUFBUyxFQUFFLENBQUM7UUFDL0MsSUFBSSxPQUFPLGNBQWMsSUFBSSxlQUFlO1lBQ3hDLE9BQU8sQ0FBQyxDQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQWtCLENBQUMsQ0FBQyxDQUFlLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUUsQ0FBQyxhQUFrQixDQUFDO1FBQ3ZSLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFELENBQUM7O21KQWpCUSxnQkFBZ0I7dUpBQWhCLGdCQUFnQjsyRkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgQWJzdHJhY3RDb250cm9sT3B0aW9ucyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBSeEZvcm1CdWlsZGVyIH0gZnJvbSBcIi4vcngtZm9ybS1idWlsZGVyXCI7XHJcbmltcG9ydCB7IEZVTkNUSU9OX1NUUklORyB9IGZyb20gXCIuLi9jb25zdC9hcHAuY29uc3RcIlxyXG5pbXBvcnQgeyBPcHRpb25zIH0gZnJvbSBcIi4uL21vZGVscy9pbnRlcmZhY2Uvb3B0aW9uc1wiXHJcbmltcG9ydCB7IFJ4Rm9ybUdyb3VwIH0gZnJvbSBcIi4vcngtZm9ybS1ncm91cFwiO1xyXG5pbXBvcnQgeyBJRm9ybUdyb3VwIH0gZnJvbSBcIi4uL21vZGVscy9pbnRlcmZhY2UvaS1mb3JtLWdyb3VwXCI7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBUeXBlZEZvcm1CdWlsZGVyIHtcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyO1xyXG4gICAgcHJpdmF0ZSByeEZvcm1CdWlsZGVyOiBSeEZvcm1CdWlsZGVyO1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtQnVpbGRlciA9IG5ldyBGb3JtQnVpbGRlcigpO1xyXG4gICAgICAgIHRoaXMucnhGb3JtQnVpbGRlciA9IG5ldyBSeEZvcm1CdWlsZGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ3JvdXA8VD4oY29udHJvbHNDb25maWc6IHtcclxuICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XHJcbiAgICB9LCBvcHRpb25zPzogQWJzdHJhY3RDb250cm9sT3B0aW9ucyB8IHtcclxuICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XHJcbiAgICB9IHwgbnVsbCk6IEZvcm1Hcm91cCB8IFQge1xyXG4gICAgICAgIGxldCBwYXJhbU9wdGlvbnMgPSA8T3B0aW9ucz5vcHRpb25zIHx8IDxhbnk+e307XHJcbiAgICAgICAgaWYgKHR5cGVvZiBjb250cm9sc0NvbmZpZyA9PSBGVU5DVElPTl9TVFJJTkcpXHJcbiAgICAgICAgICAgIHJldHVybiAhKHBhcmFtT3B0aW9ucyAmJiBwYXJhbU9wdGlvbnMuaXNJbnN0YW5jZSkgPyB0aGlzLnJ4Rm9ybUJ1aWxkZXIuZm9ybUdyb3VwKGNvbnRyb2xzQ29uZmlnLCBwYXJhbU9wdGlvbnMuZGF0YSwgcGFyYW1PcHRpb25zLmNvbmZpZykgYXMgSUZvcm1Hcm91cDxUPiA6ICg8UnhGb3JtR3JvdXA+dGhpcy5yeEZvcm1CdWlsZGVyLmZvcm1Hcm91cChjb250cm9sc0NvbmZpZywgcGFyYW1PcHRpb25zLmRhdGEsIHBhcmFtT3B0aW9ucy5jb25maWcpKS5tb2RlbEluc3RhbmNlIGFzIFQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoY29udHJvbHNDb25maWcsb3B0aW9ucyk7XHJcbiAgICB9XHJcbn0iXX0=
|
|
@@ -23,9 +23,9 @@ export class VdEditorDirective extends CdkPortal {
|
|
|
23
23
|
super(templateRef, viewContainerRef);
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
|
-
/** @nocollapse */ /** @nocollapse */ VdEditorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
27
|
-
/** @nocollapse */ /** @nocollapse */ VdEditorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.
|
|
28
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
26
|
+
/** @nocollapse */ /** @nocollapse */ VdEditorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdEditorDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
27
|
+
/** @nocollapse */ /** @nocollapse */ VdEditorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.0", type: VdEditorDirective, selector: "[vd-editor]ng-template", usesInheritance: true, ngImport: i0 });
|
|
28
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdEditorDirective, decorators: [{
|
|
29
29
|
type: Directive,
|
|
30
30
|
args: [{ selector: '[vd-editor]ng-template' }]
|
|
31
31
|
}], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; } });
|
|
@@ -37,9 +37,9 @@ export class VdCodeDirective extends CdkPortal {
|
|
|
37
37
|
super(templateRef, viewContainerRef);
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
|
-
/** @nocollapse */ /** @nocollapse */ VdCodeDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
41
|
-
/** @nocollapse */ /** @nocollapse */ VdCodeDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.
|
|
42
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
40
|
+
/** @nocollapse */ /** @nocollapse */ VdCodeDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdCodeDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
41
|
+
/** @nocollapse */ /** @nocollapse */ VdCodeDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.0", type: VdCodeDirective, selector: "[vd-code]ng-template", usesInheritance: true, ngImport: i0 });
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdCodeDirective, decorators: [{
|
|
43
43
|
type: Directive,
|
|
44
44
|
args: [{ selector: '[vd-code]ng-template' }]
|
|
45
45
|
}], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; } });
|
|
@@ -51,9 +51,9 @@ export class VdFileDirective extends CdkPortal {
|
|
|
51
51
|
super(templateRef, viewContainerRef);
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
-
/** @nocollapse */ /** @nocollapse */ VdFileDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
55
|
-
/** @nocollapse */ /** @nocollapse */ VdFileDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.
|
|
56
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
54
|
+
/** @nocollapse */ /** @nocollapse */ VdFileDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdFileDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
55
|
+
/** @nocollapse */ /** @nocollapse */ VdFileDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.0", type: VdFileDirective, selector: "[vd-file]ng-template", usesInheritance: true, ngImport: i0 });
|
|
56
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdFileDirective, decorators: [{
|
|
57
57
|
type: Directive,
|
|
58
58
|
args: [{ selector: '[vd-file]ng-template' }]
|
|
59
59
|
}], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; } });
|
|
@@ -65,9 +65,9 @@ export class VdCustomDirective extends CdkPortal {
|
|
|
65
65
|
super(templateRef, viewContainerRef);
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
|
-
/** @nocollapse */ /** @nocollapse */ VdCustomDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
69
|
-
/** @nocollapse */ /** @nocollapse */ VdCustomDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.
|
|
70
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
68
|
+
/** @nocollapse */ /** @nocollapse */ VdCustomDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdCustomDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
69
|
+
/** @nocollapse */ /** @nocollapse */ VdCustomDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.0", type: VdCustomDirective, selector: "[vd-custom]ng-template", usesInheritance: true, ngImport: i0 });
|
|
70
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdCustomDirective, decorators: [{
|
|
71
71
|
type: Directive,
|
|
72
72
|
args: [{ selector: '[vd-custom]ng-template' }]
|
|
73
73
|
}], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; } });
|
|
@@ -104,9 +104,9 @@ export class VdGenericFormComponent {
|
|
|
104
104
|
});
|
|
105
105
|
}
|
|
106
106
|
}
|
|
107
|
-
/** @nocollapse */ /** @nocollapse */ VdGenericFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
108
|
-
/** @nocollapse */ /** @nocollapse */ VdGenericFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: VdGenericFormComponent, selector: "vd-generic-form", inputs: { formGroup: "formGroup", fieldGroups: "fieldGroups", groupName: "groupName" }, queries: [{ propertyName: "editorTemplate", first: true, predicate: VdEditorDirective, descendants: true }, { propertyName: "codeTemplate", first: true, predicate: VdCodeDirective, descendants: true }, { propertyName: "fileTemplate", first: true, predicate: VdFileDirective, descendants: true }, { propertyName: "customTemplate", first: true, predicate: VdCustomDirective, descendants: true }], ngImport: i0, template: "<div *ngIf=\"formGroup && fieldRows\" [formGroup]=\"formGroup\">\r\n <!-- #region Fields -->\r\n <div layout-gt-sm=\"row\" layout=\"column\" *ngFor=\"let fields of fieldRows\">\r\n <ng-container *ngFor=\"let field of fields\" [ngSwitch]=\"field.type\">\r\n <!-- #region Error handling -->\r\n <ng-template #fieldErrors>\r\n <div *ngFor=\"let errorMessage of formGroup.controls[field.name]['errorMessages']\">{{errorMessage}}</div>\r\n </ng-template>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Text input -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.Text\" [attr.flex]=\"field.flex||0\" layout-margin appearance=\"outline\">\r\n <mat-label>{{field.header}}</mat-label>\r\n <input [type]=\"field.inputType\" [minlength]=\"field.minLength||null\" [maxlength]=\"field.maxLength||null\" matInput [formControlName]=\"field.name\">\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error>\r\n <ng-container *ngTemplateOutlet=\"fieldErrors\"></ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Text area -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.TextArea\" [attr.flex]=\"field.flex||0\" layout-margin appearance=\"outline\">\r\n <mat-label>{{field.header}}</mat-label>\r\n <textarea matInput [formControlName]=\"field.name\" rows=\"field.rows||2\"></textarea>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error>\r\n <ng-container *ngTemplateOutlet=\"fieldErrors\"></ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Enum -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.Enum\" [attr.flex]=\"field.flex||0\" layout-margin appearance=\"outline\">\r\n <mat-label>{{field.header}}</mat-label>\r\n <vd-select [formControlName]=\"field.name\" [enum]=\"field.enumType\" [key]=\"field.optionValue\" [text]=\"field.optionText\" [multiple]=\"field.multiple\" flex></vd-select>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error>\r\n <ng-container *ngTemplateOutlet=\"fieldErrors\"></ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region VdSelect -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.VdSelect\" [attr.flex]=\"field.flex||0\" layout-margin appearance=\"outline\">\r\n <mat-label>{{field.header}}</mat-label>\r\n <vd-select [formControlName]=\"field.name\" [endpoint]=\"field.endpoint\" [projection]=\"field.projection\" [key]=\"field.optionValue\" [text]=\"field.optionText\" [multiple]=\"field.multiple\" flex></vd-select>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error>\r\n <ng-container *ngTemplateOutlet=\"fieldErrors\"></ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region VdChips -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.VdChips\" [attr.flex]=\"field.flex||0\" layout-margin appearance=\"outline\">\r\n <mat-label>{{field.header}}</mat-label>\r\n <vd-chips #vdChip [formControlName]=\"field.name\" [endpoint]=\"field.endpoint\" [searchField]=\"field.searchField\" [projection]=\"field.projection\" [key]=\"field.optionValue\" flex>\r\n <ng-template vd-chip let-chip=\"chip\" *ngIf=\"field.chipTemplate\">\r\n <div [outerHTML]=\"field.chipTemplate(chip)\"></div>\r\n </ng-template>\r\n <ng-template vd-autocomplete-option let-option=\"option\" *ngIf=\"field.autocompleteTemplate\">\r\n <div [outerHTML]=\"field.autocompleteTemplate(option)\"></div>\r\n </ng-template>\r\n </vd-chips>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-hint *ngIf=\"vdChip.emptyResult\" class=\"tc-red-400\" i18n=\"@@noResultsFound\">No results found</mat-hint>\r\n <mat-error>\r\n <ng-container *ngTemplateOutlet=\"fieldErrors\"></ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Select -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.Select\" [attr.flex]=\"field.flex||0\" layout-margin appearance=\"outline\">\r\n <mat-label>{{field.header}}</mat-label>\r\n <mat-select [formControlName]=\"field.name\" [multiple]=\"field.multiple\" flex>\r\n <mat-option *ngFor=\"let option of field.options\" [value]=\"option.id\">{{option.name}}</mat-option>\r\n </mat-select>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error>\r\n <ng-container *ngTemplateOutlet=\"fieldErrors\"></ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Autocomplete -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.Autocomplete\" [attr.flex]=\"field.flex||0\" layout-margin appearance=\"outline\">\r\n <mat-label>{{field.header}}</mat-label>\r\n <input type=\"text\" matInput [formControlName]=\"field.name\" [matAutocomplete]=\"auto\" autocomplete=\"false\">\r\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\">\r\n <mat-option *ngFor=\"let option of autocompleteFilteredOptions[field.name]\" [value]=\"option.id\">\r\n {{option.name}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error>\r\n <ng-container *ngTemplateOutlet=\"fieldErrors\"></ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Date -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.Date\" [attr.flex]=\"field.flex||0\" layout-margin appearance=\"outline\">\r\n <mat-label>{{field.header}}</mat-label>\r\n <input matInput [formControlName]=\"field.name\" autocomplete=\"off\" [matDatepicker]=\"datePicker\">\r\n <mat-datepicker-toggle matSuffix [for]=\"datePicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #datePicker></mat-datepicker>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error>\r\n <ng-container *ngTemplateOutlet=\"fieldErrors\"></ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Checkbox -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <div *ngSwitchCase=\"FormFieldType.Checkbox\" layout-margin appearance=\"outline\" class=\"pad-bottom-xs\">\r\n <mat-checkbox [formControlName]=\"field.name\">{{field.header}}</mat-checkbox>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Editor -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <ng-container *ngSwitchCase=\"FormFieldType.Editor\">\r\n <ng-template *ngIf=\"editorTemplate?.templateRef\" [ngTemplateOutlet]=\"editorTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ field: field, formGroup: formGroup }\"></ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Code -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <ng-container *ngSwitchCase=\"FormFieldType.Code\">\r\n <ng-template *ngIf=\"codeTemplate?.templateRef\" [ngTemplateOutlet]=\"codeTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ field: field, formGroup: formGroup }\"></ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region File -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <ng-container *ngSwitchCase=\"FormFieldType.File\">\r\n <ng-template *ngIf=\"fileTemplate?.templateRef\" [ngTemplateOutlet]=\"fileTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ field: field, formGroup: formGroup }\"></ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Custom -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <ng-container *ngSwitchCase=\"FormFieldType.Custom\">\r\n <ng-template *ngIf=\"customTemplate?.templateRef\" [ngTemplateOutlet]=\"customTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ field: field, formGroup: formGroup }\"></ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </div>\r\n <!-- #endregion -->\r\n</div>", styles: [""], components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.VdSelectComponent, selector: "vd-select", inputs: ["multiple", "disabled", "sorted", "textPrefix", "endpoint", "params", "projection", "enum", "key", "text", "prefix", "options", "filteredOptions", "filterable", "cache", "sortBy", "searchField"], outputs: ["change", "itemChange", "selected", "itemSelected", "launch"] }, { type: i3.VdChipsComponent, selector: "vd-chips", inputs: ["chips", "endpoint", "params", "projection", "path", "key", "searchField", "searchFields", "termMinlength", "limit", "debounce", "default"], outputs: ["initSelect", "selected", "cleared", "launch", "chipFocus"] }, { type: i4.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i7.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { type: i7.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { type: i8.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i10.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i9.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i11.MatFormFieldReadonlyDirective, selector: "mat-form-field" }, { type: i1.MatLabel, selector: "mat-label" }, { type: i12.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i10.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i10.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { type: i10.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i10.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i1.MatError, selector: "mat-error", inputs: ["id"] }, { type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.VdChipDirective, selector: "[vd-chip]ng-template" }, { type: i3.VdAutocompleteOptionDirective, selector: "[vd-autocomplete-option]ng-template" }, { type: i6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i7.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { type: i1.MatSuffix, selector: "[matSuffix]" }] });
|
|
109
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
107
|
+
/** @nocollapse */ /** @nocollapse */ VdGenericFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdGenericFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
108
|
+
/** @nocollapse */ /** @nocollapse */ VdGenericFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: VdGenericFormComponent, selector: "vd-generic-form", inputs: { formGroup: "formGroup", fieldGroups: "fieldGroups", groupName: "groupName" }, queries: [{ propertyName: "editorTemplate", first: true, predicate: VdEditorDirective, descendants: true }, { propertyName: "codeTemplate", first: true, predicate: VdCodeDirective, descendants: true }, { propertyName: "fileTemplate", first: true, predicate: VdFileDirective, descendants: true }, { propertyName: "customTemplate", first: true, predicate: VdCustomDirective, descendants: true }], ngImport: i0, template: "<div *ngIf=\"formGroup && fieldRows\" [formGroup]=\"formGroup\">\r\n <!-- #region Fields -->\r\n <div layout-gt-sm=\"row\" layout=\"column\" *ngFor=\"let fields of fieldRows\">\r\n <ng-container *ngFor=\"let field of fields\" [ngSwitch]=\"field.type\">\r\n <!-- #region Error handling -->\r\n <ng-template #fieldErrors>\r\n <div *ngFor=\"let errorMessage of formGroup.controls[field.name]['errorMessages']\">{{errorMessage}}</div>\r\n </ng-template>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Text input -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.Text\" [attr.flex]=\"field.flex||0\" layout-margin appearance=\"outline\">\r\n <mat-label>{{field.header}}</mat-label>\r\n <input [type]=\"field.inputType\" [minlength]=\"field.minLength||null\" [maxlength]=\"field.maxLength||null\" matInput [formControlName]=\"field.name\">\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error>\r\n <ng-container *ngTemplateOutlet=\"fieldErrors\"></ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Text area -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.TextArea\" [attr.flex]=\"field.flex||0\" layout-margin appearance=\"outline\">\r\n <mat-label>{{field.header}}</mat-label>\r\n <textarea matInput [formControlName]=\"field.name\" rows=\"field.rows||2\"></textarea>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error>\r\n <ng-container *ngTemplateOutlet=\"fieldErrors\"></ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Enum -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.Enum\" [attr.flex]=\"field.flex||0\" layout-margin appearance=\"outline\">\r\n <mat-label>{{field.header}}</mat-label>\r\n <vd-select [formControlName]=\"field.name\" [enum]=\"field.enumType\" [key]=\"field.optionValue\" [text]=\"field.optionText\" [multiple]=\"field.multiple\" flex></vd-select>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error>\r\n <ng-container *ngTemplateOutlet=\"fieldErrors\"></ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region VdSelect -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.VdSelect\" [attr.flex]=\"field.flex||0\" layout-margin appearance=\"outline\">\r\n <mat-label>{{field.header}}</mat-label>\r\n <vd-select [formControlName]=\"field.name\" [endpoint]=\"field.endpoint\" [projection]=\"field.projection\" [key]=\"field.optionValue\" [text]=\"field.optionText\" [multiple]=\"field.multiple\" flex></vd-select>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error>\r\n <ng-container *ngTemplateOutlet=\"fieldErrors\"></ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region VdChips -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.VdChips\" [attr.flex]=\"field.flex||0\" layout-margin appearance=\"outline\">\r\n <mat-label>{{field.header}}</mat-label>\r\n <vd-chips #vdChip [formControlName]=\"field.name\" [endpoint]=\"field.endpoint\" [searchField]=\"field.searchField\" [projection]=\"field.projection\" [key]=\"field.optionValue\" flex>\r\n <ng-template vd-chip let-chip=\"chip\" *ngIf=\"field.chipTemplate\">\r\n <div [outerHTML]=\"field.chipTemplate(chip)\"></div>\r\n </ng-template>\r\n <ng-template vd-autocomplete-option let-option=\"option\" *ngIf=\"field.autocompleteTemplate\">\r\n <div [outerHTML]=\"field.autocompleteTemplate(option)\"></div>\r\n </ng-template>\r\n </vd-chips>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-hint *ngIf=\"vdChip.emptyResult\" class=\"tc-red-400\" i18n=\"@@noResultsFound\">No results found</mat-hint>\r\n <mat-error>\r\n <ng-container *ngTemplateOutlet=\"fieldErrors\"></ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Select -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.Select\" [attr.flex]=\"field.flex||0\" layout-margin appearance=\"outline\">\r\n <mat-label>{{field.header}}</mat-label>\r\n <mat-select [formControlName]=\"field.name\" [multiple]=\"field.multiple\" flex>\r\n <mat-option *ngFor=\"let option of field.options\" [value]=\"option.id\">{{option.name}}</mat-option>\r\n </mat-select>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error>\r\n <ng-container *ngTemplateOutlet=\"fieldErrors\"></ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Autocomplete -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.Autocomplete\" [attr.flex]=\"field.flex||0\" layout-margin appearance=\"outline\">\r\n <mat-label>{{field.header}}</mat-label>\r\n <input type=\"text\" matInput [formControlName]=\"field.name\" [matAutocomplete]=\"auto\" autocomplete=\"false\">\r\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\">\r\n <mat-option *ngFor=\"let option of autocompleteFilteredOptions[field.name]\" [value]=\"option.id\">\r\n {{option.name}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error>\r\n <ng-container *ngTemplateOutlet=\"fieldErrors\"></ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Date -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.Date\" [attr.flex]=\"field.flex||0\" layout-margin appearance=\"outline\">\r\n <mat-label>{{field.header}}</mat-label>\r\n <input matInput [formControlName]=\"field.name\" autocomplete=\"off\" [matDatepicker]=\"datePicker\">\r\n <mat-datepicker-toggle matSuffix [for]=\"datePicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #datePicker></mat-datepicker>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error>\r\n <ng-container *ngTemplateOutlet=\"fieldErrors\"></ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Checkbox -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <div *ngSwitchCase=\"FormFieldType.Checkbox\" layout-margin appearance=\"outline\" class=\"pad-bottom-xs\">\r\n <mat-checkbox [formControlName]=\"field.name\">{{field.header}}</mat-checkbox>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Editor -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <ng-container *ngSwitchCase=\"FormFieldType.Editor\">\r\n <ng-template *ngIf=\"editorTemplate?.templateRef\" [ngTemplateOutlet]=\"editorTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ field: field, formGroup: formGroup }\"></ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Code -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <ng-container *ngSwitchCase=\"FormFieldType.Code\">\r\n <ng-template *ngIf=\"codeTemplate?.templateRef\" [ngTemplateOutlet]=\"codeTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ field: field, formGroup: formGroup }\"></ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region File -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <ng-container *ngSwitchCase=\"FormFieldType.File\">\r\n <ng-template *ngIf=\"fileTemplate?.templateRef\" [ngTemplateOutlet]=\"fileTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ field: field, formGroup: formGroup }\"></ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Custom -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <ng-container *ngSwitchCase=\"FormFieldType.Custom\">\r\n <ng-template *ngIf=\"customTemplate?.templateRef\" [ngTemplateOutlet]=\"customTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ field: field, formGroup: formGroup }\"></ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </div>\r\n <!-- #endregion -->\r\n</div>", styles: [""], components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.VdSelectComponent, selector: "vd-select", inputs: ["multiple", "disabled", "sorted", "textPrefix", "endpoint", "params", "projection", "enum", "key", "text", "prefix", "options", "filteredOptions", "filterable", "cache", "sortBy", "searchField"], outputs: ["change", "itemChange", "selected", "itemSelected", "launch"] }, { type: i3.VdChipsComponent, selector: "vd-chips", inputs: ["chips", "endpoint", "params", "projection", "path", "key", "searchField", "searchFields", "termMinlength", "limit", "debounce", "default"], outputs: ["initSelect", "selected", "cleared", "launch", "chipFocus"] }, { type: i4.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i7.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { type: i7.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { type: i8.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i10.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i9.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i11.MatFormFieldReadonlyDirective, selector: "mat-form-field" }, { type: i1.MatLabel, selector: "mat-label" }, { type: i12.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i10.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i10.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { type: i10.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i10.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i1.MatError, selector: "mat-error", inputs: ["id"] }, { type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.VdChipDirective, selector: "[vd-chip]ng-template" }, { type: i3.VdAutocompleteOptionDirective, selector: "[vd-autocomplete-option]ng-template" }, { type: i6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i7.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { type: i1.MatSuffix, selector: "[matSuffix]" }] });
|
|
109
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdGenericFormComponent, decorators: [{
|
|
110
110
|
type: Component,
|
|
111
111
|
args: [{ selector: 'vd-generic-form', template: "<div *ngIf=\"formGroup && fieldRows\" [formGroup]=\"formGroup\">\r\n <!-- #region Fields -->\r\n <div layout-gt-sm=\"row\" layout=\"column\" *ngFor=\"let fields of fieldRows\">\r\n <ng-container *ngFor=\"let field of fields\" [ngSwitch]=\"field.type\">\r\n <!-- #region Error handling -->\r\n <ng-template #fieldErrors>\r\n <div *ngFor=\"let errorMessage of formGroup.controls[field.name]['errorMessages']\">{{errorMessage}}</div>\r\n </ng-template>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Text input -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.Text\" [attr.flex]=\"field.flex||0\" layout-margin appearance=\"outline\">\r\n <mat-label>{{field.header}}</mat-label>\r\n <input [type]=\"field.inputType\" [minlength]=\"field.minLength||null\" [maxlength]=\"field.maxLength||null\" matInput [formControlName]=\"field.name\">\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error>\r\n <ng-container *ngTemplateOutlet=\"fieldErrors\"></ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Text area -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.TextArea\" [attr.flex]=\"field.flex||0\" layout-margin appearance=\"outline\">\r\n <mat-label>{{field.header}}</mat-label>\r\n <textarea matInput [formControlName]=\"field.name\" rows=\"field.rows||2\"></textarea>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error>\r\n <ng-container *ngTemplateOutlet=\"fieldErrors\"></ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Enum -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.Enum\" [attr.flex]=\"field.flex||0\" layout-margin appearance=\"outline\">\r\n <mat-label>{{field.header}}</mat-label>\r\n <vd-select [formControlName]=\"field.name\" [enum]=\"field.enumType\" [key]=\"field.optionValue\" [text]=\"field.optionText\" [multiple]=\"field.multiple\" flex></vd-select>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error>\r\n <ng-container *ngTemplateOutlet=\"fieldErrors\"></ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region VdSelect -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.VdSelect\" [attr.flex]=\"field.flex||0\" layout-margin appearance=\"outline\">\r\n <mat-label>{{field.header}}</mat-label>\r\n <vd-select [formControlName]=\"field.name\" [endpoint]=\"field.endpoint\" [projection]=\"field.projection\" [key]=\"field.optionValue\" [text]=\"field.optionText\" [multiple]=\"field.multiple\" flex></vd-select>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error>\r\n <ng-container *ngTemplateOutlet=\"fieldErrors\"></ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region VdChips -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.VdChips\" [attr.flex]=\"field.flex||0\" layout-margin appearance=\"outline\">\r\n <mat-label>{{field.header}}</mat-label>\r\n <vd-chips #vdChip [formControlName]=\"field.name\" [endpoint]=\"field.endpoint\" [searchField]=\"field.searchField\" [projection]=\"field.projection\" [key]=\"field.optionValue\" flex>\r\n <ng-template vd-chip let-chip=\"chip\" *ngIf=\"field.chipTemplate\">\r\n <div [outerHTML]=\"field.chipTemplate(chip)\"></div>\r\n </ng-template>\r\n <ng-template vd-autocomplete-option let-option=\"option\" *ngIf=\"field.autocompleteTemplate\">\r\n <div [outerHTML]=\"field.autocompleteTemplate(option)\"></div>\r\n </ng-template>\r\n </vd-chips>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-hint *ngIf=\"vdChip.emptyResult\" class=\"tc-red-400\" i18n=\"@@noResultsFound\">No results found</mat-hint>\r\n <mat-error>\r\n <ng-container *ngTemplateOutlet=\"fieldErrors\"></ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Select -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.Select\" [attr.flex]=\"field.flex||0\" layout-margin appearance=\"outline\">\r\n <mat-label>{{field.header}}</mat-label>\r\n <mat-select [formControlName]=\"field.name\" [multiple]=\"field.multiple\" flex>\r\n <mat-option *ngFor=\"let option of field.options\" [value]=\"option.id\">{{option.name}}</mat-option>\r\n </mat-select>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error>\r\n <ng-container *ngTemplateOutlet=\"fieldErrors\"></ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Autocomplete -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.Autocomplete\" [attr.flex]=\"field.flex||0\" layout-margin appearance=\"outline\">\r\n <mat-label>{{field.header}}</mat-label>\r\n <input type=\"text\" matInput [formControlName]=\"field.name\" [matAutocomplete]=\"auto\" autocomplete=\"false\">\r\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\">\r\n <mat-option *ngFor=\"let option of autocompleteFilteredOptions[field.name]\" [value]=\"option.id\">\r\n {{option.name}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error>\r\n <ng-container *ngTemplateOutlet=\"fieldErrors\"></ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Date -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.Date\" [attr.flex]=\"field.flex||0\" layout-margin appearance=\"outline\">\r\n <mat-label>{{field.header}}</mat-label>\r\n <input matInput [formControlName]=\"field.name\" autocomplete=\"off\" [matDatepicker]=\"datePicker\">\r\n <mat-datepicker-toggle matSuffix [for]=\"datePicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #datePicker></mat-datepicker>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error>\r\n <ng-container *ngTemplateOutlet=\"fieldErrors\"></ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Checkbox -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <div *ngSwitchCase=\"FormFieldType.Checkbox\" layout-margin appearance=\"outline\" class=\"pad-bottom-xs\">\r\n <mat-checkbox [formControlName]=\"field.name\">{{field.header}}</mat-checkbox>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Editor -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <ng-container *ngSwitchCase=\"FormFieldType.Editor\">\r\n <ng-template *ngIf=\"editorTemplate?.templateRef\" [ngTemplateOutlet]=\"editorTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ field: field, formGroup: formGroup }\"></ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Code -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <ng-container *ngSwitchCase=\"FormFieldType.Code\">\r\n <ng-template *ngIf=\"codeTemplate?.templateRef\" [ngTemplateOutlet]=\"codeTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ field: field, formGroup: formGroup }\"></ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region File -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <ng-container *ngSwitchCase=\"FormFieldType.File\">\r\n <ng-template *ngIf=\"fileTemplate?.templateRef\" [ngTemplateOutlet]=\"fileTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ field: field, formGroup: formGroup }\"></ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Custom -->\r\n <ng-container *ngIf=\"!field.hide || !field.hide(formGroup?.value)\">\r\n <ng-container *ngSwitchCase=\"FormFieldType.Custom\">\r\n <ng-template *ngIf=\"customTemplate?.templateRef\" [ngTemplateOutlet]=\"customTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ field: field, formGroup: formGroup }\"></ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </div>\r\n <!-- #endregion -->\r\n</div>", styles: [""] }]
|
|
112
112
|
}], propDecorators: { formGroup: [{
|
|
@@ -21,9 +21,9 @@ export class MatFormFieldReadonlyDirective {
|
|
|
21
21
|
return false;
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
|
-
/** @nocollapse */ /** @nocollapse */ MatFormFieldReadonlyDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
25
|
-
/** @nocollapse */ /** @nocollapse */ MatFormFieldReadonlyDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.
|
|
26
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
24
|
+
/** @nocollapse */ /** @nocollapse */ MatFormFieldReadonlyDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: MatFormFieldReadonlyDirective, deps: [{ token: i1.MatFormField }], target: i0.ɵɵFactoryTarget.Directive });
|
|
25
|
+
/** @nocollapse */ /** @nocollapse */ MatFormFieldReadonlyDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.0", type: MatFormFieldReadonlyDirective, selector: "mat-form-field", host: { properties: { "class.mat-form-field-readonly": "isReadonlyInput()" } }, ngImport: i0 });
|
|
26
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: MatFormFieldReadonlyDirective, decorators: [{
|
|
27
27
|
type: Directive,
|
|
28
28
|
args: [{
|
|
29
29
|
selector: 'mat-form-field',
|
|
@@ -43,8 +43,8 @@ const DECLARATIONS = [
|
|
|
43
43
|
];
|
|
44
44
|
export class VdFormsModule {
|
|
45
45
|
}
|
|
46
|
-
/** @nocollapse */ /** @nocollapse */ VdFormsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
47
|
-
/** @nocollapse */ /** @nocollapse */ VdFormsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.
|
|
46
|
+
/** @nocollapse */ /** @nocollapse */ VdFormsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdFormsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
47
|
+
/** @nocollapse */ /** @nocollapse */ VdFormsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdFormsModule, declarations: [EqualValidator,
|
|
48
48
|
UniqueValidatorDirective,
|
|
49
49
|
NativeElementInjectorDirective,
|
|
50
50
|
MatFormFieldReadonlyDirective,
|
|
@@ -76,7 +76,7 @@ export class VdFormsModule {
|
|
|
76
76
|
VdFileDirective,
|
|
77
77
|
VdCustomDirective,
|
|
78
78
|
VdGenericFormComponent] });
|
|
79
|
-
/** @nocollapse */ /** @nocollapse */ VdFormsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.
|
|
79
|
+
/** @nocollapse */ /** @nocollapse */ VdFormsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdFormsModule, imports: [[
|
|
80
80
|
CommonModule,
|
|
81
81
|
VdCommonModule,
|
|
82
82
|
VdSelectModule,
|
|
@@ -94,7 +94,7 @@ export class VdFormsModule {
|
|
|
94
94
|
MatNativeDateModule,
|
|
95
95
|
MatAutocompleteModule
|
|
96
96
|
]] });
|
|
97
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
97
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdFormsModule, decorators: [{
|
|
98
98
|
type: NgModule,
|
|
99
99
|
args: [{
|
|
100
100
|
imports: [
|
|
@@ -227,9 +227,9 @@ export class AbstractMatFormField extends mixinErrorState(_AbstractMatFormField)
|
|
|
227
227
|
* The element ID
|
|
228
228
|
*/
|
|
229
229
|
AbstractMatFormField.nextId = 0;
|
|
230
|
-
/** @nocollapse */ /** @nocollapse */ AbstractMatFormField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
231
|
-
/** @nocollapse */ /** @nocollapse */ AbstractMatFormField.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.
|
|
232
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
230
|
+
/** @nocollapse */ /** @nocollapse */ AbstractMatFormField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: AbstractMatFormField, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
|
|
231
|
+
/** @nocollapse */ /** @nocollapse */ AbstractMatFormField.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.0", type: AbstractMatFormField, inputs: { placeholder: "placeholder", required: "required", readonly: "readonly", disabled: "disabled" }, host: { listeners: { "focusout": "onBlur()" }, properties: { "id": "this.id", "attr.aria-describedBy": "this.describedBy" } }, usesInheritance: true, ngImport: i0 });
|
|
232
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: AbstractMatFormField, decorators: [{
|
|
233
233
|
type: Directive
|
|
234
234
|
}], ctorParameters: function () { return [{ type: undefined }, { type: i1.NgControl }, { type: i1.NgForm }, { type: i1.FormGroupDirective }, { type: i2.ErrorStateMatcher }, { type: i3.FocusMonitor }, { type: i0.ElementRef }]; }, propDecorators: { placeholder: [{
|
|
235
235
|
type: Input
|
|
@@ -130,9 +130,9 @@ export class ValueAccessorBase extends MatFormFieldControl {
|
|
|
130
130
|
this.stateChanges.complete();
|
|
131
131
|
}
|
|
132
132
|
}
|
|
133
|
-
/** @nocollapse */ /** @nocollapse */ ValueAccessorBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
134
|
-
/** @nocollapse */ /** @nocollapse */ ValueAccessorBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.
|
|
135
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
133
|
+
/** @nocollapse */ /** @nocollapse */ ValueAccessorBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: ValueAccessorBase, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
134
|
+
/** @nocollapse */ /** @nocollapse */ ValueAccessorBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.0", type: ValueAccessorBase, host: { properties: { "attr.aria-describedby": "this.describedBy" } }, usesInheritance: true, ngImport: i0 });
|
|
135
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: ValueAccessorBase, decorators: [{
|
|
136
136
|
type: Directive
|
|
137
137
|
}], propDecorators: { describedBy: [{
|
|
138
138
|
type: HostBinding,
|
|
@@ -49,15 +49,15 @@ export class EqualValidator {
|
|
|
49
49
|
return null;
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
|
-
/** @nocollapse */ /** @nocollapse */ EqualValidator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
53
|
-
/** @nocollapse */ /** @nocollapse */ EqualValidator.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.
|
|
52
|
+
/** @nocollapse */ /** @nocollapse */ EqualValidator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: EqualValidator, deps: [{ token: 'validateEqual', attribute: true }, { token: 'reverse', attribute: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
53
|
+
/** @nocollapse */ /** @nocollapse */ EqualValidator.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.0", type: EqualValidator, selector: "[validateEqual][formControlName],[validateEqual][formControl],[validateEqual][ngModel]", providers: [
|
|
54
54
|
{
|
|
55
55
|
provide: NG_VALIDATORS,
|
|
56
56
|
useExisting: forwardRef((() => EqualValidator)),
|
|
57
57
|
multi: true
|
|
58
58
|
}
|
|
59
59
|
], ngImport: i0 });
|
|
60
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
60
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: EqualValidator, decorators: [{
|
|
61
61
|
type: Directive,
|
|
62
62
|
args: [{
|
|
63
63
|
selector: '[validateEqual][formControlName],[validateEqual][formControl],[validateEqual][ngModel]',
|
|
@@ -21,9 +21,9 @@ export class NativeElementInjectorDirective {
|
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
|
-
/** @nocollapse */ /** @nocollapse */ NativeElementInjectorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
25
|
-
/** @nocollapse */ /** @nocollapse */ NativeElementInjectorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.
|
|
26
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
24
|
+
/** @nocollapse */ /** @nocollapse */ NativeElementInjectorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NativeElementInjectorDirective, deps: [{ token: i0.ElementRef }, { token: i1.NgControl }, { token: i1.NgModel, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
25
|
+
/** @nocollapse */ /** @nocollapse */ NativeElementInjectorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.0", type: NativeElementInjectorDirective, selector: "[ngModel]", ngImport: i0 });
|
|
26
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NativeElementInjectorDirective, decorators: [{
|
|
27
27
|
type: Directive,
|
|
28
28
|
args: [{ selector: '[ngModel]' }]
|
|
29
29
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.NgControl }, { type: i1.NgModel, decorators: [{
|
|
@@ -52,9 +52,9 @@ export class UniqueValidatorDirective {
|
|
|
52
52
|
}));
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
|
-
/** @nocollapse */ /** @nocollapse */ UniqueValidatorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
56
|
-
/** @nocollapse */ /** @nocollapse */ UniqueValidatorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.
|
|
57
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
55
|
+
/** @nocollapse */ /** @nocollapse */ UniqueValidatorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: UniqueValidatorDirective, deps: [{ token: i1.HttpClient }, { token: 'unique', attribute: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
56
|
+
/** @nocollapse */ /** @nocollapse */ UniqueValidatorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.0", type: UniqueValidatorDirective, selector: "[unique]", inputs: { uniqueProperty: "uniqueProperty", uniqueId: "uniqueId", uniqueParams: "uniqueParams", invert: "invert" }, providers: [{ provide: NG_ASYNC_VALIDATORS, useExisting: UniqueValidatorDirective, multi: true }], ngImport: i0 });
|
|
57
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: UniqueValidatorDirective, decorators: [{
|
|
58
58
|
type: Directive,
|
|
59
59
|
args: [{
|
|
60
60
|
selector: '[unique]',
|