@sbb-esta/lyne-elements 4.10.0 → 4.12.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/autocomplete/autocomplete-base-element.js +1 -1
- package/autocomplete/autocomplete.component.js +3 -2
- package/{autocomplete-base-element-DarHnnYC.js → autocomplete-base-element-De2O5Wx-.js} +14 -9
- package/autocomplete.js +1 -1
- package/autocomplete.pure.js +1 -1
- package/{block-link-common-DzGY49Xc.js → block-link-common-1kRa_czx.js} +1 -1
- package/breadcrumb/breadcrumb-group/breadcrumb-group.component.js +1 -1
- package/breadcrumb/breadcrumb-group.js +1 -1
- package/{breadcrumb-group.component-Cc6CHbVy.js → breadcrumb-group.component-CKNsaUqs.js} +1 -1
- package/breadcrumb.js +1 -1
- package/breadcrumb.pure.js +1 -1
- package/button/common/button-common.js +1 -1
- package/button/common.js +1 -1
- package/button-common-BMEhm-dn.js +87 -0
- package/button.js +1 -1
- package/button.pure.js +1 -1
- package/calendar/calendar/calendar.component.js +1 -1
- package/calendar/calendar.js +1 -1
- package/{calendar.component-DhmaJt2k.js → calendar.component-C1jk_uE0.js} +5 -5
- package/calendar.js +1 -1
- package/calendar.pure.js +1 -1
- package/card/card-badge/card-badge.component.js +1 -1
- package/card/card-badge.js +1 -1
- package/{card-badge.component-BSOEYrN4.js → card-badge.component-D0r2iixU.js} +1 -1
- package/card.js +1 -1
- package/card.pure.js +1 -1
- package/checkbox/checkbox.component.js +1 -1
- package/checkbox/checkbox.js +1 -1
- package/checkbox/common/checkbox-common.js +1 -1
- package/checkbox/common.js +1 -1
- package/{checkbox-common-DdieysTG.js → checkbox-common-BpW4_bbi.js} +1 -1
- package/{checkbox.component-ROzxEnPh.js → checkbox.component-DS48CA_v.js} +1 -1
- package/checkbox.js +2 -2
- package/checkbox.pure.js +2 -2
- package/chip/chip-group/chip-group.component.js +1 -1
- package/chip/chip-group.js +1 -1
- package/{chip-group.component-DJzUToem.js → chip-group.component-BqBYzfXA.js} +1 -1
- package/chip.js +1 -1
- package/chip.pure.js +1 -1
- package/{compact-paginator.component-Cyi-t_YD.js → compact-paginator.component-BIAPutro.js} +1 -1
- package/core/base-elements/element.js +1 -1
- package/core/controllers/overlay-position-controller.js +4 -1
- package/core/mixins/named-slot-list-mixin.js +4 -1
- package/core/styles/core.scss +62 -77
- package/core/styles/mixins/helpers.scss +3 -3
- package/core/styles/mixins/overlay.scss +2 -2
- package/core/styles/mixins/table.scss +18 -19
- package/core/styles/mixins/typo.scss +2 -2
- package/core/styles/node_modules_@sbb-esta_lyne-design-tokens_dist_scss_sbb-variables-as-css.scss +8 -0
- package/core/styles/theme.scss +3 -1
- package/core.css +177 -73
- package/custom-elements.json +1387 -1092
- package/development/autocomplete/autocomplete-base-element.d.ts +8 -1
- package/development/autocomplete/autocomplete-base-element.d.ts.map +1 -1
- package/development/autocomplete/autocomplete-base-element.js +1 -1
- package/development/autocomplete/autocomplete.component.js +4 -3
- package/development/autocomplete-base-element-BpCpYcX9.js +692 -0
- package/development/autocomplete.js +1 -1
- package/development/autocomplete.pure.js +1 -1
- package/development/{block-link-common-GckvjULA.js → block-link-common-COY1RI1I.js} +2 -2
- package/development/breadcrumb/breadcrumb-group/breadcrumb-group.component.js +1 -1
- package/development/breadcrumb/breadcrumb-group.js +1 -1
- package/development/breadcrumb-group.component-DZslNBlB.js +195 -0
- package/development/breadcrumb.js +1 -1
- package/development/breadcrumb.pure.js +1 -1
- package/development/button/common/button-common.js +1 -1
- package/development/button/common.js +1 -1
- package/development/{button-common-CAu09Yim.js → button-common-7dmrUx4A.js} +3 -3
- package/development/button.js +1 -1
- package/development/button.pure.js +1 -1
- package/development/calendar/calendar/calendar.component.js +1 -1
- package/development/calendar/calendar.js +1 -1
- package/development/calendar-cell-base-element-BXohfDSl.js +1 -1
- package/development/calendar.component-Dg3D2A7k.js +1453 -0
- package/development/calendar.js +1 -1
- package/development/calendar.pure.js +1 -1
- package/development/card/card-badge/card-badge.component.js +1 -1
- package/development/card/card-badge.js +1 -1
- package/development/card-action-common-1FDHbfeR.js +1 -1
- package/development/card-badge.component-CUZIoVbL.js +84 -0
- package/development/card.js +1 -1
- package/development/card.pure.js +1 -1
- package/development/carousel-list.component-L-nYpHcN.js +1 -1
- package/development/carousel.component-Dl48ROSf.js +1 -1
- package/development/checkbox/checkbox.component.js +1 -1
- package/development/checkbox/checkbox.js +1 -1
- package/development/checkbox/common/checkbox-common.js +1 -1
- package/development/checkbox/common.js +1 -1
- package/development/checkbox-common-Dd5uup8K.js +86 -0
- package/development/checkbox-group/checkbox-group.component.js +1 -1
- package/development/{checkbox.component-D3_FFSys.js → checkbox.component-CFZrwUTA.js} +2 -2
- package/development/checkbox.js +2 -2
- package/development/checkbox.pure.js +2 -2
- package/development/chip/chip-group/chip-group.component.js +1 -1
- package/development/chip/chip-group.js +1 -1
- package/development/chip-group.component-BVfHWX2-.js +409 -0
- package/development/chip.js +1 -1
- package/development/chip.pure.js +1 -1
- package/development/clock.component-CVPv4mCp.js +1 -1
- package/development/compact-paginator.component-5_Q2Reul.js +51 -0
- package/development/core/a11y/input-modality-detector.js +1 -1
- package/development/core/base-elements/element.d.ts.map +1 -1
- package/development/core/base-elements/element.js +2 -5
- package/development/core/controllers/media-matchers-controller.js +1 -1
- package/development/core/controllers/overlay-position-controller.js +3 -2
- package/development/core/datetime/date-adapter.js +1 -1
- package/development/core/datetime/native-date-adapter.js +1 -1
- package/development/core/datetime/temporal-date-adapter.js +1 -1
- package/development/core/eventing/throttle.d.ts +1 -0
- package/development/core/eventing/throttle.d.ts.map +1 -1
- package/development/core/eventing/throttle.js +2 -1
- package/development/core/mixins/disabled-mixin.js +1 -1
- package/development/core/mixins/form-associated-checkbox-mixin.js +1 -1
- package/development/core/mixins/form-associated-input-mixin.js +1 -1
- package/development/core/mixins/form-associated-mixin.js +1 -1
- package/development/core/mixins/form-associated-radio-button-mixin.js +1 -1
- package/development/core/mixins/named-slot-list-mixin.d.ts.map +1 -1
- package/development/core/mixins/named-slot-list-mixin.js +5 -2
- package/development/core/mixins/negative-mixin.js +1 -1
- package/development/core/mixins/readonly-mixin.js +1 -1
- package/development/core/mixins/required-mixin.js +1 -1
- package/development/core/testing/event-spy.js +1 -1
- package/development/datepicker/common/datepicker-button.d.ts +6 -0
- package/development/datepicker/common/datepicker-button.d.ts.map +1 -1
- package/development/datepicker/common/datepicker-button.js +1 -1
- package/development/datepicker/common.js +1 -1
- package/development/datepicker/datepicker/datepicker.component.d.ts +3 -0
- package/development/datepicker/datepicker/datepicker.component.d.ts.map +1 -1
- package/development/datepicker/datepicker/datepicker.component.js +1 -1
- package/development/datepicker/datepicker.js +1 -1
- package/development/datepicker-button-CUPeoQgH.js +169 -0
- package/development/datepicker.component-D2DxFng_.js +216 -0
- package/development/datepicker.js +2 -2
- package/development/datepicker.pure.js +2 -2
- package/development/dialog/dialog/dialog.component.js +1 -1
- package/development/dialog/dialog.js +1 -1
- package/development/{dialog.component-TBiL0Sdq.js → dialog.component-DKuR4u-y.js} +2 -2
- package/development/dialog.js +1 -1
- package/development/dialog.pure.js +1 -1
- package/development/error.component-OBpWoVRL.js +55 -0
- package/development/expansion-panel/expansion-panel/expansion-panel.component.js +1 -1
- package/development/expansion-panel/expansion-panel-header/expansion-panel-header.component.js +1 -1
- package/development/expansion-panel/expansion-panel-header.js +1 -1
- package/development/expansion-panel/expansion-panel.js +1 -1
- package/development/expansion-panel-header.component-BEAabEE0.js +85 -0
- package/development/{expansion-panel.component-PDUmZe7w.js → expansion-panel.component-CV_IuWZA.js} +2 -2
- package/development/expansion-panel.js +2 -2
- package/development/expansion-panel.pure.js +2 -2
- package/development/file-selector/common/file-selector-common.d.ts.map +1 -1
- package/development/file-selector/common/file-selector-common.js +1 -1
- package/development/file-selector/common.js +1 -1
- package/development/file-selector/file-selector-dropzone/file-selector-dropzone.component.d.ts.map +1 -1
- package/development/file-selector/file-selector-dropzone/file-selector-dropzone.component.js +1 -1
- package/development/file-selector/file-selector-dropzone.js +1 -1
- package/development/file-selector-common-C7xIEiV4.js +416 -0
- package/development/file-selector-dropzone.component-BAWMZW4F.js +111 -0
- package/development/file-selector.js +2 -2
- package/development/file-selector.pure.js +2 -2
- package/development/footer/footer.component.js +1 -1
- package/development/footer.component-BmDkxYW9.js +172 -0
- package/development/footer.js +1 -1
- package/development/footer.pure.js +1 -1
- package/development/form-field/error/error.component.js +1 -1
- package/development/form-field/error.js +1 -1
- package/development/form-field/form-field/form-field.component.d.ts +6 -0
- package/development/form-field/form-field/form-field.component.d.ts.map +1 -1
- package/development/form-field/form-field/form-field.component.js +1 -1
- package/development/form-field/form-field-clear/form-field-clear.component.d.ts +3 -0
- package/development/form-field/form-field-clear/form-field-clear.component.d.ts.map +1 -1
- package/development/form-field/form-field-clear/form-field-clear.component.js +4 -1
- package/development/form-field/form-field.js +1 -1
- package/development/form-field/hint/hint.component.js +1 -1
- package/development/form-field.component-BU3Sv2mD.js +707 -0
- package/development/form-field.js +3 -3
- package/development/form-field.pure.js +3 -3
- package/development/header/header/header.component.js +1 -1
- package/development/header/header.js +1 -1
- package/development/header-action-common-MTYV0dqA.js +1 -1
- package/development/header.component-CWJ36jF0.js +340 -0
- package/development/header.js +1 -1
- package/development/header.pure.js +1 -1
- package/development/hint.component-DUtL0RS3.js +38 -0
- package/development/icon/icon-name-mixin.js +1 -1
- package/development/image.component-BD0jc-u-.js +1 -1
- package/development/link/common/block-link-common.js +1 -1
- package/development/link/common.js +1 -1
- package/development/link-common-DJ2FfG_Q.js +1 -1
- package/development/link-list-base-CKMNz30d.js +1 -1
- package/development/link.js +1 -1
- package/development/link.pure.js +1 -1
- package/development/message/message.component.js +1 -1
- package/development/message.component-Dlf5V5ba.js +44 -0
- package/development/message.js +1 -1
- package/development/message.pure.js +1 -1
- package/development/mini-calendar.component-BufzKw74.js +1 -1
- package/development/navigation/common/navigation-action-common.js +1 -1
- package/development/navigation/common.js +1 -1
- package/development/navigation/navigation-marker/navigation-marker.component.js +1 -1
- package/development/navigation/navigation-marker.js +1 -1
- package/development/navigation/navigation-section/navigation-section.component.js +1 -1
- package/development/navigation/navigation-section.js +1 -1
- package/development/{navigation-action-common-DpBp7-eZ.js → navigation-action-common-Hjr4dI9J.js} +2 -2
- package/development/{navigation-marker.component-BpZdT4xz.js → navigation-marker.component-GOv42emC.js} +2 -2
- package/development/{navigation-section.component-CtZtuacK.js → navigation-section.component-CnVrRETN.js} +2 -2
- package/development/navigation.component-CTNQ1dix.js +1 -1
- package/development/navigation.js +3 -3
- package/development/navigation.pure.js +3 -3
- package/development/notification/notification.component.js +1 -1
- package/development/notification.component-Cvq_uViC.js +274 -0
- package/development/notification.js +1 -1
- package/development/notification.pure.js +1 -1
- package/development/option/option/option-base-element.d.ts.map +1 -1
- package/development/option/option/option-base-element.js +3 -1
- package/development/option/option/option.component.js +1 -1
- package/development/option/option.js +1 -1
- package/development/option.component-CRVr0PfV.js +130 -0
- package/development/option.js +1 -1
- package/development/option.pure.js +1 -1
- package/development/paginator/common/paginator-common.js +1 -1
- package/development/paginator/compact-paginator/compact-paginator.component.js +1 -1
- package/development/paginator/compact-paginator.js +1 -1
- package/development/paginator/paginator/paginator.component.js +1 -1
- package/development/paginator/paginator.js +1 -1
- package/development/paginator.component-Bn5tK0FK.js +259 -0
- package/development/paginator.js +2 -2
- package/development/paginator.pure.js +2 -2
- package/development/panel-mixin-Dj_rsgL9.js +1 -1
- package/development/popover/popover.component.d.ts +1 -0
- package/development/popover/popover.component.d.ts.map +1 -1
- package/development/popover/popover.component.js +1 -1
- package/development/popover.component-rZb6B9uW.js +546 -0
- package/development/popover.js +1 -1
- package/development/popover.pure.js +1 -1
- package/development/radio-button/common/radio-button-common.js +1 -1
- package/development/radio-button/common.js +1 -1
- package/development/radio-button/radio-button.component.js +1 -1
- package/development/radio-button/radio-button.js +1 -1
- package/development/radio-button-common--d3WX-ZM.js +126 -0
- package/development/radio-button-panel/radio-button-panel.component.js +1 -1
- package/development/{radio-button.component-BrQF2FfA.js → radio-button.component-BauLEeCV.js} +2 -2
- package/development/radio-button.js +2 -2
- package/development/radio-button.pure.js +2 -2
- package/development/select/select.component.d.ts.map +1 -1
- package/development/select/select.component.js +1 -1
- package/development/select.component-D9SFG7Lk.js +814 -0
- package/development/select.js +1 -1
- package/development/select.pure.js +1 -1
- package/development/sidebar/sidebar/sidebar.component.d.ts +1 -0
- package/development/sidebar/sidebar/sidebar.component.d.ts.map +1 -1
- package/development/sidebar/sidebar/sidebar.component.js +1 -1
- package/development/sidebar/sidebar.js +1 -1
- package/development/sidebar-container.component-BDSoDAym.js +1 -1
- package/development/{sidebar.component-DvRTyNry.js → sidebar.component-BLqO52nH.js} +8 -1
- package/development/sidebar.js +1 -1
- package/development/sidebar.pure.js +1 -1
- package/development/slider/slider.component.js +1 -1
- package/development/{slider.component-BjfLnUvP.js → slider.component-C3qZB6ar.js} +2 -2
- package/development/slider.js +1 -1
- package/development/slider.pure.js +1 -1
- package/development/status/status.component.js +1 -1
- package/development/status.component-CPi1cPN0.js +111 -0
- package/development/status.js +1 -1
- package/development/status.pure.js +1 -1
- package/development/step-label.component-BJ9eainz.js +131 -0
- package/development/stepper/step-label/step-label.component.js +1 -1
- package/development/stepper/step-label.js +1 -1
- package/development/stepper.component-CxOBayI1.js +1 -1
- package/development/stepper.js +1 -1
- package/development/stepper.pure.js +1 -1
- package/development/sticky-bar.component-Dzrdsnxu.js +1 -1
- package/development/styles-D8-q-irv.js +1 -1
- package/development/styles-Jlhoev1S.js +14 -0
- package/development/tab-group.component-DldBA45K.js +275 -0
- package/development/{tab-label.component-14j2eh4Z.js → tab-label.component-B9e9kgVf.js} +2 -2
- package/development/tabs/common/styles.js +1 -1
- package/development/tabs/common.js +1 -1
- package/development/tabs/tab-group/tab-group.component.d.ts +1 -0
- package/development/tabs/tab-group/tab-group.component.d.ts.map +1 -1
- package/development/tabs/tab-group/tab-group.component.js +1 -1
- package/development/tabs/tab-group.js +1 -1
- package/development/tabs/tab-label/tab-label.component.js +1 -1
- package/development/tabs/tab-label.js +1 -1
- package/development/tabs.js +3 -3
- package/development/tabs.pure.js +3 -3
- package/development/tag/tag/tag.component.js +1 -1
- package/development/tag/tag.js +1 -1
- package/development/tag.component-Bl1nlIXQ.js +245 -0
- package/development/tag.js +1 -1
- package/development/tag.pure.js +1 -1
- package/development/teaser-hero/teaser-hero.component.js +1 -1
- package/development/{teaser-hero.component-DNlc8Tbl.js → teaser-hero.component-BIOpoGME.js} +2 -2
- package/development/teaser-hero.js +1 -1
- package/development/teaser-hero.pure.js +1 -1
- package/development/teaser-product-common-DYX370pm.js +1 -1
- package/development/time-input.component-BtdSR8kB.js +1 -1
- package/development/timetable-form/timetable-form/timetable-form.component.js +1 -1
- package/development/timetable-form/timetable-form-details/timetable-form-details.component.js +1 -1
- package/development/timetable-form/timetable-form-details.js +1 -1
- package/development/timetable-form/timetable-form-field/timetable-form-field.component.js +1 -1
- package/development/timetable-form/timetable-form-field.js +1 -1
- package/development/timetable-form/timetable-form-swap-button/timetable-form-swap-button.component.d.ts +3 -0
- package/development/timetable-form/timetable-form-swap-button/timetable-form-swap-button.component.d.ts.map +1 -1
- package/development/timetable-form/timetable-form-swap-button/timetable-form-swap-button.component.js +1 -1
- package/development/timetable-form/timetable-form-swap-button.js +1 -1
- package/development/timetable-form/timetable-form.js +1 -1
- package/development/timetable-form-details.component-DJl5Qt9y.js +26 -0
- package/development/timetable-form-field.component-DQ_TzcF4.js +44 -0
- package/development/{timetable-form-swap-button.component-BUKUjrpl.js → timetable-form-swap-button.component-Bh9aPmdn.js} +4 -1
- package/development/timetable-form.component-N8h4JBlH.js +27 -0
- package/development/timetable-form.js +4 -4
- package/development/timetable-form.pure.js +4 -4
- package/development/timetable-occupancy/timetable-occupancy.component.js +1 -1
- package/development/timetable-occupancy.component-BBcznUh0.js +124 -0
- package/development/timetable-occupancy.js +1 -1
- package/development/timetable-occupancy.pure.js +1 -1
- package/development/title/title-base.js +1 -1
- package/development/title/title.component.js +1 -1
- package/development/{title-base-CBE_2Hkb.js → title-base-BdYKwj3-.js} +2 -2
- package/development/{title.component-Dk23JVct.js → title.component-DSXVkddh.js} +2 -2
- package/development/title.js +2 -2
- package/development/title.pure.js +2 -2
- package/development/toast/toast.component.js +1 -1
- package/development/toast.component-IhHx0Qt3.js +275 -0
- package/development/toast.js +1 -1
- package/development/toast.pure.js +1 -1
- package/development/toggle/toggle/toggle.component.d.ts.map +1 -1
- package/development/toggle/toggle/toggle.component.js +1 -1
- package/development/toggle/toggle-option/toggle-option.component.d.ts +1 -0
- package/development/toggle/toggle-option/toggle-option.component.d.ts.map +1 -1
- package/development/toggle/toggle-option/toggle-option.component.js +1 -1
- package/development/toggle/toggle-option.js +1 -1
- package/development/toggle/toggle.js +1 -1
- package/development/toggle-check/toggle-check.component.js +1 -1
- package/development/toggle-check.component-_fDAuLob.js +159 -0
- package/development/toggle-check.js +1 -1
- package/development/toggle-check.pure.js +1 -1
- package/development/toggle-option.component-DTS3a603.js +167 -0
- package/development/toggle.component-BJpD1b9H.js +249 -0
- package/development/toggle.js +2 -2
- package/development/toggle.pure.js +2 -2
- package/development/tooltip/tooltip.component.js +1 -1
- package/development/tooltip.component-YaUQA-Id.js +378 -0
- package/development/tooltip.js +1 -1
- package/development/tooltip.pure.js +1 -1
- package/development/train/train-wagon/train-wagon.component.js +1 -1
- package/development/train/train-wagon.js +1 -1
- package/development/{train-wagon.component-BzA8-S_6.js → train-wagon.component-CNxkffOO.js} +2 -2
- package/development/train.js +1 -1
- package/development/train.pure.js +1 -1
- package/dialog/dialog/dialog.component.js +1 -1
- package/dialog/dialog.js +1 -1
- package/{dialog.component-B3oQbMki.js → dialog.component-Dv5ch5mh.js} +1 -1
- package/dialog.js +1 -1
- package/dialog.pure.js +1 -1
- package/{error.component-B_D8WUP5.js → error.component-DH9Obd7a.js} +1 -1
- package/expansion-panel/expansion-panel/expansion-panel.component.js +1 -1
- package/expansion-panel/expansion-panel-header/expansion-panel-header.component.js +1 -1
- package/expansion-panel/expansion-panel-header.js +1 -1
- package/expansion-panel/expansion-panel.js +1 -1
- package/{expansion-panel-header.component-B_dQ3ZWT.js → expansion-panel-header.component-FPoEEoZR.js} +1 -1
- package/{expansion-panel.component-BJCjwcoj.js → expansion-panel.component-DBnZ6IgB.js} +1 -1
- package/expansion-panel.js +2 -2
- package/expansion-panel.pure.js +2 -2
- package/file-selector/common/file-selector-common.js +1 -1
- package/file-selector/common.js +1 -1
- package/file-selector/file-selector-dropzone/file-selector-dropzone.component.js +1 -1
- package/file-selector/file-selector-dropzone.js +1 -1
- package/{file-selector-common-DN4vHMpP.js → file-selector-common-BL9mM4SZ.js} +38 -40
- package/{file-selector-dropzone.component-CBKsZsC2.js → file-selector-dropzone.component-Ctar2kEw.js} +3 -4
- package/file-selector.js +2 -2
- package/file-selector.pure.js +2 -2
- package/footer/footer.component.js +1 -1
- package/{footer.component-BM91Utiz.js → footer.component-b2docCY_.js} +1 -1
- package/footer.js +1 -1
- package/footer.pure.js +1 -1
- package/form-field/error/error.component.js +1 -1
- package/form-field/error.js +1 -1
- package/form-field/form-field/form-field.component.js +1 -1
- package/form-field/form-field.js +1 -1
- package/form-field/hint/hint.component.js +1 -1
- package/{form-field.component-D50q1wC0.js → form-field.component-BwZDRKbQ.js} +17 -16
- package/form-field.js +3 -3
- package/form-field.pure.js +3 -3
- package/header/header/header.component.js +1 -1
- package/header/header.js +1 -1
- package/{header.component-hZqs06Yh.js → header.component-UQUFcMOD.js} +1 -1
- package/header.js +1 -1
- package/header.pure.js +1 -1
- package/{hint.component-BVUUrSSu.js → hint.component-CE2D2TLU.js} +1 -1
- package/link/common/block-link-common.js +1 -1
- package/link/common.js +1 -1
- package/link.js +1 -1
- package/link.pure.js +1 -1
- package/message/message.component.js +1 -1
- package/message.component-DhN-aFms.js +27 -0
- package/message.js +1 -1
- package/message.pure.js +1 -1
- package/navigation/common/navigation-action-common.js +1 -1
- package/navigation/common.js +1 -1
- package/navigation/navigation-marker/navigation-marker.component.js +1 -1
- package/navigation/navigation-marker.js +1 -1
- package/navigation/navigation-section/navigation-section.component.js +1 -1
- package/navigation/navigation-section.js +1 -1
- package/{navigation-action-common-2ix0xrBs.js → navigation-action-common-AzRltwrb.js} +1 -1
- package/{navigation-marker.component-DKxK16IU.js → navigation-marker.component-BzbbKlfT.js} +1 -1
- package/{navigation-section.component-CvjXVn5r.js → navigation-section.component-DQxCi3O_.js} +1 -1
- package/navigation.js +3 -3
- package/navigation.pure.js +3 -3
- package/notification/notification.component.js +1 -1
- package/{notification.component-DjXJFh1G.js → notification.component-D80Wl5xM.js} +1 -1
- package/notification.js +1 -1
- package/notification.pure.js +1 -1
- package/off-brand-theme.css +209 -110
- package/option/option/option-base-element.js +1 -1
- package/option/option/option.component.js +1 -1
- package/option/option.js +1 -1
- package/{option.component-M-V_tdSC.js → option.component-2Xf1hz7y.js} +1 -1
- package/option.js +1 -1
- package/option.pure.js +1 -1
- package/package.json +1 -1
- package/paginator/compact-paginator/compact-paginator.component.js +1 -1
- package/paginator/compact-paginator.js +1 -1
- package/paginator/paginator/paginator.component.js +1 -1
- package/paginator/paginator.js +1 -1
- package/{paginator.component-CZt7Epaf.js → paginator.component-BEr0qU0m.js} +1 -1
- package/paginator.js +2 -2
- package/paginator.pure.js +2 -2
- package/popover/popover.component.js +1 -1
- package/{popover.component-DWNuW4wM.js → popover.component-DAgwBcBW.js} +32 -28
- package/popover.js +1 -1
- package/popover.pure.js +1 -1
- package/radio-button/common/radio-button-common.js +1 -1
- package/radio-button/common.js +1 -1
- package/radio-button/radio-button.component.js +1 -1
- package/radio-button/radio-button.js +1 -1
- package/{radio-button-common-DP4Izwwf.js → radio-button-common-C1mIf9KY.js} +1 -1
- package/{radio-button.component-BiGeOI5L.js → radio-button.component-Bae-yK_U.js} +1 -1
- package/radio-button.js +2 -2
- package/radio-button.pure.js +2 -2
- package/safety-theme.css +209 -110
- package/select/select.component.js +1 -1
- package/{select.component-DWLdApt_.js → select.component-BT6RbERH.js} +3 -3
- package/select.js +1 -1
- package/select.pure.js +1 -1
- package/sidebar/sidebar/sidebar.component.js +1 -1
- package/sidebar/sidebar.js +1 -1
- package/{sidebar.component-DxOx02l6.js → sidebar.component-Dsx1FAg0.js} +5 -3
- package/sidebar.js +1 -1
- package/sidebar.pure.js +1 -1
- package/slider/slider.component.js +1 -1
- package/{slider.component-CoqCppCq.js → slider.component-BlRVR6iU.js} +1 -1
- package/slider.js +1 -1
- package/slider.pure.js +1 -1
- package/standard-theme.css +209 -110
- package/status/status.component.js +1 -1
- package/{status.component-BFyXTFXH.js → status.component-lw_WDs7W.js} +1 -1
- package/status.js +1 -1
- package/status.pure.js +1 -1
- package/step-label.component-Dqis4FAN.js +80 -0
- package/stepper/step-label/step-label.component.js +1 -1
- package/stepper/step-label.js +1 -1
- package/stepper.js +1 -1
- package/stepper.pure.js +1 -1
- package/styles-BNu0Fjw5.js +5 -0
- package/{tab-group.component-Doy39cEh.js → tab-group.component-CHQlrhUy.js} +36 -33
- package/{tab-label.component-CD56RH1Z.js → tab-label.component-CpdUyfiq.js} +1 -1
- package/table.css +32 -37
- package/tabs/common/styles.js +1 -1
- package/tabs/common.js +1 -1
- package/tabs/tab-group/tab-group.component.js +1 -1
- package/tabs/tab-group.js +1 -1
- package/tabs/tab-label/tab-label.component.js +1 -1
- package/tabs/tab-label.js +1 -1
- package/tabs.js +3 -3
- package/tabs.pure.js +3 -3
- package/tag/tag/tag.component.js +1 -1
- package/tag/tag.js +1 -1
- package/{tag.component-CzYJZuFT.js → tag.component-CsNszQvB.js} +1 -1
- package/tag.js +1 -1
- package/tag.pure.js +1 -1
- package/teaser-hero/teaser-hero.component.js +1 -1
- package/{teaser-hero.component-CHy82SKQ.js → teaser-hero.component-D8yj-N5n.js} +1 -1
- package/teaser-hero.js +1 -1
- package/teaser-hero.pure.js +1 -1
- package/timetable-form/timetable-form/timetable-form.component.js +1 -1
- package/timetable-form/timetable-form-details/timetable-form-details.component.js +1 -1
- package/timetable-form/timetable-form-details.js +1 -1
- package/timetable-form/timetable-form-field/timetable-form-field.component.js +1 -1
- package/timetable-form/timetable-form-field.js +1 -1
- package/timetable-form/timetable-form.js +1 -1
- package/timetable-form-details.component-mWKaBW_9.js +16 -0
- package/timetable-form-field.component-Cv_lv8vf.js +32 -0
- package/{timetable-form.component-CU1FXAZH.js → timetable-form.component-YcvKAlfz.js} +1 -1
- package/timetable-form.js +3 -3
- package/timetable-form.pure.js +3 -3
- package/timetable-occupancy/timetable-occupancy.component.js +1 -1
- package/{timetable-occupancy.component-Db9SfiyD.js → timetable-occupancy.component-BCXPxz68.js} +1 -1
- package/timetable-occupancy.js +1 -1
- package/timetable-occupancy.pure.js +1 -1
- package/title/title-base.js +1 -1
- package/title/title.component.js +1 -1
- package/{title-base-D72Xo2SW.js → title-base-DV0qhfG9.js} +1 -1
- package/{title.component-CoMa84Sz.js → title.component-DAGyXwDm.js} +1 -1
- package/title.js +2 -2
- package/title.pure.js +2 -2
- package/toast/toast.component.js +1 -1
- package/{toast.component-BDE1vYLS.js → toast.component-CORnf2Tl.js} +3 -3
- package/toast.js +1 -1
- package/toast.pure.js +1 -1
- package/toggle/toggle/toggle.component.js +1 -1
- package/toggle/toggle-option/toggle-option.component.js +1 -1
- package/toggle/toggle-option.js +1 -1
- package/toggle/toggle.js +1 -1
- package/toggle-check/toggle-check.component.js +1 -1
- package/toggle-check.component-DvoslSRr.js +119 -0
- package/toggle-check.js +1 -1
- package/toggle-check.pure.js +1 -1
- package/{toggle-option.component-Bw-GXUQK.js → toggle-option.component-pX3tNwjE.js} +5 -7
- package/{toggle.component-BPpsMMPG.js → toggle.component-B20xAw1V.js} +6 -10
- package/toggle.js +2 -2
- package/toggle.pure.js +2 -2
- package/tooltip/tooltip.component.js +1 -1
- package/{tooltip.component-BY9mV5Sw.js → tooltip.component-ocVpJogs.js} +1 -1
- package/tooltip.js +1 -1
- package/tooltip.pure.js +1 -1
- package/train/train-wagon/train-wagon.component.js +1 -1
- package/train/train-wagon.js +1 -1
- package/{train-wagon.component-BwCcF4GD.js → train-wagon.component-BT4Xnzxr.js} +1 -1
- package/train.js +1 -1
- package/train.pure.js +1 -1
- package/button-common-yFVzAoGy.js +0 -87
- package/core/styles/table.scss +0 -156
- package/development/autocomplete-base-element-YwfObJzm.js +0 -678
- package/development/breadcrumb-group.component-B3Shlng3.js +0 -195
- package/development/calendar.component-6p9vsp-V.js +0 -1452
- package/development/card-badge.component-D4Mes-Gw.js +0 -84
- package/development/checkbox-common-DiTlHvFJ.js +0 -86
- package/development/chip-group.component-CvpUdzu1.js +0 -409
- package/development/compact-paginator.component-TfDVt_ST.js +0 -51
- package/development/datepicker-button-CANzGO5m.js +0 -163
- package/development/datepicker.component-C8XQVo45.js +0 -213
- package/development/error.component-xD_c9IBA.js +0 -55
- package/development/expansion-panel-header.component-Bw4uROTe.js +0 -85
- package/development/file-selector-common-C82QR3zb.js +0 -418
- package/development/file-selector-dropzone.component-B-cBO4bf.js +0 -112
- package/development/footer.component-BblB5218.js +0 -172
- package/development/form-field.component-BEXX0OcL.js +0 -702
- package/development/header.component-Cg0ZcA1s.js +0 -340
- package/development/hint.component-BsIzdUOV.js +0 -38
- package/development/message.component-CeJhYXSC.js +0 -44
- package/development/notification.component-Co9QChXc.js +0 -274
- package/development/option.component-CdL7fdzZ.js +0 -130
- package/development/paginator.component-DAdS2mMm.js +0 -259
- package/development/popover.component-BCMdJBUR.js +0 -537
- package/development/radio-button-common-C3-xuY78.js +0 -126
- package/development/select.component-CGNEhqzl.js +0 -812
- package/development/status.component-CHC2pBa-.js +0 -111
- package/development/step-label.component-CJFPHIZa.js +0 -131
- package/development/styles-DCQBzC2C.js +0 -14
- package/development/tab-group.component-DRipdAyc.js +0 -272
- package/development/tag.component-CnNPL6aI.js +0 -245
- package/development/timetable-form-details.component-C8awcdP5.js +0 -26
- package/development/timetable-form-field.component-BI24VjkC.js +0 -44
- package/development/timetable-form.component-CUG86CSN.js +0 -27
- package/development/timetable-occupancy.component-D_PXXvI9.js +0 -124
- package/development/toast.component-BnbpuU9L.js +0 -274
- package/development/toggle-check.component-BG4w_sE8.js +0 -159
- package/development/toggle-option.component-D-F7Fh7i.js +0 -168
- package/development/toggle.component-BFYLRN8o.js +0 -254
- package/development/tooltip.component-DzSd9VjW.js +0 -378
- package/message.component-BQjnZ5Z3.js +0 -27
- package/step-label.component-DnQBwnL8.js +0 -80
- package/styles-BUpK1iP2.js +0 -5
- package/timetable-form-details.component-CBZ7QSAx.js +0 -16
- package/timetable-form-field.component-BKxQQqt7.js +0 -32
- package/toggle-check.component-B6Ww5pLD.js +0 -119
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
|
+
import { html, isServer, unsafeCSS } from "lit";
|
|
3
|
+
import { property } from "lit/decorators.js";
|
|
4
|
+
import { SbbElement } from "./core/base-elements.js";
|
|
5
|
+
import { forceType } from "./core/decorators.js";
|
|
6
|
+
import { SbbDisabledMixin, SbbFormAssociatedMixin, SbbNegativeMixin, SbbRequiredMixin } from "./core/mixins.js";
|
|
7
|
+
import { boxSizingStyles } from "./core/styles.js";
|
|
8
|
+
import { SbbLanguageController, SbbPropertyWatcherController } from "./core/controllers.js";
|
|
9
|
+
import { i18nChipGroupInputDescription, i18nSelectionRequired } from "./core/i18n.js";
|
|
10
|
+
import { getNextElementIndex, isArrowKeyPressed } from "./core/a11y.js";
|
|
11
|
+
import { isLean } from "./core/dom/lean-context.js";
|
|
12
|
+
import { SbbChipElement } from "./chip/chip/chip.component.js";
|
|
13
|
+
//#region src/elements/chip/chip-group/chip-group.scss?inline
|
|
14
|
+
var chip_group_default = ":host {\n width: 100%;\n display: flex;\n flex-wrap: wrap;\n gap: var(--sbb-chip-group-gap);\n align-items: center;\n margin-block: var(--sbb-chip-group-margin-block);\n line-height: var(--sbb-typo-line-height-text);\n}\n\n:host(:is(:is(:state(size-s),[state--size-s]), :is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: 0;\n}\n\n:host(:is(:state(size-s),[state--size-s]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: 0.375rem 0.3125rem;\n}\n@media (min-width: calc(64rem)) {\n :host(:is(:state(size-s),[state--size-s]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: 0.3125rem 0.1875rem;\n }\n}\n\n:host(:is(:state(without-label),[state--without-label]):is(:state(size-s),[state--size-s]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: 0 0.4375rem;\n}\n@media (min-width: calc(64rem)) {\n :host(:is(:state(without-label),[state--without-label]):is(:state(size-s),[state--size-s]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: 0 0.3125rem;\n }\n}\n\n:host(:is(:is(:state(size-l),[state--size-l]), :is(:state(size-m),[state--size-m]))) {\n --sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default) 0;\n}\n@media (min-width: calc(64rem)) {\n :host(:is(:is(:state(size-l),[state--size-l]), :is(:state(size-m),[state--size-m]))) {\n --sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default-large) 0;\n }\n}\n\n:host(:is(:state(without-label),[state--without-label]):is(:state(size-m),[state--size-m]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: 0.1875rem 0.6875rem;\n}\n@media (min-width: calc(64rem)) {\n :host(:is(:state(without-label),[state--without-label]):is(:state(size-m),[state--size-m]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: 0.1875rem 0.875rem;\n }\n}\n\n:host(:is(:state(without-label),[state--without-label]):not(:is(:state(empty),[state--empty]), :is(:state(size-s),[state--size-s]), :is(:state(size-m),[state--size-m]), :is(:state(size-l),[state--size-l]))) {\n --sbb-chip-group-margin-block: var(--sbb-chip-group-margin-block-no-label-not-empty);\n}\n\n:host(:not(:is(:state(without-label),[state--without-label])):is(:state(size-m),[state--size-m]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default)\n var(--_sbb-chip-group-margin-block-start-default-large);\n}\n@media (min-width: calc(64rem)) {\n :host(:not(:is(:state(without-label),[state--without-label])):is(:state(size-m),[state--size-m]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default-large)\n var(--_sbb-chip-group-margin-block-start-default-large);\n }\n}\n\n:host(:not(:is(:state(without-label),[state--without-label]), :is(:state(empty),[state--empty]), :is(:state(size-s),[state--size-s]), :is(:state(size-m),[state--size-m]), :is(:state(size-l),[state--size-l]))) {\n --sbb-chip-group-margin-block: var(--sbb-chip-group-margin-block-with-label-not-empty);\n}\n\n:host(:is(:state(without-label),[state--without-label]):is(:state(size-l),[state--size-l]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default)\n 1rem;\n}\n@media (min-width: calc(64rem)) {\n :host(:is(:state(without-label),[state--without-label]):is(:state(size-l),[state--size-l]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default-large)\n 1.25rem;\n }\n}\n\n:host(:not(:is(:state(without-label),[state--without-label])):is(:state(size-l),[state--size-l]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default)\n 0.46875rem;\n}\n@media (min-width: calc(64rem)) {\n :host(:not(:is(:state(without-label),[state--without-label])):is(:state(size-l),[state--size-l]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default-large)\n 0.46875rem;\n }\n}\n\n::slotted(input) {\n flex: 1 1 var(--sbb-chip-group-input-min-width);\n max-height: 1.5rem;\n}\n\n::slotted(sbb-chip) {\n max-width: 100%;\n}";
|
|
15
|
+
//#endregion
|
|
16
|
+
//#region src/elements/chip/chip-group/chip-group.component.ts
|
|
17
|
+
var SbbChipInputTokenEndEvent = class extends CustomEvent {
|
|
18
|
+
/**
|
|
19
|
+
* @deprecated Use event properties directly.
|
|
20
|
+
*/
|
|
21
|
+
get detail() {
|
|
22
|
+
return this;
|
|
23
|
+
}
|
|
24
|
+
constructor(options) {
|
|
25
|
+
super("chipinputtokenend", {
|
|
26
|
+
cancelable: true,
|
|
27
|
+
bubbles: true,
|
|
28
|
+
composed: true
|
|
29
|
+
});
|
|
30
|
+
this.origin = options.origin;
|
|
31
|
+
this.value = options.value;
|
|
32
|
+
this.label = options.label;
|
|
33
|
+
}
|
|
34
|
+
/** Set a new value for the chip that will be created */
|
|
35
|
+
setValue(value) {
|
|
36
|
+
this.value = value;
|
|
37
|
+
}
|
|
38
|
+
/** Set a label for the chip that will be created */
|
|
39
|
+
setLabel(label) {
|
|
40
|
+
this.label = label;
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* The `sbb-chip-group` component is used as a container for one or multiple `sbb-chip`.
|
|
45
|
+
*
|
|
46
|
+
* @slot - Use the unnamed slot to add `sbb-chip` elements.
|
|
47
|
+
* @event {SbbChipInputTokenEndEvent<T>} chipinputtokenend - Notifies that a chip is about to be created. Can be prevented.
|
|
48
|
+
* @overrideType value - (T = string[]) | null
|
|
49
|
+
*/
|
|
50
|
+
var SbbChipGroupElement = (() => {
|
|
51
|
+
let _classSuper = SbbRequiredMixin(SbbDisabledMixin(SbbNegativeMixin(SbbFormAssociatedMixin(SbbElement))));
|
|
52
|
+
let _instanceExtraInitializers = [];
|
|
53
|
+
let _set_value_decorators;
|
|
54
|
+
let _displayWith_decorators;
|
|
55
|
+
let _displayWith_initializers = [];
|
|
56
|
+
let _displayWith_extraInitializers = [];
|
|
57
|
+
let _separatorKeys_decorators;
|
|
58
|
+
let _separatorKeys_initializers = [];
|
|
59
|
+
let _separatorKeys_extraInitializers = [];
|
|
60
|
+
let _addOnBlur_decorators;
|
|
61
|
+
let _addOnBlur_initializers = [];
|
|
62
|
+
let _addOnBlur_extraInitializers = [];
|
|
63
|
+
return class SbbChipGroupElement extends _classSuper {
|
|
64
|
+
static {
|
|
65
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
66
|
+
_set_value_decorators = [property({ type: Array })];
|
|
67
|
+
_displayWith_decorators = [property({ attribute: false })];
|
|
68
|
+
_separatorKeys_decorators = [property({
|
|
69
|
+
attribute: "separator-keys",
|
|
70
|
+
type: Array
|
|
71
|
+
})];
|
|
72
|
+
_addOnBlur_decorators = [forceType(), property({
|
|
73
|
+
attribute: "add-on-blur",
|
|
74
|
+
type: Boolean
|
|
75
|
+
})];
|
|
76
|
+
__esDecorate(this, null, _set_value_decorators, {
|
|
77
|
+
kind: "setter",
|
|
78
|
+
name: "value",
|
|
79
|
+
static: false,
|
|
80
|
+
private: false,
|
|
81
|
+
access: {
|
|
82
|
+
has: (obj) => "value" in obj,
|
|
83
|
+
set: (obj, value) => {
|
|
84
|
+
obj.value = value;
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
metadata: _metadata
|
|
88
|
+
}, null, _instanceExtraInitializers);
|
|
89
|
+
__esDecorate(this, null, _displayWith_decorators, {
|
|
90
|
+
kind: "accessor",
|
|
91
|
+
name: "displayWith",
|
|
92
|
+
static: false,
|
|
93
|
+
private: false,
|
|
94
|
+
access: {
|
|
95
|
+
has: (obj) => "displayWith" in obj,
|
|
96
|
+
get: (obj) => obj.displayWith,
|
|
97
|
+
set: (obj, value) => {
|
|
98
|
+
obj.displayWith = value;
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
metadata: _metadata
|
|
102
|
+
}, _displayWith_initializers, _displayWith_extraInitializers);
|
|
103
|
+
__esDecorate(this, null, _separatorKeys_decorators, {
|
|
104
|
+
kind: "accessor",
|
|
105
|
+
name: "separatorKeys",
|
|
106
|
+
static: false,
|
|
107
|
+
private: false,
|
|
108
|
+
access: {
|
|
109
|
+
has: (obj) => "separatorKeys" in obj,
|
|
110
|
+
get: (obj) => obj.separatorKeys,
|
|
111
|
+
set: (obj, value) => {
|
|
112
|
+
obj.separatorKeys = value;
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
metadata: _metadata
|
|
116
|
+
}, _separatorKeys_initializers, _separatorKeys_extraInitializers);
|
|
117
|
+
__esDecorate(this, null, _addOnBlur_decorators, {
|
|
118
|
+
kind: "accessor",
|
|
119
|
+
name: "addOnBlur",
|
|
120
|
+
static: false,
|
|
121
|
+
private: false,
|
|
122
|
+
access: {
|
|
123
|
+
has: (obj) => "addOnBlur" in obj,
|
|
124
|
+
get: (obj) => obj.addOnBlur,
|
|
125
|
+
set: (obj, value) => {
|
|
126
|
+
obj.addOnBlur = value;
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
metadata: _metadata
|
|
130
|
+
}, _addOnBlur_initializers, _addOnBlur_extraInitializers);
|
|
131
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, {
|
|
132
|
+
enumerable: true,
|
|
133
|
+
configurable: true,
|
|
134
|
+
writable: true,
|
|
135
|
+
value: _metadata
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
static {
|
|
139
|
+
this.elementName = "sbb-chip-group";
|
|
140
|
+
}
|
|
141
|
+
static {
|
|
142
|
+
this.role = "listbox";
|
|
143
|
+
}
|
|
144
|
+
static {
|
|
145
|
+
this.styles = [boxSizingStyles, unsafeCSS(chip_group_default)];
|
|
146
|
+
}
|
|
147
|
+
static {
|
|
148
|
+
this.events = {
|
|
149
|
+
input: "input",
|
|
150
|
+
change: "change",
|
|
151
|
+
chipinputtokenend: "chipinputtokenend"
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
/** Value of the form element. */
|
|
155
|
+
set value(value) {
|
|
156
|
+
value = value ?? [];
|
|
157
|
+
const oldValue = this.value;
|
|
158
|
+
const toRemove = [...oldValue];
|
|
159
|
+
for (const c of value) if (toRemove.includes(c)) toRemove.splice(toRemove.indexOf(c), 1);
|
|
160
|
+
toRemove.forEach((value) => this._chipElements().find((c) => c.value === value)?.remove());
|
|
161
|
+
const toAdd = [...value];
|
|
162
|
+
for (const c of oldValue) if (toAdd.includes(c)) toAdd.splice(toAdd.indexOf(c), 1);
|
|
163
|
+
toAdd.forEach((c) => this._createChipElement(c));
|
|
164
|
+
}
|
|
165
|
+
get value() {
|
|
166
|
+
return this._chipElements().map((c) => c.value);
|
|
167
|
+
}
|
|
168
|
+
#displayWith_accessor_storage;
|
|
169
|
+
/** Function that maps a chip's value to its display value. */
|
|
170
|
+
get displayWith() {
|
|
171
|
+
return this.#displayWith_accessor_storage;
|
|
172
|
+
}
|
|
173
|
+
set displayWith(value) {
|
|
174
|
+
this.#displayWith_accessor_storage = value;
|
|
175
|
+
}
|
|
176
|
+
#separatorKeys_accessor_storage;
|
|
177
|
+
/** The array of keys that will trigger a `chipinputtokenend` event. Default `['Enter']` */
|
|
178
|
+
get separatorKeys() {
|
|
179
|
+
return this.#separatorKeys_accessor_storage;
|
|
180
|
+
}
|
|
181
|
+
set separatorKeys(value) {
|
|
182
|
+
this.#separatorKeys_accessor_storage = value;
|
|
183
|
+
}
|
|
184
|
+
#addOnBlur_accessor_storage;
|
|
185
|
+
/** Whether to automatically add a chip when the input loses focus if there's a value. */
|
|
186
|
+
get addOnBlur() {
|
|
187
|
+
return this.#addOnBlur_accessor_storage;
|
|
188
|
+
}
|
|
189
|
+
set addOnBlur(value) {
|
|
190
|
+
this.#addOnBlur_accessor_storage = value;
|
|
191
|
+
}
|
|
192
|
+
constructor() {
|
|
193
|
+
super();
|
|
194
|
+
this.#displayWith_accessor_storage = (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _displayWith_initializers, null));
|
|
195
|
+
this.#separatorKeys_accessor_storage = (__runInitializers(this, _displayWith_extraInitializers), __runInitializers(this, _separatorKeys_initializers, ["Enter"]));
|
|
196
|
+
this.#addOnBlur_accessor_storage = (__runInitializers(this, _separatorKeys_extraInitializers), __runInitializers(this, _addOnBlur_initializers, false));
|
|
197
|
+
/**
|
|
198
|
+
* Listens to the changes on `readonly` and `disabled` attributes of `<input>`.
|
|
199
|
+
*/
|
|
200
|
+
this._inputAttributeObserver = (__runInitializers(this, _addOnBlur_extraInitializers), !isServer ? new MutationObserver(() => this._reactToInputChanges()) : null);
|
|
201
|
+
this._language = new SbbLanguageController(this);
|
|
202
|
+
this.addEventListener?.(SbbChipElement.events.requestdelete, (ev) => this._deleteChip(ev.target));
|
|
203
|
+
this.addEventListener?.("keydown", (ev) => this._onChipKeyDown(ev));
|
|
204
|
+
this.addController(new SbbPropertyWatcherController(this, () => this.closest("sbb-form-field"), {
|
|
205
|
+
size: (formField) => this._updateSize(formField.size),
|
|
206
|
+
label: (formField) => this._updateLabelState(formField),
|
|
207
|
+
hiddenLabel: (formField) => this._updateLabelState(formField)
|
|
208
|
+
}));
|
|
209
|
+
}
|
|
210
|
+
_updateLabelState(formField) {
|
|
211
|
+
this.toggleState("without-label", !formField.label || formField.hiddenLabel);
|
|
212
|
+
}
|
|
213
|
+
connectedCallback() {
|
|
214
|
+
super.connectedCallback();
|
|
215
|
+
this._setupComponent();
|
|
216
|
+
}
|
|
217
|
+
willUpdate(changedProperties) {
|
|
218
|
+
super.willUpdate(changedProperties);
|
|
219
|
+
if (changedProperties.has("disabled") || changedProperties.has("formDisabled") || changedProperties.has("negative")) this._proxyStateToChips();
|
|
220
|
+
}
|
|
221
|
+
/** @internal */
|
|
222
|
+
formResetCallback() {
|
|
223
|
+
this.value = null;
|
|
224
|
+
}
|
|
225
|
+
/** @internal */
|
|
226
|
+
formStateRestoreCallback(state, _reason) {
|
|
227
|
+
if (!state) {
|
|
228
|
+
this.value = null;
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
this._readFormData(state).then((array) => this.value = array);
|
|
232
|
+
}
|
|
233
|
+
async _readFormData(formData) {
|
|
234
|
+
return Promise.all(formData.getAll(this.name).map(async (entry) => entry instanceof Blob ? JSON.parse(await entry.text()) : entry));
|
|
235
|
+
}
|
|
236
|
+
shouldValidate(name) {
|
|
237
|
+
return super.shouldValidate(name) || name === "required" || name === "value";
|
|
238
|
+
}
|
|
239
|
+
validate() {
|
|
240
|
+
super.validate();
|
|
241
|
+
if (this.required && this.value.length === 0) this.setValidityFlag("valueMissing", i18nSelectionRequired[this._language.current]);
|
|
242
|
+
else this.removeValidityFlag("valueMissing");
|
|
243
|
+
}
|
|
244
|
+
/** Return the list of chip elements **/
|
|
245
|
+
_chipElements() {
|
|
246
|
+
return Array.from(this.querySelectorAll?.("sbb-chip") ?? []);
|
|
247
|
+
}
|
|
248
|
+
/** Return the list of enabled chip elements **/
|
|
249
|
+
_enabledChipElements() {
|
|
250
|
+
return Array.from(this.querySelectorAll?.("sbb-chip:not([disabled])") ?? []);
|
|
251
|
+
}
|
|
252
|
+
_setupComponent() {
|
|
253
|
+
const input = this.querySelector("input");
|
|
254
|
+
if (input && input !== this._inputElement) {
|
|
255
|
+
this._inputAbortController?.abort();
|
|
256
|
+
this._inputAttributeObserver?.disconnect();
|
|
257
|
+
this._inputElement = input;
|
|
258
|
+
this._inputAbortController = new AbortController();
|
|
259
|
+
this._inputElement.addEventListener("keydown", (ev) => this._onInputKeyDown(ev), { signal: this._inputAbortController.signal });
|
|
260
|
+
this._inputElement.addEventListener("blur", () => this._onInputBlur(), {
|
|
261
|
+
signal: this._inputAbortController.signal,
|
|
262
|
+
capture: true
|
|
263
|
+
});
|
|
264
|
+
this._inputElement.addEventListener("inputAutocomplete", (event) => {
|
|
265
|
+
this._createChipFromInput("autocomplete", event.detail?.option.value);
|
|
266
|
+
}, { signal: this._inputAbortController.signal });
|
|
267
|
+
this._inputAttributeObserver?.observe(this._inputElement, {
|
|
268
|
+
attributes: true,
|
|
269
|
+
attributeFilter: ["readonly", "disabled"]
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
if (!this._previousSize || !this.closest("sbb-form-field")) this._updateSize(isLean() ? "s" : "m");
|
|
273
|
+
this.toggleState("empty", this.value.length === 0);
|
|
274
|
+
this._reactToInputChanges();
|
|
275
|
+
this._updateInputDescription();
|
|
276
|
+
this.updateFormValue();
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Listen for keyboard events on the chip elements
|
|
280
|
+
**/
|
|
281
|
+
_onChipKeyDown(event) {
|
|
282
|
+
const eventTarget = event.target;
|
|
283
|
+
if (eventTarget.localName !== "sbb-chip") return;
|
|
284
|
+
if (isArrowKeyPressed(event)) {
|
|
285
|
+
const focusSteps = this._enabledChipElements();
|
|
286
|
+
focusSteps[getNextElementIndex(event, focusSteps.indexOf(eventTarget), focusSteps.length)].focus();
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
switch (event.key) {
|
|
290
|
+
case "Backspace":
|
|
291
|
+
case "Delete":
|
|
292
|
+
if (!eventTarget.readOnly && !eventTarget.disabled) {
|
|
293
|
+
event.preventDefault();
|
|
294
|
+
this._deleteChip(eventTarget);
|
|
295
|
+
}
|
|
296
|
+
break;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Listen for keyboard events on the input
|
|
301
|
+
**/
|
|
302
|
+
_onInputKeyDown(event) {
|
|
303
|
+
switch (event.key) {
|
|
304
|
+
case "Backspace":
|
|
305
|
+
case "ArrowLeft":
|
|
306
|
+
if (!this._inputElement.value) this._focusChip();
|
|
307
|
+
break;
|
|
308
|
+
case "Enter":
|
|
309
|
+
event.preventDefault();
|
|
310
|
+
break;
|
|
311
|
+
}
|
|
312
|
+
if (this.separatorKeys.includes(event.key)) {
|
|
313
|
+
event.preventDefault();
|
|
314
|
+
this._createChipFromInput("input");
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Handle blur event on the input
|
|
319
|
+
**/
|
|
320
|
+
_onInputBlur() {
|
|
321
|
+
if (this.addOnBlur) this._createChipFromInput("input");
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* If the input is not empty, create a chip with its value
|
|
325
|
+
*/
|
|
326
|
+
_createChipFromInput(origin = "input", value) {
|
|
327
|
+
const inputValue = value ?? this._inputElement.value.trim();
|
|
328
|
+
if (!inputValue) return;
|
|
329
|
+
const event = new SbbChipInputTokenEndEvent({
|
|
330
|
+
origin,
|
|
331
|
+
value: inputValue,
|
|
332
|
+
label: (value ? this.displayWith?.(value) : null) ?? void 0
|
|
333
|
+
});
|
|
334
|
+
if (!this.dispatchEvent(event)) return;
|
|
335
|
+
this._createChipElement(event.value, event.label);
|
|
336
|
+
this._inputElement.value = "";
|
|
337
|
+
this._emitInputEvents();
|
|
338
|
+
}
|
|
339
|
+
_deleteChip(chip) {
|
|
340
|
+
const chips = this._enabledChipElements();
|
|
341
|
+
chip.remove();
|
|
342
|
+
this._emitInputEvents();
|
|
343
|
+
this._focusChip(chips.indexOf(chip));
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Focus an enabled chip. If none are present, focus the input
|
|
347
|
+
* @param index The index of the enabled chip. If null, focus the last one.
|
|
348
|
+
*/
|
|
349
|
+
_focusChip(index) {
|
|
350
|
+
const enabledChips = this._enabledChipElements();
|
|
351
|
+
if (index !== void 0 && enabledChips[index]) {
|
|
352
|
+
enabledChips[index].focus();
|
|
353
|
+
return;
|
|
354
|
+
}
|
|
355
|
+
if (enabledChips.length > 0) {
|
|
356
|
+
enabledChips[enabledChips.length - 1].focus();
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
this._inputElement?.focus();
|
|
360
|
+
}
|
|
361
|
+
_emitInputEvents() {
|
|
362
|
+
/** The input event fires when the value has been changed as a direct result of a user action. */
|
|
363
|
+
this.dispatchEvent(new InputEvent("input", {
|
|
364
|
+
bubbles: true,
|
|
365
|
+
composed: true
|
|
366
|
+
}));
|
|
367
|
+
/**
|
|
368
|
+
* The change event is fired when the user modifies the element's value.
|
|
369
|
+
* Unlike the input event, the change event is not necessarily fired
|
|
370
|
+
* for each alteration to an element's value.
|
|
371
|
+
*/
|
|
372
|
+
this.dispatchEvent(new Event("change", { bubbles: true }));
|
|
373
|
+
}
|
|
374
|
+
_createChipElement(value, label) {
|
|
375
|
+
if (isServer) return;
|
|
376
|
+
const newChip = document.createElement("sbb-chip");
|
|
377
|
+
newChip.value = value;
|
|
378
|
+
newChip.innerText = label ?? (value ? this.displayWith?.(value) : null) ?? "";
|
|
379
|
+
this.insertBefore(newChip, this._inputElement ?? this.querySelector("input"));
|
|
380
|
+
}
|
|
381
|
+
_reactToInputChanges() {
|
|
382
|
+
this.disabled = this._inputElement?.disabled ?? false;
|
|
383
|
+
this._proxyStateToChips();
|
|
384
|
+
}
|
|
385
|
+
_proxyStateToChips() {
|
|
386
|
+
this._chipElements().forEach((c) => {
|
|
387
|
+
c.disabled = this.disabled || this.formDisabled;
|
|
388
|
+
c.readOnly = this._inputElement?.hasAttribute("readonly") ?? false;
|
|
389
|
+
c.negative = this.negative;
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
_updateSize(size) {
|
|
393
|
+
if (this._previousSize) this.internals.states.delete(`size-${this._previousSize}`);
|
|
394
|
+
this._previousSize = size;
|
|
395
|
+
if (this._previousSize) this.internals.states.add(`size-${this._previousSize}`);
|
|
396
|
+
}
|
|
397
|
+
_updateInputDescription() {
|
|
398
|
+
if (!this._inputElement) return;
|
|
399
|
+
this._inputElement.setAttribute("aria-description", `${i18nChipGroupInputDescription[this._language.current]} ${this.value.length}`);
|
|
400
|
+
}
|
|
401
|
+
render() {
|
|
402
|
+
return html`<slot @slotchange=${this._setupComponent}></slot>`;
|
|
403
|
+
}
|
|
404
|
+
};
|
|
405
|
+
})();
|
|
406
|
+
//#endregion
|
|
407
|
+
export { SbbChipInputTokenEndEvent as n, SbbChipGroupElement as t };
|
|
408
|
+
|
|
409
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcC1ncm91cC5jb21wb25lbnQtQlZmSFdYMi0uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NoaXAvY2hpcC1ncm91cC9jaGlwLWdyb3VwLnNjc3M/aW5saW5lIiwiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NoaXAvY2hpcC1ncm91cC9jaGlwLWdyb3VwLmNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJAdXNlICcuLi8uLi9jb3JlL3N0eWxlcycgYXMgc2JiO1xuXG46aG9zdCB7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGdhcDogdmFyKC0tc2JiLWNoaXAtZ3JvdXAtZ2FwKTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbWFyZ2luLWJsb2NrOiB2YXIoLS1zYmItY2hpcC1ncm91cC1tYXJnaW4tYmxvY2spO1xuXG4gIC8vIFNldCB0aGUgbGluZS1oZWlnaHQgZm9yIGFkamFjZW50IGVsZW1lbnRzIGluIG9yZGVyIHRvIHByZXZlbnQgZnJvbSBpbmZsdWVuY2Ugb2YgYSBjb25zdW1lci1zZXQgbGluZS1oZWlnaHQuXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1zYmItdHlwby1saW5lLWhlaWdodC10ZXh0KTtcbn1cblxuOmhvc3QoOmlzKDpzdGF0ZShzaXplLXMpLCA6c3RhdGUoZW1wdHkpKSkge1xuICAtLXNiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jazogMDtcbn1cblxuOmhvc3QoOnN0YXRlKHNpemUtcyk6bm90KDpzdGF0ZShlbXB0eSkpKSB7XG4gIC0tc2JiLWNoaXAtZ3JvdXAtbWFyZ2luLWJsb2NrOiAje3NiYi5weC10by1yZW0tYnVpbGQoNil9ICN7c2JiLnB4LXRvLXJlbS1idWlsZCg1KX07XG5cbiAgQGluY2x1ZGUgc2JiLm1xKCRmcm9tOiBsYXJnZSkge1xuICAgIC0tc2JiLWNoaXAtZ3JvdXAtbWFyZ2luLWJsb2NrOiAje3NiYi5weC10by1yZW0tYnVpbGQoNSl9ICN7c2JiLnB4LXRvLXJlbS1idWlsZCgzKX07XG4gIH1cbn1cblxuOmhvc3QoOnN0YXRlKHdpdGhvdXQtbGFiZWwpOnN0YXRlKHNpemUtcyk6bm90KDpzdGF0ZShlbXB0eSkpKSB7XG4gIC0tc2JiLWNoaXAtZ3JvdXAtbWFyZ2luLWJsb2NrOiAwICN7c2JiLnB4LXRvLXJlbS1idWlsZCg3KX07XG5cbiAgQGluY2x1ZGUgc2JiLm1xKCRmcm9tOiBsYXJnZSkge1xuICAgIC0tc2JiLWNoaXAtZ3JvdXAtbWFyZ2luLWJsb2NrOiAwICN7c2JiLnB4LXRvLXJlbS1idWlsZCg1KX07XG4gIH1cbn1cblxuOmhvc3QoOmlzKDpzdGF0ZShzaXplLWwpLCA6c3RhdGUoc2l6ZS1tKSkpIHtcbiAgLS1zYmItY2hpcC1ncm91cC1tYXJnaW4tYmxvY2s6IHZhcigtLV9zYmItY2hpcC1ncm91cC1tYXJnaW4tYmxvY2stc3RhcnQtZGVmYXVsdCkgMDtcblxuICBAaW5jbHVkZSBzYmIubXEoJGZyb206IGxhcmdlKSB7XG4gICAgLS1zYmItY2hpcC1ncm91cC1tYXJnaW4tYmxvY2s6IHZhcigtLV9zYmItY2hpcC1ncm91cC1tYXJnaW4tYmxvY2stc3RhcnQtZGVmYXVsdC1sYXJnZSkgMDtcbiAgfVxufVxuXG46aG9zdCg6c3RhdGUod2l0aG91dC1sYWJlbCk6c3RhdGUoc2l6ZS1tKTpub3QoOnN0YXRlKGVtcHR5KSkpIHtcbiAgLS1zYmItY2hpcC1ncm91cC1tYXJnaW4tYmxvY2s6ICN7c2JiLnB4LXRvLXJlbS1idWlsZCgzKX0gI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDExKX07XG5cbiAgQGluY2x1ZGUgc2JiLm1xKCRmcm9tOiBsYXJnZSkge1xuICAgIC0tc2JiLWNoaXAtZ3JvdXAtbWFyZ2luLWJsb2NrOiAje3NiYi5weC10by1yZW0tYnVpbGQoMyl9ICN7c2JiLnB4LXRvLXJlbS1idWlsZCgxNCl9O1xuICB9XG59XG5cbjpob3N0KDpzdGF0ZSh3aXRob3V0LWxhYmVsKTpub3QoOnN0YXRlKGVtcHR5KSwgOnN0YXRlKHNpemUtcyksIDpzdGF0ZShzaXplLW0pLCA6c3RhdGUoc2l6ZS1sKSkpIHtcbiAgLS1zYmItY2hpcC1ncm91cC1tYXJnaW4tYmxvY2s6IHZhcigtLXNiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jay1uby1sYWJlbC1ub3QtZW1wdHkpO1xufVxuXG46aG9zdCg6bm90KDpzdGF0ZSh3aXRob3V0LWxhYmVsKSk6c3RhdGUoc2l6ZS1tKTpub3QoOnN0YXRlKGVtcHR5KSkpIHtcbiAgLS1zYmItY2hpcC1ncm91cC1tYXJnaW4tYmxvY2s6IHZhcigtLV9zYmItY2hpcC1ncm91cC1tYXJnaW4tYmxvY2stc3RhcnQtZGVmYXVsdClcbiAgICB2YXIoLS1fc2JiLWNoaXAtZ3JvdXAtbWFyZ2luLWJsb2NrLXN0YXJ0LWRlZmF1bHQtbGFyZ2UpO1xuXG4gIEBpbmNsdWRlIHNiYi5tcSgkZnJvbTogbGFyZ2UpIHtcbiAgICAtLXNiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jazogdmFyKC0tX3NiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jay1zdGFydC1kZWZhdWx0LWxhcmdlKVxuICAgICAgdmFyKC0tX3NiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jay1zdGFydC1kZWZhdWx0LWxhcmdlKTtcbiAgfVxufVxuXG46aG9zdCg6bm90KDpzdGF0ZSh3aXRob3V0LWxhYmVsKSwgOnN0YXRlKGVtcHR5KSwgOnN0YXRlKHNpemUtcyksIDpzdGF0ZShzaXplLW0pLCA6c3RhdGUoc2l6ZS1sKSkpIHtcbiAgLS1zYmItY2hpcC1ncm91cC1tYXJnaW4tYmxvY2s6IHZhcigtLXNiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jay13aXRoLWxhYmVsLW5vdC1lbXB0eSk7XG59XG5cbjpob3N0KDpzdGF0ZSh3aXRob3V0LWxhYmVsKTpzdGF0ZShzaXplLWwpOm5vdCg6c3RhdGUoZW1wdHkpKSkge1xuICAtLXNiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jazogdmFyKC0tX3NiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jay1zdGFydC1kZWZhdWx0KVxuICAgICN7c2JiLnB4LXRvLXJlbS1idWlsZCgxNil9O1xuXG4gIEBpbmNsdWRlIHNiYi5tcSgkZnJvbTogbGFyZ2UpIHtcbiAgICAtLXNiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jazogdmFyKC0tX3NiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jay1zdGFydC1kZWZhdWx0LWxhcmdlKVxuICAgICAgI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDIwKX07XG4gIH1cbn1cblxuOmhvc3QoOm5vdCg6c3RhdGUod2l0aG91dC1sYWJlbCkpOnN0YXRlKHNpemUtbCk6bm90KDpzdGF0ZShlbXB0eSkpKSB7XG4gIC0tc2JiLWNoaXAtZ3JvdXAtbWFyZ2luLWJsb2NrOiB2YXIoLS1fc2JiLWNoaXAtZ3JvdXAtbWFyZ2luLWJsb2NrLXN0YXJ0LWRlZmF1bHQpXG4gICAgI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDcuNSl9O1xuXG4gIEBpbmNsdWRlIHNiYi5tcSgkZnJvbTogbGFyZ2UpIHtcbiAgICAtLXNiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jazogdmFyKC0tX3NiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jay1zdGFydC1kZWZhdWx0LWxhcmdlKVxuICAgICAgI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDcuNSl9O1xuICB9XG59XG5cbjo6c2xvdHRlZChpbnB1dCkge1xuICBmbGV4OiAxIDEgdmFyKC0tc2JiLWNoaXAtZ3JvdXAtaW5wdXQtbWluLXdpZHRoKTtcbiAgbWF4LWhlaWdodDogI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDI0KX07XG59XG5cbjo6c2xvdHRlZChzYmItY2hpcCkge1xuICBtYXgtd2lkdGg6IDEwMCU7XG59XG4iLCJpbXBvcnQge1xuICB0eXBlIENTU1Jlc3VsdEdyb3VwLFxuICBodG1sLFxuICBpc1NlcnZlcixcbiAgdHlwZSBQcm9wZXJ0eVZhbHVlcyxcbiAgdHlwZSBUZW1wbGF0ZVJlc3VsdCxcbiAgdW5zYWZlQ1NTLFxufSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IGdldE5leHRFbGVtZW50SW5kZXgsIGlzQXJyb3dLZXlQcmVzc2VkIH0gZnJvbSAnLi4vLi4vY29yZS9hMTF5LnRzJztcbmltcG9ydCB7IFNiYkVsZW1lbnQgfSBmcm9tICcuLi8uLi9jb3JlL2Jhc2UtZWxlbWVudHMudHMnO1xuaW1wb3J0IHsgU2JiTGFuZ3VhZ2VDb250cm9sbGVyLCBTYmJQcm9wZXJ0eVdhdGNoZXJDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vY29yZS9jb250cm9sbGVycy50cyc7XG5pbXBvcnQgeyBmb3JjZVR5cGUgfSBmcm9tICcuLi8uLi9jb3JlL2RlY29yYXRvcnMudHMnO1xuaW1wb3J0IHsgaXNMZWFuIH0gZnJvbSAnLi4vLi4vY29yZS9kb20vbGVhbi1jb250ZXh0LnRzJztcbmltcG9ydCB7IGkxOG5DaGlwR3JvdXBJbnB1dERlc2NyaXB0aW9uLCBpMThuU2VsZWN0aW9uUmVxdWlyZWQgfSBmcm9tICcuLi8uLi9jb3JlL2kxOG4udHMnO1xuaW1wb3J0IHtcbiAgdHlwZSBGb3JtUmVzdG9yZVJlYXNvbixcbiAgdHlwZSBGb3JtUmVzdG9yZVN0YXRlLFxuICBTYmJEaXNhYmxlZE1peGluLFxuICBTYmJGb3JtQXNzb2NpYXRlZE1peGluLFxuICBTYmJOZWdhdGl2ZU1peGluLFxuICBTYmJSZXF1aXJlZE1peGluLFxufSBmcm9tICcuLi8uLi9jb3JlL21peGlucy50cyc7XG5pbXBvcnQgeyBib3hTaXppbmdTdHlsZXMgfSBmcm9tICcuLi8uLi9jb3JlL3N0eWxlcy50cyc7XG5pbXBvcnQgdHlwZSB7IFNiYkZvcm1GaWVsZEVsZW1lbnQgfSBmcm9tICcuLi8uLi9mb3JtLWZpZWxkL2Zvcm0tZmllbGQvZm9ybS1maWVsZC5jb21wb25lbnQudHMnO1xuaW1wb3J0IHR5cGUgeyBTYmJPcHRpb25CYXNlRWxlbWVudCB9IGZyb20gJy4uLy4uL29wdGlvbi9vcHRpb24vb3B0aW9uLWJhc2UtZWxlbWVudC50cyc7XG5pbXBvcnQgeyBTYmJDaGlwRWxlbWVudCB9IGZyb20gJy4uL2NoaXAvY2hpcC5jb21wb25lbnQudHMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9jaGlwLWdyb3VwLnNjc3M/aW5saW5lJztcblxubGV0IGRpc3BsYXlXaXRoV2FybmluZ0xvZ2dlZCA9IGZhbHNlO1xuXG4vLyBUT0RPKGJyZWFraW5nLWNoYW5nZSk6IFJlcGxhY2UgYmFzZSBjbGFzcyB3aXRoIEV2ZW50XG5leHBvcnQgY2xhc3MgU2JiQ2hpcElucHV0VG9rZW5FbmRFdmVudDxUID0gc3RyaW5nPiBleHRlbmRzIEN1c3RvbUV2ZW50PFxuICBTYmJDaGlwSW5wdXRUb2tlbkVuZEV2ZW50RGV0YWlsczxUPlxuPiB7XG4gIC8qKiBUaGUgZWxlbWVudCB0aGF0IHRyaWdnZXJlZCB0aGUgY2hpcCBjcmVhdGlvbiAqL1xuICBwdWJsaWMgb3JpZ2luOiAnaW5wdXQnIHwgJ2F1dG9jb21wbGV0ZSc7XG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIG5ldyBjaGlwLiBFaXRoZXIgdGhlIGlucHV0IG9yIHRoZSBvcHRpb24gdmFsdWUgZGVwZW5kaW5nIG9uIHRoZSBvcmlnaW4uXG4gICAqIEVpdGhlciB0aGUgdmFsdWUgZnJvbSB0aGUgaW5wdXQgd2hpY2ggaXMgYWx3YXlzIGBzdHJpbmdgIG9yIHRoZSB2YWx1ZSBmcm9tIHRoZSBzZWxlY3RlZCBvcHRpb25cbiAgICogZnJvbSBhbiBhdXRvY29tcGxldGUsIHdoaWNoIGNhbiBiZSBlaXRoZXIgYSBzdHJpbmcgb3IgYW55IG90aGVyIHR5cGUuXG4gICAqL1xuICBwdWJsaWMgdmFsdWU6IFQgfCBzdHJpbmc7XG4gIHB1YmxpYyBsYWJlbD86IHN0cmluZztcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGV2ZW50IHByb3BlcnRpZXMgZGlyZWN0bHkuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGRldGFpbCgpOiBTYmJDaGlwSW5wdXRUb2tlbkVuZEV2ZW50RGV0YWlsczxUPiB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogUGljazxTYmJDaGlwSW5wdXRUb2tlbkVuZEV2ZW50LCAnb3JpZ2luJyB8ICd2YWx1ZScgfCAnbGFiZWwnPikge1xuICAgIHN1cGVyKCdjaGlwaW5wdXR0b2tlbmVuZCcsIHtcbiAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgfSk7XG4gICAgdGhpcy5vcmlnaW4gPSBvcHRpb25zLm9yaWdpbjtcbiAgICB0aGlzLnZhbHVlID0gb3B0aW9ucy52YWx1ZTtcbiAgICB0aGlzLmxhYmVsID0gb3B0aW9ucy5sYWJlbDtcbiAgfVxuXG4gIC8qKiBTZXQgYSBuZXcgdmFsdWUgZm9yIHRoZSBjaGlwIHRoYXQgd2lsbCBiZSBjcmVhdGVkICovXG4gIHB1YmxpYyBzZXRWYWx1ZSh2YWx1ZTogVCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuICAvKiogU2V0IGEgbGFiZWwgZm9yIHRoZSBjaGlwIHRoYXQgd2lsbCBiZSBjcmVhdGVkICovXG4gIHB1YmxpYyBzZXRMYWJlbChsYWJlbDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5sYWJlbCA9IGxhYmVsO1xuICB9XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGBTYmJDaGlwSW5wdXRUb2tlbkVuZEV2ZW50YCBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNiYkNoaXBJbnB1dFRva2VuRW5kRXZlbnREZXRhaWxzPFQgPSBzdHJpbmc+IHtcbiAgLyoqIFRoZSBlbGVtZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBjaGlwIGNyZWF0aW9uICovXG4gIG9yaWdpbjogJ2lucHV0JyB8ICdhdXRvY29tcGxldGUnO1xuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBuZXcgY2hpcC4gRWl0aGVyIHRoZSBpbnB1dCBvciB0aGUgb3B0aW9uIHZhbHVlIGRlcGVuZGluZyBvbiB0aGUgb3JpZ2luLlxuICAgKiBFaXRoZXIgdGhlIHZhbHVlIGZyb20gdGhlIGlucHV0IHdoaWNoIGlzIGFsd2F5cyBgc3RyaW5nYCBvciB0aGUgdmFsdWUgZnJvbSB0aGUgc2VsZWN0ZWQgb3B0aW9uXG4gICAqIGZyb20gYW4gYXV0b2NvbXBsZXRlLCB3aGljaCBjYW4gYmUgZWl0aGVyIGEgc3RyaW5nIG9yIGFueSBvdGhlciB0eXBlLlxuICAgKi9cbiAgdmFsdWU6IFQgfCBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICAvKiogU2V0IGEgbmV3IHZhbHVlIGZvciB0aGUgY2hpcCB0aGF0IHdpbGwgYmUgY3JlYXRlZCAqL1xuICBzZXRWYWx1ZSh2YWx1ZTogVCk6IHZvaWQ7XG4gIC8qKiBTZXQgYSBsYWJlbCBmb3IgdGhlIGNoaXAgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgKi9cbiAgc2V0TGFiZWwodmFsdWU6IHN0cmluZyk6IHZvaWQ7XG59XG5cbi8qKlxuICogVGhlIGBzYmItY2hpcC1ncm91cGAgY29tcG9uZW50IGlzIHVzZWQgYXMgYSBjb250YWluZXIgZm9yIG9uZSBvciBtdWx0aXBsZSBgc2JiLWNoaXBgLlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gYWRkIGBzYmItY2hpcGAgZWxlbWVudHMuXG4gKiBAZXZlbnQge1NiYkNoaXBJbnB1dFRva2VuRW5kRXZlbnQ8VD59IGNoaXBpbnB1dHRva2VuZW5kIC0gTm90aWZpZXMgdGhhdCBhIGNoaXAgaXMgYWJvdXQgdG8gYmUgY3JlYXRlZC4gQ2FuIGJlIHByZXZlbnRlZC5cbiAqIEBvdmVycmlkZVR5cGUgdmFsdWUgLSAoVCA9IHN0cmluZ1tdKSB8IG51bGxcbiAqL1xuZXhwb3J0IGNsYXNzIFNiYkNoaXBHcm91cEVsZW1lbnQ8VCA9IHN0cmluZz4gZXh0ZW5kcyBTYmJSZXF1aXJlZE1peGluKFxuICBTYmJEaXNhYmxlZE1peGluKFNiYk5lZ2F0aXZlTWl4aW4oU2JiRm9ybUFzc29jaWF0ZWRNaXhpbihTYmJFbGVtZW50KSkpLFxuKSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgcmVhZG9ubHkgZWxlbWVudE5hbWU6IHN0cmluZyA9ICdzYmItY2hpcC1ncm91cCc7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgcmVhZG9ubHkgcm9sZSA9ICdsaXN0Ym94JztcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gW2JveFNpemluZ1N0eWxlcywgdW5zYWZlQ1NTKHN0eWxlKV07XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZXZlbnRzID0ge1xuICAgIGlucHV0OiAnaW5wdXQnLFxuICAgIGNoYW5nZTogJ2NoYW5nZScsXG4gICAgY2hpcGlucHV0dG9rZW5lbmQ6ICdjaGlwaW5wdXR0b2tlbmVuZCcsXG4gIH0gYXMgY29uc3Q7XG5cbiAgLyoqIFZhbHVlIG9mIHRoZSBmb3JtIGVsZW1lbnQuICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEFycmF5IH0pXG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IChUIHwgbnVsbClbXSB8IG51bGwpIHtcbiAgICB2YWx1ZSA9IHZhbHVlID8/IFtdO1xuICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy52YWx1ZTtcblxuICAgIC8vIFN1YnRyYWN0IGZyb20gJ29sZFZhbHVlJyB0aGUgbmV3ICd2YWx1ZSdcbiAgICAvLyBUaGUgcmVzdWx0IGFyZSB0aGUgY2hpcHMgdG8gcmVtb3ZlIChoYW5kbGUgZHVwbGljYXRlcylcbiAgICBjb25zdCB0b1JlbW92ZSA9IFsuLi5vbGRWYWx1ZV07XG4gICAgZm9yIChjb25zdCBjIG9mIHZhbHVlKSB7XG4gICAgICBpZiAodG9SZW1vdmUuaW5jbHVkZXMoYykpIHtcbiAgICAgICAgdG9SZW1vdmUuc3BsaWNlKHRvUmVtb3ZlLmluZGV4T2YoYyksIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICB0b1JlbW92ZS5mb3JFYWNoKCh2YWx1ZSkgPT5cbiAgICAgIHRoaXMuX2NoaXBFbGVtZW50cygpXG4gICAgICAgIC5maW5kKChjKSA9PiBjLnZhbHVlID09PSB2YWx1ZSlcbiAgICAgICAgPy5yZW1vdmUoKSxcbiAgICApO1xuXG4gICAgLy8gU3VidHJhY3QgZnJvbSB0aGUgbmV3ICd2YWx1ZScgd2hhdCB3YXMgYWxyZWFkeSBwcmVzZW50XG4gICAgLy8gVGhlIHJlc3VsdCBhcmUgdGhlIG5ldyBjaGlwcyB0byBhZGQgKGhhbmRsZSBkdXBsaWNhdGVzKVxuICAgIGNvbnN0IHRvQWRkID0gWy4uLnZhbHVlXTtcbiAgICBmb3IgKGNvbnN0IGMgb2Ygb2xkVmFsdWUpIHtcbiAgICAgIGlmICh0b0FkZC5pbmNsdWRlcyhjKSkge1xuICAgICAgICB0b0FkZC5zcGxpY2UodG9BZGQuaW5kZXhPZihjKSwgMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRvQWRkLmZvckVhY2goKGMpID0+IHRoaXMuX2NyZWF0ZUNoaXBFbGVtZW50KGMpKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IChUIHwgbnVsbClbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NoaXBFbGVtZW50cygpLm1hcCgoYykgPT4gYy52YWx1ZSk7XG4gIH1cblxuICAvKiogRnVuY3Rpb24gdGhhdCBtYXBzIGEgY2hpcCdzIHZhbHVlIHRvIGl0cyBkaXNwbGF5IHZhbHVlLiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBkaXNwbGF5V2l0aDogKCh2YWx1ZTogVCkgPT4gc3RyaW5nKSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBUaGUgYXJyYXkgb2Yga2V5cyB0aGF0IHdpbGwgdHJpZ2dlciBhIGBjaGlwaW5wdXR0b2tlbmVuZGAgZXZlbnQuIERlZmF1bHQgYFsnRW50ZXInXWAgKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnc2VwYXJhdG9yLWtleXMnLCB0eXBlOiBBcnJheSB9KVxuICBwdWJsaWMgYWNjZXNzb3Igc2VwYXJhdG9yS2V5czogc3RyaW5nW10gPSBbJ0VudGVyJ107XG5cbiAgLyoqIFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBhZGQgYSBjaGlwIHdoZW4gdGhlIGlucHV0IGxvc2VzIGZvY3VzIGlmIHRoZXJlJ3MgYSB2YWx1ZS4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2FkZC1vbi1ibHVyJywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgYWRkT25CbHVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIExpc3RlbnMgdG8gdGhlIGNoYW5nZXMgb24gYHJlYWRvbmx5YCBhbmQgYGRpc2FibGVkYCBhdHRyaWJ1dGVzIG9mIGA8aW5wdXQ+YC5cbiAgICovXG4gIHByaXZhdGUgX2lucHV0QXR0cmlidXRlT2JzZXJ2ZXIgPSAhaXNTZXJ2ZXJcbiAgICA/IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHRoaXMuX3JlYWN0VG9JbnB1dENoYW5nZXMoKSlcbiAgICA6IG51bGw7XG5cbiAgcHJpdmF0ZSBfaW5wdXRFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9pbnB1dEFib3J0Q29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9sYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG4gIHByaXZhdGUgX3ByZXZpb3VzU2l6ZT86IFNiYkZvcm1GaWVsZEVsZW1lbnRbJ3NpemUnXTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKFNiYkNoaXBFbGVtZW50LmV2ZW50cy5yZXF1ZXN0ZGVsZXRlLCAoZXYpID0+XG4gICAgICB0aGlzLl9kZWxldGVDaGlwKGV2LnRhcmdldCBhcyBTYmJDaGlwRWxlbWVudDxUPiksXG4gICAgKTtcblxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCdrZXlkb3duJywgKGV2KSA9PiB0aGlzLl9vbkNoaXBLZXlEb3duKGV2KSk7XG5cbiAgICB0aGlzLmFkZENvbnRyb2xsZXIoXG4gICAgICBuZXcgU2JiUHJvcGVydHlXYXRjaGVyQ29udHJvbGxlcih0aGlzLCAoKSA9PiB0aGlzLmNsb3Nlc3QoJ3NiYi1mb3JtLWZpZWxkJyksIHtcbiAgICAgICAgc2l6ZTogKGZvcm1GaWVsZCkgPT4gdGhpcy5fdXBkYXRlU2l6ZShmb3JtRmllbGQuc2l6ZSksXG4gICAgICAgIGxhYmVsOiAoZm9ybUZpZWxkKSA9PiB0aGlzLl91cGRhdGVMYWJlbFN0YXRlKGZvcm1GaWVsZCksXG4gICAgICAgIGhpZGRlbkxhYmVsOiAoZm9ybUZpZWxkKSA9PiB0aGlzLl91cGRhdGVMYWJlbFN0YXRlKGZvcm1GaWVsZCksXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlTGFiZWxTdGF0ZShmb3JtRmllbGQ6IFNiYkZvcm1GaWVsZEVsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLnRvZ2dsZVN0YXRlKCd3aXRob3V0LWxhYmVsJywgIWZvcm1GaWVsZC5sYWJlbCB8fCBmb3JtRmllbGQuaGlkZGVuTGFiZWwpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5fc2V0dXBDb21wb25lbnQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlcyk6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKFxuICAgICAgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdkaXNhYmxlZCcpIHx8XG4gICAgICBjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2Zvcm1EaXNhYmxlZCcpIHx8XG4gICAgICBjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ25lZ2F0aXZlJylcbiAgICApIHtcbiAgICAgIHRoaXMuX3Byb3h5U3RhdGVUb0NoaXBzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgZm9ybVJlc2V0Q2FsbGJhY2soKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyBmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soXG4gICAgc3RhdGU6IEZvcm1SZXN0b3JlU3RhdGUgfCBudWxsLFxuICAgIF9yZWFzb246IEZvcm1SZXN0b3JlUmVhc29uLFxuICApOiB2b2lkIHtcbiAgICBpZiAoIXN0YXRlKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9yZWFkRm9ybURhdGEoc3RhdGUgYXMgRm9ybURhdGEpLnRoZW4oKGFycmF5KSA9PiAodGhpcy52YWx1ZSA9IGFycmF5KSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9yZWFkRm9ybURhdGEoZm9ybURhdGE6IEZvcm1EYXRhKTogUHJvbWlzZTxUW10+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICBmb3JtRGF0YVxuICAgICAgICAuZ2V0QWxsKHRoaXMubmFtZSlcbiAgICAgICAgLm1hcChhc3luYyAoZW50cnkpID0+XG4gICAgICAgICAgZW50cnkgaW5zdGFuY2VvZiBCbG9iID8gSlNPTi5wYXJzZShhd2FpdCBlbnRyeS50ZXh0KCkpIDogKGVudHJ5IGFzIFQpLFxuICAgICAgICApLFxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc2hvdWxkVmFsaWRhdGUobmFtZTogUHJvcGVydHlLZXkgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuc2hvdWxkVmFsaWRhdGUobmFtZSkgfHwgbmFtZSA9PT0gJ3JlcXVpcmVkJyB8fCBuYW1lID09PSAndmFsdWUnO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHZhbGlkYXRlKCk6IHZvaWQge1xuICAgIHN1cGVyLnZhbGlkYXRlKCk7XG4gICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgdGhpcy52YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuc2V0VmFsaWRpdHlGbGFnKCd2YWx1ZU1pc3NpbmcnLCBpMThuU2VsZWN0aW9uUmVxdWlyZWRbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbW92ZVZhbGlkaXR5RmxhZygndmFsdWVNaXNzaW5nJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJldHVybiB0aGUgbGlzdCBvZiBjaGlwIGVsZW1lbnRzICoqL1xuICBwcml2YXRlIF9jaGlwRWxlbWVudHMoKTogU2JiQ2hpcEVsZW1lbnQ8VD5bXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsPy48U2JiQ2hpcEVsZW1lbnQ8VD4+KCdzYmItY2hpcCcpID8/IFtdKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm4gdGhlIGxpc3Qgb2YgZW5hYmxlZCBjaGlwIGVsZW1lbnRzICoqL1xuICBwcml2YXRlIF9lbmFibGVkQ2hpcEVsZW1lbnRzKCk6IFNiYkNoaXBFbGVtZW50PFQ+W10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbD8uKCdzYmItY2hpcDpub3QoW2Rpc2FibGVkXSknKSA/PyBbXSk7XG4gIH1cblxuICBwcml2YXRlIF9zZXR1cENvbXBvbmVudCgpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcblxuICAgIC8vIENvbm5lY3QgdG8gdGhlIGlucHV0XG4gICAgaWYgKGlucHV0ICYmIGlucHV0ICE9PSB0aGlzLl9pbnB1dEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2lucHV0QWJvcnRDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgICAgdGhpcy5faW5wdXRBdHRyaWJ1dGVPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgICAgdGhpcy5faW5wdXRFbGVtZW50ID0gaW5wdXQ7XG5cbiAgICAgIHRoaXMuX2lucHV0QWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgdGhpcy5faW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZXYpID0+IHRoaXMuX29uSW5wdXRLZXlEb3duKGV2KSwge1xuICAgICAgICBzaWduYWw6IHRoaXMuX2lucHV0QWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5faW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoKSA9PiB0aGlzLl9vbklucHV0Qmx1cigpLCB7XG4gICAgICAgIHNpZ25hbDogdGhpcy5faW5wdXRBYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICBjYXB0dXJlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICB0aGlzLl9pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ2lucHV0QXV0b2NvbXBsZXRlJyxcbiAgICAgICAgKGV2ZW50OiBDdXN0b21FdmVudDx7IG9wdGlvbjogU2JiT3B0aW9uQmFzZUVsZW1lbnQ8VD4gfT4pID0+IHtcbiAgICAgICAgICB0aGlzLl9jcmVhdGVDaGlwRnJvbUlucHV0KCdhdXRvY29tcGxldGUnLCBldmVudC5kZXRhaWw/Lm9wdGlvbi52YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzaWduYWw6IHRoaXMuX2lucHV0QWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuX2lucHV0QXR0cmlidXRlT2JzZXJ2ZXI/Lm9ic2VydmUodGhpcy5faW5wdXRFbGVtZW50LCB7XG4gICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICAgIGF0dHJpYnV0ZUZpbHRlcjogWydyZWFkb25seScsICdkaXNhYmxlZCddLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gSW5oZXJpdCBzaXplIGZyb20gdGhlIGZvcm0tZmllbGQgYW5kIG9ic2VydmUgZm9yIGNoYW5nZXNcbiAgICBpZiAoIXRoaXMuX3ByZXZpb3VzU2l6ZSB8fCAhdGhpcy5jbG9zZXN0KCdzYmItZm9ybS1maWVsZCcpKSB7XG4gICAgICB0aGlzLl91cGRhdGVTaXplKGlzTGVhbigpID8gJ3MnIDogJ20nKTtcbiAgICB9XG5cbiAgICB0aGlzLnRvZ2dsZVN0YXRlKCdlbXB0eScsIHRoaXMudmFsdWUubGVuZ3RoID09PSAwKTtcbiAgICB0aGlzLl9yZWFjdFRvSW5wdXRDaGFuZ2VzKCk7XG4gICAgdGhpcy5fdXBkYXRlSW5wdXREZXNjcmlwdGlvbigpO1xuICAgIHRoaXMudXBkYXRlRm9ybVZhbHVlKCk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIGZvciBrZXlib2FyZCBldmVudHMgb24gdGhlIGNoaXAgZWxlbWVudHNcbiAgICoqL1xuICBwcml2YXRlIF9vbkNoaXBLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZXZlbnRUYXJnZXQgPSBldmVudC50YXJnZXQgYXMgU2JiQ2hpcEVsZW1lbnQ8VD47XG4gICAgaWYgKGV2ZW50VGFyZ2V0LmxvY2FsTmFtZSAhPT0gJ3NiYi1jaGlwJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEFycm93IGtleXMgYWxsb3cgbmF2aWdhdGlvbiBiZXR3ZWVuIGNoaXBzIGZvY3VzIHN0ZXBzXG4gICAgaWYgKGlzQXJyb3dLZXlQcmVzc2VkKGV2ZW50KSkge1xuICAgICAgY29uc3QgZm9jdXNTdGVwcyA9IHRoaXMuX2VuYWJsZWRDaGlwRWxlbWVudHMoKTtcbiAgICAgIGNvbnN0IG5leHQgPSBnZXROZXh0RWxlbWVudEluZGV4KGV2ZW50LCBmb2N1c1N0ZXBzLmluZGV4T2YoZXZlbnRUYXJnZXQpLCBmb2N1c1N0ZXBzLmxlbmd0aCk7XG4gICAgICBmb2N1c1N0ZXBzW25leHRdLmZvY3VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0JhY2tzcGFjZSc6XG4gICAgICBjYXNlICdEZWxldGUnOlxuICAgICAgICBpZiAoIWV2ZW50VGFyZ2V0LnJlYWRPbmx5ICYmICFldmVudFRhcmdldC5kaXNhYmxlZCkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5fZGVsZXRlQ2hpcChldmVudFRhcmdldCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExpc3RlbiBmb3Iga2V5Ym9hcmQgZXZlbnRzIG9uIHRoZSBpbnB1dFxuICAgKiovXG4gIHByaXZhdGUgX29uSW5wdXRLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0JhY2tzcGFjZSc6XG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICBpZiAoIXRoaXMuX2lucHV0RWxlbWVudCEudmFsdWUpIHtcbiAgICAgICAgICB0aGlzLl9mb2N1c0NoaXAoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gUHJldmVudHMgdGhlIGZvcm0gc3VibWl0XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB1c2VyIHR5cGVkIG9uZSBvZiB0aGUgc2VwYXJhdG9yIGtleXMsIHRyaWdnZXIgYSAnY2hpcGlucHV0dG9rZW5lbmQnIGV2ZW50XG4gICAgaWYgKHRoaXMuc2VwYXJhdG9yS2V5cy5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyBwcmV2ZW50IHR5cGluZyB0aGUgc2VwYXJhdG9yIGtleSBpbnRvIHRoZSBpbnB1dFxuICAgICAgdGhpcy5fY3JlYXRlQ2hpcEZyb21JbnB1dCgnaW5wdXQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGJsdXIgZXZlbnQgb24gdGhlIGlucHV0XG4gICAqKi9cbiAgcHJpdmF0ZSBfb25JbnB1dEJsdXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWRkT25CbHVyKSB7XG4gICAgICB0aGlzLl9jcmVhdGVDaGlwRnJvbUlucHV0KCdpbnB1dCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgaW5wdXQgaXMgbm90IGVtcHR5LCBjcmVhdGUgYSBjaGlwIHdpdGggaXRzIHZhbHVlXG4gICAqL1xuICBwcml2YXRlIF9jcmVhdGVDaGlwRnJvbUlucHV0KG9yaWdpbjogJ2lucHV0JyB8ICdhdXRvY29tcGxldGUnID0gJ2lucHV0JywgdmFsdWU/OiBUKTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXRWYWx1ZSA9IHZhbHVlID8/IHRoaXMuX2lucHV0RWxlbWVudCEudmFsdWUudHJpbSgpO1xuICAgIGlmICghaW5wdXRWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50ID0gbmV3IFNiYkNoaXBJbnB1dFRva2VuRW5kRXZlbnQ8VD4oe1xuICAgICAgb3JpZ2luLFxuICAgICAgdmFsdWU6IGlucHV0VmFsdWUgYXMgc3RyaW5nLFxuICAgICAgbGFiZWw6ICh2YWx1ZSA/IHRoaXMuZGlzcGxheVdpdGg/Lih2YWx1ZSkgOiBudWxsKSA/PyB1bmRlZmluZWQsXG4gICAgfSk7XG4gICAgaWYgKCF0aGlzLmRpc3BhdGNoRXZlbnQoZXZlbnQpKSB7XG4gICAgICByZXR1cm47IC8vIGV2ZW50IHByZXZlbnRlZDsgZG8gbm90aGluZyAodGhlIGNvbnN1bWVyIGhhcyB0byBjcmVhdGUgdGhlIGNoaXApXG4gICAgfVxuXG4gICAgdGhpcy5fY3JlYXRlQ2hpcEVsZW1lbnQoZXZlbnQudmFsdWUgYXMgVCwgZXZlbnQubGFiZWwpO1xuICAgIHRoaXMuX2lucHV0RWxlbWVudCEudmFsdWUgPSAnJzsgLy8gRW1wdHkgdGhlIGlucHV0XG4gICAgdGhpcy5fZW1pdElucHV0RXZlbnRzKCk7XG4gIH1cblxuICBwcml2YXRlIF9kZWxldGVDaGlwKGNoaXA6IFNiYkNoaXBFbGVtZW50PFQ+KTogdm9pZCB7XG4gICAgY29uc3QgY2hpcHMgPSB0aGlzLl9lbmFibGVkQ2hpcEVsZW1lbnRzKCk7XG4gICAgY2hpcC5yZW1vdmUoKTtcbiAgICB0aGlzLl9lbWl0SW5wdXRFdmVudHMoKTtcbiAgICB0aGlzLl9mb2N1c0NoaXAoY2hpcHMuaW5kZXhPZihjaGlwKSk7IC8vIEZvY3VzIHRoZSBuZXh0IGNoaXBcbiAgfVxuXG4gIC8qKlxuICAgKiBGb2N1cyBhbiBlbmFibGVkIGNoaXAuIElmIG5vbmUgYXJlIHByZXNlbnQsIGZvY3VzIHRoZSBpbnB1dFxuICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBlbmFibGVkIGNoaXAuIElmIG51bGwsIGZvY3VzIHRoZSBsYXN0IG9uZS5cbiAgICovXG4gIHByaXZhdGUgX2ZvY3VzQ2hpcChpbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGVuYWJsZWRDaGlwcyA9IHRoaXMuX2VuYWJsZWRDaGlwRWxlbWVudHMoKTtcblxuICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkICYmIGVuYWJsZWRDaGlwc1tpbmRleF0pIHtcbiAgICAgIGVuYWJsZWRDaGlwc1tpbmRleF0uZm9jdXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZW5hYmxlZENoaXBzLmxlbmd0aCA+IDApIHtcbiAgICAgIGVuYWJsZWRDaGlwc1tlbmFibGVkQ2hpcHMubGVuZ3RoIC0gMV0uZm9jdXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbnB1dEVsZW1lbnQ/LmZvY3VzKCk7XG4gIH1cblxuICBwcml2YXRlIF9lbWl0SW5wdXRFdmVudHMoKTogdm9pZCB7XG4gICAgLyoqIFRoZSBpbnB1dCBldmVudCBmaXJlcyB3aGVuIHRoZSB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkIGFzIGEgZGlyZWN0IHJlc3VsdCBvZiBhIHVzZXIgYWN0aW9uLiAqL1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudCgnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlIH0pKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjaGFuZ2UgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgdXNlciBtb2RpZmllcyB0aGUgZWxlbWVudCdzIHZhbHVlLlxuICAgICAqIFVubGlrZSB0aGUgaW5wdXQgZXZlbnQsIHRoZSBjaGFuZ2UgZXZlbnQgaXMgbm90IG5lY2Vzc2FyaWx5IGZpcmVkXG4gICAgICogZm9yIGVhY2ggYWx0ZXJhdGlvbiB0byBhbiBlbGVtZW50J3MgdmFsdWUuXG4gICAgICovXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZUNoaXBFbGVtZW50KHZhbHVlOiBUIHwgbnVsbCwgbGFiZWw/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoaXNTZXJ2ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmV3Q2hpcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NiYi1jaGlwJykgYXMgU2JiQ2hpcEVsZW1lbnQ8VD47XG4gICAgbmV3Q2hpcC52YWx1ZSA9IHZhbHVlO1xuICAgIG5ld0NoaXAuaW5uZXJUZXh0ID0gbGFiZWwgPz8gKHZhbHVlID8gdGhpcy5kaXNwbGF5V2l0aD8uKHZhbHVlKSA6IG51bGwpID8/ICcnO1xuICAgIGlmIChcbiAgICAgIGltcG9ydC5tZXRhLmVudi5ERVYgJiZcbiAgICAgICFkaXNwbGF5V2l0aFdhcm5pbmdMb2dnZWQgJiZcbiAgICAgICFsYWJlbCAmJlxuICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgIXRoaXMuZGlzcGxheVdpdGhcbiAgICApIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYGRpc3BsYXlXaXRoIGhhcyBub3QgYmVlbiBzZXQgeWV0IGZvciBzYmItY2hpcC1ncm91cCBhbmQgdmFsdWUgaXMgYW4gb2JqZWN0LlxuICAgICAgICAgSWYgeW91IGFyZSB1c2luZyBvYmplY3QgdmFsdWVzLCB5b3UgbmVlZCB0byBwcm92aWRlIGRpc3BsYXlXaWR0aCBiZWZvcmVcbiAgICAgICAgIHNldHRpbmcgb3Igc2VsZWN0aW5nIGFueSB2YWx1ZS5gLFxuICAgICAgKTtcbiAgICAgIGRpc3BsYXlXaXRoV2FybmluZ0xvZ2dlZCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuaW5zZXJ0QmVmb3JlKG5ld0NoaXAsIHRoaXMuX2lucHV0RWxlbWVudCA/PyB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVhY3RUb0lucHV0Q2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gdGhpcy5faW5wdXRFbGVtZW50Py5kaXNhYmxlZCA/PyBmYWxzZTtcbiAgICB0aGlzLl9wcm94eVN0YXRlVG9DaGlwcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJveHlTdGF0ZVRvQ2hpcHMoKTogdm9pZCB7XG4gICAgdGhpcy5fY2hpcEVsZW1lbnRzKCkuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgYy5kaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5mb3JtRGlzYWJsZWQ7XG4gICAgICBjLnJlYWRPbmx5ID0gdGhpcy5faW5wdXRFbGVtZW50Py5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykgPz8gZmFsc2U7XG4gICAgICBjLm5lZ2F0aXZlID0gdGhpcy5uZWdhdGl2ZTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZVNpemUoc2l6ZTogU2JiRm9ybUZpZWxkRWxlbWVudFsnc2l6ZSddKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3ByZXZpb3VzU2l6ZSkge1xuICAgICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmRlbGV0ZShgc2l6ZS0ke3RoaXMuX3ByZXZpb3VzU2l6ZX1gKTtcbiAgICB9XG4gICAgdGhpcy5fcHJldmlvdXNTaXplID0gc2l6ZTtcbiAgICBpZiAodGhpcy5fcHJldmlvdXNTaXplKSB7XG4gICAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuYWRkKGBzaXplLSR7dGhpcy5fcHJldmlvdXNTaXplfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZUlucHV0RGVzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pbnB1dEVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5faW5wdXRFbGVtZW50LnNldEF0dHJpYnV0ZShcbiAgICAgICdhcmlhLWRlc2NyaXB0aW9uJyxcbiAgICAgIGAke2kxOG5DaGlwR3JvdXBJbnB1dERlc2NyaXB0aW9uW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke3RoaXMudmFsdWUubGVuZ3RofWAsXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYDxzbG90IEBzbG90Y2hhbmdlPSR7dGhpcy5fc2V0dXBDb21wb25lbnR9Pjwvc2xvdD5gO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItY2hpcC1ncm91cCc6IFNiYkNoaXBHcm91cEVsZW1lbnQ7XG4gIH1cblxuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRFdmVudE1hcCB7XG4gICAgY2hp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
|
package/development/chip.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as SbbChipInputTokenEndEvent, t as SbbChipGroupElement } from "./chip-group.component-
|
|
1
|
+
import { n as SbbChipInputTokenEndEvent, t as SbbChipGroupElement } from "./chip-group.component-BVfHWX2-.js";
|
|
2
2
|
import { t as SbbChipElement } from "./chip.component-C6v1-PLX.js";
|
|
3
3
|
import "./chip.pure.js";
|
|
4
4
|
//#region src/elements/chip.ts
|
package/development/chip.pure.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { n as SbbChipInputTokenEndEvent, t as SbbChipGroupElement } from "./chip-group.component-
|
|
1
|
+
import { n as SbbChipInputTokenEndEvent, t as SbbChipGroupElement } from "./chip-group.component-BVfHWX2-.js";
|
|
2
2
|
import { t as SbbChipElement } from "./chip.component-C6v1-PLX.js";
|
|
3
3
|
export { SbbChipElement, SbbChipGroupElement, SbbChipInputTokenEndEvent };
|
|
@@ -287,4 +287,4 @@ var SbbClockElement = (() => {
|
|
|
287
287
|
//#endregion
|
|
288
288
|
export { SbbClockElement as t };
|
|
289
289
|
|
|
290
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvY2suY29tcG9uZW50LUNWUHY0bUNwLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9jbG9jay9hc3NldHMvc2JiX2Nsb2NrX2ZhY2Uuc3ZnP3JhdyIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9jbG9jay9hc3NldHMvc2JiX2Nsb2NrX2hvdXJzLnN2Zz9yYXciLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvY2xvY2svYXNzZXRzL3NiYl9jbG9ja19taW51dGVzLnN2Zz9yYXciLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvY2xvY2svYXNzZXRzL3NiYl9jbG9ja19zZWNvbmRzLnN2Zz9yYXciLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvY2xvY2svY2xvY2suc2Nzcz9pbmxpbmUiLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvY2xvY2svY2xvY2suY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyBmb2N1c2FibGU9XFxcImZhbHNlXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAxMDUgMTA1XFxcIj48ZyBjbGFzcz1cXFwiZmFjZVxcXCI+PGNpcmNsZSBmaWxsPVxcXCJ2YXIoLS1zYmItY2xvY2stYmFja2dyb3VuZC1jb2xvcilcXFwiIGN4PVxcXCI1Mi41XFxcIiBjeT1cXFwiNTIuNVxcXCIgcj1cXFwiNTIuNVxcXCIvPjxwYXRoIGQ9XFxcIk01MC43NSA0aDMuNXYxMmgtMy41ek01MC43NSA4OWgzLjV2MTJoLTMuNXpNNzUuMjMzIDkuNjIzbDMuMDMgMS43NS02IDEwLjM5Mi0zLjAzLTEuNzV6TTMyLjczNCA4My4yMzNsMy4wMyAxLjc1LTYgMTAuMzkyLTMuMDMtMS43NXpNOTMuNjI4IDI2LjczMmwxLjc1IDMuMDMxLTEwLjM5MiA2LTEuNzUtMy4wM3pNMjAuMDE3IDY5LjIzNGwxLjc1IDMuMDMxLTEwLjM5MiA2LTEuNzUtMy4wM3pNMTAxIDUwLjc1djMuNUg4OXYtMy41ek0xNiA1MC43NXYzLjVINHYtMy41ek05NS4zNzkgNzUuMjMybC0xLjc1IDMuMDMxLTEwLjM5Mi02IDEuNzUtMy4wM3pNMjEuNzY2IDMyLjczNGwtMS43NSAzLjAzMS0xMC4zOTItNiAxLjc1LTMuMDN6TTc4LjI2NyA5My42M2wtMy4wMyAxLjc1LTYtMTAuMzkzIDMuMDMtMS43NXpNMzUuNzY2IDIwLjAxNWwtMy4wMyAxLjc1LTYtMTAuMzkyIDMuMDMtMS43NXpcXFwiLz48Zz48cGF0aCBkPVxcXCJNNTYuODczIDQuMTlsMS4zOTIuMTQ3LS4zNjYgMy40OC0xLjM5Mi0uMTQ1ek00Ny4xMDEgOTcuMTc3bDEuMzkzLjE0Ni0uMzY2IDMuNDgxLTEuMzkyLS4xNDZ6TTYxLjg5NiA0LjkxNGwxLjM3LjI5LS43MjggMy40MjQtMS4zNy0uMjl6TTQyLjQ1OCA5Ni4zNjZsMS4zNy4yOS0uNzI4IDMuNDI0LTEuMzctLjI5MXpNNjYuODI1IDYuMTU3bDEuMzMyLjQzMi0xLjA4MiAzLjMzLTEuMzMxLS40MzR6TTM3LjkzMSA5NS4wODVsMS4zMzIuNDMyLTEuMDgyIDMuMzMtMS4zMzEtLjQzM3pNNzEuNTg0IDcuOTA2bDEuMjguNTY5LTEuNDI0IDMuMTk3LTEuMjgtLjU3ek0zMy41NiA5My4zMmwxLjI3OC41NjktMS40MjMgMy4xOTctMS4yOC0uNTd6TTgwLjQ0IDEyLjg1MmwxLjEzMy44MjMtMi4wNTggMi44MzEtMS4xMzItLjgyM3pNMjUuNDgxIDg4LjQ5NGwxLjEzMy44MjItMi4wNTcgMi44MzItMS4xMzMtLjgyM3pNODQuNDMgMTUuOTg2bDEuMDQuOTM3LTIuMzQyIDIuNi0xLjA0LS45MzZ6TTIxLjg3IDg1LjQ2OWwxLjA0LjkzNi0yLjM0MSAyLjYwMS0xLjA0LS45Mzd6TTg4LjA3MiAxOS41MjJsLjkzNyAxLjA0LTIuNiAyLjM0My0uOTM3LTEuMDR6TTE4LjU5MyA4Mi4wODhsLjkzNyAxLjA0LTIuNjAxIDIuMzQyLS45MzctMS4wNHpNOTEuMzI4IDIzLjQyNWwuODIzIDEuMTMzLTIuODMyIDIuMDU3LS44MjMtMS4xMzJ6TTE1LjY4NCA3OC4zODVsLjgyMyAxLjEzMi0yLjgzMiAyLjA1OC0uODIyLTEuMTMzek05Ni41MiAzMi4xMjhsLjU3IDEuMjc5LTMuMTk4IDEuNDIzLS41Ny0xLjI3OHpNMTEuMTA5IDcwLjE2MWwuNTY5IDEuMjc5LTMuMTk3IDEuNDIzLS41Ny0xLjI3OXpNOTguNDA3IDM2Ljg1bC40MzMgMS4zMzItMy4zMyAxLjA4MS0uNDMyLTEuMzMxek05LjQ4MyA2NS43NGwuNDMyIDEuMzMtMy4zMjkgMS4wODItLjQzMi0xLjMzMXpNOTkuNzk1IDQxLjcyNmwuMjkxIDEuMzctMy40MjMuNzI3LS4yOS0xLjM3ek04LjM0IDYxLjE3bC4yOTIgMS4zNy0zLjQyNC43MjgtLjI5LTEuMzd6TTEwMC42NiA0Ni43M2wuMTQ2IDEuMzkzLTMuNDguMzY2LS4xNDctMS4zOTJ6TTcuNjc0IDU2LjUwNmwuMTQ2IDEuMzkyLTMuNDguMzY2LS4xNDctMS4zOTJ6TTEwMC44MTEgNTYuODczbC0uMTQ2IDEuMzkyLTMuNDgtLjM2NS4xNDUtMS4zOTN6TTcuODIxIDQ3LjEwMWwtLjE0NiAxLjM5Mi0zLjQ4LS4zNjUuMTQ1LTEuMzkzek0xMDAuMDkgNjEuODk1bC0uMjkxIDEuMzY5LTMuNDI0LS43MjguMjkxLTEuMzY5ek04LjYzMSA0Mi40NmwtLjI5MSAxLjM3LTMuNDIzLS43MjguMjktMS4zN3pNOTguODQgNjYuODI3bC0uNDMyIDEuMzMxLTMuMzI5LTEuMDgxLjQzMy0xLjMzMnpNOS45MTggMzcuOTNsLS40MzMgMS4zMzEtMy4zMjktMS4wODIuNDMzLTEuMzMxek05Ny4wOTggNzEuNTg1bC0uNTY5IDEuMjgtMy4xOTctMS40MjQuNTctMS4yOHpNMTEuNjc3IDMzLjU1OGwtLjU3IDEuMjgtMy4xOTctMS40MjQuNTctMS4yNzl6TTkyLjE0OSA4MC40MzlsLS44MjMgMS4xMzMtMi44MzItMi4wNTguODIzLTEuMTMyek0xNi41MDYgMjUuNDgybC0uODIzIDEuMTMzLTIuODMxLTIuMDU3LjgyMy0xLjEzM3pNODkuMDE3IDg0LjQzMWwtLjkzNyAxLjA0LTIuNi0yLjM0MS45MzYtMS4wNHpNMTkuNTI4IDIxLjg2OWwtLjkzNiAxLjA0LTIuNjAxLTIuMzQyLjkzNi0xLjA0ek04NS40OCA4OC4wNzZsLTEuMDQxLjkzNi0yLjM0Mi0yLjYgMS4wNC0uOTM3ek0yMi45MSAxOC41OWwtMS4wNC45MzctMi4zNDEtMi42MDEgMS4wNC0uOTM3ek04MS41NzQgOTEuMzI4bC0xLjEzMy44MjMtMi4wNTctMi44MzEgMS4xMzItLjgyM3pNMjYuNjE3IDE1LjY4NGwtMS4xMzMuODIzLTIuMDU3LTIuODMyIDEuMTMyLS44MjN6TTcyLjg3MyA5Ni41MjRsLTEuMjc5LjU3LTEuNDIzLTMuMTk4IDEuMjc4LS41N3pNMzQuODM4IDExLjEwNWwtMS4yNzkuNTctMS40MjMtMy4xOTggMS4yNzktLjU3ek02OC4xNTEgOTguNDA1bC0xLjMzMS40MzItMS4wODItMy4zMjkgMS4zMzItLjQzMnpNMzkuMjU5IDkuNDg1bC0xLjMzMi40MzMtMS4wODEtMy4zMyAxLjMzMS0uNDMyek02My4yNzIgOTkuNzk5bC0xLjM2OS4yOS0uNzI4LTMuNDIyIDEuMzctLjI5MXpNNDMuODMgOC4zMzdsLTEuMzY5LjI5MS0uNzI3LTMuNDIzIDEuMzctLjI5MXpNNTguMjcgMTAwLjY2MmwtMS4zOTMuMTQ2LS4zNjYtMy40OCAxLjM5My0uMTQ3ek00OC40OTQgNy42NzJsLTEuMzkyLjE0Ny0uMzY2LTMuNDgxIDEuMzkyLS4xNDd6XFxcIi8+PC9nPjwvZz48L3N2Zz5cXG5cIiIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyBmb2N1c2FibGU9XFxcImZhbHNlXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAxMDUgMTA1XFxcIj48cGF0aCBpZD1cXFwibW9kX2Nsb2NrX3N2Z19ob3Vyc1xcXCIgZD1cXFwiTTU1LjcgNjQuNWgtNi40bC42LTQ0aDUuMnpcXFwiLz48L3N2Zz5cXG5cIiIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyBmb2N1c2FibGU9XFxcImZhbHNlXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAxMDUgMTA1XFxcIj48cGF0aCBkPVxcXCJNNTUuMSw2NC41aC01LjJsMC44LTU4aDMuNkw1NS4xLDY0LjV6XFxcIi8+PC9zdmc+XFxuXCIiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgZm9jdXNhYmxlPVxcXCJmYWxzZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTA1IDEwNVxcXCI+PHBhdGggZD1cXFwiTTU3LjgsMjEuM2MwLTIuOS0yLjQtNS4yLTUuMi01LjJzLTUuMywyLjMtNS4zLDUuMmMwLDIuNywyLDQuOCw0LjUsNS4yVjY5aDEuNVYyNi41QzU1LjgsMjYuMiw1Ny44LDI0LDU3LjgsMjEuM3pcXFwiLz48L3N2Zz5cXG5cIiIsIkB1c2UgJy4uL2NvcmUvc3R5bGVzJyBhcyBzYmI7XG5cbjpob3N0IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYXNwZWN0LXJhdGlvOiAxIC8gMTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgY29udGFpbjogY29udGVudDtcbn1cblxuLnNiYi1jbG9ja19fZmFjZSxcbi5zYmItY2xvY2tfX2hhbmQtaG91cnMsXG4uc2JiLWNsb2NrX19oYW5kLW1pbnV0ZXMsXG4uc2JiLWNsb2NrX19oYW5kLXNlY29uZHMge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGluc2V0OiAwO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyO1xuICB0cmFuc2Zvcm06IHJvdGF0ZVooMGRlZyk7XG4gIHRyYW5zZm9ybS1zdHlsZTogcHJlc2VydmUtM2Q7XG4gIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbn1cblxuLnNiYi1jbG9ja19faGFuZC1ob3Vycyxcbi5zYmItY2xvY2tfX2hhbmQtbWludXRlcyxcbi5zYmItY2xvY2tfX2ZhY2Uge1xuICBmaWxsOiB2YXIoLS1zYmItY2xvY2stZmFjZS1jb2xvcik7XG59XG5cbi5zYmItY2xvY2tfX2hhbmQtbWludXRlcyB7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSB2YXIoLS1zYmItZGlzYWJsZS1hbmltYXRpb24tZHVyYXRpb24sIDAuMnMpXG4gICAgY3ViaWMtYmV6aWVyKDAuNCwgMi4wOCwgMC41NSwgMC40NCk7XG5cbiAgQHN1cHBvcnRzIG5vdCAoYXNwZWN0LXJhdGlvOiAxIC8gMSkge1xuICAgIHRyYW5zZm9ybS1vcmlnaW46IDUwJSA0OS42MjUlO1xuICB9XG59XG5cbi5zYmItY2xvY2tfX2hhbmQtaG91cnMge1xuICBhbmltYXRpb24tbmFtZTogcm90YXRlO1xuICBhbmltYXRpb24tZHVyYXRpb246IDQzMjAwcztcbiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7XG4gIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjtcbiAgYW5pbWF0aW9uLXBsYXktc3RhdGU6IHZhcigtLXNiYi1jbG9jay1hbmltYXRpb24tcGxheS1zdGF0ZSwgJ3BhdXNlZCcpO1xufVxuXG4uc2JiLWNsb2NrX19oYW5kLWhvdXJzLS1pbml0aWFsLWhvdXIge1xuICBhbmltYXRpb24tbmFtZTogaGFuZC1ob3Vycy1hbmltYXRpb24taW5pdGlhbC1ob3VyO1xuICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXNiYi1jbG9jay1ob3Vycy1hbmltYXRpb24tZHVyYXRpb24sIDBzKTtcbiAgYW5pbWF0aW9uLXBsYXktc3RhdGU6IHZhcigtLXNiYi1jbG9jay1hbmltYXRpb24tcGxheS1zdGF0ZSwgJ3BhdXNlZCcpO1xuICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxO1xufVxuXG4uc2JiLWNsb2NrX19oYW5kLW1pbnV0ZXMtLW5vLXRyYW5zaXRpb24ge1xuICB0cmFuc2l0aW9uOiBub25lO1xufVxuXG4uc2JiLWNsb2NrX19oYW5kLXNlY29uZHMge1xuICBhbmltYXRpb24tbmFtZTogaGFuZC1zZWNvbmRzLWFuaW1hdGlvbjtcbiAgYW5pbWF0aW9uLWR1cmF0aW9uOiA2MHM7XG4gIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjtcbiAgYW5pbWF0aW9uLXBsYXktc3RhdGU6IHZhcigtLXNiYi1jbG9jay1hbmltYXRpb24tcGxheS1zdGF0ZSwgJ3BhdXNlZCcpO1xuICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTtcbiAgZmlsbDogdmFyKC0tc2JiLWNsb2NrLXNlY29uZHMtaGFuZC1jb2xvcik7XG59XG5cbi5zYmItY2xvY2tfX2hhbmQtc2Vjb25kcy0taW5pdGlhbC1taW51dGUge1xuICBhbmltYXRpb24tbmFtZTogaGFuZC1zZWNvbmRzLWFuaW1hdGlvbi1pbml0aWFsLW1pbnV0ZTtcbiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1zYmItY2xvY2stc2Vjb25kcy1hbmltYXRpb24tZHVyYXRpb24sIDBzKTtcbiAgYW5pbWF0aW9uLXBsYXktc3RhdGU6IHZhcigtLXNiYi1jbG9jay1hbmltYXRpb24tcGxheS1zdGF0ZSwgJ3BhdXNlZCcpO1xuICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxO1xufVxuXG46aXMoLnNiYi1jbG9ja19faGFuZC1ob3VycywgLnNiYi1jbG9ja19faGFuZC1taW51dGVzLCAuc2JiLWNsb2NrX19oYW5kLXNlY29uZHMpIHtcbiAgOmhvc3QoOm5vdCg6c3RhdGUoaW5pdGlhbGl6ZWQpKSkgJiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHJvdGF0ZSB7XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlWigzNjBkZWcpO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgaGFuZC1ob3Vycy1hbmltYXRpb24taW5pdGlhbC1ob3VyIHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlWih2YXIoLS1zYmItY2xvY2staG91cnMtYW5pbWF0aW9uLXN0YXJ0LWFuZ2xlLCAwZGVnKSk7XG4gIH1cblxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZVooMzYwZGVnKTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGhhbmQtc2Vjb25kcy1hbmltYXRpb24ge1xuICAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGVaKDBkZWcpO1xuICB9XG5cbiAgOTcuNSUsXG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlWigzNjBkZWcpO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgaGFuZC1zZWNvbmRzLWFuaW1hdGlvbi1pbml0aWFsLW1pbnV0ZSB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZVoodmFyKC0tc2JiLWNsb2NrLXNlY29uZHMtYW5pbWF0aW9uLXN0YXJ0LWFuZ2xlLCAwZGVnKSk7XG4gIH1cblxuICA5Ny41JSxcbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGVaKDM2MGRlZyk7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGh0bWwsXG4gIGlzU2VydmVyLFxuICB1bnNhZmVDU1MsXG4gIHR5cGUgQ1NTUmVzdWx0R3JvdXAsXG4gIHR5cGUgUHJvcGVydHlWYWx1ZXMsXG4gIHR5cGUgVGVtcGxhdGVSZXN1bHQsXG59IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHJlZiB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlZi5qcyc7XG5cbmltcG9ydCB7IFNiYkVsZW1lbnQgfSBmcm9tICcuLi9jb3JlL2Jhc2UtZWxlbWVudHMudHMnO1xuaW1wb3J0IHR5cGUgeyBTYmJUaW1lIH0gZnJvbSAnLi4vY29yZS9pbnRlcmZhY2VzLnRzJztcbmltcG9ydCB7IGJveFNpemluZ1N0eWxlcyB9IGZyb20gJy4uL2NvcmUvc3R5bGVzLnRzJztcblxuaW1wb3J0IGNsb2NrRmFjZVNWRyBmcm9tICcuL2Fzc2V0cy9zYmJfY2xvY2tfZmFjZS5zdmc/cmF3JztcbmltcG9ydCBjbG9ja0hhbmRsZUhvdXJzU1ZHIGZyb20gJy4vYXNzZXRzL3NiYl9jbG9ja19ob3Vycy5zdmc/cmF3JztcbmltcG9ydCBjbG9ja0hhbmRsZU1pbnV0ZXNTVkcgZnJvbSAnLi9hc3NldHMvc2JiX2Nsb2NrX21pbnV0ZXMuc3ZnP3Jhdyc7XG5pbXBvcnQgY2xvY2tIYW5kbGVTZWNvbmRzU1ZHIGZyb20gJy4vYXNzZXRzL3NiYl9jbG9ja19zZWNvbmRzLnN2Zz9yYXcnO1xuaW1wb3J0IHN0eWxlIGZyb20gJy4vY2xvY2suc2Nzcz9pbmxpbmUnO1xuXG4vKiogTnVtYmVyIG9mIGhvdXJzIG9uIHRoZSBjbG9jayBmYWNlLiAqL1xuY29uc3QgVE9UQUxfSE9VUlNfT05fQ0xPQ0tfRkFDRSA9IDEyO1xuXG4vKiogTnVtYmVyIG9mIG1pbnV0ZXMgb24gdGhlIGNsb2NrIGZhY2UuICovXG5jb25zdCBUT1RBTF9NSU5VVEVTX09OX0NMT0NLX0ZBQ0UgPSA2MDtcblxuLyoqIE51bWJlciBvZiBzZWNvbmRzIG9uIHRoZSBjbG9jayBmYWNlLiAqL1xuY29uc3QgVE9UQUxfU0VDT05EU19PTl9DTE9DS19GQUNFID0gNjA7XG5cbi8qKiBUaW1lb3V0IGZvciB0aGUgY2xvY2sgc3RhcnQuICovXG5jb25zdCBJTklUSUFMX1RJTUVPVVRfRFVSQVRJT04gPSA1MDtcblxuLyoqIEFuZ2xlIGluIGEgc2luZ2xlIHJvdGF0aW9uLiAqL1xuY29uc3QgRlVMTF9BTkdMRSA9IDM2MDtcblxuLyoqIEFuZ2xlIGJldHdlZW4gdHdvIGNvbnNlY3V0aXZlIGhvdXJzOiAzNjAvMTIsIG1lYW5zIGEgZnVsbCByb3RhdGlvbiAvIG51bWJlciBvZiBob3VycyBpbiBhIHJvdGF0aW9uLiAqL1xuY29uc3QgSE9VUlNfQU5HTEUgPSAzMDtcblxuLyoqIEFuZ2xlIGJldHdlZW4gdHdvIGNvbnNlY3V0aXZlIG1pbnV0ZXM6IDM2MC82MCwgbWVhbnMgYSBmdWxsIHJvdGF0aW9uIC8gbnVtYmVyIG9mIG1pbnV0ZXMgaW4gb25lIGhvdXIuICovXG5jb25zdCBNSU5VVEVTX0FOR0xFID0gNjtcblxuLyoqIEFuZ2xlIGJldHdlZW4gdHdvIGNvbnNlY3V0aXZlIHNlY29uZHMgZm9yIFNCQiBjbG9jayBjdXN0b20gYmVoYXZpb3IuICovXG5jb25zdCBTQkJfU0VDT05EU19BTkdMRSA9IDM2MCAvIDU4LjU7XG5cbi8qKiBOdW1iZXIgb2Ygc2Vjb25kcyBpbiBhIG1pbnV0ZS4gKi9cbmNvbnN0IFNFQ09ORFNfSU5fQV9NSU5VVEUgPSA2MDtcblxuLyoqIE51bWJlciBvZiBzZWNvbmRzIGluIGFuIGhvdXIuICovXG5jb25zdCBTRUNPTkRTX0lOX0FOX0hPVVIgPSAzNjAwO1xuXG4vKiogQXMgYSBmYWxsYmFjayBtZWFzdXJlLCByZXNldCB0aGUgY2xvY2sgZXZlcnkgaGFsZiBhbiBob3VyICovXG5jb25zdCBSRVNFVF9JTlRFUlZBTCA9IFNFQ09ORFNfSU5fQU5fSE9VUiAvIDI7XG5cbmNvbnN0IEFERF9FVkVOVF9MSVNURU5FUl9PUFRJT05TOiBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyA9IHtcbiAgb25jZTogdHJ1ZSxcbiAgcGFzc2l2ZTogdHJ1ZSxcbn07XG5cbi8qKlxuICogSXQgZGlzcGxheXMgYW4gYW5hbG9nIGNsb2NrIHdpdGggdGhlIGNsYXNzaWMgU0JCIGZhY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBTYmJDbG9ja0VsZW1lbnQgZXh0ZW5kcyBTYmJFbGVtZW50IHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBlbGVtZW50TmFtZTogc3RyaW5nID0gJ3NiYi1jbG9jayc7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IFtib3hTaXppbmdTdHlsZXMsIHVuc2FmZUNTUyhzdHlsZSldO1xuXG4gIC8qKlxuICAgKiBEZWZpbmUgYSBzcGVjaWZpYyB0aW1lIHdoaWNoIHRoZSBjbG9jayBzaG91bGQgc2hvdyBzdGF0aWNhbGx5LlxuICAgKiBAcGFyYW0gdmFsdWUgSEg6TU06c3NcbiAgICovXG4gIEBwcm9wZXJ0eSgpIHB1YmxpYyBhY2Nlc3NvciBub3c6IFNiYlRpbWUgfCBudWxsID0gbnVsbDtcblxuICAvKiogV2hldGhlciB0aGUgY2xvY2sgaXMgdGlja2luZyBvciBub3QgKi9cbiAgcHJpdmF0ZSBfc3RhdGU6ICdydW5uaW5nJyB8ICdwYXVzZWQnID0gJ3BhdXNlZCc7XG5cbiAgLyoqIFJlZmVyZW5jZSB0byB0aGUgaG91ciBoYW5kLiAqL1xuICBwcml2YXRlIF9jbG9ja0hhbmRIb3VycyE6IEhUTUxFbGVtZW50O1xuXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIG1pbnV0ZSBoYW5kLiAqL1xuICBwcml2YXRlIF9jbG9ja0hhbmRNaW51dGVzITogSFRNTEVsZW1lbnQ7XG5cbiAgLyoqIFJlZmVyZW5jZSB0byB0aGUgc2Vjb25kIGhhbmQuICovXG4gIHByaXZhdGUgX2Nsb2NrSGFuZFNlY29uZHMhOiBIVE1MRWxlbWVudDtcblxuICAvKiogSG91cnMgdmFsdWUgZm9yIHRoZSBjdXJyZW50IGRhdGUuICovXG4gIHByaXZhdGUgX2hvdXJzITogbnVtYmVyO1xuXG4gIC8qKiBNaW51dGVzIHZhbHVlIGZvciB0aGUgY3VycmVudCBkYXRlLiAqL1xuICBwcml2YXRlIF9taW51dGVzITogbnVtYmVyO1xuXG4gIC8qKiBTZWNvbmRzIHZhbHVlIGZvciB0aGUgY3VycmVudCBkYXRlLiAqL1xuICBwcml2YXRlIF9zZWNvbmRzITogbnVtYmVyO1xuXG4gIC8qKiBNb3ZlIHRoZSBtaW51dGVzIGhhbmQgZXZlcnkgbWludXRlLiAqL1xuICBwcml2YXRlIF9oYW5kTW92ZW1lbnQ/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD47XG5cbiAgcHJpdmF0ZSBfcmVzZXRJbnRlcnZhbElkPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+O1xuXG4gIC8qKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgaG91cnMgaGFuZC4gKi9cbiAgcHJpdmF0ZSBfbW92ZUhvdXJzSGFuZEZuID0gKCk6IHZvaWQgPT4gdGhpcy5fbW92ZUhvdXJzSGFuZCgpO1xuXG4gIC8qKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgbWludXRlcyBoYW5kLiAqL1xuICBwcml2YXRlIF9tb3ZlTWludXRlc0hhbmRGbiA9ICgpOiB2b2lkID0+IHRoaXMuX21vdmVNaW51dGVzSGFuZCgpO1xuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgdGhpcy5fcmVzZXRJbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4gdGhpcy5fcmVzZXRDbG9jaygpLCBSRVNFVF9JTlRFUlZBTCAqIDEwMDApO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoIWlzU2VydmVyICYmIGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnbm93JykpIHtcbiAgICAgIHRoaXMuX3N0YXJ0T3JDb25maWd1cmVDbG9jaygpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIuZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmICghaXNTZXJ2ZXIpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCB0aGlzLl9oYW5kbGVQYWdlVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpO1xuICAgICAgdGhpcy5fc3RhcnRPckNvbmZpZ3VyZUNsb2NrKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5fcmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICBjbGVhckludGVydmFsKHRoaXMuX3Jlc2V0SW50ZXJ2YWxJZCk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVQYWdlVmlzaWJpbGl0eUNoYW5nZSA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZiAodGhpcy5ub3cpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSAnaGlkZGVuJykge1xuICAgICAgYXdhaXQgdGhpcy5fc3RvcENsb2NrKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuX3N0YXJ0Q2xvY2soKTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBhc3luYyBfc3RhcnRPckNvbmZpZ3VyZUNsb2NrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLm5vdykge1xuICAgICAgYXdhaXQgdGhpcy5fc3RvcENsb2NrKCk7XG4gICAgICB0aGlzLl9yZXNldFNlY29uZHNIYW5kQW5pbWF0aW9uKCk7XG4gICAgICB0aGlzLl9zZXRIYW5kc1N0YXJ0aW5nUG9zaXRpb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5fc3RhcnRDbG9jaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTdGFydHMgdGhlIGNsb2NrIGJ5IGRlZmluaW5nIHRoZSBoYW5kcyBzdGFydGluZyBwb3NpdGlvbiB0aGVuIHN0YXJ0aW5nIHRoZSBhbmltYXRpb25zLiAqL1xuICBwcml2YXRlIGFzeW5jIF9zdGFydENsb2NrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2Nsb2NrSGFuZEhvdXJzPy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2FuaW1hdGlvbmVuZCcsXG4gICAgICB0aGlzLl9tb3ZlSG91cnNIYW5kRm4sXG4gICAgICBBRERfRVZFTlRfTElTVEVORVJfT1BUSU9OUyxcbiAgICApO1xuICAgIHRoaXMuX2Nsb2NrSGFuZFNlY29uZHM/LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAnYW5pbWF0aW9uZW5kJyxcbiAgICAgIHRoaXMuX21vdmVNaW51dGVzSGFuZEZuLFxuICAgICAgQUREX0VWRU5UX0xJU1RFTkVSX09QVElPTlMsXG4gICAgKTtcblxuICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PlxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3NldEhhbmRzU3RhcnRpbmdQb3NpdGlvbigpO1xuXG4gICAgICAgIHRoaXMuc3R5bGU/LnNldFByb3BlcnR5KCctLXNiYi1jbG9jay1hbmltYXRpb24tcGxheS1zdGF0ZScsICdydW5uaW5nJyk7XG4gICAgICAgIHRoaXMuX3N0YXRlID0gJ3J1bm5pbmcnO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9LCBJTklUSUFMX1RJTUVPVVRfRFVSQVRJT04pLFxuICAgICk7XG4gIH1cblxuICAvKiogU3RvcHMgdGhlIGNsb2NrIGJ5IHJlbW92aW5nIGFsbCB0aGUgYW5pbWF0aW9ucy4gKi9cbiAgcHJpdmF0ZSBhc3luYyBfc3RvcENsb2NrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faGFuZE1vdmVtZW50KTtcblxuICAgIHRoaXMuX3JlbW92ZVNlY29uZHNBbmltYXRpb25TdHlsZXMoKTtcbiAgICB0aGlzLl9yZW1vdmVIb3Vyc0FuaW1hdGlvblN0eWxlcygpO1xuXG4gICAgdGhpcy5fY2xvY2tIYW5kSG91cnM/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FuaW1hdGlvbmVuZCcsIHRoaXMuX21vdmVIb3Vyc0hhbmRGbik7XG4gICAgdGhpcy5fY2xvY2tIYW5kU2Vjb25kcz8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYW5pbWF0aW9uZW5kJywgdGhpcy5fbW92ZU1pbnV0ZXNIYW5kRm4pO1xuXG4gICAgdGhpcy5fY2xvY2tIYW5kTWludXRlcz8uY2xhc3NMaXN0LmFkZCgnc2JiLWNsb2NrX19oYW5kLW1pbnV0ZXMtLW5vLXRyYW5zaXRpb24nKTtcblxuICAgIHRoaXMuc3R5bGU/LnNldFByb3BlcnR5KCctLXNiYi1jbG9jay1hbmltYXRpb24tcGxheS1zdGF0ZScsICdwYXVzZWQnKTtcbiAgICB0aGlzLl9zdGF0ZSA9ICdwYXVzZWQnO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzIGEgZmFsbGJhY2sgbWVhc3VyZSB0byBwcmV2ZW50IGRlLXN5bmMsIHJlc2V0IHRoZSBjbG9jayB0byB0aGUgc3lzdGVtIHRpbWUuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIF9yZXNldENsb2NrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9zdGF0ZSAhPT0gJ3J1bm5pbmcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuX3N0b3BDbG9jaygpO1xuICAgIGF3YWl0IHRoaXMuX3N0YXJ0Q2xvY2soKTtcbiAgfVxuXG4gIC8qKiBTZXQgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIGZvciB0aGUgdGhyZWUgaGFuZHMgb24gdGhlIGNsb2NrIGZhY2UuICovXG4gIHByaXZhdGUgX3NldEhhbmRzU3RhcnRpbmdQb3NpdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9hc3NpZ25DdXJyZW50VGltZSgpO1xuICAgIGNvbnN0IHJlbWFpbmluZ1NlY29uZHMgPSBUT1RBTF9TRUNPTkRTX09OX0NMT0NLX0ZBQ0UgLSB0aGlzLl9zZWNvbmRzO1xuICAgIGNvbnN0IHJlbWFpbmluZ01pbnV0ZXMgPSBUT1RBTF9NSU5VVEVTX09OX0NMT0NLX0ZBQ0UgLSB0aGlzLl9taW51dGVzO1xuICAgIGNvbnN0IHJlbWFpbmluZ0hvdXJzID0gVE9UQUxfSE9VUlNfT05fQ0xPQ0tfRkFDRSAtIHRoaXMuX2hvdXJzO1xuXG4gICAgbGV0IGhvdXJzQW5pbWF0aW9uRHVyYXRpb24gPSAwO1xuICAgIGxldCBoYXNSZW1haW5pbmdNaW51dGVzT3JTZWNvbmRzID0gMDtcblxuICAgIGlmIChyZW1haW5pbmdTZWNvbmRzID4gMCkge1xuICAgICAgaG91cnNBbmltYXRpb25EdXJhdGlvbiArPSByZW1haW5pbmdTZWNvbmRzO1xuICAgICAgaGFzUmVtYWluaW5nTWludXRlc09yU2Vjb25kcyA9IDE7XG4gICAgfVxuXG4gICAgaWYgKHJlbWFpbmluZ01pbnV0ZXMgPiAwKSB7XG4gICAgICBob3Vyc0FuaW1hdGlvbkR1cmF0aW9uICs9XG4gICAgICAgIChyZW1haW5pbmdNaW51dGVzIC0gaGFzUmVtYWluaW5nTWludXRlc09yU2Vjb25kcykgKiBTRUNPTkRTX0lOX0FfTUlOVVRFO1xuICAgICAgaGFzUmVtYWluaW5nTWludXRlc09yU2Vjb25kcyA9IDE7XG4gICAgfVxuXG4gICAgaWYgKHJlbWFpbmluZ0hvdXJzID4gMCkge1xuICAgICAgaG91cnNBbmltYXRpb25EdXJhdGlvbiArPVxuICAgICAgICAocmVtYWluaW5nSG91cnMgLSBoYXNSZW1haW5pbmdNaW51dGVzT3JTZWNvbmRzKSAqIFNFQ09ORFNfSU5fQU5fSE9VUjtcbiAgICB9XG5cbiAgICB0aGlzLnN0eWxlPy5zZXRQcm9wZXJ0eShcbiAgICAgICctLXNiYi1jbG9jay1ob3Vycy1hbmltYXRpb24tc3RhcnQtYW5nbGUnLFxuICAgICAgYCR7TWF0aC5jZWlsKHRoaXMuX2hvdXJzICogSE9VUlNfQU5HTEUgKyB0aGlzLl9taW51dGVzIC8gMil9ZGVnYCxcbiAgICApO1xuICAgIHRoaXMuc3R5bGU/LnNldFByb3BlcnR5KCctLXNiYi1jbG9jay1ob3Vycy1hbmltYXRpb24tZHVyYXRpb24nLCBgJHtob3Vyc0FuaW1hdGlvbkR1cmF0aW9ufXNgKTtcbiAgICB0aGlzLnN0eWxlPy5zZXRQcm9wZXJ0eShcbiAgICAgICctLXNiYi1jbG9jay1zZWNvbmRzLWFuaW1hdGlvbi1zdGFydC1hbmdsZScsXG4gICAgICBgJHtNYXRoLmNlaWwodGhpcy5fc2Vjb25kcyAqIFNCQl9TRUNPTkRTX0FOR0xFKX1kZWdgLFxuICAgICk7XG4gICAgdGhpcy5zdHlsZT8uc2V0UHJvcGVydHkoJy0tc2JiLWNsb2NrLXNlY29uZHMtYW5pbWF0aW9uLWR1cmF0aW9uJywgYCR7cmVtYWluaW5nU2Vjb25kc31zYCk7XG5cbiAgICB0aGlzLl9zZXRNaW51dGVzSGFuZCgpO1xuXG4gICAgdGhpcy5fY2xvY2tIYW5kU2Vjb25kcz8uY2xhc3NMaXN0LmFkZCgnc2JiLWNsb2NrX19oYW5kLXNlY29uZHMtLWluaXRpYWwtbWludXRlJyk7XG4gICAgdGhpcy5fY2xvY2tIYW5kSG91cnM/LmNsYXNzTGlzdC5hZGQoJ3NiYi1jbG9ja19faGFuZC1ob3Vycy0taW5pdGlhbC1ob3VyJyk7XG5cbiAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuYWRkKCdpbml0aWFsaXplZCcpO1xuICB9XG5cbiAgLyoqIEdpdmVuIHRoZSBjdXJyZW50IGRhdGUsIGNhbGN1bGF0ZXMgdGhlIGhoL21tL3NzIHZhbHVlcyBhbmQgdGhlIGhoL21tL3NzIGxlZnQgdG8gdGhlIG5leHQgbWlkbmlnaHQuICovXG4gIHByaXZhdGUgX2Fzc2lnbkN1cnJlbnRUaW1lKCk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGUgPSB0aGlzLm5vdyA/IG51bGwgOiBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IFtob3VycywgbWludXRlcywgc2Vjb25kc10gPSBkYXRlXG4gICAgICA/IFtkYXRlLmdldEhvdXJzKCksIGRhdGUuZ2V0TWludXRlcygpLCBkYXRlLmdldFNlY29uZHMoKV1cbiAgICAgIDogdGhpcy5ub3chLnNwbGl0KCc6JykubWFwKChwKSA9PiArcCk7XG5cbiAgICB0aGlzLl9ob3VycyA9IGhvdXJzICUgMTI7XG4gICAgdGhpcy5fbWludXRlcyA9IG1pbnV0ZXM7XG4gICAgdGhpcy5fc2Vjb25kcyA9IHNlY29uZHM7XG4gIH1cblxuICAvKiogU2V0IHRoZSBzdGFydGluZyBwb3NpdGlvbiBmb3IgdGhlIG1pbnV0ZXMgaGFuZC4gKi9cbiAgcHJpdmF0ZSBfc2V0TWludXRlc0hhbmQoKTogdm9pZCB7XG4gICAgdGhpcy5fY2xvY2tIYW5kTWludXRlcz8uc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAndHJhbnNmb3JtJyxcbiAgICAgIGByb3RhdGVaKCR7TWF0aC5jZWlsKHRoaXMuX21pbnV0ZXMgKiBNSU5VVEVTX0FOR0xFKX1kZWcpYCxcbiAgICApO1xuICB9XG5cbiAgLyoqIE1vdmUgdGhlIGhvdXJzIGhhbmQgdG8gdGhlIG5leHQgdmFsdWUuICovXG4gIHByaXZhdGUgX21vdmVIb3Vyc0hhbmQoKTogdm9pZCB7XG4gICAgdGhpcy5fcmVtb3ZlSG91cnNBbmltYXRpb25TdHlsZXMoKTtcblxuICAgIGxldCBob3Vyc0FuZ2xlID0gTWF0aC5jZWlsKHRoaXMuX2hvdXJzICogSE9VUlNfQU5HTEUgKyB0aGlzLl9taW51dGVzIC8gMik7XG5cbiAgICBpZiAoaG91cnNBbmdsZSA+PSBGVUxMX0FOR0xFKSB7XG4gICAgICBob3Vyc0FuZ2xlIC09IEZVTExfQU5HTEU7XG4gICAgfVxuXG4gICAgdGhpcy5fY2xvY2tIYW5kSG91cnM/LnN0eWxlLnNldFByb3BlcnR5KCd0cmFuc2Zvcm0nLCBgcm90YXRlWigke2hvdXJzQW5nbGV9ZGVnKWApO1xuICB9XG5cbiAgLyoqIE1vdmUgdGhlIG1pbnV0ZXMgaGFuZCB0byB0aGUgbmV4dCB2YWx1ZS4gKi9cbiAgcHJpdmF0ZSBfbW92ZU1pbnV0ZXNIYW5kKCk6IHZvaWQge1xuICAgIHRoaXMuX2Nsb2NrSGFuZFNlY29uZHM/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FuaW1hdGlvbmVuZCcsIHRoaXMuX21vdmVNaW51dGVzSGFuZEZuKTtcblxuICAgIHRoaXMuX3JlbW92ZVNlY29uZHNBbmltYXRpb25TdHlsZXMoKTtcblxuICAgIHRoaXMuX2FkZE1pbnV0ZXNBbmRTZXRIYW5kcygpO1xuXG4gICAgdGhpcy5faGFuZE1vdmVtZW50ID0gc2V0SW50ZXJ2YWwoXG4gICAgICAoKSA9PiB0aGlzLl9hZGRNaW51dGVzQW5kU2V0SGFuZHMoKSxcbiAgICAgIFRPVEFMX1NFQ09ORFNfT05fQ0xPQ0tfRkFDRSAqIDEwMDAsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2FkZE1pbnV0ZXNBbmRTZXRIYW5kcygpOiB2b2lkIHtcbiAgICB0aGlzLl9taW51dGVzKys7XG4gICAgdGhpcy5fc2V0TWludXRlc0hhbmQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmluZyBhbmltYXRpb24gYnkgb3ZlcnJpZGluZyB3aXRoIGVtcHR5IHN0cmluZyxcbiAgICogdGhlbiB0cmlnZ2VyaW5nIGEgcmVmbG93IGFuZCByZSBhZGQgb3JpZ2luYWwgYW5pbWF0aW9uIGJ5IHJlbW92aW5nIG92ZXJyaWRlLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfcmVzZXRTZWNvbmRzSGFuZEFuaW1hdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2Nsb2NrSGFuZFNlY29uZHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fY2xvY2tIYW5kU2Vjb25kcy5zdHlsZS5hbmltYXRpb24gPSAnJztcbiAgICAvLyBIYWNrIHRvIHRyaWdnZXIgcmVmbG93XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtZXhwcmVzc2lvbnNcbiAgICB0aGlzLl9jbG9ja0hhbmRTZWNvbmRzLm9mZnNldEhlaWdodDtcbiAgICB0aGlzLl9jbG9ja0hhbmRTZWNvbmRzLnN0eWxlLnJlbW92ZVByb3BlcnR5KCdhbmltYXRpb24nKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbW92ZUV2ZW50TGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIGRvY3VtZW50Py5yZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgdGhpcy5faGFuZGxlUGFnZVZpc2liaWxpdHlDaGFuZ2UpO1xuICAgIHRoaXMuX2Nsb2NrSGFuZEhvdXJzPy5yZW1vdmVFdmVudExpc3RlbmVyKCdhbmltYXRpb25lbmQnLCB0aGlzLl9tb3ZlSG91cnNIYW5kRm4pO1xuICAgIHRoaXMuX2Nsb2NrSGFuZFNlY29uZHM/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FuaW1hdGlvbmVuZCcsIHRoaXMuX21vdmVNaW51dGVzSGFuZEZuKTtcbiAgICBjbGVhckludGVydmFsKHRoaXMuX2hhbmRNb3ZlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIF9yZW1vdmVIb3Vyc0FuaW1hdGlvblN0eWxlcygpOiB2b2lkIHtcbiAgICB0aGlzLl9jbG9ja0hhbmRIb3Vycz8uY2xhc3NMaXN0LnJlbW92ZSgnc2JiLWNsb2NrX19oYW5kLWhvdXJzLS1pbml0aWFsLWhvdXInKTtcbiAgICB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KCctLXNiYi1jbG9jay1ob3Vycy1hbmltYXRpb24tc3RhcnQtYW5nbGUnKTtcbiAgICB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KCctLXNiYi1jbG9jay1ob3Vycy1hbmltYXRpb24tZHVyYXRpb24nKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbW92ZVNlY29uZHNBbmltYXRpb25TdHlsZXMoKTogdm9pZCB7XG4gICAgdGhpcy5fY2xvY2tIYW5kU2Vjb25kcz8uY2xhc3NMaXN0LnJlbW92ZSgnc2JiLWNsb2NrX19oYW5kLXNlY29uZHMtLWluaXRpYWwtbWludXRlJyk7XG4gICAgdGhpcy5fY2xvY2tIYW5kTWludXRlcz8uY2xhc3NMaXN0LnJlbW92ZSgnc2JiLWNsb2NrX19oYW5kLW1pbnV0ZXMtLW5vLXRyYW5zaXRpb24nKTtcbiAgICB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KCctLXNiYi1jbG9jay1zZWNvbmRzLWFuaW1hdGlvbi1zdGFydC1hbmdsZScpO1xuICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoJy0tc2JiLWNsb2NrLXNlY29uZHMtYW5pbWF0aW9uLWR1cmF0aW9uJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxzcGFuIGNsYXNzPVwic2JiLWNsb2NrX19mYWNlXCIgLmlubmVySFRNTD0ke2Nsb2NrRmFjZVNWR30+PC9zcGFuPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJzYmItY2xvY2tfX2hhbmQtaG91cnNcIlxuICAgICAgICAuaW5uZXJIVE1MPSR7Y2xvY2tIYW5kbGVIb3Vyc1NWR31cbiAgICAgICAgJHtyZWYoKGU/OiBFbGVtZW50KTogdm9pZCA9PiB7XG4gICAgICAgICAgdGhpcy5fY2xvY2tIYW5kSG91cnMgPSBlIGFzIEhUTUxTcGFuRWxlbWVudDtcbiAgICAgICAgfSl9XG4gICAgICA+PC9zcGFuPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJzYmItY2xvY2tfX2hhbmQtbWludXRlcyBzYmItY2xvY2tfX2hhbmQtbWludXRlcy0tbm8tdHJhbnNpdGlvblwiXG4gICAgICAgIC5pbm5lckhUTUw9JHtjbG9ja0hhbmRsZU1pbnV0ZXNTVkd9XG4gICAgICAgICR7cmVmKChlbD86IEVsZW1lbnQpOiB2b2lkID0+IHtcbiAgICAgICAgICB0aGlzLl9jbG9ja0hhbmRNaW51dGVzID0gZWwgYXMgSFRNTFNwYW5FbGVtZW50O1xuICAgICAgICB9KX1cbiAgICAgID48L3NwYW4+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cInNiYi1jbG9ja19faGFuZC1zZWNvbmRzXCJcbiAgICAgICAgLmlubmVySFRNTD0ke2Nsb2NrSGFuZGxlU2Vjb25kc1NWR31cbiAgICAgICAgJHtyZWYoKGVsPzogRWxlbWVudCk6IHZvaWQgPT4ge1xuICAgICAgICAgIHRoaXMuX2Nsb2NrSGFuZFNlY29uZHMgPSBlbCBhcyBIVE1MU3BhbkVsZW1lbnQ7XG4gICAgICAgIH0pfVxuICAgICAgPjwvc3Bhbj5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItY2xvY2snOiBTYmJDbG9ja0VsZW1lbnQ7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUEseUJBQWU7OztBQ0FmLElBQUEsMEJBQWU7OztBQ0FmLElBQUEsNEJBQWU7OztBQ0FmLElBQUEsNEJBQWU7Ozs7Ozs7QUVzQmYsSUFBTSw0QkFBNEI7O0FBR2xDLElBQU0sOEJBQThCOztBQUdwQyxJQUFNLDhCQUE4Qjs7QUFHcEMsSUFBTSwyQkFBMkI7O0FBR2pDLElBQU0sYUFBYTs7QUFHbkIsSUFBTSxjQUFjOztBQUdwQixJQUFNLGdCQUFnQjs7QUFHdEIsSUFBTSxvQkFBb0IsTUFBTTs7QUFHaEMsSUFBTSxzQkFBc0I7O0FBRzVCLElBQU0scUJBQXFCOztBQUczQixJQUFNLGlCQUFpQixxQkFBcUI7QUFFNUMsSUFBTSw2QkFBc0Q7Q0FDMUQsTUFBTTtDQUNOLFNBQVM7Q0FDVjs7OztJQUtZLHlCQUFlO21CQUFTOzs7O2NBQXhCLHdCQUF3QixZQUFVOzs7QUFRakIsU0FBQSx1QkFBQSxrQkFBQSxNQUFBLG1CQUFzQixLQUFJOztBQUc5QyxRQUFBLFVBQU0sa0JBQUEsTUFBQSx1QkFBQSxFQUF5Qjs7QUEwQi9CLFFBQUEseUJBQStCLEtBQUssZ0JBQWdCOztBQUdwRCxRQUFBLDJCQUFpQyxLQUFLLGtCQUFrQjtBQStCeEQsUUFBQSw4QkFBOEIsWUFBMEI7QUFDOUQsUUFBSSxLQUFLLElBQ1A7QUFHRixRQUFJLFNBQVMsb0JBQW9CLFNBQy9CLE9BQU0sS0FBSyxZQUFZO1FBRXZCLE9BQU0sS0FBSyxhQUFhOzs7OztzQkF2RTNCLFVBQVUsQ0FBQTtBQUFDLGdCQUFBLE1BQUEsTUFBQSxpQkFBQTtJQUFBLE1BQUE7SUFBQSxNQUFBO0lBQUEsUUFBQTtJQUFBLFNBQUE7SUFBQSxRQUFBO0tBQUEsTUFBQSxRQUFBLFNBQUE7S0FBQSxNQUFBLFFBQUEsSUFBZ0I7S0FBRyxNQUFBLEtBQUEsVUFBQTtBQUFBLFVBQUgsTUFBRzs7S0FBQTtJQUFBLFVBQUE7SUFBQSxFQUFBLG1CQUFBLHVCQUFBOzs7Ozs7Ozs7QUFQQyxRQUFBLGNBQXNCOzs7QUFDL0IsUUFBQSxTQUF5QixDQUFDLGlCQUFpQixVQUFVLGNBQU0sQ0FBQzs7RUFNdkU7Ozs7O0VBQUEsSUFBZ0IsTUFBRztBQUFBLFVBQUEsTUFBQTs7RUFBbkIsSUFBZ0IsSUFBRyxPQUFBO0FBQUEsU0FBQSx1QkFBQTs7RUFrQ2Ysb0JBQWlCO0FBQy9CLFNBQU0sbUJBQW1CO0FBRXpCLFFBQUssbUJBQW1CLGtCQUFrQixLQUFLLGFBQWEsRUFBRSxpQkFBaUIsSUFBSzs7RUFHbkUsV0FBVyxtQkFBdUM7QUFDbkUsU0FBTSxXQUFXLGtCQUFrQjtBQUVuQyxPQUFJLENBQUMsWUFBWSxrQkFBa0IsSUFBSSxNQUFNLENBQzNDLE1BQUssd0JBQXdCOztFQUlkLGFBQWEsbUJBQXVDO0FBQ3JFLFNBQU0sYUFBYSxrQkFBa0I7QUFFckMsT0FBSSxDQUFDLFVBQVU7QUFDYixhQUFTLGlCQUFpQixvQkFBb0IsS0FBSyw2QkFBNkIsTUFBTTtBQUN0RixTQUFLLHdCQUF3Qjs7O0VBSWpCLHVCQUFvQjtBQUNsQyxTQUFNLHNCQUFzQjtBQUM1QixRQUFLLHVCQUF1QjtBQUM1QixpQkFBYyxLQUFLLGlCQUFpQjs7RUFlOUIsTUFBTSx5QkFBc0I7QUFDbEMsT0FBSSxLQUFLLEtBQUs7QUFDWixVQUFNLEtBQUssWUFBWTtBQUN2QixTQUFLLDRCQUE0QjtBQUNqQyxTQUFLLDJCQUEyQjtTQUVoQyxPQUFNLEtBQUssYUFBYTs7O0VBS3BCLE1BQU0sY0FBVztBQUN2QixRQUFLLGlCQUFpQixpQkFDcEIsZ0JBQ0EsS0FBSyxrQkFDTCwyQkFDRDtBQUNELFFBQUssbUJBQW1CLGlCQUN0QixnQkFDQSxLQUFLLG9CQUNMLDJCQUNEO0FBRUQsU0FBTSxJQUFJLFNBQWUsWUFDdkIsaUJBQWdCO0FBQ2QsU0FBSywyQkFBMkI7QUFFaEMsU0FBSyxPQUFPLFlBQVksb0NBQW9DLFVBQVU7QUFDdEUsU0FBSyxTQUFTO0FBQ2QsYUFBUztNQUNSLHlCQUF5QixDQUM3Qjs7O0VBSUssTUFBTSxhQUFVO0FBQ3RCLGlCQUFjLEtBQUssY0FBYztBQUVqQyxRQUFLLCtCQUErQjtBQUNwQyxRQUFLLDZCQUE2QjtBQUVsQyxRQUFLLGlCQUFpQixvQkFBb0IsZ0JBQWdCLEtBQUssaUJBQWlCO0FBQ2hGLFFBQUssbUJBQW1CLG9CQUFvQixnQkFBZ0IsS0FBSyxtQkFBbUI7QUFFcEYsUUFBSyxtQkFBbUIsVUFBVSxJQUFJLHlDQUF5QztBQUUvRSxRQUFLLE9BQU8sWUFBWSxvQ0FBb0MsU0FBUztBQUNyRSxRQUFLLFNBQVM7Ozs7O0VBTVIsTUFBTSxjQUFXO0FBQ3ZCLE9BQUksS0FBSyxXQUFXLFVBQ2xCO0FBRUYsU0FBTSxLQUFLLFlBQVk7QUFDdkIsU0FBTSxLQUFLLGFBQWE7OztFQUlsQiw0QkFBeUI7QUFDL0IsUUFBSyxvQkFBb0I7R0FDekIsTUFBTSxtQkFBbUIsOEJBQThCLEtBQUs7R0FDNUQsTUFBTSxtQkFBbUIsOEJBQThCLEtBQUs7R0FDNUQsTUFBTSxpQkFBaUIsNEJBQTRCLEtBQUs7R0FFeEQsSUFBSSx5QkFBeUI7R0FDN0IsSUFBSSwrQkFBK0I7QUFFbkMsT0FBSSxtQkFBbUIsR0FBRztBQUN4Qiw4QkFBMEI7QUFDMUIsbUNBQStCOztBQUdqQyxPQUFJLG1CQUFtQixHQUFHO0FBQ3hCLCtCQUNHLG1CQUFtQixnQ0FBZ0M7QUFDdEQsbUNBQStCOztBQUdqQyxPQUFJLGlCQUFpQixFQUNuQiw0QkFDRyxpQkFBaUIsZ0NBQWdDO0FBR3RELFFBQUssT0FBTyxZQUNWLDJDQUNBLEdBQUcsS0FBSyxLQUFLLEtBQUssU0FBUyxjQUFjLEtBQUssV0FBVyxFQUFFLENBQUEsS0FDNUQ7QUFDRCxRQUFLLE9BQU8sWUFBWSx3Q0FBd0MsR0FBRyx1QkFBc0IsR0FBSTtBQUM3RixRQUFLLE9BQU8sWUFDViw2Q0FDQSxHQUFHLEtBQUssS0FBSyxLQUFLLFdBQVcsa0JBQWtCLENBQUEsS0FDaEQ7QUFDRCxRQUFLLE9BQU8sWUFBWSwwQ0FBMEMsR0FBRyxpQkFBZ0IsR0FBSTtBQUV6RixRQUFLLGlCQUFpQjtBQUV0QixRQUFLLG1CQUFtQixVQUFVLElBQUksMENBQTBDO0FBQ2hGLFFBQUssaUJBQWlCLFVBQVUsSUFBSSxzQ0FBc0M7QUFFMUUsUUFBSyxVQUFVLE9BQU8sSUFBSSxjQUFjOzs7RUFJbEMscUJBQWtCO0dBQ3hCLE1BQU0sT0FBTyxLQUFLLE1BQU0sdUJBQU8sSUFBSSxNQUFNO0dBQ3pDLE1BQU0sQ0FBQyxPQUFPLFNBQVMsV0FBVyxPQUM5QjtJQUFDLEtBQUssVUFBVTtJQUFFLEtBQUssWUFBWTtJQUFFLEtBQUssWUFBQTtJQUFhLEdBQ3ZELEtBQUssSUFBSyxNQUFNLElBQUksQ0FBQyxLQUFLLE1BQU0sQ0FBQyxFQUFFO0FBRXZDLFFBQUssU0FBUyxRQUFRO0FBQ3RCLFFBQUssV0FBVztBQUNoQixRQUFLLFdBQVc7OztFQUlWLGtCQUFlO0FBQ3JCLFFBQUssbUJBQW1CLE1BQU0sWUFDNUIsYUFDQSxXQUFXLEtBQUssS0FBSyxLQUFLLFdBQVcsY0FBYyxDQUFBLE1BQ3BEOzs7RUFJSyxpQkFBYztBQUNwQixRQUFLLDZCQUE2QjtHQUVsQyxJQUFJLGFBQWEsS0FBSyxLQUFLLEtBQUssU0FBUyxjQUFjLEtBQUssV0FBVyxFQUFFO0FBRXpFLE9BQUksY0FBYyxXQUNoQixlQUFjO0FBR2hCLFFBQUssaUJBQWlCLE1BQU0sWUFBWSxhQUFhLFdBQVcsV0FBVSxNQUFPOzs7RUFJM0UsbUJBQWdCO0FBQ3RCLFFBQUssbUJBQW1CLG9CQUFvQixnQkFBZ0IsS0FBSyxtQkFBbUI7QUFFcEYsUUFBSywrQkFBK0I7QUFFcEMsUUFBSyx3QkFBd0I7QUFFN0IsUUFBSyxnQkFBZ0Isa0JBQ2IsS0FBSyx3QkFBd0IsRUFDbkMsOEJBQThCLElBQy9COztFQUdLLHlCQUFzQjtBQUM1QixRQUFLO0FBQ0wsUUFBSyxpQkFBaUI7Ozs7Ozs7RUFRaEIsNkJBQTBCO0FBQ2hDLE9BQUksQ0FBQyxLQUFLLGtCQUNSO0FBRUYsUUFBSyxrQkFBa0IsTUFBTSxZQUFZO0FBR3pDLFFBQUssa0JBQWtCO0FBQ3ZCLFFBQUssa0JBQWtCLE1BQU0sZUFBZSxZQUFZOztFQUdsRCx3QkFBcUI7QUFDM0IsYUFBVSxvQkFBb0Isb0JBQW9CLEtBQUssNEJBQTRCO0FBQ25GLFFBQUssaUJBQWlCLG9CQUFvQixnQkFBZ0IsS0FBSyxpQkFBaUI7QUFDaEYsUUFBSyxtQkFBbUIsb0JBQW9CLGdCQUFnQixLQUFLLG1CQUFtQjtBQUNwRixpQkFBYyxLQUFLLGNBQWM7O0VBRzNCLDhCQUEyQjtBQUNqQyxRQUFLLGlCQUFpQixVQUFVLE9BQU8sc0NBQXNDO0FBQzdFLFFBQUssTUFBTSxlQUFlLDBDQUEwQztBQUNwRSxRQUFLLE1BQU0sZUFBZSx1Q0FBdUM7O0VBRzNELGdDQUE2QjtBQUNuQyxRQUFLLG1CQUFtQixVQUFVLE9BQU8sMENBQTBDO0FBQ25GLFFBQUssbUJBQW1CLFVBQVUsT0FBTyx5Q0FBeUM7QUFDbEYsUUFBSyxNQUFNLGVBQWUsNENBQTRDO0FBQ3RFLFFBQUssTUFBTSxlQUFlLHlDQUF5Qzs7RUFHbEQsU0FBTTtBQUN2QixVQUFPLElBQUk7aURBQ2tDLHVCQUFZOzs7cUJBR3hDLHdCQUFBO1VBQ1gsS0FBSyxNQUFxQjtBQUMxQixTQUFLLGtCQUFrQjtLQUN2QixDQUFBOzs7O3FCQUlXLDBCQUFBO1VBQ1gsS0FBSyxPQUFzQjtBQUMzQixTQUFLLG9CQUFvQjtLQUN6QixDQUFBOzs7O3FCQUlXLDBCQUFBO1VBQ1gsS0FBSyxPQUFzQjtBQUMzQixTQUFLLG9CQUFvQjtLQUN6QixDQUFBIn0=
|
|
290
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvY2suY29tcG9uZW50LUNWUHY0bUNwLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9jbG9jay9jbG9jay5zY3NzP2lubGluZSIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9jbG9jay9jbG9jay5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiQHVzZSAnLi4vY29yZS9zdHlsZXMnIGFzIHNiYjtcblxuOmhvc3Qge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBhc3BlY3QtcmF0aW86IDEgLyAxO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBjb250YWluOiBjb250ZW50O1xufVxuXG4uc2JiLWNsb2NrX19mYWNlLFxuLnNiYi1jbG9ja19faGFuZC1ob3Vycyxcbi5zYmItY2xvY2tfX2hhbmQtbWludXRlcyxcbi5zYmItY2xvY2tfX2hhbmQtc2Vjb25kcyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgaW5zZXQ6IDA7XG4gIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7XG4gIHRyYW5zZm9ybTogcm90YXRlWigwZGVnKTtcbiAgdHJhbnNmb3JtLXN0eWxlOiBwcmVzZXJ2ZS0zZDtcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuXG4uc2JiLWNsb2NrX19oYW5kLWhvdXJzLFxuLnNiYi1jbG9ja19faGFuZC1taW51dGVzLFxuLnNiYi1jbG9ja19fZmFjZSB7XG4gIGZpbGw6IHZhcigtLXNiYi1jbG9jay1mYWNlLWNvbG9yKTtcbn1cblxuLnNiYi1jbG9ja19faGFuZC1taW51dGVzIHtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIHZhcigtLXNiYi1kaXNhYmxlLWFuaW1hdGlvbi1kdXJhdGlvbiwgMC4ycylcbiAgICBjdWJpYy1iZXppZXIoMC40LCAyLjA4LCAwLjU1LCAwLjQ0KTtcblxuICBAc3VwcG9ydHMgbm90IChhc3BlY3QtcmF0aW86IDEgLyAxKSB7XG4gICAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDQ5LjYyNSU7XG4gIH1cbn1cblxuLnNiYi1jbG9ja19faGFuZC1ob3VycyB7XG4gIGFuaW1hdGlvbi1uYW1lOiByb3RhdGU7XG4gIGFuaW1hdGlvbi1kdXJhdGlvbjogNDMyMDBzO1xuICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTtcbiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xuICBhbmltYXRpb24tcGxheS1zdGF0ZTogdmFyKC0tc2JiLWNsb2NrLWFuaW1hdGlvbi1wbGF5LXN0YXRlLCAncGF1c2VkJyk7XG59XG5cbi5zYmItY2xvY2tfX2hhbmQtaG91cnMtLWluaXRpYWwtaG91ciB7XG4gIGFuaW1hdGlvbi1uYW1lOiBoYW5kLWhvdXJzLWFuaW1hdGlvbi1pbml0aWFsLWhvdXI7XG4gIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tc2JiLWNsb2NrLWhvdXJzLWFuaW1hdGlvbi1kdXJhdGlvbiwgMHMpO1xuICBhbmltYXRpb24tcGxheS1zdGF0ZTogdmFyKC0tc2JiLWNsb2NrLWFuaW1hdGlvbi1wbGF5LXN0YXRlLCAncGF1c2VkJyk7XG4gIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7XG59XG5cbi5zYmItY2xvY2tfX2hhbmQtbWludXRlcy0tbm8tdHJhbnNpdGlvbiB7XG4gIHRyYW5zaXRpb246IG5vbmU7XG59XG5cbi5zYmItY2xvY2tfX2hhbmQtc2Vjb25kcyB7XG4gIGFuaW1hdGlvbi1uYW1lOiBoYW5kLXNlY29uZHMtYW5pbWF0aW9uO1xuICBhbmltYXRpb24tZHVyYXRpb246IDYwcztcbiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xuICBhbmltYXRpb24tcGxheS1zdGF0ZTogdmFyKC0tc2JiLWNsb2NrLWFuaW1hdGlvbi1wbGF5LXN0YXRlLCAncGF1c2VkJyk7XG4gIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlO1xuICBmaWxsOiB2YXIoLS1zYmItY2xvY2stc2Vjb25kcy1oYW5kLWNvbG9yKTtcbn1cblxuLnNiYi1jbG9ja19faGFuZC1zZWNvbmRzLS1pbml0aWFsLW1pbnV0ZSB7XG4gIGFuaW1hdGlvbi1uYW1lOiBoYW5kLXNlY29uZHMtYW5pbWF0aW9uLWluaXRpYWwtbWludXRlO1xuICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXNiYi1jbG9jay1zZWNvbmRzLWFuaW1hdGlvbi1kdXJhdGlvbiwgMHMpO1xuICBhbmltYXRpb24tcGxheS1zdGF0ZTogdmFyKC0tc2JiLWNsb2NrLWFuaW1hdGlvbi1wbGF5LXN0YXRlLCAncGF1c2VkJyk7XG4gIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7XG59XG5cbjppcyguc2JiLWNsb2NrX19oYW5kLWhvdXJzLCAuc2JiLWNsb2NrX19oYW5kLW1pbnV0ZXMsIC5zYmItY2xvY2tfX2hhbmQtc2Vjb25kcykge1xuICA6aG9zdCg6bm90KDpzdGF0ZShpbml0aWFsaXplZCkpKSAmIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgcm90YXRlIHtcbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGVaKDM2MGRlZyk7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBoYW5kLWhvdXJzLWFuaW1hdGlvbi1pbml0aWFsLWhvdXIge1xuICAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGVaKHZhcigtLXNiYi1jbG9jay1ob3Vycy1hbmltYXRpb24tc3RhcnQtYW5nbGUsIDBkZWcpKTtcbiAgfVxuXG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlWigzNjBkZWcpO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgaGFuZC1zZWNvbmRzLWFuaW1hdGlvbiB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZVooMGRlZyk7XG4gIH1cblxuICA5Ny41JSxcbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGVaKDM2MGRlZyk7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBoYW5kLXNlY29uZHMtYW5pbWF0aW9uLWluaXRpYWwtbWludXRlIHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlWih2YXIoLS1zYmItY2xvY2stc2Vjb25kcy1hbmltYXRpb24tc3RhcnQtYW5nbGUsIDBkZWcpKTtcbiAgfVxuXG4gIDk3LjUlLFxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZVooMzYwZGVnKTtcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgaHRtbCxcbiAgaXNTZXJ2ZXIsXG4gIHVuc2FmZUNTUyxcbiAgdHlwZSBDU1NSZXN1bHRHcm91cCxcbiAgdHlwZSBQcm9wZXJ0eVZhbHVlcyxcbiAgdHlwZSBUZW1wbGF0ZVJlc3VsdCxcbn0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgcmVmIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVmLmpzJztcblxuaW1wb3J0IHsgU2JiRWxlbWVudCB9IGZyb20gJy4uL2NvcmUvYmFzZS1lbGVtZW50cy50cyc7XG5pbXBvcnQgdHlwZSB7IFNiYlRpbWUgfSBmcm9tICcuLi9jb3JlL2ludGVyZmFjZXMudHMnO1xuaW1wb3J0IHsgYm94U2l6aW5nU3R5bGVzIH0gZnJvbSAnLi4vY29yZS9zdHlsZXMudHMnO1xuXG5pbXBvcnQgY2xvY2tGYWNlU1ZHIGZyb20gJy4vYXNzZXRzL3NiYl9jbG9ja19mYWNlLnN2Zz9yYXcnO1xuaW1wb3J0IGNsb2NrSGFuZGxlSG91cnNTVkcgZnJvbSAnLi9hc3NldHMvc2JiX2Nsb2NrX2hvdXJzLnN2Zz9yYXcnO1xuaW1wb3J0IGNsb2NrSGFuZGxlTWludXRlc1NWRyBmcm9tICcuL2Fzc2V0cy9zYmJfY2xvY2tfbWludXRlcy5zdmc/cmF3JztcbmltcG9ydCBjbG9ja0hhbmRsZVNlY29uZHNTVkcgZnJvbSAnLi9hc3NldHMvc2JiX2Nsb2NrX3NlY29uZHMuc3ZnP3Jhdyc7XG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9jbG9jay5zY3NzP2lubGluZSc7XG5cbi8qKiBOdW1iZXIgb2YgaG91cnMgb24gdGhlIGNsb2NrIGZhY2UuICovXG5jb25zdCBUT1RBTF9IT1VSU19PTl9DTE9DS19GQUNFID0gMTI7XG5cbi8qKiBOdW1iZXIgb2YgbWludXRlcyBvbiB0aGUgY2xvY2sgZmFjZS4gKi9cbmNvbnN0IFRPVEFMX01JTlVURVNfT05fQ0xPQ0tfRkFDRSA9IDYwO1xuXG4vKiogTnVtYmVyIG9mIHNlY29uZHMgb24gdGhlIGNsb2NrIGZhY2UuICovXG5jb25zdCBUT1RBTF9TRUNPTkRTX09OX0NMT0NLX0ZBQ0UgPSA2MDtcblxuLyoqIFRpbWVvdXQgZm9yIHRoZSBjbG9jayBzdGFydC4gKi9cbmNvbnN0IElOSVRJQUxfVElNRU9VVF9EVVJBVElPTiA9IDUwO1xuXG4vKiogQW5nbGUgaW4gYSBzaW5nbGUgcm90YXRpb24uICovXG5jb25zdCBGVUxMX0FOR0xFID0gMzYwO1xuXG4vKiogQW5nbGUgYmV0d2VlbiB0d28gY29uc2VjdXRpdmUgaG91cnM6IDM2MC8xMiwgbWVhbnMgYSBmdWxsIHJvdGF0aW9uIC8gbnVtYmVyIG9mIGhvdXJzIGluIGEgcm90YXRpb24uICovXG5jb25zdCBIT1VSU19BTkdMRSA9IDMwO1xuXG4vKiogQW5nbGUgYmV0d2VlbiB0d28gY29uc2VjdXRpdmUgbWludXRlczogMzYwLzYwLCBtZWFucyBhIGZ1bGwgcm90YXRpb24gLyBudW1iZXIgb2YgbWludXRlcyBpbiBvbmUgaG91ci4gKi9cbmNvbnN0IE1JTlVURVNfQU5HTEUgPSA2O1xuXG4vKiogQW5nbGUgYmV0d2VlbiB0d28gY29uc2VjdXRpdmUgc2Vjb25kcyBmb3IgU0JCIGNsb2NrIGN1c3RvbSBiZWhhdmlvci4gKi9cbmNvbnN0IFNCQl9TRUNPTkRTX0FOR0xFID0gMzYwIC8gNTguNTtcblxuLyoqIE51bWJlciBvZiBzZWNvbmRzIGluIGEgbWludXRlLiAqL1xuY29uc3QgU0VDT05EU19JTl9BX01JTlVURSA9IDYwO1xuXG4vKiogTnVtYmVyIG9mIHNlY29uZHMgaW4gYW4gaG91ci4gKi9cbmNvbnN0IFNFQ09ORFNfSU5fQU5fSE9VUiA9IDM2MDA7XG5cbi8qKiBBcyBhIGZhbGxiYWNrIG1lYXN1cmUsIHJlc2V0IHRoZSBjbG9jayBldmVyeSBoYWxmIGFuIGhvdXIgKi9cbmNvbnN0IFJFU0VUX0lOVEVSVkFMID0gU0VDT05EU19JTl9BTl9IT1VSIC8gMjtcblxuY29uc3QgQUREX0VWRU5UX0xJU1RFTkVSX09QVElPTlM6IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zID0ge1xuICBvbmNlOiB0cnVlLFxuICBwYXNzaXZlOiB0cnVlLFxufTtcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBhbiBhbmFsb2cgY2xvY2sgd2l0aCB0aGUgY2xhc3NpYyBTQkIgZmFjZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNiYkNsb2NrRWxlbWVudCBleHRlbmRzIFNiYkVsZW1lbnQge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IGVsZW1lbnROYW1lOiBzdHJpbmcgPSAnc2JiLWNsb2NrJztcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gW2JveFNpemluZ1N0eWxlcywgdW5zYWZlQ1NTKHN0eWxlKV07XG5cbiAgLyoqXG4gICAqIERlZmluZSBhIHNwZWNpZmljIHRpbWUgd2hpY2ggdGhlIGNsb2NrIHNob3VsZCBzaG93IHN0YXRpY2FsbHkuXG4gICAqIEBwYXJhbSB2YWx1ZSBISDpNTTpzc1xuICAgKi9cbiAgQHByb3BlcnR5KCkgcHVibGljIGFjY2Vzc29yIG5vdzogU2JiVGltZSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBjbG9jayBpcyB0aWNraW5nIG9yIG5vdCAqL1xuICBwcml2YXRlIF9zdGF0ZTogJ3J1bm5pbmcnIHwgJ3BhdXNlZCcgPSAncGF1c2VkJztcblxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBob3VyIGhhbmQuICovXG4gIHByaXZhdGUgX2Nsb2NrSGFuZEhvdXJzITogSFRNTEVsZW1lbnQ7XG5cbiAgLyoqIFJlZmVyZW5jZSB0byB0aGUgbWludXRlIGhhbmQuICovXG4gIHByaXZhdGUgX2Nsb2NrSGFuZE1pbnV0ZXMhOiBIVE1MRWxlbWVudDtcblxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBzZWNvbmQgaGFuZC4gKi9cbiAgcHJpdmF0ZSBfY2xvY2tIYW5kU2Vjb25kcyE6IEhUTUxFbGVtZW50O1xuXG4gIC8qKiBIb3VycyB2YWx1ZSBmb3IgdGhlIGN1cnJlbnQgZGF0ZS4gKi9cbiAgcHJpdmF0ZSBfaG91cnMhOiBudW1iZXI7XG5cbiAgLyoqIE1pbnV0ZXMgdmFsdWUgZm9yIHRoZSBjdXJyZW50IGRhdGUuICovXG4gIHByaXZhdGUgX21pbnV0ZXMhOiBudW1iZXI7XG5cbiAgLyoqIFNlY29uZHMgdmFsdWUgZm9yIHRoZSBjdXJyZW50IGRhdGUuICovXG4gIHByaXZhdGUgX3NlY29uZHMhOiBudW1iZXI7XG5cbiAgLyoqIE1vdmUgdGhlIG1pbnV0ZXMgaGFuZCBldmVyeSBtaW51dGUuICovXG4gIHByaXZhdGUgX2hhbmRNb3ZlbWVudD86IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPjtcblxuICBwcml2YXRlIF9yZXNldEludGVydmFsSWQ/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD47XG5cbiAgLyoqIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBob3VycyBoYW5kLiAqL1xuICBwcml2YXRlIF9tb3ZlSG91cnNIYW5kRm4gPSAoKTogdm9pZCA9PiB0aGlzLl9tb3ZlSG91cnNIYW5kKCk7XG5cbiAgLyoqIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBtaW51dGVzIGhhbmQuICovXG4gIHByaXZhdGUgX21vdmVNaW51dGVzSGFuZEZuID0gKCk6IHZvaWQgPT4gdGhpcy5fbW92ZU1pbnV0ZXNIYW5kKCk7XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICB0aGlzLl9yZXNldEludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLl9yZXNldENsb2NrKCksIFJFU0VUX0lOVEVSVkFMICogMTAwMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmICghaXNTZXJ2ZXIgJiYgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdub3cnKSkge1xuICAgICAgdGhpcy5fc3RhcnRPckNvbmZpZ3VyZUNsb2NrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKCFpc1NlcnZlcikge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIHRoaXMuX2hhbmRsZVBhZ2VWaXNpYmlsaXR5Q2hhbmdlLCBmYWxzZSk7XG4gICAgICB0aGlzLl9zdGFydE9yQ29uZmlndXJlQ2xvY2soKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLl9yZW1vdmVFdmVudExpc3RlbmVycygpO1xuICAgIGNsZWFySW50ZXJ2YWwodGhpcy5fcmVzZXRJbnRlcnZhbElkKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZVBhZ2VWaXNpYmlsaXR5Q2hhbmdlID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGlmICh0aGlzLm5vdykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICdoaWRkZW4nKSB7XG4gICAgICBhd2FpdCB0aGlzLl9zdG9wQ2xvY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5fc3RhcnRDbG9jaygpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIGFzeW5jIF9zdGFydE9yQ29uZmlndXJlQ2xvY2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMubm93KSB7XG4gICAgICBhd2FpdCB0aGlzLl9zdG9wQ2xvY2soKTtcbiAgICAgIHRoaXMuX3Jlc2V0U2Vjb25kc0hhbmRBbmltYXRpb24oKTtcbiAgICAgIHRoaXMuX3NldEhhbmRzU3RhcnRpbmdQb3NpdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLl9zdGFydENsb2NrKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFN0YXJ0cyB0aGUgY2xvY2sgYnkgZGVmaW5pbmcgdGhlIGhhbmRzIHN0YXJ0aW5nIHBvc2l0aW9uIHRoZW4gc3RhcnRpbmcgdGhlIGFuaW1hdGlvbnMuICovXG4gIHByaXZhdGUgYXN5bmMgX3N0YXJ0Q2xvY2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5fY2xvY2tIYW5kSG91cnM/LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAnYW5pbWF0aW9uZW5kJyxcbiAgICAgIHRoaXMuX21vdmVIb3Vyc0hhbmRGbixcbiAgICAgIEFERF9FVkVOVF9MSVNURU5FUl9PUFRJT05TLFxuICAgICk7XG4gICAgdGhpcy5fY2xvY2tIYW5kU2Vjb25kcz8uYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdhbmltYXRpb25lbmQnLFxuICAgICAgdGhpcy5fbW92ZU1pbnV0ZXNIYW5kRm4sXG4gICAgICBBRERfRVZFTlRfTElTVEVORVJfT1BUSU9OUyxcbiAgICApO1xuXG4gICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fc2V0SGFuZHNTdGFydGluZ1Bvc2l0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5zdHlsZT8uc2V0UHJvcGVydHkoJy0tc2JiLWNsb2NrLWFuaW1hdGlvbi1wbGF5LXN0YXRlJywgJ3J1bm5pbmcnKTtcbiAgICAgICAgdGhpcy5fc3RhdGUgPSAncnVubmluZyc7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0sIElOSVRJQUxfVElNRU9VVF9EVVJBVElPTiksXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBTdG9wcyB0aGUgY2xvY2sgYnkgcmVtb3ZpbmcgYWxsIHRoZSBhbmltYXRpb25zLiAqL1xuICBwcml2YXRlIGFzeW5jIF9zdG9wQ2xvY2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9oYW5kTW92ZW1lbnQpO1xuXG4gICAgdGhpcy5fcmVtb3ZlU2Vjb25kc0FuaW1hdGlvblN0eWxlcygpO1xuICAgIHRoaXMuX3JlbW92ZUhvdXJzQW5pbWF0aW9uU3R5bGVzKCk7XG5cbiAgICB0aGlzLl9jbG9ja0hhbmRIb3Vycz8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYW5pbWF0aW9uZW5kJywgdGhpcy5fbW92ZUhvdXJzSGFuZEZuKTtcbiAgICB0aGlzLl9jbG9ja0hhbmRTZWNvbmRzPy5yZW1vdmVFdmVudExpc3RlbmVyKCdhbmltYXRpb25lbmQnLCB0aGlzLl9tb3ZlTWludXRlc0hhbmRGbik7XG5cbiAgICB0aGlzLl9jbG9ja0hhbmRNaW51dGVzPy5jbGFzc0xpc3QuYWRkKCdzYmItY2xvY2tfX2hhbmQtbWludXRlcy0tbm8tdHJhbnNpdGlvbicpO1xuXG4gICAgdGhpcy5zdHlsZT8uc2V0UHJvcGVydHkoJy0tc2JiLWNsb2NrLWFuaW1hdGlvbi1wbGF5LXN0YXRlJywgJ3BhdXNlZCcpO1xuICAgIHRoaXMuX3N0YXRlID0gJ3BhdXNlZCc7XG4gIH1cblxuICAvKipcbiAgICogQXMgYSBmYWxsYmFjayBtZWFzdXJlIHRvIHByZXZlbnQgZGUtc3luYywgcmVzZXQgdGhlIGNsb2NrIHRvIHRoZSBzeXN0ZW0gdGltZS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgX3Jlc2V0Q2xvY2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3N0YXRlICE9PSAncnVubmluZycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5fc3RvcENsb2NrKCk7XG4gICAgYXdhaXQgdGhpcy5fc3RhcnRDbG9jaygpO1xuICB9XG5cbiAgLyoqIFNldCB0aGUgc3RhcnRpbmcgcG9zaXRpb24gZm9yIHRoZSB0aHJlZSBoYW5kcyBvbiB0aGUgY2xvY2sgZmFjZS4gKi9cbiAgcHJpdmF0ZSBfc2V0SGFuZHNTdGFydGluZ1Bvc2l0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2Fzc2lnbkN1cnJlbnRUaW1lKCk7XG4gICAgY29uc3QgcmVtYWluaW5nU2Vjb25kcyA9IFRPVEFMX1NFQ09ORFNfT05fQ0xPQ0tfRkFDRSAtIHRoaXMuX3NlY29uZHM7XG4gICAgY29uc3QgcmVtYWluaW5nTWludXRlcyA9IFRPVEFMX01JTlVURVNfT05fQ0xPQ0tfRkFDRSAtIHRoaXMuX21pbnV0ZXM7XG4gICAgY29uc3QgcmVtYWluaW5nSG91cnMgPSBUT1RBTF9IT1VSU19PTl9DTE9DS19GQUNFIC0gdGhpcy5faG91cnM7XG5cbiAgICBsZXQgaG91cnNBbmltYXRpb25EdXJhdGlvbiA9IDA7XG4gICAgbGV0IGhhc1JlbWFpbmluZ01pbnV0ZXNPclNlY29uZHMgPSAwO1xuXG4gICAgaWYgKHJlbWFpbmluZ1NlY29uZHMgPiAwKSB7XG4gICAgICBob3Vyc0FuaW1hdGlvbkR1cmF0aW9uICs9IHJlbWFpbmluZ1NlY29uZHM7XG4gICAgICBoYXNSZW1haW5pbmdNaW51dGVzT3JTZWNvbmRzID0gMTtcbiAgICB9XG5cbiAgICBpZiAocmVtYWluaW5nTWludXRlcyA+IDApIHtcbiAgICAgIGhvdXJzQW5pbWF0aW9uRHVyYXRpb24gKz1cbiAgICAgICAgKHJlbWFpbmluZ01pbnV0ZXMgLSBoYXNSZW1haW5pbmdNaW51dGVzT3JTZWNvbmRzKSAqIFNFQ09ORFNfSU5fQV9NSU5VVEU7XG4gICAgICBoYXNSZW1haW5pbmdNaW51dGVzT3JTZWNvbmRzID0gMTtcbiAgICB9XG5cbiAgICBpZiAocmVtYWluaW5nSG91cnMgPiAwKSB7XG4gICAgICBob3Vyc0FuaW1hdGlvbkR1cmF0aW9uICs9XG4gICAgICAgIChyZW1haW5pbmdIb3VycyAtIGhhc1JlbWFpbmluZ01pbnV0ZXNPclNlY29uZHMpICogU0VDT05EU19JTl9BTl9IT1VSO1xuICAgIH1cblxuICAgIHRoaXMuc3R5bGU/LnNldFByb3BlcnR5KFxuICAgICAgJy0tc2JiLWNsb2NrLWhvdXJzLWFuaW1hdGlvbi1zdGFydC1hbmdsZScsXG4gICAgICBgJHtNYXRoLmNlaWwodGhpcy5faG91cnMgKiBIT1VSU19BTkdMRSArIHRoaXMuX21pbnV0ZXMgLyAyKX1kZWdgLFxuICAgICk7XG4gICAgdGhpcy5zdHlsZT8uc2V0UHJvcGVydHkoJy0tc2JiLWNsb2NrLWhvdXJzLWFuaW1hdGlvbi1kdXJhdGlvbicsIGAke2hvdXJzQW5pbWF0aW9uRHVyYXRpb259c2ApO1xuICAgIHRoaXMuc3R5bGU/LnNldFByb3BlcnR5KFxuICAgICAgJy0tc2JiLWNsb2NrLXNlY29uZHMtYW5pbWF0aW9uLXN0YXJ0LWFuZ2xlJyxcbiAgICAgIGAke01hdGguY2VpbCh0aGlzLl9zZWNvbmRzICogU0JCX1NFQ09ORFNfQU5HTEUpfWRlZ2AsXG4gICAgKTtcbiAgICB0aGlzLnN0eWxlPy5zZXRQcm9wZXJ0eSgnLS1zYmItY2xvY2stc2Vjb25kcy1hbmltYXRpb24tZHVyYXRpb24nLCBgJHtyZW1haW5pbmdTZWNvbmRzfXNgKTtcblxuICAgIHRoaXMuX3NldE1pbnV0ZXNIYW5kKCk7XG5cbiAgICB0aGlzLl9jbG9ja0hhbmRTZWNvbmRzPy5jbGFzc0xpc3QuYWRkKCdzYmItY2xvY2tfX2hhbmQtc2Vjb25kcy0taW5pdGlhbC1taW51dGUnKTtcbiAgICB0aGlzLl9jbG9ja0hhbmRIb3Vycz8uY2xhc3NMaXN0LmFkZCgnc2JiLWNsb2NrX19oYW5kLWhvdXJzLS1pbml0aWFsLWhvdXInKTtcblxuICAgIHRoaXMuaW50ZXJuYWxzLnN0YXRlcy5hZGQoJ2luaXRpYWxpemVkJyk7XG4gIH1cblxuICAvKiogR2l2ZW4gdGhlIGN1cnJlbnQgZGF0ZSwgY2FsY3VsYXRlcyB0aGUgaGgvbW0vc3MgdmFsdWVzIGFuZCB0aGUgaGgvbW0vc3MgbGVmdCB0byB0aGUgbmV4dCBtaWRuaWdodC4gKi9cbiAgcHJpdmF0ZSBfYXNzaWduQ3VycmVudFRpbWUoKTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXMubm93ID8gbnVsbCA6IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgW2hvdXJzLCBtaW51dGVzLCBzZWNvbmRzXSA9IGRhdGVcbiAgICAgID8gW2RhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpXVxuICAgICAgOiB0aGlzLm5vdyEuc3BsaXQoJzonKS5tYXAoKHApID0+ICtwKTtcblxuICAgIHRoaXMuX2hvdXJzID0gaG91cnMgJSAxMjtcbiAgICB0aGlzLl9taW51dGVzID0gbWludXRlcztcbiAgICB0aGlzLl9zZWNvbmRzID0gc2Vjb25kcztcbiAgfVxuXG4gIC8qKiBTZXQgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIGZvciB0aGUgbWludXRlcyBoYW5kLiAqL1xuICBwcml2YXRlIF9zZXRNaW51dGVzSGFuZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9jbG9ja0hhbmRNaW51dGVzPy5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICd0cmFuc2Zvcm0nLFxuICAgICAgYHJvdGF0ZVooJHtNYXRoLmNlaWwodGhpcy5fbWludXRlcyAqIE1JTlVURVNfQU5HTEUpfWRlZylgLFxuICAgICk7XG4gIH1cblxuICAvKiogTW92ZSB0aGUgaG91cnMgaGFuZCB0byB0aGUgbmV4dCB2YWx1ZS4gKi9cbiAgcHJpdmF0ZSBfbW92ZUhvdXJzSGFuZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9yZW1vdmVIb3Vyc0FuaW1hdGlvblN0eWxlcygpO1xuXG4gICAgbGV0IGhvdXJzQW5nbGUgPSBNYXRoLmNlaWwodGhpcy5faG91cnMgKiBIT1VSU19BTkdMRSArIHRoaXMuX21pbnV0ZXMgLyAyKTtcblxuICAgIGlmIChob3Vyc0FuZ2xlID49IEZVTExfQU5HTEUpIHtcbiAgICAgIGhvdXJzQW5nbGUgLT0gRlVMTF9BTkdMRTtcbiAgICB9XG5cbiAgICB0aGlzLl9jbG9ja0hhbmRIb3Vycz8uc3R5bGUuc2V0UHJvcGVydHkoJ3RyYW5zZm9ybScsIGByb3RhdGVaKCR7aG91cnNBbmdsZX1kZWcpYCk7XG4gIH1cblxuICAvKiogTW92ZSB0aGUgbWludXRlcyBoYW5kIHRvIHRoZSBuZXh0IHZhbHVlLiAqL1xuICBwcml2YXRlIF9tb3ZlTWludXRlc0hhbmQoKTogdm9pZCB7XG4gICAgdGhpcy5fY2xvY2tIYW5kU2Vjb25kcz8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYW5pbWF0aW9uZW5kJywgdGhpcy5fbW92ZU1pbnV0ZXNIYW5kRm4pO1xuXG4gICAgdGhpcy5fcmVtb3ZlU2Vjb25kc0FuaW1hdGlvblN0eWxlcygpO1xuXG4gICAgdGhpcy5fYWRkTWludXRlc0FuZFNldEhhbmRzKCk7XG5cbiAgICB0aGlzLl9oYW5kTW92ZW1lbnQgPSBzZXRJbnRlcnZhbChcbiAgICAgICgpID0+IHRoaXMuX2FkZE1pbnV0ZXNBbmRTZXRIYW5kcygpLFxuICAgICAgVE9UQUxfU0VDT05EU19PTl9DTE9DS19GQUNFICogMTAwMCxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWRkTWludXRlc0FuZFNldEhhbmRzKCk6IHZvaWQge1xuICAgIHRoaXMuX21pbnV0ZXMrKztcbiAgICB0aGlzLl9zZXRNaW51dGVzSGFuZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92aW5nIGFuaW1hdGlvbiBieSBvdmVycmlkaW5nIHdpdGggZW1wdHkgc3RyaW5nLFxuICAgKiB0aGVuIHRyaWdnZXJpbmcgYSByZWZsb3cgYW5kIHJlIGFkZCBvcmlnaW5hbCBhbmltYXRpb24gYnkgcmVtb3Zpbmcgb3ZlcnJpZGUuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9yZXNldFNlY29uZHNIYW5kQW5pbWF0aW9uKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fY2xvY2tIYW5kU2Vjb25kcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9jbG9ja0hhbmRTZWNvbmRzLnN0eWxlLmFuaW1hdGlvbiA9ICcnO1xuICAgIC8vIEhhY2sgdG8gdHJpZ2dlciByZWZsb3dcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC1leHByZXNzaW9uc1xuICAgIHRoaXMuX2Nsb2NrSGFuZFNlY29uZHMub2Zmc2V0SGVpZ2h0O1xuICAgIHRoaXMuX2Nsb2NrSGFuZFNlY29uZHMuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2FuaW1hdGlvbicpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgZG9jdW1lbnQ/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCB0aGlzLl9oYW5kbGVQYWdlVmlzaWJpbGl0eUNoYW5nZSk7XG4gICAgdGhpcy5fY2xvY2tIYW5kSG91cnM/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FuaW1hdGlvbmVuZCcsIHRoaXMuX21vdmVIb3Vyc0hhbmRGbik7XG4gICAgdGhpcy5fY2xvY2tIYW5kU2Vjb25kcz8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYW5pbWF0aW9uZW5kJywgdGhpcy5fbW92ZU1pbnV0ZXNIYW5kRm4pO1xuICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faGFuZE1vdmVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbW92ZUhvdXJzQW5pbWF0aW9uU3R5bGVzKCk6IHZvaWQge1xuICAgIHRoaXMuX2Nsb2NrSGFuZEhvdXJzPy5jbGFzc0xpc3QucmVtb3ZlKCdzYmItY2xvY2tfX2hhbmQtaG91cnMtLWluaXRpYWwtaG91cicpO1xuICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoJy0tc2JiLWNsb2NrLWhvdXJzLWFuaW1hdGlvbi1zdGFydC1hbmdsZScpO1xuICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoJy0tc2JiLWNsb2NrLWhvdXJzLWFuaW1hdGlvbi1kdXJhdGlvbicpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVtb3ZlU2Vjb25kc0FuaW1hdGlvblN0eWxlcygpOiB2b2lkIHtcbiAgICB0aGlzLl9jbG9ja0hhbmRTZWNvbmRzPy5jbGFzc0xpc3QucmVtb3ZlKCdzYmItY2xvY2tfX2hhbmQtc2Vjb25kcy0taW5pdGlhbC1taW51dGUnKTtcbiAgICB0aGlzLl9jbG9ja0hhbmRNaW51dGVzPy5jbGFzc0xpc3QucmVtb3ZlKCdzYmItY2xvY2tfX2hhbmQtbWludXRlcy0tbm8tdHJhbnNpdGlvbicpO1xuICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoJy0tc2JiLWNsb2NrLXNlY29uZHMtYW5pbWF0aW9uLXN0YXJ0LWFuZ2xlJyk7XG4gICAgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnLS1zYmItY2xvY2stc2Vjb25kcy1hbmltYXRpb24tZHVyYXRpb24nKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNwYW4gY2xhc3M9XCJzYmItY2xvY2tfX2ZhY2VcIiAuaW5uZXJIVE1MPSR7Y2xvY2tGYWNlU1ZHfT48L3NwYW4+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cInNiYi1jbG9ja19faGFuZC1ob3Vyc1wiXG4gICAgICAgIC5pbm5lckhUTUw9JHtjbG9ja0hhbmRsZUhvdXJzU1ZHfVxuICAgICAgICAke3JlZigoZT86IEVsZW1lbnQpOiB2b2lkID0+IHtcbiAgICAgICAgICB0aGlzLl9jbG9ja0hhbmRIb3VycyA9IGUgYXMgSFRNTFNwYW5FbGVtZW50O1xuICAgICAgICB9KX1cbiAgICAgID48L3NwYW4+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cInNiYi1jbG9ja19faGFuZC1taW51dGVzIHNiYi1jbG9ja19faGFuZC1taW51dGVzLS1uby10cmFuc2l0aW9uXCJcbiAgICAgICAgLmlubmVySFRNTD0ke2Nsb2NrSGFuZGxlTWludXRlc1NWR31cbiAgICAgICAgJHtyZWYoKGVsPzogRWxlbWVudCk6IHZvaWQgPT4ge1xuICAgICAgICAgIHRoaXMuX2Nsb2NrSGFuZE1pbnV0ZXMgPSBlbCBhcyBIVE1MU3BhbkVsZW1lbnQ7XG4gICAgICAgIH0pfVxuICAgICAgPjwvc3Bhbj5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwic2JiLWNsb2NrX19oYW5kLXNlY29uZHNcIlxuICAgICAgICAuaW5uZXJIVE1MPSR7Y2xvY2tIYW5kbGVTZWNvbmRzU1ZHfVxuICAgICAgICAke3JlZigoZWw/OiBFbGVtZW50KTogdm9pZCA9PiB7XG4gICAgICAgICAgdGhpcy5fY2xvY2tIYW5kU2Vjb25kcyA9IGVsIGFzIEhUTUxTcGFuRWxlbWVudDtcbiAgICAgICAgfSl9XG4gICAgICA+PC9zcGFuPlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1jbG9jayc6IFNiYkNsb2NrRWxlbWVudDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3NCQSxJQUFNLDRCQUE0Qjs7QUFHbEMsSUFBTSw4QkFBOEI7O0FBR3BDLElBQU0sOEJBQThCOztBQUdwQyxJQUFNLDJCQUEyQjs7QUFHakMsSUFBTSxhQUFhOztBQUduQixJQUFNLGNBQWM7O0FBR3BCLElBQU0sZ0JBQWdCOztBQUd0QixJQUFNLG9CQUFvQixNQUFNOztBQUdoQyxJQUFNLHNCQUFzQjs7QUFHNUIsSUFBTSxxQkFBcUI7O0FBRzNCLElBQU0saUJBQWlCLHFCQUFxQjtBQUU1QyxJQUFNLDZCQUFzRDtDQUMxRCxNQUFNO0NBQ04sU0FBUztDQUNWOzs7O0lBS1kseUJBQWU7bUJBQVM7Ozs7Y0FBeEIsd0JBQXdCLFlBQVU7OztBQVFqQixTQUFBLHVCQUFBLGtCQUFBLE1BQUEsbUJBQXNCLEtBQUk7O0FBRzlDLFFBQUEsVUFBTSxrQkFBQSxNQUFBLHVCQUFBLEVBQXlCOztBQTBCL0IsUUFBQSx5QkFBK0IsS0FBSyxnQkFBZ0I7O0FBR3BELFFBQUEsMkJBQWlDLEtBQUssa0JBQWtCO0FBK0J4RCxRQUFBLDhCQUE4QixZQUEwQjtBQUM5RCxRQUFJLEtBQUssSUFDUDtBQUdGLFFBQUksU0FBUyxvQkFBb0IsU0FDL0IsT0FBTSxLQUFLLFlBQVk7UUFFdkIsT0FBTSxLQUFLLGFBQWE7Ozs7O3NCQXZFM0IsVUFBVSxDQUFBO0FBQUMsZ0JBQUEsTUFBQSxNQUFBLGlCQUFBO0lBQUEsTUFBQTtJQUFBLE1BQUE7SUFBQSxRQUFBO0lBQUEsU0FBQTtJQUFBLFFBQUE7S0FBQSxNQUFBLFFBQUEsU0FBQTtLQUFBLE1BQUEsUUFBQSxJQUFnQjtLQUFHLE1BQUEsS0FBQSxVQUFBO0FBQUEsVUFBSCxNQUFHOztLQUFBO0lBQUEsVUFBQTtJQUFBLEVBQUEsbUJBQUEsdUJBQUE7Ozs7Ozs7OztBQVBDLFFBQUEsY0FBc0I7OztBQUMvQixRQUFBLFNBQXlCLENBQUMsaUJBQWlCLFVBQVUsY0FBTSxDQUFDOztFQU12RTs7Ozs7RUFBQSxJQUFnQixNQUFHO0FBQUEsVUFBQSxNQUFBOztFQUFuQixJQUFnQixJQUFHLE9BQUE7QUFBQSxTQUFBLHVCQUFBOztFQWtDZixvQkFBaUI7QUFDL0IsU0FBTSxtQkFBbUI7QUFFekIsUUFBSyxtQkFBbUIsa0JBQWtCLEtBQUssYUFBYSxFQUFFLGlCQUFpQixJQUFLOztFQUduRSxXQUFXLG1CQUF1QztBQUNuRSxTQUFNLFdBQVcsa0JBQWtCO0FBRW5DLE9BQUksQ0FBQyxZQUFZLGtCQUFrQixJQUFJLE1BQU0sQ0FDM0MsTUFBSyx3QkFBd0I7O0VBSWQsYUFBYSxtQkFBdUM7QUFDckUsU0FBTSxhQUFhLGtCQUFrQjtBQUVyQyxPQUFJLENBQUMsVUFBVTtBQUNiLGFBQVMsaUJBQWlCLG9CQUFvQixLQUFLLDZCQUE2QixNQUFNO0FBQ3RGLFNBQUssd0JBQXdCOzs7RUFJakIsdUJBQW9CO0FBQ2xDLFNBQU0sc0JBQXNCO0FBQzVCLFFBQUssdUJBQXVCO0FBQzVCLGlCQUFjLEtBQUssaUJBQWlCOztFQWU5QixNQUFNLHlCQUFzQjtBQUNsQyxPQUFJLEtBQUssS0FBSztBQUNaLFVBQU0sS0FBSyxZQUFZO0FBQ3ZCLFNBQUssNEJBQTRCO0FBQ2pDLFNBQUssMkJBQTJCO1NBRWhDLE9BQU0sS0FBSyxhQUFhOzs7RUFLcEIsTUFBTSxjQUFXO0FBQ3ZCLFFBQUssaUJBQWlCLGlCQUNwQixnQkFDQSxLQUFLLGtCQUNMLDJCQUNEO0FBQ0QsUUFBSyxtQkFBbUIsaUJBQ3RCLGdCQUNBLEtBQUssb0JBQ0wsMkJBQ0Q7QUFFRCxTQUFNLElBQUksU0FBZSxZQUN2QixpQkFBZ0I7QUFDZCxTQUFLLDJCQUEyQjtBQUVoQyxTQUFLLE9BQU8sWUFBWSxvQ0FBb0MsVUFBVTtBQUN0RSxTQUFLLFNBQVM7QUFDZCxhQUFTO01BQ1IseUJBQXlCLENBQzdCOzs7RUFJSyxNQUFNLGFBQVU7QUFDdEIsaUJBQWMsS0FBSyxjQUFjO0FBRWpDLFFBQUssK0JBQStCO0FBQ3BDLFFBQUssNkJBQTZCO0FBRWxDLFFBQUssaUJBQWlCLG9CQUFvQixnQkFBZ0IsS0FBSyxpQkFBaUI7QUFDaEYsUUFBSyxtQkFBbUIsb0JBQW9CLGdCQUFnQixLQUFLLG1CQUFtQjtBQUVwRixRQUFLLG1CQUFtQixVQUFVLElBQUkseUNBQXlDO0FBRS9FLFFBQUssT0FBTyxZQUFZLG9DQUFvQyxTQUFTO0FBQ3JFLFFBQUssU0FBUzs7Ozs7RUFNUixNQUFNLGNBQVc7QUFDdkIsT0FBSSxLQUFLLFdBQVcsVUFDbEI7QUFFRixTQUFNLEtBQUssWUFBWTtBQUN2QixTQUFNLEtBQUssYUFBYTs7O0VBSWxCLDRCQUF5QjtBQUMvQixRQUFLLG9CQUFvQjtHQUN6QixNQUFNLG1CQUFtQiw4QkFBOEIsS0FBSztHQUM1RCxNQUFNLG1CQUFtQiw4QkFBOEIsS0FBSztHQUM1RCxNQUFNLGlCQUFpQiw0QkFBNEIsS0FBSztHQUV4RCxJQUFJLHlCQUF5QjtHQUM3QixJQUFJLCtCQUErQjtBQUVuQyxPQUFJLG1CQUFtQixHQUFHO0FBQ3hCLDhCQUEwQjtBQUMxQixtQ0FBK0I7O0FBR2pDLE9BQUksbUJBQW1CLEdBQUc7QUFDeEIsK0JBQ0csbUJBQW1CLGdDQUFnQztBQUN0RCxtQ0FBK0I7O0FBR2pDLE9BQUksaUJBQWlCLEVBQ25CLDRCQUNHLGlCQUFpQixnQ0FBZ0M7QUFHdEQsUUFBSyxPQUFPLFlBQ1YsMkNBQ0EsR0FBRyxLQUFLLEtBQUssS0FBSyxTQUFTLGNBQWMsS0FBSyxXQUFXLEVBQUUsQ0FBQSxLQUM1RDtBQUNELFFBQUssT0FBTyxZQUFZLHdDQUF3QyxHQUFHLHVCQUFzQixHQUFJO0FBQzdGLFFBQUssT0FBTyxZQUNWLDZDQUNBLEdBQUcsS0FBSyxLQUFLLEtBQUssV0FBVyxrQkFBa0IsQ0FBQSxLQUNoRDtBQUNELFFBQUssT0FBTyxZQUFZLDBDQUEwQyxHQUFHLGlCQUFnQixHQUFJO0FBRXpGLFFBQUssaUJBQWlCO0FBRXRCLFFBQUssbUJBQW1CLFVBQVUsSUFBSSwwQ0FBMEM7QUFDaEYsUUFBSyxpQkFBaUIsVUFBVSxJQUFJLHNDQUFzQztBQUUxRSxRQUFLLFVBQVUsT0FBTyxJQUFJLGNBQWM7OztFQUlsQyxxQkFBa0I7R0FDeEIsTUFBTSxPQUFPLEtBQUssTUFBTSx1QkFBTyxJQUFJLE1BQU07R0FDekMsTUFBTSxDQUFDLE9BQU8sU0FBUyxXQUFXLE9BQzlCO0lBQUMsS0FBSyxVQUFVO0lBQUUsS0FBSyxZQUFZO0lBQUUsS0FBSyxZQUFBO0lBQWEsR0FDdkQsS0FBSyxJQUFLLE1BQU0sSUFBSSxDQUFDLEtBQUssTUFBTSxDQUFDLEVBQUU7QUFFdkMsUUFBSyxTQUFTLFFBQVE7QUFDdEIsUUFBSyxXQUFXO0FBQ2hCLFFBQUssV0FBVzs7O0VBSVYsa0JBQWU7QUFDckIsUUFBSyxtQkFBbUIsTUFBTSxZQUM1QixhQUNBLFdBQVcsS0FBSyxLQUFLLEtBQUssV0FBVyxjQUFjLENBQUEsTUFDcEQ7OztFQUlLLGlCQUFjO0FBQ3BCLFFBQUssNkJBQTZCO0dBRWxDLElBQUksYUFBYSxLQUFLLEtBQUssS0FBSyxTQUFTLGNBQWMsS0FBSyxXQUFXLEVBQUU7QUFFekUsT0FBSSxjQUFjLFdBQ2hCLGVBQWM7QUFHaEIsUUFBSyxpQkFBaUIsTUFBTSxZQUFZLGFBQWEsV0FBVyxXQUFVLE1BQU87OztFQUkzRSxtQkFBZ0I7QUFDdEIsUUFBSyxtQkFBbUIsb0JBQW9CLGdCQUFnQixLQUFLLG1CQUFtQjtBQUVwRixRQUFLLCtCQUErQjtBQUVwQyxRQUFLLHdCQUF3QjtBQUU3QixRQUFLLGdCQUFnQixrQkFDYixLQUFLLHdCQUF3QixFQUNuQyw4QkFBOEIsSUFDL0I7O0VBR0sseUJBQXNCO0FBQzVCLFFBQUs7QUFDTCxRQUFLLGlCQUFpQjs7Ozs7OztFQVFoQiw2QkFBMEI7QUFDaEMsT0FBSSxDQUFDLEtBQUssa0JBQ1I7QUFFRixRQUFLLGtCQUFrQixNQUFNLFlBQVk7QUFHekMsUUFBSyxrQkFBa0I7QUFDdkIsUUFBSyxrQkFBa0IsTUFBTSxlQUFlLFlBQVk7O0VBR2xELHdCQUFxQjtBQUMzQixhQUFVLG9CQUFvQixvQkFBb0IsS0FBSyw0QkFBNEI7QUFDbkYsUUFBSyxpQkFBaUIsb0JBQW9CLGdCQUFnQixLQUFLLGlCQUFpQjtBQUNoRixRQUFLLG1CQUFtQixvQkFBb0IsZ0JBQWdCLEtBQUssbUJBQW1CO0FBQ3BGLGlCQUFjLEtBQUssY0FBYzs7RUFHM0IsOEJBQTJCO0FBQ2pDLFFBQUssaUJBQWlCLFVBQVUsT0FBTyxzQ0FBc0M7QUFDN0UsUUFBSyxNQUFNLGVBQWUsMENBQTBDO0FBQ3BFLFFBQUssTUFBTSxlQUFlLHVDQUF1Qzs7RUFHM0QsZ0NBQTZCO0FBQ25DLFFBQUssbUJBQW1CLFVBQVUsT0FBTywwQ0FBMEM7QUFDbkYsUUFBSyxtQkFBbUIsVUFBVSxPQUFPLHlDQUF5QztBQUNsRixRQUFLLE1BQU0sZUFBZSw0Q0FBNEM7QUFDdEUsUUFBSyxNQUFNLGVBQWUseUNBQXlDOztFQUdsRCxTQUFNO0FBQ3ZCLFVBQU8sSUFBSTtpREFDa0MsdUJBQVk7OztxQkFHeEMsd0JBQUE7VUFDWCxLQUFLLE1BQXFCO0FBQzFCLFNBQUssa0JBQWtCO0tBQ3ZCLENBQUE7Ozs7cUJBSVcsMEJBQUE7VUFDWCxLQUFLLE9BQXNCO0FBQzNCLFNBQUssb0JBQW9CO0tBQ3pCLENBQUE7Ozs7cUJBSVcsMEJBQUE7VUFDWCxLQUFLLE9BQXNCO0FBQzNCLFNBQUssb0JBQW9CO0tBQ3pCLENBQUEifQ==
|