@kirbydesign/designsystem 9.4.1 → 9.6.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/avatar/avatar.component.d.ts +5 -2
- package/calendar/helpers/calendar-cell.model.d.ts +2 -0
- package/card/card-as-button/card-as-button.directive.d.ts +2 -3
- package/card/card.component.d.ts +9 -2
- package/chart/shared/base-chart/base-chart.component.d.ts +2 -2
- package/esm2022/accordion/accordion-item.component.mjs +4 -4
- package/esm2022/accordion/accordion.directive.mjs +4 -4
- package/esm2022/accordion/accordion.module.mjs +5 -5
- package/esm2022/accordion/kirbydesign-designsystem-accordion.mjs +1 -1
- package/esm2022/accordion/public_api.mjs +1 -1
- package/esm2022/action-group/action-group.component.mjs +4 -4
- package/esm2022/action-group/kirbydesign-designsystem-action-group.mjs +1 -1
- package/esm2022/action-group/public_api.mjs +1 -1
- package/esm2022/avatar/avatar.component.mjs +12 -6
- package/esm2022/avatar/kirbydesign-designsystem-avatar.mjs +1 -1
- package/esm2022/avatar/public_api.mjs +1 -1
- package/esm2022/badge/badge.component.mjs +4 -4
- package/esm2022/badge/kirbydesign-designsystem-badge.mjs +1 -1
- package/esm2022/badge/public_api.mjs +1 -1
- package/esm2022/button/button.component.mjs +4 -4
- package/esm2022/button/kirbydesign-designsystem-button.mjs +1 -1
- package/esm2022/button/public_api.mjs +1 -1
- package/esm2022/calendar/calendar.component.mjs +20 -19
- package/esm2022/calendar/helpers/calendar-cell.model.mjs +1 -1
- package/esm2022/calendar/helpers/calendar-options.model.mjs +1 -1
- package/esm2022/calendar/helpers/calendar.helper.mjs +4 -4
- package/esm2022/calendar/kirbydesign-designsystem-calendar.mjs +1 -1
- package/esm2022/calendar/options/calendar-year-navigator-config.mjs +1 -1
- package/esm2022/calendar/public_api.mjs +1 -1
- package/esm2022/card/card-as-button/card-as-button.directive.mjs +4 -9
- package/esm2022/card/card-flag-level.mjs +1 -1
- package/esm2022/card/card-footer/card-footer.component.mjs +5 -5
- package/esm2022/card/card-header/card-header.component.mjs +4 -4
- package/esm2022/card/card.component.mjs +27 -9
- package/esm2022/card/card.module.mjs +5 -5
- package/esm2022/card/kirbydesign-designsystem-card.mjs +1 -1
- package/esm2022/card/public_api.mjs +1 -1
- package/esm2022/chart/chart/chart.component.mjs +4 -4
- package/esm2022/chart/chart/index.mjs +1 -1
- package/esm2022/chart/chart-config/chart-bar-config/chart-bar-config.mjs +1 -1
- package/esm2022/chart/chart-config/chart-base-config.mjs +1 -1
- package/esm2022/chart/chart-config/chart-stock-config/chart-stock-config.mjs +1 -1
- package/esm2022/chart/chart-config/chart-stock-config/data-label-position/data-label-position.mjs +1 -1
- package/esm2022/chart/chart-config/chart-stock-config/vertical-line-plugin/vertical-line-plugin.mjs +1 -1
- package/esm2022/chart/chart-config/chart-stock-config/vertical-line-plugin/vertical-line-plugin.model.mjs +1 -1
- package/esm2022/chart/charts.module.mjs +5 -5
- package/esm2022/chart/kirbydesign-designsystem-chart.mjs +1 -1
- package/esm2022/chart/public_api.mjs +1 -1
- package/esm2022/chart/shared/base-chart/base-chart.component.mjs +4 -4
- package/esm2022/chart/shared/base-chart/index.mjs +1 -1
- package/esm2022/chart/shared/chart-config-service/chart-config.service.mjs +4 -4
- package/esm2022/chart/shared/chart-config-service/configs/annotations.config.mjs +1 -1
- package/esm2022/chart/shared/chart-config-service/configs/global-defaults.config.mjs +1 -1
- package/esm2022/chart/shared/chart-config-service/configs/interaction-functions-extensions.config.mjs +1 -1
- package/esm2022/chart/shared/chart-config-service/configs/type.config.mjs +1 -1
- package/esm2022/chart/shared/chart-config-service/index.mjs +1 -1
- package/esm2022/chart/shared/chart-js-service/annotations.delegate.mjs +1 -1
- package/esm2022/chart/shared/chart-js-service/chart-js.service.mjs +4 -4
- package/esm2022/chart/shared/chart-js-service/chartjs-plugin-marker/chartjs-plugin-marker.mjs +1 -1
- package/esm2022/chart/shared/chart-js-service/configured-chart-js.mjs +1 -1
- package/esm2022/chart/shared/chart-js-service/index.mjs +1 -1
- package/esm2022/chart/shared/chart-js-service/test-utils.mjs +1 -1
- package/esm2022/chart/shared/charts.types.mjs +1 -1
- package/esm2022/chart/shared/index.mjs +1 -1
- package/esm2022/chart/stock-chart/index.mjs +1 -1
- package/esm2022/chart/stock-chart/stock-chart-js.service.mjs +4 -4
- package/esm2022/chart/stock-chart/stock-chart.component.mjs +4 -4
- package/esm2022/checkbox/checkbox.component.mjs +4 -4
- package/esm2022/checkbox/kirbydesign-designsystem-checkbox.mjs +1 -1
- package/esm2022/checkbox/public_api.mjs +1 -1
- package/esm2022/data-table/data-table.module.mjs +5 -5
- package/esm2022/data-table/kirbydesign-designsystem-data-table.mjs +1 -1
- package/esm2022/data-table/public_api.mjs +1 -1
- package/esm2022/data-table/sortable/sortable.component.mjs +4 -4
- package/esm2022/data-table/table/table.component.mjs +4 -4
- package/esm2022/data-table/table-row/table-row.component.mjs +4 -4
- package/esm2022/divider/divider.component.mjs +4 -4
- package/esm2022/divider/kirbydesign-designsystem-divider.mjs +1 -1
- package/esm2022/divider/public_api.mjs +1 -1
- package/esm2022/dropdown/dropdown.component.mjs +5 -5
- package/esm2022/dropdown/dropdown.module.mjs +5 -5
- package/esm2022/dropdown/dropdown.types.mjs +1 -1
- package/esm2022/dropdown/keyboard-handler.service.mjs +4 -4
- package/esm2022/dropdown/kirbydesign-designsystem-dropdown.mjs +1 -1
- package/esm2022/dropdown/public_api.mjs +1 -1
- package/esm2022/empty-state/empty-state.component.mjs +4 -4
- package/esm2022/empty-state/empty-state.module.mjs +5 -5
- package/esm2022/empty-state/kirbydesign-designsystem-empty-state.mjs +1 -1
- package/esm2022/empty-state/public_api.mjs +1 -1
- package/esm2022/fab-sheet/fab-sheet.component.mjs +4 -4
- package/esm2022/fab-sheet/kirbydesign-designsystem-fab-sheet.mjs +1 -1
- package/esm2022/fab-sheet/public_api.mjs +1 -1
- package/esm2022/flag/flag.component.mjs +4 -4
- package/esm2022/flag/kirbydesign-designsystem-flag.mjs +1 -1
- package/esm2022/flag/public_api.mjs +1 -1
- package/esm2022/form-field/directives/affix/affix.directive.mjs +4 -4
- package/esm2022/form-field/directives/date/date-input.directive.mjs +4 -4
- package/esm2022/form-field/directives/decimal-mask/decimal-mask.directive.mjs +4 -4
- package/esm2022/form-field/form-field-message/form-field-message.component.mjs +4 -4
- package/esm2022/form-field/form-field.component.mjs +4 -4
- package/esm2022/form-field/form-field.module.mjs +5 -5
- package/esm2022/form-field/input/input.component.mjs +4 -4
- package/esm2022/form-field/input-counter/input-counter.component.mjs +4 -4
- package/esm2022/form-field/kirbydesign-designsystem-form-field.mjs +1 -1
- package/esm2022/form-field/public_api.mjs +1 -1
- package/esm2022/form-field/textarea/textarea.component.mjs +4 -4
- package/esm2022/header/header.component.mjs +24 -17
- package/esm2022/header/header.module.mjs +5 -5
- package/esm2022/header/kirbydesign-designsystem-header.mjs +1 -1
- package/esm2022/header/public_api.mjs +1 -1
- package/esm2022/helpers/chart-config-has-type.mjs +1 -1
- package/esm2022/helpers/color-helper.mjs +1 -1
- package/esm2022/helpers/deep-copy.mjs +1 -1
- package/esm2022/helpers/design-token-helper.mjs +1 -1
- package/esm2022/helpers/element-has-ancestor.mjs +1 -1
- package/esm2022/helpers/ionic-element-part-helper.mjs +4 -4
- package/esm2022/helpers/kirby-animation.mjs +1 -1
- package/esm2022/helpers/kirbydesign-designsystem-helpers.mjs +1 -1
- package/esm2022/helpers/line-clamp-helper.mjs +4 -4
- package/esm2022/helpers/merge-deep.mjs +1 -1
- package/esm2022/helpers/platform.service.mjs +4 -4
- package/esm2022/helpers/public_api.mjs +1 -1
- package/esm2022/helpers/scss/kirbydesign-designsystem-helpers-scss.mjs +1 -1
- package/esm2022/helpers/scss/public_api.mjs +1 -1
- package/esm2022/helpers/scss/scss-helper.mjs +1 -1
- package/esm2022/helpers/string-helper.mjs +1 -1
- package/esm2022/helpers/theme-color.type.mjs +1 -1
- package/esm2022/helpers/unique-id-generator.helper.mjs +1 -1
- package/esm2022/icon/icon-registry.service.mjs +4 -4
- package/esm2022/icon/icon-settings.mjs +1 -1
- package/esm2022/icon/icon.component.mjs +4 -4
- package/esm2022/icon/icon.module.mjs +5 -5
- package/esm2022/icon/kirby-icon-settings.mjs +1 -1
- package/esm2022/icon/kirbydesign-designsystem-icon.mjs +1 -1
- package/esm2022/icon/public_api.mjs +1 -1
- package/esm2022/item/item.component.mjs +5 -5
- package/esm2022/item/item.module.mjs +5 -5
- package/esm2022/item/kirbydesign-designsystem-item.mjs +1 -1
- package/esm2022/item/label/label.component.mjs +4 -4
- package/esm2022/item/public_api.mjs +1 -1
- package/esm2022/item-group/item-group.component.mjs +4 -4
- package/esm2022/item-group/kirbydesign-designsystem-item-group.mjs +1 -1
- package/esm2022/item-group/public_api.mjs +1 -1
- package/esm2022/item-sliding/item-sliding.component.mjs +4 -4
- package/esm2022/item-sliding/item-sliding.types.mjs +1 -1
- package/esm2022/item-sliding/kirbydesign-designsystem-item-sliding.mjs +1 -1
- package/esm2022/item-sliding/public_api.mjs +1 -1
- package/esm2022/kirby-app/kirby-app.component.mjs +4 -4
- package/esm2022/kirby-app/kirby-app.module.mjs +5 -5
- package/esm2022/kirby-app/kirbydesign-designsystem-kirby-app.mjs +1 -1
- package/esm2022/kirby-app/public_api.mjs +1 -1
- package/esm2022/kirby-ionic-module/kirby-ionic.module.mjs +5 -5
- package/esm2022/kirby-ionic-module/kirbydesign-designsystem-kirby-ionic-module.mjs +1 -1
- package/esm2022/kirby-ionic-module/public_api.mjs +1 -1
- package/esm2022/kirbydesign-designsystem.mjs +1 -1
- package/esm2022/lib/components/index.mjs +1 -1
- package/esm2022/lib/components/page-local-navigation/index.mjs +1 -1
- package/esm2022/lib/components/page-local-navigation/page-local-navigation-item.mjs +1 -1
- package/esm2022/lib/components/page-local-navigation/page-local-navigation.component.mjs +5 -5
- package/esm2022/lib/components/segmented-control/segment-item.mjs +1 -1
- package/esm2022/lib/components/segmented-control/segmented-control.component.mjs +36 -19
- package/esm2022/lib/directives/index.mjs +1 -1
- package/esm2022/lib/directives/key-handler/key-handler.directive.mjs +4 -4
- package/esm2022/lib/directives/modal-router-link/modal-router-link.directive.mjs +4 -4
- package/esm2022/lib/index.mjs +1 -1
- package/esm2022/lib/kirby-experimental.module.mjs +5 -5
- package/esm2022/lib/kirby.module.mjs +5 -5
- package/esm2022/list/directives/index.mjs +1 -1
- package/esm2022/list/directives/infinite-scroll.directive.mjs +4 -4
- package/esm2022/list/directives/list-item-color.directive.mjs +4 -4
- package/esm2022/list/directives/scroll.model.mjs +1 -1
- package/esm2022/list/helpers/index.mjs +1 -1
- package/esm2022/list/helpers/list-helper.mjs +4 -4
- package/esm2022/list/kirbydesign-designsystem-list.mjs +1 -1
- package/esm2022/list/list-experimental/index.mjs +1 -1
- package/esm2022/list/list-experimental/list-experimental.component.mjs +4 -4
- package/esm2022/list/list-header/index.mjs +1 -1
- package/esm2022/list/list-header/list-header.component.mjs +4 -4
- package/esm2022/list/list-item/index.mjs +1 -1
- package/esm2022/list/list-item/list-item.component.mjs +5 -5
- package/esm2022/list/list-section-header/index.mjs +1 -1
- package/esm2022/list/list-section-header/list-section-header.component.mjs +4 -4
- package/esm2022/list/list-swipe-action.mjs +1 -1
- package/esm2022/list/list-swipe-action.type.mjs +1 -1
- package/esm2022/list/list.component.mjs +5 -5
- package/esm2022/list/list.directive.mjs +13 -13
- package/esm2022/list/list.event.mjs +1 -1
- package/esm2022/list/list.module.mjs +18 -12
- package/esm2022/list/public_api.mjs +1 -1
- package/esm2022/loading-overlay/kirbydesign-designsystem-loading-overlay.mjs +1 -1
- package/esm2022/loading-overlay/loading-overlay.component.mjs +5 -5
- package/esm2022/loading-overlay/loading-overlay.service.mjs +4 -4
- package/esm2022/loading-overlay/public_api.mjs +1 -1
- package/esm2022/menu/kirbydesign-designsystem-menu.mjs +1 -1
- package/esm2022/menu/menu.component.mjs +4 -4
- package/esm2022/menu/public_api.mjs +1 -1
- package/esm2022/modal/kirbydesign-designsystem-modal.mjs +1 -1
- package/esm2022/modal/modal/action-sheet/action-sheet.component.mjs +4 -4
- package/esm2022/modal/modal/action-sheet/config/action-sheet-config.mjs +1 -1
- package/esm2022/modal/modal/action-sheet/config/action-sheet-item.mjs +1 -1
- package/esm2022/modal/modal/action-sheet/index.mjs +1 -1
- package/esm2022/modal/modal/alert/alert.component.mjs +4 -4
- package/esm2022/modal/modal/alert/config/alert-config.mjs +1 -1
- package/esm2022/modal/modal/alert/index.mjs +1 -1
- package/esm2022/modal/modal/footer/modal-footer.component.mjs +5 -5
- package/esm2022/modal/modal/index.mjs +1 -1
- package/esm2022/modal/modal/modal-component/modal.component.mjs +12 -19
- package/esm2022/modal/modal/services/action-sheet.helper.mjs +4 -4
- package/esm2022/modal/modal/services/alert.helper.mjs +4 -4
- package/esm2022/modal/modal/services/can-dismiss-modal-guard.mjs +31 -0
- package/esm2022/modal/modal/services/can-dismiss.helper.mjs +4 -4
- package/esm2022/modal/modal/services/index.mjs +2 -1
- package/esm2022/modal/modal/services/modal-animation-builder.service.mjs +4 -4
- package/esm2022/modal/modal/services/modal.controller.mjs +12 -8
- package/esm2022/modal/modal/services/modal.helper.mjs +24 -26
- package/esm2022/modal/modal-navigation.service.mjs +25 -14
- package/esm2022/modal/modal-wrapper/compact/index.mjs +1 -1
- package/esm2022/modal/modal-wrapper/compact/modal-compact-wrapper.component.mjs +4 -4
- package/esm2022/modal/modal-wrapper/config/drawer-supplementary-action.mjs +1 -1
- package/esm2022/modal/modal-wrapper/config/index.mjs +1 -1
- package/esm2022/modal/modal-wrapper/config/modal-config.helper.mjs +1 -1
- package/esm2022/modal/modal-wrapper/config/modal-config.mjs +1 -1
- package/esm2022/modal/modal-wrapper/index.mjs +1 -1
- package/esm2022/modal/modal-wrapper/modal-elements-mover.delegate.mjs +1 -1
- package/esm2022/modal/modal-wrapper/modal-wrapper.component.mjs +6 -6
- package/esm2022/modal/modal.interfaces.mjs +4 -4
- package/esm2022/modal/public_api.mjs +1 -1
- package/esm2022/modal/v2/footer/footer.component.mjs +4 -4
- package/esm2022/modal/v2/kirby-modal.module.mjs +5 -5
- package/esm2022/modal/v2/kirbydesign-designsystem-modal-v2.mjs +1 -1
- package/esm2022/modal/v2/modal/modal.component.mjs +5 -5
- package/esm2022/modal/v2/modal-routing/modal-routing.component.mjs +4 -4
- package/esm2022/modal/v2/public_api.mjs +1 -1
- package/esm2022/modal/v2/services/modal.controller.mjs +4 -4
- package/esm2022/modal/v2/wrapper/wrapper.component.mjs +5 -5
- package/esm2022/page/kirbydesign-designsystem-page.mjs +1 -1
- package/esm2022/page/page-footer/page-footer.component.mjs +4 -4
- package/esm2022/page/page.component.mjs +44 -35
- package/esm2022/page/page.module.mjs +5 -5
- package/esm2022/page/public_api.mjs +1 -1
- package/esm2022/popover/kirbydesign-designsystem-popover.mjs +1 -1
- package/esm2022/popover/popover.component.mjs +4 -4
- package/esm2022/popover/public_api.mjs +1 -1
- package/esm2022/progress-circle/kirbydesign-designsystem-progress-circle.mjs +1 -1
- package/esm2022/progress-circle/progress-circle-ring.component.mjs +25 -16
- package/esm2022/progress-circle/progress-circle.component.mjs +4 -4
- package/esm2022/progress-circle/public_api.mjs +1 -1
- package/esm2022/public-api.mjs +1 -1
- package/esm2022/radio/kirbydesign-designsystem-radio.mjs +1 -1
- package/esm2022/radio/public_api.mjs +1 -1
- package/esm2022/radio/radio-group/radio-group.component.mjs +4 -4
- package/esm2022/radio/radio-module.mjs +5 -5
- package/esm2022/radio/radio.component.mjs +5 -5
- package/esm2022/range/kirbydesign-designsystem-range.mjs +1 -1
- package/esm2022/range/public_api.mjs +1 -1
- package/esm2022/range/range.component.mjs +4 -4
- package/esm2022/reorder-list/kirbydesign-designsystem-reorder-list.mjs +1 -1
- package/esm2022/reorder-list/public_api.mjs +1 -1
- package/esm2022/reorder-list/reorder-event.mjs +1 -1
- package/esm2022/reorder-list/reorder-list.component.mjs +4 -4
- package/esm2022/router-outlet/kirbydesign-designsystem-router-outlet.mjs +1 -1
- package/esm2022/router-outlet/public_api.mjs +1 -1
- package/esm2022/router-outlet/router-outlet.component.mjs +4 -4
- package/esm2022/router-outlet/router-outlet.module.mjs +5 -5
- package/esm2022/section-header/kirbydesign-designsystem-section-header.mjs +1 -1
- package/esm2022/section-header/public_api.mjs +1 -1
- package/esm2022/section-header/section-header.component.mjs +5 -5
- package/esm2022/shared/component-configuration.mjs +1 -1
- package/esm2022/shared/component-loader.directive.mjs +4 -4
- package/esm2022/shared/dynamic-component.mjs +1 -1
- package/esm2022/shared/fit-heading/fit-heading.directive.mjs +4 -4
- package/esm2022/shared/fit-heading/index.mjs +1 -1
- package/esm2022/shared/floating/floating.directive.mjs +4 -4
- package/esm2022/shared/floating/kirbydesign-designsystem-shared-floating.mjs +1 -1
- package/esm2022/shared/floating/public_api.mjs +1 -1
- package/esm2022/shared/kirbydesign-designsystem-shared.mjs +1 -1
- package/esm2022/shared/portal/kirbydesign-designsystem-shared-portal.mjs +1 -1
- package/esm2022/shared/portal/portal.directive.mjs +4 -4
- package/esm2022/shared/portal/public_api.mjs +1 -1
- package/esm2022/shared/public_api.mjs +1 -1
- package/esm2022/shared/resize-observer/resize-observer.factory.mjs +4 -4
- package/esm2022/shared/resize-observer/resize-observer.service.mjs +4 -4
- package/esm2022/shared/theme-color/theme-color.directive.mjs +4 -4
- package/esm2022/slide/kirbydesign-designsystem-slide.mjs +1 -1
- package/esm2022/slide/public_api.mjs +1 -1
- package/esm2022/slide/slide-stretch-height.directive.mjs +4 -4
- package/esm2022/slide/slide.directive.mjs +4 -4
- package/esm2022/slide/slide.module.mjs +5 -5
- package/esm2022/slide/slides.component.mjs +4 -4
- package/esm2022/slide-button/kirbydesign-designsystem-slide-button.mjs +1 -1
- package/esm2022/slide-button/public_api.mjs +1 -1
- package/esm2022/slide-button/slide-button.component.mjs +5 -5
- package/esm2022/spinner/kirbydesign-designsystem-spinner.mjs +1 -1
- package/esm2022/spinner/public_api.mjs +1 -1
- package/esm2022/spinner/spinner.component.mjs +4 -4
- package/esm2022/spinner/spinner.module.mjs +5 -5
- package/esm2022/tab-navigation/kirbydesign-designsystem-tab-navigation.mjs +1 -1
- package/esm2022/tab-navigation/public_api.mjs +1 -1
- package/esm2022/tab-navigation/tab-navigation/tab-navigation.component.mjs +5 -5
- package/esm2022/tab-navigation/tab-navigation-item/tab-navigation-item.component.mjs +8 -5
- package/esm2022/tab-navigation/tab-navigation.module.mjs +5 -5
- package/esm2022/tabs/kirbydesign-designsystem-tabs.mjs +1 -1
- package/esm2022/tabs/public_api.mjs +1 -1
- package/esm2022/tabs/tab-button/tab-button.component.mjs +5 -5
- package/esm2022/tabs/tab-button/tab-button.events.mjs +1 -1
- package/esm2022/tabs/tabs.component.mjs +4 -4
- package/esm2022/tabs/tabs.module.mjs +5 -5
- package/esm2022/tabs/tabs.service.mjs +4 -4
- package/esm2022/testing/element-css-custom-matchers.mjs +1 -1
- package/esm2022/testing/kirbydesign-designsystem-testing.mjs +1 -1
- package/esm2022/testing/public_api.mjs +1 -1
- package/esm2022/testing/test-helper.mjs +5 -5
- package/esm2022/testing-base/kirbydesign-designsystem-testing-base.mjs +1 -1
- package/esm2022/testing-base/lib/components/index.mjs +1 -1
- package/esm2022/testing-base/lib/components/mock.accordion-item.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.action-group.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.action-sheet.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.alert.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.avatar.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.badge.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.base-chart.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.button.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.calendar.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.card-footer.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.card-header.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.card.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.chart.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.checkbox.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.divider.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.dropdown.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.empty-state.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.fab-sheet.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.flag.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.footer.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.form-field-message.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.form-field.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.header.component.mjs +12 -10
- package/esm2022/testing-base/lib/components/mock.icon.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.input-counter.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.input.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.item-group.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.item-sliding.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.item.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.kirby-app.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.label.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.list-experimental.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.list-header.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.list-item.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.list-section-header.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.list.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.loading-overlay.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.menu.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.modal-compact-wrapper.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.modal-footer.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.modal-routing.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.modal-wrapper.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.modal.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.page-footer.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.page-local-navigation.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.page.component.mjs +44 -34
- package/esm2022/testing-base/lib/components/mock.popover.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.progress-circle-ring.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.progress-circle.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.radio-group.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.radio.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.range.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.reorder-list.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.router-outlet.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.section-header.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.segmented-control.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.slide-button.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.slides.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.spinner.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.stock-chart.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.tab-button.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.tab-navigation-item.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.tab-navigation.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.table-row.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.table.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.tabs.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.textarea.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.toggle-button.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.toggle.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.wrapper.component.mjs +6 -4
- package/esm2022/testing-base/lib/directives/index.mjs +1 -1
- package/esm2022/testing-base/lib/directives/mock.accordion.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.affix.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.card-as-button.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.component-loader.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.date-input.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.decimal-mask.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.fit-heading.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.floating.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.infinite-scroll.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.key-handler.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.list-item-color.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.list.directive.mjs +13 -13
- package/esm2022/testing-base/lib/directives/mock.modal-router-link.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.portal.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.slide.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.theme-color.directive.mjs +4 -4
- package/esm2022/testing-base/lib/index.mjs +1 -1
- package/esm2022/testing-base/lib/kirby-testing-base.module.mjs +5 -5
- package/esm2022/testing-base/lib/mock-components.mjs +1 -1
- package/esm2022/testing-base/lib/mock-directives.mjs +1 -1
- package/esm2022/testing-base/public_api.mjs +1 -1
- package/esm2022/testing-jasmine/kirbydesign-designsystem-testing-jasmine.mjs +1 -1
- package/esm2022/testing-jasmine/lib/kirby-testing.module.mjs +5 -6
- package/esm2022/testing-jasmine/lib/mock-providers.mjs +1 -1
- package/esm2022/testing-jasmine/public_api.mjs +1 -1
- package/esm2022/testing-jest/kirbydesign-designsystem-testing-jest.mjs +1 -1
- package/esm2022/testing-jest/lib/kirby-testing.module.mjs +5 -6
- package/esm2022/testing-jest/lib/mock-providers.mjs +1 -1
- package/esm2022/testing-jest/public_api.mjs +1 -1
- package/esm2022/toast/config/toast-config.mjs +1 -1
- package/esm2022/toast/kirbydesign-designsystem-toast.mjs +1 -1
- package/esm2022/toast/public_api.mjs +1 -1
- package/esm2022/toast/services/indexs.mjs +1 -1
- package/esm2022/toast/services/toast.controller.mjs +4 -4
- package/esm2022/toast/services/toast.helper.mjs +4 -4
- package/esm2022/toggle/kirbydesign-designsystem-toggle.mjs +1 -1
- package/esm2022/toggle/public_api.mjs +1 -1
- package/esm2022/toggle/toggle.component.mjs +4 -4
- package/esm2022/toggle-button/kirbydesign-designsystem-toggle-button.mjs +1 -1
- package/esm2022/toggle-button/public_api.mjs +1 -1
- package/esm2022/toggle-button/toggle-button.component.mjs +4 -4
- package/esm2022/toggle-button/toggle-button.module.mjs +5 -5
- package/esm2022/types/event-listener-dispose-fn.mjs +1 -1
- package/esm2022/types/kirbydesign-designsystem-types.mjs +1 -1
- package/esm2022/types/public_api.mjs +1 -1
- package/esm2022/types/window-ref.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-accordion.mjs +10 -10
- package/fesm2022/kirbydesign-designsystem-accordion.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-action-group.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-action-group.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-avatar.mjs +11 -5
- package/fesm2022/kirbydesign-designsystem-avatar.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-badge.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-badge.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-button.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-button.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-calendar.mjs +22 -21
- package/fesm2022/kirbydesign-designsystem-calendar.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-card.mjs +40 -27
- package/fesm2022/kirbydesign-designsystem-card.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-chart.mjs +22 -22
- package/fesm2022/kirbydesign-designsystem-chart.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-checkbox.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-checkbox.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-data-table.mjs +13 -13
- package/fesm2022/kirbydesign-designsystem-data-table.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-divider.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-divider.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-dropdown.mjs +11 -11
- package/fesm2022/kirbydesign-designsystem-dropdown.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-empty-state.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-empty-state.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-fab-sheet.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-fab-sheet.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-flag.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-flag.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-form-field.mjs +28 -28
- package/fesm2022/kirbydesign-designsystem-form-field.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-header.mjs +27 -20
- package/fesm2022/kirbydesign-designsystem-header.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-helpers-scss.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-helpers.mjs +9 -9
- package/fesm2022/kirbydesign-designsystem-helpers.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-icon.mjs +10 -10
- package/fesm2022/kirbydesign-designsystem-icon.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-item-group.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-item-group.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-item-sliding.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-item-sliding.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-item.mjs +11 -11
- package/fesm2022/kirbydesign-designsystem-item.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-kirby-app.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-kirby-app.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-kirby-ionic-module.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-kirby-ionic-module.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-list.mjs +55 -49
- package/fesm2022/kirbydesign-designsystem-list.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-menu.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-menu.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-modal-v2.mjs +21 -21
- package/fesm2022/kirbydesign-designsystem-modal-v2.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-modal.mjs +125 -92
- package/fesm2022/kirbydesign-designsystem-modal.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-page.mjs +50 -41
- package/fesm2022/kirbydesign-designsystem-page.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-popover.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-popover.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-progress-circle.mjs +26 -17
- package/fesm2022/kirbydesign-designsystem-progress-circle.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-radio.mjs +11 -11
- package/fesm2022/kirbydesign-designsystem-radio.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-range.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-range.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-reorder-list.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-reorder-list.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-router-outlet.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-router-outlet.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-section-header.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-section-header.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-shared-floating.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-shared-floating.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-shared-portal.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-shared-portal.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-shared.mjs +15 -15
- package/fesm2022/kirbydesign-designsystem-shared.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-slide-button.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-slide-button.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-slide.mjs +13 -13
- package/fesm2022/kirbydesign-designsystem-slide.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-spinner.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-spinner.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs +15 -12
- package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-tabs.mjs +14 -14
- package/fesm2022/kirbydesign-designsystem-tabs.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing-base.mjs +455 -307
- package/fesm2022/kirbydesign-designsystem-testing-base.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing-jasmine.mjs +4 -5
- package/fesm2022/kirbydesign-designsystem-testing-jasmine.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing-jest.mjs +4 -5
- package/fesm2022/kirbydesign-designsystem-testing-jest.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-testing.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-toast.mjs +6 -6
- package/fesm2022/kirbydesign-designsystem-toast.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-toggle-button.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-toggle-button.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-toggle.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-toggle.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-types.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-types.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem.mjs +53 -36
- package/fesm2022/kirbydesign-designsystem.mjs.map +1 -1
- package/header/header.component.d.ts +5 -2
- package/lib/components/segmented-control/segment-item.d.ts +0 -4
- package/lib/components/segmented-control/segmented-control.component.d.ts +22 -12
- package/list/list.module.d.ts +1 -1
- package/modal/modal/footer/modal-footer.component.d.ts +1 -1
- package/modal/modal/modal-component/modal.component.d.ts +5 -5
- package/modal/modal/services/can-dismiss-modal-guard.d.ts +2 -0
- package/modal/modal/services/index.d.ts +1 -0
- package/modal/modal/services/modal.controller.d.ts +2 -0
- package/modal/modal/services/modal.helper.d.ts +3 -4
- package/modal/modal-navigation.service.d.ts +1 -0
- package/modal/modal.interfaces.d.ts +1 -0
- package/package.json +28 -30
- package/page/page.component.d.ts +1 -1
- package/progress-circle/progress-circle-ring.component.d.ts +7 -3
- package/readme.md +11 -10
- package/tab-navigation/tab-navigation-item/tab-navigation-item.component.d.ts +2 -1
- package/testing-base/lib/components/mock.avatar.component.d.ts +1 -1
- package/testing-base/lib/components/mock.button.component.d.ts +1 -1
- package/testing-jest/lib/mock-providers.d.ts +28 -28
|
@@ -25,32 +25,33 @@ import * as i8 from "@kirbydesign/designsystem/spinner";
|
|
|
25
25
|
const contentScrollDebounceTimeInMS = 10;
|
|
26
26
|
const contentScrolledOffsetInPixels = 4;
|
|
27
27
|
const PAGE_WIDTH_STANDARD_DEPRECATION_WARNING = 'Deprecation warning: The support for "standard" as a maxWidth option will be removed in Kirby version 10. After that the "standard" width will be the default width and does not need to be specified.';
|
|
28
|
+
const PAGE_WIDTH_OPTIMIZED_DEPRECATION_WARNING = 'Deprecation warning: The "optimized" maxWidth option is deprecated, please use "lg" instead. The support for "optimized" as a maxWidth option will be removed in Kirby version 10.';
|
|
28
29
|
export const PAGE_BACK_BUTTON_OVERRIDE = new InjectionToken('page-back-button-override');
|
|
29
30
|
export class PageTitleDirective {
|
|
30
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
31
|
-
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.
|
|
31
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PageTitleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
32
|
+
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: PageTitleDirective, selector: "[kirbyPageTitle]", ngImport: i0 }); }
|
|
32
33
|
}
|
|
33
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
34
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PageTitleDirective, decorators: [{
|
|
34
35
|
type: Directive,
|
|
35
36
|
args: [{
|
|
36
37
|
selector: '[kirbyPageTitle]',
|
|
37
38
|
}]
|
|
38
39
|
}] });
|
|
39
40
|
export class PageSubtitleDirective {
|
|
40
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
41
|
-
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.
|
|
41
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PageSubtitleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
42
|
+
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: PageSubtitleDirective, selector: "[kirbyPageSubtitle]", ngImport: i0 }); }
|
|
42
43
|
}
|
|
43
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
44
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PageSubtitleDirective, decorators: [{
|
|
44
45
|
type: Directive,
|
|
45
46
|
args: [{
|
|
46
47
|
selector: '[kirbyPageSubtitle]',
|
|
47
48
|
}]
|
|
48
49
|
}] });
|
|
49
50
|
export class PageToolbarTitleDirective {
|
|
50
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
51
|
-
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.
|
|
51
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PageToolbarTitleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
52
|
+
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: PageToolbarTitleDirective, selector: "[kirbyPageToolbarTitle]", ngImport: i0 }); }
|
|
52
53
|
}
|
|
53
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
54
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PageToolbarTitleDirective, decorators: [{
|
|
54
55
|
type: Directive,
|
|
55
56
|
args: [{
|
|
56
57
|
selector: '[kirbyPageToolbarTitle]',
|
|
@@ -69,10 +70,10 @@ export class PageActionsDirective {
|
|
|
69
70
|
get isFixed() {
|
|
70
71
|
return this.config ? this.config.fixed : this.fixedDefault;
|
|
71
72
|
}
|
|
72
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
73
|
-
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.
|
|
73
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PageActionsDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
74
|
+
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: PageActionsDirective, selector: "[kirbyPageActions]", inputs: { config: ["kirbyPageActions", "config"] }, ngImport: i0 }); }
|
|
74
75
|
}
|
|
75
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
76
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PageActionsDirective, decorators: [{
|
|
76
77
|
type: Directive,
|
|
77
78
|
args: [{
|
|
78
79
|
selector: '[kirbyPageActions]',
|
|
@@ -88,10 +89,10 @@ export class PageContentDirective {
|
|
|
88
89
|
get isFixed() {
|
|
89
90
|
return this.config && this.config.fixed;
|
|
90
91
|
}
|
|
91
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
92
|
-
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.
|
|
92
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PageContentDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
93
|
+
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: PageContentDirective, selector: "[kirbyPageContent]", inputs: { config: ["kirbyPageContent", "config"] }, ngImport: i0 }); }
|
|
93
94
|
}
|
|
94
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
95
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PageContentDirective, decorators: [{
|
|
95
96
|
type: Directive,
|
|
96
97
|
args: [{
|
|
97
98
|
selector: '[kirbyPageContent]',
|
|
@@ -101,10 +102,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImpor
|
|
|
101
102
|
args: ['kirbyPageContent']
|
|
102
103
|
}] } });
|
|
103
104
|
export class PageStickyContentDirective {
|
|
104
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
105
|
-
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.
|
|
105
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PageStickyContentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
106
|
+
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: PageStickyContentDirective, selector: "[kirbyPageStickyContent]", ngImport: i0 }); }
|
|
106
107
|
}
|
|
107
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
108
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PageStickyContentDirective, decorators: [{
|
|
108
109
|
type: Directive,
|
|
109
110
|
args: [{
|
|
110
111
|
selector: '[kirbyPageStickyContent]',
|
|
@@ -117,12 +118,12 @@ export class PageProgressComponent extends ModalElementComponent {
|
|
|
117
118
|
// This implementation was chosen over expanding `moveChild` method in component wrapper with yet another scenario
|
|
118
119
|
this.slot = 'start';
|
|
119
120
|
}
|
|
120
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
121
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
121
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PageProgressComponent, deps: [{ token: i1.ModalElementsAdvertiser, optional: true }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
122
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: PageProgressComponent, selector: "kirby-page-progress", host: { properties: { "attr.slot": "this.slot" } }, usesInheritance: true, ngImport: i0, template: `
|
|
122
123
|
<ng-content></ng-content>
|
|
123
124
|
`, isInline: true, styles: [":host{display:flex;margin-inline-end:4px}\n"] }); }
|
|
124
125
|
}
|
|
125
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
126
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PageProgressComponent, decorators: [{
|
|
126
127
|
type: Component,
|
|
127
128
|
args: [{ selector: 'kirby-page-progress', template: `
|
|
128
129
|
<ng-content></ng-content>
|
|
@@ -137,12 +138,12 @@ export class PageTitleComponent extends ModalElementComponent {
|
|
|
137
138
|
constructor(elementRef, modalElementsAdvertiser) {
|
|
138
139
|
super(ModalElementType.TITLE, elementRef, modalElementsAdvertiser);
|
|
139
140
|
}
|
|
140
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
141
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
141
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PageTitleComponent, deps: [{ token: i0.ElementRef }, { token: i1.ModalElementsAdvertiser, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
142
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: PageTitleComponent, selector: "kirby-page-title", usesInheritance: true, ngImport: i0, template: `
|
|
142
143
|
<ng-content></ng-content>
|
|
143
144
|
`, isInline: true }); }
|
|
144
145
|
}
|
|
145
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
146
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PageTitleComponent, decorators: [{
|
|
146
147
|
type: Component,
|
|
147
148
|
args: [{
|
|
148
149
|
selector: 'kirby-page-title',
|
|
@@ -154,12 +155,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImpor
|
|
|
154
155
|
type: Optional
|
|
155
156
|
}] }] });
|
|
156
157
|
export class PageContentComponent {
|
|
157
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
158
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
158
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PageContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
159
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: PageContentComponent, selector: "kirby-page-content", ngImport: i0, template: `
|
|
159
160
|
<ng-content></ng-content>
|
|
160
161
|
`, isInline: true }); }
|
|
161
162
|
}
|
|
162
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
163
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PageContentComponent, decorators: [{
|
|
163
164
|
type: Component,
|
|
164
165
|
args: [{
|
|
165
166
|
selector: 'kirby-page-content',
|
|
@@ -169,12 +170,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImpor
|
|
|
169
170
|
}]
|
|
170
171
|
}] });
|
|
171
172
|
export class PageActionsComponent {
|
|
172
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
173
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
173
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PageActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
174
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: PageActionsComponent, selector: "kirby-page-actions", ngImport: i0, template: `
|
|
174
175
|
<ng-content select="button[kirby-button]"></ng-content>
|
|
175
176
|
`, isInline: true, styles: [":host{display:inline-flex;column-gap:8px}\n"] }); }
|
|
176
177
|
}
|
|
177
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
178
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PageActionsComponent, decorators: [{
|
|
178
179
|
type: Component,
|
|
179
180
|
args: [{ selector: 'kirby-page-actions', template: `
|
|
180
181
|
<ng-content select="button[kirby-button]"></ng-content>
|
|
@@ -182,9 +183,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImpor
|
|
|
182
183
|
}] });
|
|
183
184
|
export class PageComponent {
|
|
184
185
|
set maxWidth(width) {
|
|
186
|
+
// TODO: Remove deprecation warning in Kirby v10
|
|
185
187
|
if (width === 'standard') {
|
|
186
188
|
console.warn(PAGE_WIDTH_STANDARD_DEPRECATION_WARNING);
|
|
187
189
|
}
|
|
190
|
+
// TODO: Remove deprecation warning in Kirby v10
|
|
191
|
+
if (width === 'optimized') {
|
|
192
|
+
console.warn(PAGE_WIDTH_OPTIMIZED_DEPRECATION_WARNING);
|
|
193
|
+
}
|
|
188
194
|
this._maxWidth = width;
|
|
189
195
|
}
|
|
190
196
|
get maxWidth() {
|
|
@@ -425,6 +431,9 @@ export class PageComponent {
|
|
|
425
431
|
this.hasPageSubtitle = this.subtitle !== undefined || !!this.customSubtitleTemplate;
|
|
426
432
|
if (this.header?.title && !this.toolbarTitle) {
|
|
427
433
|
this.toolbarTitle = this.header.title;
|
|
434
|
+
this.header.title$.pipe(takeUntil(this.ngOnDestroy$)).subscribe((title) => {
|
|
435
|
+
this.toolbarTitle = title;
|
|
436
|
+
});
|
|
428
437
|
}
|
|
429
438
|
this.observeTitle();
|
|
430
439
|
const defaultTitleTemplate = this.customTitleTemplate || this.simpleTitleTemplate;
|
|
@@ -618,12 +627,12 @@ export class PageComponent {
|
|
|
618
627
|
this.content.scrollToTop(KirbyAnimation.Duration.LONG);
|
|
619
628
|
}
|
|
620
629
|
}
|
|
621
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
622
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.9", type: PageComponent, selector: "kirby-page", inputs: { title: "title", subtitle: "subtitle", toolbarTitle: "toolbarTitle", titleAlignment: "titleAlignment", defaultBackHref: "defaultBackHref", hideBackButton: "hideBackButton", titleMaxLines: "titleMaxLines", hasInteractiveTitle: "hasInteractiveTitle", maxWidth: "maxWidth", tabBarBottomHidden: "tabBarBottomHidden" }, outputs: { enter: "enter", leave: "leave", refresh: "refresh", backButtonClick: "backButtonClick", toolbarTitleClick: "toolbarTitleClick" }, host: { listeners: { "window:keyboardWillShow": "_onKeyboardWillShow($event)", "window:keyboardWillHide": "_onKeyboardWillHide()", "window:kirbySelectedTabClick": "_onSelectedTabClick()" } }, providers: [IonicElementPartHelper], queries: [{ propertyName: "customToolbarTitleTemplate", first: true, predicate: PageToolbarTitleDirective, descendants: true, read: TemplateRef }, { propertyName: "customTitleTemplate", first: true, predicate: PageTitleDirective, descendants: true, read: TemplateRef }, { propertyName: "customSubtitleTemplate", first: true, predicate: PageSubtitleDirective, descendants: true, read: TemplateRef }, { propertyName: "stickyContentRef", first: true, predicate: PageStickyContentDirective, descendants: true, read: TemplateRef }, { propertyName: "header", first: true, predicate: HeaderComponent, descendants: true }, { propertyName: "customActions", predicate: PageActionsDirective }, { propertyName: "customContent", predicate: PageContentDirective }], viewQueries: [{ propertyName: "content", first: true, predicate: IonContent, descendants: true, static: true }, { propertyName: "ionContentElement", first: true, predicate: IonContent, descendants: true, read: ElementRef, static: true }, { propertyName: "ionHeaderElement", first: true, predicate: IonHeader, descendants: true, read: ElementRef, static: true }, { propertyName: "ionFooterElement", first: true, predicate: IonFooter, descendants: true, read: ElementRef, static: true }, { propertyName: "ionToolbarElement", first: true, predicate: IonToolbar, descendants: true, read: ElementRef, static: true }, { propertyName: "backButton", first: true, predicate: IonBackButton, descendants: true }, { propertyName: "pageTitle", first: true, predicate: ["pageTitle"], descendants: true, read: ElementRef }, { propertyName: "stickyContentContainer", first: true, predicate: ["stickyContentContainer"], descendants: true, read: ElementRef }, { propertyName: "simpleTitleTemplate", first: true, predicate: ["simpleTitleTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "simpleToolbarTitleTemplate", first: true, predicate: ["simpleToolbarTitleTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "ionToolbarButtonsElement", predicate: IonButtons, descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<ion-header>\n <ion-toolbar\n [class.content-scrolled]=\"isContentScrolled\"\n [class.content-pinned]=\"isStickyContentPinned\"\n >\n <ion-buttons slot=\"start\">\n <ion-back-button\n text=\"\"\n [defaultHref]=\"defaultBackHref\"\n icon=\"assets/kirby/icons/svg/arrow-back.svg\"\n [style.visibility]=\"hideBackButton ? 'hidden' : null\"\n ></ion-back-button>\n </ion-buttons>\n <ion-title [class.slide-and-fade-in]=\"toolbarTitleVisible\">\n <div class=\"toolbar-title\">\n <ng-container *ngIf=\"!titleActionIconTemplate && !hasInteractiveTitle\">\n <ng-container *ngTemplateOutlet=\"toolbarTitleTemplate\"></ng-container>\n </ng-container>\n <span\n *ngIf=\"!!titleActionIconTemplate || hasInteractiveTitle\"\n [class.clickable]=\"hasInteractiveTitle\"\n [class.has-icon]=\"!!titleActionIconTemplate\"\n (click)=\"onTitleClick($event)\"\n >\n <span>\n <ng-container *ngTemplateOutlet=\"toolbarTitleTemplate\"></ng-container>\n </span>\n <ng-container *ngTemplateOutlet=\"titleActionIconTemplate\"></ng-container>\n </span>\n </div>\n </ion-title>\n <ion-buttons\n *ngIf=\"!!headerActionsTemplate\"\n class=\"hide\"\n slot=\"primary\"\n [class.fade-in]=\"toolbarActionsVisible\"\n >\n <ng-container\n *ngTemplateOutlet=\"headerActionsTemplate; injector: toolbarActionGroupInjector\"\n ></ng-container>\n </ion-buttons>\n <ion-buttons *ngIf=\"!!stickyActionsTemplate\" class=\"legacy-actions\" slot=\"primary\">\n <ng-container *ngTemplateOutlet=\"stickyActionsTemplate\"></ng-container>\n </ion-buttons>\n <ion-buttons *ngIf=\"!!fixedActionsTemplate\" class=\"legacy-actions\" slot=\"secondary\">\n <ng-container *ngTemplateOutlet=\"fixedActionsTemplate\"></ng-container>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content\n scrollEvents=\"true\"\n forceOverscroll=\"false\"\n [class]=\"getMaxWidthClasses()\"\n [class.has-header]=\"hasHeader\"\n>\n <ion-refresher\n *ngIf=\"refresh.observers.length > 0\"\n (ionRefresh)=\"delegateRefreshEvent($event)\"\n slot=\"fixed\"\n >\n <kirby-spinner></kirby-spinner>\n </ion-refresher>\n\n <!-- Page header -->\n <div class=\"page-header-container\" *ngIf=\"hasPageTitle && !hasHeader\">\n <div\n class=\"page-header\"\n [ngClass]=\"{\n 'text-center': titleAlignment === 'center',\n 'text-right': titleAlignment === 'right'\n }\"\n >\n <div #pageTitle class=\"page-title\" [class.has-actions]=\"!!pageActionsTemplate\">\n <ng-container\n *ngTemplateOutlet=\"customTitleTemplate || defaultPageTitleTemplate\"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"pageActionsTemplate || defaultPageActionsTemplate\"\n ></ng-container>\n </div>\n <div *ngIf=\"hasPageSubtitle\" class=\"page-subtitle\">\n <ng-container\n *ngTemplateOutlet=\"customSubtitleTemplate || defaultPageSubtitleTemplate\"\n ></ng-container>\n </div>\n </div>\n </div>\n\n <!-- Header -->\n <div class=\"page-header-container\" *ngIf=\"hasHeader\">\n <ng-content select=\"kirby-header\"></ng-content>\n </div>\n\n <!-- Sticky content -->\n <ng-container *ngIf=\"stickyContentTemplate\">\n <div\n #stickyContentContainer\n class=\"sticky-content-container\"\n [class.content-pinned]=\"isStickyContentPinned\"\n >\n <div>\n <ng-container *ngTemplateOutlet=\"stickyContentTemplate\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <!-- Content -->\n <div class=\"content-inner\">\n <ng-container\n *ngTemplateOutlet=\"customContentTemplate || defaultContentTemplate\"\n ></ng-container>\n </div>\n\n <div slot=\"fixed\" class=\"fixed-content\" *ngIf=\"fixedContentTemplate\">\n <div class=\"content-inner\">\n <ng-container *ngTemplateOutlet=\"fixedContentTemplate\"></ng-container>\n </div>\n </div>\n</ion-content>\n\n<ion-footer>\n <ng-content select=\"kirby-page-footer\"></ng-content>\n</ion-footer>\n\n<ng-template #defaultPageTitleTemplate>\n <h1 [kirbyFitHeading]=\"fitHeadingConfig\">\n <ng-container *ngTemplateOutlet=\"simpleTitleTemplate\"></ng-container>\n </h1>\n</ng-template>\n<ng-template #defaultPageSubtitleTemplate>\n <ng-container *ngTemplateOutlet=\"simpleSubtitleTemplate\"></ng-container>\n</ng-template>\n<ng-template #defaultPageActionsTemplate>\n <ng-content select=\"kirby-page-actions\"></ng-content>\n</ng-template>\n\n<ng-template #defaultContentTemplate>\n <ng-content select=\"kirby-page-content\"></ng-content>\n</ng-template>\n\n<ng-template #simpleTitleTemplate>{{ title }}</ng-template>\n<ng-template #simpleSubtitleTemplate>{{ subtitle }}</ng-template>\n<ng-template #simpleToolbarTitleTemplate>{{ toolbarTitle }}</ng-template>\n", styles: ["ion-header,ion-toolbar{--background: var(--kirby-background-color);margin:0 auto}ion-toolbar{--border-width: 0 !important;--padding-start: 16px;--padding-end: 16px;--padding-top: 0;--padding-bottom: 0;--ion-toolbar-color: var(--kirby-black);--min-height: 56px}@media (min-width: 768px){ion-toolbar{--padding-start: 24px;--padding-end: 24px;--min-height: 72px}}ion-toolbar:before{content:\"\";position:absolute;left:0;right:0;bottom:0;height:1px}ion-toolbar:before,ion-toolbar::part(background){transition:background-color 50ms linear}ion-toolbar.content-scrolled{--background: #f3f3f3}ion-toolbar.content-scrolled:before,ion-toolbar.content-scrolled::part(background){transition-duration:.2s}ion-toolbar.content-scrolled:not(.content-pinned):before{background-color:var(--kirby-medium)}ion-toolbar.content-pinned:before{transition:none}ion-toolbar ion-buttons[slot=start]{margin-right:8px}ion-toolbar ion-buttons[slot=primary],ion-toolbar ion-buttons[slot=secondary]{margin-left:8px}ion-toolbar ion-buttons[slot=secondary]{order:6}ion-toolbar ion-title{visibility:hidden;opacity:0;transform:translateY(10px);transition-property:opacity,transform;transition-duration:.15s;transition-timing-function:ease;padding-inline:calc(var(--action-buttons-width, 48px) + var(--padding-start))}ion-toolbar ion-title.slide-and-fade-in{visibility:visible;opacity:1;transform:translateY(0)}ion-toolbar ion-title .toolbar-title,ion-toolbar ion-title .toolbar-title>span.has-icon>span{text-overflow:ellipsis;white-space:nowrap;pointer-events:auto;overflow:hidden}ion-toolbar ion-title .toolbar-title{font-weight:700}ion-toolbar ion-title .toolbar-title span.clickable{cursor:pointer}ion-toolbar ion-title .toolbar-title span.has-icon{display:inline-flex;flex-direction:row;align-items:center;justify-content:center;max-width:100%}ion-toolbar ion-title .toolbar-title ::ng-deep>*{text-overflow:ellipsis;white-space:nowrap;pointer-events:auto;overflow:hidden}.hide{visibility:hidden;opacity:0;transition:opacity .1s linear}.hide.fade-in{visibility:inherit;opacity:1}ion-title{box-sizing:border-box;font-size:16px;font-weight:400}ion-back-button{--color: var(--kirby-black);--background: var(--kirby-white);--icon-font-size: 24px;height:40px;width:40px;opacity:1}@media (hover: hover){ion-back-button:hover{--state-layer-opacity: .08;--state-layer-background-color: var(--kirby-black);--background-hover: var(--state-layer-background-color);--background-hover-opacity: var(--state-layer-opacity)}}ion-back-button:active,ion-back-button.ion-activated{--state-layer-opacity: .16;--state-layer-background-color: var(--kirby-black);--background-activated: var(--state-layer-background-color);--background-activated-opacity: var(--state-layer-opacity)}ion-back-button::part(icon){margin-inline:0}ion-back-button::part(native){opacity:1;border-radius:999px;overflow:hidden}ion-back-button::part(native):after{transition:all 80ms linear 0ms}.page-header-container{max-width:var(--page-content-max-width, 792px);margin:0 auto}.page-header{margin-left:16px;margin-top:8px;margin-bottom:var(--kirby-page-title-margin-bottom, 40px)}.page-header .page-title.has-actions{display:flex;justify-content:space-between;align-items:flex-start}.page-header .page-title h1,.page-header .page-title h2,.page-header .page-title h3,.page-header .page-title h4,.page-header .page-title h5,.page-header .page-title h6{margin:0}.page-header .page-subtitle{margin-top:8px}.page-header.text-center{text-align:center;margin-left:0}.page-header.text-right{text-align:right}ion-content{--padding-top: 12px;--padding-start: var(--page-content-padding-start, 16px);--padding-end: var(--page-content-padding-end, 16px);--background: var(--kirby-background-color);--color: var(--kirby-black)}@media (min-width: 768px){ion-content{--padding-start: var(--page-content-padding-start, 48px);--padding-end: var(--page-content-padding-end, 48px)}}ion-content.has-header{--padding-top: 0}ion-content.max-width-optimized{--page-content-max-width: 1092px}ion-content.max-width-full{--page-content-max-width: 100%}ion-content::part(scroll){scrollbar-gutter:stable}ion-content .content-inner{max-width:var(--page-content-max-width, 792px);margin:0 auto;padding-bottom:40px}ion-content .fixed-content{width:100%;position:absolute;bottom:0;transform:initial}ion-content .fixed-content .content-inner{position:relative}.sticky-content-container{position:sticky;top:-13px;left:0;right:0;padding-top:1px;margin-block-end:24px;z-index:10}.sticky-content-container div{max-width:var(--page-content-max-width, 792px);margin:0 auto}.sticky-content-container:before,.sticky-content-container:after{content:\"\";position:absolute;left:calc(-1 * var(--padding-start));right:calc(-1 * var(--padding-end));bottom:0}.sticky-content-container:before{top:0;background-color:var(--background)}.sticky-content-container:after{height:1px}.sticky-content-container.content-pinned:before{background-color:#f3f3f3}.sticky-content-container.content-pinned:after{background-color:var(--kirby-medium)}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.FitHeadingDirective, selector: "h1[kirbyFitHeading],h2[kirbyFitHeading],h3[kirbyFitHeading]", inputs: ["kirbyFitHeading"] }, { kind: "component", type: i8.SpinnerComponent, selector: "kirby-spinner" }, { kind: "component", type: i5.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i5.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i5.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i5.IonBackButton, selector: "ion-back-button" }, { kind: "component", type: i5.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i5.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i5.IonRefresher, selector: "ion-refresher", inputs: ["closeDuration", "disabled", "mode", "pullFactor", "pullMax", "pullMin", "snapbackDuration"] }, { kind: "component", type: i5.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
630
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PageComponent, deps: [{ token: i0.ElementRef }, { token: i0.Injector }, { token: i0.Renderer2 }, { token: i2.Router }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i1.ModalNavigationService }, { token: i3.ResizeObserverService }, { token: i4.TabsComponent, optional: true, skipSelf: true }, { token: PAGE_BACK_BUTTON_OVERRIDE, optional: true }, { token: i5.IonRouterOutlet, optional: true }, { token: i5.NavController, optional: true }, { token: i6.IonicElementPartHelper }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
631
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: PageComponent, selector: "kirby-page", inputs: { title: "title", subtitle: "subtitle", toolbarTitle: "toolbarTitle", titleAlignment: "titleAlignment", defaultBackHref: "defaultBackHref", hideBackButton: "hideBackButton", titleMaxLines: "titleMaxLines", hasInteractiveTitle: "hasInteractiveTitle", maxWidth: "maxWidth", tabBarBottomHidden: "tabBarBottomHidden" }, outputs: { enter: "enter", leave: "leave", refresh: "refresh", backButtonClick: "backButtonClick", toolbarTitleClick: "toolbarTitleClick" }, host: { listeners: { "window:keyboardWillShow": "_onKeyboardWillShow($event)", "window:keyboardWillHide": "_onKeyboardWillHide()", "window:kirbySelectedTabClick": "_onSelectedTabClick()" } }, providers: [IonicElementPartHelper], queries: [{ propertyName: "customToolbarTitleTemplate", first: true, predicate: PageToolbarTitleDirective, descendants: true, read: TemplateRef }, { propertyName: "customTitleTemplate", first: true, predicate: PageTitleDirective, descendants: true, read: TemplateRef }, { propertyName: "customSubtitleTemplate", first: true, predicate: PageSubtitleDirective, descendants: true, read: TemplateRef }, { propertyName: "stickyContentRef", first: true, predicate: PageStickyContentDirective, descendants: true, read: TemplateRef }, { propertyName: "header", first: true, predicate: HeaderComponent, descendants: true }, { propertyName: "customActions", predicate: PageActionsDirective }, { propertyName: "customContent", predicate: PageContentDirective }], viewQueries: [{ propertyName: "content", first: true, predicate: IonContent, descendants: true, static: true }, { propertyName: "ionContentElement", first: true, predicate: IonContent, descendants: true, read: ElementRef, static: true }, { propertyName: "ionHeaderElement", first: true, predicate: IonHeader, descendants: true, read: ElementRef, static: true }, { propertyName: "ionFooterElement", first: true, predicate: IonFooter, descendants: true, read: ElementRef, static: true }, { propertyName: "ionToolbarElement", first: true, predicate: IonToolbar, descendants: true, read: ElementRef, static: true }, { propertyName: "backButton", first: true, predicate: IonBackButton, descendants: true }, { propertyName: "pageTitle", first: true, predicate: ["pageTitle"], descendants: true, read: ElementRef }, { propertyName: "stickyContentContainer", first: true, predicate: ["stickyContentContainer"], descendants: true, read: ElementRef }, { propertyName: "simpleTitleTemplate", first: true, predicate: ["simpleTitleTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "simpleToolbarTitleTemplate", first: true, predicate: ["simpleToolbarTitleTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "ionToolbarButtonsElement", predicate: IonButtons, descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<ion-header>\n <ion-toolbar\n [class.content-scrolled]=\"isContentScrolled\"\n [class.content-pinned]=\"isStickyContentPinned\"\n >\n <ion-buttons slot=\"start\">\n <ion-back-button\n text=\"\"\n [defaultHref]=\"defaultBackHref\"\n icon=\"assets/kirby/icons/svg/arrow-back.svg\"\n [style.visibility]=\"hideBackButton ? 'hidden' : null\"\n ></ion-back-button>\n </ion-buttons>\n <ion-title [class.slide-and-fade-in]=\"toolbarTitleVisible\">\n <div class=\"toolbar-title\">\n <ng-container *ngIf=\"!titleActionIconTemplate && !hasInteractiveTitle\">\n <ng-container *ngTemplateOutlet=\"toolbarTitleTemplate\"></ng-container>\n </ng-container>\n <span\n *ngIf=\"!!titleActionIconTemplate || hasInteractiveTitle\"\n [class.clickable]=\"hasInteractiveTitle\"\n [class.has-icon]=\"!!titleActionIconTemplate\"\n (click)=\"onTitleClick($event)\"\n >\n <span>\n <ng-container *ngTemplateOutlet=\"toolbarTitleTemplate\"></ng-container>\n </span>\n <ng-container *ngTemplateOutlet=\"titleActionIconTemplate\"></ng-container>\n </span>\n </div>\n </ion-title>\n <ion-buttons\n *ngIf=\"!!headerActionsTemplate\"\n class=\"hide\"\n slot=\"primary\"\n [class.fade-in]=\"toolbarActionsVisible\"\n >\n <ng-container\n *ngTemplateOutlet=\"headerActionsTemplate; injector: toolbarActionGroupInjector\"\n ></ng-container>\n </ion-buttons>\n <ion-buttons *ngIf=\"!!stickyActionsTemplate\" class=\"legacy-actions\" slot=\"primary\">\n <ng-container *ngTemplateOutlet=\"stickyActionsTemplate\"></ng-container>\n </ion-buttons>\n <ion-buttons *ngIf=\"!!fixedActionsTemplate\" class=\"legacy-actions\" slot=\"secondary\">\n <ng-container *ngTemplateOutlet=\"fixedActionsTemplate\"></ng-container>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content\n scrollEvents=\"true\"\n forceOverscroll=\"false\"\n [class]=\"getMaxWidthClasses()\"\n [class.has-header]=\"hasHeader\"\n>\n <ion-refresher\n *ngIf=\"refresh.observers.length > 0\"\n (ionRefresh)=\"delegateRefreshEvent($event)\"\n slot=\"fixed\"\n >\n <kirby-spinner></kirby-spinner>\n </ion-refresher>\n\n <!-- Page header -->\n <div class=\"page-header-container\" *ngIf=\"hasPageTitle && !hasHeader\">\n <div\n class=\"page-header\"\n [ngClass]=\"{\n 'text-center': titleAlignment === 'center',\n 'text-right': titleAlignment === 'right'\n }\"\n >\n <div #pageTitle class=\"page-title\" [class.has-actions]=\"!!pageActionsTemplate\">\n <ng-container\n *ngTemplateOutlet=\"customTitleTemplate || defaultPageTitleTemplate\"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"pageActionsTemplate || defaultPageActionsTemplate\"\n ></ng-container>\n </div>\n <div *ngIf=\"hasPageSubtitle\" class=\"page-subtitle\">\n <ng-container\n *ngTemplateOutlet=\"customSubtitleTemplate || defaultPageSubtitleTemplate\"\n ></ng-container>\n </div>\n </div>\n </div>\n\n <!-- Header -->\n <div class=\"page-header-container\" *ngIf=\"hasHeader\">\n <ng-content select=\"kirby-header\"></ng-content>\n </div>\n\n <!-- Sticky content -->\n <ng-container *ngIf=\"stickyContentTemplate\">\n <div\n #stickyContentContainer\n class=\"sticky-content-container\"\n [class.content-pinned]=\"isStickyContentPinned\"\n >\n <div>\n <ng-container *ngTemplateOutlet=\"stickyContentTemplate\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <!-- Content -->\n <div class=\"content-inner\">\n <ng-container\n *ngTemplateOutlet=\"customContentTemplate || defaultContentTemplate\"\n ></ng-container>\n </div>\n\n <div slot=\"fixed\" class=\"fixed-content\" *ngIf=\"fixedContentTemplate\">\n <div class=\"content-inner\">\n <ng-container *ngTemplateOutlet=\"fixedContentTemplate\"></ng-container>\n </div>\n </div>\n</ion-content>\n\n<ion-footer>\n <ng-content select=\"kirby-page-footer\"></ng-content>\n</ion-footer>\n\n<ng-template #defaultPageTitleTemplate>\n <h1 [kirbyFitHeading]=\"fitHeadingConfig\">\n <ng-container *ngTemplateOutlet=\"simpleTitleTemplate\"></ng-container>\n </h1>\n</ng-template>\n<ng-template #defaultPageSubtitleTemplate>\n <ng-container *ngTemplateOutlet=\"simpleSubtitleTemplate\"></ng-container>\n</ng-template>\n<ng-template #defaultPageActionsTemplate>\n <ng-content select=\"kirby-page-actions\"></ng-content>\n</ng-template>\n\n<ng-template #defaultContentTemplate>\n <ng-content select=\"kirby-page-content\"></ng-content>\n</ng-template>\n\n<ng-template #simpleTitleTemplate>{{ title }}</ng-template>\n<ng-template #simpleSubtitleTemplate>{{ subtitle }}</ng-template>\n<ng-template #simpleToolbarTitleTemplate>{{ toolbarTitle }}</ng-template>\n", styles: ["ion-header,ion-toolbar{--background: var(--kirby-background-color);margin:0 auto}ion-toolbar{--border-width: 0 !important;--padding-start: 16px;--padding-end: 16px;--padding-top: 0;--padding-bottom: 0;--ion-toolbar-color: var(--kirby-black);--min-height: 56px}@media (min-width: 768px){ion-toolbar{--padding-start: 24px;--padding-end: 24px;--min-height: 72px}}ion-toolbar:before{content:\"\";position:absolute;left:0;right:0;bottom:0;height:1px}ion-toolbar:before,ion-toolbar::part(background){transition:background-color 50ms linear}ion-toolbar.content-scrolled{--background: #f3f3f3}ion-toolbar.content-scrolled:before,ion-toolbar.content-scrolled::part(background){transition-duration:.2s}ion-toolbar.content-scrolled:not(.content-pinned):before{background-color:var(--kirby-medium)}ion-toolbar.content-pinned:before{transition:none}ion-toolbar ion-buttons[slot=start]{margin-right:8px}ion-toolbar ion-buttons[slot=primary],ion-toolbar ion-buttons[slot=secondary]{margin-left:8px}ion-toolbar ion-buttons[slot=secondary]{order:6}ion-toolbar ion-title{visibility:hidden;opacity:0;transform:translateY(10px);transition-property:opacity,transform;transition-duration:.15s;transition-timing-function:ease;padding-inline:calc(var(--action-buttons-width, 48px) + var(--padding-start))}ion-toolbar ion-title.slide-and-fade-in{visibility:visible;opacity:1;transform:translateY(0)}ion-toolbar ion-title .toolbar-title,ion-toolbar ion-title .toolbar-title>span.has-icon>span{text-overflow:ellipsis;white-space:nowrap;pointer-events:auto;overflow:hidden}ion-toolbar ion-title .toolbar-title{font-weight:700}ion-toolbar ion-title .toolbar-title span.clickable{cursor:pointer}ion-toolbar ion-title .toolbar-title span.has-icon{display:inline-flex;flex-direction:row;align-items:center;justify-content:center;max-width:100%}ion-toolbar ion-title .toolbar-title ::ng-deep>*{text-overflow:ellipsis;white-space:nowrap;pointer-events:auto;overflow:hidden}.hide{visibility:hidden;opacity:0;transition:opacity .1s linear}.hide.fade-in{visibility:inherit;opacity:1}ion-title{box-sizing:border-box;font-size:16px;font-weight:400}ion-back-button{--color: var(--kirby-black);--background: var(--kirby-white);--icon-font-size: 24px;height:40px;width:40px;opacity:1}@media (hover: hover){ion-back-button:hover{--state-layer-opacity: .08;--state-layer-background-color: var(--kirby-black);--background-hover: var(--state-layer-background-color);--background-hover-opacity: var(--state-layer-opacity)}}ion-back-button:active,ion-back-button.ion-activated{--state-layer-opacity: .16;--state-layer-background-color: var(--kirby-black);--background-activated: var(--state-layer-background-color);--background-activated-opacity: var(--state-layer-opacity)}ion-back-button::part(icon){margin-inline:0}ion-back-button::part(native){opacity:1;border-radius:999px;overflow:hidden}ion-back-button::part(native):after{transition:all 80ms linear 0ms}.page-header-container{max-width:var(--page-content-max-width, 792px);margin:0 auto}.page-header{margin-left:16px;margin-top:8px;margin-bottom:var(--kirby-page-title-margin-bottom, 40px)}.page-header .page-title.has-actions{display:flex;justify-content:space-between;align-items:flex-start}.page-header .page-title h1,.page-header .page-title h2,.page-header .page-title h3,.page-header .page-title h4,.page-header .page-title h5,.page-header .page-title h6{margin:0}.page-header .page-subtitle{margin-top:8px}.page-header.text-center{text-align:center;margin-left:0}.page-header.text-right{text-align:right}ion-content{--padding-top: 12px;--padding-start: var(--page-content-padding-start, 16px);--padding-end: var(--page-content-padding-end, 16px);--background: var(--kirby-background-color);--color: var(--kirby-black)}@media (min-width: 768px){ion-content{--padding-start: var(--page-content-padding-start, 48px);--padding-end: var(--page-content-padding-end, 48px)}}ion-content.has-header{--padding-top: 0}ion-content.max-width-optimized,ion-content.max-width-lg{--page-content-max-width: 1092px}ion-content.max-width-xl{--page-content-max-width: 1392px}ion-content.max-width-full{--page-content-max-width: 100%}ion-content::part(scroll){scrollbar-gutter:stable}ion-content .content-inner{max-width:var(--page-content-max-width, 792px);margin:0 auto;padding-bottom:40px}ion-content .fixed-content{width:100%;position:absolute;bottom:0;transform:initial}ion-content .fixed-content .content-inner{position:relative}.sticky-content-container{position:sticky;top:-13px;left:0;right:0;padding-top:1px;margin-block-end:24px;z-index:10}.sticky-content-container div{max-width:var(--page-content-max-width, 792px);margin:0 auto}.sticky-content-container:before,.sticky-content-container:after{content:\"\";position:absolute;left:calc(-1 * var(--padding-start));right:calc(-1 * var(--padding-end));bottom:0}.sticky-content-container:before{top:0;background-color:var(--background)}.sticky-content-container:after{height:1px}.sticky-content-container.content-pinned:before{background-color:#f3f3f3}.sticky-content-container.content-pinned:after{background-color:var(--kirby-medium)}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.FitHeadingDirective, selector: "h1[kirbyFitHeading],h2[kirbyFitHeading],h3[kirbyFitHeading]", inputs: ["kirbyFitHeading"] }, { kind: "component", type: i8.SpinnerComponent, selector: "kirby-spinner" }, { kind: "component", type: i5.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i5.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i5.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i5.IonBackButton, selector: "ion-back-button" }, { kind: "component", type: i5.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i5.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i5.IonRefresher, selector: "ion-refresher", inputs: ["closeDuration", "disabled", "mode", "pullFactor", "pullMax", "pullMin", "snapbackDuration"] }, { kind: "component", type: i5.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
623
632
|
}
|
|
624
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
633
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PageComponent, decorators: [{
|
|
625
634
|
type: Component,
|
|
626
|
-
args: [{ selector: 'kirby-page', changeDetection: ChangeDetectionStrategy.OnPush, providers: [IonicElementPartHelper], template: "<ion-header>\n <ion-toolbar\n [class.content-scrolled]=\"isContentScrolled\"\n [class.content-pinned]=\"isStickyContentPinned\"\n >\n <ion-buttons slot=\"start\">\n <ion-back-button\n text=\"\"\n [defaultHref]=\"defaultBackHref\"\n icon=\"assets/kirby/icons/svg/arrow-back.svg\"\n [style.visibility]=\"hideBackButton ? 'hidden' : null\"\n ></ion-back-button>\n </ion-buttons>\n <ion-title [class.slide-and-fade-in]=\"toolbarTitleVisible\">\n <div class=\"toolbar-title\">\n <ng-container *ngIf=\"!titleActionIconTemplate && !hasInteractiveTitle\">\n <ng-container *ngTemplateOutlet=\"toolbarTitleTemplate\"></ng-container>\n </ng-container>\n <span\n *ngIf=\"!!titleActionIconTemplate || hasInteractiveTitle\"\n [class.clickable]=\"hasInteractiveTitle\"\n [class.has-icon]=\"!!titleActionIconTemplate\"\n (click)=\"onTitleClick($event)\"\n >\n <span>\n <ng-container *ngTemplateOutlet=\"toolbarTitleTemplate\"></ng-container>\n </span>\n <ng-container *ngTemplateOutlet=\"titleActionIconTemplate\"></ng-container>\n </span>\n </div>\n </ion-title>\n <ion-buttons\n *ngIf=\"!!headerActionsTemplate\"\n class=\"hide\"\n slot=\"primary\"\n [class.fade-in]=\"toolbarActionsVisible\"\n >\n <ng-container\n *ngTemplateOutlet=\"headerActionsTemplate; injector: toolbarActionGroupInjector\"\n ></ng-container>\n </ion-buttons>\n <ion-buttons *ngIf=\"!!stickyActionsTemplate\" class=\"legacy-actions\" slot=\"primary\">\n <ng-container *ngTemplateOutlet=\"stickyActionsTemplate\"></ng-container>\n </ion-buttons>\n <ion-buttons *ngIf=\"!!fixedActionsTemplate\" class=\"legacy-actions\" slot=\"secondary\">\n <ng-container *ngTemplateOutlet=\"fixedActionsTemplate\"></ng-container>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content\n scrollEvents=\"true\"\n forceOverscroll=\"false\"\n [class]=\"getMaxWidthClasses()\"\n [class.has-header]=\"hasHeader\"\n>\n <ion-refresher\n *ngIf=\"refresh.observers.length > 0\"\n (ionRefresh)=\"delegateRefreshEvent($event)\"\n slot=\"fixed\"\n >\n <kirby-spinner></kirby-spinner>\n </ion-refresher>\n\n <!-- Page header -->\n <div class=\"page-header-container\" *ngIf=\"hasPageTitle && !hasHeader\">\n <div\n class=\"page-header\"\n [ngClass]=\"{\n 'text-center': titleAlignment === 'center',\n 'text-right': titleAlignment === 'right'\n }\"\n >\n <div #pageTitle class=\"page-title\" [class.has-actions]=\"!!pageActionsTemplate\">\n <ng-container\n *ngTemplateOutlet=\"customTitleTemplate || defaultPageTitleTemplate\"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"pageActionsTemplate || defaultPageActionsTemplate\"\n ></ng-container>\n </div>\n <div *ngIf=\"hasPageSubtitle\" class=\"page-subtitle\">\n <ng-container\n *ngTemplateOutlet=\"customSubtitleTemplate || defaultPageSubtitleTemplate\"\n ></ng-container>\n </div>\n </div>\n </div>\n\n <!-- Header -->\n <div class=\"page-header-container\" *ngIf=\"hasHeader\">\n <ng-content select=\"kirby-header\"></ng-content>\n </div>\n\n <!-- Sticky content -->\n <ng-container *ngIf=\"stickyContentTemplate\">\n <div\n #stickyContentContainer\n class=\"sticky-content-container\"\n [class.content-pinned]=\"isStickyContentPinned\"\n >\n <div>\n <ng-container *ngTemplateOutlet=\"stickyContentTemplate\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <!-- Content -->\n <div class=\"content-inner\">\n <ng-container\n *ngTemplateOutlet=\"customContentTemplate || defaultContentTemplate\"\n ></ng-container>\n </div>\n\n <div slot=\"fixed\" class=\"fixed-content\" *ngIf=\"fixedContentTemplate\">\n <div class=\"content-inner\">\n <ng-container *ngTemplateOutlet=\"fixedContentTemplate\"></ng-container>\n </div>\n </div>\n</ion-content>\n\n<ion-footer>\n <ng-content select=\"kirby-page-footer\"></ng-content>\n</ion-footer>\n\n<ng-template #defaultPageTitleTemplate>\n <h1 [kirbyFitHeading]=\"fitHeadingConfig\">\n <ng-container *ngTemplateOutlet=\"simpleTitleTemplate\"></ng-container>\n </h1>\n</ng-template>\n<ng-template #defaultPageSubtitleTemplate>\n <ng-container *ngTemplateOutlet=\"simpleSubtitleTemplate\"></ng-container>\n</ng-template>\n<ng-template #defaultPageActionsTemplate>\n <ng-content select=\"kirby-page-actions\"></ng-content>\n</ng-template>\n\n<ng-template #defaultContentTemplate>\n <ng-content select=\"kirby-page-content\"></ng-content>\n</ng-template>\n\n<ng-template #simpleTitleTemplate>{{ title }}</ng-template>\n<ng-template #simpleSubtitleTemplate>{{ subtitle }}</ng-template>\n<ng-template #simpleToolbarTitleTemplate>{{ toolbarTitle }}</ng-template>\n", styles: ["ion-header,ion-toolbar{--background: var(--kirby-background-color);margin:0 auto}ion-toolbar{--border-width: 0 !important;--padding-start: 16px;--padding-end: 16px;--padding-top: 0;--padding-bottom: 0;--ion-toolbar-color: var(--kirby-black);--min-height: 56px}@media (min-width: 768px){ion-toolbar{--padding-start: 24px;--padding-end: 24px;--min-height: 72px}}ion-toolbar:before{content:\"\";position:absolute;left:0;right:0;bottom:0;height:1px}ion-toolbar:before,ion-toolbar::part(background){transition:background-color 50ms linear}ion-toolbar.content-scrolled{--background: #f3f3f3}ion-toolbar.content-scrolled:before,ion-toolbar.content-scrolled::part(background){transition-duration:.2s}ion-toolbar.content-scrolled:not(.content-pinned):before{background-color:var(--kirby-medium)}ion-toolbar.content-pinned:before{transition:none}ion-toolbar ion-buttons[slot=start]{margin-right:8px}ion-toolbar ion-buttons[slot=primary],ion-toolbar ion-buttons[slot=secondary]{margin-left:8px}ion-toolbar ion-buttons[slot=secondary]{order:6}ion-toolbar ion-title{visibility:hidden;opacity:0;transform:translateY(10px);transition-property:opacity,transform;transition-duration:.15s;transition-timing-function:ease;padding-inline:calc(var(--action-buttons-width, 48px) + var(--padding-start))}ion-toolbar ion-title.slide-and-fade-in{visibility:visible;opacity:1;transform:translateY(0)}ion-toolbar ion-title .toolbar-title,ion-toolbar ion-title .toolbar-title>span.has-icon>span{text-overflow:ellipsis;white-space:nowrap;pointer-events:auto;overflow:hidden}ion-toolbar ion-title .toolbar-title{font-weight:700}ion-toolbar ion-title .toolbar-title span.clickable{cursor:pointer}ion-toolbar ion-title .toolbar-title span.has-icon{display:inline-flex;flex-direction:row;align-items:center;justify-content:center;max-width:100%}ion-toolbar ion-title .toolbar-title ::ng-deep>*{text-overflow:ellipsis;white-space:nowrap;pointer-events:auto;overflow:hidden}.hide{visibility:hidden;opacity:0;transition:opacity .1s linear}.hide.fade-in{visibility:inherit;opacity:1}ion-title{box-sizing:border-box;font-size:16px;font-weight:400}ion-back-button{--color: var(--kirby-black);--background: var(--kirby-white);--icon-font-size: 24px;height:40px;width:40px;opacity:1}@media (hover: hover){ion-back-button:hover{--state-layer-opacity: .08;--state-layer-background-color: var(--kirby-black);--background-hover: var(--state-layer-background-color);--background-hover-opacity: var(--state-layer-opacity)}}ion-back-button:active,ion-back-button.ion-activated{--state-layer-opacity: .16;--state-layer-background-color: var(--kirby-black);--background-activated: var(--state-layer-background-color);--background-activated-opacity: var(--state-layer-opacity)}ion-back-button::part(icon){margin-inline:0}ion-back-button::part(native){opacity:1;border-radius:999px;overflow:hidden}ion-back-button::part(native):after{transition:all 80ms linear 0ms}.page-header-container{max-width:var(--page-content-max-width, 792px);margin:0 auto}.page-header{margin-left:16px;margin-top:8px;margin-bottom:var(--kirby-page-title-margin-bottom, 40px)}.page-header .page-title.has-actions{display:flex;justify-content:space-between;align-items:flex-start}.page-header .page-title h1,.page-header .page-title h2,.page-header .page-title h3,.page-header .page-title h4,.page-header .page-title h5,.page-header .page-title h6{margin:0}.page-header .page-subtitle{margin-top:8px}.page-header.text-center{text-align:center;margin-left:0}.page-header.text-right{text-align:right}ion-content{--padding-top: 12px;--padding-start: var(--page-content-padding-start, 16px);--padding-end: var(--page-content-padding-end, 16px);--background: var(--kirby-background-color);--color: var(--kirby-black)}@media (min-width: 768px){ion-content{--padding-start: var(--page-content-padding-start, 48px);--padding-end: var(--page-content-padding-end, 48px)}}ion-content.has-header{--padding-top: 0}ion-content.max-width-optimized{--page-content-max-width: 1092px}ion-content.max-width-full{--page-content-max-width: 100%}ion-content::part(scroll){scrollbar-gutter:stable}ion-content .content-inner{max-width:var(--page-content-max-width, 792px);margin:0 auto;padding-bottom:40px}ion-content .fixed-content{width:100%;position:absolute;bottom:0;transform:initial}ion-content .fixed-content .content-inner{position:relative}.sticky-content-container{position:sticky;top:-13px;left:0;right:0;padding-top:1px;margin-block-end:24px;z-index:10}.sticky-content-container div{max-width:var(--page-content-max-width, 792px);margin:0 auto}.sticky-content-container:before,.sticky-content-container:after{content:\"\";position:absolute;left:calc(-1 * var(--padding-start));right:calc(-1 * var(--padding-end));bottom:0}.sticky-content-container:before{top:0;background-color:var(--background)}.sticky-content-container:after{height:1px}.sticky-content-container.content-pinned:before{background-color:#f3f3f3}.sticky-content-container.content-pinned:after{background-color:var(--kirby-medium)}\n"] }]
|
|
635
|
+
args: [{ selector: 'kirby-page', changeDetection: ChangeDetectionStrategy.OnPush, providers: [IonicElementPartHelper], template: "<ion-header>\n <ion-toolbar\n [class.content-scrolled]=\"isContentScrolled\"\n [class.content-pinned]=\"isStickyContentPinned\"\n >\n <ion-buttons slot=\"start\">\n <ion-back-button\n text=\"\"\n [defaultHref]=\"defaultBackHref\"\n icon=\"assets/kirby/icons/svg/arrow-back.svg\"\n [style.visibility]=\"hideBackButton ? 'hidden' : null\"\n ></ion-back-button>\n </ion-buttons>\n <ion-title [class.slide-and-fade-in]=\"toolbarTitleVisible\">\n <div class=\"toolbar-title\">\n <ng-container *ngIf=\"!titleActionIconTemplate && !hasInteractiveTitle\">\n <ng-container *ngTemplateOutlet=\"toolbarTitleTemplate\"></ng-container>\n </ng-container>\n <span\n *ngIf=\"!!titleActionIconTemplate || hasInteractiveTitle\"\n [class.clickable]=\"hasInteractiveTitle\"\n [class.has-icon]=\"!!titleActionIconTemplate\"\n (click)=\"onTitleClick($event)\"\n >\n <span>\n <ng-container *ngTemplateOutlet=\"toolbarTitleTemplate\"></ng-container>\n </span>\n <ng-container *ngTemplateOutlet=\"titleActionIconTemplate\"></ng-container>\n </span>\n </div>\n </ion-title>\n <ion-buttons\n *ngIf=\"!!headerActionsTemplate\"\n class=\"hide\"\n slot=\"primary\"\n [class.fade-in]=\"toolbarActionsVisible\"\n >\n <ng-container\n *ngTemplateOutlet=\"headerActionsTemplate; injector: toolbarActionGroupInjector\"\n ></ng-container>\n </ion-buttons>\n <ion-buttons *ngIf=\"!!stickyActionsTemplate\" class=\"legacy-actions\" slot=\"primary\">\n <ng-container *ngTemplateOutlet=\"stickyActionsTemplate\"></ng-container>\n </ion-buttons>\n <ion-buttons *ngIf=\"!!fixedActionsTemplate\" class=\"legacy-actions\" slot=\"secondary\">\n <ng-container *ngTemplateOutlet=\"fixedActionsTemplate\"></ng-container>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content\n scrollEvents=\"true\"\n forceOverscroll=\"false\"\n [class]=\"getMaxWidthClasses()\"\n [class.has-header]=\"hasHeader\"\n>\n <ion-refresher\n *ngIf=\"refresh.observers.length > 0\"\n (ionRefresh)=\"delegateRefreshEvent($event)\"\n slot=\"fixed\"\n >\n <kirby-spinner></kirby-spinner>\n </ion-refresher>\n\n <!-- Page header -->\n <div class=\"page-header-container\" *ngIf=\"hasPageTitle && !hasHeader\">\n <div\n class=\"page-header\"\n [ngClass]=\"{\n 'text-center': titleAlignment === 'center',\n 'text-right': titleAlignment === 'right'\n }\"\n >\n <div #pageTitle class=\"page-title\" [class.has-actions]=\"!!pageActionsTemplate\">\n <ng-container\n *ngTemplateOutlet=\"customTitleTemplate || defaultPageTitleTemplate\"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"pageActionsTemplate || defaultPageActionsTemplate\"\n ></ng-container>\n </div>\n <div *ngIf=\"hasPageSubtitle\" class=\"page-subtitle\">\n <ng-container\n *ngTemplateOutlet=\"customSubtitleTemplate || defaultPageSubtitleTemplate\"\n ></ng-container>\n </div>\n </div>\n </div>\n\n <!-- Header -->\n <div class=\"page-header-container\" *ngIf=\"hasHeader\">\n <ng-content select=\"kirby-header\"></ng-content>\n </div>\n\n <!-- Sticky content -->\n <ng-container *ngIf=\"stickyContentTemplate\">\n <div\n #stickyContentContainer\n class=\"sticky-content-container\"\n [class.content-pinned]=\"isStickyContentPinned\"\n >\n <div>\n <ng-container *ngTemplateOutlet=\"stickyContentTemplate\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <!-- Content -->\n <div class=\"content-inner\">\n <ng-container\n *ngTemplateOutlet=\"customContentTemplate || defaultContentTemplate\"\n ></ng-container>\n </div>\n\n <div slot=\"fixed\" class=\"fixed-content\" *ngIf=\"fixedContentTemplate\">\n <div class=\"content-inner\">\n <ng-container *ngTemplateOutlet=\"fixedContentTemplate\"></ng-container>\n </div>\n </div>\n</ion-content>\n\n<ion-footer>\n <ng-content select=\"kirby-page-footer\"></ng-content>\n</ion-footer>\n\n<ng-template #defaultPageTitleTemplate>\n <h1 [kirbyFitHeading]=\"fitHeadingConfig\">\n <ng-container *ngTemplateOutlet=\"simpleTitleTemplate\"></ng-container>\n </h1>\n</ng-template>\n<ng-template #defaultPageSubtitleTemplate>\n <ng-container *ngTemplateOutlet=\"simpleSubtitleTemplate\"></ng-container>\n</ng-template>\n<ng-template #defaultPageActionsTemplate>\n <ng-content select=\"kirby-page-actions\"></ng-content>\n</ng-template>\n\n<ng-template #defaultContentTemplate>\n <ng-content select=\"kirby-page-content\"></ng-content>\n</ng-template>\n\n<ng-template #simpleTitleTemplate>{{ title }}</ng-template>\n<ng-template #simpleSubtitleTemplate>{{ subtitle }}</ng-template>\n<ng-template #simpleToolbarTitleTemplate>{{ toolbarTitle }}</ng-template>\n", styles: ["ion-header,ion-toolbar{--background: var(--kirby-background-color);margin:0 auto}ion-toolbar{--border-width: 0 !important;--padding-start: 16px;--padding-end: 16px;--padding-top: 0;--padding-bottom: 0;--ion-toolbar-color: var(--kirby-black);--min-height: 56px}@media (min-width: 768px){ion-toolbar{--padding-start: 24px;--padding-end: 24px;--min-height: 72px}}ion-toolbar:before{content:\"\";position:absolute;left:0;right:0;bottom:0;height:1px}ion-toolbar:before,ion-toolbar::part(background){transition:background-color 50ms linear}ion-toolbar.content-scrolled{--background: #f3f3f3}ion-toolbar.content-scrolled:before,ion-toolbar.content-scrolled::part(background){transition-duration:.2s}ion-toolbar.content-scrolled:not(.content-pinned):before{background-color:var(--kirby-medium)}ion-toolbar.content-pinned:before{transition:none}ion-toolbar ion-buttons[slot=start]{margin-right:8px}ion-toolbar ion-buttons[slot=primary],ion-toolbar ion-buttons[slot=secondary]{margin-left:8px}ion-toolbar ion-buttons[slot=secondary]{order:6}ion-toolbar ion-title{visibility:hidden;opacity:0;transform:translateY(10px);transition-property:opacity,transform;transition-duration:.15s;transition-timing-function:ease;padding-inline:calc(var(--action-buttons-width, 48px) + var(--padding-start))}ion-toolbar ion-title.slide-and-fade-in{visibility:visible;opacity:1;transform:translateY(0)}ion-toolbar ion-title .toolbar-title,ion-toolbar ion-title .toolbar-title>span.has-icon>span{text-overflow:ellipsis;white-space:nowrap;pointer-events:auto;overflow:hidden}ion-toolbar ion-title .toolbar-title{font-weight:700}ion-toolbar ion-title .toolbar-title span.clickable{cursor:pointer}ion-toolbar ion-title .toolbar-title span.has-icon{display:inline-flex;flex-direction:row;align-items:center;justify-content:center;max-width:100%}ion-toolbar ion-title .toolbar-title ::ng-deep>*{text-overflow:ellipsis;white-space:nowrap;pointer-events:auto;overflow:hidden}.hide{visibility:hidden;opacity:0;transition:opacity .1s linear}.hide.fade-in{visibility:inherit;opacity:1}ion-title{box-sizing:border-box;font-size:16px;font-weight:400}ion-back-button{--color: var(--kirby-black);--background: var(--kirby-white);--icon-font-size: 24px;height:40px;width:40px;opacity:1}@media (hover: hover){ion-back-button:hover{--state-layer-opacity: .08;--state-layer-background-color: var(--kirby-black);--background-hover: var(--state-layer-background-color);--background-hover-opacity: var(--state-layer-opacity)}}ion-back-button:active,ion-back-button.ion-activated{--state-layer-opacity: .16;--state-layer-background-color: var(--kirby-black);--background-activated: var(--state-layer-background-color);--background-activated-opacity: var(--state-layer-opacity)}ion-back-button::part(icon){margin-inline:0}ion-back-button::part(native){opacity:1;border-radius:999px;overflow:hidden}ion-back-button::part(native):after{transition:all 80ms linear 0ms}.page-header-container{max-width:var(--page-content-max-width, 792px);margin:0 auto}.page-header{margin-left:16px;margin-top:8px;margin-bottom:var(--kirby-page-title-margin-bottom, 40px)}.page-header .page-title.has-actions{display:flex;justify-content:space-between;align-items:flex-start}.page-header .page-title h1,.page-header .page-title h2,.page-header .page-title h3,.page-header .page-title h4,.page-header .page-title h5,.page-header .page-title h6{margin:0}.page-header .page-subtitle{margin-top:8px}.page-header.text-center{text-align:center;margin-left:0}.page-header.text-right{text-align:right}ion-content{--padding-top: 12px;--padding-start: var(--page-content-padding-start, 16px);--padding-end: var(--page-content-padding-end, 16px);--background: var(--kirby-background-color);--color: var(--kirby-black)}@media (min-width: 768px){ion-content{--padding-start: var(--page-content-padding-start, 48px);--padding-end: var(--page-content-padding-end, 48px)}}ion-content.has-header{--padding-top: 0}ion-content.max-width-optimized,ion-content.max-width-lg{--page-content-max-width: 1092px}ion-content.max-width-xl{--page-content-max-width: 1392px}ion-content.max-width-full{--page-content-max-width: 100%}ion-content::part(scroll){scrollbar-gutter:stable}ion-content .content-inner{max-width:var(--page-content-max-width, 792px);margin:0 auto;padding-bottom:40px}ion-content .fixed-content{width:100%;position:absolute;bottom:0;transform:initial}ion-content .fixed-content .content-inner{position:relative}.sticky-content-container{position:sticky;top:-13px;left:0;right:0;padding-top:1px;margin-block-end:24px;z-index:10}.sticky-content-container div{max-width:var(--page-content-max-width, 792px);margin:0 auto}.sticky-content-container:before,.sticky-content-container:after{content:\"\";position:absolute;left:calc(-1 * var(--padding-start));right:calc(-1 * var(--padding-end));bottom:0}.sticky-content-container:before{top:0;background-color:var(--background)}.sticky-content-container:after{height:1px}.sticky-content-container.content-pinned:before{background-color:#f3f3f3}.sticky-content-container.content-pinned:after{background-color:var(--kirby-medium)}\n"] }]
|
|
627
636
|
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Injector }, { type: i0.Renderer2 }, { type: i2.Router }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i1.ModalNavigationService }, { type: i3.ResizeObserverService }, { type: i4.TabsComponent, decorators: [{
|
|
628
637
|
type: Optional
|
|
629
638
|
}, {
|
|
@@ -731,4 +740,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImpor
|
|
|
731
740
|
type: HostListener,
|
|
732
741
|
args: [`window:${selectedTabClickEvent}`]
|
|
733
742
|
}] } });
|
|
734
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2Rlc2lnbnN5c3RlbS9wYWdlL3NyYy9wYWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvZGVzaWduc3lzdGVtL3BhZ2Uvc3JjL3BhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sY0FBYyxFQUNkLFFBQVEsRUFDUixLQUFLLEVBQ0wsTUFBTSxFQUlOLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFDVCxtQkFBbUIsRUFFbkIsUUFBUSxFQUNSLFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pFLE9BQU8sRUFDTCxhQUFhLEVBQ2IsVUFBVSxFQUNWLFVBQVUsRUFDVixTQUFTLEVBQ1QsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsYUFBYSxHQUNkLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRS9DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RixPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RSxPQUFPLEVBQUUs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MEJBQTBCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBRzlFLE1BQU07c0JBREwsWUFBWTt1QkFBQyxlQUFlO2dCQWlnQjdCLG1CQUFtQjtzQkFEbEIsWUFBWTt1QkFBQyx5QkFBeUIsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFXbkQsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLHlCQUF5QjtnQkFNdkMsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLFVBQVUscUJBQXFCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRDaGVja2VkLFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3QsXG4gIEluamVjdGlvblRva2VuLFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBSZW5kZXJlcjIsXG4gIFJlbmRlcmVyU3R5bGVGbGFnczIsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFNraXBTZWxmLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgTmF2aWdhdGlvblN0YXJ0LCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgSW9uQmFja0J1dHRvbixcbiAgSW9uQnV0dG9ucyxcbiAgSW9uQ29udGVudCxcbiAgSW9uRm9vdGVyLFxuICBJb25IZWFkZXIsXG4gIElvblJvdXRlck91dGxldCxcbiAgSW9uVG9vbGJhcixcbiAgTmF2Q29udHJvbGxlcixcbn0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBjb21wb25lbnRPblJlYWR5IH0gZnJvbSAnQGlvbmljL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBTY3JvbGxEZXRhaWwgfSBmcm9tICdAaW9uaWMvY29yZSc7XG5pbXBvcnQgeyBzZWxlY3RlZFRhYkNsaWNrRXZlbnQsIFRhYnNDb21wb25lbnQgfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL3RhYnMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIG1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBBQ1RJT05HUk9VUF9DT05GSUcsIEFjdGlvbkdyb3VwQ29uZmlnIH0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9hY3Rpb24tZ3JvdXAnO1xuaW1wb3J0IHtcbiAgSGVhZGVyQWN0aW9uc0RpcmVjdGl2ZSxcbiAgSGVhZGVyQ29tcG9uZW50LFxuICBIZWFkZXJUaXRsZUFjdGlvbkljb25EaXJlY3RpdmUsXG59IGZyb20gJ0BraXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vaGVhZGVyJztcbmltcG9ydCB7IElvbmljRWxlbWVudFBhcnRIZWxwZXIsIEtpcmJ5QW5pbWF0aW9uIH0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9oZWxwZXJzJztcbmltcG9ydCB7XG4gIE1vZGFsRWxlbWVudENvbXBvbmVudCxcbiAgTW9kYWxFbGVtZW50c0FkdmVydGlzZXIsXG4gIE1vZGFsRWxlbWVudFR5cGUsXG4gIE1vZGFsTmF2aWdhdGlvblNlcnZpY2UsXG59IGZyb20gJ0BraXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vbW9kYWwnO1xuaW1wb3J0IHsgRml0SGVhZGluZ0NvbmZpZywgUmVzaXplT2JzZXJ2ZXJTZXJ2aWNlIH0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9zaGFyZWQnO1xuXG4vKipcbiAqIFNwZWNpZnkgc2Nyb2xsIGV2ZW50IGRlYm91bmNlIHRpbWUgaW4gbXMgYW5kIHNjcm9sbGVkIG9mZnNldCBmcm9tIHRvcCBpbiBwaXhlbHNcbiAqL1xuY29uc3QgY29udGVudFNjcm9sbERlYm91bmNlVGltZUluTVMgPSAxMDtcbmNvbnN0IGNvbnRlbnRTY3JvbGxlZE9mZnNldEluUGl4ZWxzID0gNDtcblxudHlwZSBzdGlja3lDb25maWcgPSB7IHN0aWNreTogYm9vbGVhbiB9O1xudHlwZSBmaXhlZENvbmZpZyA9IHsgZml4ZWQ6IGJvb2xlYW4gfTtcbnR5cGUgTWF4V2lkdGggPSAnZGVmYXVsdCcgfCAnc3RhbmRhcmQnIHwgJ29wdGltaXplZCcgfCAnZnVsbCc7XG5cbmNvbnN0IFBBR0VfV0lEVEhfU1RBTkRBUkRfREVQUkVDQVRJT05fV0FSTklORyA9XG4gICdEZXByZWNhdGlvbiB3YXJuaW5nOiBUaGUgc3VwcG9ydCBmb3IgXCJzdGFuZGFyZFwiIGFzIGEgbWF4V2lkdGggb3B0aW9uIHdpbGwgYmUgcmVtb3ZlZCBpbiBLaXJieSB2ZXJzaW9uIDEwLiBBZnRlciB0aGF0IHRoZSBcInN0YW5kYXJkXCIgd2lkdGggd2lsbCBiZSB0aGUgZGVmYXVsdCB3aWR0aCBhbmQgZG9lcyBub3QgbmVlZCB0byBiZSBzcGVjaWZpZWQuJztcblxuZXhwb3J0IGNvbnN0IFBBR0VfQkFDS19CVVRUT05fT1ZFUlJJREUgPSBuZXcgSW5qZWN0aW9uVG9rZW48UGFnZUJhY2tCdXR0b25PdmVycmlkZT4oXG4gICdwYWdlLWJhY2stYnV0dG9uLW92ZXJyaWRlJ1xuKTtcblxuZXhwb3J0IGludGVyZmFjZSBQYWdlQmFja0J1dHRvbk92ZXJyaWRlIHtcbiAgbmF2aWdhdGVCYWNrOiAoXG4gICAgcm91dGVyT3V0bGV0OiBJb25Sb3V0ZXJPdXRsZXQsXG4gICAgbmF2Q3RybDogTmF2Q29udHJvbGxlcixcbiAgICBkZWZhdWx0QmFja0hyZWY6IHN0cmluZ1xuICApID0+IHZvaWQ7XG59XG5cbi8qKlxuICogRXZlbnQgZW1pdHRlZCB3aGVuIFwicHVsbC10by1yZWZyZXNoXCIgYmVnaW5zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1bGxUb1JlZnJlc2hFdmVudCB7XG4gIC8qKlxuICAgKiBJbnZva2UgdGhpcyBjYWxsYmFjay1tZXRob2Qgd2hlbiBhY3Rpb24gdG8gcGVyZm9ybSB1cG9uIFwicHVsbC10by1yZWZyZXNoXCIgY29tcGxldGVzLlxuICAgKi9cbiAgY29tcGxldGUoKTtcbn1cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2tpcmJ5UGFnZVRpdGxlXScsXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VUaXRsZURpcmVjdGl2ZSB7fVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdba2lyYnlQYWdlU3VidGl0bGVdJyxcbn0pXG5leHBvcnQgY2xhc3MgUGFnZVN1YnRpdGxlRGlyZWN0aXZlIHt9XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1traXJieVBhZ2VUb29sYmFyVGl0bGVdJyxcbn0pXG5leHBvcnQgY2xhc3MgUGFnZVRvb2xiYXJUaXRsZURpcmVjdGl2ZSB7fVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdba2lyYnlQYWdlQWN0aW9uc10nLFxufSlcbmV4cG9ydCBjbGFzcyBQYWdlQWN0aW9uc0RpcmVjdGl2ZSB7XG4gIEBJbnB1dCgna2lyYnlQYWdlQWN0aW9ucycpIGNvbmZpZzogc3RpY2t5Q29uZmlnIHwgZml4ZWRDb25maWc7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RpY2t5RGVmYXVsdCA9IHRydWU7XG4gIHByaXZhdGUgcmVhZG9ubHkgZml4ZWREZWZhdWx0ID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ0RlZmluaW5nIFBhZ2UgQWN0aW9ucyB2aWEgKmtpcmJ5UGFnZUFjdGlvbnMgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIEtpcmJ5IHYxMC4gQSBLaXJieSBIZWFkZXIgd2l0aCBBY3Rpb25zIHNob3VsZCBiZSB1c2VkIGluc3RlYWQsIGFzIGl0IGhhcyBhbiBpbXByb3ZlZCBBUEkgd2l0aCBiZXR0ZXIgc3VwcG9ydCBmb3IgcmVzcG9uc2l2ZSBsYXlvdXRzLidcbiAgICApO1xuICB9XG5cbiAgZ2V0IGlzU3RpY2t5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZyA/ICh0aGlzLmNvbmZpZyBhcyBzdGlja3lDb25maWcpLnN0aWNreSA6IHRoaXMuc3RpY2t5RGVmYXVsdDtcbiAgfVxuXG4gIGdldCBpc0ZpeGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZyA/ICh0aGlzLmNvbmZpZyBhcyBmaXhlZENvbmZpZykuZml4ZWQgOiB0aGlzLmZpeGVkRGVmYXVsdDtcbiAgfVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdba2lyYnlQYWdlQ29udGVudF0nLFxufSlcbmV4cG9ydCBjbGFzcyBQYWdlQ29udGVudERpcmVjdGl2ZSB7XG4gIEBJbnB1dCgna2lyYnlQYWdlQ29udGVudCcpIGNvbmZpZzogZml4ZWRDb25maWc7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7fVxuXG4gIGdldCBpc0ZpeGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5maXhlZDtcbiAgfVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdba2lyYnlQYWdlU3RpY2t5Q29udGVudF0nLFxufSlcbmV4cG9ydCBjbGFzcyBQYWdlU3RpY2t5Q29udGVudERpcmVjdGl2ZSB7fVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdraXJieS1wYWdlLXByb2dyZXNzJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgbWFyZ2luLWlubGluZS1lbmQ6IDRweDsgLyogQWRkIHNwYWNpbmcgdG8gcG90ZW50aWFsIHN1cHBsZW1lbnRhcnkgYWN0aW9uIGJ1dHRvbiAqL1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VQcm9ncmVzc0NvbXBvbmVudCBleHRlbmRzIE1vZGFsRWxlbWVudENvbXBvbmVudCB7XG4gIC8vIFRPRE86IEZpbmQgYWx0ZXJuYXRpdmUgaW1wbGVtZW50YXRpb24sIHdoaWNoIGFsaWducyB3aXRoIGZ1dHVyZSBwYWdlIGNvbmZpZ3VyYXRpb24gLyBjb25zdW1wdGlvblxuICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIHdhcyBjaG9zZW4gb3ZlciBleHBhbmRpbmcgYG1vdmVDaGlsZGAgbWV0aG9kIGluIGNvbXBvbmVudCB3cmFwcGVyIHdpdGggeWV0IGFub3RoZXIgc2NlbmFyaW9cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnNsb3QnKSBzbG90ID0gJ3N0YXJ0JztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBtb2RhbEVsZW1lbnRzQWR2ZXJ0aXNlcjogTW9kYWxFbGVtZW50c0FkdmVydGlzZXIsXG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD5cbiAgKSB7XG4gICAgc3VwZXIoTW9kYWxFbGVtZW50VHlwZS5QQUdFX1BST0dSRVNTLCBlbGVtZW50UmVmLCBtb2RhbEVsZW1lbnRzQWR2ZXJ0aXNlcik7XG4gIH1cbn1cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2tpcmJ5LXBhZ2UtdGl0bGUnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgUGFnZVRpdGxlQ29tcG9uZW50IGV4dGVuZHMgTW9kYWxFbGVtZW50Q29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoXG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgQE9wdGlvbmFsKCkgbW9kYWxFbGVtZW50c0FkdmVydGlzZXI6IE1vZGFsRWxlbWVudHNBZHZlcnRpc2VyXG4gICkge1xuICAgIHN1cGVyKE1vZGFsRWxlbWVudFR5cGUuVElUTEUsIGVsZW1lbnRSZWYsIG1vZGFsRWxlbWVudHNBZHZlcnRpc2VyKTtcbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdraXJieS1wYWdlLWNvbnRlbnQnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgUGFnZUNvbnRlbnRDb21wb25lbnQge31cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAna2lyYnktcGFnZS1hY3Rpb25zJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJidXR0b25ba2lyYnktYnV0dG9uXVwiPjwvbmctY29udGVudD5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgY29sdW1uLWdhcDogOHB4O1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VBY3Rpb25zQ29tcG9uZW50IHt9XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2tpcmJ5LXBhZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vcGFnZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3BhZ2UuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW0lvbmljRWxlbWVudFBhcnRIZWxwZXJdLFxufSlcbmV4cG9ydCBjbGFzcyBQYWdlQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudENoZWNrZWQsIE9uQ2hhbmdlc1xue1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xuICBASW5wdXQoKSBzdWJ0aXRsZTogc3RyaW5nO1xuICBASW5wdXQoKSB0b29sYmFyVGl0bGU6IHN0cmluZztcbiAgQElucHV0KCkgdGl0bGVBbGlnbm1lbnQ6ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JyA9ICdsZWZ0JztcbiAgQElucHV0KCkgZGVmYXVsdEJhY2tIcmVmOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGhpZGVCYWNrQnV0dG9uOiBib29sZWFuO1xuICBASW5wdXQoKSB0aXRsZU1heExpbmVzOiBudW1iZXI7XG4gIEBJbnB1dCgpIGhhc0ludGVyYWN0aXZlVGl0bGU6IGJvb2xlYW47XG5cbiAgQElucHV0KCkgc2V0IG1heFdpZHRoKHdpZHRoOiBNYXhXaWR0aCkge1xuICAgIGlmICh3aWR0aCA9PT0gJ3N0YW5kYXJkJykge1xuICAgICAgY29uc29sZS53YXJuKFBBR0VfV0lEVEhfU1RBTkRBUkRfREVQUkVDQVRJT05fV0FSTklORyk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWF4V2lkdGggPSB3aWR0aDtcbiAgfVxuXG4gIGdldCBtYXhXaWR0aCgpOiBNYXhXaWR0aCB7XG4gICAgcmV0dXJuIHRoaXMuX21heFdpZHRoO1xuICB9XG5cbiAgcHJpdmF0ZSBfbWF4V2lkdGg6IE1heFdpZHRoID0gJ2RlZmF1bHQnO1xuXG4gIHByaXZhdGUgX3RhYkJhckJvdHRvbUhpZGRlbjogYm9vbGVhbjtcbiAgcHVibGljIGdldCB0YWJCYXJCb3R0b21IaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYkJhckJvdHRvbUhpZGRlbjtcbiAgfVxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHRhYkJhckJvdHRvbUhpZGRlbih2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLnRhYnNDb21wb25lbnQpIHtcbiAgICAgIC8vIGFzIHdlIGFyZSBzZXR0aW5nIGEgY2xhc3Mgb24gdGFicywgd2UgbmVlZCB0aGlzIHRvIGhhcHBlbiBpbiBhIHNlcGFyYXRlIGNkIGN5Y2xlXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy50YWJzQ29tcG9uZW50LnRhYkJhckJvdHRvbUhpZGRlbiA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuX3RhYkJhckJvdHRvbUhpZGRlbiA9IHZhbHVlO1xuICB9XG5cbiAgQE91dHB1dCgpIGVudGVyID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgbGVhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSByZWZyZXNoID0gbmV3IEV2ZW50RW1pdHRlcjxQdWxsVG9SZWZyZXNoRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBiYWNrQnV0dG9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICBAT3V0cHV0KCkgdG9vbGJhclRpdGxlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFBvaW50ZXJFdmVudD4oKTtcblxuICBAVmlld0NoaWxkKElvbkNvbnRlbnQsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgY29udGVudD86IElvbkNvbnRlbnQ7XG4gIEBWaWV3Q2hpbGQoSW9uQ29udGVudCwgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHJpdmF0ZSBpb25Db250ZW50RWxlbWVudDogRWxlbWVudFJlZjxIVE1MSW9uQ29udGVudEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKElvbkhlYWRlciwgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgaW9uSGVhZGVyRWxlbWVudDogRWxlbWVudFJlZjxIVE1MSW9uSGVhZGVyRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoSW9uRm9vdGVyLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwcml2YXRlIGlvbkZvb3RlckVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTElvbkZvb3RlckVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKElvblRvb2xiYXIsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHByaXZhdGUgaW9uVG9vbGJhckVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTElvblRvb2xiYXJFbGVtZW50PjtcbiAgQFZpZXdDaGlsZHJlbihJb25CdXR0b25zLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHJpdmF0ZSBpb25Ub29sYmFyQnV0dG9uc0VsZW1lbnQ6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxJb25CdXR0b25zRWxlbWVudD4+O1xuICBAVmlld0NoaWxkKElvbkJhY2tCdXR0b24sIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwcml2YXRlIGJhY2tCdXR0b246IElvbkJhY2tCdXR0b247XG4gIEBWaWV3Q2hpbGQoJ3BhZ2VUaXRsZScsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwcml2YXRlIHBhZ2VUaXRsZTogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc3RpY2t5Q29udGVudENvbnRhaW5lcicsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwcml2YXRlIHN0aWNreUNvbnRlbnRDb250YWluZXI6IEVsZW1lbnRSZWY7XG5cbiAgQFZpZXdDaGlsZCgnc2ltcGxlVGl0bGVUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBwcml2YXRlIHNpbXBsZVRpdGxlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoJ3NpbXBsZVRvb2xiYXJUaXRsZVRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHByaXZhdGUgc2ltcGxlVG9vbGJhclRpdGxlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBDb250ZW50Q2hpbGQoUGFnZVRvb2xiYXJUaXRsZURpcmVjdGl2ZSwgeyBzdGF0aWM6IGZhbHNlLCByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBwcml2YXRlIGN1c3RvbVRvb2xiYXJUaXRsZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAQ29udGVudENoaWxkKFBhZ2VUaXRsZURpcmVjdGl2ZSwgeyBzdGF0aWM6IGZhbHNlLCByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBjdXN0b21UaXRsZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAQ29udGVudENoaWxkKFBhZ2VTdWJ0aXRsZURpcmVjdGl2ZSwgeyBzdGF0aWM6IGZhbHNlLCByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBjdXN0b21TdWJ0aXRsZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAQ29udGVudENoaWxkcmVuKFBhZ2VBY3Rpb25zRGlyZWN0aXZlKVxuICBjdXN0b21BY3Rpb25zOiBRdWVyeUxpc3Q8UGFnZUFjdGlvbnNEaXJlY3RpdmU+O1xuICBAQ29udGVudENoaWxkcmVuKFBhZ2VDb250ZW50RGlyZWN0aXZlKVxuICBwcml2YXRlIGN1c3RvbUNvbnRlbnQ6IFF1ZXJ5TGlzdDxQYWdlQ29udGVudERpcmVjdGl2ZT47XG4gIEBDb250ZW50Q2hpbGQoUGFnZVN0aWNreUNvbnRlbnREaXJlY3RpdmUsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgcHJpdmF0ZSBzdGlja3lDb250ZW50UmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAQ29udGVudENoaWxkKEhlYWRlckNvbXBvbmVudClcbiAgaGVhZGVyPzogSGVhZGVyQ29tcG9uZW50O1xuXG4gIGhhc0hlYWRlcjogYm9vbGVhbjtcbiAgaGFzUGFnZVRpdGxlOiBib29sZWFuO1xuICBoYXNQYWdlU3VidGl0bGU6IGJvb2xlYW47XG4gIHRvb2xiYXJUaXRsZVZpc2libGU6IGJvb2xlYW47XG4gIHRvb2xiYXJBY3Rpb25zVmlzaWJsZTogYm9vbGVhbjtcbiAgaXNDb250ZW50U2Nyb2xsZWQ6IGJvb2xlYW47XG4gIGlzU3RpY2t5Q29udGVudFBpbm5lZCA9IGZhbHNlO1xuXG4gIGZpdEhlYWRpbmdDb25maWc6IEZpdEhlYWRpbmdDb25maWc7XG5cbiAgdG9vbGJhclRpdGxlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIGN1c3RvbUNvbnRlbnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgcGFnZUFjdGlvbnNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgZml4ZWRDb250ZW50VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIHN0aWNreUFjdGlvbnNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgZml4ZWRBY3Rpb25zVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIHN0aWNreUNvbnRlbnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8UGFnZVN0aWNreUNvbnRlbnREaXJlY3RpdmU+O1xuICBoZWFkZXJBY3Rpb25zVGVtcGxhdGU6IFRlbXBsYXRlUmVmPEhlYWRlckFjdGlvbnNEaXJlY3RpdmU+O1xuICB0aXRsZUFjdGlvbkljb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8SGVhZGVyVGl0bGVBY3Rpb25JY29uRGlyZWN0aXZlPjtcblxuICBwcml2YXRlIHRpdGxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXI/OiBJbnRlcnNlY3Rpb25PYnNlcnZlcjtcbiAgcHJpdmF0ZSBzdGlja3lBY3Rpb25zSW50ZXJzZWN0aW9uT2JzZXJ2ZXI/OiBJbnRlcnNlY3Rpb25PYnNlcnZlcjtcbiAgcHJpdmF0ZSBzdGlja3lDb250ZW50SW50ZXJzZWN0aW9uT2JzZXJ2ZXI/OiBJbnRlcnNlY3Rpb25PYnNlcnZlcjtcbiAgcHJpdmF0ZSBpc09ic2VydmluZ1RpdGxlID0gZmFsc2U7XG4gIHByaXZhdGUgaXNPYnNlcnZpbmdBY3Rpb25zID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSB1cmw6IHN0cmluZztcbiAgcHJpdmF0ZSBpc0FjdGl2ZTogYm9vbGVhbjtcblxuICBwcml2YXRlIG5nT25EZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgY29udGVudFNjcm9sbGVkJDogT2JzZXJ2YWJsZTxTY3JvbGxEZXRhaWw+O1xuXG4gIHByaXZhdGUgbmF2aWdhdGlvblN0YXJ0JDogT2JzZXJ2YWJsZTxOYXZpZ2F0aW9uU3RhcnQ+ID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoXG4gICAgZmlsdGVyKChldmVudCk6IGV2ZW50IGlzIE5hdmlnYXRpb25TdGFydCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCksXG4gICAgdGFrZVVudGlsKHRoaXMubmdPbkRlc3Ryb3kkKVxuICApO1xuXG4gIHByaXZhdGUgbmF2aWdhdGlvbkVuZCQ6IE9ic2VydmFibGU8TmF2aWdhdGlvbkVuZD4gPSB0aGlzLnJvdXRlci5ldmVudHMucGlwZShcbiAgICBmaWx0ZXIoKGV2ZW50KTogZXZlbnQgaXMgTmF2aWdhdGlvbkVuZCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpLFxuICAgIHRha2VVbnRpbCh0aGlzLm5nT25EZXN0cm95JClcbiAgKTtcblxuICB0b29sYmFyQWN0aW9uR3JvdXBJbmplY3RvcjogSW5qZWN0b3I7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgem9uZTogTmdab25lLFxuICAgIHByaXZhdGUgbW9kYWxOYXZpZ2F0aW9uU2VydmljZTogTW9kYWxOYXZpZ2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyU2VydmljZTogUmVzaXplT2JzZXJ2ZXJTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIHByaXZhdGUgdGFic0NvbXBvbmVudDogVGFic0NvbXBvbmVudCxcbiAgICBAT3B0aW9uYWwoKVxuICAgIEBJbmplY3QoUEFHRV9CQUNLX0JVVFRPTl9PVkVSUklERSlcbiAgICBwcml2YXRlIGJhY2tCdXR0b25PdmVycmlkZTogUGFnZUJhY2tCdXR0b25PdmVycmlkZSxcbiAgICBAT3B0aW9uYWwoKVxuICAgIHByaXZhdGUgcm91dGVyT3V0bGV0OiBJb25Sb3V0ZXJPdXRsZXQsXG4gICAgQE9wdGlvbmFsKClcbiAgICBwcml2YXRlIG5hdkN0cmw6IE5hdkNvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBpb25pY0VsZW1lbnRQYXJ0SGVscGVyOiBJb25pY0VsZW1lbnRQYXJ0SGVscGVyXG4gICkge31cblxuICBwcml2YXRlIGNvbnRlbnRSZWFkeVByb21pc2U6IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgd2hlbkNvbnRlbnRSZWFkeSgpIHtcbiAgICBpZiAoIXRoaXMuY29udGVudFJlYWR5UHJvbWlzZSkge1xuICAgICAgdGhpcy5jb250ZW50UmVhZHlQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlclNlcnZpY2Uub2JzZXJ2ZSh0aGlzLmlvbkNvbnRlbnRFbGVtZW50LCAoZW50cnkpID0+IHtcbiAgICAgICAgICBpZiAoZW50cnkuY29udGVudFJlY3QuaGVpZ2h0ID4gMCkge1xuICAgICAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlclNlcnZpY2UudW5vYnNlcnZlKHRoaXMuaW9uQ29udGVudEVsZW1lbnQpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29udGVudFJlYWR5UHJvbWlzZTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVtb3ZlV3JhcHBlcigpO1xuICAgIHRoaXMuaW9uaWNFbGVtZW50UGFydEhlbHBlci5zZXRQYXJ0KFxuICAgICAgJ2JhY2tncm91bmQnLFxuICAgICAgdGhpcy5pb25Ub29sYmFyRWxlbWVudCxcbiAgICAgICcudG9vbGJhci1iYWNrZ3JvdW5kJ1xuICAgICk7XG5cbiAgICBjb25zdCBhY3Rpb25Hcm91cENvbmZpZzogQWN0aW9uR3JvdXBDb25maWcgPSB7XG4gICAgICBpc0NvbmRlbnNlZDogdHJ1ZSxcbiAgICAgIG1heFZpc2libGVBY3Rpb25zOiAxLFxuICAgIH07XG4gICAgdGhpcy50b29sYmFyQWN0aW9uR3JvdXBJbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IEFDVElPTkdST1VQX0NPTkZJRyxcbiAgICAgICAgICB1c2VWYWx1ZTogYWN0aW9uR3JvdXBDb25maWcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgcGFyZW50OiB0aGlzLmluamVjdG9yLFxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLnRpdGxlTWF4TGluZXMpIHtcbiAgICAgIHRoaXMuZml0SGVhZGluZ0NvbmZpZyA9IHtcbiAgICAgICAgbWF4TGluZXM6IGNoYW5nZXMudGl0bGVNYXhMaW5lcy5jdXJyZW50VmFsdWUsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5zdWJ0aXRsZSAmJiAhY2hhbmdlcy5zdWJ0aXRsZS5pc0ZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLnN1YnRpdGxlID0gY2hhbmdlcy50aXRsZS5jdXJyZW50VmFsdWU7XG4gICAgICB0aGlzLmhhc1BhZ2VTdWJ0aXRsZSA9IHRoaXMuc3VidGl0bGUgIT09IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMuY29udGVudFNjcm9sbGVkJCA9IHRoaXMuY29udGVudC5pb25TY3JvbGwucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKGNvbnRlbnRTY3JvbGxEZWJvdW5jZVRpbWVJbk1TKSxcbiAgICAgICAgbWFwKChldmVudCkgPT4gZXZlbnQuZGV0YWlsKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubmdPbkRlc3Ryb3kkKVxuICAgICAgKTtcblxuICAgICAgdGhpcy5jb250ZW50U2Nyb2xsZWQkLnN1YnNjcmliZSgoc2Nyb2xsSW5mbzogU2Nyb2xsRGV0YWlsKSA9PiB7XG4gICAgICAgIGlmIChzY3JvbGxJbmZvLnNjcm9sbFRvcCA+IGNvbnRlbnRTY3JvbGxlZE9mZnNldEluUGl4ZWxzICE9PSB0aGlzLmlzQ29udGVudFNjcm9sbGVkKSB7XG4gICAgICAgICAgdGhpcy5pc0NvbnRlbnRTY3JvbGxlZCA9ICF0aGlzLmlzQ29udGVudFNjcm9sbGVkO1xuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIFRoaXMgaW5zdGFuY2UgaGFzIG9ic2VydmVkIGEgcGFnZSBlbnRlciBzbyByZWdpc3RlciB0aGUgY29ycmVjdCB1cmwgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICB0aGlzLnVybCA9IHRoaXMucm91dGVyLnVybDtcbiAgICB0aGlzLm9uRW50ZXIoKTtcblxuICAgIC8vIFdhdGNoIG5hdmlnYXRpb24gZXZlbnRzIGZvciBwYWdlIGVudGVyIGFuZCBsZWF2ZVxuICAgIHRoaXMubmF2aWdhdGlvblN0YXJ0JC5zdWJzY3JpYmUoKGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5nZXRQYXRobmFtZShldmVudC51cmwpICE9PSB0aGlzLmdldFBhdGhuYW1lKHRoaXMudXJsKSAmJlxuICAgICAgICAhdGhpcy5tb2RhbE5hdmlnYXRpb25TZXJ2aWNlLmlzTW9kYWxSb3V0ZSh0aGlzLnVybCkgJiZcbiAgICAgICAgIXRoaXMubW9kYWxOYXZpZ2F0aW9uU2VydmljZS5pc01vZGFsUm91dGUoZXZlbnQudXJsKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMub25MZWF2ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5uYXZpZ2F0aW9uRW5kJC5zdWJzY3JpYmUoKGV2ZW50OiBOYXZpZ2F0aW9uRW5kKSA9PiB7XG4gICAgICBpZiAodGhpcy5nZXRQYXRobmFtZShldmVudC51cmxBZnRlclJlZGlyZWN0cykgPT09IHRoaXMuZ2V0UGF0aG5hbWUodGhpcy51cmwpKSB7XG4gICAgICAgIHRoaXMub25FbnRlcigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5pbnRlcmNlcHRCYWNrQnV0dG9uQ2xpY2tzU2V0dXAoKTtcbiAgICB0aGlzLmluaXRpYWxpemVTdGlja3lJbnRlcnNlY3Rpb25PYnNlcnZlcigpO1xuICAgIHRoaXMuc2V0QWN0aW9uQnV0dG9uc1dpZHRoKCk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplSGVhZGVyKCk7XG4gICAgdGhpcy5pbml0aWFsaXplVGl0bGUoKTtcbiAgICB0aGlzLmluaXRpYWxpemVBY3Rpb25zKCk7XG4gICAgdGhpcy5pbml0aWFsaXplQ29udGVudCgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZVN0aWNreUNvbnRlbnQoKTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMubmdPbkRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLm5nT25EZXN0cm95JC5jb21wbGV0ZSgpO1xuXG4gICAgdGhpcy50aXRsZUludGVyc2VjdGlvbk9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5zdGlja3lBY3Rpb25zSW50ZXJzZWN0aW9uT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLnN0aWNreUNvbnRlbnRJbnRlcnNlY3Rpb25PYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgZGVsZWdhdGVSZWZyZXNoRXZlbnQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMucmVmcmVzaC5lbWl0KHtcbiAgICAgIGNvbXBsZXRlOiBldmVudC50YXJnZXQuY29tcGxldGUuYmluZChldmVudC50YXJnZXQpLFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0TWF4V2lkdGhDbGFzc2VzKCkge1xuICAgIGlmICghdGhpcy5tYXhXaWR0aCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBpZiAodGhpcy5tYXhXaWR0aCA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiBgbWF4LXdpZHRoLSR7dGhpcy5tYXhXaWR0aH1gO1xuICB9XG5cbiAgb25UaXRsZUNsaWNrKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcbiAgICBpZiAodGhpcy50b29sYmFyVGl0bGVDbGljay5vYnNlcnZlZCkge1xuICAgICAgdGhpcy50b29sYmFyVGl0bGVDbGljay5lbWl0KGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oZWFkZXI/LnRpdGxlQ2xpY2suZW1pdChldmVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVXcmFwcGVyKCkge1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGU7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZChwYXJlbnQsIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHBhcmVudCwgdGhpcy5pb25IZWFkZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQocGFyZW50LCB0aGlzLmlvbkNvbnRlbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQocGFyZW50LCB0aGlzLmlvbkZvb3RlckVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIG9uRW50ZXIoKSB7XG4gICAgaWYgKHRoaXMuaXNBY3RpdmUpIHJldHVybjtcbiAgICB0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcblxuICAgIHRoaXMuZW50ZXIuZW1pdCgpO1xuXG4gICAgdGhpcy5vYnNlcnZlVGl0bGUoKTtcbiAgICB0aGlzLm9ic2VydmVBY3Rpb25zKCk7XG4gIH1cblxuICBwcml2YXRlIG9uTGVhdmUoKSB7XG4gICAgaWYgKCF0aGlzLmlzQWN0aXZlKSByZXR1cm47XG4gICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5sZWF2ZS5lbWl0KCk7XG5cbiAgICB0aGlzLnVub2JzZXJ2ZVRpdGxlKCk7XG4gICAgdGhpcy51bm9ic2VydmVBY3Rpb25zKCk7XG5cbiAgICBpZiAodGhpcy50YWJCYXJCb3R0b21IaWRkZW4gJiYgdGhpcy50YWJzQ29tcG9uZW50KSB7XG4gICAgICB0aGlzLnRhYnNDb21wb25lbnQudGFiQmFyQm90dG9tSGlkZGVuID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbnRlcmNlcHRCYWNrQnV0dG9uQ2xpY2tzU2V0dXAoKSB7XG4gICAgaWYgKHRoaXMuYmFja0J1dHRvbk92ZXJyaWRlKSB7XG4gICAgICB0aGlzLmJhY2tCdXR0b24ub25DbGljayA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5iYWNrQnV0dG9uT3ZlcnJpZGUubmF2aWdhdGVCYWNrKHRoaXMucm91dGVyT3V0bGV0LCB0aGlzLm5hdkN0cmwsIHRoaXMuZGVmYXVsdEJhY2tIcmVmKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSW50ZXJjZXB0IGJhY2stYnV0dG9uIGNsaWNrIGV2ZW50cywgZGVmYXVsdGluZyB0byB0aGUgYnVpbHQtaW4gY2xpY2staGFuZGxlci5cbiAgICBpZiAodGhpcy5iYWNrQnV0dG9uQ2xpY2sub2JzZXJ2ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5iYWNrQnV0dG9uQ2xpY2tcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdPbkRlc3Ryb3kkKSlcbiAgICAgICAgLnN1YnNjcmliZSh0aGlzLmJhY2tCdXR0b24ub25DbGljay5iaW5kKHRoaXMuYmFja0J1dHRvbikpO1xuICAgIH1cbiAgICB0aGlzLmJhY2tCdXR0b24ub25DbGljayA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYmFja0J1dHRvbkNsaWNrLmVtaXQoZXZlbnQpO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVTdGlja3lJbnRlcnNlY3Rpb25PYnNlcnZlcigpIHtcbiAgICBpZiAodGhpcy5zdGlja3lDb250ZW50VGVtcGxhdGUpIHtcbiAgICAgIC8vIFN0aWNreSBjb250ZW50IHByZXNlbnQgLSBzdGFydCBvYnNlcnZpbmcgZm9yIHN0aWNraW5lc3NcbiAgICAgIGlmICghdGhpcy5zdGlja3lDb250ZW50SW50ZXJzZWN0aW9uT2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5zdGlja3lDb250ZW50SW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSB0aGlzLmNyZWF0ZVN0aWNreUNvbnRlbnRJbnRlcnNlY3Rpb25PYnNlcnZlcigpO1xuICAgICAgfVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc3RpY2t5Q29udGVudEludGVyc2VjdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5zdGlja3lDb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplSGVhZGVyKCkge1xuICAgIGlmICh0aGlzLmhhc0hlYWRlciA9PT0gdW5kZWZpbmVkICYmICEhdGhpcy5oZWFkZXIpIHtcbiAgICAgIHRoaXMuaGFzSGVhZGVyID0gdHJ1ZTtcbiAgICAgIC8vIEhlYWRlciBjb3VsZCBsYXRlciBiZSByZW1vdmVkIGZyb20gRE9NIChlLmcuIGluIHZpcnR1YWwgc2Nyb2xsaW5nIHNjZW5hcmlvcyksXG4gICAgICAvLyBzbyBzdG9yZSBhIHJlZmVyZW5jZSB0byBgaGVhZGVyLnRpdGxlQWN0aW9uSWNvblRlbXBsYXRlYCBhbmQgYGhlYWRlci50aXRsZUNsaWNrYDpcbiAgICAgIHRoaXMudGl0bGVBY3Rpb25JY29uVGVtcGxhdGUgPSB0aGlzLmhlYWRlci50aXRsZUFjdGlvbkljb25UZW1wbGF0ZTtcbiAgICAgIGlmICh0aGlzLmhlYWRlci50aXRsZUNsaWNrLm9ic2VydmVkICYmIHRoaXMuaGFzSW50ZXJhY3RpdmVUaXRsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuaGFzSW50ZXJhY3RpdmVUaXRsZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplVGl0bGUoKSB7XG4gICAgaWYgKHRoaXMuaGFzSGVhZGVyICYmIHRoaXMuaXNPYnNlcnZpbmdUaXRsZSAmJiAhdGhpcy5oZWFkZXI/LnRpdGxlRWxlbWVudCkge1xuICAgICAgLy8gSWYgd2UncmUgYWxyZWFkeSBvYnNlcnZpbmcgdGhlIGhlYWRlcidzIHRpdGxlIGVsZW1lbnQsIGJ1dCBpdCdzIG5vIGxvbmdlciBwcmVzZW50LFxuICAgICAgLy8gaXQgbWVhbnMgaXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIERPTSAoZS5nLiBpbiB2aXJ0dWFsIHNjcm9sbGluZyBzY2VuYXJpb3MpLlxuICAgICAgLy8gRmxpcCBvYnNlcnZpbmcgZmxhZzpcbiAgICAgIHRoaXMuaXNPYnNlcnZpbmdUaXRsZSA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNQYWdlVGl0bGUpIHtcbiAgICAgIGlmICghdGhpcy5pc09ic2VydmluZ1RpdGxlICYmICEhdGhpcy5oZWFkZXI/LnRpdGxlRWxlbWVudCkge1xuICAgICAgICAvLyBIZWFkZXIgYW5kIHRpdGxlIGVsZW1lbnQgcmUtYXR0YWNoZWQgdG8gRE9NIC0gb2JzZXJ2ZSB0aXRsZTpcbiAgICAgICAgdGhpcy5vYnNlcnZlVGl0bGUoKTtcbiAgICAgIH1cblxuICAgICAgLy8gRW5zdXJlcyByZXN0IG9mIGluaXRpYWxpemVUaXRsZSgpIHdvbid0IHJ1biwgaWYgYWxyZWFkeSBpbml0aWFsaXplZFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaGFzUGFnZVRpdGxlID1cbiAgICAgIHRoaXMudGl0bGUgIT09IHVuZGVmaW5lZCB8fCAhIXRoaXMuY3VzdG9tVGl0bGVUZW1wbGF0ZSB8fCAhIXRoaXMuaGVhZGVyPy50aXRsZTtcbiAgICB0aGlzLnRvb2xiYXJUaXRsZVZpc2libGUgPSAhdGhpcy5oYXNQYWdlVGl0bGU7XG4gICAgdGhpcy5oYXNQYWdlU3VidGl0bGUgPSB0aGlzLnN1YnRpdGxlICE9PSB1bmRlZmluZWQgfHwgISF0aGlzLmN1c3RvbVN1YnRpdGxlVGVtcGxhdGU7XG4gICAgaWYgKHRoaXMuaGVhZGVyPy50aXRsZSAmJiAhdGhpcy50b29sYmFyVGl0bGUpIHtcbiAgICAgIHRoaXMudG9vbGJhclRpdGxlID0gdGhpcy5oZWFkZXIudGl0bGU7XG4gICAgfVxuXG4gICAgdGhpcy5vYnNlcnZlVGl0bGUoKTtcblxuICAgIGNvbnN0IGRlZmF1bHRUaXRsZVRlbXBsYXRlID0gdGhpcy5jdXN0b21UaXRsZVRlbXBsYXRlIHx8IHRoaXMuc2ltcGxlVGl0bGVUZW1wbGF0ZTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgIHRoaXMudG9vbGJhclRpdGxlVGVtcGxhdGUgPSB0aGlzLmN1c3RvbVRvb2xiYXJUaXRsZVRlbXBsYXRlXG4gICAgICA/IHRoaXMuY3VzdG9tVG9vbGJhclRpdGxlVGVtcGxhdGVcbiAgICAgIDogdHlwZW9mIHRoaXMudG9vbGJhclRpdGxlID09PSAnc3RyaW5nJ1xuICAgICAgICA/IHRoaXMuc2ltcGxlVG9vbGJhclRpdGxlVGVtcGxhdGVcbiAgICAgICAgOiBkZWZhdWx0VGl0bGVUZW1wbGF0ZTtcblxuICAgIGlmICh0aGlzLnRvb2xiYXJUaXRsZUNsaWNrLm9ic2VydmVkICYmIHRoaXMuaGFzSW50ZXJhY3RpdmVUaXRsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmhhc0ludGVyYWN0aXZlVGl0bGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb2JzZXJ2ZVRpdGxlKCkge1xuICAgIGlmICghdGhpcy5oYXNQYWdlVGl0bGUpIHtcbiAgICAgIC8vIE5vdGhpbmcgdG8gb2JzZXJ2ZVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc09ic2VydmluZ1RpdGxlKSB7XG4gICAgICAvLyBBbHJlYWR5IG9ic2VydmluZ1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFdlIGFyZSBub3QgYWN0dWFsbHkgb2JzZXJ2aW5nIHRoZSB0aXRsZSB1bnRpbCBhZnRlciB0aGUgYHdoZW5Db250ZW50UmVhZHlgIHByb21pc2UgaGFzIHJlc29sdmVkLFxuICAgIC8vIGJ1dCBzaW5jZSB3ZSd2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgcGFnZSBoYXMgYSB0aXRsZSBpbiB0aGUgZ3VhcmQgYWJvdmUsXG4gICAgLy8gd2UnbGwgLSBlYWdlcmx5IC0gc2V0IHRoaXMgZmxhZyBub3cgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSByZS1ydW5zIG9mIHRoZSByZXN0IG9mIHRoaXMgbWV0aG9kOlxuICAgIHRoaXMuaXNPYnNlcnZpbmdUaXRsZSA9IHRydWU7XG5cbiAgICBpZiAoIXRoaXMudGl0bGVJbnRlcnNlY3Rpb25PYnNlcnZlcikge1xuICAgICAgdGhpcy50aXRsZUludGVyc2VjdGlvbk9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxuICAgICAgICAoZW50cmllcykgPT4ge1xuICAgICAgICAgIC8vIEluIHJhcmUgc2NlbmFyaW9zIHdlIGdldCBtb3JlIHRoYW4gMSBlbnRyeSAtIHVzZSB0aGUgbGFzdCBvbmU6XG4gICAgICAgICAgY29uc3QgbGFzdEVudHJ5ID0gZW50cmllc1tlbnRyaWVzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIGlmIChsYXN0RW50cnkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNob3dUb29sYmFyVGl0bGUgPSAhbGFzdEVudHJ5LmlzSW50ZXJzZWN0aW5nO1xuICAgICAgICAgICAgLy8gT25seSBmbGlwIHRoZSBmbGFnIGFuZCBydW4gQ2hhbmdlIERldGVjdGlvbiB3aGVuIGNoYW5nZWQ6XG4gICAgICAgICAgICBpZiAoc2hvd1Rvb2xiYXJUaXRsZSAhPT0gdGhpcy50b29sYmFyVGl0bGVWaXNpYmxlKSB7XG4gICAgICAgICAgICAgIHRoaXMudG9vbGJhclRpdGxlVmlzaWJsZSA9IHNob3dUb29sYmFyVGl0bGU7XG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgeyByb290OiB0aGlzLmlvbkNvbnRlbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBSdW4gb3V0c2lkZSBBbmd1bGFyIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgdHJpZ2dlcmluZyBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgLy8gYW5kIC0gdW5kZXIgY2VydGFpbiBjb25kaXRpb25zIC0gYW4gaW5maW5pdGUgbG9vcCB3aGVuIGNhbGxlZCB3aXRoaW4gbmdBZnRlckNvbnRlbnRDaGVja2VkOlxuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLndoZW5Db250ZW50UmVhZHkoKS50aGVuKCgpID0+IHtcbiAgICAgICAgY29uc3QgdGl0bGVFbGVtZW50UmVmID0gdGhpcy5wYWdlVGl0bGUgfHwgdGhpcy5oZWFkZXI/LnRpdGxlRWxlbWVudDtcbiAgICAgICAgaWYgKHRpdGxlRWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgIHRoaXMudGl0bGVJbnRlcnNlY3Rpb25PYnNlcnZlci5vYnNlcnZlKHRpdGxlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVub2JzZXJ2ZVRpdGxlKCkge1xuICAgIGNvbnN0IHRpdGxlRWxlbWVudFJlZiA9IHRoaXMucGFnZVRpdGxlIHx8IHRoaXMuaGVhZGVyPy50aXRsZUVsZW1lbnQ7XG4gICAgaWYgKHRpdGxlRWxlbWVudFJlZikge1xuICAgICAgdGhpcy50aXRsZUludGVyc2VjdGlvbk9ic2VydmVyPy51bm9ic2VydmUodGl0bGVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cbiAgICB0aGlzLmlzT2JzZXJ2aW5nVGl0bGUgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUFjdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuaGVhZGVyQWN0aW9uc1RlbXBsYXRlID09PSB1bmRlZmluZWQgJiYgISF0aGlzLmhlYWRlcikge1xuICAgICAgdGhpcy5oZWFkZXJBY3Rpb25zVGVtcGxhdGUgPSB0aGlzLmhlYWRlci5hY3Rpb25zVGVtcGxhdGU7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc0hlYWRlciAmJiB0aGlzLmlzT2JzZXJ2aW5nQWN0aW9ucyAmJiAhdGhpcy5oZWFkZXI/LmFjdGlvbnNFbGVtZW50KSB7XG4gICAgICAvLyBJZiB3ZSdyZSBhbHJlYWR5IG9ic2VydmluZyB0aGUgaGVhZGVyJ3MgYWN0aW9ucyBlbGVtZW50LCBidXQgaXQncyBubyBsb25nZXIgcHJlc2VudCxcbiAgICAgIC8vIGl0IG1lYW5zIGl0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSBET00gKGUuZy4gaW4gdmlydHVhbCBzY3JvbGxpbmcgc2NlbmFyaW9zKS5cbiAgICAgIC8vIEZsaXAgb2JzZXJ2aW5nIGZsYWc6XG4gICAgICB0aGlzLmlzT2JzZXJ2aW5nQWN0aW9ucyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMub2JzZXJ2ZUFjdGlvbnMoKTtcblxuICAgIHRoaXMuY3VzdG9tQWN0aW9ucy5mb3JFYWNoKChwYWdlQWN0aW9uKSA9PiB7XG4gICAgICBpZiAocGFnZUFjdGlvbi5pc0ZpeGVkKSB7XG4gICAgICAgIHRoaXMuZml4ZWRBY3Rpb25zVGVtcGxhdGUgPSBwYWdlQWN0aW9uLnRlbXBsYXRlO1xuICAgICAgfSBlbHNlIGlmIChwYWdlQWN0aW9uLmlzU3RpY2t5KSB7XG4gICAgICAgIHRoaXMuc3RpY2t5QWN0aW9uc1RlbXBsYXRlID0gcGFnZUFjdGlvbi50ZW1wbGF0ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGFnZUFjdGlvbnNUZW1wbGF0ZSA9IHBhZ2VBY3Rpb24udGVtcGxhdGU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9ic2VydmVBY3Rpb25zKCkge1xuICAgIGlmICghdGhpcy5oZWFkZXI/LmFjdGlvbnNFbGVtZW50KSB7XG4gICAgICAvLyBOb3RoaW5nIHRvIG9ic2VydmVcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc09ic2VydmluZ0FjdGlvbnMpIHtcbiAgICAgIC8vIEFscmVhZHkgb2JzZXJ2aW5nXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gV2UgYXJlIG5vdCBhY3R1YWxseSBvYnNlcnZpbmcgYWN0aW9ucyB1bnRpbCBhZnRlciB0aGUgYHdoZW5Db250ZW50UmVhZHlgIHByb21pc2UgaGFzIHJlc29sdmVkLFxuICAgIC8vIGJ1dCBzaW5jZSB3ZSd2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGVyZSdzIGFuIGFjdGlvbnMgZWxlbWVudCBwcmVzZW50IGluIHRoZSBndWFyZCBhYm92ZSxcbiAgICAvLyB3ZSdsbCAtIGVhZ2VybHkgLSBzZXQgdGhpcyBmbGFnIG5vdyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJ1bnMgb2YgdGhlIHJlc3Qgb2YgdGhpcyBtZXRob2Q6XG4gICAgdGhpcy5pc09ic2VydmluZ0FjdGlvbnMgPSB0cnVlO1xuXG4gICAgaWYgKCF0aGlzLnN0aWNreUFjdGlvbnNJbnRlcnNlY3Rpb25PYnNlcnZlcikge1xuICAgICAgdGhpcy5zdGlja3lBY3Rpb25zSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoXG4gICAgICAgIChlbnRyaWVzKSA9PiB7XG4gICAgICAgICAgLy8gSW4gcmFyZSBzY2VuYXJpb3Mgd2UgZ2V0IG1vcmUgdGhhbiAxIGVudHJ5IC0gdXNlIHRoZSBsYXN0IG9uZTpcbiAgICAgICAgICBjb25zdCBsYXN0RW50cnkgPSBlbnRyaWVzW2VudHJpZXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgaWYgKGxhc3RFbnRyeSkge1xuICAgICAgICAgICAgY29uc3Qgc2hvd1Rvb2xiYXJBY3Rpb25zID0gIWxhc3RFbnRyeS5pc0ludGVyc2VjdGluZztcbiAgICAgICAgICAgIC8vIE9ubHkgZmxpcCB0aGUgZmxhZyBhbmQgcnVuIENoYW5nZSBEZXRlY3Rpb24gd2hlbiBjaGFuZ2VkOlxuICAgICAgICAgICAgaWYgKHNob3dUb29sYmFyQWN0aW9ucyAhPT0gdGhpcy50b29sYmFyQWN0aW9uc1Zpc2libGUpIHtcbiAgICAgICAgICAgICAgdGhpcy50b29sYmFyQWN0aW9uc1Zpc2libGUgPSBzaG93VG9vbGJhckFjdGlvbnM7XG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgeyByb290OiB0aGlzLmlvbkNvbnRlbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBSdW4gb3V0c2lkZSBBbmd1bGFyIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgdHJpZ2dlcmluZyBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgLy8gYW5kIC0gdW5kZXIgY2VydGFpbiBjb25kaXRpb25zIC0gYW4gaW5maW5pdGUgbG9vcCB3aGVuIGNhbGxlZCB3aXRoaW4gbmdBZnRlckNvbnRlbnRDaGVja2VkOlxuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLndoZW5Db250ZW50UmVhZHkoKS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaGVhZGVyPy5hY3Rpb25zRWxlbWVudD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgIHRoaXMuc3RpY2t5QWN0aW9uc0ludGVyc2VjdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5oZWFkZXIuYWN0aW9uc0VsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1bm9ic2VydmVBY3Rpb25zKCkge1xuICAgIGlmICh0aGlzLmhlYWRlcj8uYWN0aW9uc0VsZW1lbnQpIHtcbiAgICAgIHRoaXMuc3RpY2t5QWN0aW9uc0ludGVyc2VjdGlvbk9ic2VydmVyPy51bm9ic2VydmUodGhpcy5oZWFkZXIuYWN0aW9uc0VsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuICAgIHRoaXMuaXNPYnNlcnZpbmdBY3Rpb25zID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHNldEFjdGlvbkJ1dHRvbnNXaWR0aCgpIHtcbiAgICBpZiAoIXRoaXMuaW9uVG9vbGJhckJ1dHRvbnNFbGVtZW50KSByZXR1cm47XG5cbiAgICAvLyBFbnN1cmUgaW9uLXRvb2xiYXIgY3VzdG9tIGVsZW1lbnQgaGFzIGJlZW4gZGVmaW5lZCAocHJpbWFyaWx5IHdoZW4gdGVzdGluZywgYnV0IGRvZXNuJ3QgaHVydCk6XG4gICAgY3VzdG9tRWxlbWVudHMud2hlbkRlZmluZWQodGhpcy5pb25Ub29sYmFyRWxlbWVudC5uYXRpdmVFbGVtZW50LmxvY2FsTmFtZSkudGhlbigoKSA9PiB7XG4gICAgICAvLyBFbnN1cmUgdG9vbGJhciBhbmQgYnV0dG9ucyBoYXZlIGJlZW4gcmVuZGVyZWQgYW5kIGhhcyBkaW1lbnNpb25zOlxuICAgICAgY29tcG9uZW50T25SZWFkeSh0aGlzLmlvblRvb2xiYXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICh0b29sYmFyKSA9PiB7XG4gICAgICAgIGxldCBzdGFydEJ1dHRvbnNXaWR0aCA9IDA7XG4gICAgICAgIGxldCBlbmRCdXR0b25zV2lkdGggPSAwO1xuXG4gICAgICAgIHRoaXMuaW9uVG9vbGJhckJ1dHRvbnNFbGVtZW50XG4gICAgICAgICAgLm1hcCgoaW9uQnV0dG9uc0VsZW1lbnRSZWYpID0+IGlvbkJ1dHRvbnNFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpXG4gICAgICAgICAgLmZvckVhY2goKGlvbkJ1dHRvbnNFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoaW9uQnV0dG9uc0VsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgbWFyZ2luID0gcGFyc2VJbnQoc3R5bGUubWFyZ2luTGVmdCkgKyBwYXJzZUludChzdHlsZS5tYXJnaW5SaWdodCk7XG4gICAgICAgICAgICBpZiAoaW9uQnV0dG9uc0VsZW1lbnQuZ2V0QXR0cmlidXRlKCdzbG90JykgPT09ICdzdGFydCcpIHtcbiAgICAgICAgICAgICAgc3RhcnRCdXR0b25zV2lkdGggKz0gaW9uQnV0dG9uc0VsZW1lbnQub2Zmc2V0V2lkdGggKyBtYXJnaW47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBlbmRCdXR0b25zV2lkdGggKz0gaW9uQnV0dG9uc0VsZW1lbnQub2Zmc2V0V2lkdGggKyBtYXJnaW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgYWN0aW9uQnV0dG9uc01heFdpZHRoID0gTWF0aC5tYXgoc3RhcnRCdXR0b25zV2lkdGgsIGVuZEJ1dHRvbnNXaWR0aCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgdG9vbGJhcixcbiAgICAgICAgICAnLS1hY3Rpb24tYnV0dG9ucy13aWR0aCcsXG4gICAgICAgICAgYCR7YWN0aW9uQnV0dG9uc01heFdpZHRofXB4YCxcbiAgICAgICAgICBSZW5kZXJlclN0eWxlRmxhZ3MyLkRhc2hDYXNlXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUNvbnRlbnQoKSB7XG4gICAgdGhpcy5jdXN0b21Db250ZW50LmZvckVhY2goKGNvbnRlbnQpID0+IHtcbiAgICAgIGlmIChjb250ZW50LmlzRml4ZWQpIHtcbiAgICAgICAgdGhpcy5maXhlZENvbnRlbnRUZW1wbGF0ZSA9IGNvbnRlbnQudGVtcGxhdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmN1c3RvbUNvbnRlbnRUZW1wbGF0ZSA9IGNvbnRlbnQudGVtcGxhdGU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVTdGlja3lDb250ZW50KCkge1xuICAgIHRoaXMuc3RpY2t5Q29udGVudFRlbXBsYXRlID0gdGhpcy5zdGlja3lDb250ZW50UmVmO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTdGlja3lDb250ZW50SW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKSB7XG4gICAgY29uc3Qgb3B0aW9uczogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJJbml0ID0ge1xuICAgICAgcm9vdDogdGhpcy5pb25Db250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgdGhyZXNob2xkOiAxLFxuICAgIH07XG5cbiAgICBjb25zdCBjYWxsYmFjazogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjayA9IChlbnRyaWVzKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1N0aWNreUNvbnRlbnRQaW5uZWQgIT09ICFlbnRyaWVzWzBdLmlzSW50ZXJzZWN0aW5nKSB7XG4gICAgICAgIHRoaXMuaXNTdGlja3lDb250ZW50UGlubmVkID0gIXRoaXMuaXNTdGlja3lDb250ZW50UGlubmVkO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoY2FsbGJhY2ssIG9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQYXRobmFtZSh1cmw6IHN0cmluZykge1xuICAgIHJldHVybiB1cmwuc3BsaXQoJz8nKVswXTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXlib2FyZFdpbGxTaG93JywgWyckZXZlbnQnXSlcbiAgX29uS2V5Ym9hcmRXaWxsU2hvdyhpbmZvPzogeyBrZXlib2FyZEhlaWdodDogbnVtYmVyIH0pIHtcbiAgICBpZiAoaW5mbyAmJiBpbmZvLmtleWJvYXJkSGVpZ2h0KSB7XG4gICAgICB0aGlzLmlvbkNvbnRlbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICctLWtleWJvYXJkLW9mZnNldCcsXG4gICAgICAgIGAke2luZm8ua2V5Ym9hcmRIZWlnaHR9cHhgXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXlib2FyZFdpbGxIaWRlJylcbiAgX29uS2V5Ym9hcmRXaWxsSGlkZSgpIHtcbiAgICB0aGlzLmlvbkNvbnRlbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0ta2V5Ym9hcmQtb2Zmc2V0JywgJzBweCcpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcihgd2luZG93OiR7c2VsZWN0ZWRUYWJDbGlja0V2ZW50fWApXG4gIF9vblNlbGVjdGVkVGFiQ2xpY2soKSB7XG4gICAgaWYgKHRoaXMuY29udGVudCkge1xuICAgICAgdGhpcy5jb250ZW50LnNjcm9sbFRvVG9wKEtpcmJ5QW5pbWF0aW9uLkR1cmF0aW9uLkxPTkcpO1xuICAgIH1cbiAgfVxufVxuIiwiPGlvbi1oZWFkZXI+XG4gIDxpb24tdG9vbGJhclxuICAgIFtjbGFzcy5jb250ZW50LXNjcm9sbGVkXT1cImlzQ29udGVudFNjcm9sbGVkXCJcbiAgICBbY2xhc3MuY29udGVudC1waW5uZWRdPVwiaXNTdGlja3lDb250ZW50UGlubmVkXCJcbiAgPlxuICAgIDxpb24tYnV0dG9ucyBzbG90PVwic3RhcnRcIj5cbiAgICAgIDxpb24tYmFjay1idXR0b25cbiAgICAgICAgdGV4dD1cIlwiXG4gICAgICAgIFtkZWZhdWx0SHJlZl09XCJkZWZhdWx0QmFja0hyZWZcIlxuICAgICAgICBpY29uPVwiYXNzZXRzL2tpcmJ5L2ljb25zL3N2Zy9hcnJvdy1iYWNrLnN2Z1wiXG4gICAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cImhpZGVCYWNrQnV0dG9uID8gJ2hpZGRlbicgOiBudWxsXCJcbiAgICAgID48L2lvbi1iYWNrLWJ1dHRvbj5cbiAgICA8L2lvbi1idXR0b25zPlxuICAgIDxpb24tdGl0bGUgW2NsYXNzLnNsaWRlLWFuZC1mYWRlLWluXT1cInRvb2xiYXJUaXRsZVZpc2libGVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0b29sYmFyLXRpdGxlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGl0bGVBY3Rpb25JY29uVGVtcGxhdGUgJiYgIWhhc0ludGVyYWN0aXZlVGl0bGVcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidG9vbGJhclRpdGxlVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKm5nSWY9XCIhIXRpdGxlQWN0aW9uSWNvblRlbXBsYXRlIHx8IGhhc0ludGVyYWN0aXZlVGl0bGVcIlxuICAgICAgICAgIFtjbGFzcy5jbGlja2FibGVdPVwiaGFzSW50ZXJhY3RpdmVUaXRsZVwiXG4gICAgICAgICAgW2NsYXNzLmhhcy1pY29uXT1cIiEhdGl0bGVBY3Rpb25JY29uVGVtcGxhdGVcIlxuICAgICAgICAgIChjbGljayk9XCJvblRpdGxlQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b29sYmFyVGl0bGVUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGl0bGVBY3Rpb25JY29uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9pb24tdGl0bGU+XG4gICAgPGlvbi1idXR0b25zXG4gICAgICAqbmdJZj1cIiEhaGVhZGVyQWN0aW9uc1RlbXBsYXRlXCJcbiAgICAgIGNsYXNzPVwiaGlkZVwiXG4gICAgICBzbG90PVwicHJpbWFyeVwiXG4gICAgICBbY2xhc3MuZmFkZS1pbl09XCJ0b29sYmFyQWN0aW9uc1Zpc2libGVcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJBY3Rpb25zVGVtcGxhdGU7IGluamVjdG9yOiB0b29sYmFyQWN0aW9uR3JvdXBJbmplY3RvclwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9pb24tYnV0dG9ucz5cbiAgICA8aW9uLWJ1dHRvbnMgKm5nSWY9XCIhIXN0aWNreUFjdGlvbnNUZW1wbGF0ZVwiIGNsYXNzPVwibGVnYWN5LWFjdGlvbnNcIiBzbG90PVwicHJpbWFyeVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN0aWNreUFjdGlvbnNUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgPGlvbi1idXR0b25zICpuZ0lmPVwiISFmaXhlZEFjdGlvbnNUZW1wbGF0ZVwiIGNsYXNzPVwibGVnYWN5LWFjdGlvbnNcIiBzbG90PVwic2Vjb25kYXJ5XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZml4ZWRBY3Rpb25zVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2lvbi1idXR0b25zPlxuICA8L2lvbi10b29sYmFyPlxuPC9pb24taGVhZGVyPlxuXG48aW9uLWNvbnRlbnRcbiAgc2Nyb2xsRXZlbnRzPVwidHJ1ZVwiXG4gIGZvcmNlT3ZlcnNjcm9sbD1cImZhbHNlXCJcbiAgW2NsYXNzXT1cImdldE1heFdpZHRoQ2xhc3NlcygpXCJcbiAgW2NsYXNzLmhhcy1oZWFkZXJdPVwiaGFzSGVhZGVyXCJcbj5cbiAgPGlvbi1yZWZyZXNoZXJcbiAgICAqbmdJZj1cInJlZnJlc2gub2JzZXJ2ZXJzLmxlbmd0aCA+IDBcIlxuICAgIChpb25SZWZyZXNoKT1cImRlbGVnYXRlUmVmcmVzaEV2ZW50KCRldmVudClcIlxuICAgIHNsb3Q9XCJmaXhlZFwiXG4gID5cbiAgICA8a2lyYnktc3Bpbm5lcj48L2tpcmJ5LXNwaW5uZXI+XG4gIDwvaW9uLXJlZnJlc2hlcj5cblxuICA8IS0tIFBhZ2UgaGVhZGVyIC0tPlxuICA8ZGl2IGNsYXNzPVwicGFnZS1oZWFkZXItY29udGFpbmVyXCIgKm5nSWY9XCJoYXNQYWdlVGl0bGUgJiYgIWhhc0hlYWRlclwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwicGFnZS1oZWFkZXJcIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAndGV4dC1jZW50ZXInOiB0aXRsZUFsaWdubWVudCA9PT0gJ2NlbnRlcicsXG4gICAgICAgICd0ZXh0LXJpZ2h0JzogdGl0bGVBbGlnbm1lbnQgPT09ICdyaWdodCdcbiAgICAgIH1cIlxuICAgID5cbiAgICAgIDxkaXYgI3BhZ2VUaXRsZSBjbGFzcz1cInBhZ2UtdGl0bGVcIiBbY2xhc3MuaGFzLWFjdGlvbnNdPVwiISFwYWdlQWN0aW9uc1RlbXBsYXRlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbVRpdGxlVGVtcGxhdGUgfHwgZGVmYXVsdFBhZ2VUaXRsZVRlbXBsYXRlXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwYWdlQWN0aW9uc1RlbXBsYXRlIHx8IGRlZmF1bHRQYWdlQWN0aW9uc1RlbXBsYXRlXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiaGFzUGFnZVN1YnRpdGxlXCIgY2xhc3M9XCJwYWdlLXN1YnRpdGxlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbVN1YnRpdGxlVGVtcGxhdGUgfHwgZGVmYXVsdFBhZ2VTdWJ0aXRsZVRlbXBsYXRlXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gSGVhZGVyIC0tPlxuICA8ZGl2IGNsYXNzPVwicGFnZS1oZWFkZXItY29udGFpbmVyXCIgKm5nSWY9XCJoYXNIZWFkZXJcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJraXJieS1oZWFkZXJcIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuXG4gIDwhLS0gIFN0aWNreSBjb250ZW50IC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic3RpY2t5Q29udGVudFRlbXBsYXRlXCI+XG4gICAgPGRpdlxuICAgICAgI3N0aWNreUNvbnRlbnRDb250YWluZXJcbiAgICAgIGNsYXNzPVwic3RpY2t5LWNvbnRlbnQtY29udGFpbmVyXCJcbiAgICAgIFtjbGFzcy5jb250ZW50LXBpbm5lZF09XCJpc1N0aWNreUNvbnRlbnRQaW5uZWRcIlxuICAgID5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdGlja3lDb250ZW50VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tIENvbnRlbnQgLS0+XG4gIDxkaXYgY2xhc3M9XCJjb250ZW50LWlubmVyXCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21Db250ZW50VGVtcGxhdGUgfHwgZGVmYXVsdENvbnRlbnRUZW1wbGF0ZVwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cblxuICA8ZGl2IHNsb3Q9XCJmaXhlZFwiIGNsYXNzPVwiZml4ZWQtY29udGVudFwiICpuZ0lmPVwiZml4ZWRDb250ZW50VGVtcGxhdGVcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udGVudC1pbm5lclwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpeGVkQ29udGVudFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9pb24tY29udGVudD5cblxuPGlvbi1mb290ZXI+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cImtpcmJ5LXBhZ2UtZm9vdGVyXCI+PC9uZy1jb250ZW50PlxuPC9pb24tZm9vdGVyPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRQYWdlVGl0bGVUZW1wbGF0ZT5cbiAgPGgxIFtraXJieUZpdEhlYWRpbmddPVwiZml0SGVhZGluZ0NvbmZpZ1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaW1wbGVUaXRsZVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gIDwvaDE+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNkZWZhdWx0UGFnZVN1YnRpdGxlVGVtcGxhdGU+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaW1wbGVTdWJ0aXRsZVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNkZWZhdWx0UGFnZUFjdGlvbnNUZW1wbGF0ZT5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwia2lyYnktcGFnZS1hY3Rpb25zXCI+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0Q29udGVudFRlbXBsYXRlPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJraXJieS1wYWdlLWNvbnRlbnRcIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3NpbXBsZVRpdGxlVGVtcGxhdGU+e3sgdGl0bGUgfX08L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNzaW1wbGVTdWJ0aXRsZVRlbXBsYXRlPnt7IHN1YnRpdGxlIH19PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjc2ltcGxlVG9vbGJhclRpdGxlVGVtcGxhdGU+e3sgdG9vbGJhclRpdGxlIH19PC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
743
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWdlL3NyYy9wYWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3BhZ2Uvc3JjL3BhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sY0FBYyxFQUNkLFFBQVEsRUFDUixLQUFLLEVBQ0wsTUFBTSxFQUlOLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFDVCxtQkFBbUIsRUFFbkIsUUFBUSxFQUNSLFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pFLE9BQU8sRUFDTCxhQUFhLEVBQ2IsVUFBVSxFQUNWLFVBQVUsRUFDVixTQUFTLEVBQ1QsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsYUFBYSxHQUNkLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRS9DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RixPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RSxPQUFPLEVBQUUsa0JBQWtCLEVBQXFCLE1BQU0sd0NBQXdDLENBQUM7QUFDL0YsT0FBTyxFQUVMLGVB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RGxCLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBR3RFLHNCQUFzQjtzQkFEckIsWUFBWTt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFHekUsYUFBYTtzQkFEWixlQUFlO3VCQUFDLG9CQUFvQjtnQkFHN0IsYUFBYTtzQkFEcEIsZUFBZTt1QkFBQyxvQkFBb0I7Z0JBRzdCLGdCQUFnQjtzQkFEdkIsWUFBWTt1QkFBQywwQkFBMEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFHOUUsTUFBTTtzQkFETCxZQUFZO3VCQUFDLGVBQWU7Z0JBb2dCN0IsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLHlCQUF5QixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVduRCxtQkFBbUI7c0JBRGxCLFlBQVk7dUJBQUMseUJBQXlCO2dCQU12QyxtQkFBbUI7c0JBRGxCLFlBQVk7dUJBQUMsVUFBVSxxQkFBcUIsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudENoZWNrZWQsXG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdCxcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFJlbmRlcmVyMixcbiAgUmVuZGVyZXJTdHlsZUZsYWdzMixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgU2tpcFNlbGYsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBOYXZpZ2F0aW9uU3RhcnQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBJb25CYWNrQnV0dG9uLFxuICBJb25CdXR0b25zLFxuICBJb25Db250ZW50LFxuICBJb25Gb290ZXIsXG4gIElvbkhlYWRlcixcbiAgSW9uUm91dGVyT3V0bGV0LFxuICBJb25Ub29sYmFyLFxuICBOYXZDb250cm9sbGVyLFxufSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IGNvbXBvbmVudE9uUmVhZHkgfSBmcm9tICdAaW9uaWMvY29yZSc7XG5pbXBvcnQgdHlwZSB7IFNjcm9sbERldGFpbCB9IGZyb20gJ0Bpb25pYy9jb3JlJztcbmltcG9ydCB7IHNlbGVjdGVkVGFiQ2xpY2tFdmVudCwgVGFic0NvbXBvbmVudCB9IGZyb20gJ0BraXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vdGFicyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEFDVElPTkdST1VQX0NPTkZJRywgQWN0aW9uR3JvdXBDb25maWcgfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL2FjdGlvbi1ncm91cCc7XG5pbXBvcnQge1xuICBIZWFkZXJBY3Rpb25zRGlyZWN0aXZlLFxuICBIZWFkZXJDb21wb25lbnQsXG4gIEhlYWRlclRpdGxlQWN0aW9uSWNvbkRpcmVjdGl2ZSxcbn0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9oZWFkZXInO1xuaW1wb3J0IHsgSW9uaWNFbGVtZW50UGFydEhlbHBlciwgS2lyYnlBbmltYXRpb24gfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL2hlbHBlcnMnO1xuaW1wb3J0IHtcbiAgTW9kYWxFbGVtZW50Q29tcG9uZW50LFxuICBNb2RhbEVsZW1lbnRzQWR2ZXJ0aXNlcixcbiAgTW9kYWxFbGVtZW50VHlwZSxcbiAgTW9kYWxOYXZpZ2F0aW9uU2VydmljZSxcbn0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9tb2RhbCc7XG5pbXBvcnQgeyBGaXRIZWFkaW5nQ29uZmlnLCBSZXNpemVPYnNlcnZlclNlcnZpY2UgfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL3NoYXJlZCc7XG5cbi8qKlxuICogU3BlY2lmeSBzY3JvbGwgZXZlbnQgZGVib3VuY2UgdGltZSBpbiBtcyBhbmQgc2Nyb2xsZWQgb2Zmc2V0IGZyb20gdG9wIGluIHBpeGVsc1xuICovXG5jb25zdCBjb250ZW50U2Nyb2xsRGVib3VuY2VUaW1lSW5NUyA9IDEwO1xuY29uc3QgY29udGVudFNjcm9sbGVkT2Zmc2V0SW5QaXhlbHMgPSA0O1xuXG50eXBlIHN0aWNreUNvbmZpZyA9IHsgc3RpY2t5OiBib29sZWFuIH07XG50eXBlIGZpeGVkQ29uZmlnID0geyBmaXhlZDogYm9vbGVhbiB9O1xudHlwZSBNYXhXaWR0aCA9ICdkZWZhdWx0JyB8ICdzdGFuZGFyZCcgfCAnb3B0aW1pemVkJyB8ICdsZycgfCAneGwnIHwgJ2Z1bGwnOyAvLyBUT0RPOiBSZW1vdmUgZGVwcmVjYXRlZCBvcHRpb25zICdzdGFuZGFyZCcgYW5kICdvcHRpbWl6ZWQnIGluIEtpcmJ5IHYxMFxuXG5jb25zdCBQQUdFX1dJRFRIX1NUQU5EQVJEX0RFUFJFQ0FUSU9OX1dBUk5JTkcgPVxuICAnRGVwcmVjYXRpb24gd2FybmluZzogVGhlIHN1cHBvcnQgZm9yIFwic3RhbmRhcmRcIiBhcyBhIG1heFdpZHRoIG9wdGlvbiB3aWxsIGJlIHJlbW92ZWQgaW4gS2lyYnkgdmVyc2lvbiAxMC4gQWZ0ZXIgdGhhdCB0aGUgXCJzdGFuZGFyZFwiIHdpZHRoIHdpbGwgYmUgdGhlIGRlZmF1bHQgd2lkdGggYW5kIGRvZXMgbm90IG5lZWQgdG8gYmUgc3BlY2lmaWVkLic7XG5cbmNvbnN0IFBBR0VfV0lEVEhfT1BUSU1JWkVEX0RFUFJFQ0FUSU9OX1dBUk5JTkcgPVxuICAnRGVwcmVjYXRpb24gd2FybmluZzogVGhlIFwib3B0aW1pemVkXCIgbWF4V2lkdGggb3B0aW9uIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgXCJsZ1wiIGluc3RlYWQuIFRoZSBzdXBwb3J0IGZvciBcIm9wdGltaXplZFwiIGFzIGEgbWF4V2lkdGggb3B0aW9uIHdpbGwgYmUgcmVtb3ZlZCBpbiBLaXJieSB2ZXJzaW9uIDEwLic7XG5cbmV4cG9ydCBjb25zdCBQQUdFX0JBQ0tfQlVUVE9OX09WRVJSSURFID0gbmV3IEluamVjdGlvblRva2VuPFBhZ2VCYWNrQnV0dG9uT3ZlcnJpZGU+KFxuICAncGFnZS1iYWNrLWJ1dHRvbi1vdmVycmlkZSdcbik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZUJhY2tCdXR0b25PdmVycmlkZSB7XG4gIG5hdmlnYXRlQmFjazogKFxuICAgIHJvdXRlck91dGxldDogSW9uUm91dGVyT3V0bGV0LFxuICAgIG5hdkN0cmw6IE5hdkNvbnRyb2xsZXIsXG4gICAgZGVmYXVsdEJhY2tIcmVmOiBzdHJpbmdcbiAgKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBcInB1bGwtdG8tcmVmcmVzaFwiIGJlZ2lucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWxsVG9SZWZyZXNoRXZlbnQge1xuICAvKipcbiAgICogSW52b2tlIHRoaXMgY2FsbGJhY2stbWV0aG9kIHdoZW4gYWN0aW9uIHRvIHBlcmZvcm0gdXBvbiBcInB1bGwtdG8tcmVmcmVzaFwiIGNvbXBsZXRlcy5cbiAgICovXG4gIGNvbXBsZXRlKCk7XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1traXJieVBhZ2VUaXRsZV0nLFxufSlcbmV4cG9ydCBjbGFzcyBQYWdlVGl0bGVEaXJlY3RpdmUge31cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2tpcmJ5UGFnZVN1YnRpdGxlXScsXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VTdWJ0aXRsZURpcmVjdGl2ZSB7fVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdba2lyYnlQYWdlVG9vbGJhclRpdGxlXScsXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VUb29sYmFyVGl0bGVEaXJlY3RpdmUge31cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2tpcmJ5UGFnZUFjdGlvbnNdJyxcbn0pXG5leHBvcnQgY2xhc3MgUGFnZUFjdGlvbnNEaXJlY3RpdmUge1xuICBASW5wdXQoJ2tpcmJ5UGFnZUFjdGlvbnMnKSBjb25maWc6IHN0aWNreUNvbmZpZyB8IGZpeGVkQ29uZmlnO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0aWNreURlZmF1bHQgPSB0cnVlO1xuICBwcml2YXRlIHJlYWRvbmx5IGZpeGVkRGVmYXVsdCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgICdEZWZpbmluZyBQYWdlIEFjdGlvbnMgdmlhICpraXJieVBhZ2VBY3Rpb25zIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBLaXJieSB2MTAuIEEgS2lyYnkgSGVhZGVyIHdpdGggQWN0aW9ucyBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLCBhcyBpdCBoYXMgYW4gaW1wcm92ZWQgQVBJIHdpdGggYmV0dGVyIHN1cHBvcnQgZm9yIHJlc3BvbnNpdmUgbGF5b3V0cy4nXG4gICAgKTtcbiAgfVxuXG4gIGdldCBpc1N0aWNreSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcgPyAodGhpcy5jb25maWcgYXMgc3RpY2t5Q29uZmlnKS5zdGlja3kgOiB0aGlzLnN0aWNreURlZmF1bHQ7XG4gIH1cblxuICBnZXQgaXNGaXhlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcgPyAodGhpcy5jb25maWcgYXMgZml4ZWRDb25maWcpLmZpeGVkIDogdGhpcy5maXhlZERlZmF1bHQ7XG4gIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2tpcmJ5UGFnZUNvbnRlbnRdJyxcbn0pXG5leHBvcnQgY2xhc3MgUGFnZUNvbnRlbnREaXJlY3RpdmUge1xuICBASW5wdXQoJ2tpcmJ5UGFnZUNvbnRlbnQnKSBjb25maWc6IGZpeGVkQ29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge31cblxuICBnZXQgaXNGaXhlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuZml4ZWQ7XG4gIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2tpcmJ5UGFnZVN0aWNreUNvbnRlbnRdJyxcbn0pXG5leHBvcnQgY2xhc3MgUGFnZVN0aWNreUNvbnRlbnREaXJlY3RpdmUge31cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAna2lyYnktcGFnZS1wcm9ncmVzcycsXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIG1hcmdpbi1pbmxpbmUtZW5kOiA0cHg7IC8qIEFkZCBzcGFjaW5nIHRvIHBvdGVudGlhbCBzdXBwbGVtZW50YXJ5IGFjdGlvbiBidXR0b24gKi9cbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBQYWdlUHJvZ3Jlc3NDb21wb25lbnQgZXh0ZW5kcyBNb2RhbEVsZW1lbnRDb21wb25lbnQge1xuICAvLyBUT0RPOiBGaW5kIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uLCB3aGljaCBhbGlnbnMgd2l0aCBmdXR1cmUgcGFnZSBjb25maWd1cmF0aW9uIC8gY29uc3VtcHRpb25cbiAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiB3YXMgY2hvc2VuIG92ZXIgZXhwYW5kaW5nIGBtb3ZlQ2hpbGRgIG1ldGhvZCBpbiBjb21wb25lbnQgd3JhcHBlciB3aXRoIHlldCBhbm90aGVyIHNjZW5hcmlvXG4gIEBIb3N0QmluZGluZygnYXR0ci5zbG90Jykgc2xvdCA9ICdzdGFydCc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgbW9kYWxFbGVtZW50c0FkdmVydGlzZXI6IE1vZGFsRWxlbWVudHNBZHZlcnRpc2VyLFxuICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XG4gICkge1xuICAgIHN1cGVyKE1vZGFsRWxlbWVudFR5cGUuUEFHRV9QUk9HUkVTUywgZWxlbWVudFJlZiwgbW9kYWxFbGVtZW50c0FkdmVydGlzZXIpO1xuICB9XG59XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdraXJieS1wYWdlLXRpdGxlJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VUaXRsZUNvbXBvbmVudCBleHRlbmRzIE1vZGFsRWxlbWVudENvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIEBPcHRpb25hbCgpIG1vZGFsRWxlbWVudHNBZHZlcnRpc2VyOiBNb2RhbEVsZW1lbnRzQWR2ZXJ0aXNlclxuICApIHtcbiAgICBzdXBlcihNb2RhbEVsZW1lbnRUeXBlLlRJVExFLCBlbGVtZW50UmVmLCBtb2RhbEVsZW1lbnRzQWR2ZXJ0aXNlcik7XG4gIH1cbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAna2lyYnktcGFnZS1jb250ZW50JyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VDb250ZW50Q29tcG9uZW50IHt9XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2tpcmJ5LXBhZ2UtYWN0aW9ucycsXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYnV0dG9uW2tpcmJ5LWJ1dHRvbl1cIj48L25nLWNvbnRlbnQ+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgIGNvbHVtbi1nYXA6IDhweDtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBQYWdlQWN0aW9uc0NvbXBvbmVudCB7fVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdraXJieS1wYWdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wYWdlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtJb25pY0VsZW1lbnRQYXJ0SGVscGVyXSxcbn0pXG5leHBvcnQgY2xhc3MgUGFnZUNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRDaGVja2VkLCBPbkNoYW5nZXNcbntcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZztcbiAgQElucHV0KCkgc3VidGl0bGU6IHN0cmluZztcbiAgQElucHV0KCkgdG9vbGJhclRpdGxlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRpdGxlQWxpZ25tZW50OiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCcgPSAnbGVmdCc7XG4gIEBJbnB1dCgpIGRlZmF1bHRCYWNrSHJlZjogc3RyaW5nO1xuICBASW5wdXQoKSBoaWRlQmFja0J1dHRvbjogYm9vbGVhbjtcbiAgQElucHV0KCkgdGl0bGVNYXhMaW5lczogbnVtYmVyO1xuICBASW5wdXQoKSBoYXNJbnRlcmFjdGl2ZVRpdGxlOiBib29sZWFuO1xuXG4gIEBJbnB1dCgpIHNldCBtYXhXaWR0aCh3aWR0aDogTWF4V2lkdGgpIHtcbiAgICAvLyBUT0RPOiBSZW1vdmUgZGVwcmVjYXRpb24gd2FybmluZyBpbiBLaXJieSB2MTBcbiAgICBpZiAod2lkdGggPT09ICdzdGFuZGFyZCcpIHtcbiAgICAgIGNvbnNvbGUud2FybihQQUdFX1dJRFRIX1NUQU5EQVJEX0RFUFJFQ0FUSU9OX1dBUk5JTkcpO1xuICAgIH1cbiAgICAvLyBUT0RPOiBSZW1vdmUgZGVwcmVjYXRpb24gd2FybmluZyBpbiBLaXJieSB2MTBcbiAgICBpZiAod2lkdGggPT09ICdvcHRpbWl6ZWQnKSB7XG4gICAgICBjb25zb2xlLndhcm4oUEFHRV9XSURUSF9PUFRJTUlaRURfREVQUkVDQVRJT05fV0FSTklORyk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWF4V2lkdGggPSB3aWR0aDtcbiAgfVxuXG4gIGdldCBtYXhXaWR0aCgpOiBNYXhXaWR0aCB7XG4gICAgcmV0dXJuIHRoaXMuX21heFdpZHRoO1xuICB9XG5cbiAgcHJpdmF0ZSBfbWF4V2lkdGg6IE1heFdpZHRoID0gJ2RlZmF1bHQnO1xuXG4gIHByaXZhdGUgX3RhYkJhckJvdHRvbUhpZGRlbjogYm9vbGVhbjtcbiAgcHVibGljIGdldCB0YWJCYXJCb3R0b21IaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYkJhckJvdHRvbUhpZGRlbjtcbiAgfVxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHRhYkJhckJvdHRvbUhpZGRlbih2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLnRhYnNDb21wb25lbnQpIHtcbiAgICAgIC8vIGFzIHdlIGFyZSBzZXR0aW5nIGEgY2xhc3Mgb24gdGFicywgd2UgbmVlZCB0aGlzIHRvIGhhcHBlbiBpbiBhIHNlcGFyYXRlIGNkIGN5Y2xlXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy50YWJzQ29tcG9uZW50LnRhYkJhckJvdHRvbUhpZGRlbiA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuX3RhYkJhckJvdHRvbUhpZGRlbiA9IHZhbHVlO1xuICB9XG5cbiAgQE91dHB1dCgpIGVudGVyID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgbGVhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSByZWZyZXNoID0gbmV3IEV2ZW50RW1pdHRlcjxQdWxsVG9SZWZyZXNoRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBiYWNrQnV0dG9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICBAT3V0cHV0KCkgdG9vbGJhclRpdGxlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFBvaW50ZXJFdmVudD4oKTtcblxuICBAVmlld0NoaWxkKElvbkNvbnRlbnQsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgY29udGVudD86IElvbkNvbnRlbnQ7XG4gIEBWaWV3Q2hpbGQoSW9uQ29udGVudCwgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHJpdmF0ZSBpb25Db250ZW50RWxlbWVudDogRWxlbWVudFJlZjxIVE1MSW9uQ29udGVudEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKElvbkhlYWRlciwgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgaW9uSGVhZGVyRWxlbWVudDogRWxlbWVudFJlZjxIVE1MSW9uSGVhZGVyRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoSW9uRm9vdGVyLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwcml2YXRlIGlvbkZvb3RlckVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTElvbkZvb3RlckVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKElvblRvb2xiYXIsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHByaXZhdGUgaW9uVG9vbGJhckVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTElvblRvb2xiYXJFbGVtZW50PjtcbiAgQFZpZXdDaGlsZHJlbihJb25CdXR0b25zLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHJpdmF0ZSBpb25Ub29sYmFyQnV0dG9uc0VsZW1lbnQ6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxJb25CdXR0b25zRWxlbWVudD4+O1xuICBAVmlld0NoaWxkKElvbkJhY2tCdXR0b24sIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwcml2YXRlIGJhY2tCdXR0b246IElvbkJhY2tCdXR0b247XG4gIEBWaWV3Q2hpbGQoJ3BhZ2VUaXRsZScsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwcml2YXRlIHBhZ2VUaXRsZTogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc3RpY2t5Q29udGVudENvbnRhaW5lcicsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwcml2YXRlIHN0aWNreUNvbnRlbnRDb250YWluZXI6IEVsZW1lbnRSZWY7XG5cbiAgQFZpZXdDaGlsZCgnc2ltcGxlVGl0bGVUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBwcml2YXRlIHNpbXBsZVRpdGxlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoJ3NpbXBsZVRvb2xiYXJUaXRsZVRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHByaXZhdGUgc2ltcGxlVG9vbGJhclRpdGxlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBDb250ZW50Q2hpbGQoUGFnZVRvb2xiYXJUaXRsZURpcmVjdGl2ZSwgeyBzdGF0aWM6IGZhbHNlLCByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBwcml2YXRlIGN1c3RvbVRvb2xiYXJUaXRsZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAQ29udGVudENoaWxkKFBhZ2VUaXRsZURpcmVjdGl2ZSwgeyBzdGF0aWM6IGZhbHNlLCByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBjdXN0b21UaXRsZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAQ29udGVudENoaWxkKFBhZ2VTdWJ0aXRsZURpcmVjdGl2ZSwgeyBzdGF0aWM6IGZhbHNlLCByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBjdXN0b21TdWJ0aXRsZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAQ29udGVudENoaWxkcmVuKFBhZ2VBY3Rpb25zRGlyZWN0aXZlKVxuICBjdXN0b21BY3Rpb25zOiBRdWVyeUxpc3Q8UGFnZUFjdGlvbnNEaXJlY3RpdmU+O1xuICBAQ29udGVudENoaWxkcmVuKFBhZ2VDb250ZW50RGlyZWN0aXZlKVxuICBwcml2YXRlIGN1c3RvbUNvbnRlbnQ6IFF1ZXJ5TGlzdDxQYWdlQ29udGVudERpcmVjdGl2ZT47XG4gIEBDb250ZW50Q2hpbGQoUGFnZVN0aWNreUNvbnRlbnREaXJlY3RpdmUsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgcHJpdmF0ZSBzdGlja3lDb250ZW50UmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAQ29udGVudENoaWxkKEhlYWRlckNvbXBvbmVudClcbiAgaGVhZGVyPzogSGVhZGVyQ29tcG9uZW50O1xuXG4gIGhhc0hlYWRlcjogYm9vbGVhbjtcbiAgaGFzUGFnZVRpdGxlOiBib29sZWFuO1xuICBoYXNQYWdlU3VidGl0bGU6IGJvb2xlYW47XG4gIHRvb2xiYXJUaXRsZVZpc2libGU6IGJvb2xlYW47XG4gIHRvb2xiYXJBY3Rpb25zVmlzaWJsZTogYm9vbGVhbjtcbiAgaXNDb250ZW50U2Nyb2xsZWQ6IGJvb2xlYW47XG4gIGlzU3RpY2t5Q29udGVudFBpbm5lZCA9IGZhbHNlO1xuXG4gIGZpdEhlYWRpbmdDb25maWc6IEZpdEhlYWRpbmdDb25maWc7XG5cbiAgdG9vbGJhclRpdGxlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIGN1c3RvbUNvbnRlbnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgcGFnZUFjdGlvbnNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgZml4ZWRDb250ZW50VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIHN0aWNreUFjdGlvbnNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgZml4ZWRBY3Rpb25zVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIHN0aWNreUNvbnRlbnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8UGFnZVN0aWNreUNvbnRlbnREaXJlY3RpdmU+O1xuICBoZWFkZXJBY3Rpb25zVGVtcGxhdGU6IFRlbXBsYXRlUmVmPEhlYWRlckFjdGlvbnNEaXJlY3RpdmU+O1xuICB0aXRsZUFjdGlvbkljb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8SGVhZGVyVGl0bGVBY3Rpb25JY29uRGlyZWN0aXZlPjtcblxuICBwcml2YXRlIHRpdGxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXI/OiBJbnRlcnNlY3Rpb25PYnNlcnZlcjtcbiAgcHJpdmF0ZSBzdGlja3lBY3Rpb25zSW50ZXJzZWN0aW9uT2JzZXJ2ZXI/OiBJbnRlcnNlY3Rpb25PYnNlcnZlcjtcbiAgcHJpdmF0ZSBzdGlja3lDb250ZW50SW50ZXJzZWN0aW9uT2JzZXJ2ZXI/OiBJbnRlcnNlY3Rpb25PYnNlcnZlcjtcbiAgcHJpdmF0ZSBpc09ic2VydmluZ1RpdGxlID0gZmFsc2U7XG4gIHByaXZhdGUgaXNPYnNlcnZpbmdBY3Rpb25zID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSB1cmw6IHN0cmluZztcbiAgcHJpdmF0ZSBpc0FjdGl2ZTogYm9vbGVhbjtcblxuICBwcml2YXRlIG5nT25EZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgY29udGVudFNjcm9sbGVkJDogT2JzZXJ2YWJsZTxTY3JvbGxEZXRhaWw+O1xuXG4gIHByaXZhdGUgbmF2aWdhdGlvblN0YXJ0JDogT2JzZXJ2YWJsZTxOYXZpZ2F0aW9uU3RhcnQ+ID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoXG4gICAgZmlsdGVyKChldmVudCk6IGV2ZW50IGlzIE5hdmlnYXRpb25TdGFydCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCksXG4gICAgdGFrZVVudGlsKHRoaXMubmdPbkRlc3Ryb3kkKVxuICApO1xuXG4gIHByaXZhdGUgbmF2aWdhdGlvbkVuZCQ6IE9ic2VydmFibGU8TmF2aWdhdGlvbkVuZD4gPSB0aGlzLnJvdXRlci5ldmVudHMucGlwZShcbiAgICBmaWx0ZXIoKGV2ZW50KTogZXZlbnQgaXMgTmF2aWdhdGlvbkVuZCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpLFxuICAgIHRha2VVbnRpbCh0aGlzLm5nT25EZXN0cm95JClcbiAgKTtcblxuICB0b29sYmFyQWN0aW9uR3JvdXBJbmplY3RvcjogSW5qZWN0b3I7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgem9uZTogTmdab25lLFxuICAgIHByaXZhdGUgbW9kYWxOYXZpZ2F0aW9uU2VydmljZTogTW9kYWxOYXZpZ2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyU2VydmljZTogUmVzaXplT2JzZXJ2ZXJTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIHByaXZhdGUgdGFic0NvbXBvbmVudDogVGFic0NvbXBvbmVudCxcbiAgICBAT3B0aW9uYWwoKVxuICAgIEBJbmplY3QoUEFHRV9CQUNLX0JVVFRPTl9PVkVSUklERSlcbiAgICBwcml2YXRlIGJhY2tCdXR0b25PdmVycmlkZTogUGFnZUJhY2tCdXR0b25PdmVycmlkZSxcbiAgICBAT3B0aW9uYWwoKVxuICAgIHByaXZhdGUgcm91dGVyT3V0bGV0OiBJb25Sb3V0ZXJPdXRsZXQsXG4gICAgQE9wdGlvbmFsKClcbiAgICBwcml2YXRlIG5hdkN0cmw6IE5hdkNvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBpb25pY0VsZW1lbnRQYXJ0SGVscGVyOiBJb25pY0VsZW1lbnRQYXJ0SGVscGVyXG4gICkge31cblxuICBwcml2YXRlIGNvbnRlbnRSZWFkeVByb21pc2U6IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgd2hlbkNvbnRlbnRSZWFkeSgpIHtcbiAgICBpZiAoIXRoaXMuY29udGVudFJlYWR5UHJvbWlzZSkge1xuICAgICAgdGhpcy5jb250ZW50UmVhZHlQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlclNlcnZpY2Uub2JzZXJ2ZSh0aGlzLmlvbkNvbnRlbnRFbGVtZW50LCAoZW50cnkpID0+IHtcbiAgICAgICAgICBpZiAoZW50cnkuY29udGVudFJlY3QuaGVpZ2h0ID4gMCkge1xuICAgICAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlclNlcnZpY2UudW5vYnNlcnZlKHRoaXMuaW9uQ29udGVudEVsZW1lbnQpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29udGVudFJlYWR5UHJvbWlzZTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVtb3ZlV3JhcHBlcigpO1xuICAgIHRoaXMuaW9uaWNFbGVtZW50UGFydEhlbHBlci5zZXRQYXJ0KFxuICAgICAgJ2JhY2tncm91bmQnLFxuICAgICAgdGhpcy5pb25Ub29sYmFyRWxlbWVudCxcbiAgICAgICcudG9vbGJhci1iYWNrZ3JvdW5kJ1xuICAgICk7XG5cbiAgICBjb25zdCBhY3Rpb25Hcm91cENvbmZpZzogQWN0aW9uR3JvdXBDb25maWcgPSB7XG4gICAgICBpc0NvbmRlbnNlZDogdHJ1ZSxcbiAgICAgIG1heFZpc2libGVBY3Rpb25zOiAxLFxuICAgIH07XG4gICAgdGhpcy50b29sYmFyQWN0aW9uR3JvdXBJbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IEFDVElPTkdST1VQX0NPTkZJRyxcbiAgICAgICAgICB1c2VWYWx1ZTogYWN0aW9uR3JvdXBDb25maWcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgcGFyZW50OiB0aGlzLmluamVjdG9yLFxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLnRpdGxlTWF4TGluZXMpIHtcbiAgICAgIHRoaXMuZml0SGVhZGluZ0NvbmZpZyA9IHtcbiAgICAgICAgbWF4TGluZXM6IGNoYW5nZXMudGl0bGVNYXhMaW5lcy5jdXJyZW50VmFsdWUsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5zdWJ0aXRsZSAmJiAhY2hhbmdlcy5zdWJ0aXRsZS5pc0ZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLnN1YnRpdGxlID0gY2hhbmdlcy50aXRsZS5jdXJyZW50VmFsdWU7XG4gICAgICB0aGlzLmhhc1BhZ2VTdWJ0aXRsZSA9IHRoaXMuc3VidGl0bGUgIT09IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMuY29udGVudFNjcm9sbGVkJCA9IHRoaXMuY29udGVudC5pb25TY3JvbGwucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKGNvbnRlbnRTY3JvbGxEZWJvdW5jZVRpbWVJbk1TKSxcbiAgICAgICAgbWFwKChldmVudCkgPT4gZXZlbnQuZGV0YWlsKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubmdPbkRlc3Ryb3kkKVxuICAgICAgKTtcblxuICAgICAgdGhpcy5jb250ZW50U2Nyb2xsZWQkLnN1YnNjcmliZSgoc2Nyb2xsSW5mbzogU2Nyb2xsRGV0YWlsKSA9PiB7XG4gICAgICAgIGlmIChzY3JvbGxJbmZvLnNjcm9sbFRvcCA+IGNvbnRlbnRTY3JvbGxlZE9mZnNldEluUGl4ZWxzICE9PSB0aGlzLmlzQ29udGVudFNjcm9sbGVkKSB7XG4gICAgICAgICAgdGhpcy5pc0NvbnRlbnRTY3JvbGxlZCA9ICF0aGlzLmlzQ29udGVudFNjcm9sbGVkO1xuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIFRoaXMgaW5zdGFuY2UgaGFzIG9ic2VydmVkIGEgcGFnZSBlbnRlciBzbyByZWdpc3RlciB0aGUgY29ycmVjdCB1cmwgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICB0aGlzLnVybCA9IHRoaXMucm91dGVyLnVybDtcbiAgICB0aGlzLm9uRW50ZXIoKTtcblxuICAgIC8vIFdhdGNoIG5hdmlnYXRpb24gZXZlbnRzIGZvciBwYWdlIGVudGVyIGFuZCBsZWF2ZVxuICAgIHRoaXMubmF2aWdhdGlvblN0YXJ0JC5zdWJzY3JpYmUoKGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5nZXRQYXRobmFtZShldmVudC51cmwpICE9PSB0aGlzLmdldFBhdGhuYW1lKHRoaXMudXJsKSAmJlxuICAgICAgICAhdGhpcy5tb2RhbE5hdmlnYXRpb25TZXJ2aWNlLmlzTW9kYWxSb3V0ZSh0aGlzLnVybCkgJiZcbiAgICAgICAgIXRoaXMubW9kYWxOYXZpZ2F0aW9uU2VydmljZS5pc01vZGFsUm91dGUoZXZlbnQudXJsKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMub25MZWF2ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5uYXZpZ2F0aW9uRW5kJC5zdWJzY3JpYmUoKGV2ZW50OiBOYXZpZ2F0aW9uRW5kKSA9PiB7XG4gICAgICBpZiAodGhpcy5nZXRQYXRobmFtZShldmVudC51cmxBZnRlclJlZGlyZWN0cykgPT09IHRoaXMuZ2V0UGF0aG5hbWUodGhpcy51cmwpKSB7XG4gICAgICAgIHRoaXMub25FbnRlcigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5pbnRlcmNlcHRCYWNrQnV0dG9uQ2xpY2tzU2V0dXAoKTtcbiAgICB0aGlzLmluaXRpYWxpemVTdGlja3lJbnRlcnNlY3Rpb25PYnNlcnZlcigpO1xuICAgIHRoaXMuc2V0QWN0aW9uQnV0dG9uc1dpZHRoKCk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplSGVhZGVyKCk7XG4gICAgdGhpcy5pbml0aWFsaXplVGl0bGUoKTtcbiAgICB0aGlzLmluaXRpYWxpemVBY3Rpb25zKCk7XG4gICAgdGhpcy5pbml0aWFsaXplQ29udGVudCgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZVN0aWNreUNvbnRlbnQoKTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMubmdPbkRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLm5nT25EZXN0cm95JC5jb21wbGV0ZSgpO1xuXG4gICAgdGhpcy50aXRsZUludGVyc2VjdGlvbk9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5zdGlja3lBY3Rpb25zSW50ZXJzZWN0aW9uT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLnN0aWNreUNvbnRlbnRJbnRlcnNlY3Rpb25PYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgZGVsZWdhdGVSZWZyZXNoRXZlbnQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMucmVmcmVzaC5lbWl0KHtcbiAgICAgIGNvbXBsZXRlOiBldmVudC50YXJnZXQuY29tcGxldGUuYmluZChldmVudC50YXJnZXQpLFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0TWF4V2lkdGhDbGFzc2VzKCkge1xuICAgIGlmICghdGhpcy5tYXhXaWR0aCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBpZiAodGhpcy5tYXhXaWR0aCA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiBgbWF4LXdpZHRoLSR7dGhpcy5tYXhXaWR0aH1gO1xuICB9XG5cbiAgb25UaXRsZUNsaWNrKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcbiAgICBpZiAodGhpcy50b29sYmFyVGl0bGVDbGljay5vYnNlcnZlZCkge1xuICAgICAgdGhpcy50b29sYmFyVGl0bGVDbGljay5lbWl0KGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oZWFkZXI/LnRpdGxlQ2xpY2suZW1pdChldmVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVXcmFwcGVyKCkge1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGU7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZChwYXJlbnQsIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHBhcmVudCwgdGhpcy5pb25IZWFkZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQocGFyZW50LCB0aGlzLmlvbkNvbnRlbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQocGFyZW50LCB0aGlzLmlvbkZvb3RlckVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIG9uRW50ZXIoKSB7XG4gICAgaWYgKHRoaXMuaXNBY3RpdmUpIHJldHVybjtcbiAgICB0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcblxuICAgIHRoaXMuZW50ZXIuZW1pdCgpO1xuXG4gICAgdGhpcy5vYnNlcnZlVGl0bGUoKTtcbiAgICB0aGlzLm9ic2VydmVBY3Rpb25zKCk7XG4gIH1cblxuICBwcml2YXRlIG9uTGVhdmUoKSB7XG4gICAgaWYgKCF0aGlzLmlzQWN0aXZlKSByZXR1cm47XG4gICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5sZWF2ZS5lbWl0KCk7XG5cbiAgICB0aGlzLnVub2JzZXJ2ZVRpdGxlKCk7XG4gICAgdGhpcy51bm9ic2VydmVBY3Rpb25zKCk7XG5cbiAgICBpZiAodGhpcy50YWJCYXJCb3R0b21IaWRkZW4gJiYgdGhpcy50YWJzQ29tcG9uZW50KSB7XG4gICAgICB0aGlzLnRhYnNDb21wb25lbnQudGFiQmFyQm90dG9tSGlkZGVuID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbnRlcmNlcHRCYWNrQnV0dG9uQ2xpY2tzU2V0dXAoKSB7XG4gICAgaWYgKHRoaXMuYmFja0J1dHRvbk92ZXJyaWRlKSB7XG4gICAgICB0aGlzLmJhY2tCdXR0b24ub25DbGljayA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5iYWNrQnV0dG9uT3ZlcnJpZGUubmF2aWdhdGVCYWNrKHRoaXMucm91dGVyT3V0bGV0LCB0aGlzLm5hdkN0cmwsIHRoaXMuZGVmYXVsdEJhY2tIcmVmKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSW50ZXJjZXB0IGJhY2stYnV0dG9uIGNsaWNrIGV2ZW50cywgZGVmYXVsdGluZyB0byB0aGUgYnVpbHQtaW4gY2xpY2staGFuZGxlci5cbiAgICBpZiAodGhpcy5iYWNrQnV0dG9uQ2xpY2sub2JzZXJ2ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5iYWNrQnV0dG9uQ2xpY2tcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdPbkRlc3Ryb3kkKSlcbiAgICAgICAgLnN1YnNjcmliZSh0aGlzLmJhY2tCdXR0b24ub25DbGljay5iaW5kKHRoaXMuYmFja0J1dHRvbikpO1xuICAgIH1cbiAgICB0aGlzLmJhY2tCdXR0b24ub25DbGljayA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYmFja0J1dHRvbkNsaWNrLmVtaXQoZXZlbnQpO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVTdGlja3lJbnRlcnNlY3Rpb25PYnNlcnZlcigpIHtcbiAgICBpZiAodGhpcy5zdGlja3lDb250ZW50VGVtcGxhdGUpIHtcbiAgICAgIC8vIFN0aWNreSBjb250ZW50IHByZXNlbnQgLSBzdGFydCBvYnNlcnZpbmcgZm9yIHN0aWNraW5lc3NcbiAgICAgIGlmICghdGhpcy5zdGlja3lDb250ZW50SW50ZXJzZWN0aW9uT2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5zdGlja3lDb250ZW50SW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSB0aGlzLmNyZWF0ZVN0aWNreUNvbnRlbnRJbnRlcnNlY3Rpb25PYnNlcnZlcigpO1xuICAgICAgfVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc3RpY2t5Q29udGVudEludGVyc2VjdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5zdGlja3lDb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplSGVhZGVyKCkge1xuICAgIGlmICh0aGlzLmhhc0hlYWRlciA9PT0gdW5kZWZpbmVkICYmICEhdGhpcy5oZWFkZXIpIHtcbiAgICAgIHRoaXMuaGFzSGVhZGVyID0gdHJ1ZTtcbiAgICAgIC8vIEhlYWRlciBjb3VsZCBsYXRlciBiZSByZW1vdmVkIGZyb20gRE9NIChlLmcuIGluIHZpcnR1YWwgc2Nyb2xsaW5nIHNjZW5hcmlvcyksXG4gICAgICAvLyBzbyBzdG9yZSBhIHJlZmVyZW5jZSB0byBgaGVhZGVyLnRpdGxlQWN0aW9uSWNvblRlbXBsYXRlYCBhbmQgYGhlYWRlci50aXRsZUNsaWNrYDpcbiAgICAgIHRoaXMudGl0bGVBY3Rpb25JY29uVGVtcGxhdGUgPSB0aGlzLmhlYWRlci50aXRsZUFjdGlvbkljb25UZW1wbGF0ZTtcbiAgICAgIGlmICh0aGlzLmhlYWRlci50aXRsZUNsaWNrLm9ic2VydmVkICYmIHRoaXMuaGFzSW50ZXJhY3RpdmVUaXRsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuaGFzSW50ZXJhY3RpdmVUaXRsZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplVGl0bGUoKSB7XG4gICAgaWYgKHRoaXMuaGFzSGVhZGVyICYmIHRoaXMuaXNPYnNlcnZpbmdUaXRsZSAmJiAhdGhpcy5oZWFkZXI/LnRpdGxlRWxlbWVudCkge1xuICAgICAgLy8gSWYgd2UncmUgYWxyZWFkeSBvYnNlcnZpbmcgdGhlIGhlYWRlcidzIHRpdGxlIGVsZW1lbnQsIGJ1dCBpdCdzIG5vIGxvbmdlciBwcmVzZW50LFxuICAgICAgLy8gaXQgbWVhbnMgaXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIERPTSAoZS5nLiBpbiB2aXJ0dWFsIHNjcm9sbGluZyBzY2VuYXJpb3MpLlxuICAgICAgLy8gRmxpcCBvYnNlcnZpbmcgZmxhZzpcbiAgICAgIHRoaXMuaXNPYnNlcnZpbmdUaXRsZSA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNQYWdlVGl0bGUpIHtcbiAgICAgIGlmICghdGhpcy5pc09ic2VydmluZ1RpdGxlICYmICEhdGhpcy5oZWFkZXI/LnRpdGxlRWxlbWVudCkge1xuICAgICAgICAvLyBIZWFkZXIgYW5kIHRpdGxlIGVsZW1lbnQgcmUtYXR0YWNoZWQgdG8gRE9NIC0gb2JzZXJ2ZSB0aXRsZTpcbiAgICAgICAgdGhpcy5vYnNlcnZlVGl0bGUoKTtcbiAgICAgIH1cblxuICAgICAgLy8gRW5zdXJlcyByZXN0IG9mIGluaXRpYWxpemVUaXRsZSgpIHdvbid0IHJ1biwgaWYgYWxyZWFkeSBpbml0aWFsaXplZFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaGFzUGFnZVRpdGxlID1cbiAgICAgIHRoaXMudGl0bGUgIT09IHVuZGVmaW5lZCB8fCAhIXRoaXMuY3VzdG9tVGl0bGVUZW1wbGF0ZSB8fCAhIXRoaXMuaGVhZGVyPy50aXRsZTtcbiAgICB0aGlzLnRvb2xiYXJUaXRsZVZpc2libGUgPSAhdGhpcy5oYXNQYWdlVGl0bGU7XG4gICAgdGhpcy5oYXNQYWdlU3VidGl0bGUgPSB0aGlzLnN1YnRpdGxlICE9PSB1bmRlZmluZWQgfHwgISF0aGlzLmN1c3RvbVN1YnRpdGxlVGVtcGxhdGU7XG4gICAgaWYgKHRoaXMuaGVhZGVyPy50aXRsZSAmJiAhdGhpcy50b29sYmFyVGl0bGUpIHtcbiAgICAgIHRoaXMudG9vbGJhclRpdGxlID0gdGhpcy5oZWFkZXIudGl0bGU7XG4gICAgICB0aGlzLmhlYWRlci50aXRsZSQucGlwZSh0YWtlVW50aWwodGhpcy5uZ09uRGVzdHJveSQpKS5zdWJzY3JpYmUoKHRpdGxlKSA9PiB7XG4gICAgICAgIHRoaXMudG9vbGJhclRpdGxlID0gdGl0bGU7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLm9ic2VydmVUaXRsZSgpO1xuXG4gICAgY29uc3QgZGVmYXVsdFRpdGxlVGVtcGxhdGUgPSB0aGlzLmN1c3RvbVRpdGxlVGVtcGxhdGUgfHwgdGhpcy5zaW1wbGVUaXRsZVRlbXBsYXRlO1xuICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgdGhpcy50b29sYmFyVGl0bGVUZW1wbGF0ZSA9IHRoaXMuY3VzdG9tVG9vbGJhclRpdGxlVGVtcGxhdGVcbiAgICAgID8gdGhpcy5jdXN0b21Ub29sYmFyVGl0bGVUZW1wbGF0ZVxuICAgICAgOiB0eXBlb2YgdGhpcy50b29sYmFyVGl0bGUgPT09ICdzdHJpbmcnXG4gICAgICAgID8gdGhpcy5zaW1wbGVUb29sYmFyVGl0bGVUZW1wbGF0ZVxuICAgICAgICA6IGRlZmF1bHRUaXRsZVRlbXBsYXRlO1xuXG4gICAgaWYgKHRoaXMudG9vbGJhclRpdGxlQ2xpY2sub2JzZXJ2ZWQgJiYgdGhpcy5oYXNJbnRlcmFjdGl2ZVRpdGxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaGFzSW50ZXJhY3RpdmVUaXRsZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvYnNlcnZlVGl0bGUoKSB7XG4gICAgaWYgKCF0aGlzLmhhc1BhZ2VUaXRsZSkge1xuICAgICAgLy8gTm90aGluZyB0byBvYnNlcnZlXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzT2JzZXJ2aW5nVGl0bGUpIHtcbiAgICAgIC8vIEFscmVhZHkgb2JzZXJ2aW5nXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gV2UgYXJlIG5vdCBhY3R1YWxseSBvYnNlcnZpbmcgdGhlIHRpdGxlIHVudGlsIGFmdGVyIHRoZSBgd2hlbkNvbnRlbnRSZWFkeWAgcHJvbWlzZSBoYXMgcmVzb2x2ZWQsXG4gICAgLy8gYnV0IHNpbmNlIHdlJ3ZlIGFscmVhZHkgY2hlY2tlZCB0aGF0IHRoZSBwYWdlIGhhcyBhIHRpdGxlIGluIHRoZSBndWFyZCBhYm92ZSxcbiAgICAvLyB3ZSdsbCAtIGVhZ2VybHkgLSBzZXQgdGhpcyBmbGFnIG5vdyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJ1bnMgb2YgdGhlIHJlc3Qgb2YgdGhpcyBtZXRob2Q6XG4gICAgdGhpcy5pc09ic2VydmluZ1RpdGxlID0gdHJ1ZTtcblxuICAgIGlmICghdGhpcy50aXRsZUludGVyc2VjdGlvbk9ic2VydmVyKSB7XG4gICAgICB0aGlzLnRpdGxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoXG4gICAgICAgIChlbnRyaWVzKSA9PiB7XG4gICAgICAgICAgLy8gSW4gcmFyZSBzY2VuYXJpb3Mgd2UgZ2V0IG1vcmUgdGhhbiAxIGVudHJ5IC0gdXNlIHRoZSBsYXN0IG9uZTpcbiAgICAgICAgICBjb25zdCBsYXN0RW50cnkgPSBlbnRyaWVzW2VudHJpZXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgaWYgKGxhc3RFbnRyeSkge1xuICAgICAgICAgICAgY29uc3Qgc2hvd1Rvb2xiYXJUaXRsZSA9ICFsYXN0RW50cnkuaXNJbnRlcnNlY3Rpbmc7XG4gICAgICAgICAgICAvLyBPbmx5IGZsaXAgdGhlIGZsYWcgYW5kIHJ1biBDaGFuZ2UgRGV0ZWN0aW9uIHdoZW4gY2hhbmdlZDpcbiAgICAgICAgICAgIGlmIChzaG93VG9vbGJhclRpdGxlICE9PSB0aGlzLnRvb2xiYXJUaXRsZVZpc2libGUpIHtcbiAgICAgICAgICAgICAgdGhpcy50b29sYmFyVGl0bGVWaXNpYmxlID0gc2hvd1Rvb2xiYXJUaXRsZTtcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7IHJvb3Q6IHRoaXMuaW9uQ29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudCB9XG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFJ1biBvdXRzaWRlIEFuZ3VsYXIgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSB0cmlnZ2VyaW5nIGNoYW5nZSBkZXRlY3Rpb25cbiAgICAvLyBhbmQgLSB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMgLSBhbiBpbmZpbml0ZSBsb29wIHdoZW4gY2FsbGVkIHdpdGhpbiBuZ0FmdGVyQ29udGVudENoZWNrZWQ6XG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMud2hlbkNvbnRlbnRSZWFkeSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICBjb25zdCB0aXRsZUVsZW1lbnRSZWYgPSB0aGlzLnBhZ2VUaXRsZSB8fCB0aGlzLmhlYWRlcj8udGl0bGVFbGVtZW50O1xuICAgICAgICBpZiAodGl0bGVFbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy50aXRsZUludGVyc2VjdGlvbk9ic2VydmVyLm9ic2VydmUodGl0bGVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdW5vYnNlcnZlVGl0bGUoKSB7XG4gICAgY29uc3QgdGl0bGVFbGVtZW50UmVmID0gdGhpcy5wYWdlVGl0bGUgfHwgdGhpcy5oZWFkZXI/LnRpdGxlRWxlbWVudDtcbiAgICBpZiAodGl0bGVFbGVtZW50UmVmKSB7XG4gICAgICB0aGlzLnRpdGxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXI/LnVub2JzZXJ2ZSh0aXRsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuICAgIHRoaXMuaXNPYnNlcnZpbmdUaXRsZSA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQWN0aW9ucygpIHtcbiAgICBpZiAodGhpcy5oZWFkZXJBY3Rpb25zVGVtcGxhdGUgPT09IHVuZGVmaW5lZCAmJiAhIXRoaXMuaGVhZGVyKSB7XG4gICAgICB0aGlzLmhlYWRlckFjdGlvbnNUZW1wbGF0ZSA9IHRoaXMuaGVhZGVyLmFjdGlvbnNUZW1wbGF0ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzSGVhZGVyICYmIHRoaXMuaXNPYnNlcnZpbmdBY3Rpb25zICYmICF0aGlzLmhlYWRlcj8uYWN0aW9uc0VsZW1lbnQpIHtcbiAgICAgIC8vIElmIHdlJ3JlIGFscmVhZHkgb2JzZXJ2aW5nIHRoZSBoZWFkZXIncyBhY3Rpb25zIGVsZW1lbnQsIGJ1dCBpdCdzIG5vIGxvbmdlciBwcmVzZW50LFxuICAgICAgLy8gaXQgbWVhbnMgaXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIERPTSAoZS5nLiBpbiB2aXJ0dWFsIHNjcm9sbGluZyBzY2VuYXJpb3MpLlxuICAgICAgLy8gRmxpcCBvYnNlcnZpbmcgZmxhZzpcbiAgICAgIHRoaXMuaXNPYnNlcnZpbmdBY3Rpb25zID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5vYnNlcnZlQWN0aW9ucygpO1xuXG4gICAgdGhpcy5jdXN0b21BY3Rpb25zLmZvckVhY2goKHBhZ2VBY3Rpb24pID0+IHtcbiAgICAgIGlmIChwYWdlQWN0aW9uLmlzRml4ZWQpIHtcbiAgICAgICAgdGhpcy5maXhlZEFjdGlvbnNUZW1wbGF0ZSA9IHBhZ2VBY3Rpb24udGVtcGxhdGU7XG4gICAgICB9IGVsc2UgaWYgKHBhZ2VBY3Rpb24uaXNTdGlja3kpIHtcbiAgICAgICAgdGhpcy5zdGlja3lBY3Rpb25zVGVtcGxhdGUgPSBwYWdlQWN0aW9uLnRlbXBsYXRlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYWdlQWN0aW9uc1RlbXBsYXRlID0gcGFnZUFjdGlvbi50ZW1wbGF0ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb2JzZXJ2ZUFjdGlvbnMoKSB7XG4gICAgaWYgKCF0aGlzLmhlYWRlcj8uYWN0aW9uc0VsZW1lbnQpIHtcbiAgICAgIC8vIE5vdGhpbmcgdG8gb2JzZXJ2ZVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzT2JzZXJ2aW5nQWN0aW9ucykge1xuICAgICAgLy8gQWxyZWFkeSBvYnNlcnZpbmdcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBXZSBhcmUgbm90IGFjdHVhbGx5IG9ic2VydmluZyBhY3Rpb25zIHVudGlsIGFmdGVyIHRoZSBgd2hlbkNvbnRlbnRSZWFkeWAgcHJvbWlzZSBoYXMgcmVzb2x2ZWQsXG4gICAgLy8gYnV0IHNpbmNlIHdlJ3ZlIGFscmVhZHkgY2hlY2tlZCB0aGF0IHRoZXJlJ3MgYW4gYWN0aW9ucyBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGd1YXJkIGFib3ZlLFxuICAgIC8vIHdlJ2xsIC0gZWFnZXJseSAtIHNldCB0aGlzIGZsYWcgbm93IHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgcmUtcnVucyBvZiB0aGUgcmVzdCBvZiB0aGlzIG1ldGhvZDpcbiAgICB0aGlzLmlzT2JzZXJ2aW5nQWN0aW9ucyA9IHRydWU7XG5cbiAgICBpZiAoIXRoaXMuc3RpY2t5QWN0aW9uc0ludGVyc2VjdGlvbk9ic2VydmVyKSB7XG4gICAgICB0aGlzLnN0aWNreUFjdGlvbnNJbnRlcnNlY3Rpb25PYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcbiAgICAgICAgKGVudHJpZXMpID0+IHtcbiAgICAgICAgICAvLyBJbiByYXJlIHNjZW5hcmlvcyB3ZSBnZXQgbW9yZSB0aGFuIDEgZW50cnkgLSB1c2UgdGhlIGxhc3Qgb25lOlxuICAgICAgICAgIGNvbnN0IGxhc3RFbnRyeSA9IGVudHJpZXNbZW50cmllcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICBpZiAobGFzdEVudHJ5KSB7XG4gICAgICAgICAgICBjb25zdCBzaG93VG9vbGJhckFjdGlvbnMgPSAhbGFzdEVudHJ5LmlzSW50ZXJzZWN0aW5nO1xuICAgICAgICAgICAgLy8gT25seSBmbGlwIHRoZSBmbGFnIGFuZCBydW4gQ2hhbmdlIERldGVjdGlvbiB3aGVuIGNoYW5nZWQ6XG4gICAgICAgICAgICBpZiAoc2hvd1Rvb2xiYXJBY3Rpb25zICE9PSB0aGlzLnRvb2xiYXJBY3Rpb25zVmlzaWJsZSkge1xuICAgICAgICAgICAgICB0aGlzLnRvb2xiYXJBY3Rpb25zVmlzaWJsZSA9IHNob3dUb29sYmFyQWN0aW9ucztcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7IHJvb3Q6IHRoaXMuaW9uQ29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudCB9XG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFJ1biBvdXRzaWRlIEFuZ3VsYXIgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSB0cmlnZ2VyaW5nIGNoYW5nZSBkZXRlY3Rpb25cbiAgICAvLyBhbmQgLSB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMgLSBhbiBpbmZpbml0ZSBsb29wIHdoZW4gY2FsbGVkIHdpdGhpbiBuZ0FmdGVyQ29udGVudENoZWNrZWQ6XG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMud2hlbkNvbnRlbnRSZWFkeSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5oZWFkZXI/LmFjdGlvbnNFbGVtZW50Py5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy5zdGlja3lBY3Rpb25zSW50ZXJzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmhlYWRlci5hY3Rpb25zRWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVub2JzZXJ2ZUFjdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuaGVhZGVyPy5hY3Rpb25zRWxlbWVudCkge1xuICAgICAgdGhpcy5zdGlja3lBY3Rpb25zSW50ZXJzZWN0aW9uT2JzZXJ2ZXI/LnVub2JzZXJ2ZSh0aGlzLmhlYWRlci5hY3Rpb25zRWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG4gICAgdGhpcy5pc09ic2VydmluZ0FjdGlvbnMgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QWN0aW9uQnV0dG9uc1dpZHRoKCkge1xuICAgIGlmICghdGhpcy5pb25Ub29sYmFyQnV0dG9uc0VsZW1lbnQpIHJldHVybjtcblxuICAgIC8vIEVuc3VyZSBpb24tdG9vbGJhciBjdXN0b20gZWxlbWVudCBoYXMgYmVlbiBkZWZpbmVkIChwcmltYXJpbHkgd2hlbiB0ZXN0aW5nLCBidXQgZG9lc24ndCBodXJ0KTpcbiAgICBjdXN0b21FbGVtZW50cy53aGVuRGVmaW5lZCh0aGlzLmlvblRvb2xiYXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQubG9jYWxOYW1lKS50aGVuKCgpID0+IHtcbiAgICAgIC8vIEVuc3VyZSB0b29sYmFyIGFuZCBidXR0b25zIGhhdmUgYmVlbiByZW5kZXJlZCBhbmQgaGFzIGRpbWVuc2lvbnM6XG4gICAgICBjb21wb25lbnRPblJlYWR5KHRoaXMuaW9uVG9vbGJhckVsZW1lbnQubmF0aXZlRWxlbWVudCwgKHRvb2xiYXIpID0+IHtcbiAgICAgICAgbGV0IHN0YXJ0QnV0dG9uc1dpZHRoID0gMDtcbiAgICAgICAgbGV0IGVuZEJ1dHRvbnNXaWR0aCA9IDA7XG5cbiAgICAgICAgdGhpcy5pb25Ub29sYmFyQnV0dG9uc0VsZW1lbnRcbiAgICAgICAgICAubWFwKChpb25CdXR0b25zRWxlbWVudFJlZikgPT4gaW9uQnV0dG9uc0VsZW1lbnRSZWYubmF0aXZlRWxlbWVudClcbiAgICAgICAgICAuZm9yRWFjaCgoaW9uQnV0dG9uc0VsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShpb25CdXR0b25zRWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBtYXJnaW4gPSBwYXJzZUludChzdHlsZS5tYXJnaW5MZWZ0KSArIHBhcnNlSW50KHN0eWxlLm1hcmdpblJpZ2h0KTtcbiAgICAgICAgICAgIGlmIChpb25CdXR0b25zRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3Nsb3QnKSA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICAgICAgICBzdGFydEJ1dHRvbnNXaWR0aCArPSBpb25CdXR0b25zRWxlbWVudC5vZmZzZXRXaWR0aCArIG1hcmdpbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVuZEJ1dHRvbnNXaWR0aCArPSBpb25CdXR0b25zRWxlbWVudC5vZmZzZXRXaWR0aCArIG1hcmdpbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBhY3Rpb25CdXR0b25zTWF4V2lkdGggPSBNYXRoLm1heChzdGFydEJ1dHRvbnNXaWR0aCwgZW5kQnV0dG9uc1dpZHRoKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICB0b29sYmFyLFxuICAgICAgICAgICctLWFjdGlvbi1idXR0b25zLXdpZHRoJyxcbiAgICAgICAgICBgJHthY3Rpb25CdXR0b25zTWF4V2lkdGh9cHhgLFxuICAgICAgICAgIFJlbmRlcmVyU3R5bGVGbGFnczIuRGFzaENhc2VcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQ29udGVudCgpIHtcbiAgICB0aGlzLmN1c3RvbUNvbnRlbnQuZm9yRWFjaCgoY29udGVudCkgPT4ge1xuICAgICAgaWYgKGNvbnRlbnQuaXNGaXhlZCkge1xuICAgICAgICB0aGlzLmZpeGVkQ29udGVudFRlbXBsYXRlID0gY29udGVudC50ZW1wbGF0ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3VzdG9tQ29udGVudFRlbXBsYXRlID0gY29udGVudC50ZW1wbGF0ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVN0aWNreUNvbnRlbnQoKSB7XG4gICAgdGhpcy5zdGlja3lDb250ZW50VGVtcGxhdGUgPSB0aGlzLnN0aWNreUNvbnRlbnRSZWY7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVN0aWNreUNvbnRlbnRJbnRlcnNlY3Rpb25PYnNlcnZlcigpIHtcbiAgICBjb25zdCBvcHRpb25zOiBJbnRlcnNlY3Rpb25PYnNlcnZlckluaXQgPSB7XG4gICAgICByb290OiB0aGlzLmlvbkNvbnRlbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgfTtcblxuICAgIGNvbnN0IGNhbGxiYWNrOiBJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrID0gKGVudHJpZXMpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzU3RpY2t5Q29udGVudFBpbm5lZCAhPT0gIWVudHJpZXNbMF0uaXNJbnRlcnNlY3RpbmcpIHtcbiAgICAgICAgdGhpcy5pc1N0aWNreUNvbnRlbnRQaW5uZWQgPSAhdGhpcy5pc1N0aWNreUNvbnRlbnRQaW5uZWQ7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihjYWxsYmFjaywgb3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGdldFBhdGhuYW1lKHVybDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHVybC5zcGxpdCgnPycpWzBdO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleWJvYXJkV2lsbFNob3cnLCBbJyRldmVudCddKVxuICBfb25LZXlib2FyZFdpbGxTaG93KGluZm8/OiB7IGtleWJvYXJkSGVpZ2h0OiBudW1iZXIgfSkge1xuICAgIGlmIChpbmZvICYmIGluZm8ua2V5Ym9hcmRIZWlnaHQpIHtcbiAgICAgIHRoaXMuaW9uQ29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgJy0ta2V5Ym9hcmQtb2Zmc2V0JyxcbiAgICAgICAgYCR7aW5mby5rZXlib2FyZEhlaWdodH1weGBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleWJvYXJkV2lsbEhpZGUnKVxuICBfb25LZXlib2FyZFdpbGxIaWRlKCkge1xuICAgIHRoaXMuaW9uQ29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1rZXlib2FyZC1vZmZzZXQnLCAnMHB4Jyk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKGB3aW5kb3c6JHtzZWxlY3RlZFRhYkNsaWNrRXZlbnR9YClcbiAgX29uU2VsZWN0ZWRUYWJDbGljaygpIHtcbiAgICBpZiAodGhpcy5jb250ZW50KSB7XG4gICAgICB0aGlzLmNvbnRlbnQuc2Nyb2xsVG9Ub3AoS2lyYnlBbmltYXRpb24uRHVyYXRpb24uTE9ORyk7XG4gICAgfVxuICB9XG59XG4iLCI8aW9uLWhlYWRlcj5cbiAgPGlvbi10b29sYmFyXG4gICAgW2NsYXNzLmNvbnRlbnQtc2Nyb2xsZWRdPVwiaXNDb250ZW50U2Nyb2xsZWRcIlxuICAgIFtjbGFzcy5jb250ZW50LXBpbm5lZF09XCJpc1N0aWNreUNvbnRlbnRQaW5uZWRcIlxuICA+XG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiPlxuICAgICAgPGlvbi1iYWNrLWJ1dHRvblxuICAgICAgICB0ZXh0PVwiXCJcbiAgICAgICAgW2RlZmF1bHRIcmVmXT1cImRlZmF1bHRCYWNrSHJlZlwiXG4gICAgICAgIGljb249XCJhc3NldHMva2lyYnkvaWNvbnMvc3ZnL2Fycm93LWJhY2suc3ZnXCJcbiAgICAgICAgW3N0eWxlLnZpc2liaWxpdHldPVwiaGlkZUJhY2tCdXR0b24gPyAnaGlkZGVuJyA6IG51bGxcIlxuICAgICAgPjwvaW9uLWJhY2stYnV0dG9uPlxuICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgPGlvbi10aXRsZSBbY2xhc3Muc2xpZGUtYW5kLWZhZGUtaW5dPVwidG9vbGJhclRpdGxlVmlzaWJsZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInRvb2xiYXItdGl0bGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0aXRsZUFjdGlvbkljb25UZW1wbGF0ZSAmJiAhaGFzSW50ZXJhY3RpdmVUaXRsZVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b29sYmFyVGl0bGVUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAqbmdJZj1cIiEhdGl0bGVBY3Rpb25JY29uVGVtcGxhdGUgfHwgaGFzSW50ZXJhY3RpdmVUaXRsZVwiXG4gICAgICAgICAgW2NsYXNzLmNsaWNrYWJsZV09XCJoYXNJbnRlcmFjdGl2ZVRpdGxlXCJcbiAgICAgICAgICBbY2xhc3MuaGFzLWljb25dPVwiISF0aXRsZUFjdGlvbkljb25UZW1wbGF0ZVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uVGl0bGVDbGljaygkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvb2xiYXJUaXRsZVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0aXRsZUFjdGlvbkljb25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2lvbi10aXRsZT5cbiAgICA8aW9uLWJ1dHRvbnNcbiAgICAgICpuZ0lmPVwiISFoZWFkZXJBY3Rpb25zVGVtcGxhdGVcIlxuICAgICAgY2xhc3M9XCJoaWRlXCJcbiAgICAgIHNsb3Q9XCJwcmltYXJ5XCJcbiAgICAgIFtjbGFzcy5mYWRlLWluXT1cInRvb2xiYXJBY3Rpb25zVmlzaWJsZVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlckFjdGlvbnNUZW1wbGF0ZTsgaW5qZWN0b3I6IHRvb2xiYXJBY3Rpb25Hcm91cEluamVjdG9yXCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L2lvbi1idXR0b25zPlxuICAgIDxpb24tYnV0dG9ucyAqbmdJZj1cIiEhc3RpY2t5QWN0aW9uc1RlbXBsYXRlXCIgY2xhc3M9XCJsZWdhY3ktYWN0aW9uc1wiIHNsb3Q9XCJwcmltYXJ5XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3RpY2t5QWN0aW9uc1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9pb24tYnV0dG9ucz5cbiAgICA8aW9uLWJ1dHRvbnMgKm5nSWY9XCIhIWZpeGVkQWN0aW9uc1RlbXBsYXRlXCIgY2xhc3M9XCJsZWdhY3ktYWN0aW9uc1wiIHNsb3Q9XCJzZWNvbmRhcnlcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaXhlZEFjdGlvbnNUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvaW9uLWJ1dHRvbnM+XG4gIDwvaW9uLXRvb2xiYXI+XG48L2lvbi1oZWFkZXI+XG5cbjxpb24tY29udGVudFxuICBzY3JvbGxFdmVudHM9XCJ0cnVlXCJcbiAgZm9yY2VPdmVyc2Nyb2xsPVwiZmFsc2VcIlxuICBbY2xhc3NdPVwiZ2V0TWF4V2lkdGhDbGFzc2VzKClcIlxuICBbY2xhc3MuaGFzLWhlYWRlcl09XCJoYXNIZWFkZXJcIlxuPlxuICA8aW9uLXJlZnJlc2hlclxuICAgICpuZ0lmPVwicmVmcmVzaC5vYnNlcnZlcnMubGVuZ3RoID4gMFwiXG4gICAgKGlvblJlZnJlc2gpPVwiZGVsZWdhdGVSZWZyZXNoRXZlbnQoJGV2ZW50KVwiXG4gICAgc2xvdD1cImZpeGVkXCJcbiAgPlxuICAgIDxraXJieS1zcGlubmVyPjwva2lyYnktc3Bpbm5lcj5cbiAgPC9pb24tcmVmcmVzaGVyPlxuXG4gIDwhLS0gUGFnZSBoZWFkZXIgLS0+XG4gIDxkaXYgY2xhc3M9XCJwYWdlLWhlYWRlci1jb250YWluZXJcIiAqbmdJZj1cImhhc1BhZ2VUaXRsZSAmJiAhaGFzSGVhZGVyXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJwYWdlLWhlYWRlclwiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICd0ZXh0LWNlbnRlcic6IHRpdGxlQWxpZ25tZW50ID09PSAnY2VudGVyJyxcbiAgICAgICAgJ3RleHQtcmlnaHQnOiB0aXRsZUFsaWdubWVudCA9PT0gJ3JpZ2h0J1xuICAgICAgfVwiXG4gICAgPlxuICAgICAgPGRpdiAjcGFnZVRpdGxlIGNsYXNzPVwicGFnZS10aXRsZVwiIFtjbGFzcy5oYXMtYWN0aW9uc109XCIhIXBhZ2VBY3Rpb25zVGVtcGxhdGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tVGl0bGVUZW1wbGF0ZSB8fCBkZWZhdWx0UGFnZVRpdGxlVGVtcGxhdGVcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInBhZ2VBY3Rpb25zVGVtcGxhdGUgfHwgZGVmYXVsdFBhZ2VBY3Rpb25zVGVtcGxhdGVcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJoYXNQYWdlU3VidGl0bGVcIiBjbGFzcz1cInBhZ2Utc3VidGl0bGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tU3VidGl0bGVUZW1wbGF0ZSB8fCBkZWZhdWx0UGFnZVN1YnRpdGxlVGVtcGxhdGVcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBIZWFkZXIgLS0+XG4gIDxkaXYgY2xhc3M9XCJwYWdlLWhlYWRlci1jb250YWluZXJcIiAqbmdJZj1cImhhc0hlYWRlclwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImtpcmJ5LWhlYWRlclwiPjwvbmctY29udGVudD5cbiAgPC9kaXY+XG5cbiAgPCEtLSAgU3RpY2t5IGNvbnRlbnQgLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdGlja3lDb250ZW50VGVtcGxhdGVcIj5cbiAgICA8ZGl2XG4gICAgICAjc3RpY2t5Q29udGVudENvbnRhaW5lclxuICAgICAgY2xhc3M9XCJzdGlja3ktY29udGVudC1jb250YWluZXJcIlxuICAgICAgW2NsYXNzLmNvbnRlbnQtcGlubmVkXT1cImlzU3RpY2t5Q29udGVudFBpbm5lZFwiXG4gICAgPlxuICAgICAgPGRpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN0aWNreUNvbnRlbnRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gQ29udGVudCAtLT5cbiAgPGRpdiBjbGFzcz1cImNvbnRlbnQtaW5uZXJcIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbUNvbnRlbnRUZW1wbGF0ZSB8fCBkZWZhdWx0Q29udGVudFRlbXBsYXRlXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuXG4gIDxkaXYgc2xvdD1cImZpeGVkXCIgY2xhc3M9XCJmaXhlZC1jb250ZW50XCIgKm5nSWY9XCJmaXhlZENvbnRlbnRUZW1wbGF0ZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb250ZW50LWlubmVyXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZml4ZWRDb250ZW50VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2lvbi1jb250ZW50PlxuXG48aW9uLWZvb3Rlcj5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwia2lyYnktcGFnZS1mb290ZXJcIj48L25nLWNvbnRlbnQ+XG48L2lvbi1mb290ZXI+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFBhZ2VUaXRsZVRlbXBsYXRlPlxuICA8aDEgW2tpcmJ5Rml0SGVhZGluZ109XCJmaXRIZWFkaW5nQ29uZmlnXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNpbXBsZVRpdGxlVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9oMT5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2RlZmF1bHRQYWdlU3VidGl0bGVUZW1wbGF0ZT5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNpbXBsZVN1YnRpdGxlVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2RlZmF1bHRQYWdlQWN0aW9uc1RlbXBsYXRlPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJraXJieS1wYWdlLWFjdGlvbnNcIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRDb250ZW50VGVtcGxhdGU+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cImtpcmJ5LXBhZ2UtY29udGVudFwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2ltcGxlVGl0bGVUZW1wbGF0ZT57eyB0aXRsZSB9fTwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3NpbXBsZVN1YnRpdGxlVGVtcGxhdGU+e3sgc3VidGl0bGUgfX08L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNzaW1wbGVUb29sYmFyVGl0bGVUZW1wbGF0ZT57eyB0b29sYmFyVGl0bGUgfX08L25nLXRlbXBsYXRlPlxuIl19
|