@provoly/dashboard 0.15.7 → 0.15.9

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 (71) hide show
  1. package/esm2022/admin/components/admin-classes/admin-classes-customize/tooltip/admin-classes-customize-tooltip.component.mjs +7 -6
  2. package/esm2022/admin/components/admin-classes/admin-classes-form/admin-classes-form.component.mjs +5 -4
  3. package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-form/admin-attributes-form.component.mjs +3 -3
  4. package/esm2022/admin/components/admin-dataset/shared/admin-form-dataset/admin-form-dataset.component.mjs +2 -2
  5. package/esm2022/admin/i18n/fr.translations.mjs +2 -2
  6. package/esm2022/dataset/i18n/fr.translations.mjs +2 -2
  7. package/esm2022/lib/core/auth/geoAuth.service.mjs +8 -15
  8. package/esm2022/lib/core/model/widget-map-manifest.interface.mjs +1 -1
  9. package/esm2022/lib/dashboard/components/widgets/settings/settings.component.mjs +7 -4
  10. package/esm2022/lib/dashboard/store/dashboard.actions.mjs +1 -1
  11. package/esm2022/lib/dashboard/store/manifest.service.mjs +1 -1
  12. package/esm2022/presentation/components/add-edit-presentation/add-edit-presentation.component.mjs +2 -2
  13. package/esm2022/presentation/components/presentation.component.mjs +10 -6
  14. package/esm2022/presentation/i18n/en.translations.mjs +5 -3
  15. package/esm2022/presentation/i18n/fr.translations.mjs +8 -6
  16. package/esm2022/presentation/style/css.component.mjs +2 -2
  17. package/esm2022/restitution/components/restitution-catalog/restitution-catalog.component.mjs +3 -3
  18. package/esm2022/restitution/i18n/fr.translations.mjs +2 -2
  19. package/esm2022/restitution/style/css.component.mjs +2 -2
  20. package/esm2022/tooltips/attribute/attribute-tooltip.component.mjs +19 -10
  21. package/esm2022/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.mjs +1 -1
  22. package/esm2022/widgets/widget-chart/component/widget-chart.component.mjs +1 -1
  23. package/esm2022/widgets/widget-graph/component/widget-graph.component.mjs +1 -1
  24. package/esm2022/widgets/widget-iframe/component/widget-iframe.component.mjs +1 -1
  25. package/esm2022/widgets/widget-map/component/widget-map.component.mjs +19 -12
  26. package/esm2022/widgets/widget-map/utils/widget-map.utils.mjs +36 -1
  27. package/esm2022/widgets/widget-table/component/widget-table.component.mjs +8 -6
  28. package/esm2022/widgets/widget-tile/component/widget-tile.component.mjs +1 -1
  29. package/esm2022/widgets/widget-vega/component/widget-vega.component.mjs +1 -1
  30. package/fesm2022/provoly-dashboard-admin.mjs +14 -12
  31. package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
  32. package/fesm2022/provoly-dashboard-dataset.mjs +1 -1
  33. package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
  34. package/fesm2022/provoly-dashboard-presentation.mjs +23 -15
  35. package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
  36. package/fesm2022/provoly-dashboard-restitution.mjs +5 -5
  37. package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
  38. package/fesm2022/provoly-dashboard-tooltips-attribute.mjs +18 -9
  39. package/fesm2022/provoly-dashboard-tooltips-attribute.mjs.map +1 -1
  40. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs +1 -1
  41. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs.map +1 -1
  42. package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs +1 -1
  43. package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs.map +1 -1
  44. package/fesm2022/provoly-dashboard-widgets-widget-graph.mjs +1 -1
  45. package/fesm2022/provoly-dashboard-widgets-widget-graph.mjs.map +1 -1
  46. package/fesm2022/provoly-dashboard-widgets-widget-iframe.mjs +1 -1
  47. package/fesm2022/provoly-dashboard-widgets-widget-iframe.mjs.map +1 -1
  48. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +53 -11
  49. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
  50. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs +7 -5
  51. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs.map +1 -1
  52. package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs +1 -1
  53. package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs.map +1 -1
  54. package/fesm2022/provoly-dashboard-widgets-widget-vega.mjs +1 -1
  55. package/fesm2022/provoly-dashboard-widgets-widget-vega.mjs.map +1 -1
  56. package/fesm2022/provoly-dashboard.mjs +13 -18
  57. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  58. package/lib/core/auth/geoAuth.service.d.ts +3 -1
  59. package/lib/core/model/widget-map-manifest.interface.d.ts +1 -0
  60. package/lib/dashboard/components/widgets/settings/settings.component.d.ts +2 -1
  61. package/lib/dashboard/store/dashboard.actions.d.ts +2 -2
  62. package/lib/dashboard/store/manifest.service.d.ts +1 -1
  63. package/package.json +1 -1
  64. package/presentation/components/presentation.component.d.ts +3 -2
  65. package/presentation/i18n/en.translations.d.ts +2 -0
  66. package/presentation/i18n/fr.translations.d.ts +2 -0
  67. package/presentation/style/_o-pry-presentation.scss +7 -2
  68. package/tooltips/attribute/attribute-tooltip.component.d.ts +5 -1
  69. package/widgets/widget-map/component/widget-map.component.d.ts +3 -4
  70. package/widgets/widget-map/utils/widget-map.utils.d.ts +1 -0
  71. package/widgets/widget-table/component/widget-table.component.d.ts +1 -0
@@ -180,10 +180,45 @@ export const geometryForLayer = (layer) => {
180
180
  return FieldType.POINT;
181
181
  }
182
182
  };
183
+ export const getLayerOrder = (layer, index, array) => {
184
+ if (layer.order && array[index - 1] && array[index - 1].order && layer.order < array[index - 1].order)
185
+ return array[index - 1].order + 1;
186
+ if (layer.order)
187
+ return layer.order;
188
+ if (index === 0 && !layer.order)
189
+ return 0;
190
+ let [distanceToFirstPreviousOrder, distanceToFirstNextOrder] = [
191
+ array
192
+ .slice(0, index + 1)
193
+ .reverse()
194
+ .findIndex((element) => !!element.order),
195
+ array.slice(index + 1).findIndex((element) => !!element.order)
196
+ ];
197
+ let [previousOrderIndex, nextOrderIndex] = [
198
+ distanceToFirstPreviousOrder > -1 ? index - distanceToFirstPreviousOrder : 0,
199
+ distanceToFirstNextOrder + index + 1
200
+ ];
201
+ let [previousOrder, nextOrder] = [
202
+ distanceToFirstPreviousOrder > -1 ? array[previousOrderIndex].order : 0,
203
+ distanceToFirstNextOrder > -1 ? array[nextOrderIndex].order : -1
204
+ ];
205
+ if (nextOrder > 0 && nextOrder < previousOrder) {
206
+ const newOrder = previousOrder + (nextOrderIndex - previousOrderIndex);
207
+ console.warn(`the order property of layer no ${index + 2} was preset but doesn't follow the order of the other layers`);
208
+ nextOrder = newOrder;
209
+ }
210
+ if (nextOrder > 0) {
211
+ let relativeIndex = index - previousOrderIndex;
212
+ return previousOrder + ((nextOrder - previousOrder) / (nextOrderIndex - previousOrderIndex)) * relativeIndex;
213
+ }
214
+ else {
215
+ return previousOrder + distanceToFirstPreviousOrder;
216
+ }
217
+ };
183
218
  export const DEFAULT_HEATMAP_RADIUS = 25;
184
219
  export const DEFAULT_RADIUS_INTENSITY_FACTOR = 10000;
185
220
  export const DEFAULT_ZOOM_MIN = 3;
186
221
  export const DEFAULT_ZOOM_START = 10;
187
222
  export const DEFAULT_ZOOM_MAX = 18;
188
223
  export const DEFAULT_MAP_CENTER = [2.2827217347381525, 48.864706031557716];
189
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LW1hcC51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LW1hcC91dGlscy93aWRnZXQtbWFwLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFJTCxTQUFTLEVBRVQsU0FBUyxFQU9WLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLE9BQU8sRUFBTyxNQUFNLElBQUksQ0FBQztBQUNsQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBUyxNQUFNLFNBQVMsQ0FBQztBQUVwRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQVM5RSxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUN2QyxLQUE0QixFQUM1QixTQUFvQixFQUNwQixrQkFBMkIsRUFDM0IsTUFBZSxFQUNmLEVBQUU7SUFDRixJQUNFLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQ3pHLEtBQUssQ0FBQyxJQUFJLENBQ1g7UUFDRCxDQUFDLENBQUMsU0FBUztRQUNYLENBQUMsQ0FBQyxrQkFBa0I7UUFDcEIsa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDN0I7UUFDQSxNQUFNLGFBQWEsR0FBRyxLQUdTLENBQUM7UUFFaEMsTUFBTSxPQUFPLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUN2QyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxD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U0FBUyxDQUFDLFlBQVksQ0FBQztRQUNoQyxLQUFLLE1BQU07WUFDVCxPQUFPLGdCQUFnQixDQUFDO2dCQUN0QixJQUFJLEVBQUUscUJBQXFCLENBQUMsNkJBQTZCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQzthQUNoRCxDQUFDLENBQUM7UUFDOUI7WUFDRSxPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUM7S0FDMUI7QUFDSCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxFQUFFLENBQUM7QUFDekMsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQUcsS0FBSyxDQUFDO0FBQ3JELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQztBQUNsQyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxFQUFFLENBQUM7QUFDckMsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0FBQ25DLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEF0dHJpYnV0ZSxcbiAgQ2xhc3MsXG4gIEZpZWxkLFxuICBGaWVsZFR5cGUsXG4gIEl0ZW0sXG4gIEl0ZW1VdGlscyxcbiAgTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zLFxuICBNYXBXaWRnZXRIZWF0TWFwTGF5ZXJPcHRpb25zLFxuICBNYXBXaWRnZXRMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9ucyxcbiAgUmVsYXRpb24sXG4gIFJlc3VsdFNldFxufSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IHsgRmVhdHVyZSwgTWFwIH0gZnJvbSAnb2wnO1xuaW1wb3J0IHsgQ2lyY2xlLCBMaW5lU3RyaW5nLCBQb2ludCB9IGZyb20gJ29sL2dlb20nO1xuaW1wb3J0IHsgU3R5bGUgfSBmcm9tICdvbC9zdHlsZSc7XG5pbXBvcnQgeyBXaWRnZXRNYXBMYXllclNlcnZpY2UgfSBmcm9tICcuLi9jb21wb25lbnQvd2lkZ2V0LW1hcC1sYXllci5zZXJ2aWNlJztcblxuZXhwb3J0IHR5cGUgTGF0TG9uQ2FuZGlkYXRlID0ge1xuICBtaW46IG51bWJlcjtcbiAgbWF4OiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IGNvbnN0IHBvcHVsYXRlTG9jYXRpb25BdHRyaWJ1dGUgPSAoXG4gIGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMsXG4gIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICBjbGFzc2VzTm90RmlsdGVyZWQ6IENsYXNzW10sXG4gIGZpZWxkczogRmllbGRbXVxuKSA9PiB7XG4gIGlmIChcbiAgICBbJ2hlYXRtYXAnLCAnbWFya2VyJywgJ2J1YmJsZScsICdwb2ludCcsICdsaW5lJywgJ3BvbHlnb24nLCAnbXVsdGktbGluZScsICdtdWx0aS1wb2x5Z29uJywgJ2F1dG8nXS5pbmNsdWRlcyhcbiAgICAgIGxheWVyLnR5cGVcbiAgICApICYmXG4gICAgISFyZXN1bHRTZXQgJiZcbiAgICAhIWNsYXNzZXNOb3RGaWx0ZXJlZCAmJlxuICAgIGNsYXNzZXNOb3RGaWx0ZXJlZC5sZW5ndGggPiAwXG4gICkge1xuICAgIGNvbnN0IHNwZWNpZmljTGF5ZXIgPSBsYXllciBhc1xuICAgICAgfCBNYXBXaWRnZXRIZWF0TWFwTGF5ZXJPcHRpb25zXG4gICAgICB8IE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9uc1xuICAgICAgfCBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnM7XG5cbiAgICBjb25zdCBjbGFzc2VzID0gY2xhc3Nlc05vdEZpbHRlcmVkLmZpbHRlcihcbiAgICAgIChjbCkgPT4gc3BlY2lmaWNMYXllci5jbGFzc2VzPy5pbmNsdWRlcyhjbC5pZCkgfHwgIXNwZWNpZmljTGF5ZXIuY2xhc3NlcyB8fCBzcGVjaWZpY0xheWVyLmNsYXNzZXMubGVuZ3RoID09PSAwXG4gICAgKTtcblxuICAgIGlmICghc3BlY2lmaWNMYXllci5hdHRyaWJ1dGUpIHtcbiAgICAgIC8vIE5vIGxvY2F0aW9uIGF0dHJpYnV0ZSBhdmFpbGFibGUsIHRoZW4gdHJ5IHRvIGd1ZXNzIG9uZSB0aGF0IHdpbGwgYmUgb2tcblxuICAgICAgY29uc3QgZ2VvbWV0cnkgPSBnZW9tZXRyeUZvckxheWVyKGxheWVyKTtcblxuICAgICAgbGV0IGNhbmRpZGF0ZXMgPSBbXSBhcyB7IGF0dHI6IEF0dHJpYnV0ZTsgZmllbGQ6IEZpZWxkIHwgdW5kZWZpbmVkIH1bXTtcbiAgICAgIGlmIChPYmplY3Qua2V5cyhyZXN1bHRTZXQuaXRlbXMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gQmFzZWQgb24gaXRlbXMgdGhhdCB3ZSBoYXZlIHRvIGRpc3BsYXlcblxuICAgICAgICBjYW5kaWRhdGVzID0gT2JqZWN0LmtleXMocmVzdWx0U2V0Lml0ZW1zKVxuICAgICAgICAgIC5tYXAoKGtleSkgPT4gKHsgaXRlbXM6IHJlc3VsdFNldC5pdGVtc1trZXldLCBvQ2xhc3M6IGNsYXNzZXMuZmluZCgoY2wpID0+IGNsLmlkID09PSBrZXkpIH0pKVxuICAgICAgICAgIC5tYXAoKHsgaXRlbXMsIG9DbGFzcyB9KSA9PlxuICAgICAgICAgICAgKG9DbGFzcyA/PyB7IGF0dHJpYnV0ZXM6IFtdIH0pLmF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgLm1hcCgoYXR0cikgPT4gKHsgYXR0ciwgZmllbGQ6IGZpZWxkcy5maW5kKChmKSA9PiBmLmlkID09PSBhdHRyLmZpZWxkKSB9KSlcbiAgICAgICAgICAgICAgLmZpbHRlcigoYXR0cikgPT4gYXR0ci5maWVsZD8udHlwZSA9PT0gZ2VvbWV0cnkpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5yZWR1Y2UoKHAsIGMpID0+IFsuLi5wLCAuLi5jXSwgW10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhbnkgaXRlbXMgdG8gZGlzcGxheSwgc28gYWxsb3cgYWxsIGNvcnJlc3BvbmRpbmcgZ2VvbWV0cnkgZmllbGRzXG4gICAgICAgIGNhbmRpZGF0ZXMgPSBjbGFzc2VzTm90RmlsdGVyZWRcbiAgICAgICAgICAubWFwKChjbGF6eikgPT4gY2xhenouYXR0cmlidXRlcylcbiAgICAgICAgICAuZmxhdCgpXG4gICAgICAgICAgLm1hcCgoYXR0cikgPT4gKHsgYXR0ciwgZmllbGQ6IGZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQuaWQgPT09IGF0dHIuZmllbGQpIH0pKVxuICAgICAgICAgIC5maWx0ZXIoKHsgYXR0ciwgZmllbGQgfSkgPT4gZmllbGQ/LnR5cGUgPT09IGdlb21ldHJ5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNhbmRpZGF0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBzcGVjaWZpY0xheWVyLmF0dHJpYnV0ZSA9IGNhbmRpZGF0ZXNbMF0uYXR0ci5uYW1lO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHBvcHVsYXRlSW50ZW5zaXR5QXR0cmlidXRlID0gKFxuICBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zLFxuICByZXN1bHRTZXQ6IFJlc3VsdFNldCxcbiAgY2xhc3Nlc05vdEZpbHRlcmVkOiBDbGFzc1tdLFxuICBmaWVsZHM6IEZpZWxkW11cbikgPT4ge1xuICBpZiAoXG4gICAgWydoZWF0bWFwJywgJ2J1YmJsZSddLmluY2x1ZGVzKGxheWVyLnR5cGUpICYmXG4gICAgISFyZXN1bHRTZXQgJiZcbiAgICAhIWNsYXNzZXNOb3RGaWx0ZXJlZCAmJlxuICAgIGNsYXNzZXNOb3RGaWx0ZXJlZC5sZW5ndGggPiAwXG4gICkge1xuICAgIGNvbnN0IHNwZWNpZmljTGF5ZXIgPSBsYXllciBhcyBNYXBXaWRnZXRIZWF0TWFwTGF5ZXJPcHRpb25zIHwgTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zO1xuXG4gICAgY29uc3QgY2xhc3NlcyA9IGNsYXNzZXNOb3RGaWx0ZXJlZC5maWx0ZXIoXG4gICAgICAoY2wpID0+XG4gICAgICAgIChzcGVjaWZpY0xheWVyLmNsYXNzZXM/LmluY2x1ZGVzKGNsLmlkKSB8fCAhc3BlY2lmaWNMYXllci5jbGFzc2VzIHx8IHNwZWNpZmljTGF5ZXIuY2xhc3Nlcy5sZW5ndGggPT09IDApICYmXG4gICAgICAgIGNsLmF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci5uYW1lID09PSAoc3BlY2lmaWNMYXllcj8uYXR0cmlidXRlID8/IFtdKSlcbiAgICApO1xuXG4gICAgaWYgKCFzcGVjaWZpY0xheWVyLmludGVuc2l0eUF0dHJpYnV0ZSkge1xuICAgICAgLy8gTm8gaW50ZW5zaXR5IGF0dHJpYnV0ZSBhdmFpbGFibGUsIHRoZW4gdGFrZSB0aGUgbWF4aW11bSBpbnRlbnNpdHkgbWF0Y2hpbmcgYXR0cmlidXRlXG4gICAgICBjb25zdCBjYW5kaWRhdGVzRHJ5ID0gT2JqZWN0LmtleXMocmVzdWx0U2V0Lml0ZW1zKVxuICAgICAgICAubWFwKChrZXkpID0+ICh7IGl0ZW1zOiByZXN1bHRTZXQuaXRlbXNba2V5XSwgb0NsYXNzOiBjbGFzc2VzLmZpbmQoKGNsKSA9PiBjbC5pZCA9PT0ga2V5KSB9KSlcbiAgICAgICAgLm1hcCgoeyBpdGVtcywgb0NsYXNzIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gKG9DbGFzcyA/PyB7IGF0dHJpYnV0ZXM6IFtdIH0pLmF0dHJpYnV0ZXNcbiAgICAgICAgICAgIC5tYXAoKGF0dHIpID0+ICh7IGF0dHIsIGZpZWxkOiBmaWVsZHMuZmluZCgoZikgPT4gZi5pZCA9PT0gYXR0ci5maWVsZCkgfSkpXG4gICAgICAgICAgICAuZmlsdGVyKChhdHRyKSA9PiBhdHRyLmZpZWxkPy50eXBlID09PSBGaWVsZFR5cGUuREVDSU1BTCB8fCBhdHRyLmZpZWxkPy50eXBlID09PSBGaWVsZFR5cGUuSU5URUdFUilcbiAgICAgICAgICAgIC5tYXAoKGF0dHIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgYXR0clZhbHVlcyA9IEl0ZW1VdGlscy5wZXJ0aW5lbnRWYWx1ZShpdGVtcywgYXR0ci5hdHRyKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBtaW46IE1hdGgubWluKC4uLmF0dHJWYWx1ZXMpLFxuICAgICAgICAgICAgICAgIG1heDogTWF0aC5tYXgoLi4uYXR0clZhbHVlcyksXG4gICAgICAgICAgICAgICAgbmFtZTogYXR0ci5hdHRyLm5hbWVcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgICAucmVkdWNlKChwLCBjKSA9PiBbLi4ucCwgLi4uY10sIFtdKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYi5tYXggLSBhLm1heCk7XG5cbiAgICAgIGlmIChjYW5kaWRhdGVzRHJ5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgc3BlY2lmaWNMYXllci5pbnRlbnNpdHlBdHRyaWJ1dGUgPSBjYW5kaWRhdGVzRHJ5WzBdLm5hbWU7XG4gICAgICAgIHNwZWNpZmljTGF5ZXIuaW50ZW5zaXR5QXNjID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGZWF0dXJlRnJvbUl0ZW0gPSAoXG4gIGl0ZW06IEl0ZW0sXG4gIHR5cGU6IHN0cmluZyxcbiAgbG9jYXRpb25BdHRyaWJ1dGU6IEF0dHJpYnV0ZSxcbiAgaWNvblN0eWxlPzogU3R5bGUsXG4gIHNlbGVjdGVkSWNvblN0eWxlPzogU3R5bGVcbikgPT4ge1xuICByZXR1cm4gbmV3IEZlYXR1cmUoe1xuICAgIC4uLml0ZW0sXG4gICAgdHlwZSxcbiAgICBnZW9tZXRyeTogSXRlbVV0aWxzLnJlYWRHZW9tZXRyeShpdGVtLCAncG9pbnQnLCBsb2NhdGlvbkF0dHJpYnV0ZSksXG4gICAgY2xhc3NpY1N0eWxlOiBpY29uU3R5bGUgPz8gbnVsbCxcbiAgICBzZWxlY3RlZFN0eWxlOiBzZWxlY3RlZEljb25TdHlsZSA/PyBudWxsXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENpcmNsZUZlYXR1cmVGcm9tSXRlbSA9IChcbiAgaXRlbTogSXRlbSxcbiAgbG9jYXRpb25BdHRyaWJ1dGU6IEF0dHJpYnV0ZSxcbiAgcmFkaXVzOiBudW1iZXIsXG4gIGljb25TdHlsZTogU3R5bGUsXG4gIHNlbGVjdGVkSWNvblN0eWxlOiBTdHlsZVxuKSA9PiB7XG4gIHJldHVybiBuZXcgRmVhdHVyZSh7XG4gICAgLi4uaXRlbSxcbiAgICBnZW9tZXRyeTogbmV3IENpcmNsZSgoSXRlbVV0aWxzLnJlYWRHZW9tZXRyeShpdGVtLCAncG9pbnQnLCBsb2NhdGlvbkF0dHJpYnV0ZSkgYXMgUG9pbnQpLmdldENvb3JkaW5hdGVzKCksIHJhZGl1cyksXG4gICAgY2xhc3NpY1N0eWxlOiBpY29uU3R5bGUsXG4gICAgc2VsZWN0ZWRTdHlsZTogc2VsZWN0ZWRJY29uU3R5bGUsXG4gICAgdHlwZTogJ2J1YmJsZSdcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TGlua0ZlYXR1cmUgPSAoXG4gIHJlbGF0aW9uOiBSZWxhdGlvbixcbiAgZmVhdHVyZVNvdXJjZTogRmVhdHVyZTxQb2ludD4sXG4gIGZlYXR1cmVEZXN0aW5hdGlvbjogRmVhdHVyZTxQb2ludD5cbikgPT4ge1xuICByZXR1cm4gbmV3IEZlYXR1cmUoe1xuICAgIC4uLnJlbGF0aW9uLFxuICAgIGdlb21ldHJ5OiBuZXcgTGluZVN0cmluZyhbXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBmZWF0dXJlU291cmNlLmdldEdlb21ldHJ5KCk/LmdldENvb3JkaW5hdGVzKCkgPz8gZmVhdHVyZVNvdXJjZS5nZXRHZW9tZXRyeSgpPy5nZXRDZW50ZXIoKSA/PyBbMCwgMF0sXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBmZWF0dXJlRGVzdGluYXRpb24uZ2V0R2VvbWV0cnkoKT8uZ2V0Q29vcmRpbmF0ZXMoKSA/PyBmZWF0dXJlRGVzdGluYXRpb24uZ2V0R2VvbWV0cnkoKT8uZ2V0Q2VudGVyKCkgPz8gWzAsIDBdXG4gICAgXSksXG4gICAgc291cmNlOiBmZWF0dXJlU291cmNlLFxuICAgIGRlc3RpbmF0aW9uOiBmZWF0dXJlRGVzdGluYXRpb24sXG4gICAgdHlwZTogJ2xpbmsnXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE1hcEFzUG5nID0gKG1hcDogTWFwKSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBtYXAub25jZSgncmVuZGVyY29tcGxldGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtYXBDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgIGNvbnN0IHNpemUgPSBtYXAuZ2V0U2l6ZSgpIHx8IFsxMDAsIDEwMF07XG4gICAgICBtYXBDYW52YXMud2lkdGggPSBzaXplWzBdO1xuICAgICAgbWFwQ2FudmFzLmhlaWdodCA9IHNpemVbMV07XG4gICAgICBjb25zdCBtYXBDb250ZXh0ID0gbWFwQ2FudmFzLmdldENvbnRleHQoJzJkJykgfHwgKG51bGwgYXMgdW5rbm93biBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpO1xuICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcub2wtbGF5ZXIgY2FudmFzLCBjYW52YXMub2wtbGF5ZXInKSwgKGNhbnZhcykgPT4ge1xuICAgICAgICBpZiAoY2FudmFzLndpZHRoID4gMCkge1xuICAgICAgICAgIGNvbnN0IG9wYWNpdHkgPSBjYW52YXMucGFyZW50Tm9kZS5zdHlsZS5vcGFjaXR5IHx8IGNhbnZhcy5zdHlsZS5vcGFjaXR5O1xuICAgICAgICAgIG1hcENvbnRleHQuZ2xvYmFsQWxwaGEgPSBvcGFjaXR5ID09PSAnJyA/IDEgOiBOdW1iZXIob3BhY2l0eSk7XG5cbiAgICAgICAgICBjb25zdCBiYWNrZ3JvdW5kQ29sb3IgPSBjYW52YXMucGFyZW50Tm9kZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICAgICAgaWYgKGJhY2tncm91bmRDb2xvcikge1xuICAgICAgICAgICAgbWFwQ29udGV4dC5maWxsU3R5bGUgPSBiYWNrZ3JvdW5kQ29sb3I7XG4gICAgICAgICAgICBtYXBDb250ZXh0LmZpbGxSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IG1hdHJpeDtcbiAgICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBjYW52YXMuc3R5bGUudHJhbnNmb3JtO1xuICAgICAgICAgIGlmICh0cmFuc2Zvcm0pIHtcbiAgICAgICAgICAgIC8vIEdldCB0aGUgdHJhbnNmb3JtIHBhcmFtZXRlcnMgZnJvbSB0aGUgc3R5bGUncyB0cmFuc2Zvcm0gbWF0cml4XG4gICAgICAgICAgICBtYXRyaXggPSB0cmFuc2Zvcm1cbiAgICAgICAgICAgICAgLm1hdGNoKC9ebWF0cml4XFwoKFteKF0qKVxcKSQvKVsxXVxuICAgICAgICAgICAgICAuc3BsaXQoJywnKVxuICAgICAgICAgICAgICAubWFwKE51bWJlcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1hdHJpeCA9IFtcbiAgICAgICAgICAgICAgcGFyc2VGbG9hdChjYW52YXMuc3R5bGUud2lkdGgpIC8gY2FudmFzLndpZHRoLFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICBwYXJzZUZsb2F0KGNhbnZhcy5zdHlsZS5oZWlnaHQpIC8gY2FudmFzLmhlaWdodCxcbiAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gQXBwbHkgdGhlIHRyYW5zZm9ybSB0byB0aGUgZXhwb3J0IG1hcCBjb250ZXh0XG4gICAgICAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELnByb3RvdHlwZS5zZXRUcmFuc2Zvcm0uYXBwbHkobWFwQ29udGV4dCwgbWF0cml4KTtcbiAgICAgICAgICBtYXBDb250ZXh0LmRyYXdJbWFnZShjYW52YXMsIDAsIDApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIG1hcENvbnRleHQuZ2xvYmFsQWxwaGEgPSAxO1xuICAgICAgcmVzb2x2ZShtYXBDYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnKSk7XG4gICAgfSk7XG4gICAgbWFwLnJlbmRlclN5bmMoKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZXhwb3J0TWFwQXNJbWFnZSA9IChtYXA6IE1hcCwgZmlsZW5hbWU6IHN0cmluZykgPT4ge1xuICBnZXRNYXBBc1BuZyhtYXApLnRoZW4oKGRhdGEpID0+IHtcbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGxpbmsuZG93bmxvYWQgPSBmaWxlbmFtZTtcbiAgICBsaW5rLmhyZWYgPSBkYXRhO1xuICAgIGxpbmsuY2xpY2soKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2VvbWV0cnlGb3JMYXllciA9IChsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKTogc3RyaW5nID0+IHtcbiAgc3dpdGNoIChsYXllci50eXBlKSB7XG4gICAgY2FzZSAnbWFya2VyJzpcbiAgICBjYXNlICdoZWF0bWFwJzpcbiAgICBjYXNlICdidWJibGUnOlxuICAgIGNhc2UgJ3BvaW50JzpcbiAgICAgIHJldHVybiBGaWVsZFR5cGUuUE9JTlQ7XG4gICAgY2FzZSAnbGluZSc6XG4gICAgICByZXR1cm4gRmllbGRUeXBlLkxJTkU7XG4gICAgY2FzZSAncG9seWdvbic6XG4gICAgICByZXR1cm4gRmllbGRUeXBlLlBPTFlHT047XG4gICAgY2FzZSAnbXVsdGktbGluZSc6XG4gICAgICByZXR1cm4gRmllbGRUeXBlLk1VTFRJTElORTtcbiAgICBjYXNlICdtdWx0aS1wb2x5Z29uJzpcbiAgICAgIHJldHVybiBGaWVsZFR5cGUuTVVMVElQT0xZR09OO1xuICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgcmV0dXJuIGdlb21ldHJ5Rm9yTGF5ZXIoe1xuICAgICAgICB0eXBlOiBXaWRnZXRNYXBMYXllclNlcnZpY2UudHJhbnNsYXRlRmllbGRUeXBlVG9MYXllclR5cGUobGF5ZXIuc3ViVHlwZSlcbiAgICAgIH0gYXMgTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIEZpZWxkVHlwZS5QT0lOVDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSEVBVE1BUF9SQURJVVMgPSAyNTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1JBRElVU19JTlRFTlNJVFlfRkFDVE9SID0gMTAwMDA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9aT09NX01JTiA9IDM7XG5leHBvcnQgY29uc3QgREVGQVVMVF9aT09NX1NUQVJUID0gMTA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9aT09NX01BWCA9IDE4O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFQX0NFTlRFUiA9IFsyLjI4MjcyMTczNDczODE1MjUsIDQ4Ljg2NDcwNjAzMTU1NzcxNl07XG4iXX0=
224
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LW1hcC51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LW1hcC91dGlscy93aWRnZXQtbWFwLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFJTCxTQUFTLEVBRVQsU0FBUyxFQU9WLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLE9BQU8sRUFBTyxNQUFNLElBQUksQ0FBQztBQUNsQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBUyxNQUFNLFNBQVMsQ0FBQztBQUVwRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQVM5RSxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUN2QyxLQUE0QixFQUM1QixTQUFvQixFQUNwQixrQkFBMkIsRUFDM0IsTUFBZSxFQUNmLEVBQUU7SUFDRixJQUNFLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQ3pHLEtBQUssQ0FBQyxJQUFJLENBQ1g7UUFDRCxDQUFDLENBQUMsU0FBUztRQUNYLENBQUMsQ0FBQyxrQkFBa0I7UUFDcEIsa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDN0I7UUFDQSxNQUFNLGFBQWEsR0FBRyxLQUdTLENBQUM7UUFFaEMsTUFBTSxPQUFPLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUN2QyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxD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QztBQUVGLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUN6QyxNQUFNLENBQUMsTUFBTSwrQkFBK0IsR0FBRyxLQUFLLENBQUM7QUFDckQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztBQUNyQyxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7QUFDbkMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXR0cmlidXRlLFxuICBDbGFzcyxcbiAgRmllbGQsXG4gIEZpZWxkVHlwZSxcbiAgSXRlbSxcbiAgSXRlbVV0aWxzLFxuICBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldExheWVyT3B0aW9ucyxcbiAgTWFwV2lkZ2V0TWFya2VyTGF5ZXJPcHRpb25zLFxuICBSZWxhdGlvbixcbiAgUmVzdWx0U2V0XG59IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZCc7XG5pbXBvcnQgeyBGZWF0dXJlLCBNYXAgfSBmcm9tICdvbCc7XG5pbXBvcnQgeyBDaXJjbGUsIExpbmVTdHJpbmcsIFBvaW50IH0gZnJvbSAnb2wvZ2VvbSc7XG5pbXBvcnQgeyBTdHlsZSB9IGZyb20gJ29sL3N0eWxlJztcbmltcG9ydCB7IFdpZGdldE1hcExheWVyU2VydmljZSB9IGZyb20gJy4uL2NvbXBvbmVudC93aWRnZXQtbWFwLWxheWVyLnNlcnZpY2UnO1xuXG5leHBvcnQgdHlwZSBMYXRMb25DYW5kaWRhdGUgPSB7XG4gIG1pbjogbnVtYmVyO1xuICBtYXg6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY29uc3QgcG9wdWxhdGVMb2NhdGlvbkF0dHJpYnV0ZSA9IChcbiAgbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucyxcbiAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gIGNsYXNzZXNOb3RGaWx0ZXJlZDogQ2xhc3NbXSxcbiAgZmllbGRzOiBGaWVsZFtdXG4pID0+IHtcbiAgaWYgKFxuICAgIFsnaGVhdG1hcCcsICdtYXJrZXInLCAnYnViYmxlJywgJ3BvaW50JywgJ2xpbmUnLCAncG9seWdvbicsICdtdWx0aS1saW5lJywgJ211bHRpLXBvbHlnb24nLCAnYXV0byddLmluY2x1ZGVzKFxuICAgICAgbGF5ZXIudHlwZVxuICAgICkgJiZcbiAgICAhIXJlc3VsdFNldCAmJlxuICAgICEhY2xhc3Nlc05vdEZpbHRlcmVkICYmXG4gICAgY2xhc3Nlc05vdEZpbHRlcmVkLmxlbmd0aCA+IDBcbiAgKSB7XG4gICAgY29uc3Qgc3BlY2lmaWNMYXllciA9IGxheWVyIGFzXG4gICAgICB8IE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnNcbiAgICAgIHwgTWFwV2lkZ2V0TWFya2VyTGF5ZXJPcHRpb25zXG4gICAgICB8IE1hcFdpZGdldEJ1YmJsZUxheWVyT3B0aW9ucztcblxuICAgIGNvbnN0IGNsYXNzZXMgPSBjbGFzc2VzTm90RmlsdGVyZWQuZmlsdGVyKFxuICAgICAgKGNsKSA9PiBzcGVjaWZpY0xheWVyLmNsYXNzZXM/LmluY2x1ZGVzKGNsLmlkKSB8fCAhc3BlY2lmaWNMYXllci5jbGFzc2VzIHx8IHNwZWNpZmljTGF5ZXIuY2xhc3Nlcy5sZW5ndGggPT09IDBcbiAgICApO1xuXG4gICAgaWYgKCFzcGVjaWZpY0xheWVyLmF0dHJpYnV0ZSkge1xuICAgICAgLy8gTm8gbG9jYXRpb24gYXR0cmlidXRlIGF2YWlsYWJsZSwgdGhlbiB0cnkgdG8gZ3Vlc3Mgb25lIHRoYXQgd2lsbCBiZSBva1xuXG4gICAgICBjb25zdCBnZW9tZXRyeSA9IGdlb21ldHJ5Rm9yTGF5ZXIobGF5ZXIpO1xuXG4gICAgICBsZXQgY2FuZGlkYXRlcyA9IFtdIGFzIHsgYXR0cjogQXR0cmlidXRlOyBmaWVsZDogRmllbGQgfCB1bmRlZmluZWQgfVtdO1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHJlc3VsdFNldC5pdGVtcykubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBCYXNlZCBvbiBpdGVtcyB0aGF0IHdlIGhhdmUgdG8gZGlzcGxheVxuXG4gICAgICAgIGNhbmRpZGF0ZXMgPSBPYmplY3Qua2V5cyhyZXN1bHRTZXQuaXRlbXMpXG4gICAgICAgICAgLm1hcCgoa2V5KSA9PiAoeyBpdGVtczogcmVzdWx0U2V0Lml0ZW1zW2tleV0sIG9DbGFzczogY2xhc3Nlcy5maW5kKChjbCkgPT4gY2wuaWQgPT09IGtleSkgfSkpXG4gICAgICAgICAgLm1hcCgoeyBpdGVtcywgb0NsYXNzIH0pID0+XG4gICAgICAgICAgICAob0NsYXNzID8/IHsgYXR0cmlidXRlczogW10gfSkuYXR0cmlidXRlc1xuICAgICAgICAgICAgICAubWFwKChhdHRyKSA9PiAoeyBhdHRyLCBmaWVsZDogZmllbGRzLmZpbmQoKGYpID0+IGYuaWQgPT09IGF0dHIuZmllbGQpIH0pKVxuICAgICAgICAgICAgICAuZmlsdGVyKChhdHRyKSA9PiBhdHRyLmZpZWxkPy50eXBlID09PSBnZW9tZXRyeSlcbiAgICAgICAgICApXG4gICAgICAgICAgLnJlZHVjZSgocCwgYykgPT4gWy4uLnAsIC4uLmNdLCBbXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGFueSBpdGVtcyB0byBkaXNwbGF5LCBzbyBhbGxvdyBhbGwgY29ycmVzcG9uZGluZyBnZW9tZXRyeSBmaWVsZHNcbiAgICAgICAgY2FuZGlkYXRlcyA9IGNsYXNzZXNOb3RGaWx0ZXJlZFxuICAgICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzKVxuICAgICAgICAgIC5mbGF0KClcbiAgICAgICAgICAubWFwKChhdHRyKSA9PiAoeyBhdHRyLCBmaWVsZDogZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5pZCA9PT0gYXR0ci5maWVsZCkgfSkpXG4gICAgICAgICAgLmZpbHRlcigoeyBhdHRyLCBmaWVsZCB9KSA9PiBmaWVsZD8udHlwZSA9PT0gZ2VvbWV0cnkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2FuZGlkYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHNwZWNpZmljTGF5ZXIuYXR0cmlidXRlID0gY2FuZGlkYXRlc1swXS5hdHRyLm5hbWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcG9wdWxhdGVJbnRlbnNpdHlBdHRyaWJ1dGUgPSAoXG4gIGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMsXG4gIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICBjbGFzc2VzTm90RmlsdGVyZWQ6IENsYXNzW10sXG4gIGZpZWxkczogRmllbGRbXVxuKSA9PiB7XG4gIGlmIChcbiAgICBbJ2hlYXRtYXAnLCAnYnViYmxlJ10uaW5jbHVkZXMobGF5ZXIudHlwZSkgJiZcbiAgICAhIXJlc3VsdFNldCAmJlxuICAgICEhY2xhc3Nlc05vdEZpbHRlcmVkICYmXG4gICAgY2xhc3Nlc05vdEZpbHRlcmVkLmxlbmd0aCA+IDBcbiAgKSB7XG4gICAgY29uc3Qgc3BlY2lmaWNMYXllciA9IGxheWVyIGFzIE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnMgfCBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnM7XG5cbiAgICBjb25zdCBjbGFzc2VzID0gY2xhc3Nlc05vdEZpbHRlcmVkLmZpbHRlcihcbiAgICAgIChjbCkgPT5cbiAgICAgICAgKHNwZWNpZmljTGF5ZXIuY2xhc3Nlcz8uaW5jbHVkZXMoY2wuaWQpIHx8ICFzcGVjaWZpY0xheWVyLmNsYXNzZXMgfHwgc3BlY2lmaWNMYXllci5jbGFzc2VzLmxlbmd0aCA9PT0gMCkgJiZcbiAgICAgICAgY2wuYXR0cmlidXRlcy5maW5kKChhdHRyKSA9PiBhdHRyLm5hbWUgPT09IChzcGVjaWZpY0xheWVyPy5hdHRyaWJ1dGUgPz8gW10pKVxuICAgICk7XG5cbiAgICBpZiAoIXNwZWNpZmljTGF5ZXIuaW50ZW5zaXR5QXR0cmlidXRlKSB7XG4gICAgICAvLyBObyBpbnRlbnNpdHkgYXR0cmlidXRlIGF2YWlsYWJsZSwgdGhlbiB0YWtlIHRoZSBtYXhpbXVtIGludGVuc2l0eSBtYXRjaGluZyBhdHRyaWJ1dGVcbiAgICAgIGNvbnN0IGNhbmRpZGF0ZXNEcnkgPSBPYmplY3Qua2V5cyhyZXN1bHRTZXQuaXRlbXMpXG4gICAgICAgIC5tYXAoKGtleSkgPT4gKHsgaXRlbXM6IHJlc3VsdFNldC5pdGVtc1trZXldLCBvQ2xhc3M6IGNsYXNzZXMuZmluZCgoY2wpID0+IGNsLmlkID09PSBrZXkpIH0pKVxuICAgICAgICAubWFwKCh7IGl0ZW1zLCBvQ2xhc3MgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiAob0NsYXNzID8/IHsgYXR0cmlidXRlczogW10gfSkuYXR0cmlidXRlc1xuICAgICAgICAgICAgLm1hcCgoYXR0cikgPT4gKHsgYXR0ciwgZmllbGQ6IGZpZWxkcy5maW5kKChmKSA9PiBmLmlkID09PSBhdHRyLmZpZWxkKSB9KSlcbiAgICAgICAgICAgIC5maWx0ZXIoKGF0dHIpID0+IGF0dHIuZmllbGQ/LnR5cGUgPT09IEZpZWxkVHlwZS5ERUNJTUFMIHx8IGF0dHIuZmllbGQ/LnR5cGUgPT09IEZpZWxkVHlwZS5JTlRFR0VSKVxuICAgICAgICAgICAgLm1hcCgoYXR0cikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBhdHRyVmFsdWVzID0gSXRlbVV0aWxzLnBlcnRpbmVudFZhbHVlKGl0ZW1zLCBhdHRyLmF0dHIpO1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG1pbjogTWF0aC5taW4oLi4uYXR0clZhbHVlcyksXG4gICAgICAgICAgICAgICAgbWF4OiBNYXRoLm1heCguLi5hdHRyVmFsdWVzKSxcbiAgICAgICAgICAgICAgICBuYW1lOiBhdHRyLmF0dHIubmFtZVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5yZWR1Y2UoKHAsIGMpID0+IFsuLi5wLCAuLi5jXSwgW10pXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBiLm1heCAtIGEubWF4KTtcblxuICAgICAgaWYgKGNhbmRpZGF0ZXNEcnkubGVuZ3RoID4gMCkge1xuICAgICAgICBzcGVjaWZpY0xheWVyLmludGVuc2l0eUF0dHJpYnV0ZSA9IGNhbmRpZGF0ZXNEcnlbMF0ubmFtZTtcbiAgICAgICAgc3BlY2lmaWNMYXllci5pbnRlbnNpdHlBc2MgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEZlYXR1cmVGcm9tSXRlbSA9IChcbiAgaXRlbTogSXRlbSxcbiAgdHlwZTogc3RyaW5nLFxuICBsb2NhdGlvbkF0dHJpYnV0ZTogQXR0cmlidXRlLFxuICBpY29uU3R5bGU/OiBTdHlsZSxcbiAgc2VsZWN0ZWRJY29uU3R5bGU/OiBTdHlsZVxuKSA9PiB7XG4gIHJldHVybiBuZXcgRmVhdHVyZSh7XG4gICAgLi4uaXRlbSxcbiAgICB0eXBlLFxuICAgIGdlb21ldHJ5OiBJdGVtVXRpbHMucmVhZEdlb21ldHJ5KGl0ZW0sICdwb2ludCcsIGxvY2F0aW9uQXR0cmlidXRlKSxcbiAgICBjbGFzc2ljU3R5bGU6IGljb25TdHlsZSA/PyBudWxsLFxuICAgIHNlbGVjdGVkU3R5bGU6IHNlbGVjdGVkSWNvblN0eWxlID8/IG51bGxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q2lyY2xlRmVhdHVyZUZyb21JdGVtID0gKFxuICBpdGVtOiBJdGVtLFxuICBsb2NhdGlvbkF0dHJpYnV0ZTogQXR0cmlidXRlLFxuICByYWRpdXM6IG51bWJlcixcbiAgaWNvblN0eWxlOiBTdHlsZSxcbiAgc2VsZWN0ZWRJY29uU3R5bGU6IFN0eWxlXG4pID0+IHtcbiAgcmV0dXJuIG5ldyBGZWF0dXJlKHtcbiAgICAuLi5pdGVtLFxuICAgIGdlb21ldHJ5OiBuZXcgQ2lyY2xlKChJdGVtVXRpbHMucmVhZEdlb21ldHJ5KGl0ZW0sICdwb2ludCcsIGxvY2F0aW9uQXR0cmlidXRlKSBhcyBQb2ludCkuZ2V0Q29vcmRpbmF0ZXMoKSwgcmFkaXVzKSxcbiAgICBjbGFzc2ljU3R5bGU6IGljb25TdHlsZSxcbiAgICBzZWxlY3RlZFN0eWxlOiBzZWxlY3RlZEljb25TdHlsZSxcbiAgICB0eXBlOiAnYnViYmxlJ1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRMaW5rRmVhdHVyZSA9IChcbiAgcmVsYXRpb246IFJlbGF0aW9uLFxuICBmZWF0dXJlU291cmNlOiBGZWF0dXJlPFBvaW50PixcbiAgZmVhdHVyZURlc3RpbmF0aW9uOiBGZWF0dXJlPFBvaW50PlxuKSA9PiB7XG4gIHJldHVybiBuZXcgRmVhdHVyZSh7XG4gICAgLi4ucmVsYXRpb24sXG4gICAgZ2VvbWV0cnk6IG5ldyBMaW5lU3RyaW5nKFtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGZlYXR1cmVTb3VyY2UuZ2V0R2VvbWV0cnkoKT8uZ2V0Q29vcmRpbmF0ZXMoKSA/PyBmZWF0dXJlU291cmNlLmdldEdlb21ldHJ5KCk/LmdldENlbnRlcigpID8/IFswLCAwXSxcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGZlYXR1cmVEZXN0aW5hdGlvbi5nZXRHZW9tZXRyeSgpPy5nZXRDb29yZGluYXRlcygpID8/IGZlYXR1cmVEZXN0aW5hdGlvbi5nZXRHZW9tZXRyeSgpPy5nZXRDZW50ZXIoKSA/PyBbMCwgMF1cbiAgICBdKSxcbiAgICBzb3VyY2U6IGZlYXR1cmVTb3VyY2UsXG4gICAgZGVzdGluYXRpb246IGZlYXR1cmVEZXN0aW5hdGlvbixcbiAgICB0eXBlOiAnbGluaydcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TWFwQXNQbmcgPSAobWFwOiBNYXApID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIG1hcC5vbmNlKCdyZW5kZXJjb21wbGV0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1hcENhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgY29uc3Qgc2l6ZSA9IG1hcC5nZXRTaXplKCkgfHwgWzEwMCwgMTAwXTtcbiAgICAgIG1hcENhbnZhcy53aWR0aCA9IHNpemVbMF07XG4gICAgICBtYXBDYW52YXMuaGVpZ2h0ID0gc2l6ZVsxXTtcbiAgICAgIGNvbnN0IG1hcENvbnRleHQgPSBtYXBDYW52YXMuZ2V0Q29udGV4dCgnMmQnKSB8fCAobnVsbCBhcyB1bmtub3duIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk7XG4gICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5vbC1sYXllciBjYW52YXMsIGNhbnZhcy5vbC1sYXllcicpLCAoY2FudmFzKSA9PiB7XG4gICAgICAgIGlmIChjYW52YXMud2lkdGggPiAwKSB7XG4gICAgICAgICAgY29uc3Qgb3BhY2l0eSA9IGNhbnZhcy5wYXJlbnROb2RlLnN0eWxlLm9wYWNpdHkgfHwgY2FudmFzLnN0eWxlLm9wYWNpdHk7XG4gICAgICAgICAgbWFwQ29udGV4dC5nbG9iYWxBbHBoYSA9IG9wYWNpdHkgPT09ICcnID8gMSA6IE51bWJlcihvcGFjaXR5KTtcblxuICAgICAgICAgIGNvbnN0IGJhY2tncm91bmRDb2xvciA9IGNhbnZhcy5wYXJlbnROb2RlLnN0eWxlLmJhY2tncm91bmRDb2xvcjtcbiAgICAgICAgICBpZiAoYmFja2dyb3VuZENvbG9yKSB7XG4gICAgICAgICAgICBtYXBDb250ZXh0LmZpbGxTdHlsZSA9IGJhY2tncm91bmRDb2xvcjtcbiAgICAgICAgICAgIG1hcENvbnRleHQuZmlsbFJlY3QoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgbWF0cml4O1xuICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IGNhbnZhcy5zdHlsZS50cmFuc2Zvcm07XG4gICAgICAgICAgaWYgKHRyYW5zZm9ybSkge1xuICAgICAgICAgICAgLy8gR2V0IHRoZSB0cmFuc2Zvcm0gcGFyYW1ldGVycyBmcm9tIHRoZSBzdHlsZSdzIHRyYW5zZm9ybSBtYXRyaXhcbiAgICAgICAgICAgIG1hdHJpeCA9IHRyYW5zZm9ybVxuICAgICAgICAgICAgICAubWF0Y2goL15tYXRyaXhcXCgoW14oXSopXFwpJC8pWzFdXG4gICAgICAgICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgICAgICAgIC5tYXAoTnVtYmVyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWF0cml4ID0gW1xuICAgICAgICAgICAgICBwYXJzZUZsb2F0KGNhbnZhcy5zdHlsZS53aWR0aCkgLyBjYW52YXMud2lkdGgsXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgIHBhcnNlRmxvYXQoY2FudmFzLnN0eWxlLmhlaWdodCkgLyBjYW52YXMuaGVpZ2h0LFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAwXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBBcHBseSB0aGUgdHJhbnNmb3JtIHRvIHRoZSBleHBvcnQgbWFwIGNvbnRleHRcbiAgICAgICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQucHJvdG90eXBlLnNldFRyYW5zZm9ybS5hcHBseShtYXBDb250ZXh0LCBtYXRyaXgpO1xuICAgICAgICAgIG1hcENvbnRleHQuZHJhd0ltYWdlKGNhbnZhcywgMCwgMCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbWFwQ29udGV4dC5nbG9iYWxBbHBoYSA9IDE7XG4gICAgICByZXNvbHZlKG1hcENhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL3BuZycpKTtcbiAgICB9KTtcbiAgICBtYXAucmVuZGVyU3luYygpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBleHBvcnRNYXBBc0ltYWdlID0gKG1hcDogTWFwLCBmaWxlbmFtZTogc3RyaW5nKSA9PiB7XG4gIGdldE1hcEFzUG5nKG1hcCkudGhlbigoZGF0YSkgPT4ge1xuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgbGluay5kb3dubG9hZCA9IGZpbGVuYW1lO1xuICAgIGxpbmsuaHJlZiA9IGRhdGE7XG4gICAgbGluay5jbGljaygpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZW9tZXRyeUZvckxheWVyID0gKGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMpOiBzdHJpbmcgPT4ge1xuICBzd2l0Y2ggKGxheWVyLnR5cGUpIHtcbiAgICBjYXNlICdtYXJrZXInOlxuICAgIGNhc2UgJ2hlYXRtYXAnOlxuICAgIGNhc2UgJ2J1YmJsZSc6XG4gICAgY2FzZSAncG9pbnQnOlxuICAgICAgcmV0dXJuIEZpZWxkVHlwZS5QT0lOVDtcbiAgICBjYXNlICdsaW5lJzpcbiAgICAgIHJldHVybiBGaWVsZFR5cGUuTElORTtcbiAgICBjYXNlICdwb2x5Z29uJzpcbiAgICAgIHJldHVybiBGaWVsZFR5cGUuUE9MWUdPTjtcbiAgICBjYXNlICdtdWx0aS1saW5lJzpcbiAgICAgIHJldHVybiBGaWVsZFR5cGUuTVVMVElMSU5FO1xuICAgIGNhc2UgJ211bHRpLXBvbHlnb24nOlxuICAgICAgcmV0dXJuIEZpZWxkVHlwZS5NVUxUSVBPTFlHT047XG4gICAgY2FzZSAnYXV0byc6XG4gICAgICByZXR1cm4gZ2VvbWV0cnlGb3JMYXllcih7XG4gICAgICAgIHR5cGU6IFdpZGdldE1hcExheWVyU2VydmljZS50cmFuc2xhdGVGaWVsZFR5cGVUb0xheWVyVHlwZShsYXllci5zdWJUeXBlKVxuICAgICAgfSBhcyBNYXBXaWRnZXRMYXllck9wdGlvbnMpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gRmllbGRUeXBlLlBPSU5UO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TGF5ZXJPcmRlciA9IChsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zLCBpbmRleDogbnVtYmVyLCBhcnJheTogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zW10pOiBudW1iZXIgPT4ge1xuICBpZiAobGF5ZXIub3JkZXIgJiYgYXJyYXlbaW5kZXggLSAxXSAmJiBhcnJheVtpbmRleCAtIDFdLm9yZGVyICYmIGxheWVyLm9yZGVyIDwgYXJyYXlbaW5kZXggLSAxXS5vcmRlciEpXG4gICAgcmV0dXJuIGFycmF5W2luZGV4IC0gMV0ub3JkZXIhICsgMTtcbiAgaWYgKGxheWVyLm9yZGVyKSByZXR1cm4gbGF5ZXIub3JkZXI7XG4gIGlmIChpbmRleCA9PT0gMCAmJiAhbGF5ZXIub3JkZXIpIHJldHVybiAwO1xuXG4gIGxldCBbZGlzdGFuY2VUb0ZpcnN0UHJldmlvdXNPcmRlciwgZGlzdGFuY2VUb0ZpcnN0TmV4dE9yZGVyXSA9IFtcbiAgICBhcnJheVxuICAgICAgLnNsaWNlKDAsIGluZGV4ICsgMSlcbiAgICAgIC5yZXZlcnNlKClcbiAgICAgIC5maW5kSW5kZXgoKGVsZW1lbnQpID0+ICEhZWxlbWVudC5vcmRlciksXG4gICAgYXJyYXkuc2xpY2UoaW5kZXggKyAxKS5maW5kSW5kZXgoKGVsZW1lbnQpID0+ICEhZWxlbWVudC5vcmRlcilcbiAgXTtcblxuICBsZXQgW3ByZXZpb3VzT3JkZXJJbmRleCwgbmV4dE9yZGVySW5kZXhdID0gW1xuICAgIGRpc3RhbmNlVG9GaXJzdFByZXZpb3VzT3JkZXIgPiAtMSA/IGluZGV4IC0gZGlzdGFuY2VUb0ZpcnN0UHJldmlvdXNPcmRlciA6IDAsXG4gICAgZGlzdGFuY2VUb0ZpcnN0TmV4dE9yZGVyICsgaW5kZXggKyAxXG4gIF07XG4gIGxldCBbcHJldmlvdXNPcmRlciwgbmV4dE9yZGVyXSA9IFtcbiAgICBkaXN0YW5jZVRvRmlyc3RQcmV2aW91c09yZGVyID4gLTEgPyBhcnJheVtwcmV2aW91c09yZGVySW5kZXhdLm9yZGVyISA6IDAsXG4gICAgZGlzdGFuY2VUb0ZpcnN0TmV4dE9yZGVyID4gLTEgPyBhcnJheVtuZXh0T3JkZXJJbmRleF0ub3JkZXIhIDogLTFcbiAgXTtcblxuICBpZiAobmV4dE9yZGVyID4gMCAmJiBuZXh0T3JkZXIgPCBwcmV2aW91c09yZGVyKSB7XG4gICAgY29uc3QgbmV3T3JkZXIgPSBwcmV2aW91c09yZGVyICsgKG5leHRPcmRlckluZGV4IC0gcHJldmlvdXNPcmRlckluZGV4KTtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgdGhlIG9yZGVyIHByb3BlcnR5IG9mIGxheWVyIG5vICR7aW5kZXggKyAyfSB3YXMgcHJlc2V0IGJ1dCBkb2Vzbid0IGZvbGxvdyB0aGUgb3JkZXIgb2YgdGhlIG90aGVyIGxheWVyc2BcbiAgICApO1xuICAgIG5leHRPcmRlciA9IG5ld09yZGVyO1xuICB9XG5cbiAgaWYgKG5leHRPcmRlciA+IDApIHtcbiAgICBsZXQgcmVsYXRpdmVJbmRleCA9IGluZGV4IC0gcHJldmlvdXNPcmRlckluZGV4O1xuICAgIHJldHVybiBwcmV2aW91c09yZGVyICsgKChuZXh0T3JkZXIgLSBwcmV2aW91c09yZGVyKSAvIChuZXh0T3JkZXJJbmRleCAtIHByZXZpb3VzT3JkZXJJbmRleCkpICogcmVsYXRpdmVJbmRleDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcHJldmlvdXNPcmRlciArIGRpc3RhbmNlVG9GaXJzdFByZXZpb3VzT3JkZXI7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0hFQVRNQVBfUkFESVVTID0gMjU7XG5leHBvcnQgY29uc3QgREVGQVVMVF9SQURJVVNfSU5URU5TSVRZX0ZBQ1RPUiA9IDEwMDAwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfWk9PTV9NSU4gPSAzO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfWk9PTV9TVEFSVCA9IDEwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfWk9PTV9NQVggPSAxODtcbmV4cG9ydCBjb25zdCBERUZBVUxUX01BUF9DRU5URVIgPSBbMi4yODI3MjE3MzQ3MzgxNTI1LCA0OC44NjQ3MDYwMzE1NTc3MTZdO1xuIl19
@@ -2,7 +2,7 @@ import { Component } from '@angular/core';
2
2
  import { baseItemProperties, ClassActions, ClassSelectors, ConfigSelectors, ContextMenuActions, ContextMenuSelectors, DashboardActions, DashboardSelectors, DataWidgetComponent, FieldSelectors, FieldType, ItemUtils, SearchSelectors, WIDGET_HEADER_HEIGHT } from '@provoly/dashboard';
3
3
  import equal from 'fast-deep-equal/es6';
4
4
  import { auditTime, BehaviorSubject, combineLatest, take } from 'rxjs';
5
- import { filter, map, tap, withLatestFrom } from 'rxjs/operators';
5
+ import { delay, filter, map, tap, withLatestFrom } from 'rxjs/operators';
6
6
  import * as i0 from "@angular/core";
7
7
  import * as i1 from "@ngrx/store";
8
8
  import * as i2 from "@angular/common";
@@ -28,6 +28,7 @@ export class WidgetTableComponent extends DataWidgetComponent {
28
28
  this.contextMenuClickedId = '';
29
29
  this._refresh$ = new BehaviorSubject(undefined);
30
30
  this.actualPage$ = new BehaviorSubject(0);
31
+ this.isOpen = false;
31
32
  this.classes$ = this.store.select(ClassSelectors.classes);
32
33
  this.fields$ = combineLatest([this.resultSet$, this.classes$, this.store.select(FieldSelectors.fields)]).pipe(map(([resultSet, classes, fields]) => [
33
34
  ...ItemUtils.getFieldsFromAvailabilityInResultSet(resultSet, classes, fields),
@@ -90,7 +91,7 @@ export class WidgetTableComponent extends DataWidgetComponent {
90
91
  loadedPages
91
92
  };
92
93
  }));
93
- this.subscriptions.add(this.pagination$.subscribe(() => this.refresh()));
94
+ this.subscriptions.add(this.pagination$.pipe(auditTime(200)).subscribe(() => this.refresh()));
94
95
  this.columns$ = this.options$.pipe(map((options) => options?.columns ?? []), tap(() => setTimeout(() => this.refresh(), 500)));
95
96
  this.isContextMenuOpened$ = this.store.select(ContextMenuSelectors.opened);
96
97
  this.subscriptions.add(this.resultSet$
@@ -118,10 +119,11 @@ export class WidgetTableComponent extends DataWidgetComponent {
118
119
  return !allIds.find((id) => !selectedIds.includes(id));
119
120
  }), tap((allSelected) => (this.areAllSelected = allSelected)));
120
121
  this.quickOrder$ = combineLatest([this.store.select(DashboardSelectors.quickOrder), this.datasourceIds$]).pipe(map(([order, nqs]) => (nqs.length === 1 ? order[nqs[0]] : undefined)));
121
- this.subscriptions.add(this._refresh$.pipe(auditTime(200)).subscribe(() => this.cdr.detectChanges()));
122
+ this.subscriptions.add(this._refresh$.pipe(delay(100)).subscribe(() => this.cdr.detectChanges()));
122
123
  }
123
124
  refresh() {
124
125
  this._refresh$.next();
126
+ this.isOpen = !this.isOpen;
125
127
  }
126
128
  emitManifest() {
127
129
  this.manifestModified.emit({
@@ -212,10 +214,10 @@ export class WidgetTableComponent extends DataWidgetComponent {
212
214
  this.actualPage$.next(number);
213
215
  }
214
216
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: WidgetTableComponent, deps: [{ token: i1.Store }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
215
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: WidgetTableComponent, selector: "pry-widget-table", usesInheritance: true, ngImport: i0, template: "<pry-widget-table-css></pry-widget-table-css>\n<div class=\"o-widget o-widget--table\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__popup__content__actions\">\n <button type=\"button\" class=\"a-btn a-btn--icon-text -link-like\" (click)=\"addColumn()\">\n <pry-icon iconSvg=\"post_add\"></pry-icon>\n {{ '@pry.widget.table.addColumn' | i18n }}\n </button>\n </div>\n\n <div\n *ngFor=\"let columnDef of optionsCopy?.columns ?? []; let i = index\"\n class=\"o-settings__popup__content__fields\"\n >\n <div class=\"o-settings__popup__content__fields__head\">\n <div class=\"m-btn-group\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"invertLayers(i, i - 1)\" *ngIf=\"i > 0\">\n <pry-icon iconSvg=\"fleche_haut\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.moveUp' | i18n }}</span>\n </button>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"invertLayers(i, i + 1)\"\n *ngIf=\"i < (optionsCopy?.columns?.length ?? 0) - 1\"\n >\n <pry-icon iconSvg=\"fleche_bas\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.moveDown' | i18n }}</span>\n </button>\n </div>\n </div>\n\n <div class=\"o-settings__popup__content__fields__content\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"table_property\">{{ '@pry.widget.table.property' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changePropertyName($event, columnDef)\"\n [itemsAsOption]=\"true\"\n [items]=\"properties$ | async\"\n [ngModel]=\"columnDef.property\"\n bindLabel=\"label\"\n bindValue=\"property\"\n id=\"table_property\"\n class=\"a-pry-select\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"table_label\">{{ '@pry.widget.table.label' | i18n }}</label>\n <input\n id=\"table_label\"\n class=\"a-form-field\"\n type=\"text\"\n (input)=\"changeLabel($event, columnDef)\"\n [value]=\"columnDef.label\"\n />\n </div>\n </div>\n <button\n (click)=\"deleteColumn(i)\"\n aria-label=\"delete\"\n type=\"button\"\n class=\"a-btn a-btn--icon-text -link-like\"\n data-func=\"delete\"\n >\n <pry-icon iconSvg=\"delete\" [width]=\"19\" [height]=\"19\"></pry-icon>\n <span>{{ '@pry.widget.table.deleteColumn' | i18n }}</span>\n </button>\n </div>\n </pry-settings>\n </pry-widget-header>\n\n <div class=\"a-table-wrapper\">\n <div class=\"a-table-loading\" *ngIf=\"isLoading$ | async; else noLoading\">\n <span class=\"a-table-loading__loader\"></span>\n </div>\n <ng-template #noLoading>\n <ng-container *ngIf=\"pagination$ | async as pagination\">\n <ng-container *ngIf=\"pagination?.items ?? [] as allObjects\">\n <div\n class=\"no-result\"\n *ngIf=\"pagination.noFillersItems === 0\"\n [style.height.%]=\"pagination.totalPages > 0 ? 80 : 100\"\n >\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.table.empty' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.table.empty' | i18n }}</span>\n </div>\n\n <ng-container *ngIf=\"pagination.noFillersItems > 0\">\n <ng-container *ngIf=\"(selectedIds$ | async) ?? [] as selectedIds\">\n <ng-container *ngIf=\"(columns$ | async) ?? [] as columns\">\n <table class=\"a-table\" [attr.aria-label]=\"'@pry.widget.table.description' | i18n\">\n <thead>\n <tr>\n <th *ngIf=\"allObjects?.length ?? 0 > 0\">\n <pry-checkbox [ngModel]=\"areAllSelected\" (ngModelChange)=\"selectAll($event)\"></pry-checkbox>\n </th>\n <th *ngFor=\"let column of columns; let i = index\" resizable (click)=\"setOrder(column)\">\n <span>{{ column.label }}</span>\n <ng-container *ngIf=\"quickOrder$ | async as quickOrder\">\n <ng-container *ngIf=\"quickOrder.attribute === column.attributeId\">\n <pry-icon\n [iconSvg]=\"quickOrder.asc ? 'chevron_top' : 'chevron_bottom'\"\n [height]=\"12\"\n [width]=\"12\"\n ></pry-icon>\n </ng-container>\n </ng-container>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n *ngFor=\"let item of allObjects\"\n [class.is-selected]=\"selectedIds.includes(item.id)\"\n [class.context-menu-selected]=\"contextMenuClickedId === item.id && (isContextMenuOpened$ | async)\"\n (contextmenu)=\"contextMenu($event, item)\"\n detachRow\n (selectedValue)=\"selection($event, item)\"\n [class.filler]=\"item.metadata!['__widget-table-filler']\"\n >\n <td class=\"checkbox-wrapper\">\n <pry-checkbox [ngModel]=\"selectedIds.includes(item.id)\"></pry-checkbox>\n </td>\n <td *ngFor=\"let column of columns\" class=\"u-ellipsis\">\n <ng-container *ngIf=\"column.property === 'metadata'\">\n <pry-metadata [item]=\"item\"></pry-metadata>\n </ng-container>\n <ng-container *ngIf=\"column.property === 'oClass'\">\n <p class=\"content-img\">\n <img\n [height]=\"25\"\n [width]=\"25\"\n [src]=\"item | translateItemToSymbol | async\"\n [alt]=\"item.oClass | translateId : { type: 'class', output: 'name' } | async\"\n />\n </p>\n </ng-container>\n <ng-container *ngIf=\"!['metadata', 'oClass'].includes(column.property)\">\n <pry-expand-value [value]=\"item | getValue : column.property | async\"></pry-expand-value>\n </ng-container>\n </td>\n </tr>\n </tbody>\n </table>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <div class=\"a-table-pagination\" *ngIf=\"pagination.totalPages > 0\">\n <div class=\"a-table-pagination__spacing\">\n <div>\n <button (click)=\"goToPage(0)\" [disabled]=\"pagination.page <= 0\">\n <pry-icon iconSvg=\"skip-left-fill\"></pry-icon>\n </button>\n </div>\n <div>\n <button (click)=\"goToPage(pagination.page - 1)\" [disabled]=\"pagination.page <= 0\">\n <pry-icon iconSvg=\"arrow-left-s-fill\"></pry-icon>\n </button>\n </div>\n <div class=\"a-table-pagination__spacing__label\">\n <p>{{ pagination.page + 1 }} / {{ pagination.loadedPages }}</p>\n </div>\n <div>\n <button\n (click)=\"goToPage(pagination.page + 1)\"\n [disabled]=\"pagination.page + 1 >= pagination.loadedPages\"\n >\n <pry-icon iconSvg=\"arrow-right-s-fill\"></pry-icon>\n </button>\n </div>\n <div>\n <button\n (click)=\"goToPage(pagination.loadedPages - 1)\"\n [disabled]=\"pagination.page + 1 >= pagination.loadedPages\"\n >\n <pry-icon iconSvg=\"skip-right-fill\"></pry-icon>\n </button>\n </div>\n <div class=\"a-table-pagination__spacing__label\">\n ({{\n '@pry.widget.table.remaining' | i18n : { remaining: pagination.totalPages - pagination.loadedPages }\n }})\n </div>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </ng-template>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.SettingsComponent, selector: "pry-settings", inputs: ["widgetIndex", "isDisable", "headerPresent", "open$", "header"], outputs: ["saveTriggered", "changeTitle"] }, { kind: "component", type: i4.MetadataComponent, selector: "pry-metadata", inputs: ["item"] }, { kind: "component", type: i4.PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: ["manifest", "openData$", "additionalOptions", "headerOptions", "displayCount", "datasourceIds", "widgetIndex"], outputs: ["manifestModified"] }, { kind: "component", type: i4.PrySelectComponent, selector: "pry-select", inputs: ["labelTranslate", "baseTranslate", "translationFn", "translationFnArgs", "clearable", "multiple", "multipleClearRight", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "items", "itemsAsOption", "bindData", "bindValue", "bindLabel", "bindIcon", "iconSize", "templateLabel", "templateOption", "autocomplete"] }, { kind: "component", type: i4.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i5.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "component", type: i6.ResizableComponent, selector: "th[resizable]" }, { kind: "directive", type: i7.ResizableDirective, selector: "[resizable]", outputs: ["resizable"] }, { kind: "component", type: i8.PryWidgetTableCssComponent, selector: "pry-widget-table-css" }, { kind: "component", type: i9.ExpandValueComponent, selector: "pry-expand-value", inputs: ["value"] }, { kind: "directive", type: i10.DetachRowDirective, selector: "[detachRow]", outputs: ["selectedValue"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslateIdPipe, name: "translateId" }, { kind: "pipe", type: i4.TranslateItemToSymbolPipe, name: "translateItemToSymbol" }, { kind: "pipe", type: i4.I18nPipe, name: "i18n" }, { kind: "pipe", type: i11.GetValuePipe, name: "getValue" }] }); }
217
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: WidgetTableComponent, selector: "pry-widget-table", usesInheritance: true, ngImport: i0, template: "<pry-widget-table-css></pry-widget-table-css>\n<div class=\"o-widget o-widget--table\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n (click)=\"refresh()\"\n >\n <pry-settings\n (click)=\"refresh()\"\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n (triggerClick)=\"this.refresh()\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__popup__content__actions\">\n <button type=\"button\" class=\"a-btn a-btn--icon-text -link-like\" (click)=\"addColumn()\">\n <pry-icon iconSvg=\"post_add\"></pry-icon>\n {{ '@pry.widget.table.addColumn' | i18n }}\n </button>\n </div>\n\n <div\n *ngFor=\"let columnDef of optionsCopy?.columns ?? []; let i = index\"\n class=\"o-settings__popup__content__fields\"\n (click)=\"refresh()\"\n >\n <div class=\"o-settings__popup__content__fields__head\">\n <div class=\"m-btn-group\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"invertLayers(i, i - 1)\" *ngIf=\"i > 0\">\n <pry-icon iconSvg=\"fleche_haut\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.moveUp' | i18n }}</span>\n </button>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"invertLayers(i, i + 1)\"\n *ngIf=\"i < (optionsCopy?.columns?.length ?? 0) - 1\"\n >\n <pry-icon iconSvg=\"fleche_bas\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.moveDown' | i18n }}</span>\n </button>\n </div>\n </div>\n\n <div class=\"o-settings__popup__content__fields__content\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"table_property\">{{ '@pry.widget.table.property' | i18n }}</label>\n <pry-select\n (click)=\"refresh()\"\n (ngModelChange)=\"changePropertyName($event, columnDef)\"\n [itemsAsOption]=\"true\"\n [items]=\"properties$ | async\"\n [ngModel]=\"columnDef.property\"\n [class.ng-select-opened]=\"isOpen\"\n bindLabel=\"label\"\n bindValue=\"property\"\n id=\"table_property\"\n class=\"a-pry-select\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"table_label\">{{ '@pry.widget.table.label' | i18n }}</label>\n <input\n id=\"table_label\"\n class=\"a-form-field\"\n type=\"text\"\n (input)=\"changeLabel($event, columnDef)\"\n [value]=\"columnDef.label\"\n />\n </div>\n </div>\n <button\n (click)=\"deleteColumn(i)\"\n aria-label=\"delete\"\n type=\"button\"\n class=\"a-btn a-btn--icon-text -link-like\"\n data-func=\"delete\"\n >\n <pry-icon iconSvg=\"delete\" [width]=\"19\" [height]=\"19\"></pry-icon>\n <span>{{ '@pry.widget.table.deleteColumn' | i18n }}</span>\n </button>\n </div>\n </pry-settings>\n </pry-widget-header>\n\n <div class=\"a-table-wrapper\">\n <div class=\"a-table-loading\" *ngIf=\"isLoading$ | async; else noLoading\">\n <span class=\"a-table-loading__loader\"></span>\n </div>\n <ng-template #noLoading>\n <ng-container *ngIf=\"pagination$ | async as pagination\">\n <ng-container *ngIf=\"pagination?.items ?? [] as allObjects\">\n <div\n class=\"no-result\"\n *ngIf=\"pagination.noFillersItems === 0\"\n [style.height.%]=\"pagination.totalPages > 0 ? 80 : 100\"\n >\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.table.empty' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.table.empty' | i18n }}</span>\n </div>\n\n <ng-container *ngIf=\"pagination.noFillersItems > 0\">\n <ng-container *ngIf=\"(selectedIds$ | async) ?? [] as selectedIds\">\n <ng-container *ngIf=\"(columns$ | async) ?? [] as columns\">\n <table class=\"a-table\" [attr.aria-label]=\"'@pry.widget.table.description' | i18n\">\n <thead>\n <tr>\n <th *ngIf=\"allObjects?.length ?? 0 > 0\">\n <pry-checkbox [ngModel]=\"areAllSelected\" (ngModelChange)=\"selectAll($event)\"></pry-checkbox>\n </th>\n <th *ngFor=\"let column of columns; let i = index\" resizable (click)=\"setOrder(column)\">\n <span>{{ column.label }}</span>\n <ng-container *ngIf=\"quickOrder$ | async as quickOrder\">\n <ng-container *ngIf=\"quickOrder.attribute === column.attributeId\">\n <pry-icon\n [iconSvg]=\"quickOrder.asc ? 'chevron_top' : 'chevron_bottom'\"\n [height]=\"12\"\n [width]=\"12\"\n ></pry-icon>\n </ng-container>\n </ng-container>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n *ngFor=\"let item of allObjects\"\n [class.is-selected]=\"selectedIds.includes(item.id)\"\n [class.context-menu-selected]=\"contextMenuClickedId === item.id && (isContextMenuOpened$ | async)\"\n (contextmenu)=\"contextMenu($event, item)\"\n detachRow\n (selectedValue)=\"selection($event, item)\"\n [class.filler]=\"item.metadata!['__widget-table-filler']\"\n >\n <td class=\"checkbox-wrapper\">\n <pry-checkbox [ngModel]=\"selectedIds.includes(item.id)\"></pry-checkbox>\n </td>\n <td *ngFor=\"let column of columns\" class=\"u-ellipsis\">\n <ng-container *ngIf=\"column.property === 'metadata'\">\n <pry-metadata [item]=\"item\"></pry-metadata>\n </ng-container>\n <ng-container *ngIf=\"column.property === 'oClass'\">\n <p class=\"content-img\">\n <img\n [height]=\"25\"\n [width]=\"25\"\n [src]=\"item | translateItemToSymbol | async\"\n [alt]=\"item.oClass | translateId : { type: 'class', output: 'name' } | async\"\n />\n </p>\n </ng-container>\n <ng-container *ngIf=\"!['metadata', 'oClass'].includes(column.property)\">\n <pry-expand-value [value]=\"item | getValue : column.property | async\"></pry-expand-value>\n </ng-container>\n </td>\n </tr>\n </tbody>\n </table>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <div class=\"a-table-pagination\" *ngIf=\"pagination.totalPages > 0\">\n <div class=\"a-table-pagination__spacing\">\n <div>\n <button (click)=\"goToPage(0)\" [disabled]=\"pagination.page <= 0\">\n <pry-icon iconSvg=\"skip-left-fill\"></pry-icon>\n </button>\n </div>\n <div>\n <button (click)=\"goToPage(pagination.page - 1)\" [disabled]=\"pagination.page <= 0\">\n <pry-icon iconSvg=\"arrow-left-s-fill\"></pry-icon>\n </button>\n </div>\n <div class=\"a-table-pagination__spacing__label\">\n <p>{{ pagination.page + 1 }} / {{ pagination.loadedPages }}</p>\n </div>\n <div>\n <button\n (click)=\"goToPage(pagination.page + 1)\"\n [disabled]=\"pagination.page + 1 >= pagination.loadedPages\"\n >\n <pry-icon iconSvg=\"arrow-right-s-fill\"></pry-icon>\n </button>\n </div>\n <div>\n <button\n (click)=\"goToPage(pagination.loadedPages - 1)\"\n [disabled]=\"pagination.page + 1 >= pagination.loadedPages\"\n >\n <pry-icon iconSvg=\"skip-right-fill\"></pry-icon>\n </button>\n </div>\n <div class=\"a-table-pagination__spacing__label\">\n ({{\n '@pry.widget.table.remaining' | i18n : { remaining: pagination.totalPages - pagination.loadedPages }\n }})\n </div>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </ng-template>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.SettingsComponent, selector: "pry-settings", inputs: ["widgetIndex", "isDisable", "headerPresent", "open$", "header"], outputs: ["triggerClick", "saveTriggered", "changeTitle"] }, { kind: "component", type: i4.MetadataComponent, selector: "pry-metadata", inputs: ["item"] }, { kind: "component", type: i4.PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: ["manifest", "openData$", "additionalOptions", "headerOptions", "displayCount", "datasourceIds", "widgetIndex"], outputs: ["manifestModified"] }, { kind: "component", type: i4.PrySelectComponent, selector: "pry-select", inputs: ["labelTranslate", "baseTranslate", "translationFn", "translationFnArgs", "clearable", "multiple", "multipleClearRight", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "items", "itemsAsOption", "bindData", "bindValue", "bindLabel", "bindIcon", "iconSize", "templateLabel", "templateOption", "autocomplete"] }, { kind: "component", type: i4.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i5.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "component", type: i6.ResizableComponent, selector: "th[resizable]" }, { kind: "directive", type: i7.ResizableDirective, selector: "[resizable]", outputs: ["resizable"] }, { kind: "component", type: i8.PryWidgetTableCssComponent, selector: "pry-widget-table-css" }, { kind: "component", type: i9.ExpandValueComponent, selector: "pry-expand-value", inputs: ["value"] }, { kind: "directive", type: i10.DetachRowDirective, selector: "[detachRow]", outputs: ["selectedValue"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslateIdPipe, name: "translateId" }, { kind: "pipe", type: i4.TranslateItemToSymbolPipe, name: "translateItemToSymbol" }, { kind: "pipe", type: i4.I18nPipe, name: "i18n" }, { kind: "pipe", type: i11.GetValuePipe, name: "getValue" }] }); }
216
218
  }
217
219
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: WidgetTableComponent, decorators: [{
218
220
  type: Component,
219
- args: [{ selector: 'pry-widget-table', template: "<pry-widget-table-css></pry-widget-table-css>\n<div class=\"o-widget o-widget--table\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__popup__content__actions\">\n <button type=\"button\" class=\"a-btn a-btn--icon-text -link-like\" (click)=\"addColumn()\">\n <pry-icon iconSvg=\"post_add\"></pry-icon>\n {{ '@pry.widget.table.addColumn' | i18n }}\n </button>\n </div>\n\n <div\n *ngFor=\"let columnDef of optionsCopy?.columns ?? []; let i = index\"\n class=\"o-settings__popup__content__fields\"\n >\n <div class=\"o-settings__popup__content__fields__head\">\n <div class=\"m-btn-group\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"invertLayers(i, i - 1)\" *ngIf=\"i > 0\">\n <pry-icon iconSvg=\"fleche_haut\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.moveUp' | i18n }}</span>\n </button>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"invertLayers(i, i + 1)\"\n *ngIf=\"i < (optionsCopy?.columns?.length ?? 0) - 1\"\n >\n <pry-icon iconSvg=\"fleche_bas\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.moveDown' | i18n }}</span>\n </button>\n </div>\n </div>\n\n <div class=\"o-settings__popup__content__fields__content\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"table_property\">{{ '@pry.widget.table.property' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changePropertyName($event, columnDef)\"\n [itemsAsOption]=\"true\"\n [items]=\"properties$ | async\"\n [ngModel]=\"columnDef.property\"\n bindLabel=\"label\"\n bindValue=\"property\"\n id=\"table_property\"\n class=\"a-pry-select\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"table_label\">{{ '@pry.widget.table.label' | i18n }}</label>\n <input\n id=\"table_label\"\n class=\"a-form-field\"\n type=\"text\"\n (input)=\"changeLabel($event, columnDef)\"\n [value]=\"columnDef.label\"\n />\n </div>\n </div>\n <button\n (click)=\"deleteColumn(i)\"\n aria-label=\"delete\"\n type=\"button\"\n class=\"a-btn a-btn--icon-text -link-like\"\n data-func=\"delete\"\n >\n <pry-icon iconSvg=\"delete\" [width]=\"19\" [height]=\"19\"></pry-icon>\n <span>{{ '@pry.widget.table.deleteColumn' | i18n }}</span>\n </button>\n </div>\n </pry-settings>\n </pry-widget-header>\n\n <div class=\"a-table-wrapper\">\n <div class=\"a-table-loading\" *ngIf=\"isLoading$ | async; else noLoading\">\n <span class=\"a-table-loading__loader\"></span>\n </div>\n <ng-template #noLoading>\n <ng-container *ngIf=\"pagination$ | async as pagination\">\n <ng-container *ngIf=\"pagination?.items ?? [] as allObjects\">\n <div\n class=\"no-result\"\n *ngIf=\"pagination.noFillersItems === 0\"\n [style.height.%]=\"pagination.totalPages > 0 ? 80 : 100\"\n >\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.table.empty' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.table.empty' | i18n }}</span>\n </div>\n\n <ng-container *ngIf=\"pagination.noFillersItems > 0\">\n <ng-container *ngIf=\"(selectedIds$ | async) ?? [] as selectedIds\">\n <ng-container *ngIf=\"(columns$ | async) ?? [] as columns\">\n <table class=\"a-table\" [attr.aria-label]=\"'@pry.widget.table.description' | i18n\">\n <thead>\n <tr>\n <th *ngIf=\"allObjects?.length ?? 0 > 0\">\n <pry-checkbox [ngModel]=\"areAllSelected\" (ngModelChange)=\"selectAll($event)\"></pry-checkbox>\n </th>\n <th *ngFor=\"let column of columns; let i = index\" resizable (click)=\"setOrder(column)\">\n <span>{{ column.label }}</span>\n <ng-container *ngIf=\"quickOrder$ | async as quickOrder\">\n <ng-container *ngIf=\"quickOrder.attribute === column.attributeId\">\n <pry-icon\n [iconSvg]=\"quickOrder.asc ? 'chevron_top' : 'chevron_bottom'\"\n [height]=\"12\"\n [width]=\"12\"\n ></pry-icon>\n </ng-container>\n </ng-container>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n *ngFor=\"let item of allObjects\"\n [class.is-selected]=\"selectedIds.includes(item.id)\"\n [class.context-menu-selected]=\"contextMenuClickedId === item.id && (isContextMenuOpened$ | async)\"\n (contextmenu)=\"contextMenu($event, item)\"\n detachRow\n (selectedValue)=\"selection($event, item)\"\n [class.filler]=\"item.metadata!['__widget-table-filler']\"\n >\n <td class=\"checkbox-wrapper\">\n <pry-checkbox [ngModel]=\"selectedIds.includes(item.id)\"></pry-checkbox>\n </td>\n <td *ngFor=\"let column of columns\" class=\"u-ellipsis\">\n <ng-container *ngIf=\"column.property === 'metadata'\">\n <pry-metadata [item]=\"item\"></pry-metadata>\n </ng-container>\n <ng-container *ngIf=\"column.property === 'oClass'\">\n <p class=\"content-img\">\n <img\n [height]=\"25\"\n [width]=\"25\"\n [src]=\"item | translateItemToSymbol | async\"\n [alt]=\"item.oClass | translateId : { type: 'class', output: 'name' } | async\"\n />\n </p>\n </ng-container>\n <ng-container *ngIf=\"!['metadata', 'oClass'].includes(column.property)\">\n <pry-expand-value [value]=\"item | getValue : column.property | async\"></pry-expand-value>\n </ng-container>\n </td>\n </tr>\n </tbody>\n </table>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <div class=\"a-table-pagination\" *ngIf=\"pagination.totalPages > 0\">\n <div class=\"a-table-pagination__spacing\">\n <div>\n <button (click)=\"goToPage(0)\" [disabled]=\"pagination.page <= 0\">\n <pry-icon iconSvg=\"skip-left-fill\"></pry-icon>\n </button>\n </div>\n <div>\n <button (click)=\"goToPage(pagination.page - 1)\" [disabled]=\"pagination.page <= 0\">\n <pry-icon iconSvg=\"arrow-left-s-fill\"></pry-icon>\n </button>\n </div>\n <div class=\"a-table-pagination__spacing__label\">\n <p>{{ pagination.page + 1 }} / {{ pagination.loadedPages }}</p>\n </div>\n <div>\n <button\n (click)=\"goToPage(pagination.page + 1)\"\n [disabled]=\"pagination.page + 1 >= pagination.loadedPages\"\n >\n <pry-icon iconSvg=\"arrow-right-s-fill\"></pry-icon>\n </button>\n </div>\n <div>\n <button\n (click)=\"goToPage(pagination.loadedPages - 1)\"\n [disabled]=\"pagination.page + 1 >= pagination.loadedPages\"\n >\n <pry-icon iconSvg=\"skip-right-fill\"></pry-icon>\n </button>\n </div>\n <div class=\"a-table-pagination__spacing__label\">\n ({{\n '@pry.widget.table.remaining' | i18n : { remaining: pagination.totalPages - pagination.loadedPages }\n }})\n </div>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </ng-template>\n </div>\n</div>\n" }]
221
+ args: [{ selector: 'pry-widget-table', template: "<pry-widget-table-css></pry-widget-table-css>\n<div class=\"o-widget o-widget--table\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n (click)=\"refresh()\"\n >\n <pry-settings\n (click)=\"refresh()\"\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n (triggerClick)=\"this.refresh()\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__popup__content__actions\">\n <button type=\"button\" class=\"a-btn a-btn--icon-text -link-like\" (click)=\"addColumn()\">\n <pry-icon iconSvg=\"post_add\"></pry-icon>\n {{ '@pry.widget.table.addColumn' | i18n }}\n </button>\n </div>\n\n <div\n *ngFor=\"let columnDef of optionsCopy?.columns ?? []; let i = index\"\n class=\"o-settings__popup__content__fields\"\n (click)=\"refresh()\"\n >\n <div class=\"o-settings__popup__content__fields__head\">\n <div class=\"m-btn-group\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"invertLayers(i, i - 1)\" *ngIf=\"i > 0\">\n <pry-icon iconSvg=\"fleche_haut\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.moveUp' | i18n }}</span>\n </button>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"invertLayers(i, i + 1)\"\n *ngIf=\"i < (optionsCopy?.columns?.length ?? 0) - 1\"\n >\n <pry-icon iconSvg=\"fleche_bas\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.moveDown' | i18n }}</span>\n </button>\n </div>\n </div>\n\n <div class=\"o-settings__popup__content__fields__content\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"table_property\">{{ '@pry.widget.table.property' | i18n }}</label>\n <pry-select\n (click)=\"refresh()\"\n (ngModelChange)=\"changePropertyName($event, columnDef)\"\n [itemsAsOption]=\"true\"\n [items]=\"properties$ | async\"\n [ngModel]=\"columnDef.property\"\n [class.ng-select-opened]=\"isOpen\"\n bindLabel=\"label\"\n bindValue=\"property\"\n id=\"table_property\"\n class=\"a-pry-select\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"table_label\">{{ '@pry.widget.table.label' | i18n }}</label>\n <input\n id=\"table_label\"\n class=\"a-form-field\"\n type=\"text\"\n (input)=\"changeLabel($event, columnDef)\"\n [value]=\"columnDef.label\"\n />\n </div>\n </div>\n <button\n (click)=\"deleteColumn(i)\"\n aria-label=\"delete\"\n type=\"button\"\n class=\"a-btn a-btn--icon-text -link-like\"\n data-func=\"delete\"\n >\n <pry-icon iconSvg=\"delete\" [width]=\"19\" [height]=\"19\"></pry-icon>\n <span>{{ '@pry.widget.table.deleteColumn' | i18n }}</span>\n </button>\n </div>\n </pry-settings>\n </pry-widget-header>\n\n <div class=\"a-table-wrapper\">\n <div class=\"a-table-loading\" *ngIf=\"isLoading$ | async; else noLoading\">\n <span class=\"a-table-loading__loader\"></span>\n </div>\n <ng-template #noLoading>\n <ng-container *ngIf=\"pagination$ | async as pagination\">\n <ng-container *ngIf=\"pagination?.items ?? [] as allObjects\">\n <div\n class=\"no-result\"\n *ngIf=\"pagination.noFillersItems === 0\"\n [style.height.%]=\"pagination.totalPages > 0 ? 80 : 100\"\n >\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.table.empty' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.table.empty' | i18n }}</span>\n </div>\n\n <ng-container *ngIf=\"pagination.noFillersItems > 0\">\n <ng-container *ngIf=\"(selectedIds$ | async) ?? [] as selectedIds\">\n <ng-container *ngIf=\"(columns$ | async) ?? [] as columns\">\n <table class=\"a-table\" [attr.aria-label]=\"'@pry.widget.table.description' | i18n\">\n <thead>\n <tr>\n <th *ngIf=\"allObjects?.length ?? 0 > 0\">\n <pry-checkbox [ngModel]=\"areAllSelected\" (ngModelChange)=\"selectAll($event)\"></pry-checkbox>\n </th>\n <th *ngFor=\"let column of columns; let i = index\" resizable (click)=\"setOrder(column)\">\n <span>{{ column.label }}</span>\n <ng-container *ngIf=\"quickOrder$ | async as quickOrder\">\n <ng-container *ngIf=\"quickOrder.attribute === column.attributeId\">\n <pry-icon\n [iconSvg]=\"quickOrder.asc ? 'chevron_top' : 'chevron_bottom'\"\n [height]=\"12\"\n [width]=\"12\"\n ></pry-icon>\n </ng-container>\n </ng-container>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n *ngFor=\"let item of allObjects\"\n [class.is-selected]=\"selectedIds.includes(item.id)\"\n [class.context-menu-selected]=\"contextMenuClickedId === item.id && (isContextMenuOpened$ | async)\"\n (contextmenu)=\"contextMenu($event, item)\"\n detachRow\n (selectedValue)=\"selection($event, item)\"\n [class.filler]=\"item.metadata!['__widget-table-filler']\"\n >\n <td class=\"checkbox-wrapper\">\n <pry-checkbox [ngModel]=\"selectedIds.includes(item.id)\"></pry-checkbox>\n </td>\n <td *ngFor=\"let column of columns\" class=\"u-ellipsis\">\n <ng-container *ngIf=\"column.property === 'metadata'\">\n <pry-metadata [item]=\"item\"></pry-metadata>\n </ng-container>\n <ng-container *ngIf=\"column.property === 'oClass'\">\n <p class=\"content-img\">\n <img\n [height]=\"25\"\n [width]=\"25\"\n [src]=\"item | translateItemToSymbol | async\"\n [alt]=\"item.oClass | translateId : { type: 'class', output: 'name' } | async\"\n />\n </p>\n </ng-container>\n <ng-container *ngIf=\"!['metadata', 'oClass'].includes(column.property)\">\n <pry-expand-value [value]=\"item | getValue : column.property | async\"></pry-expand-value>\n </ng-container>\n </td>\n </tr>\n </tbody>\n </table>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <div class=\"a-table-pagination\" *ngIf=\"pagination.totalPages > 0\">\n <div class=\"a-table-pagination__spacing\">\n <div>\n <button (click)=\"goToPage(0)\" [disabled]=\"pagination.page <= 0\">\n <pry-icon iconSvg=\"skip-left-fill\"></pry-icon>\n </button>\n </div>\n <div>\n <button (click)=\"goToPage(pagination.page - 1)\" [disabled]=\"pagination.page <= 0\">\n <pry-icon iconSvg=\"arrow-left-s-fill\"></pry-icon>\n </button>\n </div>\n <div class=\"a-table-pagination__spacing__label\">\n <p>{{ pagination.page + 1 }} / {{ pagination.loadedPages }}</p>\n </div>\n <div>\n <button\n (click)=\"goToPage(pagination.page + 1)\"\n [disabled]=\"pagination.page + 1 >= pagination.loadedPages\"\n >\n <pry-icon iconSvg=\"arrow-right-s-fill\"></pry-icon>\n </button>\n </div>\n <div>\n <button\n (click)=\"goToPage(pagination.loadedPages - 1)\"\n [disabled]=\"pagination.page + 1 >= pagination.loadedPages\"\n >\n <pry-icon iconSvg=\"skip-right-fill\"></pry-icon>\n </button>\n </div>\n <div class=\"a-table-pagination__spacing__label\">\n ({{\n '@pry.widget.table.remaining' | i18n : { remaining: pagination.totalPages - pagination.loadedPages }\n }})\n </div>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </ng-template>\n </div>\n</div>\n" }]
220
222
  }], ctorParameters: function () { return [{ type: i1.Store }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; } });
221
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LXRhYmxlL2NvbXBvbmVudC93aWRnZXQtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtdGFibGUvY29tcG9uZW50L3dpZGdldC10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUV6RSxPQUFPLEVBQ0wsa0JBQWtCLEVBRWxCLFlBQVksRUFDWixjQUFjLEVBRWQsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixvQkFBb0IsRUFDcEIsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQixtQkFBbUIsRUFFbkIsY0FBYyxFQUNkLFNBQVMsRUFFVCxTQUFTLEVBR1QsZUFBZSxFQUVmLG9CQUFvQixFQUNyQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sS0FBSyxNQUFNLHFCQUFxQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBYyxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkYsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBZ0JsRSxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsbUJBQW1CO0lBdUIzRCxZQUFZLEtBQWlCLEVBQUUsRUFBYyxFQUFVLEdBQXNCO1FBQzNFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFEb0MsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFqQjdFLFVBQUssR0FBRyxL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LFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNwQixTQUFTLEVBQUUsTUFBTSxDQUFDLFdBQVcsSUFBSSxFQUFFO2dCQUNuQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDO2FBQ3pDLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sU0FBUyxDQUFDLE1BQXdCLEVBQUUsV0FBb0M7UUFDOUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxXQUFXLENBQUMsU0FBUyxLQUFLLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFDaEUsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELE9BQU8sV0FBVyxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzdGLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYSxFQUFFLElBQVU7UUFDcEMsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxRQUFRLENBQUMsTUFBYztRQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDOzhHQWhTVSxvQkFBb0I7a0dBQXBCLG9CQUFvQiwrRUMzQ2pDLHc4U0FzTkE7OzJGRDNLYSxvQkFBb0I7a0JBSmhDLFNBQVM7K0JBQ0Usa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQge1xuICBiYXNlSXRlbVByb3BlcnRpZXMsXG4gIENsYXNzLFxuICBDbGFzc0FjdGlvbnMsXG4gIENsYXNzU2VsZWN0b3JzLFxuICBDb2x1bW5EZWZpbml0aW9uLFxuICBDb25maWdTZWxlY3RvcnMsXG4gIENvbnRleHRNZW51QWN0aW9ucyxcbiAgQ29udGV4dE1lbnVTZWxlY3RvcnMsXG4gIERhc2hib2FyZEFjdGlvbnMsXG4gIERhc2hib2FyZFNlbGVjdG9ycyxcbiAgRGF0YVdpZGdldENvbXBvbmVudCxcbiAgRmllbGQsXG4gIEZpZWxkU2VsZWN0b3JzLFxuICBGaWVsZFR5cGUsXG4gIEl0ZW0sXG4gIEl0ZW1VdGlscyxcbiAgT3JkZXJWYWx1ZSxcbiAgUmVzdWx0T3JkZXIsXG4gIFNlYXJjaFNlbGVjdG9ycyxcbiAgVGFibGVXaWRnZXRPcHRpb25zLFxuICBXSURHRVRfSEVBREVSX0hFSUdIVFxufSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IGVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbC9lczYnO1xuaW1wb3J0IHsgYXVkaXRUaW1lLCBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIHRha2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCB0YXAsIHdpdGhMYXRlc3RGcm9tIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb24ge1xuICB0b3RhbFBhZ2VzOiBudW1iZXI7XG4gIHBhZ2U6IG51bWJlcjtcbiAgcm93czogbnVtYmVyO1xuICBpdGVtczogSXRlbVtdO1xuICBsb2FkZWQ6IG51bWJlcjtcbiAgbG9hZGVkUGFnZXM6IG51bWJlcjtcbiAgbm9GaWxsZXJzSXRlbXM6IG51bWJlcjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncHJ5LXdpZGdldC10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi93aWRnZXQtdGFibGUuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFdpZGdldFRhYmxlQ29tcG9uZW50IGV4dGVuZHMgRGF0YVdpZGdldENvbXBvbmVudCB7XG4gIG9wdGlvbnMkOiBPYnNlcnZhYmxlPFRhYmxlV2lkZ2V0T3B0aW9ucz47XG4gIGNvbHVtbnMkOiBPYnNlcnZhYmxlPENvbHVtbkRlZmluaXRpb25bXT47XG4gIG9wdGlvbnNDb3B5PzogVGFibGVXaWRnZXRPcHRpb25zO1xuICBmaWVsZHMkOiBPYnNlcnZhYmxlPEZpZWxkW10+O1xuICBzZWxlY3RlZElkcyQ6IE9ic2VydmFibGU8c3RyaW5nW10+O1xuICBBcnJheSA9IEFycmF5O1xuICBjdXJyZW50Q2xhc3Nlczogc3RyaW5nW10gPSBbXTtcbiAgc2VsZWN0ZWRJZHM6IHN0cmluZ1tdID0gW107XG4gIFdJREdFVF9IRUFERVJfSEVJR0hUID0gV0lER0VUX0hFQURFUl9IRUlHSFQ7XG4gIHByaXZhdGUgY2xhc3NlcyQ6IE9ic2VydmFibGU8Q2xhc3NbXT47XG4gIHByb3BlcnRpZXMkOiBPYnNlcnZhYmxlPHsgbGFiZWw6IHN0cmluZzsgcHJvcGVydHk6IHN0cmluZyB9W10+O1xuICBpc0xvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBhbGxTZWxlY3RlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIGFyZUFsbFNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGFsbElkczogc3RyaW5nW10gPSBbXTtcbiAgY29udGV4dE1lbnVDbGlja2VkSWQ6IHN0cmluZyA9ICcnO1xuICBpc0NvbnRleHRNZW51T3BlbmVkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcXVpY2tPcmRlciQ6IE9ic2VydmFibGU8UmVzdWx0T3JkZXIgfCB1bmRlZmluZWQ+O1xuICBwcml2YXRlIF9yZWZyZXNoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8dm9pZD4odW5kZWZpbmVkKTtcbiAgYWN0dWFsUGFnZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIHBhZ2luYXRpb24kOiBPYnNlcnZhYmxlPFBhZ2luYXRpb24+O1xuXG4gIGNvbnN0cnVjdG9yKHN0b3JlOiBTdG9yZTxhbnk+LCBlbDogRWxlbWVudFJlZiwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgc3VwZXIoc3RvcmUsIGVsKTtcblxuICAgIHRoaXMuY2xhc3NlcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChDbGFzc1NlbGVjdG9ycy5jbGFzc2VzKTtcblxuICAgIHRoaXMuZmllbGRzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMucmVzdWx0U2V0JCwgdGhpcy5jbGFzc2VzJCwgdGhpcy5zdG9yZS5zZWxlY3QoRmllbGRTZWxlY3RvcnMuZmllbGRzKV0pLnBpcGUoXG4gICAgICBtYXAoXG4gICAgICAgIChbcmVzdWx0U2V0LCBjbGFzc2VzLCBmaWVsZHNdKSA9PlxuICAgICAgICAgIFtcbiAgICAgICAgICAgIC4uLkl0ZW1VdGlscy5nZXRGaWVsZHNGcm9tQXZhaWxhYmlsaXR5SW5SZXN1bHRTZXQocmVzdWx0U2V0LCBjbGFzc2VzLCBmaWVsZHMpLFxuICAgICAgICAgICAgLi4uYmFzZUl0ZW1Qcm9wZXJ0aWVzLm1hcCgocCkgPT4gKHsgbmFtZTogcCwgaWQ6IHAgfSBhcyBGaWVsZCkpXG4gICAgICAgICAgXSBhcyBGaWVsZFtdXG4gICAgICApLFxuICAgICAgbWFwKChmaWVsZHMpID0+IGZpZWxkcy5maWx0ZXIoKGZpZWxkKSA9PiBmaWVsZC50eXBlICE9PSBGaWVsZFR5cGUuUkFXKSlcbiAgICApO1xuXG4gICAgdGhpcy5vcHRpb25zJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5tYW5pZmVzdCQucGlwZShtYXAoKG1hbmlmZXN0KSA9PiBtYW5pZmVzdC5vcHRpb25zIGFzIFRhYmxlV2lkZ2V0T3B0aW9ucykpLFxuICAgICAgdGhpcy5yZXN1bHRTZXQkLFxuICAgICAgdGhpcy5jbGFzc2VzJCxcbiAgICAgIHRoaXMuZmllbGRzJCxcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KENvbmZpZ1NlbGVjdG9ycy50YWJsZURlZmF1bHRBdHRyaWJ1dGVzRGVmaW5pdGlvbnMpXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW29wdGlvbnMsIHJlc3VsdFNldCwgY2xhc3NlcywgZmllbGRzLCBkZWZzXSkgPT4ge1xuICAgICAgICBpZiAoIW9wdGlvbnMuY29sdW1ucyB8fCBvcHRpb25zLmNvbHVtbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IEl0ZW1VdGlscy5nZXRBdHRyaWJ1dGVzRnJvbVJzKHJlc3VsdFNldCwgY2xhc3NlcywgZmllbGRzLCBkZWZzKTtcbiAgICAgICAgICBjb25zdCB1bmlxdWVQcm9wcyA9IFsuLi5uZXcgU2V0KGF0dHJpYnV0ZXMubWFwKChhdHRyKSA9PiBhdHRyLm5hbWUpKV07XG5cbiAgICAgICAgICBvcHRpb25zLmNvbHVtbnMgPSB1bmlxdWVQcm9wcy5tYXAoKHByb3BlcnR5KSA9PiAoe1xuICAgICAgICAgICAgcHJvcGVydHk6IHByb3BlcnR5LFxuICAgICAgICAgICAgbGFiZWw6IHByb3BlcnR5LFxuICAgICAgICAgICAgYXR0cmlidXRlSWQ6IGF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci5uYW1lID09PSBwcm9wZXJ0eSk/LmlkXG4gICAgICAgICAgfSkpIGFzIENvbHVtbkRlZmluaXRpb25bXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLm9wdGlvbnMkLnBpcGUoZmlsdGVyKChvcHQpID0+ICEhb3B0KSkuc3Vic2NyaWJlKChvcHRpb25zKSA9PiB7XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkgPSB7IC4uLihKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpKSBhcyBUYWJsZVdpZGdldE9wdGlvbnMpIH07XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmFsbEl0ZW1zJC5zdWJzY3JpYmUoKGFsbE9iamVjdHMpID0+ICh0aGlzLmFsbElkcyA9IGFsbE9iamVjdHMubWFwKChvYmopID0+IG9iai5pZCkpKSk7XG5cbiAgICB0aGlzLmlzTG9hZGluZyQgPSBjb21iaW5lTGF0ZXN0KFtzdG9yZS5zZWxlY3QoU2VhcmNoU2VsZWN0b3JzLnNlYXJjaExvYWRpbmcpLCB0aGlzLmRhdGFzb3VyY2VJZHMkXSkucGlwZShcbiAgICAgIG1hcCgoW3NlYXJjaExvYWRpbmcsIGRhdGFzb3VyY2VJZHNdKSA9PiB7XG4gICAgICAgIHJldHVybiAoc2VhcmNoTG9hZGluZyA/PyBbXSkuZmlsdGVyKChpZCkgPT4gKGRhdGFzb3VyY2VJZHMgPz8gW10pLmluY2x1ZGVzKGlkKSk/Lmxlbmd0aCA+IDA7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBIRUFERVJfU0laRSA9IDYwO1xuICAgIGNvbnN0IFBBR0lOQVRJT05fU0laRSA9IDM1O1xuICAgIGNvbnN0IExJTkVfU0laRSA9IDQ1O1xuXG4gICAgdGhpcy5wYWdpbmF0aW9uJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5hbGxJdGVtcyQsXG4gICAgICB0aGlzLmFjdHVhbFBhZ2UkLFxuICAgICAgdGhpcy53aWRnZXRTaXplJCxcbiAgICAgIHRoaXMucmVzdWx0U2V0JCxcbiAgICAgIHRoaXMuZGlzcGxheUhlYWRlciRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbaXRlbXMsIGFjdHVhbFBhZ2UsIHNpemUsIHJzLCBoZWFkZXJQcmVzZW50XSkgPT4ge1xuICAgICAgICBjb25zdCByb3dzID0gTWF0aC5tYXgoXG4gICAgICAgICAgMSxcbiAgICAgICAgICBNYXRoLmZsb29yKFxuICAgICAgICAgICAgKHNpemUuaGVpZ2h0IC0gSEVBREVSX1NJWkUgLSBQQUdJTkFUSU9OX1NJWkUgLSAoaGVhZGVyUHJlc2VudCA/IFdJREdFVF9IRUFERVJfSEVJR0hUIDogMCkpIC8gTElORV9TSVpFXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCB0b3RhbCA9IE9iamVjdC52YWx1ZXMocnMuY291bnQgPz8ge30pLnJlZHVjZSgocCwgYykgPT4gYy5jb3VudCArIHAsIDApO1xuICAgICAgICBjb25zdCBsb2FkZWRQYWdlcyA9IE1hdGguY2VpbChpdGVtcy5sZW5ndGggLyByb3dzKTtcbiAgICAgICAgY29uc3QgcGFnZSA9IGFjdHVhbFBhZ2UgPD0gbG9hZGVkUGFnZXMgPyBhY3R1YWxQYWdlIDogTWF0aC5tYXgoMCwgbG9hZGVkUGFnZXMgLSAxKTtcbiAgICAgICAgY29uc3QgZmlsdGVyZWQgPSBpdGVtcy5maWx0ZXIoKF8sIGlkeCkgPT4gaWR4ID49IHJvd3MgKiBwYWdlICYmIGlkeCA8IHJvd3MgKiAocGFnZSArIDEpKTtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRXaXRoRmlsbGVycyA9XG4gICAgICAgICAgZmlsdGVyZWQubGVuZ3RoID09PSByb3dzXG4gICAgICAgICAgICA/IGZpbHRlcmVkXG4gICAgICAgICAgICA6IGZpbHRlcmVkLmNvbmNhdChcbiAgICAgICAgICAgICAgICBuZXcgQXJyYXkocm93cyAtIGZpbHRlcmVkLmxlbmd0aCkuZmlsbCh7XG4gICAgICAgICAgICAgICAgICBtZXRhZGF0YTogeyAnX193aWRnZXQtdGFibGUtZmlsbGVyJzogdHJ1ZSB9XG4gICAgICAgICAgICAgICAgfSBhcyB1bmtub3duIGFzIEl0ZW0pXG4gICAgICAgICAgICAgICk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcm93cyxcbiAgICAgICAgICBwYWdlLFxuICAgICAgICAgIGl0ZW1zOiBmaWx0ZXJlZFdpdGhGaWxsZXJzLFxuICAgICAgICAgIG5vRmlsbGVyc0l0ZW1zOiBmaWx0ZXJlZC5sZW5ndGgsXG4gICAgICAgICAgdG90YWwsXG4gICAgICAgICAgdG90YWxQYWdlczogTWF0aC5jZWlsKHRvdGFsIC8gcm93cyksXG4gICAgICAgICAgbG9hZGVkOiBpdGVtcy5sZW5ndGgsXG4gICAgICAgICAgbG9hZGVkUGFnZXNcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5wYWdpbmF0aW9uJC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZWZyZXNoKCkpKTtcblxuICAgIHRoaXMuY29sdW1ucyQgPSB0aGlzLm9wdGlvbnMkLnBpcGUoXG4gICAgICBtYXAoKG9wdGlvbnMpID0+IG9wdGlvbnM/LmNvbHVtbnMgPz8gW10pLFxuICAgICAgdGFwKCgpID0+IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZWZyZXNoKCksIDUwMCkpXG4gICAgKTtcblxuICAgIHRoaXMuaXNDb250ZXh0TWVudU9wZW5lZCQgPSB0aGlzLnN0b3JlLnNlbGVjdChDb250ZXh0TWVudVNlbGVjdG9ycy5vcGVuZWQpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMucmVzdWx0U2V0JFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKHJzKSA9PiAhIXJzKSxcbiAgICAgICAgICBtYXAoKHJzKSA9PiBPYmplY3Qua2V5cyhycy5pdGVtcykpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoY2xhc3NlcykgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRDbGFzc2VzLmxlbmd0aCA+IDAgJiYgIWVxdWFsKHRoaXMuY3VycmVudENsYXNzZXMsIGNsYXNzZXMpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMub3B0aW9uc0NvcHkpIHtcbiAgICAgICAgICAgICAgdGhpcy5vcHRpb25zQ29weSA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsZXRlIHRoaXMub3B0aW9uc0NvcHkuY29sdW1ucztcbiAgICAgICAgICAgIHRoaXMuZW1pdE1hbmlmZXN0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY3VycmVudENsYXNzZXMgPSBjbGFzc2VzO1xuICAgICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnNlbGVjdGVkSWRzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5zZWxlY3RlZEl0ZW1JZHMpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLnNlbGVjdGVkSWRzJC5zdWJzY3JpYmUoKHNlbGVjdGVkSWRzKSA9PiB0aGlzLnNlbGVjdGVkSWRzID09PSBzZWxlY3RlZElkcykpO1xuXG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChDbGFzc0FjdGlvbnMubG9hZCgpKTtcblxuICAgIHRoaXMucHJvcGVydGllcyQgPSB0aGlzLnJlc3VsdFNldCQucGlwZShcbiAgICAgIG1hcCgocnMpID0+IFsuLi5JdGVtVXRpbHMuZ2V0QXR0cmlidXRlc0Zyb21BdmFpbGFiaWxpdHlJblJlc3VsdFNldChycyldKSxcbiAgICAgIG1hcCgocHJvcHMpID0+IHtcbiAgICAgICAgY29uc3Qgc29ydGVkUHJvcHMgPSBbLi4ucHJvcHNdO1xuICAgICAgICBzb3J0ZWRQcm9wcy5zb3J0KChwQSwgcEIpID0+IHBBLnRvTG9jYWxlTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShwQi50b0xvY2FsZUxvd2VyQ2FzZSgpKSk7XG4gICAgICAgIHJldHVybiBzb3J0ZWRQcm9wcztcbiAgICAgIH0pLFxuICAgICAgbWFwKChwcm9wcykgPT4gcHJvcHMubWFwKChwcm9wKSA9PiAoeyBsYWJlbDogcHJvcCwgcHJvcGVydHk6IHByb3AgfSkpKSxcbiAgICAgIHRhcCgoKSA9PiBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVmcmVzaCgpLCA1MDApKVxuICAgICk7XG5cbiAgICB0aGlzLmFsbFNlbGVjdGVkJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuc2VsZWN0ZWRJZHMkLCB0aGlzLmFsbEl0ZW1zJF0pLnBpcGUoXG4gICAgICBtYXAoKFtzZWxlY3RlZElkcywgYWxsT2JqZWN0c10pID0+IHtcbiAgICAgICAgY29uc3QgYWxsSWRzID0gYWxsT2JqZWN0cy5tYXAoKG9iamVjdCkgPT4gb2JqZWN0LmlkKTtcbiAgICAgICAgcmV0dXJuICFhbGxJZHMuZmluZCgoaWQpID0+ICFzZWxlY3RlZElkcy5pbmNsdWRlcyhpZCkpO1xuICAgICAgfSksXG4gICAgICB0YXAoKGFsbFNlbGVjdGVkKSA9PiAodGhpcy5hcmVBbGxTZWxlY3RlZCA9IGFsbFNlbGVjdGVkKSlcbiAgICApO1xuXG4gICAgdGhpcy5xdWlja09yZGVyJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5xdWlja09yZGVyKSwgdGhpcy5kYXRhc291cmNlSWRzJF0pLnBpcGUoXG4gICAgICBtYXAoKFtvcmRlciwgbnFzXSkgPT4gKG5xcy5sZW5ndGggPT09IDEgPyBvcmRlcltucXNbMF1dIDogdW5kZWZpbmVkKSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLl9yZWZyZXNoJC5waXBlKGF1ZGl0VGltZSgyMDApKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpKSk7XG4gIH1cblxuICByZWZyZXNoKCkge1xuICAgIHRoaXMuX3JlZnJlc2gkLm5leHQoKTtcbiAgfVxuXG4gIGVtaXRNYW5pZmVzdCgpIHtcbiAgICB0aGlzLm1hbmlmZXN0TW9kaWZpZWQuZW1pdCh7XG4gICAgICB3aWRnZXRJbmRleDogdGhpcy53aWRnZXRJbmRleCxcbiAgICAgIG1hbmlmZXN0OiB7IC4uLnRoaXMubWFuaWZlc3QsIG9wdGlvbnM6IHRoaXMub3B0aW9uc0NvcHkgfVxuICAgIH0pO1xuICB9XG5cbiAgYWRkQ29sdW1uKCkge1xuICAgIGlmICghdGhpcy5vcHRpb25zQ29weT8uY29sdW1ucykge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSA9IHsgY29sdW1uczogW10gfTtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25zQ29weS5jb2x1bW5zPy5wdXNoKHsgbGFiZWw6ICcnLCBwcm9wZXJ0eTogJycgfSk7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG4gIH1cblxuICBjaGFuZ2VQcm9wZXJ0eU5hbWUoJGV2ZW50OiBhbnksIGNvbHVtbkRlZjogQ29sdW1uRGVmaW5pdGlvbikge1xuICAgIGNvbHVtbkRlZi5wcm9wZXJ0eSA9ICRldmVudDtcbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIGNoYW5nZUxhYmVsKCRldmVudDogRXZlbnQsIGNvbHVtbkRlZjogQ29sdW1uRGVmaW5pdGlvbikge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBuZXdMYWJlbCA9ICRldmVudC5jdXJyZW50VGFyZ2V0LnZhbHVlO1xuICAgIGlmIChjb2x1bW5EZWYubGFiZWwgIT09IG5ld0xhYmVsKSB7XG4gICAgICBjb2x1bW5EZWYubGFiZWwgPSBuZXdMYWJlbDtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIGRlbGV0ZUNvbHVtbihpOiBudW1iZXIpIHtcbiAgICB0aGlzLm9wdGlvbnNDb3B5Py5jb2x1bW5zPy5zcGxpY2UoaSwgMSk7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG4gIH1cblxuICBzZWxlY3Rpb24oJGV2ZW50OiBNb3VzZUV2ZW50LCBpdGVtOiBJdGVtKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnNlbGVjdCh7IGlkOiBpdGVtLmlkLCBjdW11bGF0aXZlOiAhJGV2ZW50LnNoaWZ0S2V5IH0pKTtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBjb250ZXh0TWVudSgkZXZlbnQ6IE1vdXNlRXZlbnQsIGl0ZW06IEl0ZW0pIHtcbiAgICBpZiAodGhpcy5tYW5pZmVzdC5jb250ZXh0TWVudSAhPT0gZmFsc2UpIHtcbiAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgQ29udGV4dE1lbnVBY3Rpb25zLm9wZW4oe1xuICAgICAgICAgIGl0ZW1JZDogaXRlbS5pZCxcbiAgICAgICAgICBjbGllbnRYOiAkZXZlbnQuY2xpZW50WCxcbiAgICAgICAgICBjbGllbnRZOiAkZXZlbnQuY2xpZW50WSxcbiAgICAgICAgICByZXN1bHRTZXQ6IEFycmF5LmlzQXJyYXkodGhpcy5tYW5pZmVzdC5kYXRhc291cmNlKSA/IHRoaXMubWFuaWZlc3QuZGF0YXNvdXJjZVswXSA6IHRoaXMubWFuaWZlc3QuZGF0YXNvdXJjZSxcbiAgICAgICAgICBmcm9tOiAndGFibGUnLFxuICAgICAgICAgIGFsbG93T2JqZWN0Q3JlYXRpb246IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgdGhpcy5jb250ZXh0TWVudUNsaWNrZWRJZCA9IGl0ZW0uaWQ7XG4gICAgfVxuICB9XG5cbiAgaW52ZXJ0TGF5ZXJzKGlkeDogbnVtYmVyLCBpZHhXaXRoOiBudW1iZXIpIHtcbiAgICBpZiAoISF0aGlzLm9wdGlvbnNDb3B5ICYmICEhdGhpcy5vcHRpb25zQ29weS5jb2x1bW5zKSB7XG4gICAgICBjb25zdCB0bXAgPSB0aGlzLm9wdGlvbnNDb3B5LmNvbHVtbnNbaWR4V2l0aF07XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmNvbHVtbnNbaWR4V2l0aF0gPSB0aGlzLm9wdGlvbnNDb3B5LmNvbHVtbnNbaWR4XTtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuY29sdW1uc1tpZHhdID0gdG1wO1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0QWxsKCRldmVudDogYW55KSB7XG4gICAgaWYgKCRldmVudCkge1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnNlbGVjdE1hbnkoeyBpZHM6IHRoaXMuYWxsSWRzIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnNlbGVjdE1hbnkoeyBpZHM6IFtdIH0pKTtcbiAgICB9XG4gIH1cblxuICBzZXRPcmRlcihjb2x1bW46IENvbHVtbkRlZmluaXRpb24pIHtcbiAgICB0aGlzLmRhdGFzb3VyY2VJZHMkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgZmlsdGVyKChucXMpID0+IG5xcy5sZW5ndGggPT09IDEpLFxuICAgICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLnF1aWNrT3JkZXIkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoW25xcywgYWN0dWFsT3JkZXJdKSA9PiB7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy5xdWlja09yZGVyKHtcbiAgICAgICAgICAgIGRhdGFzb3VyY2VJZDogbnFzWzBdLFxuICAgICAgICAgICAgYXR0cmlidXRlOiBjb2x1bW4uYXR0cmlidXRlSWQgPz8gJycsXG4gICAgICAgICAgICBhc2M6IHRoaXMubmV4dE9yZGVyKGNvbHVtbiwgYWN0dWFsT3JkZXIpXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBuZXh0T3JkZXIoY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uLCBhY3R1YWxPcmRlcjogUmVzdWx0T3JkZXIgfCB1bmRlZmluZWQpOiBPcmRlclZhbHVlIHtcbiAgICBpZiAoIWFjdHVhbE9yZGVyIHx8IGFjdHVhbE9yZGVyLmF0dHJpYnV0ZSAhPT0gY29sdW1uLmF0dHJpYnV0ZUlkKSB7XG4gICAgICByZXR1cm4gJ2FzYyc7XG4gICAgfVxuICAgIHJldHVybiBhY3R1YWxPcmRlci5hc2MgPT09ICdhc2MnID8gJ2Rlc2MnIDogYWN0dWFsT3JkZXIuYXNjID09PSAnZGVzYycgPyB1bmRlZmluZWQgOiAnYXNjJztcbiAgfVxuXG4gIHRyYWNrT2JqZWN0cyhpbmRleDogbnVtYmVyLCBpdGVtOiBJdGVtKSB7XG4gICAgcmV0dXJuIGl0ZW0uaWQ7XG4gIH1cblxuICBnb1RvUGFnZShudW1iZXI6IG51bWJlcikge1xuICAgIHRoaXMuYWN0dWFsUGFnZSQubmV4dChudW1iZXIpO1xuICB9XG59XG4iLCI8cHJ5LXdpZGdldC10YWJsZS1jc3M+PC9wcnktd2lkZ2V0LXRhYmxlLWNzcz5cbjxkaXYgY2xhc3M9XCJvLXdpZGdldCBvLXdpZGdldC0tdGFibGVcIj5cbiAgPHByeS13aWRnZXQtaGVhZGVyXG4gICAgW2RhdGFzb3VyY2VJZHNdPVwiKGRhdGFzb3VyY2VJZHMkIHwgYXN5bmMpID8/IFtdXCJcbiAgICAqbmdJZj1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgW21hbmlmZXN0XT1cIm1hbmlmZXN0XCJcbiAgICAobWFuaWZlc3RNb2RpZmllZCk9XCJtYW5pZmVzdE1vZGlmaWVkLmVtaXQoJGV2ZW50KVwiXG4gICAgI2hlYWRlclxuICAgIFtoZWFkZXJPcHRpb25zXT1cIihkaXNwbGF5SGVhZGVyJCB8IGFzeW5jKSA/PyB7fVwiXG4gID5cbiAgICA8cHJ5LXNldHRpbmdzXG4gICAgICAoc2F2ZVRyaWdnZXJlZCk9XCJlbWl0TWFuaWZlc3QoKVwiXG4gICAgICAoY2hhbmdlVGl0bGUpPVwiY2hhbmdlV2lkZ2V0VGl0bGUoJGV2ZW50KVwiXG4gICAgICBbaGVhZGVyUHJlc2VudF09XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCJcbiAgICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgICBbaGVhZGVyXT1cImhlYWRlclwiXG4gICAgICBbb3BlbiRdPVwib3BlbiRcIlxuICAgICAgY2xhc3M9XCJvLXNldHRpbmdzXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2FjdGlvbnNcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0taWNvbi10ZXh0IC1saW5rLWxpa2VcIiAoY2xpY2spPVwiYWRkQ29sdW1uKClcIj5cbiAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cInBvc3RfYWRkXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICB7eyAnQHByeS53aWRnZXQudGFibGUuYWRkQ29sdW1uJyB8IGkxOG4gfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uRGVmIG9mIG9wdGlvbnNDb3B5Py5jb2x1bW5zID8/IFtdOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fZmllbGRzXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHNfX2hlYWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1idG4tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seVwiIChjbGljayk9XCJpbnZlcnRMYXllcnMoaSwgaSAtIDEpXCIgKm5nSWY9XCJpID4gMFwiPlxuICAgICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImZsZWNoZV9oYXV0XCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LmFjdGlvbi5tb3ZlVXAnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0taWNvbi1vbmx5XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImludmVydExheWVycyhpLCBpICsgMSlcIlxuICAgICAgICAgICAgICAqbmdJZj1cImkgPCAob3B0aW9uc0NvcHk/LmNvbHVtbnM/Lmxlbmd0aCA/PyAwKSAtIDFcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImZsZWNoZV9iYXNcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0BwcnkuYWN0aW9uLm1vdmVEb3duJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHNfX2NvbnRlbnRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwidGFibGVfcHJvcGVydHlcIj57eyAnQHByeS53aWRnZXQudGFibGUucHJvcGVydHknIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VQcm9wZXJ0eU5hbWUoJGV2ZW50LCBjb2x1bW5EZWYpXCJcbiAgICAgICAgICAgICAgW2l0ZW1zQXNPcHRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJwcm9wZXJ0aWVzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiY29sdW1uRGVmLnByb3BlcnR5XCJcbiAgICAgICAgICAgICAgYmluZExhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJwcm9wZXJ0eVwiXG4gICAgICAgICAgICAgIGlkPVwidGFibGVfcHJvcGVydHlcIlxuICAgICAgICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cInRhYmxlX2xhYmVsXCI+e3sgJ0Bwcnkud2lkZ2V0LnRhYmxlLmxhYmVsJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGlkPVwidGFibGVfbGFiZWxcIlxuICAgICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgKGlucHV0KT1cImNoYW5nZUxhYmVsKCRldmVudCwgY29sdW1uRGVmKVwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJjb2x1bW5EZWYubGFiZWxcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlQ29sdW1uKGkpXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiZGVsZXRlXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLXRleHQgLWxpbmstbGlrZVwiXG4gICAgICAgICAgZGF0YS1mdW5jPVwiZGVsZXRlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiZGVsZXRlXCIgW3dpZHRoXT1cIjE5XCIgW2hlaWdodF09XCIxOVwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgJ0Bwcnkud2lkZ2V0LnRhYmxlLmRlbGV0ZUNvbHVtbicgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvcHJ5LXNldHRpbmdzPlxuICA8L3ByeS13aWRnZXQtaGVhZGVyPlxuXG4gIDxkaXYgY2xhc3M9XCJhLXRhYmxlLXdyYXBwZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYS10YWJsZS1sb2FkaW5nXCIgKm5nSWY9XCJpc0xvYWRpbmckIHwgYXN5bmM7IGVsc2Ugbm9Mb2FkaW5nXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImEtdGFibGUtbG9hZGluZ19fbG9hZGVyXCI+PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxuZy10ZW1wbGF0ZSAjbm9Mb2FkaW5nPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhZ2luYXRpb24kIHwgYXN5bmMgYXMgcGFnaW5hdGlvblwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFnaW5hdGlvbj8uaXRlbXMgPz8gW10gYXMgYWxsT2JqZWN0c1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwibm8tcmVzdWx0XCJcbiAgICAgICAgICAgICpuZ0lmPVwicGFnaW5hdGlvbi5ub0ZpbGxlcnNJdGVtcyA9PT0gMFwiXG4gICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LiVdPVwicGFnaW5hdGlvbi50b3RhbFBhZ2VzID4gMCA/IDgwIDogMTAwXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgIGNsYXNzPVwibm8tcmVzdWx0X19zZWFyY2hcIlxuICAgICAgICAgICAgICBzcmM9XCIuLi8uLi8uLi9hc3NldHMvc3Zncy9wcnlfcmVjaGVyY2hlX3Bhc19kZV9yZXN1bHRhdC5zdmdcIlxuICAgICAgICAgICAgICBhbHQ9XCJ7eyAnQHByeS53aWRnZXQudGFibGUuZW1wdHknIHwgaTE4biB9fVwiXG4gICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuby1yZXN1bHRfX3RleHRcIj57eyAnQHByeS53aWRnZXQudGFibGUuZW1wdHknIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYWdpbmF0aW9uLm5vRmlsbGVyc0l0ZW1zID4gMFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihzZWxlY3RlZElkcyQgfCBhc3luYykgPz8gW10gYXMgc2VsZWN0ZWRJZHNcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihjb2x1bW5zJCB8IGFzeW5jKSA/PyBbXSBhcyBjb2x1bW5zXCI+XG4gICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwiYS10YWJsZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0Bwcnkud2lkZ2V0LnRhYmxlLmRlc2NyaXB0aW9uJyB8IGkxOG5cIj5cbiAgICAgICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cImFsbE9iamVjdHM/Lmxlbmd0aCA/PyAwID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHByeS1jaGVja2JveCBbbmdNb2RlbF09XCJhcmVBbGxTZWxlY3RlZFwiIChuZ01vZGVsQ2hhbmdlKT1cInNlbGVjdEFsbCgkZXZlbnQpXCI+PC9wcnktY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zOyBsZXQgaSA9IGluZGV4XCIgcmVzaXphYmxlIChjbGljayk9XCJzZXRPcmRlcihjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBjb2x1bW4ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicXVpY2tPcmRlciQgfCBhc3luYyBhcyBxdWlja09yZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWlja09yZGVyLmF0dHJpYnV0ZSA9PT0gY29sdW1uLmF0dHJpYnV0ZUlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByeS1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvblN2Z109XCJxdWlja09yZGVyLmFzYyA/ICdjaGV2cm9uX3RvcCcgOiAnY2hldnJvbl9ib3R0b20nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiMTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3dpZHRoXT1cIjEyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYWxsT2JqZWN0c1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLXNlbGVjdGVkXT1cInNlbGVjdGVkSWRzLmluY2x1ZGVzKGl0ZW0uaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuY29udGV4dC1tZW51LXNlbGVjdGVkXT1cImNvbnRleHRNZW51Q2xpY2tlZElkID09PSBpdGVtLmlkICYmIChpc0NvbnRleHRNZW51T3BlbmVkJCB8IGFzeW5jKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImNvbnRleHRNZW51KCRldmVudCwgaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgIGRldGFjaFJvd1xuICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZFZhbHVlKT1cInNlbGVjdGlvbigkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmlsbGVyXT1cIml0ZW0ubWV0YWRhdGEhWydfX3dpZGdldC10YWJsZS1maWxsZXInXVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjaGVja2JveC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cHJ5LWNoZWNrYm94IFtuZ01vZGVsXT1cInNlbGVjdGVkSWRzLmluY2x1ZGVzKGl0ZW0uaWQpXCI+PC9wcnktY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zXCIgY2xhc3M9XCJ1LWVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnByb3BlcnR5ID09PSAnbWV0YWRhdGEnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwcnktbWV0YWRhdGEgW2l0ZW1dPVwiaXRlbVwiPjwvcHJ5LW1ldGFkYXRhPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnByb3BlcnR5ID09PSAnb0NsYXNzJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImNvbnRlbnQtaW1nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCIyNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbd2lkdGhdPVwiMjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJpdGVtIHwgdHJhbnNsYXRlSXRlbVRvU3ltYm9sIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FsdF09XCJpdGVtLm9DbGFzcyB8IHRyYW5zbGF0ZUlkIDogeyB0eXBlOiAnY2xhc3MnLCBvdXRwdXQ6ICduYW1lJyB9IHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFbJ21ldGFkYXRhJywgJ29DbGFzcyddLmluY2x1ZGVzKGNvbHVtbi5wcm9wZXJ0eSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHByeS1leHBhbmQtdmFsdWUgW3ZhbHVlXT1cIml0ZW0gfCBnZXRWYWx1ZSA6IGNvbHVtbi5wcm9wZXJ0eSB8IGFzeW5jXCI+PC9wcnktZXhwYW5kLXZhbHVlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhLXRhYmxlLXBhZ2luYXRpb25cIiAqbmdJZj1cInBhZ2luYXRpb24udG90YWxQYWdlcyA+IDBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhLXRhYmxlLXBhZ2luYXRpb25fX3NwYWNpbmdcIj5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJnb1RvUGFnZSgwKVwiIFtkaXNhYmxlZF09XCJwYWdpbmF0aW9uLnBhZ2UgPD0gMFwiPlxuICAgICAgICAgICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJza2lwLWxlZnQtZmlsbFwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImdvVG9QYWdlKHBhZ2luYXRpb24ucGFnZSAtIDEpXCIgW2Rpc2FibGVkXT1cInBhZ2luYXRpb24ucGFnZSA8PSAwXCI+XG4gICAgICAgICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImFycm93LWxlZnQtcy1maWxsXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhLXRhYmxlLXBhZ2luYXRpb25fX3NwYWNpbmdfX2xhYmVsXCI+XG4gICAgICAgICAgICAgICAgPHA+e3sgcGFnaW5hdGlvbi5wYWdlICsgMSB9fSAvIHt7IHBhZ2luYXRpb24ubG9hZGVkUGFnZXMgfX08L3A+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJnb1RvUGFnZShwYWdpbmF0aW9uLnBhZ2UgKyAxKVwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicGFnaW5hdGlvbi5wYWdlICsgMSA+PSBwYWdpbmF0aW9uLmxvYWRlZFBhZ2VzXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImFycm93LXJpZ2h0LXMtZmlsbFwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJnb1RvUGFnZShwYWdpbmF0aW9uLmxvYWRlZFBhZ2VzIC0gMSlcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInBhZ2luYXRpb24ucGFnZSArIDEgPj0gcGFnaW5hdGlvbi5sb2FkZWRQYWdlc1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJza2lwLXJpZ2h0LWZpbGxcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImEtdGFibGUtcGFnaW5hdGlvbl9fc3BhY2luZ19fbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAoe3tcbiAgICAgICAgICAgICAgICAgICdAcHJ5LndpZGdldC50YWJsZS5yZW1haW5pbmcnIHwgaTE4biA6IHsgcmVtYWluaW5nOiBwYWdpbmF0aW9uLnRvdGFsUGFnZXMgLSBwYWdpbmF0aW9uLmxvYWRlZFBhZ2VzIH1cbiAgICAgICAgICAgICAgICB9fSlcbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
223
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LXRhYmxlL2NvbXBvbmVudC93aWRnZXQtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtdGFibGUvY29tcG9uZW50L3dpZGdldC10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUV6RSxPQUFPLEVBQ0wsa0JBQWtCLEVBRWxCLFlBQVksRUFDWixjQUFjLEVBRWQsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixvQkFBb0IsRUFDcEIsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQixtQkFBbUIsRUFFbkIsY0FBYyxFQUNkLFNBQVMsRUFFVCxTQUFTLEVBR1QsZUFBZSxFQUVmLG9CQUFvQixFQUNyQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sS0FBSyxNQUFNLHFCQUFxQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBYyxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkYsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7OztBQWdCekUsTUFBTSxPQUFPLG9CQUFxQixTQUFRLG1CQUFtQjtJQXdCM0QsWUFBWSxLQUFpQixFQUFFLEVBQWMsRUFBVSxHQUFzQjtRQUMzRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRG9DLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBbEI3RSxV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Q0FDakM7YUFDQSxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUNqQixnQkFBZ0IsQ0FBQyxVQUFVLENBQUM7Z0JBQzFCLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNwQixTQUFTLEVBQUUsTUFBTSxDQUFDLFdBQVcsSUFBSSxFQUFFO2dCQUNuQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDO2FBQ3pDLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sU0FBUyxDQUFDLE1BQXdCLEVBQUUsV0FBb0M7UUFDOUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxXQUFXLENBQUMsU0FBUyxLQUFLLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFDaEUsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELE9BQU8sV0FBVyxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzdGLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYSxFQUFFLElBQVU7UUFDcEMsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxRQUFRLENBQUMsTUFBYztRQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDOzhHQWxTVSxvQkFBb0I7a0dBQXBCLG9CQUFvQiwrRUMzQ2pDLGdxVEE0TkE7OzJGRGpMYSxvQkFBb0I7a0JBSmhDLFNBQVM7K0JBQ0Usa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQge1xuICBiYXNlSXRlbVByb3BlcnRpZXMsXG4gIENsYXNzLFxuICBDbGFzc0FjdGlvbnMsXG4gIENsYXNzU2VsZWN0b3JzLFxuICBDb2x1bW5EZWZpbml0aW9uLFxuICBDb25maWdTZWxlY3RvcnMsXG4gIENvbnRleHRNZW51QWN0aW9ucyxcbiAgQ29udGV4dE1lbnVTZWxlY3RvcnMsXG4gIERhc2hib2FyZEFjdGlvbnMsXG4gIERhc2hib2FyZFNlbGVjdG9ycyxcbiAgRGF0YVdpZGdldENvbXBvbmVudCxcbiAgRmllbGQsXG4gIEZpZWxkU2VsZWN0b3JzLFxuICBGaWVsZFR5cGUsXG4gIEl0ZW0sXG4gIEl0ZW1VdGlscyxcbiAgT3JkZXJWYWx1ZSxcbiAgUmVzdWx0T3JkZXIsXG4gIFNlYXJjaFNlbGVjdG9ycyxcbiAgVGFibGVXaWRnZXRPcHRpb25zLFxuICBXSURHRVRfSEVBREVSX0hFSUdIVFxufSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IGVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbC9lczYnO1xuaW1wb3J0IHsgYXVkaXRUaW1lLCBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIHRha2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5LCBmaWx0ZXIsIG1hcCwgdGFwLCB3aXRoTGF0ZXN0RnJvbSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uIHtcbiAgdG90YWxQYWdlczogbnVtYmVyO1xuICBwYWdlOiBudW1iZXI7XG4gIHJvd3M6IG51bWJlcjtcbiAgaXRlbXM6IEl0ZW1bXTtcbiAgbG9hZGVkOiBudW1iZXI7XG4gIGxvYWRlZFBhZ2VzOiBudW1iZXI7XG4gIG5vRmlsbGVyc0l0ZW1zOiBudW1iZXI7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS13aWRnZXQtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vd2lkZ2V0LXRhYmxlLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBXaWRnZXRUYWJsZUNvbXBvbmVudCBleHRlbmRzIERhdGFXaWRnZXRDb21wb25lbnQge1xuICBvcHRpb25zJDogT2JzZXJ2YWJsZTxUYWJsZVdpZGdldE9wdGlvbnM+O1xuICBjb2x1bW5zJDogT2JzZXJ2YWJsZTxDb2x1bW5EZWZpbml0aW9uW10+O1xuICBvcHRpb25zQ29weT86IFRhYmxlV2lkZ2V0T3B0aW9ucztcbiAgZmllbGRzJDogT2JzZXJ2YWJsZTxGaWVsZFtdPjtcbiAgc2VsZWN0ZWRJZHMkOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcbiAgQXJyYXkgPSBBcnJheTtcbiAgY3VycmVudENsYXNzZXM6IHN0cmluZ1tdID0gW107XG4gIHNlbGVjdGVkSWRzOiBzdHJpbmdbXSA9IFtdO1xuICBXSURHRVRfSEVBREVSX0hFSUdIVCA9IFdJREdFVF9IRUFERVJfSEVJR0hUO1xuICBwcml2YXRlIGNsYXNzZXMkOiBPYnNlcnZhYmxlPENsYXNzW10+O1xuICBwcm9wZXJ0aWVzJDogT2JzZXJ2YWJsZTx7IGxhYmVsOiBzdHJpbmc7IHByb3BlcnR5OiBzdHJpbmcgfVtdPjtcbiAgaXNMb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgYWxsU2VsZWN0ZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBhcmVBbGxTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBhbGxJZHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnRleHRNZW51Q2xpY2tlZElkOiBzdHJpbmcgPSAnJztcbiAgaXNDb250ZXh0TWVudU9wZW5lZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHF1aWNrT3JkZXIkOiBPYnNlcnZhYmxlPFJlc3VsdE9yZGVyIHwgdW5kZWZpbmVkPjtcbiAgcHJpdmF0ZSBfcmVmcmVzaCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHZvaWQ+KHVuZGVmaW5lZCk7XG4gIGFjdHVhbFBhZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICBwYWdpbmF0aW9uJDogT2JzZXJ2YWJsZTxQYWdpbmF0aW9uPjtcbiAgaXNPcGVuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3Ioc3RvcmU6IFN0b3JlPGFueT4sIGVsOiBFbGVtZW50UmVmLCBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICBzdXBlcihzdG9yZSwgZWwpO1xuXG4gICAgdGhpcy5jbGFzc2VzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KENsYXNzU2VsZWN0b3JzLmNsYXNzZXMpO1xuXG4gICAgdGhpcy5maWVsZHMkID0gY29tYmluZUxhdGVzdChbdGhpcy5yZXN1bHRTZXQkLCB0aGlzLmNsYXNzZXMkLCB0aGlzLnN0b3JlLnNlbGVjdChGaWVsZFNlbGVjdG9ycy5maWVsZHMpXSkucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKFtyZXN1bHRTZXQsIGNsYXNzZXMsIGZpZWxkc10pID0+XG4gICAgICAgICAgW1xuICAgICAgICAgICAgLi4uSXRlbVV0aWxzLmdldEZpZWxkc0Zyb21BdmFpbGFiaWxpdHlJblJlc3VsdFNldChyZXN1bHRTZXQsIGNsYXNzZXMsIGZpZWxkcyksXG4gICAgICAgICAgICAuLi5iYXNlSXRlbVByb3BlcnRpZXMubWFwKChwKSA9PiAoeyBuYW1lOiBwLCBpZDogcCB9IGFzIEZpZWxkKSlcbiAgICAgICAgICBdIGFzIEZpZWxkW11cbiAgICAgICksXG4gICAgICBtYXAoKGZpZWxkcykgPT4gZmllbGRzLmZpbHRlcigoZmllbGQpID0+IGZpZWxkLnR5cGUgIT09IEZpZWxkVHlwZS5SQVcpKVxuICAgICk7XG5cbiAgICB0aGlzLm9wdGlvbnMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLm1hbmlmZXN0JC5waXBlKG1hcCgobWFuaWZlc3QpID0+IG1hbmlmZXN0Lm9wdGlvbnMgYXMgVGFibGVXaWRnZXRPcHRpb25zKSksXG4gICAgICB0aGlzLnJlc3VsdFNldCQsXG4gICAgICB0aGlzLmNsYXNzZXMkLFxuICAgICAgdGhpcy5maWVsZHMkLFxuICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoQ29uZmlnU2VsZWN0b3JzLnRhYmxlRGVmYXVsdEF0dHJpYnV0ZXNEZWZpbml0aW9ucylcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbb3B0aW9ucywgcmVzdWx0U2V0LCBjbGFzc2VzLCBmaWVsZHMsIGRlZnNdKSA9PiB7XG4gICAgICAgIGlmICghb3B0aW9ucy5jb2x1bW5zIHx8IG9wdGlvbnMuY29sdW1ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gSXRlbVV0aWxzLmdldEF0dHJpYnV0ZXNGcm9tUnMocmVzdWx0U2V0LCBjbGFzc2VzLCBmaWVsZHMsIGRlZnMpO1xuICAgICAgICAgIGNvbnN0IHVuaXF1ZVByb3BzID0gWy4uLm5ldyBTZXQoYXR0cmlidXRlcy5tYXAoKGF0dHIpID0+IGF0dHIubmFtZSkpXTtcblxuICAgICAgICAgIG9wdGlvbnMuY29sdW1ucyA9IHVuaXF1ZVByb3BzLm1hcCgocHJvcGVydHkpID0+ICh7XG4gICAgICAgICAgICBwcm9wZXJ0eTogcHJvcGVydHksXG4gICAgICAgICAgICBsYWJlbDogcHJvcGVydHksXG4gICAgICAgICAgICBhdHRyaWJ1dGVJZDogYXR0cmlidXRlcy5maW5kKChhdHRyKSA9PiBhdHRyLm5hbWUgPT09IHByb3BlcnR5KT8uaWRcbiAgICAgICAgICB9KSkgYXMgQ29sdW1uRGVmaW5pdGlvbltdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMub3B0aW9ucyQucGlwZShmaWx0ZXIoKG9wdCkgPT4gISFvcHQpKS5zdWJzY3JpYmUoKG9wdGlvbnMpID0+IHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSA9IHsgLi4uKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3B0aW9ucykpIGFzIFRhYmxlV2lkZ2V0T3B0aW9ucykgfTtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuYWxsSXRlbXMkLnN1YnNjcmliZSgoYWxsT2JqZWN0cykgPT4gKHRoaXMuYWxsSWRzID0gYWxsT2JqZWN0cy5tYXAoKG9iaikgPT4gb2JqLmlkKSkpKTtcblxuICAgIHRoaXMuaXNMb2FkaW5nJCA9IGNvbWJpbmVMYXRlc3QoW3N0b3JlLnNlbGVjdChTZWFyY2hTZWxlY3RvcnMuc2VhcmNoTG9hZGluZyksIHRoaXMuZGF0YXNvdXJjZUlkcyRdKS5waXBlKFxuICAgICAgbWFwKChbc2VhcmNoTG9hZGluZywgZGF0YXNvdXJjZUlkc10pID0+IHtcbiAgICAgICAgcmV0dXJuIChzZWFyY2hMb2FkaW5nID8/IFtdKS5maWx0ZXIoKGlkKSA9PiAoZGF0YXNvdXJjZUlkcyA/PyBbXSkuaW5jbHVkZXMoaWQpKT8ubGVuZ3RoID4gMDtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IEhFQURFUl9TSVpFID0gNjA7XG4gICAgY29uc3QgUEFHSU5BVElPTl9TSVpFID0gMzU7XG4gICAgY29uc3QgTElORV9TSVpFID0gNDU7XG5cbiAgICB0aGlzLnBhZ2luYXRpb24kID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmFsbEl0ZW1zJCxcbiAgICAgIHRoaXMuYWN0dWFsUGFnZSQsXG4gICAgICB0aGlzLndpZGdldFNpemUkLFxuICAgICAgdGhpcy5yZXN1bHRTZXQkLFxuICAgICAgdGhpcy5kaXNwbGF5SGVhZGVyJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtpdGVtcywgYWN0dWFsUGFnZSwgc2l6ZSwgcnMsIGhlYWRlclByZXNlbnRdKSA9PiB7XG4gICAgICAgIGNvbnN0IHJvd3MgPSBNYXRoLm1heChcbiAgICAgICAgICAxLFxuICAgICAgICAgIE1hdGguZmxvb3IoXG4gICAgICAgICAgICAoc2l6ZS5oZWlnaHQgLSBIRUFERVJfU0laRSAtIFBBR0lOQVRJT05fU0laRSAtIChoZWFkZXJQcmVzZW50ID8gV0lER0VUX0hFQURFUl9IRUlHSFQgOiAwKSkgLyBMSU5FX1NJWkVcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHRvdGFsID0gT2JqZWN0LnZhbHVlcyhycy5jb3VudCA/PyB7fSkucmVkdWNlKChwLCBjKSA9PiBjLmNvdW50ICsgcCwgMCk7XG4gICAgICAgIGNvbnN0IGxvYWRlZFBhZ2VzID0gTWF0aC5jZWlsKGl0ZW1zLmxlbmd0aCAvIHJvd3MpO1xuICAgICAgICBjb25zdCBwYWdlID0gYWN0dWFsUGFnZSA8PSBsb2FkZWRQYWdlcyA/IGFjdHVhbFBhZ2UgOiBNYXRoLm1heCgwLCBsb2FkZWRQYWdlcyAtIDEpO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IGl0ZW1zLmZpbHRlcigoXywgaWR4KSA9PiBpZHggPj0gcm93cyAqIHBhZ2UgJiYgaWR4IDwgcm93cyAqIChwYWdlICsgMSkpO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZFdpdGhGaWxsZXJzID1cbiAgICAgICAgICBmaWx0ZXJlZC5sZW5ndGggPT09IHJvd3NcbiAgICAgICAgICAgID8gZmlsdGVyZWRcbiAgICAgICAgICAgIDogZmlsdGVyZWQuY29uY2F0KFxuICAgICAgICAgICAgICAgIG5ldyBBcnJheShyb3dzIC0gZmlsdGVyZWQubGVuZ3RoKS5maWxsKHtcbiAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiB7ICdfX3dpZGdldC10YWJsZS1maWxsZXInOiB0cnVlIH1cbiAgICAgICAgICAgICAgICB9IGFzIHVua25vd24gYXMgSXRlbSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByb3dzLFxuICAgICAgICAgIHBhZ2UsXG4gICAgICAgICAgaXRlbXM6IGZpbHRlcmVkV2l0aEZpbGxlcnMsXG4gICAgICAgICAgbm9GaWxsZXJzSXRlbXM6IGZpbHRlcmVkLmxlbmd0aCxcbiAgICAgICAgICB0b3RhbCxcbiAgICAgICAgICB0b3RhbFBhZ2VzOiBNYXRoLmNlaWwodG90YWwgLyByb3dzKSxcbiAgICAgICAgICBsb2FkZWQ6IGl0ZW1zLmxlbmd0aCxcbiAgICAgICAgICBsb2FkZWRQYWdlc1xuICAgICAgICB9O1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLnBhZ2luYXRpb24kLnBpcGUoYXVkaXRUaW1lKDIwMCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlZnJlc2goKSkpO1xuXG4gICAgdGhpcy5jb2x1bW5zJCA9IHRoaXMub3B0aW9ucyQucGlwZShcbiAgICAgIG1hcCgob3B0aW9ucykgPT4gb3B0aW9ucz8uY29sdW1ucyA/PyBbXSksXG4gICAgICB0YXAoKCkgPT4gc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlZnJlc2goKSwgNTAwKSlcbiAgICApO1xuXG4gICAgdGhpcy5pc0NvbnRleHRNZW51T3BlbmVkJCA9IHRoaXMuc3RvcmUuc2VsZWN0KENvbnRleHRNZW51U2VsZWN0b3JzLm9wZW5lZCk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5yZXN1bHRTZXQkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGZpbHRlcigocnMpID0+ICEhcnMpLFxuICAgICAgICAgIG1hcCgocnMpID0+IE9iamVjdC5rZXlzKHJzLml0ZW1zKSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChjbGFzc2VzKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuY3VycmVudENsYXNzZXMubGVuZ3RoID4gMCAmJiAhZXF1YWwodGhpcy5jdXJyZW50Q2xhc3NlcywgY2xhc3NlcykpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zQ29weSkge1xuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5ID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5vcHRpb25zQ29weS5jb2x1bW5zO1xuICAgICAgICAgICAgdGhpcy5lbWl0TWFuaWZlc3QoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5jdXJyZW50Q2xhc3NlcyA9IGNsYXNzZXM7XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRJZHMkID0gdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLnNlbGVjdGVkSXRlbUlkcyk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuc2VsZWN0ZWRJZHMkLnN1YnNjcmliZSgoc2VsZWN0ZWRJZHMpID0+IHRoaXMuc2VsZWN0ZWRJZHMgPT09IHNlbGVjdGVkSWRzKSk7XG5cbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENsYXNzQWN0aW9ucy5sb2FkKCkpO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzJCA9IHRoaXMucmVzdWx0U2V0JC5waXBlKFxuICAgICAgbWFwKChycykgPT4gWy4uLkl0ZW1VdGlscy5nZXRBdHRyaWJ1dGVzRnJvbUF2YWlsYWJpbGl0eUluUmVzdWx0U2V0KHJzKV0pLFxuICAgICAgbWFwKChwcm9wcykgPT4ge1xuICAgICAgICBjb25zdCBzb3J0ZWRQcm9wcyA9IFsuLi5wcm9wc107XG4gICAgICAgIHNvcnRlZFByb3BzLnNvcnQoKHBBLCBwQikgPT4gcEEudG9Mb2NhbGVMb3dlckNhc2UoKS5sb2NhbGVDb21wYXJlKHBCLnRvTG9jYWxlTG93ZXJDYXNlKCkpKTtcbiAgICAgICAgcmV0dXJuIHNvcnRlZFByb3BzO1xuICAgICAgfSksXG4gICAgICBtYXAoKHByb3BzKSA9PiBwcm9wcy5tYXAoKHByb3ApID0+ICh7IGxhYmVsOiBwcm9wLCBwcm9wZXJ0eTogcHJvcCB9KSkpLFxuICAgICAgdGFwKCgpID0+IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZWZyZXNoKCksIDUwMCkpXG4gICAgKTtcblxuICAgIHRoaXMuYWxsU2VsZWN0ZWQkID0gY29tYmluZUxhdGVzdChbdGhpcy5zZWxlY3RlZElkcyQsIHRoaXMuYWxsSXRlbXMkXSkucGlwZShcbiAgICAgIG1hcCgoW3NlbGVjdGVkSWRzLCBhbGxPYmplY3RzXSkgPT4ge1xuICAgICAgICBjb25zdCBhbGxJZHMgPSBhbGxPYmplY3RzLm1hcCgob2JqZWN0KSA9PiBvYmplY3QuaWQpO1xuICAgICAgICByZXR1cm4gIWFsbElkcy5maW5kKChpZCkgPT4gIXNlbGVjdGVkSWRzLmluY2x1ZGVzKGlkKSk7XG4gICAgICB9KSxcbiAgICAgIHRhcCgoYWxsU2VsZWN0ZWQpID0+ICh0aGlzLmFyZUFsbFNlbGVjdGVkID0gYWxsU2VsZWN0ZWQpKVxuICAgICk7XG5cbiAgICB0aGlzLnF1aWNrT3JkZXIkID0gY29tYmluZUxhdGVzdChbdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLnF1aWNrT3JkZXIpLCB0aGlzLmRhdGFzb3VyY2VJZHMkXSkucGlwZShcbiAgICAgIG1hcCgoW29yZGVyLCBucXNdKSA9PiAobnFzLmxlbmd0aCA9PT0gMSA/IG9yZGVyW25xc1swXV0gOiB1bmRlZmluZWQpKVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuX3JlZnJlc2gkLnBpcGUoZGVsYXkoMTAwKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSkpO1xuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLl9yZWZyZXNoJC5uZXh0KCk7XG4gICAgdGhpcy5pc09wZW4gPSAhdGhpcy5pc09wZW47XG4gIH1cblxuICBlbWl0TWFuaWZlc3QoKSB7XG4gICAgdGhpcy5tYW5pZmVzdE1vZGlmaWVkLmVtaXQoe1xuICAgICAgd2lkZ2V0SW5kZXg6IHRoaXMud2lkZ2V0SW5kZXgsXG4gICAgICBtYW5pZmVzdDogeyAuLi50aGlzLm1hbmlmZXN0LCBvcHRpb25zOiB0aGlzLm9wdGlvbnNDb3B5IH1cbiAgICB9KTtcbiAgfVxuXG4gIGFkZENvbHVtbigpIHtcbiAgICBpZiAoIXRoaXMub3B0aW9uc0NvcHk/LmNvbHVtbnMpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkgPSB7IGNvbHVtbnM6IFtdIH07XG4gICAgfVxuICAgIHRoaXMub3B0aW9uc0NvcHkuY29sdW1ucz8ucHVzaCh7IGxhYmVsOiAnJywgcHJvcGVydHk6ICcnIH0pO1xuICAgIHRoaXMucmVmcmVzaCgpO1xuICB9XG5cbiAgY2hhbmdlUHJvcGVydHlOYW1lKCRldmVudDogYW55LCBjb2x1bW5EZWY6IENvbHVtbkRlZmluaXRpb24pIHtcbiAgICBjb2x1bW5EZWYucHJvcGVydHkgPSAkZXZlbnQ7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG4gIH1cblxuICBjaGFuZ2VMYWJlbCgkZXZlbnQ6IEV2ZW50LCBjb2x1bW5EZWY6IENvbHVtbkRlZmluaXRpb24pIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgbmV3TGFiZWwgPSAkZXZlbnQuY3VycmVudFRhcmdldC52YWx1ZTtcbiAgICBpZiAoY29sdW1uRGVmLmxhYmVsICE9PSBuZXdMYWJlbCkge1xuICAgICAgY29sdW1uRGVmLmxhYmVsID0gbmV3TGFiZWw7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICBkZWxldGVDb2x1bW4oaTogbnVtYmVyKSB7XG4gICAgdGhpcy5vcHRpb25zQ29weT8uY29sdW1ucz8uc3BsaWNlKGksIDEpO1xuICAgIHRoaXMucmVmcmVzaCgpO1xuICB9XG5cbiAgc2VsZWN0aW9uKCRldmVudDogTW91c2VFdmVudCwgaXRlbTogSXRlbSkge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5zZWxlY3QoeyBpZDogaXRlbS5pZCwgY3VtdWxhdGl2ZTogISRldmVudC5zaGlmdEtleSB9KSk7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgY29udGV4dE1lbnUoJGV2ZW50OiBNb3VzZUV2ZW50LCBpdGVtOiBJdGVtKSB7XG4gICAgaWYgKHRoaXMubWFuaWZlc3QuY29udGV4dE1lbnUgIT09IGZhbHNlKSB7XG4gICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgIENvbnRleHRNZW51QWN0aW9ucy5vcGVuKHtcbiAgICAgICAgICBpdGVtSWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgY2xpZW50WDogJGV2ZW50LmNsaWVudFgsXG4gICAgICAgICAgY2xpZW50WTogJGV2ZW50LmNsaWVudFksXG4gICAgICAgICAgcmVzdWx0U2V0OiBBcnJheS5pc0FycmF5KHRoaXMubWFuaWZlc3QuZGF0YXNvdXJjZSkgPyB0aGlzLm1hbmlmZXN0LmRhdGFzb3VyY2VbMF0gOiB0aGlzLm1hbmlmZXN0LmRhdGFzb3VyY2UsXG4gICAgICAgICAgZnJvbTogJ3RhYmxlJyxcbiAgICAgICAgICBhbGxvd09iamVjdENyZWF0aW9uOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHRoaXMuY29udGV4dE1lbnVDbGlja2VkSWQgPSBpdGVtLmlkO1xuICAgIH1cbiAgfVxuXG4gIGludmVydExheWVycyhpZHg6IG51bWJlciwgaWR4V2l0aDogbnVtYmVyKSB7XG4gICAgaWYgKCEhdGhpcy5vcHRpb25zQ29weSAmJiAhIXRoaXMub3B0aW9uc0NvcHkuY29sdW1ucykge1xuICAgICAgY29uc3QgdG1wID0gdGhpcy5vcHRpb25zQ29weS5jb2x1bW5zW2lkeFdpdGhdO1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5jb2x1bW5zW2lkeFdpdGhdID0gdGhpcy5vcHRpb25zQ29weS5jb2x1bW5zW2lkeF07XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmNvbHVtbnNbaWR4XSA9IHRtcDtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdEFsbCgkZXZlbnQ6IGFueSkge1xuICAgIGlmICgkZXZlbnQpIHtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5zZWxlY3RNYW55KHsgaWRzOiB0aGlzLmFsbElkcyB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5zZWxlY3RNYW55KHsgaWRzOiBbXSB9KSk7XG4gICAgfVxuICB9XG5cbiAgc2V0T3JkZXIoY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uKSB7XG4gICAgdGhpcy5kYXRhc291cmNlSWRzJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIGZpbHRlcigobnFzKSA9PiBucXMubGVuZ3RoID09PSAxKSxcbiAgICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5xdWlja09yZGVyJClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKFtucXMsIGFjdHVhbE9yZGVyXSkgPT4ge1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgIERhc2hib2FyZEFjdGlvbnMucXVpY2tPcmRlcih7XG4gICAgICAgICAgICBkYXRhc291cmNlSWQ6IG5xc1swXSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZTogY29sdW1uLmF0dHJpYnV0ZUlkID8/ICcnLFxuICAgICAgICAgICAgYXNjOiB0aGlzLm5leHRPcmRlcihjb2x1bW4sIGFjdHVhbE9yZGVyKVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbmV4dE9yZGVyKGNvbHVtbjogQ29sdW1uRGVmaW5pdGlvbiwgYWN0dWFsT3JkZXI6IFJlc3VsdE9yZGVyIHwgdW5kZWZpbmVkKTogT3JkZXJWYWx1ZSB7XG4gICAgaWYgKCFhY3R1YWxPcmRlciB8fCBhY3R1YWxPcmRlci5hdHRyaWJ1dGUgIT09IGNvbHVtbi5hdHRyaWJ1dGVJZCkge1xuICAgICAgcmV0dXJuICdhc2MnO1xuICAgIH1cbiAgICByZXR1cm4gYWN0dWFsT3JkZXIuYXNjID09PSAnYXNjJyA/ICdkZXNjJyA6IGFjdHVhbE9yZGVyLmFzYyA9PT0gJ2Rlc2MnID8gdW5kZWZpbmVkIDogJ2FzYyc7XG4gIH1cblxuICB0cmFja09iamVjdHMoaW5kZXg6IG51bWJlciwgaXRlbTogSXRlbSkge1xuICAgIHJldHVybiBpdGVtLmlkO1xuICB9XG5cbiAgZ29Ub1BhZ2UobnVtYmVyOiBudW1iZXIpIHtcbiAgICB0aGlzLmFjdHVhbFBhZ2UkLm5leHQobnVtYmVyKTtcbiAgfVxufVxuIiwiPHByeS13aWRnZXQtdGFibGUtY3NzPjwvcHJ5LXdpZGdldC10YWJsZS1jc3M+XG48ZGl2IGNsYXNzPVwiby13aWRnZXQgby13aWRnZXQtLXRhYmxlXCI+XG4gIDxwcnktd2lkZ2V0LWhlYWRlclxuICAgIFtkYXRhc291cmNlSWRzXT1cIihkYXRhc291cmNlSWRzJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgKm5nSWY9XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCJcbiAgICBbd2lkZ2V0SW5kZXhdPVwid2lkZ2V0SW5kZXhcIlxuICAgIFttYW5pZmVzdF09XCJtYW5pZmVzdFwiXG4gICAgKG1hbmlmZXN0TW9kaWZpZWQpPVwibWFuaWZlc3RNb2RpZmllZC5lbWl0KCRldmVudClcIlxuICAgICNoZWFkZXJcbiAgICBbaGVhZGVyT3B0aW9uc109XCIoZGlzcGxheUhlYWRlciQgfCBhc3luYykgPz8ge31cIlxuICAgIChjbGljayk9XCJyZWZyZXNoKClcIlxuICA+XG4gICAgPHByeS1zZXR0aW5nc1xuICAgICAgKGNsaWNrKT1cInJlZnJlc2goKVwiXG4gICAgICAoc2F2ZVRyaWdnZXJlZCk9XCJlbWl0TWFuaWZlc3QoKVwiXG4gICAgICAoY2hhbmdlVGl0bGUpPVwiY2hhbmdlV2lkZ2V0VGl0bGUoJGV2ZW50KVwiXG4gICAgICBbaGVhZGVyUHJlc2VudF09XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCJcbiAgICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgICBbaGVhZGVyXT1cImhlYWRlclwiXG4gICAgICBbb3BlbiRdPVwib3BlbiRcIlxuICAgICAgKHRyaWdnZXJDbGljayk9XCJ0aGlzLnJlZnJlc2goKVwiXG4gICAgICBjbGFzcz1cIm8tc2V0dGluZ3NcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fYWN0aW9uc1wiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLXRleHQgLWxpbmstbGlrZVwiIChjbGljayk9XCJhZGRDb2x1bW4oKVwiPlxuICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwicG9zdF9hZGRcIj48L3ByeS1pY29uPlxuICAgICAgICAgIHt7ICdAcHJ5LndpZGdldC50YWJsZS5hZGRDb2x1bW4nIHwgaTE4biB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW5EZWYgb2Ygb3B0aW9uc0NvcHk/LmNvbHVtbnMgPz8gW107IGxldCBpID0gaW5kZXhcIlxuICAgICAgICBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHNcIlxuICAgICAgICAoY2xpY2spPVwicmVmcmVzaCgpXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHNfX2hlYWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1idG4tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seVwiIChjbGljayk9XCJpbnZlcnRMYXllcnMoaSwgaSAtIDEpXCIgKm5nSWY9XCJpID4gMFwiPlxuICAgICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImZsZWNoZV9oYXV0XCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LmFjdGlvbi5tb3ZlVXAnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0taWNvbi1vbmx5XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImludmVydExheWVycyhpLCBpICsgMSlcIlxuICAgICAgICAgICAgICAqbmdJZj1cImkgPCAob3B0aW9uc0NvcHk/LmNvbHVtbnM/Lmxlbmd0aCA/PyAwKSAtIDFcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImZsZWNoZV9iYXNcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0BwcnkuYWN0aW9uLm1vdmVEb3duJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHNfX2NvbnRlbnRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwidGFibGVfcHJvcGVydHlcIj57eyAnQHByeS53aWRnZXQudGFibGUucHJvcGVydHknIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAoY2xpY2spPVwicmVmcmVzaCgpXCJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlUHJvcGVydHlOYW1lKCRldmVudCwgY29sdW1uRGVmKVwiXG4gICAgICAgICAgICAgIFtpdGVtc0FzT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICBbaXRlbXNdPVwicHJvcGVydGllcyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cImNvbHVtbkRlZi5wcm9wZXJ0eVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5uZy1zZWxlY3Qtb3BlbmVkXT1cImlzT3BlblwiXG4gICAgICAgICAgICAgIGJpbmRMYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgICAgYmluZFZhbHVlPVwicHJvcGVydHlcIlxuICAgICAgICAgICAgICBpZD1cInRhYmxlX3Byb3BlcnR5XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RcIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJ0YWJsZV9sYWJlbFwiPnt7ICdAcHJ5LndpZGdldC50YWJsZS5sYWJlbCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBpZD1cInRhYmxlX2xhYmVsXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIChpbnB1dCk9XCJjaGFuZ2VMYWJlbCgkZXZlbnQsIGNvbHVtbkRlZilcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwiY29sdW1uRGVmLmxhYmVsXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUNvbHVtbihpKVwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cImRlbGV0ZVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0taWNvbi10ZXh0IC1saW5rLWxpa2VcIlxuICAgICAgICAgIGRhdGEtZnVuYz1cImRlbGV0ZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImRlbGV0ZVwiIFt3aWR0aF09XCIxOVwiIFtoZWlnaHRdPVwiMTlcIj48L3ByeS1pY29uPlxuICAgICAgICAgIDxzcGFuPnt7ICdAcHJ5LndpZGdldC50YWJsZS5kZWxldGVDb2x1bW4nIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L3ByeS1zZXR0aW5ncz5cbiAgPC9wcnktd2lkZ2V0LWhlYWRlcj5cblxuICA8ZGl2IGNsYXNzPVwiYS10YWJsZS13cmFwcGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImEtdGFibGUtbG9hZGluZ1wiICpuZ0lmPVwiaXNMb2FkaW5nJCB8IGFzeW5jOyBlbHNlIG5vTG9hZGluZ1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJhLXRhYmxlLWxvYWRpbmdfX2xvYWRlclwiPjwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8bmctdGVtcGxhdGUgI25vTG9hZGluZz5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYWdpbmF0aW9uJCB8IGFzeW5jIGFzIHBhZ2luYXRpb25cIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhZ2luYXRpb24/Lml0ZW1zID8/IFtdIGFzIGFsbE9iamVjdHNcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cIm5vLXJlc3VsdFwiXG4gICAgICAgICAgICAqbmdJZj1cInBhZ2luYXRpb24ubm9GaWxsZXJzSXRlbXMgPT09IDBcIlxuICAgICAgICAgICAgW3N0eWxlLmhlaWdodC4lXT1cInBhZ2luYXRpb24udG90YWxQYWdlcyA+IDAgPyA4MCA6IDEwMFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICBjbGFzcz1cIm5vLXJlc3VsdF9fc2VhcmNoXCJcbiAgICAgICAgICAgICAgc3JjPVwiLi4vLi4vLi4vYXNzZXRzL3N2Z3MvcHJ5X3JlY2hlcmNoZV9wYXNfZGVfcmVzdWx0YXQuc3ZnXCJcbiAgICAgICAgICAgICAgYWx0PVwie3sgJ0Bwcnkud2lkZ2V0LnRhYmxlLmVtcHR5JyB8IGkxOG4gfX1cIlxuICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibm8tcmVzdWx0X190ZXh0XCI+e3sgJ0Bwcnkud2lkZ2V0LnRhYmxlLmVtcHR5JyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFnaW5hdGlvbi5ub0ZpbGxlcnNJdGVtcyA+IDBcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoc2VsZWN0ZWRJZHMkIHwgYXN5bmMpID8/IFtdIGFzIHNlbGVjdGVkSWRzXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoY29sdW1ucyQgfCBhc3luYykgPz8gW10gYXMgY29sdW1uc1wiPlxuICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImEtdGFibGVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidAcHJ5LndpZGdldC50YWJsZS5kZXNjcmlwdGlvbicgfCBpMThuXCI+XG4gICAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJhbGxPYmplY3RzPy5sZW5ndGggPz8gMCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwcnktY2hlY2tib3ggW25nTW9kZWxdPVwiYXJlQWxsU2VsZWN0ZWRcIiAobmdNb2RlbENoYW5nZSk9XCJzZWxlY3RBbGwoJGV2ZW50KVwiPjwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgbGV0IGkgPSBpbmRleFwiIHJlc2l6YWJsZSAoY2xpY2spPVwic2V0T3JkZXIoY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY29sdW1uLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1aWNrT3JkZXIkIHwgYXN5bmMgYXMgcXVpY2tPcmRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicXVpY2tPcmRlci5hdHRyaWJ1dGUgPT09IGNvbHVtbi5hdHRyaWJ1dGVJZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcnktaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25TdmddPVwicXVpY2tPcmRlci5hc2MgPyAnY2hldnJvbl90b3AnIDogJ2NoZXZyb25fYm90dG9tJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjEyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt3aWR0aF09XCIxMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvcHJ5LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFsbE9iamVjdHNcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1zZWxlY3RlZF09XCJzZWxlY3RlZElkcy5pbmNsdWRlcyhpdGVtLmlkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmNvbnRleHQtbWVudS1zZWxlY3RlZF09XCJjb250ZXh0TWVudUNsaWNrZWRJZCA9PT0gaXRlbS5pZCAmJiAoaXNDb250ZXh0TWVudU9wZW5lZCQgfCBhc3luYylcIlxuICAgICAgICAgICAgICAgICAgICAgIChjb250ZXh0bWVudSk9XCJjb250ZXh0TWVudSgkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICBkZXRhY2hSb3dcbiAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRWYWx1ZSk9XCJzZWxlY3Rpb24oJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZpbGxlcl09XCJpdGVtLm1ldGFkYXRhIVsnX193aWRnZXQtdGFibGUtZmlsbGVyJ11cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY2hlY2tib3gtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHByeS1jaGVja2JveCBbbmdNb2RlbF09XCJzZWxlY3RlZElkcy5pbmNsdWRlcyhpdGVtLmlkKVwiPjwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uc1wiIGNsYXNzPVwidS1lbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5wcm9wZXJ0eSA9PT0gJ21ldGFkYXRhJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJ5LW1ldGFkYXRhIFtpdGVtXT1cIml0ZW1cIj48L3ByeS1tZXRhZGF0YT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5wcm9wZXJ0eSA9PT0gJ29DbGFzcydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjb250ZW50LWltZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiMjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3dpZHRoXT1cIjI1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiaXRlbSB8IHRyYW5zbGF0ZUl0ZW1Ub1N5bWJvbCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthbHRdPVwiaXRlbS5vQ2xhc3MgfCB0cmFuc2xhdGVJZCA6IHsgdHlwZTogJ2NsYXNzJywgb3V0cHV0OiAnbmFtZScgfSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhWydtZXRhZGF0YScsICdvQ2xhc3MnXS5pbmNsdWRlcyhjb2x1bW4ucHJvcGVydHkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwcnktZXhwYW5kLXZhbHVlIFt2YWx1ZV09XCJpdGVtIHwgZ2V0VmFsdWUgOiBjb2x1bW4ucHJvcGVydHkgfCBhc3luY1wiPjwvcHJ5LWV4cGFuZC12YWx1ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYS10YWJsZS1wYWdpbmF0aW9uXCIgKm5nSWY9XCJwYWdpbmF0aW9uLnRvdGFsUGFnZXMgPiAwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYS10YWJsZS1wYWdpbmF0aW9uX19zcGFjaW5nXCI+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZ29Ub1BhZ2UoMClcIiBbZGlzYWJsZWRdPVwicGFnaW5hdGlvbi5wYWdlIDw9IDBcIj5cbiAgICAgICAgICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwic2tpcC1sZWZ0LWZpbGxcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJnb1RvUGFnZShwYWdpbmF0aW9uLnBhZ2UgLSAxKVwiIFtkaXNhYmxlZF09XCJwYWdpbmF0aW9uLnBhZ2UgPD0gMFwiPlxuICAgICAgICAgICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJhcnJvdy1sZWZ0LXMtZmlsbFwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYS10YWJsZS1wYWdpbmF0aW9uX19zcGFjaW5nX19sYWJlbFwiPlxuICAgICAgICAgICAgICAgIDxwPnt7IHBhZ2luYXRpb24ucGFnZSArIDEgfX0gLyB7eyBwYWdpbmF0aW9uLmxvYWRlZFBhZ2VzIH19PC9wPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ29Ub1BhZ2UocGFnaW5hdGlvbi5wYWdlICsgMSlcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInBhZ2luYXRpb24ucGFnZSArIDEgPj0gcGFnaW5hdGlvbi5sb2FkZWRQYWdlc1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJhcnJvdy1yaWdodC1zLWZpbGxcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ29Ub1BhZ2UocGFnaW5hdGlvbi5sb2FkZWRQYWdlcyAtIDEpXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwYWdpbmF0aW9uLnBhZ2UgKyAxID49IHBhZ2luYXRpb24ubG9hZGVkUGFnZXNcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwic2tpcC1yaWdodC1maWxsXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhLXRhYmxlLXBhZ2luYXRpb25fX3NwYWNpbmdfX2xhYmVsXCI+XG4gICAgICAgICAgICAgICAgKHt7XG4gICAgICAgICAgICAgICAgICAnQHByeS53aWRnZXQudGFibGUucmVtYWluaW5nJyB8IGkxOG4gOiB7IHJlbWFpbmluZzogcGFnaW5hdGlvbi50b3RhbFBhZ2VzIC0gcGFnaW5hdGlvbi5sb2FkZWRQYWdlcyB9XG4gICAgICAgICAgICAgICAgfX0pXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -106,7 +106,7 @@ export class WidgetTileComponent extends DataWidgetComponent {
106
106
  return Object.keys(value?.metadata ?? {}).length > 0;
107
107
  }
108
108
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: WidgetTileComponent, deps: [{ token: i1.Store }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
109
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: WidgetTileComponent, selector: "pry-widget-tile", usesInheritance: true, ngImport: i0, template: "<pry-widget-tile-css></pry-widget-tile-css>\n<div class=\"o-widget o-widget--tile\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n #header\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"tile_classes\">{{ '@pry.widget.tile.classes' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeClasses($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"classes$ | async\"\n [multiple]=\"true\"\n [closeOnSelect]=\"false\"\n [ngModel]=\"optionsCopy.classes\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"tile_classes\"\n ></pry-select>\n </div>\n </pry-settings>\n </pry-widget-header>\n <div class=\"o-widget--tile-wrapper\" [style.top]=\"(displayHeader$ | async) ? WIDGET_HEADER_HEIGHT + 'px' : 0\">\n <div class=\"no-result\" *ngIf=\"(items$ | async)?.length === 0\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.tile.empty' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.tile.empty' | i18n }}</span>\n </div>\n <ul class=\"o-widget--tile__list\">\n <li\n class=\"o-widget--tile__list__item\"\n *ngFor=\"let item of items$ | async; let index = index\"\n (contextmenu)=\"contextMenu($event, item)\"\n >\n <div class=\"o-widget--tile__list__item__header\">\n <img\n [height]=\"25\"\n [width]=\"25\"\n [src]=\"item | translateItemToSymbol | async\"\n [alt]=\"item.oClass | translateId : { type: 'class', output: 'name' } | async\"\n />\n <h3 class=\"o-widget--tile__list__item__header__title\">\n {{\n item.oClass\n | translateId\n : {\n type: 'class',\n output: 'name'\n }\n | async\n }}\n </h3>\n <pry-checkbox\n [ngModel]=\"(selectedIds$ | async).includes(item.id)\"\n (click)=\"select($event, item)\"\n ></pry-checkbox>\n </div>\n <div class=\"o-properties\">\n <ul class=\"o-properties__list\">\n <ng-container *ngFor=\"let property of (propertiesToDisplay$ | async)![item.oClass]\">\n <li\n *ngFor=\"let value of getValue(item, property); let i = index; let c = count\"\n class=\"o-properties__list__item\"\n >\n <p class=\"o-properties__list__item__label\" *ngIf=\"i === 0\">{{ property }}:</p>\n <p class=\"o-properties__list__item__value\" *ngIf=\"!isRaw(property, item.oClass)\">{{ value?.value }}</p>\n <p class=\"o-properties__list__item__raw\" *ngIf=\"isRaw(property, item.oClass)\">\n <pry-vizualize-raw [item]=\"item\" [propertyName]=\"property\"></pry-vizualize-raw>\n </p>\n <ng-container *ngIf=\"hasMetadata(value)\">\n <pry-metadata [item]=\"value\"></pry-metadata>\n </ng-container>\n </li>\n </ng-container>\n </ul>\n </div>\n <div (click)=\"toggleMap(index)\" class=\"o-widget--tile__list__item__footer\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-text -link-like\"\n aria-controls=\"tile-map-xxx\"\n aria-expanded=\"false\"\n >\n {{ '@pry.widget.tile.map' | i18n }}\n </button>\n </div>\n <div class=\"o-widget--tile__list__item__map\" *ngIf=\"maps[index]\" id=\"tile-map-xxx\">\n <pry-widget-map [staticManifest]=\"mapManifest\" [staticResultSet]=\"resultSetWithItem(item)\"></pry-widget-map>\n </div>\n </li>\n </ul>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.SettingsComponent, selector: "pry-settings", inputs: ["widgetIndex", "isDisable", "headerPresent", "open$", "header"], outputs: ["saveTriggered", "changeTitle"] }, { kind: "component", type: i4.MetadataComponent, selector: "pry-metadata", inputs: ["item"] }, { kind: "component", type: i4.PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: ["manifest", "openData$", "additionalOptions", "headerOptions", "displayCount", "datasourceIds", "widgetIndex"], outputs: ["manifestModified"] }, { kind: "component", type: i4.VizualizeRawComponent, selector: "pry-vizualize-raw", inputs: ["item", "propertyName", "alt"] }, { kind: "component", type: i4.PrySelectComponent, selector: "pry-select", inputs: ["labelTranslate", "baseTranslate", "translationFn", "translationFnArgs", "clearable", "multiple", "multipleClearRight", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "items", "itemsAsOption", "bindData", "bindValue", "bindLabel", "bindIcon", "iconSize", "templateLabel", "templateOption", "autocomplete"] }, { kind: "component", type: i5.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "component", type: i6.WidgetMapComponent, selector: "pry-widget-map" }, { kind: "component", type: i7.PryWidgetTileCssComponent, selector: "pry-widget-tile-css" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslateIdPipe, name: "translateId" }, { kind: "pipe", type: i4.TranslateItemToSymbolPipe, name: "translateItemToSymbol" }, { kind: "pipe", type: i4.I18nPipe, name: "i18n" }] }); }
109
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: WidgetTileComponent, selector: "pry-widget-tile", usesInheritance: true, ngImport: i0, template: "<pry-widget-tile-css></pry-widget-tile-css>\n<div class=\"o-widget o-widget--tile\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n #header\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"tile_classes\">{{ '@pry.widget.tile.classes' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeClasses($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"classes$ | async\"\n [multiple]=\"true\"\n [closeOnSelect]=\"false\"\n [ngModel]=\"optionsCopy.classes\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"tile_classes\"\n ></pry-select>\n </div>\n </pry-settings>\n </pry-widget-header>\n <div class=\"o-widget--tile-wrapper\" [style.top]=\"(displayHeader$ | async) ? WIDGET_HEADER_HEIGHT + 'px' : 0\">\n <div class=\"no-result\" *ngIf=\"(items$ | async)?.length === 0\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.tile.empty' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.tile.empty' | i18n }}</span>\n </div>\n <ul class=\"o-widget--tile__list\">\n <li\n class=\"o-widget--tile__list__item\"\n *ngFor=\"let item of items$ | async; let index = index\"\n (contextmenu)=\"contextMenu($event, item)\"\n >\n <div class=\"o-widget--tile__list__item__header\">\n <img\n [height]=\"25\"\n [width]=\"25\"\n [src]=\"item | translateItemToSymbol | async\"\n [alt]=\"item.oClass | translateId : { type: 'class', output: 'name' } | async\"\n />\n <h3 class=\"o-widget--tile__list__item__header__title\">\n {{\n item.oClass\n | translateId\n : {\n type: 'class',\n output: 'name'\n }\n | async\n }}\n </h3>\n <pry-checkbox\n [ngModel]=\"(selectedIds$ | async).includes(item.id)\"\n (click)=\"select($event, item)\"\n ></pry-checkbox>\n </div>\n <div class=\"o-properties\">\n <ul class=\"o-properties__list\">\n <ng-container *ngFor=\"let property of (propertiesToDisplay$ | async)![item.oClass]\">\n <li\n *ngFor=\"let value of getValue(item, property); let i = index; let c = count\"\n class=\"o-properties__list__item\"\n >\n <p class=\"o-properties__list__item__label\" *ngIf=\"i === 0\">{{ property }}:</p>\n <p class=\"o-properties__list__item__value\" *ngIf=\"!isRaw(property, item.oClass)\">{{ value?.value }}</p>\n <p class=\"o-properties__list__item__raw\" *ngIf=\"isRaw(property, item.oClass)\">\n <pry-vizualize-raw [item]=\"item\" [propertyName]=\"property\"></pry-vizualize-raw>\n </p>\n <ng-container *ngIf=\"hasMetadata(value)\">\n <pry-metadata [item]=\"value\"></pry-metadata>\n </ng-container>\n </li>\n </ng-container>\n </ul>\n </div>\n <div (click)=\"toggleMap(index)\" class=\"o-widget--tile__list__item__footer\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-text -link-like\"\n aria-controls=\"tile-map-xxx\"\n aria-expanded=\"false\"\n >\n {{ '@pry.widget.tile.map' | i18n }}\n </button>\n </div>\n <div class=\"o-widget--tile__list__item__map\" *ngIf=\"maps[index]\" id=\"tile-map-xxx\">\n <pry-widget-map [staticManifest]=\"mapManifest\" [staticResultSet]=\"resultSetWithItem(item)\"></pry-widget-map>\n </div>\n </li>\n </ul>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.SettingsComponent, selector: "pry-settings", inputs: ["widgetIndex", "isDisable", "headerPresent", "open$", "header"], outputs: ["triggerClick", "saveTriggered", "changeTitle"] }, { kind: "component", type: i4.MetadataComponent, selector: "pry-metadata", inputs: ["item"] }, { kind: "component", type: i4.PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: ["manifest", "openData$", "additionalOptions", "headerOptions", "displayCount", "datasourceIds", "widgetIndex"], outputs: ["manifestModified"] }, { kind: "component", type: i4.VizualizeRawComponent, selector: "pry-vizualize-raw", inputs: ["item", "propertyName", "alt"] }, { kind: "component", type: i4.PrySelectComponent, selector: "pry-select", inputs: ["labelTranslate", "baseTranslate", "translationFn", "translationFnArgs", "clearable", "multiple", "multipleClearRight", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "items", "itemsAsOption", "bindData", "bindValue", "bindLabel", "bindIcon", "iconSize", "templateLabel", "templateOption", "autocomplete"] }, { kind: "component", type: i5.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "component", type: i6.WidgetMapComponent, selector: "pry-widget-map" }, { kind: "component", type: i7.PryWidgetTileCssComponent, selector: "pry-widget-tile-css" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslateIdPipe, name: "translateId" }, { kind: "pipe", type: i4.TranslateItemToSymbolPipe, name: "translateItemToSymbol" }, { kind: "pipe", type: i4.I18nPipe, name: "i18n" }] }); }
110
110
  }
111
111
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: WidgetTileComponent, decorators: [{
112
112
  type: Component,