@eui/ecl 17.0.0-next.6 → 17.0.0-next.8
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.
- package/assets/i18n-ecl/bg.json +1 -0
- package/assets/i18n-ecl/cs.json +1 -0
- package/assets/i18n-ecl/da.json +1 -0
- package/assets/i18n-ecl/de.json +1 -0
- package/assets/i18n-ecl/el.json +1 -0
- package/assets/i18n-ecl/en.json +1 -0
- package/assets/i18n-ecl/es.json +1 -0
- package/assets/i18n-ecl/et.json +1 -0
- package/assets/i18n-ecl/fi.json +1 -0
- package/assets/i18n-ecl/fr.json +1 -0
- package/assets/i18n-ecl/ga.json +1 -0
- package/assets/i18n-ecl/hr.json +1 -0
- package/assets/i18n-ecl/hu.json +1 -0
- package/assets/i18n-ecl/it.json +1 -0
- package/assets/i18n-ecl/lt.json +1 -0
- package/assets/i18n-ecl/lv.json +1 -0
- package/assets/i18n-ecl/mt.json +1 -0
- package/assets/i18n-ecl/nl.json +1 -0
- package/assets/i18n-ecl/pl.json +1 -0
- package/assets/i18n-ecl/pt.json +1 -0
- package/assets/i18n-ecl/ro.json +1 -0
- package/assets/i18n-ecl/sk.json +1 -0
- package/assets/i18n-ecl/sl.json +1 -0
- package/assets/i18n-ecl/sv.json +1 -0
- package/esm2022/lib/components/ecl-accordion/ecl-accordion-item.component.mjs +3 -3
- package/esm2022/lib/components/ecl-accordion/ecl-accordion.component.mjs +3 -3
- package/esm2022/lib/components/ecl-accordion/ecl-accordion.module.mjs +4 -4
- package/esm2022/lib/components/ecl-app/deprecated/common/ecl-app.component.mjs +6 -6
- package/esm2022/lib/components/ecl-app/deprecated/ecl-app-core/ecl-app-core.component.mjs +6 -6
- package/esm2022/lib/components/ecl-app/deprecated/ecl-app-core/ecl-app-core.module.mjs +4 -4
- package/esm2022/lib/components/ecl-app/deprecated/ecl-app-harmonised/ecl-app-harmonised.component.mjs +6 -6
- package/esm2022/lib/components/ecl-app/deprecated/ecl-app-harmonised/ecl-app-harmonised.module.mjs +4 -4
- package/esm2022/lib/components/ecl-app/deprecated/ecl-app-standardised/ecl-app-standardised.component.mjs +6 -6
- package/esm2022/lib/components/ecl-app/deprecated/ecl-app-standardised/ecl-app-standardised.module.mjs +4 -4
- package/esm2022/lib/components/ecl-app/ecl-app.component.mjs +5 -5
- package/esm2022/lib/components/ecl-app/ecl-app.module.mjs +4 -4
- package/esm2022/lib/components/ecl-banner/deprecated/ecl-hero-banner/ecl-hero-banner-credit.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-banner/deprecated/ecl-hero-banner/ecl-hero-banner-cta-link.directive.mjs +5 -5
- package/esm2022/lib/components/ecl-banner/deprecated/ecl-hero-banner/ecl-hero-banner-description.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-banner/deprecated/ecl-hero-banner/ecl-hero-banner-title.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-banner/deprecated/ecl-hero-banner/ecl-hero-banner.component.mjs +4 -4
- package/esm2022/lib/components/ecl-banner/deprecated/ecl-hero-banner/ecl-hero-banner.module.mjs +4 -4
- package/esm2022/lib/components/ecl-banner/deprecated/ecl-page-banner/ecl-page-banner-credit.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-banner/deprecated/ecl-page-banner/ecl-page-banner-cta-link.directive.mjs +5 -5
- package/esm2022/lib/components/ecl-banner/deprecated/ecl-page-banner/ecl-page-banner-description.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-banner/deprecated/ecl-page-banner/ecl-page-banner-title.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-banner/deprecated/ecl-page-banner/ecl-page-banner.component.mjs +4 -4
- package/esm2022/lib/components/ecl-banner/deprecated/ecl-page-banner/ecl-page-banner.module.mjs +4 -4
- package/esm2022/lib/components/ecl-banner/ecl-banner-credit.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-banner/ecl-banner-description.directive.mjs +6 -6
- package/esm2022/lib/components/ecl-banner/ecl-banner-picture.directive.mjs +6 -6
- package/esm2022/lib/components/ecl-banner/ecl-banner-title.directive.mjs +6 -6
- package/esm2022/lib/components/ecl-banner/ecl-banner.component.mjs +4 -4
- package/esm2022/lib/components/ecl-banner/ecl-banner.module.mjs +4 -4
- package/esm2022/lib/components/ecl-base.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-blockquote/ecl-blockquote-picture.directive.mjs +6 -6
- package/esm2022/lib/components/ecl-blockquote/ecl-blockquote.component.mjs +16 -6
- package/esm2022/lib/components/ecl-blockquote/ecl-blockquote.module.mjs +4 -4
- package/esm2022/lib/components/ecl-breadcrumb/deprecated/common/ecl-breadcrumb-segment.component.mjs +5 -5
- package/esm2022/lib/components/ecl-breadcrumb/deprecated/common/ecl-breadcrumb.component.mjs +5 -5
- package/esm2022/lib/components/ecl-breadcrumb/deprecated/ecl-breadcrumb-core/ecl-breadcrumb-core-segment.component.mjs +5 -5
- package/esm2022/lib/components/ecl-breadcrumb/deprecated/ecl-breadcrumb-core/ecl-breadcrumb-core.component.mjs +4 -4
- package/esm2022/lib/components/ecl-breadcrumb/deprecated/ecl-breadcrumb-core/ecl-breadcrumb-core.module.mjs +4 -4
- package/esm2022/lib/components/ecl-breadcrumb/deprecated/ecl-breadcrumb-harmonised/ecl-breadcrumb-harmonised-segment.component.mjs +5 -5
- package/esm2022/lib/components/ecl-breadcrumb/deprecated/ecl-breadcrumb-harmonised/ecl-breadcrumb-harmonised.component.mjs +4 -4
- package/esm2022/lib/components/ecl-breadcrumb/deprecated/ecl-breadcrumb-harmonised/ecl-breadcrumb-harmonised.module.mjs +4 -4
- package/esm2022/lib/components/ecl-breadcrumb/deprecated/ecl-breadcrumb-standardised/ecl-breadcrumb-standardised-segment.component.mjs +5 -5
- package/esm2022/lib/components/ecl-breadcrumb/deprecated/ecl-breadcrumb-standardised/ecl-breadcrumb-standardised.component.mjs +4 -4
- package/esm2022/lib/components/ecl-breadcrumb/deprecated/ecl-breadcrumb-standardised/ecl-breadcrumb-standardised.module.mjs +4 -4
- package/esm2022/lib/components/ecl-breadcrumb/ecl-breadcrumb-segment.component.mjs +5 -5
- package/esm2022/lib/components/ecl-breadcrumb/ecl-breadcrumb.component.mjs +5 -5
- package/esm2022/lib/components/ecl-breadcrumb/ecl-breadcrumb.module.mjs +4 -4
- package/esm2022/lib/components/ecl-button/ecl-button-label.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-button/ecl-button.component.mjs +5 -5
- package/esm2022/lib/components/ecl-button/ecl-button.module.mjs +4 -4
- package/esm2022/lib/components/ecl-card/ecl-card-body.component.mjs +3 -3
- package/esm2022/lib/components/ecl-card/ecl-card-image/ecl-card-image.component.mjs +3 -3
- package/esm2022/lib/components/ecl-card/ecl-card-picture.directive.mjs +6 -6
- package/esm2022/lib/components/ecl-card/ecl-card.component.mjs +3 -3
- package/esm2022/lib/components/ecl-card/ecl-card.module.mjs +4 -4
- package/esm2022/lib/components/ecl-carousel/ecl-carousel-item.component.mjs +3 -3
- package/esm2022/lib/components/ecl-carousel/ecl-carousel.component.mjs +7 -14
- package/esm2022/lib/components/ecl-carousel/ecl-carousel.module.mjs +4 -4
- package/esm2022/lib/components/ecl-category-filter/ecl-category-filter/ecl-category-filter.component.mjs +5 -5
- package/esm2022/lib/components/ecl-category-filter/ecl-category-filter-list/ecl-category-filter-item.component.mjs +4 -4
- package/esm2022/lib/components/ecl-category-filter/ecl-category-filter-list/ecl-category-filter-list.component.mjs +4 -4
- package/esm2022/lib/components/ecl-category-filter/ecl-category-filter.module.mjs +4 -4
- package/esm2022/lib/components/ecl-checkbox/ecl-checkbox-help.component.mjs +3 -3
- package/esm2022/lib/components/ecl-checkbox/ecl-checkbox-input.directive.mjs +6 -6
- package/esm2022/lib/components/ecl-checkbox/ecl-checkbox-label.component.mjs +3 -3
- package/esm2022/lib/components/ecl-checkbox/ecl-checkbox.directive.mjs +5 -4
- package/esm2022/lib/components/ecl-checkbox/ecl-checkbox.module.mjs +22 -8
- package/esm2022/lib/components/ecl-content-block/ecl-content-block-elements.directive.mjs +51 -51
- package/esm2022/lib/components/ecl-content-block/ecl-content-block.component.mjs +3 -3
- package/esm2022/lib/components/ecl-content-block/ecl-content-block.module.mjs +4 -4
- package/esm2022/lib/components/ecl-content-item/ecl-content-item-image.directive.mjs +6 -6
- package/esm2022/lib/components/ecl-content-item/ecl-content-item.component.mjs +4 -4
- package/esm2022/lib/components/ecl-content-item/ecl-content-item.module.mjs +4 -4
- package/esm2022/lib/components/ecl-date-block/ecl-date-block.component.mjs +5 -5
- package/esm2022/lib/components/ecl-date-block/ecl-date-block.module.mjs +4 -4
- package/esm2022/lib/components/ecl-date-picker/ecl-date-picker.directive.mjs +5 -5
- package/esm2022/lib/components/ecl-date-picker/ecl-date-picker.module.mjs +4 -4
- package/esm2022/lib/components/ecl-expandable/ecl-expandable.component.mjs +3 -3
- package/esm2022/lib/components/ecl-expandable/ecl-expandable.module.mjs +4 -4
- package/esm2022/lib/components/ecl-fact-figures/ecl-fact-figures-description.component.mjs +3 -3
- package/esm2022/lib/components/ecl-fact-figures/ecl-fact-figures-item.component.mjs +3 -3
- package/esm2022/lib/components/ecl-fact-figures/ecl-fact-figures-title.component.mjs +3 -3
- package/esm2022/lib/components/ecl-fact-figures/ecl-fact-figures-value.component.mjs +3 -3
- package/esm2022/lib/components/ecl-fact-figures/ecl-fact-figures-view-all.component.mjs +3 -3
- package/esm2022/lib/components/ecl-fact-figures/ecl-fact-figures.component.mjs +3 -3
- package/esm2022/lib/components/ecl-fact-figures/ecl-fact-figures.module.mjs +4 -4
- package/esm2022/lib/components/ecl-featured/ecl-featured-item-description.component.mjs +3 -3
- package/esm2022/lib/components/ecl-featured/ecl-featured-item-link.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-featured/ecl-featured-item.component.mjs +3 -3
- package/esm2022/lib/components/ecl-featured/ecl-featured.component.mjs +3 -3
- package/esm2022/lib/components/ecl-featured/ecl-featured.module.mjs +4 -4
- package/esm2022/lib/components/ecl-feedback-message/ecl-feedback-message.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-feedback-message/ecl-feedback-message.module.mjs +4 -4
- package/esm2022/lib/components/ecl-file/ecl-file-item/ecl-file-item.component.mjs +5 -5
- package/esm2022/lib/components/ecl-file/ecl-file-items/ecl-file-items.component.mjs +3 -3
- package/esm2022/lib/components/ecl-file/ecl-file-picture.directive.mjs +6 -6
- package/esm2022/lib/components/ecl-file/ecl-file-taxonomy/ecl-file-taxonomy.component.mjs +3 -3
- package/esm2022/lib/components/ecl-file/ecl-file.component.mjs +3 -3
- package/esm2022/lib/components/ecl-file/ecl-file.module.mjs +4 -4
- package/esm2022/lib/components/ecl-file-upload/ecl-file-upload.directive.mjs +6 -6
- package/esm2022/lib/components/ecl-file-upload/ecl-file-upload.module.mjs +4 -4
- package/esm2022/lib/components/ecl-form-group/ecl-form-group.component.mjs +3 -3
- package/esm2022/lib/components/ecl-form-group/ecl-form-group.module.mjs +4 -4
- package/esm2022/lib/components/ecl-form-label/ecl-form-label.component.mjs +3 -3
- package/esm2022/lib/components/ecl-form-label/ecl-form-label.module.mjs +4 -4
- package/esm2022/lib/components/ecl-gallery/ecl-gallery-footer.component.mjs +5 -5
- package/esm2022/lib/components/ecl-gallery/ecl-gallery-item.component.mjs +22 -7
- package/esm2022/lib/components/ecl-gallery/ecl-gallery-media.directive.mjs +8 -8
- package/esm2022/lib/components/ecl-gallery/ecl-gallery.component.mjs +91 -29
- package/esm2022/lib/components/ecl-gallery/ecl-gallery.module.mjs +4 -4
- package/esm2022/lib/components/ecl-help-block/ecl-help-block.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-help-block/ecl-help-block.module.mjs +4 -4
- package/esm2022/lib/components/ecl-icon/ecl-icon.component.mjs +5 -5
- package/esm2022/lib/components/ecl-icon/ecl-icon.module.mjs +4 -4
- package/esm2022/lib/components/ecl-inpage-navigation/ecl-inpage-navigation-item.component.mjs +3 -3
- package/esm2022/lib/components/ecl-inpage-navigation/ecl-inpage-navigation.component.mjs +3 -3
- package/esm2022/lib/components/ecl-inpage-navigation/ecl-inpage-navigation.module.mjs +4 -4
- package/esm2022/lib/components/ecl-label/ecl-label.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-label/ecl-label.module.mjs +4 -4
- package/esm2022/lib/components/ecl-language-list/ecl-language-list-item.component.mjs +5 -5
- package/esm2022/lib/components/ecl-language-list/ecl-language-list.component.mjs +5 -5
- package/esm2022/lib/components/ecl-language-list/ecl-language-list.module.mjs +4 -4
- package/esm2022/lib/components/ecl-link/ecl-link-label.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-link/ecl-link.directive.mjs +5 -5
- package/esm2022/lib/components/ecl-link/ecl-link.module.mjs +4 -4
- package/esm2022/lib/components/ecl-list/ecl-description-list-definition/ecl-description-list-definition.component.mjs +3 -3
- package/esm2022/lib/components/ecl-list/ecl-description-list-definition-item.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-list/ecl-list.directive.mjs +20 -20
- package/esm2022/lib/components/ecl-list/ecl-list.module.mjs +4 -4
- package/esm2022/lib/components/ecl-list-illustration/ecl-list-illustration-icon.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-list-illustration/ecl-list-illustration-image/ecl-list-illustration-image.component.mjs +3 -3
- package/esm2022/lib/components/ecl-list-illustration/ecl-list-illustration-item.component.mjs +4 -4
- package/esm2022/lib/components/ecl-list-illustration/ecl-list-illustration-picture.directive.mjs +6 -6
- package/esm2022/lib/components/ecl-list-illustration/ecl-list-illustration.component.mjs +3 -3
- package/esm2022/lib/components/ecl-list-illustration/ecl-list-illustration.module.mjs +4 -4
- package/esm2022/lib/components/ecl-media-container/ecl-media-container-iframe.directive.mjs +5 -5
- package/esm2022/lib/components/ecl-media-container/ecl-media-container-item.directive.mjs +5 -5
- package/esm2022/lib/components/ecl-media-container/ecl-media-container-picture.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-media-container/ecl-media-container.component.mjs +16 -7
- package/esm2022/lib/components/ecl-media-container/ecl-media-container.module.mjs +4 -4
- package/esm2022/lib/components/ecl-menu/ecl-menu/ecl-menu-item.component.mjs +5 -5
- package/esm2022/lib/components/ecl-menu/ecl-menu/ecl-menu.component.mjs +9 -5
- package/esm2022/lib/components/ecl-menu/ecl-menu-mega/ecl-menu-mega-item.component.mjs +4 -4
- package/esm2022/lib/components/ecl-menu/ecl-menu-mega/ecl-menu-mega.component.mjs +5 -5
- package/esm2022/lib/components/ecl-menu/ecl-menu.module.mjs +4 -4
- package/esm2022/lib/components/ecl-message/ecl-message-title.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-message/ecl-message.component.mjs +3 -3
- package/esm2022/lib/components/ecl-message/ecl-message.module.mjs +4 -4
- package/esm2022/lib/components/ecl-modal/ecl-modal-body.component.mjs +3 -3
- package/esm2022/lib/components/ecl-modal/ecl-modal-close.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-modal/ecl-modal-footer.component.mjs +4 -4
- package/esm2022/lib/components/ecl-modal/ecl-modal-header.component.mjs +3 -3
- package/esm2022/lib/components/ecl-modal/ecl-modal-trigger.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-modal/ecl-modal.component.mjs +4 -4
- package/esm2022/lib/components/ecl-modal/ecl-modal.module.mjs +4 -4
- package/esm2022/lib/components/ecl-multiselect/boldText.pipe.mjs +36 -0
- package/esm2022/lib/components/ecl-multiselect/ecl-multiselect-dropdown/ecl-multiselect-dropdown.component.mjs +449 -0
- package/esm2022/lib/components/ecl-multiselect/ecl-multiselect-input/ecl-multiselect-input.component.mjs +92 -0
- package/esm2022/lib/components/ecl-multiselect/ecl-multiselect-optgroup/ecl-multiselect-optgroup.component.mjs +33 -0
- package/esm2022/lib/components/ecl-multiselect/ecl-multiselect-option/ecl-multiselect-option.component.mjs +130 -0
- package/esm2022/lib/components/ecl-multiselect/ecl-multiselect-option.directive.mjs +6 -15
- package/esm2022/lib/components/ecl-multiselect/ecl-multiselect.component.mjs +88 -824
- package/esm2022/lib/components/ecl-multiselect/ecl-multiselect.module.mjs +49 -7
- package/esm2022/lib/components/ecl-navigation-list/ecl-navigation-list-image/ecl-navigation-list-image.component.mjs +3 -3
- package/esm2022/lib/components/ecl-navigation-list/ecl-navigation-list-item.component.mjs +4 -4
- package/esm2022/lib/components/ecl-navigation-list/ecl-navigation-list-picture.directive.mjs +6 -6
- package/esm2022/lib/components/ecl-navigation-list/ecl-navigation-list.component.mjs +3 -3
- package/esm2022/lib/components/ecl-navigation-list/ecl-navigation-list.module.mjs +4 -4
- package/esm2022/lib/components/ecl-news-ticker/ecl-news-ticker-item.component.mjs +5 -5
- package/esm2022/lib/components/ecl-news-ticker/ecl-news-ticker.component.mjs +5 -5
- package/esm2022/lib/components/ecl-news-ticker/ecl-news-ticker.module.mjs +4 -4
- package/esm2022/lib/components/ecl-page-header/deprecated/common/ecl-page-header.component.mjs +3 -3
- package/esm2022/lib/components/ecl-page-header/deprecated/ecl-page-header-core/ecl-page-header-core-description.directive.mjs +9 -9
- package/esm2022/lib/components/ecl-page-header/deprecated/ecl-page-header-core/ecl-page-header-core-meta.directive.mjs +6 -6
- package/esm2022/lib/components/ecl-page-header/deprecated/ecl-page-header-core/ecl-page-header-core-title.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-page-header/deprecated/ecl-page-header-core/ecl-page-header-core.component.mjs +3 -3
- package/esm2022/lib/components/ecl-page-header/deprecated/ecl-page-header-core/ecl-page-header-core.module.mjs +4 -4
- package/esm2022/lib/components/ecl-page-header/deprecated/ecl-page-header-harmonised/ecl-page-header-harmonised-description.directive.mjs +9 -9
- package/esm2022/lib/components/ecl-page-header/deprecated/ecl-page-header-harmonised/ecl-page-header-harmonised-meta.directive.mjs +6 -6
- package/esm2022/lib/components/ecl-page-header/deprecated/ecl-page-header-harmonised/ecl-page-header-harmonised-title.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-page-header/deprecated/ecl-page-header-harmonised/ecl-page-header-harmonised.component.mjs +3 -3
- package/esm2022/lib/components/ecl-page-header/deprecated/ecl-page-header-harmonised/ecl-page-header-harmonised.module.mjs +4 -4
- package/esm2022/lib/components/ecl-page-header/deprecated/ecl-page-header-standardised/ecl-page-header-standardised-description.directive.mjs +9 -9
- package/esm2022/lib/components/ecl-page-header/deprecated/ecl-page-header-standardised/ecl-page-header-standardised-meta.directive.mjs +6 -6
- package/esm2022/lib/components/ecl-page-header/deprecated/ecl-page-header-standardised/ecl-page-header-standardised-title.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-page-header/deprecated/ecl-page-header-standardised/ecl-page-header-standardised.component.mjs +3 -3
- package/esm2022/lib/components/ecl-page-header/deprecated/ecl-page-header-standardised/ecl-page-header-standardised.module.mjs +4 -4
- package/esm2022/lib/components/ecl-page-header/ecl-page-header-background.directive.mjs +6 -6
- package/esm2022/lib/components/ecl-page-header/ecl-page-header-description/ecl-page-header-description.component.mjs +3 -3
- package/esm2022/lib/components/ecl-page-header/ecl-page-header-description.directive.mjs +9 -9
- package/esm2022/lib/components/ecl-page-header/ecl-page-header-meta.directive.mjs +6 -6
- package/esm2022/lib/components/ecl-page-header/ecl-page-header-title.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-page-header/ecl-page-header.component.mjs +3 -3
- package/esm2022/lib/components/ecl-page-header/ecl-page-header.module.mjs +4 -4
- package/esm2022/lib/components/ecl-pagination/ecl-pagination-item.component.mjs +3 -3
- package/esm2022/lib/components/ecl-pagination/ecl-pagination.component.mjs +3 -3
- package/esm2022/lib/components/ecl-pagination/ecl-pagination.module.mjs +4 -4
- package/esm2022/lib/components/ecl-popover/ecl-popover-content.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-popover/ecl-popover-list.directive.mjs +9 -9
- package/esm2022/lib/components/ecl-popover/ecl-popover-toggle.directive.mjs +5 -5
- package/esm2022/lib/components/ecl-popover/ecl-popover.component.mjs +3 -3
- package/esm2022/lib/components/ecl-popover/ecl-popover.module.mjs +4 -4
- package/esm2022/lib/components/ecl-radio/ecl-radio-help.component.mjs +3 -3
- package/esm2022/lib/components/ecl-radio/ecl-radio-input.directive.mjs +6 -6
- package/esm2022/lib/components/ecl-radio/ecl-radio-label.component.mjs +3 -3
- package/esm2022/lib/components/ecl-radio/ecl-radio.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-radio/ecl-radio.module.mjs +4 -4
- package/esm2022/lib/components/ecl-range/ecl-range-value.component.mjs +3 -3
- package/esm2022/lib/components/ecl-range/ecl-range.directive.mjs +6 -6
- package/esm2022/lib/components/ecl-range/ecl-range.module.mjs +4 -4
- package/esm2022/lib/components/ecl-rating-field/ecl-rating-field.component.mjs +5 -5
- package/esm2022/lib/components/ecl-rating-field/ecl-rating-field.module.mjs +4 -4
- package/esm2022/lib/components/ecl-search-form/ecl-search-form.component.mjs +3 -3
- package/esm2022/lib/components/ecl-search-form/ecl-search-form.module.mjs +4 -4
- package/esm2022/lib/components/ecl-select/ecl-select-container.component.mjs +3 -3
- package/esm2022/lib/components/ecl-select/ecl-select.directive.mjs +6 -6
- package/esm2022/lib/components/ecl-select/ecl-select.module.mjs +4 -4
- package/esm2022/lib/components/ecl-site-footer/deprecated/common/ecl-footer.component.mjs +5 -5
- package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-core/ecl-footer-core.component.mjs +3 -3
- package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-core/ecl-footer-core.module.mjs +4 -4
- package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-core/ecl-footer-elements/ecl-footer-core-column.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-core/ecl-footer-elements/ecl-footer-core-description.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-core/ecl-footer-elements/ecl-footer-core-link.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-core/ecl-footer-elements/ecl-footer-core-list.directive.mjs +6 -6
- package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-core/ecl-footer-elements/ecl-footer-core-section.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-core/ecl-footer-elements/ecl-footer-core-title.directive.mjs +6 -6
- package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-harmonised/ecl-footer-elements/ecl-footer-harmonised-column.directive.mjs +9 -9
- package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-harmonised/ecl-footer-elements/ecl-footer-harmonised-description.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-harmonised/ecl-footer-elements/ecl-footer-harmonised-link.directive.mjs +9 -9
- package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-harmonised/ecl-footer-elements/ecl-footer-harmonised-list.directive.mjs +15 -15
- package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-harmonised/ecl-footer-elements/ecl-footer-harmonised-section.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-harmonised/ecl-footer-elements/ecl-footer-harmonised-title.directive.mjs +6 -6
- package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-harmonised/ecl-footer-harmonised.component.mjs +3 -3
- package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-harmonised/ecl-footer-harmonised.module.mjs +4 -4
- package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-standardised/ecl-footer-elements/ecl-footer-standardised-column.directive.mjs +9 -9
- package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-standardised/ecl-footer-elements/ecl-footer-standardised-description.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-standardised/ecl-footer-elements/ecl-footer-standardised-link.directive.mjs +9 -9
- package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-standardised/ecl-footer-elements/ecl-footer-standardised-list.directive.mjs +6 -6
- package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-standardised/ecl-footer-elements/ecl-footer-standardised-section.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-standardised/ecl-footer-elements/ecl-footer-standardised-title.directive.mjs +6 -6
- package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-standardised/ecl-footer-standardised.component.mjs +3 -3
- package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-standardised/ecl-footer-standardised.module.mjs +4 -4
- package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/ec/ecl-site-footer-fixed-content.mjs +5 -5
- package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/ecl-site-footer-column.directive.mjs +9 -9
- package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/ecl-site-footer-description.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/ecl-site-footer-link.directive.mjs +15 -15
- package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/ecl-site-footer-list.directive.mjs +15 -15
- package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/ecl-site-footer-section.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/ecl-site-footer-title.directive.mjs +6 -6
- package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/eu/ecl-site-footer-fixed-content.mjs +5 -5
- package/esm2022/lib/components/ecl-site-footer/ecl-site-footer.component.mjs +5 -5
- package/esm2022/lib/components/ecl-site-footer/ecl-site-footer.module.mjs +4 -4
- package/esm2022/lib/components/ecl-site-header/action/ecl-site-header-action.component.mjs +3 -3
- package/esm2022/lib/components/ecl-site-header/banner-top/ecl-site-header-banner-top.component.mjs +3 -3
- package/esm2022/lib/components/ecl-site-header/cta/ecl-site-header-cta.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-site-header/deprecated/common/ecl-site-header-action.component.mjs +3 -3
- package/esm2022/lib/components/ecl-site-header/deprecated/common/ecl-site-header-banner-top.component.mjs +3 -3
- package/esm2022/lib/components/ecl-site-header/deprecated/common/ecl-site-header-language.component.mjs +3 -3
- package/esm2022/lib/components/ecl-site-header/deprecated/common/ecl-site-header-login.component.mjs +3 -3
- package/esm2022/lib/components/ecl-site-header/deprecated/common/ecl-site-header-search.component.mjs +3 -3
- package/esm2022/lib/components/ecl-site-header/deprecated/common/ecl-site-header.component.mjs +5 -5
- package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-core/action/ecl-site-header-core-action.component.mjs +3 -3
- package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-core/ecl-site-header-core.component.mjs +5 -5
- package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-core/ecl-site-header-core.module.mjs +4 -4
- package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-core/language/ecl-site-header-core-language.component.mjs +3 -3
- package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-core/login/ecl-site-header-core-login-details.directive.mjs +6 -6
- package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-core/login/ecl-site-header-core-login.component.mjs +3 -3
- package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-core/search/ecl-site-header-core-search.component.mjs +3 -3
- package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-harmonised/action/ecl-site-header-harmonised-action.component.mjs +3 -3
- package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-harmonised/banner-top/ecl-site-header-harmonised-banner-top.component.mjs +3 -3
- package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-harmonised/ecl-site-header-harmonised.component.mjs +5 -5
- package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-harmonised/ecl-site-header-harmonised.module.mjs +4 -4
- package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-harmonised/language/ecl-site-header-harmonised-language.component.mjs +3 -3
- package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-harmonised/login/ecl-site-header-harmonised-login-details.directive.mjs +6 -6
- package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-harmonised/login/ecl-site-header-harmonised-login.component.mjs +3 -3
- package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-harmonised/search/ecl-site-header-harmonised-search.component.mjs +3 -3
- package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-standardised/action/ecl-site-header-standardised-action.component.mjs +3 -3
- package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-standardised/banner-top/ecl-site-header-standardised-banner-top.component.mjs +3 -3
- package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-standardised/cta/ecl-site-header-standardised-cta.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-standardised/ecl-site-header-standardised.component.mjs +5 -5
- package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-standardised/ecl-site-header-standardised.module.mjs +4 -4
- package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-standardised/language/ecl-site-header-standardised-language.component.mjs +3 -3
- package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-standardised/login/ecl-site-header-standardised-login-details.directive.mjs +6 -6
- package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-standardised/login/ecl-site-header-standardised-login.component.mjs +3 -3
- package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-standardised/search/ecl-site-header-standardised-search.component.mjs +3 -3
- package/esm2022/lib/components/ecl-site-header/ecl-site-header-environment/ecl-site-header-environment.component.mjs +5 -5
- package/esm2022/lib/components/ecl-site-header/ecl-site-header.component.mjs +5 -5
- package/esm2022/lib/components/ecl-site-header/ecl-site-header.module.mjs +4 -4
- package/esm2022/lib/components/ecl-site-header/language/ecl-site-header-language-popover.component.mjs +5 -5
- package/esm2022/lib/components/ecl-site-header/language/ecl-site-header-language.component.mjs +22 -6
- package/esm2022/lib/components/ecl-site-header/login/ecl-site-header-login-details.directive.mjs +6 -6
- package/esm2022/lib/components/ecl-site-header/login/ecl-site-header-login.component.mjs +3 -3
- package/esm2022/lib/components/ecl-site-header/message/ecl-site-header-message.component.mjs +3 -3
- package/esm2022/lib/components/ecl-site-header/search/ecl-site-header-search.component.mjs +8 -4
- package/esm2022/lib/components/ecl-social-media-follow/ecl-social-media-follow-item.component.mjs +3 -3
- package/esm2022/lib/components/ecl-social-media-follow/ecl-social-media-follow-link.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-social-media-follow/ecl-social-media-follow.component.mjs +3 -3
- package/esm2022/lib/components/ecl-social-media-follow/ecl-social-media-follow.module.mjs +4 -4
- package/esm2022/lib/components/ecl-social-media-share/ecl-social-media-share-item.component.mjs +3 -3
- package/esm2022/lib/components/ecl-social-media-share/ecl-social-media-share-link.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-social-media-share/ecl-social-media-share.component.mjs +3 -3
- package/esm2022/lib/components/ecl-social-media-share/ecl-social-media-share.module.mjs +4 -4
- package/esm2022/lib/components/ecl-spinner/ecl-spinner-label.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-spinner/ecl-spinner.component.mjs +3 -3
- package/esm2022/lib/components/ecl-spinner/ecl-spinner.module.mjs +4 -4
- package/esm2022/lib/components/ecl-sticky-container/ecl-sticky-container.component.mjs +3 -3
- package/esm2022/lib/components/ecl-sticky-container/ecl-sticky-container.module.mjs +4 -4
- package/esm2022/lib/components/ecl-table/ecl-table-sort-button.component.mjs +5 -5
- package/esm2022/lib/components/ecl-table/ecl-table.directive.mjs +41 -25
- package/esm2022/lib/components/ecl-table/ecl-table.module.mjs +11 -8
- package/esm2022/lib/components/ecl-tabs/ecl-tab-label.component.mjs +3 -3
- package/esm2022/lib/components/ecl-tabs/ecl-tab-more.component.mjs +5 -5
- package/esm2022/lib/components/ecl-tabs/ecl-tab.component.mjs +5 -5
- package/esm2022/lib/components/ecl-tabs/ecl-tabs.component.mjs +5 -5
- package/esm2022/lib/components/ecl-tabs/ecl-tabs.module.mjs +4 -4
- package/esm2022/lib/components/ecl-tag/ecl-tag.component.mjs +3 -3
- package/esm2022/lib/components/ecl-tag/ecl-tag.module.mjs +4 -4
- package/esm2022/lib/components/ecl-text-area/ecl-text-area.directive.mjs +6 -6
- package/esm2022/lib/components/ecl-text-area/ecl-text-area.module.mjs +4 -4
- package/esm2022/lib/components/ecl-text-input/ecl-text-input.directive.mjs +7 -6
- package/esm2022/lib/components/ecl-text-input/ecl-text-input.module.mjs +7 -8
- package/esm2022/lib/components/ecl-timeline/ecl-timeline-item-label.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-timeline/ecl-timeline-item-title.directive.mjs +3 -3
- package/esm2022/lib/components/ecl-timeline/ecl-timeline-item-toggler.component.mjs +3 -3
- package/esm2022/lib/components/ecl-timeline/ecl-timeline-item.component.mjs +4 -4
- package/esm2022/lib/components/ecl-timeline/ecl-timeline.component.mjs +4 -4
- package/esm2022/lib/components/ecl-timeline/ecl-timeline.module.mjs +4 -4
- package/esm2022/lib/model/ecl-multiselect-option.model.mjs +2 -0
- package/esm2022/lib/services/ecl-default-language.service.mjs +5 -5
- package/esm2022/lib/services/ecl-theme.service.mjs +5 -5
- package/esm2022/lib/shared/ecl-all.module.mjs +4 -4
- package/esm2022/lib/utils/constants/constants.mjs +11 -0
- package/esm2022/lib/utils/constants/index.mjs +2 -0
- package/esm2022/lib/utils/directives/ecl-click-outside/ecl-click-outside.directive.mjs +5 -5
- package/esm2022/lib/utils/directives/ecl-hidden/ecl-hidden.directive.mjs +3 -3
- package/esm2022/lib/utils/directives/ecl-hidden/ecl-hidden.module.mjs +4 -4
- package/esm2022/lib/utils/index.mjs +2 -1
- package/fesm2022/eui-ecl.mjs +2409 -2269
- package/fesm2022/eui-ecl.mjs.map +1 -1
- package/lib/components/ecl-blockquote/ecl-blockquote.component.d.ts +12 -2
- package/lib/components/ecl-blockquote/ecl-blockquote.component.d.ts.map +1 -1
- package/lib/components/ecl-carousel/ecl-carousel.component.d.ts +2 -3
- package/lib/components/ecl-carousel/ecl-carousel.component.d.ts.map +1 -1
- package/lib/components/ecl-checkbox/ecl-checkbox.directive.d.ts +1 -1
- package/lib/components/ecl-checkbox/ecl-checkbox.directive.d.ts.map +1 -1
- package/lib/components/ecl-checkbox/ecl-checkbox.module.d.ts +7 -7
- package/lib/components/ecl-checkbox/ecl-checkbox.module.d.ts.map +1 -1
- package/lib/components/ecl-gallery/ecl-gallery-item.component.d.ts +11 -4
- package/lib/components/ecl-gallery/ecl-gallery-item.component.d.ts.map +1 -1
- package/lib/components/ecl-gallery/ecl-gallery.component.d.ts +39 -5
- package/lib/components/ecl-gallery/ecl-gallery.component.d.ts.map +1 -1
- package/lib/components/ecl-media-container/ecl-media-container.component.d.ts +7 -3
- package/lib/components/ecl-media-container/ecl-media-container.component.d.ts.map +1 -1
- package/lib/components/ecl-menu/ecl-menu/ecl-menu.component.d.ts +1 -0
- package/lib/components/ecl-menu/ecl-menu/ecl-menu.component.d.ts.map +1 -1
- package/lib/components/ecl-multiselect/boldText.pipe.d.ts +11 -0
- package/lib/components/ecl-multiselect/boldText.pipe.d.ts.map +1 -0
- package/lib/components/ecl-multiselect/ecl-multiselect-dropdown/ecl-multiselect-dropdown.component.d.ts +94 -0
- package/lib/components/ecl-multiselect/ecl-multiselect-dropdown/ecl-multiselect-dropdown.component.d.ts.map +1 -0
- package/lib/components/ecl-multiselect/ecl-multiselect-input/ecl-multiselect-input.component.d.ts +26 -0
- package/lib/components/ecl-multiselect/ecl-multiselect-input/ecl-multiselect-input.component.d.ts.map +1 -0
- package/lib/components/ecl-multiselect/ecl-multiselect-optgroup/ecl-multiselect-optgroup.component.d.ts +19 -0
- package/lib/components/ecl-multiselect/ecl-multiselect-optgroup/ecl-multiselect-optgroup.component.d.ts.map +1 -0
- package/lib/components/ecl-multiselect/ecl-multiselect-option/ecl-multiselect-option.component.d.ts +49 -0
- package/lib/components/ecl-multiselect/ecl-multiselect-option/ecl-multiselect-option.component.d.ts.map +1 -0
- package/lib/components/ecl-multiselect/ecl-multiselect-option.directive.d.ts +3 -6
- package/lib/components/ecl-multiselect/ecl-multiselect-option.directive.d.ts.map +1 -1
- package/lib/components/ecl-multiselect/ecl-multiselect.component.d.ts +19 -113
- package/lib/components/ecl-multiselect/ecl-multiselect.component.d.ts.map +1 -1
- package/lib/components/ecl-multiselect/ecl-multiselect.module.d.ts +12 -3
- package/lib/components/ecl-multiselect/ecl-multiselect.module.d.ts.map +1 -1
- package/lib/components/ecl-site-header/language/ecl-site-header-language.component.d.ts +4 -0
- package/lib/components/ecl-site-header/language/ecl-site-header-language.component.d.ts.map +1 -1
- package/lib/components/ecl-site-header/search/ecl-site-header-search.component.d.ts +1 -0
- package/lib/components/ecl-site-header/search/ecl-site-header-search.component.d.ts.map +1 -1
- package/lib/components/ecl-table/ecl-table.directive.d.ts +5 -0
- package/lib/components/ecl-table/ecl-table.directive.d.ts.map +1 -1
- package/lib/components/ecl-table/ecl-table.module.d.ts +1 -1
- package/lib/components/ecl-table/ecl-table.module.d.ts.map +1 -1
- package/lib/components/ecl-text-input/ecl-text-input.directive.d.ts +1 -1
- package/lib/components/ecl-text-input/ecl-text-input.directive.d.ts.map +1 -1
- package/lib/components/ecl-text-input/ecl-text-input.module.d.ts +3 -3
- package/lib/components/ecl-text-input/ecl-text-input.module.d.ts.map +1 -1
- package/lib/model/ecl-multiselect-option.model.d.ts +8 -0
- package/lib/model/ecl-multiselect-option.model.d.ts.map +1 -0
- package/lib/utils/constants/constants.d.ts +10 -0
- package/lib/utils/constants/constants.d.ts.map +1 -0
- package/lib/utils/constants/index.d.ts +2 -0
- package/lib/utils/constants/index.d.ts.map +1 -0
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/index.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,875 +1,152 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { v4 as uuidgen } from 'uuid';
|
|
2
|
+
import { Component, ContentChildren, EventEmitter, forwardRef, HostBinding, Input, Output, ViewEncapsulation, } from '@angular/core';
|
|
3
|
+
import { NG_VALUE_ACCESSOR, NgControl } from '@angular/forms';
|
|
5
4
|
import { coerceBoolean } from '@eui/base';
|
|
6
5
|
import { Subject, takeUntil } from 'rxjs';
|
|
7
6
|
import { ECLBaseDirective } from '../ecl-base.directive';
|
|
8
|
-
import {
|
|
9
|
-
import { EclIconComponent } from '../ecl-icon/ecl-icon.component';
|
|
7
|
+
import { EclMultiselectDropdownComponent } from './ecl-multiselect-dropdown/ecl-multiselect-dropdown.component';
|
|
10
8
|
import { EclMultiselectOptionDirective } from './ecl-multiselect-option.directive';
|
|
9
|
+
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
11
10
|
import * as i0 from "@angular/core";
|
|
12
|
-
import * as i1 from "@angular/forms";
|
|
13
|
-
import * as i2 from "@ngx-translate/core";
|
|
14
|
-
var KeyCode;
|
|
15
|
-
(function (KeyCode) {
|
|
16
|
-
KeyCode["ARROW_UP"] = "ArrowUp";
|
|
17
|
-
KeyCode["ARROW_DOWN"] = "ArrowDown";
|
|
18
|
-
KeyCode["ARROW_LEFT"] = "ArrowLeft";
|
|
19
|
-
KeyCode["ARROW_RIGHT"] = "ArrowRight";
|
|
20
|
-
KeyCode["ESCAPE"] = "Escape";
|
|
21
|
-
KeyCode["ENTER"] = "Enter";
|
|
22
|
-
KeyCode["TAB"] = "Tab";
|
|
23
|
-
})(KeyCode || (KeyCode = {}));
|
|
24
11
|
export class EclMultiselectComponent extends ECLBaseDirective {
|
|
12
|
+
get isInvalid() {
|
|
13
|
+
return this._isInvalid;
|
|
14
|
+
}
|
|
15
|
+
set isInvalid(value) {
|
|
16
|
+
this._isInvalid = value;
|
|
17
|
+
if (this.multiselectComponent) {
|
|
18
|
+
this.multiselectComponent.isInvalid = value;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
set disabled(value) {
|
|
22
|
+
if (this.multiselectComponent) {
|
|
23
|
+
this.multiselectComponent.disabled = coerceBooleanProperty(value);
|
|
24
|
+
}
|
|
25
|
+
this._disabled = coerceBooleanProperty(value);
|
|
26
|
+
}
|
|
27
|
+
get disabled() {
|
|
28
|
+
return this._disabled || undefined;
|
|
29
|
+
}
|
|
25
30
|
get cssClasses() {
|
|
26
31
|
return [super.getCssClasses('ecl-select')].join(' ').trim();
|
|
27
32
|
}
|
|
28
33
|
set eclPlaceholder(value) {
|
|
29
34
|
this._eclPlaceholder = value;
|
|
30
|
-
if (this.
|
|
31
|
-
this.
|
|
35
|
+
if (this.multiselectComponent) {
|
|
36
|
+
this.multiselectComponent.mainInputPlaceholder = value;
|
|
32
37
|
}
|
|
33
38
|
}
|
|
34
|
-
get
|
|
35
|
-
|
|
36
|
-
return this.ngControl.disabled || null;
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
return this._disabled || null;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
set disabled(value) {
|
|
43
|
-
this._disabled = coerceBooleanProperty(value);
|
|
39
|
+
get eclPlaceholder() {
|
|
40
|
+
return this._eclPlaceholder;
|
|
44
41
|
}
|
|
45
|
-
constructor(
|
|
42
|
+
constructor(injector, el, viewContainerRef, differs) {
|
|
46
43
|
super();
|
|
47
|
-
this.
|
|
44
|
+
this.injector = injector;
|
|
48
45
|
this.el = el;
|
|
49
46
|
this.viewContainerRef = viewContainerRef;
|
|
50
47
|
this.differs = differs;
|
|
51
|
-
this.translate = translate;
|
|
52
|
-
this.isInvalid = false;
|
|
53
48
|
this.eclChange = new EventEmitter();
|
|
54
|
-
this.eclSize = 'm';
|
|
55
49
|
this._disabled = false;
|
|
56
|
-
this.
|
|
57
|
-
this.
|
|
50
|
+
this._isInvalid = false;
|
|
51
|
+
this._eclPlaceholder = 'Select item';
|
|
58
52
|
this.destroy$ = new Subject();
|
|
59
|
-
this.noResultsFoundText = 'No results found';
|
|
60
|
-
this.CLASS_NO_RESULTS_FOUND = 'ecl-select__multiple-no-results';
|
|
61
|
-
this.selectAllLabelText = 'Select all';
|
|
62
|
-
this.closeText = 'Close';
|
|
63
|
-
this.clearAllText = 'Clear all';
|
|
64
|
-
this.propagateChange = (_) => { };
|
|
65
|
-
this.propagateTouched = () => { };
|
|
66
53
|
this.differ = this.differs.find([]).create();
|
|
67
|
-
|
|
68
|
-
|
|
54
|
+
}
|
|
55
|
+
ngDoCheck() {
|
|
56
|
+
const diff = this.differ.diff(this.eclOptionItems);
|
|
57
|
+
if (diff) {
|
|
58
|
+
if (this.multiselectComponent) {
|
|
59
|
+
this.multiselectComponent.multiOptionDirectives = this.eclOptionItems.toArray();
|
|
60
|
+
}
|
|
69
61
|
}
|
|
70
|
-
this.bindCallbacks();
|
|
71
62
|
}
|
|
72
63
|
ngOnInit() {
|
|
73
64
|
this.hostEl = this.getHostElement();
|
|
74
65
|
this.hostParentEl = this.getHostParentElement(this.hostEl);
|
|
75
66
|
this.hostWrapperEl = this.createHostWrapperContainer();
|
|
76
|
-
this.
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
this.
|
|
67
|
+
this.multiselectComponentHtml = this.createMultiselectComponent();
|
|
68
|
+
}
|
|
69
|
+
ngAfterContentInit() {
|
|
70
|
+
this.attachOptions();
|
|
80
71
|
if (this.hostParentEl != null) {
|
|
81
72
|
this.hideOriginalSelectComponent();
|
|
82
|
-
this.
|
|
83
|
-
this.buildMultiselectDropdown(false);
|
|
84
|
-
}
|
|
85
|
-
this.handleTranslations();
|
|
86
|
-
}
|
|
87
|
-
ngDoCheck() {
|
|
88
|
-
this.multiselectContainer.classList.toggle('ecl-select__container--disabled', this.disabled);
|
|
89
|
-
this.multiselectContainer.classList.toggle('ecl-select__container--invalid', this.isInvalid);
|
|
90
|
-
this.multiSelectInput.disabled = this.disabled;
|
|
91
|
-
const diff = this.differ.diff(this.eclOptionItems);
|
|
92
|
-
if (diff) {
|
|
93
|
-
this.removeAllOptions();
|
|
94
|
-
this.multiSelectOptions = [];
|
|
95
|
-
diff.forEachItem((item) => {
|
|
96
|
-
this.optionsWrapper.appendChild(this.createOption(item.item));
|
|
97
|
-
});
|
|
98
|
-
this.onOptionsChange();
|
|
99
|
-
this.updateCurrentValue();
|
|
100
|
-
this.updateSelectAllLabelText();
|
|
73
|
+
this.hostParentEl.appendChild(this.multiselectComponentHtml);
|
|
101
74
|
}
|
|
102
75
|
}
|
|
103
|
-
ngAfterViewInit() {
|
|
104
|
-
this.onOptionsChange();
|
|
105
|
-
}
|
|
106
76
|
ngOnDestroy() {
|
|
107
77
|
this.destroy$.next(true);
|
|
108
78
|
this.destroy$.unsubscribe();
|
|
109
|
-
this.removeAllListeners();
|
|
110
|
-
}
|
|
111
|
-
writeValue(values) {
|
|
112
|
-
this.resetComponent();
|
|
113
|
-
this.writeValues(values);
|
|
114
|
-
}
|
|
115
|
-
registerOnChange(fn) {
|
|
116
|
-
this.propagateChange = fn;
|
|
117
|
-
}
|
|
118
|
-
registerOnTouched(fn) {
|
|
119
|
-
this.propagateTouched = fn;
|
|
120
|
-
}
|
|
121
|
-
onEscapeKey(event) {
|
|
122
|
-
this.closeMultiselectDropdown();
|
|
123
|
-
}
|
|
124
|
-
onKeyUp(ev) {
|
|
125
|
-
const isClickInside = this.multiDropdown.contains(ev.target) || this.multiSelectInput.contains(ev.target);
|
|
126
|
-
if (!isClickInside) {
|
|
127
|
-
this.closeMultiselectDropdown();
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
createOption(el) {
|
|
131
|
-
if (el.isOptGroup()) {
|
|
132
|
-
return this.createOptGroup(el);
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
return this.createOptionWithCheckbox(el);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
createOptGroup(el) {
|
|
139
|
-
const id = uuidgen();
|
|
140
|
-
const div = document.createElement('div');
|
|
141
|
-
div.id = id;
|
|
142
|
-
div.classList.add('ecl-select__multiple-group');
|
|
143
|
-
const h5 = document.createElement('h5');
|
|
144
|
-
h5.classList.add('ecl-select__multiple-group__title');
|
|
145
|
-
h5.innerText = el.label;
|
|
146
|
-
div.appendChild(h5);
|
|
147
|
-
el.eclOptionItems.forEach((item) => div.appendChild(this.createOptionWithCheckbox(item)));
|
|
148
|
-
return div;
|
|
149
|
-
}
|
|
150
|
-
removeAllOptions() {
|
|
151
|
-
while (this.optionsWrapper.firstChild) {
|
|
152
|
-
this.optionsWrapper.firstChild.remove();
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
onOptionsChange() {
|
|
156
|
-
this.eclOptionItems.forEach((i) => i.changes.pipe(takeUntil(this.destroy$)).subscribe((e) => {
|
|
157
|
-
setTimeout(() => {
|
|
158
|
-
this.multiselectWrapper.removeChild(this.multiDropdown);
|
|
159
|
-
this.multiDropdown.remove();
|
|
160
|
-
this.multiSelectOptions = [];
|
|
161
|
-
this.multiSelectInput.value = null;
|
|
162
|
-
this.buildMultiselectDropdown(true);
|
|
163
|
-
});
|
|
164
|
-
}));
|
|
165
|
-
}
|
|
166
|
-
createNoResultsFound() {
|
|
167
|
-
const noResultsDiv = document.createElement('div');
|
|
168
|
-
noResultsDiv.classList.add(this.CLASS_NO_RESULTS_FOUND);
|
|
169
|
-
const textSpan = document.createElement('span');
|
|
170
|
-
textSpan.innerHTML = this.noResultsFoundText;
|
|
171
|
-
noResultsDiv.appendChild(textSpan);
|
|
172
|
-
return noResultsDiv;
|
|
173
79
|
}
|
|
174
80
|
hideOriginalSelectComponent() {
|
|
175
81
|
this.hostParentEl.replaceChild(this.hostWrapperEl, this.hostEl);
|
|
176
82
|
this.hostWrapperEl.appendChild(this.hostEl);
|
|
177
83
|
this.hostWrapperEl.classList.add('ecl-select__container--hidden');
|
|
178
84
|
}
|
|
179
|
-
createHtmlElements() {
|
|
180
|
-
this.hostParentEl.appendChild(this.multiselectWrapper);
|
|
181
|
-
this.multiselectWrapper.appendChild(this.multiselectContainer);
|
|
182
|
-
this.multiselectContainer.appendChild(this.selectIconContainerEl);
|
|
183
|
-
this.selectIconContainerEl.appendChild(this.createIconComponent());
|
|
184
|
-
}
|
|
185
|
-
buildMultiselectDropdown(withOptions) {
|
|
186
|
-
this.multiDropdown = this.createDropdownForMultiselect();
|
|
187
|
-
this.multiselectWrapper.appendChild(this.multiDropdown);
|
|
188
|
-
this.multiDropdown.appendChild(this.createSearchForMultiselect());
|
|
189
|
-
this.multiDropdown.appendChild(this.createMultiSelectAll());
|
|
190
|
-
this.optionsWrapper = this.createOptionsWrapper();
|
|
191
|
-
this.multiDropdown.appendChild(this.optionsWrapper);
|
|
192
|
-
if (withOptions) {
|
|
193
|
-
this.eclOptionItems.forEach((item) => {
|
|
194
|
-
this.optionsWrapper.appendChild(this.createOptionWithCheckbox(item));
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
this.multiDropdown.appendChild(this.createMultiselectToolbar());
|
|
198
|
-
this.updateSelectAllLabelText();
|
|
199
|
-
}
|
|
200
|
-
getHostElement() {
|
|
201
|
-
return this.el.nativeElement;
|
|
202
|
-
}
|
|
203
|
-
getHostParentElement(hostEl) {
|
|
204
|
-
return hostEl.parentElement;
|
|
205
|
-
}
|
|
206
85
|
createHostWrapperContainer() {
|
|
207
86
|
const wrapperContainer = document.createElement('div');
|
|
208
87
|
wrapperContainer.classList.add('ecl-select__container');
|
|
209
|
-
wrapperContainer.classList.add(
|
|
88
|
+
wrapperContainer.classList.add('ecl-select__container--m');
|
|
210
89
|
return wrapperContainer;
|
|
211
90
|
}
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
wrapperContainerMulti.classList.add('ecl-select__multiple');
|
|
215
|
-
return wrapperContainerMulti;
|
|
216
|
-
}
|
|
217
|
-
createSelectContainerMultiselect() {
|
|
218
|
-
const selectContainerMulti = document.createElement('div');
|
|
219
|
-
selectContainerMulti.classList.add('ecl-select__container');
|
|
220
|
-
selectContainerMulti.classList.add(`ecl-select__container--${this.eclSize}`);
|
|
221
|
-
if (this.disabled) {
|
|
222
|
-
selectContainerMulti.classList.add('ecl-select__container--disabled');
|
|
223
|
-
}
|
|
224
|
-
selectContainerMulti.appendChild(this.createMultiselectCounter());
|
|
225
|
-
this.multiSelectInput = document.createElement('input');
|
|
226
|
-
this.multiSelectInput.setAttribute('placeholder', this._eclPlaceholder || '');
|
|
227
|
-
this.multiSelectInput.readOnly = true;
|
|
228
|
-
this.multiSelectInput.setAttribute('type', 'text');
|
|
229
|
-
if (this.hostEl.hasAttribute('formControlName')) {
|
|
230
|
-
this.multiSelectInput.setAttribute('formControlName', this.hostEl.getAttribute('formControlName'));
|
|
231
|
-
}
|
|
232
|
-
this.multiSelectInput.addEventListener('click', this.handleClickOnMainInput);
|
|
233
|
-
this.multiSelectInput.classList.add('ecl-select');
|
|
234
|
-
this.multiSelectInput.classList.add('ecl-select__multiple-toggle');
|
|
235
|
-
this.multiSelectInput.addEventListener('keydown', this.handleKeydownOnMainInput);
|
|
236
|
-
if (this.disabled) {
|
|
237
|
-
this.multiSelectInput.disabled = true;
|
|
238
|
-
}
|
|
239
|
-
selectContainerMulti.appendChild(this.multiSelectInput);
|
|
240
|
-
return selectContainerMulti;
|
|
241
|
-
}
|
|
242
|
-
createMultiselectCounter() {
|
|
243
|
-
this.selectionCount = document.createElement('div');
|
|
244
|
-
this.selectionCount.classList.add('ecl-select-multiple-selections-counter');
|
|
245
|
-
const selectionCountText = document.createElement('span');
|
|
246
|
-
this.selectionCount.appendChild(selectionCountText);
|
|
247
|
-
return this.selectionCount;
|
|
248
|
-
}
|
|
249
|
-
showMultiselectCounter() {
|
|
250
|
-
this.selectionCount.classList.add('ecl-select-multiple-selections-counter--visible');
|
|
251
|
-
}
|
|
252
|
-
hideMultiselectCounter() {
|
|
253
|
-
this.selectionCount.classList.remove('ecl-select-multiple-selections-counter--visible');
|
|
254
|
-
}
|
|
255
|
-
createDropdownForMultiselect() {
|
|
256
|
-
const dropdownDiv = document.createElement('div');
|
|
257
|
-
dropdownDiv.classList.add('ecl-select__multiple-dropdown');
|
|
258
|
-
dropdownDiv.classList.add('ecl-select__container');
|
|
259
|
-
dropdownDiv.classList.add(`ecl-select__container--${this.eclSize}`);
|
|
260
|
-
dropdownDiv.style.display = 'none';
|
|
261
|
-
return dropdownDiv;
|
|
262
|
-
}
|
|
263
|
-
// search box to search among options
|
|
264
|
-
createSearchForMultiselect() {
|
|
265
|
-
this.multiSearch = document.createElement('input');
|
|
266
|
-
this.multiSearch.type = 'search';
|
|
267
|
-
this.multiSearch.classList.add('ecl-text-input');
|
|
268
|
-
this.multiSearch.placeholder = 'Search';
|
|
269
|
-
this.multiSearch.addEventListener('keydown', this.handleKeydownOnSearch);
|
|
270
|
-
this.multiSearch.addEventListener('keyup', this.onSearchOptions);
|
|
271
|
-
this.multiSearch.addEventListener('search', this.handleXBtnOnSearch);
|
|
272
|
-
this.searchEl = this.multiSearch;
|
|
273
|
-
return this.multiSearch;
|
|
274
|
-
}
|
|
275
|
-
createOptionWithCheckbox(el) {
|
|
276
|
-
const id = uuidgen();
|
|
277
|
-
const checkboxDiv = document.createElement('div');
|
|
278
|
-
if (el.cssClasses) {
|
|
279
|
-
el.cssClasses.split(' ').forEach((cl) => {
|
|
280
|
-
checkboxDiv.classList.add(cl);
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
|
-
const checkboxInput = this.createCheckboxInput(id, el.value);
|
|
284
|
-
if (el.disabled) {
|
|
285
|
-
checkboxDiv.classList.add('ecl-checkbox--disabled');
|
|
286
|
-
checkboxInput.disabled = true;
|
|
287
|
-
}
|
|
288
|
-
else {
|
|
289
|
-
checkboxInput.addEventListener('click', this.handleClickOnOption);
|
|
290
|
-
}
|
|
291
|
-
if (el.selected || this.selectedValues.indexOf(el.value) > -1) {
|
|
292
|
-
checkboxInput.checked = true;
|
|
293
|
-
this.multiSelectInput.value = this.multiSelectInput.value === '' ? el.label : this.multiSelectInput.value + ',' + el.label;
|
|
294
|
-
}
|
|
295
|
-
checkboxInput.addEventListener('keydown', this.handleKeydownOnOption);
|
|
296
|
-
checkboxDiv.appendChild(checkboxInput);
|
|
297
|
-
const checkboxLabel = this.createCheckboxLabel(el.label, id);
|
|
298
|
-
checkboxDiv.appendChild(checkboxLabel);
|
|
299
|
-
this.multiSelectOptions.push(checkboxDiv);
|
|
300
|
-
return checkboxDiv;
|
|
301
|
-
}
|
|
302
|
-
createCheckboxLabel(text, id) {
|
|
303
|
-
const checkboxLabel = this.viewContainerRef.createComponent(EclCheckboxLabelComponent);
|
|
304
|
-
checkboxLabel.location.nativeElement.htmlFor = id;
|
|
305
|
-
const textSpan = document.createElement('span');
|
|
306
|
-
textSpan.classList.add('ecl-checkbox__label-text');
|
|
307
|
-
textSpan.innerHTML = text;
|
|
308
|
-
checkboxLabel.location.nativeElement.appendChild(textSpan);
|
|
309
|
-
return checkboxLabel.location.nativeElement;
|
|
310
|
-
}
|
|
311
|
-
createCheckboxInput(id, value) {
|
|
312
|
-
const checkboxInput = document.createElement('input');
|
|
313
|
-
checkboxInput.type = 'checkbox';
|
|
314
|
-
checkboxInput.classList.add('ecl-checkbox__input');
|
|
315
|
-
checkboxInput.id = id;
|
|
316
|
-
checkboxInput.value = value;
|
|
317
|
-
return checkboxInput;
|
|
318
|
-
}
|
|
319
|
-
createMultiselectToolbar() {
|
|
320
|
-
this.multiselectToolbar = document.createElement('div');
|
|
321
|
-
this.multiselectToolbar.classList.add('ecl-select-multiple-toolbar');
|
|
322
|
-
this.clearBtn = document.createElement('button');
|
|
323
|
-
this.clearBtn.classList.add('ecl-button');
|
|
324
|
-
this.clearBtn.classList.add('ecl-button--ghost');
|
|
325
|
-
this.clearBtn.type = 'button';
|
|
326
|
-
this.clearBtn.textContent = this.clearAllText;
|
|
327
|
-
this.closeBtn = document.createElement('button');
|
|
328
|
-
this.closeBtn.classList.add('ecl-button');
|
|
329
|
-
this.closeBtn.classList.add('ecl-button--primary');
|
|
330
|
-
this.closeBtn.textContent = this.closeText;
|
|
331
|
-
this.closeBtn.type = 'button';
|
|
332
|
-
this.multiselectToolbar.appendChild(this.clearBtn);
|
|
333
|
-
this.multiselectToolbar.appendChild(this.closeBtn);
|
|
334
|
-
this.clearBtn.addEventListener('keydown', this.handleKeydownOnClear);
|
|
335
|
-
this.clearBtn.addEventListener('click', this.handleClickOnClear);
|
|
336
|
-
this.closeBtn.addEventListener('keydown', this.handleKeydownOnClose);
|
|
337
|
-
this.closeBtn.addEventListener('click', this.handleClickOnClose);
|
|
338
|
-
this.updateToolbarDisplay();
|
|
339
|
-
return this.multiselectToolbar;
|
|
340
|
-
}
|
|
341
|
-
updateToolbarDisplay() {
|
|
342
|
-
if (this.selectedValues.length > 0) {
|
|
343
|
-
this.showMultiselectToolbar();
|
|
344
|
-
}
|
|
345
|
-
else {
|
|
346
|
-
this.hideMultiselectToolbar();
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
showMultiselectToolbar() {
|
|
350
|
-
this.multiselectToolbar.style.display = 'flex';
|
|
351
|
-
}
|
|
352
|
-
hideMultiselectToolbar() {
|
|
353
|
-
this.multiselectToolbar.style.display = 'none';
|
|
354
|
-
}
|
|
355
|
-
handleClickOnClear() {
|
|
356
|
-
this.checkboxSelectAll.checked = false;
|
|
357
|
-
this.multiSelectOptions.forEach((el) => {
|
|
358
|
-
const input = el.childNodes[0];
|
|
359
|
-
if (!input.disabled) {
|
|
360
|
-
input.checked = false;
|
|
361
|
-
}
|
|
362
|
-
});
|
|
363
|
-
this.selectedValues = [];
|
|
364
|
-
this.multiSelectInput.value = '';
|
|
365
|
-
this.updateMultiselectCounter(0);
|
|
366
|
-
this.hideMultiselectToolbar();
|
|
367
|
-
this.eclChange.emit([this.selectedValues]);
|
|
368
|
-
this.propagateChange(this.selectedValues);
|
|
369
|
-
}
|
|
370
|
-
handleClickOnClose() {
|
|
371
|
-
this.closeMultiselectDropdown();
|
|
372
|
-
}
|
|
373
|
-
handleKeydownOnClose(evt) {
|
|
374
|
-
switch (evt.key) {
|
|
375
|
-
case KeyCode.ARROW_UP: {
|
|
376
|
-
this.onCloseClearArrowUp();
|
|
377
|
-
break;
|
|
378
|
-
}
|
|
379
|
-
case KeyCode.ARROW_LEFT: {
|
|
380
|
-
this.onCloseArrowLeft();
|
|
381
|
-
break;
|
|
382
|
-
}
|
|
383
|
-
default: {
|
|
384
|
-
break;
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
onCloseClearArrowUp() {
|
|
389
|
-
const currentOptions = this.getActiveOptions();
|
|
390
|
-
const firstOption = currentOptions[currentOptions.length - 1].firstElementChild;
|
|
391
|
-
firstOption.focus();
|
|
392
|
-
}
|
|
393
|
-
onCloseArrowLeft() {
|
|
394
|
-
this.clearBtn.focus();
|
|
395
|
-
}
|
|
396
|
-
handleKeydownOnClear(evt) {
|
|
397
|
-
switch (evt.key) {
|
|
398
|
-
case KeyCode.ARROW_UP: {
|
|
399
|
-
this.onCloseClearArrowUp();
|
|
400
|
-
break;
|
|
401
|
-
}
|
|
402
|
-
case KeyCode.ARROW_RIGHT: {
|
|
403
|
-
this.onClearArrowRight();
|
|
404
|
-
break;
|
|
405
|
-
}
|
|
406
|
-
default: {
|
|
407
|
-
break;
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
onClearArrowRight() {
|
|
412
|
-
this.closeBtn.focus();
|
|
413
|
-
}
|
|
414
|
-
// Add/remove values from the select input
|
|
415
|
-
updateCurrentValue() {
|
|
416
|
-
const selectedElementsArray = [];
|
|
417
|
-
const selectedElementsValuesArray = [];
|
|
418
|
-
this.checkboxSelectAll.checked = false;
|
|
419
|
-
this.multiSelectOptions.forEach((el) => {
|
|
420
|
-
const input = el.childNodes[0];
|
|
421
|
-
if (input.checked) {
|
|
422
|
-
selectedElementsValuesArray.push(el.childNodes[0].value);
|
|
423
|
-
selectedElementsArray.push(el.childNodes[1].textContent);
|
|
424
|
-
}
|
|
425
|
-
});
|
|
426
|
-
this.selectedValues = selectedElementsValuesArray;
|
|
427
|
-
this.multiSelectInput.value = selectedElementsArray.join(',');
|
|
428
|
-
this.updateToolbarDisplay();
|
|
429
|
-
this.updateMultiselectCounter(selectedElementsArray.length);
|
|
430
|
-
this.propagateChange(this.selectedValues);
|
|
431
|
-
}
|
|
432
|
-
updateMultiselectCounter(count) {
|
|
433
|
-
if (count > 0) {
|
|
434
|
-
this.selectionCount.querySelector('span').textContent = '' + count;
|
|
435
|
-
this.showMultiselectCounter();
|
|
436
|
-
}
|
|
437
|
-
else {
|
|
438
|
-
this.hideMultiselectCounter();
|
|
439
|
-
}
|
|
440
|
-
}
|
|
441
|
-
// Checkbox to select all the elements
|
|
442
|
-
createMultiSelectAll() {
|
|
443
|
-
const id = uuidgen();
|
|
444
|
-
const checkboxDiv = document.createElement('div');
|
|
445
|
-
checkboxDiv.classList.add('ecl-checkbox');
|
|
446
|
-
checkboxDiv.classList.add('ecl-select__multiple-all');
|
|
447
|
-
this.checkboxSelectAll = this.createCheckboxInput(id, 'all');
|
|
448
|
-
this.checkboxSelectAll.addEventListener('keydown', this.handleKeydownOnSelectAll);
|
|
449
|
-
this.checkboxSelectAll.addEventListener('click', this.handleClickOnSelectAll);
|
|
450
|
-
checkboxDiv.appendChild(this.checkboxSelectAll);
|
|
451
|
-
this.selectAllLabel = this.createCheckboxLabel(this.getSelectAllLabelText(), id);
|
|
452
|
-
checkboxDiv.appendChild(this.selectAllLabel);
|
|
453
|
-
this.selectAllEll = checkboxDiv;
|
|
454
|
-
return checkboxDiv;
|
|
455
|
-
}
|
|
456
|
-
getSelectAllLabelText() {
|
|
457
|
-
return `${this.selectAllLabelText} (${this.getActiveOptions().length})`;
|
|
458
|
-
}
|
|
459
|
-
createOptionsWrapper() {
|
|
460
|
-
const div = document.createElement('div');
|
|
461
|
-
div.classList.add('ecl-select__multiple-options');
|
|
462
|
-
return div;
|
|
463
|
-
}
|
|
464
|
-
onSelectAll() {
|
|
465
|
-
const selectedElementsArray = [];
|
|
466
|
-
const selectedElementsValuesArray = [];
|
|
467
|
-
// Select all the elements, that are not disabled
|
|
468
|
-
this.multiSelectOptions
|
|
469
|
-
.filter((elem) => elem.style.display !== 'none')
|
|
470
|
-
.forEach((el) => {
|
|
471
|
-
const input = el.childNodes[0];
|
|
472
|
-
if (this.checkboxSelectAll.checked) {
|
|
473
|
-
if (!input.disabled) {
|
|
474
|
-
input.checked = true;
|
|
475
|
-
selectedElementsValuesArray.push(input.value);
|
|
476
|
-
selectedElementsArray.push(el.childNodes[1].textContent);
|
|
477
|
-
}
|
|
478
|
-
}
|
|
479
|
-
else {
|
|
480
|
-
input.checked = false;
|
|
481
|
-
}
|
|
482
|
-
});
|
|
483
|
-
this.selectedValues = selectedElementsValuesArray;
|
|
484
|
-
this.multiSelectInput.value = selectedElementsArray.join(',');
|
|
485
|
-
this.updateMultiselectCounter(selectedElementsArray.length);
|
|
486
|
-
this.updateToolbarDisplay();
|
|
487
|
-
this.eclChange.emit(this.selectedValues);
|
|
488
|
-
this.propagateChange(this.selectedValues);
|
|
489
|
-
}
|
|
490
|
-
createIconComponent() {
|
|
491
|
-
const eclIconComponent = this.viewContainerRef.createComponent(EclIconComponent);
|
|
492
|
-
eclIconComponent.instance.size = 's';
|
|
493
|
-
eclIconComponent.instance.icon = 'corner-arrow';
|
|
494
|
-
eclIconComponent.instance.transform = 'rotate-180';
|
|
495
|
-
eclIconComponent.instance.class = 'ecl-select__icon-shape';
|
|
496
|
-
return eclIconComponent.location.nativeElement;
|
|
497
|
-
}
|
|
498
|
-
createIconContainer() {
|
|
499
|
-
const selectIconContainer = document.createElement('div');
|
|
500
|
-
selectIconContainer.classList.add('ecl-select__icon');
|
|
501
|
-
return selectIconContainer;
|
|
502
|
-
}
|
|
503
|
-
handleXBtnOnSearch(evt) {
|
|
504
|
-
const keyword = evt.target.value;
|
|
505
|
-
if (keyword === '') {
|
|
506
|
-
this.setSelectAllDisableStatus(false);
|
|
507
|
-
this.multiSelectOptions.forEach((item) => {
|
|
508
|
-
item.style.display = 'flex';
|
|
509
|
-
const labelNode = item.children[1].children[1];
|
|
510
|
-
labelNode.innerHTML = item.textContent;
|
|
511
|
-
});
|
|
512
|
-
const noResultsFoundExists = this.optionsWrapper.lastChild.classList.contains(this.CLASS_NO_RESULTS_FOUND);
|
|
513
|
-
if (noResultsFoundExists) {
|
|
514
|
-
this.optionsWrapper.removeChild(this.noResultsFound);
|
|
515
|
-
}
|
|
516
|
-
}
|
|
517
|
-
}
|
|
518
|
-
onSearchOptions(evt) {
|
|
519
|
-
const keyword = evt.target.value;
|
|
520
|
-
let isMatchFound = false;
|
|
521
|
-
if (keyword === '') {
|
|
522
|
-
this.setSelectAllDisableStatus(false);
|
|
523
|
-
isMatchFound = true;
|
|
524
|
-
this.multiSelectOptions.forEach((item) => {
|
|
525
|
-
item.style.display = 'flex';
|
|
526
|
-
const labelNode = item.children[1].children[1];
|
|
527
|
-
labelNode.innerHTML = item.textContent;
|
|
528
|
-
});
|
|
529
|
-
}
|
|
530
|
-
else {
|
|
531
|
-
this.setSelectAllDisableStatus(true);
|
|
532
|
-
this.multiSelectOptions.forEach((item) => {
|
|
533
|
-
if (item.textContent.toLowerCase().indexOf(keyword.toLowerCase()) < 0) {
|
|
534
|
-
item.style.display = 'none';
|
|
535
|
-
}
|
|
536
|
-
else {
|
|
537
|
-
isMatchFound = true;
|
|
538
|
-
item.style.display = 'flex';
|
|
539
|
-
this.highlightSearchText(item, keyword);
|
|
540
|
-
}
|
|
541
|
-
});
|
|
542
|
-
}
|
|
543
|
-
const noResultsFoundExists = this.optionsWrapper.lastChild.classList.contains(this.CLASS_NO_RESULTS_FOUND);
|
|
544
|
-
if (!isMatchFound && !noResultsFoundExists) {
|
|
545
|
-
this.optionsWrapper.appendChild(this.noResultsFound);
|
|
546
|
-
}
|
|
547
|
-
else if (isMatchFound && noResultsFoundExists) {
|
|
548
|
-
this.optionsWrapper.removeChild(this.noResultsFound);
|
|
549
|
-
}
|
|
550
|
-
}
|
|
551
|
-
highlightSearchText(item, keyword) {
|
|
552
|
-
const labelNode = item.children[1].children[1];
|
|
553
|
-
const re = new RegExp(keyword, 'gi');
|
|
554
|
-
const text = item.textContent;
|
|
555
|
-
const res = text.replace(re, '<b>$&</b>');
|
|
556
|
-
labelNode.innerHTML = res;
|
|
557
|
-
}
|
|
558
|
-
setSelectAllDisableStatus(isDisabled) {
|
|
559
|
-
this.checkboxSelectAll.disabled = isDisabled;
|
|
560
|
-
this.selectAllEll.classList.toggle('ecl-checkbox--disabled', this.checkboxSelectAll.disabled);
|
|
561
|
-
}
|
|
562
|
-
resetComponent() {
|
|
563
|
-
this.multiSelectOptions.forEach((el) => {
|
|
564
|
-
const input = el.childNodes[0];
|
|
565
|
-
if (input.checked) {
|
|
566
|
-
input.checked = false;
|
|
567
|
-
}
|
|
568
|
-
});
|
|
569
|
-
if (this.checkboxSelectAll) {
|
|
570
|
-
this.checkboxSelectAll.checked = false;
|
|
571
|
-
}
|
|
572
|
-
if (this.multiSelectInput) {
|
|
573
|
-
this.multiSelectInput.value = null;
|
|
574
|
-
}
|
|
575
|
-
this.selectedValues = [];
|
|
576
|
-
if (this.selectionCount) {
|
|
577
|
-
this.updateMultiselectCounter(0);
|
|
578
|
-
}
|
|
579
|
-
}
|
|
580
|
-
writeValues(values) {
|
|
581
|
-
if (values) {
|
|
582
|
-
const selectedElementsArray = [];
|
|
583
|
-
if (this.multiSelectOptions && this.multiSelectOptions.length > 0) {
|
|
584
|
-
this.multiSelectOptions
|
|
585
|
-
.filter((elem) => values.includes(elem.childNodes[0].value) &&
|
|
586
|
-
!elem.childNodes[0].disabled)
|
|
587
|
-
.forEach((el) => {
|
|
588
|
-
const input = el.childNodes[0];
|
|
589
|
-
input.checked = true;
|
|
590
|
-
selectedElementsArray.push(el.childNodes[1].textContent);
|
|
591
|
-
this.selectedValues.push(input.value);
|
|
592
|
-
});
|
|
593
|
-
if (this.multiSelectInput) {
|
|
594
|
-
this.multiSelectInput.value = selectedElementsArray.join(',');
|
|
595
|
-
}
|
|
596
|
-
}
|
|
597
|
-
else {
|
|
598
|
-
values.forEach((val) => {
|
|
599
|
-
this.selectedValues.push(val);
|
|
600
|
-
});
|
|
601
|
-
}
|
|
602
|
-
if (this.selectionCount) {
|
|
603
|
-
this.updateMultiselectCounter(values.length);
|
|
604
|
-
}
|
|
605
|
-
}
|
|
606
|
-
}
|
|
607
|
-
updateSelectAllLabelText() {
|
|
608
|
-
this.selectAllLabel.lastElementChild.textContent = `${this.selectAllLabelText} (${this.getActiveOptions().length})`;
|
|
91
|
+
getHostElement() {
|
|
92
|
+
return this.el.nativeElement;
|
|
609
93
|
}
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
this.clearBtn.textContent = `${this.clearAllText}`;
|
|
94
|
+
getHostParentElement(hostEl) {
|
|
95
|
+
return hostEl.parentElement;
|
|
613
96
|
}
|
|
614
|
-
|
|
615
|
-
const
|
|
616
|
-
const
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
const SEARCH_KEY = 'ecl.common.SEARCH';
|
|
620
|
-
this.translate
|
|
621
|
-
.stream([SELECT_ALL_KEY, NO_RESULTS_FOUND_KEY, CLOSE_KEY, CLEAR_ALL_KEY, SEARCH_KEY])
|
|
97
|
+
createMultiselectComponent() {
|
|
98
|
+
const ngControl = this.injector.get(NgControl, undefined, { optional: true });
|
|
99
|
+
const multiselect = this.viewContainerRef.createComponent(EclMultiselectDropdownComponent);
|
|
100
|
+
this.multiselectComponent = multiselect.instance;
|
|
101
|
+
this.multiselectComponent.eclChange
|
|
622
102
|
.pipe(takeUntil(this.destroy$))
|
|
623
|
-
.subscribe((
|
|
624
|
-
this.
|
|
625
|
-
this.closeText = translation[CLOSE_KEY];
|
|
626
|
-
this.clearAllText = translation[CLEAR_ALL_KEY];
|
|
627
|
-
this.updateButtonsLabelText();
|
|
628
|
-
if (this.selectAllLabel) {
|
|
629
|
-
this.selectAllLabelText = translation[SELECT_ALL_KEY];
|
|
630
|
-
this.updateSelectAllLabelText();
|
|
631
|
-
}
|
|
632
|
-
if (this.multiSearch) {
|
|
633
|
-
this.multiSearch.placeholder = translation[SEARCH_KEY];
|
|
634
|
-
}
|
|
103
|
+
.subscribe((evt) => {
|
|
104
|
+
this.eclChange.emit(evt);
|
|
635
105
|
});
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
}
|
|
640
|
-
openMultiselect() {
|
|
641
|
-
this.multiDropdown.style.display = 'block';
|
|
642
|
-
}
|
|
643
|
-
getOptionIndexByIdFromActiveOptions(id) {
|
|
644
|
-
return this.getActiveOptions().findIndex((option) => option.firstElementChild.id === id);
|
|
645
|
-
}
|
|
646
|
-
handleClickOnMainInput(evt) {
|
|
647
|
-
evt.preventDefault();
|
|
648
|
-
this.toggleDropdown();
|
|
649
|
-
}
|
|
650
|
-
toggleDropdown() {
|
|
651
|
-
this.multiDropdown.style.display = this.multiDropdown.style.display === 'none' ? 'block' : 'none';
|
|
652
|
-
}
|
|
653
|
-
handleKeydownOnMainInput(evt) {
|
|
654
|
-
switch (evt.key) {
|
|
655
|
-
case KeyCode.ENTER: {
|
|
656
|
-
evt.preventDefault();
|
|
657
|
-
break;
|
|
658
|
-
}
|
|
659
|
-
case KeyCode.ARROW_DOWN: {
|
|
660
|
-
this.onMainInputArrowDown(evt);
|
|
661
|
-
break;
|
|
662
|
-
}
|
|
663
|
-
default: {
|
|
664
|
-
break;
|
|
665
|
-
}
|
|
666
|
-
}
|
|
667
|
-
}
|
|
668
|
-
onMainInputArrowDown(evt) {
|
|
669
|
-
evt.preventDefault();
|
|
670
|
-
this.openMultiselect();
|
|
671
|
-
this.searchEl.focus();
|
|
672
|
-
}
|
|
673
|
-
handleKeydownOnSearch(evt) {
|
|
674
|
-
switch (evt.key) {
|
|
675
|
-
case KeyCode.ENTER: {
|
|
676
|
-
evt.preventDefault();
|
|
677
|
-
break;
|
|
678
|
-
}
|
|
679
|
-
case KeyCode.TAB:
|
|
680
|
-
case KeyCode.ARROW_DOWN: {
|
|
681
|
-
this.onSearchArrowDownOrTab();
|
|
682
|
-
evt.preventDefault();
|
|
683
|
-
break;
|
|
684
|
-
}
|
|
685
|
-
case KeyCode.ARROW_UP: {
|
|
686
|
-
this.onSearchArrowUp(evt);
|
|
687
|
-
break;
|
|
688
|
-
}
|
|
689
|
-
case KeyCode.ESCAPE: {
|
|
690
|
-
this.closeMultiselectDropdown();
|
|
691
|
-
break;
|
|
692
|
-
}
|
|
693
|
-
default: {
|
|
694
|
-
break;
|
|
695
|
-
}
|
|
106
|
+
this.multiselectComponent.mainInputPlaceholder = this.eclPlaceholder;
|
|
107
|
+
if (ngControl) {
|
|
108
|
+
ngControl.valueAccessor = this.multiselectComponent;
|
|
696
109
|
}
|
|
110
|
+
multiselect.instance.disabled = this.disabled;
|
|
111
|
+
multiselect.instance.isInvalid = this.isInvalid;
|
|
112
|
+
return multiselect.location.nativeElement;
|
|
697
113
|
}
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
this.
|
|
701
|
-
}
|
|
702
|
-
else {
|
|
703
|
-
const currentOptions = this.getActiveOptions();
|
|
704
|
-
const firstOption = currentOptions[0].firstElementChild;
|
|
705
|
-
firstOption.focus();
|
|
706
|
-
}
|
|
707
|
-
}
|
|
708
|
-
onSearchArrowUp(evt) {
|
|
709
|
-
evt.preventDefault();
|
|
710
|
-
this.closeMultiselectDropdown();
|
|
711
|
-
this.multiSelectInput.focus();
|
|
712
|
-
}
|
|
713
|
-
handleClickOnSelectAll() {
|
|
714
|
-
this.propagateTouched();
|
|
715
|
-
this.onSelectAll();
|
|
716
|
-
}
|
|
717
|
-
handleKeydownOnSelectAll(evt) {
|
|
718
|
-
evt.preventDefault();
|
|
719
|
-
switch (evt.key) {
|
|
720
|
-
case KeyCode.TAB:
|
|
721
|
-
case KeyCode.ARROW_DOWN: {
|
|
722
|
-
this.onSelectAllArrowDownOrTab(evt);
|
|
723
|
-
break;
|
|
724
|
-
}
|
|
725
|
-
case KeyCode.ARROW_UP: {
|
|
726
|
-
this.onSelectAllArrowUp();
|
|
727
|
-
break;
|
|
728
|
-
}
|
|
729
|
-
case KeyCode.ENTER: {
|
|
730
|
-
this.checkboxSelectAll.click();
|
|
731
|
-
break;
|
|
732
|
-
}
|
|
733
|
-
case KeyCode.ESCAPE: {
|
|
734
|
-
this.closeMultiselectDropdown();
|
|
735
|
-
break;
|
|
736
|
-
}
|
|
737
|
-
default: {
|
|
738
|
-
break;
|
|
739
|
-
}
|
|
740
|
-
}
|
|
741
|
-
}
|
|
742
|
-
onSelectAllArrowDownOrTab(evt) {
|
|
743
|
-
evt.preventDefault();
|
|
744
|
-
const currentOptions = this.getActiveOptions();
|
|
745
|
-
if (currentOptions.length > 0) {
|
|
746
|
-
const nextSiblingCheckbox = currentOptions[0].firstElementChild;
|
|
747
|
-
nextSiblingCheckbox.focus();
|
|
748
|
-
}
|
|
749
|
-
}
|
|
750
|
-
onSelectAllArrowUp() {
|
|
751
|
-
this.searchEl.focus();
|
|
752
|
-
}
|
|
753
|
-
handleClickOnOption(evt) {
|
|
754
|
-
this.updateCurrentValue();
|
|
755
|
-
this.propagateTouched();
|
|
756
|
-
this.eclChange.emit(this.selectedValues);
|
|
757
|
-
}
|
|
758
|
-
handleKeydownOnOption(evt) {
|
|
759
|
-
switch (evt.key) {
|
|
760
|
-
case KeyCode.ARROW_DOWN: {
|
|
761
|
-
this.onOptionArrowDown(evt);
|
|
762
|
-
break;
|
|
763
|
-
}
|
|
764
|
-
case KeyCode.ARROW_UP: {
|
|
765
|
-
this.onOptionArrowUp(evt);
|
|
766
|
-
break;
|
|
767
|
-
}
|
|
768
|
-
case KeyCode.ESCAPE: {
|
|
769
|
-
this.closeMultiselectDropdown();
|
|
770
|
-
break;
|
|
771
|
-
}
|
|
772
|
-
case KeyCode.ENTER: {
|
|
773
|
-
evt.target.click();
|
|
774
|
-
evt.preventDefault();
|
|
775
|
-
break;
|
|
776
|
-
}
|
|
777
|
-
case KeyCode.TAB: {
|
|
778
|
-
this.onOptionTab(evt);
|
|
779
|
-
break;
|
|
780
|
-
}
|
|
781
|
-
default: {
|
|
782
|
-
break;
|
|
783
|
-
}
|
|
784
|
-
}
|
|
785
|
-
}
|
|
786
|
-
onOptionArrowDown(evt) {
|
|
787
|
-
evt.preventDefault();
|
|
788
|
-
const index = this.getOptionIndexByIdFromActiveOptions(evt.target.id);
|
|
789
|
-
const currentOptions = this.getActiveOptions();
|
|
790
|
-
if (index !== currentOptions.length - 1) {
|
|
791
|
-
const nextSiblingCheckbox = currentOptions[index + 1].firstElementChild;
|
|
792
|
-
nextSiblingCheckbox.focus();
|
|
793
|
-
}
|
|
794
|
-
else {
|
|
795
|
-
this.clearBtn.focus();
|
|
796
|
-
}
|
|
797
|
-
}
|
|
798
|
-
onOptionArrowUp(evt) {
|
|
799
|
-
evt.preventDefault();
|
|
800
|
-
const index = this.getOptionIndexByIdFromActiveOptions(evt.target.id);
|
|
801
|
-
if (index !== 0) {
|
|
802
|
-
const prevSiblingCheckbox = this.getActiveOptions()[index - 1].firstElementChild;
|
|
803
|
-
prevSiblingCheckbox.focus();
|
|
804
|
-
}
|
|
805
|
-
else if (this.checkboxSelectAll.disabled) {
|
|
806
|
-
this.searchEl.focus();
|
|
807
|
-
}
|
|
808
|
-
else {
|
|
809
|
-
this.checkboxSelectAll.focus();
|
|
810
|
-
}
|
|
811
|
-
}
|
|
812
|
-
onOptionTab(evt) {
|
|
813
|
-
const index = this.getOptionIndexByIdFromActiveOptions(evt.target.id);
|
|
814
|
-
if (index === this.getActiveOptions().length - 1) {
|
|
815
|
-
this.multiSelectInput.focus(); // Trap tab
|
|
816
|
-
evt.preventDefault();
|
|
817
|
-
}
|
|
818
|
-
}
|
|
819
|
-
getActiveOptions() {
|
|
820
|
-
return this.multiSelectOptions.filter((item) => item.style.display !== 'none' && !item.classList.contains('ecl-checkbox--disabled'));
|
|
821
|
-
}
|
|
822
|
-
removeAllListeners() {
|
|
823
|
-
this.multiSelectInput.removeEventListener('keydown', this.handleKeydownOnMainInput);
|
|
824
|
-
this.multiSelectInput.removeEventListener('click', this.handleClickOnMainInput);
|
|
825
|
-
this.searchEl.removeEventListener('keydown', this.handleKeydownOnSearch);
|
|
826
|
-
this.searchEl.removeEventListener('keyup', this.onSearchOptions);
|
|
827
|
-
this.searchEl.removeEventListener('search', this.handleXBtnOnSearch);
|
|
828
|
-
this.checkboxSelectAll.removeEventListener('keydown', this.handleKeydownOnSelectAll);
|
|
829
|
-
this.checkboxSelectAll.removeEventListener('click', this.handleClickOnSelectAll);
|
|
830
|
-
this.clearBtn.removeEventListener('keydown', this.handleKeydownOnClear);
|
|
831
|
-
this.clearBtn.removeEventListener('click', this.handleClickOnClear);
|
|
832
|
-
this.closeBtn.removeEventListener('keydown', this.handleKeydownOnClose);
|
|
833
|
-
this.closeBtn.removeEventListener('click', this.handleClickOnClose);
|
|
834
|
-
this.multiSelectOptions.forEach((el) => {
|
|
835
|
-
const checboxEl = el.firstElementChild;
|
|
836
|
-
checboxEl.removeEventListener('keydown', this.handleKeydownOnOption);
|
|
837
|
-
checboxEl.removeEventListener('click', this.handleClickOnOption);
|
|
114
|
+
attachOptions() {
|
|
115
|
+
setTimeout(() => {
|
|
116
|
+
this.multiselectComponent.multiOptionDirectives = this.eclOptionItems.toArray();
|
|
838
117
|
});
|
|
839
118
|
}
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
this.handleClickOnSelectAll = this.handleClickOnSelectAll.bind(this);
|
|
849
|
-
this.handleClickOnOption = this.handleClickOnOption.bind(this);
|
|
850
|
-
this.handleClickOnClear = this.handleClickOnClear.bind(this);
|
|
851
|
-
this.handleKeydownOnClear = this.handleKeydownOnClear.bind(this);
|
|
852
|
-
this.handleKeydownOnClose = this.handleKeydownOnClose.bind(this);
|
|
853
|
-
this.handleClickOnClose = this.handleClickOnClose.bind(this);
|
|
854
|
-
}
|
|
855
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-next.4", ngImport: i0, type: EclMultiselectComponent, deps: [{ token: i1.NgControl, optional: true, self: true }, { token: i0.ElementRef }, { token: i0.ViewContainerRef }, { token: i0.IterableDiffers }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
856
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.0-next.4", type: EclMultiselectComponent, selector: "select[eclMultiselect]", inputs: { isInvalid: "isInvalid", eclPlaceholder: "eclPlaceholder", eclSize: "eclSize", disabled: "disabled" }, outputs: { eclChange: "eclChange" }, host: { listeners: { "document:keyup.escape": "onEscapeKey($event)", "document:click": "onKeyUp($event)" }, properties: { "class": "this.cssClasses", "attr.disabled": "this.disabled" } }, queries: [{ propertyName: "eclOptionItems", predicate: EclMultiselectOptionDirective }], usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>\n", encapsulation: i0.ViewEncapsulation.None }); }
|
|
119
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: EclMultiselectComponent, deps: [{ token: i0.Injector }, { token: i0.ElementRef }, { token: i0.ViewContainerRef }, { token: i0.IterableDiffers }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
120
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.0-next.7", type: EclMultiselectComponent, selector: "select[eclMultiselect]", inputs: { isInvalid: "isInvalid", disabled: "disabled", eclPlaceholder: "eclPlaceholder" }, outputs: { eclChange: "eclChange" }, host: { properties: { "attr.disabled": "this.disabled", "class": "this.cssClasses" } }, providers: [
|
|
121
|
+
{
|
|
122
|
+
provide: NG_VALUE_ACCESSOR,
|
|
123
|
+
useExisting: forwardRef((() => EclMultiselectComponent)),
|
|
124
|
+
multi: true,
|
|
125
|
+
},
|
|
126
|
+
], queries: [{ propertyName: "eclOptionItems", predicate: i0.forwardRef(() => EclMultiselectOptionDirective) }], usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>\n", encapsulation: i0.ViewEncapsulation.None }); }
|
|
857
127
|
}
|
|
858
128
|
__decorate([
|
|
859
129
|
coerceBoolean
|
|
860
|
-
], EclMultiselectComponent.prototype, "isInvalid",
|
|
861
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.
|
|
130
|
+
], EclMultiselectComponent.prototype, "isInvalid", null);
|
|
131
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: EclMultiselectComponent, decorators: [{
|
|
862
132
|
type: Component,
|
|
863
|
-
args: [{ selector: 'select[eclMultiselect]', encapsulation: ViewEncapsulation.None,
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
133
|
+
args: [{ selector: 'select[eclMultiselect]', encapsulation: ViewEncapsulation.None, providers: [
|
|
134
|
+
{
|
|
135
|
+
provide: NG_VALUE_ACCESSOR,
|
|
136
|
+
useExisting: forwardRef((() => EclMultiselectComponent)),
|
|
137
|
+
multi: true,
|
|
138
|
+
},
|
|
139
|
+
], template: "<ng-content></ng-content>\n" }]
|
|
140
|
+
}], ctorParameters: () => [{ type: i0.Injector }, { type: i0.ElementRef }, { type: i0.ViewContainerRef }, { type: i0.IterableDiffers }], propDecorators: { eclOptionItems: [{
|
|
869
141
|
type: ContentChildren,
|
|
870
|
-
args: [EclMultiselectOptionDirective]
|
|
142
|
+
args: [forwardRef(() => EclMultiselectOptionDirective)]
|
|
871
143
|
}], isInvalid: [{
|
|
872
144
|
type: Input
|
|
145
|
+
}], disabled: [{
|
|
146
|
+
type: Input
|
|
147
|
+
}, {
|
|
148
|
+
type: HostBinding,
|
|
149
|
+
args: ['attr.disabled']
|
|
873
150
|
}], cssClasses: [{
|
|
874
151
|
type: HostBinding,
|
|
875
152
|
args: ['class']
|
|
@@ -877,18 +154,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.4",
|
|
|
877
154
|
type: Output
|
|
878
155
|
}], eclPlaceholder: [{
|
|
879
156
|
type: Input
|
|
880
|
-
}], eclSize: [{
|
|
881
|
-
type: Input
|
|
882
|
-
}], disabled: [{
|
|
883
|
-
type: Input
|
|
884
|
-
}, {
|
|
885
|
-
type: HostBinding,
|
|
886
|
-
args: ['attr.disabled']
|
|
887
|
-
}], onEscapeKey: [{
|
|
888
|
-
type: HostListener,
|
|
889
|
-
args: ['document:keyup.escape', ['$event']]
|
|
890
|
-
}], onKeyUp: [{
|
|
891
|
-
type: HostListener,
|
|
892
|
-
args: ['document:click', ['$event']]
|
|
893
157
|
}] } });
|
|
894
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNsLW11bHRpc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9lY2wtbXVsdGlzZWxlY3QvZWNsLW11bHRpc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9lY2wtbXVsdGlzZWxlY3QvZWNsLW11bHRpc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBRUgsU0FBUyxFQUNULGVBQWUsRUFHZixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBS0wsUUFBUSxFQUNSLE1BQU0sRUFFTixJQUFJLEVBRUosaUJBQWlCLEdBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxFQUFFLElBQUksT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDekYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7QUFFbkYsSUFBSyxPQVFKO0FBUkQsV0FBSyxPQUFPO0lBQ1IsK0JBQW9CLENBQUE7SUFDcEIsbUNBQXdCLENBQUE7SUFDeEIsbUNBQXdCLENBQUE7SUFDeEIscUNBQTBCLENBQUE7SUFDMUIsNEJBQWlCLENBQUE7SUFDakIsMEJB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Qix1QkFBdUIsOGFBQ2YsNkJBQTZCLG9EQ2pEbEQsNkJBQ0E7O0FEaUQ0QjtJQUF2QixhQUFhOzBEQUEyQztrR0FGaEQsdUJBQXVCO2tCQU5uQyxTQUFTOytCQUVJLHdCQUF3QixpQkFFbkIsaUJBQWlCLENBQUMsSUFBSTs7MEJBaUVoQyxRQUFROzswQkFBSSxJQUFJO2lLQTlEMkIsY0FBYztzQkFBN0QsZUFBZTt1QkFBQyw2QkFBNkI7Z0JBQ3RCLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRWpCLFVBQVU7c0JBRGIsV0FBVzt1QkFBQyxPQUFPO2dCQUtWLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ00sY0FBYztzQkFBMUIsS0FBSztnQkFNRyxPQUFPO3NCQUFmLEtBQUs7Z0JBSUYsUUFBUTtzQkFGWCxLQUFLOztzQkFDTCxXQUFXO3VCQUFDLGVBQWU7Z0JBMEh1QixXQUFXO3NCQUE3RCxZQUFZO3VCQUFDLHVCQUF1QixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQUtqRCxPQUFPO3NCQUROLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRG9DaGVjayxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgSXRlcmFibGVEaWZmZXIsXG4gICAgSXRlcmFibGVEaWZmZXJzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTZWxmLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IHY0IGFzIHV1aWRnZW4gfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW4gfSBmcm9tICdAZXVpL2Jhc2UnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFQ0xCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZWNsLWJhc2UuZGlyZWN0aXZlJztcbmltcG9ydCB7IEVjbENoZWNrYm94TGFiZWxDb21wb25lbnQgfSBmcm9tICcuLi9lY2wtY2hlY2tib3gvZWNsLWNoZWNrYm94LWxhYmVsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFY2xJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vZWNsLWljb24vZWNsLWljb24uY29tcG9uZW50JztcbmltcG9ydCB7IEVjbE11bHRpc2VsZWN0T3B0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi9lY2wtbXVsdGlzZWxlY3Qtb3B0aW9uLmRpcmVjdGl2ZSc7XG5cbmVudW0gS2V5Q29kZSB7XG4gICAgQVJST1dfVVAgPSAnQXJyb3dVcCcsXG4gICAgQVJST1dfRE9XTiA9ICdBcnJvd0Rvd24nLFxuICAgIEFSUk9XX0xFRlQgPSAnQXJyb3dMZWZ0JyxcbiAgICBBUlJPV19SSUdIVCA9ICdBcnJvd1JpZ2h0JyxcbiAgICBFU0NBUEUgPSAnRXNjYXBlJyxcbiAgICBFTlRFUiA9ICdFbnRlcicsXG4gICAgVEFCID0gJ1RhYicsXG59XG5cbkBDb21wb25lbnQoe1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdzZWxlY3RbZWNsTXVsdGlzZWxlY3RdJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2VjbC1tdWx0aXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgRWNsTXVsdGlzZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBFQ0xCYXNlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBEb0NoZWNrLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICBAQ29udGVudENoaWxkcmVuKEVjbE11bHRpc2VsZWN0T3B0aW9uRGlyZWN0aXZlKSBlY2xPcHRpb25JdGVtczogUXVlcnlMaXN0PEVjbE11bHRpc2VsZWN0T3B0aW9uRGlyZWN0aXZlPjtcbiAgICBAY29lcmNlQm9vbGVhbiBASW5wdXQoKSBpc0ludmFsaWQ6IGJvb2xlYW4gfCBhbnkgPSBmYWxzZTtcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgICBnZXQgY3NzQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gW3N1cGVyLmdldENzc0NsYXNzZXMoJ2VjbC1zZWxlY3QnKV0uam9pbignICcpLnRyaW0oKTtcbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgZWNsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQElucHV0KCkgc2V0IGVjbFBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fZWNsUGxhY2Vob2xkZXIgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlTZWxlY3RJbnB1dCkge1xuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LnNldEF0dHJpYnV0ZSgncGxhY2Vob2xkZXInLCB0aGlzLl9lY2xQbGFjZWhvbGRlciB8fCAnJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgQElucHV0KCkgZWNsU2l6ZTogc3RyaW5nID0gJ20nO1xuXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGlzYWJsZWQnKVxuICAgIGdldCBkaXNhYmxlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uZ0NvbnRyb2wuZGlzYWJsZWQgfHwgbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZCB8fCBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbiB8IGFueSkge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9lY2xQbGFjZWhvbGRlcjogc3RyaW5nO1xuICAgIHByaXZhdGUgZGlmZmVyOiBJdGVyYWJsZURpZmZlcjxFY2xNdWx0aXNlbGVjdE9wdGlvbkRpcmVjdGl2ZT47XG4gICAgcHJpdmF0ZSBob3N0RWw6IEhUTUxTZWxlY3RFbGVtZW50O1xuICAgIHByaXZhdGUgaG9zdFBhcmVudEVsOiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIGhvc3RXcmFwcGVyRWw6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgc2VsZWN0SWNvbkNvbnRhaW5lckVsOiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIG11bHRpc2VsZWN0V3JhcHBlcjogSFRNTEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBtdWx0aXNlbGVjdENvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBtdWx0aURyb3Bkb3duOiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIG9wdGlvbnNXcmFwcGVyOiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIG11bHRpU2VsZWN0T3B0aW9uczogSFRNTEVsZW1lbnRbXSA9IFtdO1xuICAgIHByaXZhdGUgbXVsdGlTZWxlY3RJbnB1dDogSFRNTElucHV0RWxlbWVudDtcbiAgICBwcml2YXRlIG11bHRpU2VhcmNoOiBIVE1MSW5wdXRFbGVtZW50O1xuICAgIHByaXZhdGUgbm9SZXN1bHRzRm91bmQ6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgY2hlY2tib3hTZWxlY3RBbGw6IEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBzZWxlY3RBbGxFbGw6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgc2VsZWN0ZWRWYWx1ZXM6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBzZWFyY2hFbDogSFRNTElucHV0RWxlbWVudDtcbiAgICBwcml2YXRlIHNlbGVjdEFsbExhYmVsOiBIVE1MTGFiZWxFbGVtZW50O1xuICAgIHByaXZhdGUgc2VsZWN0aW9uQ291bnQ6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgbXVsdGlzZWxlY3RUb29sYmFyOiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIGRlc3Ryb3kkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICBwcml2YXRlIGNsZWFyQnRuOiBIVE1MQnV0dG9uRWxlbWVudDtcbiAgICBwcml2YXRlIGNsb3NlQnRuOiBIVE1MQnV0dG9uRWxlbWVudDtcblxuICAgIHByaXZhdGUgbm9SZXN1bHRzRm91bmRUZXh0ID0gJ05vIHJlc3VsdHMgZm91bmQnO1xuICAgIHByaXZhdGUgQ0xBU1NfTk9fUkVTVUxUU19GT1VORCA9ICdlY2wtc2VsZWN0X19tdWx0aXBsZS1uby1yZXN1bHRzJztcbiAgICBwcml2YXRlIHNlbGVjdEFsbExhYmVsVGV4dCA9ICdTZWxlY3QgYWxsJztcbiAgICBwcml2YXRlIGNsb3NlVGV4dCA9ICdDbG9zZSc7XG4gICAgcHJpdmF0ZSBjbGVhckFsbFRleHQgPSAnQ2xlYXIgYWxsJztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHByb3RlY3RlZCBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICAgICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBwcml2YXRlIGRpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycyxcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5kaWZmZXIgPSB0aGlzLmRpZmZlcnMuZmluZChbXSkuY3JlYXRlKCk7XG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5iaW5kQ2FsbGJhY2tzKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaG9zdEVsID0gdGhpcy5nZXRIb3N0RWxlbWVudCgpO1xuICAgICAgICB0aGlzLmhvc3RQYXJlbnRFbCA9IHRoaXMuZ2V0SG9zdFBhcmVudEVsZW1lbnQodGhpcy5ob3N0RWwpO1xuICAgICAgICB0aGlzLmhvc3RXcmFwcGVyRWwgPSB0aGlzLmNyZWF0ZUhvc3RXcmFwcGVyQ29udGFpbmVyKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0SWNvbkNvbnRhaW5lckVsID0gdGhpcy5jcmVhdGVJY29uQ29udGFpbmVyKCk7XG5cbiAgICAgICAgdGhpcy5tdWx0aXNlbGVjdFdyYXBwZXIgPSB0aGlzLmNyZWF0ZVdyYXBwZXJNdWx0aXNlbGVjdCgpO1xuICAgICAgICB0aGlzLm11bHRpc2VsZWN0Q29udGFpbmVyID0gdGhpcy5jcmVhdGVTZWxlY3RDb250YWluZXJNdWx0aXNlbGVjdCgpO1xuICAgICAgICB0aGlzLm5vUmVzdWx0c0ZvdW5kID0gdGhpcy5jcmVhdGVOb1Jlc3VsdHNGb3VuZCgpO1xuXG4gICAgICAgIGlmICh0aGlzLmhvc3RQYXJlbnRFbCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGVPcmlnaW5hbFNlbGVjdENvbXBvbmVudCgpO1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVIdG1sRWxlbWVudHMoKTtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRNdWx0aXNlbGVjdERyb3Bkb3duKGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFuZGxlVHJhbnNsYXRpb25zKCk7XG4gICAgfVxuXG4gICAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm11bHRpc2VsZWN0Q29udGFpbmVyLmNsYXNzTGlzdC50b2dnbGUoJ2VjbC1zZWxlY3RfX2NvbnRhaW5lci0tZGlzYWJsZWQnLCB0aGlzLmRpc2FibGVkKTtcbiAgICAgICAgdGhpcy5tdWx0aXNlbGVjdENvbnRhaW5lci5jbGFzc0xpc3QudG9nZ2xlKCdlY2wtc2VsZWN0X19jb250YWluZXItLWludmFsaWQnLCB0aGlzLmlzSW52YWxpZCk7XG5cbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LmRpc2FibGVkID0gdGhpcy5kaXNhYmxlZDtcblxuICAgICAgICBjb25zdCBkaWZmID0gdGhpcy5kaWZmZXIuZGlmZih0aGlzLmVjbE9wdGlvbkl0ZW1zKTtcblxuICAgICAgICBpZiAoZGlmZikge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVBbGxPcHRpb25zKCk7XG4gICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9ucyA9IFtdO1xuICAgICAgICAgICAgZGlmZi5mb3JFYWNoSXRlbSgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uc1dyYXBwZXIuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVPcHRpb24oaXRlbS5pdGVtKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMub25PcHRpb25zQ2hhbmdlKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUN1cnJlbnRWYWx1ZSgpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RBbGxMYWJlbFRleHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbk9wdGlvbnNDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZXM6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlc2V0Q29tcG9uZW50KCk7XG4gICAgICAgIHRoaXMud3JpdGVWYWx1ZXModmFsdWVzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVUb3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5dXAuZXNjYXBlJywgWyckZXZlbnQnXSkgb25Fc2NhcGVLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbG9zZU11bHRpc2VsZWN0RHJvcGRvd24oKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG4gICAgb25LZXlVcChldjogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpc0NsaWNrSW5zaWRlID0gdGhpcy5tdWx0aURyb3Bkb3duLmNvbnRhaW5zKDxFbGVtZW50PmV2LnRhcmdldCkgfHwgdGhpcy5tdWx0aVNlbGVjdElucHV0LmNvbnRhaW5zKDxFbGVtZW50PmV2LnRhcmdldCk7XG4gICAgICAgIGlmICghaXNDbGlja0luc2lkZSkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZU11bHRpc2VsZWN0RHJvcGRvd24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlT3B0aW9uKGVsOiBFY2xNdWx0aXNlbGVjdE9wdGlvbkRpcmVjdGl2ZSk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgaWYgKGVsLmlzT3B0R3JvdXAoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlT3B0R3JvdXAoZWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlT3B0aW9uV2l0aENoZWNrYm94KGVsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlT3B0R3JvdXAoZWw6IEVjbE11bHRpc2VsZWN0T3B0aW9uRGlyZWN0aXZlKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdCBpZCA9IHV1aWRnZW4oKTtcbiAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGRpdi5pZCA9IGlkO1xuICAgICAgICBkaXYuY2xhc3NMaXN0LmFkZCgnZWNsLXNlbGVjdF9fbXVsdGlwbGUtZ3JvdXAnKTtcbiAgICAgICAgY29uc3QgaDUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdoNScpO1xuICAgICAgICBoNS5jbGFzc0xpc3QuYWRkKCdlY2wtc2VsZWN0X19tdWx0aXBsZS1ncm91cF9fdGl0bGUnKTtcbiAgICAgICAgaDUuaW5uZXJUZXh0ID0gZWwubGFiZWw7XG4gICAgICAgIGRpdi5hcHBlbmRDaGlsZChoNSk7XG4gICAgICAgIGVsLmVjbE9wdGlvbkl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IGRpdi5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZU9wdGlvbldpdGhDaGVja2JveChpdGVtKSkpO1xuICAgICAgICByZXR1cm4gZGl2O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlQWxsT3B0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgd2hpbGUgKHRoaXMub3B0aW9uc1dyYXBwZXIuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zV3JhcHBlci5maXJzdENoaWxkLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbk9wdGlvbnNDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWNsT3B0aW9uSXRlbXMuZm9yRWFjaCgoaSkgPT5cbiAgICAgICAgICAgIGkuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubXVsdGlzZWxlY3RXcmFwcGVyLnJlbW92ZUNoaWxkKHRoaXMubXVsdGlEcm9wZG93bik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubXVsdGlEcm9wZG93bi5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LnZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZE11bHRpc2VsZWN0RHJvcGRvd24odHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlTm9SZXN1bHRzRm91bmQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdCBub1Jlc3VsdHNEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgbm9SZXN1bHRzRGl2LmNsYXNzTGlzdC5hZGQodGhpcy5DTEFTU19OT19SRVNVTFRTX0ZPVU5EKTtcbiAgICAgICAgY29uc3QgdGV4dFNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgIHRleHRTcGFuLmlubmVySFRNTCA9IHRoaXMubm9SZXN1bHRzRm91bmRUZXh0O1xuICAgICAgICBub1Jlc3VsdHNEaXYuYXBwZW5kQ2hpbGQodGV4dFNwYW4pO1xuICAgICAgICByZXR1cm4gbm9SZXN1bHRzRGl2O1xuICAgIH1cblxuICAgIHByaXZhdGUgaGlkZU9yaWdpbmFsU2VsZWN0Q29tcG9uZW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhvc3RQYXJlbnRFbC5yZXBsYWNlQ2hpbGQodGhpcy5ob3N0V3JhcHBlckVsLCB0aGlzLmhvc3RFbCk7XG4gICAgICAgIHRoaXMuaG9zdFdyYXBwZXJFbC5hcHBlbmRDaGlsZCh0aGlzLmhvc3RFbCk7XG4gICAgICAgIHRoaXMuaG9zdFdyYXBwZXJFbC5jbGFzc0xpc3QuYWRkKCdlY2wtc2VsZWN0X19jb250YWluZXItLWhpZGRlbicpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlSHRtbEVsZW1lbnRzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhvc3RQYXJlbnRFbC5hcHBlbmRDaGlsZCh0aGlzLm11bHRpc2VsZWN0V3JhcHBlcik7XG4gICAgICAgIHRoaXMubXVsdGlzZWxlY3RXcmFwcGVyLmFwcGVuZENoaWxkKHRoaXMubXVsdGlzZWxlY3RDb250YWluZXIpO1xuICAgICAgICB0aGlzLm11bHRpc2VsZWN0Q29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0SWNvbkNvbnRhaW5lckVsKTtcbiAgICAgICAgdGhpcy5zZWxlY3RJY29uQ29udGFpbmVyRWwuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVJY29uQ29tcG9uZW50KCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4ge307XG5cbiAgICBwcml2YXRlIHByb3BhZ2F0ZVRvdWNoZWQgPSAoKSA9PiB7fTtcblxuICAgIHByaXZhdGUgYnVpbGRNdWx0aXNlbGVjdERyb3Bkb3duKHdpdGhPcHRpb25zOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMubXVsdGlEcm9wZG93biA9IHRoaXMuY3JlYXRlRHJvcGRvd25Gb3JNdWx0aXNlbGVjdCgpO1xuICAgICAgICB0aGlzLm11bHRpc2VsZWN0V3JhcHBlci5hcHBlbmRDaGlsZCh0aGlzLm11bHRpRHJvcGRvd24pO1xuICAgICAgICB0aGlzLm11bHRpRHJvcGRvd24uYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVTZWFyY2hGb3JNdWx0aXNlbGVjdCgpKTtcbiAgICAgICAgdGhpcy5tdWx0aURyb3Bkb3duLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlTXVsdGlTZWxlY3RBbGwoKSk7XG4gICAgICAgIHRoaXMub3B0aW9uc1dyYXBwZXIgPSB0aGlzLmNyZWF0ZU9wdGlvbnNXcmFwcGVyKCk7XG4gICAgICAgIHRoaXMubXVsdGlEcm9wZG93bi5hcHBlbmRDaGlsZCh0aGlzLm9wdGlvbnNXcmFwcGVyKTtcblxuICAgICAgICBpZiAod2l0aE9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuZWNsT3B0aW9uSXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uc1dyYXBwZXIuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVPcHRpb25XaXRoQ2hlY2tib3goaXRlbSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm11bHRpRHJvcGRvd24uYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVNdWx0aXNlbGVjdFRvb2xiYXIoKSk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RBbGxMYWJlbFRleHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEhvc3RFbGVtZW50KCk6IEhUTUxTZWxlY3RFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWwubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEhvc3RQYXJlbnRFbGVtZW50KGhvc3RFbDogSFRNTFNlbGVjdEVsZW1lbnQpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiBob3N0RWwucGFyZW50RWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUhvc3RXcmFwcGVyQ29udGFpbmVyKCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3Qgd3JhcHBlckNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB3cmFwcGVyQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2VjbC1zZWxlY3RfX2NvbnRhaW5lcicpO1xuICAgICAgICB3cmFwcGVyQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoYGVjbC1zZWxlY3RfX2NvbnRhaW5lci0tJHt0aGlzLmVjbFNpemV9YCk7XG4gICAgICAgIHJldHVybiB3cmFwcGVyQ29udGFpbmVyO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlV3JhcHBlck11bHRpc2VsZWN0KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3Qgd3JhcHBlckNvbnRhaW5lck11bHRpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHdyYXBwZXJDb250YWluZXJNdWx0aS5jbGFzc0xpc3QuYWRkKCdlY2wtc2VsZWN0X19tdWx0aXBsZScpO1xuICAgICAgICByZXR1cm4gd3JhcHBlckNvbnRhaW5lck11bHRpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlU2VsZWN0Q29udGFpbmVyTXVsdGlzZWxlY3QoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdCBzZWxlY3RDb250YWluZXJNdWx0aSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBzZWxlY3RDb250YWluZXJNdWx0aS5jbGFzc0xpc3QuYWRkKCdlY2wtc2VsZWN0X19jb250YWluZXInKTtcbiAgICAgICAgc2VsZWN0Q29udGFpbmVyTXVsdGkuY2xhc3NMaXN0LmFkZChgZWNsLXNlbGVjdF9fY29udGFpbmVyLS0ke3RoaXMuZWNsU2l6ZX1gKTtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHNlbGVjdENvbnRhaW5lck11bHRpLmNsYXNzTGlzdC5hZGQoJ2VjbC1zZWxlY3RfX2NvbnRhaW5lci0tZGlzYWJsZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBzZWxlY3RDb250YWluZXJNdWx0aS5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZU11bHRpc2VsZWN0Q291bnRlcigpKTtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LnNldEF0dHJpYnV0ZSgncGxhY2Vob2xkZXInLCB0aGlzLl9lY2xQbGFjZWhvbGRlciB8fCAnJyk7XG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3RJbnB1dC5yZWFkT25seSA9IHRydWU7XG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3RJbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dCcpO1xuICAgICAgICBpZiAodGhpcy5ob3N0RWwuaGFzQXR0cmlidXRlKCdmb3JtQ29udHJvbE5hbWUnKSkge1xuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LnNldEF0dHJpYnV0ZSgnZm9ybUNvbnRyb2xOYW1lJywgdGhpcy5ob3N0RWwuZ2V0QXR0cmlidXRlKCdmb3JtQ29udHJvbE5hbWUnKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oYW5kbGVDbGlja09uTWFpbklucHV0KTtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LmNsYXNzTGlzdC5hZGQoJ2VjbC1zZWxlY3QnKTtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LmNsYXNzTGlzdC5hZGQoJ2VjbC1zZWxlY3RfX211bHRpcGxlLXRvZ2dsZScpO1xuICAgICAgICB0aGlzLm11bHRpU2VsZWN0SW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5ZG93bk9uTWFpbklucHV0KTtcblxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGVjdENvbnRhaW5lck11bHRpLmFwcGVuZENoaWxkKHRoaXMubXVsdGlTZWxlY3RJbnB1dCk7XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdENvbnRhaW5lck11bHRpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlTXVsdGlzZWxlY3RDb3VudGVyKCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Db3VudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkNvdW50LmNsYXNzTGlzdC5hZGQoJ2VjbC1zZWxlY3QtbXVsdGlwbGUtc2VsZWN0aW9ucy1jb3VudGVyJyk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbkNvdW50VGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Db3VudC5hcHBlbmRDaGlsZChzZWxlY3Rpb25Db3VudFRleHQpO1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Db3VudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3dNdWx0aXNlbGVjdENvdW50ZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ291bnQuY2xhc3NMaXN0LmFkZCgnZWNsLXNlbGVjdC1tdWx0aXBsZS1zZWxlY3Rpb25zLWNvdW50ZXItLXZpc2libGUnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZGVNdWx0aXNlbGVjdENvdW50ZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ291bnQuY2xhc3NMaXN0LnJlbW92ZSgnZWNsLXNlbGVjdC1tdWx0aXBsZS1zZWxlY3Rpb25zLWNvdW50ZXItLXZpc2libGUnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZURyb3Bkb3duRm9yTXVsdGlzZWxlY3QoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdCBkcm9wZG93bkRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBkcm9wZG93bkRpdi5jbGFzc0xpc3QuYWRkKCdlY2wtc2VsZWN0X19tdWx0aXBsZS1kcm9wZG93bicpO1xuICAgICAgICBkcm9wZG93bkRpdi5jbGFzc0xpc3QuYWRkKCdlY2wtc2VsZWN0X19jb250YWluZXInKTtcbiAgICAgICAgZHJvcGRvd25EaXYuY2xhc3NMaXN0LmFkZChgZWNsLXNlbGVjdF9fY29udGFpbmVyLS0ke3RoaXMuZWNsU2l6ZX1gKTtcbiAgICAgICAgZHJvcGRvd25EaXYuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgcmV0dXJuIGRyb3Bkb3duRGl2O1xuICAgIH1cblxuICAgIC8vIHNlYXJjaCBib3ggdG8gc2VhcmNoIGFtb25nIG9wdGlvbnNcbiAgICBwcml2YXRlIGNyZWF0ZVNlYXJjaEZvck11bHRpc2VsZWN0KCk6IEhUTUxJbnB1dEVsZW1lbnQge1xuICAgICAgICB0aGlzLm11bHRpU2VhcmNoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgdGhpcy5tdWx0aVNlYXJjaC50eXBlID0gJ3NlYXJjaCc7XG4gICAgICAgIHRoaXMubXVsdGlTZWFyY2guY2xhc3NMaXN0LmFkZCgnZWNsLXRleHQtaW5wdXQnKTtcbiAgICAgICAgdGhpcy5tdWx0aVNlYXJjaC5wbGFjZWhvbGRlciA9ICdTZWFyY2gnO1xuXG4gICAgICAgIHRoaXMubXVsdGlTZWFyY2guYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5ZG93bk9uU2VhcmNoKTtcbiAgICAgICAgdGhpcy5tdWx0aVNlYXJjaC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMub25TZWFyY2hPcHRpb25zKTtcbiAgICAgICAgdGhpcy5tdWx0aVNlYXJjaC5hZGRFdmVudExpc3RlbmVyKCdzZWFyY2gnLCB0aGlzLmhhbmRsZVhCdG5PblNlYXJjaCk7XG4gICAgICAgIHRoaXMuc2VhcmNoRWwgPSB0aGlzLm11bHRpU2VhcmNoO1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aVNlYXJjaDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZU9wdGlvbldpdGhDaGVja2JveChlbDogRWNsTXVsdGlzZWxlY3RPcHRpb25EaXJlY3RpdmUpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGlkID0gdXVpZGdlbigpO1xuICAgICAgICBjb25zdCBjaGVja2JveERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgICAgIGlmIChlbC5jc3NDbGFzc2VzKSB7XG4gICAgICAgICAgICBlbC5jc3NDbGFzc2VzLnNwbGl0KCcgJykuZm9yRWFjaCgoY2wpID0+IHtcbiAgICAgICAgICAgICAgICBjaGVja2JveERpdi5jbGFzc0xpc3QuYWRkKGNsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2hlY2tib3hJbnB1dCA9IHRoaXMuY3JlYXRlQ2hlY2tib3hJbnB1dChpZCwgZWwudmFsdWUpO1xuICAgICAgICBpZiAoZWwuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGNoZWNrYm94RGl2LmNsYXNzTGlzdC5hZGQoJ2VjbC1jaGVja2JveC0tZGlzYWJsZWQnKTtcbiAgICAgICAgICAgIGNoZWNrYm94SW5wdXQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2hlY2tib3hJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2tPbk9wdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsLnNlbGVjdGVkIHx8IHRoaXMuc2VsZWN0ZWRWYWx1ZXMuaW5kZXhPZihlbC52YWx1ZSkgPiAtMSkge1xuICAgICAgICAgICAgY2hlY2tib3hJbnB1dC5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMubXVsdGlTZWxlY3RJbnB1dC52YWx1ZSA9IHRoaXMubXVsdGlTZWxlY3RJbnB1dC52YWx1ZSA9PT0gJycgPyBlbC5sYWJlbCA6IHRoaXMubXVsdGlTZWxlY3RJbnB1dC52YWx1ZSArICcsJyArIGVsLmxhYmVsO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hlY2tib3hJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5oYW5kbGVLZXlkb3duT25PcHRpb24pO1xuICAgICAgICBjaGVja2JveERpdi5hcHBlbmRDaGlsZChjaGVja2JveElucHV0KTtcblxuICAgICAgICBjb25zdCBjaGVja2JveExhYmVsID0gdGhpcy5jcmVhdGVDaGVja2JveExhYmVsKGVsLmxhYmVsLCBpZCk7XG4gICAgICAgIGNoZWNrYm94RGl2LmFwcGVuZENoaWxkKGNoZWNrYm94TGFiZWwpO1xuXG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zLnB1c2goY2hlY2tib3hEaXYpO1xuICAgICAgICByZXR1cm4gY2hlY2tib3hEaXY7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVDaGVja2JveExhYmVsKHRleHQ6IHN0cmluZywgaWQ6IHN0cmluZyk6IEhUTUxMYWJlbEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjaGVja2JveExhYmVsID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChFY2xDaGVja2JveExhYmVsQ29tcG9uZW50KTtcbiAgICAgICAgY2hlY2tib3hMYWJlbC5sb2NhdGlvbi5uYXRpdmVFbGVtZW50Lmh0bWxGb3IgPSBpZDtcblxuICAgICAgICBjb25zdCB0ZXh0U3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgdGV4dFNwYW4uY2xhc3NMaXN0LmFkZCgnZWNsLWNoZWNrYm94X19sYWJlbC10ZXh0Jyk7XG4gICAgICAgIHRleHRTcGFuLmlubmVySFRNTCA9IHRleHQ7XG5cbiAgICAgICAgY2hlY2tib3hMYWJlbC5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKHRleHRTcGFuKTtcbiAgICAgICAgcmV0dXJuIGNoZWNrYm94TGFiZWwubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUNoZWNrYm94SW5wdXQoaWQ6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IEhUTUxJbnB1dEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjaGVja2JveElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgY2hlY2tib3hJbnB1dC50eXBlID0gJ2NoZWNrYm94JztcbiAgICAgICAgY2hlY2tib3hJbnB1dC5jbGFzc0xpc3QuYWRkKCdlY2wtY2hlY2tib3hfX2lucHV0Jyk7XG4gICAgICAgIGNoZWNrYm94SW5wdXQuaWQgPSBpZDtcbiAgICAgICAgY2hlY2tib3hJbnB1dC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gY2hlY2tib3hJbnB1dDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZU11bHRpc2VsZWN0VG9vbGJhcigpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHRoaXMubXVsdGlzZWxlY3RUb29sYmFyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRoaXMubXVsdGlzZWxlY3RUb29sYmFyLmNsYXNzTGlzdC5hZGQoJ2VjbC1zZWxlY3QtbXVsdGlwbGUtdG9vbGJhcicpO1xuICAgICAgICB0aGlzLmNsZWFyQnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgIHRoaXMuY2xlYXJCdG4uY2xhc3NMaXN0LmFkZCgnZWNsLWJ1dHRvbicpO1xuICAgICAgICB0aGlzLmNsZWFyQnRuLmNsYXNzTGlzdC5hZGQoJ2VjbC1idXR0b24tLWdob3N0Jyk7XG4gICAgICAgIHRoaXMuY2xlYXJCdG4udHlwZSA9ICdidXR0b24nO1xuICAgICAgICB0aGlzLmNsZWFyQnRuLnRleHRDb250ZW50ID0gdGhpcy5jbGVhckFsbFRleHQ7XG5cbiAgICAgICAgdGhpcy5jbG9zZUJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICB0aGlzLmNsb3NlQnRuLmNsYXNzTGlzdC5hZGQoJ2VjbC1idXR0b24nKTtcbiAgICAgICAgdGhpcy5jbG9zZUJ0bi5jbGFzc0xpc3QuYWRkKCdlY2wtYnV0dG9uLS1wcmltYXJ5Jyk7XG4gICAgICAgIHRoaXMuY2xvc2VCdG4udGV4dENvbnRlbnQgPSB0aGlzLmNsb3NlVGV4dDtcbiAgICAgICAgdGhpcy5jbG9zZUJ0bi50eXBlID0gJ2J1dHRvbic7XG4gICAgICAgIHRoaXMubXVsdGlzZWxlY3RUb29sYmFyLmFwcGVuZENoaWxkKHRoaXMuY2xlYXJCdG4pO1xuICAgICAgICB0aGlzLm11bHRpc2VsZWN0VG9vbGJhci5hcHBlbmRDaGlsZCh0aGlzLmNsb3NlQnRuKTtcblxuICAgICAgICB0aGlzLmNsZWFyQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmhhbmRsZUtleWRvd25PbkNsZWFyKTtcbiAgICAgICAgdGhpcy5jbGVhckJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2tPbkNsZWFyKTtcblxuICAgICAgICB0aGlzLmNsb3NlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmhhbmRsZUtleWRvd25PbkNsb3NlKTtcbiAgICAgICAgdGhpcy5jbG9zZUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2tPbkNsb3NlKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZVRvb2xiYXJEaXNwbGF5KCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlzZWxlY3RUb29sYmFyO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVG9vbGJhckRpc3BsYXkoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd011bHRpc2VsZWN0VG9vbGJhcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oaWRlTXVsdGlzZWxlY3RUb29sYmFyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3dNdWx0aXNlbGVjdFRvb2xiYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubXVsdGlzZWxlY3RUb29sYmFyLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoaWRlTXVsdGlzZWxlY3RUb29sYmFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm11bHRpc2VsZWN0VG9vbGJhci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQ2xpY2tPbkNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNoZWNrYm94U2VsZWN0QWxsLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gPEhUTUxJbnB1dEVsZW1lbnQ+ZWwuY2hpbGROb2Rlc1swXTtcbiAgICAgICAgICAgIGlmICghaW5wdXQuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzID0gW107XG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3RJbnB1dC52YWx1ZSA9ICcnO1xuICAgICAgICB0aGlzLnVwZGF0ZU11bHRpc2VsZWN0Q291bnRlcigwKTtcbiAgICAgICAgdGhpcy5oaWRlTXVsdGlzZWxlY3RUb29sYmFyKCk7XG4gICAgICAgIHRoaXMuZWNsQ2hhbmdlLmVtaXQoW3RoaXMuc2VsZWN0ZWRWYWx1ZXNdKTtcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy5zZWxlY3RlZFZhbHVlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVDbGlja09uQ2xvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xvc2VNdWx0aXNlbGVjdERyb3Bkb3duKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVLZXlkb3duT25DbG9zZShldnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgc3dpdGNoIChldnQua2V5KSB7XG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuQVJST1dfVVA6IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2xvc2VDbGVhckFycm93VXAoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5BUlJPV19MRUZUOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNsb3NlQXJyb3dMZWZ0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQ2xvc2VDbGVhckFycm93VXAoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRPcHRpb25zID0gdGhpcy5nZXRBY3RpdmVPcHRpb25zKCk7XG4gICAgICAgIGNvbnN0IGZpcnN0T3B0aW9uID0gY3VycmVudE9wdGlvbnNbY3VycmVudE9wdGlvbnMubGVuZ3RoIC0gMV0uZmlyc3RFbGVtZW50Q2hpbGQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGZpcnN0T3B0aW9uLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkNsb3NlQXJyb3dMZWZ0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsZWFyQnRuLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVLZXlkb3duT25DbGVhcihldnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgc3dpdGNoIChldnQua2V5KSB7XG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuQVJST1dfVVA6IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2xvc2VDbGVhckFycm93VXAoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5BUlJPV19SSUdIVDoge1xuICAgICAgICAgICAgICAgIHRoaXMub25DbGVhckFycm93UmlnaHQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25DbGVhckFycm93UmlnaHQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xvc2VCdG4uZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvLyBBZGQvcmVtb3ZlIHZhbHVlcyBmcm9tIHRoZSBzZWxlY3QgaW5wdXRcbiAgICBwcml2YXRlIHVwZGF0ZUN1cnJlbnRWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50c0FycmF5ID0gW107XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHNWYWx1ZXNBcnJheSA9IFtdO1xuICAgICAgICB0aGlzLmNoZWNrYm94U2VsZWN0QWxsLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gPEhUTUxJbnB1dEVsZW1lbnQ+ZWwuY2hpbGROb2Rlc1swXTtcbiAgICAgICAgICAgIGlmIChpbnB1dC5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50c1ZhbHVlc0FycmF5LnB1c2goKDxIVE1MSW5wdXRFbGVtZW50PmVsLmNoaWxkTm9kZXNbMF0pLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnRzQXJyYXkucHVzaChlbC5jaGlsZE5vZGVzWzFdLnRleHRDb250ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMgPSBzZWxlY3RlZEVsZW1lbnRzVmFsdWVzQXJyYXk7XG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3RJbnB1dC52YWx1ZSA9IHNlbGVjdGVkRWxlbWVudHNBcnJheS5qb2luKCcsJyk7XG4gICAgICAgIHRoaXMudXBkYXRlVG9vbGJhckRpc3BsYXkoKTtcbiAgICAgICAgdGhpcy51cGRhdGVNdWx0aXNlbGVjdENvdW50ZXIoc2VsZWN0ZWRFbGVtZW50c0FycmF5Lmxlbmd0aCk7XG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMuc2VsZWN0ZWRWYWx1ZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTXVsdGlzZWxlY3RDb3VudGVyKGNvdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNvdW50ID4gMCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Db3VudC5xdWVyeVNlbGVjdG9yKCdzcGFuJykudGV4dENvbnRlbnQgPSAnJyArIGNvdW50O1xuICAgICAgICAgICAgdGhpcy5zaG93TXVsdGlzZWxlY3RDb3VudGVyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhpZGVNdWx0aXNlbGVjdENvdW50ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrYm94IHRvIHNlbGVjdCBhbGwgdGhlIGVsZW1lbnRzXG4gICAgcHJpdmF0ZSBjcmVhdGVNdWx0aVNlbGVjdEFsbCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGlkID0gdXVpZGdlbigpO1xuICAgICAgICBjb25zdCBjaGVja2JveERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBjaGVja2JveERpdi5jbGFzc0xpc3QuYWRkKCdlY2wtY2hlY2tib3gnKTtcbiAgICAgICAgY2hlY2tib3hEaXYuY2xhc3NMaXN0LmFkZCgnZWNsLXNlbGVjdF9fbXVsdGlwbGUtYWxsJyk7XG5cbiAgICAgICAgdGhpcy5jaGVja2JveFNlbGVjdEFsbCA9IHRoaXMuY3JlYXRlQ2hlY2tib3hJbnB1dChpZCwgJ2FsbCcpO1xuXG4gICAgICAgIHRoaXMuY2hlY2tib3hTZWxlY3RBbGwuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5ZG93bk9uU2VsZWN0QWxsKTtcbiAgICAgICAgdGhpcy5jaGVja2JveFNlbGVjdEFsbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2tPblNlbGVjdEFsbCk7XG5cbiAgICAgICAgY2hlY2tib3hEaXYuYXBwZW5kQ2hpbGQodGhpcy5jaGVja2JveFNlbGVjdEFsbCk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3RBbGxMYWJlbCA9IHRoaXMuY3JlYXRlQ2hlY2tib3hMYWJlbCh0aGlzLmdldFNlbGVjdEFsbExhYmVsVGV4dCgpLCBpZCk7XG4gICAgICAgIGNoZWNrYm94RGl2LmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0QWxsTGFiZWwpO1xuICAgICAgICB0aGlzLnNlbGVjdEFsbEVsbCA9IGNoZWNrYm94RGl2O1xuICAgICAgICByZXR1cm4gY2hlY2tib3hEaXY7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTZWxlY3RBbGxMYWJlbFRleHQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuc2VsZWN0QWxsTGFiZWxUZXh0fSAoJHt0aGlzLmdldEFjdGl2ZU9wdGlvbnMoKS5sZW5ndGh9KWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVPcHRpb25zV3JhcHBlcigpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBkaXYuY2xhc3NMaXN0LmFkZCgnZWNsLXNlbGVjdF9fbXVsdGlwbGUtb3B0aW9ucycpO1xuICAgICAgICByZXR1cm4gZGl2O1xuICAgIH1cblxuICAgIHByaXZhdGUgb25TZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHNBcnJheSA9IFtdO1xuICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzVmFsdWVzQXJyYXkgPSBbXTtcbiAgICAgICAgLy8gU2VsZWN0IGFsbCB0aGUgZWxlbWVudHMsIHRoYXQgYXJlIG5vdCBkaXNhYmxlZFxuICAgICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc1xuICAgICAgICAgICAgLmZpbHRlcigoZWxlbSkgPT4gZWxlbS5zdHlsZS5kaXNwbGF5ICE9PSAnbm9uZScpXG4gICAgICAgICAgICAuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dCA9IDxIVE1MSW5wdXRFbGVtZW50PmVsLmNoaWxkTm9kZXNbMF07XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tib3hTZWxlY3RBbGwuY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlucHV0LmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudHNWYWx1ZXNBcnJheS5wdXNoKGlucHV0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudHNBcnJheS5wdXNoKGVsLmNoaWxkTm9kZXNbMV0udGV4dENvbnRlbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzID0gc2VsZWN0ZWRFbGVtZW50c1ZhbHVlc0FycmF5O1xuICAgICAgICB0aGlzLm11bHRpU2VsZWN0SW5wdXQudmFsdWUgPSBzZWxlY3RlZEVsZW1lbnRzQXJyYXkuam9pbignLCcpO1xuICAgICAgICB0aGlzLnVwZGF0ZU11bHRpc2VsZWN0Q291bnRlcihzZWxlY3RlZEVsZW1lbnRzQXJyYXkubGVuZ3RoKTtcbiAgICAgICAgdGhpcy51cGRhdGVUb29sYmFyRGlzcGxheSgpO1xuICAgICAgICB0aGlzLmVjbENoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRWYWx1ZXMpO1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnNlbGVjdGVkVmFsdWVzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUljb25Db21wb25lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdCBlY2xJY29uQ29tcG9uZW50ID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChFY2xJY29uQ29tcG9uZW50KTtcbiAgICAgICAgZWNsSWNvbkNvbXBvbmVudC5pbnN0YW5jZS5zaXplID0gJ3MnO1xuICAgICAgICBlY2xJY29uQ29tcG9uZW50Lmluc3RhbmNlLmljb24gPSAnY29ybmVyLWFycm93JztcbiAgICAgICAgZWNsSWNvbkNvbXBvbmVudC5pbnN0YW5jZS50cmFuc2Zvcm0gPSAncm90YXRlLTE4MCc7XG4gICAgICAgIGVjbEljb25Db21wb25lbnQuaW5zdGFuY2UuY2xhc3MgPSAnZWNsLXNlbGVjdF9faWNvbi1zaGFwZSc7XG4gICAgICAgIHJldHVybiBlY2xJY29uQ29tcG9uZW50LmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVJY29uQ29udGFpbmVyKCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0SWNvbkNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBzZWxlY3RJY29uQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2VjbC1zZWxlY3RfX2ljb24nKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdEljb25Db250YWluZXI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVYQnRuT25TZWFyY2goZXZ0OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBrZXl3b3JkID0gKGV2dC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgICAgIGlmIChrZXl3b3JkID09PSAnJykge1xuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RBbGxEaXNhYmxlU3RhdHVzKGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWxOb2RlID0gaXRlbS5jaGlsZHJlblsxXS5jaGlsZHJlblsxXTtcbiAgICAgICAgICAgICAgICBsYWJlbE5vZGUuaW5uZXJIVE1MID0gaXRlbS50ZXh0Q29udGVudDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgbm9SZXN1bHRzRm91bmRFeGlzdHMgPSAodGhpcy5vcHRpb25zV3JhcHBlci5sYXN0Q2hpbGQgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5jb250YWlucyh0aGlzLkNMQVNTX05PX1JFU1VMVFNfRk9VTkQpO1xuICAgICAgICAgICAgaWYgKG5vUmVzdWx0c0ZvdW5kRXhpc3RzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zV3JhcHBlci5yZW1vdmVDaGlsZCh0aGlzLm5vUmVzdWx0c0ZvdW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25TZWFyY2hPcHRpb25zKGV2dDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBrZXl3b3JkID0gKGV2dC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgICAgIGxldCBpc01hdGNoRm91bmQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGtleXdvcmQgPT09ICcnKSB7XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdEFsbERpc2FibGVTdGF0dXMoZmFsc2UpO1xuICAgICAgICAgICAgaXNNYXRjaEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWxOb2RlID0gaXRlbS5jaGlsZHJlblsxXS5jaGlsZHJlblsxXTtcbiAgICAgICAgICAgICAgICBsYWJlbE5vZGUuaW5uZXJIVE1MID0gaXRlbS50ZXh0Q29udGVudDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RBbGxEaXNhYmxlU3RhdHVzKHRydWUpO1xuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLnRleHRDb250ZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZihrZXl3b3JkLnRvTG93ZXJDYXNlKCkpIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaXNNYXRjaEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodFNlYXJjaFRleHQoaXRlbSwga2V5d29yZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm9SZXN1bHRzRm91bmRFeGlzdHMgPSAodGhpcy5vcHRpb25zV3JhcHBlci5sYXN0Q2hpbGQgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5jb250YWlucyh0aGlzLkNMQVNTX05PX1JFU1VMVFNfRk9VTkQpO1xuICAgICAgICBpZiAoIWlzTWF0Y2hGb3VuZCAmJiAhbm9SZXN1bHRzRm91bmRFeGlzdHMpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9uc1dyYXBwZXIuYXBwZW5kQ2hpbGQodGhpcy5ub1Jlc3VsdHNGb3VuZCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNYXRjaEZvdW5kICYmIG5vUmVzdWx0c0ZvdW5kRXhpc3RzKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnNXcmFwcGVyLnJlbW92ZUNoaWxkKHRoaXMubm9SZXN1bHRzRm91bmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoaWdobGlnaHRTZWFyY2hUZXh0KGl0ZW06IEhUTUxFbGVtZW50LCBrZXl3b3JkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbGFiZWxOb2RlID0gaXRlbS5jaGlsZHJlblsxXS5jaGlsZHJlblsxXTtcbiAgICAgICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKGtleXdvcmQsICdnaScpO1xuICAgICAgICBjb25zdCB0ZXh0ID0gaXRlbS50ZXh0Q29udGVudDtcbiAgICAgICAgY29uc3QgcmVzID0gdGV4dC5yZXBsYWNlKHJlLCAnPGI+JCY8L2I+Jyk7XG4gICAgICAgIGxhYmVsTm9kZS5pbm5lckhUTUwgPSByZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTZWxlY3RBbGxEaXNhYmxlU3RhdHVzKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jaGVja2JveFNlbGVjdEFsbC5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIHRoaXMuc2VsZWN0QWxsRWxsLmNsYXNzTGlzdC50b2dnbGUoJ2VjbC1jaGVja2JveC0tZGlzYWJsZWQnLCB0aGlzLmNoZWNrYm94U2VsZWN0QWxsLmRpc2FibGVkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0Q29tcG9uZW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9ucy5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSA8SFRNTElucHV0RWxlbWVudD5lbC5jaGlsZE5vZGVzWzBdO1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5jaGVja2JveFNlbGVjdEFsbCkge1xuICAgICAgICAgICAgdGhpcy5jaGVja2JveFNlbGVjdEFsbC5jaGVja2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubXVsdGlTZWxlY3RJbnB1dCkge1xuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LnZhbHVlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzID0gW107XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkNvdW50KSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU11bHRpc2VsZWN0Q291bnRlcigwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgd3JpdGVWYWx1ZXModmFsdWVzOiBBcnJheTxzdHJpbmc+KTogdm9pZCB7XG4gICAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHNBcnJheSA9IFtdO1xuICAgICAgICAgICAgaWYgKHRoaXMubXVsdGlTZWxlY3RPcHRpb25zICYmIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgKGVsZW0pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLmluY2x1ZGVzKCg8SFRNTElucHV0RWxlbWVudD5lbGVtLmNoaWxkTm9kZXNbMF0pLnZhbHVlKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoPEhUTUxJbnB1dEVsZW1lbnQ+ZWxlbS5jaGlsZE5vZGVzWzBdKS5kaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSA8SFRNTElucHV0RWxlbWVudD5lbC5jaGlsZE5vZGVzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnRzQXJyYXkucHVzaChlbC5jaGlsZE5vZGVzWzFdLnRleHRDb250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMucHVzaChpbnB1dC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm11bHRpU2VsZWN0SW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LnZhbHVlID0gc2VsZWN0ZWRFbGVtZW50c0FycmF5LmpvaW4oJywnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlcy5mb3JFYWNoKCh2YWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Db3VudCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTXVsdGlzZWxlY3RDb3VudGVyKHZhbHVlcy5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVTZWxlY3RBbGxMYWJlbFRleHQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0QWxsTGFiZWwubGFzdEVsZW1lbnRDaGlsZC50ZXh0Q29udGVudCA9IGAke3RoaXMuc2VsZWN0QWxsTGFiZWxUZXh0fSAoJHt0aGlzLmdldEFjdGl2ZU9wdGlvbnMoKS5sZW5ndGh9KWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVCdXR0b25zTGFiZWxUZXh0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsb3NlQnRuLnRleHRDb250ZW50ID0gYCR7dGhpcy5jbG9zZVRleHR9YDtcbiAgICAgICAgdGhpcy5jbGVhckJ0bi50ZXh0Q29udGVudCA9IGAke3RoaXMuY2xlYXJBbGxUZXh0fWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVUcmFuc2xhdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IFNFTEVDVF9BTExfS0VZID0gJ2VjbC5tdWx0aXNlbGVjdC5TRUxFQ1QtQUxMJztcbiAgICAgICAgY29uc3QgTk9fUkVTVUxUU19GT1VORF9LRVkgPSAnZWNsLm11bHRpc2VsZWN0Lk5PLVJFU1VMVFMtRk9VTkQnO1xuICAgICAgICBjb25zdCBDTE9TRV9LRVkgPSAnZWNsLmNvbW1vbi5DTE9TRSc7XG4gICAgICAgIGNvbnN0IENMRUFSX0FMTF9LRVkgPSAnZWNsLm11bHRpc2VsZWN0LkNMRUFSLUFMTCc7XG4gICAgICAgIGNvbnN0IFNFQVJDSF9LRVkgPSAnZWNsLmNvbW1vbi5TRUFSQ0gnO1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZVxuICAgICAgICAgICAgLnN0cmVhbShbU0VMRUNUX0FMTF9LRVksIE5PX1JFU1VMVFNfRk9VTkRfS0VZLCBDTE9TRV9LRVksIENMRUFSX0FMTF9LRVksIFNFQVJDSF9LRVldKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgodHJhbnNsYXRpb246IEpTT04pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vUmVzdWx0c0ZvdW5kVGV4dCA9IHRyYW5zbGF0aW9uW05PX1JFU1VMVFNfRk9VTkRfS0VZXTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlVGV4dCA9IHRyYW5zbGF0aW9uW0NMT1NFX0tFWV07XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckFsbFRleHQgPSB0cmFuc2xhdGlvbltDTEVBUl9BTExfS0VZXTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUJ1dHRvbnNMYWJlbFRleHQoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RBbGxMYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEFsbExhYmVsVGV4dCA9IHRyYW5zbGF0aW9uW1NFTEVDVF9BTExfS0VZXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RBbGxMYWJlbFRleHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubXVsdGlTZWFyY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tdWx0aVNlYXJjaC5wbGFjZWhvbGRlciA9IHRyYW5zbGF0aW9uW1NFQVJDSF9LRVldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xvc2VNdWx0aXNlbGVjdERyb3Bkb3duKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm11bHRpRHJvcGRvd24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9XG5cbiAgICBwcml2YXRlIG9wZW5NdWx0aXNlbGVjdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tdWx0aURyb3Bkb3duLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3B0aW9uSW5kZXhCeUlkRnJvbUFjdGl2ZU9wdGlvbnMoaWQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEFjdGl2ZU9wdGlvbnMoKS5maW5kSW5kZXgoKG9wdGlvbikgPT4gb3B0aW9uLmZpcnN0RWxlbWVudENoaWxkLmlkID09PSBpZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVDbGlja09uTWFpbklucHV0KGV2dDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy50b2dnbGVEcm9wZG93bigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdG9nZ2xlRHJvcGRvd24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMubXVsdGlEcm9wZG93bi5zdHlsZS5kaXNwbGF5ID0gdGhpcy5tdWx0aURyb3Bkb3duLnN0eWxlLmRpc3BsYXkgPT09ICdub25lJyA/ICdibG9jaycgOiAnbm9uZSc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVLZXlkb3duT25NYWluSW5wdXQoZXZ0OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHN3aXRjaCAoZXZ0LmtleSkge1xuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkVOVEVSOiB7XG4gICAgICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuQVJST1dfRE9XTjoge1xuICAgICAgICAgICAgICAgIHRoaXMub25NYWluSW5wdXRBcnJvd0Rvd24oZXZ0KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25NYWluSW5wdXRBcnJvd0Rvd24oZXZ0OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLm9wZW5NdWx0aXNlbGVjdCgpO1xuICAgICAgICB0aGlzLnNlYXJjaEVsLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVLZXlkb3duT25TZWFyY2goZXZ0KTogdm9pZCB7XG4gICAgICAgIHN3aXRjaCAoZXZ0LmtleSkge1xuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkVOVEVSOiB7XG4gICAgICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuVEFCOlxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkFSUk9XX0RPV046IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2VhcmNoQXJyb3dEb3duT3JUYWIoKTtcbiAgICAgICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5BUlJPV19VUDoge1xuICAgICAgICAgICAgICAgIHRoaXMub25TZWFyY2hBcnJvd1VwKGV2dCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuRVNDQVBFOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZU11bHRpc2VsZWN0RHJvcGRvd24oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25TZWFyY2hBcnJvd0Rvd25PclRhYigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrYm94U2VsZWN0QWxsLmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrYm94U2VsZWN0QWxsLmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50T3B0aW9ucyA9IHRoaXMuZ2V0QWN0aXZlT3B0aW9ucygpO1xuICAgICAgICAgICAgY29uc3QgZmlyc3RPcHRpb24gPSBjdXJyZW50T3B0aW9uc1swXS5maXJzdEVsZW1lbnRDaGlsZCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIGZpcnN0T3B0aW9uLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uU2VhcmNoQXJyb3dVcChldnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuY2xvc2VNdWx0aXNlbGVjdERyb3Bkb3duKCk7XG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3RJbnB1dC5mb2N1cygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQ2xpY2tPblNlbGVjdEFsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVUb3VjaGVkKCk7XG4gICAgICAgIHRoaXMub25TZWxlY3RBbGwoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUtleWRvd25PblNlbGVjdEFsbChldnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHN3aXRjaCAoZXZ0LmtleSkge1xuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLlRBQjpcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5BUlJPV19ET1dOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblNlbGVjdEFsbEFycm93RG93bk9yVGFiKGV2dCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuQVJST1dfVVA6IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2VsZWN0QWxsQXJyb3dVcCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkVOVEVSOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja2JveFNlbGVjdEFsbC5jbGljaygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkVTQ0FQRToge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VNdWx0aXNlbGVjdERyb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uU2VsZWN0QWxsQXJyb3dEb3duT3JUYWIoZXZ0OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBjdXJyZW50T3B0aW9ucyA9IHRoaXMuZ2V0QWN0aXZlT3B0aW9ucygpO1xuICAgICAgICBpZiAoY3VycmVudE9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgbmV4dFNpYmxpbmdDaGVja2JveCA9IGN1cnJlbnRPcHRpb25zWzBdLmZpcnN0RWxlbWVudENoaWxkIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgbmV4dFNpYmxpbmdDaGVja2JveC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblNlbGVjdEFsbEFycm93VXAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VhcmNoRWwuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUNsaWNrT25PcHRpb24oZXZ0OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBkYXRlQ3VycmVudFZhbHVlKCk7XG4gICAgICAgIHRoaXMucHJvcGFnYXRlVG91Y2hlZCgpO1xuICAgICAgICB0aGlzLmVjbENoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRWYWx1ZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlS2V5ZG93bk9uT3B0aW9uKGV2dDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBzd2l0Y2ggKGV2dC5rZXkpIHtcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5BUlJPV19ET1dOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbk9wdGlvbkFycm93RG93bihldnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkFSUk9XX1VQOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbk9wdGlvbkFycm93VXAoZXZ0KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5FU0NBUEU6IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlTXVsdGlzZWxlY3REcm9wZG93bigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkVOVEVSOiB7XG4gICAgICAgICAgICAgICAgKGV2dC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2xpY2soKTtcbiAgICAgICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5UQUI6IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uT3B0aW9uVGFiKGV2dCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uT3B0aW9uQXJyb3dEb3duKGV2dDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldE9wdGlvbkluZGV4QnlJZEZyb21BY3RpdmVPcHRpb25zKChldnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmlkKTtcbiAgICAgICAgY29uc3QgY3VycmVudE9wdGlvbnMgPSB0aGlzLmdldEFjdGl2ZU9wdGlvbnMoKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSBjdXJyZW50T3B0aW9ucy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0U2libGluZ0NoZWNrYm94ID0gY3VycmVudE9wdGlvbnNbaW5kZXggKyAxXS5maXJzdEVsZW1lbnRDaGlsZCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIG5leHRTaWJsaW5nQ2hlY2tib3guZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJCdG4uZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25PcHRpb25BcnJvd1VwKGV2dDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldE9wdGlvbkluZGV4QnlJZEZyb21BY3RpdmVPcHRpb25zKChldnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmlkKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBwcmV2U2libGluZ0NoZWNrYm94ID0gdGhpcy5nZXRBY3RpdmVPcHRpb25zKClbaW5kZXggLSAxXS5maXJzdEVsZW1lbnRDaGlsZCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIHByZXZTaWJsaW5nQ2hlY2tib3guZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoZWNrYm94U2VsZWN0QWxsLmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaEVsLmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrYm94U2VsZWN0QWxsLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uT3B0aW9uVGFiKGV2dDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0T3B0aW9uSW5kZXhCeUlkRnJvbUFjdGl2ZU9wdGlvbnMoKGV2dC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuaWQpO1xuICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMuZ2V0QWN0aXZlT3B0aW9ucygpLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHRoaXMubXVsdGlTZWxlY3RJbnB1dC5mb2N1cygpOyAvLyBUcmFwIHRhYlxuICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFjdGl2ZU9wdGlvbnMoKTogSFRNTEVsZW1lbnRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpU2VsZWN0T3B0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5zdHlsZS5kaXNwbGF5ICE9PSAnbm9uZScgJiYgIWl0ZW0uY2xhc3NMaXN0LmNvbnRhaW5zKCdlY2wtY2hlY2tib3gtLWRpc2FibGVkJylcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZUFsbExpc3RlbmVycygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmhhbmRsZUtleWRvd25Pbk1haW5JbnB1dCk7XG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3RJbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2tPbk1haW5JbnB1dCk7XG4gICAgICAgIHRoaXMuc2VhcmNoRWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5ZG93bk9uU2VhcmNoKTtcbiAgICAgICAgdGhpcy5zZWFyY2hFbC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMub25TZWFyY2hPcHRpb25zKTtcbiAgICAgICAgdGhpcy5zZWFyY2hFbC5yZW1vdmVFdmVudExpc3RlbmVyKCdzZWFyY2gnLCB0aGlzLmhhbmRsZVhCdG5PblNlYXJjaCk7XG4gICAgICAgIHRoaXMuY2hlY2tib3hTZWxlY3RBbGwucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5ZG93bk9uU2VsZWN0QWxsKTtcbiAgICAgICAgdGhpcy5jaGVja2JveFNlbGVjdEFsbC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2tPblNlbGVjdEFsbCk7XG4gICAgICAgIHRoaXMuY2xlYXJCdG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5ZG93bk9uQ2xlYXIpO1xuICAgICAgICB0aGlzLmNsZWFyQnRuLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oYW5kbGVDbGlja09uQ2xlYXIpO1xuICAgICAgICB0aGlzLmNsb3NlQnRuLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmhhbmRsZUtleWRvd25PbkNsb3NlKTtcbiAgICAgICAgdGhpcy5jbG9zZUJ0bi5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2tPbkNsb3NlKTtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoZWNib3hFbCA9IGVsLmZpcnN0RWxlbWVudENoaWxkIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgICAgICBjaGVjYm94RWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5ZG93bk9uT3B0aW9uKTtcbiAgICAgICAgICAgIGNoZWNib3hFbC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2tPbk9wdGlvbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmluZENhbGxiYWNrcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oYW5kbGVLZXlkb3duT25NYWluSW5wdXQgPSB0aGlzLmhhbmRsZUtleWRvd25Pbk1haW5JbnB1dC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUtleWRvd25PblNlYXJjaCA9IHRoaXMuaGFuZGxlS2V5ZG93bk9uU2VhcmNoLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub25TZWFyY2hPcHRpb25zID0gdGhpcy5vblNlYXJjaE9wdGlvbnMuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVYQnRuT25TZWFyY2ggPSB0aGlzLmhhbmRsZVhCdG5PblNlYXJjaC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUtleWRvd25PblNlbGVjdEFsbCA9IHRoaXMuaGFuZGxlS2V5ZG93bk9uU2VsZWN0QWxsLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlS2V5ZG93bk9uT3B0aW9uID0gdGhpcy5oYW5kbGVLZXlkb3duT25PcHRpb24uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVDbGlja09uTWFpbklucHV0ID0gdGhpcy5oYW5kbGVDbGlja09uTWFpbklucHV0LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2xpY2tPblNlbGVjdEFsbCA9IHRoaXMuaGFuZGxlQ2xpY2tPblNlbGVjdEFsbC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUNsaWNrT25PcHRpb24gPSB0aGlzLmhhbmRsZUNsaWNrT25PcHRpb24uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVDbGlja09uQ2xlYXIgPSB0aGlzLmhhbmRsZUNsaWNrT25DbGVhci5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUtleWRvd25PbkNsZWFyID0gdGhpcy5oYW5kbGVLZXlkb3duT25DbGVhci5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUtleWRvd25PbkNsb3NlID0gdGhpcy5oYW5kbGVLZXlkb3duT25DbG9zZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUNsaWNrT25DbG9zZSA9IHRoaXMuaGFuZGxlQ2xpY2tPbkNsb3NlLmJpbmQodGhpcyk7XG4gICAgfVxufVxuIiwiPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuIl19
|
|
158
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNsLW11bHRpc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9lY2wtbXVsdGlzZWxlY3QvZWNsLW11bHRpc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9lY2wtbXVsdGlzZWxlY3QvZWNsLW11bHRpc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULGVBQWUsRUFDZixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFBWSxLQUFLLEVBRzVCLE1BQU0sRUFHTixpQkFBaUIsR0FDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDaEgsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBZTlELE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxnQkFBZ0I7SUFJMUMsSUFDWCxTQUFTO1FBQ1QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzNCLENBQUM7SUFDRCxJQUFJLFNBQVMsQ0FBQyxLQUEwQjtRQUNwQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUMz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QUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxFQUFDLEdBQUcsRUFBRSx3QkFBd0IsRUFBQzs0QkFDdEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7bUtBSytELGNBQWM7c0JBQS9FLGVBQWU7dUJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDZCQUE2QixDQUFDO2dCQUU1RCxTQUFTO3NCQURHLEtBQUs7Z0JBV2pCLFFBQVE7c0JBRFgsS0FBSzs7c0JBQUksV0FBVzt1QkFBQyxlQUFlO2dCQVdqQyxVQUFVO3NCQURiLFdBQVc7dUJBQUMsT0FBTztnQkFJVixTQUFTO3NCQUFsQixNQUFNO2dCQUVILGNBQWM7c0JBRGpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbiwgRG9DaGVjaywgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBIb3N0QmluZGluZywgSW5qZWN0b3IsIElucHV0LCBJdGVyYWJsZURpZmZlciwgSXRlcmFibGVEaWZmZXJzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuIH0gZnJvbSAnQGV1aS9iYXNlJztcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRUNMQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4uL2VjbC1iYXNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBFY2xNdWx0aXNlbGVjdERyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi9lY2wtbXVsdGlzZWxlY3QtZHJvcGRvd24vZWNsLW11bHRpc2VsZWN0LWRyb3Bkb3duLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFY2xNdWx0aXNlbGVjdE9wdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4vZWNsLW11bHRpc2VsZWN0LW9wdGlvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcblxuQENvbXBvbmVudCh7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ3NlbGVjdFtlY2xNdWx0aXNlbGVjdF0nLFxuICAgIHRlbXBsYXRlVXJsOiAnZWNsLW11bHRpc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRWNsTXVsdGlzZWxlY3RDb21wb25lbnQpLFxuICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRWNsTXVsdGlzZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBFQ0xCYXNlRGlyZWN0aXZlIGltcGxlbWVudHMgRG9DaGVjaywgT25Jbml0LFxuICAgIE9uRGVzdHJveSwgQWZ0ZXJDb250ZW50SW5pdCB7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKGZvcndhcmRSZWYoKCkgPT4gRWNsTXVsdGlzZWxlY3RPcHRpb25EaXJlY3RpdmUpKSBlY2xPcHRpb25JdGVtczogUXVlcnlMaXN0PEVjbE11bHRpc2VsZWN0T3B0aW9uRGlyZWN0aXZlPjtcbiAgICBAY29lcmNlQm9vbGVhbiBASW5wdXQoKVxuICAgIGdldCBpc0ludmFsaWQoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0ludmFsaWQ7XG4gICAgfVxuICAgIHNldCBpc0ludmFsaWQodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5faXNJbnZhbGlkID0gdmFsdWU7XG4gICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0Q29tcG9uZW50KSB7XG4gICAgICAgICAgICB0aGlzLm11bHRpc2VsZWN0Q29tcG9uZW50LmlzSW52YWxpZCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIEBJbnB1dCgpIEBIb3N0QmluZGluZygnYXR0ci5kaXNhYmxlZCcpXG4gICAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuIHwgYW55KSB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0Q29tcG9uZW50KSB7XG4gICAgICAgICAgICB0aGlzLm11bHRpc2VsZWN0Q29tcG9uZW50LmRpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkIHx8IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgZ2V0IGNzc0NsYXNzZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFtzdXBlci5nZXRDc3NDbGFzc2VzKCdlY2wtc2VsZWN0JyldLmpvaW4oJyAnKS50cmltKCk7XG4gICAgfVxuICAgIEBPdXRwdXQoKSBlY2xDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBASW5wdXQoKVxuICAgIHNldCBlY2xQbGFjZWhvbGRlcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2VjbFBsYWNlaG9sZGVyID0gdmFsdWU7XG4gICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0Q29tcG9uZW50KSB7XG4gICAgICAgICAgICB0aGlzLm11bHRpc2VsZWN0Q29tcG9uZW50Lm1haW5JbnB1dFBsYWNlaG9sZGVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGVjbFBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lY2xQbGFjZWhvbGRlcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2lzSW52YWxpZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2VjbFBsYWNlaG9sZGVyID0gJ1NlbGVjdCBpdGVtJztcbiAgICBwcml2YXRlIGRpZmZlcjogSXRlcmFibGVEaWZmZXI8RWNsTXVsdGlzZWxlY3RPcHRpb25EaXJlY3RpdmU+O1xuICAgIHByaXZhdGUgbXVsdGlzZWxlY3RDb21wb25lbnQ6IEVjbE11bHRpc2VsZWN0RHJvcGRvd25Db21wb25lbnQ7XG4gICAgcHJpdmF0ZSBob3N0RWw6IEhUTUxTZWxlY3RFbGVtZW50O1xuICAgIHByaXZhdGUgaG9zdFBhcmVudEVsOiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIGhvc3RXcmFwcGVyRWw6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgbXVsdGlzZWxlY3RDb21wb25lbnRIdG1sOiBhbnk7XG4gICAgcHJpdmF0ZSBkZXN0cm95JDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZiwgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLCBwcml2YXRlIGRpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmRpZmZlciA9IHRoaXMuZGlmZmVycy5maW5kKFtdKS5jcmVhdGUoKTtcbiAgICB9XG5cbiAgICBuZ0RvQ2hlY2soKTogdm9pZCB7XG5cbiAgICAgICAgY29uc3QgZGlmZiA9IHRoaXMuZGlmZmVyLmRpZmYodGhpcy5lY2xPcHRpb25JdGVtcyk7XG5cbiAgICAgICAgaWYgKGRpZmYpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0Q29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tdWx0aXNlbGVjdENvbXBvbmVudC5tdWx0aU9wdGlvbkRpcmVjdGl2ZXMgPSB0aGlzLmVjbE9wdGlvbkl0ZW1zLnRvQXJyYXkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhvc3RFbCA9IHRoaXMuZ2V0SG9zdEVsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5ob3N0UGFyZW50RWwgPSB0aGlzLmdldEhvc3RQYXJlbnRFbGVtZW50KHRoaXMuaG9zdEVsKTtcbiAgICAgICAgdGhpcy5ob3N0V3JhcHBlckVsID0gdGhpcy5jcmVhdGVIb3N0V3JhcHBlckNvbnRhaW5lcigpO1xuICAgICAgICB0aGlzLm11bHRpc2VsZWN0Q29tcG9uZW50SHRtbCA9IHRoaXMuY3JlYXRlTXVsdGlzZWxlY3RDb21wb25lbnQoKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYXR0YWNoT3B0aW9ucygpO1xuICAgICAgICBpZiAodGhpcy5ob3N0UGFyZW50RWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5oaWRlT3JpZ2luYWxTZWxlY3RDb21wb25lbnQoKTtcbiAgICAgICAgICAgIHRoaXMuaG9zdFBhcmVudEVsLmFwcGVuZENoaWxkKHRoaXMubXVsdGlzZWxlY3RDb21wb25lbnRIdG1sKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZGVPcmlnaW5hbFNlbGVjdENvbXBvbmVudCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ob3N0UGFyZW50RWwucmVwbGFjZUNoaWxkKHRoaXMuaG9zdFdyYXBwZXJFbCwgdGhpcy5ob3N0RWwpO1xuICAgICAgICB0aGlzLmhvc3RXcmFwcGVyRWwuYXBwZW5kQ2hpbGQodGhpcy5ob3N0RWwpO1xuICAgICAgICB0aGlzLmhvc3RXcmFwcGVyRWwuY2xhc3NMaXN0LmFkZCgnZWNsLXNlbGVjdF9fY29udGFpbmVyLS1oaWRkZW4nKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUhvc3RXcmFwcGVyQ29udGFpbmVyKCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3Qgd3JhcHBlckNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB3cmFwcGVyQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2VjbC1zZWxlY3RfX2NvbnRhaW5lcicpO1xuICAgICAgICB3cmFwcGVyQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2VjbC1zZWxlY3RfX2NvbnRhaW5lci0tbScpO1xuICAgICAgICByZXR1cm4gd3JhcHBlckNvbnRhaW5lcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEhvc3RFbGVtZW50KCk6IEhUTUxTZWxlY3RFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWwubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEhvc3RQYXJlbnRFbGVtZW50KGhvc3RFbDogSFRNTFNlbGVjdEVsZW1lbnQpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiBob3N0RWwucGFyZW50RWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZU11bHRpc2VsZWN0Q29tcG9uZW50KCk6IGFueSB7XG4gICAgICAgIGNvbnN0IG5nQ29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCwgdW5kZWZpbmVkLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICAgICAgICBjb25zdCBtdWx0aXNlbGVjdCA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoRWNsTXVsdGlzZWxlY3REcm9wZG93bkNvbXBvbmVudCk7XG4gICAgICAgIHRoaXMubXVsdGlzZWxlY3RDb21wb25lbnQgPSBtdWx0aXNlbGVjdC5pbnN0YW5jZTtcbiAgICAgICAgdGhpcy5tdWx0aXNlbGVjdENvbXBvbmVudC5lY2xDaGFuZ2VcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZWNsQ2hhbmdlLmVtaXQoZXZ0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLm11bHRpc2VsZWN0Q29tcG9uZW50Lm1haW5JbnB1dFBsYWNlaG9sZGVyID0gdGhpcy5lY2xQbGFjZWhvbGRlcjtcbiAgICAgICAgaWYgKG5nQ29udHJvbCkge1xuICAgICAgICAgICAgbmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzLm11bHRpc2VsZWN0Q29tcG9uZW50O1xuICAgICAgICB9XG4gICAgICAgIG11bHRpc2VsZWN0Lmluc3RhbmNlLmRpc2FibGVkID0gdGhpcy5kaXNhYmxlZDtcbiAgICAgICAgbXVsdGlzZWxlY3QuaW5zdGFuY2UuaXNJbnZhbGlkID0gdGhpcy5pc0ludmFsaWQ7XG4gICAgICAgIHJldHVybiBtdWx0aXNlbGVjdC5sb2NhdGlvbi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXR0YWNoT3B0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm11bHRpc2VsZWN0Q29tcG9uZW50Lm11bHRpT3B0aW9uRGlyZWN0aXZlcyA9IHRoaXMuZWNsT3B0aW9uSXRlbXMudG9BcnJheSgpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCI8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4iXX0=
|