@provoly/dashboard 0.20.2 → 0.20.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/admin/components/admin-classes/admin-classes-view/admin-attributes-form/admin-attributes-form.component.d.ts +5 -2
  2. package/admin/components/admin-fields/admin-fields-select/admin-fields-select.component.d.ts +1 -1
  3. package/admin/i18n/en.translations.d.ts +1 -0
  4. package/admin/i18n/fr.translations.d.ts +1 -0
  5. package/components/metadata-editor/style/_o-metadata-editor.scss +0 -5
  6. package/dataset/style/_o-pry-dataset-card.scss +5 -37
  7. package/esm2022/admin/components/admin-abac-rules/admin-abac-rules-form/admin-abac-rules-form.component.mjs +3 -3
  8. package/esm2022/admin/components/admin-abac-rules/components/attribute-condition/attribute-condition.component.mjs +3 -3
  9. package/esm2022/admin/components/admin-abac-rules/components/metadata-condition/metadata-condition.component.mjs +3 -3
  10. package/esm2022/admin/components/admin-classes/admin-classes-customize/admin-classes-customize.component.mjs +5 -5
  11. package/esm2022/admin/components/admin-classes/admin-classes-customize/symbol/admin-classes-customize-symbol.component.mjs +3 -3
  12. package/esm2022/admin/components/admin-classes/admin-classes-customize/tooltip/admin-classes-customize-tooltip.component.mjs +5 -5
  13. package/esm2022/admin/components/admin-classes/admin-classes-form/admin-classes-form.component.mjs +3 -3
  14. package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-form/admin-attributes-form.component.mjs +42 -12
  15. package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-new/admin-attributes-new.component.mjs +1 -1
  16. package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-select/admin-attributes-select.component.mjs +3 -3
  17. package/esm2022/admin/components/admin-classes/admin-classes-view/admin-classes-view.component.mjs +3 -3
  18. package/esm2022/admin/components/admin-dataset/shared/admin-form-dataset/admin-form-dataset.component.mjs +3 -3
  19. package/esm2022/admin/components/admin-environment/admin-environment-form/admin-environment-form.component.mjs +3 -3
  20. package/esm2022/admin/components/admin-fields/admin-fields-form/admin-fields-form.component.mjs +3 -3
  21. package/esm2022/admin/components/admin-fields/admin-fields-select/admin-fields-select.component.mjs +2 -2
  22. package/esm2022/admin/components/admin-links/admin-links-new/admin-links-new.component.mjs +3 -3
  23. package/esm2022/admin/components/admin-metadata/shared/form-metadata/form-metadata.component.mjs +3 -3
  24. package/esm2022/admin/components/admin-metadata-rules/shared/admin-form-metadata-rules/admin-form-metadata-rules.component.mjs +3 -3
  25. package/esm2022/admin/i18n/en.translations.mjs +3 -2
  26. package/esm2022/admin/i18n/fr.translations.mjs +3 -2
  27. package/esm2022/components/metadata-editor/metadata-editor.component.mjs +3 -3
  28. package/esm2022/components/metadata-editor/style/css.component.mjs +2 -2
  29. package/esm2022/components/scheme-picker/scheme-picker.component.mjs +3 -3
  30. package/esm2022/dataset/components/dataset-card/dataset-card.component.mjs +5 -5
  31. package/esm2022/dataset/components/dataset-detail/dataset-detail.component.mjs +1 -2
  32. package/esm2022/dataset/i18n/fr.translations.mjs +2 -2
  33. package/esm2022/dataset/style/css.component.mjs +2 -2
  34. package/esm2022/filters/autocomplete/autocomplete.component.mjs +13 -6
  35. package/esm2022/filters/autocomplete/autocomplete.module.mjs +5 -5
  36. package/esm2022/filters/autocomplete/style/css.component.mjs +2 -2
  37. package/esm2022/filters/list/list-filter.component.mjs +1 -1
  38. package/esm2022/import/components/import.component.mjs +3 -3
  39. package/esm2022/lib/core/components/ellipsis.directive.mjs +31 -0
  40. package/esm2022/lib/core/components/select/select.component.mjs +163 -38
  41. package/esm2022/lib/core/components/select/select.module.mjs +4 -5
  42. package/esm2022/lib/core/components/share/share.component.mjs +3 -3
  43. package/esm2022/lib/core/components/translate-id/translate-id.pipe.mjs +7 -8
  44. package/esm2022/lib/core/core.module.mjs +8 -4
  45. package/esm2022/lib/core/i18n/en.translations.mjs +7 -5
  46. package/esm2022/lib/core/i18n/fr.translations.mjs +8 -5
  47. package/esm2022/lib/core/model/admin-api.model.mjs +1 -1
  48. package/esm2022/lib/core/model/display-options.interface.mjs +18 -4
  49. package/esm2022/lib/core/model/filter.interface.mjs +1 -1
  50. package/esm2022/lib/core/model/manifest.interface.mjs +1 -1
  51. package/esm2022/lib/core/public-api.mjs +2 -1
  52. package/esm2022/lib/core/store/class/class.interface.mjs +1 -1
  53. package/esm2022/lib/core/store/class/class.selectors.mjs +6 -2
  54. package/esm2022/lib/core/store/search/search.service.mjs +1 -1
  55. package/esm2022/lib/core/toolbox/toolbox-manifest.service.mjs +1 -4
  56. package/esm2022/lib/dashboard/components/context-menu/object-edition/object-edition.component.mjs +28 -28
  57. package/esm2022/lib/dashboard/components/widgets/header/widget-header.component.mjs +6 -15
  58. package/esm2022/lib/dashboard/components/widgets/settings/settings.component.mjs +3 -3
  59. package/esm2022/lib/dashboard/filter/components/filter-group/filter-group.component.mjs +3 -3
  60. package/esm2022/lib/dashboard/filter/style/css.component.mjs +2 -2
  61. package/esm2022/lib/dashboard/item-utils.mjs +7 -7
  62. package/esm2022/lib/dashboard/store/dashboard.effects.mjs +1 -4
  63. package/esm2022/pipeline/store/pipeline.actions.mjs +1 -1
  64. package/esm2022/pipeline-components/filter/component/filter.component.mjs +4 -4
  65. package/esm2022/pipeline-components/input-datasource/component/input-datasource.component.mjs +3 -3
  66. package/esm2022/pipeline-components/output-dataset/component/output-dataset.component.mjs +3 -3
  67. package/esm2022/presentation/components/add-edit-presentation/add-edit-presentation.component.mjs +3 -3
  68. package/esm2022/presentation/components/presentation.component.mjs +3 -3
  69. package/esm2022/presentation/i18n/fr.translations.mjs +9 -9
  70. package/esm2022/presentation/style/css.component.mjs +2 -2
  71. package/esm2022/restitution/components/restitution/restitution.component.mjs +23 -22
  72. package/esm2022/restitution/components/restitution-catalog/restitution-catalog.component.mjs +13 -6
  73. package/esm2022/restitution/i18n/en.translations.mjs +2 -2
  74. package/esm2022/restitution/i18n/fr.translations.mjs +4 -4
  75. package/esm2022/restitution/style/css.component.mjs +2 -2
  76. package/esm2022/search/search-mono-class/components/search-condition/search-condition.component.mjs +3 -3
  77. package/esm2022/search/search-mono-class/components/search-mono-class/search-mono-class.component.mjs +3 -3
  78. package/esm2022/search/search-mono-class/components/search-order/search-order.component.mjs +3 -3
  79. package/esm2022/search/search-multi-class/components/multi-class-condition/multi-class-condition.component.mjs +3 -3
  80. package/esm2022/supervision/components/supervision-integration-errors/supervision-integration-errors.component.mjs +3 -3
  81. package/esm2022/toolbox/components/automate-refresh/automate-refresh.component.mjs +3 -3
  82. package/esm2022/toolbox/components/clear-view/clear-view.component.mjs +3 -3
  83. package/esm2022/toolbox/components/drag-widgets/drag-widgets.component.mjs +3 -3
  84. package/esm2022/toolbox/components/filter-settings/filter-settings.component.mjs +6 -6
  85. package/esm2022/toolbox/components/launch-tab/launch-tab.component.mjs +3 -3
  86. package/esm2022/toolbox/components/named-query/named-query.component.mjs +3 -3
  87. package/esm2022/toolbox/components/refresh-datasets/refresh-datasets.component.mjs +3 -3
  88. package/esm2022/toolbox/components/save-view/save-view.component.mjs +3 -3
  89. package/esm2022/toolbox/components/select-grid-layout/select-grid-layout.component.mjs +3 -3
  90. package/esm2022/toolbox/components/toolbox.component.mjs +4 -3
  91. package/esm2022/tooltips/attribute/attribute-tooltip.component.mjs +8 -2
  92. package/esm2022/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.mjs +8 -7
  93. package/esm2022/widgets/widget-chart/component/widget-chart.component.mjs +12 -13
  94. package/esm2022/widgets/widget-graph/component/widget-graph.component.mjs +3 -3
  95. package/esm2022/widgets/widget-map/component/widget-map.component.mjs +13 -7
  96. package/esm2022/widgets/widget-map/i18n/en.translations.mjs +3 -2
  97. package/esm2022/widgets/widget-map/i18n/fr.translations.mjs +3 -2
  98. package/esm2022/widgets/widget-map/pipe/widget-map-geometry-fields-for.pipe.mjs +3 -3
  99. package/esm2022/widgets/widget-map/style/css.component.mjs +2 -2
  100. package/esm2022/widgets/widget-map/utils/cql-utils.class.mjs +2 -2
  101. package/esm2022/widgets/widget-map/utils/widget-map.utils.mjs +6 -6
  102. package/esm2022/widgets/widget-table/component/widget-table.component.mjs +8 -8
  103. package/esm2022/widgets/widget-table/get-value/get-value.pipe.mjs +2 -2
  104. package/esm2022/widgets/widget-tile/component/widget-tile.component.mjs +3 -3
  105. package/fesm2022/provoly-dashboard-admin.mjs +80 -48
  106. package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
  107. package/fesm2022/provoly-dashboard-components-metadata-editor.mjs +4 -4
  108. package/fesm2022/provoly-dashboard-components-metadata-editor.mjs.map +1 -1
  109. package/fesm2022/provoly-dashboard-components-scheme-picker.mjs +2 -2
  110. package/fesm2022/provoly-dashboard-components-scheme-picker.mjs.map +1 -1
  111. package/fesm2022/provoly-dashboard-dataset.mjs +5 -6
  112. package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
  113. package/fesm2022/provoly-dashboard-filters-autocomplete.mjs +18 -11
  114. package/fesm2022/provoly-dashboard-filters-autocomplete.mjs.map +1 -1
  115. package/fesm2022/provoly-dashboard-filters-list.mjs +1 -1
  116. package/fesm2022/provoly-dashboard-filters-list.mjs.map +1 -1
  117. package/fesm2022/provoly-dashboard-import.mjs +2 -2
  118. package/fesm2022/provoly-dashboard-import.mjs.map +1 -1
  119. package/fesm2022/provoly-dashboard-pipeline-components-filter.mjs +3 -3
  120. package/fesm2022/provoly-dashboard-pipeline-components-filter.mjs.map +1 -1
  121. package/fesm2022/provoly-dashboard-pipeline-components-input-datasource.mjs +2 -2
  122. package/fesm2022/provoly-dashboard-pipeline-components-input-datasource.mjs.map +1 -1
  123. package/fesm2022/provoly-dashboard-pipeline-components-output-dataset.mjs +2 -2
  124. package/fesm2022/provoly-dashboard-pipeline-components-output-dataset.mjs.map +1 -1
  125. package/fesm2022/provoly-dashboard-pipeline.mjs.map +1 -1
  126. package/fesm2022/provoly-dashboard-presentation.mjs +14 -14
  127. package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
  128. package/fesm2022/provoly-dashboard-restitution.mjs +39 -31
  129. package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
  130. package/fesm2022/provoly-dashboard-search.mjs +8 -8
  131. package/fesm2022/provoly-dashboard-search.mjs.map +1 -1
  132. package/fesm2022/provoly-dashboard-supervision.mjs +2 -2
  133. package/fesm2022/provoly-dashboard-supervision.mjs.map +1 -1
  134. package/fesm2022/provoly-dashboard-toolbox.mjs +24 -23
  135. package/fesm2022/provoly-dashboard-toolbox.mjs.map +1 -1
  136. package/fesm2022/provoly-dashboard-tooltips-attribute.mjs +7 -1
  137. package/fesm2022/provoly-dashboard-tooltips-attribute.mjs.map +1 -1
  138. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs +7 -6
  139. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs.map +1 -1
  140. package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs +11 -12
  141. package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs.map +1 -1
  142. package/fesm2022/provoly-dashboard-widgets-widget-graph.mjs +2 -2
  143. package/fesm2022/provoly-dashboard-widgets-widget-graph.mjs.map +1 -1
  144. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +26 -18
  145. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
  146. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs +8 -8
  147. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs.map +1 -1
  148. package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs +2 -2
  149. package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs.map +1 -1
  150. package/fesm2022/provoly-dashboard.mjs +281 -122
  151. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  152. package/filters/autocomplete/autocomplete.component.d.ts +1 -0
  153. package/filters/autocomplete/autocomplete.module.d.ts +1 -1
  154. package/filters/autocomplete/style/_m-autocomplete.scss +16 -3
  155. package/lib/core/components/ellipsis.directive.d.ts +11 -0
  156. package/lib/core/components/select/select.component.d.ts +39 -19
  157. package/lib/core/components/select/select.module.d.ts +4 -5
  158. package/lib/core/components/translate-id/translate-id.pipe.d.ts +1 -3
  159. package/lib/core/core.module.d.ts +15 -14
  160. package/lib/core/i18n/en.translations.d.ts +4 -2
  161. package/lib/core/i18n/fr.translations.d.ts +5 -2
  162. package/lib/core/model/admin-api.model.d.ts +1 -0
  163. package/lib/core/model/display-options.interface.d.ts +11 -0
  164. package/lib/core/model/filter.interface.d.ts +1 -1
  165. package/lib/core/model/manifest.interface.d.ts +1 -5
  166. package/lib/core/public-api.d.ts +1 -0
  167. package/lib/core/store/class/class.interface.d.ts +1 -0
  168. package/lib/core/store/class/class.selectors.d.ts +105 -5
  169. package/lib/core/store/search/search.service.d.ts +1 -1
  170. package/lib/dashboard/components/widgets/header/widget-header.component.d.ts +2 -5
  171. package/lib/dashboard/filter/style/_o-pry-filter-group.scss +0 -11
  172. package/lib/dashboard/store/dashboard.effects.d.ts +0 -1
  173. package/lib/dashboard/store/dashboard.selectors.d.ts +0 -9
  174. package/package.json +7 -8
  175. package/pipeline/store/pipeline.actions.d.ts +1 -1
  176. package/presentation/style/_o-pry-new-presentation.scss +0 -7
  177. package/presentation/style/_o-pry-presentation.scss +20 -55
  178. package/restitution/components/restitution-catalog/restitution-catalog.component.d.ts +1 -1
  179. package/restitution/i18n/en.translations.d.ts +1 -1
  180. package/restitution/i18n/fr.translations.d.ts +3 -3
  181. package/schematics/migration.json +6 -1
  182. package/schematics/ng-update/version-0-20/index.d.ts +2 -0
  183. package/schematics/ng-update/version-0-20/index.js +19 -0
  184. package/schematics/ng-update/version-0-20/index.js.map +1 -0
  185. package/styles/components/_a-pry-select.scss +34 -10
  186. package/styles/components/_a-tooltip.scss +2 -2
  187. package/styles/components/_m-filter.scss +11 -20
  188. package/styles/components/_o-dashboard.scss +4 -0
  189. package/styles/components/_o-draggable-menu.scss +1 -1
  190. package/styles/components/_o-widget.scss +2 -2
  191. package/styles/main.scss +0 -1
  192. package/styles-theme/abstracts-theme/variables/_variables-typo.scss +9 -0
  193. package/styles-theme/components-theme/_a-pry-select.theme.scss +23 -96
  194. package/styles-theme/components-theme/_a-tooltip.theme.scss +2 -2
  195. package/styles-theme/components-theme/_o-pry-composed-condition.theme.scss +0 -12
  196. package/toolbox/components/filter-settings/filter-settings.component.d.ts +2 -2
  197. package/toolbox/components/toolbox.component.d.ts +1 -0
  198. package/tooltips/attribute/attribute-tooltip.component.d.ts +1 -0
  199. package/widgets/widget-chart/component/widget-chart.component.d.ts +0 -1
  200. package/widgets/widget-map/component/widget-map.component.d.ts +2 -0
  201. package/widgets/widget-map/i18n/en.translations.d.ts +1 -0
  202. package/widgets/widget-map/i18n/fr.translations.d.ts +1 -0
  203. package/widgets/widget-map/style/_o-layer-legend.scss +21 -0
@@ -85,12 +85,12 @@ export class AdminClassesFormComponent extends SubscriptionnerDirective {
85
85
  }
86
86
  }
87
87
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AdminClassesFormComponent, deps: [{ token: i1.Store }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i3.UntypedFormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
88
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AdminClassesFormComponent, selector: "pry-admin-classes-form", inputs: { currentClass: "currentClass" }, usesInheritance: true, ngImport: i0, template: "<form class=\"o-form\" [formGroup]=\"classForm\" (ngSubmit)=\"addClass()\">\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" id=\"name-label\" for=\"name\">\n {{ '@pry.admin.classes.name' | i18n }} *\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </label>\n <input\n [attr.aria-labelledby]=\"isSubmitted && classForm.get('name')?.invalid ? 'name-label name-error' : 'name-label'\"\n class=\"a-form-field\"\n formControlName=\"name\"\n id=\"name\"\n required\n type=\"text\"\n [attr.aria-invalid]=\"isSubmitted && classForm.get('name')?.invalid\"\n />\n <label\n *ngIf=\"isSubmitted && classForm.get('name')?.invalid\"\n id=\"name-error\"\n for=\"name\"\n class=\"a-label a-label--help -error\"\n >\n <span *ngIf=\"classForm.get('name')?.hasError('same-name')\">{{ '@pry.admin.exists' | i18n }}</span>\n <span *ngIf=\"classForm.get('name')?.hasError('required')\">{{ '@pry.admin.required' | i18n }}</span>\n <span *ngIf=\"classForm.get('name')?.hasError('minlength')\">{{ '@pry.admin.minLength' | i18n : { len: 3 } }}</span>\n <span *ngIf=\"classForm.get('name')?.hasError('maxlength')\">{{\n '@pry.admin.maxLength' | i18n : { len: 100 }\n }}</span>\n <span *ngIf=\"classForm.get('name')?.hasError('whitespace')\">{{ '@pry.admin.noWhitespace' | i18n }}</span>\n </label>\n </div>\n <div class=\"u-display-flex -row -no-gap -align-center\">\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" for=\"storage_options\">\n {{ '@pry.admin.storage.label' | i18n }}\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </label>\n <pry-select\n [items]=\"storageOptions$ | async\"\n [labelTranslate]=\"true\"\n baseTranslate=\"@pry.admin.storage.options.\"\n [bindData]=\"true\"\n [itemsAsOption]=\"true\"\n formControlName=\"storage\"\n class=\"a-pry-select\"\n id=\"storage_options\"\n [readonly]=\"!!_currentClass\"\n ></pry-select>\n </div>\n <div class=\"info-icon description-container description\">\n <span class=\"info-text\">i</span>\n </div>\n <div class=\"description-tooltip info-tooltip\">\n <p class=\"a-p -date\">\n {{ '@pry.admin.storage.description.' + classForm.get('storage')?.value | i18n }}\n </p>\n </div>\n </div>\n <div class=\"m-btn-group -width-sm\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary\"\n (click)=\"goBack()\"\n [innerHTML]=\"'@pry.admin.cancel' | i18n\"\n ></button>\n <button\n class=\"a-btn a-btn--primary\"\n type=\"submit\"\n [innerHTML]=\"(_currentClass ? '@pry.admin.edit' : '@pry.admin.next') | i18n\"\n ></button>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.PrySelectComponent, selector: "pry-select", inputs: ["labelTranslate", "baseTranslate", "translationFn", "translationFnArgs", "clearable", "multiple", "multipleClearRight", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "items", "itemsAsOption", "bindData", "bindValue", "bindLabel", "bindIcon", "iconSize", "templateLabel", "templateOption", "autocomplete"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.I18nPipe, name: "i18n" }] }); }
88
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AdminClassesFormComponent, selector: "pry-admin-classes-form", inputs: { currentClass: "currentClass" }, usesInheritance: true, ngImport: i0, template: "<form class=\"o-form\" [formGroup]=\"classForm\" (ngSubmit)=\"addClass()\">\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" id=\"name-label\" for=\"name\">\n {{ '@pry.admin.classes.name' | i18n }} *\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </label>\n <input\n [attr.aria-labelledby]=\"isSubmitted && classForm.get('name')?.invalid ? 'name-label name-error' : 'name-label'\"\n class=\"a-form-field\"\n formControlName=\"name\"\n id=\"name\"\n required\n type=\"text\"\n [attr.aria-invalid]=\"isSubmitted && classForm.get('name')?.invalid\"\n />\n <label\n *ngIf=\"isSubmitted && classForm.get('name')?.invalid\"\n id=\"name-error\"\n for=\"name\"\n class=\"a-label a-label--help -error\"\n >\n <span *ngIf=\"classForm.get('name')?.hasError('same-name')\">{{ '@pry.admin.exists' | i18n }}</span>\n <span *ngIf=\"classForm.get('name')?.hasError('required')\">{{ '@pry.admin.required' | i18n }}</span>\n <span *ngIf=\"classForm.get('name')?.hasError('minlength')\">{{ '@pry.admin.minLength' | i18n : { len: 3 } }}</span>\n <span *ngIf=\"classForm.get('name')?.hasError('maxlength')\">{{\n '@pry.admin.maxLength' | i18n : { len: 100 }\n }}</span>\n <span *ngIf=\"classForm.get('name')?.hasError('whitespace')\">{{ '@pry.admin.noWhitespace' | i18n }}</span>\n </label>\n </div>\n <div class=\"u-display-flex -row -no-gap -align-center\">\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" for=\"storage_options\">\n {{ '@pry.admin.storage.label' | i18n }}\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </label>\n <pry-select\n [items]=\"storageOptions$ | async\"\n i18nPrefix=\"@pry.admin.storage.options.\"\n formControlName=\"storage\"\n id=\"storage_options\"\n [readonly]=\"!!_currentClass\"\n ></pry-select>\n </div>\n <div class=\"info-icon description-container description\">\n <span class=\"info-text\">i</span>\n </div>\n <div class=\"description-tooltip info-tooltip\">\n <p class=\"a-p -date\">\n {{ '@pry.admin.storage.description.' + classForm.get('storage')?.value | i18n }}\n </p>\n </div>\n </div>\n <div class=\"m-btn-group -width-sm\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary\"\n (click)=\"goBack()\"\n [innerHTML]=\"'@pry.admin.cancel' | i18n\"\n ></button>\n <button\n class=\"a-btn a-btn--primary\"\n type=\"submit\"\n [innerHTML]=\"(_currentClass ? '@pry.admin.edit' : '@pry.admin.next') | i18n\"\n ></button>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "elementRef"], outputs: ["searched", "cleared"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.I18nPipe, name: "i18n" }] }); }
89
89
  }
90
90
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AdminClassesFormComponent, decorators: [{
91
91
  type: Component,
92
- args: [{ selector: 'pry-admin-classes-form', template: "<form class=\"o-form\" [formGroup]=\"classForm\" (ngSubmit)=\"addClass()\">\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" id=\"name-label\" for=\"name\">\n {{ '@pry.admin.classes.name' | i18n }} *\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </label>\n <input\n [attr.aria-labelledby]=\"isSubmitted && classForm.get('name')?.invalid ? 'name-label name-error' : 'name-label'\"\n class=\"a-form-field\"\n formControlName=\"name\"\n id=\"name\"\n required\n type=\"text\"\n [attr.aria-invalid]=\"isSubmitted && classForm.get('name')?.invalid\"\n />\n <label\n *ngIf=\"isSubmitted && classForm.get('name')?.invalid\"\n id=\"name-error\"\n for=\"name\"\n class=\"a-label a-label--help -error\"\n >\n <span *ngIf=\"classForm.get('name')?.hasError('same-name')\">{{ '@pry.admin.exists' | i18n }}</span>\n <span *ngIf=\"classForm.get('name')?.hasError('required')\">{{ '@pry.admin.required' | i18n }}</span>\n <span *ngIf=\"classForm.get('name')?.hasError('minlength')\">{{ '@pry.admin.minLength' | i18n : { len: 3 } }}</span>\n <span *ngIf=\"classForm.get('name')?.hasError('maxlength')\">{{\n '@pry.admin.maxLength' | i18n : { len: 100 }\n }}</span>\n <span *ngIf=\"classForm.get('name')?.hasError('whitespace')\">{{ '@pry.admin.noWhitespace' | i18n }}</span>\n </label>\n </div>\n <div class=\"u-display-flex -row -no-gap -align-center\">\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" for=\"storage_options\">\n {{ '@pry.admin.storage.label' | i18n }}\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </label>\n <pry-select\n [items]=\"storageOptions$ | async\"\n [labelTranslate]=\"true\"\n baseTranslate=\"@pry.admin.storage.options.\"\n [bindData]=\"true\"\n [itemsAsOption]=\"true\"\n formControlName=\"storage\"\n class=\"a-pry-select\"\n id=\"storage_options\"\n [readonly]=\"!!_currentClass\"\n ></pry-select>\n </div>\n <div class=\"info-icon description-container description\">\n <span class=\"info-text\">i</span>\n </div>\n <div class=\"description-tooltip info-tooltip\">\n <p class=\"a-p -date\">\n {{ '@pry.admin.storage.description.' + classForm.get('storage')?.value | i18n }}\n </p>\n </div>\n </div>\n <div class=\"m-btn-group -width-sm\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary\"\n (click)=\"goBack()\"\n [innerHTML]=\"'@pry.admin.cancel' | i18n\"\n ></button>\n <button\n class=\"a-btn a-btn--primary\"\n type=\"submit\"\n [innerHTML]=\"(_currentClass ? '@pry.admin.edit' : '@pry.admin.next') | i18n\"\n ></button>\n </div>\n</form>\n" }]
92
+ args: [{ selector: 'pry-admin-classes-form', template: "<form class=\"o-form\" [formGroup]=\"classForm\" (ngSubmit)=\"addClass()\">\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" id=\"name-label\" for=\"name\">\n {{ '@pry.admin.classes.name' | i18n }} *\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </label>\n <input\n [attr.aria-labelledby]=\"isSubmitted && classForm.get('name')?.invalid ? 'name-label name-error' : 'name-label'\"\n class=\"a-form-field\"\n formControlName=\"name\"\n id=\"name\"\n required\n type=\"text\"\n [attr.aria-invalid]=\"isSubmitted && classForm.get('name')?.invalid\"\n />\n <label\n *ngIf=\"isSubmitted && classForm.get('name')?.invalid\"\n id=\"name-error\"\n for=\"name\"\n class=\"a-label a-label--help -error\"\n >\n <span *ngIf=\"classForm.get('name')?.hasError('same-name')\">{{ '@pry.admin.exists' | i18n }}</span>\n <span *ngIf=\"classForm.get('name')?.hasError('required')\">{{ '@pry.admin.required' | i18n }}</span>\n <span *ngIf=\"classForm.get('name')?.hasError('minlength')\">{{ '@pry.admin.minLength' | i18n : { len: 3 } }}</span>\n <span *ngIf=\"classForm.get('name')?.hasError('maxlength')\">{{\n '@pry.admin.maxLength' | i18n : { len: 100 }\n }}</span>\n <span *ngIf=\"classForm.get('name')?.hasError('whitespace')\">{{ '@pry.admin.noWhitespace' | i18n }}</span>\n </label>\n </div>\n <div class=\"u-display-flex -row -no-gap -align-center\">\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" for=\"storage_options\">\n {{ '@pry.admin.storage.label' | i18n }}\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </label>\n <pry-select\n [items]=\"storageOptions$ | async\"\n i18nPrefix=\"@pry.admin.storage.options.\"\n formControlName=\"storage\"\n id=\"storage_options\"\n [readonly]=\"!!_currentClass\"\n ></pry-select>\n </div>\n <div class=\"info-icon description-container description\">\n <span class=\"info-text\">i</span>\n </div>\n <div class=\"description-tooltip info-tooltip\">\n <p class=\"a-p -date\">\n {{ '@pry.admin.storage.description.' + classForm.get('storage')?.value | i18n }}\n </p>\n </div>\n </div>\n <div class=\"m-btn-group -width-sm\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary\"\n (click)=\"goBack()\"\n [innerHTML]=\"'@pry.admin.cancel' | i18n\"\n ></button>\n <button\n class=\"a-btn a-btn--primary\"\n type=\"submit\"\n [innerHTML]=\"(_currentClass ? '@pry.admin.edit' : '@pry.admin.next') | i18n\"\n ></button>\n </div>\n</form>\n" }]
93
93
  }], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i3.UntypedFormBuilder }]; }, propDecorators: { currentClass: [{
94
94
  type: Input
95
95
  }] } });
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tY2xhc3Nlcy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2FkbWluL2NvbXBvbmVudHMvYWRtaW4tY2xhc3Nlcy9hZG1pbi1jbGFzc2VzLWZvcm0vYWRtaW4tY2xhc3Nlcy1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2FkbWluL2NvbXBvbmVudHMvYWRtaW4tY2xhc3Nlcy9hZG1pbi1jbGFzc2VzLWZvcm0vYWRtaW4tY2xhc3Nlcy1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEVBQXdDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2xGLE9BQU8sRUFBUyxZQUFZLEVBQUUsY0FBYyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkcsT0FBTyxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQWMsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7O0FBTXJFLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSx3QkFBd0I7SUFXckUsSUFBYSxZQUFZLENBQUMsR0FBVTtRQUNsQyxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQztJQUMzQixDQUFDO0lB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QyxDQUFDO2dCQUM1RSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDbEc7aUJBQU07Z0JBQ0wsV0FBVyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7Z0JBQzVCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDekYsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3ZHO1NBQ0Y7SUFDSCxDQUFDOytHQXhGVSx5QkFBeUI7bUdBQXpCLHlCQUF5QiwrSENmdEMsaTJGQXVFQTs7NEZEeERhLHlCQUF5QjtrQkFKckMsU0FBUzsrQkFDRSx3QkFBd0I7K0tBY3JCLFlBQVk7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1CdWlsZGVyLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IENsYXNzLCBDbGFzc0FjdGlvbnMsIENsYXNzU2VsZWN0b3JzLCBTdWJzY3JpcHRpb25uZXJEaXJlY3RpdmUgfSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IG5vV2hpdGVzcGFjZVZhbGlkYXRvciB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvYWRtaW4uY29tcG9uZW50JztcbmltcG9ydCB7IEFkbWluQ2xhc3NBY3Rpb25zIH0gZnJvbSAnLi4vc3RvcmUvYWRtaW4tY2xhc3MuYWN0aW9ucyc7XG5pbXBvcnQgeyBBZG1pbkNsYXNzU2VsZWN0b3JzIH0gZnJvbSAnLi4vc3RvcmUvYWRtaW4tY2xhc3Muc2VsZWN0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncHJ5LWFkbWluLWNsYXNzZXMtZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZG1pbi1jbGFzc2VzLWZvcm0uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFkbWluQ2xhc3Nlc0Zvcm1Db21wb25lbnQgZXh0ZW5kcyBTdWJzY3JpcHRpb25uZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIGNsYXNzTmFtZXMkPzogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XG4gIG5hbWVBbHJlYWR5RXhpc3RzJD86IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHN0b3JhZ2VPcHRpb25zJDogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XG5cbiAgc3ViID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGlzU3VibWl0dGVkID0gZmFsc2U7XG4gIGNsYXNzRm9ybTogVW50eXBlZEZvcm1Hcm91cDtcbiAgX2N1cnJlbnRDbGFzcz86IENsYXNzO1xuXG4gIEBJbnB1dCgpIHNldCBjdXJyZW50Q2xhc3ModmFsOiBDbGFzcykge1xuICAgIHRoaXMuX2N1cnJlbnRDbGFzcyA9IHZhbDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlPGFueT4sXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXJcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNsYXNzRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgaWQ6IFt1dWlkKCldLFxuICAgICAgbmFtZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMyksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwMCksIG5vV2hpdGVzcGFjZVZhbGlkYXRvcl1dLFxuICAgICAgZGVzY3JpcHRpb246IFt7IHZhbHVlOiAnJywgZGlzYWJsZWQ6IHRydWUgfV0sXG4gICAgICBzdG9yYWdlOiBbJ0VMQVNUSUMnXVxuICAgIH0pO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQWRtaW5DbGFzc0FjdGlvbnMuZ2V0U3RvcmFnZU9wdGlvbnMoKSk7XG4gICAgdGhpcy5zdG9yYWdlT3B0aW9ucyQgPSB0aGlzLnN0b3JlLnNlbGVjdChBZG1pbkNsYXNzU2VsZWN0b3JzLnN0b3JhZ2VPcHRpb25zKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ2xhc3NBY3Rpb25zLmxvYWQoKSk7XG4gICAgdGhpcy5jbGFzc05hbWVzJCA9IHRoaXMuc3RvcmVcbiAgICAgIC5zZWxlY3QoQ2xhc3NTZWxlY3RvcnMuY2xhc3NlcylcbiAgICAgIC5waXBlKG1hcCgoY2xhc3NlczogQ2xhc3NbXSkgPT4gY2xhc3Nlcy5tYXAoKGNsYXp6OiBDbGFzcykgPT4gY2xhenoubmFtZS50b0xvd2VyQ2FzZSgpKSkpO1xuICAgIHRoaXMubmFtZUFscmVhZHlFeGlzdHMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmNsYXNzRm9ybS5nZXQoJ25hbWUnKT8udmFsdWVDaGFuZ2VzIGFzIE9ic2VydmFibGU8c3RyaW5nPixcbiAgICAgIHRoaXMuY2xhc3NOYW1lcyRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbdmFsdWUsIGNsYXNzTmFtZXNdKSA9PiBjbGFzc05hbWVzLmluY2x1ZGVzKHZhbHVlLnRvTG93ZXJDYXNlKCkpICYmIHZhbHVlICE9IHRoaXMuX2N1cnJlbnRDbGFzcz8ubmFtZSlcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLm5hbWVBbHJlYWR5RXhpc3RzJC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIHRoaXMuY2xhc3NGb3JtLmNvbnRyb2xzWyduYW1lJ10uc2V0RXJyb3JzKHsgJ3NhbWUtbmFtZSc6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRDbGFzcykge1xuICAgICAgdGhpcy5jbGFzc0Zvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIGlkOiB0aGlzLl9jdXJyZW50Q2xhc3MuaWQsXG4gICAgICAgIG5hbWU6IHRoaXMuX2N1cnJlbnRDbGFzcy5uYW1lLFxuICAgICAgICBzdG9yYWdlOiB0aGlzLl9jdXJyZW50Q2xhc3Muc3RvcmFnZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ29CYWNrKCkge1xuICAgIGNvbnN0IHJlZGlyZWN0UGF0aCA9IHRoaXMuX2N1cnJlbnRDbGFzcyA/ICcuLi8uLicgOiAnLi4nO1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKFtyZWRpcmVjdFBhdGhdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChBZG1pbkNsYXNzQWN0aW9ucy5iYWNrKHsgcGF0aDogcGF0aC50b1N0cmluZygpIH0pKTtcbiAgfVxuXG4gIGFkZENsYXNzKCkge1xuICAgIHRoaXMuY2xhc3NGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgbmFtZTogdGhpcy5jbGFzc0Zvcm0udmFsdWUubmFtZS50cmltKClcbiAgICB9KTtcbiAgICB0aGlzLmlzU3VibWl0dGVkID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5jbGFzc0Zvcm0udmFsaWQpIHtcbiAgICAgIHRoaXMuaXNTdWJtaXR0ZWQgPSBmYWxzZTtcbiAgICAgIGxldCBjbGFzc1RvU2F2ZSA9IHRoaXMuY2xhc3NGb3JtLmdldFJhd1ZhbHVlKCk7XG4gICAgICBpZiAodGhpcy5fY3VycmVudENsYXNzKSB7XG4gICAgICAgIGNsYXNzVG9TYXZlID0ge1xuICAgICAgICAgIC4uLnRoaXMuX2N1cnJlbnRDbGFzcyxcbiAgICAgICAgICBuYW1lOiB0aGlzLmNsYXNzRm9ybS52YWx1ZS5uYW1lXG4gICAgICAgIH0gYXMgQ2xhc3M7XG4gICAgICAgIGxldCBwYXRoID0gdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZShbJy4uLy4uJ10sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChBZG1pbkNsYXNzQWN0aW9ucy5zYXZlQ2xhc3MoeyBjbGFzczogY2xhc3NUb1NhdmUsIHJvdXRlOiBwYXRoLnRvU3RyaW5nKCkgfSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xhc3NUb1NhdmUuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICBsZXQgcGF0aCA9IHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUoWycuLicsIGNsYXNzVG9TYXZlLmlkXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKEFkbWluQ2xhc3NBY3Rpb25zLnNhdmVJbnRlckNsYXNzKHsgY2xhc3M6IGNsYXNzVG9TYXZlLCByb3V0ZTogcGF0aC50b1N0cmluZygpIH0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxmb3JtIGNsYXNzPVwiby1mb3JtXCIgW2Zvcm1Hcm91cF09XCJjbGFzc0Zvcm1cIiAobmdTdWJtaXQpPVwiYWRkQ2xhc3MoKVwiPlxuICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkIC13aWR0aC1zbVwiPlxuICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBpZD1cIm5hbWUtbGFiZWxcIiBmb3I9XCJuYW1lXCI+XG4gICAgICB7eyAnQHByeS5hZG1pbi5jbGFzc2VzLm5hbWUnIHwgaTE4biB9fSAqXG4gICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+KHt7ICdAcHJ5LmFkbWluLnJlcXVpcmVkJyB8IGkxOG4gfX0pPC9zcGFuPlxuICAgIDwvbGFiZWw+XG4gICAgPGlucHV0XG4gICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiaXNTdWJtaXR0ZWQgJiYgY2xhc3NGb3JtLmdldCgnbmFtZScpPy5pbnZhbGlkID8gJ25hbWUtbGFiZWwgbmFtZS1lcnJvcicgOiAnbmFtZS1sYWJlbCdcIlxuICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiXG4gICAgICBpZD1cIm5hbWVcIlxuICAgICAgcmVxdWlyZWRcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJpc1N1Ym1pdHRlZCAmJiBjbGFzc0Zvcm0uZ2V0KCduYW1lJyk/LmludmFsaWRcIlxuICAgIC8+XG4gICAgPGxhYmVsXG4gICAgICAqbmdJZj1cImlzU3VibWl0dGVkICYmIGNsYXNzRm9ybS5nZXQoJ25hbWUnKT8uaW52YWxpZFwiXG4gICAgICBpZD1cIm5hbWUtZXJyb3JcIlxuICAgICAgZm9yPVwibmFtZVwiXG4gICAgICBjbGFzcz1cImEtbGFiZWwgYS1sYWJlbC0taGVscCAtZXJyb3JcIlxuICAgID5cbiAgICAgIDxzcGFuICpuZ0lmPVwiY2xhc3NGb3JtLmdldCgnbmFtZScpPy5oYXNFcnJvcignc2FtZS1uYW1lJylcIj57eyAnQHByeS5hZG1pbi5leGlzdHMnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiY2xhc3NGb3JtLmdldCgnbmFtZScpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPnt7ICdAcHJ5LmFkbWluLnJlcXVpcmVkJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICA8c3BhbiAqbmdJZj1cImNsYXNzRm9ybS5nZXQoJ25hbWUnKT8uaGFzRXJyb3IoJ21pbmxlbmd0aCcpXCI+e3sgJ0BwcnkuYWRtaW4ubWluTGVuZ3RoJyB8IGkxOG4gOiB7IGxlbjogMyB9IH19PC9zcGFuPlxuICAgICAgPHNwYW4gKm5nSWY9XCJjbGFzc0Zvcm0uZ2V0KCduYW1lJyk/Lmhhc0Vycm9yKCdtYXhsZW5ndGgnKVwiPnt7XG4gICAgICAgICdAcHJ5LmFkbWluLm1heExlbmd0aCcgfCBpMThuIDogeyBsZW46IDEwMCB9XG4gICAgICB9fTwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiY2xhc3NGb3JtLmdldCgnbmFtZScpPy5oYXNFcnJvcignd2hpdGVzcGFjZScpXCI+e3sgJ0BwcnkuYWRtaW4ubm9XaGl0ZXNwYWNlJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgPC9sYWJlbD5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJ1LWRpc3BsYXktZmxleCAtcm93IC1uby1nYXAgLWFsaWduLWNlbnRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGQgLXdpZHRoLXNtXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwic3RvcmFnZV9vcHRpb25zXCI+XG4gICAgICAgIHt7ICdAcHJ5LmFkbWluLnN0b3JhZ2UubGFiZWwnIHwgaTE4biB9fVxuICAgICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+KHt7ICdAcHJ5LmFkbWluLnJlcXVpcmVkJyB8IGkxOG4gfX0pPC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgIFtpdGVtc109XCJzdG9yYWdlT3B0aW9ucyQgfCBhc3luY1wiXG4gICAgICAgIFtsYWJlbFRyYW5zbGF0ZV09XCJ0cnVlXCJcbiAgICAgICAgYmFzZVRyYW5zbGF0ZT1cIkBwcnkuYWRtaW4uc3RvcmFnZS5vcHRpb25zLlwiXG4gICAgICAgIFtiaW5kRGF0YV09XCJ0cnVlXCJcbiAgICAgICAgW2l0ZW1zQXNPcHRpb25dPVwidHJ1ZVwiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cInN0b3JhZ2VcIlxuICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gICAgICAgIGlkPVwic3RvcmFnZV9vcHRpb25zXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cIiEhX2N1cnJlbnRDbGFzc1wiXG4gICAgICA+PC9wcnktc2VsZWN0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJpbmZvLWljb24gZGVzY3JpcHRpb24tY29udGFpbmVyIGRlc2NyaXB0aW9uXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImluZm8tdGV4dFwiPmk8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uLXRvb2x0aXAgaW5mby10b29sdGlwXCI+XG4gICAgICA8cCBjbGFzcz1cImEtcCAtZGF0ZVwiPlxuICAgICAgICB7eyAnQHByeS5hZG1pbi5zdG9yYWdlLmRlc2NyaXB0aW9uLicgKyBjbGFzc0Zvcm0uZ2V0KCdzdG9yYWdlJyk/LnZhbHVlIHwgaTE4biB9fVxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm0tYnRuLWdyb3VwIC13aWR0aC1zbVwiPlxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tc2Vjb25kYXJ5XCJcbiAgICAgIChjbGljayk9XCJnb0JhY2soKVwiXG4gICAgICBbaW5uZXJIVE1MXT1cIidAcHJ5LmFkbWluLmNhbmNlbCcgfCBpMThuXCJcbiAgICA+PC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeVwiXG4gICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgIFtpbm5lckhUTUxdPVwiKF9jdXJyZW50Q2xhc3MgPyAnQHByeS5hZG1pbi5lZGl0JyA6ICdAcHJ5LmFkbWluLm5leHQnKSB8IGkxOG5cIlxuICAgID48L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Zvcm0+XG4iXX0=
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tY2xhc3Nlcy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2FkbWluL2NvbXBvbmVudHMvYWRtaW4tY2xhc3Nlcy9hZG1pbi1jbGFzc2VzLWZvcm0vYWRtaW4tY2xhc3Nlcy1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2FkbWluL2NvbXBvbmVudHMvYWRtaW4tY2xhc3Nlcy9hZG1pbi1jbGFzc2VzLWZvcm0vYWRtaW4tY2xhc3Nlcy1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEVBQXdDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2xGLE9BQU8sRUFBUyxZQUFZLEVBQUUsY0FBYyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkcsT0FBTyxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQWMsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7O0FBTXJFLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSx3QkFBd0I7SUFXckUsSUFBYSxZQUFZLENBQUMsR0FBVTtRQUNsQyxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQztJQUMzQixDQUFDO0lB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QyxDQUFDO2dCQUM1RSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDbEc7aUJBQU07Z0JBQ0wsV0FBVyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7Z0JBQzVCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDekYsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3ZHO1NBQ0Y7SUFDSCxDQUFDOytHQXhGVSx5QkFBeUI7bUdBQXpCLHlCQUF5QiwrSENmdEMsNHRGQW1FQTs7NEZEcERhLHlCQUF5QjtrQkFKckMsU0FBUzsrQkFDRSx3QkFBd0I7K0tBY3JCLFlBQVk7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1CdWlsZGVyLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IENsYXNzLCBDbGFzc0FjdGlvbnMsIENsYXNzU2VsZWN0b3JzLCBTdWJzY3JpcHRpb25uZXJEaXJlY3RpdmUgfSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IG5vV2hpdGVzcGFjZVZhbGlkYXRvciB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvYWRtaW4uY29tcG9uZW50JztcbmltcG9ydCB7IEFkbWluQ2xhc3NBY3Rpb25zIH0gZnJvbSAnLi4vc3RvcmUvYWRtaW4tY2xhc3MuYWN0aW9ucyc7XG5pbXBvcnQgeyBBZG1pbkNsYXNzU2VsZWN0b3JzIH0gZnJvbSAnLi4vc3RvcmUvYWRtaW4tY2xhc3Muc2VsZWN0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncHJ5LWFkbWluLWNsYXNzZXMtZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZG1pbi1jbGFzc2VzLWZvcm0uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFkbWluQ2xhc3Nlc0Zvcm1Db21wb25lbnQgZXh0ZW5kcyBTdWJzY3JpcHRpb25uZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIGNsYXNzTmFtZXMkPzogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XG4gIG5hbWVBbHJlYWR5RXhpc3RzJD86IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHN0b3JhZ2VPcHRpb25zJDogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XG5cbiAgc3ViID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGlzU3VibWl0dGVkID0gZmFsc2U7XG4gIGNsYXNzRm9ybTogVW50eXBlZEZvcm1Hcm91cDtcbiAgX2N1cnJlbnRDbGFzcz86IENsYXNzO1xuXG4gIEBJbnB1dCgpIHNldCBjdXJyZW50Q2xhc3ModmFsOiBDbGFzcykge1xuICAgIHRoaXMuX2N1cnJlbnRDbGFzcyA9IHZhbDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlPGFueT4sXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXJcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNsYXNzRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgaWQ6IFt1dWlkKCldLFxuICAgICAgbmFtZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMyksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwMCksIG5vV2hpdGVzcGFjZVZhbGlkYXRvcl1dLFxuICAgICAgZGVzY3JpcHRpb246IFt7IHZhbHVlOiAnJywgZGlzYWJsZWQ6IHRydWUgfV0sXG4gICAgICBzdG9yYWdlOiBbJ0VMQVNUSUMnXVxuICAgIH0pO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQWRtaW5DbGFzc0FjdGlvbnMuZ2V0U3RvcmFnZU9wdGlvbnMoKSk7XG4gICAgdGhpcy5zdG9yYWdlT3B0aW9ucyQgPSB0aGlzLnN0b3JlLnNlbGVjdChBZG1pbkNsYXNzU2VsZWN0b3JzLnN0b3JhZ2VPcHRpb25zKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ2xhc3NBY3Rpb25zLmxvYWQoKSk7XG4gICAgdGhpcy5jbGFzc05hbWVzJCA9IHRoaXMuc3RvcmVcbiAgICAgIC5zZWxlY3QoQ2xhc3NTZWxlY3RvcnMuY2xhc3NlcylcbiAgICAgIC5waXBlKG1hcCgoY2xhc3NlczogQ2xhc3NbXSkgPT4gY2xhc3Nlcy5tYXAoKGNsYXp6OiBDbGFzcykgPT4gY2xhenoubmFtZS50b0xvd2VyQ2FzZSgpKSkpO1xuICAgIHRoaXMubmFtZUFscmVhZHlFeGlzdHMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmNsYXNzRm9ybS5nZXQoJ25hbWUnKT8udmFsdWVDaGFuZ2VzIGFzIE9ic2VydmFibGU8c3RyaW5nPixcbiAgICAgIHRoaXMuY2xhc3NOYW1lcyRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbdmFsdWUsIGNsYXNzTmFtZXNdKSA9PiBjbGFzc05hbWVzLmluY2x1ZGVzKHZhbHVlLnRvTG93ZXJDYXNlKCkpICYmIHZhbHVlICE9IHRoaXMuX2N1cnJlbnRDbGFzcz8ubmFtZSlcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLm5hbWVBbHJlYWR5RXhpc3RzJC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIHRoaXMuY2xhc3NGb3JtLmNvbnRyb2xzWyduYW1lJ10uc2V0RXJyb3JzKHsgJ3NhbWUtbmFtZSc6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRDbGFzcykge1xuICAgICAgdGhpcy5jbGFzc0Zvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIGlkOiB0aGlzLl9jdXJyZW50Q2xhc3MuaWQsXG4gICAgICAgIG5hbWU6IHRoaXMuX2N1cnJlbnRDbGFzcy5uYW1lLFxuICAgICAgICBzdG9yYWdlOiB0aGlzLl9jdXJyZW50Q2xhc3Muc3RvcmFnZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ29CYWNrKCkge1xuICAgIGNvbnN0IHJlZGlyZWN0UGF0aCA9IHRoaXMuX2N1cnJlbnRDbGFzcyA/ICcuLi8uLicgOiAnLi4nO1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKFtyZWRpcmVjdFBhdGhdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChBZG1pbkNsYXNzQWN0aW9ucy5iYWNrKHsgcGF0aDogcGF0aC50b1N0cmluZygpIH0pKTtcbiAgfVxuXG4gIGFkZENsYXNzKCkge1xuICAgIHRoaXMuY2xhc3NGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgbmFtZTogdGhpcy5jbGFzc0Zvcm0udmFsdWUubmFtZS50cmltKClcbiAgICB9KTtcbiAgICB0aGlzLmlzU3VibWl0dGVkID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5jbGFzc0Zvcm0udmFsaWQpIHtcbiAgICAgIHRoaXMuaXNTdWJtaXR0ZWQgPSBmYWxzZTtcbiAgICAgIGxldCBjbGFzc1RvU2F2ZSA9IHRoaXMuY2xhc3NGb3JtLmdldFJhd1ZhbHVlKCk7XG4gICAgICBpZiAodGhpcy5fY3VycmVudENsYXNzKSB7XG4gICAgICAgIGNsYXNzVG9TYXZlID0ge1xuICAgICAgICAgIC4uLnRoaXMuX2N1cnJlbnRDbGFzcyxcbiAgICAgICAgICBuYW1lOiB0aGlzLmNsYXNzRm9ybS52YWx1ZS5uYW1lXG4gICAgICAgIH0gYXMgQ2xhc3M7XG4gICAgICAgIGxldCBwYXRoID0gdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZShbJy4uLy4uJ10sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChBZG1pbkNsYXNzQWN0aW9ucy5zYXZlQ2xhc3MoeyBjbGFzczogY2xhc3NUb1NhdmUsIHJvdXRlOiBwYXRoLnRvU3RyaW5nKCkgfSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xhc3NUb1NhdmUuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICBsZXQgcGF0aCA9IHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUoWycuLicsIGNsYXNzVG9TYXZlLmlkXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKEFkbWluQ2xhc3NBY3Rpb25zLnNhdmVJbnRlckNsYXNzKHsgY2xhc3M6IGNsYXNzVG9TYXZlLCByb3V0ZTogcGF0aC50b1N0cmluZygpIH0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxmb3JtIGNsYXNzPVwiby1mb3JtXCIgW2Zvcm1Hcm91cF09XCJjbGFzc0Zvcm1cIiAobmdTdWJtaXQpPVwiYWRkQ2xhc3MoKVwiPlxuICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkIC13aWR0aC1zbVwiPlxuICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBpZD1cIm5hbWUtbGFiZWxcIiBmb3I9XCJuYW1lXCI+XG4gICAgICB7eyAnQHByeS5hZG1pbi5jbGFzc2VzLm5hbWUnIHwgaTE4biB9fSAqXG4gICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+KHt7ICdAcHJ5LmFkbWluLnJlcXVpcmVkJyB8IGkxOG4gfX0pPC9zcGFuPlxuICAgIDwvbGFiZWw+XG4gICAgPGlucHV0XG4gICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiaXNTdWJtaXR0ZWQgJiYgY2xhc3NGb3JtLmdldCgnbmFtZScpPy5pbnZhbGlkID8gJ25hbWUtbGFiZWwgbmFtZS1lcnJvcicgOiAnbmFtZS1sYWJlbCdcIlxuICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiXG4gICAgICBpZD1cIm5hbWVcIlxuICAgICAgcmVxdWlyZWRcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJpc1N1Ym1pdHRlZCAmJiBjbGFzc0Zvcm0uZ2V0KCduYW1lJyk/LmludmFsaWRcIlxuICAgIC8+XG4gICAgPGxhYmVsXG4gICAgICAqbmdJZj1cImlzU3VibWl0dGVkICYmIGNsYXNzRm9ybS5nZXQoJ25hbWUnKT8uaW52YWxpZFwiXG4gICAgICBpZD1cIm5hbWUtZXJyb3JcIlxuICAgICAgZm9yPVwibmFtZVwiXG4gICAgICBjbGFzcz1cImEtbGFiZWwgYS1sYWJlbC0taGVscCAtZXJyb3JcIlxuICAgID5cbiAgICAgIDxzcGFuICpuZ0lmPVwiY2xhc3NGb3JtLmdldCgnbmFtZScpPy5oYXNFcnJvcignc2FtZS1uYW1lJylcIj57eyAnQHByeS5hZG1pbi5leGlzdHMnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiY2xhc3NGb3JtLmdldCgnbmFtZScpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPnt7ICdAcHJ5LmFkbWluLnJlcXVpcmVkJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICA8c3BhbiAqbmdJZj1cImNsYXNzRm9ybS5nZXQoJ25hbWUnKT8uaGFzRXJyb3IoJ21pbmxlbmd0aCcpXCI+e3sgJ0BwcnkuYWRtaW4ubWluTGVuZ3RoJyB8IGkxOG4gOiB7IGxlbjogMyB9IH19PC9zcGFuPlxuICAgICAgPHNwYW4gKm5nSWY9XCJjbGFzc0Zvcm0uZ2V0KCduYW1lJyk/Lmhhc0Vycm9yKCdtYXhsZW5ndGgnKVwiPnt7XG4gICAgICAgICdAcHJ5LmFkbWluLm1heExlbmd0aCcgfCBpMThuIDogeyBsZW46IDEwMCB9XG4gICAgICB9fTwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiY2xhc3NGb3JtLmdldCgnbmFtZScpPy5oYXNFcnJvcignd2hpdGVzcGFjZScpXCI+e3sgJ0BwcnkuYWRtaW4ubm9XaGl0ZXNwYWNlJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgPC9sYWJlbD5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJ1LWRpc3BsYXktZmxleCAtcm93IC1uby1nYXAgLWFsaWduLWNlbnRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGQgLXdpZHRoLXNtXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwic3RvcmFnZV9vcHRpb25zXCI+XG4gICAgICAgIHt7ICdAcHJ5LmFkbWluLnN0b3JhZ2UubGFiZWwnIHwgaTE4biB9fVxuICAgICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+KHt7ICdAcHJ5LmFkbWluLnJlcXVpcmVkJyB8IGkxOG4gfX0pPC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgIFtpdGVtc109XCJzdG9yYWdlT3B0aW9ucyQgfCBhc3luY1wiXG4gICAgICAgIGkxOG5QcmVmaXg9XCJAcHJ5LmFkbWluLnN0b3JhZ2Uub3B0aW9ucy5cIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzdG9yYWdlXCJcbiAgICAgICAgaWQ9XCJzdG9yYWdlX29wdGlvbnNcIlxuICAgICAgICBbcmVhZG9ubHldPVwiISFfY3VycmVudENsYXNzXCJcbiAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImluZm8taWNvbiBkZXNjcmlwdGlvbi1jb250YWluZXIgZGVzY3JpcHRpb25cIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiaW5mby10ZXh0XCI+aTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb24tdG9vbHRpcCBpbmZvLXRvb2x0aXBcIj5cbiAgICAgIDxwIGNsYXNzPVwiYS1wIC1kYXRlXCI+XG4gICAgICAgIHt7ICdAcHJ5LmFkbWluLnN0b3JhZ2UuZGVzY3JpcHRpb24uJyArIGNsYXNzRm9ybS5nZXQoJ3N0b3JhZ2UnKT8udmFsdWUgfCBpMThuIH19XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwibS1idG4tZ3JvdXAgLXdpZHRoLXNtXCI+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1zZWNvbmRhcnlcIlxuICAgICAgKGNsaWNrKT1cImdvQmFjaygpXCJcbiAgICAgIFtpbm5lckhUTUxdPVwiJ0BwcnkuYWRtaW4uY2FuY2VsJyB8IGkxOG5cIlxuICAgID48L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5XCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgW2lubmVySFRNTF09XCIoX2N1cnJlbnRDbGFzcyA/ICdAcHJ5LmFkbWluLmVkaXQnIDogJ0BwcnkuYWRtaW4ubmV4dCcpIHwgaTE4blwiXG4gICAgPjwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZm9ybT5cbiJdfQ==
@@ -3,7 +3,7 @@ import { TemplatePortal } from '@angular/cdk/portal';
3
3
  import { Component, Input, TemplateRef, ViewChild } from '@angular/core';
4
4
  import { Validators } from '@angular/forms';
5
5
  import { CategoryActions, CategorySelectors, ConfigActions, DEFAULT_CATEGORY_UUID, FIELD_OPTIONS, FieldActions, FieldSelectors } from '@provoly/dashboard';
6
- import { BehaviorSubject, combineLatest, distinctUntilChanged, map, of, startWith, Subscription, switchMap } from 'rxjs';
6
+ import { BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, map, startWith, Subscription, switchMap } from 'rxjs';
7
7
  import { v4 as uuid } from 'uuid';
8
8
  import { noWhitespaceValidator } from '../../../../components/admin.component';
9
9
  import { AdminActions } from '../../../../store/admin.actions';
@@ -25,8 +25,9 @@ export class AdminAttributesFormComponent {
25
25
  this.viewContainerRef = viewContainerRef;
26
26
  this.i18nService = i18nService;
27
27
  this.sub = new Subscription();
28
- this.fieldTypeDescription = FIELD_OPTIONS;
29
28
  this.nameAlreadyExists = false;
29
+ this.technicalNameAlreadyExists = false;
30
+ this.fieldTypeDescription = FIELD_OPTIONS;
30
31
  this.isShowedCategory = false;
31
32
  this.catToAdd = {};
32
33
  this.filterCategories$ = new BehaviorSubject(undefined);
@@ -36,7 +37,11 @@ export class AdminAttributesFormComponent {
36
37
  this.categories$ = combineLatest([this.store.select(CategorySelectors.categories), this.filterCategories$]).pipe(map(([categories, filter]) => categories.filter((cat) => !filter || cat.name.toLocaleLowerCase().includes(filter.toLocaleLowerCase()))));
37
38
  this.attrForm = this.formBuilder.group({
38
39
  id: [uuid()],
39
- name: ['', [Validators.required, Validators.minLength(2), Validators.maxLength(100), noWhitespaceValidator]],
40
+ technicalName: [
41
+ '',
42
+ [Validators.required, Validators.minLength(2), Validators.maxLength(100), noWhitespaceValidator]
43
+ ],
44
+ name: ['', [Validators.maxLength(50), noWhitespaceValidator]],
40
45
  description: [{ value: '', disabled: true }],
41
46
  field: ['', [Validators.required]],
42
47
  category: [DEFAULT_CATEGORY_UUID],
@@ -45,12 +50,15 @@ export class AdminAttributesFormComponent {
45
50
  }
46
51
  ngOnInit() {
47
52
  this.attributeNames = this.interClass?.attributes.map((attr) => attr.name);
53
+ this.attributeTechnicalNames = this.interClass?.attributes.map((attr) => attr.technicalName);
48
54
  if (this.selectedClass) {
49
55
  this.attributeNames = this.selectedClass.attributes.map((attr) => attr.name);
56
+ this.attributeTechnicalNames = this.selectedClass.attributes.map((attr) => attr.technicalName);
50
57
  if (this.selectedAttribute) {
51
58
  this.attrForm.patchValue({
52
59
  id: this.selectedAttribute.id,
53
- name: this.selectedAttribute.name,
60
+ technicalName: this.selectedAttribute.technicalName,
61
+ name: this.selectedAttribute.name ?? this.selectedAttribute.technicalName,
54
62
  field: this.selectedAttribute.field,
55
63
  category: this.selectedAttribute.category
56
64
  });
@@ -58,12 +66,29 @@ export class AdminAttributesFormComponent {
58
66
  }
59
67
  }
60
68
  if (this.attributeNames) {
61
- this.nameAlreadyExists$ = combineLatest([
62
- this.attrForm.get('name')?.valueChanges,
63
- of(this.attributeNames)
64
- ]).pipe(map(([value, attributeNames]) => attributeNames.includes(value) && value != this.selectedAttribute?.name));
69
+ this.nameAlreadyExists$ = this.attrForm
70
+ .get('name')
71
+ .valueChanges.pipe(map((value) => !!this.attributeNames?.includes(value) && value != this.selectedAttribute?.name));
65
72
  this.sub.add(this.nameAlreadyExists$.subscribe((value) => (this.nameAlreadyExists = value)));
66
73
  }
74
+ this.attrForm
75
+ .get('technicalName')
76
+ .valueChanges.pipe(distinctUntilChanged(), debounceTime(500))
77
+ .subscribe((value) => {
78
+ if (!this.attrForm.get('name')?.value) {
79
+ this.attrForm.patchValue({
80
+ name: value.slice(0, 50)
81
+ });
82
+ }
83
+ });
84
+ if (this.attributeTechnicalNames) {
85
+ this.technicalNameAlreadyExists$ = this.attrForm
86
+ .get('technicalName')
87
+ .valueChanges.pipe(map((value) => !!this.attributeTechnicalNames?.includes(value) && value != this.selectedAttribute?.technicalName));
88
+ this.sub.add(this.technicalNameAlreadyExists$.subscribe((value) => {
89
+ this.technicalNameAlreadyExists = value;
90
+ }));
91
+ }
67
92
  this.selectedFieldTypeDescription$ = this.attrForm.get('field')?.valueChanges.pipe(startWith(this.attrForm.get('field')?.value), distinctUntilChanged(), switchMap((selectedFieldId) => {
68
93
  return this.fields$.pipe(map((fields) => {
69
94
  const fieldDescription = this.fieldTypeDescription.find((fieldType) => fieldType.varType === fields.find((field) => field.id === selectedFieldId)?.type);
@@ -83,6 +108,11 @@ export class AdminAttributesFormComponent {
83
108
  this.attrForm.patchValue({
84
109
  name: this.attrForm.value.name.trim()
85
110
  });
111
+ if (!this.attrForm.value.name) {
112
+ this.attrForm.patchValue({
113
+ name: this.attrForm.value.technicalName.slice(0, 50)
114
+ });
115
+ }
86
116
  if (this.attrForm.valid) {
87
117
  let attrToSave = this.attrForm.getRawValue();
88
118
  let path = this.router.createUrlTree(['..'], { relativeTo: this.route });
@@ -98,7 +128,7 @@ export class AdminAttributesFormComponent {
98
128
  }
99
129
  else if (this.interClass) {
100
130
  let interAttribute = Object.assign([], this.interClass.attributes);
101
- let interClassUpdated = Object.assign({}, this.interClass);
131
+ let interClassUpdated = { ...this.interClass };
102
132
  interAttribute.push(attrToSave);
103
133
  interClassUpdated.attributes = interAttribute;
104
134
  this.store.dispatch(AdminClassActions.saveInterClass({ class: interClassUpdated, route: path.toString() }));
@@ -138,11 +168,11 @@ export class AdminAttributesFormComponent {
138
168
  this.closeCategory();
139
169
  }
140
170
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AdminAttributesFormComponent, deps: [{ token: i1.Store }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i3.UntypedFormBuilder }, { token: i4.Overlay }, { token: i0.ViewContainerRef }, { token: i5.PryI18nService }], target: i0.ɵɵFactoryTarget.Component }); }
141
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AdminAttributesFormComponent, selector: "pry-admin-attributes-form", inputs: { selectedClass: "selectedClass", interClass: "interClass", selectedAttribute: "selectedAttribute" }, viewQueries: [{ propertyName: "template", first: true, predicate: ["template"], descendants: true, read: TemplateRef }], ngImport: i0, template: "<form class=\"o-form\" [formGroup]=\"attrForm\" (ngSubmit)=\"addAttribute()\">\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" for=\"attr_name\">{{ '@pry.admin.classes.attributes.name' | i18n }}</label>\n <input id=\"attr_name\" type=\"text\" class=\"a-form-field\" formControlName=\"name\" required />\n <label class=\"a-label a-label--help -error\" *ngIf=\"nameAlreadyExists$ | async\">{{\n '@pry.admin.exists' | i18n\n }}</label>\n <div *ngIf=\"attrForm.get('name')?.invalid\">\n <div *ngIf=\"attrForm.get('name')?.hasError('required')\">\n <label class=\"a-label a-label--help -error\" for=\"attr_name\">{{ '@pry.admin.required' | i18n }}</label>\n </div>\n <div *ngIf=\"attrForm.get('name')?.hasError('minlength')\">\n <label class=\"a-label a-label--help -error\" for=\"attr_name\">{{\n '@pry.admin.minLength' | i18n : { len: 2 }\n }}</label>\n </div>\n <div *ngIf=\"attrForm.get('name')?.hasError('maxlength')\">\n <label class=\"a-label a-label--help -error\" for=\"attr_name\">{{\n '@pry.admin.maxLength' | i18n : { len: 100 }\n }}</label>\n </div>\n <div *ngIf=\"attrForm.get('name')?.hasError('whitespace') && !attrForm.get('name')?.hasError('minlength')\">\n <label class=\"a-label a-label--help -error\" for=\"attr_name\">{{ '@pry.admin.noWhitespace' | i18n }}</label>\n </div>\n </div>\n </div>\n\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" for=\"type\">{{ '@pry.admin.classes.attributes.field' | i18n }}</label>\n <div class=\"title-container\">\n <pry-select\n id=\"type\"\n class=\"a-pry-select\"\n formControlName=\"field\"\n [items]=\"fields$ | async\"\n [itemsAsOption]=\"true\"\n [autocomplete]=\"true\"\n bindLabel=\"name\"\n bindValue=\"id\"\n [isForm]=\"true\"\n required=\"true\"\n [templateLabel]=\"templateOption\"\n [templateOption]=\"templateOption\"\n ></pry-select>\n <ng-template #templateOption let-item=\"item\">\n <div class=\"aligned-option\">\n <p>{{ item.name }}</p>\n <div class=\"a-chips\" *ngIf=\"item.crs\">{{ item.crs }}</div>\n </div>\n </ng-template>\n <ng-container *ngIf=\"selectedFieldTypeDescription$ | async as description\">\n <div class=\"info-icon description-container description\">\n <span class=\"info-text\">i</span>\n </div>\n <div class=\"description-tooltip title-tooltip\">\n <p class=\"a-p -date\">{{ description }}</p>\n </div>\n </ng-container>\n </div>\n <div *ngIf=\"attrForm.get('field')?.invalid\">\n <div *ngIf=\"attrForm.get('field')?.hasError('required')\">\n <label class=\"a-label a-label--help -error\">{{ '@pry.admin.required' | i18n }}</label>\n </div>\n </div>\n </div>\n\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" for=\"category\">{{ '@pry.admin.classes.attributes.category' | i18n }}</label>\n <pry-select\n id=\"category\"\n class=\"form-control\"\n formControlName=\"category\"\n [labelTranslate]=\"true\"\n [items]=\"categories$ | async\"\n (click)=\"showCategory()\"\n bindValue=\"id\"\n bindLabel=\"name\"\n [isForm]=\"true\"\n [readonly]=\"true\"\n ></pry-select>\n </div>\n\n <div class=\"m-btn-group -width-sm\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary\"\n (click)=\"goBack()\"\n [innerHTML]=\"'@pry.admin.cancel' | i18n\"\n ></button>\n <button\n *pryAccess=\"{ module: 'admin', page: 'classes', action: 'add_attribute' }\"\n class=\"a-btn a-btn--primary\"\n type=\"submit\"\n [disabled]=\"attrForm.invalid || nameAlreadyExists\"\n [innerHTML]=\"(selectedAttribute ? '@pry.admin.edit' : '@pry.admin.create') | i18n\"\n ></button>\n </div>\n</form>\n\n<ng-template #template>\n <div class=\"o-modal o-modal--selector\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.admin.classes.category.select' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"closeCategory()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <form (ngSubmit)=\"addCategory()\">\n <div class=\"m-form-label-field selector\">\n <label class=\"a-label\" for=\"name-search\">{{ '@pry.admin.classes.category.searchOrCreate' | i18n }}</label>\n <input\n type=\"text\"\n class=\"a-form-field\"\n (input)=\"search($event)\"\n [(ngModel)]=\"catToAdd.name\"\n name=\"name\"\n id=\"name-search\"\n />\n </div>\n\n <table class=\"a-table\">\n <caption>\n {{\n '@pry.admin.classes.category.name' | i18n\n }}\n </caption>\n <thead>\n <tr>\n <th scole=\"col\">{{ '@pry.admin.classes.category.name' | i18n }}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let cat of categories$ | async\">\n <td>\n <button type=\"button\" class=\"a-btn a-btn--ghost select-it\" (click)=\"setCategory(cat)\">\n <span class=\"u-visually-hidden\">{{ '@pry.admin.classes.category.selectIt' | i18n }}</span>\n {{ cat.name }}\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n <ng-container *ngIf=\"(categories$ | async)?.length === 0\">\n <p class=\"a-p a-p--create\">\n <strong>{{ catToAdd.name }} </strong>\n <span [innerHTML]=\"'@pry.admin.classes.category.add' | i18n\"></span>\n </p>\n <button\n type=\"submit\"\n class=\"a-btn a-btn--primary\"\n [innerHTML]=\"'@pry.admin.classes.category.create' | i18n\"\n ></button>\n </ng-container>\n </form>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.PryAccessDirective, selector: "[pryAccess]", inputs: ["pryAccess"] }, { kind: "component", type: i5.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.PrySelectComponent, selector: "pry-select", inputs: ["labelTranslate", "baseTranslate", "translationFn", "translationFnArgs", "clearable", "multiple", "multipleClearRight", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "items", "itemsAsOption", "bindData", "bindValue", "bindLabel", "bindIcon", "iconSize", "templateLabel", "templateOption", "autocomplete"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.I18nPipe, name: "i18n" }] }); }
171
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AdminAttributesFormComponent, selector: "pry-admin-attributes-form", inputs: { selectedClass: "selectedClass", interClass: "interClass", selectedAttribute: "selectedAttribute" }, viewQueries: [{ propertyName: "template", first: true, predicate: ["template"], descendants: true, read: TemplateRef }], ngImport: i0, template: "<form class=\"o-form\" [formGroup]=\"attrForm\" (ngSubmit)=\"addAttribute()\">\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" for=\"attr_technicalName\">{{ '@pry.admin.classes.attributes.technicalName' | i18n }}</label>\n <input id=\"attr_technicalName\" type=\"text\" class=\"a-form-field\" formControlName=\"technicalName\" required />\n <label class=\"a-label a-label--help -error\" *ngIf=\"technicalNameAlreadyExists$ | async\">{{\n '@pry.admin.exists' | i18n\n }}</label>\n <div *ngIf=\"attrForm.get('technicalName')?.invalid\">\n <div *ngIf=\"attrForm.get('technicalName')?.dirty && attrForm.get('technicalName')?.hasError('required')\">\n <label class=\"a-label a-label--help -error\" for=\"attr_technicalName\">{{ '@pry.admin.required' | i18n }}</label>\n </div>\n <div *ngIf=\"attrForm.get('technicalName')?.hasError('minlength')\">\n <label class=\"a-label a-label--help -error\" for=\"attr_technicalName\">{{\n '@pry.admin.minLength' | i18n : { len: 2 }\n }}</label>\n </div>\n <div *ngIf=\"attrForm.get('technicalName')?.hasError('maxlength')\">\n <label class=\"a-label a-label--help -error\" for=\"attr_technicalName\">{{\n '@pry.admin.maxLength' | i18n : { len: 100 }\n }}</label>\n </div>\n <div\n *ngIf=\"\n attrForm.get('technicalName')?.hasError('whitespace') && !attrForm.get('technicalName')?.hasError('minlength')\n \"\n >\n <label class=\"a-label a-label--help -error\" for=\"attr_technicalName\">{{\n '@pry.admin.noWhitespace' | i18n\n }}</label>\n </div>\n </div>\n </div>\n\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" for=\"attr_name\">{{ '@pry.admin.classes.attributes.name' | i18n }}</label>\n <input id=\"attr_name\" type=\"text\" class=\"a-form-field\" formControlName=\"name\" />\n <label class=\"a-label a-label--help -error\" *ngIf=\"nameAlreadyExists$ | async\">{{\n '@pry.admin.exists' | i18n\n }}</label>\n <div *ngIf=\"attrForm.get('name')?.invalid\">\n <div *ngIf=\"attrForm.get('name')?.hasError('maxlength')\">\n <label class=\"a-label a-label--help -error\" for=\"attr_name\">{{\n '@pry.admin.maxLength' | i18n : { len: 50 }\n }}</label>\n </div>\n <div *ngIf=\"attrForm.get('name')?.hasError('whitespace')\">\n <label class=\"a-label a-label--help -error\" for=\"attr_name\">{{ '@pry.admin.noWhitespace' | i18n }}</label>\n </div>\n </div>\n </div>\n\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" for=\"type\">{{ '@pry.admin.classes.attributes.field' | i18n }}</label>\n <div class=\"title-container\">\n <pry-select\n id=\"type\"\n formControlName=\"field\"\n [items]=\"fields$ | async\"\n [autocomplete]=\"true\"\n bindLabel=\"name\"\n bindValue=\"id\"\n [isForm]=\"true\"\n required=\"true\"\n [template]=\"templateOption\"\n ></pry-select>\n <ng-template #templateOption let-item=\"item\">\n <div class=\"aligned-option\">\n <p>{{ item.name }}</p>\n <div class=\"a-chips\" *ngIf=\"item.crs\">{{ item.crs }}</div>\n </div>\n </ng-template>\n <ng-container *ngIf=\"selectedFieldTypeDescription$ | async as description\">\n <div class=\"info-icon description-container description\">\n <span class=\"info-text\">i</span>\n </div>\n <div class=\"description-tooltip title-tooltip\">\n <p class=\"a-p -date\">{{ description }}</p>\n </div>\n </ng-container>\n </div>\n <div *ngIf=\"attrForm.get('field')?.invalid\">\n <div *ngIf=\"attrForm.get('field')?.dirty && attrForm.get('field')?.hasError('required')\">\n <label class=\"a-label a-label--help -error\">{{ '@pry.admin.required' | i18n }}</label>\n </div>\n </div>\n </div>\n\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" for=\"category\">{{ '@pry.admin.classes.attributes.category' | i18n }}</label>\n <pry-select\n id=\"category\"\n class=\"form-control\"\n formControlName=\"category\"\n [items]=\"categories$ | async\"\n (click)=\"showCategory()\"\n bindValue=\"id\"\n bindLabel=\"name\"\n [isForm]=\"true\"\n [readonly]=\"true\"\n ></pry-select>\n </div>\n\n <div class=\"m-btn-group -width-sm\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary\"\n (click)=\"goBack()\"\n [innerHTML]=\"'@pry.admin.cancel' | i18n\"\n ></button>\n <button\n *pryAccess=\"{ module: 'admin', page: 'classes', action: 'add_attribute' }\"\n class=\"a-btn a-btn--primary\"\n type=\"submit\"\n [disabled]=\"attrForm.invalid || nameAlreadyExists || technicalNameAlreadyExists\"\n [innerHTML]=\"(selectedAttribute ? '@pry.admin.edit' : '@pry.admin.create') | i18n\"\n ></button>\n </div>\n</form>\n\n<ng-template #template>\n <div class=\"o-modal o-modal--selector\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.admin.classes.category.select' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"closeCategory()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <form (ngSubmit)=\"addCategory()\">\n <div class=\"m-form-label-field selector\">\n <label class=\"a-label\" for=\"name-search\">{{ '@pry.admin.classes.category.searchOrCreate' | i18n }}</label>\n <input\n type=\"text\"\n class=\"a-form-field\"\n (input)=\"search($event)\"\n [(ngModel)]=\"catToAdd.name\"\n name=\"name\"\n id=\"name-search\"\n />\n </div>\n\n <table class=\"a-table\">\n <caption>\n {{\n '@pry.admin.classes.category.name' | i18n\n }}\n </caption>\n <thead>\n <tr>\n <th scole=\"col\">{{ '@pry.admin.classes.category.name' | i18n }}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let cat of categories$ | async\">\n <td>\n <button type=\"button\" class=\"a-btn a-btn--ghost select-it\" (click)=\"setCategory(cat)\">\n <span class=\"u-visually-hidden\">{{ '@pry.admin.classes.category.selectIt' | i18n }}</span>\n {{ cat.name }}\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n <ng-container *ngIf=\"(categories$ | async)?.length === 0\">\n <p class=\"a-p a-p--create\">\n <strong>{{ catToAdd.name }} </strong>\n <span [innerHTML]=\"'@pry.admin.classes.category.add' | i18n\"></span>\n </p>\n <button\n type=\"submit\"\n class=\"a-btn a-btn--primary\"\n [innerHTML]=\"'@pry.admin.classes.category.create' | i18n\"\n ></button>\n </ng-container>\n </form>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.PryAccessDirective, selector: "[pryAccess]", inputs: ["pryAccess"] }, { kind: "component", type: i5.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "elementRef"], outputs: ["searched", "cleared"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.I18nPipe, name: "i18n" }] }); }
142
172
  }
143
173
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AdminAttributesFormComponent, decorators: [{
144
174
  type: Component,
145
- args: [{ selector: 'pry-admin-attributes-form', template: "<form class=\"o-form\" [formGroup]=\"attrForm\" (ngSubmit)=\"addAttribute()\">\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" for=\"attr_name\">{{ '@pry.admin.classes.attributes.name' | i18n }}</label>\n <input id=\"attr_name\" type=\"text\" class=\"a-form-field\" formControlName=\"name\" required />\n <label class=\"a-label a-label--help -error\" *ngIf=\"nameAlreadyExists$ | async\">{{\n '@pry.admin.exists' | i18n\n }}</label>\n <div *ngIf=\"attrForm.get('name')?.invalid\">\n <div *ngIf=\"attrForm.get('name')?.hasError('required')\">\n <label class=\"a-label a-label--help -error\" for=\"attr_name\">{{ '@pry.admin.required' | i18n }}</label>\n </div>\n <div *ngIf=\"attrForm.get('name')?.hasError('minlength')\">\n <label class=\"a-label a-label--help -error\" for=\"attr_name\">{{\n '@pry.admin.minLength' | i18n : { len: 2 }\n }}</label>\n </div>\n <div *ngIf=\"attrForm.get('name')?.hasError('maxlength')\">\n <label class=\"a-label a-label--help -error\" for=\"attr_name\">{{\n '@pry.admin.maxLength' | i18n : { len: 100 }\n }}</label>\n </div>\n <div *ngIf=\"attrForm.get('name')?.hasError('whitespace') && !attrForm.get('name')?.hasError('minlength')\">\n <label class=\"a-label a-label--help -error\" for=\"attr_name\">{{ '@pry.admin.noWhitespace' | i18n }}</label>\n </div>\n </div>\n </div>\n\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" for=\"type\">{{ '@pry.admin.classes.attributes.field' | i18n }}</label>\n <div class=\"title-container\">\n <pry-select\n id=\"type\"\n class=\"a-pry-select\"\n formControlName=\"field\"\n [items]=\"fields$ | async\"\n [itemsAsOption]=\"true\"\n [autocomplete]=\"true\"\n bindLabel=\"name\"\n bindValue=\"id\"\n [isForm]=\"true\"\n required=\"true\"\n [templateLabel]=\"templateOption\"\n [templateOption]=\"templateOption\"\n ></pry-select>\n <ng-template #templateOption let-item=\"item\">\n <div class=\"aligned-option\">\n <p>{{ item.name }}</p>\n <div class=\"a-chips\" *ngIf=\"item.crs\">{{ item.crs }}</div>\n </div>\n </ng-template>\n <ng-container *ngIf=\"selectedFieldTypeDescription$ | async as description\">\n <div class=\"info-icon description-container description\">\n <span class=\"info-text\">i</span>\n </div>\n <div class=\"description-tooltip title-tooltip\">\n <p class=\"a-p -date\">{{ description }}</p>\n </div>\n </ng-container>\n </div>\n <div *ngIf=\"attrForm.get('field')?.invalid\">\n <div *ngIf=\"attrForm.get('field')?.hasError('required')\">\n <label class=\"a-label a-label--help -error\">{{ '@pry.admin.required' | i18n }}</label>\n </div>\n </div>\n </div>\n\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" for=\"category\">{{ '@pry.admin.classes.attributes.category' | i18n }}</label>\n <pry-select\n id=\"category\"\n class=\"form-control\"\n formControlName=\"category\"\n [labelTranslate]=\"true\"\n [items]=\"categories$ | async\"\n (click)=\"showCategory()\"\n bindValue=\"id\"\n bindLabel=\"name\"\n [isForm]=\"true\"\n [readonly]=\"true\"\n ></pry-select>\n </div>\n\n <div class=\"m-btn-group -width-sm\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary\"\n (click)=\"goBack()\"\n [innerHTML]=\"'@pry.admin.cancel' | i18n\"\n ></button>\n <button\n *pryAccess=\"{ module: 'admin', page: 'classes', action: 'add_attribute' }\"\n class=\"a-btn a-btn--primary\"\n type=\"submit\"\n [disabled]=\"attrForm.invalid || nameAlreadyExists\"\n [innerHTML]=\"(selectedAttribute ? '@pry.admin.edit' : '@pry.admin.create') | i18n\"\n ></button>\n </div>\n</form>\n\n<ng-template #template>\n <div class=\"o-modal o-modal--selector\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.admin.classes.category.select' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"closeCategory()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <form (ngSubmit)=\"addCategory()\">\n <div class=\"m-form-label-field selector\">\n <label class=\"a-label\" for=\"name-search\">{{ '@pry.admin.classes.category.searchOrCreate' | i18n }}</label>\n <input\n type=\"text\"\n class=\"a-form-field\"\n (input)=\"search($event)\"\n [(ngModel)]=\"catToAdd.name\"\n name=\"name\"\n id=\"name-search\"\n />\n </div>\n\n <table class=\"a-table\">\n <caption>\n {{\n '@pry.admin.classes.category.name' | i18n\n }}\n </caption>\n <thead>\n <tr>\n <th scole=\"col\">{{ '@pry.admin.classes.category.name' | i18n }}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let cat of categories$ | async\">\n <td>\n <button type=\"button\" class=\"a-btn a-btn--ghost select-it\" (click)=\"setCategory(cat)\">\n <span class=\"u-visually-hidden\">{{ '@pry.admin.classes.category.selectIt' | i18n }}</span>\n {{ cat.name }}\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n <ng-container *ngIf=\"(categories$ | async)?.length === 0\">\n <p class=\"a-p a-p--create\">\n <strong>{{ catToAdd.name }} </strong>\n <span [innerHTML]=\"'@pry.admin.classes.category.add' | i18n\"></span>\n </p>\n <button\n type=\"submit\"\n class=\"a-btn a-btn--primary\"\n [innerHTML]=\"'@pry.admin.classes.category.create' | i18n\"\n ></button>\n </ng-container>\n </form>\n </div>\n</ng-template>\n" }]
175
+ args: [{ selector: 'pry-admin-attributes-form', template: "<form class=\"o-form\" [formGroup]=\"attrForm\" (ngSubmit)=\"addAttribute()\">\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" for=\"attr_technicalName\">{{ '@pry.admin.classes.attributes.technicalName' | i18n }}</label>\n <input id=\"attr_technicalName\" type=\"text\" class=\"a-form-field\" formControlName=\"technicalName\" required />\n <label class=\"a-label a-label--help -error\" *ngIf=\"technicalNameAlreadyExists$ | async\">{{\n '@pry.admin.exists' | i18n\n }}</label>\n <div *ngIf=\"attrForm.get('technicalName')?.invalid\">\n <div *ngIf=\"attrForm.get('technicalName')?.dirty && attrForm.get('technicalName')?.hasError('required')\">\n <label class=\"a-label a-label--help -error\" for=\"attr_technicalName\">{{ '@pry.admin.required' | i18n }}</label>\n </div>\n <div *ngIf=\"attrForm.get('technicalName')?.hasError('minlength')\">\n <label class=\"a-label a-label--help -error\" for=\"attr_technicalName\">{{\n '@pry.admin.minLength' | i18n : { len: 2 }\n }}</label>\n </div>\n <div *ngIf=\"attrForm.get('technicalName')?.hasError('maxlength')\">\n <label class=\"a-label a-label--help -error\" for=\"attr_technicalName\">{{\n '@pry.admin.maxLength' | i18n : { len: 100 }\n }}</label>\n </div>\n <div\n *ngIf=\"\n attrForm.get('technicalName')?.hasError('whitespace') && !attrForm.get('technicalName')?.hasError('minlength')\n \"\n >\n <label class=\"a-label a-label--help -error\" for=\"attr_technicalName\">{{\n '@pry.admin.noWhitespace' | i18n\n }}</label>\n </div>\n </div>\n </div>\n\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" for=\"attr_name\">{{ '@pry.admin.classes.attributes.name' | i18n }}</label>\n <input id=\"attr_name\" type=\"text\" class=\"a-form-field\" formControlName=\"name\" />\n <label class=\"a-label a-label--help -error\" *ngIf=\"nameAlreadyExists$ | async\">{{\n '@pry.admin.exists' | i18n\n }}</label>\n <div *ngIf=\"attrForm.get('name')?.invalid\">\n <div *ngIf=\"attrForm.get('name')?.hasError('maxlength')\">\n <label class=\"a-label a-label--help -error\" for=\"attr_name\">{{\n '@pry.admin.maxLength' | i18n : { len: 50 }\n }}</label>\n </div>\n <div *ngIf=\"attrForm.get('name')?.hasError('whitespace')\">\n <label class=\"a-label a-label--help -error\" for=\"attr_name\">{{ '@pry.admin.noWhitespace' | i18n }}</label>\n </div>\n </div>\n </div>\n\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" for=\"type\">{{ '@pry.admin.classes.attributes.field' | i18n }}</label>\n <div class=\"title-container\">\n <pry-select\n id=\"type\"\n formControlName=\"field\"\n [items]=\"fields$ | async\"\n [autocomplete]=\"true\"\n bindLabel=\"name\"\n bindValue=\"id\"\n [isForm]=\"true\"\n required=\"true\"\n [template]=\"templateOption\"\n ></pry-select>\n <ng-template #templateOption let-item=\"item\">\n <div class=\"aligned-option\">\n <p>{{ item.name }}</p>\n <div class=\"a-chips\" *ngIf=\"item.crs\">{{ item.crs }}</div>\n </div>\n </ng-template>\n <ng-container *ngIf=\"selectedFieldTypeDescription$ | async as description\">\n <div class=\"info-icon description-container description\">\n <span class=\"info-text\">i</span>\n </div>\n <div class=\"description-tooltip title-tooltip\">\n <p class=\"a-p -date\">{{ description }}</p>\n </div>\n </ng-container>\n </div>\n <div *ngIf=\"attrForm.get('field')?.invalid\">\n <div *ngIf=\"attrForm.get('field')?.dirty && attrForm.get('field')?.hasError('required')\">\n <label class=\"a-label a-label--help -error\">{{ '@pry.admin.required' | i18n }}</label>\n </div>\n </div>\n </div>\n\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" for=\"category\">{{ '@pry.admin.classes.attributes.category' | i18n }}</label>\n <pry-select\n id=\"category\"\n class=\"form-control\"\n formControlName=\"category\"\n [items]=\"categories$ | async\"\n (click)=\"showCategory()\"\n bindValue=\"id\"\n bindLabel=\"name\"\n [isForm]=\"true\"\n [readonly]=\"true\"\n ></pry-select>\n </div>\n\n <div class=\"m-btn-group -width-sm\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary\"\n (click)=\"goBack()\"\n [innerHTML]=\"'@pry.admin.cancel' | i18n\"\n ></button>\n <button\n *pryAccess=\"{ module: 'admin', page: 'classes', action: 'add_attribute' }\"\n class=\"a-btn a-btn--primary\"\n type=\"submit\"\n [disabled]=\"attrForm.invalid || nameAlreadyExists || technicalNameAlreadyExists\"\n [innerHTML]=\"(selectedAttribute ? '@pry.admin.edit' : '@pry.admin.create') | i18n\"\n ></button>\n </div>\n</form>\n\n<ng-template #template>\n <div class=\"o-modal o-modal--selector\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.admin.classes.category.select' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"closeCategory()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <form (ngSubmit)=\"addCategory()\">\n <div class=\"m-form-label-field selector\">\n <label class=\"a-label\" for=\"name-search\">{{ '@pry.admin.classes.category.searchOrCreate' | i18n }}</label>\n <input\n type=\"text\"\n class=\"a-form-field\"\n (input)=\"search($event)\"\n [(ngModel)]=\"catToAdd.name\"\n name=\"name\"\n id=\"name-search\"\n />\n </div>\n\n <table class=\"a-table\">\n <caption>\n {{\n '@pry.admin.classes.category.name' | i18n\n }}\n </caption>\n <thead>\n <tr>\n <th scole=\"col\">{{ '@pry.admin.classes.category.name' | i18n }}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let cat of categories$ | async\">\n <td>\n <button type=\"button\" class=\"a-btn a-btn--ghost select-it\" (click)=\"setCategory(cat)\">\n <span class=\"u-visually-hidden\">{{ '@pry.admin.classes.category.selectIt' | i18n }}</span>\n {{ cat.name }}\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n <ng-container *ngIf=\"(categories$ | async)?.length === 0\">\n <p class=\"a-p a-p--create\">\n <strong>{{ catToAdd.name }} </strong>\n <span [innerHTML]=\"'@pry.admin.classes.category.add' | i18n\"></span>\n </p>\n <button\n type=\"submit\"\n class=\"a-btn a-btn--primary\"\n [innerHTML]=\"'@pry.admin.classes.category.create' | i18n\"\n ></button>\n </ng-container>\n </form>\n </div>\n</ng-template>\n" }]
146
176
  }], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i3.UntypedFormBuilder }, { type: i4.Overlay }, { type: i0.ViewContainerRef }, { type: i5.PryI18nService }]; }, propDecorators: { selectedClass: [{
147
177
  type: Input
148
178
  }], interClass: [{
@@ -153,4 +183,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
153
183
  type: ViewChild,
154
184
  args: ['template', { read: TemplateRef }]
155
185
  }] } });
156
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tYXR0cmlidXRlcy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2FkbWluL2NvbXBvbmVudHMvYWRtaW4tY2xhc3Nlcy9hZG1pbi1jbGFzc2VzLXZpZXcvYWRtaW4tYXR0cmlidXRlcy1mb3JtL2FkbWluLWF0dHJpYnV0ZXMtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9hZG1pbi9jb21wb25lbnRzL2FkbWluLWNsYXNzZXMvYWRtaW4tY2xhc3Nlcy12aWV3L2FkbWluLWF0dHJpYnV0ZXMtZm9ybS9hZG1pbi1hdHRyaWJ1dGVzLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFXLGFBQWEsRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsV0FBVyxFQUFFLFNBQVMsRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFDOUcsT0FBTyxFQUF3QyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdsRixPQUFPLEVBR0wsZUFBZSxFQUNmLGlCQUFpQixFQUVqQixhQUFhLEVBQ2IscUJBQXFCLEVBRXJCLGFBQWEsRUFDYixZQUFZLEVBQ1osY0FBYyxFQUVmLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLEdBQUcsRUFFSCxFQUFFLEVBQ0YsU0FBUyxFQUNULFlBQVksRUFDWixTQUFTLEVBQ1YsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxNQUFN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QUM7SUFDdkIsQ0FBQzsrR0ExS1UsNEJBQTRCO21HQUE1Qiw0QkFBNEIsZ1FBa0JSLFdBQVcsNkJDMUQ1Qyx1ck1BbUtBOzs0RkQzSGEsNEJBQTRCO2tCQUp4QyxTQUFTOytCQUNFLDJCQUEyQjtpUUFnQjVCLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBR3dDLFFBQVE7c0JBQXJELFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlDb25maWcsIE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQge1xuICBBdHRyaWJ1dGUsXG4gIENhdGVnb3J5LFxuICBDYXRlZ29yeUFjdGlvbnMsXG4gIENhdGVnb3J5U2VsZWN0b3JzLFxuICBDbGFzcyxcbiAgQ29uZmlnQWN0aW9ucyxcbiAgREVGQVVMVF9DQVRFR09SWV9VVUlELFxuICBGaWVsZCxcbiAgRklFTERfT1BUSU9OUyxcbiAgRmllbGRBY3Rpb25zLFxuICBGaWVsZFNlbGVjdG9ycyxcbiAgUHJ5STE4blNlcnZpY2Vcbn0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIHN0YXJ0V2l0aCxcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXBcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBub1doaXRlc3BhY2VWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9jb21wb25lbnRzL2FkbWluLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBZG1pbkFjdGlvbnMgfSBmcm9tICcuLi8uLi8uLi8uLi9zdG9yZS9hZG1pbi5hY3Rpb25zJztcbmltcG9ydCB7IEFkbWluQ2xhc3NBY3Rpb25zIH0gZnJvbSAnLi4vLi4vc3RvcmUvYWRtaW4tY2xhc3MuYWN0aW9ucyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS1hZG1pbi1hdHRyaWJ1dGVzLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vYWRtaW4tYXR0cmlidXRlcy1mb3JtLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBZG1pbkF0dHJpYnV0ZXNGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBhdHRyRm9ybTogVW50eXBlZEZvcm1Hcm91cDtcbiAgc3ViID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBuYW1lQWxyZWFkeUV4aXN0cyQ/OiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBhdHRyaWJ1dGVOYW1lcz86IHN0cmluZ1tdO1xuICBmaWVsZHMkOiBPYnNlcnZhYmxlPEZpZWxkW10+O1xuICBzZWxlY3RlZEZpZWxkVHlwZURlc2NyaXB0aW9uJD86IE9ic2VydmFibGU8c3RyaW5nIHwgdW5kZWZpbmVkPjtcbiAgZmllbGRUeXBlRGVzY3JpcHRpb24gPSBGSUVMRF9PUFRJT05TO1xuICBjYXRlZ29yaWVzJDogT2JzZXJ2YWJsZTxDYXRlZ29yeVtdPjtcbiAgbmFtZUFscmVhZHlFeGlzdHMgPSBmYWxzZTtcbiAgaXNTaG93ZWRDYXRlZ29yeSA9IGZhbHNlO1xuICBjYXRUb0FkZCA9IHt9IGFzIENhdGVnb3J5O1xuXG4gIEBJbnB1dCgpIHNlbGVjdGVkQ2xhc3M/OiBDbGFzcztcbiAgQElucHV0KCkgaW50ZXJDbGFzcz86IENsYXNzO1xuICBASW5wdXQoKSBzZWxlY3RlZEF0dHJpYnV0ZT86IEF0dHJpYnV0ZTtcblxuICBwcml2YXRlIG92ZXJsYXlSZWY/OiBPdmVybGF5UmVmO1xuICBAVmlld0NoaWxkKCd0ZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgdGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBwcml2YXRlIGZpbHRlckNhdGVnb3JpZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmU8YW55PixcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgaTE4blNlcnZpY2U6IFByeUkxOG5TZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRmllbGRBY3Rpb25zLmxvYWQoKSk7XG4gICAgdGhpcy5maWVsZHMkID0gdGhpcy5zdG9yZS5zZWxlY3QoRmllbGRTZWxlY3RvcnMuZmllbGRzKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENhdGVnb3J5QWN0aW9ucy5sb2FkKCkpO1xuICAgIHRoaXMuY2F0ZWdvcmllcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnN0b3JlLnNlbGVjdChDYXRlZ29yeVNlbGVjdG9ycy5jYXRlZ29yaWVzKSwgdGhpcy5maWx0ZXJDYXRlZ29yaWVzJF0pLnBpcGUoXG4gICAgICBtYXAoKFtjYXRlZ29yaWVzLCBmaWx0ZXJdKSA9PlxuICAgICAgICBjYXRlZ29yaWVzLmZpbHRlcigoY2F0KSA9PiAhZmlsdGVyIHx8IGNhdC5uYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyLnRvTG9jYWxlTG93ZXJDYXNlKCkpKVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLmF0dHJGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBpZDogW3V1aWQoKV0sXG4gICAgICBuYW1lOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgyKSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTAwKSwgbm9XaGl0ZXNwYWNlVmFsaWRhdG9yXV0sXG4gICAgICBkZXNjcmlwdGlvbjogW3sgdmFsdWU6ICcnLCBkaXNhYmxlZDogdHJ1ZSB9XSxcbiAgICAgIGZpZWxkOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBjYXRlZ29yeTogW0RFRkFVTFRfQ0FURUdPUllfVVVJRF0sXG4gICAgICBtdWx0aVZhbHVlZDogW2ZhbHNlXVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hdHRyaWJ1dGVOYW1lcyA9IHRoaXMuaW50ZXJDbGFzcz8uYXR0cmlidXRlcy5tYXAoKGF0dHI6IEF0dHJpYnV0ZSkgPT4gYXR0ci5uYW1lKTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGVkQ2xhc3MpIHtcbiAgICAgIHRoaXMuYXR0cmlidXRlTmFtZXMgPSB0aGlzLnNlbGVjdGVkQ2xhc3MuYXR0cmlidXRlcy5tYXAoKGF0dHI6IEF0dHJpYnV0ZSkgPT4gYXR0ci5uYW1lKTtcblxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGUpIHtcbiAgICAgICAgdGhpcy5hdHRyRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICBpZDogdGhpcy5zZWxlY3RlZEF0dHJpYnV0ZS5pZCxcbiAgICAgICAgICBuYW1lOiB0aGlzLnNlbGVjdGVkQXR0cmlidXRlLm5hbWUsXG4gICAgICAgICAgZmllbGQ6IHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGUuZmllbGQsXG4gICAgICAgICAgY2F0ZWdvcnk6IHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGUuY2F0ZWdvcnlcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYXR0ckZvcm0uY29udHJvbHNbJ2ZpZWxkJ10uZGlzYWJsZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmF0dHJpYnV0ZU5hbWVzKSB7XG4gICAgICB0aGlzLm5hbWVBbHJlYWR5RXhpc3RzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLmF0dHJGb3JtLmdldCgnbmFtZScpPy52YWx1ZUNoYW5nZXMgYXMgT2JzZXJ2YWJsZTxzdHJpbmc+LFxuICAgICAgICBvZih0aGlzLmF0dHJpYnV0ZU5hbWVzKVxuICAgICAgXSkucGlwZShcbiAgICAgICAgbWFwKChbdmFsdWUsIGF0dHJpYnV0ZU5hbWVzXSkgPT4gYXR0cmlidXRlTmFtZXMuaW5jbHVkZXModmFsdWUpICYmIHZhbHVlICE9IHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGU/Lm5hbWUpXG4gICAgICApO1xuICAgICAgdGhpcy5zdWIuYWRkKHRoaXMubmFtZUFscmVhZHlFeGlzdHMkLnN1YnNjcmliZSgodmFsdWUpID0+ICh0aGlzLm5hbWVBbHJlYWR5RXhpc3RzID0gdmFsdWUpKSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZEZpZWxkVHlwZURlc2NyaXB0aW9uJCA9IHRoaXMuYXR0ckZvcm0uZ2V0KCdmaWVsZCcpPy52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIHN0YXJ0V2l0aCh0aGlzLmF0dHJGb3JtLmdldCgnZmllbGQnKT8udmFsdWUpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHN3aXRjaE1hcCgoc2VsZWN0ZWRGaWVsZElkKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkcyQucGlwZShcbiAgICAgICAgICBtYXAoKGZpZWxkcykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmllbGREZXNjcmlwdGlvbiA9IHRoaXMuZmllbGRUeXBlRGVzY3JpcHRpb24uZmluZChcbiAgICAgICAgICAgICAgKGZpZWxkVHlwZSkgPT4gZmllbGRUeXBlLnZhclR5cGUgPT09IGZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQuaWQgPT09IHNlbGVjdGVkRmllbGRJZCk/LnR5cGVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gZmllbGREZXNjcmlwdGlvbiA/IHRoaXMuaTE4blNlcnZpY2UuaW5zdGFudChmaWVsZERlc2NyaXB0aW9uLmRlc2NyaXB0aW9uKSA6ICcnO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1Yi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgZ29CYWNrKCkge1xuICAgIGNvbnN0IHJlZGlyZWN0UGF0aCA9IHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGUgPyAnLi4vLi4nIDogJy4uJztcbiAgICBjb25zdCBwYXRoID0gdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZShbcmVkaXJlY3RQYXRoXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQWRtaW5BY3Rpb25zLnJvdXRlVG8oeyBwYXRoOiBwYXRoLnRvU3RyaW5nKCkgfSkpO1xuICB9XG5cbiAgYWRkQXR0cmlidXRlKCkge1xuICAgIHRoaXMuYXR0ckZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICBuYW1lOiB0aGlzLmF0dHJGb3JtLnZhbHVlLm5hbWUudHJpbSgpXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5hdHRyRm9ybS52YWxpZCkge1xuICAgICAgbGV0IGF0dHJUb1NhdmUgPSB0aGlzLmF0dHJGb3JtLmdldFJhd1ZhbHVlKCkgYXMgQXR0cmlidXRlO1xuICAgICAgbGV0IHBhdGggPSB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKFsnLi4nXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEF0dHJpYnV0ZSkge1xuICAgICAgICBwYXRoID0gdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZShbJy4uLy4uJ10sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDbGFzcykge1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgIEFkbWluQ2xhc3NBY3Rpb25zLnNhdmVBdHRyaWJ1dGVGb3JDbGFzcyh7XG4gICAgICAgICAgICBjbGFzc0lkOiB0aGlzLnNlbGVjdGVkQ2xhc3MuaWQsXG4gICAgICAgICAgICBhdHRyaWJ1dGU6IGF0dHJUb1NhdmUsXG4gICAgICAgICAgICByb3V0ZTogcGF0aC50b1N0cmluZygpXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pbnRlckNsYXNzKSB7XG4gICAgICAgIGxldCBpbnRlckF0dHJpYnV0ZSA9IE9iamVjdC5hc3NpZ24oW10sIHRoaXMuaW50ZXJDbGFzcy5hdHRyaWJ1dGVzKTtcbiAgICAgICAgbGV0IGludGVyQ2xhc3NVcGRhdGVkID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5pbnRlckNsYXNzKTtcbiAgICAgICAgaW50ZXJBdHRyaWJ1dGUucHVzaChhdHRyVG9TYXZlKTtcbiAgICAgICAgaW50ZXJDbGFzc1VwZGF0ZWQuYXR0cmlidXRlcyA9IGludGVyQXR0cmlidXRlO1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKEFkbWluQ2xhc3NBY3Rpb25zLnNhdmVJbnRlckNsYXNzKHsgY2xhc3M6IGludGVyQ2xhc3NVcGRhdGVkLCByb3V0ZTogcGF0aC50b1N0cmluZygpIH0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzaG93Q2F0ZWdvcnkoKSB7XG4gICAgdGhpcy5pc1Nob3dlZENhdGVnb3J5ID0gdHJ1ZTtcbiAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKFxuICAgICAgbmV3IE92ZXJsYXlDb25maWcoe1xuICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcbiAgICAgICAgcGFuZWxDbGFzczogWydvLW1vZGFsLXdyYXBwZXInXSxcbiAgICAgICAgYmFja2Ryb3BDbGFzczogJ2JhY2tkcm9wJ1xuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ29uZmlnQWN0aW9ucy5hZGRpbmdPdmVybGF5KHsgaWQ6IHRoaXMuY29uc3RydWN0b3IubmFtZSB9KSk7XG4gICAgdGhpcy5vdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKS5zdWJzY3JpYmUoKF8pID0+IHRoaXMuY2xvc2VDYXRlZ29yeSgpKTtcbiAgICB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKG5ldyBUZW1wbGF0ZVBvcnRhbCh0aGlzLnRlbXBsYXRlLCB0aGlzLnZpZXdDb250YWluZXJSZWYpKTtcbiAgfVxuXG4gIGNsb3NlQ2F0ZWdvcnkoKSB7XG4gICAgdGhpcy5pc1Nob3dlZENhdGVnb3J5ID0gZmFsc2U7XG4gICAgdGhpcy5jYXRUb0FkZCA9IHt9IGFzIENhdGVnb3J5O1xuICAgIHRoaXMub3ZlcmxheVJlZj8uZGlzcG9zZSgpO1xuICAgIHRoaXMuY2F0ZWdvcmllcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChDYXRlZ29yeVNlbGVjdG9ycy5jYXRlZ29yaWVzKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMuY2xvc2VPdmVybGF5KHsgaWQ6IHRoaXMuY29uc3RydWN0b3IubmFtZSB9KSk7XG4gIH1cblxuICBzZWFyY2goZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZmlsdGVyQ2F0ZWdvcmllcyQubmV4dChldmVudC50YXJnZXQudmFsdWUpO1xuICB9XG5cbiAgYWRkQ2F0ZWdvcnkoKSB7XG4gICAgdGhpcy5jYXRUb0FkZC5pZCA9IHV1aWQoKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKEFkbWluQ2xhc3NBY3Rpb25zLnNhdmVDYXRlZ29yeSh7IGNhdGVnb3J5OiB0aGlzLmNhdFRvQWRkIH0pKTtcbiAgICB0aGlzLnNldENhdGVnb3J5KHRoaXMuY2F0VG9BZGQpO1xuICB9XG5cbiAgc2V0Q2F0ZWdvcnkoY2F0OiBDYXRlZ29yeSkge1xuICAgIHRoaXMuYXR0ckZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICBjYXRlZ29yeTogY2F0LmlkXG4gICAgfSk7XG4gICAgdGhpcy5jbG9zZUNhdGVnb3J5KCk7XG4gIH1cbn1cbiIsIjxmb3JtIGNsYXNzPVwiby1mb3JtXCIgW2Zvcm1Hcm91cF09XCJhdHRyRm9ybVwiIChuZ1N1Ym1pdCk9XCJhZGRBdHRyaWJ1dGUoKVwiPlxuICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkIC13aWR0aC1zbVwiPlxuICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJhdHRyX25hbWVcIj57eyAnQHByeS5hZG1pbi5jbGFzc2VzLmF0dHJpYnV0ZXMubmFtZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICA8aW5wdXQgaWQ9XCJhdHRyX25hbWVcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCIgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiIHJlcXVpcmVkIC8+XG4gICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbCBhLWxhYmVsLS1oZWxwIC1lcnJvclwiICpuZ0lmPVwibmFtZUFscmVhZHlFeGlzdHMkIHwgYXN5bmNcIj57e1xuICAgICAgJ0BwcnkuYWRtaW4uZXhpc3RzJyB8IGkxOG5cbiAgICB9fTwvbGFiZWw+XG4gICAgPGRpdiAqbmdJZj1cImF0dHJGb3JtLmdldCgnbmFtZScpPy5pbnZhbGlkXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwiYXR0ckZvcm0uZ2V0KCduYW1lJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWwgYS1sYWJlbC0taGVscCAtZXJyb3JcIiBmb3I9XCJhdHRyX25hbWVcIj57eyAnQHByeS5hZG1pbi5yZXF1aXJlZCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cImF0dHJGb3JtLmdldCgnbmFtZScpPy5oYXNFcnJvcignbWlubGVuZ3RoJylcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbCBhLWxhYmVsLS1oZWxwIC1lcnJvclwiIGZvcj1cImF0dHJfbmFtZVwiPnt7XG4gICAgICAgICAgJ0BwcnkuYWRtaW4ubWluTGVuZ3RoJyB8IGkxOG4gOiB7IGxlbjogMiB9XG4gICAgICAgIH19PC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cImF0dHJGb3JtLmdldCgnbmFtZScpPy5oYXNFcnJvcignbWF4bGVuZ3RoJylcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbCBhLWxhYmVsLS1oZWxwIC1lcnJvclwiIGZvcj1cImF0dHJfbmFtZVwiPnt7XG4gICAgICAgICAgJ0BwcnkuYWRtaW4ubWF4TGVuZ3RoJyB8IGkxOG4gOiB7IGxlbjogMTAwIH1cbiAgICAgICAgfX08L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiYXR0ckZvcm0uZ2V0KCduYW1lJyk/Lmhhc0Vycm9yKCd3aGl0ZXNwYWNlJykgJiYgIWF0dHJGb3JtLmdldCgnbmFtZScpPy5oYXNFcnJvcignbWlubGVuZ3RoJylcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbCBhLWxhYmVsLS1oZWxwIC1lcnJvclwiIGZvcj1cImF0dHJfbmFtZVwiPnt7ICdAcHJ5LmFkbWluLm5vV2hpdGVzcGFjZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkIC13aWR0aC1zbVwiPlxuICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJ0eXBlXCI+e3sgJ0BwcnkuYWRtaW4uY2xhc3Nlcy5hdHRyaWJ1dGVzLmZpZWxkJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1jb250YWluZXJcIj5cbiAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgIGlkPVwidHlwZVwiXG4gICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZmllbGRcIlxuICAgICAgICBbaXRlbXNdPVwiZmllbGRzJCB8IGFzeW5jXCJcbiAgICAgICAgW2l0ZW1zQXNPcHRpb25dPVwidHJ1ZVwiXG4gICAgICAgIFthdXRvY29tcGxldGVdPVwidHJ1ZVwiXG4gICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgIFtpc0Zvcm1dPVwidHJ1ZVwiXG4gICAgICAgIHJlcXVpcmVkPVwidHJ1ZVwiXG4gICAgICAgIFt0ZW1wbGF0ZUxhYmVsXT1cInRlbXBsYXRlT3B0aW9uXCJcbiAgICAgICAgW3RlbXBsYXRlT3B0aW9uXT1cInRlbXBsYXRlT3B0aW9uXCJcbiAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICA8bmctdGVtcGxhdGUgI3RlbXBsYXRlT3B0aW9uIGxldC1pdGVtPVwiaXRlbVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWxpZ25lZC1vcHRpb25cIj5cbiAgICAgICAgICA8cD57eyBpdGVtLm5hbWUgfX08L3A+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImEtY2hpcHNcIiAqbmdJZj1cIml0ZW0uY3JzXCI+e3sgaXRlbS5jcnMgfX08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkRmllbGRUeXBlRGVzY3JpcHRpb24kIHwgYXN5bmMgYXMgZGVzY3JpcHRpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImluZm8taWNvbiBkZXNjcmlwdGlvbi1jb250YWluZXIgZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImluZm8tdGV4dFwiPmk8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb24tdG9vbHRpcCB0aXRsZS10b29sdGlwXCI+XG4gICAgICAgICAgPHAgY2xhc3M9XCJhLXAgLWRhdGVcIj57eyBkZXNjcmlwdGlvbiB9fTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiYXR0ckZvcm0uZ2V0KCdmaWVsZCcpPy5pbnZhbGlkXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwiYXR0ckZvcm0uZ2V0KCdmaWVsZCcpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsIGEtbGFiZWwtLWhlbHAgLWVycm9yXCI+e3sgJ0BwcnkuYWRtaW4ucmVxdWlyZWQnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZCAtd2lkdGgtc21cIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY2F0ZWdvcnlcIj57eyAnQHByeS5hZG1pbi5jbGFzc2VzLmF0dHJpYnV0ZXMuY2F0ZWdvcnknIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgPHByeS1zZWxlY3RcbiAgICAgIGlkPVwiY2F0ZWdvcnlcIlxuICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY2F0ZWdvcnlcIlxuICAgICAgW2xhYmVsVHJhbnNsYXRlXT1cInRydWVcIlxuICAgICAgW2l0ZW1zXT1cImNhdGVnb3JpZXMkIHwgYXN5bmNcIlxuICAgICAgKGNsaWNrKT1cInNob3dDYXRlZ29yeSgpXCJcbiAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgW2lzRm9ybV09XCJ0cnVlXCJcbiAgICAgIFtyZWFkb25seV09XCJ0cnVlXCJcbiAgICA+PC9wcnktc2VsZWN0PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibS1idG4tZ3JvdXAgLXdpZHRoLXNtXCI+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1zZWNvbmRhcnlcIlxuICAgICAgKGNsaWNrKT1cImdvQmFjaygpXCJcbiAgICAgIFtpbm5lckhUTUxdPVwiJ0BwcnkuYWRtaW4uY2FuY2VsJyB8IGkxOG5cIlxuICAgID48L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICAqcHJ5QWNjZXNzPVwieyBtb2R1bGU6ICdhZG1pbicsIHBhZ2U6ICdjbGFzc2VzJywgYWN0aW9uOiAnYWRkX2F0dHJpYnV0ZScgfVwiXG4gICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5XCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgW2Rpc2FibGVkXT1cImF0dHJGb3JtLmludmFsaWQgfHwgbmFtZUFscmVhZHlFeGlzdHNcIlxuICAgICAgW2lubmVySFRNTF09XCIoc2VsZWN0ZWRBdHRyaWJ1dGUgPyAnQHByeS5hZG1pbi5lZGl0JyA6ICdAcHJ5LmFkbWluLmNyZWF0ZScpIHwgaTE4blwiXG4gICAgPjwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZm9ybT5cblxuPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cIm8tbW9kYWwgby1tb2RhbC0tc2VsZWN0b3JcIj5cbiAgICA8ZGl2IGNsYXNzPVwiby1tb2RhbF9fdG9wXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1tb2RhbF9fdG9wX190aXRsZVwiPlxuICAgICAgICA8aDIgY2xhc3M9XCJhLWgyXCIgaWQ9XCJkaWFsb2dfdGl0bGVcIj5cbiAgICAgICAgICB7eyAnQHByeS5hZG1pbi5jbGFzc2VzLmNhdGVnb3J5LnNlbGVjdCcgfCBpMThuIH19XG4gICAgICAgIDwvaDI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLW1vZGFsX190b3BfX2Nsb3NlXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhLWJ0biBhLWJ0bi0taWNvbi1vbmx5XCIgKGNsaWNrKT1cImNsb3NlQ2F0ZWdvcnkoKVwiPlxuICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiY2xvc2VcIiBbaGVpZ2h0XT1cIjM1XCIgW3dpZHRoXT1cIjM1XCI+PC9wcnktaWNvbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0BwcnkudG9vbGJveC5jbG9zZScgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxmb3JtIChuZ1N1Ym1pdCk9XCJhZGRDYXRlZ29yeSgpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkIHNlbGVjdG9yXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJuYW1lLXNlYXJjaFwiPnt7ICdAcHJ5LmFkbWluLmNsYXNzZXMuY2F0ZWdvcnkuc2VhcmNoT3JDcmVhdGUnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgKGlucHV0KT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImNhdFRvQWRkLm5hbWVcIlxuICAgICAgICAgIG5hbWU9XCJuYW1lXCJcbiAgICAgICAgICBpZD1cIm5hbWUtc2VhcmNoXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8dGFibGUgY2xhc3M9XCJhLXRhYmxlXCI+XG4gICAgICAgIDxjYXB0aW9uPlxuICAgICAgICAgIHt7XG4gICAgICAgICAgICAnQHByeS5hZG1pbi5jbGFzc2VzLmNhdGVnb3J5Lm5hbWUnIHwgaTE4blxuICAgICAgICAgIH19XG4gICAgICAgIDwvY2FwdGlvbj5cbiAgICAgICAgPHRoZWFkPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0aCBzY29sZT1cImNvbFwiPnt7ICdAcHJ5LmFkbWluLmNsYXNzZXMuY2F0ZWdvcnkubmFtZScgfCBpMThuIH19PC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBjYXQgb2YgY2F0ZWdvcmllcyQgfCBhc3luY1wiPlxuICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1naG9zdCBzZWxlY3QtaXRcIiAoY2xpY2spPVwic2V0Q2F0ZWdvcnkoY2F0KVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj57eyAnQHByeS5hZG1pbi5jbGFzc2VzLmNhdGVnb3J5LnNlbGVjdEl0JyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAge3sgY2F0Lm5hbWUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihjYXRlZ29yaWVzJCB8IGFzeW5jKT8ubGVuZ3RoID09PSAwXCI+XG4gICAgICAgIDxwIGNsYXNzPVwiYS1wIGEtcC0tY3JlYXRlXCI+XG4gICAgICAgICAgPHN0cm9uZz57eyBjYXRUb0FkZC5uYW1lIH19IDwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiJ0BwcnkuYWRtaW4uY2xhc3Nlcy5jYXRlZ29yeS5hZGQnIHwgaTE4blwiPjwvc3Bhbj5cbiAgICAgICAgPC9wPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeVwiXG4gICAgICAgICAgW2lubmVySFRNTF09XCInQHByeS5hZG1pbi5jbGFzc2VzLmNhdGVnb3J5LmNyZWF0ZScgfCBpMThuXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9mb3JtPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tYXR0cmlidXRlcy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2FkbWluL2NvbXBvbmVudHMvYWRtaW4tY2xhc3Nlcy9hZG1pbi1jbGFzc2VzLXZpZXcvYWRtaW4tYXR0cmlidXRlcy1mb3JtL2FkbWluLWF0dHJpYnV0ZXMtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9hZG1pbi9jb21wb25lbnRzL2FkbWluLWNsYXNzZXMvYWRtaW4tY2xhc3Nlcy12aWV3L2FkbWluLWF0dHJpYnV0ZXMtZm9ybS9hZG1pbi1hdHRyaWJ1dGVzLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFXLGFBQWEsRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsV0FBVyxFQUFFLFNBQVMsRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFDOUcsT0FBTyxFQUF3QyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdsRixPQUFPLEVBR0wsZUFBZSxFQUNmLGlCQUFpQixFQUVqQixhQUFhLEVBQ2IscUJBQXFCLEVBRXJCLGFBQWEsRUFDYixZQUFZLEVBQ1osY0FBYyxFQUVmLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2IsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixHQUFHLEVBRUgsU0FBUyxFQUNULFlBQVksRUFDWixTQUFTLEVBQ1YsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxNQUFN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SSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFhO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1lBQ3ZCLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBRTtTQUNqQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQzsrR0FyTlUsNEJBQTRCO21HQUE1Qiw0QkFBNEIsZ1FBdUJSLFdBQVcsNkJDL0Q1Qyw0c09BdUxBOzs0RkQvSWEsNEJBQTRCO2tCQUp4QyxTQUFTOytCQUNFLDJCQUEyQjtpUUFxQjVCLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBR3dDLFFBQVE7c0JBQXJELFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlDb25maWcsIE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQge1xuICBBdHRyaWJ1dGUsXG4gIENhdGVnb3J5LFxuICBDYXRlZ29yeUFjdGlvbnMsXG4gIENhdGVnb3J5U2VsZWN0b3JzLFxuICBDbGFzcyxcbiAgQ29uZmlnQWN0aW9ucyxcbiAgREVGQVVMVF9DQVRFR09SWV9VVUlELFxuICBGaWVsZCxcbiAgRklFTERfT1BUSU9OUyxcbiAgRmllbGRBY3Rpb25zLFxuICBGaWVsZFNlbGVjdG9ycyxcbiAgUHJ5STE4blNlcnZpY2Vcbn0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZGVib3VuY2VUaW1lLFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBzdGFydFdpdGgsXG4gIFN1YnNjcmlwdGlvbixcbiAgc3dpdGNoTWFwXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IHsgbm9XaGl0ZXNwYWNlVmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29tcG9uZW50cy9hZG1pbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWRtaW5BY3Rpb25zIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3RvcmUvYWRtaW4uYWN0aW9ucyc7XG5pbXBvcnQgeyBBZG1pbkNsYXNzQWN0aW9ucyB9IGZyb20gJy4uLy4uL3N0b3JlL2FkbWluLWNsYXNzLmFjdGlvbnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktYWRtaW4tYXR0cmlidXRlcy1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkbWluLWF0dHJpYnV0ZXMtZm9ybS5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQWRtaW5BdHRyaWJ1dGVzRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgYXR0ckZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG4gIHN1YiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBhdHRyaWJ1dGVOYW1lcz86IHN0cmluZ1tdO1xuICBhdHRyaWJ1dGVUZWNobmljYWxOYW1lcz86IHN0cmluZ1tdO1xuICBuYW1lQWxyZWFkeUV4aXN0cyQ/OiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICB0ZWNobmljYWxOYW1lQWxyZWFkeUV4aXN0cyQ/OiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBuYW1lQWxyZWFkeUV4aXN0cyA9IGZhbHNlO1xuICB0ZWNobmljYWxOYW1lQWxyZWFkeUV4aXN0cyA9IGZhbHNlO1xuXG4gIGZpZWxkcyQ6IE9ic2VydmFibGU8RmllbGRbXT47XG4gIHNlbGVjdGVkRmllbGRUeXBlRGVzY3JpcHRpb24kPzogT2JzZXJ2YWJsZTxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICBmaWVsZFR5cGVEZXNjcmlwdGlvbiA9IEZJRUxEX09QVElPTlM7XG4gIGNhdGVnb3JpZXMkOiBPYnNlcnZhYmxlPENhdGVnb3J5W10+O1xuICBpc1Nob3dlZENhdGVnb3J5ID0gZmFsc2U7XG4gIGNhdFRvQWRkID0ge30gYXMgQ2F0ZWdvcnk7XG5cbiAgQElucHV0KCkgc2VsZWN0ZWRDbGFzcz86IENsYXNzO1xuICBASW5wdXQoKSBpbnRlckNsYXNzPzogQ2xhc3M7XG4gIEBJbnB1dCgpIHNlbGVjdGVkQXR0cmlidXRlPzogQXR0cmlidXRlO1xuXG4gIHByaXZhdGUgb3ZlcmxheVJlZj86IE92ZXJsYXlSZWY7XG4gIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSB0ZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XG4gIHByaXZhdGUgZmlsdGVyQ2F0ZWdvcmllcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZTxhbnk+LFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBpMThuU2VydmljZTogUHJ5STE4blNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChGaWVsZEFjdGlvbnMubG9hZCgpKTtcbiAgICB0aGlzLmZpZWxkcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChGaWVsZFNlbGVjdG9ycy5maWVsZHMpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ2F0ZWdvcnlBY3Rpb25zLmxvYWQoKSk7XG4gICAgdGhpcy5jYXRlZ29yaWVzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuc3RvcmUuc2VsZWN0KENhdGVnb3J5U2VsZWN0b3JzLmNhdGVnb3JpZXMpLCB0aGlzLmZpbHRlckNhdGVnb3JpZXMkXSkucGlwZShcbiAgICAgIG1hcCgoW2NhdGVnb3JpZXMsIGZpbHRlcl0pID0+XG4gICAgICAgIGNhdGVnb3JpZXMuZmlsdGVyKChjYXQpID0+ICFmaWx0ZXIgfHwgY2F0Lm5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXIudG9Mb2NhbGVMb3dlckNhc2UoKSkpXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuYXR0ckZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGlkOiBbdXVpZCgpXSxcbiAgICAgIHRlY2huaWNhbE5hbWU6IFtcbiAgICAgICAgJycsXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgyKSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTAwKSwgbm9XaGl0ZXNwYWNlVmFsaWRhdG9yXVxuICAgICAgXSxcbiAgICAgIG5hbWU6IFsnJywgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDUwKSwgbm9XaGl0ZXNwYWNlVmFsaWRhdG9yXV0sXG4gICAgICBkZXNjcmlwdGlvbjogW3sgdmFsdWU6ICcnLCBkaXNhYmxlZDogdHJ1ZSB9XSxcbiAgICAgIGZpZWxkOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBjYXRlZ29yeTogW0RFRkFVTFRfQ0FURUdPUllfVVVJRF0sXG4gICAgICBtdWx0aVZhbHVlZDogW2ZhbHNlXVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hdHRyaWJ1dGVOYW1lcyA9IHRoaXMuaW50ZXJDbGFzcz8uYXR0cmlidXRlcy5tYXAoKGF0dHI6IEF0dHJpYnV0ZSkgPT4gYXR0ci5uYW1lKTtcbiAgICB0aGlzLmF0dHJpYnV0ZVRlY2huaWNhbE5hbWVzID0gdGhpcy5pbnRlckNsYXNzPy5hdHRyaWJ1dGVzLm1hcCgoYXR0cjogQXR0cmlidXRlKSA9PiBhdHRyLnRlY2huaWNhbE5hbWUpO1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDbGFzcykge1xuICAgICAgdGhpcy5hdHRyaWJ1dGVOYW1lcyA9IHRoaXMuc2VsZWN0ZWRDbGFzcy5hdHRyaWJ1dGVzLm1hcCgoYXR0cjogQXR0cmlidXRlKSA9PiBhdHRyLm5hbWUpO1xuICAgICAgdGhpcy5hdHRyaWJ1dGVUZWNobmljYWxOYW1lcyA9IHRoaXMuc2VsZWN0ZWRDbGFzcy5hdHRyaWJ1dGVzLm1hcCgoYXR0cjogQXR0cmlidXRlKSA9PiBhdHRyLnRlY2huaWNhbE5hbWUpO1xuXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEF0dHJpYnV0ZSkge1xuICAgICAgICB0aGlzLmF0dHJGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgIGlkOiB0aGlzLnNlbGVjdGVkQXR0cmlidXRlLmlkLFxuICAgICAgICAgIHRlY2huaWNhbE5hbWU6IHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGUudGVjaG5pY2FsTmFtZSxcbiAgICAgICAgICBuYW1lOiB0aGlzLnNlbGVjdGVkQXR0cmlidXRlLm5hbWUgPz8gdGhpcy5zZWxlY3RlZEF0dHJpYnV0ZS50ZWNobmljYWxOYW1lLFxuICAgICAgICAgIGZpZWxkOiB0aGlzLnNlbGVjdGVkQXR0cmlidXRlLmZpZWxkLFxuICAgICAgICAgIGNhdGVnb3J5OiB0aGlzLnNlbGVjdGVkQXR0cmlidXRlLmNhdGVnb3J5XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmF0dHJGb3JtLmNvbnRyb2xzWydmaWVsZCddLmRpc2FibGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5hdHRyaWJ1dGVOYW1lcykge1xuICAgICAgdGhpcy5uYW1lQWxyZWFkeUV4aXN0cyQgPSB0aGlzLmF0dHJGb3JtXG4gICAgICAgIC5nZXQoJ25hbWUnKSFcbiAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgIG1hcCgodmFsdWUpID0+ICEhdGhpcy5hdHRyaWJ1dGVOYW1lcz8uaW5jbHVkZXModmFsdWUpICYmIHZhbHVlICE9IHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGU/Lm5hbWUpXG4gICAgICAgICk7XG4gICAgICB0aGlzLnN1Yi5hZGQodGhpcy5uYW1lQWxyZWFkeUV4aXN0cyQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gKHRoaXMubmFtZUFscmVhZHlFeGlzdHMgPSB2YWx1ZSkpKTtcbiAgICB9XG5cbiAgICB0aGlzLmF0dHJGb3JtXG4gICAgICAuZ2V0KCd0ZWNobmljYWxOYW1lJykhXG4gICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgZGVib3VuY2VUaW1lKDUwMCkpXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuYXR0ckZvcm0uZ2V0KCduYW1lJyk/LnZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5hdHRyRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgIG5hbWU6IHZhbHVlLnNsaWNlKDAsIDUwKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIGlmICh0aGlzLmF0dHJpYnV0ZVRlY2huaWNhbE5hbWVzKSB7XG4gICAgICB0aGlzLnRlY2huaWNhbE5hbWVBbHJlYWR5RXhpc3RzJCA9IHRoaXMuYXR0ckZvcm1cbiAgICAgICAgLmdldCgndGVjaG5pY2FsTmFtZScpIVxuICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgbWFwKFxuICAgICAgICAgICAgKHZhbHVlKSA9PiAhIXRoaXMuYXR0cmlidXRlVGVjaG5pY2FsTmFtZXM/LmluY2x1ZGVzKHZhbHVlKSAmJiB2YWx1ZSAhPSB0aGlzLnNlbGVjdGVkQXR0cmlidXRlPy50ZWNobmljYWxOYW1lXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgdGhpcy5zdWIuYWRkKFxuICAgICAgICB0aGlzLnRlY2huaWNhbE5hbWVBbHJlYWR5RXhpc3RzJC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgdGhpcy50ZWNobmljYWxOYW1lQWxyZWFkeUV4aXN0cyA9IHZhbHVlO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkRmllbGRUeXBlRGVzY3JpcHRpb24kID0gdGhpcy5hdHRyRm9ybS5nZXQoJ2ZpZWxkJyk/LnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgc3RhcnRXaXRoKHRoaXMuYXR0ckZvcm0uZ2V0KCdmaWVsZCcpPy52YWx1ZSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgc3dpdGNoTWFwKChzZWxlY3RlZEZpZWxkSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGRzJC5waXBlKFxuICAgICAgICAgIG1hcCgoZmllbGRzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZERlc2NyaXB0aW9uID0gdGhpcy5maWVsZFR5cGVEZXNjcmlwdGlvbi5maW5kKFxuICAgICAgICAgICAgICAoZmllbGRUeXBlKSA9PiBmaWVsZFR5cGUudmFyVHlwZSA9PT0gZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5pZCA9PT0gc2VsZWN0ZWRGaWVsZElkKT8udHlwZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBmaWVsZERlc2NyaXB0aW9uID8gdGhpcy5pMThuU2VydmljZS5pbnN0YW50KGZpZWxkRGVzY3JpcHRpb24uZGVzY3JpcHRpb24pIDogJyc7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3ViLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBnb0JhY2soKSB7XG4gICAgY29uc3QgcmVkaXJlY3RQYXRoID0gdGhpcy5zZWxlY3RlZEF0dHJpYnV0ZSA/ICcuLi8uLicgOiAnLi4nO1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKFtyZWRpcmVjdFBhdGhdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChBZG1pbkFjdGlvbnMucm91dGVUbyh7IHBhdGg6IHBhdGgudG9TdHJpbmcoKSB9KSk7XG4gIH1cblxuICBhZGRBdHRyaWJ1dGUoKSB7XG4gICAgdGhpcy5hdHRyRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgIG5hbWU6IHRoaXMuYXR0ckZvcm0udmFsdWUubmFtZS50cmltKClcbiAgICB9KTtcblxuICAgIGlmICghdGhpcy5hdHRyRm9ybS52YWx1ZS5uYW1lKSB7XG4gICAgICB0aGlzLmF0dHJGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICBuYW1lOiB0aGlzLmF0dHJGb3JtLnZhbHVlLnRlY2huaWNhbE5hbWUuc2xpY2UoMCwgNTApXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hdHRyRm9ybS52YWxpZCkge1xuICAgICAgbGV0IGF0dHJUb1NhdmUgPSB0aGlzLmF0dHJGb3JtLmdldFJhd1ZhbHVlKCkgYXMgQXR0cmlidXRlO1xuICAgICAgbGV0IHBhdGggPSB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKFsnLi4nXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEF0dHJpYnV0ZSkge1xuICAgICAgICBwYXRoID0gdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZShbJy4uLy4uJ10sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDbGFzcykge1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgIEFkbWluQ2xhc3NBY3Rpb25zLnNhdmVBdHRyaWJ1dGVGb3JDbGFzcyh7XG4gICAgICAgICAgICBjbGFzc0lkOiB0aGlzLnNlbGVjdGVkQ2xhc3MuaWQsXG4gICAgICAgICAgICBhdHRyaWJ1dGU6IGF0dHJUb1NhdmUsXG4gICAgICAgICAgICByb3V0ZTogcGF0aC50b1N0cmluZygpXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pbnRlckNsYXNzKSB7XG4gICAgICAgIGxldCBpbnRlckF0dHJpYnV0ZSA9IE9iamVjdC5hc3NpZ24oW10sIHRoaXMuaW50ZXJDbGFzcy5hdHRyaWJ1dGVzKTtcbiAgICAgICAgbGV0IGludGVyQ2xhc3NVcGRhdGVkID0geyAuLi50aGlzLmludGVyQ2xhc3MgfTtcbiAgICAgICAgaW50ZXJBdHRyaWJ1dGUucHVzaChhdHRyVG9TYXZlKTtcbiAgICAgICAgaW50ZXJDbGFzc1VwZGF0ZWQuYXR0cmlidXRlcyA9IGludGVyQXR0cmlidXRlO1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKEFkbWluQ2xhc3NBY3Rpb25zLnNhdmVJbnRlckNsYXNzKHsgY2xhc3M6IGludGVyQ2xhc3NVcGRhdGVkLCByb3V0ZTogcGF0aC50b1N0cmluZygpIH0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzaG93Q2F0ZWdvcnkoKSB7XG4gICAgdGhpcy5pc1Nob3dlZENhdGVnb3J5ID0gdHJ1ZTtcbiAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKFxuICAgICAgbmV3IE92ZXJsYXlDb25maWcoe1xuICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcbiAgICAgICAgcGFuZWxDbGFzczogWydvLW1vZGFsLXdyYXBwZXInXSxcbiAgICAgICAgYmFja2Ryb3BDbGFzczogJ2JhY2tkcm9wJ1xuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ29uZmlnQWN0aW9ucy5hZGRpbmdPdmVybGF5KHsgaWQ6IHRoaXMuY29uc3RydWN0b3IubmFtZSB9KSk7XG4gICAgdGhpcy5vdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKS5zdWJzY3JpYmUoKF8pID0+IHRoaXMuY2xvc2VDYXRlZ29yeSgpKTtcbiAgICB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKG5ldyBUZW1wbGF0ZVBvcnRhbCh0aGlzLnRlbXBsYXRlLCB0aGlzLnZpZXdDb250YWluZXJSZWYpKTtcbiAgfVxuXG4gIGNsb3NlQ2F0ZWdvcnkoKSB7XG4gICAgdGhpcy5pc1Nob3dlZENhdGVnb3J5ID0gZmFsc2U7XG4gICAgdGhpcy5jYXRUb0FkZCA9IHt9IGFzIENhdGVnb3J5O1xuICAgIHRoaXMub3ZlcmxheVJlZj8uZGlzcG9zZSgpO1xuICAgIHRoaXMuY2F0ZWdvcmllcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChDYXRlZ29yeVNlbGVjdG9ycy5jYXRlZ29yaWVzKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMuY2xvc2VPdmVybGF5KHsgaWQ6IHRoaXMuY29uc3RydWN0b3IubmFtZSB9KSk7XG4gIH1cblxuICBzZWFyY2goZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZmlsdGVyQ2F0ZWdvcmllcyQubmV4dChldmVudC50YXJnZXQudmFsdWUpO1xuICB9XG5cbiAgYWRkQ2F0ZWdvcnkoKSB7XG4gICAgdGhpcy5jYXRUb0FkZC5pZCA9IHV1aWQoKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKEFkbWluQ2xhc3NBY3Rpb25zLnNhdmVDYXRlZ29yeSh7IGNhdGVnb3J5OiB0aGlzLmNhdFRvQWRkIH0pKTtcbiAgICB0aGlzLnNldENhdGVnb3J5KHRoaXMuY2F0VG9BZGQpO1xuICB9XG5cbiAgc2V0Q2F0ZWdvcnkoY2F0OiBDYXRlZ29yeSkge1xuICAgIHRoaXMuYXR0ckZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICBjYXRlZ29yeTogY2F0LmlkXG4gICAgfSk7XG4gICAgdGhpcy5jbG9zZUNhdGVnb3J5KCk7XG4gIH1cbn1cbiIsIjxmb3JtIGNsYXNzPVwiby1mb3JtXCIgW2Zvcm1Hcm91cF09XCJhdHRyRm9ybVwiIChuZ1N1Ym1pdCk9XCJhZGRBdHRyaWJ1dGUoKVwiPlxuICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkIC13aWR0aC1zbVwiPlxuICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJhdHRyX3RlY2huaWNhbE5hbWVcIj57eyAnQHByeS5hZG1pbi5jbGFzc2VzLmF0dHJpYnV0ZXMudGVjaG5pY2FsTmFtZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICA8aW5wdXQgaWQ9XCJhdHRyX3RlY2huaWNhbE5hbWVcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCIgZm9ybUNvbnRyb2xOYW1lPVwidGVjaG5pY2FsTmFtZVwiIHJlcXVpcmVkIC8+XG4gICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbCBhLWxhYmVsLS1oZWxwIC1lcnJvclwiICpuZ0lmPVwidGVjaG5pY2FsTmFtZUFscmVhZHlFeGlzdHMkIHwgYXN5bmNcIj57e1xuICAgICAgJ0BwcnkuYWRtaW4uZXhpc3RzJyB8IGkxOG5cbiAgICB9fTwvbGFiZWw+XG4gICAgPGRpdiAqbmdJZj1cImF0dHJGb3JtLmdldCgndGVjaG5pY2FsTmFtZScpPy5pbnZhbGlkXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwiYXR0ckZvcm0uZ2V0KCd0ZWNobmljYWxOYW1lJyk/LmRpcnR5ICYmIGF0dHJGb3JtLmdldCgndGVjaG5pY2FsTmFtZScpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsIGEtbGFiZWwtLWhlbHAgLWVycm9yXCIgZm9yPVwiYXR0cl90ZWNobmljYWxOYW1lXCI+e3sgJ0BwcnkuYWRtaW4ucmVxdWlyZWQnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJhdHRyRm9ybS5nZXQoJ3RlY2huaWNhbE5hbWUnKT8uaGFzRXJyb3IoJ21pbmxlbmd0aCcpXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWwgYS1sYWJlbC0taGVscCAtZXJyb3JcIiBmb3I9XCJhdHRyX3RlY2huaWNhbE5hbWVcIj57e1xuICAgICAgICAgICdAcHJ5LmFkbWluLm1pbkxlbmd0aCcgfCBpMThuIDogeyBsZW46IDIgfVxuICAgICAgICB9fTwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJhdHRyRm9ybS5nZXQoJ3RlY2huaWNhbE5hbWUnKT8uaGFzRXJyb3IoJ21heGxlbmd0aCcpXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWwgYS1sYWJlbC0taGVscCAtZXJyb3JcIiBmb3I9XCJhdHRyX3RlY2huaWNhbE5hbWVcIj57e1xuICAgICAgICAgICdAcHJ5LmFkbWluLm1heExlbmd0aCcgfCBpMThuIDogeyBsZW46IDEwMCB9XG4gICAgICAgIH19PC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIGF0dHJGb3JtLmdldCgndGVjaG5pY2FsTmFtZScpPy5oYXNFcnJvcignd2hpdGVzcGFjZScpICYmICFhdHRyRm9ybS5nZXQoJ3RlY2huaWNhbE5hbWUnKT8uaGFzRXJyb3IoJ21pbmxlbmd0aCcpXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWwgYS1sYWJlbC0taGVscCAtZXJyb3JcIiBmb3I9XCJhdHRyX3RlY2huaWNhbE5hbWVcIj57e1xuICAgICAgICAgICdAcHJ5LmFkbWluLm5vV2hpdGVzcGFjZScgfCBpMThuXG4gICAgICAgIH19PC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkIC13aWR0aC1zbVwiPlxuICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJhdHRyX25hbWVcIj57eyAnQHByeS5hZG1pbi5jbGFzc2VzLmF0dHJpYnV0ZXMubmFtZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICA8aW5wdXQgaWQ9XCJhdHRyX25hbWVcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCIgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiIC8+XG4gICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbCBhLWxhYmVsLS1oZWxwIC1lcnJvclwiICpuZ0lmPVwibmFtZUFscmVhZHlFeGlzdHMkIHwgYXN5bmNcIj57e1xuICAgICAgJ0BwcnkuYWRtaW4uZXhpc3RzJyB8IGkxOG5cbiAgICB9fTwvbGFiZWw+XG4gICAgPGRpdiAqbmdJZj1cImF0dHJGb3JtLmdldCgnbmFtZScpPy5pbnZhbGlkXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwiYXR0ckZvcm0uZ2V0KCduYW1lJyk/Lmhhc0Vycm9yKCdtYXhsZW5ndGgnKVwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsIGEtbGFiZWwtLWhlbHAgLWVycm9yXCIgZm9yPVwiYXR0cl9uYW1lXCI+e3tcbiAgICAgICAgICAnQHByeS5hZG1pbi5tYXhMZW5ndGgnIHwgaTE4biA6IHsgbGVuOiA1MCB9XG4gICAgICAgIH19PC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cImF0dHJGb3JtLmdldCgnbmFtZScpPy5oYXNFcnJvcignd2hpdGVzcGFjZScpXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWwgYS1sYWJlbC0taGVscCAtZXJyb3JcIiBmb3I9XCJhdHRyX25hbWVcIj57eyAnQHByeS5hZG1pbi5ub1doaXRlc3BhY2UnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZCAtd2lkdGgtc21cIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwidHlwZVwiPnt7ICdAcHJ5LmFkbWluLmNsYXNzZXMuYXR0cmlidXRlcy5maWVsZCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICA8ZGl2IGNsYXNzPVwidGl0bGUtY29udGFpbmVyXCI+XG4gICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICBpZD1cInR5cGVcIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmaWVsZFwiXG4gICAgICAgIFtpdGVtc109XCJmaWVsZHMkIHwgYXN5bmNcIlxuICAgICAgICBbYXV0b2NvbXBsZXRlXT1cInRydWVcIlxuICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICBbaXNGb3JtXT1cInRydWVcIlxuICAgICAgICByZXF1aXJlZD1cInRydWVcIlxuICAgICAgICBbdGVtcGxhdGVdPVwidGVtcGxhdGVPcHRpb25cIlxuICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVPcHRpb24gbGV0LWl0ZW09XCJpdGVtXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhbGlnbmVkLW9wdGlvblwiPlxuICAgICAgICAgIDxwPnt7IGl0ZW0ubmFtZSB9fTwvcD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYS1jaGlwc1wiICpuZ0lmPVwiaXRlbS5jcnNcIj57eyBpdGVtLmNycyB9fTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRGaWVsZFR5cGVEZXNjcmlwdGlvbiQgfCBhc3luYyBhcyBkZXNjcmlwdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1pY29uIGRlc2NyaXB0aW9uLWNvbnRhaW5lciBkZXNjcmlwdGlvblwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5mby10ZXh0XCI+aTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvbi10b29sdGlwIHRpdGxlLXRvb2x0aXBcIj5cbiAgICAgICAgICA8cCBjbGFzcz1cImEtcCAtZGF0ZVwiPnt7IGRlc2NyaXB0aW9uIH19PC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJhdHRyRm9ybS5nZXQoJ2ZpZWxkJyk/LmludmFsaWRcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJhdHRyRm9ybS5nZXQoJ2ZpZWxkJyk/LmRpcnR5ICYmIGF0dHJGb3JtLmdldCgnZmllbGQnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbCBhLWxhYmVsLS1oZWxwIC1lcnJvclwiPnt7ICdAcHJ5LmFkbWluLnJlcXVpcmVkJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGQgLXdpZHRoLXNtXCI+XG4gICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImNhdGVnb3J5XCI+e3sgJ0BwcnkuYWRtaW4uY2xhc3Nlcy5hdHRyaWJ1dGVzLmNhdGVnb3J5JyB8IGkxOG4gfX08L2xhYmVsPlxuICAgIDxwcnktc2VsZWN0XG4gICAgICBpZD1cImNhdGVnb3J5XCJcbiAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgIGZvcm1Db250cm9sTmFtZT1cImNhdGVnb3J5XCJcbiAgICAgIFtpdGVtc109XCJjYXRlZ29yaWVzJCB8IGFzeW5jXCJcbiAgICAgIChjbGljayk9XCJzaG93Q2F0ZWdvcnkoKVwiXG4gICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgIFtpc0Zvcm1dPVwidHJ1ZVwiXG4gICAgICBbcmVhZG9ubHldPVwidHJ1ZVwiXG4gICAgPjwvcHJ5LXNlbGVjdD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cIm0tYnRuLWdyb3VwIC13aWR0aC1zbVwiPlxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tc2Vjb25kYXJ5XCJcbiAgICAgIChjbGljayk9XCJnb0JhY2soKVwiXG4gICAgICBbaW5uZXJIVE1MXT1cIidAcHJ5LmFkbWluLmNhbmNlbCcgfCBpMThuXCJcbiAgICA+PC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgKnByeUFjY2Vzcz1cInsgbW9kdWxlOiAnYWRtaW4nLCBwYWdlOiAnY2xhc3NlcycsIGFjdGlvbjogJ2FkZF9hdHRyaWJ1dGUnIH1cIlxuICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeVwiXG4gICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgIFtkaXNhYmxlZF09XCJhdHRyRm9ybS5pbnZhbGlkIHx8IG5hbWVBbHJlYWR5RXhpc3RzIHx8IHRlY2huaWNhbE5hbWVBbHJlYWR5RXhpc3RzXCJcbiAgICAgIFtpbm5lckhUTUxdPVwiKHNlbGVjdGVkQXR0cmlidXRlID8gJ0BwcnkuYWRtaW4uZWRpdCcgOiAnQHByeS5hZG1pbi5jcmVhdGUnKSB8IGkxOG5cIlxuICAgID48L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Zvcm0+XG5cbjxuZy10ZW1wbGF0ZSAjdGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJvLW1vZGFsIG8tbW9kYWwtLXNlbGVjdG9yXCI+XG4gICAgPGRpdiBjbGFzcz1cIm8tbW9kYWxfX3RvcFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm8tbW9kYWxfX3RvcF9fdGl0bGVcIj5cbiAgICAgICAgPGgyIGNsYXNzPVwiYS1oMlwiIGlkPVwiZGlhbG9nX3RpdGxlXCI+XG4gICAgICAgICAge3sgJ0BwcnkuYWRtaW4uY2xhc3Nlcy5jYXRlZ29yeS5zZWxlY3QnIHwgaTE4biB9fVxuICAgICAgICA8L2gyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1tb2RhbF9fdG9wX19jbG9zZVwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seVwiIChjbGljayk9XCJjbG9zZUNhdGVnb3J5KClcIj5cbiAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImNsb3NlXCIgW2hlaWdodF09XCIzNVwiIFt3aWR0aF09XCIzNVwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LnRvb2xib3guY2xvc2UnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8Zm9ybSAobmdTdWJtaXQpPVwiYWRkQ2F0ZWdvcnkoKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZCBzZWxlY3RvclwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibmFtZS1zZWFyY2hcIj57eyAnQHByeS5hZG1pbi5jbGFzc2VzLmNhdGVnb3J5LnNlYXJjaE9yQ3JlYXRlJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgIChpbnB1dCk9XCJzZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJjYXRUb0FkZC5uYW1lXCJcbiAgICAgICAgICBuYW1lPVwibmFtZVwiXG4gICAgICAgICAgaWQ9XCJuYW1lLXNlYXJjaFwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPHRhYmxlIGNsYXNzPVwiYS10YWJsZVwiPlxuICAgICAgICA8Y2FwdGlvbj5cbiAgICAgICAgICB7e1xuICAgICAgICAgICAgJ0BwcnkuYWRtaW4uY2xhc3Nlcy5jYXRlZ29yeS5uYW1lJyB8IGkxOG5cbiAgICAgICAgICB9fVxuICAgICAgICA8L2NhcHRpb24+XG4gICAgICAgIDx0aGVhZD5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGggc2NvbGU9XCJjb2xcIj57eyAnQHByeS5hZG1pbi5jbGFzc2VzLmNhdGVnb3J5Lm5hbWUnIHwgaTE4biB9fTwvdGg+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90aGVhZD5cbiAgICAgICAgPHRib2R5PlxuICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgY2F0IG9mIGNhdGVnb3JpZXMkIHwgYXN5bmNcIj5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tZ2hvc3Qgc2VsZWN0LWl0XCIgKGNsaWNrKT1cInNldENhdGVnb3J5KGNhdClcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0BwcnkuYWRtaW4uY2xhc3Nlcy5jYXRlZ29yeS5zZWxlY3RJdCcgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIHt7IGNhdC5uYW1lIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoY2F0ZWdvcmllcyQgfCBhc3luYyk/Lmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICA8cCBjbGFzcz1cImEtcCBhLXAtLWNyZWF0ZVwiPlxuICAgICAgICAgIDxzdHJvbmc+e3sgY2F0VG9BZGQubmFtZSB9fSA8L3N0cm9uZz5cbiAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cIidAcHJ5LmFkbWluLmNsYXNzZXMuY2F0ZWdvcnkuYWRkJyB8IGkxOG5cIj48L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnlcIlxuICAgICAgICAgIFtpbm5lckhUTUxdPVwiJ0BwcnkuYWRtaW4uY2xhc3Nlcy5jYXRlZ29yeS5jcmVhdGUnIHwgaTE4blwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZm9ybT5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -27,4 +27,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
27
27
  type: Component,
28
28
  args: [{ selector: 'pry-admin-attributes-new', template: "<div class=\"o-base-container\" *ngIf=\"selectedClass$ | async as selectedClass\">\n <h1 class=\"a-h1\">\n {{ '@pry.admin.classes.title' | i18n: { class: selectedClass.name } }}\n </h1>\n <h2>\n {{ '@pry.admin.classes.attributes.add' | i18n }}\n </h2>\n <pry-admin-attributes-form [selectedClass]=\"selectedClass\"></pry-admin-attributes-form>\n</div>\n\n<div class=\"o-base-container\" *ngIf=\"interClass$ | async as selectedClass\">\n <h1 class=\"a-h1\" [innerHTML]=\"'@pry.admin.classes.attributes.add' | i18n: { class: selectedClass.name }\"></h1>\n <pry-admin-attributes-form [interClass]=\"selectedClass\"></pry-admin-attributes-form>\n</div>\n" }]
29
29
  }], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.Router }, { type: i2.ActivatedRoute }]; } });
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tYXR0cmlidXRlcy1uZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvYWRtaW4vY29tcG9uZW50cy9hZG1pbi1jbGFzc2VzL2FkbWluLWNsYXNzZXMtdmlldy9hZG1pbi1hdHRyaWJ1dGVzLW5ldy9hZG1pbi1hdHRyaWJ1dGVzLW5ldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9hZG1pbi9jb21wb25lbnRzL2FkbWluLWNsYXNzZXMvYWRtaW4tY2xhc3Nlcy12aWV3L2FkbWluLWF0dHJpYnV0ZXMtbmV3L2FkbWluLWF0dHJpYnV0ZXMtbmV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFHbEQsT0FBTyxFQUFTLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7OztBQU14RSxNQUFNLE9BQU8sMkJBQTJCO0lBSXRDLFlBQ1UsS0FBaUIsRUFDakIsTUFBYyxFQUNkLEtBQXFCO1FBRnJCLFVBQUssR0FBTCxLQUFLLENBQVk7UUFDakIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBRTdCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEYsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBakJVLDJCQUEyQjttR0FBM0IsMkJBQTJCLGdFQ1h4Qyx5cEJBY0E7OzRGREhhLDJCQUEyQjtrQkFKdkMsU0FBUzsrQkFDRSwwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IENsYXNzLCBDbGFzc0FjdGlvbnMsIENsYXNzU2VsZWN0b3JzIH0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFkbWluQ2xhc3NTZWxlY3RvcnMgfSBmcm9tICcuLi8uLi9zdG9yZS9hZG1pbi1jbGFzcy5zZWxlY3RvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktYWRtaW4tYXR0cmlidXRlcy1uZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWRtaW4tYXR0cmlidXRlcy1uZXcuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFkbWluQXR0cmlidXRlc05ld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHNlbGVjdGVkQ2xhc3MkPzogT2JzZXJ2YWJsZTxDbGFzcz47XG4gIGludGVyQ2xhc3MkPzogT2JzZXJ2YWJsZTxDbGFzcyB8IHVuZGVmaW5lZD47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmU8YW55PixcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlXG4gICkge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ2xhc3NBY3Rpb25zLmxvYWQoKSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtcykgPT4ge1xuICAgICAgdGhpcy5zZWxlY3RlZENsYXNzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KENsYXNzU2VsZWN0b3JzLmNsYXNzQnlJZChwYXJhbXNbJ2lkJ10pKTtcbiAgICAgIHRoaXMuaW50ZXJDbGFzcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChBZG1pbkNsYXNzU2VsZWN0b3JzLmludGVyQ2xhc3MpO1xuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiby1iYXNlLWNvbnRhaW5lclwiICpuZ0lmPVwic2VsZWN0ZWRDbGFzcyQgfCBhc3luYyBhcyBzZWxlY3RlZENsYXNzXCI+XG4gIDxoMSBjbGFzcz1cImEtaDFcIj5cbiAgICB7eyAnQHByeS5hZG1pbi5jbGFzc2VzLnRpdGxlJyB8IGkxOG46IHsgY2xhc3M6IHNlbGVjdGVkQ2xhc3MubmFtZSB9IH19XG4gIDwvaDE+XG4gIDxoMj5cbiAgICB7eyAnQHByeS5hZG1pbi5jbGFzc2VzLmF0dHJpYnV0ZXMuYWRkJyB8IGkxOG4gfX1cbiAgPC9oMj5cbiAgPHByeS1hZG1pbi1hdHRyaWJ1dGVzLWZvcm0gW3NlbGVjdGVkQ2xhc3NdPVwic2VsZWN0ZWRDbGFzc1wiPjwvcHJ5LWFkbWluLWF0dHJpYnV0ZXMtZm9ybT5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiby1iYXNlLWNvbnRhaW5lclwiICpuZ0lmPVwiaW50ZXJDbGFzcyQgfCBhc3luYyBhcyBzZWxlY3RlZENsYXNzXCI+XG4gIDxoMSBjbGFzcz1cImEtaDFcIiBbaW5uZXJIVE1MXT1cIidAcHJ5LmFkbWluLmNsYXNzZXMuYXR0cmlidXRlcy5hZGQnIHwgaTE4bjogeyBjbGFzczogc2VsZWN0ZWRDbGFzcy5uYW1lIH1cIj48L2gxPlxuICA8cHJ5LWFkbWluLWF0dHJpYnV0ZXMtZm9ybSBbaW50ZXJDbGFzc109XCJzZWxlY3RlZENsYXNzXCI+PC9wcnktYWRtaW4tYXR0cmlidXRlcy1mb3JtPlxuPC9kaXY+XG4iXX0=
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tYXR0cmlidXRlcy1uZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvYWRtaW4vY29tcG9uZW50cy9hZG1pbi1jbGFzc2VzL2FkbWluLWNsYXNzZXMtdmlldy9hZG1pbi1hdHRyaWJ1dGVzLW5ldy9hZG1pbi1hdHRyaWJ1dGVzLW5ldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9hZG1pbi9jb21wb25lbnRzL2FkbWluLWNsYXNzZXMvYWRtaW4tY2xhc3Nlcy12aWV3L2FkbWluLWF0dHJpYnV0ZXMtbmV3L2FkbWluLWF0dHJpYnV0ZXMtbmV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFHbEQsT0FBTyxFQUFTLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7OztBQU14RSxNQUFNLE9BQU8sMkJBQTJCO0lBSXRDLFlBQW9CLEtBQWlCLEVBQVUsTUFBYyxFQUFVLEtBQXFCO1FBQXhFLFVBQUssR0FBTCxLQUFLLENBQVk7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDMUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoRixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0FiVSwyQkFBMkI7bUdBQTNCLDJCQUEyQixnRUNYeEMseXBCQWNBOzs0RkRIYSwyQkFBMkI7a0JBSnZDLFNBQVM7K0JBQ0UsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBDbGFzcywgQ2xhc3NBY3Rpb25zLCBDbGFzc1NlbGVjdG9ycyB9IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBZG1pbkNsYXNzU2VsZWN0b3JzIH0gZnJvbSAnLi4vLi4vc3RvcmUvYWRtaW4tY2xhc3Muc2VsZWN0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncHJ5LWFkbWluLWF0dHJpYnV0ZXMtbmV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkbWluLWF0dHJpYnV0ZXMtbmV3LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBZG1pbkF0dHJpYnV0ZXNOZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBzZWxlY3RlZENsYXNzJD86IE9ic2VydmFibGU8Q2xhc3M+O1xuICBpbnRlckNsYXNzJD86IE9ic2VydmFibGU8Q2xhc3MgfCB1bmRlZmluZWQ+O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3RvcmU6IFN0b3JlPGFueT4sIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChDbGFzc0FjdGlvbnMubG9hZCgpKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZSgocGFyYW1zKSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdGVkQ2xhc3MkID0gdGhpcy5zdG9yZS5zZWxlY3QoQ2xhc3NTZWxlY3RvcnMuY2xhc3NCeUlkKHBhcmFtc1snaWQnXSkpO1xuICAgICAgdGhpcy5pbnRlckNsYXNzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KEFkbWluQ2xhc3NTZWxlY3RvcnMuaW50ZXJDbGFzcyk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJvLWJhc2UtY29udGFpbmVyXCIgKm5nSWY9XCJzZWxlY3RlZENsYXNzJCB8IGFzeW5jIGFzIHNlbGVjdGVkQ2xhc3NcIj5cbiAgPGgxIGNsYXNzPVwiYS1oMVwiPlxuICAgIHt7ICdAcHJ5LmFkbWluLmNsYXNzZXMudGl0bGUnIHwgaTE4bjogeyBjbGFzczogc2VsZWN0ZWRDbGFzcy5uYW1lIH0gfX1cbiAgPC9oMT5cbiAgPGgyPlxuICAgIHt7ICdAcHJ5LmFkbWluLmNsYXNzZXMuYXR0cmlidXRlcy5hZGQnIHwgaTE4biB9fVxuICA8L2gyPlxuICA8cHJ5LWFkbWluLWF0dHJpYnV0ZXMtZm9ybSBbc2VsZWN0ZWRDbGFzc109XCJzZWxlY3RlZENsYXNzXCI+PC9wcnktYWRtaW4tYXR0cmlidXRlcy1mb3JtPlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJvLWJhc2UtY29udGFpbmVyXCIgKm5nSWY9XCJpbnRlckNsYXNzJCB8IGFzeW5jIGFzIHNlbGVjdGVkQ2xhc3NcIj5cbiAgPGgxIGNsYXNzPVwiYS1oMVwiIFtpbm5lckhUTUxdPVwiJ0BwcnkuYWRtaW4uY2xhc3Nlcy5hdHRyaWJ1dGVzLmFkZCcgfCBpMThuOiB7IGNsYXNzOiBzZWxlY3RlZENsYXNzLm5hbWUgfVwiPjwvaDE+XG4gIDxwcnktYWRtaW4tYXR0cmlidXRlcy1mb3JtIFtpbnRlckNsYXNzXT1cInNlbGVjdGVkQ2xhc3NcIj48L3ByeS1hZG1pbi1hdHRyaWJ1dGVzLWZvcm0+XG48L2Rpdj5cbiJdfQ==