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
|
@@ -19,10 +19,10 @@ export class IgxPaginatorContentDirective {
|
|
|
19
19
|
*/
|
|
20
20
|
this.cssClass = 'igx-paginator-content';
|
|
21
21
|
}
|
|
22
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0
|
|
23
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0
|
|
22
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxPaginatorContentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
23
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: IgxPaginatorContentDirective, isStandalone: true, selector: "[igxPaginatorContent],igx-paginator-content", host: { properties: { "class.igx-paginator-content": "this.cssClass" } }, ngImport: i0 }); }
|
|
24
24
|
}
|
|
25
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0
|
|
25
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxPaginatorContentDirective, decorators: [{
|
|
26
26
|
type: Directive,
|
|
27
27
|
args: [{
|
|
28
28
|
selector: '[igxPaginatorContent],igx-paginator-content',
|
|
@@ -302,10 +302,10 @@ export class IgxPaginatorComponent extends DisplayDensityBase {
|
|
|
302
302
|
sortUniqueOptions(values, newOption) {
|
|
303
303
|
return Array.from(new Set([...values, newOption])).sort((a, b) => a - b);
|
|
304
304
|
}
|
|
305
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0
|
|
306
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0
|
|
305
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxPaginatorComponent, deps: [{ token: DisplayDensityToken, optional: true }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
306
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: IgxPaginatorComponent, isStandalone: true, selector: "igx-paginator", inputs: { page: "page", perPage: "perPage", totalRecords: "totalRecords", selectOptions: "selectOptions", overlaySettings: "overlaySettings", resourceStrings: "resourceStrings" }, outputs: { perPageChange: "perPageChange", pageChange: "pageChange", paging: "paging", pagingDone: "pagingDone" }, host: { properties: { "class.igx-paginator--cosy": "this.classCosy", "class.igx-paginator--compact": "this.classCompact", "class.igx-paginator": "this.classComfortable" } }, queries: [{ propertyName: "customContent", first: true, predicate: IgxPaginatorContentDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"[igxPaginatorContent],igx-paginator-content\"></ng-content>\n\n<igx-page-size *ngIf=\"!customContent\"></igx-page-size>\n<igx-page-nav *ngIf=\"!customContent\"></igx-page-nav>\n", dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i0.forwardRef(function () { return IgxPageSizeSelectorComponent; }), selector: "igx-page-size" }, { kind: "component", type: i0.forwardRef(function () { return IgxPageNavigationComponent; }), selector: "igx-page-nav", inputs: ["role"] }] }); }
|
|
307
307
|
}
|
|
308
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0
|
|
308
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxPaginatorComponent, decorators: [{
|
|
309
309
|
type: Component,
|
|
310
310
|
args: [{ selector: 'igx-paginator', standalone: true, imports: [NgIf, forwardRef(() => IgxPageSizeSelectorComponent), forwardRef(() => IgxPageNavigationComponent)], template: "<ng-content select=\"[igxPaginatorContent],igx-paginator-content\"></ng-content>\n\n<igx-page-size *ngIf=\"!customContent\"></igx-page-size>\n<igx-page-nav *ngIf=\"!customContent\"></igx-page-nav>\n" }]
|
|
311
311
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
@@ -355,10 +355,10 @@ export class IgxPageSizeSelectorComponent {
|
|
|
355
355
|
*/
|
|
356
356
|
this.cssClass = 'igx-page-size';
|
|
357
357
|
}
|
|
358
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0
|
|
359
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0
|
|
358
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxPageSizeSelectorComponent, deps: [{ token: IgxPaginatorComponent, host: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
359
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: IgxPageSizeSelectorComponent, isStandalone: true, selector: "igx-page-size", host: { properties: { "class.igx-page-size": "this.cssClass" } }, ngImport: i0, template: "<label class=\"igx-page-size__label\">{{ paginator.resourceStrings.igx_paginator_label }}</label>\n<div class=\"igx-page-size__select\">\n <igx-select [overlaySettings]=\"paginator.overlaySettings\" [(ngModel)]=\"paginator.perPage\"\n [displayDensity]=\"paginator.paginatorSelectDisplayDensity\" type=\"border\">\n <igx-select-item [value]=\"val\" *ngFor=\"let val of paginator.selectOptions\">\n {{ val }}\n </igx-select-item>\n </igx-select>\n</div>\n", dependencies: [{ kind: "component", type: IgxSelectComponent, selector: "igx-select", inputs: ["placeholder", "disabled", "overlaySettings", "value", "type"], outputs: ["opening", "opened", "closing", "closed"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: IgxSelectItemComponent, selector: "igx-select-item", inputs: ["text"] }] }); }
|
|
360
360
|
}
|
|
361
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0
|
|
361
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxPageSizeSelectorComponent, decorators: [{
|
|
362
362
|
type: Component,
|
|
363
363
|
args: [{ selector: 'igx-page-size', standalone: true, imports: [IgxSelectComponent, FormsModule, IgxLabelDirective, NgFor, IgxSelectItemComponent], template: "<label class=\"igx-page-size__label\">{{ paginator.resourceStrings.igx_paginator_label }}</label>\n<div class=\"igx-page-size__select\">\n <igx-select [overlaySettings]=\"paginator.overlaySettings\" [(ngModel)]=\"paginator.perPage\"\n [displayDensity]=\"paginator.paginatorSelectDisplayDensity\" type=\"border\">\n <igx-select-item [value]=\"val\" *ngFor=\"let val of paginator.selectOptions\">\n {{ val }}\n </igx-select-item>\n </igx-select>\n</div>\n" }]
|
|
364
364
|
}], ctorParameters: function () { return [{ type: IgxPaginatorComponent, decorators: [{
|
|
@@ -380,10 +380,10 @@ export class IgxPageNavigationComponent {
|
|
|
380
380
|
*/
|
|
381
381
|
this.role = 'navigation';
|
|
382
382
|
}
|
|
383
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0
|
|
384
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0
|
|
383
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxPageNavigationComponent, deps: [{ token: IgxPaginatorComponent, host: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
384
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: IgxPageNavigationComponent, isStandalone: true, selector: "igx-page-nav", inputs: { role: "role" }, host: { properties: { "class.igx-page-nav": "this.cssClass", "attr.role": "this.role" } }, ngImport: i0, template: "<button\n [title]=\"paginator.resourceStrings.igx_paginator_first_page_button_text\"\n [disabled]=\"paginator.isFirstPageDisabled\"\n [attr.aria-disabled]=\"paginator.isFirstPageDisabled\"\n (click)=\"paginator.paginate(0)\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n type=\"button\"\n>\n <igx-icon>first_page</igx-icon>\n</button>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_previous_page_button_text\"\n [disabled]=\"paginator.isFirstPageDisabled\"\n [attr.aria-disabled]=\"paginator.isFirstPageDisabled\"\n (click)=\"paginator.previousPage()\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n type=\"button\"\n>\n <igx-icon>chevron_left</igx-icon>\n</button>\n<div class=\"igx-page-nav__text\" aria-current=\"page\">\n <span>{{ paginator.page + 1 }}</span>\n <span\n > {{\n paginator.resourceStrings.igx_paginator_pager_text\n }} </span\n >\n <span>{{ paginator.totalPages || 1 }}</span>\n</div>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_next_page_button_text\"\n [disabled]=\"paginator.isLastPageDisabled\"\n [attr.aria-disabled]=\"paginator.isLastPageDisabled\"\n (click)=\"paginator.nextPage()\"\n igxRipple\n [igxRippleCentered]=\"true\"\n igxButton=\"icon\"\n type=\"button\"\n>\n <igx-icon>chevron_right</igx-icon>\n</button>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_last_page_button_text\"\n [disabled]=\"paginator.isLastPageDisabled\"\n [attr.aria-disabled]=\"paginator.isLastPageDisabled\"\n (click)=\"paginator.paginate(paginator.totalPages - 1)\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n type=\"button\"\n>\n <igx-icon>last_page</igx-icon>\n</button>\n\n", dependencies: [{ kind: "directive", type: IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxButtonColor", "igxButtonBackground", "igxLabel", "disabled"], outputs: ["buttonClick", "buttonSelected"] }, { kind: "directive", type: IgxRippleDirective, selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }] }); }
|
|
385
385
|
}
|
|
386
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0
|
|
386
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxPageNavigationComponent, decorators: [{
|
|
387
387
|
type: Component,
|
|
388
388
|
args: [{ selector: 'igx-page-nav', standalone: true, imports: [IgxButtonDirective, IgxRippleDirective, IgxIconComponent], template: "<button\n [title]=\"paginator.resourceStrings.igx_paginator_first_page_button_text\"\n [disabled]=\"paginator.isFirstPageDisabled\"\n [attr.aria-disabled]=\"paginator.isFirstPageDisabled\"\n (click)=\"paginator.paginate(0)\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n type=\"button\"\n>\n <igx-icon>first_page</igx-icon>\n</button>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_previous_page_button_text\"\n [disabled]=\"paginator.isFirstPageDisabled\"\n [attr.aria-disabled]=\"paginator.isFirstPageDisabled\"\n (click)=\"paginator.previousPage()\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n type=\"button\"\n>\n <igx-icon>chevron_left</igx-icon>\n</button>\n<div class=\"igx-page-nav__text\" aria-current=\"page\">\n <span>{{ paginator.page + 1 }}</span>\n <span\n > {{\n paginator.resourceStrings.igx_paginator_pager_text\n }} </span\n >\n <span>{{ paginator.totalPages || 1 }}</span>\n</div>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_next_page_button_text\"\n [disabled]=\"paginator.isLastPageDisabled\"\n [attr.aria-disabled]=\"paginator.isLastPageDisabled\"\n (click)=\"paginator.nextPage()\"\n igxRipple\n [igxRippleCentered]=\"true\"\n igxButton=\"icon\"\n type=\"button\"\n>\n <igx-icon>chevron_right</igx-icon>\n</button>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_last_page_button_text\"\n [disabled]=\"paginator.isLastPageDisabled\"\n [attr.aria-disabled]=\"paginator.isLastPageDisabled\"\n (click)=\"paginator.paginate(paginator.totalPages - 1)\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n type=\"button\"\n>\n <igx-icon>last_page</igx-icon>\n</button>\n\n" }]
|
|
389
389
|
}], ctorParameters: function () { return [{ type: IgxPaginatorComponent, decorators: [{
|
|
@@ -397,4 +397,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-rc.4", ng
|
|
|
397
397
|
}, {
|
|
398
398
|
type: Input
|
|
399
399
|
}] } });
|
|
400
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9wYWdpbmF0b3IvcGFnaW5hdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9wYWdpbmF0b3IvcGFnaW5hdG9yLmNvbXBvbmVudC5odG1sIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL3BhZ2luYXRvci9wYWdlLXNpemUtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvcGFnaW5hdG9yL3BhZ2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoTCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRSxPQUFPLEVBQTBCLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSWxILE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZ0JBQWdCLEVB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Q29udGVudENoaWxkLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdCwgSG9zdEJpbmRpbmcsIEluamVjdCwgSW5wdXQsIE9wdGlvbmFsLCBPdXRwdXQsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi9jb3JlL2kxOG4vcmVzb3VyY2VzJztcbmltcG9ydCB7IElEaXNwbGF5RGVuc2l0eU9wdGlvbnMsIERpc3BsYXlEZW5zaXR5VG9rZW4sIERpc3BsYXlEZW5zaXR5QmFzZSwgRGlzcGxheURlbnNpdHkgfSBmcm9tICcuLi9jb3JlL2RlbnNpdHknO1xuaW1wb3J0IHsgSVBhZ2VDYW5jZWxsYWJsZUV2ZW50QXJncywgSVBhZ2VFdmVudEFyZ3MgfSBmcm9tICcuL3BhZ2luYXRvci1pbnRlcmZhY2VzJztcbmltcG9ydCB7IElQYWdpbmF0b3JSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi9jb3JlL2kxOG4vcGFnaW5hdG9yLXJlc291cmNlcyc7XG5pbXBvcnQgeyBPdmVybGF5U2V0dGluZ3MgfSBmcm9tICcuLi9zZXJ2aWNlcy9vdmVybGF5L3V0aWxpdGllcyc7XG5pbXBvcnQgeyBJZ3hTZWxlY3RJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VsZWN0L3NlbGVjdC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hMYWJlbERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvbGFiZWwvbGFiZWwuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSWd4U2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vc2VsZWN0L3NlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4UmlwcGxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9yaXBwbGUvcmlwcGxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hCdXR0b25EaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2J1dHRvbi9idXR0b24uZGlyZWN0aXZlJztcbmltcG9ydCB7IE5nSWYsIE5nRm9yIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4UGFnaW5hdG9yQ29udGVudF0saWd4LXBhZ2luYXRvci1jb250ZW50JyxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIElneFBhZ2luYXRvckNvbnRlbnREaXJlY3RpdmUge1xuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1wYWdpbmF0b3ItY29udGVudCcpXG4gICAgcHVibGljIGNzc0NsYXNzID0gJ2lneC1wYWdpbmF0b3ItY29udGVudCc7XG59XG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1wYWdpbmF0b3InLFxuICAgIHRlbXBsYXRlVXJsOiAncGFnaW5hdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ0lmLCBmb3J3YXJkUmVmKCgpID0+IElneFBhZ2VTaXplU2VsZWN0b3JDb21wb25lbnQpLCBmb3J3YXJkUmVmKCgpID0+IElneFBhZ2VOYXZpZ2F0aW9uQ29tcG9uZW50KV1cbn0pXG5leHBvcnQgY2xhc3MgSWd4UGFnaW5hdG9yQ29tcG9uZW50IGV4dGVuZHMgRGlzcGxheURlbnNpdHlCYXNlIHtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneFBhZ2luYXRvckNvbnRlbnREaXJlY3RpdmUpXG4gICAgcHVibGljIGN1c3RvbUNvbnRlbnQ6IElneFBhZ2luYXRvckNvbnRlbnREaXJlY3RpdmU7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gYHBlclBhZ2VgIHByb3BlcnR5IHZhbHVlIG9mIHRoZSBwYWdpbmF0b3IgaXMgY2hhbmdlZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGFnaW5hdG9yIChwZXJQYWdlQ2hhbmdlKT1cIm9uUGVyUGFnZUNoYW5nZSgkZXZlbnQpXCI+PC9pZ3gtcGFnaW5hdG9yPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBwdWJsaWMgb25QZXJQYWdlQ2hhbmdlKHBlclBhZ2U6IG51bWJlcikge1xuICAgICAqICAgdGhpcy5wZXJQYWdlID0gcGVyUGFnZTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHBlclBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgYWZ0ZXIgdGhlIGN1cnJlbnQgcGFnZSBpcyBjaGFuZ2VkLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1wYWdpbmF0b3IgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIj48L2lneC1wYWdpbmF0b3I+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHB1YmxpYyBvblBhZ2VDaGFuZ2UocGFnZTogbnVtYmVyKSB7XG4gICAgICogICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgYmVmb3JlIHBhZ2luZyBpcyBwZXJmb3JtZWQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFJldHVybnMgYW4gb2JqZWN0IGNvbnNpc3Rpbmcgb2YgdGhlIGN1cnJlbnQgYW5kIG5leHQgcGFnZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1wYWdpbmF0b3IgKHBhZ2luZyk9XCJwYWdpbmdIYW5kbGVyKCRldmVudClcIj48L2lneC1wYWdpbmF0b3I+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHBhZ2luZyA9IG5ldyBFdmVudEVtaXR0ZXI8SVBhZ2VDYW5jZWxsYWJsZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgYWZ0ZXIgcGFnaW5nIGlzIHBlcmZvcm1lZC5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogUmV0dXJucyBhbiBvYmplY3QgY29uc2lzdGluZyBvZiB0aGUgcHJldmlvdXMgYW5kIGN1cnJlbnQgcGFnZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1wYWdpbmF0b3IgKHBhZ2luZ0RvbmUpPVwicGFnaW5nRG9uZSgkZXZlbnQpXCI+PC9pZ3gtcGFnaW5hdG9yPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBwYWdpbmdEb25lID0gbmV3IEV2ZW50RW1pdHRlcjxJUGFnZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIFRvdGFsIHBhZ2VzIGNhbGN1bGF0ZWQgZnJvbSB0b3RhbFJlY29yZHMgYW5kIHBlclBhZ2VcbiAgICAgKi9cbiAgICBwdWJsaWMgdG90YWxQYWdlczogbnVtYmVyO1xuICAgIHByb3RlY3RlZCBfcGFnZSA9IDA7XG4gICAgcHJvdGVjdGVkIF90b3RhbFJlY29yZHM6IG51bWJlcjtcbiAgICBwcm90ZWN0ZWQgX3NlbGVjdE9wdGlvbnMgPSBbNSwgMTAsIDE1LCAyNSwgNTAsIDEwMCwgNTAwXTtcbiAgICBwcm90ZWN0ZWQgX3BlclBhZ2UgPSAxNTtcblxuICAgIHByaXZhdGUgX3Jlc291cmNlU3RyaW5ncyA9IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MuUGFnaW5hdG9yUmVzU3RyaW5ncztcbiAgICBwcml2YXRlIF9vdmVybGF5U2V0dGluZ3M6IE92ZXJsYXlTZXR0aW5ncyA9IHt9O1xuICAgIHByaXZhdGUgZGVmYXVsdFNlbGVjdFZhbHVlcyA9IFs1LCAxMCwgMTUsIDI1LCA1MCwgMTAwLCA1MDBdO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY2xhc3Mgb2YgdGhlIElneFBhZ2luYXRvckNvbXBvbmVudCBiYXNlZFxuICAgICAqIG9uIHRoZSBwcm92aWRlZCBkaXNwbGF5RGVuc2l0eS5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1wYWdpbmF0b3ItLWNvc3knKVxuICAgIHB1YmxpYyBnZXQgY2xhc3NDb3N5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5RGVuc2l0eSA9PT0gRGlzcGxheURlbnNpdHkuY29zeTtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1wYWdpbmF0b3ItLWNvbXBhY3QnKVxuICAgIHB1YmxpYyBnZXQgY2xhc3NDb21wYWN0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5RGVuc2l0eSA9PT0gRGlzcGxheURlbnNpdHkuY29tcGFjdDtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1wYWdpbmF0b3InKVxuICAgIHB1YmxpYyBnZXQgY2xhc3NDb21mb3J0YWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheURlbnNpdHkgPT09IERpc3BsYXlEZW5zaXR5LmNvbWZvcnRhYmxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSwgc2V0cyBjdXJyZW50IHBhZ2Ugb2YgdGhlIGBJZ3hQYWdpbmF0b3JDb21wb25lbnRgLlxuICAgICAqIFRoZSBkZWZhdWx0IGlzIDAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBwYWdlID0gdGhpcy5wYWdpbmF0b3IucGFnZTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hQYWdpbmF0b3JDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgcGFnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhZ2U7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBwYWdlKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuX3BhZ2UgPT09IHZhbHVlIHx8IHZhbHVlIDwgMCB8fCB2YWx1ZSA+IHRoaXMudG90YWxQYWdlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNhbmNlbEV2ZW50QXJnczogSVBhZ2VDYW5jZWxsYWJsZUV2ZW50QXJncyA9IHsgY3VycmVudDogdGhpcy5fcGFnZSwgbmV4dDogdmFsdWUsIGNhbmNlbDogZmFsc2UgfTtcbiAgICAgICAgY29uc3QgZXZlbnRBcmdzOiBJUGFnZUV2ZW50QXJncyA9IHsgcHJldmlvdXM6IHRoaXMuX3BhZ2UsIGN1cnJlbnQ6IHZhbHVlIH07XG5cbiAgICAgICAgdGhpcy5wYWdpbmcuZW1pdChjYW5jZWxFdmVudEFyZ3MpO1xuICAgICAgICBpZiAoY2FuY2VsRXZlbnRBcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3BhZ2UgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQodGhpcy5fcGFnZSk7XG5cbiAgICAgICAgdGhpcy5wYWdpbmdEb25lLmVtaXQoZXZlbnRBcmdzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHksIHNldHMgbnVtYmVyIG9mIHZpc2libGUgaXRlbXMgcGVyIHBhZ2UgaW4gdGhlIGBJZ3hQYWdpbmF0b3JDb21wb25lbnRgLlxuICAgICAqIFRoZSBkZWZhdWx0IGlzIDE1LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaXRlbXNQZXJQYWdlID0gdGhpcy5wYWdpbmF0b3IucGVyUGFnZTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hQYWdpbmF0b3JDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgcGVyUGFnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BlclBhZ2U7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBwZXJQYWdlKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHZhbHVlIDwgMCB8fCB0aGlzLnBlclBhZ2UgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcGVyUGFnZSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgIHRoaXMucGVyUGFnZUNoYW5nZS5lbWl0KHRoaXMuX3BlclBhZ2UpO1xuICAgICAgICB0aGlzLl9zZWxlY3RPcHRpb25zID0gdGhpcy5zb3J0VW5pcXVlT3B0aW9ucyh0aGlzLmRlZmF1bHRTZWxlY3RWYWx1ZXMsIHRoaXMuX3BlclBhZ2UpO1xuICAgICAgICB0aGlzLnRvdGFsUGFnZXMgPSBNYXRoLmNlaWwodGhpcy50b3RhbFJlY29yZHMgLyB0aGlzLl9wZXJQYWdlKTtcbiAgICAgICAgaWYgKHRoaXMudG90YWxQYWdlcyAhPT0gMCAmJiB0aGlzLnBhZ2UgPj0gdGhpcy50b3RhbFBhZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2UgPSB0aGlzLnRvdGFsUGFnZXMgLSAxO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgc2V0cyB0aGUgdG90YWwgcmVjb3Jkcy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHRvdGFsUmVjb3JkcyA9IHRoaXMucGFnaW5hdG9yLnRvdGFsUmVjb3JkcztcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hQYWdpbmF0b3JDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgdG90YWxSZWNvcmRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdG90YWxSZWNvcmRzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgdG90YWxSZWNvcmRzKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fdG90YWxSZWNvcmRzID0gdmFsdWU7XG4gICAgICAgIHRoaXMudG90YWxQYWdlcyA9IE1hdGguY2VpbCh0aGlzLnRvdGFsUmVjb3JkcyAvIHRoaXMucGVyUGFnZSk7XG4gICAgICAgIGlmICh0aGlzLnBhZ2UgPiB0aGlzLnRvdGFsUGFnZXMpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHNldHMgY3VzdG9tIG9wdGlvbnMgaW4gdGhlIHNlbGVjdCBvZiB0aGUgcGFnaW5hdG9yXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBvcHRpb25zID0gdGhpcy5wYWdpbmF0b3Iuc2VsZWN0T3B0aW9ucztcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hQYWdpbmF0b3JDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgc2VsZWN0T3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdE9wdGlvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBzZWxlY3RPcHRpb25zKHZhbHVlOiBBcnJheTxudW1iZXI+KSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdE9wdGlvbnMgPSB0aGlzLnNvcnRVbmlxdWVPcHRpb25zKHZhbHVlLCB0aGlzLl9wZXJQYWdlKTtcbiAgICAgICAgdGhpcy5kZWZhdWx0U2VsZWN0VmFsdWVzID0gWy4uLnZhbHVlXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBzZXRzIGN1c3RvbSBPdmVybGF5U2V0dGluZ3MuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGFnaW5hdG9yIFtvdmVybGF5U2V0dGluZ3NdID0gXCJjdXN0b21PdmVybGF5U2V0dGluZ3NcIj48L2lneC1wYWdpbmF0b3I+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IG92ZXJsYXlTZXR0aW5ncygpOiBPdmVybGF5U2V0dGluZ3Mge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3ZlcmxheVNldHRpbmdzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgb3ZlcmxheVNldHRpbmdzKHZhbHVlOiBPdmVybGF5U2V0dGluZ3MpIHtcbiAgICAgICAgdGhpcy5fb3ZlcmxheVNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fb3ZlcmxheVNldHRpbmdzLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gYWNjZXNzb3IgdGhhdCBzZXRzIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqIEJ5IGRlZmF1bHQgaXQgdXNlcyBFTiByZXNvdXJjZXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHJlc291cmNlU3RyaW5ncyh2YWx1ZTogSVBhZ2luYXRvclJlc291cmNlU3RyaW5ncykge1xuICAgICAgICB0aGlzLl9yZXNvdXJjZVN0cmluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9yZXNvdXJjZVN0cmluZ3MsIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBhY2Nlc3NvciB0aGF0IHJldHVybnMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICovXG4gICAgcHVibGljIGdldCByZXNvdXJjZVN0cmluZ3MoKTogSVBhZ2luYXRvclJlc291cmNlU3RyaW5ncyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVN0cmluZ3M7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChEaXNwbGF5RGVuc2l0eVRva2VuKSBwcm90ZWN0ZWQgX2Rpc3BsYXlEZW5zaXR5T3B0aW9uczogSURpc3BsYXlEZW5zaXR5T3B0aW9ucyxcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICAgICAgc3VwZXIoX2Rpc3BsYXlEZW5zaXR5T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpZiB0aGUgY3VycmVudCBwYWdlIGlzIHRoZSBsYXN0IHBhZ2UuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IGxhc3RQYWdlID0gdGhpcy5wYWdpbmF0b3IuaXNMYXN0UGFnZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGlzTGFzdFBhZ2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2UgKyAxID49IHRoaXMudG90YWxQYWdlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGlmIHRoZSBjdXJyZW50IHBhZ2UgaXMgdGhlIGZpcnN0IHBhZ2UuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IGxhc3RQYWdlID0gdGhpcy5wYWdpbmF0b3IuaXNGaXJzdFBhZ2U7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBpc0ZpcnN0UGFnZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnZSA9PT0gMDtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgaWYgdGhlIGZpcnN0IHBhZ2VyIGJ1dHRvbnMgc2hvdWxkIGJlIGRpc2FibGVkXG4gICAgICovXG4gICAgcHVibGljIGdldCBpc0ZpcnN0UGFnZURpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0ZpcnN0UGFnZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGlmIHRoZSBsYXN0IHBhZ2VyIGJ1dHRvbnMgc2hvdWxkIGJlIGRpc2FibGVkXG4gICAgICovXG4gICAgcHVibGljIGdldCBpc0xhc3RQYWdlRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTGFzdFBhZ2U7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBuYXRpdmVFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBEaXNwbGF5RGVuc2l0eSBmb3IgdGhlIDxzZWxlY3Q+IGluc2lkZSB0aGUgcGFnaW5hdG9yXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBwYWdpbmF0b3JTZWxlY3REaXNwbGF5RGVuc2l0eSgpOiBEaXNwbGF5RGVuc2l0eSB7XG4gICAgICAgIHJldHVybiBEaXNwbGF5RGVuc2l0eS5jb21wYWN0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHb2VzIHRvIHRoZSBuZXh0IHBhZ2Ugb2YgdGhlIGBJZ3hQYWdpbmF0b3JDb21wb25lbnRgLCBpZiB0aGUgcGFnaW5hdG9yIGlzIG5vdCBhbHJlYWR5IGF0IHRoZSBsYXN0IHBhZ2UuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMucGFnaW5hdG9yLm5leHRQYWdlKCk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4UGFnaW5hdG9yQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIG5leHRQYWdlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNMYXN0UGFnZSkge1xuICAgICAgICAgICAgdGhpcy5wYWdlICs9IDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogR29lcyB0byB0aGUgcHJldmlvdXMgcGFnZSBvZiB0aGUgYElneFBhZ2luYXRvckNvbXBvbmVudGAsIGlmIHRoZSBwYWdpbmF0b3IgaXMgbm90IGFscmVhZHkgYXQgdGhlIGZpcnN0IHBhZ2UuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMucGFnaW5hdG9yLnByZXZpb3VzUGFnZSgpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneFBhZ2luYXRvckNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBwcmV2aW91c1BhZ2UoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc0ZpcnN0UGFnZSkge1xuICAgICAgICAgICAgdGhpcy5wYWdlIC09IDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogR29lcyB0byB0aGUgZGVzaXJlZCBwYWdlIGluZGV4LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLnBhZ2luYXRvci5wYWdpbmF0ZSgxKTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWxcbiAgICAgKiBAbWVtYmVyb2YgSWd4UGFnaW5hdG9yQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHBhZ2luYXRlKHZhbDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh2YWwgPCAwIHx8IHZhbCA+IHRoaXMudG90YWxQYWdlcyAtIDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhZ2UgPSB2YWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzb3J0VW5pcXVlT3B0aW9ucyh2YWx1ZXM6IEFycmF5PG51bWJlcj4sIG5ld09wdGlvbjogbnVtYmVyKTogbnVtYmVyW10ge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KFsuLi52YWx1ZXMsIG5ld09wdGlvbl0pKS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgfVxufVxuXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaWd4LXBhZ2Utc2l6ZScsXG4gICAgdGVtcGxhdGVVcmw6ICdwYWdlLXNpemUtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0lneFNlbGVjdENvbXBvbmVudCwgRm9ybXNNb2R1bGUsIElneExhYmVsRGlyZWN0aXZlLCBOZ0ZvciwgSWd4U2VsZWN0SXRlbUNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4UGFnZVNpemVTZWxlY3RvckNvbXBvbmVudCB7XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LXBhZ2Utc2l6ZScpXG4gICAgcHVibGljIGNzc0NsYXNzID0gJ2lneC1wYWdlLXNpemUnO1xuXG4gICAgY29uc3RydWN0b3IoQEhvc3QoKSBwdWJsaWMgcGFnaW5hdG9yOiBJZ3hQYWdpbmF0b3JDb21wb25lbnQpIHsgfVxufVxuXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaWd4LXBhZ2UtbmF2JyxcbiAgICB0ZW1wbGF0ZVVybDogJ3BhZ2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtJZ3hCdXR0b25EaXJlY3RpdmUsIElneFJpcHBsZURpcmVjdGl2ZSwgSWd4SWNvbkNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4UGFnZU5hdmlnYXRpb25Db21wb25lbnQge1xuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1wYWdlLW5hdicpXG4gICAgcHVibGljIGNzc0NsYXNzID0gJ2lneC1wYWdlLW5hdic7XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBzZXRzIHRoZSBgcm9sZWAgYXR0cmlidXRlIG9mIHRoZSBlbGVtZW50LlxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByb2xlID0gJ25hdmlnYXRpb24nO1xuXG4gICAgY29uc3RydWN0b3IoQEhvc3QoKSBwdWJsaWMgcGFnaW5hdG9yOiBJZ3hQYWdpbmF0b3JDb21wb25lbnQpIHsgfVxufVxuIiwiPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2lneFBhZ2luYXRvckNvbnRlbnRdLGlneC1wYWdpbmF0b3ItY29udGVudFwiPjwvbmctY29udGVudD5cblxuPGlneC1wYWdlLXNpemUgKm5nSWY9XCIhY3VzdG9tQ29udGVudFwiPjwvaWd4LXBhZ2Utc2l6ZT5cbjxpZ3gtcGFnZS1uYXYgKm5nSWY9XCIhY3VzdG9tQ29udGVudFwiPjwvaWd4LXBhZ2UtbmF2PlxuIiwiPGxhYmVsIGNsYXNzPVwiaWd4LXBhZ2Utc2l6ZV9fbGFiZWxcIj57eyBwYWdpbmF0b3IucmVzb3VyY2VTdHJpbmdzLmlneF9wYWdpbmF0b3JfbGFiZWwgfX08L2xhYmVsPlxuPGRpdiBjbGFzcz1cImlneC1wYWdlLXNpemVfX3NlbGVjdFwiPlxuICAgIDxpZ3gtc2VsZWN0IFtvdmVybGF5U2V0dGluZ3NdPVwicGFnaW5hdG9yLm92ZXJsYXlTZXR0aW5nc1wiIFsobmdNb2RlbCldPVwicGFnaW5hdG9yLnBlclBhZ2VcIlxuICAgICAgICBbZGlzcGxheURlbnNpdHldPVwicGFnaW5hdG9yLnBhZ2luYXRvclNlbGVjdERpc3BsYXlEZW5zaXR5XCIgdHlwZT1cImJvcmRlclwiPlxuICAgICAgICA8aWd4LXNlbGVjdC1pdGVtIFt2YWx1ZV09XCJ2YWxcIiAqbmdGb3I9XCJsZXQgdmFsIG9mIHBhZ2luYXRvci5zZWxlY3RPcHRpb25zXCI+XG4gICAgICAgICAgICB7eyB2YWwgfX1cbiAgICAgICAgPC9pZ3gtc2VsZWN0LWl0ZW0+XG4gICAgPC9pZ3gtc2VsZWN0PlxuPC9kaXY+XG4iLCI8YnV0dG9uXG4gICAgW3RpdGxlXT1cInBhZ2luYXRvci5yZXNvdXJjZVN0cmluZ3MuaWd4X3BhZ2luYXRvcl9maXJzdF9wYWdlX2J1dHRvbl90ZXh0XCJcbiAgICBbZGlzYWJsZWRdPVwicGFnaW5hdG9yLmlzRmlyc3RQYWdlRGlzYWJsZWRcIlxuICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwicGFnaW5hdG9yLmlzRmlyc3RQYWdlRGlzYWJsZWRcIlxuICAgIChjbGljayk9XCJwYWdpbmF0b3IucGFnaW5hdGUoMClcIlxuICAgIGlneEJ1dHRvbj1cImljb25cIlxuICAgIGlneFJpcHBsZVxuICAgIFtpZ3hSaXBwbGVDZW50ZXJlZF09XCJ0cnVlXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbj5cbiAgICA8aWd4LWljb24+Zmlyc3RfcGFnZTwvaWd4LWljb24+XG48L2J1dHRvbj5cbjxidXR0b25cbiAgICBbdGl0bGVdPVwicGFnaW5hdG9yLnJlc291cmNlU3RyaW5ncy5pZ3hfcGFnaW5hdG9yX3ByZXZpb3VzX3BhZ2VfYnV0dG9uX3RleHRcIlxuICAgIFtkaXNhYmxlZF09XCJwYWdpbmF0b3IuaXNGaXJzdFBhZ2VEaXNhYmxlZFwiXG4gICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJwYWdpbmF0b3IuaXNGaXJzdFBhZ2VEaXNhYmxlZFwiXG4gICAgKGNsaWNrKT1cInBhZ2luYXRvci5wcmV2aW91c1BhZ2UoKVwiXG4gICAgaWd4QnV0dG9uPVwiaWNvblwiXG4gICAgaWd4UmlwcGxlXG4gICAgW2lneFJpcHBsZUNlbnRlcmVkXT1cInRydWVcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuPlxuICAgIDxpZ3gtaWNvbj5jaGV2cm9uX2xlZnQ8L2lneC1pY29uPlxuPC9idXR0b24+XG48ZGl2IGNsYXNzPVwiaWd4LXBhZ2UtbmF2X190ZXh0XCIgYXJpYS1jdXJyZW50PVwicGFnZVwiPlxuICAgIDxzcGFuPnt7IHBhZ2luYXRvci5wYWdlICsgMSB9fTwvc3Bhbj5cbiAgICA8c3BhblxuICAgICAgICA+Jm5ic3A7e3tcbiAgICAgICAgICAgIHBhZ2luYXRvci5yZXNvdXJjZVN0cmluZ3MuaWd4X3BhZ2luYXRvcl9wYWdlcl90ZXh0XG4gICAgICAgIH19Jm5ic3A7PC9zcGFuXG4gICAgPlxuICAgIDxzcGFuPnt7IHBhZ2luYXRvci50b3RhbFBhZ2VzIHx8IDEgfX08L3NwYW4+XG48L2Rpdj5cbjxidXR0b25cbiAgICBbdGl0bGVdPVwicGFnaW5hdG9yLnJlc291cmNlU3RyaW5ncy5pZ3hfcGFnaW5hdG9yX25leHRfcGFnZV9idXR0b25fdGV4dFwiXG4gICAgW2Rpc2FibGVkXT1cInBhZ2luYXRvci5pc0xhc3RQYWdlRGlzYWJsZWRcIlxuICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwicGFnaW5hdG9yLmlzTGFzdFBhZ2VEaXNhYmxlZFwiXG4gICAgKGNsaWNrKT1cInBhZ2luYXRvci5uZXh0UGFnZSgpXCJcbiAgICBpZ3hSaXBwbGVcbiAgICBbaWd4UmlwcGxlQ2VudGVyZWRdPVwidHJ1ZVwiXG4gICAgaWd4QnV0dG9uPVwiaWNvblwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4+XG4gICAgPGlneC1pY29uPmNoZXZyb25fcmlnaHQ8L2lneC1pY29uPlxuPC9idXR0b24+XG48YnV0dG9uXG4gICAgW3RpdGxlXT1cInBhZ2luYXRvci5yZXNvdXJjZVN0cmluZ3MuaWd4X3BhZ2luYXRvcl9sYXN0X3BhZ2VfYnV0dG9uX3RleHRcIlxuICAgIFtkaXNhYmxlZF09XCJwYWdpbmF0b3IuaXNMYXN0UGFnZURpc2FibGVkXCJcbiAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cInBhZ2luYXRvci5pc0xhc3RQYWdlRGlzYWJsZWRcIlxuICAgIChjbGljayk9XCJwYWdpbmF0b3IucGFnaW5hdGUocGFnaW5hdG9yLnRvdGFsUGFnZXMgLSAxKVwiXG4gICAgaWd4QnV0dG9uPVwiaWNvblwiXG4gICAgaWd4UmlwcGxlXG4gICAgW2lneFJpcHBsZUNlbnRlcmVkXT1cInRydWVcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuPlxuICAgIDxpZ3gtaWNvbj5sYXN0X3BhZ2U8L2lneC1pY29uPlxuPC9idXR0b24+XG5cbiJdfQ==
|
|
400
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9wYWdpbmF0b3IvcGFnaW5hdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9wYWdpbmF0b3IvcGFnaW5hdG9yLmNvbXBvbmVudC5odG1sIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL3BhZ2luYXRvci9wYWdlLXNpemUtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvcGFnaW5hdG9yL3BhZ2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoTCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRSxPQUFPLEVBQTBCLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSWxILE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZ0JBQWdCLEVB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Q29udGVudENoaWxkLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdCwgSG9zdEJpbmRpbmcsIEluamVjdCwgSW5wdXQsIE9wdGlvbmFsLCBPdXRwdXQsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi9jb3JlL2kxOG4vcmVzb3VyY2VzJztcbmltcG9ydCB7IElEaXNwbGF5RGVuc2l0eU9wdGlvbnMsIERpc3BsYXlEZW5zaXR5VG9rZW4sIERpc3BsYXlEZW5zaXR5QmFzZSwgRGlzcGxheURlbnNpdHkgfSBmcm9tICcuLi9jb3JlL2RlbnNpdHknO1xuaW1wb3J0IHsgSVBhZ2VDYW5jZWxsYWJsZUV2ZW50QXJncywgSVBhZ2VFdmVudEFyZ3MgfSBmcm9tICcuL3BhZ2luYXRvci1pbnRlcmZhY2VzJztcbmltcG9ydCB7IElQYWdpbmF0b3JSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi9jb3JlL2kxOG4vcGFnaW5hdG9yLXJlc291cmNlcyc7XG5pbXBvcnQgeyBPdmVybGF5U2V0dGluZ3MgfSBmcm9tICcuLi9zZXJ2aWNlcy9vdmVybGF5L3V0aWxpdGllcyc7XG5pbXBvcnQgeyBJZ3hTZWxlY3RJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VsZWN0L3NlbGVjdC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hMYWJlbERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvbGFiZWwvbGFiZWwuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSWd4U2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vc2VsZWN0L3NlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4UmlwcGxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9yaXBwbGUvcmlwcGxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hCdXR0b25EaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2J1dHRvbi9idXR0b24uZGlyZWN0aXZlJztcbmltcG9ydCB7IE5nSWYsIE5nRm9yIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4UGFnaW5hdG9yQ29udGVudF0saWd4LXBhZ2luYXRvci1jb250ZW50JyxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIElneFBhZ2luYXRvckNvbnRlbnREaXJlY3RpdmUge1xuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1wYWdpbmF0b3ItY29udGVudCcpXG4gICAgcHVibGljIGNzc0NsYXNzID0gJ2lneC1wYWdpbmF0b3ItY29udGVudCc7XG59XG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1wYWdpbmF0b3InLFxuICAgIHRlbXBsYXRlVXJsOiAncGFnaW5hdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ0lmLCBmb3J3YXJkUmVmKCgpID0+IElneFBhZ2VTaXplU2VsZWN0b3JDb21wb25lbnQpLCBmb3J3YXJkUmVmKCgpID0+IElneFBhZ2VOYXZpZ2F0aW9uQ29tcG9uZW50KV1cbn0pXG5leHBvcnQgY2xhc3MgSWd4UGFnaW5hdG9yQ29tcG9uZW50IGV4dGVuZHMgRGlzcGxheURlbnNpdHlCYXNlIHtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneFBhZ2luYXRvckNvbnRlbnREaXJlY3RpdmUpXG4gICAgcHVibGljIGN1c3RvbUNvbnRlbnQ6IElneFBhZ2luYXRvckNvbnRlbnREaXJlY3RpdmU7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gYHBlclBhZ2VgIHByb3BlcnR5IHZhbHVlIG9mIHRoZSBwYWdpbmF0b3IgaXMgY2hhbmdlZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGFnaW5hdG9yIChwZXJQYWdlQ2hhbmdlKT1cIm9uUGVyUGFnZUNoYW5nZSgkZXZlbnQpXCI+PC9pZ3gtcGFnaW5hdG9yPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBwdWJsaWMgb25QZXJQYWdlQ2hhbmdlKHBlclBhZ2U6IG51bWJlcikge1xuICAgICAqICAgdGhpcy5wZXJQYWdlID0gcGVyUGFnZTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHBlclBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgYWZ0ZXIgdGhlIGN1cnJlbnQgcGFnZSBpcyBjaGFuZ2VkLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1wYWdpbmF0b3IgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIj48L2lneC1wYWdpbmF0b3I+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHB1YmxpYyBvblBhZ2VDaGFuZ2UocGFnZTogbnVtYmVyKSB7XG4gICAgICogICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgYmVmb3JlIHBhZ2luZyBpcyBwZXJmb3JtZWQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFJldHVybnMgYW4gb2JqZWN0IGNvbnNpc3Rpbmcgb2YgdGhlIGN1cnJlbnQgYW5kIG5leHQgcGFnZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1wYWdpbmF0b3IgKHBhZ2luZyk9XCJwYWdpbmdIYW5kbGVyKCRldmVudClcIj48L2lneC1wYWdpbmF0b3I+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHBhZ2luZyA9IG5ldyBFdmVudEVtaXR0ZXI8SVBhZ2VDYW5jZWxsYWJsZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgYWZ0ZXIgcGFnaW5nIGlzIHBlcmZvcm1lZC5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogUmV0dXJucyBhbiBvYmplY3QgY29uc2lzdGluZyBvZiB0aGUgcHJldmlvdXMgYW5kIGN1cnJlbnQgcGFnZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1wYWdpbmF0b3IgKHBhZ2luZ0RvbmUpPVwicGFnaW5nRG9uZSgkZXZlbnQpXCI+PC9pZ3gtcGFnaW5hdG9yPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBwYWdpbmdEb25lID0gbmV3IEV2ZW50RW1pdHRlcjxJUGFnZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIFRvdGFsIHBhZ2VzIGNhbGN1bGF0ZWQgZnJvbSB0b3RhbFJlY29yZHMgYW5kIHBlclBhZ2VcbiAgICAgKi9cbiAgICBwdWJsaWMgdG90YWxQYWdlczogbnVtYmVyO1xuICAgIHByb3RlY3RlZCBfcGFnZSA9IDA7XG4gICAgcHJvdGVjdGVkIF90b3RhbFJlY29yZHM6IG51bWJlcjtcbiAgICBwcm90ZWN0ZWQgX3NlbGVjdE9wdGlvbnMgPSBbNSwgMTAsIDE1LCAyNSwgNTAsIDEwMCwgNTAwXTtcbiAgICBwcm90ZWN0ZWQgX3BlclBhZ2UgPSAxNTtcblxuICAgIHByaXZhdGUgX3Jlc291cmNlU3RyaW5ncyA9IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MuUGFnaW5hdG9yUmVzU3RyaW5ncztcbiAgICBwcml2YXRlIF9vdmVybGF5U2V0dGluZ3M6IE92ZXJsYXlTZXR0aW5ncyA9IHt9O1xuICAgIHByaXZhdGUgZGVmYXVsdFNlbGVjdFZhbHVlcyA9IFs1LCAxMCwgMTUsIDI1LCA1MCwgMTAwLCA1MDBdO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY2xhc3Mgb2YgdGhlIElneFBhZ2luYXRvckNvbXBvbmVudCBiYXNlZFxuICAgICAqIG9uIHRoZSBwcm92aWRlZCBkaXNwbGF5RGVuc2l0eS5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1wYWdpbmF0b3ItLWNvc3knKVxuICAgIHB1YmxpYyBnZXQgY2xhc3NDb3N5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5RGVuc2l0eSA9PT0gRGlzcGxheURlbnNpdHkuY29zeTtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1wYWdpbmF0b3ItLWNvbXBhY3QnKVxuICAgIHB1YmxpYyBnZXQgY2xhc3NDb21wYWN0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5RGVuc2l0eSA9PT0gRGlzcGxheURlbnNpdHkuY29tcGFjdDtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1wYWdpbmF0b3InKVxuICAgIHB1YmxpYyBnZXQgY2xhc3NDb21mb3J0YWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheURlbnNpdHkgPT09IERpc3BsYXlEZW5zaXR5LmNvbWZvcnRhYmxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSwgc2V0cyBjdXJyZW50IHBhZ2Ugb2YgdGhlIGBJZ3hQYWdpbmF0b3JDb21wb25lbnRgLlxuICAgICAqIFRoZSBkZWZhdWx0IGlzIDAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBwYWdlID0gdGhpcy5wYWdpbmF0b3IucGFnZTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hQYWdpbmF0b3JDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgcGFnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhZ2U7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBwYWdlKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuX3BhZ2UgPT09IHZhbHVlIHx8IHZhbHVlIDwgMCB8fCB2YWx1ZSA+IHRoaXMudG90YWxQYWdlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNhbmNlbEV2ZW50QXJnczogSVBhZ2VDYW5jZWxsYWJsZUV2ZW50QXJncyA9IHsgY3VycmVudDogdGhpcy5fcGFnZSwgbmV4dDogdmFsdWUsIGNhbmNlbDogZmFsc2UgfTtcbiAgICAgICAgY29uc3QgZXZlbnRBcmdzOiBJUGFnZUV2ZW50QXJncyA9IHsgcHJldmlvdXM6IHRoaXMuX3BhZ2UsIGN1cnJlbnQ6IHZhbHVlIH07XG5cbiAgICAgICAgdGhpcy5wYWdpbmcuZW1pdChjYW5jZWxFdmVudEFyZ3MpO1xuICAgICAgICBpZiAoY2FuY2VsRXZlbnRBcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3BhZ2UgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQodGhpcy5fcGFnZSk7XG5cbiAgICAgICAgdGhpcy5wYWdpbmdEb25lLmVtaXQoZXZlbnRBcmdzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHksIHNldHMgbnVtYmVyIG9mIHZpc2libGUgaXRlbXMgcGVyIHBhZ2UgaW4gdGhlIGBJZ3hQYWdpbmF0b3JDb21wb25lbnRgLlxuICAgICAqIFRoZSBkZWZhdWx0IGlzIDE1LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaXRlbXNQZXJQYWdlID0gdGhpcy5wYWdpbmF0b3IucGVyUGFnZTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hQYWdpbmF0b3JDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgcGVyUGFnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BlclBhZ2U7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBwZXJQYWdlKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHZhbHVlIDwgMCB8fCB0aGlzLnBlclBhZ2UgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcGVyUGFnZSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgIHRoaXMucGVyUGFnZUNoYW5nZS5lbWl0KHRoaXMuX3BlclBhZ2UpO1xuICAgICAgICB0aGlzLl9zZWxlY3RPcHRpb25zID0gdGhpcy5zb3J0VW5pcXVlT3B0aW9ucyh0aGlzLmRlZmF1bHRTZWxlY3RWYWx1ZXMsIHRoaXMuX3BlclBhZ2UpO1xuICAgICAgICB0aGlzLnRvdGFsUGFnZXMgPSBNYXRoLmNlaWwodGhpcy50b3RhbFJlY29yZHMgLyB0aGlzLl9wZXJQYWdlKTtcbiAgICAgICAgaWYgKHRoaXMudG90YWxQYWdlcyAhPT0gMCAmJiB0aGlzLnBhZ2UgPj0gdGhpcy50b3RhbFBhZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2UgPSB0aGlzLnRvdGFsUGFnZXMgLSAxO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgc2V0cyB0aGUgdG90YWwgcmVjb3Jkcy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHRvdGFsUmVjb3JkcyA9IHRoaXMucGFnaW5hdG9yLnRvdGFsUmVjb3JkcztcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hQYWdpbmF0b3JDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgdG90YWxSZWNvcmRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdG90YWxSZWNvcmRzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgdG90YWxSZWNvcmRzKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fdG90YWxSZWNvcmRzID0gdmFsdWU7XG4gICAgICAgIHRoaXMudG90YWxQYWdlcyA9IE1hdGguY2VpbCh0aGlzLnRvdGFsUmVjb3JkcyAvIHRoaXMucGVyUGFnZSk7XG4gICAgICAgIGlmICh0aGlzLnBhZ2UgPiB0aGlzLnRvdGFsUGFnZXMpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHNldHMgY3VzdG9tIG9wdGlvbnMgaW4gdGhlIHNlbGVjdCBvZiB0aGUgcGFnaW5hdG9yXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBvcHRpb25zID0gdGhpcy5wYWdpbmF0b3Iuc2VsZWN0T3B0aW9ucztcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hQYWdpbmF0b3JDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgc2VsZWN0T3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdE9wdGlvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBzZWxlY3RPcHRpb25zKHZhbHVlOiBBcnJheTxudW1iZXI+KSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdE9wdGlvbnMgPSB0aGlzLnNvcnRVbmlxdWVPcHRpb25zKHZhbHVlLCB0aGlzLl9wZXJQYWdlKTtcbiAgICAgICAgdGhpcy5kZWZhdWx0U2VsZWN0VmFsdWVzID0gWy4uLnZhbHVlXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBzZXRzIGN1c3RvbSBPdmVybGF5U2V0dGluZ3MuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGFnaW5hdG9yIFtvdmVybGF5U2V0dGluZ3NdID0gXCJjdXN0b21PdmVybGF5U2V0dGluZ3NcIj48L2lneC1wYWdpbmF0b3I+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IG92ZXJsYXlTZXR0aW5ncygpOiBPdmVybGF5U2V0dGluZ3Mge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3ZlcmxheVNldHRpbmdzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgb3ZlcmxheVNldHRpbmdzKHZhbHVlOiBPdmVybGF5U2V0dGluZ3MpIHtcbiAgICAgICAgdGhpcy5fb3ZlcmxheVNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fb3ZlcmxheVNldHRpbmdzLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gYWNjZXNzb3IgdGhhdCBzZXRzIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqIEJ5IGRlZmF1bHQgaXQgdXNlcyBFTiByZXNvdXJjZXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHJlc291cmNlU3RyaW5ncyh2YWx1ZTogSVBhZ2luYXRvclJlc291cmNlU3RyaW5ncykge1xuICAgICAgICB0aGlzLl9yZXNvdXJjZVN0cmluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9yZXNvdXJjZVN0cmluZ3MsIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBhY2Nlc3NvciB0aGF0IHJldHVybnMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICovXG4gICAgcHVibGljIGdldCByZXNvdXJjZVN0cmluZ3MoKTogSVBhZ2luYXRvclJlc291cmNlU3RyaW5ncyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVN0cmluZ3M7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChEaXNwbGF5RGVuc2l0eVRva2VuKSBwcm90ZWN0ZWQgX2Rpc3BsYXlEZW5zaXR5T3B0aW9uczogSURpc3BsYXlEZW5zaXR5T3B0aW9ucyxcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICAgICAgc3VwZXIoX2Rpc3BsYXlEZW5zaXR5T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpZiB0aGUgY3VycmVudCBwYWdlIGlzIHRoZSBsYXN0IHBhZ2UuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IGxhc3RQYWdlID0gdGhpcy5wYWdpbmF0b3IuaXNMYXN0UGFnZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGlzTGFzdFBhZ2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2UgKyAxID49IHRoaXMudG90YWxQYWdlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGlmIHRoZSBjdXJyZW50IHBhZ2UgaXMgdGhlIGZpcnN0IHBhZ2UuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IGxhc3RQYWdlID0gdGhpcy5wYWdpbmF0b3IuaXNGaXJzdFBhZ2U7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBpc0ZpcnN0UGFnZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnZSA9PT0gMDtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgaWYgdGhlIGZpcnN0IHBhZ2VyIGJ1dHRvbnMgc2hvdWxkIGJlIGRpc2FibGVkXG4gICAgICovXG4gICAgcHVibGljIGdldCBpc0ZpcnN0UGFnZURpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0ZpcnN0UGFnZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGlmIHRoZSBsYXN0IHBhZ2VyIGJ1dHRvbnMgc2hvdWxkIGJlIGRpc2FibGVkXG4gICAgICovXG4gICAgcHVibGljIGdldCBpc0xhc3RQYWdlRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTGFzdFBhZ2U7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBuYXRpdmVFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBEaXNwbGF5RGVuc2l0eSBmb3IgdGhlIDxzZWxlY3Q+IGluc2lkZSB0aGUgcGFnaW5hdG9yXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBwYWdpbmF0b3JTZWxlY3REaXNwbGF5RGVuc2l0eSgpOiBEaXNwbGF5RGVuc2l0eSB7XG4gICAgICAgIHJldHVybiBEaXNwbGF5RGVuc2l0eS5jb21wYWN0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHb2VzIHRvIHRoZSBuZXh0IHBhZ2Ugb2YgdGhlIGBJZ3hQYWdpbmF0b3JDb21wb25lbnRgLCBpZiB0aGUgcGFnaW5hdG9yIGlzIG5vdCBhbHJlYWR5IGF0IHRoZSBsYXN0IHBhZ2UuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMucGFnaW5hdG9yLm5leHRQYWdlKCk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4UGFnaW5hdG9yQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIG5leHRQYWdlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNMYXN0UGFnZSkge1xuICAgICAgICAgICAgdGhpcy5wYWdlICs9IDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogR29lcyB0byB0aGUgcHJldmlvdXMgcGFnZSBvZiB0aGUgYElneFBhZ2luYXRvckNvbXBvbmVudGAsIGlmIHRoZSBwYWdpbmF0b3IgaXMgbm90IGFscmVhZHkgYXQgdGhlIGZpcnN0IHBhZ2UuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMucGFnaW5hdG9yLnByZXZpb3VzUGFnZSgpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneFBhZ2luYXRvckNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBwcmV2aW91c1BhZ2UoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc0ZpcnN0UGFnZSkge1xuICAgICAgICAgICAgdGhpcy5wYWdlIC09IDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogR29lcyB0byB0aGUgZGVzaXJlZCBwYWdlIGluZGV4LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLnBhZ2luYXRvci5wYWdpbmF0ZSgxKTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWxcbiAgICAgKiBAbWVtYmVyb2YgSWd4UGFnaW5hdG9yQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHBhZ2luYXRlKHZhbDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh2YWwgPCAwIHx8IHZhbCA+IHRoaXMudG90YWxQYWdlcyAtIDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhZ2UgPSB2YWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzb3J0VW5pcXVlT3B0aW9ucyh2YWx1ZXM6IEFycmF5PG51bWJlcj4sIG5ld09wdGlvbjogbnVtYmVyKTogbnVtYmVyW10ge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KFsuLi52YWx1ZXMsIG5ld09wdGlvbl0pKS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgfVxufVxuXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaWd4LXBhZ2Utc2l6ZScsXG4gICAgdGVtcGxhdGVVcmw6ICdwYWdlLXNpemUtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0lneFNlbGVjdENvbXBvbmVudCwgRm9ybXNNb2R1bGUsIElneExhYmVsRGlyZWN0aXZlLCBOZ0ZvciwgSWd4U2VsZWN0SXRlbUNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4UGFnZVNpemVTZWxlY3RvckNvbXBvbmVudCB7XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LXBhZ2Utc2l6ZScpXG4gICAgcHVibGljIGNzc0NsYXNzID0gJ2lneC1wYWdlLXNpemUnO1xuXG4gICAgY29uc3RydWN0b3IoQEhvc3QoKSBwdWJsaWMgcGFnaW5hdG9yOiBJZ3hQYWdpbmF0b3JDb21wb25lbnQpIHsgfVxufVxuXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaWd4LXBhZ2UtbmF2JyxcbiAgICB0ZW1wbGF0ZVVybDogJ3BhZ2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtJZ3hCdXR0b25EaXJlY3RpdmUsIElneFJpcHBsZURpcmVjdGl2ZSwgSWd4SWNvbkNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4UGFnZU5hdmlnYXRpb25Db21wb25lbnQge1xuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1wYWdlLW5hdicpXG4gICAgcHVibGljIGNzc0NsYXNzID0gJ2lneC1wYWdlLW5hdic7XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBzZXRzIHRoZSBgcm9sZWAgYXR0cmlidXRlIG9mIHRoZSBlbGVtZW50LlxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByb2xlID0gJ25hdmlnYXRpb24nO1xuXG4gICAgY29uc3RydWN0b3IoQEhvc3QoKSBwdWJsaWMgcGFnaW5hdG9yOiBJZ3hQYWdpbmF0b3JDb21wb25lbnQpIHsgfVxufVxuIiwiPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2lneFBhZ2luYXRvckNvbnRlbnRdLGlneC1wYWdpbmF0b3ItY29udGVudFwiPjwvbmctY29udGVudD5cblxuPGlneC1wYWdlLXNpemUgKm5nSWY9XCIhY3VzdG9tQ29udGVudFwiPjwvaWd4LXBhZ2Utc2l6ZT5cbjxpZ3gtcGFnZS1uYXYgKm5nSWY9XCIhY3VzdG9tQ29udGVudFwiPjwvaWd4LXBhZ2UtbmF2PlxuIiwiPGxhYmVsIGNsYXNzPVwiaWd4LXBhZ2Utc2l6ZV9fbGFiZWxcIj57eyBwYWdpbmF0b3IucmVzb3VyY2VTdHJpbmdzLmlneF9wYWdpbmF0b3JfbGFiZWwgfX08L2xhYmVsPlxuPGRpdiBjbGFzcz1cImlneC1wYWdlLXNpemVfX3NlbGVjdFwiPlxuICAgIDxpZ3gtc2VsZWN0IFtvdmVybGF5U2V0dGluZ3NdPVwicGFnaW5hdG9yLm92ZXJsYXlTZXR0aW5nc1wiIFsobmdNb2RlbCldPVwicGFnaW5hdG9yLnBlclBhZ2VcIlxuICAgICAgICBbZGlzcGxheURlbnNpdHldPVwicGFnaW5hdG9yLnBhZ2luYXRvclNlbGVjdERpc3BsYXlEZW5zaXR5XCIgdHlwZT1cImJvcmRlclwiPlxuICAgICAgICA8aWd4LXNlbGVjdC1pdGVtIFt2YWx1ZV09XCJ2YWxcIiAqbmdGb3I9XCJsZXQgdmFsIG9mIHBhZ2luYXRvci5zZWxlY3RPcHRpb25zXCI+XG4gICAgICAgICAgICB7eyB2YWwgfX1cbiAgICAgICAgPC9pZ3gtc2VsZWN0LWl0ZW0+XG4gICAgPC9pZ3gtc2VsZWN0PlxuPC9kaXY+XG4iLCI8YnV0dG9uXG4gICAgW3RpdGxlXT1cInBhZ2luYXRvci5yZXNvdXJjZVN0cmluZ3MuaWd4X3BhZ2luYXRvcl9maXJzdF9wYWdlX2J1dHRvbl90ZXh0XCJcbiAgICBbZGlzYWJsZWRdPVwicGFnaW5hdG9yLmlzRmlyc3RQYWdlRGlzYWJsZWRcIlxuICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwicGFnaW5hdG9yLmlzRmlyc3RQYWdlRGlzYWJsZWRcIlxuICAgIChjbGljayk9XCJwYWdpbmF0b3IucGFnaW5hdGUoMClcIlxuICAgIGlneEJ1dHRvbj1cImljb25cIlxuICAgIGlneFJpcHBsZVxuICAgIFtpZ3hSaXBwbGVDZW50ZXJlZF09XCJ0cnVlXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbj5cbiAgICA8aWd4LWljb24+Zmlyc3RfcGFnZTwvaWd4LWljb24+XG48L2J1dHRvbj5cbjxidXR0b25cbiAgICBbdGl0bGVdPVwicGFnaW5hdG9yLnJlc291cmNlU3RyaW5ncy5pZ3hfcGFnaW5hdG9yX3ByZXZpb3VzX3BhZ2VfYnV0dG9uX3RleHRcIlxuICAgIFtkaXNhYmxlZF09XCJwYWdpbmF0b3IuaXNGaXJzdFBhZ2VEaXNhYmxlZFwiXG4gICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJwYWdpbmF0b3IuaXNGaXJzdFBhZ2VEaXNhYmxlZFwiXG4gICAgKGNsaWNrKT1cInBhZ2luYXRvci5wcmV2aW91c1BhZ2UoKVwiXG4gICAgaWd4QnV0dG9uPVwiaWNvblwiXG4gICAgaWd4UmlwcGxlXG4gICAgW2lneFJpcHBsZUNlbnRlcmVkXT1cInRydWVcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuPlxuICAgIDxpZ3gtaWNvbj5jaGV2cm9uX2xlZnQ8L2lneC1pY29uPlxuPC9idXR0b24+XG48ZGl2IGNsYXNzPVwiaWd4LXBhZ2UtbmF2X190ZXh0XCIgYXJpYS1jdXJyZW50PVwicGFnZVwiPlxuICAgIDxzcGFuPnt7IHBhZ2luYXRvci5wYWdlICsgMSB9fTwvc3Bhbj5cbiAgICA8c3BhblxuICAgICAgICA+Jm5ic3A7e3tcbiAgICAgICAgICAgIHBhZ2luYXRvci5yZXNvdXJjZVN0cmluZ3MuaWd4X3BhZ2luYXRvcl9wYWdlcl90ZXh0XG4gICAgICAgIH19Jm5ic3A7PC9zcGFuXG4gICAgPlxuICAgIDxzcGFuPnt7IHBhZ2luYXRvci50b3RhbFBhZ2VzIHx8IDEgfX08L3NwYW4+XG48L2Rpdj5cbjxidXR0b25cbiAgICBbdGl0bGVdPVwicGFnaW5hdG9yLnJlc291cmNlU3RyaW5ncy5pZ3hfcGFnaW5hdG9yX25leHRfcGFnZV9idXR0b25fdGV4dFwiXG4gICAgW2Rpc2FibGVkXT1cInBhZ2luYXRvci5pc0xhc3RQYWdlRGlzYWJsZWRcIlxuICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwicGFnaW5hdG9yLmlzTGFzdFBhZ2VEaXNhYmxlZFwiXG4gICAgKGNsaWNrKT1cInBhZ2luYXRvci5uZXh0UGFnZSgpXCJcbiAgICBpZ3hSaXBwbGVcbiAgICBbaWd4UmlwcGxlQ2VudGVyZWRdPVwidHJ1ZVwiXG4gICAgaWd4QnV0dG9uPVwiaWNvblwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4+XG4gICAgPGlneC1pY29uPmNoZXZyb25fcmlnaHQ8L2lneC1pY29uPlxuPC9idXR0b24+XG48YnV0dG9uXG4gICAgW3RpdGxlXT1cInBhZ2luYXRvci5yZXNvdXJjZVN0cmluZ3MuaWd4X3BhZ2luYXRvcl9sYXN0X3BhZ2VfYnV0dG9uX3RleHRcIlxuICAgIFtkaXNhYmxlZF09XCJwYWdpbmF0b3IuaXNMYXN0UGFnZURpc2FibGVkXCJcbiAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cInBhZ2luYXRvci5pc0xhc3RQYWdlRGlzYWJsZWRcIlxuICAgIChjbGljayk9XCJwYWdpbmF0b3IucGFnaW5hdGUocGFnaW5hdG9yLnRvdGFsUGFnZXMgLSAxKVwiXG4gICAgaWd4QnV0dG9uPVwiaWNvblwiXG4gICAgaWd4UmlwcGxlXG4gICAgW2lneFJpcHBsZUNlbnRlcmVkXT1cInRydWVcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuPlxuICAgIDxpZ3gtaWNvbj5sYXN0X3BhZ2U8L2lneC1pY29uPlxuPC9idXR0b24+XG5cbiJdfQ==
|
|
@@ -8,11 +8,11 @@ import * as i2 from "./paginator-interfaces";
|
|
|
8
8
|
* IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components
|
|
9
9
|
*/
|
|
10
10
|
export class IgxPaginatorModule {
|
|
11
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0
|
|
12
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.0
|
|
13
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.0
|
|
11
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxPaginatorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
12
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.0", ngImport: i0, type: IgxPaginatorModule, imports: [i1.IgxPaginatorComponent, i1.IgxPageNavigationComponent, i1.IgxPageSizeSelectorComponent, i1.IgxPaginatorContentDirective, i2.IgxPaginatorDirective], exports: [i1.IgxPaginatorComponent, i1.IgxPageNavigationComponent, i1.IgxPageSizeSelectorComponent, i1.IgxPaginatorContentDirective, i2.IgxPaginatorDirective] }); }
|
|
13
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxPaginatorModule, imports: [i1.IgxPaginatorComponent, i1.IgxPageSizeSelectorComponent] }); }
|
|
14
14
|
}
|
|
15
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0
|
|
15
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxPaginatorModule, decorators: [{
|
|
16
16
|
type: NgModule,
|
|
17
17
|
args: [{
|
|
18
18
|
imports: [
|
|
@@ -23,4 +23,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-rc.4", ng
|
|
|
23
23
|
]
|
|
24
24
|
}]
|
|
25
25
|
}] });
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdG9yLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9wYWdpbmF0b3IvcGFnaW5hdG9yLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7OztBQUV4RDs7O0dBR0c7QUFTSCxNQUFNLE9BQU8sa0JBQWtCOzhHQUFsQixrQkFBa0I7K0dBQWxCLGtCQUFrQjsrR0FBbEIsa0JBQWtCOzsyRkFBbEIsa0JBQWtCO2tCQVI5QixRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRTt3QkFDTCxHQUFHLHdCQUF3QjtxQkFDOUI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNMLEdBQUcsd0JBQXdCO3FCQUM5QjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJR1hfUEFHSU5BVE9SX0RJUkVDVElWRVMgfSBmcm9tICcuL3B1YmxpY19hcGknO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqIElNUE9SVEFOVDogVGhlIGZvbGxvd2luZyBpcyBOZ01vZHVsZSBleHBvcnRlZCBmb3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgYmVmb3JlIHN0YW5kYWxvbmUgY29tcG9uZW50c1xuICovXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtcbiAgICAgICAgLi4uSUdYX1BBR0lOQVRPUl9ESVJFQ1RJVkVTXG4gICAgXSxcbiAgICBleHBvcnRzOiBbXG4gICAgICAgIC4uLklHWF9QQUdJTkFUT1JfRElSRUNUSVZFU1xuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4UGFnaW5hdG9yTW9kdWxlIHsgfVxuIl19
|
|
@@ -4,10 +4,10 @@ export class IgxProgressBarTextTemplateDirective {
|
|
|
4
4
|
constructor(template) {
|
|
5
5
|
this.template = template;
|
|
6
6
|
}
|
|
7
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0
|
|
8
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0
|
|
7
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxProgressBarTextTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
8
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: IgxProgressBarTextTemplateDirective, isStandalone: true, selector: "[igxProgressBarText]", ngImport: i0 }); }
|
|
9
9
|
}
|
|
10
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxProgressBarTextTemplateDirective, decorators: [{
|
|
11
11
|
type: Directive,
|
|
12
12
|
args: [{
|
|
13
13
|
selector: '[igxProgressBarText]',
|
|
@@ -18,14 +18,14 @@ export class IgxProgressBarGradientDirective {
|
|
|
18
18
|
constructor(template) {
|
|
19
19
|
this.template = template;
|
|
20
20
|
}
|
|
21
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0
|
|
22
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0
|
|
21
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxProgressBarGradientDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
22
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: IgxProgressBarGradientDirective, isStandalone: true, selector: "[igxProgressBarGradient]", ngImport: i0 }); }
|
|
23
23
|
}
|
|
24
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0
|
|
24
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxProgressBarGradientDirective, decorators: [{
|
|
25
25
|
type: Directive,
|
|
26
26
|
args: [{
|
|
27
27
|
selector: '[igxProgressBarGradient]',
|
|
28
28
|
standalone: true
|
|
29
29
|
}]
|
|
30
30
|
}], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3NiYXIuY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL3Byb2dyZXNzYmFyL3Byb2dyZXNzYmFyLmNvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFlLE1BQU0sZUFBZSxDQUFDOztBQU12RCxNQUFNLE9BQU8sbUNBQW1DO0lBQzVDLFlBQW1CLFFBQTBCO1FBQTFCLGFBQVEsR0FBUixRQUFRLENBQWtCO0lBQUksQ0FBQzs4R0FEekMsbUNBQW1DO2tHQUFuQyxtQ0FBbUM7OzJGQUFuQyxtQ0FBbUM7a0JBSi9DLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsVUFBVSxFQUFFLElBQUk7aUJBQ25COztBQVNELE1BQU0sT0FBTywrQkFBK0I7SUFDeEMsWUFBbUIsUUFBMEI7UUFBMUIsYUFBUSxHQUFSLFFBQVEsQ0FBa0I7SUFBSSxDQUFDOzhHQUR6QywrQkFBK0I7a0dBQS9CLCtCQUErQjs7MkZBQS9CLCtCQUErQjtrQkFKM0MsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsMEJBQTBCO29CQUNwQyxVQUFVLEVBQUUsSUFBSTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2lneFByb2dyZXNzQmFyVGV4dF0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSWd4UHJvZ3Jlc3NCYXJUZXh0VGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PikgeyB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2lneFByb2dyZXNzQmFyR3JhZGllbnRdJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIElneFByb2dyZXNzQmFyR3JhZGllbnREaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PikgeyB9XG59XG5cbiJdfQ==
|
|
@@ -256,10 +256,10 @@ export class BaseProgressDirective {
|
|
|
256
256
|
// this.valueInPercent = toPercent(val, this._max);
|
|
257
257
|
this.runAnimation(val);
|
|
258
258
|
}
|
|
259
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0
|
|
260
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0
|
|
259
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: BaseProgressDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
260
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: BaseProgressDirective, inputs: { indeterminate: "indeterminate", animationDuration: "animationDuration", step: "step", animate: "animate", max: "max", value: "value" }, outputs: { progressChanged: "progressChanged" }, host: { properties: { "attr.aria-valuemax": "this.max", "attr.aria-valuenow": "this.value" } }, ngImport: i0 }); }
|
|
261
261
|
}
|
|
262
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0
|
|
262
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: BaseProgressDirective, decorators: [{
|
|
263
263
|
type: Directive
|
|
264
264
|
}], ctorParameters: function () { return []; }, propDecorators: { progressChanged: [{
|
|
265
265
|
type: Output
|
|
@@ -405,10 +405,10 @@ export class IgxLinearProgressBarComponent extends BaseProgressDirective {
|
|
|
405
405
|
duration: this.animationDuration
|
|
406
406
|
});
|
|
407
407
|
}
|
|
408
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0
|
|
409
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0
|
|
408
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxLinearProgressBarComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
409
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: IgxLinearProgressBarComponent, isStandalone: true, selector: "igx-linear-bar", inputs: { striped: "striped", role: "role", id: "id", textAlign: "textAlign", textVisibility: "textVisibility", textTop: "textTop", text: "text", type: "type" }, host: { properties: { "attr.aria-valuemin": "this.valueMin", "class.igx-linear-bar": "this.cssClass", "class.igx-linear-bar--striped": "this.striped", "class.igx-linear-bar--indeterminate": "this.isIndeterminate", "attr.role": "this.role", "attr.id": "this.id", "class.igx-linear-bar--danger": "this.error", "class.igx-linear-bar--info": "this.info", "class.igx-linear-bar--warning": "this.warning", "class.igx-linear-bar--success": "this.success" } }, viewQueries: [{ propertyName: "_progressIndicator", first: true, predicate: ["indicator"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"igx-linear-bar__base\">\n <div #indicator class=\"igx-linear-bar__indicator\" [style.width]=\"0\"></div>\n <div class=\"igx-linear-bar__indicator-secondary\"></div>\n</div>\n\n<span\n class=\"igx-linear-bar__value\"\n [ngClass]=\"{\n 'igx-linear-bar__value--start': textAlign === 'start',\n 'igx-linear-bar__value--center': textAlign === 'center',\n 'igx-linear-bar__value--end': textAlign === 'end',\n 'igx-linear-bar__value--top': textTop,\n 'igx-linear-bar__value--hidden': !textVisibility\n }\">\n {{text ? text : valueInPercent + '%'}}\n</span>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
|
|
410
410
|
}
|
|
411
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0
|
|
411
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxLinearProgressBarComponent, decorators: [{
|
|
412
412
|
type: Component,
|
|
413
413
|
args: [{ selector: 'igx-linear-bar', standalone: true, imports: [NgClass], template: "<div class=\"igx-linear-bar__base\">\n <div #indicator class=\"igx-linear-bar__indicator\" [style.width]=\"0\"></div>\n <div class=\"igx-linear-bar__indicator-secondary\"></div>\n</div>\n\n<span\n class=\"igx-linear-bar__value\"\n [ngClass]=\"{\n 'igx-linear-bar__value--start': textAlign === 'start',\n 'igx-linear-bar__value--center': textAlign === 'center',\n 'igx-linear-bar__value--end': textAlign === 'end',\n 'igx-linear-bar__value--top': textTop,\n 'igx-linear-bar__value--hidden': !textVisibility\n }\">\n {{text ? text : valueInPercent + '%'}}\n</span>\n" }]
|
|
414
414
|
}], propDecorators: { valueMin: [{
|
|
@@ -545,10 +545,10 @@ export class IgxCircularProgressBarComponent extends BaseProgressDirective {
|
|
|
545
545
|
this._circumference + (percentage * this._circumference / 100) :
|
|
546
546
|
this._circumference - (percentage * this._circumference / 100);
|
|
547
547
|
}
|
|
548
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0
|
|
549
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0
|
|
548
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxCircularProgressBarComponent, deps: [{ token: i0.Renderer2 }, { token: i1.IgxDirectionality }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
549
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: IgxCircularProgressBarComponent, isStandalone: true, selector: "igx-circular-bar", inputs: { id: "id", isIndeterminate: "isIndeterminate", textVisibility: "textVisibility", text: "text" }, host: { properties: { "class.igx-circular-bar": "this.cssClass", "attr.id": "this.id", "class.igx-circular-bar--indeterminate": "this.isIndeterminate" } }, queries: [{ propertyName: "textTemplate", first: true, predicate: IgxProgressBarTextTemplateDirective, descendants: true, read: IgxProgressBarTextTemplateDirective }, { propertyName: "gradientTemplate", first: true, predicate: IgxProgressBarGradientDirective, descendants: true, read: IgxProgressBarGradientDirective }], viewQueries: [{ propertyName: "_svgCircle", first: true, predicate: ["circle"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<svg #svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" version=\"1.1\"\n viewBox=\"0 0 100 100\"\n preserveAspectRatio=\"xMidYMid meet\"\n role=\"progressbar\"\n aria-valuemin=\"0\"\n [attr.aria-valuemax]=\"max\"\n [attr.aria-valuenow]=\"value\">\n <svg:circle class=\"igx-circular-bar__inner\" cx=\"50\" cy=\"50\" r=\"46\" />\n <svg:circle #circle class=\"igx-circular-bar__outer\" cx=\"50\" cy=\"50\" r=\"46\" />\n\n <svg:defs>\n <ng-container\n *ngTemplateOutlet=\"gradientTemplate ? gradientTemplate.template : defaultGradientTemplate;\n context: { $implicit: gradientId }\">\n </ng-container>\n </svg:defs>\n\n <ng-template #defaultGradientTemplate>\n <svg:linearGradient [id]=\"gradientId\" gradientTransform=\"rotate(90)\">\n <stop offset=\"0%\" class=\"igx-circular-bar__gradient-start\" />\n <stop offset=\"100%\" class=\"igx-circular-bar__gradient-end\" />\n </svg:linearGradient>\n </ng-template>\n</svg>\n\n<span class=\"igx-circular-bar__text\" *ngIf=\"textVisibility\">\n <ng-container *ngTemplateOutlet=\"textTemplate ? textTemplate.template : defaultTextTemplate;\n context: context\">\n </ng-container>\n</span>\n\n<ng-template #defaultTextTemplate>\n {{textContent ? textContent: valueInPercent + '%'}}\n</ng-template>\n\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
|
|
550
550
|
}
|
|
551
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0
|
|
551
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxCircularProgressBarComponent, decorators: [{
|
|
552
552
|
type: Component,
|
|
553
553
|
args: [{ selector: 'igx-circular-bar', standalone: true, imports: [NgTemplateOutlet, NgIf], template: "<svg #svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" version=\"1.1\"\n viewBox=\"0 0 100 100\"\n preserveAspectRatio=\"xMidYMid meet\"\n role=\"progressbar\"\n aria-valuemin=\"0\"\n [attr.aria-valuemax]=\"max\"\n [attr.aria-valuenow]=\"value\">\n <svg:circle class=\"igx-circular-bar__inner\" cx=\"50\" cy=\"50\" r=\"46\" />\n <svg:circle #circle class=\"igx-circular-bar__outer\" cx=\"50\" cy=\"50\" r=\"46\" />\n\n <svg:defs>\n <ng-container\n *ngTemplateOutlet=\"gradientTemplate ? gradientTemplate.template : defaultGradientTemplate;\n context: { $implicit: gradientId }\">\n </ng-container>\n </svg:defs>\n\n <ng-template #defaultGradientTemplate>\n <svg:linearGradient [id]=\"gradientId\" gradientTransform=\"rotate(90)\">\n <stop offset=\"0%\" class=\"igx-circular-bar__gradient-start\" />\n <stop offset=\"100%\" class=\"igx-circular-bar__gradient-end\" />\n </svg:linearGradient>\n </ng-template>\n</svg>\n\n<span class=\"igx-circular-bar__text\" *ngIf=\"textVisibility\">\n <ng-container *ngTemplateOutlet=\"textTemplate ? textTemplate.template : defaultTextTemplate;\n context: context\">\n </ng-container>\n</span>\n\n<ng-template #defaultTextTemplate>\n {{textContent ? textContent: valueInPercent + '%'}}\n</ng-template>\n\n" }]
|
|
554
554
|
}], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i1.IgxDirectionality }]; }, propDecorators: { cssClass: [{
|
|
@@ -581,4 +581,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-rc.4", ng
|
|
|
581
581
|
export const valueInRange = (value, max, min = 0) => Math.max(Math.min(value, max), min);
|
|
582
582
|
export const toPercent = (value, max) => !max ? 0 : Math.floor(100 * value / max);
|
|
583
583
|
export const toValue = (value, max) => max * value / 100;
|
|
584
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3NiYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL3Byb2dyZXNzYmFyL3Byb2dyZXNzYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9wcm9ncmVzc2Jhci90ZW1wbGF0ZXMvbGluZWFyLWJhci5jb21wb25lbnQuaHRtbCIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9wcm9ncmVzc2Jhci90ZW1wbGF0ZXMvY2lyY3VsYXItYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEUsT0FBTyxFQUNILFNBQVMsRUFFVCxZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFDTCxNQUFNLEVBRU4sU0FBUyxFQUNULFlBQVksRUFHWixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILG1DQUFtQyxFQUNuQywrQkFBK0IsR0FDbEMsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQWtCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBRXZELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQztBQUN6QixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFFcEIsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQztJQUMvQixLQUFLLEVBQUUsT0FBTztJQUNkLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLEdBQUcsRUFBRSxLQUFLO0NBQ2IsQ0FBQyxDQUFDO0FBR0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQztJQUNsQyxLQUFLLEVBQUUs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TUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBYSxFQUFFLEdBQVcsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzLCBOZ1RlbXBsYXRlT3V0bGV0LCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBSZW5kZXJlcjIsXG4gICAgVmlld0NoaWxkLFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgRGlyZWN0aXZlXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBJZ3hQcm9ncmVzc0JhclRleHRUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBJZ3hQcm9ncmVzc0JhckdyYWRpZW50RGlyZWN0aXZlLFxufSBmcm9tICcuL3Byb2dyZXNzYmFyLmNvbW1vbic7XG5pbXBvcnQgeyBJQmFzZUV2ZW50QXJncywgbWtlbnVtIH0gZnJvbSAnLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBJZ3hEaXJlY3Rpb25hbGl0eSB9IGZyb20gJy4uL3NlcnZpY2VzL2RpcmVjdGlvbi9kaXJlY3Rpb25hbGl0eSc7XG5jb25zdCBPTkVfUEVSQ0VOVCA9IDAuMDE7XG5jb25zdCBNSU5fVkFMVUUgPSAwO1xuXG5leHBvcnQgY29uc3QgSWd4VGV4dEFsaWduID0gbWtlbnVtKHtcbiAgICBTVEFSVDogJ3N0YXJ0JyxcbiAgICBDRU5URVI6ICdjZW50ZXInLFxuICAgIEVORDogJ2VuZCdcbn0pO1xuZXhwb3J0IHR5cGUgSWd4VGV4dEFsaWduID0gKHR5cGVvZiBJZ3hUZXh0QWxpZ24pW2tleW9mIHR5cGVvZiBJZ3hUZXh0QWxpZ25dO1xuXG5leHBvcnQgY29uc3QgSWd4UHJvZ3Jlc3NUeXBlID0gbWtlbnVtKHtcbiAgICBFUlJPUjogJ2Vycm9yJyxcbiAgICBJTkZPOiAnaW5mbycsXG4gICAgV0FSTklORzogJ3dhcm5pbmcnLFxuICAgIFNVQ0NFU1M6ICdzdWNjZXNzJ1xufSk7XG5leHBvcnQgdHlwZSBJZ3hQcm9ncmVzc1R5cGUgPSAodHlwZW9mIElneFByb2dyZXNzVHlwZSlba2V5b2YgdHlwZW9mIElneFByb2dyZXNzVHlwZV07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNoYW5nZVByb2dyZXNzRXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VFdmVudEFyZ3Mge1xuICAgIHByZXZpb3VzVmFsdWU6IG51bWJlcjtcbiAgICBjdXJyZW50VmFsdWU6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VQcm9ncmVzc0RpcmVjdGl2ZSB7XG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQsIHdoaWNoIGlzIHRyaWdnZXJlZCBhZnRlciBhIHByb2dyZXNzIGlzIGNoYW5nZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHB1YmxpYyBwcm9ncmVzc0NoYW5nZShldmVudCkge1xuICAgICAqICAgICBhbGVydChcIlByb2dyZXNzIG1hZGUhXCIpO1xuICAgICAqIH1cbiAgICAgKiAgLy8uLi5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaXJjdWxhci1iYXIgW3ZhbHVlXT1cImN1cnJlbnRWYWx1ZVwiIChwcm9ncmVzc0NoYW5nZWQpPVwicHJvZ3Jlc3NDaGFuZ2UoJGV2ZW50KVwiPjwvaWd4LWNpcmN1bGFyLWJhcj5cbiAgICAgKiA8aWd4LWxpbmVhci1iYXIgW3ZhbHVlXT1cImN1cnJlbnRWYWx1ZVwiIChwcm9ncmVzc0NoYW5nZWQpPVwicHJvZ3Jlc3NDaGFuZ2UoJGV2ZW50KVwiPjwvaWd4LWxpbmVhci1iYXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHByb2dyZXNzQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUNoYW5nZVByb2dyZXNzRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9HZXRzIHByb2dyZXNzYmFyIGluIGluZGV0ZXJtaW5hdGUuIEJ5IGRlZmF1bHQgaXQgaXMgc2V0IHRvIGZhbHNlLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWxpbmVhci1iYXIgW2luZGV0ZXJtaW5hdGVdPVwidHJ1ZVwiPjwvaWd4LWxpbmVhci1iYXI+XG4gICAgICogPGlneC1jaXJjdWxhci1iYXIgW2luZGV0ZXJtaW5hdGVdPVwidHJ1ZVwiPjwvaWd4LWNpcmN1bGFyLWJhcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpbmRldGVybWluYXRlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL0dldHMgcHJvZ3Jlc3NiYXIgYW5pbWF0aW9uIGR1cmF0aW9uLiBCeSBkZWZhdWx0IGl0IGlzIDIwMDBtcy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1saW5lYXItYmFyIFtpbmRldGVybWluYXRlXT1cInRydWVcIj48L2lneC1saW5lYXItYmFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFuaW1hdGlvbkR1cmF0aW9uID0gMjAwMDtcbiAgICBwdWJsaWMgX2ludGVydmFsO1xuXG4gICAgcHJvdGVjdGVkIF9pbml0VmFsdWUgPSAwO1xuICAgIHByb3RlY3RlZCBfY29udGVudEluaXQgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgX21heCA9IDEwMDtcbiAgICBwcm90ZWN0ZWQgX3ZhbHVlID0gTUlOX1ZBTFVFO1xuICAgIHByb3RlY3RlZCBfbmV3VmFsID0gTUlOX1ZBTFVFO1xuICAgIHByb3RlY3RlZCBfYW5pbWF0ZSA9IHRydWU7XG4gICAgcHJvdGVjdGVkIF9zdGVwO1xuICAgIHByb3RlY3RlZCBfYW5pbWF0aW9uO1xuICAgIHByb3RlY3RlZCBfdmFsdWVJblBlcmNlbnQ7XG4gICAgcHJvdGVjdGVkIF9pbnRlcm5hbFN0YXRlID0ge1xuICAgICAgICBvbGRWYWw6IDAsXG4gICAgICAgIG5ld1ZhbDogMFxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgd2hpY2ggdXBkYXRlIHRoZSBwcm9ncmVzcyBpbmRpY2F0b3Igb2YgdGhlIGBwcm9ncmVzcyBiYXJgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwiTXlQcm9ncmVzc0JhclwiKVxuICAgICAqIHB1YmxpYyBwcm9ncmVzc0JhcjogSWd4TGluZWFyUHJvZ3Jlc3NCYXJDb21wb25lbnQgfCBJZ3hDaXJjdWxhckJhckNvbXBvbmVudDtcbiAgICAgKiBwdWJsaWMgc3RlcFZhbHVlKGV2ZW50KSB7XG4gICAgICogICAgIGxldCBzdGVwID0gdGhpcy5wcm9ncmVzc0Jhci5zdGVwO1xuICAgICAqICAgICBhbGVydChzdGVwKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHN0ZXAoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMuX3N0ZXApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGVwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXggKiBPTkVfUEVSQ0VOVDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB2YWx1ZSBieSB3aGljaCBwcm9ncmVzcyBpbmRpY2F0b3IgaXMgdXBkYXRlZC4gQnkgZGVmYXVsdCBpdCBpcyAxLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWxpbmVhci1iYXIgW21heF09XCIyMDBcIiBbdmFsdWVdPVwiMFwiIFtzdGVwXT1cIjFcIj48L2lneC1saW5lYXItYmFyPlxuICAgICAqIDxpZ3gtY2lyY3VsYXItYmFyIFttYXhdPVwiMjAwXCIgW3ZhbHVlXT1cIjBcIiBbc3RlcF09XCIxXCI+PC9pZ3gtY2lyY3VsYXItYmFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgc3RlcCh2YWw6IG51bWJlcikge1xuICAgICAgICBjb25zdCBzdGVwID0gTnVtYmVyKHZhbCk7XG4gICAgICAgIGlmIChzdGVwID4gdGhpcy5tYXgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3N0ZXAgPSBzdGVwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuaW1hdGluZyB0aGUgcHJvZ3Jlc3MuIEJ5IGRlZmF1bHQgaXQgaXMgc2V0IHRvIHRydWUuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtbGluZWFyLWJhciBbYW5pbWF0ZV09XCJmYWxzZVwiIFttYXhdPVwiMjAwXCIgW3ZhbHVlXT1cIjUwXCI+PC9pZ3gtbGluZWFyLWJhcj5cbiAgICAgKiA8aWd4LWNpcmN1bGFyLWJhciBbYW5pbWF0ZV09XCJmYWxzZVwiIFttYXhdPVwiMjAwXCIgW3ZhbHVlXT1cIjUwXCI+PC9pZ3gtY2lyY3VsYXItYmFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBhbmltYXRlKGFuaW1hdGU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fYW5pbWF0ZSA9IGFuaW1hdGU7XG4gICAgICAgIGlmIChhbmltYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmFuaW1hdGlvbkR1cmF0aW9uID0gMjAwMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uRHVyYXRpb24gPSAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBgcHJvZ3Jlc3MgYmFyYCBoYXMgYW5pbWF0aW9uIHRydWUvZmFsc2UuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJNeVByb2dyZXNzQmFyXCIpXG4gICAgICogcHVibGljIHByb2dyZXNzQmFyOiBJZ3hMaW5lYXJQcm9ncmVzc0JhckNvbXBvbmVudCB8IElneENpcmN1bGFyQmFyQ29tcG9uZW50O1xuICAgICAqIHB1YmxpYyBhbmltYXRpb25TdGF0dXMoZXZlbnQpIHtcbiAgICAgKiAgICAgbGV0IGFuaW1hdGlvblN0YXR1cyA9IHRoaXMucHJvZ3Jlc3NCYXIuYW5pbWF0ZTtcbiAgICAgKiAgICAgYWxlcnQoYW5pbWF0aW9uU3RhdHVzKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBhbmltYXRlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYW5pbWF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgbWF4aW11bSB2YWx1ZSB0aGF0IGNhbiBiZSBwYXNzZWQuIEJ5IGRlZmF1bHQgaXQgaXMgc2V0IHRvIDEwMC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1saW5lYXItYmFyIFttYXhdPVwiMjAwXCIgW3ZhbHVlXT1cIjBcIj48L2lneC1saW5lYXItYmFyPlxuICAgICAqIDxpZ3gtY2lyY3VsYXItYmFyIFttYXhdPVwiMjAwXCIgW3ZhbHVlXT1cIjBcIj48L2lneC1jaXJjdWxhci1iYXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtdmFsdWVtYXgnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBtYXgobWF4TnVtOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKG1heE51bSA8IE1JTl9WQUxVRSB8fCB0aGlzLl9tYXggPT09IG1heE51bSB8fFxuICAgICAgICAgICAgKHRoaXMuX2FuaW1hdGlvbiAmJiB0aGlzLl9hbmltYXRpb24ucGxheVN0YXRlICE9PSAnZmluaXNoZWQnKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faW50ZXJuYWxTdGF0ZS5uZXdWYWwgPSBNYXRoLnJvdW5kKHRvVmFsdWUodG9QZXJjZW50KHRoaXMudmFsdWUsIG1heE51bSksIG1heE51bSkpO1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX2ludGVybmFsU3RhdGUub2xkVmFsID0gTWF0aC5yb3VuZCh0b1ZhbHVlKHRoaXMudmFsdWVJblBlcmNlbnQsIG1heE51bSkpO1xuICAgICAgICB0aGlzLl9tYXggPSBtYXhOdW07XG4gICAgICAgIHRoaXMudHJpZ2dlclByb2dyZXNzVHJhbnNpdGlvbih0aGlzLl9pbnRlcm5hbFN0YXRlLm9sZFZhbCwgdGhpcy5faW50ZXJuYWxTdGF0ZS5uZXdWYWwsIHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHRoZSBtYXhpbXVtIHByb2dyZXNzIHZhbHVlIG9mIHRoZSBgcHJvZ3Jlc3MgYmFyYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15UHJvZ3Jlc3NCYXJcIilcbiAgICAgKiBwdWJsaWMgcHJvZ3Jlc3NCYXI6IElneExpbmVhclByb2dyZXNzQmFyQ29tcG9uZW50IHwgSWd4Q2lyY3VsYXJCYXJDb21wb25lbnQ7XG4gICAgICogcHVibGljIG1heFZhbHVlKGV2ZW50KSB7XG4gICAgICogICAgIGxldCBtYXggPSB0aGlzLnByb2dyZXNzQmFyLm1heDtcbiAgICAgKiAgICAgYWxlcnQobWF4KTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBtYXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYElneExpbmVhclByb2dyZXNzQmFyQ29tcG9uZW50YC9gSWd4Q2lyY3VsYXJQcm9ncmVzc0JhckNvbXBvbmVudGAgdmFsdWUgaW4gcGVyY2VudGFnZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15UHJvZ3Jlc3NCYXJcIilcbiAgICAgKiBwdWJsaWMgcHJvZ3Jlc3NCYXI6IElneExpbmVhclByb2dyZXNzQmFyQ29tcG9uZW50OyAvLyBJZ3hDaXJjdWxhclByb2dyZXNzQmFyQ29tcG9uZW50XG4gICAgICogcHVibGljIHZhbHVlUGVyY2VudChldmVudCl7XG4gICAgICogICAgIGxldCBwZXJjZW50VmFsdWUgPSB0aGlzLnByb2dyZXNzQmFyLnZhbHVlSW5QZXJjZW50O1xuICAgICAqICAgICBhbGVydChwZXJjZW50VmFsdWUpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHZhbHVlSW5QZXJjZW50KCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHRvUGVyY2VudCh0aGlzLl92YWx1ZSwgdGhpcy5fbWF4KTtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHRoZSBjdXJyZW50IGBJZ3hMaW5lYXJQcm9ncmVzc0JhckNvbXBvbmVudGAgcG9zaXRpb24uXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJNeVByb2dyZXNzQmFyXCIpXG4gICAgICogcHVibGljIHByb2dyZXNzQmFyOiBJZ3hMaW5lYXJQcm9ncmVzc0JhckNvbXBvbmVudDtcbiAgICAgKiBwdWJsaWMgZ2V0VmFsdWUoZXZlbnQpIHtcbiAgICAgKiAgICAgbGV0IHZhbHVlID0gdGhpcy5wcm9ncmVzc0Jhci52YWx1ZTtcbiAgICAgKiAgICAgYWxlcnQodmFsdWUpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS12YWx1ZW5vdycpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgdGhlIGN1cnJlbnQgYElneExpbmVhclByb2dyZXNzQmFyQ29tcG9uZW50YCBwb3NpdGlvbi5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1saW5lYXItYmFyIFtzdHJpcGVkXT1cImZhbHNlXCIgW21heF09XCIyMDBcIiBbdmFsdWVdPVwiNTBcIj48L2lneC1saW5lYXItYmFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgdmFsdWUodmFsKSB7XG4gICAgICAgIGlmICh0aGlzLl9hbmltYXRpb24gJiYgdGhpcy5fYW5pbWF0aW9uLnBsYXlTdGF0ZSAhPT0gJ2ZpbmlzaGVkJyB8fCB2YWwgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWxJblJhbmdlID0gdmFsdWVJblJhbmdlKHZhbCwgdGhpcy5tYXgpO1xuXG4gICAgICAgIGlmIChpc05hTih2YWxJblJhbmdlKSB8fCB0aGlzLl92YWx1ZSA9PT0gdmFsIHx8IHRoaXMuaW5kZXRlcm1pbmF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbnRlbnRJbml0KSB7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJQcm9ncmVzc1RyYW5zaXRpb24odGhpcy5fdmFsdWUsIHZhbEluUmFuZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faW5pdFZhbHVlID0gdmFsSW5SYW5nZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCB0cmlnZ2VyUHJvZ3Jlc3NUcmFuc2l0aW9uKG9sZFZhbCwgbmV3VmFsLCBtYXhVcGRhdGUgPSBmYWxzZSkge1xuICAgICAgICBpZiAob2xkVmFsID09PSBuZXdWYWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNoYW5nZWRWYWx1ZXMgPSB7XG4gICAgICAgICAgICBjdXJyZW50VmFsdWU6IG5ld1ZhbCxcbiAgICAgICAgICAgIHByZXZpb3VzVmFsdWU6IG9sZFZhbFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHN0ZXBEaXJlY3Rpb24gPSB0aGlzLmRpcmVjdGlvbkZsb3cob2xkVmFsLCBuZXdWYWwpO1xuICAgICAgICBpZiAodGhpcy5fYW5pbWF0ZSkge1xuICAgICAgICAgICAgY29uc3QgbmV3VG9QZXJjZW50ID0gdG9QZXJjZW50KG5ld1ZhbCwgdGhpcy5tYXgpO1xuICAgICAgICAgICAgY29uc3Qgb2xkVG9QZXJjZW50ID0gdG9QZXJjZW50KG9sZFZhbCwgdGhpcy5tYXgpO1xuICAgICAgICAgICAgY29uc3QgZHVyYXRpb24gPSB0aGlzLmFuaW1hdGlvbkR1cmF0aW9uIC8gTWF0aC5hYnMobmV3VG9QZXJjZW50IC0gb2xkVG9QZXJjZW50KSAvICh0aGlzLl9zdGVwID8gdGhpcy5fc3RlcCA6IDEpO1xuICAgICAgICAgICAgdGhpcy5ydW5BbmltYXRpb24obmV3VmFsKTtcbiAgICAgICAgICAgIHRoaXMuX2ludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4gdGhpcy5pbmNyZWFzZShuZXdWYWwsIHN0ZXBEaXJlY3Rpb24pLCBkdXJhdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVByb2dyZXNzKG5ld1ZhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWF4VXBkYXRlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9ncmVzc0NoYW5nZWQuZW1pdChjaGFuZ2VkVmFsdWVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGluY3JlYXNlKG5ld1ZhbHVlOiBudW1iZXIsIHN0ZXA6IG51bWJlcikge1xuICAgICAgICBjb25zdCB0YXJnZXRWYWx1ZSA9IHRvUGVyY2VudChuZXdWYWx1ZSwgdGhpcy5fbWF4KTtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZUluUmFuZ2UodGhpcy5fdmFsdWUsIHRoaXMuX21heCkgKyBzdGVwO1xuICAgICAgICBpZiAoKHN0ZXAgPiAwICYmIHRoaXMudmFsdWVJblBlcmNlbnQgPj0gdGFyZ2V0VmFsdWUpIHx8IChzdGVwIDwgMCAmJiB0aGlzLnZhbHVlSW5QZXJjZW50IDw9IHRhcmdldFZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlICE9PSBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2xlYXJJbnRlcnZhbCh0aGlzLl9pbnRlcnZhbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGRpcmVjdGlvbkZsb3coY3VycmVudFZhbHVlOiBudW1iZXIsIHByZXZWYWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZSA8IHByZXZWYWx1ZSA/IHRoaXMuc3RlcCA6IC10aGlzLnN0ZXA7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHJ1bkFuaW1hdGlvbih2YWx1ZTogbnVtYmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAcGFyYW0gc3RlcFxuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlUHJvZ3Jlc3ModmFsOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZUluUmFuZ2UodmFsLCB0aGlzLl9tYXgpO1xuICAgICAgICAvLyB0aGlzLnZhbHVlSW5QZXJjZW50ID0gdG9QZXJjZW50KHZhbCwgdGhpcy5fbWF4KTtcbiAgICAgICAgdGhpcy5ydW5BbmltYXRpb24odmFsKTtcbiAgICB9XG59XG5sZXQgTkVYVF9MSU5FQVJfSUQgPSAwO1xubGV0IE5FWFRfQ0lSQ1VMQVJfSUQgPSAwO1xubGV0IE5FWFRfR1JBRElFTlRfSUQgPSAwO1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtbGluZWFyLWJhcicsXG4gICAgdGVtcGxhdGVVcmw6ICd0ZW1wbGF0ZXMvbGluZWFyLWJhci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdDbGFzc11cbn0pXG5leHBvcnQgY2xhc3MgSWd4TGluZWFyUHJvZ3Jlc3NCYXJDb21wb25lbnQgZXh0ZW5kcyBCYXNlUHJvZ3Jlc3NEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS12YWx1ZW1pbicpXG4gICAgcHVibGljIHZhbHVlTWluID0gMDtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWxpbmVhci1iYXInKVxuICAgIHB1YmxpYyBjc3NDbGFzcyA9ICdpZ3gtbGluZWFyLWJhcic7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgYElneExpbmVhclByb2dyZXNzQmFyQ29tcG9uZW50YCB0byBoYXZlIHN0cmlwZWQgc3R5bGUuIEJ5IGRlZmF1bHQgaXQgaXMgc2V0IHRvIGZhbHNlLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWxpbmVhci1iYXIgW3N0cmlwZWRdPVwidHJ1ZVwiIFttYXhdPVwiMjAwXCIgW3ZhbHVlXT1cIjUwXCI+PC9pZ3gtbGluZWFyLWJhcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1saW5lYXItYmFyLS1zdHJpcGVkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzdHJpcGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtbGluZWFyLWJhci0taW5kZXRlcm1pbmF0ZScpXG4gICAgcHVibGljIGdldCBpc0luZGV0ZXJtaW5hdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZGV0ZXJtaW5hdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgc2V0cyB0aGUgdmFsdWUgb2YgdGhlIGByb2xlYCBhdHRyaWJ1dGUuIElmIG5vdCBwcm92aWRlZCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc2V0IHRvIGBwcm9ncmVzc2JhcmAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtbGluZWFyLWJhciByb2xlPVwicHJvZ3Jlc3NiYXJcIj48L2lneC1saW5lYXItYmFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByb2xlID0gJ3Byb2dyZXNzYmFyJztcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHNldHMgdGhlIHZhbHVlIG9mIGBpZGAgYXR0cmlidXRlLiBJZiBub3QgcHJvdmlkZWQgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1saW5lYXItYmFyIFtpZF09XCInaWd4LWxpbmVhci1iYXItNTUnXCIgW3N0cmlwZWRdPVwidHJ1ZVwiIFttYXhdPVwiMjAwXCIgW3ZhbHVlXT1cIjUwXCI+PC9pZ3gtbGluZWFyLWJhcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlkID0gYGlneC1saW5lYXItYmFyLSR7TkVYVF9MSU5FQVJfSUQrK31gO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBwb3NpdGlvbiB0aGF0IGRlZmluZXMgd2hlcmUgdGhlIHRleHQgaXMgYWxpZ25lZC5cbiAgICAgKiBQb3NzaWJsZSBvcHRpb25zIC0gYElneFRleHRBbGlnbi5TVEFSVGAgKGRlZmF1bHQpLCBgSWd4VGV4dEFsaWduLkNFTlRFUmAsIGBJZ3hUZXh0QWxpZ24uRU5EYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcHVibGljIHBvc2l0aW9uQ2VudGVyOiBJZ3hUZXh0QWxpZ247XG4gICAgICogcHVibGljIG5nT25Jbml0KCkge1xuICAgICAqICAgICB0aGlzLnBvc2l0aW9uQ2VudGVyID0gSWd4VGV4dEFsaWduLkNFTlRFUjtcbiAgICAgKiB9XG4gICAgICogIC8vLi4uXG4gICAgICogYGBgXG4gICAgICogIGBgYGh0bWxcbiAgICAgKiA8aWd4LWxpbmVhci1iYXIgdHlwZT1cIndhcm5pbmdcIiBbdGV4dF09XCInQ3VzdG9tIHRleHQnXCIgW3RleHRBbGlnbl09XCJwb3NpdGlvbkNlbnRlclwiIFtzdHJpcGVkXT1cInRydWVcIj48L2lneC1saW5lYXItYmFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRleHRBbGlnbjogSWd4VGV4dEFsaWduID0gSWd4VGV4dEFsaWduLlNUQVJUO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSB0ZXh0IHRvIGJlIHZpc2libGUuIEJ5IGRlZmF1bHQgaXQgaXMgc2V0IHRvIHRydWUuXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWxpbmVhci1iYXIgdHlwZT1cImRlZmF1bHRcIiBbdGV4dFZpc2liaWxpdHldPVwiZmFsc2VcIj48L2lneC1saW5lYXItYmFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRleHRWaXNpYmlsaXR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgcG9zaXRpb24gdGhhdCBkZWZpbmVzIGlmIHRoZSB0ZXh0IHNob3VsZCBiZSBhbGlnbmVkIGFib3ZlIHRoZSBwcm9ncmVzcyBsaW5lLiBCeSBkZWZhdWx0IGlzIHNldCB0byBmYWxzZS5cbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtbGluZWFyLWJhciB0eXBlPVwiZXJyb3JcIiBbdGV4dFRvcF09XCJ0cnVlXCI+PC9pZ3gtbGluZWFyLWJhcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB0ZXh0VG9wID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgYSBjdXN0b20gdGV4dCB0aGF0IGlzIGRpc3BsYXllZCBhY2NvcmRpbmcgdG8gdGhlIGRlZmluZWQgcG9zaXRpb24uXG4gICAgICogIGBgYGh0bWxcbiAgICAgKiA8aWd4LWxpbmVhci1iYXIgdHlwZT1cIndhcm5pbmdcIiBbdGV4dF09XCInQ3VzdG9tIHRleHQnXCIgW3RleHRBbGlnbl09XCJwb3NpdGlvbkNlbnRlclwiIFtzdHJpcGVkXT1cInRydWVcIj48L2lneC1saW5lYXItYmFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRleHQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFNldCB0eXBlIG9mIHRoZSBgSWd4TGluZWFyUHJvZ3Jlc3NCYXJDb21wb25lbnRgLiBQb3NzaWJsZSBvcHRpb25zIC0gYGRlZmF1bHRgLCBgc3VjY2Vzc2AsIGBpbmZvYCwgYHdhcm5pbmdgLCBhbmQgYGVycm9yYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1saW5lYXItYmFyIFtzdHJpcGVkXT1cImZhbHNlXCIgW21heF09XCIxMDBcIiBbdmFsdWVdPVwiMFwiIHR5cGU9XCJlcnJvclwiPjwvaWd4LWxpbmVhci1iYXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdHlwZSA9ICdkZWZhdWx0JztcblxuICAgIEBWaWV3Q2hpbGQoJ2luZGljYXRvcicsIHtzdGF0aWM6IHRydWV9KVxuICAgIHByaXZhdGUgX3Byb2dyZXNzSW5kaWNhdG9yOiBFbGVtZW50UmVmO1xuXG4gICAgcHJpdmF0ZSBhbmltYXRpb25TdGF0ZSA9IHtcbiAgICAgICAgd2lkdGg6ICcwJSdcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWxpbmVhci1iYXItLWRhbmdlcicpXG4gICAgcHVibGljIGdldCBlcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gSWd4UHJvZ3Jlc3NUeXBlLkVSUk9SO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1saW5lYXItYmFyLS1pbmZvJylcbiAgICBwdWJsaWMgZ2V0IGluZm8oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09IElneFByb2dyZXNzVHlwZS5JTkZPO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1saW5lYXItYmFyLS13YXJuaW5nJylcbiAgICBwdWJsaWMgZ2V0IHdhcm5pbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09IElneFByb2dyZXNzVHlwZS5XQVJOSU5HO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1saW5lYXItYmFyLS1zdWNjZXNzJylcbiAgICBwdWJsaWMgZ2V0IHN1Y2Nlc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09IElneFByb2dyZXNzVHlwZS5TVUNDRVNTO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMudHJpZ2dlclByb2dyZXNzVHJhbnNpdGlvbihNSU5fVkFMVUUsIHRoaXMuX2luaXRWYWx1ZSk7XG4gICAgICAgIHRoaXMuX2NvbnRlbnRJbml0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcnVuQW5pbWF0aW9uKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuX2FuaW1hdGlvbiAmJiB0aGlzLl9hbmltYXRpb24ucGxheVN0YXRlICE9PSAnZmluaXNoZWQnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZUluUGVyY2VudCA9IHRoaXMubWF4IDw9IDAgPyAwIDogdG9QZXJjZW50KHZhbHVlLCB0aGlzLm1heCk7XG5cbiAgICAgICAgY29uc3QgRlJBTUVTID0gW107XG4gICAgICAgIEZSQU1FU1swXSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuYW5pbWF0aW9uU3RhdGVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmFuaW1hdGlvblN0YXRlLndpZHRoID0gdmFsdWVJblBlcmNlbnQgKyAnJSc7XG4gICAgICAgIEZSQU1FU1sxXSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuYW5pbWF0aW9uU3RhdGVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLl9hbmltYXRpb24gPSB0aGlzLl9wcm9ncmVzc0luZGljYXRvci5uYXRpdmVFbGVtZW50LmFuaW1hdGUoRlJBTUVTLCB7XG4gICAgICAgICAgICBlYXNpbmc6ICdlYXNlLW91dCcsXG4gICAgICAgICAgICBmaWxsOiAnZm9yd2FyZHMnLFxuICAgICAgICAgICAgZHVyYXRpb246IHRoaXMuYW5pbWF0aW9uRHVyYXRpb25cbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1jaXJjdWxhci1iYXInLFxuICAgIHRlbXBsYXRlVXJsOiAndGVtcGxhdGVzL2NpcmN1bGFyLWJhci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdUZW1wbGF0ZU91dGxldCwgTmdJZl1cbn0pXG5leHBvcnQgY2xhc3MgSWd4Q2lyY3VsYXJQcm9ncmVzc0JhckNvbXBvbmVudCBleHRlbmRzIEJhc2VQcm9ncmVzc0RpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQge1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1jaXJjdWxhci1iYXInKVxuICAgIHB1YmxpYyBjc3NDbGFzcyA9ICdpZ3gtY2lyY3VsYXItYmFyJztcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHNldHMgdGhlIHZhbHVlIG9mIGBpZGAgYXR0cmlidXRlLiBJZiBub3QgcHJvdmlkZWQgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaXJjdWxhci1iYXIgW2lkXT1cIidpZ3gtY2lyY3VsYXItYmFyLTU1J1wiIFt2YWx1ZV09XCI1MFwiPjwvaWd4LWNpcmN1bGFyLWJhcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlkID0gYGlneC1jaXJjdWxhci1iYXItJHtORVhUX0NJUkNVTEFSX0lEKyt9YDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1jaXJjdWxhci1iYXItLWluZGV0ZXJtaW5hdGUnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBpc0luZGV0ZXJtaW5hdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZGV0ZXJtaW5hdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdGV4dCB2aXNpYmlsaXR5LiBCeSBkZWZhdWx0IGl0IGlzIHNldCB0byB0cnVlLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNpcmN1bGFyLWJhciBbdGV4dFZpc2liaWxpdHldPVwiZmFsc2VcIj48L2lneC1jaXJjdWxhci1iYXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdGV4dFZpc2liaWxpdHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSB0ZXh0IHRvIGJlIGRpc3BsYXllZCBpbnNpZGUgdGhlIGBpZ3hDaXJjdWxhckJhcmAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2lyY3VsYXItYmFyIHRleHQ9XCJQcm9ncmVzc1wiPjwvaWd4LWNpcmN1bGFyLWJhcj5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHRleHQgPSB0aGlzLmNpcmN1bGFyQmFyLnRleHQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdGV4dDogc3RyaW5nO1xuXG4gICAgQENvbnRlbnRDaGlsZChJZ3hQcm9ncmVzc0JhclRleHRUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBJZ3hQcm9ncmVzc0JhclRleHRUZW1wbGF0ZURpcmVjdGl2ZSB9KVxuICAgIHB1YmxpYyB0ZXh0VGVtcGxhdGU6IElneFByb2dyZXNzQmFyVGV4dFRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgQENvbnRlbnRDaGlsZChJZ3hQcm9ncmVzc0JhckdyYWRpZW50RGlyZWN0aXZlLCB7IHJlYWQ6IElneFByb2dyZXNzQmFyR3JhZGllbnREaXJlY3RpdmUgfSlcbiAgICBwdWJsaWMgZ3JhZGllbnRUZW1wbGF0ZTogSWd4UHJvZ3Jlc3NCYXJHcmFkaWVudERpcmVjdGl2ZTtcblxuICAgIEBWaWV3Q2hpbGQoJ2NpcmNsZScsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBfc3ZnQ2lyY2xlOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBncmFkaWVudElkID0gYGlneC1jaXJjdWxhci1ncmFkaWVudC0ke05FWFRfR1JBRElFTlRfSUQrK31gO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY29udGV4dCgpOiBhbnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJGltcGxpY2l0OiB7IHZhbHVlOiB0aGlzLnZhbHVlLCB2YWx1ZUluUGVyY2VudDogdGhpcy52YWx1ZUluUGVyY2VudCwgbWF4OiB0aGlzLm1heCB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2lyY2xlUmFkaXVzID0gNDY7XG4gICAgcHJpdmF0ZSBfY2lyY3VtZmVyZW5jZSA9IDIgKiBNYXRoLlBJICogdGhpcy5fY2lyY2xlUmFkaXVzO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBTVFJPS0VfT1BBQ0lUWV9EVklERVIgPSAxMDA7XG4gICAgcHJpdmF0ZSByZWFkb25seSBTVFJPS0VfT1BBQ0lUWV9BRERJVElPTiA9IC4yO1xuXG4gICAgcHJpdmF0ZSBhbmltYXRpb25TdGF0ZSA9IHtcbiAgICAgICAgc3Ryb2tlRGFzaG9mZnNldDogMjg5LFxuICAgICAgICBzdHJva2VPcGFjaXR5OiAxXG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBfZGlyZWN0aW9uYWxpdHk6IElneERpcmVjdGlvbmFsaXR5KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyUHJvZ3Jlc3NUcmFuc2l0aW9uKE1JTl9WQUxVRSwgdGhpcy5faW5pdFZhbHVlKTtcbiAgICAgICAgdGhpcy5fY29udGVudEluaXQgPSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICB0aGlzLl9zdmdDaXJjbGUubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICdzdHJva2UnLFxuICAgICAgICAgICAgYHVybCgjJHt0aGlzLmdyYWRpZW50SWR9KWBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCB0ZXh0Q29udGVudCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0O1xuICAgIH1cblxuICAgIHB1YmxpYyBydW5BbmltYXRpb24odmFsdWU6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5fYW5pbWF0aW9uICYmIHRoaXMuX2FuaW1hdGlvbi5wbGF5U3RhdGUgIT09ICdmaW5pc2hlZCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlSW5QZXJjZW50ID0gdGhpcy5tYXggPD0gMCA/IDAgOiB0b1BlcmNlbnQodmFsdWUsIHRoaXMubWF4KTtcblxuICAgICAgICBjb25zdCBGUkFNRVMgPSBbXTtcbiAgICAgICAgRlJBTUVTWzBdID0gey4uLnRoaXMuYW5pbWF0aW9uU3RhdGV9O1xuXG4gICAgICAgIHRoaXMuYW5pbWF0aW9uU3RhdGUuc3Ryb2tlRGFzaG9mZnNldCA9IHRoaXMuZ2V0UHJvZ3Jlc3ModmFsdWVJblBlcmNlbnQpO1xuICAgICAgICB0aGlzLmFuaW1hdGlvblN0YXRlLnN0cm9rZU9wYWNpdHkgPSB0b1BlcmNlbnQodmFsdWUsIHRoaXMubWF4KSAvIHRoaXMuU1RST0tFX09QQUNJVFlfRFZJREVSICsgdGhpcy5TVFJPS0VfT1BBQ0lUWV9BRERJVElPTjtcblxuICAgICAgICBGUkFNRVNbMV0gPSB7XG4gICAgICAgICAgICAuLi50aGlzLmFuaW1hdGlvblN0YXRlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fYW5pbWF0aW9uID0gdGhpcy5fc3ZnQ2lyY2xlLm5hdGl2ZUVsZW1lbnQuYW5pbWF0ZShGUkFNRVMsIHtcbiAgICAgICAgICAgIGVhc2luZzogJ2Vhc2Utb3V0JyxcbiAgICAgICAgICAgIGZpbGw6ICdmb3J3YXJkcycsXG4gICAgICAgICAgICBkdXJhdGlvbjogdGhpcy5hbmltYXRpb25EdXJhdGlvblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFByb2dyZXNzKHBlcmNlbnRhZ2U6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlyZWN0aW9uYWxpdHkucnRsID9cbiAgICAgICAgICAgIHRoaXMuX2NpcmN1bWZlcmVuY2UgKyAocGVyY2VudGFnZSAqIHRoaXMuX2NpcmN1bWZlcmVuY2UgLyAxMDApIDpcbiAgICAgICAgICAgIHRoaXMuX2NpcmN1bWZlcmVuY2UgLSAocGVyY2VudGFnZSAqIHRoaXMuX2NpcmN1bWZlcmVuY2UgLyAxMDApO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IHZhbHVlSW5SYW5nZSA9ICh2YWx1ZTogbnVtYmVyLCBtYXg6IG51bWJlciwgbWluID0gMCk6IG51bWJlciA9PiBNYXRoLm1heChNYXRoLm1pbih2YWx1ZSwgbWF4KSwgbWluKTtcblxuZXhwb3J0IGNvbnN0IHRvUGVyY2VudCA9ICh2YWx1ZTogbnVtYmVyLCBtYXg6IG51bWJlcikgPT4gICFtYXggPyAwIDogTWF0aC5mbG9vcigxMDAgKiB2YWx1ZSAvIG1heCk7XG5cbmV4cG9ydCBjb25zdCB0b1ZhbHVlID0gKHZhbHVlOiBudW1iZXIsIG1heDogbnVtYmVyKSA9PiBtYXggKiB2YWx1ZSAvIDEwMDtcblxuXG4iLCI8ZGl2IGNsYXNzPVwiaWd4LWxpbmVhci1iYXJfX2Jhc2VcIj5cbiAgICA8ZGl2ICNpbmRpY2F0b3IgY2xhc3M9XCJpZ3gtbGluZWFyLWJhcl9faW5kaWNhdG9yXCIgW3N0eWxlLndpZHRoXT1cIjBcIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWxpbmVhci1iYXJfX2luZGljYXRvci1zZWNvbmRhcnlcIj48L2Rpdj5cbjwvZGl2PlxuXG48c3BhblxuICAgIGNsYXNzPVwiaWd4LWxpbmVhci1iYXJfX3ZhbHVlXCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICdpZ3gtbGluZWFyLWJhcl9fdmFsdWUtLXN0YXJ0JzogdGV4dEFsaWduID09PSAnc3RhcnQnLFxuICAgICAgICAnaWd4LWxpbmVhci1iYXJfX3ZhbHVlLS1jZW50ZXInOiB0ZXh0QWxpZ24gPT09ICdjZW50ZXInLFxuICAgICAgICAnaWd4LWxpbmVhci1iYXJfX3ZhbHVlLS1lbmQnOiB0ZXh0QWxpZ24gPT09ICdlbmQnLFxuICAgICAgICAnaWd4LWxpbmVhci1iYXJfX3ZhbHVlLS10b3AnOiB0ZXh0VG9wLFxuICAgICAgICAnaWd4LWxpbmVhci1iYXJfX3ZhbHVlLS1oaWRkZW4nOiAhdGV4dFZpc2liaWxpdHlcbiAgICB9XCI+XG4gICAgICAgIHt7dGV4dCA/IHRleHQgOiB2YWx1ZUluUGVyY2VudCArICclJ319XG48L3NwYW4+XG4iLCI8c3ZnICNzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiIHZlcnNpb249XCIxLjFcIlxuICAgIHZpZXdCb3g9XCIwIDAgMTAwIDEwMFwiXG4gICAgcHJlc2VydmVBc3BlY3RSYXRpbz1cInhNaWRZTWlkIG1lZXRcIlxuICAgIHJvbGU9XCJwcm9ncmVzc2JhclwiXG4gICAgYXJpYS12YWx1ZW1pbj1cIjBcIlxuICAgIFthdHRyLmFyaWEtdmFsdWVtYXhdPVwibWF4XCJcbiAgICBbYXR0ci5hcmlhLXZhbHVlbm93XT1cInZhbHVlXCI+XG4gICAgPHN2ZzpjaXJjbGUgY2xhc3M9XCJpZ3gtY2lyY3VsYXItYmFyX19pbm5lclwiIGN4PVwiNTBcIiBjeT1cIjUwXCIgcj1cIjQ2XCIgLz5cbiAgICA8c3ZnOmNpcmNsZSAjY2lyY2xlIGNsYXNzPVwiaWd4LWNpcmN1bGFyLWJhcl9fb3V0ZXJcIiBjeD1cIjUwXCIgY3k9XCI1MFwiIHI9XCI0NlwiIC8+XG5cbiAgICA8c3ZnOmRlZnM+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ3JhZGllbnRUZW1wbGF0ZSA/IGdyYWRpZW50VGVtcGxhdGUudGVtcGxhdGUgOiBkZWZhdWx0R3JhZGllbnRUZW1wbGF0ZTtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBncmFkaWVudElkIH1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9zdmc6ZGVmcz5cblxuICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEdyYWRpZW50VGVtcGxhdGU+XG4gICAgICAgIDxzdmc6bGluZWFyR3JhZGllbnQgW2lkXT1cImdyYWRpZW50SWRcIiBncmFkaWVudFRyYW5zZm9ybT1cInJvdGF0ZSg5MClcIj5cbiAgICAgICAgICA8c3RvcCBvZmZzZXQ9XCIwJVwiICAgY2xhc3M9XCJpZ3gtY2lyY3VsYXItYmFyX19ncmFkaWVudC1zdGFydFwiIC8+XG4gICAgICAgICAgPHN0b3Agb2Zmc2V0PVwiMTAwJVwiIGNsYXNzPVwiaWd4LWNpcmN1bGFyLWJhcl9fZ3JhZGllbnQtZW5kXCIgLz5cbiAgICAgICAgPC9zdmc6bGluZWFyR3JhZGllbnQ+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvc3ZnPlxuXG48c3BhbiBjbGFzcz1cImlneC1jaXJjdWxhci1iYXJfX3RleHRcIiAqbmdJZj1cInRleHRWaXNpYmlsaXR5XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRleHRUZW1wbGF0ZSA/IHRleHRUZW1wbGF0ZS50ZW1wbGF0ZSA6IGRlZmF1bHRUZXh0VGVtcGxhdGU7XG4gICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0XCI+XG4gICAgPC9uZy1jb250YWluZXI+XG48L3NwYW4+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFRleHRUZW1wbGF0ZT5cbiAgICB7e3RleHRDb250ZW50ID8gdGV4dENvbnRlbnQ6IHZhbHVlSW5QZXJjZW50ICsgJyUnfX1cbjwvbmctdGVtcGxhdGU+XG5cbiJdfQ==
|
|
584
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3NiYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL3Byb2dyZXNzYmFyL3Byb2dyZXNzYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9wcm9ncmVzc2Jhci90ZW1wbGF0ZXMvbGluZWFyLWJhci5jb21wb25lbnQuaHRtbCIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9wcm9ncmVzc2Jhci90ZW1wbGF0ZXMvY2lyY3VsYXItYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEUsT0FBTyxFQUNILFNBQVMsRUFFVCxZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFDTCxNQUFNLEVBRU4sU0FBUyxFQUNULFlBQVksRUFHWixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILG1DQUFtQyxFQUNuQywrQkFBK0IsR0FDbEMsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQWtCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBRXZELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQztBQUN6QixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFFcEIsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQztJQUMvQixLQUFLLEVBQUUsT0FBTztJQUNkLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLEdBQUcsRUFBRSxLQUFLO0NBQ2IsQ0FBQyxDQUFDO0FBR0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQztJQUNsQyxLQUFLLEVBQUUs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TUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBYSxFQUFFLEdBQVcsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzLCBOZ1RlbXBsYXRlT3V0bGV0LCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBSZW5kZXJlcjIsXG4gICAgVmlld0NoaWxkLFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgRGlyZWN0aXZlXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBJZ3hQcm9ncmVzc0JhclRleHRUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBJZ3hQcm9ncmVzc0JhckdyYWRpZW50RGlyZWN0aXZlLFxufSBmcm9tICcuL3Byb2dyZXNzYmFyLmNvbW1vbic7XG5pbXBvcnQgeyBJQmFzZUV2ZW50QXJncywgbWtlbnVtIH0gZnJvbSAnLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBJZ3hEaXJlY3Rpb25hbGl0eSB9IGZyb20gJy4uL3NlcnZpY2VzL2RpcmVjdGlvbi9kaXJlY3Rpb25hbGl0eSc7XG5jb25zdCBPTkVfUEVSQ0VOVCA9IDAuMDE7XG5jb25zdCBNSU5fVkFMVUUgPSAwO1xuXG5leHBvcnQgY29uc3QgSWd4VGV4dEFsaWduID0gbWtlbnVtKHtcbiAgICBTVEFSVDogJ3N0YXJ0JyxcbiAgICBDRU5URVI6ICdjZW50ZXInLFxuICAgIEVORDogJ2VuZCdcbn0pO1xuZXhwb3J0IHR5cGUgSWd4VGV4dEFsaWduID0gKHR5cGVvZiBJZ3hUZXh0QWxpZ24pW2tleW9mIHR5cGVvZiBJZ3hUZXh0QWxpZ25dO1xuXG5leHBvcnQgY29uc3QgSWd4UHJvZ3Jlc3NUeXBlID0gbWtlbnVtKHtcbiAgICBFUlJPUjogJ2Vycm9yJyxcbiAgICBJTkZPOiAnaW5mbycsXG4gICAgV0FSTklORzogJ3dhcm5pbmcnLFxuICAgIFNVQ0NFU1M6ICdzdWNjZXNzJ1xufSk7XG5leHBvcnQgdHlwZSBJZ3hQcm9ncmVzc1R5cGUgPSAodHlwZW9mIElneFByb2dyZXNzVHlwZSlba2V5b2YgdHlwZW9mIElneFByb2dyZXNzVHlwZV07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNoYW5nZVByb2dyZXNzRXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VFdmVudEFyZ3Mge1xuICAgIHByZXZpb3VzVmFsdWU6IG51bWJlcjtcbiAgICBjdXJyZW50VmFsdWU6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VQcm9ncmVzc0RpcmVjdGl2ZSB7XG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQsIHdoaWNoIGlzIHRyaWdnZXJlZCBhZnRlciBhIHByb2dyZXNzIGlzIGNoYW5nZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHB1YmxpYyBwcm9ncmVzc0NoYW5nZShldmVudCkge1xuICAgICAqICAgICBhbGVydChcIlByb2dyZXNzIG1hZGUhXCIpO1xuICAgICAqIH1cbiAgICAgKiAgLy8uLi5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaXJjdWxhci1iYXIgW3ZhbHVlXT1cImN1cnJlbnRWYWx1ZVwiIChwcm9ncmVzc0NoYW5nZWQpPVwicHJvZ3Jlc3NDaGFuZ2UoJGV2ZW50KVwiPjwvaWd4LWNpcmN1bGFyLWJhcj5cbiAgICAgKiA8aWd4LWxpbmVhci1iYXIgW3ZhbHVlXT1cImN1cnJlbnRWYWx1ZVwiIChwcm9ncmVzc0NoYW5nZWQpPVwicHJvZ3Jlc3NDaGFuZ2UoJGV2ZW50KVwiPjwvaWd4LWxpbmVhci1iYXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHByb2dyZXNzQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUNoYW5nZVByb2dyZXNzRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9HZXRzIHByb2dyZXNzYmFyIGluIGluZGV0ZXJtaW5hdGUuIEJ5IGRlZmF1bHQgaXQgaXMgc2V0IHRvIGZhbHNlLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWxpbmVhci1iYXIgW2luZGV0ZXJtaW5hdGVdPVwidHJ1ZVwiPjwvaWd4LWxpbmVhci1iYXI+XG4gICAgICogPGlneC1jaXJjdWxhci1iYXIgW2luZGV0ZXJtaW5hdGVdPVwidHJ1ZVwiPjwvaWd4LWNpcmN1bGFyLWJhcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpbmRldGVybWluYXRlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL0dldHMgcHJvZ3Jlc3NiYXIgYW5pbWF0aW9uIGR1cmF0aW9uLiBCeSBkZWZhdWx0IGl0IGlzIDIwMDBtcy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1saW5lYXItYmFyIFtpbmRldGVybWluYXRlXT1cInRydWVcIj48L2lneC1saW5lYXItYmFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFuaW1hdGlvbkR1cmF0aW9uID0gMjAwMDtcbiAgICBwdWJsaWMgX2ludGVydmFsO1xuXG4gICAgcHJvdGVjdGVkIF9pbml0VmFsdWUgPSAwO1xuICAgIHByb3RlY3RlZCBfY29udGVudEluaXQgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgX21heCA9IDEwMDtcbiAgICBwcm90ZWN0ZWQgX3ZhbHVlID0gTUlOX1ZBTFVFO1xuICAgIHByb3RlY3RlZCBfbmV3VmFsID0gTUlOX1ZBTFVFO1xuICAgIHByb3RlY3RlZCBfYW5pbWF0ZSA9IHRydWU7XG4gICAgcHJvdGVjdGVkIF9zdGVwO1xuICAgIHByb3RlY3RlZCBfYW5pbWF0aW9uO1xuICAgIHByb3RlY3RlZCBfdmFsdWVJblBlcmNlbnQ7XG4gICAgcHJvdGVjdGVkIF9pbnRlcm5hbFN0YXRlID0ge1xuICAgICAgICBvbGRWYWw6IDAsXG4gICAgICAgIG5ld1ZhbDogMFxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgd2hpY2ggdXBkYXRlIHRoZSBwcm9ncmVzcyBpbmRpY2F0b3Igb2YgdGhlIGBwcm9ncmVzcyBiYXJgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwiTXlQcm9ncmVzc0JhclwiKVxuICAgICAqIHB1YmxpYyBwcm9ncmVzc0JhcjogSWd4TGluZWFyUHJvZ3Jlc3NCYXJDb21wb25lbnQgfCBJZ3hDaXJjdWxhckJhckNvbXBvbmVudDtcbiAgICAgKiBwdWJsaWMgc3RlcFZhbHVlKGV2ZW50KSB7XG4gICAgICogICAgIGxldCBzdGVwID0gdGhpcy5wcm9ncmVzc0Jhci5zdGVwO1xuICAgICAqICAgICBhbGVydChzdGVwKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHN0ZXAoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMuX3N0ZXApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGVwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXggKiBPTkVfUEVSQ0VOVDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB2YWx1ZSBieSB3aGljaCBwcm9ncmVzcyBpbmRpY2F0b3IgaXMgdXBkYXRlZC4gQnkgZGVmYXVsdCBpdCBpcyAxLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWxpbmVhci1iYXIgW21heF09XCIyMDBcIiBbdmFsdWVdPVwiMFwiIFtzdGVwXT1cIjFcIj48L2lneC1saW5lYXItYmFyPlxuICAgICAqIDxpZ3gtY2lyY3VsYXItYmFyIFttYXhdPVwiMjAwXCIgW3ZhbHVlXT1cIjBcIiBbc3RlcF09XCIxXCI+PC9pZ3gtY2lyY3VsYXItYmFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgc3RlcCh2YWw6IG51bWJlcikge1xuICAgICAgICBjb25zdCBzdGVwID0gTnVtYmVyKHZhbCk7XG4gICAgICAgIGlmIChzdGVwID4gdGhpcy5tYXgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3N0ZXAgPSBzdGVwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuaW1hdGluZyB0aGUgcHJvZ3Jlc3MuIEJ5IGRlZmF1bHQgaXQgaXMgc2V0IHRvIHRydWUuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtbGluZWFyLWJhciBbYW5pbWF0ZV09XCJmYWxzZVwiIFttYXhdPVwiMjAwXCIgW3ZhbHVlXT1cIjUwXCI+PC9pZ3gtbGluZWFyLWJhcj5cbiAgICAgKiA8aWd4LWNpcmN1bGFyLWJhciBbYW5pbWF0ZV09XCJmYWxzZVwiIFttYXhdPVwiMjAwXCIgW3ZhbHVlXT1cIjUwXCI+PC9pZ3gtY2lyY3VsYXItYmFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBhbmltYXRlKGFuaW1hdGU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fYW5pbWF0ZSA9IGFuaW1hdGU7XG4gICAgICAgIGlmIChhbmltYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmFuaW1hdGlvbkR1cmF0aW9uID0gMjAwMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uRHVyYXRpb24gPSAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBgcHJvZ3Jlc3MgYmFyYCBoYXMgYW5pbWF0aW9uIHRydWUvZmFsc2UuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJNeVByb2dyZXNzQmFyXCIpXG4gICAgICogcHVibGljIHByb2dyZXNzQmFyOiBJZ3hMaW5lYXJQcm9ncmVzc0JhckNvbXBvbmVudCB8IElneENpcmN1bGFyQmFyQ29tcG9uZW50O1xuICAgICAqIHB1YmxpYyBhbmltYXRpb25TdGF0dXMoZXZlbnQpIHtcbiAgICAgKiAgICAgbGV0IGFuaW1hdGlvblN0YXR1cyA9IHRoaXMucHJvZ3Jlc3NCYXIuYW5pbWF0ZTtcbiAgICAgKiAgICAgYWxlcnQoYW5pbWF0aW9uU3RhdHVzKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBhbmltYXRlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYW5pbWF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgbWF4aW11bSB2YWx1ZSB0aGF0IGNhbiBiZSBwYXNzZWQuIEJ5IGRlZmF1bHQgaXQgaXMgc2V0IHRvIDEwMC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1saW5lYXItYmFyIFttYXhdPVwiMjAwXCIgW3ZhbHVlXT1cIjBcIj48L2lneC1saW5lYXItYmFyPlxuICAgICAqIDxpZ3gtY2lyY3VsYXItYmFyIFttYXhdPVwiMjAwXCIgW3ZhbHVlXT1cIjBcIj48L2lneC1jaXJjdWxhci1iYXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtdmFsdWVtYXgnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBtYXgobWF4TnVtOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKG1heE51bSA8IE1JTl9WQUxVRSB8fCB0aGlzLl9tYXggPT09IG1heE51bSB8fFxuICAgICAgICAgICAgKHRoaXMuX2FuaW1hdGlvbiAmJiB0aGlzLl9hbmltYXRpb24ucGxheVN0YXRlICE9PSAnZmluaXNoZWQnKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faW50ZXJuYWxTdGF0ZS5uZXdWYWwgPSBNYXRoLnJvdW5kKHRvVmFsdWUodG9QZXJjZW50KHRoaXMudmFsdWUsIG1heE51bSksIG1heE51bSkpO1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX2ludGVybmFsU3RhdGUub2xkVmFsID0gTWF0aC5yb3VuZCh0b1ZhbHVlKHRoaXMudmFsdWVJblBlcmNlbnQsIG1heE51bSkpO1xuICAgICAgICB0aGlzLl9tYXggPSBtYXhOdW07XG4gICAgICAgIHRoaXMudHJpZ2dlclByb2dyZXNzVHJhbnNpdGlvbih0aGlzLl9pbnRlcm5hbFN0YXRlLm9sZFZhbCwgdGhpcy5faW50ZXJuYWxTdGF0ZS5uZXdWYWwsIHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHRoZSBtYXhpbXVtIHByb2dyZXNzIHZhbHVlIG9mIHRoZSBgcHJvZ3Jlc3MgYmFyYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15UHJvZ3Jlc3NCYXJcIilcbiAgICAgKiBwdWJsaWMgcHJvZ3Jlc3NCYXI6IElneExpbmVhclByb2dyZXNzQmFyQ29tcG9uZW50IHwgSWd4Q2lyY3VsYXJCYXJDb21wb25lbnQ7XG4gICAgICogcHVibGljIG1heFZhbHVlKGV2ZW50KSB7XG4gICAgICogICAgIGxldCBtYXggPSB0aGlzLnByb2dyZXNzQmFyLm1heDtcbiAgICAgKiAgICAgYWxlcnQobWF4KTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBtYXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYElneExpbmVhclByb2dyZXNzQmFyQ29tcG9uZW50YC9gSWd4Q2lyY3VsYXJQcm9ncmVzc0JhckNvbXBvbmVudGAgdmFsdWUgaW4gcGVyY2VudGFnZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15UHJvZ3Jlc3NCYXJcIilcbiAgICAgKiBwdWJsaWMgcHJvZ3Jlc3NCYXI6IElneExpbmVhclByb2dyZXNzQmFyQ29tcG9uZW50OyAvLyBJZ3hDaXJjdWxhclByb2dyZXNzQmFyQ29tcG9uZW50XG4gICAgICogcHVibGljIHZhbHVlUGVyY2VudChldmVudCl7XG4gICAgICogICAgIGxldCBwZXJjZW50VmFsdWUgPSB0aGlzLnByb2dyZXNzQmFyLnZhbHVlSW5QZXJjZW50O1xuICAgICAqICAgICBhbGVydChwZXJjZW50VmFsdWUpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHZhbHVlSW5QZXJjZW50KCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHRvUGVyY2VudCh0aGlzLl92YWx1ZSwgdGhpcy5fbWF4KTtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHRoZSBjdXJyZW50IGBJZ3hMaW5lYXJQcm9ncmVzc0JhckNvbXBvbmVudGAgcG9zaXRpb24uXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJNeVByb2dyZXNzQmFyXCIpXG4gICAgICogcHVibGljIHByb2dyZXNzQmFyOiBJZ3hMaW5lYXJQcm9ncmVzc0JhckNvbXBvbmVudDtcbiAgICAgKiBwdWJsaWMgZ2V0VmFsdWUoZXZlbnQpIHtcbiAgICAgKiAgICAgbGV0IHZhbHVlID0gdGhpcy5wcm9ncmVzc0Jhci52YWx1ZTtcbiAgICAgKiAgICAgYWxlcnQodmFsdWUpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS12YWx1ZW5vdycpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgdGhlIGN1cnJlbnQgYElneExpbmVhclByb2dyZXNzQmFyQ29tcG9uZW50YCBwb3NpdGlvbi5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1saW5lYXItYmFyIFtzdHJpcGVkXT1cImZhbHNlXCIgW21heF09XCIyMDBcIiBbdmFsdWVdPVwiNTBcIj48L2lneC1saW5lYXItYmFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgdmFsdWUodmFsKSB7XG4gICAgICAgIGlmICh0aGlzLl9hbmltYXRpb24gJiYgdGhpcy5fYW5pbWF0aW9uLnBsYXlTdGF0ZSAhPT0gJ2ZpbmlzaGVkJyB8fCB2YWwgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWxJblJhbmdlID0gdmFsdWVJblJhbmdlKHZhbCwgdGhpcy5tYXgpO1xuXG4gICAgICAgIGlmIChpc05hTih2YWxJblJhbmdlKSB8fCB0aGlzLl92YWx1ZSA9PT0gdmFsIHx8IHRoaXMuaW5kZXRlcm1pbmF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbnRlbnRJbml0KSB7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJQcm9ncmVzc1RyYW5zaXRpb24odGhpcy5fdmFsdWUsIHZhbEluUmFuZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faW5pdFZhbHVlID0gdmFsSW5SYW5nZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCB0cmlnZ2VyUHJvZ3Jlc3NUcmFuc2l0aW9uKG9sZFZhbCwgbmV3VmFsLCBtYXhVcGRhdGUgPSBmYWxzZSkge1xuICAgICAgICBpZiAob2xkVmFsID09PSBuZXdWYWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNoYW5nZWRWYWx1ZXMgPSB7XG4gICAgICAgICAgICBjdXJyZW50VmFsdWU6IG5ld1ZhbCxcbiAgICAgICAgICAgIHByZXZpb3VzVmFsdWU6IG9sZFZhbFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHN0ZXBEaXJlY3Rpb24gPSB0aGlzLmRpcmVjdGlvbkZsb3cob2xkVmFsLCBuZXdWYWwpO1xuICAgICAgICBpZiAodGhpcy5fYW5pbWF0ZSkge1xuICAgICAgICAgICAgY29uc3QgbmV3VG9QZXJjZW50ID0gdG9QZXJjZW50KG5ld1ZhbCwgdGhpcy5tYXgpO1xuICAgICAgICAgICAgY29uc3Qgb2xkVG9QZXJjZW50ID0gdG9QZXJjZW50KG9sZFZhbCwgdGhpcy5tYXgpO1xuICAgICAgICAgICAgY29uc3QgZHVyYXRpb24gPSB0aGlzLmFuaW1hdGlvbkR1cmF0aW9uIC8gTWF0aC5hYnMobmV3VG9QZXJjZW50IC0gb2xkVG9QZXJjZW50KSAvICh0aGlzLl9zdGVwID8gdGhpcy5fc3RlcCA6IDEpO1xuICAgICAgICAgICAgdGhpcy5ydW5BbmltYXRpb24obmV3VmFsKTtcbiAgICAgICAgICAgIHRoaXMuX2ludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4gdGhpcy5pbmNyZWFzZShuZXdWYWwsIHN0ZXBEaXJlY3Rpb24pLCBkdXJhdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVByb2dyZXNzKG5ld1ZhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWF4VXBkYXRlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9ncmVzc0NoYW5nZWQuZW1pdChjaGFuZ2VkVmFsdWVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGluY3JlYXNlKG5ld1ZhbHVlOiBudW1iZXIsIHN0ZXA6IG51bWJlcikge1xuICAgICAgICBjb25zdCB0YXJnZXRWYWx1ZSA9IHRvUGVyY2VudChuZXdWYWx1ZSwgdGhpcy5fbWF4KTtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZUluUmFuZ2UodGhpcy5fdmFsdWUsIHRoaXMuX21heCkgKyBzdGVwO1xuICAgICAgICBpZiAoKHN0ZXAgPiAwICYmIHRoaXMudmFsdWVJblBlcmNlbnQgPj0gdGFyZ2V0VmFsdWUpIHx8IChzdGVwIDwgMCAmJiB0aGlzLnZhbHVlSW5QZXJjZW50IDw9IHRhcmdldFZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlICE9PSBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2xlYXJJbnRlcnZhbCh0aGlzLl9pbnRlcnZhbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGRpcmVjdGlvbkZsb3coY3VycmVudFZhbHVlOiBudW1iZXIsIHByZXZWYWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZSA8IHByZXZWYWx1ZSA/IHRoaXMuc3RlcCA6IC10aGlzLnN0ZXA7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHJ1bkFuaW1hdGlvbih2YWx1ZTogbnVtYmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAcGFyYW0gc3RlcFxuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlUHJvZ3Jlc3ModmFsOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZUluUmFuZ2UodmFsLCB0aGlzLl9tYXgpO1xuICAgICAgICAvLyB0aGlzLnZhbHVlSW5QZXJjZW50ID0gdG9QZXJjZW50KHZhbCwgdGhpcy5fbWF4KTtcbiAgICAgICAgdGhpcy5ydW5BbmltYXRpb24odmFsKTtcbiAgICB9XG59XG5sZXQgTkVYVF9MSU5FQVJfSUQgPSAwO1xubGV0IE5FWFRfQ0lSQ1VMQVJfSUQgPSAwO1xubGV0IE5FWFRfR1JBRElFTlRfSUQgPSAwO1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtbGluZWFyLWJhcicsXG4gICAgdGVtcGxhdGVVcmw6ICd0ZW1wbGF0ZXMvbGluZWFyLWJhci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdDbGFzc11cbn0pXG5leHBvcnQgY2xhc3MgSWd4TGluZWFyUHJvZ3Jlc3NCYXJDb21wb25lbnQgZXh0ZW5kcyBCYXNlUHJvZ3Jlc3NEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS12YWx1ZW1pbicpXG4gICAgcHVibGljIHZhbHVlTWluID0gMDtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWxpbmVhci1iYXInKVxuICAgIHB1YmxpYyBjc3NDbGFzcyA9ICdpZ3gtbGluZWFyLWJhcic7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgYElneExpbmVhclByb2dyZXNzQmFyQ29tcG9uZW50YCB0byBoYXZlIHN0cmlwZWQgc3R5bGUuIEJ5IGRlZmF1bHQgaXQgaXMgc2V0IHRvIGZhbHNlLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWxpbmVhci1iYXIgW3N0cmlwZWRdPVwidHJ1ZVwiIFttYXhdPVwiMjAwXCIgW3ZhbHVlXT1cIjUwXCI+PC9pZ3gtbGluZWFyLWJhcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1saW5lYXItYmFyLS1zdHJpcGVkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzdHJpcGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtbGluZWFyLWJhci0taW5kZXRlcm1pbmF0ZScpXG4gICAgcHVibGljIGdldCBpc0luZGV0ZXJtaW5hdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZGV0ZXJtaW5hdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgc2V0cyB0aGUgdmFsdWUgb2YgdGhlIGByb2xlYCBhdHRyaWJ1dGUuIElmIG5vdCBwcm92aWRlZCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc2V0IHRvIGBwcm9ncmVzc2JhcmAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtbGluZWFyLWJhciByb2xlPVwicHJvZ3Jlc3NiYXJcIj48L2lneC1saW5lYXItYmFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByb2xlID0gJ3Byb2dyZXNzYmFyJztcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHNldHMgdGhlIHZhbHVlIG9mIGBpZGAgYXR0cmlidXRlLiBJZiBub3QgcHJvdmlkZWQgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1saW5lYXItYmFyIFtpZF09XCInaWd4LWxpbmVhci1iYXItNTUnXCIgW3N0cmlwZWRdPVwidHJ1ZVwiIFttYXhdPVwiMjAwXCIgW3ZhbHVlXT1cIjUwXCI+PC9pZ3gtbGluZWFyLWJhcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlkID0gYGlneC1saW5lYXItYmFyLSR7TkVYVF9MSU5FQVJfSUQrK31gO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBwb3NpdGlvbiB0aGF0IGRlZmluZXMgd2hlcmUgdGhlIHRleHQgaXMgYWxpZ25lZC5cbiAgICAgKiBQb3NzaWJsZSBvcHRpb25zIC0gYElneFRleHRBbGlnbi5TVEFSVGAgKGRlZmF1bHQpLCBgSWd4VGV4dEFsaWduLkNFTlRFUmAsIGBJZ3hUZXh0QWxpZ24uRU5EYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcHVibGljIHBvc2l0aW9uQ2VudGVyOiBJZ3hUZXh0QWxpZ247XG4gICAgICogcHVibGljIG5nT25Jbml0KCkge1xuICAgICAqICAgICB0aGlzLnBvc2l0aW9uQ2VudGVyID0gSWd4VGV4dEFsaWduLkNFTlRFUjtcbiAgICAgKiB9XG4gICAgICogIC8vLi4uXG4gICAgICogYGBgXG4gICAgICogIGBgYGh0bWxcbiAgICAgKiA8aWd4LWxpbmVhci1iYXIgdHlwZT1cIndhcm5pbmdcIiBbdGV4dF09XCInQ3VzdG9tIHRleHQnXCIgW3RleHRBbGlnbl09XCJwb3NpdGlvbkNlbnRlclwiIFtzdHJpcGVkXT1cInRydWVcIj48L2lneC1saW5lYXItYmFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRleHRBbGlnbjogSWd4VGV4dEFsaWduID0gSWd4VGV4dEFsaWduLlNUQVJUO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSB0ZXh0IHRvIGJlIHZpc2libGUuIEJ5IGRlZmF1bHQgaXQgaXMgc2V0IHRvIHRydWUuXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWxpbmVhci1iYXIgdHlwZT1cImRlZmF1bHRcIiBbdGV4dFZpc2liaWxpdHldPVwiZmFsc2VcIj48L2lneC1saW5lYXItYmFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRleHRWaXNpYmlsaXR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgcG9zaXRpb24gdGhhdCBkZWZpbmVzIGlmIHRoZSB0ZXh0IHNob3VsZCBiZSBhbGlnbmVkIGFib3ZlIHRoZSBwcm9ncmVzcyBsaW5lLiBCeSBkZWZhdWx0IGlzIHNldCB0byBmYWxzZS5cbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtbGluZWFyLWJhciB0eXBlPVwiZXJyb3JcIiBbdGV4dFRvcF09XCJ0cnVlXCI+PC9pZ3gtbGluZWFyLWJhcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB0ZXh0VG9wID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgYSBjdXN0b20gdGV4dCB0aGF0IGlzIGRpc3BsYXllZCBhY2NvcmRpbmcgdG8gdGhlIGRlZmluZWQgcG9zaXRpb24uXG4gICAgICogIGBgYGh0bWxcbiAgICAgKiA8aWd4LWxpbmVhci1iYXIgdHlwZT1cIndhcm5pbmdcIiBbdGV4dF09XCInQ3VzdG9tIHRleHQnXCIgW3RleHRBbGlnbl09XCJwb3NpdGlvbkNlbnRlclwiIFtzdHJpcGVkXT1cInRydWVcIj48L2lneC1saW5lYXItYmFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRleHQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFNldCB0eXBlIG9mIHRoZSBgSWd4TGluZWFyUHJvZ3Jlc3NCYXJDb21wb25lbnRgLiBQb3NzaWJsZSBvcHRpb25zIC0gYGRlZmF1bHRgLCBgc3VjY2Vzc2AsIGBpbmZvYCwgYHdhcm5pbmdgLCBhbmQgYGVycm9yYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1saW5lYXItYmFyIFtzdHJpcGVkXT1cImZhbHNlXCIgW21heF09XCIxMDBcIiBbdmFsdWVdPVwiMFwiIHR5cGU9XCJlcnJvclwiPjwvaWd4LWxpbmVhci1iYXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdHlwZSA9ICdkZWZhdWx0JztcblxuICAgIEBWaWV3Q2hpbGQoJ2luZGljYXRvcicsIHtzdGF0aWM6IHRydWV9KVxuICAgIHByaXZhdGUgX3Byb2dyZXNzSW5kaWNhdG9yOiBFbGVtZW50UmVmO1xuXG4gICAgcHJpdmF0ZSBhbmltYXRpb25TdGF0ZSA9IHtcbiAgICAgICAgd2lkdGg6ICcwJSdcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWxpbmVhci1iYXItLWRhbmdlcicpXG4gICAgcHVibGljIGdldCBlcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gSWd4UHJvZ3Jlc3NUeXBlLkVSUk9SO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1saW5lYXItYmFyLS1pbmZvJylcbiAgICBwdWJsaWMgZ2V0IGluZm8oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09IElneFByb2dyZXNzVHlwZS5JTkZPO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1saW5lYXItYmFyLS13YXJuaW5nJylcbiAgICBwdWJsaWMgZ2V0IHdhcm5pbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09IElneFByb2dyZXNzVHlwZS5XQVJOSU5HO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1saW5lYXItYmFyLS1zdWNjZXNzJylcbiAgICBwdWJsaWMgZ2V0IHN1Y2Nlc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09IElneFByb2dyZXNzVHlwZS5TVUNDRVNTO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMudHJpZ2dlclByb2dyZXNzVHJhbnNpdGlvbihNSU5fVkFMVUUsIHRoaXMuX2luaXRWYWx1ZSk7XG4gICAgICAgIHRoaXMuX2NvbnRlbnRJbml0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcnVuQW5pbWF0aW9uKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuX2FuaW1hdGlvbiAmJiB0aGlzLl9hbmltYXRpb24ucGxheVN0YXRlICE9PSAnZmluaXNoZWQnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZUluUGVyY2VudCA9IHRoaXMubWF4IDw9IDAgPyAwIDogdG9QZXJjZW50KHZhbHVlLCB0aGlzLm1heCk7XG5cbiAgICAgICAgY29uc3QgRlJBTUVTID0gW107XG4gICAgICAgIEZSQU1FU1swXSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuYW5pbWF0aW9uU3RhdGVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmFuaW1hdGlvblN0YXRlLndpZHRoID0gdmFsdWVJblBlcmNlbnQgKyAnJSc7XG4gICAgICAgIEZSQU1FU1sxXSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuYW5pbWF0aW9uU3RhdGVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLl9hbmltYXRpb24gPSB0aGlzLl9wcm9ncmVzc0luZGljYXRvci5uYXRpdmVFbGVtZW50LmFuaW1hdGUoRlJBTUVTLCB7XG4gICAgICAgICAgICBlYXNpbmc6ICdlYXNlLW91dCcsXG4gICAgICAgICAgICBmaWxsOiAnZm9yd2FyZHMnLFxuICAgICAgICAgICAgZHVyYXRpb246IHRoaXMuYW5pbWF0aW9uRHVyYXRpb25cbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1jaXJjdWxhci1iYXInLFxuICAgIHRlbXBsYXRlVXJsOiAndGVtcGxhdGVzL2NpcmN1bGFyLWJhci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdUZW1wbGF0ZU91dGxldCwgTmdJZl1cbn0pXG5leHBvcnQgY2xhc3MgSWd4Q2lyY3VsYXJQcm9ncmVzc0JhckNvbXBvbmVudCBleHRlbmRzIEJhc2VQcm9ncmVzc0RpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQge1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1jaXJjdWxhci1iYXInKVxuICAgIHB1YmxpYyBjc3NDbGFzcyA9ICdpZ3gtY2lyY3VsYXItYmFyJztcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHNldHMgdGhlIHZhbHVlIG9mIGBpZGAgYXR0cmlidXRlLiBJZiBub3QgcHJvdmlkZWQgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaXJjdWxhci1iYXIgW2lkXT1cIidpZ3gtY2lyY3VsYXItYmFyLTU1J1wiIFt2YWx1ZV09XCI1MFwiPjwvaWd4LWNpcmN1bGFyLWJhcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlkID0gYGlneC1jaXJjdWxhci1iYXItJHtORVhUX0NJUkNVTEFSX0lEKyt9YDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1jaXJjdWxhci1iYXItLWluZGV0ZXJtaW5hdGUnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBpc0luZGV0ZXJtaW5hdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZGV0ZXJtaW5hdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdGV4dCB2aXNpYmlsaXR5LiBCeSBkZWZhdWx0IGl0IGlzIHNldCB0byB0cnVlLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNpcmN1bGFyLWJhciBbdGV4dFZpc2liaWxpdHldPVwiZmFsc2VcIj48L2lneC1jaXJjdWxhci1iYXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdGV4dFZpc2liaWxpdHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSB0ZXh0IHRvIGJlIGRpc3BsYXllZCBpbnNpZGUgdGhlIGBpZ3hDaXJjdWxhckJhcmAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2lyY3VsYXItYmFyIHRleHQ9XCJQcm9ncmVzc1wiPjwvaWd4LWNpcmN1bGFyLWJhcj5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHRleHQgPSB0aGlzLmNpcmN1bGFyQmFyLnRleHQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdGV4dDogc3RyaW5nO1xuXG4gICAgQENvbnRlbnRDaGlsZChJZ3hQcm9ncmVzc0JhclRleHRUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBJZ3hQcm9ncmVzc0JhclRleHRUZW1wbGF0ZURpcmVjdGl2ZSB9KVxuICAgIHB1YmxpYyB0ZXh0VGVtcGxhdGU6IElneFByb2dyZXNzQmFyVGV4dFRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgQENvbnRlbnRDaGlsZChJZ3hQcm9ncmVzc0JhckdyYWRpZW50RGlyZWN0aXZlLCB7IHJlYWQ6IElneFByb2dyZXNzQmFyR3JhZGllbnREaXJlY3RpdmUgfSlcbiAgICBwdWJsaWMgZ3JhZGllbnRUZW1wbGF0ZTogSWd4UHJvZ3Jlc3NCYXJHcmFkaWVudERpcmVjdGl2ZTtcblxuICAgIEBWaWV3Q2hpbGQoJ2NpcmNsZScsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBfc3ZnQ2lyY2xlOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBncmFkaWVudElkID0gYGlneC1jaXJjdWxhci1ncmFkaWVudC0ke05FWFRfR1JBRElFTlRfSUQrK31gO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY29udGV4dCgpOiBhbnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJGltcGxpY2l0OiB7IHZhbHVlOiB0aGlzLnZhbHVlLCB2YWx1ZUluUGVyY2VudDogdGhpcy52YWx1ZUluUGVyY2VudCwgbWF4OiB0aGlzLm1heCB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2lyY2xlUmFkaXVzID0gNDY7XG4gICAgcHJpdmF0ZSBfY2lyY3VtZmVyZW5jZSA9IDIgKiBNYXRoLlBJICogdGhpcy5fY2lyY2xlUmFkaXVzO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBTVFJPS0VfT1BBQ0lUWV9EVklERVIgPSAxMDA7XG4gICAgcHJpdmF0ZSByZWFkb25seSBTVFJPS0VfT1BBQ0lUWV9BRERJVElPTiA9IC4yO1xuXG4gICAgcHJpdmF0ZSBhbmltYXRpb25TdGF0ZSA9IHtcbiAgICAgICAgc3Ryb2tlRGFzaG9mZnNldDogMjg5LFxuICAgICAgICBzdHJva2VPcGFjaXR5OiAxXG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBfZGlyZWN0aW9uYWxpdHk6IElneERpcmVjdGlvbmFsaXR5KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyUHJvZ3Jlc3NUcmFuc2l0aW9uKE1JTl9WQUxVRSwgdGhpcy5faW5pdFZhbHVlKTtcbiAgICAgICAgdGhpcy5fY29udGVudEluaXQgPSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICB0aGlzLl9zdmdDaXJjbGUubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICdzdHJva2UnLFxuICAgICAgICAgICAgYHVybCgjJHt0aGlzLmdyYWRpZW50SWR9KWBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCB0ZXh0Q29udGVudCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0O1xuICAgIH1cblxuICAgIHB1YmxpYyBydW5BbmltYXRpb24odmFsdWU6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5fYW5pbWF0aW9uICYmIHRoaXMuX2FuaW1hdGlvbi5wbGF5U3RhdGUgIT09ICdmaW5pc2hlZCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlSW5QZXJjZW50ID0gdGhpcy5tYXggPD0gMCA/IDAgOiB0b1BlcmNlbnQodmFsdWUsIHRoaXMubWF4KTtcblxuICAgICAgICBjb25zdCBGUkFNRVMgPSBbXTtcbiAgICAgICAgRlJBTUVTWzBdID0gey4uLnRoaXMuYW5pbWF0aW9uU3RhdGV9O1xuXG4gICAgICAgIHRoaXMuYW5pbWF0aW9uU3RhdGUuc3Ryb2tlRGFzaG9mZnNldCA9IHRoaXMuZ2V0UHJvZ3Jlc3ModmFsdWVJblBlcmNlbnQpO1xuICAgICAgICB0aGlzLmFuaW1hdGlvblN0YXRlLnN0cm9rZU9wYWNpdHkgPSB0b1BlcmNlbnQodmFsdWUsIHRoaXMubWF4KSAvIHRoaXMuU1RST0tFX09QQUNJVFlfRFZJREVSICsgdGhpcy5TVFJPS0VfT1BBQ0lUWV9BRERJVElPTjtcblxuICAgICAgICBGUkFNRVNbMV0gPSB7XG4gICAgICAgICAgICAuLi50aGlzLmFuaW1hdGlvblN0YXRlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fYW5pbWF0aW9uID0gdGhpcy5fc3ZnQ2lyY2xlLm5hdGl2ZUVsZW1lbnQuYW5pbWF0ZShGUkFNRVMsIHtcbiAgICAgICAgICAgIGVhc2luZzogJ2Vhc2Utb3V0JyxcbiAgICAgICAgICAgIGZpbGw6ICdmb3J3YXJkcycsXG4gICAgICAgICAgICBkdXJhdGlvbjogdGhpcy5hbmltYXRpb25EdXJhdGlvblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFByb2dyZXNzKHBlcmNlbnRhZ2U6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlyZWN0aW9uYWxpdHkucnRsID9cbiAgICAgICAgICAgIHRoaXMuX2NpcmN1bWZlcmVuY2UgKyAocGVyY2VudGFnZSAqIHRoaXMuX2NpcmN1bWZlcmVuY2UgLyAxMDApIDpcbiAgICAgICAgICAgIHRoaXMuX2NpcmN1bWZlcmVuY2UgLSAocGVyY2VudGFnZSAqIHRoaXMuX2NpcmN1bWZlcmVuY2UgLyAxMDApO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IHZhbHVlSW5SYW5nZSA9ICh2YWx1ZTogbnVtYmVyLCBtYXg6IG51bWJlciwgbWluID0gMCk6IG51bWJlciA9PiBNYXRoLm1heChNYXRoLm1pbih2YWx1ZSwgbWF4KSwgbWluKTtcblxuZXhwb3J0IGNvbnN0IHRvUGVyY2VudCA9ICh2YWx1ZTogbnVtYmVyLCBtYXg6IG51bWJlcikgPT4gICFtYXggPyAwIDogTWF0aC5mbG9vcigxMDAgKiB2YWx1ZSAvIG1heCk7XG5cbmV4cG9ydCBjb25zdCB0b1ZhbHVlID0gKHZhbHVlOiBudW1iZXIsIG1heDogbnVtYmVyKSA9PiBtYXggKiB2YWx1ZSAvIDEwMDtcblxuXG4iLCI8ZGl2IGNsYXNzPVwiaWd4LWxpbmVhci1iYXJfX2Jhc2VcIj5cbiAgICA8ZGl2ICNpbmRpY2F0b3IgY2xhc3M9XCJpZ3gtbGluZWFyLWJhcl9faW5kaWNhdG9yXCIgW3N0eWxlLndpZHRoXT1cIjBcIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWxpbmVhci1iYXJfX2luZGljYXRvci1zZWNvbmRhcnlcIj48L2Rpdj5cbjwvZGl2PlxuXG48c3BhblxuICAgIGNsYXNzPVwiaWd4LWxpbmVhci1iYXJfX3ZhbHVlXCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICdpZ3gtbGluZWFyLWJhcl9fdmFsdWUtLXN0YXJ0JzogdGV4dEFsaWduID09PSAnc3RhcnQnLFxuICAgICAgICAnaWd4LWxpbmVhci1iYXJfX3ZhbHVlLS1jZW50ZXInOiB0ZXh0QWxpZ24gPT09ICdjZW50ZXInLFxuICAgICAgICAnaWd4LWxpbmVhci1iYXJfX3ZhbHVlLS1lbmQnOiB0ZXh0QWxpZ24gPT09ICdlbmQnLFxuICAgICAgICAnaWd4LWxpbmVhci1iYXJfX3ZhbHVlLS10b3AnOiB0ZXh0VG9wLFxuICAgICAgICAnaWd4LWxpbmVhci1iYXJfX3ZhbHVlLS1oaWRkZW4nOiAhdGV4dFZpc2liaWxpdHlcbiAgICB9XCI+XG4gICAgICAgIHt7dGV4dCA/IHRleHQgOiB2YWx1ZUluUGVyY2VudCArICclJ319XG48L3NwYW4+XG4iLCI8c3ZnICNzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiIHZlcnNpb249XCIxLjFcIlxuICAgIHZpZXdCb3g9XCIwIDAgMTAwIDEwMFwiXG4gICAgcHJlc2VydmVBc3BlY3RSYXRpbz1cInhNaWRZTWlkIG1lZXRcIlxuICAgIHJvbGU9XCJwcm9ncmVzc2JhclwiXG4gICAgYXJpYS12YWx1ZW1pbj1cIjBcIlxuICAgIFthdHRyLmFyaWEtdmFsdWVtYXhdPVwibWF4XCJcbiAgICBbYXR0ci5hcmlhLXZhbHVlbm93XT1cInZhbHVlXCI+XG4gICAgPHN2ZzpjaXJjbGUgY2xhc3M9XCJpZ3gtY2lyY3VsYXItYmFyX19pbm5lclwiIGN4PVwiNTBcIiBjeT1cIjUwXCIgcj1cIjQ2XCIgLz5cbiAgICA8c3ZnOmNpcmNsZSAjY2lyY2xlIGNsYXNzPVwiaWd4LWNpcmN1bGFyLWJhcl9fb3V0ZXJcIiBjeD1cIjUwXCIgY3k9XCI1MFwiIHI9XCI0NlwiIC8+XG5cbiAgICA8c3ZnOmRlZnM+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ3JhZGllbnRUZW1wbGF0ZSA/IGdyYWRpZW50VGVtcGxhdGUudGVtcGxhdGUgOiBkZWZhdWx0R3JhZGllbnRUZW1wbGF0ZTtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBncmFkaWVudElkIH1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9zdmc6ZGVmcz5cblxuICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEdyYWRpZW50VGVtcGxhdGU+XG4gICAgICAgIDxzdmc6bGluZWFyR3JhZGllbnQgW2lkXT1cImdyYWRpZW50SWRcIiBncmFkaWVudFRyYW5zZm9ybT1cInJvdGF0ZSg5MClcIj5cbiAgICAgICAgICA8c3RvcCBvZmZzZXQ9XCIwJVwiICAgY2xhc3M9XCJpZ3gtY2lyY3VsYXItYmFyX19ncmFkaWVudC1zdGFydFwiIC8+XG4gICAgICAgICAgPHN0b3Agb2Zmc2V0PVwiMTAwJVwiIGNsYXNzPVwiaWd4LWNpcmN1bGFyLWJhcl9fZ3JhZGllbnQtZW5kXCIgLz5cbiAgICAgICAgPC9zdmc6bGluZWFyR3JhZGllbnQ+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvc3ZnPlxuXG48c3BhbiBjbGFzcz1cImlneC1jaXJjdWxhci1iYXJfX3RleHRcIiAqbmdJZj1cInRleHRWaXNpYmlsaXR5XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRleHRUZW1wbGF0ZSA/IHRleHRUZW1wbGF0ZS50ZW1wbGF0ZSA6IGRlZmF1bHRUZXh0VGVtcGxhdGU7XG4gICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0XCI+XG4gICAgPC9uZy1jb250YWluZXI+XG48L3NwYW4+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFRleHRUZW1wbGF0ZT5cbiAgICB7e3RleHRDb250ZW50ID8gdGV4dENvbnRlbnQ6IHZhbHVlSW5QZXJjZW50ICsgJyUnfX1cbjwvbmctdGVtcGxhdGU+XG5cbiJdfQ==
|