geonetwork-ui 2.2.0-dev.725d837e → 2.2.0-dev.7a59af6f

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 (178) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/gn4/atomic-operations.mjs +2 -1
  2. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +36 -2
  3. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.mjs +2 -1
  4. package/esm2022/libs/api/repository/src/lib/gn4/index.mjs +3 -1
  5. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  6. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +5 -4
  7. package/esm2022/libs/feature/editor/src/lib/record-form/record-form.component.mjs +5 -3
  8. package/esm2022/libs/feature/map/src/index.mjs +2 -1
  9. package/esm2022/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-record-preview/add-layer-record-preview.component.mjs +1 -1
  10. package/esm2022/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.mjs +106 -0
  11. package/esm2022/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.mjs +64 -0
  12. package/esm2022/libs/feature/map/src/lib/constant/index.mjs +2 -1
  13. package/esm2022/libs/feature/map/src/lib/constant/projections.mjs +2 -0
  14. package/esm2022/libs/feature/map/src/lib/feature-map.module.mjs +23 -3
  15. package/esm2022/libs/feature/map/src/lib/geocoding/geocoding.component.mjs +93 -0
  16. package/esm2022/libs/feature/map/src/lib/geocoding.service.mjs +40 -0
  17. package/esm2022/libs/feature/map/src/lib/layers-panel/layers-panel.component.mjs +5 -3
  18. package/esm2022/libs/feature/map/src/lib/map-context/map-context.service.mjs +3 -1
  19. package/esm2022/libs/feature/map/src/lib/utils/index.mjs +1 -3
  20. package/esm2022/libs/feature/map/src/lib/utils/map-utils.service.mjs +60 -29
  21. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +29 -20
  22. package/esm2022/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.mjs +1 -1
  23. package/esm2022/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.mjs +1 -1
  24. package/esm2022/libs/feature/search/src/lib/state/effects.mjs +5 -3
  25. package/esm2022/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.mjs +1 -1
  26. package/esm2022/libs/ui/elements/src/index.mjs +3 -1
  27. package/esm2022/libs/ui/elements/src/lib/downloads-list/downloads-list.component.mjs +3 -3
  28. package/esm2022/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.mjs +27 -0
  29. package/esm2022/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.mjs +2 -2
  30. package/esm2022/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.mjs +3 -3
  31. package/esm2022/libs/ui/elements/src/lib/related-record-card/related-record-card.component.mjs +3 -3
  32. package/esm2022/libs/ui/elements/src/lib/thumbnail/thumbnail.component.mjs +7 -3
  33. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +10 -3
  34. package/esm2022/libs/ui/inputs/src/index.mjs +2 -1
  35. package/esm2022/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.mjs +3 -3
  36. package/esm2022/libs/ui/inputs/src/lib/button/button.component.mjs +2 -2
  37. package/esm2022/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.mjs +3 -3
  38. package/esm2022/libs/ui/inputs/src/lib/editable-label/editable-label.directive.mjs +46 -0
  39. package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +8 -3
  40. package/esm2022/libs/ui/layout/src/lib/carousel/carousel.component.mjs +2 -2
  41. package/esm2022/libs/ui/search/src/lib/record-preview-card/record-preview-card.component.mjs +1 -1
  42. package/esm2022/libs/ui/search/src/lib/record-preview-feed/record-preview-feed.component.mjs +1 -1
  43. package/esm2022/libs/ui/search/src/lib/record-preview-list/record-preview-list.component.mjs +1 -1
  44. package/esm2022/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.mjs +1 -1
  45. package/esm2022/libs/ui/search/src/lib/record-preview-title/record-preview-title.component.mjs +1 -1
  46. package/esm2022/libs/ui/search/src/lib/record-table/record-table.component.mjs +3 -3
  47. package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +29 -13
  48. package/esm2022/translations/de.json +99 -95
  49. package/esm2022/translations/en.json +20 -16
  50. package/esm2022/translations/es.json +4 -0
  51. package/esm2022/translations/fr.json +5 -1
  52. package/esm2022/translations/it.json +4 -0
  53. package/esm2022/translations/nl.json +4 -0
  54. package/esm2022/translations/pt.json +4 -0
  55. package/fesm2022/geonetwork-ui.mjs +682 -242
  56. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  57. package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts +1 -0
  58. package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts.map +1 -1
  59. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  60. package/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.d.ts.map +1 -1
  61. package/libs/api/repository/src/lib/gn4/index.d.ts +2 -0
  62. package/libs/api/repository/src/lib/gn4/index.d.ts.map +1 -1
  63. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +10 -5
  64. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  65. package/libs/feature/dataviz/src/lib/service/data.service.d.ts +15 -2
  66. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  67. package/libs/feature/editor/src/lib/record-form/record-form.component.d.ts.map +1 -1
  68. package/libs/feature/map/src/index.d.ts +1 -0
  69. package/libs/feature/map/src/index.d.ts.map +1 -1
  70. package/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.d.ts +22 -0
  71. package/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.d.ts.map +1 -0
  72. package/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.d.ts +22 -0
  73. package/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.d.ts.map +1 -0
  74. package/libs/feature/map/src/lib/constant/index.d.ts +1 -0
  75. package/libs/feature/map/src/lib/constant/index.d.ts.map +1 -1
  76. package/libs/feature/map/src/lib/constant/projections.d.ts.map +1 -0
  77. package/libs/feature/map/src/lib/feature-map.module.d.ts +15 -12
  78. package/libs/feature/map/src/lib/feature-map.module.d.ts.map +1 -1
  79. package/libs/feature/map/src/lib/geocoding/geocoding.component.d.ts +25 -0
  80. package/libs/feature/map/src/lib/geocoding/geocoding.component.d.ts.map +1 -0
  81. package/libs/feature/map/src/lib/geocoding.service.d.ts +18 -0
  82. package/libs/feature/map/src/lib/geocoding.service.d.ts.map +1 -0
  83. package/libs/feature/map/src/lib/map-context/map-context.service.d.ts +1 -0
  84. package/libs/feature/map/src/lib/map-context/map-context.service.d.ts.map +1 -1
  85. package/libs/feature/map/src/lib/utils/index.d.ts +0 -2
  86. package/libs/feature/map/src/lib/utils/index.d.ts.map +1 -1
  87. package/libs/feature/map/src/lib/utils/map-utils.service.d.ts +13 -11
  88. package/libs/feature/map/src/lib/utils/map-utils.service.d.ts.map +1 -1
  89. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts +1 -3
  90. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
  91. package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts +3 -3
  92. package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts.map +1 -1
  93. package/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.d.ts +3 -2
  94. package/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.d.ts.map +1 -1
  95. package/libs/feature/search/src/lib/state/effects.d.ts.map +1 -1
  96. package/libs/ui/dataviz/src/lib/chart/chart.component.d.ts +1 -1
  97. package/libs/ui/elements/src/index.d.ts +2 -0
  98. package/libs/ui/elements/src/index.d.ts.map +1 -1
  99. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts +1 -1
  100. package/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.d.ts +10 -0
  101. package/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.d.ts.map +1 -0
  102. package/libs/ui/elements/src/lib/thumbnail/thumbnail.component.d.ts +3 -2
  103. package/libs/ui/elements/src/lib/thumbnail/thumbnail.component.d.ts.map +1 -1
  104. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +12 -11
  105. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  106. package/libs/ui/inputs/src/index.d.ts +1 -0
  107. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  108. package/libs/ui/inputs/src/lib/editable-label/editable-label.directive.d.ts +13 -0
  109. package/libs/ui/inputs/src/lib/editable-label/editable-label.directive.d.ts.map +1 -0
  110. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +2 -1
  111. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts.map +1 -1
  112. package/libs/util/shared/src/lib/links/link-utils.d.ts +19 -7
  113. package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
  114. package/package.json +4 -1
  115. package/src/libs/api/metadata-converter/src/lib/gn4/atomic-operations.ts +3 -0
  116. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +43 -0
  117. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.ts +1 -0
  118. package/src/libs/api/repository/src/lib/gn4/index.ts +2 -0
  119. package/src/libs/common/domain/src/lib/index.ts +2 -0
  120. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +12 -7
  121. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +8 -5
  122. package/src/libs/feature/editor/src/lib/record-form/record-form.component.ts +2 -1
  123. package/src/libs/feature/map/src/index.ts +1 -0
  124. package/src/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.css +0 -0
  125. package/src/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.html +21 -0
  126. package/src/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.ts +107 -0
  127. package/src/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.css +0 -0
  128. package/src/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.html +37 -0
  129. package/src/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.ts +64 -0
  130. package/src/libs/feature/map/src/lib/constant/index.ts +1 -0
  131. package/src/libs/feature/map/src/lib/feature-map.module.ts +12 -0
  132. package/src/libs/feature/map/src/lib/geocoding/geocoding.component.css +0 -0
  133. package/src/libs/feature/map/src/lib/geocoding/geocoding.component.html +39 -0
  134. package/src/libs/feature/map/src/lib/geocoding/geocoding.component.ts +99 -0
  135. package/src/libs/feature/map/src/lib/geocoding.service.ts +59 -0
  136. package/src/libs/feature/map/src/lib/layers-panel/layers-panel.component.html +6 -2
  137. package/src/libs/feature/map/src/lib/map-context/map-context.service.ts +6 -0
  138. package/src/libs/feature/map/src/lib/utils/index.ts +0 -2
  139. package/src/libs/feature/map/src/lib/utils/map-utils.service.ts +85 -50
  140. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +18 -3
  141. package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.ts +1 -1
  142. package/src/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.ts +4 -4
  143. package/src/libs/feature/search/src/lib/state/effects.ts +4 -3
  144. package/src/libs/ui/elements/src/index.ts +2 -0
  145. package/src/libs/ui/elements/src/lib/downloads-list/downloads-list.component.html +4 -1
  146. package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.css +0 -0
  147. package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.html +30 -0
  148. package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.ts +15 -0
  149. package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.css +52 -52
  150. package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.html +2 -2
  151. package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.html +1 -1
  152. package/src/libs/ui/elements/src/lib/thumbnail/thumbnail.component.ts +4 -0
  153. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +4 -0
  154. package/src/libs/ui/inputs/src/index.ts +1 -0
  155. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.html +1 -1
  156. package/src/libs/ui/inputs/src/lib/button/button.component.css +1 -1
  157. package/src/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.html +1 -1
  158. package/src/libs/ui/inputs/src/lib/editable-label/editable-label.directive.ts +48 -0
  159. package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +3 -0
  160. package/src/libs/ui/layout/src/lib/carousel/carousel.component.css +1 -1
  161. package/src/libs/ui/search/src/lib/record-table/record-table.component.html +2 -2
  162. package/src/libs/util/shared/src/lib/links/link-utils.ts +34 -11
  163. package/translations/de.json +99 -95
  164. package/translations/en.json +20 -16
  165. package/translations/es.json +4 -0
  166. package/translations/fr.json +5 -1
  167. package/translations/it.json +4 -0
  168. package/translations/nl.json +4 -0
  169. package/translations/pt.json +4 -0
  170. package/translations/sk.json +4 -0
  171. package/esm2022/libs/feature/map/src/lib/utils/map-utils-wms.service.mjs +0 -55
  172. package/esm2022/libs/feature/map/src/lib/utils/projections.mjs +0 -2
  173. package/libs/feature/map/src/lib/utils/map-utils-wms.service.d.ts +0 -17
  174. package/libs/feature/map/src/lib/utils/map-utils-wms.service.d.ts.map +0 -1
  175. package/libs/feature/map/src/lib/utils/projections.d.ts.map +0 -1
  176. package/src/libs/feature/map/src/lib/utils/map-utils-wms.service.ts +0 -58
  177. /package/libs/feature/map/src/lib/{utils → constant}/projections.d.ts +0 -0
  178. /package/src/libs/feature/map/src/lib/{utils → constant}/projections.ts +0 -0
@@ -32,6 +32,7 @@ import { MatFormFieldModule } from '@angular/material/form-field';
32
32
  import { MatInputModule } from '@angular/material/input';
33
33
  import { MatDatepickerModule } from '@angular/material/datepicker';
34
34
  import { MatNativeDateModule } from '@angular/material/core';
35
+ import { EditableLabelDirective } from './editable-label/editable-label.directive';
35
36
  import * as i0 from "@angular/core";
36
37
  import * as i1 from "@ngx-translate/core";
37
38
  export class UiInputsModule {
@@ -73,7 +74,8 @@ export class UiInputsModule {
73
74
  MatFormFieldModule,
74
75
  MatInputModule,
75
76
  MatDatepickerModule,
76
- MatNativeDateModule], exports: [DropdownSelectorComponent,
77
+ MatNativeDateModule,
78
+ EditableLabelDirective], exports: [DropdownSelectorComponent,
77
79
  AutocompleteComponent,
78
80
  ButtonComponent,
79
81
  TextInputComponent,
@@ -89,7 +91,8 @@ export class UiInputsModule {
89
91
  CopyTextButtonComponent,
90
92
  CheckboxComponent,
91
93
  SearchInputComponent,
92
- DateRangePickerComponent] }); }
94
+ DateRangePickerComponent,
95
+ EditableLabelDirective] }); }
93
96
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, imports: [CommonModule,
94
97
  TranslateModule.forChild(),
95
98
  NgxDropzoneModule,
@@ -155,6 +158,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
155
158
  MatInputModule,
156
159
  MatDatepickerModule,
157
160
  MatNativeDateModule,
161
+ EditableLabelDirective,
158
162
  ],
159
163
  exports: [
160
164
  DropdownSelectorComponent,
@@ -174,7 +178,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
174
178
  CheckboxComponent,
175
179
  SearchInputComponent,
176
180
  DateRangePickerComponent,
181
+ EditableLabelDirective,
177
182
  ],
178
183
  }]
179
184
  }] });
180
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktaW5wdXRzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvaW5wdXRzL3NyYy9saWIvdWktaW5wdXRzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ3hDLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQTtBQUN0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDaEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUNBQXVDLENBQUE7QUFDN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQzNELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFBO0FBQ3pFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLCtEQUErRCxDQUFBO0FBQzdHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFBO0FBQzNGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQ25FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBQ3RFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFBO0FBQ3RFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUN0RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQTtBQUMzRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUs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QkFDdkIsaUJBQWlCO3dCQUNqQixvQkFBb0I7d0JBQ3BCLHdCQUF3QjtxQkFDekI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJ1xuaW1wb3J0IHsgVXRpbFNoYXJlZE1vZHVsZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2xpYnMvdXRpbC9zaGFyZWQvc3JjJ1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSdcbmltcG9ydCB7IFRhZ0lucHV0TW9kdWxlIH0gZnJvbSAnbmd4LWNoaXBzJ1xuaW1wb3J0IHsgTmd4RHJvcHpvbmVNb2R1bGUgfSBmcm9tICduZ3gtZHJvcHpvbmUnXG5pbXBvcnQgeyBBdXRvY29tcGxldGVDb21wb25lbnQgfSBmcm9tICcuL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50J1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi9idXR0b24vYnV0dG9uLmNvbXBvbmVudCdcbmltcG9ydCB7IENoaXBzSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL2NoaXBzLWlucHV0L2NoaXBzLWlucHV0LmNvbXBvbmVudCdcbmltcG9ydCB7IERyYWdBbmREcm9wRmlsZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9kcmFnLWFuZC1kcm9wLWZpbGUtaW5wdXQvZHJhZy1hbmQtZHJvcC1maWxlLWlucHV0LmNvbXBvbmVudCdcbmltcG9ydCB7IERyb3Bkb3duU2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuL2Ryb3Bkb3duLXNlbGVjdG9yL2Ryb3Bkb3duLXNlbGVjdG9yLmNvbXBvbmVudCdcbmltcG9ydCB7IFRleHRBcmVhQ29tcG9uZW50IH0gZnJvbSAnLi90ZXh0LWFyZWEvdGV4dC1hcmVhLmNvbXBvbmVudCdcbmltcG9ydCB7IFRleHRJbnB1dENvbXBvbmVudCB9IGZyb20gJy4vdGV4dC1pbnB1dC90ZXh0LWlucHV0LmNvbXBvbmVudCdcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSdcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJ1xuaW1wb3J0IHsgTmF2aWdhdGlvbkJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vbmF2aWdhdGlvbi1idXR0b24vbmF2aWdhdGlvbi1idXR0b24uY29tcG9uZW50J1xuaW1wb3J0IHsgU3RhclRvZ2dsZUNvbXBvbmVudCB9IGZyb20gJy4vc3Rhci10b2dnbGUvc3Rhci10b2dnbGUuY29tcG9uZW50J1xuaW1wb3J0IHsgRHJvcGRvd25NdWx0aXNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4vZHJvcGRvd24tbXVsdGlzZWxlY3QvZHJvcGRvd24tbXVsdGlzZWxlY3QuY29tcG9uZW50J1xuaW1wb3J0IHsgVWlXaWRnZXRzTW9kdWxlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vbGlicy91aS93aWRnZXRzL3NyYydcbmltcG9ydCB7IE92ZXJsYXlNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSdcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnXG5pbXBvcnQgeyBWaWV3cG9ydEludGVyc2VjdG9yQ29tcG9uZW50IH0gZnJvbSAnLi92aWV3cG9ydC1pbnRlcnNlY3Rvci92aWV3cG9ydC1pbnRlcnNlY3Rvci5jb21wb25lbnQnXG5pbXBvcnQge1xuICBGb3JtRmllbGRBcnJheUNvbXBvbmVudCxcbiAgRm9ybUZpZWxkQ29tcG9uZW50LFxuICBGb3JtRmllbGRGaWxlQ29tcG9uZW50LFxuICBGb3JtRmllbGRPYmplY3RDb21wb25lbnQsXG4gIEZvcm1GaWVsZFJpY2hDb21wb25lbnQsXG4gIEZvcm1GaWVsZFNpbXBsZUNvbXBvbmVudCxcbiAgRm9ybUZpZWxkU3BhdGlhbEV4dGVudENvbXBvbmVudCxcbiAgRm9ybUZpZWxkVGVtcG9yYWxFeHRlbnRDb21wb25lbnQsXG59IGZyb20gJy4vZm9ybS1maWVsZCdcbmltcG9ydCB7IENoZWNrVG9nZ2xlQ29tcG9uZW50IH0gZnJvbSAnLi9jaGVjay10b2dnbGUvY2hlY2stdG9nZ2xlLmNvbXBvbmVudCdcbmltcG9ydCB7IENvcHlUZXh0QnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb3B5LXRleHQtYnV0dG9uL2NvcHktdGV4dC1idXR0b24uY29tcG9uZW50J1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nXG5pbXBvcnQgeyBDaGVja2JveENvbXBvbmVudCB9IGZyb20gJy4vY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50J1xuaW1wb3J0IHsgU2VhcmNoSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL3NlYXJjaC1pbnB1dC9zZWFyY2gtaW5wdXQuY29tcG9uZW50J1xuaW1wb3J0IHsgRGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQnXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJ1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCdcbmltcG9ydCB7IE1hdERhdGVwaWNrZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJ1xuaW1wb3J0IHsgTWF0TmF0aXZlRGF0ZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnXG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIERyb3Bkb3duU2VsZWN0b3JDb21wb25lbnQsXG4gICAgQXV0b2NvbXBsZXRlQ29tcG9uZW50LFxuICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICBUZXh0SW5wdXRDb21wb25lbnQsXG4gICAgRHJhZ0FuZERyb3BGaWxlSW5wdXRDb21wb25lbnQsXG4gICAgVGV4dEFyZWFDb21wb25lbnQsXG4gICAgQ2hpcHNJbnB1dENvbXBvbmVudCxcbiAgICBOYXZpZ2F0aW9uQnV0dG9uQ29tcG9uZW50LFxuICAgIFN0YXJUb2dnbGVDb21wb25lbnQsXG4gICAgRHJvcGRvd25NdWx0aXNlbGVjdENvbXBvbmVudCxcbiAgICBWaWV3cG9ydEludGVyc2VjdG9yQ29tcG9uZW50LFxuICAgIEZvcm1GaWVsZENvbXBvbmVudCxcbiAgICBGb3JtRmllbGRTaW1wbGVDb21wb25lbnQsXG4gICAgRm9ybUZpZWxkQXJyYXlDb21wb25lbnQsXG4gICAgRm9ybUZpZWxkT2JqZWN0Q29tcG9uZW50LFxuICAgIEZvcm1GaWVsZFJpY2hDb21wb25lbnQsXG4gICAgRm9ybUZpZWxkRmlsZUNvbXBvbmVudCxcbiAgICBGb3JtRmllbGRTcGF0aWFsRXh0ZW50Q29tcG9uZW50LFxuICAgIEZvcm1GaWVsZFRlbXBvcmFsRXh0ZW50Q29tcG9uZW50LFxuICAgIENoZWNrVG9nZ2xlQ29tcG9uZW50LFxuICAgIENvcHlUZXh0QnV0dG9uQ29tcG9uZW50LFxuICAgIENoZWNrYm94Q29tcG9uZW50LFxuICAgIFNlYXJjaElucHV0Q29tcG9uZW50LFxuICAgIERhdGVSYW5nZVBpY2tlckNvbXBvbmVudCxcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUuZm9yQ2hpbGQoKSxcbiAgICBOZ3hEcm9wem9uZU1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFRhZ0lucHV0TW9kdWxlLFxuICAgIFV0aWxTaGFyZWRNb2R1bGUsXG4gICAgTWF0QXV0b2NvbXBsZXRlTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgVWlXaWRnZXRzTW9kdWxlLFxuICAgIE92ZXJsYXlNb2R1bGUsXG4gICAgTWF0Q2hlY2tib3hNb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgTWF0RGF0ZXBpY2tlck1vZHVsZSxcbiAgICBNYXROYXRpdmVEYXRlTW9kdWxlLFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgRHJvcGRvd25TZWxlY3RvckNvbXBvbmVudCxcbiAgICBBdXRvY29tcGxldGVDb21wb25lbnQsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIFRleHRJbnB1dENvbXBvbmVudCxcbiAgICBEcmFnQW5kRHJvcEZpbGVJbnB1dENvbXBvbmVudCxcbiAgICBUZXh0QXJlYUNvbXBvbmVudCxcbiAgICBDaGlwc0lucHV0Q29tcG9uZW50LFxuICAgIE5hdmlnYXRpb25CdXR0b25Db21wb25lbnQsXG4gICAgU3RhclRvZ2dsZUNvbXBvbmVudCxcbiAgICBEcm9wZG93bk11bHRpc2VsZWN0Q29tcG9uZW50LFxuICAgIFZpZXdwb3J0SW50ZXJzZWN0b3JDb21wb25lbnQsXG4gICAgRm9ybUZpZWxkQ29tcG9uZW50LFxuICAgIENoZWNrVG9nZ2xlQ29tcG9uZW50LFxuICAgIENvcHlUZXh0QnV0dG9uQ29tcG9uZW50LFxuICAgIENoZWNrYm94Q29tcG9uZW50LFxuICAgIFNlYXJjaElucHV0Q29tcG9uZW50LFxuICAgIERhdGVSYW5nZVBpY2tlckNvbXBvbmVudCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVWlJbnB1dHNNb2R1bGUge31cbiJdfQ==
185
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktaW5wdXRzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvaW5wdXRzL3NyYy9saWIvdWktaW5wdXRzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ3hDLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQTtBQUN0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDaEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUNBQXVDLENBQUE7QUFDN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQzNELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFBO0FBQ3pFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLCtEQUErRCxDQUFBO0FBQzdHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFBO0FBQzNGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQ25FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBQ3RFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFBO0FBQ3RFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUN0RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQTtBQUMzRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUs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d0JBQ3pCLG1CQUFtQjt3QkFDbkIsNEJBQTRCO3dCQUM1Qiw0QkFBNEI7d0JBQzVCLGtCQUFrQjt3QkFDbEIsb0JBQW9CO3dCQUNwQix1QkFBdUI7d0JBQ3ZCLGlCQUFpQjt3QkFDakIsb0JBQW9CO3dCQUNwQix3QkFBd0I7d0JBQ3hCLHNCQUFzQjtxQkFDdkI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJ1xuaW1wb3J0IHsgVXRpbFNoYXJlZE1vZHVsZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2xpYnMvdXRpbC9zaGFyZWQvc3JjJ1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSdcbmltcG9ydCB7IFRhZ0lucHV0TW9kdWxlIH0gZnJvbSAnbmd4LWNoaXBzJ1xuaW1wb3J0IHsgTmd4RHJvcHpvbmVNb2R1bGUgfSBmcm9tICduZ3gtZHJvcHpvbmUnXG5pbXBvcnQgeyBBdXRvY29tcGxldGVDb21wb25lbnQgfSBmcm9tICcuL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50J1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi9idXR0b24vYnV0dG9uLmNvbXBvbmVudCdcbmltcG9ydCB7IENoaXBzSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL2NoaXBzLWlucHV0L2NoaXBzLWlucHV0LmNvbXBvbmVudCdcbmltcG9ydCB7IERyYWdBbmREcm9wRmlsZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9kcmFnLWFuZC1kcm9wLWZpbGUtaW5wdXQvZHJhZy1hbmQtZHJvcC1maWxlLWlucHV0LmNvbXBvbmVudCdcbmltcG9ydCB7IERyb3Bkb3duU2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuL2Ryb3Bkb3duLXNlbGVjdG9yL2Ryb3Bkb3duLXNlbGVjdG9yLmNvbXBvbmVudCdcbmltcG9ydCB7IFRleHRBcmVhQ29tcG9uZW50IH0gZnJvbSAnLi90ZXh0LWFyZWEvdGV4dC1hcmVhLmNvbXBvbmVudCdcbmltcG9ydCB7IFRleHRJbnB1dENvbXBvbmVudCB9IGZyb20gJy4vdGV4dC1pbnB1dC90ZXh0LWlucHV0LmNvbXBvbmVudCdcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSdcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJ1xuaW1wb3J0IHsgTmF2aWdhdGlvbkJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vbmF2aWdhdGlvbi1idXR0b24vbmF2aWdhdGlvbi1idXR0b24uY29tcG9uZW50J1xuaW1wb3J0IHsgU3RhclRvZ2dsZUNvbXBvbmVudCB9IGZyb20gJy4vc3Rhci10b2dnbGUvc3Rhci10b2dnbGUuY29tcG9uZW50J1xuaW1wb3J0IHsgRHJvcGRvd25NdWx0aXNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4vZHJvcGRvd24tbXVsdGlzZWxlY3QvZHJvcGRvd24tbXVsdGlzZWxlY3QuY29tcG9uZW50J1xuaW1wb3J0IHsgVWlXaWRnZXRzTW9kdWxlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vbGlicy91aS93aWRnZXRzL3NyYydcbmltcG9ydCB7IE92ZXJsYXlNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSdcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnXG5pbXBvcnQgeyBWaWV3cG9ydEludGVyc2VjdG9yQ29tcG9uZW50IH0gZnJvbSAnLi92aWV3cG9ydC1pbnRlcnNlY3Rvci92aWV3cG9ydC1pbnRlcnNlY3Rvci5jb21wb25lbnQnXG5pbXBvcnQge1xuICBGb3JtRmllbGRBcnJheUNvbXBvbmVudCxcbiAgRm9ybUZpZWxkQ29tcG9uZW50LFxuICBGb3JtRmllbGRGaWxlQ29tcG9uZW50LFxuICBGb3JtRmllbGRPYmplY3RDb21wb25lbnQsXG4gIEZvcm1GaWVsZFJpY2hDb21wb25lbnQsXG4gIEZvcm1GaWVsZFNpbXBsZUNvbXBvbmVudCxcbiAgRm9ybUZpZWxkU3BhdGlhbEV4dGVudENvbXBvbmVudCxcbiAgRm9ybUZpZWxkVGVtcG9yYWxFeHRlbnRDb21wb25lbnQsXG59IGZyb20gJy4vZm9ybS1maWVsZCdcbmltcG9ydCB7IENoZWNrVG9nZ2xlQ29tcG9uZW50IH0gZnJvbSAnLi9jaGVjay10b2dnbGUvY2hlY2stdG9nZ2xlLmNvbXBvbmVudCdcbmltcG9ydCB7IENvcHlUZXh0QnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb3B5LXRleHQtYnV0dG9uL2NvcHktdGV4dC1idXR0b24uY29tcG9uZW50J1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nXG5pbXBvcnQgeyBDaGVja2JveENvbXBvbmVudCB9IGZyb20gJy4vY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50J1xuaW1wb3J0IHsgU2VhcmNoSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL3NlYXJjaC1pbnB1dC9zZWFyY2gtaW5wdXQuY29tcG9uZW50J1xuaW1wb3J0IHsgRGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQnXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJ1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCdcbmltcG9ydCB7IE1hdERhdGVwaWNrZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJ1xuaW1wb3J0IHsgTWF0TmF0aXZlRGF0ZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnXG5pbXBvcnQgeyBFZGl0YWJsZUxhYmVsRGlyZWN0aXZlIH0gZnJvbSAnLi9lZGl0YWJsZS1sYWJlbC9lZGl0YWJsZS1sYWJlbC5kaXJlY3RpdmUnXG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIERyb3Bkb3duU2VsZWN0b3JDb21wb25lbnQsXG4gICAgQXV0b2NvbXBsZXRlQ29tcG9uZW50LFxuICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICBUZXh0SW5wdXRDb21wb25lbnQsXG4gICAgRHJhZ0FuZERyb3BGaWxlSW5wdXRDb21wb25lbnQsXG4gICAgVGV4dEFyZWFDb21wb25lbnQsXG4gICAgQ2hpcHNJbnB1dENvbXBvbmVudCxcbiAgICBOYXZpZ2F0aW9uQnV0dG9uQ29tcG9uZW50LFxuICAgIFN0YXJUb2dnbGVDb21wb25lbnQsXG4gICAgRHJvcGRvd25NdWx0aXNlbGVjdENvbXBvbmVudCxcbiAgICBWaWV3cG9ydEludGVyc2VjdG9yQ29tcG9uZW50LFxuICAgIEZvcm1GaWVsZENvbXBvbmVudCxcbiAgICBGb3JtRmllbGRTaW1wbGVDb21wb25lbnQsXG4gICAgRm9ybUZpZWxkQXJyYXlDb21wb25lbnQsXG4gICAgRm9ybUZpZWxkT2JqZWN0Q29tcG9uZW50LFxuICAgIEZvcm1GaWVsZFJpY2hDb21wb25lbnQsXG4gICAgRm9ybUZpZWxkRmlsZUNvbXBvbmVudCxcbiAgICBGb3JtRmllbGRTcGF0aWFsRXh0ZW50Q29tcG9uZW50LFxuICAgIEZvcm1GaWVsZFRlbXBvcmFsRXh0ZW50Q29tcG9uZW50LFxuICAgIENoZWNrVG9nZ2xlQ29tcG9uZW50LFxuICAgIENvcHlUZXh0QnV0dG9uQ29tcG9uZW50LFxuICAgIENoZWNrYm94Q29tcG9uZW50LFxuICAgIFNlYXJjaElucHV0Q29tcG9uZW50LFxuICAgIERhdGVSYW5nZVBpY2tlckNvbXBvbmVudCxcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUuZm9yQ2hpbGQoKSxcbiAgICBOZ3hEcm9wem9uZU1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFRhZ0lucHV0TW9kdWxlLFxuICAgIFV0aWxTaGFyZWRNb2R1bGUsXG4gICAgTWF0QXV0b2NvbXBsZXRlTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgVWlXaWRnZXRzTW9kdWxlLFxuICAgIE92ZXJsYXlNb2R1bGUsXG4gICAgTWF0Q2hlY2tib3hNb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgTWF0RGF0ZXBpY2tlck1vZHVsZSxcbiAgICBNYXROYXRpdmVEYXRlTW9kdWxlLFxuICAgIEVkaXRhYmxlTGFiZWxEaXJlY3RpdmUsXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBEcm9wZG93blNlbGVjdG9yQ29tcG9uZW50LFxuICAgIEF1dG9jb21wbGV0ZUNvbXBvbmVudCxcbiAgICBCdXR0b25Db21wb25lbnQsXG4gICAgVGV4dElucHV0Q29tcG9uZW50LFxuICAgIERyYWdBbmREcm9wRmlsZUlucHV0Q29tcG9uZW50LFxuICAgIFRleHRBcmVhQ29tcG9uZW50LFxuICAgIENoaXBzSW5wdXRDb21wb25lbnQsXG4gICAgTmF2aWdhdGlvbkJ1dHRvbkNvbXBvbmVudCxcbiAgICBTdGFyVG9nZ2xlQ29tcG9uZW50LFxuICAgIERyb3Bkb3duTXVsdGlzZWxlY3RDb21wb25lbnQsXG4gICAgVmlld3BvcnRJbnRlcnNlY3RvckNvbXBvbmVudCxcbiAgICBGb3JtRmllbGRDb21wb25lbnQsXG4gICAgQ2hlY2tUb2dnbGVDb21wb25lbnQsXG4gICAgQ29weVRleHRCdXR0b25Db21wb25lbnQsXG4gICAgQ2hlY2tib3hDb21wb25lbnQsXG4gICAgU2VhcmNoSW5wdXRDb21wb25lbnQsXG4gICAgRGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50LFxuICAgIEVkaXRhYmxlTGFiZWxEaXJlY3RpdmUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFVpSW5wdXRzTW9kdWxlIHt9XG4iXX0=
@@ -28,11 +28,11 @@ export class CarouselComponent {
28
28
  this.emblaApi.scrollTo(stepIndex);
29
29
  }
30
30
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CarouselComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
31
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CarouselComponent, selector: "gn-ui-carousel", inputs: { containerClass: "containerClass", stepsContainerClass: "stepsContainerClass" }, viewQueries: [{ propertyName: "carouselOverflowContainer", first: true, predicate: ["carouselOverflowContainer"], descendants: true }], ngImport: i0, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container /deep/ > *{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-4px;top:-4px;width:14px;height:14px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
31
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CarouselComponent, selector: "gn-ui-carousel", inputs: { containerClass: "containerClass", stepsContainerClass: "stepsContainerClass" }, viewQueries: [{ propertyName: "carouselOverflowContainer", first: true, predicate: ["carouselOverflowContainer"], descendants: true }], ngImport: i0, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container ::ng-deep>*{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-4px;top:-4px;width:14px;height:14px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
32
32
  }
33
33
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CarouselComponent, decorators: [{
34
34
  type: Component,
35
- args: [{ selector: 'gn-ui-carousel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container /deep/ > *{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-4px;top:-4px;width:14px;height:14px}\n"] }]
35
+ args: [{ selector: 'gn-ui-carousel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container ::ng-deep>*{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-4px;top:-4px;width:14px;height:14px}\n"] }]
36
36
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { containerClass: [{
37
37
  type: Input
38
38
  }], stepsContainerClass: [{
@@ -4,7 +4,7 @@ import * as i0 from "@angular/core";
4
4
  import * as i1 from "../../../../elements/src/lib/thumbnail/thumbnail.component";
5
5
  export class RecordPreviewCardComponent extends RecordPreviewComponent {
6
6
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewCardComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
7
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewCardComponent, selector: "gn-ui-record-preview-card", usesInheritance: true, ngImport: i0, template: "<div\n class=\"h-full border bg-white rounded-sm overflow-hidden transition duration-200 transform hover:scale-105 hover:bg-gray-50 border-gray-300 hover:border-primary hover:text-primary\"\n>\n <a\n [href]=\"record.landingPage\"\n [title]=\"record.abstract\"\n [target]=\"linkTarget\"\n >\n <div class=\"flex flex-col min-h-full\">\n <gn-ui-thumbnail\n class=\"lg:h-48 md:h-36 border-b border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"grow p-4\">\n <h1 class=\"title-font text-lg font-medium mb-3 clamp-2\">\n {{ record.title }}\n </h1>\n <p class=\"leading-relaxed text-sm text-gray-700 clamp-3\">\n {{ record.abstract }}\n </p>\n </div>\n </div>\n </a>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: i1.ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
7
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewCardComponent, selector: "gn-ui-record-preview-card", usesInheritance: true, ngImport: i0, template: "<div\n class=\"h-full border bg-white rounded-sm overflow-hidden transition duration-200 transform hover:scale-105 hover:bg-gray-50 border-gray-300 hover:border-primary hover:text-primary\"\n>\n <a\n [href]=\"record.landingPage\"\n [title]=\"record.abstract\"\n [target]=\"linkTarget\"\n >\n <div class=\"flex flex-col min-h-full\">\n <gn-ui-thumbnail\n class=\"lg:h-48 md:h-36 border-b border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"grow p-4\">\n <h1 class=\"title-font text-lg font-medium mb-3 clamp-2\">\n {{ record.title }}\n </h1>\n <p class=\"leading-relaxed text-sm text-gray-700 clamp-3\">\n {{ record.abstract }}\n </p>\n </div>\n </div>\n </a>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: i1.ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
8
8
  }
9
9
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewCardComponent, decorators: [{
10
10
  type: Component,
@@ -27,7 +27,7 @@ export class RecordPreviewFeedComponent extends RecordPreviewComponent {
27
27
  return this.timeFormat.format(this.record.recordCreated, Date.now());
28
28
  }
29
29
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewFeedComponent, deps: [{ token: i0.ElementRef }, { token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
30
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewFeedComponent, selector: "gn-ui-record-preview-feed", usesInheritance: true, ngImport: i0, template: "<div\n class=\"mx-[18px] pl-[18px] pb-[18px] border-solid border-l-2 border-gray-100\"\n>\n <a\n class=\"record-container block rounded-lg bg-white border border-white card-shadow\"\n [attr.href]=\"linkHref\"\n [target]=\"linkTarget\"\n >\n <div\n class=\"record-header py-4 px-4 border-b border-gray-300 flex flex-row items-center relative transition duration-200\"\n >\n <div\n class=\"absolute w-3 h-3 bg-secondary rounded-full\"\n style=\"right: calc(100% + 14px)\"\n ></div>\n <div\n class=\"record-header-image border border-gray-300 bg-white rounded-full w-16 h-16 object-contain mr-4 overflow-hidden transition duration-200 shrink-0\"\n >\n <mat-icon\n *ngIf=\"!hasLogo\"\n class=\"material-symbols-outlined text-gray-200\"\n style=\"width: 42px; height: 42px; font-size: 42px; margin: 10px\"\n >{{ hasOnlyPerson ? 'face' : 'home_work' }}</mat-icon\n >\n <gn-ui-thumbnail\n *ngIf=\"hasLogo\"\n [thumbnailUrl]=\"record.ownerOrganization?.logoUrl?.toString()\"\n [fit]=\"'contain'\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col overflow-hidden items-start\">\n <span\n *ngIf=\"hasOrganization\"\n class=\"font-bold transition duration-200 text-primary truncate max-w-full\"\n >\n {{ record.ownerOrganization.name }}\n </span>\n <span\n *ngIf=\"hasOnlyPerson\"\n class=\"font-bold transition duration-200 text-primary truncate max-w-full\"\n >\n {{ contact.firstName }} {{ contact.lastName }}\n </span>\n <p class=\"\">\n <span translate [translateParams]=\"{ time }\"\n >record.was.created.time</span\n >\n </p>\n </div>\n </div>\n <div class=\"pt-5 pb-5 px-10 relative\">\n <div class=\"absolute top-[0.85em] right-[0.85em]\">\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n <h1\n class=\"font-title text-black text-[21px] font-medium mb-3 pr-8\"\n data-cy=\"recordTitle\"\n >\n {{ record.title }}\n </h1>\n <p class=\"line-clamp-3\">{{ abstract }}</p>\n <gn-ui-thumbnail\n *ngIf=\"record.overviews?.[0]\"\n class=\"block mt-3 w-full h-[136px] border border-gray-100 rounded-lg overflow-hidden\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n <div class=\"flex flex-row mt-3\" *ngIf=\"isDownloadable || isViewable\">\n <mat-icon\n *ngIf=\"isDownloadable\"\n class=\"material-symbols-outlined text-primary opacity-45 mr-3\"\n >cloud_download\n </mat-icon>\n <mat-icon\n *ngIf=\"isViewable\"\n class=\"material-symbols-outlined text-primary opacity-45 mr-3\"\n >map\n </mat-icon>\n </div>\n </div>\n </a>\n</div>\n", styles: [".record-container:hover .record-header,.record-container:hover .record-header-image{border-color:var(--color-primary-lightest)}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i3.ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
30
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewFeedComponent, selector: "gn-ui-record-preview-feed", usesInheritance: true, ngImport: i0, template: "<div\n class=\"mx-[18px] pl-[18px] pb-[18px] border-solid border-l-2 border-gray-100\"\n>\n <a\n class=\"record-container block rounded-lg bg-white border border-white card-shadow\"\n [attr.href]=\"linkHref\"\n [target]=\"linkTarget\"\n >\n <div\n class=\"record-header py-4 px-4 border-b border-gray-300 flex flex-row items-center relative transition duration-200\"\n >\n <div\n class=\"absolute w-3 h-3 bg-secondary rounded-full\"\n style=\"right: calc(100% + 14px)\"\n ></div>\n <div\n class=\"record-header-image border border-gray-300 bg-white rounded-full w-16 h-16 object-contain mr-4 overflow-hidden transition duration-200 shrink-0\"\n >\n <mat-icon\n *ngIf=\"!hasLogo\"\n class=\"material-symbols-outlined text-gray-200\"\n style=\"width: 42px; height: 42px; font-size: 42px; margin: 10px\"\n >{{ hasOnlyPerson ? 'face' : 'home_work' }}</mat-icon\n >\n <gn-ui-thumbnail\n *ngIf=\"hasLogo\"\n [thumbnailUrl]=\"record.ownerOrganization?.logoUrl?.toString()\"\n [fit]=\"'contain'\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col overflow-hidden items-start\">\n <span\n *ngIf=\"hasOrganization\"\n class=\"font-bold transition duration-200 text-primary truncate max-w-full\"\n >\n {{ record.ownerOrganization.name }}\n </span>\n <span\n *ngIf=\"hasOnlyPerson\"\n class=\"font-bold transition duration-200 text-primary truncate max-w-full\"\n >\n {{ contact.firstName }} {{ contact.lastName }}\n </span>\n <p class=\"\">\n <span translate [translateParams]=\"{ time }\"\n >record.was.created.time</span\n >\n </p>\n </div>\n </div>\n <div class=\"pt-5 pb-5 px-10 relative\">\n <div class=\"absolute top-[0.85em] right-[0.85em]\">\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n <h1\n class=\"font-title text-black text-[21px] font-medium mb-3 pr-8\"\n data-cy=\"recordTitle\"\n >\n {{ record.title }}\n </h1>\n <p class=\"line-clamp-3\">{{ abstract }}</p>\n <gn-ui-thumbnail\n *ngIf=\"record.overviews?.[0]\"\n class=\"block mt-3 w-full h-[136px] border border-gray-100 rounded-lg overflow-hidden\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n <div class=\"flex flex-row mt-3\" *ngIf=\"isDownloadable || isViewable\">\n <mat-icon\n *ngIf=\"isDownloadable\"\n class=\"material-symbols-outlined text-primary opacity-45 mr-3\"\n >cloud_download\n </mat-icon>\n <mat-icon\n *ngIf=\"isViewable\"\n class=\"material-symbols-outlined text-primary opacity-45 mr-3\"\n >map\n </mat-icon>\n </div>\n </div>\n </a>\n</div>\n", styles: [".record-container:hover .record-header,.record-container:hover .record-header-image{border-color:var(--color-primary-lightest)}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i3.ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
31
31
  }
32
32
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewFeedComponent, decorators: [{
33
33
  type: Component,
@@ -6,7 +6,7 @@ import * as i2 from "@ngx-translate/core";
6
6
  import * as i3 from "../../../../elements/src/lib/thumbnail/thumbnail.component";
7
7
  export class RecordPreviewListComponent extends RecordPreviewComponent {
8
8
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
9
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewListComponent, selector: "gn-ui-record-preview-list", usesInheritance: true, ngImport: i0, template: "<div\n class=\"h-40 bg-white transition duration-200 border border-gray-200 rounded-md hover:bg-gray-50 hover:border-primary hover:text-primary\"\n>\n <a\n [href]=\"record.landingPage\"\n [target]=\"linkTarget\"\n [title]=\"record.abstract\"\n >\n <div class=\"h-full flex flex-row items-center shadow-sm\">\n <gn-ui-thumbnail\n class=\"w-40 h-full shrink-0 border-r border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"grow h-full px-6 py-4 flex flex-col overflow-hidden\">\n <div class=\"title-font text-lg font-medium mb-2\">\n <h1 class=\"truncate\">{{ record.title }}</h1>\n </div>\n <p class=\"leading-relaxed clamp-3 text-sm text-gray-700\">\n {{ record.abstract }}\n </p>\n <div class=\"grow\"></div>\n <div class=\"flex flex-row items-center\">\n <div\n class=\"text-gray-500 text-xs truncate capitalize border-r mr-4 pr-4\"\n *ngIf=\"record.kind === 'dataset'\"\n >\n <span translate>{{ record.updateFrequency }}</span>\n </div>\n <div\n class=\"text-gray-500 text-xs border-gray-300 truncate viewable-downloadable\"\n *ngIf=\"isViewable || isDownloadable\"\n >\n <span *ngIf=\"isViewable\" translate>record.action.view</span>\n <span *ngIf=\"isViewable && isDownloadable\">,&nbsp;</span>\n <span *ngIf=\"isDownloadable\" translate>record.action.download</span>\n </div>\n </div>\n </div>\n </div>\n </a>\n</div>\n", styles: [".viewable-downloadable :first-child{text-transform:capitalize}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i3.ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
9
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewListComponent, selector: "gn-ui-record-preview-list", usesInheritance: true, ngImport: i0, template: "<div\n class=\"h-40 bg-white transition duration-200 border border-gray-200 rounded-md hover:bg-gray-50 hover:border-primary hover:text-primary\"\n>\n <a\n [href]=\"record.landingPage\"\n [target]=\"linkTarget\"\n [title]=\"record.abstract\"\n >\n <div class=\"h-full flex flex-row items-center shadow-sm\">\n <gn-ui-thumbnail\n class=\"w-40 h-full shrink-0 border-r border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"grow h-full px-6 py-4 flex flex-col overflow-hidden\">\n <div class=\"title-font text-lg font-medium mb-2\">\n <h1 class=\"truncate\">{{ record.title }}</h1>\n </div>\n <p class=\"leading-relaxed clamp-3 text-sm text-gray-700\">\n {{ record.abstract }}\n </p>\n <div class=\"grow\"></div>\n <div class=\"flex flex-row items-center\">\n <div\n class=\"text-gray-500 text-xs truncate capitalize border-r mr-4 pr-4\"\n *ngIf=\"record.kind === 'dataset'\"\n >\n <span translate>{{ record.updateFrequency }}</span>\n </div>\n <div\n class=\"text-gray-500 text-xs border-gray-300 truncate viewable-downloadable\"\n *ngIf=\"isViewable || isDownloadable\"\n >\n <span *ngIf=\"isViewable\" translate>record.action.view</span>\n <span *ngIf=\"isViewable && isDownloadable\">,&nbsp;</span>\n <span *ngIf=\"isDownloadable\" translate>record.action.download</span>\n </div>\n </div>\n </div>\n </div>\n </a>\n</div>\n", styles: [".viewable-downloadable :first-child{text-transform:capitalize}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i3.ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10
10
  }
11
11
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewListComponent, decorators: [{
12
12
  type: Component,
@@ -11,7 +11,7 @@ export class RecordPreviewRowComponent extends RecordPreviewComponent {
11
11
  this.elementRef = elementRef;
12
12
  }
13
13
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewRowComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
14
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewRowComponent, selector: "gn-ui-record-preview-row", usesInheritance: true, ngImport: i0, template: "<a\n class=\"group container-lg mx-auto flex cursor-pointer flex-wrap sm:flex-nowrap\"\n [title]=\"record.title\"\n [attr.href]=\"linkHref\"\n>\n <div class=\"shrink-0 w-full sm:w-52\">\n <div\n class=\"overflow-hidden bg-gray-100 rounded-lg w-full border border-gray-300 h-36\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full object-cover object-left-top\"\n [thumbnailUrl]=\"[record.overviews?.[0]?.url?.toString(), organization?.logoUrl?.toString()]\"\n [fit]=\"['cover', 'contain']\"\n ></gn-ui-thumbnail>\n </div>\n </div>\n <div\n class=\"content grid grow relative sm:pl-6 sm:pr-12\"\n style=\"grid-template-columns: auto 70px\"\n >\n <div class=\"mb-3 mt-5 sm:mt-2\">\n <div\n class=\"font-title text-21 text-title line-clamp-2 col-start-1 col-span-2 sm:line-clamp-1 group-hover:text-primary transition-colors\"\n data-cy=\"recordTitle\"\n >\n {{ record.title }}\n </div>\n </div>\n <div\n class=\"abstract mt-4 mb-5 h-36 line-clamp-6 col-start-1 col-span-2 row-start-3 sm:mb-2 sm:h-[4.5rem] sm:line-clamp-3 sm:row-start-2 sm:mt-0\"\n data-cy=\"recordAbstract\"\n >\n {{ abstract }}\n </div>\n <div\n class=\"text-primary opacity-45 uppercase col-start-1 col-span-2 row-start-2 sm:truncate sm:row-start-3 sm:col-span-1\"\n data-cy=\"recordOrg\"\n [class]=\"metadataQualityDisplay ? 'limit-organisation-with-quality' : ''\"\n >\n {{ organization?.name }}\n </div>\n <div\n class=\"icons flex flex-row col-start-1 row-start-4 sm:col-start-2 sm:row-start-3 sm:absolute sm:right-[0.4em]\"\n >\n <mat-icon\n *ngIf=\"isDownloadable\"\n class=\"material-symbols-outlined text-primary opacity-45 mx-1\"\n >cloud_download</mat-icon\n >\n <mat-icon\n *ngIf=\"isViewable\"\n class=\"material-symbols-outlined text-primary opacity-45 mx-1\"\n >map</mat-icon\n >\n </div>\n <div\n *ngIf=\"metadataQualityDisplay\"\n class=\"col-start-2 row-start-4 sm:row-start-3 absolute right-[4em] sm:right-[5em]\"\n >\n <gn-ui-metadata-quality\n smaller=\"true\"\n [metadata]=\"record\"\n [metadataQualityDisplay]=\"metadataQualityDisplay\"\n ></gn-ui-metadata-quality>\n </div>\n <div\n class=\"text-right col-start-3 row-start-4 sm:absolute sm:col-start-2 sm:row-start-1 sm:top-[-1.125em] sm:right-[0.4em]\"\n data-cy=\"recordFav\"\n >\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n </div>\n</a>\n", styles: [".limit-organisation-with-quality{max-width:calc(100% - 170px)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.MetadataQualityComponent, selector: "gn-ui-metadata-quality", inputs: ["metadata", "smaller", "metadataQualityDisplay"] }, { kind: "component", type: i3.ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
14
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewRowComponent, selector: "gn-ui-record-preview-row", usesInheritance: true, ngImport: i0, template: "<a\n class=\"group container-lg mx-auto flex cursor-pointer flex-wrap sm:flex-nowrap\"\n [title]=\"record.title\"\n [attr.href]=\"linkHref\"\n>\n <div class=\"shrink-0 w-full sm:w-52\">\n <div\n class=\"overflow-hidden bg-gray-100 rounded-lg w-full border border-gray-300 h-36\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full object-cover object-left-top\"\n [thumbnailUrl]=\"[record.overviews?.[0]?.url?.toString(), organization?.logoUrl?.toString()]\"\n [fit]=\"['cover', 'contain']\"\n ></gn-ui-thumbnail>\n </div>\n </div>\n <div\n class=\"content grid grow relative sm:pl-6 sm:pr-12\"\n style=\"grid-template-columns: auto 70px\"\n >\n <div class=\"mb-3 mt-5 sm:mt-2\">\n <div\n class=\"font-title text-21 text-title line-clamp-2 col-start-1 col-span-2 sm:line-clamp-1 group-hover:text-primary transition-colors\"\n data-cy=\"recordTitle\"\n >\n {{ record.title }}\n </div>\n </div>\n <div\n class=\"abstract mt-4 mb-5 h-36 line-clamp-6 col-start-1 col-span-2 row-start-3 sm:mb-2 sm:h-[4.5rem] sm:line-clamp-3 sm:row-start-2 sm:mt-0\"\n data-cy=\"recordAbstract\"\n >\n {{ abstract }}\n </div>\n <div\n class=\"text-primary opacity-45 uppercase col-start-1 col-span-2 row-start-2 sm:truncate sm:row-start-3 sm:col-span-1\"\n data-cy=\"recordOrg\"\n [class]=\"metadataQualityDisplay ? 'limit-organisation-with-quality' : ''\"\n >\n {{ organization?.name }}\n </div>\n <div\n class=\"icons flex flex-row col-start-1 row-start-4 sm:col-start-2 sm:row-start-3 sm:absolute sm:right-[0.4em]\"\n >\n <mat-icon\n *ngIf=\"isDownloadable\"\n class=\"material-symbols-outlined text-primary opacity-45 mx-1\"\n >cloud_download</mat-icon\n >\n <mat-icon\n *ngIf=\"isViewable\"\n class=\"material-symbols-outlined text-primary opacity-45 mx-1\"\n >map</mat-icon\n >\n </div>\n <div\n *ngIf=\"metadataQualityDisplay\"\n class=\"col-start-2 row-start-4 sm:row-start-3 absolute right-[4em] sm:right-[5em]\"\n >\n <gn-ui-metadata-quality\n smaller=\"true\"\n [metadata]=\"record\"\n [metadataQualityDisplay]=\"metadataQualityDisplay\"\n ></gn-ui-metadata-quality>\n </div>\n <div\n class=\"text-right col-start-3 row-start-4 sm:absolute sm:col-start-2 sm:row-start-1 sm:top-[-1.125em] sm:right-[0.4em]\"\n data-cy=\"recordFav\"\n >\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n </div>\n</a>\n", styles: [".limit-organisation-with-quality{max-width:calc(100% - 170px)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.MetadataQualityComponent, selector: "gn-ui-metadata-quality", inputs: ["metadata", "smaller", "metadataQualityDisplay"] }, { kind: "component", type: i3.ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
15
15
  }
16
16
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewRowComponent, decorators: [{
17
17
  type: Component,
@@ -4,7 +4,7 @@ import * as i0 from "@angular/core";
4
4
  import * as i1 from "../../../../elements/src/lib/thumbnail/thumbnail.component";
5
5
  export class RecordPreviewTitleComponent extends RecordPreviewComponent {
6
6
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewTitleComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
7
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewTitleComponent, selector: "gn-ui-record-preview-title", usesInheritance: true, ngImport: i0, template: "<!-- Record list item: List Small -->\n<div\n class=\"h-10 w-full border-b border-gray-200 transition duration-200 rounded-sm hover:text-primary\"\n>\n <a\n [href]=\"record.landingPage\"\n [target]=\"linkTarget\"\n [title]=\"record.abstract\"\n >\n <div class=\"h-full flex flex-row items-center\">\n <gn-ui-thumbnail\n class=\"w-10 h-full shrink-0 border-r border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"grow px-3 py-1 flex flex-col overflow-hidden\">\n <h1 class=\"title-font text-sm font-bold truncate md:text-clip\">\n {{ record.title }}\n </h1>\n </div>\n </div>\n </a>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: i1.ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
7
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewTitleComponent, selector: "gn-ui-record-preview-title", usesInheritance: true, ngImport: i0, template: "<!-- Record list item: List Small -->\n<div\n class=\"h-10 w-full border-b border-gray-200 transition duration-200 rounded-sm hover:text-primary\"\n>\n <a\n [href]=\"record.landingPage\"\n [target]=\"linkTarget\"\n [title]=\"record.abstract\"\n >\n <div class=\"h-full flex flex-row items-center\">\n <gn-ui-thumbnail\n class=\"w-10 h-full shrink-0 border-r border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"grow px-3 py-1 flex flex-col overflow-hidden\">\n <h1 class=\"title-font text-sm font-bold truncate md:text-clip\">\n {{ record.title }}\n </h1>\n </div>\n </div>\n </a>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: i1.ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
8
8
  }
9
9
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewTitleComponent, decorators: [{
10
10
  type: Component,
@@ -120,11 +120,11 @@ export class RecordTableComponent {
120
120
  return false;
121
121
  }
122
122
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
123
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordTableComponent, selector: "gn-ui-record-table", inputs: { selectedRecords: "selectedRecords", records: "records", totalHits: "totalHits", sortBy: "sortBy" }, outputs: { recordClick: "recordClick", recordsSelect: "recordsSelect", recordsDeselect: "recordsDeselect", sortByChange: "sortByChange" }, ngImport: i0, template: "<div>\n <div *ngIf=\"totalHits\" class=\"\">\n <div class=\"flex records-information\">\n <div\n translate\n class=\"my-8 ml-4 block text-gray-800\"\n [translateParams]=\"{\n displayed: records.length,\n hits: totalHits\n }\"\n >\n results.records.hits.displayedOn\n </div>\n <div\n *ngIf=\"selectedRecords.length > 0\"\n class=\"my-8 ml-6 block text-gray-400 selected-records\"\n translate\n [translateParams]=\"{ amount: selectedRecords.length }\"\n >\n results.records.hits.selected\n </div>\n </div>\n\n <div\n class=\"grid grid-cols-[repeat(3,minmax(0,max-content))] gap-x-4 gap-y-1\"\n *ngIf=\"records[0].name\"\n >\n <div class=\"contents text-sm\">\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.userDetail</span>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.username</span>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.userEmail</span>\n </div>\n </div>\n <div\n class=\"contents hover:text-gray-900 text-gray-800 cursor-pointer\"\n (click)=\"recordSelect.emit(record)\"\n *ngFor=\"let record of records\"\n >\n <div class=\"record-table-col text-16\">\n {{ record.name }}\n </div>\n <div class=\"record-table-col text-16\">\n {{ record.username }}\n </div>\n <div class=\"record-table-col text-16\">\n {{ record.emailAddresses[0] }}\n </div>\n </div>\n </div>\n\n <div\n class=\"grid grid-cols-[repeat(6,minmax(0,max-content))] gap-x-4 gap-y-1\"\n *ngIf=\"!records[0].name\"\n >\n <div class=\"contents text-sm\">\n <div class=\"flex justify-center items-center\">\n <gn-ui-checkbox\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (changed)=\"selectAll()\"\n type=\"default\"\n >\n </gn-ui-checkbox>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1 text-left\"\n (buttonClick)=\"setSortBy('resourceTitleObject.default.keyword')\"\n >\n <span translate>record.metadata.title</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('resourceTitleObject.default.keyword', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('resourceTitleObject.default.keyword', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div translate=\"\" class=\"record-table-header text-gray-400 flex gap-1\">\n record.metadata.formats\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('recordOwner')\"\n >\n <span translate>record.metadata.author</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('recordOwner', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('recordOwner', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('changeDate')\"\n >\n <span translate>record.metadata.updatedOn</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('changeDate', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('changeDate', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('createDate')\"\n >\n <span translate>record.metadata.createdOn</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('createDate', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('createDate', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n </div>\n <div\n class=\"contents hover:text-gray-900 text-gray-800 cursor-pointer\"\n (click)=\"recordSelect.emit(record)\"\n *ngFor=\"let record of records\"\n >\n <div class=\"record-table-col\">\n <gn-ui-checkbox\n [checked]=\"isChecked(record)\"\n (changed)=\"handleRecordSelectedChange($event, record)\"\n type=\"default\"\n ></gn-ui-checkbox>\n </div>\n <div\n [title]=\"record.title\"\n class=\"record-table-col text-16 self-center\"\n >\n {{ record.title }}\n </div>\n <div\n class=\"record-table-col flex justify-start items-center gap-2 text-16\"\n [title]=\"formats.join(', ')\"\n *ngIf=\"getRecordFormats(record) as formats\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div\n class=\"flex-shrink-0\"\n *ngIf=\"!record.name && formats.slice(2).length > 0\"\n >\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div class=\"record-table-col flex items-center gap-2 text-16\">\n <mat-icon class=\"material-symbols-outlined\"> person </mat-icon>\n <span class=\"\">{{ formatUserInfo(record.extras?.ownerInfo) }}</span>\n </div>\n <div class=\"record-table-col text-16 self-center\">\n {{ dateToString(record.recordUpdated) }}\n </div>\n <div class=\"record-table-col text-16 self-center\">\n {{ dateToString(record.recordCreated) }}\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".record-table-col{@apply px-5 py-3 items-center truncate;}.record-table-header{@apply record-table-col capitalize;}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i3.ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: i4.CheckboxComponent, selector: "gn-ui-checkbox", inputs: ["type", "checked", "indeterminate"], outputs: ["changed"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
123
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordTableComponent, selector: "gn-ui-record-table", inputs: { selectedRecords: "selectedRecords", records: "records", totalHits: "totalHits", sortBy: "sortBy" }, outputs: { recordClick: "recordClick", recordsSelect: "recordsSelect", recordsDeselect: "recordsDeselect", sortByChange: "sortByChange" }, ngImport: i0, template: "<div>\n <div *ngIf=\"totalHits\" class=\"\">\n <div class=\"flex records-information\">\n <div\n translate\n class=\"my-8 ml-4 block text-gray-800\"\n [translateParams]=\"{\n displayed: records.length,\n hits: totalHits\n }\"\n >\n results.records.hits.displayedOn\n </div>\n <div\n *ngIf=\"selectedRecords.length > 0\"\n class=\"my-8 ml-6 block text-gray-400 selected-records\"\n translate\n [translateParams]=\"{ amount: selectedRecords.length }\"\n >\n results.records.hits.selected\n </div>\n </div>\n\n <div\n class=\"grid grid-cols-[repeat(3,minmax(0,max-content))] gap-x-4 gap-y-1\"\n *ngIf=\"records[0].name\"\n >\n <div class=\"contents text-sm\">\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.userDetail</span>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.username</span>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.userEmail</span>\n </div>\n </div>\n <div\n class=\"contents hover:text-gray-900 text-gray-800 cursor-pointer\"\n (click)=\"recordsSelect.emit([record])\"\n *ngFor=\"let record of records\"\n >\n <div class=\"record-table-col text-16\">\n {{ record.name }}\n </div>\n <div class=\"record-table-col text-16\">\n {{ record.username }}\n </div>\n <div class=\"record-table-col text-16\">\n {{ record.emailAddresses[0] }}\n </div>\n </div>\n </div>\n\n <div\n class=\"grid grid-cols-[repeat(6,minmax(0,max-content))] gap-x-4 gap-y-1\"\n *ngIf=\"!records[0].name\"\n >\n <div class=\"contents text-sm\">\n <div class=\"flex justify-center items-center\">\n <gn-ui-checkbox\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (changed)=\"selectAll()\"\n type=\"default\"\n >\n </gn-ui-checkbox>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1 text-left\"\n (buttonClick)=\"setSortBy('resourceTitleObject.default.keyword')\"\n >\n <span translate>record.metadata.title</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('resourceTitleObject.default.keyword', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('resourceTitleObject.default.keyword', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div translate=\"\" class=\"record-table-header text-gray-400 flex gap-1\">\n record.metadata.formats\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('recordOwner')\"\n >\n <span translate>record.metadata.author</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('recordOwner', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('recordOwner', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('changeDate')\"\n >\n <span translate>record.metadata.updatedOn</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('changeDate', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('changeDate', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('createDate')\"\n >\n <span translate>record.metadata.createdOn</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('createDate', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('createDate', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n </div>\n <div\n class=\"contents hover:text-gray-900 text-gray-800 cursor-pointer\"\n (click)=\"recordsSelect.emit([record])\"\n *ngFor=\"let record of records\"\n >\n <div class=\"record-table-col\">\n <gn-ui-checkbox\n [checked]=\"isChecked(record)\"\n (changed)=\"handleRecordSelectedChange($event, record)\"\n type=\"default\"\n ></gn-ui-checkbox>\n </div>\n <div\n [title]=\"record.title\"\n class=\"record-table-col text-16 self-center\"\n >\n {{ record.title }}\n </div>\n <div\n class=\"record-table-col flex justify-start items-center gap-2 text-16\"\n [title]=\"formats.join(', ')\"\n *ngIf=\"getRecordFormats(record) as formats\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div\n class=\"flex-shrink-0\"\n *ngIf=\"!record.name && formats.slice(2).length > 0\"\n >\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div class=\"record-table-col flex items-center gap-2 text-16\">\n <mat-icon class=\"material-symbols-outlined\"> person </mat-icon>\n <span class=\"\">{{ formatUserInfo(record.extras?.ownerInfo) }}</span>\n </div>\n <div class=\"record-table-col text-16 self-center\">\n {{ dateToString(record.recordUpdated) }}\n </div>\n <div class=\"record-table-col text-16 self-center\">\n {{ dateToString(record.recordCreated) }}\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".record-table-col{@apply px-5 py-3 items-center truncate;}.record-table-header{@apply record-table-col capitalize;}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i3.ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: i4.CheckboxComponent, selector: "gn-ui-checkbox", inputs: ["type", "checked", "indeterminate"], outputs: ["changed"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
124
124
  }
125
125
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordTableComponent, decorators: [{
126
126
  type: Component,
127
- args: [{ selector: 'gn-ui-record-table', template: "<div>\n <div *ngIf=\"totalHits\" class=\"\">\n <div class=\"flex records-information\">\n <div\n translate\n class=\"my-8 ml-4 block text-gray-800\"\n [translateParams]=\"{\n displayed: records.length,\n hits: totalHits\n }\"\n >\n results.records.hits.displayedOn\n </div>\n <div\n *ngIf=\"selectedRecords.length > 0\"\n class=\"my-8 ml-6 block text-gray-400 selected-records\"\n translate\n [translateParams]=\"{ amount: selectedRecords.length }\"\n >\n results.records.hits.selected\n </div>\n </div>\n\n <div\n class=\"grid grid-cols-[repeat(3,minmax(0,max-content))] gap-x-4 gap-y-1\"\n *ngIf=\"records[0].name\"\n >\n <div class=\"contents text-sm\">\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.userDetail</span>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.username</span>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.userEmail</span>\n </div>\n </div>\n <div\n class=\"contents hover:text-gray-900 text-gray-800 cursor-pointer\"\n (click)=\"recordSelect.emit(record)\"\n *ngFor=\"let record of records\"\n >\n <div class=\"record-table-col text-16\">\n {{ record.name }}\n </div>\n <div class=\"record-table-col text-16\">\n {{ record.username }}\n </div>\n <div class=\"record-table-col text-16\">\n {{ record.emailAddresses[0] }}\n </div>\n </div>\n </div>\n\n <div\n class=\"grid grid-cols-[repeat(6,minmax(0,max-content))] gap-x-4 gap-y-1\"\n *ngIf=\"!records[0].name\"\n >\n <div class=\"contents text-sm\">\n <div class=\"flex justify-center items-center\">\n <gn-ui-checkbox\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (changed)=\"selectAll()\"\n type=\"default\"\n >\n </gn-ui-checkbox>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1 text-left\"\n (buttonClick)=\"setSortBy('resourceTitleObject.default.keyword')\"\n >\n <span translate>record.metadata.title</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('resourceTitleObject.default.keyword', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('resourceTitleObject.default.keyword', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div translate=\"\" class=\"record-table-header text-gray-400 flex gap-1\">\n record.metadata.formats\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('recordOwner')\"\n >\n <span translate>record.metadata.author</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('recordOwner', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('recordOwner', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('changeDate')\"\n >\n <span translate>record.metadata.updatedOn</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('changeDate', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('changeDate', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('createDate')\"\n >\n <span translate>record.metadata.createdOn</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('createDate', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('createDate', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n </div>\n <div\n class=\"contents hover:text-gray-900 text-gray-800 cursor-pointer\"\n (click)=\"recordSelect.emit(record)\"\n *ngFor=\"let record of records\"\n >\n <div class=\"record-table-col\">\n <gn-ui-checkbox\n [checked]=\"isChecked(record)\"\n (changed)=\"handleRecordSelectedChange($event, record)\"\n type=\"default\"\n ></gn-ui-checkbox>\n </div>\n <div\n [title]=\"record.title\"\n class=\"record-table-col text-16 self-center\"\n >\n {{ record.title }}\n </div>\n <div\n class=\"record-table-col flex justify-start items-center gap-2 text-16\"\n [title]=\"formats.join(', ')\"\n *ngIf=\"getRecordFormats(record) as formats\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div\n class=\"flex-shrink-0\"\n *ngIf=\"!record.name && formats.slice(2).length > 0\"\n >\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div class=\"record-table-col flex items-center gap-2 text-16\">\n <mat-icon class=\"material-symbols-outlined\"> person </mat-icon>\n <span class=\"\">{{ formatUserInfo(record.extras?.ownerInfo) }}</span>\n </div>\n <div class=\"record-table-col text-16 self-center\">\n {{ dateToString(record.recordUpdated) }}\n </div>\n <div class=\"record-table-col text-16 self-center\">\n {{ dateToString(record.recordCreated) }}\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".record-table-col{@apply px-5 py-3 items-center truncate;}.record-table-header{@apply record-table-col capitalize;}\n"] }]
127
+ args: [{ selector: 'gn-ui-record-table', template: "<div>\n <div *ngIf=\"totalHits\" class=\"\">\n <div class=\"flex records-information\">\n <div\n translate\n class=\"my-8 ml-4 block text-gray-800\"\n [translateParams]=\"{\n displayed: records.length,\n hits: totalHits\n }\"\n >\n results.records.hits.displayedOn\n </div>\n <div\n *ngIf=\"selectedRecords.length > 0\"\n class=\"my-8 ml-6 block text-gray-400 selected-records\"\n translate\n [translateParams]=\"{ amount: selectedRecords.length }\"\n >\n results.records.hits.selected\n </div>\n </div>\n\n <div\n class=\"grid grid-cols-[repeat(3,minmax(0,max-content))] gap-x-4 gap-y-1\"\n *ngIf=\"records[0].name\"\n >\n <div class=\"contents text-sm\">\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.userDetail</span>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.username</span>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.userEmail</span>\n </div>\n </div>\n <div\n class=\"contents hover:text-gray-900 text-gray-800 cursor-pointer\"\n (click)=\"recordsSelect.emit([record])\"\n *ngFor=\"let record of records\"\n >\n <div class=\"record-table-col text-16\">\n {{ record.name }}\n </div>\n <div class=\"record-table-col text-16\">\n {{ record.username }}\n </div>\n <div class=\"record-table-col text-16\">\n {{ record.emailAddresses[0] }}\n </div>\n </div>\n </div>\n\n <div\n class=\"grid grid-cols-[repeat(6,minmax(0,max-content))] gap-x-4 gap-y-1\"\n *ngIf=\"!records[0].name\"\n >\n <div class=\"contents text-sm\">\n <div class=\"flex justify-center items-center\">\n <gn-ui-checkbox\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (changed)=\"selectAll()\"\n type=\"default\"\n >\n </gn-ui-checkbox>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1 text-left\"\n (buttonClick)=\"setSortBy('resourceTitleObject.default.keyword')\"\n >\n <span translate>record.metadata.title</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('resourceTitleObject.default.keyword', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('resourceTitleObject.default.keyword', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div translate=\"\" class=\"record-table-header text-gray-400 flex gap-1\">\n record.metadata.formats\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('recordOwner')\"\n >\n <span translate>record.metadata.author</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('recordOwner', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('recordOwner', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('changeDate')\"\n >\n <span translate>record.metadata.updatedOn</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('changeDate', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('changeDate', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('createDate')\"\n >\n <span translate>record.metadata.createdOn</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('createDate', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('createDate', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n </div>\n <div\n class=\"contents hover:text-gray-900 text-gray-800 cursor-pointer\"\n (click)=\"recordsSelect.emit([record])\"\n *ngFor=\"let record of records\"\n >\n <div class=\"record-table-col\">\n <gn-ui-checkbox\n [checked]=\"isChecked(record)\"\n (changed)=\"handleRecordSelectedChange($event, record)\"\n type=\"default\"\n ></gn-ui-checkbox>\n </div>\n <div\n [title]=\"record.title\"\n class=\"record-table-col text-16 self-center\"\n >\n {{ record.title }}\n </div>\n <div\n class=\"record-table-col flex justify-start items-center gap-2 text-16\"\n [title]=\"formats.join(', ')\"\n *ngIf=\"getRecordFormats(record) as formats\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div\n class=\"flex-shrink-0\"\n *ngIf=\"!record.name && formats.slice(2).length > 0\"\n >\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div class=\"record-table-col flex items-center gap-2 text-16\">\n <mat-icon class=\"material-symbols-outlined\"> person </mat-icon>\n <span class=\"\">{{ formatUserInfo(record.extras?.ownerInfo) }}</span>\n </div>\n <div class=\"record-table-col text-16 self-center\">\n {{ dateToString(record.recordUpdated) }}\n </div>\n <div class=\"record-table-col text-16 self-center\">\n {{ dateToString(record.recordCreated) }}\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".record-table-col{@apply px-5 py-3 items-center truncate;}.record-table-header{@apply record-table-col capitalize;}\n"] }]
128
128
  }], propDecorators: { selectedRecords: [{
129
129
  type: Input
130
130
  }], records: [{
@@ -142,4 +142,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
142
142
  }], sortByChange: [{
143
143
  type: Output
144
144
  }] } });
145
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvc2VhcmNoL3NyYy9saWIvcmVjb3JkLXRhYmxlL3JlY29yZC10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpL3NlYXJjaC9zcmMvbGliL3JlY29yZC10YWJsZS9yZWNvcmQtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUV0RSxPQUFPLEVBRUwsYUFBYSxFQUNiLGFBQWEsRUFDYixpQkFBaUIsR0FDbEIsTUFBTSx3Q0FBd0MsQ0FBQTs7Ozs7OztBQVEvQyxNQUFNLE9BQU8sb0JBQW9CO0lBTGpDO1FBTVcsb0JBQWUsR0FBYSxFQUFFLENBQUE7UUFDOUIsWUFBTyxHQUFVLEVBQUUsQ0FBQTtRQUdsQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFBO1FBQy9DLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUE7UUFDbkQsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQTtRQUNyRCxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFlLENBQUE7S0E2SHpEO0lBM0hDLFlBQVksQ0FBQyxJQUFVO1FBQ3JCLE9BQU8sSUFBSSxFQUFFLGtCQUFrQixDQUFDLFNBQVMsRUFBRTtZQUN6QyxJQUFJLEVBQUUsU0FBUztZQUNmLEtBQUssRUFBRSxNQUFNO1lBQ2IsR0FBRyxFQUFFLFNBQVM7WUFDZCxRQUFRLEVBQUUsS0FBSztTQUNoQixDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsU0FBUyxDQUFDLGdCQUFtQztRQUMzQyxPQUFPLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxD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O1lBQ2hDLENBQUMsQ0FBQyxDQUFBO1NBQ0g7SUFDSCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDdkQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNoRCxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FDdkQsQ0FBQTtZQUNELElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtnQkFDN0MsT0FBTyxJQUFJLENBQUE7YUFDWjtTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQsY0FBYztRQUNaLElBQ0UsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUMvQixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFDakQ7WUFDQSxPQUFPLElBQUksQ0FBQTtTQUNaO1FBQ0QsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDOzhHQXBJVSxvQkFBb0I7a0dBQXBCLG9CQUFvQixtVENmakMsNjVPQXVOQTs7MkZEeE1hLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxvQkFBb0I7OEJBS3JCLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBDYXRhbG9nUmVjb3JkIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvcmVjb3JkJ1xuaW1wb3J0IHtcbiAgRmlsZUZvcm1hdCxcbiAgZ2V0QmFkZ2VDb2xvcixcbiAgZ2V0RmlsZUZvcm1hdCxcbiAgZ2V0Rm9ybWF0UHJpb3JpdHksXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdXRpbC9zaGFyZWQvc3JjJ1xuaW1wb3J0IHsgU29ydEJ5RmllbGQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9zZWFyY2gnXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2duLXVpLXJlY29yZC10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZWNvcmQtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZWNvcmQtdGFibGUuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBSZWNvcmRUYWJsZUNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHNlbGVjdGVkUmVjb3Jkczogc3RyaW5nW10gPSBbXVxuICBASW5wdXQoKSByZWNvcmRzOiBhbnlbXSA9IFtdXG4gIEBJbnB1dCgpIHRvdGFsSGl0cz86IG51bWJlclxuICBASW5wdXQoKSBzb3J0Qnk/OiBTb3J0QnlGaWVsZFxuICBAT3V0cHV0KCkgcmVjb3JkQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPENhdGFsb2dSZWNvcmQ+KClcbiAgQE91dHB1dCgpIHJlY29yZHNTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPENhdGFsb2dSZWNvcmRbXT4oKVxuICBAT3V0cHV0KCkgcmVjb3Jkc0Rlc2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxDYXRhbG9nUmVjb3JkW10+KClcbiAgQE91dHB1dCgpIHNvcnRCeUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8U29ydEJ5RmllbGQ+KClcblxuICBkYXRlVG9TdHJpbmcoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRhdGU/LnRvTG9jYWxlRGF0ZVN0cmluZyh1bmRlZmluZWQsIHtcbiAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICAgIG1vbnRoOiAnbG9uZycsXG4gICAgICBkYXk6ICdudW1lcmljJyxcbiAgICAgIHRpbWVab25lOiAnVVRDJyxcbiAgICB9KVxuICB9XG5cbiAgZ2V0U3RhdHVzKGlzUHVibGlzaGVkVG9BbGw6IGJvb2xlYW4gfCB1bmtub3duKSB7XG4gICAgcmV0dXJuIGlzUHVibGlzaGVkVG9BbGwgPyAncHVibGlzaGVkJyA6ICdub3QgcHVibGlzaGVkJ1xuICB9XG5cbiAgZm9ybWF0VXNlckluZm8odXNlckluZm86IHN0cmluZyB8IHVua25vd24pOiBzdHJpbmcge1xuICAgIGNvbnN0IGluZm9zID0gKHR5cGVvZiB1c2VySW5mbyA9PT0gJ3N0cmluZycgPyB1c2VySW5mbyA6ICcnKS5zcGxpdCgnfCcpXG4gICAgaWYgKGluZm9zICYmIGluZm9zLmxlbmd0aCA9PT0gNCkge1xuICAgICAgcmV0dXJuIGAke2luZm9zWzJdfSAke2luZm9zWzFdfWBcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgZ2V0UmVjb3JkRm9ybWF0cyhyZWNvcmQ6IENhdGFsb2dSZWNvcmQpOiBGaWxlRm9ybWF0W10ge1xuICAgIGlmIChyZWNvcmQua2luZCA9PT0gJ3NlcnZpY2UnIHx8ICEoJ2Rpc3RyaWJ1dGlvbnMnIGluIHJlY29yZCkpIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cbiAgICBjb25zdCBmb3JtYXRzID0gQXJyYXkuZnJvbShcbiAgICAgIG5ldyBTZXQoXG4gICAgICAgIHJlY29yZC5kaXN0cmlidXRpb25zLm1hcCgoZGlzdHJpYnV0aW9uKSA9PiBnZXRGaWxlRm9ybWF0KGRpc3RyaWJ1dGlvbikpXG4gICAgICApXG4gICAgKS5maWx0ZXIoKGZvcm1hdCkgPT4gISFmb3JtYXQpXG4gICAgZm9ybWF0cy5zb3J0KChhLCBiKSA9PiBnZXRGb3JtYXRQcmlvcml0eShiKSAtIGdldEZvcm1hdFByaW9yaXR5KGEpKVxuICAgIHJldHVybiBmb3JtYXRzXG4gIH1cblxuICBnZXRCYWRnZUNvbG9yKGZvcm1hdDogRmlsZUZvcm1hdCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldEJhZGdlQ29sb3IoZm9ybWF0KVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcmRlckZvckNvbHVtbihjb2w6IHN0cmluZyk6ICdhc2MnIHwgJ2Rlc2MnIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLnNvcnRCeSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgbGV0IG9yZGVyOiAnYXNjJyB8ICdkZXNjJyB8IG51bGwgPSBudWxsXG4gICAgY29uc3Qgc29ydGVkQXJyYXkgPSBBcnJheS5pc0FycmF5KHRoaXMuc29ydEJ5WzBdKVxuICAgICAgPyB0aGlzLnNvcnRCeVxuICAgICAgOiBbdGhpcy5zb3J0QnldXG4gICAgc29ydGVkQXJyYXkuZm9yRWFjaCgoc29ydGVkQ29sKSA9PiB7XG4gICAgICBpZiAoc29ydGVkQ29sWzFdID09PSBjb2wpIHtcbiAgICAgICAgb3JkZXIgPSBzb3J0ZWRDb2xbMF1cbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBvcmRlclxuICB9XG5cbiAgc2V0U29ydEJ5KGNvbDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgc29ydE9yZGVyID0gdGhpcy5nZXRPcmRlckZvckNvbHVtbihjb2wpXG4gICAgbGV0IG5ld09yZGVyXG4gICAgaWYgKHNvcnRPcmRlcikge1xuICAgICAgbmV3T3JkZXIgPSBzb3J0T3JkZXIgPT09ICdhc2MnID8gJ2Rlc2MnIDogJ2FzYydcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3T3JkZXIgPSAnYXNjJ1xuICAgIH1cbiAgICB0aGlzLnNvcnRCeUNoYW5nZS5lbWl0KFtuZXdPcmRlciwgY29sXSlcbiAgICB0aGlzLnNvcnRCeSA9IFtuZXdPcmRlciwgY29sXVxuICB9XG5cbiAgaXNTb3J0ZWRCeShjb2w6IHN0cmluZywgb3JkZXI6ICdhc2MnIHwgJ2Rlc2MnKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc29ydE9yZGVyID0gdGhpcy5nZXRPcmRlckZvckNvbHVtbihjb2wpXG4gICAgcmV0dXJuIHNvcnRPcmRlciA9PT0gb3JkZXJcbiAgfVxuXG4gIGlzQ2hlY2tlZChyZWNvcmQ6IENhdGFsb2dSZWNvcmQpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFJlY29yZHMuaW5jbHVkZXMocmVjb3JkLnVuaXF1ZUlkZW50aWZpZXIpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGhhbmRsZVJlY29yZFNlbGVjdGVkQ2hhbmdlKHNlbGVjdGVkOiBib29sZWFuLCByZWNvcmQ6IENhdGFsb2dSZWNvcmQpIHtcbiAgICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgICB0aGlzLnJlY29yZHNEZXNlbGVjdC5lbWl0KFtyZWNvcmRdKVxuICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZHMgPSB0aGlzLnNlbGVjdGVkUmVjb3Jkcy5maWx0ZXIoXG4gICAgICAgICh2YWwpID0+IHZhbCAhPT0gcmVjb3JkLnVuaXF1ZUlkZW50aWZpZXJcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZWNvcmRzU2VsZWN0LmVtaXQoW3JlY29yZF0pXG4gICAgICB0aGlzLnNlbGVjdGVkUmVjb3Jkcy5wdXNoKHJlY29yZC51bmlxdWVJZGVudGlmaWVyKVxuICAgIH1cbiAgfVxuXG4gIHNlbGVjdEFsbCgpIHtcbiAgICBpZiAodGhpcy5pc0FsbFNlbGVjdGVkKCkpIHtcbiAgICAgIHRoaXMucmVjb3Jkc0Rlc2VsZWN0LmVtaXQodGhpcy5yZWNvcmRzKVxuICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZHMgPSBbXVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlY29yZHNTZWxlY3QuZW1pdCh0aGlzLnJlY29yZHMpXG4gICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkcyA9IHRoaXMucmVjb3Jkcy5tYXAoKHJlY29yZCkgPT4ge1xuICAgICAgICByZXR1cm4gcmVjb3JkLnVuaXF1ZUlkZW50aWZpZXJcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgaXNBbGxTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFJlY29yZHMubGVuZ3RoID09PSB0aGlzLnJlY29yZHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBhbGxSZWNvcmRzID0gdGhpcy5yZWNvcmRzLmZpbHRlcigocmVjb3JkKSA9PlxuICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3Jkcy5pbmNsdWRlcyhyZWNvcmQudW5pcXVlSWRlbnRpZmllcilcbiAgICAgIClcbiAgICAgIGlmIChhbGxSZWNvcmRzLmxlbmd0aCA9PT0gdGhpcy5yZWNvcmRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlzU29tZVNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmRzLmxlbmd0aCA+IDAgJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmRzLmxlbmd0aCA8IHRoaXMucmVjb3Jkcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iLCI8ZGl2PlxuICA8ZGl2ICpuZ0lmPVwidG90YWxIaXRzXCIgY2xhc3M9XCJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCByZWNvcmRzLWluZm9ybWF0aW9uXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICBjbGFzcz1cIm15LTggbWwtNCBibG9jayB0ZXh0LWdyYXktODAwXCJcbiAgICAgICAgW3RyYW5zbGF0ZVBhcmFtc109XCJ7XG4gICAgICAgICAgZGlzcGxheWVkOiByZWNvcmRzLmxlbmd0aCxcbiAgICAgICAgICBoaXRzOiB0b3RhbEhpdHNcbiAgICAgICAgfVwiXG4gICAgICA+XG4gICAgICAgIHJlc3VsdHMucmVjb3Jkcy5oaXRzLmRpc3BsYXllZE9uXG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJzZWxlY3RlZFJlY29yZHMubGVuZ3RoID4gMFwiXG4gICAgICAgIGNsYXNzPVwibXktOCBtbC02IGJsb2NrIHRleHQtZ3JheS00MDAgc2VsZWN0ZWQtcmVjb3Jkc1wiXG4gICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICBbdHJhbnNsYXRlUGFyYW1zXT1cInsgYW1vdW50OiBzZWxlY3RlZFJlY29yZHMubGVuZ3RoIH1cIlxuICAgICAgPlxuICAgICAgICByZXN1bHRzLnJlY29yZHMuaGl0cy5zZWxlY3RlZFxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImdyaWQgZ3JpZC1jb2xzLVtyZXBlYXQoMyxtaW5tYXgoMCxtYXgtY29udGVudCkpXSBnYXAteC00IGdhcC15LTFcIlxuICAgICAgKm5nSWY9XCJyZWNvcmRzWzBdLm5hbWVcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50cyB0ZXh0LXNtXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtdGFibGUtaGVhZGVyIHRleHQtZ3JheS00MDAgZmxleCBnYXAtMVwiPlxuICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5kYXNoYm9hcmQucmVjb3Jkcy51c2VyRGV0YWlsPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC10YWJsZS1oZWFkZXIgdGV4dC1ncmF5LTQwMCBmbGV4IGdhcC0xXCI+XG4gICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPmRhc2hib2FyZC5yZWNvcmRzLnVzZXJuYW1lPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC10YWJsZS1oZWFkZXIgdGV4dC1ncmF5LTQwMCBmbGV4IGdhcC0xXCI+XG4gICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPmRhc2hib2FyZC5yZWNvcmRzLnVzZXJFbWFpbDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjb250ZW50cyBob3Zlcjp0ZXh0LWdyYXktOTAwIHRleHQtZ3JheS04MDAgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAoY2xpY2spPVwicmVjb3JkU2VsZWN0LmVtaXQocmVjb3JkKVwiXG4gICAgICAgICpuZ0Zvcj1cImxldCByZWNvcmQgb2YgcmVjb3Jkc1wiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtdGFibGUtY29sIHRleHQtMTZcIj5cbiAgICAgICAgICB7eyByZWNvcmQubmFtZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC10YWJsZS1jb2wgdGV4dC0xNlwiPlxuICAgICAgICAgIHt7IHJlY29yZC51c2VybmFtZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC10YWJsZS1jb2wgdGV4dC0xNlwiPlxuICAgICAgICAgIHt7IHJlY29yZC5lbWFpbEFkZHJlc3Nlc1swXSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJncmlkIGdyaWQtY29scy1bcmVwZWF0KDYsbWlubWF4KDAsbWF4LWNvbnRlbnQpKV0gZ2FwLXgtNCBnYXAteS0xXCJcbiAgICAgICpuZ0lmPVwiIXJlY29yZHNbMF0ubmFtZVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRzIHRleHQtc21cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgPGduLXVpLWNoZWNrYm94XG4gICAgICAgICAgICBbY2hlY2tlZF09XCJpc0FsbFNlbGVjdGVkKClcIlxuICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiaXNTb21lU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAoY2hhbmdlZCk9XCJzZWxlY3RBbGwoKVwiXG4gICAgICAgICAgICB0eXBlPVwiZGVmYXVsdFwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvZ24tdWktY2hlY2tib3g+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVjb3JkLXRhYmxlLWhlYWRlciB0ZXh0LWdyYXktNDAwIGZsZXggZ2FwLTFcIj5cbiAgICAgICAgICA8Z24tdWktYnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwibGlnaHRcIlxuICAgICAgICAgICAgZXh0cmFDbGFzcz1cInB4LTMgcGwtMCBzcGFjZS14LTEgdGV4dC1sZWZ0XCJcbiAgICAgICAgICAgIChidXR0b25DbGljayk9XCJzZXRTb3J0QnkoJ3Jlc291cmNlVGl0bGVPYmplY3QuZGVmYXVsdC5rZXl3b3JkJylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5yZWNvcmQubWV0YWRhdGEudGl0bGU8L3NwYW4+XG4gICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJpc1NvcnRlZEJ5KCdyZXNvdXJjZVRpdGxlT2JqZWN0LmRlZmF1bHQua2V5d29yZCcsICdkZXNjJylcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBleHBhbmRfbW9yZTwvbWF0LWljb25cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtaWNvblxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIlxuICAgICAgICAgICAgICAqbmdJZj1cImlzU29ydGVkQnkoJ3Jlc291cmNlVGl0bGVPYmplY3QuZGVmYXVsdC5rZXl3b3JkJywgJ2FzYycpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgZXhwYW5kX2xlc3M8L21hdC1pY29uXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9nbi11aS1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IHRyYW5zbGF0ZT1cIlwiIGNsYXNzPVwicmVjb3JkLXRhYmxlLWhlYWRlciB0ZXh0LWdyYXktNDAwIGZsZXggZ2FwLTFcIj5cbiAgICAgICAgICByZWNvcmQubWV0YWRhdGEuZm9ybWF0c1xuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC10YWJsZS1oZWFkZXIgdGV4dC1ncmF5LTQwMCBmbGV4IGdhcC0xXCI+XG4gICAgICAgICAgPGduLXVpLWJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImxpZ2h0XCJcbiAgICAgICAgICAgIGV4dHJhQ2xhc3M9XCJweC0zIHBsLTAgc3BhY2UteC0xXCJcbiAgICAgICAgICAgIChidXR0b25DbGljayk9XCJzZXRTb3J0QnkoJ3JlY29yZE93bmVyJylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5yZWNvcmQubWV0YWRhdGEuYXV0aG9yPC9zcGFuPlxuICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiaXNTb3J0ZWRCeSgncmVjb3JkT3duZXInLCAnZGVzYycpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgZXhwYW5kX21vcmU8L21hdC1pY29uXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJpc1NvcnRlZEJ5KCdyZWNvcmRPd25lcicsICdhc2MnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIGV4cGFuZF9sZXNzPC9tYXQtaWNvblxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZ24tdWktYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC10YWJsZS1oZWFkZXIgdGV4dC1ncmF5LTQwMCBmbGV4IGdhcC0xXCI+XG4gICAgICAgICAgPGduLXVpLWJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImxpZ2h0XCJcbiAgICAgICAgICAgIGV4dHJhQ2xhc3M9XCJweC0zIHBsLTAgc3BhY2UteC0xXCJcbiAgICAgICAgICAgIChidXR0b25DbGljayk9XCJzZXRTb3J0QnkoJ2NoYW5nZURhdGUnKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPnJlY29yZC5tZXRhZGF0YS51cGRhdGVkT248L3NwYW4+XG4gICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJpc1NvcnRlZEJ5KCdjaGFuZ2VEYXRlJywgJ2Rlc2MnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIGV4cGFuZF9tb3JlPC9tYXQtaWNvblxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiaXNTb3J0ZWRCeSgnY2hhbmdlRGF0ZScsICdhc2MnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIGV4cGFuZF9sZXNzPC9tYXQtaWNvblxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZ24tdWktYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC10YWJsZS1oZWFkZXIgdGV4dC1ncmF5LTQwMCBmbGV4IGdhcC0xXCI+XG4gICAgICAgICAgPGduLXVpLWJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImxpZ2h0XCJcbiAgICAgICAgICAgIGV4dHJhQ2xhc3M9XCJweC0zIHBsLTAgc3BhY2UteC0xXCJcbiAgICAgICAgICAgIChidXR0b25DbGljayk9XCJzZXRTb3J0QnkoJ2NyZWF0ZURhdGUnKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPnJlY29yZC5tZXRhZGF0YS5jcmVhdGVkT248L3NwYW4+XG4gICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJpc1NvcnRlZEJ5KCdjcmVhdGVEYXRlJywgJ2Rlc2MnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIGV4cGFuZF9tb3JlPC9tYXQtaWNvblxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiaXNTb3J0ZWRCeSgnY3JlYXRlRGF0ZScsICdhc2MnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIGV4cGFuZF9sZXNzPC9tYXQtaWNvblxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZ24tdWktYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNvbnRlbnRzIGhvdmVyOnRleHQtZ3JheS05MDAgdGV4dC1ncmF5LTgwMCBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgIChjbGljayk9XCJyZWNvcmRTZWxlY3QuZW1pdChyZWNvcmQpXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IHJlY29yZCBvZiByZWNvcmRzXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC10YWJsZS1jb2xcIj5cbiAgICAgICAgICA8Z24tdWktY2hlY2tib3hcbiAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQ2hlY2tlZChyZWNvcmQpXCJcbiAgICAgICAgICAgIChjaGFuZ2VkKT1cImhhbmRsZVJlY29yZFNlbGVjdGVkQ2hhbmdlKCRldmVudCwgcmVjb3JkKVwiXG4gICAgICAgICAgICB0eXBlPVwiZGVmYXVsdFwiXG4gICAgICAgICAgPjwvZ24tdWktY2hlY2tib3g+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgW3RpdGxlXT1cInJlY29yZC50aXRsZVwiXG4gICAgICAgICAgY2xhc3M9XCJyZWNvcmQtdGFibGUtY29sIHRleHQtMTYgc2VsZi1jZW50ZXJcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgcmVjb3JkLnRpdGxlIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJyZWNvcmQtdGFibGUtY29sIGZsZXgganVzdGlmeS1zdGFydCBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC0xNlwiXG4gICAgICAgICAgW3RpdGxlXT1cImZvcm1hdHMuam9pbignLCAnKVwiXG4gICAgICAgICAgKm5nSWY9XCJnZXRSZWNvcmRGb3JtYXRzKHJlY29yZCkgYXMgZm9ybWF0c1wiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJiYWRnZS1idG4gbWluLXctWzQ1cHhdIHRleHQtc20gdGV4dC13aGl0ZSBweC0yIGZsZXgtc2hyaW5rLTBcIlxuICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiZ2V0QmFkZ2VDb2xvcihmb3JtYXRzWzBdKVwiXG4gICAgICAgICAgICAqbmdJZj1cImZvcm1hdHNbMF1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGZvcm1hdHNbMF0gfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2UtYnRuIG1pbi13LVs0NXB4XSB0ZXh0LXNtIHRleHQtd2hpdGUgcHgtMiBmbGV4LXNocmluay0wXCJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImdldEJhZGdlQ29sb3IoZm9ybWF0c1sxXSlcIlxuICAgICAgICAgICAgKm5nSWY9XCJmb3JtYXRzWzFdXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBmb3JtYXRzWzFdIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleC1zaHJpbmstMFwiXG4gICAgICAgICAgICAqbmdJZj1cIiFyZWNvcmQubmFtZSAmJiBmb3JtYXRzLnNsaWNlKDIpLmxlbmd0aCA+IDBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuPit7eyBmb3JtYXRzLnNsaWNlKDIpLmxlbmd0aCB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtdGFibGUtY29sIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtMTZcIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IHBlcnNvbiA8L21hdC1pY29uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiXCI+e3sgZm9ybWF0VXNlckluZm8ocmVjb3JkLmV4dHJhcz8ub3duZXJJbmZvKSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtdGFibGUtY29sIHRleHQtMTYgc2VsZi1jZW50ZXJcIj5cbiAgICAgICAgICB7eyBkYXRlVG9TdHJpbmcocmVjb3JkLnJlY29yZFVwZGF0ZWQpIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVjb3JkLXRhYmxlLWNvbCB0ZXh0LTE2IHNlbGYtY2VudGVyXCI+XG4gICAgICAgICAge3sgZGF0ZVRvU3RyaW5nKHJlY29yZC5yZWNvcmRDcmVhdGVkKSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvc2VhcmNoL3NyYy9saWIvcmVjb3JkLXRhYmxlL3JlY29yZC10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpL3NlYXJjaC9zcmMvbGliL3JlY29yZC10YWJsZS9yZWNvcmQtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUV0RSxPQUFPLEVBRUwsYUFBYSxFQUNiLGFBQWEsRUFDYixpQkFBaUIsR0FDbEIsTUFBTSx3Q0FBd0MsQ0FBQTs7Ozs7OztBQVEvQyxNQUFNLE9BQU8sb0JBQW9CO0lBTGpDO1FBTVcsb0JBQWUsR0FBYSxFQUFFLENBQUE7UUFDOUIsWUFBTyxHQUFVLEVBQUUsQ0FBQTtRQUdsQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFBO1FBQy9DLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUE7UUFDbkQsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQTtRQUNyRCxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFlLENBQUE7S0E2SHpEO0lBM0hDLFlBQVksQ0FBQyxJQUFVO1FBQ3JCLE9BQU8sSUFBSSxFQUFFLGtCQUFrQixDQUFDLFNBQVMsRUFBRTtZQUN6QyxJQUFJLEVBQUUsU0FBUztZQUNmLEtBQUssRUFBRSxNQUFNO1lBQ2IsR0FBRyxFQUFFLFNBQVM7WUFDZCxRQUFRLEVBQUUsS0FBSztTQUNoQixDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsU0FBUyxDQUFDLGdCQUFtQztRQUMzQyxPQUFPLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxD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O1lBQ2hDLENBQUMsQ0FBQyxDQUFBO1NBQ0g7SUFDSCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDdkQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNoRCxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FDdkQsQ0FBQTtZQUNELElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtnQkFDN0MsT0FBTyxJQUFJLENBQUE7YUFDWjtTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQsY0FBYztRQUNaLElBQ0UsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUMvQixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFDakQ7WUFDQSxPQUFPLElBQUksQ0FBQTtTQUNaO1FBQ0QsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDOzhHQXBJVSxvQkFBb0I7a0dBQXBCLG9CQUFvQixtVENmakMsbTZPQXVOQTs7MkZEeE1hLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxvQkFBb0I7OEJBS3JCLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBDYXRhbG9nUmVjb3JkIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvcmVjb3JkJ1xuaW1wb3J0IHtcbiAgRmlsZUZvcm1hdCxcbiAgZ2V0QmFkZ2VDb2xvcixcbiAgZ2V0RmlsZUZvcm1hdCxcbiAgZ2V0Rm9ybWF0UHJpb3JpdHksXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdXRpbC9zaGFyZWQvc3JjJ1xuaW1wb3J0IHsgU29ydEJ5RmllbGQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9zZWFyY2gnXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2duLXVpLXJlY29yZC10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZWNvcmQtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZWNvcmQtdGFibGUuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBSZWNvcmRUYWJsZUNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHNlbGVjdGVkUmVjb3Jkczogc3RyaW5nW10gPSBbXVxuICBASW5wdXQoKSByZWNvcmRzOiBhbnlbXSA9IFtdXG4gIEBJbnB1dCgpIHRvdGFsSGl0cz86IG51bWJlclxuICBASW5wdXQoKSBzb3J0Qnk/OiBTb3J0QnlGaWVsZFxuICBAT3V0cHV0KCkgcmVjb3JkQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPENhdGFsb2dSZWNvcmQ+KClcbiAgQE91dHB1dCgpIHJlY29yZHNTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPENhdGFsb2dSZWNvcmRbXT4oKVxuICBAT3V0cHV0KCkgcmVjb3Jkc0Rlc2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxDYXRhbG9nUmVjb3JkW10+KClcbiAgQE91dHB1dCgpIHNvcnRCeUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8U29ydEJ5RmllbGQ+KClcblxuICBkYXRlVG9TdHJpbmcoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRhdGU/LnRvTG9jYWxlRGF0ZVN0cmluZyh1bmRlZmluZWQsIHtcbiAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICAgIG1vbnRoOiAnbG9uZycsXG4gICAgICBkYXk6ICdudW1lcmljJyxcbiAgICAgIHRpbWVab25lOiAnVVRDJyxcbiAgICB9KVxuICB9XG5cbiAgZ2V0U3RhdHVzKGlzUHVibGlzaGVkVG9BbGw6IGJvb2xlYW4gfCB1bmtub3duKSB7XG4gICAgcmV0dXJuIGlzUHVibGlzaGVkVG9BbGwgPyAncHVibGlzaGVkJyA6ICdub3QgcHVibGlzaGVkJ1xuICB9XG5cbiAgZm9ybWF0VXNlckluZm8odXNlckluZm86IHN0cmluZyB8IHVua25vd24pOiBzdHJpbmcge1xuICAgIGNvbnN0IGluZm9zID0gKHR5cGVvZiB1c2VySW5mbyA9PT0gJ3N0cmluZycgPyB1c2VySW5mbyA6ICcnKS5zcGxpdCgnfCcpXG4gICAgaWYgKGluZm9zICYmIGluZm9zLmxlbmd0aCA9PT0gNCkge1xuICAgICAgcmV0dXJuIGAke2luZm9zWzJdfSAke2luZm9zWzFdfWBcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgZ2V0UmVjb3JkRm9ybWF0cyhyZWNvcmQ6IENhdGFsb2dSZWNvcmQpOiBGaWxlRm9ybWF0W10ge1xuICAgIGlmIChyZWNvcmQua2luZCA9PT0gJ3NlcnZpY2UnIHx8ICEoJ2Rpc3RyaWJ1dGlvbnMnIGluIHJlY29yZCkpIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cbiAgICBjb25zdCBmb3JtYXRzID0gQXJyYXkuZnJvbShcbiAgICAgIG5ldyBTZXQoXG4gICAgICAgIHJlY29yZC5kaXN0cmlidXRpb25zLm1hcCgoZGlzdHJpYnV0aW9uKSA9PiBnZXRGaWxlRm9ybWF0KGRpc3RyaWJ1dGlvbikpXG4gICAgICApXG4gICAgKS5maWx0ZXIoKGZvcm1hdCkgPT4gISFmb3JtYXQpXG4gICAgZm9ybWF0cy5zb3J0KChhLCBiKSA9PiBnZXRGb3JtYXRQcmlvcml0eShiKSAtIGdldEZvcm1hdFByaW9yaXR5KGEpKVxuICAgIHJldHVybiBmb3JtYXRzXG4gIH1cblxuICBnZXRCYWRnZUNvbG9yKGZvcm1hdDogRmlsZUZvcm1hdCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldEJhZGdlQ29sb3IoZm9ybWF0KVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcmRlckZvckNvbHVtbihjb2w6IHN0cmluZyk6ICdhc2MnIHwgJ2Rlc2MnIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLnNvcnRCeSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgbGV0IG9yZGVyOiAnYXNjJyB8ICdkZXNjJyB8IG51bGwgPSBudWxsXG4gICAgY29uc3Qgc29ydGVkQXJyYXkgPSBBcnJheS5pc0FycmF5KHRoaXMuc29ydEJ5WzBdKVxuICAgICAgPyB0aGlzLnNvcnRCeVxuICAgICAgOiBbdGhpcy5zb3J0QnldXG4gICAgc29ydGVkQXJyYXkuZm9yRWFjaCgoc29ydGVkQ29sKSA9PiB7XG4gICAgICBpZiAoc29ydGVkQ29sWzFdID09PSBjb2wpIHtcbiAgICAgICAgb3JkZXIgPSBzb3J0ZWRDb2xbMF1cbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBvcmRlclxuICB9XG5cbiAgc2V0U29ydEJ5KGNvbDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgc29ydE9yZGVyID0gdGhpcy5nZXRPcmRlckZvckNvbHVtbihjb2wpXG4gICAgbGV0IG5ld09yZGVyXG4gICAgaWYgKHNvcnRPcmRlcikge1xuICAgICAgbmV3T3JkZXIgPSBzb3J0T3JkZXIgPT09ICdhc2MnID8gJ2Rlc2MnIDogJ2FzYydcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3T3JkZXIgPSAnYXNjJ1xuICAgIH1cbiAgICB0aGlzLnNvcnRCeUNoYW5nZS5lbWl0KFtuZXdPcmRlciwgY29sXSlcbiAgICB0aGlzLnNvcnRCeSA9IFtuZXdPcmRlciwgY29sXVxuICB9XG5cbiAgaXNTb3J0ZWRCeShjb2w6IHN0cmluZywgb3JkZXI6ICdhc2MnIHwgJ2Rlc2MnKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc29ydE9yZGVyID0gdGhpcy5nZXRPcmRlckZvckNvbHVtbihjb2wpXG4gICAgcmV0dXJuIHNvcnRPcmRlciA9PT0gb3JkZXJcbiAgfVxuXG4gIGlzQ2hlY2tlZChyZWNvcmQ6IENhdGFsb2dSZWNvcmQpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFJlY29yZHMuaW5jbHVkZXMocmVjb3JkLnVuaXF1ZUlkZW50aWZpZXIpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGhhbmRsZVJlY29yZFNlbGVjdGVkQ2hhbmdlKHNlbGVjdGVkOiBib29sZWFuLCByZWNvcmQ6IENhdGFsb2dSZWNvcmQpIHtcbiAgICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgICB0aGlzLnJlY29yZHNEZXNlbGVjdC5lbWl0KFtyZWNvcmRdKVxuICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZHMgPSB0aGlzLnNlbGVjdGVkUmVjb3Jkcy5maWx0ZXIoXG4gICAgICAgICh2YWwpID0+IHZhbCAhPT0gcmVjb3JkLnVuaXF1ZUlkZW50aWZpZXJcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZWNvcmRzU2VsZWN0LmVtaXQoW3JlY29yZF0pXG4gICAgICB0aGlzLnNlbGVjdGVkUmVjb3Jkcy5wdXNoKHJlY29yZC51bmlxdWVJZGVudGlmaWVyKVxuICAgIH1cbiAgfVxuXG4gIHNlbGVjdEFsbCgpIHtcbiAgICBpZiAodGhpcy5pc0FsbFNlbGVjdGVkKCkpIHtcbiAgICAgIHRoaXMucmVjb3Jkc0Rlc2VsZWN0LmVtaXQodGhpcy5yZWNvcmRzKVxuICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZHMgPSBbXVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlY29yZHNTZWxlY3QuZW1pdCh0aGlzLnJlY29yZHMpXG4gICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkcyA9IHRoaXMucmVjb3Jkcy5tYXAoKHJlY29yZCkgPT4ge1xuICAgICAgICByZXR1cm4gcmVjb3JkLnVuaXF1ZUlkZW50aWZpZXJcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgaXNBbGxTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFJlY29yZHMubGVuZ3RoID09PSB0aGlzLnJlY29yZHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBhbGxSZWNvcmRzID0gdGhpcy5yZWNvcmRzLmZpbHRlcigocmVjb3JkKSA9PlxuICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3Jkcy5pbmNsdWRlcyhyZWNvcmQudW5pcXVlSWRlbnRpZmllcilcbiAgICAgIClcbiAgICAgIGlmIChhbGxSZWNvcmRzLmxlbmd0aCA9PT0gdGhpcy5yZWNvcmRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlzU29tZVNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmRzLmxlbmd0aCA+IDAgJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmRzLmxlbmd0aCA8IHRoaXMucmVjb3Jkcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iLCI8ZGl2PlxuICA8ZGl2ICpuZ0lmPVwidG90YWxIaXRzXCIgY2xhc3M9XCJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCByZWNvcmRzLWluZm9ybWF0aW9uXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICBjbGFzcz1cIm15LTggbWwtNCBibG9jayB0ZXh0LWdyYXktODAwXCJcbiAgICAgICAgW3RyYW5zbGF0ZVBhcmFtc109XCJ7XG4gICAgICAgICAgZGlzcGxheWVkOiByZWNvcmRzLmxlbmd0aCxcbiAgICAgICAgICBoaXRzOiB0b3RhbEhpdHNcbiAgICAgICAgfVwiXG4gICAgICA+XG4gICAgICAgIHJlc3VsdHMucmVjb3Jkcy5oaXRzLmRpc3BsYXllZE9uXG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJzZWxlY3RlZFJlY29yZHMubGVuZ3RoID4gMFwiXG4gICAgICAgIGNsYXNzPVwibXktOCBtbC02IGJsb2NrIHRleHQtZ3JheS00MDAgc2VsZWN0ZWQtcmVjb3Jkc1wiXG4gICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICBbdHJhbnNsYXRlUGFyYW1zXT1cInsgYW1vdW50OiBzZWxlY3RlZFJlY29yZHMubGVuZ3RoIH1cIlxuICAgICAgPlxuICAgICAgICByZXN1bHRzLnJlY29yZHMuaGl0cy5zZWxlY3RlZFxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImdyaWQgZ3JpZC1jb2xzLVtyZXBlYXQoMyxtaW5tYXgoMCxtYXgtY29udGVudCkpXSBnYXAteC00IGdhcC15LTFcIlxuICAgICAgKm5nSWY9XCJyZWNvcmRzWzBdLm5hbWVcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50cyB0ZXh0LXNtXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtdGFibGUtaGVhZGVyIHRleHQtZ3JheS00MDAgZmxleCBnYXAtMVwiPlxuICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5kYXNoYm9hcmQucmVjb3Jkcy51c2VyRGV0YWlsPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC10YWJsZS1oZWFkZXIgdGV4dC1ncmF5LTQwMCBmbGV4IGdhcC0xXCI+XG4gICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPmRhc2hib2FyZC5yZWNvcmRzLnVzZXJuYW1lPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC10YWJsZS1oZWFkZXIgdGV4dC1ncmF5LTQwMCBmbGV4IGdhcC0xXCI+XG4gICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPmRhc2hib2FyZC5yZWNvcmRzLnVzZXJFbWFpbDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjb250ZW50cyBob3Zlcjp0ZXh0LWdyYXktOTAwIHRleHQtZ3JheS04MDAgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAoY2xpY2spPVwicmVjb3Jkc1NlbGVjdC5lbWl0KFtyZWNvcmRdKVwiXG4gICAgICAgICpuZ0Zvcj1cImxldCByZWNvcmQgb2YgcmVjb3Jkc1wiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtdGFibGUtY29sIHRleHQtMTZcIj5cbiAgICAgICAgICB7eyByZWNvcmQubmFtZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC10YWJsZS1jb2wgdGV4dC0xNlwiPlxuICAgICAgICAgIHt7IHJlY29yZC51c2VybmFtZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC10YWJsZS1jb2wgdGV4dC0xNlwiPlxuICAgICAgICAgIHt7IHJlY29yZC5lbWFpbEFkZHJlc3Nlc1swXSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJncmlkIGdyaWQtY29scy1bcmVwZWF0KDYsbWlubWF4KDAsbWF4LWNvbnRlbnQpKV0gZ2FwLXgtNCBnYXAteS0xXCJcbiAgICAgICpuZ0lmPVwiIXJlY29yZHNbMF0ubmFtZVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRzIHRleHQtc21cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgPGduLXVpLWNoZWNrYm94XG4gICAgICAgICAgICBbY2hlY2tlZF09XCJpc0FsbFNlbGVjdGVkKClcIlxuICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiaXNTb21lU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAoY2hhbmdlZCk9XCJzZWxlY3RBbGwoKVwiXG4gICAgICAgICAgICB0eXBlPVwiZGVmYXVsdFwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvZ24tdWktY2hlY2tib3g+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVjb3JkLXRhYmxlLWhlYWRlciB0ZXh0LWdyYXktNDAwIGZsZXggZ2FwLTFcIj5cbiAgICAgICAgICA8Z24tdWktYnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwibGlnaHRcIlxuICAgICAgICAgICAgZXh0cmFDbGFzcz1cInB4LTMgcGwtMCBzcGFjZS14LTEgdGV4dC1sZWZ0XCJcbiAgICAgICAgICAgIChidXR0b25DbGljayk9XCJzZXRTb3J0QnkoJ3Jlc291cmNlVGl0bGVPYmplY3QuZGVmYXVsdC5rZXl3b3JkJylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5yZWNvcmQubWV0YWRhdGEudGl0bGU8L3NwYW4+XG4gICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJpc1NvcnRlZEJ5KCdyZXNvdXJjZVRpdGxlT2JqZWN0LmRlZmF1bHQua2V5d29yZCcsICdkZXNjJylcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBleHBhbmRfbW9yZTwvbWF0LWljb25cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtaWNvblxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIlxuICAgICAgICAgICAgICAqbmdJZj1cImlzU29ydGVkQnkoJ3Jlc291cmNlVGl0bGVPYmplY3QuZGVmYXVsdC5rZXl3b3JkJywgJ2FzYycpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgZXhwYW5kX2xlc3M8L21hdC1pY29uXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9nbi11aS1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IHRyYW5zbGF0ZT1cIlwiIGNsYXNzPVwicmVjb3JkLXRhYmxlLWhlYWRlciB0ZXh0LWdyYXktNDAwIGZsZXggZ2FwLTFcIj5cbiAgICAgICAgICByZWNvcmQubWV0YWRhdGEuZm9ybWF0c1xuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC10YWJsZS1oZWFkZXIgdGV4dC1ncmF5LTQwMCBmbGV4IGdhcC0xXCI+XG4gICAgICAgICAgPGduLXVpLWJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImxpZ2h0XCJcbiAgICAgICAgICAgIGV4dHJhQ2xhc3M9XCJweC0zIHBsLTAgc3BhY2UteC0xXCJcbiAgICAgICAgICAgIChidXR0b25DbGljayk9XCJzZXRTb3J0QnkoJ3JlY29yZE93bmVyJylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5yZWNvcmQubWV0YWRhdGEuYXV0aG9yPC9zcGFuPlxuICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiaXNTb3J0ZWRCeSgncmVjb3JkT3duZXInLCAnZGVzYycpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgZXhwYW5kX21vcmU8L21hdC1pY29uXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJpc1NvcnRlZEJ5KCdyZWNvcmRPd25lcicsICdhc2MnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIGV4cGFuZF9sZXNzPC9tYXQtaWNvblxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZ24tdWktYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC10YWJsZS1oZWFkZXIgdGV4dC1ncmF5LTQwMCBmbGV4IGdhcC0xXCI+XG4gICAgICAgICAgPGduLXVpLWJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImxpZ2h0XCJcbiAgICAgICAgICAgIGV4dHJhQ2xhc3M9XCJweC0zIHBsLTAgc3BhY2UteC0xXCJcbiAgICAgICAgICAgIChidXR0b25DbGljayk9XCJzZXRTb3J0QnkoJ2NoYW5nZURhdGUnKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPnJlY29yZC5tZXRhZGF0YS51cGRhdGVkT248L3NwYW4+XG4gICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJpc1NvcnRlZEJ5KCdjaGFuZ2VEYXRlJywgJ2Rlc2MnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIGV4cGFuZF9tb3JlPC9tYXQtaWNvblxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiaXNTb3J0ZWRCeSgnY2hhbmdlRGF0ZScsICdhc2MnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIGV4cGFuZF9sZXNzPC9tYXQtaWNvblxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZ24tdWktYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC10YWJsZS1oZWFkZXIgdGV4dC1ncmF5LTQwMCBmbGV4IGdhcC0xXCI+XG4gICAgICAgICAgPGduLXVpLWJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImxpZ2h0XCJcbiAgICAgICAgICAgIGV4dHJhQ2xhc3M9XCJweC0zIHBsLTAgc3BhY2UteC0xXCJcbiAgICAgICAgICAgIChidXR0b25DbGljayk9XCJzZXRTb3J0QnkoJ2NyZWF0ZURhdGUnKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPnJlY29yZC5tZXRhZGF0YS5jcmVhdGVkT248L3NwYW4+XG4gICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJpc1NvcnRlZEJ5KCdjcmVhdGVEYXRlJywgJ2Rlc2MnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIGV4cGFuZF9tb3JlPC9tYXQtaWNvblxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiaXNTb3J0ZWRCeSgnY3JlYXRlRGF0ZScsICdhc2MnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIGV4cGFuZF9sZXNzPC9tYXQtaWNvblxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZ24tdWktYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNvbnRlbnRzIGhvdmVyOnRleHQtZ3JheS05MDAgdGV4dC1ncmF5LTgwMCBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgIChjbGljayk9XCJyZWNvcmRzU2VsZWN0LmVtaXQoW3JlY29yZF0pXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IHJlY29yZCBvZiByZWNvcmRzXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC10YWJsZS1jb2xcIj5cbiAgICAgICAgICA8Z24tdWktY2hlY2tib3hcbiAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQ2hlY2tlZChyZWNvcmQpXCJcbiAgICAgICAgICAgIChjaGFuZ2VkKT1cImhhbmRsZVJlY29yZFNlbGVjdGVkQ2hhbmdlKCRldmVudCwgcmVjb3JkKVwiXG4gICAgICAgICAgICB0eXBlPVwiZGVmYXVsdFwiXG4gICAgICAgICAgPjwvZ24tdWktY2hlY2tib3g+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgW3RpdGxlXT1cInJlY29yZC50aXRsZVwiXG4gICAgICAgICAgY2xhc3M9XCJyZWNvcmQtdGFibGUtY29sIHRleHQtMTYgc2VsZi1jZW50ZXJcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgcmVjb3JkLnRpdGxlIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJyZWNvcmQtdGFibGUtY29sIGZsZXgganVzdGlmeS1zdGFydCBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC0xNlwiXG4gICAgICAgICAgW3RpdGxlXT1cImZvcm1hdHMuam9pbignLCAnKVwiXG4gICAgICAgICAgKm5nSWY9XCJnZXRSZWNvcmRGb3JtYXRzKHJlY29yZCkgYXMgZm9ybWF0c1wiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJiYWRnZS1idG4gbWluLXctWzQ1cHhdIHRleHQtc20gdGV4dC13aGl0ZSBweC0yIGZsZXgtc2hyaW5rLTBcIlxuICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiZ2V0QmFkZ2VDb2xvcihmb3JtYXRzWzBdKVwiXG4gICAgICAgICAgICAqbmdJZj1cImZvcm1hdHNbMF1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGZvcm1hdHNbMF0gfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2UtYnRuIG1pbi13LVs0NXB4XSB0ZXh0LXNtIHRleHQtd2hpdGUgcHgtMiBmbGV4LXNocmluay0wXCJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImdldEJhZGdlQ29sb3IoZm9ybWF0c1sxXSlcIlxuICAgICAgICAgICAgKm5nSWY9XCJmb3JtYXRzWzFdXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBmb3JtYXRzWzFdIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleC1zaHJpbmstMFwiXG4gICAgICAgICAgICAqbmdJZj1cIiFyZWNvcmQubmFtZSAmJiBmb3JtYXRzLnNsaWNlKDIpLmxlbmd0aCA+IDBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuPit7eyBmb3JtYXRzLnNsaWNlKDIpLmxlbmd0aCB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtdGFibGUtY29sIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtMTZcIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IHBlcnNvbiA8L21hdC1pY29uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiXCI+e3sgZm9ybWF0VXNlckluZm8ocmVjb3JkLmV4dHJhcz8ub3duZXJJbmZvKSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtdGFibGUtY29sIHRleHQtMTYgc2VsZi1jZW50ZXJcIj5cbiAgICAgICAgICB7eyBkYXRlVG9TdHJpbmcocmVjb3JkLnJlY29yZFVwZGF0ZWQpIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVjb3JkLXRhYmxlLWNvbCB0ZXh0LTE2IHNlbGYtY2VudGVyXCI+XG4gICAgICAgICAge3sgZGF0ZVRvU3RyaW5nKHJlY29yZC5yZWNvcmRDcmVhdGVkKSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19