@coreui/angular-pro 4.4.12 → 4.5.1

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 (532) hide show
  1. package/README.md +2 -2
  2. package/{esm2020 → esm2022}/lib/accordion/accordion/accordion.component.mjs +4 -4
  3. package/{esm2020 → esm2022}/lib/accordion/accordion-button/accordion-button.directive.mjs +4 -4
  4. package/{esm2020 → esm2022}/lib/accordion/accordion-item/accordion-item.component.mjs +4 -4
  5. package/esm2022/lib/accordion/accordion.module.mjs +36 -0
  6. package/{esm2020 → esm2022}/lib/accordion/accordion.service.mjs +4 -4
  7. package/{esm2020 → esm2022}/lib/alert/alert-heading.directive.mjs +4 -4
  8. package/{esm2020 → esm2022}/lib/alert/alert-link.directive.mjs +4 -4
  9. package/esm2022/lib/alert/alert.component.mjs +181 -0
  10. package/esm2022/lib/alert/alert.module.mjs +30 -0
  11. package/{esm2020 → esm2022}/lib/avatar/avatar.component.mjs +4 -4
  12. package/esm2022/lib/avatar/avatar.module.mjs +20 -0
  13. package/{esm2020 → esm2022}/lib/backdrop/backdrop.service.mjs +4 -4
  14. package/{esm2020 → esm2022}/lib/badge/badge.component.mjs +4 -4
  15. package/esm2022/lib/badge/badge.module.mjs +20 -0
  16. package/{esm2020 → esm2022}/lib/breadcrumb/breadcrumb/breadcrumb.component.mjs +4 -4
  17. package/{esm2020 → esm2022}/lib/breadcrumb/breadcrumb-item/breadcrumb-item.component.mjs +4 -4
  18. package/{esm2020 → esm2022}/lib/breadcrumb/breadcrumb-router/breadcrumb-router.component.mjs +4 -4
  19. package/esm2022/lib/breadcrumb/breadcrumb-router/breadcrumb-router.service.mjs +52 -0
  20. package/esm2022/lib/breadcrumb/breadcrumb.module.mjs +34 -0
  21. package/{esm2020 → esm2022}/lib/button/button-close.directive.mjs +4 -4
  22. package/{esm2020 → esm2022}/lib/button/button.directive.mjs +4 -4
  23. package/{esm2020 → esm2022}/lib/button/button.module.mjs +7 -7
  24. package/{esm2020 → esm2022}/lib/button-group/button-group/button-group.component.mjs +4 -4
  25. package/esm2022/lib/button-group/button-group.module.mjs +17 -0
  26. package/{esm2020 → esm2022}/lib/button-group/button-toolbar/button-toolbar.component.mjs +4 -4
  27. package/{esm2020 → esm2022}/lib/calendar/calendar/calendar-class-view.pipe.mjs +4 -4
  28. package/{esm2020 → esm2022}/lib/calendar/calendar/calendar.component.mjs +4 -4
  29. package/{esm2020 → esm2022}/lib/calendar/calendar-month/calendar-class-day.pipe.mjs +4 -4
  30. package/{esm2020 → esm2022}/lib/calendar/calendar-month/calendar-class-month.pipe.mjs +4 -4
  31. package/{esm2020 → esm2022}/lib/calendar/calendar-month/calendar-class-year.pipe.mjs +4 -4
  32. package/{esm2020 → esm2022}/lib/calendar/calendar-month/calendar-day-title.pipe.mjs +4 -4
  33. package/{esm2020 → esm2022}/lib/calendar/calendar-month/calendar-day.directive.mjs +4 -4
  34. package/{esm2020 → esm2022}/lib/calendar/calendar-month/calendar-day.pipe.mjs +4 -4
  35. package/{esm2020 → esm2022}/lib/calendar/calendar-month/calendar-month.component.mjs +4 -4
  36. package/{esm2020 → esm2022}/lib/calendar/calendar-month/calendar-weekday.pipe.mjs +4 -4
  37. package/{esm2020 → esm2022}/lib/calendar/calendar-navigation/calendar-navigation.component.mjs +4 -4
  38. package/esm2022/lib/calendar/calendar.module.mjs +54 -0
  39. package/{esm2020 → esm2022}/lib/calendar/calendar.service.mjs +4 -4
  40. package/{esm2020 → esm2022}/lib/callout/callout.component.mjs +4 -4
  41. package/esm2022/lib/callout/callout.module.mjs +16 -0
  42. package/{esm2020 → esm2022}/lib/card/card-body.component.mjs +4 -4
  43. package/{esm2020 → esm2022}/lib/card/card-footer.component.mjs +4 -4
  44. package/{esm2020 → esm2022}/lib/card/card-group.component.mjs +4 -4
  45. package/{esm2020 → esm2022}/lib/card/card-header-actions.component.mjs +4 -4
  46. package/{esm2020 → esm2022}/lib/card/card-header.component.mjs +4 -4
  47. package/{esm2020 → esm2022}/lib/card/card-img-overlay/card-img-overlay.component.mjs +4 -4
  48. package/{esm2020 → esm2022}/lib/card/card-img.directive.mjs +4 -4
  49. package/{esm2020 → esm2022}/lib/card/card-link.directive.mjs +4 -4
  50. package/{esm2020 → esm2022}/lib/card/card-subtitle.directive.mjs +4 -4
  51. package/{esm2020 → esm2022}/lib/card/card-text.directive.mjs +4 -4
  52. package/{esm2020 → esm2022}/lib/card/card-title.directive.mjs +4 -4
  53. package/{esm2020 → esm2022}/lib/card/card.component.mjs +4 -4
  54. package/esm2022/lib/card/card.module.mjs +75 -0
  55. package/{esm2020 → esm2022}/lib/carousel/carousel/carousel.component.mjs +4 -4
  56. package/{esm2020 → esm2022}/lib/carousel/carousel-caption/carousel-caption.component.mjs +4 -4
  57. package/{esm2020 → esm2022}/lib/carousel/carousel-control/carousel-control.component.mjs +4 -4
  58. package/{esm2020 → esm2022}/lib/carousel/carousel-indicators/carousel-indicators.component.mjs +4 -4
  59. package/{esm2020 → esm2022}/lib/carousel/carousel-inner/carousel-inner.component.mjs +4 -4
  60. package/{esm2020 → esm2022}/lib/carousel/carousel-item/carousel-item.component.mjs +4 -4
  61. package/{esm2020 → esm2022}/lib/carousel/carousel-state.mjs +4 -4
  62. package/{esm2020 → esm2022}/lib/carousel/carousel.config.mjs +4 -4
  63. package/esm2022/lib/carousel/carousel.module.mjs +52 -0
  64. package/{esm2020 → esm2022}/lib/carousel/carousel.service.mjs +4 -4
  65. package/{esm2020 → esm2022}/lib/collapse/collapse.directive.mjs +4 -4
  66. package/{esm2020 → esm2022}/lib/collapse/collapse.module.mjs +5 -5
  67. package/esm2022/lib/date-picker/date-picker.component.mjs +93 -0
  68. package/{esm2020 → esm2022}/lib/date-picker/date-picker.module.mjs +5 -5
  69. package/esm2022/lib/date-range-picker/date-range-picker/date-range-picker.component.mjs +675 -0
  70. package/{esm2020 → esm2022}/lib/date-range-picker/date-range-picker.module.mjs +5 -5
  71. package/{esm2020 → esm2022}/lib/dropdown/dropdown/dropdown.component.mjs +7 -7
  72. package/{esm2020 → esm2022}/lib/dropdown/dropdown-close/dropdown-close.directive.mjs +4 -4
  73. package/{esm2020 → esm2022}/lib/dropdown/dropdown-divider/dropdown-divider.directive.mjs +4 -4
  74. package/{esm2020 → esm2022}/lib/dropdown/dropdown-header/dropdown-header.directive.mjs +4 -4
  75. package/{esm2020 → esm2022}/lib/dropdown/dropdown-item/dropdown-item-plain.directive.mjs +4 -4
  76. package/{esm2020 → esm2022}/lib/dropdown/dropdown-item/dropdown-item.directive.mjs +4 -4
  77. package/{esm2020 → esm2022}/lib/dropdown/dropdown-menu/dropdown-menu.directive.mjs +4 -4
  78. package/esm2022/lib/dropdown/dropdown.module.mjs +56 -0
  79. package/{esm2020 → esm2022}/lib/dropdown/dropdown.service.mjs +4 -4
  80. package/esm2022/lib/element-cover/element-cover.component.mjs +68 -0
  81. package/esm2022/lib/element-cover/element-cover.module.mjs +16 -0
  82. package/{esm2020 → esm2022}/lib/footer/footer.component.mjs +4 -4
  83. package/esm2022/lib/footer/footer.module.mjs +16 -0
  84. package/{esm2020 → esm2022}/lib/form/form/form.directive.mjs +4 -4
  85. package/{esm2020 → esm2022}/lib/form/form-check/form-check-input.directive.mjs +4 -4
  86. package/{esm2020 → esm2022}/lib/form/form-check/form-check-label.directive.mjs +4 -4
  87. package/{esm2020 → esm2022}/lib/form/form-check/form-check.component.mjs +4 -4
  88. package/{esm2020 → esm2022}/lib/form/form-control/form-control.directive.mjs +4 -4
  89. package/{esm2020 → esm2022}/lib/form/form-feedback/form-feedback.component.mjs +4 -4
  90. package/{esm2020 → esm2022}/lib/form/form-floating/form-floating.directive.mjs +4 -4
  91. package/{esm2020 → esm2022}/lib/form/form-label/form-label.directive.mjs +4 -4
  92. package/{esm2020 → esm2022}/lib/form/form-select/form-select.directive.mjs +4 -4
  93. package/{esm2020 → esm2022}/lib/form/form-text/form-text.directive.mjs +4 -4
  94. package/esm2022/lib/form/form.module.mjs +75 -0
  95. package/{esm2020 → esm2022}/lib/form/input-group/input-group.component.mjs +4 -4
  96. package/{esm2020 → esm2022}/lib/form/input-group-text/input-group-text.directive.mjs +4 -4
  97. package/{esm2020 → esm2022}/lib/grid/col.component.mjs +4 -4
  98. package/{esm2020 → esm2022}/lib/grid/col.directive.mjs +4 -4
  99. package/{esm2020 → esm2022}/lib/grid/container.component.mjs +4 -4
  100. package/esm2022/lib/grid/grid.module.mjs +45 -0
  101. package/{esm2020 → esm2022}/lib/grid/gutter.directive.mjs +4 -4
  102. package/{esm2020 → esm2022}/lib/grid/row.component.mjs +4 -4
  103. package/{esm2020 → esm2022}/lib/grid/row.directive.mjs +4 -4
  104. package/{esm2020 → esm2022}/lib/header/header/header.component.mjs +4 -4
  105. package/{esm2020 → esm2022}/lib/header/header-brand/header-brand.component.mjs +4 -4
  106. package/{esm2020 → esm2022}/lib/header/header-divider/header-divider.component.mjs +4 -4
  107. package/{esm2020 → esm2022}/lib/header/header-nav/header-nav.component.mjs +4 -4
  108. package/{esm2020 → esm2022}/lib/header/header-text/header-text.component.mjs +4 -4
  109. package/{esm2020 → esm2022}/lib/header/header-toggler/header-toggler.directive.mjs +4 -4
  110. package/esm2022/lib/header/header.module.mjs +45 -0
  111. package/{esm2020 → esm2022}/lib/image/img.directive.mjs +4 -4
  112. package/{esm2020 → esm2022}/lib/image/img.module.mjs +5 -5
  113. package/{esm2020 → esm2022}/lib/list-group/list-group-item.directive.mjs +4 -4
  114. package/{esm2020 → esm2022}/lib/list-group/list-group.directive.mjs +4 -4
  115. package/{esm2020 → esm2022}/lib/list-group/list-group.module.mjs +5 -5
  116. package/{esm2020 → esm2022}/lib/loading-button/loading-button.component.mjs +4 -4
  117. package/esm2022/lib/loading-button/loading-button.module.mjs +16 -0
  118. package/{esm2020 → esm2022}/lib/modal/modal/modal.component.mjs +14 -14
  119. package/{esm2020 → esm2022}/lib/modal/modal-body/modal-body.component.mjs +4 -4
  120. package/{esm2020 → esm2022}/lib/modal/modal-content/modal-content.component.mjs +4 -4
  121. package/{esm2020 → esm2022}/lib/modal/modal-dialog/modal-dialog.component.mjs +4 -4
  122. package/{esm2020 → esm2022}/lib/modal/modal-dismiss/modal-toggle.directive.mjs +4 -4
  123. package/{esm2020 → esm2022}/lib/modal/modal-footer/modal-footer.component.mjs +4 -4
  124. package/{esm2020 → esm2022}/lib/modal/modal-header/modal-header.component.mjs +4 -4
  125. package/{esm2020 → esm2022}/lib/modal/modal-title/modal-title.directive.mjs +4 -4
  126. package/esm2022/lib/modal/modal.module.mjs +57 -0
  127. package/{esm2020 → esm2022}/lib/modal/modal.service.mjs +4 -4
  128. package/esm2022/lib/multi-select/multi-select/multi-select-search.directive.mjs +69 -0
  129. package/esm2022/lib/multi-select/multi-select/multi-select.component.mjs +1066 -0
  130. package/{esm2020 → esm2022}/lib/multi-select/multi-select-native-select/multi-select-native-select.component.mjs +4 -4
  131. package/{esm2020 → esm2022}/lib/multi-select/multi-select-optgroup/multi-select-optgroup-label.component.mjs +4 -4
  132. package/{esm2020 → esm2022}/lib/multi-select/multi-select-optgroup/multi-select-optgroup.component.mjs +4 -4
  133. package/esm2022/lib/multi-select/multi-select-option/multi-select-option.component.mjs +334 -0
  134. package/{esm2020 → esm2022}/lib/multi-select/multi-select-tag/multi-select-tag.component.mjs +4 -4
  135. package/esm2022/lib/multi-select/multi-select.module.mjs +37 -0
  136. package/esm2022/lib/multi-select/multi-select.service.mjs +38 -0
  137. package/{esm2020 → esm2022}/lib/nav/nav-item.component.mjs +4 -4
  138. package/{esm2020 → esm2022}/lib/nav/nav-link.directive.mjs +4 -4
  139. package/{esm2020 → esm2022}/lib/nav/nav.component.mjs +4 -4
  140. package/esm2022/lib/nav/nav.module.mjs +30 -0
  141. package/{esm2020 → esm2022}/lib/navbar/navbar-brand/navbar-brand.directive.mjs +4 -4
  142. package/{esm2020 → esm2022}/lib/navbar/navbar-nav/navbar-nav.component.mjs +4 -4
  143. package/{esm2020 → esm2022}/lib/navbar/navbar-text/navbar-text.component.mjs +4 -4
  144. package/{esm2020 → esm2022}/lib/navbar/navbar-toggler/navbar-toggler.directive.mjs +4 -4
  145. package/{esm2020 → esm2022}/lib/navbar/navbar.component.mjs +4 -4
  146. package/esm2022/lib/navbar/navbar.module.mjs +40 -0
  147. package/esm2022/lib/offcanvas/offcanvas/offcanvas.component.mjs +321 -0
  148. package/{esm2020 → esm2022}/lib/offcanvas/offcanvas-body/offcanvas-body.component.mjs +4 -4
  149. package/{esm2020 → esm2022}/lib/offcanvas/offcanvas-header/offcanvas-header.component.mjs +4 -4
  150. package/{esm2020 → esm2022}/lib/offcanvas/offcanvas-title/offcanvas-title.directive.mjs +4 -4
  151. package/{esm2020 → esm2022}/lib/offcanvas/offcanvas-toggle/offcanvas-toggle.directive.mjs +4 -4
  152. package/esm2022/lib/offcanvas/offcanvas.module.mjs +49 -0
  153. package/{esm2020 → esm2022}/lib/offcanvas/offcanvas.service.mjs +4 -4
  154. package/{esm2020 → esm2022}/lib/pagination/page-item/page-item.component.mjs +4 -4
  155. package/{esm2020 → esm2022}/lib/pagination/page-item/page-item.directive.mjs +4 -4
  156. package/{esm2020 → esm2022}/lib/pagination/page-link/page-link.directive.mjs +4 -4
  157. package/{esm2020 → esm2022}/lib/pagination/pagination/pagination.component.mjs +4 -4
  158. package/esm2022/lib/pagination/pagination.module.mjs +35 -0
  159. package/{esm2020 → esm2022}/lib/placeholder/placeholder-animation.directive.mjs +4 -4
  160. package/{esm2020 → esm2022}/lib/placeholder/placeholder.directive.mjs +4 -4
  161. package/{esm2020 → esm2022}/lib/placeholder/placeholder.module.mjs +7 -7
  162. package/{esm2020 → esm2022}/lib/popover/popover/popover.component.mjs +4 -4
  163. package/{esm2020 → esm2022}/lib/popover/popover.directive.mjs +4 -4
  164. package/esm2022/lib/popover/popover.module.mjs +25 -0
  165. package/{esm2020 → esm2022}/lib/progress/progress-bar.component.mjs +4 -4
  166. package/{esm2020 → esm2022}/lib/progress/progress.component.mjs +4 -4
  167. package/esm2022/lib/progress/progress.module.mjs +25 -0
  168. package/{esm2020 → esm2022}/lib/services/class-toggle.service.mjs +4 -4
  169. package/{esm2020 → esm2022}/lib/services/intersection.service.mjs +4 -4
  170. package/{esm2020 → esm2022}/lib/services/listeners.service.mjs +4 -4
  171. package/{esm2020 → esm2022}/lib/shared/html-attr.directive.mjs +4 -4
  172. package/{esm2020 → esm2022}/lib/shared/shared.module.mjs +7 -7
  173. package/{esm2020 → esm2022}/lib/shared/template-id.directive.mjs +4 -4
  174. package/{esm2020 → esm2022}/lib/sidebar/sidebar/sidebar.component.mjs +46 -42
  175. package/{esm2020 → esm2022}/lib/sidebar/sidebar-backdrop/sidebar-backdrop.service.mjs +4 -4
  176. package/{esm2020 → esm2022}/lib/sidebar/sidebar-brand/sidebar-brand.component.mjs +4 -4
  177. package/{esm2020 → esm2022}/lib/sidebar/sidebar-footer/sidebar-footer.component.mjs +4 -4
  178. package/{esm2020 → esm2022}/lib/sidebar/sidebar-header/sidebar-header.component.mjs +4 -4
  179. package/{esm2020 → esm2022}/lib/sidebar/sidebar-nav/sidebar-nav-badge.pipe.mjs +4 -4
  180. package/{esm2020 → esm2022}/lib/sidebar/sidebar-nav/sidebar-nav-divider.component.mjs +4 -4
  181. package/{esm2020 → esm2022}/lib/sidebar/sidebar-nav/sidebar-nav-group.service.mjs +4 -4
  182. package/{esm2020 → esm2022}/lib/sidebar/sidebar-nav/sidebar-nav-icon.pipe.mjs +4 -4
  183. package/{esm2020 → esm2022}/lib/sidebar/sidebar-nav/sidebar-nav-item-class.pipe.mjs +4 -4
  184. package/{esm2020 → esm2022}/lib/sidebar/sidebar-nav/sidebar-nav-label.component.mjs +4 -4
  185. package/{esm2020 → esm2022}/lib/sidebar/sidebar-nav/sidebar-nav-link.component.mjs +9 -9
  186. package/{esm2020 → esm2022}/lib/sidebar/sidebar-nav/sidebar-nav-link.pipe.mjs +4 -4
  187. package/{esm2020 → esm2022}/lib/sidebar/sidebar-nav/sidebar-nav-title.component.mjs +4 -4
  188. package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav.component.mjs +230 -0
  189. package/{esm2020 → esm2022}/lib/sidebar/sidebar-nav/sidebar-nav.service.mjs +7 -7
  190. package/{esm2020 → esm2022}/lib/sidebar/sidebar-toggle/sidebar-toggle.directive.mjs +4 -4
  191. package/{esm2020 → esm2022}/lib/sidebar/sidebar-toggler/sidebar-toggler.component.mjs +4 -4
  192. package/esm2022/lib/sidebar/sidebar.module.mjs +83 -0
  193. package/{esm2020 → esm2022}/lib/sidebar/sidebar.service.mjs +4 -4
  194. package/{esm2020 → esm2022}/lib/smart-pagination/smart-pagination.component.mjs +4 -4
  195. package/esm2022/lib/smart-pagination/smart-pagination.module.mjs +16 -0
  196. package/{esm2020 → esm2022}/lib/smart-table/smart-table/smart-table.component.mjs +4 -4
  197. package/esm2022/lib/smart-table/smart-table-column-filter/smart-table-column-filter.component.mjs +28 -0
  198. package/esm2022/lib/smart-table/smart-table-filter/filter-input.directive.mjs +78 -0
  199. package/esm2022/lib/smart-table/smart-table-filter/smart-table-filter.component.mjs +43 -0
  200. package/{esm2020 → esm2022}/lib/smart-table/smart-table-head/smart-table-head.component.mjs +4 -4
  201. package/esm2022/lib/smart-table/smart-table-items-per-page-selector/smart-table-items-per-page-selector.component.mjs +52 -0
  202. package/esm2022/lib/smart-table/smart-table.module.mjs +17 -0
  203. package/{esm2020 → esm2022}/lib/spinner/spinner.component.mjs +4 -4
  204. package/esm2022/lib/spinner/spinner.module.mjs +20 -0
  205. package/{esm2020 → esm2022}/lib/table/table-active.directive.mjs +4 -4
  206. package/{esm2020 → esm2022}/lib/table/table-color.directive.mjs +4 -4
  207. package/{esm2020 → esm2022}/lib/table/table.directive.mjs +4 -4
  208. package/{esm2020 → esm2022}/lib/table/table.module.mjs +9 -9
  209. package/{esm2020 → esm2022}/lib/tabs/tab-content/tab-content.component.mjs +4 -4
  210. package/{esm2020 → esm2022}/lib/tabs/tab-content-ref.directive.mjs +4 -4
  211. package/{esm2020 → esm2022}/lib/tabs/tab-pane/tab-pane.component.mjs +5 -5
  212. package/{esm2020 → esm2022}/lib/tabs/tab.service.mjs +4 -4
  213. package/esm2022/lib/tabs/tabs.module.mjs +36 -0
  214. package/{esm2020 → esm2022}/lib/time-picker/time-picker-roll-col/time-picker-roll-am-pm.component.mjs +7 -7
  215. package/{esm2020 → esm2022}/lib/time-picker/time-picker-roll-col/time-picker-roll-col.component.mjs +7 -7
  216. package/esm2022/lib/time-picker/time-picker.component.mjs +511 -0
  217. package/{esm2020 → esm2022}/lib/time-picker/time-picker.module.mjs +21 -21
  218. package/esm2022/lib/toast/toast/toast.component.mjs +238 -0
  219. package/{esm2020 → esm2022}/lib/toast/toast-body/toast-body.component.mjs +4 -4
  220. package/{esm2020 → esm2022}/lib/toast/toast-close.directive.mjs +4 -4
  221. package/{esm2020 → esm2022}/lib/toast/toast-header/toast-header.component.mjs +4 -4
  222. package/{esm2020 → esm2022}/lib/toast/toast.module.mjs +15 -18
  223. package/{esm2020 → esm2022}/lib/toast/toaster/toaster-host.directive.mjs +4 -4
  224. package/esm2022/lib/toast/toaster/toaster.component.mjs +130 -0
  225. package/{esm2020 → esm2022}/lib/toast/toaster/toaster.service.mjs +4 -4
  226. package/{esm2020 → esm2022}/lib/tooltip/tooltip/tooltip.component.mjs +4 -4
  227. package/{esm2020 → esm2022}/lib/tooltip/tooltip.directive.mjs +4 -4
  228. package/esm2022/lib/tooltip/tooltip.module.mjs +25 -0
  229. package/{esm2020 → esm2022}/lib/utilities/align.directive.mjs +4 -4
  230. package/{esm2020 → esm2022}/lib/utilities/bg-color.directive.mjs +4 -4
  231. package/{esm2020 → esm2022}/lib/utilities/border.directive.mjs +4 -4
  232. package/{esm2020 → esm2022}/lib/utilities/rounded.directive.mjs +4 -4
  233. package/{esm2020 → esm2022}/lib/utilities/text-color.directive.mjs +4 -4
  234. package/{esm2020 → esm2022}/lib/utilities/utilities.module.mjs +13 -13
  235. package/{esm2020 → esm2022}/lib/widget/widget-stat-a/widget-stat-a.component.mjs +4 -4
  236. package/{esm2020 → esm2022}/lib/widget/widget-stat-b/widget-stat-b.component.mjs +4 -4
  237. package/{esm2020 → esm2022}/lib/widget/widget-stat-c/widget-stat-c.component.mjs +4 -4
  238. package/{esm2020 → esm2022}/lib/widget/widget-stat-d/widget-stat-d.component.mjs +4 -4
  239. package/{esm2020 → esm2022}/lib/widget/widget-stat-e/widget-stat-e.component.mjs +4 -4
  240. package/{esm2020 → esm2022}/lib/widget/widget-stat-f/widget-stat-f.component.mjs +4 -4
  241. package/esm2022/lib/widget/widget.module.mjs +45 -0
  242. package/{fesm2020 → fesm2022}/coreui-angular-pro.mjs +1416 -1460
  243. package/fesm2022/coreui-angular-pro.mjs.map +1 -0
  244. package/lib/accordion/accordion/accordion.component.d.ts +1 -1
  245. package/lib/accordion/accordion-button/accordion-button.directive.d.ts +1 -1
  246. package/lib/accordion/accordion-item/accordion-item.component.d.ts +1 -1
  247. package/lib/alert/alert.component.d.ts +1 -1
  248. package/lib/avatar/avatar.component.d.ts +1 -1
  249. package/lib/badge/badge.component.d.ts +1 -1
  250. package/lib/breadcrumb/breadcrumb/breadcrumb.component.d.ts +1 -1
  251. package/lib/breadcrumb/breadcrumb-item/breadcrumb-item.component.d.ts +1 -1
  252. package/lib/breadcrumb/breadcrumb-router/breadcrumb-router.component.d.ts +1 -1
  253. package/lib/breadcrumb/breadcrumb-router/breadcrumb-router.service.d.ts +1 -1
  254. package/lib/button/button-close.directive.d.ts +1 -1
  255. package/lib/button/button.directive.d.ts +1 -1
  256. package/lib/button-group/button-group/button-group.component.d.ts +1 -1
  257. package/lib/button-group/button-toolbar/button-toolbar.component.d.ts +1 -1
  258. package/lib/calendar/calendar/calendar.component.d.ts +1 -1
  259. package/lib/calendar/calendar-month/calendar-day.directive.d.ts +1 -1
  260. package/lib/calendar/calendar-month/calendar-month.component.d.ts +1 -1
  261. package/lib/calendar/calendar-navigation/calendar-navigation.component.d.ts +1 -1
  262. package/lib/callout/callout.component.d.ts +1 -1
  263. package/lib/card/card-img.directive.d.ts +1 -1
  264. package/lib/card/card.component.d.ts +1 -1
  265. package/lib/carousel/carousel/carousel.component.d.ts +1 -1
  266. package/lib/carousel/carousel-control/carousel-control.component.d.ts +1 -1
  267. package/lib/carousel/carousel-item/carousel-item.component.d.ts +1 -1
  268. package/lib/collapse/collapse.directive.d.ts +1 -1
  269. package/lib/date-picker/date-picker.component.d.ts +1 -1
  270. package/lib/date-range-picker/date-range-picker/date-range-picker.component.d.ts +1 -1
  271. package/lib/dropdown/dropdown/dropdown.component.d.ts +2 -2
  272. package/lib/dropdown/dropdown-close/dropdown-close.directive.d.ts +1 -1
  273. package/lib/dropdown/dropdown-item/dropdown-item.directive.d.ts +1 -1
  274. package/lib/dropdown/dropdown-menu/dropdown-menu.directive.d.ts +1 -1
  275. package/lib/element-cover/element-cover.component.d.ts +1 -1
  276. package/lib/footer/footer.component.d.ts +1 -1
  277. package/lib/form/form/form.directive.d.ts +1 -1
  278. package/lib/form/form-check/form-check-input.directive.d.ts +1 -1
  279. package/lib/form/form-check/form-check.component.d.ts +1 -1
  280. package/lib/form/form-control/form-control.directive.d.ts +1 -1
  281. package/lib/form/form-feedback/form-feedback.component.d.ts +1 -1
  282. package/lib/form/form-floating/form-floating.directive.d.ts +1 -1
  283. package/lib/form/form-label/form-label.directive.d.ts +1 -1
  284. package/lib/form/form-select/form-select.directive.d.ts +1 -1
  285. package/lib/form/input-group/input-group.component.d.ts +1 -1
  286. package/lib/grid/col.directive.d.ts +1 -1
  287. package/lib/grid/container.component.d.ts +1 -1
  288. package/lib/grid/gutter.directive.d.ts +1 -1
  289. package/lib/grid/row.directive.d.ts +1 -1
  290. package/lib/header/header/header.component.d.ts +1 -1
  291. package/lib/header/header-brand/header-brand.component.d.ts +1 -1
  292. package/lib/header/header-nav/header-nav.component.d.ts +1 -1
  293. package/lib/header/header-toggler/header-toggler.directive.d.ts +1 -1
  294. package/lib/image/img.directive.d.ts +1 -1
  295. package/lib/list-group/list-group-item.directive.d.ts +1 -1
  296. package/lib/list-group/list-group.directive.d.ts +1 -1
  297. package/lib/loading-button/loading-button.component.d.ts +1 -1
  298. package/lib/modal/modal/modal.component.d.ts +1 -1
  299. package/lib/modal/modal-dialog/modal-dialog.component.d.ts +1 -1
  300. package/lib/modal/modal-dismiss/modal-toggle.directive.d.ts +1 -1
  301. package/lib/multi-select/multi-select/multi-select-search.directive.d.ts +1 -1
  302. package/lib/multi-select/multi-select/multi-select.component.d.ts +1 -1
  303. package/lib/multi-select/multi-select-native-select/multi-select-native-select.component.d.ts +1 -1
  304. package/lib/multi-select/multi-select-optgroup/multi-select-optgroup.component.d.ts +1 -1
  305. package/lib/multi-select/multi-select-option/multi-select-option.component.d.ts +1 -1
  306. package/lib/multi-select/multi-select-tag/multi-select-tag.component.d.ts +1 -1
  307. package/lib/nav/nav-link.directive.d.ts +1 -1
  308. package/lib/nav/nav.component.d.ts +1 -1
  309. package/lib/navbar/navbar-nav/navbar-nav.component.d.ts +1 -1
  310. package/lib/navbar/navbar-toggler/navbar-toggler.directive.d.ts +1 -1
  311. package/lib/navbar/navbar.component.d.ts +1 -1
  312. package/lib/offcanvas/offcanvas/offcanvas.component.d.ts +1 -1
  313. package/lib/offcanvas/offcanvas-toggle/offcanvas-toggle.directive.d.ts +1 -1
  314. package/lib/pagination/page-item/page-item.directive.d.ts +1 -1
  315. package/lib/pagination/pagination/pagination.component.d.ts +1 -1
  316. package/lib/placeholder/placeholder-animation.directive.d.ts +1 -1
  317. package/lib/placeholder/placeholder.directive.d.ts +1 -1
  318. package/lib/popover/popover/popover.component.d.ts +1 -1
  319. package/lib/popover/popover.directive.d.ts +1 -1
  320. package/lib/progress/progress-bar.component.d.ts +1 -1
  321. package/lib/progress/progress.component.d.ts +1 -1
  322. package/lib/shared/html-attr.directive.d.ts +1 -1
  323. package/lib/shared/template-id.directive.d.ts +1 -1
  324. package/lib/sidebar/sidebar/sidebar.component.d.ts +1 -1
  325. package/lib/sidebar/sidebar-brand/sidebar-brand.component.d.ts +1 -1
  326. package/lib/sidebar/sidebar-nav/sidebar-nav-divider.component.d.ts +1 -1
  327. package/lib/sidebar/sidebar-nav/sidebar-nav-label.component.d.ts +1 -1
  328. package/lib/sidebar/sidebar-nav/sidebar-nav-link.component.d.ts +2 -2
  329. package/lib/sidebar/sidebar-nav/sidebar-nav-title.component.d.ts +1 -1
  330. package/lib/sidebar/sidebar-nav/sidebar-nav.component.d.ts +2 -2
  331. package/lib/sidebar/sidebar-toggle/sidebar-toggle.directive.d.ts +1 -1
  332. package/lib/sidebar/sidebar-toggler/sidebar-toggler.component.d.ts +1 -1
  333. package/lib/smart-pagination/smart-pagination.component.d.ts +1 -1
  334. package/lib/smart-table/smart-table/smart-table.component.d.ts +1 -1
  335. package/lib/smart-table/smart-table-column-filter/smart-table-column-filter.component.d.ts +1 -1
  336. package/lib/smart-table/smart-table-filter/filter-input.directive.d.ts +1 -1
  337. package/lib/smart-table/smart-table-filter/smart-table-filter.component.d.ts +1 -1
  338. package/lib/smart-table/smart-table-head/smart-table-head.component.d.ts +1 -1
  339. package/lib/smart-table/smart-table-items-per-page-selector/smart-table-items-per-page-selector.component.d.ts +1 -1
  340. package/lib/spinner/spinner.component.d.ts +1 -1
  341. package/lib/table/table-active.directive.d.ts +1 -1
  342. package/lib/table/table-color.directive.d.ts +1 -1
  343. package/lib/table/table.directive.d.ts +1 -1
  344. package/lib/tabs/tab-content/tab-content.component.d.ts +1 -1
  345. package/lib/tabs/tab-content-ref.directive.d.ts +1 -1
  346. package/lib/time-picker/time-picker-roll-col/time-picker-roll-am-pm.component.d.ts +2 -2
  347. package/lib/time-picker/time-picker-roll-col/time-picker-roll-col.component.d.ts +2 -2
  348. package/lib/time-picker/time-picker.component.d.ts +1 -1
  349. package/lib/toast/toast/toast.component.d.ts +1 -1
  350. package/lib/toast/toast-close.directive.d.ts +1 -1
  351. package/lib/toast/toast-header/toast-header.component.d.ts +1 -1
  352. package/lib/toast/toaster/toaster.component.d.ts +1 -1
  353. package/lib/tooltip/tooltip/tooltip.component.d.ts +1 -1
  354. package/lib/tooltip/tooltip.directive.d.ts +1 -1
  355. package/lib/utilities/align.directive.d.ts +1 -1
  356. package/lib/utilities/bg-color.directive.d.ts +1 -1
  357. package/lib/utilities/border.directive.d.ts +1 -1
  358. package/lib/utilities/rounded.directive.d.ts +1 -1
  359. package/lib/utilities/text-color.directive.d.ts +1 -1
  360. package/lib/widget/widget-stat-a/widget-stat-a.component.d.ts +1 -1
  361. package/lib/widget/widget-stat-b/widget-stat-b.component.d.ts +1 -1
  362. package/lib/widget/widget-stat-c/widget-stat-c.component.d.ts +1 -1
  363. package/lib/widget/widget-stat-d/widget-stat-d.component.d.ts +1 -1
  364. package/lib/widget/widget-stat-e/widget-stat-e.component.d.ts +1 -1
  365. package/lib/widget/widget-stat-f/widget-stat-f.component.d.ts +1 -1
  366. package/package.json +9 -15
  367. package/esm2020/lib/accordion/accordion.module.mjs +0 -37
  368. package/esm2020/lib/alert/alert.component.mjs +0 -181
  369. package/esm2020/lib/alert/alert.module.mjs +0 -30
  370. package/esm2020/lib/avatar/avatar.module.mjs +0 -20
  371. package/esm2020/lib/badge/badge.module.mjs +0 -20
  372. package/esm2020/lib/breadcrumb/breadcrumb-router/breadcrumb-router.service.mjs +0 -53
  373. package/esm2020/lib/breadcrumb/breadcrumb.module.mjs +0 -35
  374. package/esm2020/lib/button-group/button-group.module.mjs +0 -17
  375. package/esm2020/lib/calendar/calendar.module.mjs +0 -56
  376. package/esm2020/lib/callout/callout.module.mjs +0 -16
  377. package/esm2020/lib/card/card.module.mjs +0 -81
  378. package/esm2020/lib/carousel/carousel.module.mjs +0 -57
  379. package/esm2020/lib/date-picker/date-picker.component.mjs +0 -93
  380. package/esm2020/lib/date-range-picker/date-range-picker/date-range-picker.component.mjs +0 -676
  381. package/esm2020/lib/dropdown/dropdown.module.mjs +0 -56
  382. package/esm2020/lib/element-cover/element-cover.component.mjs +0 -71
  383. package/esm2020/lib/element-cover/element-cover.module.mjs +0 -16
  384. package/esm2020/lib/footer/footer.module.mjs +0 -16
  385. package/esm2020/lib/form/form.module.mjs +0 -77
  386. package/esm2020/lib/grid/grid.module.mjs +0 -47
  387. package/esm2020/lib/header/header.module.mjs +0 -49
  388. package/esm2020/lib/loading-button/loading-button.module.mjs +0 -16
  389. package/esm2020/lib/modal/modal.module.mjs +0 -62
  390. package/esm2020/lib/multi-select/multi-select/multi-select-search.directive.mjs +0 -69
  391. package/esm2020/lib/multi-select/multi-select/multi-select.component.mjs +0 -1065
  392. package/esm2020/lib/multi-select/multi-select-option/multi-select-option.component.mjs +0 -326
  393. package/esm2020/lib/multi-select/multi-select.module.mjs +0 -40
  394. package/esm2020/lib/multi-select/multi-select.service.mjs +0 -40
  395. package/esm2020/lib/nav/nav.module.mjs +0 -31
  396. package/esm2020/lib/navbar/navbar.module.mjs +0 -42
  397. package/esm2020/lib/offcanvas/offcanvas/offcanvas.component.mjs +0 -319
  398. package/esm2020/lib/offcanvas/offcanvas.module.mjs +0 -51
  399. package/esm2020/lib/pagination/pagination.module.mjs +0 -36
  400. package/esm2020/lib/popover/popover.module.mjs +0 -25
  401. package/esm2020/lib/progress/progress.module.mjs +0 -26
  402. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav.component.mjs +0 -230
  403. package/esm2020/lib/sidebar/sidebar.module.mjs +0 -92
  404. package/esm2020/lib/smart-pagination/smart-pagination.module.mjs +0 -16
  405. package/esm2020/lib/smart-table/smart-table-column-filter/smart-table-column-filter.component.mjs +0 -30
  406. package/esm2020/lib/smart-table/smart-table-filter/filter-input.directive.mjs +0 -79
  407. package/esm2020/lib/smart-table/smart-table-filter/smart-table-filter.component.mjs +0 -45
  408. package/esm2020/lib/smart-table/smart-table-items-per-page-selector/smart-table-items-per-page-selector.component.mjs +0 -54
  409. package/esm2020/lib/smart-table/smart-table.module.mjs +0 -17
  410. package/esm2020/lib/spinner/spinner.module.mjs +0 -20
  411. package/esm2020/lib/tabs/tabs.module.mjs +0 -37
  412. package/esm2020/lib/time-picker/time-picker.component.mjs +0 -511
  413. package/esm2020/lib/toast/toast/toast.component.mjs +0 -238
  414. package/esm2020/lib/toast/toaster/toaster.component.mjs +0 -130
  415. package/esm2020/lib/tooltip/tooltip.module.mjs +0 -25
  416. package/esm2020/lib/widget/widget.module.mjs +0 -50
  417. package/fesm2015/coreui-angular-pro.mjs +0 -16521
  418. package/fesm2015/coreui-angular-pro.mjs.map +0 -1
  419. package/fesm2020/coreui-angular-pro.mjs.map +0 -1
  420. /package/{esm2020 → esm2022}/coreui-angular-pro.mjs +0 -0
  421. /package/{esm2020 → esm2022}/lib/accordion/index.mjs +0 -0
  422. /package/{esm2020 → esm2022}/lib/accordion/public_api.mjs +0 -0
  423. /package/{esm2020 → esm2022}/lib/alert/index.mjs +0 -0
  424. /package/{esm2020 → esm2022}/lib/alert/public_api.mjs +0 -0
  425. /package/{esm2020 → esm2022}/lib/avatar/index.mjs +0 -0
  426. /package/{esm2020 → esm2022}/lib/avatar/public_api.mjs +0 -0
  427. /package/{esm2020 → esm2022}/lib/badge/index.mjs +0 -0
  428. /package/{esm2020 → esm2022}/lib/badge/public_api.mjs +0 -0
  429. /package/{esm2020 → esm2022}/lib/breadcrumb/breadcrumb-item/breadcrumb-item.mjs +0 -0
  430. /package/{esm2020 → esm2022}/lib/breadcrumb/index.mjs +0 -0
  431. /package/{esm2020 → esm2022}/lib/breadcrumb/public_api.mjs +0 -0
  432. /package/{esm2020 → esm2022}/lib/button/index.mjs +0 -0
  433. /package/{esm2020 → esm2022}/lib/button/public_api.mjs +0 -0
  434. /package/{esm2020 → esm2022}/lib/button-group/index.mjs +0 -0
  435. /package/{esm2020 → esm2022}/lib/button-group/public_api.mjs +0 -0
  436. /package/{esm2020 → esm2022}/lib/calendar/calendar.utils.mjs +0 -0
  437. /package/{esm2020 → esm2022}/lib/calendar/index.mjs +0 -0
  438. /package/{esm2020 → esm2022}/lib/calendar/public_api.mjs +0 -0
  439. /package/{esm2020 → esm2022}/lib/callout/index.mjs +0 -0
  440. /package/{esm2020 → esm2022}/lib/callout/public_api.mjs +0 -0
  441. /package/{esm2020 → esm2022}/lib/card/index.mjs +0 -0
  442. /package/{esm2020 → esm2022}/lib/card/public_api.mjs +0 -0
  443. /package/{esm2020 → esm2022}/lib/carousel/carousel-state.type.mjs +0 -0
  444. /package/{esm2020 → esm2022}/lib/carousel/carousel.animation.mjs +0 -0
  445. /package/{esm2020 → esm2022}/lib/carousel/index.mjs +0 -0
  446. /package/{esm2020 → esm2022}/lib/carousel/public_api.mjs +0 -0
  447. /package/{esm2020 → esm2022}/lib/collapse/collapse.animations.mjs +0 -0
  448. /package/{esm2020 → esm2022}/lib/collapse/index.mjs +0 -0
  449. /package/{esm2020 → esm2022}/lib/collapse/public_api.mjs +0 -0
  450. /package/{esm2020 → esm2022}/lib/coreui.types.mjs +0 -0
  451. /package/{esm2020 → esm2022}/lib/date-picker/index.mjs +0 -0
  452. /package/{esm2020 → esm2022}/lib/date-picker/public_api.mjs +0 -0
  453. /package/{esm2020 → esm2022}/lib/date-range-picker/index.mjs +0 -0
  454. /package/{esm2020 → esm2022}/lib/date-range-picker/public_api.mjs +0 -0
  455. /package/{esm2020 → esm2022}/lib/dropdown/index.mjs +0 -0
  456. /package/{esm2020 → esm2022}/lib/dropdown/public_api.mjs +0 -0
  457. /package/{esm2020 → esm2022}/lib/element-cover/index.mjs +0 -0
  458. /package/{esm2020 → esm2022}/lib/element-cover/public_api.mjs +0 -0
  459. /package/{esm2020 → esm2022}/lib/footer/index.mjs +0 -0
  460. /package/{esm2020 → esm2022}/lib/footer/public_api.mjs +0 -0
  461. /package/{esm2020 → esm2022}/lib/form/index.mjs +0 -0
  462. /package/{esm2020 → esm2022}/lib/form/public_api.mjs +0 -0
  463. /package/{esm2020 → esm2022}/lib/grid/col.type.mjs +0 -0
  464. /package/{esm2020 → esm2022}/lib/grid/container.type.mjs +0 -0
  465. /package/{esm2020 → esm2022}/lib/grid/gutter.type.mjs +0 -0
  466. /package/{esm2020 → esm2022}/lib/grid/index.mjs +0 -0
  467. /package/{esm2020 → esm2022}/lib/grid/public_api.mjs +0 -0
  468. /package/{esm2020 → esm2022}/lib/grid/row.type.mjs +0 -0
  469. /package/{esm2020 → esm2022}/lib/header/index.mjs +0 -0
  470. /package/{esm2020 → esm2022}/lib/header/public_api.mjs +0 -0
  471. /package/{esm2020 → esm2022}/lib/image/index.mjs +0 -0
  472. /package/{esm2020 → esm2022}/lib/image/public_api.mjs +0 -0
  473. /package/{esm2020 → esm2022}/lib/list-group/index.mjs +0 -0
  474. /package/{esm2020 → esm2022}/lib/list-group/public_api.mjs +0 -0
  475. /package/{esm2020 → esm2022}/lib/loading-button/index.mjs +0 -0
  476. /package/{esm2020 → esm2022}/lib/loading-button/public_api.mjs +0 -0
  477. /package/{esm2020 → esm2022}/lib/modal/index.mjs +0 -0
  478. /package/{esm2020 → esm2022}/lib/modal/public_api.mjs +0 -0
  479. /package/{esm2020 → esm2022}/lib/multi-select/index.mjs +0 -0
  480. /package/{esm2020 → esm2022}/lib/multi-select/multi-select.type.mjs +0 -0
  481. /package/{esm2020 → esm2022}/lib/multi-select/public_api.mjs +0 -0
  482. /package/{esm2020 → esm2022}/lib/nav/index.mjs +0 -0
  483. /package/{esm2020 → esm2022}/lib/nav/public_api.mjs +0 -0
  484. /package/{esm2020 → esm2022}/lib/navbar/index.mjs +0 -0
  485. /package/{esm2020 → esm2022}/lib/navbar/public_api.mjs +0 -0
  486. /package/{esm2020 → esm2022}/lib/offcanvas/index.mjs +0 -0
  487. /package/{esm2020 → esm2022}/lib/offcanvas/public_api.mjs +0 -0
  488. /package/{esm2020 → esm2022}/lib/pagination/index.mjs +0 -0
  489. /package/{esm2020 → esm2022}/lib/pagination/public_api.mjs +0 -0
  490. /package/{esm2020 → esm2022}/lib/placeholder/index.mjs +0 -0
  491. /package/{esm2020 → esm2022}/lib/placeholder/public_api.mjs +0 -0
  492. /package/{esm2020 → esm2022}/lib/popover/index.mjs +0 -0
  493. /package/{esm2020 → esm2022}/lib/popover/public_api.mjs +0 -0
  494. /package/{esm2020 → esm2022}/lib/progress/index.mjs +0 -0
  495. /package/{esm2020 → esm2022}/lib/progress/progress-bar.mjs +0 -0
  496. /package/{esm2020 → esm2022}/lib/progress/public_api.mjs +0 -0
  497. /package/{esm2020 → esm2022}/lib/services/index.mjs +0 -0
  498. /package/{esm2020 → esm2022}/lib/services/public_api.mjs +0 -0
  499. /package/{esm2020 → esm2022}/lib/shared/index.mjs +0 -0
  500. /package/{esm2020 → esm2022}/lib/shared/public_api.mjs +0 -0
  501. /package/{esm2020 → esm2022}/lib/sidebar/index.mjs +0 -0
  502. /package/{esm2020 → esm2022}/lib/sidebar/public_api.mjs +0 -0
  503. /package/{esm2020 → esm2022}/lib/sidebar/sidebar-nav/index.mjs +0 -0
  504. /package/{esm2020 → esm2022}/lib/sidebar/sidebar-nav/public_api.mjs +0 -0
  505. /package/{esm2020 → esm2022}/lib/sidebar/sidebar-nav/sidebar-nav.mjs +0 -0
  506. /package/{esm2020 → esm2022}/lib/smart-pagination/index.mjs +0 -0
  507. /package/{esm2020 → esm2022}/lib/smart-pagination/public_api.mjs +0 -0
  508. /package/{esm2020 → esm2022}/lib/smart-pagination/smart-pagination.type.mjs +0 -0
  509. /package/{esm2020 → esm2022}/lib/smart-table/index.mjs +0 -0
  510. /package/{esm2020 → esm2022}/lib/smart-table/public_api.mjs +0 -0
  511. /package/{esm2020 → esm2022}/lib/smart-table/smart-table.type.mjs +0 -0
  512. /package/{esm2020 → esm2022}/lib/spinner/index.mjs +0 -0
  513. /package/{esm2020 → esm2022}/lib/spinner/public_api.mjs +0 -0
  514. /package/{esm2020 → esm2022}/lib/table/index.mjs +0 -0
  515. /package/{esm2020 → esm2022}/lib/table/public_api.mjs +0 -0
  516. /package/{esm2020 → esm2022}/lib/table/table.type.mjs +0 -0
  517. /package/{esm2020 → esm2022}/lib/tabs/index.mjs +0 -0
  518. /package/{esm2020 → esm2022}/lib/tabs/public_api.mjs +0 -0
  519. /package/{esm2020 → esm2022}/lib/time-picker/index.mjs +0 -0
  520. /package/{esm2020 → esm2022}/lib/time-picker/public_api.mjs +0 -0
  521. /package/{esm2020 → esm2022}/lib/time-picker/time.utils.mjs +0 -0
  522. /package/{esm2020 → esm2022}/lib/toast/index.mjs +0 -0
  523. /package/{esm2020 → esm2022}/lib/toast/public_api.mjs +0 -0
  524. /package/{esm2020 → esm2022}/lib/tooltip/index.mjs +0 -0
  525. /package/{esm2020 → esm2022}/lib/tooltip/public_api.mjs +0 -0
  526. /package/{esm2020 → esm2022}/lib/utilities/border.type.mjs +0 -0
  527. /package/{esm2020 → esm2022}/lib/utilities/index.mjs +0 -0
  528. /package/{esm2020 → esm2022}/lib/utilities/public_api.mjs +0 -0
  529. /package/{esm2020 → esm2022}/lib/utilities/rounded.type.mjs +0 -0
  530. /package/{esm2020 → esm2022}/lib/widget/index.mjs +0 -0
  531. /package/{esm2020 → esm2022}/lib/widget/public_api.mjs +0 -0
  532. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
@@ -0,0 +1,675 @@
1
+ import { Component, ContentChildren, EventEmitter, forwardRef, HostListener, Input, Output, ViewChild } from '@angular/core';
2
+ import { NgClass, NgForOf, NgIf, NgTemplateOutlet } from '@angular/common';
3
+ import { FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule, Validators } from '@angular/forms';
4
+ import { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';
5
+ import { Breakpoints } from '@angular/cdk/layout';
6
+ import { format as dateFormat } from 'date-fns';
7
+ import { ButtonDirective } from '../../button';
8
+ import { getLocalDateFromString, isDateDisabled } from '../../calendar/calendar.utils';
9
+ import { CalendarComponent } from '../../calendar';
10
+ import { DropdownComponent, DropdownMenuDirective, DropdownToggleDirective } from '../../dropdown';
11
+ import { FormControlDirective, InputGroupComponent, InputGroupTextDirective } from '../../form';
12
+ import { TemplateIdDirective } from '../../shared';
13
+ import { TimePickerComponent } from '../../time-picker';
14
+ import * as i0 from "@angular/core";
15
+ import * as i1 from "@angular/cdk/layout";
16
+ import * as i2 from "@angular/forms";
17
+ /** Must be a valid date string */
18
+ // todo: validation
19
+ // export function invalidDateStringValidator(locale: string): ValidatorFn {
20
+ // return (control: AbstractControl): ValidationErrors | null => {
21
+ // // const validDate = !isNaN(Date.parse(control.value));
22
+ // stringToDateConvert(control.value, locale);
23
+ // const dateShim = cvtDate(control.value, locale);
24
+ // // @ts-ignore
25
+ // // control.setValue(new Date(dateShim.year, dateShim.month, dateShim.day))
26
+ // console.log('dateShim', dateShim, locale);
27
+ // const validDate = isValidDate(control.value);
28
+ // console.log('invalidDateStringValidator', control, control.value, validDate);
29
+ // return validDate ? { invalidDateStringValidator: { value: control.value } } : null;
30
+ // };
31
+ // }
32
+ export class DateRangePickerComponent {
33
+ constructor(breakpointObserver) {
34
+ this.breakpointObserver = breakpointObserver;
35
+ /**
36
+ * Set the format of day name.
37
+ * @default 'numeric'
38
+ * @type DayFormatType
39
+ */
40
+ this.dayFormat = 'numeric';
41
+ this._calendars = 2;
42
+ this._cleaner = true;
43
+ this.#closeOnSelect = false;
44
+ this._indicator = true;
45
+ this._inputReadOnly = false;
46
+ this._navYearFirst = false;
47
+ /**
48
+ * Specifies short hints that are visible in start date and end date inputs.
49
+ * type string
50
+ */
51
+ this.placeholder = ['Start date', 'End date'];
52
+ /**
53
+ * Sets the color context of the cancel button to one of CoreUI’s themed colors.
54
+ * @type 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'dark' | 'light' | string
55
+ * @default 'secondary'
56
+ */
57
+ this.rangesButtonsColor = 'secondary';
58
+ /**
59
+ * Size the ranges button small or large.
60
+ * @type 'sm' | 'lg' | ''
61
+ */
62
+ this.rangesButtonsSize = '';
63
+ /**
64
+ * Set the ranges button variant to an outlined button or a ghost button.
65
+ * @type 'outline' | 'ghost' | undefined
66
+ */
67
+ this.rangesButtonsVariant = 'ghost';
68
+ this._separator = true;
69
+ this._timepicker = false;
70
+ this._visible = false;
71
+ this.calendarDate = new Date();
72
+ this.disabledDates = [];
73
+ this._firstDayOfWeek = 1;
74
+ this.locale = 'default';
75
+ this.maxDate = null;
76
+ this.minDate = null;
77
+ this._navigation = true;
78
+ this._range = true;
79
+ this._disabled = false;
80
+ this._value = {};
81
+ /**
82
+ * Set length or format of day name.
83
+ * @type WeekdayFormatType
84
+ * @default 'short'
85
+ */
86
+ this.weekdayFormat = 'short';
87
+ /**
88
+ * Optional popper Options object
89
+ * @type Partial<Options>
90
+ */
91
+ this.popperjsOptions = {
92
+ strategy: 'fixed'
93
+ };
94
+ this.#selectAdjacentDays = false;
95
+ /**
96
+ * Set whether to display dates in adjacent months (non-selectable) at the start and end of the current month.
97
+ * @type boolean
98
+ * @default true
99
+ * @since 4.4.10
100
+ */
101
+ this.showAdjacentDays = true;
102
+ this.valueChange = new EventEmitter();
103
+ this.calendarCellHover = new EventEmitter();
104
+ this.calendarDateChange = new EventEmitter();
105
+ this.endDateChange = new EventEmitter();
106
+ this.startDateChange = new EventEmitter();
107
+ this.templates = {};
108
+ this.dateChangeSubscriptions = [];
109
+ this.isMobile = true;
110
+ this._startDateValue = this.startDate?.toLocaleDateString(this.locale) ?? '';
111
+ this._endDateValue = this.endDate?.toLocaleDateString(this.locale) ?? '';
112
+ // todo: validation
113
+ this.startDateInput = new FormControl({ value: this.startDateValue, disabled: this.disabled }, [
114
+ Validators.required
115
+ // Validators.minLength(8),
116
+ // Validators.maxLength(10),
117
+ // invalidDateStringValidator(this.locale)
118
+ ]);
119
+ this.endDateInput = new FormControl({ value: this.endDateValue, disabled: this.disabled }, [
120
+ Validators.required
121
+ // Validators.minLength(8),
122
+ // Validators.maxLength(10),
123
+ // invalidDateStringValidator(this.locale)
124
+ ]);
125
+ this.setInputValue = (elementRef, date) => {
126
+ if (!elementRef) {
127
+ return;
128
+ }
129
+ elementRef.nativeElement.value = date?.toLocaleDateString(this.locale) ?? '';
130
+ // elementRef.nativeElement.valueAsDate = date;
131
+ return;
132
+ };
133
+ this.onChange = (value) => { };
134
+ this.onTouched = () => { };
135
+ }
136
+ /**
137
+ * The number of calendars that render on desktop devices.
138
+ * @type number
139
+ * @default 2
140
+ */
141
+ set calendars(value) {
142
+ this._calendars = coerceNumberProperty(value);
143
+ }
144
+ get calendars() {
145
+ return this._calendars;
146
+ }
147
+ /**
148
+ * Toggle visibility or set the content of the cleaner button.
149
+ * @type boolean
150
+ * @default true
151
+ */
152
+ set cleaner(value) {
153
+ this._cleaner = coerceBooleanProperty(value);
154
+ }
155
+ get cleaner() {
156
+ return this._cleaner;
157
+ }
158
+ /**
159
+ * Determine if the dropdown should be closed after value setting.
160
+ * @type boolean
161
+ * @default false
162
+ */
163
+ set closeOnSelect(value) {
164
+ this.#closeOnSelect = coerceBooleanProperty(value);
165
+ }
166
+ get closeOnSelect() {
167
+ return this.#closeOnSelect;
168
+ }
169
+ #closeOnSelect;
170
+ /**
171
+ * Toggle visibility or set the content of the input indicator.
172
+ * @type boolean
173
+ * @default true
174
+ */
175
+ set indicator(value) {
176
+ this._indicator = coerceBooleanProperty(value);
177
+ }
178
+ get indicator() {
179
+ return this._indicator;
180
+ }
181
+ /**
182
+ * Toggle the readonly state for the component.
183
+ * @type boolean
184
+ * @default false
185
+ */
186
+ set inputReadOnly(value) {
187
+ this._inputReadOnly = coerceBooleanProperty(value);
188
+ }
189
+ get inputReadOnly() {
190
+ return this._inputReadOnly || typeof this.format === 'string';
191
+ }
192
+ /**
193
+ * Reorder year-month navigation, and render year first.
194
+ * @type boolean
195
+ * @default false
196
+ */
197
+ set navYearFirst(value) {
198
+ this._navYearFirst = coerceBooleanProperty(value);
199
+ }
200
+ get navYearFirst() {
201
+ return this._navYearFirst;
202
+ }
203
+ /**
204
+ * Default icon or character that separates two dates.
205
+ * @type boolean
206
+ * @default true
207
+ */
208
+ set separator(value) {
209
+ this._separator = coerceBooleanProperty(value);
210
+ }
211
+ get separator() {
212
+ return this._separator;
213
+ }
214
+ /**
215
+ * Provide an additional time selection by adding select boxes to choose time.
216
+ * @type boolean
217
+ * @default false
218
+ */
219
+ set timepicker(value) {
220
+ this._timepicker = coerceBooleanProperty(value);
221
+ }
222
+ get timepicker() {
223
+ return false;
224
+ // return this._timepicker;
225
+ }
226
+ /**
227
+ * Toggle the visibility of the dropdown date-picker component.
228
+ * @type boolean
229
+ * @default false
230
+ */
231
+ set visible(value) {
232
+ this._visible = coerceBooleanProperty(value);
233
+ }
234
+ get visible() {
235
+ return this._visible;
236
+ }
237
+ set startDate(value) {
238
+ const prevDate = this._startDate ? new Date(this._startDate) : null;
239
+ this._startDate = value ? new Date(value) : null;
240
+ if (prevDate?.getTime() !== this._startDate?.getTime()) {
241
+ this.startDateValue = this._startDate?.toLocaleDateString(this.locale) ?? '';
242
+ this.startDateChange.emit(this._startDate);
243
+ }
244
+ }
245
+ get startDate() {
246
+ return this._startDate;
247
+ }
248
+ set endDate(value) {
249
+ const prevDate = this._endDate ? new Date(this._endDate ?? 0) : null;
250
+ this._endDate = value ? new Date(value) : null;
251
+ if (prevDate?.getTime() !== this._endDate?.getTime()) {
252
+ this.endDateValue = this._endDate?.toLocaleDateString(this.locale) ?? '';
253
+ this.endDateChange.emit(this._endDate);
254
+ }
255
+ }
256
+ get endDate() {
257
+ return this._endDate;
258
+ }
259
+ set firstDayOfWeek(value) {
260
+ this._firstDayOfWeek = coerceNumberProperty(value);
261
+ }
262
+ get firstDayOfWeek() {
263
+ return this._firstDayOfWeek;
264
+ }
265
+ set navigation(value) {
266
+ this._navigation = coerceBooleanProperty(value);
267
+ }
268
+ get navigation() {
269
+ return this._navigation;
270
+ }
271
+ /**
272
+ * Allow range selection.
273
+ * @type boolean
274
+ * @default false
275
+ */
276
+ set range(value) {
277
+ this._range = coerceBooleanProperty(value);
278
+ }
279
+ get range() {
280
+ return this._range;
281
+ }
282
+ set disabled(value) {
283
+ this._disabled = coerceBooleanProperty(value);
284
+ this._disabled ? this.startDateInput.disable() : this.startDateInput.enable();
285
+ this._disabled ? this.endDateInput.disable() : this.endDateInput.enable();
286
+ }
287
+ get disabled() {
288
+ return this._disabled;
289
+ }
290
+ set value(value) {
291
+ const newValue = this.range ? { ...value } : value;
292
+ if (JSON.stringify(this._value) !== JSON.stringify(newValue)) {
293
+ this._value = newValue;
294
+ if (this.range) {
295
+ this.handleStartDateChange(newValue.startDate ?? null);
296
+ this.handleEndDateChange(newValue.endDate ?? null);
297
+ }
298
+ else {
299
+ this.handleStartDateChange(newValue ?? null);
300
+ }
301
+ this.onChange(newValue);
302
+ this.onTouched();
303
+ this.valueChange.emit(this.value);
304
+ if (this.closeOnSelect) {
305
+ const hasValue = this.range ? !!(this.value.startDate && this.value.endDate) : !!this.value;
306
+ this.visible = !hasValue;
307
+ }
308
+ }
309
+ }
310
+ get value() {
311
+ return this._value;
312
+ }
313
+ /**
314
+ * Set whether days in adjacent months shown before or after the current month are selectable. This only applies if the `showAdjacentDays` option is set to true.
315
+ * @type boolean
316
+ * @default false
317
+ * @since 4.4.10
318
+ */
319
+ set selectAdjacentDays(value) {
320
+ this.#selectAdjacentDays = coerceBooleanProperty(value);
321
+ }
322
+ get selectAdjacentDays() {
323
+ return this.#selectAdjacentDays;
324
+ }
325
+ #selectAdjacentDays;
326
+ subscribeDateChange(subscribe = true) {
327
+ if (subscribe) {
328
+ // todo
329
+ // this.dateChangeSubscriptions.push(this.startDateChange.subscribe(next => {
330
+ // this.startDate = next;
331
+ // this.onChange(next);
332
+ // }));
333
+ // this.dateChangeSubscriptions.push(this.startDateChange.subscribe(next => {
334
+ // this.endDate = next;
335
+ // this.onChange(next);
336
+ // }));
337
+ return;
338
+ }
339
+ this.dateChangeSubscriptions.forEach(subscription => {
340
+ subscription?.unsubscribe();
341
+ });
342
+ }
343
+ onBlur() {
344
+ this.onTouched();
345
+ }
346
+ set startDateValue(value) {
347
+ this.startDateInput.setValue(value);
348
+ this._startDateValue = value;
349
+ }
350
+ get startDateValue() {
351
+ return this._startDateValue;
352
+ }
353
+ set endDateValue(value) {
354
+ this.endDateInput.setValue(value);
355
+ this._endDateValue = value;
356
+ }
357
+ get endDateValue() {
358
+ return this._endDateValue;
359
+ }
360
+ get startDatePlaceholder() {
361
+ return Array.isArray(this.placeholder) ? this.placeholder[0] : this.placeholder;
362
+ }
363
+ ;
364
+ get endDatePlaceholder() {
365
+ return Array.isArray(this.placeholder) ? this.placeholder[1] : this.placeholder;
366
+ }
367
+ ;
368
+ set inputStartHoverValue(value) {
369
+ this._inputStartHoverValue = value;
370
+ }
371
+ get inputStartHoverValue() {
372
+ return this._inputStartHoverValue;
373
+ }
374
+ set inputEndHoverValue(value) {
375
+ this._inputEndHoverValue = value;
376
+ }
377
+ get inputEndHoverValue() {
378
+ return this._inputEndHoverValue;
379
+ }
380
+ get datePickerClasses() {
381
+ return {
382
+ 'is-valid': this.valid === true,
383
+ 'is-invalid': this.valid === false
384
+ };
385
+ }
386
+ formatDate(date) {
387
+ return this.format
388
+ ? dateFormat(date, this.format)
389
+ : this.timepicker
390
+ ? date.toLocaleString(this.locale)
391
+ : date.toLocaleDateString(this.locale);
392
+ }
393
+ ngOnInit() {
394
+ this.layoutChanges = this.breakpointObserver.observe([
395
+ Breakpoints.Handset,
396
+ Breakpoints.Tablet
397
+ ]).subscribe(result => {
398
+ this.isMobile = result.matches;
399
+ });
400
+ this.customRanges = this.ranges ? Object.entries(this.ranges) : [];
401
+ this.startDateValue = this.startDate?.toLocaleDateString(this.locale) ?? '';
402
+ this.endDateValue = this.endDate?.toLocaleDateString(this.locale) ?? '';
403
+ this.subscribeDateChange();
404
+ }
405
+ ngOnDestroy() {
406
+ this.layoutChanges?.unsubscribe();
407
+ this.subscribeDateChange(false);
408
+ }
409
+ ngAfterViewInit() {
410
+ setTimeout(() => {
411
+ this.contentTemplates.forEach((child) => {
412
+ this.templates[child.id] = child.templateRef;
413
+ });
414
+ });
415
+ }
416
+ ngOnChanges(changes) {
417
+ if (changes['date']) {
418
+ // for date-picker component
419
+ const date = this.convertValueToDate(changes['date']?.currentValue) ?? null;
420
+ this.handleStartDateChange(date);
421
+ this.calendarDate = date ?? this.calendarDate;
422
+ }
423
+ if (changes['startDate']) {
424
+ const date = this.convertValueToDate(changes['startDate']?.currentValue) ?? null;
425
+ this.handleStartDateChange(date);
426
+ this.calendarDate = date ?? this.calendarDate;
427
+ }
428
+ if (changes['endDate']) {
429
+ const date = this.convertValueToDate(changes['endDate']?.currentValue) ?? null;
430
+ this.handleEndDateChange(date);
431
+ }
432
+ }
433
+ convertValueToDate(value) {
434
+ if (!value) {
435
+ return null;
436
+ }
437
+ if (typeof value === 'string') {
438
+ return getLocalDateFromString(value, this.locale, this.timepicker);
439
+ }
440
+ return new Date(value) ?? null;
441
+ }
442
+ getCustomRangeKey(customRange) {
443
+ return customRange[0];
444
+ }
445
+ setCustomRange(customRange) {
446
+ const key = this.getCustomRangeKey(customRange);
447
+ this.handleStartDateChange(customRange[1][0]);
448
+ this.handleEndDateChange(customRange[1][1]);
449
+ }
450
+ handleCalendarCellHover($event) {
451
+ this.calendarCellHover.emit($event);
452
+ if (!this.startDate) {
453
+ this.setInputValue(this.startDateElementRef, $event);
454
+ this.inputStartHoverValue = $event;
455
+ this.setInputValue(this.endDateElementRef, null);
456
+ this.inputEndHoverValue = null;
457
+ return;
458
+ }
459
+ if (!this.endDate) {
460
+ this.setInputValue(this.endDateElementRef, $event);
461
+ this.inputEndHoverValue = $event;
462
+ return;
463
+ }
464
+ }
465
+ handleCalendarDateChange($event) {
466
+ if (this.calendarDate.getTime() !== $event.getTime()) {
467
+ this.calendarDateChange.emit($event);
468
+ }
469
+ }
470
+ handleStartDateChange(date) {
471
+ if (date?.getTime() !== this.startDate?.getTime()) {
472
+ this.startDate = date ?? null;
473
+ this.startDateValue = date ? date.toLocaleDateString(this.locale) : '';
474
+ this.inputStartHoverValue = null;
475
+ this.value = this.range ? { startDate: this.startDate, endDate: this.endDate } : this.startDate;
476
+ }
477
+ }
478
+ handleEndDateChange(date) {
479
+ if (date?.getTime() !== this.endDate?.getTime()) {
480
+ if (!this.range) {
481
+ return;
482
+ }
483
+ this.endDate = date ?? null;
484
+ this.endDateValue = date ? date.toLocaleDateString(this.locale) : '';
485
+ this.inputEndHoverValue = null;
486
+ this.value = this.range ? { startDate: this.startDate, endDate: this.endDate } : this.startDate;
487
+ }
488
+ }
489
+ handleClear($event) {
490
+ // this.calendarComponent.clearDates();
491
+ this.handleStartDateChange(null);
492
+ this.handleEndDateChange(null);
493
+ }
494
+ handleStartDateInputChange($event) {
495
+ const date = getLocalDateFromString($event.target?.value, this.locale, this.timepicker);
496
+ if (!date) {
497
+ // this.calendarComponent.clearDates();
498
+ this.handleStartDateChange(null);
499
+ this.handleEndDateChange(null);
500
+ }
501
+ if (date instanceof Date && date.getTime()) {
502
+ if (!(this.forbiddenDate(date) || (this.endDate && this.endDate < date))) {
503
+ this.calendarDate = date;
504
+ this.startDate = date;
505
+ }
506
+ }
507
+ this.handleStartDateChange(this.startDate ?? null);
508
+ }
509
+ handleEndDateInputChange($event) {
510
+ const date = getLocalDateFromString($event.target?.value, this.locale, this.timepicker);
511
+ if (!date) {
512
+ this.endDate = null;
513
+ }
514
+ if (date instanceof Date && date.getTime()) {
515
+ if (!(this.forbiddenDate(date) || (this.startDate && this.startDate > date))) {
516
+ this.calendarDate = date;
517
+ this.endDate = date;
518
+ }
519
+ }
520
+ this.handleEndDateChange(this.endDate ?? null);
521
+ }
522
+ forbiddenDate(date) {
523
+ return isDateDisabled(date, this.minDate, this.maxDate, this.disabledDates) || (this.dateFilter ? !this.dateFilter(date) : false);
524
+ }
525
+ registerOnChange(fn) {
526
+ this.onChange = fn;
527
+ }
528
+ registerOnTouched(fn) {
529
+ this.onTouched = fn;
530
+ }
531
+ setDisabledState(isDisabled) {
532
+ this.disabled = isDisabled;
533
+ }
534
+ writeValue(value) {
535
+ if (value !== null) {
536
+ this.value = this.range ? { ...value } : value;
537
+ }
538
+ }
539
+ handleStartTimeChange(time) {
540
+ this.startDate = time ?? this.startDate;
541
+ }
542
+ handleEndTimeChange(time) {
543
+ if (!this.range) {
544
+ return;
545
+ }
546
+ this.endDate = time ?? this.endDate;
547
+ }
548
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.5", ngImport: i0, type: DateRangePickerComponent, deps: [{ token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component }); }
549
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.5", type: DateRangePickerComponent, isStandalone: true, selector: "c-date-range-picker", inputs: { dayFormat: "dayFormat", calendars: "calendars", cleaner: "cleaner", closeOnSelect: "closeOnSelect", format: "format", indicator: "indicator", inputReadOnly: "inputReadOnly", navYearFirst: "navYearFirst", placeholder: "placeholder", ranges: "ranges", rangesButtonsColor: "rangesButtonsColor", rangesButtonsSize: "rangesButtonsSize", rangesButtonsVariant: "rangesButtonsVariant", separator: "separator", size: "size", timepicker: "timepicker", valid: "valid", visible: "visible", startDate: "startDate", endDate: "endDate", calendarDate: "calendarDate", disabledDates: "disabledDates", firstDayOfWeek: "firstDayOfWeek", locale: "locale", maxDate: "maxDate", minDate: "minDate", navigation: "navigation", range: "range", dateFilter: "dateFilter", disabled: "disabled", value: "value", weekdayFormat: "weekdayFormat", popperjsOptions: ["popperOptions", "popperjsOptions"], selectAdjacentDays: "selectAdjacentDays", showAdjacentDays: "showAdjacentDays" }, outputs: { valueChange: "valueChange", calendarCellHover: "calendarCellHover", calendarDateChange: "calendarDateChange", endDateChange: "endDateChange", startDateChange: "startDateChange" }, host: { listeners: { "blur": "onBlur()" } }, providers: [
550
+ {
551
+ provide: NG_VALUE_ACCESSOR,
552
+ useExisting: forwardRef(() => DateRangePickerComponent),
553
+ multi: true
554
+ }
555
+ ], queries: [{ propertyName: "contentTemplates", predicate: TemplateIdDirective, descendants: true }], viewQueries: [{ propertyName: "startDateElementRef", first: true, predicate: ["startDateElementRef"], descendants: true }, { propertyName: "endDateElementRef", first: true, predicate: ["endDateElementRef"], descendants: true }], exportAs: ["cDateRangePicker"], usesOnChanges: true, ngImport: i0, template: "<c-dropdown #dropdown=\"cDropdown\" [autoClose]=\"'outside'\" class=\"date-picker picker\" [ngClass]=\"datePickerClasses\"\n [(visible)]=\"visible\" [popperOptions]=\"popperjsOptions\">\n <c-input-group [caret]=\"false\"\n [disabled]=\"disabled ?? dropdown.visible\"\n [sizing]=\"size ?? ''\"\n cDropdownToggle\n class=\"picker-input-group\"\n >\n <input (change)=\"handleStartDateInputChange($event)\"\n [formControl]=\"startDateInput\"\n [ngClass]=\"{hover: !!inputStartHoverValue}\"\n [placeholder]=\"startDatePlaceholder\"\n cFormControl\n #startDateElementRef\n [attr.tabindex]=\"disabled ? -1 : 0\"\n pattern=\"[1-9]*\"\n [readonly]=\"inputReadOnly ?? null\"\n [valid]=\"range ? undefined : valid\"\n >\n <span *ngIf=\"range && separator !== false\" cInputGroupText>\n <span class=\"picker-input-group-icon date-picker-arrow-icon\"></span>\n </span>\n <input (change)=\"handleEndDateInputChange($event)\"\n *ngIf=\"range\"\n [formControl]=\"endDateInput\"\n [ngClass]=\"{hover: !!inputEndHoverValue}\"\n [placeholder]=\"endDatePlaceholder\"\n cFormControl\n #endDateElementRef\n [attr.tabindex]=\"disabled ? -1 : 0\"\n pattern=\"[1-9]*\"\n [readonly]=\"inputReadOnly ?? null\"\n [valid]=\"valid ?? undefined\"\n >\n <span *ngIf=\"indicator || cleaner\" cInputGroupText>\n <span *ngIf=\"indicator\" class=\"picker-input-group-indicator\">\n <span class=\"picker-input-group-icon date-picker-input-icon\"></span>\n </span>\n <span (click)=\"!disabled && handleClear($event)\"\n *ngIf=\"cleaner && startDateElementRef.value && !disabled\"\n class=\"picker-input-group-cleaner\" role=\"button\">\n <span class=\"picker-input-group-icon date-picker-cleaner-icon\"></span>\n </span>\n </span>\n\n </c-input-group>\n <div cDropdownMenu>\n <div class=\"date-picker-body\">\n <ng-template [ngIf]=\"!isMobile\">\n <div *ngIf=\"ranges\" class=\"date-picker-ranges\">\n <button (click)=\"setCustomRange(customRange)\"\n *ngFor=\"let customRange of customRanges\"\n [color]=\"rangesButtonsColor\"\n [size]=\"rangesButtonsSize\"\n [variant]=\"rangesButtonsVariant\"\n cButton>\n {{getCustomRangeKey(customRange)}}\n </button>\n </div>\n </ng-template>\n <c-calendar\n (calendarCellHover)=\"handleCalendarCellHover($event)\"\n (calendarDateChange)=\"handleCalendarDateChange($event)\"\n (endDateChange)=\"handleEndDateChange($event)\"\n (startDateChange)=\"handleStartDateChange($event)\"\n [calendarDate]=\"calendarDate\"\n [calendars]=\"isMobile ? 1 : calendars\"\n [dateFilter]=\"dateFilter\"\n [disabledDates]=\"disabledDates\"\n [endDate]=\"endDate\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [locale]=\"locale\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [navigation]=\"navigation\"\n [range]=\"range\"\n [startDate]=\"startDate\"\n [navYearFirst]=\"navYearFirst\"\n [dayFormat]=\"dayFormat\"\n [weekdayFormat]=\"weekdayFormat\"\n [selectAdjacentDays]=\"selectAdjacentDays\"\n [showAdjacentDays]=\"showAdjacentDays\"\n class=\"date-picker-calendars\"\n ></c-calendar>\n <div *ngIf=\"false && timepicker\" class=\"date-picker-timepickers\">\n <!-- todo-->\n <c-time-picker\n variant=\"select\"\n [locale]=\"locale\"\n [disabled]=\"!startDate\"\n [time]=\"startDate ?? undefined\"\n (timeChange)=\"handleStartTimeChange($event)\"\n ></c-time-picker>\n <c-time-picker\n *ngIf=\"range\"\n variant=\"select\"\n [locale]=\"locale\"\n [disabled]=\"!endDate\"\n [time]=\"endDate ?? undefined\"\n (timeChange)=\"handleEndTimeChange($event)\"\n ></c-time-picker>\n </div>\n </div>\n <div *ngIf=\"templates?.datePickerFooter\" class=\"picker-footer\">\n <ng-container *ngTemplateOutlet=\"templates?.datePickerFooter; context: {$implicit: dropdown}\"></ng-container>\n </div>\n </div>\n <ng-content></ng-content>\n</c-dropdown>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: CalendarComponent, selector: "c-calendar", inputs: ["calendarDate", "calendars", "dayFormat", "disabledDates", "startDate", "endDate", "firstDayOfWeek", "locale", "maxDate", "minDate", "navigation", "navYearFirst", "range", "view", "weekdayFormat", "dateFilter", "selectAdjacentDays", "showAdjacentDays"], outputs: ["calendarCellHover", "calendarDateChange", "endDateChange", "startDateChange", "viewChange"], exportAs: ["cCalendar"] }, { kind: "component", type: TimePickerComponent, selector: "c-time-picker", inputs: ["cleaner", "dateTimeFormatOptions", "disabled", "filterHours", "filterMinutes", "filterSeconds", "indicator", "inputReadOnly", "locale", "placeholder", "seconds", "size", "time", "variant", "valid", "visible"], outputs: ["timeChange"], exportAs: ["cTimePicker"] }, { kind: "directive", type: ButtonDirective, selector: "[cButton]", inputs: ["active", "color", "disabled", "shape", "size", "type", "variant"], exportAs: ["cButton"] }, { kind: "component", type: DropdownComponent, selector: "c-dropdown", inputs: ["alignment", "autoClose", "dark", "direction", "placement", "popper", "popperOptions", "variant", "visible"], outputs: ["visibleChange"], exportAs: ["cDropdown"] }, { kind: "directive", type: DropdownToggleDirective, selector: "[cDropdownToggle]", inputs: ["dropdownComponent", "disabled", "caret", "split"], exportAs: ["cDropdownToggle"] }, { kind: "directive", type: DropdownMenuDirective, selector: "[cDropdownMenu]", inputs: ["alignment", "visible", "dark"], exportAs: ["cDropdownMenu"] }, { kind: "component", type: InputGroupComponent, selector: "c-input-group", inputs: ["sizing"] }, { kind: "directive", type: FormControlDirective, selector: "input[cFormControl], textarea[cFormControl]", inputs: ["sizing", "valid", "type", "plaintext"] }, { kind: "directive", type: InputGroupTextDirective, selector: "[cInputGroupText]" }] }); }
556
+ }
557
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.5", ngImport: i0, type: DateRangePickerComponent, decorators: [{
558
+ type: Component,
559
+ args: [{ selector: 'c-date-range-picker', exportAs: 'cDateRangePicker', standalone: true, imports: [
560
+ NgClass,
561
+ NgIf,
562
+ NgForOf,
563
+ NgTemplateOutlet,
564
+ ReactiveFormsModule,
565
+ CalendarComponent,
566
+ TimePickerComponent,
567
+ ButtonDirective,
568
+ DropdownComponent,
569
+ DropdownToggleDirective,
570
+ DropdownMenuDirective,
571
+ InputGroupComponent,
572
+ FormControlDirective,
573
+ InputGroupTextDirective
574
+ ], providers: [
575
+ {
576
+ provide: NG_VALUE_ACCESSOR,
577
+ useExisting: forwardRef(() => DateRangePickerComponent),
578
+ multi: true
579
+ }
580
+ ], template: "<c-dropdown #dropdown=\"cDropdown\" [autoClose]=\"'outside'\" class=\"date-picker picker\" [ngClass]=\"datePickerClasses\"\n [(visible)]=\"visible\" [popperOptions]=\"popperjsOptions\">\n <c-input-group [caret]=\"false\"\n [disabled]=\"disabled ?? dropdown.visible\"\n [sizing]=\"size ?? ''\"\n cDropdownToggle\n class=\"picker-input-group\"\n >\n <input (change)=\"handleStartDateInputChange($event)\"\n [formControl]=\"startDateInput\"\n [ngClass]=\"{hover: !!inputStartHoverValue}\"\n [placeholder]=\"startDatePlaceholder\"\n cFormControl\n #startDateElementRef\n [attr.tabindex]=\"disabled ? -1 : 0\"\n pattern=\"[1-9]*\"\n [readonly]=\"inputReadOnly ?? null\"\n [valid]=\"range ? undefined : valid\"\n >\n <span *ngIf=\"range && separator !== false\" cInputGroupText>\n <span class=\"picker-input-group-icon date-picker-arrow-icon\"></span>\n </span>\n <input (change)=\"handleEndDateInputChange($event)\"\n *ngIf=\"range\"\n [formControl]=\"endDateInput\"\n [ngClass]=\"{hover: !!inputEndHoverValue}\"\n [placeholder]=\"endDatePlaceholder\"\n cFormControl\n #endDateElementRef\n [attr.tabindex]=\"disabled ? -1 : 0\"\n pattern=\"[1-9]*\"\n [readonly]=\"inputReadOnly ?? null\"\n [valid]=\"valid ?? undefined\"\n >\n <span *ngIf=\"indicator || cleaner\" cInputGroupText>\n <span *ngIf=\"indicator\" class=\"picker-input-group-indicator\">\n <span class=\"picker-input-group-icon date-picker-input-icon\"></span>\n </span>\n <span (click)=\"!disabled && handleClear($event)\"\n *ngIf=\"cleaner && startDateElementRef.value && !disabled\"\n class=\"picker-input-group-cleaner\" role=\"button\">\n <span class=\"picker-input-group-icon date-picker-cleaner-icon\"></span>\n </span>\n </span>\n\n </c-input-group>\n <div cDropdownMenu>\n <div class=\"date-picker-body\">\n <ng-template [ngIf]=\"!isMobile\">\n <div *ngIf=\"ranges\" class=\"date-picker-ranges\">\n <button (click)=\"setCustomRange(customRange)\"\n *ngFor=\"let customRange of customRanges\"\n [color]=\"rangesButtonsColor\"\n [size]=\"rangesButtonsSize\"\n [variant]=\"rangesButtonsVariant\"\n cButton>\n {{getCustomRangeKey(customRange)}}\n </button>\n </div>\n </ng-template>\n <c-calendar\n (calendarCellHover)=\"handleCalendarCellHover($event)\"\n (calendarDateChange)=\"handleCalendarDateChange($event)\"\n (endDateChange)=\"handleEndDateChange($event)\"\n (startDateChange)=\"handleStartDateChange($event)\"\n [calendarDate]=\"calendarDate\"\n [calendars]=\"isMobile ? 1 : calendars\"\n [dateFilter]=\"dateFilter\"\n [disabledDates]=\"disabledDates\"\n [endDate]=\"endDate\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [locale]=\"locale\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [navigation]=\"navigation\"\n [range]=\"range\"\n [startDate]=\"startDate\"\n [navYearFirst]=\"navYearFirst\"\n [dayFormat]=\"dayFormat\"\n [weekdayFormat]=\"weekdayFormat\"\n [selectAdjacentDays]=\"selectAdjacentDays\"\n [showAdjacentDays]=\"showAdjacentDays\"\n class=\"date-picker-calendars\"\n ></c-calendar>\n <div *ngIf=\"false && timepicker\" class=\"date-picker-timepickers\">\n <!-- todo-->\n <c-time-picker\n variant=\"select\"\n [locale]=\"locale\"\n [disabled]=\"!startDate\"\n [time]=\"startDate ?? undefined\"\n (timeChange)=\"handleStartTimeChange($event)\"\n ></c-time-picker>\n <c-time-picker\n *ngIf=\"range\"\n variant=\"select\"\n [locale]=\"locale\"\n [disabled]=\"!endDate\"\n [time]=\"endDate ?? undefined\"\n (timeChange)=\"handleEndTimeChange($event)\"\n ></c-time-picker>\n </div>\n </div>\n <div *ngIf=\"templates?.datePickerFooter\" class=\"picker-footer\">\n <ng-container *ngTemplateOutlet=\"templates?.datePickerFooter; context: {$implicit: dropdown}\"></ng-container>\n </div>\n </div>\n <ng-content></ng-content>\n</c-dropdown>\n" }]
581
+ }], ctorParameters: function () { return [{ type: i1.BreakpointObserver }]; }, propDecorators: { dayFormat: [{
582
+ type: Input
583
+ }], calendars: [{
584
+ type: Input
585
+ }], cleaner: [{
586
+ type: Input
587
+ }], closeOnSelect: [{
588
+ type: Input
589
+ }], format: [{
590
+ type: Input
591
+ }], indicator: [{
592
+ type: Input
593
+ }], inputReadOnly: [{
594
+ type: Input
595
+ }], navYearFirst: [{
596
+ type: Input
597
+ }], placeholder: [{
598
+ type: Input
599
+ }], ranges: [{
600
+ type: Input
601
+ }], rangesButtonsColor: [{
602
+ type: Input
603
+ }], rangesButtonsSize: [{
604
+ type: Input
605
+ }], rangesButtonsVariant: [{
606
+ type: Input
607
+ }], separator: [{
608
+ type: Input
609
+ }], size: [{
610
+ type: Input
611
+ }], timepicker: [{
612
+ type: Input
613
+ }], valid: [{
614
+ type: Input
615
+ }], visible: [{
616
+ type: Input
617
+ }], startDate: [{
618
+ type: Input
619
+ }], endDate: [{
620
+ type: Input
621
+ }], calendarDate: [{
622
+ type: Input
623
+ }], disabledDates: [{
624
+ type: Input
625
+ }], firstDayOfWeek: [{
626
+ type: Input
627
+ }], locale: [{
628
+ type: Input
629
+ }], maxDate: [{
630
+ type: Input
631
+ }], minDate: [{
632
+ type: Input
633
+ }], navigation: [{
634
+ type: Input
635
+ }], range: [{
636
+ type: Input
637
+ }], dateFilter: [{
638
+ type: Input
639
+ }], disabled: [{
640
+ type: Input
641
+ }], value: [{
642
+ type: Input
643
+ }], weekdayFormat: [{
644
+ type: Input
645
+ }], popperjsOptions: [{
646
+ type: Input,
647
+ args: ['popperOptions']
648
+ }], selectAdjacentDays: [{
649
+ type: Input
650
+ }], showAdjacentDays: [{
651
+ type: Input
652
+ }], valueChange: [{
653
+ type: Output
654
+ }], calendarCellHover: [{
655
+ type: Output
656
+ }], calendarDateChange: [{
657
+ type: Output
658
+ }], endDateChange: [{
659
+ type: Output
660
+ }], startDateChange: [{
661
+ type: Output
662
+ }], startDateElementRef: [{
663
+ type: ViewChild,
664
+ args: ['startDateElementRef']
665
+ }], endDateElementRef: [{
666
+ type: ViewChild,
667
+ args: ['endDateElementRef']
668
+ }], contentTemplates: [{
669
+ type: ContentChildren,
670
+ args: [TemplateIdDirective, { descendants: true }]
671
+ }], onBlur: [{
672
+ type: HostListener,
673
+ args: ['blur']
674
+ }] } });
675
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsZUFBZSxFQUVmLFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBR04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNFLE9BQU8sRUFFTCxXQUFXLEVBRVgsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixVQUFVLEVBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQWdCLHFCQUFxQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEcsT0FBTyxFQUFzQixXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUd0RSxPQUFPLEVBQUUsTUFBTSxJQUFJLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUdoRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUV2RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FB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QkFBMUIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUcyQixtQkFBbUI7c0JBQXBELFNBQVM7dUJBQUMscUJBQXFCO2dCQUNBLGlCQUFpQjtzQkFBaEQsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBRytCLGdCQUFnQjtzQkFBNUUsZUFBZTt1QkFBQyxtQkFBbUIsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBc0JyQyxNQUFNO3NCQUEzQixZQUFZO3VCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdDbGFzcywgTmdGb3JPZiwgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Hcm91cCxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gIFZhbGlkYXRvcnNcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHksIGNvZXJjZU51bWJlclByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IEJyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludHMgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBmb3JtYXQgYXMgZGF0ZUZvcm1hdCB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICdAcG9wcGVyanMvY29yZSc7XG5cbmltcG9ydCB7IEJ1dHRvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2J1dHRvbic7XG5pbXBvcnQgeyBnZXRMb2NhbERhdGVGcm9tU3RyaW5nLCBpc0RhdGVEaXNhYmxlZCB9IGZyb20gJy4uLy4uL2NhbGVuZGFyL2NhbGVuZGFyLnV0aWxzJztcbmltcG9ydCB7IERhdGVGaWx0ZXJUeXBlLCBEYXlGb3JtYXRUeXBlLCBXZWVrZGF5Rm9ybWF0VHlwZSB9IGZyb20gJy4uLy4uL2NhbGVuZGFyL2NhbGVuZGFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FsZW5kYXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jYWxlbmRhcic7XG5pbXBvcnQgeyBDb2xvcnMgfSBmcm9tICcuLi8uLi9jb3JldWkudHlwZXMnO1xuaW1wb3J0IHsgRHJvcGRvd25Db21wb25lbnQsIERyb3Bkb3duTWVudURpcmVjdGl2ZSwgRHJvcGRvd25Ub2dnbGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kcm9wZG93bic7XG5pbXBvcnQgeyBGb3JtQ29udHJvbERpcmVjdGl2ZSwgSW5wdXRHcm91cENvbXBvbmVudCwgSW5wdXRHcm91cFRleHREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9mb3JtJztcbmltcG9ydCB7IFRlbXBsYXRlSWREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuaW1wb3J0IHsgVGltZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3RpbWUtcGlja2VyJztcblxuZXhwb3J0IGludGVyZmFjZSBJQ2FsZW5kYXJSYW5nZXMge1xuICBba2V5OiBzdHJpbmddOiBEYXRlW107XG59XG5cbmV4cG9ydCB0eXBlIFRDdXN0b21SYW5nZSA9IFtzdHJpbmcsIERhdGVbXV1cblxuLyoqIE11c3QgYmUgYSB2YWxpZCBkYXRlIHN0cmluZyAqL1xuLy8gdG9kbzogdmFsaWRhdGlvblxuLy8gZXhwb3J0IGZ1bmN0aW9uIGludmFsaWREYXRlU3RyaW5nVmFsaWRhdG9yKGxvY2FsZTogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xuLy8gICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbi8vICAgICAvLyBjb25zdCB2YWxpZERhdGUgPSAhaXNOYU4oRGF0ZS5wYXJzZShjb250cm9sLnZhbHVlKSk7XG4vLyAgICAgc3RyaW5nVG9EYXRlQ29udmVydChjb250cm9sLnZhbHVlLCBsb2NhbGUpO1xuLy8gICAgIGNvbnN0IGRhdGVTaGltID0gY3Z0RGF0ZShjb250cm9sLnZhbHVlLCBsb2NhbGUpO1xuLy8gICAgIC8vIEB0cy1pZ25vcmVcbi8vICAgICAvLyBjb250cm9sLnNldFZhbHVlKG5ldyBEYXRlKGRhdGVTaGltLnllYXIsIGRhdGVTaGltLm1vbnRoLCBkYXRlU2hpbS5kYXkpKVxuLy8gICAgIGNvbnNvbGUubG9nKCdkYXRlU2hpbScsIGRhdGVTaGltLCBsb2NhbGUpO1xuLy8gICAgIGNvbnN0IHZhbGlkRGF0ZSA9IGlzVmFsaWREYXRlKGNvbnRyb2wudmFsdWUpO1xuLy8gICAgIGNvbnNvbGUubG9nKCdpbnZhbGlkRGF0ZVN0cmluZ1ZhbGlkYXRvcicsIGNvbnRyb2wsIGNvbnRyb2wudmFsdWUsIHZhbGlkRGF0ZSk7XG4vLyAgICAgcmV0dXJuIHZhbGlkRGF0ZSA/IHsgaW52YWxpZERhdGVTdHJpbmdWYWxpZGF0b3I6IHsgdmFsdWU6IGNvbnRyb2wudmFsdWUgfSB9IDogbnVsbDtcbi8vICAgfTtcbi8vIH1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYy1kYXRlLXJhbmdlLXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIGV4cG9ydEFzOiAnY0RhdGVSYW5nZVBpY2tlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0NsYXNzLFxuICAgIE5nSWYsXG4gICAgTmdGb3JPZixcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgQ2FsZW5kYXJDb21wb25lbnQsXG4gICAgVGltZVBpY2tlckNvbXBvbmVudCxcbiAgICBCdXR0b25EaXJlY3RpdmUsXG4gICAgRHJvcGRvd25Db21wb25lbnQsXG4gICAgRHJvcGRvd25Ub2dnbGVEaXJlY3RpdmUsXG4gICAgRHJvcGRvd25NZW51RGlyZWN0aXZlLFxuICAgIElucHV0R3JvdXBDb21wb25lbnQsXG4gICAgRm9ybUNvbnRyb2xEaXJlY3RpdmUsXG4gICAgSW5wdXRHcm91cFRleHREaXJlY3RpdmVcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9jbG9zZU9uU2VsZWN0OiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9kaXNhYmxlZDogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbmF2WWVhckZpcnN0OiBCb29sZWFuSW5wdXQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBicmVha3BvaW50T2JzZXJ2ZXI6IEJyZWFrcG9pbnRPYnNlcnZlclxuICApIHsgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGZvcm1hdCBvZiBkYXkgbmFtZS5cbiAgICogQGRlZmF1bHQgJ251bWVyaWMnXG4gICAqIEB0eXBlIERheUZvcm1hdFR5cGVcbiAgICovXG4gIEBJbnB1dCgpIGRheUZvcm1hdDogRGF5Rm9ybWF0VHlwZSA9ICdudW1lcmljJztcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBjYWxlbmRhcnMgdGhhdCByZW5kZXIgb24gZGVza3RvcCBkZXZpY2VzLlxuICAgKiBAdHlwZSBudW1iZXJcbiAgICogQGRlZmF1bHQgMlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGNhbGVuZGFycyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fY2FsZW5kYXJzID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IGNhbGVuZGFycygpIHtcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXJzO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2FsZW5kYXJzOiBudW1iZXIgPSAyO1xuXG4gIC8qKlxuICAgKiBUb2dnbGUgdmlzaWJpbGl0eSBvciBzZXQgdGhlIGNvbnRlbnQgb2YgdGhlIGNsZWFuZXIgYnV0dG9uLlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBjbGVhbmVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fY2xlYW5lciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgY2xlYW5lcigpIHtcbiAgICByZXR1cm4gdGhpcy5fY2xlYW5lcjtcbiAgfVxuXG4gIHByaXZhdGUgX2NsZWFuZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgdGhlIGRyb3Bkb3duIHNob3VsZCBiZSBjbG9zZWQgYWZ0ZXIgdmFsdWUgc2V0dGluZy5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGNsb3NlT25TZWxlY3QodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLiNjbG9zZU9uU2VsZWN0ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBjbG9zZU9uU2VsZWN0KCkge1xuICAgIHJldHVybiB0aGlzLiNjbG9zZU9uU2VsZWN0O1xuICB9XG5cbiAgI2Nsb3NlT25TZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogU2V0IGRhdGUgZm9ybWF0LlxuICAgKiBXZSB1c2UgZGF0ZS1mbnMgdG8gZm9ybWF0IGRhdGVzLiBWaXNpdCBodHRwczovL2RhdGUtZm5zLm9yZy92Mi4yOC4wL2RvY3MvZm9ybWF0IHRvIGNoZWNrIGFjY2VwdGVkIHBhdHRlcm5zLlxuICAgKi9cbiAgQElucHV0KClcbiAgZm9ybWF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUb2dnbGUgdmlzaWJpbGl0eSBvciBzZXQgdGhlIGNvbnRlbnQgb2YgdGhlIGlucHV0IGluZGljYXRvci5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgaW5kaWNhdG9yKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faW5kaWNhdG9yID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBpbmRpY2F0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2luZGljYXRvcjtcbiAgfVxuXG4gIHByaXZhdGUgX2luZGljYXRvcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgcmVhZG9ubHkgc3RhdGUgZm9yIHRoZSBjb21wb25lbnQuXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBpbnB1dFJlYWRPbmx5KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faW5wdXRSZWFkT25seSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgaW5wdXRSZWFkT25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faW5wdXRSZWFkT25seSB8fCB0eXBlb2YgdGhpcy5mb3JtYXQgPT09ICdzdHJpbmcnO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5wdXRSZWFkT25seTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBSZW9yZGVyIHllYXItbW9udGggbmF2aWdhdGlvbiwgYW5kIHJlbmRlciB5ZWFyIGZpcnN0LlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgbmF2WWVhckZpcnN0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fbmF2WWVhckZpcnN0ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBuYXZZZWFyRmlyc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25hdlllYXJGaXJzdDtcbiAgfVxuXG4gIHByaXZhdGUgX25hdlllYXJGaXJzdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgc2hvcnQgaGludHMgdGhhdCBhcmUgdmlzaWJsZSBpbiBzdGFydCBkYXRlIGFuZCBlbmQgZGF0ZSBpbnB1dHMuXG4gICAqIHR5cGUgc3RyaW5nXG4gICAqL1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nIHwgc3RyaW5nW10gPSBbJ1N0YXJ0IGRhdGUnLCAnRW5kIGRhdGUnXTtcblxuICAvKipcbiAgICogUHJlZGVmaW5lZCBkYXRlIHJhbmdlcyB0aGUgdXNlciBjYW4gc2VsZWN0IGZyb20uXG4gICAqIEB0eXBlIElDYWxlbmRhclJhbmdlc1xuICAgKi9cbiAgQElucHV0KCkgcmFuZ2VzPzogb2JqZWN0O1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjb2xvciBjb250ZXh0IG9mIHRoZSBjYW5jZWwgYnV0dG9uIHRvIG9uZSBvZiBDb3JlVUnigJlzIHRoZW1lZCBjb2xvcnMuXG4gICAqIEB0eXBlICdwcmltYXJ5JyB8ICdzZWNvbmRhcnknIHwgJ3N1Y2Nlc3MnIHwgJ2RhbmdlcicgfCAnd2FybmluZycgfCAnaW5mbycgfCAnZGFyaycgfCAnbGlnaHQnIHwgc3RyaW5nXG4gICAqIEBkZWZhdWx0ICdzZWNvbmRhcnknXG4gICAqL1xuICBASW5wdXQoKSByYW5nZXNCdXR0b25zQ29sb3I/OiBDb2xvcnMgPSAnc2Vjb25kYXJ5JztcblxuICAvKipcbiAgICogU2l6ZSB0aGUgcmFuZ2VzIGJ1dHRvbiBzbWFsbCBvciBsYXJnZS5cbiAgICogQHR5cGUgJ3NtJyB8ICdsZycgfCAnJ1xuICAgKi9cbiAgQElucHV0KCkgcmFuZ2VzQnV0dG9uc1NpemU6ICdzbScgfCAnbGcnIHwgJycgPSAnJztcblxuICAvKipcbiAgICogU2V0IHRoZSByYW5nZXMgYnV0dG9uIHZhcmlhbnQgdG8gYW4gb3V0bGluZWQgYnV0dG9uIG9yIGEgZ2hvc3QgYnV0dG9uLlxuICAgKiBAdHlwZSAnb3V0bGluZScgfCAnZ2hvc3QnIHwgdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKSByYW5nZXNCdXR0b25zVmFyaWFudD86ICdvdXRsaW5lJyB8ICdnaG9zdCcgPSAnZ2hvc3QnO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IGljb24gb3IgY2hhcmFjdGVyIHRoYXQgc2VwYXJhdGVzIHR3byBkYXRlcy5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgc2VwYXJhdG9yKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2VwYXJhdG9yID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBzZXBhcmF0b3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlcGFyYXRvcjtcbiAgfVxuXG4gIHByaXZhdGUgX3NlcGFyYXRvcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFNpemUgdGhlIGNvbXBvbmVudCBzbWFsbCBvciBsYXJnZS5cbiAgICogQHR5cGUgJ3NtJyB8ICdsZycgfCB1bmRlZmluZWRcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKSBzaXplPzogJ3NtJyB8ICdsZyc7XG5cbiAgLyoqXG4gICAqIFByb3ZpZGUgYW4gYWRkaXRpb25hbCB0aW1lIHNlbGVjdGlvbiBieSBhZGRpbmcgc2VsZWN0IGJveGVzIHRvIGNob29zZSB0aW1lLlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgdGltZXBpY2tlcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3RpbWVwaWNrZXIgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IHRpbWVwaWNrZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vIHJldHVybiB0aGlzLl90aW1lcGlja2VyO1xuICB9XG5cbiAgcHJpdmF0ZSBfdGltZXBpY2tlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUb2dnbGUgdmlzdWFsIHZhbGlkYXRpb24gZmVlZGJhY2suXG4gICAqIEB0eXBlIGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKSB2YWxpZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZHJvcGRvd24gZGF0ZS1waWNrZXIgY29tcG9uZW50LlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgdmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3Zpc2libGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3Zpc2libGU7XG4gIH1cblxuICBwcml2YXRlIF92aXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgc2V0IHN0YXJ0RGF0ZSh2YWx1ZSkge1xuICAgIGNvbnN0IHByZXZEYXRlID0gdGhpcy5fc3RhcnREYXRlID8gbmV3IERhdGUodGhpcy5fc3RhcnREYXRlKSA6IG51bGw7XG4gICAgdGhpcy5fc3RhcnREYXRlID0gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiBudWxsO1xuICAgIGlmIChwcmV2RGF0ZT8uZ2V0VGltZSgpICE9PSB0aGlzLl9zdGFydERhdGU/LmdldFRpbWUoKSkge1xuICAgICAgdGhpcy5zdGFydERhdGVWYWx1ZSA9IHRoaXMuX3N0YXJ0RGF0ZT8udG9Mb2NhbGVEYXRlU3RyaW5nKHRoaXMubG9jYWxlKSA/PyAnJztcbiAgICAgIHRoaXMuc3RhcnREYXRlQ2hhbmdlLmVtaXQodGhpcy5fc3RhcnREYXRlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgc3RhcnREYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGFydERhdGU7XG4gIH1cblxuICBwcml2YXRlIF9zdGFydERhdGU/OiBEYXRlIHwgbnVsbDtcblxuICBASW5wdXQoKVxuICBzZXQgZW5kRGF0ZSh2YWx1ZSkge1xuICAgIGNvbnN0IHByZXZEYXRlID0gdGhpcy5fZW5kRGF0ZSA/IG5ldyBEYXRlKHRoaXMuX2VuZERhdGUgPz8gMCkgOiBudWxsO1xuICAgIHRoaXMuX2VuZERhdGUgPSB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlKSA6IG51bGw7XG4gICAgaWYgKHByZXZEYXRlPy5nZXRUaW1lKCkgIT09IHRoaXMuX2VuZERhdGU/LmdldFRpbWUoKSkge1xuICAgICAgdGhpcy5lbmREYXRlVmFsdWUgPSB0aGlzLl9lbmREYXRlPy50b0xvY2FsZURhdGVTdHJpbmcodGhpcy5sb2NhbGUpID8/ICcnO1xuICAgICAgdGhpcy5lbmREYXRlQ2hhbmdlLmVtaXQodGhpcy5fZW5kRGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGVuZERhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VuZERhdGU7XG4gIH1cblxuICBwcml2YXRlIF9lbmREYXRlPzogRGF0ZSB8IG51bGw7XG5cbiAgQElucHV0KCkgY2FsZW5kYXJEYXRlOiBEYXRlID0gbmV3IERhdGUoKTtcbiAgQElucHV0KCkgZGlzYWJsZWREYXRlczogRGF0ZVtdIHwgRGF0ZVtdW10gPSBbXTtcblxuICBASW5wdXQoKVxuICBzZXQgZmlyc3REYXlPZldlZWsodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2ZpcnN0RGF5T2ZXZWVrID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IGZpcnN0RGF5T2ZXZWVrKCkge1xuICAgIHJldHVybiB0aGlzLl9maXJzdERheU9mV2VlaztcbiAgfVxuXG4gIHByaXZhdGUgX2ZpcnN0RGF5T2ZXZWVrOiBudW1iZXIgPSAxO1xuXG4gIEBJbnB1dCgpIGxvY2FsZTogc3RyaW5nID0gJ2RlZmF1bHQnO1xuICBASW5wdXQoKSBtYXhEYXRlOiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIG1pbkRhdGU6IERhdGUgfCBudWxsID0gbnVsbDtcblxuICBASW5wdXQoKVxuICBzZXQgbmF2aWdhdGlvbih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX25hdmlnYXRpb24gPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IG5hdmlnYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX25hdmlnYXRpb247XG4gIH1cblxuICBwcml2YXRlIF9uYXZpZ2F0aW9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogQWxsb3cgcmFuZ2Ugc2VsZWN0aW9uLlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgcmFuZ2UodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9yYW5nZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgcmFuZ2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JhbmdlO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmFuZ2U6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIGRhdGVGaWx0ZXI/OiBEYXRlRmlsdGVyVHlwZTtcblxuICBASW5wdXQoKVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgdGhpcy5fZGlzYWJsZWQgPyB0aGlzLnN0YXJ0RGF0ZUlucHV0LmRpc2FibGUoKSA6IHRoaXMuc3RhcnREYXRlSW5wdXQuZW5hYmxlKCk7XG4gICAgdGhpcy5fZGlzYWJsZWQgPyB0aGlzLmVuZERhdGVJbnB1dC5kaXNhYmxlKCkgOiB0aGlzLmVuZERhdGVJbnB1dC5lbmFibGUoKTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cblxuICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLnJhbmdlID8geyAuLi52YWx1ZSB9IDogdmFsdWU7XG4gICAgaWYgKEpTT04uc3RyaW5naWZ5KHRoaXMuX3ZhbHVlKSAhPT0gSlNPTi5zdHJpbmdpZnkobmV3VmFsdWUpKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgaWYgKHRoaXMucmFuZ2UpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVTdGFydERhdGVDaGFuZ2UobmV3VmFsdWUuc3RhcnREYXRlID8/IG51bGwpO1xuICAgICAgICB0aGlzLmhhbmRsZUVuZERhdGVDaGFuZ2UobmV3VmFsdWUuZW5kRGF0ZSA/PyBudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGFuZGxlU3RhcnREYXRlQ2hhbmdlKG5ld1ZhbHVlID8/IG51bGwpO1xuICAgICAgfVxuICAgICAgdGhpcy5vbkNoYW5nZShuZXdWYWx1ZSk7XG4gICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgaWYgKHRoaXMuY2xvc2VPblNlbGVjdCkge1xuICAgICAgICBjb25zdCBoYXNWYWx1ZSA9IHRoaXMucmFuZ2UgPyAhISh0aGlzLnZhbHVlLnN0YXJ0RGF0ZSAmJiB0aGlzLnZhbHVlLmVuZERhdGUpIDogISF0aGlzLnZhbHVlO1xuICAgICAgICB0aGlzLnZpc2libGUgPSAhaGFzVmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX3ZhbHVlOiBhbnkgPSB7fTtcblxuICAvKipcbiAgICogU2V0IGxlbmd0aCBvciBmb3JtYXQgb2YgZGF5IG5hbWUuXG4gICAqIEB0eXBlIFdlZWtkYXlGb3JtYXRUeXBlXG4gICAqIEBkZWZhdWx0ICdzaG9ydCdcbiAgICovXG4gIEBJbnB1dCgpIHdlZWtkYXlGb3JtYXQ6IFdlZWtkYXlGb3JtYXRUeXBlID0gJ3Nob3J0JztcblxuICAvKipcbiAgICogT3B0aW9uYWwgcG9wcGVyIE9wdGlvbnMgb2JqZWN0XG4gICAqIEB0eXBlIFBhcnRpYWw8T3B0aW9ucz5cbiAgICovXG4gIEBJbnB1dCgncG9wcGVyT3B0aW9ucycpIHBvcHBlcmpzT3B0aW9uczogUGFydGlhbDxPcHRpb25zPiA9IHtcbiAgICBzdHJhdGVneTogJ2ZpeGVkJ1xuICB9O1xuXG4gIC8qKlxuICAgKiBTZXQgd2hldGhlciBkYXlzIGluIGFkamFjZW50IG1vbnRocyBzaG93biBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGN1cnJlbnQgbW9udGggYXJlIHNlbGVjdGFibGUuIFRoaXMgb25seSBhcHBsaWVzIGlmIHRoZSBgc2hvd0FkamFjZW50RGF5c2Agb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqIEBzaW5jZSA0LjQuMTBcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBzZWxlY3RBZGphY2VudERheXModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLiNzZWxlY3RBZGphY2VudERheXMgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IHNlbGVjdEFkamFjZW50RGF5cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jc2VsZWN0QWRqYWNlbnREYXlzO1xuICB9XG5cbiAgI3NlbGVjdEFkamFjZW50RGF5czogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTZXQgd2hldGhlciB0byBkaXNwbGF5IGRhdGVzIGluIGFkamFjZW50IG1vbnRocyAobm9uLXNlbGVjdGFibGUpIGF0IHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBjdXJyZW50IG1vbnRoLlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICogQHNpbmNlIDQuNC4xMFxuICAgKi9cbiAgQElucHV0KCkgc2hvd0FkamFjZW50RGF5czogYm9vbGVhbiA9IHRydWU7XG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlIHwgRGF0ZVtdIHwgdW5kZWZpbmVkPigpO1xuXG4gIEBPdXRwdXQoKSBjYWxlbmRhckNlbGxIb3ZlcjogRXZlbnRFbWl0dGVyPERhdGUgfCBudWxsPiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZSB8IG51bGw+KCk7XG4gIEBPdXRwdXQoKSBjYWxlbmRhckRhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxEYXRlPiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcbiAgQE91dHB1dCgpIGVuZERhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxEYXRlIHwgbnVsbD4gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGUgfCBudWxsPigpO1xuICBAT3V0cHV0KCkgc3RhcnREYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RGF0ZSB8IG51bGw+ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlIHwgbnVsbD4oKTtcblxuICAvLyBAVmlld0NoaWxkKENhbGVuZGFyQ29tcG9uZW50KSBjYWxlbmRhckNvbXBvbmVudCE6IENhbGVuZGFyQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdzdGFydERhdGVFbGVtZW50UmVmJykgc3RhcnREYXRlRWxlbWVudFJlZiE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2VuZERhdGVFbGVtZW50UmVmJykgZW5kRGF0ZUVsZW1lbnRSZWYhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gIHRlbXBsYXRlczogYW55ID0ge307XG4gIEBDb250ZW50Q2hpbGRyZW4oVGVtcGxhdGVJZERpcmVjdGl2ZSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBjb250ZW50VGVtcGxhdGVzITogUXVlcnlMaXN0PFRlbXBsYXRlSWREaXJlY3RpdmU+O1xuXG4gIHByb3RlY3RlZCBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBwcm90ZWN0ZWQgc3Vic2NyaWJlRGF0ZUNoYW5nZShzdWJzY3JpYmU6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgaWYgKHN1YnNjcmliZSkge1xuICAgICAgLy8gdG9kb1xuICAgICAgLy8gdGhpcy5kYXRlQ2hhbmdlU3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuc3RhcnREYXRlQ2hhbmdlLnN1YnNjcmliZShuZXh0ID0+IHtcbiAgICAgIC8vICAgdGhpcy5zdGFydERhdGUgPSBuZXh0O1xuICAgICAgLy8gICB0aGlzLm9uQ2hhbmdlKG5leHQpO1xuICAgICAgLy8gfSkpO1xuICAgICAgLy8gdGhpcy5kYXRlQ2hhbmdlU3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuc3RhcnREYXRlQ2hhbmdlLnN1YnNjcmliZShuZXh0ID0+IHtcbiAgICAgIC8vICAgdGhpcy5lbmREYXRlID0gbmV4dDtcbiAgICAgIC8vICAgdGhpcy5vbkNoYW5nZShuZXh0KTtcbiAgICAgIC8vIH0pKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kYXRlQ2hhbmdlU3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiB7XG4gICAgICBzdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgfSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdibHVyJykgb25CbHVyKCkge1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICBwdWJsaWMgaXNNb2JpbGUgPSB0cnVlO1xuICBwdWJsaWMgY3VzdG9tUmFuZ2VzITogVEN1c3RvbVJhbmdlW107XG5cbiAgc2V0IHN0YXJ0RGF0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnN0YXJ0RGF0ZUlucHV0LnNldFZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLl9zdGFydERhdGVWYWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHN0YXJ0RGF0ZVZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0RGF0ZVZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3RhcnREYXRlVmFsdWU6IHN0cmluZyA9IHRoaXMuc3RhcnREYXRlPy50b0xvY2FsZURhdGVTdHJpbmcodGhpcy5sb2NhbGUpID8/ICcnO1xuXG4gIHNldCBlbmREYXRlVmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuZW5kRGF0ZUlucHV0LnNldFZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLl9lbmREYXRlVmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBlbmREYXRlVmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZW5kRGF0ZVZhbHVlO1xuICB9XG5cbiAgcHVibGljIF9lbmREYXRlVmFsdWU6IHN0cmluZyA9IHRoaXMuZW5kRGF0ZT8udG9Mb2NhbGVEYXRlU3RyaW5nKHRoaXMubG9jYWxlKSA/PyAnJztcblxuICBwdWJsaWMgZ2V0IHN0YXJ0RGF0ZVBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5wbGFjZWhvbGRlcikgPyB0aGlzLnBsYWNlaG9sZGVyWzBdIDogdGhpcy5wbGFjZWhvbGRlcjtcbiAgfTtcblxuICBwdWJsaWMgZ2V0IGVuZERhdGVQbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMucGxhY2Vob2xkZXIpID8gdGhpcy5wbGFjZWhvbGRlclsxXSA6IHRoaXMucGxhY2Vob2xkZXI7XG4gIH07XG5cbiAgcHJpdmF0ZSBsYXlvdXRDaGFuZ2VzITogU3Vic2NyaXB0aW9uO1xuXG4gIC8vIHRvZG86IHZhbGlkYXRpb25cbiAgc3RhcnREYXRlSW5wdXQgPSBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogdGhpcy5zdGFydERhdGVWYWx1ZSwgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQgfSwgW1xuICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcbiAgICAvLyBWYWxpZGF0b3JzLm1pbkxlbmd0aCg4KSxcbiAgICAvLyBWYWxpZGF0b3JzLm1heExlbmd0aCgxMCksXG4gICAgLy8gaW52YWxpZERhdGVTdHJpbmdWYWxpZGF0b3IodGhpcy5sb2NhbGUpXG4gIF0pO1xuICBlbmREYXRlSW5wdXQgPSBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogdGhpcy5lbmREYXRlVmFsdWUsIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkIH0sIFtcbiAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXG4gICAgLy8gVmFsaWRhdG9ycy5taW5MZW5ndGgoOCksXG4gICAgLy8gVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTApLFxuICAgIC8vIGludmFsaWREYXRlU3RyaW5nVmFsaWRhdG9yKHRoaXMubG9jYWxlKVxuICBdKTtcbiAgZGF0ZVJhbmdlR3JvdXAhOiBGb3JtR3JvdXA7XG5cbiAgc2V0IGlucHV0U3RhcnRIb3ZlclZhbHVlKHZhbHVlKSB7XG4gICAgdGhpcy5faW5wdXRTdGFydEhvdmVyVmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBpbnB1dFN0YXJ0SG92ZXJWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5faW5wdXRTdGFydEhvdmVyVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9pbnB1dFN0YXJ0SG92ZXJWYWx1ZSE6IERhdGUgfCBudWxsO1xuXG4gIHNldCBpbnB1dEVuZEhvdmVyVmFsdWUodmFsdWUpIHtcbiAgICB0aGlzLl9pbnB1dEVuZEhvdmVyVmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBpbnB1dEVuZEhvdmVyVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lucHV0RW5kSG92ZXJWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2lucHV0RW5kSG92ZXJWYWx1ZSE6IERhdGUgfCBudWxsO1xuXG4gIGdldCBkYXRlUGlja2VyQ2xhc3NlcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJ2lzLXZhbGlkJzogdGhpcy52YWxpZCA9PT0gdHJ1ZSxcbiAgICAgICdpcy1pbnZhbGlkJzogdGhpcy52YWxpZCA9PT0gZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgZm9ybWF0RGF0ZShkYXRlOiBEYXRlKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0XG4gICAgICAgICAgID8gZGF0ZUZvcm1hdChkYXRlLCB0aGlzLmZvcm1hdClcbiAgICAgICAgICAgOiB0aGlzLnRpbWVwaWNrZXJcbiAgICAgICAgICAgICA/IGRhdGUudG9Mb2NhbGVTdHJpbmcodGhpcy5sb2NhbGUpXG4gICAgICAgICAgICAgOiBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZyh0aGlzLmxvY2FsZSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxheW91dENoYW5nZXMgPSB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKFtcbiAgICAgIEJyZWFrcG9pbnRzLkhhbmRzZXQsXG4gICAgICBCcmVha3BvaW50cy5UYWJsZXRcbiAgICBdKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIHRoaXMuaXNNb2JpbGUgPSByZXN1bHQubWF0Y2hlcztcbiAgICB9KTtcbiAgICB0aGlzLmN1c3RvbVJhbmdlcyA9IHRoaXMucmFuZ2VzID8gT2JqZWN0LmVudHJpZXModGhpcy5yYW5nZXMpIDogW107XG5cbiAgICB0aGlzLnN0YXJ0RGF0ZVZhbHVlID0gdGhpcy5zdGFydERhdGU/LnRvTG9jYWxlRGF0ZVN0cmluZyh0aGlzLmxvY2FsZSkgPz8gJyc7XG4gICAgdGhpcy5lbmREYXRlVmFsdWUgPSB0aGlzLmVuZERhdGU/LnRvTG9jYWxlRGF0ZVN0cmluZyh0aGlzLmxvY2FsZSkgPz8gJyc7XG4gICAgdGhpcy5zdWJzY3JpYmVEYXRlQ2hhbmdlKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmxheW91dENoYW5nZXM/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVEYXRlQ2hhbmdlKGZhbHNlKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY29udGVudFRlbXBsYXRlcy5mb3JFYWNoKChjaGlsZDogVGVtcGxhdGVJZERpcmVjdGl2ZSkgPT4ge1xuICAgICAgICB0aGlzLnRlbXBsYXRlc1tjaGlsZC5pZF0gPSBjaGlsZC50ZW1wbGF0ZVJlZjtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydkYXRlJ10pIHtcbiAgICAgIC8vIGZvciBkYXRlLXBpY2tlciBjb21wb25lbnRcbiAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLmNvbnZlcnRWYWx1ZVRvRGF0ZShjaGFuZ2VzWydkYXRlJ10/LmN1cnJlbnRWYWx1ZSkgPz8gbnVsbDtcbiAgICAgIHRoaXMuaGFuZGxlU3RhcnREYXRlQ2hhbmdlKGRhdGUpO1xuICAgICAgdGhpcy5jYWxlbmRhckRhdGUgPSBkYXRlID8/IHRoaXMuY2FsZW5kYXJEYXRlO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snc3RhcnREYXRlJ10pIHtcbiAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLmNvbnZlcnRWYWx1ZVRvRGF0ZShjaGFuZ2VzWydzdGFydERhdGUnXT8uY3VycmVudFZhbHVlKSA/PyBudWxsO1xuICAgICAgdGhpcy5oYW5kbGVTdGFydERhdGVDaGFuZ2UoZGF0ZSk7XG4gICAgICB0aGlzLmNhbGVuZGFyRGF0ZSA9IGRhdGUgPz8gdGhpcy5jYWxlbmRhckRhdGU7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydlbmREYXRlJ10pIHtcbiAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLmNvbnZlcnRWYWx1ZVRvRGF0ZShjaGFuZ2VzWydlbmREYXRlJ10/LmN1cnJlbnRWYWx1ZSkgPz8gbnVsbDtcbiAgICAgIHRoaXMuaGFuZGxlRW5kRGF0ZUNoYW5nZShkYXRlKTtcbiAgICB9XG4gIH1cblxuICBjb252ZXJ0VmFsdWVUb0RhdGUodmFsdWU6IERhdGUgfCBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKSB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZ2V0TG9jYWxEYXRlRnJvbVN0cmluZyh2YWx1ZSwgdGhpcy5sb2NhbGUsIHRoaXMudGltZXBpY2tlcik7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSkgPz8gbnVsbDtcbiAgfVxuXG4gIGdldEN1c3RvbVJhbmdlS2V5KGN1c3RvbVJhbmdlOiBhbnkpIHtcbiAgICByZXR1cm4gY3VzdG9tUmFuZ2VbMF07XG4gIH1cblxuICBzZXRDdXN0b21SYW5nZShjdXN0b21SYW5nZTogYW55KSB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRDdXN0b21SYW5nZUtleShjdXN0b21SYW5nZSk7XG4gICAgdGhpcy5oYW5kbGVTdGFydERhdGVDaGFuZ2UoY3VzdG9tUmFuZ2VbMV1bMF0pO1xuICAgIHRoaXMuaGFuZGxlRW5kRGF0ZUNoYW5nZShjdXN0b21SYW5nZVsxXVsxXSk7XG4gIH1cblxuICBoYW5kbGVDYWxlbmRhckNlbGxIb3ZlcigkZXZlbnQ6IERhdGUgfCBudWxsKSB7XG4gICAgdGhpcy5jYWxlbmRhckNlbGxIb3Zlci5lbWl0KCRldmVudCk7XG4gICAgaWYgKCF0aGlzLnN0YXJ0RGF0ZSkge1xuICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKHRoaXMuc3RhcnREYXRlRWxlbWVudFJlZiwgJGV2ZW50KTtcbiAgICAgIHRoaXMuaW5wdXRTdGFydEhvdmVyVmFsdWUgPSAkZXZlbnQ7XG4gICAgICB0aGlzLnNldElucHV0VmFsdWUodGhpcy5lbmREYXRlRWxlbWVudFJlZiwgbnVsbCk7XG4gICAgICB0aGlzLmlucHV0RW5kSG92ZXJWYWx1ZSA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5lbmREYXRlKSB7XG4gICAgICB0aGlzLnNldElucHV0VmFsdWUodGhpcy5lbmREYXRlRWxlbWVudFJlZiwgJGV2ZW50KTtcbiAgICAgIHRoaXMuaW5wdXRFbmRIb3ZlclZhbHVlID0gJGV2ZW50O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUNhbGVuZGFyRGF0ZUNoYW5nZSgkZXZlbnQ6IERhdGUpIHtcbiAgICBpZiAodGhpcy5jYWxlbmRhckRhdGUuZ2V0VGltZSgpICE9PSAkZXZlbnQuZ2V0VGltZSgpKSB7XG4gICAgICB0aGlzLmNhbGVuZGFyRGF0ZUNoYW5nZS5lbWl0KCRldmVudCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlU3RhcnREYXRlQ2hhbmdlKGRhdGU6IERhdGUgfCBudWxsKSB7XG4gICAgaWYgKGRhdGU/LmdldFRpbWUoKSAhPT0gdGhpcy5zdGFydERhdGU/LmdldFRpbWUoKSkge1xuICAgICAgdGhpcy5zdGFydERhdGUgPSBkYXRlID8/IG51bGw7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZVZhbHVlID0gZGF0ZSA/IGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKHRoaXMubG9jYWxlKSA6ICcnO1xuICAgICAgdGhpcy5pbnB1dFN0YXJ0SG92ZXJWYWx1ZSA9IG51bGw7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5yYW5nZSA/IHsgc3RhcnREYXRlOiB0aGlzLnN0YXJ0RGF0ZSwgZW5kRGF0ZTogdGhpcy5lbmREYXRlIH0gOiB0aGlzLnN0YXJ0RGF0ZTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVFbmREYXRlQ2hhbmdlKGRhdGU6IERhdGUgfCBudWxsKSB7XG4gICAgaWYgKGRhdGU/LmdldFRpbWUoKSAhPT0gdGhpcy5lbmREYXRlPy5nZXRUaW1lKCkpIHtcbiAgICAgIGlmICghdGhpcy5yYW5nZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmVuZERhdGUgPSBkYXRlID8/IG51bGw7XG4gICAgICB0aGlzLmVuZERhdGVWYWx1ZSA9IGRhdGUgPyBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZyh0aGlzLmxvY2FsZSkgOiAnJztcbiAgICAgIHRoaXMuaW5wdXRFbmRIb3ZlclZhbHVlID0gbnVsbDtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnJhbmdlID8geyBzdGFydERhdGU6IHRoaXMuc3RhcnREYXRlLCBlbmREYXRlOiB0aGlzLmVuZERhdGUgfSA6IHRoaXMuc3RhcnREYXRlO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUNsZWFyKCRldmVudD86IE1vdXNlRXZlbnQpIHtcbiAgICAvLyB0aGlzLmNhbGVuZGFyQ29tcG9uZW50LmNsZWFyRGF0ZXMoKTtcbiAgICB0aGlzLmhhbmRsZVN0YXJ0RGF0ZUNoYW5nZShudWxsKTtcbiAgICB0aGlzLmhhbmRsZUVuZERhdGVDaGFuZ2UobnVsbCk7XG4gIH1cblxuICBoYW5kbGVTdGFydERhdGVJbnB1dENoYW5nZSgkZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGRhdGUgPSBnZXRMb2NhbERhdGVGcm9tU3RyaW5nKCRldmVudC50YXJnZXQ/LnZhbHVlLCB0aGlzLmxvY2FsZSwgdGhpcy50aW1lcGlja2VyKTtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIC8vIHRoaXMuY2FsZW5kYXJDb21wb25lbnQuY2xlYXJEYXRlcygpO1xuICAgICAgdGhpcy5oYW5kbGVTdGFydERhdGVDaGFuZ2UobnVsbCk7XG4gICAgICB0aGlzLmhhbmRsZUVuZERhdGVDaGFuZ2UobnVsbCk7XG4gICAgfVxuICAgIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSAmJiBkYXRlLmdldFRpbWUoKSkge1xuICAgICAgaWYgKCEodGhpcy5mb3JiaWRkZW5EYXRlKGRhdGUpIHx8ICh0aGlzLmVuZERhdGUgJiYgdGhpcy5lbmREYXRlIDwgZGF0ZSkpKSB7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJEYXRlID0gZGF0ZTtcbiAgICAgICAgdGhpcy5zdGFydERhdGUgPSBkYXRlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmhhbmRsZVN0YXJ0RGF0ZUNoYW5nZSh0aGlzLnN0YXJ0RGF0ZSA/PyBudWxsKTtcbiAgfVxuXG4gIGhhbmRsZUVuZERhdGVJbnB1dENoYW5nZSgkZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGRhdGUgPSBnZXRMb2NhbERhdGVGcm9tU3RyaW5nKCRldmVudC50YXJnZXQ/LnZhbHVlLCB0aGlzLmxvY2FsZSwgdGhpcy50aW1lcGlja2VyKTtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIHRoaXMuZW5kRGF0ZSA9IG51bGw7XG4gICAgfVxuICAgIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSAmJiBkYXRlLmdldFRpbWUoKSkge1xuICAgICAgaWYgKCEodGhpcy5mb3JiaWRkZW5EYXRlKGRhdGUpIHx8ICh0aGlzLnN0YXJ0RGF0ZSAmJiB0aGlzLnN0YXJ0RGF0ZSA+IGRhdGUpKSkge1xuICAgICAgICB0aGlzLmNhbGVuZGFyRGF0ZSA9IGRhdGU7XG4gICAgICAgIHRoaXMuZW5kRGF0ZSA9IGRhdGU7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuaGFuZGxlRW5kRGF0ZUNoYW5nZSh0aGlzLmVuZERhdGUgPz8gbnVsbCk7XG4gIH1cblxuICBmb3JiaWRkZW5EYXRlKGRhdGU6IERhdGUpIHtcbiAgICByZXR1cm4gaXNEYXRlRGlzYWJsZWQoZGF0ZSwgdGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGUsIHRoaXMuZGlzYWJsZWREYXRlcykgfHwgKHRoaXMuZGF0ZUZpbHRlciA/ICF0aGlzLmRhdGVGaWx0ZXIoZGF0ZSkgOiBmYWxzZSk7XG4gIH1cblxuICBzZXRJbnB1dFZhbHVlID0gKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIGRhdGU6IERhdGUgfCBudWxsKSA9PiB7XG4gICAgaWYgKCFlbGVtZW50UmVmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA9IGRhdGU/LnRvTG9jYWxlRGF0ZVN0cmluZyh0aGlzLmxvY2FsZSkgPz8gJyc7XG4gICAgLy8gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlQXNEYXRlID0gZGF0ZTtcbiAgICByZXR1cm47XG4gIH07XG5cbiAgb25DaGFuZ2U6IGFueSA9ICh2YWx1ZTogYW55KSA9PiB7fTtcbiAgb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7fTtcblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5yYW5nZSA/IHsgLi4udmFsdWUgfSA6IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVN0YXJ0VGltZUNoYW5nZSh0aW1lOiBEYXRlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5zdGFydERhdGUgPSB0aW1lID8/IHRoaXMuc3RhcnREYXRlO1xuICB9XG5cbiAgaGFuZGxlRW5kVGltZUNoYW5nZSh0aW1lOiBEYXRlIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKCF0aGlzLnJhbmdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZW5kRGF0ZSA9IHRpbWUgPz8gdGhpcy5lbmREYXRlO1xuICB9XG59XG4iLCI8Yy1kcm9wZG93biAjZHJvcGRvd249XCJjRHJvcGRvd25cIiBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiIGNsYXNzPVwiZGF0ZS1waWNrZXIgcGlja2VyXCIgW25nQ2xhc3NdPVwiZGF0ZVBpY2tlckNsYXNzZXNcIlxuICAgICAgICAgICAgWyh2aXNpYmxlKV09XCJ2aXNpYmxlXCIgW3BvcHBlck9wdGlvbnNdPVwicG9wcGVyanNPcHRpb25zXCI+XG4gIDxjLWlucHV0LWdyb3VwIFtjYXJldF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCA/PyBkcm9wZG93bi52aXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgW3NpemluZ109XCJzaXplID8/ICcnXCJcbiAgICAgICAgICAgICAgICAgY0Ryb3Bkb3duVG9nZ2xlXG4gICAgICAgICAgICAgICAgIGNsYXNzPVwicGlja2VyLWlucHV0LWdyb3VwXCJcbiAgPlxuICAgIDxpbnB1dCAoY2hhbmdlKT1cImhhbmRsZVN0YXJ0RGF0ZUlucHV0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwic3RhcnREYXRlSW5wdXRcIlxuICAgICAgICAgICBbbmdDbGFzc109XCJ7aG92ZXI6ICEhaW5wdXRTdGFydEhvdmVyVmFsdWV9XCJcbiAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInN0YXJ0RGF0ZVBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgY0Zvcm1Db250cm9sXG4gICAgICAgICAgICNzdGFydERhdGVFbGVtZW50UmVmXG4gICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImRpc2FibGVkID8gLTEgOiAwXCJcbiAgICAgICAgICAgcGF0dGVybj1cIlsxLTldKlwiXG4gICAgICAgICAgIFtyZWFkb25seV09XCJpbnB1dFJlYWRPbmx5ID8/IG51bGxcIlxuICAgICAgICAgICBbdmFsaWRdPVwicmFuZ2UgPyB1bmRlZmluZWQgOiB2YWxpZFwiXG4gICAgPlxuICAgIDxzcGFuICpuZ0lmPVwicmFuZ2UgJiYgc2VwYXJhdG9yICE9PSBmYWxzZVwiIGNJbnB1dEdyb3VwVGV4dD5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJwaWNrZXItaW5wdXQtZ3JvdXAtaWNvbiBkYXRlLXBpY2tlci1hcnJvdy1pY29uXCI+PC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgIDxpbnB1dCAoY2hhbmdlKT1cImhhbmRsZUVuZERhdGVJbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgKm5nSWY9XCJyYW5nZVwiXG4gICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJlbmREYXRlSW5wdXRcIlxuICAgICAgICAgICBbbmdDbGFzc109XCJ7aG92ZXI6ICEhaW5wdXRFbmRIb3ZlclZhbHVlfVwiXG4gICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJlbmREYXRlUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICBjRm9ybUNvbnRyb2xcbiAgICAgICAgICAgI2VuZERhdGVFbGVtZW50UmVmXG4gICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImRpc2FibGVkID8gLTEgOiAwXCJcbiAgICAgICAgICAgcGF0dGVybj1cIlsxLTldKlwiXG4gICAgICAgICAgIFtyZWFkb25seV09XCJpbnB1dFJlYWRPbmx5ID8/IG51bGxcIlxuICAgICAgICAgICBbdmFsaWRdPVwidmFsaWQgPz8gdW5kZWZpbmVkXCJcbiAgICA+XG4gICAgPHNwYW4gKm5nSWY9XCJpbmRpY2F0b3IgfHwgY2xlYW5lclwiIGNJbnB1dEdyb3VwVGV4dD5cbiAgICAgIDxzcGFuICpuZ0lmPVwiaW5kaWNhdG9yXCIgY2xhc3M9XCJwaWNrZXItaW5wdXQtZ3JvdXAtaW5kaWNhdG9yXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwicGlja2VyLWlucHV0LWdyb3VwLWljb24gZGF0ZS1waWNrZXItaW5wdXQtaWNvblwiPjwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuIChjbGljayk9XCIhZGlzYWJsZWQgJiYgaGFuZGxlQ2xlYXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAqbmdJZj1cImNsZWFuZXIgJiYgc3RhcnREYXRlRWxlbWVudFJlZi52YWx1ZSAmJiAhZGlzYWJsZWRcIlxuICAgICAgICAgICAgY2xhc3M9XCJwaWNrZXItaW5wdXQtZ3JvdXAtY2xlYW5lclwiIHJvbGU9XCJidXR0b25cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJwaWNrZXItaW5wdXQtZ3JvdXAtaWNvbiBkYXRlLXBpY2tlci1jbGVhbmVyLWljb25cIj48L3NwYW4+XG4gICAgICA8L3NwYW4+XG4gICAgPC9zcGFuPlxuXG4gIDwvYy1pbnB1dC1ncm91cD5cbiAgPGRpdiBjRHJvcGRvd25NZW51PlxuICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1ib2R5XCI+XG4gICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiIWlzTW9iaWxlXCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJyYW5nZXNcIiBjbGFzcz1cImRhdGUtcGlja2VyLXJhbmdlc1wiPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInNldEN1c3RvbVJhbmdlKGN1c3RvbVJhbmdlKVwiXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY3VzdG9tUmFuZ2Ugb2YgY3VzdG9tUmFuZ2VzXCJcbiAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJyYW5nZXNCdXR0b25zQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgW3NpemVdPVwicmFuZ2VzQnV0dG9uc1NpemVcIlxuICAgICAgICAgICAgICAgICAgW3ZhcmlhbnRdPVwicmFuZ2VzQnV0dG9uc1ZhcmlhbnRcIlxuICAgICAgICAgICAgICAgICAgY0J1dHRvbj5cbiAgICAgICAgICAgIHt7Z2V0Q3VzdG9tUmFuZ2VLZXkoY3VzdG9tUmFuZ2UpfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGMtY2FsZW5kYXJcbiAgICAgICAgKGNhbGVuZGFyQ2VsbEhvdmVyKT1cImhhbmRsZUNhbGVuZGFyQ2VsbEhvdmVyKCRldmVudClcIlxuICAgICAgICAoY2FsZW5kYXJEYXRlQ2hhbmdlKT1cImhhbmRsZUNhbGVuZGFyRGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKGVuZERhdGVDaGFuZ2UpPVwiaGFuZGxlRW5kRGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKHN0YXJ0RGF0ZUNoYW5nZSk9XCJoYW5kbGVTdGFydERhdGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIFtjYWxlbmRhckRhdGVdPVwiY2FsZW5kYXJEYXRlXCJcbiAgICAgICAgW2NhbGVuZGFyc109XCJpc01vYmlsZSA/IDEgOiBjYWxlbmRhcnNcIlxuICAgICAgICBbZGF0ZUZpbHRlcl09XCJkYXRlRmlsdGVyXCJcbiAgICAgICAgW2Rpc2FibGVkRGF0ZXNdPVwiZGlzYWJsZWREYXRlc1wiXG4gICAgICAgIFtlbmREYXRlXT1cImVuZERhdGVcIlxuICAgICAgICBbZmlyc3REYXlPZldlZWtdPVwiZmlyc3REYXlPZldlZWtcIlxuICAgICAgICBbbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxuICAgICAgICBbbWluRGF0ZV09XCJtaW5EYXRlXCJcbiAgICAgICAgW25hdmlnYXRpb25dPVwibmF2aWdhdGlvblwiXG4gICAgICAgIFtyYW5nZV09XCJyYW5nZVwiXG4gICAgICAgIFtzdGFydERhdGVdPVwic3RhcnREYXRlXCJcbiAgICAgICAgW25hdlllYXJGaXJzdF09XCJuYXZZZWFyRmlyc3RcIlxuICAgICAgICBbZGF5Rm9ybWF0XT1cImRheUZvcm1hdFwiXG4gICAgICAgIFt3ZWVrZGF5Rm9ybWF0XT1cIndlZWtkYXlGb3JtYXRcIlxuICAgICAgICBbc2VsZWN0QWRqYWNlbnREYXlzXT1cInNlbGVjdEFkamFjZW50RGF5c1wiXG4gICAgICAgIFtzaG93QWRqYWNlbnREYXlzXT1cInNob3dBZGphY2VudERheXNcIlxuICAgICAgICBjbGFzcz1cImRhdGUtcGlja2VyLWNhbGVuZGFyc1wiXG4gICAgICA+PC9jLWNhbGVuZGFyPlxuICAgICAgPGRpdiAqbmdJZj1cImZhbHNlICYmIHRpbWVwaWNrZXJcIiBjbGFzcz1cImRhdGUtcGlja2VyLXRpbWVwaWNrZXJzXCI+XG4gICAgICAgIDwhLS0gdG9kby0tPlxuICAgICAgICA8Yy10aW1lLXBpY2tlclxuICAgICAgICAgIHZhcmlhbnQ9XCJzZWxlY3RcIlxuICAgICAgICAgIFtsb2NhbGVdPVwibG9jYWxlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIXN0YXJ0RGF0ZVwiXG4gICAgICAgICAgW3RpbWVdPVwic3RhcnREYXRlID8/IHVuZGVmaW5lZFwiXG4gICAgICAgICAgKHRpbWVDaGFuZ2UpPVwiaGFuZGxlU3RhcnRUaW1lQ2hhbmdlKCRldmVudClcIlxuICAgICAgICA+PC9jLXRpbWUtcGlja2VyPlxuICAgICAgICA8Yy10aW1lLXBpY2tlclxuICAgICAgICAgICpuZ0lmPVwicmFuZ2VcIlxuICAgICAgICAgIHZhcmlhbnQ9XCJzZWxlY3RcIlxuICAgICAgICAgIFtsb2NhbGVdPVwibG9jYWxlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWVuZERhdGVcIlxuICAgICAgICAgIFt0aW1lXT1cImVuZERhdGUgPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgICAodGltZUNoYW5nZSk9XCJoYW5kbGVFbmRUaW1lQ2hhbmdlKCRldmVudClcIlxuICAgICAgICA+PC9jLXRpbWUtcGlja2VyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cInRlbXBsYXRlcz8uZGF0ZVBpY2tlckZvb3RlclwiIGNsYXNzPVwicGlja2VyLWZvb3RlclwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlcz8uZGF0ZVBpY2tlckZvb3RlcjsgY29udGV4dDogeyRpbXBsaWNpdDogZHJvcGRvd259XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2MtZHJvcGRvd24+XG4iXX0=