@elderbyte/ngx-starter 13.4.1 → 13.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (238) hide show
  1. package/esm2020/lib/common/enums/elder-enum-translation.service.mjs +3 -3
  2. package/esm2020/lib/common/forms/form-field-base.component.mjs +3 -3
  3. package/esm2020/lib/common/forms/multi-model-base.component.mjs +3 -3
  4. package/esm2020/lib/common/forms/template-composite-control.mjs +3 -3
  5. package/esm2020/lib/common/forms/value-accessor-base.mjs +3 -3
  6. package/esm2020/lib/common/http/http-client-builder.service.mjs +3 -3
  7. package/esm2020/lib/common/http/http-client-pristine.mjs +3 -3
  8. package/esm2020/lib/common/http/transfer/data-transfer-factory.mjs +3 -3
  9. package/esm2020/lib/common/time/interval.mjs +10 -10
  10. package/esm2020/lib/common/time/time-util.mjs +9 -6
  11. package/esm2020/lib/common/url/elder-url-fragment-params.service.mjs +3 -3
  12. package/esm2020/lib/components/access-denied/elder-access-denied.component.mjs +3 -3
  13. package/esm2020/lib/components/access-denied/elder-access-denied.module.mjs +4 -4
  14. package/esm2020/lib/components/auditing/audited-entity/elder-audited-entity.component.mjs +3 -3
  15. package/esm2020/lib/components/auditing/elder-audit.module.mjs +4 -4
  16. package/esm2020/lib/components/button-group/elder-button-group/elder-button-group.component.mjs +3 -3
  17. package/esm2020/lib/components/button-group/elder-button-group.module.mjs +4 -4
  18. package/esm2020/lib/components/card-organizer/card-organizer/elder-card-organizer.component.mjs +3 -3
  19. package/esm2020/lib/components/card-organizer/card-organizer/elder-stack-card.directive.mjs +3 -3
  20. package/esm2020/lib/components/card-organizer/card-stack/elder-card-stack.component.mjs +4 -4
  21. package/esm2020/lib/components/card-organizer/elder-card-organizer.module.mjs +4 -4
  22. package/esm2020/lib/components/cards/elder-card/elder-card-header/elder-card-header.component.mjs +3 -3
  23. package/esm2020/lib/components/cards/elder-card/elder-card.component.mjs +18 -18
  24. package/esm2020/lib/components/cards/elder-card/elder-card.module.mjs +4 -4
  25. package/esm2020/lib/components/connectivity/elder-connectivity.module.mjs +4 -4
  26. package/esm2020/lib/components/connectivity/elder-connectivity.service.mjs +3 -3
  27. package/esm2020/lib/components/connectivity/offline-indicator/elder-offline-indicator.component.mjs +3 -3
  28. package/esm2020/lib/components/containers/elder-containers.module.mjs +4 -4
  29. package/esm2020/lib/components/containers/elder-scroll-container/elder-scroll-container.component.mjs +3 -3
  30. package/esm2020/lib/components/csv/elder-csv-export-btn/elder-csv-export-btn.component.mjs +3 -3
  31. package/esm2020/lib/components/csv/elder-csv-stream-exporter-builder.service.mjs +3 -3
  32. package/esm2020/lib/components/csv/elder-csv.module.mjs +4 -4
  33. package/esm2020/lib/components/currency/elder-currency.module.mjs +4 -4
  34. package/esm2020/lib/components/currency/elder-currency.pipe.mjs +3 -3
  35. package/esm2020/lib/components/data-transfer/elder-data-transfer.module.mjs +4 -4
  36. package/esm2020/lib/components/data-transfer/elder-data-transfer.service.mjs +3 -3
  37. package/esm2020/lib/components/data-transfer/http-data-transfer/http-data-transfer.component.mjs +3 -3
  38. package/esm2020/lib/components/data-transfer/http-data-transfer-aggregate/http-data-transfer-aggregate.component.mjs +3 -3
  39. package/esm2020/lib/components/data-transfer/http-data-transfer-indicator/http-data-transfer-indicator.component.mjs +4 -4
  40. package/esm2020/lib/components/data-transfer/http-data-transfer-overview/http-data-transfer-overview.component.mjs +3 -3
  41. package/esm2020/lib/components/data-view/base/elder-data-view-base.mjs +3 -3
  42. package/esm2020/lib/components/data-view/base/elder-data-view-base.module.mjs +4 -4
  43. package/esm2020/lib/components/data-view/common/data-context-state-indicator/data-context-state-indicator.component.mjs +3 -3
  44. package/esm2020/lib/components/data-view/common/elder-data-common.module.mjs +4 -4
  45. package/esm2020/lib/components/data-view/common/elder-data-toolbar/elder-data-toolbar.component.mjs +6 -6
  46. package/esm2020/lib/components/data-view/common/elder-single-sort/elder-single-sort.component.mjs +3 -3
  47. package/esm2020/lib/components/data-view/common/selection/data-context-selection.directive.mjs +3 -3
  48. package/esm2020/lib/components/data-view/common/selection/elder-selection-master-checkbox/elder-selection-master-checkbox.component.mjs +3 -3
  49. package/esm2020/lib/components/data-view/grid/elder-grid/elder-grid.component.mjs +11 -11
  50. package/esm2020/lib/components/data-view/grid/elder-grid.module.mjs +4 -4
  51. package/esm2020/lib/components/data-view/simple/elder-simple-selection-view/elder-simple-selection-view.component.mjs +3 -3
  52. package/esm2020/lib/components/data-view/simple/elder-simple-selection-view/elder-simple-selection-view.module.mjs +4 -4
  53. package/esm2020/lib/components/data-view/table/activation/elder-table-activation.directive.mjs +3 -3
  54. package/esm2020/lib/components/data-view/table/elder-number-cell.directive.mjs +3 -3
  55. package/esm2020/lib/components/data-view/table/elder-paginator-intl.mjs +3 -3
  56. package/esm2020/lib/components/data-view/table/elder-table/elder-table-toolbar.directive.mjs +3 -3
  57. package/esm2020/lib/components/data-view/table/elder-table/elder-table.component.mjs +5 -5
  58. package/esm2020/lib/components/data-view/table/elder-table-column.directive.mjs +3 -3
  59. package/esm2020/lib/components/data-view/table/elder-table-extension.directive.mjs +3 -3
  60. package/esm2020/lib/components/data-view/table/elder-table-root.directive.mjs +3 -3
  61. package/esm2020/lib/components/data-view/table/elder-table-row.directive.mjs +3 -3
  62. package/esm2020/lib/components/data-view/table/elder-table-sort.directive.mjs +3 -3
  63. package/esm2020/lib/components/data-view/table/elder-table.module.mjs +4 -4
  64. package/esm2020/lib/components/data-view/table/model/elder-table-model.mjs +3 -3
  65. package/esm2020/lib/components/dialogs/confirm-dialog/elder-confirm-dialog.component.mjs +3 -3
  66. package/esm2020/lib/components/dialogs/elder-dialog.module.mjs +7 -7
  67. package/esm2020/lib/components/dialogs/elder-dialog.service.mjs +3 -3
  68. package/esm2020/lib/components/dialogs/question-dialog/elder-question-dialog.component.mjs +3 -3
  69. package/esm2020/lib/components/dialogs/selection-dialog/elder-selection-dialog/elder-selection-dialog.component.mjs +3 -3
  70. package/esm2020/lib/components/dialogs/selection-dialog/elder-selection-dialog.directive.mjs +3 -3
  71. package/esm2020/lib/components/errors/elder-error.module.mjs +4 -4
  72. package/esm2020/lib/components/errors/exception-detail/elder-exception-detail.component.mjs +3 -3
  73. package/esm2020/lib/components/expand-toggle-button/elder-expand-toggle-button.component.mjs +3 -3
  74. package/esm2020/lib/components/expand-toggle-button/elder-expand-toggle-button.module.mjs +4 -4
  75. package/esm2020/lib/components/files/blob-viewer/elder-blob-viewer.component.mjs +3 -3
  76. package/esm2020/lib/components/files/elder-file-drop-zone.directive.mjs +3 -3
  77. package/esm2020/lib/components/files/elder-file-select.directive.mjs +3 -3
  78. package/esm2020/lib/components/files/elder-file.module.mjs +4 -4
  79. package/esm2020/lib/components/files/file-select/file-select.component.mjs +3 -3
  80. package/esm2020/lib/components/files/file-upload/file-upload.component.mjs +3 -3
  81. package/esm2020/lib/components/forms/clipboard/elder-clipboard.service.mjs +3 -3
  82. package/esm2020/lib/components/forms/directives/elder-clipboard-put.directive.mjs +3 -3
  83. package/esm2020/lib/components/forms/directives/elder-delayed-focus.directive.mjs +3 -3
  84. package/esm2020/lib/components/forms/directives/elder-form-field-dense.directive.mjs +3 -3
  85. package/esm2020/lib/components/forms/directives/elder-form-field-label.directive.mjs +3 -3
  86. package/esm2020/lib/components/forms/directives/elder-form-field-no-spinner.directive.mjs +3 -3
  87. package/esm2020/lib/components/forms/directives/elder-forms-directives.module.mjs +13 -13
  88. package/esm2020/lib/components/forms/directives/elder-key-event.directive.mjs +3 -3
  89. package/esm2020/lib/components/forms/directives/elder-max.directive.mjs +3 -3
  90. package/esm2020/lib/components/forms/directives/elder-min.directive.mjs +3 -3
  91. package/esm2020/lib/components/forms/directives/elder-next-focusable.directive.mjs +3 -3
  92. package/esm2020/lib/components/forms/directives/elder-plug-parent-form.directive.mjs +3 -3
  93. package/esm2020/lib/components/forms/directives/elder-stop-event-propagation.directive.mjs +3 -3
  94. package/esm2020/lib/components/forms/directives/elder-tab-focus-trap.directive.mjs +3 -3
  95. package/esm2020/lib/components/forms/directives/elder-touched.directive.mjs +3 -3
  96. package/esm2020/lib/components/forms/directives/elder-triple-state-checkbox.directive.mjs +3 -3
  97. package/esm2020/lib/components/forms/directives/validation/elder-multiple-of.validator.mjs +3 -3
  98. package/esm2020/lib/components/forms/directives/validation/elder-required-ignore-zero.validator.mjs +3 -3
  99. package/esm2020/lib/components/forms/elder-forms.module.mjs +4 -4
  100. package/esm2020/lib/components/forms/search/elder-search-context.directive.mjs +3 -3
  101. package/esm2020/lib/components/forms/search/elder-search-input.directive.mjs +3 -3
  102. package/esm2020/lib/components/forms/search/elder-search.module.mjs +4 -4
  103. package/esm2020/lib/components/forms/search/search-box/elder-search-box.component.mjs +3 -3
  104. package/esm2020/lib/components/forms/search/search-box/elder-search-panel.component.mjs +3 -3
  105. package/esm2020/lib/components/global-search/elder-global-search.component.mjs +3 -3
  106. package/esm2020/lib/components/global-search/elder-global-search.module.mjs +4 -4
  107. package/esm2020/lib/components/global-search/elder-global-search.service.mjs +3 -3
  108. package/esm2020/lib/components/graph/elder-progress-bar/elder-progress-bar.component.mjs +3 -3
  109. package/esm2020/lib/components/graph/elder-progress-bar/elder-progress-bar.module.mjs +4 -4
  110. package/esm2020/lib/components/headers/elder-header/elder-header.component.mjs +3 -3
  111. package/esm2020/lib/components/headers/elder-header.module.mjs +4 -4
  112. package/esm2020/lib/components/http-support/elder-http-client.service.mjs +3 -3
  113. package/esm2020/lib/components/i18n/entities/elder-i18n-entities.module.mjs +4 -4
  114. package/esm2020/lib/components/i18n/entities/elder-localized-input/elder-localized-input.component.mjs +3 -3
  115. package/esm2020/lib/components/i18n/entities/elder-localized-input-dialog/elder-localized-input-dialog.component.mjs +3 -3
  116. package/esm2020/lib/components/i18n/entities/elder-localized-input-dialog.service.mjs +3 -3
  117. package/esm2020/lib/components/i18n/entities/elder-localized-input-table/elder-localized-input-table.component.mjs +3 -3
  118. package/esm2020/lib/components/i18n/entities/elder-localized-text-column.directive.mjs +3 -3
  119. package/esm2020/lib/components/i18n/entities/elder-localized-texts.directive.mjs +3 -3
  120. package/esm2020/lib/components/i18n/entities/picker/i18n-pick-async.pipe.mjs +3 -3
  121. package/esm2020/lib/components/i18n/entities/picker/i18n-pick.pipe.mjs +3 -3
  122. package/esm2020/lib/components/i18n/entities/picker/localisation-picker.service.mjs +3 -3
  123. package/esm2020/lib/components/i18n/language/elder-language-interceptor.mjs +3 -3
  124. package/esm2020/lib/components/i18n/language/elder-language.module.mjs +4 -4
  125. package/esm2020/lib/components/i18n/language/elder-language.service.mjs +3 -3
  126. package/esm2020/lib/components/i18n/language/language-switcher/elder-language-switcher.component.mjs +4 -4
  127. package/esm2020/lib/components/i18n/locales/elder-locales-de-ch.module.mjs +4 -4
  128. package/esm2020/lib/components/iframes/elder-iframe.module.mjs +4 -4
  129. package/esm2020/lib/components/iframes/iframe-close.directive.mjs +3 -3
  130. package/esm2020/lib/components/iframes/iframe-dialog/iframe-dialog.component.mjs +3 -3
  131. package/esm2020/lib/components/iframes/iframe-host/iframe-host.component.mjs +3 -3
  132. package/esm2020/lib/components/iframes/iframe-side-content/iframe-side-content.component.mjs +3 -3
  133. package/esm2020/lib/components/iframes/iframe.service.mjs +3 -3
  134. package/esm2020/lib/components/infinitescroll/elder-infinite-autocomplete.directive.mjs +3 -3
  135. package/esm2020/lib/components/infinitescroll/elder-infinite-scroll.directive.mjs +3 -3
  136. package/esm2020/lib/components/infinitescroll/elder-infinite-scroll.module.mjs +7 -7
  137. package/esm2020/lib/components/input/autocomplete/elder-autocomplete/elder-autocomplete.component.mjs +3 -3
  138. package/esm2020/lib/components/input/autocomplete/elder-autocomplete.directive.mjs +3 -3
  139. package/esm2020/lib/components/input/autocomplete/elder-autocomplete.module.mjs +4 -4
  140. package/esm2020/lib/components/labels/elder-labels.module.mjs +4 -4
  141. package/esm2020/lib/components/labels/labels-input/labels-input.component.mjs +3 -3
  142. package/esm2020/lib/components/measures/dimensions-input/elder-dimensions-input.component.mjs +3 -3
  143. package/esm2020/lib/components/measures/directives/elder-unit-select.directive.mjs +3 -3
  144. package/esm2020/lib/components/measures/elder-measures.module.mjs +8 -8
  145. package/esm2020/lib/components/measures/elder-quantity-transform.pipe.mjs +3 -3
  146. package/esm2020/lib/components/measures/elder-quantity.pipe.mjs +3 -3
  147. package/esm2020/lib/components/measures/elder-unit.service.mjs +3 -3
  148. package/esm2020/lib/components/measures/quantity-input/elder-quantity-input.component.mjs +4 -4
  149. package/esm2020/lib/components/measures/util/elder-quantity.service.mjs +3 -3
  150. package/esm2020/lib/components/multi-autocomplete/elder-multi-auto-complete.module.mjs +4 -4
  151. package/esm2020/lib/components/multi-autocomplete/elder-multi-autocomplete.component.mjs +3 -3
  152. package/esm2020/lib/components/navigation/bread-crumbs/bread-crumbs/elder-bread-crumbs.component.mjs +3 -3
  153. package/esm2020/lib/components/navigation/bread-crumbs/elder-bread-crumbs.module.mjs +4 -4
  154. package/esm2020/lib/components/navigation/nav/elder-nav.module.mjs +4 -4
  155. package/esm2020/lib/components/navigation/nav/nav-group/elder-nav-group.component.mjs +3 -3
  156. package/esm2020/lib/components/navigation/nav/nav-link/elder-nav-link.component.mjs +3 -3
  157. package/esm2020/lib/components/navigation/nav/nav-list/elder-nav-list.component.mjs +3 -3
  158. package/esm2020/lib/components/navigation/toolbar/elder-toolbar-column.directive.mjs +3 -3
  159. package/esm2020/lib/components/navigation/toolbar/elder-toolbar.module.mjs +4 -4
  160. package/esm2020/lib/components/navigation/toolbar/elder-toolbar.service.mjs +3 -3
  161. package/esm2020/lib/components/navigation/toolbar/toolbar/elder-toolbar.component.mjs +3 -3
  162. package/esm2020/lib/components/navigation/toolbar/toolbar-title/elder-toolbar-title.component.mjs +3 -3
  163. package/esm2020/lib/components/navigation/toolbar/toolbar-title/elder-toolbar-title.service.mjs +3 -3
  164. package/esm2020/lib/components/overlays/elder-overlay-origin.directive.mjs +3 -3
  165. package/esm2020/lib/components/overlays/elder-overlay-trigger.directive.mjs +3 -3
  166. package/esm2020/lib/components/overlays/elder-overlay.component.mjs +3 -3
  167. package/esm2020/lib/components/overlays/elder-overlay.module.mjs +4 -4
  168. package/esm2020/lib/components/panels/card-panel/elder-card-panel.component.mjs +3 -3
  169. package/esm2020/lib/components/panels/elder-panel.module.mjs +4 -4
  170. package/esm2020/lib/components/panels/flat/elder-panel.component.mjs +3 -3
  171. package/esm2020/lib/components/select/elder-select/elder-select.component.mjs +43 -6
  172. package/esm2020/lib/components/select/elder-select-base.mjs +3 -3
  173. package/esm2020/lib/components/select/elder-select-chip.directive.mjs +3 -3
  174. package/esm2020/lib/components/select/elder-select-value.directive.mjs +3 -3
  175. package/esm2020/lib/components/select/elder-select.module.mjs +4 -4
  176. package/esm2020/lib/components/select/multi/elder-multi-select-base.mjs +3 -3
  177. package/esm2020/lib/components/select/multi/elder-multi-select-chips/elder-multi-select-chips.component.mjs +3 -3
  178. package/esm2020/lib/components/select/popup/selection-model-popup.directive.mjs +3 -3
  179. package/esm2020/lib/components/select/popup/templated-selection-dialog/templated-selection-dialog.component.mjs +3 -3
  180. package/esm2020/lib/components/select/select-on-tab.directive.mjs +3 -3
  181. package/esm2020/lib/components/select-chip-list/chip-list-select/elder-chip-list-select.component.mjs +3 -3
  182. package/esm2020/lib/components/select-chip-list/elder-chip-list-select.module.mjs +4 -4
  183. package/esm2020/lib/components/select-list/elder-select-list.module.mjs +4 -4
  184. package/esm2020/lib/components/select-list/select-list/elder-select-list.component.mjs +3 -3
  185. package/esm2020/lib/components/select-list/select-list-item/elder-select-list-item.component.mjs +3 -3
  186. package/esm2020/lib/components/shell/drawers/elder-route-outlet-drawer.service.mjs +3 -3
  187. package/esm2020/lib/components/shell/drawers/elder-router-outlet.service.mjs +3 -3
  188. package/esm2020/lib/components/shell/elder-shell-slot.directive.mjs +3 -3
  189. package/esm2020/lib/components/shell/elder-shell.module.mjs +4 -4
  190. package/esm2020/lib/components/shell/elder-shell.service.mjs +3 -3
  191. package/esm2020/lib/components/shell/header/elder-app-header/elder-app-header.component.mjs +3 -3
  192. package/esm2020/lib/components/shell/shell/elder-shell.component.mjs +12 -12
  193. package/esm2020/lib/components/shell/shell-navigation-toggle/elder-shell-navigation-toggle.component.mjs +3 -3
  194. package/esm2020/lib/components/tabs/elder-tab/elder-tab.directive.mjs +3 -3
  195. package/esm2020/lib/components/tabs/elder-tab-group-routing/elder-tab-group-routing.directive.mjs +3 -3
  196. package/esm2020/lib/components/tabs/elder-tab.module.mjs +4 -4
  197. package/esm2020/lib/components/time/date-adapters/custom-date-adapter.mjs +3 -3
  198. package/esm2020/lib/components/time/duration/elder-duration-input/elder-duration-input.component.mjs +4 -4
  199. package/esm2020/lib/components/time/elder-date-switcher/elder-date-switcher.component.mjs +3 -3
  200. package/esm2020/lib/components/time/elder-date-time-input/elder-date-time-input.component.mjs +4 -4
  201. package/esm2020/lib/components/time/elder-interval-input/elder-interval-input.component.mjs +3 -3
  202. package/esm2020/lib/components/time/elder-local-date-input/elder-local-date-input.component.mjs +4 -4
  203. package/esm2020/lib/components/time/elder-local-time-input/elder-local-time-input.component.mjs +4 -4
  204. package/esm2020/lib/components/time/elder-time.module.mjs +8 -8
  205. package/esm2020/lib/components/time/period/elder-period-input/elder-period-input.component.mjs +4 -4
  206. package/esm2020/lib/components/toasts/elder-toast.module.mjs +4 -4
  207. package/esm2020/lib/components/toasts/elder-toast.service.mjs +9 -9
  208. package/esm2020/lib/components/toasts/standard-toast/standard-toast.component.mjs +3 -3
  209. package/esm2020/lib/components/url-fragment/elder-url-fragment.module.mjs +4 -4
  210. package/esm2020/lib/components/url-fragment/url-fragment-switcher/elder-url-fragment-switcher.component.mjs +3 -3
  211. package/esm2020/lib/components/viewers/elder-svg-viewer/elder-svg-viewer.component.mjs +3 -3
  212. package/esm2020/lib/components/viewers/elder-viewers.module.mjs +4 -4
  213. package/esm2020/lib/features/event-source/elder-event-source.service.mjs +3 -3
  214. package/esm2020/lib/features/kafent/access-token-provider.mjs +3 -3
  215. package/esm2020/lib/features/kafent/kafent-config.mjs +3 -3
  216. package/esm2020/lib/features/kafent/kafent-event-stream.mjs +3 -3
  217. package/esm2020/lib/features/kafent/kafent-event.service.mjs +3 -3
  218. package/esm2020/lib/features/kafent/kafent.module.mjs +4 -4
  219. package/esm2020/lib/features/kafent/sse/kafent-event-stream-sse.service.mjs +3 -3
  220. package/esm2020/lib/pipes/bytes.pipe.mjs +3 -3
  221. package/esm2020/lib/pipes/elder-pipes.module.mjs +7 -7
  222. package/esm2020/lib/pipes/elder-repeat.pipe.mjs +3 -3
  223. package/esm2020/lib/pipes/elder-round.pipe.mjs +3 -3
  224. package/esm2020/lib/pipes/elder-safe-url.pipe.mjs +3 -3
  225. package/esm2020/lib/pipes/iso-duration.pipe.mjs +3 -3
  226. package/esm2020/lib/pipes/iso-interval-parse.pipe.mjs +3 -3
  227. package/esm2020/lib/pipes/iso-interval.pipe.mjs +3 -3
  228. package/esm2020/lib/pipes/time-ago.pipe.mjs +3 -3
  229. package/esm2020/lib/pipes/time-duration.pipe.mjs +3 -3
  230. package/esm2020/lib/pipes/weight.pipe.mjs +3 -3
  231. package/fesm2015/elderbyte-ngx-starter.mjs +954 -913
  232. package/fesm2015/elderbyte-ngx-starter.mjs.map +1 -1
  233. package/fesm2020/elderbyte-ngx-starter.mjs +954 -913
  234. package/fesm2020/elderbyte-ngx-starter.mjs.map +1 -1
  235. package/lib/common/time/interval.d.ts +3 -3
  236. package/lib/common/time/time-util.d.ts +3 -2
  237. package/lib/components/select/elder-select/elder-select.component.d.ts +17 -2
  238. package/package.json +1 -1
@@ -70,9 +70,9 @@ export class ElderEnumTranslationService {
70
70
  return DelegateListDataSource.listFetcher(() => this.translate(enumClass, translationPrefix, sort, asc), 'value', (id) => this.translateOne(translationPrefix, id));
71
71
  }
72
72
  }
73
- ElderEnumTranslationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ElderEnumTranslationService, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });
74
- ElderEnumTranslationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ElderEnumTranslationService, providedIn: 'root' });
75
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ElderEnumTranslationService, decorators: [{
73
+ ElderEnumTranslationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ElderEnumTranslationService, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });
74
+ ElderEnumTranslationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ElderEnumTranslationService, providedIn: 'root' });
75
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ElderEnumTranslationService, decorators: [{
76
76
  type: Injectable,
77
77
  args: [{
78
78
  providedIn: 'root'
@@ -68,9 +68,9 @@ export class FormFieldBaseComponent extends ValueAccessorBase {
68
68
  return result;
69
69
  }
70
70
  }
71
- FormFieldBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: FormFieldBaseComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
72
- FormFieldBaseComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: FormFieldBaseComponent, inputs: { name: "name", label: "label", appearance: "appearance", floatLabel: "floatLabel", color: "color", placeholder: "placeholder", hint: "hint", icon: "icon", showIcon: "showIcon", min: "min", max: "max", showHint: "showHint", required: "required", disabled: "disabled", readonly: "readonly" }, usesInheritance: true, ngImport: i0 });
73
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: FormFieldBaseComponent, decorators: [{
71
+ FormFieldBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: FormFieldBaseComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
72
+ FormFieldBaseComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.2", type: FormFieldBaseComponent, inputs: { name: "name", label: "label", appearance: "appearance", floatLabel: "floatLabel", color: "color", placeholder: "placeholder", hint: "hint", icon: "icon", showIcon: "showIcon", min: "min", max: "max", showHint: "showHint", required: "required", disabled: "disabled", readonly: "readonly" }, usesInheritance: true, ngImport: i0 });
73
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: FormFieldBaseComponent, decorators: [{
74
74
  type: Directive
75
75
  }], propDecorators: { name: [{
76
76
  type: Input
@@ -21,9 +21,9 @@ export class MultiModelBaseComponent extends FormFieldBaseComponent {
21
21
  return result;
22
22
  }
23
23
  }
24
- MultiModelBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: MultiModelBaseComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
25
- MultiModelBaseComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: MultiModelBaseComponent, viewQueries: [{ propertyName: "models", predicate: NgModel, descendants: true }], usesInheritance: true, ngImport: i0 });
26
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: MultiModelBaseComponent, decorators: [{
24
+ MultiModelBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: MultiModelBaseComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
25
+ MultiModelBaseComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.2", type: MultiModelBaseComponent, viewQueries: [{ propertyName: "models", predicate: NgModel, descendants: true }], usesInheritance: true, ngImport: i0 });
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: MultiModelBaseComponent, decorators: [{
27
27
  type: Directive
28
28
  }], propDecorators: { models: [{
29
29
  type: ViewChildren,
@@ -119,9 +119,9 @@ export class TemplateCompositeControl extends ValueAccessorBase {
119
119
  }
120
120
  }
121
121
  }
122
- TemplateCompositeControl.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: TemplateCompositeControl, deps: null, target: i0.ɵɵFactoryTarget.Directive });
123
- TemplateCompositeControl.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: TemplateCompositeControl, inputs: { disabled: "disabled" }, viewQueries: [{ propertyName: "ngForm", first: true, predicate: ["form"], descendants: true }], usesInheritance: true, ngImport: i0 });
124
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: TemplateCompositeControl, decorators: [{
122
+ TemplateCompositeControl.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TemplateCompositeControl, deps: null, target: i0.ɵɵFactoryTarget.Directive });
123
+ TemplateCompositeControl.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.2", type: TemplateCompositeControl, inputs: { disabled: "disabled" }, viewQueries: [{ propertyName: "ngForm", first: true, predicate: ["form"], descendants: true }], usesInheritance: true, ngImport: i0 });
124
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TemplateCompositeControl, decorators: [{
125
125
  type: Directive
126
126
  }], propDecorators: { disabled: [{
127
127
  type: Input,
@@ -132,9 +132,9 @@ export class ValueAccessorBase {
132
132
  this._changed.forEach(f => f(value));
133
133
  }
134
134
  }
135
- ValueAccessorBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ValueAccessorBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
136
- ValueAccessorBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: ValueAccessorBase, inputs: { value: "value" }, outputs: { valueUpdated: "valueUpdated", valueChange: "valueChange" }, ngImport: i0 });
137
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ValueAccessorBase, decorators: [{
135
+ ValueAccessorBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ValueAccessorBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
136
+ ValueAccessorBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.2", type: ValueAccessorBase, inputs: { value: "value" }, outputs: { valueUpdated: "valueUpdated", valueChange: "valueChange" }, ngImport: i0 });
137
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ValueAccessorBase, decorators: [{
138
138
  type: Directive
139
139
  }], propDecorators: { valueUpdated: [{
140
140
  type: Output
@@ -3,9 +3,9 @@ import * as i0 from "@angular/core";
3
3
  export class HttpClientBuilder {
4
4
  constructor() { }
5
5
  }
6
- HttpClientBuilder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: HttpClientBuilder, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
7
- HttpClientBuilder.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: HttpClientBuilder, providedIn: 'root' });
8
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: HttpClientBuilder, decorators: [{
6
+ HttpClientBuilder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: HttpClientBuilder, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
7
+ HttpClientBuilder.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: HttpClientBuilder, providedIn: 'root' });
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: HttpClientBuilder, decorators: [{
9
9
  type: Injectable,
10
10
  args: [{
11
11
  providedIn: 'root'
@@ -10,9 +10,9 @@ export class HttpClientPristine extends HttpClient {
10
10
  super(backend);
11
11
  }
12
12
  }
13
- HttpClientPristine.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: HttpClientPristine, deps: [{ token: i1.HttpBackend }], target: i0.ɵɵFactoryTarget.Injectable });
14
- HttpClientPristine.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: HttpClientPristine, providedIn: 'root' });
15
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: HttpClientPristine, decorators: [{
13
+ HttpClientPristine.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: HttpClientPristine, deps: [{ token: i1.HttpBackend }], target: i0.ɵɵFactoryTarget.Injectable });
14
+ HttpClientPristine.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: HttpClientPristine, providedIn: 'root' });
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: HttpClientPristine, decorators: [{
16
16
  type: Injectable,
17
17
  args: [{
18
18
  providedIn: 'root'
@@ -84,9 +84,9 @@ export class DataTransferFactory {
84
84
  return HttpDataTransfer.fromRequest(this.http.request(request), name, size);
85
85
  }
86
86
  }
87
- DataTransferFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DataTransferFactory, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
88
- DataTransferFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DataTransferFactory, providedIn: 'root' });
89
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DataTransferFactory, decorators: [{
87
+ DataTransferFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: DataTransferFactory, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
88
+ DataTransferFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: DataTransferFactory, providedIn: 'root' });
89
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: DataTransferFactory, decorators: [{
90
90
  type: Injectable,
91
91
  args: [{
92
92
  providedIn: 'root'
@@ -1,5 +1,4 @@
1
- import { DateUtil } from './date-util';
2
- import { Duration, Instant, LocalDate, Period } from '@js-joda/core';
1
+ import { Duration, Instant, LocalDate, nativeJs, Period, ZoneId } from '@js-joda/core';
3
2
  import { TimeUtil } from './time-util';
4
3
  import { PeriodDuration } from './period-duration';
5
4
  export class Interval {
@@ -49,16 +48,17 @@ export class Interval {
49
48
  }
50
49
  /**
51
50
  * Creates a Interval from a Date by spreading it to the begin and end of its day.
52
- *
53
- * @param localDate Date to spread
51
+ * @param date Date to spread
54
52
  */
55
- static ofDayDate(localDate) {
56
- const start = TimeUtil.instant(DateUtil.startOfDay(localDate));
57
- return Interval.ofStartAndOffset(start, Period.ofDays(1));
53
+ static ofDayDate(date) {
54
+ const localDate = LocalDate.from(nativeJs(date));
55
+ return Interval.ofDay(localDate, ZoneId.systemDefault());
58
56
  }
59
57
  static ofDay(day, zoneId) {
60
- const todayStart = day.atStartOfDay(zoneId).toInstant();
61
- return Interval.ofStartAndOffset(todayStart, Period.ofDays(1));
58
+ return Interval.betweenDays(day, day.plusDays(1), zoneId);
59
+ }
60
+ static betweenDays(startDayInclusive, endDayExclusive, zoneId) {
61
+ return Interval.of(startDayInclusive.atStartOfDay(zoneId).toInstant(), endDayExclusive.atStartOfDay(zoneId).toInstant());
62
62
  }
63
63
  /**
64
64
  * Creates a new interval with the given start time point
@@ -416,4 +416,4 @@ export class Interval {
416
416
  return this.start.compareTo(other.start);
417
417
  }
418
418
  }
419
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJ2YWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21tb24vdGltZS9pbnRlcnZhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQXlCLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBUWpELE1BQU0sT0FBTyxRQUFRO0lBR25COzs7O2dGQUk0RTtJQUU1RSxZQUNrQixLQUFjLEVBQ2QsR0FBWTtRQURaLFVBQUssR0FBTCxLQUFLLENBQVM7UUFDZCxRQUFHLEdBQUgsR0FBRyxDQUFTO0lBQzFCLENBQUM7SUFFTDs7OztnRkFJNEU7SUFFNUU7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQ2pCLEdBQW1CO1FBRW5CLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFN0IsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxHQUFHLEdBQUcsQ0FBQyxDQUFDO1NBQ3pFO1FBRUQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV0QyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFeEIsc0VBQXNFO1FBRXRFLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxD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QUssQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDckU7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLFNBQVMsQ0FBQyxLQUFlO1FBQzlCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7Q0FHRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGF0ZVV0aWx9IGZyb20gJy4vZGF0ZS11dGlsJztcbmltcG9ydCB7RHVyYXRpb24sIEluc3RhbnQsIExvY2FsRGF0ZSwgUGVyaW9kLCBUZW1wb3JhbEFtb3VudCwgWm9uZUlkfSBmcm9tICdAanMtam9kYS9jb3JlJztcbmltcG9ydCB7VGltZVV0aWx9IGZyb20gJy4vdGltZS11dGlsJztcbmltcG9ydCB7UGVyaW9kRHVyYXRpb259IGZyb20gJy4vcGVyaW9kLWR1cmF0aW9uJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIElTTy04NjAxIGludGVydmFsIHN0cmluZy5cbiAqIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVfaW50ZXJ2YWxzXG4gKi9cbmV4cG9ydCB0eXBlIElzb0ludGVydmFsU3RyID0gc3RyaW5nO1xuXG5leHBvcnQgY2xhc3MgSW50ZXJ2YWwge1xuXG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIENvbnN0cnVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IHN0YXJ0OiBJbnN0YW50LFxuICAgIHB1YmxpYyByZWFkb25seSBlbmQ6IEluc3RhbnRcbiAgKSB7IH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogU3RhdGljIEJ1aWxkZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogUGFyc2VzIGFuIElTTy04NjAxIGludGVydmFsIHN0cmluZy5cbiAgICogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjVGltZV9pbnRlcnZhbHNcbiAgICogQHBhcmFtIGlzb1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBwYXJzZShcbiAgICBpc286IElzb0ludGVydmFsU3RyXG4gICk6IEludGVydmFsIHtcbiAgICBjb25zdCBwYXJ0cyA9IGlzby5zcGxpdCgnLycpO1xuXG4gICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZ2l2ZW4gc3RyaW5nIGlzIG5vdCBhIHZhbGlkIGlzbyBpbnRlcnZhbDogJyArIGlzbyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBJbnN0YW50LnBhcnNlKHBhcnRzWzBdKTtcblxuICAgIGNvbnN0IGVuZFN0ciA9IHBhcnRzWzFdO1xuXG4gICAgLy8gVGhlICdlbmQnIHBhcnQgY2FuIGVpdGhlciBiZSBhbiBpbnN0YW50IG9yIGEgZHVyYXRpb24gaW4gaXNvIGZvcm1hdFxuXG4gICAgaWYgKGVuZFN0ci5zdGFydHNXaXRoKCdQJykgfHwgZW5kU3RyLnN0YXJ0c1dpdGgoJy1QJykpIHtcblxuICAgICAgY29uc3QgZHVyYXRpb24gPSBEdXJhdGlvbi5wYXJzZShlbmRTdHIpO1xuXG4gICAgICByZXR1cm4gSW50ZXJ2YWwub2ZTdGFydEFuZE9mZnNldChcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIGR1cmF0aW9uXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gSW50ZXJ2YWwub2YoXG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBJbnN0YW50LnBhcnNlKGVuZFN0cilcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyB5ZXN0ZXJkYXkoem9uZUlkOiBab25lSWQpOiBJbnRlcnZhbCB7XG4gICAgcmV0dXJuIEludGVydmFsLm9mRGF5KFxuICAgICAgTG9jYWxEYXRlLm5vdygpLm1pbnVzRGF5cygxKSxcbiAgICAgIHpvbmVJZFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljICB0b21vcnJvdyh6b25lSWQ6IFpvbmVJZCk6IEludGVydmFsIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwub2ZEYXkoXG4gICAgICBMb2NhbERhdGUubm93KCkucGx1c0RheXMoMSksXG4gICAgICB6b25lSWRcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyB0b2RheSh6b25lSWQ6IFpvbmVJZCk6IEludGVydmFsIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwub2ZEYXkoXG4gICAgICBMb2NhbERhdGUubm93KCksXG4gICAgICB6b25lSWRcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBJbnRlcnZhbCBmcm9tIGEgRGF0ZSBieSBzcHJlYWRpbmcgaXQgdG8gdGhlIGJlZ2luIGFuZCBlbmQgb2YgaXRzIGRheS5cbiAgICpcbiAgICogQHBhcmFtIGxvY2FsRGF0ZSBEYXRlIHRvIHNwcmVhZFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBvZkRheURhdGUobG9jYWxEYXRlOiBEYXRlKTogSW50ZXJ2YWwge1xuICAgIGNvbnN0IHN0YXJ0ID0gVGltZVV0aWwuaW5zdGFudChEYXRlVXRpbC5zdGFydE9mRGF5KGxvY2FsRGF0ZSkpO1xuICAgIHJldHVybiBJbnRlcnZhbC5vZlN0YXJ0QW5kT2Zmc2V0KFxuICAgICAgc3RhcnQsXG4gICAgICBQZXJpb2Qub2ZEYXlzKDEpXG4gICAgKTtcbiAgfVxuXG5cbiAgcHVibGljIHN0YXRpYyBvZkRheShkYXk6IExvY2FsRGF0ZSwgem9uZUlkOiBab25lSWQpOiBJbnRlcnZhbCB7XG4gICAgY29uc3QgdG9kYXlTdGFydCA9IGRheS5hdFN0YXJ0T2ZEYXkoem9uZUlkKS50b0luc3RhbnQoKTtcbiAgICByZXR1cm4gSW50ZXJ2YWwub2ZTdGFydEFuZE9mZnNldChcbiAgICAgIHRvZGF5U3RhcnQsXG4gICAgICBQZXJpb2Qub2ZEYXlzKDEpXG4gICAgKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW50ZXJ2YWwgd2l0aCB0aGUgZ2l2ZW4gc3RhcnQgdGltZSBwb2ludFxuICAgKiBhbmQgYSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB5b3Ugc2hvdWxkIHVzZSBQZXJpb2QgZm9yIGRheXMgdG8gYWNjb3VudCBmb3Igem9uZSBzcGVjaWZpY1xuICAgKiB0aGluZ3MgbGlrZSBkYXlsaWdodCBzYXZpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBzdGFydEluY2x1c2l2ZVxuICAgKiBAcGFyYW0gb2Zmc2V0RXhjbHVzaXZlIEEgUGVyaW9kIG9yIER1cmF0aW9uIG9mZnNldC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb2ZTdGFydEFuZE9mZnNldChzdGFydEluY2x1c2l2ZTogSW5zdGFudCwgb2Zmc2V0RXhjbHVzaXZlOiBUZW1wb3JhbEFtb3VudCk6IEludGVydmFsIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwub2YoXG4gICAgICBzdGFydEluY2x1c2l2ZSxcbiAgICAgIHN0YXJ0SW5jbHVzaXZlLnBsdXMob2Zmc2V0RXhjbHVzaXZlKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIG9mKFxuICAgIHN0YXJ0SW5jbHVzaXZlOiBJbnN0YW50LFxuICAgIGVuZEV4Y2x1c2l2ZTogSW5zdGFudFxuICApOiBJbnRlcnZhbCB7XG4gICAgcmV0dXJuIG5ldyBJbnRlcnZhbChcbiAgICAgIHN0YXJ0SW5jbHVzaXZlLFxuICAgICAgZW5kRXhjbHVzaXZlXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgb2ZEYXRlKFxuICAgIHN0YXJ0SW5jbHVzaXZlOiBEYXRlIHwgc3RyaW5nLFxuICAgIGVuZEV4Y2x1c2l2ZTogRGF0ZSB8IHN0cmluZ1xuICApOiBJbnRlcnZhbCB7XG4gICAgcmV0dXJuIG5ldyBJbnRlcnZhbChcbiAgICAgIFRpbWVVdGlsLmluc3RhbnQoc3RhcnRJbmNsdXNpdmUpLFxuICAgICAgVGltZVV0aWwuaW5zdGFudChlbmRFeGNsdXNpdmUpXG4gICAgKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHJhbmdlIGlzIGVtcHR5LlxuICAgKiA8cD5cbiAgICogQW4gZW1wdHkgcmFuZ2Ugb2NjdXJzIHdoZW4gdGhlIHN0YXJ0IGRhdGUgZXF1YWxzIHRoZSBpbmNsdXNpdmUgZW5kIGRhdGUuXG4gICAqXG4gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcmFuZ2UgaXMgZW1wdHlcbiAgICovXG4gIHB1YmxpYyBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0LmVxdWFscyh0aGlzLmVuZCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBzdGFydCBvZiB0aGUgaW50ZXJ2YWwgaXMgdW5ib3VuZGVkLlxuICAgKlxuICAgKiBAcmV0dXJuIHRydWUgaWYgc3RhcnQgaXMgdW5ib3VuZGVkXG4gICAqL1xuICBwdWJsaWMgaXNVbmJvdW5kZWRTdGFydCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydC5lcXVhbHMoSW5zdGFudC5NSU4pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgZW5kIG9mIHRoZSBpbnRlcnZhbCBpcyB1bmJvdW5kZWQuXG4gICAqXG4gICAqIEByZXR1cm4gdHJ1ZSBpZiBlbmQgaXMgdW5ib3VuZGVkXG4gICAqL1xuICBwdWJsaWMgaXNVbmJvdW5kZWRFbmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW5kLmVxdWFscyhJbnN0YW50Lk1BWCk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHVibGljIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgdG9EdXJhdGlvbigpOiBEdXJhdGlvbiB7XG4gICAgcmV0dXJuIER1cmF0aW9uLmJldHdlZW4odGhpcy5zdGFydCwgdGhpcy5lbmQpO1xuICB9XG5cbiAgcHVibGljIHRvUGVyaW9kRHVyYXRpb24oem9uZTogWm9uZUlkKTogUGVyaW9kRHVyYXRpb24ge1xuICAgIHJldHVybiBQZXJpb2REdXJhdGlvbi5iZXR3ZWVuKFxuICAgICAgdGhpcy5zdGFydC5hdFpvbmUoem9uZSksXG4gICAgICB0aGlzLmVuZC5hdFpvbmUoem9uZSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHRvU3RyaW5nKCk6IElzb0ludGVydmFsU3RyIHtcbiAgICByZXR1cm4gdGhpcy50b0R1cmF0aW9uU3RyaW5nKCk7XG4gIH1cblxuICBwdWJsaWMgdG9JbnN0YW50U3RyaW5nKCk6IElzb0ludGVydmFsU3RyIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydC50b1N0cmluZygpICsgJy8nICsgdGhpcy5lbmQudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHB1YmxpYyB0b0R1cmF0aW9uU3RyaW5nKCk6IElzb0ludGVydmFsU3RyIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydC50b1N0cmluZygpICsgJy8nICsgdGhpcy50b0R1cmF0aW9uKCkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgTW9kaWZpY2F0aW9uIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgY29weSBvZiB0aGlzIHJhbmdlIHdpdGggdGhlIHNwZWNpZmllZCBzdGFydCBpbnN0YW50LlxuICAgKlxuICAgKiBAcGFyYW0gc3RhcnQgIHRoZSBzdGFydCBpbnN0YW50IGZvciB0aGUgbmV3IGludGVydmFsLCBub3QgbnVsbFxuICAgKiBAcmV0dXJuIGFuIGludGVydmFsIHdpdGggdGhlIGVuZCBmcm9tIHRoaXMgaW50ZXJ2YWwgYW5kIHRoZSBzcGVjaWZpZWQgc3RhcnRcbiAgICogQHRocm93cyBEYXRlVGltZUV4Y2VwdGlvbiBpZiB0aGUgcmVzdWx0aW5nIGludGVydmFsIGhhcyBlbmQgYmVmb3JlIHN0YXJ0XG4gICAqL1xuICBwdWJsaWMgd2l0aFN0YXJ0KHN0YXJ0OiBJbnN0YW50KTogSW50ZXJ2YWwge1xuICAgIHJldHVybiBJbnRlcnZhbC5vZihzdGFydCwgdGhpcy5lbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBjb3B5IG9mIHRoaXMgcmFuZ2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGVuZCBpbnN0YW50LlxuICAgKlxuICAgKiBAcGFyYW0gZW5kICB0aGUgZW5kIGluc3RhbnQgZm9yIHRoZSBuZXcgaW50ZXJ2YWwsIG5vdCBudWxsXG4gICAqIEByZXR1cm4gYW4gaW50ZXJ2YWwgd2l0aCB0aGUgc3RhcnQgZnJvbSB0aGlzIGludGVydmFsIGFuZCB0aGUgc3BlY2lmaWVkIGVuZFxuICAgKiBAdGhyb3dzIERhdGVUaW1lRXhjZXB0aW9uIGlmIHRoZSByZXN1bHRpbmcgaW50ZXJ2YWwgaGFzIGVuZCBiZWZvcmUgc3RhcnRcbiAgICovXG4gIHB1YmxpYyB3aXRoRW5kKGVuZDogSW5zdGFudCk6IEludGVydmFsIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwub2YodGhpcy5zdGFydCwgZW5kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBpbnRlcnZhbCB0aGF0IGlzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhpcyBpbnRlcnZhbCBhbmQgdGhlIHNwZWNpZmllZCBpbnRlcnZhbC5cbiAgICogPHA+XG4gICAqIFRoaXMgZmluZHMgdGhlIGludGVyc2VjdGlvbiBvZiB0d28gaW50ZXJ2YWxzLlxuICAgKiBUaGlzIHRocm93cyBhbiBleGNlcHRpb24gaWYgdGhlIHR3byBpbnRlcnZhbHMgYXJlIG5vdCB7QGxpbmtwbGFpbiAjaXNDb25uZWN0ZWQoSW50ZXJ2YWwpIGNvbm5lY3RlZH0uXG4gICAqXG4gICAqIEBwYXJhbSBvdGhlciAgdGhlIG90aGVyIGludGVydmFsIHRvIGNoZWNrIGZvciwgbm90IG51bGxcbiAgICogQHJldHVybiB0aGUgaW50ZXJ2YWwgdGhhdCBpcyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSB0d28gaW50ZXJ2YWxzXG4gICAqIEB0aHJvd3MgRGF0ZVRpbWVFeGNlcHRpb24gaWYgdGhlIGludGVydmFscyBkbyBub3QgY29ubmVjdFxuICAgKi9cbiAgcHVibGljIGludGVyc2VjdGlvbihvdGhlcjogSW50ZXJ2YWwpOiBJbnRlcnZhbCB7XG4gICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQob3RoZXIpID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlcnZhbHMgZG8gbm90IGNvbm5lY3Q6ICcgKyB0aGlzICsgJyBhbmQgJyArIG90aGVyKTtcbiAgICB9XG4gICAgY29uc3QgY21wU3RhcnQgPSB0aGlzLnN0YXJ0LmNvbXBhcmVUbyhvdGhlci5zdGFydCk7XG4gICAgY29uc3QgY21wRW5kID0gdGhpcy5lbmQuY29tcGFyZVRvKG90aGVyLmVuZCk7XG4gICAgaWYgKGNtcFN0YXJ0ID49IDAgJiYgY21wRW5kIDw9IDApIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSBpZiAoY21wU3RhcnQgPD0gMCAmJiBjbXBFbmQgPj0gMCkge1xuICAgICAgcmV0dXJuIG90aGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuZXdTdGFydCA9IChjbXBTdGFydCA+PSAwID8gdGhpcy5zdGFydCA6IG90aGVyLnN0YXJ0KTtcbiAgICAgIGNvbnN0IG5ld0VuZCA9IChjbXBFbmQgPD0gMCA/IHRoaXMuZW5kIDogb3RoZXIuZW5kKTtcbiAgICAgIHJldHVybiBJbnRlcnZhbC5vZihuZXdTdGFydCwgbmV3RW5kKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgaW50ZXJ2YWwgdGhhdCBpcyB0aGUgdW5pb24gb2YgdGhpcyBpbnRlcnZhbCBhbmQgdGhlIHNwZWNpZmllZCBpbnRlcnZhbC5cbiAgICogPHA+XG4gICAqIFRoaXMgZmluZHMgdGhlIHVuaW9uIG9mIHR3byBpbnRlcnZhbHMuXG4gICAqIFRoaXMgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgdHdvIGludGVydmFscyBhcmUgbm90IHtAbGlua3BsYWluICNpc0Nvbm5lY3RlZChJbnRlcnZhbCkgY29ubmVjdGVkfS5cbiAgICpcbiAgICogQHBhcmFtIG90aGVyICB0aGUgb3RoZXIgaW50ZXJ2YWwgdG8gY2hlY2sgZm9yLCBub3QgbnVsbFxuICAgKiBAcmV0dXJuIHRoZSBpbnRlcnZhbCB0aGF0IGlzIHRoZSB1bmlvbiBvZiB0aGUgdHdvIGludGVydmFsc1xuICAgKiBAdGhyb3dzIERhdGVUaW1lRXhjZXB0aW9uIGlmIHRoZSBpbnRlcnZhbHMgZG8gbm90IGNvbm5lY3RcbiAgICovXG4gIHB1YmxpYyB1bmlvbihvdGhlcjogSW50ZXJ2YWwpOiBJbnRlcnZhbCB7XG4gICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQob3RoZXIpID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlcnZhbHMgZG8gbm90IGNvbm5lY3Q6ICcgKyB0aGlzICsgJyBhbmQgJyArIG90aGVyKTtcbiAgICB9XG4gICAgY29uc3QgY21wU3RhcnQgPSB0aGlzLnN0YXJ0LmNvbXBhcmVUbyhvdGhlci5zdGFydCk7XG4gICAgY29uc3QgY21wRW5kID0gdGhpcy5lbmQuY29tcGFyZVRvKG90aGVyLmVuZCk7XG4gICAgaWYgKGNtcFN0YXJ0ID49IDAgJiYgY21wRW5kIDw9IDApIHtcbiAgICAgIHJldHVybiBvdGhlcjtcbiAgICB9IGVsc2UgaWYgKGNtcFN0YXJ0IDw9IDAgJiYgY21wRW5kID49IDApIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuZXdTdGFydCA9IChjbXBTdGFydCA+PSAwID8gb3RoZXIuc3RhcnQgOiB0aGlzLnN0YXJ0KTtcbiAgICAgIGNvbnN0IG5ld0VuZCA9IChjbXBFbmQgPD0gMCA/IG90aGVyLmVuZCA6IHRoaXMuZW5kKTtcbiAgICAgIHJldHVybiBJbnRlcnZhbC5vZihuZXdTdGFydCwgbmV3RW5kKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgc21hbGxlc3QgaW50ZXJ2YWwgdGhhdCBlbmNsb3NlcyB0aGlzIGludGVydmFsIGFuZCB0aGUgc3BlY2lmaWVkIGludGVydmFsLlxuICAgKiA8cD5cbiAgICogVGhlIHJlc3VsdCBvZiB0aGlzIG1ldGhvZCB3aWxsIHtAbGlua3BsYWluICNlbmNsb3NlcyhJbnRlcnZhbCkgZW5jbG9zZX1cbiAgICogdGhpcyBpbnRlcnZhbCBhbmQgdGhlIHNwZWNpZmllZCBpbnRlcnZhbC5cbiAgICpcbiAgICogQHBhcmFtIG90aGVyICB0aGUgb3RoZXIgaW50ZXJ2YWwgdG8gY2hlY2sgZm9yLCBub3QgbnVsbFxuICAgKiBAcmV0dXJuIHRoZSBpbnRlcnZhbCB0aGF0IHNwYW5zIHRoZSB0d28gaW50ZXJ2YWxzXG4gICAqL1xuICBwdWJsaWMgc3BhbihvdGhlcjogSW50ZXJ2YWwpOiBJbnRlcnZhbCB7XG4gICAgY29uc3QgY21wU3RhcnQgPSB0aGlzLnN0YXJ0LmNvbXBhcmVUbyhvdGhlci5zdGFydCk7XG4gICAgY29uc3QgY21wRW5kID0gdGhpcy5lbmQuY29tcGFyZVRvKG90aGVyLmVuZCk7XG4gICAgY29uc3QgbmV3U3RhcnQgPSAoY21wU3RhcnQgPj0gMCA/IG90aGVyLnN0YXJ0IDogdGhpcy5zdGFydCk7XG4gICAgY29uc3QgbmV3RW5kID0gKGNtcEVuZCA8PSAwID8gb3RoZXIuZW5kIDogdGhpcy5lbmQpO1xuICAgIHJldHVybiBJbnRlcnZhbC5vZihuZXdTdGFydCwgbmV3RW5kKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFNoaWZ0IHRoZSB3aG9sZSBpbnRlcnZhbCBieSB0aGUgZ2l2ZW4gZGF5cyBwZXJpb2QuXG4gICAqIEBwYXJhbSBkYXlzXG4gICAqL1xuICBwdWJsaWMgc2hpZnREYXlzKGRheXM6IG51bWJlcik6IEludGVydmFsIHtcbiAgICByZXR1cm4gdGhpcy5zaGlmdChQZXJpb2Qub2ZEYXlzKGRheXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaGlmdCB0aGUgd2hvbGUgaW50ZXJ2YWwgYnkgdGhlIGdpdmVuIHRlbXBvcmFsIGFtb3VudC5cbiAgICogTm90ZSB0aGF0IG9ubHkgUGVyaW9kIHdpbGwgYWNjb3VudCBmb3Igem9uZSBzcGVjaWZpYyB0aGluZ3Mgc3VjaCBhcyBkYXlsaWdodCBzYXZpbmdzLlxuICAgKiBVc2UgRHVyYXRpb24gb25seSBpZiB5b3UgYXJlIGJlbG93IGRheXMuXG4gICAqIEBwYXJhbSBvZmZzZXRcbiAgICovXG4gIHB1YmxpYyBzaGlmdChvZmZzZXQ6IFRlbXBvcmFsQW1vdW50KTogSW50ZXJ2YWwge1xuICAgIHJldHVybiBJbnRlcnZhbC5vZihcbiAgICAgIHRoaXMuc3RhcnQucGx1cyhvZmZzZXQpLFxuICAgICAgdGhpcy5lbmQucGx1cyhvZmZzZXQpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBtb3ZlU3RhcnQob2Zmc2V0OiBUZW1wb3JhbEFtb3VudCk6IEludGVydmFsIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwub2YoXG4gICAgICB0aGlzLnN0YXJ0LnBsdXMob2Zmc2V0KSxcbiAgICAgIHRoaXMuZW5kXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBtb3ZlRW5kKG9mZnNldDogVGVtcG9yYWxBbW91bnQpOiBJbnRlcnZhbCB7XG4gICAgcmV0dXJuIEludGVydmFsLm9mKFxuICAgICAgdGhpcy5zdGFydCxcbiAgICAgIHRoaXMuZW5kLnBsdXMob2Zmc2V0KVxuICAgICk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogSW50ZXJ2YWwgUXVlcnkgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGdpdmVuIFRpbWVGcmFtZSBvdmVybGFwcyB3aXRoIHRoaXMgb25lLlxuICAgKlxuICAgKiBAcGFyYW0gb3RoZXIgVGltZUZyYW1lIHRvIGNoZWNrIGFnYWluc3RcbiAgICogQHJldHVybiBSZXR1cm5zIHtAY29kZSB0cnVlfSBpZiB0aGUgdHdvIGNhbmRpZGF0ZXMgb3ZlcmxhcCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBwdWJsaWMgb3ZlcmxhcHMob3RoZXI6IEludGVydmFsKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG90aGVyLmVxdWFscyh0aGlzKSB8fCAodGhpcy5zdGFydC5jb21wYXJlVG8ob3RoZXIuZW5kKSA8IDAgJiYgb3RoZXIuc3RhcnQuY29tcGFyZVRvKHRoaXMuZW5kKSA8IDApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpdCB0aGUgZ2l2ZW4gbG9jYWxEYXRlIG92ZXJsYXBzIHdpdGggdGhlIGdpdmVuIFRpbWVGcmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHRpbWVGcmFtZSBUaW1lRnJhbWUgdG8gY2hlY2sgYWdhaW5zdFxuICAgKiBAcGFyYW0gbG9jYWxEYXRlIExvY2FsRGF0ZSB0byBjaGVja1xuICAgKi9cbiAgcHVibGljIG92ZXJsYXBzV2l0aExvY2FsRGF0ZShcbiAgICBsb2NhbERhdGU6IERhdGVcbiAgKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3ZlcmxhcHMoSW50ZXJ2YWwub2ZEYXlEYXRlKGxvY2FsRGF0ZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGlzIGludGVydmFsIGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgaW5zdGFudC5cbiAgICogPHA+XG4gICAqIFRoaXMgY2hlY2tzIGlmIHRoZSBzcGVjaWZpZWQgaW5zdGFudCBpcyB3aXRoaW4gdGhlIGJvdW5kcyBvZiB0aGlzIGludGVydmFsLlxuICAgKiBJZiB0aGlzIHJhbmdlIGhhcyBhbiB1bmJvdW5kZWQgc3RhcnQgdGhlbiB7QGNvZGUgY29udGFpbnMoSW5zdGFudCNNSU4pfSByZXR1cm5zIHRydWUuXG4gICAqIElmIHRoaXMgcmFuZ2UgaGFzIGFuIHVuYm91bmRlZCBlbmQgdGhlbiB7QGNvZGUgY29udGFpbnMoSW5zdGFudCNNQVgpfSByZXR1cm5zIHRydWUuXG4gICAqIElmIHRoaXMgcmFuZ2UgaXMgZW1wdHkgdGhlbiB0aGlzIG1ldGhvZCBhbHdheXMgcmV0dXJucyBmYWxzZS5cbiAgICpcbiAgICogQHBhcmFtIGluc3RhbnQgIHRoZSBpbnN0YW50LCBub3QgbnVsbFxuICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBpbnRlcnZhbCBjb250YWlucyB0aGUgaW5zdGFudFxuICAgKi9cbiAgcHVibGljICBjb250YWlucyhpbnN0YW50OiBJbnN0YW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQuY29tcGFyZVRvKGluc3RhbnQpIDw9IDAgJiYgKGluc3RhbnQuY29tcGFyZVRvKHRoaXMuZW5kKSA8IDAgfHwgdGhpcy5pc1VuYm91bmRlZEVuZCgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhpcyBpbnRlcnZhbCBlbmNsb3NlcyB0aGUgc3BlY2lmaWVkIGludGVydmFsLlxuICAgKiA8cD5cbiAgICogVGhpcyBjaGVja3MgaWYgdGhlIGJvdW5kcyBvZiB0aGUgc3BlY2lmaWVkIGludGVydmFsIGFyZSB3aXRoaW4gdGhlIGJvdW5kcyBvZiB0aGlzIGludGVydmFsLlxuICAgKiBBbiBlbXB0eSBpbnRlcnZhbCBlbmNsb3NlcyBpdHNlbGYuXG4gICAqXG4gICAqIEBwYXJhbSBvdGhlciAgdGhlIG90aGVyIGludGVydmFsLCBub3QgbnVsbFxuICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBpbnRlcnZhbCBjb250YWlucyB0aGUgb3RoZXIgaW50ZXJ2YWxcbiAgICovXG4gIHB1YmxpYyBlbmNsb3NlcyhvdGhlcjogSW50ZXJ2YWwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydC5jb21wYXJlVG8ob3RoZXIuc3RhcnQpIDw9IDAgJiYgb3RoZXIuZW5kLmNvbXBhcmVUbyh0aGlzLmVuZCkgPD0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhpcyBpbnRlcnZhbCBhYnV0cyAoaXMgbmV4dCB0byBvciBoYXMgYSBjb21tb24gYm91bmRhcnkgd2l0aCkgdGhlIHNwZWNpZmllZCBpbnRlcnZhbC5cbiAgICogPHA+XG4gICAqIFRoZSByZXN1bHQgaXMgdHJ1ZSBpZiB0aGUgZW5kIG9mIHRoaXMgaW50ZXJ2YWwgaXMgdGhlIHN0YXJ0IG9mIHRoZSBvdGhlciwgb3IgdmljZSB2ZXJzYS5cbiAgICogQW4gZW1wdHkgaW50ZXJ2YWwgZG9lcyBub3QgYWJ1dCBpdHNlbGYuXG4gICAqXG4gICAqIEBwYXJhbSBvdGhlciAgdGhlIG90aGVyIGludGVydmFsLCBub3QgbnVsbFxuICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBpbnRlcnZhbCBhYnV0cyB0aGUgb3RoZXIgaW50ZXJ2YWxcbiAgICovXG4gIHB1YmxpYyBhYnV0cyhvdGhlcjogSW50ZXJ2YWwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lbmQuZXF1YWxzKG90aGVyLnN0YXJ0KSAhPT0gdGhpcy5zdGFydC5lcXVhbHMob3RoZXIuZW5kKTsgLy8gIT09IG1lYW5zIFhPUlxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGlzIGludGVydmFsIGlzIGNvbm5lY3RlZCB0byB0aGUgc3BlY2lmaWVkIGludGVydmFsLlxuICAgKiA8cD5cbiAgICogVGhlIHJlc3VsdCBpcyB0cnVlIGlmIHRoZSB0d28gaW50ZXJ2YWxzIGhhdmUgYW4gZW5jbG9zZWQgaW50ZXJ2YWwgaW4gY29tbW9uLCBldmVuIGlmIHRoYXQgaW50ZXJ2YWwgaXMgZW1wdHkuXG4gICAqIEFuIGVtcHR5IGludGVydmFsIGlzIGNvbm5lY3RlZCB0byBpdHNlbGYuXG4gICAqIDxwPlxuICAgKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8ge0Bjb2RlIChvdmVybGFwcyhvdGhlcikgfHwgYWJ1dHMob3RoZXIpKX0uXG4gICAqXG4gICAqIEBwYXJhbSBvdGhlciAgdGhlIG90aGVyIGludGVydmFsLCBub3QgbnVsbFxuICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBpbnRlcnZhbCBpcyBjb25uZWN0ZWQgdG8gdGhlIG90aGVyIGludGVydmFsXG4gICAqL1xuICBwdWJsaWMgaXNDb25uZWN0ZWQob3RoZXI6IEludGVydmFsKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZXF1YWxzKG90aGVyKSB8fCAodGhpcy5zdGFydC5jb21wYXJlVG8ob3RoZXIuZW5kKSA8PSAwICYmIG90aGVyLnN0YXJ0LmNvbXBhcmVUbyh0aGlzLmVuZCkgPD0gMCk7XG4gIH1cblxuICAvLyAtLS1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoaXMgaW50ZXJ2YWwgaXMgYWZ0ZXIgdGhlIHNwZWNpZmllZCBpbnN0YW50LlxuICAgKiA8cD5cbiAgICogVGhlIHJlc3VsdCBpcyB0cnVlIGlmIHRoaXMgaW5zdGFudCBzdGFydHMgYWZ0ZXIgdGhlIHNwZWNpZmllZCBpbnN0YW50LlxuICAgKiBBbiBlbXB0eSBpbnRlcnZhbCBiZWhhdmVzIGFzIHRob3VnaCBpdCBpcyBhbiBpbnN0YW50IGZvciBjb21wYXJpc29uIHB1cnBvc2VzLlxuICAgKlxuICAgKiBAcGFyYW0gaW5zdGFudCAgdGhlIG90aGVyIGluc3RhbnQgdG8gY29tcGFyZSB0bywgbm90IG51bGxcbiAgICogQHJldHVybiB0cnVlIGlmIHRoZSBzdGFydCBvZiB0aGlzIGludGVydmFsIGlzIGFmdGVyIHRoZSBzcGVjaWZpZWQgaW5zdGFudFxuICAgKi9cbiAgcHVibGljIGlzQWZ0ZXJJbnN0YW50KGluc3RhbnQ6IEluc3RhbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydC5jb21wYXJlVG8oaW5zdGFudCkgPiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGlzIGludGVydmFsIGlzIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGluc3RhbnQuXG4gICAqIDxwPlxuICAgKiBUaGUgcmVzdWx0IGlzIHRydWUgaWYgdGhpcyBpbnN0YW50IGVuZHMgYmVmb3JlIHRoZSBzcGVjaWZpZWQgaW5zdGFudC5cbiAgICogU2luY2UgaW50ZXJ2YWxzIGRvIG5vdCBpbmNsdWRlIHRoZWlyIGVuZCBwb2ludHMsIHRoaXMgd2lsbCByZXR1cm4gdHJ1ZSBpZiB0aGVcbiAgICogaW5zdGFudCBlcXVhbHMgdGhlIGVuZCBvZiB0aGUgaW50ZXJ2YWwuXG4gICAqIEFuIGVtcHR5IGludGVydmFsIGJlaGF2ZXMgYXMgdGhvdWdoIGl0IGlzIGFuIGluc3RhbnQgZm9yIGNvbXBhcmlzb24gcHVycG9zZXMuXG4gICAqXG4gICAqIEBwYXJhbSBpbnN0YW50ICB0aGUgb3RoZXIgaW5zdGFudCB0byBjb21wYXJlIHRvLCBub3QgbnVsbFxuICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHN0YXJ0IG9mIHRoaXMgaW50ZXJ2YWwgaXMgYmVmb3JlIHRoZSBzcGVjaWZpZWQgaW5zdGFudFxuICAgKi9cbiAgcHVibGljIGlzQmVmb3JlSW5zdGFudChpbnN0YW50OiBJbnN0YW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW5kLmNvbXBhcmVUbyhpbnN0YW50KSA8PSAwICYmIHRoaXMuc3RhcnQuY29tcGFyZVRvKGluc3RhbnQpIDwgMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhpcyBpbnRlcnZhbCBpcyBhZnRlciB0aGUgc3BlY2lmaWVkIGludGVydmFsLlxuICAgKiA8cD5cbiAgICogVGhlIHJlc3VsdCBpcyB0cnVlIGlmIHRoaXMgaW5zdGFudCBzdGFydHMgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgc3BlY2lmaWVkIGludGVydmFsLlxuICAgKiBTaW5jZSBpbnRlcnZhbHMgZG8gbm90IGluY2x1ZGUgdGhlaXIgZW5kIHBvaW50cywgdGhpcyB3aWxsIHJldHVybiB0cnVlIGlmIHRoZVxuICAgKiBpbnN0YW50IGVxdWFscyB0aGUgZW5kIG9mIHRoZSBpbnRlcnZhbC5cbiAgICogQW4gZW1wdHkgaW50ZXJ2YWwgYmVoYXZlcyBhcyB0aG91Z2ggaXQgaXMgYW4gaW5zdGFudCBmb3IgY29tcGFyaXNvbiBwdXJwb3Nlcy5cbiAgICpcbiAgICogQHBhcmFtIGludGVydmFsICB0aGUgb3RoZXIgaW50ZXJ2YWwgdG8gY29tcGFyZSB0bywgbm90IG51bGxcbiAgICogQHJldHVybiB0cnVlIGlmIHRoaXMgaW5zdGFudCBpcyBhZnRlciB0aGUgc3BlY2lmaWVkIGluc3RhbnRcbiAgICovXG4gIHB1YmxpYyBpc0FmdGVyKGludGVydmFsOiBJbnRlcnZhbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0LmNvbXBhcmVUbyhpbnRlcnZhbC5lbmQpID49IDAgJiYgIWludGVydmFsLmVxdWFscyh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhpcyBpbnRlcnZhbCBpcyBiZWZvcmUgdGhlIHNwZWNpZmllZCBpbnRlcnZhbC5cbiAgICogPHA+XG4gICAqIFRoZSByZXN1bHQgaXMgdHJ1ZSBpZiB0aGlzIGluc3RhbnQgZW5kcyBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBzcGVjaWZpZWQgaW50ZXJ2YWwuXG4gICAqIFNpbmNlIGludGVydmFscyBkbyBub3QgaW5jbHVkZSB0aGVpciBlbmQgcG9pbnRzLCB0aGlzIHdpbGwgcmV0dXJuIHRydWUgaWYgdGhlXG4gICAqIHR3byBpbnRlcnZhbHMgYWJ1dC5cbiAgICogQW4gZW1wdHkgaW50ZXJ2YWwgYmVoYXZlcyBhcyB0aG91Z2ggaXQgaXMgYW4gaW5zdGFudCBmb3IgY29tcGFyaXNvbiBwdXJwb3Nlcy5cbiAgICpcbiAgICogQHBhcmFtIGludGVydmFsICB0aGUgb3RoZXIgaW50ZXJ2YWwgdG8gY29tcGFyZSB0bywgbm90IG51bGxcbiAgICogQHJldHVybiB0cnVlIGlmIHRoaXMgaW5zdGFudCBpcyBiZWZvcmUgdGhlIHNwZWNpZmllZCBpbnN0YW50XG4gICAqL1xuICBwdWJsaWMgaXNCZWZvcmUoaW50ZXJ2YWw6IEludGVydmFsKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW5kLmNvbXBhcmVUbyhpbnRlcnZhbC5zdGFydCkgPD0gMCAmJiAhaW50ZXJ2YWwuZXF1YWxzKHRoaXMpO1xuICB9XG5cblxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogRXF1YWxpdHkgJiBIYXNoY29kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoaXMgaW50ZXJ2YWwgaXMgZXF1YWwgdG8gYW5vdGhlciBpbnRlcnZhbC5cbiAgICogPHA+XG4gICAqIENvbXBhcmVzIHRoaXMge0Bjb2RlIEludGVydmFsfSB3aXRoIGFub3RoZXIgZW5zdXJpbmcgdGhhdCB0aGUgdHdvIGluc3RhbnRzIGFyZSB0aGUgc2FtZS5cbiAgICogT25seSBvYmplY3RzIG9mIHR5cGUge0Bjb2RlIEludGVydmFsfSBhcmUgY29tcGFyZWQsIG90aGVyIHR5cGVzIHJldHVybiBmYWxzZS5cbiAgICpcbiAgICogQHBhcmFtIG9iaiAgdGhlIG9iamVjdCB0byBjaGVjaywgbnVsbCByZXR1cm5zIGZhbHNlXG4gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIGlzIGVxdWFsIHRvIHRoZSBvdGhlciBpbnRlcnZhbFxuICAgKi9cbiAgcHVibGljIGVxdWFscyhvYmo6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzID09PSBvYmopIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgSW50ZXJ2YWwpIHtcbiAgICAgIGNvbnN0IG90aGVyID0gPEludGVydmFsPiBvYmo7XG4gICAgICByZXR1cm4gdGhpcy5zdGFydC5lcXVhbHMob3RoZXIuc3RhcnQpICYmIHRoaXMuZW5kLmVxdWFscyhvdGhlci5lbmQpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGFyZXMgdGhpcyBJbnRlcnZhbCB0byB0aGUgZ2l2ZW4gSW50ZXJ2YWwuXG4gICAqIDxwPlxuICAgKiBUaGUgY29tcGFyaXNvbiBpcyBiYXNlZCBvbiB0aGUgdGltZS1saW5lIHBvc2l0aW9uIG9mIHRoZSBsb3dlciBib3VuZCBpbnN0YW50cyAoSW50ZXJ2YWwgc3RhcnQpLlxuICAgKlxuICAgKiBAcGFyYW0gb3RoZXIgdGhlIG90aGVyIEludGVydmFsIHRvIGNvbXBhcmUgdG8sIG5vdCBudWxsXG4gICAqIEByZXR1cm4gdGhlIGNvbXBhcmF0b3IgdmFsdWUsIG5lZ2F0aXZlIGlmIGxlc3MsIHBvc2l0aXZlIGlmIGdyZWF0ZXJcbiAgICogQHRocm93cyBOdWxsUG9pbnRlckV4Y2VwdGlvbiBpZiBvdGhlciBpcyBudWxsXG4gICAqL1xuICBwdWJsaWMgY29tcGFyZVRvKG90aGVyOiBJbnRlcnZhbCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQuY29tcGFyZVRvKG90aGVyLnN0YXJ0KTtcbiAgfVxuXG5cbn1cbiJdfQ==
419
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJ2YWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21tb24vdGltZS9pbnRlcnZhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBa0IsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBUWpELE1BQU0sT0FBTyxRQUFRO0lBR25COzs7O2dGQUk0RTtJQUU1RSxZQUNrQixLQUFjLEVBQ2QsR0FBWTtRQURaLFVBQUssR0FBTCxLQUFLLENBQVM7UUFDZCxRQUFHLEdBQUgsR0FBRyxDQUFTO0lBQzFCLENBQUM7SUFFTDs7OztnRkFJNEU7SUFFNUU7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQ2pCLEdBQW1CO1FBRW5CLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFN0IsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxHQUFHLEdBQUcsQ0FBQyxDQUFDO1NBQ3pFO1FBRUQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV0QyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFeEIsc0VBQXNFO1FBRXRFLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFO1lB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QUksR0FBRyxZQUFZLFFBQVEsRUFBRTtZQUMzQixNQUFNLEtBQUssR0FBYyxHQUFHLENBQUM7WUFDN0IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3JFO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSxTQUFTLENBQUMsS0FBZTtRQUM5QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxDQUFDO0NBR0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RhdGVVdGlsfSBmcm9tICcuL2RhdGUtdXRpbCc7XG5pbXBvcnQge0R1cmF0aW9uLCBJbnN0YW50LCBMb2NhbERhdGUsIG5hdGl2ZUpzLCBQZXJpb2QsIFRlbXBvcmFsQW1vdW50LCBab25lSWR9IGZyb20gJ0Bqcy1qb2RhL2NvcmUnO1xuaW1wb3J0IHtUaW1lVXRpbH0gZnJvbSAnLi90aW1lLXV0aWwnO1xuaW1wb3J0IHtQZXJpb2REdXJhdGlvbn0gZnJvbSAnLi9wZXJpb2QtZHVyYXRpb24nO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gSVNPLTg2MDEgaW50ZXJ2YWwgc3RyaW5nLlxuICogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjVGltZV9pbnRlcnZhbHNcbiAqL1xuZXhwb3J0IHR5cGUgSXNvSW50ZXJ2YWxTdHIgPSBzdHJpbmc7XG5cbmV4cG9ydCBjbGFzcyBJbnRlcnZhbCB7XG5cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQ29uc3RydWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgc3RhcnQ6IEluc3RhbnQsXG4gICAgcHVibGljIHJlYWRvbmx5IGVuZDogSW5zdGFudFxuICApIHsgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBTdGF0aWMgQnVpbGRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBQYXJzZXMgYW4gSVNPLTg2MDEgaW50ZXJ2YWwgc3RyaW5nLlxuICAgKiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSNUaW1lX2ludGVydmFsc1xuICAgKiBAcGFyYW0gaXNvXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHBhcnNlKFxuICAgIGlzbzogSXNvSW50ZXJ2YWxTdHJcbiAgKTogSW50ZXJ2YWwge1xuICAgIGNvbnN0IHBhcnRzID0gaXNvLnNwbGl0KCcvJyk7XG5cbiAgICBpZiAocGFydHMubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBnaXZlbiBzdHJpbmcgaXMgbm90IGEgdmFsaWQgaXNvIGludGVydmFsOiAnICsgaXNvKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydCA9IEluc3RhbnQucGFyc2UocGFydHNbMF0pO1xuXG4gICAgY29uc3QgZW5kU3RyID0gcGFydHNbMV07XG5cbiAgICAvLyBUaGUgJ2VuZCcgcGFydCBjYW4gZWl0aGVyIGJlIGFuIGluc3RhbnQgb3IgYSBkdXJhdGlvbiBpbiBpc28gZm9ybWF0XG5cbiAgICBpZiAoZW5kU3RyLnN0YXJ0c1dpdGgoJ1AnKSB8fCBlbmRTdHIuc3RhcnRzV2l0aCgnLVAnKSkge1xuXG4gICAgICBjb25zdCBkdXJhdGlvbiA9IER1cmF0aW9uLnBhcnNlKGVuZFN0cik7XG5cbiAgICAgIHJldHVybiBJbnRlcnZhbC5vZlN0YXJ0QW5kT2Zmc2V0KFxuICAgICAgICBzdGFydCxcbiAgICAgICAgZHVyYXRpb25cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBJbnRlcnZhbC5vZihcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIEluc3RhbnQucGFyc2UoZW5kU3RyKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHllc3RlcmRheSh6b25lSWQ6IFpvbmVJZCk6IEludGVydmFsIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwub2ZEYXkoXG4gICAgICBMb2NhbERhdGUubm93KCkubWludXNEYXlzKDEpLFxuICAgICAgem9uZUlkXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgIHRvbW9ycm93KHpvbmVJZDogWm9uZUlkKTogSW50ZXJ2YWwge1xuICAgIHJldHVybiBJbnRlcnZhbC5vZkRheShcbiAgICAgIExvY2FsRGF0ZS5ub3coKS5wbHVzRGF5cygxKSxcbiAgICAgIHpvbmVJZFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHRvZGF5KHpvbmVJZDogWm9uZUlkKTogSW50ZXJ2YWwge1xuICAgIHJldHVybiBJbnRlcnZhbC5vZkRheShMb2NhbERhdGUubm93KCksIHpvbmVJZCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIEludGVydmFsIGZyb20gYSBEYXRlIGJ5IHNwcmVhZGluZyBpdCB0byB0aGUgYmVnaW4gYW5kIGVuZCBvZiBpdHMgZGF5LlxuICAgKiBAcGFyYW0gZGF0ZSBEYXRlIHRvIHNwcmVhZFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBvZkRheURhdGUoZGF0ZTogRGF0ZSk6IEludGVydmFsIHtcbiAgICBjb25zdCBsb2NhbERhdGUgPSBMb2NhbERhdGUuZnJvbShuYXRpdmVKcyhkYXRlKSk7XG4gICAgcmV0dXJuIEludGVydmFsLm9mRGF5KGxvY2FsRGF0ZSwgWm9uZUlkLnN5c3RlbURlZmF1bHQoKSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIG9mRGF5KGRheTogTG9jYWxEYXRlLCB6b25lSWQ6IFpvbmVJZCk6IEludGVydmFsIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwuYmV0d2VlbkRheXMoXG4gICAgICBkYXksXG4gICAgICBkYXkucGx1c0RheXMoMSksXG4gICAgICB6b25lSWRcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBiZXR3ZWVuRGF5cyhcbiAgICBzdGFydERheUluY2x1c2l2ZTogTG9jYWxEYXRlLFxuICAgIGVuZERheUV4Y2x1c2l2ZTogTG9jYWxEYXRlLFxuICAgIHpvbmVJZDogWm9uZUlkXG4gICkge1xuICAgIHJldHVybiBJbnRlcnZhbC5vZihcbiAgICAgIHN0YXJ0RGF5SW5jbHVzaXZlLmF0U3RhcnRPZkRheSh6b25lSWQpLnRvSW5zdGFudCgpLFxuICAgICAgZW5kRGF5RXhjbHVzaXZlLmF0U3RhcnRPZkRheSh6b25lSWQpLnRvSW5zdGFudCgpXG4gICAgKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnRlcnZhbCB3aXRoIHRoZSBnaXZlbiBzdGFydCB0aW1lIHBvaW50XG4gICAqIGFuZCBhIG9mZnNldCBmcm9tIHRoZSBzdGFydC5cbiAgICpcbiAgICogTm90ZSB0aGF0IHlvdSBzaG91bGQgdXNlIFBlcmlvZCBmb3IgZGF5cyB0byBhY2NvdW50IGZvciB6b25lIHNwZWNpZmljXG4gICAqIHRoaW5ncyBsaWtlIGRheWxpZ2h0IHNhdmluZy5cbiAgICpcbiAgICogQHBhcmFtIHN0YXJ0SW5jbHVzaXZlXG4gICAqIEBwYXJhbSBvZmZzZXRFeGNsdXNpdmUgQSBQZXJpb2Qgb3IgRHVyYXRpb24gb2Zmc2V0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBvZlN0YXJ0QW5kT2Zmc2V0KHN0YXJ0SW5jbHVzaXZlOiBJbnN0YW50LCBvZmZzZXRFeGNsdXNpdmU6IFRlbXBvcmFsQW1vdW50KTogSW50ZXJ2YWwge1xuICAgIHJldHVybiBJbnRlcnZhbC5vZihcbiAgICAgIHN0YXJ0SW5jbHVzaXZlLFxuICAgICAgc3RhcnRJbmNsdXNpdmUucGx1cyhvZmZzZXRFeGNsdXNpdmUpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgb2YoXG4gICAgc3RhcnRJbmNsdXNpdmU6IEluc3RhbnQsXG4gICAgZW5kRXhjbHVzaXZlOiBJbnN0YW50XG4gICk6IEludGVydmFsIHtcbiAgICByZXR1cm4gbmV3IEludGVydmFsKFxuICAgICAgc3RhcnRJbmNsdXNpdmUsXG4gICAgICBlbmRFeGNsdXNpdmVcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBvZkRhdGUoXG4gICAgc3RhcnRJbmNsdXNpdmU6IERhdGUgfCBzdHJpbmcsXG4gICAgZW5kRXhjbHVzaXZlOiBEYXRlIHwgc3RyaW5nXG4gICk6IEludGVydmFsIHtcbiAgICByZXR1cm4gbmV3IEludGVydmFsKFxuICAgICAgVGltZVV0aWwuaW5zdGFudChzdGFydEluY2x1c2l2ZSksXG4gICAgICBUaW1lVXRpbC5pbnN0YW50KGVuZEV4Y2x1c2l2ZSlcbiAgICApO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByb3BlcnRpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgcmFuZ2UgaXMgZW1wdHkuXG4gICAqIDxwPlxuICAgKiBBbiBlbXB0eSByYW5nZSBvY2N1cnMgd2hlbiB0aGUgc3RhcnQgZGF0ZSBlcXVhbHMgdGhlIGluY2x1c2l2ZSBlbmQgZGF0ZS5cbiAgICpcbiAgICogQHJldHVybiB0cnVlIGlmIHRoZSByYW5nZSBpcyBlbXB0eVxuICAgKi9cbiAgcHVibGljIGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQuZXF1YWxzKHRoaXMuZW5kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHN0YXJ0IG9mIHRoZSBpbnRlcnZhbCBpcyB1bmJvdW5kZWQuXG4gICAqXG4gICAqIEByZXR1cm4gdHJ1ZSBpZiBzdGFydCBpcyB1bmJvdW5kZWRcbiAgICovXG4gIHB1YmxpYyBpc1VuYm91bmRlZFN0YXJ0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0LmVxdWFscyhJbnN0YW50Lk1JTik7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBlbmQgb2YgdGhlIGludGVydmFsIGlzIHVuYm91bmRlZC5cbiAgICpcbiAgICogQHJldHVybiB0cnVlIGlmIGVuZCBpcyB1bmJvdW5kZWRcbiAgICovXG4gIHB1YmxpYyBpc1VuYm91bmRlZEVuZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lbmQuZXF1YWxzKEluc3RhbnQuTUFYKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyB0b0R1cmF0aW9uKCk6IER1cmF0aW9uIHtcbiAgICByZXR1cm4gRHVyYXRpb24uYmV0d2Vlbih0aGlzLnN0YXJ0LCB0aGlzLmVuZCk7XG4gIH1cblxuICBwdWJsaWMgdG9QZXJpb2REdXJhdGlvbih6b25lOiBab25lSWQpOiBQZXJpb2REdXJhdGlvbiB7XG4gICAgcmV0dXJuIFBlcmlvZER1cmF0aW9uLmJldHdlZW4oXG4gICAgICB0aGlzLnN0YXJ0LmF0Wm9uZSh6b25lKSxcbiAgICAgIHRoaXMuZW5kLmF0Wm9uZSh6b25lKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgdG9TdHJpbmcoKTogSXNvSW50ZXJ2YWxTdHIge1xuICAgIHJldHVybiB0aGlzLnRvRHVyYXRpb25TdHJpbmcoKTtcbiAgfVxuXG4gIHB1YmxpYyB0b0luc3RhbnRTdHJpbmcoKTogSXNvSW50ZXJ2YWxTdHIge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0LnRvU3RyaW5nKCkgKyAnLycgKyB0aGlzLmVuZC50b1N0cmluZygpO1xuICB9XG5cbiAgcHVibGljIHRvRHVyYXRpb25TdHJpbmcoKTogSXNvSW50ZXJ2YWxTdHIge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0LnRvU3RyaW5nKCkgKyAnLycgKyB0aGlzLnRvRHVyYXRpb24oKS50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBNb2RpZmljYXRpb24gQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBjb3B5IG9mIHRoaXMgcmFuZ2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHN0YXJ0IGluc3RhbnQuXG4gICAqXG4gICAqIEBwYXJhbSBzdGFydCAgdGhlIHN0YXJ0IGluc3RhbnQgZm9yIHRoZSBuZXcgaW50ZXJ2YWwsIG5vdCBudWxsXG4gICAqIEByZXR1cm4gYW4gaW50ZXJ2YWwgd2l0aCB0aGUgZW5kIGZyb20gdGhpcyBpbnRlcnZhbCBhbmQgdGhlIHNwZWNpZmllZCBzdGFydFxuICAgKiBAdGhyb3dzIERhdGVUaW1lRXhjZXB0aW9uIGlmIHRoZSByZXN1bHRpbmcgaW50ZXJ2YWwgaGFzIGVuZCBiZWZvcmUgc3RhcnRcbiAgICovXG4gIHB1YmxpYyB3aXRoU3RhcnQoc3RhcnQ6IEluc3RhbnQpOiBJbnRlcnZhbCB7XG4gICAgcmV0dXJuIEludGVydmFsLm9mKHN0YXJ0LCB0aGlzLmVuZCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGNvcHkgb2YgdGhpcyByYW5nZSB3aXRoIHRoZSBzcGVjaWZpZWQgZW5kIGluc3RhbnQuXG4gICAqXG4gICAqIEBwYXJhbSBlbmQgIHRoZSBlbmQgaW5zdGFudCBmb3IgdGhlIG5ldyBpbnRlcnZhbCwgbm90IG51bGxcbiAgICogQHJldHVybiBhbiBpbnRlcnZhbCB3aXRoIHRoZSBzdGFydCBmcm9tIHRoaXMgaW50ZXJ2YWwgYW5kIHRoZSBzcGVjaWZpZWQgZW5kXG4gICAqIEB0aHJvd3MgRGF0ZVRpbWVFeGNlcHRpb24gaWYgdGhlIHJlc3VsdGluZyBpbnRlcnZhbCBoYXMgZW5kIGJlZm9yZSBzdGFydFxuICAgKi9cbiAgcHVibGljIHdpdGhFbmQoZW5kOiBJbnN0YW50KTogSW50ZXJ2YWwge1xuICAgIHJldHVybiBJbnRlcnZhbC5vZih0aGlzLnN0YXJ0LCBlbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIGludGVydmFsIHRoYXQgaXMgdGhlIGludGVyc2VjdGlvbiBvZiB0aGlzIGludGVydmFsIGFuZCB0aGUgc3BlY2lmaWVkIGludGVydmFsLlxuICAgKiA8cD5cbiAgICogVGhpcyBmaW5kcyB0aGUgaW50ZXJzZWN0aW9uIG9mIHR3byBpbnRlcnZhbHMuXG4gICAqIFRoaXMgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgdHdvIGludGVydmFscyBhcmUgbm90IHtAbGlua3BsYWluICNpc0Nvbm5lY3RlZChJbnRlcnZhbCkgY29ubmVjdGVkfS5cbiAgICpcbiAgICogQHBhcmFtIG90aGVyICB0aGUgb3RoZXIgaW50ZXJ2YWwgdG8gY2hlY2sgZm9yLCBub3QgbnVsbFxuICAgKiBAcmV0dXJuIHRoZSBpbnRlcnZhbCB0aGF0IGlzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHR3byBpbnRlcnZhbHNcbiAgICogQHRocm93cyBEYXRlVGltZUV4Y2VwdGlvbiBpZiB0aGUgaW50ZXJ2YWxzIGRvIG5vdCBjb25uZWN0XG4gICAqL1xuICBwdWJsaWMgaW50ZXJzZWN0aW9uKG90aGVyOiBJbnRlcnZhbCk6IEludGVydmFsIHtcbiAgICBpZiAodGhpcy5pc0Nvbm5lY3RlZChvdGhlcikgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVydmFscyBkbyBub3QgY29ubmVjdDogJyArIHRoaXMgKyAnIGFuZCAnICsgb3RoZXIpO1xuICAgIH1cbiAgICBjb25zdCBjbXBTdGFydCA9IHRoaXMuc3RhcnQuY29tcGFyZVRvKG90aGVyLnN0YXJ0KTtcbiAgICBjb25zdCBjbXBFbmQgPSB0aGlzLmVuZC5jb21wYXJlVG8ob3RoZXIuZW5kKTtcbiAgICBpZiAoY21wU3RhcnQgPj0gMCAmJiBjbXBFbmQgPD0gMCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIGlmIChjbXBTdGFydCA8PSAwICYmIGNtcEVuZCA+PSAwKSB7XG4gICAgICByZXR1cm4gb3RoZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5ld1N0YXJ0ID0gKGNtcFN0YXJ0ID49IDAgPyB0aGlzLnN0YXJ0IDogb3RoZXIuc3RhcnQpO1xuICAgICAgY29uc3QgbmV3RW5kID0gKGNtcEVuZCA8PSAwID8gdGhpcy5lbmQgOiBvdGhlci5lbmQpO1xuICAgICAgcmV0dXJuIEludGVydmFsLm9mKG5ld1N0YXJ0LCBuZXdFbmQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBpbnRlcnZhbCB0aGF0IGlzIHRoZSB1bmlvbiBvZiB0aGlzIGludGVydmFsIGFuZCB0aGUgc3BlY2lmaWVkIGludGVydmFsLlxuICAgKiA8cD5cbiAgICogVGhpcyBmaW5kcyB0aGUgdW5pb24gb2YgdHdvIGludGVydmFscy5cbiAgICogVGhpcyB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZSB0d28gaW50ZXJ2YWxzIGFyZSBub3Qge0BsaW5rcGxhaW4gI2lzQ29ubmVjdGVkKEludGVydmFsKSBjb25uZWN0ZWR9LlxuICAgKlxuICAgKiBAcGFyYW0gb3RoZXIgIHRoZSBvdGhlciBpbnRlcnZhbCB0byBjaGVjayBmb3IsIG5vdCBudWxsXG4gICAqIEByZXR1cm4gdGhlIGludGVydmFsIHRoYXQgaXMgdGhlIHVuaW9uIG9mIHRoZSB0d28gaW50ZXJ2YWxzXG4gICAqIEB0aHJvd3MgRGF0ZVRpbWVFeGNlcHRpb24gaWYgdGhlIGludGVydmFscyBkbyBub3QgY29ubmVjdFxuICAgKi9cbiAgcHVibGljIHVuaW9uKG90aGVyOiBJbnRlcnZhbCk6IEludGVydmFsIHtcbiAgICBpZiAodGhpcy5pc0Nvbm5lY3RlZChvdGhlcikgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVydmFscyBkbyBub3QgY29ubmVjdDogJyArIHRoaXMgKyAnIGFuZCAnICsgb3RoZXIpO1xuICAgIH1cbiAgICBjb25zdCBjbXBTdGFydCA9IHRoaXMuc3RhcnQuY29tcGFyZVRvKG90aGVyLnN0YXJ0KTtcbiAgICBjb25zdCBjbXBFbmQgPSB0aGlzLmVuZC5jb21wYXJlVG8ob3RoZXIuZW5kKTtcbiAgICBpZiAoY21wU3RhcnQgPj0gMCAmJiBjbXBFbmQgPD0gMCkge1xuICAgICAgcmV0dXJuIG90aGVyO1xuICAgIH0gZWxzZSBpZiAoY21wU3RhcnQgPD0gMCAmJiBjbXBFbmQgPj0gMCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5ld1N0YXJ0ID0gKGNtcFN0YXJ0ID49IDAgPyBvdGhlci5zdGFydCA6IHRoaXMuc3RhcnQpO1xuICAgICAgY29uc3QgbmV3RW5kID0gKGNtcEVuZCA8PSAwID8gb3RoZXIuZW5kIDogdGhpcy5lbmQpO1xuICAgICAgcmV0dXJuIEludGVydmFsLm9mKG5ld1N0YXJ0LCBuZXdFbmQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBzbWFsbGVzdCBpbnRlcnZhbCB0aGF0IGVuY2xvc2VzIHRoaXMgaW50ZXJ2YWwgYW5kIHRoZSBzcGVjaWZpZWQgaW50ZXJ2YWwuXG4gICAqIDxwPlxuICAgKiBUaGUgcmVzdWx0IG9mIHRoaXMgbWV0aG9kIHdpbGwge0BsaW5rcGxhaW4gI2VuY2xvc2VzKEludGVydmFsKSBlbmNsb3NlfVxuICAgKiB0aGlzIGludGVydmFsIGFuZCB0aGUgc3BlY2lmaWVkIGludGVydmFsLlxuICAgKlxuICAgKiBAcGFyYW0gb3RoZXIgIHRoZSBvdGhlciBpbnRlcnZhbCB0byBjaGVjayBmb3IsIG5vdCBudWxsXG4gICAqIEByZXR1cm4gdGhlIGludGVydmFsIHRoYXQgc3BhbnMgdGhlIHR3byBpbnRlcnZhbHNcbiAgICovXG4gIHB1YmxpYyBzcGFuKG90aGVyOiBJbnRlcnZhbCk6IEludGVydmFsIHtcbiAgICBjb25zdCBjbXBTdGFydCA9IHRoaXMuc3RhcnQuY29tcGFyZVRvKG90aGVyLnN0YXJ0KTtcbiAgICBjb25zdCBjbXBFbmQgPSB0aGlzLmVuZC5jb21wYXJlVG8ob3RoZXIuZW5kKTtcbiAgICBjb25zdCBuZXdTdGFydCA9IChjbXBTdGFydCA+PSAwID8gb3RoZXIuc3RhcnQgOiB0aGlzLnN0YXJ0KTtcbiAgICBjb25zdCBuZXdFbmQgPSAoY21wRW5kIDw9IDAgPyBvdGhlci5lbmQgOiB0aGlzLmVuZCk7XG4gICAgcmV0dXJuIEludGVydmFsLm9mKG5ld1N0YXJ0LCBuZXdFbmQpO1xuICB9XG5cblxuICAvKipcbiAgICogU2hpZnQgdGhlIHdob2xlIGludGVydmFsIGJ5IHRoZSBnaXZlbiBkYXlzIHBlcmlvZC5cbiAgICogQHBhcmFtIGRheXNcbiAgICovXG4gIHB1YmxpYyBzaGlmdERheXMoZGF5czogbnVtYmVyKTogSW50ZXJ2YWwge1xuICAgIHJldHVybiB0aGlzLnNoaWZ0KFBlcmlvZC5vZkRheXMoZGF5cykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNoaWZ0IHRoZSB3aG9sZSBpbnRlcnZhbCBieSB0aGUgZ2l2ZW4gdGVtcG9yYWwgYW1vdW50LlxuICAgKiBOb3RlIHRoYXQgb25seSBQZXJpb2Qgd2lsbCBhY2NvdW50IGZvciB6b25lIHNwZWNpZmljIHRoaW5ncyBzdWNoIGFzIGRheWxpZ2h0IHNhdmluZ3MuXG4gICAqIFVzZSBEdXJhdGlvbiBvbmx5IGlmIHlvdSBhcmUgYmVsb3cgZGF5cy5cbiAgICogQHBhcmFtIG9mZnNldFxuICAgKi9cbiAgcHVibGljIHNoaWZ0KG9mZnNldDogVGVtcG9yYWxBbW91bnQpOiBJbnRlcnZhbCB7XG4gICAgcmV0dXJuIEludGVydmFsLm9mKFxuICAgICAgdGhpcy5zdGFydC5wbHVzKG9mZnNldCksXG4gICAgICB0aGlzLmVuZC5wbHVzKG9mZnNldClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG1vdmVTdGFydChvZmZzZXQ6IFRlbXBvcmFsQW1vdW50KTogSW50ZXJ2YWwge1xuICAgIHJldHVybiBJbnRlcnZhbC5vZihcbiAgICAgIHRoaXMuc3RhcnQucGx1cyhvZmZzZXQpLFxuICAgICAgdGhpcy5lbmRcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG1vdmVFbmQob2Zmc2V0OiBUZW1wb3JhbEFtb3VudCk6IEludGVydmFsIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwub2YoXG4gICAgICB0aGlzLnN0YXJ0LFxuICAgICAgdGhpcy5lbmQucGx1cyhvZmZzZXQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBJbnRlcnZhbCBRdWVyeSBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gVGltZUZyYW1lIG92ZXJsYXBzIHdpdGggdGhpcyBvbmUuXG4gICAqXG4gICAqIEBwYXJhbSBvdGhlciBUaW1lRnJhbWUgdG8gY2hlY2sgYWdhaW5zdFxuICAgKiBAcmV0dXJuIFJldHVybnMge0Bjb2RlIHRydWV9IGlmIHRoZSB0d28gY2FuZGlkYXRlcyBvdmVybGFwLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHB1YmxpYyBvdmVybGFwcyhvdGhlcjogSW50ZXJ2YWwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gb3RoZXIuZXF1YWxzKHRoaXMpIHx8ICh0aGlzLnN0YXJ0LmNvbXBhcmVUbyhvdGhlci5lbmQpIDwgMCAmJiBvdGhlci5zdGFydC5jb21wYXJlVG8odGhpcy5lbmQpIDwgMCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGl0IHRoZSBnaXZlbiBsb2NhbERhdGUgb3ZlcmxhcHMgd2l0aCB0aGUgZ2l2ZW4gVGltZUZyYW1lLlxuICAgKlxuICAgKiBAcGFyYW0gdGltZUZyYW1lIFRpbWVGcmFtZSB0byBjaGVjayBhZ2FpbnN0XG4gICAqIEBwYXJhbSBsb2NhbERhdGUgTG9jYWxEYXRlIHRvIGNoZWNrXG4gICAqL1xuICBwdWJsaWMgb3ZlcmxhcHNXaXRoTG9jYWxEYXRlKFxuICAgIGxvY2FsRGF0ZTogRGF0ZVxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vdmVybGFwcyhJbnRlcnZhbC5vZkRheURhdGUobG9jYWxEYXRlKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoaXMgaW50ZXJ2YWwgY29udGFpbnMgdGhlIHNwZWNpZmllZCBpbnN0YW50LlxuICAgKiA8cD5cbiAgICogVGhpcyBjaGVja3MgaWYgdGhlIHNwZWNpZmllZCBpbnN0YW50IGlzIHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoaXMgaW50ZXJ2YWwuXG4gICAqIElmIHRoaXMgcmFuZ2UgaGFzIGFuIHVuYm91bmRlZCBzdGFydCB0aGVuIHtAY29kZSBjb250YWlucyhJbnN0YW50I01JTil9IHJldHVybnMgdHJ1ZS5cbiAgICogSWYgdGhpcyByYW5nZSBoYXMgYW4gdW5ib3VuZGVkIGVuZCB0aGVuIHtAY29kZSBjb250YWlucyhJbnN0YW50I01BWCl9IHJldHVybnMgdHJ1ZS5cbiAgICogSWYgdGhpcyByYW5nZSBpcyBlbXB0eSB0aGVuIHRoaXMgbWV0aG9kIGFsd2F5cyByZXR1cm5zIGZhbHNlLlxuICAgKlxuICAgKiBAcGFyYW0gaW5zdGFudCAgdGhlIGluc3RhbnQsIG5vdCBudWxsXG4gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIGludGVydmFsIGNvbnRhaW5zIHRoZSBpbnN0YW50XG4gICAqL1xuICBwdWJsaWMgIGNvbnRhaW5zKGluc3RhbnQ6IEluc3RhbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydC5jb21wYXJlVG8oaW5zdGFudCkgPD0gMCAmJiAoaW5zdGFudC5jb21wYXJlVG8odGhpcy5lbmQpIDwgMCB8fCB0aGlzLmlzVW5ib3VuZGVkRW5kKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGlzIGludGVydmFsIGVuY2xvc2VzIHRoZSBzcGVjaWZpZWQgaW50ZXJ2YWwuXG4gICAqIDxwPlxuICAgKiBUaGlzIGNoZWNrcyBpZiB0aGUgYm91bmRzIG9mIHRoZSBzcGVjaWZpZWQgaW50ZXJ2YWwgYXJlIHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoaXMgaW50ZXJ2YWwuXG4gICAqIEFuIGVtcHR5IGludGVydmFsIGVuY2xvc2VzIGl0c2VsZi5cbiAgICpcbiAgICogQHBhcmFtIG90aGVyICB0aGUgb3RoZXIgaW50ZXJ2YWwsIG5vdCBudWxsXG4gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIGludGVydmFsIGNvbnRhaW5zIHRoZSBvdGhlciBpbnRlcnZhbFxuICAgKi9cbiAgcHVibGljIGVuY2xvc2VzKG90aGVyOiBJbnRlcnZhbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0LmNvbXBhcmVUbyhvdGhlci5zdGFydCkgPD0gMCAmJiBvdGhlci5lbmQuY29tcGFyZVRvKHRoaXMuZW5kKSA8PSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGlzIGludGVydmFsIGFidXRzIChpcyBuZXh0IHRvIG9yIGhhcyBhIGNvbW1vbiBib3VuZGFyeSB3aXRoKSB0aGUgc3BlY2lmaWVkIGludGVydmFsLlxuICAgKiA8cD5cbiAgICogVGhlIHJlc3VsdCBpcyB0cnVlIGlmIHRoZSBlbmQgb2YgdGhpcyBpbnRlcnZhbCBpcyB0aGUgc3RhcnQgb2YgdGhlIG90aGVyLCBvciB2aWNlIHZlcnNhLlxuICAgKiBBbiBlbXB0eSBpbnRlcnZhbCBkb2VzIG5vdCBhYnV0IGl0c2VsZi5cbiAgICpcbiAgICogQHBhcmFtIG90aGVyICB0aGUgb3RoZXIgaW50ZXJ2YWwsIG5vdCBudWxsXG4gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIGludGVydmFsIGFidXRzIHRoZSBvdGhlciBpbnRlcnZhbFxuICAgKi9cbiAgcHVibGljIGFidXRzKG90aGVyOiBJbnRlcnZhbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVuZC5lcXVhbHMob3RoZXIuc3RhcnQpICE9PSB0aGlzLnN0YXJ0LmVxdWFscyhvdGhlci5lbmQpOyAvLyAhPT0gbWVhbnMgWE9SXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoaXMgaW50ZXJ2YWwgaXMgY29ubmVjdGVkIHRvIHRoZSBzcGVjaWZpZWQgaW50ZXJ2YWwuXG4gICAqIDxwPlxuICAgKiBUaGUgcmVzdWx0IGlzIHRydWUgaWYgdGhlIHR3byBpbnRlcnZhbHMgaGF2ZSBhbiBlbmNsb3NlZCBpbnRlcnZhbCBpbiBjb21tb24sIGV2ZW4gaWYgdGhhdCBpbnRlcnZhbCBpcyBlbXB0eS5cbiAgICogQW4gZW1wdHkgaW50ZXJ2YWwgaXMgY29ubmVjdGVkIHRvIGl0c2VsZi5cbiAgICogPHA+XG4gICAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byB7QGNvZGUgKG92ZXJsYXBzKG90aGVyKSB8fCBhYnV0cyhvdGhlcikpfS5cbiAgICpcbiAgICogQHBhcmFtIG90aGVyICB0aGUgb3RoZXIgaW50ZXJ2YWwsIG5vdCBudWxsXG4gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIGludGVydmFsIGlzIGNvbm5lY3RlZCB0byB0aGUgb3RoZXIgaW50ZXJ2YWxcbiAgICovXG4gIHB1YmxpYyBpc0Nvbm5lY3RlZChvdGhlcjogSW50ZXJ2YWwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lcXVhbHMob3RoZXIpIHx8ICh0aGlzLnN0YXJ0LmNvbXBhcmVUbyhvdGhlci5lbmQpIDw9IDAgJiYgb3RoZXIuc3RhcnQuY29tcGFyZVRvKHRoaXMuZW5kKSA8PSAwKTtcbiAgfVxuXG4gIC8vIC0tLVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhpcyBpbnRlcnZhbCBpcyBhZnRlciB0aGUgc3BlY2lmaWVkIGluc3RhbnQuXG4gICAqIDxwPlxuICAgKiBUaGUgcmVzdWx0IGlzIHRydWUgaWYgdGhpcyBpbnN0YW50IHN0YXJ0cyBhZnRlciB0aGUgc3BlY2lmaWVkIGluc3RhbnQuXG4gICAqIEFuIGVtcHR5IGludGVydmFsIGJlaGF2ZXMgYXMgdGhvdWdoIGl0IGlzIGFuIGluc3RhbnQgZm9yIGNvbXBhcmlzb24gcHVycG9zZXMuXG4gICAqXG4gICAqIEBwYXJhbSBpbnN0YW50ICB0aGUgb3RoZXIgaW5zdGFudCB0byBjb21wYXJlIHRvLCBub3QgbnVsbFxuICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHN0YXJ0IG9mIHRoaXMgaW50ZXJ2YWwgaXMgYWZ0ZXIgdGhlIHNwZWNpZmllZCBpbnN0YW50XG4gICAqL1xuICBwdWJsaWMgaXNBZnRlckluc3RhbnQoaW5zdGFudDogSW5zdGFudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0LmNvbXBhcmVUbyhpbnN0YW50KSA+IDA7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoaXMgaW50ZXJ2YWwgaXMgYmVmb3JlIHRoZSBzcGVjaWZpZWQgaW5zdGFudC5cbiAgICogPHA+XG4gICAqIFRoZSByZXN1bHQgaXMgdHJ1ZSBpZiB0aGlzIGluc3RhbnQgZW5kcyBiZWZvcmUgdGhlIHNwZWNpZmllZCBpbnN0YW50LlxuICAgKiBTaW5jZSBpbnRlcnZhbHMgZG8gbm90IGluY2x1ZGUgdGhlaXIgZW5kIHBvaW50cywgdGhpcyB3aWxsIHJldHVybiB0cnVlIGlmIHRoZVxuICAgKiBpbnN0YW50IGVxdWFscyB0aGUgZW5kIG9mIHRoZSBpbnRlcnZhbC5cbiAgICogQW4gZW1wdHkgaW50ZXJ2YWwgYmVoYXZlcyBhcyB0aG91Z2ggaXQgaXMgYW4gaW5zdGFudCBmb3IgY29tcGFyaXNvbiBwdXJwb3Nlcy5cbiAgICpcbiAgICogQHBhcmFtIGluc3RhbnQgIHRoZSBvdGhlciBpbnN0YW50IHRvIGNvbXBhcmUgdG8sIG5vdCBudWxsXG4gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgc3RhcnQgb2YgdGhpcyBpbnRlcnZhbCBpcyBiZWZvcmUgdGhlIHNwZWNpZmllZCBpbnN0YW50XG4gICAqL1xuICBwdWJsaWMgaXNCZWZvcmVJbnN0YW50KGluc3RhbnQ6IEluc3RhbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lbmQuY29tcGFyZVRvKGluc3RhbnQpIDw9IDAgJiYgdGhpcy5zdGFydC5jb21wYXJlVG8oaW5zdGFudCkgPCAwO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGlzIGludGVydmFsIGlzIGFmdGVyIHRoZSBzcGVjaWZpZWQgaW50ZXJ2YWwuXG4gICAqIDxwPlxuICAgKiBUaGUgcmVzdWx0IGlzIHRydWUgaWYgdGhpcyBpbnN0YW50IHN0YXJ0cyBhZnRlciB0aGUgZW5kIG9mIHRoZSBzcGVjaWZpZWQgaW50ZXJ2YWwuXG4gICAqIFNpbmNlIGludGVydmFscyBkbyBub3QgaW5jbHVkZSB0aGVpciBlbmQgcG9pbnRzLCB0aGlzIHdpbGwgcmV0dXJuIHRydWUgaWYgdGhlXG4gICAqIGluc3RhbnQgZXF1YWxzIHRoZSBlbmQgb2YgdGhlIGludGVydmFsLlxuICAgKiBBbiBlbXB0eSBpbnRlcnZhbCBiZWhhdmVzIGFzIHRob3VnaCBpdCBpcyBhbiBpbnN0YW50IGZvciBjb21wYXJpc29uIHB1cnBvc2VzLlxuICAgKlxuICAgKiBAcGFyYW0gaW50ZXJ2YWwgIHRoZSBvdGhlciBpbnRlcnZhbCB0byBjb21wYXJlIHRvLCBub3QgbnVsbFxuICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBpbnN0YW50IGlzIGFmdGVyIHRoZSBzcGVjaWZpZWQgaW5zdGFudFxuICAgKi9cbiAgcHVibGljIGlzQWZ0ZXIoaW50ZXJ2YWw6IEludGVydmFsKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQuY29tcGFyZVRvKGludGVydmFsLmVuZCkgPj0gMCAmJiAhaW50ZXJ2YWwuZXF1YWxzKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGlzIGludGVydmFsIGlzIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGludGVydmFsLlxuICAgKiA8cD5cbiAgICogVGhlIHJlc3VsdCBpcyB0cnVlIGlmIHRoaXMgaW5zdGFudCBlbmRzIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIHNwZWNpZmllZCBpbnRlcnZhbC5cbiAgICogU2luY2UgaW50ZXJ2YWxzIGRvIG5vdCBpbmNsdWRlIHRoZWlyIGVuZCBwb2ludHMsIHRoaXMgd2lsbCByZXR1cm4gdHJ1ZSBpZiB0aGVcbiAgICogdHdvIGludGVydmFscyBhYnV0LlxuICAgKiBBbiBlbXB0eSBpbnRlcnZhbCBiZWhhdmVzIGFzIHRob3VnaCBpdCBpcyBhbiBpbnN0YW50IGZvciBjb21wYXJpc29uIHB1cnBvc2VzLlxuICAgKlxuICAgKiBAcGFyYW0gaW50ZXJ2YWwgIHRoZSBvdGhlciBpbnRlcnZhbCB0byBjb21wYXJlIHRvLCBub3QgbnVsbFxuICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBpbnN0YW50IGlzIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGluc3RhbnRcbiAgICovXG4gIHB1YmxpYyBpc0JlZm9yZShpbnRlcnZhbDogSW50ZXJ2YWwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lbmQuY29tcGFyZVRvKGludGVydmFsLnN0YXJ0KSA8PSAwICYmICFpbnRlcnZhbC5lcXVhbHModGhpcyk7XG4gIH1cblxuXG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBFcXVhbGl0eSAmIEhhc2hjb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhpcyBpbnRlcnZhbCBpcyBlcXVhbCB0byBhbm90aGVyIGludGVydmFsLlxuICAgKiA8cD5cbiAgICogQ29tcGFyZXMgdGhpcyB7QGNvZGUgSW50ZXJ2YWx9IHdpdGggYW5vdGhlciBlbnN1cmluZyB0aGF0IHRoZSB0d28gaW5zdGFudHMgYXJlIHRoZSBzYW1lLlxuICAgKiBPbmx5IG9iamVjdHMgb2YgdHlwZSB7QGNvZGUgSW50ZXJ2YWx9IGFyZSBjb21wYXJlZCwgb3RoZXIgdHlwZXMgcmV0dXJuIGZhbHNlLlxuICAgKlxuICAgKiBAcGFyYW0gb2JqICB0aGUgb2JqZWN0IHRvIGNoZWNrLCBudWxsIHJldHVybnMgZmFsc2VcbiAgICogQHJldHVybiB0cnVlIGlmIHRoaXMgaXMgZXF1YWwgdG8gdGhlIG90aGVyIGludGVydmFsXG4gICAqL1xuICBwdWJsaWMgZXF1YWxzKG9iajogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMgPT09IG9iaikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbnRlcnZhbCkge1xuICAgICAgY29uc3Qgb3RoZXIgPSA8SW50ZXJ2YWw+IG9iajtcbiAgICAgIHJldHVybiB0aGlzLnN0YXJ0LmVxdWFscyhvdGhlci5zdGFydCkgJiYgdGhpcy5lbmQuZXF1YWxzKG90aGVyLmVuZCk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wYXJlcyB0aGlzIEludGVydmFsIHRvIHRoZSBnaXZlbiBJbnRlcnZhbC5cbiAgICogPHA+XG4gICAqIFRoZSBjb21wYXJpc29uIGlzIGJhc2VkIG9uIHRoZSB0aW1lLWxpbmUgcG9zaXRpb24gb2YgdGhlIGxvd2VyIGJvdW5kIGluc3RhbnRzIChJbnRlcnZhbCBzdGFydCkuXG4gICAqXG4gICAqIEBwYXJhbSBvdGhlciB0aGUgb3RoZXIgSW50ZXJ2YWwgdG8gY29tcGFyZSB0bywgbm90IG51bGxcbiAgICogQHJldHVybiB0aGUgY29tcGFyYXRvciB2YWx1ZSwgbmVnYXRpdmUgaWYgbGVzcywgcG9zaXRpdmUgaWYgZ3JlYXRlclxuICAgKiBAdGhyb3dzIE51bGxQb2ludGVyRXhjZXB0aW9uIGlmIG90aGVyIGlzIG51bGxcbiAgICovXG4gIHB1YmxpYyBjb21wYXJlVG8ob3RoZXI6IEludGVydmFsKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydC5jb21wYXJlVG8ob3RoZXIuc3RhcnQpO1xuICB9XG5cblxufVxuIl19
@@ -1,4 +1,4 @@
1
- import { Instant, LocalDate, ZoneId } from '@js-joda/core';
1
+ import { Instant, LocalDate, nativeJs, ZoneId } from '@js-joda/core';
2
2
  export class TimeUtil {
3
3
  /**
4
4
  * Returns an instant for a javascript date / iso date string.
@@ -6,20 +6,23 @@ export class TimeUtil {
6
6
  */
7
7
  static instant(date) {
8
8
  if (date instanceof Date) {
9
- return Instant.ofEpochMilli(date.getTime());
9
+ return Instant.from(TimeUtil.temporalAccessor(date));
10
10
  }
11
11
  else {
12
12
  return Instant.parse(date);
13
13
  }
14
14
  }
15
+ static dateToLocalDate(date) {
16
+ return LocalDate.from(TimeUtil.temporalAccessor(date));
17
+ }
18
+ static temporalAccessor(date) {
19
+ return nativeJs(date);
20
+ }
15
21
  static date(instant) {
16
22
  const d = new Date(0); // The 0 there is the key, which sets the date to the epoch
17
23
  d.setUTCMilliseconds(instant.toEpochMilli());
18
24
  return d;
19
25
  }
20
- static dateToLocalDate(date) {
21
- return LocalDate.of(date.getFullYear(), date.getMonth() + 1, date.getDate());
22
- }
23
26
  static localDateToDate(localDate, zone = ZoneId.systemDefault()) {
24
27
  return new Date(localDate.year(), localDate.monthValue() - 1, localDate.dayOfMonth(), 0, 0, 0, 0);
25
28
  }
@@ -35,4 +38,4 @@ export class TimeUtil {
35
38
  }
36
39
  }
37
40
  TimeUtil.SECONDS_PER_DAY = 86400;
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS11dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tbW9uL3RpbWUvdGltZS11dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVyxPQUFPLEVBQUUsU0FBUyxFQUFpQixNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFbEYsTUFBTSxPQUFPLFFBQVE7SUFJbkI7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFtQjtRQUN2QyxJQUFJLElBQUksWUFBWSxJQUFJLEVBQUU7WUFDeEIsT0FBTyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1NBQzdDO2FBQU07WUFDTCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBRU0sTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFnQjtRQUNqQyxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDJEQUEyRDtRQUNsRixDQUFDLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDN0MsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRU0sTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFVO1FBQ3RDLE9BQU8sU0FBUyxDQUFDLEVBQUUsQ0FDakIsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUNsQixJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUNuQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQ2YsQ0FBQztJQUNKLENBQUM7SUFFTSxNQUFNLENBQUMsZUFBZSxDQUFDLFNBQW9CLEVBQUUsSUFBSSxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUU7UUFDL0UsT0FBTyxJQUFJLElBQUksQ0FDYixTQUFTLENBQUMsSUFBSSxFQUFFLEVBQ2hCLFNBQVMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLEVBQzFCLFNBQVMsQ0FBQyxVQUFVLEVBQUUsRUFDdEIsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUNYLENBQUM7SUFDSixDQUFDO0lBRU0sTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFrQjtRQUN6QyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztRQUN4RCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBbUI7UUFDNUMsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQztlQUNyQixJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQztlQUNuQixJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztlQUNqQixJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUNuQjtJQUNMLENBQUM7O0FBaERzQix3QkFBZSxHQUFHLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RHVyYXRpb24sIEluc3RhbnQsIExvY2FsRGF0ZSwgWm9uZWREYXRlVGltZSwgWm9uZUlkfSBmcm9tICdAanMtam9kYS9jb3JlJztcblxuZXhwb3J0IGNsYXNzIFRpbWVVdGlsIHtcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNFQ09ORFNfUEVSX0RBWSA9IDg2NDAwO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGluc3RhbnQgZm9yIGEgamF2YXNjcmlwdCBkYXRlIC8gaXNvIGRhdGUgc3RyaW5nLlxuICAgKiBAcGFyYW0gZGF0ZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpbnN0YW50KGRhdGU6IERhdGUgfCBzdHJpbmcpOiBJbnN0YW50IHtcbiAgICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHJldHVybiBJbnN0YW50Lm9mRXBvY2hNaWxsaShkYXRlLmdldFRpbWUoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBJbnN0YW50LnBhcnNlKGRhdGUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZGF0ZShpbnN0YW50OiBJbnN0YW50KTogRGF0ZSB7XG4gICAgY29uc3QgZCA9IG5ldyBEYXRlKDApOyAvLyBUaGUgMCB0aGVyZSBpcyB0aGUga2V5LCB3aGljaCBzZXRzIHRoZSBkYXRlIHRvIHRoZSBlcG9jaFxuICAgIGQuc2V0VVRDTWlsbGlzZWNvbmRzKGluc3RhbnQudG9FcG9jaE1pbGxpKCkpO1xuICAgIHJldHVybiBkO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBkYXRlVG9Mb2NhbERhdGUoZGF0ZTogRGF0ZSk6IExvY2FsRGF0ZSB7XG4gICAgcmV0dXJuIExvY2FsRGF0ZS5vZihcbiAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgIGRhdGUuZ2V0TW9udGgoKSArIDEsXG4gICAgICBkYXRlLmdldERhdGUoKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGxvY2FsRGF0ZVRvRGF0ZShsb2NhbERhdGU6IExvY2FsRGF0ZSwgem9uZSA9IFpvbmVJZC5zeXN0ZW1EZWZhdWx0KCkpOiBEYXRlIHtcbiAgICByZXR1cm4gbmV3IERhdGUoXG4gICAgICBsb2NhbERhdGUueWVhcigpLFxuICAgICAgbG9jYWxEYXRlLm1vbnRoVmFsdWUoKSAtIDEsXG4gICAgICBsb2NhbERhdGUuZGF5T2ZNb250aCgpLFxuICAgICAgMCwgMCwgMCwgMFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzRnVsbERheXMoZHVyYXRpb246IER1cmF0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgciA9IGR1cmF0aW9uLnNlY29uZHMoKSAlIFRpbWVVdGlsLlNFQ09ORFNfUEVSX0RBWTtcbiAgICByZXR1cm4gciA9PT0gMDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaXNTdGFydE9mRGF5KGRhdGU6IFpvbmVkRGF0ZVRpbWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZGF0ZS5zZWNvbmQoKSA9PT0gMFxuICAgICAgJiYgZGF0ZS5taW51dGUoKSA9PT0gMFxuICAgICAgJiYgZGF0ZS5ob3VyKCkgPT09IDBcbiAgICAgICYmIGRhdGUubmFubygpID09PSAwXG4gICAgICA7XG4gIH1cbn1cbiJdfQ==
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS11dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tbW9uL3RpbWUvdGltZS11dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBbUMsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTlHLE1BQU0sT0FBTyxRQUFRO0lBSW5COzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBbUI7UUFDdkMsSUFBSSxJQUFJLFlBQVksSUFBSSxFQUFFO1lBQ3hCLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUN0RDthQUFNO1lBQ0wsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzVCO0lBQ0gsQ0FBQztJQUVNLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBVTtRQUN0QyxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVNLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFVO1FBQ3ZDLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFTSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQWdCO1FBQ2pDLE1BQU0sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMkRBQTJEO1FBQ2xGLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUM3QyxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFTSxNQUFNLENBQUMsZUFBZSxDQUFDLFNBQW9CLEVBQUUsSUFBSSxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUU7UUFDL0UsT0FBTyxJQUFJLElBQUksQ0FDYixTQUFTLENBQUMsSUFBSSxFQUFFLEVBQ2hCLFNBQVMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLEVBQzFCLFNBQVMsQ0FBQyxVQUFVLEVBQUUsRUFDdEIsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUNYLENBQUM7SUFDSixDQUFDO0lBRU0sTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFrQjtRQUN6QyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztRQUN4RCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBbUI7UUFDNUMsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQztlQUNyQixJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQztlQUNuQixJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztlQUNqQixJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUNuQjtJQUNMLENBQUM7O0FBaERzQix3QkFBZSxHQUFHLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RHVyYXRpb24sIEluc3RhbnQsIExvY2FsRGF0ZSwgbmF0aXZlSnMsIFRlbXBvcmFsQWNjZXNzb3IsIFpvbmVkRGF0ZVRpbWUsIFpvbmVJZH0gZnJvbSAnQGpzLWpvZGEvY29yZSc7XG5cbmV4cG9ydCBjbGFzcyBUaW1lVXRpbCB7XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTRUNPTkRTX1BFUl9EQVkgPSA4NjQwMDtcblxuICAvKipcbiAgICogUmV0dXJucyBhbiBpbnN0YW50IGZvciBhIGphdmFzY3JpcHQgZGF0ZSAvIGlzbyBkYXRlIHN0cmluZy5cbiAgICogQHBhcmFtIGRhdGVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaW5zdGFudChkYXRlOiBEYXRlIHwgc3RyaW5nKTogSW5zdGFudCB7XG4gICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXR1cm4gSW5zdGFudC5mcm9tKFRpbWVVdGlsLnRlbXBvcmFsQWNjZXNzb3IoZGF0ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gSW5zdGFudC5wYXJzZShkYXRlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGRhdGVUb0xvY2FsRGF0ZShkYXRlOiBEYXRlKTogTG9jYWxEYXRlIHtcbiAgICByZXR1cm4gTG9jYWxEYXRlLmZyb20oVGltZVV0aWwudGVtcG9yYWxBY2Nlc3NvcihkYXRlKSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHRlbXBvcmFsQWNjZXNzb3IoZGF0ZTogRGF0ZSk6IFRlbXBvcmFsQWNjZXNzb3Ige1xuICAgIHJldHVybiBuYXRpdmVKcyhkYXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZGF0ZShpbnN0YW50OiBJbnN0YW50KTogRGF0ZSB7XG4gICAgY29uc3QgZCA9IG5ldyBEYXRlKDApOyAvLyBUaGUgMCB0aGVyZSBpcyB0aGUga2V5LCB3aGljaCBzZXRzIHRoZSBkYXRlIHRvIHRoZSBlcG9jaFxuICAgIGQuc2V0VVRDTWlsbGlzZWNvbmRzKGluc3RhbnQudG9FcG9jaE1pbGxpKCkpO1xuICAgIHJldHVybiBkO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBsb2NhbERhdGVUb0RhdGUobG9jYWxEYXRlOiBMb2NhbERhdGUsIHpvbmUgPSBab25lSWQuc3lzdGVtRGVmYXVsdCgpKTogRGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKFxuICAgICAgbG9jYWxEYXRlLnllYXIoKSxcbiAgICAgIGxvY2FsRGF0ZS5tb250aFZhbHVlKCkgLSAxLFxuICAgICAgbG9jYWxEYXRlLmRheU9mTW9udGgoKSxcbiAgICAgIDAsIDAsIDAsIDBcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc0Z1bGxEYXlzKGR1cmF0aW9uOiBEdXJhdGlvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHIgPSBkdXJhdGlvbi5zZWNvbmRzKCkgJSBUaW1lVXRpbC5TRUNPTkRTX1BFUl9EQVk7XG4gICAgcmV0dXJuIHIgPT09IDA7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzU3RhcnRPZkRheShkYXRlOiBab25lZERhdGVUaW1lKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGRhdGUuc2Vjb25kKCkgPT09IDBcbiAgICAgICYmIGRhdGUubWludXRlKCkgPT09IDBcbiAgICAgICYmIGRhdGUuaG91cigpID09PSAwXG4gICAgICAmJiBkYXRlLm5hbm8oKSA9PT0gMFxuICAgICAgO1xuICB9XG59XG4iXX0=
@@ -108,9 +108,9 @@ export class ElderUrlFragmentParamsService {
108
108
  }
109
109
  }
110
110
  }
111
- ElderUrlFragmentParamsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ElderUrlFragmentParamsService, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable });
112
- ElderUrlFragmentParamsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ElderUrlFragmentParamsService, providedIn: 'root' });
113
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ElderUrlFragmentParamsService, decorators: [{
111
+ ElderUrlFragmentParamsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ElderUrlFragmentParamsService, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable });
112
+ ElderUrlFragmentParamsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ElderUrlFragmentParamsService, providedIn: 'root' });
113
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ElderUrlFragmentParamsService, decorators: [{
114
114
  type: Injectable,
115
115
  args: [{
116
116
  providedIn: 'root'
@@ -8,9 +8,9 @@ export class ElderAccessDeniedComponent {
8
8
  ngOnInit() {
9
9
  }
10
10
  }
11
- ElderAccessDeniedComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ElderAccessDeniedComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12
- ElderAccessDeniedComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: ElderAccessDeniedComponent, selector: "elder-access-denied, ebs-access-denied", ngImport: i0, template: "\n<div fxLayout=\"column\" class=\"padding\" fxFlex>\n <mat-card>\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\">\n <mat-icon color=\"warn\">warning</mat-icon>\n <span>You do not have the permission to access this resource.</span>\n </div>\n </mat-card>\n</div>\n\n\n\n", styles: [".padding{padding:10px}\n"], components: [{ type: i1.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i3.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i3.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i3.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
13
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ElderAccessDeniedComponent, decorators: [{
11
+ ElderAccessDeniedComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ElderAccessDeniedComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12
+ ElderAccessDeniedComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: ElderAccessDeniedComponent, selector: "elder-access-denied, ebs-access-denied", ngImport: i0, template: "\n<div fxLayout=\"column\" class=\"padding\" fxFlex>\n <mat-card>\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\">\n <mat-icon color=\"warn\">warning</mat-icon>\n <span>You do not have the permission to access this resource.</span>\n </div>\n </mat-card>\n</div>\n\n\n\n", styles: [".padding{padding:10px}\n"], components: [{ type: i1.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i3.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i3.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i3.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ElderAccessDeniedComponent, decorators: [{
14
14
  type: Component,
15
15
  args: [{ selector: 'elder-access-denied, ebs-access-denied', changeDetection: ChangeDetectionStrategy.OnPush, template: "\n<div fxLayout=\"column\" class=\"padding\" fxFlex>\n <mat-card>\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\">\n <mat-icon color=\"warn\">warning</mat-icon>\n <span>You do not have the permission to access this resource.</span>\n </div>\n </mat-card>\n</div>\n\n\n\n", styles: [".padding{padding:10px}\n"] }]
16
16
  }], ctorParameters: function () { return []; } });
@@ -8,16 +8,16 @@ import * as i0 from "@angular/core";
8
8
  export { ElderAccessDeniedComponent } from './elder-access-denied.component';
9
9
  export class ElderAccessDeniedModule {
10
10
  }
11
- ElderAccessDeniedModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ElderAccessDeniedModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
12
- ElderAccessDeniedModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ElderAccessDeniedModule, declarations: [ElderAccessDeniedComponent], imports: [CommonModule,
11
+ ElderAccessDeniedModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ElderAccessDeniedModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
12
+ ElderAccessDeniedModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ElderAccessDeniedModule, declarations: [ElderAccessDeniedComponent], imports: [CommonModule,
13
13
  MatIconModule, MatCardModule,
14
14
  FlexLayoutModule], exports: [ElderAccessDeniedComponent] });
15
- ElderAccessDeniedModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ElderAccessDeniedModule, imports: [[
15
+ ElderAccessDeniedModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ElderAccessDeniedModule, imports: [[
16
16
  CommonModule,
17
17
  MatIconModule, MatCardModule,
18
18
  FlexLayoutModule
19
19
  ]] });
20
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ElderAccessDeniedModule, decorators: [{
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ElderAccessDeniedModule, decorators: [{
21
21
  type: NgModule,
22
22
  args: [{
23
23
  declarations: [
@@ -25,9 +25,9 @@ export class ElderAuditedEntityComponent {
25
25
  this.auditedCtx$.next(new AuditedEntityCtx(audited));
26
26
  }
27
27
  }
28
- ElderAuditedEntityComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ElderAuditedEntityComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
29
- ElderAuditedEntityComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: ElderAuditedEntityComponent, selector: "elder-audited-entity", inputs: { layout: "layout", appearance: "appearance", audited: "audited" }, ngImport: i0, template: "<section [fxLayout]=\"layout\" fxLayoutGap=\"8px\" *ngIf=\"auditedCtx$ | async as ctx\">\n\n <mat-form-field class=\"elder-std-form-field\" [appearance]=\"appearance\">\n <mat-label fxLayoutAlign=\"start center\" fxLayoutGap=\"4px\">\n <mat-icon class=\"decent noselect\" inline>add_circle_outline</mat-icon>\n <span>{{'context.createdAt' | translate}} {{ctx.audited?.createdAt | timeAgo}}</span>\n </mat-label>\n <input matInput name=\"created\"\n [value]=\"ctx.audited?.createdAt | date:'dd.MM.yyyy hh:mm'\"\n readonly>\n <mat-hint>{{ctx.audited?.createdBy}}</mat-hint>\n </mat-form-field>\n\n <mat-form-field class=\"elder-std-form-field\" [appearance]=\"appearance\">\n <mat-label fxLayoutAlign=\"start center\" fxLayoutGap=\"4px\">\n <mat-icon class=\"decent noselect\">mode_edit_outline</mat-icon>\n <span>{{'context.modifiedAt' | translate}} {{ctx.audited?.modifiedAt | timeAgo}}</span>\n </mat-label>\n <input matInput name=\"modified\"\n [value]=\"ctx.audited?.modifiedAt | date:'dd.MM.yyyy hh:mm'\"\n readonly>\n <mat-hint>{{ctx.audited?.modifiedBy}}</mat-hint>\n </mat-form-field>\n\n</section>\n", styles: [".decent{opacity:.5}\n"], components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { type: i4.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i1.MatLabel, selector: "mat-label" }, { type: i4.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }], pipes: { "async": i3.AsyncPipe, "translate": i6.TranslatePipe, "timeAgo": i7.TimeAgoPipe, "date": i3.DatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
30
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ElderAuditedEntityComponent, decorators: [{
28
+ ElderAuditedEntityComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ElderAuditedEntityComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
29
+ ElderAuditedEntityComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: ElderAuditedEntityComponent, selector: "elder-audited-entity", inputs: { layout: "layout", appearance: "appearance", audited: "audited" }, ngImport: i0, template: "<section [fxLayout]=\"layout\" fxLayoutGap=\"8px\" *ngIf=\"auditedCtx$ | async as ctx\">\n\n <mat-form-field class=\"elder-std-form-field\" [appearance]=\"appearance\">\n <mat-label fxLayoutAlign=\"start center\" fxLayoutGap=\"4px\">\n <mat-icon class=\"decent noselect\" inline>add_circle_outline</mat-icon>\n <span>{{'context.createdAt' | translate}} {{ctx.audited?.createdAt | timeAgo}}</span>\n </mat-label>\n <input matInput name=\"created\"\n [value]=\"ctx.audited?.createdAt | date:'dd.MM.yyyy hh:mm'\"\n readonly>\n <mat-hint>{{ctx.audited?.createdBy}}</mat-hint>\n </mat-form-field>\n\n <mat-form-field class=\"elder-std-form-field\" [appearance]=\"appearance\">\n <mat-label fxLayoutAlign=\"start center\" fxLayoutGap=\"4px\">\n <mat-icon class=\"decent noselect\">mode_edit_outline</mat-icon>\n <span>{{'context.modifiedAt' | translate}} {{ctx.audited?.modifiedAt | timeAgo}}</span>\n </mat-label>\n <input matInput name=\"modified\"\n [value]=\"ctx.audited?.modifiedAt | date:'dd.MM.yyyy hh:mm'\"\n readonly>\n <mat-hint>{{ctx.audited?.modifiedBy}}</mat-hint>\n </mat-form-field>\n\n</section>\n", styles: [".decent{opacity:.5}\n"], components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { type: i4.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i1.MatLabel, selector: "mat-label" }, { type: i4.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }], pipes: { "async": i3.AsyncPipe, "translate": i6.TranslatePipe, "timeAgo": i7.TimeAgoPipe, "date": i3.DatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ElderAuditedEntityComponent, decorators: [{
31
31
  type: Component,
32
32
  args: [{ selector: 'elder-audited-entity', changeDetection: ChangeDetectionStrategy.OnPush, template: "<section [fxLayout]=\"layout\" fxLayoutGap=\"8px\" *ngIf=\"auditedCtx$ | async as ctx\">\n\n <mat-form-field class=\"elder-std-form-field\" [appearance]=\"appearance\">\n <mat-label fxLayoutAlign=\"start center\" fxLayoutGap=\"4px\">\n <mat-icon class=\"decent noselect\" inline>add_circle_outline</mat-icon>\n <span>{{'context.createdAt' | translate}} {{ctx.audited?.createdAt | timeAgo}}</span>\n </mat-label>\n <input matInput name=\"created\"\n [value]=\"ctx.audited?.createdAt | date:'dd.MM.yyyy hh:mm'\"\n readonly>\n <mat-hint>{{ctx.audited?.createdBy}}</mat-hint>\n </mat-form-field>\n\n <mat-form-field class=\"elder-std-form-field\" [appearance]=\"appearance\">\n <mat-label fxLayoutAlign=\"start center\" fxLayoutGap=\"4px\">\n <mat-icon class=\"decent noselect\">mode_edit_outline</mat-icon>\n <span>{{'context.modifiedAt' | translate}} {{ctx.audited?.modifiedAt | timeAgo}}</span>\n </mat-label>\n <input matInput name=\"modified\"\n [value]=\"ctx.audited?.modifiedAt | date:'dd.MM.yyyy hh:mm'\"\n readonly>\n <mat-hint>{{ctx.audited?.modifiedBy}}</mat-hint>\n </mat-form-field>\n\n</section>\n", styles: [".decent{opacity:.5}\n"] }]
33
33
  }], ctorParameters: function () { return []; }, propDecorators: { layout: [{
@@ -11,14 +11,14 @@ export * from './i-audited-entity';
11
11
  export * from './audited-entity/elder-audited-entity.component';
12
12
  export class ElderAuditModule {
13
13
  }
14
- ElderAuditModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ElderAuditModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
15
- ElderAuditModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ElderAuditModule, declarations: [ElderAuditedEntityComponent], imports: [CommonModule,
14
+ ElderAuditModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ElderAuditModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
15
+ ElderAuditModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ElderAuditModule, declarations: [ElderAuditedEntityComponent], imports: [CommonModule,
16
16
  FlexModule,
17
17
  MatInputModule,
18
18
  TranslateModule,
19
19
  ElderPipesModule,
20
20
  MatIconModule], exports: [ElderAuditedEntityComponent] });
21
- ElderAuditModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ElderAuditModule, imports: [[
21
+ ElderAuditModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ElderAuditModule, imports: [[
22
22
  CommonModule,
23
23
  FlexModule,
24
24
  MatInputModule,
@@ -26,7 +26,7 @@ ElderAuditModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", versio
26
26
  ElderPipesModule,
27
27
  MatIconModule
28
28
  ]] });
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ElderAuditModule, decorators: [{
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ElderAuditModule, decorators: [{
30
30
  type: NgModule,
31
31
  args: [{
32
32
  declarations: [
@@ -7,9 +7,9 @@ export class ElderButtonGroupComponent {
7
7
  ngOnInit() {
8
8
  }
9
9
  }
10
- ElderButtonGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ElderButtonGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11
- ElderButtonGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: ElderButtonGroupComponent, selector: "elder-button-group", ngImport: i0, template: "<div class=\"elder-button-group\" fxLayout=\"row\">\n <ng-content></ng-content>\n</div>\n", styles: [""], directives: [{ type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ElderButtonGroupComponent, decorators: [{
10
+ ElderButtonGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ElderButtonGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11
+ ElderButtonGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: ElderButtonGroupComponent, selector: "elder-button-group", ngImport: i0, template: "<div class=\"elder-button-group\" fxLayout=\"row\">\n <ng-content></ng-content>\n</div>\n", styles: [""], directives: [{ type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ElderButtonGroupComponent, decorators: [{
13
13
  type: Component,
14
14
  args: [{ selector: 'elder-button-group', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"elder-button-group\" fxLayout=\"row\">\n <ng-content></ng-content>\n</div>\n", styles: [""] }]
15
15
  }], ctorParameters: function () { return []; } });
@@ -9,20 +9,20 @@ import * as i0 from "@angular/core";
9
9
  export * from './elder-button-group/elder-button-group.component';
10
10
  export class ElderButtonGroupModule {
11
11
  }
12
- ElderButtonGroupModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ElderButtonGroupModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
13
- ElderButtonGroupModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ElderButtonGroupModule, declarations: [ElderButtonGroupComponent], imports: [CommonModule,
12
+ ElderButtonGroupModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ElderButtonGroupModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
13
+ ElderButtonGroupModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ElderButtonGroupModule, declarations: [ElderButtonGroupComponent], imports: [CommonModule,
14
14
  MatMenuModule,
15
15
  MatIconModule,
16
16
  MatButtonModule,
17
17
  FlexModule], exports: [ElderButtonGroupComponent] });
18
- ElderButtonGroupModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ElderButtonGroupModule, imports: [[
18
+ ElderButtonGroupModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ElderButtonGroupModule, imports: [[
19
19
  CommonModule,
20
20
  MatMenuModule,
21
21
  MatIconModule,
22
22
  MatButtonModule,
23
23
  FlexModule
24
24
  ]] });
25
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ElderButtonGroupModule, decorators: [{
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ElderButtonGroupModule, decorators: [{
26
26
  type: NgModule,
27
27
  args: [{
28
28
  declarations: [ElderButtonGroupComponent],