@eui/ecl 17.3.0 → 18.0.0-next.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 (446) hide show
  1. package/assets/i18n-ecl/bg.json +1 -0
  2. package/assets/i18n-ecl/cs.json +1 -1
  3. package/assets/i18n-ecl/da.json +1 -0
  4. package/assets/i18n-ecl/de.json +1 -0
  5. package/assets/i18n-ecl/el.json +1 -0
  6. package/assets/i18n-ecl/en.json +1 -0
  7. package/assets/i18n-ecl/es.json +1 -0
  8. package/assets/i18n-ecl/et.json +1 -0
  9. package/assets/i18n-ecl/fi.json +1 -0
  10. package/assets/i18n-ecl/fr.json +1 -0
  11. package/assets/i18n-ecl/ga.json +1 -0
  12. package/assets/i18n-ecl/hr.json +1 -0
  13. package/assets/i18n-ecl/hu.json +1 -0
  14. package/assets/i18n-ecl/it.json +1 -0
  15. package/assets/i18n-ecl/lt.json +1 -0
  16. package/assets/i18n-ecl/lv.json +1 -0
  17. package/assets/i18n-ecl/mt.json +1 -0
  18. package/assets/i18n-ecl/nl.json +1 -0
  19. package/assets/i18n-ecl/pl.json +1 -0
  20. package/assets/i18n-ecl/pt.json +1 -0
  21. package/assets/i18n-ecl/ro.json +1 -0
  22. package/assets/i18n-ecl/sk.json +1 -0
  23. package/assets/i18n-ecl/sl.json +1 -0
  24. package/assets/i18n-ecl/sv.json +1 -0
  25. package/docs/components/EclAccordionComponent.html +192 -89
  26. package/docs/components/EclAccordionItemComponent.html +117 -94
  27. package/docs/components/EclAppComponent.html +2 -2
  28. package/docs/components/EclBannerComponent.html +148 -46
  29. package/docs/components/EclBlockquoteComponent.html +3 -178
  30. package/docs/components/EclBreadcrumbComponent.html +146 -8
  31. package/docs/components/EclBreadcrumbSegmentComponent.html +58 -23
  32. package/docs/components/EclButtonComponent.html +27 -3
  33. package/docs/components/EclCardBodyComponent.html +2 -2
  34. package/docs/components/EclCardComponent.html +156 -2
  35. package/docs/components/EclCarouselComponent.html +90 -86
  36. package/docs/components/EclCarouselItemComponent.html +38 -3
  37. package/docs/components/EclCategoryFilterComponent.html +27 -2
  38. package/docs/components/EclCategoryFilterItemComponent.html +23 -31
  39. package/docs/components/EclCategoryFilterListComponent.html +61 -2
  40. package/docs/components/EclCheckboxHelpComponent.html +2 -2
  41. package/docs/components/EclCheckboxLabelComponent.html +2 -2
  42. package/docs/components/EclContentBlockComponent.html +2 -2
  43. package/docs/components/EclContentItemComponent.html +140 -16
  44. package/docs/components/EclDateBlockComponent.html +3 -3
  45. package/docs/components/EclDescriptionListDefinitionComponent.html +5 -5
  46. package/docs/components/EclExpandableComponent.html +9 -4
  47. package/docs/components/EclFactFiguresComponent.html +2 -2
  48. package/docs/components/EclFactFiguresDescriptionComponent.html +2 -2
  49. package/docs/components/EclFactFiguresItemComponent.html +2 -2
  50. package/docs/components/EclFactFiguresTitleComponent.html +2 -2
  51. package/docs/components/EclFactFiguresValueComponent.html +2 -2
  52. package/docs/components/EclFactFiguresViewAllComponent.html +2 -2
  53. package/docs/components/EclFeaturedComponent.html +2 -2
  54. package/docs/components/EclFeaturedItemComponent.html +2 -2
  55. package/docs/components/EclFeaturedItemDescriptionComponent.html +2 -2
  56. package/docs/components/EclFileComponent.html +2 -2
  57. package/docs/components/EclFileItemComponent.html +2 -2
  58. package/docs/components/EclFileItemsComponent.html +2 -2
  59. package/docs/components/EclFileTaxonomyComponent.html +2 -2
  60. package/docs/components/EclFormGroupComponent.html +2 -2
  61. package/docs/components/EclFormLabelComponent.html +2 -2
  62. package/docs/components/EclGalleryComponent.html +2 -2
  63. package/docs/components/EclGalleryFooterComponent.html +2 -2
  64. package/docs/components/EclGalleryItemComponent.html +2 -2
  65. package/docs/components/EclIconComponent.html +2 -2
  66. package/docs/components/EclInpageNavigationComponent.html +2 -2
  67. package/docs/components/EclInpageNavigationItemComponent.html +2 -2
  68. package/docs/components/EclListIllustrationComponent.html +2 -2
  69. package/docs/components/EclListIllustrationImageComponent.html +2 -2
  70. package/docs/components/EclListIllustrationItemComponent.html +2 -2
  71. package/docs/components/EclMediaContainerComponent.html +2 -2
  72. package/docs/components/EclMenuComponent.html +3 -3
  73. package/docs/components/EclMenuItemComponent.html +2 -2
  74. package/docs/components/EclMenuMegaComponent.html +2 -2
  75. package/docs/components/EclMenuMegaItemComponent.html +2 -2
  76. package/docs/components/EclMessageComponent.html +2 -2
  77. package/docs/components/EclModalBodyComponent.html +2 -2
  78. package/docs/components/EclModalComponent.html +2 -2
  79. package/docs/components/EclModalFooterComponent.html +2 -2
  80. package/docs/components/EclModalHeaderComponent.html +2 -2
  81. package/docs/components/EclMultiselectComponent.html +2 -2
  82. package/docs/components/EclMultiselectDropdownComponent.html +2 -2
  83. package/docs/components/EclMultiselectInputComponent.html +2 -2
  84. package/docs/components/EclMultiselectOptgroupComponent.html +2 -2
  85. package/docs/components/EclMultiselectOptionComponent.html +2 -2
  86. package/docs/components/EclNavigationListComponent.html +2 -2
  87. package/docs/components/EclNavigationListImageComponent.html +2 -2
  88. package/docs/components/EclNavigationListItemComponent.html +2 -2
  89. package/docs/components/EclNewsTickerComponent.html +2 -2
  90. package/docs/components/EclNewsTickerItemComponent.html +2 -2
  91. package/docs/components/EclPageHeaderComponent.html +2 -2
  92. package/docs/components/EclPageHeaderDescriptionContainerComponent.html +2 -2
  93. package/docs/components/EclPaginationComponent.html +2 -2
  94. package/docs/components/EclPaginationItemComponent.html +2 -2
  95. package/docs/components/EclPopoverComponent.html +2 -2
  96. package/docs/components/EclRadioHelpComponent.html +2 -2
  97. package/docs/components/EclRadioLabelComponent.html +2 -2
  98. package/docs/components/EclRangeValueComponent.html +2 -2
  99. package/docs/components/EclRatingFieldComponent.html +2 -2
  100. package/docs/components/EclSearchFormComponent.html +3 -3
  101. package/docs/components/EclSelectContainerComponent.html +2 -2
  102. package/docs/components/EclSiteFooterComponent.html +2 -2
  103. package/docs/components/EclSiteFooterFixedContentECComponent.html +2 -2
  104. package/docs/components/EclSiteFooterFixedContentEUComponent.html +2 -2
  105. package/docs/components/EclSiteHeaderActionComponent.html +2 -2
  106. package/docs/components/EclSiteHeaderBannerTopComponent.html +2 -2
  107. package/docs/components/EclSiteHeaderComponent.html +2 -2
  108. package/docs/components/EclSiteHeaderEnvironmentComponent.html +2 -2
  109. package/docs/components/EclSiteHeaderLanguageComponent.html +2 -2
  110. package/docs/components/EclSiteHeaderLanguagePopoverComponent.html +2 -2
  111. package/docs/components/EclSiteHeaderLoginComponent.html +2 -2
  112. package/docs/components/EclSiteHeaderMessageComponent.html +2 -2
  113. package/docs/components/EclSiteHeaderSearchComponent.html +2 -2
  114. package/docs/components/EclSocialMediaFollowComponent.html +2 -2
  115. package/docs/components/EclSocialMediaFollowItemComponent.html +2 -2
  116. package/docs/components/EclSocialMediaShareComponent.html +2 -2
  117. package/docs/components/EclSocialMediaShareItemComponent.html +2 -2
  118. package/docs/components/EclSpinnerComponent.html +2 -2
  119. package/docs/components/EclStickyContainerComponent.html +2 -2
  120. package/docs/components/EclTabComponent.html +2 -2
  121. package/docs/components/EclTabLabelComponent.html +2 -2
  122. package/docs/components/EclTabMoreComponent.html +2 -2
  123. package/docs/components/EclTableSortButtonComponent.html +2 -2
  124. package/docs/components/EclTabsComponent.html +2 -2
  125. package/docs/components/EclTagComponent.html +2 -2
  126. package/docs/components/EclTimelineComponent.html +2 -2
  127. package/docs/components/EclTimelineItemComponent.html +2 -2
  128. package/docs/components/EclTimelineItemTogglerComponent.html +2 -2
  129. package/docs/dependencies.html +19 -33
  130. package/docs/directives/ECLBaseDirective.html +4 -78
  131. package/docs/directives/EclBannerImageDirective.html +69 -0
  132. package/docs/directives/EclCardImageDirective.html +86 -0
  133. package/docs/directives/EclContentBlockTitleDirective.html +52 -0
  134. package/docs/directives/EclContentItemImageDirective.html +86 -0
  135. package/docs/directives/EclContentItemPictureDirective.html +1 -1
  136. package/docs/directives/EclDescriptionListDefinitionListDirective.html +492 -0
  137. package/docs/directives/EclDescriptionListDirective.html +1 -1
  138. package/docs/directives/EclUnorderedListDirective.html +5 -5
  139. package/docs/index.html +2 -2
  140. package/docs/js/menu-wc.js +27 -27
  141. package/docs/js/menu-wc_es5.js +1 -1
  142. package/docs/js/search/search_index.js +2 -2
  143. package/docs/miscellaneous/variables.html +2 -1
  144. package/esm2022/lib/components/ecl-accordion/ecl-accordion-item.component.mjs +33 -25
  145. package/esm2022/lib/components/ecl-accordion/ecl-accordion.component.mjs +67 -9
  146. package/esm2022/lib/components/ecl-accordion/ecl-accordion.module.mjs +5 -5
  147. package/esm2022/lib/components/ecl-app/ecl-app.component.mjs +4 -4
  148. package/esm2022/lib/components/ecl-app/ecl-app.module.mjs +5 -5
  149. package/esm2022/lib/components/ecl-banner/ecl-banner-credit.directive.mjs +4 -4
  150. package/esm2022/lib/components/ecl-banner/ecl-banner-description.directive.mjs +7 -7
  151. package/esm2022/lib/components/ecl-banner/ecl-banner-picture.directive.mjs +11 -10
  152. package/esm2022/lib/components/ecl-banner/ecl-banner-title.directive.mjs +7 -7
  153. package/esm2022/lib/components/ecl-banner/ecl-banner.component.mjs +66 -33
  154. package/esm2022/lib/components/ecl-banner/ecl-banner.module.mjs +5 -5
  155. package/esm2022/lib/components/ecl-base.directive.mjs +8 -13
  156. package/esm2022/lib/components/ecl-blockquote/ecl-blockquote-picture.directive.mjs +7 -7
  157. package/esm2022/lib/components/ecl-blockquote/ecl-blockquote.component.mjs +6 -29
  158. package/esm2022/lib/components/ecl-blockquote/ecl-blockquote.module.mjs +5 -5
  159. package/esm2022/lib/components/ecl-breadcrumb/ecl-breadcrumb-segment.component.mjs +18 -23
  160. package/esm2022/lib/components/ecl-breadcrumb/ecl-breadcrumb.component.mjs +87 -36
  161. package/esm2022/lib/components/ecl-breadcrumb/ecl-breadcrumb.module.mjs +7 -6
  162. package/esm2022/lib/components/ecl-button/ecl-button-label.directive.mjs +4 -4
  163. package/esm2022/lib/components/ecl-button/ecl-button.component.mjs +13 -15
  164. package/esm2022/lib/components/ecl-button/ecl-button.module.mjs +5 -5
  165. package/esm2022/lib/components/ecl-card/ecl-card-body.component.mjs +4 -4
  166. package/esm2022/lib/components/ecl-card/ecl-card-picture.directive.mjs +12 -9
  167. package/esm2022/lib/components/ecl-card/ecl-card.component.mjs +38 -10
  168. package/esm2022/lib/components/ecl-card/ecl-card.module.mjs +6 -7
  169. package/esm2022/lib/components/ecl-card/index.mjs +1 -2
  170. package/esm2022/lib/components/ecl-carousel/ecl-carousel-item.component.mjs +16 -17
  171. package/esm2022/lib/components/ecl-carousel/ecl-carousel.component.mjs +112 -42
  172. package/esm2022/lib/components/ecl-carousel/ecl-carousel.module.mjs +5 -5
  173. package/esm2022/lib/components/ecl-category-filter/ecl-category-filter/ecl-category-filter.component.mjs +34 -8
  174. package/esm2022/lib/components/ecl-category-filter/ecl-category-filter-list/ecl-category-filter-item.component.mjs +9 -9
  175. package/esm2022/lib/components/ecl-category-filter/ecl-category-filter-list/ecl-category-filter-list.component.mjs +8 -5
  176. package/esm2022/lib/components/ecl-category-filter/ecl-category-filter.module.mjs +5 -5
  177. package/esm2022/lib/components/ecl-checkbox/ecl-checkbox-help.component.mjs +4 -4
  178. package/esm2022/lib/components/ecl-checkbox/ecl-checkbox-input.directive.mjs +4 -4
  179. package/esm2022/lib/components/ecl-checkbox/ecl-checkbox-label.component.mjs +4 -4
  180. package/esm2022/lib/components/ecl-checkbox/ecl-checkbox.directive.mjs +4 -4
  181. package/esm2022/lib/components/ecl-checkbox/ecl-checkbox.module.mjs +5 -5
  182. package/esm2022/lib/components/ecl-content-block/ecl-content-block-elements.directive.mjs +57 -53
  183. package/esm2022/lib/components/ecl-content-block/ecl-content-block.component.mjs +4 -4
  184. package/esm2022/lib/components/ecl-content-block/ecl-content-block.module.mjs +5 -5
  185. package/esm2022/lib/components/ecl-content-item/ecl-content-item-image.directive.mjs +12 -8
  186. package/esm2022/lib/components/ecl-content-item/ecl-content-item.component.mjs +38 -15
  187. package/esm2022/lib/components/ecl-content-item/ecl-content-item.module.mjs +5 -5
  188. package/esm2022/lib/components/ecl-date-block/ecl-date-block.component.mjs +4 -4
  189. package/esm2022/lib/components/ecl-date-block/ecl-date-block.module.mjs +5 -5
  190. package/esm2022/lib/components/ecl-date-picker/ecl-date-picker.directive.mjs +4 -4
  191. package/esm2022/lib/components/ecl-date-picker/ecl-date-picker.module.mjs +5 -5
  192. package/esm2022/lib/components/ecl-expandable/ecl-expandable.component.mjs +18 -22
  193. package/esm2022/lib/components/ecl-expandable/ecl-expandable.module.mjs +5 -5
  194. package/esm2022/lib/components/ecl-fact-figures/ecl-fact-figures-description.component.mjs +4 -4
  195. package/esm2022/lib/components/ecl-fact-figures/ecl-fact-figures-item.component.mjs +4 -4
  196. package/esm2022/lib/components/ecl-fact-figures/ecl-fact-figures-title.component.mjs +4 -4
  197. package/esm2022/lib/components/ecl-fact-figures/ecl-fact-figures-value.component.mjs +4 -4
  198. package/esm2022/lib/components/ecl-fact-figures/ecl-fact-figures-view-all.component.mjs +4 -4
  199. package/esm2022/lib/components/ecl-fact-figures/ecl-fact-figures.component.mjs +4 -4
  200. package/esm2022/lib/components/ecl-fact-figures/ecl-fact-figures.module.mjs +5 -5
  201. package/esm2022/lib/components/ecl-featured/ecl-featured-item-description.component.mjs +4 -4
  202. package/esm2022/lib/components/ecl-featured/ecl-featured-item-link.directive.mjs +4 -4
  203. package/esm2022/lib/components/ecl-featured/ecl-featured-item.component.mjs +4 -4
  204. package/esm2022/lib/components/ecl-featured/ecl-featured.component.mjs +4 -4
  205. package/esm2022/lib/components/ecl-featured/ecl-featured.module.mjs +5 -5
  206. package/esm2022/lib/components/ecl-feedback-message/ecl-feedback-message.directive.mjs +4 -4
  207. package/esm2022/lib/components/ecl-feedback-message/ecl-feedback-message.module.mjs +5 -5
  208. package/esm2022/lib/components/ecl-file/ecl-file-download.directive.mjs +4 -4
  209. package/esm2022/lib/components/ecl-file/ecl-file-item/ecl-file-item.component.mjs +4 -4
  210. package/esm2022/lib/components/ecl-file/ecl-file-items/ecl-file-items.component.mjs +4 -4
  211. package/esm2022/lib/components/ecl-file/ecl-file-picture.directive.mjs +7 -7
  212. package/esm2022/lib/components/ecl-file/ecl-file-taxonomy/ecl-file-taxonomy.component.mjs +4 -4
  213. package/esm2022/lib/components/ecl-file/ecl-file.component.mjs +4 -4
  214. package/esm2022/lib/components/ecl-file/ecl-file.module.mjs +5 -5
  215. package/esm2022/lib/components/ecl-file-upload/ecl-file-upload.directive.mjs +4 -4
  216. package/esm2022/lib/components/ecl-file-upload/ecl-file-upload.module.mjs +5 -5
  217. package/esm2022/lib/components/ecl-form-group/ecl-form-group.component.mjs +4 -4
  218. package/esm2022/lib/components/ecl-form-group/ecl-form-group.module.mjs +5 -5
  219. package/esm2022/lib/components/ecl-form-label/ecl-form-label.component.mjs +4 -4
  220. package/esm2022/lib/components/ecl-form-label/ecl-form-label.module.mjs +5 -5
  221. package/esm2022/lib/components/ecl-gallery/ecl-gallery-footer.component.mjs +4 -4
  222. package/esm2022/lib/components/ecl-gallery/ecl-gallery-item.component.mjs +4 -4
  223. package/esm2022/lib/components/ecl-gallery/ecl-gallery-media.directive.mjs +7 -7
  224. package/esm2022/lib/components/ecl-gallery/ecl-gallery.component.mjs +4 -4
  225. package/esm2022/lib/components/ecl-gallery/ecl-gallery.module.mjs +5 -5
  226. package/esm2022/lib/components/ecl-help-block/ecl-help-block.directive.mjs +4 -4
  227. package/esm2022/lib/components/ecl-help-block/ecl-help-block.module.mjs +5 -5
  228. package/esm2022/lib/components/ecl-icon/ecl-icon.component.mjs +4 -4
  229. package/esm2022/lib/components/ecl-icon/ecl-icon.module.mjs +5 -5
  230. package/esm2022/lib/components/ecl-inpage-navigation/ecl-inpage-navigation-item.component.mjs +4 -4
  231. package/esm2022/lib/components/ecl-inpage-navigation/ecl-inpage-navigation.component.mjs +4 -4
  232. package/esm2022/lib/components/ecl-inpage-navigation/ecl-inpage-navigation.module.mjs +5 -5
  233. package/esm2022/lib/components/ecl-label/ecl-label.directive.mjs +4 -4
  234. package/esm2022/lib/components/ecl-label/ecl-label.module.mjs +5 -5
  235. package/esm2022/lib/components/ecl-link/ecl-link-label.directive.mjs +4 -4
  236. package/esm2022/lib/components/ecl-link/ecl-link.directive.mjs +4 -4
  237. package/esm2022/lib/components/ecl-link/ecl-link.module.mjs +5 -5
  238. package/esm2022/lib/components/ecl-list/ecl-description-list-definition/ecl-description-list-definition.component.mjs +8 -9
  239. package/esm2022/lib/components/ecl-list/ecl-description-list-definition-item.directive.mjs +21 -4
  240. package/esm2022/lib/components/ecl-list/ecl-list.directive.mjs +31 -44
  241. package/esm2022/lib/components/ecl-list/ecl-list.module.mjs +11 -8
  242. package/esm2022/lib/components/ecl-list-illustration/ecl-list-illustration-icon.directive.mjs +4 -4
  243. package/esm2022/lib/components/ecl-list-illustration/ecl-list-illustration-image/ecl-list-illustration-image.component.mjs +4 -4
  244. package/esm2022/lib/components/ecl-list-illustration/ecl-list-illustration-item.component.mjs +4 -4
  245. package/esm2022/lib/components/ecl-list-illustration/ecl-list-illustration-picture.directive.mjs +7 -7
  246. package/esm2022/lib/components/ecl-list-illustration/ecl-list-illustration.component.mjs +4 -4
  247. package/esm2022/lib/components/ecl-list-illustration/ecl-list-illustration.module.mjs +5 -5
  248. package/esm2022/lib/components/ecl-media-container/ecl-media-container-iframe.directive.mjs +4 -4
  249. package/esm2022/lib/components/ecl-media-container/ecl-media-container-item.directive.mjs +4 -4
  250. package/esm2022/lib/components/ecl-media-container/ecl-media-container-picture.directive.mjs +4 -4
  251. package/esm2022/lib/components/ecl-media-container/ecl-media-container.component.mjs +4 -4
  252. package/esm2022/lib/components/ecl-media-container/ecl-media-container.module.mjs +5 -5
  253. package/esm2022/lib/components/ecl-menu/ecl-menu/ecl-menu-item.component.mjs +4 -4
  254. package/esm2022/lib/components/ecl-menu/ecl-menu/ecl-menu.component.mjs +5 -5
  255. package/esm2022/lib/components/ecl-menu/ecl-menu-mega/ecl-menu-mega-item.component.mjs +4 -4
  256. package/esm2022/lib/components/ecl-menu/ecl-menu-mega/ecl-menu-mega.component.mjs +4 -4
  257. package/esm2022/lib/components/ecl-menu/ecl-menu.module.mjs +5 -5
  258. package/esm2022/lib/components/ecl-message/ecl-message-title.directive.mjs +4 -4
  259. package/esm2022/lib/components/ecl-message/ecl-message.component.mjs +4 -4
  260. package/esm2022/lib/components/ecl-message/ecl-message.module.mjs +5 -5
  261. package/esm2022/lib/components/ecl-modal/ecl-modal-body-fixed.directive.mjs +4 -4
  262. package/esm2022/lib/components/ecl-modal/ecl-modal-body.component.mjs +4 -4
  263. package/esm2022/lib/components/ecl-modal/ecl-modal-close.directive.mjs +4 -4
  264. package/esm2022/lib/components/ecl-modal/ecl-modal-footer.component.mjs +4 -4
  265. package/esm2022/lib/components/ecl-modal/ecl-modal-header.component.mjs +4 -4
  266. package/esm2022/lib/components/ecl-modal/ecl-modal-trigger.directive.mjs +4 -4
  267. package/esm2022/lib/components/ecl-modal/ecl-modal.component.mjs +4 -4
  268. package/esm2022/lib/components/ecl-modal/ecl-modal.module.mjs +5 -5
  269. package/esm2022/lib/components/ecl-multiselect/boldText.pipe.mjs +4 -4
  270. package/esm2022/lib/components/ecl-multiselect/ecl-multiselect-dropdown/ecl-multiselect-dropdown.component.mjs +5 -5
  271. package/esm2022/lib/components/ecl-multiselect/ecl-multiselect-input/ecl-multiselect-input.component.mjs +4 -4
  272. package/esm2022/lib/components/ecl-multiselect/ecl-multiselect-optgroup/ecl-multiselect-optgroup.component.mjs +4 -4
  273. package/esm2022/lib/components/ecl-multiselect/ecl-multiselect-option/ecl-multiselect-option.component.mjs +4 -4
  274. package/esm2022/lib/components/ecl-multiselect/ecl-multiselect-option.directive.mjs +4 -4
  275. package/esm2022/lib/components/ecl-multiselect/ecl-multiselect.component.mjs +4 -4
  276. package/esm2022/lib/components/ecl-multiselect/ecl-multiselect.module.mjs +5 -5
  277. package/esm2022/lib/components/ecl-navigation-list/ecl-navigation-list-image/ecl-navigation-list-image.component.mjs +4 -4
  278. package/esm2022/lib/components/ecl-navigation-list/ecl-navigation-list-item.component.mjs +4 -4
  279. package/esm2022/lib/components/ecl-navigation-list/ecl-navigation-list-picture.directive.mjs +7 -7
  280. package/esm2022/lib/components/ecl-navigation-list/ecl-navigation-list.component.mjs +4 -4
  281. package/esm2022/lib/components/ecl-navigation-list/ecl-navigation-list.module.mjs +5 -5
  282. package/esm2022/lib/components/ecl-news-ticker/ecl-news-ticker-item.component.mjs +4 -4
  283. package/esm2022/lib/components/ecl-news-ticker/ecl-news-ticker.component.mjs +4 -4
  284. package/esm2022/lib/components/ecl-news-ticker/ecl-news-ticker.module.mjs +5 -5
  285. package/esm2022/lib/components/ecl-page-header/ecl-page-header-background.directive.mjs +7 -7
  286. package/esm2022/lib/components/ecl-page-header/ecl-page-header-description/ecl-page-header-description.component.mjs +4 -4
  287. package/esm2022/lib/components/ecl-page-header/ecl-page-header-description.directive.mjs +10 -10
  288. package/esm2022/lib/components/ecl-page-header/ecl-page-header-meta.directive.mjs +7 -7
  289. package/esm2022/lib/components/ecl-page-header/ecl-page-header-title.directive.mjs +4 -4
  290. package/esm2022/lib/components/ecl-page-header/ecl-page-header.component.mjs +4 -4
  291. package/esm2022/lib/components/ecl-page-header/ecl-page-header.module.mjs +5 -5
  292. package/esm2022/lib/components/ecl-pagination/ecl-pagination-item.component.mjs +4 -4
  293. package/esm2022/lib/components/ecl-pagination/ecl-pagination.component.mjs +4 -4
  294. package/esm2022/lib/components/ecl-pagination/ecl-pagination.module.mjs +5 -5
  295. package/esm2022/lib/components/ecl-popover/ecl-popover-content.directive.mjs +4 -4
  296. package/esm2022/lib/components/ecl-popover/ecl-popover-list.directive.mjs +10 -10
  297. package/esm2022/lib/components/ecl-popover/ecl-popover-toggle.directive.mjs +4 -4
  298. package/esm2022/lib/components/ecl-popover/ecl-popover.component.mjs +4 -4
  299. package/esm2022/lib/components/ecl-popover/ecl-popover.module.mjs +5 -5
  300. package/esm2022/lib/components/ecl-radio/ecl-radio-help.component.mjs +4 -4
  301. package/esm2022/lib/components/ecl-radio/ecl-radio-input.directive.mjs +4 -4
  302. package/esm2022/lib/components/ecl-radio/ecl-radio-label.component.mjs +4 -4
  303. package/esm2022/lib/components/ecl-radio/ecl-radio.directive.mjs +4 -4
  304. package/esm2022/lib/components/ecl-radio/ecl-radio.module.mjs +5 -5
  305. package/esm2022/lib/components/ecl-range/ecl-range-value.component.mjs +4 -4
  306. package/esm2022/lib/components/ecl-range/ecl-range.directive.mjs +4 -4
  307. package/esm2022/lib/components/ecl-range/ecl-range.module.mjs +5 -5
  308. package/esm2022/lib/components/ecl-rating-field/ecl-rating-field.component.mjs +4 -4
  309. package/esm2022/lib/components/ecl-rating-field/ecl-rating-field.module.mjs +5 -5
  310. package/esm2022/lib/components/ecl-search-form/ecl-search-form.component.mjs +5 -5
  311. package/esm2022/lib/components/ecl-search-form/ecl-search-form.module.mjs +5 -5
  312. package/esm2022/lib/components/ecl-select/ecl-select-container.component.mjs +4 -4
  313. package/esm2022/lib/components/ecl-select/ecl-select.directive.mjs +4 -4
  314. package/esm2022/lib/components/ecl-select/ecl-select.module.mjs +5 -5
  315. package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/ec/ecl-site-footer-fixed-content.mjs +4 -4
  316. package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/ecl-site-footer-column.directive.mjs +10 -10
  317. package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/ecl-site-footer-description.directive.mjs +4 -4
  318. package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/ecl-site-footer-link.directive.mjs +16 -16
  319. package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/ecl-site-footer-list.directive.mjs +16 -16
  320. package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/ecl-site-footer-section.directive.mjs +4 -4
  321. package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/ecl-site-footer-title.directive.mjs +7 -7
  322. package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/eu/ecl-site-footer-fixed-content.mjs +4 -4
  323. package/esm2022/lib/components/ecl-site-footer/ecl-site-footer.component.mjs +4 -4
  324. package/esm2022/lib/components/ecl-site-footer/ecl-site-footer.module.mjs +5 -5
  325. package/esm2022/lib/components/ecl-site-header/action/ecl-site-header-action.component.mjs +4 -4
  326. package/esm2022/lib/components/ecl-site-header/banner-top/ecl-site-header-banner-top.component.mjs +4 -4
  327. package/esm2022/lib/components/ecl-site-header/cta/ecl-site-header-cta.directive.mjs +4 -4
  328. package/esm2022/lib/components/ecl-site-header/ecl-site-header-environment/ecl-site-header-environment.component.mjs +4 -4
  329. package/esm2022/lib/components/ecl-site-header/ecl-site-header.component.mjs +4 -4
  330. package/esm2022/lib/components/ecl-site-header/ecl-site-header.module.mjs +5 -5
  331. package/esm2022/lib/components/ecl-site-header/language/ecl-site-header-language-popover.component.mjs +4 -4
  332. package/esm2022/lib/components/ecl-site-header/language/ecl-site-header-language.component.mjs +4 -4
  333. package/esm2022/lib/components/ecl-site-header/login/ecl-site-header-login-details.directive.mjs +7 -7
  334. package/esm2022/lib/components/ecl-site-header/login/ecl-site-header-login.component.mjs +4 -4
  335. package/esm2022/lib/components/ecl-site-header/message/ecl-site-header-message.component.mjs +4 -4
  336. package/esm2022/lib/components/ecl-site-header/search/ecl-site-header-search.component.mjs +4 -4
  337. package/esm2022/lib/components/ecl-social-media-follow/ecl-social-media-follow-item.component.mjs +4 -4
  338. package/esm2022/lib/components/ecl-social-media-follow/ecl-social-media-follow-link.directive.mjs +4 -4
  339. package/esm2022/lib/components/ecl-social-media-follow/ecl-social-media-follow.component.mjs +4 -4
  340. package/esm2022/lib/components/ecl-social-media-follow/ecl-social-media-follow.module.mjs +5 -5
  341. package/esm2022/lib/components/ecl-social-media-share/ecl-social-media-share-item.component.mjs +4 -4
  342. package/esm2022/lib/components/ecl-social-media-share/ecl-social-media-share-link.directive.mjs +4 -4
  343. package/esm2022/lib/components/ecl-social-media-share/ecl-social-media-share.component.mjs +4 -4
  344. package/esm2022/lib/components/ecl-social-media-share/ecl-social-media-share.module.mjs +5 -5
  345. package/esm2022/lib/components/ecl-spinner/ecl-spinner-label.directive.mjs +4 -4
  346. package/esm2022/lib/components/ecl-spinner/ecl-spinner.component.mjs +4 -4
  347. package/esm2022/lib/components/ecl-spinner/ecl-spinner.module.mjs +5 -5
  348. package/esm2022/lib/components/ecl-sticky-container/ecl-sticky-container.component.mjs +4 -4
  349. package/esm2022/lib/components/ecl-sticky-container/ecl-sticky-container.module.mjs +5 -5
  350. package/esm2022/lib/components/ecl-table/ecl-table-sort-button.component.mjs +4 -4
  351. package/esm2022/lib/components/ecl-table/ecl-table.directive.mjs +25 -25
  352. package/esm2022/lib/components/ecl-table/ecl-table.module.mjs +5 -5
  353. package/esm2022/lib/components/ecl-tabs/ecl-tab-label.component.mjs +4 -4
  354. package/esm2022/lib/components/ecl-tabs/ecl-tab-more.component.mjs +4 -4
  355. package/esm2022/lib/components/ecl-tabs/ecl-tab.component.mjs +4 -4
  356. package/esm2022/lib/components/ecl-tabs/ecl-tabs.component.mjs +4 -4
  357. package/esm2022/lib/components/ecl-tabs/ecl-tabs.module.mjs +5 -5
  358. package/esm2022/lib/components/ecl-tag/ecl-tag.component.mjs +4 -4
  359. package/esm2022/lib/components/ecl-tag/ecl-tag.module.mjs +5 -5
  360. package/esm2022/lib/components/ecl-text-area/ecl-text-area.directive.mjs +4 -4
  361. package/esm2022/lib/components/ecl-text-area/ecl-text-area.module.mjs +5 -5
  362. package/esm2022/lib/components/ecl-text-input/ecl-text-input.directive.mjs +4 -4
  363. package/esm2022/lib/components/ecl-text-input/ecl-text-input.module.mjs +5 -5
  364. package/esm2022/lib/components/ecl-timeline/ecl-timeline-item-label.directive.mjs +4 -4
  365. package/esm2022/lib/components/ecl-timeline/ecl-timeline-item-title.directive.mjs +4 -4
  366. package/esm2022/lib/components/ecl-timeline/ecl-timeline-item-toggler.component.mjs +4 -4
  367. package/esm2022/lib/components/ecl-timeline/ecl-timeline-item.component.mjs +4 -4
  368. package/esm2022/lib/components/ecl-timeline/ecl-timeline.component.mjs +4 -4
  369. package/esm2022/lib/components/ecl-timeline/ecl-timeline.module.mjs +5 -5
  370. package/esm2022/lib/components/index.mjs +2 -1
  371. package/esm2022/lib/services/ecl-default-language.service.mjs +4 -4
  372. package/esm2022/lib/services/ecl-rtl.service.mjs +4 -4
  373. package/esm2022/lib/services/ecl-theme.service.mjs +4 -4
  374. package/esm2022/lib/shared/ecl-all.module.mjs +5 -5
  375. package/esm2022/lib/utils/directives/ecl-click-outside/ecl-click-outside.directive.mjs +4 -4
  376. package/esm2022/lib/utils/directives/ecl-hidden/ecl-hidden.directive.mjs +4 -4
  377. package/esm2022/lib/utils/directives/ecl-hidden/ecl-hidden.module.mjs +5 -5
  378. package/fesm2022/eui-ecl.mjs +20398 -13600
  379. package/fesm2022/eui-ecl.mjs.map +7 -1
  380. package/lib/components/ecl-accordion/ecl-accordion-item.component.d.ts +12 -5
  381. package/lib/components/ecl-accordion/ecl-accordion-item.component.d.ts.map +1 -1
  382. package/lib/components/ecl-accordion/ecl-accordion.component.d.ts +18 -2
  383. package/lib/components/ecl-accordion/ecl-accordion.component.d.ts.map +1 -1
  384. package/lib/components/ecl-banner/ecl-banner-picture.directive.d.ts +3 -0
  385. package/lib/components/ecl-banner/ecl-banner-picture.directive.d.ts.map +1 -1
  386. package/lib/components/ecl-banner/ecl-banner.component.d.ts +21 -13
  387. package/lib/components/ecl-banner/ecl-banner.component.d.ts.map +1 -1
  388. package/lib/components/ecl-base.directive.d.ts +3 -5
  389. package/lib/components/ecl-base.directive.d.ts.map +1 -1
  390. package/lib/components/ecl-blockquote/ecl-blockquote.component.d.ts +1 -22
  391. package/lib/components/ecl-blockquote/ecl-blockquote.component.d.ts.map +1 -1
  392. package/lib/components/ecl-blockquote/ecl-blockquote.module.d.ts.map +1 -1
  393. package/lib/components/ecl-breadcrumb/ecl-breadcrumb-segment.component.d.ts +5 -2
  394. package/lib/components/ecl-breadcrumb/ecl-breadcrumb-segment.component.d.ts.map +1 -1
  395. package/lib/components/ecl-breadcrumb/ecl-breadcrumb.component.d.ts +22 -6
  396. package/lib/components/ecl-breadcrumb/ecl-breadcrumb.component.d.ts.map +1 -1
  397. package/lib/components/ecl-breadcrumb/ecl-breadcrumb.module.d.ts +4 -3
  398. package/lib/components/ecl-breadcrumb/ecl-breadcrumb.module.d.ts.map +1 -1
  399. package/lib/components/ecl-button/ecl-button.component.d.ts +5 -3
  400. package/lib/components/ecl-button/ecl-button.component.d.ts.map +1 -1
  401. package/lib/components/ecl-card/ecl-card-picture.directive.d.ts +3 -0
  402. package/lib/components/ecl-card/ecl-card-picture.directive.d.ts.map +1 -1
  403. package/lib/components/ecl-card/ecl-card.component.d.ts +12 -2
  404. package/lib/components/ecl-card/ecl-card.component.d.ts.map +1 -1
  405. package/lib/components/ecl-card/ecl-card.module.d.ts +6 -7
  406. package/lib/components/ecl-card/ecl-card.module.d.ts.map +1 -1
  407. package/lib/components/ecl-card/index.d.ts +0 -1
  408. package/lib/components/ecl-card/index.d.ts.map +1 -1
  409. package/lib/components/ecl-carousel/ecl-carousel-item.component.d.ts +6 -3
  410. package/lib/components/ecl-carousel/ecl-carousel-item.component.d.ts.map +1 -1
  411. package/lib/components/ecl-carousel/ecl-carousel.component.d.ts +21 -11
  412. package/lib/components/ecl-carousel/ecl-carousel.component.d.ts.map +1 -1
  413. package/lib/components/ecl-category-filter/ecl-category-filter/ecl-category-filter.component.d.ts +6 -3
  414. package/lib/components/ecl-category-filter/ecl-category-filter/ecl-category-filter.component.d.ts.map +1 -1
  415. package/lib/components/ecl-category-filter/ecl-category-filter-list/ecl-category-filter-item.component.d.ts +2 -2
  416. package/lib/components/ecl-category-filter/ecl-category-filter-list/ecl-category-filter-item.component.d.ts.map +1 -1
  417. package/lib/components/ecl-category-filter/ecl-category-filter-list/ecl-category-filter-list.component.d.ts +1 -0
  418. package/lib/components/ecl-category-filter/ecl-category-filter-list/ecl-category-filter-list.component.d.ts.map +1 -1
  419. package/lib/components/ecl-content-block/ecl-content-block-elements.directive.d.ts +3 -1
  420. package/lib/components/ecl-content-block/ecl-content-block-elements.directive.d.ts.map +1 -1
  421. package/lib/components/ecl-content-item/ecl-content-item-image.directive.d.ts +4 -1
  422. package/lib/components/ecl-content-item/ecl-content-item-image.directive.d.ts.map +1 -1
  423. package/lib/components/ecl-content-item/ecl-content-item.component.d.ts +11 -4
  424. package/lib/components/ecl-content-item/ecl-content-item.component.d.ts.map +1 -1
  425. package/lib/components/ecl-date-block/ecl-date-block.component.d.ts +1 -1
  426. package/lib/components/ecl-date-block/ecl-date-block.component.d.ts.map +1 -1
  427. package/lib/components/ecl-expandable/ecl-expandable.component.d.ts +4 -3
  428. package/lib/components/ecl-expandable/ecl-expandable.component.d.ts.map +1 -1
  429. package/lib/components/ecl-file/ecl-file-item/ecl-file-item.component.d.ts.map +1 -1
  430. package/lib/components/ecl-file/ecl-file.component.d.ts.map +1 -1
  431. package/lib/components/ecl-list/ecl-description-list-definition/ecl-description-list-definition.component.d.ts +1 -1
  432. package/lib/components/ecl-list/ecl-description-list-definition/ecl-description-list-definition.component.d.ts.map +1 -1
  433. package/lib/components/ecl-list/ecl-description-list-definition-item.directive.d.ts +5 -0
  434. package/lib/components/ecl-list/ecl-description-list-definition-item.directive.d.ts.map +1 -1
  435. package/lib/components/ecl-list/ecl-list.directive.d.ts +8 -4
  436. package/lib/components/ecl-list/ecl-list.directive.d.ts.map +1 -1
  437. package/lib/components/ecl-list/ecl-list.module.d.ts +1 -1
  438. package/lib/components/ecl-list/ecl-list.module.d.ts.map +1 -1
  439. package/lib/components/ecl-modal/ecl-modal-body.component.d.ts.map +1 -1
  440. package/lib/components/index.d.ts +1 -0
  441. package/lib/components/index.d.ts.map +1 -1
  442. package/package.json +3 -3
  443. package/docs/components/EclCardImageComponent.html +0 -567
  444. package/esm2022/lib/components/ecl-card/ecl-card-image/ecl-card-image.component.mjs +0 -30
  445. package/lib/components/ecl-card/ecl-card-image/ecl-card-image.component.d.ts +0 -14
  446. package/lib/components/ecl-card/ecl-card-image/ecl-card-image.component.d.ts.map +0 -1
@@ -1,6 +1,4 @@
1
- import { __decorate } from "tslib";
2
- import { Component, ContentChildren, EventEmitter, HostBinding, Input, Output, ViewChild, ViewChildren, forwardRef, } from '@angular/core';
3
- import { coerceBoolean, coerceElement, coerceNumber } from '@eui/base';
1
+ import { Component, ContentChildren, EventEmitter, HostBinding, Input, Output, ViewChild, ViewChildren, booleanAttribute, forwardRef, numberAttribute, } from '@angular/core';
4
2
  import { Subject, interval, switchMap, takeUntil } from 'rxjs';
5
3
  import { KeyCode } from '../../utils';
6
4
  import { ECLBaseDirective } from '../ecl-base.directive';
@@ -9,10 +7,9 @@ import { EclSlideEvent } from './ecl-carousel.event';
9
7
  import * as i0 from "@angular/core";
10
8
  import * as i1 from "@angular/cdk/layout";
11
9
  import * as i2 from "../../services/ecl-rtl.service";
12
- import * as i3 from "@angular/common";
13
- import * as i4 from "../ecl-icon/ecl-icon.component";
14
- import * as i5 from "./ecl-carousel-item.component";
15
- import * as i6 from "@ngx-translate/core";
10
+ import * as i3 from "../ecl-icon/ecl-icon.component";
11
+ import * as i4 from "./ecl-carousel-item.component";
12
+ import * as i5 from "@ngx-translate/core";
16
13
  export class EclCarouselComponent extends ECLBaseDirective {
17
14
  constructor(cdkBreakpointObserver, cd, renderer2, eclRtlService) {
18
15
  super();
@@ -20,19 +17,20 @@ export class EclCarouselComponent extends ECLBaseDirective {
20
17
  this.cd = cd;
21
18
  this.renderer2 = renderer2;
22
19
  this.eclRtlService = eclRtlService;
23
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
+ this.ariaLabel = 'Carousel description here';
21
+ this.ariaRoleDescription = 'carousel';
24
22
  this.isAutoplay = true;
25
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
26
23
  this.playInterval = 5000;
27
24
  this.slide = new EventEmitter();
25
+ this.isButtonNavVisible = false;
28
26
  this.isPlaying = false;
29
27
  this.isPausedForced = false;
30
28
  this.isRtl = false;
29
+ this.transitionDuration = 0.4;
31
30
  this.isTabletBreakpoint = false;
32
31
  this.isDesktopBreakpoint = false;
33
32
  this.isLargeDesktopBreakpoint = false;
34
33
  this.isMobileBreakpoint = false;
35
- this.transitionDuration = 0.4;
36
34
  this.playSubject = new Subject();
37
35
  this.stopSubject = new Subject();
38
36
  this.destroy$ = new Subject();
@@ -46,12 +44,15 @@ export class EclCarouselComponent extends ECLBaseDirective {
46
44
  this.handleRtlChangeState();
47
45
  }
48
46
  ngAfterContentInit() {
49
- this.observeBreakpointChanges();
50
- setTimeout(() => this.initializeSlider());
47
+ setTimeout(() => {
48
+ this.initializeSlider();
49
+ this.isButtonDisplay();
50
+ });
51
51
  }
52
52
  ngAfterViewInit() {
53
53
  this.observeElementSizeChanges();
54
54
  this.cd.detectChanges();
55
+ setTimeout(() => this.observeBreakpointChanges(), 200);
55
56
  }
56
57
  ngOnDestroy() {
57
58
  this.destroy$.next(true);
@@ -118,7 +119,7 @@ export class EclCarouselComponent extends ECLBaseDirective {
118
119
  return button.nativeElement.style.display === '';
119
120
  }
120
121
  showButton(button) {
121
- button.nativeElement.style.display = '';
122
+ this.renderer2.setStyle(button.nativeElement, 'display', '');
122
123
  }
123
124
  focusOnButton(button) {
124
125
  if (!button) {
@@ -171,13 +172,13 @@ export class EclCarouselComponent extends ECLBaseDirective {
171
172
  return currentIndex - 1;
172
173
  }
173
174
  getCarouselSlidesWidth() {
174
- return this.carouselContainerElement?.offsetWidth * this.getAllSlidesCount();
175
+ return this.carouselContainerElement?.nativeElement.offsetWidth * this.getAllSlidesCount();
175
176
  }
176
177
  getCarouselSlidesOffsetLeft() {
177
- return -1 * this.carouselContainerElement?.offsetWidth * this.getCurrentItemIndex();
178
+ return -1 * this.carouselContainerElement?.nativeElement.offsetWidth * this.getCurrentItemIndex();
178
179
  }
179
180
  getCarouselSlidesOffsetRight() {
180
- return -1 * this.carouselContainerElement?.offsetWidth * this.getCurrentItemIndex();
181
+ return -1 * this.carouselContainerElement?.nativeElement.offsetWidth * this.getCurrentItemIndex();
181
182
  }
182
183
  handleRtlChangeState() {
183
184
  this.eclRtlService.currentRtlState$.pipe(takeUntil(this.destroy$)).subscribe((rtlState) => {
@@ -222,7 +223,7 @@ export class EclCarouselComponent extends ECLBaseDirective {
222
223
  this.lastHiddenItem.el.nativeElement.innerHTML = this.getFirstContentChild();
223
224
  this.lastHiddenItem.isCurrent = false;
224
225
  this.slideWidth = this.slides.first.width;
225
- this.unsubscribeListener = this.renderer2.listen(this.slidesContainer, 'transitionend', () => this.checkIndex());
226
+ this.unsubscribeListener = this.renderer2.listen(this.slidesContainer.nativeElement, 'transitionend', () => this.checkIndex());
226
227
  }
227
228
  checkIndex() {
228
229
  if (this.getCurrentItemIndex() === this.getAllSlidesCount() - 1) {
@@ -408,55 +409,121 @@ export class EclCarouselComponent extends ECLBaseDirective {
408
409
  observeBreakpointChanges() {
409
410
  this.cdkBreakpointObserver
410
411
  .observe([
411
- '(min-width: 768px)',
412
+ '(max-width: 768px)',
413
+ '(max-width: 997px)',
414
+ '(min-width: 998px)',
412
415
  '(min-width: 1140px) and (max-width: 1260px)',
413
416
  '(min-width: 1140px)',
414
417
  ])
415
418
  .pipe(takeUntil(this.destroy$))
416
419
  .subscribe((result) => {
417
- this.isTabletBreakpoint = result.breakpoints['(min-width: 768px)'];
420
+ this.isMobileBreakpoint = result.breakpoints['(max-width: 768px)'];
421
+ this.isTabletBreakpoint = result.breakpoints['(min-width: 998px)'];
418
422
  this.isDesktopBreakpoint = result.breakpoints['(min-width: 1140px) and (max-width: 1260px)'];
419
423
  this.isLargeDesktopBreakpoint = result.breakpoints['(min-width: 1140px)'];
420
- if (!this.isTabletBreakpoint) {
424
+ if (result.breakpoints['(max-width: 997px)']) {
425
+ setTimeout(() => this.resetHeight(), 200);
426
+ }
427
+ if (this.isMobileBreakpoint) {
421
428
  this.stopPlaying();
422
429
  }
430
+ if (this.isTabletBreakpoint) {
431
+ setTimeout(() => this.checkBannerHeights(), 200);
432
+ }
433
+ if (this.isLargeDesktopBreakpoint) {
434
+ this.isButtonDisplay();
435
+ }
423
436
  });
424
437
  }
425
438
  observeElementSizeChanges() {
426
439
  new ResizeObserver(() => {
427
440
  this.cd.detectChanges();
428
- }).observe(this.carouselContainerElement);
441
+ }).observe(this.carouselContainerElement.nativeElement);
429
442
  }
430
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: EclCarouselComponent, deps: [{ token: i1.BreakpointObserver }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i2.EclRtlService }], target: i0.ɵɵFactoryTarget.Component }); }
431
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.0", type: EclCarouselComponent, selector: "ecl-carousel", inputs: { isAutoplay: "isAutoplay", playInterval: "playInterval" }, outputs: { slide: "slide" }, host: { properties: { "class": "this.cssClasses" } }, queries: [{ propertyName: "slides", predicate: i0.forwardRef(() => EclCarouselItemComponent) }], viewQueries: [{ propertyName: "carouselContainerElement", first: true, predicate: ["carouselContainer"], descendants: true }, { propertyName: "playButton", first: true, predicate: ["playButton"], descendants: true }, { propertyName: "pauseButton", first: true, predicate: ["pauseButton"], descendants: true }, { propertyName: "prevButton", first: true, predicate: ["prevButton"], descendants: true }, { propertyName: "firstHiddenItem", first: true, predicate: ["firstHiddenItem"], descendants: true }, { propertyName: "lastHiddenItem", first: true, predicate: ["lastHiddenItem"], descendants: true }, { propertyName: "slidesContainer", first: true, predicate: ["slidesContainer"], descendants: true }, { propertyName: "navigationButtons", predicate: ["currButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #carouselContainer class=\"ecl-carousel__container\" [class.ecl-carousel-container--padded]=\"isPadded()\">\n <div #slidesContainer\n (keyup)=\"onFirstCarouselElementPress($event)\"\n class=\"ecl-carousel__slides\"\n [style.width.px]=\"getCarouselSlidesWidth()\"\n [style.left.px]=\"!isRtl ? getCarouselSlidesOffsetLeft() : null\"\n [style.right.px]=\"isRtl ? getCarouselSlidesOffsetRight() : null\"\n [style.transition-duration.s]=\"transitionDuration\"\n (mouseover)=\"onSlideHover()\"\n (mouseout)=\"onSlideHoverout()\">\n <ecl-carousel-item #firstHiddenItem *ngIf=\"hasControls()\" [style.width.%]=\"slideWidth\"></ecl-carousel-item>\n <ng-content></ng-content>\n <ecl-carousel-item #lastHiddenItem *ngIf=\"hasControls()\" [style.width.%]=\"slideWidth\"></ecl-carousel-item>\n </div>\n\n <button *ngIf=\"hasControls() && isLargeDesktopBreakpoint\" class=\"ecl-carousel__prev\" (click)=\"onPreviousSlideClick()\">\n <ecl-icon icon=\"corner-arrow\" size=\"m\" transform=\"rotate-270\" isInverted class=\"ecl-carousel__icon-default\"> </ecl-icon>\n <span class=\"ecl-u-sr-only\">{{ 'ecl.carousel.PREV-SLIDES' | translate }}</span>\n </button>\n\n <button *ngIf=\"hasControls() && isLargeDesktopBreakpoint\" class=\"ecl-carousel__next\" (click)=\"onNextSlideClick()\">\n <ecl-icon icon=\"corner-arrow\" size=\"m\" transform=\"rotate-90\" isInverted class=\"ecl-carousel__icon-default\"> </ecl-icon>\n <div class=\"ecl-u-sr-only\">{{ 'ecl.carousel.NEXT-SLIDES' | translate }}</div>\n </button>\n</div>\n\n<div *ngIf=\"hasControls()\" class=\"ecl-carousel__controls\">\n <div class=\"ecl-container\">\n <div class=\"ecl-carousel__autoplay\">\n <button\n #playButton\n class=\"ecl-carousel__play\"\n [style.display]=\"isPlaying ? 'none' : ''\"\n (keydown)=\"onPlayKeyboardPress($event)\"\n (click)=\"onPlayClick()\">\n <ecl-icon icon=\"play\" size=\"l\" class=\"ecl-carousel__icon-default\" isInverted> </ecl-icon>\n <ecl-icon icon=\"play-filled\" size=\"l\" class=\"ecl-carousel__icon-active\" isInverted> </ecl-icon>\n <div class=\"ecl-u-sr-only\">{{ 'ecl.carousel.AUTOPLAY' | translate }}</div>\n </button>\n <button\n #pauseButton\n class=\"ecl-carousel__pause\"\n [style.display]=\"isPlaying ? '' : 'none'\"\n (keydown)=\"onPlayKeyboardPress($event)\"\n (click)=\"onPauseClick()\">\n <ecl-icon icon=\"pause\" size=\"l\" class=\"ecl-carousel__icon-default\" isInverted> </ecl-icon>\n <ecl-icon icon=\"pause-filled\" size=\"l\" class=\"ecl-carousel__icon-active\" isInverted> </ecl-icon>\n <div class=\"ecl-u-sr-only\">{{ 'ecl.carousel.PAUSE' | translate }}</div>\n </button>\n </div>\n\n <div class=\"ecl-carousel__navigation\">\n <button\n *ngFor=\"let slide of slides; let i = index\"\n #currButton\n [attr.aria-current]=\"i === getCurrentSlideIndex()\"\n class=\"ecl-carousel__navigation-item\"\n (click)=\"onSlideControlClick(slide)\"\n (keydown)=\"onNavBtnKeyboardPress($event, i)\">\n <span class=\"ecl-u-sr-only\">{{ 'ecl.carousel.GO-TO-SLIDE' | translate }} {{ i + 1 }}</span>\n </button>\n </div>\n\n <button *ngIf=\"!isLargeDesktopBreakpoint\" #prevButton class=\"ecl-carousel__prev\" (click)=\"onPreviousSlideClick()\">\n <ecl-icon icon=\"corner-arrow\" size=\"m\" transform=\"rotate-270\" isInverted class=\"ecl-carousel__icon-default\"> </ecl-icon>\n <span class=\"ecl-u-sr-only\">{{ 'ecl.carousel.PREV-SLIDES' | translate }}</span>\n </button>\n\n <div class=\"ecl-carousel__pagination\">\n <span class=\"ecl-carousel__current\">{{ getCurrentSlideIndex() + 1 }}</span>\n {{ 'ecl.common.OF' | translate }}\n <span class=\"ecl-carousel__max\">{{ slides.length }}</span>\n </div>\n\n <button *ngIf=\"!isLargeDesktopBreakpoint\" class=\"ecl-carousel__next\" (click)=\"onNextSlideClick()\">\n <ecl-icon icon=\"corner-arrow\" size=\"m\" transform=\"rotate-90\" isInverted class=\"ecl-carousel__icon-default\"> </ecl-icon>\n <div class=\"ecl-u-sr-only\">{{ 'ecl.carousel.NEXT-SLIDES' | translate }}</div>\n </button>\n </div>\n</div>\n", styles: [":host{display:block}.ecl-carousel__container{width:100%}.ecl-carousel__slides{transition-duration:.4s}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.EclIconComponent, selector: "ecl-icon", inputs: ["iconSet", "icon", "size", "color", "transform", "ariaLabelledby", "role", "isInverted", "ariaHidden", "focusable"] }, { kind: "component", type: i5.EclCarouselItemComponent, selector: "ecl-carousel-item", inputs: ["id", "isCurrent"], outputs: ["slideClick"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] }); }
443
+ isButtonDisplay() {
444
+ this.isButtonNavVisible = true;
445
+ if (this.getSlidesCount() <= 1) {
446
+ this.isButtonNavVisible = false;
447
+ }
448
+ }
449
+ checkBannerHeights() {
450
+ const heightValues = this.slides.map((slide) => {
451
+ const height = slide.banner?.el.nativeElement.offsetHeight;
452
+ console.log('height', height);
453
+ if (height === 'auto') {
454
+ return 0;
455
+ }
456
+ if (Number.isNaN(height) || height === 100) {
457
+ return 1;
458
+ }
459
+ return height;
460
+ });
461
+ const elementHeights = heightValues.filter((height) => height !== undefined);
462
+ const tallestElementHeight = Math.max(...elementHeights);
463
+ if (tallestElementHeight > 0) {
464
+ this.slides.forEach((slide) => {
465
+ const banner = slide.banner;
466
+ if (banner) {
467
+ const bannerImage = banner.eclBannerImage;
468
+ this.renderer2.setStyle(banner.el.nativeElement, 'height', `${tallestElementHeight}px`);
469
+ if (bannerImage) {
470
+ this.renderer2.setStyle(bannerImage.el.nativeElement, 'aspectRatio', 'auto');
471
+ }
472
+ }
473
+ });
474
+ this.resetHiddenItems();
475
+ }
476
+ }
477
+ resetHeight() {
478
+ this.getAllSlidesArray().forEach((slide) => {
479
+ const banner = slide.banner;
480
+ if (banner) {
481
+ const bannerImage = slide.banner.eclBannerImage;
482
+ this.renderer2.setStyle(banner.el.nativeElement, 'height', '');
483
+ if (bannerImage) {
484
+ this.renderer2.setStyle(bannerImage.el.nativeElement, 'aspectRatio', '');
485
+ }
486
+ }
487
+ });
488
+ this.resetHiddenItems();
489
+ }
490
+ resetHiddenItems() {
491
+ if (this.hasControls()) {
492
+ this.firstHiddenItem.el.nativeElement.innerHTML = this.getLastContentChild();
493
+ this.lastHiddenItem.el.nativeElement.innerHTML = this.getFirstContentChild();
494
+ }
495
+ }
496
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.1", ngImport: i0, type: EclCarouselComponent, deps: [{ token: i1.BreakpointObserver }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i2.EclRtlService }], target: i0.ɵɵFactoryTarget.Component }); }
497
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0-next.1", type: EclCarouselComponent, selector: "ecl-carousel", inputs: { ariaLabel: ["aria-label", "ariaLabel"], ariaRoleDescription: "ariaRoleDescription", isAutoplay: ["isAutoplay", "isAutoplay", booleanAttribute], playInterval: ["playInterval", "playInterval", numberAttribute] }, outputs: { slide: "slide" }, host: { properties: { "attr.aria-label": "this.ariaLabel", "attr.aria-roledescription": "this.ariaRoleDescription", "class": "this.cssClasses" } }, queries: [{ propertyName: "slides", predicate: i0.forwardRef(() => EclCarouselItemComponent) }], viewQueries: [{ propertyName: "carouselContainerElement", first: true, predicate: ["carouselContainer"], descendants: true }, { propertyName: "playButton", first: true, predicate: ["playButton"], descendants: true }, { propertyName: "pauseButton", first: true, predicate: ["pauseButton"], descendants: true }, { propertyName: "prevButton", first: true, predicate: ["prevButton"], descendants: true }, { propertyName: "nextButton", first: true, predicate: ["nextButton"], descendants: true }, { propertyName: "firstHiddenItem", first: true, predicate: ["firstHiddenItem"], descendants: true }, { propertyName: "lastHiddenItem", first: true, predicate: ["lastHiddenItem"], descendants: true }, { propertyName: "slidesContainer", first: true, predicate: ["slidesContainer"], descendants: true }, { propertyName: "navigationButtons", predicate: ["currButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #carouselContainer class=\"ecl-carousel__container\" [class.ecl-carousel-container--padded]=\"isPadded()\">\n <div #slidesContainer (keyup)=\"onFirstCarouselElementPress($event)\" class=\"ecl-carousel__slides\"\n [style.width.px]=\"getCarouselSlidesWidth()\" [style.left.px]=\"!isRtl ? getCarouselSlidesOffsetLeft() : null\"\n [style.right.px]=\"isRtl ? getCarouselSlidesOffsetRight() : null\"\n [style.transition-duration.s]=\"transitionDuration\" (mouseover)=\"onSlideHover()\" (mouseout)=\"onSlideHoverout()\">\n\n @if(hasControls()){\n <ecl-carousel-item #firstHiddenItem [style.width.%]=\"slideWidth\"></ecl-carousel-item>\n }\n <ng-content></ng-content>\n\n @if(hasControls()){\n <ecl-carousel-item #lastHiddenItem [style.width.%]=\"slideWidth\"></ecl-carousel-item>\n }\n\n </div>\n</div>\n@if(isButtonNavVisible) {\n<button #prevButton class=\"ecl-button ecl-button--ghost ecl-carousel__prev ecl-button--icon-only\" type=\"button\"\n (click)=\"onPreviousSlideClick()\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.carousel.NEXT-SLIDES' | translate }}\n </span>\n <ecl-icon icon=\"corner-arrow\" size=\"m\" transform=\"rotate-270\" class=\"ecl-button__icon\"> </ecl-icon>\n </span>\n</button>\n}\n\n@if(hasControls()){\n<div class=\"ecl-carousel__controls\">\n <div class=\"ecl-container\">\n <div class=\"ecl-carousel__autoplay\">\n <button #playButton class=\"ecl-button ecl-button--ghost ecl-carousel__play ecl-button--icon-only\"\n type=\"button\" [style.display]=\"isPlaying ? 'none' : 'flex'\" (keydown)=\"onPlayKeyboardPress($event)\"\n (click)=\"onPlayClick()\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.carousel.PLAY' | translate }}\n </span>\n <ecl-icon icon=\"play-outline\" size=\"m\" class=\"ecl-button__icon ecl-carousel__icon-default\">\n </ecl-icon>\n </span>\n\n </button>\n\n <button #pauseButton class=\"ecl-button ecl-button--ghost ecl-carousel__pause ecl-button--icon-only\"\n type=\"button\" [style.display]=\"isPlaying ? 'flex' : 'none'\" (keydown)=\"onPlayKeyboardPress($event)\"\n (click)=\"onPauseClick()\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.carousel.PAUSE' | translate }}\n </span>\n <ecl-icon icon=\"pause\" size=\"m\" class=\"ecl-button__icon ecl-carousel__icon-default\"> </ecl-icon>\n </span>\n\n </button>\n </div>\n\n <div class=\"ecl-carousel__navigation\">\n @for (slide of slides; let i = $index; track slide) {\n <button #currButton [attr.aria-current]=\"i === getCurrentSlideIndex()\"\n class=\"ecl-button ecl-button--ghost ecl-carousel__navigation-item\" (click)=\"onSlideControlClick(slide)\"\n (keydown)=\"onNavBtnKeyboardPress($event, i)\">\n {{ i + 1 }}\n </button>\n }\n </div>\n </div>\n</div>\n}\n@if(isButtonNavVisible) {\n<button #nextButton class=\"ecl-button ecl-button--ghost ecl-carousel__next ecl-button--icon-only\" type=\"button\"\n (click)=\"onNextSlideClick()\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.carousel.NEXT-SLIDES' | translate }}\n </span>\n <ecl-icon icon=\"corner-arrow\" size=\"m\" transform=\"rotate-90\" class=\"ecl-button__icon\"> </ecl-icon>\n </span>\n\n</button>\n}", styles: [":host{display:block}.ecl-carousel__container{width:100%}.ecl-carousel__slides{transition-duration:.4s}\n"], dependencies: [{ kind: "component", type: i3.EclIconComponent, selector: "ecl-icon", inputs: ["iconSet", "icon", "size", "color", "transform", "ariaLabelledby", "role", "isInverted", "ariaHidden", "focusable"] }, { kind: "component", type: i4.EclCarouselItemComponent, selector: "ecl-carousel-item", inputs: ["id", "isCurrent"], outputs: ["slideClick"] }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }] }); }
432
498
  }
433
- __decorate([
434
- coerceBoolean
435
- ], EclCarouselComponent.prototype, "isAutoplay", void 0);
436
- __decorate([
437
- coerceNumber
438
- ], EclCarouselComponent.prototype, "playInterval", void 0);
439
- __decorate([
440
- coerceElement
441
- ], EclCarouselComponent.prototype, "carouselContainerElement", void 0);
442
- __decorate([
443
- coerceElement
444
- ], EclCarouselComponent.prototype, "slidesContainer", void 0);
445
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: EclCarouselComponent, decorators: [{
499
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.1", ngImport: i0, type: EclCarouselComponent, decorators: [{
446
500
  type: Component,
447
- args: [{ selector: 'ecl-carousel', template: "<div #carouselContainer class=\"ecl-carousel__container\" [class.ecl-carousel-container--padded]=\"isPadded()\">\n <div #slidesContainer\n (keyup)=\"onFirstCarouselElementPress($event)\"\n class=\"ecl-carousel__slides\"\n [style.width.px]=\"getCarouselSlidesWidth()\"\n [style.left.px]=\"!isRtl ? getCarouselSlidesOffsetLeft() : null\"\n [style.right.px]=\"isRtl ? getCarouselSlidesOffsetRight() : null\"\n [style.transition-duration.s]=\"transitionDuration\"\n (mouseover)=\"onSlideHover()\"\n (mouseout)=\"onSlideHoverout()\">\n <ecl-carousel-item #firstHiddenItem *ngIf=\"hasControls()\" [style.width.%]=\"slideWidth\"></ecl-carousel-item>\n <ng-content></ng-content>\n <ecl-carousel-item #lastHiddenItem *ngIf=\"hasControls()\" [style.width.%]=\"slideWidth\"></ecl-carousel-item>\n </div>\n\n <button *ngIf=\"hasControls() && isLargeDesktopBreakpoint\" class=\"ecl-carousel__prev\" (click)=\"onPreviousSlideClick()\">\n <ecl-icon icon=\"corner-arrow\" size=\"m\" transform=\"rotate-270\" isInverted class=\"ecl-carousel__icon-default\"> </ecl-icon>\n <span class=\"ecl-u-sr-only\">{{ 'ecl.carousel.PREV-SLIDES' | translate }}</span>\n </button>\n\n <button *ngIf=\"hasControls() && isLargeDesktopBreakpoint\" class=\"ecl-carousel__next\" (click)=\"onNextSlideClick()\">\n <ecl-icon icon=\"corner-arrow\" size=\"m\" transform=\"rotate-90\" isInverted class=\"ecl-carousel__icon-default\"> </ecl-icon>\n <div class=\"ecl-u-sr-only\">{{ 'ecl.carousel.NEXT-SLIDES' | translate }}</div>\n </button>\n</div>\n\n<div *ngIf=\"hasControls()\" class=\"ecl-carousel__controls\">\n <div class=\"ecl-container\">\n <div class=\"ecl-carousel__autoplay\">\n <button\n #playButton\n class=\"ecl-carousel__play\"\n [style.display]=\"isPlaying ? 'none' : ''\"\n (keydown)=\"onPlayKeyboardPress($event)\"\n (click)=\"onPlayClick()\">\n <ecl-icon icon=\"play\" size=\"l\" class=\"ecl-carousel__icon-default\" isInverted> </ecl-icon>\n <ecl-icon icon=\"play-filled\" size=\"l\" class=\"ecl-carousel__icon-active\" isInverted> </ecl-icon>\n <div class=\"ecl-u-sr-only\">{{ 'ecl.carousel.AUTOPLAY' | translate }}</div>\n </button>\n <button\n #pauseButton\n class=\"ecl-carousel__pause\"\n [style.display]=\"isPlaying ? '' : 'none'\"\n (keydown)=\"onPlayKeyboardPress($event)\"\n (click)=\"onPauseClick()\">\n <ecl-icon icon=\"pause\" size=\"l\" class=\"ecl-carousel__icon-default\" isInverted> </ecl-icon>\n <ecl-icon icon=\"pause-filled\" size=\"l\" class=\"ecl-carousel__icon-active\" isInverted> </ecl-icon>\n <div class=\"ecl-u-sr-only\">{{ 'ecl.carousel.PAUSE' | translate }}</div>\n </button>\n </div>\n\n <div class=\"ecl-carousel__navigation\">\n <button\n *ngFor=\"let slide of slides; let i = index\"\n #currButton\n [attr.aria-current]=\"i === getCurrentSlideIndex()\"\n class=\"ecl-carousel__navigation-item\"\n (click)=\"onSlideControlClick(slide)\"\n (keydown)=\"onNavBtnKeyboardPress($event, i)\">\n <span class=\"ecl-u-sr-only\">{{ 'ecl.carousel.GO-TO-SLIDE' | translate }} {{ i + 1 }}</span>\n </button>\n </div>\n\n <button *ngIf=\"!isLargeDesktopBreakpoint\" #prevButton class=\"ecl-carousel__prev\" (click)=\"onPreviousSlideClick()\">\n <ecl-icon icon=\"corner-arrow\" size=\"m\" transform=\"rotate-270\" isInverted class=\"ecl-carousel__icon-default\"> </ecl-icon>\n <span class=\"ecl-u-sr-only\">{{ 'ecl.carousel.PREV-SLIDES' | translate }}</span>\n </button>\n\n <div class=\"ecl-carousel__pagination\">\n <span class=\"ecl-carousel__current\">{{ getCurrentSlideIndex() + 1 }}</span>\n {{ 'ecl.common.OF' | translate }}\n <span class=\"ecl-carousel__max\">{{ slides.length }}</span>\n </div>\n\n <button *ngIf=\"!isLargeDesktopBreakpoint\" class=\"ecl-carousel__next\" (click)=\"onNextSlideClick()\">\n <ecl-icon icon=\"corner-arrow\" size=\"m\" transform=\"rotate-90\" isInverted class=\"ecl-carousel__icon-default\"> </ecl-icon>\n <div class=\"ecl-u-sr-only\">{{ 'ecl.carousel.NEXT-SLIDES' | translate }}</div>\n </button>\n </div>\n</div>\n", styles: [":host{display:block}.ecl-carousel__container{width:100%}.ecl-carousel__slides{transition-duration:.4s}\n"] }]
448
- }], ctorParameters: () => [{ type: i1.BreakpointObserver }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i2.EclRtlService }], propDecorators: { isAutoplay: [{
501
+ args: [{ selector: 'ecl-carousel', template: "<div #carouselContainer class=\"ecl-carousel__container\" [class.ecl-carousel-container--padded]=\"isPadded()\">\n <div #slidesContainer (keyup)=\"onFirstCarouselElementPress($event)\" class=\"ecl-carousel__slides\"\n [style.width.px]=\"getCarouselSlidesWidth()\" [style.left.px]=\"!isRtl ? getCarouselSlidesOffsetLeft() : null\"\n [style.right.px]=\"isRtl ? getCarouselSlidesOffsetRight() : null\"\n [style.transition-duration.s]=\"transitionDuration\" (mouseover)=\"onSlideHover()\" (mouseout)=\"onSlideHoverout()\">\n\n @if(hasControls()){\n <ecl-carousel-item #firstHiddenItem [style.width.%]=\"slideWidth\"></ecl-carousel-item>\n }\n <ng-content></ng-content>\n\n @if(hasControls()){\n <ecl-carousel-item #lastHiddenItem [style.width.%]=\"slideWidth\"></ecl-carousel-item>\n }\n\n </div>\n</div>\n@if(isButtonNavVisible) {\n<button #prevButton class=\"ecl-button ecl-button--ghost ecl-carousel__prev ecl-button--icon-only\" type=\"button\"\n (click)=\"onPreviousSlideClick()\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.carousel.NEXT-SLIDES' | translate }}\n </span>\n <ecl-icon icon=\"corner-arrow\" size=\"m\" transform=\"rotate-270\" class=\"ecl-button__icon\"> </ecl-icon>\n </span>\n</button>\n}\n\n@if(hasControls()){\n<div class=\"ecl-carousel__controls\">\n <div class=\"ecl-container\">\n <div class=\"ecl-carousel__autoplay\">\n <button #playButton class=\"ecl-button ecl-button--ghost ecl-carousel__play ecl-button--icon-only\"\n type=\"button\" [style.display]=\"isPlaying ? 'none' : 'flex'\" (keydown)=\"onPlayKeyboardPress($event)\"\n (click)=\"onPlayClick()\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.carousel.PLAY' | translate }}\n </span>\n <ecl-icon icon=\"play-outline\" size=\"m\" class=\"ecl-button__icon ecl-carousel__icon-default\">\n </ecl-icon>\n </span>\n\n </button>\n\n <button #pauseButton class=\"ecl-button ecl-button--ghost ecl-carousel__pause ecl-button--icon-only\"\n type=\"button\" [style.display]=\"isPlaying ? 'flex' : 'none'\" (keydown)=\"onPlayKeyboardPress($event)\"\n (click)=\"onPauseClick()\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.carousel.PAUSE' | translate }}\n </span>\n <ecl-icon icon=\"pause\" size=\"m\" class=\"ecl-button__icon ecl-carousel__icon-default\"> </ecl-icon>\n </span>\n\n </button>\n </div>\n\n <div class=\"ecl-carousel__navigation\">\n @for (slide of slides; let i = $index; track slide) {\n <button #currButton [attr.aria-current]=\"i === getCurrentSlideIndex()\"\n class=\"ecl-button ecl-button--ghost ecl-carousel__navigation-item\" (click)=\"onSlideControlClick(slide)\"\n (keydown)=\"onNavBtnKeyboardPress($event, i)\">\n {{ i + 1 }}\n </button>\n }\n </div>\n </div>\n</div>\n}\n@if(isButtonNavVisible) {\n<button #nextButton class=\"ecl-button ecl-button--ghost ecl-carousel__next ecl-button--icon-only\" type=\"button\"\n (click)=\"onNextSlideClick()\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.carousel.NEXT-SLIDES' | translate }}\n </span>\n <ecl-icon icon=\"corner-arrow\" size=\"m\" transform=\"rotate-90\" class=\"ecl-button__icon\"> </ecl-icon>\n </span>\n\n</button>\n}", styles: [":host{display:block}.ecl-carousel__container{width:100%}.ecl-carousel__slides{transition-duration:.4s}\n"] }]
502
+ }], ctorParameters: () => [{ type: i1.BreakpointObserver }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i2.EclRtlService }], propDecorators: { ariaLabel: [{
503
+ type: HostBinding,
504
+ args: ['attr.aria-label']
505
+ }, {
506
+ type: Input,
507
+ args: ['aria-label']
508
+ }], ariaRoleDescription: [{
509
+ type: HostBinding,
510
+ args: ['attr.aria-roledescription']
511
+ }, {
449
512
  type: Input
513
+ }], isAutoplay: [{
514
+ type: Input,
515
+ args: [{ transform: booleanAttribute }]
450
516
  }], playInterval: [{
451
- type: Input
517
+ type: Input,
518
+ args: [{ transform: numberAttribute }]
519
+ }], slide: [{
520
+ type: Output
452
521
  }], carouselContainerElement: [{
453
522
  type: ViewChild,
454
523
  args: ['carouselContainer']
455
524
  }], slides: [{
456
525
  type: ContentChildren,
457
526
  args: [forwardRef(() => EclCarouselItemComponent)]
458
- }], slide: [{
459
- type: Output
460
527
  }], navigationButtons: [{
461
528
  type: ViewChildren,
462
529
  args: ['currButton']
@@ -469,6 +536,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
469
536
  }], prevButton: [{
470
537
  type: ViewChild,
471
538
  args: ['prevButton']
539
+ }], nextButton: [{
540
+ type: ViewChild,
541
+ args: ['nextButton']
472
542
  }], firstHiddenItem: [{
473
543
  type: ViewChild,
474
544
  args: ['firstHiddenItem']
@@ -482,4 +552,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
482
552
  type: HostBinding,
483
553
  args: ['class']
484
554
  }] } });
485
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNsLWNhcm91c2VsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9lY2wtY2Fyb3VzZWwvZWNsLWNhcm91c2VsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9lY2wtY2Fyb3VzZWwvZWNsLWNhcm91c2VsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBSUgsU0FBUyxFQUNULGVBQWUsRUFFZixZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFHTCxNQUFNLEVBR04sU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7O0FBdUJyRCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsZ0JBQWdCO0lBbUN0RCxZQUNZLHFCQUF5QyxFQUN6QyxFQUFxQixFQUNyQixTQUFvQixFQUNwQixhQUE0QjtRQUVwQyxLQUFLLEVBQUUsQ0FBQztRQUxBLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBb0I7UUFDekMsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFDckIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixrQkFBYSxHQUFiLGFB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NEI7SUFBdkIsYUFBYTt3REFBMkM7QUFFbEM7SUFBdEIsWUFBWTswREFBNEM7QUFFVjtJQUE5QyxhQUFhO3NFQUF1RTtBQVV4QztJQUE1QyxhQUFhOzZEQUE4RDsyRkFoQm5FLG9CQUFvQjtrQkFwQmhDLFNBQVM7K0JBQ0ksY0FBYzsyS0FxQkEsVUFBVTtzQkFBbEIsS0FBSztnQkFFRSxZQUFZO3NCQUFwQixLQUFLO2dCQUUyQix3QkFBd0I7c0JBQXZELFNBQVM7dUJBQUMsbUJBQW1CO2dCQUNnQixNQUFNO3NCQUFsRSxlQUFlO3VCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztnQkFDakQsS0FBSztzQkFBZCxNQUFNO2dCQUNxQixpQkFBaUI7c0JBQTVDLFlBQVk7dUJBQUMsWUFBWTtnQkFDRCxVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBQ0csV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhO2dCQUNDLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWTtnQkFDTyxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFDQyxjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFFa0IsZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBNkJ2QyxVQUFVO3NCQURiLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJyZWFrcG9pbnRPYnNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgZm9yd2FyZFJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuLCBjb2VyY2VFbGVtZW50LCBjb2VyY2VOdW1iZXIgfSBmcm9tICdAZXVpL2Jhc2UnO1xuaW1wb3J0IHsgU3ViamVjdCwgaW50ZXJ2YWwsIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBLZXlDb2RlIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgRUNMQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4uL2VjbC1iYXNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBFY2xDYXJvdXNlbEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2VjbC1jYXJvdXNlbC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFY2xTbGlkZUV2ZW50IH0gZnJvbSAnLi9lY2wtY2Fyb3VzZWwuZXZlbnQnO1xuaW1wb3J0IHsgRWNsUnRsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VjbC1ydGwuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZWNsLWNhcm91c2VsJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZWNsLWNhcm91c2VsLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZXM6IFtcbiAgICAgICAgYFxuICAgICAgICAgICAgOmhvc3Qge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKiBUT0RPOiByZW1vdmUgYnkgaW1wbGVtZW50aW5nIGZ1bGwgRUNMIHNwZWNzICovXG4gICAgICAgICAgICAuZWNsLWNhcm91c2VsX19jb250YWluZXIge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZWNsLWNhcm91c2VsX19zbGlkZXMge1xuICAgICAgICAgICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuNHM7XG4gICAgICAgICAgICB9XG4gICAgICAgIGAsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRWNsQ2Fyb3VzZWxDb21wb25lbnQgZXh0ZW5kcyBFQ0xCYXNlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgQGNvZXJjZUJvb2xlYW4gQElucHV0KCkgaXNBdXRvcGxheTogYm9vbGVhbiB8IGFueSA9IHRydWU7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBAY29lcmNlTnVtYmVyIEBJbnB1dCgpIHBsYXlJbnRlcnZhbDogbnVtYmVyIHwgYW55ID0gNTAwMDtcblxuICAgIEBjb2VyY2VFbGVtZW50IEBWaWV3Q2hpbGQoJ2Nhcm91c2VsQ29udGFpbmVyJykgY2Fyb3VzZWxDb250YWluZXJFbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgICBAQ29udGVudENoaWxkcmVuKGZvcndhcmRSZWYoKCkgPT4gRWNsQ2Fyb3VzZWxJdGVtQ29tcG9uZW50KSkgc2xpZGVzOiBRdWVyeUxpc3Q8RWNsQ2Fyb3VzZWxJdGVtQ29tcG9uZW50PjtcbiAgICBAT3V0cHV0KCkgc2xpZGUgPSBuZXcgRXZlbnRFbWl0dGVyPEVjbFNsaWRlRXZlbnQ+KCk7XG4gICAgQFZpZXdDaGlsZHJlbignY3VyckJ1dHRvbicpIG5hdmlnYXRpb25CdXR0b25zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG4gICAgQFZpZXdDaGlsZCgncGxheUJ1dHRvbicpIHBsYXlCdXR0b246IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgncGF1c2VCdXR0b24nKSBwYXVzZUJ1dHRvbjogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdwcmV2QnV0dG9uJykgcHJldkJ1dHRvbjogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdmaXJzdEhpZGRlbkl0ZW0nKSBmaXJzdEhpZGRlbkl0ZW06IEVjbENhcm91c2VsSXRlbUNvbXBvbmVudDtcbiAgICBAVmlld0NoaWxkKCdsYXN0SGlkZGVuSXRlbScpIGxhc3RIaWRkZW5JdGVtOiBFY2xDYXJvdXNlbEl0ZW1Db21wb25lbnQ7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBAY29lcmNlRWxlbWVudCBAVmlld0NoaWxkKCdzbGlkZXNDb250YWluZXInKSBzbGlkZXNDb250YWluZXI6IEVsZW1lbnQgfCBhbnk7XG5cbiAgICBwdWJsaWMgaXNQbGF5aW5nID0gZmFsc2U7XG4gICAgcHVibGljIGlzUGF1c2VkRm9yY2VkID0gZmFsc2U7XG4gICAgcHVibGljIGlzUnRsID0gZmFsc2U7XG4gICAgcHVibGljIGlzVGFibGV0QnJlYWtwb2ludCA9IGZhbHNlO1xuICAgIHB1YmxpYyBpc0Rlc2t0b3BCcmVha3BvaW50ID0gZmFsc2U7XG4gICAgcHVibGljIGlzTGFyZ2VEZXNrdG9wQnJlYWtwb2ludCA9IGZhbHNlO1xuICAgIHB1YmxpYyBpc01vYmlsZUJyZWFrcG9pbnQgPSBmYWxzZTtcbiAgICBzbGlkZVdpZHRoOiBudW1iZXI7XG4gICAgdHJhbnNpdGlvbkR1cmF0aW9uID0gMC40O1xuXG4gICAgcHJpdmF0ZSBwbGF5U3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJpdmF0ZSBzdG9wU3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBwcml2YXRlIGRlc3Ryb3kkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICBwcml2YXRlIHVuc3Vic2NyaWJlTGlzdGVuZXI6ICgpID0+IHZvaWQ7XG4gICAgcHJpdmF0ZSByZWFkb25seSBUSU1FT1VUX0lOVEVSVkFMID0gNDAwO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgY2RrQnJlYWtwb2ludE9ic2VydmVyOiBCcmVha3BvaW50T2JzZXJ2ZXIsXG4gICAgICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyMjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIGVjbFJ0bFNlcnZpY2U6IEVjbFJ0bFNlcnZpY2UsXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgZ2V0IGNzc0NsYXNzZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFtzdXBlci5nZXRDc3NDbGFzc2VzKCdlY2wtY2Fyb3VzZWwnKV0uam9pbignICcpLnRyaW0oKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbml0QXV0b3BsYXkoKTtcbiAgICAgICAgdGhpcy5oYW5kbGVSdGxDaGFuZ2VTdGF0ZSgpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vYnNlcnZlQnJlYWtwb2ludENoYW5nZXMoKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmluaXRpYWxpemVTbGlkZXIoKSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9ic2VydmVFbGVtZW50U2l6ZUNoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xuICAgICAgICBpZiAodGhpcy51bnN1YnNjcmliZUxpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlTGlzdGVuZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUGxheUNsaWNrKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0YXJ0UGxheWluZygpO1xuICAgICAgICB0aGlzLnNob3dCdXR0b24odGhpcy5wYXVzZUJ1dHRvbik7XG4gICAgICAgIHRoaXMuZm9jdXNPbkJ1dHRvbih0aGlzLnBhdXNlQnV0dG9uKTtcbiAgICB9XG5cbiAgICBvblBhdXNlQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RvcFBsYXlpbmcoKTtcbiAgICAgICAgdGhpcy5zaG93QnV0dG9uKHRoaXMucGxheUJ1dHRvbik7XG4gICAgICAgIHRoaXMuZm9jdXNPbkJ1dHRvbih0aGlzLnBsYXlCdXR0b24pO1xuICAgIH1cblxuICAgIG9uRmlyc3RDYXJvdXNlbEVsZW1lbnRQcmVzcyhlKTogdm9pZCB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gS2V5Q29kZS5UQUIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUGxheWluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcFBsYXlpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUGxheUtleWJvYXJkUHJlc3MoZSk6IHZvaWQge1xuICAgICAgICBpZiAoZS5rZXkgPT09IEtleUNvZGUuVEFCICYmIGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoW0tleUNvZGUuVEFCXS5pbmNsdWRlcyhlLmtleSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUGxheWluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVTbGlkZSh0aGlzLnNsaWRlcy5nZXQoMCksIHRydWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNPbkJ1dHRvbih0aGlzLm5hdmlnYXRpb25CdXR0b25zLmdldCgwKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wUGxheWluZygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzT25CdXR0b24odGhpcy5uYXZpZ2F0aW9uQnV0dG9ucy5nZXQodGhpcy5nZXRDdXJyZW50U2xpZGVJbmRleCgpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNQbGF5aW5nICYmIFtLZXlDb2RlLkFSUk9XX1JJR0hUXS5pbmNsdWRlcyhlLmtleSkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNPbkJ1dHRvbih0aGlzLm5hdmlnYXRpb25CdXR0b25zLmdldCh0aGlzLmdldEN1cnJlbnRTbGlkZUluZGV4KCkpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTmF2QnRuS2V5Ym9hcmRQcmVzcyhlOiBLZXlib2FyZEV2ZW50LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gS2V5Q29kZS5UQUIgJiYgZS5zaGlmdEtleSkge1xuICAgICAgICAgICAgdGhpcy5vbk5hdmlnYXRpb25CdXR0b25UYWJBbmRTaGlmdChlLCBpbmRleCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09IEtleUNvZGUuQVJST1dfUklHSFQpIHtcbiAgICAgICAgICAgIHRoaXMub25OYXZpZ2F0aW9uQnV0dG9uQXJyb3dSaWdodChlKTtcbiAgICAgICAgfSBlbHNlIGlmIChlLmtleSA9PT0gS2V5Q29kZS5UQUIpIHtcbiAgICAgICAgICAgIHRoaXMub25OYXZpZ2F0aW9uQnV0dG9uVGFiKGUsIGluZGV4KTtcbiAgICAgICAgfSBlbHNlIGlmIChlLmtleSA9PT0gS2V5Q29kZS5BUlJPV19MRUZUKSB7XG4gICAgICAgICAgICB0aGlzLm9uTmF2aWdhdGlvbkJ1dHRvbkFycm93TGVmdChlLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlzQnV0dG9uVmlzaWJsZShidXR0b246IEVsZW1lbnRSZWYpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFidXR0b24pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYnV0dG9uLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9PT0gJyc7XG4gICAgfVxuXG4gICAgc2hvd0J1dHRvbihidXR0b246IEVsZW1lbnRSZWYpOiB2b2lkIHtcbiAgICAgICAgYnV0dG9uLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgIH1cblxuICAgIGZvY3VzT25CdXR0b24oYnV0dG9uOiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgICAgIGlmICghYnV0dG9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBvblNsaWRlQ29udHJvbENsaWNrKHNsaWRlOiBFY2xDYXJvdXNlbEl0ZW1Db21wb25lbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdG9wUGxheWluZygpO1xuICAgICAgICB0aGlzLmFjdGl2YXRlU2xpZGUoc2xpZGUsIHRydWUpO1xuICAgIH1cblxuICAgIG9uTmV4dFNsaWRlQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RvcFBsYXlpbmcoKTtcbiAgICAgICAgdGhpcy5nb1RvTmV4dFNsaWRlKHRydWUpO1xuICAgIH1cblxuICAgIG9uUHJldmlvdXNTbGlkZUNsaWNrKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0b3BQbGF5aW5nKCk7XG4gICAgICAgIHRoaXMuZ29Ub1ByZXZpb3VzU2xpZGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgb25TbGlkZUhvdmVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBhdXNlUGxheWluZygpO1xuICAgIH1cblxuICAgIG9uU2xpZGVIb3Zlcm91dCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzU3RvcEJ1dHRvblByZXNzZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5yZXN1bWVQbGF5aW5nKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaXNTdG9wQnV0dG9uUHJlc3NlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNQYXVzZWRGb3JjZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGlzUGFkZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0Rlc2t0b3BCcmVha3BvaW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNDb250cm9scygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2xpZGVzQ291bnQoKSA+IDE7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEN1cnJlbnRTbGlkZUluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIGxldCBjdXJyZW50SW5kZXg6IG51bWJlcjtcblxuICAgICAgICB0aGlzLmdldEFsbFNsaWRlc0FycmF5KCkuZm9yRWFjaCgoaXRlbSwgaWR4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLmlzQ3VycmVudCkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRJbmRleCA9IGlkeDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggPT09IHRoaXMuZ2V0QWxsU2xpZGVzQ291bnQoKSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTbGlkZXNDb3VudCgpIC0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3VycmVudEluZGV4IC0gMTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q2Fyb3VzZWxTbGlkZXNXaWR0aCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jYXJvdXNlbENvbnRhaW5lckVsZW1lbnQ/Lm9mZnNldFdpZHRoICogdGhpcy5nZXRBbGxTbGlkZXNDb3VudCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDYXJvdXNlbFNsaWRlc09mZnNldExlZnQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIC0xICogdGhpcy5jYXJvdXNlbENvbnRhaW5lckVsZW1lbnQ/Lm9mZnNldFdpZHRoICogdGhpcy5nZXRDdXJyZW50SXRlbUluZGV4KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENhcm91c2VsU2xpZGVzT2Zmc2V0UmlnaHQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIC0xICogdGhpcy5jYXJvdXNlbENvbnRhaW5lckVsZW1lbnQ/Lm9mZnNldFdpZHRoICogdGhpcy5nZXRDdXJyZW50SXRlbUluZGV4KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVSdGxDaGFuZ2VTdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lY2xSdGxTZXJ2aWNlLmN1cnJlbnRSdGxTdGF0ZSQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgocnRsU3RhdGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNSdGwgPSBydGxTdGF0ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0QXV0b3BsYXkoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0JCA9IHRoaXMucGxheVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIGNvbnN0IHN0b3AkID0gdGhpcy5zdG9wU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAgICAgICBzdGFydCRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiBpbnRlcnZhbCh0aGlzLnBsYXlJbnRlcnZhbCkucGlwZSh0YWtlVW50aWwoc3RvcCQpKSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvTmV4dFNsaWRlKHRydWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDdXJyZW50SXRlbUluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIGxldCByZXN1bHQgPSAwO1xuICAgICAgICB0aGlzLmdldEFsbFNsaWRlc0FycmF5KCkuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtICYmIGl0ZW0uaXNDdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZVNsaWRlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zbGlkZXMuZm9yRWFjaCgoaXRlbSwgaWR4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluaXRTbGlkZShpdGVtLCBpZHgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5oYXNDb250cm9scygpKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRIaWRkZW5JdGVtcygpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNOb1NsaWRlU2VsZWN0ZWQoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVTbGlkZSh0aGlzLnNsaWRlcy5maXJzdCwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5pc0F1dG9wbGF5ICYmIHRoaXMuaXNUYWJsZXRCcmVha3BvaW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydFBsYXlpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdEhpZGRlbkl0ZW1zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpcnN0SGlkZGVuSXRlbS5lbC5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IHRoaXMuZ2V0TGFzdENvbnRlbnRDaGlsZCgpO1xuICAgICAgICB0aGlzLmZpcnN0SGlkZGVuSXRlbS5pc0N1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5sYXN0SGlkZGVuSXRlbS5lbC5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IHRoaXMuZ2V0Rmlyc3RDb250ZW50Q2hpbGQoKTtcbiAgICAgICAgdGhpcy5sYXN0SGlkZGVuSXRlbS5pc0N1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zbGlkZVdpZHRoID0gdGhpcy5zbGlkZXMuZmlyc3Qud2lkdGg7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIyLmxpc3Rlbih0aGlzLnNsaWRlc0NvbnRhaW5lciwgJ3RyYW5zaXRpb25lbmQnLCAoKSA9PiB0aGlzLmNoZWNrSW5kZXgoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja0luZGV4KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5nZXRDdXJyZW50SXRlbUluZGV4KCkgPT09IHRoaXMuZ2V0QWxsU2xpZGVzQ291bnQoKSAtIDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnNsaWRlcy5maXJzdDtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVTbGlkZShpdGVtLCBmYWxzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRDdXJyZW50SXRlbUluZGV4KCkgPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnNsaWRlcy5sYXN0O1xuICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZVNsaWRlKGl0ZW0sIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TGFzdENvbnRlbnRDaGlsZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTbGlkZXNDb3VudCgpID4gMCA/IHRoaXMuc2xpZGVzLmdldCh0aGlzLmdldFNsaWRlc0NvdW50KCkgLSAxKS5lbC5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA6ICcnO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Rmlyc3RDb250ZW50Q2hpbGQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2xpZGVzQ291bnQoKSA+IDAgPyB0aGlzLnNsaWRlcy5nZXQoMCkuZWwubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgOiAnJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRTbGlkZShpdGVtOiBFY2xDYXJvdXNlbEl0ZW1Db21wb25lbnQsIGlkeDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGl0ZW0uaW5kZXggPSBpZHg7XG4gICAgICAgIGl0ZW0uYXJpYUxhYmVsID0gYHNsaWRlICR7aWR4ICsgMX0gb2YgJHt0aGlzLmdldFNsaWRlc0NvdW50KCl9YDtcbiAgICAgICAgaXRlbS53aWR0aCA9IDEwMCAvIHRoaXMuZ2V0QWxsU2xpZGVzQ291bnQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdvVG9OZXh0U2xpZGUoaXNMb29wOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWN0aXZhdGVTbGlkZSh0aGlzLmdldE5leHRTbGlkZShpc0xvb3ApLCB0cnVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdvVG9QcmV2aW91c1NsaWRlKGlzTG9vcDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2YXRlU2xpZGUodGhpcy5nZXRQcmV2aW91c1NsaWRlKGlzTG9vcCksIHRydWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWN0aXZhdGVTbGlkZShzbGlkZTogRWNsQ2Fyb3VzZWxJdGVtQ29tcG9uZW50LCB3aXRoVHJhbnNpdGlvbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAod2l0aFRyYW5zaXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvbkR1cmF0aW9uID0gMC40O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uRHVyYXRpb24gPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzbGlkZSkge1xuICAgICAgICAgICAgdGhpcy5nZXRBbGxTbGlkZXNBcnJheSgpLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtLmlzQ3VycmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzbGlkZS5pc0N1cnJlbnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh3aXRoVHJhbnNpdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zbGlkZS5uZXh0KG5ldyBFY2xTbGlkZUV2ZW50KHRoaXMuc2xpZGVzLmdldCh0aGlzLmdldEN1cnJlbnRTbGlkZUluZGV4KCkpKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTGFzdEJ1dHRvbihpbmRleCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBidXR0b25zTGlzdCA9IHRoaXMubmF2aWdhdGlvbkJ1dHRvbnM7XG4gICAgICAgIHJldHVybiBpbmRleCArIDEgPj0gYnV0dG9uc0xpc3QubGVuZ3RoO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNGaXJzdEJ1dHRvbihpbmRleCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gaW5kZXggPD0gMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0UGxheWluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc1BsYXlpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmlzUGF1c2VkRm9yY2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucGxheVN1YmplY3QubmV4dCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RvcFBsYXlpbmcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNQYXVzZWRGb3JjZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3BTdWJqZWN0Lm5leHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhdXNlUGxheWluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc1BsYXlpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdG9wU3ViamVjdC5uZXh0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXN1bWVQbGF5aW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzUGxheWluZyA9IHRydWU7XG4gICAgICAgIHRoaXMucGxheVN1YmplY3QubmV4dCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TmV4dFNsaWRlKGlzTG9vcDogYm9vbGVhbik6IEVjbENhcm91c2VsSXRlbUNvbXBvbmVudCB7XG4gICAgICAgIGNvbnN0IHNsaWRlc0NvdW50ID0gdGhpcy5nZXRTbGlkZXNDb3VudCgpO1xuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLmdldEN1cnJlbnRTbGlkZUluZGV4KCk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA+PSBzbGlkZXNDb3VudCAtIDEpIHtcbiAgICAgICAgICAgIGlmIChpc0xvb3ApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBbGxTbGlkZXNBcnJheSgpW3RoaXMuZ2V0QWxsU2xpZGVzQ291bnQoKSAtMV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNsaWRlcy5sYXN0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2xpZGVzLmdldChjdXJyZW50SW5kZXggKyAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QWxsU2xpZGVzQXJyYXkoKTogRWNsQ2Fyb3VzZWxJdGVtQ29tcG9uZW50W10ge1xuICAgICAgICByZXR1cm4gWy4uLlt0aGlzLmZpcnN0SGlkZGVuSXRlbV0sIC4uLnRoaXMuc2xpZGVzLnRvQXJyYXkoKSwgLi4uW3RoaXMubGFzdEhpZGRlbkl0ZW1dXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFByZXZpb3VzU2xpZGUoaXNMb29wOiBib29sZWFuKTogRWNsQ2Fyb3VzZWxJdGVtQ29tcG9uZW50IHtcbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5nZXRDdXJyZW50U2xpZGVJbmRleCgpO1xuXG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggPD0gMCkge1xuICAgICAgICAgICAgaWYoaXNMb29wKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsU2xpZGVzQXJyYXkoKVswXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2xpZGVzLmZpcnN0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2xpZGVzLmdldChjdXJyZW50SW5kZXggLSAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2xpZGVzQ291bnQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2xpZGVzLmxlbmd0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFsbFNsaWRlc0NvdW50KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLmhhc0NvbnRyb2xzKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNsaWRlcy5sZW5ndGggKyAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2xpZGVzLmxlbmd0aFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc05vU2xpZGVTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnNsaWRlcy5zb21lKChpdGVtKSA9PiBpdGVtLmlzQ3VycmVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbk5hdmlnYXRpb25CdXR0b25UYWJBbmRTaGlmdChlOiBLZXlib2FyZEV2ZW50LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGJ1dHRvbjogRWxlbWVudFJlZiA9IHRoaXMubmF2aWdhdGlvbkJ1dHRvbnMuZ2V0KHRoaXMuZ2V0Q3VycmVudFNsaWRlSW5kZXgoKSk7XG4gICAgICAgIGlmIChidXR0b24pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUGxheWluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcFBsYXlpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0ZpcnN0QnV0dG9uKGluZGV4KSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucGxheUJ1dHRvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNPbkJ1dHRvbih0aGlzLnBsYXlCdXR0b24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMucGF1c2VCdXR0b24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzT25CdXR0b24odGhpcy5wYXVzZUJ1dHRvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9QcmV2aW91c1NsaWRlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBidXR0b246IEVsZW1lbnRSZWYgPSB0aGlzLm5hdmlnYXRpb25CdXR0b25zLmdldCh0aGlzLmdldEN1cnJlbnRTbGlkZUluZGV4KCkpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNPbkJ1dHRvbihidXR0b24pO1xuICAgICAgICAgICAgfSwgdGhpcy5USU1FT1VUX0lOVEVSVkFMKTtcbiAgICAgICAgfVxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbk5hdmlnYXRpb25CdXR0b25UYWIoZSwgaW5kZXgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNMYXN0QnV0dG9uKGluZGV4KSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNCdXR0b25WaXNpYmxlKHRoaXMucHJldkJ1dHRvbikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzT25CdXR0b24odGhpcy5wcmV2QnV0dG9uKTtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9OZXh0U2xpZGUoZmFsc2UpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ1dHRvbjogRWxlbWVudFJlZiA9IHRoaXMubmF2aWdhdGlvbkJ1dHRvbnMuZ2V0KHRoaXMuZ2V0Q3VycmVudFNsaWRlSW5kZXgoKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c09uQnV0dG9uKGJ1dHRvbik7XG4gICAgICAgICAgICB9LCB0aGlzLlRJTUVPVVRfSU5URVJWQUwpO1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbk5hdmlnYXRpb25CdXR0b25BcnJvd1JpZ2h0KGU6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdvVG9OZXh0U2xpZGUoZmFsc2UpO1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uOiBFbGVtZW50UmVmID0gdGhpcy5uYXZpZ2F0aW9uQnV0dG9ucy5nZXQodGhpcy5nZXRDdXJyZW50U2xpZGVJbmRleCgpKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNPbkJ1dHRvbihidXR0b24pO1xuICAgICAgICB9LCB0aGlzLlRJTUVPVVRfSU5URVJWQUwpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbk5hdmlnYXRpb25CdXR0b25BcnJvd0xlZnQoZTogS2V5Ym9hcmRFdmVudCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0ZpcnN0QnV0dG9uKGluZGV4KSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucGxheUJ1dHRvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNPbkJ1dHRvbih0aGlzLnBsYXlCdXR0b24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMucGF1c2VCdXR0b24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzT25CdXR0b24odGhpcy5wYXVzZUJ1dHRvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9QcmV2aW91c1NsaWRlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBidXR0b246IEVsZW1lbnRSZWYgPSB0aGlzLm5hdmlnYXRpb25CdXR0b25zLmdldCh0aGlzLmdldEN1cnJlbnRTbGlkZUluZGV4KCkpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNPbkJ1dHRvbihidXR0b24pO1xuICAgICAgICAgICAgfSwgdGhpcy5USU1FT1VUX0lOVEVSVkFMKTtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb2JzZXJ2ZUJyZWFrcG9pbnRDaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNka0JyZWFrcG9pbnRPYnNlcnZlclxuICAgICAgICAgICAgLm9ic2VydmUoW1xuICAgICAgICAgICAgICAgICcobWluLXdpZHRoOiA3NjhweCknLFxuICAgICAgICAgICAgICAgICcobWluLXdpZHRoOiAxMTQwcHgpIGFuZCAobWF4LXdpZHRoOiAxMjYwcHgpJyxcbiAgICAgICAgICAgICAgICAnKG1pbi13aWR0aDogMTE0MHB4KScsXG4gICAgICAgICAgICBdKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1RhYmxldEJyZWFrcG9pbnQgPSByZXN1bHQuYnJlYWtwb2ludHNbJyhtaW4td2lkdGg6IDc2OHB4KSddO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNEZXNrdG9wQnJlYWtwb2ludCA9IHJlc3VsdC5icmVha3BvaW50c1snKG1pbi13aWR0aDogMTE0MHB4KSBhbmQgKG1heC13aWR0aDogMTI2MHB4KSddO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMYXJnZURlc2t0b3BCcmVha3BvaW50ID0gcmVzdWx0LmJyZWFrcG9pbnRzWycobWluLXdpZHRoOiAxMTQwcHgpJ107XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNUYWJsZXRCcmVha3BvaW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcFBsYXlpbmcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9ic2VydmVFbGVtZW50U2l6ZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSkub2JzZXJ2ZSh0aGlzLmNhcm91c2VsQ29udGFpbmVyRWxlbWVudCk7XG4gICAgfVxufVxuIiwiPGRpdiAjY2Fyb3VzZWxDb250YWluZXIgY2xhc3M9XCJlY2wtY2Fyb3VzZWxfX2NvbnRhaW5lclwiIFtjbGFzcy5lY2wtY2Fyb3VzZWwtY29udGFpbmVyLS1wYWRkZWRdPVwiaXNQYWRkZWQoKVwiPlxuICAgIDxkaXYgI3NsaWRlc0NvbnRhaW5lclxuICAgICAgICAoa2V5dXApPVwib25GaXJzdENhcm91c2VsRWxlbWVudFByZXNzKCRldmVudClcIlxuICAgICAgICBjbGFzcz1cImVjbC1jYXJvdXNlbF9fc2xpZGVzXCJcbiAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImdldENhcm91c2VsU2xpZGVzV2lkdGgoKVwiXG4gICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cIiFpc1J0bCA/IGdldENhcm91c2VsU2xpZGVzT2Zmc2V0TGVmdCgpIDogbnVsbFwiXG4gICAgICAgIFtzdHlsZS5yaWdodC5weF09XCJpc1J0bCA/IGdldENhcm91c2VsU2xpZGVzT2Zmc2V0UmlnaHQoKSA6IG51bGxcIlxuICAgICAgICBbc3R5bGUudHJhbnNpdGlvbi1kdXJhdGlvbi5zXT1cInRyYW5zaXRpb25EdXJhdGlvblwiXG4gICAgICAgIChtb3VzZW92ZXIpPVwib25TbGlkZUhvdmVyKClcIlxuICAgICAgICAobW91c2VvdXQpPVwib25TbGlkZUhvdmVyb3V0KClcIj5cbiAgICAgICAgPGVjbC1jYXJvdXNlbC1pdGVtICNmaXJzdEhpZGRlbkl0ZW0gKm5nSWY9XCJoYXNDb250cm9scygpXCIgW3N0eWxlLndpZHRoLiVdPVwic2xpZGVXaWR0aFwiPjwvZWNsLWNhcm91c2VsLWl0ZW0+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPGVjbC1jYXJvdXNlbC1pdGVtICNsYXN0SGlkZGVuSXRlbSAqbmdJZj1cImhhc0NvbnRyb2xzKClcIiBbc3R5bGUud2lkdGguJV09XCJzbGlkZVdpZHRoXCI+PC9lY2wtY2Fyb3VzZWwtaXRlbT5cbiAgICA8L2Rpdj5cblxuICAgIDxidXR0b24gKm5nSWY9XCJoYXNDb250cm9scygpICYmIGlzTGFyZ2VEZXNrdG9wQnJlYWtwb2ludFwiIGNsYXNzPVwiZWNsLWNhcm91c2VsX19wcmV2XCIgKGNsaWNrKT1cIm9uUHJldmlvdXNTbGlkZUNsaWNrKClcIj5cbiAgICAgICAgPGVjbC1pY29uIGljb249XCJjb3JuZXItYXJyb3dcIiBzaXplPVwibVwiIHRyYW5zZm9ybT1cInJvdGF0ZS0yNzBcIiBpc0ludmVydGVkIGNsYXNzPVwiZWNsLWNhcm91c2VsX19pY29uLWRlZmF1bHRcIj4gPC9lY2wtaWNvbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJlY2wtdS1zci1vbmx5XCI+e3sgJ2VjbC5jYXJvdXNlbC5QUkVWLVNMSURFUycgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uICpuZ0lmPVwiaGFzQ29udHJvbHMoKSAmJiBpc0xhcmdlRGVza3RvcEJyZWFrcG9pbnRcIiBjbGFzcz1cImVjbC1jYXJvdXNlbF9fbmV4dFwiIChjbGljayk9XCJvbk5leHRTbGlkZUNsaWNrKClcIj5cbiAgICAgICAgPGVjbC1pY29uIGljb249XCJjb3JuZXItYXJyb3dcIiBzaXplPVwibVwiIHRyYW5zZm9ybT1cInJvdGF0ZS05MFwiIGlzSW52ZXJ0ZWQgY2xhc3M9XCJlY2wtY2Fyb3VzZWxfX2ljb24tZGVmYXVsdFwiPiA8L2VjbC1pY29uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZWNsLXUtc3Itb25seVwiPnt7ICdlY2wuY2Fyb3VzZWwuTkVYVC1TTElERVMnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgPC9idXR0b24+XG48L2Rpdj5cblxuPGRpdiAqbmdJZj1cImhhc0NvbnRyb2xzKClcIiBjbGFzcz1cImVjbC1jYXJvdXNlbF9fY29udHJvbHNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZWNsLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZWNsLWNhcm91c2VsX19hdXRvcGxheVwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICNwbGF5QnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJlY2wtY2Fyb3VzZWxfX3BsYXlcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cImlzUGxheWluZyA/ICdub25lJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvblBsYXlLZXlib2FyZFByZXNzKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblBsYXlDbGljaygpXCI+XG4gICAgICAgICAgICAgICAgPGVjbC1pY29uIGljb249XCJwbGF5XCIgc2l6ZT1cImxcIiBjbGFzcz1cImVjbC1jYXJvdXNlbF9faWNvbi1kZWZhdWx0XCIgaXNJbnZlcnRlZD4gPC9lY2wtaWNvbj5cbiAgICAgICAgICAgICAgICA8ZWNsLWljb24gaWNvbj1cInBsYXktZmlsbGVkXCIgc2l6ZT1cImxcIiBjbGFzcz1cImVjbC1jYXJvdXNlbF9faWNvbi1hY3RpdmVcIiBpc0ludmVydGVkPiA8L2VjbC1pY29uPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlY2wtdS1zci1vbmx5XCI+e3sgJ2VjbC5jYXJvdXNlbC5BVVRPUExBWScgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICNwYXVzZUJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZWNsLWNhcm91c2VsX19wYXVzZVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmRpc3BsYXldPVwiaXNQbGF5aW5nID8gJycgOiAnbm9uZSdcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uUGxheUtleWJvYXJkUHJlc3MoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUGF1c2VDbGljaygpXCI+XG4gICAgICAgICAgICAgICAgPGVjbC1pY29uIGljb249XCJwYXVzZVwiIHNpemU9XCJsXCIgY2xhc3M9XCJlY2wtY2Fyb3VzZWxfX2ljb24tZGVmYXVsdFwiIGlzSW52ZXJ0ZWQ+IDwvZWNsLWljb24+XG4gICAgICAgICAgICAgICAgPGVjbC1pY29uIGljb249XCJwYXVzZS1maWxsZWRcIiBzaXplPVwibFwiIGNsYXNzPVwiZWNsLWNhcm91c2VsX19pY29uLWFjdGl2ZVwiIGlzSW52ZXJ0ZWQ+IDwvZWNsLWljb24+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVjbC11LXNyLW9ubHlcIj57eyAnZWNsLmNhcm91c2VsLlBBVVNFJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJlY2wtY2Fyb3VzZWxfX25hdmlnYXRpb25cIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgc2xpZGUgb2Ygc2xpZGVzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICAjY3VyckJ1dHRvblxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtY3VycmVudF09XCJpID09PSBnZXRDdXJyZW50U2xpZGVJbmRleCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImVjbC1jYXJvdXNlbF9fbmF2aWdhdGlvbi1pdGVtXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TbGlkZUNvbnRyb2xDbGljayhzbGlkZSlcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uTmF2QnRuS2V5Ym9hcmRQcmVzcygkZXZlbnQsIGkpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlY2wtdS1zci1vbmx5XCI+e3sgJ2VjbC5jYXJvdXNlbC5HTy1UTy1TTElERScgfCB0cmFuc2xhdGUgfX0ge3sgaSArIDEgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFpc0xhcmdlRGVza3RvcEJyZWFrcG9pbnRcIiAjcHJldkJ1dHRvbiBjbGFzcz1cImVjbC1jYXJvdXNlbF9fcHJldlwiIChjbGljayk9XCJvblByZXZpb3VzU2xpZGVDbGljaygpXCI+XG4gICAgICAgICAgICA8ZWNsLWljb24gaWNvbj1cImNvcm5lci1hcnJvd1wiIHNpemU9XCJtXCIgdHJhbnNmb3JtPVwicm90YXRlLTI3MFwiIGlzSW52ZXJ0ZWQgY2xhc3M9XCJlY2wtY2Fyb3VzZWxfX2ljb24tZGVmYXVsdFwiPiA8L2VjbC1pY29uPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlY2wtdS1zci1vbmx5XCI+e3sgJ2VjbC5jYXJvdXNlbC5QUkVWLVNMSURFUycgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJlY2wtY2Fyb3VzZWxfX3BhZ2luYXRpb25cIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWNsLWNhcm91c2VsX19jdXJyZW50XCI+e3sgZ2V0Q3VycmVudFNsaWRlSW5kZXgoKSArIDEgfX08L3NwYW4+XG4gICAgICAgICAgICB7eyAnZWNsLmNvbW1vbi5PRicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWNsLWNhcm91c2VsX19tYXhcIj57eyBzbGlkZXMubGVuZ3RoIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWlzTGFyZ2VEZXNrdG9wQnJlYWtwb2ludFwiIGNsYXNzPVwiZWNsLWNhcm91c2VsX19uZXh0XCIgKGNsaWNrKT1cIm9uTmV4dFNsaWRlQ2xpY2soKVwiPlxuICAgICAgICAgICAgPGVjbC1pY29uIGljb249XCJjb3JuZXItYXJyb3dcIiBzaXplPVwibVwiIHRyYW5zZm9ybT1cInJvdGF0ZS05MFwiIGlzSW52ZXJ0ZWQgY2xhc3M9XCJlY2wtY2Fyb3VzZWxfX2ljb24tZGVmYXVsdFwiPiA8L2VjbC1pY29uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVjbC11LXNyLW9ubHlcIj57eyAnZWNsLmNhcm91c2VsLk5FWFQtU0xJREVTJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
555
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNsLWNhcm91c2VsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9lY2wtY2Fyb3VzZWwvZWNsLWNhcm91c2VsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9lY2wtY2Fyb3VzZWwvZWNsLWNhcm91c2VsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFJSCxTQUFTLEVBQ1QsZUFBZSxFQUVmLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUdMLE1BQU0sRUFHTixTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixVQUFVLEVBQ1YsZUFBZSxHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7O0FBc0JyRCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsZ0JBQWdCO0lBc0N0RCxZQUNZLHFCQUF5QyxFQUN6QyxFQUFxQixFQUNyQixTQUFvQixFQUNwQixhQUE0QjtRQUVwQyxLQUFLLEVBQUUsQ0FBQztRQUxBLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBb0I7UUFDekMsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFDckIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQXhDYSxjQUFTLEdBQWtCLDJCQUEyQixDQUFDO1FBQ3pELHdCQUFtQixHQUFrQixVQUFVLENBQUM7UUFFM0QsZUFBVSxHQUFHLElBQUksQ0FBQztRQUNuQixpQkFBWSxHQUFHLElBQUksQ0FBQztRQUNqRCxVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7UUFhN0MsdUJBQWtCLEdBQUUsS0FBSyxDQUFDO1FBQzFCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUVyQix1QkFBa0IsR0FBRyxHQUFHLENBQUM7UUFFakIsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQzNCLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUM1Qiw2QkFBd0IsR0FBRyxLQUFLLENBQUM7UUFDakMsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQzNCLGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUNsQyxnQkFBVyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFbEMsYUFBUSxHQUFxQixJQUFJLE9BQU8sRUFBVyxDQUFDO1FBRTNDLHFCQUFnQixHQUFHLEdBQUcsQ0FBQztJQVN4QyxDQUFDO0lBRUQsSUFDSSxVQUFVO1FBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbEUsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELGtCQUFrQjtRQUNkLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDeEIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM1QixJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUMxQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztTQUM5QjtJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxZQUFZO1FBQ1IsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQ3ZCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2FBQ3RCO1NBQ0o7SUFDTCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFO1lBQ3JDLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMvQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDdEI7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUMvRTtZQUNELENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN0QjthQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDakUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUMvRTtJQUNMLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxDQUFnQixFQUFFLEtBQWE7UUFDakQsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRTtZQUNyQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ2hEO2FBQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLE9BQU8sQ0FBQyxXQUFXLEVBQUU7WUFDdEMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hDO2FBQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDOUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN4QzthQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxPQUFPLENBQUMsVUFBVSxFQUFFO1lBQ3JDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDOUM7UUFDRCxPQUFPO0lBQ1gsQ0FBQztJQUVELGVBQWUsQ0FBQyxNQUFrQjtRQUM5QixJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFrQjtRQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUNoRSxDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQWtCO1FBQzVCLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUErQjtRQUMvQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELGdCQUFnQjtRQUNaLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxvQkFBb0I7UUFDaEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsWUFBWTtRQUNSLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRTtZQUM3QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDeEI7SUFDTCxDQUFDO0lBRU0sbUJBQW1CO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUMvQixDQUFDO0lBRU0sUUFBUTtRQUNYLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ3BDLENBQUM7SUFFTSxXQUFXO1FBQ2QsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFTSxvQkFBb0I7UUFDdkIsSUFBSSxZQUFvQixDQUFDO1FBRXpCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUMzQyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUN4QixZQUFZLEdBQUcsR0FBRyxDQUFDO2FBQ3RCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLFlBQVksS0FBSyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsR0FBRSxDQUFDLEVBQUU7WUFDOUMsT0FBTyxDQUFDLENBQUM7U0FDWjthQUFNLElBQUksWUFBWSxLQUFLLENBQUMsRUFBRTtZQUMzQixPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDcEM7UUFDRCxPQUFPLFlBQVksR0FBRyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVNLHNCQUFzQjtRQUN6QixPQUFPLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxhQUFhLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQy9GLENBQUM7SUFFTSwyQkFBMkI7UUFDOUIsT0FBTyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsYUFBYSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUN0RyxDQUFDO0lBRU0sNEJBQTRCO1FBQy9CLE9BQU8sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLGFBQWEsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDdEcsQ0FBQztJQUVPLG9CQUFvQjtRQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDdEYsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sWUFBWTtRQUNoQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQy9DLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFOUMsTUFBTTthQUNELElBQUksQ0FDRCxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDbkUsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FDM0I7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFTyxtQkFBbUI7UUFDdkIsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzdDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ3hCLE1BQU0sR0FBRyxLQUFLLENBQUM7YUFDbEI7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxnQkFBZ0I7UUFDcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUNwQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQzthQUNoRDtZQUVELElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQzthQUN2QjtTQUNKO0lBQ0wsQ0FBQztJQUVPLGVBQWU7UUFDbkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUM3RSxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM3RSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDMUMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNuSSxDQUFDO0lBRU8sVUFBVTtRQUNkLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLEtBQUssSUFBSSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQzdELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ25DO2FBQU0sSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDekMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDOUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDbkM7SUFDTCxDQUFDO0lBRU8sbUJBQW1CO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDbEgsQ0FBQztJQUVPLG9CQUFvQjtRQUN4QixPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDMUYsQ0FBQztJQUVPLFNBQVMsQ0FBQyxJQUE4QixFQUFFLEdBQVc7UUFDekQsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7UUFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsR0FBRyxDQUFDLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7UUFDaEUsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVPLGFBQWEsQ0FBQyxNQUFlO1FBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU8saUJBQWlCLENBQUMsTUFBZTtRQUNyQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRU8sYUFBYSxDQUFDLEtBQStCLEVBQUUsY0FBdUI7UUFDMUUsSUFBSSxjQUFjLEVBQUU7WUFDaEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEdBQUcsQ0FBQztTQUNqQzthQUFNO1lBQ0gsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQztTQUMvQjtRQUNELElBQUksS0FBSyxFQUFFO1lBQ1AsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQzNCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7U0FDMUI7UUFDRCxJQUFJLGNBQWMsRUFBRTtZQUNoQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNwRjtJQUNMLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBSztRQUN0QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDM0MsT0FBTyxLQUFLLEdBQUcsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUM7SUFDM0MsQ0FBQztJQUVPLGFBQWEsQ0FBQyxLQUFLO1FBQ3ZCLE9BQU8sS0FBSyxJQUFJLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRU8sWUFBWTtRQUNoQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFTyxXQUFXO1FBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU8sWUFBWTtRQUNoQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFTyxhQUFhO1FBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVPLFlBQVksQ0FBQyxNQUFlO1FBQ2hDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMxQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUVqRCxJQUFJLFlBQVksSUFBSSxXQUFXLEdBQUcsQ0FBQyxFQUFFO1lBQ2pDLElBQUksTUFBTSxFQUFFO2dCQUNSLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7YUFDaEU7aUJBQU07Z0JBQ0gsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQzthQUMzQjtTQUNKO2FBQU07WUFDSCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztTQUM1QztJQUNMLENBQUM7SUFFTyxpQkFBaUI7UUFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztJQUMzRixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsTUFBZTtRQUNwQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUVqRCxJQUFJLFlBQVksSUFBSSxDQUFDLEVBQUU7WUFDbkIsSUFBRyxNQUFNLEVBQUU7Z0JBQ1AsT0FBTyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN0QztpQkFBTTtnQkFDSCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2FBQzVCO1NBQ0o7YUFBTTtZQUNILE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzVDO0lBQ0wsQ0FBQztJQUVPLGNBQWM7UUFDbEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM5QixDQUFDO0lBRU8saUJBQWlCO1FBQ3JCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ3BCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1NBQ2pDO2FBQU07WUFDSCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFBO1NBQzVCO0lBQ0wsQ0FBQztJQUVPLGlCQUFpQjtRQUNyQixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRU8sNkJBQTZCLENBQUMsQ0FBZ0IsRUFBRSxLQUFhO1FBQ2pFLE1BQU0sTUFBTSxHQUFlLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQztRQUNuRixJQUFJLE1BQU0sRUFBRTtZQUNSLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2FBQ3RCO1NBQ0o7UUFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNqQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUN2QztZQUNELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDeEM7U0FDSjthQUFNO1lBQ0gsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzlCLE1BQU0sTUFBTSxHQUFlLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQztnQkFDbkYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvQixDQUFDLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDN0I7UUFDRCxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVPLHFCQUFxQixDQUFDLENBQUMsRUFBRSxLQUFLO1FBQ2xDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMxQixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUN2QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDcEMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQ3RCO1NBQ0o7YUFBTTtZQUNILFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDMUIsTUFBTSxNQUFNLEdBQWUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO2dCQUNuRixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9CLENBQUMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUMxQixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdEI7SUFDTCxDQUFDO0lBRU8sNEJBQTRCLENBQUMsQ0FBZ0I7UUFDakQsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsTUFBTSxNQUFNLEdBQWUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1lBQ25GLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU8sMkJBQTJCLENBQUMsQ0FBZ0IsRUFBRSxLQUFhO1FBQy9ELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMzQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3ZDO1lBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNsQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUN4QztTQUNKO2FBQU07WUFDSCxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNaLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDOUIsTUFBTSxNQUFNLEdBQWUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO2dCQUNuRixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9CLENBQUMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUMxQixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdEI7SUFDTCxDQUFDO0lBRU8sd0JBQXdCO1FBQzVCLElBQUksQ0FBQyxxQkFBcUI7YUFDckIsT0FBTyxDQUFDO1lBQ0wsb0JBQW9CO1lBQ3BCLG9CQUFvQjtZQUNwQixvQkFBb0I7WUFDcEIsNkNBQTZDO1lBQzdDLHFCQUFxQjtTQUN4QixDQUFDO2FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDbEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUNuRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ25FLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7WUFDN0YsSUFBSSxDQUFDLHdCQUF3QixHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUMxRSxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsRUFBRTtnQkFDMUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUM3QztZQUNELElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO2dCQUN6QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDdEI7WUFFRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtnQkFDekIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2FBQ3BEO1lBRUQsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUMxQjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVPLHlCQUF5QjtRQUM3QixJQUFJLGNBQWMsQ0FBQyxHQUFHLEVBQUU7WUFDcEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFTyxlQUFlO1FBQ25CLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDL0IsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQzVCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7U0FDbkM7SUFDTCxDQUFDO0lBRU8sa0JBQWtCO1FBQ3RCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFDLEVBQUU7WUFDMUMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQztZQUMzRCxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM5QixJQUFJLE1BQU0sS0FBSyxNQUFNLEVBQUU7Z0JBQ25CLE9BQU8sQ0FBQyxDQUFDO2FBQ1o7WUFDRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxLQUFLLEdBQUcsRUFBRTtnQkFDeEMsT0FBTyxDQUFDLENBQUM7YUFDWjtZQUNELE9BQU8sTUFBTSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFBO1FBQzNFLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDO1FBQ3pELElBQUksb0JBQW9CLEdBQUcsQ0FBQyxFQUFFO1lBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzFCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7Z0JBQzVCLElBQUksTUFBTSxFQUFFO29CQUNSLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUM7b0JBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxHQUFHLG9CQUFvQixJQUFJLENBQUMsQ0FBQTtvQkFDdkYsSUFBSSxXQUFXLEVBQUU7d0JBQ2IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO3FCQUNoRjtpQkFDSjtZQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDM0I7SUFDTCxDQUFDO0lBRU8sV0FBVztRQUNmLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBQyxFQUFFO1lBQ3RDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDNUIsSUFBSSxNQUFNLEVBQUU7Z0JBQ1IsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQTtnQkFDOUQsSUFBSSxXQUFXLEVBQUU7b0JBQ2IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFBO2lCQUMzRTthQUNKO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU8sZ0JBQWdCO1FBQ3BCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDN0UsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztTQUNoRjtJQUNMLENBQUM7d0lBOWlCUSxvQkFBb0I7NEhBQXBCLG9CQUFvQixtS0FLVCxnQkFBZ0Isa0RBQ2hCLGVBQWUseVBBSUQsd0JBQXdCLG82QkM1RDlELGd5SEFrRkM7O2tHRGhDWSxvQkFBb0I7a0JBcEJoQyxTQUFTOytCQUNJLGNBQWM7MktBcUI2QixTQUFTO3NCQUE3RCxXQUFXO3VCQUFDLGlCQUFpQjs7c0JBQUcsS0FBSzt1QkFBQyxZQUFZO2dCQUNBLG1CQUFtQjtzQkFBckUsV0FBVzt1QkFBQywyQkFBMkI7O3NCQUFHLEtBQUs7Z0JBRVIsVUFBVTtzQkFBakQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDQyxZQUFZO3NCQUFsRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtnQkFDM0IsS0FBSztzQkFBZCxNQUFNO2dCQUV5Qix3QkFBd0I7c0JBQXZELFNBQVM7dUJBQUMsbUJBQW1CO2dCQUMrQixNQUFNO3NCQUFsRSxlQUFlO3VCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztnQkFDL0IsaUJBQWlCO3NCQUE1QyxZQUFZO3VCQUFDLFlBQVk7Z0JBQ0QsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQUNHLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFDQyxVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBQ0UsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQUNPLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUNDLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUNHLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCO2dCQThCeEIsVUFBVTtzQkFEYixXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFJlbmRlcmVyMixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgZm9yd2FyZFJlZixcbiAgICBudW1iZXJBdHRyaWJ1dGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY29lcmNlRWxlbWVudCB9IGZyb20gJ0BldWkvYmFzZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBpbnRlcnZhbCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVjbFJ0bFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lY2wtcnRsLnNlcnZpY2UnO1xuaW1wb3J0IHsgS2V5Q29kZSB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IEVDTEJhc2VEaXJlY3RpdmUgfSBmcm9tICcuLi9lY2wtYmFzZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRWNsQ2Fyb3VzZWxJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9lY2wtY2Fyb3VzZWwtaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRWNsU2xpZGVFdmVudCB9IGZyb20gJy4vZWNsLWNhcm91c2VsLmV2ZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdlY2wtY2Fyb3VzZWwnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9lY2wtY2Fyb3VzZWwuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlczogW1xuICAgICAgICBgXG4gICAgICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qIFRPRE86IHJlbW92ZSBieSBpbXBsZW1lbnRpbmcgZnVsbCBFQ0wgc3BlY3MgKi9cbiAgICAgICAgICAgIC5lY2wtY2Fyb3VzZWxfX2NvbnRhaW5lciB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5lY2wtY2Fyb3VzZWxfX3NsaWRlcyB7XG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC40cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgYCxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBFY2xDYXJvdXNlbENvbXBvbmVudCBleHRlbmRzIEVDTEJhc2VEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1sYWJlbCcpIEBJbnB1dCgnYXJpYS1sYWJlbCcpIGFyaWFMYWJlbDogc3RyaW5nIHwgbnVsbCA9ICdDYXJvdXNlbCBkZXNjcmlwdGlvbiBoZXJlJztcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1yb2xlZGVzY3JpcHRpb24nKSBASW5wdXQoKSBhcmlhUm9sZURlc2NyaXB0aW9uOiBzdHJpbmcgfCBudWxsID0gJ2Nhcm91c2VsJztcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc0F1dG9wbGF5ID0gdHJ1ZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBwbGF5SW50ZXJ2YWwgPSA1MDAwO1xuICAgIEBPdXRwdXQoKSBzbGlkZSA9IG5ldyBFdmVudEVtaXR0ZXI8RWNsU2xpZGVFdmVudD4oKTtcblxuICAgIEBWaWV3Q2hpbGQoJ2Nhcm91c2VsQ29udGFpbmVyJykgY2Fyb3VzZWxDb250YWluZXJFbGVtZW50OiBFbGVtZW50UmVmO1xuICAgIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBFY2xDYXJvdXNlbEl0ZW1Db21wb25lbnQpKSBzbGlkZXM6IFF1ZXJ5TGlzdDxFY2xDYXJvdXNlbEl0ZW1Db21wb25lbnQ+O1xuICAgIEBWaWV3Q2hpbGRyZW4oJ2N1cnJCdXR0b24nKSBuYXZpZ2F0aW9uQnV0dG9uczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICAgIEBWaWV3Q2hpbGQoJ3BsYXlCdXR0b24nKSBwbGF5QnV0dG9uOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ3BhdXNlQnV0dG9uJykgcGF1c2VCdXR0b246IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgncHJldkJ1dHRvbicpIHByZXZCdXR0b246IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnbmV4dEJ1dHRvbicpIG5leHRCdXR0b246IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnZmlyc3RIaWRkZW5JdGVtJykgZmlyc3RIaWRkZW5JdGVtOiBFY2xDYXJvdXNlbEl0ZW1Db21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZCgnbGFzdEhpZGRlbkl0ZW0nKSBsYXN0SGlkZGVuSXRlbTogRWNsQ2Fyb3VzZWxJdGVtQ29tcG9uZW50O1xuICAgIEBWaWV3Q2hpbGQoJ3NsaWRlc0NvbnRhaW5lcicpIHNsaWRlc0NvbnRhaW5lcjogRWxlbWVudFJlZjtcblxuICAgIHB1YmxpYyBpc0J1dHRvbk5hdlZpc2libGU9IGZhbHNlO1xuICAgIHB1YmxpYyBpc1BsYXlpbmcgPSBmYWxzZTtcbiAgICBwdWJsaWMgaXNQYXVzZWRGb3JjZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgaXNSdGwgPSBmYWxzZTtcbiAgICBzbGlkZVdpZHRoOiBudW1iZXI7XG4gICAgdHJhbnNpdGlvbkR1cmF0aW9uID0gMC40O1xuXG4gICAgcHJpdmF0ZSBpc1RhYmxldEJyZWFrcG9pbnQgPSBmYWxzZTtcbiAgICBwcml2YXRlIGlzRGVza3RvcEJyZWFrcG9pbnQgPSBmYWxzZTtcbiAgICBwcml2YXRlIGlzTGFyZ2VEZXNrdG9wQnJlYWtwb2ludCA9IGZhbHNlO1xuICAgIHByaXZhdGUgaXNNb2JpbGVCcmVha3BvaW50ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBwbGF5U3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJpdmF0ZSBzdG9wU3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBwcml2YXRlIGRlc3Ryb3kkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICBwcml2YXRlIHVuc3Vic2NyaWJlTGlzdGVuZXI6ICgpID0+IHZvaWQ7XG4gICAgcHJpdmF0ZSByZWFkb25seSBUSU1FT1VUX0lOVEVSVkFMID0gNDAwO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgY2RrQnJlYWtwb2ludE9ic2VydmVyOiBCcmVha3BvaW50T2JzZXJ2ZXIsXG4gICAgICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyMjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIGVjbFJ0bFNlcnZpY2U6IEVjbFJ0bFNlcnZpY2UsXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgZ2V0IGNzc0NsYXNzZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFtzdXBlci5nZXRDc3NDbGFzc2VzKCdlY2wtY2Fyb3VzZWwnKV0uam9pbignICcpLnRyaW0oKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbml0QXV0b3BsYXkoKTtcbiAgICAgICAgdGhpcy5oYW5kbGVSdGxDaGFuZ2VTdGF0ZSgpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVTbGlkZXIoKTtcbiAgICAgICAgICAgIHRoaXMuaXNCdXR0b25EaXNwbGF5KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vYnNlcnZlRWxlbWVudFNpemVDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMub2JzZXJ2ZUJyZWFrcG9pbnRDaGFuZ2VzKCksIDIwMCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xuICAgICAgICBpZiAodGhpcy51bnN1YnNjcmliZUxpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlTGlzdGVuZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUGxheUNsaWNrKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0YXJ0UGxheWluZygpO1xuICAgICAgICB0aGlzLnNob3dCdXR0b24odGhpcy5wYXVzZUJ1dHRvbik7XG4gICAgICAgIHRoaXMuZm9jdXNPbkJ1dHRvbih0aGlzLnBhdXNlQnV0dG9uKTtcbiAgICB9XG5cbiAgICBvblBhdXNlQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RvcFBsYXlpbmcoKTtcbiAgICAgICAgdGhpcy5zaG93QnV0dG9uKHRoaXMucGxheUJ1dHRvbik7XG4gICAgICAgIHRoaXMuZm9jdXNPbkJ1dHRvbih0aGlzLnBsYXlCdXR0b24pO1xuICAgIH1cblxuICAgIG9uRmlyc3RDYXJvdXNlbEVsZW1lbnRQcmVzcyhlKTogdm9pZCB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gS2V5Q29kZS5UQUIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUGxheWluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcFBsYXlpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUGxheUtleWJvYXJkUHJlc3MoZSk6IHZvaWQge1xuICAgICAgICBpZiAoZS5rZXkgPT09IEtleUNvZGUuVEFCICYmIGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoW0tleUNvZGUuVEFCXS5pbmNsdWRlcyhlLmtleSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUGxheWluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVTbGlkZSh0aGlzLnNsaWRlcy5nZXQoMCksIHRydWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNPbkJ1dHRvbih0aGlzLm5hdmlnYXRpb25CdXR0b25zLmdldCgwKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wUGxheWluZygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzT25CdXR0b24odGhpcy5uYXZpZ2F0aW9uQnV0dG9ucy5nZXQodGhpcy5nZXRDdXJyZW50U2xpZGVJbmRleCgpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNQbGF5aW5nICYmIFtLZXlDb2RlLkFSUk9XX1JJR0hUXS5pbmNsdWRlcyhlLmtleSkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNPbkJ1dHRvbih0aGlzLm5hdmlnYXRpb25CdXR0b25zLmdldCh0aGlzLmdldEN1cnJlbnRTbGlkZUluZGV4KCkpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTmF2QnRuS2V5Ym9hcmRQcmVzcyhlOiBLZXlib2FyZEV2ZW50LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gS2V5Q29kZS5UQUIgJiYgZS5zaGlmdEtleSkge1xuICAgICAgICAgICAgdGhpcy5vbk5hdmlnYXRpb25CdXR0b25UYWJBbmRTaGlmdChlLCBpbmRleCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09IEtleUNvZGUuQVJST1dfUklHSFQpIHtcbiAgICAgICAgICAgIHRoaXMub25OYXZpZ2F0aW9uQnV0dG9uQXJyb3dSaWdodChlKTtcbiAgICAgICAgfSBlbHNlIGlmIChlLmtleSA9PT0gS2V5Q29kZS5UQUIpIHtcbiAgICAgICAgICAgIHRoaXMub25OYXZpZ2F0aW9uQnV0dG9uVGFiKGUsIGluZGV4KTtcbiAgICAgICAgfSBlbHNlIGlmIChlLmtleSA9PT0gS2V5Q29kZS5BUlJPV19MRUZUKSB7XG4gICAgICAgICAgICB0aGlzLm9uTmF2aWdhdGlvbkJ1dHRvbkFycm93TGVmdChlLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlzQnV0dG9uVmlzaWJsZShidXR0b246IEVsZW1lbnRSZWYpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFidXR0b24pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYnV0dG9uLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9PT0gJyc7XG4gICAgfVxuXG4gICAgc2hvd0J1dHRvbihidXR0b246IEVsZW1lbnRSZWYpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlcjIuc2V0U3R5bGUoYnV0dG9uLm5hdGl2ZUVsZW1lbnQsICdkaXNwbGF5JywgJycpXG4gICAgfVxuXG4gICAgZm9jdXNPbkJ1dHRvbihidXR0b246IEVsZW1lbnRSZWYpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFidXR0b24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBidXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIG9uU2xpZGVDb250cm9sQ2xpY2soc2xpZGU6IEVjbENhcm91c2VsSXRlbUNvbXBvbmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0b3BQbGF5aW5nKCk7XG4gICAgICAgIHRoaXMuYWN0aXZhdGVTbGlkZShzbGlkZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgb25OZXh0U2xpZGVDbGljaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdG9wUGxheWluZygpO1xuICAgICAgICB0aGlzLmdvVG9OZXh0U2xpZGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgb25QcmV2aW91c1NsaWRlQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RvcFBsYXlpbmcoKTtcbiAgICAgICAgdGhpcy5nb1RvUHJldmlvdXNTbGlkZSh0cnVlKTtcbiAgICB9XG5cbiAgICBvblNsaWRlSG92ZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGF1c2VQbGF5aW5nKCk7XG4gICAgfVxuXG4gICAgb25TbGlkZUhvdmVyb3V0KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNTdG9wQnV0dG9uUHJlc3NlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLnJlc3VtZVBsYXlpbmcoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBpc1N0b3BCdXR0b25QcmVzc2VkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1BhdXNlZEZvcmNlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNQYWRkZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRGVza3RvcEJyZWFrcG9pbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIGhhc0NvbnRyb2xzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTbGlkZXNDb3VudCgpID4gMTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q3VycmVudFNsaWRlSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGN1cnJlbnRJbmRleDogbnVtYmVyO1xuXG4gICAgICAgIHRoaXMuZ2V0QWxsU2xpZGVzQXJyYXkoKS5mb3JFYWNoKChpdGVtLCBpZHgpID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtICYmIGl0ZW0uaXNDdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEluZGV4ID0gaWR4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gdGhpcy5nZXRBbGxTbGlkZXNDb3VudCgpIC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50SW5kZXggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFNsaWRlc0NvdW50KCkgLSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJyZW50SW5kZXggLSAxO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDYXJvdXNlbFNsaWRlc1dpZHRoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhcm91c2VsQ29udGFpbmVyRWxlbWVudD8ubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCAqIHRoaXMuZ2V0QWxsU2xpZGVzQ291bnQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q2Fyb3VzZWxTbGlkZXNPZmZzZXRMZWZ0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAtMSAqIHRoaXMuY2Fyb3VzZWxDb250YWluZXJFbGVtZW50Py5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICogdGhpcy5nZXRDdXJyZW50SXRlbUluZGV4KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENhcm91c2VsU2xpZGVzT2Zmc2V0UmlnaHQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIC0xICogdGhpcy5jYXJvdXNlbENvbnRhaW5lckVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggKiB0aGlzLmdldEN1cnJlbnRJdGVtSW5kZXgoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVJ0bENoYW5nZVN0YXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVjbFJ0bFNlcnZpY2UuY3VycmVudFJ0bFN0YXRlJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChydGxTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc1J0bCA9IHJ0bFN0YXRlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRBdXRvcGxheSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhcnQkID0gdGhpcy5wbGF5U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICAgICAgY29uc3Qgc3RvcCQgPSB0aGlzLnN0b3BTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gICAgICAgIHN0YXJ0JFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IGludGVydmFsKHRoaXMucGxheUludGVydmFsKS5waXBlKHRha2VVbnRpbChzdG9wJCkpKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9OZXh0U2xpZGUodHJ1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEN1cnJlbnRJdGVtSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgICAgIHRoaXMuZ2V0QWxsU2xpZGVzQXJyYXkoKS5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS5pc0N1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplU2xpZGVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNsaWRlcy5mb3JFYWNoKChpdGVtLCBpZHgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5pdFNsaWRlKGl0ZW0sIGlkeCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmhhc0NvbnRyb2xzKCkpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdEhpZGRlbkl0ZW1zKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc05vU2xpZGVTZWxlY3RlZCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZVNsaWRlKHRoaXMuc2xpZGVzLmZpcnN0LCBmYWxzZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlzQXV0b3BsYXkgJiYgdGhpcy5pc1RhYmxldEJyZWFrcG9pbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0UGxheWluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0SGlkZGVuSXRlbXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmlyc3RIaWRkZW5JdGVtLmVsLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5nZXRMYXN0Q29udGVudENoaWxkKCk7XG4gICAgICAgIHRoaXMuZmlyc3RIaWRkZW5JdGVtLmlzQ3VycmVudCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxhc3RIaWRkZW5JdGVtLmVsLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5nZXRGaXJzdENvbnRlbnRDaGlsZCgpO1xuICAgICAgICB0aGlzLmxhc3RIaWRkZW5JdGVtLmlzQ3VycmVudCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNsaWRlV2lkdGggPSB0aGlzLnNsaWRlcy5maXJzdC53aWR0aDtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZUxpc3RlbmVyID0gdGhpcy5yZW5kZXJlcjIubGlzdGVuKHRoaXMuc2xpZGVzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsICd0cmFuc2l0aW9uZW5kJywgKCkgPT4gdGhpcy5jaGVja0luZGV4KCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tJbmRleCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0Q3VycmVudEl0ZW1JbmRleCgpID09PSB0aGlzLmdldEFsbFNsaWRlc0NvdW50KCkgLSAxKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5zbGlkZXMuZmlyc3Q7XG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlU2xpZGUoaXRlbSwgZmFsc2UpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0Q3VycmVudEl0ZW1JbmRleCgpID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5zbGlkZXMubGFzdDtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVTbGlkZShpdGVtLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldExhc3RDb250ZW50Q2hpbGQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2xpZGVzQ291bnQoKSA+IDAgPyB0aGlzLnNsaWRlcy5nZXQodGhpcy5nZXRTbGlkZXNDb3VudCgpIC0gMSkuZWwubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgOiAnJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZpcnN0Q29udGVudENoaWxkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNsaWRlc0NvdW50KCkgPiAwID8gdGhpcy5zbGlkZXMuZ2V0KDApLmVsLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MIDogJyc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0U2xpZGUoaXRlbTogRWNsQ2Fyb3VzZWxJdGVtQ29tcG9uZW50LCBpZHg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpdGVtLmluZGV4ID0gaWR4O1xuICAgICAgICBpdGVtLmFyaWFMYWJlbCA9IGBzbGlkZSAke2lkeCArIDF9IG9mICR7dGhpcy5nZXRTbGlkZXNDb3VudCgpfWA7XG4gICAgICAgIGl0ZW0ud2lkdGggPSAxMDAgLyB0aGlzLmdldEFsbFNsaWRlc0NvdW50KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnb1RvTmV4dFNsaWRlKGlzTG9vcDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2YXRlU2xpZGUodGhpcy5nZXROZXh0U2xpZGUoaXNMb29wKSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnb1RvUHJldmlvdXNTbGlkZShpc0xvb3A6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmF0ZVNsaWRlKHRoaXMuZ2V0UHJldmlvdXNTbGlkZShpc0xvb3ApLCB0cnVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFjdGl2YXRlU2xpZGUoc2xpZGU6IEVjbENhcm91c2VsSXRlbUNvbXBvbmVudCwgd2l0aFRyYW5zaXRpb246IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHdpdGhUcmFuc2l0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zaXRpb25EdXJhdGlvbiA9IDAuNDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvbkR1cmF0aW9uID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2xpZGUpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0QWxsU2xpZGVzQXJyYXkoKS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgaXRlbS5pc0N1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2xpZGUuaXNDdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAod2l0aFRyYW5zaXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc2xpZGUubmV4dChuZXcgRWNsU2xpZGVFdmVudCh0aGlzLnNsaWRlcy5nZXQodGhpcy5nZXRDdXJyZW50U2xpZGVJbmRleCgpKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0xhc3RCdXR0b24oaW5kZXgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgYnV0dG9uc0xpc3QgPSB0aGlzLm5hdmlnYXRpb25CdXR0b25zO1xuICAgICAgICByZXR1cm4gaW5kZXggKyAxID49IGJ1dHRvbnNMaXN0Lmxlbmd0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRmlyc3RCdXR0b24oaW5kZXgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGluZGV4IDw9IDA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGFydFBsYXlpbmcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNQbGF5aW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc1BhdXNlZEZvcmNlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBsYXlTdWJqZWN0Lm5leHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0b3BQbGF5aW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzUGxheWluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzUGF1c2VkRm9yY2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wU3ViamVjdC5uZXh0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXVzZVBsYXlpbmcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RvcFN1YmplY3QubmV4dCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzdW1lUGxheWluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc1BsYXlpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnBsYXlTdWJqZWN0Lm5leHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE5leHRTbGlkZShpc0xvb3A6IGJvb2xlYW4pOiBFY2xDYXJvdXNlbEl0ZW1Db21wb25lbnQge1xuICAgICAgICBjb25zdCBzbGlkZXNDb3VudCA9IHRoaXMuZ2V0U2xpZGVzQ291bnQoKTtcbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5nZXRDdXJyZW50U2xpZGVJbmRleCgpO1xuXG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggPj0gc2xpZGVzQ291bnQgLSAxKSB7XG4gICAgICAgICAgICBpZiAoaXNMb29wKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsU2xpZGVzQXJyYXkoKVt0aGlzLmdldEFsbFNsaWRlc0NvdW50KCkgLTFdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zbGlkZXMubGFzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNsaWRlcy5nZXQoY3VycmVudEluZGV4ICsgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFsbFNsaWRlc0FycmF5KCk6IEVjbENhcm91c2VsSXRlbUNvbXBvbmVudFtdIHtcbiAgICAgICAgcmV0dXJuIFsuLi5bdGhpcy5maXJzdEhpZGRlbkl0ZW1dLCAuLi50aGlzLnNsaWRlcy50b0FycmF5KCksIC4uLlt0aGlzLmxhc3RIaWRkZW5JdGVtXV07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQcmV2aW91c1NsaWRlKGlzTG9vcDogYm9vbGVhbik6IEVjbENhcm91c2VsSXRlbUNvbXBvbmVudCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuZ2V0Q3VycmVudFNsaWRlSW5kZXgoKTtcblxuICAgICAgICBpZiAoY3VycmVudEluZGV4IDw9IDApIHtcbiAgICAgICAgICAgIGlmKGlzTG9vcCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEFsbFNsaWRlc0FycmF5KClbMF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNsaWRlcy5maXJzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNsaWRlcy5nZXQoY3VycmVudEluZGV4IC0gMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNsaWRlc0NvdW50KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnNsaWRlcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBbGxTbGlkZXNDb3VudCgpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5oYXNDb250cm9scygpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zbGlkZXMubGVuZ3RoICsgMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNsaWRlcy5sZW5ndGhcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNOb1NsaWRlU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5zbGlkZXMuc29tZSgoaXRlbSkgPT4gaXRlbS5pc0N1cnJlbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25OYXZpZ2F0aW9uQnV0dG9uVGFiQW5kU2hpZnQoZTogS2V5Ym9hcmRFdmVudCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBidXR0b246IEVsZW1lbnRSZWYgPSB0aGlzLm5hdmlnYXRpb25CdXR0b25zLmdldCh0aGlzLmdldEN1cnJlbnRTbGlkZUluZGV4KCkpO1xuICAgICAgICBpZiAoYnV0dG9uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1BsYXlpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3BQbGF5aW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNGaXJzdEJ1dHRvbihpbmRleCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBsYXlCdXR0b24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzT25CdXR0b24odGhpcy5wbGF5QnV0dG9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnBhdXNlQnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c09uQnV0dG9uKHRoaXMucGF1c2VCdXR0b24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvUHJldmlvdXNTbGlkZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgYnV0dG9uOiBFbGVtZW50UmVmID0gdGhpcy5uYXZpZ2F0aW9uQnV0dG9ucy5nZXQodGhpcy5nZXRDdXJyZW50U2xpZGVJbmRleCgpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzT25CdXR0b24oYnV0dG9uKTtcbiAgICAgICAgICAgIH0sIHRoaXMuVElNRU9VVF9JTlRFUlZBTCk7XG4gICAgICAgIH1cbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25OYXZpZ2F0aW9uQnV0dG9uVGFiKGUsIGluZGV4KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzTGFzdEJ1dHRvbihpbmRleCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQnV0dG9uVmlzaWJsZSh0aGlzLnByZXZCdXR0b24pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c09uQnV0dG9uKHRoaXMucHJldkJ1dHRvbik7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvTmV4dFNsaWRlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBidXR0b246IEVsZW1lbnRSZWYgPSB0aGlzLm5hdmlnYXRpb25CdXR0b25zLmdldCh0aGlzLmdldEN1cnJlbnRTbGlkZUluZGV4KCkpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNPbkJ1dHRvbihidXR0b24pO1xuICAgICAgICAgICAgfSwgdGhpcy5USU1FT1VUX0lOVEVSVkFMKTtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25OYXZpZ2F0aW9uQnV0dG9uQXJyb3dSaWdodChlOiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nb1RvTmV4dFNsaWRlKGZhbHNlKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbjogRWxlbWVudFJlZiA9IHRoaXMubmF2aWdhdGlvbkJ1dHRvbnMuZ2V0KHRoaXMuZ2V0Q3VycmVudFNsaWRlSW5kZXgoKSk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzT25CdXR0b24oYnV0dG9uKTtcbiAgICAgICAgfSwgdGhpcy5USU1FT1VUX0lOVEVSVkFMKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25OYXZpZ2F0aW9uQnV0dG9uQXJyb3dMZWZ0KGU6IEtleWJvYXJkRXZlbnQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNGaXJzdEJ1dHRvbihpbmRleCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBsYXlCdXR0b24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzT25CdXR0b24odGhpcy5wbGF5QnV0dG9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnBhdXNlQnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c09uQnV0dG9uKHRoaXMucGF1c2VCdXR0b24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvUHJldmlvdXNTbGlkZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgYnV0dG9uOiBFbGVtZW50UmVmID0gdGhpcy5uYXZpZ2F0aW9uQnV0dG9ucy5nZXQodGhpcy5nZXRDdXJyZW50U2xpZGVJbmRleCgpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzT25CdXR0b24oYnV0dG9uKTtcbiAgICAgICAgICAgIH0sIHRoaXMuVElNRU9VVF9JTlRFUlZBTCk7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9ic2VydmVCcmVha3BvaW50Q2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jZGtCcmVha3BvaW50T2JzZXJ2ZXJcbiAgICAgICAgICAgIC5vYnNlcnZlKFtcbiAgICAgICAgICAgICAgICAnKG1heC13aWR0aDogNzY4cHgpJyxcbiAgICAgICAgICAgICAgICAnKG1heC13aWR0aDogOTk3cHgpJyxcbiAgICAgICAgICAgICAgICAnKG1pbi13aWR0aDogOTk4cHgpJyxcbiAgICAgICAgICAgICAgICAnKG1pbi13aWR0aDogMTE0MHB4KSBhbmQgKG1heC13aWR0aDogMTI2MHB4KScsXG4gICAgICAgICAgICAgICAgJyhtaW4td2lkdGg6IDExNDBweCknLFxuICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNNb2JpbGVCcmVha3BvaW50ID0gcmVzdWx0LmJyZWFrcG9pbnRzWycobWF4LXdpZHRoOiA3NjhweCknXTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzVGFibGV0QnJlYWtwb2ludCA9IHJlc3VsdC5icmVha3BvaW50c1snKG1pbi13aWR0aDogOTk4cHgpJ107XG4gICAgICAgICAgICAgICAgdGhpcy5pc0Rlc2t0b3BCcmVha3BvaW50ID0gcmVzdWx0LmJyZWFrcG9pbnRzWycobWluLXdpZHRoOiAxMTQwcHgpIGFuZCAobWF4LXdpZHRoOiAxMjYwcHgpJ107XG4gICAgICAgICAgICAgICAgdGhpcy5pc0xhcmdlRGVza3RvcEJyZWFrcG9pbnQgPSByZXN1bHQuYnJlYWtwb2ludHNbJyhtaW4td2lkdGg6IDExNDBweCknXTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmJyZWFrcG9pbnRzWycobWF4LXdpZHRoOiA5OTdweCknXSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVzZXRIZWlnaHQoKSwgMjAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGVCcmVha3BvaW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcFBsYXlpbmcoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1RhYmxldEJyZWFrcG9pbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNoZWNrQmFubmVySGVpZ2h0cygpLCAyMDApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTGFyZ2VEZXNrdG9wQnJlYWtwb2ludCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQnV0dG9uRGlzcGxheSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgb2JzZXJ2ZUVsZW1lbnRTaXplQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KS5vYnNlcnZlKHRoaXMuY2Fyb3VzZWxDb250YWluZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNCdXR0b25EaXNwbGF5KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzQnV0dG9uTmF2VmlzaWJsZSA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmdldFNsaWRlc0NvdW50KCkgPD0gMSkge1xuICAgICAgICAgICAgdGhpcy5pc0J1dHRvbk5hdlZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tCYW5uZXJIZWlnaHRzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBoZWlnaHRWYWx1ZXMgPSB0aGlzLnNsaWRlcy5tYXAoKHNsaWRlKT0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IHNsaWRlLmJhbm5lcj8uZWwubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnaGVpZ2h0JywgaGVpZ2h0KTtcbiAgICAgICAgICAgIGlmIChoZWlnaHQgPT09ICdhdXRvJykge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE51bWJlci5pc05hTihoZWlnaHQpIHx8IGhlaWdodCA9PT0gMTAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaGVpZ2h0O1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBlbGVtZW50SGVpZ2h0cyA9IGhlaWdodFZhbHVlcy5maWx0ZXIoKGhlaWdodCk9PiBoZWlnaHQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgY29uc3QgdGFsbGVzdEVsZW1lbnRIZWlnaHQgPSBNYXRoLm1heCguLi5lbGVtZW50SGVpZ2h0cyk7XG4gICAgICAgIGlmICh0YWxsZXN0RWxlbWVudEhlaWdodCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2xpZGVzLmZvckVhY2goKHNsaWRlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmFubmVyID0gc2xpZGUuYmFubmVyO1xuICAgICAgICAgICAgICAgIGlmIChiYW5uZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFubmVySW1hZ2UgPSBiYW5uZXIuZWNsQmFubmVySW1hZ2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIyLnNldFN0eWxlKGJhbm5lci5lbC5uYXRpdmVFbGVtZW50LCAnaGVpZ2h0JywgYCR7dGFsbGVzdEVsZW1lbnRIZWlnaHR9cHhgKVxuICAgICAgICAgICAgICAgICAgICBpZiAoYmFubmVySW1hZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIyLnNldFN0eWxlKGJhbm5lckltYWdlLmVsLm5hdGl2ZUVsZW1lbnQsICdhc3BlY3RSYXRpbycsICdhdXRvJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmVzZXRIaWRkZW5JdGVtcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldEhlaWdodCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nZXRBbGxTbGlkZXNBcnJheSgpLmZvckVhY2goKHNsaWRlKT0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJhbm5lciA9IHNsaWRlLmJhbm5lcjtcbiAgICAgICAgICAgIGlmIChiYW5uZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiYW5uZXJJbWFnZSA9IHNsaWRlLmJhbm5lci5lY2xCYW5uZXJJbWFnZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyMi5zZXRTdHlsZShiYW5uZXIuZWwubmF0aXZlRWxlbWVudCwgJ2hlaWdodCcsICcnKVxuICAgICAgICAgICAgICAgIGlmIChiYW5uZXJJbWFnZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyMi5zZXRTdHlsZShiYW5uZXJJbWFnZS5lbC5uYXRpdmVFbGVtZW50LCAnYXNwZWN0UmF0aW8nLCAnJylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlc2V0SGlkZGVuSXRlbXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0SGlkZGVuSXRlbXMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmhhc0NvbnRyb2xzKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyc3RIaWRkZW5JdGVtLmVsLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5nZXRMYXN0Q29udGVudENoaWxkKCk7XG4gICAgICAgICAgICB0aGlzLmxhc3RIaWRkZW5JdGVtLmVsLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5nZXRGaXJzdENvbnRlbnRDaGlsZCgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGRpdiAjY2Fyb3VzZWxDb250YWluZXIgY2xhc3M9XCJlY2wtY2Fyb3VzZWxfX2NvbnRhaW5lclwiIFtjbGFzcy5lY2wtY2Fyb3VzZWwtY29udGFpbmVyLS1wYWRkZWRdPVwiaXNQYWRkZWQoKVwiPlxuICAgIDxkaXYgI3NsaWRlc0NvbnRhaW5lciAoa2V5dXApPVwib25GaXJzdENhcm91c2VsRWxlbWVudFByZXNzKCRldmVudClcIiBjbGFzcz1cImVjbC1jYXJvdXNlbF9fc2xpZGVzXCJcbiAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImdldENhcm91c2VsU2xpZGVzV2lkdGgoKVwiIFtzdHlsZS5sZWZ0LnB4XT1cIiFpc1J0bCA/IGdldENhcm91c2VsU2xpZGVzT2Zmc2V0TGVmdCgpIDogbnVsbFwiXG4gICAgICAgIFtzdHlsZS5yaWdodC5weF09XCJpc1J0bCA/IGdldENhcm91c2VsU2xpZGVzT2Zmc2V0UmlnaHQoKSA6IG51bGxcIlxuICAgICAgICBbc3R5bGUudHJhbnNpdGlvbi1kdXJhdGlvbi5zXT1cInRyYW5zaXRpb25EdXJhdGlvblwiIChtb3VzZW92ZXIpPVwib25TbGlkZUhvdmVyKClcIiAobW91c2VvdXQpPVwib25TbGlkZUhvdmVyb3V0KClcIj5cblxuICAgICAgICBAaWYoaGFzQ29udHJvbHMoKSl7XG4gICAgICAgIDxlY2wtY2Fyb3VzZWwtaXRlbSAjZmlyc3RIaWRkZW5JdGVtIFtzdHlsZS53aWR0aC4lXT1cInNsaWRlV2lkdGhcIj48L2VjbC1jYXJvdXNlbC1pdGVtPlxuICAgICAgICB9XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cblxuICAgICAgICBAaWYoaGFzQ29udHJvbHMoKSl7XG4gICAgICAgIDxlY2wtY2Fyb3VzZWwtaXRlbSAjbGFzdEhpZGRlbkl0ZW0gW3N0eWxlLndpZHRoLiVdPVwic2xpZGVXaWR0aFwiPjwvZWNsLWNhcm91c2VsLWl0ZW0+XG4gICAgICAgIH1cblxuICAgIDwvZGl2PlxuPC9kaXY+XG5AaWYoaXNCdXR0b25OYXZWaXNpYmxlKSB7XG48YnV0dG9uICNwcmV2QnV0dG9uIGNsYXNzPVwiZWNsLWJ1dHRvbiBlY2wtYnV0dG9uLS1naG9zdCBlY2wtY2Fyb3VzZWxfX3ByZXYgZWNsLWJ1dHRvbi0taWNvbi1vbmx5XCIgdHlwZT1cImJ1dHRvblwiXG4gICAgKGNsaWNrKT1cIm9uUHJldmlvdXNTbGlkZUNsaWNrKClcIj5cbiAgICA8c3BhbiBjbGFzcz1cImVjbC1idXR0b25fX2NvbnRhaW5lclwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImVjbC1idXR0b25fX2xhYmVsXCI+XG4gICAgICAgICAgICB7eyAnZWNsLmNhcm91c2VsLk5FWFQtU0xJREVTJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxlY2wtaWNvbiBpY29uPVwiY29ybmVyLWFycm93XCIgc2l6ZT1cIm1cIiB0cmFuc2Zvcm09XCJyb3RhdGUtMjcwXCIgY2xhc3M9XCJlY2wtYnV0dG9uX19pY29uXCI+IDwvZWNsLWljb24+XG4gICAgPC9zcGFuPlxuPC9idXR0b24+XG59XG5cbkBpZihoYXNDb250cm9scygpKXtcbjxkaXYgY2xhc3M9XCJlY2wtY2Fyb3VzZWxfX2NvbnRyb2xzXCI+XG4gICAgPGRpdiBjbGFzcz1cImVjbC1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVjbC1jYXJvdXNlbF9fYXV0b3BsYXlcIj5cbiAgICAgICAgICAgIDxidXR0b24gI3BsYXlCdXR0b24gY2xhc3M9XCJlY2wtYnV0dG9uIGVjbC1idXR0b24tLWdob3N0IGVjbC1jYXJvdXNlbF9fcGxheSBlY2wtYnV0dG9uLS1pY29uLW9ubHlcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBbc3R5bGUuZGlzcGxheV09XCJpc1BsYXlpbmcgPyAnbm9uZScgOiAnZmxleCdcIiAoa2V5ZG93bik9XCJvblBsYXlLZXlib2FyZFByZXNzKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblBsYXlDbGljaygpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlY2wtYnV0dG9uX19jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlY2wtYnV0dG9uX19sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2VjbC5jYXJvdXNlbC5QTEFZJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxlY2wtaWNvbiBpY29uPVwicGxheS1vdXRsaW5lXCIgc2l6ZT1cIm1cIiBjbGFzcz1cImVjbC1idXR0b25fX2ljb24gZWNsLWNhcm91c2VsX19pY29uLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9lY2wtaWNvbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8YnV0dG9uICNwYXVzZUJ1dHRvbiBjbGFzcz1cImVjbC1idXR0b24gZWNsLWJ1dHRvbi0tZ2hvc3QgZWNsLWNhcm91c2VsX19wYXVzZSBlY2wtYnV0dG9uLS1pY29uLW9ubHlcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBbc3R5bGUuZGlzcGxheV09XCJpc1BsYXlpbmcgPyAnZmxleCcgOiAnbm9uZSdcIiAoa2V5ZG93bik9XCJvblBsYXlLZXlib2FyZFByZXNzKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblBhdXNlQ2xpY2soKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWNsLWJ1dHRvbl9fY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWNsLWJ1dHRvbl9fbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdlY2wuY2Fyb3VzZWwuUEFVU0UnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGVjbC1pY29uIGljb249XCJwYXVzZVwiIHNpemU9XCJtXCIgY2xhc3M9XCJlY2wtYnV0dG9uX19pY29uIGVjbC1jYXJvdXNlbF9faWNvbi1kZWZhdWx0XCI+IDwvZWNsLWljb24+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVjbC1jYXJvdXNlbF9fbmF2aWdhdGlvblwiPlxuICAgICAgICAgICAgQGZvciAoc2xpZGUgb2Ygc2xpZGVzOyBsZXQgaSA9ICRpbmRleDsgdHJhY2sgc2xpZGUpIHtcbiAgICAgICAgICAgIDxidXR0b24gI2N1cnJCdXR0b24gW2F0dHIuYXJpYS1jdXJyZW50XT1cImkgPT09IGdldEN1cnJlbnRTbGlkZUluZGV4KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZWNsLWJ1dHRvbiBlY2wtYnV0dG9uLS1naG9zdCBlY2wtY2Fyb3VzZWxfX25hdmlnYXRpb24taXRlbVwiIChjbGljayk9XCJvblNsaWRlQ29udHJvbENsaWNrKHNsaWRlKVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25OYXZCdG5LZXlib2FyZFByZXNzKCRldmVudCwgaSlcIj5cbiAgICAgICAgICAgICAgICB7eyBpICsgMSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG59XG5AaWYoaXNCdXR0b25OYXZWaXNpYmxlKSB7XG48YnV0dG9uICNuZXh0QnV0dG9uIGNsYXNzPVwiZWNsLWJ1dHRvbiBlY2wtYnV0dG9uLS1naG9zdCBlY2wtY2Fyb3VzZWxfX25leHQgZWNsLWJ1dHRvbi0taWNvbi1vbmx5XCIgdHlwZT1cImJ1dHRvblwiXG4gICAgKGNsaWNrKT1cIm9uTmV4dFNsaWRlQ2xpY2soKVwiPlxuICAgIDxzcGFuIGNsYXNzPVwiZWNsLWJ1dHRvbl9fY29udGFpbmVyXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZWNsLWJ1dHRvbl9fbGFiZWxcIj5cbiAgICAgICAgICAgIHt7ICdlY2wuY2Fyb3VzZWwuTkVYVC1TTElERVMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGVjbC1pY29uIGljb249XCJjb3JuZXItYXJyb3dcIiBzaXplPVwibVwiIHRyYW5zZm9ybT1cInJvdGF0ZS05MFwiIGNsYXNzPVwiZWNsLWJ1dHRvbl9faWNvblwiPiA8L2VjbC1pY29uPlxuICAgIDwvc3Bhbj5cblxuPC9idXR0b24+XG59Il19
@@ -7,11 +7,11 @@ import { EclCarouselComponent } from './ecl-carousel.component';
7
7
  import * as i0 from "@angular/core";
8
8
  const COMPONENTS = [EclCarouselComponent, EclCarouselItemComponent];
9
9
  export class EclCarouselComponentModule {
10
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: EclCarouselComponentModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
11
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.0", ngImport: i0, type: EclCarouselComponentModule, declarations: [EclCarouselComponent, EclCarouselItemComponent], imports: [CommonModule, EclIconComponentModule, TranslateModule], exports: [EclCarouselComponent, EclCarouselItemComponent] }); }
12
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: EclCarouselComponentModule, imports: [CommonModule, EclIconComponentModule, TranslateModule] }); }
10
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.1", ngImport: i0, type: EclCarouselComponentModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
11
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.0-next.1", ngImport: i0, type: EclCarouselComponentModule, declarations: [EclCarouselComponent, EclCarouselItemComponent], imports: [CommonModule, EclIconComponentModule, TranslateModule], exports: [EclCarouselComponent, EclCarouselItemComponent] }); }
12
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.0-next.1", ngImport: i0, type: EclCarouselComponentModule, imports: [CommonModule, EclIconComponentModule, TranslateModule] }); }
13
13
  }
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: EclCarouselComponentModule, decorators: [{
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.1", ngImport: i0, type: EclCarouselComponentModule, decorators: [{
15
15
  type: NgModule,
16
16
  args: [{
17
17
  imports: [CommonModule, EclIconComponentModule, TranslateModule],
@@ -19,4 +19,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
19
19
  declarations: [...COMPONENTS],
20
20
  }]
21
21
  }] });
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNsLWNhcm91c2VsLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9lY2wtY2Fyb3VzZWwvZWNsLWNhcm91c2VsLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBRWhFLE1BQU0sVUFBVSxHQUFHLENBQUMsb0JBQW9CLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztBQU9wRSxNQUFNLE9BQU8sMEJBQTBCO2lJQUExQiwwQkFBMEI7a0lBQTFCLDBCQUEwQixpQkFQbkIsb0JBQW9CLEVBQUUsd0JBQXdCLGFBR3BELFlBQVksRUFBRSxzQkFBc0IsRUFBRSxlQUFlLGFBSC9DLG9CQUFvQixFQUFFLHdCQUF3QjtrSUFPckQsMEJBQTBCLFlBSnpCLFlBQVksRUFBRSxzQkFBc0IsRUFBRSxlQUFlOzsyRkFJdEQsMEJBQTBCO2tCQUx0QyxRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxzQkFBc0IsRUFBRSxlQUFlLENBQUM7b0JBQ2hFLE9BQU8sRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDO29CQUN4QixZQUFZLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQztpQkFDaEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRWNsSWNvbkNvbXBvbmVudE1vZHVsZSB9IGZyb20gJy4uL2VjbC1pY29uL2VjbC1pY29uLm1vZHVsZSc7XG5pbXBvcnQgeyBFY2xDYXJvdXNlbEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2VjbC1jYXJvdXNlbC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFY2xDYXJvdXNlbENvbXBvbmVudCB9IGZyb20gJy4vZWNsLWNhcm91c2VsLmNvbXBvbmVudCc7XG5cbmNvbnN0IENPTVBPTkVOVFMgPSBbRWNsQ2Fyb3VzZWxDb21wb25lbnQsIEVjbENhcm91c2VsSXRlbUNvbXBvbmVudF07XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRWNsSWNvbkNvbXBvbmVudE1vZHVsZSwgVHJhbnNsYXRlTW9kdWxlXSxcbiAgICBleHBvcnRzOiBbLi4uQ09NUE9ORU5UU10sXG4gICAgZGVjbGFyYXRpb25zOiBbLi4uQ09NUE9ORU5UU10sXG59KVxuZXhwb3J0IGNsYXNzIEVjbENhcm91c2VsQ29tcG9uZW50TW9kdWxlIHt9XG4iXX0=
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNsLWNhcm91c2VsLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9lY2wtY2Fyb3VzZWwvZWNsLWNhcm91c2VsLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBRWhFLE1BQU0sVUFBVSxHQUFHLENBQUMsb0JBQW9CLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztBQU9wRSxNQUFNLE9BQU8sMEJBQTBCO3dJQUExQiwwQkFBMEI7eUlBQTFCLDBCQUEwQixpQkFQbkIsb0JBQW9CLEVBQUUsd0JBQXdCLGFBR3BELFlBQVksRUFBRSxzQkFBc0IsRUFBRSxlQUFlLGFBSC9DLG9CQUFvQixFQUFFLHdCQUF3Qjt5SUFPckQsMEJBQTBCLFlBSnpCLFlBQVksRUFBRSxzQkFBc0IsRUFBRSxlQUFlOztrR0FJdEQsMEJBQTBCO2tCQUx0QyxRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxzQkFBc0IsRUFBRSxlQUFlLENBQUM7b0JBQ2hFLE9BQU8sRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDO29CQUN4QixZQUFZLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQztpQkFDaEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRWNsSWNvbkNvbXBvbmVudE1vZHVsZSB9IGZyb20gJy4uL2VjbC1pY29uL2VjbC1pY29uLm1vZHVsZSc7XG5pbXBvcnQgeyBFY2xDYXJvdXNlbEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2VjbC1jYXJvdXNlbC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFY2xDYXJvdXNlbENvbXBvbmVudCB9IGZyb20gJy4vZWNsLWNhcm91c2VsLmNvbXBvbmVudCc7XG5cbmNvbnN0IENPTVBPTkVOVFMgPSBbRWNsQ2Fyb3VzZWxDb21wb25lbnQsIEVjbENhcm91c2VsSXRlbUNvbXBvbmVudF07XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRWNsSWNvbkNvbXBvbmVudE1vZHVsZSwgVHJhbnNsYXRlTW9kdWxlXSxcbiAgICBleHBvcnRzOiBbLi4uQ09NUE9ORU5UU10sXG4gICAgZGVjbGFyYXRpb25zOiBbLi4uQ09NUE9ORU5UU10sXG59KVxuZXhwb3J0IGNsYXNzIEVjbENhcm91c2VsQ29tcG9uZW50TW9kdWxlIHt9XG4iXX0=