@wavemaker/app-ng-runtime 11.14.1-rc.6310 → 11.14.2-rc.242
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 +31 -5
- package/components/basic/search/esm2022/scrollable.directive.mjs +13 -4
- package/components/basic/search/esm2022/search.component.mjs +20 -3
- package/components/basic/search/fesm2022/index.mjs +31 -5
- 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
|
@@ -149,6 +149,12 @@ export class LiveActionsDirective {
|
|
|
149
149
|
options.error = error;
|
|
150
150
|
this.performOperation(operation, options);
|
|
151
151
|
}
|
|
152
|
+
ngOnDestroy() {
|
|
153
|
+
// MEMORY LEAK FIX: Clear references
|
|
154
|
+
this.subscribedWidget = null;
|
|
155
|
+
this.app = null;
|
|
156
|
+
this.dialogService = null;
|
|
157
|
+
}
|
|
152
158
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LiveActionsDirective, deps: [{ token: ListComponent, self: true }, { token: i1.App }, { token: i1.AbstractDialogService }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
153
159
|
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: LiveActionsDirective, isStandalone: true, selector: "[wmLiveActions]", ngImport: i0 }); }
|
|
154
160
|
}
|
|
@@ -164,4 +170,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
164
170
|
type: Inject,
|
|
165
171
|
args: [ListComponent]
|
|
166
172
|
}] }, { type: i1.App }, { type: i1.AbstractDialogService }] });
|
|
167
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS1hY3Rpb25zLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL2Zvcm0vc3JjL2xpdmUtYWN0aW9ucy9saXZlLWFjdGlvbnMuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7O0FBTXpELE1BQU0sT0FBTyxvQkFBb0I7SUFFN0IsWUFDMkMsZ0JBQWdCLEVBQy9DLEdBQVEsRUFDUixhQUFvQztRQUZMLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBQTtRQUMvQyxRQUFHLEdBQUgsR0FBRyxDQUFLO1FBQ1Isa0JBQWEsR0FBYixhQUFhLENBQXVCO1FBRTVDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxnQkFBZ0IsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsZ0JBQWdCLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZELGdCQUFnQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU0sTUFBTTtRQUNULElB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V0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDbkQsTUFBTTtZQUNWLEtBQUssZUFBZSxDQUFDLElBQUk7Z0JBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUNwQyxNQUFNO1FBQ2QsQ0FBQztJQUNMLENBQUM7SUFFRCxzQ0FBc0M7SUFDL0IsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBUSxFQUFFLEtBQU07UUFDNUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDMUIsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFdEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5QyxDQUFDOytHQWpLUSxvQkFBb0Isa0JBR1QsYUFBYTttR0FIeEIsb0JBQW9COzs0RkFBcEIsb0JBQW9CO2tCQUpoQyxTQUFTO21CQUFDO29CQUNULFVBQVUsRUFBRSxJQUFJO29CQUNkLFFBQVEsRUFBRSxpQkFBaUI7aUJBQzlCOzswQkFJUSxJQUFJOzswQkFBSSxNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEluamVjdCwgU2VsZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdERpYWxvZ1NlcnZpY2UsIEFwcCwgRGF0YVNvdXJjZSwgdHJpZ2dlckZuIH0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgTGl2ZV9PcGVyYXRpb25zLCBwZXJmb3JtRGF0YU9wZXJhdGlvbiB9IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuaW1wb3J0IHsgTGlzdENvbXBvbmVudCB9IGZyb20gJ0B3bS9jb21wb25lbnRzL2RhdGEvbGlzdCc7XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnW3dtTGl2ZUFjdGlvbnNdJ1xufSlcbmV4cG9ydCBjbGFzcyBMaXZlQWN0aW9uc0RpcmVjdGl2ZSB7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQFNlbGYoKSBASW5qZWN0KExpc3RDb21wb25lbnQpIHByaXZhdGUgc3Vic2NyaWJlZFdpZGdldCxcbiAgICAgICAgcHJpdmF0ZSBhcHA6IEFwcCxcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBBYnN0cmFjdERpYWxvZ1NlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3Vic2NyaWJlZFdpZGdldC5hZGRSb3cgPSB0aGlzLmFkZFJvdy5iaW5kKHRoaXMpO1xuICAgICAgICBzdWJzY3JpYmVkV2lkZ2V0LnVwZGF0ZVJvdyA9IHRoaXMudXBkYXRlUm93LmJpbmQodGhpcyk7XG4gICAgICAgIHN1YnNjcmliZWRXaWRnZXQuZGVsZXRlUm93ID0gdGhpcy5kZWxldGVSb3cuYmluZCh0aGlzKTtcbiAgICAgICAgc3Vic2NyaWJlZFdpZGdldC5jYWxsID0gdGhpcy5jYWxsLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFJvdygpIHtcbiAgICAgICAgdGhpcy5hcHAubm90aWZ5KCd3bS1ldmVudCcsIHtldmVudE5hbWU6IExpdmVfT3BlcmF0aW9ucy5JTlNFUlQsIHdpZGdldE5hbWU6IHRoaXMuc3Vic2NyaWJlZFdpZGdldC5uYW1lLCByb3c6IHRoaXMuc3Vic2NyaWJlZFdpZGdldC5zZWxlY3RlZGl0ZW19KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlUm93KCkge1xuICAgICAgICB0aGlzLmFwcC5ub3RpZnkoJ3dtLWV2ZW50Jywge2V2ZW50TmFtZTogTGl2ZV9PcGVyYXRpb25zLlVQREFURSwgd2lkZ2V0TmFtZTogdGhpcy5zdWJzY3JpYmVkV2lkZ2V0Lm5hbWUsIHJvdzogdGhpcy5zdWJzY3JpYmVkV2lkZ2V0LnNlbGVjdGVkaXRlbX0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGVSb3coKSB7XG4gICAgICAgIHRoaXMuYXBwLm5vdGlmeSgnd20tZXZlbnQnLCB7ZXZlbnROYW1lOiBMaXZlX09wZXJhdGlvbnMuREVMRVRFLCB3aWRnZXROYW1lOiB0aGlzLnN1YnNjcmliZWRXaWRnZXQubmFtZSwgcm93OiB0aGlzLnN1YnNjcmliZWRXaWRnZXQuc2VsZWN0ZWRpdGVtfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdWNjZXNzSGFuZGxlcihvcHRpb25zLCByZXNwb25zZSkge1xuICAgICAgICB0cmlnZ2VyRm4ob3B0aW9ucy5zdWNjZXNzLCByZXNwb25zZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlcnJvckhhbmRsZXIob3B0aW9ucywgZXJyb3IpIHtcbiAgICAgICAgdGhpcy5hcHAubm90aWZ5QXBwKGVycm9yLCAnZXJyb3InLCAnRVJST1InKTtcbiAgICAgICAgdHJpZ2dlckZuKG9wdGlvbnMuZXJyb3IsIGVycm9yKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UmVjb3JkcyhvcHRpb25zLCBvcGVyYXRpb24pIHtcbiAgICAgICAgbGV0IGluZGV4O1xuICAgICAgICBsZXQgZGF0YU5hdmlnYXRvcjtcblxuICAgICAgICBpZiAodGhpcy5zdWJzY3JpYmVkV2lkZ2V0Lm5hdmlnYXRpb24gIT09ICdOb25lJyAmJiB0aGlzLnN1YnNjcmliZWRXaWRnZXQuZGF0YU5hdmlnYXRvcikge1xuICAgICAgICAgICAgZGF0YU5hdmlnYXRvciA9IHRoaXMuc3Vic2NyaWJlZFdpZGdldC5kYXRhTmF2aWdhdG9yO1xuXG4gICAgICAgICAgICAvLyBJZiBvcGVyYXRpb24gaXMgZGVsZXRlLCBkZWNyZWFzZSB0aGUgZGF0YSBzaXplIGFuZCBjaGVjayBpZiBuYXZpZ2F0aW9uIHRvIHByZXZpb3VzIHBhZ2UgaXMgcmVxdWlyZWRcbiAgICAgICAgICAgIGlmIChvcGVyYXRpb24gPT09IExpdmVfT3BlcmF0aW9ucy5ERUxFVEUpIHtcbiAgICAgICAgICAgICAgICBkYXRhTmF2aWdhdG9yLmRhdGFTaXplIC09IDE7XG4gICAgICAgICAgICAgICAgZGF0YU5hdmlnYXRvci5jYWxjdWxhdGVQYWdpbmdWYWx1ZXMoKTtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGRhdGFOYXZpZ2F0b3IucGFnZUNvdW50IDwgZGF0YU5hdmlnYXRvci5kbi5jdXJyZW50UGFnZSA/ICdwcmV2JyA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgb3BlcmF0aW9uIGlzIGluc2VydCwgZ28gdG8gbGFzdCBwYWdlLiBJZiB1cGRhdGUgb3BlcmF0aW9uLCBzdGF5IG9uIGN1cnJlbnQgcGFnZVxuICAgICAgICAgICAgICAgIGluZGV4ID0gb3BlcmF0aW9uID09PSBMaXZlX09wZXJhdGlvbnMuSU5TRVJUID8gJ2xhc3QnIDogJ2N1cnJlbnQnO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gJ2xhc3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFOYXZpZ2F0b3IuZGF0YVNpemUgKz0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGF0YU5hdmlnYXRvci5jYWxjdWxhdGVQYWdpbmdWYWx1ZXMoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGF0YU5hdmlnYXRvci5uYXZpZ2F0ZVBhZ2UoaW5kZXgsIG51bGwsIHRydWUsIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3NIYW5kbGVyKG9wdGlvbnMsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVkV2lkZ2V0LmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5MSVNUX1JFQ09SRFMsIHtcbiAgICAgICAgICAgICAgICAnc2tpcFRvZ2dsZVN0YXRlJzogdHJ1ZVxuICAgICAgICAgICAgfSkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzSGFuZGxlcihvcHRpb25zLCByZXNwb25zZSk7XG4gICAgICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyKG9wdGlvbnMsIGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcGVyZm9ybUNVRE9wZXJhdGlvbihyZXF1ZXN0RGF0YSwgb3BlcmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHBlcmZvcm1EYXRhT3BlcmF0aW9uKHRoaXMuc3Vic2NyaWJlZFdpZGdldC5kYXRhc291cmNlLCByZXF1ZXN0RGF0YSwge1xuICAgICAgICAgICAgb3BlcmF0aW9uVHlwZTogb3BlcmF0aW9uXG4gICAgICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIob3B0aW9ucywgcmVzcG9uc2UuZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnN1YnNjcmliZWRXaWRnZXQuZGF0YXNvdXJjZS5jYXRlZ29yeSA9PT0gJ3dtLkNydWRWYXJpYWJsZScgJiYgb3BlcmF0aW9uID09PSAnZGVsZXRlJykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlZFdpZGdldC5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uTElTVF9SRUNPUkRTLCB7XG4gICAgICAgICAgICAgICAgICAgICdza2lwVG9nZ2xlU3RhdGUnOiB0cnVlXG4gICAgICAgICAgICAgICAgfSkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VjY2Vzc0hhbmRsZXIob3B0aW9ucywgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyKG9wdGlvbnMsIGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UmVjb3JkcyhvcHRpb25zLCBvcGVyYXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gc2hvdyBkZWxldGUgc3VjY2VzcyB0b2FzdGVyXG4gICAgICAgICAgICBpZiAob3BlcmF0aW9uID09PSAnZGVsZXRlJykge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwLm5vdGlmeUFwcCh0aGlzLmFwcC5hcHBMb2NhbGUuTUVTU0FHRV9ERUxFVEVfUkVDT1JEX1NVQ0NFU1MsICdzdWNjZXNzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIob3B0aW9ucywgZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluc2VydFJlY29yZChyZXF1ZXN0RGF0YSwgb3BlcmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMucGVyZm9ybUNVRE9wZXJhdGlvbihyZXF1ZXN0RGF0YSwgb3BlcmF0aW9uLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVJlY29yZChyZXF1ZXN0RGF0YSwgb3BlcmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMucGVyZm9ybUNVRE9wZXJhdGlvbihyZXF1ZXN0RGF0YSwgb3BlcmF0aW9uLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlbGV0ZVJlY29yZChyZXF1ZXN0RGF0YSwgb3BlcmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIC8vIFNob3cgdGhlIGRlbGV0ZSBjb25maXJtYXRpb24gZGlhbG9nLiBPbiBPaywgZGVsZXRlIHRoZSByZWNvcmQuXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93QXBwQ29uZmlybURpYWxvZyh7XG4gICAgICAgICAgICB0aXRsZTogIHRoaXMuYXBwLmFwcExvY2FsZS5NRVNTQUdFX0RFTEVURV9SRUNPUkQgfHwgJ0RlbGV0ZSBSZWNvcmQnLFxuICAgICAgICAgICAgaWNvbmNsYXNzOiAnd2kgd2ktZGVsZXRlIGZhLWxnJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMuc3Vic2NyaWJlZFdpZGdldC5jb25maXJtZGVsZXRlIHx8ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXM/JyxcbiAgICAgICAgICAgIG9rdGV4dDogdGhpcy5zdWJzY3JpYmVkV2lkZ2V0LmRlbGV0ZW9rdGV4dCB8fCAnT2snLFxuICAgICAgICAgICAgY2FuY2VsdGV4dDogdGhpcy5zdWJzY3JpYmVkV2lkZ2V0LmRlbGV0ZWNhbmNlbHRleHQgfHwgJ0NhbmNlbCcsXG4gICAgICAgICAgICBvbk9rOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtQ1VET3BlcmF0aW9uKHJlcXVlc3REYXRhLCBvcGVyYXRpb24sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jbG9zZUFwcENvbmZpcm1EaWFsb2coKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkNhbmNlbDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyaWdnZXJGbihvcHRpb25zLmNhbmNlbERlbGV0ZUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2xvc2VBcHBDb25maXJtRGlhbG9nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGVyZm9ybU9wZXJhdGlvbihvcGVyYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdERhdGEgPSB7XG4gICAgICAgICAgICByb3c6IG9wdGlvbnMucm93LFxuICAgICAgICAgICAgcHJldkRhdGE6IHt9LFxuICAgICAgICAgICAgcm93RGF0YToge30sXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRydWUsXG4gICAgICAgICAgICBza2lwTm90aWZpY2F0aW9uOiB0cnVlXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gTGl2ZV9PcGVyYXRpb25zLlVQREFURSkge1xuICAgICAgICAgICAgcmVxdWVzdERhdGEucm93RGF0YSA9IG9wdGlvbnMucm93RGF0YTtcbiAgICAgICAgICAgIHJlcXVlc3REYXRhLnByZXZEYXRhID0gb3B0aW9ucy5wcmV2RGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIGRlY2lkZSByb3V0aW5lIGJhc2VkIG9uIENSVUQgb3BlcmF0aW9uIHRvIGJlIHBlcmZvcm1lZCAqL1xuICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvbikge1xuICAgICAgICAgICAgY2FzZSBMaXZlX09wZXJhdGlvbnMuSU5TRVJUOlxuICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0UmVjb3JkKHJlcXVlc3REYXRhLCBvcGVyYXRpb24sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBMaXZlX09wZXJhdGlvbnMuVVBEQVRFOlxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUmVjb3JkKHJlcXVlc3REYXRhLCBvcGVyYXRpb24sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBMaXZlX09wZXJhdGlvbnMuREVMRVRFOlxuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlUmVjb3JkKHJlcXVlc3REYXRhLCBvcGVyYXRpb24sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBMaXZlX09wZXJhdGlvbnMuUkVBRDpcbiAgICAgICAgICAgICAgICB0aGlzLmdldFJlY29yZHMob3B0aW9ucywgb3BlcmF0aW9uKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFQSSBleHBvc2VkIHRvIG1ha2UgQ1JVRCBvcGVyYXRpb25zXG4gICAgcHVibGljIGNhbGwob3BlcmF0aW9uLCBvcHRpb25zLCBzdWNjZXNzPywgZXJyb3I/KSB7XG4gICAgICAgIG9wdGlvbnMuc3VjY2VzcyA9IHN1Y2Nlc3M7XG4gICAgICAgIG9wdGlvbnMuZXJyb3IgPSBlcnJvcjtcblxuICAgICAgICB0aGlzLnBlcmZvcm1PcGVyYXRpb24ob3BlcmF0aW9uLCBvcHRpb25zKTtcbiAgICB9XG59XG4iXX0=
|
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS1hY3Rpb25zLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL2Zvcm0vc3JjL2xpdmUtYWN0aW9ucy9saXZlLWFjdGlvbnMuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFhLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7O0FBTXpELE1BQU0sT0FBTyxvQkFBb0I7SUFFN0IsWUFDMkMsZ0JBQWdCLEVBQy9DLEdBQVEsRUFDUixhQUFvQztRQUZMLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBQTtRQUMvQyxRQUFHLEdBQUgsR0FBRyxDQUFLO1FBQ1Isa0JBQWEsR0FBYixhQUFhLENBQXVCO1FBRTVDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxnQkFBZ0IsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsZ0JBQWdCLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZELGdCQUFnQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU0sTUFBTTtRQUNULElB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V0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDbkQsTUFBTTtZQUNWLEtBQUssZUFBZSxDQUFDLElBQUk7Z0JBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUNwQyxNQUFNO1FBQ2QsQ0FBQztJQUNMLENBQUM7SUFFRCxzQ0FBc0M7SUFDL0IsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBUSxFQUFFLEtBQU07UUFDNUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDMUIsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFdEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsV0FBVztRQUNQLG9DQUFvQztRQUNwQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQzlCLENBQUM7K0dBeEtRLG9CQUFvQixrQkFHVCxhQUFhO21HQUh4QixvQkFBb0I7OzRGQUFwQixvQkFBb0I7a0JBSmhDLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2QsUUFBUSxFQUFFLGlCQUFpQjtpQkFDOUI7OzBCQUlRLElBQUk7OzBCQUFJLE1BQU07MkJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5qZWN0LCBPbkRlc3Ryb3ksIFNlbGYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQWJzdHJhY3REaWFsb2dTZXJ2aWNlLCBBcHAsIERhdGFTb3VyY2UsIHRyaWdnZXJGbiB9IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7IExpdmVfT3BlcmF0aW9ucywgcGVyZm9ybURhdGFPcGVyYXRpb24gfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcbmltcG9ydCB7IExpc3RDb21wb25lbnQgfSBmcm9tICdAd20vY29tcG9uZW50cy9kYXRhL2xpc3QnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ1t3bUxpdmVBY3Rpb25zXSdcbn0pXG5leHBvcnQgY2xhc3MgTGl2ZUFjdGlvbnNEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBTZWxmKCkgQEluamVjdChMaXN0Q29tcG9uZW50KSBwcml2YXRlIHN1YnNjcmliZWRXaWRnZXQsXG4gICAgICAgIHByaXZhdGUgYXBwOiBBcHAsXG4gICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogQWJzdHJhY3REaWFsb2dTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1YnNjcmliZWRXaWRnZXQuYWRkUm93ID0gdGhpcy5hZGRSb3cuYmluZCh0aGlzKTtcbiAgICAgICAgc3Vic2NyaWJlZFdpZGdldC51cGRhdGVSb3cgPSB0aGlzLnVwZGF0ZVJvdy5iaW5kKHRoaXMpO1xuICAgICAgICBzdWJzY3JpYmVkV2lkZ2V0LmRlbGV0ZVJvdyA9IHRoaXMuZGVsZXRlUm93LmJpbmQodGhpcyk7XG4gICAgICAgIHN1YnNjcmliZWRXaWRnZXQuY2FsbCA9IHRoaXMuY2FsbC5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRSb3coKSB7XG4gICAgICAgIHRoaXMuYXBwLm5vdGlmeSgnd20tZXZlbnQnLCB7ZXZlbnROYW1lOiBMaXZlX09wZXJhdGlvbnMuSU5TRVJULCB3aWRnZXROYW1lOiB0aGlzLnN1YnNjcmliZWRXaWRnZXQubmFtZSwgcm93OiB0aGlzLnN1YnNjcmliZWRXaWRnZXQuc2VsZWN0ZWRpdGVtfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZVJvdygpIHtcbiAgICAgICAgdGhpcy5hcHAubm90aWZ5KCd3bS1ldmVudCcsIHtldmVudE5hbWU6IExpdmVfT3BlcmF0aW9ucy5VUERBVEUsIHdpZGdldE5hbWU6IHRoaXMuc3Vic2NyaWJlZFdpZGdldC5uYW1lLCByb3c6IHRoaXMuc3Vic2NyaWJlZFdpZGdldC5zZWxlY3RlZGl0ZW19KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVsZXRlUm93KCkge1xuICAgICAgICB0aGlzLmFwcC5ub3RpZnkoJ3dtLWV2ZW50Jywge2V2ZW50TmFtZTogTGl2ZV9PcGVyYXRpb25zLkRFTEVURSwgd2lkZ2V0TmFtZTogdGhpcy5zdWJzY3JpYmVkV2lkZ2V0Lm5hbWUsIHJvdzogdGhpcy5zdWJzY3JpYmVkV2lkZ2V0LnNlbGVjdGVkaXRlbX0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3VjY2Vzc0hhbmRsZXIob3B0aW9ucywgcmVzcG9uc2UpIHtcbiAgICAgICAgdHJpZ2dlckZuKG9wdGlvbnMuc3VjY2VzcywgcmVzcG9uc2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXJyb3JIYW5kbGVyKG9wdGlvbnMsIGVycm9yKSB7XG4gICAgICAgIHRoaXMuYXBwLm5vdGlmeUFwcChlcnJvciwgJ2Vycm9yJywgJ0VSUk9SJyk7XG4gICAgICAgIHRyaWdnZXJGbihvcHRpb25zLmVycm9yLCBlcnJvcik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJlY29yZHMob3B0aW9ucywgb3BlcmF0aW9uKSB7XG4gICAgICAgIGxldCBpbmRleDtcbiAgICAgICAgbGV0IGRhdGFOYXZpZ2F0b3I7XG5cbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaWJlZFdpZGdldC5uYXZpZ2F0aW9uICE9PSAnTm9uZScgJiYgdGhpcy5zdWJzY3JpYmVkV2lkZ2V0LmRhdGFOYXZpZ2F0b3IpIHtcbiAgICAgICAgICAgIGRhdGFOYXZpZ2F0b3IgPSB0aGlzLnN1YnNjcmliZWRXaWRnZXQuZGF0YU5hdmlnYXRvcjtcblxuICAgICAgICAgICAgLy8gSWYgb3BlcmF0aW9uIGlzIGRlbGV0ZSwgZGVjcmVhc2UgdGhlIGRhdGEgc2l6ZSBhbmQgY2hlY2sgaWYgbmF2aWdhdGlvbiB0byBwcmV2aW91cyBwYWdlIGlzIHJlcXVpcmVkXG4gICAgICAgICAgICBpZiAob3BlcmF0aW9uID09PSBMaXZlX09wZXJhdGlvbnMuREVMRVRFKSB7XG4gICAgICAgICAgICAgICAgZGF0YU5hdmlnYXRvci5kYXRhU2l6ZSAtPSAxO1xuICAgICAgICAgICAgICAgIGRhdGFOYXZpZ2F0b3IuY2FsY3VsYXRlUGFnaW5nVmFsdWVzKCk7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBkYXRhTmF2aWdhdG9yLnBhZ2VDb3VudCA8IGRhdGFOYXZpZ2F0b3IuZG4uY3VycmVudFBhZ2UgPyAncHJldicgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIElmIG9wZXJhdGlvbiBpcyBpbnNlcnQsIGdvIHRvIGxhc3QgcGFnZS4gSWYgdXBkYXRlIG9wZXJhdGlvbiwgc3RheSBvbiBjdXJyZW50IHBhZ2VcbiAgICAgICAgICAgICAgICBpbmRleCA9IG9wZXJhdGlvbiA9PT0gTGl2ZV9PcGVyYXRpb25zLklOU0VSVCA/ICdsYXN0JyA6ICdjdXJyZW50JztcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09ICdsYXN0Jykge1xuICAgICAgICAgICAgICAgICAgICBkYXRhTmF2aWdhdG9yLmRhdGFTaXplICs9IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRhdGFOYXZpZ2F0b3IuY2FsY3VsYXRlUGFnaW5nVmFsdWVzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRhdGFOYXZpZ2F0b3IubmF2aWdhdGVQYWdlKGluZGV4LCBudWxsLCB0cnVlLCByZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzSGFuZGxlcihvcHRpb25zLCByZXNwb25zZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlZFdpZGdldC5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uTElTVF9SRUNPUkRTLCB7XG4gICAgICAgICAgICAgICAgJ3NraXBUb2dnbGVTdGF0ZSc6IHRydWVcbiAgICAgICAgICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3VjY2Vzc0hhbmRsZXIob3B0aW9ucywgcmVzcG9uc2UpO1xuICAgICAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9ySGFuZGxlcihvcHRpb25zLCBlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHBlcmZvcm1DVURPcGVyYXRpb24ocmVxdWVzdERhdGEsIG9wZXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICBwZXJmb3JtRGF0YU9wZXJhdGlvbih0aGlzLnN1YnNjcmliZWRXaWRnZXQuZGF0YXNvdXJjZSwgcmVxdWVzdERhdGEsIHtcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6IG9wZXJhdGlvblxuICAgICAgICB9KS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyKG9wdGlvbnMsIHJlc3BvbnNlLmVycm9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5zdWJzY3JpYmVkV2lkZ2V0LmRhdGFzb3VyY2UuY2F0ZWdvcnkgPT09ICd3bS5DcnVkVmFyaWFibGUnICYmIG9wZXJhdGlvbiA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmliZWRXaWRnZXQuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkxJU1RfUkVDT1JEUywge1xuICAgICAgICAgICAgICAgICAgICAnc2tpcFRvZ2dsZVN0YXRlJzogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3NIYW5kbGVyKG9wdGlvbnMsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9ySGFuZGxlcihvcHRpb25zLCBlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFJlY29yZHMob3B0aW9ucywgb3BlcmF0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHNob3cgZGVsZXRlIHN1Y2Nlc3MgdG9hc3RlclxuICAgICAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcC5ub3RpZnlBcHAodGhpcy5hcHAuYXBwTG9jYWxlLk1FU1NBR0VfREVMRVRFX1JFQ09SRF9TVUNDRVNTLCAnc3VjY2VzcycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyKG9wdGlvbnMsIGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbnNlcnRSZWNvcmQocmVxdWVzdERhdGEsIG9wZXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLnBlcmZvcm1DVURPcGVyYXRpb24ocmVxdWVzdERhdGEsIG9wZXJhdGlvbiwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVSZWNvcmQocmVxdWVzdERhdGEsIG9wZXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLnBlcmZvcm1DVURPcGVyYXRpb24ocmVxdWVzdERhdGEsIG9wZXJhdGlvbiwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZWxldGVSZWNvcmQocmVxdWVzdERhdGEsIG9wZXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICAvLyBTaG93IHRoZSBkZWxldGUgY29uZmlybWF0aW9uIGRpYWxvZy4gT24gT2ssIGRlbGV0ZSB0aGUgcmVjb3JkLlxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0FwcENvbmZpcm1EaWFsb2coe1xuICAgICAgICAgICAgdGl0bGU6ICB0aGlzLmFwcC5hcHBMb2NhbGUuTUVTU0FHRV9ERUxFVEVfUkVDT1JEIHx8ICdEZWxldGUgUmVjb3JkJyxcbiAgICAgICAgICAgIGljb25jbGFzczogJ3dpIHdpLWRlbGV0ZSBmYS1sZycsXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnN1YnNjcmliZWRXaWRnZXQuY29uZmlybWRlbGV0ZSB8fCAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzPycsXG4gICAgICAgICAgICBva3RleHQ6IHRoaXMuc3Vic2NyaWJlZFdpZGdldC5kZWxldGVva3RleHQgfHwgJ09rJyxcbiAgICAgICAgICAgIGNhbmNlbHRleHQ6IHRoaXMuc3Vic2NyaWJlZFdpZGdldC5kZWxldGVjYW5jZWx0ZXh0IHx8ICdDYW5jZWwnLFxuICAgICAgICAgICAgb25PazogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucGVyZm9ybUNVRE9wZXJhdGlvbihyZXF1ZXN0RGF0YSwgb3BlcmF0aW9uLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2xvc2VBcHBDb25maXJtRGlhbG9nKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25DYW5jZWw6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRm4ob3B0aW9ucy5jYW5jZWxEZWxldGVDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNsb3NlQXBwQ29uZmlybURpYWxvZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBlcmZvcm1PcGVyYXRpb24ob3BlcmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3REYXRhID0ge1xuICAgICAgICAgICAgcm93OiBvcHRpb25zLnJvdyxcbiAgICAgICAgICAgIHByZXZEYXRhOiB7fSxcbiAgICAgICAgICAgIHJvd0RhdGE6IHt9LFxuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cnVlLFxuICAgICAgICAgICAgc2tpcE5vdGlmaWNhdGlvbjogdHJ1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChvcGVyYXRpb24gPT09IExpdmVfT3BlcmF0aW9ucy5VUERBVEUpIHtcbiAgICAgICAgICAgIHJlcXVlc3REYXRhLnJvd0RhdGEgPSBvcHRpb25zLnJvd0RhdGE7XG4gICAgICAgICAgICByZXF1ZXN0RGF0YS5wcmV2RGF0YSA9IG9wdGlvbnMucHJldkRhdGE7XG4gICAgICAgIH1cblxuICAgICAgICAvKiBkZWNpZGUgcm91dGluZSBiYXNlZCBvbiBDUlVEIG9wZXJhdGlvbiB0byBiZSBwZXJmb3JtZWQgKi9cbiAgICAgICAgc3dpdGNoIChvcGVyYXRpb24pIHtcbiAgICAgICAgICAgIGNhc2UgTGl2ZV9PcGVyYXRpb25zLklOU0VSVDpcbiAgICAgICAgICAgICAgICB0aGlzLmluc2VydFJlY29yZChyZXF1ZXN0RGF0YSwgb3BlcmF0aW9uLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTGl2ZV9PcGVyYXRpb25zLlVQREFURTpcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVJlY29yZChyZXF1ZXN0RGF0YSwgb3BlcmF0aW9uLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTGl2ZV9PcGVyYXRpb25zLkRFTEVURTpcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZVJlY29yZChyZXF1ZXN0RGF0YSwgb3BlcmF0aW9uLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTGl2ZV9PcGVyYXRpb25zLlJFQUQ6XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRSZWNvcmRzKG9wdGlvbnMsIG9wZXJhdGlvbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBUEkgZXhwb3NlZCB0byBtYWtlIENSVUQgb3BlcmF0aW9uc1xuICAgIHB1YmxpYyBjYWxsKG9wZXJhdGlvbiwgb3B0aW9ucywgc3VjY2Vzcz8sIGVycm9yPykge1xuICAgICAgICBvcHRpb25zLnN1Y2Nlc3MgPSBzdWNjZXNzO1xuICAgICAgICBvcHRpb25zLmVycm9yID0gZXJyb3I7XG5cbiAgICAgICAgdGhpcy5wZXJmb3JtT3BlcmF0aW9uKG9wZXJhdGlvbiwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ2xlYXIgcmVmZXJlbmNlc1xuICAgICAgICB0aGlzLnN1YnNjcmliZWRXaWRnZXQgPSBudWxsO1xuICAgICAgICB0aGlzLmFwcCA9IG51bGw7XG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZSA9IG51bGw7XG4gICAgfVxufVxuIl19
|
|
@@ -326,6 +326,17 @@ export class LiveFilterDirective {
|
|
|
326
326
|
const name = widget.key || widget.name;
|
|
327
327
|
this.form.filterWidgets[name] = widget;
|
|
328
328
|
}
|
|
329
|
+
ngOnDestroy() {
|
|
330
|
+
// MEMORY LEAK FIX: Cancel debounced function
|
|
331
|
+
if (this._filter && this._filter.cancel) {
|
|
332
|
+
this._filter.cancel();
|
|
333
|
+
this._filter = null;
|
|
334
|
+
}
|
|
335
|
+
// MEMORY LEAK FIX: Clear form reference
|
|
336
|
+
this.form = null;
|
|
337
|
+
this._options = null;
|
|
338
|
+
this.orderBy = null;
|
|
339
|
+
}
|
|
329
340
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LiveFilterDirective, deps: [{ token: FormComponent, self: true }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
330
341
|
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: LiveFilterDirective, isStandalone: true, selector: "[wmLiveFilter]", ngImport: i0 }); }
|
|
331
342
|
}
|
|
@@ -341,4 +352,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
341
352
|
type: Inject,
|
|
342
353
|
args: [FormComponent]
|
|
343
354
|
}] }] });
|
|
344
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS1maWx0ZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2RhdGEvZm9ybS9zcmMvbGl2ZS1maWx0ZXIvbGl2ZS1maWx0ZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSx5QkFBeUIsRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUxTSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUM7O0FBRS9CLE1BQU0sZ0JBQWdCLEdBQUc7SUFDckIsV0FBVyxFQUFLLG1CQUFtQjtDQUN0QyxDQUFDO0FBQ0YsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0FBTXRCLE1BQU0sT0FBTyxtQkFBbUI7YUFDcEIsb0JBQWUsR0FBRyx1QkFBdUIsRUFBRSxBQUE1QixDQUE2QjtJQVVwRCxZQUFtRCxJQUFJO1FBQUosU0FBSSxHQUFKLElBQUksQ0FBQTtRQUx2RCw2SEFBNkg7UUFDN0gsWUFBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN6QixJQUFJLENBQUMsTUFBTSxDQUFD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RUQsMERBQTBEO0lBQzFELGVBQWU7UUFDWCwwREFBMEQ7UUFDMUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQ2hELE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEYsQ0FBQyxDQUFDLENBQUM7UUFDSCxnRUFBZ0U7UUFDaEUsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7SUFDTCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsTUFBTTtRQUNyQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzNDLENBQUM7K0dBeFVRLG1CQUFtQixrQkFXQSxhQUFhO21HQVhoQyxtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBSi9CLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2QsUUFBUSxFQUFFLGdCQUFnQjtpQkFDN0I7OzBCQVlnQixJQUFJOzswQkFBSSxNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEluamVjdCwgU2VsZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgJGFwcERpZ2VzdCwgRGF0YVNvdXJjZSwgRGF0YVR5cGUsIGRlYm91bmNlLCBGb3JtV2lkZ2V0VHlwZSwgZ2V0Q2xvbmVkT2JqZWN0LCBpc0RlZmluZWQgfSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQgeyBhcHBseUZpbHRlck9uRmllbGQsIGZldGNoRGlzdGluY3RWYWx1ZXMsIGdldERpc3RpbmN0VmFsdWVzRm9yRmllbGQsIGdldEVtcHR5TWF0Y2hNb2RlLCBnZXRFbmFibGVFbXB0eUZpbHRlciwgZ2V0UmFuZ2VGaWVsZFZhbHVlLCBnZXRSYW5nZU1hdGNoTW9kZSwgaXNEYXRhU2V0V2lkZ2V0IH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5cbmltcG9ydCB7IEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyByZWdpc3RlckxpdmVGaWx0ZXJQcm9wcyB9IGZyb20gJy4uL2Zvcm0ucHJvcHMnO1xuaW1wb3J0IHtmaW5kfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmNvbnN0IEZJTFRFUl9DT05TVEFOVFMgPSB7XG4gICAgJ0VNUFRZX0tFWScgICA6ICdFTVBUWV9OVUxMX0ZJTFRFUidcbn07XG5jb25zdCBub29wID0gKCkgPT4ge307XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnW3dtTGl2ZUZpbHRlcl0nXG59KVxuZXhwb3J0IGNsYXNzIExpdmVGaWx0ZXJEaXJlY3RpdmUge1xuICAgIHN0YXRpYyAgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJMaXZlRmlsdGVyUHJvcHMoKTtcbiAgICBwcml2YXRlIF9vcHRpb25zO1xuXG4gICAgb3JkZXJCeTtcblxuICAgIC8vIGRlYm91bmNlIHRoZSBmaWx0ZXIgZnVuY3Rpb24uIElmIG11bHRpcGxlIGZpbHRlciBjYWxscyBhcmUgbWFkZSBhdCBzYW1lIHRpbWUsIGNhbGxzIHdpbGwgYmUgZGVsYXllZCBhbmQgbGFzdCBjYWxsIGlzIGZpcmVkXG4gICAgX2ZpbHRlciA9IGRlYm91bmNlKG9wdGlvbnMgPT4ge1xuICAgICAgICB0aGlzLmZpbHRlcihvcHRpb25zKTtcbiAgICB9LCAyNTApO1xuXG4gICAgY29uc3RydWN0b3IoQFNlbGYoKSBASW5qZWN0KEZvcm1Db21wb25lbnQpIHByaXZhdGUgZm9ybSkge1xuICAgICAgICBmb3JtLmNsZWFyRmlsdGVyID0gdGhpcy5jbGVhckZpbHRlci5iaW5kKHRoaXMpO1xuICAgICAgICBmb3JtLmFwcGx5RmlsdGVyID0gdGhpcy5hcHBseUZpbHRlci5iaW5kKHRoaXMpO1xuICAgICAgICBmb3JtLmZpbHRlciA9IHRoaXMuZmlsdGVyLmJpbmQodGhpcyk7XG4gICAgICAgIGZvcm0uZmlsdGVyT25EZWZhdWx0ID0gdGhpcy5maWx0ZXJPbkRlZmF1bHQuYmluZCh0aGlzKTtcbiAgICAgICAgZm9ybS5leGVjdXRlID0gdGhpcy5leGVjdXRlLmJpbmQodGhpcyk7XG4gICAgICAgIGZvcm0ub25GaWVsZERlZmF1bHRWYWx1ZUNoYW5nZSA9IHRoaXMub25GaWVsZERlZmF1bHRWYWx1ZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICBmb3JtLm9uTWF4RGVmYXVsdFZhbHVlQ2hhbmdlID0gdGhpcy5vbk1heERlZmF1bHRWYWx1ZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICBmb3JtLm9uRGF0YVNvdXJjZUNoYW5nZSA9IHRoaXMub25EYXRhU291cmNlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIGZvcm0ub25GaWVsZFZhbHVlQ2hhbmdlID0gdGhpcy5vbkZpZWxkVmFsdWVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgZm9ybS5zdWJtaXRGb3JtID0gdGhpcy5zdWJtaXRGb3JtLmJpbmQodGhpcyk7XG4gICAgICAgIGZvcm0ucmVnaXN0ZXJGb3JtV2lkZ2V0ID0gdGhpcy5yZWdpc3RlckZvcm1XaWRnZXQuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBleGVjdXRlKG9wZXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICBpZiAob3BlcmF0aW9uID09PSBEYXRhU291cmNlLk9wZXJhdGlvbi5MSVNUX1JFQ09SRFMgfHwgb3BlcmF0aW9uID09PSBEYXRhU291cmNlLk9wZXJhdGlvbi5ET1dOTE9BRCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlGaWx0ZXIob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX09QVElPTlMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcHRpb25zIHx8IHt9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcGVyYXRpb24gPT09IERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9QQUdJTkdfT1BUSU9OUykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5wYWdpbmF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5mb3JtLmRhdGFzb3VyY2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3BlcmF0aW9uID09PSBEYXRhU291cmNlLk9wZXJhdGlvbi5GRVRDSF9ESVNUSU5DVF9WQUxVRVMpIHtcbiAgICAgICAgICAgIHJldHVybiBmZXRjaERpc3RpbmN0VmFsdWVzKHRoaXMuZm9ybS5kYXRhc291cmNlLCB0aGlzLmZvcm0uZm9ybUZpZWxkcywge1xuICAgICAgICAgICAgICAgIHdpZGdldDogJ3dpZGdldHR5cGUnLFxuICAgICAgICAgICAgICAgIGVuYWJsZWVtcHR5ZmlsdGVyOiB0aGlzLmZvcm0uZW5hYmxlZW1wdHlmaWx0ZXIsXG4gICAgICAgICAgICAgICAgRU1QVFlfVkFMVUU6IHRoaXMuZm9ybS5hcHBMb2NhbGUuTEFCRUxfTk9fVkFMVUVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uZGF0YXNvdXJjZS5leGVjdXRlKG9wZXJhdGlvbiwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgb25GaWVsZERlZmF1bHRWYWx1ZUNoYW5nZShmaWVsZCwgbnYpIHtcbiAgICAgICAgZmllbGQubWluVmFsdWUgPSBudjtcbiAgICAgICAgZmllbGQudmFsdWUgPSBudjtcbiAgICAgICAgdGhpcy5maWx0ZXJPbkRlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBvbkZpZWxkVmFsdWVDaGFuZ2UoZmllbGQsIG52KSB7XG4gICAgICAgIGFwcGx5RmlsdGVyT25GaWVsZCh0aGlzLmZvcm0uZGF0YXNvdXJjZSwgZmllbGQud2lkZ2V0LCB0aGlzLmZvcm0uZm9ybUZpZWxkcywgbnYsIHtcbiAgICAgICAgICAgIEVNUFRZX1ZBTFVFOiB0aGlzLmZvcm0uYXBwTG9jYWxlLkxBQkVMX05PX1ZBTFVFXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5mb3JtLmF1dG91cGRhdGUgJiYgaXNEZWZpbmVkKG52KSkge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk1heERlZmF1bHRWYWx1ZUNoYW5nZSgpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlck9uRGVmYXVsdCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkRhdGFTb3VyY2VDaGFuZ2UoKSB7XG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSB0aGlzLmZvcm0uZGF0YXNvdXJjZTtcblxuICAgICAgICBpZiAoIWRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZm9ybS5mb3JtRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgaWYgKGlzRGF0YVNldFdpZGdldChmaWVsZC53aWRnZXR0eXBlKSkge1xuICAgICAgICAgICAgICAgIGdldERpc3RpbmN0VmFsdWVzRm9yRmllbGQoZGF0YVNvdXJjZSwgZmllbGQud2lkZ2V0LCB7XG4gICAgICAgICAgICAgICAgICAgIHdpZGdldDogJ3dpZGdldHR5cGUnLFxuICAgICAgICAgICAgICAgICAgICBlbmFibGVlbXB0eWZpbHRlcjogdGhpcy5mb3JtLmVuYWJsZWVtcHR5ZmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICBFTVBUWV9WQUxVRTogdGhpcy5mb3JtLmFwcExvY2FsZS5MQUJFTF9OT19WQUxVRVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFwcGx5RmlsdGVyT25GaWVsZChkYXRhU291cmNlLCBmaWVsZC53aWRnZXQsIHRoaXMuZm9ybS5mb3JtRmllbGRzLCBmaWVsZC52YWx1ZSwge1xuICAgICAgICAgICAgICAgICAgICBpc0ZpcnN0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBFTVBUWV9WQUxVRTogdGhpcy5mb3JtLmFwcExvY2FsZS5MQUJFTF9OT19WQUxVRVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBPbiBsb2FkIGNoZWNrIGlmIGRlZmF1bHQgdmFsdWUgZXhpc3RzIGFuZCBhcHBseSBmaWx0ZXIsIENhbGwgdGhlIGZpbHRlciB3aXRoIHRoZSByZXN1bHQgb3B0aW9uc1xuICAgICAgICB0aGlzLl9maWx0ZXIodGhpcy5fb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgY2xlYXJGaWx0ZXIoKSB7XG4gICAgICAgIHRoaXMuZm9ybS5yZXNldEZvcm1TdGF0ZSgpO1xuICAgICAgICB0aGlzLmZvcm0uZm9ybUZpZWxkcy5mb3JFYWNoKGZpbHRlckZpZWxkID0+IHtcbiAgICAgICAgICAgIC8vIEFkZGVkIGNoZWNrIGZvciByYW5nZSBmaWVsZFxuICAgICAgICAgICAgaWYgKCFmaWx0ZXJGaWVsZC5yZWFkb25seSAmJiBmaWx0ZXJGaWVsZC5zaG93KSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlckZpZWxkLndpZGdldHR5cGUgPT09IEZvcm1XaWRnZXRUeXBlLkFVVE9DT01QTEVURSB8fCBmaWx0ZXJGaWVsZC53aWRnZXR0eXBlID09PSBGb3JtV2lkZ2V0VHlwZS5UWVBFQUhFQUQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLiRlbGVtZW50LmZpbmQoJ2RpdltuYW1lPScgKyBmaWx0ZXJGaWVsZC5uYW1lICsgJ10gaW5wdXQnKS52YWwoJycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyRmllbGRbJ2lzLXJhbmdlJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyRmllbGQubWluVmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyRmllbGQubWF4VmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJGaWVsZC52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJGaWVsZC5yZXNldERpc3BsYXlJbnB1dCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIElmIHZhcmlhYmxlIGhhcyBhbnkgYmluZGluZ3MsIHdhaXQgZm9yIHRoZSBiaW5kaW5ncyB0byBiZSB1cGRhdGVkXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgLy8gU2V0dGluZyByZXN1bHQgdG8gdGhlIGRlZmF1bHQgZGF0YVxuICAgICAgICAgICAgdGhpcy5fZmlsdGVyKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN1Ym1pdEZvcm0oKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyKCk7XG4gICAgfVxuXG4gICAgYXBwbHlGaWx0ZXIob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyA/IChvcHRpb25zLmRhdGEgfHwgb3B0aW9ucykgOiB7fTtcbiAgICAgICAgb3B0aW9ucy5wYWdlID0gb3B0aW9ucy5wYWdlIHx8IDE7XG4gICAgICAgIG9wdGlvbnMub3JkZXJCeSA9IGlzRGVmaW5lZChvcHRpb25zLm9yZGVyQnkpID8gIG9wdGlvbnMub3JkZXJCeSA6IHRoaXMub3JkZXJCeTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGZpbHRlcihvcHRpb25zPykge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybS5kYXRhc291cmNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlsdGVyRmllbGRzID0ge307XG4gICAgICAgIGNvbnN0IGRhdGFNb2RlbCA9IHt9O1xuICAgICAgICBsZXQgcGFnZSA9IDEsXG4gICAgICAgICAgICBvcmRlckJ5LFxuICAgICAgICAgICAgaXNWYWxpZDtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIHBhZ2UgPSBvcHRpb25zLnBhZ2UgfHwgcGFnZTtcbiAgICAgICAgb3JkZXJCeSA9IGlzRGVmaW5lZChvcHRpb25zLm9yZGVyQnkpID8gb3B0aW9ucy5vcmRlckJ5IDogKHRoaXMub3JkZXJCeSB8fCAnJyk7XG4gICAgICAgIHRoaXMub3JkZXJCeSA9IG9yZGVyQnk7IC8vIFN0b3JlIHRoZSBvcmRlciBieSBpbiBzY29wZS4gVGhpcyBjYW4gYmUgdXNlZCB0byByZXRhaW4gdGhlIHNvcnQgYWZ0ZXIgZmlsdGVyaW5nXG4gICAgICAgIC8vIENvcHkgdGhlIHZhbHVlcyB0byBiZSBzZW50IHRvIHRoZSB1c2VyIGFzICckZGF0YScgYmVmb3JlIHNlcnZpY2VjYWxsXG4gICAgICAgIHRoaXMuZm9ybS5mb3JtRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmllbGRTZWxlY3RvciA9ICdkaXZbbmFtZT0nICsgZmllbGQubmFtZSArICddIGlucHV0JztcbiAgICAgICAgICAgIGNvbnN0ICRlbCA9IHRoaXMuZm9ybS4kZWxlbWVudDtcbiAgICAgICAgICAgIGxldCBmaWVsZEVsZTtcbiAgICAgICAgICAgIGlmICgoZmllbGQud2lkZ2V0dHlwZSA9PT0gRm9ybVdpZGdldFR5cGUuQVVUT0NPTVBMRVRFIHx8IGZpZWxkLndpZGdldHR5cGUgPT09IEZvcm1XaWRnZXRUeXBlLlRZUEVBSEVBRCkgJiYgJGVsKSB7XG4gICAgICAgICAgICAgICAgZmllbGRFbGUgPSAkZWwuZmluZChmaWVsZFNlbGVjdG9yKTtcbiAgICAgICAgICAgICAgICBpZiAoIWZpZWxkWydpcy1yYW5nZSddKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFNb2RlbFtmaWVsZC5maWVsZF0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAndmFsdWUnOiBpc0RlZmluZWQoZmllbGQudmFsdWUpID8gZmllbGQudmFsdWUgOiBmaWVsZEVsZS52YWwoKSAvLyBGb3IgYXV0b2NvbXBsZXRlLCBzZXQgdGhlIGRhdGF2YWx1ZS4gSWYgbm90IHByZXNlbnQsIHNldCBxdWVyeSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFNb2RlbFtmaWVsZC5maWVsZF0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnbWluVmFsdWUnOiAgaXNEZWZpbmVkKGZpZWxkLm1pblZhbHVlKSA/IGZpZWxkLm1pblZhbHVlIDogZmllbGRFbGUuZmlyc3QoKS52YWwoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdtYXhWYWx1ZSc6ICBpc0RlZmluZWQoZmllbGQubWF4VmFsdWUpID8gZmllbGQubWF4VmFsdWUgOiBmaWVsZEVsZS5sYXN0KCkudmFsKClcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFmaWVsZFsnaXMtcmFuZ2UnXSkge1xuICAgICAgICAgICAgICAgIGRhdGFNb2RlbFtmaWVsZC5maWVsZF0gPSB7XG4gICAgICAgICAgICAgICAgICAgICd2YWx1ZSc6IGZpZWxkLnZhbHVlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YU1vZGVsW2ZpZWxkLmZpZWxkXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgJ21pblZhbHVlJzogZmllbGQubWluVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICdtYXhWYWx1ZSc6IGZpZWxkLm1heFZhbHVlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8qUGVyZm9ybSB0aGlzIGZ1bmN0aW9uIGZvciB0aGUgZXZlbnQgb25CZWZvcmVzZXJ2aWNlY2FsbCovXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gdGhpcy5mb3JtLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZXNlcnZpY2VjYWxsJywgeyRkYXRhOiBkYXRhTW9kZWx9KTtcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1ZhbGlkICYmIGlzVmFsaWQuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0udG9nZ2xlTWVzc2FnZSh0cnVlLCBpc1ZhbGlkLmVycm9yLCAnZXJyb3InLCAnRVJST1InKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKlVwZGF0ZSB0aGVzZSB2YWx1ZXMgaW4gdGhlIGZvcm1GaWVsZHMgd2l0aCBuZXcgcmVmZXJlbmNlLCBpbm9yZGVyIHRvIG1haW50YWluIHRoZSBVSSB2YWx1ZXMqL1xuICAgICAgICAgICAgdGhpcy5mb3JtLmZvcm1GaWVsZHMuZm9yRWFjaChmaWx0ZXJGaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXJGaWVsZFsnaXMtcmFuZ2UnXSkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJGaWVsZC5fdmFsdWUgPSBkYXRhTW9kZWxbZmlsdGVyRmllbGQuZmllbGRdLnZhbHVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckZpZWxkLl9taW5WYWx1ZSA9IGRhdGFNb2RlbFtmaWx0ZXJGaWVsZC5maWVsZF0ubWluVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckZpZWxkLl9tYXhWYWx1ZSA9IGRhdGFNb2RlbFtmaWx0ZXJGaWVsZC5maWVsZF0ubWF4VmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGVyci5tZXNzYWdlID09PSAnQWJvcnQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qIENvbnN0cnVjdCB0aGUgZm9ybUZpZWxkcyBWYXJpYWJsZSB0byBzZW5kIGl0IHRvIHRoZSBxdWVyeUJ1aWxkZXIgKi9cbiAgICAgICAgdGhpcy5mb3JtLmZvcm1GaWVsZHMuZm9yRWFjaChmaWx0ZXJGaWVsZCA9PiB7XG4gICAgICAgICAgICBsZXQgZmllbGRWYWx1ZTtcbiAgICAgICAgICAgIGxldCBtYXRjaE1vZGU7XG4gICAgICAgICAgICBsZXQgY29sTmFtZSAgPSBmaWx0ZXJGaWVsZC5maWVsZDtcbiAgICAgICAgICAgIGNvbnN0IG1pblZhbHVlID0gZmlsdGVyRmllbGQuX21pblZhbHVlO1xuICAgICAgICAgICAgY29uc3QgbWF4dmFsdWUgPSBmaWx0ZXJGaWVsZC5fbWF4VmFsdWU7XG4gICAgICAgICAgICAvKiBpZiBmaWVsZCBpcyBwYXJ0IG9mIGEgcmVsYXRlZCBlbnRpdHksIGNvbHVtbiBuYW1lIHdpbGwgYmUgJ2VudGl0eS5maWVsZE5hbWUnICovXG4gICAgICAgICAgICBpZiAoZmlsdGVyRmllbGRbJ2lzLXJlbGF0ZWQnXSkge1xuICAgICAgICAgICAgICAgIGNvbE5hbWUgKz0gJy4nICsgZmlsdGVyRmllbGRbJ2xvb2t1cC1maWVsZCddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpbHRlckZpZWxkWydpcy1yYW5nZSddKSB7XG4gICAgICAgICAgICAgICAgLypCYXNlZCBvbiB0aGUgbWluIGFuZCBtYXggdmFsdWVzLCBkZWNpZGUgdGhlIG1hdGNobW9kZSBjb25kaXRpb24qL1xuICAgICAgICAgICAgICAgIGZpZWxkVmFsdWUgPSBnZXRSYW5nZUZpZWxkVmFsdWUobWluVmFsdWUsIG1heHZhbHVlKTtcbiAgICAgICAgICAgICAgICBtYXRjaE1vZGUgID0gZ2V0UmFuZ2VNYXRjaE1vZGUobWluVmFsdWUsIG1heHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNEZWZpbmVkKGZpZWxkVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckZpZWxkc1tjb2xOYW1lXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICd2YWx1ZScgICAgIDogZmllbGRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdtYXRjaE1vZGUnIDogbWF0Y2hNb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2xvZ2ljYWxPcCcgOiAnQU5EJ1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChmaWx0ZXJGaWVsZC53aWRnZXR0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgRm9ybVdpZGdldFR5cGUuU0VMRUNUOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIEZvcm1XaWRnZXRUeXBlLlJBRElPU0VUOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdldEVuYWJsZUVtcHR5RmlsdGVyKHRoaXMuZm9ybS5lbmFibGVlbXB0eWZpbHRlcikgJiYgZmlsdGVyRmllbGQuX3ZhbHVlID09PSBGSUxURVJfQ09OU1RBTlRTLkVNUFRZX0tFWSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoTW9kZSAgPSBnZXRFbXB0eU1hdGNoTW9kZSh0aGlzLmZvcm0uZW5hYmxlZW1wdHlmaWx0ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkVmFsdWUgPSBmaWx0ZXJGaWVsZC5fdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJGaWVsZC50eXBlID09PSBEYXRhVHlwZS5CT09MRUFOKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0RlZmluZWQoZmlsdGVyRmllbGQuX3ZhbHVlKSAmJiBmaWx0ZXJGaWVsZC5fdmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZFZhbHVlID0gSlNPTi5wYXJzZShmaWx0ZXJGaWVsZC5fdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRWYWx1ZSA9IGZpbHRlckZpZWxkLl92YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBGb3JtV2lkZ2V0VHlwZS5DSEVDS0JPWFNFVDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBGb3JtV2lkZ2V0VHlwZS5DSElQUzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJGaWVsZC5fdmFsdWUgJiYgZmlsdGVyRmllbGQuX3ZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkVmFsdWUgPSBmaWx0ZXJGaWVsZC5fdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBGb3JtV2lkZ2V0VHlwZS5DSEVDS0JPWDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBGb3JtV2lkZ2V0VHlwZS5UT0dHTEU6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNEZWZpbmVkKGZpbHRlckZpZWxkLl92YWx1ZSkgJiYgZmlsdGVyRmllbGQuX3ZhbHVlICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkVmFsdWUgPSBmaWx0ZXJGaWVsZC50eXBlID09PSBEYXRhVHlwZS5CT09MRUFOID8gSlNPTi5wYXJzZShmaWx0ZXJGaWVsZC5fdmFsdWUpIDogZmlsdGVyRmllbGQuX3ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZFZhbHVlID0gZmlsdGVyRmllbGQuX3ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc0RlZmluZWQoZmllbGRWYWx1ZSkgJiYgZmllbGRWYWx1ZSAhPT0gJycgJiYgZmllbGRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJGaWVsZHNbY29sTmFtZV0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoTW9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyRmllbGRzW2NvbE5hbWVdLm1hdGNoTW9kZSA9IG1hdGNoTW9kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyRmllbGQudHlwZSA9PT0gRGF0YVR5cGUuU1RSSU5HIHx8IGZpbHRlckZpZWxkLmlzUmVsYXRlZCkgeyAvLyBPbmx5IGZvciBzdHJpbmcgdHlwZXMgYW5kIHJlbGF0ZWQgZmllbGRzLCBjdXN0b20gbWF0Y2ggbW9kZXMgYXJlIGVuYWJsZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJGaWVsZHNbY29sTmFtZV0ubWF0Y2hNb2RlID0gbWF0Y2hNb2RlIHx8IGZpbHRlckZpZWxkLm1hdGNobW9kZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX01BVENIX01PREUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckZpZWxkc1tjb2xOYW1lXS52YWx1ZSAgICAgPSBmaWVsZFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJGaWVsZHNbY29sTmFtZV0ubG9naWNhbE9wID0gJ0FORCc7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckZpZWxkc1tjb2xOYW1lXS50eXBlID0gZmlsdGVyRmllbGQudHlwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmV4cG9ydFR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcm0uZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkRPV05MT0FELCB7XG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBtYXRjaE1vZGUgOiAnYW55d2hlcmVpZ25vcmVjYXNlJyxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyRmllbGRzIDogZmlsdGVyRmllbGRzLFxuICAgICAgICAgICAgICAgICAgICBvcmRlckJ5IDogb3JkZXJCeSxcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0VHlwZSA6IG9wdGlvbnMuZXhwb3J0VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgbG9naWNhbE9wIDogJ0FORCcsXG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydFNpemUgOiBvcHRpb25zLmV4cG9ydFNpemUsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkcyA6IG9wdGlvbnMuZmllbGRzLFxuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogb3B0aW9ucy5maWxlTmFtZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkxJU1RfUkVDT1JEUywge1xuICAgICAgICAgICAgZmlsdGVyRmllbGRzIDogZmlsdGVyRmllbGRzLFxuICAgICAgICAgICAgb3JkZXJCeSA6IG9yZGVyQnksXG4gICAgICAgICAgICBwYWdlIDogcGFnZSxcbiAgICAgICAgICAgIHBhZ2VzaXplIDogdGhpcy5mb3JtLnBhZ2VzaXplIHx8IDIwLFxuICAgICAgICAgICAgc2tpcERhdGFTZXRVcGRhdGUgOiB0cnVlLCAvLyBkb250IHVwZGF0ZSB0aGUgYWN0dWFsIHZhcmlhYmxlIGRhdGFzZXQsXG4gICAgICAgICAgICBpbkZsaWdodEJlaGF2aW9yIDogJ2V4ZWN1dGVBbGwnXG4gICAgICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICB0aGlzLmZvcm0ucGFnaW5hdGlvbiA9IHJlc3BvbnNlLnBhZ2luYXRpb247XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgLy8gZGlzYWJsZSByZWFkb25seSBhbmQgc2hvdyB0aGUgYXBwcm9wcmlhdGUgZXJyb3JcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0udG9nZ2xlTWVzc2FnZSh0cnVlLCBkYXRhLmVycm9yLCAnZXJyb3InLCAnRVJST1InKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0ub25SZXN1bHRDYihkYXRhLCBmYWxzZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX29wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgICdwYWdlJzogcGFnZSxcbiAgICAgICAgICAgICAgICAgICAgJ29yZGVyQnknOiBvcmRlckJ5XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucmVzdWx0ID0gZ2V0Q2xvbmVkT2JqZWN0KGRhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5vblJlc3VsdENiKGRhdGEsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5yZXN1bHQ7XG4gICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS50b2dnbGVNZXNzYWdlKHRydWUsIGVycm9yLCAnZXJyb3InLCAnRVJST1InKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5vblJlc3VsdENiKGVycm9yLCBmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENhbGxzIHRoZSBmaWx0ZXIgZnVuY3Rpb24gaWYgZGVmYXVsdCB2YWx1ZXMgYXJlIHByZXNlbnRcbiAgICBmaWx0ZXJPbkRlZmF1bHQoKSB7XG4gICAgICAgIC8qQ2hlY2sgaWYgZGVmYXVsdCB2YWx1ZSBpcyBwcmVzZW50IGZvciBhbnkgZmlsdGVyIGZpZWxkKi9cbiAgICAgICAgY29uc3QgZGVmYXVsdE9iaiA9IGZpbmQodGhpcy5mb3JtLmZvcm1GaWVsZHMsIG9iaiA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaXNEZWZpbmVkKG9iai52YWx1ZSkgfHwgaXNEZWZpbmVkKG9iai5taW5WYWx1ZSkgfHwgaXNEZWZpbmVkKG9iai5tYXhWYWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvKklmIGRlZmF1bHQgdmFsdWUgZXhpc3RzIGFuZCBkYXRhIGlzIGxvYWRlZCwgYXBwbHkgdGhlIGZpbHRlciovXG4gICAgICAgIGlmIChkZWZhdWx0T2JqKSB7XG4gICAgICAgICAgICB0aGlzLl9maWx0ZXIodGhpcy5fb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWdpc3RlckZvcm1XaWRnZXQod2lkZ2V0KSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB3aWRnZXQua2V5IHx8IHdpZGdldC5uYW1lO1xuICAgICAgICB0aGlzLmZvcm0uZmlsdGVyV2lkZ2V0c1tuYW1lXSA9IHdpZGdldDtcbiAgICB9XG59XG4iXX0=
|
|
355
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS1maWx0ZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2RhdGEvZm9ybS9zcmMvbGl2ZS1maWx0ZXIvbGl2ZS1maWx0ZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFhLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSx5QkFBeUIsRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUxTSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUM7O0FBRS9CLE1BQU0sZ0JBQWdCLEdBQUc7SUFDckIsV0FBVyxFQUFLLG1CQUFtQjtDQUN0QyxDQUFDO0FBQ0YsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0FBTXRCLE1BQU0sT0FBTyxtQkFBbUI7YUFDcEIsb0JBQWUsR0FBRyx1QkFBdUIsRUFBRSxBQUE1QixDQUE2QjtJQVVwRCxZQUFtRCxJQUFJO1FBQUosU0FBSSxHQUFKLElBQUksQ0FBQTtRQUx2RCw2SEFBNkg7UUFDN0gsWUFBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN6QixJQUFJLENBQUMsTUFBTSxDQUFD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RUFBRSxJQUFJO29CQUNkLFFBQVEsRUFBRSxnQkFBZ0I7aUJBQzdCOzswQkFZZ0IsSUFBSTs7MEJBQUksTUFBTTsyQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbmplY3QsIE9uRGVzdHJveSwgU2VsZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgJGFwcERpZ2VzdCwgRGF0YVNvdXJjZSwgRGF0YVR5cGUsIGRlYm91bmNlLCBGb3JtV2lkZ2V0VHlwZSwgZ2V0Q2xvbmVkT2JqZWN0LCBpc0RlZmluZWQgfSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQgeyBhcHBseUZpbHRlck9uRmllbGQsIGZldGNoRGlzdGluY3RWYWx1ZXMsIGdldERpc3RpbmN0VmFsdWVzRm9yRmllbGQsIGdldEVtcHR5TWF0Y2hNb2RlLCBnZXRFbmFibGVFbXB0eUZpbHRlciwgZ2V0UmFuZ2VGaWVsZFZhbHVlLCBnZXRSYW5nZU1hdGNoTW9kZSwgaXNEYXRhU2V0V2lkZ2V0IH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5cbmltcG9ydCB7IEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyByZWdpc3RlckxpdmVGaWx0ZXJQcm9wcyB9IGZyb20gJy4uL2Zvcm0ucHJvcHMnO1xuaW1wb3J0IHtmaW5kfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmNvbnN0IEZJTFRFUl9DT05TVEFOVFMgPSB7XG4gICAgJ0VNUFRZX0tFWScgICA6ICdFTVBUWV9OVUxMX0ZJTFRFUidcbn07XG5jb25zdCBub29wID0gKCkgPT4ge307XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnW3dtTGl2ZUZpbHRlcl0nXG59KVxuZXhwb3J0IGNsYXNzIExpdmVGaWx0ZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIHN0YXRpYyAgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJMaXZlRmlsdGVyUHJvcHMoKTtcbiAgICBwcml2YXRlIF9vcHRpb25zO1xuXG4gICAgb3JkZXJCeTtcblxuICAgIC8vIGRlYm91bmNlIHRoZSBmaWx0ZXIgZnVuY3Rpb24uIElmIG11bHRpcGxlIGZpbHRlciBjYWxscyBhcmUgbWFkZSBhdCBzYW1lIHRpbWUsIGNhbGxzIHdpbGwgYmUgZGVsYXllZCBhbmQgbGFzdCBjYWxsIGlzIGZpcmVkXG4gICAgX2ZpbHRlciA9IGRlYm91bmNlKG9wdGlvbnMgPT4ge1xuICAgICAgICB0aGlzLmZpbHRlcihvcHRpb25zKTtcbiAgICB9LCAyNTApO1xuXG4gICAgY29uc3RydWN0b3IoQFNlbGYoKSBASW5qZWN0KEZvcm1Db21wb25lbnQpIHByaXZhdGUgZm9ybSkge1xuICAgICAgICBmb3JtLmNsZWFyRmlsdGVyID0gdGhpcy5jbGVhckZpbHRlci5iaW5kKHRoaXMpO1xuICAgICAgICBmb3JtLmFwcGx5RmlsdGVyID0gdGhpcy5hcHBseUZpbHRlci5iaW5kKHRoaXMpO1xuICAgICAgICBmb3JtLmZpbHRlciA9IHRoaXMuZmlsdGVyLmJpbmQodGhpcyk7XG4gICAgICAgIGZvcm0uZmlsdGVyT25EZWZhdWx0ID0gdGhpcy5maWx0ZXJPbkRlZmF1bHQuYmluZCh0aGlzKTtcbiAgICAgICAgZm9ybS5leGVjdXRlID0gdGhpcy5leGVjdXRlLmJpbmQodGhpcyk7XG4gICAgICAgIGZvcm0ub25GaWVsZERlZmF1bHRWYWx1ZUNoYW5nZSA9IHRoaXMub25GaWVsZERlZmF1bHRWYWx1ZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICBmb3JtLm9uTWF4RGVmYXVsdFZhbHVlQ2hhbmdlID0gdGhpcy5vbk1heERlZmF1bHRWYWx1ZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICBmb3JtLm9uRGF0YVNvdXJjZUNoYW5nZSA9IHRoaXMub25EYXRhU291cmNlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIGZvcm0ub25GaWVsZFZhbHVlQ2hhbmdlID0gdGhpcy5vbkZpZWxkVmFsdWVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgZm9ybS5zdWJtaXRGb3JtID0gdGhpcy5zdWJtaXRGb3JtLmJpbmQodGhpcyk7XG4gICAgICAgIGZvcm0ucmVnaXN0ZXJGb3JtV2lkZ2V0ID0gdGhpcy5yZWdpc3RlckZvcm1XaWRnZXQuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBleGVjdXRlKG9wZXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICBpZiAob3BlcmF0aW9uID09PSBEYXRhU291cmNlLk9wZXJhdGlvbi5MSVNUX1JFQ09SRFMgfHwgb3BlcmF0aW9uID09PSBEYXRhU291cmNlLk9wZXJhdGlvbi5ET1dOTE9BRCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlGaWx0ZXIob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX09QVElPTlMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcHRpb25zIHx8IHt9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcGVyYXRpb24gPT09IERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9QQUdJTkdfT1BUSU9OUykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5wYWdpbmF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5mb3JtLmRhdGFzb3VyY2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3BlcmF0aW9uID09PSBEYXRhU291cmNlLk9wZXJhdGlvbi5GRVRDSF9ESVNUSU5DVF9WQUxVRVMpIHtcbiAgICAgICAgICAgIHJldHVybiBmZXRjaERpc3RpbmN0VmFsdWVzKHRoaXMuZm9ybS5kYXRhc291cmNlLCB0aGlzLmZvcm0uZm9ybUZpZWxkcywge1xuICAgICAgICAgICAgICAgIHdpZGdldDogJ3dpZGdldHR5cGUnLFxuICAgICAgICAgICAgICAgIGVuYWJsZWVtcHR5ZmlsdGVyOiB0aGlzLmZvcm0uZW5hYmxlZW1wdHlmaWx0ZXIsXG4gICAgICAgICAgICAgICAgRU1QVFlfVkFMVUU6IHRoaXMuZm9ybS5hcHBMb2NhbGUuTEFCRUxfTk9fVkFMVUVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uZGF0YXNvdXJjZS5leGVjdXRlKG9wZXJhdGlvbiwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgb25GaWVsZERlZmF1bHRWYWx1ZUNoYW5nZShmaWVsZCwgbnYpIHtcbiAgICAgICAgZmllbGQubWluVmFsdWUgPSBudjtcbiAgICAgICAgZmllbGQudmFsdWUgPSBudjtcbiAgICAgICAgdGhpcy5maWx0ZXJPbkRlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBvbkZpZWxkVmFsdWVDaGFuZ2UoZmllbGQsIG52KSB7XG4gICAgICAgIGFwcGx5RmlsdGVyT25GaWVsZCh0aGlzLmZvcm0uZGF0YXNvdXJjZSwgZmllbGQud2lkZ2V0LCB0aGlzLmZvcm0uZm9ybUZpZWxkcywgbnYsIHtcbiAgICAgICAgICAgIEVNUFRZX1ZBTFVFOiB0aGlzLmZvcm0uYXBwTG9jYWxlLkxBQkVMX05PX1ZBTFVFXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5mb3JtLmF1dG91cGRhdGUgJiYgaXNEZWZpbmVkKG52KSkge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk1heERlZmF1bHRWYWx1ZUNoYW5nZSgpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlck9uRGVmYXVsdCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkRhdGFTb3VyY2VDaGFuZ2UoKSB7XG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSB0aGlzLmZvcm0uZGF0YXNvdXJjZTtcblxuICAgICAgICBpZiAoIWRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZm9ybS5mb3JtRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgaWYgKGlzRGF0YVNldFdpZGdldChmaWVsZC53aWRnZXR0eXBlKSkge1xuICAgICAgICAgICAgICAgIGdldERpc3RpbmN0VmFsdWVzRm9yRmllbGQoZGF0YVNvdXJjZSwgZmllbGQud2lkZ2V0LCB7XG4gICAgICAgICAgICAgICAgICAgIHdpZGdldDogJ3dpZGdldHR5cGUnLFxuICAgICAgICAgICAgICAgICAgICBlbmFibGVlbXB0eWZpbHRlcjogdGhpcy5mb3JtLmVuYWJsZWVtcHR5ZmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICBFTVBUWV9WQUxVRTogdGhpcy5mb3JtLmFwcExvY2FsZS5MQUJFTF9OT19WQUxVRVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFwcGx5RmlsdGVyT25GaWVsZChkYXRhU291cmNlLCBmaWVsZC53aWRnZXQsIHRoaXMuZm9ybS5mb3JtRmllbGRzLCBmaWVsZC52YWx1ZSwge1xuICAgICAgICAgICAgICAgICAgICBpc0ZpcnN0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBFTVBUWV9WQUxVRTogdGhpcy5mb3JtLmFwcExvY2FsZS5MQUJFTF9OT19WQUxVRVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBPbiBsb2FkIGNoZWNrIGlmIGRlZmF1bHQgdmFsdWUgZXhpc3RzIGFuZCBhcHBseSBmaWx0ZXIsIENhbGwgdGhlIGZpbHRlciB3aXRoIHRoZSByZXN1bHQgb3B0aW9uc1xuICAgICAgICB0aGlzLl9maWx0ZXIodGhpcy5fb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgY2xlYXJGaWx0ZXIoKSB7XG4gICAgICAgIHRoaXMuZm9ybS5yZXNldEZvcm1TdGF0ZSgpO1xuICAgICAgICB0aGlzLmZvcm0uZm9ybUZpZWxkcy5mb3JFYWNoKGZpbHRlckZpZWxkID0+IHtcbiAgICAgICAgICAgIC8vIEFkZGVkIGNoZWNrIGZvciByYW5nZSBmaWVsZFxuICAgICAgICAgICAgaWYgKCFmaWx0ZXJGaWVsZC5yZWFkb25seSAmJiBmaWx0ZXJGaWVsZC5zaG93KSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlckZpZWxkLndpZGdldHR5cGUgPT09IEZvcm1XaWRnZXRUeXBlLkFVVE9DT01QTEVURSB8fCBmaWx0ZXJGaWVsZC53aWRnZXR0eXBlID09PSBGb3JtV2lkZ2V0VHlwZS5UWVBFQUhFQUQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLiRlbGVtZW50LmZpbmQoJ2RpdltuYW1lPScgKyBmaWx0ZXJGaWVsZC5uYW1lICsgJ10gaW5wdXQnKS52YWwoJycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyRmllbGRbJ2lzLXJhbmdlJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyRmllbGQubWluVmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyRmllbGQubWF4VmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJGaWVsZC52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJGaWVsZC5yZXNldERpc3BsYXlJbnB1dCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIElmIHZhcmlhYmxlIGhhcyBhbnkgYmluZGluZ3MsIHdhaXQgZm9yIHRoZSBiaW5kaW5ncyB0byBiZSB1cGRhdGVkXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgLy8gU2V0dGluZyByZXN1bHQgdG8gdGhlIGRlZmF1bHQgZGF0YVxuICAgICAgICAgICAgdGhpcy5fZmlsdGVyKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN1Ym1pdEZvcm0oKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyKCk7XG4gICAgfVxuXG4gICAgYXBwbHlGaWx0ZXIob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyA/IChvcHRpb25zLmRhdGEgfHwgb3B0aW9ucykgOiB7fTtcbiAgICAgICAgb3B0aW9ucy5wYWdlID0gb3B0aW9ucy5wYWdlIHx8IDE7XG4gICAgICAgIG9wdGlvbnMub3JkZXJCeSA9IGlzRGVmaW5lZChvcHRpb25zLm9yZGVyQnkpID8gIG9wdGlvbnMub3JkZXJCeSA6IHRoaXMub3JkZXJCeTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGZpbHRlcihvcHRpb25zPykge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybS5kYXRhc291cmNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlsdGVyRmllbGRzID0ge307XG4gICAgICAgIGNvbnN0IGRhdGFNb2RlbCA9IHt9O1xuICAgICAgICBsZXQgcGFnZSA9IDEsXG4gICAgICAgICAgICBvcmRlckJ5LFxuICAgICAgICAgICAgaXNWYWxpZDtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIHBhZ2UgPSBvcHRpb25zLnBhZ2UgfHwgcGFnZTtcbiAgICAgICAgb3JkZXJCeSA9IGlzRGVmaW5lZChvcHRpb25zLm9yZGVyQnkpID8gb3B0aW9ucy5vcmRlckJ5IDogKHRoaXMub3JkZXJCeSB8fCAnJyk7XG4gICAgICAgIHRoaXMub3JkZXJCeSA9IG9yZGVyQnk7IC8vIFN0b3JlIHRoZSBvcmRlciBieSBpbiBzY29wZS4gVGhpcyBjYW4gYmUgdXNlZCB0byByZXRhaW4gdGhlIHNvcnQgYWZ0ZXIgZmlsdGVyaW5nXG4gICAgICAgIC8vIENvcHkgdGhlIHZhbHVlcyB0byBiZSBzZW50IHRvIHRoZSB1c2VyIGFzICckZGF0YScgYmVmb3JlIHNlcnZpY2VjYWxsXG4gICAgICAgIHRoaXMuZm9ybS5mb3JtRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmllbGRTZWxlY3RvciA9ICdkaXZbbmFtZT0nICsgZmllbGQubmFtZSArICddIGlucHV0JztcbiAgICAgICAgICAgIGNvbnN0ICRlbCA9IHRoaXMuZm9ybS4kZWxlbWVudDtcbiAgICAgICAgICAgIGxldCBmaWVsZEVsZTtcbiAgICAgICAgICAgIGlmICgoZmllbGQud2lkZ2V0dHlwZSA9PT0gRm9ybVdpZGdldFR5cGUuQVVUT0NPTVBMRVRFIHx8IGZpZWxkLndpZGdldHR5cGUgPT09IEZvcm1XaWRnZXRUeXBlLlRZUEVBSEVBRCkgJiYgJGVsKSB7XG4gICAgICAgICAgICAgICAgZmllbGRFbGUgPSAkZWwuZmluZChmaWVsZFNlbGVjdG9yKTtcbiAgICAgICAgICAgICAgICBpZiAoIWZpZWxkWydpcy1yYW5nZSddKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFNb2RlbFtmaWVsZC5maWVsZF0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAndmFsdWUnOiBpc0RlZmluZWQoZmllbGQudmFsdWUpID8gZmllbGQudmFsdWUgOiBmaWVsZEVsZS52YWwoKSAvLyBGb3IgYXV0b2NvbXBsZXRlLCBzZXQgdGhlIGRhdGF2YWx1ZS4gSWYgbm90IHByZXNlbnQsIHNldCBxdWVyeSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFNb2RlbFtmaWVsZC5maWVsZF0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnbWluVmFsdWUnOiAgaXNEZWZpbmVkKGZpZWxkLm1pblZhbHVlKSA/IGZpZWxkLm1pblZhbHVlIDogZmllbGRFbGUuZmlyc3QoKS52YWwoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdtYXhWYWx1ZSc6ICBpc0RlZmluZWQoZmllbGQubWF4VmFsdWUpID8gZmllbGQubWF4VmFsdWUgOiBmaWVsZEVsZS5sYXN0KCkudmFsKClcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFmaWVsZFsnaXMtcmFuZ2UnXSkge1xuICAgICAgICAgICAgICAgIGRhdGFNb2RlbFtmaWVsZC5maWVsZF0gPSB7XG4gICAgICAgICAgICAgICAgICAgICd2YWx1ZSc6IGZpZWxkLnZhbHVlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YU1vZGVsW2ZpZWxkLmZpZWxkXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgJ21pblZhbHVlJzogZmllbGQubWluVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICdtYXhWYWx1ZSc6IGZpZWxkLm1heFZhbHVlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8qUGVyZm9ybSB0aGlzIGZ1bmN0aW9uIGZvciB0aGUgZXZlbnQgb25CZWZvcmVzZXJ2aWNlY2FsbCovXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gdGhpcy5mb3JtLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZXNlcnZpY2VjYWxsJywgeyRkYXRhOiBkYXRhTW9kZWx9KTtcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1ZhbGlkICYmIGlzVmFsaWQuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0udG9nZ2xlTWVzc2FnZSh0cnVlLCBpc1ZhbGlkLmVycm9yLCAnZXJyb3InLCAnRVJST1InKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKlVwZGF0ZSB0aGVzZSB2YWx1ZXMgaW4gdGhlIGZvcm1GaWVsZHMgd2l0aCBuZXcgcmVmZXJlbmNlLCBpbm9yZGVyIHRvIG1haW50YWluIHRoZSBVSSB2YWx1ZXMqL1xuICAgICAgICAgICAgdGhpcy5mb3JtLmZvcm1GaWVsZHMuZm9yRWFjaChmaWx0ZXJGaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXJGaWVsZFsnaXMtcmFuZ2UnXSkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJGaWVsZC5fdmFsdWUgPSBkYXRhTW9kZWxbZmlsdGVyRmllbGQuZmllbGRdLnZhbHVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckZpZWxkLl9taW5WYWx1ZSA9IGRhdGFNb2RlbFtmaWx0ZXJGaWVsZC5maWVsZF0ubWluVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckZpZWxkLl9tYXhWYWx1ZSA9IGRhdGFNb2RlbFtmaWx0ZXJGaWVsZC5maWVsZF0ubWF4VmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGVyci5tZXNzYWdlID09PSAnQWJvcnQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qIENvbnN0cnVjdCB0aGUgZm9ybUZpZWxkcyBWYXJpYWJsZSB0byBzZW5kIGl0IHRvIHRoZSBxdWVyeUJ1aWxkZXIgKi9cbiAgICAgICAgdGhpcy5mb3JtLmZvcm1GaWVsZHMuZm9yRWFjaChmaWx0ZXJGaWVsZCA9PiB7XG4gICAgICAgICAgICBsZXQgZmllbGRWYWx1ZTtcbiAgICAgICAgICAgIGxldCBtYXRjaE1vZGU7XG4gICAgICAgICAgICBsZXQgY29sTmFtZSAgPSBmaWx0ZXJGaWVsZC5maWVsZDtcbiAgICAgICAgICAgIGNvbnN0IG1pblZhbHVlID0gZmlsdGVyRmllbGQuX21pblZhbHVlO1xuICAgICAgICAgICAgY29uc3QgbWF4dmFsdWUgPSBmaWx0ZXJGaWVsZC5fbWF4VmFsdWU7XG4gICAgICAgICAgICAvKiBpZiBmaWVsZCBpcyBwYXJ0IG9mIGEgcmVsYXRlZCBlbnRpdHksIGNvbHVtbiBuYW1lIHdpbGwgYmUgJ2VudGl0eS5maWVsZE5hbWUnICovXG4gICAgICAgICAgICBpZiAoZmlsdGVyRmllbGRbJ2lzLXJlbGF0ZWQnXSkge1xuICAgICAgICAgICAgICAgIGNvbE5hbWUgKz0gJy4nICsgZmlsdGVyRmllbGRbJ2xvb2t1cC1maWVsZCddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpbHRlckZpZWxkWydpcy1yYW5nZSddKSB7XG4gICAgICAgICAgICAgICAgLypCYXNlZCBvbiB0aGUgbWluIGFuZCBtYXggdmFsdWVzLCBkZWNpZGUgdGhlIG1hdGNobW9kZSBjb25kaXRpb24qL1xuICAgICAgICAgICAgICAgIGZpZWxkVmFsdWUgPSBnZXRSYW5nZUZpZWxkVmFsdWUobWluVmFsdWUsIG1heHZhbHVlKTtcbiAgICAgICAgICAgICAgICBtYXRjaE1vZGUgID0gZ2V0UmFuZ2VNYXRjaE1vZGUobWluVmFsdWUsIG1heHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNEZWZpbmVkKGZpZWxkVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckZpZWxkc1tjb2xOYW1lXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICd2YWx1ZScgICAgIDogZmllbGRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdtYXRjaE1vZGUnIDogbWF0Y2hNb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2xvZ2ljYWxPcCcgOiAnQU5EJ1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChmaWx0ZXJGaWVsZC53aWRnZXR0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgRm9ybVdpZGdldFR5cGUuU0VMRUNUOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIEZvcm1XaWRnZXRUeXBlLlJBRElPU0VUOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdldEVuYWJsZUVtcHR5RmlsdGVyKHRoaXMuZm9ybS5lbmFibGVlbXB0eWZpbHRlcikgJiYgZmlsdGVyRmllbGQuX3ZhbHVlID09PSBGSUxURVJfQ09OU1RBTlRTLkVNUFRZX0tFWSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoTW9kZSAgPSBnZXRFbXB0eU1hdGNoTW9kZSh0aGlzLmZvcm0uZW5hYmxlZW1wdHlmaWx0ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkVmFsdWUgPSBmaWx0ZXJGaWVsZC5fdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJGaWVsZC50eXBlID09PSBEYXRhVHlwZS5CT09MRUFOKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0RlZmluZWQoZmlsdGVyRmllbGQuX3ZhbHVlKSAmJiBmaWx0ZXJGaWVsZC5fdmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZFZhbHVlID0gSlNPTi5wYXJzZShmaWx0ZXJGaWVsZC5fdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRWYWx1ZSA9IGZpbHRlckZpZWxkLl92YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBGb3JtV2lkZ2V0VHlwZS5DSEVDS0JPWFNFVDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBGb3JtV2lkZ2V0VHlwZS5DSElQUzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJGaWVsZC5fdmFsdWUgJiYgZmlsdGVyRmllbGQuX3ZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkVmFsdWUgPSBmaWx0ZXJGaWVsZC5fdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBGb3JtV2lkZ2V0VHlwZS5DSEVDS0JPWDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBGb3JtV2lkZ2V0VHlwZS5UT0dHTEU6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNEZWZpbmVkKGZpbHRlckZpZWxkLl92YWx1ZSkgJiYgZmlsdGVyRmllbGQuX3ZhbHVlICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkVmFsdWUgPSBmaWx0ZXJGaWVsZC50eXBlID09PSBEYXRhVHlwZS5CT09MRUFOID8gSlNPTi5wYXJzZShmaWx0ZXJGaWVsZC5fdmFsdWUpIDogZmlsdGVyRmllbGQuX3ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZFZhbHVlID0gZmlsdGVyRmllbGQuX3ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc0RlZmluZWQoZmllbGRWYWx1ZSkgJiYgZmllbGRWYWx1ZSAhPT0gJycgJiYgZmllbGRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJGaWVsZHNbY29sTmFtZV0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoTW9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyRmllbGRzW2NvbE5hbWVdLm1hdGNoTW9kZSA9IG1hdGNoTW9kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyRmllbGQudHlwZSA9PT0gRGF0YVR5cGUuU1RSSU5HIHx8IGZpbHRlckZpZWxkLmlzUmVsYXRlZCkgeyAvLyBPbmx5IGZvciBzdHJpbmcgdHlwZXMgYW5kIHJlbGF0ZWQgZmllbGRzLCBjdXN0b20gbWF0Y2ggbW9kZXMgYXJlIGVuYWJsZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJGaWVsZHNbY29sTmFtZV0ubWF0Y2hNb2RlID0gbWF0Y2hNb2RlIHx8IGZpbHRlckZpZWxkLm1hdGNobW9kZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX01BVENIX01PREUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckZpZWxkc1tjb2xOYW1lXS52YWx1ZSAgICAgPSBmaWVsZFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJGaWVsZHNbY29sTmFtZV0ubG9naWNhbE9wID0gJ0FORCc7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckZpZWxkc1tjb2xOYW1lXS50eXBlID0gZmlsdGVyRmllbGQudHlwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmV4cG9ydFR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcm0uZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkRPV05MT0FELCB7XG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBtYXRjaE1vZGUgOiAnYW55d2hlcmVpZ25vcmVjYXNlJyxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyRmllbGRzIDogZmlsdGVyRmllbGRzLFxuICAgICAgICAgICAgICAgICAgICBvcmRlckJ5IDogb3JkZXJCeSxcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0VHlwZSA6IG9wdGlvbnMuZXhwb3J0VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgbG9naWNhbE9wIDogJ0FORCcsXG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydFNpemUgOiBvcHRpb25zLmV4cG9ydFNpemUsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkcyA6IG9wdGlvbnMuZmllbGRzLFxuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogb3B0aW9ucy5maWxlTmFtZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkxJU1RfUkVDT1JEUywge1xuICAgICAgICAgICAgZmlsdGVyRmllbGRzIDogZmlsdGVyRmllbGRzLFxuICAgICAgICAgICAgb3JkZXJCeSA6IG9yZGVyQnksXG4gICAgICAgICAgICBwYWdlIDogcGFnZSxcbiAgICAgICAgICAgIHBhZ2VzaXplIDogdGhpcy5mb3JtLnBhZ2VzaXplIHx8IDIwLFxuICAgICAgICAgICAgc2tpcERhdGFTZXRVcGRhdGUgOiB0cnVlLCAvLyBkb250IHVwZGF0ZSB0aGUgYWN0dWFsIHZhcmlhYmxlIGRhdGFzZXQsXG4gICAgICAgICAgICBpbkZsaWdodEJlaGF2aW9yIDogJ2V4ZWN1dGVBbGwnXG4gICAgICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICB0aGlzLmZvcm0ucGFnaW5hdGlvbiA9IHJlc3BvbnNlLnBhZ2luYXRpb247XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgLy8gZGlzYWJsZSByZWFkb25seSBhbmQgc2hvdyB0aGUgYXBwcm9wcmlhdGUgZXJyb3JcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0udG9nZ2xlTWVzc2FnZSh0cnVlLCBkYXRhLmVycm9yLCAnZXJyb3InLCAnRVJST1InKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0ub25SZXN1bHRDYihkYXRhLCBmYWxzZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX29wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgICdwYWdlJzogcGFnZSxcbiAgICAgICAgICAgICAgICAgICAgJ29yZGVyQnknOiBvcmRlckJ5XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucmVzdWx0ID0gZ2V0Q2xvbmVkT2JqZWN0KGRhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5vblJlc3VsdENiKGRhdGEsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5yZXN1bHQ7XG4gICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS50b2dnbGVNZXNzYWdlKHRydWUsIGVycm9yLCAnZXJyb3InLCAnRVJST1InKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5vblJlc3VsdENiKGVycm9yLCBmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENhbGxzIHRoZSBmaWx0ZXIgZnVuY3Rpb24gaWYgZGVmYXVsdCB2YWx1ZXMgYXJlIHByZXNlbnRcbiAgICBmaWx0ZXJPbkRlZmF1bHQoKSB7XG4gICAgICAgIC8qQ2hlY2sgaWYgZGVmYXVsdCB2YWx1ZSBpcyBwcmVzZW50IGZvciBhbnkgZmlsdGVyIGZpZWxkKi9cbiAgICAgICAgY29uc3QgZGVmYXVsdE9iaiA9IGZpbmQodGhpcy5mb3JtLmZvcm1GaWVsZHMsIG9iaiA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaXNEZWZpbmVkKG9iai52YWx1ZSkgfHwgaXNEZWZpbmVkKG9iai5taW5WYWx1ZSkgfHwgaXNEZWZpbmVkKG9iai5tYXhWYWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvKklmIGRlZmF1bHQgdmFsdWUgZXhpc3RzIGFuZCBkYXRhIGlzIGxvYWRlZCwgYXBwbHkgdGhlIGZpbHRlciovXG4gICAgICAgIGlmIChkZWZhdWx0T2JqKSB7XG4gICAgICAgICAgICB0aGlzLl9maWx0ZXIodGhpcy5fb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWdpc3RlckZvcm1XaWRnZXQod2lkZ2V0KSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB3aWRnZXQua2V5IHx8IHdpZGdldC5uYW1lO1xuICAgICAgICB0aGlzLmZvcm0uZmlsdGVyV2lkZ2V0c1tuYW1lXSA9IHdpZGdldDtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDYW5jZWwgZGVib3VuY2VkIGZ1bmN0aW9uXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXIgJiYgKHRoaXMuX2ZpbHRlciBhcyBhbnkpLmNhbmNlbCkge1xuICAgICAgICAgICAgKHRoaXMuX2ZpbHRlciBhcyBhbnkpLmNhbmNlbCgpO1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVyID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ2xlYXIgZm9ybSByZWZlcmVuY2VcbiAgICAgICAgdGhpcy5mb3JtID0gbnVsbDtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG51bGw7XG4gICAgICAgIHRoaXMub3JkZXJCeSA9IG51bGw7XG4gICAgfVxufVxuIl19
|
|
@@ -467,6 +467,15 @@ export class LiveFormDirective {
|
|
|
467
467
|
this.form.onResultCb(response.result, response.status, event);
|
|
468
468
|
});
|
|
469
469
|
}
|
|
470
|
+
ngOnDestroy() {
|
|
471
|
+
// MEMORY LEAK FIX: Cancel debounced function
|
|
472
|
+
if (this._debouncedSavePrevDataValues && this._debouncedSavePrevDataValues.cancel) {
|
|
473
|
+
this._debouncedSavePrevDataValues.cancel();
|
|
474
|
+
this._debouncedSavePrevDataValues = null;
|
|
475
|
+
}
|
|
476
|
+
// MEMORY LEAK FIX: Clear form reference
|
|
477
|
+
this.form = null;
|
|
478
|
+
}
|
|
470
479
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LiveFormDirective, deps: [{ token: FormComponent, self: true }, { token: i1.LiveTableComponent, optional: true }, { token: i2.ToDatePipe }, { token: i3.AbstractDialogService }, { token: 'formlayout', attribute: true }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
471
480
|
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: LiveFormDirective, isStandalone: true, selector: "[wmLiveForm]", host: { listeners: { "keydown": "onKeydownHandler($event)" } }, ngImport: i0 }); }
|
|
472
481
|
}
|
|
@@ -490,4 +499,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
490
499
|
type: HostListener,
|
|
491
500
|
args: ['keydown', ['$event']]
|
|
492
501
|
}] } });
|
|
493
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS1mb3JtLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL2Zvcm0vc3JjL2xpdmUtZm9ybS9saXZlLWZvcm0uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzRixPQUFPLEVBQUUsVUFBVSxFQUFFLHFCQUFxQixFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdEwsT0FBTyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSx5QkFBeUIsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVNLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXBFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFDLE1BQU0sV0FBVyxDQUFDOzs7OztBQUVoRyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUFDLElBQUksSUFBSSxDQUFD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eyBEaXJlY3RpdmUsIEluamVjdCwgT3B0aW9uYWwsIFNlbGYsIEF0dHJpYnV0ZSwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7ICRhcHBEaWdlc3QsIEFic3RyYWN0RGlhbG9nU2VydmljZSwgRGF0YVNvdXJjZSwgRGF0YVR5cGUsIGRlYm91bmNlLCBnZXRDbG9uZWRPYmplY3QsIGdldEZpbGVzLCBnZXRWYWxpZERhdGVPYmplY3QsIGlzRGF0ZVRpbWVUeXBlLCBpc0RlZmluZWQsIGlzRW1wdHlPYmplY3QgfSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQgeyBBTExGSUVMRFMsIGFwcGx5RmlsdGVyT25GaWVsZCwgZmV0Y2hSZWxhdGVkRmllbGREYXRhLCBnZXREaXN0aW5jdFZhbHVlc0ZvckZpZWxkLCBpc0RhdGFTZXRXaWRnZXQsIExpdmVfT3BlcmF0aW9ucywgcGFyc2VWYWx1ZUJ5VHlwZSwgcGVyZm9ybURhdGFPcGVyYXRpb24sIFRvRGF0ZVBpcGUgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcbmltcG9ydCB7IExpdmVUYWJsZUNvbXBvbmVudCB9IGZyb20gJ0B3bS9jb21wb25lbnRzL2RhdGEvbGl2ZS10YWJsZSc7XG5cbmltcG9ydCB7IHJlZ2lzdGVyTGl2ZUZvcm1Qcm9wcyB9IGZyb20gJy4uL2Zvcm0ucHJvcHMnO1xuaW1wb3J0IHsgRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0uY29tcG9uZW50JztcbmltcG9ydCB7Zm9yRWFjaCwgZnJvbVBhaXJzLCBnZXQsIGlzRW1wdHksIGlzRXF1YWwsIGlzU3RyaW5nLCBtYXAsIHNvbWUsIHNwbGl0fSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmNvbnN0IGlzVGltZVR5cGUgPSBmaWVsZCA9PiBmaWVsZC53aWRnZXR0eXBlID09PSBEYXRhVHlwZS5USU1FIHx8IChmaWVsZC50eXBlID09PSBEYXRhVHlwZS5USU1FICYmICFmaWVsZC53aWRnZXR0eXBlKTtcbmNvbnN0IGdldFZhbGlkVGltZSA9IHZhbCA9PiB7XG4gICAgaWYgKHZhbCkge1xuICAgICAgICBjb25zdCBkYXRlID0gKG5ldyBEYXRlKCkpLnRvRGF0ZVN0cmluZygpO1xuICAgICAgICByZXR1cm4gKG5ldyBEYXRlKGAke2RhdGV9ICR7dmFsfWApKS5nZXRUaW1lKCk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ1t3bUxpdmVGb3JtXSdcbn0pXG5leHBvcnQgY2xhc3MgTGl2ZUZvcm1EaXJlY3RpdmUge1xuICAgIHN0YXRpYyAgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJMaXZlRm9ybVByb3BzKCk7XG4gICAgcHJpdmF0ZSBfdHJpZ2dlcmVkQnlVc2VyOiBib29sZWFuO1xuICAgIHByaXZhdGUgX2RlYm91bmNlZFNhdmVQcmV2RGF0YVZhbHVlcyA9IGRlYm91bmNlKCgpID0+IHtcbiAgICAgICAgdGhpcy5zYXZlUHJldkRhdGFWYWx1ZXMoKTtcbiAgICB9LCAyNTApO1xuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pIG9uS2V5ZG93bkhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgdGhpcy5fdHJpZ2dlcmVkQnlVc2VyID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQFNlbGYoKSBASW5qZWN0KEZvcm1Db21wb25lbnQpIHByaXZhdGUgZm9ybSxcbiAgICAgICAgQE9wdGlvbmFsKCkgbGl2ZVRhYmxlOiBMaXZlVGFibGVDb21wb25lbnQsXG4gICAgICAgIHB1YmxpYyBkYXRlUGlwZTogVG9EYXRlUGlwZSxcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBBYnN0cmFjdERpYWxvZ1NlcnZpY2UsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2Zvcm1sYXlvdXQnKSBmb3JtbGF5b3V0OiBzdHJpbmdcbiAgICApIHtcbiAgICAgICAgLy8gSWYgcGFyZW50IGxpdmUgdGFibGUgaXMgcHJlc2VudCBhbmQgdGhpcyBmb3JtIGlzIGZpcnN0IGNoaWxkIG9mIGxpdmUgdGFibGUsIHNldCB0aGlzIGZvcm0gaW5zdGFuY2Ugb24gbGl2ZXRhYmxlXG4gICAgICAgIGlmIChsaXZlVGFibGUpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5mb3JtLnBhcmVudEZvcm0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0uX2xpdmVUYWJsZVBhcmVudCA9IGxpdmVUYWJsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZm9ybS5pc0xheW91dERpYWxvZyA9IGxpdmVUYWJsZS5pc0xheW91dERpYWxvZztcbiAgICAgICAgICAgIGxpdmVUYWJsZS5vbkZvcm1SZWFkeSh0aGlzLmZvcm0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb3JtLmlzTGF5b3V0RGlhbG9nID0gZm9ybWxheW91dCA9PT0gJ2RpYWxvZyc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ1VEIG9wZXJhdGlvbnNcbiAgICAgICAgZm9ybS5jYW5jZWwgPSB0aGlzLmNhbmNlbC5iaW5kKHRoaXMpO1xuICAgICAgICBmb3JtLnJlc2V0ID0gdGhpcy5yZXNldC5iaW5kKHRoaXMpO1xuICAgICAgICBmb3JtLmRlbGV0ZSA9IHRoaXMuZGVsZXRlLmJpbmQodGhpcyk7XG4gICAgICAgIGZvcm0uc2F2ZSA9IHRoaXMuc2F2ZS5iaW5kKHRoaXMpO1xuICAgICAgICBmb3JtLnNhdmVBbmROZXcgPSB0aGlzLnNhdmVBbmROZXcuYmluZCh0aGlzKTtcbiAgICAgICAgZm9ybS5zYXZlQW5kVmlldyA9IHRoaXMuc2F2ZUFuZFZpZXcuYmluZCh0aGlzKTtcblxuICAgICAgICBmb3JtLnNldFByaW1hcnlLZXkgPSB0aGlzLnNldFByaW1hcnlLZXkuYmluZCh0aGlzKTtcbiAgICAgICAgZm9ybS5jb25zdHJ1Y3REYXRhT2JqZWN0ID0gdGhpcy5jb25zdHJ1Y3REYXRhT2JqZWN0LmJpbmQodGhpcyk7XG4gICAgICAgIGZvcm0uY2hhbmdlRGF0YU9iamVjdCA9IHRoaXMuc2V0Rm9ybURhdGEuYmluZCh0aGlzKTtcbiAgICAgICAgZm9ybS5zZXRGb3JtRGF0YSA9IHRoaXMuc2V0Rm9ybURhdGEuYmluZCh0aGlzKTtcbiAgICAgICAgZm9ybS5maW5kT3BlcmF0aW9uVHlwZSA9IHRoaXMuZmluZE9wZXJhdGlvblR5cGUuYmluZCh0aGlzKTtcbiAgICAgICAgZm9ybS5jbGVhckRhdGEgPSB0aGlzLmNsZWFyRGF0YS5iaW5kKHRoaXMpO1xuICAgICAgICBmb3JtLm9uRmllbGREZWZhdWx0VmFsdWVDaGFuZ2UgPSB0aGlzLm9uRmllbGREZWZhdWx0VmFsdWVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgZm9ybS5vbkRhdGFTb3VyY2VDaGFuZ2UgPSB0aGlzLm9uRGF0YVNvdXJjZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICBmb3JtLm9uRmllbGRWYWx1ZUNoYW5nZSA9IHRoaXMub25GaWVsZFZhbHVlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIGZvcm0uc3VibWl0Rm9ybSA9IHRoaXMuc3VibWl0Rm9ybS5iaW5kKHRoaXMpO1xuICAgICAgICBmb3JtLmZvcm1fcmVnaXN0ZXJGb3JtRmllbGRzID0gZm9ybS5yZWdpc3RlckZvcm1GaWVsZHM7XG4gICAgICAgIGZvcm0ucmVnaXN0ZXJGb3JtRmllbGRzID0gdGhpcy5yZWdpc3RlckZvcm1GaWVsZHMuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICAvKlxuICAgIFdNUzoxODU4M1xuICAgIE92ZXJyaWRpbmcgJ3JlZ2lzdGVyRm9ybUZpZWxkcycgZm9yIGxpdmVGb3JtcyxcbiAgICBPbiBFYWNoIGZpZWxkIGFkZGVkLCBjaGVjayBpZiB0aGUgZGF0YVNvdXJjZSBpcyB1cGRhdGVkIG9yIG5vdFxuICAgIGlmIHRoZSBmaWVsZCBpcyBhZGRlZCBhZnRlciB0aGUgZGF0YVNvdXJjZSBpcyB1cGRhdGVkIGF0IExpdmVGb3JtLCByZXRyaWdnZXJcbiAgICAqL1xuICAgIHJlZ2lzdGVyRm9ybUZpZWxkcyhmb3JtRmllbGQpIHtcbiAgICAgICAgY29uc3QgZm9ybUZpZWxkcyA9IHRoaXMuZm9ybS5nZXRGb3JtRmllbGRzKCk7XG4gICAgICAgIHRoaXMuZm9ybS5mb3JtX3JlZ2lzdGVyRm9ybUZpZWxkcyhmb3JtRmllbGQpO1xuICAgICAgICBpZiAodGhpcy5mb3JtLmlzRGF0YVNvdXJjZVVwZGF0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUZpZWxkT25EYXRhU291cmNlQ2hhbmdlKGZvcm1GaWVsZCwgZm9ybUZpZWxkcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJpdmF0ZSBfdXBkYXRlRmllbGRPbkRhdGFTb3VyY2VDaGFuZ2UoZmllbGQsIGZvcm1GaWVsZHMpIHtcbiAgICAgICAgaWYgKCFmaWVsZC5pc0RhdGFTZXRCb3VuZCAmJiBpc0RhdGFTZXRXaWRnZXQoZmllbGQud2lkZ2V0dHlwZSkpIHtcbiAgICAgICAgICAgIGlmIChmaWVsZFsnaXMtcmVsYXRlZCddKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuaXNEYXRhU2V0Qm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZldGNoUmVsYXRlZEZpZWxkRGF0YSh0aGlzLmZvcm0uZGF0YXNvdXJjZSwgZmllbGQud2lkZ2V0LCB7XG4gICAgICAgICAgICAgICAgICAgIHJlbGF0ZWRGaWVsZDogZmllbGQua2V5LFxuICAgICAgICAgICAgICAgICAgICBkYXRhZmllbGQ6IEFMTEZJRUxEUyxcbiAgICAgICAgICAgICAgICAgICAgd2lkZ2V0OiAnd2lkZ2V0dHlwZScsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdldERpc3RpbmN0VmFsdWVzRm9yRmllbGQodGhpcy5mb3JtLmRhdGFzb3VyY2UsIGZpZWxkLndpZGdldCwge1xuICAgICAgICAgICAgICAgICAgICB3aWRnZXQ6ICd3aWRnZXR0eXBlJyxcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlZW1wdHlmaWx0ZXI6IHRoaXMuZm9ybS5lbmFibGVlbXB0eWZpbHRlclxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFwcGx5RmlsdGVyT25GaWVsZCh0aGlzLmZvcm0uZGF0YXNvdXJjZSwgZmllbGQud2lkZ2V0LCBmb3JtRmllbGRzLCBmaWVsZC52YWx1ZSwge2lzRmlyc3Q6IHRydWV9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkRhdGFTb3VyY2VDaGFuZ2UoKSB7XG4gICAgICAgIGlmIChnZXQodGhpcy5mb3JtLmZvcm1GaWVsZHMsICdsZW5ndGgnKSkge1xuICAgICAgICAgICAgdGhpcy5mb3JtLmlzRGF0YVNvdXJjZVVwZGF0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvcm1GaWVsZHMgPSB0aGlzLmZvcm0uZ2V0Rm9ybUZpZWxkcygpO1xuICAgICAgICBmb3JtRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlRmllbGRPbkRhdGFTb3VyY2VDaGFuZ2UoZmllbGQsIGZvcm1GaWVsZHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkZpZWxkRGVmYXVsdFZhbHVlQ2hhbmdlKGZpZWxkLCBudikge1xuICAgICAgICAvLyBJbiBFZGl0LCBkbyAgbm90IHNldCBkZWZhdWx0IHZhbHVlc1xuICAgICAgICBpZiAodGhpcy5mb3JtLm9wZXJhdGlvblR5cGUgPT09ICd1cGRhdGUnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2V0IHRoZSBkZWZhdWx0IHZhbHVlIG9ubHkgaWYgaXQgZXhpc3RzLlxuICAgICAgICBpZiAoaXNEZWZpbmVkKG52KSAmJiBudiAhPT0gbnVsbCAmJiBudiAhPT0gJycgJiYgbnYgIT09ICdudWxsJykge1xuICAgICAgICAgICAgZmllbGQudmFsdWUgPSBwYXJzZVZhbHVlQnlUeXBlKG52LCBmaWVsZC50eXBlLCBmaWVsZC53aWRnZXR0eXBlLCBmaWVsZC50cmFpbGluZ3plcm8pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmllbGQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXTVMtMjI0MzQ6IEZvciBkZWZhdWx0IHZhbHVlIHNldCBvbiBpbmRpdmlkdWFsIGZvcm0gZmllbGRzLCBkbyBub3QgbWFyayB0aGUgZm9ybSBhcyBkaXJ0eS5cbiAgICAgICAgaWYgKHRoaXMuZm9ybS5kaXJ0eSAmJiAhdGhpcy5fdHJpZ2dlcmVkQnlVc2VyKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kZWJvdW5jZWRTYXZlUHJldkRhdGFWYWx1ZXMoKTtcbiAgICB9XG5cbiAgICBvbkZpZWxkVmFsdWVDaGFuZ2UoZmllbGQsIG52KSB7XG4gICAgICAgIGFwcGx5RmlsdGVyT25GaWVsZCh0aGlzLmZvcm0uZGF0YXNvdXJjZSwgZmllbGQud2lkZ2V0LCB0aGlzLmZvcm0uZm9ybUZpZWxkcywgbnYpO1xuICAgIH1cblxuICAgIGdldEJsb2JVUkwoZGF0YU9iaiwga2V5LCB2YWx1ZSkge1xuICAgICAgICBsZXQgaHJlZiA9ICcnO1xuICAgICAgICBsZXQgcHJpbWFyeUtleXM7XG4gICAgICAgIGxldCBwcmltYXJ5S2V5O1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCAhdGhpcy5mb3JtLmRhdGFzb3VyY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBocmVmO1xuICAgICAgICB9XG4gICAgICAgIHByaW1hcnlLZXlzID0gdGhpcy5mb3JtLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfUFJJTUFSWV9LRVkpIHx8IFtdO1xuICAgICAgICBwcmltYXJ5S2V5ICA9IGRhdGFPYmpbcHJpbWFyeUtleXNbMF1dO1xuICAgICAgICBocmVmICs9IHRoaXMuZm9ybS5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX0JMT0JfVVJMLCB7XG4gICAgICAgICAgICBwcmltYXJ5VmFsdWU6IHByaW1hcnlLZXksXG4gICAgICAgICAgICBjb2x1bW5OYW1lOiBrZXlcbiAgICAgICAgfSk7XG4gICAgICAgIGhyZWYgKz0gJz8nICsgTWF0aC5yYW5kb20oKTtcbiAgICAgICAgcmV0dXJuIGhyZWY7XG4gICAgfVxuXG4gICAgc2V0Rm9ybURhdGEoZGF0YU9iaiwgZm9ybUZpZWxkcz8pIHtcbiAgICAgICAgaWYgKCFkYXRhT2JqKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9ybUZpZWxkcyA9IGZvcm1GaWVsZHMgfHwgdGhpcy5mb3JtLmZvcm1GaWVsZHM7XG4gICAgICAgIGZvcm1GaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGdldChkYXRhT2JqLCBmaWVsZC5rZXkgfHwgZmllbGQubmFtZSk7XG4gICAgICAgICAgICBpZiAoaXNUaW1lVHlwZShmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IGdldFZhbGlkVGltZSh2YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09IERhdGFUeXBlLkJMT0IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucmVzZXRGaWxlVXBsb2FkV2lkZ2V0KGZpZWxkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBmaWVsZC5ocmVmICA9IHRoaXMuZ2V0QmxvYlVSTChkYXRhT2JqLCBmaWVsZC5rZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IGlzU3RyaW5nKHZhbHVlKSA/ICcnIDogdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5zZXRGaWVsZFZhbHVlKGZpZWxkLCBkYXRhT2JqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2F2ZVByZXZEYXRhVmFsdWVzKCk7XG4gICAgICAgIHRoaXMuZm9ybS5jb25zdHJ1Y3REYXRhT2JqZWN0KCk7XG4gICAgfVxuXG4gICAgb25EYXRhU291cmNlVXBkYXRlKHJlc3BvbnNlLCBuZXdGb3JtLCB1cGRhdGVNb2RlKSB7XG4gICAgICAgIGlmIChuZXdGb3JtKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0ubmV3KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0uc2V0Rm9ybURhdGEocmVzcG9uc2UpO1xuICAgICAgICAgICAgdGhpcy5jbG9zZURpYWxvZygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9ybS5pc1VwZGF0ZU1vZGUgPSBpc0RlZmluZWQodXBkYXRlTW9kZSkgPyB1cGRhdGVNb2RlIDogdHJ1ZTtcbiAgICB9XG5cbiAgICBzYXZlUHJldmZvcm1GaWVsZHMoKSB7XG4gICAgICAgIHRoaXMuZm9ybS5wcmV2Zm9ybUZpZWxkcyA9IGdldENsb25lZE9iamVjdCh0aGlzLmZvcm0uZm9ybUZpZWxkcy5tYXAoZmllbGQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAna2V5JzogZmllbGQua2V5LFxuICAgICAgICAgICAgICAgICd0eXBlJzogZmllbGQudHlwZSxcbiAgICAgICAgICAgICAgICAnd2lkZ2V0dHlwZSc6IGZpZWxkLndpZGdldHR5cGUsXG4gICAgICAgICAgICAgICAgJ291dHB1dGZvcm1hdCc6IGZpZWxkLm91dHB1dGZvcm1hdCxcbiAgICAgICAgICAgICAgICAndmFsdWUnOiBmaWVsZC52YWx1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIGdldFByZXZmb3JtRmllbGRzKCkge1xuICAgICAgICB0aGlzLmZvcm0uZm9ybUZpZWxkcy5tYXAoZmllbGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJldkZpZWxkID0gdGhpcy5mb3JtLnByZXZmb3JtRmllbGRzLmZpbmQocEZpZWxkID0+IHBGaWVsZC5rZXkgPT09IGZpZWxkLmtleSk7XG4gICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHByZXZGaWVsZC52YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0RGF0YU9iamVjdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS5vcGVyYXRpb25UeXBlID09PSBMaXZlX09wZXJhdGlvbnMuSU5TRVJUKSB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRGVmaW5lZCh0aGlzLmZvcm0ucHJldkRhdGFPYmplY3QpICYmICFpc0VtcHR5T2JqZWN0KHRoaXMuZm9ybS5wcmV2RGF0YU9iamVjdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRDbG9uZWRPYmplY3QodGhpcy5mb3JtLnByZXZEYXRhT2JqZWN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMuZm9ybS5mb3JtZGF0YSB8fCB7fSk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0RGF0YU9iamVjdChpc1ByZXZpb3VzRGF0YT8pIHtcbiAgICAgICAgY29uc3QgZGF0YU9iamVjdCA9IHRoaXMuZ2V0RGF0YU9iamVjdCgpO1xuICAgICAgICBjb25zdCBmb3JtTmFtZSA9IHRoaXMuZm9ybS5uYW1lO1xuICAgICAgICBsZXQgZm9ybUZpZWxkcztcbiAgICAgICAgZm9ybUZpZWxkcyA9IGlzUHJldmlvdXNEYXRhID8gdGhpcy5mb3JtLnByZXZmb3JtRmllbGRzIDogdGhpcy5mb3JtLmdldEZvcm1GaWVsZHMoKTtcbiAgICAgICAgZm9ybUZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgIGxldCBkYXRlVGltZSxcbiAgICAgICAgICAgICAgICBmaWVsZFZhbHVlO1xuICAgICAgICAgICAgY29uc3QgZmllbGRUYXJnZXQgPSBzcGxpdChmaWVsZC5rZXksICcuJyk7XG4gICAgICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBmaWVsZFRhcmdldFswXSB8fCBmaWVsZC5rZXk7XG5cbiAgICAgICAgICAgIC8qY29sbGVjdCB0aGUgdmFsdWVzIGZyb20gdGhlIGZpZWxkcyBhbmQgY29uc3RydWN0IHRoZSBvYmplY3QqL1xuICAgICAgICAgICAgLypGb3JtYXQgdGhlIG91dHB1dCBvZiBkYXRlIHRpbWUgd2lkZ2V0cyB0byB0aGUgZ2l2ZW4gb3V0cHV0IGZvcm1hdCovXG4gICAgICAgICAgICBpZiAoKGZpZWxkLndpZGdldHR5cGUgJiYgaXNEYXRlVGltZVR5cGUoZmllbGQud2lkZ2V0dHlwZSkpIHx8IGlzRGF0ZVRpbWVUeXBlKGZpZWxkLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGVUaW1lID0gZ2V0VmFsaWREYXRlT2JqZWN0KGZpZWxkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLm91dHB1dGZvcm1hdCA9PT0gRGF0YVR5cGUuVElNRVNUQU1QIHx8IGZpZWxkLnR5cGUgPT09IERhdGFUeXBlLlRJTUVTVEFNUCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRWYWx1ZSA9IGZpZWxkLnZhbHVlID8gZGF0ZVRpbWUgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLm91dHB1dGZvcm1hdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRWYWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGVUaW1lLCBmaWVsZC5vdXRwdXRmb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRWYWx1ZSA9IGZpZWxkLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09IERhdGFUeXBlLkJMT0IpIHtcbiAgICAgICAgICAgICAgICBmaWVsZFZhbHVlID0gZ2V0RmlsZXMoZm9ybU5hbWUsIGZpZWxkTmFtZSArICdfZm9ybVdpZGdldCcsIGZpZWxkLm11bHRpcGxlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gRGF0YVR5cGUuTElTVCkge1xuICAgICAgICAgICAgICAgIGZpZWxkVmFsdWUgPSBmaWVsZC52YWx1ZSB8fCB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZpZWxkVmFsdWUgPSAoZmllbGQudmFsdWUgPT09IG51bGwgfHwgZmllbGQudmFsdWUgPT09ICcnKSA/IHVuZGVmaW5lZCA6IGZpZWxkLnZhbHVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmllbGRUYXJnZXQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZGF0YU9iamVjdFtmaWVsZE5hbWVdID0gZmllbGRWYWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YU9iamVjdFtmaWVsZE5hbWVdID0gZGF0YU9iamVjdFtmaWVsZE5hbWVdIHx8IHt9O1xuICAgICAgICAgICAgICAgIGRhdGFPYmplY3RbZmllbGROYW1lXVtmaWVsZFRhcmdldFsxXV0gPSBmaWVsZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFpc1ByZXZpb3VzRGF0YSkge1xuICAgICAgICAgICAgdGhpcy5mb3JtLnVwZGF0ZUZvcm1EYXRhT3V0cHV0KGRhdGFPYmplY3QpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5kYXRhb3V0cHV0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhT2JqZWN0O1xuICAgIH1cblxuICAgIHNldFByaW1hcnlLZXkoZmllbGROYW1lKSB7XG4gICAgICAgIC8qU3RvcmUgdGhlIHByaW1hcnkga2V5IG9mIGRhdGEqL1xuICAgICAgICB0aGlzLmZvcm0ucHJpbWFyeUtleSA9IHRoaXMuZm9ybS5wcmltYXJ5S2V5IHx8IFtdO1xuICAgICAgICBpZiAodGhpcy5mb3JtLnByaW1hcnlLZXkuaW5kZXhPZihmaWVsZE5hbWUpID09PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5mb3JtLnByaW1hcnlLZXkucHVzaChmaWVsZE5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZmluZE9wZXJhdGlvblR5cGUoKSB7XG4gICAgICAgIGxldCBvcGVyYXRpb247XG4gICAgICAgIGxldCBpc1ByaW1hcnkgPSBmYWxzZTtcbiAgICAgICAgY29uc3Qgc291cmNlT3BlcmF0aW9uID0gdGhpcy5mb3JtLmRhdGFzb3VyY2UgJiYgdGhpcy5mb3JtLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfT1BFUkFUSU9OX1RZUEUpO1xuICAgICAgICBpZiAoc291cmNlT3BlcmF0aW9uICYmIHNvdXJjZU9wZXJhdGlvbiAhPT0gJ3JlYWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlT3BlcmF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIC8qSWYgT3BlcmF0aW9uVHlwZSBpcyBub3Qgc2V0IHRoZW4gYmFzZWQgb24gdGhlIGZvcm1kYXRhIG9iamVjdCByZXR1cm4gdGhlIG9wZXJhdGlvbiB0eXBlLFxuICAgICAgICAgICAgdGhpcyBjYXNlIG9jY3VycyBvbmx5IGlmIHRoZSBmb3JtIGlzIG91dHNpZGUgYSBsaXZlZ3JpZCovXG4gICAgICAgIC8qSWYgdGhlIGZvcm1kYXRhIG9iamVjdCBoYXMgcHJpbWFyeSBrZXkgdmFsdWUgdGhlbiByZXR1cm4gdXBkYXRlIGVsc2UgaW5zZXJ0Ki9cbiAgICAgICAgaWYgKHRoaXMuZm9ybS5wcmltYXJ5S2V5ICYmICFpc0VtcHR5KHRoaXMuZm9ybS5mb3JtZGF0YSkpIHtcbiAgICAgICAgICAgIC8qSWYgb25seSBvbmUgY29sdW1uIGlzIHByaW1hcnkga2V5Ki9cbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm0ucHJpbWFyeUtleS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mb3JtLmZvcm1kYXRhW3RoaXMuZm9ybS5wcmltYXJ5S2V5WzBdXSkge1xuICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBMaXZlX09wZXJhdGlvbnMuVVBEQVRFO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvKklmIG9ubHkgbm8gY29sdW1uIGlzIHByaW1hcnkga2V5Ki9cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtLnByaW1hcnlLZXkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgZm9yRWFjaCh0aGlzLmZvcm0uZm9ybWRhdGEsICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUHJpbWFyeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoaXNQcmltYXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IExpdmVfT3BlcmF0aW9ucy5VUERBVEU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qSWYgbXVsdGlwbGUgY29sdW1ucyBhcmUgcHJpbWFyeSBrZXkqL1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnkgPSBzb21lKHRoaXMuZm9ybS5wcmltYXJ5S2V5LCAocHJpbWFyeUtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5mb3JtLmZvcm1kYXRhW3ByaW1hcnlLZXldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChpc1ByaW1hcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gTGl2ZV9PcGVyYXRpb25zLlVQREFURTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9wZXJhdGlvbiB8fCBMaXZlX09wZXJhdGlvbnMuSU5TRVJUO1xuICAgIH1cblxuICAgIGdldFByZXZEYXRhVmFsdWVzKCkge1xuICAgICAgICBjb25zdCBwcmV2RGF0YVZhbHVlcyA9IGZyb21QYWlycyhtYXAodGhpcy5mb3JtLnByZXZEYXRhVmFsdWVzLCAoaXRlbSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIFtpdGVtLmtleSwgaXRlbS52YWx1ZV07XG4gICAgICAgIH0pKTsgLy8gQ29udmVydCBvZiBhcnJheSBvZiB2YWx1ZXMgdG8gYW4gb2JqZWN0XG4gICAgICAgIHRoaXMuZm9ybS5mb3JtRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgZmllbGQudmFsdWUgPSBwcmV2RGF0YVZhbHVlc1tmaWVsZC5rZXldIHx8ICcnO1xuICAgICAgICAgICAgZmllbGQucmVzZXREaXNwbGF5SW5wdXQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwcmV2RGF0YVZhbHVlcztcbiAgICB9XG5cbiAgICBzYXZlUHJldkRhdGFWYWx1ZXMoKSB7XG4gICAgICAgIHRoaXMuZm9ybS5wcmV2RGF0YVZhbHVlcyA9IHRoaXMuZm9ybS5mb3JtRmllbGRzLm1hcCgob2JqKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4geydrZXknOiBvYmoua2V5LCAndmFsdWUnOiBvYmoudmFsdWV9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICAgIHRoaXMuZm9ybS50b2dnbGVNZXNzYWdlKGZhbHNlKTtcbiAgICAgICAgdGhpcy5mb3JtLmVtcHR5RGF0YU1vZGVsKCk7XG4gICAgfVxuXG4gICAgc2V0UmVhZG9ubHlGaWVsZHMoKSB7XG4gICAgICAgIHRoaXMuZm9ybS5mb3JtRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgZmllbGQuc2V0UmVhZE9ubHlTdGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXNldCgpIHtcbiAgICAgICAgbGV0IHByZXZEYXRhVmFsdWVzO1xuICAgICAgICB0aGlzLmZvcm0ucmVzZXRGb3JtU3RhdGUoKTtcbiAgICAgICAgcHJldkRhdGFWYWx1ZXMgPSB0aGlzLmdldFByZXZEYXRhVmFsdWVzKCk7XG4gICAgICAgIHRoaXMuZm9ybS5mb3JtRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IERhdGFUeXBlLkJMT0IgfHwgZmllbGQud2lkZ2V0dHlwZSA9PT0gJ3VwbG9hZCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucmVzZXRGaWxlVXBsb2FkV2lkZ2V0KGZpZWxkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBmaWVsZC5ocmVmID0gdGhpcy5nZXRCbG9iVVJMKHByZXZEYXRhVmFsdWVzLCBmaWVsZC5rZXksIGZpZWxkLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpZWxkLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQnKT8ucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWludmFsaWQnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZm9ybS5jb25zdHJ1Y3REYXRhT2JqZWN0KCk7XG4gICAgfVxuXG4gICAgY2xvc2VEaWFsb2coKSB7XG4gICAgICAgIGlmICh0aGlzLmZvcm0uaXNMYXlvdXREaWFsb2cpIHtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jbG9zZSh0aGlzLmZvcm0uZGlhbG9nSWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2FuY2VsKCkge1xuICAgICAgICB0aGlzLmZvcm0uY2xlYXJNZXNzYWdlKCk7XG4gICAgICAgIHRoaXMuZm9ybS5pc1VwZGF0ZU1vZGUgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmZvcm0ucmVzZXQoKTtcbiAgICAgICAgLypTaG93IHRoZSBwcmV2aW91cyBzZWxlY3RlZCBkYXRhKi9cbiAgICAgICAgaWYgKHRoaXMuZm9ybS5pc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmdldFByZXZmb3JtRmllbGRzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb3JtLmlzVXBkYXRlTW9kZSA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5mb3JtLl9saXZlVGFibGVQYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5fbGl2ZVRhYmxlUGFyZW50Lm9uQ2FuY2VsKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgICBXTVMtMTg3NTk6IGRpYWxvZyBjbG9zZSBpcyBjYWxsaW5nIHR3aWNlIGFuZCBkaWFsb2cgb25IaWRkZW4gc3Vic2NyaXB0aW9uIGlzIGNhbGxpbmcgb25jZSBmcm9tIHRoZSBsaWJyYXJ5XG4gICAgICAgICAgICAgIGR1ZSB0byB0aGlzIGlmIHdlIGhhdmUgYW5vdGhlciBkaWFsb2cgaW5zaWRlIGxpdmVmb3JtIGFuZCBpZiB3ZSBjbGljayBvbiBjYW5jZWwgb2Ygc2Vjb25kIGRpYWxvZyB0aGUgbGlicmFyeVxuICAgICAgICAgICAgICBzdWJzY3JpcHRpb24gaXMgY2FsbGluZyBmb3IgYm90aCB0aGUgZGlhbG9ncy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5jbG9zZURpYWxvZygpO1xuICAgICAgICB9XG4gICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICB9XG5cblxuXG4gICAgZGVsZXRlKGNhbGxCYWNrRm4pIHtcbiAgICAgICAgdGhpcy5mb3JtLnJlc2V0Rm9ybVN0YXRlKCk7XG4gICAgICAgIHRoaXMuZm9ybS5vcGVyYXRpb25UeXBlID0gTGl2ZV9PcGVyYXRpb25zLkRFTEVURTtcbiAgICAgICAgdGhpcy5mb3JtLnByZXZEYXRhT2JqZWN0ID0gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMuZm9ybS5mb3JtZGF0YSB8fCB7fSk7XG4gICAgICAgIHRoaXMuZm9ybS5zYXZlKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNhbGxCYWNrRm4pO1xuICAgIH1cblxuICAgIC8vIEZ1bmN0aW9uIHVzZSB0byBzYXZlIHRoZSBmb3JtIGFuZCBvcGVuIG5ldyBmb3JtIGFmdGVyIHNhdmVcbiAgICBzYXZlQW5kTmV3KCkge1xuICAgICAgICB0aGlzLnNhdmUodW5kZWZpbmVkLCB0cnVlLCB0cnVlKTtcbiAgICB9XG4gICAgLy8gRnVuY3Rpb24gdXNlIHRvIHNhdmUgdGhlIGZvcm0gYW5kIG9wZW4gbmV3IGZvcm0gYWZ0ZXIgc2F2ZVxuICAgIHNhdmVBbmRWaWV3KCkge1xuICAgICAgICB0aGlzLnNhdmUodW5kZWZpbmVkLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgc3VibWl0Rm9ybSgkZXZlbnQpIHtcbiAgICAgICAgdGhpcy5zYXZlKCRldmVudCk7XG4gICAgfVxuXG4gICAgc2F2ZShldmVudD8sIHVwZGF0ZU1vZGU/LCBuZXdGb3JtPykge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybS5kYXRhc291cmNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGRhdGEsIHByZXZEYXRhLCBvcGVyYXRpb25UeXBlLCBpc1ZhbGlkO1xuICAgICAgICBjb25zdCByZXF1ZXN0RGF0YTogYW55ID0ge307XG5cbiAgICAgICAgb3BlcmF0aW9uVHlwZSA9IHRoaXMuZm9ybS5vcGVyYXRpb25UeXBlID0gdGhpcy5mb3JtLm9wZXJhdGlvblR5cGUgfHwgdGhpcy5maW5kT3BlcmF0aW9uVHlwZSgpO1xuXG4gICAgICAgIC8vIERpc2FibGUgdGhlIGZvcm0gc3VibWl0IGlmIGZvcm0gaXMgaW4gaW52YWxpZCBzdGF0ZS5cbiAgICAgICAgaWYgKHRoaXMuZm9ybS52YWxpZGF0ZUZpZWxkc09uU3VibWl0KCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGEgPSBnZXRDbG9uZWRPYmplY3QodGhpcy5mb3JtLmNvbnN0cnVjdERhdGFPYmplY3QoKSk7XG4gICAgICAgIHByZXZEYXRhID0gdGhpcy5mb3JtLnByZXZmb3JtRmllbGRzID8gdGhpcy5mb3JtLmNvbnN0cnVjdERhdGFPYmplY3QodHJ1ZSkgOiBkYXRhO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gdGhpcy5mb3JtLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZXNlcnZpY2VjYWxsJywgeyRldmVudDogZXZlbnQsICRvcGVyYXRpb246IHRoaXMuZm9ybS5vcGVyYXRpb25UeXBlLCAkZGF0YTogZGF0YSwgb3B0aW9uczogcmVxdWVzdERhdGF9KTtcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1ZhbGlkICYmIGlzVmFsaWQuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0udG9nZ2xlTWVzc2FnZSh0cnVlLCBpc1ZhbGlkLmVycm9yLCAnZXJyb3InKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGVyci5tZXNzYWdlID09PSAnQWJvcnQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgb3BlcmF0aW9uIGlzIHVwZGF0ZSwgZm9ybSBpcyBub3QgdG91Y2hlZCBhbmQgY3VycmVudCBkYXRhIGFuZCBwcmV2aW91cyBkYXRhIGlzIHNhbWUsIFNob3cgbm8gY2hhbmdlcyBkZXRlY3RlZCBtZXNzYWdlXG4gICAgICAgIGlmICh0aGlzLmZvcm0ub3BlcmF0aW9uVHlwZSA9PT0gTGl2ZV9PcGVyYXRpb25zLlVQREFURSAmJiB0aGlzLmZvcm0ubmdmb3JtICYmIHRoaXMuZm9ybS5uZ2Zvcm0ucHJpc3RpbmUgJiZcbiAgICAgICAgICAgICh0aGlzLmZvcm0uaXNTZWxlY3RlZCAmJiBpc0VxdWFsKGRhdGEsIHByZXZEYXRhKSkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS50b2dnbGVNZXNzYWdlKHRydWUsIHRoaXMuZm9ybS5hcHBMb2NhbGUuTUVTU0FHRV9OT19DSEFOR0VTLCAnaW5mbycsICcnKTtcbiAgICAgICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcXVlc3REYXRhLnJvdyA9IGRhdGE7XG4gICAgICAgIHJlcXVlc3REYXRhLnRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIHJlcXVlc3REYXRhLnNraXBOb3RpZmljYXRpb24gPSB0cnVlO1xuXG4gICAgICAgIGlmIChvcGVyYXRpb25UeXBlID09PSBMaXZlX09wZXJhdGlvbnMuVVBEQVRFKSB7XG4gICAgICAgICAgICByZXF1ZXN0RGF0YS5yb3dEYXRhID0gdGhpcy5mb3JtLmZvcm1kYXRhO1xuICAgICAgICAgICAgcmVxdWVzdERhdGEucHJldkRhdGEgPSBwcmV2RGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcmZvcm1EYXRhT3BlcmF0aW9uKHRoaXMuZm9ybS5kYXRhc291cmNlLCByZXF1ZXN0RGF0YSwge1xuICAgICAgICAgICAgb3BlcmF0aW9uVHlwZTogb3BlcmF0aW9uVHlwZVxuICAgICAgICB9KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbXNnID0gb3BlcmF0aW9uVHlwZSA9PT0gTGl2ZV9PcGVyYXRpb25zLklOU0VSVCA/IHRoaXMuZm9ybS5pbnNlcnRtZXNzYWdlIDogKG9wZXJhdGlvblR5cGUgPT09IExpdmVfT3BlcmF0aW9ucy5VUERBVEUgP1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS51cGRhdGVtZXNzYWdlIDogdGhpcy5mb3JtLmRlbGV0ZW1lc3NhZ2UpO1xuICAgICAgICAgICAgbGV0IHJlc3VsdDtcblxuICAgICAgICAgICAgaWYgKG9wZXJhdGlvblR5cGUgPT09IExpdmVfT3BlcmF0aW9ucy5ERUxFVEUpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXF1ZXN0RGF0YS5yb3c7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLmVtcHR5RGF0YU1vZGVsKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLnByZXZEYXRhVmFsdWVzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzcG9uc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuZm9ybS5vblN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0udG9nZ2xlTWVzc2FnZSh0cnVlLCBtc2csICdzdWNjZXNzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtLl9saXZlVGFibGVQYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAvLyBoaWdobGlnaHQgdGhlIGN1cnJlbnQgdXBkYXRlZCByb3dcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0uX2xpdmVUYWJsZVBhcmVudC5vblJlc3VsdChvcGVyYXRpb25UeXBlLCByZXNwb25zZSwgbmV3Rm9ybSwgdXBkYXRlTW9kZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8qZ2V0IHVwZGF0ZWQgZGF0YSB3aXRob3V0IHJlZnJlc2hpbmcgcGFnZSovXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5MSVNUX1JFQ09SRFMsIHtcbiAgICAgICAgICAgICAgICAgICAgJ3NraXBUb2dnbGVTdGF0ZSc6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRGF0YVNvdXJjZVVwZGF0ZShyZXNwb25zZSwgbmV3Rm9ybSwgdXBkYXRlTW9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICdyZXN1bHQnOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgJ3N0YXR1cyc6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmZvcm0ub25FcnJvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS50b2dnbGVNZXNzYWdlKHRydWUsIGVycm9yLCAnZXJyb3InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgJ3Jlc3VsdCc6IGVycm9yLFxuICAgICAgICAgICAgICAgICdzdGF0dXMnOiBmYWxzZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAvLyByZXNldCB0aGUgZm9ybSB0byBwcmlzdGluZSBzdGF0ZVxuICAgICAgICAgICAgdGhpcy5mb3JtLnJlc2V0Rm9ybVN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLmZvcm0ub25SZXN1bHRDYihyZXNwb25zZS5yZXN1bHQsIHJlc3BvbnNlLnN0YXR1cywgZXZlbnQpO1xuICAgICAgICB9KTtcblxuXG4gICAgfVxufVxuIl19
|
|
502
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS1mb3JtLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL2Zvcm0vc3JjL2xpdmUtZm9ybS9saXZlLWZvcm0uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUV0RyxPQUFPLEVBQUUsVUFBVSxFQUFFLHFCQUFxQixFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdEwsT0FBTyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSx5QkFBeUIsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVNLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXBFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFDLE1BQU0sV0FBVyxDQUFDOzs7OztBQUVoRyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUFDLElBQUksSUFBSSxDQUFD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aUJBQWlCOzs0RkFBakIsaUJBQWlCO2tCQUo3QixTQUFTO21CQUFDO29CQUNULFVBQVUsRUFBRSxJQUFJO29CQUNkLFFBQVEsRUFBRSxjQUFjO2lCQUMzQjs7MEJBYVEsSUFBSTs7MEJBQUksTUFBTTsyQkFBQyxhQUFhOzswQkFDNUIsUUFBUTs7MEJBR1IsU0FBUzsyQkFBQyxZQUFZO3lDQVRVLGdCQUFnQjtzQkFBcEQsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEluamVjdCwgT3B0aW9uYWwsIFNlbGYsIEF0dHJpYnV0ZSwgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgJGFwcERpZ2VzdCwgQWJzdHJhY3REaWFsb2dTZXJ2aWNlLCBEYXRhU291cmNlLCBEYXRhVHlwZSwgZGVib3VuY2UsIGdldENsb25lZE9iamVjdCwgZ2V0RmlsZXMsIGdldFZhbGlkRGF0ZU9iamVjdCwgaXNEYXRlVGltZVR5cGUsIGlzRGVmaW5lZCwgaXNFbXB0eU9iamVjdCB9IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7IEFMTEZJRUxEUywgYXBwbHlGaWx0ZXJPbkZpZWxkLCBmZXRjaFJlbGF0ZWRGaWVsZERhdGEsIGdldERpc3RpbmN0VmFsdWVzRm9yRmllbGQsIGlzRGF0YVNldFdpZGdldCwgTGl2ZV9PcGVyYXRpb25zLCBwYXJzZVZhbHVlQnlUeXBlLCBwZXJmb3JtRGF0YU9wZXJhdGlvbiwgVG9EYXRlUGlwZSB9IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuaW1wb3J0IHsgTGl2ZVRhYmxlQ29tcG9uZW50IH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvZGF0YS9saXZlLXRhYmxlJztcblxuaW1wb3J0IHsgcmVnaXN0ZXJMaXZlRm9ybVByb3BzIH0gZnJvbSAnLi4vZm9ybS5wcm9wcyc7XG5pbXBvcnQgeyBGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHtmb3JFYWNoLCBmcm9tUGFpcnMsIGdldCwgaXNFbXB0eSwgaXNFcXVhbCwgaXNTdHJpbmcsIG1hcCwgc29tZSwgc3BsaXR9IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuY29uc3QgaXNUaW1lVHlwZSA9IGZpZWxkID0+IGZpZWxkLndpZGdldHR5cGUgPT09IERhdGFUeXBlLlRJTUUgfHwgKGZpZWxkLnR5cGUgPT09IERhdGFUeXBlLlRJTUUgJiYgIWZpZWxkLndpZGdldHR5cGUpO1xuY29uc3QgZ2V0VmFsaWRUaW1lID0gdmFsID0+IHtcbiAgICBpZiAodmFsKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSAobmV3IERhdGUoKSkudG9EYXRlU3RyaW5nKCk7XG4gICAgICAgIHJldHVybiAobmV3IERhdGUoYCR7ZGF0ZX0gJHt2YWx9YCkpLmdldFRpbWUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnW3dtTGl2ZUZvcm1dJ1xufSlcbmV4cG9ydCBjbGFzcyBMaXZlRm9ybURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgc3RhdGljICBpbml0aWFsaXplUHJvcHMgPSByZWdpc3RlckxpdmVGb3JtUHJvcHMoKTtcbiAgICBwcml2YXRlIF90cmlnZ2VyZWRCeVVzZXI6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfZGVib3VuY2VkU2F2ZVByZXZEYXRhVmFsdWVzID0gZGVib3VuY2UoKCkgPT4ge1xuICAgICAgICB0aGlzLnNhdmVQcmV2RGF0YVZhbHVlcygpO1xuICAgIH0sIDI1MCk7XG5cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSkgb25LZXlkb3duSGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICB0aGlzLl90cmlnZ2VyZWRCeVVzZXIgPSB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBAU2VsZigpIEBJbmplY3QoRm9ybUNvbXBvbmVudCkgcHJpdmF0ZSBmb3JtLFxuICAgICAgICBAT3B0aW9uYWwoKSBsaXZlVGFibGU6IExpdmVUYWJsZUNvbXBvbmVudCxcbiAgICAgICAgcHVibGljIGRhdGVQaXBlOiBUb0RhdGVQaXBlLFxuICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IEFic3RyYWN0RGlhbG9nU2VydmljZSxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZm9ybWxheW91dCcpIGZvcm1sYXlvdXQ6IHN0cmluZ1xuICAgICkge1xuICAgICAgICAvLyBJZiBwYXJlbnQgbGl2ZSB0YWJsZSBpcyBwcmVzZW50IGFuZCB0aGlzIGZvcm0gaXMgZmlyc3QgY2hpbGQgb2YgbGl2ZSB0YWJsZSwgc2V0IHRoaXMgZm9ybSBpbnN0YW5jZSBvbiBsaXZldGFibGVcbiAgICAgICAgaWYgKGxpdmVUYWJsZSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmZvcm0ucGFyZW50Rm9ybSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5fbGl2ZVRhYmxlUGFyZW50ID0gbGl2ZVRhYmxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5mb3JtLmlzTGF5b3V0RGlhbG9nID0gbGl2ZVRhYmxlLmlzTGF5b3V0RGlhbG9nO1xuICAgICAgICAgICAgbGl2ZVRhYmxlLm9uRm9ybVJlYWR5KHRoaXMuZm9ybSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0uaXNMYXlvdXREaWFsb2cgPSBmb3JtbGF5b3V0ID09PSAnZGlhbG9nJztcbiAgICAgICAgfVxuICAgICAgICAvLyBDVUQgb3BlcmF0aW9uc1xuICAgICAgICBmb3JtLmNhbmNlbCA9IHRoaXMuY2FuY2VsLmJpbmQodGhpcyk7XG4gICAgICAgIGZvcm0ucmVzZXQgPSB0aGlzLnJlc2V0LmJpbmQodGhpcyk7XG4gICAgICAgIGZvcm0uZGVsZXRlID0gdGhpcy5kZWxldGUuYmluZCh0aGlzKTtcbiAgICAgICAgZm9ybS5zYXZlID0gdGhpcy5zYXZlLmJpbmQodGhpcyk7XG4gICAgICAgIGZvcm0uc2F2ZUFuZE5ldyA9IHRoaXMuc2F2ZUFuZE5ldy5iaW5kKHRoaXMpO1xuICAgICAgICBmb3JtLnNhdmVBbmRWaWV3ID0gdGhpcy5zYXZlQW5kVmlldy5iaW5kKHRoaXMpO1xuXG4gICAgICAgIGZvcm0uc2V0UHJpbWFyeUtleSA9IHRoaXMuc2V0UHJpbWFyeUtleS5iaW5kKHRoaXMpO1xuICAgICAgICBmb3JtLmNvbnN0cnVjdERhdGFPYmplY3QgPSB0aGlzLmNvbnN0cnVjdERhdGFPYmplY3QuYmluZCh0aGlzKTtcbiAgICAgICAgZm9ybS5jaGFuZ2VEYXRhT2JqZWN0ID0gdGhpcy5zZXRGb3JtRGF0YS5iaW5kKHRoaXMpO1xuICAgICAgICBmb3JtLnNldEZvcm1EYXRhID0gdGhpcy5zZXRGb3JtRGF0YS5iaW5kKHRoaXMpO1xuICAgICAgICBmb3JtLmZpbmRPcGVyYXRpb25UeXBlID0gdGhpcy5maW5kT3BlcmF0aW9uVHlwZS5iaW5kKHRoaXMpO1xuICAgICAgICBmb3JtLmNsZWFyRGF0YSA9IHRoaXMuY2xlYXJEYXRhLmJpbmQodGhpcyk7XG4gICAgICAgIGZvcm0ub25GaWVsZERlZmF1bHRWYWx1ZUNoYW5nZSA9IHRoaXMub25GaWVsZERlZmF1bHRWYWx1ZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICBmb3JtLm9uRGF0YVNvdXJjZUNoYW5nZSA9IHRoaXMub25EYXRhU291cmNlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIGZvcm0ub25GaWVsZFZhbHVlQ2hhbmdlID0gdGhpcy5vbkZpZWxkVmFsdWVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgZm9ybS5zdWJtaXRGb3JtID0gdGhpcy5zdWJtaXRGb3JtLmJpbmQodGhpcyk7XG4gICAgICAgIGZvcm0uZm9ybV9yZWdpc3RlckZvcm1GaWVsZHMgPSBmb3JtLnJlZ2lzdGVyRm9ybUZpZWxkcztcbiAgICAgICAgZm9ybS5yZWdpc3RlckZvcm1GaWVsZHMgPSB0aGlzLnJlZ2lzdGVyRm9ybUZpZWxkcy5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIC8qXG4gICAgV01TOjE4NTgzXG4gICAgT3ZlcnJpZGluZyAncmVnaXN0ZXJGb3JtRmllbGRzJyBmb3IgbGl2ZUZvcm1zLFxuICAgIE9uIEVhY2ggZmllbGQgYWRkZWQsIGNoZWNrIGlmIHRoZSBkYXRhU291cmNlIGlzIHVwZGF0ZWQgb3Igbm90XG4gICAgaWYgdGhlIGZpZWxkIGlzIGFkZGVkIGFmdGVyIHRoZSBkYXRhU291cmNlIGlzIHVwZGF0ZWQgYXQgTGl2ZUZvcm0sIHJldHJpZ2dlclxuICAgICovXG4gICAgcmVnaXN0ZXJGb3JtRmllbGRzKGZvcm1GaWVsZCkge1xuICAgICAgICBjb25zdCBmb3JtRmllbGRzID0gdGhpcy5mb3JtLmdldEZvcm1GaWVsZHMoKTtcbiAgICAgICAgdGhpcy5mb3JtLmZvcm1fcmVnaXN0ZXJGb3JtRmllbGRzKGZvcm1GaWVsZCk7XG4gICAgICAgIGlmICh0aGlzLmZvcm0uaXNEYXRhU291cmNlVXBkYXRlZCkge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlRmllbGRPbkRhdGFTb3VyY2VDaGFuZ2UoZm9ybUZpZWxkLCBmb3JtRmllbGRzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcml2YXRlIF91cGRhdGVGaWVsZE9uRGF0YVNvdXJjZUNoYW5nZShmaWVsZCwgZm9ybUZpZWxkcykge1xuICAgICAgICBpZiAoIWZpZWxkLmlzRGF0YVNldEJvdW5kICYmIGlzRGF0YVNldFdpZGdldChmaWVsZC53aWRnZXR0eXBlKSkge1xuICAgICAgICAgICAgaWYgKGZpZWxkWydpcy1yZWxhdGVkJ10pIHtcbiAgICAgICAgICAgICAgICBmaWVsZC5pc0RhdGFTZXRCb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZmV0Y2hSZWxhdGVkRmllbGREYXRhKHRoaXMuZm9ybS5kYXRhc291cmNlLCBmaWVsZC53aWRnZXQsIHtcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRlZEZpZWxkOiBmaWVsZC5rZXksXG4gICAgICAgICAgICAgICAgICAgIGRhdGFmaWVsZDogQUxMRklFTERTLFxuICAgICAgICAgICAgICAgICAgICB3aWRnZXQ6ICd3aWRnZXR0eXBlJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2V0RGlzdGluY3RWYWx1ZXNGb3JGaWVsZCh0aGlzLmZvcm0uZGF0YXNvdXJjZSwgZmllbGQud2lkZ2V0LCB7XG4gICAgICAgICAgICAgICAgICAgIHdpZGdldDogJ3dpZGdldHR5cGUnLFxuICAgICAgICAgICAgICAgICAgICBlbmFibGVlbXB0eWZpbHRlcjogdGhpcy5mb3JtLmVuYWJsZWVtcHR5ZmlsdGVyXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYXBwbHlGaWx0ZXJPbkZpZWxkKHRoaXMuZm9ybS5kYXRhc291cmNlLCBmaWVsZC53aWRnZXQsIGZvcm1GaWVsZHMsIGZpZWxkLnZhbHVlLCB7aXNGaXJzdDogdHJ1ZX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIG9uRGF0YVNvdXJjZUNoYW5nZSgpIHtcbiAgICAgICAgaWYgKGdldCh0aGlzLmZvcm0uZm9ybUZpZWxkcywgJ2xlbmd0aCcpKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0uaXNEYXRhU291cmNlVXBkYXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9ybUZpZWxkcyA9IHRoaXMuZm9ybS5nZXRGb3JtRmllbGRzKCk7XG4gICAgICAgIGZvcm1GaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVGaWVsZE9uRGF0YVNvdXJjZUNoYW5nZShmaWVsZCwgZm9ybUZpZWxkcyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uRmllbGREZWZhdWx0VmFsdWVDaGFuZ2UoZmllbGQsIG52KSB7XG4gICAgICAgIC8vIEluIEVkaXQsIGRvICBub3Qgc2V0IGRlZmF1bHQgdmFsdWVzXG4gICAgICAgIGlmICh0aGlzLmZvcm0ub3BlcmF0aW9uVHlwZSA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBTZXQgdGhlIGRlZmF1bHQgdmFsdWUgb25seSBpZiBpdCBleGlzdHMuXG4gICAgICAgIGlmIChpc0RlZmluZWQobnYpICYmIG52ICE9PSBudWxsICYmIG52ICE9PSAnJyAmJiBudiAhPT0gJ251bGwnKSB7XG4gICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHBhcnNlVmFsdWVCeVR5cGUobnYsIGZpZWxkLnR5cGUsIGZpZWxkLndpZGdldHR5cGUsIGZpZWxkLnRyYWlsaW5nemVybyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdNUy0yMjQzNDogRm9yIGRlZmF1bHQgdmFsdWUgc2V0IG9uIGluZGl2aWR1YWwgZm9ybSBmaWVsZHMsIGRvIG5vdCBtYXJrIHRoZSBmb3JtIGFzIGRpcnR5LlxuICAgICAgICBpZiAodGhpcy5mb3JtLmRpcnR5ICYmICF0aGlzLl90cmlnZ2VyZWRCeVVzZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RlYm91bmNlZFNhdmVQcmV2RGF0YVZhbHVlcygpO1xuICAgIH1cblxuICAgIG9uRmllbGRWYWx1ZUNoYW5nZShmaWVsZCwgbnYpIHtcbiAgICAgICAgYXBwbHlGaWx0ZXJPbkZpZWxkKHRoaXMuZm9ybS5kYXRhc291cmNlLCBmaWVsZC53aWRnZXQsIHRoaXMuZm9ybS5mb3JtRmllbGRzLCBudik7XG4gICAgfVxuXG4gICAgZ2V0QmxvYlVSTChkYXRhT2JqLCBrZXksIHZhbHVlKSB7XG4gICAgICAgIGxldCBocmVmID0gJyc7XG4gICAgICAgIGxldCBwcmltYXJ5S2V5cztcbiAgICAgICAgbGV0IHByaW1hcnlLZXk7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8ICF0aGlzLmZvcm0uZGF0YXNvdXJjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGhyZWY7XG4gICAgICAgIH1cbiAgICAgICAgcHJpbWFyeUtleXMgPSB0aGlzLmZvcm0uZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9QUklNQVJZX0tFWSkgfHwgW107XG4gICAgICAgIHByaW1hcnlLZXkgID0gZGF0YU9ialtwcmltYXJ5S2V5c1swXV07XG4gICAgICAgIGhyZWYgKz0gdGhpcy5mb3JtLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfQkxPQl9VUkwsIHtcbiAgICAgICAgICAgIHByaW1hcnlWYWx1ZTogcHJpbWFyeUtleSxcbiAgICAgICAgICAgIGNvbHVtbk5hbWU6IGtleVxuICAgICAgICB9KTtcbiAgICAgICAgaHJlZiArPSAnPycgKyBNYXRoLnJhbmRvbSgpO1xuICAgICAgICByZXR1cm4gaHJlZjtcbiAgICB9XG5cbiAgICBzZXRGb3JtRGF0YShkYXRhT2JqLCBmb3JtRmllbGRzPykge1xuICAgICAgICBpZiAoIWRhdGFPYmopIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmb3JtRmllbGRzID0gZm9ybUZpZWxkcyB8fCB0aGlzLmZvcm0uZm9ybUZpZWxkcztcbiAgICAgICAgZm9ybUZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZ2V0KGRhdGFPYmosIGZpZWxkLmtleSB8fCBmaWVsZC5uYW1lKTtcbiAgICAgICAgICAgIGlmIChpc1RpbWVUeXBlKGZpZWxkKSkge1xuICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gZ2V0VmFsaWRUaW1lKHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gRGF0YVR5cGUuQkxPQikge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5yZXNldEZpbGVVcGxvYWRXaWRnZXQoZmllbGQsIHRydWUpO1xuICAgICAgICAgICAgICAgIGZpZWxkLmhyZWYgID0gdGhpcy5nZXRCbG9iVVJMKGRhdGFPYmosIGZpZWxkLmtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gaXNTdHJpbmcodmFsdWUpID8gJycgOiB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLnNldEZpZWxkVmFsdWUoZmllbGQsIGRhdGFPYmopO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zYXZlUHJldkRhdGFWYWx1ZXMoKTtcbiAgICAgICAgdGhpcy5mb3JtLmNvbnN0cnVjdERhdGFPYmplY3QoKTtcbiAgICB9XG5cbiAgICBvbkRhdGFTb3VyY2VVcGRhdGUocmVzcG9uc2UsIG5ld0Zvcm0sIHVwZGF0ZU1vZGUpIHtcbiAgICAgICAgaWYgKG5ld0Zvcm0pIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5uZXcoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5zZXRGb3JtRGF0YShyZXNwb25zZSk7XG4gICAgICAgICAgICB0aGlzLmNsb3NlRGlhbG9nKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb3JtLmlzVXBkYXRlTW9kZSA9IGlzRGVmaW5lZCh1cGRhdGVNb2RlKSA/IHVwZGF0ZU1vZGUgOiB0cnVlO1xuICAgIH1cblxuICAgIHNhdmVQcmV2Zm9ybUZpZWxkcygpIHtcbiAgICAgICAgdGhpcy5mb3JtLnByZXZmb3JtRmllbGRzID0gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMuZm9ybS5mb3JtRmllbGRzLm1hcChmaWVsZCA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICdrZXknOiBmaWVsZC5rZXksXG4gICAgICAgICAgICAgICAgJ3R5cGUnOiBmaWVsZC50eXBlLFxuICAgICAgICAgICAgICAgICd3aWRnZXR0eXBlJzogZmllbGQud2lkZ2V0dHlwZSxcbiAgICAgICAgICAgICAgICAnb3V0cHV0Zm9ybWF0JzogZmllbGQub3V0cHV0Zm9ybWF0LFxuICAgICAgICAgICAgICAgICd2YWx1ZSc6IGZpZWxkLnZhbHVlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgZ2V0UHJldmZvcm1GaWVsZHMoKSB7XG4gICAgICAgIHRoaXMuZm9ybS5mb3JtRmllbGRzLm1hcChmaWVsZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcmV2RmllbGQgPSB0aGlzLmZvcm0ucHJldmZvcm1GaWVsZHMuZmluZChwRmllbGQgPT4gcEZpZWxkLmtleSA9PT0gZmllbGQua2V5KTtcbiAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gcHJldkZpZWxkLnZhbHVlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXREYXRhT2JqZWN0KCkge1xuICAgICAgICBpZiAodGhpcy5mb3JtLm9wZXJhdGlvblR5cGUgPT09IExpdmVfT3BlcmF0aW9ucy5JTlNFUlQpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNEZWZpbmVkKHRoaXMuZm9ybS5wcmV2RGF0YU9iamVjdCkgJiYgIWlzRW1wdHlPYmplY3QodGhpcy5mb3JtLnByZXZEYXRhT2JqZWN0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGdldENsb25lZE9iamVjdCh0aGlzLmZvcm0ucHJldkRhdGFPYmplY3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnZXRDbG9uZWRPYmplY3QodGhpcy5mb3JtLmZvcm1kYXRhIHx8IHt9KTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3REYXRhT2JqZWN0KGlzUHJldmlvdXNEYXRhPykge1xuICAgICAgICBjb25zdCBkYXRhT2JqZWN0ID0gdGhpcy5nZXREYXRhT2JqZWN0KCk7XG4gICAgICAgIGNvbnN0IGZvcm1OYW1lID0gdGhpcy5mb3JtLm5hbWU7XG4gICAgICAgIGxldCBmb3JtRmllbGRzO1xuICAgICAgICBmb3JtRmllbGRzID0gaXNQcmV2aW91c0RhdGEgPyB0aGlzLmZvcm0ucHJldmZvcm1GaWVsZHMgOiB0aGlzLmZvcm0uZ2V0Rm9ybUZpZWxkcygpO1xuICAgICAgICBmb3JtRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgbGV0IGRhdGVUaW1lLFxuICAgICAgICAgICAgICAgIGZpZWxkVmFsdWU7XG4gICAgICAgICAgICBjb25zdCBmaWVsZFRhcmdldCA9IHNwbGl0KGZpZWxkLmtleSwgJy4nKTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IGZpZWxkVGFyZ2V0WzBdIHx8IGZpZWxkLmtleTtcblxuICAgICAgICAgICAgLypjb2xsZWN0IHRoZSB2YWx1ZXMgZnJvbSB0aGUgZmllbGRzIGFuZCBjb25zdHJ1Y3QgdGhlIG9iamVjdCovXG4gICAgICAgICAgICAvKkZvcm1hdCB0aGUgb3V0cHV0IG9mIGRhdGUgdGltZSB3aWRnZXRzIHRvIHRoZSBnaXZlbiBvdXRwdXQgZm9ybWF0Ki9cbiAgICAgICAgICAgIGlmICgoZmllbGQud2lkZ2V0dHlwZSAmJiBpc0RhdGVUaW1lVHlwZShmaWVsZC53aWRnZXR0eXBlKSkgfHwgaXNEYXRlVGltZVR5cGUoZmllbGQudHlwZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZVRpbWUgPSBnZXRWYWxpZERhdGVPYmplY3QoZmllbGQudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQub3V0cHV0Zm9ybWF0ID09PSBEYXRhVHlwZS5USU1FU1RBTVAgfHwgZmllbGQudHlwZSA9PT0gRGF0YVR5cGUuVElNRVNUQU1QKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZFZhbHVlID0gZmllbGQudmFsdWUgPyBkYXRlVGltZSA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGQub3V0cHV0Zm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZFZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZVRpbWUsIGZpZWxkLm91dHB1dGZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZFZhbHVlID0gZmllbGQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gRGF0YVR5cGUuQkxPQikge1xuICAgICAgICAgICAgICAgIGZpZWxkVmFsdWUgPSBnZXRGaWxlcyhmb3JtTmFtZSwgZmllbGROYW1lICsgJ19mb3JtV2lkZ2V0JywgZmllbGQubXVsdGlwbGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSBEYXRhVHlwZS5MSVNUKSB7XG4gICAgICAgICAgICAgICAgZmllbGRWYWx1ZSA9IGZpZWxkLnZhbHVlIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmllbGRWYWx1ZSA9IChmaWVsZC52YWx1ZSA9PT0gbnVsbCB8fCBmaWVsZC52YWx1ZSA9PT0gJycpID8gdW5kZWZpbmVkIDogZmllbGQudmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaWVsZFRhcmdldC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBkYXRhT2JqZWN0W2ZpZWxkTmFtZV0gPSBmaWVsZFZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRhT2JqZWN0W2ZpZWxkTmFtZV0gPSBkYXRhT2JqZWN0W2ZpZWxkTmFtZV0gfHwge307XG4gICAgICAgICAgICAgICAgZGF0YU9iamVjdFtmaWVsZE5hbWVdW2ZpZWxkVGFyZ2V0WzFdXSA9IGZpZWxkVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWlzUHJldmlvdXNEYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0udXBkYXRlRm9ybURhdGFPdXRwdXQoZGF0YU9iamVjdCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmRhdGFvdXRwdXQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFPYmplY3Q7XG4gICAgfVxuXG4gICAgc2V0UHJpbWFyeUtleShmaWVsZE5hbWUpIHtcbiAgICAgICAgLypTdG9yZSB0aGUgcHJpbWFyeSBrZXkgb2YgZGF0YSovXG4gICAgICAgIHRoaXMuZm9ybS5wcmltYXJ5S2V5ID0gdGhpcy5mb3JtLnByaW1hcnlLZXkgfHwgW107XG4gICAgICAgIGlmICh0aGlzLmZvcm0ucHJpbWFyeUtleS5pbmRleE9mKGZpZWxkTmFtZSkgPT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0ucHJpbWFyeUtleS5wdXNoKGZpZWxkTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmaW5kT3BlcmF0aW9uVHlwZSgpIHtcbiAgICAgICAgbGV0IG9wZXJhdGlvbjtcbiAgICAgICAgbGV0IGlzUHJpbWFyeSA9IGZhbHNlO1xuICAgICAgICBjb25zdCBzb3VyY2VPcGVyYXRpb24gPSB0aGlzLmZvcm0uZGF0YXNvdXJjZSAmJiB0aGlzLmZvcm0uZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9PUEVSQVRJT05fVFlQRSk7XG4gICAgICAgIGlmIChzb3VyY2VPcGVyYXRpb24gJiYgc291cmNlT3BlcmF0aW9uICE9PSAncmVhZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2VPcGVyYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgLypJZiBPcGVyYXRpb25UeXBlIGlzIG5vdCBzZXQgdGhlbiBiYXNlZCBvbiB0aGUgZm9ybWRhdGEgb2JqZWN0IHJldHVybiB0aGUgb3BlcmF0aW9uIHR5cGUsXG4gICAgICAgICAgICB0aGlzIGNhc2Ugb2NjdXJzIG9ubHkgaWYgdGhlIGZvcm0gaXMgb3V0c2lkZSBhIGxpdmVncmlkKi9cbiAgICAgICAgLypJZiB0aGUgZm9ybWRhdGEgb2JqZWN0IGhhcyBwcmltYXJ5IGtleSB2YWx1ZSB0aGVuIHJldHVybiB1cGRhdGUgZWxzZSBpbnNlcnQqL1xuICAgICAgICBpZiAodGhpcy5mb3JtLnByaW1hcnlLZXkgJiYgIWlzRW1wdHkodGhpcy5mb3JtLmZvcm1kYXRhKSkge1xuICAgICAgICAgICAgLypJZiBvbmx5IG9uZSBjb2x1bW4gaXMgcHJpbWFyeSBrZXkqL1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybS5wcmltYXJ5S2V5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZvcm0uZm9ybWRhdGFbdGhpcy5mb3JtLnByaW1hcnlLZXlbMF1dKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IExpdmVfT3BlcmF0aW9ucy5VUERBVEU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qSWYgb25seSBubyBjb2x1bW4gaXMgcHJpbWFyeSBrZXkqL1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZvcm0ucHJpbWFyeUtleS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBmb3JFYWNoKHRoaXMuZm9ybS5mb3JtZGF0YSwgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNQcmltYXJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChpc1ByaW1hcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gTGl2ZV9PcGVyYXRpb25zLlVQREFURTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLypJZiBtdWx0aXBsZSBjb2x1bW5zIGFyZSBwcmltYXJ5IGtleSovXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlzUHJpbWFyeSA9IHNvbWUodGhpcy5mb3JtLnByaW1hcnlLZXksIChwcmltYXJ5S2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmZvcm0uZm9ybWRhdGFbcHJpbWFyeUtleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzUHJpbWFyeSkge1xuICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBMaXZlX09wZXJhdGlvbnMuVVBEQVRFO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3BlcmF0aW9uIHx8IExpdmVfT3BlcmF0aW9ucy5JTlNFUlQ7XG4gICAgfVxuXG4gICAgZ2V0UHJldkRhdGFWYWx1ZXMoKSB7XG4gICAgICAgIGNvbnN0IHByZXZEYXRhVmFsdWVzID0gZnJvbVBhaXJzKG1hcCh0aGlzLmZvcm0ucHJldkRhdGFWYWx1ZXMsIChpdGVtKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gW2l0ZW0ua2V5LCBpdGVtLnZhbHVlXTtcbiAgICAgICAgfSkpOyAvLyBDb252ZXJ0IG9mIGFycmF5IG9mIHZhbHVlcyB0byBhbiBvYmplY3RcbiAgICAgICAgdGhpcy5mb3JtLmZvcm1GaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHByZXZEYXRhVmFsdWVzW2ZpZWxkLmtleV0gfHwgJyc7XG4gICAgICAgICAgICBmaWVsZC5yZXNldERpc3BsYXlJbnB1dCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHByZXZEYXRhVmFsdWVzO1xuICAgIH1cblxuICAgIHNhdmVQcmV2RGF0YVZhbHVlcygpIHtcbiAgICAgICAgdGhpcy5mb3JtLnByZXZEYXRhVmFsdWVzID0gdGhpcy5mb3JtLmZvcm1GaWVsZHMubWFwKChvYmopID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7J2tleSc6IG9iai5rZXksICd2YWx1ZSc6IG9iai52YWx1ZX07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsZWFyRGF0YSgpIHtcbiAgICAgICAgdGhpcy5mb3JtLnRvZ2dsZU1lc3NhZ2UoZmFsc2UpO1xuICAgICAgICB0aGlzLmZvcm0uZW1wdHlEYXRhTW9kZWwoKTtcbiAgICB9XG5cbiAgICBzZXRSZWFkb25seUZpZWxkcygpIHtcbiAgICAgICAgdGhpcy5mb3JtLmZvcm1GaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICBmaWVsZC5zZXRSZWFkT25seVN0YXRlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlc2V0KCkge1xuICAgICAgICBsZXQgcHJldkRhdGFWYWx1ZXM7XG4gICAgICAgIHRoaXMuZm9ybS5yZXNldEZvcm1TdGF0ZSgpO1xuICAgICAgICBwcmV2RGF0YVZhbHVlcyA9IHRoaXMuZ2V0UHJldkRhdGFWYWx1ZXMoKTtcbiAgICAgICAgdGhpcy5mb3JtLmZvcm1GaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gRGF0YVR5cGUuQkxPQiB8fCBmaWVsZC53aWRnZXR0eXBlID09PSAndXBsb2FkJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5yZXNldEZpbGVVcGxvYWRXaWRnZXQoZmllbGQsIHRydWUpO1xuICAgICAgICAgICAgICAgIGZpZWxkLmhyZWYgPSB0aGlzLmdldEJsb2JVUkwocHJldkRhdGFWYWx1ZXMsIGZpZWxkLmtleSwgZmllbGQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmllbGQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpPy5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtaW52YWxpZCcpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5mb3JtLmNvbnN0cnVjdERhdGFPYmplY3QoKTtcbiAgICB9XG5cbiAgICBjbG9zZURpYWxvZygpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS5pc0xheW91dERpYWxvZykge1xuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNsb3NlKHRoaXMuZm9ybS5kaWFsb2dJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjYW5jZWwoKSB7XG4gICAgICAgIHRoaXMuZm9ybS5jbGVhck1lc3NhZ2UoKTtcbiAgICAgICAgdGhpcy5mb3JtLmlzVXBkYXRlTW9kZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xuICAgICAgICAvKlNob3cgdGhlIHByZXZpb3VzIHNlbGVjdGVkIGRhdGEqL1xuICAgICAgICBpZiAodGhpcy5mb3JtLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0UHJldmZvcm1GaWVsZHMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvcm0uaXNVcGRhdGVNb2RlID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmZvcm0uX2xpdmVUYWJsZVBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtLl9saXZlVGFibGVQYXJlbnQub25DYW5jZWwoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgIFdNUy0xODc1OTogZGlhbG9nIGNsb3NlIGlzIGNhbGxpbmcgdHdpY2UgYW5kIGRpYWxvZyBvbkhpZGRlbiBzdWJzY3JpcHRpb24gaXMgY2FsbGluZyBvbmNlIGZyb20gdGhlIGxpYnJhcnlcbiAgICAgICAgICAgICAgZHVlIHRvIHRoaXMgaWYgd2UgaGF2ZSBhbm90aGVyIGRpYWxvZyBpbnNpZGUgbGl2ZWZvcm0gYW5kIGlmIHdlIGNsaWNrIG9uIGNhbmNlbCBvZiBzZWNvbmQgZGlhbG9nIHRoZSBsaWJyYXJ5XG4gICAgICAgICAgICAgIHN1YnNjcmlwdGlvbiBpcyBjYWxsaW5nIGZvciBib3RoIHRoZSBkaWFsb2dzLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLmNsb3NlRGlhbG9nKCk7XG4gICAgICAgIH1cbiAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgIH1cblxuXG5cbiAgICBkZWxldGUoY2FsbEJhY2tGbikge1xuICAgICAgICB0aGlzLmZvcm0ucmVzZXRGb3JtU3RhdGUoKTtcbiAgICAgICAgdGhpcy5mb3JtLm9wZXJhdGlvblR5cGUgPSBMaXZlX09wZXJhdGlvbnMuREVMRVRFO1xuICAgICAgICB0aGlzLmZvcm0ucHJldkRhdGFPYmplY3QgPSBnZXRDbG9uZWRPYmplY3QodGhpcy5mb3JtLmZvcm1kYXRhIHx8IHt9KTtcbiAgICAgICAgdGhpcy5mb3JtLnNhdmUodW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY2FsbEJhY2tGbik7XG4gICAgfVxuXG4gICAgLy8gRnVuY3Rpb24gdXNlIHRvIHNhdmUgdGhlIGZvcm0gYW5kIG9wZW4gbmV3IGZvcm0gYWZ0ZXIgc2F2ZVxuICAgIHNhdmVBbmROZXcoKSB7XG4gICAgICAgIHRoaXMuc2F2ZSh1bmRlZmluZWQsIHRydWUsIHRydWUpO1xuICAgIH1cbiAgICAvLyBGdW5jdGlvbiB1c2UgdG8gc2F2ZSB0aGUgZm9ybSBhbmQgb3BlbiBuZXcgZm9ybSBhZnRlciBzYXZlXG4gICAgc2F2ZUFuZFZpZXcoKSB7XG4gICAgICAgIHRoaXMuc2F2ZSh1bmRlZmluZWQsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBzdWJtaXRGb3JtKCRldmVudCkge1xuICAgICAgICB0aGlzLnNhdmUoJGV2ZW50KTtcbiAgICB9XG5cbiAgICBzYXZlKGV2ZW50PywgdXBkYXRlTW9kZT8sIG5ld0Zvcm0/KSB7XG4gICAgICAgIGlmICghdGhpcy5mb3JtLmRhdGFzb3VyY2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZGF0YSwgcHJldkRhdGEsIG9wZXJhdGlvblR5cGUsIGlzVmFsaWQ7XG4gICAgICAgIGNvbnN0IHJlcXVlc3REYXRhOiBhbnkgPSB7fTtcblxuICAgICAgICBvcGVyYXRpb25UeXBlID0gdGhpcy5mb3JtLm9wZXJhdGlvblR5cGUgPSB0aGlzLmZvcm0ub3BlcmF0aW9uVHlwZSB8fCB0aGlzLmZpbmRPcGVyYXRpb25UeXBlKCk7XG5cbiAgICAgICAgLy8gRGlzYWJsZSB0aGUgZm9ybSBzdWJtaXQgaWYgZm9ybSBpcyBpbiBpbnZhbGlkIHN0YXRlLlxuICAgICAgICBpZiAodGhpcy5mb3JtLnZhbGlkYXRlRmllbGRzT25TdWJtaXQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YSA9IGdldENsb25lZE9iamVjdCh0aGlzLmZvcm0uY29uc3RydWN0RGF0YU9iamVjdCgpKTtcbiAgICAgICAgcHJldkRhdGEgPSB0aGlzLmZvcm0ucHJldmZvcm1GaWVsZHMgPyB0aGlzLmZvcm0uY29uc3RydWN0RGF0YU9iamVjdCh0cnVlKSA6IGRhdGE7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlzVmFsaWQgPSB0aGlzLmZvcm0uaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3Jlc2VydmljZWNhbGwnLCB7JGV2ZW50OiBldmVudCwgJG9wZXJhdGlvbjogdGhpcy5mb3JtLm9wZXJhdGlvblR5cGUsICRkYXRhOiBkYXRhLCBvcHRpb25zOiByZXF1ZXN0RGF0YX0pO1xuICAgICAgICAgICAgaWYgKGlzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzVmFsaWQgJiYgaXNWYWxpZC5lcnJvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS50b2dnbGVNZXNzYWdlKHRydWUsIGlzVmFsaWQuZXJyb3IsICdlcnJvcicpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgPT09ICdBYm9ydCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBvcGVyYXRpb24gaXMgdXBkYXRlLCBmb3JtIGlzIG5vdCB0b3VjaGVkIGFuZCBjdXJyZW50IGRhdGEgYW5kIHByZXZpb3VzIGRhdGEgaXMgc2FtZSwgU2hvdyBubyBjaGFuZ2VzIGRldGVjdGVkIG1lc3NhZ2VcbiAgICAgICAgaWYgKHRoaXMuZm9ybS5vcGVyYXRpb25UeXBlID09PSBMaXZlX09wZXJhdGlvbnMuVVBEQVRFICYmIHRoaXMuZm9ybS5uZ2Zvcm0gJiYgdGhpcy5mb3JtLm5nZm9ybS5wcmlzdGluZSAmJlxuICAgICAgICAgICAgKHRoaXMuZm9ybS5pc1NlbGVjdGVkICYmIGlzRXF1YWwoZGF0YSwgcHJldkRhdGEpKSkge1xuICAgICAgICAgICAgdGhpcy5mb3JtLnRvZ2dsZU1lc3NhZ2UodHJ1ZSwgdGhpcy5mb3JtLmFwcExvY2FsZS5NRVNTQUdFX05PX0NIQU5HRVMsICdpbmZvJywgJycpO1xuICAgICAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVxdWVzdERhdGEucm93ID0gZGF0YTtcbiAgICAgICAgcmVxdWVzdERhdGEudHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgcmVxdWVzdERhdGEuc2tpcE5vdGlmaWNhdGlvbiA9IHRydWU7XG5cbiAgICAgICAgaWYgKG9wZXJhdGlvblR5cGUgPT09IExpdmVfT3BlcmF0aW9ucy5VUERBVEUpIHtcbiAgICAgICAgICAgIHJlcXVlc3REYXRhLnJvd0RhdGEgPSB0aGlzLmZvcm0uZm9ybWRhdGE7XG4gICAgICAgICAgICByZXF1ZXN0RGF0YS5wcmV2RGF0YSA9IHByZXZEYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgcGVyZm9ybURhdGFPcGVyYXRpb24odGhpcy5mb3JtLmRhdGFzb3VyY2UsIHJlcXVlc3REYXRhLCB7XG4gICAgICAgICAgICBvcGVyYXRpb25UeXBlOiBvcGVyYXRpb25UeXBlXG4gICAgICAgIH0pLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtc2cgPSBvcGVyYXRpb25UeXBlID09PSBMaXZlX09wZXJhdGlvbnMuSU5TRVJUID8gdGhpcy5mb3JtLmluc2VydG1lc3NhZ2UgOiAob3BlcmF0aW9uVHlwZSA9PT0gTGl2ZV9PcGVyYXRpb25zLlVQREFURSA/XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLnVwZGF0ZW1lc3NhZ2UgOiB0aGlzLmZvcm0uZGVsZXRlbWVzc2FnZSk7XG4gICAgICAgICAgICBsZXQgcmVzdWx0O1xuXG4gICAgICAgICAgICBpZiAob3BlcmF0aW9uVHlwZSA9PT0gTGl2ZV9PcGVyYXRpb25zLkRFTEVURSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlcXVlc3REYXRhLnJvdztcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZW1wdHlEYXRhTW9kZWwoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucHJldkRhdGFWYWx1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0uaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXNwb25zZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5mb3JtLm9uU3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS50b2dnbGVNZXNzYWdlKHRydWUsIG1zZywgJ3N1Y2Nlc3MnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm0uX2xpdmVUYWJsZVBhcmVudCkge1xuICAgICAgICAgICAgICAgIC8vIGhpZ2hsaWdodCB0aGUgY3VycmVudCB1cGRhdGVkIHJvd1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5fbGl2ZVRhYmxlUGFyZW50Lm9uUmVzdWx0KG9wZXJhdGlvblR5cGUsIHJlc3BvbnNlLCBuZXdGb3JtLCB1cGRhdGVNb2RlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLypnZXQgdXBkYXRlZCBkYXRhIHdpdGhvdXQgcmVmcmVzaGluZyBwYWdlKi9cbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkxJU1RfUkVDT1JEUywge1xuICAgICAgICAgICAgICAgICAgICAnc2tpcFRvZ2dsZVN0YXRlJzogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMub25EYXRhU291cmNlVXBkYXRlKHJlc3BvbnNlLCBuZXdGb3JtLCB1cGRhdGVNb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgJ3Jlc3VsdCc6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICAnc3RhdHVzJzogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZm9ybS5vbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLnRvZ2dsZU1lc3NhZ2UodHJ1ZSwgZXJyb3IsICdlcnJvcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAncmVzdWx0JzogZXJyb3IsXG4gICAgICAgICAgICAgICAgJ3N0YXR1cyc6IGZhbHNlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIC8vIHJlc2V0IHRoZSBmb3JtIHRvIHByaXN0aW5lIHN0YXRlXG4gICAgICAgICAgICB0aGlzLmZvcm0ucmVzZXRGb3JtU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5vblJlc3VsdENiKHJlc3BvbnNlLnJlc3VsdCwgcmVzcG9uc2Uuc3RhdHVzLCBldmVudCk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDYW5jZWwgZGVib3VuY2VkIGZ1bmN0aW9uXG4gICAgICAgIGlmICh0aGlzLl9kZWJvdW5jZWRTYXZlUHJldkRhdGFWYWx1ZXMgJiYgKHRoaXMuX2RlYm91bmNlZFNhdmVQcmV2RGF0YVZhbHVlcyBhcyBhbnkpLmNhbmNlbCkge1xuICAgICAgICAgICAgKHRoaXMuX2RlYm91bmNlZFNhdmVQcmV2RGF0YVZhbHVlcyBhcyBhbnkpLmNhbmNlbCgpO1xuICAgICAgICAgICAgdGhpcy5fZGVib3VuY2VkU2F2ZVByZXZEYXRhVmFsdWVzID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ2xlYXIgZm9ybSByZWZlcmVuY2VcbiAgICAgICAgdGhpcy5mb3JtID0gbnVsbDtcbiAgICB9XG59XG4iXX0=
|