igniteui-angular 16.0.0-beta.2 → 16.0.0-beta.3
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/esm2022/lib/accordion/accordion.component.mjs +4 -4
- package/esm2022/lib/accordion/accordion.module.mjs +5 -5
- package/esm2022/lib/action-strip/action-strip.component.mjs +7 -7
- package/esm2022/lib/action-strip/action-strip.module.mjs +5 -5
- package/esm2022/lib/action-strip/grid-actions/grid-action-button.component.mjs +4 -4
- package/esm2022/lib/action-strip/grid-actions/grid-actions-base.directive.mjs +4 -4
- package/esm2022/lib/action-strip/grid-actions/grid-editing-actions.component.mjs +4 -4
- package/esm2022/lib/action-strip/grid-actions/grid-pinning-actions.component.mjs +4 -4
- package/esm2022/lib/avatar/avatar.component.mjs +4 -4
- package/esm2022/lib/avatar/avatar.module.mjs +5 -5
- package/esm2022/lib/badge/badge.component.mjs +4 -4
- package/esm2022/lib/badge/badge.module.mjs +5 -5
- package/esm2022/lib/banner/banner.component.mjs +4 -4
- package/esm2022/lib/banner/banner.directives.mjs +4 -4
- package/esm2022/lib/banner/banner.module.mjs +5 -5
- package/esm2022/lib/buttonGroup/buttonGroup.component.mjs +4 -4
- package/esm2022/lib/buttonGroup/buttongroup.module.mjs +5 -5
- package/esm2022/lib/calendar/calendar-base.mjs +4 -4
- package/esm2022/lib/calendar/calendar.component.mjs +4 -4
- package/esm2022/lib/calendar/calendar.directives.mjs +16 -16
- package/esm2022/lib/calendar/calendar.module.mjs +5 -5
- package/esm2022/lib/calendar/days-view/day-item.component.mjs +4 -4
- package/esm2022/lib/calendar/days-view/days-view.component.mjs +4 -4
- package/esm2022/lib/calendar/days-view/daysview-navigation.service.mjs +4 -4
- package/esm2022/lib/calendar/month-picker/month-picker-base.mjs +4 -4
- package/esm2022/lib/calendar/month-picker/month-picker.component.mjs +4 -4
- package/esm2022/lib/calendar/months-view/months-view.component.mjs +4 -4
- package/esm2022/lib/calendar/months-view.pipe.mjs +7 -7
- package/esm2022/lib/calendar/years-view/years-view.component.mjs +7 -7
- package/esm2022/lib/card/card.component.mjs +28 -28
- package/esm2022/lib/card/card.module.mjs +5 -5
- package/esm2022/lib/carousel/carousel.component.mjs +7 -7
- package/esm2022/lib/carousel/carousel.directives.mjs +10 -10
- package/esm2022/lib/carousel/carousel.module.mjs +5 -5
- package/esm2022/lib/carousel/slide.component.mjs +4 -4
- package/esm2022/lib/checkbox/checkbox.component.mjs +4 -4
- package/esm2022/lib/checkbox/checkbox.module.mjs +5 -5
- package/esm2022/lib/chips/chip.component.mjs +4 -4
- package/esm2022/lib/chips/chips-area.component.mjs +4 -4
- package/esm2022/lib/chips/chips.module.mjs +5 -5
- package/esm2022/lib/combo/combo-add-item.component.mjs +4 -4
- package/esm2022/lib/combo/combo-dropdown.component.mjs +4 -4
- package/esm2022/lib/combo/combo-item.component.mjs +4 -4
- package/esm2022/lib/combo/combo.api.mjs +4 -4
- package/esm2022/lib/combo/combo.common.mjs +4 -4
- package/esm2022/lib/combo/combo.component.mjs +4 -4
- package/esm2022/lib/combo/combo.directives.mjs +25 -25
- package/esm2022/lib/combo/combo.module.mjs +5 -5
- package/esm2022/lib/combo/combo.pipes.mjs +7 -7
- package/esm2022/lib/core/density.mjs +4 -4
- package/esm2022/lib/core/navigation/directives.mjs +7 -7
- package/esm2022/lib/core/navigation/nav.service.mjs +4 -4
- package/esm2022/lib/core/selection.mjs +4 -4
- package/esm2022/lib/core/touch.mjs +4 -4
- package/esm2022/lib/core/utils.mjs +4 -4
- package/esm2022/lib/date-common/calendar-container/calendar-container.component.mjs +4 -4
- package/esm2022/lib/date-common/picker-base.directive.mjs +4 -4
- package/esm2022/lib/date-common/picker-icons.common.mjs +10 -10
- package/esm2022/lib/date-picker/date-picker.component.mjs +4 -4
- package/esm2022/lib/date-picker/date-picker.module.mjs +5 -5
- package/esm2022/lib/date-range-picker/date-range-picker-inputs.common.mjs +16 -16
- package/esm2022/lib/date-range-picker/date-range-picker.component.mjs +4 -4
- package/esm2022/lib/date-range-picker/date-range-picker.module.mjs +5 -5
- package/esm2022/lib/dialog/dialog.component.mjs +4 -4
- package/esm2022/lib/dialog/dialog.directives.mjs +7 -7
- package/esm2022/lib/dialog/dialog.module.mjs +5 -5
- package/esm2022/lib/directives/autocomplete/autocomplete.directive.mjs +4 -4
- package/esm2022/lib/directives/autocomplete/autocomplete.module.mjs +5 -5
- package/esm2022/lib/directives/button/button.directive.mjs +4 -4
- package/esm2022/lib/directives/button/button.module.mjs +5 -5
- package/esm2022/lib/directives/date-time-editor/date-time-editor.directive.mjs +4 -4
- package/esm2022/lib/directives/date-time-editor/date-time-editor.module.mjs +5 -5
- package/esm2022/lib/directives/divider/divider.directive.mjs +4 -4
- package/esm2022/lib/directives/divider/divider.module.mjs +5 -5
- package/esm2022/lib/directives/drag-drop/drag-drop.directive.mjs +13 -13
- package/esm2022/lib/directives/drag-drop/drag-drop.module.mjs +5 -5
- package/esm2022/lib/directives/filter/filter.directive.mjs +7 -7
- package/esm2022/lib/directives/filter/filter.module.mjs +5 -5
- package/esm2022/lib/directives/focus/focus.directive.mjs +4 -4
- package/esm2022/lib/directives/focus/focus.module.mjs +5 -5
- package/esm2022/lib/directives/focus-trap/focus-trap.directive.mjs +4 -4
- package/esm2022/lib/directives/focus-trap/focus-trap.module.mjs +5 -5
- package/esm2022/lib/directives/for-of/base.helper.component.mjs +4 -4
- package/esm2022/lib/directives/for-of/display.container.mjs +4 -4
- package/esm2022/lib/directives/for-of/for_of.directive.mjs +7 -7
- package/esm2022/lib/directives/for-of/for_of.module.mjs +5 -5
- package/esm2022/lib/directives/for-of/for_of.sync.service.mjs +7 -7
- package/esm2022/lib/directives/for-of/horizontal.virtual.helper.component.mjs +4 -4
- package/esm2022/lib/directives/for-of/virtual.helper.component.mjs +4 -4
- package/esm2022/lib/directives/form-control/form-control.directive.mjs +4 -4
- package/esm2022/lib/directives/form-control/form-control.module.mjs +5 -5
- package/esm2022/lib/directives/hint/hint.directive.mjs +4 -4
- package/esm2022/lib/directives/input/input.directive.mjs +4 -4
- package/esm2022/lib/directives/label/label.directive.mjs +4 -4
- package/esm2022/lib/directives/layout/layout.directive.mjs +7 -7
- package/esm2022/lib/directives/layout/layout.module.mjs +5 -5
- package/esm2022/lib/directives/mask/mask-parsing.service.mjs +4 -4
- package/esm2022/lib/directives/mask/mask.directive.mjs +4 -4
- package/esm2022/lib/directives/mask/mask.module.mjs +5 -5
- package/esm2022/lib/directives/notification/notifications.directive.mjs +4 -4
- package/esm2022/lib/directives/prefix/prefix.directive.mjs +4 -4
- package/esm2022/lib/directives/radio/radio-group.directive.mjs +4 -4
- package/esm2022/lib/directives/radio/radio-group.module.mjs +5 -5
- package/esm2022/lib/directives/ripple/ripple.directive.mjs +4 -4
- package/esm2022/lib/directives/ripple/ripple.module.mjs +5 -5
- package/esm2022/lib/directives/scroll-inertia/scroll_inertia.directive.mjs +4 -4
- package/esm2022/lib/directives/scroll-inertia/scroll_inertia.module.mjs +5 -5
- package/esm2022/lib/directives/suffix/suffix.directive.mjs +4 -4
- package/esm2022/lib/directives/template-outlet/template_outlet.directive.mjs +4 -4
- package/esm2022/lib/directives/text-highlight/text-highlight.directive.mjs +4 -4
- package/esm2022/lib/directives/text-highlight/text-highlight.module.mjs +5 -5
- package/esm2022/lib/directives/text-selection/text-selection.directive.mjs +4 -4
- package/esm2022/lib/directives/text-selection/text-selection.module.mjs +5 -5
- package/esm2022/lib/directives/toggle/toggle.directive.mjs +10 -10
- package/esm2022/lib/directives/toggle/toggle.module.mjs +5 -5
- package/esm2022/lib/directives/tooltip/tooltip-target.directive.mjs +4 -4
- package/esm2022/lib/directives/tooltip/tooltip.component.mjs +4 -4
- package/esm2022/lib/directives/tooltip/tooltip.directive.mjs +4 -4
- package/esm2022/lib/directives/tooltip/tooltip.module.mjs +5 -5
- package/esm2022/lib/drop-down/drop-down-group.component.mjs +4 -4
- package/esm2022/lib/drop-down/drop-down-item.base.mjs +4 -4
- package/esm2022/lib/drop-down/drop-down-item.component.mjs +4 -4
- package/esm2022/lib/drop-down/drop-down-navigation.directive.mjs +4 -4
- package/esm2022/lib/drop-down/drop-down.base.mjs +4 -4
- package/esm2022/lib/drop-down/drop-down.component.mjs +4 -4
- package/esm2022/lib/drop-down/drop-down.module.mjs +5 -5
- package/esm2022/lib/expansion-panel/expansion-panel-body.component.mjs +4 -4
- package/esm2022/lib/expansion-panel/expansion-panel-header.component.mjs +4 -4
- package/esm2022/lib/expansion-panel/expansion-panel.common.mjs +4 -4
- package/esm2022/lib/expansion-panel/expansion-panel.component.mjs +4 -4
- package/esm2022/lib/expansion-panel/expansion-panel.directives.mjs +10 -10
- package/esm2022/lib/expansion-panel/expansion-panel.module.mjs +5 -5
- package/esm2022/lib/expansion-panel/toggle-animation-component.mjs +4 -4
- package/esm2022/lib/grids/api.service.mjs +4 -4
- package/esm2022/lib/grids/cell.component.mjs +4 -4
- package/esm2022/lib/grids/column-actions/column-actions-base.directive.mjs +4 -4
- package/esm2022/lib/grids/column-actions/column-actions.component.mjs +13 -13
- package/esm2022/lib/grids/column-actions/column-hiding.directive.mjs +4 -4
- package/esm2022/lib/grids/column-actions/column-pinning.directive.mjs +4 -4
- package/esm2022/lib/grids/column-actions/public_api.mjs +13 -0
- package/esm2022/lib/grids/columns/column-group.component.mjs +4 -4
- package/esm2022/lib/grids/columns/column-layout.component.mjs +4 -4
- package/esm2022/lib/grids/columns/column.component.mjs +4 -4
- package/esm2022/lib/grids/columns/templates.directive.mjs +25 -25
- package/esm2022/lib/grids/columns/validators.directive.mjs +22 -22
- package/esm2022/lib/grids/common/crud.service.mjs +4 -4
- package/esm2022/lib/grids/common/pipes.mjs +55 -55
- package/esm2022/lib/grids/filtering/advanced-filtering/advanced-filtering-dialog.component.mjs +4 -4
- package/esm2022/lib/grids/filtering/base/grid-filtering-cell.component.mjs +4 -4
- package/esm2022/lib/grids/filtering/base/grid-filtering-row.component.mjs +4 -4
- package/esm2022/lib/grids/filtering/excel-style/base-filtering.component.mjs +4 -4
- package/esm2022/lib/grids/filtering/excel-style/excel-style-clear-filters.component.mjs +4 -4
- package/esm2022/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.mjs +4 -4
- package/esm2022/lib/grids/filtering/excel-style/excel-style-custom-dialog.component.mjs +4 -4
- package/esm2022/lib/grids/filtering/excel-style/excel-style-date-expression.component.mjs +4 -4
- package/esm2022/lib/grids/filtering/excel-style/excel-style-default-expression.component.mjs +4 -4
- package/esm2022/lib/grids/filtering/excel-style/excel-style-filtering.component.mjs +10 -10
- package/esm2022/lib/grids/filtering/excel-style/excel-style-header.component.mjs +4 -4
- package/esm2022/lib/grids/filtering/excel-style/excel-style-hiding.component.mjs +4 -4
- package/esm2022/lib/grids/filtering/excel-style/excel-style-moving.component.mjs +4 -4
- package/esm2022/lib/grids/filtering/excel-style/excel-style-pinning.component.mjs +4 -4
- package/esm2022/lib/grids/filtering/excel-style/excel-style-search.component.mjs +7 -7
- package/esm2022/lib/grids/filtering/excel-style/excel-style-selecting.component.mjs +4 -4
- package/esm2022/lib/grids/filtering/excel-style/excel-style-sorting.component.mjs +4 -4
- package/esm2022/lib/grids/filtering/grid-filtering.service.mjs +4 -4
- package/esm2022/lib/grids/grid/expandable-cell.component.mjs +4 -4
- package/esm2022/lib/grids/grid/grid-api.service.mjs +4 -4
- package/esm2022/lib/grids/grid/grid-row.component.mjs +4 -4
- package/esm2022/lib/grids/grid/grid-validation.service.mjs +4 -4
- package/esm2022/lib/grids/grid/grid.component.mjs +4 -4
- package/esm2022/lib/grids/grid/grid.details.pipe.mjs +4 -4
- package/esm2022/lib/grids/grid/grid.directives.mjs +34 -34
- package/esm2022/lib/grids/grid/grid.module.mjs +27 -24
- package/esm2022/lib/grids/grid/grid.pipes.mjs +13 -13
- package/esm2022/lib/grids/grid/grid.summary.pipe.mjs +4 -4
- package/esm2022/lib/grids/grid/groupby-row.component.mjs +4 -4
- package/esm2022/lib/grids/grid-base.directive.mjs +4 -4
- package/esm2022/lib/grids/grid-footer/grid-footer.component.mjs +4 -4
- package/esm2022/lib/grids/grid-mrl-navigation.service.mjs +4 -4
- package/esm2022/lib/grids/grid-navigation.service.mjs +4 -4
- package/esm2022/lib/grids/grid.common.mjs +4 -4
- package/esm2022/lib/grids/grid.rowEdit.directive.mjs +16 -16
- package/esm2022/lib/grids/grouping/grid-group-by-area.component.mjs +4 -4
- package/esm2022/lib/grids/grouping/group-by-area.directive.mjs +7 -7
- package/esm2022/lib/grids/grouping/tree-grid-group-by-area.component.mjs +4 -4
- package/esm2022/lib/grids/headers/grid-header-group.component.mjs +4 -4
- package/esm2022/lib/grids/headers/grid-header-row.component.mjs +4 -4
- package/esm2022/lib/grids/headers/grid-header.component.mjs +4 -4
- package/esm2022/lib/grids/headers/pipes.mjs +10 -10
- package/esm2022/lib/grids/hierarchical-grid/hierarchical-cell.component.mjs +4 -4
- package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid-api.service.mjs +4 -4
- package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid-base.directive.mjs +4 -4
- package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid-navigation.service.mjs +4 -4
- package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid.component.mjs +7 -7
- package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid.module.mjs +27 -24
- package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid.pipes.mjs +7 -7
- package/esm2022/lib/grids/hierarchical-grid/hierarchical-row.component.mjs +4 -4
- package/esm2022/lib/grids/hierarchical-grid/row-island-api.service.mjs +4 -4
- package/esm2022/lib/grids/hierarchical-grid/row-island.component.mjs +4 -4
- package/esm2022/lib/grids/moving/moving.drag.directive.mjs +4 -4
- package/esm2022/lib/grids/moving/moving.drop.directive.mjs +4 -4
- package/esm2022/lib/grids/moving/moving.service.mjs +4 -4
- package/esm2022/lib/grids/pivot-grid/pivot-data-selector.component.mjs +4 -4
- package/esm2022/lib/grids/pivot-grid/pivot-filtering.service.mjs +4 -4
- package/esm2022/lib/grids/pivot-grid/pivot-grid-navigation.service.mjs +4 -4
- package/esm2022/lib/grids/pivot-grid/pivot-grid.component.mjs +4 -4
- package/esm2022/lib/grids/pivot-grid/pivot-grid.directives.mjs +4 -4
- package/esm2022/lib/grids/pivot-grid/pivot-grid.module.mjs +27 -24
- package/esm2022/lib/grids/pivot-grid/pivot-grid.pipes.mjs +31 -31
- package/esm2022/lib/grids/pivot-grid/pivot-header-row.component.mjs +4 -4
- package/esm2022/lib/grids/pivot-grid/pivot-row-dimension-content.component.mjs +4 -4
- package/esm2022/lib/grids/pivot-grid/pivot-row-dimension-header-group.component.mjs +4 -4
- package/esm2022/lib/grids/pivot-grid/pivot-row-dimension-header.component.mjs +4 -4
- package/esm2022/lib/grids/pivot-grid/pivot-row.component.mjs +4 -4
- package/esm2022/lib/grids/public_api.mjs +5 -2
- package/esm2022/lib/grids/resizing/pivot-grid/pivot-resize-handle.directive.mjs +4 -4
- package/esm2022/lib/grids/resizing/pivot-grid/pivot-resizer.component.mjs +4 -4
- package/esm2022/lib/grids/resizing/pivot-grid/pivot-resizing.service.mjs +4 -4
- package/esm2022/lib/grids/resizing/resize-handle.directive.mjs +4 -4
- package/esm2022/lib/grids/resizing/resizer.component.mjs +4 -4
- package/esm2022/lib/grids/resizing/resizer.directive.mjs +4 -4
- package/esm2022/lib/grids/resizing/resizing.service.mjs +4 -4
- package/esm2022/lib/grids/row-drag.directive.mjs +10 -10
- package/esm2022/lib/grids/row.directive.mjs +4 -4
- package/esm2022/lib/grids/selection/drag-select.directive.mjs +4 -4
- package/esm2022/lib/grids/selection/row-selectors.mjs +10 -10
- package/esm2022/lib/grids/selection/selection.service.mjs +4 -4
- package/esm2022/lib/grids/state.directive.mjs +4 -4
- package/esm2022/lib/grids/summaries/grid-root-summary.pipe.mjs +4 -4
- package/esm2022/lib/grids/summaries/grid-summary.service.mjs +4 -4
- package/esm2022/lib/grids/summaries/summary-cell.component.mjs +4 -4
- package/esm2022/lib/grids/summaries/summary-row.component.mjs +4 -4
- package/esm2022/lib/grids/toolbar/common.mjs +16 -16
- package/esm2022/lib/grids/toolbar/grid-toolbar-advanced-filtering.component.mjs +4 -4
- package/esm2022/lib/grids/toolbar/grid-toolbar-exporter.component.mjs +4 -4
- package/esm2022/lib/grids/toolbar/grid-toolbar-hiding.component.mjs +4 -4
- package/esm2022/lib/grids/toolbar/grid-toolbar-pinning.component.mjs +4 -4
- package/esm2022/lib/grids/toolbar/grid-toolbar.base.mjs +7 -7
- package/esm2022/lib/grids/toolbar/grid-toolbar.component.mjs +4 -4
- package/esm2022/lib/grids/tree-grid/public_api.mjs +4 -1
- package/esm2022/lib/grids/tree-grid/tree-cell.component.mjs +4 -4
- package/esm2022/lib/grids/tree-grid/tree-grid-api.service.mjs +4 -4
- package/esm2022/lib/grids/tree-grid/tree-grid-row.component.mjs +4 -4
- package/esm2022/lib/grids/tree-grid/tree-grid-selection.service.mjs +4 -4
- package/esm2022/lib/grids/tree-grid/tree-grid.component.mjs +4 -4
- package/esm2022/lib/grids/tree-grid/tree-grid.directives.mjs +4 -4
- package/esm2022/lib/grids/tree-grid/tree-grid.filtering.pipe.mjs +4 -4
- package/esm2022/lib/grids/tree-grid/tree-grid.grouping.pipe.mjs +4 -4
- package/esm2022/lib/grids/tree-grid/tree-grid.module.mjs +43 -39
- package/esm2022/lib/grids/tree-grid/tree-grid.pipes.mjs +22 -22
- package/esm2022/lib/grids/tree-grid/tree-grid.summary.pipe.mjs +4 -4
- package/esm2022/lib/icon/icon.component.mjs +4 -4
- package/esm2022/lib/icon/icon.module.mjs +5 -5
- package/esm2022/lib/icon/icon.service.mjs +4 -4
- package/esm2022/lib/input-group/input-group.component.mjs +4 -4
- package/esm2022/lib/input-group/input-group.module.mjs +5 -5
- package/esm2022/lib/list/list-item.component.mjs +4 -4
- package/esm2022/lib/list/list.common.mjs +16 -16
- package/esm2022/lib/list/list.component.mjs +19 -19
- package/esm2022/lib/list/list.module.mjs +5 -5
- package/esm2022/lib/navbar/navbar.component.mjs +10 -10
- package/esm2022/lib/navbar/navbar.module.mjs +5 -5
- package/esm2022/lib/navigation-drawer/navigation-drawer.component.mjs +4 -4
- package/esm2022/lib/navigation-drawer/navigation-drawer.directives.mjs +10 -10
- package/esm2022/lib/navigation-drawer/navigation-drawer.module.mjs +5 -5
- package/esm2022/lib/paginator/paginator-interfaces.mjs +4 -4
- package/esm2022/lib/paginator/paginator.component.mjs +13 -13
- package/esm2022/lib/paginator/paginator.module.mjs +5 -5
- package/esm2022/lib/progressbar/progressbar.common.mjs +7 -7
- package/esm2022/lib/progressbar/progressbar.component.mjs +10 -10
- package/esm2022/lib/progressbar/progressbar.module.mjs +5 -5
- package/esm2022/lib/query-builder/query-builder-header.component.mjs +4 -4
- package/esm2022/lib/query-builder/query-builder.component.mjs +7 -7
- package/esm2022/lib/query-builder/query-builder.module.mjs +5 -5
- package/esm2022/lib/radio/radio.component.mjs +4 -4
- package/esm2022/lib/select/select-group.component.mjs +4 -4
- package/esm2022/lib/select/select-item.component.mjs +4 -4
- package/esm2022/lib/select/select-navigation.directive.mjs +4 -4
- package/esm2022/lib/select/select.component.mjs +13 -13
- package/esm2022/lib/select/select.module.mjs +5 -5
- package/esm2022/lib/services/animation/angular-animation-service.mjs +4 -4
- package/esm2022/lib/services/csv/csv-exporter.mjs +4 -4
- package/esm2022/lib/services/direction/directionality.mjs +4 -4
- package/esm2022/lib/services/excel/excel-exporter.mjs +4 -4
- package/esm2022/lib/services/overlay/overlay.mjs +4 -4
- package/esm2022/lib/services/transaction/transaction-factory.service.mjs +7 -7
- package/esm2022/lib/simple-combo/simple-combo.component.mjs +4 -4
- package/esm2022/lib/simple-combo/simple-combo.module.mjs +5 -5
- package/esm2022/lib/slider/label/thumb-label.component.mjs +4 -4
- package/esm2022/lib/slider/slider.common.mjs +10 -10
- package/esm2022/lib/slider/slider.component.mjs +4 -4
- package/esm2022/lib/slider/slider.module.mjs +5 -5
- package/esm2022/lib/slider/thumb/thumb-slider.component.mjs +4 -4
- package/esm2022/lib/slider/ticks/tick.pipe.mjs +4 -4
- package/esm2022/lib/slider/ticks/ticks.component.mjs +4 -4
- package/esm2022/lib/snackbar/snackbar.component.mjs +4 -4
- package/esm2022/lib/snackbar/snackbar.module.mjs +5 -5
- package/esm2022/lib/splitter/splitter-pane/splitter-pane.component.mjs +4 -4
- package/esm2022/lib/splitter/splitter.component.mjs +7 -7
- package/esm2022/lib/splitter/splitter.module.mjs +5 -5
- package/esm2022/lib/stepper/step/step.component.mjs +4 -4
- package/esm2022/lib/stepper/stepper.component.mjs +4 -4
- package/esm2022/lib/stepper/stepper.directive.mjs +22 -22
- package/esm2022/lib/stepper/stepper.module.mjs +5 -5
- package/esm2022/lib/stepper/stepper.service.mjs +4 -4
- package/esm2022/lib/switch/switch.component.mjs +4 -4
- package/esm2022/lib/switch/switch.module.mjs +5 -5
- package/esm2022/lib/tabs/bottom-nav/bottom-nav-content.component.mjs +4 -4
- package/esm2022/lib/tabs/bottom-nav/bottom-nav-header.component.mjs +4 -4
- package/esm2022/lib/tabs/bottom-nav/bottom-nav-item.component.mjs +4 -4
- package/esm2022/lib/tabs/bottom-nav/bottom-nav.component.mjs +4 -4
- package/esm2022/lib/tabs/bottom-nav/bottom-nav.directives.mjs +7 -7
- package/esm2022/lib/tabs/bottom-nav/bottom-nav.module.mjs +5 -5
- package/esm2022/lib/tabs/tab-content.directive.mjs +4 -4
- package/esm2022/lib/tabs/tab-header.directive.mjs +4 -4
- package/esm2022/lib/tabs/tab-item.directive.mjs +4 -4
- package/esm2022/lib/tabs/tabs/tab-content.component.mjs +4 -4
- package/esm2022/lib/tabs/tabs/tab-header.component.mjs +4 -4
- package/esm2022/lib/tabs/tabs/tab-item.component.mjs +4 -4
- package/esm2022/lib/tabs/tabs/tabs.component.mjs +4 -4
- package/esm2022/lib/tabs/tabs/tabs.directives.mjs +7 -7
- package/esm2022/lib/tabs/tabs/tabs.module.mjs +5 -5
- package/esm2022/lib/tabs/tabs.directive.mjs +4 -4
- package/esm2022/lib/time-picker/time-picker.component.mjs +4 -4
- package/esm2022/lib/time-picker/time-picker.directives.mjs +7 -7
- package/esm2022/lib/time-picker/time-picker.module.mjs +5 -5
- package/esm2022/lib/time-picker/time-picker.pipes.mjs +7 -7
- package/esm2022/lib/toast/toast.component.mjs +4 -4
- package/esm2022/lib/toast/toast.module.mjs +5 -5
- package/esm2022/lib/tree/tree-navigation.service.mjs +4 -4
- package/esm2022/lib/tree/tree-node/tree-node.component.mjs +7 -7
- package/esm2022/lib/tree/tree-selection.service.mjs +4 -4
- package/esm2022/lib/tree/tree.component.mjs +10 -10
- package/esm2022/lib/tree/tree.module.mjs +5 -5
- package/esm2022/lib/tree/tree.service.mjs +4 -4
- package/fesm2022/igniteui-angular.mjs +2330 -2321
- package/fesm2022/igniteui-angular.mjs.map +1 -1
- package/lib/grids/column-actions/public_api.d.ts +7 -0
- package/lib/grids/grid/grid.module.d.ts +23 -20
- package/lib/grids/grid/public_api.d.ts +1 -1
- package/lib/grids/hierarchical-grid/hierarchical-grid.module.d.ts +23 -20
- package/lib/grids/hierarchical-grid/public_api.d.ts +1 -1
- package/lib/grids/pivot-grid/pivot-grid.module.d.ts +23 -20
- package/lib/grids/pivot-grid/public_api.d.ts +1 -1
- package/lib/grids/public_api.d.ts +2 -1
- package/lib/grids/tree-grid/public_api.d.ts +3 -1
- package/lib/grids/tree-grid/tree-grid.module.d.ts +39 -35
- package/package.json +6 -6
|
@@ -83,10 +83,10 @@ export class IgxTreeNodeLinkDirective {
|
|
|
83
83
|
ngOnDestroy() {
|
|
84
84
|
this.target.removeLinkChild(this);
|
|
85
85
|
}
|
|
86
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0
|
|
87
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0
|
|
86
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxTreeNodeLinkDirective, deps: [{ token: IGX_TREE_NODE_COMPONENT, optional: true }, { token: i1.IgxTreeNavigationService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
87
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: IgxTreeNodeLinkDirective, isStandalone: true, selector: "[igxTreeNodeLink]", inputs: { parentNode: ["igxTreeNodeLink", "parentNode"] }, host: { listeners: { "blur": "handleBlur()", "focus": "handleFocus()" }, properties: { "attr.role": "this.role", "attr.tabindex": "this.tabIndex" } }, ngImport: i0 }); }
|
|
88
88
|
}
|
|
89
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0
|
|
89
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxTreeNodeLinkDirective, decorators: [{
|
|
90
90
|
type: Directive,
|
|
91
91
|
args: [{
|
|
92
92
|
selector: `[igxTreeNodeLink]`,
|
|
@@ -580,12 +580,12 @@ export class IgxTreeNodeComponent extends ToggleAnimationPlayer {
|
|
|
580
580
|
this.registeredChildren.splice(index, 1);
|
|
581
581
|
}
|
|
582
582
|
}
|
|
583
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0
|
|
584
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0
|
|
583
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxTreeNodeComponent, deps: [{ token: IGX_TREE_COMPONENT }, { token: i2.IgxTreeSelectionService }, { token: i3.IgxTreeService }, { token: i1.IgxTreeNavigationService }, { token: i0.ChangeDetectorRef }, { token: IgxAngularAnimationService }, { token: i0.ElementRef }, { token: IGX_TREE_NODE_COMPONENT, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
584
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: IgxTreeNodeComponent, isStandalone: true, selector: "igx-tree-node", inputs: { data: "data", loading: "loading", resourceStrings: "resourceStrings", active: "active", disabled: "disabled", selected: "selected", expanded: "expanded" }, outputs: { selectedChange: "selectedChange", expandedChange: "expandedChange" }, host: { properties: { "class.igx-tree-node--disabled": "this.disabled", "class.igx-tree-node": "this.cssClass", "attr.role": "this.role" } }, providers: [
|
|
585
585
|
{ provide: IGX_TREE_NODE_COMPONENT, useExisting: IgxTreeNodeComponent }
|
|
586
586
|
], queries: [{ propertyName: "linkChildren", predicate: IgxTreeNodeLinkDirective, read: ElementRef }, { propertyName: "_children", predicate: IGX_TREE_NODE_COMPONENT, read: IGX_TREE_NODE_COMPONENT }, { propertyName: "allChildren", predicate: IGX_TREE_NODE_COMPONENT, descendants: true, read: IGX_TREE_NODE_COMPONENT }], viewQueries: [{ propertyName: "header", first: true, predicate: ["ghostTemplate"], descendants: true, read: ElementRef }, { propertyName: "_defaultExpandIndicatorTemplate", first: true, predicate: ["defaultIndicator"], descendants: true, read: TemplateRef, static: true }, { propertyName: "childrenContainer", first: true, predicate: ["childrenContainer"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<ng-template #noDragTemplate>\n <ng-template *ngTemplateOutlet=\"headerTemplate\"></ng-template>\n</ng-template>\n\n<!-- Will switch templates depending on dragDrop -->\n<ng-template *ngTemplateOutlet=\"noDragTemplate\">\n</ng-template>\n\n<div #childrenContainer\n *ngIf=\"expanded && !loading\"\n class=\"igx-tree-node__group\"\n role=\"group\"\n>\n <ng-content select=\"igx-tree-node\"></ng-content>\n</div>\n\n\n<ng-template #defaultIndicator>\n <igx-icon [attr.aria-label]=\"expanded ? resourceStrings.igx_collapse : resourceStrings.igx_expand\">\n {{ expanded ? \"keyboard_arrow_down\" : \"keyboard_arrow_right\" }}\n </igx-icon>\n</ng-template>\n\n<!-- separated in a template in case this ever needs to be templatable -->\n<ng-template #selectMarkerTemplate>\n <igx-checkbox [checked]=\"selected\" [readonly]=\"true\" [indeterminate]=\"indeterminate\" [tabindex]=\"-1\">\n </igx-checkbox>\n</ng-template>\n\n<ng-template #headerTemplate>\n <div #ghostTemplate class=\"igx-tree-node__wrapper\"\n [attr.role]=\"role\"\n [tabIndex]=\"tabIndex\"\n [ngClass]=\"{\n 'igx-tree-node__wrapper--cosy': isCosy,\n 'igx-tree-node__wrapper--compact': isCompact,\n 'igx-tree-node__wrapper--selected': selected,\n 'igx-tree-node__wrapper--active' : this.active,\n 'igx-tree-node__wrapper--focused' : this.focused,\n 'igx-tree-node__wrapper--disabled' : this.disabled\n }\"\n (pointerdown)=\"onPointerDown($event)\"\n (focus)=\"handleFocus()\"\n (blur)=\"clearFocus()\"\n >\n <div aria-hidden=\"true\">\n <span *ngFor=\"let item of [].constructor(level)\"\n aria-hidden=\"true\"\n class=\"igx-tree-node__spacer\"\n ></span>\n </div>\n\n <!-- Expand/Collapse indicator -->\n <span *ngIf=\"!loading\"\n class=\"igx-tree-node__toggle-button\"\n [ngClass]=\"{ 'igx-tree-node__toggle-button--hidden': !_children?.length }\"\n (click)=\"indicatorClick()\"\n >\n <ng-container *ngTemplateOutlet=\"expandIndicatorTemplate, context: { $implicit: expanded }\">\n </ng-container>\n </span>\n <span *ngIf=\"loading\"\n class=\"igx-tree-node__toggle-button\"\n >\n \t<igx-circular-bar\n \t[animate]=\"false\"\n \t[indeterminate]=\"true\"\n \t[textVisibility]=\"false\"\n \t>\n \t</igx-circular-bar>\n </span>\n\n <!-- Item selection -->\n <div *ngIf=\"showSelectors\"\n class=\"igx-tree-node__select\"\n (pointerdown)=\"$event.preventDefault()\"\n (click)=\"onSelectorClick($event)\">\n <ng-container *ngTemplateOutlet=\"selectMarkerTemplate\">\n </ng-container>\n </div>\n\n <div class=\"igx-tree-node__content\">\n <!-- Ghost content -->\n <ng-content></ng-content>\n </div>\n </div>\n\n <!-- Buffer element for 'move after' when D&D is implemented-->\n <div class=\"igx-tree-node__drop-indicator\">\n <span aria-hidden=\"true\" class=\"igx-tree-node__spacer\" *ngFor=\"let item of [].constructor(level)\"></span>\n <!-- style rules target this div, do not delete it -->\n <div></div>\n </div>\n</ng-template>\n\n<ng-template #dragTemplate>\n <!-- Drag drop goes here\n igxDrop\n #dropRef=\"drop\"\n [igxNodeDrag]=\"this\"\n (dragStart)=\"logDrop(dropRef)\"\n (leave)=\"emitLeave()\"\n (enter)=\"emitEnter()\" -->\n <div class=\"igx-tree-node__drag-wrapper\">\n <ng-template *ngTemplateOutlet=\"headerTemplate\"></ng-template>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { kind: "component", type: IgxCheckboxComponent, selector: "igx-checkbox", inputs: ["id", "labelId", "value", "name", "tabindex", "labelPosition", "disableRipple", "required", "aria-labelledby", "aria-label", "indeterminate", "checked", "disabled", "invalid", "readonly", "disableTransitions"], outputs: ["change"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: IgxCircularProgressBarComponent, selector: "igx-circular-bar", inputs: ["id", "isIndeterminate", "textVisibility", "text"] }] }); }
|
|
587
587
|
}
|
|
588
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0
|
|
588
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxTreeNodeComponent, decorators: [{
|
|
589
589
|
type: Component,
|
|
590
590
|
args: [{ selector: 'igx-tree-node', providers: [
|
|
591
591
|
{ provide: IGX_TREE_NODE_COMPONENT, useExisting: IgxTreeNodeComponent }
|
|
@@ -649,4 +649,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-rc.4", ng
|
|
|
649
649
|
}], expanded: [{
|
|
650
650
|
type: Input
|
|
651
651
|
}] } });
|
|
652
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ub2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi90cmVlL3RyZWUtbm9kZS90cmVlLW5vZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL3RyZWUvdHJlZS1ub2RlL3RyZWUtbm9kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULGVBQWUsRUFDZixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFFTixRQUFRLEVBQ1IsV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRW5FLE9BQU8sRUFBRSxxQkFBcUIsRUFBMkIsTUFBTSxrREFBa0QsQ0FBQztBQUNsSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUVoRyxPQUFPLEVBR0gsb0JBQW9CLEVBQ3BCLGtCQUFrQixFQUNsQix1QkFBdUIsRUFFMUIsTUFBTSxXQUFXLENBQUM7QUFJbkIsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDMUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdCQUFn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aUI7c0JBRHhCLFNBQVM7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQThGekMsUUFBUTtzQkFEbEIsS0FBSztnQkFvQ0ssUUFBUTtzQkFEbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2tpcFNlbGYsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRGlzcGxheURlbnNpdHkgfSBmcm9tICcuLi8uLi9jb3JlL2RlbnNpdHknO1xuaW1wb3J0IHsgQ3VycmVudFJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uLy4uL2NvcmUvaTE4bi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgSVRyZWVSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi8uLi9jb3JlL2kxOG4vdHJlZS1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgVG9nZ2xlQW5pbWF0aW9uUGxheWVyLCBUb2dnbGVBbmltYXRpb25TZXR0aW5ncyB9IGZyb20gJy4uLy4uL2V4cGFuc2lvbi1wYW5lbC90b2dnbGUtYW5pbWF0aW9uLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hBbmd1bGFyQW5pbWF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FuaW1hdGlvbi9hbmd1bGFyLWFuaW1hdGlvbi1zZXJ2aWNlJztcbmltcG9ydCB7IEFuaW1hdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hbmltYXRpb24vYW5pbWF0aW9uJztcbmltcG9ydCB7XG4gICAgSWd4VHJlZSxcbiAgICBJZ3hUcmVlTm9kZSxcbiAgICBJZ3hUcmVlU2VsZWN0aW9uVHlwZSxcbiAgICBJR1hfVFJFRV9DT01QT05FTlQsXG4gICAgSUdYX1RSRUVfTk9ERV9DT01QT05FTlQsXG4gICAgSVRyZWVOb2RlVG9nZ2xpbmdFdmVudEFyZ3Ncbn0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IElneFRyZWVOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4uL3RyZWUtbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IElneFRyZWVTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vdHJlZS1zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hUcmVlU2VydmljZSB9IGZyb20gJy4uL3RyZWUuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hDaXJjdWxhclByb2dyZXNzQmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3NiYXIuY29tcG9uZW50JztcbmltcG9ydCB7IElneENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50JztcbmltcG9ydCB7IElneEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQsIE5nSWYsIE5nQ2xhc3MsIE5nRm9yIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuLy8gVE9ETzogSW1wbGVtZW50IGFyaWEgZnVuY3Rpb25hbGl0eVxuLyoqXG4gKiBAaGlkZGVuIEBpbnRlcm5hbFxuICogVXNlZCBmb3IgbGlua3MgKGBhYCB0YWdzKSBpbiB0aGUgYm9keSBvZiBhbiBgaWd4LXRyZWUtbm9kZWAuIEhhbmRsZXMgYXJpYSBhbmQgZXZlbnQgZGlzcGF0Y2guXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiBgW2lneFRyZWVOb2RlTGlua11gLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSWd4VHJlZU5vZGVMaW5rRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICAgIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJylcbiAgICBwdWJsaWMgcm9sZSA9ICd0cmVlaXRlbSc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbm9kZSdzIHBhcmVudC4gU2hvdWxkIGJlIHVzZWQgb25seSB3aGVuIHRoZSBsaW5rIGlzIGRlZmluZWRcbiAgICAgKiBpbiBgPG5nLXRlbXBsYXRlPmAgdGFnIG91dHNpZGUgb2YgaXRzIHBhcmVudCwgYXMgQW5ndWxhciBESSB3aWxsIG5vdCBwcm9wZXJseSBwcm92aWRlIGEgcmVmZXJlbmNlXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlPlxuICAgICAqICAgICA8aWd4LXRyZWUtbm9kZSAjbXlOb2RlICpuZ0Zvcj1cImxldCBub2RlIG9mIGRhdGFcIiBbZGF0YV09XCJub2RlXCI+XG4gICAgICogICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub2RlVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBkYXRhLCBwYXJlbnROb2RlOiBteU5vZGUgfVwiPlxuICAgICAqICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgKiAgICAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAqICAgICAuLi5cbiAgICAgKiAgICAgPCEtLSBub2RlIHRlbXBsYXRlIGlzIGRlZmluZWQgdW5kZXIgdHJlZSB0byBhY2Nlc3MgcmVsYXRlZCBzZXJ2aWNlcyAtLT5cbiAgICAgKiAgICAgPG5nLXRlbXBsYXRlICNub2RlVGVtcGxhdGUgbGV0LWRhdGEgbGV0LW5vZGU9XCJwYXJlbnROb2RlXCI+XG4gICAgICogICAgICAgICA8YSBbaWd4VHJlZU5vZGVMaW5rXT1cIm5vZGVcIj57eyBkYXRhLmxhYmVsIH19PC9hPlxuICAgICAqICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KCdpZ3hUcmVlTm9kZUxpbmsnKVxuICAgIHB1YmxpYyBzZXQgcGFyZW50Tm9kZSh2YWw6IGFueSkge1xuICAgICAgICBpZiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLl9wYXJlbnROb2RlID0gdmFsO1xuICAgICAgICAgICAgKHRoaXMuX3BhcmVudE5vZGUgYXMgYW55KS5hZGRMaW5rQ2hpbGQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBhcmVudE5vZGUoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudE5vZGU7XG4gICAgfVxuXG4gICAgLyoqIEEgcG9pbnRlciB0byB0aGUgcGFyZW50IG5vZGUgKi9cbiAgICBwcml2YXRlIGdldCB0YXJnZXQoKTogSWd4VHJlZU5vZGU8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGUgfHwgdGhpcy5wYXJlbnROb2RlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3BhcmVudE5vZGU6IElneFRyZWVOb2RlPGFueT4gPSBudWxsO1xuXG4gICAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChJR1hfVFJFRV9OT0RFX0NPTVBPTkVOVClcbiAgICBwcml2YXRlIG5vZGU6IElneFRyZWVOb2RlPGFueT4sXG4gICAgICAgIHByaXZhdGUgbmF2U2VydmljZTogSWd4VHJlZU5hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci50YWJpbmRleCcpXG4gICAgcHVibGljIGdldCB0YWJJbmRleCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZTZXJ2aWNlLmZvY3VzZWROb2RlID09PSB0aGlzLnRhcmdldCA/ICh0aGlzLnRhcmdldD8uZGlzYWJsZWQgPyAtMSA6IDApIDogLTE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKiBDbGVhciB0aGUgbm9kZSdzIGZvY3VzZWQgc3RhdGVcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdibHVyJylcbiAgICBwdWJsaWMgaGFuZGxlQmx1cigpIHtcbiAgICAgICAgdGhpcy50YXJnZXQuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKiBTZXQgdGhlIG5vZGUgYXMgZm9jdXNlZFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzJylcbiAgICBwdWJsaWMgaGFuZGxlRm9jdXMoKSB7XG4gICAgICAgIGlmICh0aGlzLnRhcmdldCAmJiAhdGhpcy50YXJnZXQuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm5hdlNlcnZpY2UuZm9jdXNlZE5vZGUgIT09IHRoaXMudGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXZTZXJ2aWNlLmZvY3VzZWROb2RlID0gdGhpcy50YXJnZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRhcmdldC5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnRhcmdldC5yZW1vdmVMaW5rQ2hpbGQodGhpcyk7XG4gICAgfVxufVxuXG4vKipcbiAqXG4gKiBUaGUgdHJlZSBub2RlIGNvbXBvbmVudCByZXByZXNlbnRzIGEgY2hpbGQgbm9kZSBvZiB0aGUgdHJlZSBjb21wb25lbnQgb3IgYW5vdGhlciB0cmVlIG5vZGUuXG4gKiBVc2FnZTpcbiAqXG4gKiBgYGBodG1sXG4gKiAgPGlneC10cmVlPlxuICogIC4uLlxuICogICAgPGlneC10cmVlLW5vZGUgW2RhdGFdPVwiZGF0YVwiIFtzZWxlY3RlZF09XCJzZXJ2aWNlLmlzTm9kZVNlbGVjdGVkKGRhdGEuS2V5KVwiIFtleHBhbmRlZF09XCJzZXJ2aWNlLmlzTm9kZUV4cGFuZGVkKGRhdGEuS2V5KVwiPlxuICogICAgICB7eyBkYXRhLkZpcnN0TmFtZSB9fSB7eyBkYXRhLkxhc3ROYW1lIH19XG4gKiAgICA8L2lneC10cmVlLW5vZGU+XG4gKiAgLi4uXG4gKiAgPC9pZ3gtdHJlZT5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC10cmVlLW5vZGUnLFxuICAgIHRlbXBsYXRlVXJsOiAndHJlZS1ub2RlLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBJR1hfVFJFRV9OT0RFX0NPTVBPTkVOVCwgdXNlRXhpc3Rpbmc6IElneFRyZWVOb2RlQ29tcG9uZW50IH1cbiAgICBdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nVGVtcGxhdGVPdXRsZXQsIE5nSWYsIElneEljb25Db21wb25lbnQsIElneENoZWNrYm94Q29tcG9uZW50LCBOZ0NsYXNzLCBOZ0ZvciwgSWd4Q2lyY3VsYXJQcm9ncmVzc0JhckNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4VHJlZU5vZGVDb21wb25lbnQ8VD4gZXh0ZW5kcyBUb2dnbGVBbmltYXRpb25QbGF5ZXIgaW1wbGVtZW50cyBJZ3hUcmVlTm9kZTxUPiwgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIGVudHJ5IHRoYXQgdGhlIG5vZGUgaXMgdmlzdWFsaXppbmcuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFJlcXVpcmVkIGZvciBzZWFyY2hpbmcgdGhyb3VnaCBub2Rlcy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LXRyZWU+XG4gICAgICogIC4uLlxuICAgICAqICAgIDxpZ3gtdHJlZS1ub2RlIFtkYXRhXT1cImRhdGFcIj5cbiAgICAgKiAgICAgIHt7IGRhdGEuRmlyc3ROYW1lIH19IHt7IGRhdGEuTGFzdE5hbWUgfX1cbiAgICAgKiAgICA8L2lneC10cmVlLW5vZGU+XG4gICAgICogIC4uLlxuICAgICAqICA8L2lneC10cmVlPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRhdGE6IFQ7XG5cbiAgICAvKipcbiAgICAgKiBUbyBiZSB1c2VkIGZvciBsb2FkLW9uLWRlbWFuZCBzY2VuYXJpb3MgaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGV0aGVyIHRoZSBub2RlIGlzIGxvYWRpbmcgZGF0YS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogTG9hZGluZyBub2RlcyBkbyBub3QgcmVuZGVyIGNoaWxkcmVuLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcblxuICAgIC8vIFRPIERPOiByZXR1cm4gZGlmZmVyZW50IHRhYiBpbmRleCBkZXBlbmRpbmcgb24gYW5jaG9yIGNoaWxkXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHNldCB0YWJJbmRleCh2YWw6IG51bWJlcikge1xuICAgICAgICB0aGlzLl90YWJJbmRleCA9IHZhbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHRhYkluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3RhYkluZGV4ID09PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5uYXZTZXJ2aWNlLmZvY3VzZWROb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzTGlua0NoaWxkcmVuID8gLTEgOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmhhc0xpbmtDaGlsZHJlbiA/IC0xIDogdGhpcy5fdGFiSW5kZXg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBhbmltYXRpb25TZXR0aW5ncygpOiBUb2dnbGVBbmltYXRpb25TZXR0aW5ncyB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWUuYW5pbWF0aW9uU2V0dGluZ3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBVc2VzIEVOIHJlc291cmNlcyBieSBkZWZhdWx0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCByZXNvdXJjZVN0cmluZ3ModmFsdWU6IElUcmVlUmVzb3VyY2VTdHJpbmdzKSB7XG4gICAgICAgIHRoaXMuX3Jlc291cmNlU3RyaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3Jlc291cmNlU3RyaW5ncywgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFjY2Vzc29yIHRoYXQgcmV0dXJucyB0aGUgcmVzb3VyY2Ugc3RyaW5ncy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJlc291cmNlU3RyaW5ncygpOiBJVHJlZVJlc291cmNlU3RyaW5ncyB7XG4gICAgICAgIGlmICghdGhpcy5fcmVzb3VyY2VTdHJpbmdzKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNvdXJjZVN0cmluZ3MgPSBDdXJyZW50UmVzb3VyY2VTdHJpbmdzLlRyZWVSZXNTdHJpbmdzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVN0cmluZ3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBhY3RpdmUgc3RhdGUgb2YgdGhlIG5vZGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZTogYm9vbGVhblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBhY3RpdmUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLm5hdlNlcnZpY2UuYWN0aXZlTm9kZSA9IHRoaXM7XG4gICAgICAgICAgICB0aGlzLnRyZWUuYWN0aXZlTm9kZUJpbmRpbmdDaGFuZ2UuZW1pdCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZTZXJ2aWNlLmFjdGl2ZU5vZGUgPT09IHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBub2RlJ3MgYHNlbGVjdGVkYCBwcm9wZXJ0eSBjaGFuZ2VzLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdHJlZT5cbiAgICAgKiAgICAgIDxpZ3gtdHJlZS1ub2RlICpuZ0Zvcj1cImxldCBub2RlIG9mIGRhdGFcIiBbZGF0YV09XCJub2RlXCIgWyhzZWxlY3RlZCldPVwibm9kZS5zZWxlY3RlZFwiPlxuICAgICAqICAgICAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3Qgbm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXMoZGF0YVswXSlbMF07XG4gICAgICogbm9kZS5zZWxlY3RlZENoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlOiBib29sZWFuKSA9PiBjb25zb2xlLmxvZyhcIk5vZGUgc2VsZWN0aW9uIGNoYW5nZWQgdG8gXCIsIGUpKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBzZWxlY3RlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgbm9kZSdzIGBleHBhbmRlZGAgcHJvcGVydHkgY2hhbmdlcy5cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRyZWU+XG4gICAgICogICAgICA8aWd4LXRyZWUtbm9kZSAqbmdGb3I9XCJsZXQgbm9kZSBvZiBkYXRhXCIgW2RhdGFdPVwibm9kZVwiIFsoZXhwYW5kZWQpXT1cIm5vZGUuZXhwYW5kZWRcIj5cbiAgICAgKiAgICAgIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgKiA8L2lneC10cmVlPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMF0pWzBdO1xuICAgICAqIG5vZGUuZXhwYW5kZWRDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZTogYm9vbGVhbikgPT4gY29uc29sZS5sb2coXCJOb2RlIGV4cGFuc2lvbiBzdGF0ZSBjaGFuZ2VkIHRvIFwiLCBlKSlcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgZXhwYW5kZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGZvY3VzZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRm9jdXNlZCAmJlxuICAgICAgICAgICAgdGhpcy5uYXZTZXJ2aWNlLmZvY3VzZWROb2RlID09PSB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgZnVsbCBwYXRoIHRvIHRoZSBub2RlIGluY3VkaW5nIGl0c2VsZlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMF0pWzBdO1xuICAgICAqIGNvbnN0IHBhdGg6IElneFRyZWVOb2RlPGFueT5bXSA9IG5vZGUucGF0aDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHBhdGgoKTogSWd4VHJlZU5vZGU8YW55PltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZT8ucGF0aCA/IFsuLi50aGlzLnBhcmVudE5vZGUucGF0aCwgdGhpc10gOiBbdGhpc107XG4gICAgfVxuXG4gICAgLy8gVE9ETzogYmluZCB0byBkaXNhYmxlZCBzdGF0ZSB3aGVuIG5vZGUgaXMgZHJhZ2dlZFxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIG5vZGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZTogYm9vbGVhblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtdHJlZS1ub2RlLS1kaXNhYmxlZCcpXG4gICAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudHJlZS5kaXNhYmxlZENoYW5nZS5lbWl0KHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtdHJlZS1ub2RlJylcbiAgICBwdWJsaWMgY3NzQ2xhc3MgPSAnaWd4LXRyZWUtbm9kZSc7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXG4gICAgcHVibGljIGdldCByb2xlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNMaW5rQ2hpbGRyZW4gPyAnbm9uZScgOiAndHJlZWl0ZW0nO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oSWd4VHJlZU5vZGVMaW5rRGlyZWN0aXZlLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwdWJsaWMgbGlua0NoaWxkcmVuOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKElHWF9UUkVFX05PREVfQ09NUE9ORU5ULCB7IHJlYWQ6IElHWF9UUkVFX05PREVfQ09NUE9ORU5UIH0pXG4gICAgcHVibGljIF9jaGlsZHJlbjogUXVlcnlMaXN0PElneFRyZWVOb2RlPGFueT4+O1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihJR1hfVFJFRV9OT0RFX0NPTVBPTkVOVCwgeyByZWFkOiBJR1hfVFJFRV9OT0RFX0NPTVBPTkVOVCwgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgICBwdWJsaWMgYWxsQ2hpbGRyZW46IFF1ZXJ5TGlzdDxJZ3hUcmVlTm9kZTxhbnk+PjtcblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhlIG5vZGUgKGlmIGFueSlcbiAgICAgKlxuICAgICAqIEByZW1hcmtcbiAgICAgKiBSZXR1cm5zIGBudWxsYCBpZiBub2RlIGRvZXMgbm90IGhhdmUgY2hpbGRyZW5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMF0pWzBdO1xuICAgICAqIGNvbnN0IGNoaWxkcmVuOiBJZ3hUcmVlTm9kZTxhbnk+W10gPSBub2RlLmNoaWxkcmVuO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY2hpbGRyZW4oKTogSWd4VHJlZU5vZGU8YW55PltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuPy5sZW5ndGggPyB0aGlzLl9jaGlsZHJlbi50b0FycmF5KCkgOiBudWxsO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHdpbGwgYmUgdXNlZCBpbiBEcmFnIGFuZCBEcm9wIGltcGxlbWVudGF0aW9uXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQFZpZXdDaGlsZCgnZ2hvc3RUZW1wbGF0ZScsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHB1YmxpYyBoZWFkZXI6IEVsZW1lbnRSZWY7XG5cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0SW5kaWNhdG9yJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBfZGVmYXVsdEV4cGFuZEluZGljYXRvclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgnY2hpbGRyZW5Db250YWluZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwcml2YXRlIGNoaWxkcmVuQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gICAgcHJpdmF0ZSBnZXQgaGFzTGlua0NoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5saW5rQ2hpbGRyZW4/Lmxlbmd0aCA+IDAgfHwgdGhpcy5yZWdpc3RlcmVkQ2hpbGRyZW4/Lmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBpc0NvbXBhY3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWU/LmRpc3BsYXlEZW5zaXR5ID09PSBEaXNwbGF5RGVuc2l0eS5jb21wYWN0O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgaXNDb3N5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlPy5kaXNwbGF5RGVuc2l0eSA9PT0gRGlzcGxheURlbnNpdHkuY29zeTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaXNGb2N1c2VkOiBib29sZWFuO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlZ2lzdGVyZWRDaGlsZHJlbjogSWd4VHJlZU5vZGVMaW5rRGlyZWN0aXZlW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHByaXZhdGUgX3Jlc291cmNlU3RyaW5ncyA9IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MuVHJlZVJlc1N0cmluZ3M7XG5cbiAgICBwcml2YXRlIF90YWJJbmRleCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KElHWF9UUkVFX0NPTVBPTkVOVCkgcHVibGljIHRyZWU6IElneFRyZWUsXG4gICAgICAgIHByb3RlY3RlZCBzZWxlY3Rpb25TZXJ2aWNlOiBJZ3hUcmVlU2VsZWN0aW9uU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIHRyZWVTZXJ2aWNlOiBJZ3hUcmVlU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIG5hdlNlcnZpY2U6IElneFRyZWVOYXZpZ2F0aW9uU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBJbmplY3QoSWd4QW5ndWxhckFuaW1hdGlvblNlcnZpY2UpIGFuaW1hdGlvblNlcnZpY2U6IEFuaW1hdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIEBJbmplY3QoSUdYX1RSRUVfTk9ERV9DT01QT05FTlQpIHB1YmxpYyBwYXJlbnROb2RlOiBJZ3hUcmVlTm9kZTxhbnk+XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGFuaW1hdGlvblNlcnZpY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBzaG93U2VsZWN0b3JzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlLnNlbGVjdGlvbiAhPT0gSWd4VHJlZVNlbGVjdGlvblR5cGUuTm9uZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaW5kZXRlcm1pbmF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uU2VydmljZS5pc05vZGVJbmRldGVybWluYXRlKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgZGVwdGggb2YgdGhlIG5vZGUsIHJlbGF0aXZlIHRvIHRoZSByb290XG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlPlxuICAgICAqICAuLi5cbiAgICAgKiAgPGlneC10cmVlLW5vZGUgI25vZGU+XG4gICAgICogICAgICBNeSBsZXZlbCBpcyB7eyBub2RlLmxldmVsIH19XG4gICAgICogIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgKiA8L2lneC10cmVlPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMTJdKVswXTtcbiAgICAgKiBjb25zdCBsZXZlbDogbnVtYmVyID0gbm9kZS5sZXZlbDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGxldmVsKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudE5vZGUgPyB0aGlzLnBhcmVudE5vZGUubGV2ZWwgKyAxIDogMDtcbiAgICB9XG5cbiAgICAvKiogR2V0L3NldCB3aGV0aGVyIHRoZSBub2RlIGlzIHNlbGVjdGVkLiBTdXBwb3JzdCB0d28td2F5IGJpbmRpbmcuXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlPlxuICAgICAqICAuLi5cbiAgICAgKiAgPGlneC10cmVlLW5vZGUgKm5nRm9yPVwibGV0IG5vZGUgb2YgZGF0YVwiIFsoc2VsZWN0ZWQpXT1cIm5vZGUuc2VsZWN0ZWRcIj5cbiAgICAgKiAgICAgIHt7IG5vZGUubGFiZWwgfX1cbiAgICAgKiAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3Qgbm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXMoZGF0YVswXSlbMF07XG4gICAgICogY29uc3Qgc2VsZWN0ZWQgPSBub2RlLnNlbGVjdGVkO1xuICAgICAqIG5vZGUuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBzZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uU2VydmljZS5pc05vZGVTZWxlY3RlZCh0aGlzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkKHZhbDogYm9vbGVhbikge1xuICAgICAgICBpZiAoISh0aGlzLnRyZWU/Lm5vZGVzICYmIHRoaXMudHJlZS5ub2Rlcy5maW5kKChlKSA9PiBlID09PSB0aGlzKSkgJiYgdmFsKSB7XG4gICAgICAgICAgICB0aGlzLnRyZWUuZm9yY2VTZWxlY3QucHVzaCh0aGlzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsICYmICF0aGlzLnNlbGVjdGlvblNlcnZpY2UuaXNOb2RlU2VsZWN0ZWQodGhpcykpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3ROb2Rlc1dpdGhOb0V2ZW50KFt0aGlzXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWwgJiYgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmlzTm9kZVNlbGVjdGVkKHRoaXMpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3ROb2Rlc1dpdGhOb0V2ZW50KFt0aGlzXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogR2V0L3NldCB3aGV0aGVyIHRoZSBub2RlIGlzIGV4cGFuZGVkXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlPlxuICAgICAqICAuLi5cbiAgICAgKiAgPGlneC10cmVlLW5vZGUgKm5nRm9yPVwibGV0IG5vZGUgb2YgZGF0YVwiIFtleHBhbmRlZF09XCJub2RlLm5hbWUgPT09IHRoaXMuZXhwYW5kZWROb2RlXCI+XG4gICAgICogICAgICB7eyBub2RlLmxhYmVsIH19XG4gICAgICogIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgKiA8L2lneC10cmVlPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMF0pWzBdO1xuICAgICAqIGNvbnN0IGV4cGFuZGVkID0gbm9kZS5leHBhbmRlZDtcbiAgICAgKiBub2RlLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgZXhwYW5kZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWVTZXJ2aWNlLmlzRXhwYW5kZWQodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBleHBhbmRlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5leHBhbmQodGhpcywgZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5jb2xsYXBzZSh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgZXhwYW5kSW5kaWNhdG9yVGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWU/LmV4cGFuZEluZGljYXRvciA/IHRoaXMudHJlZS5leHBhbmRJbmRpY2F0b3IgOiB0aGlzLl9kZWZhdWx0RXhwYW5kSW5kaWNhdG9yVGVtcGxhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hdGl2ZSBET00gZWxlbWVudCByZXByZXNlbnRpbmcgdGhlIG5vZGUuIENvdWxkIGJlIG51bGwgaW4gY2VydGFpbiBlbnZpcm9ubWVudHMuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0IHRoZSBuYXRpdmVFbGVtZW50IG9mIHRoZSBzZWNvbmQgbm9kZVxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlID0gdGhpcy50cmVlLm5vZGVzLmZpcnN0KCk7XG4gICAgICogY29uc3Qgbm9kZUVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gbm9kZS5uYXRpdmVFbGVtZW50O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgbmF0aXZlRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5vcGVuQW5pbWF0aW9uRG9uZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudHJlZS5ub2RlRXhwYW5kZWQuZW1pdCh7IG93bmVyOiB0aGlzLnRyZWUsIG5vZGU6IHRoaXMgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY2xvc2VBbmltYXRpb25Eb25lLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50cmVlLm5vZGVDb2xsYXBzZWQuZW1pdCh7IG93bmVyOiB0aGlzLnRyZWUsIG5vZGU6IHRoaXMgfSk7XG4gICAgICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLmNvbGxhcHNlKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICogU2V0cyB0aGUgZm9jdXMgdG8gdGhlIG5vZGUncyA8YT4gY2hpbGQsIGlmIHByZXNlbnRcbiAgICAgKiBTZXRzIHRoZSBub2RlIGFzIHRoZSB0cmVlIHNlcnZpY2UncyBmb2N1c2VkTm9kZVxuICAgICAqIE1hcmtzIHRoZSBub2RlIGFzIHRoZSBjdXJyZW50IGFjdGl2ZSBlbGVtZW50XG4gICAgICovXG4gICAgcHVibGljIGhhbmRsZUZvY3VzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm5hdlNlcnZpY2UuZm9jdXNlZE5vZGUgIT09IHRoaXMpIHtcbiAgICAgICAgICAgIHRoaXMubmF2U2VydmljZS5mb2N1c2VkTm9kZSA9IHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5saW5rQ2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5saW5rQ2hpbGRyZW4uZmlyc3QubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlZ2lzdGVyZWRDaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJlZENoaWxkcmVuWzBdLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKiBDbGVhciB0aGUgbm9kZSdzIGZvY3VzZWQgc3RhdHVzXG4gICAgICovXG4gICAgcHVibGljIGNsZWFyRm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25TZWxlY3RvckNsaWNrKGV2ZW50KSB7XG4gICAgICAgIC8vIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAvLyB0aGlzLm5hdlNlcnZpY2UuaGFuZGxlRm9jdXNlZEFuZEFjdGl2ZU5vZGUodGhpcyk7XG4gICAgICAgIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdE11bHRpcGxlTm9kZXModGhpcywgZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3ROb2RlKHRoaXMsIGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3ROb2RlKHRoaXMsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIG5vZGUgZXhwYW5zaW9uIHN0YXRlLCB0cmlnZ2VyaW5nIGFuaW1hdGlvblxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdHJlZT5cbiAgICAgKiAgICAgIDxpZ3gtdHJlZS1ub2RlICNub2RlPk15IE5vZGU8L2lneC10cmVlLW5vZGU+XG4gICAgICogPC9pZ3gtdHJlZT5cbiAgICAgKiA8YnV0dG9uIGlneEJ1dHRvbiAoY2xpY2spPVwibm9kZS50b2dnbGUoKVwiPlRvZ2dsZSBOb2RlPC9idXR0b24+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbXlOb2RlOiBJZ3hUcmVlTm9kZTxhbnk+ID0gdGhpcy50cmVlLmZpbmROb2RlcyhkYXRhWzBdKVswXTtcbiAgICAgKiBteU5vZGUudG9nZ2xlKCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29sbGFwc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaW5kaWNhdG9yQ2xpY2soKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlKCk7XG4gICAgICAgIHRoaXMubmF2U2VydmljZS5zZXRGb2N1c2VkQW5kQWN0aXZlTm9kZSh0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvblBvaW50ZXJEb3duKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLm5hdlNlcnZpY2Uuc2V0Rm9jdXNlZEFuZEFjdGl2ZU5vZGUodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZW5zdXJlU3RhdGVPbk5vZGVEZWxldGUodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhwYW5kcyB0aGUgbm9kZSwgdHJpZ2dlcmluZyBhbmltYXRpb25cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRyZWU+XG4gICAgICogICAgICA8aWd4LXRyZWUtbm9kZSAjbm9kZT5NeSBOb2RlPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogPGJ1dHRvbiBpZ3hCdXR0b24gKGNsaWNrKT1cIm5vZGUuZXhwYW5kKClcIj5FeHBhbmQgTm9kZTwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG15Tm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXMoZGF0YVswXSlbMF07XG4gICAgICogbXlOb2RlLmV4cGFuZCgpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBleHBhbmQoKSB7XG4gICAgICAgIGlmICh0aGlzLmV4cGFuZGVkICYmICF0aGlzLnRyZWVTZXJ2aWNlLmNvbGxhcHNpbmdOb2Rlcy5oYXModGhpcykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcmdzOiBJVHJlZU5vZGVUb2dnbGluZ0V2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLnRyZWUsXG4gICAgICAgICAgICBub2RlOiB0aGlzLFxuICAgICAgICAgICAgY2FuY2VsOiBmYWxzZVxuXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudHJlZS5ub2RlRXhwYW5kaW5nLmVtaXQoYXJncyk7XG4gICAgICAgIGlmICghYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UuZXhwYW5kKHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5wbGF5T3BlbkFuaW1hdGlvbihcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuQ29udGFpbmVyXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29sbGFwc2VzIHRoZSBub2RlLCB0cmlnZ2VyaW5nIGFuaW1hdGlvblxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdHJlZT5cbiAgICAgKiAgICAgIDxpZ3gtdHJlZS1ub2RlICNub2RlPk15IE5vZGU8L2lneC10cmVlLW5vZGU+XG4gICAgICogPC9pZ3gtdHJlZT5cbiAgICAgKiA8YnV0dG9uIGlneEJ1dHRvbiAoY2xpY2spPVwibm9kZS5jb2xsYXBzZSgpXCI+Q29sbGFwc2UgTm9kZTwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG15Tm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXMoZGF0YVswXSlbMF07XG4gICAgICogbXlOb2RlLmNvbGxhcHNlKCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNvbGxhcHNlKCkge1xuICAgICAgICBpZiAoIXRoaXMuZXhwYW5kZWQgfHwgdGhpcy50cmVlU2VydmljZS5jb2xsYXBzaW5nTm9kZXMuaGFzKHRoaXMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXJnczogSVRyZWVOb2RlVG9nZ2xpbmdFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBvd25lcjogdGhpcy50cmVlLFxuICAgICAgICAgICAgbm9kZTogdGhpcyxcbiAgICAgICAgICAgIGNhbmNlbDogZmFsc2VcblxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRyZWUubm9kZUNvbGxhcHNpbmcuZW1pdChhcmdzKTtcbiAgICAgICAgaWYgKCFhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5jb2xsYXBzaW5nKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wbGF5Q2xvc2VBbmltYXRpb24oXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbkNvbnRhaW5lclxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBhZGRMaW5rQ2hpbGQobGluazogSWd4VHJlZU5vZGVMaW5rRGlyZWN0aXZlKSB7XG4gICAgICAgIHRoaXMuX3RhYkluZGV4ID0gLTE7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJlZENoaWxkcmVuLnB1c2gobGluayk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlbW92ZUxpbmtDaGlsZChsaW5rOiBJZ3hUcmVlTm9kZUxpbmtEaXJlY3RpdmUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJlZ2lzdGVyZWRDaGlsZHJlbi5pbmRleE9mKGxpbmspO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyZWRDaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlICNub0RyYWdUZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFdpbGwgc3dpdGNoIHRlbXBsYXRlcyBkZXBlbmRpbmcgb24gZHJhZ0Ryb3AgLS0+XG48bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub0RyYWdUZW1wbGF0ZVwiPlxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdiAjY2hpbGRyZW5Db250YWluZXJcbiAgICAqbmdJZj1cImV4cGFuZGVkICYmICFsb2FkaW5nXCJcbiAgICBjbGFzcz1cImlneC10cmVlLW5vZGVfX2dyb3VwXCJcbiAgICByb2xlPVwiZ3JvdXBcIlxuPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlneC10cmVlLW5vZGVcIj48L25nLWNvbnRlbnQ+XG48L2Rpdj5cblxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRJbmRpY2F0b3I+XG4gICAgPGlneC1pY29uIFthdHRyLmFyaWEtbGFiZWxdPVwiZXhwYW5kZWQgPyByZXNvdXJjZVN0cmluZ3MuaWd4X2NvbGxhcHNlIDogcmVzb3VyY2VTdHJpbmdzLmlneF9leHBhbmRcIj5cbiAgICAgICAge3sgZXhwYW5kZWQgPyBcImtleWJvYXJkX2Fycm93X2Rvd25cIiA6IFwia2V5Ym9hcmRfYXJyb3dfcmlnaHRcIiB9fVxuICAgIDwvaWd4LWljb24+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIHNlcGFyYXRlZCBpbiBhIHRlbXBsYXRlIGluIGNhc2UgdGhpcyBldmVyIG5lZWRzIHRvIGJlIHRlbXBsYXRhYmxlIC0tPlxuPG5nLXRlbXBsYXRlICNzZWxlY3RNYXJrZXJUZW1wbGF0ZT5cbiAgICA8aWd4LWNoZWNrYm94IFtjaGVja2VkXT1cInNlbGVjdGVkXCIgW3JlYWRvbmx5XT1cInRydWVcIiBbaW5kZXRlcm1pbmF0ZV09XCJpbmRldGVybWluYXRlXCIgW3RhYmluZGV4XT1cIi0xXCI+XG4gICAgPC9pZ3gtY2hlY2tib3g+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2hlYWRlclRlbXBsYXRlPlxuICAgIDxkaXYgI2dob3N0VGVtcGxhdGUgY2xhc3M9XCJpZ3gtdHJlZS1ub2RlX193cmFwcGVyXCJcbiAgICAgICAgW2F0dHIucm9sZV09XCJyb2xlXCJcbiAgICAgICAgW3RhYkluZGV4XT1cInRhYkluZGV4XCJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2lneC10cmVlLW5vZGVfX3dyYXBwZXItLWNvc3knOiBpc0Nvc3ksXG4gICAgICAgICAgICAnaWd4LXRyZWUtbm9kZV9fd3JhcHBlci0tY29tcGFjdCc6IGlzQ29tcGFjdCxcbiAgICAgICAgICAgICdpZ3gtdHJlZS1ub2RlX193cmFwcGVyLS1zZWxlY3RlZCc6IHNlbGVjdGVkLFxuICAgICAgICAgICAgJ2lneC10cmVlLW5vZGVfX3dyYXBwZXItLWFjdGl2ZScgOiB0aGlzLmFjdGl2ZSxcbiAgICAgICAgICAgICdpZ3gtdHJlZS1ub2RlX193cmFwcGVyLS1mb2N1c2VkJyA6IHRoaXMuZm9jdXNlZCxcbiAgICAgICAgICAgICdpZ3gtdHJlZS1ub2RlX193cmFwcGVyLS1kaXNhYmxlZCcgOiB0aGlzLmRpc2FibGVkXG4gICAgICAgIH1cIlxuICAgICAgICAocG9pbnRlcmRvd24pPVwib25Qb2ludGVyRG93bigkZXZlbnQpXCJcbiAgICAgICAgKGZvY3VzKT1cImhhbmRsZUZvY3VzKClcIlxuICAgICAgICAoYmx1cik9XCJjbGVhckZvY3VzKClcIlxuICAgID5cbiAgICAgICAgPGRpdiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBpdGVtIG9mIFtdLmNvbnN0cnVjdG9yKGxldmVsKVwiXG4gICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImlneC10cmVlLW5vZGVfX3NwYWNlclwiXG4gICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIEV4cGFuZC9Db2xsYXBzZSBpbmRpY2F0b3IgLS0+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiIWxvYWRpbmdcIlxuICAgICAgICAgICAgY2xhc3M9XCJpZ3gtdHJlZS1ub2RlX190b2dnbGUtYnV0dG9uXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lneC10cmVlLW5vZGVfX3RvZ2dsZS1idXR0b24tLWhpZGRlbic6ICFfY2hpbGRyZW4/Lmxlbmd0aCB9XCJcbiAgICAgICAgICAgIChjbGljayk9XCJpbmRpY2F0b3JDbGljaygpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImV4cGFuZEluZGljYXRvclRlbXBsYXRlLCBjb250ZXh0OiB7ICRpbXBsaWNpdDogZXhwYW5kZWQgfVwiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJsb2FkaW5nXCJcbiAgICAgICAgICAgIGNsYXNzPVwiaWd4LXRyZWUtbm9kZV9fdG9nZ2xlLWJ1dHRvblwiXG4gICAgICAgID5cbiAgICAgICAgXHQ8aWd4LWNpcmN1bGFyLWJhclxuICAgICAgICAgICAgXHRbYW5pbWF0ZV09XCJmYWxzZVwiXG4gICAgICAgICAgICBcdFtpbmRldGVybWluYXRlXT1cInRydWVcIlxuICAgICAgICAgICAgXHRbdGV4dFZpc2liaWxpdHldPVwiZmFsc2VcIlxuICAgICAgICBcdD5cbiAgICAgICAgXHQ8L2lneC1jaXJjdWxhci1iYXI+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIEl0ZW0gc2VsZWN0aW9uIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1NlbGVjdG9yc1wiXG4gICAgICAgICAgICBjbGFzcz1cImlneC10cmVlLW5vZGVfX3NlbGVjdFwiXG4gICAgICAgICAgICAocG9pbnRlcmRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VsZWN0b3JDbGljaygkZXZlbnQpXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VsZWN0TWFya2VyVGVtcGxhdGVcIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LXRyZWUtbm9kZV9fY29udGVudFwiPlxuICAgICAgICAgICAgPCEtLSBHaG9zdCBjb250ZW50IC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gIEJ1ZmZlciBlbGVtZW50IGZvciAnbW92ZSBhZnRlcicgd2hlbiBEJkQgaXMgaW1wbGVtZW50ZWQtLT5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LXRyZWUtbm9kZV9fZHJvcC1pbmRpY2F0b3JcIj5cbiAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJpZ3gtdHJlZS1ub2RlX19zcGFjZXJcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBbXS5jb25zdHJ1Y3RvcihsZXZlbClcIj48L3NwYW4+XG4gICAgICAgIDwhLS0gc3R5bGUgcnVsZXMgdGFyZ2V0IHRoaXMgZGl2LCBkbyBub3QgZGVsZXRlIGl0IC0tPlxuICAgICAgICA8ZGl2PjwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkcmFnVGVtcGxhdGU+XG4gICAgPCEtLSBEcmFnIGRyb3AgZ29lcyBoZXJlXG4gICAgICAgIGlneERyb3BcbiAgICAgICAgI2Ryb3BSZWY9XCJkcm9wXCJcbiAgICAgICAgW2lneE5vZGVEcmFnXT1cInRoaXNcIlxuICAgICAgICAoZHJhZ1N0YXJ0KT1cImxvZ0Ryb3AoZHJvcFJlZilcIlxuICAgICAgICAobGVhdmUpPVwiZW1pdExlYXZlKClcIlxuICAgICAgICAoZW50ZXIpPVwiZW1pdEVudGVyKClcIiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LXRyZWUtbm9kZV9fZHJhZy13cmFwcGVyXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
652
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ub2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi90cmVlL3RyZWUtbm9kZS90cmVlLW5vZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL3RyZWUvdHJlZS1ub2RlL3RyZWUtbm9kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULGVBQWUsRUFDZixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFFTixRQUFRLEVBQ1IsV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRW5FLE9BQU8sRUFBRSxxQkFBcUIsRUFBMkIsTUFBTSxrREFBa0QsQ0FBQztBQUNsSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUVoRyxPQUFPLEVBR0gsb0JBQW9CLEVBQ3BCLGtCQUFrQixFQUNsQix1QkFBdUIsRUFFMUIsTUFBTSxXQUFXLENBQUM7QUFJbkIsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDMUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBRXpFLHFDQUFxQztBQUNyQzs7O0dBR0c7QUFLSCxNQUFNLE9BQU8sd0JBQXdCO0lBS2pDOzs7Ozs7Ozs7Ozs7Ozs7OztPQWlCRztJQUNILElBQ1csVUFBVSxDQUFDLEdBQVE7UUFDMUIsSUFBSSxHQUFHLEVBQUU7WUFDTCxJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztZQUN0QixJQUFJLENBQUMsV0FBbUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDaEQ7SUFDTCxDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBRUQsbUNBQW1DO0lBQ25DLElBQVksTUFBTTtRQUNkLE9BQU8sSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3hDLENBQUM7SUFJRCxZQUNRLElBQXNCLEVBQ2xCLFVBQW9DLEVBQ3JDLFVBQXNCO1FBRnpCLFNBQUksR0FBSixJQUFJLENBQWtCO1FBQ2xCLGVBQVUsR0FBVixVQUFVLENBQTBCO1FBQ3JDLGVBQVUsR0FBVixVQUFVLENBQVk7UUExQzFCLFNBQUksR0FBRyxVQUFVLENBQUM7UUFxQ2pCLGdCQUFXLEdBQXFCLElBQUksQ0FBQztJQU03QyxDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLElBQ1csUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBRUQ7OztPQUdHO0lBRUksVUFBVTtRQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUNsQyxDQUFDO0lBRUQ7OztPQUdHO0lBRUksV0FBVztRQUNkLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO1lBQ3RDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQzthQUM3QztZQUNELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztTQUNoQztJQUNMLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQzs4R0EvRVEsd0JBQXdCLGtCQTBDRCx1QkFBdUI7a0dBMUM5Qyx3QkFBd0I7OzJGQUF4Qix3QkFBd0I7a0JBSnBDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsVUFBVSxFQUFFLElBQUk7aUJBQ25COzswQkEyQ2dCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsdUJBQXVCOzRHQXZDaEQsSUFBSTtzQkFEVixXQUFXO3VCQUFDLFdBQVc7Z0JBc0JiLFVBQVU7c0JBRHBCLEtBQUs7dUJBQUMsaUJBQWlCO2dCQTJCYixRQUFRO3NCQURsQixXQUFXO3VCQUFDLGVBQWU7Z0JBVXJCLFVBQVU7c0JBRGhCLFlBQVk7dUJBQUMsTUFBTTtnQkFVYixXQUFXO3NCQURqQixZQUFZO3VCQUFDLE9BQU87O0FBZXpCOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBVUgsTUFBTSxPQUFPLG9CQUF3QixTQUFRLHFCQUFxQjtJQThCOUQsOERBQThEO0lBQzlELHdCQUF3QjtJQUN4QixJQUFXLFFBQVEsQ0FBQyxHQUFXO1FBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0lBQ3pCLENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsSUFBVyxRQUFRO1FBQ2YsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNiO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksRUFBRTtZQUN6QixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxLQUFLLElBQUksRUFBRTtnQkFDdEMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3hDO1lBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNiO1FBQ0QsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLElBQW9CLGlCQUFpQjtRQUNqQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsSUFDVyxlQUFlLENBQUMsS0FBMkI7UUFDbEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLGVBQWU7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN4QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsc0JBQXNCLENBQUMsY0FBYyxDQUFDO1NBQ2pFO1FBQ0QsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUNXLE1BQU0sQ0FBQyxLQUFjO1FBQzVCLElBQUksS0FBSyxFQUFFO1lBQ1AsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2hEO0lBQ0wsQ0FBQztJQUVELElBQVcsTUFBTTtRQUNiLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDO0lBQy9DLENBQUM7SUFzQ0Qsd0JBQXdCO0lBQ3hCLElBQVcsT0FBTztRQUNkLE9BQU8sSUFBSSxDQUFDLFNBQVM7WUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDO0lBQzdDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsSUFBVyxJQUFJO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxvREFBb0Q7SUFDcEQ7Ozs7T0FJRztJQUNILElBRVcsUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBVyxRQUFRLENBQUMsS0FBYztRQUM5QixJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN2QztJQUNMLENBQUM7SUFNRCx3QkFBd0I7SUFDeEIsSUFDVyxJQUFJO1FBQ1gsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztJQUN0RCxDQUFDO0lBY0Q7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxJQUFXLFFBQVE7UUFDZixPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDcEUsQ0FBQztJQWFELElBQVksZUFBZTtRQUN2QixPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLElBQVcsU0FBUztRQUNoQixPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsY0FBYyxLQUFLLGNBQWMsQ0FBQyxPQUFPLENBQUM7SUFDaEUsQ0FBQztJQUVELHdCQUF3QjtJQUN4QixJQUFXLE1BQU07UUFDYixPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsY0FBYyxLQUFLLGNBQWMsQ0FBQyxJQUFJLENBQUM7SUFDN0QsQ0FBQztJQWNELFlBQ3VDLElBQWEsRUFDdEMsZ0JBQXlDLEVBQ3pDLFdBQTJCLEVBQzNCLFVBQW9DLEVBQ3BDLEdBQXNCLEVBQ0ksZ0JBQWtDLEVBQzlELE9BQWdDLEVBQ3dCLFVBQTRCO1FBRTVGLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBVFcsU0FBSSxHQUFKLElBQUksQ0FBUztRQUN0QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXlCO1FBQ3pDLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMzQixlQUFVLEdBQVYsVUFBVSxDQUEwQjtRQUNwQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUV4QixZQUFPLEdBQVAsT0FBTyxDQUF5QjtRQUN3QixlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQXBPaEc7Ozs7O1dBS0c7UUFFSSxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBaUV2Qjs7Ozs7Ozs7Ozs7Ozs7V0FjRztRQUVJLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUVwRDs7Ozs7Ozs7Ozs7Ozs7V0FjRztRQUVJLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQXVDcEQsd0JBQXdCO1FBRWpCLGFBQVEsR0FBRyxlQUFlLENBQUM7UUFnRWxDLHdCQUF3QjtRQUNqQix1QkFBa0IsR0FBK0IsRUFBRSxDQUFDO1FBRTNELHdCQUF3QjtRQUNoQixxQkFBZ0IsR0FBRyxzQkFBc0IsQ0FBQyxjQUFjLENBQUM7UUFFekQsY0FBUyxHQUFHLElBQUksQ0FBQztRQUNqQixjQUFTLEdBQUcsS0FBSyxDQUFDO0lBYTFCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsYUFBYTtRQUNwQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLG9CQUFvQixDQUFDLElBQUksQ0FBQztJQUM3RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLGFBQWE7UUFDcEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7T0FlRztJQUNILElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7O09BZ0JHO0lBQ0gsSUFDVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxJQUFXLFFBQVEsQ0FBQyxHQUFZO1FBQzVCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFO1lBQ3ZFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQyxPQUFPO1NBQ1Y7UUFDRCxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDcEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUN4RDtRQUNELElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNwRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQzFEO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7O09BZ0JHO0lBQ0gsSUFDVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsSUFBVyxRQUFRLENBQUMsR0FBWTtRQUM1QixJQUFJLEdBQUcsRUFBRTtZQUNMLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN4QzthQUFNO1lBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbkM7SUFDTCxDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLElBQVcsdUJBQXVCO1FBQzlCLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsK0JBQStCLENBQUM7SUFDekcsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsd0JBQXdCO0lBQ3hCLElBQVcsYUFBYTtRQUNwQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO0lBQ3RDLENBQUM7SUFFRCx3QkFBd0I7SUFDakIsUUFBUTtRQUNYLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FDM0QsR0FBRyxFQUFFO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbEUsQ0FBQyxDQUNKLENBQUM7UUFDRixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2xFLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQy9ELElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxXQUFXO1FBQ2QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsT0FBTztTQUNWO1FBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUU7WUFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQ3RDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRTtZQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDOUMsT0FBTztTQUNWO1FBQ0QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzVELE9BQU87U0FDVjtJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSSxVQUFVO1FBQ2IsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ksZUFBZSxDQUFDLEtBQUs7UUFDeEIsMkJBQTJCO1FBQzNCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixvREFBb0Q7UUFDcEQsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdkQsT0FBTztTQUNWO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDbkQ7YUFBTTtZQUNILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ2pEO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7OztPQWNHO0lBQ0ksTUFBTTtRQUNULElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNmLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNuQjthQUFNO1lBQ0gsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ2pCO0lBQ0wsQ0FBQztJQUVELHdCQUF3QjtJQUNqQixjQUFjO1FBQ2pCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNkLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYSxDQUFDLEtBQUs7UUFDdEIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVlLFdBQVc7UUFDdkIsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSSxNQUFNO1FBQ1QsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzlELE9BQU87U0FDVjtRQUNELE1BQU0sSUFBSSxHQUErQjtZQUNyQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDaEIsSUFBSSxFQUFFLElBQUk7WUFDVixNQUFNLEVBQUUsS0FBSztTQUVoQixDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGlCQUFpQixDQUNsQixJQUFJLENBQUMsaUJBQWlCLENBQ3pCLENBQUM7U0FDTDtJQUNMLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNJLFFBQVE7UUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDOUQsT0FBTztTQUNWO1FBQ0QsTUFBTSxJQUFJLEdBQStCO1lBQ3JDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNoQixJQUFJLEVBQUUsSUFBSTtZQUNWLE1BQU0sRUFBRSxLQUFLO1NBRWhCLENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsa0JBQWtCLENBQ25CLElBQUksQ0FBQyxpQkFBaUIsQ0FDekIsQ0FBQztTQUNMO0lBQ0wsQ0FBQztJQUVELHdCQUF3QjtJQUNqQixZQUFZLENBQUMsSUFBOEI7UUFDOUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCx3QkFBd0I7SUFDakIsZUFBZSxDQUFDLElBQThCO1FBQ2pELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEQsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDZCxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztTQUM1QztJQUNMLENBQUM7OEdBL2lCUSxvQkFBb0Isa0JBa1BqQixrQkFBa0IsMkpBS2xCLDBCQUEwQix1Q0FFRix1QkFBdUI7a0dBelBsRCxvQkFBb0IsaWNBTmxCO1lBQ1AsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFO1NBQzFFLHVEQXFMZ0Isd0JBQXdCLFFBQVUsVUFBVSw0Q0FJNUMsdUJBQXVCLFFBQVUsdUJBQXVCLDhDQUl4RCx1QkFBdUIsMkJBQVUsdUJBQXVCLGlIQXFCckMsVUFBVSw4SEFHUCxXQUFXLCtIQUdWLFVBQVUsb0RDbFh0RCxxdkhBMkdBLDRDRGlEYyxnQkFBZ0Isb0pBQUUsSUFBSSw2RkFBRSxnQkFBZ0IsMkZBQUUsb0JBQW9CLDBTQUFFLE9BQU8sb0ZBQUUsS0FBSyxtSEFBRSwrQkFBK0I7OzJGQUVoSCxvQkFBb0I7a0JBVGhDLFNBQVM7K0JBQ0ksZUFBZSxhQUVkO3dCQUNQLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFdBQVcsc0JBQXNCLEVBQUU7cUJBQzFFLGNBQ1csSUFBSSxXQUNQLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsK0JBQStCLENBQUM7OzBCQW9QckgsTUFBTTsyQkFBQyxrQkFBa0I7OzBCQUt6QixNQUFNOzJCQUFDLDBCQUEwQjs7MEJBRWpDLFFBQVE7OzBCQUFJLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsdUJBQXVCOzRDQXRPcEQsSUFBSTtzQkFEVixLQUFLO2dCQVVDLE9BQU87c0JBRGIsS0FBSztnQkFtQ0ssZUFBZTtzQkFEekIsS0FBSztnQkFxQkssTUFBTTtzQkFEaEIsS0FBSztnQkE0QkMsY0FBYztzQkFEcEIsTUFBTTtnQkFtQkEsY0FBYztzQkFEcEIsTUFBTTtnQkE2QkksUUFBUTtzQkFGbEIsS0FBSzs7c0JBQ0wsV0FBVzt1QkFBQywrQkFBK0I7Z0JBY3JDLFFBQVE7c0JBRGQsV0FBVzt1QkFBQyxxQkFBcUI7Z0JBS3ZCLElBQUk7c0JBRGQsV0FBVzt1QkFBQyxXQUFXO2dCQU9qQixZQUFZO3NCQURsQixlQUFlO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFLeEQsU0FBUztzQkFEZixlQUFlO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsSUFBSSxFQUFFLHVCQUF1QixFQUFFO2dCQUtwRSxXQUFXO3NCQURqQixlQUFlO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsSUFBSSxFQUFFLHVCQUF1QixFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBc0J2RixNQUFNO3NCQURaLFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJeEMsK0JBQStCO3NCQUR0QyxTQUFTO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUkxRCxpQkFBaUI7c0JBRHhCLFNBQVM7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQThGekMsUUFBUTtzQkFEbEIsS0FBSztnQkFvQ0ssUUFBUTtzQkFEbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2tpcFNlbGYsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRGlzcGxheURlbnNpdHkgfSBmcm9tICcuLi8uLi9jb3JlL2RlbnNpdHknO1xuaW1wb3J0IHsgQ3VycmVudFJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uLy4uL2NvcmUvaTE4bi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgSVRyZWVSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi8uLi9jb3JlL2kxOG4vdHJlZS1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgVG9nZ2xlQW5pbWF0aW9uUGxheWVyLCBUb2dnbGVBbmltYXRpb25TZXR0aW5ncyB9IGZyb20gJy4uLy4uL2V4cGFuc2lvbi1wYW5lbC90b2dnbGUtYW5pbWF0aW9uLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hBbmd1bGFyQW5pbWF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FuaW1hdGlvbi9hbmd1bGFyLWFuaW1hdGlvbi1zZXJ2aWNlJztcbmltcG9ydCB7IEFuaW1hdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hbmltYXRpb24vYW5pbWF0aW9uJztcbmltcG9ydCB7XG4gICAgSWd4VHJlZSxcbiAgICBJZ3hUcmVlTm9kZSxcbiAgICBJZ3hUcmVlU2VsZWN0aW9uVHlwZSxcbiAgICBJR1hfVFJFRV9DT01QT05FTlQsXG4gICAgSUdYX1RSRUVfTk9ERV9DT01QT05FTlQsXG4gICAgSVRyZWVOb2RlVG9nZ2xpbmdFdmVudEFyZ3Ncbn0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IElneFRyZWVOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4uL3RyZWUtbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IElneFRyZWVTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vdHJlZS1zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hUcmVlU2VydmljZSB9IGZyb20gJy4uL3RyZWUuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hDaXJjdWxhclByb2dyZXNzQmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3NiYXIuY29tcG9uZW50JztcbmltcG9ydCB7IElneENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50JztcbmltcG9ydCB7IElneEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQsIE5nSWYsIE5nQ2xhc3MsIE5nRm9yIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuLy8gVE9ETzogSW1wbGVtZW50IGFyaWEgZnVuY3Rpb25hbGl0eVxuLyoqXG4gKiBAaGlkZGVuIEBpbnRlcm5hbFxuICogVXNlZCBmb3IgbGlua3MgKGBhYCB0YWdzKSBpbiB0aGUgYm9keSBvZiBhbiBgaWd4LXRyZWUtbm9kZWAuIEhhbmRsZXMgYXJpYSBhbmQgZXZlbnQgZGlzcGF0Y2guXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiBgW2lneFRyZWVOb2RlTGlua11gLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSWd4VHJlZU5vZGVMaW5rRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICAgIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJylcbiAgICBwdWJsaWMgcm9sZSA9ICd0cmVlaXRlbSc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbm9kZSdzIHBhcmVudC4gU2hvdWxkIGJlIHVzZWQgb25seSB3aGVuIHRoZSBsaW5rIGlzIGRlZmluZWRcbiAgICAgKiBpbiBgPG5nLXRlbXBsYXRlPmAgdGFnIG91dHNpZGUgb2YgaXRzIHBhcmVudCwgYXMgQW5ndWxhciBESSB3aWxsIG5vdCBwcm9wZXJseSBwcm92aWRlIGEgcmVmZXJlbmNlXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlPlxuICAgICAqICAgICA8aWd4LXRyZWUtbm9kZSAjbXlOb2RlICpuZ0Zvcj1cImxldCBub2RlIG9mIGRhdGFcIiBbZGF0YV09XCJub2RlXCI+XG4gICAgICogICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub2RlVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBkYXRhLCBwYXJlbnROb2RlOiBteU5vZGUgfVwiPlxuICAgICAqICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgKiAgICAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAqICAgICAuLi5cbiAgICAgKiAgICAgPCEtLSBub2RlIHRlbXBsYXRlIGlzIGRlZmluZWQgdW5kZXIgdHJlZSB0byBhY2Nlc3MgcmVsYXRlZCBzZXJ2aWNlcyAtLT5cbiAgICAgKiAgICAgPG5nLXRlbXBsYXRlICNub2RlVGVtcGxhdGUgbGV0LWRhdGEgbGV0LW5vZGU9XCJwYXJlbnROb2RlXCI+XG4gICAgICogICAgICAgICA8YSBbaWd4VHJlZU5vZGVMaW5rXT1cIm5vZGVcIj57eyBkYXRhLmxhYmVsIH19PC9hPlxuICAgICAqICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KCdpZ3hUcmVlTm9kZUxpbmsnKVxuICAgIHB1YmxpYyBzZXQgcGFyZW50Tm9kZSh2YWw6IGFueSkge1xuICAgICAgICBpZiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLl9wYXJlbnROb2RlID0gdmFsO1xuICAgICAgICAgICAgKHRoaXMuX3BhcmVudE5vZGUgYXMgYW55KS5hZGRMaW5rQ2hpbGQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBhcmVudE5vZGUoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudE5vZGU7XG4gICAgfVxuXG4gICAgLyoqIEEgcG9pbnRlciB0byB0aGUgcGFyZW50IG5vZGUgKi9cbiAgICBwcml2YXRlIGdldCB0YXJnZXQoKTogSWd4VHJlZU5vZGU8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGUgfHwgdGhpcy5wYXJlbnROb2RlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3BhcmVudE5vZGU6IElneFRyZWVOb2RlPGFueT4gPSBudWxsO1xuXG4gICAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChJR1hfVFJFRV9OT0RFX0NPTVBPTkVOVClcbiAgICBwcml2YXRlIG5vZGU6IElneFRyZWVOb2RlPGFueT4sXG4gICAgICAgIHByaXZhdGUgbmF2U2VydmljZTogSWd4VHJlZU5hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci50YWJpbmRleCcpXG4gICAgcHVibGljIGdldCB0YWJJbmRleCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZTZXJ2aWNlLmZvY3VzZWROb2RlID09PSB0aGlzLnRhcmdldCA/ICh0aGlzLnRhcmdldD8uZGlzYWJsZWQgPyAtMSA6IDApIDogLTE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKiBDbGVhciB0aGUgbm9kZSdzIGZvY3VzZWQgc3RhdGVcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdibHVyJylcbiAgICBwdWJsaWMgaGFuZGxlQmx1cigpIHtcbiAgICAgICAgdGhpcy50YXJnZXQuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKiBTZXQgdGhlIG5vZGUgYXMgZm9jdXNlZFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzJylcbiAgICBwdWJsaWMgaGFuZGxlRm9jdXMoKSB7XG4gICAgICAgIGlmICh0aGlzLnRhcmdldCAmJiAhdGhpcy50YXJnZXQuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm5hdlNlcnZpY2UuZm9jdXNlZE5vZGUgIT09IHRoaXMudGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXZTZXJ2aWNlLmZvY3VzZWROb2RlID0gdGhpcy50YXJnZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRhcmdldC5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnRhcmdldC5yZW1vdmVMaW5rQ2hpbGQodGhpcyk7XG4gICAgfVxufVxuXG4vKipcbiAqXG4gKiBUaGUgdHJlZSBub2RlIGNvbXBvbmVudCByZXByZXNlbnRzIGEgY2hpbGQgbm9kZSBvZiB0aGUgdHJlZSBjb21wb25lbnQgb3IgYW5vdGhlciB0cmVlIG5vZGUuXG4gKiBVc2FnZTpcbiAqXG4gKiBgYGBodG1sXG4gKiAgPGlneC10cmVlPlxuICogIC4uLlxuICogICAgPGlneC10cmVlLW5vZGUgW2RhdGFdPVwiZGF0YVwiIFtzZWxlY3RlZF09XCJzZXJ2aWNlLmlzTm9kZVNlbGVjdGVkKGRhdGEuS2V5KVwiIFtleHBhbmRlZF09XCJzZXJ2aWNlLmlzTm9kZUV4cGFuZGVkKGRhdGEuS2V5KVwiPlxuICogICAgICB7eyBkYXRhLkZpcnN0TmFtZSB9fSB7eyBkYXRhLkxhc3ROYW1lIH19XG4gKiAgICA8L2lneC10cmVlLW5vZGU+XG4gKiAgLi4uXG4gKiAgPC9pZ3gtdHJlZT5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC10cmVlLW5vZGUnLFxuICAgIHRlbXBsYXRlVXJsOiAndHJlZS1ub2RlLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBJR1hfVFJFRV9OT0RFX0NPTVBPTkVOVCwgdXNlRXhpc3Rpbmc6IElneFRyZWVOb2RlQ29tcG9uZW50IH1cbiAgICBdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nVGVtcGxhdGVPdXRsZXQsIE5nSWYsIElneEljb25Db21wb25lbnQsIElneENoZWNrYm94Q29tcG9uZW50LCBOZ0NsYXNzLCBOZ0ZvciwgSWd4Q2lyY3VsYXJQcm9ncmVzc0JhckNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4VHJlZU5vZGVDb21wb25lbnQ8VD4gZXh0ZW5kcyBUb2dnbGVBbmltYXRpb25QbGF5ZXIgaW1wbGVtZW50cyBJZ3hUcmVlTm9kZTxUPiwgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIGVudHJ5IHRoYXQgdGhlIG5vZGUgaXMgdmlzdWFsaXppbmcuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFJlcXVpcmVkIGZvciBzZWFyY2hpbmcgdGhyb3VnaCBub2Rlcy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LXRyZWU+XG4gICAgICogIC4uLlxuICAgICAqICAgIDxpZ3gtdHJlZS1ub2RlIFtkYXRhXT1cImRhdGFcIj5cbiAgICAgKiAgICAgIHt7IGRhdGEuRmlyc3ROYW1lIH19IHt7IGRhdGEuTGFzdE5hbWUgfX1cbiAgICAgKiAgICA8L2lneC10cmVlLW5vZGU+XG4gICAgICogIC4uLlxuICAgICAqICA8L2lneC10cmVlPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRhdGE6IFQ7XG5cbiAgICAvKipcbiAgICAgKiBUbyBiZSB1c2VkIGZvciBsb2FkLW9uLWRlbWFuZCBzY2VuYXJpb3MgaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGV0aGVyIHRoZSBub2RlIGlzIGxvYWRpbmcgZGF0YS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogTG9hZGluZyBub2RlcyBkbyBub3QgcmVuZGVyIGNoaWxkcmVuLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcblxuICAgIC8vIFRPIERPOiByZXR1cm4gZGlmZmVyZW50IHRhYiBpbmRleCBkZXBlbmRpbmcgb24gYW5jaG9yIGNoaWxkXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHNldCB0YWJJbmRleCh2YWw6IG51bWJlcikge1xuICAgICAgICB0aGlzLl90YWJJbmRleCA9IHZhbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHRhYkluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3RhYkluZGV4ID09PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5uYXZTZXJ2aWNlLmZvY3VzZWROb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzTGlua0NoaWxkcmVuID8gLTEgOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmhhc0xpbmtDaGlsZHJlbiA/IC0xIDogdGhpcy5fdGFiSW5kZXg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBhbmltYXRpb25TZXR0aW5ncygpOiBUb2dnbGVBbmltYXRpb25TZXR0aW5ncyB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWUuYW5pbWF0aW9uU2V0dGluZ3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBVc2VzIEVOIHJlc291cmNlcyBieSBkZWZhdWx0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCByZXNvdXJjZVN0cmluZ3ModmFsdWU6IElUcmVlUmVzb3VyY2VTdHJpbmdzKSB7XG4gICAgICAgIHRoaXMuX3Jlc291cmNlU3RyaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3Jlc291cmNlU3RyaW5ncywgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFjY2Vzc29yIHRoYXQgcmV0dXJucyB0aGUgcmVzb3VyY2Ugc3RyaW5ncy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJlc291cmNlU3RyaW5ncygpOiBJVHJlZVJlc291cmNlU3RyaW5ncyB7XG4gICAgICAgIGlmICghdGhpcy5fcmVzb3VyY2VTdHJpbmdzKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNvdXJjZVN0cmluZ3MgPSBDdXJyZW50UmVzb3VyY2VTdHJpbmdzLlRyZWVSZXNTdHJpbmdzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVN0cmluZ3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBhY3RpdmUgc3RhdGUgb2YgdGhlIG5vZGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZTogYm9vbGVhblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBhY3RpdmUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLm5hdlNlcnZpY2UuYWN0aXZlTm9kZSA9IHRoaXM7XG4gICAgICAgICAgICB0aGlzLnRyZWUuYWN0aXZlTm9kZUJpbmRpbmdDaGFuZ2UuZW1pdCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZTZXJ2aWNlLmFjdGl2ZU5vZGUgPT09IHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBub2RlJ3MgYHNlbGVjdGVkYCBwcm9wZXJ0eSBjaGFuZ2VzLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdHJlZT5cbiAgICAgKiAgICAgIDxpZ3gtdHJlZS1ub2RlICpuZ0Zvcj1cImxldCBub2RlIG9mIGRhdGFcIiBbZGF0YV09XCJub2RlXCIgWyhzZWxlY3RlZCldPVwibm9kZS5zZWxlY3RlZFwiPlxuICAgICAqICAgICAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3Qgbm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXMoZGF0YVswXSlbMF07XG4gICAgICogbm9kZS5zZWxlY3RlZENoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlOiBib29sZWFuKSA9PiBjb25zb2xlLmxvZyhcIk5vZGUgc2VsZWN0aW9uIGNoYW5nZWQgdG8gXCIsIGUpKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBzZWxlY3RlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgbm9kZSdzIGBleHBhbmRlZGAgcHJvcGVydHkgY2hhbmdlcy5cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRyZWU+XG4gICAgICogICAgICA8aWd4LXRyZWUtbm9kZSAqbmdGb3I9XCJsZXQgbm9kZSBvZiBkYXRhXCIgW2RhdGFdPVwibm9kZVwiIFsoZXhwYW5kZWQpXT1cIm5vZGUuZXhwYW5kZWRcIj5cbiAgICAgKiAgICAgIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgKiA8L2lneC10cmVlPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMF0pWzBdO1xuICAgICAqIG5vZGUuZXhwYW5kZWRDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZTogYm9vbGVhbikgPT4gY29uc29sZS5sb2coXCJOb2RlIGV4cGFuc2lvbiBzdGF0ZSBjaGFuZ2VkIHRvIFwiLCBlKSlcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgZXhwYW5kZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGZvY3VzZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRm9jdXNlZCAmJlxuICAgICAgICAgICAgdGhpcy5uYXZTZXJ2aWNlLmZvY3VzZWROb2RlID09PSB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgZnVsbCBwYXRoIHRvIHRoZSBub2RlIGluY3VkaW5nIGl0c2VsZlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMF0pWzBdO1xuICAgICAqIGNvbnN0IHBhdGg6IElneFRyZWVOb2RlPGFueT5bXSA9IG5vZGUucGF0aDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHBhdGgoKTogSWd4VHJlZU5vZGU8YW55PltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZT8ucGF0aCA/IFsuLi50aGlzLnBhcmVudE5vZGUucGF0aCwgdGhpc10gOiBbdGhpc107XG4gICAgfVxuXG4gICAgLy8gVE9ETzogYmluZCB0byBkaXNhYmxlZCBzdGF0ZSB3aGVuIG5vZGUgaXMgZHJhZ2dlZFxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIG5vZGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZTogYm9vbGVhblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtdHJlZS1ub2RlLS1kaXNhYmxlZCcpXG4gICAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudHJlZS5kaXNhYmxlZENoYW5nZS5lbWl0KHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtdHJlZS1ub2RlJylcbiAgICBwdWJsaWMgY3NzQ2xhc3MgPSAnaWd4LXRyZWUtbm9kZSc7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXG4gICAgcHVibGljIGdldCByb2xlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNMaW5rQ2hpbGRyZW4gPyAnbm9uZScgOiAndHJlZWl0ZW0nO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oSWd4VHJlZU5vZGVMaW5rRGlyZWN0aXZlLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwdWJsaWMgbGlua0NoaWxkcmVuOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKElHWF9UUkVFX05PREVfQ09NUE9ORU5ULCB7IHJlYWQ6IElHWF9UUkVFX05PREVfQ09NUE9ORU5UIH0pXG4gICAgcHVibGljIF9jaGlsZHJlbjogUXVlcnlMaXN0PElneFRyZWVOb2RlPGFueT4+O1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihJR1hfVFJFRV9OT0RFX0NPTVBPTkVOVCwgeyByZWFkOiBJR1hfVFJFRV9OT0RFX0NPTVBPTkVOVCwgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgICBwdWJsaWMgYWxsQ2hpbGRyZW46IFF1ZXJ5TGlzdDxJZ3hUcmVlTm9kZTxhbnk+PjtcblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhlIG5vZGUgKGlmIGFueSlcbiAgICAgKlxuICAgICAqIEByZW1hcmtcbiAgICAgKiBSZXR1cm5zIGBudWxsYCBpZiBub2RlIGRvZXMgbm90IGhhdmUgY2hpbGRyZW5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMF0pWzBdO1xuICAgICAqIGNvbnN0IGNoaWxkcmVuOiBJZ3hUcmVlTm9kZTxhbnk+W10gPSBub2RlLmNoaWxkcmVuO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY2hpbGRyZW4oKTogSWd4VHJlZU5vZGU8YW55PltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuPy5sZW5ndGggPyB0aGlzLl9jaGlsZHJlbi50b0FycmF5KCkgOiBudWxsO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHdpbGwgYmUgdXNlZCBpbiBEcmFnIGFuZCBEcm9wIGltcGxlbWVudGF0aW9uXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQFZpZXdDaGlsZCgnZ2hvc3RUZW1wbGF0ZScsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHB1YmxpYyBoZWFkZXI6IEVsZW1lbnRSZWY7XG5cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0SW5kaWNhdG9yJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBfZGVmYXVsdEV4cGFuZEluZGljYXRvclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgnY2hpbGRyZW5Db250YWluZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwcml2YXRlIGNoaWxkcmVuQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gICAgcHJpdmF0ZSBnZXQgaGFzTGlua0NoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5saW5rQ2hpbGRyZW4/Lmxlbmd0aCA+IDAgfHwgdGhpcy5yZWdpc3RlcmVkQ2hpbGRyZW4/Lmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBpc0NvbXBhY3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWU/LmRpc3BsYXlEZW5zaXR5ID09PSBEaXNwbGF5RGVuc2l0eS5jb21wYWN0O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgaXNDb3N5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlPy5kaXNwbGF5RGVuc2l0eSA9PT0gRGlzcGxheURlbnNpdHkuY29zeTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaXNGb2N1c2VkOiBib29sZWFuO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlZ2lzdGVyZWRDaGlsZHJlbjogSWd4VHJlZU5vZGVMaW5rRGlyZWN0aXZlW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHByaXZhdGUgX3Jlc291cmNlU3RyaW5ncyA9IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MuVHJlZVJlc1N0cmluZ3M7XG5cbiAgICBwcml2YXRlIF90YWJJbmRleCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KElHWF9UUkVFX0NPTVBPTkVOVCkgcHVibGljIHRyZWU6IElneFRyZWUsXG4gICAgICAgIHByb3RlY3RlZCBzZWxlY3Rpb25TZXJ2aWNlOiBJZ3hUcmVlU2VsZWN0aW9uU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIHRyZWVTZXJ2aWNlOiBJZ3hUcmVlU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIG5hdlNlcnZpY2U6IElneFRyZWVOYXZpZ2F0aW9uU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBJbmplY3QoSWd4QW5ndWxhckFuaW1hdGlvblNlcnZpY2UpIGFuaW1hdGlvblNlcnZpY2U6IEFuaW1hdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIEBJbmplY3QoSUdYX1RSRUVfTk9ERV9DT01QT05FTlQpIHB1YmxpYyBwYXJlbnROb2RlOiBJZ3hUcmVlTm9kZTxhbnk+XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGFuaW1hdGlvblNlcnZpY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBzaG93U2VsZWN0b3JzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlLnNlbGVjdGlvbiAhPT0gSWd4VHJlZVNlbGVjdGlvblR5cGUuTm9uZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaW5kZXRlcm1pbmF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uU2VydmljZS5pc05vZGVJbmRldGVybWluYXRlKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgZGVwdGggb2YgdGhlIG5vZGUsIHJlbGF0aXZlIHRvIHRoZSByb290XG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlPlxuICAgICAqICAuLi5cbiAgICAgKiAgPGlneC10cmVlLW5vZGUgI25vZGU+XG4gICAgICogICAgICBNeSBsZXZlbCBpcyB7eyBub2RlLmxldmVsIH19XG4gICAgICogIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgKiA8L2lneC10cmVlPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMTJdKVswXTtcbiAgICAgKiBjb25zdCBsZXZlbDogbnVtYmVyID0gbm9kZS5sZXZlbDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGxldmVsKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudE5vZGUgPyB0aGlzLnBhcmVudE5vZGUubGV2ZWwgKyAxIDogMDtcbiAgICB9XG5cbiAgICAvKiogR2V0L3NldCB3aGV0aGVyIHRoZSBub2RlIGlzIHNlbGVjdGVkLiBTdXBwb3JzdCB0d28td2F5IGJpbmRpbmcuXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlPlxuICAgICAqICAuLi5cbiAgICAgKiAgPGlneC10cmVlLW5vZGUgKm5nRm9yPVwibGV0IG5vZGUgb2YgZGF0YVwiIFsoc2VsZWN0ZWQpXT1cIm5vZGUuc2VsZWN0ZWRcIj5cbiAgICAgKiAgICAgIHt7IG5vZGUubGFiZWwgfX1cbiAgICAgKiAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3Qgbm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXMoZGF0YVswXSlbMF07XG4gICAgICogY29uc3Qgc2VsZWN0ZWQgPSBub2RlLnNlbGVjdGVkO1xuICAgICAqIG5vZGUuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBzZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uU2VydmljZS5pc05vZGVTZWxlY3RlZCh0aGlzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkKHZhbDogYm9vbGVhbikge1xuICAgICAgICBpZiAoISh0aGlzLnRyZWU/Lm5vZGVzICYmIHRoaXMudHJlZS5ub2Rlcy5maW5kKChlKSA9PiBlID09PSB0aGlzKSkgJiYgdmFsKSB7XG4gICAgICAgICAgICB0aGlzLnRyZWUuZm9yY2VTZWxlY3QucHVzaCh0aGlzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsICYmICF0aGlzLnNlbGVjdGlvblNlcnZpY2UuaXNOb2RlU2VsZWN0ZWQodGhpcykpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3ROb2Rlc1dpdGhOb0V2ZW50KFt0aGlzXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWwgJiYgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmlzTm9kZVNlbGVjdGVkKHRoaXMpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3ROb2Rlc1dpdGhOb0V2ZW50KFt0aGlzXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogR2V0L3NldCB3aGV0aGVyIHRoZSBub2RlIGlzIGV4cGFuZGVkXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlPlxuICAgICAqICAuLi5cbiAgICAgKiAgPGlneC10cmVlLW5vZGUgKm5nRm9yPVwibGV0IG5vZGUgb2YgZGF0YVwiIFtleHBhbmRlZF09XCJub2RlLm5hbWUgPT09IHRoaXMuZXhwYW5kZWROb2RlXCI+XG4gICAgICogICAgICB7eyBub2RlLmxhYmVsIH19XG4gICAgICogIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgKiA8L2lneC10cmVlPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMF0pWzBdO1xuICAgICAqIGNvbnN0IGV4cGFuZGVkID0gbm9kZS5leHBhbmRlZDtcbiAgICAgKiBub2RlLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgZXhwYW5kZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWVTZXJ2aWNlLmlzRXhwYW5kZWQodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBleHBhbmRlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5leHBhbmQodGhpcywgZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5jb2xsYXBzZSh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgZXhwYW5kSW5kaWNhdG9yVGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWU/LmV4cGFuZEluZGljYXRvciA/IHRoaXMudHJlZS5leHBhbmRJbmRpY2F0b3IgOiB0aGlzLl9kZWZhdWx0RXhwYW5kSW5kaWNhdG9yVGVtcGxhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hdGl2ZSBET00gZWxlbWVudCByZXByZXNlbnRpbmcgdGhlIG5vZGUuIENvdWxkIGJlIG51bGwgaW4gY2VydGFpbiBlbnZpcm9ubWVudHMuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0IHRoZSBuYXRpdmVFbGVtZW50IG9mIHRoZSBzZWNvbmQgbm9kZVxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlID0gdGhpcy50cmVlLm5vZGVzLmZpcnN0KCk7XG4gICAgICogY29uc3Qgbm9kZUVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gbm9kZS5uYXRpdmVFbGVtZW50O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgbmF0aXZlRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5vcGVuQW5pbWF0aW9uRG9uZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudHJlZS5ub2RlRXhwYW5kZWQuZW1pdCh7IG93bmVyOiB0aGlzLnRyZWUsIG5vZGU6IHRoaXMgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY2xvc2VBbmltYXRpb25Eb25lLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50cmVlLm5vZGVDb2xsYXBzZWQuZW1pdCh7IG93bmVyOiB0aGlzLnRyZWUsIG5vZGU6IHRoaXMgfSk7XG4gICAgICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLmNvbGxhcHNlKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICogU2V0cyB0aGUgZm9jdXMgdG8gdGhlIG5vZGUncyA8YT4gY2hpbGQsIGlmIHByZXNlbnRcbiAgICAgKiBTZXRzIHRoZSBub2RlIGFzIHRoZSB0cmVlIHNlcnZpY2UncyBmb2N1c2VkTm9kZVxuICAgICAqIE1hcmtzIHRoZSBub2RlIGFzIHRoZSBjdXJyZW50IGFjdGl2ZSBlbGVtZW50XG4gICAgICovXG4gICAgcHVibGljIGhhbmRsZUZvY3VzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm5hdlNlcnZpY2UuZm9jdXNlZE5vZGUgIT09IHRoaXMpIHtcbiAgICAgICAgICAgIHRoaXMubmF2U2VydmljZS5mb2N1c2VkTm9kZSA9IHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5saW5rQ2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5saW5rQ2hpbGRyZW4uZmlyc3QubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlZ2lzdGVyZWRDaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJlZENoaWxkcmVuWzBdLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKiBDbGVhciB0aGUgbm9kZSdzIGZvY3VzZWQgc3RhdHVzXG4gICAgICovXG4gICAgcHVibGljIGNsZWFyRm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25TZWxlY3RvckNsaWNrKGV2ZW50KSB7XG4gICAgICAgIC8vIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAvLyB0aGlzLm5hdlNlcnZpY2UuaGFuZGxlRm9jdXNlZEFuZEFjdGl2ZU5vZGUodGhpcyk7XG4gICAgICAgIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdE11bHRpcGxlTm9kZXModGhpcywgZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3ROb2RlKHRoaXMsIGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3ROb2RlKHRoaXMsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIG5vZGUgZXhwYW5zaW9uIHN0YXRlLCB0cmlnZ2VyaW5nIGFuaW1hdGlvblxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdHJlZT5cbiAgICAgKiAgICAgIDxpZ3gtdHJlZS1ub2RlICNub2RlPk15IE5vZGU8L2lneC10cmVlLW5vZGU+XG4gICAgICogPC9pZ3gtdHJlZT5cbiAgICAgKiA8YnV0dG9uIGlneEJ1dHRvbiAoY2xpY2spPVwibm9kZS50b2dnbGUoKVwiPlRvZ2dsZSBOb2RlPC9idXR0b24+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbXlOb2RlOiBJZ3hUcmVlTm9kZTxhbnk+ID0gdGhpcy50cmVlLmZpbmROb2RlcyhkYXRhWzBdKVswXTtcbiAgICAgKiBteU5vZGUudG9nZ2xlKCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29sbGFwc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaW5kaWNhdG9yQ2xpY2soKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlKCk7XG4gICAgICAgIHRoaXMubmF2U2VydmljZS5zZXRGb2N1c2VkQW5kQWN0aXZlTm9kZSh0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvblBvaW50ZXJEb3duKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLm5hdlNlcnZpY2Uuc2V0Rm9jdXNlZEFuZEFjdGl2ZU5vZGUodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZW5zdXJlU3RhdGVPbk5vZGVEZWxldGUodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhwYW5kcyB0aGUgbm9kZSwgdHJpZ2dlcmluZyBhbmltYXRpb25cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRyZWU+XG4gICAgICogICAgICA8aWd4LXRyZWUtbm9kZSAjbm9kZT5NeSBOb2RlPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogPGJ1dHRvbiBpZ3hCdXR0b24gKGNsaWNrKT1cIm5vZGUuZXhwYW5kKClcIj5FeHBhbmQgTm9kZTwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG15Tm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXMoZGF0YVswXSlbMF07XG4gICAgICogbXlOb2RlLmV4cGFuZCgpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBleHBhbmQoKSB7XG4gICAgICAgIGlmICh0aGlzLmV4cGFuZGVkICYmICF0aGlzLnRyZWVTZXJ2aWNlLmNvbGxhcHNpbmdOb2Rlcy5oYXModGhpcykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcmdzOiBJVHJlZU5vZGVUb2dnbGluZ0V2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLnRyZWUsXG4gICAgICAgICAgICBub2RlOiB0aGlzLFxuICAgICAgICAgICAgY2FuY2VsOiBmYWxzZVxuXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudHJlZS5ub2RlRXhwYW5kaW5nLmVtaXQoYXJncyk7XG4gICAgICAgIGlmICghYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UuZXhwYW5kKHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5wbGF5T3BlbkFuaW1hdGlvbihcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuQ29udGFpbmVyXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29sbGFwc2VzIHRoZSBub2RlLCB0cmlnZ2VyaW5nIGFuaW1hdGlvblxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdHJlZT5cbiAgICAgKiAgICAgIDxpZ3gtdHJlZS1ub2RlICNub2RlPk15IE5vZGU8L2lneC10cmVlLW5vZGU+XG4gICAgICogPC9pZ3gtdHJlZT5cbiAgICAgKiA8YnV0dG9uIGlneEJ1dHRvbiAoY2xpY2spPVwibm9kZS5jb2xsYXBzZSgpXCI+Q29sbGFwc2UgTm9kZTwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG15Tm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXMoZGF0YVswXSlbMF07XG4gICAgICogbXlOb2RlLmNvbGxhcHNlKCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNvbGxhcHNlKCkge1xuICAgICAgICBpZiAoIXRoaXMuZXhwYW5kZWQgfHwgdGhpcy50cmVlU2VydmljZS5jb2xsYXBzaW5nTm9kZXMuaGFzKHRoaXMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXJnczogSVRyZWVOb2RlVG9nZ2xpbmdFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBvd25lcjogdGhpcy50cmVlLFxuICAgICAgICAgICAgbm9kZTogdGhpcyxcbiAgICAgICAgICAgIGNhbmNlbDogZmFsc2VcblxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRyZWUubm9kZUNvbGxhcHNpbmcuZW1pdChhcmdzKTtcbiAgICAgICAgaWYgKCFhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5jb2xsYXBzaW5nKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wbGF5Q2xvc2VBbmltYXRpb24oXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbkNvbnRhaW5lclxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBhZGRMaW5rQ2hpbGQobGluazogSWd4VHJlZU5vZGVMaW5rRGlyZWN0aXZlKSB7XG4gICAgICAgIHRoaXMuX3RhYkluZGV4ID0gLTE7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJlZENoaWxkcmVuLnB1c2gobGluayk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlbW92ZUxpbmtDaGlsZChsaW5rOiBJZ3hUcmVlTm9kZUxpbmtEaXJlY3RpdmUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJlZ2lzdGVyZWRDaGlsZHJlbi5pbmRleE9mKGxpbmspO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyZWRDaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlICNub0RyYWdUZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFdpbGwgc3dpdGNoIHRlbXBsYXRlcyBkZXBlbmRpbmcgb24gZHJhZ0Ryb3AgLS0+XG48bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub0RyYWdUZW1wbGF0ZVwiPlxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdiAjY2hpbGRyZW5Db250YWluZXJcbiAgICAqbmdJZj1cImV4cGFuZGVkICYmICFsb2FkaW5nXCJcbiAgICBjbGFzcz1cImlneC10cmVlLW5vZGVfX2dyb3VwXCJcbiAgICByb2xlPVwiZ3JvdXBcIlxuPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlneC10cmVlLW5vZGVcIj48L25nLWNvbnRlbnQ+XG48L2Rpdj5cblxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRJbmRpY2F0b3I+XG4gICAgPGlneC1pY29uIFthdHRyLmFyaWEtbGFiZWxdPVwiZXhwYW5kZWQgPyByZXNvdXJjZVN0cmluZ3MuaWd4X2NvbGxhcHNlIDogcmVzb3VyY2VTdHJpbmdzLmlneF9leHBhbmRcIj5cbiAgICAgICAge3sgZXhwYW5kZWQgPyBcImtleWJvYXJkX2Fycm93X2Rvd25cIiA6IFwia2V5Ym9hcmRfYXJyb3dfcmlnaHRcIiB9fVxuICAgIDwvaWd4LWljb24+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIHNlcGFyYXRlZCBpbiBhIHRlbXBsYXRlIGluIGNhc2UgdGhpcyBldmVyIG5lZWRzIHRvIGJlIHRlbXBsYXRhYmxlIC0tPlxuPG5nLXRlbXBsYXRlICNzZWxlY3RNYXJrZXJUZW1wbGF0ZT5cbiAgICA8aWd4LWNoZWNrYm94IFtjaGVja2VkXT1cInNlbGVjdGVkXCIgW3JlYWRvbmx5XT1cInRydWVcIiBbaW5kZXRlcm1pbmF0ZV09XCJpbmRldGVybWluYXRlXCIgW3RhYmluZGV4XT1cIi0xXCI+XG4gICAgPC9pZ3gtY2hlY2tib3g+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2hlYWRlclRlbXBsYXRlPlxuICAgIDxkaXYgI2dob3N0VGVtcGxhdGUgY2xhc3M9XCJpZ3gtdHJlZS1ub2RlX193cmFwcGVyXCJcbiAgICAgICAgW2F0dHIucm9sZV09XCJyb2xlXCJcbiAgICAgICAgW3RhYkluZGV4XT1cInRhYkluZGV4XCJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2lneC10cmVlLW5vZGVfX3dyYXBwZXItLWNvc3knOiBpc0Nvc3ksXG4gICAgICAgICAgICAnaWd4LXRyZWUtbm9kZV9fd3JhcHBlci0tY29tcGFjdCc6IGlzQ29tcGFjdCxcbiAgICAgICAgICAgICdpZ3gtdHJlZS1ub2RlX193cmFwcGVyLS1zZWxlY3RlZCc6IHNlbGVjdGVkLFxuICAgICAgICAgICAgJ2lneC10cmVlLW5vZGVfX3dyYXBwZXItLWFjdGl2ZScgOiB0aGlzLmFjdGl2ZSxcbiAgICAgICAgICAgICdpZ3gtdHJlZS1ub2RlX193cmFwcGVyLS1mb2N1c2VkJyA6IHRoaXMuZm9jdXNlZCxcbiAgICAgICAgICAgICdpZ3gtdHJlZS1ub2RlX193cmFwcGVyLS1kaXNhYmxlZCcgOiB0aGlzLmRpc2FibGVkXG4gICAgICAgIH1cIlxuICAgICAgICAocG9pbnRlcmRvd24pPVwib25Qb2ludGVyRG93bigkZXZlbnQpXCJcbiAgICAgICAgKGZvY3VzKT1cImhhbmRsZUZvY3VzKClcIlxuICAgICAgICAoYmx1cik9XCJjbGVhckZvY3VzKClcIlxuICAgID5cbiAgICAgICAgPGRpdiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBpdGVtIG9mIFtdLmNvbnN0cnVjdG9yKGxldmVsKVwiXG4gICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImlneC10cmVlLW5vZGVfX3NwYWNlclwiXG4gICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIEV4cGFuZC9Db2xsYXBzZSBpbmRpY2F0b3IgLS0+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiIWxvYWRpbmdcIlxuICAgICAgICAgICAgY2xhc3M9XCJpZ3gtdHJlZS1ub2RlX190b2dnbGUtYnV0dG9uXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lneC10cmVlLW5vZGVfX3RvZ2dsZS1idXR0b24tLWhpZGRlbic6ICFfY2hpbGRyZW4/Lmxlbmd0aCB9XCJcbiAgICAgICAgICAgIChjbGljayk9XCJpbmRpY2F0b3JDbGljaygpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImV4cGFuZEluZGljYXRvclRlbXBsYXRlLCBjb250ZXh0OiB7ICRpbXBsaWNpdDogZXhwYW5kZWQgfVwiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJsb2FkaW5nXCJcbiAgICAgICAgICAgIGNsYXNzPVwiaWd4LXRyZWUtbm9kZV9fdG9nZ2xlLWJ1dHRvblwiXG4gICAgICAgID5cbiAgICAgICAgXHQ8aWd4LWNpcmN1bGFyLWJhclxuICAgICAgICAgICAgXHRbYW5pbWF0ZV09XCJmYWxzZVwiXG4gICAgICAgICAgICBcdFtpbmRldGVybWluYXRlXT1cInRydWVcIlxuICAgICAgICAgICAgXHRbdGV4dFZpc2liaWxpdHldPVwiZmFsc2VcIlxuICAgICAgICBcdD5cbiAgICAgICAgXHQ8L2lneC1jaXJjdWxhci1iYXI+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIEl0ZW0gc2VsZWN0aW9uIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1NlbGVjdG9yc1wiXG4gICAgICAgICAgICBjbGFzcz1cImlneC10cmVlLW5vZGVfX3NlbGVjdFwiXG4gICAgICAgICAgICAocG9pbnRlcmRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VsZWN0b3JDbGljaygkZXZlbnQpXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VsZWN0TWFya2VyVGVtcGxhdGVcIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LXRyZWUtbm9kZV9fY29udGVudFwiPlxuICAgICAgICAgICAgPCEtLSBHaG9zdCBjb250ZW50IC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gIEJ1ZmZlciBlbGVtZW50IGZvciAnbW92ZSBhZnRlcicgd2hlbiBEJkQgaXMgaW1wbGVtZW50ZWQtLT5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LXRyZWUtbm9kZV9fZHJvcC1pbmRpY2F0b3JcIj5cbiAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJpZ3gtdHJlZS1ub2RlX19zcGFjZXJcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBbXS5jb25zdHJ1Y3RvcihsZXZlbClcIj48L3NwYW4+XG4gICAgICAgIDwhLS0gc3R5bGUgcnVsZXMgdGFyZ2V0IHRoaXMgZGl2LCBkbyBub3QgZGVsZXRlIGl0IC0tPlxuICAgICAgICA8ZGl2PjwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkcmFnVGVtcGxhdGU+XG4gICAgPCEtLSBEcmFnIGRyb3AgZ29lcyBoZXJlXG4gICAgICAgIGlneERyb3BcbiAgICAgICAgI2Ryb3BSZWY9XCJkcm9wXCJcbiAgICAgICAgW2lneE5vZGVEcmFnXT1cInRoaXNcIlxuICAgICAgICAoZHJhZ1N0YXJ0KT1cImxvZ0Ryb3AoZHJvcFJlZilcIlxuICAgICAgICAobGVhdmUpPVwiZW1pdExlYXZlKClcIlxuICAgICAgICAoZW50ZXIpPVwiZW1pdEVudGVyKClcIiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LXRyZWUtbm9kZV9fZHJhZy13cmFwcGVyXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -307,10 +307,10 @@ export class IgxTreeSelectionService {
|
|
|
307
307
|
}
|
|
308
308
|
});
|
|
309
309
|
}
|
|
310
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0
|
|
311
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0
|
|
310
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxTreeSelectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
311
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxTreeSelectionService }); }
|
|
312
312
|
}
|
|
313
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0
|
|
313
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxTreeSelectionService, decorators: [{
|
|
314
314
|
type: Injectable
|
|
315
315
|
}] });
|
|
316
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1zZWxlY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi90cmVlL3RyZWUtc2VsZWN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQXdCLG9CQUFvQixFQUEyQixNQUFNLFVBQVUsQ0FBQzs7QUFRL0Ysd0JBQXdCO0FBRXhCLE1BQU0sT0FBTyx1QkFBdUI7SUFEcEM7UUFHWSxrQkFBYSxHQUEwQixJQUFJLEdBQUcsRUFBb0IsQ0FBQztRQUNuRSx1QkFBa0IsR0FBMEIsSUFBSSxHQUFHLEVBQW9CLENBQUM7S0EyVm5GO0lBdFZVLFFBQVEsQ0FBQyxJQUFhO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFFRCwwRUFBMEU7SUFDbkUsbUJBQW1CLENBQUMsSUFBc0IsRUFBRSxLQUFhO1FBQzVELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRTtZQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RCLE9BQU87U0FDVjtRQUNELE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEgsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxL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LHVCQUF1Qjs7Z0dBQXZCLHVCQUF1QjtrQkFEbkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneFRyZWUsIElneFRyZWVOb2RlLCBJZ3hUcmVlU2VsZWN0aW9uVHlwZSwgSVRyZWVOb2RlU2VsZWN0aW9uRXZlbnQgfSBmcm9tICcuL2NvbW1vbic7XG5cbi8qKiBBIGNvbGxlY3Rpb24gY29udGFpbmluZyB0aGUgbm9kZXMgYWZmZWN0ZWQgaW4gdGhlIHNlbGVjdGlvbiBhcyB3ZWxsIGFzIHRoZWlyIGRpcmVjdCBwYXJlbnRzICovXG5pbnRlcmZhY2UgQ2FzY2FkZVNlbGVjdGlvbk5vZGVDb2xsZWN0aW9uIHtcbiAgICBub2RlczogU2V0PElneFRyZWVOb2RlPGFueT4+O1xuICAgIHBhcmVudHM6IFNldDxJZ3hUcmVlTm9kZTxhbnk+Pjtcbn1cblxuLyoqIEBoaWRkZW4gQGludGVybmFsICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSWd4VHJlZVNlbGVjdGlvblNlcnZpY2Uge1xuICAgIHByaXZhdGUgdHJlZTogSWd4VHJlZTtcbiAgICBwcml2YXRlIG5vZGVTZWxlY3Rpb246IFNldDxJZ3hUcmVlTm9kZTxhbnk+PiA9IG5ldyBTZXQ8SWd4VHJlZU5vZGU8YW55Pj4oKTtcbiAgICBwcml2YXRlIGluZGV0ZXJtaW5hdGVOb2RlczogU2V0PElneFRyZWVOb2RlPGFueT4+ID0gbmV3IFNldDxJZ3hUcmVlTm9kZTxhbnk+PigpO1xuXG4gICAgcHJpdmF0ZSBub2Rlc1RvQmVTZWxlY3RlZDogU2V0PElneFRyZWVOb2RlPGFueT4+O1xuICAgIHByaXZhdGUgbm9kZXNUb0JlSW5kZXRlcm1pbmF0ZTogU2V0PElneFRyZWVOb2RlPGFueT4+O1xuXG4gICAgcHVibGljIHJlZ2lzdGVyKHRyZWU6IElneFRyZWUpIHtcbiAgICAgICAgdGhpcy50cmVlID0gdHJlZTtcbiAgICB9XG5cbiAgICAvKiogU2VsZWN0IHJhbmdlIGZyb20gbGFzdCBzZWxlY3RlZCBub2RlIHRvIHRoZSBjdXJyZW50IHNwZWNpZmllZCBub2RlLiAqL1xuICAgIHB1YmxpYyBzZWxlY3RNdWx0aXBsZU5vZGVzKG5vZGU6IElneFRyZWVOb2RlPGFueT4sIGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLm5vZGVTZWxlY3Rpb24uc2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3ROb2RlKG5vZGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhc3RTZWxlY3RlZE5vZGVJbmRleCA9IHRoaXMudHJlZS5ub2Rlcy50b0FycmF5KCkuaW5kZXhPZih0aGlzLmdldFNlbGVjdGVkTm9kZXMoKVt0aGlzLm5vZGVTZWxlY3Rpb24uc2l6ZSAtIDFdKTtcbiAgICAgICAgY29uc3QgY3VycmVudE5vZGVJbmRleCA9IHRoaXMudHJlZS5ub2Rlcy50b0FycmF5KCkuaW5kZXhPZihub2RlKTtcbiAgICAgICAgY29uc3Qgbm9kZXMgPSB0aGlzLnRyZWUubm9kZXMudG9BcnJheSgpLnNsaWNlKE1hdGgubWluKGN1cnJlbnROb2RlSW5kZXgsIGxhc3RTZWxlY3RlZE5vZGVJbmRleCksXG4gICAgICAgICAgICBNYXRoLm1heChjdXJyZW50Tm9kZUluZGV4LCBsYXN0U2VsZWN0ZWROb2RlSW5kZXgpICsgMSk7XG5cbiAgICAgICAgY29uc3QgYWRkZWQgPSBub2Rlcy5maWx0ZXIoX25vZGUgPT4gIXRoaXMuaXNOb2RlU2VsZWN0ZWQoX25vZGUpKTtcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZE5vZGVzKCkuY29uY2F0KGFkZGVkKTtcbiAgICAgICAgdGhpcy5lbWl0Tm9kZVNlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgYWRkZWQsIFtdLCBldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIFNlbGVjdCB0aGUgc3BlY2lmaWVkIG5vZGUgYW5kIGVtaXQgZXZlbnQuICovXG4gICAgcHVibGljIHNlbGVjdE5vZGUobm9kZTogSWd4VHJlZU5vZGU8YW55PiwgZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50cmVlLnNlbGVjdGlvbiA9PT0gSWd4VHJlZVNlbGVjdGlvblR5cGUuTm9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW1pdE5vZGVTZWxlY3Rpb25FdmVudChbLi4udGhpcy5nZXRTZWxlY3RlZE5vZGVzKCksIG5vZGVdLCBbbm9kZV0sIFtdLCBldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIERlc2VsZWN0IHRoZSBzcGVjaWZpZWQgbm9kZSBhbmQgZW1pdCBldmVudC4gKi9cbiAgICBwdWJsaWMgZGVzZWxlY3ROb2RlKG5vZGU6IElneFRyZWVOb2RlPGFueT4sIGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZE5vZGVzKCkuZmlsdGVyKHIgPT4gciAhPT0gbm9kZSk7XG4gICAgICAgIHRoaXMuZW1pdE5vZGVTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIFtdLCBbbm9kZV0sIGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKiogQ2xlYXJzIG5vZGUgc2VsZWN0aW9uICovXG4gICAgcHVibGljIGNsZWFyTm9kZXNTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMubm9kZVNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB0aGlzLmluZGV0ZXJtaW5hdGVOb2Rlcy5jbGVhcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc05vZGVTZWxlY3RlZChub2RlOiBJZ3hUcmVlTm9kZTxhbnk+KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVTZWxlY3Rpb24uaGFzKG5vZGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc05vZGVJbmRldGVybWluYXRlKG5vZGU6IElneFRyZWVOb2RlPGFueT4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXRlcm1pbmF0ZU5vZGVzLmhhcyhub2RlKTtcbiAgICB9XG5cbiAgICAvKiogU2VsZWN0IHNwZWNpZmllZCBub2Rlcy4gTm8gZXZlbnQgaXMgZW1pdHRlZC4gKi9cbiAgICBwdWJsaWMgc2VsZWN0Tm9kZXNXaXRoTm9FdmVudChub2RlczogSWd4VHJlZU5vZGU8YW55PltdLCBjbGVhclByZXZTZWxlY3Rpb24gPSBmYWxzZSwgc2hvdWxkRW1pdCA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudHJlZSAmJiB0aGlzLnRyZWUuc2VsZWN0aW9uID09PSBJZ3hUcmVlU2VsZWN0aW9uVHlwZS5DYXNjYWRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuY2FzY2FkZVNlbGVjdE5vZGVzV2l0aE5vRXZlbnQobm9kZXMsIGNsZWFyUHJldlNlbGVjdGlvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvbGRTZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGVkTm9kZXMoKTtcblxuICAgICAgICBpZiAoY2xlYXJQcmV2U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLm5vZGVTZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBub2Rlcy5mb3JFYWNoKG5vZGUgPT4gdGhpcy5ub2RlU2VsZWN0aW9uLmFkZChub2RlKSk7XG5cbiAgICAgICAgaWYgKHNob3VsZEVtaXQpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdFNlbGVjdGVkQ2hhbmdlRXZlbnQob2xkU2VsZWN0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBEZXNlbGVjdCBzcGVjaWZpZWQgbm9kZXMuIE5vIGV2ZW50IGlzIGVtaXR0ZWQuICovXG4gICAgcHVibGljIGRlc2VsZWN0Tm9kZXNXaXRoTm9FdmVudChub2Rlcz86IElneFRyZWVOb2RlPGFueT5bXSwgc2hvdWxkRW1pdCA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb2xkU2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZE5vZGVzKCk7XG5cbiAgICAgICAgaWYgKCFub2Rlcykge1xuICAgICAgICAgICAgdGhpcy5ub2RlU2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50cmVlICYmIHRoaXMudHJlZS5zZWxlY3Rpb24gPT09IElneFRyZWVTZWxlY3Rpb25UeXBlLkNhc2NhZGluZykge1xuICAgICAgICAgICAgdGhpcy5jYXNjYWRlRGVzZWxlY3ROb2Rlc1dpdGhOb0V2ZW50KG5vZGVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5vZGVzLmZvckVhY2gobm9kZSA9PiB0aGlzLm5vZGVTZWxlY3Rpb24uZGVsZXRlKG5vZGUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaG91bGRFbWl0KSB7XG4gICAgICAgICAgICB0aGlzLmVtaXRTZWxlY3RlZENoYW5nZUV2ZW50KG9sZFNlbGVjdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQ2FsbGVkIG9uIGBub2RlLm5nT25EZXN0cm95YCB0byBlbnN1cmUgc3RhdGUgaXMgY29ycmVjdCBhZnRlciBub2RlIGlzIHJlbW92ZWQgKi9cbiAgICBwdWJsaWMgZW5zdXJlU3RhdGVPbk5vZGVEZWxldGUobm9kZTogSWd4VHJlZU5vZGU8YW55Pik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50cmVlPy5zZWxlY3Rpb24gIT09IElneFRyZWVTZWxlY3Rpb25UeXBlLkNhc2NhZGluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc05vZGVTZWxlY3RlZChub2RlKSkge1xuICAgICAgICAgICAgICAgIC8vIG5vZGUgaXMgZGVzdHJveWVkLCBkbyBub3QgZW1pdCBldmVudFxuICAgICAgICAgICAgICAgIHRoaXMuZGVzZWxlY3ROb2Rlc1dpdGhOb0V2ZW50KFtub2RlXSwgZmFsc2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIW5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGFzc2l0YW50TGVhZk5vZGUgPSBub2RlLnBhcmVudE5vZGU/LmFsbENoaWxkcmVuLmZpbmQoZSA9PiAhZS5fY2hpbGRyZW4/Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhc3NpdGFudExlYWZOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5yZXRyaWdnZXJOb2RlU3RhdGUoYXNzaXRhbnRMZWFmTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBSZXRyaWdnZXJzIGEgbm9kZSdzIHNlbGVjdGlvbiBzdGF0ZSAqL1xuICAgIHByaXZhdGUgcmV0cmlnZ2VyTm9kZVN0YXRlKG5vZGU6IElneFRyZWVOb2RlPGFueT4pOiB2b2lkIHtcbiAgICAgICAgaWYgKG5vZGUuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMubm9kZVNlbGVjdGlvbi5kZWxldGUobm9kZSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdE5vZGVzV2l0aE5vRXZlbnQoW25vZGVdLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ub2RlU2VsZWN0aW9uLmFkZChub2RlKTtcbiAgICAgICAgICAgIHRoaXMuZGVzZWxlY3ROb2Rlc1dpdGhOb0V2ZW50KFtub2RlXSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgYXJyYXkgb2YgdGhlIHNlbGVjdGVkIG5vZGVzLiAqL1xuICAgIHByaXZhdGUgZ2V0U2VsZWN0ZWROb2RlcygpOiBJZ3hUcmVlTm9kZTxhbnk+W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2RlU2VsZWN0aW9uLnNpemUgPyBBcnJheS5mcm9tKHRoaXMubm9kZVNlbGVjdGlvbikgOiBbXTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyBhcnJheSBvZiB0aGUgbm9kZXMgaW4gaW5kZXRlcm1pbmF0ZSBzdGF0ZS4gKi9cbiAgICBwcml2YXRlIGdldEluZGV0ZXJtaW5hdGVOb2RlcygpOiBJZ3hUcmVlTm9kZTxhbnk+W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRldGVybWluYXRlTm9kZXMuc2l6ZSA/IEFycmF5LmZyb20odGhpcy5pbmRldGVybWluYXRlTm9kZXMpIDogW107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0Tm9kZVNlbGVjdGlvbkV2ZW50KFxuICAgICAgICBuZXdTZWxlY3Rpb246IElneFRyZWVOb2RlPGFueT5bXSwgYWRkZWQ6IElneFRyZWVOb2RlPGFueT5bXSwgcmVtb3ZlZDogSWd4VHJlZU5vZGU8YW55PltdLCBldmVudDogRXZlbnRcbiAgICApOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMudHJlZS5zZWxlY3Rpb24gPT09IElneFRyZWVTZWxlY3Rpb25UeXBlLkNhc2NhZGluZykge1xuICAgICAgICAgICAgdGhpcy5lbWl0Q2FzY2FkZU5vZGVTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VyclNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWROb2RlcygpO1xuICAgICAgICBpZiAodGhpcy5hcmVFcXVhbENvbGxlY3Rpb25zKGN1cnJTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3M6IElUcmVlTm9kZVNlbGVjdGlvbkV2ZW50ID0ge1xuICAgICAgICAgICAgb2xkU2VsZWN0aW9uOiBjdXJyU2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24sXG4gICAgICAgICAgICBhZGRlZCwgcmVtb3ZlZCwgZXZlbnQsIGNhbmNlbDogZmFsc2UsIG93bmVyOiB0aGlzLnRyZWVcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50cmVlLm5vZGVTZWxlY3Rpb24uZW1pdChhcmdzKTtcbiAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3ROb2Rlc1dpdGhOb0V2ZW50KGFyZ3MubmV3U2VsZWN0aW9uLCB0cnVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFyZUVxdWFsQ29sbGVjdGlvbnMoZmlyc3Q6IElneFRyZWVOb2RlPGFueT5bXSwgc2Vjb25kOiBJZ3hUcmVlTm9kZTxhbnk+W10pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZpcnN0Lmxlbmd0aCA9PT0gc2Vjb25kLmxlbmd0aCAmJiBuZXcgU2V0KGZpcnN0LmNvbmNhdChzZWNvbmQpKS5zaXplID09PSBmaXJzdC5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYXNjYWRlU2VsZWN0Tm9kZXNXaXRoTm9FdmVudChub2Rlcz86IElneFRyZWVOb2RlPGFueT5bXSwgY2xlYXJQcmV2U2VsZWN0aW9uID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb2xkU2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZE5vZGVzKCk7XG5cbiAgICAgICAgaWYgKGNsZWFyUHJldlNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5pbmRldGVybWluYXRlTm9kZXMuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMubm9kZVNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVOb2Rlc05ld1NlbGVjdGlvblN0YXRlKHsgYWRkZWQ6IG5vZGVzLCByZW1vdmVkOiBbXSB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IFsuLi5vbGRTZWxlY3Rpb24sIC4uLm5vZGVzXTtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3M6IFBhcnRpYWw8SVRyZWVOb2RlU2VsZWN0aW9uRXZlbnQ+ID0geyBvbGRTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbiB9O1xuXG4gICAgICAgICAgICAvLyByZXRyaWV2ZSBvbmx5IHRoZSByb3dzIHdpdGhvdXQgdGhlaXIgcGFyZW50cy9jaGlsZHJlbiB3aGljaCBoYXMgdG8gYmUgYWRkZWQgdG8gdGhlIHNlbGVjdGlvblxuICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZUFkZFJlbW92ZUFyZ3MoYXJncyk7XG5cbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlTm9kZXNOZXdTZWxlY3Rpb25TdGF0ZShhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5vZGVTZWxlY3Rpb24gPSBuZXcgU2V0KHRoaXMubm9kZXNUb0JlU2VsZWN0ZWQpO1xuICAgICAgICB0aGlzLmluZGV0ZXJtaW5hdGVOb2RlcyA9IG5ldyBTZXQodGhpcy5ub2Rlc1RvQmVJbmRldGVybWluYXRlKTtcblxuICAgICAgICB0aGlzLmVtaXRTZWxlY3RlZENoYW5nZUV2ZW50KG9sZFNlbGVjdGlvbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYXNjYWRlRGVzZWxlY3ROb2Rlc1dpdGhOb0V2ZW50KG5vZGVzOiBJZ3hUcmVlTm9kZTxhbnk+W10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHsgYWRkZWQ6IFtdLCByZW1vdmVkOiBub2RlcyB9O1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZU5vZGVzTmV3U2VsZWN0aW9uU3RhdGUoYXJncyk7XG5cbiAgICAgICAgdGhpcy5ub2RlU2VsZWN0aW9uID0gbmV3IFNldDxJZ3hUcmVlTm9kZTxhbnk+Pih0aGlzLm5vZGVzVG9CZVNlbGVjdGVkKTtcbiAgICAgICAgdGhpcy5pbmRldGVybWluYXRlTm9kZXMgPSBuZXcgU2V0PElneFRyZWVOb2RlPGFueT4+KHRoaXMubm9kZXNUb0JlSW5kZXRlcm1pbmF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcG9wdWxhdGVzIHRoZSBub2Rlc1RvQmVTZWxlY3RlZCBhbmQgbm9kZXNUb0JlSW5kZXRlcm1pbmF0ZSBzZXRzXG4gICAgICogd2l0aCB0aGUgbm9kZXMgd2hpY2ggd2lsbCBiZSBldmVudHVhbGx5IGluIHNlbGVjdGVkL2luZGV0ZXJtaW5hdGUgc3RhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGNhbGN1bGF0ZU5vZGVzTmV3U2VsZWN0aW9uU3RhdGUoYXJnczogUGFydGlhbDxJVHJlZU5vZGVTZWxlY3Rpb25FdmVudD4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ub2Rlc1RvQmVTZWxlY3RlZCA9IG5ldyBTZXQ8SWd4VHJlZU5vZGU8YW55Pj4oYXJncy5vbGRTZWxlY3Rpb24gPyBhcmdzLm9sZFNlbGVjdGlvbiA6IHRoaXMuZ2V0U2VsZWN0ZWROb2RlcygpKTtcbiAgICAgICAgdGhpcy5ub2Rlc1RvQmVJbmRldGVybWluYXRlID0gbmV3IFNldDxJZ3hUcmVlTm9kZTxhbnk+Pih0aGlzLmdldEluZGV0ZXJtaW5hdGVOb2RlcygpKTtcblxuICAgICAgICB0aGlzLmNhc2NhZGVTZWxlY3Rpb25TdGF0ZShhcmdzLnJlbW92ZWQsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5jYXNjYWRlU2VsZWN0aW9uU3RhdGUoYXJncy5hZGRlZCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEVuc3VyZXMgcHJvcGVyIHNlbGVjdGlvbiBzdGF0ZSBmb3IgYWxsIHByZWRlc2Nlc3NvcnMgYW5kIGRlc2NlbmRhbnRzIGR1cmluZyBhIHNlbGVjdGlvbiBldmVudCAqL1xuICAgIHByaXZhdGUgY2FzY2FkZVNlbGVjdGlvblN0YXRlKG5vZGVzOiBJZ3hUcmVlTm9kZTxhbnk+W10sIHNlbGVjdGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICghbm9kZXMgfHwgbm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZXMgJiYgbm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZUNvbGxlY3Rpb246IENhc2NhZGVTZWxlY3Rpb25Ob2RlQ29sbGVjdGlvbiA9IHRoaXMuZ2V0Q2FzY2FkaW5nTm9kZUNvbGxlY3Rpb24obm9kZXMpO1xuXG4gICAgICAgICAgICBub2RlQ29sbGVjdGlvbi5ub2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vZGVzVG9CZVNlbGVjdGVkLmFkZChub2RlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vZGVzVG9CZVNlbGVjdGVkLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5ub2Rlc1RvQmVJbmRldGVybWluYXRlLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBBcnJheS5mcm9tKG5vZGVDb2xsZWN0aW9uLnBhcmVudHMpLmZvckVhY2goKHBhcmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUGFyZW50U2VsZWN0aW9uU3RhdGUocGFyZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0Q2FzY2FkZU5vZGVTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudD8pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY3VyclNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWROb2RlcygpO1xuICAgICAgICBpZiAodGhpcy5hcmVFcXVhbENvbGxlY3Rpb25zKGN1cnJTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3M6IElUcmVlTm9kZVNlbGVjdGlvbkV2ZW50ID0ge1xuICAgICAgICAgICAgb2xkU2VsZWN0aW9uOiBjdXJyU2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24sXG4gICAgICAgICAgICBhZGRlZCwgcmVtb3ZlZCwgZXZlbnQsIGNhbmNlbDogZmFsc2UsIG93bmVyOiB0aGlzLnRyZWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmNhbGN1bGF0ZU5vZGVzTmV3U2VsZWN0aW9uU3RhdGUoYXJncyk7XG5cbiAgICAgICAgYXJncy5uZXdTZWxlY3Rpb24gPSBBcnJheS5mcm9tKHRoaXMubm9kZXNUb0JlU2VsZWN0ZWQpO1xuXG4gICAgICAgIC8vIHJldHJpZXZlIG5vZGVzL3BhcmVudHMvY2hpbGRyZW4gd2hpY2ggaGFzIGJlZW4gYWRkZWQvcmVtb3ZlZCBmcm9tIHRoZSBzZWxlY3Rpb25cbiAgICAgICAgdGhpcy5wb3B1bGF0ZUFkZFJlbW92ZUFyZ3MoYXJncyk7XG5cbiAgICAgICAgdGhpcy50cmVlLm5vZGVTZWxlY3Rpb24uZW1pdChhcmdzKTtcblxuICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIGFyZ3MubmV3U2VsZWN0aW9uIGhhc24ndCBiZWVuIG1vZGlmaWVkXG4gICAgICAgIGlmICh0aGlzLmFyZUVxdWFsQ29sbGVjdGlvbnMoQXJyYXkuZnJvbSh0aGlzLm5vZGVzVG9CZVNlbGVjdGVkKSwgYXJncy5uZXdTZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICB0aGlzLm5vZGVTZWxlY3Rpb24gPSBuZXcgU2V0PElneFRyZWVOb2RlPGFueT4+KHRoaXMubm9kZXNUb0JlU2VsZWN0ZWQpO1xuICAgICAgICAgICAgdGhpcy5pbmRldGVybWluYXRlTm9kZXMgPSBuZXcgU2V0KHRoaXMubm9kZXNUb0JlSW5kZXRlcm1pbmF0ZSk7XG4gICAgICAgICAgICB0aGlzLmVtaXRTZWxlY3RlZENoYW5nZUV2ZW50KGN1cnJTZWxlY3Rpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc2VsZWN0IHRoZSBub2RlcyB3aXRoaW4gdGhlIG1vZGlmaWVkIGFyZ3MubmV3U2VsZWN0aW9uIHdpdGggbm8gZXZlbnRcbiAgICAgICAgICAgIHRoaXMuY2FzY2FkZVNlbGVjdE5vZGVzV2l0aE5vRXZlbnQoYXJncy5uZXdTZWxlY3Rpb24sIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmVjdXJzaXZlbHkgaGFuZGxlIHRoZSBzZWxlY3Rpb24gc3RhdGUgb2YgdGhlIGRpcmVjdCBhbmQgaW5kaXJlY3QgcGFyZW50c1xuICAgICAqL1xuICAgIHByaXZhdGUgaGFuZGxlUGFyZW50U2VsZWN0aW9uU3RhdGUobm9kZTogSWd4VHJlZU5vZGU8YW55Pikge1xuICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhbmRsZU5vZGVTZWxlY3Rpb25TdGF0ZShub2RlKTtcbiAgICAgICAgaWYgKG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQYXJlbnRTZWxlY3Rpb25TdGF0ZShub2RlLnBhcmVudE5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIHRoZSBzZWxlY3Rpb24gc3RhdGUgb2YgYSBnaXZlbiBub2RlIGJhc2VkIHRoZSBzZWxlY3Rpb24gc3RhdGVzIG9mIGl0cyBkaXJlY3QgY2hpbGRyZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGhhbmRsZU5vZGVTZWxlY3Rpb25TdGF0ZShub2RlOiBJZ3hUcmVlTm9kZTxhbnk+KSB7XG4gICAgICAgIGNvbnN0IG5vZGVzQXJyYXkgPSAobm9kZSAmJiBub2RlLl9jaGlsZHJlbikgPyBub2RlLl9jaGlsZHJlbi50b0FycmF5KCkgOiBbXTtcbiAgICAgICAgaWYgKG5vZGVzQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAobm9kZXNBcnJheS5ldmVyeShuID0+IHRoaXMubm9kZXNUb0JlU2VsZWN0ZWQuaGFzKG4pKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZXNUb0JlU2VsZWN0ZWQuYWRkKG5vZGUpO1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZXNUb0JlSW5kZXRlcm1pbmF0ZS5kZWxldGUobm9kZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGVzQXJyYXkuc29tZShuID0+IHRoaXMubm9kZXNUb0JlU2VsZWN0ZWQuaGFzKG4pIHx8IHRoaXMubm9kZXNUb0JlSW5kZXRlcm1pbmF0ZS5oYXMobikpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2Rlc1RvQmVJbmRldGVybWluYXRlLmFkZChub2RlKTtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVzVG9CZVNlbGVjdGVkLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2Rlc1RvQmVJbmRldGVybWluYXRlLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVzVG9CZVNlbGVjdGVkLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBjaGlsZHJlbiBvZiB0aGUgbm9kZSBoYXMgYmVlbiBkZWxldGVkIGFuZCB0aGUgbm9kZSB3YXMgc2VsZWN0ZWQgZG8gbm90IGNoYW5nZSBpdHMgc3RhdGVcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTm9kZVNlbGVjdGVkKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2Rlc1RvQmVTZWxlY3RlZC5hZGQobm9kZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZXNUb0JlU2VsZWN0ZWQuZGVsZXRlKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5ub2Rlc1RvQmVJbmRldGVybWluYXRlLmRlbGV0ZShub2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhIGNvbGxlY3Rpb24gb2YgYWxsIG5vZGVzIGFmZmVjdGVkIGJ5IHRoZSBjaGFuZ2UgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2Rlc1RvQmVQcm9jZXNzZWQgc2V0IG9mIHRoZSBub2RlcyB0byBiZSBzZWxlY3RlZC9kZXNlbGVjdGVkXG4gICAgICogQHJldHVybnMgYSBjb2xsZWN0aW9uIG9mIGFsbCBhZmZlY3RlZCBub2RlcyBhbmQgYWxsIHRoZWlyIHBhcmVudHNcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldENhc2NhZGluZ05vZGVDb2xsZWN0aW9uKG5vZGVzOiBJZ3hUcmVlTm9kZTxhbnk+W10pOiBDYXNjYWRlU2VsZWN0aW9uTm9kZUNvbGxlY3Rpb24ge1xuICAgICAgICBjb25zdCBjb2xsZWN0aW9uOiBDYXNjYWRlU2VsZWN0aW9uTm9kZUNvbGxlY3Rpb24gPSB7XG4gICAgICAgICAgICBwYXJlbnRzOiBuZXcgU2V0PElneFRyZWVOb2RlPGFueT4+KCksXG4gICAgICAgICAgICBub2RlczogbmV3IFNldDxJZ3hUcmVlTm9kZTxhbnk+Pihub2RlcylcbiAgICAgICAgfTtcblxuICAgICAgICBBcnJheS5mcm9tKGNvbGxlY3Rpb24ubm9kZXMpLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVBbmRBbGxDaGlsZHJlbiA9IG5vZGUuYWxsQ2hpbGRyZW4/LnRvQXJyYXkoKSB8fCBbXTtcbiAgICAgICAgICAgIG5vZGVBbmRBbGxDaGlsZHJlbi5mb3JFYWNoKG4gPT4ge1xuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24ubm9kZXMuYWRkKG4pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChub2RlICYmIG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24ucGFyZW50cy5hZGQobm9kZS5wYXJlbnROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHJpZXZlIHRoZSBub2RlcyB3aGljaCBzaG91bGQgYmUgYWRkZWQvcmVtb3ZlZCB0by9mcm9tIHRoZSBvbGQgc2VsZWN0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBwb3B1bGF0ZUFkZFJlbW92ZUFyZ3MoYXJnczogUGFydGlhbDxJVHJlZU5vZGVTZWxlY3Rpb25FdmVudD4pOiB2b2lkIHtcbiAgICAgICAgYXJncy5yZW1vdmVkID0gYXJncy5vbGRTZWxlY3Rpb24uZmlsdGVyKHggPT4gYXJncy5uZXdTZWxlY3Rpb24uaW5kZXhPZih4KSA8IDApO1xuICAgICAgICBhcmdzLmFkZGVkID0gYXJncy5uZXdTZWxlY3Rpb24uZmlsdGVyKHggPT4gYXJncy5vbGRTZWxlY3Rpb24uaW5kZXhPZih4KSA8IDApO1xuICAgIH1cblxuICAgIC8qKiBFbWl0cyB0aGUgYHNlbGVjdGVkQ2hhbmdlYCBldmVudCBmb3IgZWFjaCBub2RlIGFmZmVjdGVkIGJ5IHRoZSBzZWxlY3Rpb24gKi9cbiAgICBwcml2YXRlIGVtaXRTZWxlY3RlZENoYW5nZUV2ZW50KG9sZFNlbGVjdGlvbjogSWd4VHJlZU5vZGU8YW55PltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ2V0U2VsZWN0ZWROb2RlcygpLmZvckVhY2gobiA9PiB7XG4gICAgICAgICAgICBpZiAob2xkU2VsZWN0aW9uLmluZGV4T2YobikgPCAwKSB7XG4gICAgICAgICAgICAgICAgbi5zZWxlY3RlZENoYW5nZS5lbWl0KHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBvbGRTZWxlY3Rpb24uZm9yRWFjaChuID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5ub2RlU2VsZWN0aW9uLmhhcyhuKSkge1xuICAgICAgICAgICAgICAgIG4uc2VsZWN0ZWRDaGFuZ2UuZW1pdChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
|
|
316
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1zZWxlY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi90cmVlL3RyZWUtc2VsZWN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQXdCLG9CQUFvQixFQUEyQixNQUFNLFVBQVUsQ0FBQzs7QUFRL0Ysd0JBQXdCO0FBRXhCLE1BQU0sT0FBTyx1QkFBdUI7SUFEcEM7UUFHWSxrQkFBYSxHQUEwQixJQUFJLEdBQUcsRUFBb0IsQ0FBQztRQUNuRSx1QkFBa0IsR0FBMEIsSUFBSSxHQUFHLEVBQW9CLENBQUM7S0EyVm5GO0lBdFZVLFFBQVEsQ0FBQyxJQUFhO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFFRCwwRUFBMEU7SUFDbkUsbUJBQW1CLENBQUMsSUFBc0IsRUFBRSxLQUFhO1FBQzVELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRTtZQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RCLE9BQU87U0FDVjtRQUNELE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEgsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxL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LHVCQUF1Qjs7MkZBQXZCLHVCQUF1QjtrQkFEbkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneFRyZWUsIElneFRyZWVOb2RlLCBJZ3hUcmVlU2VsZWN0aW9uVHlwZSwgSVRyZWVOb2RlU2VsZWN0aW9uRXZlbnQgfSBmcm9tICcuL2NvbW1vbic7XG5cbi8qKiBBIGNvbGxlY3Rpb24gY29udGFpbmluZyB0aGUgbm9kZXMgYWZmZWN0ZWQgaW4gdGhlIHNlbGVjdGlvbiBhcyB3ZWxsIGFzIHRoZWlyIGRpcmVjdCBwYXJlbnRzICovXG5pbnRlcmZhY2UgQ2FzY2FkZVNlbGVjdGlvbk5vZGVDb2xsZWN0aW9uIHtcbiAgICBub2RlczogU2V0PElneFRyZWVOb2RlPGFueT4+O1xuICAgIHBhcmVudHM6IFNldDxJZ3hUcmVlTm9kZTxhbnk+Pjtcbn1cblxuLyoqIEBoaWRkZW4gQGludGVybmFsICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSWd4VHJlZVNlbGVjdGlvblNlcnZpY2Uge1xuICAgIHByaXZhdGUgdHJlZTogSWd4VHJlZTtcbiAgICBwcml2YXRlIG5vZGVTZWxlY3Rpb246IFNldDxJZ3hUcmVlTm9kZTxhbnk+PiA9IG5ldyBTZXQ8SWd4VHJlZU5vZGU8YW55Pj4oKTtcbiAgICBwcml2YXRlIGluZGV0ZXJtaW5hdGVOb2RlczogU2V0PElneFRyZWVOb2RlPGFueT4+ID0gbmV3IFNldDxJZ3hUcmVlTm9kZTxhbnk+PigpO1xuXG4gICAgcHJpdmF0ZSBub2Rlc1RvQmVTZWxlY3RlZDogU2V0PElneFRyZWVOb2RlPGFueT4+O1xuICAgIHByaXZhdGUgbm9kZXNUb0JlSW5kZXRlcm1pbmF0ZTogU2V0PElneFRyZWVOb2RlPGFueT4+O1xuXG4gICAgcHVibGljIHJlZ2lzdGVyKHRyZWU6IElneFRyZWUpIHtcbiAgICAgICAgdGhpcy50cmVlID0gdHJlZTtcbiAgICB9XG5cbiAgICAvKiogU2VsZWN0IHJhbmdlIGZyb20gbGFzdCBzZWxlY3RlZCBub2RlIHRvIHRoZSBjdXJyZW50IHNwZWNpZmllZCBub2RlLiAqL1xuICAgIHB1YmxpYyBzZWxlY3RNdWx0aXBsZU5vZGVzKG5vZGU6IElneFRyZWVOb2RlPGFueT4sIGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLm5vZGVTZWxlY3Rpb24uc2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3ROb2RlKG5vZGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhc3RTZWxlY3RlZE5vZGVJbmRleCA9IHRoaXMudHJlZS5ub2Rlcy50b0FycmF5KCkuaW5kZXhPZih0aGlzLmdldFNlbGVjdGVkTm9kZXMoKVt0aGlzLm5vZGVTZWxlY3Rpb24uc2l6ZSAtIDFdKTtcbiAgICAgICAgY29uc3QgY3VycmVudE5vZGVJbmRleCA9IHRoaXMudHJlZS5ub2Rlcy50b0FycmF5KCkuaW5kZXhPZihub2RlKTtcbiAgICAgICAgY29uc3Qgbm9kZXMgPSB0aGlzLnRyZWUubm9kZXMudG9BcnJheSgpLnNsaWNlKE1hdGgubWluKGN1cnJlbnROb2RlSW5kZXgsIGxhc3RTZWxlY3RlZE5vZGVJbmRleCksXG4gICAgICAgICAgICBNYXRoLm1heChjdXJyZW50Tm9kZUluZGV4LCBsYXN0U2VsZWN0ZWROb2RlSW5kZXgpICsgMSk7XG5cbiAgICAgICAgY29uc3QgYWRkZWQgPSBub2Rlcy5maWx0ZXIoX25vZGUgPT4gIXRoaXMuaXNOb2RlU2VsZWN0ZWQoX25vZGUpKTtcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZE5vZGVzKCkuY29uY2F0KGFkZGVkKTtcbiAgICAgICAgdGhpcy5lbWl0Tm9kZVNlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgYWRkZWQsIFtdLCBldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIFNlbGVjdCB0aGUgc3BlY2lmaWVkIG5vZGUgYW5kIGVtaXQgZXZlbnQuICovXG4gICAgcHVibGljIHNlbGVjdE5vZGUobm9kZTogSWd4VHJlZU5vZGU8YW55PiwgZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50cmVlLnNlbGVjdGlvbiA9PT0gSWd4VHJlZVNlbGVjdGlvblR5cGUuTm9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW1pdE5vZGVTZWxlY3Rpb25FdmVudChbLi4udGhpcy5nZXRTZWxlY3RlZE5vZGVzKCksIG5vZGVdLCBbbm9kZV0sIFtdLCBldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIERlc2VsZWN0IHRoZSBzcGVjaWZpZWQgbm9kZSBhbmQgZW1pdCBldmVudC4gKi9cbiAgICBwdWJsaWMgZGVzZWxlY3ROb2RlKG5vZGU6IElneFRyZWVOb2RlPGFueT4sIGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZE5vZGVzKCkuZmlsdGVyKHIgPT4gciAhPT0gbm9kZSk7XG4gICAgICAgIHRoaXMuZW1pdE5vZGVTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIFtdLCBbbm9kZV0sIGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKiogQ2xlYXJzIG5vZGUgc2VsZWN0aW9uICovXG4gICAgcHVibGljIGNsZWFyTm9kZXNTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMubm9kZVNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB0aGlzLmluZGV0ZXJtaW5hdGVOb2Rlcy5jbGVhcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc05vZGVTZWxlY3RlZChub2RlOiBJZ3hUcmVlTm9kZTxhbnk+KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVTZWxlY3Rpb24uaGFzKG5vZGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc05vZGVJbmRldGVybWluYXRlKG5vZGU6IElneFRyZWVOb2RlPGFueT4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXRlcm1pbmF0ZU5vZGVzLmhhcyhub2RlKTtcbiAgICB9XG5cbiAgICAvKiogU2VsZWN0IHNwZWNpZmllZCBub2Rlcy4gTm8gZXZlbnQgaXMgZW1pdHRlZC4gKi9cbiAgICBwdWJsaWMgc2VsZWN0Tm9kZXNXaXRoTm9FdmVudChub2RlczogSWd4VHJlZU5vZGU8YW55PltdLCBjbGVhclByZXZTZWxlY3Rpb24gPSBmYWxzZSwgc2hvdWxkRW1pdCA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudHJlZSAmJiB0aGlzLnRyZWUuc2VsZWN0aW9uID09PSBJZ3hUcmVlU2VsZWN0aW9uVHlwZS5DYXNjYWRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuY2FzY2FkZVNlbGVjdE5vZGVzV2l0aE5vRXZlbnQobm9kZXMsIGNsZWFyUHJldlNlbGVjdGlvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvbGRTZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGVkTm9kZXMoKTtcblxuICAgICAgICBpZiAoY2xlYXJQcmV2U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLm5vZGVTZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBub2Rlcy5mb3JFYWNoKG5vZGUgPT4gdGhpcy5ub2RlU2VsZWN0aW9uLmFkZChub2RlKSk7XG5cbiAgICAgICAgaWYgKHNob3VsZEVtaXQpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdFNlbGVjdGVkQ2hhbmdlRXZlbnQob2xkU2VsZWN0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBEZXNlbGVjdCBzcGVjaWZpZWQgbm9kZXMuIE5vIGV2ZW50IGlzIGVtaXR0ZWQuICovXG4gICAgcHVibGljIGRlc2VsZWN0Tm9kZXNXaXRoTm9FdmVudChub2Rlcz86IElneFRyZWVOb2RlPGFueT5bXSwgc2hvdWxkRW1pdCA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb2xkU2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZE5vZGVzKCk7XG5cbiAgICAgICAgaWYgKCFub2Rlcykge1xuICAgICAgICAgICAgdGhpcy5ub2RlU2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50cmVlICYmIHRoaXMudHJlZS5zZWxlY3Rpb24gPT09IElneFRyZWVTZWxlY3Rpb25UeXBlLkNhc2NhZGluZykge1xuICAgICAgICAgICAgdGhpcy5jYXNjYWRlRGVzZWxlY3ROb2Rlc1dpdGhOb0V2ZW50KG5vZGVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5vZGVzLmZvckVhY2gobm9kZSA9PiB0aGlzLm5vZGVTZWxlY3Rpb24uZGVsZXRlKG5vZGUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaG91bGRFbWl0KSB7XG4gICAgICAgICAgICB0aGlzLmVtaXRTZWxlY3RlZENoYW5nZUV2ZW50KG9sZFNlbGVjdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQ2FsbGVkIG9uIGBub2RlLm5nT25EZXN0cm95YCB0byBlbnN1cmUgc3RhdGUgaXMgY29ycmVjdCBhZnRlciBub2RlIGlzIHJlbW92ZWQgKi9cbiAgICBwdWJsaWMgZW5zdXJlU3RhdGVPbk5vZGVEZWxldGUobm9kZTogSWd4VHJlZU5vZGU8YW55Pik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50cmVlPy5zZWxlY3Rpb24gIT09IElneFRyZWVTZWxlY3Rpb25UeXBlLkNhc2NhZGluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc05vZGVTZWxlY3RlZChub2RlKSkge1xuICAgICAgICAgICAgICAgIC8vIG5vZGUgaXMgZGVzdHJveWVkLCBkbyBub3QgZW1pdCBldmVudFxuICAgICAgICAgICAgICAgIHRoaXMuZGVzZWxlY3ROb2Rlc1dpdGhOb0V2ZW50KFtub2RlXSwgZmFsc2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIW5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGFzc2l0YW50TGVhZk5vZGUgPSBub2RlLnBhcmVudE5vZGU/LmFsbENoaWxkcmVuLmZpbmQoZSA9PiAhZS5fY2hpbGRyZW4/Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhc3NpdGFudExlYWZOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5yZXRyaWdnZXJOb2RlU3RhdGUoYXNzaXRhbnRMZWFmTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBSZXRyaWdnZXJzIGEgbm9kZSdzIHNlbGVjdGlvbiBzdGF0ZSAqL1xuICAgIHByaXZhdGUgcmV0cmlnZ2VyTm9kZVN0YXRlKG5vZGU6IElneFRyZWVOb2RlPGFueT4pOiB2b2lkIHtcbiAgICAgICAgaWYgKG5vZGUuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMubm9kZVNlbGVjdGlvbi5kZWxldGUobm9kZSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdE5vZGVzV2l0aE5vRXZlbnQoW25vZGVdLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ub2RlU2VsZWN0aW9uLmFkZChub2RlKTtcbiAgICAgICAgICAgIHRoaXMuZGVzZWxlY3ROb2Rlc1dpdGhOb0V2ZW50KFtub2RlXSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgYXJyYXkgb2YgdGhlIHNlbGVjdGVkIG5vZGVzLiAqL1xuICAgIHByaXZhdGUgZ2V0U2VsZWN0ZWROb2RlcygpOiBJZ3hUcmVlTm9kZTxhbnk+W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2RlU2VsZWN0aW9uLnNpemUgPyBBcnJheS5mcm9tKHRoaXMubm9kZVNlbGVjdGlvbikgOiBbXTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyBhcnJheSBvZiB0aGUgbm9kZXMgaW4gaW5kZXRlcm1pbmF0ZSBzdGF0ZS4gKi9cbiAgICBwcml2YXRlIGdldEluZGV0ZXJtaW5hdGVOb2RlcygpOiBJZ3hUcmVlTm9kZTxhbnk+W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRldGVybWluYXRlTm9kZXMuc2l6ZSA/IEFycmF5LmZyb20odGhpcy5pbmRldGVybWluYXRlTm9kZXMpIDogW107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0Tm9kZVNlbGVjdGlvbkV2ZW50KFxuICAgICAgICBuZXdTZWxlY3Rpb246IElneFRyZWVOb2RlPGFueT5bXSwgYWRkZWQ6IElneFRyZWVOb2RlPGFueT5bXSwgcmVtb3ZlZDogSWd4VHJlZU5vZGU8YW55PltdLCBldmVudDogRXZlbnRcbiAgICApOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMudHJlZS5zZWxlY3Rpb24gPT09IElneFRyZWVTZWxlY3Rpb25UeXBlLkNhc2NhZGluZykge1xuICAgICAgICAgICAgdGhpcy5lbWl0Q2FzY2FkZU5vZGVTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VyclNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWROb2RlcygpO1xuICAgICAgICBpZiAodGhpcy5hcmVFcXVhbENvbGxlY3Rpb25zKGN1cnJTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3M6IElUcmVlTm9kZVNlbGVjdGlvbkV2ZW50ID0ge1xuICAgICAgICAgICAgb2xkU2VsZWN0aW9uOiBjdXJyU2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24sXG4gICAgICAgICAgICBhZGRlZCwgcmVtb3ZlZCwgZXZlbnQsIGNhbmNlbDogZmFsc2UsIG93bmVyOiB0aGlzLnRyZWVcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50cmVlLm5vZGVTZWxlY3Rpb24uZW1pdChhcmdzKTtcbiAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3ROb2Rlc1dpdGhOb0V2ZW50KGFyZ3MubmV3U2VsZWN0aW9uLCB0cnVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFyZUVxdWFsQ29sbGVjdGlvbnMoZmlyc3Q6IElneFRyZWVOb2RlPGFueT5bXSwgc2Vjb25kOiBJZ3hUcmVlTm9kZTxhbnk+W10pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZpcnN0Lmxlbmd0aCA9PT0gc2Vjb25kLmxlbmd0aCAmJiBuZXcgU2V0KGZpcnN0LmNvbmNhdChzZWNvbmQpKS5zaXplID09PSBmaXJzdC5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYXNjYWRlU2VsZWN0Tm9kZXNXaXRoTm9FdmVudChub2Rlcz86IElneFRyZWVOb2RlPGFueT5bXSwgY2xlYXJQcmV2U2VsZWN0aW9uID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb2xkU2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZE5vZGVzKCk7XG5cbiAgICAgICAgaWYgKGNsZWFyUHJldlNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5pbmRldGVybWluYXRlTm9kZXMuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMubm9kZVNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVOb2Rlc05ld1NlbGVjdGlvblN0YXRlKHsgYWRkZWQ6IG5vZGVzLCByZW1vdmVkOiBbXSB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IFsuLi5vbGRTZWxlY3Rpb24sIC4uLm5vZGVzXTtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3M6IFBhcnRpYWw8SVRyZWVOb2RlU2VsZWN0aW9uRXZlbnQ+ID0geyBvbGRTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbiB9O1xuXG4gICAgICAgICAgICAvLyByZXRyaWV2ZSBvbmx5IHRoZSByb3dzIHdpdGhvdXQgdGhlaXIgcGFyZW50cy9jaGlsZHJlbiB3aGljaCBoYXMgdG8gYmUgYWRkZWQgdG8gdGhlIHNlbGVjdGlvblxuICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZUFkZFJlbW92ZUFyZ3MoYXJncyk7XG5cbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlTm9kZXNOZXdTZWxlY3Rpb25TdGF0ZShhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5vZGVTZWxlY3Rpb24gPSBuZXcgU2V0KHRoaXMubm9kZXNUb0JlU2VsZWN0ZWQpO1xuICAgICAgICB0aGlzLmluZGV0ZXJtaW5hdGVOb2RlcyA9IG5ldyBTZXQodGhpcy5ub2Rlc1RvQmVJbmRldGVybWluYXRlKTtcblxuICAgICAgICB0aGlzLmVtaXRTZWxlY3RlZENoYW5nZUV2ZW50KG9sZFNlbGVjdGlvbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYXNjYWRlRGVzZWxlY3ROb2Rlc1dpdGhOb0V2ZW50KG5vZGVzOiBJZ3hUcmVlTm9kZTxhbnk+W10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHsgYWRkZWQ6IFtdLCByZW1vdmVkOiBub2RlcyB9O1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZU5vZGVzTmV3U2VsZWN0aW9uU3RhdGUoYXJncyk7XG5cbiAgICAgICAgdGhpcy5ub2RlU2VsZWN0aW9uID0gbmV3IFNldDxJZ3hUcmVlTm9kZTxhbnk+Pih0aGlzLm5vZGVzVG9CZVNlbGVjdGVkKTtcbiAgICAgICAgdGhpcy5pbmRldGVybWluYXRlTm9kZXMgPSBuZXcgU2V0PElneFRyZWVOb2RlPGFueT4+KHRoaXMubm9kZXNUb0JlSW5kZXRlcm1pbmF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcG9wdWxhdGVzIHRoZSBub2Rlc1RvQmVTZWxlY3RlZCBhbmQgbm9kZXNUb0JlSW5kZXRlcm1pbmF0ZSBzZXRzXG4gICAgICogd2l0aCB0aGUgbm9kZXMgd2hpY2ggd2lsbCBiZSBldmVudHVhbGx5IGluIHNlbGVjdGVkL2luZGV0ZXJtaW5hdGUgc3RhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGNhbGN1bGF0ZU5vZGVzTmV3U2VsZWN0aW9uU3RhdGUoYXJnczogUGFydGlhbDxJVHJlZU5vZGVTZWxlY3Rpb25FdmVudD4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ub2Rlc1RvQmVTZWxlY3RlZCA9IG5ldyBTZXQ8SWd4VHJlZU5vZGU8YW55Pj4oYXJncy5vbGRTZWxlY3Rpb24gPyBhcmdzLm9sZFNlbGVjdGlvbiA6IHRoaXMuZ2V0U2VsZWN0ZWROb2RlcygpKTtcbiAgICAgICAgdGhpcy5ub2Rlc1RvQmVJbmRldGVybWluYXRlID0gbmV3IFNldDxJZ3hUcmVlTm9kZTxhbnk+Pih0aGlzLmdldEluZGV0ZXJtaW5hdGVOb2RlcygpKTtcblxuICAgICAgICB0aGlzLmNhc2NhZGVTZWxlY3Rpb25TdGF0ZShhcmdzLnJlbW92ZWQsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5jYXNjYWRlU2VsZWN0aW9uU3RhdGUoYXJncy5hZGRlZCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEVuc3VyZXMgcHJvcGVyIHNlbGVjdGlvbiBzdGF0ZSBmb3IgYWxsIHByZWRlc2Nlc3NvcnMgYW5kIGRlc2NlbmRhbnRzIGR1cmluZyBhIHNlbGVjdGlvbiBldmVudCAqL1xuICAgIHByaXZhdGUgY2FzY2FkZVNlbGVjdGlvblN0YXRlKG5vZGVzOiBJZ3hUcmVlTm9kZTxhbnk+W10sIHNlbGVjdGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICghbm9kZXMgfHwgbm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZXMgJiYgbm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZUNvbGxlY3Rpb246IENhc2NhZGVTZWxlY3Rpb25Ob2RlQ29sbGVjdGlvbiA9IHRoaXMuZ2V0Q2FzY2FkaW5nTm9kZUNvbGxlY3Rpb24obm9kZXMpO1xuXG4gICAgICAgICAgICBub2RlQ29sbGVjdGlvbi5ub2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vZGVzVG9CZVNlbGVjdGVkLmFkZChub2RlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vZGVzVG9CZVNlbGVjdGVkLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5ub2Rlc1RvQmVJbmRldGVybWluYXRlLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBBcnJheS5mcm9tKG5vZGVDb2xsZWN0aW9uLnBhcmVudHMpLmZvckVhY2goKHBhcmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUGFyZW50U2VsZWN0aW9uU3RhdGUocGFyZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0Q2FzY2FkZU5vZGVTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudD8pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY3VyclNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWROb2RlcygpO1xuICAgICAgICBpZiAodGhpcy5hcmVFcXVhbENvbGxlY3Rpb25zKGN1cnJTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3M6IElUcmVlTm9kZVNlbGVjdGlvbkV2ZW50ID0ge1xuICAgICAgICAgICAgb2xkU2VsZWN0aW9uOiBjdXJyU2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24sXG4gICAgICAgICAgICBhZGRlZCwgcmVtb3ZlZCwgZXZlbnQsIGNhbmNlbDogZmFsc2UsIG93bmVyOiB0aGlzLnRyZWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmNhbGN1bGF0ZU5vZGVzTmV3U2VsZWN0aW9uU3RhdGUoYXJncyk7XG5cbiAgICAgICAgYXJncy5uZXdTZWxlY3Rpb24gPSBBcnJheS5mcm9tKHRoaXMubm9kZXNUb0JlU2VsZWN0ZWQpO1xuXG4gICAgICAgIC8vIHJldHJpZXZlIG5vZGVzL3BhcmVudHMvY2hpbGRyZW4gd2hpY2ggaGFzIGJlZW4gYWRkZWQvcmVtb3ZlZCBmcm9tIHRoZSBzZWxlY3Rpb25cbiAgICAgICAgdGhpcy5wb3B1bGF0ZUFkZFJlbW92ZUFyZ3MoYXJncyk7XG5cbiAgICAgICAgdGhpcy50cmVlLm5vZGVTZWxlY3Rpb24uZW1pdChhcmdzKTtcblxuICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIGFyZ3MubmV3U2VsZWN0aW9uIGhhc24ndCBiZWVuIG1vZGlmaWVkXG4gICAgICAgIGlmICh0aGlzLmFyZUVxdWFsQ29sbGVjdGlvbnMoQXJyYXkuZnJvbSh0aGlzLm5vZGVzVG9CZVNlbGVjdGVkKSwgYXJncy5uZXdTZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICB0aGlzLm5vZGVTZWxlY3Rpb24gPSBuZXcgU2V0PElneFRyZWVOb2RlPGFueT4+KHRoaXMubm9kZXNUb0JlU2VsZWN0ZWQpO1xuICAgICAgICAgICAgdGhpcy5pbmRldGVybWluYXRlTm9kZXMgPSBuZXcgU2V0KHRoaXMubm9kZXNUb0JlSW5kZXRlcm1pbmF0ZSk7XG4gICAgICAgICAgICB0aGlzLmVtaXRTZWxlY3RlZENoYW5nZUV2ZW50KGN1cnJTZWxlY3Rpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc2VsZWN0IHRoZSBub2RlcyB3aXRoaW4gdGhlIG1vZGlmaWVkIGFyZ3MubmV3U2VsZWN0aW9uIHdpdGggbm8gZXZlbnRcbiAgICAgICAgICAgIHRoaXMuY2FzY2FkZVNlbGVjdE5vZGVzV2l0aE5vRXZlbnQoYXJncy5uZXdTZWxlY3Rpb24sIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmVjdXJzaXZlbHkgaGFuZGxlIHRoZSBzZWxlY3Rpb24gc3RhdGUgb2YgdGhlIGRpcmVjdCBhbmQgaW5kaXJlY3QgcGFyZW50c1xuICAgICAqL1xuICAgIHByaXZhdGUgaGFuZGxlUGFyZW50U2VsZWN0aW9uU3RhdGUobm9kZTogSWd4VHJlZU5vZGU8YW55Pikge1xuICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhbmRsZU5vZGVTZWxlY3Rpb25TdGF0ZShub2RlKTtcbiAgICAgICAgaWYgKG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQYXJlbnRTZWxlY3Rpb25TdGF0ZShub2RlLnBhcmVudE5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIHRoZSBzZWxlY3Rpb24gc3RhdGUgb2YgYSBnaXZlbiBub2RlIGJhc2VkIHRoZSBzZWxlY3Rpb24gc3RhdGVzIG9mIGl0cyBkaXJlY3QgY2hpbGRyZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGhhbmRsZU5vZGVTZWxlY3Rpb25TdGF0ZShub2RlOiBJZ3hUcmVlTm9kZTxhbnk+KSB7XG4gICAgICAgIGNvbnN0IG5vZGVzQXJyYXkgPSAobm9kZSAmJiBub2RlLl9jaGlsZHJlbikgPyBub2RlLl9jaGlsZHJlbi50b0FycmF5KCkgOiBbXTtcbiAgICAgICAgaWYgKG5vZGVzQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAobm9kZXNBcnJheS5ldmVyeShuID0+IHRoaXMubm9kZXNUb0JlU2VsZWN0ZWQuaGFzKG4pKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZXNUb0JlU2VsZWN0ZWQuYWRkKG5vZGUpO1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZXNUb0JlSW5kZXRlcm1pbmF0ZS5kZWxldGUobm9kZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGVzQXJyYXkuc29tZShuID0+IHRoaXMubm9kZXNUb0JlU2VsZWN0ZWQuaGFzKG4pIHx8IHRoaXMubm9kZXNUb0JlSW5kZXRlcm1pbmF0ZS5oYXMobikpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2Rlc1RvQmVJbmRldGVybWluYXRlLmFkZChub2RlKTtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVzVG9CZVNlbGVjdGVkLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2Rlc1RvQmVJbmRldGVybWluYXRlLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVzVG9CZVNlbGVjdGVkLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBjaGlsZHJlbiBvZiB0aGUgbm9kZSBoYXMgYmVlbiBkZWxldGVkIGFuZCB0aGUgbm9kZSB3YXMgc2VsZWN0ZWQgZG8gbm90IGNoYW5nZSBpdHMgc3RhdGVcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTm9kZVNlbGVjdGVkKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2Rlc1RvQmVTZWxlY3RlZC5hZGQobm9kZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZXNUb0JlU2VsZWN0ZWQuZGVsZXRlKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5ub2Rlc1RvQmVJbmRldGVybWluYXRlLmRlbGV0ZShub2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhIGNvbGxlY3Rpb24gb2YgYWxsIG5vZGVzIGFmZmVjdGVkIGJ5IHRoZSBjaGFuZ2UgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2Rlc1RvQmVQcm9jZXNzZWQgc2V0IG9mIHRoZSBub2RlcyB0byBiZSBzZWxlY3RlZC9kZXNlbGVjdGVkXG4gICAgICogQHJldHVybnMgYSBjb2xsZWN0aW9uIG9mIGFsbCBhZmZlY3RlZCBub2RlcyBhbmQgYWxsIHRoZWlyIHBhcmVudHNcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldENhc2NhZGluZ05vZGVDb2xsZWN0aW9uKG5vZGVzOiBJZ3hUcmVlTm9kZTxhbnk+W10pOiBDYXNjYWRlU2VsZWN0aW9uTm9kZUNvbGxlY3Rpb24ge1xuICAgICAgICBjb25zdCBjb2xsZWN0aW9uOiBDYXNjYWRlU2VsZWN0aW9uTm9kZUNvbGxlY3Rpb24gPSB7XG4gICAgICAgICAgICBwYXJlbnRzOiBuZXcgU2V0PElneFRyZWVOb2RlPGFueT4+KCksXG4gICAgICAgICAgICBub2RlczogbmV3IFNldDxJZ3hUcmVlTm9kZTxhbnk+Pihub2RlcylcbiAgICAgICAgfTtcblxuICAgICAgICBBcnJheS5mcm9tKGNvbGxlY3Rpb24ubm9kZXMpLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVBbmRBbGxDaGlsZHJlbiA9IG5vZGUuYWxsQ2hpbGRyZW4/LnRvQXJyYXkoKSB8fCBbXTtcbiAgICAgICAgICAgIG5vZGVBbmRBbGxDaGlsZHJlbi5mb3JFYWNoKG4gPT4ge1xuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24ubm9kZXMuYWRkKG4pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChub2RlICYmIG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24ucGFyZW50cy5hZGQobm9kZS5wYXJlbnROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHJpZXZlIHRoZSBub2RlcyB3aGljaCBzaG91bGQgYmUgYWRkZWQvcmVtb3ZlZCB0by9mcm9tIHRoZSBvbGQgc2VsZWN0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBwb3B1bGF0ZUFkZFJlbW92ZUFyZ3MoYXJnczogUGFydGlhbDxJVHJlZU5vZGVTZWxlY3Rpb25FdmVudD4pOiB2b2lkIHtcbiAgICAgICAgYXJncy5yZW1vdmVkID0gYXJncy5vbGRTZWxlY3Rpb24uZmlsdGVyKHggPT4gYXJncy5uZXdTZWxlY3Rpb24uaW5kZXhPZih4KSA8IDApO1xuICAgICAgICBhcmdzLmFkZGVkID0gYXJncy5uZXdTZWxlY3Rpb24uZmlsdGVyKHggPT4gYXJncy5vbGRTZWxlY3Rpb24uaW5kZXhPZih4KSA8IDApO1xuICAgIH1cblxuICAgIC8qKiBFbWl0cyB0aGUgYHNlbGVjdGVkQ2hhbmdlYCBldmVudCBmb3IgZWFjaCBub2RlIGFmZmVjdGVkIGJ5IHRoZSBzZWxlY3Rpb24gKi9cbiAgICBwcml2YXRlIGVtaXRTZWxlY3RlZENoYW5nZUV2ZW50KG9sZFNlbGVjdGlvbjogSWd4VHJlZU5vZGU8YW55PltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ2V0U2VsZWN0ZWROb2RlcygpLmZvckVhY2gobiA9PiB7XG4gICAgICAgICAgICBpZiAob2xkU2VsZWN0aW9uLmluZGV4T2YobikgPCAwKSB7XG4gICAgICAgICAgICAgICAgbi5zZWxlY3RlZENoYW5nZS5lbWl0KHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBvbGRTZWxlY3Rpb24uZm9yRWFjaChuID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5ub2RlU2VsZWN0aW9uLmhhcyhuKSkge1xuICAgICAgICAgICAgICAgIG4uc2VsZWN0ZWRDaGFuZ2UuZW1pdChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
|