@coreui/angular-pro 4.1.0-next.2 → 4.1.0

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 (424) hide show
  1. package/README.md +27 -7
  2. package/esm2020/lib/accordion/accordion/accordion.component.mjs +4 -4
  3. package/esm2020/lib/accordion/accordion-button/accordion-button.directive.mjs +4 -4
  4. package/esm2020/lib/accordion/accordion-item/accordion-item.component.mjs +4 -4
  5. package/esm2020/lib/accordion/accordion.module.mjs +8 -10
  6. package/esm2020/lib/accordion/accordion.service.mjs +4 -4
  7. package/esm2020/lib/alert/alert-heading.directive.mjs +4 -4
  8. package/esm2020/lib/alert/alert-link.directive.mjs +4 -4
  9. package/esm2020/lib/alert/alert.component.mjs +11 -11
  10. package/esm2020/lib/alert/alert.module.mjs +6 -8
  11. package/esm2020/lib/avatar/avatar.component.mjs +5 -5
  12. package/esm2020/lib/avatar/avatar.module.mjs +5 -7
  13. package/esm2020/lib/backdrop/backdrop.service.mjs +4 -4
  14. package/esm2020/lib/badge/badge.component.mjs +5 -5
  15. package/esm2020/lib/badge/badge.module.mjs +5 -7
  16. package/esm2020/lib/breadcrumb/breadcrumb/breadcrumb.component.mjs +5 -5
  17. package/esm2020/lib/breadcrumb/breadcrumb-item/breadcrumb-item.component.mjs +4 -4
  18. package/esm2020/lib/breadcrumb/breadcrumb-router/breadcrumb-router.component.mjs +7 -7
  19. package/esm2020/lib/breadcrumb/breadcrumb-router/breadcrumb-router.service.mjs +4 -4
  20. package/esm2020/lib/breadcrumb/breadcrumb.module.mjs +5 -5
  21. package/esm2020/lib/button/button-close.directive.mjs +4 -4
  22. package/esm2020/lib/button/button.directive.mjs +4 -4
  23. package/esm2020/lib/button/button.module.mjs +5 -7
  24. package/esm2020/lib/button-group/button-group/button-group.component.mjs +4 -4
  25. package/esm2020/lib/button-group/button-group.module.mjs +5 -7
  26. package/esm2020/lib/button-group/button-toolbar/button-toolbar.component.mjs +4 -4
  27. package/esm2020/lib/callout/callout.component.mjs +4 -4
  28. package/esm2020/lib/callout/callout.module.mjs +5 -7
  29. package/esm2020/lib/card/card-body.component.mjs +4 -4
  30. package/esm2020/lib/card/card-footer.component.mjs +4 -4
  31. package/esm2020/lib/card/card-group.component.mjs +4 -4
  32. package/esm2020/lib/card/card-header-actions.component.mjs +4 -4
  33. package/esm2020/lib/card/card-header.component.mjs +4 -4
  34. package/esm2020/lib/card/card-img-overlay/card-img-overlay.component.mjs +4 -4
  35. package/esm2020/lib/card/card-img.directive.mjs +4 -4
  36. package/esm2020/lib/card/card-link.directive.mjs +4 -4
  37. package/esm2020/lib/card/card-subtitle.directive.mjs +4 -4
  38. package/esm2020/lib/card/card-text.directive.mjs +4 -4
  39. package/esm2020/lib/card/card-title.directive.mjs +4 -4
  40. package/esm2020/lib/card/card.component.mjs +4 -4
  41. package/esm2020/lib/card/card.module.mjs +5 -7
  42. package/esm2020/lib/carousel/carousel/carousel.component.mjs +4 -4
  43. package/esm2020/lib/carousel/carousel-caption/carousel-caption.component.mjs +4 -4
  44. package/esm2020/lib/carousel/carousel-control/carousel-control.component.mjs +5 -5
  45. package/esm2020/lib/carousel/carousel-indicators/carousel-indicators.component.mjs +5 -5
  46. package/esm2020/lib/carousel/carousel-inner/carousel-inner.component.mjs +4 -4
  47. package/esm2020/lib/carousel/carousel-item/carousel-item.component.mjs +4 -4
  48. package/esm2020/lib/carousel/carousel-state.mjs +4 -4
  49. package/esm2020/lib/carousel/carousel.config.mjs +4 -4
  50. package/esm2020/lib/carousel/carousel.module.mjs +5 -5
  51. package/esm2020/lib/carousel/carousel.service.mjs +4 -4
  52. package/esm2020/lib/collapse/collapse.animations.mjs +5 -5
  53. package/esm2020/lib/collapse/collapse.directive.mjs +4 -4
  54. package/esm2020/lib/collapse/collapse.module.mjs +5 -7
  55. package/esm2020/lib/dropdown/dropdown/dropdown.component.mjs +13 -9
  56. package/esm2020/lib/dropdown/dropdown-close/dropdown-close.directive.mjs +4 -4
  57. package/esm2020/lib/dropdown/dropdown-divider/dropdown-divider.directive.mjs +4 -4
  58. package/esm2020/lib/dropdown/dropdown-header/dropdown-header.directive.mjs +4 -4
  59. package/esm2020/lib/dropdown/dropdown-item/dropdown-item-plain.directive.mjs +4 -4
  60. package/esm2020/lib/dropdown/dropdown-item/dropdown-item.directive.mjs +4 -4
  61. package/esm2020/lib/dropdown/dropdown-menu/dropdown-menu.directive.mjs +4 -4
  62. package/esm2020/lib/dropdown/dropdown.module.mjs +6 -8
  63. package/esm2020/lib/dropdown/dropdown.service.mjs +4 -4
  64. package/esm2020/lib/element-cover/element-cover.component.mjs +6 -6
  65. package/esm2020/lib/element-cover/element-cover.module.mjs +6 -8
  66. package/esm2020/lib/footer/footer.component.mjs +4 -4
  67. package/esm2020/lib/footer/footer.module.mjs +5 -7
  68. package/esm2020/lib/form/form/form.directive.mjs +4 -4
  69. package/esm2020/lib/form/form-check/form-check-input.directive.mjs +4 -4
  70. package/esm2020/lib/form/form-check/form-check-label.directive.mjs +4 -4
  71. package/esm2020/lib/form/form-check/form-check.component.mjs +4 -4
  72. package/esm2020/lib/form/form-control/form-control.directive.mjs +4 -4
  73. package/esm2020/lib/form/form-feedback/form-feedback.component.mjs +4 -4
  74. package/esm2020/lib/form/form-floating/form-floating.directive.mjs +4 -4
  75. package/esm2020/lib/form/form-label/form-label.directive.mjs +4 -4
  76. package/esm2020/lib/form/form-select/form-select.directive.mjs +4 -4
  77. package/esm2020/lib/form/form-text/form-text.directive.mjs +4 -4
  78. package/esm2020/lib/form/form.module.mjs +5 -5
  79. package/esm2020/lib/form/input-group/input-group.component.mjs +4 -4
  80. package/esm2020/lib/form/input-group-text/input-group-text.directive.mjs +4 -4
  81. package/esm2020/lib/grid/col.component.mjs +4 -4
  82. package/esm2020/lib/grid/col.directive.mjs +4 -4
  83. package/esm2020/lib/grid/container.component.mjs +4 -4
  84. package/esm2020/lib/grid/grid.module.mjs +5 -5
  85. package/esm2020/lib/grid/gutter.directive.mjs +4 -4
  86. package/esm2020/lib/grid/row.component.mjs +5 -5
  87. package/esm2020/lib/grid/row.directive.mjs +4 -4
  88. package/esm2020/lib/header/header/header.component.mjs +4 -4
  89. package/esm2020/lib/header/header-brand/header-brand.component.mjs +4 -4
  90. package/esm2020/lib/header/header-divider/header-divider.component.mjs +4 -4
  91. package/esm2020/lib/header/header-nav/header-nav.component.mjs +5 -5
  92. package/esm2020/lib/header/header-text/header-text.component.mjs +4 -4
  93. package/esm2020/lib/header/header-toggler/header-toggler.directive.mjs +4 -4
  94. package/esm2020/lib/header/header.module.mjs +5 -7
  95. package/esm2020/lib/image/img.directive.mjs +4 -4
  96. package/esm2020/lib/image/img.module.mjs +5 -7
  97. package/esm2020/lib/list-group/list-group-item.directive.mjs +4 -4
  98. package/esm2020/lib/list-group/list-group.directive.mjs +4 -4
  99. package/esm2020/lib/list-group/list-group.module.mjs +5 -7
  100. package/esm2020/lib/loading-button/loading-button.component.mjs +5 -5
  101. package/esm2020/lib/loading-button/loading-button.module.mjs +6 -8
  102. package/esm2020/lib/modal/modal/modal.component.mjs +7 -7
  103. package/esm2020/lib/modal/modal-body/modal-body.component.mjs +4 -4
  104. package/esm2020/lib/modal/modal-content/modal-content.component.mjs +4 -4
  105. package/esm2020/lib/modal/modal-dialog/modal-dialog.component.mjs +4 -4
  106. package/esm2020/lib/modal/modal-dismiss/modal-toggle.directive.mjs +4 -4
  107. package/esm2020/lib/modal/modal-footer/modal-footer.component.mjs +4 -4
  108. package/esm2020/lib/modal/modal-header/modal-header.component.mjs +4 -4
  109. package/esm2020/lib/modal/modal-title/modal-title.directive.mjs +4 -4
  110. package/esm2020/lib/modal/modal.module.mjs +7 -9
  111. package/esm2020/lib/modal/modal.service.mjs +4 -4
  112. package/esm2020/lib/multi-select/multi-select/multi-select.component.mjs +8 -8
  113. package/esm2020/lib/multi-select/multi-select-native-select/multi-select-native-select.component.mjs +4 -4
  114. package/esm2020/lib/multi-select/multi-select-optgroup/multi-select-optgroup-label.component.mjs +4 -4
  115. package/esm2020/lib/multi-select/multi-select-optgroup/multi-select-optgroup.component.mjs +6 -6
  116. package/esm2020/lib/multi-select/multi-select-option/multi-select-option.component.mjs +4 -4
  117. package/esm2020/lib/multi-select/multi-select-tag/multi-select-tag.component.mjs +4 -4
  118. package/esm2020/lib/multi-select/multi-select.module.mjs +5 -5
  119. package/esm2020/lib/multi-select/multi-select.service.mjs +4 -4
  120. package/esm2020/lib/nav/nav-item.component.mjs +4 -4
  121. package/esm2020/lib/nav/nav-link.directive.mjs +4 -4
  122. package/esm2020/lib/nav/nav.component.mjs +4 -4
  123. package/esm2020/lib/nav/nav.module.mjs +5 -7
  124. package/esm2020/lib/navbar/navbar-brand/navbar-brand.directive.mjs +4 -4
  125. package/esm2020/lib/navbar/navbar-nav/navbar-nav.component.mjs +4 -4
  126. package/esm2020/lib/navbar/navbar-text/navbar-text.component.mjs +4 -4
  127. package/esm2020/lib/navbar/navbar-toggler/navbar-toggler.directive.mjs +4 -4
  128. package/esm2020/lib/navbar/navbar.component.mjs +5 -5
  129. package/esm2020/lib/navbar/navbar.module.mjs +6 -8
  130. package/esm2020/lib/offcanvas/offcanvas/offcanvas.component.mjs +5 -5
  131. package/esm2020/lib/offcanvas/offcanvas-body/offcanvas-body.component.mjs +4 -4
  132. package/esm2020/lib/offcanvas/offcanvas-header/offcanvas-header.component.mjs +5 -5
  133. package/esm2020/lib/offcanvas/offcanvas-title/offcanvas-title.directive.mjs +4 -4
  134. package/esm2020/lib/offcanvas/offcanvas-toggle/offcanvas-toggle.directive.mjs +4 -4
  135. package/esm2020/lib/offcanvas/offcanvas.module.mjs +7 -9
  136. package/esm2020/lib/offcanvas/offcanvas.service.mjs +4 -4
  137. package/esm2020/lib/pagination/page-item/page-item.component.mjs +4 -4
  138. package/esm2020/lib/pagination/page-item/page-item.directive.mjs +4 -4
  139. package/esm2020/lib/pagination/page-link/page-link.directive.mjs +4 -4
  140. package/esm2020/lib/pagination/pagination/pagination.component.mjs +5 -5
  141. package/esm2020/lib/pagination/pagination.module.mjs +5 -7
  142. package/esm2020/lib/placeholder/placeholder-animation.directive.mjs +4 -4
  143. package/esm2020/lib/placeholder/placeholder.directive.mjs +4 -4
  144. package/esm2020/lib/placeholder/placeholder.module.mjs +5 -7
  145. package/esm2020/lib/popover/popover/popover.component.mjs +4 -4
  146. package/esm2020/lib/popover/popover.directive.mjs +4 -4
  147. package/esm2020/lib/popover/popover.module.mjs +5 -7
  148. package/esm2020/lib/progress/progress-bar.component.mjs +4 -4
  149. package/esm2020/lib/progress/progress.component.mjs +4 -4
  150. package/esm2020/lib/progress/progress.module.mjs +5 -7
  151. package/esm2020/lib/services/class-toggle.service.mjs +4 -4
  152. package/esm2020/lib/services/intersection.service.mjs +4 -4
  153. package/esm2020/lib/services/listeners.service.mjs +4 -4
  154. package/esm2020/lib/shared/html-attr.directive.mjs +4 -4
  155. package/esm2020/lib/shared/shared.module.mjs +5 -7
  156. package/esm2020/lib/shared/template-id.directive.mjs +4 -4
  157. package/esm2020/lib/sidebar/sidebar/sidebar.component.mjs +4 -4
  158. package/esm2020/lib/sidebar/sidebar-backdrop/sidebar-backdrop.service.mjs +4 -4
  159. package/esm2020/lib/sidebar/sidebar-brand/sidebar-brand.component.mjs +4 -4
  160. package/esm2020/lib/sidebar/sidebar-footer/sidebar-footer.component.mjs +5 -5
  161. package/esm2020/lib/sidebar/sidebar-header/sidebar-header.component.mjs +5 -5
  162. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-badge.pipe.mjs +4 -4
  163. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-divider.component.mjs +4 -4
  164. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-icon.pipe.mjs +4 -4
  165. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-item-class.pipe.mjs +4 -4
  166. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-label.component.mjs +4 -4
  167. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-link.component.mjs +11 -11
  168. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-link.pipe.mjs +4 -4
  169. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-title.component.mjs +4 -4
  170. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav.component.mjs +14 -14
  171. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav.service.mjs +7 -7
  172. package/esm2020/lib/sidebar/sidebar-toggle/sidebar-toggle.directive.mjs +4 -4
  173. package/esm2020/lib/sidebar/sidebar-toggler/sidebar-toggler.component.mjs +4 -4
  174. package/esm2020/lib/sidebar/sidebar.module.mjs +9 -11
  175. package/esm2020/lib/sidebar/sidebar.service.mjs +4 -4
  176. package/esm2020/lib/smart-pagination/smart-pagination.component.mjs +4 -4
  177. package/esm2020/lib/smart-pagination/smart-pagination.module.mjs +6 -8
  178. package/esm2020/lib/smart-table/smart-table/smart-table.component.mjs +41 -22
  179. package/esm2020/lib/smart-table/smart-table-filter/smart-table-filter.component.mjs +7 -7
  180. package/esm2020/lib/smart-table/smart-table-head/smart-table-head.component.mjs +8 -8
  181. package/esm2020/lib/smart-table/smart-table-items-per-page-selector/smart-table-items-per-page-selector.component.mjs +9 -9
  182. package/esm2020/lib/smart-table/smart-table.module.mjs +15 -17
  183. package/esm2020/lib/spinner/spinner.component.mjs +4 -4
  184. package/esm2020/lib/spinner/spinner.module.mjs +6 -8
  185. package/esm2020/lib/table/table-active.directive.mjs +4 -4
  186. package/esm2020/lib/table/table-color.directive.mjs +4 -4
  187. package/esm2020/lib/table/table.directive.mjs +4 -4
  188. package/esm2020/lib/table/table.module.mjs +5 -7
  189. package/esm2020/lib/tabs/tab-content/tab-content.component.mjs +4 -4
  190. package/esm2020/lib/tabs/tab-content-ref.directive.mjs +4 -4
  191. package/esm2020/lib/tabs/tab-pane/tab-pane.component.mjs +4 -4
  192. package/esm2020/lib/tabs/tab.service.mjs +4 -4
  193. package/esm2020/lib/tabs/tabs.module.mjs +6 -8
  194. package/esm2020/lib/toast/toast/toast.component.mjs +10 -10
  195. package/esm2020/lib/toast/toast-body/toast-body.component.mjs +4 -4
  196. package/esm2020/lib/toast/toast-close.directive.mjs +4 -4
  197. package/esm2020/lib/toast/toast-header/toast-header.component.mjs +5 -5
  198. package/esm2020/lib/toast/toast.module.mjs +5 -5
  199. package/esm2020/lib/toast/toaster/toaster-host.directive.mjs +4 -4
  200. package/esm2020/lib/toast/toaster/toaster.component.mjs +4 -4
  201. package/esm2020/lib/toast/toaster/toaster.service.mjs +4 -4
  202. package/esm2020/lib/tooltip/tooltip/tooltip.component.mjs +4 -4
  203. package/esm2020/lib/tooltip/tooltip.directive.mjs +4 -4
  204. package/esm2020/lib/tooltip/tooltip.module.mjs +5 -7
  205. package/esm2020/lib/utilities/align.directive.mjs +4 -4
  206. package/esm2020/lib/utilities/bg-color.directive.mjs +4 -4
  207. package/esm2020/lib/utilities/border.directive.mjs +4 -4
  208. package/esm2020/lib/utilities/rounded.directive.mjs +4 -4
  209. package/esm2020/lib/utilities/text-color.directive.mjs +4 -4
  210. package/esm2020/lib/utilities/utilities.module.mjs +5 -7
  211. package/esm2020/lib/widget/widget-stat-a/widget-stat-a.component.mjs +7 -7
  212. package/esm2020/lib/widget/widget-stat-b/widget-stat-b.component.mjs +7 -7
  213. package/esm2020/lib/widget/widget-stat-c/widget-stat-c.component.mjs +7 -7
  214. package/esm2020/lib/widget/widget-stat-d/widget-stat-d.component.mjs +8 -8
  215. package/esm2020/lib/widget/widget-stat-e/widget-stat-e.component.mjs +7 -7
  216. package/esm2020/lib/widget/widget-stat-f/widget-stat-f.component.mjs +8 -8
  217. package/esm2020/lib/widget/widget.module.mjs +7 -9
  218. package/esm2020/public-api.mjs +1 -3
  219. package/fesm2015/coreui-angular-pro.mjs +2245 -4152
  220. package/fesm2015/coreui-angular-pro.mjs.map +1 -1
  221. package/fesm2020/coreui-angular-pro.mjs +2235 -4130
  222. package/fesm2020/coreui-angular-pro.mjs.map +1 -1
  223. package/{coreui-angular-pro.d.ts → index.d.ts} +0 -0
  224. package/lib/accordion/accordion/accordion.component.d.ts +1 -1
  225. package/lib/accordion/accordion-button/accordion-button.directive.d.ts +1 -1
  226. package/lib/accordion/accordion-item/accordion-item.component.d.ts +1 -1
  227. package/lib/alert/alert-heading.directive.d.ts +1 -1
  228. package/lib/alert/alert-link.directive.d.ts +1 -1
  229. package/lib/alert/alert.component.d.ts +1 -1
  230. package/lib/avatar/avatar.component.d.ts +1 -1
  231. package/lib/badge/badge.component.d.ts +1 -1
  232. package/lib/breadcrumb/breadcrumb/breadcrumb.component.d.ts +1 -1
  233. package/lib/breadcrumb/breadcrumb-item/breadcrumb-item.component.d.ts +1 -1
  234. package/lib/breadcrumb/breadcrumb-router/breadcrumb-router.component.d.ts +1 -1
  235. package/lib/button/button-close.directive.d.ts +1 -1
  236. package/lib/button/button.directive.d.ts +1 -1
  237. package/lib/button-group/button-group/button-group.component.d.ts +1 -1
  238. package/lib/button-group/button-toolbar/button-toolbar.component.d.ts +1 -1
  239. package/lib/callout/callout.component.d.ts +1 -1
  240. package/lib/card/card-body.component.d.ts +1 -1
  241. package/lib/card/card-footer.component.d.ts +1 -1
  242. package/lib/card/card-group.component.d.ts +1 -1
  243. package/lib/card/card-header-actions.component.d.ts +1 -1
  244. package/lib/card/card-header.component.d.ts +1 -1
  245. package/lib/card/card-img-overlay/card-img-overlay.component.d.ts +1 -1
  246. package/lib/card/card-img.directive.d.ts +1 -1
  247. package/lib/card/card-link.directive.d.ts +1 -1
  248. package/lib/card/card-subtitle.directive.d.ts +1 -1
  249. package/lib/card/card-text.directive.d.ts +1 -1
  250. package/lib/card/card-title.directive.d.ts +1 -1
  251. package/lib/card/card.component.d.ts +1 -1
  252. package/lib/carousel/carousel/carousel.component.d.ts +1 -1
  253. package/lib/carousel/carousel-caption/carousel-caption.component.d.ts +1 -1
  254. package/lib/carousel/carousel-control/carousel-control.component.d.ts +1 -1
  255. package/lib/carousel/carousel-indicators/carousel-indicators.component.d.ts +1 -1
  256. package/lib/carousel/carousel-inner/carousel-inner.component.d.ts +1 -1
  257. package/lib/carousel/carousel-item/carousel-item.component.d.ts +1 -1
  258. package/lib/collapse/collapse.directive.d.ts +1 -1
  259. package/lib/dropdown/dropdown/dropdown.component.d.ts +6 -4
  260. package/lib/dropdown/dropdown-close/dropdown-close.directive.d.ts +1 -1
  261. package/lib/dropdown/dropdown-divider/dropdown-divider.directive.d.ts +1 -1
  262. package/lib/dropdown/dropdown-header/dropdown-header.directive.d.ts +1 -1
  263. package/lib/dropdown/dropdown-item/dropdown-item-plain.directive.d.ts +1 -1
  264. package/lib/dropdown/dropdown-item/dropdown-item.directive.d.ts +1 -1
  265. package/lib/dropdown/dropdown-menu/dropdown-menu.directive.d.ts +1 -1
  266. package/lib/element-cover/element-cover.component.d.ts +1 -1
  267. package/lib/footer/footer.component.d.ts +1 -1
  268. package/lib/form/form/form.directive.d.ts +1 -1
  269. package/lib/form/form-check/form-check-input.directive.d.ts +1 -1
  270. package/lib/form/form-check/form-check-label.directive.d.ts +1 -1
  271. package/lib/form/form-check/form-check.component.d.ts +1 -1
  272. package/lib/form/form-control/form-control.directive.d.ts +1 -1
  273. package/lib/form/form-feedback/form-feedback.component.d.ts +1 -1
  274. package/lib/form/form-floating/form-floating.directive.d.ts +1 -1
  275. package/lib/form/form-label/form-label.directive.d.ts +1 -1
  276. package/lib/form/form-select/form-select.directive.d.ts +1 -1
  277. package/lib/form/form-text/form-text.directive.d.ts +1 -1
  278. package/lib/form/input-group/input-group.component.d.ts +1 -1
  279. package/lib/form/input-group-text/input-group-text.directive.d.ts +1 -1
  280. package/lib/grid/col.component.d.ts +1 -1
  281. package/lib/grid/col.directive.d.ts +1 -1
  282. package/lib/grid/container.component.d.ts +1 -1
  283. package/lib/grid/gutter.directive.d.ts +1 -1
  284. package/lib/grid/row.component.d.ts +1 -1
  285. package/lib/grid/row.directive.d.ts +1 -1
  286. package/lib/header/header/header.component.d.ts +1 -1
  287. package/lib/header/header-brand/header-brand.component.d.ts +1 -1
  288. package/lib/header/header-divider/header-divider.component.d.ts +1 -1
  289. package/lib/header/header-nav/header-nav.component.d.ts +1 -1
  290. package/lib/header/header-text/header-text.component.d.ts +1 -1
  291. package/lib/header/header-toggler/header-toggler.directive.d.ts +1 -1
  292. package/lib/image/img.directive.d.ts +1 -1
  293. package/lib/list-group/list-group-item.directive.d.ts +1 -1
  294. package/lib/list-group/list-group.directive.d.ts +1 -1
  295. package/lib/loading-button/loading-button.component.d.ts +1 -1
  296. package/lib/modal/modal/modal.component.d.ts +1 -1
  297. package/lib/modal/modal-body/modal-body.component.d.ts +1 -1
  298. package/lib/modal/modal-content/modal-content.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/modal/modal-footer/modal-footer.component.d.ts +1 -1
  302. package/lib/modal/modal-header/modal-header.component.d.ts +1 -1
  303. package/lib/modal/modal-title/modal-title.directive.d.ts +1 -1
  304. package/lib/multi-select/multi-select/multi-select.component.d.ts +1 -1
  305. package/lib/multi-select/multi-select-native-select/multi-select-native-select.component.d.ts +1 -1
  306. package/lib/multi-select/multi-select-optgroup/multi-select-optgroup-label.component.d.ts +1 -1
  307. package/lib/multi-select/multi-select-optgroup/multi-select-optgroup.component.d.ts +1 -1
  308. package/lib/multi-select/multi-select-option/multi-select-option.component.d.ts +1 -1
  309. package/lib/multi-select/multi-select-tag/multi-select-tag.component.d.ts +1 -1
  310. package/lib/nav/nav-item.component.d.ts +1 -1
  311. package/lib/nav/nav-link.directive.d.ts +1 -1
  312. package/lib/nav/nav.component.d.ts +1 -1
  313. package/lib/navbar/navbar-brand/navbar-brand.directive.d.ts +1 -1
  314. package/lib/navbar/navbar-nav/navbar-nav.component.d.ts +1 -1
  315. package/lib/navbar/navbar-text/navbar-text.component.d.ts +1 -1
  316. package/lib/navbar/navbar-toggler/navbar-toggler.directive.d.ts +1 -1
  317. package/lib/navbar/navbar.component.d.ts +1 -1
  318. package/lib/offcanvas/offcanvas/offcanvas.component.d.ts +1 -1
  319. package/lib/offcanvas/offcanvas-body/offcanvas-body.component.d.ts +1 -1
  320. package/lib/offcanvas/offcanvas-header/offcanvas-header.component.d.ts +1 -1
  321. package/lib/offcanvas/offcanvas-title/offcanvas-title.directive.d.ts +1 -1
  322. package/lib/offcanvas/offcanvas-toggle/offcanvas-toggle.directive.d.ts +1 -1
  323. package/lib/pagination/page-item/page-item.component.d.ts +1 -1
  324. package/lib/pagination/page-item/page-item.directive.d.ts +1 -1
  325. package/lib/pagination/page-link/page-link.directive.d.ts +1 -1
  326. package/lib/pagination/pagination/pagination.component.d.ts +1 -1
  327. package/lib/placeholder/placeholder-animation.directive.d.ts +1 -1
  328. package/lib/placeholder/placeholder.directive.d.ts +1 -1
  329. package/lib/popover/popover/popover.component.d.ts +1 -1
  330. package/lib/popover/popover.directive.d.ts +1 -1
  331. package/lib/progress/progress-bar.component.d.ts +1 -1
  332. package/lib/progress/progress.component.d.ts +1 -1
  333. package/lib/shared/html-attr.directive.d.ts +1 -1
  334. package/lib/shared/template-id.directive.d.ts +1 -1
  335. package/lib/sidebar/sidebar/sidebar.component.d.ts +1 -1
  336. package/lib/sidebar/sidebar-brand/sidebar-brand.component.d.ts +1 -1
  337. package/lib/sidebar/sidebar-footer/sidebar-footer.component.d.ts +1 -1
  338. package/lib/sidebar/sidebar-header/sidebar-header.component.d.ts +1 -1
  339. package/lib/sidebar/sidebar-nav/sidebar-nav-badge.pipe.d.ts +1 -1
  340. package/lib/sidebar/sidebar-nav/sidebar-nav-divider.component.d.ts +1 -1
  341. package/lib/sidebar/sidebar-nav/sidebar-nav-icon.pipe.d.ts +1 -1
  342. package/lib/sidebar/sidebar-nav/sidebar-nav-item-class.pipe.d.ts +1 -1
  343. package/lib/sidebar/sidebar-nav/sidebar-nav-label.component.d.ts +1 -1
  344. package/lib/sidebar/sidebar-nav/sidebar-nav-link.component.d.ts +2 -2
  345. package/lib/sidebar/sidebar-nav/sidebar-nav-link.pipe.d.ts +1 -1
  346. package/lib/sidebar/sidebar-nav/sidebar-nav-title.component.d.ts +1 -1
  347. package/lib/sidebar/sidebar-nav/sidebar-nav.component.d.ts +2 -2
  348. package/lib/sidebar/sidebar-toggle/sidebar-toggle.directive.d.ts +1 -1
  349. package/lib/sidebar/sidebar-toggler/sidebar-toggler.component.d.ts +1 -1
  350. package/lib/smart-pagination/smart-pagination.component.d.ts +1 -1
  351. package/lib/smart-table/smart-table/smart-table.component.d.ts +4 -2
  352. package/lib/smart-table/smart-table-filter/smart-table-filter.component.d.ts +1 -1
  353. package/lib/smart-table/smart-table-head/smart-table-head.component.d.ts +1 -1
  354. package/lib/smart-table/smart-table-items-per-page-selector/smart-table-items-per-page-selector.component.d.ts +1 -1
  355. package/lib/spinner/spinner.component.d.ts +1 -1
  356. package/lib/table/table-active.directive.d.ts +1 -1
  357. package/lib/table/table-color.directive.d.ts +1 -1
  358. package/lib/table/table.directive.d.ts +1 -1
  359. package/lib/tabs/tab-content/tab-content.component.d.ts +1 -1
  360. package/lib/tabs/tab-content-ref.directive.d.ts +1 -1
  361. package/lib/tabs/tab-pane/tab-pane.component.d.ts +1 -1
  362. package/lib/toast/toast/toast.component.d.ts +1 -1
  363. package/lib/toast/toast-body/toast-body.component.d.ts +1 -1
  364. package/lib/toast/toast-close.directive.d.ts +1 -1
  365. package/lib/toast/toast-header/toast-header.component.d.ts +1 -1
  366. package/lib/toast/toaster/toaster-host.directive.d.ts +1 -1
  367. package/lib/toast/toaster/toaster.component.d.ts +1 -1
  368. package/lib/tooltip/tooltip/tooltip.component.d.ts +1 -1
  369. package/lib/tooltip/tooltip.directive.d.ts +1 -1
  370. package/lib/utilities/align.directive.d.ts +1 -1
  371. package/lib/utilities/bg-color.directive.d.ts +1 -1
  372. package/lib/utilities/border.directive.d.ts +1 -1
  373. package/lib/utilities/rounded.directive.d.ts +1 -1
  374. package/lib/utilities/text-color.directive.d.ts +1 -1
  375. package/lib/widget/widget-stat-a/widget-stat-a.component.d.ts +1 -1
  376. package/lib/widget/widget-stat-b/widget-stat-b.component.d.ts +1 -1
  377. package/lib/widget/widget-stat-c/widget-stat-c.component.d.ts +1 -1
  378. package/lib/widget/widget-stat-d/widget-stat-d.component.d.ts +1 -1
  379. package/lib/widget/widget-stat-e/widget-stat-e.component.d.ts +1 -1
  380. package/lib/widget/widget-stat-f/widget-stat-f.component.d.ts +1 -1
  381. package/package.json +7 -8
  382. package/public-api.d.ts +0 -2
  383. package/esm2020/lib/calendar/calendar/calendar-class-view.pipe.mjs +0 -19
  384. package/esm2020/lib/calendar/calendar/calendar.component.mjs +0 -366
  385. package/esm2020/lib/calendar/calendar-month/calendar-class-day.pipe.mjs +0 -28
  386. package/esm2020/lib/calendar/calendar-month/calendar-class-month.pipe.mjs +0 -21
  387. package/esm2020/lib/calendar/calendar-month/calendar-class-year.pipe.mjs +0 -21
  388. package/esm2020/lib/calendar/calendar-month/calendar-day.directive.mjs +0 -81
  389. package/esm2020/lib/calendar/calendar-month/calendar-day.pipe.mjs +0 -18
  390. package/esm2020/lib/calendar/calendar-month/calendar-month.component.mjs +0 -320
  391. package/esm2020/lib/calendar/calendar-month/calendar-weekday.pipe.mjs +0 -20
  392. package/esm2020/lib/calendar/calendar-navigation/calendar-navigation.component.mjs +0 -79
  393. package/esm2020/lib/calendar/calendar.module.mjs +0 -61
  394. package/esm2020/lib/calendar/calendar.service.mjs +0 -58
  395. package/esm2020/lib/calendar/calendar.utils.mjs +0 -270
  396. package/esm2020/lib/calendar/index.mjs +0 -2
  397. package/esm2020/lib/calendar/public_api.mjs +0 -5
  398. package/esm2020/lib/date-range-picker/date-range-picker/date-range-picker.component.mjs +0 -496
  399. package/esm2020/lib/date-range-picker/date-range-picker.module.mjs +0 -59
  400. package/esm2020/lib/date-range-picker/end-date.directive.mjs +0 -17
  401. package/esm2020/lib/date-range-picker/index.mjs +0 -2
  402. package/esm2020/lib/date-range-picker/public_api.mjs +0 -3
  403. package/esm2020/lib/date-range-picker/start-date.directive.mjs +0 -17
  404. package/lib/calendar/calendar/calendar-class-view.pipe.d.ts +0 -7
  405. package/lib/calendar/calendar/calendar.component.d.ts +0 -155
  406. package/lib/calendar/calendar-month/calendar-class-day.pipe.d.ts +0 -15
  407. package/lib/calendar/calendar-month/calendar-class-month.pipe.d.ts +0 -7
  408. package/lib/calendar/calendar-month/calendar-class-year.pipe.d.ts +0 -7
  409. package/lib/calendar/calendar-month/calendar-day.directive.d.ts +0 -29
  410. package/lib/calendar/calendar-month/calendar-day.pipe.d.ts +0 -8
  411. package/lib/calendar/calendar-month/calendar-month.component.d.ts +0 -121
  412. package/lib/calendar/calendar-month/calendar-weekday.pipe.d.ts +0 -8
  413. package/lib/calendar/calendar-navigation/calendar-navigation.component.d.ts +0 -30
  414. package/lib/calendar/calendar.module.d.ts +0 -18
  415. package/lib/calendar/calendar.service.d.ts +0 -33
  416. package/lib/calendar/calendar.utils.d.ts +0 -26
  417. package/lib/calendar/index.d.ts +0 -1
  418. package/lib/calendar/public_api.d.ts +0 -4
  419. package/lib/date-range-picker/date-range-picker/date-range-picker.component.d.ts +0 -233
  420. package/lib/date-range-picker/date-range-picker.module.d.ts +0 -16
  421. package/lib/date-range-picker/end-date.directive.d.ts +0 -8
  422. package/lib/date-range-picker/index.d.ts +0 -1
  423. package/lib/date-range-picker/public_api.d.ts +0 -2
  424. package/lib/date-range-picker/start-date.directive.d.ts +0 -8
@@ -1,496 +0,0 @@
1
- import { Component, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core';
2
- import { FormControl, NG_VALUE_ACCESSOR, Validators } from '@angular/forms';
3
- import { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';
4
- import { Breakpoints } from '@angular/cdk/layout';
5
- import { CalendarComponent } from '../../calendar';
6
- import { getLocalDateFromString, isDateDisabled } from '../../calendar/calendar.utils';
7
- import { StartDateDirective } from '../start-date.directive';
8
- import { EndDateDirective } from '../end-date.directive';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "@angular/cdk/layout";
11
- import * as i2 from "../../dropdown/dropdown/dropdown.component";
12
- import * as i3 from "../../form/input-group/input-group.component";
13
- import * as i4 from "../../calendar/calendar/calendar.component";
14
- import * as i5 from "../../form/form-control/form-control.directive";
15
- import * as i6 from "@angular/forms";
16
- import * as i7 from "../start-date.directive";
17
- import * as i8 from "@angular/common";
18
- import * as i9 from "../../form/input-group-text/input-group-text.directive";
19
- import * as i10 from "../end-date.directive";
20
- import * as i11 from "../../dropdown/dropdown-menu/dropdown-menu.directive";
21
- import * as i12 from "../../button/button.directive";
22
- /** Must be a valid date string */
23
- // todo: validation
24
- // export function invalidDateStringValidator(locale: string): ValidatorFn {
25
- // return (control: AbstractControl): ValidationErrors | null => {
26
- // // const validDate = !isNaN(Date.parse(control.value));
27
- // stringToDateConvert(control.value, locale);
28
- // const dateShim = cvtDate(control.value, locale);
29
- // // @ts-ignore
30
- // // control.setValue(new Date(dateShim.year, dateShim.month, dateShim.day))
31
- // console.log('dateShim', dateShim, locale);
32
- // const validDate = isValidDate(control.value);
33
- // console.log('invalidDateStringValidator', control, control.value, validDate);
34
- // return validDate ? { invalidDateStringValidator: { value: control.value } } : null;
35
- // };
36
- // }
37
- export class DateRangePickerComponent {
38
- constructor(breakpointObserver) {
39
- this.breakpointObserver = breakpointObserver;
40
- /**
41
- * Set the format of day name.
42
- * @default 'numeric'
43
- * @type DayFormatType
44
- */
45
- this.dayFormat = 'numeric';
46
- this._calendars = 2;
47
- this._cleaner = true;
48
- this._indicator = true;
49
- this._inputReadOnly = false;
50
- this._navYearFirst = false;
51
- /**
52
- * Specifies short hints that are visible in start date and end date inputs.
53
- * type string
54
- */
55
- this.placeholder = ['Start date', 'End date'];
56
- /**
57
- * Sets the color context of the cancel button to one of CoreUI’s themed colors.
58
- * @type 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'dark' | 'light' | string
59
- * @default 'secondary'
60
- */
61
- this.rangesButtonsColor = 'secondary';
62
- /**
63
- * Set the ranges button variant to an outlined button or a ghost button.
64
- * @type 'outline' | 'ghost' | undefined
65
- */
66
- this.rangesButtonsVariant = 'ghost';
67
- this._separator = true;
68
- this._timepicker = false;
69
- /**
70
- * Toggle visibility or set the content of today button.
71
- * @type string
72
- * @default 'Today'
73
- */
74
- this.todayButton = 'Today';
75
- /**
76
- * Sets the color context of the today button to one of CoreUI’s themed colors.
77
- * @type 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'dark' | 'light' | string
78
- * @default 'primary'
79
- */
80
- this.todayButtonColor = 'primary';
81
- /**
82
- * Size the today button small or large.
83
- * @type 'sm' | 'lg'
84
- * @default 'sm'
85
- */
86
- this.todayButtonSize = 'sm';
87
- this._visible = false;
88
- this.disabledDates = [];
89
- this._firstDayOfWeek = 1;
90
- this.locale = 'default';
91
- this.maxDate = null;
92
- this.minDate = null;
93
- this._navigation = true;
94
- this._range = true;
95
- this._disabled = false;
96
- this._value = [];
97
- /**
98
- * Set length or format of day name.
99
- * @type WeekdayFormatType
100
- * @default 'short'
101
- */
102
- this.weekdayFormat = 'short';
103
- this.valueChange = new EventEmitter();
104
- this.calendarCellHover = new EventEmitter();
105
- this.calendarDateChange = new EventEmitter();
106
- this.endDateChange = new EventEmitter();
107
- this.startDateChange = new EventEmitter();
108
- this.isMobile = true;
109
- this._startDateValue = this.startDate?.toLocaleDateString(this.locale) ?? '';
110
- this._endDateValue = this.endDate?.toLocaleDateString(this.locale) ?? '';
111
- this.startDatePlaceholder = this.placeholder[0];
112
- this.endDatePlaceholder = this.placeholder[1];
113
- // todo: validation
114
- this.startDateInput = new FormControl({ value: this.startDateValue, disabled: this.disabled }, [
115
- Validators.required
116
- // Validators.minLength(8),
117
- // Validators.maxLength(10),
118
- // invalidDateStringValidator(this.locale)
119
- ]);
120
- this.endDateInput = new FormControl({ value: this.endDateValue, disabled: this.disabled }, [
121
- Validators.required
122
- // Validators.minLength(8),
123
- // Validators.maxLength(10),
124
- // invalidDateStringValidator(this.locale)
125
- ]);
126
- this.setInputValue = (elementRef, date) => {
127
- if (!elementRef) {
128
- return;
129
- }
130
- elementRef.nativeElement.value = date?.toLocaleDateString(this.locale) ?? '';
131
- return;
132
- };
133
- this.onChange = (value) => {
134
- // console.log('onChange', value);
135
- };
136
- }
137
- /**
138
- * The number of calendars that render on desktop devices.
139
- * @type number
140
- * @default 2
141
- */
142
- set calendars(value) {
143
- this._calendars = coerceNumberProperty(value);
144
- }
145
- get calendars() {
146
- return this._calendars;
147
- }
148
- /**
149
- * Toggle visibility or set the content of the cleaner button.
150
- * @type boolean
151
- * @default true
152
- */
153
- set cleaner(value) {
154
- this._cleaner = coerceBooleanProperty(value);
155
- }
156
- get cleaner() {
157
- return this._cleaner;
158
- }
159
- /**
160
- * Toggle visibility or set the content of the input indicator.
161
- * @type boolean
162
- * @default true
163
- */
164
- set indicator(value) {
165
- this._indicator = coerceBooleanProperty(value);
166
- }
167
- get indicator() {
168
- return this._indicator;
169
- }
170
- /**
171
- * Toggle the readonly state for the component.
172
- * @type boolean
173
- * @default false
174
- */
175
- set inputReadOnly(value) {
176
- this._inputReadOnly = coerceBooleanProperty(value);
177
- }
178
- get inputReadOnly() {
179
- return this._inputReadOnly;
180
- }
181
- /**
182
- * Reorder year-month navigation, and render year first.
183
- * @type boolean
184
- * @default false
185
- */
186
- set navYearFirst(value) {
187
- this._navYearFirst = coerceBooleanProperty(value);
188
- }
189
- get navYearFirst() {
190
- return this._navYearFirst;
191
- }
192
- /**
193
- * Default icon or character that separates two dates.
194
- * @type boolean
195
- * @default true
196
- */
197
- set separator(value) {
198
- this._separator = coerceBooleanProperty(value);
199
- }
200
- get separator() {
201
- return this._separator;
202
- }
203
- /**
204
- * Provide an additional time selection by adding select boxes to choose time.
205
- * @type boolean
206
- * @default false
207
- */
208
- set timepicker(value) {
209
- this._timepicker = coerceBooleanProperty(value);
210
- }
211
- get timepicker() {
212
- return this._timepicker;
213
- }
214
- /**
215
- * Toggle the visibility of the component.
216
- * @type boolean
217
- * @default false
218
- */
219
- set visible(value) {
220
- this._visible = coerceBooleanProperty(value);
221
- }
222
- get visible() {
223
- return this._visible;
224
- }
225
- set firstDayOfWeek(value) {
226
- this._firstDayOfWeek = coerceNumberProperty(value);
227
- }
228
- get firstDayOfWeek() {
229
- return this._firstDayOfWeek;
230
- }
231
- set navigation(value) {
232
- this._navigation = coerceBooleanProperty(value);
233
- }
234
- get navigation() {
235
- return this._navigation;
236
- }
237
- /**
238
- * Allow range selection.
239
- * @type boolean
240
- * @default false
241
- */
242
- set range(value) {
243
- this._range = coerceBooleanProperty(value);
244
- }
245
- get range() {
246
- return this._range;
247
- }
248
- set disabled(value) {
249
- this._disabled = coerceBooleanProperty(value);
250
- }
251
- get disabled() {
252
- return this._disabled;
253
- }
254
- set value(value) {
255
- const newValue = Array.isArray(value) ? [...value] : [];
256
- if (this._value.toString() !== newValue.toString()) {
257
- this._value = newValue;
258
- this.onChange(newValue);
259
- this.valueChange.emit(this.value);
260
- }
261
- }
262
- get value() {
263
- return this._value;
264
- }
265
- set startDateValue(value) {
266
- this.startDateInput.setValue(value);
267
- this._startDateValue = value;
268
- }
269
- get startDateValue() {
270
- return this._startDateValue;
271
- }
272
- set endDateValue(value) {
273
- this.endDateInput.setValue(value);
274
- this._endDateValue = value;
275
- }
276
- get endDateValue() {
277
- return this._endDateValue;
278
- }
279
- set inputStartHoverValue(value) {
280
- this._inputStartHoverValue = value;
281
- }
282
- get inputStartHoverValue() {
283
- return this._inputStartHoverValue;
284
- }
285
- set inputEndHoverValue(value) {
286
- this._inputEndHoverValue = value;
287
- }
288
- get inputEndHoverValue() {
289
- return this._inputEndHoverValue;
290
- }
291
- ngOnInit() {
292
- this.layoutChanges = this.breakpointObserver.observe([
293
- Breakpoints.Handset,
294
- Breakpoints.Tablet
295
- ]).subscribe(result => {
296
- this.isMobile = result.matches;
297
- });
298
- this.customRanges = this.ranges ? Object.entries(this.ranges) : [];
299
- this.startDateValue = this.startDate?.toLocaleDateString(this.locale) ?? '';
300
- this.endDateValue = this.endDate?.toLocaleDateString(this.locale) ?? '';
301
- }
302
- ngOnDestroy() {
303
- this.layoutChanges.unsubscribe();
304
- }
305
- getCustomRangeKey(customRange) {
306
- return customRange[0];
307
- }
308
- setCustomRange(customRange) {
309
- const key = this.getCustomRangeKey(customRange);
310
- this.startDate = customRange[1][0];
311
- this.endDate = customRange[1][1];
312
- }
313
- handleCalendarCellHover($event) {
314
- this.calendarCellHover.emit($event);
315
- if (!this.startDate) {
316
- this.setInputValue(this.startDateDirective?.elementRef, $event);
317
- this.inputStartHoverValue = $event;
318
- return;
319
- }
320
- if (!this.endDate) {
321
- this.setInputValue(this.endDateDirective?.elementRef, $event);
322
- this.inputEndHoverValue = $event;
323
- return;
324
- }
325
- }
326
- handleCalendarDateChange($event) {
327
- this.calendarDateChange.emit($event);
328
- }
329
- handleStartDateChange(date) {
330
- // if (date?.getTime() !== this.startDate?.getTime()) {
331
- this.startDateChange.emit(date);
332
- this.startDateValue = date ? date.toLocaleDateString(this.locale) : '';
333
- this.inputStartHoverValue = null;
334
- this.value = this.startDate && this.endDate ? [this.startDate, this.endDate] : [];
335
- // }
336
- }
337
- handleEndDateChange(date) {
338
- // if (date?.getTime() !== this.endDate?.getTime()) {
339
- this.endDateChange.emit(date);
340
- this.endDateValue = date ? date.toLocaleDateString(this.locale) : '';
341
- this.inputEndHoverValue = null;
342
- this.value = this.startDate && this.endDate ? [this.startDate, this.endDate] : [];
343
- // }
344
- }
345
- handleClear($event) {
346
- this.calendarComponent?.clearDates();
347
- }
348
- handleStartDateInputChange($event) {
349
- const date = getLocalDateFromString($event.target?.value, this.locale, this.timepicker);
350
- if (!date) {
351
- this.calendarComponent?.clearDates();
352
- }
353
- if (date instanceof Date && date.getTime()) {
354
- if (!(this.forbiddenDate(date) || (this.endDate && this.endDate < date))) {
355
- this.calendarDate = date;
356
- this.startDate = date;
357
- }
358
- }
359
- this.startDateValue = this.startDate?.toLocaleDateString(this.locale) ?? '';
360
- }
361
- handleEndDateInputChange($event) {
362
- const date = getLocalDateFromString($event.target?.value, this.locale, this.timepicker);
363
- if (!date) {
364
- this.endDate = null;
365
- }
366
- if (date instanceof Date && date.getTime()) {
367
- if (!(this.forbiddenDate(date) || (this.startDate && this.startDate > date))) {
368
- this.calendarDate = date;
369
- this.endDate = date;
370
- }
371
- }
372
- this.endDateValue = this.endDate?.toLocaleDateString(this.locale) ?? '';
373
- }
374
- forbiddenDate(date) {
375
- return isDateDisabled(date, this.minDate, this.maxDate, this.disabledDates) && (this.dateFilter ? !this.dateFilter(date) : false);
376
- }
377
- registerOnChange(fn) {
378
- this.onChange = fn;
379
- }
380
- registerOnTouched(fn) {
381
- }
382
- setDisabledState(isDisabled) {
383
- this.disabled = isDisabled;
384
- }
385
- writeValue(value) {
386
- if (value !== null) {
387
- this.value = value;
388
- }
389
- }
390
- }
391
- DateRangePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DateRangePickerComponent, deps: [{ token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
392
- DateRangePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: DateRangePickerComponent, selector: "c-date-range-picker", inputs: { dayFormat: "dayFormat", calendars: "calendars", cleaner: "cleaner", format: "format", indicator: "indicator", inputReadOnly: "inputReadOnly", navYearFirst: "navYearFirst", placeholder: "placeholder", ranges: "ranges", rangesButtonsColor: "rangesButtonsColor", rangesButtonsSize: "rangesButtonsSize", rangesButtonsVariant: "rangesButtonsVariant", separator: "separator", size: "size", timepicker: "timepicker", todayButton: "todayButton", todayButtonColor: "todayButtonColor", todayButtonSize: "todayButtonSize", todayButtonVariant: "todayButtonVariant", 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" }, outputs: { valueChange: "valueChange", calendarCellHover: "calendarCellHover", calendarDateChange: "calendarDateChange", endDateChange: "endDateChange", startDateChange: "startDateChange" }, providers: [
393
- {
394
- provide: NG_VALUE_ACCESSOR,
395
- useExisting: forwardRef(() => DateRangePickerComponent),
396
- multi: true
397
- }
398
- ], viewQueries: [{ propertyName: "calendarComponent", first: true, predicate: CalendarComponent, descendants: true }, { propertyName: "startDateDirective", first: true, predicate: StartDateDirective, descendants: true }, { propertyName: "endDateDirective", first: true, predicate: EndDateDirective, descendants: true }], exportAs: ["cDateRangePicker"], ngImport: i0, template: "<c-dropdown #dropdown=\"cDropdown\" [autoClose]=\"'outside'\" class=\"date-picker picker\">\r\n <c-input-group [caret]=\"false\"\r\n [disabled]=\"disabled ?? dropdown.visible\"\r\n [sizing]=\"size ?? ''\"\r\n cDropdownToggle\r\n class=\"picker-input-group\"\r\n >\r\n <input (change)=\"handleStartDateInputChange($event)\"\r\n [formControl]=\"startDateInput\"\r\n [ngClass]=\"{hover: !!inputStartHoverValue}\"\r\n [placeholder]=\"startDatePlaceholder ?? placeholder[0]\"\r\n cFormControl\r\n cStartDate\r\n [attr.tabindex]=\"disabled ? -1 : 0\"\r\n [attr.disabled]=\"disabled ? '' : null\"\r\n pattern=\"[1-9]*\"\r\n [readonly]=\"inputReadOnly ?? null\"\r\n >\r\n <span *ngIf=\"range && separator !== false\" cInputGroupText>\r\n <span class=\"picker-input-group-icon date-picker-arrow-icon\"></span>\r\n </span>\r\n <input (change)=\"handleEndDateInputChange($event)\"\r\n *ngIf=\"range\"\r\n [formControl]=\"endDateInput\"\r\n [ngClass]=\"{hover: !!inputEndHoverValue}\"\r\n [placeholder]=\"endDatePlaceholder ?? placeholder[1]\"\r\n cEndDate\r\n cFormControl\r\n [attr.tabindex]=\"disabled ? -1 : 0\"\r\n [attr.disabled]=\"disabled ? '' : null\"\r\n pattern=\"[1-9]*\"\r\n [readonly]=\"inputReadOnly ?? null\"\r\n >\r\n <span *ngIf=\"indicator || cleaner\" cInputGroupText>\r\n <span *ngIf=\"indicator\" class=\"picker-input-group-indicator\">\r\n <span class=\"picker-input-group-icon date-picker-input-icon\"></span>\r\n </span>\r\n <span (click)=\"!disabled && handleClear($event)\" *ngIf=\"cleaner && startDate &&!disabled\" class=\"picker-input-group-cleaner\"\r\n role=\"button\">\r\n <span class=\"picker-input-group-icon date-picker-cleaner-icon\"></span>\r\n </span>\r\n </span>\r\n\r\n </c-input-group>\r\n <div [visible]=\"true\" cDropdownMenu>\r\n <div class=\"date-picker-body\">\r\n <ng-template [ngIf]=\"!isMobile\">\r\n <div *ngIf=\"ranges\" class=\"date-picker-ranges\">\r\n <button (click)=\"setCustomRange(customRange)\"\r\n *ngFor=\"let customRange of customRanges\"\r\n [color]=\"rangesButtonsColor\"\r\n [size]=\"rangesButtonsSize\"\r\n [variant]=\"rangesButtonsVariant\"\r\n cButton>\r\n {{getCustomRangeKey(customRange)}}\r\n </button>\r\n </div>\r\n </ng-template>\r\n <c-calendar\r\n (calendarCellHover)=\"handleCalendarCellHover($event)\"\r\n (calendarDateChange)=\"handleCalendarDateChange($event)\"\r\n (endDateChange)=\"handleEndDateChange($event)\"\r\n (startDateChange)=\"handleStartDateChange($event)\"\r\n [calendarDate]=\"calendarDate\"\r\n [calendars]=\"isMobile ? 1 : calendars\"\r\n [dateFilter]=\"dateFilter\"\r\n [disabledDates]=\"disabledDates\"\r\n [endDate]=\"endDate\"\r\n [firstDayOfWeek]=\"firstDayOfWeek\"\r\n [locale]=\"locale\"\r\n [maxDate]=\"maxDate\"\r\n [minDate]=\"minDate\"\r\n [navigation]=\"navigation\"\r\n [range]=\"range\"\r\n [startDate]=\"startDate\"\r\n [navYearFirst]=\"navYearFirst\"\r\n [dayFormat]=\"dayFormat\"\r\n [weekdayFormat]=\"weekdayFormat\"\r\n class=\"date-picker-calendars\"\r\n ></c-calendar>\r\n </div>\r\n </div>\r\n <ng-content></ng-content>\r\n</c-dropdown>\r\n", styles: [""], components: [{ type: i2.DropdownComponent, selector: "c-dropdown", inputs: ["alignment", "autoClose", "dark", "direction", "placement", "popper", "popperOptions", "variant", "visible"], outputs: ["visibleChange"], exportAs: ["cDropdown"] }, { type: i3.InputGroupComponent, selector: "c-input-group", inputs: ["sizing"] }, { type: i4.CalendarComponent, selector: "c-calendar", inputs: ["calendarDate", "calendars", "dayFormat", "disabledDates", "startDate", "endDate", "firstDayOfWeek", "locale", "maxDate", "minDate", "navigation", "navYearFirst", "range", "view", "weekdayFormat", "dateFilter"], outputs: ["calendarCellHover", "calendarDateChange", "endDateChange", "startDateChange", "viewChange"], exportAs: ["cCalendar"] }], directives: [{ type: i2.DropdownToggleDirective, selector: "[cDropdownToggle]", inputs: ["dropdownComponent", "disabled", "caret", "split"], exportAs: ["cDropdownToggle"] }, { type: i5.FormControlDirective, selector: "input[cFormControl], textarea[cFormControl]", inputs: ["sizing", "valid", "type", "plaintext"] }, { type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i7.StartDateDirective, selector: "[cStartDate]", exportAs: ["cStartDate"] }, { type: i6.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.InputGroupTextDirective, selector: "[cInputGroupText]" }, { type: i10.EndDateDirective, selector: "[cEndDate]", exportAs: ["cEndDate"] }, { type: i11.DropdownMenuDirective, selector: "[cDropdownMenu]", inputs: ["alignment", "visible", "dark"], exportAs: ["cDropdownMenu"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i12.ButtonDirective, selector: "[cButton]", inputs: ["active", "color", "disabled", "shape", "size", "type", "variant"], exportAs: ["cButton"] }] });
399
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DateRangePickerComponent, decorators: [{
400
- type: Component,
401
- args: [{ selector: 'c-date-range-picker', exportAs: 'cDateRangePicker', providers: [
402
- {
403
- provide: NG_VALUE_ACCESSOR,
404
- useExisting: forwardRef(() => DateRangePickerComponent),
405
- multi: true
406
- }
407
- ], template: "<c-dropdown #dropdown=\"cDropdown\" [autoClose]=\"'outside'\" class=\"date-picker picker\">\r\n <c-input-group [caret]=\"false\"\r\n [disabled]=\"disabled ?? dropdown.visible\"\r\n [sizing]=\"size ?? ''\"\r\n cDropdownToggle\r\n class=\"picker-input-group\"\r\n >\r\n <input (change)=\"handleStartDateInputChange($event)\"\r\n [formControl]=\"startDateInput\"\r\n [ngClass]=\"{hover: !!inputStartHoverValue}\"\r\n [placeholder]=\"startDatePlaceholder ?? placeholder[0]\"\r\n cFormControl\r\n cStartDate\r\n [attr.tabindex]=\"disabled ? -1 : 0\"\r\n [attr.disabled]=\"disabled ? '' : null\"\r\n pattern=\"[1-9]*\"\r\n [readonly]=\"inputReadOnly ?? null\"\r\n >\r\n <span *ngIf=\"range && separator !== false\" cInputGroupText>\r\n <span class=\"picker-input-group-icon date-picker-arrow-icon\"></span>\r\n </span>\r\n <input (change)=\"handleEndDateInputChange($event)\"\r\n *ngIf=\"range\"\r\n [formControl]=\"endDateInput\"\r\n [ngClass]=\"{hover: !!inputEndHoverValue}\"\r\n [placeholder]=\"endDatePlaceholder ?? placeholder[1]\"\r\n cEndDate\r\n cFormControl\r\n [attr.tabindex]=\"disabled ? -1 : 0\"\r\n [attr.disabled]=\"disabled ? '' : null\"\r\n pattern=\"[1-9]*\"\r\n [readonly]=\"inputReadOnly ?? null\"\r\n >\r\n <span *ngIf=\"indicator || cleaner\" cInputGroupText>\r\n <span *ngIf=\"indicator\" class=\"picker-input-group-indicator\">\r\n <span class=\"picker-input-group-icon date-picker-input-icon\"></span>\r\n </span>\r\n <span (click)=\"!disabled && handleClear($event)\" *ngIf=\"cleaner && startDate &&!disabled\" class=\"picker-input-group-cleaner\"\r\n role=\"button\">\r\n <span class=\"picker-input-group-icon date-picker-cleaner-icon\"></span>\r\n </span>\r\n </span>\r\n\r\n </c-input-group>\r\n <div [visible]=\"true\" cDropdownMenu>\r\n <div class=\"date-picker-body\">\r\n <ng-template [ngIf]=\"!isMobile\">\r\n <div *ngIf=\"ranges\" class=\"date-picker-ranges\">\r\n <button (click)=\"setCustomRange(customRange)\"\r\n *ngFor=\"let customRange of customRanges\"\r\n [color]=\"rangesButtonsColor\"\r\n [size]=\"rangesButtonsSize\"\r\n [variant]=\"rangesButtonsVariant\"\r\n cButton>\r\n {{getCustomRangeKey(customRange)}}\r\n </button>\r\n </div>\r\n </ng-template>\r\n <c-calendar\r\n (calendarCellHover)=\"handleCalendarCellHover($event)\"\r\n (calendarDateChange)=\"handleCalendarDateChange($event)\"\r\n (endDateChange)=\"handleEndDateChange($event)\"\r\n (startDateChange)=\"handleStartDateChange($event)\"\r\n [calendarDate]=\"calendarDate\"\r\n [calendars]=\"isMobile ? 1 : calendars\"\r\n [dateFilter]=\"dateFilter\"\r\n [disabledDates]=\"disabledDates\"\r\n [endDate]=\"endDate\"\r\n [firstDayOfWeek]=\"firstDayOfWeek\"\r\n [locale]=\"locale\"\r\n [maxDate]=\"maxDate\"\r\n [minDate]=\"minDate\"\r\n [navigation]=\"navigation\"\r\n [range]=\"range\"\r\n [startDate]=\"startDate\"\r\n [navYearFirst]=\"navYearFirst\"\r\n [dayFormat]=\"dayFormat\"\r\n [weekdayFormat]=\"weekdayFormat\"\r\n class=\"date-picker-calendars\"\r\n ></c-calendar>\r\n </div>\r\n </div>\r\n <ng-content></ng-content>\r\n</c-dropdown>\r\n", styles: [""] }]
408
- }], ctorParameters: function () { return [{ type: i1.BreakpointObserver }]; }, propDecorators: { dayFormat: [{
409
- type: Input
410
- }], calendars: [{
411
- type: Input
412
- }], cleaner: [{
413
- type: Input
414
- }], format: [{
415
- type: Input
416
- }], indicator: [{
417
- type: Input
418
- }], inputReadOnly: [{
419
- type: Input
420
- }], navYearFirst: [{
421
- type: Input
422
- }], placeholder: [{
423
- type: Input
424
- }], ranges: [{
425
- type: Input
426
- }], rangesButtonsColor: [{
427
- type: Input
428
- }], rangesButtonsSize: [{
429
- type: Input
430
- }], rangesButtonsVariant: [{
431
- type: Input
432
- }], separator: [{
433
- type: Input
434
- }], size: [{
435
- type: Input
436
- }], timepicker: [{
437
- type: Input
438
- }], todayButton: [{
439
- type: Input
440
- }], todayButtonColor: [{
441
- type: Input
442
- }], todayButtonSize: [{
443
- type: Input
444
- }], todayButtonVariant: [{
445
- type: Input
446
- }], visible: [{
447
- type: Input
448
- }], startDate: [{
449
- type: Input
450
- }], endDate: [{
451
- type: Input
452
- }], calendarDate: [{
453
- type: Input
454
- }], disabledDates: [{
455
- type: Input
456
- }], firstDayOfWeek: [{
457
- type: Input
458
- }], locale: [{
459
- type: Input
460
- }], maxDate: [{
461
- type: Input
462
- }], minDate: [{
463
- type: Input
464
- }], navigation: [{
465
- type: Input
466
- }], range: [{
467
- type: Input
468
- }], dateFilter: [{
469
- type: Input
470
- }], disabled: [{
471
- type: Input
472
- }], value: [{
473
- type: Input
474
- }], weekdayFormat: [{
475
- type: Input
476
- }], valueChange: [{
477
- type: Output
478
- }], calendarCellHover: [{
479
- type: Output
480
- }], calendarDateChange: [{
481
- type: Output
482
- }], endDateChange: [{
483
- type: Output
484
- }], startDateChange: [{
485
- type: Output
486
- }], calendarComponent: [{
487
- type: ViewChild,
488
- args: [CalendarComponent]
489
- }], startDateDirective: [{
490
- type: ViewChild,
491
- args: [StartDateDirective]
492
- }], endDateDirective: [{
493
- type: ViewChild,
494
- args: [EndDateDirective]
495
- }] } });
496
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLFdBQVcsRUFBYSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RyxPQUFPLEVBQWdCLHFCQUFxQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEcsT0FBTyxFQUFzQixXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUl0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFdkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBUXpELGtDQUFrQztBQUNsQyxtQkFBbUI7QUFDbkIsNEVBQTRFO0FBQzVFLG9FQUFvRTtBQUNwRSw4REFBOEQ7QUFDOUQsa0RBQWtEO0FBQ2xELHVEQUF1RDtBQUN2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T0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFHRixVQUFVO3NCQURiLEtBQUs7Z0JBZUYsS0FBSztzQkFEUixLQUFLO2dCQVNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0YsUUFBUTtzQkFEWCxLQUFLO2dCQVVGLEtBQUs7c0JBRFIsS0FBSztnQkFtQkcsYUFBYTtzQkFBckIsS0FBSztnQkFFYSxXQUFXO3NCQUE3QixNQUFNO2dCQUVHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUV1QixpQkFBaUI7c0JBQTlDLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUNHLGtCQUFrQjtzQkFBaEQsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBQ0EsZ0JBQWdCO3NCQUE1QyxTQUFTO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIGZvcndhcmRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBOR19WQUxVRV9BQ0NFU1NPUiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHksIGNvZXJjZU51bWJlclByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcclxuaW1wb3J0IHsgQnJlYWtwb2ludE9ic2VydmVyLCBCcmVha3BvaW50cyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IENvbG9ycyB9IGZyb20gJy4uLy4uL2NvcmV1aS50eXBlcyc7XHJcbmltcG9ydCB7IENhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY2FsZW5kYXInO1xyXG5pbXBvcnQgeyBnZXRMb2NhbERhdGVGcm9tU3RyaW5nLCBpc0RhdGVEaXNhYmxlZCB9IGZyb20gJy4uLy4uL2NhbGVuZGFyL2NhbGVuZGFyLnV0aWxzJztcclxuaW1wb3J0IHsgRGF0ZUZpbHRlclR5cGUsIERheUZvcm1hdFR5cGUsIFdlZWtkYXlGb3JtYXRUeXBlIH0gZnJvbSAnLi4vLi4vY2FsZW5kYXIvY2FsZW5kYXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFN0YXJ0RGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uL3N0YXJ0LWRhdGUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRW5kRGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uL2VuZC1kYXRlLmRpcmVjdGl2ZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDYWxlbmRhclJhbmdlIHtcclxuICBba2V5OiBzdHJpbmddOiBEYXRlW107XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFRDdXN0b21SYW5nZSA9IFtzdHJpbmcsIERhdGVbXV1cclxuXHJcbi8qKiBNdXN0IGJlIGEgdmFsaWQgZGF0ZSBzdHJpbmcgKi9cclxuLy8gdG9kbzogdmFsaWRhdGlvblxyXG4vLyBleHBvcnQgZnVuY3Rpb24gaW52YWxpZERhdGVTdHJpbmdWYWxpZGF0b3IobG9jYWxlOiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XHJcbi8vICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XHJcbi8vICAgICAvLyBjb25zdCB2YWxpZERhdGUgPSAhaXNOYU4oRGF0ZS5wYXJzZShjb250cm9sLnZhbHVlKSk7XHJcbi8vICAgICBzdHJpbmdUb0RhdGVDb252ZXJ0KGNvbnRyb2wudmFsdWUsIGxvY2FsZSk7XHJcbi8vICAgICBjb25zdCBkYXRlU2hpbSA9IGN2dERhdGUoY29udHJvbC52YWx1ZSwgbG9jYWxlKTtcclxuLy8gICAgIC8vIEB0cy1pZ25vcmVcclxuLy8gICAgIC8vIGNvbnRyb2wuc2V0VmFsdWUobmV3IERhdGUoZGF0ZVNoaW0ueWVhciwgZGF0ZVNoaW0ubW9udGgsIGRhdGVTaGltLmRheSkpXHJcbi8vICAgICBjb25zb2xlLmxvZygnZGF0ZVNoaW0nLCBkYXRlU2hpbSwgbG9jYWxlKTtcclxuLy8gICAgIGNvbnN0IHZhbGlkRGF0ZSA9IGlzVmFsaWREYXRlKGNvbnRyb2wudmFsdWUpO1xyXG4vLyAgICAgY29uc29sZS5sb2coJ2ludmFsaWREYXRlU3RyaW5nVmFsaWRhdG9yJywgY29udHJvbCwgY29udHJvbC52YWx1ZSwgdmFsaWREYXRlKTtcclxuLy8gICAgIHJldHVybiB2YWxpZERhdGUgPyB7IGludmFsaWREYXRlU3RyaW5nVmFsaWRhdG9yOiB7IHZhbHVlOiBjb250cm9sLnZhbHVlIH0gfSA6IG51bGw7XHJcbi8vICAgfTtcclxuLy8gfVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjLWRhdGUtcmFuZ2UtcGlja2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZXhwb3J0QXM6ICdjRGF0ZVJhbmdlUGlja2VyJyxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVSYW5nZVBpY2tlckNvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlXHJcbiAgICB9XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuXHJcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2Rpc2FibGVkOiBCb29sZWFuSW5wdXQ7XHJcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX25hdlllYXJGaXJzdDogQm9vbGVhbklucHV0O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYnJlYWtwb2ludE9ic2VydmVyOiBCcmVha3BvaW50T2JzZXJ2ZXJcclxuICApIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIGZvcm1hdCBvZiBkYXkgbmFtZS5cclxuICAgKiBAZGVmYXVsdCAnbnVtZXJpYydcclxuICAgKiBAdHlwZSBEYXlGb3JtYXRUeXBlXHJcbiAgICovXHJcbiAgQElucHV0KCkgZGF5Rm9ybWF0OiBEYXlGb3JtYXRUeXBlID0gJ251bWVyaWMnO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgbnVtYmVyIG9mIGNhbGVuZGFycyB0aGF0IHJlbmRlciBvbiBkZXNrdG9wIGRldmljZXMuXHJcbiAgICogQHR5cGUgbnVtYmVyXHJcbiAgICogQGRlZmF1bHQgMlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGNhbGVuZGFycyh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9jYWxlbmRhcnMgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgfVxyXG4gIGdldCBjYWxlbmRhcnMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXJzO1xyXG4gIH1cclxuICBwcml2YXRlIF9jYWxlbmRhcnM6IG51bWJlciA9IDI7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9yIHNldCB0aGUgY29udGVudCBvZiB0aGUgY2xlYW5lciBidXR0b24uXHJcbiAgICogQHR5cGUgYm9vbGVhblxyXG4gICAqIEBkZWZhdWx0IHRydWVcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBjbGVhbmVyKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9jbGVhbmVyID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICB9XHJcbiAgZ2V0IGNsZWFuZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2xlYW5lcjtcclxuICB9XHJcbiAgcHJpdmF0ZSBfY2xlYW5lcjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBkYXRlIGZvcm1hdC5cclxuICAgKiBXZSB1c2UgZGF0ZS1mbnMgdG8gZm9ybWF0IGRhdGVzLiBWaXNpdCBodHRwczovL2RhdGUtZm5zLm9yZy92Mi4yOC4wL2RvY3MvZm9ybWF0IHRvIGNoZWNrIGFjY2VwdGVkIHBhdHRlcm5zLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgZm9ybWF0Pzogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBUb2dnbGUgdmlzaWJpbGl0eSBvciBzZXQgdGhlIGNvbnRlbnQgb2YgdGhlIGlucHV0IGluZGljYXRvci5cclxuICAgKiBAdHlwZSBib29sZWFuXHJcbiAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGluZGljYXRvcih2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5faW5kaWNhdG9yID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICB9XHJcbiAgZ2V0IGluZGljYXRvcigpIHtcclxuICAgIHJldHVybiB0aGlzLl9pbmRpY2F0b3I7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2luZGljYXRvcjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRvZ2dsZSB0aGUgcmVhZG9ubHkgc3RhdGUgZm9yIHRoZSBjb21wb25lbnQuXHJcbiAgICogQHR5cGUgYm9vbGVhblxyXG4gICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgaW5wdXRSZWFkT25seSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5faW5wdXRSZWFkT25seSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgfVxyXG4gIGdldCBpbnB1dFJlYWRPbmx5KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lucHV0UmVhZE9ubHk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2lucHV0UmVhZE9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogUmVvcmRlciB5ZWFyLW1vbnRoIG5hdmlnYXRpb24sIGFuZCByZW5kZXIgeWVhciBmaXJzdC5cclxuICAgKiBAdHlwZSBib29sZWFuXHJcbiAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBuYXZZZWFyRmlyc3QodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX25hdlllYXJGaXJzdCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgfVxyXG4gIGdldCBuYXZZZWFyRmlyc3QoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmF2WWVhckZpcnN0O1xyXG4gIH1cclxuICBwcml2YXRlIF9uYXZZZWFyRmlyc3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogU3BlY2lmaWVzIHNob3J0IGhpbnRzIHRoYXQgYXJlIHZpc2libGUgaW4gc3RhcnQgZGF0ZSBhbmQgZW5kIGRhdGUgaW5wdXRzLlxyXG4gICAqIHR5cGUgc3RyaW5nXHJcbiAgICovXHJcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyB8IHN0cmluZ1tdID0gWydTdGFydCBkYXRlJywgJ0VuZCBkYXRlJ107XHJcblxyXG4gIC8qKlxyXG4gICAqIFByZWRlZmluZWQgZGF0ZSByYW5nZXMgdGhlIHVzZXIgY2FuIHNlbGVjdCBmcm9tLlxyXG4gICAqIEB0eXBlIElDYWxlbmRhclJhbmdlXHJcbiAgICovXHJcbiAgQElucHV0KCkgcmFuZ2VzPzogb2JqZWN0O1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBjb2xvciBjb250ZXh0IG9mIHRoZSBjYW5jZWwgYnV0dG9uIHRvIG9uZSBvZiBDb3JlVUnigJlzIHRoZW1lZCBjb2xvcnMuXHJcbiAgICogQHR5cGUgJ3ByaW1hcnknIHwgJ3NlY29uZGFyeScgfCAnc3VjY2VzcycgfCAnZGFuZ2VyJyB8ICd3YXJuaW5nJyB8ICdpbmZvJyB8ICdkYXJrJyB8ICdsaWdodCcgfCBzdHJpbmdcclxuICAgKiBAZGVmYXVsdCAnc2Vjb25kYXJ5J1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHJhbmdlc0J1dHRvbnNDb2xvcj86IENvbG9ycyA9ICdzZWNvbmRhcnknO1xyXG5cclxuICAvKipcclxuICAgKiBTaXplIHRoZSByYW5nZXMgYnV0dG9uIHNtYWxsIG9yIGxhcmdlLlxyXG4gICAqIEB0eXBlICdzbScgfCAnbGcnIHwgdW5kZWZpbmVkXHJcbiAgICovXHJcbiAgQElucHV0KCkgcmFuZ2VzQnV0dG9uc1NpemU/OiAnc20nIHwgJ2xnJztcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoZSByYW5nZXMgYnV0dG9uIHZhcmlhbnQgdG8gYW4gb3V0bGluZWQgYnV0dG9uIG9yIGEgZ2hvc3QgYnV0dG9uLlxyXG4gICAqIEB0eXBlICdvdXRsaW5lJyB8ICdnaG9zdCcgfCB1bmRlZmluZWRcclxuICAgKi9cclxuICBASW5wdXQoKSByYW5nZXNCdXR0b25zVmFyaWFudD86ICdvdXRsaW5lJyB8ICdnaG9zdCcgPSAnZ2hvc3QnO1xyXG5cclxuICAvKipcclxuICAgKiBEZWZhdWx0IGljb24gb3IgY2hhcmFjdGVyIHRoYXQgc2VwYXJhdGVzIHR3byBkYXRlcy5cclxuICAgKiBAdHlwZSBib29sZWFuXHJcbiAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNlcGFyYXRvcih2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fc2VwYXJhdG9yID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICB9XHJcbiAgZ2V0IHNlcGFyYXRvcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zZXBhcmF0b3I7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3NlcGFyYXRvcjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNpemUgdGhlIGNvbXBvbmVudCBzbWFsbCBvciBsYXJnZS5cclxuICAgKiBAdHlwZSAnc20nIHwgJ2xnJyB8IHVuZGVmaW5lZFxyXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHNpemU/OiAnc20nIHwgJ2xnJztcclxuXHJcbiAgLyoqXHJcbiAgICogUHJvdmlkZSBhbiBhZGRpdGlvbmFsIHRpbWUgc2VsZWN0aW9uIGJ5IGFkZGluZyBzZWxlY3QgYm94ZXMgdG8gY2hvb3NlIHRpbWUuXHJcbiAgICogQHR5cGUgYm9vbGVhblxyXG4gICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgdGltZXBpY2tlcih2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fdGltZXBpY2tlciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgfVxyXG4gIGdldCB0aW1lcGlja2VyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RpbWVwaWNrZXI7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3RpbWVwaWNrZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogVG9nZ2xlIHZpc2liaWxpdHkgb3Igc2V0IHRoZSBjb250ZW50IG9mIHRvZGF5IGJ1dHRvbi5cclxuICAgKiBAdHlwZSBzdHJpbmdcclxuICAgKiBAZGVmYXVsdCAnVG9kYXknXHJcbiAgICovXHJcbiAgQElucHV0KCkgdG9kYXlCdXR0b246IHN0cmluZyA9ICdUb2RheSc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGNvbG9yIGNvbnRleHQgb2YgdGhlIHRvZGF5IGJ1dHRvbiB0byBvbmUgb2YgQ29yZVVJ4oCZcyB0aGVtZWQgY29sb3JzLlxyXG4gICAqIEB0eXBlICdwcmltYXJ5JyB8ICdzZWNvbmRhcnknIHwgJ3N1Y2Nlc3MnIHwgJ2RhbmdlcicgfCAnd2FybmluZycgfCAnaW5mbycgfCAnZGFyaycgfCAnbGlnaHQnIHwgc3RyaW5nXHJcbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXHJcbiAgICovXHJcbiAgQElucHV0KCkgdG9kYXlCdXR0b25Db2xvcjogQ29sb3JzID0gJ3ByaW1hcnknO1xyXG5cclxuICAvKipcclxuICAgKiBTaXplIHRoZSB0b2RheSBidXR0b24gc21hbGwgb3IgbGFyZ2UuXHJcbiAgICogQHR5cGUgJ3NtJyB8ICdsZydcclxuICAgKiBAZGVmYXVsdCAnc20nXHJcbiAgICovXHJcbiAgQElucHV0KCkgdG9kYXlCdXR0b25TaXplOiAnc20nIHwgJ2xnJyA9ICdzbSc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgdG9kYXkgYnV0dG9uIHZhcmlhbnQgdG8gYW4gb3V0bGluZWQgYnV0dG9uIG9yIGEgZ2hvc3QgYnV0dG9uLlxyXG4gICAqIEB0eXBlICdvdXRsaW5lJyB8ICdnaG9zdCcgfCB1bmRlZmluZWRcclxuICAgKi9cclxuICBASW5wdXQoKSB0b2RheUJ1dHRvblZhcmlhbnQ/OiAnb3V0bGluZScgfCAnZ2hvc3QnO1xyXG5cclxuICAvKipcclxuICAgKiBUb2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGNvbXBvbmVudC5cclxuICAgKiBAdHlwZSBib29sZWFuXHJcbiAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCB2aXNpYmxlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl92aXNpYmxlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICB9XHJcbiAgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJsZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfdmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBzdGFydERhdGU/OiBEYXRlIHwgbnVsbDtcclxuICBASW5wdXQoKSBlbmREYXRlPzogRGF0ZSB8IG51bGw7XHJcbiAgQElucHV0KCkgY2FsZW5kYXJEYXRlPzogRGF0ZTtcclxuICBASW5wdXQoKSBkaXNhYmxlZERhdGVzOiBEYXRlW10gfCBEYXRlW11bXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBmaXJzdERheU9mV2Vlayh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9maXJzdERheU9mV2VlayA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcclxuICB9XHJcbiAgZ2V0IGZpcnN0RGF5T2ZXZWVrKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZpcnN0RGF5T2ZXZWVrO1xyXG4gIH1cclxuICBwcml2YXRlIF9maXJzdERheU9mV2VlazogbnVtYmVyID0gMTtcclxuXHJcbiAgQElucHV0KCkgbG9jYWxlOiBzdHJpbmcgPSAnZGVmYXVsdCc7XHJcbiAgQElucHV0KCkgbWF4RGF0ZTogRGF0ZSB8IG51bGwgPSBudWxsO1xyXG4gIEBJbnB1dCgpIG1pbkRhdGU6IERhdGUgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgbmF2aWdhdGlvbih2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fbmF2aWdhdGlvbiA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgfVxyXG4gIGdldCBuYXZpZ2F0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX25hdmlnYXRpb247XHJcbiAgfVxyXG4gIHByaXZhdGUgX25hdmlnYXRpb246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKipcclxuICAgKiBBbGxvdyByYW5nZSBzZWxlY3Rpb24uXHJcbiAgICogQHR5cGUgYm9vbGVhblxyXG4gICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgcmFuZ2UodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3JhbmdlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICB9XHJcbiAgZ2V0IHJhbmdlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JhbmdlO1xyXG4gIH1cclxuICBwcml2YXRlIF9yYW5nZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpIGRhdGVGaWx0ZXI/OiBEYXRlRmlsdGVyVHlwZTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICB9XHJcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xyXG4gIH1cclxuICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCB2YWx1ZSh2YWx1ZTogRGF0ZVtdKSB7XHJcbiAgICBjb25zdCBuZXdWYWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gWy4uLnZhbHVlXSA6IFtdO1xyXG4gICAgaWYgKHRoaXMuX3ZhbHVlLnRvU3RyaW5nKCkgIT09IG5ld1ZhbHVlLnRvU3RyaW5nKCkpIHtcclxuICAgICAgdGhpcy5fdmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgICAgdGhpcy5vbkNoYW5nZShuZXdWYWx1ZSk7XHJcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHZhbHVlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gIH1cclxuICBwcml2YXRlIF92YWx1ZTogRGF0ZVtdID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBsZW5ndGggb3IgZm9ybWF0IG9mIGRheSBuYW1lLlxyXG4gICAqIEB0eXBlIFdlZWtkYXlGb3JtYXRUeXBlXHJcbiAgICogQGRlZmF1bHQgJ3Nob3J0J1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHdlZWtkYXlGb3JtYXQ6IFdlZWtkYXlGb3JtYXRUeXBlID0gJ3Nob3J0JztcclxuXHJcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlIHwgRGF0ZVtdIHwgdW5kZWZpbmVkPigpO1xyXG5cclxuICBAT3V0cHV0KCkgY2FsZW5kYXJDZWxsSG92ZXI6IEV2ZW50RW1pdHRlcjxEYXRlIHwgbnVsbD4gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGUgfCBudWxsPigpO1xyXG4gIEBPdXRwdXQoKSBjYWxlbmRhckRhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxEYXRlPiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcclxuICBAT3V0cHV0KCkgZW5kRGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPERhdGUgfCBudWxsPiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZSB8IG51bGw+KCk7XHJcbiAgQE91dHB1dCgpIHN0YXJ0RGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPERhdGUgfCBudWxsPiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZSB8IG51bGw+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoQ2FsZW5kYXJDb21wb25lbnQpIGNhbGVuZGFyQ29tcG9uZW50ITogQ2FsZW5kYXJDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZChTdGFydERhdGVEaXJlY3RpdmUpIHN0YXJ0RGF0ZURpcmVjdGl2ZSE6IFN0YXJ0RGF0ZURpcmVjdGl2ZTtcclxuICBAVmlld0NoaWxkKEVuZERhdGVEaXJlY3RpdmUpIGVuZERhdGVEaXJlY3RpdmUhOiBFbmREYXRlRGlyZWN0aXZlO1xyXG5cclxuICBwdWJsaWMgaXNNb2JpbGUgPSB0cnVlO1xyXG4gIHB1YmxpYyBjdXN0b21SYW5nZXMhOiBUQ3VzdG9tUmFuZ2VbXTtcclxuXHJcbiAgc2V0IHN0YXJ0RGF0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc3RhcnREYXRlSW5wdXQuc2V0VmFsdWUodmFsdWUpO1xyXG4gICAgdGhpcy5fc3RhcnREYXRlVmFsdWUgPSB2YWx1ZTtcclxuICB9XHJcbiAgZ2V0IHN0YXJ0RGF0ZVZhbHVlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhcnREYXRlVmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3N0YXJ0RGF0ZVZhbHVlOiBzdHJpbmcgPSB0aGlzLnN0YXJ0RGF0ZT8udG9Mb2NhbGVEYXRlU3RyaW5nKHRoaXMubG9jYWxlKSA/PyAnJztcclxuXHJcbiAgc2V0IGVuZERhdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmVuZERhdGVJbnB1dC5zZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgICB0aGlzLl9lbmREYXRlVmFsdWUgPSB2YWx1ZTtcclxuICB9XHJcbiAgZ2V0IGVuZERhdGVWYWx1ZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VuZERhdGVWYWx1ZTtcclxuICB9XHJcbiAgcHVibGljIF9lbmREYXRlVmFsdWU6IHN0cmluZyA9IHRoaXMuZW5kRGF0ZT8udG9Mb2NhbGVEYXRlU3RyaW5nKHRoaXMubG9jYWxlKSA/PyAnJztcclxuXHJcbiAgcHVibGljIHN0YXJ0RGF0ZVBsYWNlaG9sZGVyOiBzdHJpbmcgPSB0aGlzLnBsYWNlaG9sZGVyWzBdO1xyXG4gIHB1YmxpYyBlbmREYXRlUGxhY2Vob2xkZXI6IHN0cmluZyA9IHRoaXMucGxhY2Vob2xkZXJbMV07XHJcblxyXG4gIHByaXZhdGUgbGF5b3V0Q2hhbmdlcyE6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgLy8gdG9kbzogdmFsaWRhdGlvblxyXG4gIHN0YXJ0RGF0ZUlucHV0ID0gbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IHRoaXMuc3RhcnREYXRlVmFsdWUsIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkIH0sIFtcclxuICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcclxuICAgIC8vIFZhbGlkYXRvcnMubWluTGVuZ3RoKDgpLFxyXG4gICAgLy8gVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTApLFxyXG4gICAgLy8gaW52YWxpZERhdGVTdHJpbmdWYWxpZGF0b3IodGhpcy5sb2NhbGUpXHJcbiAgXSk7XHJcbiAgZW5kRGF0ZUlucHV0ID0gbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IHRoaXMuZW5kRGF0ZVZhbHVlLCBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZCB9LCBbXHJcbiAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXHJcbiAgICAvLyBWYWxpZGF0b3JzLm1pbkxlbmd0aCg4KSxcclxuICAgIC8vIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwKSxcclxuICAgIC8vIGludmFsaWREYXRlU3RyaW5nVmFsaWRhdG9yKHRoaXMubG9jYWxlKVxyXG4gIF0pO1xyXG4gIGRhdGVSYW5nZUdyb3VwITogRm9ybUdyb3VwO1xyXG5cclxuICBzZXQgaW5wdXRTdGFydEhvdmVyVmFsdWUodmFsdWUpIHtcclxuICAgIHRoaXMuX2lucHV0U3RhcnRIb3ZlclZhbHVlID0gdmFsdWU7XHJcbiAgfVxyXG4gIGdldCBpbnB1dFN0YXJ0SG92ZXJWYWx1ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9pbnB1dFN0YXJ0SG92ZXJWYWx1ZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfaW5wdXRTdGFydEhvdmVyVmFsdWUhOiBEYXRlIHwgbnVsbDtcclxuXHJcbiAgc2V0IGlucHV0RW5kSG92ZXJWYWx1ZSh2YWx1ZSkge1xyXG4gICAgdGhpcy5faW5wdXRFbmRIb3ZlclZhbHVlID0gdmFsdWU7XHJcbiAgfVxyXG4gIGdldCBpbnB1dEVuZEhvdmVyVmFsdWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5wdXRFbmRIb3ZlclZhbHVlO1xyXG4gIH1cclxuICBwcml2YXRlIF9pbnB1dEVuZEhvdmVyVmFsdWUhOiBEYXRlIHwgbnVsbDtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmxheW91dENoYW5nZXMgPSB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKFtcclxuICAgICAgQnJlYWtwb2ludHMuSGFuZHNldCxcclxuICAgICAgQnJlYWtwb2ludHMuVGFibGV0XHJcbiAgICBdKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgdGhpcy5pc01vYmlsZSA9IHJlc3VsdC5tYXRjaGVzO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmN1c3RvbVJhbmdlcyA9IHRoaXMucmFuZ2VzID8gT2JqZWN0LmVudHJpZXModGhpcy5yYW5nZXMpIDogW107XHJcblxyXG4gICAgdGhpcy5zdGFydERhdGVWYWx1ZSA9IHRoaXMuc3RhcnREYXRlPy50b0xvY2FsZURhdGVTdHJpbmcodGhpcy5sb2NhbGUpID8/ICcnO1xyXG4gICAgdGhpcy5lbmREYXRlVmFsdWUgPSB0aGlzLmVuZERhdGU/LnRvTG9jYWxlRGF0ZVN0cmluZyh0aGlzLmxvY2FsZSkgPz8gJyc7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMubGF5b3V0Q2hhbmdlcy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q3VzdG9tUmFuZ2VLZXkoY3VzdG9tUmFuZ2U6IGFueSkge1xyXG4gICAgcmV0dXJuIGN1c3RvbVJhbmdlWzBdO1xyXG4gIH1cclxuXHJcbiAgc2V0Q3VzdG9tUmFuZ2UoY3VzdG9tUmFuZ2U6IGFueSkge1xyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRDdXN0b21SYW5nZUtleShjdXN0b21SYW5nZSk7XHJcbiAgICB0aGlzLnN0YXJ0RGF0ZSA9IGN1c3RvbVJhbmdlWzFdWzBdO1xyXG4gICAgdGhpcy5lbmREYXRlID0gY3VzdG9tUmFuZ2VbMV1bMV07XHJcbiAgfVxyXG5cclxuICBoYW5kbGVDYWxlbmRhckNlbGxIb3ZlcigkZXZlbnQ6IERhdGUgfCBudWxsKSB7XHJcbiAgICB0aGlzLmNhbGVuZGFyQ2VsbEhvdmVyLmVtaXQoJGV2ZW50KTtcclxuICAgIGlmICghdGhpcy5zdGFydERhdGUpIHtcclxuICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKHRoaXMuc3RhcnREYXRlRGlyZWN0aXZlPy5lbGVtZW50UmVmLCAkZXZlbnQpO1xyXG4gICAgICB0aGlzLmlucHV0U3RhcnRIb3ZlclZhbHVlID0gJGV2ZW50O1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuZW5kRGF0ZSkge1xyXG4gICAgICB0aGlzLnNldElucHV0VmFsdWUodGhpcy5lbmREYXRlRGlyZWN0aXZlPy5lbGVtZW50UmVmLCAkZXZlbnQpO1xyXG4gICAgICB0aGlzLmlucHV0RW5kSG92ZXJWYWx1ZSA9ICRldmVudDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ2FsZW5kYXJEYXRlQ2hhbmdlKCRldmVudDogRGF0ZSkge1xyXG4gICAgdGhpcy5jYWxlbmRhckRhdGVDaGFuZ2UuZW1pdCgkZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlU3RhcnREYXRlQ2hhbmdlKGRhdGU6IERhdGUgfCBudWxsKSB7XHJcbiAgICAvLyBpZiAoZGF0ZT8uZ2V0VGltZSgpICE9PSB0aGlzLnN0YXJ0RGF0ZT8uZ2V0VGltZSgpKSB7XHJcbiAgICB0aGlzLnN0YXJ0RGF0ZUNoYW5nZS5lbWl0KGRhdGUpO1xyXG4gICAgdGhpcy5zdGFydERhdGVWYWx1ZSA9IGRhdGUgPyBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZyh0aGlzLmxvY2FsZSkgOiAnJztcclxuICAgIHRoaXMuaW5wdXRTdGFydEhvdmVyVmFsdWUgPSBudWxsO1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuc3RhcnREYXRlICYmIHRoaXMuZW5kRGF0ZSA/IFt0aGlzLnN0YXJ0RGF0ZSwgdGhpcy5lbmREYXRlXSA6IFtdO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlRW5kRGF0ZUNoYW5nZShkYXRlOiBEYXRlIHwgbnVsbCkge1xyXG4gICAgLy8gaWYgKGRhdGU/LmdldFRpbWUoKSAhPT0gdGhpcy5lbmREYXRlPy5nZXRUaW1lKCkpIHtcclxuICAgIHRoaXMuZW5kRGF0ZUNoYW5nZS5lbWl0KGRhdGUpO1xyXG4gICAgdGhpcy5lbmREYXRlVmFsdWUgPSBkYXRlID8gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcodGhpcy5sb2NhbGUpIDogJyc7XHJcbiAgICB0aGlzLmlucHV0RW5kSG92ZXJWYWx1ZSA9IG51bGw7XHJcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5zdGFydERhdGUgJiYgdGhpcy5lbmREYXRlID8gW3RoaXMuc3RhcnREYXRlLCB0aGlzLmVuZERhdGVdIDogW107XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVDbGVhcigkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIHRoaXMuY2FsZW5kYXJDb21wb25lbnQ/LmNsZWFyRGF0ZXMoKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVN0YXJ0RGF0ZUlucHV0Q2hhbmdlKCRldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBkYXRlID0gZ2V0TG9jYWxEYXRlRnJvbVN0cmluZygkZXZlbnQudGFyZ2V0Py52YWx1ZSwgdGhpcy5sb2NhbGUsIHRoaXMudGltZXBpY2tlcik7XHJcbiAgICBpZiAoIWRhdGUpIHtcclxuICAgICAgdGhpcy5jYWxlbmRhckNvbXBvbmVudD8uY2xlYXJEYXRlcygpO1xyXG4gICAgfVxyXG4gICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlICYmIGRhdGUuZ2V0VGltZSgpKSB7XHJcbiAgICAgIGlmICghKHRoaXMuZm9yYmlkZGVuRGF0ZShkYXRlKSB8fCAodGhpcy5lbmREYXRlICYmIHRoaXMuZW5kRGF0ZSA8IGRhdGUpKSkge1xyXG4gICAgICAgIHRoaXMuY2FsZW5kYXJEYXRlID0gZGF0ZTtcclxuICAgICAgICB0aGlzLnN0YXJ0RGF0ZSA9IGRhdGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc3RhcnREYXRlVmFsdWUgPSB0aGlzLnN0YXJ0RGF0ZT8udG9Mb2NhbGVEYXRlU3RyaW5nKHRoaXMubG9jYWxlKSA/PyAnJztcclxuICB9XHJcblxyXG4gIGhhbmRsZUVuZERhdGVJbnB1dENoYW5nZSgkZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgZGF0ZSA9IGdldExvY2FsRGF0ZUZyb21TdHJpbmcoJGV2ZW50LnRhcmdldD8udmFsdWUsIHRoaXMubG9jYWxlLCB0aGlzLnRpbWVwaWNrZXIpO1xyXG4gICAgaWYgKCFkYXRlKSB7XHJcbiAgICAgIHRoaXMuZW5kRGF0ZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUgJiYgZGF0ZS5nZXRUaW1lKCkpIHtcclxuICAgICAgaWYgKCEodGhpcy5mb3JiaWRkZW5EYXRlKGRhdGUpIHx8ICh0aGlzLnN0YXJ0RGF0ZSAmJiB0aGlzLnN0YXJ0RGF0ZSA+IGRhdGUpKSkge1xyXG4gICAgICAgIHRoaXMuY2FsZW5kYXJEYXRlID0gZGF0ZTtcclxuICAgICAgICB0aGlzLmVuZERhdGUgPSBkYXRlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmVuZERhdGVWYWx1ZSA9IHRoaXMuZW5kRGF0ZT8udG9Mb2NhbGVEYXRlU3RyaW5nKHRoaXMubG9jYWxlKSA/PyAnJztcclxuICB9XHJcblxyXG4gIGZvcmJpZGRlbkRhdGUoZGF0ZTogRGF0ZSkge1xyXG4gICAgcmV0dXJuIGlzRGF0ZURpc2FibGVkKGRhdGUsIHRoaXMubWluRGF0ZSwgdGhpcy5tYXhEYXRlLCB0aGlzLmRpc2FibGVkRGF0ZXMpICYmICh0aGlzLmRhdGVGaWx0ZXIgPyAhdGhpcy5kYXRlRmlsdGVyKGRhdGUpIDogZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgc2V0SW5wdXRWYWx1ZSA9IChlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBkYXRlOiBEYXRlIHwgbnVsbCkgPT4ge1xyXG4gICAgaWYgKCFlbGVtZW50UmVmKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBkYXRlPy50b0xvY2FsZURhdGVTdHJpbmcodGhpcy5sb2NhbGUpID8/ICcnO1xyXG4gICAgcmV0dXJuO1xyXG4gIH07XHJcblxyXG4gIG9uQ2hhbmdlOiBhbnkgPSAodmFsdWU6IGFueSkgPT4ge1xyXG4gICAgLy8gY29uc29sZS5sb2coJ29uQ2hhbmdlJywgdmFsdWUpO1xyXG4gIH07XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IChEYXRlW10pKTogdm9pZCB7XHJcbiAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8Yy1kcm9wZG93biAjZHJvcGRvd249XCJjRHJvcGRvd25cIiBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiIGNsYXNzPVwiZGF0ZS1waWNrZXIgcGlja2VyXCI+XHJcbiAgPGMtaW5wdXQtZ3JvdXAgW2NhcmV0XT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgPz8gZHJvcGRvd24udmlzaWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgW3NpemluZ109XCJzaXplID8/ICcnXCJcclxuICAgICAgICAgICAgICAgICBjRHJvcGRvd25Ub2dnbGVcclxuICAgICAgICAgICAgICAgICBjbGFzcz1cInBpY2tlci1pbnB1dC1ncm91cFwiXHJcbiAgPlxyXG4gICAgPGlucHV0IChjaGFuZ2UpPVwiaGFuZGxlU3RhcnREYXRlSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInN0YXJ0RGF0ZUlucHV0XCJcclxuICAgICAgICAgICBbbmdDbGFzc109XCJ7aG92ZXI6ICEhaW5wdXRTdGFydEhvdmVyVmFsdWV9XCJcclxuICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic3RhcnREYXRlUGxhY2Vob2xkZXIgPz8gcGxhY2Vob2xkZXJbMF1cIlxyXG4gICAgICAgICAgIGNGb3JtQ29udHJvbFxyXG4gICAgICAgICAgIGNTdGFydERhdGVcclxuICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJkaXNhYmxlZCA/IC0xIDogMFwiXHJcbiAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPyAnJyA6IG51bGxcIlxyXG4gICAgICAgICAgIHBhdHRlcm49XCJbMS05XSpcIlxyXG4gICAgICAgICAgIFtyZWFkb25seV09XCJpbnB1dFJlYWRPbmx5ID8/IG51bGxcIlxyXG4gICAgPlxyXG4gICAgPHNwYW4gKm5nSWY9XCJyYW5nZSAmJiBzZXBhcmF0b3IgIT09IGZhbHNlXCIgY0lucHV0R3JvdXBUZXh0PlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwicGlja2VyLWlucHV0LWdyb3VwLWljb24gZGF0ZS1waWNrZXItYXJyb3ctaWNvblwiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPGlucHV0IChjaGFuZ2UpPVwiaGFuZGxlRW5kRGF0ZUlucHV0Q2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICpuZ0lmPVwicmFuZ2VcIlxyXG4gICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJlbmREYXRlSW5wdXRcIlxyXG4gICAgICAgICAgIFtuZ0NsYXNzXT1cIntob3ZlcjogISFpbnB1dEVuZEhvdmVyVmFsdWV9XCJcclxuICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZW5kRGF0ZVBsYWNlaG9sZGVyID8/IHBsYWNlaG9sZGVyWzFdXCJcclxuICAgICAgICAgICBjRW5kRGF0ZVxyXG4gICAgICAgICAgIGNGb3JtQ29udHJvbFxyXG4gICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImRpc2FibGVkID8gLTEgOiAwXCJcclxuICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/ICcnIDogbnVsbFwiXHJcbiAgICAgICAgICAgcGF0dGVybj1cIlsxLTldKlwiXHJcbiAgICAgICAgICAgW3JlYWRvbmx5XT1cImlucHV0UmVhZE9ubHkgPz8gbnVsbFwiXHJcbiAgICA+XHJcbiAgICA8c3BhbiAqbmdJZj1cImluZGljYXRvciB8fCBjbGVhbmVyXCIgY0lucHV0R3JvdXBUZXh0PlxyXG4gICAgICA8c3BhbiAqbmdJZj1cImluZGljYXRvclwiIGNsYXNzPVwicGlja2VyLWlucHV0LWdyb3VwLWluZGljYXRvclwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwicGlja2VyLWlucHV0LWdyb3VwLWljb24gZGF0ZS1waWNrZXItaW5wdXQtaWNvblwiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8c3BhbiAoY2xpY2spPVwiIWRpc2FibGVkICYmIGhhbmRsZUNsZWFyKCRldmVudClcIiAqbmdJZj1cImNsZWFuZXIgJiYgc3RhcnREYXRlICYmIWRpc2FibGVkXCIgY2xhc3M9XCJwaWNrZXItaW5wdXQtZ3JvdXAtY2xlYW5lclwiXHJcbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInBpY2tlci1pbnB1dC1ncm91cC1pY29uIGRhdGUtcGlja2VyLWNsZWFuZXItaWNvblwiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9zcGFuPlxyXG5cclxuICA8L2MtaW5wdXQtZ3JvdXA+XHJcbiAgPGRpdiBbdmlzaWJsZV09XCJ0cnVlXCIgY0Ryb3Bkb3duTWVudT5cclxuICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1ib2R5XCI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhaXNNb2JpbGVcIj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwicmFuZ2VzXCIgY2xhc3M9XCJkYXRlLXBpY2tlci1yYW5nZXNcIj5cclxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInNldEN1c3RvbVJhbmdlKGN1c3RvbVJhbmdlKVwiXHJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjdXN0b21SYW5nZSBvZiBjdXN0b21SYW5nZXNcIlxyXG4gICAgICAgICAgICAgICAgICBbY29sb3JdPVwicmFuZ2VzQnV0dG9uc0NvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgW3NpemVdPVwicmFuZ2VzQnV0dG9uc1NpemVcIlxyXG4gICAgICAgICAgICAgICAgICBbdmFyaWFudF09XCJyYW5nZXNCdXR0b25zVmFyaWFudFwiXHJcbiAgICAgICAgICAgICAgICAgIGNCdXR0b24+XHJcbiAgICAgICAgICAgIHt7Z2V0Q3VzdG9tUmFuZ2VLZXkoY3VzdG9tUmFuZ2UpfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8Yy1jYWxlbmRhclxyXG4gICAgICAgIChjYWxlbmRhckNlbGxIb3Zlcik9XCJoYW5kbGVDYWxlbmRhckNlbGxIb3ZlcigkZXZlbnQpXCJcclxuICAgICAgICAoY2FsZW5kYXJEYXRlQ2hhbmdlKT1cImhhbmRsZUNhbGVuZGFyRGF0ZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAoZW5kRGF0ZUNoYW5nZSk9XCJoYW5kbGVFbmREYXRlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgIChzdGFydERhdGVDaGFuZ2UpPVwiaGFuZGxlU3RhcnREYXRlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgIFtjYWxlbmRhckRhdGVdPVwiY2FsZW5kYXJEYXRlXCJcclxuICAgICAgICBbY2FsZW5kYXJzXT1cImlzTW9iaWxlID8gMSA6IGNhbGVuZGFyc1wiXHJcbiAgICAgICAgW2RhdGVGaWx0ZXJdPVwiZGF0ZUZpbHRlclwiXHJcbiAgICAgICAgW2Rpc2FibGVkRGF0ZXNdPVwiZGlzYWJsZWREYXRlc1wiXHJcbiAgICAgICAgW2VuZERhdGVdPVwiZW5kRGF0ZVwiXHJcbiAgICAgICAgW2ZpcnN0RGF5T2ZXZWVrXT1cImZpcnN0RGF5T2ZXZWVrXCJcclxuICAgICAgICBbbG9jYWxlXT1cImxvY2FsZVwiXHJcbiAgICAgICAgW21heERhdGVdPVwibWF4RGF0ZVwiXHJcbiAgICAgICAgW21pbkRhdGVdPVwibWluRGF0ZVwiXHJcbiAgICAgICAgW25hdmlnYXRpb25dPVwibmF2aWdhdGlvblwiXHJcbiAgICAgICAgW3JhbmdlXT1cInJhbmdlXCJcclxuICAgICAgICBbc3RhcnREYXRlXT1cInN0YXJ0RGF0ZVwiXHJcbiAgICAgICAgW25hdlllYXJGaXJzdF09XCJuYXZZZWFyRmlyc3RcIlxyXG4gICAgICAgIFtkYXlGb3JtYXRdPVwiZGF5Rm9ybWF0XCJcclxuICAgICAgICBbd2Vla2RheUZvcm1hdF09XCJ3ZWVrZGF5Rm9ybWF0XCJcclxuICAgICAgICBjbGFzcz1cImRhdGUtcGlja2VyLWNhbGVuZGFyc1wiXHJcbiAgICAgID48L2MtY2FsZW5kYXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbjwvYy1kcm9wZG93bj5cclxuIl19