@sbb-esta/lyne-elements 2.5.1 → 2.7.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/a11y.css +2 -2
- package/accordion/accordion.js +101 -0
- package/accordion.d.ts +3 -0
- package/accordion.d.ts.map +1 -1
- package/accordion.js +2 -99
- package/action-group/action-group.js +110 -0
- package/action-group.d.ts +3 -0
- package/action-group.d.ts.map +1 -1
- package/action-group.js +2 -108
- package/alert/alert/alert.js +176 -0
- package/alert/alert-group/alert-group.js +104 -0
- package/alert/alert-group.d.ts +3 -0
- package/alert/alert-group.d.ts.map +1 -1
- package/alert/alert-group.js +2 -102
- package/alert/alert.d.ts +3 -0
- package/alert/alert.d.ts.map +1 -1
- package/alert/alert.js +2 -174
- package/alert.d.ts +3 -0
- package/alert.d.ts.map +1 -1
- package/alert.js +6 -2
- package/autocomplete/autocomplete-base-element.d.ts +19 -20
- package/autocomplete/autocomplete-base-element.d.ts.map +1 -1
- package/autocomplete/autocomplete-base-element.js +262 -0
- package/autocomplete/autocomplete.js +70 -0
- package/autocomplete-grid/autocomplete-grid/autocomplete-grid.js +109 -0
- package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts.map +1 -1
- package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.js +63 -0
- package/autocomplete-grid/autocomplete-grid-button.d.ts +3 -0
- package/autocomplete-grid/autocomplete-grid-button.d.ts.map +1 -1
- package/autocomplete-grid/autocomplete-grid-button.js +2 -61
- package/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.js +26 -0
- package/autocomplete-grid/autocomplete-grid-cell.d.ts +3 -0
- package/autocomplete-grid/autocomplete-grid-cell.d.ts.map +1 -1
- package/autocomplete-grid/autocomplete-grid-cell.js +2 -24
- package/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts +2 -2
- package/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts.map +1 -1
- package/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.js +33 -0
- package/autocomplete-grid/autocomplete-grid-optgroup.d.ts +3 -0
- package/autocomplete-grid/autocomplete-grid-optgroup.d.ts.map +1 -1
- package/autocomplete-grid/autocomplete-grid-optgroup.js +2 -31
- package/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.js +49 -0
- package/autocomplete-grid/autocomplete-grid-option.d.ts +3 -0
- package/autocomplete-grid/autocomplete-grid-option.d.ts.map +1 -1
- package/autocomplete-grid/autocomplete-grid-option.js +3 -47
- package/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.js +29 -0
- package/autocomplete-grid/autocomplete-grid-row.d.ts +3 -0
- package/autocomplete-grid/autocomplete-grid-row.d.ts.map +1 -1
- package/autocomplete-grid/autocomplete-grid-row.js +2 -27
- package/autocomplete-grid/autocomplete-grid.d.ts +3 -0
- package/autocomplete-grid/autocomplete-grid.d.ts.map +1 -1
- package/autocomplete-grid/autocomplete-grid.js +2 -107
- package/autocomplete-grid.d.ts +3 -0
- package/autocomplete-grid.d.ts.map +1 -1
- package/autocomplete-grid.js +15 -6
- package/autocomplete.d.ts +3 -0
- package/autocomplete.d.ts.map +1 -1
- package/autocomplete.js +5 -312
- package/breadcrumb/breadcrumb/breadcrumb.js +52 -0
- package/breadcrumb/breadcrumb-group/breadcrumb-group.js +141 -0
- package/breadcrumb/breadcrumb-group.d.ts +3 -0
- package/breadcrumb/breadcrumb-group.d.ts.map +1 -1
- package/breadcrumb/breadcrumb-group.js +2 -139
- package/breadcrumb/breadcrumb.d.ts +3 -0
- package/breadcrumb/breadcrumb.d.ts.map +1 -1
- package/breadcrumb/breadcrumb.js +2 -50
- package/breadcrumb.d.ts +3 -0
- package/breadcrumb.d.ts.map +1 -1
- package/breadcrumb.js +6 -2
- package/button/accent-button/accent-button.js +17 -0
- package/button/accent-button-link/accent-button-link.js +17 -0
- package/button/accent-button-link.d.ts +3 -0
- package/button/accent-button-link.d.ts.map +1 -1
- package/button/accent-button-link.js +2 -15
- package/button/accent-button-static/accent-button-static.js +17 -0
- package/button/accent-button-static.d.ts +3 -0
- package/button/accent-button-static.d.ts.map +1 -1
- package/button/accent-button-static.js +2 -15
- package/button/accent-button.d.ts +3 -0
- package/button/accent-button.d.ts.map +1 -1
- package/button/accent-button.js +2 -15
- package/button/button/button.js +17 -0
- package/button/button-link/button-link.js +17 -0
- package/button/button-link.d.ts +3 -0
- package/button/button-link.d.ts.map +1 -1
- package/button/button-link.js +2 -15
- package/button/button-static/button-static.js +17 -0
- package/button/button-static.d.ts +3 -0
- package/button/button-static.d.ts.map +1 -1
- package/button/button-static.js +2 -15
- package/button/button.d.ts +3 -0
- package/button/button.d.ts.map +1 -1
- package/button/button.js +2 -15
- package/button/common/button-common.js +51 -0
- package/button/common.d.ts +3 -0
- package/button/common.d.ts.map +1 -1
- package/button/common.js +8 -55
- package/button/mini-button/mini-button.js +23 -0
- package/button/mini-button-group/mini-button-group.js +63 -0
- package/button/mini-button-group.d.ts +3 -0
- package/button/mini-button-group.d.ts.map +1 -1
- package/button/mini-button-group.js +2 -61
- package/button/mini-button.d.ts +3 -0
- package/button/mini-button.d.ts.map +1 -1
- package/button/mini-button.js +2 -21
- package/button/secondary-button/secondary-button.js +17 -0
- package/button/secondary-button-link/secondary-button-link.js +17 -0
- package/button/secondary-button-link.d.ts +3 -0
- package/button/secondary-button-link.d.ts.map +1 -1
- package/button/secondary-button-link.js +2 -15
- package/button/secondary-button-static/secondary-button-static.js +17 -0
- package/button/secondary-button-static.d.ts +3 -0
- package/button/secondary-button-static.d.ts.map +1 -1
- package/button/secondary-button-static.js +2 -15
- package/button/secondary-button.d.ts +3 -0
- package/button/secondary-button.d.ts.map +1 -1
- package/button/secondary-button.js +2 -15
- package/button/transparent-button/transparent-button.js +17 -0
- package/button/transparent-button-link/transparent-button-link.js +17 -0
- package/button/transparent-button-link.d.ts +3 -0
- package/button/transparent-button-link.d.ts.map +1 -1
- package/button/transparent-button-link.js +2 -15
- package/button/transparent-button-static/transparent-button-static.js +17 -0
- package/button/transparent-button-static.d.ts +3 -0
- package/button/transparent-button-static.d.ts.map +1 -1
- package/button/transparent-button-static.js +2 -15
- package/button/transparent-button.d.ts +3 -0
- package/button/transparent-button.d.ts.map +1 -1
- package/button/transparent-button.js +2 -15
- package/button.d.ts +3 -0
- package/button.d.ts.map +1 -1
- package/button.js +38 -15
- package/calendar/calendar.js +939 -0
- package/calendar.d.ts +3 -0
- package/calendar.d.ts.map +1 -1
- package/calendar.js +2 -937
- package/card/card/card.js +70 -0
- package/card/card-badge/card-badge.js +57 -0
- package/card/card-badge.d.ts +3 -0
- package/card/card-badge.d.ts.map +1 -1
- package/card/card-badge.js +2 -55
- package/card/card-button/card-button.js +19 -0
- package/card/card-button.d.ts +3 -0
- package/card/card-button.d.ts.map +1 -1
- package/card/card-button.js +2 -17
- package/card/card-link/card-link.js +19 -0
- package/card/card-link.d.ts +3 -0
- package/card/card-link.d.ts.map +1 -1
- package/card/card-link.js +2 -17
- package/card/card.d.ts +3 -0
- package/card/card.d.ts.map +1 -1
- package/card/card.js +2 -68
- package/card/common/card-action-common.js +60 -0
- package/card/common.d.ts +3 -0
- package/card/common.d.ts.map +1 -1
- package/card/common.js +2 -58
- package/card.d.ts +3 -0
- package/card.d.ts.map +1 -1
- package/card.js +12 -5
- package/checkbox/checkbox/checkbox.js +80 -0
- package/checkbox/checkbox-group/checkbox-group.js +113 -0
- package/checkbox/checkbox-group.d.ts +3 -0
- package/checkbox/checkbox-group.d.ts.map +1 -1
- package/checkbox/checkbox-group.js +2 -111
- package/checkbox/checkbox-panel/checkbox-panel.js +82 -0
- package/checkbox/checkbox-panel.d.ts +3 -0
- package/checkbox/checkbox-panel.d.ts.map +1 -1
- package/checkbox/checkbox-panel.js +2 -80
- package/checkbox/checkbox.d.ts +3 -0
- package/checkbox/checkbox.d.ts.map +1 -1
- package/checkbox/checkbox.js +2 -78
- package/checkbox/common/checkbox-common.js +56 -0
- package/checkbox/common.d.ts +3 -0
- package/checkbox/common.d.ts.map +1 -1
- package/checkbox/common.js +4 -56
- package/checkbox-common-CDzcyq8p.js +5 -0
- package/checkbox.d.ts +3 -0
- package/checkbox.d.ts.map +1 -1
- package/checkbox.js +12 -4
- package/chip/chip/chip.d.ts +32 -0
- package/chip/chip/chip.d.ts.map +1 -0
- package/chip/chip/chip.js +85 -0
- package/chip/chip-group/chip-group.d.ts +100 -0
- package/chip/chip-group/chip-group.d.ts.map +1 -0
- package/chip/chip-group/chip-group.js +226 -0
- package/chip/chip-group.d.ts +5 -0
- package/chip/chip-group.d.ts.map +1 -0
- package/chip/chip-group.js +4 -0
- package/chip/chip.d.ts +5 -0
- package/chip/chip.d.ts.map +1 -0
- package/chip/chip.js +4 -0
- package/chip-label/chip-label.js +54 -0
- package/chip-label.d.ts +3 -0
- package/chip-label.d.ts.map +1 -1
- package/chip-label.js +2 -52
- package/chip.d.ts +6 -0
- package/chip.d.ts.map +1 -0
- package/chip.js +6 -0
- package/clock/clock.d.ts.map +1 -1
- package/clock/clock.js +163 -0
- package/clock.d.ts +3 -0
- package/clock.d.ts.map +1 -1
- package/clock.js +2 -161
- package/container/container/container.js +71 -0
- package/container/container.d.ts +3 -0
- package/container/container.d.ts.map +1 -1
- package/container/container.js +2 -69
- package/container/sticky-bar/sticky-bar.js +111 -0
- package/container/sticky-bar.d.ts +3 -0
- package/container/sticky-bar.d.ts.map +1 -1
- package/container/sticky-bar.js +2 -109
- package/container.d.ts +3 -0
- package/container.d.ts.map +1 -1
- package/container.js +6 -2
- package/core/a11y/arrow-navigation.js +33 -0
- package/core/a11y/fake-event-detection.js +11 -0
- package/core/a11y/focus-trap-controller.d.ts +35 -0
- package/core/a11y/focus-trap-controller.d.ts.map +1 -0
- package/core/a11y/focus-trap-controller.js +95 -0
- package/core/a11y/focus-visible-within-controller.js +19 -0
- package/core/a11y/focus.d.ts +12 -0
- package/core/a11y/focus.d.ts.map +1 -1
- package/core/a11y/focus.js +75 -0
- package/core/a11y/input-modality-detector.d.ts +5 -0
- package/core/a11y/input-modality-detector.d.ts.map +1 -1
- package/core/a11y/input-modality-detector.js +59 -0
- package/core/a11y/interactivity-checker.d.ts +49 -3
- package/core/a11y/interactivity-checker.d.ts.map +1 -1
- package/core/a11y/interactivity-checker.js +104 -0
- package/core/a11y.d.ts +4 -0
- package/core/a11y.d.ts.map +1 -1
- package/core/a11y.js +26 -201
- package/core/base-elements/action-base-element.js +46 -0
- package/core/base-elements/button-base-element.d.ts.map +1 -1
- package/core/base-elements/button-base-element.js +120 -0
- package/core/base-elements/link-base-element.js +130 -0
- package/core/base-elements/open-close-base-element.js +33 -0
- package/core/base-elements.d.ts +3 -0
- package/core/base-elements.d.ts.map +1 -1
- package/core/base-elements.js +8 -308
- package/core/config/config.js +11 -0
- package/core/config.d.ts +3 -0
- package/core/config.d.ts.map +1 -1
- package/core/config.js +3 -9
- package/core/controllers/connected-abort-controller.js +19 -0
- package/core/controllers/escapable-overlay-controller.d.ts.map +1 -1
- package/core/controllers/escapable-overlay-controller.js +29 -0
- package/core/controllers/id-observer-controller.d.ts +21 -0
- package/core/controllers/id-observer-controller.d.ts.map +1 -0
- package/core/controllers/id-observer-controller.js +61 -0
- package/core/controllers/inert-controller.d.ts +3 -1
- package/core/controllers/inert-controller.d.ts.map +1 -1
- package/core/controllers/inert-controller.js +48 -0
- package/core/controllers/language-controller.js +39 -0
- package/core/controllers/media-matchers-controller.d.ts +1 -0
- package/core/controllers/media-matchers-controller.d.ts.map +1 -1
- package/core/controllers/media-matchers-controller.js +43 -0
- package/core/controllers/slot-state-controller.js +30 -0
- package/core/controllers.d.ts +5 -1
- package/core/controllers.d.ts.map +1 -1
- package/core/controllers.js +20 -193
- package/core/datetime/date-adapter.js +102 -0
- package/core/datetime/native-date-adapter.d.ts.map +1 -1
- package/core/datetime/native-date-adapter.js +169 -0
- package/core/datetime.d.ts +3 -0
- package/core/datetime.d.ts.map +1 -1
- package/core/datetime.js +12 -261
- package/core/decorators/base.js +1 -0
- package/core/decorators/date-converter.js +17 -0
- package/core/decorators/date-only-type.js +10 -0
- package/core/decorators/force-type.js +18 -0
- package/core/decorators/get-override.js +14 -0
- package/core/decorators/handle-distinct-change.js +16 -0
- package/core/decorators/host-attributes.js +18 -0
- package/core/decorators/omit-empty-converter.js +9 -0
- package/core/decorators/slot-state.js +8 -0
- package/core/decorators.d.ts +3 -0
- package/core/decorators.d.ts.map +1 -1
- package/core/decorators.js +16 -86
- package/core/dom/animation.js +10 -0
- package/core/dom/breakpoint.d.ts +1 -1
- package/core/dom/breakpoint.js +12 -0
- package/core/dom/find-referenced-element.d.ts +1 -0
- package/core/dom/find-referenced-element.d.ts.map +1 -1
- package/core/dom/find-referenced-element.js +7 -0
- package/core/dom/host-context.js +17 -0
- package/core/dom/input-element.d.ts +3 -1
- package/core/dom/input-element.d.ts.map +1 -1
- package/core/dom/input-element.js +12 -0
- package/core/dom/lean-context.js +7 -0
- package/core/dom/platform.js +21 -0
- package/core/dom/scroll.js +19 -0
- package/core/dom/set-or-remove-attribute.js +6 -0
- package/core/dom.d.ts +3 -0
- package/core/dom.d.ts.map +1 -1
- package/core/dom.js +31 -87
- package/core/eventing/composed-path-has-attribute.js +8 -0
- package/core/eventing/event-emitter.js +23 -0
- package/core/eventing/event-target.js +6 -0
- package/core/eventing/form-element-handlers.js +6 -0
- package/core/eventing/forward-event.js +9 -0
- package/core/eventing/is-event-prevented.js +6 -0
- package/core/eventing/throttle.js +11 -0
- package/core/eventing.d.ts +3 -0
- package/core/eventing.d.ts.map +1 -1
- package/core/eventing.js +15 -55
- package/core/i18n/i18n.d.ts +3 -0
- package/core/i18n/i18n.d.ts.map +1 -1
- package/core/i18n/i18n.js +700 -0
- package/core/i18n.d.ts +3 -0
- package/core/i18n.d.ts.map +1 -1
- package/core/i18n.js +89 -680
- package/core/images.js +15 -0
- package/core/interfaces.d.ts +3 -0
- package/core/interfaces.d.ts.map +1 -1
- package/core/mixins/animation-complete-mixin.js +43 -0
- package/core/mixins/constructor.js +1 -0
- package/core/mixins/disabled-mixin.js +72 -0
- package/core/mixins/form-associated-checkbox-mixin.js +92 -0
- package/core/mixins/form-associated-input-mixin.d.ts.map +1 -1
- package/core/mixins/form-associated-input-mixin.js +182 -0
- package/core/mixins/form-associated-mixin.js +219 -0
- package/core/mixins/form-associated-radio-button-mixin.js +159 -0
- package/core/mixins/hydration-mixin.js +39 -0
- package/core/mixins/named-slot-list-mixin.js +107 -0
- package/core/mixins/negative-mixin.js +34 -0
- package/core/mixins/panel-mixin.js +61 -0
- package/core/mixins/required-mixin.js +36 -0
- package/core/mixins/update-scheduler-mixin.js +22 -0
- package/core/mixins.d.ts +3 -0
- package/core/mixins.d.ts.map +1 -1
- package/core/mixins.js +29 -968
- package/core/overlay/overlay-option-panel.js +11 -0
- package/core/overlay/overlay-trigger-attributes.d.ts +1 -1
- package/core/overlay/overlay-trigger-attributes.d.ts.map +1 -1
- package/core/overlay/overlay-trigger-attributes.js +18 -0
- package/core/overlay/overlay.js +14 -0
- package/core/overlay/position.d.ts +1 -1
- package/core/overlay/position.d.ts.map +1 -1
- package/core/overlay/position.js +40 -0
- package/core/overlay.d.ts +3 -0
- package/core/overlay.d.ts.map +1 -1
- package/core/overlay.js +12 -73
- package/core/styles/core.scss +97 -24
- package/core/styles/image.scss +1 -1
- package/core/styles/mixins/a11y.scss +2 -1
- package/core/styles/mixins/buttons.scss +7 -6
- package/core/styles/mixins/link.scss +1 -2
- package/core/styles/mixins/table.scss +66 -26
- package/core/styles/table.scss +61 -0
- package/core/testing/event-spy.js +53 -0
- package/core/testing/mocha-extensions.js +11 -0
- package/core/testing/scroll.d.ts +1 -0
- package/core/testing/scroll.d.ts.map +1 -1
- package/core/testing/scroll.js +6 -0
- package/core/testing/wait-for-condition.js +13 -0
- package/core/testing/wait-for-image-ready.d.ts.map +1 -1
- package/core/testing/wait-for-image-ready.js +18 -0
- package/core/testing/wait-for-render.js +15 -0
- package/core/testing.d.ts +3 -0
- package/core/testing.d.ts.map +1 -1
- package/core/testing.js +14 -106
- package/core.css +93 -34
- package/custom-elements.json +55418 -50282
- package/date-input/date-input.d.ts.map +1 -1
- package/date-input/date-input.js +155 -0
- package/date-input.d.ts +3 -0
- package/date-input.d.ts.map +1 -1
- package/date-input.js +2 -153
- package/datepicker/common/datepicker-association-controllers.js +58 -0
- package/datepicker/common/datepicker-button.js +105 -0
- package/datepicker/common.d.ts +3 -0
- package/datepicker/common.d.ts.map +1 -1
- package/datepicker/common.js +5 -158
- package/datepicker/datepicker/datepicker.d.ts +4 -4
- package/datepicker/datepicker/datepicker.d.ts.map +1 -1
- package/datepicker/datepicker/datepicker.js +266 -0
- package/datepicker/datepicker-next-day/datepicker-next-day.js +27 -0
- package/datepicker/datepicker-next-day.d.ts +3 -0
- package/datepicker/datepicker-next-day.d.ts.map +1 -1
- package/datepicker/datepicker-next-day.js +2 -25
- package/datepicker/datepicker-previous-day/datepicker-previous-day.js +27 -0
- package/datepicker/datepicker-previous-day.d.ts +3 -0
- package/datepicker/datepicker-previous-day.d.ts.map +1 -1
- package/datepicker/datepicker-previous-day.js +2 -25
- package/datepicker/datepicker-toggle/datepicker-toggle.d.ts +0 -3
- package/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
- package/datepicker/datepicker-toggle/datepicker-toggle.js +171 -0
- package/datepicker/datepicker-toggle.d.ts +3 -0
- package/datepicker/datepicker-toggle.d.ts.map +1 -1
- package/datepicker/datepicker-toggle.js +2 -173
- package/datepicker/datepicker.d.ts +3 -0
- package/datepicker/datepicker.d.ts.map +1 -1
- package/datepicker/datepicker.js +4 -263
- package/datepicker.d.ts +3 -0
- package/datepicker.d.ts.map +1 -1
- package/datepicker.js +17 -5
- package/development/accordion/accordion.js +149 -0
- package/development/accordion.d.ts +3 -0
- package/development/accordion.d.ts.map +1 -1
- package/development/accordion.js +2 -146
- package/development/action-group/action-group.js +405 -0
- package/development/action-group.d.ts +3 -0
- package/development/action-group.d.ts.map +1 -1
- package/development/action-group.js +2 -402
- package/development/alert/alert/alert.js +434 -0
- package/development/alert/alert-group/alert-group.js +183 -0
- package/development/alert/alert-group.d.ts +3 -0
- package/development/alert/alert-group.d.ts.map +1 -1
- package/development/alert/alert-group.js +2 -180
- package/development/alert/alert.d.ts +3 -0
- package/development/alert/alert.d.ts.map +1 -1
- package/development/alert/alert.js +2 -431
- package/development/alert.d.ts +3 -0
- package/development/alert.d.ts.map +1 -1
- package/development/alert.js +6 -2
- package/development/autocomplete/autocomplete-base-element.d.ts +19 -20
- package/development/autocomplete/autocomplete-base-element.d.ts.map +1 -1
- package/development/autocomplete/autocomplete-base-element.js +700 -0
- package/development/autocomplete/autocomplete.js +99 -0
- package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.js +157 -0
- package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.js +208 -0
- package/development/autocomplete-grid/autocomplete-grid-button.d.ts +3 -0
- package/development/autocomplete-grid/autocomplete-grid-button.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid-button.js +2 -202
- package/development/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.js +47 -0
- package/development/autocomplete-grid/autocomplete-grid-cell.d.ts +3 -0
- package/development/autocomplete-grid/autocomplete-grid-cell.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid-cell.js +2 -44
- package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts +2 -2
- package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.js +44 -0
- package/development/autocomplete-grid/autocomplete-grid-optgroup.d.ts +3 -0
- package/development/autocomplete-grid/autocomplete-grid-optgroup.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid-optgroup.js +2 -41
- package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.js +139 -0
- package/development/autocomplete-grid/autocomplete-grid-option.d.ts +3 -0
- package/development/autocomplete-grid/autocomplete-grid-option.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid-option.js +2 -134
- package/development/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.js +123 -0
- package/development/autocomplete-grid/autocomplete-grid-row.d.ts +3 -0
- package/development/autocomplete-grid/autocomplete-grid-row.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid-row.js +2 -120
- package/development/autocomplete-grid/autocomplete-grid.d.ts +3 -0
- package/development/autocomplete-grid/autocomplete-grid.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid.js +2 -154
- package/development/autocomplete-grid.d.ts +3 -0
- package/development/autocomplete-grid.d.ts.map +1 -1
- package/development/autocomplete-grid.js +15 -6
- package/development/autocomplete.d.ts +3 -0
- package/development/autocomplete.d.ts.map +1 -1
- package/development/autocomplete.js +5 -763
- package/development/breadcrumb/breadcrumb/breadcrumb.js +136 -0
- package/development/breadcrumb/breadcrumb-group/breadcrumb-group.js +281 -0
- package/development/breadcrumb/breadcrumb-group.d.ts +3 -0
- package/development/breadcrumb/breadcrumb-group.d.ts.map +1 -1
- package/development/breadcrumb/breadcrumb-group.js +2 -278
- package/development/breadcrumb/breadcrumb.d.ts +3 -0
- package/development/breadcrumb/breadcrumb.d.ts.map +1 -1
- package/development/breadcrumb/breadcrumb.js +2 -133
- package/development/breadcrumb.d.ts +3 -0
- package/development/breadcrumb.d.ts.map +1 -1
- package/development/breadcrumb.js +6 -2
- package/development/button/accent-button/accent-button.js +25 -0
- package/development/button/accent-button-link/accent-button-link.js +25 -0
- package/development/button/accent-button-link.d.ts +3 -0
- package/development/button/accent-button-link.d.ts.map +1 -1
- package/development/button/accent-button-link.js +2 -22
- package/development/button/accent-button-static/accent-button-static.js +25 -0
- package/development/button/accent-button-static.d.ts +3 -0
- package/development/button/accent-button-static.d.ts.map +1 -1
- package/development/button/accent-button-static.js +2 -22
- package/development/button/accent-button.d.ts +3 -0
- package/development/button/accent-button.d.ts.map +1 -1
- package/development/button/accent-button.js +2 -22
- package/development/button/button/button.js +25 -0
- package/development/button/button-link/button-link.js +25 -0
- package/development/button/button-link.d.ts +3 -0
- package/development/button/button-link.d.ts.map +1 -1
- package/development/button/button-link.js +2 -22
- package/development/button/button-static/button-static.js +25 -0
- package/development/button/button-static.d.ts +3 -0
- package/development/button/button-static.d.ts.map +1 -1
- package/development/button/button-static.js +2 -22
- package/development/button/button.d.ts +3 -0
- package/development/button/button.d.ts.map +1 -1
- package/development/button/button.js +2 -22
- package/development/button/common/button-common.js +70 -0
- package/development/button/common.d.ts +3 -0
- package/development/button/common.d.ts.map +1 -1
- package/development/button/common.js +8 -407
- package/development/button/mini-button/mini-button.js +143 -0
- package/development/button/mini-button-group/mini-button-group.js +153 -0
- package/development/button/mini-button-group.d.ts +3 -0
- package/development/button/mini-button-group.d.ts.map +1 -1
- package/development/button/mini-button-group.js +2 -150
- package/development/button/mini-button.d.ts +3 -0
- package/development/button/mini-button.d.ts.map +1 -1
- package/development/button/mini-button.js +2 -137
- package/development/button/secondary-button/secondary-button.js +25 -0
- package/development/button/secondary-button-link/secondary-button-link.js +25 -0
- package/development/button/secondary-button-link.d.ts +3 -0
- package/development/button/secondary-button-link.d.ts.map +1 -1
- package/development/button/secondary-button-link.js +2 -22
- package/development/button/secondary-button-static/secondary-button-static.js +25 -0
- package/development/button/secondary-button-static.d.ts +3 -0
- package/development/button/secondary-button-static.d.ts.map +1 -1
- package/development/button/secondary-button-static.js +2 -22
- package/development/button/secondary-button.d.ts +3 -0
- package/development/button/secondary-button.d.ts.map +1 -1
- package/development/button/secondary-button.js +2 -22
- package/development/button/transparent-button/transparent-button.js +25 -0
- package/development/button/transparent-button-link/transparent-button-link.js +25 -0
- package/development/button/transparent-button-link.d.ts +3 -0
- package/development/button/transparent-button-link.d.ts.map +1 -1
- package/development/button/transparent-button-link.js +2 -22
- package/development/button/transparent-button-static/transparent-button-static.js +25 -0
- package/development/button/transparent-button-static.d.ts +3 -0
- package/development/button/transparent-button-static.d.ts.map +1 -1
- package/development/button/transparent-button-static.js +2 -22
- package/development/button/transparent-button.d.ts +3 -0
- package/development/button/transparent-button.d.ts.map +1 -1
- package/development/button/transparent-button.js +2 -22
- package/development/button.d.ts +3 -0
- package/development/button.d.ts.map +1 -1
- package/development/button.js +39 -16
- package/development/calendar/calendar.js +1547 -0
- package/development/calendar.d.ts +3 -0
- package/development/calendar.d.ts.map +1 -1
- package/development/calendar.js +2 -1542
- package/development/card/card/card.js +287 -0
- package/development/card/card-badge/card-badge.js +169 -0
- package/development/card/card-badge.d.ts +3 -0
- package/development/card/card-badge.d.ts.map +1 -1
- package/development/card/card-badge.js +2 -166
- package/development/card/card-button/card-button.js +29 -0
- package/development/card/card-button.d.ts +3 -0
- package/development/card/card-button.d.ts.map +1 -1
- package/development/card/card-button.js +2 -26
- package/development/card/card-link/card-link.js +29 -0
- package/development/card/card-link.d.ts +3 -0
- package/development/card/card-link.d.ts.map +1 -1
- package/development/card/card-link.js +2 -26
- package/development/card/card.d.ts +3 -0
- package/development/card/card.d.ts.map +1 -1
- package/development/card/card.js +2 -284
- package/development/card/common/card-action-common.js +119 -0
- package/development/card/common.d.ts +3 -0
- package/development/card/common.d.ts.map +1 -1
- package/development/card/common.js +2 -116
- package/development/card.d.ts +3 -0
- package/development/card.d.ts.map +1 -1
- package/development/card.js +12 -5
- package/development/checkbox/checkbox/checkbox.js +134 -0
- package/development/checkbox/checkbox-group/checkbox-group.js +294 -0
- package/development/checkbox/checkbox-group.d.ts +3 -0
- package/development/checkbox/checkbox-group.d.ts.map +1 -1
- package/development/checkbox/checkbox-group.js +2 -291
- package/development/checkbox/checkbox-panel/checkbox-panel.js +108 -0
- package/development/checkbox/checkbox-panel.d.ts +3 -0
- package/development/checkbox/checkbox-panel.d.ts.map +1 -1
- package/development/checkbox/checkbox-panel.js +2 -105
- package/development/checkbox/checkbox.d.ts +3 -0
- package/development/checkbox/checkbox.d.ts.map +1 -1
- package/development/checkbox/checkbox.js +2 -131
- package/development/checkbox/common/checkbox-common.js +75 -0
- package/development/checkbox/common.d.ts +3 -0
- package/development/checkbox/common.d.ts.map +1 -1
- package/development/checkbox/common.js +4 -152
- package/development/checkbox-common-aMPOsPVA.js +83 -0
- package/development/checkbox.d.ts +3 -0
- package/development/checkbox.d.ts.map +1 -1
- package/development/checkbox.js +13 -5
- package/development/chip/chip/chip.d.ts +32 -0
- package/development/chip/chip/chip.d.ts.map +1 -0
- package/development/chip/chip/chip.js +213 -0
- package/development/chip/chip-group/chip-group.d.ts +100 -0
- package/development/chip/chip-group/chip-group.d.ts.map +1 -0
- package/development/chip/chip-group/chip-group.js +350 -0
- package/development/chip/chip-group.d.ts +5 -0
- package/development/chip/chip-group.d.ts.map +1 -0
- package/development/chip/chip-group.js +5 -0
- package/development/chip/chip.d.ts +5 -0
- package/development/chip/chip.d.ts.map +1 -0
- package/development/chip/chip.js +5 -0
- package/development/chip-label/chip-label.js +154 -0
- package/development/chip-label.d.ts +3 -0
- package/development/chip-label.d.ts.map +1 -1
- package/development/chip-label.js +2 -151
- package/development/chip.d.ts +6 -0
- package/development/chip.d.ts.map +1 -0
- package/development/chip.js +7 -0
- package/development/clock/clock.d.ts.map +1 -1
- package/development/clock/clock.js +390 -0
- package/development/clock.d.ts +3 -0
- package/development/clock.d.ts.map +1 -1
- package/development/clock.js +2 -384
- package/development/container/container/container.js +194 -0
- package/development/container/container.d.ts +3 -0
- package/development/container/container.d.ts.map +1 -1
- package/development/container/container.js +2 -191
- package/development/container/sticky-bar/sticky-bar.js +349 -0
- package/development/container/sticky-bar.d.ts +3 -0
- package/development/container/sticky-bar.d.ts.map +1 -1
- package/development/container/sticky-bar.js +2 -346
- package/development/container.d.ts +3 -0
- package/development/container.d.ts.map +1 -1
- package/development/container.js +6 -2
- package/development/core/a11y/arrow-navigation.js +43 -0
- package/development/core/a11y/fake-event-detection.js +12 -0
- package/development/core/a11y/focus-trap-controller.d.ts +35 -0
- package/development/core/a11y/focus-trap-controller.d.ts.map +1 -0
- package/development/core/a11y/focus-trap-controller.js +127 -0
- package/development/core/a11y/focus-visible-within-controller.js +25 -0
- package/development/core/a11y/focus.d.ts +12 -0
- package/development/core/a11y/focus.d.ts.map +1 -1
- package/development/core/a11y/focus.js +94 -0
- package/development/core/a11y/input-modality-detector.d.ts +5 -0
- package/development/core/a11y/input-modality-detector.d.ts.map +1 -1
- package/development/core/a11y/input-modality-detector.js +96 -0
- package/development/core/a11y/interactivity-checker.d.ts +49 -3
- package/development/core/a11y/interactivity-checker.d.ts.map +1 -1
- package/development/core/a11y/interactivity-checker.js +137 -0
- package/development/core/a11y.d.ts +4 -0
- package/development/core/a11y.d.ts.map +1 -1
- package/development/core/a11y.js +10 -253
- package/development/core/base-elements/action-base-element.js +62 -0
- package/development/core/base-elements/button-base-element.d.ts.map +1 -1
- package/development/core/base-elements/button-base-element.js +179 -0
- package/development/core/base-elements/link-base-element.js +183 -0
- package/development/core/base-elements/open-close-base-element.js +39 -0
- package/development/core/base-elements.d.ts +3 -0
- package/development/core/base-elements.d.ts.map +1 -1
- package/development/core/base-elements.js +5 -437
- package/development/core/config/config.js +15 -0
- package/development/core/config.d.ts +3 -0
- package/development/core/config.d.ts.map +1 -1
- package/development/core/config.js +2 -11
- package/development/core/controllers/connected-abort-controller.js +25 -0
- package/development/core/controllers/escapable-overlay-controller.d.ts.map +1 -1
- package/development/core/controllers/escapable-overlay-controller.js +40 -0
- package/development/core/controllers/id-observer-controller.d.ts +21 -0
- package/development/core/controllers/id-observer-controller.d.ts.map +1 -0
- package/development/core/controllers/id-observer-controller.js +84 -0
- package/development/core/controllers/inert-controller.d.ts +3 -1
- package/development/core/controllers/inert-controller.d.ts.map +1 -1
- package/development/core/controllers/inert-controller.js +91 -0
- package/development/core/controllers/language-controller.js +69 -0
- package/development/core/controllers/media-matchers-controller.d.ts +1 -0
- package/development/core/controllers/media-matchers-controller.d.ts.map +1 -1
- package/development/core/controllers/media-matchers-controller.js +62 -0
- package/development/core/controllers/slot-state-controller.js +48 -0
- package/development/core/controllers.d.ts +5 -1
- package/development/core/controllers.d.ts.map +1 -1
- package/development/core/controllers.js +10 -305
- package/development/core/datetime/date-adapter.js +129 -0
- package/development/core/datetime/native-date-adapter.d.ts.map +1 -1
- package/development/core/datetime/native-date-adapter.js +185 -0
- package/development/core/datetime.d.ts +3 -0
- package/development/core/datetime.d.ts.map +1 -1
- package/development/core/datetime.js +3 -294
- package/development/core/decorators/base.js +2 -0
- package/development/core/decorators/date-converter.js +18 -0
- package/development/core/decorators/date-only-type.js +11 -0
- package/development/core/decorators/force-type.js +29 -0
- package/development/core/decorators/get-override.js +18 -0
- package/development/core/decorators/handle-distinct-change.js +22 -0
- package/development/core/decorators/host-attributes.js +30 -0
- package/development/core/decorators/omit-empty-converter.js +10 -0
- package/development/core/decorators/slot-state.js +11 -0
- package/development/core/decorators.d.ts +3 -0
- package/development/core/decorators.d.ts.map +1 -1
- package/development/core/decorators.js +9 -114
- package/development/core/dom/animation.js +12 -0
- package/development/core/dom/breakpoint.d.ts +1 -1
- package/development/core/dom/breakpoint.js +19 -0
- package/development/core/dom/find-referenced-element.d.ts +1 -0
- package/development/core/dom/find-referenced-element.d.ts.map +1 -1
- package/development/core/dom/find-referenced-element.js +15 -0
- package/development/core/dom/host-context.js +21 -0
- package/development/core/dom/input-element.d.ts +3 -1
- package/development/core/dom/input-element.d.ts.map +1 -1
- package/development/core/dom/input-element.js +13 -0
- package/development/core/dom/lean-context.js +8 -0
- package/development/core/dom/platform.js +32 -0
- package/development/core/dom/scroll.js +37 -0
- package/development/core/dom/set-or-remove-attribute.js +11 -0
- package/development/core/dom.d.ts +3 -0
- package/development/core/dom.d.ts.map +1 -1
- package/development/core/dom.js +10 -114
- package/development/core/eventing/composed-path-has-attribute.js +12 -0
- package/development/core/eventing/event-emitter.js +26 -0
- package/development/core/eventing/event-target.js +7 -0
- package/development/core/eventing/form-element-handlers.js +9 -0
- package/development/core/eventing/forward-event.js +11 -0
- package/development/core/eventing/is-event-prevented.js +8 -0
- package/development/core/eventing/throttle.js +18 -0
- package/development/core/eventing.d.ts +3 -0
- package/development/core/eventing.d.ts.map +1 -1
- package/development/core/eventing.js +8 -63
- package/development/core/i18n/i18n.d.ts +3 -0
- package/development/core/i18n/i18n.d.ts.map +1 -1
- package/development/core/i18n/i18n.js +793 -0
- package/development/core/i18n.d.ts +3 -0
- package/development/core/i18n.d.ts.map +1 -1
- package/development/core/i18n.js +5 -685
- package/development/core/images.js +16 -0
- package/development/core/interfaces.d.ts +3 -0
- package/development/core/interfaces.d.ts.map +1 -1
- package/development/core/mixins/animation-complete-mixin.js +52 -0
- package/development/core/mixins/constructor.js +2 -0
- package/development/core/mixins/disabled-mixin.js +104 -0
- package/development/core/mixins/form-associated-checkbox-mixin.js +148 -0
- package/development/core/mixins/form-associated-input-mixin.d.ts.map +1 -1
- package/development/core/mixins/form-associated-input-mixin.js +294 -0
- package/development/core/mixins/form-associated-mixin.js +268 -0
- package/development/core/mixins/form-associated-radio-button-mixin.js +242 -0
- package/development/core/mixins/hydration-mixin.js +57 -0
- package/development/core/mixins/named-slot-list-mixin.js +136 -0
- package/development/core/mixins/negative-mixin.js +45 -0
- package/development/core/mixins/panel-mixin.js +87 -0
- package/development/core/mixins/required-mixin.js +48 -0
- package/development/core/mixins/update-scheduler-mixin.js +26 -0
- package/development/core/mixins.d.ts +3 -0
- package/development/core/mixins.d.ts.map +1 -1
- package/development/core/mixins.js +15 -1383
- package/development/core/overlay/overlay-option-panel.js +18 -0
- package/development/core/overlay/overlay-trigger-attributes.d.ts +1 -1
- package/development/core/overlay/overlay-trigger-attributes.d.ts.map +1 -1
- package/development/core/overlay/overlay-trigger-attributes.js +47 -0
- package/development/core/overlay/overlay.js +15 -0
- package/development/core/overlay/position.d.ts +1 -1
- package/development/core/overlay/position.d.ts.map +1 -1
- package/development/core/overlay/position.js +84 -0
- package/development/core/overlay.d.ts +3 -0
- package/development/core/overlay.d.ts.map +1 -1
- package/development/core/overlay.js +5 -143
- package/development/core/testing/event-spy.js +70 -0
- package/development/core/testing/mocha-extensions.js +15 -0
- package/development/core/testing/scroll.d.ts +1 -0
- package/development/core/testing/scroll.d.ts.map +1 -1
- package/development/core/testing/scroll.js +8 -0
- package/development/core/testing/wait-for-condition.js +19 -0
- package/development/core/testing/wait-for-image-ready.d.ts.map +1 -1
- package/development/core/testing/wait-for-image-ready.js +31 -0
- package/development/core/testing/wait-for-render.js +21 -0
- package/development/core/testing.d.ts +3 -0
- package/development/core/testing.d.ts.map +1 -1
- package/development/core/testing.js +7 -141
- package/development/date-input/date-input.d.ts.map +1 -1
- package/development/date-input/date-input.js +270 -0
- package/development/date-input.d.ts +3 -0
- package/development/date-input.d.ts.map +1 -1
- package/development/date-input.js +2 -264
- package/development/datepicker/common/datepicker-association-controllers.js +82 -0
- package/development/datepicker/common/datepicker-button.js +155 -0
- package/development/datepicker/common.d.ts +3 -0
- package/development/datepicker/common.d.ts.map +1 -1
- package/development/datepicker/common.js +3 -228
- package/development/datepicker/datepicker/datepicker.d.ts +4 -4
- package/development/datepicker/datepicker/datepicker.d.ts.map +1 -1
- package/development/datepicker/datepicker/datepicker.js +427 -0
- package/development/datepicker/datepicker-next-day/datepicker-next-day.js +150 -0
- package/development/datepicker/datepicker-next-day.d.ts +3 -0
- package/development/datepicker/datepicker-next-day.d.ts.map +1 -1
- package/development/datepicker/datepicker-next-day.js +2 -144
- package/development/datepicker/datepicker-previous-day/datepicker-previous-day.js +150 -0
- package/development/datepicker/datepicker-previous-day.d.ts +3 -0
- package/development/datepicker/datepicker-previous-day.d.ts.map +1 -1
- package/development/datepicker/datepicker-previous-day.js +2 -144
- package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts +0 -3
- package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
- package/development/datepicker/datepicker-toggle/datepicker-toggle.js +299 -0
- package/development/datepicker/datepicker-toggle.d.ts +3 -0
- package/development/datepicker/datepicker-toggle.d.ts.map +1 -1
- package/development/datepicker/datepicker-toggle.js +2 -304
- package/development/datepicker/datepicker.d.ts +3 -0
- package/development/datepicker/datepicker.d.ts.map +1 -1
- package/development/datepicker/datepicker.js +2 -415
- package/development/datepicker.d.ts +3 -0
- package/development/datepicker.d.ts.map +1 -1
- package/development/datepicker.js +18 -6
- package/development/dialog/dialog/dialog.d.ts +0 -1
- package/development/dialog/dialog/dialog.d.ts.map +1 -1
- package/development/dialog/dialog/dialog.js +460 -0
- package/development/dialog/dialog-actions/dialog-actions.js +52 -0
- package/development/dialog/dialog-actions.d.ts +3 -0
- package/development/dialog/dialog-actions.d.ts.map +1 -1
- package/development/dialog/dialog-actions.js +2 -49
- package/development/dialog/dialog-content/dialog-content.js +78 -0
- package/development/dialog/dialog-content.d.ts +3 -0
- package/development/dialog/dialog-content.d.ts.map +1 -1
- package/development/dialog/dialog-content.js +2 -75
- package/development/dialog/dialog-title/dialog-title.d.ts +0 -1
- package/development/dialog/dialog-title/dialog-title.d.ts.map +1 -1
- package/development/dialog/dialog-title/dialog-title.js +211 -0
- package/development/dialog/dialog-title.d.ts +3 -0
- package/development/dialog/dialog-title.d.ts.map +1 -1
- package/development/dialog/dialog-title.js +2 -211
- package/development/dialog/dialog.d.ts +3 -0
- package/development/dialog/dialog.d.ts.map +1 -1
- package/development/dialog/dialog.js +2 -465
- package/development/dialog.d.ts +3 -0
- package/development/dialog.d.ts.map +1 -1
- package/development/dialog.js +10 -4
- package/development/divider/divider.js +89 -0
- package/development/divider.d.ts +3 -0
- package/development/divider.d.ts.map +1 -1
- package/development/divider.js +2 -86
- package/development/expansion-panel/expansion-panel/expansion-panel.d.ts +0 -2
- package/development/expansion-panel/expansion-panel/expansion-panel.d.ts.map +1 -1
- package/development/expansion-panel/expansion-panel/expansion-panel.js +434 -0
- package/development/expansion-panel/expansion-panel-content/expansion-panel-content.js +69 -0
- package/development/expansion-panel/expansion-panel-content.d.ts +3 -0
- package/development/expansion-panel/expansion-panel-content.d.ts.map +1 -1
- package/development/expansion-panel/expansion-panel-content.js +2 -66
- package/development/expansion-panel/expansion-panel-header/expansion-panel-header.js +173 -0
- package/development/expansion-panel/expansion-panel-header.d.ts +3 -0
- package/development/expansion-panel/expansion-panel-header.d.ts.map +1 -1
- package/development/expansion-panel/expansion-panel-header.js +2 -170
- package/development/expansion-panel/expansion-panel.d.ts +3 -0
- package/development/expansion-panel/expansion-panel.d.ts.map +1 -1
- package/development/expansion-panel/expansion-panel.js +2 -436
- package/development/expansion-panel.d.ts +3 -0
- package/development/expansion-panel.d.ts.map +1 -1
- package/development/expansion-panel.js +8 -3
- package/development/file-selector/common/file-selector-common.d.ts.map +1 -1
- package/development/file-selector/common/file-selector-common.js +279 -0
- package/development/file-selector/common.d.ts +3 -0
- package/development/file-selector/common.d.ts.map +1 -1
- package/development/file-selector/common.js +4 -379
- package/development/file-selector/file-selector/file-selector.js +52 -0
- package/development/file-selector/file-selector-dropzone/file-selector-dropzone.js +181 -0
- package/development/file-selector/file-selector-dropzone.d.ts +3 -0
- package/development/file-selector/file-selector-dropzone.d.ts.map +1 -1
- package/development/file-selector/file-selector-dropzone.js +2 -178
- package/development/file-selector/file-selector.d.ts +3 -0
- package/development/file-selector/file-selector.d.ts.map +1 -1
- package/development/file-selector/file-selector.js +2 -49
- package/development/file-selector-common-csww18o8.js +105 -0
- package/development/file-selector.d.ts +3 -0
- package/development/file-selector.d.ts.map +1 -1
- package/development/file-selector.js +11 -4
- package/development/flip-card/flip-card/flip-card.js +320 -0
- package/development/flip-card/flip-card-details/flip-card-details.d.ts.map +1 -1
- package/development/flip-card/flip-card-details/flip-card-details.js +92 -0
- package/development/flip-card/flip-card-details.d.ts +3 -0
- package/development/flip-card/flip-card-details.d.ts.map +1 -1
- package/development/flip-card/flip-card-details.js +2 -89
- package/development/flip-card/flip-card-summary/flip-card-summary.js +148 -0
- package/development/flip-card/flip-card-summary.d.ts +3 -0
- package/development/flip-card/flip-card-summary.d.ts.map +1 -1
- package/development/flip-card/flip-card-summary.js +2 -145
- package/development/flip-card/flip-card.d.ts +3 -0
- package/development/flip-card/flip-card.d.ts.map +1 -1
- package/development/flip-card/flip-card.js +2 -317
- package/development/flip-card.d.ts +3 -0
- package/development/flip-card.d.ts.map +1 -1
- package/development/flip-card.js +8 -3
- package/development/footer/footer.js +276 -0
- package/development/footer.d.ts +3 -0
- package/development/footer.d.ts.map +1 -1
- package/development/footer.js +2 -273
- package/development/form-error/form-error.js +107 -0
- package/development/form-error.d.ts +3 -0
- package/development/form-error.d.ts.map +1 -1
- package/development/form-error.js +2 -104
- package/development/form-field/form-field/form-field.d.ts.map +1 -1
- package/development/form-field/form-field/form-field.js +936 -0
- package/development/form-field/form-field-clear/form-field-clear.js +175 -0
- package/development/form-field/form-field-clear.d.ts +3 -0
- package/development/form-field/form-field-clear.d.ts.map +1 -1
- package/development/form-field/form-field-clear.js +2 -169
- package/development/form-field/form-field.d.ts +3 -0
- package/development/form-field/form-field.d.ts.map +1 -1
- package/development/form-field/form-field.js +2 -1062
- package/development/form-field.d.ts +3 -0
- package/development/form-field.d.ts.map +1 -1
- package/development/form-field.js +6 -2
- package/development/header/common/header-action-common.js +413 -0
- package/development/header/common.d.ts +3 -0
- package/development/header/common.d.ts.map +1 -1
- package/development/header/common.js +2 -410
- package/development/header/header/header.d.ts +6 -7
- package/development/header/header/header.d.ts.map +1 -1
- package/development/header/header/header.js +393 -0
- package/development/header/header-button/header-button.js +25 -0
- package/development/header/header-button.d.ts +3 -0
- package/development/header/header-button.d.ts.map +1 -1
- package/development/header/header-button.js +2 -22
- package/development/header/header-link/header-link.js +25 -0
- package/development/header/header-link.d.ts +3 -0
- package/development/header/header-link.d.ts.map +1 -1
- package/development/header/header-link.js +2 -22
- package/development/header/header.d.ts +3 -0
- package/development/header/header.d.ts.map +1 -1
- package/development/header/header.js +2 -379
- package/development/header.d.ts +3 -0
- package/development/header.d.ts.map +1 -1
- package/development/header.js +10 -4
- package/development/icon/icon-base.js +182 -0
- package/development/icon/icon-name-mixin.js +58 -0
- package/development/icon/icon-request.js +42 -0
- package/development/icon/icon-validate.js +47 -0
- package/development/icon/icon.js +118 -0
- package/development/icon-sidebar-button-common-CA_8TnFu.js +110 -0
- package/development/icon.d.ts +3 -0
- package/development/icon.d.ts.map +1 -1
- package/development/icon.js +6 -400
- package/development/image/image.js +682 -0
- package/development/image.d.ts +3 -0
- package/development/image.d.ts.map +1 -1
- package/development/image.js +2 -679
- package/development/journey-header/journey-header.js +192 -0
- package/development/journey-header.d.ts +3 -0
- package/development/journey-header.d.ts.map +1 -1
- package/development/journey-header.js +2 -189
- package/development/lead-container/lead-container.js +150 -0
- package/development/lead-container.d.ts +3 -0
- package/development/lead-container.d.ts.map +1 -1
- package/development/lead-container.js +2 -147
- package/development/link/block-link/block-link.js +26 -0
- package/development/link/block-link-button/block-link-button.js +26 -0
- package/development/link/block-link-button.d.ts +3 -0
- package/development/link/block-link-button.d.ts.map +1 -1
- package/development/link/block-link-button.js +2 -23
- package/development/link/block-link-static/block-link-static.js +26 -0
- package/development/link/block-link-static.d.ts +3 -0
- package/development/link/block-link-static.d.ts.map +1 -1
- package/development/link/block-link-static.js +2 -23
- package/development/link/block-link.d.ts +3 -0
- package/development/link/block-link.d.ts.map +1 -1
- package/development/link/block-link.js +2 -23
- package/development/link/common/block-link-common.js +132 -0
- package/development/link/common/inline-link-common.js +45 -0
- package/development/link/common/link-common.js +11 -0
- package/development/link/common.d.ts +3 -0
- package/development/link/common.d.ts.map +1 -1
- package/development/link/common.js +5 -279
- package/development/link/link/link.js +26 -0
- package/development/link/link-button/link-button.js +26 -0
- package/development/link/link-button.d.ts +3 -0
- package/development/link/link-button.d.ts.map +1 -1
- package/development/link/link-button.js +2 -23
- package/development/link/link-static/link-static.js +26 -0
- package/development/link/link-static.d.ts +3 -0
- package/development/link/link-static.d.ts.map +1 -1
- package/development/link/link-static.js +2 -23
- package/development/link/link.d.ts +3 -0
- package/development/link/link.d.ts.map +1 -1
- package/development/link/link.js +2 -23
- package/development/link-common-CJEWffDZ.js +127 -0
- package/development/link-list/common/link-list-base.js +121 -0
- package/development/link-list/common.d.ts +3 -0
- package/development/link-list/common.d.ts.map +1 -1
- package/development/link-list/common.js +4 -141
- package/development/link-list/link-list/link-list.js +206 -0
- package/development/link-list/link-list-anchor/link-list-anchor.js +72 -0
- package/development/link-list/link-list-anchor.d.ts +3 -0
- package/development/link-list/link-list-anchor.d.ts.map +1 -1
- package/development/link-list/link-list-anchor.js +2 -69
- package/development/link-list/link-list.d.ts +3 -0
- package/development/link-list/link-list.d.ts.map +1 -1
- package/development/link-list/link-list.js +2 -203
- package/development/link-list-base-DC9sc7q5.js +27 -0
- package/development/link-list.d.ts +3 -0
- package/development/link-list.d.ts.map +1 -1
- package/development/link-list.js +11 -4
- package/development/link.d.ts +3 -0
- package/development/link.d.ts.map +1 -1
- package/development/link.js +21 -8
- package/development/loading-indicator/loading-indicator.js +260 -0
- package/development/loading-indicator-circle/loading-indicator-circle.js +146 -0
- package/development/loading-indicator-circle.d.ts +3 -0
- package/development/loading-indicator-circle.d.ts.map +1 -1
- package/development/loading-indicator-circle.js +2 -143
- package/development/loading-indicator.d.ts +3 -0
- package/development/loading-indicator.d.ts.map +1 -1
- package/development/loading-indicator.js +2 -257
- package/development/logo/logo.js +157 -0
- package/development/logo.d.ts +3 -0
- package/development/logo.d.ts.map +1 -1
- package/development/logo.js +2 -154
- package/development/map-container/map-container.js +285 -0
- package/development/map-container.d.ts +3 -0
- package/development/map-container.d.ts.map +1 -1
- package/development/map-container.js +2 -282
- package/development/menu/common/menu-action-common.js +203 -0
- package/development/menu/common.d.ts +3 -0
- package/development/menu/common.d.ts.map +1 -1
- package/development/menu/common.js +2 -200
- package/development/menu/menu/menu.d.ts +8 -10
- package/development/menu/menu/menu.d.ts.map +1 -1
- package/development/menu/menu/menu.js +573 -0
- package/development/menu/menu-button/menu-button.js +26 -0
- package/development/menu/menu-button.d.ts +3 -0
- package/development/menu/menu-button.d.ts.map +1 -1
- package/development/menu/menu-button.js +2 -23
- package/development/menu/menu-link/menu-link.js +26 -0
- package/development/menu/menu-link.d.ts +3 -0
- package/development/menu/menu-link.d.ts.map +1 -1
- package/development/menu/menu-link.js +2 -23
- package/development/menu/menu.d.ts +3 -0
- package/development/menu/menu.d.ts.map +1 -1
- package/development/menu/menu.js +2 -580
- package/development/menu.d.ts +3 -0
- package/development/menu.d.ts.map +1 -1
- package/development/menu.js +10 -4
- package/development/message/message.js +139 -0
- package/development/message.d.ts +3 -0
- package/development/message.d.ts.map +1 -1
- package/development/message.js +2 -136
- package/development/navigation/common/navigation-action-common.js +175 -0
- package/development/navigation/common.d.ts +3 -0
- package/development/navigation/common.d.ts.map +1 -1
- package/development/navigation/common.js +2 -172
- package/development/navigation/navigation/navigation.d.ts +19 -25
- package/development/navigation/navigation/navigation.d.ts.map +1 -1
- package/development/navigation/navigation/navigation.js +597 -0
- package/development/navigation/navigation-button/navigation-button.js +25 -0
- package/development/navigation/navigation-button.d.ts +3 -0
- package/development/navigation/navigation-button.d.ts.map +1 -1
- package/development/navigation/navigation-button.js +2 -22
- package/development/navigation/navigation-link/navigation-link.js +25 -0
- package/development/navigation/navigation-link.d.ts +3 -0
- package/development/navigation/navigation-link.d.ts.map +1 -1
- package/development/navigation/navigation-link.js +2 -22
- package/development/navigation/navigation-list/navigation-list.js +113 -0
- package/development/navigation/navigation-list.d.ts +3 -0
- package/development/navigation/navigation-list.d.ts.map +1 -1
- package/development/navigation/navigation-list.js +2 -110
- package/development/navigation/navigation-marker/navigation-marker.d.ts.map +1 -1
- package/development/navigation/navigation-marker/navigation-marker.js +215 -0
- package/development/navigation/navigation-marker.d.ts +3 -0
- package/development/navigation/navigation-marker.d.ts.map +1 -1
- package/development/navigation/navigation-marker.js +2 -212
- package/development/navigation/navigation-section/navigation-section.d.ts +11 -14
- package/development/navigation/navigation-section/navigation-section.d.ts.map +1 -1
- package/development/navigation/navigation-section/navigation-section.js +622 -0
- package/development/navigation/navigation-section.d.ts +3 -0
- package/development/navigation/navigation-section.d.ts.map +1 -1
- package/development/navigation/navigation-section.js +2 -629
- package/development/navigation/navigation.d.ts +3 -0
- package/development/navigation/navigation.d.ts.map +1 -1
- package/development/navigation/navigation.js +2 -606
- package/development/navigation.d.ts +3 -0
- package/development/navigation.d.ts.map +1 -1
- package/development/navigation.js +16 -7
- package/development/notification/notification.js +527 -0
- package/development/notification.d.ts +3 -0
- package/development/notification.d.ts.map +1 -1
- package/development/notification.js +2 -524
- package/development/option/optgroup/optgroup-base-element.d.ts.map +1 -1
- package/development/option/optgroup/optgroup-base-element.js +247 -0
- package/development/option/optgroup/optgroup.d.ts +2 -2
- package/development/option/optgroup/optgroup.d.ts.map +1 -1
- package/development/option/optgroup/optgroup.js +50 -0
- package/development/option/optgroup.d.ts +3 -0
- package/development/option/optgroup.d.ts.map +1 -1
- package/development/option/optgroup.js +3 -287
- package/development/option/option/option-base-element.d.ts.map +1 -1
- package/development/option/option/option-base-element.js +320 -0
- package/development/option/option/option.js +264 -0
- package/development/option/option.d.ts +3 -0
- package/development/option/option.d.ts.map +1 -1
- package/development/option/option.js +3 -571
- package/development/option.d.ts +3 -0
- package/development/option.d.ts.map +1 -1
- package/development/option.js +11 -3
- package/development/overlay/overlay-base-element.d.ts +7 -3
- package/development/overlay/overlay-base-element.d.ts.map +1 -1
- package/development/overlay/overlay-base-element.js +144 -0
- package/development/overlay/overlay.d.ts +0 -1
- package/development/overlay/overlay.d.ts.map +1 -1
- package/development/overlay/overlay.js +424 -0
- package/development/overlay.d.ts +3 -0
- package/development/overlay.d.ts.map +1 -1
- package/development/overlay.js +3 -549
- package/development/paginator/common/paginator-common.js +193 -0
- package/development/paginator/common.d.ts +3 -0
- package/development/paginator/common.d.ts.map +1 -1
- package/development/paginator/common.js +2 -190
- package/development/paginator/compact-paginator/compact-paginator.js +96 -0
- package/development/paginator/compact-paginator.d.ts +3 -0
- package/development/paginator/compact-paginator.d.ts.map +1 -1
- package/development/paginator/compact-paginator.js +2 -93
- package/development/paginator/paginator/paginator.js +452 -0
- package/development/paginator/paginator.d.ts +3 -0
- package/development/paginator/paginator.d.ts.map +1 -1
- package/development/paginator/paginator.js +2 -438
- package/development/paginator.d.ts +3 -0
- package/development/paginator.d.ts.map +1 -1
- package/development/paginator.js +8 -3
- package/development/popover/popover/popover.d.ts +9 -8
- package/development/popover/popover/popover.d.ts.map +1 -1
- package/development/popover/popover/popover.js +592 -0
- package/development/popover/popover-trigger/popover-trigger.js +213 -0
- package/development/popover/popover-trigger.d.ts +3 -0
- package/development/popover/popover-trigger.d.ts.map +1 -1
- package/development/popover/popover-trigger.js +2 -212
- package/development/popover/popover.d.ts +3 -0
- package/development/popover/popover.d.ts.map +1 -1
- package/development/popover/popover.js +2 -604
- package/development/popover.d.ts +3 -0
- package/development/popover.d.ts.map +1 -1
- package/development/popover.js +6 -2
- package/development/radio-button/common/radio-button-common.d.ts.map +1 -1
- package/development/radio-button/common/radio-button-common.js +93 -0
- package/development/radio-button/common.d.ts +3 -0
- package/development/radio-button/common.d.ts.map +1 -1
- package/development/radio-button/common.js +4 -228
- package/development/radio-button/radio-button/radio-button.js +90 -0
- package/development/radio-button/radio-button-group/radio-button-group.js +387 -0
- package/development/radio-button/radio-button-group.d.ts +3 -0
- package/development/radio-button/radio-button-group.d.ts.map +1 -1
- package/development/radio-button/radio-button-group.js +2 -384
- package/development/radio-button/radio-button-panel/radio-button-panel.js +122 -0
- package/development/radio-button/radio-button-panel.d.ts +3 -0
- package/development/radio-button/radio-button-panel.d.ts.map +1 -1
- package/development/radio-button/radio-button-panel.js +2 -119
- package/development/radio-button/radio-button.d.ts +3 -0
- package/development/radio-button/radio-button.d.ts.map +1 -1
- package/development/radio-button/radio-button.js +2 -87
- package/development/radio-button-common-hZiiLJDY.js +139 -0
- package/development/radio-button.d.ts +3 -0
- package/development/radio-button.d.ts.map +1 -1
- package/development/radio-button.js +13 -5
- package/development/{sbb-tokens-CSAKTXUi.js → sbb-tokens-CVLcOi-S.js} +10 -10
- package/development/screen-reader-only/screen-reader-only.js +37 -0
- package/development/screen-reader-only.d.ts +3 -0
- package/development/screen-reader-only.d.ts.map +1 -1
- package/development/screen-reader-only.js +2 -34
- package/development/select/select.d.ts +1 -1
- package/development/select/select.d.ts.map +1 -1
- package/development/select/select.js +1048 -0
- package/development/select.d.ts +3 -0
- package/development/select.d.ts.map +1 -1
- package/development/select.js +2 -1045
- package/development/selection-expansion-panel/selection-expansion-panel.d.ts +0 -2
- package/development/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
- package/development/selection-expansion-panel/selection-expansion-panel.js +400 -0
- package/development/selection-expansion-panel.d.ts +3 -0
- package/development/selection-expansion-panel.d.ts.map +1 -1
- package/development/selection-expansion-panel.js +2 -402
- package/development/sidebar/common.d.ts +3 -0
- package/development/sidebar/common.d.ts.map +1 -1
- package/development/sidebar/common.js +5 -112
- package/development/sidebar/icon-sidebar/icon-sidebar.js +85 -0
- package/development/sidebar/icon-sidebar-button/icon-sidebar-button.js +28 -0
- package/development/sidebar/icon-sidebar-button.d.ts +3 -0
- package/development/sidebar/icon-sidebar-button.d.ts.map +1 -1
- package/development/sidebar/icon-sidebar-button.js +2 -25
- package/development/sidebar/icon-sidebar-container/icon-sidebar-container.js +45 -0
- package/development/sidebar/icon-sidebar-container.d.ts +3 -0
- package/development/sidebar/icon-sidebar-container.d.ts.map +1 -1
- package/development/sidebar/icon-sidebar-container.js +2 -42
- package/development/sidebar/icon-sidebar-content/icon-sidebar-content.js +34 -0
- package/development/sidebar/icon-sidebar-content.d.ts +3 -0
- package/development/sidebar/icon-sidebar-content.d.ts.map +1 -1
- package/development/sidebar/icon-sidebar-content.js +2 -31
- package/development/sidebar/icon-sidebar-link/icon-sidebar-link.js +28 -0
- package/development/sidebar/icon-sidebar-link.d.ts +3 -0
- package/development/sidebar/icon-sidebar-link.d.ts.map +1 -1
- package/development/sidebar/icon-sidebar-link.js +2 -25
- package/development/sidebar/icon-sidebar.d.ts +3 -0
- package/development/sidebar/icon-sidebar.d.ts.map +1 -1
- package/development/sidebar/icon-sidebar.js +2 -82
- package/development/sidebar/sidebar/sidebar.d.ts +1 -7
- package/development/sidebar/sidebar/sidebar.d.ts.map +1 -1
- package/development/sidebar/sidebar/sidebar.js +485 -0
- package/development/sidebar/sidebar-close-button/sidebar-close-button.js +55 -0
- package/development/sidebar/sidebar-close-button.d.ts +3 -0
- package/development/sidebar/sidebar-close-button.d.ts.map +1 -1
- package/development/sidebar/sidebar-close-button.js +2 -52
- package/development/sidebar/sidebar-container/sidebar-container.d.ts.map +1 -1
- package/development/sidebar/sidebar-container/sidebar-container.js +156 -0
- package/development/sidebar/sidebar-container.d.ts +3 -0
- package/development/sidebar/sidebar-container.d.ts.map +1 -1
- package/development/sidebar/sidebar-container.js +2 -150
- package/development/sidebar/sidebar-content/sidebar-content.js +37 -0
- package/development/sidebar/sidebar-content.d.ts +3 -0
- package/development/sidebar/sidebar-content.d.ts.map +1 -1
- package/development/sidebar/sidebar-content.js +2 -34
- package/development/sidebar/sidebar-title/sidebar-title.js +63 -0
- package/development/sidebar/sidebar-title.d.ts +3 -0
- package/development/sidebar/sidebar-title.d.ts.map +1 -1
- package/development/sidebar/sidebar-title.js +2 -60
- package/development/sidebar/sidebar.d.ts +3 -0
- package/development/sidebar/sidebar.d.ts.map +1 -1
- package/development/sidebar/sidebar.js +2 -520
- package/development/sidebar.d.ts +3 -0
- package/development/sidebar.d.ts.map +1 -1
- package/development/sidebar.js +26 -11
- package/development/signet/signet.js +162 -0
- package/development/signet.d.ts +3 -0
- package/development/signet.d.ts.map +1 -1
- package/development/signet.js +2 -159
- package/development/skiplink-list/skiplink-list.js +144 -0
- package/development/skiplink-list.d.ts +3 -0
- package/development/skiplink-list.d.ts.map +1 -1
- package/development/skiplink-list.js +2 -141
- package/development/slider/slider.js +451 -0
- package/development/slider.d.ts +3 -0
- package/development/slider.d.ts.map +1 -1
- package/development/slider.js +2 -448
- package/development/status/status.d.ts +4 -0
- package/development/status/status.d.ts.map +1 -1
- package/development/status/status.js +198 -0
- package/development/status.d.ts +3 -0
- package/development/status.d.ts.map +1 -1
- package/development/status.js +2 -220
- package/development/stepper/step/step.d.ts +15 -1
- package/development/stepper/step/step.d.ts.map +1 -1
- package/development/stepper/step/step.js +218 -0
- package/development/stepper/step-label/step-label.js +276 -0
- package/development/stepper/step-label.d.ts +3 -0
- package/development/stepper/step-label.d.ts.map +1 -1
- package/development/stepper/step-label.js +2 -273
- package/development/stepper/step.d.ts +3 -0
- package/development/stepper/step.d.ts.map +1 -1
- package/development/stepper/step.js +2 -195
- package/development/stepper/stepper/stepper.d.ts +1 -0
- package/development/stepper/stepper/stepper.d.ts.map +1 -1
- package/development/stepper/stepper/stepper.js +449 -0
- package/development/stepper/stepper.d.ts +3 -0
- package/development/stepper/stepper.d.ts.map +1 -1
- package/development/stepper/stepper.js +2 -442
- package/development/stepper.d.ts +3 -0
- package/development/stepper.d.ts.map +1 -1
- package/development/stepper.js +8 -3
- package/development/table/table-wrapper/table-wrapper.d.ts +6 -1
- package/development/table/table-wrapper/table-wrapper.d.ts.map +1 -1
- package/development/table/table-wrapper/table-wrapper.js +128 -0
- package/development/table/table-wrapper.d.ts +3 -0
- package/development/table/table-wrapper.d.ts.map +1 -1
- package/development/table/table-wrapper.js +2 -103
- package/development/table.d.ts +3 -0
- package/development/table.d.ts.map +1 -1
- package/development/table.js +4 -1
- package/development/tabs/tab/tab.js +66 -0
- package/development/tabs/tab-group/tab-group.js +391 -0
- package/development/tabs/tab-group.d.ts +3 -0
- package/development/tabs/tab-group.d.ts.map +1 -1
- package/development/tabs/tab-group.js +2 -388
- package/development/tabs/tab-label/tab-label.js +316 -0
- package/development/tabs/tab-label.d.ts +3 -0
- package/development/tabs/tab-label.d.ts.map +1 -1
- package/development/tabs/tab-label.js +2 -312
- package/development/tabs/tab.d.ts +3 -0
- package/development/tabs/tab.d.ts.map +1 -1
- package/development/tabs/tab.js +2 -63
- package/development/tabs.d.ts +3 -0
- package/development/tabs.d.ts.map +1 -1
- package/development/tabs.js +8 -3
- package/development/tag/tag/tag.js +351 -0
- package/development/tag/tag-group/tag-group.js +192 -0
- package/development/tag/tag-group.d.ts +3 -0
- package/development/tag/tag-group.d.ts.map +1 -1
- package/development/tag/tag-group.js +2 -189
- package/development/tag/tag.d.ts +3 -0
- package/development/tag/tag.d.ts.map +1 -1
- package/development/tag/tag.js +2 -348
- package/development/tag.d.ts +3 -0
- package/development/tag.d.ts.map +1 -1
- package/development/tag.js +6 -2
- package/development/teaser/teaser.js +260 -0
- package/development/teaser-hero/teaser-hero.js +180 -0
- package/development/teaser-hero.d.ts +3 -0
- package/development/teaser-hero.d.ts.map +1 -1
- package/development/teaser-hero.js +2 -177
- package/development/teaser-product/common/teaser-product-common.js +73 -0
- package/development/teaser-product/common.d.ts +3 -0
- package/development/teaser-product/common.d.ts.map +1 -1
- package/development/teaser-product/common.js +4 -214
- package/development/teaser-product/teaser-product/teaser-product.js +71 -0
- package/development/teaser-product/teaser-product-static/teaser-product-static.js +24 -0
- package/development/teaser-product/teaser-product-static.d.ts +3 -0
- package/development/teaser-product/teaser-product-static.d.ts.map +1 -1
- package/development/teaser-product/teaser-product-static.js +2 -21
- package/development/teaser-product/teaser-product.d.ts +3 -0
- package/development/teaser-product/teaser-product.d.ts.map +1 -1
- package/development/teaser-product/teaser-product.js +2 -68
- package/development/teaser-product-common-D6fa6x3w.js +148 -0
- package/development/teaser-product.d.ts +3 -0
- package/development/teaser-product.d.ts.map +1 -1
- package/development/teaser-product.js +11 -4
- package/development/teaser.d.ts +3 -0
- package/development/teaser.d.ts.map +1 -1
- package/development/teaser.js +2 -257
- package/development/time-input/time-input.d.ts +6 -8
- package/development/time-input/time-input.d.ts.map +1 -1
- package/development/time-input/time-input.js +276 -0
- package/development/time-input.d.ts +3 -0
- package/development/time-input.d.ts.map +1 -1
- package/development/time-input.js +2 -275
- package/development/timetable-occupancy/timetable-occupancy.js +151 -0
- package/development/timetable-occupancy-icon/timetable-occupancy-icon.js +98 -0
- package/development/timetable-occupancy-icon.d.ts +3 -0
- package/development/timetable-occupancy-icon.d.ts.map +1 -1
- package/development/timetable-occupancy-icon.js +2 -95
- package/development/timetable-occupancy.d.ts +3 -0
- package/development/timetable-occupancy.d.ts.map +1 -1
- package/development/timetable-occupancy.js +2 -148
- package/development/title/title-base.js +212 -0
- package/development/title/title.js +60 -0
- package/development/title.d.ts +3 -0
- package/development/title.d.ts.map +1 -1
- package/development/title.js +3 -261
- package/development/toast/toast.js +443 -0
- package/development/toast.d.ts +3 -0
- package/development/toast.d.ts.map +1 -1
- package/development/toast.js +2 -440
- package/development/toggle/toggle/toggle.d.ts.map +1 -1
- package/development/toggle/toggle/toggle.js +342 -0
- package/development/toggle/toggle-option/toggle-option.d.ts.map +1 -1
- package/development/toggle/toggle-option/toggle-option.js +208 -0
- package/development/toggle/toggle-option.d.ts +3 -0
- package/development/toggle/toggle-option.d.ts.map +1 -1
- package/development/toggle/toggle-option.js +2 -217
- package/development/toggle/toggle.d.ts +3 -0
- package/development/toggle/toggle.d.ts.map +1 -1
- package/development/toggle/toggle.js +2 -340
- package/development/toggle-check/toggle-check.js +284 -0
- package/development/toggle-check.d.ts +3 -0
- package/development/toggle-check.d.ts.map +1 -1
- package/development/toggle-check.js +2 -281
- package/development/toggle.d.ts +3 -0
- package/development/toggle.d.ts.map +1 -1
- package/development/toggle.js +6 -2
- package/development/train/train/train.js +245 -0
- package/development/train/train-blocked-passage/train-blocked-passage.js +87 -0
- package/development/train/train-blocked-passage.d.ts +3 -0
- package/development/train/train-blocked-passage.d.ts.map +1 -1
- package/development/train/train-blocked-passage.js +2 -84
- package/development/train/train-formation/train-formation.js +269 -0
- package/development/train/train-formation.d.ts +3 -0
- package/development/train/train-formation.d.ts.map +1 -1
- package/development/train/train-formation.js +2 -266
- package/development/train/train-wagon/train-wagon.js +415 -0
- package/development/train/train-wagon.d.ts +3 -0
- package/development/train/train-wagon.d.ts.map +1 -1
- package/development/train/train-wagon.js +2 -412
- package/development/train/train.d.ts +3 -0
- package/development/train/train.d.ts.map +1 -1
- package/development/train/train.js +2 -242
- package/development/train.d.ts +3 -0
- package/development/train.d.ts.map +1 -1
- package/development/train.js +10 -4
- package/development/transparent-button-Ddb_s0a0.js +338 -0
- package/development/visual-checkbox/visual-checkbox.js +221 -0
- package/development/visual-checkbox.d.ts +3 -0
- package/development/visual-checkbox.d.ts.map +1 -1
- package/development/visual-checkbox.js +2 -218
- package/dialog/dialog/dialog.d.ts +0 -1
- package/dialog/dialog/dialog.d.ts.map +1 -1
- package/dialog/dialog/dialog.js +142 -0
- package/dialog/dialog-actions/dialog-actions.js +20 -0
- package/dialog/dialog-actions.d.ts +3 -0
- package/dialog/dialog-actions.d.ts.map +1 -1
- package/dialog/dialog-actions.js +2 -18
- package/dialog/dialog-content/dialog-content.js +24 -0
- package/dialog/dialog-content.d.ts +3 -0
- package/dialog/dialog-content.d.ts.map +1 -1
- package/dialog/dialog-content.js +2 -22
- package/dialog/dialog-title/dialog-title.d.ts +0 -1
- package/dialog/dialog-title/dialog-title.d.ts.map +1 -1
- package/dialog/dialog-title/dialog-title.js +116 -0
- package/dialog/dialog-title.d.ts +3 -0
- package/dialog/dialog-title.d.ts.map +1 -1
- package/dialog/dialog-title.js +2 -117
- package/dialog/dialog.d.ts +3 -0
- package/dialog/dialog.d.ts.map +1 -1
- package/dialog/dialog.js +2 -146
- package/dialog.d.ts +3 -0
- package/dialog.d.ts.map +1 -1
- package/dialog.js +10 -4
- package/divider/divider.js +45 -0
- package/divider.d.ts +3 -0
- package/divider.d.ts.map +1 -1
- package/divider.js +2 -43
- package/expansion-panel/expansion-panel/expansion-panel.d.ts +0 -2
- package/expansion-panel/expansion-panel/expansion-panel.d.ts.map +1 -1
- package/expansion-panel/expansion-panel/expansion-panel.js +165 -0
- package/expansion-panel/expansion-panel-content/expansion-panel-content.js +27 -0
- package/expansion-panel/expansion-panel-content.d.ts +3 -0
- package/expansion-panel/expansion-panel-content.d.ts.map +1 -1
- package/expansion-panel/expansion-panel-content.js +2 -25
- package/expansion-panel/expansion-panel-header/expansion-panel-header.js +65 -0
- package/expansion-panel/expansion-panel-header.d.ts +3 -0
- package/expansion-panel/expansion-panel-header.d.ts.map +1 -1
- package/expansion-panel/expansion-panel-header.js +2 -63
- package/expansion-panel/expansion-panel.d.ts +3 -0
- package/expansion-panel/expansion-panel.d.ts.map +1 -1
- package/expansion-panel/expansion-panel.js +2 -166
- package/expansion-panel.d.ts +3 -0
- package/expansion-panel.d.ts.map +1 -1
- package/expansion-panel.js +8 -3
- package/file-selector/common/file-selector-common.d.ts.map +1 -1
- package/file-selector/common/file-selector-common.js +209 -0
- package/file-selector/common.d.ts +3 -0
- package/file-selector/common.d.ts.map +1 -1
- package/file-selector/common.js +4 -208
- package/file-selector/file-selector/file-selector.js +44 -0
- package/file-selector/file-selector-dropzone/file-selector-dropzone.js +97 -0
- package/file-selector/file-selector-dropzone.d.ts +3 -0
- package/file-selector/file-selector-dropzone.d.ts.map +1 -1
- package/file-selector/file-selector-dropzone.js +2 -95
- package/file-selector/file-selector.d.ts +3 -0
- package/file-selector/file-selector.d.ts.map +1 -1
- package/file-selector/file-selector.js +2 -42
- package/file-selector-common-Dw5d8vA4.js +5 -0
- package/file-selector.d.ts +3 -0
- package/file-selector.d.ts.map +1 -1
- package/file-selector.js +10 -3
- package/flip-card/flip-card/flip-card.js +122 -0
- package/flip-card/flip-card-details/flip-card-details.d.ts.map +1 -1
- package/flip-card/flip-card-details/flip-card-details.js +45 -0
- package/flip-card/flip-card-details.d.ts +3 -0
- package/flip-card/flip-card-details.d.ts.map +1 -1
- package/flip-card/flip-card-details.js +2 -43
- package/flip-card/flip-card-summary/flip-card-summary.js +52 -0
- package/flip-card/flip-card-summary.d.ts +3 -0
- package/flip-card/flip-card-summary.d.ts.map +1 -1
- package/flip-card/flip-card-summary.js +2 -50
- package/flip-card/flip-card.d.ts +3 -0
- package/flip-card/flip-card.d.ts.map +1 -1
- package/flip-card/flip-card.js +2 -120
- package/flip-card.d.ts +3 -0
- package/flip-card.d.ts.map +1 -1
- package/flip-card.js +8 -3
- package/footer/footer.js +87 -0
- package/footer.d.ts +3 -0
- package/footer.d.ts.map +1 -1
- package/footer.js +2 -85
- package/form-error/form-error.js +47 -0
- package/form-error.d.ts +3 -0
- package/form-error.d.ts.map +1 -1
- package/form-error.js +2 -45
- package/form-field/form-field/form-field.d.ts.map +1 -1
- package/form-field/form-field/form-field.js +363 -0
- package/form-field/form-field-clear/form-field-clear.js +42 -0
- package/form-field/form-field-clear.d.ts +3 -0
- package/form-field/form-field-clear.d.ts.map +1 -1
- package/form-field/form-field-clear.js +2 -40
- package/form-field/form-field.d.ts +3 -0
- package/form-field/form-field.d.ts.map +1 -1
- package/form-field/form-field.js +2 -356
- package/form-field.d.ts +3 -0
- package/form-field.d.ts.map +1 -1
- package/form-field.js +6 -2
- package/header/common/header-action-common.js +50 -0
- package/header/common.d.ts +3 -0
- package/header/common.d.ts.map +1 -1
- package/header/common.js +2 -48
- package/header/header/header.d.ts +6 -7
- package/header/header/header.d.ts.map +1 -1
- package/header/header/header.js +151 -0
- package/header/header-button/header-button.js +16 -0
- package/header/header-button.d.ts +3 -0
- package/header/header-button.d.ts.map +1 -1
- package/header/header-button.js +2 -14
- package/header/header-link/header-link.js +16 -0
- package/header/header-link.d.ts +3 -0
- package/header/header-link.d.ts.map +1 -1
- package/header/header-link.js +2 -14
- package/header/header.d.ts +3 -0
- package/header/header.d.ts.map +1 -1
- package/header/header.js +2 -147
- package/header.d.ts +3 -0
- package/header.d.ts.map +1 -1
- package/header.js +10 -4
- package/icon/icon-base.js +109 -0
- package/icon/icon-name-mixin.js +47 -0
- package/icon/icon-request.js +31 -0
- package/icon/icon-validate.js +26 -0
- package/icon/icon.js +77 -0
- package/icon-sidebar-button-common-DG8bnrBu.js +7 -0
- package/icon.d.ts +3 -0
- package/icon.d.ts.map +1 -1
- package/icon.js +11 -254
- package/image/image.js +469 -0
- package/image.d.ts +3 -0
- package/image.d.ts.map +1 -1
- package/image.js +2 -467
- package/index.d.ts +188 -182
- package/index.js +188 -182
- package/journey-header/journey-header.js +119 -0
- package/journey-header.d.ts +3 -0
- package/journey-header.d.ts.map +1 -1
- package/journey-header.js +2 -117
- package/lead-container/lead-container.js +31 -0
- package/lead-container.d.ts +3 -0
- package/lead-container.d.ts.map +1 -1
- package/lead-container.js +2 -29
- package/link/block-link/block-link.js +17 -0
- package/link/block-link-button/block-link-button.js +17 -0
- package/link/block-link-button.d.ts +3 -0
- package/link/block-link-button.d.ts.map +1 -1
- package/link/block-link-button.js +2 -15
- package/link/block-link-static/block-link-static.js +17 -0
- package/link/block-link-static.d.ts +3 -0
- package/link/block-link-static.d.ts.map +1 -1
- package/link/block-link-static.js +2 -15
- package/link/block-link.d.ts +3 -0
- package/link/block-link.d.ts.map +1 -1
- package/link/block-link.js +2 -15
- package/link/common/block-link-common.js +43 -0
- package/link/common/inline-link-common.js +12 -0
- package/link/common/link-common.js +10 -0
- package/link/common.d.ts +3 -0
- package/link/common.d.ts.map +1 -1
- package/link/common.js +6 -80
- package/link/link/link.js +17 -0
- package/link/link-button/link-button.js +17 -0
- package/link/link-button.d.ts +3 -0
- package/link/link-button.d.ts.map +1 -1
- package/link/link-button.js +2 -15
- package/link/link-static/link-static.js +17 -0
- package/link/link-static.d.ts +3 -0
- package/link/link-static.d.ts.map +1 -1
- package/link/link-static.js +2 -15
- package/link/link.d.ts +3 -0
- package/link/link.d.ts.map +1 -1
- package/link/link.js +2 -15
- package/link-common-DZrQ-32d.js +46 -0
- package/link-list/common/link-list-base.js +87 -0
- package/link-list/common.d.ts +3 -0
- package/link-list/common.d.ts.map +1 -1
- package/link-list/common.js +4 -87
- package/link-list/link-list/link-list.js +46 -0
- package/link-list/link-list-anchor/link-list-anchor.js +17 -0
- package/link-list/link-list-anchor.d.ts +3 -0
- package/link-list/link-list-anchor.d.ts.map +1 -1
- package/link-list/link-list-anchor.js +2 -15
- package/link-list/link-list.d.ts +3 -0
- package/link-list/link-list.d.ts.map +1 -1
- package/link-list/link-list.js +2 -44
- package/link-list-base-BdOBGhxe.js +5 -0
- package/link-list.d.ts +3 -0
- package/link-list.d.ts.map +1 -1
- package/link-list.js +10 -3
- package/link.d.ts +3 -0
- package/link.d.ts.map +1 -1
- package/link.js +20 -7
- package/loading-indicator/loading-indicator.js +66 -0
- package/loading-indicator-circle/loading-indicator-circle.js +46 -0
- package/loading-indicator-circle.d.ts +3 -0
- package/loading-indicator-circle.d.ts.map +1 -1
- package/loading-indicator-circle.js +2 -44
- package/loading-indicator.d.ts +3 -0
- package/loading-indicator.d.ts.map +1 -1
- package/loading-indicator.js +2 -64
- package/logo/logo.js +67 -0
- package/logo.d.ts +3 -0
- package/logo.d.ts.map +1 -1
- package/logo.js +2 -65
- package/map-container/map-container.js +109 -0
- package/map-container.d.ts +3 -0
- package/map-container.d.ts.map +1 -1
- package/map-container.js +2 -107
- package/menu/common/menu-action-common.js +53 -0
- package/menu/common.d.ts +3 -0
- package/menu/common.d.ts.map +1 -1
- package/menu/common.js +2 -51
- package/menu/menu/menu.d.ts +8 -10
- package/menu/menu/menu.d.ts.map +1 -1
- package/menu/menu/menu.js +227 -0
- package/menu/menu-button/menu-button.js +17 -0
- package/menu/menu-button.d.ts +3 -0
- package/menu/menu-button.d.ts.map +1 -1
- package/menu/menu-button.js +2 -15
- package/menu/menu-link/menu-link.js +17 -0
- package/menu/menu-link.d.ts +3 -0
- package/menu/menu-link.d.ts.map +1 -1
- package/menu/menu-link.js +2 -15
- package/menu/menu.d.ts +3 -0
- package/menu/menu.d.ts.map +1 -1
- package/menu/menu.js +2 -230
- package/menu.d.ts +3 -0
- package/menu.d.ts.map +1 -1
- package/menu.js +10 -4
- package/message/message.js +60 -0
- package/message.d.ts +3 -0
- package/message.d.ts.map +1 -1
- package/message.js +2 -58
- package/navigation/common/navigation-action-common.js +58 -0
- package/navigation/common.d.ts +3 -0
- package/navigation/common.d.ts.map +1 -1
- package/navigation/common.js +2 -56
- package/navigation/navigation/navigation.d.ts +19 -25
- package/navigation/navigation/navigation.d.ts.map +1 -1
- package/navigation/navigation/navigation.js +215 -0
- package/navigation/navigation-button/navigation-button.js +16 -0
- package/navigation/navigation-button.d.ts +3 -0
- package/navigation/navigation-button.d.ts.map +1 -1
- package/navigation/navigation-button.js +2 -14
- package/navigation/navigation-link/navigation-link.js +16 -0
- package/navigation/navigation-link.d.ts +3 -0
- package/navigation/navigation-link.d.ts.map +1 -1
- package/navigation/navigation-link.js +2 -14
- package/navigation/navigation-list/navigation-list.js +57 -0
- package/navigation/navigation-list.d.ts +3 -0
- package/navigation/navigation-list.d.ts.map +1 -1
- package/navigation/navigation-list.js +2 -55
- package/navigation/navigation-marker/navigation-marker.d.ts.map +1 -1
- package/navigation/navigation-marker/navigation-marker.js +82 -0
- package/navigation/navigation-marker.d.ts +3 -0
- package/navigation/navigation-marker.d.ts.map +1 -1
- package/navigation/navigation-marker.js +2 -80
- package/navigation/navigation-section/navigation-section.d.ts +11 -14
- package/navigation/navigation-section/navigation-section.d.ts.map +1 -1
- package/navigation/navigation-section/navigation-section.js +233 -0
- package/navigation/navigation-section.d.ts +3 -0
- package/navigation/navigation-section.d.ts.map +1 -1
- package/navigation/navigation-section.js +2 -233
- package/navigation/navigation.d.ts +3 -0
- package/navigation/navigation.d.ts.map +1 -1
- package/navigation/navigation.js +2 -218
- package/navigation.d.ts +3 -0
- package/navigation.d.ts.map +1 -1
- package/navigation.js +16 -7
- package/notification/notification.js +192 -0
- package/notification.d.ts +3 -0
- package/notification.d.ts.map +1 -1
- package/notification.js +2 -190
- package/option/optgroup/optgroup-base-element.d.ts.map +1 -1
- package/option/optgroup/optgroup-base-element.js +115 -0
- package/option/optgroup/optgroup.d.ts +2 -2
- package/option/optgroup/optgroup.d.ts.map +1 -1
- package/option/optgroup/optgroup.js +34 -0
- package/option/optgroup.d.ts +3 -0
- package/option/optgroup.d.ts.map +1 -1
- package/option/optgroup.js +4 -141
- package/option/option/option-base-element.d.ts.map +1 -1
- package/option/option/option-base-element.js +232 -0
- package/option/option/option.js +95 -0
- package/option/option.d.ts +3 -0
- package/option/option.d.ts.map +1 -1
- package/option/option.js +4 -318
- package/option.d.ts +3 -0
- package/option.d.ts.map +1 -1
- package/option.js +10 -2
- package/overlay/overlay-base-element.d.ts +7 -3
- package/overlay/overlay-base-element.d.ts.map +1 -1
- package/overlay/overlay-base-element.js +102 -0
- package/overlay/overlay.d.ts +0 -1
- package/overlay/overlay.d.ts.map +1 -1
- package/overlay/overlay.js +156 -0
- package/overlay.d.ts +3 -0
- package/overlay.d.ts.map +1 -1
- package/overlay.js +5 -239
- package/package.json +17 -2
- package/paginator/common/paginator-common.js +149 -0
- package/paginator/common.d.ts +3 -0
- package/paginator/common.d.ts.map +1 -1
- package/paginator/common.js +2 -147
- package/paginator/compact-paginator/compact-paginator.js +40 -0
- package/paginator/compact-paginator.d.ts +3 -0
- package/paginator/compact-paginator.d.ts.map +1 -1
- package/paginator/compact-paginator.js +2 -38
- package/paginator/paginator/paginator.js +169 -0
- package/paginator/paginator.d.ts +3 -0
- package/paginator/paginator.d.ts.map +1 -1
- package/paginator/paginator.js +2 -167
- package/paginator.d.ts +3 -0
- package/paginator.d.ts.map +1 -1
- package/paginator.js +8 -3
- package/popover/popover/popover.d.ts +9 -8
- package/popover/popover/popover.d.ts.map +1 -1
- package/popover/popover/popover.js +261 -0
- package/popover/popover-trigger/popover-trigger.js +32 -0
- package/popover/popover-trigger.d.ts +3 -0
- package/popover/popover-trigger.d.ts.map +1 -1
- package/popover/popover-trigger.js +2 -30
- package/popover/popover.d.ts +3 -0
- package/popover/popover.d.ts.map +1 -1
- package/popover/popover.js +2 -263
- package/popover.d.ts +3 -0
- package/popover.d.ts.map +1 -1
- package/popover.js +6 -2
- package/radio-button/common/radio-button-common.d.ts.map +1 -1
- package/radio-button/common/radio-button-common.js +64 -0
- package/radio-button/common.d.ts +3 -0
- package/radio-button/common.d.ts.map +1 -1
- package/radio-button/common.js +4 -65
- package/radio-button/radio-button/radio-button.js +57 -0
- package/radio-button/radio-button-group/radio-button-group.js +186 -0
- package/radio-button/radio-button-group.d.ts +3 -0
- package/radio-button/radio-button-group.d.ts.map +1 -1
- package/radio-button/radio-button-group.js +2 -184
- package/radio-button/radio-button-panel/radio-button-panel.js +88 -0
- package/radio-button/radio-button-panel.d.ts +3 -0
- package/radio-button/radio-button-panel.d.ts.map +1 -1
- package/radio-button/radio-button-panel.js +2 -86
- package/radio-button/radio-button.d.ts +3 -0
- package/radio-button/radio-button.d.ts.map +1 -1
- package/radio-button/radio-button.js +2 -55
- package/radio-button-common-DJKWrKor.js +5 -0
- package/radio-button.d.ts +3 -0
- package/radio-button.d.ts.map +1 -1
- package/radio-button.js +12 -4
- package/{sbb-tokens-BgDF8jIh.js → sbb-tokens-B3Eka-Tz.js} +9 -9
- package/screen-reader-only/screen-reader-only.js +19 -0
- package/screen-reader-only.d.ts +3 -0
- package/screen-reader-only.d.ts.map +1 -1
- package/screen-reader-only.js +2 -17
- package/select/select.d.ts +1 -1
- package/select/select.d.ts.map +1 -1
- package/select/select.js +482 -0
- package/select.d.ts +3 -0
- package/select.d.ts.map +1 -1
- package/select.js +2 -479
- package/selection-expansion-panel/selection-expansion-panel.d.ts +0 -2
- package/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
- package/selection-expansion-panel/selection-expansion-panel.js +185 -0
- package/selection-expansion-panel.d.ts +3 -0
- package/selection-expansion-panel.d.ts.map +1 -1
- package/selection-expansion-panel.js +2 -186
- package/sidebar/common.d.ts +3 -0
- package/sidebar/common.d.ts.map +1 -1
- package/sidebar/common.js +3 -4
- package/sidebar/icon-sidebar/icon-sidebar.js +47 -0
- package/sidebar/icon-sidebar-button/icon-sidebar-button.js +20 -0
- package/sidebar/icon-sidebar-button.d.ts +3 -0
- package/sidebar/icon-sidebar-button.d.ts.map +1 -1
- package/sidebar/icon-sidebar-button.js +2 -18
- package/sidebar/icon-sidebar-container/icon-sidebar-container.js +35 -0
- package/sidebar/icon-sidebar-container.d.ts +3 -0
- package/sidebar/icon-sidebar-container.d.ts.map +1 -1
- package/sidebar/icon-sidebar-container.js +2 -33
- package/sidebar/icon-sidebar-content/icon-sidebar-content.js +23 -0
- package/sidebar/icon-sidebar-content.d.ts +3 -0
- package/sidebar/icon-sidebar-content.d.ts.map +1 -1
- package/sidebar/icon-sidebar-content.js +2 -21
- package/sidebar/icon-sidebar-link/icon-sidebar-link.js +20 -0
- package/sidebar/icon-sidebar-link.d.ts +3 -0
- package/sidebar/icon-sidebar-link.d.ts.map +1 -1
- package/sidebar/icon-sidebar-link.js +2 -18
- package/sidebar/icon-sidebar.d.ts +3 -0
- package/sidebar/icon-sidebar.d.ts.map +1 -1
- package/sidebar/icon-sidebar.js +2 -45
- package/sidebar/sidebar/sidebar.d.ts +1 -7
- package/sidebar/sidebar/sidebar.d.ts.map +1 -1
- package/sidebar/sidebar/sidebar.js +194 -0
- package/sidebar/sidebar-close-button/sidebar-close-button.js +29 -0
- package/sidebar/sidebar-close-button.d.ts +3 -0
- package/sidebar/sidebar-close-button.d.ts.map +1 -1
- package/sidebar/sidebar-close-button.js +2 -27
- package/sidebar/sidebar-container/sidebar-container.d.ts.map +1 -1
- package/sidebar/sidebar-container/sidebar-container.js +81 -0
- package/sidebar/sidebar-container.d.ts +3 -0
- package/sidebar/sidebar-container.d.ts.map +1 -1
- package/sidebar/sidebar-container.js +2 -76
- package/sidebar/sidebar-content/sidebar-content.js +23 -0
- package/sidebar/sidebar-content.d.ts +3 -0
- package/sidebar/sidebar-content.d.ts.map +1 -1
- package/sidebar/sidebar-content.js +2 -21
- package/sidebar/sidebar-title/sidebar-title.js +37 -0
- package/sidebar/sidebar-title.d.ts +3 -0
- package/sidebar/sidebar-title.d.ts.map +1 -1
- package/sidebar/sidebar-title.js +2 -35
- package/sidebar/sidebar.d.ts +3 -0
- package/sidebar/sidebar.d.ts.map +1 -1
- package/sidebar/sidebar.js +2 -212
- package/sidebar.d.ts +3 -0
- package/sidebar.d.ts.map +1 -1
- package/sidebar.js +26 -11
- package/signet/signet.js +72 -0
- package/signet.d.ts +3 -0
- package/signet.d.ts.map +1 -1
- package/signet.js +2 -70
- package/skiplink-list/skiplink-list.js +71 -0
- package/skiplink-list.d.ts +3 -0
- package/skiplink-list.d.ts.map +1 -1
- package/skiplink-list.js +2 -69
- package/slider/slider.js +232 -0
- package/slider.d.ts +3 -0
- package/slider.d.ts.map +1 -1
- package/slider.js +2 -230
- package/standard-theme.css +208 -81
- package/status/status.d.ts +4 -0
- package/status/status.d.ts.map +1 -1
- package/status/status.js +89 -0
- package/status.d.ts +3 -0
- package/status.d.ts.map +1 -1
- package/status.js +2 -87
- package/stepper/step/step.d.ts +15 -1
- package/stepper/step/step.d.ts.map +1 -1
- package/stepper/step/step.js +104 -0
- package/stepper/step-label/step-label.js +75 -0
- package/stepper/step-label.d.ts +3 -0
- package/stepper/step-label.d.ts.map +1 -1
- package/stepper/step-label.js +2 -73
- package/stepper/step.d.ts +3 -0
- package/stepper/step.d.ts.map +1 -1
- package/stepper/step.js +2 -88
- package/stepper/stepper/stepper.d.ts +1 -0
- package/stepper/stepper/stepper.d.ts.map +1 -1
- package/stepper/stepper/stepper.js +244 -0
- package/stepper/stepper.d.ts +3 -0
- package/stepper/stepper.d.ts.map +1 -1
- package/stepper/stepper.js +2 -239
- package/stepper.d.ts +3 -0
- package/stepper.d.ts.map +1 -1
- package/stepper.js +8 -3
- package/table/table-wrapper/table-wrapper.d.ts +6 -1
- package/table/table-wrapper/table-wrapper.d.ts.map +1 -1
- package/table/table-wrapper/table-wrapper.js +50 -0
- package/table/table-wrapper.d.ts +3 -0
- package/table/table-wrapper.d.ts.map +1 -1
- package/table/table-wrapper.js +2 -34
- package/table.css +112 -44
- package/table.d.ts +3 -0
- package/table.d.ts.map +1 -1
- package/table.js +4 -1
- package/tabs/tab/tab.js +40 -0
- package/tabs/tab-group/tab-group.js +218 -0
- package/tabs/tab-group.d.ts +3 -0
- package/tabs/tab-group.d.ts.map +1 -1
- package/tabs/tab-group.js +2 -216
- package/tabs/tab-label/tab-label.js +80 -0
- package/tabs/tab-label.d.ts +3 -0
- package/tabs/tab-label.d.ts.map +1 -1
- package/tabs/tab-label.js +2 -78
- package/tabs/tab.d.ts +3 -0
- package/tabs/tab.d.ts.map +1 -1
- package/tabs/tab.js +2 -38
- package/tabs.d.ts +3 -0
- package/tabs.d.ts.map +1 -1
- package/tabs.js +8 -3
- package/tag/tag/tag.js +126 -0
- package/tag/tag-group/tag-group.js +120 -0
- package/tag/tag-group.d.ts +3 -0
- package/tag/tag-group.d.ts.map +1 -1
- package/tag/tag-group.js +2 -118
- package/tag/tag.d.ts +3 -0
- package/tag/tag.d.ts.map +1 -1
- package/tag/tag.js +2 -124
- package/tag.d.ts +3 -0
- package/tag.d.ts.map +1 -1
- package/tag.js +6 -2
- package/teaser/teaser.js +102 -0
- package/teaser-hero/teaser-hero.js +61 -0
- package/teaser-hero.d.ts +3 -0
- package/teaser-hero.d.ts.map +1 -1
- package/teaser-hero.js +2 -59
- package/teaser-product/common/teaser-product-common.js +54 -0
- package/teaser-product/common.d.ts +3 -0
- package/teaser-product/common.d.ts.map +1 -1
- package/teaser-product/common.js +4 -53
- package/teaser-product/teaser-product/teaser-product.js +31 -0
- package/teaser-product/teaser-product-static/teaser-product-static.js +16 -0
- package/teaser-product/teaser-product-static.d.ts +3 -0
- package/teaser-product/teaser-product-static.d.ts.map +1 -1
- package/teaser-product/teaser-product-static.js +2 -14
- package/teaser-product/teaser-product.d.ts +3 -0
- package/teaser-product/teaser-product.d.ts.map +1 -1
- package/teaser-product/teaser-product.js +2 -29
- package/teaser-product-common-CpMAlYEp.js +5 -0
- package/teaser-product.d.ts +3 -0
- package/teaser-product.d.ts.map +1 -1
- package/teaser-product.js +10 -3
- package/teaser.d.ts +3 -0
- package/teaser.d.ts.map +1 -1
- package/teaser.js +2 -100
- package/time-input/time-input.d.ts +6 -8
- package/time-input/time-input.d.ts.map +1 -1
- package/time-input/time-input.js +174 -0
- package/time-input.d.ts +3 -0
- package/time-input.d.ts.map +1 -1
- package/time-input.js +2 -179
- package/timetable-occupancy/timetable-occupancy.js +75 -0
- package/timetable-occupancy-icon/timetable-occupancy-icon.js +64 -0
- package/timetable-occupancy-icon.d.ts +3 -0
- package/timetable-occupancy-icon.d.ts.map +1 -1
- package/timetable-occupancy-icon.js +2 -62
- package/timetable-occupancy.d.ts +3 -0
- package/timetable-occupancy.d.ts.map +1 -1
- package/timetable-occupancy.js +2 -73
- package/title/title-base.js +73 -0
- package/title/title.js +18 -0
- package/title.d.ts +3 -0
- package/title.d.ts.map +1 -1
- package/title.js +4 -83
- package/toast/toast.js +195 -0
- package/toast.d.ts +3 -0
- package/toast.d.ts.map +1 -1
- package/toast.js +2 -193
- package/toggle/toggle/toggle.d.ts.map +1 -1
- package/toggle/toggle/toggle.js +162 -0
- package/toggle/toggle-option/toggle-option.d.ts.map +1 -1
- package/toggle/toggle-option/toggle-option.js +84 -0
- package/toggle/toggle-option.d.ts +3 -0
- package/toggle/toggle-option.d.ts.map +1 -1
- package/toggle/toggle-option.js +2 -94
- package/toggle/toggle.d.ts +3 -0
- package/toggle/toggle.d.ts.map +1 -1
- package/toggle/toggle.js +2 -162
- package/toggle-check/toggle-check.js +81 -0
- package/toggle-check.d.ts +3 -0
- package/toggle-check.d.ts.map +1 -1
- package/toggle-check.js +2 -79
- package/toggle.d.ts +3 -0
- package/toggle.d.ts.map +1 -1
- package/toggle.js +6 -2
- package/train/train/train.js +126 -0
- package/train/train-blocked-passage/train-blocked-passage.js +25 -0
- package/train/train-blocked-passage.d.ts +3 -0
- package/train/train-blocked-passage.d.ts.map +1 -1
- package/train/train-blocked-passage.js +2 -23
- package/train/train-formation/train-formation.js +91 -0
- package/train/train-formation.d.ts +3 -0
- package/train/train-formation.d.ts.map +1 -1
- package/train/train-formation.js +2 -89
- package/train/train-wagon/train-wagon.js +177 -0
- package/train/train-wagon.d.ts +3 -0
- package/train/train-wagon.d.ts.map +1 -1
- package/train/train-wagon.js +2 -175
- package/train/train.d.ts +3 -0
- package/train/train.d.ts.map +1 -1
- package/train/train.js +2 -124
- package/train.d.ts +3 -0
- package/train.d.ts.map +1 -1
- package/train.js +10 -4
- package/transparent-button-BlbvexCb.js +9 -0
- package/visual-checkbox/visual-checkbox.js +83 -0
- package/visual-checkbox.d.ts +3 -0
- package/visual-checkbox.d.ts.map +1 -1
- package/visual-checkbox.js +2 -81
- package/core/testing/private.d.ts +0 -11
- package/core/testing/private.d.ts.map +0 -1
- package/core/testing/test-setup-ssr.d.ts +0 -2
- package/core/testing/test-setup-ssr.d.ts.map +0 -1
- package/core/testing/test-setup.d.ts +0 -2
- package/core/testing/test-setup.d.ts.map +0 -1
- package/development/core/testing/private.d.ts +0 -11
- package/development/core/testing/private.d.ts.map +0 -1
- package/development/core/testing/test-setup-ssr.d.ts +0 -2
- package/development/core/testing/test-setup-ssr.d.ts.map +0 -1
- package/development/core/testing/test-setup.d.ts +0 -2
- package/development/core/testing/test-setup.d.ts.map +0 -1
|
@@ -1,1384 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
};
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import { i18nCheckboxRequired, i18nInputRequired, i18nSelectionRequired } from "./i18n.js";
|
|
15
|
-
import { isWebkit, isFirefox } from "./dom.js";
|
|
16
|
-
import { sbbInputModalityDetector, interactivityChecker, isArrowKeyPressed, getNextElementIndex } from "./a11y.js";
|
|
17
|
-
import "../screen-reader-only.js";
|
|
18
|
-
const SbbAnimationCompleteMixin = (superClass) => {
|
|
19
|
-
class SbbAnimationCompleteElement extends superClass {
|
|
20
|
-
constructor() {
|
|
21
|
-
super(...arguments);
|
|
22
|
-
this.isAnimating = false;
|
|
23
|
-
this._animationPromise = Promise.resolve();
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Returns a promise which completes whenever an animation ends.
|
|
27
|
-
* When a new animation starts, a new Promise is returned.
|
|
28
|
-
*/
|
|
29
|
-
get animationComplete() {
|
|
30
|
-
return this._animationPromise;
|
|
31
|
-
}
|
|
32
|
-
disconnectedCallback() {
|
|
33
|
-
super.disconnectedCallback();
|
|
34
|
-
this.stopAnimation();
|
|
35
|
-
}
|
|
36
|
-
startAnimation() {
|
|
37
|
-
if (!this.isAnimating) {
|
|
38
|
-
this._animationPromise = this._enqueueAnimation();
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Overriding stopAnimation() breaks functionality.
|
|
43
|
-
*/
|
|
44
|
-
stopAnimation() {
|
|
45
|
-
}
|
|
46
|
-
async _enqueueAnimation() {
|
|
47
|
-
this.isAnimating = true;
|
|
48
|
-
const stopAnimation = this.stopAnimation;
|
|
49
|
-
const result = new Promise((r) => {
|
|
50
|
-
this.stopAnimation = () => {
|
|
51
|
-
stopAnimation();
|
|
52
|
-
this.isAnimating = false;
|
|
53
|
-
r();
|
|
54
|
-
};
|
|
55
|
-
});
|
|
56
|
-
try {
|
|
57
|
-
await this._animationPromise;
|
|
58
|
-
} catch (e) {
|
|
59
|
-
Promise.reject(e);
|
|
60
|
-
}
|
|
61
|
-
return result;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
return SbbAnimationCompleteElement;
|
|
65
|
-
};
|
|
66
|
-
const SbbDisabledMixin = (superClass) => {
|
|
67
|
-
let SbbDisabledElement = (() => {
|
|
68
|
-
var _disabled_accessor_storage, _a;
|
|
69
|
-
let _classSuper = superClass;
|
|
70
|
-
let _disabled_decorators;
|
|
71
|
-
let _disabled_initializers = [];
|
|
72
|
-
let _disabled_extraInitializers = [];
|
|
73
|
-
return _a = class extends _classSuper {
|
|
74
|
-
constructor() {
|
|
75
|
-
super(...arguments);
|
|
76
|
-
__privateAdd(this, _disabled_accessor_storage, __runInitializers(this, _disabled_initializers, false));
|
|
77
|
-
__runInitializers(this, _disabled_extraInitializers);
|
|
78
|
-
}
|
|
79
|
-
/** Whether the component is disabled. */
|
|
80
|
-
get disabled() {
|
|
81
|
-
return __privateGet(this, _disabled_accessor_storage);
|
|
82
|
-
}
|
|
83
|
-
set disabled(value) {
|
|
84
|
-
__privateSet(this, _disabled_accessor_storage, value);
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Will be used as 'or' check to the current disabled state.
|
|
88
|
-
* Can e.g. be used to read disabled state of a group.
|
|
89
|
-
*/
|
|
90
|
-
isDisabledExternally() {
|
|
91
|
-
return false;
|
|
92
|
-
}
|
|
93
|
-
}, _disabled_accessor_storage = new WeakMap(), (() => {
|
|
94
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
95
|
-
_disabled_decorators = [forceType(), property({ reflect: true, type: Boolean }), getOverride((e, v) => v || e.isDisabledExternally())];
|
|
96
|
-
__esDecorate(_a, null, _disabled_decorators, { kind: "accessor", name: "disabled", static: false, private: false, access: { has: (obj) => "disabled" in obj, get: (obj) => obj.disabled, set: (obj, value) => {
|
|
97
|
-
obj.disabled = value;
|
|
98
|
-
} }, metadata: _metadata }, _disabled_initializers, _disabled_extraInitializers);
|
|
99
|
-
if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
100
|
-
})(), _a;
|
|
101
|
-
})();
|
|
102
|
-
return SbbDisabledElement;
|
|
103
|
-
};
|
|
104
|
-
const SbbDisabledInteractiveMixin = (superClass) => {
|
|
105
|
-
let SbbDisabledInteractiveElement = (() => {
|
|
106
|
-
var _disabledInteractive_accessor_storage, _a;
|
|
107
|
-
let _classSuper = superClass;
|
|
108
|
-
let _disabledInteractive_decorators;
|
|
109
|
-
let _disabledInteractive_initializers = [];
|
|
110
|
-
let _disabledInteractive_extraInitializers = [];
|
|
111
|
-
return _a = class extends _classSuper {
|
|
112
|
-
constructor() {
|
|
113
|
-
super(...arguments);
|
|
114
|
-
__privateAdd(this, _disabledInteractive_accessor_storage, __runInitializers(this, _disabledInteractive_initializers, false));
|
|
115
|
-
__runInitializers(this, _disabledInteractive_extraInitializers);
|
|
116
|
-
}
|
|
117
|
-
/** Whether the button should be aria-disabled but stay interactive. */
|
|
118
|
-
get disabledInteractive() {
|
|
119
|
-
return __privateGet(this, _disabledInteractive_accessor_storage);
|
|
120
|
-
}
|
|
121
|
-
set disabledInteractive(value) {
|
|
122
|
-
__privateSet(this, _disabledInteractive_accessor_storage, value);
|
|
123
|
-
}
|
|
124
|
-
}, _disabledInteractive_accessor_storage = new WeakMap(), (() => {
|
|
125
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
126
|
-
_disabledInteractive_decorators = [forceType(), property({ attribute: "disabled-interactive", type: Boolean, reflect: true })];
|
|
127
|
-
__esDecorate(_a, null, _disabledInteractive_decorators, { kind: "accessor", name: "disabledInteractive", static: false, private: false, access: { has: (obj) => "disabledInteractive" in obj, get: (obj) => obj.disabledInteractive, set: (obj, value) => {
|
|
128
|
-
obj.disabledInteractive = value;
|
|
129
|
-
} }, metadata: _metadata }, _disabledInteractive_initializers, _disabledInteractive_extraInitializers);
|
|
130
|
-
if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
131
|
-
})(), _a;
|
|
132
|
-
})();
|
|
133
|
-
return SbbDisabledInteractiveElement;
|
|
134
|
-
};
|
|
135
|
-
const SbbDisabledTabIndexActionMixin = (superClass) => {
|
|
136
|
-
class SbbDisabledTabIndexAction extends SbbDisabledInteractiveMixin(SbbDisabledMixin(superClass)) {
|
|
137
|
-
willUpdate(changedProperties) {
|
|
138
|
-
super.willUpdate(changedProperties);
|
|
139
|
-
if (changedProperties.has("disabledInteractive")) {
|
|
140
|
-
this.internals.ariaDisabled = this.disabledInteractive ? "true" : null;
|
|
141
|
-
}
|
|
142
|
-
if (!changedProperties.has("disabled")) {
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
if (!this.disabled) {
|
|
146
|
-
this.setAttribute("tabindex", "0");
|
|
147
|
-
} else {
|
|
148
|
-
this.removeAttribute("tabindex");
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
return SbbDisabledTabIndexAction;
|
|
153
|
-
};
|
|
154
|
-
const validityKeys = {
|
|
155
|
-
badInput: false,
|
|
156
|
-
customError: false,
|
|
157
|
-
patternMismatch: false,
|
|
158
|
-
rangeOverflow: false,
|
|
159
|
-
rangeUnderflow: false,
|
|
160
|
-
stepMismatch: false,
|
|
161
|
-
tooLong: false,
|
|
162
|
-
tooShort: false,
|
|
163
|
-
typeMismatch: false,
|
|
164
|
-
valueMissing: false
|
|
165
|
-
};
|
|
166
|
-
if (typeof ValidityState === "undefined") {
|
|
167
|
-
const validityClass = class ValidityState {
|
|
168
|
-
get valid() {
|
|
169
|
-
return true;
|
|
170
|
-
}
|
|
171
|
-
constructor() {
|
|
172
|
-
throw new TypeError("Illegal constructor");
|
|
173
|
-
}
|
|
174
|
-
};
|
|
175
|
-
Object.entries(validityKeys).forEach(([key, value]) => Object.assign(validityClass.prototype, {
|
|
176
|
-
get [key]() {
|
|
177
|
-
return value;
|
|
178
|
-
}
|
|
179
|
-
}));
|
|
180
|
-
globalThis.ValidityState = validityClass;
|
|
181
|
-
}
|
|
182
|
-
const SbbFormAssociatedMixin = (superClass) => {
|
|
183
|
-
let SbbFormAssociatedElement = (() => {
|
|
184
|
-
var _formDisabled_accessor_storage, _a;
|
|
185
|
-
let _classSuper = superClass;
|
|
186
|
-
let _instanceExtraInitializers = [];
|
|
187
|
-
let _set_name_decorators;
|
|
188
|
-
let _set_value_decorators;
|
|
189
|
-
let _formDisabled_decorators;
|
|
190
|
-
let _formDisabled_initializers = [];
|
|
191
|
-
let _formDisabled_extraInitializers = [];
|
|
192
|
-
return _a = class extends _classSuper {
|
|
193
|
-
constructor(...args) {
|
|
194
|
-
var _a2;
|
|
195
|
-
super(...args);
|
|
196
|
-
__privateAdd(this, _formDisabled_accessor_storage);
|
|
197
|
-
this._value = (__runInitializers(this, _instanceExtraInitializers), null);
|
|
198
|
-
this.internals = this.attachInternals();
|
|
199
|
-
this._validityStates = /* @__PURE__ */ new Map();
|
|
200
|
-
__privateSet(this, _formDisabled_accessor_storage, __runInitializers(this, _formDisabled_initializers, false));
|
|
201
|
-
__runInitializers(this, _formDisabled_extraInitializers);
|
|
202
|
-
(_a2 = this.addEventListener) == null ? void 0 : _a2.call(this, "invalid", (e) => e.preventDefault());
|
|
203
|
-
}
|
|
204
|
-
/**
|
|
205
|
-
* Returns the form owner of this element.
|
|
206
|
-
*/
|
|
207
|
-
get form() {
|
|
208
|
-
return this.internals.form;
|
|
209
|
-
}
|
|
210
|
-
/**
|
|
211
|
-
* Name of the form element. Will be read from name attribute.
|
|
212
|
-
*
|
|
213
|
-
* @description Developer note: In this case updating the attribute must be synchronous.
|
|
214
|
-
* Due to this it is implemented as a getter/setter and the attributeChangedCallback() handles the diff check.
|
|
215
|
-
*/
|
|
216
|
-
set name(name) {
|
|
217
|
-
this.setAttribute("name", `${name}`);
|
|
218
|
-
this.updateFormValue();
|
|
219
|
-
}
|
|
220
|
-
get name() {
|
|
221
|
-
return this.getAttribute("name") ?? "";
|
|
222
|
-
}
|
|
223
|
-
/** @internal */
|
|
224
|
-
get type() {
|
|
225
|
-
return this.localName;
|
|
226
|
-
}
|
|
227
|
-
/** Value of the form element. */
|
|
228
|
-
set value(value) {
|
|
229
|
-
this._value = value;
|
|
230
|
-
this.updateFormValue();
|
|
231
|
-
}
|
|
232
|
-
get value() {
|
|
233
|
-
return this._value;
|
|
234
|
-
}
|
|
235
|
-
/**
|
|
236
|
-
* Returns the ValidityState object for this element.
|
|
237
|
-
*/
|
|
238
|
-
get validity() {
|
|
239
|
-
return this.internals.validity;
|
|
240
|
-
}
|
|
241
|
-
/**
|
|
242
|
-
* Returns the current error message, if available, which corresponds
|
|
243
|
-
* to the current validation state.
|
|
244
|
-
* Please note that only one message is returned at a time (e.g. if
|
|
245
|
-
* multiple validity states are invalid, only the chronologically first one
|
|
246
|
-
* is returned until it is fixed, at which point the next message might be
|
|
247
|
-
* returned, if it is still applicable). Also a custom validity message
|
|
248
|
-
* (see below) has precedence over native validation messages.
|
|
249
|
-
*/
|
|
250
|
-
get validationMessage() {
|
|
251
|
-
return this.internals.validationMessage;
|
|
252
|
-
}
|
|
253
|
-
/**
|
|
254
|
-
* Returns true if this element will be validated
|
|
255
|
-
* when the form is submitted; false otherwise.
|
|
256
|
-
*/
|
|
257
|
-
get willValidate() {
|
|
258
|
-
return this.internals.willValidate;
|
|
259
|
-
}
|
|
260
|
-
/** Whenever a surrounding form or fieldset is changing its disabled state. */
|
|
261
|
-
get formDisabled() {
|
|
262
|
-
return __privateGet(this, _formDisabled_accessor_storage);
|
|
263
|
-
}
|
|
264
|
-
set formDisabled(value) {
|
|
265
|
-
__privateSet(this, _formDisabled_accessor_storage, value);
|
|
266
|
-
}
|
|
267
|
-
attributeChangedCallback(name, old, value) {
|
|
268
|
-
if (name !== "name" || old !== value) {
|
|
269
|
-
super.attributeChangedCallback(name, old, value);
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
/**
|
|
273
|
-
* Returns true if this element has no validity problems; false otherwise.
|
|
274
|
-
* Fires an invalid event at the element in the latter case.
|
|
275
|
-
*/
|
|
276
|
-
checkValidity() {
|
|
277
|
-
return this.internals.checkValidity();
|
|
278
|
-
}
|
|
279
|
-
/**
|
|
280
|
-
* Returns true if this element has no validity problems; otherwise,
|
|
281
|
-
* returns false, fires an invalid event at the element,
|
|
282
|
-
* and (if the event isn't canceled) reports the problem to the user.
|
|
283
|
-
*/
|
|
284
|
-
reportValidity() {
|
|
285
|
-
return this.internals.reportValidity();
|
|
286
|
-
}
|
|
287
|
-
/**
|
|
288
|
-
* Sets the custom validity message for this element. Use the empty string
|
|
289
|
-
* to indicate that the element does not have a custom validity error.
|
|
290
|
-
*/
|
|
291
|
-
setCustomValidity(message) {
|
|
292
|
-
if (message) {
|
|
293
|
-
this.setValidityFlag("customError", message);
|
|
294
|
-
} else {
|
|
295
|
-
this.removeValidityFlag("customError");
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
/**
|
|
299
|
-
* Is called whenever a surrounding form / fieldset changes disabled state.
|
|
300
|
-
* @param disabled
|
|
301
|
-
*
|
|
302
|
-
* @internal
|
|
303
|
-
*/
|
|
304
|
-
formDisabledCallback(disabled) {
|
|
305
|
-
Promise.resolve().then(() => {
|
|
306
|
-
this.formDisabled = disabled;
|
|
307
|
-
});
|
|
308
|
-
}
|
|
309
|
-
requestUpdate(name, oldValue, options) {
|
|
310
|
-
super.requestUpdate(name, oldValue, options);
|
|
311
|
-
if (this.hasUpdated && this.shouldValidate(name)) {
|
|
312
|
-
this.validate();
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
firstUpdated(changedProperties) {
|
|
316
|
-
super.firstUpdated(changedProperties);
|
|
317
|
-
this.validate();
|
|
318
|
-
}
|
|
319
|
-
/**
|
|
320
|
-
* Marks this element as suffering from the constraint indicated by the
|
|
321
|
-
* flag argument and associates the given message to it.
|
|
322
|
-
* Note that only one message is displayed at a time and custom messages by
|
|
323
|
-
* consumers are always displayed before internal messages and internal
|
|
324
|
-
* messages are displayed in the order they were added.
|
|
325
|
-
* To set/define custom validity state flags, you need to extend the
|
|
326
|
-
* ValidityState prototype (and the CustomValidityState interface).
|
|
327
|
-
*
|
|
328
|
-
* @example
|
|
329
|
-
*
|
|
330
|
-
* // The type of the custom validity state does not need to be boolean.
|
|
331
|
-
* Object.assign(ValidityState.prototype, {
|
|
332
|
-
* get myError(): boolean {
|
|
333
|
-
* return false;
|
|
334
|
-
* },
|
|
335
|
-
* });
|
|
336
|
-
*
|
|
337
|
-
* declare global {
|
|
338
|
-
* interface CustomValidityState {
|
|
339
|
-
* myError: boolean;
|
|
340
|
-
* }
|
|
341
|
-
* }
|
|
342
|
-
*/
|
|
343
|
-
setValidityFlag(flag, message, flagValue) {
|
|
344
|
-
flagValue ?? (flagValue = true);
|
|
345
|
-
const validityState = this._validityStates.get(flag);
|
|
346
|
-
if (!validityState || validityState.message !== message || validityState.flagValue !== flagValue) {
|
|
347
|
-
this._validityStates.set(flag, { flagValue, message });
|
|
348
|
-
this._setInternalValidity();
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
/** Removes the validity state flag entry and updates validity state. */
|
|
352
|
-
removeValidityFlag(flag) {
|
|
353
|
-
if (this._validityStates.has(flag)) {
|
|
354
|
-
this._validityStates.delete(flag);
|
|
355
|
-
this._setInternalValidity();
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
/** To be called whenever the current element needs to be validated. */
|
|
359
|
-
validate() {
|
|
360
|
-
}
|
|
361
|
-
/** Whether validation should be run on a property change with the given name. */
|
|
362
|
-
shouldValidate(name) {
|
|
363
|
-
return !name;
|
|
364
|
-
}
|
|
365
|
-
_setInternalValidity() {
|
|
366
|
-
var _a2;
|
|
367
|
-
let outputMessage = (_a2 = this._validityStates.get("customError")) == null ? void 0 : _a2.message;
|
|
368
|
-
const flags = {};
|
|
369
|
-
this._validityStates.forEach(({ flagValue, message }, flag) => {
|
|
370
|
-
flags[flag] = flagValue;
|
|
371
|
-
outputMessage || (outputMessage = message);
|
|
372
|
-
});
|
|
373
|
-
const customFlags = Object.keys(ValidityState.prototype).filter((f) => !(f in validityKeys) && f !== "valid");
|
|
374
|
-
for (const flag of customFlags) {
|
|
375
|
-
const value = flag in flags ? flags[flag] : false;
|
|
376
|
-
Object.defineProperty(this.internals.validity, flag, { value, configurable: true });
|
|
377
|
-
if (value) {
|
|
378
|
-
flags.customError = true;
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
this.internals.setValidity(flags, outputMessage);
|
|
382
|
-
if (isWebkit) {
|
|
383
|
-
Object.defineProperty(this.internals.validity, "customError", {
|
|
384
|
-
value: this._validityStates.has("customError") || !!flags.customError,
|
|
385
|
-
configurable: true
|
|
386
|
-
});
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
}, _formDisabled_accessor_storage = new WeakMap(), (() => {
|
|
390
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
391
|
-
_set_name_decorators = [property()];
|
|
392
|
-
_set_value_decorators = [property()];
|
|
393
|
-
_formDisabled_decorators = [state()];
|
|
394
|
-
__esDecorate(_a, null, _set_name_decorators, { kind: "setter", name: "name", static: false, private: false, access: { has: (obj) => "name" in obj, set: (obj, value) => {
|
|
395
|
-
obj.name = value;
|
|
396
|
-
} }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
397
|
-
__esDecorate(_a, null, _set_value_decorators, { kind: "setter", name: "value", static: false, private: false, access: { has: (obj) => "value" in obj, set: (obj, value) => {
|
|
398
|
-
obj.value = value;
|
|
399
|
-
} }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
400
|
-
__esDecorate(_a, null, _formDisabled_decorators, { kind: "accessor", name: "formDisabled", static: false, private: false, access: { has: (obj) => "formDisabled" in obj, get: (obj) => obj.formDisabled, set: (obj, value) => {
|
|
401
|
-
obj.formDisabled = value;
|
|
402
|
-
} }, metadata: _metadata }, _formDisabled_initializers, _formDisabled_extraInitializers);
|
|
403
|
-
if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
404
|
-
})(), _a.formAssociated = true, _a;
|
|
405
|
-
})();
|
|
406
|
-
return SbbFormAssociatedElement;
|
|
407
|
-
};
|
|
408
|
-
const SbbRequiredMixin = (superClass) => {
|
|
409
|
-
let SbbRequiredElement = (() => {
|
|
410
|
-
var _a;
|
|
411
|
-
let _classSuper = superClass;
|
|
412
|
-
let _instanceExtraInitializers = [];
|
|
413
|
-
let _set_required_decorators;
|
|
414
|
-
return _a = class extends _classSuper {
|
|
415
|
-
constructor() {
|
|
416
|
-
super(...arguments);
|
|
417
|
-
this._required = (__runInitializers(this, _instanceExtraInitializers), false);
|
|
418
|
-
}
|
|
419
|
-
/** Whether the component is required. */
|
|
420
|
-
set required(value) {
|
|
421
|
-
this._required = Boolean(value);
|
|
422
|
-
}
|
|
423
|
-
get required() {
|
|
424
|
-
return this._required || this.isRequiredExternally();
|
|
425
|
-
}
|
|
426
|
-
willUpdate(changedProperties) {
|
|
427
|
-
super.willUpdate(changedProperties);
|
|
428
|
-
if (changedProperties.has("required")) {
|
|
429
|
-
this.internals.ariaRequired = `${this.required}`;
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
/**
|
|
433
|
-
* Will be used as 'or' check to the current required state.
|
|
434
|
-
* Can e.g. be used to read required state of a group.
|
|
435
|
-
*/
|
|
436
|
-
isRequiredExternally() {
|
|
437
|
-
return false;
|
|
438
|
-
}
|
|
439
|
-
}, (() => {
|
|
440
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
441
|
-
_set_required_decorators = [property({ reflect: true, type: Boolean })];
|
|
442
|
-
__esDecorate(_a, null, _set_required_decorators, { kind: "setter", name: "required", static: false, private: false, access: { has: (obj) => "required" in obj, set: (obj, value) => {
|
|
443
|
-
obj.required = value;
|
|
444
|
-
} }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
445
|
-
if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
446
|
-
})(), _a;
|
|
447
|
-
})();
|
|
448
|
-
return SbbRequiredElement;
|
|
449
|
-
};
|
|
450
|
-
const SbbFormAssociatedCheckboxMixin = (superClass) => {
|
|
451
|
-
let SbbFormAssociatedCheckboxElement = (() => {
|
|
452
|
-
var _a;
|
|
453
|
-
let _classDecorators = [hostAttributes({
|
|
454
|
-
tabindex: "0"
|
|
455
|
-
})];
|
|
456
|
-
let _classDescriptor;
|
|
457
|
-
let _classExtraInitializers = [];
|
|
458
|
-
let _classThis;
|
|
459
|
-
let _classSuper = SbbDisabledMixin(SbbRequiredMixin(SbbFormAssociatedMixin(superClass)));
|
|
460
|
-
let _instanceExtraInitializers = [];
|
|
461
|
-
let _set_checked_decorators;
|
|
462
|
-
_a = class extends _classSuper {
|
|
463
|
-
/** Whether the checkbox is checked. */
|
|
464
|
-
set checked(value) {
|
|
465
|
-
const attributeSetter = typeof value === "object" ? value.attribute : false;
|
|
466
|
-
if (attributeSetter) {
|
|
467
|
-
value = value.value;
|
|
468
|
-
}
|
|
469
|
-
if (this.hasUpdated && !attributeSetter) {
|
|
470
|
-
this._attributeMutationBlocked = true;
|
|
471
|
-
}
|
|
472
|
-
this._checked = Boolean(value);
|
|
473
|
-
this.updateFormValue();
|
|
474
|
-
}
|
|
475
|
-
get checked() {
|
|
476
|
-
return this._checked;
|
|
477
|
-
}
|
|
478
|
-
/**
|
|
479
|
-
* Form type of element.
|
|
480
|
-
* @default 'checkbox'
|
|
481
|
-
*/
|
|
482
|
-
get type() {
|
|
483
|
-
return "checkbox";
|
|
484
|
-
}
|
|
485
|
-
constructor() {
|
|
486
|
-
var _a2, _b, _c;
|
|
487
|
-
super();
|
|
488
|
-
this._attributeMutationBlocked = (__runInitializers(this, _instanceExtraInitializers), false);
|
|
489
|
-
this._languageController = new SbbLanguageController(this);
|
|
490
|
-
this._checked = false;
|
|
491
|
-
this._handleKeyboardInteraction = (event) => {
|
|
492
|
-
if (event.key === " ") {
|
|
493
|
-
this._handleUserInteraction();
|
|
494
|
-
}
|
|
495
|
-
};
|
|
496
|
-
this._handleUserInteraction = () => {
|
|
497
|
-
var _a3;
|
|
498
|
-
if (this.disabled) {
|
|
499
|
-
return;
|
|
500
|
-
}
|
|
501
|
-
(_a3 = this.withUserInteraction) == null ? void 0 : _a3.call(this);
|
|
502
|
-
this.checked = !this.checked;
|
|
503
|
-
this._attributeMutationBlocked = true;
|
|
504
|
-
this.dispatchEvent(new InputEvent("input", { composed: true, bubbles: true }));
|
|
505
|
-
this.dispatchEvent(new Event("change", { bubbles: true }));
|
|
506
|
-
};
|
|
507
|
-
this.internals.role = "checkbox";
|
|
508
|
-
(_a2 = this.addEventListener) == null ? void 0 : _a2.call(this, "click", this._handleUserInteraction);
|
|
509
|
-
(_b = this.addEventListener) == null ? void 0 : _b.call(this, "keydown", preventScrollOnSpacebarPress);
|
|
510
|
-
(_c = this.addEventListener) == null ? void 0 : _c.call(this, "keyup", this._handleKeyboardInteraction);
|
|
511
|
-
}
|
|
512
|
-
attributeChangedCallback(name, old, value) {
|
|
513
|
-
if (name !== "checked" || !this._attributeMutationBlocked) {
|
|
514
|
-
super.attributeChangedCallback(name, old, value);
|
|
515
|
-
}
|
|
516
|
-
}
|
|
517
|
-
/**
|
|
518
|
-
* Is called whenever the form is being reset.
|
|
519
|
-
*
|
|
520
|
-
* @internal
|
|
521
|
-
*/
|
|
522
|
-
formResetCallback() {
|
|
523
|
-
this.checked = this.hasAttribute("checked");
|
|
524
|
-
this._attributeMutationBlocked = false;
|
|
525
|
-
}
|
|
526
|
-
/**
|
|
527
|
-
* Called when the browser is trying to restore element’s state to state in which case
|
|
528
|
-
* reason is "restore", or when the browser is trying to fulfill autofill on behalf of
|
|
529
|
-
* user in which case reason is "autocomplete".
|
|
530
|
-
* In the case of "restore", state is a string, File, or FormData object
|
|
531
|
-
* previously set as the second argument to setFormValue.
|
|
532
|
-
*
|
|
533
|
-
* @internal
|
|
534
|
-
*/
|
|
535
|
-
formStateRestoreCallback(state2, _reason) {
|
|
536
|
-
if (state2) {
|
|
537
|
-
this.checked = state2 === "true";
|
|
538
|
-
}
|
|
539
|
-
}
|
|
540
|
-
updateFormValue() {
|
|
541
|
-
if (this.checked) {
|
|
542
|
-
this.internals.setFormValue(this.value, `${this.checked}`);
|
|
543
|
-
} else {
|
|
544
|
-
this.internals.setFormValue(null);
|
|
545
|
-
}
|
|
546
|
-
}
|
|
547
|
-
shouldValidate(name) {
|
|
548
|
-
return super.shouldValidate(name) || name === "checked" || name === "required";
|
|
549
|
-
}
|
|
550
|
-
validate() {
|
|
551
|
-
super.validate();
|
|
552
|
-
if (this.required && !this.checked) {
|
|
553
|
-
this.setValidityFlag("valueMissing", i18nCheckboxRequired[this._languageController.current]);
|
|
554
|
-
} else {
|
|
555
|
-
this.removeValidityFlag("valueMissing");
|
|
556
|
-
}
|
|
557
|
-
}
|
|
558
|
-
}, _classThis = _a, (() => {
|
|
559
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
560
|
-
_set_checked_decorators = [property({
|
|
561
|
-
type: Boolean,
|
|
562
|
-
converter: {
|
|
563
|
-
...defaultConverter,
|
|
564
|
-
// We need to pass information to the setter so that we know it was called by attribute change.
|
|
565
|
-
fromAttribute: (value, type) => {
|
|
566
|
-
var _a2, _b;
|
|
567
|
-
const result = (_b = (_a2 = defaultConverter).fromAttribute) == null ? void 0 : _b.call(_a2, value, type);
|
|
568
|
-
return { value: result, attribute: true };
|
|
569
|
-
}
|
|
570
|
-
}
|
|
571
|
-
})];
|
|
572
|
-
__esDecorate(_a, null, _set_checked_decorators, { kind: "setter", name: "checked", static: false, private: false, access: { has: (obj) => "checked" in obj, set: (obj, value) => {
|
|
573
|
-
obj.checked = value;
|
|
574
|
-
} }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
575
|
-
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
576
|
-
_classThis = _classDescriptor.value;
|
|
577
|
-
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
578
|
-
__runInitializers(_classThis, _classExtraInitializers);
|
|
579
|
-
})(), _a;
|
|
580
|
-
return _classThis;
|
|
581
|
-
})();
|
|
582
|
-
return SbbFormAssociatedCheckboxElement;
|
|
583
|
-
};
|
|
584
|
-
const SbbFormAssociatedInputMixin = (superClass) => {
|
|
585
|
-
let SbbFormAssociatedInputElement = (() => {
|
|
586
|
-
var _a;
|
|
587
|
-
let _classSuper = SbbRequiredMixin(SbbFormAssociatedMixin(superClass));
|
|
588
|
-
let _instanceExtraInitializers = [];
|
|
589
|
-
let _set_readOnly_decorators;
|
|
590
|
-
let _set_disabled_decorators;
|
|
591
|
-
let _set_placeholder_decorators;
|
|
592
|
-
let __cleanChildren_decorators;
|
|
593
|
-
return _a = class extends _classSuper {
|
|
594
|
-
/**
|
|
595
|
-
* Form type of element.
|
|
596
|
-
* @default 'text'
|
|
597
|
-
*/
|
|
598
|
-
get type() {
|
|
599
|
-
return "text";
|
|
600
|
-
}
|
|
601
|
-
/**
|
|
602
|
-
* The text value of the input element.
|
|
603
|
-
*/
|
|
604
|
-
set value(value) {
|
|
605
|
-
super.value = this._cleanText(value);
|
|
606
|
-
if (this.hasUpdated) {
|
|
607
|
-
this.innerHTML = super.value;
|
|
608
|
-
}
|
|
609
|
-
}
|
|
610
|
-
get value() {
|
|
611
|
-
return super.value ?? "";
|
|
612
|
-
}
|
|
613
|
-
/**
|
|
614
|
-
* Whether the component is readonly.
|
|
615
|
-
* @attr readonly
|
|
616
|
-
* @default false
|
|
617
|
-
*/
|
|
618
|
-
set readOnly(value) {
|
|
619
|
-
this.toggleAttribute("readonly", !!value);
|
|
620
|
-
this.internals.ariaReadOnly = value ? "true" : null;
|
|
621
|
-
this._updateContenteditable();
|
|
622
|
-
}
|
|
623
|
-
get readOnly() {
|
|
624
|
-
return this.hasAttribute("readonly");
|
|
625
|
-
}
|
|
626
|
-
/**
|
|
627
|
-
* Whether the component is disabled.
|
|
628
|
-
* @attr disabled
|
|
629
|
-
* @default false
|
|
630
|
-
*/
|
|
631
|
-
set disabled(value) {
|
|
632
|
-
this.toggleAttribute("disabled", !!value);
|
|
633
|
-
this.internals.ariaDisabled = value ? "true" : null;
|
|
634
|
-
this._updateContenteditable();
|
|
635
|
-
}
|
|
636
|
-
get disabled() {
|
|
637
|
-
return this.hasAttribute("disabled");
|
|
638
|
-
}
|
|
639
|
-
set placeholder(value) {
|
|
640
|
-
if (value) {
|
|
641
|
-
this.setAttribute("placeholder", value);
|
|
642
|
-
} else {
|
|
643
|
-
this.removeAttribute("placeholder");
|
|
644
|
-
}
|
|
645
|
-
this.internals.ariaPlaceholder = value ? value : null;
|
|
646
|
-
}
|
|
647
|
-
get placeholder() {
|
|
648
|
-
return this.getAttribute("placeholder") ?? "";
|
|
649
|
-
}
|
|
650
|
-
constructor() {
|
|
651
|
-
var _a2, _b, _c, _d, _e, _f, _g;
|
|
652
|
-
super();
|
|
653
|
-
this._interacted = (__runInitializers(this, _instanceExtraInitializers), false);
|
|
654
|
-
this._shouldEmitChange = false;
|
|
655
|
-
this._shouldTriggerSubmit = false;
|
|
656
|
-
this.language = new SbbLanguageController(this);
|
|
657
|
-
this.internals.role = "textbox";
|
|
658
|
-
(_a2 = this.addEventListener) == null ? void 0 : _a2.call(this, "input", () => {
|
|
659
|
-
super.value = this._cleanText(this.textContent ?? "");
|
|
660
|
-
this._interacted = true;
|
|
661
|
-
this._shouldEmitChange = true;
|
|
662
|
-
}, { capture: true });
|
|
663
|
-
(_b = this.addEventListener) == null ? void 0 : _b.call(this, "change", () => this._shouldEmitChange = false, { capture: true });
|
|
664
|
-
(_c = this.addEventListener) == null ? void 0 : _c.call(this, "keydown", (event) => {
|
|
665
|
-
var _a3;
|
|
666
|
-
if ((event.key === "Enter" || event.key === "\n") && event.isTrusted) {
|
|
667
|
-
event.preventDefault();
|
|
668
|
-
event.stopImmediatePropagation();
|
|
669
|
-
this._shouldTriggerSubmit = this.dispatchEvent(new KeyboardEvent("keydown", event));
|
|
670
|
-
} else if (isWebkit && this.value && (event.key === "Backspace" || event.key === "Delete") && event.isTrusted) {
|
|
671
|
-
event.preventDefault();
|
|
672
|
-
event.stopImmediatePropagation();
|
|
673
|
-
if (!this.dispatchEvent(new KeyboardEvent("keydown", event))) {
|
|
674
|
-
return;
|
|
675
|
-
}
|
|
676
|
-
const selectedRange = (_a3 = window.getSelection()) == null ? void 0 : _a3.getRangeAt(0);
|
|
677
|
-
if (!selectedRange) {
|
|
678
|
-
return;
|
|
679
|
-
}
|
|
680
|
-
if (selectedRange.startOffset !== selectedRange.endOffset) {
|
|
681
|
-
selectedRange.deleteContents();
|
|
682
|
-
this._dispatchInputEvent();
|
|
683
|
-
} else if (event.key === "Backspace" && selectedRange.startOffset > 0) {
|
|
684
|
-
selectedRange.setStart(selectedRange.startContainer, selectedRange.startOffset - 1);
|
|
685
|
-
selectedRange.deleteContents();
|
|
686
|
-
this._dispatchInputEvent();
|
|
687
|
-
} else if (event.key === "Delete" && selectedRange.endOffset < this.value.length) {
|
|
688
|
-
selectedRange.setEnd(selectedRange.endContainer, selectedRange.endOffset + 1);
|
|
689
|
-
selectedRange.deleteContents();
|
|
690
|
-
this._dispatchInputEvent();
|
|
691
|
-
}
|
|
692
|
-
}
|
|
693
|
-
}, { capture: true });
|
|
694
|
-
(_d = this.addEventListener) == null ? void 0 : _d.call(this, "keyup", (event) => {
|
|
695
|
-
var _a3;
|
|
696
|
-
if (event.key === "Enter" || event.key === "\n") {
|
|
697
|
-
this._emitChangeIfNecessary();
|
|
698
|
-
if (this._shouldTriggerSubmit) {
|
|
699
|
-
this._shouldTriggerSubmit = false;
|
|
700
|
-
(_a3 = this.form) == null ? void 0 : _a3.requestSubmit();
|
|
701
|
-
}
|
|
702
|
-
}
|
|
703
|
-
}, { capture: true });
|
|
704
|
-
(_e = this.addEventListener) == null ? void 0 : _e.call(this, "paste", (e) => {
|
|
705
|
-
var _a3, _b2;
|
|
706
|
-
e.preventDefault();
|
|
707
|
-
const text = this._cleanText(((_a3 = e.clipboardData) == null ? void 0 : _a3.getData("text/plain")) ?? "");
|
|
708
|
-
const selectedRange = (_b2 = window.getSelection()) == null ? void 0 : _b2.getRangeAt(0);
|
|
709
|
-
if (!selectedRange || !text) {
|
|
710
|
-
return;
|
|
711
|
-
}
|
|
712
|
-
selectedRange.deleteContents();
|
|
713
|
-
selectedRange.insertNode(document.createTextNode(text));
|
|
714
|
-
selectedRange.setStart(selectedRange.endContainer, selectedRange.endOffset);
|
|
715
|
-
this._dispatchInputEvent();
|
|
716
|
-
});
|
|
717
|
-
(_f = this.addEventListener) == null ? void 0 : _f.call(this, "focus", () => {
|
|
718
|
-
var _a3;
|
|
719
|
-
if (sbbInputModalityDetector.mostRecentModality === "keyboard") {
|
|
720
|
-
(_a3 = window.getSelection()) == null ? void 0 : _a3.selectAllChildren(this);
|
|
721
|
-
}
|
|
722
|
-
});
|
|
723
|
-
(_g = this.addEventListener) == null ? void 0 : _g.call(this, "blur", () => {
|
|
724
|
-
var _a3;
|
|
725
|
-
(_a3 = window.getSelection()) == null ? void 0 : _a3.removeAllRanges();
|
|
726
|
-
this._emitChangeIfNecessary();
|
|
727
|
-
this.scrollLeft = 0;
|
|
728
|
-
}, { capture: true });
|
|
729
|
-
}
|
|
730
|
-
connectedCallback() {
|
|
731
|
-
super.connectedCallback();
|
|
732
|
-
this.internals.ariaMultiLine = "false";
|
|
733
|
-
this._updateContenteditable();
|
|
734
|
-
this.innerHTML = this.value;
|
|
735
|
-
}
|
|
736
|
-
focus(options) {
|
|
737
|
-
super.focus(options);
|
|
738
|
-
if (!isServer && !this.disabled && !this.readOnly && this.value) {
|
|
739
|
-
const selection = window.getSelection();
|
|
740
|
-
if (!selection) {
|
|
741
|
-
return;
|
|
742
|
-
}
|
|
743
|
-
let range = selection.rangeCount > 0 ? selection.getRangeAt(0) : null;
|
|
744
|
-
if (range && range.startOffset !== 0) {
|
|
745
|
-
return;
|
|
746
|
-
}
|
|
747
|
-
range = document.createRange();
|
|
748
|
-
range.setStart(this.firstChild, this.textContent.length);
|
|
749
|
-
range.collapse(true);
|
|
750
|
-
selection.removeAllRanges();
|
|
751
|
-
selection.addRange(range);
|
|
752
|
-
}
|
|
753
|
-
}
|
|
754
|
-
attributeChangedCallback(name, old, value) {
|
|
755
|
-
if (name !== "value" || !this._interacted) {
|
|
756
|
-
super.attributeChangedCallback(name, old, value);
|
|
757
|
-
}
|
|
758
|
-
}
|
|
759
|
-
/**
|
|
760
|
-
* Is called whenever the form is being reset.
|
|
761
|
-
*
|
|
762
|
-
* @internal
|
|
763
|
-
*/
|
|
764
|
-
formResetCallback() {
|
|
765
|
-
this._interacted = false;
|
|
766
|
-
this.value = this.getAttribute("value") ?? "";
|
|
767
|
-
}
|
|
768
|
-
/**
|
|
769
|
-
* Called when the browser is trying to restore element’s state to state in which case
|
|
770
|
-
* reason is "restore", or when the browser is trying to fulfill autofill on behalf of
|
|
771
|
-
* user in which case reason is "autocomplete".
|
|
772
|
-
* In the case of "restore", state is a string, File, or FormData object
|
|
773
|
-
* previously set as the second argument to setFormValue.
|
|
774
|
-
*
|
|
775
|
-
* @internal
|
|
776
|
-
*/
|
|
777
|
-
formStateRestoreCallback(state2, _reason) {
|
|
778
|
-
if (state2 && typeof state2 === "string") {
|
|
779
|
-
this.value = state2;
|
|
780
|
-
}
|
|
781
|
-
}
|
|
782
|
-
async firstUpdated(changedProperties) {
|
|
783
|
-
super.firstUpdated(changedProperties);
|
|
784
|
-
if (this.value && !this.innerHTML.length) {
|
|
785
|
-
this.innerHTML = this.value;
|
|
786
|
-
}
|
|
787
|
-
}
|
|
788
|
-
updateFormValue() {
|
|
789
|
-
this.internals.setFormValue(this.value, this.value);
|
|
790
|
-
}
|
|
791
|
-
shouldValidate(name) {
|
|
792
|
-
return super.shouldValidate(name) || name === "value" || name === "required";
|
|
793
|
-
}
|
|
794
|
-
validate() {
|
|
795
|
-
super.validate();
|
|
796
|
-
if (this.required && !this.value) {
|
|
797
|
-
this.setValidityFlag("valueMissing", i18nInputRequired[this.language.current]);
|
|
798
|
-
} else {
|
|
799
|
-
this.removeValidityFlag("valueMissing");
|
|
800
|
-
}
|
|
801
|
-
}
|
|
802
|
-
_cleanText(value) {
|
|
803
|
-
return `${value}`.replace(/[\n\r]+/g, "");
|
|
804
|
-
}
|
|
805
|
-
_dispatchInputEvent() {
|
|
806
|
-
this.dispatchEvent(new InputEvent("input", { bubbles: true, composed: true }));
|
|
807
|
-
}
|
|
808
|
-
_cleanChildren() {
|
|
809
|
-
if (this.childElementCount) {
|
|
810
|
-
for (const element of this.children) {
|
|
811
|
-
element.remove();
|
|
812
|
-
}
|
|
813
|
-
}
|
|
814
|
-
}
|
|
815
|
-
_updateContenteditable() {
|
|
816
|
-
if (!isServer && this.isConnected) {
|
|
817
|
-
const value = this.disabled || this.readOnly ? "false" : isFirefox ? "true" : "plaintext-only";
|
|
818
|
-
this.setAttribute("contenteditable", value);
|
|
819
|
-
if (this.readOnly) {
|
|
820
|
-
this.setAttribute("tabindex", "0");
|
|
821
|
-
} else {
|
|
822
|
-
this.removeAttribute("tabindex");
|
|
823
|
-
}
|
|
824
|
-
}
|
|
825
|
-
}
|
|
826
|
-
_emitChangeIfNecessary() {
|
|
827
|
-
if (this._shouldEmitChange) {
|
|
828
|
-
this._shouldEmitChange = false;
|
|
829
|
-
this.dispatchEvent(new Event("change", { bubbles: true }));
|
|
830
|
-
}
|
|
831
|
-
}
|
|
832
|
-
render() {
|
|
833
|
-
return html`<slot @slotchange=${this._cleanChildren}></slot>`;
|
|
834
|
-
}
|
|
835
|
-
}, (() => {
|
|
836
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
837
|
-
_set_readOnly_decorators = [property({ type: Boolean })];
|
|
838
|
-
_set_disabled_decorators = [property({ type: Boolean })];
|
|
839
|
-
_set_placeholder_decorators = [property({ attribute: false })];
|
|
840
|
-
__cleanChildren_decorators = [eventOptions({ passive: true })];
|
|
841
|
-
__esDecorate(_a, null, _set_readOnly_decorators, { kind: "setter", name: "readOnly", static: false, private: false, access: { has: (obj) => "readOnly" in obj, set: (obj, value) => {
|
|
842
|
-
obj.readOnly = value;
|
|
843
|
-
} }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
844
|
-
__esDecorate(_a, null, _set_disabled_decorators, { kind: "setter", name: "disabled", static: false, private: false, access: { has: (obj) => "disabled" in obj, set: (obj, value) => {
|
|
845
|
-
obj.disabled = value;
|
|
846
|
-
} }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
847
|
-
__esDecorate(_a, null, _set_placeholder_decorators, { kind: "setter", name: "placeholder", static: false, private: false, access: { has: (obj) => "placeholder" in obj, set: (obj, value) => {
|
|
848
|
-
obj.placeholder = value;
|
|
849
|
-
} }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
850
|
-
__esDecorate(_a, null, __cleanChildren_decorators, { kind: "method", name: "_cleanChildren", static: false, private: false, access: { has: (obj) => "_cleanChildren" in obj, get: (obj) => obj._cleanChildren }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
851
|
-
if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
852
|
-
})(), _a;
|
|
853
|
-
})();
|
|
854
|
-
return SbbFormAssociatedInputElement;
|
|
855
|
-
};
|
|
856
|
-
const radioButtonRegistry = /* @__PURE__ */ new WeakMap();
|
|
857
|
-
const SbbFormAssociatedRadioButtonMixin = (superClass) => {
|
|
858
|
-
let SbbFormAssociatedRadioButtonElement = (() => {
|
|
859
|
-
var _a;
|
|
860
|
-
let _classSuper = SbbDisabledMixin(SbbRequiredMixin(SbbFormAssociatedMixin(superClass)));
|
|
861
|
-
let _instanceExtraInitializers = [];
|
|
862
|
-
let _set_checked_decorators;
|
|
863
|
-
return _a = class extends _classSuper {
|
|
864
|
-
/**
|
|
865
|
-
* Whether the radio button is checked.
|
|
866
|
-
*/
|
|
867
|
-
set checked(value) {
|
|
868
|
-
this._checked = !!value;
|
|
869
|
-
this.toggleAttribute("data-checked", this.checked);
|
|
870
|
-
this.internals.ariaChecked = this.checked.toString();
|
|
871
|
-
this.updateFormValue();
|
|
872
|
-
this._synchronizeGroupState();
|
|
873
|
-
}
|
|
874
|
-
get checked() {
|
|
875
|
-
return this._checked;
|
|
876
|
-
}
|
|
877
|
-
set name(value) {
|
|
878
|
-
super.name = value;
|
|
879
|
-
this._disconnectFromRegistry();
|
|
880
|
-
this._connectToRegistry();
|
|
881
|
-
this._synchronizeGroupState();
|
|
882
|
-
}
|
|
883
|
-
get name() {
|
|
884
|
-
return super.name;
|
|
885
|
-
}
|
|
886
|
-
/**
|
|
887
|
-
* Form type of element.
|
|
888
|
-
* @default 'radio'
|
|
889
|
-
*/
|
|
890
|
-
get type() {
|
|
891
|
-
return "radio";
|
|
892
|
-
}
|
|
893
|
-
constructor() {
|
|
894
|
-
var _a2;
|
|
895
|
-
super();
|
|
896
|
-
this._checked = (__runInitializers(this, _instanceExtraInitializers), false);
|
|
897
|
-
this.abort = new SbbConnectedAbortController(this);
|
|
898
|
-
this._languageController = new SbbLanguageController(this);
|
|
899
|
-
this.internals.role = "radio";
|
|
900
|
-
(_a2 = this.addEventListener) == null ? void 0 : _a2.call(this, "keydown", (e) => this._handleArrowKeyDown(e));
|
|
901
|
-
}
|
|
902
|
-
connectedCallback() {
|
|
903
|
-
super.connectedCallback();
|
|
904
|
-
this._connectToRegistry();
|
|
905
|
-
this._synchronizeGroupState();
|
|
906
|
-
}
|
|
907
|
-
disconnectedCallback() {
|
|
908
|
-
super.disconnectedCallback();
|
|
909
|
-
this._disconnectFromRegistry();
|
|
910
|
-
}
|
|
911
|
-
/**
|
|
912
|
-
* Is called whenever the form is being reset.
|
|
913
|
-
* @internal
|
|
914
|
-
*/
|
|
915
|
-
formResetCallback() {
|
|
916
|
-
this.checked = this.hasAttribute("checked");
|
|
917
|
-
}
|
|
918
|
-
/**
|
|
919
|
-
* Called when the browser is trying to restore element’s state to state in which case
|
|
920
|
-
* reason is "restore", or when the browser is trying to fulfill autofill on behalf of
|
|
921
|
-
* user in which case reason is "autocomplete".
|
|
922
|
-
* @internal
|
|
923
|
-
*/
|
|
924
|
-
formStateRestoreCallback(state2, _reason) {
|
|
925
|
-
if (state2) {
|
|
926
|
-
this.checked = state2 === this.value;
|
|
927
|
-
}
|
|
928
|
-
}
|
|
929
|
-
willUpdate(changedProperties) {
|
|
930
|
-
super.willUpdate(changedProperties);
|
|
931
|
-
if (changedProperties.has("disabled")) {
|
|
932
|
-
this.updateFocusableRadios();
|
|
933
|
-
}
|
|
934
|
-
}
|
|
935
|
-
firstUpdated(changedProperties) {
|
|
936
|
-
super.firstUpdated(changedProperties);
|
|
937
|
-
this.updateFocusableRadios();
|
|
938
|
-
}
|
|
939
|
-
/**
|
|
940
|
-
* Called on `value` change
|
|
941
|
-
* If 'checked', update the value. Otherwise, do nothing.
|
|
942
|
-
*/
|
|
943
|
-
updateFormValue() {
|
|
944
|
-
if (this.checked) {
|
|
945
|
-
this.internals.setFormValue(this.value, this.value);
|
|
946
|
-
} else {
|
|
947
|
-
this.internals.setFormValue(null);
|
|
948
|
-
}
|
|
949
|
-
}
|
|
950
|
-
shouldValidate(name) {
|
|
951
|
-
return super.shouldValidate(name) || name === "checked" || name === "required";
|
|
952
|
-
}
|
|
953
|
-
/**
|
|
954
|
-
* Sets the validity of all associated radio buttons.
|
|
955
|
-
* If any radio button is required, all associated are required as well.
|
|
956
|
-
*/
|
|
957
|
-
validate() {
|
|
958
|
-
super.validate();
|
|
959
|
-
if (!this.associatedRadioButtons) {
|
|
960
|
-
return;
|
|
961
|
-
}
|
|
962
|
-
let required = false;
|
|
963
|
-
let checked = false;
|
|
964
|
-
for (const radio of this.associatedRadioButtons) {
|
|
965
|
-
required || (required = radio.required);
|
|
966
|
-
checked || (checked = radio.checked);
|
|
967
|
-
}
|
|
968
|
-
if (required && !checked) {
|
|
969
|
-
this.associatedRadioButtons.forEach((r) => r.setValidityFlag("valueMissing", i18nSelectionRequired[this._languageController.current]));
|
|
970
|
-
} else {
|
|
971
|
-
this.associatedRadioButtons.forEach((r) => r.removeValidityFlag("valueMissing"));
|
|
972
|
-
}
|
|
973
|
-
}
|
|
974
|
-
/**
|
|
975
|
-
* Only a single radio should be focusable in the group. Defined as:
|
|
976
|
-
* - the checked radio;
|
|
977
|
-
* - the first non-disabled radio in DOM order;
|
|
978
|
-
*/
|
|
979
|
-
updateFocusableRadios() {
|
|
980
|
-
if (!this.hasUpdated) {
|
|
981
|
-
return;
|
|
982
|
-
}
|
|
983
|
-
const radios = this._interactableGroupedRadios();
|
|
984
|
-
const checkedIndex = radios.findIndex((r) => r.checked && !r.disabled && !r.formDisabled);
|
|
985
|
-
const focusableIndex = checkedIndex !== -1 ? checkedIndex : radios.findIndex((r) => !r.disabled && !r.formDisabled);
|
|
986
|
-
if (focusableIndex !== -1) {
|
|
987
|
-
radios[focusableIndex].tabIndex = 0;
|
|
988
|
-
radios.splice(focusableIndex, 1);
|
|
989
|
-
}
|
|
990
|
-
radios.forEach((r) => r.removeAttribute("tabindex"));
|
|
991
|
-
}
|
|
992
|
-
async navigateByKeyboard(next) {
|
|
993
|
-
next.checked = true;
|
|
994
|
-
this.emitChangeEvents();
|
|
995
|
-
await next.updateComplete;
|
|
996
|
-
next.focus();
|
|
997
|
-
}
|
|
998
|
-
emitChangeEvents() {
|
|
999
|
-
this.dispatchEvent(new InputEvent("input", { bubbles: true, cancelable: true, composed: true }));
|
|
1000
|
-
this.dispatchEvent(new Event("change", { bubbles: true }));
|
|
1001
|
-
}
|
|
1002
|
-
_synchronizeGroupState() {
|
|
1003
|
-
if (this.checked) {
|
|
1004
|
-
this._deselectGroupedRadios();
|
|
1005
|
-
}
|
|
1006
|
-
this.updateFocusableRadios();
|
|
1007
|
-
}
|
|
1008
|
-
/**
|
|
1009
|
-
* Add `this` to the radioButton registry
|
|
1010
|
-
*/
|
|
1011
|
-
_connectToRegistry() {
|
|
1012
|
-
if (!this.name || isServer) {
|
|
1013
|
-
return;
|
|
1014
|
-
}
|
|
1015
|
-
const root = this.form ?? this.getRootNode();
|
|
1016
|
-
this._radioButtonGroupsMap = radioButtonRegistry.get(root);
|
|
1017
|
-
if (!this._radioButtonGroupsMap) {
|
|
1018
|
-
this._radioButtonGroupsMap = /* @__PURE__ */ new Map();
|
|
1019
|
-
radioButtonRegistry.set(root, this._radioButtonGroupsMap);
|
|
1020
|
-
}
|
|
1021
|
-
this.associatedRadioButtons = this._radioButtonGroupsMap.get(this.name);
|
|
1022
|
-
if (!this.associatedRadioButtons) {
|
|
1023
|
-
this.associatedRadioButtons = /* @__PURE__ */ new Set();
|
|
1024
|
-
this._radioButtonGroupsMap.set(this.name, this.associatedRadioButtons);
|
|
1025
|
-
}
|
|
1026
|
-
const entries = Array.from(this.associatedRadioButtons);
|
|
1027
|
-
this.associatedRadioButtons.clear();
|
|
1028
|
-
const index = entries.findIndex((r) => this.compareDocumentPosition(r) & Node.DOCUMENT_POSITION_FOLLOWING);
|
|
1029
|
-
if (index !== -1) {
|
|
1030
|
-
entries.splice(index, 0, this);
|
|
1031
|
-
} else {
|
|
1032
|
-
entries.push(this);
|
|
1033
|
-
}
|
|
1034
|
-
entries.forEach((r) => this.associatedRadioButtons.add(r));
|
|
1035
|
-
this.validate();
|
|
1036
|
-
}
|
|
1037
|
-
/**
|
|
1038
|
-
* Remove `this` from the radioButton registry and, if the group is empty, delete the entry from the groups Map
|
|
1039
|
-
*/
|
|
1040
|
-
_disconnectFromRegistry() {
|
|
1041
|
-
var _a2, _b, _c;
|
|
1042
|
-
(_a2 = this.associatedRadioButtons) == null ? void 0 : _a2.delete(this);
|
|
1043
|
-
if (((_b = this.associatedRadioButtons) == null ? void 0 : _b.size) === 0) {
|
|
1044
|
-
(_c = this._radioButtonGroupsMap) == null ? void 0 : _c.delete(this.name);
|
|
1045
|
-
} else {
|
|
1046
|
-
this.validate();
|
|
1047
|
-
}
|
|
1048
|
-
this.associatedRadioButtons = void 0;
|
|
1049
|
-
this._radioButtonGroupsMap = void 0;
|
|
1050
|
-
}
|
|
1051
|
-
/**
|
|
1052
|
-
* Return a list of 'interactable' grouped radios, ordered in DOM order
|
|
1053
|
-
*/
|
|
1054
|
-
_interactableGroupedRadios() {
|
|
1055
|
-
return Array.from(this.associatedRadioButtons ?? []).filter((el) => interactivityChecker.isVisible(el));
|
|
1056
|
-
}
|
|
1057
|
-
/**
|
|
1058
|
-
* Deselect other radio of the same group
|
|
1059
|
-
*/
|
|
1060
|
-
_deselectGroupedRadios() {
|
|
1061
|
-
Array.from(this.associatedRadioButtons ?? []).filter((r) => r !== this).forEach((r) => r.checked = false);
|
|
1062
|
-
}
|
|
1063
|
-
async _handleArrowKeyDown(evt) {
|
|
1064
|
-
if (!isArrowKeyPressed(evt)) {
|
|
1065
|
-
return;
|
|
1066
|
-
}
|
|
1067
|
-
evt.preventDefault();
|
|
1068
|
-
const enabledRadios = this._interactableGroupedRadios().filter((r) => !r.disabled && !r.formDisabled);
|
|
1069
|
-
const current = enabledRadios.indexOf(this);
|
|
1070
|
-
const nextIndex = getNextElementIndex(evt, current, enabledRadios.length);
|
|
1071
|
-
await this.navigateByKeyboard(enabledRadios[nextIndex]);
|
|
1072
|
-
}
|
|
1073
|
-
}, (() => {
|
|
1074
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
1075
|
-
_set_checked_decorators = [property({ type: Boolean })];
|
|
1076
|
-
__esDecorate(_a, null, _set_checked_decorators, { kind: "setter", name: "checked", static: false, private: false, access: { has: (obj) => "checked" in obj, set: (obj, value) => {
|
|
1077
|
-
obj.checked = value;
|
|
1078
|
-
} }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
1079
|
-
if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
1080
|
-
})(), _a;
|
|
1081
|
-
})();
|
|
1082
|
-
return SbbFormAssociatedRadioButtonElement;
|
|
1083
|
-
};
|
|
1084
|
-
const SbbHydrationMixin = (base) => {
|
|
1085
|
-
class SbbHydrationMixinClass extends base {
|
|
1086
|
-
/**
|
|
1087
|
-
* Returns a Promise that resolves when the element has completed hydration.
|
|
1088
|
-
* The Promise value is a boolean that is `true` if the element required hydration
|
|
1089
|
-
* and `false` if not.
|
|
1090
|
-
*
|
|
1091
|
-
* @return A promise of a boolean that resolves to true once the hydration completed.
|
|
1092
|
-
* @internal
|
|
1093
|
-
*/
|
|
1094
|
-
get hydrationComplete() {
|
|
1095
|
-
return this._hydrationComplete;
|
|
1096
|
-
}
|
|
1097
|
-
/** Returns whether hydration is required and not completed. */
|
|
1098
|
-
get hydrationRequired() {
|
|
1099
|
-
return this._hydrationRequired;
|
|
1100
|
-
}
|
|
1101
|
-
constructor(...args) {
|
|
1102
|
-
var _a;
|
|
1103
|
-
super(...args);
|
|
1104
|
-
this._hydrationComplete = new Promise((resolve) => this._resolveHydration = resolve);
|
|
1105
|
-
this._hydrationRequired = !!this.shadowRoot;
|
|
1106
|
-
if (!this._hydrationRequired) {
|
|
1107
|
-
this._resolveHydration(false);
|
|
1108
|
-
} else {
|
|
1109
|
-
const suppressSlotchangeEvent = (event) => {
|
|
1110
|
-
if (this._hydrationRequired) {
|
|
1111
|
-
event.stopImmediatePropagation();
|
|
1112
|
-
}
|
|
1113
|
-
};
|
|
1114
|
-
const eventOptions2 = { capture: true };
|
|
1115
|
-
const slots = (_a = this.shadowRoot) == null ? void 0 : _a.querySelectorAll("slot");
|
|
1116
|
-
if (slots == null ? void 0 : slots.length) {
|
|
1117
|
-
slots.forEach((slot) => slot.addEventListener("slotchange", suppressSlotchangeEvent, eventOptions2));
|
|
1118
|
-
this.hydrationComplete.then(() => slots.forEach((slot) => {
|
|
1119
|
-
slot.removeEventListener("slotchange", suppressSlotchangeEvent, eventOptions2);
|
|
1120
|
-
if (slot.assignedNodes().length) {
|
|
1121
|
-
slot.dispatchEvent(new Event("slotchange", { bubbles: true }));
|
|
1122
|
-
}
|
|
1123
|
-
}));
|
|
1124
|
-
}
|
|
1125
|
-
}
|
|
1126
|
-
}
|
|
1127
|
-
update(changedProperties) {
|
|
1128
|
-
super.update(changedProperties);
|
|
1129
|
-
if (this._hydrationRequired) {
|
|
1130
|
-
this._hydrationRequired = false;
|
|
1131
|
-
this._resolveHydration(true);
|
|
1132
|
-
}
|
|
1133
|
-
}
|
|
1134
|
-
}
|
|
1135
|
-
return SbbHydrationMixinClass;
|
|
1136
|
-
};
|
|
1137
|
-
const SSR_CHILD_COUNT_ATTRIBUTE = "data-ssr-child-count";
|
|
1138
|
-
const SLOTNAME_PREFIX = "li";
|
|
1139
|
-
const SbbNamedSlotListMixin = (superClass) => {
|
|
1140
|
-
let NamedSlotListElement = (() => {
|
|
1141
|
-
var _listChildren_accessor_storage, _a;
|
|
1142
|
-
let _classSuper = SbbHydrationMixin(superClass);
|
|
1143
|
-
let _listChildren_decorators;
|
|
1144
|
-
let _listChildren_initializers = [];
|
|
1145
|
-
let _listChildren_extraInitializers = [];
|
|
1146
|
-
return _a = class extends _classSuper {
|
|
1147
|
-
constructor() {
|
|
1148
|
-
super(...arguments);
|
|
1149
|
-
__privateAdd(this, _listChildren_accessor_storage);
|
|
1150
|
-
__privateSet(this, _listChildren_accessor_storage, __runInitializers(this, _listChildren_initializers, []));
|
|
1151
|
-
this._handleSlotchange = (__runInitializers(this, _listChildren_extraInitializers), () => {
|
|
1152
|
-
const listChildren = Array.from(this.children ?? []).filter((e) => this.listChildLocalNames.includes(e.localName));
|
|
1153
|
-
if (listChildren.length === this.listChildren.length && this.listChildren.every((e, i) => listChildren[i] === e)) {
|
|
1154
|
-
return;
|
|
1155
|
-
}
|
|
1156
|
-
this.listChildren.filter((c) => !listChildren.includes(c)).forEach((c) => c.removeAttribute("slot"));
|
|
1157
|
-
this.listChildren = listChildren;
|
|
1158
|
-
this.listChildren.forEach((c, index) => c.setAttribute("slot", `${SLOTNAME_PREFIX}-${index}`));
|
|
1159
|
-
this.removeAttribute(SSR_CHILD_COUNT_ATTRIBUTE);
|
|
1160
|
-
});
|
|
1161
|
-
}
|
|
1162
|
-
/**
|
|
1163
|
-
* A list of children with the defined tag names.
|
|
1164
|
-
* This array is only updated if there is an actual change
|
|
1165
|
-
* to the child elements.
|
|
1166
|
-
*/
|
|
1167
|
-
get listChildren() {
|
|
1168
|
-
return __privateGet(this, _listChildren_accessor_storage);
|
|
1169
|
-
}
|
|
1170
|
-
set listChildren(value) {
|
|
1171
|
-
__privateSet(this, _listChildren_accessor_storage, value);
|
|
1172
|
-
}
|
|
1173
|
-
connectedCallback() {
|
|
1174
|
-
var _a2;
|
|
1175
|
-
super.connectedCallback();
|
|
1176
|
-
(_a2 = this.shadowRoot) == null ? void 0 : _a2.addEventListener("slotchange", this._handleSlotchange, { passive: true });
|
|
1177
|
-
}
|
|
1178
|
-
disconnectedCallback() {
|
|
1179
|
-
var _a2;
|
|
1180
|
-
super.disconnectedCallback();
|
|
1181
|
-
(_a2 = this.shadowRoot) == null ? void 0 : _a2.removeEventListener("slotchange", this._handleSlotchange);
|
|
1182
|
-
}
|
|
1183
|
-
/**
|
|
1184
|
-
* Renders list and list slots for slotted children or a number of list slots
|
|
1185
|
-
* corresponding to the `data-ssr-child-count` attribute value.
|
|
1186
|
-
*
|
|
1187
|
-
* This is a possible optimization for SSR, as in an SSR Lit environment
|
|
1188
|
-
* other elements are not available, but might be available in the meta
|
|
1189
|
-
* framework wrapper (like e.g. React). This allows to provide the number of
|
|
1190
|
-
* children to be passed via the `data-ssr-child-count` attribute value.
|
|
1191
|
-
*/
|
|
1192
|
-
renderList(attributes = {}, listItemAttributes = {}) {
|
|
1193
|
-
const listSlotNames = this.listSlotEntries(listItemAttributes);
|
|
1194
|
-
if (listSlotNames.length >= 2) {
|
|
1195
|
-
return html`
|
|
1196
|
-
<ul
|
|
1197
|
-
class=${attributes.class || this.localName}
|
|
1198
|
-
aria-label=${attributes.ariaLabel || nothing}
|
|
1199
|
-
aria-labelledby=${attributes.ariaLabelledby || nothing}
|
|
1200
|
-
>
|
|
1201
|
-
${listSlotNames.map((slot) => html`
|
|
1202
|
-
<li aria-hidden=${slot.ariaHidden || nothing}>
|
|
1203
|
-
<slot name=${slot.name}></slot>
|
|
1204
|
-
</li>
|
|
1205
|
-
`)}
|
|
1206
|
-
</ul>
|
|
1207
|
-
${this.renderHiddenSlot()}
|
|
1208
|
-
`;
|
|
1209
|
-
} else if (listSlotNames.length === 1) {
|
|
1210
|
-
return html`<sbb-screen-reader-only>${attributes.ariaLabel}</sbb-screen-reader-only>
|
|
1211
|
-
<span class=${attributes.class || this.localName}>
|
|
1212
|
-
<span><slot name=${listSlotNames[0].name}></slot></span>
|
|
1213
|
-
</span>
|
|
1214
|
-
${this.renderHiddenSlot()} `;
|
|
1215
|
-
} else {
|
|
1216
|
-
return this.renderHiddenSlot();
|
|
1217
|
-
}
|
|
1218
|
-
}
|
|
1219
|
-
/**
|
|
1220
|
-
* Returns an array of SbbNamedSlotProperties, which holds the list slot names and the hidden property;
|
|
1221
|
-
* its length corresponds to the number of matched children or the `data-ssr-child-count` attribute value.
|
|
1222
|
-
*
|
|
1223
|
-
* This is a possible optimization for SSR, as in an SSR Lit environment
|
|
1224
|
-
* other elements are not available, but might be available in the meta
|
|
1225
|
-
* framework wrapper (like e.g. React). This allows to provide the number of
|
|
1226
|
-
* children to be passed via the `data-ssr-child-count` attribute value.
|
|
1227
|
-
*/
|
|
1228
|
-
listSlotEntries(listItemAttributes) {
|
|
1229
|
-
const listChildren = this.listChildren.length ? this.listChildren : Array.from({ length: +(this.getAttribute(SSR_CHILD_COUNT_ATTRIBUTE) ?? 0) });
|
|
1230
|
-
return listChildren.map((e, i) => {
|
|
1231
|
-
var _a2;
|
|
1232
|
-
return {
|
|
1233
|
-
name: `${SLOTNAME_PREFIX}-${i}`,
|
|
1234
|
-
ariaHidden: ((_a2 = listItemAttributes == null ? void 0 : listItemAttributes.localNameVisualOnly) == null ? void 0 : _a2.includes(e.localName)) ?? false
|
|
1235
|
-
};
|
|
1236
|
-
});
|
|
1237
|
-
}
|
|
1238
|
-
/**
|
|
1239
|
-
* Returns a hidden slot, which is intended as the children change detection.
|
|
1240
|
-
* When an element without a slot attribute is slotted to the element, it triggers
|
|
1241
|
-
* the slotchange event, which can be used to assign it to the appropriate named slot.
|
|
1242
|
-
*/
|
|
1243
|
-
renderHiddenSlot() {
|
|
1244
|
-
return html`<span hidden><slot></slot></span>`;
|
|
1245
|
-
}
|
|
1246
|
-
}, _listChildren_accessor_storage = new WeakMap(), (() => {
|
|
1247
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
1248
|
-
_listChildren_decorators = [state()];
|
|
1249
|
-
__esDecorate(_a, null, _listChildren_decorators, { kind: "accessor", name: "listChildren", static: false, private: false, access: { has: (obj) => "listChildren" in obj, get: (obj) => obj.listChildren, set: (obj, value) => {
|
|
1250
|
-
obj.listChildren = value;
|
|
1251
|
-
} }, metadata: _metadata }, _listChildren_initializers, _listChildren_extraInitializers);
|
|
1252
|
-
if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
1253
|
-
})(), _a;
|
|
1254
|
-
})();
|
|
1255
|
-
return NamedSlotListElement;
|
|
1256
|
-
};
|
|
1257
|
-
const SbbNegativeMixin = (superClass) => {
|
|
1258
|
-
let SbbNegativeElement = (() => {
|
|
1259
|
-
var _negative_accessor_storage, _a;
|
|
1260
|
-
let _classSuper = superClass;
|
|
1261
|
-
let _negative_decorators;
|
|
1262
|
-
let _negative_initializers = [];
|
|
1263
|
-
let _negative_extraInitializers = [];
|
|
1264
|
-
return _a = class extends _classSuper {
|
|
1265
|
-
constructor() {
|
|
1266
|
-
super(...arguments);
|
|
1267
|
-
__privateAdd(this, _negative_accessor_storage, __runInitializers(this, _negative_initializers, false));
|
|
1268
|
-
__runInitializers(this, _negative_extraInitializers);
|
|
1269
|
-
}
|
|
1270
|
-
/** Negative coloring variant flag. */
|
|
1271
|
-
get negative() {
|
|
1272
|
-
return __privateGet(this, _negative_accessor_storage);
|
|
1273
|
-
}
|
|
1274
|
-
set negative(value) {
|
|
1275
|
-
__privateSet(this, _negative_accessor_storage, value);
|
|
1276
|
-
}
|
|
1277
|
-
}, _negative_accessor_storage = new WeakMap(), (() => {
|
|
1278
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
1279
|
-
_negative_decorators = [forceType(), property({ reflect: true, type: Boolean })];
|
|
1280
|
-
__esDecorate(_a, null, _negative_decorators, { kind: "accessor", name: "negative", static: false, private: false, access: { has: (obj) => "negative" in obj, get: (obj) => obj.negative, set: (obj, value) => {
|
|
1281
|
-
obj.negative = value;
|
|
1282
|
-
} }, metadata: _metadata }, _negative_initializers, _negative_extraInitializers);
|
|
1283
|
-
if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
1284
|
-
})(), _a;
|
|
1285
|
-
})();
|
|
1286
|
-
return SbbNegativeElement;
|
|
1287
|
-
};
|
|
1288
|
-
const SbbPanelMixin = (superClass) => {
|
|
1289
|
-
let SbbPanelElement = (() => {
|
|
1290
|
-
var _color_accessor_storage, _borderless_accessor_storage, _expansionState_accessor_storage, _a;
|
|
1291
|
-
let _classSuper = superClass;
|
|
1292
|
-
let _color_decorators;
|
|
1293
|
-
let _color_initializers = [];
|
|
1294
|
-
let _color_extraInitializers = [];
|
|
1295
|
-
let _borderless_decorators;
|
|
1296
|
-
let _borderless_initializers = [];
|
|
1297
|
-
let _borderless_extraInitializers = [];
|
|
1298
|
-
let _expansionState_decorators;
|
|
1299
|
-
let _expansionState_initializers = [];
|
|
1300
|
-
let _expansionState_extraInitializers = [];
|
|
1301
|
-
return _a = class extends _classSuper {
|
|
1302
|
-
constructor() {
|
|
1303
|
-
super(...arguments);
|
|
1304
|
-
__privateAdd(this, _color_accessor_storage);
|
|
1305
|
-
__privateAdd(this, _borderless_accessor_storage);
|
|
1306
|
-
__privateAdd(this, _expansionState_accessor_storage);
|
|
1307
|
-
__privateSet(this, _color_accessor_storage, __runInitializers(this, _color_initializers, "white"));
|
|
1308
|
-
__privateSet(this, _borderless_accessor_storage, (__runInitializers(this, _color_extraInitializers), __runInitializers(this, _borderless_initializers, false)));
|
|
1309
|
-
__privateSet(this, _expansionState_accessor_storage, (__runInitializers(this, _borderless_extraInitializers), __runInitializers(this, _expansionState_initializers, "")));
|
|
1310
|
-
this._panelConnected = (__runInitializers(this, _expansionState_extraInitializers), new EventEmitter(this, _a.events.panelConnected, { bubbles: true }));
|
|
1311
|
-
}
|
|
1312
|
-
/** The background color of the panel. */
|
|
1313
|
-
get color() {
|
|
1314
|
-
return __privateGet(this, _color_accessor_storage);
|
|
1315
|
-
}
|
|
1316
|
-
set color(value) {
|
|
1317
|
-
__privateSet(this, _color_accessor_storage, value);
|
|
1318
|
-
}
|
|
1319
|
-
/** Whether the unselected panel has a border. */
|
|
1320
|
-
get borderless() {
|
|
1321
|
-
return __privateGet(this, _borderless_accessor_storage);
|
|
1322
|
-
}
|
|
1323
|
-
set borderless(value) {
|
|
1324
|
-
__privateSet(this, _borderless_accessor_storage, value);
|
|
1325
|
-
}
|
|
1326
|
-
/** @internal used for accessibility label when in expansion panel */
|
|
1327
|
-
get expansionState() {
|
|
1328
|
-
return __privateGet(this, _expansionState_accessor_storage);
|
|
1329
|
-
}
|
|
1330
|
-
set expansionState(value) {
|
|
1331
|
-
__privateSet(this, _expansionState_accessor_storage, value);
|
|
1332
|
-
}
|
|
1333
|
-
connectedCallback() {
|
|
1334
|
-
var _a2, _b;
|
|
1335
|
-
super.connectedCallback();
|
|
1336
|
-
this._panelConnected.emit();
|
|
1337
|
-
(_b = (_a2 = this.closest) == null ? void 0 : _a2.call(this, "sbb-radio-button-group, sbb-checkbox-group")) == null ? void 0 : _b.toggleAttribute("data-has-panel", true);
|
|
1338
|
-
}
|
|
1339
|
-
}, _color_accessor_storage = new WeakMap(), _borderless_accessor_storage = new WeakMap(), _expansionState_accessor_storage = new WeakMap(), (() => {
|
|
1340
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
1341
|
-
_color_decorators = [property({ reflect: true })];
|
|
1342
|
-
_borderless_decorators = [forceType(), property({ reflect: true, type: Boolean })];
|
|
1343
|
-
_expansionState_decorators = [forceType(), property()];
|
|
1344
|
-
__esDecorate(_a, null, _color_decorators, { kind: "accessor", name: "color", static: false, private: false, access: { has: (obj) => "color" in obj, get: (obj) => obj.color, set: (obj, value) => {
|
|
1345
|
-
obj.color = value;
|
|
1346
|
-
} }, metadata: _metadata }, _color_initializers, _color_extraInitializers);
|
|
1347
|
-
__esDecorate(_a, null, _borderless_decorators, { kind: "accessor", name: "borderless", static: false, private: false, access: { has: (obj) => "borderless" in obj, get: (obj) => obj.borderless, set: (obj, value) => {
|
|
1348
|
-
obj.borderless = value;
|
|
1349
|
-
} }, metadata: _metadata }, _borderless_initializers, _borderless_extraInitializers);
|
|
1350
|
-
__esDecorate(_a, null, _expansionState_decorators, { kind: "accessor", name: "expansionState", static: false, private: false, access: { has: (obj) => "expansionState" in obj, get: (obj) => obj.expansionState, set: (obj, value) => {
|
|
1351
|
-
obj.expansionState = value;
|
|
1352
|
-
} }, metadata: _metadata }, _expansionState_initializers, _expansionState_extraInitializers);
|
|
1353
|
-
if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
1354
|
-
})(), _a.events = {
|
|
1355
|
-
panelConnected: "panelConnected"
|
|
1356
|
-
}, _a;
|
|
1357
|
-
})();
|
|
1358
|
-
return SbbPanelElement;
|
|
1359
|
-
};
|
|
1360
|
-
const SbbUpdateSchedulerMixin = (base) => {
|
|
1361
|
-
class SbbUpdateSchedulerElement extends base {
|
|
1362
|
-
constructor() {
|
|
1363
|
-
super(...arguments);
|
|
1364
|
-
this._updatePromise = Promise.resolve();
|
|
1365
|
-
this._updateResolve = () => {
|
|
1366
|
-
};
|
|
1367
|
-
}
|
|
1368
|
-
startUpdate() {
|
|
1369
|
-
this._updatePromise = new Promise((r) => this._updateResolve = r);
|
|
1370
|
-
}
|
|
1371
|
-
completeUpdate() {
|
|
1372
|
-
this._updateResolve();
|
|
1373
|
-
}
|
|
1374
|
-
async getUpdateComplete() {
|
|
1375
|
-
const result = await super.getUpdateComplete();
|
|
1376
|
-
await this._updatePromise;
|
|
1377
|
-
return result;
|
|
1378
|
-
}
|
|
1379
|
-
}
|
|
1380
|
-
return SbbUpdateSchedulerElement;
|
|
1381
|
-
};
|
|
1
|
+
import { SbbAnimationCompleteMixin } from "./mixins/animation-complete-mixin.js";
|
|
2
|
+
import { SbbDisabledInteractiveMixin, SbbDisabledMixin, SbbDisabledTabIndexActionMixin } from "./mixins/disabled-mixin.js";
|
|
3
|
+
import { SbbFormAssociatedCheckboxMixin } from "./mixins/form-associated-checkbox-mixin.js";
|
|
4
|
+
import { SbbFormAssociatedInputMixin } from "./mixins/form-associated-input-mixin.js";
|
|
5
|
+
import { SbbFormAssociatedMixin } from "./mixins/form-associated-mixin.js";
|
|
6
|
+
import { SbbFormAssociatedRadioButtonMixin, radioButtonRegistry } from "./mixins/form-associated-radio-button-mixin.js";
|
|
7
|
+
import { SbbHydrationMixin } from "./mixins/hydration-mixin.js";
|
|
8
|
+
import { SbbNamedSlotListMixin } from "./mixins/named-slot-list-mixin.js";
|
|
9
|
+
import { SbbNegativeMixin } from "./mixins/negative-mixin.js";
|
|
10
|
+
import { SbbPanelMixin } from "./mixins/panel-mixin.js";
|
|
11
|
+
import { SbbRequiredMixin } from "./mixins/required-mixin.js";
|
|
12
|
+
import { SbbUpdateSchedulerMixin } from "./mixins/update-scheduler-mixin.js";
|
|
13
|
+
import { css } from "lit";
|
|
1382
14
|
const panelCommon = css`:host {
|
|
1383
15
|
--sbb-selection-panel-background: var(
|
|
1384
16
|
--sbb-selection-expansion-panel-inner-background,
|
|
@@ -1459,7 +91,7 @@ const panelCommon = css`:host {
|
|
|
1459
91
|
}
|
|
1460
92
|
:host(:focus-visible) .sbb-selection-panel {
|
|
1461
93
|
outline-offset: var(--sbb-focus-outline-offset);
|
|
1462
|
-
outline: var(--sbb-focus-outline-color) solid var(--sbb-focus-outline-width);
|
|
94
|
+
outline: var(--sbb-focus-outline-color) var(--sbb-focus-outline-style, solid) var(--sbb-focus-outline-width);
|
|
1463
95
|
}
|
|
1464
96
|
|
|
1465
97
|
.sbb-selection-panel__badge {
|
|
@@ -1501,4 +133,4 @@ export {
|
|
|
1501
133
|
panelCommon as panelCommonStyle,
|
|
1502
134
|
radioButtonRegistry
|
|
1503
135
|
};
|
|
1504
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWl4aW5zLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvY29yZS9taXhpbnMvYW5pbWF0aW9uLWNvbXBsZXRlLW1peGluLnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvbWl4aW5zL2Rpc2FibGVkLW1peGluLnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvbWl4aW5zL2Zvcm0tYXNzb2NpYXRlZC1taXhpbi50cyIsIi4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9jb3JlL21peGlucy9yZXF1aXJlZC1taXhpbi50cyIsIi4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9jb3JlL21peGlucy9mb3JtLWFzc29jaWF0ZWQtY2hlY2tib3gtbWl4aW4udHMiLCIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvY29yZS9taXhpbnMvZm9ybS1hc3NvY2lhdGVkLWlucHV0LW1peGluLnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvbWl4aW5zL2Zvcm0tYXNzb2NpYXRlZC1yYWRpby1idXR0b24tbWl4aW4udHMiLCIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvY29yZS9taXhpbnMvaHlkcmF0aW9uLW1peGluLnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvbWl4aW5zL25hbWVkLXNsb3QtbGlzdC1taXhpbi50cyIsIi4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9jb3JlL21peGlucy9uZWdhdGl2ZS1taXhpbi50cyIsIi4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9jb3JlL21peGlucy9wYW5lbC1taXhpbi50cyIsIi4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9jb3JlL21peGlucy91cGRhdGUtc2NoZWR1bGVyLW1peGluLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5cbmltcG9ydCB0eXBlIHsgQWJzdHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4vY29uc3RydWN0b3IuanMnO1xuXG5leHBvcnQgZGVjbGFyZSBjbGFzcyBTYmJBbmltYXRpb25Db21wbGV0ZU1peGluVHlwZSB7XG4gIHB1YmxpYyBpc0FuaW1hdGluZzogYm9vbGVhbjtcbiAgcHVibGljIGdldCBhbmltYXRpb25Db21wbGV0ZSgpOiBQcm9taXNlPHZvaWQ+IHwgbnVsbDtcbiAgcHJvdGVjdGVkIHN0YXJ0QW5pbWF0aW9uKCk6IHZvaWQ7XG4gIHByb3RlY3RlZCBzdG9wQW5pbWF0aW9uKCk6IHZvaWQ7XG59XG5cbi8qKlxuICogRW5oYW5jZXMgdGhlIGNvbXBvbmVudCB3aXRoIGEgUHJvbWlzZSB3aGljaCByZXNvbHZlcyB3aGVuZXZlciBhbiBhbmltYXRpb24gZW5kcy5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGNvbnN0IFNiYkFuaW1hdGlvbkNvbXBsZXRlTWl4aW4gPSA8VCBleHRlbmRzIEFic3RyYWN0Q29uc3RydWN0b3I8TGl0RWxlbWVudD4+KFxuICBzdXBlckNsYXNzOiBULFxuKTogQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJBbmltYXRpb25Db21wbGV0ZU1peGluVHlwZT4gJiBUID0+IHtcbiAgYWJzdHJhY3QgY2xhc3MgU2JiQW5pbWF0aW9uQ29tcGxldGVFbGVtZW50XG4gICAgZXh0ZW5kcyBzdXBlckNsYXNzXG4gICAgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYkFuaW1hdGlvbkNvbXBsZXRlTWl4aW5UeXBlPlxuICB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgY29tcG9uZW50IGlzIGN1cnJlbnRseSBhbmltYXRpbmcuXG4gICAgICovXG4gICAgcHVibGljIGlzQW5pbWF0aW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcHJvbWlzZSB3aGljaCBjb21wbGV0ZXMgd2hlbmV2ZXIgYW4gYW5pbWF0aW9uIGVuZHMuXG4gICAgICogV2hlbiBhIG5ldyBhbmltYXRpb24gc3RhcnRzLCBhIG5ldyBQcm9taXNlIGlzIHJldHVybmVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgYW5pbWF0aW9uQ29tcGxldGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICByZXR1cm4gdGhpcy5fYW5pbWF0aW9uUHJvbWlzZTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfYW5pbWF0aW9uUHJvbWlzZTogUHJvbWlzZTx2b2lkPiA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgcHVibGljIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICAgIHRoaXMuc3RvcEFuaW1hdGlvbigpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzdGFydEFuaW1hdGlvbigpOiB2b2lkIHtcbiAgICAgIGlmICghdGhpcy5pc0FuaW1hdGluZykge1xuICAgICAgICB0aGlzLl9hbmltYXRpb25Qcm9taXNlID0gdGhpcy5fZW5xdWV1ZUFuaW1hdGlvbigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE92ZXJyaWRpbmcgc3RvcEFuaW1hdGlvbigpIGJyZWFrcyBmdW5jdGlvbmFsaXR5LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBzdG9wQW5pbWF0aW9uKCk6IHZvaWQge31cblxuICAgIHByaXZhdGUgYXN5bmMgX2VucXVldWVBbmltYXRpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICB0aGlzLmlzQW5pbWF0aW5nID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHN0b3BBbmltYXRpb24gPSB0aGlzLnN0b3BBbmltYXRpb247XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBQcm9taXNlPHZvaWQ+KChyKSA9PiB7XG4gICAgICAgIHRoaXMuc3RvcEFuaW1hdGlvbiA9ICgpID0+IHtcbiAgICAgICAgICBzdG9wQW5pbWF0aW9uKCk7XG4gICAgICAgICAgdGhpcy5pc0FuaW1hdGluZyA9IGZhbHNlO1xuICAgICAgICAgIHIoKTtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gRW5zdXJlIGFueSBwcmV2aW91cyB1cGRhdGUgaGFzIHJlc29sdmVkIGJlZm9yZSB1cGRhdGluZy5cbiAgICAgICAgYXdhaXQgdGhpcy5fYW5pbWF0aW9uUHJvbWlzZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gUmVmaXJlIGFueSBwcmV2aW91cyBlcnJvcnMgYXN5bmMgc28gdGhleSBkbyBub3QgZGlzcnVwdCB0aGUgdXBkYXRlXG4gICAgICAgIC8vIGN5Y2xlLiBFcnJvcnMgYXJlIHJlLWZpcmVkIHNvIGRldmVsb3BlcnMgaGF2ZSBhIGNoYW5jZSB0byBvYnNlcnZlXG4gICAgICAgIC8vIHRoZW0sIGFuZCB0aGlzIGNhbiBiZSBkb25lIGJ5IGltcGxlbWVudGluZ1xuICAgICAgICAvLyBgd2luZG93Lm9udW5oYW5kbGVkcmVqZWN0aW9uYC5cbiAgICAgICAgUHJvbWlzZS5yZWplY3QoZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBTYmJBbmltYXRpb25Db21wbGV0ZUVsZW1lbnQgYXMgdW5rbm93biBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYkFuaW1hdGlvbkNvbXBsZXRlTWl4aW5UeXBlPiAmXG4gICAgVDtcbn07XG4iLCJpbXBvcnQgdHlwZSB7IExpdEVsZW1lbnQsIFByb3BlcnR5VmFsdWVzIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBmb3JjZVR5cGUsIGdldE92ZXJyaWRlIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB0eXBlIHsgQWJzdHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4vY29uc3RydWN0b3IuanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJGb3JtQXNzb2NpYXRlZE1peGluVHlwZSB9IGZyb20gJy4vZm9ybS1hc3NvY2lhdGVkLW1peGluLmpzJztcblxuZXhwb3J0IGRlY2xhcmUgY2xhc3MgU2JiRGlzYWJsZWRNaXhpblR5cGUge1xuICBwdWJsaWMgYWNjZXNzb3IgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIHByb3RlY3RlZCBpc0Rpc2FibGVkRXh0ZXJuYWxseSgpOiBib29sZWFuO1xufVxuXG5leHBvcnQgZGVjbGFyZSBjbGFzcyBTYmJEaXNhYmxlZEludGVyYWN0aXZlTWl4aW5UeXBlIHtcbiAgcHVibGljIGFjY2Vzc29yIGRpc2FibGVkSW50ZXJhY3RpdmU6IGJvb2xlYW47XG59XG5cbi8qKlxuICogRW5oYW5jZSB5b3VyIGNvbXBvbmVudCB3aXRoIGEgZGlzYWJsZWQgcHJvcGVydHkuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJEaXNhYmxlZE1peGluID0gPFQgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiRGlzYWJsZWRNaXhpblR5cGU+ICYgVCA9PiB7XG4gIGFic3RyYWN0IGNsYXNzIFNiYkRpc2FibGVkRWxlbWVudCBleHRlbmRzIHN1cGVyQ2xhc3MgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYkRpc2FibGVkTWl4aW5UeXBlPiB7XG4gICAgLyoqIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC4gKi9cbiAgICBAZm9yY2VUeXBlKClcbiAgICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pXG4gICAgQGdldE92ZXJyaWRlKChlOiBTYmJEaXNhYmxlZEVsZW1lbnQsIHY6IGJvb2xlYW4pOiBib29sZWFuID0+IHYgfHwgZS5pc0Rpc2FibGVkRXh0ZXJuYWxseSgpKVxuICAgIHB1YmxpYyBhY2Nlc3NvciBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2lsbCBiZSB1c2VkIGFzICdvcicgY2hlY2sgdG8gdGhlIGN1cnJlbnQgZGlzYWJsZWQgc3RhdGUuXG4gICAgICogQ2FuIGUuZy4gYmUgdXNlZCB0byByZWFkIGRpc2FibGVkIHN0YXRlIG9mIGEgZ3JvdXAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGlzRGlzYWJsZWRFeHRlcm5hbGx5KCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBTYmJEaXNhYmxlZEVsZW1lbnQgYXMgdW5rbm93biBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYkRpc2FibGVkTWl4aW5UeXBlPiAmIFQ7XG59O1xuXG4vKipcbiAqIEVuaGFuY2UgeW91ciBjb21wb25lbnQgd2l0aCBhIGRpc2FibGVkIGludGVyYWN0aXZlIHByb3BlcnR5LlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgU2JiRGlzYWJsZWRJbnRlcmFjdGl2ZU1peGluID0gPFxuICBUIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxMaXRFbGVtZW50ICYgU2JiRGlzYWJsZWRNaXhpblR5cGU+LFxuPihcbiAgc3VwZXJDbGFzczogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiRGlzYWJsZWRJbnRlcmFjdGl2ZU1peGluVHlwZT4gJiBUID0+IHtcbiAgYWJzdHJhY3QgY2xhc3MgU2JiRGlzYWJsZWRJbnRlcmFjdGl2ZUVsZW1lbnRcbiAgICBleHRlbmRzIHN1cGVyQ2xhc3NcbiAgICBpbXBsZW1lbnRzIFBhcnRpYWw8U2JiRGlzYWJsZWRJbnRlcmFjdGl2ZU1peGluVHlwZT5cbiAge1xuICAgIC8qKiBXaGV0aGVyIHRoZSBidXR0b24gc2hvdWxkIGJlIGFyaWEtZGlzYWJsZWQgYnV0IHN0YXkgaW50ZXJhY3RpdmUuICovXG4gICAgQGZvcmNlVHlwZSgpXG4gICAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnZGlzYWJsZWQtaW50ZXJhY3RpdmUnLCB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0pXG4gICAgcHVibGljIGFjY2Vzc29yIGRpc2FibGVkSW50ZXJhY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBTYmJEaXNhYmxlZEludGVyYWN0aXZlRWxlbWVudCBhcyB1bmtub3duIGFzIEFic3RyYWN0Q29uc3RydWN0b3I8U2JiRGlzYWJsZWRJbnRlcmFjdGl2ZU1peGluVHlwZT4gJlxuICAgIFQ7XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgU2JiRGlzYWJsZWRUYWJJbmRleEFjdGlvbk1peGluID0gPFxuICBUIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxMaXRFbGVtZW50ICYgU2JiRm9ybUFzc29jaWF0ZWRNaXhpblR5cGU+LFxuPihcbiAgc3VwZXJDbGFzczogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiRGlzYWJsZWRNaXhpblR5cGUgJiBTYmJEaXNhYmxlZEludGVyYWN0aXZlTWl4aW5UeXBlPiAmIFQgPT4ge1xuICBhYnN0cmFjdCBjbGFzcyBTYmJEaXNhYmxlZFRhYkluZGV4QWN0aW9uXG4gICAgZXh0ZW5kcyBTYmJEaXNhYmxlZEludGVyYWN0aXZlTWl4aW4oU2JiRGlzYWJsZWRNaXhpbihzdXBlckNsYXNzKSlcbiAgICBpbXBsZW1lbnRzIFNiYkRpc2FibGVkTWl4aW5UeXBlLCBTYmJEaXNhYmxlZEludGVyYWN0aXZlTWl4aW5UeXBlXG4gIHtcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdkaXNhYmxlZEludGVyYWN0aXZlJykpIHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbHMuYXJpYURpc2FibGVkID0gdGhpcy5kaXNhYmxlZEludGVyYWN0aXZlID8gJ3RydWUnIDogbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKCFjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2Rpc2FibGVkJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKCd0YWJpbmRleCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gU2JiRGlzYWJsZWRUYWJJbmRleEFjdGlvbiBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPFxuICAgIFNiYkRpc2FibGVkTWl4aW5UeXBlICYgU2JiRGlzYWJsZWRJbnRlcmFjdGl2ZU1peGluVHlwZVxuICA+ICZcbiAgICBUO1xufTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZSAqL1xuaW1wb3J0IHR5cGUgeyBMaXRFbGVtZW50LCBQcm9wZXJ0eURlY2xhcmF0aW9uLCBQcm9wZXJ0eVZhbHVlcyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IGlzV2Via2l0IH0gZnJvbSAnLi4vZG9tLmpzJztcblxuaW1wb3J0IHR5cGUgeyBBYnN0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi9jb25zdHJ1Y3Rvci5qcyc7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgLyoqXG4gICAqIERlZmluZXMgY3VzdG9tIHZhbGlkaWR0eSBzdGF0ZSBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgaW50ZXJmYWNlIEN1c3RvbVZhbGlkaXR5U3RhdGUge31cbiAgaW50ZXJmYWNlIFZhbGlkaXR5U3RhdGUgZXh0ZW5kcyBDdXN0b21WYWxpZGl0eVN0YXRlIHt9XG4gIGludGVyZmFjZSBWYWxpZGl0eVN0YXRlRmxhZ3MgZXh0ZW5kcyBQYXJ0aWFsPEN1c3RvbVZhbGlkaXR5U3RhdGU+IHt9XG59XG5cbmNvbnN0IHZhbGlkaXR5S2V5czogUmVxdWlyZWQ8T21pdDxWYWxpZGl0eVN0YXRlRmxhZ3MsIGtleW9mIEN1c3RvbVZhbGlkaXR5U3RhdGU+PiA9IHtcbiAgYmFkSW5wdXQ6IGZhbHNlLFxuICBjdXN0b21FcnJvcjogZmFsc2UsXG4gIHBhdHRlcm5NaXNtYXRjaDogZmFsc2UsXG4gIHJhbmdlT3ZlcmZsb3c6IGZhbHNlLFxuICByYW5nZVVuZGVyZmxvdzogZmFsc2UsXG4gIHN0ZXBNaXNtYXRjaDogZmFsc2UsXG4gIHRvb0xvbmc6IGZhbHNlLFxuICB0b29TaG9ydDogZmFsc2UsXG4gIHR5cGVNaXNtYXRjaDogZmFsc2UsXG4gIHZhbHVlTWlzc2luZzogZmFsc2UsXG59O1xuLy8gV2UgbmVlZCBWYWxpZGl0eVN0YXRlIGluIHRoZSBnbG9iYWwgY29udGV4dCwgYXMgd2UgY2hlY2sgdGhlIHByb3RvdHlwZSBmb3Jcbi8vIGV4dGVuc2lvbnMuIEluIGVudmlyb25tZW50cyB3aGVyZSB0aGF0IGlzIG5vdCB0aGUgY2FzZSAoZS5nLiBOb2RlLmpzKSB3ZVxuLy8gcGF0Y2ggaXQgd2l0aCBhIG1pbmltYWwgc2hpbS5cbmlmICh0eXBlb2YgVmFsaWRpdHlTdGF0ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgY29uc3QgdmFsaWRpdHlDbGFzcyA9IGNsYXNzIFZhbGlkaXR5U3RhdGUge1xuICAgIHB1YmxpYyBnZXQgdmFsaWQoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0lsbGVnYWwgY29uc3RydWN0b3InKTtcbiAgICB9XG4gIH07XG4gIE9iamVjdC5lbnRyaWVzKHZhbGlkaXR5S2V5cykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PlxuICAgIE9iamVjdC5hc3NpZ24odmFsaWRpdHlDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgIGdldCBba2V5XSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSxcbiAgICB9KSxcbiAgKTtcbiAgZ2xvYmFsVGhpcy5WYWxpZGl0eVN0YXRlID0gdmFsaWRpdHlDbGFzcyBhcyB1bmtub3duIGFzIHR5cGVvZiBWYWxpZGl0eVN0YXRlO1xufVxuXG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBTYmJGb3JtQXNzb2NpYXRlZE1peGluVHlwZTxWID0gc3RyaW5nPiB7XG4gIHB1YmxpYyBnZXQgZm9ybSgpOiBIVE1MRm9ybUVsZW1lbnQgfCBudWxsO1xuICBwdWJsaWMgYWNjZXNzb3IgbmFtZTogc3RyaW5nO1xuICBwdWJsaWMgZ2V0IHR5cGUoKTogc3RyaW5nO1xuICBwdWJsaWMgYWNjZXNzb3IgdmFsdWU6IFYgfCBudWxsO1xuXG4gIHB1YmxpYyBnZXQgdmFsaWRpdHkoKTogVmFsaWRpdHlTdGF0ZTtcbiAgcHVibGljIGdldCB2YWxpZGF0aW9uTWVzc2FnZSgpOiBzdHJpbmc7XG4gIHB1YmxpYyBnZXQgd2lsbFZhbGlkYXRlKCk6IGJvb2xlYW47XG5cbiAgcHJvdGVjdGVkIGZvcm1EaXNhYmxlZDogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGludGVybmFsczogRWxlbWVudEludGVybmFscztcblxuICBwdWJsaWMgY2hlY2tWYWxpZGl0eSgpOiBib29sZWFuO1xuICBwdWJsaWMgcmVwb3J0VmFsaWRpdHkoKTogYm9vbGVhbjtcbiAgcHVibGljIHNldEN1c3RvbVZhbGlkaXR5KG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQ7XG5cbiAgcHVibGljIGZvcm1Bc3NvY2lhdGVkQ2FsbGJhY2s/KGZvcm06IEhUTUxGb3JtRWxlbWVudCB8IG51bGwpOiB2b2lkO1xuICBwdWJsaWMgZm9ybURpc2FibGVkQ2FsbGJhY2soZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkO1xuICBwdWJsaWMgYWJzdHJhY3QgZm9ybVJlc2V0Q2FsbGJhY2soKTogdm9pZDtcbiAgcHVibGljIGFic3RyYWN0IGZvcm1TdGF0ZVJlc3RvcmVDYWxsYmFjayhcbiAgICBzdGF0ZTogRm9ybVJlc3RvcmVTdGF0ZSB8IG51bGwsXG4gICAgcmVhc29uOiBGb3JtUmVzdG9yZVJlYXNvbixcbiAgKTogdm9pZDtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgdXBkYXRlRm9ybVZhbHVlKCk6IHZvaWQ7XG4gIHByb3RlY3RlZCBzZXRWYWxpZGl0eUZsYWc8VCBleHRlbmRzIGtleW9mIFZhbGlkaXR5U3RhdGVGbGFncz4oXG4gICAgZmxhZzogVCxcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgZmxhZ1ZhbHVlPzogVmFsaWRpdHlTdGF0ZUZsYWdzW1RdLFxuICApOiB2b2lkO1xuICBwcm90ZWN0ZWQgcmVtb3ZlVmFsaWRpdHlGbGFnPFQgZXh0ZW5kcyBrZXlvZiBWYWxpZGl0eVN0YXRlRmxhZ3M+KGZsYWc6IFQpOiB2b2lkO1xuICBwcm90ZWN0ZWQgdmFsaWRhdGUoKTogdm9pZDtcbiAgcHJvdGVjdGVkIHNob3VsZFZhbGlkYXRlKG5hbWU6IFByb3BlcnR5S2V5IHwgdW5kZWZpbmVkKTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgRm9ybUFzc29jaWF0ZWRNaXhpbiBlbmFibGVzIG5hdGl2ZSBmb3JtIHN1cHBvcnQgZm9yIGN1c3RvbSBjb250cm9scy5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGNvbnN0IFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW4gPSA8VCBleHRlbmRzIEFic3RyYWN0Q29uc3RydWN0b3I8TGl0RWxlbWVudD4sIFYgPSBzdHJpbmc+KFxuICBzdXBlckNsYXNzOiBULFxuKTogQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJGb3JtQXNzb2NpYXRlZE1peGluVHlwZTxWPj4gJiBUID0+IHtcbiAgYWJzdHJhY3QgY2xhc3MgU2JiRm9ybUFzc29jaWF0ZWRFbGVtZW50XG4gICAgZXh0ZW5kcyBzdXBlckNsYXNzXG4gICAgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW5UeXBlPFY+PlxuICB7XG4gICAgcHVibGljIHN0YXRpYyBmb3JtQXNzb2NpYXRlZCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBmb3JtIG93bmVyIG9mIHRoaXMgZWxlbWVudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGZvcm0oKTogSFRNTEZvcm1FbGVtZW50IHwgbnVsbCB7XG4gICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbHMuZm9ybTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOYW1lIG9mIHRoZSBmb3JtIGVsZW1lbnQuIFdpbGwgYmUgcmVhZCBmcm9tIG5hbWUgYXR0cmlidXRlLlxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uIERldmVsb3BlciBub3RlOiBJbiB0aGlzIGNhc2UgdXBkYXRpbmcgdGhlIGF0dHJpYnV0ZSBtdXN0IGJlIHN5bmNocm9ub3VzLlxuICAgICAqIER1ZSB0byB0aGlzIGl0IGlzIGltcGxlbWVudGVkIGFzIGEgZ2V0dGVyL3NldHRlciBhbmQgdGhlIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIGhhbmRsZXMgdGhlIGRpZmYgY2hlY2suXG4gICAgICovXG4gICAgQHByb3BlcnR5KClcbiAgICBwdWJsaWMgc2V0IG5hbWUobmFtZTogc3RyaW5nKSB7XG4gICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnbmFtZScsIGAke25hbWV9YCk7XG5cbiAgICAgIC8vIEZvciBgRm9ybURhdGFgIHZhbHVlcywgd2UgaGF2ZSB0byBtYW51YWxseSB1cGRhdGUgdGhlIGZpZWxkTmFtZSBrZXlcbiAgICAgIHRoaXMudXBkYXRlRm9ybVZhbHVlKCk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKCduYW1lJykgPz8gJyc7XG4gICAgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMubG9jYWxOYW1lO1xuICAgIH1cblxuICAgIC8qKiBWYWx1ZSBvZiB0aGUgZm9ybSBlbGVtZW50LiAqL1xuICAgIEBwcm9wZXJ0eSgpXG4gICAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogViB8IG51bGwpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLnVwZGF0ZUZvcm1WYWx1ZSgpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IFYgfCBudWxsIHtcbiAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfdmFsdWU6IFYgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIFZhbGlkaXR5U3RhdGUgb2JqZWN0IGZvciB0aGlzIGVsZW1lbnQuXG4gICAgICovXG4gICAgcHVibGljIGdldCB2YWxpZGl0eSgpOiBWYWxpZGl0eVN0YXRlIHtcbiAgICAgIHJldHVybiB0aGlzLmludGVybmFscy52YWxpZGl0eTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGVycm9yIG1lc3NhZ2UsIGlmIGF2YWlsYWJsZSwgd2hpY2ggY29ycmVzcG9uZHNcbiAgICAgKiB0byB0aGUgY3VycmVudCB2YWxpZGF0aW9uIHN0YXRlLlxuICAgICAqIFBsZWFzZSBub3RlIHRoYXQgb25seSBvbmUgbWVzc2FnZSBpcyByZXR1cm5lZCBhdCBhIHRpbWUgKGUuZy4gaWZcbiAgICAgKiBtdWx0aXBsZSB2YWxpZGl0eSBzdGF0ZXMgYXJlIGludmFsaWQsIG9ubHkgdGhlIGNocm9ub2xvZ2ljYWxseSBmaXJzdCBvbmVcbiAgICAgKiBpcyByZXR1cm5lZCB1bnRpbCBpdCBpcyBmaXhlZCwgYXQgd2hpY2ggcG9pbnQgdGhlIG5leHQgbWVzc2FnZSBtaWdodCBiZVxuICAgICAqIHJldHVybmVkLCBpZiBpdCBpcyBzdGlsbCBhcHBsaWNhYmxlKS4gQWxzbyBhIGN1c3RvbSB2YWxpZGl0eSBtZXNzYWdlXG4gICAgICogKHNlZSBiZWxvdykgaGFzIHByZWNlZGVuY2Ugb3ZlciBuYXRpdmUgdmFsaWRhdGlvbiBtZXNzYWdlcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHZhbGlkYXRpb25NZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbHMudmFsaWRhdGlvbk1lc3NhZ2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgZWxlbWVudCB3aWxsIGJlIHZhbGlkYXRlZFxuICAgICAqIHdoZW4gdGhlIGZvcm0gaXMgc3VibWl0dGVkOyBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHVibGljIGdldCB3aWxsVmFsaWRhdGUoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbHMud2lsbFZhbGlkYXRlO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW50ZXJuYWxzOiBFbGVtZW50SW50ZXJuYWxzID0gdGhpcy5hdHRhY2hJbnRlcm5hbHMoKTtcblxuICAgIHByaXZhdGUgX3ZhbGlkaXR5U3RhdGVzID0gbmV3IE1hcDxcbiAgICAgIGtleW9mIFZhbGlkaXR5U3RhdGVGbGFncyxcbiAgICAgIHsgZmxhZ1ZhbHVlOiB1bmtub3duOyBtZXNzYWdlOiBzdHJpbmcgfVxuICAgID4oKTtcblxuICAgIC8qKiBXaGVuZXZlciBhIHN1cnJvdW5kaW5nIGZvcm0gb3IgZmllbGRzZXQgaXMgY2hhbmdpbmcgaXRzIGRpc2FibGVkIHN0YXRlLiAqL1xuICAgIEBzdGF0ZSgpIHByb3RlY3RlZCBhY2Nlc3NvciBmb3JtRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciguLi5hcmdzOiBhbnlbXSkge1xuICAgICAgc3VwZXIoLi4uYXJncyk7XG4gICAgICAvLyBXZSB3YW50IHRvIHByZXZlbnQgdGhlIG5hdGl2ZSBicm93c2VyIHZhbGlkYXRpb24gbWVzc2FnZSBwb3BvdmVyXG4gICAgICAvLyB0byBiZSBzaG93bi4gVGhpcyBhbHNvIHByZXZlbnRzIGEgYnVnIGluIFdlYktpdCwgd2hpY2ggd291bGQgbm90XG4gICAgICAvLyBhbGxvdyBob3N0IGFzIHRoZSB2YWxpZGl0eSBhbmNob3I6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjk4MzJcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCdpbnZhbGlkJywgKGUpID0+IGUucHJldmVudERlZmF1bHQoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhcbiAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgIG9sZDogc3RyaW5nIHwgbnVsbCxcbiAgICAgIHZhbHVlOiBzdHJpbmcgfCBudWxsLFxuICAgICk6IHZvaWQge1xuICAgICAgaWYgKG5hbWUgIT09ICduYW1lJyB8fCBvbGQgIT09IHZhbHVlKSB7XG4gICAgICAgIHN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuYW1lLCBvbGQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBlbGVtZW50IGhhcyBubyB2YWxpZGl0eSBwcm9ibGVtczsgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqIEZpcmVzIGFuIGludmFsaWQgZXZlbnQgYXQgdGhlIGVsZW1lbnQgaW4gdGhlIGxhdHRlciBjYXNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBjaGVja1ZhbGlkaXR5KCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxzLmNoZWNrVmFsaWRpdHkoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBlbGVtZW50IGhhcyBubyB2YWxpZGl0eSBwcm9ibGVtczsgb3RoZXJ3aXNlLFxuICAgICAqIHJldHVybnMgZmFsc2UsIGZpcmVzIGFuIGludmFsaWQgZXZlbnQgYXQgdGhlIGVsZW1lbnQsXG4gICAgICogYW5kIChpZiB0aGUgZXZlbnQgaXNuJ3QgY2FuY2VsZWQpIHJlcG9ydHMgdGhlIHByb2JsZW0gdG8gdGhlIHVzZXIuXG4gICAgICovXG4gICAgcHVibGljIHJlcG9ydFZhbGlkaXR5KCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxzLnJlcG9ydFZhbGlkaXR5KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY3VzdG9tIHZhbGlkaXR5IG1lc3NhZ2UgZm9yIHRoaXMgZWxlbWVudC4gVXNlIHRoZSBlbXB0eSBzdHJpbmdcbiAgICAgKiB0byBpbmRpY2F0ZSB0aGF0IHRoZSBlbGVtZW50IGRvZXMgbm90IGhhdmUgYSBjdXN0b20gdmFsaWRpdHkgZXJyb3IuXG4gICAgICovXG4gICAgcHVibGljIHNldEN1c3RvbVZhbGlkaXR5KG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy5zZXRWYWxpZGl0eUZsYWcoJ2N1c3RvbUVycm9yJywgbWVzc2FnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbW92ZVZhbGlkaXR5RmxhZygnY3VzdG9tRXJyb3InKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiB0aGUgYXNzb2NpYXRlZCBmb3JtIGVsZW1lbnQgY2hhbmdlcy5cbiAgICAgKiBFbGVtZW50SW50ZXJuYWxzLmZvcm0gcmV0dXJucyB0aGUgYXNzb2NpYXRlZCBmcm9tIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZm9ybUFzc29jaWF0ZWRDYWxsYmFjaz8oZm9ybTogSFRNTEZvcm1FbGVtZW50IHwgbnVsbCk6IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBJcyBjYWxsZWQgd2hlbmV2ZXIgYSBzdXJyb3VuZGluZyBmb3JtIC8gZmllbGRzZXQgY2hhbmdlcyBkaXNhYmxlZCBzdGF0ZS5cbiAgICAgKiBAcGFyYW0gZGlzYWJsZWRcbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBmb3JtRGlzYWJsZWRDYWxsYmFjayhkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgLy8gVGhpcyBjYWxsYmFjayBpcyB0cmlnZ2VyZWQgaWYgdGhlIGRpc2FibGVkIHByb3BlcnR5IGNoYW5nZXMgb3IgdGhlIGRpc2FibGVkIGF0dHJpYnV0ZSBvZiBhIGZpZWxkc2V0IG9yIGZvcm0gY2hhbmdlcy5cbiAgICAgIC8vIFdlIG5lZWQgdG8gcG9zdHBvbmUgdGhlIGFzc2lnbm1lbnQsIG90aGVyd2lzZSBpdCBpbnRlcmZlcmVzIHdpdGggZGlzYWJsZWQgc3RhdHVzIHNldHRpbmdcbiAgICAgIC8vIGFuZCBsZWFkcyB0byBhIHdyb25nIHN0YXRlIChlLmcuIGVtYmVkZGVkIHNiYi12aXN1YWwtY2hlY2tib3gpLlxuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuZm9ybURpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIGZvcm0gaXMgYmVpbmcgcmVzZXQuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgYWJzdHJhY3QgZm9ybVJlc2V0Q2FsbGJhY2soKTogdm9pZDtcblxuICAgIC8qKlxuICAgICAqICBDYWxsZWQgd2hlbiB0aGUgYnJvd3NlciBpcyB0cnlpbmcgdG8gcmVzdG9yZSBlbGVtZW504oCZcyBzdGF0ZSB0byBzdGF0ZSBpbiB3aGljaCBjYXNlXG4gICAgICogIHJlYXNvbiBpcyBcInJlc3RvcmVcIiwgb3Igd2hlbiB0aGUgYnJvd3NlciBpcyB0cnlpbmcgdG8gZnVsZmlsbCBhdXRvZmlsbCBvbiBiZWhhbGYgb2ZcbiAgICAgKiAgdXNlciBpbiB3aGljaCBjYXNlIHJlYXNvbiBpcyBcImF1dG9jb21wbGV0ZVwiLlxuICAgICAqICBJbiB0aGUgY2FzZSBvZiBcInJlc3RvcmVcIiwgc3RhdGUgaXMgYSBzdHJpbmcsIEZpbGUsIG9yIEZvcm1EYXRhIG9iamVjdFxuICAgICAqICBwcmV2aW91c2x5IHNldCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIHNldEZvcm1WYWx1ZS5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCBmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soXG4gICAgICBzdGF0ZTogRm9ybVJlc3RvcmVTdGF0ZSB8IG51bGwsXG4gICAgICByZWFzb246IEZvcm1SZXN0b3JlUmVhc29uLFxuICAgICk6IHZvaWQ7XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgcmVxdWVzdFVwZGF0ZShcbiAgICAgIG5hbWU/OiBQcm9wZXJ0eUtleSxcbiAgICAgIG9sZFZhbHVlPzogdW5rbm93bixcbiAgICAgIG9wdGlvbnM/OiBQcm9wZXJ0eURlY2xhcmF0aW9uLFxuICAgICk6IHZvaWQge1xuICAgICAgc3VwZXIucmVxdWVzdFVwZGF0ZShuYW1lLCBvbGRWYWx1ZSwgb3B0aW9ucyk7XG4gICAgICBpZiAodGhpcy5oYXNVcGRhdGVkICYmIHRoaXMuc2hvdWxkVmFsaWRhdGUobmFtZSkpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuICAgICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3VsZCBiZSBjYWxsZWQgd2hlbiBmb3JtIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAgICogQWRhcHRzIGFuZCBzZXRzIHRoZSBmb3JtVmFsdWUgaW4gdGhlIHN1cHBvcnRlZCBmb3JtYXQgKHN0cmluZyB8IEZvcm1EYXRhIHwgRmlsZSB8IG51bGwpXG4gICAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvc2V0Rm9ybVZhbHVlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHVwZGF0ZUZvcm1WYWx1ZSgpOiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogTWFya3MgdGhpcyBlbGVtZW50IGFzIHN1ZmZlcmluZyBmcm9tIHRoZSBjb25zdHJhaW50IGluZGljYXRlZCBieSB0aGVcbiAgICAgKiBmbGFnIGFyZ3VtZW50IGFuZCBhc3NvY2lhdGVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGl0LlxuICAgICAqIE5vdGUgdGhhdCBvbmx5IG9uZSBtZXNzYWdlIGlzIGRpc3BsYXllZCBhdCBhIHRpbWUgYW5kIGN1c3RvbSBtZXNzYWdlcyBieVxuICAgICAqIGNvbnN1bWVycyBhcmUgYWx3YXlzIGRpc3BsYXllZCBiZWZvcmUgaW50ZXJuYWwgbWVzc2FnZXMgYW5kIGludGVybmFsXG4gICAgICogbWVzc2FnZXMgYXJlIGRpc3BsYXllZCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGFkZGVkLlxuICAgICAqIFRvIHNldC9kZWZpbmUgY3VzdG9tIHZhbGlkaXR5IHN0YXRlIGZsYWdzLCB5b3UgbmVlZCB0byBleHRlbmQgdGhlXG4gICAgICogVmFsaWRpdHlTdGF0ZSBwcm90b3R5cGUgKGFuZCB0aGUgQ3VzdG9tVmFsaWRpdHlTdGF0ZSBpbnRlcmZhY2UpLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqICAgLy8gVGhlIHR5cGUgb2YgdGhlIGN1c3RvbSB2YWxpZGl0eSBzdGF0ZSBkb2VzIG5vdCBuZWVkIHRvIGJlIGJvb2xlYW4uXG4gICAgICogICBPYmplY3QuYXNzaWduKFZhbGlkaXR5U3RhdGUucHJvdG90eXBlLCB7XG4gICAgICogICAgIGdldCBteUVycm9yKCk6IGJvb2xlYW4ge1xuICAgICAqICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgIH0pO1xuICAgICAqXG4gICAgICogICBkZWNsYXJlIGdsb2JhbCB7XG4gICAgICogICAgIGludGVyZmFjZSBDdXN0b21WYWxpZGl0eVN0YXRlIHtcbiAgICAgKiAgICAgICBteUVycm9yOiBib29sZWFuO1xuICAgICAqICAgICB9XG4gICAgICogICB9XG4gICAgICovXG4gICAgcHJvdGVjdGVkIHNldFZhbGlkaXR5RmxhZzxUIGV4dGVuZHMga2V5b2YgVmFsaWRpdHlTdGF0ZUZsYWdzPihcbiAgICAgIGZsYWc6IFQsXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBmbGFnVmFsdWU/OiBWYWxpZGl0eVN0YXRlRmxhZ3NbVF0sXG4gICAgKTogdm9pZCB7XG4gICAgICBmbGFnVmFsdWUgPz89IHRydWU7XG4gICAgICBjb25zdCB2YWxpZGl0eVN0YXRlID0gdGhpcy5fdmFsaWRpdHlTdGF0ZXMuZ2V0KGZsYWcpO1xuICAgICAgaWYgKFxuICAgICAgICAhdmFsaWRpdHlTdGF0ZSB8fFxuICAgICAgICB2YWxpZGl0eVN0YXRlLm1lc3NhZ2UgIT09IG1lc3NhZ2UgfHxcbiAgICAgICAgdmFsaWRpdHlTdGF0ZS5mbGFnVmFsdWUgIT09IGZsYWdWYWx1ZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX3ZhbGlkaXR5U3RhdGVzLnNldChmbGFnLCB7IGZsYWdWYWx1ZSwgbWVzc2FnZSB9KTtcbiAgICAgICAgdGhpcy5fc2V0SW50ZXJuYWxWYWxpZGl0eSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBSZW1vdmVzIHRoZSB2YWxpZGl0eSBzdGF0ZSBmbGFnIGVudHJ5IGFuZCB1cGRhdGVzIHZhbGlkaXR5IHN0YXRlLiAqL1xuICAgIHByb3RlY3RlZCByZW1vdmVWYWxpZGl0eUZsYWc8VCBleHRlbmRzIGtleW9mIFZhbGlkaXR5U3RhdGVGbGFncz4oZmxhZzogVCk6IHZvaWQge1xuICAgICAgaWYgKHRoaXMuX3ZhbGlkaXR5U3RhdGVzLmhhcyhmbGFnKSkge1xuICAgICAgICB0aGlzLl92YWxpZGl0eVN0YXRlcy5kZWxldGUoZmxhZyk7XG4gICAgICAgIHRoaXMuX3NldEludGVybmFsVmFsaWRpdHkoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogVG8gYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBjdXJyZW50IGVsZW1lbnQgbmVlZHMgdG8gYmUgdmFsaWRhdGVkLiAqL1xuICAgIHByb3RlY3RlZCB2YWxpZGF0ZSgpOiB2b2lkIHt9XG5cbiAgICAvKiogV2hldGhlciB2YWxpZGF0aW9uIHNob3VsZCBiZSBydW4gb24gYSBwcm9wZXJ0eSBjaGFuZ2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gKi9cbiAgICBwcm90ZWN0ZWQgc2hvdWxkVmFsaWRhdGUobmFtZTogUHJvcGVydHlLZXkgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiAhbmFtZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRJbnRlcm5hbFZhbGlkaXR5KCk6IHZvaWQge1xuICAgICAgbGV0IG91dHB1dE1lc3NhZ2UgPSB0aGlzLl92YWxpZGl0eVN0YXRlcy5nZXQoJ2N1c3RvbUVycm9yJyk/Lm1lc3NhZ2U7XG4gICAgICBjb25zdCBmbGFnczogVmFsaWRpdHlTdGF0ZUZsYWdzID0ge307XG4gICAgICB0aGlzLl92YWxpZGl0eVN0YXRlcy5mb3JFYWNoKCh7IGZsYWdWYWx1ZSwgbWVzc2FnZSB9LCBmbGFnKSA9PiB7XG4gICAgICAgIGZsYWdzW2ZsYWddID0gZmxhZ1ZhbHVlIGFzIGFueTtcbiAgICAgICAgb3V0cHV0TWVzc2FnZSB8fD0gbWVzc2FnZTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjdXN0b21GbGFncyA9IE9iamVjdC5rZXlzKFZhbGlkaXR5U3RhdGUucHJvdG90eXBlKS5maWx0ZXIoXG4gICAgICAgIChmKSA9PiAhKGYgaW4gdmFsaWRpdHlLZXlzKSAmJiBmICE9PSAndmFsaWQnLFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgZmxhZyBvZiBjdXN0b21GbGFncykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGZsYWcgaW4gZmxhZ3MgPyBmbGFnc1tmbGFnIGFzIGtleW9mIFZhbGlkaXR5U3RhdGVGbGFnc10gOiBmYWxzZTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMuaW50ZXJuYWxzLnZhbGlkaXR5LCBmbGFnLCB7IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIC8vIElmIGFueSBjdXN0b20gZXJyb3JzIGFyZSBwcm92aWRlZCwgd2UgbmVlZCB0byBzZXQgY3VzdG9tRXJyb3IgdG8gdHJ1ZSxcbiAgICAgICAgICAvLyBhcyB0aGlzIGlzIHRoZSBvbmx5IGN1c3RvbSBlcnJvciBwcm9wZXJ0eSBicm93c2VycyBhY2NlcHQuXG4gICAgICAgICAgZmxhZ3MuY3VzdG9tRXJyb3IgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaW50ZXJuYWxzLnNldFZhbGlkaXR5KGZsYWdzLCBvdXRwdXRNZXNzYWdlKTtcblxuICAgICAgLy8gV2ViS2l0IHNlZW1zIHRvIGFsd2F5cyBzZXQgY3VzdG9tRXJyb3IgdG8gdHJ1ZSwgaWYgYW55IGVycm9yIGlzIGFjdGl2ZS5cbiAgICAgIC8vIER1ZSB0byB0aGlzIHdlIHBhdGNoIHRoZSBjdXN0b21FcnJvciB2YWx1ZSBtYW51YWxseS5cbiAgICAgIGlmIChpc1dlYmtpdCkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5pbnRlcm5hbHMudmFsaWRpdHksICdjdXN0b21FcnJvcicsIHtcbiAgICAgICAgICB2YWx1ZTogdGhpcy5fdmFsaWRpdHlTdGF0ZXMuaGFzKCdjdXN0b21FcnJvcicpIHx8ICEhZmxhZ3MuY3VzdG9tRXJyb3IsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIFNiYkZvcm1Bc3NvY2lhdGVkRWxlbWVudCBhcyB1bmtub3duIGFzIEFic3RyYWN0Q29uc3RydWN0b3I8U2JiRm9ybUFzc29jaWF0ZWRNaXhpblR5cGU8Vj4+ICZcbiAgICBUO1xufTtcblxuLyoqXG4gKiBBIHZhbHVlIHRvIGJlIHJlc3RvcmVkIGZvciBhIGNvbXBvbmVudCdzIGZvcm0gdmFsdWUuIElmIGEgY29tcG9uZW50J3MgZm9ybVxuICogc3RhdGUgaXMgYSBgRm9ybURhdGFgIG9iamVjdCwgaXRzIGVudHJ5IGxpc3Qgb2YgbmFtZSBhbmQgdmFsdWVzIHdpbGwgYmVcbiAqIHByb3ZpZGVkLlxuICovXG5leHBvcnQgdHlwZSBGb3JtUmVzdG9yZVN0YXRlID0gRmlsZSB8IHN0cmluZyB8IFtzdHJpbmcsIEZvcm1EYXRhRW50cnlWYWx1ZV1bXTtcblxuLyoqXG4gKiBUaGUgcmVhc29uIGEgZm9ybSBjb21wb25lbnQgaXMgYmVpbmcgcmVzdG9yZWQgZm9yLCBlaXRoZXIgYCdyZXN0b3JlJ2AgZm9yXG4gKiBicm93c2VyIHJlc3RvcmF0aW9uIG9yIGAnYXV0b2NvbXBsZXRlJ2AgZm9yIHJlc3RvcmluZyB1c2VyIHZhbHVlcy5cbiAqL1xuZXhwb3J0IHR5cGUgRm9ybVJlc3RvcmVSZWFzb24gPSAncmVzdG9yZScgfCAnYXV0b2NvbXBsZXRlJztcbiIsImltcG9ydCB0eXBlIHsgTGl0RWxlbWVudCwgUHJvcGVydHlWYWx1ZXMgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB0eXBlIHsgQWJzdHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4vY29uc3RydWN0b3IuanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJGb3JtQXNzb2NpYXRlZE1peGluVHlwZSB9IGZyb20gJy4vZm9ybS1hc3NvY2lhdGVkLW1peGluLmpzJztcblxuZXhwb3J0IGRlY2xhcmUgY2xhc3MgU2JiUmVxdWlyZWRNaXhpblR5cGUge1xuICBwdWJsaWMgYWNjZXNzb3IgcmVxdWlyZWQ6IGJvb2xlYW47XG4gIHByb3RlY3RlZCBpc1JlcXVpcmVkRXh0ZXJuYWxseSgpOiBib29sZWFuO1xufVxuXG4vKipcbiAqIEVuaGFuY2UgeW91ciBjb21wb25lbnQgd2l0aCBhIHJlcXVpcmVkIHByb3BlcnR5LlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgU2JiUmVxdWlyZWRNaXhpbiA9IDxcbiAgVCBleHRlbmRzIEFic3RyYWN0Q29uc3RydWN0b3I8TGl0RWxlbWVudCAmIFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW5UeXBlPFY+PixcbiAgVixcbj4oXG4gIHN1cGVyQ2xhc3M6IFQsXG4pOiBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYlJlcXVpcmVkTWl4aW5UeXBlPiAmIFQgPT4ge1xuICBhYnN0cmFjdCBjbGFzcyBTYmJSZXF1aXJlZEVsZW1lbnQgZXh0ZW5kcyBzdXBlckNsYXNzIGltcGxlbWVudHMgUGFydGlhbDxTYmJSZXF1aXJlZE1peGluVHlwZT4ge1xuICAgIC8qKiBXaGV0aGVyIHRoZSBjb21wb25lbnQgaXMgcmVxdWlyZWQuICovXG4gICAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSwgdHlwZTogQm9vbGVhbiB9KVxuICAgIHB1YmxpYyBzZXQgcmVxdWlyZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgIC8vIFRvIHByb3ZpZGUgdGhlIHNhbWUgYmVoYXZpb3IgYXMgdGhlIG5hdGl2ZSByZXF1aXJlZCBzdGF0ZSxcbiAgICAgIC8vIGFueSB2YWx1ZSBpcyBjb252ZXJ0ZWQgdG8gYSBib29sZWFuLlxuICAgICAgdGhpcy5fcmVxdWlyZWQgPSBCb29sZWFuKHZhbHVlKTtcbiAgICB9XG4gICAgcHVibGljIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZCB8fCB0aGlzLmlzUmVxdWlyZWRFeHRlcm5hbGx5KCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3JlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdyZXF1aXJlZCcpKSB7XG4gICAgICAgIC8vIEZpcmVmb3ggbmVlZHMgZXhwbGljaXRseSBzZXQgYXJpYS1yZXF1aXJlZCB2YWx1ZS5cbiAgICAgICAgdGhpcy5pbnRlcm5hbHMuYXJpYVJlcXVpcmVkID0gYCR7dGhpcy5yZXF1aXJlZH1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdpbGwgYmUgdXNlZCBhcyAnb3InIGNoZWNrIHRvIHRoZSBjdXJyZW50IHJlcXVpcmVkIHN0YXRlLlxuICAgICAqIENhbiBlLmcuIGJlIHVzZWQgdG8gcmVhZCByZXF1aXJlZCBzdGF0ZSBvZiBhIGdyb3VwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBpc1JlcXVpcmVkRXh0ZXJuYWxseSgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gU2JiUmVxdWlyZWRFbGVtZW50IGFzIHVua25vd24gYXMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJSZXF1aXJlZE1peGluVHlwZT4gJiBUO1xufTtcbiIsImltcG9ydCB7IGRlZmF1bHRDb252ZXJ0ZXIsIHR5cGUgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHsgU2JiTGFuZ3VhZ2VDb250cm9sbGVyIH0gZnJvbSAnLi4vY29udHJvbGxlcnMuanMnO1xuaW1wb3J0IHsgaG9zdEF0dHJpYnV0ZXMgfSBmcm9tICcuLi9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHByZXZlbnRTY3JvbGxPblNwYWNlYmFyUHJlc3MgfSBmcm9tICcuLi9ldmVudGluZy5qcyc7XG5pbXBvcnQgeyBpMThuQ2hlY2tib3hSZXF1aXJlZCB9IGZyb20gJy4uL2kxOG4uanMnO1xuXG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdG9yIH0gZnJvbSAnLi9jb25zdHJ1Y3Rvci5qcyc7XG5pbXBvcnQgeyBTYmJEaXNhYmxlZE1peGluLCB0eXBlIFNiYkRpc2FibGVkTWl4aW5UeXBlIH0gZnJvbSAnLi9kaXNhYmxlZC1taXhpbi5qcyc7XG5pbXBvcnQge1xuICBTYmJGb3JtQXNzb2NpYXRlZE1peGluLFxuICB0eXBlIEZvcm1SZXN0b3JlUmVhc29uLFxuICB0eXBlIEZvcm1SZXN0b3JlU3RhdGUsXG4gIHR5cGUgU2JiRm9ybUFzc29jaWF0ZWRNaXhpblR5cGUsXG59IGZyb20gJy4vZm9ybS1hc3NvY2lhdGVkLW1peGluLmpzJztcbmltcG9ydCB7IFNiYlJlcXVpcmVkTWl4aW4sIHR5cGUgU2JiUmVxdWlyZWRNaXhpblR5cGUgfSBmcm9tICcuL3JlcXVpcmVkLW1peGluLmpzJztcblxudHlwZSBDaGVja2VkU2V0dGVyVmFsdWUgPSB7IHZhbHVlOiBib29sZWFuOyBhdHRyaWJ1dGU6IGJvb2xlYW4gfTtcblxuZXhwb3J0IGRlY2xhcmUgYWJzdHJhY3QgY2xhc3MgU2JiRm9ybUFzc29jaWF0ZWRDaGVja2JveE1peGluVHlwZVxuICBleHRlbmRzIFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW5UeXBlXG4gIGltcGxlbWVudHMgUGFydGlhbDxTYmJEaXNhYmxlZE1peGluVHlwZT4sIFBhcnRpYWw8U2JiUmVxdWlyZWRNaXhpblR5cGU+XG57XG4gIHB1YmxpYyBnZXQgY2hlY2tlZCgpOiBib29sZWFuO1xuICBwdWJsaWMgc2V0IGNoZWNrZWQodmFsdWU6IGJvb2xlYW4pO1xuXG4gIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pO1xuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW47XG5cbiAgcHVibGljIHNldCByZXF1aXJlZCh2YWx1ZTogYm9vbGVhbik7XG4gIHB1YmxpYyBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbjtcblxuICBwdWJsaWMgZm9ybVJlc2V0Q2FsbGJhY2soKTogdm9pZDtcbiAgcHVibGljIGZvcm1TdGF0ZVJlc3RvcmVDYWxsYmFjayhzdGF0ZTogRm9ybVJlc3RvcmVTdGF0ZSB8IG51bGwsIHJlYXNvbjogRm9ybVJlc3RvcmVSZWFzb24pOiB2b2lkO1xuXG4gIHByb3RlY3RlZCBpc0Rpc2FibGVkRXh0ZXJuYWxseSgpOiBib29sZWFuO1xuICBwcm90ZWN0ZWQgaXNSZXF1aXJlZEV4dGVybmFsbHkoKTogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIHdpdGhVc2VySW50ZXJhY3Rpb24/KCk6IHZvaWQ7XG4gIHByb3RlY3RlZCB1cGRhdGVGb3JtVmFsdWUoKTogdm9pZDtcbn1cblxuLyoqXG4gKiBUaGUgRm9ybUFzc29jaWF0ZWRDaGVja2JveE1peGluIGVuYWJsZXMgbmF0aXZlIGZvcm0gc3VwcG9ydCBmb3IgY2hlY2tib3ggY29udHJvbHMuXG4gKlxuICogSW5oZXJpdGVkIGNsYXNzZXMgTVVTVCBpbXBsZW1lbnQgdGhlIGFyaWFDaGVja2VkIHN0YXRlIChFbGVtZW50SW50ZXJuYWxzKSB0aGVtc2VsdmVzLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgU2JiRm9ybUFzc29jaWF0ZWRDaGVja2JveE1peGluID0gPFQgZXh0ZW5kcyBDb25zdHJ1Y3RvcjxMaXRFbGVtZW50Pj4oXG4gIHN1cGVyQ2xhc3M6IFQsXG4pOiBDb25zdHJ1Y3RvcjxTYmJGb3JtQXNzb2NpYXRlZENoZWNrYm94TWl4aW5UeXBlPiAmIFQgPT4ge1xuICBAaG9zdEF0dHJpYnV0ZXMoe1xuICAgIHRhYmluZGV4OiAnMCcsXG4gIH0pXG4gIGFic3RyYWN0IGNsYXNzIFNiYkZvcm1Bc3NvY2lhdGVkQ2hlY2tib3hFbGVtZW50XG4gICAgZXh0ZW5kcyBTYmJEaXNhYmxlZE1peGluKFNiYlJlcXVpcmVkTWl4aW4oU2JiRm9ybUFzc29jaWF0ZWRNaXhpbihzdXBlckNsYXNzKSkpXG4gICAgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYkZvcm1Bc3NvY2lhdGVkQ2hlY2tib3hNaXhpblR5cGU+XG4gIHtcbiAgICBwcml2YXRlIF9hdHRyaWJ1dGVNdXRhdGlvbkJsb2NrZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9sYW5ndWFnZUNvbnRyb2xsZXIgPSBuZXcgU2JiTGFuZ3VhZ2VDb250cm9sbGVyKHRoaXMpO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGNoZWNrYm94IGlzIGNoZWNrZWQuICovXG4gICAgQHByb3BlcnR5KHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBjb252ZXJ0ZXI6IHtcbiAgICAgICAgLi4uZGVmYXVsdENvbnZlcnRlcixcbiAgICAgICAgLy8gV2UgbmVlZCB0byBwYXNzIGluZm9ybWF0aW9uIHRvIHRoZSBzZXR0ZXIgc28gdGhhdCB3ZSBrbm93IGl0IHdhcyBjYWxsZWQgYnkgYXR0cmlidXRlIGNoYW5nZS5cbiAgICAgICAgZnJvbUF0dHJpYnV0ZTogKHZhbHVlOiBzdHJpbmcgfCBudWxsLCB0eXBlPzogdW5rbm93bik6IENoZWNrZWRTZXR0ZXJWYWx1ZSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gZGVmYXVsdENvbnZlcnRlci5mcm9tQXR0cmlidXRlPy4odmFsdWUsIHR5cGUpO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiByZXN1bHQsIGF0dHJpYnV0ZTogdHJ1ZSB9IGFzIENoZWNrZWRTZXR0ZXJWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSlcbiAgICBwdWJsaWMgc2V0IGNoZWNrZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZVNldHRlciA9XG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgPyAodmFsdWUgYXMgdW5rbm93biBhcyBDaGVja2VkU2V0dGVyVmFsdWUpLmF0dHJpYnV0ZSA6IGZhbHNlO1xuICAgICAgaWYgKGF0dHJpYnV0ZVNldHRlcikge1xuICAgICAgICB2YWx1ZSA9ICh2YWx1ZSBhcyB1bmtub3duIGFzIENoZWNrZWRTZXR0ZXJWYWx1ZSkudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIC8vIEFzIHNvb24gYXMgbXV0YXRpb24gd2FzIGRvbmUgbm90IGJ5IHNldHRpbmcgYXR0cmlidXRlLFxuICAgICAgLy8gd2UgbmVlZCB0byBibG9jayBzeW5jaW5nIGF0dHJpYnV0ZS5cbiAgICAgIGlmICh0aGlzLmhhc1VwZGF0ZWQgJiYgIWF0dHJpYnV0ZVNldHRlcikge1xuICAgICAgICB0aGlzLl9hdHRyaWJ1dGVNdXRhdGlvbkJsb2NrZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5fY2hlY2tlZCA9IEJvb2xlYW4odmFsdWUpO1xuICAgICAgdGhpcy51cGRhdGVGb3JtVmFsdWUoKTtcbiAgICB9XG4gICAgcHVibGljIGdldCBjaGVja2VkKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrZWQ7XG4gICAgfVxuICAgIHByaXZhdGUgX2NoZWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEZvcm0gdHlwZSBvZiBlbGVtZW50LlxuICAgICAqIEBkZWZhdWx0ICdjaGVja2JveCdcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiAnY2hlY2tib3gnO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIHN1cGVyKCk7XG4gICAgICAvKiogQGludGVybmFsICovXG4gICAgICB0aGlzLmludGVybmFscy5yb2xlID0gJ2NoZWNrYm94JztcblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2NsaWNrJywgdGhpcy5faGFuZGxlVXNlckludGVyYWN0aW9uKTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCdrZXlkb3duJywgcHJldmVudFNjcm9sbE9uU3BhY2ViYXJQcmVzcyk7XG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/Ligna2V5dXAnLCB0aGlzLl9oYW5kbGVLZXlib2FyZEludGVyYWN0aW9uKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKFxuICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgb2xkOiBzdHJpbmcgfCBudWxsLFxuICAgICAgdmFsdWU6IHN0cmluZyB8IG51bGwsXG4gICAgKTogdm9pZCB7XG4gICAgICAvLyBBdHRyaWJ1dGUgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhZnRlciBwcm9ncmFtbWF0aWMgb3IgbWFudWFsIHN0YXRlIGNoYW5nZS5cbiAgICAgIGlmIChuYW1lICE9PSAnY2hlY2tlZCcgfHwgIXRoaXMuX2F0dHJpYnV0ZU11dGF0aW9uQmxvY2tlZCkge1xuICAgICAgICBzdXBlci5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobmFtZSwgb2xkLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSXMgY2FsbGVkIHdoZW5ldmVyIHRoZSBmb3JtIGlzIGJlaW5nIHJlc2V0LlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGZvcm1SZXNldENhbGxiYWNrKCk6IHZvaWQge1xuICAgICAgdGhpcy5jaGVja2VkID0gdGhpcy5oYXNBdHRyaWJ1dGUoJ2NoZWNrZWQnKTtcbiAgICAgIHRoaXMuX2F0dHJpYnV0ZU11dGF0aW9uQmxvY2tlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBDYWxsZWQgd2hlbiB0aGUgYnJvd3NlciBpcyB0cnlpbmcgdG8gcmVzdG9yZSBlbGVtZW504oCZcyBzdGF0ZSB0byBzdGF0ZSBpbiB3aGljaCBjYXNlXG4gICAgICogIHJlYXNvbiBpcyBcInJlc3RvcmVcIiwgb3Igd2hlbiB0aGUgYnJvd3NlciBpcyB0cnlpbmcgdG8gZnVsZmlsbCBhdXRvZmlsbCBvbiBiZWhhbGYgb2ZcbiAgICAgKiAgdXNlciBpbiB3aGljaCBjYXNlIHJlYXNvbiBpcyBcImF1dG9jb21wbGV0ZVwiLlxuICAgICAqICBJbiB0aGUgY2FzZSBvZiBcInJlc3RvcmVcIiwgc3RhdGUgaXMgYSBzdHJpbmcsIEZpbGUsIG9yIEZvcm1EYXRhIG9iamVjdFxuICAgICAqICBwcmV2aW91c2x5IHNldCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIHNldEZvcm1WYWx1ZS5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soXG4gICAgICBzdGF0ZTogRm9ybVJlc3RvcmVTdGF0ZSB8IG51bGwsXG4gICAgICBfcmVhc29uOiBGb3JtUmVzdG9yZVJlYXNvbixcbiAgICApOiB2b2lkIHtcbiAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICB0aGlzLmNoZWNrZWQgPSBzdGF0ZSA9PT0gJ3RydWUnO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZGl0aW9uYWwgbG9naWMgd2hpY2ggaXMgYmVpbmcgZXhlY3V0ZWQgd2hlbiB1c2VyXG4gICAgICogaW50ZXJhY3Rpb24gaGFwcGVucyBhbmQgc3RhdGUgaXMgbm90IGRpc2FibGVkLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCB3aXRoVXNlckludGVyYWN0aW9uPygpOiB2b2lkO1xuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHVwZGF0ZUZvcm1WYWx1ZSgpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLmNoZWNrZWQpIHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbHMuc2V0Rm9ybVZhbHVlKHRoaXMudmFsdWUsIGAke3RoaXMuY2hlY2tlZH1gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxzLnNldEZvcm1WYWx1ZShudWxsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc2hvdWxkVmFsaWRhdGUobmFtZTogUHJvcGVydHlLZXkgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBzdXBlci5zaG91bGRWYWxpZGF0ZShuYW1lKSB8fCBuYW1lID09PSAnY2hlY2tlZCcgfHwgbmFtZSA9PT0gJ3JlcXVpcmVkJztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmFsaWRhdGUoKTogdm9pZCB7XG4gICAgICBzdXBlci52YWxpZGF0ZSgpO1xuICAgICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgIXRoaXMuY2hlY2tlZCkge1xuICAgICAgICB0aGlzLnNldFZhbGlkaXR5RmxhZyhcbiAgICAgICAgICAndmFsdWVNaXNzaW5nJyxcbiAgICAgICAgICBpMThuQ2hlY2tib3hSZXF1aXJlZFt0aGlzLl9sYW5ndWFnZUNvbnRyb2xsZXIuY3VycmVudF0sXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbW92ZVZhbGlkaXR5RmxhZygndmFsdWVNaXNzaW5nJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0cmlnZ2VyZWQgb24ga2V5Ym9hcmQgdXNlciBpbnRlcmFjdGlvbiB3aXRoIGNoZWNrYm94LiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZUtleWJvYXJkSW50ZXJhY3Rpb24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICcgJykge1xuICAgICAgICB0aGlzLl9oYW5kbGVVc2VySW50ZXJhY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqIE1ldGhvZCB0cmlnZ2VyZWQgb24gdXNlciBpbnRlcmFjdGlvbiB3aXRoIGNoZWNrYm94LiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZVVzZXJJbnRlcmFjdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMud2l0aFVzZXJJbnRlcmFjdGlvbj8uKCk7XG4gICAgICB0aGlzLmNoZWNrZWQgPSAhdGhpcy5jaGVja2VkO1xuICAgICAgdGhpcy5fYXR0cmlidXRlTXV0YXRpb25CbG9ja2VkID0gdHJ1ZTtcblxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KCdpbnB1dCcsIHsgY29tcG9zZWQ6IHRydWUsIGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIFNiYkZvcm1Bc3NvY2lhdGVkQ2hlY2tib3hFbGVtZW50IGFzIHVua25vd24gYXMgQ29uc3RydWN0b3I8U2JiRm9ybUFzc29jaWF0ZWRDaGVja2JveE1peGluVHlwZT4gJlxuICAgIFQ7XG59O1xuIiwiaW1wb3J0IHsgaHRtbCwgaXNTZXJ2ZXIsIHR5cGUgTGl0RWxlbWVudCwgdHlwZSBQcm9wZXJ0eVZhbHVlcyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBldmVudE9wdGlvbnMsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBzYmJJbnB1dE1vZGFsaXR5RGV0ZWN0b3IgfSBmcm9tICcuLi9hMTF5LmpzJztcbmltcG9ydCB7IFNiYkxhbmd1YWdlQ29udHJvbGxlciB9IGZyb20gJy4uL2NvbnRyb2xsZXJzLmpzJztcbmltcG9ydCB7IGlzRmlyZWZveCwgaXNXZWJraXQgfSBmcm9tICcuLi9kb20uanMnO1xuaW1wb3J0IHsgaTE4bklucHV0UmVxdWlyZWQgfSBmcm9tICcuLi9pMThuLmpzJztcblxuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3RvciB9IGZyb20gJy4vY29uc3RydWN0b3IuanMnO1xuaW1wb3J0IHtcbiAgdHlwZSBGb3JtUmVzdG9yZVJlYXNvbixcbiAgdHlwZSBGb3JtUmVzdG9yZVN0YXRlLFxuICBTYmJGb3JtQXNzb2NpYXRlZE1peGluLFxuICB0eXBlIFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW5UeXBlLFxufSBmcm9tICcuL2Zvcm0tYXNzb2NpYXRlZC1taXhpbi5qcyc7XG5pbXBvcnQgeyBTYmJSZXF1aXJlZE1peGluLCB0eXBlIFNiYlJlcXVpcmVkTWl4aW5UeXBlIH0gZnJvbSAnLi9yZXF1aXJlZC1taXhpbi5qcyc7XG5cbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIFNiYkZvcm1Bc3NvY2lhdGVkSW5wdXRNaXhpblR5cGVcbiAgZXh0ZW5kcyBTYmJGb3JtQXNzb2NpYXRlZE1peGluVHlwZVxuICBpbXBsZW1lbnRzIFBhcnRpYWw8U2JiUmVxdWlyZWRNaXhpblR5cGU+XG57XG4gIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pO1xuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW47XG5cbiAgcHVibGljIHNldCByZWFkT25seSh2YWx1ZTogYm9vbGVhbik7XG4gIHB1YmxpYyBnZXQgcmVhZE9ubHkoKTogYm9vbGVhbjtcblxuICBwdWJsaWMgc2V0IHJlcXVpcmVkKHZhbHVlOiBib29sZWFuKTtcbiAgcHVibGljIGdldCByZXF1aXJlZCgpOiBib29sZWFuO1xuXG4gIHB1YmxpYyBzZXQgcGxhY2Vob2xkZXIodmFsdWU6IHN0cmluZyk7XG4gIHB1YmxpYyBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nO1xuXG4gIHB1YmxpYyBmb3JtUmVzZXRDYWxsYmFjaygpOiB2b2lkO1xuICBwdWJsaWMgZm9ybVN0YXRlUmVzdG9yZUNhbGxiYWNrKHN0YXRlOiBGb3JtUmVzdG9yZVN0YXRlIHwgbnVsbCwgcmVhc29uOiBGb3JtUmVzdG9yZVJlYXNvbik6IHZvaWQ7XG5cbiAgcHJvdGVjdGVkIHdpdGhVc2VySW50ZXJhY3Rpb24/KCk6IHZvaWQ7XG4gIHByb3RlY3RlZCB1cGRhdGVGb3JtVmFsdWUoKTogdm9pZDtcbiAgcHJvdGVjdGVkIGxhbmd1YWdlOiBTYmJMYW5ndWFnZUNvbnRyb2xsZXI7XG59XG5cbi8qKlxuICogVGhlIFNiYkZvcm1Bc3NvY2lhdGVkSW5wdXRNaXhpbiBlbmFibGVzIG5hdGl2ZSBmb3JtIHN1cHBvcnQgZm9yIHRleHQgaW5wdXQgY29udHJvbHMuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJGb3JtQXNzb2NpYXRlZElucHV0TWl4aW4gPSA8VCBleHRlbmRzIENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbik6IENvbnN0cnVjdG9yPFNiYkZvcm1Bc3NvY2lhdGVkSW5wdXRNaXhpblR5cGU+ICYgVCA9PiB7XG4gIGFic3RyYWN0IGNsYXNzIFNiYkZvcm1Bc3NvY2lhdGVkSW5wdXRFbGVtZW50XG4gICAgZXh0ZW5kcyBTYmJSZXF1aXJlZE1peGluKFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW4oc3VwZXJDbGFzcykpXG4gICAgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYkZvcm1Bc3NvY2lhdGVkSW5wdXRNaXhpblR5cGU+XG4gIHtcbiAgICAvKipcbiAgICAgKiBUaGUgbmF0aXZlIHRleHQgaW5wdXQgY2hhbmdlcyB0aGUgdmFsdWUgcHJvcGVydHkgd2hlbiB0aGUgdmFsdWUgYXR0cmlidXRlIGlzXG4gICAgICogY2hhbmdlZCB1bmRlciB0aGUgY29uZGl0aW9uIHRoYXQgbm8gaW5wdXQgZXZlbnQgaGFzIG9jY3VyZWQgc2luY2UgY3JlYXRpb25cbiAgICAgKiBvciB0aGUgbGFzdCBmb3JtIHJlc2V0LlxuICAgICAqL1xuICAgIHByaXZhdGUgX2ludGVyYWN0ZWQgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBBbiBlbGVtZW50IHdpdGggY29udGVudGVkaXRhYmxlIHdpbGwgbm90IGVtaXQgYSBjaGFuZ2UgZXZlbnQuIFRvIGFjaGlldmUgcGFyaXR5XG4gICAgICogd2l0aCBhIG5hdGl2ZSB0ZXh0IGlucHV0LCB3ZSBuZWVkIHRvIHRyYWNrIHdoZXRoZXIgYSBjaGFuZ2UgZXZlbnQgc2hvdWxkIGJlXG4gICAgICogZW1pdHRlZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9zaG91bGRFbWl0Q2hhbmdlID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQSBuYXRpdmUgdGV4dCBpbnB1dCBhdHRlbXB0cyB0byBzdWJtaXQgdGhlIGZvcm0gd2hlbiBwcmVzc2luZyBFbnRlci5cbiAgICAgKiBUaGlzIGNhbiBiZSBwcmV2ZW50ZWQgYnkgY2FsbGluZyBwcmV2ZW50RGVmYXVsdCBvbiB0aGUga2V5ZG93biBldmVudC5cbiAgICAgKiBXZSB0cmFjayB3aGV0aGVyIHRvIHJlcXVlc3Qgc3VibWl0LCB3aGljaCBzaG91bGQgb2NjdXIgYmVmb3JlIHRoZSBrZXl1cFxuICAgICAqIGV2ZW50LlxuICAgICAqL1xuICAgIHByaXZhdGUgX3Nob3VsZFRyaWdnZXJTdWJtaXQgPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCBsYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBGb3JtIHR5cGUgb2YgZWxlbWVudC5cbiAgICAgKiBAZGVmYXVsdCAndGV4dCdcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiAndGV4dCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHQgdmFsdWUgb2YgdGhlIGlucHV0IGVsZW1lbnQuXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICBzdXBlci52YWx1ZSA9IHRoaXMuX2NsZWFuVGV4dCh2YWx1ZSk7XG4gICAgICBpZiAodGhpcy5oYXNVcGRhdGVkKSB7XG4gICAgICAgIHRoaXMuaW5uZXJIVE1MID0gc3VwZXIudmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgdmFsdWUoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBzdXBlci52YWx1ZSA/PyAnJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBjb21wb25lbnQgaXMgcmVhZG9ubHkuXG4gICAgICogQGF0dHIgcmVhZG9ubHlcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4gfSlcbiAgICBwdWJsaWMgc2V0IHJlYWRPbmx5KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgncmVhZG9ubHknLCAhIXZhbHVlKTtcbiAgICAgIHRoaXMuaW50ZXJuYWxzLmFyaWFSZWFkT25seSA9IHZhbHVlID8gJ3RydWUnIDogbnVsbDtcbiAgICAgIHRoaXMuX3VwZGF0ZUNvbnRlbnRlZGl0YWJsZSgpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IHJlYWRPbmx5KCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKCdyZWFkb25seScpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICAgKiBAYXR0ciBkaXNhYmxlZFxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiB9KVxuICAgIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkaXNhYmxlZCcsICEhdmFsdWUpO1xuICAgICAgdGhpcy5pbnRlcm5hbHMuYXJpYURpc2FibGVkID0gdmFsdWUgPyAndHJ1ZScgOiBudWxsO1xuICAgICAgdGhpcy5fdXBkYXRlQ29udGVudGVkaXRhYmxlKCk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgfVxuXG4gICAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiBmYWxzZSB9KVxuICAgIHB1YmxpYyBzZXQgcGxhY2Vob2xkZXIodmFsdWU6IHN0cmluZykge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdwbGFjZWhvbGRlcicsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKCdwbGFjZWhvbGRlcicpO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnRlcm5hbHMuYXJpYVBsYWNlaG9sZGVyID0gdmFsdWUgPyB2YWx1ZSA6IG51bGw7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgncGxhY2Vob2xkZXInKSA/PyAnJztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7XG4gICAgICBzdXBlcigpO1xuICAgICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgICAgdGhpcy5pbnRlcm5hbHMucm9sZSA9ICd0ZXh0Ym94JztcbiAgICAgIC8vIFdlIHByaW1hcmlseSB1c2UgY2FwdHVyZSBldmVudCBsaXN0ZW5lcnMsIGFzIHdlIHdhbnRcbiAgICAgIC8vIG91ciBsaXN0ZW5lcnMgdG8gb2NjdXIgYmVmb3JlIGNvbnN1bWVyIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKFxuICAgICAgICAnaW5wdXQnLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgc3VwZXIudmFsdWUgPSB0aGlzLl9jbGVhblRleHQodGhpcy50ZXh0Q29udGVudCA/PyAnJyk7XG4gICAgICAgICAgdGhpcy5faW50ZXJhY3RlZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fc2hvdWxkRW1pdENoYW5nZSA9IHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIHsgY2FwdHVyZTogdHJ1ZSB9LFxuICAgICAgKTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCdjaGFuZ2UnLCAoKSA9PiAodGhpcy5fc2hvdWxkRW1pdENoYW5nZSA9IGZhbHNlKSwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oXG4gICAgICAgICdrZXlkb3duJyxcbiAgICAgICAgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgLy8gV2UgcHJldmVudCByZWN1cnNpdmUgZXZlbnRzIGJ5IGNoZWNraW5nIHRoZSBvcmlnaW5hbCBldmVudCBmb3IgaXNUcnVzdGVkXG4gICAgICAgICAgLy8gd2hpY2ggaXMgZmFsc2UgZm9yIG1hbnVhbGx5IGRpc3BhdGNoZWQgZXZlbnRzICh3aGljaCB3ZSBkaXNwYXRjaCBiZWxvdykuXG4gICAgICAgICAgaWYgKChldmVudC5rZXkgPT09ICdFbnRlcicgfHwgZXZlbnQua2V5ID09PSAnXFxuJykgJiYgZXZlbnQuaXNUcnVzdGVkKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLl9zaG91bGRUcmlnZ2VyU3VibWl0ID0gdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBLZXlib2FyZEV2ZW50KCdrZXlkb3duJywgZXZlbnQpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgaXNXZWJraXQgJiZcbiAgICAgICAgICAgIHRoaXMudmFsdWUgJiZcbiAgICAgICAgICAgIChldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnIHx8IGV2ZW50LmtleSA9PT0gJ0RlbGV0ZScpICYmXG4gICAgICAgICAgICBldmVudC5pc1RydXN0ZWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIEluIFdlYmtpdCBwcmVzc2luZyBCYWNrc3BhY2Ugb3IgRGVsZXRlIGNvbXBsZXRlbHkgcmVtb3ZlcyBhbGwgdGhlIGNvbnRlbnRcbiAgICAgICAgICAgIC8vIGlmIGNvbnRlbnRlZGl0YWJsZSBpcyBzZXQgb24gYSB3ZWIgY29tcG9uZW50IGhvc3QuXG4gICAgICAgICAgICAvLyBXZSBoYXZlIHRvIHJlcGxpY2F0ZSB0aGUgbm9ybWFsIGRlbGV0ZSBiZWhhdmlvci5cbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoJ2tleWRvd24nLCBldmVudCkpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRSYW5nZSA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKT8uZ2V0UmFuZ2VBdCgwKTtcbiAgICAgICAgICAgIGlmICghc2VsZWN0ZWRSYW5nZSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzZWxlY3RlZFJhbmdlLnN0YXJ0T2Zmc2V0ICE9PSBzZWxlY3RlZFJhbmdlLmVuZE9mZnNldCkge1xuICAgICAgICAgICAgICAvLyBJZiBhIHRleHQgcmFuZ2UgaXMgc2VsZWN0ZWQsIHRoZW4gZGVsZXRlIHRoaXMgcmFuZ2VcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgICAgICAgICAgICB0aGlzLl9kaXNwYXRjaElucHV0RXZlbnQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyAmJiBzZWxlY3RlZFJhbmdlLnN0YXJ0T2Zmc2V0ID4gMCkge1xuICAgICAgICAgICAgICAvLyBXaGVuIHByZXNzaW5nIEJhY2tzcGFjZSwgd2Ugc2VsZWN0IHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgZnJvbVxuICAgICAgICAgICAgICAvLyB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gYW5kIGRlbGV0ZSBpdC5cbiAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZS5zZXRTdGFydChzZWxlY3RlZFJhbmdlLnN0YXJ0Q29udGFpbmVyLCBzZWxlY3RlZFJhbmdlLnN0YXJ0T2Zmc2V0IC0gMSk7XG4gICAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UuZGVsZXRlQ29udGVudHMoKTtcbiAgICAgICAgICAgICAgdGhpcy5fZGlzcGF0Y2hJbnB1dEV2ZW50KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0RlbGV0ZScgJiYgc2VsZWN0ZWRSYW5nZS5lbmRPZmZzZXQgPCB0aGlzLnZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAvLyBXaGVuIHByZXNzaW5nIERlbGV0ZSwgd2Ugc2VsZWN0IHRoZSBuZXh0IGNoYXJhY3RlciBmcm9tXG4gICAgICAgICAgICAgIC8vIHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiBhbmQgZGVsZXRlIGl0LlxuICAgICAgICAgICAgICBzZWxlY3RlZFJhbmdlLnNldEVuZChzZWxlY3RlZFJhbmdlLmVuZENvbnRhaW5lciwgc2VsZWN0ZWRSYW5nZS5lbmRPZmZzZXQgKyAxKTtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgICAgICAgICAgICB0aGlzLl9kaXNwYXRjaElucHV0RXZlbnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHsgY2FwdHVyZTogdHJ1ZSB9LFxuICAgICAgKTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKFxuICAgICAgICAna2V5dXAnLFxuICAgICAgICAoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFuZ2VJZk5lY2Vzc2FyeSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3Nob3VsZFRyaWdnZXJTdWJtaXQpIHtcbiAgICAgICAgICAgICAgdGhpcy5fc2hvdWxkVHJpZ2dlclN1Ym1pdCA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLmZvcm0/LnJlcXVlc3RTdWJtaXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHsgY2FwdHVyZTogdHJ1ZSB9LFxuICAgICAgKTtcbiAgICAgIC8vIGNvbnRlbnRlZGl0YWJsZSBhbGxvd3MgcGFzdGluZyByaWNoIGNvbnRlbnQgaW50byBpdHMgaG9zdC5cbiAgICAgIC8vIFdlIHByZXZlbnQgdGhpcyBieSBsaXN0ZW5pbmcgdG8gdGhlIHBhc3RlIGV2ZW50IGFuZFxuICAgICAgLy8gZXh0cmFjdGluZyB0aGUgcGxhaW4gdGV4dCBmcm9tIHRoZSBwYXN0ZWQgY29udGVudFxuICAgICAgLy8gYW5kIGluc2VydGluZyBpdCBpbnRvIHRoZSBzZWxlY3RlZCByYW5nZSAoY3Vyc29yIHBvc2l0aW9uXG4gICAgICAvLyBvciBzZWxlY3Rpb24pLlxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ3Bhc3RlJywgKGUpID0+IHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCB0ZXh0ID0gdGhpcy5fY2xlYW5UZXh0KGUuY2xpcGJvYXJkRGF0YT8uZ2V0RGF0YSgndGV4dC9wbGFpbicpID8/ICcnKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSYW5nZSA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKT8uZ2V0UmFuZ2VBdCgwKTtcbiAgICAgICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8ICF0ZXh0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc2VsZWN0ZWRSYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgICAgICBzZWxlY3RlZFJhbmdlLmluc2VydE5vZGUoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCkpO1xuICAgICAgICBzZWxlY3RlZFJhbmdlLnNldFN0YXJ0KHNlbGVjdGVkUmFuZ2UuZW5kQ29udGFpbmVyLCBzZWxlY3RlZFJhbmdlLmVuZE9mZnNldCk7XG4gICAgICAgIHRoaXMuX2Rpc3BhdGNoSW5wdXRFdmVudCgpO1xuICAgICAgfSk7XG4gICAgICAvLyBXaGVuIGZvY3VzaW5nIGEgdGV4dCBpbnB1dCB2aWEga2V5Ym9hcmQsIHRoZSB0ZXh0IGNvbnRlbnQgc2hvdWxkIGJlIHNlbGVjdGVkLlxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2ZvY3VzJywgKCkgPT4ge1xuICAgICAgICBpZiAoc2JiSW5wdXRNb2RhbGl0eURldGVjdG9yLm1vc3RSZWNlbnRNb2RhbGl0eSA9PT0gJ2tleWJvYXJkJykge1xuICAgICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKT8uc2VsZWN0QWxsQ2hpbGRyZW4odGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLy8gT24gYmx1ciB0aGUgbmF0aXZlIHRleHQgaW5wdXQgc2Nyb2xscyB0aGUgdGV4dCB0byB0aGUgc3RhcnQgb2YgdGhlIHRleHQuXG4gICAgICAvLyBXZSBtaW1pY2sgdGhhdCBieSByZXNldHRpbmcgdGhlIHNjcm9sbCBwb3NpdGlvbi5cbiAgICAgIC8vIFdlIGFsc28gdW5zZXQgYW55IHNlbGVjdGlvbiB0byBhbGlnbiB3aXRoIHRoZSBuYXRpdmUgdGV4dCBpbnB1dC5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKFxuICAgICAgICAnYmx1cicsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk/LnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICAgIHRoaXMuX2VtaXRDaGFuZ2VJZk5lY2Vzc2FyeSgpO1xuICAgICAgICAgIHRoaXMuc2Nyb2xsTGVmdCA9IDA7XG4gICAgICAgIH0sXG4gICAgICAgIHsgY2FwdHVyZTogdHJ1ZSB9LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgICAgdGhpcy5pbnRlcm5hbHMuYXJpYU11bHRpTGluZSA9ICdmYWxzZSc7XG4gICAgICB0aGlzLl91cGRhdGVDb250ZW50ZWRpdGFibGUoKTtcblxuICAgICAgLy8gV2Ugd2FudCB0byByZXBsYWNlIGFueSBjb250ZW50IGJ5IGp1c3QgdGhlIHRleHQgY29udGVudC5cbiAgICAgIHRoaXMuaW5uZXJIVE1MID0gdGhpcy52YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZm9jdXMob3B0aW9ucz86IEZvY3VzT3B0aW9ucyk6IHZvaWQge1xuICAgICAgc3VwZXIuZm9jdXMob3B0aW9ucyk7XG4gICAgICAvLyBCeSBkZWZhdWx0LCB3aGVuIGNhbGxpbmcgZm9jdXMgb24gYW4gaW5wdXQgZWxlbWVudCwgdGhlIGN1cnNvciBpcyBwbGFjZWRcbiAgICAgIC8vIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0IHRleHQuIEhvd2V2ZXIsIHdpdGggY29udGVudGVkaXRhYmxlLCB0aGUgY3Vyc29yXG4gICAgICAvLyBpcyBwbGFjZWQgYXQgdGhlIGJlZ2lubmluZywgc28gd2UgbW92ZSBpdCB0byB0aGUgZW5kLCBpZiB0aGF0IGlzIHRoZSBjYXNlLlxuICAgICAgaWYgKCFpc1NlcnZlciAmJiAhdGhpcy5kaXNhYmxlZCAmJiAhdGhpcy5yZWFkT25seSAmJiB0aGlzLnZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJhbmdlID0gc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCkgOiBudWxsO1xuICAgICAgICBpZiAocmFuZ2UgJiYgcmFuZ2Uuc3RhcnRPZmZzZXQgIT09IDApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgIHJhbmdlLnNldFN0YXJ0KHRoaXMuZmlyc3RDaGlsZCEsIHRoaXMudGV4dENvbnRlbnQhLmxlbmd0aCk7XG4gICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpO1xuICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhcbiAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgIG9sZDogc3RyaW5nIHwgbnVsbCxcbiAgICAgIHZhbHVlOiBzdHJpbmcgfCBudWxsLFxuICAgICk6IHZvaWQge1xuICAgICAgaWYgKG5hbWUgIT09ICd2YWx1ZScgfHwgIXRoaXMuX2ludGVyYWN0ZWQpIHtcbiAgICAgICAgc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG5hbWUsIG9sZCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElzIGNhbGxlZCB3aGVuZXZlciB0aGUgZm9ybSBpcyBiZWluZyByZXNldC5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBmb3JtUmVzZXRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAgIHRoaXMuX2ludGVyYWN0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZSgndmFsdWUnKSA/PyAnJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgQ2FsbGVkIHdoZW4gdGhlIGJyb3dzZXIgaXMgdHJ5aW5nIHRvIHJlc3RvcmUgZWxlbWVudOKAmXMgc3RhdGUgdG8gc3RhdGUgaW4gd2hpY2ggY2FzZVxuICAgICAqICByZWFzb24gaXMgXCJyZXN0b3JlXCIsIG9yIHdoZW4gdGhlIGJyb3dzZXIgaXMgdHJ5aW5nIHRvIGZ1bGZpbGwgYXV0b2ZpbGwgb24gYmVoYWxmIG9mXG4gICAgICogIHVzZXIgaW4gd2hpY2ggY2FzZSByZWFzb24gaXMgXCJhdXRvY29tcGxldGVcIi5cbiAgICAgKiAgSW4gdGhlIGNhc2Ugb2YgXCJyZXN0b3JlXCIsIHN0YXRlIGlzIGEgc3RyaW5nLCBGaWxlLCBvciBGb3JtRGF0YSBvYmplY3RcbiAgICAgKiAgcHJldmlvdXNseSBzZXQgYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBzZXRGb3JtVmFsdWUuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZm9ybVN0YXRlUmVzdG9yZUNhbGxiYWNrKFxuICAgICAgc3RhdGU6IEZvcm1SZXN0b3JlU3RhdGUgfCBudWxsLFxuICAgICAgX3JlYXNvbjogRm9ybVJlc3RvcmVSZWFzb24sXG4gICAgKTogdm9pZCB7XG4gICAgICBpZiAoc3RhdGUgJiYgdHlwZW9mIHN0YXRlID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnZhbHVlID0gc3RhdGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICAgIC8vIElmIHRoZSB2YWx1ZSB3YXMgYXNzaWduZWQgYmVmb3JlIGZpcnN0VXBkYXRlLCB3ZSBoYXZlIHRvXG4gICAgICAvLyB3cml0ZSBpdCB0aGUgZG9jdW1lbnQgdG8gYmUgdmlzdWFsbHkgc2VlblxuICAgICAgaWYgKHRoaXMudmFsdWUgJiYgIXRoaXMuaW5uZXJIVE1MLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmlubmVySFRNTCA9IHRoaXMudmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHVwZGF0ZUZvcm1WYWx1ZSgpOiB2b2lkIHtcbiAgICAgIHRoaXMuaW50ZXJuYWxzLnNldEZvcm1WYWx1ZSh0aGlzLnZhbHVlLCB0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc2hvdWxkVmFsaWRhdGUobmFtZTogUHJvcGVydHlLZXkgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBzdXBlci5zaG91bGRWYWxpZGF0ZShuYW1lKSB8fCBuYW1lID09PSAndmFsdWUnIHx8IG5hbWUgPT09ICdyZXF1aXJlZCc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZhbGlkYXRlKCk6IHZvaWQge1xuICAgICAgc3VwZXIudmFsaWRhdGUoKTtcbiAgICAgIGlmICh0aGlzLnJlcXVpcmVkICYmICF0aGlzLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0VmFsaWRpdHlGbGFnKCd2YWx1ZU1pc3NpbmcnLCBpMThuSW5wdXRSZXF1aXJlZFt0aGlzLmxhbmd1YWdlLmN1cnJlbnRdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVtb3ZlVmFsaWRpdHlGbGFnKCd2YWx1ZU1pc3NpbmcnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9jbGVhblRleHQodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAvLyBUaGUgbmF0aXZlIHRleHQgaW5wdXQgcmVtb3ZlcyBhbGwgbmV3bGluZSBjaGFyYWN0ZXJzIGlmIHBhc3NlZCB0byB0aGUgdmFsdWUgcHJvcGVydHlcbiAgICAgIHJldHVybiBgJHt2YWx1ZX1gLnJlcGxhY2UoL1tcXG5cXHJdKy9nLCAnJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGlzcGF0Y2hJbnB1dEV2ZW50KCk6IHZvaWQge1xuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KCdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSwgY29tcG9zZWQ6IHRydWUgfSkpO1xuICAgIH1cblxuICAgIEBldmVudE9wdGlvbnMoeyBwYXNzaXZlOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBfY2xlYW5DaGlsZHJlbigpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLmNoaWxkRWxlbWVudENvdW50KSB7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0aGlzLmNoaWxkcmVuKSB7XG4gICAgICAgICAgZWxlbWVudC5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3VwZGF0ZUNvbnRlbnRlZGl0YWJsZSgpOiB2b2lkIHtcbiAgICAgIGlmICghaXNTZXJ2ZXIgJiYgdGhpcy5pc0Nvbm5lY3RlZCkge1xuICAgICAgICAvLyBGaXJlZm94IGRvZXMgbm90IHlldCBzdXBwb3J0IHBsYWludGV4dC1vbmx5LiBPbmNlIHRoaXMgaXMgYXZhaWxhYmxlXG4gICAgICAgIC8vIGZvciBvdXIgc3VwcG9ydGVkIGJyb3dzZXIgcmFuZ2UsIHdlIGNhbiBzd2l0Y2ggdG8gaXQgZnVsbHkuXG4gICAgICAgIGNvbnN0IHZhbHVlID1cbiAgICAgICAgICB0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZE9ubHkgPyAnZmFsc2UnIDogaXNGaXJlZm94ID8gJ3RydWUnIDogJ3BsYWludGV4dC1vbmx5JztcbiAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsIHZhbHVlKTtcbiAgICAgICAgLy8gSW4gdGhlIHJlYWRvbmx5IGNhc2UsIHdlIGRpc2FibGUgY29udGVudGVkaXRhYmxlLCBidXQgaXQgc3RpbGxcbiAgICAgICAgLy8gbmVlZHMgdG8gYmUgZm9jdXNhYmxlLiBXZSBhY2hpZXZlIHRoaXMgYnkgc2V0dGluZyB0YWJpbmRleCBpbiB0aGF0IGNhc2UuXG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZSgndGFiaW5kZXgnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2VtaXRDaGFuZ2VJZk5lY2Vzc2FyeSgpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLl9zaG91bGRFbWl0Q2hhbmdlKSB7XG4gICAgICAgIHRoaXMuX3Nob3VsZEVtaXRDaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IHVua25vd24ge1xuICAgICAgcmV0dXJuIGh0bWxgPHNsb3QgQHNsb3RjaGFuZ2U9JHt0aGlzLl9jbGVhbkNoaWxkcmVufT48L3Nsb3Q+YDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gU2JiRm9ybUFzc29jaWF0ZWRJbnB1dEVsZW1lbnQgYXMgdW5rbm93biBhcyBDb25zdHJ1Y3RvcjxTYmJGb3JtQXNzb2NpYXRlZElucHV0TWl4aW5UeXBlPiAmXG4gICAgVDtcbn07XG4iLCJpbXBvcnQgeyBpc1NlcnZlciwgdHlwZSBMaXRFbGVtZW50LCB0eXBlIFByb3BlcnR5VmFsdWVzIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBnZXROZXh0RWxlbWVudEluZGV4LCBpbnRlcmFjdGl2aXR5Q2hlY2tlciwgaXNBcnJvd0tleVByZXNzZWQgfSBmcm9tICcuLi9hMTF5LmpzJztcbmltcG9ydCB7IFNiYkNvbm5lY3RlZEFib3J0Q29udHJvbGxlciwgU2JiTGFuZ3VhZ2VDb250cm9sbGVyIH0gZnJvbSAnLi4vY29udHJvbGxlcnMuanMnO1xuaW1wb3J0IHsgaTE4blNlbGVjdGlvblJlcXVpcmVkIH0gZnJvbSAnLi4vaTE4bi5qcyc7XG5cbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0b3IgfSBmcm9tICcuL2NvbnN0cnVjdG9yLmpzJztcbmltcG9ydCB7IFNiYkRpc2FibGVkTWl4aW4sIHR5cGUgU2JiRGlzYWJsZWRNaXhpblR5cGUgfSBmcm9tICcuL2Rpc2FibGVkLW1peGluLmpzJztcbmltcG9ydCB7XG4gIHR5cGUgRm9ybVJlc3RvcmVSZWFzb24sXG4gIHR5cGUgRm9ybVJlc3RvcmVTdGF0ZSxcbiAgU2JiRm9ybUFzc29jaWF0ZWRNaXhpbixcbiAgdHlwZSBTYmJGb3JtQXNzb2NpYXRlZE1peGluVHlwZSxcbn0gZnJvbSAnLi9mb3JtLWFzc29jaWF0ZWQtbWl4aW4uanMnO1xuaW1wb3J0IHsgU2JiUmVxdWlyZWRNaXhpbiwgdHlwZSBTYmJSZXF1aXJlZE1peGluVHlwZSB9IGZyb20gJy4vcmVxdWlyZWQtbWl4aW4uanMnO1xuXG4vKipcbiAqIEEgc3RhdGljIHJlZ2lzdHJ5IHRoYXQgaG9sZHMgYSBjb2xsZWN0aW9uIG9mIGdyb3VwZWQgYHJhZGlvLWJ1dHRvbnNgLlxuICogR3JvdXBzIG9mIHJhZGlvIGJ1dHRvbnMgYXJlIGxvY2FsIHRvIHRoZSBmb3JtIHRoZXkgYmVsb25nIChvciB0aGUgYHJlbmRlclJvb3RgIGlmIHRoZXkncmUgbm90IHBhcnQgb2YgYW55IGZvcm0pXG4gKiBNdWx0aXBsZSBncm91cHMgb2YgcmFkaW8gd2l0aCB0aGUgc2FtZSBuYW1lIGNhbiBjb2V4aXN0IChhcyBsb25nIGFzIHRoZXkgYmVsb25nIHRvIGEgZGlmZmVyZW50IGZvcm0gLyByZW5kZXJSb290KVxuICogSXQgaXMgbWFpbmx5IHVzZWQgdG8gc3VwcG9ydCB0aGUgc3RhbmRhbG9uZSBncm91cHMgb2YgcmFkaW9zLlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCByYWRpb0J1dHRvblJlZ2lzdHJ5ID0gbmV3IFdlYWtNYXA8XG4gIE5vZGUsXG4gIE1hcDxzdHJpbmcsIFNldDxTYmJGb3JtQXNzb2NpYXRlZFJhZGlvQnV0dG9uTWl4aW5UeXBlPj5cbj4oKTtcblxuZXhwb3J0IGRlY2xhcmUgY2xhc3MgU2JiRm9ybUFzc29jaWF0ZWRSYWRpb0J1dHRvbk1peGluVHlwZVxuICBleHRlbmRzIFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW5UeXBlXG4gIGltcGxlbWVudHMgUGFydGlhbDxTYmJEaXNhYmxlZE1peGluVHlwZT4sIFBhcnRpYWw8U2JiUmVxdWlyZWRNaXhpblR5cGU+XG57XG4gIHB1YmxpYyBhY2Nlc3NvciBjaGVja2VkOiBib29sZWFuO1xuICBwdWJsaWMgYWNjZXNzb3IgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIHB1YmxpYyBhY2Nlc3NvciByZXF1aXJlZDogYm9vbGVhbjtcblxuICBwcm90ZWN0ZWQgYXNzb2NpYXRlZFJhZGlvQnV0dG9ucz86IFNldDxTYmJGb3JtQXNzb2NpYXRlZFJhZGlvQnV0dG9uTWl4aW5UeXBlPjtcbiAgLyoqIEBkZXByZWNhdGVkIE5vIGxvbmdlciB1c2VkIGludGVybmFsbHkuICovXG4gIHByb3RlY3RlZCBhYm9ydDogU2JiQ29ubmVjdGVkQWJvcnRDb250cm9sbGVyO1xuXG4gIHB1YmxpYyBmb3JtUmVzZXRDYWxsYmFjaygpOiB2b2lkO1xuICBwdWJsaWMgZm9ybVN0YXRlUmVzdG9yZUNhbGxiYWNrKHN0YXRlOiBGb3JtUmVzdG9yZVN0YXRlIHwgbnVsbCwgcmVhc29uOiBGb3JtUmVzdG9yZVJlYXNvbik6IHZvaWQ7XG5cbiAgcHJvdGVjdGVkIGlzRGlzYWJsZWRFeHRlcm5hbGx5KCk6IGJvb2xlYW47XG4gIHByb3RlY3RlZCBpc1JlcXVpcmVkRXh0ZXJuYWxseSgpOiBib29sZWFuO1xuICBwcm90ZWN0ZWQgd2l0aFVzZXJJbnRlcmFjdGlvbj8oKTogdm9pZDtcbiAgcHJvdGVjdGVkIHVwZGF0ZUZvcm1WYWx1ZSgpOiB2b2lkO1xuICBwcm90ZWN0ZWQgdXBkYXRlRm9jdXNhYmxlUmFkaW9zKCk6IHZvaWQ7XG4gIHByb3RlY3RlZCBlbWl0Q2hhbmdlRXZlbnRzKCk6IHZvaWQ7XG4gIHByb3RlY3RlZCBuYXZpZ2F0ZUJ5S2V5Ym9hcmQocmFkaW86IFNiYkZvcm1Bc3NvY2lhdGVkUmFkaW9CdXR0b25NaXhpblR5cGUpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKipcbiAqIFRoZSBTYmJGb3JtQXNzb2NpYXRlZFJhZGlvQnV0dG9uTWl4aW4gZW5hYmxlcyBuYXRpdmUgZm9ybSBzdXBwb3J0IGZvciByYWRpbyBjb250cm9scy5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGNvbnN0IFNiYkZvcm1Bc3NvY2lhdGVkUmFkaW9CdXR0b25NaXhpbiA9IDxUIGV4dGVuZHMgQ29uc3RydWN0b3I8TGl0RWxlbWVudD4+KFxuICBzdXBlckNsYXNzOiBULFxuKTogQ29uc3RydWN0b3I8U2JiRm9ybUFzc29jaWF0ZWRSYWRpb0J1dHRvbk1peGluVHlwZT4gJiBUID0+IHtcbiAgY2xhc3MgU2JiRm9ybUFzc29jaWF0ZWRSYWRpb0J1dHRvbkVsZW1lbnRcbiAgICBleHRlbmRzIFNiYkRpc2FibGVkTWl4aW4oU2JiUmVxdWlyZWRNaXhpbihTYmJGb3JtQXNzb2NpYXRlZE1peGluKHN1cGVyQ2xhc3MpKSlcbiAgICBpbXBsZW1lbnRzIFBhcnRpYWw8U2JiRm9ybUFzc29jaWF0ZWRSYWRpb0J1dHRvbk1peGluVHlwZT5cbiAge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJhZGlvIGJ1dHRvbiBpcyBjaGVja2VkLlxuICAgICAqL1xuICAgIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4gfSlcbiAgICBwdWJsaWMgc2V0IGNoZWNrZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgIHRoaXMuX2NoZWNrZWQgPSAhIXZhbHVlO1xuXG4gICAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1jaGVja2VkJywgdGhpcy5jaGVja2VkKTtcbiAgICAgIHRoaXMuaW50ZXJuYWxzLmFyaWFDaGVja2VkID0gdGhpcy5jaGVja2VkLnRvU3RyaW5nKCk7XG4gICAgICB0aGlzLnVwZGF0ZUZvcm1WYWx1ZSgpO1xuICAgICAgdGhpcy5fc3luY2hyb25pemVHcm91cFN0YXRlKCk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgY2hlY2tlZCgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLl9jaGVja2VkO1xuICAgIH1cbiAgICBwcml2YXRlIF9jaGVja2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IG5hbWUodmFsdWU6IHN0cmluZykge1xuICAgICAgc3VwZXIubmFtZSA9IHZhbHVlO1xuXG4gICAgICB0aGlzLl9kaXNjb25uZWN0RnJvbVJlZ2lzdHJ5KCk7XG4gICAgICB0aGlzLl9jb25uZWN0VG9SZWdpc3RyeSgpO1xuICAgICAgdGhpcy5fc3luY2hyb25pemVHcm91cFN0YXRlKCk7XG4gICAgfVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHN1cGVyLm5hbWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9ybSB0eXBlIG9mIGVsZW1lbnQuXG4gICAgICogQGRlZmF1bHQgJ3JhZGlvJ1xuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuICdyYWRpbyc7XG4gICAgfVxuXG4gICAgLyoqIEBkZXByZWNhdGVkIE5vIGxvbmdlciB1c2VkIGludGVybmFsbHkuICovXG4gICAgcHJvdGVjdGVkIGFib3J0ID0gbmV3IFNiYkNvbm5lY3RlZEFib3J0Q29udHJvbGxlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFNldCBvZiByYWRpbyBidXR0b25zIHRoYXQgYmVsb25ncyB0byB0aGUgc2FtZSBncm91cCBvZiBgdGhpc2AuXG4gICAgICogQXNzdW1lIHRoZW0gb3JkZXJlZCBpbiBET00gb3JkZXJcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYXNzb2NpYXRlZFJhZGlvQnV0dG9ucz86IFNldDxTYmJGb3JtQXNzb2NpYXRlZFJhZGlvQnV0dG9uRWxlbWVudD47XG4gICAgcHJpdmF0ZSBfcmFkaW9CdXR0b25Hcm91cHNNYXA/OiBNYXA8c3RyaW5nLCBTZXQ8U2JiRm9ybUFzc29jaWF0ZWRSYWRpb0J1dHRvbk1peGluVHlwZT4+O1xuICAgIHByaXZhdGUgX2xhbmd1YWdlQ29udHJvbGxlciA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7XG4gICAgICBzdXBlcigpO1xuICAgICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgICAgdGhpcy5pbnRlcm5hbHMucm9sZSA9ICdyYWRpbyc7XG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/Ligna2V5ZG93bicsIChlKSA9PiB0aGlzLl9oYW5kbGVBcnJvd0tleURvd24oZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgICB0aGlzLl9jb25uZWN0VG9SZWdpc3RyeSgpO1xuICAgICAgdGhpcy5fc3luY2hyb25pemVHcm91cFN0YXRlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICAgIHRoaXMuX2Rpc2Nvbm5lY3RGcm9tUmVnaXN0cnkoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIGZvcm0gaXMgYmVpbmcgcmVzZXQuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGZvcm1SZXNldENhbGxiYWNrKCk6IHZvaWQge1xuICAgICAgdGhpcy5jaGVja2VkID0gdGhpcy5oYXNBdHRyaWJ1dGUoJ2NoZWNrZWQnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgQ2FsbGVkIHdoZW4gdGhlIGJyb3dzZXIgaXMgdHJ5aW5nIHRvIHJlc3RvcmUgZWxlbWVudOKAmXMgc3RhdGUgdG8gc3RhdGUgaW4gd2hpY2ggY2FzZVxuICAgICAqICByZWFzb24gaXMgXCJyZXN0b3JlXCIsIG9yIHdoZW4gdGhlIGJyb3dzZXIgaXMgdHJ5aW5nIHRvIGZ1bGZpbGwgYXV0b2ZpbGwgb24gYmVoYWxmIG9mXG4gICAgICogIHVzZXIgaW4gd2hpY2ggY2FzZSByZWFzb24gaXMgXCJhdXRvY29tcGxldGVcIi5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZm9ybVN0YXRlUmVzdG9yZUNhbGxiYWNrKFxuICAgICAgc3RhdGU6IEZvcm1SZXN0b3JlU3RhdGUgfCBudWxsLFxuICAgICAgX3JlYXNvbjogRm9ybVJlc3RvcmVSZWFzb24sXG4gICAgKTogdm9pZCB7XG4gICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgdGhpcy5jaGVja2VkID0gc3RhdGUgPT09IHRoaXMudmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnZGlzYWJsZWQnKSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUZvY3VzYWJsZVJhZGlvcygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuICAgICAgdGhpcy51cGRhdGVGb2N1c2FibGVSYWRpb3MoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgb24gYHZhbHVlYCBjaGFuZ2VcbiAgICAgKiBJZiAnY2hlY2tlZCcsIHVwZGF0ZSB0aGUgdmFsdWUuIE90aGVyd2lzZSwgZG8gbm90aGluZy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdXBkYXRlRm9ybVZhbHVlKCk6IHZvaWQge1xuICAgICAgaWYgKHRoaXMuY2hlY2tlZCkge1xuICAgICAgICB0aGlzLmludGVybmFscy5zZXRGb3JtVmFsdWUodGhpcy52YWx1ZSwgdGhpcy52YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmludGVybmFscy5zZXRGb3JtVmFsdWUobnVsbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHNob3VsZFZhbGlkYXRlKG5hbWU6IFByb3BlcnR5S2V5IHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gc3VwZXIuc2hvdWxkVmFsaWRhdGUobmFtZSkgfHwgbmFtZSA9PT0gJ2NoZWNrZWQnIHx8IG5hbWUgPT09ICdyZXF1aXJlZCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdmFsaWRpdHkgb2YgYWxsIGFzc29jaWF0ZWQgcmFkaW8gYnV0dG9ucy5cbiAgICAgKiBJZiBhbnkgcmFkaW8gYnV0dG9uIGlzIHJlcXVpcmVkLCBhbGwgYXNzb2NpYXRlZCBhcmUgcmVxdWlyZWQgYXMgd2VsbC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmFsaWRhdGUoKTogdm9pZCB7XG4gICAgICBzdXBlci52YWxpZGF0ZSgpO1xuICAgICAgaWYgKCF0aGlzLmFzc29jaWF0ZWRSYWRpb0J1dHRvbnMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVxdWlyZWQgPSBmYWxzZTtcbiAgICAgIGxldCBjaGVja2VkID0gZmFsc2U7XG4gICAgICBmb3IgKGNvbnN0IHJhZGlvIG9mIHRoaXMuYXNzb2NpYXRlZFJhZGlvQnV0dG9ucykge1xuICAgICAgICByZXF1aXJlZCB8fD0gcmFkaW8ucmVxdWlyZWQ7XG4gICAgICAgIGNoZWNrZWQgfHw9IHJhZGlvLmNoZWNrZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXF1aXJlZCAmJiAhY2hlY2tlZCkge1xuICAgICAgICB0aGlzLmFzc29jaWF0ZWRSYWRpb0J1dHRvbnMuZm9yRWFjaCgocikgPT5cbiAgICAgICAgICByLnNldFZhbGlkaXR5RmxhZyhcbiAgICAgICAgICAgICd2YWx1ZU1pc3NpbmcnLFxuICAgICAgICAgICAgaTE4blNlbGVjdGlvblJlcXVpcmVkW3RoaXMuX2xhbmd1YWdlQ29udHJvbGxlci5jdXJyZW50XSxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hc3NvY2lhdGVkUmFkaW9CdXR0b25zLmZvckVhY2goKHIpID0+IHIucmVtb3ZlVmFsaWRpdHlGbGFnKCd2YWx1ZU1pc3NpbmcnKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT25seSBhIHNpbmdsZSByYWRpbyBzaG91bGQgYmUgZm9jdXNhYmxlIGluIHRoZSBncm91cC4gRGVmaW5lZCBhczpcbiAgICAgKiAtIHRoZSBjaGVja2VkIHJhZGlvO1xuICAgICAqIC0gdGhlIGZpcnN0IG5vbi1kaXNhYmxlZCByYWRpbyBpbiBET00gb3JkZXI7XG4gICAgICovXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUZvY3VzYWJsZVJhZGlvcygpOiB2b2lkIHtcbiAgICAgIGlmICghdGhpcy5oYXNVcGRhdGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJhZGlvcyA9IHRoaXMuX2ludGVyYWN0YWJsZUdyb3VwZWRSYWRpb3MoKTtcbiAgICAgIGNvbnN0IGNoZWNrZWRJbmRleCA9IHJhZGlvcy5maW5kSW5kZXgoKHIpID0+IHIuY2hlY2tlZCAmJiAhci5kaXNhYmxlZCAmJiAhci5mb3JtRGlzYWJsZWQpO1xuICAgICAgY29uc3QgZm9jdXNhYmxlSW5kZXggPVxuICAgICAgICBjaGVja2VkSW5kZXggIT09IC0xXG4gICAgICAgICAgPyBjaGVja2VkSW5kZXhcbiAgICAgICAgICA6IHJhZGlvcy5maW5kSW5kZXgoKHIpID0+ICFyLmRpc2FibGVkICYmICFyLmZvcm1EaXNhYmxlZCk7IC8vIEdldCB0aGUgZmlyc3QgZm9jdXNhYmxlIHJhZGlvXG5cbiAgICAgIGlmIChmb2N1c2FibGVJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgcmFkaW9zW2ZvY3VzYWJsZUluZGV4XS50YWJJbmRleCA9IDA7XG4gICAgICAgIHJhZGlvcy5zcGxpY2UoZm9jdXNhYmxlSW5kZXgsIDEpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZXNldCB0YWJJbmRleCBvbiBvdGhlciByYWRpb3NcbiAgICAgIHJhZGlvcy5mb3JFYWNoKChyKSA9PiByLnJlbW92ZUF0dHJpYnV0ZSgndGFiaW5kZXgnKSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIG5hdmlnYXRlQnlLZXlib2FyZChuZXh0OiBTYmJGb3JtQXNzb2NpYXRlZFJhZGlvQnV0dG9uRWxlbWVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgbmV4dC5jaGVja2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMuZW1pdENoYW5nZUV2ZW50cygpO1xuXG4gICAgICBhd2FpdCBuZXh0LnVwZGF0ZUNvbXBsZXRlO1xuICAgICAgbmV4dC5mb2N1cygpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBlbWl0Q2hhbmdlRXZlbnRzKCk6IHZvaWQge1xuICAgICAgLy8gTWFudWFsbHkgZGlzcGF0Y2ggZXZlbnRzIHRvIHNpbXVsYXRlIGEgdXNlciBpbnRlcmFjdGlvblxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgSW5wdXRFdmVudCgnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUsIGNvbXBvc2VkOiB0cnVlIH0pLFxuICAgICAgKTtcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NoYW5nZScsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc3luY2hyb25pemVHcm91cFN0YXRlKCk6IHZvaWQge1xuICAgICAgaWYgKHRoaXMuY2hlY2tlZCkge1xuICAgICAgICB0aGlzLl9kZXNlbGVjdEdyb3VwZWRSYWRpb3MoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlRm9jdXNhYmxlUmFkaW9zKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIGB0aGlzYCB0byB0aGUgcmFkaW9CdXR0b24gcmVnaXN0cnlcbiAgICAgKi9cbiAgICBwcml2YXRlIF9jb25uZWN0VG9SZWdpc3RyeSgpOiB2b2lkIHtcbiAgICAgIGlmICghdGhpcy5uYW1lIHx8IGlzU2VydmVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuZm9ybSA/PyB0aGlzLmdldFJvb3ROb2RlKCk7XG4gICAgICB0aGlzLl9yYWRpb0J1dHRvbkdyb3Vwc01hcCA9IHJhZGlvQnV0dG9uUmVnaXN0cnkuZ2V0KHJvb3QpO1xuXG4gICAgICAvLyBJbml0aWFsaXplIHRoZSAncm9vdCcgbWFwIGVudHJ5XG4gICAgICBpZiAoIXRoaXMuX3JhZGlvQnV0dG9uR3JvdXBzTWFwKSB7XG4gICAgICAgIHRoaXMuX3JhZGlvQnV0dG9uR3JvdXBzTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICByYWRpb0J1dHRvblJlZ2lzdHJ5LnNldChyb290LCB0aGlzLl9yYWRpb0J1dHRvbkdyb3Vwc01hcCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYXNzb2NpYXRlZFJhZGlvQnV0dG9ucyA9IHRoaXMuX3JhZGlvQnV0dG9uR3JvdXBzTWFwLmdldChcbiAgICAgICAgdGhpcy5uYW1lLFxuICAgICAgKSBhcyB1bmtub3duIGFzIFNldDxTYmJGb3JtQXNzb2NpYXRlZFJhZGlvQnV0dG9uRWxlbWVudD47XG5cbiAgICAgIC8vIEluaXRpYWxpemUgdGhlIGdyb3VwIHNldFxuICAgICAgaWYgKCF0aGlzLmFzc29jaWF0ZWRSYWRpb0J1dHRvbnMpIHtcbiAgICAgICAgdGhpcy5hc3NvY2lhdGVkUmFkaW9CdXR0b25zID0gbmV3IFNldCgpO1xuICAgICAgICB0aGlzLl9yYWRpb0J1dHRvbkdyb3Vwc01hcC5zZXQoXG4gICAgICAgICAgdGhpcy5uYW1lLFxuICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZFJhZGlvQnV0dG9ucyBhcyB1bmtub3duIGFzIFNldDxTYmJGb3JtQXNzb2NpYXRlZFJhZGlvQnV0dG9uTWl4aW5UeXBlPixcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gSW5zZXJ0IHRoZSBuZXcgcmFkaW8gaW50byB0aGUgc2V0IGFuZCBzb3J0IGZvbGxvd2luZyB0aGUgRE9NIG9yZGVyLlxuICAgICAgLy8gU2luY2UgdGhlIG9yZGVyIG9mIGEgJ1NldCcgaXMgdGhlIGluc2VydCBvcmRlciwgd2UgaGF2ZSB0byBlbXB0eSBpdCBhbmQgcmUtaW5zZXJ0IHJhZGlvcyBpbiBvcmRlclxuICAgICAgY29uc3QgZW50cmllcyA9IEFycmF5LmZyb20odGhpcy5hc3NvY2lhdGVkUmFkaW9CdXR0b25zKTtcbiAgICAgIHRoaXMuYXNzb2NpYXRlZFJhZGlvQnV0dG9ucy5jbGVhcigpO1xuXG4gICAgICAvLyBGaW5kIGB0aGlzYCBwb3NpdGlvbiBhbmQgaW5zZXJ0IGl0XG4gICAgICBjb25zdCBpbmRleCA9IGVudHJpZXMuZmluZEluZGV4KFxuICAgICAgICAocikgPT4gdGhpcy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihyKSAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HLFxuICAgICAgKTtcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgZW50cmllcy5zcGxpY2UoaW5kZXgsIDAsIHRoaXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW50cmllcy5wdXNoKHRoaXMpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZXBvcHVsYXRlIHRoZSBTZXRcbiAgICAgIGVudHJpZXMuZm9yRWFjaCgocikgPT4gdGhpcy5hc3NvY2lhdGVkUmFkaW9CdXR0b25zIS5hZGQocikpO1xuXG4gICAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGB0aGlzYCBmcm9tIHRoZSByYWRpb0J1dHRvbiByZWdpc3RyeSBhbmQsIGlmIHRoZSBncm91cCBpcyBlbXB0eSwgZGVsZXRlIHRoZSBlbnRyeSBmcm9tIHRoZSBncm91cHMgTWFwXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZGlzY29ubmVjdEZyb21SZWdpc3RyeSgpOiB2b2lkIHtcbiAgICAgIHRoaXMuYXNzb2NpYXRlZFJhZGlvQnV0dG9ucz8uZGVsZXRlKHRoaXMpO1xuXG4gICAgICBpZiAodGhpcy5hc3NvY2lhdGVkUmFkaW9CdXR0b25zPy5zaXplID09PSAwKSB7XG4gICAgICAgIHRoaXMuX3JhZGlvQnV0dG9uR3JvdXBzTWFwPy5kZWxldGUodGhpcy5uYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hc3NvY2lhdGVkUmFkaW9CdXR0b25zID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fcmFkaW9CdXR0b25Hcm91cHNNYXAgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgbGlzdCBvZiAnaW50ZXJhY3RhYmxlJyBncm91cGVkIHJhZGlvcywgb3JkZXJlZCBpbiBET00gb3JkZXJcbiAgICAgKi9cbiAgICBwcml2YXRlIF9pbnRlcmFjdGFibGVHcm91cGVkUmFkaW9zKCk6IFNiYkZvcm1Bc3NvY2lhdGVkUmFkaW9CdXR0b25FbGVtZW50W10ge1xuICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5hc3NvY2lhdGVkUmFkaW9CdXR0b25zID8/IFtdKS5maWx0ZXIoKGVsKSA9PlxuICAgICAgICBpbnRlcmFjdGl2aXR5Q2hlY2tlci5pc1Zpc2libGUoZWwpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXNlbGVjdCBvdGhlciByYWRpbyBvZiB0aGUgc2FtZSBncm91cFxuICAgICAqL1xuICAgIHByaXZhdGUgX2Rlc2VsZWN0R3JvdXBlZFJhZGlvcygpOiB2b2lkIHtcbiAgICAgIEFycmF5LmZyb20odGhpcy5hc3NvY2lhdGVkUmFkaW9CdXR0b25zID8/IFtdKVxuICAgICAgICAuZmlsdGVyKChyKSA9PiByICE9PSB0aGlzKVxuICAgICAgICAuZm9yRWFjaCgocikgPT4gKHIuY2hlY2tlZCA9IGZhbHNlKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfaGFuZGxlQXJyb3dLZXlEb3duKGV2dDogS2V5Ym9hcmRFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgaWYgKCFpc0Fycm93S2V5UHJlc3NlZChldnQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBjb25zdCBlbmFibGVkUmFkaW9zID0gdGhpcy5faW50ZXJhY3RhYmxlR3JvdXBlZFJhZGlvcygpLmZpbHRlcihcbiAgICAgICAgKHIpID0+ICFyLmRpc2FibGVkICYmICFyLmZvcm1EaXNhYmxlZCxcbiAgICAgICk7XG4gICAgICBjb25zdCBjdXJyZW50OiBudW1iZXIgPSBlbmFibGVkUmFkaW9zLmluZGV4T2YodGhpcyk7XG4gICAgICBjb25zdCBuZXh0SW5kZXg6IG51bWJlciA9IGdldE5leHRFbGVtZW50SW5kZXgoZXZ0LCBjdXJyZW50LCBlbmFibGVkUmFkaW9zLmxlbmd0aCk7XG5cbiAgICAgIGF3YWl0IHRoaXMubmF2aWdhdGVCeUtleWJvYXJkKGVuYWJsZWRSYWRpb3NbbmV4dEluZGV4XSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFNiYkZvcm1Bc3NvY2lhdGVkUmFkaW9CdXR0b25FbGVtZW50IGFzIHVua25vd24gYXMgQ29uc3RydWN0b3I8U2JiRm9ybUFzc29jaWF0ZWRSYWRpb0J1dHRvbk1peGluVHlwZT4gJlxuICAgIFQ7XG59O1xuIiwiaW1wb3J0IHR5cGUgeyBMaXRFbGVtZW50LCBQcm9wZXJ0eVZhbHVlcyB9IGZyb20gJ2xpdCc7XG5cbmltcG9ydCB0eXBlIHsgQWJzdHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4vY29uc3RydWN0b3IuanMnO1xuXG4vLyBEZWZpbmUgdGhlIGludGVyZmFjZSBmb3IgdGhlIG1peGluXG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBTYmJIeWRyYXRpb25NaXhpblR5cGUge1xuICAvKipcbiAgICogUmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBlbGVtZW50IGhhcyBjb21wbGV0ZWQgaHlkcmF0aW9uLlxuICAgKiBUaGUgUHJvbWlzZSB2YWx1ZSBpcyBhIGJvb2xlYW4gdGhhdCBpcyBgdHJ1ZWAgaWYgdGhlIGVsZW1lbnQgcmVxdWlyZWQgaHlkcmF0aW9uXG4gICAqIGFuZCBgZmFsc2VgIGlmIG5vdC5cbiAgICpcbiAgICogQHJldHVybiBBIHByb21pc2Ugb2YgYSBib29sZWFuIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSBvbmNlIHRoZSBoeWRyYXRpb24gY29tcGxldGVkLlxuICAgKi9cbiAgcHVibGljIGdldCBoeWRyYXRpb25Db21wbGV0ZSgpOiBQcm9taXNlPGJvb2xlYW4+O1xuXG4gIC8qKiBSZXR1cm5zIHdoZXRoZXIgaHlkcmF0aW9uIGlzIHJlcXVpcmVkIGFuZCBub3QgY29tcGxldGVkLiAqL1xuICBwcm90ZWN0ZWQgZ2V0IGh5ZHJhdGlvblJlcXVpcmVkKCk6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhpcyBtaXhpbiBleHRlbmRzIGEgYmFzZSBjbGFzcyB3aXRoIGZ1bmN0aW9uYWxpdHkgdG8gY2hlY2sgaWYgaHlkcmF0aW9uIGlzIGNvbXBsZXRlZC5cbiAqIEl0IGFsc28gZGVsYXlzIHNsb3RjaGFuZ2UgZXZlbnRzIHVudGlsIGh5ZHJhdGlvbiBpcyBjb21wbGV0ZS5cbiAqXG4gKiBAcGFyYW0gYmFzZSBUaGUgY2xhc3MgdG8gZXh0ZW5kLlxuICogQHJldHVybnMgQSBjbGFzcyBleHRlbmRlZCB3aXRoIHRoZSBoeWRyYXRpb24gY2hlY2sgZnVuY3Rpb25hbGl0eS5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGNvbnN0IFNiYkh5ZHJhdGlvbk1peGluID0gPFQgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgYmFzZTogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiSHlkcmF0aW9uTWl4aW5UeXBlPiAmIFQgPT4ge1xuICBhYnN0cmFjdCBjbGFzcyBTYmJIeWRyYXRpb25NaXhpbkNsYXNzIGV4dGVuZHMgYmFzZSBpbXBsZW1lbnRzIFBhcnRpYWw8U2JiSHlkcmF0aW9uTWl4aW5UeXBlPiB7XG4gICAgcHJpdmF0ZSBfaHlkcmF0aW9uUmVxdWlyZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfaHlkcmF0aW9uQ29tcGxldGUgPSBuZXcgUHJvbWlzZTxib29sZWFuPihcbiAgICAgIChyZXNvbHZlKSA9PiAodGhpcy5fcmVzb2x2ZUh5ZHJhdGlvbiA9IHJlc29sdmUpLFxuICAgICk7XG4gICAgcHJpdmF0ZSBfcmVzb2x2ZUh5ZHJhdGlvbiE6IChoeWRyYXRpb25SZXF1aXJlZDogYm9vbGVhbikgPT4gdm9pZDtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZWxlbWVudCBoYXMgY29tcGxldGVkIGh5ZHJhdGlvbi5cbiAgICAgKiBUaGUgUHJvbWlzZSB2YWx1ZSBpcyBhIGJvb2xlYW4gdGhhdCBpcyBgdHJ1ZWAgaWYgdGhlIGVsZW1lbnQgcmVxdWlyZWQgaHlkcmF0aW9uXG4gICAgICogYW5kIGBmYWxzZWAgaWYgbm90LlxuICAgICAqXG4gICAgICogQHJldHVybiBBIHByb21pc2Ugb2YgYSBib29sZWFuIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSBvbmNlIHRoZSBoeWRyYXRpb24gY29tcGxldGVkLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaHlkcmF0aW9uQ29tcGxldGUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICByZXR1cm4gdGhpcy5faHlkcmF0aW9uQ29tcGxldGU7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgd2hldGhlciBoeWRyYXRpb24gaXMgcmVxdWlyZWQgYW5kIG5vdCBjb21wbGV0ZWQuICovXG4gICAgcHJvdGVjdGVkIGdldCBoeWRyYXRpb25SZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLl9oeWRyYXRpb25SZXF1aXJlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoLi4uYXJnczogYW55W10pIHtcbiAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgICAgLy8gQ2hlY2sgd2hldGhlciBoeWRyYXRpb24gaXMgbmVlZGVkIGJ5IGNoZWNraW5nIHdoZXRoZXIgdGhlIHNoYWRvdyByb290XG4gICAgICAvLyBpcyBhdmFpbGFibGUgZHVyaW5nIGNvbnN0cnVjdGlvbi91cGdyYWRlIHBoYXNlLlxuICAgICAgdGhpcy5faHlkcmF0aW9uUmVxdWlyZWQgPSAhIXRoaXMuc2hhZG93Um9vdDtcbiAgICAgIGlmICghdGhpcy5faHlkcmF0aW9uUmVxdWlyZWQpIHtcbiAgICAgICAgdGhpcy5fcmVzb2x2ZUh5ZHJhdGlvbihmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEdXJpbmcgaHlkcmF0aW9uIHBoYXNlLCB3ZSB3YW50IHRvIHN1cHByZXNzIHNsb3RjaGFuZ2UgZXZlbnRzIGFzIHRoZXlcbiAgICAgICAgLy8gY2FuIGNhdXNlIHJlbmRlciBkaWZmZXJlbmNlcywgd2hpY2ggd291bGQgYnJlYWsgaHlkcmF0aW9uLiBBZnRlclxuICAgICAgICAvLyBoeWRyYXRpb24gaXMgY29tcGxldGUsIHdlIGRpc3BhdGNoIGEgbWFudWFsIHNsb3RjaGFuZ2UgZXZlbnQsIGlmIHRoZXJlXG4gICAgICAgIC8vIGFyZSBlbGVtZW50cyBhc3NpZ25lZCB0byBhIHNsb3QuXG4gICAgICAgIGNvbnN0IHN1cHByZXNzU2xvdGNoYW5nZUV2ZW50ID0gKGV2ZW50OiBFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9oeWRyYXRpb25SZXF1aXJlZCkge1xuICAgICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBldmVudE9wdGlvbnM6IEV2ZW50TGlzdGVuZXJPcHRpb25zID0geyBjYXB0dXJlOiB0cnVlIH07XG4gICAgICAgIGNvbnN0IHNsb3RzID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yQWxsKCdzbG90Jyk7XG4gICAgICAgIGlmIChzbG90cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgc2xvdHMuZm9yRWFjaCgoc2xvdCkgPT5cbiAgICAgICAgICAgIHNsb3QuYWRkRXZlbnRMaXN0ZW5lcignc2xvdGNoYW5nZScsIHN1cHByZXNzU2xvdGNoYW5nZUV2ZW50LCBldmVudE9wdGlvbnMpLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5oeWRyYXRpb25Db21wbGV0ZS50aGVuKCgpID0+XG4gICAgICAgICAgICBzbG90cy5mb3JFYWNoKChzbG90KSA9PiB7XG4gICAgICAgICAgICAgIHNsb3QucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2xvdGNoYW5nZScsIHN1cHByZXNzU2xvdGNoYW5nZUV2ZW50LCBldmVudE9wdGlvbnMpO1xuICAgICAgICAgICAgICBpZiAoc2xvdC5hc3NpZ25lZE5vZGVzKCkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgc2xvdC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnc2xvdGNoYW5nZScsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgICAgLy8gV2hlbiBoeWRyYXRpb24gaXMgbmVlZGVkLCB3ZSB3YWl0IHRoZSBoeWRyYXRpb24gcHJvY2VzcyB0byBmaW5pc2gsIHdoaWNoIGlzIHBhdGNoZWRcbiAgICAgIC8vIGludG8gdGhlIHVwZGF0ZSBtZXRob2Qgb2YgdGhlIExpdEVsZW1lbnQgYmFzZSBjbGFzcy5cbiAgICAgIHN1cGVyLnVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICAgIGlmICh0aGlzLl9oeWRyYXRpb25SZXF1aXJlZCkge1xuICAgICAgICB0aGlzLl9oeWRyYXRpb25SZXF1aXJlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9yZXNvbHZlSHlkcmF0aW9uKHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gU2JiSHlkcmF0aW9uTWl4aW5DbGFzcyBhcyB1bmtub3duIGFzIEFic3RyYWN0Q29uc3RydWN0b3I8U2JiSHlkcmF0aW9uTWl4aW5UeXBlPiAmIFQ7XG59O1xuIiwiaW1wb3J0IHsgaHRtbCwgdHlwZSBMaXRFbGVtZW50LCBub3RoaW5nLCB0eXBlIFRlbXBsYXRlUmVzdWx0IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuL2NvbnN0cnVjdG9yLmpzJztcbmltcG9ydCB7IFNiYkh5ZHJhdGlvbk1peGluLCB0eXBlIFNiYkh5ZHJhdGlvbk1peGluVHlwZSB9IGZyb20gJy4vaHlkcmF0aW9uLW1peGluLmpzJztcblxuaW1wb3J0ICcuLi8uLi9zY3JlZW4tcmVhZGVyLW9ubHkuanMnO1xuXG5jb25zdCBTU1JfQ0hJTERfQ09VTlRfQVRUUklCVVRFID0gJ2RhdGEtc3NyLWNoaWxkLWNvdW50JztcbmNvbnN0IFNMT1ROQU1FX1BSRUZJWCA9ICdsaSc7XG5cbmV4cG9ydCB0eXBlIFNiYk5hbWVkU2xvdFByb3BlcnRpZXMgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgYXJpYUhpZGRlbjogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogSGVscGVyIHR5cGUgZm9yIHdpbGxVcGRhdGUgb3Igc2ltaWxhciBjaGVja3MuXG4gKiBBbGxvd3MgdGhlIHVzYWdlIG9mIHRoZSBzdHJpbmcgbGl0ZXJhbCAnbGlzdENoaWxkcmVuJy5cbiAqXG4gKiBAZXhhbXBsZVxuICogcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPFdpdGhMaXN0Q2hpbGRyZW48dGhpcz4+KTogdm9pZCB7XG4gKiAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2xpc3RDaGlsZHJlbicpKSB7XG4gKiAgICAgLi4uXG4gKiAgIH1cbiAqIH1cbiAqL1xuZXhwb3J0IHR5cGUgV2l0aExpc3RDaGlsZHJlbjxcbiAgVCBleHRlbmRzIFNiYk5hbWVkU2xvdExpc3RNaXhpblR5cGU8Qz4sXG4gIEMgZXh0ZW5kcyBIVE1MRWxlbWVudCA9IEhUTUxFbGVtZW50LFxuPiA9IFQgJiB7IGxpc3RDaGlsZHJlbjogQ1tdIH07XG5cbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIFNiYk5hbWVkU2xvdExpc3RNaXhpblR5cGU8XG4gIEMgZXh0ZW5kcyBIVE1MRWxlbWVudCxcbj4gZXh0ZW5kcyBTYmJIeWRyYXRpb25NaXhpblR5cGUge1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVhZG9ubHkgbGlzdENoaWxkTG9jYWxOYW1lczogc3RyaW5nW107XG4gIHByb3RlY3RlZCBhY2Nlc3NvciBsaXN0Q2hpbGRyZW46IENbXTtcbiAgcHJvdGVjdGVkIHJlbmRlckxpc3QoXG4gICAgYXR0cmlidXRlcz86IHtcbiAgICAgIGNsYXNzPzogc3RyaW5nO1xuICAgICAgYXJpYUxhYmVsPzogc3RyaW5nO1xuICAgICAgYXJpYUxhYmVsbGVkYnk/OiBzdHJpbmc7XG4gICAgfSxcbiAgICBsaXN0SXRlbUF0dHJpYnV0ZXM/OiB7XG4gICAgICBsb2NhbE5hbWVWaXN1YWxPbmx5Pzogc3RyaW5nW107XG4gICAgfSxcbiAgKTogVGVtcGxhdGVSZXN1bHQ7XG4gIHByb3RlY3RlZCBsaXN0U2xvdEVudHJpZXMoKTogU2JiTmFtZWRTbG90UHJvcGVydGllc1tdO1xuICBwcm90ZWN0ZWQgcmVuZGVySGlkZGVuU2xvdCgpOiBUZW1wbGF0ZVJlc3VsdDtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGNvbnN0IFNiYk5hbWVkU2xvdExpc3RNaXhpbiA9IDxcbiAgQyBleHRlbmRzIEhUTUxFbGVtZW50LFxuICBUIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxMaXRFbGVtZW50Pixcbj4oXG4gIHN1cGVyQ2xhc3M6IFQsXG4pOiBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYk5hbWVkU2xvdExpc3RNaXhpblR5cGU8Qz4+ICYgVCA9PiB7XG4gIC8qKlxuICAgKiBUaGlzIGJhc2UgY2xhc3MgcHJvdmlkZXMgbmFtZWQgc2xvdCBsaXN0IG9ic2VydmVyIGZ1bmN0aW9uYWxpdHkuXG4gICAqIFRoaXMgYWxsb3dzIHVzaW5nIHRoZSBwYXR0ZXJuIG9mIHJlbmRlcmluZyBhIG5hbWVkIHNsb3QgZm9yIGVhY2ggY2hpbGQsIHdoaWNoIGFsbG93c1xuICAgKiB3cmFwcGluZyBjaGlsZHJlbiBpbiBhbiB1bC9saSBsaXN0LlxuICAgKi9cbiAgYWJzdHJhY3QgY2xhc3MgTmFtZWRTbG90TGlzdEVsZW1lbnQ8QyBleHRlbmRzIEhUTUxFbGVtZW50ID0gSFRNTEVsZW1lbnQ+XG4gICAgZXh0ZW5kcyBTYmJIeWRyYXRpb25NaXhpbihzdXBlckNsYXNzKVxuICAgIGltcGxlbWVudHMgUGFydGlhbDxTYmJOYW1lZFNsb3RMaXN0TWl4aW5UeXBlPEM+PlxuICB7XG4gICAgLyoqIEEgbGlzdCBvZiBsb3dlci1jYXNlZCB0YWcgbmFtZXMgdG8gbWF0Y2ggYWdhaW5zdC4gKGUuZy4gYHNiYi1saW5rYCkgKi9cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVhZG9ubHkgbGlzdENoaWxkTG9jYWxOYW1lczogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgY2hpbGRyZW4gd2l0aCB0aGUgZGVmaW5lZCB0YWcgbmFtZXMuXG4gICAgICogVGhpcyBhcnJheSBpcyBvbmx5IHVwZGF0ZWQgaWYgdGhlcmUgaXMgYW4gYWN0dWFsIGNoYW5nZVxuICAgICAqIHRvIHRoZSBjaGlsZCBlbGVtZW50cy5cbiAgICAgKi9cbiAgICBAc3RhdGUoKSBwcm90ZWN0ZWQgYWNjZXNzb3IgbGlzdENoaWxkcmVuOiBDW10gPSBbXTtcblxuICAgIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgICB0aGlzLnNoYWRvd1Jvb3Q/LmFkZEV2ZW50TGlzdGVuZXIoJ3Nsb3RjaGFuZ2UnLCB0aGlzLl9oYW5kbGVTbG90Y2hhbmdlLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICAgIHRoaXMuc2hhZG93Um9vdD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2xvdGNoYW5nZScsIHRoaXMuX2hhbmRsZVNsb3RjaGFuZ2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2hhbmRsZVNsb3RjaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBsaXN0Q2hpbGRyZW4gPSBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4gPz8gW10pLmZpbHRlcigoZSk6IGUgaXMgQyA9PlxuICAgICAgICB0aGlzLmxpc3RDaGlsZExvY2FsTmFtZXMuaW5jbHVkZXMoZS5sb2NhbE5hbWUpLFxuICAgICAgKTtcbiAgICAgIC8vIElmIHRoZSBzbG90dGVkIGNoaWxkIGluc3RhbmNlcyBoYXZlIG5vdCBjaGFuZ2VkLCB3ZSBjYW4gc2tpcCBzeW5jaW5nIGFuZCB1cGRhdGluZ1xuICAgICAgLy8gdGhlIGxpbmsgcmVmZXJlbmNlIGxpc3QuXG4gICAgICBpZiAoXG4gICAgICAgIGxpc3RDaGlsZHJlbi5sZW5ndGggPT09IHRoaXMubGlzdENoaWxkcmVuLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmxpc3RDaGlsZHJlbi5ldmVyeSgoZSwgaSkgPT4gbGlzdENoaWxkcmVuW2ldID09PSBlKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5saXN0Q2hpbGRyZW5cbiAgICAgICAgLmZpbHRlcigoYykgPT4gIWxpc3RDaGlsZHJlbi5pbmNsdWRlcyhjKSlcbiAgICAgICAgLmZvckVhY2goKGMpID0+IGMucmVtb3ZlQXR0cmlidXRlKCdzbG90JykpO1xuICAgICAgdGhpcy5saXN0Q2hpbGRyZW4gPSBsaXN0Q2hpbGRyZW47XG4gICAgICB0aGlzLmxpc3RDaGlsZHJlbi5mb3JFYWNoKChjLCBpbmRleCkgPT5cbiAgICAgICAgYy5zZXRBdHRyaWJ1dGUoJ3Nsb3QnLCBgJHtTTE9UTkFNRV9QUkVGSVh9LSR7aW5kZXh9YCksXG4gICAgICApO1xuXG4gICAgICAvLyBSZW1vdmUgdGhlIHNzciBhdHRyaWJ1dGUsIG9uY2Ugd2UgaGF2ZSBhY3R1YWxseSBpbml0aWFsaXplZCB0aGUgY2hpbGRyZW4gZWxlbWVudHMuXG4gICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShTU1JfQ0hJTERfQ09VTlRfQVRUUklCVVRFKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmVuZGVycyBsaXN0IGFuZCBsaXN0IHNsb3RzIGZvciBzbG90dGVkIGNoaWxkcmVuIG9yIGEgbnVtYmVyIG9mIGxpc3Qgc2xvdHNcbiAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBgZGF0YS1zc3ItY2hpbGQtY291bnRgIGF0dHJpYnV0ZSB2YWx1ZS5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgYSBwb3NzaWJsZSBvcHRpbWl6YXRpb24gZm9yIFNTUiwgYXMgaW4gYW4gU1NSIExpdCBlbnZpcm9ubWVudFxuICAgICAqIG90aGVyIGVsZW1lbnRzIGFyZSBub3QgYXZhaWxhYmxlLCBidXQgbWlnaHQgYmUgYXZhaWxhYmxlIGluIHRoZSBtZXRhXG4gICAgICogZnJhbWV3b3JrIHdyYXBwZXIgKGxpa2UgZS5nLiBSZWFjdCkuIFRoaXMgYWxsb3dzIHRvIHByb3ZpZGUgdGhlIG51bWJlciBvZlxuICAgICAqIGNoaWxkcmVuIHRvIGJlIHBhc3NlZCB2aWEgdGhlIGBkYXRhLXNzci1jaGlsZC1jb3VudGAgYXR0cmlidXRlIHZhbHVlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZW5kZXJMaXN0KFxuICAgICAgYXR0cmlidXRlczogeyBjbGFzcz86IHN0cmluZzsgYXJpYUxhYmVsPzogc3RyaW5nOyBhcmlhTGFiZWxsZWRieT86IHN0cmluZyB9ID0ge30sXG4gICAgICBsaXN0SXRlbUF0dHJpYnV0ZXM6IHsgbG9jYWxOYW1lVmlzdWFsT25seT86IHN0cmluZ1tdIH0gPSB7fSxcbiAgICApOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgICBjb25zdCBsaXN0U2xvdE5hbWVzOiBTYmJOYW1lZFNsb3RQcm9wZXJ0aWVzW10gPSB0aGlzLmxpc3RTbG90RW50cmllcyhsaXN0SXRlbUF0dHJpYnV0ZXMpO1xuXG4gICAgICBpZiAobGlzdFNsb3ROYW1lcy5sZW5ndGggPj0gMikge1xuICAgICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgICA8dWxcbiAgICAgICAgICAgIGNsYXNzPSR7YXR0cmlidXRlcy5jbGFzcyB8fCB0aGlzLmxvY2FsTmFtZX1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9JHthdHRyaWJ1dGVzLmFyaWFMYWJlbCB8fCBub3RoaW5nfVxuICAgICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PSR7YXR0cmlidXRlcy5hcmlhTGFiZWxsZWRieSB8fCBub3RoaW5nfVxuICAgICAgICAgID5cbiAgICAgICAgICAgICR7bGlzdFNsb3ROYW1lcy5tYXAoXG4gICAgICAgICAgICAgIChzbG90KSA9PiBodG1sYFxuICAgICAgICAgICAgICAgIDxsaSBhcmlhLWhpZGRlbj0ke3Nsb3QuYXJpYUhpZGRlbiB8fCBub3RoaW5nfT5cbiAgICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9JHtzbG90Lm5hbWV9Pjwvc2xvdD5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICBgLFxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L3VsPlxuICAgICAgICAgICR7dGhpcy5yZW5kZXJIaWRkZW5TbG90KCl9XG4gICAgICAgIGA7XG4gICAgICB9IGVsc2UgaWYgKGxpc3RTbG90TmFtZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBodG1sYDxzYmItc2NyZWVuLXJlYWRlci1vbmx5PiR7YXR0cmlidXRlcy5hcmlhTGFiZWx9PC9zYmItc2NyZWVuLXJlYWRlci1vbmx5PlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSR7YXR0cmlidXRlcy5jbGFzcyB8fCB0aGlzLmxvY2FsTmFtZX0+XG4gICAgICAgICAgICA8c3Bhbj48c2xvdCBuYW1lPSR7bGlzdFNsb3ROYW1lc1swXS5uYW1lfT48L3Nsb3Q+PC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAke3RoaXMucmVuZGVySGlkZGVuU2xvdCgpfSBgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVySGlkZGVuU2xvdCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgU2JiTmFtZWRTbG90UHJvcGVydGllcywgd2hpY2ggaG9sZHMgdGhlIGxpc3Qgc2xvdCBuYW1lcyBhbmQgdGhlIGhpZGRlbiBwcm9wZXJ0eTtcbiAgICAgKiBpdHMgbGVuZ3RoIGNvcnJlc3BvbmRzIHRvIHRoZSBudW1iZXIgb2YgbWF0Y2hlZCBjaGlsZHJlbiBvciB0aGUgYGRhdGEtc3NyLWNoaWxkLWNvdW50YCBhdHRyaWJ1dGUgdmFsdWUuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIGEgcG9zc2libGUgb3B0aW1pemF0aW9uIGZvciBTU1IsIGFzIGluIGFuIFNTUiBMaXQgZW52aXJvbm1lbnRcbiAgICAgKiBvdGhlciBlbGVtZW50cyBhcmUgbm90IGF2YWlsYWJsZSwgYnV0IG1pZ2h0IGJlIGF2YWlsYWJsZSBpbiB0aGUgbWV0YVxuICAgICAqIGZyYW1ld29yayB3cmFwcGVyIChsaWtlIGUuZy4gUmVhY3QpLiBUaGlzIGFsbG93cyB0byBwcm92aWRlIHRoZSBudW1iZXIgb2ZcbiAgICAgKiBjaGlsZHJlbiB0byBiZSBwYXNzZWQgdmlhIHRoZSBgZGF0YS1zc3ItY2hpbGQtY291bnRgIGF0dHJpYnV0ZSB2YWx1ZS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgbGlzdFNsb3RFbnRyaWVzKGxpc3RJdGVtQXR0cmlidXRlczoge1xuICAgICAgbG9jYWxOYW1lVmlzdWFsT25seT86IHN0cmluZ1tdO1xuICAgIH0pOiBTYmJOYW1lZFNsb3RQcm9wZXJ0aWVzW10ge1xuICAgICAgY29uc3QgbGlzdENoaWxkcmVuID0gdGhpcy5saXN0Q2hpbGRyZW4ubGVuZ3RoXG4gICAgICAgID8gdGhpcy5saXN0Q2hpbGRyZW5cbiAgICAgICAgOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiArKHRoaXMuZ2V0QXR0cmlidXRlKFNTUl9DSElMRF9DT1VOVF9BVFRSSUJVVEUpID8/IDApIH0pO1xuICAgICAgcmV0dXJuIGxpc3RDaGlsZHJlbi5tYXAoKGUsIGkpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBgJHtTTE9UTkFNRV9QUkVGSVh9LSR7aX1gLFxuICAgICAgICAgIGFyaWFIaWRkZW46XG4gICAgICAgICAgICBsaXN0SXRlbUF0dHJpYnV0ZXM/LmxvY2FsTmFtZVZpc3VhbE9ubHk/LmluY2x1ZGVzKChlIGFzIEhUTUxFbGVtZW50KS5sb2NhbE5hbWUpID8/XG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBoaWRkZW4gc2xvdCwgd2hpY2ggaXMgaW50ZW5kZWQgYXMgdGhlIGNoaWxkcmVuIGNoYW5nZSBkZXRlY3Rpb24uXG4gICAgICogV2hlbiBhbiBlbGVtZW50IHdpdGhvdXQgYSBzbG90IGF0dHJpYnV0ZSBpcyBzbG90dGVkIHRvIHRoZSBlbGVtZW50LCBpdCB0cmlnZ2Vyc1xuICAgICAqIHRoZSBzbG90Y2hhbmdlIGV2ZW50LCB3aGljaCBjYW4gYmUgdXNlZCB0byBhc3NpZ24gaXQgdG8gdGhlIGFwcHJvcHJpYXRlIG5hbWVkIHNsb3QuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlbmRlckhpZGRlblNsb3QoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgICAgcmV0dXJuIGh0bWxgPHNwYW4gaGlkZGVuPjxzbG90Pjwvc2xvdD48L3NwYW4+YDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gTmFtZWRTbG90TGlzdEVsZW1lbnQgYXMgdW5rbm93biBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYk5hbWVkU2xvdExpc3RNaXhpblR5cGU8Qz4+ICYgVDtcbn07XG4iLCJpbXBvcnQgdHlwZSB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IGZvcmNlVHlwZSB9IGZyb20gJy4uL2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuL2NvbnN0cnVjdG9yLmpzJztcblxuZXhwb3J0IGRlY2xhcmUgY2xhc3MgU2JiTmVnYXRpdmVNaXhpblR5cGUge1xuICBwdWJsaWMgYWNjZXNzb3IgbmVnYXRpdmU6IGJvb2xlYW47XG59XG5cbi8qKlxuICogRW5oYW5jZSB5b3VyIGNvbXBvbmVudCB3aXRoIGEgbmVnYXRpdmUgcHJvcGVydHkuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJOZWdhdGl2ZU1peGluID0gPFQgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiTmVnYXRpdmVNaXhpblR5cGU+ICYgVCA9PiB7XG4gIGFic3RyYWN0IGNsYXNzIFNiYk5lZ2F0aXZlRWxlbWVudCBleHRlbmRzIHN1cGVyQ2xhc3MgaW1wbGVtZW50cyBTYmJOZWdhdGl2ZU1peGluVHlwZSB7XG4gICAgLyoqIE5lZ2F0aXZlIGNvbG9yaW5nIHZhcmlhbnQgZmxhZy4gKi9cbiAgICBAZm9yY2VUeXBlKClcbiAgICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pXG4gICAgcHVibGljIGFjY2Vzc29yIG5lZ2F0aXZlOiBib29sZWFuID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gU2JiTmVnYXRpdmVFbGVtZW50IGFzIEFic3RyYWN0Q29uc3RydWN0b3I8U2JiTmVnYXRpdmVNaXhpblR5cGU+ICYgVDtcbn07XG4iLCJpbXBvcnQgdHlwZSB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IGZvcmNlVHlwZSB9IGZyb20gJy4uL2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnLi4vZXZlbnRpbmcuanMnO1xuXG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuL2NvbnN0cnVjdG9yLmpzJztcblxuZXhwb3J0IGRlY2xhcmUgY2xhc3MgU2JiUGFuZWxNaXhpblR5cGUge1xuICBwdWJsaWMgYWNjZXNzb3IgY29sb3I6ICd3aGl0ZScgfCAnbWlsayc7XG4gIHB1YmxpYyBhY2Nlc3NvciBib3JkZXJsZXNzOiBib29sZWFuO1xuICBwdWJsaWMgYWNjZXNzb3IgZXhwYW5zaW9uU3RhdGU6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgU2JiUGFuZWxTaXplID0gJ3MnIHwgJ20nO1xuXG4vKipcbiAqIE1peGluIGZvciBjb21tb24gcGFuZWwgYmVoYXZpb3JzXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJQYW5lbE1peGluID0gPFQgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiUGFuZWxNaXhpblR5cGU+ICYgVCA9PiB7XG4gIGFic3RyYWN0IGNsYXNzIFNiYlBhbmVsRWxlbWVudCBleHRlbmRzIHN1cGVyQ2xhc3MgaW1wbGVtZW50cyBTYmJQYW5lbE1peGluVHlwZSB7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBldmVudHMgPSB7XG4gICAgICBwYW5lbENvbm5lY3RlZDogJ3BhbmVsQ29ubmVjdGVkJyxcbiAgICB9IGFzIGNvbnN0O1xuXG4gICAgLyoqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBwYW5lbC4gKi9cbiAgICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlIH0pIHB1YmxpYyBhY2Nlc3NvciBjb2xvcjogJ3doaXRlJyB8ICdtaWxrJyA9ICd3aGl0ZSc7XG5cbiAgICAvKiogV2hldGhlciB0aGUgdW5zZWxlY3RlZCBwYW5lbCBoYXMgYSBib3JkZXIuICovXG4gICAgQGZvcmNlVHlwZSgpXG4gICAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSwgdHlwZTogQm9vbGVhbiB9KVxuICAgIHB1YmxpYyBhY2Nlc3NvciBib3JkZXJsZXNzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogQGludGVybmFsIHVzZWQgZm9yIGFjY2Vzc2liaWxpdHkgbGFiZWwgd2hlbiBpbiBleHBhbnNpb24gcGFuZWwgKi9cbiAgICBAZm9yY2VUeXBlKClcbiAgICBAcHJvcGVydHkoKVxuICAgIHB1YmxpYyBhY2Nlc3NvciBleHBhbnNpb25TdGF0ZTogc3RyaW5nID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKiBJbnRlcm5hbCBldmVudCB0aGF0IGVtaXRzIHdoZW4gdGhlIGNoZWNrYm94IGlzIGxvYWRlZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9wYW5lbENvbm5lY3RlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcihcbiAgICAgIHRoaXMsXG4gICAgICBTYmJQYW5lbEVsZW1lbnQuZXZlbnRzLnBhbmVsQ29ubmVjdGVkLFxuICAgICAgeyBidWJibGVzOiB0cnVlIH0sXG4gICAgKTtcblxuICAgIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICAgIHRoaXMuX3BhbmVsQ29ubmVjdGVkLmVtaXQoKTtcblxuICAgICAgdGhpcy5jbG9zZXN0Py4oJ3NiYi1yYWRpby1idXR0b24tZ3JvdXAsIHNiYi1jaGVja2JveC1ncm91cCcpPy50b2dnbGVBdHRyaWJ1dGUoXG4gICAgICAgICdkYXRhLWhhcy1wYW5lbCcsXG4gICAgICAgIHRydWUsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBTYmJQYW5lbEVsZW1lbnQgYXMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJQYW5lbE1peGluVHlwZT4gJiBUO1xufTtcbiIsImltcG9ydCB0eXBlIHsgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5cbmltcG9ydCB0eXBlIHsgQWJzdHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4vY29uc3RydWN0b3IuanMnO1xuXG4vLyBEZWZpbmUgdGhlIGludGVyZmFjZSBmb3IgdGhlIG1peGluXG5leHBvcnQgZGVjbGFyZSBjbGFzcyBTYmJVcGRhdGVTY2hlZHVsZXJNaXhpblR5cGUge1xuICBwcm90ZWN0ZWQgc3RhcnRVcGRhdGUoKTogdm9pZDtcbiAgcHJvdGVjdGVkIGNvbXBsZXRlVXBkYXRlKCk6IHZvaWQ7XG59XG5cbi8qKlxuICogVGhpcyBtaXhpbiBhbGxvd3Mgc2NoZWR1bGluZyBtYW51YWwgdXBkYXRlcywgd2hpY2ggYWZmZWN0IHVwZGF0ZUNvbXBsZXRlLlxuICogQHBhcmFtIGJhc2UgVGhlIGNsYXNzIHRvIGV4dGVuZC5cbiAqIEByZXR1cm5zIEEgY2xhc3MgZXh0ZW5kZWQgd2l0aCB0aGUgc2xvdCBjaGlsZCBvYnNlcnZlciBmdW5jdGlvbmFsaXR5LlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgU2JiVXBkYXRlU2NoZWR1bGVyTWl4aW4gPSA8VCBleHRlbmRzIEFic3RyYWN0Q29uc3RydWN0b3I8TGl0RWxlbWVudD4+KFxuICBiYXNlOiBULFxuKTogQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJVcGRhdGVTY2hlZHVsZXJNaXhpblR5cGU+ICYgVCA9PiB7XG4gIGFic3RyYWN0IGNsYXNzIFNiYlVwZGF0ZVNjaGVkdWxlckVsZW1lbnRcbiAgICBleHRlbmRzIGJhc2VcbiAgICBpbXBsZW1lbnRzIFBhcnRpYWw8U2JiVXBkYXRlU2NoZWR1bGVyTWl4aW5UeXBlPlxuICB7XG4gICAgcHJpdmF0ZSBfdXBkYXRlUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIHByaXZhdGUgX3VwZGF0ZVJlc29sdmUgPSAoKTogdm9pZCA9PiB7fTtcblxuICAgIHByb3RlY3RlZCBzdGFydFVwZGF0ZSgpOiB2b2lkIHtcbiAgICAgIHRoaXMuX3VwZGF0ZVByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4gKHRoaXMuX3VwZGF0ZVJlc29sdmUgPSByKSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvbXBsZXRlVXBkYXRlKCk6IHZvaWQge1xuICAgICAgdGhpcy5fdXBkYXRlUmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBnZXRVcGRhdGVDb21wbGV0ZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN1cGVyLmdldFVwZGF0ZUNvbXBsZXRlKCk7XG4gICAgICBhd2FpdCB0aGlzLl91cGRhdGVQcm9taXNlO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFNiYlVwZGF0ZVNjaGVkdWxlckVsZW1lbnQgYXMgdW5rbm93biBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYlVwZGF0ZVNjaGVkdWxlck1peGluVHlwZT4gJlxuICAgIFQ7XG59O1xuIl0sIm5hbWVzIjpbIl9hIiwic3RhdGUiLCJfYiIsImV2ZW50T3B0aW9ucyIsIlNiYlBhbmVsRWxlbWVudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFlYSxNQUFBLDRCQUE0QixDQUN2QyxlQUMwRDtBQUFBLEVBQzFELE1BQWUsb0NBQ0wsV0FBVTtBQUFBLElBRHBCLGNBQUE7O0FBT1MsV0FBVyxjQUFHO0FBU2IsV0FBQSxvQkFBbUMsUUFBUTs7Ozs7O0lBSG5ELElBQVcsb0JBQWlCO0FBQzFCLGFBQU8sS0FBSztBQUFBLElBQUE7QUFBQSxJQUlFLHVCQUFvQjtBQUNsQyxZQUFNLHFCQUFvQjtBQUMxQixXQUFLLGNBQWE7QUFBQSxJQUFBO0FBQUEsSUFHVixpQkFBYztBQUNsQixVQUFBLENBQUMsS0FBSyxhQUFhO0FBQ2hCLGFBQUEsb0JBQW9CLEtBQUs7O0lBQ2hDO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFNUTs7SUFFRixNQUFNLG9CQUFpQjtBQUM3QixXQUFLLGNBQWM7QUFDbkIsWUFBTSxnQkFBZ0IsS0FBSztBQUUzQixZQUFNLFNBQVMsSUFBSSxRQUFjLENBQUMsTUFBSztBQUNyQyxhQUFLLGdCQUFnQixNQUFLOztBQUV4QixlQUFLLGNBQWM7O1FBRXJCO0FBQUEsTUFBQSxDQUNEO0FBQ0csVUFBQTtBQUVGLGNBQU0sS0FBSztBQUFBLGVBQ0osR0FBRztBQUtWLGdCQUFRLE9BQU8sQ0FBQztBQUFBLE1BQUE7QUFFWCxhQUFBO0FBQUEsSUFBQTtBQUFBLEVBQ1Q7QUFHSyxTQUFBO0FBRVQ7QUMxRGEsTUFBQSxtQkFBbUIsQ0FDOUIsZUFDaUQ7TUFDbEMsc0JBQWtCLE1BQUE7O3NCQUFTOzs7O0FBQTNCLFdBQUEsbUJBQTJCLFlBQVU7QUFBQTs7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
|
|
136
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWl4aW5zLmpzIiwic291cmNlcyI6W10sInNvdXJjZXNDb250ZW50IjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyJ9
|