desy-angular 14.2.0 → 15.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/fesm2022/desy-angular.mjs +1290 -821
- package/fesm2022/desy-angular.mjs.map +1 -1
- package/index.d.ts +3 -0
- package/lib/desy-forms/components/character-count/character-count.component.d.ts +1 -8
- package/lib/desy-forms/components/checkboxes/checkboxes-parent.component.d.ts +8 -0
- package/lib/desy-forms/components/checkboxes/checkboxes.component.d.ts +26 -0
- package/lib/desy-forms/components/date-input/date-input.component.d.ts +13 -7
- package/lib/desy-forms/components/datepicker/datepicker.component.d.ts +1 -5
- package/lib/desy-forms/components/fieldset/fieldset.component.d.ts +7 -0
- package/lib/desy-forms/components/file-upload/file-upload.component.d.ts +5 -0
- package/lib/desy-forms/components/input/input.component.d.ts +1 -4
- package/lib/desy-forms/components/input-group/input-group.component.d.ts +7 -0
- package/lib/desy-forms/components/label/label.component.d.ts +1 -2
- package/lib/desy-forms/components/radios/radios-parent.component.d.ts +8 -0
- package/lib/desy-forms/components/radios/radios.component.d.ts +26 -0
- package/lib/desy-forms/components/search-bar/search-bar.component.d.ts +1 -2
- package/lib/desy-forms/components/select/option/option.component.d.ts +1 -2
- package/lib/desy-forms/components/textarea/textarea.component.d.ts +1 -3
- package/lib/desy-forms/components/tree/tree-item/tree-item.component.d.ts +4 -0
- package/lib/desy-forms/components/tree/tree.component.d.ts +62 -2
- package/lib/desy-forms/directives/condition.directive.d.ts +5 -0
- package/lib/desy-nav/components/header/header-offcanvas/header-offcanvas.component.d.ts +7 -0
- package/lib/desy-nav/components/menubar/menubar.component.d.ts +7 -0
- package/lib/desy-tables/components/table-advanced/table-advanced.component.d.ts +55 -0
- package/lib/desy-tables/directives/cell.directive.d.ts +3 -0
- package/lib/desy-tables/directives/row.directive.d.ts +7 -0
- package/lib/shared/components/accessibility/accessibility.component.d.ts +3 -0
- package/lib/shared/components/accessibility-and-content-required/accessibility-and-content-required.component.d.ts +8 -0
- package/lib/shared/components/accessibility-and-text-or-html-required/accessibility-and-text-or-html-required.component.d.ts +6 -0
- package/lib/shared/components/content-base/content-base.component.d.ts +3 -0
- package/lib/shared/components/text-or-html-required/text-or-html-required.component.d.ts +4 -0
- package/lib/shared/decorators/desy-content-child.decorator.d.ts +11 -0
- package/lib/shared/decorators/desy-on-input-change.decorator.d.ts +4 -0
- package/lib/shared/directives/content-change.directive.d.ts +4 -0
- package/lib/shared/directives/custom-inner-content.directive.d.ts +6 -0
- package/lib/shared/pipes/external-href.pipe.d.ts +4 -0
- package/lib/shared/utils/search-utils.d.ts +10 -0
- package/lib/shared/utils/string-utils.d.ts +7 -0
- package/package.json +9 -11
- package/esm2022/desy-angular.mjs +0 -2
- package/esm2022/lib/desy-angular.module.mjs +0 -76
- package/esm2022/lib/desy-buttons/components/button/button.component.mjs +0 -118
- package/esm2022/lib/desy-buttons/components/button-loader/button-loader.component.mjs +0 -66
- package/esm2022/lib/desy-buttons/components/dropdown/dropdown.component.mjs +0 -159
- package/esm2022/lib/desy-buttons/components/listbox/listbox-item/listbox-item.component.mjs +0 -39
- package/esm2022/lib/desy-buttons/components/listbox/listbox-label/listbox-label.component.mjs +0 -14
- package/esm2022/lib/desy-buttons/components/listbox/listbox.component.mjs +0 -334
- package/esm2022/lib/desy-buttons/components/pill/pill.component.mjs +0 -83
- package/esm2022/lib/desy-buttons/components/toggle/toggle-off-state/toggle-off-state.component.mjs +0 -17
- package/esm2022/lib/desy-buttons/components/toggle/toggle-on-state/toggle-on-state.component.mjs +0 -17
- package/esm2022/lib/desy-buttons/components/toggle/toggle.component.mjs +0 -62
- package/esm2022/lib/desy-buttons/desy-buttons.module.mjs +0 -70
- package/esm2022/lib/desy-buttons/interfaces/listbox-item-data.mjs +0 -2
- package/esm2022/lib/desy-buttons/interfaces/listbox-label-data.mjs +0 -2
- package/esm2022/lib/desy-commons/components/content/content.component.mjs +0 -14
- package/esm2022/lib/desy-commons/components/description/description.component.mjs +0 -19
- package/esm2022/lib/desy-commons/components/divider/divider.component.mjs +0 -16
- package/esm2022/lib/desy-commons/components/icon/icon.component.mjs +0 -16
- package/esm2022/lib/desy-commons/components/title/title.component.mjs +0 -17
- package/esm2022/lib/desy-commons/desy-commons.module.mjs +0 -24
- package/esm2022/lib/desy-commons/interfaces/content-data.mjs +0 -2
- package/esm2022/lib/desy-commons/interfaces/description-data.mjs +0 -2
- package/esm2022/lib/desy-commons/interfaces/divider-data.mjs +0 -2
- package/esm2022/lib/desy-commons/interfaces/icon-data.mjs +0 -2
- package/esm2022/lib/desy-commons/interfaces/index.mjs +0 -6
- package/esm2022/lib/desy-commons/interfaces/title-data.mjs +0 -2
- package/esm2022/lib/desy-forms/components/character-count/character-count.component.mjs +0 -156
- package/esm2022/lib/desy-forms/components/checkboxes/checkbox-item/checkbox-item.component.mjs +0 -191
- package/esm2022/lib/desy-forms/components/checkboxes/checkboxes-parent.component.mjs +0 -15
- package/esm2022/lib/desy-forms/components/checkboxes/checkboxes.component.mjs +0 -275
- package/esm2022/lib/desy-forms/components/date-input/date-input-day/date-input-day.component.mjs +0 -55
- package/esm2022/lib/desy-forms/components/date-input/date-input-divider/date-input-divider.component.mjs +0 -19
- package/esm2022/lib/desy-forms/components/date-input/date-input-item/date-input-item.component.mjs +0 -42
- package/esm2022/lib/desy-forms/components/date-input/date-input-month/date-input-month.component.mjs +0 -55
- package/esm2022/lib/desy-forms/components/date-input/date-input-year/date-input-year.component.mjs +0 -51
- package/esm2022/lib/desy-forms/components/date-input/date-input.component.mjs +0 -303
- package/esm2022/lib/desy-forms/components/datepicker/datepicker.component.mjs +0 -190
- package/esm2022/lib/desy-forms/components/datepicker/datepicker.pipe.mjs +0 -34
- package/esm2022/lib/desy-forms/components/error-message/error-message.component.mjs +0 -32
- package/esm2022/lib/desy-forms/components/fieldset/fieldset.component.mjs +0 -59
- package/esm2022/lib/desy-forms/components/fieldset/legend/legend.component.mjs +0 -34
- package/esm2022/lib/desy-forms/components/file-upload/file-upload.component.mjs +0 -78
- package/esm2022/lib/desy-forms/components/form-field/form-field.component.mjs +0 -127
- package/esm2022/lib/desy-forms/components/hint/hint.component.mjs +0 -30
- package/esm2022/lib/desy-forms/components/input/input.component.mjs +0 -110
- package/esm2022/lib/desy-forms/components/input-group/input-group-divider/input-group-divider.component.mjs +0 -20
- package/esm2022/lib/desy-forms/components/input-group/input-group-input/input-group-input.component.mjs +0 -59
- package/esm2022/lib/desy-forms/components/input-group/input-group-item/input-group-item.component.mjs +0 -42
- package/esm2022/lib/desy-forms/components/input-group/input-group-select/input-group-select.component.mjs +0 -51
- package/esm2022/lib/desy-forms/components/input-group/input-group.component.mjs +0 -232
- package/esm2022/lib/desy-forms/components/label/label.component.mjs +0 -39
- package/esm2022/lib/desy-forms/components/radios/radio-item/radio-item.component.mjs +0 -138
- package/esm2022/lib/desy-forms/components/radios/radios-parent.component.mjs +0 -15
- package/esm2022/lib/desy-forms/components/radios/radios.component.mjs +0 -286
- package/esm2022/lib/desy-forms/components/search-bar/search-bar.component.mjs +0 -65
- package/esm2022/lib/desy-forms/components/select/option/option.component.mjs +0 -22
- package/esm2022/lib/desy-forms/components/select/option-group/option-group.component.mjs +0 -18
- package/esm2022/lib/desy-forms/components/select/select-item/select-item.component.mjs +0 -14
- package/esm2022/lib/desy-forms/components/select/select.component.mjs +0 -94
- package/esm2022/lib/desy-forms/components/template-driven-wrapper/template-driven-wrapper.component.mjs +0 -12
- package/esm2022/lib/desy-forms/components/textarea/textarea.component.mjs +0 -86
- package/esm2022/lib/desy-forms/components/tree/interfaces/itree-item.mjs +0 -3
- package/esm2022/lib/desy-forms/components/tree/interfaces/quit-tree-item-focus-options.mjs +0 -2
- package/esm2022/lib/desy-forms/components/tree/tree-checkbox/tree-checkbox.component.mjs +0 -174
- package/esm2022/lib/desy-forms/components/tree/tree-item/tree-item.component.mjs +0 -381
- package/esm2022/lib/desy-forms/components/tree/tree-items-generator/tree-items-generator.component.mjs +0 -25
- package/esm2022/lib/desy-forms/components/tree/tree-sub/tree-sub.component.mjs +0 -16
- package/esm2022/lib/desy-forms/components/tree/tree.component.mjs +0 -362
- package/esm2022/lib/desy-forms/desy-forms.module.mjs +0 -223
- package/esm2022/lib/desy-forms/directives/condition.directive.mjs +0 -34
- package/esm2022/lib/desy-forms/interfaces/error-message-data.mjs +0 -2
- package/esm2022/lib/desy-forms/interfaces/fieldset-data.mjs +0 -2
- package/esm2022/lib/desy-forms/interfaces/hint-data.mjs +0 -2
- package/esm2022/lib/desy-forms/interfaces/index.mjs +0 -13
- package/esm2022/lib/desy-forms/interfaces/item-checkbox-data.mjs +0 -2
- package/esm2022/lib/desy-forms/interfaces/item-date-input-data.mjs +0 -2
- package/esm2022/lib/desy-forms/interfaces/item-divider-date-input-data.mjs +0 -2
- package/esm2022/lib/desy-forms/interfaces/item-divider-input-group-data.mjs +0 -2
- package/esm2022/lib/desy-forms/interfaces/item-input-group-data.mjs +0 -2
- package/esm2022/lib/desy-forms/interfaces/item-radio-data.mjs +0 -2
- package/esm2022/lib/desy-forms/interfaces/item-radio-with-template-data.mjs +0 -2
- package/esm2022/lib/desy-forms/interfaces/label-data.mjs +0 -2
- package/esm2022/lib/desy-forms/interfaces/legend-data.mjs +0 -2
- package/esm2022/lib/desy-forms/interfaces/select-item-data.mjs +0 -2
- package/esm2022/lib/desy-modals/components/dialog/dialog.component.mjs +0 -155
- package/esm2022/lib/desy-modals/components/modal/modal-button-loader-primary/modal-button-loader-primary.component.mjs +0 -25
- package/esm2022/lib/desy-modals/components/modal/modal-button-loader-secondary/modal-button-loader-secondary.component.mjs +0 -23
- package/esm2022/lib/desy-modals/components/modal/modal-button-primary/modal-button-primary.component.mjs +0 -23
- package/esm2022/lib/desy-modals/components/modal/modal-button-secondary/modal-button-secondary.component.mjs +0 -23
- package/esm2022/lib/desy-modals/components/modal/modal.component.mjs +0 -192
- package/esm2022/lib/desy-modals/desy-modals.module.mjs +0 -50
- package/esm2022/lib/desy-modals/interfaces/dialog-options.mjs +0 -2
- package/esm2022/lib/desy-modals/interfaces/index.mjs +0 -7
- package/esm2022/lib/desy-modals/interfaces/modal-button-data.mjs +0 -2
- package/esm2022/lib/desy-modals/interfaces/modal-data.mjs +0 -2
- package/esm2022/lib/desy-modals/interfaces/modal-icon-data.mjs +0 -2
- package/esm2022/lib/desy-modals/interfaces/modal-options.mjs +0 -2
- package/esm2022/lib/desy-modals/interfaces/open-dialog-result.mjs +0 -2
- package/esm2022/lib/desy-modals/services/dialog.service.mjs +0 -114
- package/esm2022/lib/desy-nav/components/breadcrumbs/breadcrumbs-item/breadcrumbs-item.component.mjs +0 -16
- package/esm2022/lib/desy-nav/components/breadcrumbs/breadcrumbs.component.mjs +0 -53
- package/esm2022/lib/desy-nav/components/error-summary/error-summary-item/error-summary-item.component.mjs +0 -19
- package/esm2022/lib/desy-nav/components/error-summary/error-summary.component.mjs +0 -67
- package/esm2022/lib/desy-nav/components/footer/footer-meta/footer-meta-item/footer-meta-item.component.mjs +0 -25
- package/esm2022/lib/desy-nav/components/footer/footer-meta/footer-meta.component.mjs +0 -31
- package/esm2022/lib/desy-nav/components/footer/footer-navigation/footer-navigation-item/footer-navigation-item.component.mjs +0 -25
- package/esm2022/lib/desy-nav/components/footer/footer-navigation/footer-navigation.component.mjs +0 -21
- package/esm2022/lib/desy-nav/components/footer/footer.component.mjs +0 -91
- package/esm2022/lib/desy-nav/components/header/header-custom-navigation/header-custom-navigation.component.mjs +0 -15
- package/esm2022/lib/desy-nav/components/header/header-dropdown/header-dropdown.component.mjs +0 -46
- package/esm2022/lib/desy-nav/components/header/header-mobileText/header-mobile-text.component.mjs +0 -336
- package/esm2022/lib/desy-nav/components/header/header-navigation/header-navigation-item/header-navigation-item.component.mjs +0 -31
- package/esm2022/lib/desy-nav/components/header/header-navigation/header-navigation.component.mjs +0 -36
- package/esm2022/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-button/header-offcanvas-button.component.mjs +0 -20
- package/esm2022/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-close-button/header-offcanvas-close-button.component.mjs +0 -15
- package/esm2022/lib/desy-nav/components/header/header-offcanvas/header-offcanvas.component.mjs +0 -93
- package/esm2022/lib/desy-nav/components/header/header-subnav/header-subnav.component.mjs +0 -41
- package/esm2022/lib/desy-nav/components/header/header.component.mjs +0 -119
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-custom-navigation/header-custom-navigation.component.mjs +0 -14
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-dropdown/header-advanced-dropdown.component.mjs +0 -38
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-logo/header-advanced-logo.component.mjs +0 -37
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-sub/header-advanced-sub.component.mjs +0 -42
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-subtitle/header-advanced-subtitle.component.mjs +0 -14
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-super/header-advanced-super.component.mjs +0 -42
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-title/header-advanced-title.component.mjs +0 -19
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-title-container/header-advanced-title-container.component.mjs +0 -38
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced.component.mjs +0 -54
- package/esm2022/lib/desy-nav/components/header-mini/header-mini.component.mjs +0 -32
- package/esm2022/lib/desy-nav/components/links-list/links-list-icon-right/links-list-icon-right.component.mjs +0 -16
- package/esm2022/lib/desy-nav/components/links-list/links-list-item/links-list-item.component.mjs +0 -46
- package/esm2022/lib/desy-nav/components/links-list/links-list-item-sub/links-list-item-sub.component.mjs +0 -14
- package/esm2022/lib/desy-nav/components/links-list/links-list.component.mjs +0 -44
- package/esm2022/lib/desy-nav/components/menu-horizontal/menu-horizontal-item/menu-horizontal-item.component.mjs +0 -42
- package/esm2022/lib/desy-nav/components/menu-horizontal/menu-horizontal.component.mjs +0 -76
- package/esm2022/lib/desy-nav/components/menu-navigation/components/menu-navigation-item/menu-navigation-item.component.mjs +0 -55
- package/esm2022/lib/desy-nav/components/menu-navigation/components/menu-navigation-subitem/menu-navigation-subitem.component.mjs +0 -49
- package/esm2022/lib/desy-nav/components/menu-navigation/menu-navigation.component.mjs +0 -858
- package/esm2022/lib/desy-nav/components/menu-vertical/menu-vertical-item/menu-vertical-item.component.mjs +0 -44
- package/esm2022/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub/menu-vertical-item-sub.component.mjs +0 -18
- package/esm2022/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub-item/menu-vertical-item-sub-item.component.mjs +0 -34
- package/esm2022/lib/desy-nav/components/menu-vertical/menu-vertical.component.mjs +0 -98
- package/esm2022/lib/desy-nav/components/menubar/components/menubar-item/menubar-item.component.mjs +0 -51
- package/esm2022/lib/desy-nav/components/menubar/components/menubar-label/menubar-label.component.mjs +0 -14
- package/esm2022/lib/desy-nav/components/menubar/components/menubar-subitem/menubar-subitem.component.mjs +0 -36
- package/esm2022/lib/desy-nav/components/menubar/components/menubar-subsubitem/menubar-subsubitem.component.mjs +0 -27
- package/esm2022/lib/desy-nav/components/menubar/directives/menubaritem.directive.mjs +0 -47
- package/esm2022/lib/desy-nav/components/menubar/menubar.component.mjs +0 -966
- package/esm2022/lib/desy-nav/components/nav/nav-item/nav-item.component.mjs +0 -43
- package/esm2022/lib/desy-nav/components/nav/nav.component.mjs +0 -115
- package/esm2022/lib/desy-nav/components/notification/notification-item/notification-item.component.mjs +0 -25
- package/esm2022/lib/desy-nav/components/notification/notification.component.mjs +0 -127
- package/esm2022/lib/desy-nav/components/skip-link/skip-link.component.mjs +0 -62
- package/esm2022/lib/desy-nav/desy-nav.module.mjs +0 -290
- package/esm2022/lib/desy-nav/directives/dynamic-heading.directive.mjs +0 -40
- package/esm2022/lib/desy-nav/interfaces/breadcrumbs.data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/error-summary-data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/footer-data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/footer-logo.mjs +0 -10
- package/esm2022/lib/desy-nav/interfaces/header-advanced-logo.mjs +0 -7
- package/esm2022/lib/desy-nav/interfaces/header-dropdown-data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/header-mobile-text-data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/header-navigation-data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/header-navigation-item-data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/header-offcanvas-data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/header-skiplink-data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/header-subnav-data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/index.mjs +0 -21
- package/esm2022/lib/desy-nav/interfaces/menu-horizontal-item-data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/menu-horizontal-item-event-data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/menu-navigation-item-sub-item-sub-item.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/menu-navigation-item-sub-item.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/menu-navigation.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/menu-vertical-items-data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/menu-vertical-sub-data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/menu-vertical-sub-items-data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/menubar-item-sub-item-sub-item.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/menubar-item-sub-item.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/menubar-item-sub.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/menubar-item.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/nav-item-event.data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/nav-item.data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/notification-items-data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/notification-options.mjs +0 -2
- package/esm2022/lib/desy-pagination/components/pagination/pagination.component.mjs +0 -242
- package/esm2022/lib/desy-pagination/components/pagination-item-perpage/pagination-item-perpage.component.mjs +0 -19
- package/esm2022/lib/desy-pagination/components/pagination-listbox-label/pagination-listbox-label.component.mjs +0 -17
- package/esm2022/lib/desy-pagination/desy-pagination.module.mjs +0 -25
- package/esm2022/lib/desy-pagination/interfaces/pagination-item.data.mjs +0 -2
- package/esm2022/lib/desy-tables/components/table/components/table-caption.component.mjs +0 -17
- package/esm2022/lib/desy-tables/components/table/components/table-cell.component.mjs +0 -23
- package/esm2022/lib/desy-tables/components/table/components/table-footer.component.mjs +0 -18
- package/esm2022/lib/desy-tables/components/table/components/table-header.component.mjs +0 -18
- package/esm2022/lib/desy-tables/components/table/components/table-row.component.mjs +0 -18
- package/esm2022/lib/desy-tables/components/table/table.component.mjs +0 -120
- package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-footer-cell.component.mjs +0 -23
- package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-footer.component.mjs +0 -27
- package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-header-cell.component.mjs +0 -56
- package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-header.component.mjs +0 -18
- package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-row-cell.component.mjs +0 -23
- package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-row.component.mjs +0 -27
- package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-select.component.mjs +0 -28
- package/esm2022/lib/desy-tables/components/table-advanced/table-advanced.component.mjs +0 -516
- package/esm2022/lib/desy-tables/desy-tables.module.mjs +0 -100
- package/esm2022/lib/desy-tables/directives/cell.directive.mjs +0 -25
- package/esm2022/lib/desy-tables/directives/focus-clicked-cell.directive.mjs +0 -89
- package/esm2022/lib/desy-tables/directives/row.directive.mjs +0 -22
- package/esm2022/lib/desy-tables/interfaces/cell-data.mjs +0 -2
- package/esm2022/lib/desy-tables/interfaces/head-cell-data.mjs +0 -7
- package/esm2022/lib/desy-tables/interfaces/index.mjs +0 -5
- package/esm2022/lib/desy-tables/interfaces/recalculate-table-params.mjs +0 -2
- package/esm2022/lib/desy-tables/interfaces/row-data.mjs +0 -2
- package/esm2022/lib/desy-tables/interfaces/wrapper-data.mjs +0 -2
- package/esm2022/lib/desy-views/components/accordion/accordion-header/accordion-header.component.mjs +0 -17
- package/esm2022/lib/desy-views/components/accordion/accordion-item/accordion-item.component.mjs +0 -61
- package/esm2022/lib/desy-views/components/accordion/accordion.component.mjs +0 -447
- package/esm2022/lib/desy-views/components/accordion-history/accordion-history-item/accordion-history-item.component.mjs +0 -41
- package/esm2022/lib/desy-views/components/accordion-history/accordion-history.component.mjs +0 -20
- package/esm2022/lib/desy-views/components/accordion-history/accordion-item-hide-button/accordion-item-hide-button.component.mjs +0 -17
- package/esm2022/lib/desy-views/components/accordion-history/accordion-item-show-button/accordion-item-show-button.component.mjs +0 -17
- package/esm2022/lib/desy-views/components/alert/alert.component.mjs +0 -82
- package/esm2022/lib/desy-views/components/card/card-sectors/card-left.component.mjs +0 -21
- package/esm2022/lib/desy-views/components/card/card-sectors/card-right.component.mjs +0 -21
- package/esm2022/lib/desy-views/components/card/card-sectors/card-sub.component.mjs +0 -21
- package/esm2022/lib/desy-views/components/card/card-sectors/card-super.component.mjs +0 -21
- package/esm2022/lib/desy-views/components/card/card.component.mjs +0 -48
- package/esm2022/lib/desy-views/components/collapsible/collapsible.component.mjs +0 -66
- package/esm2022/lib/desy-views/components/description-list/definition/definition.component.mjs +0 -19
- package/esm2022/lib/desy-views/components/description-list/description-item/description-item.component.mjs +0 -36
- package/esm2022/lib/desy-views/components/description-list/description-list.component.mjs +0 -29
- package/esm2022/lib/desy-views/components/description-list/term/term.component.mjs +0 -19
- package/esm2022/lib/desy-views/components/details/details.component.mjs +0 -43
- package/esm2022/lib/desy-views/components/item/item-content-bottom/item-content-bottom.component.mjs +0 -17
- package/esm2022/lib/desy-views/components/item/item-content-right/item-content-right.component.mjs +0 -15
- package/esm2022/lib/desy-views/components/item/item-item/item-item.component.mjs +0 -15
- package/esm2022/lib/desy-views/components/item/item.component.mjs +0 -122
- package/esm2022/lib/desy-views/components/media-object/media-object-figure/media-object-figure.component.mjs +0 -12
- package/esm2022/lib/desy-views/components/media-object/media-object.component.mjs +0 -369
- package/esm2022/lib/desy-views/components/status/status.component.mjs +0 -366
- package/esm2022/lib/desy-views/components/status-item/status-item.component.mjs +0 -401
- package/esm2022/lib/desy-views/components/tabs/panel/panel.component.mjs +0 -19
- package/esm2022/lib/desy-views/components/tabs/tab-item/tab-item.component.mjs +0 -41
- package/esm2022/lib/desy-views/components/tabs/tabs.component.mjs +0 -446
- package/esm2022/lib/desy-views/components/tooltip/tooltip-content/tooltip-content.component.mjs +0 -12
- package/esm2022/lib/desy-views/components/tooltip/tooltip.component.mjs +0 -450
- package/esm2022/lib/desy-views/desy-views.module.mjs +0 -181
- package/esm2022/lib/desy-views/interfaces/accordion-header.data.mjs +0 -2
- package/esm2022/lib/desy-views/interfaces/accordion-item.data.mjs +0 -2
- package/esm2022/lib/desy-views/interfaces/alert-options.mjs +0 -2
- package/esm2022/lib/desy-views/interfaces/description-item.data.mjs +0 -2
- package/esm2022/lib/desy-views/interfaces/index.mjs +0 -11
- package/esm2022/lib/desy-views/interfaces/open-alert-result.mjs +0 -2
- package/esm2022/lib/desy-views/interfaces/status-data.mjs +0 -2
- package/esm2022/lib/desy-views/interfaces/status-icon-data.mjs +0 -2
- package/esm2022/lib/desy-views/interfaces/status-item-title-data.mjs +0 -2
- package/esm2022/lib/desy-views/interfaces/tabs-items-data.mjs +0 -2
- package/esm2022/lib/desy-views/interfaces/tabs-panel-data.mjs +0 -2
- package/esm2022/lib/desy-views/interfaces/term-definition.data.mjs +0 -2
- package/esm2022/lib/desy-views/services/alert.service.mjs +0 -88
- package/esm2022/lib/shared/components/accessibility/accessibility-attributes.mjs +0 -78
- package/esm2022/lib/shared/components/accessibility/accessibility.component.mjs +0 -164
- package/esm2022/lib/shared/components/accessibility-and-content-required/accessibility-and-content-required.component.mjs +0 -168
- package/esm2022/lib/shared/components/accessibility-and-text-or-html-required/accessibility-and-text-or-html-required.component.mjs +0 -165
- package/esm2022/lib/shared/components/content-base/content-base.component.mjs +0 -21
- package/esm2022/lib/shared/components/index.mjs +0 -7
- package/esm2022/lib/shared/components/spinner/spinner.component.mjs +0 -329
- package/esm2022/lib/shared/components/text-or-html-required/text-or-html-required.component.mjs +0 -18
- package/esm2022/lib/shared/decorators/desy-content-child.decorator.mjs +0 -34
- package/esm2022/lib/shared/decorators/desy-on-input-change.decorator.mjs +0 -15
- package/esm2022/lib/shared/directives/accessibility-directive.mjs +0 -54
- package/esm2022/lib/shared/directives/attribute-change.directive.mjs +0 -50
- package/esm2022/lib/shared/directives/click-outside.directive.mjs +0 -40
- package/esm2022/lib/shared/directives/content-change.directive.mjs +0 -41
- package/esm2022/lib/shared/directives/custom-inner-content.directive.mjs +0 -63
- package/esm2022/lib/shared/directives/inner-content.directive.mjs +0 -37
- package/esm2022/lib/shared/interfaces/accessibility-data.mjs +0 -2
- package/esm2022/lib/shared/pipes/external-href.pipe.mjs +0 -28
- package/esm2022/lib/shared/pipes/inner-html.pipe.mjs +0 -21
- package/esm2022/lib/shared/pipes/make-html-list.pipe.mjs +0 -20
- package/esm2022/lib/shared/shared.module.mjs +0 -86
- package/esm2022/lib/shared/sharedExternal.module.mjs +0 -20
- package/esm2022/lib/shared/utils/focus-utils.mjs +0 -50
- package/esm2022/lib/shared/utils/search-utils.mjs +0 -70
- package/esm2022/lib/shared/utils/string-utils.mjs +0 -13
- package/esm2022/public-api.mjs +0 -225
|
@@ -1,516 +0,0 @@
|
|
|
1
|
-
import { __decorate, __metadata } from "tslib";
|
|
2
|
-
import { ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, Input, Output, QueryList, ViewChild, ViewChildren, } from '@angular/core';
|
|
3
|
-
import { CheckboxItemComponent } from '../../../desy-forms/components/checkboxes/checkbox-item/checkbox-item.component';
|
|
4
|
-
import { AccessibilityComponent } from '../../../shared/components';
|
|
5
|
-
import { DesyContentChild } from '../../../shared/decorators/desy-content-child.decorator';
|
|
6
|
-
import { SearchUtils } from '../../../shared/utils/search-utils';
|
|
7
|
-
import { RowDirective } from '../../directives/row.directive';
|
|
8
|
-
import { OrderBy } from '../../interfaces';
|
|
9
|
-
import { TableCaptionComponent } from '../table/components/table-caption.component';
|
|
10
|
-
import { TableAdvancedFooterComponent } from './components/table-advanced-footer.component';
|
|
11
|
-
import { TableAdvancedHeaderComponent } from './components/table-advanced-header.component';
|
|
12
|
-
import { TableAdvancedRowComponent } from './components/table-advanced-row.component';
|
|
13
|
-
import * as i0 from "@angular/core";
|
|
14
|
-
import * as i1 from "@angular/common";
|
|
15
|
-
import * as i2 from "@angular/forms";
|
|
16
|
-
import * as i3 from "../../../shared/directives/custom-inner-content.directive";
|
|
17
|
-
import * as i4 from "../../../shared/directives/accessibility-directive";
|
|
18
|
-
import * as i5 from "../../../desy-forms/components/select/select.component";
|
|
19
|
-
import * as i6 from "../../../desy-forms/components/checkboxes/checkboxes.component";
|
|
20
|
-
import * as i7 from "../../../desy-forms/components/checkboxes/checkbox-item/checkbox-item.component";
|
|
21
|
-
import * as i8 from "../../../desy-forms/components/search-bar/search-bar.component";
|
|
22
|
-
import * as i9 from "../../directives/focus-clicked-cell.directive";
|
|
23
|
-
import * as i10 from "../../directives/cell.directive";
|
|
24
|
-
import * as i11 from "../../directives/row.directive";
|
|
25
|
-
import * as i12 from "../../../shared/pipes/make-html-list.pipe";
|
|
26
|
-
export class TableAdvancedComponent extends AccessibilityComponent {
|
|
27
|
-
set rows(rows) {
|
|
28
|
-
this._rows = rows;
|
|
29
|
-
this.recalculateVisibleElements();
|
|
30
|
-
}
|
|
31
|
-
get rows() {
|
|
32
|
-
return this._rows;
|
|
33
|
-
}
|
|
34
|
-
constructor(el, changeDetector) {
|
|
35
|
-
super();
|
|
36
|
-
this.el = el;
|
|
37
|
-
this.changeDetector = changeDetector;
|
|
38
|
-
this.selectAllPages = true;
|
|
39
|
-
this.totalItems = 0;
|
|
40
|
-
this.usePagination = false;
|
|
41
|
-
this.rowsCheckedInside = {};
|
|
42
|
-
this.numberOfSelectedRows = 0;
|
|
43
|
-
this.rowsChange = new EventEmitter();
|
|
44
|
-
this.rowsChecked = new EventEmitter();
|
|
45
|
-
this.allRowsChecked = new EventEmitter();
|
|
46
|
-
this.recalculateTable = new EventEmitter();
|
|
47
|
-
this.filterBy = new EventEmitter();
|
|
48
|
-
this.selectedBy = new EventEmitter();
|
|
49
|
-
this.sortBy = new EventEmitter();
|
|
50
|
-
this.rowsUnChecked = new EventEmitter();
|
|
51
|
-
this.orderByType = OrderBy;
|
|
52
|
-
this.unselectedRows = new Set();
|
|
53
|
-
this.selectedAllRowsChecked = false;
|
|
54
|
-
}
|
|
55
|
-
ngAfterContentInit() {
|
|
56
|
-
this.rowsSubscription = this.rowComponentList.changes.subscribe(() => this.recalculateVisibleElements());
|
|
57
|
-
}
|
|
58
|
-
ngOnDestroy() {
|
|
59
|
-
if (this.rowsSubscription) {
|
|
60
|
-
this.rowsSubscription.unsubscribe();
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
ngAfterViewInit() {
|
|
64
|
-
const elemntsFocus = this.el.nativeElement.querySelector('[tabindex]');
|
|
65
|
-
if (elemntsFocus) {
|
|
66
|
-
elemntsFocus.setAttribute('tabindex', '0');
|
|
67
|
-
}
|
|
68
|
-
this.recalculateVisibleElements();
|
|
69
|
-
}
|
|
70
|
-
recalculateVisibleElements() {
|
|
71
|
-
const recalculateParams = this.buildRecalculateParams();
|
|
72
|
-
if (this.recalculateTable.observers.length > 0) {
|
|
73
|
-
this.recalculateTable.emit(recalculateParams);
|
|
74
|
-
this.changeDetector.markForCheck();
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
this.visibleRows = this.getRows();
|
|
78
|
-
this.changeDetector.detectChanges();
|
|
79
|
-
if (!this.usePagination) {
|
|
80
|
-
let rowData = this.filterRows(recalculateParams, this.rowData.toArray());
|
|
81
|
-
rowData = this.sortRows(recalculateParams, rowData);
|
|
82
|
-
this.visibleRows = rowData.map((r) => r.desyRow);
|
|
83
|
-
this.changeDetector.detectChanges();
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
if (this.checkboxComponent && !this.selectAllPages && this.usePagination) {
|
|
87
|
-
const allChecked = this.getRows().every((row) => this.rowsCheckedInside && this.rowsCheckedInside[row.id]);
|
|
88
|
-
const anyChecked = this.getRows().some((row) => this.rowsCheckedInside && this.rowsCheckedInside[row.id]);
|
|
89
|
-
this.checkboxComponent.indeterminateChecked = !allChecked && anyChecked;
|
|
90
|
-
this.checkboxComponent.checked = allChecked;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
buildRecalculateParams() {
|
|
94
|
-
const params = {
|
|
95
|
-
filters: [],
|
|
96
|
-
sort: null,
|
|
97
|
-
};
|
|
98
|
-
const head = this.getHeaderCells();
|
|
99
|
-
if (head) {
|
|
100
|
-
head.forEach((headerCell, headerCellIndex) => {
|
|
101
|
-
if (headerCell.hasFilter && headerCell.activeFilter) {
|
|
102
|
-
params.filters.push({
|
|
103
|
-
columnIndex: headerCellIndex,
|
|
104
|
-
filterText: headerCell.valueFilter,
|
|
105
|
-
identifier: headerCell.identifier,
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
if (headerCell.hasSelect && headerCell.activeSelect) {
|
|
109
|
-
params.filters.push({
|
|
110
|
-
columnIndex: headerCellIndex,
|
|
111
|
-
filterText: headerCell.valueSelect,
|
|
112
|
-
identifier: headerCell.identifier,
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
const orderByColumnIndex = head.findIndex((cell) => cell.orderBy && cell.orderBy !== OrderBy.none);
|
|
117
|
-
params.sort =
|
|
118
|
-
orderByColumnIndex >= 0 ? { columnIndex: orderByColumnIndex, order: head[orderByColumnIndex].orderBy } : null;
|
|
119
|
-
}
|
|
120
|
-
return params;
|
|
121
|
-
}
|
|
122
|
-
hasFilters() {
|
|
123
|
-
const head = this.getHeaderCells();
|
|
124
|
-
return head ? head.findIndex((cell) => cell.hasFilter || cell.hasSelect) >= 0 : false;
|
|
125
|
-
}
|
|
126
|
-
getHeaderCells() {
|
|
127
|
-
return this.headerComponent && this.headerComponent.cells.length > 0
|
|
128
|
-
? this.headerComponent.cells.toArray()
|
|
129
|
-
: this.head;
|
|
130
|
-
}
|
|
131
|
-
getFooterCells() {
|
|
132
|
-
return this.footerComponent && this.footerComponent.length > 0 ? this.footerComponent.toArray() : this.foot;
|
|
133
|
-
}
|
|
134
|
-
getRows() {
|
|
135
|
-
let rows = [];
|
|
136
|
-
if (this.rowComponentList?.length > 0) {
|
|
137
|
-
rows = this.rowComponentList.toArray();
|
|
138
|
-
}
|
|
139
|
-
else if (this.rows) {
|
|
140
|
-
rows = this.rows;
|
|
141
|
-
}
|
|
142
|
-
return rows;
|
|
143
|
-
}
|
|
144
|
-
getVisibleRows() {
|
|
145
|
-
let rows = this.recalculateTable.observers.length > 0 ? this.getRows() : this.visibleRows;
|
|
146
|
-
if (this.selectAllPages &&
|
|
147
|
-
this.checkboxComponent &&
|
|
148
|
-
this.selectedAllRowsChecked &&
|
|
149
|
-
(this.checkboxComponent.checked || this.unselectedRows.size > 0)) {
|
|
150
|
-
rows.forEach((row) => {
|
|
151
|
-
row.checked = true;
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
for (const id in this.rowsCheckedInside) {
|
|
155
|
-
const row = rows.find((r) => r.id == String(id));
|
|
156
|
-
if (row) {
|
|
157
|
-
row.checked = this.rowsCheckedInside[id];
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
return rows;
|
|
161
|
-
}
|
|
162
|
-
getIdPrefix() {
|
|
163
|
-
return this.idPrefix ? this.idPrefix : 'id-table-row';
|
|
164
|
-
}
|
|
165
|
-
getIdHeader(index) {
|
|
166
|
-
return this.getIdPrefix() + '-header-' + index;
|
|
167
|
-
}
|
|
168
|
-
getIdRowCheckbox(index) {
|
|
169
|
-
return this.getIdPrefix() + '-checkbox-' + index;
|
|
170
|
-
}
|
|
171
|
-
getIdHeaderFilter(index) {
|
|
172
|
-
return this.getIdPrefix() + '-header-filter-' + index;
|
|
173
|
-
}
|
|
174
|
-
getIdHeaderSelect(index) {
|
|
175
|
-
return this.getIdPrefix() + '-header-select-' + index;
|
|
176
|
-
}
|
|
177
|
-
getCaptionClass() {
|
|
178
|
-
return this.captionComponent ? this.captionComponent.classes : this.captionClasses;
|
|
179
|
-
}
|
|
180
|
-
getStringOrderBy(orderBy) {
|
|
181
|
-
if (orderBy === OrderBy.asc) {
|
|
182
|
-
return 'ascending';
|
|
183
|
-
}
|
|
184
|
-
else if (orderBy === OrderBy.desc) {
|
|
185
|
-
return 'descending';
|
|
186
|
-
}
|
|
187
|
-
else if (orderBy === OrderBy.none) {
|
|
188
|
-
return 'none';
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
getSelectForItem(item) {
|
|
192
|
-
return item.selectComponent ? item.selectComponent : null;
|
|
193
|
-
}
|
|
194
|
-
getItemSelectOptions(item) {
|
|
195
|
-
return item.selectItemComponentList && item.selectItemComponentList.length > 0
|
|
196
|
-
? item.selectItemComponentList.toArray()
|
|
197
|
-
: item.items;
|
|
198
|
-
}
|
|
199
|
-
getContentComponent(item) {
|
|
200
|
-
return item.contentComponent ? item.contentComponent : null;
|
|
201
|
-
}
|
|
202
|
-
handleCheckboxChange(row) {
|
|
203
|
-
if (row instanceof TableAdvancedRowComponent) {
|
|
204
|
-
row.checkedChange.emit(row.checked);
|
|
205
|
-
}
|
|
206
|
-
this.notifyCheckedChange();
|
|
207
|
-
}
|
|
208
|
-
uncheckAll() {
|
|
209
|
-
this.rowsCheckedInside = {};
|
|
210
|
-
this.unselectedRows.clear();
|
|
211
|
-
this.selectedAllRowsChecked = false;
|
|
212
|
-
this.numberOfSelectedRows = 0;
|
|
213
|
-
this.getRows().forEach((r) => {
|
|
214
|
-
const mustEmit = r.checked && r instanceof TableAdvancedRowComponent;
|
|
215
|
-
r.checked = false;
|
|
216
|
-
if (mustEmit) {
|
|
217
|
-
r.checkedChange.emit(r.checked);
|
|
218
|
-
}
|
|
219
|
-
});
|
|
220
|
-
this.notifyCheckedChange();
|
|
221
|
-
}
|
|
222
|
-
notifyCheckedChange() {
|
|
223
|
-
if (this.rowComponentList.length === 0) {
|
|
224
|
-
this.rowsChange.emit(this.rows);
|
|
225
|
-
}
|
|
226
|
-
const rowChecks = {};
|
|
227
|
-
this.getRows().forEach((r) => {
|
|
228
|
-
rowChecks[r.id] = !!r.checked;
|
|
229
|
-
if (this.selectAllPages && this.selectedAllRowsChecked) {
|
|
230
|
-
if (r.checked) {
|
|
231
|
-
this.unselectedRows.delete(r.id);
|
|
232
|
-
}
|
|
233
|
-
else {
|
|
234
|
-
this.unselectedRows.add(r.id);
|
|
235
|
-
}
|
|
236
|
-
this.numberOfSelectedRows = this.totalItems - this.unselectedRows.size;
|
|
237
|
-
}
|
|
238
|
-
});
|
|
239
|
-
this.rowsCheckedInside = { ...this.rowsCheckedInside, ...rowChecks };
|
|
240
|
-
this.rowsChecked.emit(this.rowsCheckedInside);
|
|
241
|
-
Promise.resolve().then(() => {
|
|
242
|
-
if (this.checkboxComponent) {
|
|
243
|
-
const visibleRows = this.getVisibleRows();
|
|
244
|
-
const anyChecked = this.selectAllPages && this.totalItems && this.usePagination
|
|
245
|
-
? this.areAnyRowsChecked()
|
|
246
|
-
: visibleRows.some((r) => r.checked);
|
|
247
|
-
const allChecked = this.selectAllPages && this.totalItems && this.usePagination
|
|
248
|
-
? this.areAllRowsChecked()
|
|
249
|
-
: visibleRows.every((r) => r.checked);
|
|
250
|
-
this.checkboxComponent.indeterminateChecked =
|
|
251
|
-
(!this.selectedAllRowsChecked && this.selectAllPages && this.usePagination && anyChecked && !allChecked) ||
|
|
252
|
-
(anyChecked && !allChecked) ||
|
|
253
|
-
(this.unselectedRows.size > 0 && this.unselectedRows.size < this.totalItems);
|
|
254
|
-
this.checkboxComponent.checked = allChecked && this.unselectedRows.size == 0 && visibleRows.length > 0;
|
|
255
|
-
const { checked, indeterminateChecked } = this.checkboxComponent;
|
|
256
|
-
if (!this.selectedAllRowsChecked && checked)
|
|
257
|
-
this.selectedAllRowsChecked = true;
|
|
258
|
-
else if (this.selectedAllRowsChecked && !checked && !indeterminateChecked) {
|
|
259
|
-
this.selectedAllRowsChecked = false;
|
|
260
|
-
this.unselectedRows.clear();
|
|
261
|
-
}
|
|
262
|
-
if (checked) {
|
|
263
|
-
this.allRowsChecked.emit(true);
|
|
264
|
-
}
|
|
265
|
-
else if (indeterminateChecked || !checked) {
|
|
266
|
-
this.allRowsChecked.emit(false);
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
if (this.selectAllPages) {
|
|
270
|
-
this.rowsUnChecked.emit(Array.from(this.unselectedRows));
|
|
271
|
-
}
|
|
272
|
-
});
|
|
273
|
-
}
|
|
274
|
-
areAllRowsChecked() {
|
|
275
|
-
const items = Object.keys(this.rowsCheckedInside);
|
|
276
|
-
if (items.length !== this.totalItems && this.numberOfSelectedRows !== this.totalItems) {
|
|
277
|
-
return false;
|
|
278
|
-
}
|
|
279
|
-
const allTrue = items.every((key) => this.rowsCheckedInside[key]);
|
|
280
|
-
return allTrue;
|
|
281
|
-
}
|
|
282
|
-
areAnyRowsChecked() {
|
|
283
|
-
const items = Object.keys(this.rowsCheckedInside);
|
|
284
|
-
if (items.length === 0) {
|
|
285
|
-
return false;
|
|
286
|
-
}
|
|
287
|
-
const anyTrue = items.some((key) => this.rowsCheckedInside[key]);
|
|
288
|
-
return anyTrue;
|
|
289
|
-
}
|
|
290
|
-
handleInputSearch(item) {
|
|
291
|
-
if (item.hasFilter) {
|
|
292
|
-
item.activeFilter = !!item.valueFilter;
|
|
293
|
-
this.uncheckAll();
|
|
294
|
-
}
|
|
295
|
-
if (item.hasSelect) {
|
|
296
|
-
item.activeSelect = !!item.valueSelect;
|
|
297
|
-
this.uncheckAll();
|
|
298
|
-
}
|
|
299
|
-
this.recalculateVisibleElements();
|
|
300
|
-
}
|
|
301
|
-
handleButtonSearch(item) {
|
|
302
|
-
if (item.hasFilter) {
|
|
303
|
-
item.activeFilter = !!item.valueFilter;
|
|
304
|
-
this.filterBy.emit({ id: item.identifier, value: item.valueFilter });
|
|
305
|
-
this.uncheckAll();
|
|
306
|
-
}
|
|
307
|
-
if (item.hasSelect) {
|
|
308
|
-
item.activeSelect = !!item.valueSelect;
|
|
309
|
-
this.selectedBy.emit(item.valueSelect);
|
|
310
|
-
this.uncheckAll();
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
filterRows(recalculateParams, rows) {
|
|
314
|
-
let filteredRows = rows;
|
|
315
|
-
recalculateParams.filters.forEach((filter) => {
|
|
316
|
-
filteredRows = filteredRows.filter((row) => SearchUtils.containsAnyWordFrom(row.getCell(filter.columnIndex).getContent(), filter.filterText));
|
|
317
|
-
});
|
|
318
|
-
return filteredRows;
|
|
319
|
-
}
|
|
320
|
-
handleSortByColumn(index, event) {
|
|
321
|
-
const head = this.getHeaderCells();
|
|
322
|
-
let order = OrderBy.asc;
|
|
323
|
-
if (head) {
|
|
324
|
-
head.forEach((cell, cellIndex) => {
|
|
325
|
-
if (cell.orderBy) {
|
|
326
|
-
if (cellIndex === index) {
|
|
327
|
-
order = this.getNextDirection(cell);
|
|
328
|
-
}
|
|
329
|
-
cell.orderBy = cellIndex === index ? this.getNextDirection(cell) : OrderBy.none;
|
|
330
|
-
}
|
|
331
|
-
});
|
|
332
|
-
}
|
|
333
|
-
if (this.usePagination) {
|
|
334
|
-
this.sortBy.emit({ id: index, order: order });
|
|
335
|
-
this.uncheckAll();
|
|
336
|
-
}
|
|
337
|
-
else {
|
|
338
|
-
this.recalculateVisibleElements();
|
|
339
|
-
}
|
|
340
|
-
event?.preventDefault();
|
|
341
|
-
}
|
|
342
|
-
sortRows(recalculateParams, rows) {
|
|
343
|
-
let sortedRows = rows;
|
|
344
|
-
if (recalculateParams.sort) {
|
|
345
|
-
const columnIndex = recalculateParams.sort.columnIndex;
|
|
346
|
-
const isAsc = recalculateParams.sort.order === OrderBy.asc;
|
|
347
|
-
sortedRows = rows.sort((a, b) => this.compareCellContent(a.getCell(columnIndex), b.getCell(columnIndex), isAsc));
|
|
348
|
-
}
|
|
349
|
-
return sortedRows;
|
|
350
|
-
}
|
|
351
|
-
compareCellContent(a, b, isAsc) {
|
|
352
|
-
let result;
|
|
353
|
-
const aComparable = this.cleanCurrency(a.getContent()).trim();
|
|
354
|
-
const bComparable = this.cleanCurrency(b.getContent()).trim();
|
|
355
|
-
const numberRegex = /^-?\d+(\.|,)?\d*$/;
|
|
356
|
-
const dateRegex = /^(\d{2})(\/|-)(\d{2})(\/|-)(\d{4})( (\d{2}):(\d{2})(:(\d{2}))?)?$/;
|
|
357
|
-
if (aComparable && bComparable) {
|
|
358
|
-
if (numberRegex.test(aComparable) && numberRegex.test(bComparable)) {
|
|
359
|
-
result = parseFloat(aComparable) - parseFloat(bComparable);
|
|
360
|
-
}
|
|
361
|
-
else if (dateRegex.test(aComparable) && dateRegex.test(bComparable)) {
|
|
362
|
-
result = this.parseDateTime(aComparable) - this.parseDateTime(bComparable);
|
|
363
|
-
}
|
|
364
|
-
else {
|
|
365
|
-
result = aComparable.localeCompare(bComparable, 'es', { sensitivity: 'base', ignorePunctuation: true });
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
return result * (isAsc ? 1 : -1);
|
|
369
|
-
}
|
|
370
|
-
parseDateTime(input) {
|
|
371
|
-
let [datePart, timePart] = input.split(' ');
|
|
372
|
-
let [day, month, year] = datePart.split(/\/|-/).map(Number);
|
|
373
|
-
let [hours = 0, minutes = 0, seconds = 0] = (timePart ? timePart.split(':') : []).map(Number);
|
|
374
|
-
let date = new Date(year, month - 1, day, hours, minutes, seconds);
|
|
375
|
-
return date.getTime();
|
|
376
|
-
}
|
|
377
|
-
getNextDirection(item) {
|
|
378
|
-
if (item.orderBy === OrderBy.none || item.orderBy === OrderBy.desc) {
|
|
379
|
-
return OrderBy.asc;
|
|
380
|
-
}
|
|
381
|
-
else {
|
|
382
|
-
return OrderBy.desc;
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
cleanCurrency(txt) {
|
|
386
|
-
txt = txt.replace(/€/g, '');
|
|
387
|
-
return txt;
|
|
388
|
-
}
|
|
389
|
-
selectFilter(item, itemValue) {
|
|
390
|
-
item.valueChange.emit(itemValue);
|
|
391
|
-
const head = this.getHeaderCells();
|
|
392
|
-
const rows = this.getRows();
|
|
393
|
-
if (head && rows) {
|
|
394
|
-
head.forEach((cell, cellIndex) => { });
|
|
395
|
-
rows.forEach((row) => { });
|
|
396
|
-
}
|
|
397
|
-
}
|
|
398
|
-
checkUncheckAll() {
|
|
399
|
-
if (!this.checkboxComponent)
|
|
400
|
-
return;
|
|
401
|
-
let { indeterminateChecked, checked } = this.checkboxComponent;
|
|
402
|
-
if (!checked) {
|
|
403
|
-
this.checkboxComponent.checked = false;
|
|
404
|
-
this.checkboxComponent.indeterminateChecked = false;
|
|
405
|
-
checked = false;
|
|
406
|
-
indeterminateChecked = false;
|
|
407
|
-
this.selectedAllRowsChecked = false;
|
|
408
|
-
}
|
|
409
|
-
else {
|
|
410
|
-
this.selectedAllRowsChecked = true;
|
|
411
|
-
this.numberOfSelectedRows = this.totalItems;
|
|
412
|
-
}
|
|
413
|
-
if (this.selectAllPages)
|
|
414
|
-
this.rowsCheckedInside = {};
|
|
415
|
-
const selectedRows = {};
|
|
416
|
-
const rows = this.getVisibleRows();
|
|
417
|
-
if (rows && rows.length > 0) {
|
|
418
|
-
rows.forEach((row) => {
|
|
419
|
-
row.checked = indeterminateChecked ? false : checked;
|
|
420
|
-
if (!indeterminateChecked)
|
|
421
|
-
selectedRows[row.id] = checked;
|
|
422
|
-
});
|
|
423
|
-
if (checked) {
|
|
424
|
-
this.allRowsChecked.emit(true);
|
|
425
|
-
}
|
|
426
|
-
else if (indeterminateChecked || !checked) {
|
|
427
|
-
this.allRowsChecked.emit(false);
|
|
428
|
-
}
|
|
429
|
-
if (this.selectAllPages) {
|
|
430
|
-
this.unselectedRows.clear();
|
|
431
|
-
this.rowsUnChecked.emit(Array.from(this.unselectedRows));
|
|
432
|
-
}
|
|
433
|
-
this.rowsCheckedInside = { ...this.rowsCheckedInside, ...selectedRows };
|
|
434
|
-
this.rowsChecked.emit(this.rowsCheckedInside);
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableAdvancedComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
438
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TableAdvancedComponent, selector: "desy-table-advanced", inputs: { rows: "rows", head: "head", foot: "foot", caption: "caption", captionClasses: "captionClasses", firstCellIsHeader: "firstCellIsHeader", hasCheckboxes: "hasCheckboxes", idPrefix: "idPrefix", classes: "classes", checkboxClasses: "checkboxClasses", id: "id", wrapper: "wrapper", selectAllPages: "selectAllPages", totalItems: "totalItems", usePagination: "usePagination" }, outputs: { rowsChange: "rowsChange", rowsChecked: "rowsChecked", allRowsChecked: "allRowsChecked", recalculateTable: "recalculateTable", filterBy: "filterBy", selectedBy: "selectedBy", sortBy: "sortBy", rowsUnChecked: "rowsUnChecked" }, queries: [{ propertyName: "captionComponent", predicate: TableCaptionComponent }, { propertyName: "headerComponent", predicate: TableAdvancedHeaderComponent }, { propertyName: "footerComponent", predicate: TableAdvancedFooterComponent }, { propertyName: "rowComponentList", predicate: TableAdvancedRowComponent }], viewQueries: [{ propertyName: "checkboxComponent", first: true, predicate: ["checkbox"], descendants: true }, { propertyName: "rowData", predicate: RowDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #tableContent>\n <div\n *ngIf=\"hasCheckboxes\"\n class=\"lg:flex lg:flex-wrap lg:w-full\"\n aria-labelledby=\"acciones-entradas\">\n <h3\n id=\"acciones-entradas\"\n class=\"sr-only\">\n Selecci\u00F3n m\u00FAltiple y Acciones sobre el listado de entradas\n </h3>\n <div\n id=\"selection-home\"\n class=\"pt-2 pb-0 pl-4 mt-0 lg:flex sm:flex-1 py-base\">\n <div class=\"h-10\">\n <desy-checkboxes name=\"todos-entradas-chbx\">\n <desy-checkbox-item\n #checkbox\n value=\"item-checkbox\"\n name=\"todos-entradas\"\n (checkedChange)=\"checkUncheckAll()\"\n [isIndeterminate]=\"true\"\n classes=\"c-checkboxes--sm\">\n <div class=\"pt-0.5 leading-5\">\n <label class=\"block -mt-1 text-sm ng-star-inserted\">\n {{ selectAllPages ? 'Seleccionar todo' : 'Seleccionar todos los items de esta p\u00E1gina' }}\n </label>\n </div>\n </desy-checkbox-item>\n </desy-checkboxes>\n </div>\n </div>\n <ng-content\n select=\":not(desy-table-advanced-header):not(desy-table-advanced-row):not(desy-table-advanced-footer):not(desy-table-caption)\"></ng-content>\n </div>\n <table\n role=\"grid\"\n [class]=\"['c-table-advanced border-t-2 border-b-2 border-neutral-base', classes] | makeHtmlList\"\n [attr.id]=\"id ? id : null\"\n [desyAppAccessibility]=\"this\">\n <caption\n *ngIf=\"caption || captionComponent\"\n [class]=\"getCaptionClass()\">\n <ng-container\n *desyCustomInnerContent=\"{ component: captionComponent, text: caption ? caption : null }\"></ng-container>\n </caption>\n <thead *ngIf=\"getHeaderCells()\">\n <tr class=\"border-t border-neutral-base divide-x divide-neutral-base\">\n <th\n *ngIf=\"hasCheckboxes\"\n scope=\"col\"\n [class]=\"['align-top px-base py-xs', 'w-16', checkboxClasses] | makeHtmlList\">\n <span class=\"sr-only\">Seleccionar fila</span>\n </th>\n <th\n scope=\"col\"\n *ngFor=\"let item of getHeaderCells(); index as iHeader\"\n [id]=\"getIdHeader(iHeader)\"\n [attr.aria-sort]=\"item.orderBy ? getStringOrderBy(item.orderBy) : null\"\n [class]=\"\n [\n 'align-top px-base py-sm border-neutral-base border-b-0 text-left text-sm font-normal text-neutral-dark',\n item.classes,\n ] | makeHtmlList\n \"\n [attr.colspan]=\"item.colspan ? item.colspan : null\"\n [attr.rowspan]=\"item.rowspan ? item.rowspan : null\"\n [desyAppAccessibility]=\"item\">\n <span\n *ngIf=\"item.orderBy\"\n class=\"inline-block relative\"\n (click)=\"handleSortByColumn(iHeader, $event)\"\n (keydown.enter)=\"handleSortByColumn(iHeader, $event)\"\n (keydown.space)=\"handleSortByColumn(iHeader, $event)\"\n desyFocusClickedCell\n [attr.tabindex]=\"item.orderBy ? -1 : null\"\n [attr.role]=\"item.orderBy ? 'button' : null\">\n <ng-container *ngIf=\"item.text\">{{ item.text }}</ng-container>\n <ng-container *ngIf=\"item.contentComponent\">\n <ng-container *desyCustomInnerContent=\"{ component: item.contentComponent }\"></ng-container>\n </ng-container>\n <span\n class=\"c-table-advanced__order\"\n *ngIf=\"item.orderBy\">\n <span class=\"sr-only\">Pulsa para ordenar por esta columna</span>\n <span\n class=\"c-table-advanced__ascending\"\n *ngIf=\"item.orderBy === orderByType.asc\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 140 140\"\n aria-hidden=\"true\"\n width=\"1em\"\n height=\"1em\">\n <path\n d=\"M112.07 37.93l-35-35a10 10 0 00-14.14 0l-35 35a10 10 0 0014.14 14.14l13.66-13.66A2.5 2.5 0 0160 40.18V130a10 10 0 0020 0V40.18a2.5 2.5 0 014.27-1.77l13.66 13.66a10 10 0 0014.14-14.14z\"\n fill=\"currentColor\" />\n </svg>\n </span>\n <span\n class=\"c-table-advanced__descending\"\n *ngIf=\"item.orderBy === orderByType.desc\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 140 140\"\n aria-hidden=\"true\"\n width=\"1em\"\n height=\"1em\">\n <path\n d=\"M27.93 102.07l35 35a10 10 0 0014.14 0l35-35a10 10 0 00-14.14-14.14l-13.66 13.66A2.5 2.5 0 0180 99.82V10a10 10 0 00-20 0v89.82a2.5 2.5 0 01-4.27 1.77L42.07 87.93a10 10 0 00-14.14 14.14z\"\n fill=\"currentColor\" />\n </svg>\n </span>\n <span\n class=\"c-table-advanced__none\"\n *ngIf=\"item.orderBy === orderByType.none\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 140 140\"\n class=\"text-neutral-dark\"\n aria-hidden=\"true\"\n width=\"1em\"\n height=\"1em\">\n <path\n d=\"M94.7 97.2l-17.2 17.19V25.61L94.7 42.8a7.5 7.5 0 0010.6-10.6l-30-30a7.49 7.49 0 00-10.6 0l-30 30a7.5 7.5 0 0010.6 10.6l17.2-17.19v88.78L45.3 97.2a7.5 7.5 0 10-10.6 10.6l30 30a7.48 7.48 0 0010.6 0l30-30a7.5 7.5 0 00-10.6-10.6z\"\n fill=\"currentColor\" />\n </svg>\n </span>\n </span>\n </span>\n\n <span\n *ngIf=\"!item.orderBy\"\n class=\"inline-block relative\">\n <ng-container *ngIf=\"item.text\">{{ item.text }}</ng-container>\n <ng-container *ngIf=\"item.contentComponent\">\n <ng-container *desyCustomInnerContent=\"{ component: item.contentComponent }\"></ng-container>\n </ng-container>\n </span>\n </th>\n </tr>\n </thead>\n\n <tbody>\n <tr\n class=\"divide-x divide-neutral-base\"\n *ngIf=\"hasFilters()\">\n <td\n *ngIf=\"hasCheckboxes\"\n [ngClass]=\"checkboxClasses\"></td>\n <td\n tabindex=\"-1\"\n *ngFor=\"let item of getHeaderCells(); index as iHead\"\n desyFocusClickedCell\n [class]=\"\n [\n 'align-top px-base pb-sm border-neutral-base border-b-0 text-left text-sm font-normal text-neutral-dark',\n item.classes,\n ] | makeHtmlList\n \">\n <ng-container *ngIf=\"item.hasSelect && getSelectForItem(item) !== null\">\n <ng-container\n *ngTemplateOutlet=\"tableSelect; context: { selectable: getSelectForItem(item) }\"></ng-container>\n <ng-template\n #tableSelect\n let-selectable=\"selectable\">\n <desy-select\n [id]=\"getIdHeaderSelect(iHead)\"\n [labelData]=\"{ text: 'Filtrar por esta columna', classes: 'sr-only' }\"\n [classes]=\"selectable.classes ? selectable.classes : 'c-select--sm w-full'\"\n [formGroupClasses]=\"selectable.formGroupClasses ? selectable.formGroupClasses : '-mt-sm mb-0'\"\n [name]=\"selectable.name\"\n [items]=\"getItemSelectOptions(selectable)\"\n [disabled]=\"selectable.disabled\"\n [describedBy]=\"getIdHeaderSelect(iHead)\"\n [(ngModel)]=\"item.valueSelect\"\n (ngModelChange)=\"usePagination ? handleButtonSearch(item) : handleInputSearch(item)\"\n [role]=\"selectable.role\"\n [ariaLabel]=\"selectable.ariaLabel\"\n [ariaDescribedBy]=\"selectable.ariaDescribedBy\"\n [ariaLabelledBy]=\"selectable.ariaLabelledBy\"\n [ariaHidden]=\"selectable.ariaHidden\"\n [ariaDisabled]=\"selectable.ariaDisabled\"\n [ariaControls]=\"selectable.ariaControls\"\n [ariaCurrent]=\"selectable.ariaCurrent\"\n [ariaLive]=\"selectable.ariaLive\"\n [ariaExpanded]=\"selectable.ariaExpanded\"\n [ariaErrorMessage]=\"selectable.ariaErrorMessage\"\n [ariaHasPopup]=\"selectable.ariaHasPopup\"\n [tabindex]=\"selectable.tabindex\"></desy-select>\n </ng-template>\n </ng-container>\n\n <div\n *ngIf=\"item.hasSelect && item.hasFilter\"\n class=\"pb-sm\"></div>\n\n <desy-search-bar\n *ngIf=\"item.hasFilter\"\n [(ngModel)]=\"item.valueFilter\"\n [ngModelOptions]=\"{ standalone: true }\"\n (clickEvent)=\"usePagination ? handleButtonSearch(item) : null\"\n (ngModelChange)=\"!usePagination ? handleInputSearch(item) : null\"\n labelText=\"Buscar en esta columna\"\n [id]=\"getIdHeaderFilter(iHead)\"\n placeholder=\"Buscar\"\n [classes]=\"['c-input--sm', item.filterClasses] | makeHtmlList\"\n buttonClasses=\"m-xs p-0.5 text-xs\"\n [describedBy]=\"getIdHeader(iHead)\"></desy-search-bar>\n </td>\n </tr>\n\n <tr\n *ngFor=\"let row of getVisibleRows(); index as iRow\"\n class=\"border-t border-b border-neutral-base hover:bg-neutral-lighter\"\n [desyRow]=\"row\">\n <td\n *ngIf=\"hasCheckboxes\"\n desyFocusClickedCell\n [class]=\"['px-base py-sm', checkboxClasses] | makeHtmlList\"\n tabindex=\"-1\">\n <div class=\"c-checkboxes c-checkboxes--sm\">\n <div>\n <div class=\"relative flex items-start\">\n <div class=\"flex items-center mx-sm\">\n <input\n type=\"checkbox\"\n class=\"w-6 h-6 transition duration-150 ease-in-out border-black focus:border-black focus:shadow-outline-focus-input focus:ring-4 focus:ring-offset-0 focus:ring-warning-base disabled:bg-neutral-light disabled:border-neutral-base text-primary-base\"\n [(ngModel)]=\"row.checked\"\n (ngModelChange)=\"handleCheckboxChange(row)\"\n [id]=\"getIdRowCheckbox(iRow)\"\n [name]=\"getIdRowCheckbox(iRow)\" />\n </div>\n <div class=\"pt-0.5 leading-5\">\n <label\n class=\"sr-only block text-sm -mt-1\"\n [for]=\"getIdRowCheckbox(iRow)\">\n Selecciona fila {{ iRow }}\n </label>\n </div>\n </div>\n </div>\n </div>\n </td>\n <ng-container *ngFor=\"let cell of row.cellsList; first as isFirstCell; index as columnIndex\">\n <th\n *ngIf=\"firstCellIsHeader && isFirstCell; else elseTd\"\n scope=\"row\"\n [class]=\"\n [\n 'px-base py-xs border-neutral-base border-b-0 border-r text-left font-normal text-sm text-neutral-dark',\n cell.classes,\n ] | makeHtmlList\n \"\n desyCell\n [row]=\"row\"\n [rowIndex]=\"iRow\"\n [columnIndex]=\"columnIndex\"\n [attr.colspan]=\"cell.colspan ? cell.colspan : null\"\n [attr.rowspan]=\"cell.rowspan ? cell.rowspan : null\"\n [attr.id]=\"cell.id ? cell.id : null\"\n [desyAppAccessibility]=\"cell\">\n <ng-container\n *desyCustomInnerContent=\"{ component: cell, html: cell.html, text: cell.text }\"></ng-container>\n </th>\n <ng-template #elseTd>\n <td\n tabindex=\"-1\"\n desyFocusClickedCell\n [class]=\"['px-base py-sm', cell.classes] | makeHtmlList\"\n desyCell\n [row]=\"row\"\n [rowIndex]=\"iRow\"\n [columnIndex]=\"columnIndex\"\n [attr.colspan]=\"cell.colspan ? cell.colspan : null\"\n [attr.rowspan]=\"cell.rowspan ? cell.rowspan : null\"\n [attr.id]=\"cell.id ? cell.id : null\"\n [desyAppAccessibility]=\"cell\"\n [attr.tabindex]=\"cell.tabindex ? cell.tabindex : -1\">\n <ng-container\n *desyCustomInnerContent=\"{ component: cell, html: cell.html, text: cell.text }\"></ng-container>\n </td>\n </ng-template>\n </ng-container>\n </tr>\n </tbody>\n\n <tfoot *ngIf=\"getFooterCells()\">\n <tr\n *ngFor=\"let foot of getFooterCells(); index as iFooter\"\n class=\"border-t-2 border-b border-neutral-base hover:bg-neutral-lighter\">\n <td\n *ngIf=\"hasCheckboxes\"\n desyFocusClickedCell\n [class]=\"['px-base py-sm', checkboxClasses] | makeHtmlList\"\n tabindex=\"-1\">\n <div class=\"c-checkboxes c-checkboxes--sm\">\n <div>\n <div class=\"relative flex items-start\">\n <div class=\"flex items-center mx-sm\">\n <input\n type=\"checkbox\"\n class=\"w-6 h-6 transition duration-150 ease-in-out border-black focus:border-black focus:shadow-outline-focus-input focus:ring-4 focus:ring-offset-0 focus:ring-warning-base disabled:bg-neutral-light disabled:border-neutral-base text-primary-base\"\n [(ngModel)]=\"foot.checked\"\n (ngModelChange)=\"handleCheckboxChange(foot)\"\n [id]=\"getIdRowCheckbox(iFooter)\"\n [name]=\"getIdRowCheckbox(iFooter)\" />\n </div>\n <div class=\"pt-0.5 leading-5\">\n <label\n class=\"sr-only block text-sm -mt-1\"\n [for]=\"getIdRowCheckbox(iFooter)\">\n Selecciona fila {{ iFooter }}\n </label>\n </div>\n </div>\n </div>\n </div>\n </td>\n <ng-container *ngFor=\"let cell of foot.cellsList; first as isFirstCell; index as columnIndex\">\n <th\n *ngIf=\"firstCellIsHeader && isFirstCell; else elseTd\"\n scope=\"row\"\n [class]=\"\n [\n 'px-base py-xs border-neutral-base border-b-0 border-r text-left font-normal text-sm text-neutral-dark',\n cell.classes,\n ] | makeHtmlList\n \"\n desyCell\n [row]=\"row\"\n [rowIndex]=\"iFooter\"\n [columnIndex]=\"columnIndex\"\n [attr.colspan]=\"cell.colspan ? cell.colspan : null\"\n [attr.rowspan]=\"cell.rowspan ? cell.rowspan : null\"\n [attr.id]=\"cell.id ? cell.id : null\"\n [desyAppAccessibility]=\"cell\">\n <ng-container\n *desyCustomInnerContent=\"{ component: cell, html: cell.html, text: cell.text }\"></ng-container>\n </th>\n <ng-template #elseTd>\n <td\n tabindex=\"-1\"\n desyFocusClickedCell\n [class]=\"['px-base py-sm', cell.classes] | makeHtmlList\"\n desyCell\n [row]=\"row\"\n [rowIndex]=\"iFooter\"\n [columnIndex]=\"columnIndex\"\n [attr.colspan]=\"cell.colspan ? cell.colspan : null\"\n [attr.rowspan]=\"cell.rowspan ? cell.rowspan : null\"\n [attr.id]=\"cell.id ? cell.id : null\"\n [desyAppAccessibility]=\"cell\"\n [attr.tabindex]=\"cell.tabindex ? cell.tabindex : -1\">\n <ng-container\n *desyCustomInnerContent=\"{ component: cell, html: cell.html, text: cell.text }\"></ng-container>\n </td>\n </ng-template>\n </ng-container>\n </tr>\n </tfoot>\n </table>\n</ng-template>\n\n<div\n *ngIf=\"wrapper; else tableContent\"\n [class]=\"wrapper.classes\">\n <ng-container *ngTemplateOutlet=\"tableContent\"></ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.CustomInnerContentDirective, selector: "[desyCustomInnerContent]", inputs: ["desyCustomInnerContent"] }, { kind: "directive", type: i4.AccessibilityDirective, selector: "[desyAppAccessibility]", inputs: ["desyAppAccessibility"] }, { kind: "component", type: i5.SelectComponent, selector: "desy-select", inputs: ["name", "items", "describedBy", "formGroupClasses", "classes"] }, { kind: "component", type: i6.CheckboxesComponent, selector: "desy-checkboxes", inputs: ["fieldsetData", "legendRef", "legendData", "legendText", "idPrefix", "name", "items", "formGroupClasses", "hasDividers", "hasError", "classes", "describedBy"], outputs: ["itemsChange"] }, { kind: "component", type: i7.CheckboxItemComponent, selector: "desy-checkbox-item", inputs: ["id", "value", "name", "conditional", "disabled", "isIndeterminate", "indeterminateChecked", "classes", "checked"], outputs: ["checkedChange", "indeterminateChange"] }, { kind: "component", type: i8.SearchBarComponent, selector: "desy-search-bar", inputs: ["describedBy", "classes", "buttonClasses", "placeholder"], outputs: ["clickEvent"] }, { kind: "directive", type: i9.FocusClickedCellDirective, selector: "[desyFocusClickedCell]" }, { kind: "directive", type: i10.CellDirective, selector: "[desyCell]", inputs: ["row", "rowIndex", "columnIndex"] }, { kind: "directive", type: i11.RowDirective, selector: "[desyRow]", inputs: ["desyRow"] }, { kind: "pipe", type: i12.MakeHtmlListPipe, name: "makeHtmlList" }] }); }
|
|
439
|
-
}
|
|
440
|
-
__decorate([
|
|
441
|
-
DesyContentChild(),
|
|
442
|
-
__metadata("design:type", TableCaptionComponent)
|
|
443
|
-
], TableAdvancedComponent.prototype, "captionComponent", void 0);
|
|
444
|
-
__decorate([
|
|
445
|
-
DesyContentChild(),
|
|
446
|
-
__metadata("design:type", TableAdvancedHeaderComponent)
|
|
447
|
-
], TableAdvancedComponent.prototype, "headerComponent", void 0);
|
|
448
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableAdvancedComponent, decorators: [{
|
|
449
|
-
type: Component,
|
|
450
|
-
args: [{ selector: 'desy-table-advanced', template: "<ng-template #tableContent>\n <div\n *ngIf=\"hasCheckboxes\"\n class=\"lg:flex lg:flex-wrap lg:w-full\"\n aria-labelledby=\"acciones-entradas\">\n <h3\n id=\"acciones-entradas\"\n class=\"sr-only\">\n Selecci\u00F3n m\u00FAltiple y Acciones sobre el listado de entradas\n </h3>\n <div\n id=\"selection-home\"\n class=\"pt-2 pb-0 pl-4 mt-0 lg:flex sm:flex-1 py-base\">\n <div class=\"h-10\">\n <desy-checkboxes name=\"todos-entradas-chbx\">\n <desy-checkbox-item\n #checkbox\n value=\"item-checkbox\"\n name=\"todos-entradas\"\n (checkedChange)=\"checkUncheckAll()\"\n [isIndeterminate]=\"true\"\n classes=\"c-checkboxes--sm\">\n <div class=\"pt-0.5 leading-5\">\n <label class=\"block -mt-1 text-sm ng-star-inserted\">\n {{ selectAllPages ? 'Seleccionar todo' : 'Seleccionar todos los items de esta p\u00E1gina' }}\n </label>\n </div>\n </desy-checkbox-item>\n </desy-checkboxes>\n </div>\n </div>\n <ng-content\n select=\":not(desy-table-advanced-header):not(desy-table-advanced-row):not(desy-table-advanced-footer):not(desy-table-caption)\"></ng-content>\n </div>\n <table\n role=\"grid\"\n [class]=\"['c-table-advanced border-t-2 border-b-2 border-neutral-base', classes] | makeHtmlList\"\n [attr.id]=\"id ? id : null\"\n [desyAppAccessibility]=\"this\">\n <caption\n *ngIf=\"caption || captionComponent\"\n [class]=\"getCaptionClass()\">\n <ng-container\n *desyCustomInnerContent=\"{ component: captionComponent, text: caption ? caption : null }\"></ng-container>\n </caption>\n <thead *ngIf=\"getHeaderCells()\">\n <tr class=\"border-t border-neutral-base divide-x divide-neutral-base\">\n <th\n *ngIf=\"hasCheckboxes\"\n scope=\"col\"\n [class]=\"['align-top px-base py-xs', 'w-16', checkboxClasses] | makeHtmlList\">\n <span class=\"sr-only\">Seleccionar fila</span>\n </th>\n <th\n scope=\"col\"\n *ngFor=\"let item of getHeaderCells(); index as iHeader\"\n [id]=\"getIdHeader(iHeader)\"\n [attr.aria-sort]=\"item.orderBy ? getStringOrderBy(item.orderBy) : null\"\n [class]=\"\n [\n 'align-top px-base py-sm border-neutral-base border-b-0 text-left text-sm font-normal text-neutral-dark',\n item.classes,\n ] | makeHtmlList\n \"\n [attr.colspan]=\"item.colspan ? item.colspan : null\"\n [attr.rowspan]=\"item.rowspan ? item.rowspan : null\"\n [desyAppAccessibility]=\"item\">\n <span\n *ngIf=\"item.orderBy\"\n class=\"inline-block relative\"\n (click)=\"handleSortByColumn(iHeader, $event)\"\n (keydown.enter)=\"handleSortByColumn(iHeader, $event)\"\n (keydown.space)=\"handleSortByColumn(iHeader, $event)\"\n desyFocusClickedCell\n [attr.tabindex]=\"item.orderBy ? -1 : null\"\n [attr.role]=\"item.orderBy ? 'button' : null\">\n <ng-container *ngIf=\"item.text\">{{ item.text }}</ng-container>\n <ng-container *ngIf=\"item.contentComponent\">\n <ng-container *desyCustomInnerContent=\"{ component: item.contentComponent }\"></ng-container>\n </ng-container>\n <span\n class=\"c-table-advanced__order\"\n *ngIf=\"item.orderBy\">\n <span class=\"sr-only\">Pulsa para ordenar por esta columna</span>\n <span\n class=\"c-table-advanced__ascending\"\n *ngIf=\"item.orderBy === orderByType.asc\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 140 140\"\n aria-hidden=\"true\"\n width=\"1em\"\n height=\"1em\">\n <path\n d=\"M112.07 37.93l-35-35a10 10 0 00-14.14 0l-35 35a10 10 0 0014.14 14.14l13.66-13.66A2.5 2.5 0 0160 40.18V130a10 10 0 0020 0V40.18a2.5 2.5 0 014.27-1.77l13.66 13.66a10 10 0 0014.14-14.14z\"\n fill=\"currentColor\" />\n </svg>\n </span>\n <span\n class=\"c-table-advanced__descending\"\n *ngIf=\"item.orderBy === orderByType.desc\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 140 140\"\n aria-hidden=\"true\"\n width=\"1em\"\n height=\"1em\">\n <path\n d=\"M27.93 102.07l35 35a10 10 0 0014.14 0l35-35a10 10 0 00-14.14-14.14l-13.66 13.66A2.5 2.5 0 0180 99.82V10a10 10 0 00-20 0v89.82a2.5 2.5 0 01-4.27 1.77L42.07 87.93a10 10 0 00-14.14 14.14z\"\n fill=\"currentColor\" />\n </svg>\n </span>\n <span\n class=\"c-table-advanced__none\"\n *ngIf=\"item.orderBy === orderByType.none\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 140 140\"\n class=\"text-neutral-dark\"\n aria-hidden=\"true\"\n width=\"1em\"\n height=\"1em\">\n <path\n d=\"M94.7 97.2l-17.2 17.19V25.61L94.7 42.8a7.5 7.5 0 0010.6-10.6l-30-30a7.49 7.49 0 00-10.6 0l-30 30a7.5 7.5 0 0010.6 10.6l17.2-17.19v88.78L45.3 97.2a7.5 7.5 0 10-10.6 10.6l30 30a7.48 7.48 0 0010.6 0l30-30a7.5 7.5 0 00-10.6-10.6z\"\n fill=\"currentColor\" />\n </svg>\n </span>\n </span>\n </span>\n\n <span\n *ngIf=\"!item.orderBy\"\n class=\"inline-block relative\">\n <ng-container *ngIf=\"item.text\">{{ item.text }}</ng-container>\n <ng-container *ngIf=\"item.contentComponent\">\n <ng-container *desyCustomInnerContent=\"{ component: item.contentComponent }\"></ng-container>\n </ng-container>\n </span>\n </th>\n </tr>\n </thead>\n\n <tbody>\n <tr\n class=\"divide-x divide-neutral-base\"\n *ngIf=\"hasFilters()\">\n <td\n *ngIf=\"hasCheckboxes\"\n [ngClass]=\"checkboxClasses\"></td>\n <td\n tabindex=\"-1\"\n *ngFor=\"let item of getHeaderCells(); index as iHead\"\n desyFocusClickedCell\n [class]=\"\n [\n 'align-top px-base pb-sm border-neutral-base border-b-0 text-left text-sm font-normal text-neutral-dark',\n item.classes,\n ] | makeHtmlList\n \">\n <ng-container *ngIf=\"item.hasSelect && getSelectForItem(item) !== null\">\n <ng-container\n *ngTemplateOutlet=\"tableSelect; context: { selectable: getSelectForItem(item) }\"></ng-container>\n <ng-template\n #tableSelect\n let-selectable=\"selectable\">\n <desy-select\n [id]=\"getIdHeaderSelect(iHead)\"\n [labelData]=\"{ text: 'Filtrar por esta columna', classes: 'sr-only' }\"\n [classes]=\"selectable.classes ? selectable.classes : 'c-select--sm w-full'\"\n [formGroupClasses]=\"selectable.formGroupClasses ? selectable.formGroupClasses : '-mt-sm mb-0'\"\n [name]=\"selectable.name\"\n [items]=\"getItemSelectOptions(selectable)\"\n [disabled]=\"selectable.disabled\"\n [describedBy]=\"getIdHeaderSelect(iHead)\"\n [(ngModel)]=\"item.valueSelect\"\n (ngModelChange)=\"usePagination ? handleButtonSearch(item) : handleInputSearch(item)\"\n [role]=\"selectable.role\"\n [ariaLabel]=\"selectable.ariaLabel\"\n [ariaDescribedBy]=\"selectable.ariaDescribedBy\"\n [ariaLabelledBy]=\"selectable.ariaLabelledBy\"\n [ariaHidden]=\"selectable.ariaHidden\"\n [ariaDisabled]=\"selectable.ariaDisabled\"\n [ariaControls]=\"selectable.ariaControls\"\n [ariaCurrent]=\"selectable.ariaCurrent\"\n [ariaLive]=\"selectable.ariaLive\"\n [ariaExpanded]=\"selectable.ariaExpanded\"\n [ariaErrorMessage]=\"selectable.ariaErrorMessage\"\n [ariaHasPopup]=\"selectable.ariaHasPopup\"\n [tabindex]=\"selectable.tabindex\"></desy-select>\n </ng-template>\n </ng-container>\n\n <div\n *ngIf=\"item.hasSelect && item.hasFilter\"\n class=\"pb-sm\"></div>\n\n <desy-search-bar\n *ngIf=\"item.hasFilter\"\n [(ngModel)]=\"item.valueFilter\"\n [ngModelOptions]=\"{ standalone: true }\"\n (clickEvent)=\"usePagination ? handleButtonSearch(item) : null\"\n (ngModelChange)=\"!usePagination ? handleInputSearch(item) : null\"\n labelText=\"Buscar en esta columna\"\n [id]=\"getIdHeaderFilter(iHead)\"\n placeholder=\"Buscar\"\n [classes]=\"['c-input--sm', item.filterClasses] | makeHtmlList\"\n buttonClasses=\"m-xs p-0.5 text-xs\"\n [describedBy]=\"getIdHeader(iHead)\"></desy-search-bar>\n </td>\n </tr>\n\n <tr\n *ngFor=\"let row of getVisibleRows(); index as iRow\"\n class=\"border-t border-b border-neutral-base hover:bg-neutral-lighter\"\n [desyRow]=\"row\">\n <td\n *ngIf=\"hasCheckboxes\"\n desyFocusClickedCell\n [class]=\"['px-base py-sm', checkboxClasses] | makeHtmlList\"\n tabindex=\"-1\">\n <div class=\"c-checkboxes c-checkboxes--sm\">\n <div>\n <div class=\"relative flex items-start\">\n <div class=\"flex items-center mx-sm\">\n <input\n type=\"checkbox\"\n class=\"w-6 h-6 transition duration-150 ease-in-out border-black focus:border-black focus:shadow-outline-focus-input focus:ring-4 focus:ring-offset-0 focus:ring-warning-base disabled:bg-neutral-light disabled:border-neutral-base text-primary-base\"\n [(ngModel)]=\"row.checked\"\n (ngModelChange)=\"handleCheckboxChange(row)\"\n [id]=\"getIdRowCheckbox(iRow)\"\n [name]=\"getIdRowCheckbox(iRow)\" />\n </div>\n <div class=\"pt-0.5 leading-5\">\n <label\n class=\"sr-only block text-sm -mt-1\"\n [for]=\"getIdRowCheckbox(iRow)\">\n Selecciona fila {{ iRow }}\n </label>\n </div>\n </div>\n </div>\n </div>\n </td>\n <ng-container *ngFor=\"let cell of row.cellsList; first as isFirstCell; index as columnIndex\">\n <th\n *ngIf=\"firstCellIsHeader && isFirstCell; else elseTd\"\n scope=\"row\"\n [class]=\"\n [\n 'px-base py-xs border-neutral-base border-b-0 border-r text-left font-normal text-sm text-neutral-dark',\n cell.classes,\n ] | makeHtmlList\n \"\n desyCell\n [row]=\"row\"\n [rowIndex]=\"iRow\"\n [columnIndex]=\"columnIndex\"\n [attr.colspan]=\"cell.colspan ? cell.colspan : null\"\n [attr.rowspan]=\"cell.rowspan ? cell.rowspan : null\"\n [attr.id]=\"cell.id ? cell.id : null\"\n [desyAppAccessibility]=\"cell\">\n <ng-container\n *desyCustomInnerContent=\"{ component: cell, html: cell.html, text: cell.text }\"></ng-container>\n </th>\n <ng-template #elseTd>\n <td\n tabindex=\"-1\"\n desyFocusClickedCell\n [class]=\"['px-base py-sm', cell.classes] | makeHtmlList\"\n desyCell\n [row]=\"row\"\n [rowIndex]=\"iRow\"\n [columnIndex]=\"columnIndex\"\n [attr.colspan]=\"cell.colspan ? cell.colspan : null\"\n [attr.rowspan]=\"cell.rowspan ? cell.rowspan : null\"\n [attr.id]=\"cell.id ? cell.id : null\"\n [desyAppAccessibility]=\"cell\"\n [attr.tabindex]=\"cell.tabindex ? cell.tabindex : -1\">\n <ng-container\n *desyCustomInnerContent=\"{ component: cell, html: cell.html, text: cell.text }\"></ng-container>\n </td>\n </ng-template>\n </ng-container>\n </tr>\n </tbody>\n\n <tfoot *ngIf=\"getFooterCells()\">\n <tr\n *ngFor=\"let foot of getFooterCells(); index as iFooter\"\n class=\"border-t-2 border-b border-neutral-base hover:bg-neutral-lighter\">\n <td\n *ngIf=\"hasCheckboxes\"\n desyFocusClickedCell\n [class]=\"['px-base py-sm', checkboxClasses] | makeHtmlList\"\n tabindex=\"-1\">\n <div class=\"c-checkboxes c-checkboxes--sm\">\n <div>\n <div class=\"relative flex items-start\">\n <div class=\"flex items-center mx-sm\">\n <input\n type=\"checkbox\"\n class=\"w-6 h-6 transition duration-150 ease-in-out border-black focus:border-black focus:shadow-outline-focus-input focus:ring-4 focus:ring-offset-0 focus:ring-warning-base disabled:bg-neutral-light disabled:border-neutral-base text-primary-base\"\n [(ngModel)]=\"foot.checked\"\n (ngModelChange)=\"handleCheckboxChange(foot)\"\n [id]=\"getIdRowCheckbox(iFooter)\"\n [name]=\"getIdRowCheckbox(iFooter)\" />\n </div>\n <div class=\"pt-0.5 leading-5\">\n <label\n class=\"sr-only block text-sm -mt-1\"\n [for]=\"getIdRowCheckbox(iFooter)\">\n Selecciona fila {{ iFooter }}\n </label>\n </div>\n </div>\n </div>\n </div>\n </td>\n <ng-container *ngFor=\"let cell of foot.cellsList; first as isFirstCell; index as columnIndex\">\n <th\n *ngIf=\"firstCellIsHeader && isFirstCell; else elseTd\"\n scope=\"row\"\n [class]=\"\n [\n 'px-base py-xs border-neutral-base border-b-0 border-r text-left font-normal text-sm text-neutral-dark',\n cell.classes,\n ] | makeHtmlList\n \"\n desyCell\n [row]=\"row\"\n [rowIndex]=\"iFooter\"\n [columnIndex]=\"columnIndex\"\n [attr.colspan]=\"cell.colspan ? cell.colspan : null\"\n [attr.rowspan]=\"cell.rowspan ? cell.rowspan : null\"\n [attr.id]=\"cell.id ? cell.id : null\"\n [desyAppAccessibility]=\"cell\">\n <ng-container\n *desyCustomInnerContent=\"{ component: cell, html: cell.html, text: cell.text }\"></ng-container>\n </th>\n <ng-template #elseTd>\n <td\n tabindex=\"-1\"\n desyFocusClickedCell\n [class]=\"['px-base py-sm', cell.classes] | makeHtmlList\"\n desyCell\n [row]=\"row\"\n [rowIndex]=\"iFooter\"\n [columnIndex]=\"columnIndex\"\n [attr.colspan]=\"cell.colspan ? cell.colspan : null\"\n [attr.rowspan]=\"cell.rowspan ? cell.rowspan : null\"\n [attr.id]=\"cell.id ? cell.id : null\"\n [desyAppAccessibility]=\"cell\"\n [attr.tabindex]=\"cell.tabindex ? cell.tabindex : -1\">\n <ng-container\n *desyCustomInnerContent=\"{ component: cell, html: cell.html, text: cell.text }\"></ng-container>\n </td>\n </ng-template>\n </ng-container>\n </tr>\n </tfoot>\n </table>\n</ng-template>\n\n<div\n *ngIf=\"wrapper; else tableContent\"\n [class]=\"wrapper.classes\">\n <ng-container *ngTemplateOutlet=\"tableContent\"></ng-container>\n</div>\n" }]
|
|
451
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }], propDecorators: { rows: [{
|
|
452
|
-
type: Input
|
|
453
|
-
}], head: [{
|
|
454
|
-
type: Input
|
|
455
|
-
}], foot: [{
|
|
456
|
-
type: Input
|
|
457
|
-
}], caption: [{
|
|
458
|
-
type: Input
|
|
459
|
-
}], captionClasses: [{
|
|
460
|
-
type: Input
|
|
461
|
-
}], firstCellIsHeader: [{
|
|
462
|
-
type: Input
|
|
463
|
-
}], hasCheckboxes: [{
|
|
464
|
-
type: Input
|
|
465
|
-
}], idPrefix: [{
|
|
466
|
-
type: Input
|
|
467
|
-
}], classes: [{
|
|
468
|
-
type: Input
|
|
469
|
-
}], checkboxClasses: [{
|
|
470
|
-
type: Input
|
|
471
|
-
}], id: [{
|
|
472
|
-
type: Input
|
|
473
|
-
}], wrapper: [{
|
|
474
|
-
type: Input
|
|
475
|
-
}], selectAllPages: [{
|
|
476
|
-
type: Input
|
|
477
|
-
}], totalItems: [{
|
|
478
|
-
type: Input
|
|
479
|
-
}], usePagination: [{
|
|
480
|
-
type: Input
|
|
481
|
-
}], captionComponent: [{
|
|
482
|
-
type: ContentChildren,
|
|
483
|
-
args: [TableCaptionComponent]
|
|
484
|
-
}], headerComponent: [{
|
|
485
|
-
type: ContentChildren,
|
|
486
|
-
args: [TableAdvancedHeaderComponent]
|
|
487
|
-
}], footerComponent: [{
|
|
488
|
-
type: ContentChildren,
|
|
489
|
-
args: [TableAdvancedFooterComponent]
|
|
490
|
-
}], rowComponentList: [{
|
|
491
|
-
type: ContentChildren,
|
|
492
|
-
args: [TableAdvancedRowComponent]
|
|
493
|
-
}], rowData: [{
|
|
494
|
-
type: ViewChildren,
|
|
495
|
-
args: [RowDirective]
|
|
496
|
-
}], rowsChange: [{
|
|
497
|
-
type: Output
|
|
498
|
-
}], rowsChecked: [{
|
|
499
|
-
type: Output
|
|
500
|
-
}], allRowsChecked: [{
|
|
501
|
-
type: Output
|
|
502
|
-
}], recalculateTable: [{
|
|
503
|
-
type: Output
|
|
504
|
-
}], filterBy: [{
|
|
505
|
-
type: Output
|
|
506
|
-
}], selectedBy: [{
|
|
507
|
-
type: Output
|
|
508
|
-
}], sortBy: [{
|
|
509
|
-
type: Output
|
|
510
|
-
}], rowsUnChecked: [{
|
|
511
|
-
type: Output
|
|
512
|
-
}], checkboxComponent: [{
|
|
513
|
-
type: ViewChild,
|
|
514
|
-
args: ['checkbox']
|
|
515
|
-
}] } });
|
|
516
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYWR2YW5jZWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzeS1hbmd1bGFyL3NyYy9saWIvZGVzeS10YWJsZXMvY29tcG9uZW50cy90YWJsZS1hZHZhbmNlZC90YWJsZS1hZHZhbmNlZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LXRhYmxlcy9jb21wb25lbnRzL3RhYmxlLWFkdmFuY2VkL3RhYmxlLWFkdmFuY2VkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBR0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlGQUFpRixDQUFDO0FBRXhILE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDOUQsT0FBTyxFQUFxQixPQUFPLEVBQXdCLE1BQU0sa0JBQWtCLENBQUM7QUFFcEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFFcEYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFNUYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDNUYsT0FBTyxFQUFFLHlCQUF5QixF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b3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzL2ludGVybmFsL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyBDaGVja2JveEl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9kZXN5LWZvcm1zL2NvbXBvbmVudHMvY2hlY2tib3hlcy9jaGVja2JveC1pdGVtL2NoZWNrYm94LWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IFNlbGVjdEl0ZW1EYXRhIH0gZnJvbSAnLi4vLi4vLi4vZGVzeS1mb3Jtcy9pbnRlcmZhY2VzL3NlbGVjdC1pdGVtLWRhdGEnO1xuaW1wb3J0IHsgQWNjZXNzaWJpbGl0eUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9jb21wb25lbnRzJztcbmltcG9ydCB7IERlc3lDb250ZW50Q2hpbGQgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZGVjb3JhdG9ycy9kZXN5LWNvbnRlbnQtY2hpbGQuZGVjb3JhdG9yJztcbmltcG9ydCB7IFNlYXJjaFV0aWxzIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3V0aWxzL3NlYXJjaC11dGlscyc7XG5pbXBvcnQgeyBDZWxsRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9jZWxsLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBSb3dEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3Jvdy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSGVhZENlbGxNb2RlbERhdGEsIE9yZGVyQnksIFJvd0RhdGEsIFdyYXBwZXJEYXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBSZWNhbGN1bGF0ZVRhYmxlUGFyYW1zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yZWNhbGN1bGF0ZS10YWJsZS1wYXJhbXMnO1xuaW1wb3J0IHsgVGFibGVDYXB0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vdGFibGUvY29tcG9uZW50cy90YWJsZS1jYXB0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb250ZW50Q29tcG9uZW50IH0gZnJvbSAnLi8uLi8uLi8uLi9kZXN5LWNvbW1vbnMvY29tcG9uZW50cy9jb250ZW50L2NvbnRlbnQuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlQWR2YW5jZWRGb290ZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtYWR2YW5jZWQtZm9vdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYWJsZUFkdmFuY2VkSGVhZGVyQ2VsbENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90YWJsZS1hZHZhbmNlZC1oZWFkZXItY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVBZHZhbmNlZEhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90YWJsZS1hZHZhbmNlZC1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlQWR2YW5jZWRSb3dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtYWR2YW5jZWQtcm93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYWJsZUFkdmFuY2VkU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlLWFkdmFuY2VkLXNlbGVjdC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkZXN5LXRhYmxlLWFkdmFuY2VkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLWFkdmFuY2VkLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVBZHZhbmNlZENvbXBvbmVudFxuICBleHRlbmRzIEFjY2Vzc2liaWxpdHlDb21wb25lbnRcbiAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3lcbntcbiAgX3Jvd3M6IFJvd0RhdGFbXTsgLy8gb3JpZ2luYWwgZGF0YVxuICBASW5wdXQoKVxuICBzZXQgcm93cyhyb3dzOiBSb3dEYXRhW10pIHtcbiAgICB0aGlzLl9yb3dzID0gcm93cztcbiAgICB0aGlzLnJlY2FsY3VsYXRlVmlzaWJsZUVsZW1lbnRzKCk7XG4gIH1cbiAgZ2V0IHJvd3MoKTogUm93RGF0YVtdIHtcbiAgICByZXR1cm4gdGhpcy5fcm93cztcbiAgfVxuICBASW5wdXQoKSBoZWFkOiBIZWFkQ2VsbE1vZGVsRGF0YVtdO1xuICBASW5wdXQoKSBmb290OiBSb3dEYXRhW107XG5cbiAgQElucHV0KCkgY2FwdGlvbjogc3RyaW5nO1xuICBASW5wdXQoKSBjYXB0aW9uQ2xhc3Nlczogc3RyaW5nO1xuICBASW5wdXQoKSBmaXJzdENlbGxJc0hlYWRlcjogYm9vbGVhbjtcbiAgQElucHV0KCkgaGFzQ2hlY2tib3hlczogYm9vbGVhbjtcbiAgQElucHV0KCkgaWRQcmVmaXg6IHN0cmluZztcbiAgQElucHV0KCkgY2xhc3Nlczogc3RyaW5nO1xuICBASW5wdXQoKSBjaGVja2JveENsYXNzZXM6IHN0cmluZztcbiAgQElucHV0KCkgaWQ6IHN0cmluZztcbiAgQElucHV0KCkgd3JhcHBlcjogV3JhcHBlckRhdGE7XG5cbiAgQElucHV0KCkgc2VsZWN0QWxsUGFnZXM6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSB0b3RhbEl0ZW1zOiBudW1iZXIgPSAwO1xuXG4gIEBJbnB1dCgpIHVzZVBhZ2luYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICByb3dzQ2hlY2tlZEluc2lkZSA9IHt9O1xuICBudW1iZXJPZlNlbGVjdGVkUm93cyA9IDA7XG5cbiAgQERlc3lDb250ZW50Q2hpbGQoKVxuICBAQ29udGVudENoaWxkcmVuKFRhYmxlQ2FwdGlvbkNvbXBvbmVudClcbiAgY2FwdGlvbkNvbXBvbmVudDogVGFibGVDYXB0aW9uQ29tcG9uZW50O1xuXG4gIEBEZXN5Q29udGVudENoaWxkKClcbiAgQENvbnRlbnRDaGlsZHJlbihUYWJsZUFkdmFuY2VkSGVhZGVyQ29tcG9uZW50KVxuICBoZWFkZXJDb21wb25lbnQ6IFRhYmxlQWR2YW5jZWRIZWFkZXJDb21wb25lbnQ7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihUYWJsZUFkdmFuY2VkRm9vdGVyQ29tcG9uZW50KSBmb290ZXJDb21wb25lbnQ6IFF1ZXJ5TGlzdDxUYWJsZUFkdmFuY2VkRm9vdGVyQ29tcG9uZW50PjtcblxuICBAQ29udGVudENoaWxkcmVuKFRhYmxlQWR2YW5jZWRSb3dDb21wb25lbnQpIHJvd0NvbXBvbmVudExpc3Q6IFF1ZXJ5TGlzdDxUYWJsZUFkdmFuY2VkUm93Q29tcG9uZW50PjtcbiAgQFZpZXdDaGlsZHJlbihSb3dEaXJlY3RpdmUpIHJvd0RhdGE6IFF1ZXJ5TGlzdDxSb3dEaXJlY3RpdmU+O1xuXG4gIEBPdXRwdXQoKSByb3dzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcm93c0NoZWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBhbGxSb3dzQ2hlY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHJlY2FsY3VsYXRlVGFibGUgPSBuZXcgRXZlbnRFbWl0dGVyPFJlY2FsY3VsYXRlVGFibGVQYXJhbXM+KCk7XG5cbiAgQE91dHB1dCgpIGZpbHRlckJ5OiBFdmVudEVtaXR0ZXI8T2JqZWN0PiA9IG5ldyBFdmVudEVtaXR0ZXI8T2JqZWN0PigpO1xuICBAT3V0cHV0KCkgc2VsZWN0ZWRCeTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBAT3V0cHV0KCkgc29ydEJ5OiBFdmVudEVtaXR0ZXI8T2JqZWN0PiA9IG5ldyBFdmVudEVtaXR0ZXI8T2JqZWN0PigpO1xuXG4gIEBPdXRwdXQoKSByb3dzVW5DaGVja2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHZpc2libGVSb3dzOiBSb3dEYXRhW10gfCBUYWJsZUFkdmFuY2VkUm93Q29tcG9uZW50W107XG4gIG9yZGVyQnlUeXBlID0gT3JkZXJCeTtcbiAgaXNSZXNldDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgcHJpdmF0ZSByb3dzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMucm93c1N1YnNjcmlwdGlvbiA9IHRoaXMucm93Q29tcG9uZW50TGlzdC5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlY2FsY3VsYXRlVmlzaWJsZUVsZW1lbnRzKCkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMucm93c1N1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5yb3dzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IGVsZW1udHNGb2N1cyA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdbdGFiaW5kZXhdJyk7XG4gICAgaWYgKGVsZW1udHNGb2N1cykge1xuICAgICAgZWxlbW50c0ZvY3VzLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnMCcpO1xuICAgIH1cbiAgICB0aGlzLnJlY2FsY3VsYXRlVmlzaWJsZUVsZW1lbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzY2EgbGFzIGZpbGFzIHZpc2libGVzIHRyYXMgcmVhbGl6YXJzZSB1bmEgYsO6c3F1ZWRhIG8gdW5hIG9yZGVuYWNpw7NuXG4gICAqL1xuICByZWNhbGN1bGF0ZVZpc2libGVFbGVtZW50cygpOiB2b2lkIHtcbiAgICBjb25zdCByZWNhbGN1bGF0ZVBhcmFtcyA9IHRoaXMuYnVpbGRSZWNhbGN1bGF0ZVBhcmFtcygpO1xuXG4gICAgLy8gU2kgc2UgY2FwdHVyYSBlbCBldmVudG8gcmVjYWxjdWxhdGVUYWJsZSBzZSBkZWphIGFsIHVzdWFyaW8gbGEgcmVzcG9uc2FiaWxpZGFkIGRlIGZpbHRyYXIgeSBvcmRlbmFyIGxvcyBlbGVtZW50b3MuXG4gICAgaWYgKHRoaXMucmVjYWxjdWxhdGVUYWJsZS5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5yZWNhbGN1bGF0ZVRhYmxlLmVtaXQocmVjYWxjdWxhdGVQYXJhbXMpO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2UgZGViZW4gbW9zdHJhciB0b2RhcyBsYXMgZmlsYXMgdGVtcG9yYWxtZW50ZSBwYXJhIHBvZGVyIGFwbGljYXIgZWwgZmlsdHJvIHkgbGEgb3JkZW5hY2nDs24gc29icmUgZWwgY29udGVuaWRvIGluc2VydGFkb1xuICAgICAgdGhpcy52aXNpYmxlUm93cyA9IHRoaXMuZ2V0Um93cygpO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgIC8vIFNlIGFwbGljYSBlbCBmaWx0cm8geSBsYSBvcmRlbmFjacOzblxuICAgICAgaWYgKCF0aGlzLnVzZVBhZ2luYXRpb24pIHtcbiAgICAgICAgbGV0IHJvd0RhdGEgPSB0aGlzLmZpbHRlclJvd3MocmVjYWxjdWxhdGVQYXJhbXMsIHRoaXMucm93RGF0YS50b0FycmF5KCkpO1xuICAgICAgICByb3dEYXRhID0gdGhpcy5zb3J0Um93cyhyZWNhbGN1bGF0ZVBhcmFtcywgcm93RGF0YSk7XG4gICAgICAgIHRoaXMudmlzaWJsZVJvd3MgPSByb3dEYXRhLm1hcCgocikgPT4gci5kZXN5Um93KSBhcyBSb3dEYXRhW10gfCBUYWJsZUFkdmFuY2VkUm93Q29tcG9uZW50W107XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5jaGVja2JveENvbXBvbmVudCAmJiAhdGhpcy5zZWxlY3RBbGxQYWdlcyAmJiB0aGlzLnVzZVBhZ2luYXRpb24pIHtcbiAgICAgIC8vIFNlbGVjdCBvbmx5IG9uZSBwYWdlIGxvZ2ljLCBzaG91bGQgYmUgdXNlZCB3aGVuIHVzZVBhZ2luYXRpb24gdHJ1ZS5cbiAgICAgIGNvbnN0IGFsbENoZWNrZWQgPSB0aGlzLmdldFJvd3MoKS5ldmVyeSgocm93KSA9PiB0aGlzLnJvd3NDaGVja2VkSW5zaWRlICYmIHRoaXMucm93c0NoZWNrZWRJbnNpZGVbcm93LmlkXSk7XG4gICAgICBjb25zdCBhbnlDaGVja2VkID0gdGhpcy5nZXRSb3dzKCkuc29tZSgocm93KSA9PiB0aGlzLnJvd3NDaGVja2VkSW5zaWRlICYmIHRoaXMucm93c0NoZWNrZWRJbnNpZGVbcm93LmlkXSk7XG5cbiAgICAgIHRoaXMuY2hlY2tib3hDb21wb25lbnQuaW5kZXRlcm1pbmF0ZUNoZWNrZWQgPSAhYWxsQ2hlY2tlZCAmJiBhbnlDaGVja2VkO1xuICAgICAgdGhpcy5jaGVja2JveENvbXBvbmVudC5jaGVja2VkID0gYWxsQ2hlY2tlZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydXllIGxvcyBwYXLDoW1ldHJvcyBuZWNlc2FyaW9zIHBhcmEgcmVjYWxjdWxhciBsYSB0YWJsYSwgaW5kaWNhbmRvIGxvcyBmaWx0cm9zIHkgbGEgb3JkZW5hY2nDs25cbiAgICovXG4gIHByaXZhdGUgYnVpbGRSZWNhbGN1bGF0ZVBhcmFtcygpOiBSZWNhbGN1bGF0ZVRhYmxlUGFyYW1zIHtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBmaWx0ZXJzOiBbXSxcbiAgICAgIHNvcnQ6IG51bGwsXG4gICAgfTtcblxuICAgIGNvbnN0IGhlYWQgPSB0aGlzLmdldEhlYWRlckNlbGxzKCkgYXMgKEhlYWRDZWxsTW9kZWxEYXRhIHwgVGFibGVBZHZhbmNlZEhlYWRlckNlbGxDb21wb25lbnQpW107XG4gICAgaWYgKGhlYWQpIHtcbiAgICAgIGhlYWQuZm9yRWFjaCgoaGVhZGVyQ2VsbCwgaGVhZGVyQ2VsbEluZGV4KSA9PiB7XG4gICAgICAgIGlmIChoZWFkZXJDZWxsLmhhc0ZpbHRlciAmJiBoZWFkZXJDZWxsLmFjdGl2ZUZpbHRlcikge1xuICAgICAgICAgIHBhcmFtcy5maWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgY29sdW1uSW5kZXg6IGhlYWRlckNlbGxJbmRleCxcbiAgICAgICAgICAgIGZpbHRlclRleHQ6IGhlYWRlckNlbGwudmFsdWVGaWx0ZXIsXG4gICAgICAgICAgICBpZGVudGlmaWVyOiBoZWFkZXJDZWxsLmlkZW50aWZpZXIsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGVhZGVyQ2VsbC5oYXNTZWxlY3QgJiYgaGVhZGVyQ2VsbC5hY3RpdmVTZWxlY3QpIHtcbiAgICAgICAgICBwYXJhbXMuZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgIGNvbHVtbkluZGV4OiBoZWFkZXJDZWxsSW5kZXgsXG4gICAgICAgICAgICBmaWx0ZXJUZXh0OiBoZWFkZXJDZWxsLnZhbHVlU2VsZWN0LFxuICAgICAgICAgICAgaWRlbnRpZmllcjogaGVhZGVyQ2VsbC5pZGVudGlmaWVyLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgb3JkZXJCeUNvbHVtbkluZGV4ID0gaGVhZC5maW5kSW5kZXgoKGNlbGwpID0+IGNlbGwub3JkZXJCeSAmJiBjZWxsLm9yZGVyQnkgIT09IE9yZGVyQnkubm9uZSk7XG4gICAgICBwYXJhbXMuc29ydCA9XG4gICAgICAgIG9yZGVyQnlDb2x1bW5JbmRleCA+PSAwID8geyBjb2x1bW5JbmRleDogb3JkZXJCeUNvbHVtbkluZGV4LCBvcmRlcjogaGVhZFtvcmRlckJ5Q29sdW1uSW5kZXhdLm9yZGVyQnkgfSA6IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxuICAvKipcbiAgICogZnVuY2lvbmVzIGRlIHJlY29nZXIgaWRzLCB5IGNhcmFjdGVyaXN0aWNhc1xuICAgKi9cblxuICBoYXNGaWx0ZXJzKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGhlYWQgPSB0aGlzLmdldEhlYWRlckNlbGxzKCk7XG4gICAgcmV0dXJuIGhlYWQgPyBoZWFkLmZpbmRJbmRleCgoY2VsbCkgPT4gY2VsbC5oYXNGaWx0ZXIgfHwgY2VsbC5oYXNTZWxlY3QpID49IDAgOiBmYWxzZTtcbiAgfVxuXG4gIGdldEhlYWRlckNlbGxzKCk6IEhlYWRDZWxsTW9kZWxEYXRhW10gfCBUYWJsZUFkdmFuY2VkSGVhZGVyQ2VsbENvbXBvbmVudFtdIHtcbiAgICByZXR1cm4gdGhpcy5oZWFkZXJDb21wb25lbnQgJiYgdGhpcy5oZWFkZXJDb21wb25lbnQuY2VsbHMubGVuZ3RoID4gMFxuICAgICAgPyB0aGlzLmhlYWRlckNvbXBvbmVudC5jZWxscy50b0FycmF5KClcbiAgICAgIDogdGhpcy5oZWFkO1xuICB9XG5cbiAgZ2V0Rm9vdGVyQ2VsbHMoKTogUm93RGF0YVtdIHwgVGFibGVBZHZhbmNlZEZvb3RlckNvbXBvbmVudFtdIHtcbiAgICByZXR1cm4gdGhpcy5mb290ZXJDb21wb25lbnQgJiYgdGhpcy5mb290ZXJDb21wb25lbnQubGVuZ3RoID4gMCA/IHRoaXMuZm9vdGVyQ29tcG9uZW50LnRvQXJyYXkoKSA6IHRoaXMuZm9vdDtcbiAgfVxuXG4gIGdldFJvd3MoKSB7XG4gICAgbGV0IHJvd3MgPSBbXTtcbiAgICBpZiAodGhpcy5yb3dDb21wb25lbnRMaXN0Py5sZW5ndGggPiAwKSB7XG4gICAgICByb3dzID0gdGhpcy5yb3dDb21wb25lbnRMaXN0LnRvQXJyYXkoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucm93cykge1xuICAgICAgcm93cyA9IHRoaXMucm93cztcbiAgICB9XG4gICAgcmV0dXJuIHJvd3M7XG4gIH1cblxuICAvKipcbiAgICogU2kgc2Ugc29icmVlc2NyaWJlICBlbCBjb21wb3J0YW1pZW50byBwb3IgZGVmZWN0byBkZSBmaWx0cmFkbyB5IG9yZGVuYWNpw7NuLCBzZSB1dGlsaXphcsOhbiBsYXMgaW5kaWNhZGFzIGRlc2RlIGZ1ZXJhIGRlbFxuICAgKiBjb21wb25lbnRlICh5YSBzZWEgcG9yIHBhcsOhbWV0cm8gbyBwb3IgY29udGVuaWRvKS5cbiAgICogU2kgbm8gc2Ugc29icmVlc2NyaWJlLCBkZXZ1ZWx2ZSBsYXMgZmlsYXMgY2FsY3VsYWRhcy5cbiAgICovXG4gIGdldFZpc2libGVSb3dzKCkge1xuICAgIGxldCByb3dzID0gdGhpcy5yZWNhbGN1bGF0ZVRhYmxlLm9ic2VydmVycy5sZW5ndGggPiAwID8gdGhpcy5nZXRSb3dzKCkgOiB0aGlzLnZpc2libGVSb3dzO1xuICAgIGlmIChcbiAgICAgIHRoaXMuc2VsZWN0QWxsUGFnZXMgJiZcbiAgICAgIHRoaXMuY2hlY2tib3hDb21wb25lbnQgJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWRBbGxSb3dzQ2hlY2tlZCAmJlxuICAgICAgKHRoaXMuY2hlY2tib3hDb21wb25lbnQuY2hlY2tlZCB8fCB0aGlzLnVuc2VsZWN0ZWRSb3dzLnNpemUgPiAwKVxuICAgICkge1xuICAgICAgcm93cy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgcm93LmNoZWNrZWQgPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5yb3dzQ2hlY2tlZEluc2lkZSkge1xuICAgICAgY29uc3Qgcm93ID0gcm93cy5maW5kKChyKSA9PiByLmlkID09IFN0cmluZyhpZCkpO1xuICAgICAgaWYgKHJvdykge1xuICAgICAgICByb3cuY2hlY2tlZCA9IHRoaXMucm93c0NoZWNrZWRJbnNpZGVbaWRdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcm93cztcbiAgfVxuXG4gIGdldElkUHJlZml4KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWRQcmVmaXggPyB0aGlzLmlkUHJlZml4IDogJ2lkLXRhYmxlLXJvdyc7XG4gIH1cblxuICBnZXRJZEhlYWRlcihpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJZFByZWZpeCgpICsgJy1oZWFkZXItJyArIGluZGV4O1xuICB9XG5cbiAgZ2V0SWRSb3dDaGVja2JveChpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJZFByZWZpeCgpICsgJy1jaGVja2JveC0nICsgaW5kZXg7XG4gIH1cblxuICBnZXRJZEhlYWRlckZpbHRlcihpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJZFByZWZpeCgpICsgJy1oZWFkZXItZmlsdGVyLScgKyBpbmRleDtcbiAgfVxuXG4gIGdldElkSGVhZGVyU2VsZWN0KGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldElkUHJlZml4KCkgKyAnLWhlYWRlci1zZWxlY3QtJyArIGluZGV4O1xuICB9XG5cbiAgZ2V0Q2FwdGlvbkNsYXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2FwdGlvbkNvbXBvbmVudCA/IHRoaXMuY2FwdGlvbkNvbXBvbmVudC5jbGFzc2VzIDogdGhpcy5jYXB0aW9uQ2xhc3NlcztcbiAgfVxuXG4gIGdldFN0cmluZ09yZGVyQnkob3JkZXJCeTogT3JkZXJCeSk6IHN0cmluZyB7XG4gICAgaWYgKG9yZGVyQnkgPT09IE9yZGVyQnkuYXNjKSB7XG4gICAgICByZXR1cm4gJ2FzY2VuZGluZyc7XG4gICAgfSBlbHNlIGlmIChvcmRlckJ5ID09PSBPcmRlckJ5LmRlc2MpIHtcbiAgICAgIHJldHVybiAnZGVzY2VuZGluZyc7XG4gICAgfSBlbHNlIGlmIChvcmRlckJ5ID09PSBPcmRlckJ5Lm5vbmUpIHtcbiAgICAgIHJldHVybiAnbm9uZSc7XG4gICAgfVxuICB9XG5cbiAgZ2V0U2VsZWN0Rm9ySXRlbShpdGVtOiBhbnkpOiBUYWJsZUFkdmFuY2VkU2VsZWN0Q29tcG9uZW50IHtcbiAgICByZXR1cm4gaXRlbS5zZWxlY3RDb21wb25lbnQgPyBpdGVtLnNlbGVjdENvbXBvbmVudCA6IG51bGw7XG4gIH1cblxuICBnZXRJdGVtU2VsZWN0T3B0aW9ucyhpdGVtOiBUYWJsZUFkdmFuY2VkU2VsZWN0Q29tcG9uZW50KTogU2VsZWN0SXRlbURhdGFbXSB7XG4gICAgcmV0dXJuIGl0ZW0uc2VsZWN0SXRlbUNvbXBvbmVudExpc3QgJiYgaXRlbS5zZWxlY3RJdGVtQ29tcG9uZW50TGlzdC5sZW5ndGggPiAwXG4gICAgICA/IGl0ZW0uc2VsZWN0SXRlbUNvbXBvbmVudExpc3QudG9BcnJheSgpXG4gICAgICA6IGl0ZW0uaXRlbXM7XG4gIH1cblxuICBnZXRDb250ZW50Q29tcG9uZW50KGl0ZW06IFRhYmxlQWR2YW5jZWRIZWFkZXJDZWxsQ29tcG9uZW50KTogQ29udGVudENvbXBvbmVudCB7XG4gICAgcmV0dXJuIGl0ZW0uY29udGVudENvbXBvbmVudCA/IGl0ZW0uY29udGVudENvbXBvbmVudCA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogY2hlY2tzXG4gICAqL1xuICBoYW5kbGVDaGVja2JveENoYW5nZShyb3c6IFJvd0RhdGEgfCBUYWJsZUFkdmFuY2VkUm93Q29tcG9uZW50KTogdm9pZCB7XG4gICAgaWYgKHJvdyBpbnN0YW5jZW9mIFRhYmxlQWR2YW5jZWRSb3dDb21wb25lbnQpIHtcbiAgICAgIHJvdy5jaGVja2VkQ2hhbmdlLmVtaXQocm93LmNoZWNrZWQpO1xuICAgIH1cbiAgICB0aGlzLm5vdGlmeUNoZWNrZWRDaGFuZ2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJtaXRlIGRlc21hcmNhciB0b2RhcyBsYXMgZmlsYXNcbiAgICovXG4gIHByaXZhdGUgdW5jaGVja0FsbCgpOiB2b2lkIHtcbiAgICB0aGlzLnJvd3NDaGVja2VkSW5zaWRlID0ge307XG4gICAgdGhpcy51bnNlbGVjdGVkUm93cy5jbGVhcigpO1xuICAgIHRoaXMuc2VsZWN0ZWRBbGxSb3dzQ2hlY2tlZCA9IGZhbHNlO1xuICAgIHRoaXMubnVtYmVyT2ZTZWxlY3RlZFJvd3MgPSAwO1xuXG4gICAgdGhpcy5nZXRSb3dzKCkuZm9yRWFjaCgocikgPT4ge1xuICAgICAgY29uc3QgbXVzdEVtaXQgPSByLmNoZWNrZWQgJiYgciBpbnN0YW5jZW9mIFRhYmxlQWR2YW5jZWRSb3dDb21wb25lbnQ7XG4gICAgICByLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgIGlmIChtdXN0RW1pdCkge1xuICAgICAgICAociBhcyBUYWJsZUFkdmFuY2VkUm93Q29tcG9uZW50KS5jaGVja2VkQ2hhbmdlLmVtaXQoci5jaGVja2VkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLm5vdGlmeUNoZWNrZWRDaGFuZ2UoKTtcbiAgfVxuXG4gIHVuc2VsZWN0ZWRSb3dzOiBTZXQ8bnVtYmVyPiA9IG5ldyBTZXQoKTsgLy8gVmFyaWFibGUgZ2xvYmFsIHBhcmEgYWxtYWNlbmFyIGxvcyBpdGVtcyBkZXNlbGVjY2lvbmFkb3MgY3VhbmRvIHByZXZpYW1lbnRlIHNlIGhhIHNlbGVjY2lvbmFkbyB0b2Rvc1xuICBzZWxlY3RlZEFsbFJvd3NDaGVja2VkOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKlxuICAgKiBOb3RpZmljYSBjYW1iaW9zIGVuIGxhcyBmaWxhc1xuICAgKi9cbiAgcHJpdmF0ZSBub3RpZnlDaGVja2VkQ2hhbmdlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJvd0NvbXBvbmVudExpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3MpO1xuICAgIH1cblxuICAgIGNvbnN0IHJvd0NoZWNrczogYW55ID0ge307XG4gICAgdGhpcy5nZXRSb3dzKCkuZm9yRWFjaCgocikgPT4ge1xuICAgICAgcm93Q2hlY2tzW3IuaWRdID0gISFyLmNoZWNrZWQ7IC8vIFNlIGFwbGljYW4gdGFtYmnDqW4gYSBsYXMgbm8gdmlzaWJsZXNcbiAgICAgIGlmICh0aGlzLnNlbGVjdEFsbFBhZ2VzICYmIHRoaXMuc2VsZWN0ZWRBbGxSb3dzQ2hlY2tlZCkge1xuICAgICAgICBpZiAoci5jaGVja2VkKSB7XG4gICAgICAgICAgdGhpcy51bnNlbGVjdGVkUm93cy5kZWxldGUoci5pZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy51bnNlbGVjdGVkUm93cy5hZGQoci5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5udW1iZXJPZlNlbGVjdGVkUm93cyA9IHRoaXMudG90YWxJdGVtcyAtIHRoaXMudW5zZWxlY3RlZFJvd3Muc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMucm93c0NoZWNrZWRJbnNpZGUgPSB7IC4uLnRoaXMucm93c0NoZWNrZWRJbnNpZGUsIC4uLnJvd0NoZWNrcyB9O1xuICAgIHRoaXMucm93c0NoZWNrZWQuZW1pdCh0aGlzLnJvd3NDaGVja2VkSW5zaWRlKTtcbiAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNoZWNrYm94Q29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IHZpc2libGVSb3dzID0gdGhpcy5nZXRWaXNpYmxlUm93cygpO1xuICAgICAgICBjb25zdCBhbnlDaGVja2VkID1cbiAgICAgICAgICB0aGlzLnNlbGVjdEFsbFBhZ2VzICYmIHRoaXMudG90YWxJdGVtcyAmJiB0aGlzLnVzZVBhZ2luYXRpb25cbiAgICAgICAgICAgID8gdGhpcy5hcmVBbnlSb3dzQ2hlY2tlZCgpXG4gICAgICAgICAgICA6IHZpc2libGVSb3dzLnNvbWUoKHIpID0+IHIuY2hlY2tlZCk7XG4gICAgICAgIGNvbnN0IGFsbENoZWNrZWQgPVxuICAgICAgICAgIHRoaXMuc2VsZWN0QWxsUGFnZXMgJiYgdGhpcy50b3RhbEl0ZW1zICYmIHRoaXMudXNlUGFnaW5hdGlvblxuICAgICAgICAgICAgPyB0aGlzLmFyZUFsbFJvd3NDaGVja2VkKClcbiAgICAgICAgICAgIDogdmlzaWJsZVJvd3MuZXZlcnkoKHIpID0+IHIuY2hlY2tlZCk7XG4gICAgICAgIHRoaXMuY2hlY2tib3hDb21wb25lbnQuaW5kZXRlcm1pbmF0ZUNoZWNrZWQgPVxuICAgICAgICAgICghdGhpcy5zZWxlY3RlZEFsbFJvd3NDaGVja2VkICYmIHRoaXMuc2VsZWN0QWxsUGFnZXMgJiYgdGhpcy51c2VQYWdpbmF0aW9uICYmIGFueUNoZWNrZWQgJiYgIWFsbENoZWNrZWQpIHx8XG4gICAgICAgICAgKGFueUNoZWNrZWQgJiYgIWFsbENoZWNrZWQpIHx8XG4gICAgICAgICAgKHRoaXMudW5zZWxlY3RlZFJvd3Muc2l6ZSA+IDAgJiYgdGhpcy51bnNlbGVjdGVkUm93cy5zaXplIDwgdGhpcy50b3RhbEl0ZW1zKTtcbiAgICAgICAgdGhpcy5jaGVja2JveENvbXBvbmVudC5jaGVja2VkID0gYWxsQ2hlY2tlZCAmJiB0aGlzLnVuc2VsZWN0ZWRSb3dzLnNpemUgPT0gMCAmJiB2aXNpYmxlUm93cy5sZW5ndGggPiAwO1xuICAgICAgICBjb25zdCB7IGNoZWNrZWQsIGluZGV0ZXJtaW5hdGVDaGVja2VkIH0gPSB0aGlzLmNoZWNrYm94Q29tcG9uZW50O1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRBbGxSb3dzQ2hlY2tlZCAmJiBjaGVja2VkKSB0aGlzLnNlbGVjdGVkQWxsUm93c0NoZWNrZWQgPSB0cnVlO1xuICAgICAgICBlbHNlIGlmICh0aGlzLnNlbGVjdGVkQWxsUm93c0NoZWNrZWQgJiYgIWNoZWNrZWQgJiYgIWluZGV0ZXJtaW5hdGVDaGVja2VkKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEFsbFJvd3NDaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy51bnNlbGVjdGVkUm93cy5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgICAgdGhpcy5hbGxSb3dzQ2hlY2tlZC5lbWl0KHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGluZGV0ZXJtaW5hdGVDaGVja2VkIHx8ICFjaGVja2VkKSB7XG4gICAgICAgICAgdGhpcy5hbGxSb3dzQ2hlY2tlZC5lbWl0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VsZWN0QWxsUGFnZXMpIHtcbiAgICAgICAgdGhpcy5yb3dzVW5DaGVja2VkLmVtaXQoQXJyYXkuZnJvbSh0aGlzLnVuc2VsZWN0ZWRSb3dzKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFyZUFsbFJvd3NDaGVja2VkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGl0ZW1zID0gT2JqZWN0LmtleXModGhpcy5yb3dzQ2hlY2tlZEluc2lkZSk7XG4gICAgaWYgKGl0ZW1zLmxlbmd0aCAhPT0gdGhpcy50b3RhbEl0ZW1zICYmIHRoaXMubnVtYmVyT2ZTZWxlY3RlZFJvd3MgIT09IHRoaXMudG90YWxJdGVtcykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBhbGxUcnVlID0gaXRlbXMuZXZlcnkoKGtleSkgPT4gdGhpcy5yb3dzQ2hlY2tlZEluc2lkZVtrZXldKTtcbiAgICByZXR1cm4gYWxsVHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgYXJlQW55Um93c0NoZWNrZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXRlbXMgPSBPYmplY3Qua2V5cyh0aGlzLnJvd3NDaGVja2VkSW5zaWRlKTtcbiAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGFueVRydWUgPSBpdGVtcy5zb21lKChrZXkpID0+IHRoaXMucm93c0NoZWNrZWRJbnNpZGVba2V5XSk7XG4gICAgcmV0dXJuIGFueVRydWU7XG4gIH1cblxuICAvKipcbiAgICogYnVzcXVlZGFcbiAgICovXG4gIGhhbmRsZUlucHV0U2VhcmNoKGl0ZW06IEhlYWRDZWxsTW9kZWxEYXRhKTogdm9pZCB7XG4gICAgaWYgKGl0ZW0uaGFzRmlsdGVyKSB7XG4gICAgICAvLyBzaSB0aWVuZSBidXNjYWRvclxuICAgICAgaXRlbS5hY3RpdmVGaWx0ZXIgPSAhIWl0ZW0udmFsdWVGaWx0ZXI7XG4gICAgICB0aGlzLnVuY2hlY2tBbGwoKTtcbiAgICB9XG4gICAgaWYgKGl0ZW0uaGFzU2VsZWN0KSB7XG4gICAgICAvL1NpIHRpZW5lIHNlbGVjY2lvbmFibGVcbiAgICAgIGl0ZW0uYWN0aXZlU2VsZWN0ID0gISFpdGVtLnZhbHVlU2VsZWN0O1xuICAgICAgdGhpcy51bmNoZWNrQWxsKCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZWNhbGN1bGF0ZVZpc2libGVFbGVtZW50cygpO1xuICB9XG5cbiAgaGFuZGxlQnV0dG9uU2VhcmNoKGl0ZW06IEhlYWRDZWxsTW9kZWxEYXRhKTogdm9pZCB7XG4gICAgaWYgKGl0ZW0uaGFzRmlsdGVyKSB7XG4gICAgICAvLyBzaSB0aWVuZSBidXNjYWRvclxuICAgICAgaXRlbS5hY3RpdmVGaWx0ZXIgPSAhIWl0ZW0udmFsdWVGaWx0ZXI7XG4gICAgICB0aGlzLmZpbHRlckJ5LmVtaXQoeyBpZDogaXRlbS5pZGVudGlmaWVyLCB2YWx1ZTogaXRlbS52YWx1ZUZpbHRlciB9KTtcbiAgICAgIHRoaXMudW5jaGVja0FsbCgpO1xuICAgIH1cbiAgICBpZiAoaXRlbS5oYXNTZWxlY3QpIHtcbiAgICAgIC8vU2kgdGllbmUgc2VsZWNjaW9uYWJsZVxuICAgICAgaXRlbS5hY3RpdmVTZWxlY3QgPSAhIWl0ZW0udmFsdWVTZWxlY3Q7XG4gICAgICB0aGlzLnNlbGVjdGVkQnkuZW1pdChpdGVtLnZhbHVlU2VsZWN0KTtcbiAgICAgIHRoaXMudW5jaGVja0FsbCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZSBmaWx0cmFuIGxhcyBmaWxhcyBzZWfDum4gbG8gZXNwZWNpZmljYWRvIGVuIGxhIGJhcnJhIGRlIGLDunNxdWVkYSBkZSBjYWRhIGNvbHVtbmEuXG4gICAqIFNpIG5vIGhheSBiw7pzcXVlZGEgc3NlIGRldnVlbHZlbiB0b2RhcyBsYXMgZmlsYXMuXG4gICAqIEBwYXJhbSByZWNhbGN1bGF0ZVBhcmFtcyBwYXJhbWV0cm9zIHBhcmEgcmVjYWxjdWxhciBsb3MgZWxlbWVudG9zIHZpc2libGVzXG4gICAqIEBwYXJhbSByb3dzIGxpc3RhIGNvbiB0b2RhcyBsYXMgZmlsYXNcbiAgICogQHJldHVybiBsaXN0YSBkZSBmaWxhcyBmaWx0cmFkYVxuICAgKi9cbiAgcHJpdmF0ZSBmaWx0ZXJSb3dzKHJlY2FsY3VsYXRlUGFyYW1zOiBSZWNhbGN1bGF0ZVRhYmxlUGFyYW1zLCByb3dzOiBSb3dEaXJlY3RpdmVbXSk6IFJvd0RpcmVjdGl2ZVtdIHtcbiAgICBsZXQgZmlsdGVyZWRSb3dzID0gcm93cztcbiAgICByZWNhbGN1bGF0ZVBhcmFtcy5maWx0ZXJzLmZvckVhY2goKGZpbHRlcikgPT4ge1xuICAgICAgZmlsdGVyZWRSb3dzID0gZmlsdGVyZWRSb3dzLmZpbHRlcigocm93KSA9PlxuICAgICAgICBTZWFyY2hVdGlscy5jb250YWluc0FueVdvcmRGcm9tKHJvdy5nZXRDZWxsKGZpbHRlci5jb2x1bW5JbmRleCkuZ2V0Q29udGVudCgpLCBmaWx0ZXIuZmlsdGVyVGV4dClcbiAgICAgICk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZpbHRlcmVkUm93cztcbiAgfVxuXG4gIC8qKlxuICAgKiBvcmRlbmFjaW9uXG4gICAqL1xuXG4gIC8qKlxuICAgKiBQZXJtaXRlIGluZGljYXIgcXVlIHNlIGRlYmUgb3JkZW5hciBsYSB0YWJsYVxuICAgKiBAcGFyYW0gaW5kZXggaW5kaWNlIGRlIGxhIGNvbHVtbmFcbiAgICovXG4gIGhhbmRsZVNvcnRCeUNvbHVtbihpbmRleDogbnVtYmVyLCBldmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGhlYWQgPSB0aGlzLmdldEhlYWRlckNlbGxzKCk7XG4gICAgbGV0IG9yZGVyID0gT3JkZXJCeS5hc2M7XG4gICAgaWYgKGhlYWQpIHtcbiAgICAgIGhlYWQuZm9yRWFjaCgoY2VsbCwgY2VsbEluZGV4KSA9PiB7XG4gICAgICAgIGlmIChjZWxsLm9yZGVyQnkpIHtcbiAgICAgICAgICBpZiAoY2VsbEluZGV4ID09PSBpbmRleCkge1xuICAgICAgICAgICAgb3JkZXIgPSB0aGlzLmdldE5leHREaXJlY3Rpb24oY2VsbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNlbGwub3JkZXJCeSA9IGNlbGxJbmRleCA9PT0gaW5kZXggPyB0aGlzLmdldE5leHREaXJlY3Rpb24oY2VsbCkgOiBPcmRlckJ5Lm5vbmU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy51c2VQYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLnNvcnRCeS5lbWl0KHsgaWQ6IGluZGV4LCBvcmRlcjogb3JkZXIgfSk7XG4gICAgICB0aGlzLnVuY2hlY2tBbGwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZWNhbGN1bGF0ZVZpc2libGVFbGVtZW50cygpO1xuICAgIH1cbiAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcmRlbmEgbGFzIGZpbGFzIGluZGljYWRhcyBzZWfDum4gbGEgY29sdW1uYSBlc3BlY2lmaWNhZGEgZW4gbGEgY2FiZWNlcmFcbiAgICogQHBhcmFtIHJlY2FsY3VsYXRlUGFyYW1zIHBhcmFtZXRyb3MgcGFyYSByZWNhbGN1bGFyIGxvcyBlbGVtZW50b3MgdmlzaWJsZXNcbiAgICogQHBhcmFtIHJvd3MgZmlsYXMgZGUgbGEgdGFibGEgYSBvcmRlbmFyXG4gICAqIEByZXR1cm4gbWlzbWFzIGZpbGFzIHBlcm8gb3JkZW5hZGFzIHBvciBsYSBjb2x1bW5hIGluZGljYWRhXG4gICAqL1xuICBwcml2YXRlIHNvcnRSb3dzKHJlY2FsY3VsYXRlUGFyYW1zOiBSZWNhbGN1bGF0ZVRhYmxlUGFyYW1zLCByb3dzOiBSb3dEaXJlY3RpdmVbXSk6IFJvd0RpcmVjdGl2ZVtdIHtcbiAgICBsZXQgc29ydGVkUm93cyA9IHJvd3M7XG4gICAgaWYgKHJlY2FsY3VsYXRlUGFyYW1zLnNvcnQpIHtcbiAgICAgIGNvbnN0IGNvbHVtbkluZGV4ID0gcmVjYWxjdWxhdGVQYXJhbXMuc29ydC5jb2x1bW5JbmRleDtcbiAgICAgIGNvbnN0IGlzQXNjID0gcmVjYWxjdWxhdGVQYXJhbXMuc29ydC5vcmRlciA9PT0gT3JkZXJCeS5hc2M7XG4gICAgICBzb3J0ZWRSb3dzID0gcm93cy5zb3J0KChhLCBiKSA9PiB0aGlzLmNvbXBhcmVDZWxsQ29udGVudChhLmdldENlbGwoY29sdW1uSW5kZXgpLCBiLmdldENlbGwoY29sdW1uSW5kZXgpLCBpc0FzYykpO1xuICAgIH1cblxuICAgIHJldHVybiBzb3J0ZWRSb3dzO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhcmEgZWwgY29udGVuaWRvIGRlIGRvcyBjZWxkYXMuIEVzdGUgc2UgaW52aWVydGUgc2kgZWwgb3JkZW4gZXNwZWNpZmljYWRvIGVzIGRlc2NlbmRlbnRlLlxuICAgKi9cbiAgY29tcGFyZUNlbGxDb250ZW50KGE6IENlbGxEaXJlY3RpdmUsIGI6IENlbGxEaXJlY3RpdmUsIGlzQXNjOiBib29sZWFuKTogbnVtYmVyIHtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGNvbnN0IGFDb21wYXJhYmxlID0gdGhpcy5jbGVhbkN1cnJlbmN5KGEuZ2V0Q29udGVudCgpKS50cmltKCk7XG4gICAgY29uc3QgYkNvbXBhcmFibGUgPSB0aGlzLmNsZWFuQ3VycmVuY3koYi5nZXRDb250ZW50KCkpLnRyaW0oKTtcbiAgICBjb25zdCBudW1iZXJSZWdleCA9IC9eLT9cXGQrKFxcLnwsKT9cXGQqJC87XG4gICAgY29uc3QgZGF0ZVJlZ2V4ID0gL14oXFxkezJ9KShcXC98LSkoXFxkezJ9KShcXC98LSkoXFxkezR9KSggKFxcZHsyfSk6KFxcZHsyfSkoOihcXGR7Mn0pKT8pPyQvO1xuICAgIGlmIChhQ29tcGFyYWJsZSAmJiBiQ29tcGFyYWJsZSkge1xuICAgICAgaWYgKG51bWJlclJlZ2V4LnRlc3QoYUNvbXBhcmFibGUpICYmIG51bWJlclJlZ2V4LnRlc3QoYkNvbXBhcmFibGUpKSB7XG4gICAgICAgIC8vIE51bWVyb3NcbiAgICAgICAgcmVzdWx0ID0gcGFyc2VGbG9hdChhQ29tcGFyYWJsZSkgLSBwYXJzZUZsb2F0KGJDb21wYXJhYmxlKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0ZVJlZ2V4LnRlc3QoYUNvbXBhcmFibGUpICYmIGRhdGVSZWdleC50ZXN0KGJDb21wYXJhYmxlKSkge1xuICAgICAgICAvLyBGZWNoYXNcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5wYXJzZURhdGVUaW1lKGFDb21wYXJhYmxlKSAtIHRoaXMucGFyc2VEYXRlVGltZShiQ29tcGFyYWJsZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUZXh0b1xuICAgICAgICByZXN1bHQgPSBhQ29tcGFyYWJsZS5sb2NhbGVDb21wYXJlKGJDb21wYXJhYmxlLCAnZXMnLCB7IHNlbnNpdGl2aXR5OiAnYmFzZScsIGlnbm9yZVB1bmN0dWF0aW9uOiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0ICogKGlzQXNjID8gMSA6IC0xKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VEYXRlVGltZShpbnB1dDogc3RyaW5nKSB7XG4gICAgLy8gMzEvMTIvMjAyMyAxMjoxMjoxMiBvciAzMS0xMi0yMDIzIDEyOjEyOjEyIGZlY2hhcyBxdWUgYWNlcHRhLCBoaDptbTpzcyBlcyBvcGNpb25hbFxuICAgIGxldCBbZGF0ZVBhcnQsIHRpbWVQYXJ0XSA9IGlucHV0LnNwbGl0KCcgJyk7XG4gICAgbGV0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IGRhdGVQYXJ0LnNwbGl0KC9cXC98LS8pLm1hcChOdW1iZXIpO1xuICAgIGxldCBbaG91cnMgPSAwLCBtaW51dGVzID0gMCwgc2Vjb25kcyA9IDBdID0gKHRpbWVQYXJ0ID8gdGltZVBhcnQuc3BsaXQoJzonKSA6IFtdKS5tYXAoTnVtYmVyKTtcbiAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF5LCBob3VycywgbWludXRlcywgc2Vjb25kcyk7XG4gICAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHNlIGNhbGN1bGEgbGEgb3JkZW5hY2nDs24gbnVldmFcbiAgICovXG4gIHByaXZhdGUgZ2V0TmV4dERpcmVjdGlvbihpdGVtOiBIZWFkQ2VsbE1vZGVsRGF0YSk6IE9yZGVyQnkge1xuICAgIGlmIChpdGVtLm9yZGVyQnkgPT09IE9yZGVyQnkubm9uZSB8fCBpdGVtLm9yZGVyQnkgPT09IE9yZGVyQnkuZGVzYykge1xuICAgICAgcmV0dXJuIE9yZGVyQnkuYXNjO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gT3JkZXJCeS5kZXNjO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBzaSBlcyB1bmEgY2FudGlkYWQgZGUgZGluZXJvIHNlIHF1aXRhIOKCrCBwYXJhIHBvZGVyIGNvbXBhcmFyIGxvcyBudW1lcm9zXG4gICAqL1xuICBwcml2YXRlIGNsZWFuQ3VycmVuY3kodHh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHR4dCA9IHR4dC5yZXBsYWNlKC/igqwvZywgJycpO1xuICAgIHJldHVybiB0eHQ7XG4gIH1cblxuICBzZWxlY3RGaWx0ZXIoaXRlbTogVGFibGVBZHZhbmNlZFNlbGVjdENvbXBvbmVudCwgaXRlbVZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpdGVtLnZhbHVlQ2hhbmdlLmVtaXQoaXRlbVZhbHVlKTtcblxuICAgIGNvbnN0IGhlYWQgPSB0aGlzLmdldEhlYWRlckNlbGxzKCk7XG4gICAgY29uc3Qgcm93cyA9IHRoaXMuZ2V0Um93cygpO1xuICAgIGlmIChoZWFkICYmIHJvd3MpIHtcbiAgICAgIGhlYWQuZm9yRWFjaCgoY2VsbDogVGFibGVBZHZhbmNlZEhlYWRlckNlbGxDb21wb25lbnQsIGNlbGxJbmRleCkgPT4ge30pO1xuICAgICAgcm93cy5mb3JFYWNoKChyb3cpID0+IHt9KTtcbiAgICB9XG4gIH1cblxuICBAVmlld0NoaWxkKCdjaGVja2JveCcpIGNoZWNrYm94Q29tcG9uZW50OiBDaGVja2JveEl0ZW1Db21wb25lbnQ7XG5cbiAgY2hlY2tVbmNoZWNrQWxsKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jaGVja2JveENvbXBvbmVudCkgcmV0dXJuO1xuXG4gICAgbGV0IHsgaW5kZXRlcm1pbmF0ZUNoZWNrZWQsIGNoZWNrZWQgfSA9IHRoaXMuY2hlY2tib3hDb21wb25lbnQ7XG4gICAgaWYgKCFjaGVja2VkKSB7XG4gICAgICB0aGlzLmNoZWNrYm94Q29tcG9uZW50LmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2hlY2tib3hDb21wb25lbnQuaW5kZXRlcm1pbmF0ZUNoZWNrZWQgPSBmYWxzZTtcbiAgICAgIGNoZWNrZWQgPSBmYWxzZTtcbiAgICAgIGluZGV0ZXJtaW5hdGVDaGVja2VkID0gZmFsc2U7XG4gICAgICB0aGlzLnNlbGVjdGVkQWxsUm93c0NoZWNrZWQgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZEFsbFJvd3NDaGVja2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMubnVtYmVyT2ZTZWxlY3RlZFJvd3MgPSB0aGlzLnRvdGFsSXRlbXM7XG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdEFsbFBhZ2VzKSB0aGlzLnJvd3NDaGVja2VkSW5zaWRlID0ge307XG4gICAgY29uc3Qgc2VsZWN0ZWRSb3dzID0ge307XG4gICAgY29uc3Qgcm93cyA9IHRoaXMuZ2V0VmlzaWJsZVJvd3MoKTtcbiAgICBpZiAocm93cyAmJiByb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJvd3MuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgIHJvdy5jaGVja2VkID0gaW5kZXRlcm1pbmF0ZUNoZWNrZWQgPyBmYWxzZSA6IGNoZWNrZWQ7XG4gICAgICAgIGlmICghaW5kZXRlcm1pbmF0ZUNoZWNrZWQpIHNlbGVjdGVkUm93c1tyb3cuaWRdID0gY2hlY2tlZDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgICAgdGhpcy5hbGxSb3dzQ2hlY2tlZC5lbWl0KHRydWUpO1xuICAgICAgfSBlbHNlIGlmIChpbmRldGVybWluYXRlQ2hlY2tlZCB8fCAhY2hlY2tlZCkge1xuICAgICAgICB0aGlzLmFsbFJvd3NDaGVja2VkLmVtaXQoZmFsc2UpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VsZWN0QWxsUGFnZXMpIHtcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkUm93cy5jbGVhcigpO1xuICAgICAgICB0aGlzLnJvd3NVbkNoZWNrZWQuZW1pdChBcnJheS5mcm9tKHRoaXMudW5zZWxlY3RlZFJvd3MpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucm93c0NoZWNrZWRJbnNpZGUgPSB7IC4uLnRoaXMucm93c0NoZWNrZWRJbnNpZGUsIC4uLnNlbGVjdGVkUm93cyB9O1xuICAgICAgdGhpcy5yb3dzQ2hlY2tlZC5lbWl0KHRoaXMucm93c0NoZWNrZWRJbnNpZGUpO1xuICAgIH1cbiAgfVxufVxuIiwiPG5nLXRlbXBsYXRlICN0YWJsZUNvbnRlbnQ+XG4gIDxkaXZcbiAgICAqbmdJZj1cImhhc0NoZWNrYm94ZXNcIlxuICAgIGNsYXNzPVwibGc6ZmxleCBsZzpmbGV4LXdyYXAgbGc6dy1mdWxsXCJcbiAgICBhcmlhLWxhYmVsbGVkYnk9XCJhY2Npb25lcy1lbnRyYWRhc1wiPlxuICAgIDxoM1xuICAgICAgaWQ9XCJhY2Npb25lcy1lbnRyYWRhc1wiXG4gICAgICBjbGFzcz1cInNyLW9ubHlcIj5cbiAgICAgIFNlbGVjY2nDs24gbcO6bHRpcGxlIHkgQWNjaW9uZXMgc29icmUgZWwgbGlzdGFkbyBkZSBlbnRyYWRhc1xuICAgIDwvaDM+XG4gICAgPGRpdlxuICAgICAgaWQ9XCJzZWxlY3Rpb24taG9tZVwiXG4gICAgICBjbGFzcz1cInB0LTIgcGItMCBwbC00IG10LTAgbGc6ZmxleCBzbTpmbGV4LTEgcHktYmFzZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImgtMTBcIj5cbiAgICAgICAgPGRlc3ktY2hlY2tib3hlcyBuYW1lPVwidG9kb3MtZW50cmFkYXMtY2hieFwiPlxuICAgICAgICAgIDxkZXN5LWNoZWNrYm94LWl0ZW1cbiAgICAgICAgICAgICNjaGVja2JveFxuICAgICAgICAgICAgdmFsdWU9XCJpdGVtLWNoZWNrYm94XCJcbiAgICAgICAgICAgIG5hbWU9XCJ0b2Rvcy1lbnRyYWRhc1wiXG4gICAgICAgICAgICAoY2hlY2tlZENoYW5nZSk9XCJjaGVja1VuY2hlY2tBbGwoKVwiXG4gICAgICAgICAgICBbaXNJbmRldGVybWluYXRlXT1cInRydWVcIlxuICAgICAgICAgICAgY2xhc3Nlcz1cImMtY2hlY2tib3hlcy0tc21cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdC0wLjUgbGVhZGluZy01XCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImJsb2NrIC1tdC0xIHRleHQtc20gbmctc3Rhci1pbnNlcnRlZFwiPlxuICAgICAgICAgICAgICAgIHt7IHNlbGVjdEFsbFBhZ2VzID8gJ1NlbGVjY2lvbmFyIHRvZG8nIDogJ1NlbGVjY2lvbmFyIHRvZG9zIGxvcyBpdGVtcyBkZSBlc3RhIHDDoWdpbmEnIH19XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rlc3ktY2hlY2tib3gtaXRlbT5cbiAgICAgICAgPC9kZXN5LWNoZWNrYm94ZXM+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8bmctY29udGVudFxuICAgICAgc2VsZWN0PVwiOm5vdChkZXN5LXRhYmxlLWFkdmFuY2VkLWhlYWRlcik6bm90KGRlc3ktdGFibGUtYWR2YW5jZWQtcm93KTpub3QoZGVzeS10YWJsZS1hZHZhbmNlZC1mb290ZXIpOm5vdChkZXN5LXRhYmxlLWNhcHRpb24pXCI+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbiAgPHRhYmxlXG4gICAgcm9sZT1cImdyaWRcIlxuICAgIFtjbGFzc109XCJbJ2MtdGFibGUtYWR2YW5jZWQgYm9yZGVyLXQtMiBib3JkZXItYi0yIGJvcmRlci1uZXV0cmFsLWJhc2UnLCBjbGFzc2VzXSB8IG1ha2VIdG1sTGlzdFwiXG4gICAgW2F0dHIuaWRdPVwiaWQgPyBpZCA6IG51bGxcIlxuICAgIFtkZXN5QXBwQWNjZXNzaWJpbGl0eV09XCJ0aGlzXCI+XG4gICAgPGNhcHRpb25cbiAgICAgICpuZ0lmPVwiY2FwdGlvbiB8fCBjYXB0aW9uQ29tcG9uZW50XCJcbiAgICAgIFtjbGFzc109XCJnZXRDYXB0aW9uQ2xhc3MoKVwiPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cInsgY29tcG9uZW50OiBjYXB0aW9uQ29tcG9uZW50LCB0ZXh0OiBjYXB0aW9uID8gY2FwdGlvbiA6IG51bGwgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvY2FwdGlvbj5cbiAgICA8dGhlYWQgKm5nSWY9XCJnZXRIZWFkZXJDZWxscygpXCI+XG4gICAgICA8dHIgY2xhc3M9XCJib3JkZXItdCBib3JkZXItbmV1dHJhbC1iYXNlIGRpdmlkZS14IGRpdmlkZS1uZXV0cmFsLWJhc2VcIj5cbiAgICAgICAgPHRoXG4gICAgICAgICAgKm5nSWY9XCJoYXNDaGVja2JveGVzXCJcbiAgICAgICAgICBzY29wZT1cImNvbFwiXG4gICAgICAgICAgW2NsYXNzXT1cIlsnYWxpZ24tdG9wIHB4LWJhc2UgcHkteHMnLCAndy0xNicsIGNoZWNrYm94Q2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5TZWxlY2Npb25hciBmaWxhPC9zcGFuPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGhcbiAgICAgICAgICBzY29wZT1cImNvbFwiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0SGVhZGVyQ2VsbHMoKTsgaW5kZXggYXMgaUhlYWRlclwiXG4gICAgICAgICAgW2lkXT1cImdldElkSGVhZGVyKGlIZWFkZXIpXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLXNvcnRdPVwiaXRlbS5vcmRlckJ5ID8gZ2V0U3RyaW5nT3JkZXJCeShpdGVtLm9yZGVyQnkpIDogbnVsbFwiXG4gICAgICAgICAgW2NsYXNzXT1cIlxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAnYWxpZ24tdG9wIHB4LWJhc2UgcHktc20gYm9yZGVyLW5ldXRyYWwtYmFzZSBib3JkZXItYi0wIHRleHQtbGVmdCB0ZXh0LXNtIGZvbnQtbm9ybWFsIHRleHQtbmV1dHJhbC1kYXJrJyxcbiAgICAgICAgICAgICAgaXRlbS5jbGFzc2VzLFxuICAgICAgICAgICAgXSB8IG1ha2VIdG1sTGlzdFxuICAgICAgICAgIFwiXG4gICAgICAgICAgW2F0dHIuY29sc3Bhbl09XCJpdGVtLmNvbHNwYW4gPyBpdGVtLmNvbHNwYW4gOiBudWxsXCJcbiAgICAgICAgICBbYXR0ci5yb3dzcGFuXT1cIml0ZW0ucm93c3BhbiA/IGl0ZW0ucm93c3BhbiA6IG51bGxcIlxuICAgICAgICAgIFtkZXN5QXBwQWNjZXNzaWJpbGl0eV09XCJpdGVtXCI+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5vcmRlckJ5XCJcbiAgICAgICAgICAgIGNsYXNzPVwiaW5saW5lLWJsb2NrIHJlbGF0aXZlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVTb3J0QnlDb2x1bW4oaUhlYWRlciwgJGV2ZW50KVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJoYW5kbGVTb3J0QnlDb2x1bW4oaUhlYWRlciwgJGV2ZW50KVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJoYW5kbGVTb3J0QnlDb2x1bW4oaUhlYWRlciwgJGV2ZW50KVwiXG4gICAgICAgICAgICBkZXN5Rm9jdXNDbGlja2VkQ2VsbFxuICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaXRlbS5vcmRlckJ5ID8gLTEgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLnJvbGVdPVwiaXRlbS5vcmRlckJ5ID8gJ2J1dHRvbicgOiBudWxsXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS50ZXh0XCI+e3sgaXRlbS50ZXh0IH19PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5jb250ZW50Q29tcG9uZW50XCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGNvbXBvbmVudDogaXRlbS5jb250ZW50Q29tcG9uZW50IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgY2xhc3M9XCJjLXRhYmxlLWFkdmFuY2VkX19vcmRlclwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5vcmRlckJ5XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPlB1bHNhIHBhcmEgb3JkZW5hciBwb3IgZXN0YSBjb2x1bW5hPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYy10YWJsZS1hZHZhbmNlZF9fYXNjZW5kaW5nXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0ub3JkZXJCeSA9PT0gb3JkZXJCeVR5cGUuYXNjXCI+XG4gICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE0MCAxNDBcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMWVtXCJcbiAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjFlbVwiPlxuICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0xMTIuMDcgMzcuOTNsLTM1LTM1YTEwIDEwIDAgMDAtMTQuMTQgMGwtMzUgMzVhMTAgMTAgMCAwMDE0LjE0IDE0LjE0bDEzLjY2LTEzLjY2QTIuNSAyLjUgMCAwMTYwIDQwLjE4VjEzMGExMCAxMCAwIDAwMjAgMFY0MC4xOGEyLjUgMi41IDAgMDE0LjI3LTEuNzdsMTMuNjYgMTMuNjZhMTAgMTAgMCAwMDE0LjE0LTE0LjE0elwiXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjLXRhYmxlLWFkdmFuY2VkX19kZXNjZW5kaW5nXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0ub3JkZXJCeSA9PT0gb3JkZXJCeVR5cGUuZGVzY1wiPlxuICAgICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNDAgMTQwXCJcbiAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICB3aWR0aD1cIjFlbVwiXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxZW1cIj5cbiAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMjcuOTMgMTAyLjA3bDM1IDM1YTEwIDEwIDAgMDAxNC4xNCAwbDM1LTM1YTEwIDEwIDAgMDAtMTQuMTQtMTQuMTRsLTEzLjY2IDEzLjY2QTIuNSAyLjUgMCAwMTgwIDk5LjgyVjEwYTEwIDEwIDAgMDAtMjAgMHY4OS44MmEyLjUgMi41IDAgMDEtNC4yNyAxLjc3TDQyLjA3IDg3LjkzYTEwIDEwIDAgMDAtMTQuMTQgMTQuMTR6XCJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cImMtdGFibGUtYWR2YW5jZWRfX25vbmVcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5vcmRlckJ5ID09PSBvcmRlckJ5VHlwZS5ub25lXCI+XG4gICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE0MCAxNDBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LW5ldXRyYWwtZGFya1wiXG4gICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxZW1cIlxuICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMWVtXCI+XG4gICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICBkPVwiTTk0LjcgOTcuMmwtMTcuMiAxNy4xOVYyNS42MUw5NC43IDQyLjhhNy41IDcuNSAwIDAwMTAuNi0xMC42bC0zMC0zMGE3LjQ5IDcuNDkgMCAwMC0xMC42IDBsLTMwIDMwYTcuNSA3LjUgMCAwMDEwLjYgMTAuNmwxNy4yLTE3LjE5djg4Ljc4TDQ1LjMgOTcuMmE3LjUgNy41IDAgMTAtMTAuNiAxMC42bDMwIDMwYTcuNDggNy40OCAwIDAwMTAuNiAwbDMwLTMwYTcuNSA3LjUgMCAwMC0xMC42LTEwLjZ6XCJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgKm5nSWY9XCIhaXRlbS5vcmRlckJ5XCJcbiAgICAgICAgICAgIGNsYXNzPVwiaW5saW5lLWJsb2NrIHJlbGF0aXZlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS50ZXh0XCI+e3sgaXRlbS50ZXh0IH19PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5jb250ZW50Q29tcG9uZW50XCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGNvbXBvbmVudDogaXRlbS5jb250ZW50Q29tcG9uZW50IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90aD5cbiAgICAgIDwvdHI+XG4gICAgPC90aGVhZD5cblxuICAgIDx0Ym9keT5cbiAgICAgIDx0clxuICAgICAgICBjbGFzcz1cImRpdmlkZS14IGRpdmlkZS1uZXV0cmFsLWJhc2VcIlxuICAgICAgICAqbmdJZj1cImhhc0ZpbHRlcnMoKVwiPlxuICAgICAgICA8dGRcbiAgICAgICAgICAqbmdJZj1cImhhc0NoZWNrYm94ZXNcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImNoZWNrYm94Q2xhc3Nlc1wiPjwvdGQ+XG4gICAgICAgIDx0ZFxuICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldEhlYWRlckNlbGxzKCk7IGluZGV4IGFzIGlIZWFkXCJcbiAgICAgICAgICBkZXN5Rm9jdXNDbGlja2VkQ2VsbFxuICAgICAgICAgIFtjbGFzc109XCJcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgJ2FsaWduLXRvcCBweC1iYXNlIHBiLXNtIGJvcmRlci1uZXV0cmFsLWJhc2UgYm9yZGVyLWItMCB0ZXh0LWxlZnQgdGV4dC1zbSBmb250LW5vcm1hbCB0ZXh0LW5ldXRyYWwtZGFyaycsXG4gICAgICAgICAgICAgIGl0ZW0uY2xhc3NlcyxcbiAgICAgICAgICAgIF0gfCBtYWtlSHRtbExpc3RcbiAgICAgICAgICBcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5oYXNTZWxlY3QgJiYgZ2V0U2VsZWN0Rm9ySXRlbShpdGVtKSAhPT0gbnVsbFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRhYmxlU2VsZWN0OyBjb250ZXh0OiB7IHNlbGVjdGFibGU6IGdldFNlbGVjdEZvckl0ZW0oaXRlbSkgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICN0YWJsZVNlbGVjdFxuICAgICAgICAgICAgICBsZXQtc2VsZWN0YWJsZT1cInNlbGVjdGFibGVcIj5cbiAgICAgICAgICAgICAgPGRlc3ktc2VsZWN0XG4gICAgICAgICAgICAgICAgW2lkXT1cImdldElkSGVhZGVyU2VsZWN0KGlIZWFkKVwiXG4gICAgICAgICAgICAgICAgW2xhYmVsRGF0YV09XCJ7IHRleHQ6ICdGaWx0cmFyIHBvciBlc3RhIGNvbHVtbmEnLCBjbGFzc2VzOiAnc3Itb25seScgfVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzZXNdPVwic2VsZWN0YWJsZS5jbGFzc2VzID8gc2VsZWN0YWJsZS5jbGFzc2VzIDogJ2Mtc2VsZWN0LS1zbSB3LWZ1bGwnXCJcbiAgICAgICAgICAgICAgICBbZm9ybUdyb3VwQ2xhc3Nlc109XCJzZWxlY3RhYmxlLmZvcm1Hcm91cENsYXNzZXMgPyBzZWxlY3RhYmxlLmZvcm1Hcm91cENsYXNzZXMgOiAnLW10LXNtIG1iLTAnXCJcbiAgICAgICAgICAgICAgICBbbmFtZV09XCJzZWxlY3RhYmxlLm5hbWVcIlxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJnZXRJdGVtU2VsZWN0T3B0aW9ucyhzZWxlY3RhYmxlKVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNlbGVjdGFibGUuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtkZXNjcmliZWRCeV09XCJnZXRJZEhlYWRlclNlbGVjdChpSGVhZClcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS52YWx1ZVNlbGVjdFwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXNlUGFnaW5hdGlvbiA/IGhhbmRsZUJ1dHRvblNlYXJjaChpdGVtKSA6IGhhbmRsZUlucHV0U2VhcmNoKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICBbcm9sZV09XCJzZWxlY3RhYmxlLnJvbGVcIlxuICAgICAgICAgICAgICAgIFthcmlhTGFiZWxdPVwic2VsZWN0YWJsZS5hcmlhTGFiZWxcIlxuICAgICAgICAgICAgICAgIFthcmlhRGVzY3JpYmVkQnldPVwic2VsZWN0YWJsZS5hcmlhRGVzY3JpYmVkQnlcIlxuICAgICAgICAgICAgICAgIFthcmlhTGFiZWxsZWRCeV09XCJzZWxlY3RhYmxlLmFyaWFMYWJlbGxlZEJ5XCJcbiAgICAgICAgICAgICAgICBbYXJpYUhpZGRlbl09XCJzZWxlY3RhYmxlLmFyaWFIaWRkZW5cIlxuICAgICAgICAgICAgICAgIFthcmlhRGlzYWJsZWRdPVwic2VsZWN0YWJsZS5hcmlhRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFthcmlhQ29udHJvbHNdPVwic2VsZWN0YWJsZS5hcmlhQ29udHJvbHNcIlxuICAgICAgICAgICAgICAgIFthcmlhQ3VycmVudF09XCJzZWxlY3RhYmxlLmFyaWFDdXJyZW50XCJcbiAgICAgICAgICAgICAgICBbYXJpYUxpdmVdPVwic2VsZWN0YWJsZS5hcmlhTGl2ZVwiXG4gICAgICAgICAgICAgICAgW2FyaWFFeHBhbmRlZF09XCJzZWxlY3RhYmxlLmFyaWFFeHBhbmRlZFwiXG4gICAgICAgICAgICAgICAgW2FyaWFFcnJvck1lc3NhZ2VdPVwic2VsZWN0YWJsZS5hcmlhRXJyb3JNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICBbYXJpYUhhc1BvcHVwXT1cInNlbGVjdGFibGUuYXJpYUhhc1BvcHVwXCJcbiAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwic2VsZWN0YWJsZS50YWJpbmRleFwiPjwvZGVzeS1zZWxlY3Q+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmhhc1NlbGVjdCAmJiBpdGVtLmhhc0ZpbHRlclwiXG4gICAgICAgICAgICBjbGFzcz1cInBiLXNtXCI+PC9kaXY+XG5cbiAgICAgICAgICA8ZGVzeS1zZWFyY2gtYmFyXG4gICAgICAgICAgICAqbmdJZj1cIml0ZW0uaGFzRmlsdGVyXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS52YWx1ZUZpbHRlclwiXG4gICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxuICAgICAgICAgICAgKGNsaWNrRXZlbnQpPVwidXNlUGFnaW5hdGlvbiA/IGhhbmRsZUJ1dHRvblNlYXJjaChpdGVtKSA6IG51bGxcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiIXVzZVBhZ2luYXRpb24gPyBoYW5kbGVJbnB1dFNlYXJjaChpdGVtKSA6IG51bGxcIlxuICAgICAgICAgICAgbGFiZWxUZXh0PVwiQnVzY2FyIGVuIGVzdGEgY29sdW1uYVwiXG4gICAgICAgICAgICBbaWRdPVwiZ2V0SWRIZWFkZXJGaWx0ZXIoaUhlYWQpXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQnVzY2FyXCJcbiAgICAgICAgICAgIFtjbGFzc2VzXT1cIlsnYy1pbnB1dC0tc20nLCBpdGVtLmZpbHRlckNsYXNzZXNdIHwgbWFrZUh0bWxMaXN0XCJcbiAgICAgICAgICAgIGJ1dHRvbkNsYXNzZXM9XCJtLXhzIHAtMC41IHRleHQteHNcIlxuICAgICAgICAgICAgW2Rlc2NyaWJlZEJ5XT1cImdldElkSGVhZGVyKGlIZWFkKVwiPjwvZGVzeS1zZWFyY2gtYmFyPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cblxuICAgICAgPHRyXG4gICAgICAgICpuZ0Zvcj1cImxldCByb3cgb2YgZ2V0VmlzaWJsZVJvd3MoKTsgaW5kZXggYXMgaVJvd1wiXG4gICAgICAgIGNsYXNzPVwiYm9yZGVyLXQgYm9yZGVyLWIgYm9yZGVyLW5ldXRyYWwtYmFzZSBob3ZlcjpiZy1uZXV0cmFsLWxpZ2h0ZXJcIlxuICAgICAgICBbZGVzeVJvd109XCJyb3dcIj5cbiAgICAgICAgPHRkXG4gICAgICAgICAgKm5nSWY9XCJoYXNDaGVja2JveGVzXCJcbiAgICAgICAgICBkZXN5Rm9jdXNDbGlja2VkQ2VsbFxuICAgICAgICAgIFtjbGFzc109XCJbJ3B4LWJhc2UgcHktc20nLCBjaGVja2JveENsYXNzZXNdIHwgbWFrZUh0bWxMaXN0XCJcbiAgICAgICAgICB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImMtY2hlY2tib3hlcyBjLWNoZWNrYm94ZXMtLXNtXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgZmxleCBpdGVtcy1zdGFydFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBteC1zbVwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy02IGgtNiB0cmFuc2l0aW9uIGR1cmF0aW9uLTE1MCBlYXNlLWluLW91dCBib3JkZXItYmxhY2sgZm9jdXM6Ym9yZGVyLWJsYWNrIGZvY3VzOnNoYWRvdy1vdXRsaW5lLWZvY3VzLWlucHV0IGZvY3VzOnJpbmctNCBmb2N1czpyaW5nLW9mZnNldC0wIGZvY3VzOnJpbmctd2FybmluZy1iYXNlIGRpc2FibGVkOmJnLW5ldXRyYWwtbGlnaHQgZGlzYWJsZWQ6Ym9yZGVyLW5ldXRyYWwtYmFzZSB0ZXh0LXByaW1hcnktYmFzZVwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93LmNoZWNrZWRcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJoYW5kbGVDaGVja2JveENoYW5nZShyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cImdldElkUm93Q2hlY2tib3goaVJvdylcIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJnZXRJZFJvd0NoZWNrYm94KGlSb3cpXCIgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHQtMC41IGxlYWRpbmctNVwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3Itb25seSBibG9jayB0ZXh0LXNtIC1tdC0xXCJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcl09XCJnZXRJZFJvd0NoZWNrYm94KGlSb3cpXCI+XG4gICAgICAgICAgICAgICAgICAgIFNlbGVjY2lvbmEgZmlsYSB7eyBpUm93IH19XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RkPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjZWxsIG9mIHJvdy5jZWxsc0xpc3Q7IGZpcnN0IGFzIGlzRmlyc3RDZWxsOyBpbmRleCBhcyBjb2x1bW5JbmRleFwiPlxuICAgICAgICAgIDx0aFxuICAgICAgICAgICAgKm5nSWY9XCJmaXJzdENlbGxJc0hlYWRlciAmJiBpc0ZpcnN0Q2VsbDsgZWxzZSBlbHNlVGRcIlxuICAgICAgICAgICAgc2NvcGU9XCJyb3dcIlxuICAgICAgICAgICAgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgJ3B4LWJhc2UgcHkteHMgYm9yZGVyLW5ldXRyYWwtYmFzZSBib3JkZXItYi0wIGJvcmRlci1yIHRleHQtbGVmdCBmb250LW5vcm1hbCB0ZXh0LXNtIHRleHQtbmV1dHJhbC1kYXJrJyxcbiAgICAgICAgICAgICAgICBjZWxsLmNsYXNzZXMsXG4gICAgICAgICAgICAgIF0gfCBtYWtlSHRtbExpc3RcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBkZXN5Q2VsbFxuICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgW3Jvd0luZGV4XT1cImlSb3dcIlxuICAgICAgICAgICAgW2NvbHVtbkluZGV4XT1cImNvbHVtbkluZGV4XCJcbiAgICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwiY2VsbC5jb2xzcGFuID8gY2VsbC5jb2xzcGFuIDogbnVsbFwiXG4gICAgICAgICAgICBbYXR0ci5yb3dzcGFuXT1cImNlbGwucm93c3BhbiA/IGNlbGwucm93c3BhbiA6IG51bGxcIlxuICAgICAgICAgICAgW2F0dHIuaWRdPVwiY2VsbC5pZCA/IGNlbGwuaWQgOiBudWxsXCJcbiAgICAgICAgICAgIFtkZXN5QXBwQWNjZXNzaWJpbGl0eV09XCJjZWxsXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IGNlbGwsIGh0bWw6IGNlbGwuaHRtbCwgdGV4dDogY2VsbC50ZXh0IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWxzZVRkPlxuICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICBkZXN5Rm9jdXNDbGlja2VkQ2VsbFxuICAgICAgICAgICAgICBbY2xhc3NdPVwiWydweC1iYXNlIHB5LXNtJywgY2VsbC5jbGFzc2VzXSB8IG1ha2VIdG1sTGlzdFwiXG4gICAgICAgICAgICAgIGRlc3lDZWxsXG4gICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgW3Jvd0luZGV4XT1cImlSb3dcIlxuICAgICAgICAgICAgICBbY29sdW1uSW5kZXhdPVwiY29sdW1uSW5kZXhcIlxuICAgICAgICAgICAgICBbYXR0ci5jb2xzcGFuXT1cImNlbGwuY29sc3BhbiA/IGNlbGwuY29sc3BhbiA6IG51bGxcIlxuICAgICAgICAgICAgICBbYXR0ci5yb3dzcGFuXT1cImNlbGwucm93c3BhbiA/IGNlbGwucm93c3BhbiA6IG51bGxcIlxuICAgICAgICAgICAgICBbYXR0ci5pZF09XCJjZWxsLmlkID8gY2VsbC5pZCA6IG51bGxcIlxuICAgICAgICAgICAgICBbZGVzeUFwcEFjY2Vzc2liaWxpdHldPVwiY2VsbFwiXG4gICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImNlbGwudGFiaW5kZXggPyBjZWxsLnRhYmluZGV4IDogLTFcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IGNlbGwsIGh0bWw6IGNlbGwuaHRtbCwgdGV4dDogY2VsbC50ZXh0IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L3RyPlxuICAgIDwvdGJvZHk+XG5cbiAgICA8dGZvb3QgKm5nSWY9XCJnZXRGb290ZXJDZWxscygpXCI+XG4gICAgICA8dHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGZvb3Qgb2YgZ2V0Rm9vdGVyQ2VsbHMoKTsgaW5kZXggYXMgaUZvb3RlclwiXG4gICAgICAgIGNsYXNzPVwiYm9yZGVyLXQtMiBib3JkZXItYiBib3JkZXItbmV1dHJhbC1iYXNlIGhvdmVyOmJnLW5ldXRyYWwtbGlnaHRlclwiPlxuICAgICAgICA8dGRcbiAgICAgICAgICAqbmdJZj1cImhhc0NoZWNrYm94ZXNcIlxuICAgICAgICAgIGRlc3lGb2N1c0NsaWNrZWRDZWxsXG4gICAgICAgICAgW2NsYXNzXT1cIlsncHgtYmFzZSBweS1zbScsIGNoZWNrYm94Q2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIlxuICAgICAgICAgIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYy1jaGVja2JveGVzIGMtY2hlY2tib3hlcy0tc21cIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBmbGV4IGl0ZW1zLXN0YXJ0XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIG14LXNtXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LTYgaC02IHRyYW5zaXRpb24gZHVyYXRpb24tMTUwIGVhc2UtaW4tb3V0IGJvcmRlci1ibGFjayBmb2N1czpib3JkZXItYmxhY2sgZm9jdXM6c2hhZG93LW91dGxpbmUtZm9jdXMtaW5wdXQgZm9jdXM6cmluZy00IGZvY3VzOnJpbmctb2Zmc2V0LTAgZm9jdXM6cmluZy13YXJuaW5nLWJhc2UgZGlzYWJsZWQ6YmctbmV1dHJhbC1saWdodCBkaXNhYmxlZDpib3JkZXItbmV1dHJhbC1iYXNlIHRleHQtcHJpbWFyeS1iYXNlXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmb290LmNoZWNrZWRcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJoYW5kbGVDaGVja2JveENoYW5nZShmb290KVwiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRJZFJvd0NoZWNrYm94KGlGb290ZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiZ2V0SWRSb3dDaGVja2JveChpRm9vdGVyKVwiIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB0LTAuNSBsZWFkaW5nLTVcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNyLW9ubHkgYmxvY2sgdGV4dC1zbSAtbXQtMVwiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiZ2V0SWRSb3dDaGVja2JveChpRm9vdGVyKVwiPlxuICAgICAgICAgICAgICAgICAgICBTZWxlY2Npb25hIGZpbGEge3sgaUZvb3RlciB9fVxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2VsbCBvZiBmb290LmNlbGxzTGlzdDsgZmlyc3QgYXMgaXNGaXJzdENlbGw7IGluZGV4IGFzIGNvbHVtbkluZGV4XCI+XG4gICAgICAgICAgPHRoXG4gICAgICAgICAgICAqbmdJZj1cImZpcnN0Q2VsbElzSGVhZGVyICYmIGlzRmlyc3RDZWxsOyBlbHNlIGVsc2VUZFwiXG4gICAgICAgICAgICBzY29wZT1cInJvd1wiXG4gICAgICAgICAgICBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAncHgtYmFzZSBweS14cyBib3JkZXItbmV1dHJhbC1iYXNlIGJvcmRlci1iLTAgYm9yZGVyLXIgdGV4dC1sZWZ0IGZvbnQtbm9ybWFsIHRleHQtc20gdGV4dC1uZXV0cmFsLWRhcmsnLFxuICAgICAgICAgICAgICAgIGNlbGwuY2xhc3NlcyxcbiAgICAgICAgICAgICAgXSB8IG1ha2VIdG1sTGlzdFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGRlc3lDZWxsXG4gICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICBbcm93SW5kZXhdPVwiaUZvb3RlclwiXG4gICAgICAgICAgICBbY29sdW1uSW5kZXhdPVwiY29sdW1uSW5kZXhcIlxuICAgICAgICAgICAgW2F0dHIuY29sc3Bhbl09XCJjZWxsLmNvbHNwYW4gPyBjZWxsLmNvbHNwYW4gOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLnJvd3NwYW5dPVwiY2VsbC5yb3dzcGFuID8gY2VsbC5yb3dzcGFuIDogbnVsbFwiXG4gICAgICAgICAgICBbYXR0ci5pZF09XCJjZWxsLmlkID8gY2VsbC5pZCA6IG51bGxcIlxuICAgICAgICAgICAgW2Rlc3lBcHBBY2Nlc3NpYmlsaXR5XT1cImNlbGxcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGNvbXBvbmVudDogY2VsbCwgaHRtbDogY2VsbC5odG1sLCB0ZXh0OiBjZWxsLnRleHQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNlbHNlVGQ+XG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgIGRlc3lGb2N1c0NsaWNrZWRDZWxsXG4gICAgICAgICAgICAgIFtjbGFzc109XCJbJ3B4LWJhc2UgcHktc20nLCBjZWxsLmNsYXNzZXNdIHwgbWFrZUh0bWxMaXN0XCJcbiAgICAgICAgICAgICAgZGVzeUNlbGxcbiAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICBbcm93SW5kZXhdPVwiaUZvb3RlclwiXG4gICAgICAgICAgICAgIFtjb2x1bW5JbmRleF09XCJjb2x1bW5JbmRleFwiXG4gICAgICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwiY2VsbC5jb2xzcGFuID8gY2VsbC5jb2xzcGFuIDogbnVsbFwiXG4gICAgICAgICAgICAgIFthdHRyLnJvd3NwYW5dPVwiY2VsbC5yb3dzcGFuID8gY2VsbC5yb3dzcGFuIDogbnVsbFwiXG4gICAgICAgICAgICAgIFthdHRyLmlkXT1cImNlbGwuaWQgPyBjZWxsLmlkIDogbnVsbFwiXG4gICAgICAgICAgICAgIFtkZXN5QXBwQWNjZXNzaWJpbGl0eV09XCJjZWxsXCJcbiAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiY2VsbC50YWJpbmRleCA/IGNlbGwudGFiaW5kZXggOiAtMVwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGNvbXBvbmVudDogY2VsbCwgaHRtbDogY2VsbC5odG1sLCB0ZXh0OiBjZWxsLnRleHQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvdHI+XG4gICAgPC90Zm9vdD5cbiAgPC90YWJsZT5cbjwvbmctdGVtcGxhdGU+XG5cbjxkaXZcbiAgKm5nSWY9XCJ3cmFwcGVyOyBlbHNlIHRhYmxlQ29udGVudFwiXG4gIFtjbGFzc109XCJ3cmFwcGVyLmNsYXNzZXNcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhYmxlQ29udGVudFwiPjwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=
|