@wavemaker/app-ng-runtime 11.14.1-rc.6310 → 11.14.2-1.245
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/components/advanced/carousel/bundles/index.umd.js +15 -1
- package/components/advanced/carousel/carousel.directive.d.ts +1 -0
- package/components/advanced/carousel/esm2022/carousel.directive.mjs +16 -2
- package/components/advanced/carousel/fesm2022/index.mjs +15 -1
- package/components/advanced/carousel/fesm2022/index.mjs.map +1 -1
- package/components/advanced/login/bundles/index.umd.js +24 -3
- package/components/advanced/login/esm2022/login.component.mjs +25 -4
- package/components/advanced/login/fesm2022/index.mjs +24 -3
- package/components/advanced/login/fesm2022/index.mjs.map +1 -1
- package/components/advanced/login/login.component.d.ts +5 -2
- package/components/base/bundles/index.umd.js +331 -36
- package/components/base/directives/show-in-device.directive.d.ts +2 -1
- package/components/base/esm2022/directives/show-in-device.directive.mjs +22 -4
- package/components/base/esm2022/pipes/custom-pipes.mjs +10 -10
- package/components/base/esm2022/utils/widget-utils.mjs +3 -3
- package/components/base/esm2022/widgets/common/base/base-container.component.mjs +27 -1
- package/components/base/esm2022/widgets/common/base/base-field-validations.mjs +18 -1
- package/components/base/esm2022/widgets/common/base/base.component.mjs +68 -7
- package/components/base/esm2022/widgets/common/base/custom-widget-container.directive.mjs +9 -1
- package/components/base/esm2022/widgets/common/base/dataset-aware-nav.component.mjs +44 -11
- package/components/base/esm2022/widgets/common/base/partial-container.directive.mjs +20 -1
- package/components/base/esm2022/widgets/common/item-template/item-template.directive.mjs +26 -1
- package/components/base/esm2022/widgets/common/lazy-load/lazy-load.directive.mjs +44 -4
- package/components/base/esm2022/widgets/common/partial-param/partial-param.directive.mjs +16 -1
- package/components/base/esm2022/widgets/common/pull-to-refresh/pull-to-refresh.mjs +22 -1
- package/components/base/esm2022/widgets/framework/property-change-handler.mjs +7 -2
- package/components/base/esm2022/widgets/framework/widget-proxy-provider.mjs +5 -3
- package/components/base/esm2022/widgets/framework/widget-registry.mjs +6 -3
- package/components/base/fesm2022/index.mjs +327 -34
- package/components/base/fesm2022/index.mjs.map +1 -1
- package/components/base/pipes/custom-pipes.d.ts +5 -5
- package/components/base/widgets/common/base/base-container.component.d.ts +3 -2
- package/components/base/widgets/common/base/base-field-validations.d.ts +1 -0
- package/components/base/widgets/common/base/custom-widget-container.directive.d.ts +3 -2
- package/components/base/widgets/common/base/dataset-aware-nav.component.d.ts +6 -2
- package/components/base/widgets/common/base/partial-container.directive.d.ts +3 -2
- package/components/base/widgets/common/item-template/item-template.directive.d.ts +3 -2
- package/components/base/widgets/common/lazy-load/lazy-load.directive.d.ts +1 -1
- package/components/base/widgets/common/partial-param/partial-param.directive.d.ts +3 -2
- package/components/base/widgets/common/pull-to-refresh/pull-to-refresh.d.ts +3 -2
- package/components/basic/anchor/bundles/index.umd.js +13 -1
- package/components/basic/anchor/esm2022/anchor.component.mjs +14 -2
- package/components/basic/anchor/fesm2022/index.mjs +13 -1
- package/components/basic/anchor/fesm2022/index.mjs.map +1 -1
- package/components/basic/html/bundles/index.umd.js +13 -1
- package/components/basic/html/esm2022/html.directive.mjs +14 -2
- package/components/basic/html/fesm2022/index.mjs +13 -1
- package/components/basic/html/fesm2022/index.mjs.map +1 -1
- package/components/basic/label/bundles/index.umd.js +17 -1
- package/components/basic/label/esm2022/label.directive.mjs +18 -2
- package/components/basic/label/fesm2022/index.mjs +17 -1
- package/components/basic/label/fesm2022/index.mjs.map +1 -1
- package/components/basic/label/label.directive.d.ts +3 -2
- package/components/basic/progress/progress-circle/bundles/index.umd.js +10 -0
- package/components/basic/progress/progress-circle/esm2022/progress-circle.component.mjs +11 -1
- package/components/basic/progress/progress-circle/fesm2022/index.mjs +10 -0
- package/components/basic/progress/progress-circle/fesm2022/index.mjs.map +1 -1
- package/components/basic/progress/progress-circle/progress-circle.component.d.ts +3 -2
- package/components/basic/search/bundles/index.umd.js +42 -14
- package/components/basic/search/esm2022/scrollable.directive.mjs +13 -4
- package/components/basic/search/esm2022/search.component.mjs +31 -12
- package/components/basic/search/fesm2022/index.mjs +42 -14
- package/components/basic/search/fesm2022/index.mjs.map +1 -1
- package/components/basic/search/scrollable.directive.d.ts +5 -3
- package/components/basic/search/search.component.d.ts +3 -2
- package/components/basic/spinner/bundles/index.umd.js +9 -1
- package/components/basic/spinner/esm2022/spinner.component.mjs +10 -2
- package/components/basic/spinner/fesm2022/index.mjs +9 -1
- package/components/basic/spinner/fesm2022/index.mjs.map +1 -1
- package/components/basic/spinner/spinner.component.d.ts +4 -2
- package/components/chart/bundles/index.umd.js +21 -3
- package/components/chart/esm2022/chart.component.mjs +22 -4
- package/components/chart/fesm2022/index.mjs +21 -3
- package/components/chart/fesm2022/index.mjs.map +1 -1
- package/components/containers/accordion/accordion-pane/accordion-pane.component.d.ts +3 -2
- package/components/containers/accordion/accordion.directive.d.ts +5 -2
- package/components/containers/accordion/bundles/index.umd.js +49 -2
- package/components/containers/accordion/esm2022/accordion-pane/accordion-pane.component.mjs +10 -1
- package/components/containers/accordion/esm2022/accordion.directive.mjs +41 -3
- package/components/containers/accordion/fesm2022/index.mjs +49 -2
- package/components/containers/accordion/fesm2022/index.mjs.map +1 -1
- package/components/containers/panel/bundles/index.umd.js +13 -0
- package/components/containers/panel/esm2022/panel.component.mjs +14 -1
- package/components/containers/panel/fesm2022/index.mjs +13 -0
- package/components/containers/panel/fesm2022/index.mjs.map +1 -1
- package/components/containers/panel/panel.component.d.ts +3 -2
- package/components/containers/tabs/bundles/index.umd.js +54 -2
- package/components/containers/tabs/esm2022/tab-pane/tab-pane.component.mjs +10 -1
- package/components/containers/tabs/esm2022/tabs.component.mjs +46 -3
- package/components/containers/tabs/fesm2022/index.mjs +54 -2
- package/components/containers/tabs/fesm2022/index.mjs.map +1 -1
- package/components/containers/tabs/tab-pane/tab-pane.component.d.ts +3 -2
- package/components/containers/tabs/tabs.component.d.ts +5 -2
- package/components/containers/wizard/bundles/index.umd.js +47 -3
- package/components/containers/wizard/esm2022/wizard-step/wizard-step.component.mjs +16 -3
- package/components/containers/wizard/esm2022/wizard.component.mjs +33 -2
- package/components/containers/wizard/fesm2022/index.mjs +47 -3
- package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
- package/components/containers/wizard/wizard-step/wizard-step.component.d.ts +3 -2
- package/components/containers/wizard/wizard.component.d.ts +4 -2
- package/components/data/card/bundles/index.umd.js +17 -1
- package/components/data/card/card-content/card-content.component.d.ts +3 -2
- package/components/data/card/card.component.d.ts +4 -2
- package/components/data/card/esm2022/card-content/card-content.component.mjs +6 -1
- package/components/data/card/esm2022/card.component.mjs +13 -2
- package/components/data/card/fesm2022/index.mjs +17 -1
- package/components/data/card/fesm2022/index.mjs.map +1 -1
- package/components/data/form/bundles/index.umd.js +92 -0
- package/components/data/form/esm2022/form-action/form-action.directive.mjs +7 -1
- package/components/data/form/esm2022/form-field/form-field.directive.mjs +28 -1
- package/components/data/form/esm2022/form-widget.directive.mjs +8 -1
- package/components/data/form/esm2022/form.component.mjs +27 -1
- package/components/data/form/esm2022/live-actions/live-actions.directive.mjs +7 -1
- package/components/data/form/esm2022/live-filter/live-filter.directive.mjs +12 -1
- package/components/data/form/esm2022/live-form/live-form.directive.mjs +10 -1
- package/components/data/form/fesm2022/index.mjs +92 -0
- package/components/data/form/fesm2022/index.mjs.map +1 -1
- package/components/data/form/form-action/form-action.directive.d.ts +3 -2
- package/components/data/form/form-field/form-field.directive.d.ts +3 -2
- package/components/data/form/form-widget.directive.d.ts +3 -2
- package/components/data/form/live-actions/live-actions.directive.d.ts +3 -1
- package/components/data/form/live-filter/live-filter.directive.d.ts +3 -1
- package/components/data/form/live-form/live-form.directive.d.ts +3 -1
- package/components/data/list/bundles/index.umd.js +213 -19
- package/components/data/list/esm2022/list-item.directive.mjs +95 -11
- package/components/data/list/esm2022/list.component.mjs +120 -10
- package/components/data/list/fesm2022/index.mjs +213 -19
- package/components/data/list/fesm2022/index.mjs.map +1 -1
- package/components/data/list/list-item.directive.d.ts +7 -2
- package/components/data/list/list.component.d.ts +7 -0
- package/components/data/live-table/bundles/index.umd.js +13 -1
- package/components/data/live-table/esm2022/live-table.component.mjs +14 -2
- package/components/data/live-table/fesm2022/index.mjs +13 -1
- package/components/data/live-table/fesm2022/index.mjs.map +1 -1
- package/components/data/live-table/live-table.component.d.ts +4 -2
- package/components/data/pagination/bundles/index.umd.js +57 -4
- package/components/data/pagination/esm2022/pagination.component.mjs +58 -5
- package/components/data/pagination/fesm2022/index.mjs +57 -4
- package/components/data/pagination/fesm2022/index.mjs.map +1 -1
- package/components/data/pagination/pagination.component.d.ts +4 -2
- package/components/data/table/bundles/index.umd.js +345 -15
- package/components/data/table/esm2022/table-action/table-action.directive.mjs +8 -1
- package/components/data/table/esm2022/table-column/table-column.directive.mjs +107 -3
- package/components/data/table/esm2022/table-column-group/table-column-group.directive.mjs +9 -1
- package/components/data/table/esm2022/table-cud.directive.mjs +8 -2
- package/components/data/table/esm2022/table-filter.directive.mjs +12 -2
- package/components/data/table/esm2022/table-row/table-row.directive.mjs +8 -1
- package/components/data/table/esm2022/table-row-action/table-row-action.directive.mjs +8 -1
- package/components/data/table/esm2022/table.component.mjs +193 -12
- package/components/data/table/fesm2022/index.mjs +345 -15
- package/components/data/table/fesm2022/index.mjs.map +1 -1
- package/components/data/table/table-action/table-action.directive.d.ts +3 -2
- package/components/data/table/table-column/table-column.directive.d.ts +3 -2
- package/components/data/table/table-column-group/table-column-group.directive.d.ts +3 -2
- package/components/data/table/table-cud.directive.d.ts +3 -1
- package/components/data/table/table-filter.directive.d.ts +3 -1
- package/components/data/table/table-row/table-row.directive.d.ts +3 -2
- package/components/data/table/table-row-action/table-row-action.directive.d.ts +3 -2
- package/components/data/table/table.component.d.ts +6 -2
- package/components/dialogs/alert-dialog/alert-dialog.component.d.ts +3 -2
- package/components/dialogs/alert-dialog/bundles/index.umd.js +5 -0
- package/components/dialogs/alert-dialog/esm2022/alert-dialog.component.mjs +6 -1
- package/components/dialogs/alert-dialog/fesm2022/index.mjs +5 -0
- package/components/dialogs/alert-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/confirm-dialog/bundles/index.umd.js +5 -0
- package/components/dialogs/confirm-dialog/confirm-dialog.component.d.ts +3 -2
- package/components/dialogs/confirm-dialog/esm2022/confirm-dialog.component.mjs +6 -1
- package/components/dialogs/confirm-dialog/fesm2022/index.mjs +5 -0
- package/components/dialogs/confirm-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/default/bundles/index.umd.js +15 -2
- package/components/dialogs/default/dialog-body/dialog-body.directive.d.ts +4 -2
- package/components/dialogs/default/esm2022/dialog-body/dialog-body.directive.mjs +16 -3
- package/components/dialogs/default/fesm2022/index.mjs +15 -2
- package/components/dialogs/default/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/design-dialog/bundles/index.umd.js +7 -0
- package/components/dialogs/design-dialog/dialog.component.d.ts +3 -2
- package/components/dialogs/design-dialog/esm2022/dialog.component.mjs +8 -1
- package/components/dialogs/design-dialog/fesm2022/index.mjs +7 -0
- package/components/dialogs/design-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/iframe-dialog/bundles/index.umd.js +5 -0
- package/components/dialogs/iframe-dialog/esm2022/iframe-dialog.component.mjs +6 -1
- package/components/dialogs/iframe-dialog/fesm2022/index.mjs +5 -0
- package/components/dialogs/iframe-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/iframe-dialog/iframe-dialog.component.d.ts +3 -2
- package/components/dialogs/partial-dialog/bundles/index.umd.js +23 -3
- package/components/dialogs/partial-dialog/esm2022/partial-dialog.component.mjs +24 -4
- package/components/dialogs/partial-dialog/fesm2022/index.mjs +23 -3
- package/components/dialogs/partial-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/partial-dialog/partial-dialog.component.d.ts +4 -2
- package/components/input/base-form/base-form.component.d.ts +4 -2
- package/components/input/base-form/bundles/index.umd.js +16 -2
- package/components/input/base-form/esm2022/base-form.component.mjs +17 -3
- package/components/input/base-form/fesm2022/index.mjs +16 -2
- package/components/input/base-form/fesm2022/index.mjs.map +1 -1
- package/components/input/base-form-custom/base-form-custom.component.d.ts +3 -2
- package/components/input/base-form-custom/bundles/index.umd.js +13 -2
- package/components/input/base-form-custom/esm2022/base-form-custom.component.mjs +14 -3
- package/components/input/base-form-custom/fesm2022/index.mjs +13 -2
- package/components/input/base-form-custom/fesm2022/index.mjs.map +1 -1
- package/components/input/checkbox/bundles/index.umd.js +7 -0
- package/components/input/checkbox/checkbox.component.d.ts +3 -2
- package/components/input/checkbox/esm2022/checkbox.component.mjs +8 -1
- package/components/input/checkbox/fesm2022/index.mjs +7 -0
- package/components/input/checkbox/fesm2022/index.mjs.map +1 -1
- package/components/input/checkboxset/bundles/index.umd.js +18 -2
- package/components/input/checkboxset/checkboxset.component.d.ts +4 -2
- package/components/input/checkboxset/esm2022/checkboxset.component.mjs +19 -3
- package/components/input/checkboxset/fesm2022/index.mjs +18 -2
- package/components/input/checkboxset/fesm2022/index.mjs.map +1 -1
- package/components/input/chips/bundles/index.umd.js +45 -5
- package/components/input/chips/chips.component.d.ts +3 -2
- package/components/input/chips/esm2022/chips.component.mjs +46 -6
- package/components/input/chips/fesm2022/index.mjs +45 -5
- package/components/input/chips/fesm2022/index.mjs.map +1 -1
- package/components/input/color-picker/bundles/index.umd.js +8 -0
- package/components/input/color-picker/color-picker.component.d.ts +3 -2
- package/components/input/color-picker/esm2022/color-picker.component.mjs +9 -1
- package/components/input/color-picker/fesm2022/index.mjs +8 -0
- package/components/input/color-picker/fesm2022/index.mjs.map +1 -1
- package/components/input/composite/bundles/index.umd.js +10 -1
- package/components/input/composite/composite.directive.d.ts +3 -2
- package/components/input/composite/esm2022/composite.directive.mjs +11 -2
- package/components/input/composite/fesm2022/index.mjs +10 -1
- package/components/input/composite/fesm2022/index.mjs.map +1 -1
- package/components/input/currency/bundles/index.umd.js +7 -0
- package/components/input/currency/currency.component.d.ts +3 -2
- package/components/input/currency/esm2022/currency.component.mjs +8 -1
- package/components/input/currency/fesm2022/index.mjs +7 -0
- package/components/input/currency/fesm2022/index.mjs.map +1 -1
- package/components/input/dataset-aware-form/bundles/index.umd.js +26 -2
- package/components/input/dataset-aware-form/esm2022/dataset-aware-form.component.mjs +27 -3
- package/components/input/dataset-aware-form/fesm2022/index.mjs +26 -2
- package/components/input/dataset-aware-form/fesm2022/index.mjs.map +1 -1
- package/components/input/epoch/date/bundles/index.umd.js +22 -0
- package/components/input/epoch/date/date.component.d.ts +1 -0
- package/components/input/epoch/date/esm2022/date.component.mjs +23 -1
- package/components/input/epoch/date/fesm2022/index.mjs +22 -0
- package/components/input/epoch/date/fesm2022/index.mjs.map +1 -1
- package/components/input/file-upload/bundles/index.umd.js +25 -8
- package/components/input/file-upload/esm2022/file-upload.component.mjs +26 -9
- package/components/input/file-upload/fesm2022/index.mjs +25 -8
- package/components/input/file-upload/fesm2022/index.mjs.map +1 -1
- package/components/input/file-upload/file-upload.component.d.ts +3 -0
- package/components/input/number/bundles/index.umd.js +8 -0
- package/components/input/number/esm2022/number.component.mjs +9 -1
- package/components/input/number/fesm2022/index.mjs +8 -0
- package/components/input/number/fesm2022/index.mjs.map +1 -1
- package/components/input/number/number.component.d.ts +3 -2
- package/components/input/radioset/bundles/index.umd.js +18 -2
- package/components/input/radioset/esm2022/radioset.component.mjs +19 -3
- package/components/input/radioset/fesm2022/index.mjs +18 -2
- package/components/input/radioset/fesm2022/index.mjs.map +1 -1
- package/components/input/radioset/radioset.component.d.ts +4 -2
- package/components/input/rating/bundles/index.umd.js +10 -0
- package/components/input/rating/esm2022/rating.component.mjs +11 -1
- package/components/input/rating/fesm2022/index.mjs +10 -0
- package/components/input/rating/fesm2022/index.mjs.map +1 -1
- package/components/input/rating/rating.component.d.ts +3 -2
- package/components/input/select/bundles/index.umd.js +6 -0
- package/components/input/select/esm2022/select.component.mjs +7 -1
- package/components/input/select/fesm2022/index.mjs +6 -0
- package/components/input/select/fesm2022/index.mjs.map +1 -1
- package/components/input/select/select.component.d.ts +3 -2
- package/components/input/slider/bundles/index.umd.js +10 -0
- package/components/input/slider/esm2022/slider.component.mjs +11 -1
- package/components/input/slider/fesm2022/index.mjs +10 -0
- package/components/input/slider/fesm2022/index.mjs.map +1 -1
- package/components/input/slider/slider.component.d.ts +3 -2
- package/components/input/switch/bundles/index.umd.js +22 -2
- package/components/input/switch/esm2022/switch.component.mjs +23 -3
- package/components/input/switch/fesm2022/index.mjs +22 -2
- package/components/input/switch/fesm2022/index.mjs.map +1 -1
- package/components/input/switch/switch.component.d.ts +3 -2
- package/components/input/text/bundles/index.umd.js +36 -0
- package/components/input/text/esm2022/input-calendar/input-calendar.component.mjs +8 -1
- package/components/input/text/esm2022/input-color/input-color.component.mjs +8 -1
- package/components/input/text/esm2022/input-email/input-email.component.mjs +8 -1
- package/components/input/text/esm2022/input-number/input-number.component.mjs +8 -1
- package/components/input/text/esm2022/input-text/input-text.component.mjs +9 -1
- package/components/input/text/fesm2022/index.mjs +36 -0
- package/components/input/text/fesm2022/index.mjs.map +1 -1
- package/components/input/text/input-calendar/input-calendar.component.d.ts +3 -2
- package/components/input/text/input-color/input-color.component.d.ts +3 -2
- package/components/input/text/input-email/input-email.component.d.ts +3 -2
- package/components/input/text/input-number/input-number.component.d.ts +3 -2
- package/components/input/text/input-text/input-text.component.d.ts +3 -2
- package/components/input/textarea/bundles/index.umd.js +7 -0
- package/components/input/textarea/esm2022/textarea.component.mjs +8 -1
- package/components/input/textarea/fesm2022/index.mjs +7 -0
- package/components/input/textarea/fesm2022/index.mjs.map +1 -1
- package/components/input/textarea/textarea.component.d.ts +3 -2
- package/components/navigation/menu/bundles/index.umd.js +55 -6
- package/components/navigation/menu/esm2022/menu-adapator.component.mjs +17 -3
- package/components/navigation/menu/esm2022/menu.component.mjs +10 -3
- package/components/navigation/menu/esm2022/nav/nav-item/nav-item.directive.mjs +6 -1
- package/components/navigation/menu/esm2022/nav/nav.component.mjs +11 -1
- package/components/navigation/menu/esm2022/nav/navigation-control.directive.mjs +16 -3
- package/components/navigation/menu/fesm2022/index.mjs +55 -6
- package/components/navigation/menu/fesm2022/index.mjs.map +1 -1
- package/components/navigation/menu/menu-adapator.component.d.ts +4 -2
- package/components/navigation/menu/nav/nav-item/nav-item.directive.d.ts +3 -2
- package/components/navigation/menu/nav/nav.component.d.ts +3 -2
- package/components/navigation/menu/nav/navigation-control.directive.d.ts +4 -2
- package/components/navigation/navbar/bundles/index.umd.js +5 -0
- package/components/navigation/navbar/esm2022/navbar.component.mjs +6 -1
- package/components/navigation/navbar/fesm2022/index.mjs +5 -0
- package/components/navigation/navbar/fesm2022/index.mjs.map +1 -1
- package/components/navigation/navbar/navbar.component.d.ts +3 -2
- package/components/navigation/popover/bundles/index.umd.js +65 -13
- package/components/navigation/popover/esm2022/popover.component.mjs +63 -11
- package/components/navigation/popover/fesm2022/index.mjs +62 -10
- package/components/navigation/popover/fesm2022/index.mjs.map +1 -1
- package/components/navigation/popover/popover.component.d.ts +11 -3
- package/components/page/default/bundles/index.umd.js +30 -6
- package/components/page/default/esm2022/layout.directive.mjs +9 -1
- package/components/page/default/esm2022/page-content/page-content.component.mjs +13 -3
- package/components/page/default/esm2022/router-outlet.directive.mjs +13 -6
- package/components/page/default/fesm2022/index.mjs +30 -6
- package/components/page/default/fesm2022/index.mjs.map +1 -1
- package/components/page/default/layout.directive.d.ts +3 -2
- package/components/page/default/page-content/page-content.component.d.ts +3 -2
- package/components/page/default/router-outlet.directive.d.ts +5 -2
- package/components/page/left-panel/bundles/index.umd.js +16 -0
- package/components/page/left-panel/esm2022/left-panel.directive.mjs +17 -1
- package/components/page/left-panel/fesm2022/index.mjs +16 -0
- package/components/page/left-panel/fesm2022/index.mjs.map +1 -1
- package/components/page/left-panel/left-panel.directive.d.ts +3 -2
- package/components/page/top-nav/bundles/index.umd.js +2 -1
- package/components/page/top-nav/esm2022/top-nav.props.mjs +3 -2
- package/components/page/top-nav/fesm2022/index.mjs +2 -1
- package/components/page/top-nav/fesm2022/index.mjs.map +1 -1
- package/components/prefab/bundles/index.umd.js +4 -0
- package/components/prefab/esm2022/prefab.directive.mjs +5 -1
- package/components/prefab/fesm2022/index.mjs +4 -0
- package/components/prefab/fesm2022/index.mjs.map +1 -1
- package/core/bundles/index.umd.js +391 -94
- package/core/esm2022/public_api.mjs +3 -3
- package/core/esm2022/services/viewport.service.mjs +24 -10
- package/core/esm2022/types/types.mjs +1 -1
- package/core/esm2022/utils/dom.mjs +18 -2
- package/core/esm2022/utils/event-notifier.mjs +5 -2
- package/core/esm2022/utils/lru-cache.mjs +16 -2
- package/core/esm2022/utils/utils.mjs +6 -2
- package/core/esm2022/utils/watcher.mjs +323 -81
- package/core/fesm2022/index.mjs +390 -96
- package/core/fesm2022/index.mjs.map +1 -1
- package/core/public_api.d.ts +2 -2
- package/core/services/viewport.service.d.ts +5 -2
- package/core/types/types.d.ts +1 -0
- package/core/utils/lru-cache.d.ts +6 -0
- package/core/utils/utils.d.ts +1 -0
- package/core/utils/watcher.d.ts +26 -5
- package/http/bundles/index.umd.js +31 -1
- package/http/esm2022/http.service.mjs +32 -2
- package/http/fesm2022/index.mjs +31 -1
- package/http/fesm2022/index.mjs.map +1 -1
- package/http/http.service.d.ts +6 -2
- package/npm-shrinkwrap.json +2 -2
- package/oAuth/bundles/index.umd.js +9 -0
- package/oAuth/esm2022/oAuth.service.mjs +10 -1
- package/oAuth/fesm2022/index.mjs +9 -0
- package/oAuth/fesm2022/index.mjs.map +1 -1
- package/oAuth/oAuth.service.d.ts +3 -1
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/runtime/base/bundles/index.umd.js +367 -32
- package/runtime/base/components/app-component/app.component.d.ts +4 -0
- package/runtime/base/components/prefab-preview.component.d.ts +5 -2
- package/runtime/base/directives/accessroles.directive.d.ts +4 -3
- package/runtime/base/directives/prefab.directive.d.ts +3 -2
- package/runtime/base/esm2022/components/app-component/app.component.mjs +40 -9
- package/runtime/base/esm2022/components/base-custom-widget.component.mjs +33 -2
- package/runtime/base/esm2022/components/base-layout.component.mjs +7 -1
- package/runtime/base/esm2022/components/base-page.component.mjs +36 -3
- package/runtime/base/esm2022/components/base-partial.component.mjs +37 -3
- package/runtime/base/esm2022/components/base-prefab.component.mjs +32 -3
- package/runtime/base/esm2022/components/base-spa-page.component.mjs +37 -3
- package/runtime/base/esm2022/components/prefab-preview.component.mjs +23 -4
- package/runtime/base/esm2022/directives/accessroles.directive.mjs +11 -2
- package/runtime/base/esm2022/directives/prefab.directive.mjs +9 -1
- package/runtime/base/esm2022/services/app.manager.service.mjs +40 -12
- package/runtime/base/esm2022/services/app.service.mjs +34 -2
- package/runtime/base/esm2022/services/dynamic-component-ref-provider.service.mjs +4 -1
- package/runtime/base/esm2022/services/pipe-provider.service.mjs +7 -4
- package/runtime/base/esm2022/services/spinner.service.mjs +15 -1
- package/runtime/base/esm2022/util/fragment-monitor.mjs +23 -2
- package/runtime/base/fesm2022/index.mjs +368 -33
- package/runtime/base/fesm2022/index.mjs.map +1 -1
- package/runtime/base/runtime-base.module.d.ts +2 -2
- package/runtime/base/services/app.manager.service.d.ts +6 -1
- package/runtime/base/services/app.service.d.ts +12 -2
- package/runtime/base/services/dynamic-component-ref-provider.service.d.ts +2 -1
- package/runtime/base/services/spinner.service.d.ts +3 -1
- package/runtime/base/util/fragment-monitor.d.ts +6 -0
- package/runtime/dynamic/bundles/index.umd.js +5 -0
- package/runtime/dynamic/esm2022/app/components/page-wrapper.component.mjs +6 -1
- package/runtime/dynamic/fesm2022/index.mjs +5 -0
- package/runtime/dynamic/fesm2022/index.mjs.map +1 -1
- package/scripts/@wavemaker/nvd3/build/nv.d3.min.js +1 -1
- package/scripts/datatable/datatable.js +100 -14
- package/security/bundles/index.umd.js +41 -2
- package/security/esm2022/security.service.mjs +42 -3
- package/security/fesm2022/index.mjs +41 -2
- package/security/fesm2022/index.mjs.map +1 -1
- package/security/security.service.d.ts +5 -2
- package/variables/bundles/index.umd.js +50 -6
- package/variables/esm2022/manager/action/notification-action.manager.mjs +18 -3
- package/variables/esm2022/manager/variable/base-variable.manager.mjs +15 -2
- package/variables/esm2022/manager/variable/web-socket-variable.manager.mjs +13 -3
- package/variables/esm2022/service/variables.service.mjs +8 -2
- package/variables/fesm2022/index.mjs +50 -6
- package/variables/fesm2022/index.mjs.map +1 -1
|
@@ -124,6 +124,15 @@ export class TabPaneComponent extends StylableComponent {
|
|
|
124
124
|
this.tabsRef.registerDynamicTab(this);
|
|
125
125
|
}
|
|
126
126
|
}
|
|
127
|
+
ngOnDestroy() {
|
|
128
|
+
// MEMORY LEAK FIX: Clear ContentChildren QueryList reference
|
|
129
|
+
if (this.reDrawableComponents) {
|
|
130
|
+
this.reDrawableComponents = null;
|
|
131
|
+
}
|
|
132
|
+
// MEMORY LEAK FIX: Clear lazy load function reference
|
|
133
|
+
this.$lazyLoad = null;
|
|
134
|
+
super.ngOnDestroy();
|
|
135
|
+
}
|
|
127
136
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TabPaneComponent, deps: [{ token: i0.Injector }, { token: 'heading', attribute: true }, { token: 'title', attribute: true }, { token: 'EXPLICIT_CONTEXT', optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
128
137
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TabPaneComponent, isStandalone: true, selector: "div[wmTabPane]", host: { properties: { "class.active": "this.isActive", "class.disabled": "this.disabled" } }, providers: [
|
|
129
138
|
provideAsWidgetRef(TabPaneComponent)
|
|
@@ -155,4 +164,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
155
164
|
type: ContentChildren,
|
|
156
165
|
args: [RedrawableDirective, { descendants: true }]
|
|
157
166
|
}] } });
|
|
158
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLXBhbmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2NvbnRhaW5lcnMvdGFicy9zcmMvdGFiLXBhbmUvdGFiLXBhbmUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2NvbnRhaW5lcnMvdGFicy9zcmMvdGFiLXBhbmUvdGFiLXBhbmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUMzQixRQUFRLEVBRVIsUUFBUSxFQUNYLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBaUIsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0ksT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFFbEQsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDO0FBQy9CLE1BQU0sYUFBYSxHQUFrQjtJQUNqQyxVQUFVLEVBQUUsWUFBWTtJQUN4QixTQUFTLEVBQUUsV0FBVztDQUN6QixDQUFDO0FBVUYsTUFBTSxPQUFPLGdCQUFpQixTQUFRLGlCQUFpQjthQUM1QyxvQkFBZSxHQUFHLGFBQWEsRUFBRSxBQUFsQixDQUFtQjtJQWtCekMsWUFDSSxHQUFhLEVBQ2dCLE9BQU8sRUFDVCxLQUFLLEVBQ1EsZUFBb0I7UUFFNUQsS0FBSyxDQUFDLEdBQUcsRUFBRSxhQUFhLEVBQUUs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QzFDLENBQUM7SUFDTCxDQUFDOytHQS9JUSxnQkFBZ0IsMENBcUJWLFNBQVMsOEJBQ1QsT0FBTyw4QkFDVixrQkFBa0I7bUdBdkJyQixnQkFBZ0IsMkpBSmQ7WUFDUCxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQztTQUN2QywrREFrQmdCLG1CQUFtQix1RUMvQ3hDLDJGQUVNOzs0RkQ2Qk8sZ0JBQWdCO2tCQVI1QixTQUFTO2lDQUNNLElBQUksWUFDTixnQkFBZ0IsYUFFZjt3QkFDUCxrQkFBa0Isa0JBQWtCO3FCQUN2Qzs7MEJBdUJJLFNBQVM7MkJBQUMsU0FBUzs7MEJBQ25CLFNBQVM7MkJBQUMsT0FBTzs7MEJBQ2pCLE1BQU07MkJBQUMsa0JBQWtCOzswQkFBRyxRQUFRO3lDQVhaLFFBQVE7c0JBQXBDLFdBQVc7dUJBQUMsY0FBYztnQkFDSSxRQUFRO3NCQUF0QyxXQUFXO3VCQUFDLGdCQUFnQjtnQkFHOEIsb0JBQW9CO3NCQUE5RSxlQUFlO3VCQUFDLG1CQUFtQixFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBBdHRyaWJ1dGUsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBIb3N0QmluZGluZywgaW5qZWN0LCBJbmplY3QsXG4gICAgSW5qZWN0b3IsXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge25vb3AsIHJlbW92ZUF0dHJ9IGZyb20gJ0B3bS9jb3JlJztcblxuaW1wb3J0IHsgQVBQTFlfU1RZTEVTX1RZUEUsIElXaWRnZXRDb25maWcsIHByb3ZpZGVBc1dpZGdldFJlZiwgUmVkcmF3YWJsZURpcmVjdGl2ZSwgc3R5bGVyLCBTdHlsYWJsZUNvbXBvbmVudCB9IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuaW1wb3J0IHsgcmVnaXN0ZXJQcm9wcyB9IGZyb20gJy4vdGFiLXBhbmUucHJvcHMnO1xuaW1wb3J0IHsgVGFic0NvbXBvbmVudCB9IGZyb20gJy4uL3RhYnMuY29tcG9uZW50JztcblxuY29uc3QgREVGQVVMVF9DTFMgPSAndGFiLXBhbmUnO1xuY29uc3QgV0lER0VUX0NPTkZJRzogSVdpZGdldENvbmZpZyA9IHtcbiAgICB3aWRnZXRUeXBlOiAnd20tdGFicGFuZScsXG4gICAgaG9zdENsYXNzOiBERUZBVUxUX0NMU1xufTtcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSwgXG4gICAgc2VsZWN0b3I6ICdkaXZbd21UYWJQYW5lXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhYi1wYW5lLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzV2lkZ2V0UmVmKFRhYlBhbmVDb21wb25lbnQpXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBUYWJQYW5lQ29tcG9uZW50IGV4dGVuZHMgU3R5bGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICAgIHN0YXRpYyBpbml0aWFsaXplUHJvcHMgPSByZWdpc3RlclByb3BzKCk7XG5cbiAgICBwcml2YXRlIF9pc0ZpcnN0TG9hZDogYm9vbGVhbiA9IHRydWU7XG4gICAgcHJpdmF0ZSBfaXNPbkxvYWRUcmlnZ2VyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgJGxhenlMb2FkID0gbm9vcDtcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nO1xuICAgIHB1YmxpYyBzaG93OiBib29sZWFuO1xuICAgIHB1YmxpYyBzbW9vdGhzY3JvbGw6IGFueTtcbiAgICBwcml2YXRlIGlzZHluYW1pYzogYm9vbGVhbjtcbiAgICBwdWJsaWMgY29udGVudDogc3RyaW5nO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hY3RpdmUnKSBpc0FjdGl2ZSA9IGZhbHNlO1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZGlzYWJsZWQnKSBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgLy8gcmVmZXJlbmNlIHRvIHRoZSBjb21wb25lbnRzIHdoaWNoIG5lZWRzIGEgcmVkcmF3KGVnLCBncmlkLCBjaGFydCkgd2hlbiB0aGUgaGVpZ2h0IG9mIHRoaXMgY29tcG9uZW50IGNoYW5nZXNcbiAgICBAQ29udGVudENoaWxkcmVuKFJlZHJhd2FibGVEaXJlY3RpdmUsIHtkZXNjZW5kYW50czogdHJ1ZX0pIHJlRHJhd2FibGVDb21wb25lbnRzO1xuXG4gICAgcHJpdmF0ZSB0YWJzUmVmID0gaW5qZWN0KFRhYnNDb21wb25lbnQpO1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbmo6IEluamVjdG9yLFxuICAgICAgICBAQXR0cmlidXRlKCdoZWFkaW5nJykgcHVibGljIGhlYWRpbmcsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ3RpdGxlJykgcHVibGljIHRpdGxlLFxuICAgICAgICBASW5qZWN0KCdFWFBMSUNJVF9DT05URVhUJykgQE9wdGlvbmFsKCkgZXhwbGljaXRDb250ZXh0OiBhbnlcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHLCBleHBsaWNpdENvbnRleHQpO1xuXG4gICAgICAgIC8vIHRpdGxlIHByb3BlcnR5IGhlcmUgc2VydmVzIHRoZSBwdXJwb3NlIG9mIGhlYWRpbmcuXG4gICAgICAgIC8vIFRPRE86IG1ha2UgaXQgY29tbW9uIGZvciBhbGwgdGhlIHdpZGdldC5cbiAgICAgICAgcmVtb3ZlQXR0cih0aGlzLm5hdGl2ZUVsZW1lbnQsICd0aXRsZScpO1xuICAgIH1cblxuICAgIC8vIHBhcmVudCB0YWJzIGNvbXBvbmVudCB3aWxsIGNhbGwgdGhpcyBtZXRob2QgZm9yIHRoZSBvcmRlciBvZiBjYWxsYmFja3MgdG8gYmUgcHJvcGVyXG4gICAgLy8gb3JkZXIgb2YgY2FsbGJhY2tzIC0gZGVzZWxlY3QsIHNlbGVjdCwgY2hhbmdlXG4gICAgcHVibGljIGludm9rZU9uU2VsZWN0Q2FsbGJhY2soJGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzZWxlY3QnLCB7JGV2ZW50fSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdCgkZXZlbnQ/OiBFdmVudCwgaXNLZXlCb2FyZEV2ZW50PzogYm9vbGVhbikge1xuICAgICAgICAvLyBXaGVuIGNhbGxlZCBwcm9ncmFtYXRpY2FsbHkgJGV2ZW50IHdvbid0IGJlIGF2YWlsYWJsZVxuICAgICAgICBpZiAodGhpcy5pc0FjdGl2ZSB8fCB0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy4kbGF6eUxvYWQoKTtcbiAgICAgICAgdGhpcy5yZWRyYXdDaGlsZHJlbigpO1xuICAgICAgICB0aGlzLm5vdGlmeVBhcmVudCgkZXZlbnQsIGlzS2V5Qm9hcmRFdmVudCk7XG4gICAgfVxuXG4gICAgdGFicGFuZUhlYWRlckNsaWNrKCRldmVudCwgcGFuZUluZGV4KSB7XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnaGVhZGVyY2xpY2snLCB7JGV2ZW50LCBwYW5lSW5kZXh9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVzZWxlY3QoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2Rlc2VsZWN0Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlKCkge1xuICAgICAgICBpZiAodGhpcy5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcyA9PT0gdGhpcy50YWJzUmVmLnBhbmVzLmxhc3QgPyB0aGlzLnRhYnNSZWYucHJldigpIDogdGhpcy50YWJzUmVmLm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhdmFpbGFibGVQYW5lcyA9IHRoaXMudGFic1JlZi5wYW5lcy50b0FycmF5KCk7XG4gICAgICAgIGF2YWlsYWJsZVBhbmVzLnNwbGljZSgodGhpcyBhcyBhbnkpLnRhYnNSZWYuZ2V0UGFuZUluZGV4QnlSZWYodGhpcyksIDEpO1xuICAgICAgICB0aGlzLnRhYnNSZWYucGFuZXMucmVzZXQoWy4uLmF2YWlsYWJsZVBhbmVzXSk7XG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5yZW1vdmUoKTtcbiAgICAgICAgdGhpcy50YWJzUmVmLiRlbGVtZW50LmZpbmQoYC50YWItaGVhZGVyW2RhdGEtcGFuZWlkPScke3RoaXMuJGVsZW1lbnQuYXR0cignd2lkZ2V0LWlkJyl9J10gYWApLnJlbW92ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVkcmF3Q2hpbGRyZW4oKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVEcmF3YWJsZUNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlRHJhd2FibGVDb21wb25lbnRzLmZvckVhY2goYyA9PiBjLnJlZHJhdygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEZpeCBmb3IgW1dNUy0yNDU2NF06IHRyaWdnZXIgIE9ubG9hZCBldmVudCB3aGVuIGl0IGlzIGlubGluZSBjb250ZW50XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzT25Mb2FkVHJpZ2dlcmVkICYmICF0aGlzLmNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2xvYWQnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc09uTG9hZFRyaWdnZXJlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDEwMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBub3RpZnlQYXJlbnQoZXZ0PzogRXZlbnQsIGlzS2V5Qm9hcmRFdmVudD86IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy50YWJzUmVmLm5vdGlmeUNoYW5nZSh0aGlzLCBldnQsIGlzS2V5Qm9hcmRFdmVudCk7XG4gICAgfVxuXG4gICAgLy8gc2VsZWN0IG5leHQgdmFsaWQgdGFiXG4gICAgcHJpdmF0ZSBoYW5kbGVTd2lwZUxlZnQoKSB7XG4gICAgICAgIHRoaXMudGFic1JlZi5uZXh0KCk7XG4gICAgfVxuXG4gICAgLy8gc2VsZWN0IHByZXYgdmFsaWQgdGFiXG4gICAgcHJpdmF0ZSBoYW5kbGVTd2lwZVJpZ2h0KCkge1xuICAgICAgICB0aGlzLnRhYnNSZWYucHJldigpO1xuICAgIH1cblxuICAgIC8vIHNlbGVjdCBldmVudCBpcyBjYWxsZWQgbWFudWFsbHlcbiAgICBwcm90ZWN0ZWQgaGFuZGxlRXZlbnQobm9kZTogSFRNTEVsZW1lbnQsIGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24sIGxvY2FsczogYW55KSB7XG4gICAgICAgIGlmIChldmVudE5hbWUgIT09ICdzZWxlY3QnKSB7XG4gICAgICAgICAgICBzdXBlci5oYW5kbGVFdmVudCh0aGlzLm5hdGl2ZUVsZW1lbnQsIGV2ZW50TmFtZSwgY2FsbGJhY2ssIGxvY2Fscyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblByb3BlcnR5Q2hhbmdlKGtleTogc3RyaW5nLCBudjogYW55LCBvdj86IGFueSkge1xuICAgICAgICBpZiAoa2V5ID09PSAnY29udGVudCcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLiRsYXp5TG9hZCgpLCAxMDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3Nob3cnKSB7XG4gICAgICAgICAgICAvLyBvdmVycmlkZGluZyB0aGUgYmFzZSBjb21wb25lbnQgc2hvdyBwcm9wZXJ0eUNoYW5nZUhhbmRsZXJcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5oaWRkZW4gPSAhbnY7XG4gICAgICAgICAgICAvLyBzZXR0aW5nIGRlZmF1bHQgdGFiIHBhbmUgb24gcGFnZWxvYWQgd2hlbmV2ZXIgc2hvdyBwcm9wZXJ0eSBpcyBiaW5kYWJsZVxuICAgICAgICAgICAgaWYgKHRoaXMuX2lzRmlyc3RMb2FkKSB7XG4gICAgICAgICAgICAgICAgKHRoaXMgYXMgYW55KS50YWJzUmVmLnNlbGVjdERlZmF1bHRQYW5lQnlJbmRleCgodGhpcyBhcyBhbnkpLnRhYnNSZWYuZGVmYXVsdHBhbmVpbmRleCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFudiAmJiB0aGlzLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgKHRoaXMgYXMgYW55KS50YWJzUmVmLm5leHQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobnYgfHwgIXRoaXMuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAodGhpcyBhcyBhbnkpLnRhYnNSZWYudGFic0FuaW1hdG9yPy50cmFuc2l0aW9uVGFiSW50b1ZpZXcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2lzRmlyc3RMb2FkID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLnRpdGxlID0gdGhpcy50aXRsZSB8fCB0aGlzLmhlYWRpbmc7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdHlsZXIoXG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnRhYi1ib2R5JykgYXMgSFRNTEVsZW1lbnQsXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgQVBQTFlfU1RZTEVTX1RZUEUuQ09OVEFJTkVSXG4gICAgICAgICk7XG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuICAgICAgICBpZiAodGhpcy5pc2R5bmFtaWMpIHtcbiAgICAgICAgICAgIHRoaXMudGFic1JlZi5yZWdpc3RlckR5bmFtaWNUYWIodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidGFiLWJvZHlcIiBwYXJ0aWFsLWNvbnRhaW5lci10YXJnZXQgPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZGl2PiJdfQ==
|
|
167
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLXBhbmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2NvbnRhaW5lcnMvdGFicy9zcmMvdGFiLXBhbmUvdGFiLXBhbmUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2NvbnRhaW5lcnMvdGFicy9zcmMvdGFiLXBhbmUvdGFiLXBhbmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUMzQixRQUFRLEVBR1IsUUFBUSxFQUNYLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBaUIsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0ksT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFFbEQsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDO0FBQy9CLE1BQU0sYUFBYSxHQUFrQjtJQUNqQyxVQUFVLEVBQUUsWUFBWTtJQUN4QixTQUFTLEVBQUUsV0FBVztDQUN6QixDQUFDO0FBVUYsTUFBTSxPQUFPLGdCQUFpQixTQUFRLGlCQUFpQjthQUM1QyxvQkFBZSxHQUFHLGFBQWEsRUFBRSxBQUFsQixDQUFtQjtJQWtCekMsWUFDSSxHQUFhLEVBQ2dCLE9BQU8sRUFDVCxLQUFLLEVBQ1EsZUFBb0I7UUFFNUQsS0FBSyxDQUFDLEdBQUcsRUFBRSxhQUFhLEVBQUUs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QzFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNQLDZEQUE2RDtRQUM3RCxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7UUFDckMsQ0FBQztRQUVELHNEQUFzRDtRQUN0RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUV0QixLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDeEIsQ0FBQzsrR0EzSlEsZ0JBQWdCLDBDQXFCVixTQUFTLDhCQUNULE9BQU8sOEJBQ1Ysa0JBQWtCO21HQXZCckIsZ0JBQWdCLDJKQUpkO1lBQ1Asa0JBQWtCLENBQUMsZ0JBQWdCLENBQUM7U0FDdkMsK0RBa0JnQixtQkFBbUIsdUVDaER4QywyRkFFTTs7NEZEOEJPLGdCQUFnQjtrQkFSNUIsU0FBUztpQ0FDTSxJQUFJLFlBQ04sZ0JBQWdCLGFBRWY7d0JBQ1Asa0JBQWtCLGtCQUFrQjtxQkFDdkM7OzBCQXVCSSxTQUFTOzJCQUFDLFNBQVM7OzBCQUNuQixTQUFTOzJCQUFDLE9BQU87OzBCQUNqQixNQUFNOzJCQUFDLGtCQUFrQjs7MEJBQUcsUUFBUTt5Q0FYWixRQUFRO3NCQUFwQyxXQUFXO3VCQUFDLGNBQWM7Z0JBQ0ksUUFBUTtzQkFBdEMsV0FBVzt1QkFBQyxnQkFBZ0I7Z0JBRzhCLG9CQUFvQjtzQkFBOUUsZUFBZTt1QkFBQyxtQkFBbUIsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQXR0cmlidXRlLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgSG9zdEJpbmRpbmcsIGluamVjdCwgSW5qZWN0LFxuICAgIEluamVjdG9yLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7bm9vcCwgcmVtb3ZlQXR0cn0gZnJvbSAnQHdtL2NvcmUnO1xuXG5pbXBvcnQgeyBBUFBMWV9TVFlMRVNfVFlQRSwgSVdpZGdldENvbmZpZywgcHJvdmlkZUFzV2lkZ2V0UmVmLCBSZWRyYXdhYmxlRGlyZWN0aXZlLCBzdHlsZXIsIFN0eWxhYmxlQ29tcG9uZW50IH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5pbXBvcnQgeyByZWdpc3RlclByb3BzIH0gZnJvbSAnLi90YWItcGFuZS5wcm9wcyc7XG5pbXBvcnQgeyBUYWJzQ29tcG9uZW50IH0gZnJvbSAnLi4vdGFicy5jb21wb25lbnQnO1xuXG5jb25zdCBERUZBVUxUX0NMUyA9ICd0YWItcGFuZSc7XG5jb25zdCBXSURHRVRfQ09ORklHOiBJV2lkZ2V0Q29uZmlnID0ge1xuICAgIHdpZGdldFR5cGU6ICd3bS10YWJwYW5lJyxcbiAgICBob3N0Q2xhc3M6IERFRkFVTFRfQ0xTXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLCBcbiAgICBzZWxlY3RvcjogJ2Rpdlt3bVRhYlBhbmVdJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFiLXBhbmUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoVGFiUGFuZUNvbXBvbmVudClcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFRhYlBhbmVDb21wb25lbnQgZXh0ZW5kcyBTdHlsYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJQcm9wcygpO1xuXG4gICAgcHJpdmF0ZSBfaXNGaXJzdExvYWQ6IGJvb2xlYW4gPSB0cnVlO1xuICAgIHByaXZhdGUgX2lzT25Mb2FkVHJpZ2dlcmVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljICRsYXp5TG9hZCA9IG5vb3A7XG4gICAgcHVibGljIG5hbWU6IHN0cmluZztcbiAgICBwdWJsaWMgc2hvdzogYm9vbGVhbjtcbiAgICBwdWJsaWMgc21vb3Roc2Nyb2xsOiBhbnk7XG4gICAgcHJpdmF0ZSBpc2R5bmFtaWM6IGJvb2xlYW47XG4gICAgcHVibGljIGNvbnRlbnQ6IHN0cmluZztcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuYWN0aXZlJykgaXNBY3RpdmUgPSBmYWxzZTtcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRpc2FibGVkJykgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8vIHJlZmVyZW5jZSB0byB0aGUgY29tcG9uZW50cyB3aGljaCBuZWVkcyBhIHJlZHJhdyhlZywgZ3JpZCwgY2hhcnQpIHdoZW4gdGhlIGhlaWdodCBvZiB0aGlzIGNvbXBvbmVudCBjaGFuZ2VzXG4gICAgQENvbnRlbnRDaGlsZHJlbihSZWRyYXdhYmxlRGlyZWN0aXZlLCB7ZGVzY2VuZGFudHM6IHRydWV9KSByZURyYXdhYmxlQ29tcG9uZW50cztcblxuICAgIHByaXZhdGUgdGFic1JlZiA9IGluamVjdChUYWJzQ29tcG9uZW50KTtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qOiBJbmplY3RvcixcbiAgICAgICAgQEF0dHJpYnV0ZSgnaGVhZGluZycpIHB1YmxpYyBoZWFkaW5nLFxuICAgICAgICBAQXR0cmlidXRlKCd0aXRsZScpIHB1YmxpYyB0aXRsZSxcbiAgICAgICAgQEluamVjdCgnRVhQTElDSVRfQ09OVEVYVCcpIEBPcHRpb25hbCgpIGV4cGxpY2l0Q29udGV4dDogYW55XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluaiwgV0lER0VUX0NPTkZJRywgZXhwbGljaXRDb250ZXh0KTtcblxuICAgICAgICAvLyB0aXRsZSBwcm9wZXJ0eSBoZXJlIHNlcnZlcyB0aGUgcHVycG9zZSBvZiBoZWFkaW5nLlxuICAgICAgICAvLyBUT0RPOiBtYWtlIGl0IGNvbW1vbiBmb3IgYWxsIHRoZSB3aWRnZXQuXG4gICAgICAgIHJlbW92ZUF0dHIodGhpcy5uYXRpdmVFbGVtZW50LCAndGl0bGUnKTtcbiAgICB9XG5cbiAgICAvLyBwYXJlbnQgdGFicyBjb21wb25lbnQgd2lsbCBjYWxsIHRoaXMgbWV0aG9kIGZvciB0aGUgb3JkZXIgb2YgY2FsbGJhY2tzIHRvIGJlIHByb3BlclxuICAgIC8vIG9yZGVyIG9mIGNhbGxiYWNrcyAtIGRlc2VsZWN0LCBzZWxlY3QsIGNoYW5nZVxuICAgIHB1YmxpYyBpbnZva2VPblNlbGVjdENhbGxiYWNrKCRldmVudD86IEV2ZW50KSB7XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc2VsZWN0JywgeyRldmVudH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZWxlY3QoJGV2ZW50PzogRXZlbnQsIGlzS2V5Qm9hcmRFdmVudD86IGJvb2xlYW4pIHtcbiAgICAgICAgLy8gV2hlbiBjYWxsZWQgcHJvZ3JhbWF0aWNhbGx5ICRldmVudCB3b24ndCBiZSBhdmFpbGFibGVcbiAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmUgfHwgdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuJGxhenlMb2FkKCk7XG4gICAgICAgIHRoaXMucmVkcmF3Q2hpbGRyZW4oKTtcbiAgICAgICAgdGhpcy5ub3RpZnlQYXJlbnQoJGV2ZW50LCBpc0tleUJvYXJkRXZlbnQpO1xuICAgIH1cblxuICAgIHRhYnBhbmVIZWFkZXJDbGljaygkZXZlbnQsIHBhbmVJbmRleCkge1xuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2hlYWRlcmNsaWNrJywgeyRldmVudCwgcGFuZUluZGV4fSk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlc2VsZWN0KCkge1xuICAgICAgICBpZiAodGhpcy5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdkZXNlbGVjdCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMgPT09IHRoaXMudGFic1JlZi5wYW5lcy5sYXN0ID8gdGhpcy50YWJzUmVmLnByZXYoKSA6IHRoaXMudGFic1JlZi5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXZhaWxhYmxlUGFuZXMgPSB0aGlzLnRhYnNSZWYucGFuZXMudG9BcnJheSgpO1xuICAgICAgICBhdmFpbGFibGVQYW5lcy5zcGxpY2UoKHRoaXMgYXMgYW55KS50YWJzUmVmLmdldFBhbmVJbmRleEJ5UmVmKHRoaXMpLCAxKTtcbiAgICAgICAgdGhpcy50YWJzUmVmLnBhbmVzLnJlc2V0KFsuLi5hdmFpbGFibGVQYW5lc10pO1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMudGFic1JlZi4kZWxlbWVudC5maW5kKGAudGFiLWhlYWRlcltkYXRhLXBhbmVpZD0nJHt0aGlzLiRlbGVtZW50LmF0dHIoJ3dpZGdldC1pZCcpfSddIGFgKS5yZW1vdmUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZHJhd0NoaWxkcmVuKCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlRHJhd2FibGVDb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZURyYXdhYmxlQ29tcG9uZW50cy5mb3JFYWNoKGMgPT4gYy5yZWRyYXcoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBGaXggZm9yIFtXTVMtMjQ1NjRdOiB0cmlnZ2VyICBPbmxvYWQgZXZlbnQgd2hlbiBpdCBpcyBpbmxpbmUgY29udGVudFxuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc09uTG9hZFRyaWdnZXJlZCAmJiAhdGhpcy5jb250ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdsb2FkJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNPbkxvYWRUcmlnZ2VyZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCAxMDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm90aWZ5UGFyZW50KGV2dD86IEV2ZW50LCBpc0tleUJvYXJkRXZlbnQ/OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMudGFic1JlZi5ub3RpZnlDaGFuZ2UodGhpcywgZXZ0LCBpc0tleUJvYXJkRXZlbnQpO1xuICAgIH1cblxuICAgIC8vIHNlbGVjdCBuZXh0IHZhbGlkIHRhYlxuICAgIHByaXZhdGUgaGFuZGxlU3dpcGVMZWZ0KCkge1xuICAgICAgICB0aGlzLnRhYnNSZWYubmV4dCgpO1xuICAgIH1cblxuICAgIC8vIHNlbGVjdCBwcmV2IHZhbGlkIHRhYlxuICAgIHByaXZhdGUgaGFuZGxlU3dpcGVSaWdodCgpIHtcbiAgICAgICAgdGhpcy50YWJzUmVmLnByZXYoKTtcbiAgICB9XG5cbiAgICAvLyBzZWxlY3QgZXZlbnQgaXMgY2FsbGVkIG1hbnVhbGx5XG4gICAgcHJvdGVjdGVkIGhhbmRsZUV2ZW50KG5vZGU6IEhUTUxFbGVtZW50LCBldmVudE5hbWU6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uLCBsb2NhbHM6IGFueSkge1xuICAgICAgICBpZiAoZXZlbnROYW1lICE9PSAnc2VsZWN0Jykge1xuICAgICAgICAgICAgc3VwZXIuaGFuZGxlRXZlbnQodGhpcy5uYXRpdmVFbGVtZW50LCBldmVudE5hbWUsIGNhbGxiYWNrLCBsb2NhbHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXk6IHN0cmluZywgbnY6IGFueSwgb3Y/OiBhbnkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ2NvbnRlbnQnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy4kbGF6eUxvYWQoKSwgMTAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdzaG93Jykge1xuICAgICAgICAgICAgLy8gb3ZlcnJpZGRpbmcgdGhlIGJhc2UgY29tcG9uZW50IHNob3cgcHJvcGVydHlDaGFuZ2VIYW5kbGVyXG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuaGlkZGVuID0gIW52O1xuICAgICAgICAgICAgLy8gc2V0dGluZyBkZWZhdWx0IHRhYiBwYW5lIG9uIHBhZ2Vsb2FkIHdoZW5ldmVyIHNob3cgcHJvcGVydHkgaXMgYmluZGFibGVcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0ZpcnN0TG9hZCkge1xuICAgICAgICAgICAgICAgICh0aGlzIGFzIGFueSkudGFic1JlZi5zZWxlY3REZWZhdWx0UGFuZUJ5SW5kZXgoKHRoaXMgYXMgYW55KS50YWJzUmVmLmRlZmF1bHRwYW5laW5kZXgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghbnYgJiYgdGhpcy5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgICAgICh0aGlzIGFzIGFueSkudGFic1JlZi5uZXh0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG52IHx8ICF0aGlzLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgKHRoaXMgYXMgYW55KS50YWJzUmVmLnRhYnNBbmltYXRvcj8udHJhbnNpdGlvblRhYkludG9WaWV3KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9pc0ZpcnN0TG9hZCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy50aXRsZSA9IHRoaXMudGl0bGUgfHwgdGhpcy5oZWFkaW5nO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgc3R5bGVyKFxuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy50YWItYm9keScpIGFzIEhUTUxFbGVtZW50LFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIEFQUExZX1NUWUxFU19UWVBFLkNPTlRBSU5FUlxuICAgICAgICApO1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNkeW5hbWljKSB7XG4gICAgICAgICAgICB0aGlzLnRhYnNSZWYucmVnaXN0ZXJEeW5hbWljVGFiKHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ2xlYXIgQ29udGVudENoaWxkcmVuIFF1ZXJ5TGlzdCByZWZlcmVuY2VcbiAgICAgICAgaWYgKHRoaXMucmVEcmF3YWJsZUNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIHRoaXMucmVEcmF3YWJsZUNvbXBvbmVudHMgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDbGVhciBsYXp5IGxvYWQgZnVuY3Rpb24gcmVmZXJlbmNlXG4gICAgICAgIHRoaXMuJGxhenlMb2FkID0gbnVsbDtcblxuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ0YWItYm9keVwiIHBhcnRpYWwtY29udGFpbmVyLXRhcmdldCA+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kaXY+Il19
|
|
@@ -21,6 +21,7 @@ export class TabsComponent extends StylableComponent {
|
|
|
21
21
|
// handle to the promise resolver
|
|
22
22
|
let resolveFn = noop;
|
|
23
23
|
super(inj, WIDGET_CONFIG, explicitContext, new Promise(res => resolveFn = res));
|
|
24
|
+
this.dynamicComponentRefs = [];
|
|
24
25
|
this.iconposition = '';
|
|
25
26
|
this.transition = _transition;
|
|
26
27
|
this.tabsposition = _tabsPosition;
|
|
@@ -107,7 +108,13 @@ export class TabsComponent extends StylableComponent {
|
|
|
107
108
|
this._dynamicContext = Object.create(this.viewParent);
|
|
108
109
|
this._dynamicContext[this.getAttr('wmTab')] = this;
|
|
109
110
|
}
|
|
110
|
-
|
|
111
|
+
// MEMORY LEAK FIX: Store component reference for cleanup
|
|
112
|
+
this.dynamicComponentProvider.addComponent(this.getNativeElement().querySelector('.tab-content'), markup, this._dynamicContext, { inj: this.inj })
|
|
113
|
+
.then(componentRef => {
|
|
114
|
+
if (componentRef) {
|
|
115
|
+
this.dynamicComponentRefs.push(componentRef);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
111
118
|
});
|
|
112
119
|
return paneNamesList;
|
|
113
120
|
}
|
|
@@ -361,7 +368,7 @@ export class TabsComponent extends StylableComponent {
|
|
|
361
368
|
this.promiseResolverFn();
|
|
362
369
|
super.ngAfterContentInit();
|
|
363
370
|
this.setTabsPosition();
|
|
364
|
-
this.panes.changes.subscribe(slides => {
|
|
371
|
+
this.panesChangesSubscription = this.panes.changes.subscribe(slides => {
|
|
365
372
|
if (this.panes.length) {
|
|
366
373
|
this.selectDefaultPaneByIndex(this.defaultpaneindex || 0);
|
|
367
374
|
}
|
|
@@ -375,6 +382,42 @@ export class TabsComponent extends StylableComponent {
|
|
|
375
382
|
const index = this.panes.toArray().findIndex(pane => this.nativeElement.querySelector(`li[data-paneid="${pane.widgetId}"]`)?.classList.contains("select"));
|
|
376
383
|
return index >= 0 ? index : this.getActiveTabIndex();
|
|
377
384
|
}
|
|
385
|
+
ngOnDestroy() {
|
|
386
|
+
// MEMORY LEAK FIX: Unsubscribe from panes changes
|
|
387
|
+
if (this.panesChangesSubscription) {
|
|
388
|
+
this.panesChangesSubscription.unsubscribe();
|
|
389
|
+
this.panesChangesSubscription = null;
|
|
390
|
+
}
|
|
391
|
+
// MEMORY LEAK FIX: Destroy all dynamically created component instances
|
|
392
|
+
if (this.dynamicComponentRefs && this.dynamicComponentRefs.length) {
|
|
393
|
+
this.dynamicComponentRefs.forEach(componentRef => {
|
|
394
|
+
if (componentRef && componentRef.destroy) {
|
|
395
|
+
componentRef.destroy();
|
|
396
|
+
}
|
|
397
|
+
});
|
|
398
|
+
this.dynamicComponentRefs = [];
|
|
399
|
+
}
|
|
400
|
+
// MEMORY LEAK FIX: Clear dynamic context
|
|
401
|
+
if (this._dynamicContext) {
|
|
402
|
+
Object.keys(this._dynamicContext).forEach(key => {
|
|
403
|
+
delete this._dynamicContext[key];
|
|
404
|
+
});
|
|
405
|
+
this._dynamicContext = null;
|
|
406
|
+
}
|
|
407
|
+
// MEMORY LEAK FIX: Clear dynamic tabs array
|
|
408
|
+
if (this.dynamicTabs) {
|
|
409
|
+
this.dynamicTabs = [];
|
|
410
|
+
}
|
|
411
|
+
// MEMORY LEAK FIX: Destroy tabs animator
|
|
412
|
+
if (this.tabsAnimator) {
|
|
413
|
+
// TabsAnimator may have internal subscriptions or timers
|
|
414
|
+
this.tabsAnimator = null;
|
|
415
|
+
}
|
|
416
|
+
// MEMORY LEAK FIX: Clear field definitions and references
|
|
417
|
+
this.fieldDefs = null;
|
|
418
|
+
this.activeTab = null;
|
|
419
|
+
super.ngOnDestroy();
|
|
420
|
+
}
|
|
378
421
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TabsComponent, deps: [{ token: i0.Injector }, { token: i1.DynamicComponentRefProvider }, { token: 'transition', attribute: true }, { token: 'tabsposition', attribute: true }, { token: i1.StatePersistence }, { token: 'EXPLICIT_CONTEXT', optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
379
422
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TabsComponent, isStandalone: true, selector: "div[wmTabs]", host: { properties: { "attr.icon-position": "this.iconposition" } }, providers: [
|
|
380
423
|
provideAsWidgetRef(TabsComponent)
|
|
@@ -403,4 +446,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
403
446
|
type: ContentChildren,
|
|
404
447
|
args: [TabPaneComponent]
|
|
405
448
|
}] } });
|
|
406
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvY29udGFpbmVycy90YWJzL3NyYy90YWJzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9jb250YWluZXJzL3RhYnMvc3JjL3RhYnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzNELE9BQU8sRUFHSCxTQUFTLEVBQ1QsU0FBUyxFQUNULGVBQWUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUNwQyxRQUFRLEVBRVIsUUFBUSxFQUNSLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0gsUUFBUSxFQUNSLFVBQVUsRUFDViwyQkFBMkIsRUFDM0IsSUFBSSxFQUNKLFdBQVcsRUFDWCxnQkFBZ0IsRUFDbkIsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUNILGlCQUFpQixFQUVqQixrQkFBa0IsRUFDbEIsTUFBTSxFQUNOLGlCQUFpQixFQUNqQixlQUFlLEVBQ2xCLE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQzs7OztBQUluRixNQUFNLFdBQVcsR0FB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QUFZO3NCQUE5QyxXQUFXO3VCQUFDLG9CQUFvQjtnQkFFRSxLQUFLO3NCQUF2QyxlQUFlO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBUZXh0Q29udGVudERpcmVjdGl2ZSB9IGZyb20gXCJAd20vY29tcG9uZW50cy9iYXNlXCI7XG5pbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBBdHRyaWJ1dGUsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbiwgSG9zdEJpbmRpbmcsIEluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgUXVlcnlMaXN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICAgIGFkZENsYXNzLFxuICAgIGFwcGVuZE5vZGUsXG4gICAgRHluYW1pY0NvbXBvbmVudFJlZlByb3ZpZGVyLFxuICAgIG5vb3AsXG4gICAgcmVtb3ZlQ2xhc3MsXG4gICAgU3RhdGVQZXJzaXN0ZW5jZVxufSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQge1xuICAgIEFQUExZX1NUWUxFU19UWVBFLFxuICAgIElXaWRnZXRDb25maWcsXG4gICAgcHJvdmlkZUFzV2lkZ2V0UmVmLFxuICAgIHN0eWxlcixcbiAgICBTdHlsYWJsZUNvbXBvbmVudCxcbiAgICBjcmVhdGVBcnJheUZyb21cbn0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5cbmltcG9ydCB7IFRhYnNBbmltYXRvciB9IGZyb20gJy4vdGFicy5hbmltYXRvcic7XG5pbXBvcnQgeyByZWdpc3RlclByb3BzIH0gZnJvbSAnLi90YWJzLnByb3BzJztcbmltcG9ydCB7IFRhYlBhbmVDb21wb25lbnQgfSBmcm9tICcuL3RhYi1wYW5lL3RhYi1wYW5lLmNvbXBvbmVudCc7XG5pbXBvcnQge2ZpbmQsIGZpbmRJbmRleCwgZm9yRWFjaCwgZ2V0LCBpbmRleE9mLCBpc0FycmF5LCBpc0VtcHR5fSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmRlY2xhcmUgY29uc3QgJDtcblxuY29uc3QgREVGQVVMVF9DTFMgPSAnYXBwLXRhYnMgY2xlYXJmaXgnO1xuY29uc3QgV0lER0VUX0NPTkZJRzogSVdpZGdldENvbmZpZyA9IHtcbiAgICB3aWRnZXRUeXBlOiAnd20tdGFicycsXG4gICAgaG9zdENsYXNzOiBERUZBVUxUX0NMU1xufTtcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBUZXh0Q29udGVudERpcmVjdGl2ZV0sXG4gICAgc2VsZWN0b3I6ICdkaXZbd21UYWJzXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhYnMuY29tcG9uZW50Lmh0bWwnLFxuICAgIGV4cG9ydEFzOiAnd21UYWJzJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzV2lkZ2V0UmVmKFRhYnNDb21wb25lbnQpXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBUYWJzQ29tcG9uZW50IGV4dGVuZHMgU3R5bGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICAgIHN0YXRpYyBpbml0aWFsaXplUHJvcHMgPSByZWdpc3RlclByb3BzKCk7XG5cbiAgICBwdWJsaWMgZGVmYXVsdHBhbmVpbmRleDogbnVtYmVyO1xuICAgIHB1YmxpYyB0cmFuc2l0aW9uOiBzdHJpbmc7XG4gICAgcHVibGljIHRhYnNwb3NpdGlvbjogc3RyaW5nO1xuICAgIHB1YmxpYyBzdGF0ZWhhbmRsZXI6IGFueTtcbiAgICBwcml2YXRlIHN0YXRlUGVyc2lzdGVuY2U6IFN0YXRlUGVyc2lzdGVuY2U7XG5cbiAgICBwdWJsaWMgdmVydGljYWw6IGJvb2xlYW47XG4gICAgcHVibGljIGp1c3RpZmllZDogYm9vbGVhbjtcbiAgICBwcml2YXRlIGFjdGl2ZVRhYjogVGFiUGFuZUNvbXBvbmVudDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb21pc2VSZXNvbHZlckZuOiBGdW5jdGlvbjtcbiAgICBwcml2YXRlIHRhYnNBbmltYXRvcjogVGFic0FuaW1hdG9yO1xuICAgIHByaXZhdGUgX29sZFBhbmVJbmRleDogbnVtYmVyO1xuICAgIHByaXZhdGUgaXNQYWdlTG9hZENhbGw6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBkeW5hbWljQ29tcG9uZW50UHJvdmlkZXI7XG4gICAgcHJpdmF0ZSBfZHluYW1pY0NvbnRleHQ7XG4gICAgcHJpdmF0ZSBkeW5hbWljUGFuZUluZGV4O1xuICAgIHB1YmxpYyBkeW5hbWljVGFicztcbiAgICBwdWJsaWMgZmllbGREZWZzO1xuICAgIHB1YmxpYyB0eXBlO1xuICAgIHB1YmxpYyBub2RhdGFtZXNzYWdlO1xuICAgIHB1YmxpYyBhdXRvQWN0aXZhdGlvbjpib29sZWFuO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmljb24tcG9zaXRpb24nKSBpY29ucG9zaXRpb246IHN0cmluZyA9ICcnO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihUYWJQYW5lQ29tcG9uZW50KSBwYW5lczogUXVlcnlMaXN0PFRhYlBhbmVDb21wb25lbnQ+O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluajogSW5qZWN0b3IsXG4gICAgICAgIGR5bmFtaWNDb21wb25lbnRQcm92aWRlcjogRHluYW1pY0NvbXBvbmVudFJlZlByb3ZpZGVyLFxuICAgICAgICBAQXR0cmlidXRlKCd0cmFuc2l0aW9uJykgX3RyYW5zaXRpb246IHN0cmluZyxcbiAgICAgICAgQEF0dHJpYnV0ZSgndGFic3Bvc2l0aW9uJykgX3RhYnNQb3NpdGlvbjogc3RyaW5nLFxuICAgICAgICBzdGF0ZVBlcnNpc3RlbmNlOiBTdGF0ZVBlcnNpc3RlbmNlLFxuICAgICAgICBASW5qZWN0KCdFWFBMSUNJVF9DT05URVhUJykgQE9wdGlvbmFsKCkgZXhwbGljaXRDb250ZXh0OiBhbnlcbiAgICApIHtcbiAgICAgICAgLy8gaGFuZGxlIHRvIHRoZSBwcm9taXNlIHJlc29sdmVyXG4gICAgICAgIGxldCByZXNvbHZlRm46IEZ1bmN0aW9uID0gbm9vcDtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHLCBleHBsaWNpdENvbnRleHQsIG5ldyBQcm9taXNlKHJlcyA9PiByZXNvbHZlRm4gPSByZXMpKTtcblxuICAgICAgICB0aGlzLnRyYW5zaXRpb24gPSBfdHJhbnNpdGlvbjtcbiAgICAgICAgdGhpcy50YWJzcG9zaXRpb24gPSBfdGFic1Bvc2l0aW9uO1xuICAgICAgICB0aGlzLnN0YXRlUGVyc2lzdGVuY2UgPSBzdGF0ZVBlcnNpc3RlbmNlO1xuICAgICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRQcm92aWRlciA9IGR5bmFtaWNDb21wb25lbnRQcm92aWRlcjtcbiAgICAgICAgdGhpcy5keW5hbWljVGFicyA9IFtdO1xuICAgICAgICB0aGlzLmR5bmFtaWNQYW5lSW5kZXggPSAwO1xuXG4gICAgICAgIHRoaXMucHJvbWlzZVJlc29sdmVyRm4gPSByZXNvbHZlRm47XG5cbiAgICAgICAgc3R5bGVyKHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcywgQVBQTFlfU1RZTEVTX1RZUEUuQ09OVEFJTkVSKTtcblxuICAgIH1cblxuICAgIGFuaW1hdGVJbiAoZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgdGFiSGVhZGVyID0gJChlbGVtZW50KTtcbiAgICAgICAgLy8gd2hlbiB0aGUgYW5pbWF0aW9uIGlzIG5vdCBwcmVzZW50IHRvZ2dsZSB0aGUgYWN0aXZlIGNsYXNzLlxuICAgICAgICB0YWJIZWFkZXIuc2libGluZ3MoJy5hY3RpdmUnKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgIHRhYkhlYWRlci5hZGRDbGFzcygnYWN0aXZlJyk7XG5cbiAgICAgICAgY29uc3QgdWwgPSB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndWwubmF2Lm5hdi10YWJzJyk7XG5cbiAgICAgICAgLy8gbW92ZSB0aGUgdGFiaGVhZGVyIGludG8gdGhlIHZpZXdwb3J0XG4gICAgICAgIGNvbnN0ICRwcmV2SGVhZGVyRWxlID0gdGFiSGVhZGVyLnByZXYoKTtcbiAgICAgICAgaWYgKCRwcmV2SGVhZGVyRWxlLmxlbmd0aCkge1xuICAgICAgICAgICAgdWwuc2Nyb2xsTGVmdCA9ICRwcmV2SGVhZGVyRWxlWzBdLm9mZnNldExlZnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1bC5zY3JvbGxMZWZ0ID0gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gcmVnaXN0ZXIgdGhlIGR5bmFtaWMgcGFuZXMuXG4gICAgICogQWZ0ZXIgYWxsIHBhbmVzIGFyZSBpbml0aWFsemVkLCB1cGRhdGUgdGhlIHF1ZXJ5bGlzdCBtYW51YWxseSBiYXNlZCBvbiBpbmRleC5cbiAgICAgKiBAcGFyYW0gcGFuZVJlZiAtIHJlZnJlbmNlIG9mIHRoZSB0YWJwYW5lXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyRHluYW1pY1RhYihwYW5lUmVmKSB7XG4gICAgICAgIHRoaXMuZHluYW1pY1RhYnMucHVzaChwYW5lUmVmKTtcbiAgICAgICAgY29uc3QgaXNMYXN0UGFuZSA9ICB0aGlzLmR5bmFtaWNUYWJzLmxlbmd0aCA9PT0gdGhpcy5keW5hbWljUGFuZUluZGV4O1xuICAgICAgICBpZiAoaXNMYXN0UGFuZSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNUYWJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3UGFuZVJlZiA9IGZpbmQodGhpcy5keW5hbWljVGFicywgcGFuZSA9PiBwYW5lLmR5bmFtaWNQYW5lSW5kZXggPT09IGkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzUGFuZUFscmVhZHlFeGlzdCA9IGZpbmQodGhpcy5wYW5lcy50b0FycmF5KCksIG5ld1BhbmVSZWYpO1xuICAgICAgICAgICAgICAgIGlmICghaXNQYW5lQWxyZWFkeUV4aXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFuZXMucmVzZXQoWy4uLnRoaXMucGFuZXMudG9BcnJheSgpLCBuZXdQYW5lUmVmXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdQYW5lUmVmLmFjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UGFuZVJlZi5zZWxlY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDIwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHRvIGFkZCB0aGUgdGFicGFuZSBkeW5hbWljYWxseVxuICAgICAqIEBwYXJhbSB0YWJwYW5lcyAtIGxpc3Qgb2YgdGFicGFuZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkUGFuZSh0YWJwYW5lcykge1xuICAgICAgICBpZiAoIWlzQXJyYXkodGFicGFuZXMpKSB7XG4gICAgICAgICAgICB0YWJwYW5lcyA9IFt0YWJwYW5lc107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFuZU5hbWVzTGlzdCA9IFtdO1xuICAgICAgICBmb3JFYWNoKHRhYnBhbmVzLCAocGFuZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzUGFuZUFscmVhZHlDcmVhdGVkID0gZmluZCh0aGlzLnBhbmVzLnRvQXJyYXkoKSwge25hbWU6IHBhbmUubmFtZX0pO1xuICAgICAgICAgICAgY29uc3QgaXNQYW5lTmFtZUV4aXN0ID0gaW5kZXhPZihwYW5lTmFtZXNMaXN0LCBwYW5lLm5hbWUpO1xuICAgICAgICAgICAgLy8gSWYgdXNlciB0cmllcyB0byBhZGQgdGFicGFuZSB3aXRoIHRoZSBzYW1lIG5hbWUgd2hpY2ggaXMgYWxyZWFkeSBleGlzdHMgdGhlbiBkbyBub3QgY3JlYXRlIHRoZSBwYW5lXG4gICAgICAgICAgICBpZiAoaXNQYW5lQWxyZWFkeUNyZWF0ZWQgfHwgaXNQYW5lTmFtZUV4aXN0ID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgVGhlIHRhYiBwYW5lIHdpdGggbmFtZSAke3BhbmUubmFtZX0gYWxyZWFkeSBleGlzdHNgKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBwYXJhbU1hcmt1cCA9ICcnO1xuICAgICAgICAgICAgbGV0IHByb3BzVG1wbCA9ICcnO1xuICAgICAgICAgICAgdGhpcy5keW5hbWljUGFuZUluZGV4Kys7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gcGFuZS5uYW1lID8gcGFuZS5uYW1lIDogYHRhYnBhbmUke3RoaXMucGFuZXMudG9BcnJheSgpLmxlbmd0aCArIChpbmRleCArIDEpfWA7XG4gICAgICAgICAgICBwYW5lTmFtZXNMaXN0LnB1c2gobmFtZSk7XG4gICAgICAgICAgICBjb25zdCBwYXJ0aWFsUGFyYW1zID0gZ2V0KHBhbmUsICdwYXJhbXMnKTtcblxuICAgICAgICAgICAgZm9yRWFjaChwYW5lLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChrZXkgIT09ICdwYXJhbXMnKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzVG1wbCA9IGAke3Byb3BzVG1wbH0gJHtrZXl9PVwiJHt2YWx1ZX1cImA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGZvckVhY2gocGFydGlhbFBhcmFtcywgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBwYXJhbU1hcmt1cCA9IGAke3BhcmFtTWFya3VwfSA8d20tcGFyYW0gbmFtZT1cIiR7a2V5fVwiIHZhbHVlPVwiJHt2YWx1ZX1cIj48L3dtLXBhcmFtPmA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG1hcmt1cCA9IGA8d20tdGFicGFuZSBkeW5hbWljUGFuZUluZGV4PVwiJHt0aGlzLmR5bmFtaWNQYW5lSW5kZXggLSAxfVwiIGlzZHluYW1pYz1cInRydWVcIiBuYW1lPVwiJHtuYW1lfVwiICR7cHJvcHNUbXBsfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3BhcmFtTWFya3VwfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC93bS10YWJwYW5lPmA7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fZHluYW1pY0NvbnRleHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9keW5hbWljQ29udGV4dCA9IE9iamVjdC5jcmVhdGUodGhpcy52aWV3UGFyZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9keW5hbWljQ29udGV4dFt0aGlzLmdldEF0dHIoJ3dtVGFiJyldID0gdGhpcztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5keW5hbWljQ29tcG9uZW50UHJvdmlkZXIuYWRkQ29tcG9uZW50KHRoaXMuZ2V0TmF0aXZlRWxlbWVudCgpLnF1ZXJ5U2VsZWN0b3IoJy50YWItY29udGVudCcpLCBtYXJrdXAsIHRoaXMuX2R5bmFtaWNDb250ZXh0LCB7aW5qOiB0aGlzLmluan0pO1xuXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGFuZU5hbWVzTGlzdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB0byByZW1vdmUgdGhlIHRhYnBhbmVcbiAgICAgKiBAcGFyYW0gcGFuZUluZGV4IC0gaW5kZXggb2YgdGhlIHBhbmVcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVtb3ZlUGFuZShwYW5lTmFtZSkge1xuICAgICAgICBjb25zdCBwYW5lUmVmID0gdGhpcy5nZXRQYW5lUmVmQnlOYW1lKHBhbmVOYW1lKTtcbiAgICAgICAgaWYgKHBhbmVSZWYpIHtcbiAgICAgICAgICAgIHBhbmVSZWYucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUYWJQYW5lIGNoaWxkcmVuIGNvbXBvbmVudHMgaW52b2tlIHRoaXMgbWV0aG9kIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIHBhcmVudFxuICAgICAqIGlmIHRoZSBldnQgYXJndW1lbnQgaXMgZGVmaW5lZCBvbi1jaGFuZ2UgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkLlxuICAgICAqL1xuICAgIHB1YmxpYyBub3RpZnlDaGFuZ2UocGFuZVJlZjogVGFiUGFuZUNvbXBvbmVudCwgZXZ0OiBFdmVudCwgaXNLZXlCb2FyZEV2ZW50OiBib29sZWFuKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1NlbGVjdGFibGVUYWIocGFuZVJlZikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBoZWFkZXJFbGVtZW50O1xuICAgICAgICAvLyBpbnZva2UgZGVzZWxlY3QgZXZlbnQgY2FsbGJhY2sgb24gdGhlIHByZXNldCBhY3RpdmUgdGFiXG4gICAgICAgIGlmICghaXNFbXB0eSh0aGlzLmFjdGl2ZVRhYikpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVGFiLmRlc2VsZWN0KCk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIHRoaXMuYWN0aXZlVGFiID0gcGFuZVJlZi5nZXRXaWRnZXQoKTtcbiAgICAgICAgY29uc3QgbmV3UGFuZUluZGV4ID0gdGhpcy5nZXRQYW5lSW5kZXhCeVJlZihwYW5lUmVmKTtcbiAgICAgICAgY29uc3QgbW9kZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5jb21wdXRlTW9kZSh0aGlzLnN0YXRlaGFuZGxlcik7XG4gICAgICAgIGlmICghdGhpcy5pc1BhZ2VMb2FkQ2FsbCAmJiBtb2RlICYmIG1vZGUudG9Mb3dlckNhc2UoKSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlUGVyc2lzdGVuY2Uuc2V0V2lkZ2V0U3RhdGUodGhpcywgdGhpcy5hY3RpdmVUYWIubmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRwYW5laW5kZXggPSB0aGlzLmdldFBhbmVJbmRleEJ5UmVmKHBhbmVSZWYpO1xuICAgICAgICAgICAgdGhpcy5pc1BhZ2VMb2FkQ2FsbCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaW52b2tlIHNlbGVjdCBjYWxsYmFjayBvbiB0aGUgc2VsZWN0ZWQgdGFiXG4gICAgICAgIHBhbmVSZWYuaW52b2tlT25TZWxlY3RDYWxsYmFjayhldnQpO1xuXG4gICAgICAgIC8vIGludm9rZSBjaGFuZ2UgY2FsbGJhY2sgaWYgdGhlIGV2dCBpcyBwcmVzZW50LCBzZWxlY3QgYSB0YWIgcHJvZ3JhbW1hdGljYWxseSB3aWxsIG5vdCBoYXZlIHRoZSBldmVudFxuICAgICAgICBpZiAoZXZ0KSB7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICAkZXZlbnQ6IGV2dCxcbiAgICAgICAgICAgICAgICBuZXdQYW5lSW5kZXg6IG5ld1BhbmVJbmRleCxcbiAgICAgICAgICAgICAgICBvbGRQYW5lSW5kZXg6IHRoaXMuX29sZFBhbmVJbmRleCB8fCAwXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9vbGRQYW5lSW5kZXggPSBuZXdQYW5lSW5kZXg7XG5cbiAgICAgICAgaWYgKGV2dCkge1xuICAgICAgICAgICAgaGVhZGVyRWxlbWVudCA9ICQoZXZ0LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xvc2VzdCgnbGkudGFiLWhlYWRlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZXZ0IHx8ICFoZWFkZXJFbGVtZW50IHx8ICFoZWFkZXJFbGVtZW50Lmxlbmd0aCkge1xuICAgICAgICAgICAgaGVhZGVyRWxlbWVudCA9IHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGBsaVtkYXRhLXBhbmVpZD0ke3BhbmVSZWYud2lkZ2V0SWR9XWApO1xuICAgICAgICAgICAgY29uc3QgaW5zaWRlVGFicyA9ICEhJChoZWFkZXJFbGVtZW50KS5jbG9zZXN0KCcuYXBwLXRhYnMnKVxuICAgICAgICAgICAgICAgIC5wYXJlbnQoKS5jbG9zZXN0KCcuYXBwLXRhYnMnKS5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoIWluc2lkZVRhYnMgJiYgaXNLZXlCb2FyZEV2ZW50KSB7XG4gICAgICAgICAgICAgICAgJChoZWFkZXJFbGVtZW50KS5jaGlsZHJlbigpLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hbmltYXRlSW4oaGVhZGVyRWxlbWVudCk7XG5cbiAgICAgICAgLy8gdGhpcy5zZXRUYWJzTGVmdFBvc2l0aW9uKHRoaXMuZ2V0UGFuZUluZGV4QnlSZWYodGhpcy5hY3RpdmVUYWIpLCB0aGlzLnBhbmVzLmxlbmd0aCk7XG4gICAgICAgIGlmICh0aGlzLmNhblNsaWRlKCkpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy50YWJzQW5pbWF0b3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYnNBbmltYXRvciA9IG5ldyBUYWJzQW5pbWF0b3IodGhpcyk7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJzQW5pbWF0b3Iuc2V0R2VzdHVyZXNFbmFibGVkKHRoaXMuY2FuU2xpZGUoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRhYnNBbmltYXRvci50cmFuc2l0aW9uVGFiSW50b1ZpZXcoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnb1RvVGFiKHRhYkluZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLmlzVmFsaWRQYW5lSW5kZXgodGFiSW5kZXggLSAxKSkge1xuICAgICAgICAgICAgY29uc3QgdGFiID0gdGhpcy5nZXRQYW5lUmVmQnlJbmRleCh0YWJJbmRleCAtIDEpO1xuICAgICAgICAgICAgdGFiLnNlbGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQYW5lSW5kZXhCeVJlZihwYW5lUmVmOiBUYWJQYW5lQ29tcG9uZW50KTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFuZXMudG9BcnJheSgpLmluZGV4T2YocGFuZVJlZik7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyB0aGUgYWN0aXZlIHRhYiBpbmRleCBmcm9tIHRhYnMuXG4gICAgcHVibGljIGdldEFjdGl2ZVRhYkluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBmaW5kSW5kZXgodGhpcy5wYW5lcy50b0FycmF5KCksIHtpc0FjdGl2ZTogdHJ1ZX0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNWYWxpZFBhbmVJbmRleChpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHRoaXMucGFuZXMubGVuZ3RoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBhbmVSZWZCeUluZGV4KGluZGV4OiBudW1iZXIpOiBUYWJQYW5lQ29tcG9uZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFuZXMudG9BcnJheSgpW2luZGV4XTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBhbmVSZWZCeU5hbWUobmFtZTogc3RyaW5nKTogVGFiUGFuZUNvbXBvbmVudCB7XG4gICAgICAgIHJldHVybiBmaW5kKHRoaXMucGFuZXMudG9BcnJheSgpLCB7bmFtZTogbmFtZX0pO1xuICAgIH1cblxuICAgIC8vIHJldHVybnMgZmFsc2UgaWYgdGhlIHBhbmUgaXMgaGlkZGVuIG9yIGRpc2FibGVkXG4gICAgcHJpdmF0ZSBpc1NlbGVjdGFibGVUYWIocGFuZVJlZjogVGFiUGFuZUNvbXBvbmVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcGFuZVJlZi5zaG93ICYmICFwYW5lUmVmLmRpc2FibGVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FuU2xpZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zaXRpb24gPT09ICdzbGlkZScgJiYgIXRoaXMudmVydGljYWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTZWxlY3RhYmxlVGFiQWZ0ZXJJbmRleChpbmRleDogbnVtYmVyKTogVGFiUGFuZUNvbXBvbmVudCB7XG4gICAgICAgIGZvciAobGV0IGkgPSBpbmRleCArIDE7IGkgPCB0aGlzLnBhbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYW5lID0gdGhpcy5nZXRQYW5lUmVmQnlJbmRleChpKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU2VsZWN0YWJsZVRhYihwYW5lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbmRleCA9PT0gdGhpcy5wYW5lcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICBjb25zdCBwYW5lID0gdGhpcy5nZXRQYW5lUmVmQnlJbmRleCgwKTtcbiAgICAgICAgICAgICBpZiAodGhpcy5pc1NlbGVjdGFibGVUYWIocGFuZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFuZTtcbiAgICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGFibGVUYWJCZWZvcmVJbmRleChpbmRleDogbnVtYmVyKTogVGFiUGFuZUNvbXBvbmVudCB7XG4gICAgICAgIGZvciAobGV0IGkgPSBpbmRleCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBwYW5lID0gdGhpcy5nZXRQYW5lUmVmQnlJbmRleChpKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU2VsZWN0YWJsZVRhYihwYW5lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3QgcGFuZSA9IHRoaXMuZ2V0UGFuZVJlZkJ5SW5kZXgodGhpcy5wYW5lcy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU2VsZWN0YWJsZVRhYihwYW5lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2VsZWN0IG5leHQgdGFiIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSB0YWJcbiAgICBwdWJsaWMgbmV4dCgkZXZlbnQ/OiBFdmVudCwgaXNLZXlCb2FyZEV2ZW50PzogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBwYW5lID0gdGhpcy5nZXRTZWxlY3RhYmxlVGFiQWZ0ZXJJbmRleCh0aGlzLmdldEFjdGl2ZVRhYkluZGV4KCkpO1xuICAgICAgICBpZiAocGFuZSkge1xuICAgICAgICAgICAgcGFuZS5zZWxlY3QoJGV2ZW50LCBpc0tleUJvYXJkRXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2VsZWN0IHByZXYgdGFiIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSB0YWJcbiAgICBwdWJsaWMgcHJldigkZXZlbnQ/OiBFdmVudCwgaXNLZXlCb2FyZEV2ZW50PzogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBwYW5lID0gdGhpcy5nZXRTZWxlY3RhYmxlVGFiQmVmb3JlSW5kZXgodGhpcy5nZXRBY3RpdmVUYWJJbmRleCgpKTtcbiAgICAgICAgaWYgKHBhbmUpIHtcbiAgICAgICAgICAgIHBhbmUuc2VsZWN0KCRldmVudCwgaXNLZXlCb2FyZEV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHRoaXMgbWV0aG9kIHdpbGwgYmUgaW52b2tlZCBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBjb21wb25lbnQgYW5kIG9uIGRlZmF1bHRwYW5laW5kZXggcHJvcGVydHkgY2hhbmdlLFxuICAgICAqIGlmIHRoZSBwcm92aWRlZCBkZWZhdWx0cGFuZWluZGV4IGlzIG5vdCB2YWxpZCwgZmluZCB0aGUgZmlyc3QgcGFuZSBpbmRleCB3aGljaCBjYW4gYmUgc2hvd24gYW5kIHNlbGVjdCBpdFxuICAgICAqL1xuICAgIHByaXZhdGUgc2VsZWN0RGVmYXVsdFBhbmVCeUluZGV4KGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWRQYW5lSW5kZXgoaW5kZXgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcGFuZVJlZiA9IHRoaXMuZ2V0UGFuZVJlZkJ5SW5kZXgoaW5kZXgpO1xuICAgICAgICBpZiAoIXRoaXMuaXNTZWxlY3RhYmxlVGFiKHBhbmVSZWYpKSB7XG4gICAgICAgICAgICBwYW5lUmVmID0gdGhpcy5nZXRTZWxlY3RhYmxlVGFiQWZ0ZXJJbmRleCgwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFuZVJlZikge1xuICAgICAgICAgICAgcGFuZVJlZi5zZWxlY3QoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHVwZGF0ZSB0aGUgcG9zdGlvbiBvZiB0YWIgaGVhZGVyXG4gICAgcHJpdmF0ZSBzZXRUYWJzUG9zaXRpb24oKSB7XG4gICAgICAgIGNvbnN0IHVsID0gdGhpcy5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdO1xuXG4gICAgICAgIHRoaXMudmVydGljYWwgPSAodGhpcy50YWJzcG9zaXRpb24gPT09ICdsZWZ0JyB8fCB0aGlzLnRhYnNwb3NpdGlvbiA9PT0gJ3JpZ2h0Jyk7XG5cbiAgICAgICAgcmVtb3ZlQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCAnaW52ZXJ0ZWQnKTtcbiAgICAgICAgaWYgKHRoaXMudGFic3Bvc2l0aW9uID09PSAnYm90dG9tJyB8fCB0aGlzLnRhYnNwb3NpdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgYXBwZW5kTm9kZSh1bCBhcyBIVE1MRWxlbWVudCwgdGhpcy5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgIGFkZENsYXNzKHRoaXMubmF0aXZlRWxlbWVudCwgJ2ludmVydGVkJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRGF0YUNoYW5nZShuZXdWYWwpIHtcbiAgICAgICAgdGhpcy5maWVsZERlZnMgPSBjcmVhdGVBcnJheUZyb20obmV3VmFsKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNlbGVjdERlZmF1bHRQYW5lQnlJbmRleCh0aGlzLmRlZmF1bHRwYW5laW5kZXggfHwgMCkpO1xuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52OiBhbnksIG92KSB7XG5cbiAgICAgICAgaWYgKGtleSA9PT0gJ2RlZmF1bHRwYW5laW5kZXgnKSB7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRwYW5laW5kZXggPSBudjtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdkYXRhc2V0Jykge1xuICAgICAgICAgICAgdGhpcy5vbkRhdGFDaGFuZ2UobnYpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3N0YXRlaGFuZGxlcicpIHtcbiAgICAgICAgICAgIHRoaXMuaXNQYWdlTG9hZENhbGwgPSB0cnVlO1xuICAgICAgICAgICAgY29uc3Qgd2lkZ2V0U3RhdGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcyk7XG4gICAgICAgICAgICBpZiAobnYgIT09ICdub25lJyAmJiB3aWRnZXRTdGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhbmVUb1NlbGVjdDogYW55ID0gdGhpcy5wYW5lcy5maWx0ZXIoZnVuY3Rpb24ocGFuZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2lkZ2V0U3RhdGUgPT09IHBhbmUubmFtZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoIXBhbmVUb1NlbGVjdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdUYWIgcGFuZSBuYW1lICcgKyB3aWRnZXRTdGF0ZSArICcgaW4gU3RhdGUgaXMgaW5jb3JyZWN0LiBGYWxsaW5nIGJhY2sgdG8gdGhlIGRlZmF1bHQgcGFuZScpO1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2VsZWN0RGVmYXVsdFBhbmVCeUluZGV4KHRoaXMuZGVmYXVsdHBhbmVpbmRleCB8fCAwKSwgMjApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRQYW5lSW5kZXhCeVJlZihwYW5lVG9TZWxlY3RbMF0pO1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2VsZWN0RGVmYXVsdFBhbmVCeUluZGV4KGluZGV4KSwgMjApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNlbGVjdERlZmF1bHRQYW5lQnlJbmRleCh0aGlzLmRlZmF1bHRwYW5laW5kZXggfHwgMCksIDIwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdhdXRvdGFiYWN0aXZhdGlvbicpe1xuICAgICAgICAgICAgdGhpcy5hdXRvQWN0aXZhdGlvbiA9IG52O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWdpc3RlclRhYnNTY3JvbGwoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgJHVsID0gdGhpcy4kZWxlbWVudC5maW5kKCc+IHVsJyk7XG4gICAgICAgICAgICBsZXQgJGxpUG9zaXRpb247XG5cbiAgICAgICAgICAgIGNvbnN0ICAkbGkgPSAkdWwuY2hpbGRyZW4oKTtcbiAgICAgICAgICAgICRsaVBvc2l0aW9uID0gJGxpLmxhc3QoKS5wb3NpdGlvbigpO1xuICAgICAgICAgICAgaWYgKCRsaVBvc2l0aW9uICYmICgkbGlQb3NpdGlvbi5sZWZ0ID4gJHVsLndpZHRoKCkpKSB7XG4gICAgICAgICAgICAgICAgJHVsLm9uKCdtb3VzZXdoZWVsJywgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGVmdCA9ICR1bFswXS5zY3JvbGxMZWZ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgX2RlbHRhID0gLTEgKiBlLm9yaWdpbmFsRXZlbnQud2hlZWxEZWx0YTtcbiAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAkdWwuYW5pbWF0ZSh7c2Nyb2xsTGVmdDogbGVmdCArIF9kZWx0YX0sIHsnZHVyYXRpb24nOiAxMH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgb25rZXlkb3duKGV2ZW50KSB7XG4gICAgICAgIGxldCBuZXdQYW5lO1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICAgICAgICAgIG5ld1BhbmUgPSB0aGlzLmF1dG9BY3RpdmF0aW9uID8gKHRoaXMucHJldihudWxsLCB0cnVlKSwgbnVsbCkgOiB0aGlzLmdldFNlbGVjdGFibGVUYWJCZWZvcmVJbmRleCh0aGlzLmdldFNlbGVjdGVkUGFuZUluZGV4KCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgICAgICAgICAgbmV3UGFuZSA9IHRoaXMuYXV0b0FjdGl2YXRpb24gPyAodGhpcy5uZXh0KG51bGwsIHRydWUpLCBudWxsKSA6IHRoaXMuZ2V0U2VsZWN0YWJsZVRhYkFmdGVySW5kZXgodGhpcy5nZXRTZWxlY3RlZFBhbmVJbmRleCgpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnRW50ZXInOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFuZSA9IHRoaXMuZ2V0U2VsZWN0YWJsZVRhYkFmdGVySW5kZXgodGhpcy5nZXRTZWxlY3RlZFBhbmVJbmRleCgpLTEpO1xuICAgICAgICAgICAgICAgIGlmIChwYW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudGVyRXZlbnQgPSBuZXcgS2V5Ym9hcmRFdmVudCgna2V5ZG93bicsIHtrZXk6ICdFbnRlcicsIGNvZGU6ICdFbnRlcicsIGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWV9KTtcbiAgICAgICAgICAgICAgICAgICAgcGFuZS5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoZW50ZXJFdmVudCk7XG4gICAgICAgICAgICAgICAgICAgIHBhbmUuc2VsZWN0KGVudGVyRXZlbnQsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmV3UGFuZSkge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2xpLnNlbGVjdCcpPy5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3QnKTtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGBsaVtkYXRhLXBhbmVpZD1cIiR7bmV3UGFuZS53aWRnZXRJZH1cIl1gKT8uY2xhc3NMaXN0LmFkZCgnc2VsZWN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMucHJvbWlzZVJlc29sdmVyRm4oKTtcbiAgICAgICAgc3VwZXIubmdBZnRlckNvbnRlbnRJbml0KCk7XG4gICAgICAgIHRoaXMuc2V0VGFic1Bvc2l0aW9uKCk7XG4gICAgICAgIHRoaXMucGFuZXMuY2hhbmdlcy5zdWJzY3JpYmUoIHNsaWRlcyA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5wYW5lcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdERlZmF1bHRQYW5lQnlJbmRleCh0aGlzLmRlZmF1bHRwYW5laW5kZXggfHwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJUYWJzU2Nyb2xsKCk7XG4gICAgfVxuXG4gICAgZ2V0U2VsZWN0ZWRQYW5lSW5kZXgoKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wYW5lcy50b0FycmF5KCkuZmluZEluZGV4KHBhbmUgPT5cbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGBsaVtkYXRhLXBhbmVpZD1cIiR7cGFuZS53aWRnZXRJZH1cIl1gKT8uY2xhc3NMaXN0LmNvbnRhaW5zKFwic2VsZWN0XCIpKTtcbiAgICAgICAgcmV0dXJuIGluZGV4ID49IDAgPyBpbmRleCA6IHRoaXMuZ2V0QWN0aXZlVGFiSW5kZXgoKTtcbiAgICB9XG59XG4iLCI8dWwgY2xhc3M9XCJuYXYgbmF2LXRhYnNcIiBbbmdDbGFzc109XCJ7J25hdi1zdGFja2VkJzogdmVydGljYWwsICduYXYtanVzdGlmaWVkJzoganVzdGlmaWVkfVwiIHJvbGU9XCJ0YWJsaXN0XCI+XG4gIEBmb3IgKHBhbmUgb2YgcGFuZXM7IHRyYWNrIHBhbmU7IGxldCBpID0gJGluZGV4KSB7XG4gICAgPGxpIGNsYXNzPVwidGFiLWhlYWRlclwiIFthdHRyLmRhdGEtcGFuZWlkXT1cInBhbmUud2lkZ2V0SWRcIiBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IHBhbmUuaXNBY3RpdmUsICdkaXNhYmxlZCc6IHBhbmUuZGlzYWJsZWR9XCJcbiAgICAgIFtoaWRkZW5dPVwiIXBhbmUuc2hvd1wiIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgIDxhIFthdHRyLmFyaWEtbGFiZWxdPVwicGFuZS5iYWRnZXZhbHVlID8gcGFuZS50aXRsZSArICcgJyArIHBhbmUuYmFkZ2V2YWx1ZSA6IHBhbmUudGl0bGVcIlxuICAgICAgICBbYXR0ci5pY29uLXBvc2l0aW9uXT1cImljb25wb3NpdGlvblwiXG4gICAgICAgIFthdHRyLnRpdGxlXT1cInBhbmUudGl0bGVcIlxuICAgICAgICBbdGFiaW5kZXhdPVwicGFuZS5pc0FjdGl2ZSA/ICcwJyA6ICctMSdcIlxuICAgICAgICBjbGFzcz1cInRhYi1oZWFkaW5nXCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIlxuICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cInBhbmUuaXNBY3RpdmVcIiByb2xlPVwidGFiXCIgKGNsaWNrKT1cInBhbmUuc2VsZWN0KCRldmVudCk7IHBhbmUudGFicGFuZUhlYWRlckNsaWNrKCRldmVudCwgaSk7XCIgKGtleWRvd24pPVwib25rZXlkb3duKCRldmVudClcIj5cbiAgICAgICAgQGlmIChwYW5lLnBhbmVpY29uKSB7XG4gICAgICAgICAgPGkgW25nQ2xhc3NdPVwiWydhcHAtaWNvbicsIHBhbmUucGFuZWljb25dXCI+PC9pPlxuICAgICAgICB9XG4gICAgICAgIDxzcGFuIFt0ZXh0Q29udGVudF09XCJwYW5lLnRpdGxlXCI+PC9zcGFuPlxuICAgICAgICBAaWYgKHBhbmUuYmFkZ2V2YWx1ZSkge1xuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwgbGFiZWwte3twYW5lLmJhZGdldHlwZX19XCIgW3RleHRDb250ZW50XT1cInBhbmUuYmFkZ2V2YWx1ZVwiPjwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgPC9hPlxuICAgIDwvbGk+XG4gIH1cbjwvdWw+XG5AaWYgKHR5cGUgIT09ICdkeW5hbWljJykge1xuICA8ZGl2IGNsYXNzPVwidGFiLWNvbnRlbnRcIiBbbmdDbGFzc109XCJ7J3RhYi1zdGFja2VkJzogdmVydGljYWwsICd0YWItanVzdGlmaWVkJzoganVzdGlmaWVkfVwiPlxuICAgIDxuZy1jb250ZW50IG5nUHJvamVjdEFzPVwiZGl2W3dtVGFiUGFuZV1cIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxufVxuQGlmICh0eXBlID09PSAnZHluYW1pYycpIHtcbiAgPGRpdiBjbGFzcz1cInRhYi1jb250ZW50XCIgW25nQ2xhc3NdPVwieyd0YWItc3RhY2tlZCc6IHZlcnRpY2FsLCAndGFiLWp1c3RpZmllZCc6IGp1c3RpZmllZH1cIj5cbiAgICBAaWYgKGZpZWxkRGVmcyAmJiAhZmllbGREZWZzLmxlbmd0aCkge1xuICAgICAgPGRpdj57e25vZGF0YW1lc3NhZ2V9fTwvZGl2PlxuICAgIH1cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJkaXZbd21SZXBlYXRUZW1wbGF0ZV1cIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxufVxuIl19
|
|
449
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvY29udGFpbmVycy90YWJzL3NyYy90YWJzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9jb250YWluZXJzL3RhYnMvc3JjL3RhYnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzNELE9BQU8sRUFHSCxTQUFTLEVBQ1QsU0FBUyxFQUNULGVBQWUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUNwQyxRQUFRLEVBR1IsUUFBUSxFQUNSLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0gsUUFBUSxFQUNSLFVBQVUsRUFDViwyQkFBMkIsRUFDM0IsSUFBSSxFQUNKLFdBQVcsRUFDWCxnQkFBZ0IsRUFDbkIsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUNILGlCQUFpQixFQUVqQixrQkFBa0IsRUFDbEIsTUFBTSxFQUNOLGlCQUFpQixFQUNqQixlQUFlLEVBQ2xCLE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQzs7OztBQUluRixNQUFNLFdBQVcsR0FB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ckIsYUFBYSwrSEFKWDtZQUNQLGtCQUFrQixDQUFDLGFBQWEsQ0FBQztTQUNwQyxnREErQmdCLGdCQUFnQiwwRUNwRnJDLHltREFrQ0EsMkNEYWMsWUFBWSw2SEFBRSxvQkFBb0I7OzRGQVFuQyxhQUFhO2tCQVZ6QixTQUFTO2lDQUNNLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxvQkFBb0IsQ0FBQyxZQUNuQyxhQUFhLFlBRWIsUUFBUSxhQUNQO3dCQUNQLGtCQUFrQixlQUFlO3FCQUNwQzs7MEJBb0NJLFNBQVM7MkJBQUMsWUFBWTs7MEJBQ3RCLFNBQVM7MkJBQUMsY0FBYzs7MEJBRXhCLE1BQU07MkJBQUMsa0JBQWtCOzswQkFBRyxRQUFRO3lDQVZOLFlBQVk7c0JBQTlDLFdBQVc7dUJBQUMsb0JBQW9CO2dCQUVFLEtBQUs7c0JBQXZDLGVBQWU7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFRleHRDb250ZW50RGlyZWN0aXZlIH0gZnJvbSBcIkB3bS9jb21wb25lbnRzL2Jhc2VcIjtcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIEF0dHJpYnV0ZSxcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLCBIb3N0QmluZGluZywgSW5qZWN0LFxuICAgIEluamVjdG9yLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgUXVlcnlMaXN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICAgIGFkZENsYXNzLFxuICAgIGFwcGVuZE5vZGUsXG4gICAgRHluYW1pY0NvbXBvbmVudFJlZlByb3ZpZGVyLFxuICAgIG5vb3AsXG4gICAgcmVtb3ZlQ2xhc3MsXG4gICAgU3RhdGVQZXJzaXN0ZW5jZVxufSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQge1xuICAgIEFQUExZX1NUWUxFU19UWVBFLFxuICAgIElXaWRnZXRDb25maWcsXG4gICAgcHJvdmlkZUFzV2lkZ2V0UmVmLFxuICAgIHN0eWxlcixcbiAgICBTdHlsYWJsZUNvbXBvbmVudCxcbiAgICBjcmVhdGVBcnJheUZyb21cbn0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5cbmltcG9ydCB7IFRhYnNBbmltYXRvciB9IGZyb20gJy4vdGFicy5hbmltYXRvcic7XG5pbXBvcnQgeyByZWdpc3RlclByb3BzIH0gZnJvbSAnLi90YWJzLnByb3BzJztcbmltcG9ydCB7IFRhYlBhbmVDb21wb25lbnQgfSBmcm9tICcuL3RhYi1wYW5lL3RhYi1wYW5lLmNvbXBvbmVudCc7XG5pbXBvcnQge2ZpbmQsIGZpbmRJbmRleCwgZm9yRWFjaCwgZ2V0LCBpbmRleE9mLCBpc0FycmF5LCBpc0VtcHR5fSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmRlY2xhcmUgY29uc3QgJDtcblxuY29uc3QgREVGQVVMVF9DTFMgPSAnYXBwLXRhYnMgY2xlYXJmaXgnO1xuY29uc3QgV0lER0VUX0NPTkZJRzogSVdpZGdldENvbmZpZyA9IHtcbiAgICB3aWRnZXRUeXBlOiAnd20tdGFicycsXG4gICAgaG9zdENsYXNzOiBERUZBVUxUX0NMU1xufTtcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBUZXh0Q29udGVudERpcmVjdGl2ZV0sXG4gICAgc2VsZWN0b3I6ICdkaXZbd21UYWJzXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhYnMuY29tcG9uZW50Lmh0bWwnLFxuICAgIGV4cG9ydEFzOiAnd21UYWJzJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzV2lkZ2V0UmVmKFRhYnNDb21wb25lbnQpXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBUYWJzQ29tcG9uZW50IGV4dGVuZHMgU3R5bGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcblxuICAgIHB1YmxpYyBkZWZhdWx0cGFuZWluZGV4OiBudW1iZXI7XG4gICAgcHVibGljIHRyYW5zaXRpb246IHN0cmluZztcbiAgICBwdWJsaWMgdGFic3Bvc2l0aW9uOiBzdHJpbmc7XG4gICAgcHVibGljIHN0YXRlaGFuZGxlcjogYW55O1xuICAgIHByaXZhdGUgc3RhdGVQZXJzaXN0ZW5jZTogU3RhdGVQZXJzaXN0ZW5jZTtcblxuICAgIHB1YmxpYyB2ZXJ0aWNhbDogYm9vbGVhbjtcbiAgICBwdWJsaWMganVzdGlmaWVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgYWN0aXZlVGFiOiBUYWJQYW5lQ29tcG9uZW50O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvbWlzZVJlc29sdmVyRm46IEZ1bmN0aW9uO1xuICAgIHByaXZhdGUgdGFic0FuaW1hdG9yOiBUYWJzQW5pbWF0b3I7XG4gICAgcHJpdmF0ZSBfb2xkUGFuZUluZGV4OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBpc1BhZ2VMb2FkQ2FsbDogYm9vbGVhbjtcbiAgICBwcml2YXRlIGR5bmFtaWNDb21wb25lbnRQcm92aWRlcjtcbiAgICBwcml2YXRlIF9keW5hbWljQ29udGV4dDtcbiAgICBwcml2YXRlIGR5bmFtaWNQYW5lSW5kZXg7XG4gICAgcHVibGljIGR5bmFtaWNUYWJzO1xuICAgIHB1YmxpYyBmaWVsZERlZnM7XG4gICAgcHVibGljIHR5cGU7XG4gICAgcHVibGljIG5vZGF0YW1lc3NhZ2U7XG4gICAgcHVibGljIGF1dG9BY3RpdmF0aW9uOmJvb2xlYW47XG4gICAgcHJpdmF0ZSBwYW5lc0NoYW5nZXNTdWJzY3JpcHRpb246IGFueTtcbiAgICBwcml2YXRlIGR5bmFtaWNDb21wb25lbnRSZWZzOiBhbnlbXSA9IFtdO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmljb24tcG9zaXRpb24nKSBpY29ucG9zaXRpb246IHN0cmluZyA9ICcnO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihUYWJQYW5lQ29tcG9uZW50KSBwYW5lczogUXVlcnlMaXN0PFRhYlBhbmVDb21wb25lbnQ+O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluajogSW5qZWN0b3IsXG4gICAgICAgIGR5bmFtaWNDb21wb25lbnRQcm92aWRlcjogRHluYW1pY0NvbXBvbmVudFJlZlByb3ZpZGVyLFxuICAgICAgICBAQXR0cmlidXRlKCd0cmFuc2l0aW9uJykgX3RyYW5zaXRpb246IHN0cmluZyxcbiAgICAgICAgQEF0dHJpYnV0ZSgndGFic3Bvc2l0aW9uJykgX3RhYnNQb3NpdGlvbjogc3RyaW5nLFxuICAgICAgICBzdGF0ZVBlcnNpc3RlbmNlOiBTdGF0ZVBlcnNpc3RlbmNlLFxuICAgICAgICBASW5qZWN0KCdFWFBMSUNJVF9DT05URVhUJykgQE9wdGlvbmFsKCkgZXhwbGljaXRDb250ZXh0OiBhbnlcbiAgICApIHtcbiAgICAgICAgLy8gaGFuZGxlIHRvIHRoZSBwcm9taXNlIHJlc29sdmVyXG4gICAgICAgIGxldCByZXNvbHZlRm46IEZ1bmN0aW9uID0gbm9vcDtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHLCBleHBsaWNpdENvbnRleHQsIG5ldyBQcm9taXNlKHJlcyA9PiByZXNvbHZlRm4gPSByZXMpKTtcblxuICAgICAgICB0aGlzLnRyYW5zaXRpb24gPSBfdHJhbnNpdGlvbjtcbiAgICAgICAgdGhpcy50YWJzcG9zaXRpb24gPSBfdGFic1Bvc2l0aW9uO1xuICAgICAgICB0aGlzLnN0YXRlUGVyc2lzdGVuY2UgPSBzdGF0ZVBlcnNpc3RlbmNlO1xuICAgICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRQcm92aWRlciA9IGR5bmFtaWNDb21wb25lbnRQcm92aWRlcjtcbiAgICAgICAgdGhpcy5keW5hbWljVGFicyA9IFtdO1xuICAgICAgICB0aGlzLmR5bmFtaWNQYW5lSW5kZXggPSAwO1xuXG4gICAgICAgIHRoaXMucHJvbWlzZVJlc29sdmVyRm4gPSByZXNvbHZlRm47XG5cbiAgICAgICAgc3R5bGVyKHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcywgQVBQTFlfU1RZTEVTX1RZUEUuQ09OVEFJTkVSKTtcblxuICAgIH1cblxuICAgIGFuaW1hdGVJbiAoZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgdGFiSGVhZGVyID0gJChlbGVtZW50KTtcbiAgICAgICAgLy8gd2hlbiB0aGUgYW5pbWF0aW9uIGlzIG5vdCBwcmVzZW50IHRvZ2dsZSB0aGUgYWN0aXZlIGNsYXNzLlxuICAgICAgICB0YWJIZWFkZXIuc2libGluZ3MoJy5hY3RpdmUnKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgIHRhYkhlYWRlci5hZGRDbGFzcygnYWN0aXZlJyk7XG5cbiAgICAgICAgY29uc3QgdWwgPSB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndWwubmF2Lm5hdi10YWJzJyk7XG5cbiAgICAgICAgLy8gbW92ZSB0aGUgdGFiaGVhZGVyIGludG8gdGhlIHZpZXdwb3J0XG4gICAgICAgIGNvbnN0ICRwcmV2SGVhZGVyRWxlID0gdGFiSGVhZGVyLnByZXYoKTtcbiAgICAgICAgaWYgKCRwcmV2SGVhZGVyRWxlLmxlbmd0aCkge1xuICAgICAgICAgICAgdWwuc2Nyb2xsTGVmdCA9ICRwcmV2SGVhZGVyRWxlWzBdLm9mZnNldExlZnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1bC5zY3JvbGxMZWZ0ID0gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gcmVnaXN0ZXIgdGhlIGR5bmFtaWMgcGFuZXMuXG4gICAgICogQWZ0ZXIgYWxsIHBhbmVzIGFyZSBpbml0aWFsemVkLCB1cGRhdGUgdGhlIHF1ZXJ5bGlzdCBtYW51YWxseSBiYXNlZCBvbiBpbmRleC5cbiAgICAgKiBAcGFyYW0gcGFuZVJlZiAtIHJlZnJlbmNlIG9mIHRoZSB0YWJwYW5lXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyRHluYW1pY1RhYihwYW5lUmVmKSB7XG4gICAgICAgIHRoaXMuZHluYW1pY1RhYnMucHVzaChwYW5lUmVmKTtcbiAgICAgICAgY29uc3QgaXNMYXN0UGFuZSA9ICB0aGlzLmR5bmFtaWNUYWJzLmxlbmd0aCA9PT0gdGhpcy5keW5hbWljUGFuZUluZGV4O1xuICAgICAgICBpZiAoaXNMYXN0UGFuZSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNUYWJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3UGFuZVJlZiA9IGZpbmQodGhpcy5keW5hbWljVGFicywgcGFuZSA9PiBwYW5lLmR5bmFtaWNQYW5lSW5kZXggPT09IGkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzUGFuZUFscmVhZHlFeGlzdCA9IGZpbmQodGhpcy5wYW5lcy50b0FycmF5KCksIG5ld1BhbmVSZWYpO1xuICAgICAgICAgICAgICAgIGlmICghaXNQYW5lQWxyZWFkeUV4aXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFuZXMucmVzZXQoWy4uLnRoaXMucGFuZXMudG9BcnJheSgpLCBuZXdQYW5lUmVmXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdQYW5lUmVmLmFjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UGFuZVJlZi5zZWxlY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDIwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHRvIGFkZCB0aGUgdGFicGFuZSBkeW5hbWljYWxseVxuICAgICAqIEBwYXJhbSB0YWJwYW5lcyAtIGxpc3Qgb2YgdGFicGFuZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkUGFuZSh0YWJwYW5lcykge1xuICAgICAgICBpZiAoIWlzQXJyYXkodGFicGFuZXMpKSB7XG4gICAgICAgICAgICB0YWJwYW5lcyA9IFt0YWJwYW5lc107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFuZU5hbWVzTGlzdCA9IFtdO1xuICAgICAgICBmb3JFYWNoKHRhYnBhbmVzLCAocGFuZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzUGFuZUFscmVhZHlDcmVhdGVkID0gZmluZCh0aGlzLnBhbmVzLnRvQXJyYXkoKSwge25hbWU6IHBhbmUubmFtZX0pO1xuICAgICAgICAgICAgY29uc3QgaXNQYW5lTmFtZUV4aXN0ID0gaW5kZXhPZihwYW5lTmFtZXNMaXN0LCBwYW5lLm5hbWUpO1xuICAgICAgICAgICAgLy8gSWYgdXNlciB0cmllcyB0byBhZGQgdGFicGFuZSB3aXRoIHRoZSBzYW1lIG5hbWUgd2hpY2ggaXMgYWxyZWFkeSBleGlzdHMgdGhlbiBkbyBub3QgY3JlYXRlIHRoZSBwYW5lXG4gICAgICAgICAgICBpZiAoaXNQYW5lQWxyZWFkeUNyZWF0ZWQgfHwgaXNQYW5lTmFtZUV4aXN0ID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgVGhlIHRhYiBwYW5lIHdpdGggbmFtZSAke3BhbmUubmFtZX0gYWxyZWFkeSBleGlzdHNgKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBwYXJhbU1hcmt1cCA9ICcnO1xuICAgICAgICAgICAgbGV0IHByb3BzVG1wbCA9ICcnO1xuICAgICAgICAgICAgdGhpcy5keW5hbWljUGFuZUluZGV4Kys7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gcGFuZS5uYW1lID8gcGFuZS5uYW1lIDogYHRhYnBhbmUke3RoaXMucGFuZXMudG9BcnJheSgpLmxlbmd0aCArIChpbmRleCArIDEpfWA7XG4gICAgICAgICAgICBwYW5lTmFtZXNMaXN0LnB1c2gobmFtZSk7XG4gICAgICAgICAgICBjb25zdCBwYXJ0aWFsUGFyYW1zID0gZ2V0KHBhbmUsICdwYXJhbXMnKTtcblxuICAgICAgICAgICAgZm9yRWFjaChwYW5lLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChrZXkgIT09ICdwYXJhbXMnKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzVG1wbCA9IGAke3Byb3BzVG1wbH0gJHtrZXl9PVwiJHt2YWx1ZX1cImA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGZvckVhY2gocGFydGlhbFBhcmFtcywgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBwYXJhbU1hcmt1cCA9IGAke3BhcmFtTWFya3VwfSA8d20tcGFyYW0gbmFtZT1cIiR7a2V5fVwiIHZhbHVlPVwiJHt2YWx1ZX1cIj48L3dtLXBhcmFtPmA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG1hcmt1cCA9IGA8d20tdGFicGFuZSBkeW5hbWljUGFuZUluZGV4PVwiJHt0aGlzLmR5bmFtaWNQYW5lSW5kZXggLSAxfVwiIGlzZHluYW1pYz1cInRydWVcIiBuYW1lPVwiJHtuYW1lfVwiICR7cHJvcHNUbXBsfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3BhcmFtTWFya3VwfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC93bS10YWJwYW5lPmA7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fZHluYW1pY0NvbnRleHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9keW5hbWljQ29udGV4dCA9IE9iamVjdC5jcmVhdGUodGhpcy52aWV3UGFyZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9keW5hbWljQ29udGV4dFt0aGlzLmdldEF0dHIoJ3dtVGFiJyldID0gdGhpcztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBTdG9yZSBjb21wb25lbnQgcmVmZXJlbmNlIGZvciBjbGVhbnVwXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRQcm92aWRlci5hZGRDb21wb25lbnQodGhpcy5nZXROYXRpdmVFbGVtZW50KCkucXVlcnlTZWxlY3RvcignLnRhYi1jb250ZW50JyksIG1hcmt1cCwgdGhpcy5fZHluYW1pY0NvbnRleHQsIHtpbmo6IHRoaXMuaW5qfSlcbiAgICAgICAgICAgICAgICAudGhlbihjb21wb25lbnRSZWYgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRSZWZzLnB1c2goY29tcG9uZW50UmVmKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGFuZU5hbWVzTGlzdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB0byByZW1vdmUgdGhlIHRhYnBhbmVcbiAgICAgKiBAcGFyYW0gcGFuZUluZGV4IC0gaW5kZXggb2YgdGhlIHBhbmVcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVtb3ZlUGFuZShwYW5lTmFtZSkge1xuICAgICAgICBjb25zdCBwYW5lUmVmID0gdGhpcy5nZXRQYW5lUmVmQnlOYW1lKHBhbmVOYW1lKTtcbiAgICAgICAgaWYgKHBhbmVSZWYpIHtcbiAgICAgICAgICAgIHBhbmVSZWYucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUYWJQYW5lIGNoaWxkcmVuIGNvbXBvbmVudHMgaW52b2tlIHRoaXMgbWV0aG9kIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIHBhcmVudFxuICAgICAqIGlmIHRoZSBldnQgYXJndW1lbnQgaXMgZGVmaW5lZCBvbi1jaGFuZ2UgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkLlxuICAgICAqL1xuICAgIHB1YmxpYyBub3RpZnlDaGFuZ2UocGFuZVJlZjogVGFiUGFuZUNvbXBvbmVudCwgZXZ0OiBFdmVudCwgaXNLZXlCb2FyZEV2ZW50OiBib29sZWFuKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1NlbGVjdGFibGVUYWIocGFuZVJlZikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBoZWFkZXJFbGVtZW50O1xuICAgICAgICAvLyBpbnZva2UgZGVzZWxlY3QgZXZlbnQgY2FsbGJhY2sgb24gdGhlIHByZXNldCBhY3RpdmUgdGFiXG4gICAgICAgIGlmICghaXNFbXB0eSh0aGlzLmFjdGl2ZVRhYikpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVGFiLmRlc2VsZWN0KCk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIHRoaXMuYWN0aXZlVGFiID0gcGFuZVJlZi5nZXRXaWRnZXQoKTtcbiAgICAgICAgY29uc3QgbmV3UGFuZUluZGV4ID0gdGhpcy5nZXRQYW5lSW5kZXhCeVJlZihwYW5lUmVmKTtcbiAgICAgICAgY29uc3QgbW9kZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5jb21wdXRlTW9kZSh0aGlzLnN0YXRlaGFuZGxlcik7XG4gICAgICAgIGlmICghdGhpcy5pc1BhZ2VMb2FkQ2FsbCAmJiBtb2RlICYmIG1vZGUudG9Mb3dlckNhc2UoKSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlUGVyc2lzdGVuY2Uuc2V0V2lkZ2V0U3RhdGUodGhpcywgdGhpcy5hY3RpdmVUYWIubmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRwYW5laW5kZXggPSB0aGlzLmdldFBhbmVJbmRleEJ5UmVmKHBhbmVSZWYpO1xuICAgICAgICAgICAgdGhpcy5pc1BhZ2VMb2FkQ2FsbCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaW52b2tlIHNlbGVjdCBjYWxsYmFjayBvbiB0aGUgc2VsZWN0ZWQgdGFiXG4gICAgICAgIHBhbmVSZWYuaW52b2tlT25TZWxlY3RDYWxsYmFjayhldnQpO1xuXG4gICAgICAgIC8vIGludm9rZSBjaGFuZ2UgY2FsbGJhY2sgaWYgdGhlIGV2dCBpcyBwcmVzZW50LCBzZWxlY3QgYSB0YWIgcHJvZ3JhbW1hdGljYWxseSB3aWxsIG5vdCBoYXZlIHRoZSBldmVudFxuICAgICAgICBpZiAoZXZ0KSB7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICAkZXZlbnQ6IGV2dCxcbiAgICAgICAgICAgICAgICBuZXdQYW5lSW5kZXg6IG5ld1BhbmVJbmRleCxcbiAgICAgICAgICAgICAgICBvbGRQYW5lSW5kZXg6IHRoaXMuX29sZFBhbmVJbmRleCB8fCAwXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9vbGRQYW5lSW5kZXggPSBuZXdQYW5lSW5kZXg7XG5cbiAgICAgICAgaWYgKGV2dCkge1xuICAgICAgICAgICAgaGVhZGVyRWxlbWVudCA9ICQoZXZ0LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xvc2VzdCgnbGkudGFiLWhlYWRlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZXZ0IHx8ICFoZWFkZXJFbGVtZW50IHx8ICFoZWFkZXJFbGVtZW50Lmxlbmd0aCkge1xuICAgICAgICAgICAgaGVhZGVyRWxlbWVudCA9IHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGBsaVtkYXRhLXBhbmVpZD0ke3BhbmVSZWYud2lkZ2V0SWR9XWApO1xuICAgICAgICAgICAgY29uc3QgaW5zaWRlVGFicyA9ICEhJChoZWFkZXJFbGVtZW50KS5jbG9zZXN0KCcuYXBwLXRhYnMnKVxuICAgICAgICAgICAgICAgIC5wYXJlbnQoKS5jbG9zZXN0KCcuYXBwLXRhYnMnKS5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoIWluc2lkZVRhYnMgJiYgaXNLZXlCb2FyZEV2ZW50KSB7XG4gICAgICAgICAgICAgICAgJChoZWFkZXJFbGVtZW50KS5jaGlsZHJlbigpLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hbmltYXRlSW4oaGVhZGVyRWxlbWVudCk7XG5cbiAgICAgICAgLy8gdGhpcy5zZXRUYWJzTGVmdFBvc2l0aW9uKHRoaXMuZ2V0UGFuZUluZGV4QnlSZWYodGhpcy5hY3RpdmVUYWIpLCB0aGlzLnBhbmVzLmxlbmd0aCk7XG4gICAgICAgIGlmICh0aGlzLmNhblNsaWRlKCkpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy50YWJzQW5pbWF0b3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYnNBbmltYXRvciA9IG5ldyBUYWJzQW5pbWF0b3IodGhpcyk7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJzQW5pbWF0b3Iuc2V0R2VzdHVyZXNFbmFibGVkKHRoaXMuY2FuU2xpZGUoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRhYnNBbmltYXRvci50cmFuc2l0aW9uVGFiSW50b1ZpZXcoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnb1RvVGFiKHRhYkluZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLmlzVmFsaWRQYW5lSW5kZXgodGFiSW5kZXggLSAxKSkge1xuICAgICAgICAgICAgY29uc3QgdGFiID0gdGhpcy5nZXRQYW5lUmVmQnlJbmRleCh0YWJJbmRleCAtIDEpO1xuICAgICAgICAgICAgdGFiLnNlbGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQYW5lSW5kZXhCeVJlZihwYW5lUmVmOiBUYWJQYW5lQ29tcG9uZW50KTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFuZXMudG9BcnJheSgpLmluZGV4T2YocGFuZVJlZik7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyB0aGUgYWN0aXZlIHRhYiBpbmRleCBmcm9tIHRhYnMuXG4gICAgcHVibGljIGdldEFjdGl2ZVRhYkluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBmaW5kSW5kZXgodGhpcy5wYW5lcy50b0FycmF5KCksIHtpc0FjdGl2ZTogdHJ1ZX0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNWYWxpZFBhbmVJbmRleChpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHRoaXMucGFuZXMubGVuZ3RoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBhbmVSZWZCeUluZGV4KGluZGV4OiBudW1iZXIpOiBUYWJQYW5lQ29tcG9uZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFuZXMudG9BcnJheSgpW2luZGV4XTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBhbmVSZWZCeU5hbWUobmFtZTogc3RyaW5nKTogVGFiUGFuZUNvbXBvbmVudCB7XG4gICAgICAgIHJldHVybiBmaW5kKHRoaXMucGFuZXMudG9BcnJheSgpLCB7bmFtZTogbmFtZX0pO1xuICAgIH1cblxuICAgIC8vIHJldHVybnMgZmFsc2UgaWYgdGhlIHBhbmUgaXMgaGlkZGVuIG9yIGRpc2FibGVkXG4gICAgcHJpdmF0ZSBpc1NlbGVjdGFibGVUYWIocGFuZVJlZjogVGFiUGFuZUNvbXBvbmVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcGFuZVJlZi5zaG93ICYmICFwYW5lUmVmLmRpc2FibGVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FuU2xpZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zaXRpb24gPT09ICdzbGlkZScgJiYgIXRoaXMudmVydGljYWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTZWxlY3RhYmxlVGFiQWZ0ZXJJbmRleChpbmRleDogbnVtYmVyKTogVGFiUGFuZUNvbXBvbmVudCB7XG4gICAgICAgIGZvciAobGV0IGkgPSBpbmRleCArIDE7IGkgPCB0aGlzLnBhbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYW5lID0gdGhpcy5nZXRQYW5lUmVmQnlJbmRleChpKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU2VsZWN0YWJsZVRhYihwYW5lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbmRleCA9PT0gdGhpcy5wYW5lcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICBjb25zdCBwYW5lID0gdGhpcy5nZXRQYW5lUmVmQnlJbmRleCgwKTtcbiAgICAgICAgICAgICBpZiAodGhpcy5pc1NlbGVjdGFibGVUYWIocGFuZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFuZTtcbiAgICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGFibGVUYWJCZWZvcmVJbmRleChpbmRleDogbnVtYmVyKTogVGFiUGFuZUNvbXBvbmVudCB7XG4gICAgICAgIGZvciAobGV0IGkgPSBpbmRleCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBwYW5lID0gdGhpcy5nZXRQYW5lUmVmQnlJbmRleChpKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU2VsZWN0YWJsZVRhYihwYW5lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3QgcGFuZSA9IHRoaXMuZ2V0UGFuZVJlZkJ5SW5kZXgodGhpcy5wYW5lcy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU2VsZWN0YWJsZVRhYihwYW5lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2VsZWN0IG5leHQgdGFiIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSB0YWJcbiAgICBwdWJsaWMgbmV4dCgkZXZlbnQ/OiBFdmVudCwgaXNLZXlCb2FyZEV2ZW50PzogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBwYW5lID0gdGhpcy5nZXRTZWxlY3RhYmxlVGFiQWZ0ZXJJbmRleCh0aGlzLmdldEFjdGl2ZVRhYkluZGV4KCkpO1xuICAgICAgICBpZiAocGFuZSkge1xuICAgICAgICAgICAgcGFuZS5zZWxlY3QoJGV2ZW50LCBpc0tleUJvYXJkRXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2VsZWN0IHByZXYgdGFiIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSB0YWJcbiAgICBwdWJsaWMgcHJldigkZXZlbnQ/OiBFdmVudCwgaXNLZXlCb2FyZEV2ZW50PzogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBwYW5lID0gdGhpcy5nZXRTZWxlY3RhYmxlVGFiQmVmb3JlSW5kZXgodGhpcy5nZXRBY3RpdmVUYWJJbmRleCgpKTtcbiAgICAgICAgaWYgKHBhbmUpIHtcbiAgICAgICAgICAgIHBhbmUuc2VsZWN0KCRldmVudCwgaXNLZXlCb2FyZEV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHRoaXMgbWV0aG9kIHdpbGwgYmUgaW52b2tlZCBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBjb21wb25lbnQgYW5kIG9uIGRlZmF1bHRwYW5laW5kZXggcHJvcGVydHkgY2hhbmdlLFxuICAgICAqIGlmIHRoZSBwcm92aWRlZCBkZWZhdWx0cGFuZWluZGV4IGlzIG5vdCB2YWxpZCwgZmluZCB0aGUgZmlyc3QgcGFuZSBpbmRleCB3aGljaCBjYW4gYmUgc2hvd24gYW5kIHNlbGVjdCBpdFxuICAgICAqL1xuICAgIHByaXZhdGUgc2VsZWN0RGVmYXVsdFBhbmVCeUluZGV4KGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWRQYW5lSW5kZXgoaW5kZXgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcGFuZVJlZiA9IHRoaXMuZ2V0UGFuZVJlZkJ5SW5kZXgoaW5kZXgpO1xuICAgICAgICBpZiAoIXRoaXMuaXNTZWxlY3RhYmxlVGFiKHBhbmVSZWYpKSB7XG4gICAgICAgICAgICBwYW5lUmVmID0gdGhpcy5nZXRTZWxlY3RhYmxlVGFiQWZ0ZXJJbmRleCgwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFuZVJlZikge1xuICAgICAgICAgICAgcGFuZVJlZi5zZWxlY3QoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHVwZGF0ZSB0aGUgcG9zdGlvbiBvZiB0YWIgaGVhZGVyXG4gICAgcHJpdmF0ZSBzZXRUYWJzUG9zaXRpb24oKSB7XG4gICAgICAgIGNvbnN0IHVsID0gdGhpcy5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdO1xuXG4gICAgICAgIHRoaXMudmVydGljYWwgPSAodGhpcy50YWJzcG9zaXRpb24gPT09ICdsZWZ0JyB8fCB0aGlzLnRhYnNwb3NpdGlvbiA9PT0gJ3JpZ2h0Jyk7XG5cbiAgICAgICAgcmVtb3ZlQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCAnaW52ZXJ0ZWQnKTtcbiAgICAgICAgaWYgKHRoaXMudGFic3Bvc2l0aW9uID09PSAnYm90dG9tJyB8fCB0aGlzLnRhYnNwb3NpdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgYXBwZW5kTm9kZSh1bCBhcyBIVE1MRWxlbWVudCwgdGhpcy5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgIGFkZENsYXNzKHRoaXMubmF0aXZlRWxlbWVudCwgJ2ludmVydGVkJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRGF0YUNoYW5nZShuZXdWYWwpIHtcbiAgICAgICAgdGhpcy5maWVsZERlZnMgPSBjcmVhdGVBcnJheUZyb20obmV3VmFsKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNlbGVjdERlZmF1bHRQYW5lQnlJbmRleCh0aGlzLmRlZmF1bHRwYW5laW5kZXggfHwgMCkpO1xuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52OiBhbnksIG92KSB7XG5cbiAgICAgICAgaWYgKGtleSA9PT0gJ2RlZmF1bHRwYW5laW5kZXgnKSB7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRwYW5laW5kZXggPSBudjtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdkYXRhc2V0Jykge1xuICAgICAgICAgICAgdGhpcy5vbkRhdGFDaGFuZ2UobnYpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3N0YXRlaGFuZGxlcicpIHtcbiAgICAgICAgICAgIHRoaXMuaXNQYWdlTG9hZENhbGwgPSB0cnVlO1xuICAgICAgICAgICAgY29uc3Qgd2lkZ2V0U3RhdGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcyk7XG4gICAgICAgICAgICBpZiAobnYgIT09ICdub25lJyAmJiB3aWRnZXRTdGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhbmVUb1NlbGVjdDogYW55ID0gdGhpcy5wYW5lcy5maWx0ZXIoZnVuY3Rpb24ocGFuZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2lkZ2V0U3RhdGUgPT09IHBhbmUubmFtZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoIXBhbmVUb1NlbGVjdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdUYWIgcGFuZSBuYW1lICcgKyB3aWRnZXRTdGF0ZSArICcgaW4gU3RhdGUgaXMgaW5jb3JyZWN0LiBGYWxsaW5nIGJhY2sgdG8gdGhlIGRlZmF1bHQgcGFuZScpO1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2VsZWN0RGVmYXVsdFBhbmVCeUluZGV4KHRoaXMuZGVmYXVsdHBhbmVpbmRleCB8fCAwKSwgMjApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRQYW5lSW5kZXhCeVJlZihwYW5lVG9TZWxlY3RbMF0pO1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2VsZWN0RGVmYXVsdFBhbmVCeUluZGV4KGluZGV4KSwgMjApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNlbGVjdERlZmF1bHRQYW5lQnlJbmRleCh0aGlzLmRlZmF1bHRwYW5laW5kZXggfHwgMCksIDIwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdhdXRvdGFiYWN0aXZhdGlvbicpe1xuICAgICAgICAgICAgdGhpcy5hdXRvQWN0aXZhdGlvbiA9IG52O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWdpc3RlclRhYnNTY3JvbGwoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgJHVsID0gdGhpcy4kZWxlbWVudC5maW5kKCc+IHVsJyk7XG4gICAgICAgICAgICBsZXQgJGxpUG9zaXRpb247XG5cbiAgICAgICAgICAgIGNvbnN0ICAkbGkgPSAkdWwuY2hpbGRyZW4oKTtcbiAgICAgICAgICAgICRsaVBvc2l0aW9uID0gJGxpLmxhc3QoKS5wb3NpdGlvbigpO1xuICAgICAgICAgICAgaWYgKCRsaVBvc2l0aW9uICYmICgkbGlQb3NpdGlvbi5sZWZ0ID4gJHVsLndpZHRoKCkpKSB7XG4gICAgICAgICAgICAgICAgJHVsLm9uKCdtb3VzZXdoZWVsJywgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGVmdCA9ICR1bFswXS5zY3JvbGxMZWZ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgX2RlbHRhID0gLTEgKiBlLm9yaWdpbmFsRXZlbnQud2hlZWxEZWx0YTtcbiAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAkdWwuYW5pbWF0ZSh7c2Nyb2xsTGVmdDogbGVmdCArIF9kZWx0YX0sIHsnZHVyYXRpb24nOiAxMH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgb25rZXlkb3duKGV2ZW50KSB7XG4gICAgICAgIGxldCBuZXdQYW5lO1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICAgICAgICAgIG5ld1BhbmUgPSB0aGlzLmF1dG9BY3RpdmF0aW9uID8gKHRoaXMucHJldihudWxsLCB0cnVlKSwgbnVsbCkgOiB0aGlzLmdldFNlbGVjdGFibGVUYWJCZWZvcmVJbmRleCh0aGlzLmdldFNlbGVjdGVkUGFuZUluZGV4KCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgICAgICAgICAgbmV3UGFuZSA9IHRoaXMuYXV0b0FjdGl2YXRpb24gPyAodGhpcy5uZXh0KG51bGwsIHRydWUpLCBudWxsKSA6IHRoaXMuZ2V0U2VsZWN0YWJsZVRhYkFmdGVySW5kZXgodGhpcy5nZXRTZWxlY3RlZFBhbmVJbmRleCgpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnRW50ZXInOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFuZSA9IHRoaXMuZ2V0U2VsZWN0YWJsZVRhYkFmdGVySW5kZXgodGhpcy5nZXRTZWxlY3RlZFBhbmVJbmRleCgpLTEpO1xuICAgICAgICAgICAgICAgIGlmIChwYW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudGVyRXZlbnQgPSBuZXcgS2V5Ym9hcmRFdmVudCgna2V5ZG93bicsIHtrZXk6ICdFbnRlcicsIGNvZGU6ICdFbnRlcicsIGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWV9KTtcbiAgICAgICAgICAgICAgICAgICAgcGFuZS5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoZW50ZXJFdmVudCk7XG4gICAgICAgICAgICAgICAgICAgIHBhbmUuc2VsZWN0KGVudGVyRXZlbnQsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmV3UGFuZSkge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2xpLnNlbGVjdCcpPy5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3QnKTtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGBsaVtkYXRhLXBhbmVpZD1cIiR7bmV3UGFuZS53aWRnZXRJZH1cIl1gKT8uY2xhc3NMaXN0LmFkZCgnc2VsZWN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMucHJvbWlzZVJlc29sdmVyRm4oKTtcbiAgICAgICAgc3VwZXIubmdBZnRlckNvbnRlbnRJbml0KCk7XG4gICAgICAgIHRoaXMuc2V0VGFic1Bvc2l0aW9uKCk7XG4gICAgICAgIHRoaXMucGFuZXNDaGFuZ2VzU3Vic2NyaXB0aW9uID0gdGhpcy5wYW5lcy5jaGFuZ2VzLnN1YnNjcmliZSggc2xpZGVzID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhbmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0RGVmYXVsdFBhbmVCeUluZGV4KHRoaXMuZGVmYXVsdHBhbmVpbmRleCB8fCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclRhYnNTY3JvbGwoKTtcbiAgICB9XG5cbiAgICBnZXRTZWxlY3RlZFBhbmVJbmRleCgpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnBhbmVzLnRvQXJyYXkoKS5maW5kSW5kZXgocGFuZSA9PlxuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYGxpW2RhdGEtcGFuZWlkPVwiJHtwYW5lLndpZGdldElkfVwiXWApPy5jbGFzc0xpc3QuY29udGFpbnMoXCJzZWxlY3RcIikpO1xuICAgICAgICByZXR1cm4gaW5kZXggPj0gMCA/IGluZGV4IDogdGhpcy5nZXRBY3RpdmVUYWJJbmRleCgpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IFVuc3Vic2NyaWJlIGZyb20gcGFuZXMgY2hhbmdlc1xuICAgICAgICBpZiAodGhpcy5wYW5lc0NoYW5nZXNTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMucGFuZXNDaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLnBhbmVzQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IERlc3Ryb3kgYWxsIGR5bmFtaWNhbGx5IGNyZWF0ZWQgY29tcG9uZW50IGluc3RhbmNlc1xuICAgICAgICBpZiAodGhpcy5keW5hbWljQ29tcG9uZW50UmVmcyAmJiB0aGlzLmR5bmFtaWNDb21wb25lbnRSZWZzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5keW5hbWljQ29tcG9uZW50UmVmcy5mb3JFYWNoKGNvbXBvbmVudFJlZiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBvbmVudFJlZiAmJiBjb21wb25lbnRSZWYuZGVzdHJveSkge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5keW5hbWljQ29tcG9uZW50UmVmcyA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDbGVhciBkeW5hbWljIGNvbnRleHRcbiAgICAgICAgaWYgKHRoaXMuX2R5bmFtaWNDb250ZXh0KSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLl9keW5hbWljQ29udGV4dCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9keW5hbWljQ29udGV4dFtrZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9keW5hbWljQ29udGV4dCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IENsZWFyIGR5bmFtaWMgdGFicyBhcnJheVxuICAgICAgICBpZiAodGhpcy5keW5hbWljVGFicykge1xuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFicyA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBEZXN0cm95IHRhYnMgYW5pbWF0b3JcbiAgICAgICAgaWYgKHRoaXMudGFic0FuaW1hdG9yKSB7XG4gICAgICAgICAgICAvLyBUYWJzQW5pbWF0b3IgbWF5IGhhdmUgaW50ZXJuYWwgc3Vic2NyaXB0aW9ucyBvciB0aW1lcnNcbiAgICAgICAgICAgIHRoaXMudGFic0FuaW1hdG9yID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ2xlYXIgZmllbGQgZGVmaW5pdGlvbnMgYW5kIHJlZmVyZW5jZXNcbiAgICAgICAgdGhpcy5maWVsZERlZnMgPSBudWxsO1xuICAgICAgICB0aGlzLmFjdGl2ZVRhYiA9IG51bGw7XG5cbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG59XG4iLCI8dWwgY2xhc3M9XCJuYXYgbmF2LXRhYnNcIiBbbmdDbGFzc109XCJ7J25hdi1zdGFja2VkJzogdmVydGljYWwsICduYXYtanVzdGlmaWVkJzoganVzdGlmaWVkfVwiIHJvbGU9XCJ0YWJsaXN0XCI+XG4gIEBmb3IgKHBhbmUgb2YgcGFuZXM7IHRyYWNrIHBhbmU7IGxldCBpID0gJGluZGV4KSB7XG4gICAgPGxpIGNsYXNzPVwidGFiLWhlYWRlclwiIFthdHRyLmRhdGEtcGFuZWlkXT1cInBhbmUud2lkZ2V0SWRcIiBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IHBhbmUuaXNBY3RpdmUsICdkaXNhYmxlZCc6IHBhbmUuZGlzYWJsZWR9XCJcbiAgICAgIFtoaWRkZW5dPVwiIXBhbmUuc2hvd1wiIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgIDxhIFthdHRyLmFyaWEtbGFiZWxdPVwicGFuZS5iYWRnZXZhbHVlID8gcGFuZS50aXRsZSArICcgJyArIHBhbmUuYmFkZ2V2YWx1ZSA6IHBhbmUudGl0bGVcIlxuICAgICAgICBbYXR0ci5pY29uLXBvc2l0aW9uXT1cImljb25wb3NpdGlvblwiXG4gICAgICAgIFthdHRyLnRpdGxlXT1cInBhbmUudGl0bGVcIlxuICAgICAgICBbdGFiaW5kZXhdPVwicGFuZS5pc0FjdGl2ZSA/ICcwJyA6ICctMSdcIlxuICAgICAgICBjbGFzcz1cInRhYi1oZWFkaW5nXCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIlxuICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cInBhbmUuaXNBY3RpdmVcIiByb2xlPVwidGFiXCIgKGNsaWNrKT1cInBhbmUuc2VsZWN0KCRldmVudCk7IHBhbmUudGFicGFuZUhlYWRlckNsaWNrKCRldmVudCwgaSk7XCIgKGtleWRvd24pPVwib25rZXlkb3duKCRldmVudClcIj5cbiAgICAgICAgQGlmIChwYW5lLnBhbmVpY29uKSB7XG4gICAgICAgICAgPGkgW25nQ2xhc3NdPVwiWydhcHAtaWNvbicsIHBhbmUucGFuZWljb25dXCI+PC9pPlxuICAgICAgICB9XG4gICAgICAgIDxzcGFuIFt0ZXh0Q29udGVudF09XCJwYW5lLnRpdGxlXCI+PC9zcGFuPlxuICAgICAgICBAaWYgKHBhbmUuYmFkZ2V2YWx1ZSkge1xuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwgbGFiZWwte3twYW5lLmJhZGdldHlwZX19XCIgW3RleHRDb250ZW50XT1cInBhbmUuYmFkZ2V2YWx1ZVwiPjwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgPC9hPlxuICAgIDwvbGk+XG4gIH1cbjwvdWw+XG5AaWYgKHR5cGUgIT09ICdkeW5hbWljJykge1xuICA8ZGl2IGNsYXNzPVwidGFiLWNvbnRlbnRcIiBbbmdDbGFzc109XCJ7J3RhYi1zdGFja2VkJzogdmVydGljYWwsICd0YWItanVzdGlmaWVkJzoganVzdGlmaWVkfVwiPlxuICAgIDxuZy1jb250ZW50IG5nUHJvamVjdEFzPVwiZGl2W3dtVGFiUGFuZV1cIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxufVxuQGlmICh0eXBlID09PSAnZHluYW1pYycpIHtcbiAgPGRpdiBjbGFzcz1cInRhYi1jb250ZW50XCIgW25nQ2xhc3NdPVwieyd0YWItc3RhY2tlZCc6IHZlcnRpY2FsLCAndGFiLWp1c3RpZmllZCc6IGp1c3RpZmllZH1cIj5cbiAgICBAaWYgKGZpZWxkRGVmcyAmJiAhZmllbGREZWZzLmxlbmd0aCkge1xuICAgICAgPGRpdj57e25vZGF0YW1lc3NhZ2V9fTwvZGl2PlxuICAgIH1cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJkaXZbd21SZXBlYXRUZW1wbGF0ZV1cIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxufVxuIl19
|
|
@@ -248,6 +248,15 @@ class TabPaneComponent extends StylableComponent {
|
|
|
248
248
|
this.tabsRef.registerDynamicTab(this);
|
|
249
249
|
}
|
|
250
250
|
}
|
|
251
|
+
ngOnDestroy() {
|
|
252
|
+
// MEMORY LEAK FIX: Clear ContentChildren QueryList reference
|
|
253
|
+
if (this.reDrawableComponents) {
|
|
254
|
+
this.reDrawableComponents = null;
|
|
255
|
+
}
|
|
256
|
+
// MEMORY LEAK FIX: Clear lazy load function reference
|
|
257
|
+
this.$lazyLoad = null;
|
|
258
|
+
super.ngOnDestroy();
|
|
259
|
+
}
|
|
251
260
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TabPaneComponent, deps: [{ token: i0.Injector }, { token: 'heading', attribute: true }, { token: 'title', attribute: true }, { token: 'EXPLICIT_CONTEXT', optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
252
261
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TabPaneComponent, isStandalone: true, selector: "div[wmTabPane]", host: { properties: { "class.active": "this.isActive", "class.disabled": "this.disabled" } }, providers: [
|
|
253
262
|
provideAsWidgetRef(TabPaneComponent)
|
|
@@ -291,6 +300,7 @@ class TabsComponent extends StylableComponent {
|
|
|
291
300
|
// handle to the promise resolver
|
|
292
301
|
let resolveFn = noop;
|
|
293
302
|
super(inj, WIDGET_CONFIG, explicitContext, new Promise(res => resolveFn = res));
|
|
303
|
+
this.dynamicComponentRefs = [];
|
|
294
304
|
this.iconposition = '';
|
|
295
305
|
this.transition = _transition;
|
|
296
306
|
this.tabsposition = _tabsPosition;
|
|
@@ -377,7 +387,13 @@ class TabsComponent extends StylableComponent {
|
|
|
377
387
|
this._dynamicContext = Object.create(this.viewParent);
|
|
378
388
|
this._dynamicContext[this.getAttr('wmTab')] = this;
|
|
379
389
|
}
|
|
380
|
-
|
|
390
|
+
// MEMORY LEAK FIX: Store component reference for cleanup
|
|
391
|
+
this.dynamicComponentProvider.addComponent(this.getNativeElement().querySelector('.tab-content'), markup, this._dynamicContext, { inj: this.inj })
|
|
392
|
+
.then(componentRef => {
|
|
393
|
+
if (componentRef) {
|
|
394
|
+
this.dynamicComponentRefs.push(componentRef);
|
|
395
|
+
}
|
|
396
|
+
});
|
|
381
397
|
});
|
|
382
398
|
return paneNamesList;
|
|
383
399
|
}
|
|
@@ -631,7 +647,7 @@ class TabsComponent extends StylableComponent {
|
|
|
631
647
|
this.promiseResolverFn();
|
|
632
648
|
super.ngAfterContentInit();
|
|
633
649
|
this.setTabsPosition();
|
|
634
|
-
this.panes.changes.subscribe(slides => {
|
|
650
|
+
this.panesChangesSubscription = this.panes.changes.subscribe(slides => {
|
|
635
651
|
if (this.panes.length) {
|
|
636
652
|
this.selectDefaultPaneByIndex(this.defaultpaneindex || 0);
|
|
637
653
|
}
|
|
@@ -645,6 +661,42 @@ class TabsComponent extends StylableComponent {
|
|
|
645
661
|
const index = this.panes.toArray().findIndex(pane => this.nativeElement.querySelector(`li[data-paneid="${pane.widgetId}"]`)?.classList.contains("select"));
|
|
646
662
|
return index >= 0 ? index : this.getActiveTabIndex();
|
|
647
663
|
}
|
|
664
|
+
ngOnDestroy() {
|
|
665
|
+
// MEMORY LEAK FIX: Unsubscribe from panes changes
|
|
666
|
+
if (this.panesChangesSubscription) {
|
|
667
|
+
this.panesChangesSubscription.unsubscribe();
|
|
668
|
+
this.panesChangesSubscription = null;
|
|
669
|
+
}
|
|
670
|
+
// MEMORY LEAK FIX: Destroy all dynamically created component instances
|
|
671
|
+
if (this.dynamicComponentRefs && this.dynamicComponentRefs.length) {
|
|
672
|
+
this.dynamicComponentRefs.forEach(componentRef => {
|
|
673
|
+
if (componentRef && componentRef.destroy) {
|
|
674
|
+
componentRef.destroy();
|
|
675
|
+
}
|
|
676
|
+
});
|
|
677
|
+
this.dynamicComponentRefs = [];
|
|
678
|
+
}
|
|
679
|
+
// MEMORY LEAK FIX: Clear dynamic context
|
|
680
|
+
if (this._dynamicContext) {
|
|
681
|
+
Object.keys(this._dynamicContext).forEach(key => {
|
|
682
|
+
delete this._dynamicContext[key];
|
|
683
|
+
});
|
|
684
|
+
this._dynamicContext = null;
|
|
685
|
+
}
|
|
686
|
+
// MEMORY LEAK FIX: Clear dynamic tabs array
|
|
687
|
+
if (this.dynamicTabs) {
|
|
688
|
+
this.dynamicTabs = [];
|
|
689
|
+
}
|
|
690
|
+
// MEMORY LEAK FIX: Destroy tabs animator
|
|
691
|
+
if (this.tabsAnimator) {
|
|
692
|
+
// TabsAnimator may have internal subscriptions or timers
|
|
693
|
+
this.tabsAnimator = null;
|
|
694
|
+
}
|
|
695
|
+
// MEMORY LEAK FIX: Clear field definitions and references
|
|
696
|
+
this.fieldDefs = null;
|
|
697
|
+
this.activeTab = null;
|
|
698
|
+
super.ngOnDestroy();
|
|
699
|
+
}
|
|
648
700
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TabsComponent, deps: [{ token: i0.Injector }, { token: i1.DynamicComponentRefProvider }, { token: 'transition', attribute: true }, { token: 'tabsposition', attribute: true }, { token: i1.StatePersistence }, { token: 'EXPLICIT_CONTEXT', optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
649
701
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TabsComponent, isStandalone: true, selector: "div[wmTabs]", host: { properties: { "attr.icon-position": "this.iconposition" } }, providers: [
|
|
650
702
|
provideAsWidgetRef(TabsComponent)
|