ontimize-web-ngx 15.5.1 → 15.6.0-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/app-header/o-app-header.component.mjs +4 -4
- package/esm2020/lib/components/app-header/o-app-header.module.mjs +5 -5
- package/esm2020/lib/components/app-sidenav/image/o-app-sidenav-image.component.mjs +4 -4
- package/esm2020/lib/components/app-sidenav/menu-group/o-app-sidenav-menu-group.component.mjs +4 -4
- package/esm2020/lib/components/app-sidenav/menu-item/o-app-sidenav-menu-item.component.mjs +4 -4
- package/esm2020/lib/components/app-sidenav/o-app-sidenav.component.mjs +4 -4
- package/esm2020/lib/components/app-sidenav/o-app-sidenav.module.mjs +5 -5
- package/esm2020/lib/components/bar-menu/locale-menu-item/o-locale-bar-menu-item.component.mjs +4 -4
- package/esm2020/lib/components/bar-menu/menu-group/o-bar-menu-group.component.mjs +4 -4
- package/esm2020/lib/components/bar-menu/menu-item/o-bar-menu-item.component.mjs +4 -4
- package/esm2020/lib/components/bar-menu/menu-nested/o-bar-menu-nested.component.mjs +4 -4
- package/esm2020/lib/components/bar-menu/menu-separator/o-bar-menu-separator.component.mjs +4 -4
- package/esm2020/lib/components/bar-menu/o-bar-menu-base.class.mjs +4 -4
- package/esm2020/lib/components/bar-menu/o-bar-menu.component.mjs +4 -4
- package/esm2020/lib/components/bar-menu/o-bar-menu.module.mjs +5 -5
- package/esm2020/lib/components/bar-menu/o-base-menu-item.class.mjs +4 -4
- package/esm2020/lib/components/breadcrumb/o-breadcrumb.component.mjs +4 -4
- package/esm2020/lib/components/breadcrumb/o-breadcrumb.module.mjs +5 -5
- package/esm2020/lib/components/button/o-button.component.mjs +4 -4
- package/esm2020/lib/components/button/o-button.module.mjs +5 -5
- package/esm2020/lib/components/button-toggle/o-button-toggle-group/o-button-toggle-group.component.mjs +4 -4
- package/esm2020/lib/components/button-toggle/o-button-toggle.component.mjs +4 -4
- package/esm2020/lib/components/button-toggle/o-button-toggle.module.mjs +5 -5
- package/esm2020/lib/components/card-menu-item/o-card-menu-item.component.mjs +4 -4
- package/esm2020/lib/components/card-menu-item/o-card-menu-item.module.mjs +5 -5
- package/esm2020/lib/components/container/column/o-column.component.mjs +4 -4
- package/esm2020/lib/components/container/column/o-column.module.mjs +5 -5
- package/esm2020/lib/components/container/column-collapsible/o-column-collapsible.component.mjs +4 -4
- package/esm2020/lib/components/container/column-collapsible/o-column-collapsible.module.mjs +5 -5
- package/esm2020/lib/components/container/o-container-collapsible-component.class.mjs +4 -4
- package/esm2020/lib/components/container/o-container-component.class.mjs +4 -4
- package/esm2020/lib/components/container/row/o-row.component.mjs +4 -4
- package/esm2020/lib/components/container/row/o-row.module.mjs +5 -5
- package/esm2020/lib/components/container/row-collapsible/o-row-collapsible.component.mjs +4 -4
- package/esm2020/lib/components/container/row-collapsible/o-row-collapsible.module.mjs +5 -5
- package/esm2020/lib/components/contextmenu/context-menu/o-context-menu-content.component.mjs +4 -4
- package/esm2020/lib/components/contextmenu/context-menu/o-wrapper-content-menu/o-wrapper-content-menu.component.mjs +4 -4
- package/esm2020/lib/components/contextmenu/context-menu-group/o-context-menu-group.component.mjs +4 -4
- package/esm2020/lib/components/contextmenu/context-menu-item/o-context-menu-item.component.mjs +4 -4
- package/esm2020/lib/components/contextmenu/context-menu-separator/o-context-menu-separator.component.mjs +4 -4
- package/esm2020/lib/components/contextmenu/o-content-menu-base-item.class.mjs +4 -4
- package/esm2020/lib/components/contextmenu/o-context-menu-overlay.service.mjs +4 -4
- package/esm2020/lib/components/contextmenu/o-context-menu.component.mjs +4 -4
- package/esm2020/lib/components/contextmenu/o-context-menu.directive.mjs +4 -4
- package/esm2020/lib/components/contextmenu/o-context-menu.module.mjs +5 -5
- package/esm2020/lib/components/contextmenu/o-context-menu.service.mjs +4 -4
- package/esm2020/lib/components/dual-list-selector/dual-list-selector-item/date/o-dual-list-selector-date-item.component.mjs +4 -4
- package/esm2020/lib/components/dual-list-selector/o-dual-list-selector.component.mjs +4 -4
- package/esm2020/lib/components/dual-list-selector/o-dual-list-selector.module.mjs +5 -5
- package/esm2020/lib/components/expandable-container/o-expandable-container.component.mjs +4 -4
- package/esm2020/lib/components/expandable-container/o-expandable-container.module.mjs +5 -5
- package/esm2020/lib/components/filter-builder/filter-builder-menu/filter-builder-menu.component.mjs +4 -4
- package/esm2020/lib/components/filter-builder/o-filter-builder-clear.directive.mjs +4 -4
- package/esm2020/lib/components/filter-builder/o-filter-builder-query.directive.mjs +4 -4
- package/esm2020/lib/components/filter-builder/o-filter-builder.component.mjs +4 -4
- package/esm2020/lib/components/filter-builder/o-filter-builder.module.mjs +5 -5
- package/esm2020/lib/components/form/guards/o-form-can-deactivate.guard.mjs +4 -4
- package/esm2020/lib/components/form/navigation/o-form-confirm-exit.service.mjs +4 -4
- package/esm2020/lib/components/form/navigation/o-form-navigation.component.mjs +6 -5
- package/esm2020/lib/components/form/o-form.component.mjs +27 -13
- package/esm2020/lib/components/form/o-form.module.mjs +5 -5
- package/esm2020/lib/components/form/services/o-form-message.service.mjs +4 -4
- package/esm2020/lib/components/form/toolbar/o-form-toolbar.component.mjs +4 -4
- package/esm2020/lib/components/form/toolbar/o-form-toolbar.module.mjs +5 -5
- package/esm2020/lib/components/form-container/o-form-container.component.mjs +4 -4
- package/esm2020/lib/components/form-container/o-form-container.module.mjs +5 -5
- package/esm2020/lib/components/grid/grid-item/o-grid-item.component.mjs +4 -4
- package/esm2020/lib/components/grid/grid-item/o-grid-item.directive.mjs +4 -4
- package/esm2020/lib/components/grid/o-grid.component.mjs +5 -5
- package/esm2020/lib/components/grid/o-grid.module.mjs +5 -5
- package/esm2020/lib/components/grid/skeketon/o-grid-skeleton.component.mjs +4 -4
- package/esm2020/lib/components/image/fullscreen/fullscreen-dialog.component.mjs +4 -4
- package/esm2020/lib/components/image/o-image.component.mjs +6 -6
- package/esm2020/lib/components/image/o-image.module.mjs +5 -5
- package/esm2020/lib/components/input/checkbox/o-checkbox.component.mjs +4 -4
- package/esm2020/lib/components/input/checkbox/o-checkbox.module.mjs +5 -5
- package/esm2020/lib/components/input/combo/combo-renderer/boolean/o-combo-renderer-boolean.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-renderer/currency/o-combo-renderer-currency.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-renderer/date/o-combo-renderer-date.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-renderer/icon/o-combo-renderer-icon.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-renderer/integer/o-combo-renderer-integer.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-renderer/o-combo-renderer.class.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-renderer/percentage/o-combo-renderer-percentage.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-renderer/real/o-combo-renderer-real.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-search/o-combo-search.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/o-combo.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/o-combo.module.mjs +5 -5
- package/esm2020/lib/components/input/currency-input/o-currency-input.component.mjs +5 -5
- package/esm2020/lib/components/input/currency-input/o-currency-input.module.mjs +5 -5
- package/esm2020/lib/components/input/date-input/o-date-input.component.mjs +4 -4
- package/esm2020/lib/components/input/date-input/o-date-input.module.mjs +5 -5
- package/esm2020/lib/components/input/date-range/o-daterange-input.component.mjs +4 -4
- package/esm2020/lib/components/input/date-range/o-daterange-input.module.mjs +5 -5
- package/esm2020/lib/components/input/date-range-legacy/o-daterange-input.component.mjs +4 -4
- package/esm2020/lib/components/input/date-range-legacy/o-daterange-input.directive.mjs +4 -4
- package/esm2020/lib/components/input/date-range-legacy/o-daterange-input.module.mjs +5 -5
- package/esm2020/lib/components/input/date-range-legacy/o-daterange-picker.component.mjs +4 -4
- package/esm2020/lib/components/input/email-input/o-email-input.component.mjs +4 -4
- package/esm2020/lib/components/input/email-input/o-email-input.module.mjs +5 -5
- package/esm2020/lib/components/input/file-input/o-file-input.component.mjs +9 -5
- package/esm2020/lib/components/input/file-input/o-file-input.module.mjs +5 -5
- package/esm2020/lib/components/input/hour-input/o-hour-input.component.mjs +4 -4
- package/esm2020/lib/components/input/hour-input/o-hour-input.module.mjs +5 -5
- package/esm2020/lib/components/input/html-input/o-html-input.component.mjs +4 -4
- package/esm2020/lib/components/input/html-input/o-html-input.module.mjs +5 -5
- package/esm2020/lib/components/input/integer-input/o-integer-input.component.mjs +4 -4
- package/esm2020/lib/components/input/integer-input/o-integer-input.module.mjs +5 -5
- package/esm2020/lib/components/input/listpicker/listpicker-renderer/currency/o-list-picker-renderer-currency.component.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/listpicker-renderer/date/o-list-picker-renderer-date.component.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/listpicker-renderer/integer/o-list-picker-renderer-integer.component.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/listpicker-renderer/o-list-picker-renderer.class.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/listpicker-renderer/percentage/o-list-picker-renderer-percentage.component.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/listpicker-renderer/real/o-list-picker-renderer-real.component.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/o-list-picker-dialog.component.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/o-list-picker.component.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/o-list-picker.module.mjs +5 -5
- package/esm2020/lib/components/input/nif-input/o-nif-input.component.mjs +4 -4
- package/esm2020/lib/components/input/nif-input/o-nif-input.module.mjs +5 -5
- package/esm2020/lib/components/input/o-boolean-form-data-component.class.mjs +4 -4
- package/esm2020/lib/components/input/o-form-service-component.class.mjs +20 -11
- package/esm2020/lib/components/input/password-input/o-password-input.component.mjs +4 -4
- package/esm2020/lib/components/input/password-input/o-password-input.module.mjs +5 -5
- package/esm2020/lib/components/input/percent-input/o-percent-input.component.mjs +4 -4
- package/esm2020/lib/components/input/percent-input/o-percent-input.module.mjs +5 -5
- package/esm2020/lib/components/input/phone-input/data/country-code.mjs +4 -4
- package/esm2020/lib/components/input/phone-input/o-phone-input.component.mjs +4 -4
- package/esm2020/lib/components/input/phone-input/o-phone-input.module.mjs +5 -5
- package/esm2020/lib/components/input/radio/o-radio.component.mjs +4 -4
- package/esm2020/lib/components/input/radio/o-radio.module.mjs +5 -5
- package/esm2020/lib/components/input/real-input/o-real-input.component.mjs +4 -4
- package/esm2020/lib/components/input/real-input/o-real-input.module.mjs +5 -5
- package/esm2020/lib/components/input/search-input/o-search-input.component.mjs +4 -4
- package/esm2020/lib/components/input/search-input/o-search-input.module.mjs +5 -5
- package/esm2020/lib/components/input/slide-toggle/o-slide-toggle.component.mjs +4 -4
- package/esm2020/lib/components/input/slide-toggle/o-slide-toggle.module.mjs +5 -5
- package/esm2020/lib/components/input/slider/o-slider.component.mjs +4 -4
- package/esm2020/lib/components/input/slider/o-slider.module.mjs +5 -5
- package/esm2020/lib/components/input/text-input/o-text-input.component.mjs +4 -4
- package/esm2020/lib/components/input/text-input/o-text-input.module.mjs +5 -5
- package/esm2020/lib/components/input/textarea-input/o-textarea-input.component.mjs +4 -4
- package/esm2020/lib/components/input/textarea-input/o-textarea-input.module.mjs +5 -5
- package/esm2020/lib/components/input/time-input/o-time-input.component.mjs +4 -4
- package/esm2020/lib/components/input/time-input/o-time-input.module.mjs +5 -5
- package/esm2020/lib/components/language-selector/o-language-selector.component.mjs +4 -4
- package/esm2020/lib/components/language-selector/o-language-selector.module.mjs +5 -5
- package/esm2020/lib/components/list/list-item/o-list-item.component.mjs +4 -4
- package/esm2020/lib/components/list/list-item/o-list-item.directive.mjs +4 -4
- package/esm2020/lib/components/list/o-list.component.mjs +5 -5
- package/esm2020/lib/components/list/o-list.module.mjs +5 -5
- package/esm2020/lib/components/list/renderers/avatar/o-list-item-avatar.component.mjs +4 -4
- package/esm2020/lib/components/list/renderers/card/o-list-item-card.component.mjs +4 -4
- package/esm2020/lib/components/list/renderers/card-image/o-list-item-card-image.component.mjs +4 -4
- package/esm2020/lib/components/list/renderers/o-list-item-card-renderer.class.mjs +4 -4
- package/esm2020/lib/components/list/renderers/o-list-item-text-renderer.class.mjs +4 -4
- package/esm2020/lib/components/list/renderers/text/o-list-item-text.component.mjs +4 -4
- package/esm2020/lib/components/list/skeleton/o-list-skeleton.component.mjs +4 -4
- package/esm2020/lib/components/material/ckeditor/ck-editor.component.mjs +4 -4
- package/esm2020/lib/components/material/ckeditor/ck-editor.module.mjs +5 -5
- package/esm2020/lib/components/o-data-toolbar/o-data-toolbar.component.mjs +4 -4
- package/esm2020/lib/components/o-data-toolbar/o-data-toolbar.module.mjs +5 -5
- package/esm2020/lib/components/o-form-data-component.class.mjs +4 -4
- package/esm2020/lib/components/o-service-base-component.class.mjs +35 -24
- package/esm2020/lib/components/o-service-component.class.mjs +8 -8
- package/esm2020/lib/components/o-skeleton.component.mjs +4 -4
- package/esm2020/lib/components/table/column/calculated/o-table-column-calculated.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-editor/boolean/o-table-cell-editor-boolean.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-editor/date/o-table-cell-editor-date.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-editor/email/o-table-cell-editor-email.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-editor/integer/o-table-cell-editor-integer.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-editor/o-base-table-cell-editor.class.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-editor/real/o-table-cell-editor-real.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-editor/text/o-table-cell-editor-text.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-editor/time/o-table-cell-editor-time.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/action/o-table-cell-renderer-action.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/boolean/o-table-cell-renderer-boolean.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/currency/o-table-cell-renderer-currency.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/date/o-table-cell-renderer-date.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/image/o-table-cell-renderer-image.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/integer/o-table-cell-renderer-integer.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/o-base-table-cell-renderer.class.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/percentage/o-table-cell-renderer-percentage.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/real/o-table-cell-renderer-real.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/service/o-table-cell-renderer-service.component.mjs +23 -9
- package/esm2020/lib/components/table/column/cell-renderer/time/o-table-cell-renderer-time.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/translate/o-table-cell-renderer-translate.component.mjs +4 -4
- package/esm2020/lib/components/table/column/o-table-column.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/contextmenu/o-table-context-menu.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/dialog/apply-configuration/o-table-apply-configuration-dialog.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/dialog/export/o-table-export-dialog.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/dialog/group-by-columns/o-table-group-by-columns-dialog.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/dialog/o-table-base-dialog.class.mjs +4 -4
- package/esm2020/lib/components/table/extensions/dialog/store-configuration/o-table-store-configuration-dialog.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/dialog/visible-columns/o-table-visible-columns-dialog.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/export-button/o-table-export-button.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/export-button/o-table-export-button.service.mjs +4 -4
- package/esm2020/lib/components/table/extensions/footer/aggregate/o-table-column-aggregate.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/footer/expanded/o-table-expanded-footer.directive.mjs +4 -4
- package/esm2020/lib/components/table/extensions/footer/paginator/o-table-mat-paginator-intl.mjs +4 -4
- package/esm2020/lib/components/table/extensions/footer/paginator/o-table-paginator.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/o-table-header-components.mjs +3 -2
- package/esm2020/lib/components/table/extensions/header/table-button/o-table-button.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-buttons/o-table-buttons.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-column-resizer/o-table-column-resizer.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-column-select-all/o-table-column-select-all.directive.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-columns-filter/columns/o-table-columns-filter-column.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-columns-filter/o-table-columns-filter.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-columns-grouping/columns/o-table-columns-grouping-column.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-columns-grouping/o-table-columns-grouping.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-header/o-table-header.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-header-column-filter-icon/o-table-header-column-filter-icon.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-header-select-all/o-table-header-select-all.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-insertable-row/o-table-insertable-row.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-menu/o-table-menu.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-option/o-table-option.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-quickfilter/o-table-quickfilter.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/o-table-datasource.service.mjs +4 -4
- package/esm2020/lib/components/table/extensions/o-table-strategy.service.mjs +4 -4
- package/esm2020/lib/components/table/extensions/o-table.dao.mjs +2 -2
- package/esm2020/lib/components/table/extensions/pipes/o-table-row-class.pipe.mjs +4 -4
- package/esm2020/lib/components/table/extensions/row/o-table-row.directive.mjs +4 -4
- package/esm2020/lib/components/table/extensions/row/table-row-expandable/o-table-row-expandable.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/skeleton/o-table-skeleton.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/sort/o-mat-sort-header.mjs +4 -4
- package/esm2020/lib/components/table/extensions/sort/o-mat-sort-module.mjs +5 -5
- package/esm2020/lib/components/table/extensions/sort/o-mat-sort.mjs +4 -4
- package/esm2020/lib/components/table/o-table.component.mjs +20 -15
- package/esm2020/lib/components/table/o-table.module.mjs +6 -6
- package/esm2020/lib/components/tree/header/tree-menu/o-tree-menu.component.mjs +4 -4
- package/esm2020/lib/components/tree/o-tree-dao.service.mjs +4 -4
- package/esm2020/lib/components/tree/o-tree.component.mjs +6 -6
- package/esm2020/lib/components/tree/o-tree.module.mjs +5 -5
- package/esm2020/lib/components/tree/tree-node/tree-node.component.mjs +4 -4
- package/esm2020/lib/components/user-info/o-user-info.component.mjs +4 -4
- package/esm2020/lib/components/user-info/o-user-info.module.mjs +5 -5
- package/esm2020/lib/components/user-info/user-info-configuration/o-user-info-configuration.directive.mjs +4 -4
- package/esm2020/lib/components/user-info/user-info-configuration-item/o-user-info-configuration-item.directive.mjs +4 -4
- package/esm2020/lib/config/app-config.mjs +4 -1
- package/esm2020/lib/config/o-modules.mjs +5 -5
- package/esm2020/lib/config/o-providers.mjs +9 -4
- package/esm2020/lib/directives/input-regulate.directive.mjs +4 -4
- package/esm2020/lib/directives/keyboard-listener.directive.mjs +4 -4
- package/esm2020/lib/directives/locker.directive.mjs +4 -4
- package/esm2020/lib/directives/o-file-drag-and-drop.directive.mjs +4 -4
- package/esm2020/lib/directives/o-hidden.directive.mjs +4 -4
- package/esm2020/lib/directives/o-mat-error.directive.mjs +4 -4
- package/esm2020/lib/directives/o-mat-prefix.directive.mjs +4 -4
- package/esm2020/lib/directives/o-mat-suffix.directive.mjs +4 -4
- package/esm2020/lib/directives/o-tab-group.directive.mjs +4 -4
- package/esm2020/lib/interfaces/base-response.interface.mjs +2 -0
- package/esm2020/lib/interfaces/data-service.interface.mjs +1 -1
- package/esm2020/lib/interfaces/form-data-component.interface.mjs +1 -1
- package/esm2020/lib/interfaces/index.mjs +4 -1
- package/esm2020/lib/interfaces/jsonapi-response.interface.mjs +2 -0
- package/esm2020/lib/interfaces/name-convention.interface.mjs +2 -0
- package/esm2020/lib/interfaces/prefereces-service.interface.mjs +2 -0
- package/esm2020/lib/interfaces/service-response-adapter.interface.mjs +1 -1
- package/esm2020/lib/interfaces/service-response.interface.mjs +1 -1
- package/esm2020/lib/layouts/app-layout/app-layout-header/o-app-layout-header.component.mjs +4 -4
- package/esm2020/lib/layouts/app-layout/app-layout-sidenav/o-app-layout-sidenav.component.mjs +4 -4
- package/esm2020/lib/layouts/app-layout/o-app-layout.component.mjs +4 -4
- package/esm2020/lib/layouts/app-layout/o-app-layout.module.mjs +5 -5
- package/esm2020/lib/layouts/card-menu-layout/o-card-menu-layout.component.mjs +4 -4
- package/esm2020/lib/layouts/card-menu-layout/o-card-menu-layout.module.mjs +5 -5
- package/esm2020/lib/layouts/form-layout/dialog/o-form-layout-dialog.component.mjs +4 -4
- package/esm2020/lib/layouts/form-layout/dialog/options/o-form-layout-dialog-options.directive.mjs +4 -4
- package/esm2020/lib/layouts/form-layout/directives/o-form-layout-manager-content.directive.mjs +4 -4
- package/esm2020/lib/layouts/form-layout/guards/o-form-layout-can-activate-child.guard.mjs +4 -4
- package/esm2020/lib/layouts/form-layout/o-form-layout-manager.component.mjs +4 -4
- package/esm2020/lib/layouts/form-layout/o-form-layout-manager.module.mjs +5 -5
- package/esm2020/lib/layouts/form-layout/split-pane/o-form-layout-split-pane.component.mjs +4 -4
- package/esm2020/lib/layouts/form-layout/split-pane/options/o-form-layout-split-pane-options.directive.mjs +4 -4
- package/esm2020/lib/layouts/form-layout/tabgroup/o-form-layout-tabgroup.component.mjs +4 -4
- package/esm2020/lib/layouts/form-layout/tabgroup/options/o-form-layout-tabgroup-options.directive.mjs +4 -4
- package/esm2020/lib/ontimize-web-ngx.module.mjs +5 -5
- package/esm2020/lib/pipes/columns-filter.pipe.mjs +4 -4
- package/esm2020/lib/pipes/is-empty-value.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-currency.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-icon.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-integer.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-moment.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-percentage.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-real.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-safe.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-translate.pipe.mjs +8 -8
- package/esm2020/lib/pipes/order-by.pipe.mjs +4 -4
- package/esm2020/lib/services/app-menu.service.mjs +4 -4
- package/esm2020/lib/services/appearance.service.mjs +4 -4
- package/esm2020/lib/services/auth-guard.service.mjs +4 -4
- package/esm2020/lib/services/auth.service.mjs +4 -4
- package/esm2020/lib/services/base-data-service.class.mjs +19 -0
- package/esm2020/lib/services/base-service.class.mjs +36 -9
- package/esm2020/lib/services/currency.service.mjs +4 -4
- package/esm2020/lib/services/dialog.service.mjs +4 -4
- package/esm2020/lib/services/factories.mjs +73 -4
- package/esm2020/lib/services/icon.service.mjs +4 -4
- package/esm2020/lib/services/index.mjs +4 -1
- package/esm2020/lib/services/jsonapi/index.mjs +5 -0
- package/esm2020/lib/services/jsonapi/jsonapi-preferences.service.mjs +45 -0
- package/esm2020/lib/services/jsonapi/jsonapi-service-response.adapter.mjs +31 -0
- package/esm2020/lib/services/jsonapi/jsonapi-service-response.class.mjs +45 -0
- package/esm2020/lib/services/jsonapi/jsonapi.service.mjs +166 -0
- package/esm2020/lib/services/local-storage.service.mjs +4 -4
- package/esm2020/lib/services/login-storage.service.mjs +4 -4
- package/esm2020/lib/services/moment.service.mjs +4 -4
- package/esm2020/lib/services/name-convention/base-name-convention.service.mjs +59 -0
- package/esm2020/lib/services/name-convention/index.mjs +4 -0
- package/esm2020/lib/services/name-convention/name-convention-lower.service.mjs +11 -0
- package/esm2020/lib/services/name-convention/name-convention-upper.service.mjs +11 -0
- package/esm2020/lib/services/name-convention/name-convention.service.mjs +24 -0
- package/esm2020/lib/services/navigation.service.mjs +4 -4
- package/esm2020/lib/services/number.service.mjs +4 -4
- package/esm2020/lib/services/o-auth.service.mjs +4 -4
- package/esm2020/lib/services/o-breadcrumb.service.mjs +4 -4
- package/esm2020/lib/services/o-error-dialog-manager.service.mjs +4 -4
- package/esm2020/lib/services/o-form-layout-manager.service.mjs +4 -4
- package/esm2020/lib/services/o-modules-info.service.mjs +4 -4
- package/esm2020/lib/services/o-user-info.service.mjs +4 -4
- package/esm2020/lib/services/ontimize/index.mjs +4 -1
- package/esm2020/lib/services/ontimize/o-preference-query-argument.adapter.mjs +17 -0
- package/esm2020/lib/services/ontimize/o-preference-response.adapter.mjs +22 -0
- package/esm2020/lib/services/ontimize/ontimize-base-service.class.mjs +7 -12
- package/esm2020/lib/services/ontimize/ontimize-ee.service.mjs +33 -12
- package/esm2020/lib/services/ontimize/ontimize-export-3xx.service.mjs +6 -6
- package/esm2020/lib/services/ontimize/ontimize-export.service.mjs +6 -6
- package/esm2020/lib/services/ontimize/ontimize-file.service.mjs +6 -6
- package/esm2020/lib/services/ontimize/ontimize-preferences.service.mjs +58 -0
- package/esm2020/lib/services/ontimize/ontimize-service-response.adapter.mjs +7 -4
- package/esm2020/lib/services/ontimize/ontimize.service.mjs +32 -23
- package/esm2020/lib/services/ontimize-export-data-base-provider.service.mjs +4 -4
- package/esm2020/lib/services/ontimize-export-data-provider-3x.service.mjs +4 -4
- package/esm2020/lib/services/ontimize-export-data-provider.service.mjs +4 -4
- package/esm2020/lib/services/ontimize-icon-registry.service.mjs +4 -4
- package/esm2020/lib/services/pagination-context.service.mjs +4 -4
- package/esm2020/lib/services/parser/o-service-response.parser.mjs +21 -4
- package/esm2020/lib/services/permissions/o-permissions.module.mjs +5 -5
- package/esm2020/lib/services/permissions/ontimize-ee-permissions.service.mjs +4 -4
- package/esm2020/lib/services/permissions/ontimize-permissions.service.mjs +4 -4
- package/esm2020/lib/services/permissions/permissions-can-activate.guard.mjs +4 -4
- package/esm2020/lib/services/permissions/permissions.service.mjs +4 -4
- package/esm2020/lib/services/query-arguments/base-query-argument.adapter.mjs +9 -0
- package/esm2020/lib/services/query-arguments/base-query-argument.interface.mjs +2 -0
- package/esm2020/lib/services/query-arguments/index.mjs +5 -0
- package/esm2020/lib/services/query-arguments/jsonapi-query-arguments.adapter.mjs +63 -0
- package/esm2020/lib/services/query-arguments/ontimize-query-arguments.adapter.mjs +19 -0
- package/esm2020/lib/services/remote-config.service.mjs +5 -5
- package/esm2020/lib/services/share-can-activate-child.service.mjs +4 -4
- package/esm2020/lib/services/snackbar.service.mjs +4 -4
- package/esm2020/lib/services/state/o-app-menu-component-state.service.mjs +4 -4
- package/esm2020/lib/services/state/o-component-state.service.mjs +10 -10
- package/esm2020/lib/services/state/o-filter-builder-component-state.service.mjs +4 -4
- package/esm2020/lib/services/state/o-form-layout-manager-component-state.service.mjs +4 -4
- package/esm2020/lib/services/state/o-grid-component-state.service.mjs +4 -4
- package/esm2020/lib/services/state/o-list-component-state.service.mjs +4 -4
- package/esm2020/lib/services/state/o-table-component-state.service.mjs +4 -4
- package/esm2020/lib/services/state/o-tree-component-state.service.mjs +4 -4
- package/esm2020/lib/services/translate/o-translate.parser.mjs +4 -4
- package/esm2020/lib/services/translate/o-translate.service.mjs +4 -4
- package/esm2020/lib/shared/components/dialog/o-dialog-internal.component.mjs +4 -4
- package/esm2020/lib/shared/components/dialog/o-dialog.component.mjs +4 -4
- package/esm2020/lib/shared/components/error403/o-error-403.component.mjs +4 -4
- package/esm2020/lib/shared/components/filter/load-filter/o-load-filter-dialog.component.mjs +4 -4
- package/esm2020/lib/shared/components/filter/store-filter/o-store-filter-dialog.component.mjs +4 -4
- package/esm2020/lib/shared/components/snackbar/o-snackbar-base.class.mjs +4 -4
- package/esm2020/lib/shared/components/snackbar/o-snackbar.component.mjs +4 -4
- package/esm2020/lib/shared/components/validation/o-error.component.mjs +4 -4
- package/esm2020/lib/shared/components/validation/o-validator.component.mjs +4 -4
- package/esm2020/lib/shared/material/custom.material.module.mjs +5 -5
- package/esm2020/lib/shared/material/date/ontimize-moment-date-adapter.mjs +4 -4
- package/esm2020/lib/shared/shared.module.mjs +5 -5
- package/esm2020/lib/types/config.type.mjs +1 -1
- package/esm2020/lib/types/configure-service-args.type.mjs +1 -1
- package/esm2020/lib/types/index.mjs +5 -1
- package/esm2020/lib/types/json-query-parameter.type.mjs +2 -0
- package/esm2020/lib/types/preferences.type.mjs +2 -0
- package/esm2020/lib/types/query-params.type.mjs +2 -0
- package/esm2020/lib/types/service-configuration.type.mjs +2 -0
- package/esm2020/lib/types/service-request-param.type.mjs +1 -1
- package/esm2020/lib/types/service-type.type.mjs +8 -0
- package/esm2020/lib/util/codes.mjs +2 -1
- package/esm2020/lib/util/index.mjs +2 -1
- package/esm2020/lib/util/preference-mapping-util.mjs +80 -0
- package/esm2020/lib/util/sqltypes.mjs +5 -1
- package/esm2020/lib/util/util.mjs +103 -12
- package/fesm2015/ontimize-web-ngx.mjs +3564 -2637
- package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
- package/fesm2020/ontimize-web-ngx.mjs +3560 -2636
- package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
- package/lib/components/form/navigation/o-form-navigation.component.d.ts +3 -1
- package/lib/components/form/o-form.component.d.ts +12 -7
- package/lib/components/grid/o-grid.component.d.ts +2 -1
- package/lib/components/input/file-input/o-file-input.component.d.ts +3 -1
- package/lib/components/input/o-form-service-component.class.d.ts +11 -4
- package/lib/components/list/o-list.component.d.ts +2 -1
- package/lib/components/o-service-base-component.class.d.ts +8 -4
- package/lib/components/o-service-component.class.d.ts +1 -1
- package/lib/components/table/column/cell-renderer/service/o-table-cell-renderer-service.component.d.ts +7 -2
- package/lib/components/table/column/o-table-column.component.d.ts +1 -1
- package/lib/components/table/extensions/o-table.dao.d.ts +4 -2
- package/lib/components/table/o-table.component.d.ts +4 -2
- package/lib/components/table/o-table.module.d.ts +1 -1
- package/lib/config/app-config.d.ts +1 -0
- package/lib/config/o-directives.d.ts +1 -1
- package/lib/interfaces/base-response.interface.d.ts +7 -0
- package/lib/interfaces/data-service.interface.d.ts +1 -0
- package/lib/interfaces/form-data-component.interface.d.ts +1 -0
- package/lib/interfaces/index.d.ts +3 -0
- package/lib/interfaces/jsonapi-response.interface.d.ts +9 -0
- package/lib/interfaces/name-convention.interface.d.ts +9 -0
- package/lib/interfaces/prefereces-service.interface.d.ts +7 -0
- package/lib/interfaces/service-response-adapter.interface.d.ts +4 -2
- package/lib/interfaces/service-response.interface.d.ts +2 -6
- package/lib/services/base-data-service.class.d.ts +17 -0
- package/lib/services/base-service.class.d.ts +27 -20
- package/lib/services/factories.d.ts +30 -0
- package/lib/services/index.d.ts +3 -0
- package/lib/services/jsonapi/index.d.ts +4 -0
- package/lib/services/jsonapi/jsonapi-preferences.service.d.ts +13 -0
- package/lib/services/jsonapi/jsonapi-service-response.adapter.d.ts +12 -0
- package/lib/services/jsonapi/jsonapi-service-response.class.d.ts +23 -0
- package/lib/services/jsonapi/jsonapi.service.d.ts +31 -0
- package/lib/services/name-convention/base-name-convention.service.d.ts +12 -0
- package/lib/services/name-convention/index.d.ts +3 -0
- package/lib/services/name-convention/name-convention-lower.service.d.ts +5 -0
- package/lib/services/name-convention/name-convention-upper.service.d.ts +5 -0
- package/lib/services/name-convention/name-convention.service.d.ts +10 -0
- package/lib/services/ontimize/index.d.ts +3 -0
- package/lib/services/ontimize/o-preference-query-argument.adapter.d.ts +7 -0
- package/lib/services/ontimize/o-preference-response.adapter.d.ts +9 -0
- package/lib/services/ontimize/ontimize-base-service.class.d.ts +3 -3
- package/lib/services/ontimize/ontimize-ee.service.d.ts +1 -0
- package/lib/services/ontimize/ontimize-export-3xx.service.d.ts +3 -2
- package/lib/services/ontimize/ontimize-export.service.d.ts +2 -2
- package/lib/services/ontimize/ontimize-file.service.d.ts +3 -2
- package/lib/services/ontimize/ontimize-preferences.service.d.ts +16 -0
- package/lib/services/ontimize/ontimize-service-response.adapter.d.ts +6 -5
- package/lib/services/ontimize/ontimize.service.d.ts +2 -0
- package/lib/services/parser/o-service-response.parser.d.ts +11 -5
- package/lib/services/query-arguments/base-query-argument.adapter.d.ts +6 -0
- package/lib/services/query-arguments/base-query-argument.interface.d.ts +3 -0
- package/lib/services/query-arguments/index.d.ts +4 -0
- package/lib/services/query-arguments/jsonapi-query-arguments.adapter.d.ts +12 -0
- package/lib/services/query-arguments/ontimize-query-arguments.adapter.d.ts +8 -0
- package/lib/types/config.type.d.ts +3 -1
- package/lib/types/configure-service-args.type.d.ts +5 -5
- package/lib/types/index.d.ts +4 -0
- package/lib/types/json-query-parameter.type.d.ts +15 -0
- package/lib/types/preferences.type.d.ts +7 -0
- package/lib/types/query-params.type.d.ts +11 -0
- package/lib/types/service-configuration.type.d.ts +7 -0
- package/lib/types/service-request-param.type.d.ts +5 -5
- package/lib/types/service-type.type.d.ts +5 -0
- package/lib/util/codes.d.ts +6 -5
- package/lib/util/index.d.ts +1 -0
- package/lib/util/preference-mapping-util.d.ts +74 -0
- package/lib/util/util.d.ts +10 -2
- package/package.json +1 -1
|
@@ -11,10 +11,10 @@ import { NavigationService } from '../services/navigation.service';
|
|
|
11
11
|
import { PermissionsService } from '../services/permissions/permissions.service';
|
|
12
12
|
import { OTranslateService } from '../services/translate/o-translate.service';
|
|
13
13
|
import { O_GLOBAL_CONFIG } from '../types/o-global-config.type';
|
|
14
|
-
import { PermissionsUtils } from '../util';
|
|
15
14
|
import { ObservableWrapper } from '../util/async';
|
|
16
15
|
import { Codes } from '../util/codes';
|
|
17
16
|
import { FilterExpressionUtils } from '../util/filter-expression.utils';
|
|
17
|
+
import { PermissionsUtils } from '../util/permissions';
|
|
18
18
|
import { Util } from '../util/util';
|
|
19
19
|
import { OFormComponent } from './form/o-form.component';
|
|
20
20
|
import { AbstractOServiceBaseComponent, DEFAULT_INPUTS_O_SERVICE_BASE_COMPONENT } from './o-service-base-component.class';
|
|
@@ -811,8 +811,8 @@ export class AbstractOServiceComponent extends AbstractOServiceBaseComponent {
|
|
|
811
811
|
return (o1, o2) => this.keysArray.every(key => o1[key] === o2[key]);
|
|
812
812
|
}
|
|
813
813
|
}
|
|
814
|
-
AbstractOServiceComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
815
|
-
AbstractOServiceComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.
|
|
814
|
+
AbstractOServiceComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AbstractOServiceComponent, deps: [{ token: i0.Injector }, { token: i0.ElementRef }, { token: i1.OFormComponent }], target: i0.ɵɵFactoryTarget.Directive });
|
|
815
|
+
AbstractOServiceComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: AbstractOServiceComponent, inputs: { oattr: ["attr", "oattr"], service: "service", serviceType: ["service-type", "serviceType"], entity: "entity", queryOnInit: ["query-on-init", "queryOnInit"], queryOnBind: ["query-on-bind", "queryOnBind"], queryOnEvent: ["query-on-event", "queryOnEvent"], pageable: "pageable", columns: "columns", keys: "keys", parentKeys: ["parent-keys", "parentKeys"], staticData: ["static-data", "staticData"], queryMethod: ["query-method", "queryMethod"], paginatedQueryMethod: ["paginated-query-method", "paginatedQueryMethod"], oQueryRows: ["query-rows", "oQueryRows"], insertMethod: ["insert-method", "insertMethod"], updateMethod: ["update-method", "updateMethod"], deleteMethod: ["delete-method", "deleteMethod"], storeState: ["store-state", "storeState"], queryWithNullParentKeys: ["query-with-null-parent-keys", "queryWithNullParentKeys"], queryFallbackFunction: ["query-fallback-function", "queryFallbackFunction"], configureServiceArgs: ["configure-service-args", "configureServiceArgs"], _title: ["title", "_title"], ovisible: ["visible", "ovisible"], oenabled: ["enabled", "oenabled"], controls: "controls", detailMode: ["detail-mode", "detailMode"], detailFormRoute: ["detail-form-route", "detailFormRoute"], recursiveDetail: ["recursive-detail", "recursiveDetail"], detailButtonInRow: ["detail-button-in-row", "detailButtonInRow"], detailButtonInRowIcon: ["detail-button-in-row-icon", "detailButtonInRowIcon"], editFormRoute: ["edit-form-route", "editFormRoute"], recursiveEdit: ["recursive-edit", "recursiveEdit"], editButtonInRow: ["edit-button-in-row", "editButtonInRow"], editButtonInRowIcon: ["edit-button-in-row-icon", "editButtonInRowIcon"], insertButton: ["insert-button", "insertButton"], rowHeight: ["row-height", "rowHeight"], insertFormRoute: ["insert-form-route", "insertFormRoute"], recursiveInsert: ["recursive-insert", "recursiveInsert"], filterCaseSensitive: ["filter-case-sensitive", "filterCaseSensitive"], quickFilter: ["quick-filter", "quickFilter"], quickFilterPlaceholder: ["quick-filter-placeholder", "quickFilterPlaceholder"], paginationControls: ["pagination-controls", "paginationControls"], pageSizeOptions: ["page-size-options", "pageSizeOptions"], quickFilterAppearance: ["quick-filter-appearance", "quickFilterAppearance"], disablePageSizeCalculation: ["disable-page-size-calculation", "disablePageSizeCalculation"] }, outputs: { onClick: "onClick", onDoubleClick: "onDoubleClick", onDataLoaded: "onDataLoaded", onPaginatedDataLoaded: "onPaginatedDataLoaded", onSearch: "onSearch" }, viewQueries: [{ propertyName: "matpaginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "searchInputComponent", first: true, predicate: i0.forwardRef(function () { return OSearchInputComponent; }), descendants: true }], usesInheritance: true, ngImport: i0 });
|
|
816
816
|
__decorate([
|
|
817
817
|
BooleanInputConverter(),
|
|
818
818
|
__metadata("design:type", Boolean)
|
|
@@ -857,7 +857,7 @@ __decorate([
|
|
|
857
857
|
BooleanInputConverter(),
|
|
858
858
|
__metadata("design:type", Boolean)
|
|
859
859
|
], AbstractOServiceComponent.prototype, "recursiveInsert", void 0);
|
|
860
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
860
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AbstractOServiceComponent, decorators: [{
|
|
861
861
|
type: Directive,
|
|
862
862
|
args: [{
|
|
863
863
|
inputs: DEFAULT_INPUTS_O_SERVICE_COMPONENT,
|
|
@@ -872,9 +872,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
872
872
|
}] } });
|
|
873
873
|
export class OServiceComponent extends AbstractOServiceComponent {
|
|
874
874
|
}
|
|
875
|
-
OServiceComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
876
|
-
OServiceComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.
|
|
877
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
875
|
+
OServiceComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OServiceComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
876
|
+
OServiceComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: OServiceComponent, usesInheritance: true, ngImport: i0 });
|
|
877
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OServiceComponent, decorators: [{
|
|
878
878
|
type: Directive
|
|
879
879
|
}] });
|
|
880
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1zZXJ2aWNlLWNvbXBvbmVudC5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL28tc2VydmljZS1jb21wb25lbnQuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdHLE9BQU8sRUFBRSxZQUFZLEVBQWEsTUFBTSw2QkFBNkIsQ0FBQztBQUV0RSxPQUFPLEVBQUUsZUFBZSxFQUE0QixNQUFNLE1BQU0sQ0FBQztBQUdqRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUNsRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUV4RixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUVyRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUdqRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUc5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFJaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsS0FBSyxFQUFF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cUIsRUFBRTs7b0VBQ1c7QUFHbkM7SUFBQyxxQkFBcUIsRUFBRTs7Z0VBQ2lCO0FBQ3pDO0lBQUMscUJBQXFCLEVBQUU7O2tFQUNTO0FBRWpDO0lBQUMscUJBQXFCLEVBQUU7OytEQUNGO0FBQ3RCO0lBQUMscUJBQXFCLEVBQUU7O3FFQUNXO0FBQ25DO0lBQUMscUJBQXFCLEVBQUU7OzZFQUNvQjtBQStCNUM7SUFBQyxxQkFBcUIsRUFBRTs7a0VBQ21COzRGQTVFdkIseUJBQXlCO2tCQUo5QyxTQUFTO21CQUFDO29CQUNULE1BQU0sRUFBRSxrQ0FBa0M7b0JBQzFDLE9BQU8sRUFBRSxtQ0FBbUM7aUJBQzdDO3FKQUkwQixZQUFZO3NCQUFwQyxTQUFTO3VCQUFDLFlBQVk7Z0JBa0JiLFFBQVEsTUFFUixRQUFRLE1BRVIsUUFBUSxNQUlSLGVBQWUsTUFFekIsaUJBQWlCLE1BSVAsYUFBYSxNQUV2QixlQUFlLE1BR2YsWUFBWSxNQUVaLGtCQUFrQixNQUVsQiwwQkFBMEIsTUFnQ2hCLGVBQWUsTUFxRGxCLG9CQUFvQjtzQkFEMUIsU0FBUzt1QkFBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDOztBQW94QnRELE1BQU0sT0FBTyxpQkFBa0IsU0FBUSx5QkFBOEQ7OytHQUF4RixpQkFBaUI7bUdBQWpCLGlCQUFpQjs0RkFBakIsaUJBQWlCO2tCQUQ3QixTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIEluamVjdG9yLCBOZ1pvbmUsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yLCBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgT0ZpbHRlckJ1aWxkZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2ZpbHRlci1idWlsZGVyL28tZmlsdGVyLWJ1aWxkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IE9TZWFyY2hJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvaW5wdXQvc2VhcmNoLWlucHV0L28tc2VhcmNoLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCb29sZWFuQ29udmVydGVyLCBCb29sZWFuSW5wdXRDb252ZXJ0ZXIgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2lucHV0LWNvbnZlcnRlcic7XG5pbXBvcnQgeyBJU2VydmljZURhdGFDb21wb25lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NlcnZpY2UtZGF0YS1jb21wb25lbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IE9Gb3JtTGF5b3V0RGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vbGF5b3V0cy9mb3JtLWxheW91dC9kaWFsb2cvby1mb3JtLWxheW91dC1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudCB9IGZyb20gJy4uL2xheW91dHMvZm9ybS1sYXlvdXQvby1mb3JtLWxheW91dC1tYW5hZ2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPRm9ybUxheW91dFRhYkdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vbGF5b3V0cy9mb3JtLWxheW91dC90YWJncm91cC9vLWZvcm0tbGF5b3V0LXRhYmdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL25hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IEFic3RyYWN0U2VydmljZUNvbXBvbmVudFN0YXRlQ2xhc3MgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdGF0ZS9vLWNvbXBvbmVudC1zdGF0ZS5jbGFzcyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudFN0YXRlU2VydmljZSwgRGVmYXVsdFNlcnZpY2VDb21wb25lbnRTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdGF0ZS9vLWNvbXBvbmVudC1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IE9UcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdHJhbnNsYXRlL28tdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT1Blcm1pc3Npb25zIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgRXhwcmVzc2lvbiB9IGZyb20gJy4uL3R5cGVzL2V4cHJlc3Npb24udHlwZSc7XG5pbXBvcnQgeyBPX0dMT0JBTF9DT05GSUcgfSBmcm9tICcuLi90eXBlcy9vLWdsb2JhbC1jb25maWcudHlwZSc7XG5pbXBvcnQgeyBPTGlzdEluaXRpYWxpemF0aW9uT3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzL28tbGlzdC1pbml0aWFsaXphdGlvbi1vcHRpb25zLnR5cGUnO1xuaW1wb3J0IHsgT1F1ZXJ5RGF0YUFyZ3MgfSBmcm9tICcuLi90eXBlcy9xdWVyeS1kYXRhLWFyZ3MudHlwZSc7XG5pbXBvcnQgeyBPVGFibGVJbml0aWFsaXphdGlvbk9wdGlvbnMgfSBmcm9tICcuLi90eXBlcy90YWJsZS9vLXRhYmxlLWluaXRpYWxpemF0aW9uLW9wdGlvbnMudHlwZSc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uc1V0aWxzIH0gZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlV3JhcHBlciB9IGZyb20gJy4uL3V0aWwvYXN5bmMnO1xuaW1wb3J0IHsgQ29kZXMgfSBmcm9tICcuLi91dGlsL2NvZGVzJztcbmltcG9ydCB7IEZpbHRlckV4cHJlc3Npb25VdGlscyB9IGZyb20gJy4uL3V0aWwvZmlsdGVyLWV4cHJlc3Npb24udXRpbHMnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgeyBPRm9ybUNvbXBvbmVudCB9IGZyb20gJy4vZm9ybS9vLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IEFic3RyYWN0T1NlcnZpY2VCYXNlQ29tcG9uZW50LCBERUZBVUxUX0lOUFVUU19PX1NFUlZJQ0VfQkFTRV9DT01QT05FTlQgfSBmcm9tICcuL28tc2VydmljZS1iYXNlLWNvbXBvbmVudC5jbGFzcyc7XG5pbXBvcnQgeyBPRm9ybUxheW91dE1hbmFnZXJCYXNlIH0gZnJvbSAnLi4vbGF5b3V0cy9mb3JtLWxheW91dC9vLWZvcm0tbGF5b3V0LW1hbmFnZXItYmFzZS5jbGFzcyc7XG5pbXBvcnQgeyBPRm9ybUxheW91dE1hbmFnZXJDb250ZXh0IH0gZnJvbSAnLi4vdHlwZXMvZm9ybS1sYXlvdXQtbWFuYWdlci1jb250ZXh0LnR5cGUnO1xuaW1wb3J0IHsgT0Zvcm1MYXlvdXRNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL28tZm9ybS1sYXlvdXQtbWFuYWdlci5zZXJ2aWNlJztcblxuaW50ZXJmYWNlIEl0ZW1DbGljayB7XG4gIGdldEl0ZW1EYXRhKCk6IGFueVxufVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9JTlBVVFNfT19TRVJWSUNFX0NPTVBPTkVOVCA9IFtcbiAgLi4uREVGQVVMVF9JTlBVVFNfT19TRVJWSUNFX0JBU0VfQ09NUE9ORU5ULFxuXG4gICdfdGl0bGU6IHRpdGxlJyxcblxuICAvLyB2aXNpYmxlIFtub3x5ZXNdOiB2aXNpYmlsaXR5LiBEZWZhdWx0OiB5ZXMuXG4gICdvdmlzaWJsZTogdmlzaWJsZScsXG5cbiAgLy8gZW5hYmxlZCBbbm98eWVzXTogZWRpdGFiaWxpdHkuIERlZmF1bHQ6IHllcy5cbiAgJ29lbmFibGVkOiBlbmFibGVkJyxcblxuICAvLyBjb250cm9scyBbc3RyaW5nXVt5ZXN8bm98dHJ1ZXxmYWxzZV06XG4gICdjb250cm9scycsXG5cbiAgLy8gZGV0YWlsLW1vZGUgW25vbmV8Y2xpY2t8ZG91YmxlY2xpY2tdOiB3YXkgdG8gb3BlbiB0aGUgZGV0YWlsIGZvcm0gb2YgYSByb3cuIERlZmF1bHQ6ICdjbGljaycuXG4gICdkZXRhaWxNb2RlOiBkZXRhaWwtbW9kZScsXG5cbiAgLy8gZGV0YWlsLWZvcm0tcm91dGUgW3N0cmluZ106IHJvdXRlIG9mIGRldGFpbCBmb3JtLiBEZWZhdWx0OiAnZGV0YWlsJy5cbiAgJ2RldGFpbEZvcm1Sb3V0ZTogZGV0YWlsLWZvcm0tcm91dGUnLFxuXG4gIC8vIHJlY3Vyc2l2ZS1kZXRhaWwgW25vfHllc106IGRvIG5vdCBhcHBlbmQgZGV0YWlsIGtleXMgd2hlbiBuYXZpZ2F0ZSAob3ZlcndyaXRlIGN1cnJlbnQpLiBEZWZhdWx0OiBuby5cbiAgJ3JlY3Vyc2l2ZURldGFpbDogcmVjdXJzaXZlLWRldGFpbCcsXG5cbiAgLy8gZGV0YWlsLWJ1dHRvbi1pbi1yb3cgW25vfHllc106IGFkZGluZyBhIGJ1dHRvbiBpbiByb3cgZm9yIG9wZW5pbmcgZGV0YWlsIGZvcm0uIERlZmF1bHQ6IHllcy5cbiAgJ2RldGFpbEJ1dHRvbkluUm93OiBkZXRhaWwtYnV0dG9uLWluLXJvdycsXG5cbiAgLy8gZGV0YWlsLWJ1dHRvbi1pbi1yb3ctaWNvbiBbc3RyaW5nXTogbWF0ZXJpYWwgaWNvbi4gRGVmYXVsdDogbW9kZV9lZGl0LlxuICAnZGV0YWlsQnV0dG9uSW5Sb3dJY29uOiBkZXRhaWwtYnV0dG9uLWluLXJvdy1pY29uJyxcblxuICAvLyBlZGl0LWZvcm0tcm91dGUgW3N0cmluZ106IHJvdXRlIG9mIGVkaXQgZm9ybS4gRGVmYXVsdDogJ2VkaXQnLlxuICAnZWRpdEZvcm1Sb3V0ZTogZWRpdC1mb3JtLXJvdXRlJyxcblxuICAvLyByZWN1cnNpdmUtZWRpdCBbbm98eWVzXTogZG8gbm90IGFwcGVuZCBkZXRhaWwga2V5cyB3aGVuIG5hdmlnYXRlIChvdmVyd3JpdGUgY3VycmVudCkuIERlZmF1bHQ6IG5vLlxuICAncmVjdXJzaXZlRWRpdDogcmVjdXJzaXZlLWVkaXQnLFxuXG4gIC8vIGVkaXQtYnV0dG9uLWluLXJvdyBbbm98eWVzXTogYWRkaW5nIGEgYnV0dG9uIGluIHJvdyBmb3Igb3BlbmluZyBlZGl0aW9uIGZvcm0uIERlZmF1bHQ6IG5vLlxuICAnZWRpdEJ1dHRvbkluUm93OiBlZGl0LWJ1dHRvbi1pbi1yb3cnLFxuXG4gIC8vIGVkaXQtYnV0dG9uLWluLXJvdy1pY29uIFtzdHJpbmddOiBtYXRlcmlhbCBpY29uLiBEZWZhdWx0OiBzZWFyY2guXG4gICdlZGl0QnV0dG9uSW5Sb3dJY29uOiBlZGl0LWJ1dHRvbi1pbi1yb3ctaWNvbicsXG5cbiAgLy8gaW5zZXJ0LWJ1dHRvbiBbbm98eWVzXTogc2hvdyBpbnNlcnQgYnV0dG9uLiBEZWZhdWx0OiB5ZXMuXG4gICdpbnNlcnRCdXR0b246IGluc2VydC1idXR0b24nLFxuXG4gIC8vIHJvdy1oZWlnaHQgW3NtYWxsIHwgbWVkaXVtIHwgbGFyZ2VdXG4gICdyb3dIZWlnaHQgOiByb3ctaGVpZ2h0JyxcblxuICAvLyBpbnNlcnQtZm9ybS1yb3V0ZSBbc3RyaW5nXTogcm91dGUgb2YgaW5zZXJ0IGZvcm0uIERlZmF1bHQ6XG4gICdpbnNlcnRGb3JtUm91dGU6IGluc2VydC1mb3JtLXJvdXRlJyxcblxuICAvLyByZWN1cnNpdmUtaW5zZXJ0IFtub3x5ZXNdOiBkbyBub3QgYXBwZW5kIGluc2VydCBrZXlzIHdoZW4gbmF2aWdhdGUgKG92ZXJ3cml0ZSBjdXJyZW50KS4gRGVmYXVsdDogbm8uXG4gICdyZWN1cnNpdmVJbnNlcnQ6IHJlY3Vyc2l2ZS1pbnNlcnQnLFxuXG4gIC8vIGZpbHRlciBbeWVzfG5vfHRydWV8ZmFsc2VdOiB3aGV0aGVyIGZpbHRlciBpcyBjYXNlIHNlbnNpdGl2ZS4gRGVmYXVsdDogbm8uXG4gICdmaWx0ZXJDYXNlU2Vuc2l0aXZlOiBmaWx0ZXItY2FzZS1zZW5zaXRpdmUnLFxuXG4gIC8vIHF1aWNrLWZpbHRlciBbbm98eWVzXTogc2hvdyBxdWljayBmaWx0ZXIuIERlZmF1bHQ6IHllcy5cbiAgJ3F1aWNrRmlsdGVyOiBxdWljay1maWx0ZXInLFxuXG4gIC8vIHF1aWNrLWZpbHRlci1wbGFjZWhvbGRlcjogcXVpY2sgZmlsdGVyIHBsYWNlaG9sZGVyXG4gICdxdWlja0ZpbHRlclBsYWNlaG9sZGVyOiBxdWljay1maWx0ZXItcGxhY2Vob2xkZXInLFxuXG4gIC8vIHBhZ2luYXRpb24tY29udHJvbHMgW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyBwYWdpbmF0aW9uIGNvbnRyb2xzLiBEZWZhdWx0OiB5ZXMuXG4gICdwYWdpbmF0aW9uQ29udHJvbHM6IHBhZ2luYXRpb24tY29udHJvbHMnLFxuXG4gIC8vIHBhZ2Utc2l6ZS1vcHRpb25zIFtzdHJpbmddOiBQYWdlIHNpemUgb3B0aW9ucyBzZXBhcmF0ZWQgYnkgJzsnLlxuICAncGFnZVNpemVPcHRpb25zOiBwYWdlLXNpemUtb3B0aW9ucycsXG5cbiAgLy9xdWlja0ZpbHRlckFwcGVhcmFuY2VbbGVnYWN5fHN0YW5kYXJkfGZpbGx8b3V0bGluZV0gSW5kaWNhdGVzIHdoaWNoIG9mIHRoZSBtYXQtZm9ybS1maWVsZCBkaWZmZXJlbnQgYXBwZWFyYW5jZSB2YXJpYW50cyB3aWxsIGJlIHVzZWQuIERlZmF1bHQ6IG91dGxpbmVcbiAgJ3F1aWNrRmlsdGVyQXBwZWFyYW5jZTpxdWljay1maWx0ZXItYXBwZWFyYW5jZScsXG5cbiAgJ2Rpc2FibGVQYWdlU2l6ZUNhbGN1bGF0aW9uOiBkaXNhYmxlLXBhZ2Utc2l6ZS1jYWxjdWxhdGlvbidcbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVFBVVFNfT19TRVJWSUNFX0NPTVBPTkVOVCA9IFtcbiAgJ29uQ2xpY2snLFxuICAnb25Eb3VibGVDbGljaycsXG4gICdvbkRhdGFMb2FkZWQnLFxuICAnb25QYWdpbmF0ZWREYXRhTG9hZGVkJyxcbiAgJ29uU2VhcmNoJ1xuXVxuXG5ARGlyZWN0aXZlKHtcbiAgaW5wdXRzOiBERUZBVUxUX0lOUFVUU19PX1NFUlZJQ0VfQ09NUE9ORU5ULFxuICBvdXRwdXRzOiBERUZBVUxUX09VVFBVVFNfT19TRVJWSUNFX0NPTVBPTkVOVFxufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdE9TZXJ2aWNlQ29tcG9uZW50PFQgZXh0ZW5kcyBBYnN0cmFjdENvbXBvbmVudFN0YXRlU2VydmljZTxBYnN0cmFjdFNlcnZpY2VDb21wb25lbnRTdGF0ZUNsYXNzPj5cbiAgZXh0ZW5kcyBBYnN0cmFjdE9TZXJ2aWNlQmFzZUNvbXBvbmVudDxUPlxuICBpbXBsZW1lbnRzIElTZXJ2aWNlRGF0YUNvbXBvbmVudCB7XG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yKSBtYXRwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcblxuICBwcm90ZWN0ZWQgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9uc1NlcnZpY2U7XG4gIHByb3RlY3RlZCB0cmFuc2xhdGVTZXJ2aWNlOiBPVHJhbnNsYXRlU2VydmljZTtcbiAgcHJvdGVjdGVkIG5hdmlnYXRpb25TZXJ2aWNlOiBOYXZpZ2F0aW9uU2VydmljZTtcblxuICAvKiBpbnB1dHMgdmFyaWFibGVzICovXG4gIHNldCB0aXRsZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuX3RpdGxlID0gdmFsO1xuICB9XG4gIGdldCB0aXRsZSgpOiBzdHJpbmcge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLl90aXRsZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KHRoaXMuX3RpdGxlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3RpdGxlO1xuICB9XG4gIHByb3RlY3RlZCBfdGl0bGU6IHN0cmluZztcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHByb3RlY3RlZCBvdmlzaWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwcm90ZWN0ZWQgb2VuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHJvdGVjdGVkIGNvbnRyb2xzOiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIGRldGFpbE1vZGU6IHN0cmluZyA9IENvZGVzLkRFVEFJTF9NT0RFX0NMSUNLO1xuICBwcm90ZWN0ZWQgZGV0YWlsRm9ybVJvdXRlOiBzdHJpbmc7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwcm90ZWN0ZWQgcmVjdXJzaXZlRGV0YWlsOiBib29sZWFuID0gZmFsc2U7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBkZXRhaWxCdXR0b25JblJvdzogYm9vbGVhbiA9IGZhbHNlO1xuICBkZXRhaWxCdXR0b25JblJvd0ljb246IHN0cmluZyA9IENvZGVzLkRFVEFJTF9JQ09OO1xuICBwcm90ZWN0ZWQgZWRpdEZvcm1Sb3V0ZTogc3RyaW5nO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHJvdGVjdGVkIHJlY3Vyc2l2ZUVkaXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGVkaXRCdXR0b25JblJvdzogYm9vbGVhbiA9IGZhbHNlO1xuICBlZGl0QnV0dG9uSW5Sb3dJY29uOiBzdHJpbmcgPSBDb2Rlcy5FRElUX0lDT047XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBpbnNlcnRCdXR0b246IGJvb2xlYW47XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwYWdpbmF0aW9uQ29udHJvbHM6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgZGlzYWJsZVBhZ2VTaXplQ2FsY3VsYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBnZXQgcGFnZVNpemVPcHRpb25zKCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5fcGFnZVNpemVPcHRpb25zO1xuICB9XG5cbiAgc2V0IHBhZ2VTaXplT3B0aW9ucyh2YWw6IG51bWJlcltdKSB7XG4gICAgaWYgKCEodmFsIGluc3RhbmNlb2YgQXJyYXkpKSB7XG4gICAgICB2YWwgPSBVdGlsLnBhcnNlQXJyYXkoU3RyaW5nKHZhbCkpLm1hcChhID0+IHBhcnNlSW50KGEsIDEwKSk7XG4gICAgfVxuICAgIHRoaXMuX3BhZ2VTaXplT3B0aW9ucyA9IHZhbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBfcm93SGVpZ2h0ID0gQ29kZXMuREVGQVVMVF9ST1dfSEVJR0hUO1xuICBwcm90ZWN0ZWQgcm93SGVpZ2h0U3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMuX3Jvd0hlaWdodCk7XG4gIHB1YmxpYyByb3dIZWlnaHRPYnNlcnZhYmxlOiBPYnNlcnZhYmxlPHN0cmluZz4gPSB0aGlzLnJvd0hlaWdodFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJvdGVjdGVkIGNoZWNrVmlld1BvcnRTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgcHVibGljIGNoZWNrVmlld1BvcnRPYnNlcnZhYmxlOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5jaGVja1ZpZXdQb3J0U3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBzZXQgcm93SGVpZ2h0KHZhbHVlKSB7XG4gICAgdGhpcy5fcm93SGVpZ2h0ID0gdmFsdWUgPyB2YWx1ZS50b0xvd2VyQ2FzZSgpIDogdmFsdWU7XG4gICAgaWYgKCFDb2Rlcy5pc1ZhbGlkUm93SGVpZ2h0KHRoaXMuX3Jvd0hlaWdodCkpIHtcbiAgICAgIHRoaXMuX3Jvd0hlaWdodCA9IENvZGVzLkRFRkFVTFRfUk9XX0hFSUdIVDtcbiAgICB9XG4gICAgdGhpcy5yb3dIZWlnaHRTdWJqZWN0Lm5leHQodGhpcy5fcm93SGVpZ2h0KTtcbiAgfVxuICBnZXQgcm93SGVpZ2h0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvd0hlaWdodDtcbiAgfVxuICBwcm90ZWN0ZWQgaW5zZXJ0Rm9ybVJvdXRlOiBzdHJpbmc7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwcm90ZWN0ZWQgcmVjdXJzaXZlSW5zZXJ0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIF9maWx0ZXJDYXNlU2Vuc2l0aXZlOiBib29sZWFuID0gZmFsc2U7XG4gIHNldCBmaWx0ZXJDYXNlU2Vuc2l0aXZlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZmlsdGVyQ2FzZVNlbnNpdGl2ZSA9IEJvb2xlYW5Db252ZXJ0ZXIodmFsdWUpO1xuICB9XG4gIGdldCBmaWx0ZXJDYXNlU2Vuc2l0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJDYXNlU2Vuc2l0aXZlO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9xdWlja0ZpbHRlcjogYm9vbGVhbiA9IHRydWU7XG4gIGdldCBxdWlja0ZpbHRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcXVpY2tGaWx0ZXI7XG4gIH1cbiAgc2V0IHF1aWNrRmlsdGVyKHZhbDogYm9vbGVhbikge1xuICAgIHZhbCA9IFV0aWwucGFyc2VCb29sZWFuKFN0cmluZyh2YWwpKTtcbiAgICB0aGlzLl9xdWlja0ZpbHRlciA9IHZhbDtcbiAgICBpZiAodmFsKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVnaXN0ZXJRdWlja0ZpbHRlcih0aGlzLnNlYXJjaElucHV0Q29tcG9uZW50KSwgMCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHF1aWNrRmlsdGVyUGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xuICAvKiBlbmQgb2YgaW5wdXRzIHZhcmlhYmxlcyAqL1xuXG4gIC8qIG91dHB1dHMgdmFyaWFibGVzICovXG4gIHB1YmxpYyBvbkNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHVibGljIG9uRG91YmxlQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgb25EYXRhTG9hZGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHVibGljIG9uUGFnaW5hdGVkRGF0YUxvYWRlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHB1YmxpYyBvblNlYXJjaDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIC8qIGVuZCBvZiBvdXRwdXRzIHZhcmlhYmxlcyAqL1xuXG4gIHB1YmxpYyBmaWx0ZXJCdWlsZGVyOiBPRmlsdGVyQnVpbGRlckNvbXBvbmVudDtcbiAgcHJvdGVjdGVkIF9zZWxlY3Rpb246IFNlbGVjdGlvbk1vZGVsPGFueT47XG5cbiAgZ2V0IHNlbGVjdGlvbigpIHtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHRoaXMuX3NlbGVjdGlvbikpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxhbnk+KHRydWUsIFtdLCB0cnVlLCB0aGlzLmNvbXBhcmVSb3coKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb247XG4gIH1cblxuICBwcm90ZWN0ZWQgb25UcmlnZ2VyVXBkYXRlU3Vic2NyaXB0aW9uOiBhbnk7XG4gIHByb3RlY3RlZCBmb3JtTGF5b3V0TWFuYWdlcjogT0Zvcm1MYXlvdXRNYW5hZ2VyQmFzZTtcbiAgcHJvdGVjdGVkIGZvcm1MYXlvdXRNYW5hZ2VyVGFiSW5kZXg6IG51bWJlcjtcbiAgcHVibGljIG9Gb3JtTGF5b3V0RGlhbG9nOiBPRm9ybUxheW91dERpYWxvZ0NvbXBvbmVudDtcblxuICBwcm90ZWN0ZWQgdGFic1N1YnNjcmlwdGlvbnM6IGFueTtcblxuICBwdWJsaWMgcXVpY2tGaWx0ZXJDb21wb25lbnQ6IE9TZWFyY2hJbnB1dENvbXBvbmVudDtcblxuICBAVmlld0NoaWxkKChmb3J3YXJkUmVmKCgpID0+IE9TZWFyY2hJbnB1dENvbXBvbmVudCkpKVxuICBwdWJsaWMgc2VhcmNoSW5wdXRDb21wb25lbnQ6IE9TZWFyY2hJbnB1dENvbXBvbmVudDtcblxuICBwcm90ZWN0ZWQgcXVpY2tGaWx0ZXJDb2xBcnJheTogc3RyaW5nW107XG5cbiAgcHJvdGVjdGVkIGRhdGFSZXNwb25zZUFycmF5OiBhbnlbXSA9IFtdO1xuICBwcm90ZWN0ZWQgcXVpY2tGaWx0ZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgX3BhZ2VTaXplT3B0aW9ucyA9IENvZGVzLlBBR0VfU0laRV9PUFRJT05TO1xuXG4gIHByb3RlY3RlZCBjbGlja1RpbWVyO1xuICBwcm90ZWN0ZWQgY2xpY2tEZWxheSA9IDIwMDtcbiAgcHJvdGVjdGVkIGNsaWNrUHJldmVudCA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgX3F1aWNrRmlsdGVyQXBwZWFyYW5jZTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSA9ICdvdXRsaW5lJztcblxuICBwcml2YXRlIG11dGF0aW9uT2JzZXJ2ZXJzOiBNdXRhdGlvbk9ic2VydmVyW10gPSBbXTtcbiAgcHVibGljIGVuYWJsZWRJbnNlcnRCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuICBwdWJsaWMgZW5hYmxlZFJlZnJlc2hCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcm90ZWN0ZWQgZWxSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJvdGVjdGVkIGZvcm06IE9Gb3JtQ29tcG9uZW50XG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICB0aGlzLnBlcm1pc3Npb25zU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KFBlcm1pc3Npb25zU2VydmljZSk7XG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoT1RyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChOYXZpZ2F0aW9uU2VydmljZSk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZm9ybUxheW91dE1hbmFnZXIgPSB0aGlzLmluamVjdG9yLmdldChPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIG5vIHBhcmVudCBmb3JtIGxheW91dCBtYW5hZ2VyXG4gICAgfVxuICAgIHRyeSB7XG4gICAgICB0aGlzLm9Gb3JtTGF5b3V0RGlhbG9nID0gdGhpcy5pbmplY3Rvci5nZXQoT0Zvcm1MYXlvdXREaWFsb2dDb21wb25lbnQpO1xuICAgICAgdGhpcy5mb3JtTGF5b3V0TWFuYWdlciA9IHRoaXMub0Zvcm1MYXlvdXREaWFsb2cuZm9ybUxheW91dE1hbmFnZXI7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gbm8gcGFyZW50IGZvcm0gbGF5b3V0IG1hbmFnZXJcbiAgICB9XG4gICAgdGhpcy5nZXRHbG9iYWxJbmplY3Rpb25Ub2tlbkNvbmZpZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRHbG9iYWxJbmplY3Rpb25Ub2tlbkNvbmZpZygpIHtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBvR2xvYmFsQ29uZmlnID0gdGhpcy5pbmplY3Rvci5nZXQoT19HTE9CQUxfQ09ORklHKTtcbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChvR2xvYmFsQ29uZmlnLnN0b3JlU3RhdGUpKSB7XG4gICAgICAgIHRoaXMuc3RvcmVTdGF0ZSA9IG9HbG9iYWxDb25maWcuc3RvcmVTdGF0ZTtcbiAgICAgIH07XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gRG8gbm90aGluZyBiZWNhdXNlIGlzIG9wdGlvbmFsXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuICAgIGlmICh0aGlzLmRldGFpbEJ1dHRvbkluUm93IHx8IHRoaXMuZWRpdEJ1dHRvbkluUm93KSB7XG4gICAgICB0aGlzLmRldGFpbE1vZGUgPSBDb2Rlcy5ERVRBSUxfTU9ERV9OT05FO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVnaXN0ZXJGb3JtTGF5b3V0TWFuYWdlclN0YXRlKCk7XG4gICAgc3VwZXIuYWZ0ZXJWaWV3SW5pdCgpO1xuICAgIGlmICh0aGlzLmVsUmVmKSB7XG4gICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCd0aXRsZScpO1xuICAgIH1cbiAgICBpZiAodGhpcy5mb3JtTGF5b3V0TWFuYWdlciAmJiB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLmlzTWFpbkNvbXBvbmVudCh0aGlzKSkge1xuICAgICAgdGhpcy5vblRyaWdnZXJVcGRhdGVTdWJzY3JpcHRpb24gPSB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLm9uVHJpZ2dlclVwZGF0ZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlbG9hZERhdGEoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkZXN0cm95KCk6IHZvaWQge1xuICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgICBpZiAodGhpcy5vblRyaWdnZXJVcGRhdGVTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMub25UcmlnZ2VyVXBkYXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRhYnNTdWJzY3JpcHRpb25zKSB7XG4gICAgICB0aGlzLnRhYnNTdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnF1aWNrRmlsdGVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnF1aWNrRmlsdGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vdmlzaWJsZTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNDb250cm9scygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9scztcbiAgfVxuXG4gIHB1YmxpYyBoYXNUaXRsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50aXRsZSAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGVkSXRlbXMoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZDtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhclNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICB9XG5cbiAgcHVibGljIHNldFNlbGVjdGVkKGl0ZW06IGFueSk6IHZvaWQge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChpdGVtKSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb24udG9nZ2xlKGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBuYXZpZ2F0ZVRvRGV0YWlsKHJvdXRlOiBhbnlbXSwgcVBhcmFtczogYW55LCByZWxhdGl2ZVRvOiBBY3RpdmF0ZWRSb3V0ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGV4dHJhcyA9IHtcbiAgICAgIHJlbGF0aXZlVG86IHJlbGF0aXZlVG9cbiAgICB9O1xuICAgIGlmICh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyICYmIHRoaXMuZm9ybUxheW91dE1hbmFnZXIuaXNNYWluQ29tcG9uZW50KHRoaXMpKSB7XG4gICAgICBxUGFyYW1zW0NvZGVzLklHTk9SRV9DQU5fREVBQ1RJVkFURV0gPSB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLmlnbm9yZUNhbkRlYWN0aXZhdGU7XG4gICAgICB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLnNldEFzQWN0aXZlRm9ybUxheW91dE1hbmFnZXIoKTtcbiAgICB9XG4gICAgZXh0cmFzW0NvZGVzLlFVRVJZX1BBUkFNU10gPSBxUGFyYW1zO1xuXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUocm91dGUsIGV4dHJhcykuXG4gICAgICB0aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyKSB7XG4gICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5pc05hdmlnYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Nhbm5vdCBtYXRjaCBhbnkgcm91dGVzLiBVUkwgU2VnbWVudDogJywgcm91dGUpO1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmlzTmF2aWdhdGluZyA9IGZhbHNlXG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBpbnNlcnREZXRhaWwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub0Zvcm1MYXlvdXREaWFsb2cpIHtcbiAgICAgIGNvbnNvbGUud2FybignTmF2aWdhdGlvbiBpcyBub3QgYXZhaWxhYmxlIHlldCBpbiBhIGZvcm0gbGF5b3V0IG1hbmFnZXIgd2l0aCBtb2RlPVwiZGlhbG9nXCInKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgcm91dGUgPSB0aGlzLmdldEluc2VydFJvdXRlKCk7XG4gICAgdGhpcy5hZGRGb3JtTGF5b3V0TWFuYWdlclJvdXRlKHJvdXRlKTtcbiAgICBpZiAocm91dGUubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcmVsYXRpdmVUbyA9IHRoaXMucmVjdXJzaXZlSW5zZXJ0ID8gdGhpcy5hY3RSb3V0ZS5wYXJlbnQgOiB0aGlzLmFjdFJvdXRlO1xuICAgICAgY29uc3QgcVBhcmFtcyA9IHt9O1xuICAgICAgaWYgKHRoaXMuZm9ybUxheW91dE1hbmFnZXIgJiYgdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5pc1RhYk1vZGUoKSkge1xuICAgICAgICBxUGFyYW1zW0NvZGVzLklOU0VSVElPTl9NT0RFXSA9ICd0cnVlJztcbiAgICAgIH1cbiAgICAgIHRoaXMubmF2aWdhdGVUb0RldGFpbChyb3V0ZSwgcVBhcmFtcywgcmVsYXRpdmVUbyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHZpZXdEZXRhaWwoaXRlbTogYW55LCBjb250ZXh0PzogT0Zvcm1MYXlvdXRNYW5hZ2VyQ29udGV4dCk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1MYXlvdXRNYW5hZ2VyU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9Gb3JtTGF5b3V0TWFuYWdlclNlcnZpY2UpO1xuICAgIGZvcm1MYXlvdXRNYW5hZ2VyU2VydmljZS5jb250ZXh0ID0gdm9pZCAwO1xuXG4gICAgaWYgKHRoaXMub0Zvcm1MYXlvdXREaWFsb2cpIHtcbiAgICAgIGNvbnNvbGUud2FybignTmF2aWdhdGlvbiBpcyBub3QgYXZhaWxhYmxlIHlldCBpbiBhIGZvcm0gbGF5b3V0IG1hbmFnZXIgd2l0aCBtb2RlPVwiZGlhbG9nXCInKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMubmF2aWdhdGlvblNlcnZpY2UuaXNOYXZpZ2F0aW5nKSB7XG4gICAgICByZXR1cm47XG5cbiAgICB9XG4gICAgY29uc3Qgem9uZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nWm9uZSk7XG4gICAgem9uZS5ydW4oYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgcm91dGUgPSB0aGlzLmdldEl0ZW1Nb2RlUm91dGUoaXRlbSwgJ2RldGFpbEZvcm1Sb3V0ZScpO1xuICAgICAgdGhpcy5hZGRGb3JtTGF5b3V0TWFuYWdlclJvdXRlKHJvdXRlKTtcbiAgICAgIGlmIChyb3V0ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHFQYXJhbXMgPSBDb2Rlcy5nZXRJc0RldGFpbE9iamVjdCgpO1xuICAgICAgICBjb25zdCByZWxhdGl2ZVRvID0gdGhpcy5yZWN1cnNpdmVEZXRhaWwgPyB0aGlzLmFjdFJvdXRlLnBhcmVudCA6IHRoaXMuYWN0Um91dGU7XG5cbiAgICAgICAgaWYgKCF0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyPy5pc1NwbGl0UGFuZU1vZGUoKSkge1xuICAgICAgICAgIGZvcm1MYXlvdXRNYW5hZ2VyU2VydmljZS5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmlzTmF2aWdhdGluZyA9IHRydWU7XG4gICAgICAgIGF3YWl0IHRoaXMubmF2aWdhdGVUb0RldGFpbChyb3V0ZSwgcVBhcmFtcywgcmVsYXRpdmVUbylcbiAgICAgIH1cbiAgICB9KTtcblxuICB9XG5cbiAgcHVibGljIGVkaXREZXRhaWwoaXRlbTogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMub0Zvcm1MYXlvdXREaWFsb2cpIHtcbiAgICAgIGNvbnNvbGUud2FybignTmF2aWdhdGlvbiBpcyBub3QgYXZhaWxhYmxlIHlldCBpbiBhIGZvcm0gbGF5b3V0IG1hbmFnZXIgd2l0aCBtb2RlPVwiZGlhbG9nXCInKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgem9uZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nWm9uZSk7XG4gICAgem9uZS5ydW4oYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgcm91dGUgPSB0aGlzLmdldEl0ZW1Nb2RlUm91dGUoaXRlbSwgJ2VkaXRGb3JtUm91dGUnKTtcbiAgICAgIHRoaXMuYWRkRm9ybUxheW91dE1hbmFnZXJSb3V0ZShyb3V0ZSk7XG4gICAgICBpZiAocm91dGUubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBxUGFyYW1zID0gQ29kZXMuZ2V0SXNEZXRhaWxPYmplY3QoKTtcbiAgICAgICAgY29uc3QgcmVsYXRpdmVUbyA9IHRoaXMucmVjdXJzaXZlRWRpdCA/IHRoaXMuYWN0Um91dGUucGFyZW50IDogdGhpcy5hY3RSb3V0ZTtcblxuICAgICAgICBhd2FpdCB0aGlzLm5hdmlnYXRlVG9EZXRhaWwocm91dGUsIHFQYXJhbXMsIHJlbGF0aXZlVG8pXG5cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhZGRGb3JtTGF5b3V0TWFuYWdlclJvdXRlKHJvdXRlQXJyOiBhbnlbXSk6IGFueVtdIHtcbiAgICBpZiAodGhpcy5mb3JtTGF5b3V0TWFuYWdlciAmJiByb3V0ZUFyci5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjb21wUm91dGUgPSB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLmdldFJvdXRlRm9yQ29tcG9uZW50KHRoaXMpO1xuICAgICAgaWYgKGNvbXBSb3V0ZSAmJiBjb21wUm91dGUubGVuZ3RoID4gMCkge1xuICAgICAgICByb3V0ZUFyci51bnNoaWZ0KC4uLmNvbXBSb3V0ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByb3V0ZUFycjtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0QnV0dG9uUGVybWlzc2lvbnMoYWN0aW9uc1Blcm1pc3Npb25zKTogdm9pZCB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGFjdGlvbnNQZXJtaXNzaW9ucykpIHtcbiAgICAgIHRoaXMuc2V0UGVybWlzc2lvbignaW5zZXJ0JywgJ2luc2VydEJ1dHRvbicsICdlbmFibGVkSW5zZXJ0QnV0dG9uJywgYWN0aW9uc1Blcm1pc3Npb25zKTtcbiAgICAgIHRoaXMuc2V0UGVybWlzc2lvbigncmVmcmVzaCcsICdyZWZyZXNoQnV0dG9uJywgJ2VuYWJsZWRSZWZyZXNoQnV0dG9uJywgYWN0aW9uc1Blcm1pc3Npb25zKTtcbiAgICAgIHRoaXMuc2V0UGVybWlzc2lvbignZGVsZXRlJywgJ2RlbGV0ZUJ1dHRvbicsICdlbmFibGVkRGVsZXRlQnV0dG9uJywgYWN0aW9uc1Blcm1pc3Npb25zKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIHNldFBlcm1pc3Npb24oYXR0cjogc3RyaW5nLCB2aXNpYmxlUHJvcDogc3RyaW5nLCBlbmFibGVkUHJvcDogc3RyaW5nLCBhY3Rpb25zUGVybWlzc2lvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBwZXJtID0gdGhpcy5nZXRQZXJtaXNzaW9uQnlBdHRyKGF0dHIsIGFjdGlvbnNQZXJtaXNzaW9ucyk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHBlcm0pKSB7XG4gICAgICB0aGlzW3Zpc2libGVQcm9wXSA9IHBlcm0udmlzaWJsZTtcbiAgICAgIHRoaXNbZW5hYmxlZFByb3BdID0gcGVybS5lbmFibGVkO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBtYW5hZ2VDdXN0b21QZXJtaXNzaW9ucyhhY3Rpb25zUGVybWlzc2lvbnMsIHNlbGVjdG9yKTogdm9pZCB7XG4gICAgY29uc3QgY3VzdG9tUGVybWlzc2lvbnMgPSBhY3Rpb25zUGVybWlzc2lvbnMuZmlsdGVyKHBlcm0gPT4gIVsnaW5zZXJ0JywgJ3JlZnJlc2gnLCAnZGVsZXRlJ10uaW5jbHVkZXMocGVybS5hdHRyKSk7XG4gICAgY3VzdG9tUGVybWlzc2lvbnMuZm9yRWFjaChwZXJtaXNzaW9uID0+IHtcbiAgICAgIHRoaXMubWFuYWdlUGVybWlzc2lvbih0aGlzLmVsUmVmLCBwZXJtaXNzaW9uLCB0aGlzLm11dGF0aW9uT2JzZXJ2ZXJzLCBzZWxlY3Rvcik7XG4gICAgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEFjdGlvbnNQZXJtaXNzaW9ucyhwZXJtaXNzaW9uczogYW55KTogT1Blcm1pc3Npb25zW10ge1xuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZChwZXJtaXNzaW9ucykgPyAocGVybWlzc2lvbnMuYWN0aW9ucyB8fCBbXSkgOiBbXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRQZXJtaXNzaW9uQnlBdHRyKGF0dHI6IHN0cmluZywgYWN0aW9uc1Blcm1pc3Npb25zOiBPUGVybWlzc2lvbnNbXSk6IE9QZXJtaXNzaW9ucyB7XG4gICAgcmV0dXJuIGFjdGlvbnNQZXJtaXNzaW9ucy5maW5kKChwZXJtOiBPUGVybWlzc2lvbnMpID0+IHBlcm0uYXR0ciA9PT0gYXR0cik7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFuYWdlUGVybWlzc2lvbihlbGVtZW50UmVmOiBhbnksIHBlcm1pc3Npb246IE9QZXJtaXNzaW9ucywgbXV0YXRpb25PYnNlcnZlcnM6IGFueVtdLCBzZWxlY3Rvcjogc3RyaW5nLCBhdHRyPzogc3RyaW5nKTogdm9pZCB7XG4gICAgbGV0IGVsZW1lbnRCeUFjdGlvbjtcbiAgICBjb25zdCBhdHRyQWN0aW9uID0gVXRpbC5pc0RlZmluZWQoYXR0cikgPyBhdHRyIDogcGVybWlzc2lvbi5hdHRyO1xuICAgIGNvbnN0IGFsbEVsZW1lbnRzID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuXG4gICAgYWxsRWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZSgnYXR0cicpID09PSBhdHRyQWN0aW9uKSB7XG4gICAgICAgIGVsZW1lbnRCeUFjdGlvbiA9IGVsZW1lbnQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoZWxlbWVudEJ5QWN0aW9uKSkge1xuICAgICAgaWYgKCFwZXJtaXNzaW9uLnZpc2libGUpIHtcbiAgICAgICAgZWxlbWVudEJ5QWN0aW9uLnJlbW92ZSgpO1xuICAgICAgfSBlbHNlIGlmICghcGVybWlzc2lvbi5lbmFibGVkKSB7XG4gICAgICAgIGVsZW1lbnRCeUFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IG11dGF0aW9uT2JzZXJ2ZXIgPSBQZXJtaXNzaW9uc1V0aWxzLnJlZ2lzdGVyRGlzYWJsZWRDaGFuZ2VzSW5Eb20oZWxlbWVudEJ5QWN0aW9uKTtcbiAgICAgICAgbXV0YXRpb25PYnNlcnZlcnMucHVzaChtdXRhdGlvbk9ic2VydmVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RW5jb2RlZFBhcmVudEtleXMoKTogc3RyaW5nIHtcbiAgICBsZXQgZW5jb2RlZDogc3RyaW5nO1xuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLl9wS2V5c0VxdWl2KS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBwS2V5cyA9IHRoaXMuZ2V0UGFyZW50S2V5c1ZhbHVlcygpO1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHBLZXlzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGVuY29kZWQgPSBVdGlsLmVuY29kZVBhcmVudEtleXMocEtleXMpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZW5jb2RlZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRJbnNlcnRSb3V0ZSgpOiBhbnlbXSB7XG4gICAgY29uc3Qgcm91dGUgPSBbXTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5kZXRhaWxGb3JtUm91dGUpKSB7XG4gICAgICByb3V0ZS5wdXNoKHRoaXMuZGV0YWlsRm9ybVJvdXRlKTtcbiAgICB9XG4gICAgY29uc3QgaW5zZXJ0Um91dGUgPSBVdGlsLmlzRGVmaW5lZCh0aGlzLmluc2VydEZvcm1Sb3V0ZSkgPyB0aGlzLmluc2VydEZvcm1Sb3V0ZSA6IENvZGVzLkRFRkFVTFRfSU5TRVJUX1JPVVRFO1xuICAgIHJvdXRlLnB1c2goaW5zZXJ0Um91dGUpO1xuICAgIC8vIGFkZGluZyBwYXJlbnQta2V5cyBpbmZvLi4uXG4gICAgY29uc3QgZW5jb2RlZFBhcmVudEtleXMgPSB0aGlzLmdldEVuY29kZWRQYXJlbnRLZXlzKCk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGVuY29kZWRQYXJlbnRLZXlzKSkge1xuICAgICAgY29uc3Qgcm91dGVPYmogPSB7fTtcbiAgICAgIHJvdXRlT2JqW0NvZGVzLlBBUkVOVF9LRVlTX0tFWV0gPSBlbmNvZGVkUGFyZW50S2V5cztcbiAgICAgIHJvdXRlLnB1c2gocm91dGVPYmopO1xuICAgIH1cbiAgICBpZiAocm91dGUubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zdG9yZU5hdmlnYXRpb25Gb3JtUm91dGVzKCdpbnNlcnRGb3JtUm91dGUnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvdXRlO1xuICB9XG5cbiAgcHVibGljIGdldEl0ZW1Nb2RlUm91dGUoaXRlbTogYW55LCBtb2RlUm91dGU6IHN0cmluZyk6IGFueVtdIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmdldFJvdXRlT2ZTZWxlY3RlZFJvdyhpdGVtKTtcbiAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLmRldGFpbEZvcm1Sb3V0ZSkpIHtcbiAgICAgICAgcmVzdWx0LnVuc2hpZnQodGhpcy5kZXRhaWxGb3JtUm91dGUpO1xuICAgICAgfVxuICAgICAgaWYgKG1vZGVSb3V0ZSA9PT0gJ2VkaXRGb3JtUm91dGUnKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuZWRpdEZvcm1Sb3V0ZSB8fCBDb2Rlcy5ERUZBVUxUX0VESVRfUk9VVEUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDAgJiYgIXRoaXMub0Zvcm1MYXlvdXREaWFsb2cpIHtcbiAgICAgIHRoaXMuc3RvcmVOYXZpZ2F0aW9uRm9ybVJvdXRlcyhtb2RlUm91dGUsIHRoaXMuZ2V0UXVlcnlDb25maWd1cmF0aW9uKCkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFF1ZXJ5Q29uZmlndXJhdGlvbigpOiBhbnkge1xuICAgIGxldCByZXN1bHQgPSB7XG4gICAgICBrZXlzVmFsdWVzOiB0aGlzLmdldEtleXNWYWx1ZXMoKVxuICAgIH07XG4gICAgaWYgKHRoaXMucGFnZWFibGUpIHtcbiAgICAgIHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICBzZXJ2aWNlVHlwZTogdGhpcy5zZXJ2aWNlVHlwZSxcbiAgICAgICAgcXVlcnlBcmd1bWVudHM6IHRoaXMucXVlcnlBcmd1bWVudHMsXG4gICAgICAgIGVudGl0eTogdGhpcy5lbnRpdHksXG4gICAgICAgIHNlcnZpY2U6IHRoaXMuc2VydmljZSxcbiAgICAgICAgcXVlcnlNZXRob2Q6IHRoaXMucGFnZWFibGUgPyB0aGlzLnBhZ2luYXRlZFF1ZXJ5TWV0aG9kIDogdGhpcy5xdWVyeU1ldGhvZCxcbiAgICAgICAgdG90YWxSZWNvcmRzTnVtYmVyOiB0aGlzLmdldFRvdGFsUmVjb3Jkc051bWJlcigpLFxuICAgICAgICBxdWVyeVJvd3M6IHRoaXMucXVlcnlSb3dzLFxuICAgICAgICBxdWVyeVJlY29yZE9mZnNldDogTWF0aC5tYXgodGhpcy5jdXJyZW50UGFnZSAqIHRoaXMucXVlcnlSb3dzLCB0aGlzLnN0YXRlLnF1ZXJ5UmVjb3JkT2Zmc2V0IC0gdGhpcy5xdWVyeVJvd3MpXG4gICAgICB9LCByZXN1bHQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGdldFJvdXRlT2ZTZWxlY3RlZFJvdyhpdGVtOiBhbnkpOiBhbnlbXSB7XG4gICAgY29uc3Qgcm91dGUgPSBbXTtcbiAgICBpZiAoVXRpbC5pc09iamVjdChpdGVtKSkge1xuICAgICAgdGhpcy5rZXlzQXJyYXkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBpZiAoVXRpbC5pc0RlZmluZWQoaXRlbVtrZXldKSkge1xuICAgICAgICAgIHJvdXRlLnB1c2goaXRlbVtrZXldKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByb3V0ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZWxldGVMb2NhbEl0ZW1zKCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSB0aGlzLmdldFNlbGVjdGVkSXRlbXMoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdGVkSXRlbXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbSA9IHNlbGVjdGVkSXRlbXNbaV07XG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW1LdiA9IHt9O1xuICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCB0aGlzLmtleXNBcnJheS5sZW5ndGg7ICsraykge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmtleXNBcnJheVtrXTtcbiAgICAgICAgc2VsZWN0ZWRJdGVtS3Zba2V5XSA9IHNlbGVjdGVkSXRlbVtrZXldO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaiA9IHRoaXMuZGF0YUFycmF5Lmxlbmd0aCAtIDE7IGogPj0gMDsgLS1qKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmRhdGFBcnJheVtqXTtcbiAgICAgICAgY29uc3QgaXRlbUt2ID0ge307XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdGhpcy5rZXlzQXJyYXkubGVuZ3RoOyArK2spIHtcbiAgICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmtleXNBcnJheVtrXTtcbiAgICAgICAgICBpdGVtS3Zba2V5XSA9IGl0ZW1ba2V5XTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBrIGluIHNlbGVjdGVkSXRlbUt2KSB7XG4gICAgICAgICAgaWYgKHNlbGVjdGVkSXRlbUt2Lmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICBmb3VuZCA9IGl0ZW1Ldi5oYXNPd25Qcm9wZXJ0eShrKSAmJiAoc2VsZWN0ZWRJdGVtS3Zba10gPT09IGl0ZW1LdltrXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgIHRoaXMuZGF0YUFycmF5LnNwbGljZShqLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgcmVpbml0aWFsaXplKG9wdGlvbnM6IE9MaXN0SW5pdGlhbGl6YXRpb25PcHRpb25zIHwgT1RhYmxlSW5pdGlhbGl6YXRpb25PcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKG9wdGlvbnMgJiYgT2JqZWN0LmtleXMob3B0aW9ucykubGVuZ3RoKSB7XG4gICAgICBjb25zdCBjbG9uZWRPcHRzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyk7XG4gICAgICBpZiAoY2xvbmVkT3B0cy5oYXNPd25Qcm9wZXJ0eSgnZW50aXR5JykpIHtcbiAgICAgICAgdGhpcy5lbnRpdHkgPSBjbG9uZWRPcHRzLmVudGl0eTtcbiAgICAgICAgaWYgKHRoaXMub2F0dHJGcm9tRW50aXR5KSB7XG4gICAgICAgICAgdGhpcy5vYXR0ciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGUgY2xvbmVkT3B0cy5lbnRpdHk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IHByb3AgaW4gY2xvbmVkT3B0cykge1xuICAgICAgICBpZiAoY2xvbmVkT3B0cy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgIHRoaXNbcHJvcF0gPSBjbG9uZWRPcHRzW3Byb3BdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBgby1maWx0ZXItYnVpbGRlcmAgY29tcG9uZW50IHRoYXQgdGhpcyBjb21wb25lbnQgd2lsbCB1c2UgdG8gZmlsdGVyIGl0cyBkYXRhLlxuICAgKiBAcGFyYW0gZmlsdGVyQnVpbGRlciB0aGUgYG8tZmlsdGVyLWJ1aWxkZXJgIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBzZXRGaWx0ZXJCdWlsZGVyKGZpbHRlckJ1aWxkZXI6IE9GaWx0ZXJCdWlsZGVyQ29tcG9uZW50KTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJCdWlsZGVyID0gZmlsdGVyQnVpbGRlcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb21wb25lbnRGaWx0ZXIoZXhpc3RpbmdGaWx0ZXI6IGFueSA9IHt9KTogYW55IHtcbiAgICBjb25zdCBmaWx0ZXIgPSBzdXBlci5nZXRDb21wb25lbnRGaWx0ZXIoZXhpc3RpbmdGaWx0ZXIpO1xuXG4gICAgY29uc3QgcXVpY2tGaWx0ZXJFeHByID0gdGhpcy5nZXRRdWlja0ZpbHRlckV4cHJlc3Npb24oKTtcbiAgICBjb25zdCBmaWx0ZXJCdWlsZGVyRXhwciA9IHRoaXMuZ2V0RmlsdGVyQnVpbGRlckV4cHJlc3Npb24oKTtcbiAgICBsZXQgY29tcGxleEV4cHIgPSBxdWlja0ZpbHRlckV4cHIgfHwgZmlsdGVyQnVpbGRlckV4cHI7XG4gICAgaWYgKHF1aWNrRmlsdGVyRXhwciAmJiBmaWx0ZXJCdWlsZGVyRXhwcikge1xuICAgICAgY29tcGxleEV4cHIgPSBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuYnVpbGRDb21wbGV4RXhwcmVzc2lvbihxdWlja0ZpbHRlckV4cHIsIGZpbHRlckJ1aWxkZXJFeHByLCBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuT1BfQU5EKTtcbiAgICB9XG5cbiAgICBpZiAoY29tcGxleEV4cHIgJiYgIVV0aWwuaXNEZWZpbmVkKGZpbHRlcltGaWx0ZXJFeHByZXNzaW9uVXRpbHMuQkFTSUNfRVhQUkVTU0lPTl9LRVldKSkge1xuICAgICAgZmlsdGVyW0ZpbHRlckV4cHJlc3Npb25VdGlscy5CQVNJQ19FWFBSRVNTSU9OX0tFWV0gPSBjb21wbGV4RXhwcjtcbiAgICB9IGVsc2UgaWYgKGNvbXBsZXhFeHByKSB7XG4gICAgICBmaWx0ZXJbRmlsdGVyRXhwcmVzc2lvblV0aWxzLkJBU0lDX0VYUFJFU1NJT05fS0VZXSA9XG4gICAgICAgIEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZENvbXBsZXhFeHByZXNzaW9uKGZpbHRlcltGaWx0ZXJFeHByZXNzaW9uVXRpbHMuQkFTSUNfRVhQUkVTU0lPTl9LRVldLCBjb21wbGV4RXhwciwgRmlsdGVyRXhwcmVzc2lvblV0aWxzLk9QX0FORCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlcjtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRRdWlja0ZpbHRlckV4cHJlc3Npb24oKTogRXhwcmVzc2lvbiB7XG4gICAgaWYgKHRoaXMucGFnZWFibGUgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1aWNrRmlsdGVyQ29tcG9uZW50LmZpbHRlckV4cHJlc3Npb247XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RmlsdGVyQnVpbGRlckV4cHJlc3Npb24oKTogRXhwcmVzc2lvbiB7XG4gICAgLy8gQWRkIGZpbHRlciBmcm9tIG8tZmlsdGVyLWJ1aWxkZXIgY29tcG9uZW50XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuZmlsdGVyQnVpbGRlcikpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbHRlckJ1aWxkZXIuZ2V0RXhwcmVzc2lvbigpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0b3JlTmF2aWdhdGlvbkZvcm1Sb3V0ZXMoYWN0aXZlTW9kZTogc3RyaW5nLCBxdWVyeUNvbmY/OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBtYWluRm9ybUxheW91dENvbXAgPSB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyID8gVXRpbC5pc0RlZmluZWQodGhpcy5mb3JtTGF5b3V0TWFuYWdlci5pc01haW5Db21wb25lbnQodGhpcykpIDogdW5kZWZpbmVkO1xuICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2Uuc3RvcmVGb3JtUm91dGVzKHtcbiAgICAgIG1haW5Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudDogbWFpbkZvcm1MYXlvdXRDb21wLFxuICAgICAgaXNNYWluTmF2aWdhdGlvbkNvbXBvbmVudDogdHJ1ZSxcbiAgICAgIGRldGFpbEZvcm1Sb3V0ZTogdGhpcy5kZXRhaWxGb3JtUm91dGUsXG4gICAgICBlZGl0Rm9ybVJvdXRlOiB0aGlzLmVkaXRGb3JtUm91dGUsXG4gICAgICBpbnNlcnRGb3JtUm91dGU6IFV0aWwuaXNEZWZpbmVkKHRoaXMuaW5zZXJ0Rm9ybVJvdXRlKSA/IHRoaXMuaW5zZXJ0Rm9ybVJvdXRlIDogQ29kZXMuREVGQVVMVF9JTlNFUlRfUk9VVEVcbiAgICB9LCBhY3RpdmVNb2RlLCBxdWVyeUNvbmYpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNhdmVEYXRhTmF2aWdhdGlvbkluTG9jYWxTdG9yYWdlKCk6IHZvaWQge1xuICAgIC8vIFNhdmUgZGF0YSBvZiB0aGUgbGlzdCBpbiBuYXZpZ2F0aW9uLWRhdGEgaW4gdGhlIGxvY2Fsc3RvcmFnZVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldEtleXNWYWx1ZXMoKTogYW55W10ge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGFBcnJheTtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICByZXR1cm4gZGF0YS5tYXAoKHJvdykgPT4ge1xuICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICBzZWxmLmtleXNBcnJheS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgaWYgKHJvd1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvYmpba2V5XSA9IHJvd1trZXldO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSk7XG4gIH1cblxuICBnZXRSb3V0ZUtleSgpOiBzdHJpbmcge1xuICAgIGxldCByb3V0ZSA9ICcnO1xuICAgIGlmICh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyICYmICF0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLmlzTWFpbkNvbXBvbmVudCh0aGlzKSkge1xuICAgICAgcm91dGUgPSB0aGlzLnJvdXRlci51cmw7XG4gICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLmdldFBhcmFtcygpO1xuICAgICAgaWYgKHBhcmFtcykge1xuICAgICAgICByb3V0ZSArPSAnLycgKyAoT2JqZWN0LmtleXMocGFyYW1zKS5qb2luKCcvJykpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByb3V0ZSA9IHN1cGVyLmdldFJvdXRlS2V5KCk7XG4gICAgfVxuICAgIHJldHVybiByb3V0ZTtcbiAgfVxuXG4gIGdldCBlbGVtZW50UmVmKCk6IEVsZW1lbnRSZWYge1xuICAgIHJldHVybiB0aGlzLmVsUmVmO1xuICB9XG5cbiAgcHVibGljIHNob3dDYXNlU2Vuc2l0aXZlQ2hlY2tib3goKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLnBhZ2VhYmxlO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyUXVpY2tGaWx0ZXIoYXJnOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBxdWlja0ZpbHRlciA9IChhcmcgYXMgT1NlYXJjaElucHV0Q29tcG9uZW50KTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudCkpIHtcbiAgICAgIC8vIGF2b2lkaW5nIHRvIHJlZ2lzdGVyIGEgcXVpY2tmaWx0ZXJjb21wb25lbnQgaWYgaXQgYWxyZWFkeSBleGlzdHMgb25lXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucXVpY2tGaWx0ZXJDb21wb25lbnQgPSBxdWlja0ZpbHRlcjtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudCkpIHtcbiAgICAgIHRoaXMucXVpY2tGaWx0ZXJTdWJzY3JpcHRpb24gPSB0aGlzLnF1aWNrRmlsdGVyQ29tcG9uZW50Lm9uU2VhcmNoLnN1YnNjcmliZSh2YWwgPT4ge1xuICAgICAgICB0aGlzLm9uU2VhcmNoLmVtaXQodmFsKTtcbiAgICAgICAgdGhpcy5maWx0ZXJEYXRhKHZhbCk7XG4gICAgICB9KTtcbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnN0YXRlKSkge1xuICAgICAgICBpZiAoKHRoaXMuc3RhdGUucXVpY2tGaWx0ZXJWYWx1ZSB8fCAnJykubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMucXVpY2tGaWx0ZXJDb21wb25lbnQuc2V0VmFsdWUodGhpcy5zdGF0ZS5xdWlja0ZpbHRlclZhbHVlLCB7XG4gICAgICAgICAgICBlbWl0RXZlbnQ6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc0ZpbHRlckNhc2VTZW5zaXRpdmUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdXNlUXVpY2tGaWx0ZXJWYWx1ZSA9IFV0aWwuaXNEZWZpbmVkKHRoaXMucXVpY2tGaWx0ZXJDb21wb25lbnQpICYmIHRoaXMuc2hvd0Nhc2VTZW5zaXRpdmVDaGVja2JveCgpO1xuICAgIGlmICh1c2VRdWlja0ZpbHRlclZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudC5maWx0ZXJDYXNlU2Vuc2l0aXZlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5maWx0ZXJDYXNlU2Vuc2l0aXZlO1xuICB9XG5cbiAgcHVibGljIGNvbmZpZ3VyZUZpbHRlclZhbHVlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCByZXR1cm5WYWwgPSB2YWx1ZTtcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKCF2YWx1ZS5zdGFydHNXaXRoKCcqJykpIHtcbiAgICAgICAgcmV0dXJuVmFsID0gJyonICsgcmV0dXJuVmFsO1xuICAgICAgfVxuICAgICAgaWYgKCF2YWx1ZS5lbmRzV2l0aCgnKicpKSB7XG4gICAgICAgIHJldHVyblZhbCA9IHJldHVyblZhbCArICcqJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldHVyblZhbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRRdWlja0ZpbHRlclZhbHVlKCk6IHN0cmluZyB7XG4gICAgY29uc3QgcmVzdWx0ID0gJyc7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMucXVpY2tGaWx0ZXJDb21wb25lbnQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudC5nZXRWYWx1ZSgpIHx8ICcnO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGdldFF1aWNrRmlsdGVyQ29sdW1ucygpOiBzdHJpbmdbXSB7XG4gICAgbGV0IHJlc3VsdCA9IHRoaXMucXVpY2tGaWx0ZXJDb2xBcnJheTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudCkpIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMucXVpY2tGaWx0ZXJDb21wb25lbnQuZ2V0QWN0aXZlQ29sdW1ucygpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgZGF0YSBsb2NhbGx5XG4gICAqIEBwYXJhbSB2YWx1ZSB0aGUgZmlsdGVyaW5nIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgZmlsdGVyRGF0YSh2YWx1ZT86IHN0cmluZywgbG9hZE1vcmU/OiBib29sZWFuKTogdm9pZCB7XG4gICAgdmFsdWUgPSBVdGlsLmlzRGVmaW5lZCh2YWx1ZSkgPyB2YWx1ZSA6IFV0aWwuaXNEZWZpbmVkKHRoaXMucXVpY2tGaWx0ZXJDb21wb25lbnQpID8gdGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudC5nZXRWYWx1ZSgpIDogdm9pZCAwO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnN0YXRlKSAmJiBVdGlsLmlzRGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuc3RhdGUucXVpY2tGaWx0ZXJWYWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgY29uc3QgcXVlcnlBcmdzOiBPUXVlcnlEYXRhQXJncyA9IHtcbiAgICAgICAgb2Zmc2V0OiAwLFxuICAgICAgICBsZW5ndGg6IHRoaXMucXVlcnlSb3dzLFxuICAgICAgICByZXBsYWNlOiB0cnVlXG4gICAgICB9O1xuICAgICAgdGhpcy5xdWVyeURhdGEodm9pZCAwLCBxdWVyeUFyZ3MpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhUmVzcG9uc2VBcnJheSAmJiB0aGlzLmRhdGFSZXNwb25zZUFycmF5Lmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBmaWx0ZXJlZERhdGEgPSB0aGlzLmRhdGFSZXNwb25zZUFycmF5LnNsaWNlKDApO1xuICAgICAgZmlsdGVyZWREYXRhID0gdGhpcy5nZXRRdWlja0ZpbHRlckRhdGFGcm9tQXJyYXkodmFsdWUsIGZpbHRlcmVkRGF0YSk7XG4gICAgICBmaWx0ZXJlZERhdGEgPSB0aGlzLmdldFNvcnRlZERhdGFGcm9tQXJyYXkoZmlsdGVyZWREYXRhKTtcbiAgICAgIGZpbHRlcmVkRGF0YSA9IHRoaXMuZ2V0UGFnaW5hdGlvbkRhdGFGcm9tQXJyYXkoZmlsdGVyZWREYXRhKTtcbiAgICAgIHRoaXMuc2V0RGF0YUFycmF5KGZpbHRlcmVkRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0RGF0YUFycmF5KHRoaXMuZGF0YVJlc3BvbnNlQXJyYXkpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRRdWlja0ZpbHRlckRhdGFGcm9tQXJyYXkocXVpY2tmaWx0ZXI6IHN0cmluZywgZGF0YUFycmF5OiBhbnlbXSk6IGFueVtdIHtcbiAgICBsZXQgcmVzdWx0ID0gZGF0YUFycmF5O1xuICAgIGlmIChxdWlja2ZpbHRlciAmJiBxdWlja2ZpbHRlci5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjYXNlU2Vuc2l0aXZlID0gdGhpcy5pc0ZpbHRlckNhc2VTZW5zaXRpdmUoKTtcbiAgICAgIGNvbnN0IHF1aWNrRmlsdGVyQ29sdW1ucyA9IHRoaXMuZ2V0UXVpY2tGaWx0ZXJDb2x1bW5zKCk7XG4gICAgICBjb25zdCByZWdFeHBTdHIgPSBuZXcgUmVnRXhwKFV0aWwuZXNjYXBlU3BlY2lhbENoYXJhY3RlcihVdGlsLm5vcm1hbGl6ZVN0cmluZyhxdWlja2ZpbHRlciwgIWNhc2VTZW5zaXRpdmUpKSk7XG4gICAgICByZXN1bHQgPSBkYXRhQXJyYXkuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICByZXR1cm4gcXVpY2tGaWx0ZXJDb2x1bW5zLnNvbWUoY29sID0+IHJlZ0V4cFN0ci50ZXN0KFV0aWwubm9ybWFsaXplU3RyaW5nKGl0ZW1bY29sXSArICcnLCAhY2FzZVNlbnNpdGl2ZSkpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNvcnRlZERhdGFGcm9tQXJyYXkoZGF0YUFycmF5OiBhbnlbXSk6IGFueVtdIHtcbiAgICByZXR1cm4gZGF0YUFycmF5O1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldERhdGEoZGF0YTogYW55LCBzcWxUeXBlcz86IGFueSwgcmVwbGFjZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoIVV0aWwuaXNBcnJheShkYXRhKSkge1xuICAgICAgdGhpcy5zZXREYXRhQXJyYXkoW10pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGFSZXNwb25zZUFycmF5ID0gdGhpcy5wYXJzZVJlc3BvbnNlQXJyYXkoZGF0YSwgcmVwbGFjZSk7XG4gICAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgICB0aGlzLnNldERhdGFBcnJheSh0aGlzLmRhdGFSZXNwb25zZUFycmF5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmlsdGVyRGF0YSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgT2JzZXJ2YWJsZVdyYXBwZXIuY2FsbEVtaXQodGhpcy5vblBhZ2luYXRlZERhdGFMb2FkZWQsIGRhdGEpO1xuICAgIH1cbiAgICBPYnNlcnZhYmxlV3JhcHBlci5jYWxsRW1pdCh0aGlzLm9uRGF0YUxvYWRlZCwgdGhpcy5kYXRhUmVzcG9uc2VBcnJheSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VSZXNwb25zZUFycmF5KGRhdGE6IGFueVtdLCByZXBsYWNlPzogYm9vbGVhbikge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlZ2lzdGVyRm9ybUxheW91dE1hbmFnZXJTdGF0ZSgpIHtcbiAgICBpZiAodGhpcy5zdG9yZVN0YXRlICYmIHRoaXMuZm9ybUxheW91dE1hbmFnZXIgJiYgdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5pc1RhYk1vZGUoKSAmJiB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLm9UYWJHcm91cCkge1xuICAgICAgaWYgKCFVdGlsLmlzRGVmaW5lZCh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyVGFiSW5kZXgpKSB7XG4gICAgICAgIHRoaXMuZm9ybUxheW91dE1hbmFnZXJUYWJJbmRleCA9IHRoaXMuZm9ybUxheW91dE1hbmFnZXIub1RhYkdyb3VwLmRhdGEubGVuZ3RoO1xuICAgICAgfVxuICAgICAgY29uc3QgdXBkYXRlQ29tcG9uZW50U3RhdGVTdWJqZWN0ID0gKHRoaXMuZm9ybUxheW91dE1hbmFnZXIub1RhYkdyb3VwIGFzIE9Gb3JtTGF5b3V0VGFiR3JvdXBDb21wb25lbnQpLnVwZGF0ZVRhYkNvbXBvbmVudHNTdGF0ZTtcblxuICAgICAgdGhpcy50YWJzU3Vic2NyaXB0aW9ucyA9IHRoaXMuZm9ybUxheW91dE1hbmFnZXIub25TZWxlY3RlZFRhYkNoYW5nZS5zdWJzY3JpYmUoKGFyZykgPT4ge1xuICAgICAgICBpZiAodGhpcy5mb3JtTGF5b3V0TWFuYWdlclRhYkluZGV4ID09PSBhcmcucHJldmlvdXNJbmRleCkge1xuICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGVTdG9yYWdlKCk7XG4gICAgICAgICAgLy8gc2V0dGluZyBhbHJlYWR5U3RvcmVkIHRvIGZhbHNlIHRvIGZvcmNlIHRyaWdnZXJpbmcgYSBuZXcgc3RvcmFnZSB1cGRhdGUgYWZ0ZXIgdGhpc1xuICAgICAgICAgIHRoaXMuYWxyZWFkeVN0b3JlZCA9IGZhbHNlO1xuICAgICAgICAgIGlmIChhcmcuaW5kZXggIT09IDApIHtcbiAgICAgICAgICAgIHVwZGF0ZUNvbXBvbmVudFN0YXRlU3ViamVjdC5uZXh0KGFyZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICgoKGFyZy5wcmV2aW91c0luZGV4ID09PSB2b2lkIDApIHx8IGFyZy5wcmV2aW91c0luZGV4ID09PSAwKSAmJiB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLm5hdmlnYXRpb25TZXJ2aWNlLmlzTmF2aWdhdGluZykge1xuICAgICAgICAgIC8qIGluIHRoZSBmb3JtLWxheW91dCBtb2RlPXRhYiwgdGhlIG9ubHkgd2F5IHRvIGVuc3VyZSB0aGF0IHRoZSBjb21wb25lbnQgaGFzIGJlZW4gcmVuZGVyZWQgaXNcbiAgICAgICAgICAgd2hlbiBuYXZpZ2F0aW9uU2VydmljZS5pc05hdmlnYXRpbmcgYW5kIGNvbWVzIHByZXZpb3VzSW5kZXg9MCAgKi9cbiAgICAgICAgICBhcmcuZGF0YS5yZW5kZXJlclN1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrVmlld1BvcnRTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy50YWJzU3Vic2NyaXB0aW9ucy5hZGQodXBkYXRlQ29tcG9uZW50U3RhdGVTdWJqZWN0LnN1YnNjcmliZSgoYXJnKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyVGFiSW5kZXggPT09IGFyZy5pbmRleCkge1xuICAgICAgICAgIHRoaXMuY29tcG9uZW50U3RhdGVTZXJ2aWNlLmluaXRpYWxpemUodGhpcyk7XG4gICAgICAgICAgdGhpcy5hcHBseURlZmF1bHRDb25maWd1cmF0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcblxuICAgICAgdGhpcy50YWJzU3Vic2NyaXB0aW9ucy5hZGQodGhpcy5mb3JtTGF5b3V0TWFuYWdlci5vbkNsb3NlVGFiLnN1YnNjcmliZSgoYXJnKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyVGFiSW5kZXggPT09IGFyZy5pbmRleCkge1xuICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGVTdG9yYWdlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9XG4gIH1cblxuICBhcHBseURlZmF1bHRDb25maWd1cmF0aW9uKCkge1xuXG4gIH1cblxuICBwdWJsaWMgb25DaGFuZ2VQYWdlKGU6IFBhZ2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuZGF0YVNlcnZpY2U/LnNldFBhZ2luYXRpb25Db250ZXh0KHsgcGFnZU51bWJlcjogZS5wYWdlSW5kZXgsIHBhZ2VTaXplOiBlLnBhZ2VTaXplIH0pO1xuXG4gICAgaWYgKCF0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gZS5wYWdlSW5kZXg7XG4gICAgICB0aGlzLnF1ZXJ5Um93cyA9IGUucGFnZVNpemU7XG4gICAgICB0aGlzLmZpbHRlckRhdGEoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZ29pbmdCYWNrID0gZS5wYWdlSW5kZXggPCB0aGlzLmN1cnJlbnRQYWdlO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBlLnBhZ2VJbmRleDtcbiAgICBjb25zdCBwYWdlU2l6ZSA9IGUucGFnZVNpemU7XG5cbiAgICBjb25zdCBvbGRRdWVyeVJvd3MgPSB0aGlzLnF1ZXJ5Um93cztcbiAgICBjb25zdCBjaGFuZ2luZ1BhZ2VTaXplID0gKG9sZFF1ZXJ5Um93cyAhPT0gcGFnZVNpemUpO1xuICAgIHRoaXMucXVlcnlSb3dzID0gcGFnZVNpemU7XG5cbiAgICBsZXQgbmV3U3RhcnRSZWNvcmQ7XG4gICAgbGV0IHF1ZXJ5TGVuZ3RoO1xuXG4gICAgaWYgKGdvaW5nQmFjayB8fCBjaGFuZ2luZ1BhZ2VTaXplKSB7XG4gICAgICBuZXdTdGFydFJlY29yZCA9ICh0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5xdWVyeVJvd3MpO1xuICAgICAgcXVlcnlMZW5ndGggPSB0aGlzLnF1ZXJ5Um93cztcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3U3RhcnRSZWNvcmQgPSBNYXRoLm1heCh0aGlzLnN0YXRlLnF1ZXJ5UmVjb3JkT2Zmc2V0LCAodGhpcy5jdXJyZW50UGFnZSAqIHRoaXMucXVlcnlSb3dzKSk7XG4gICAgICBjb25zdCBuZXdFbmRSZWNvcmQgPSBNYXRoLm1pbihuZXdTdGFydFJlY29yZCArIHRoaXMucXVlcnlSb3dzLCB0aGlzLnN0YXRlLnRvdGFsUXVlcnlSZWNvcmRzTnVtYmVyKTtcbiAgICAgIHF1ZXJ5TGVuZ3RoID0gdGhpcy5kaXNhYmxlUGFnZVNpemVDYWxjdWxhdGlvbiA/IHRoaXMucXVlcnlSb3dzIDogTWF0aC5taW4odGhpcy5xdWVyeVJvd3MsIG5ld0VuZFJlY29yZCAtIG5ld1N0YXJ0UmVjb3JkKTtcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeUFyZ3M6IE9RdWVyeURhdGFBcmdzID0ge1xuICAgICAgb2Zmc2V0OiBuZXdTdGFydFJlY29yZCxcbiAgICAgIGxlbmd0aDogcXVlcnlMZW5ndGgsXG4gICAgICByZXBsYWNlOiB0cnVlXG4gICAgfTtcblxuICAgIHRoaXMucXVlcnlEYXRhKHZvaWQgMCwgcXVlcnlBcmdzKTtcbiAgfVxuXG4gIHNldCBjdXJyZW50UGFnZSh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuX2N1cnJlbnRQYWdlID0gdmFsO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRQYWdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRQYWdlO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9jdXJyZW50UGFnZTogbnVtYmVyID0gMDtcblxuXG4gIGdldCB0b3RhbFJlY29yZHMoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VG90YWxSZWNvcmRzTnVtYmVyKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRhdGFSZXNwb25zZUFycmF5Lmxlbmd0aDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRQYWdpbmF0aW9uRGF0YUZyb21BcnJheShkYXRhQXJyYXk6IGFueVtdKTogYW55W10ge1xuICAgIGxldCByZXN1bHQgPSBkYXRhQXJyYXk7XG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbkNvbnRyb2xzKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQuc3BsaWNlKHRoaXMuY3VycmVudFBhZ2UgKiB0aGlzLnF1ZXJ5Um93cywgdGhpcy5xdWVyeVJvd3MpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaGFuZGxlSXRlbUNsaWNrKGl0ZW06IEl0ZW1DbGljayk6IHZvaWQge1xuICAgIHRoaXMuY2xpY2tUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNsaWNrUHJldmVudCkge1xuICAgICAgICB0aGlzLml0ZW1DbGlja0RvbmUoaXRlbSk7XG4gICAgICB9XG4gICAgICB0aGlzLmNsaWNrUHJldmVudCA9IGZhbHNlO1xuICAgIH0sIHRoaXMuY2xpY2tEZWxheSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXRlbUNsaWNrRG9uZShpdGVtOiBJdGVtQ2xpY2spOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMub2VuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IGl0ZW0uZ2V0SXRlbURhdGEoKTtcbiAgICBpZiAodGhpcy5kZXRhaWxNb2RlID09PSBDb2Rlcy5ERVRBSUxfTU9ERV9DTElDSykge1xuICAgICAgdGhpcy5zYXZlRGF0YU5hdmlnYXRpb25JbkxvY2FsU3RvcmFnZSgpO1xuICAgICAgdGhpcy52aWV3RGV0YWlsKGRhdGEpO1xuICAgIH1cbiAgICB0aGlzLm9uQ2xpY2suZW1pdChkYXRhKTtcbiAgfVxuXG4gIGhhbmRsZUl0ZW1EYmxDbGljayhpdGVtOiBJdGVtQ2xpY2spOiB2b2lkIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5jbGlja1RpbWVyKTtcbiAgICB0aGlzLmNsaWNrUHJldmVudCA9IHRydWU7XG4gICAgdGhpcy5pdGVtRGJsQ2xpY2tEb25lKGl0ZW0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGl0ZW1EYmxDbGlja0RvbmUoaXRlbTogSXRlbUNsaWNrKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm9lbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRhdGEgPSBpdGVtLmdldEl0ZW1EYXRhKCk7XG4gICAgaWYgKENvZGVzLmlzRG91YmxlQ2xpY2tNb2RlKHRoaXMuZGV0YWlsTW9kZSkpIHtcbiAgICAgIHRoaXMuc2F2ZURhdGFOYXZpZ2F0aW9uSW5Mb2NhbFN0b3JhZ2UoKTtcbiAgICAgIHRoaXMudmlld0RldGFpbChkYXRhKTtcbiAgICB9XG4gICAgdGhpcy5vbkRvdWJsZUNsaWNrLmVtaXQoZGF0YSk7XG4gIH1cblxuICBnZXQgcXVpY2tGaWx0ZXJBcHBlYXJhbmNlKCk6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2Uge1xuICAgIHJldHVybiB0aGlzLl9xdWlja0ZpbHRlckFwcGVhcmFuY2U7XG4gIH1cblxuICBzZXQgcXVpY2tGaWx0ZXJBcHBlYXJhbmNlKHZhbHVlOiBNYXRGb3JtRmllbGRBcHBlYXJhbmNlKSB7XG4gICAgY29uc3QgdmFsdWVzID0gWydmaWxsJywgJ291dGxpbmUnXTtcbiAgICBpZiAodmFsdWVzLmluZGV4T2YodmFsdWUpID09PSAtMSkge1xuICAgICAgY29uc29sZS53YXJuKCdUaGUgcXVpY2stZmlsdGVyLWFwcGVhcmFuY2UgYXR0cmlidXRlIGlzIHVuZGVmaW5lZCBzbyB0aGUgb3V0bGluZSB2YWx1ZSB3aWxsIGJlIHVzZWQnKTtcbiAgICAgIHZhbHVlID0gJ291dGxpbmUnO1xuICAgIH1cbiAgICB0aGlzLl9xdWlja0ZpbHRlckFwcGVhcmFuY2UgPSB2YWx1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTcWxUeXBlc09mS2V5cygpIHtcbiAgICBjb25zdCBzcWxUeXBlcyA9IHRoaXMuZ2V0U3FsVHlwZXMoKTtcbiAgICBjb25zdCBzcWxUeXBlc0FyZyA9IHt9O1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChzcWxUeXBlcykpIHtcbiAgICAgIHRoaXMua2V5c0FycmF5LmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgc3FsVHlwZXNBcmdba2V5XSA9IHNxbFR5cGVzW2tleV07XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHNxbFR5cGVzQXJnO1xuXG4gIH1cblxuICBjb21wYXJlUm93KCk6ICgobzE6IGFueSwgbzI6IGFueSkgPT4gYm9vbGVhbikgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiAobzE6IGFueSwgbzI6IGFueSkgPT4gdGhpcy5rZXlzQXJyYXkuZXZlcnkoa2V5ID0+IG8xW2tleV0gPT09IG8yW2tleV0pO1xuICB9XG59XG5cbi8qVGhpcyBjbGFzcyBpcyBkZWZpbmllZCB0byBtYW50YWluIGJhY3dhcmRzIGNvbXBhdGliaWxpdHkgKi9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIE9TZXJ2aWNlQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RPU2VydmljZUNvbXBvbmVudDxEZWZhdWx0U2VydmljZUNvbXBvbmVudFN0YXRlU2VydmljZT4ge1xuXG59XG4iXX0=
|
|
880
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1zZXJ2aWNlLWNvbXBvbmVudC5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL28tc2VydmljZS1jb21wb25lbnQuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdHLE9BQU8sRUFBRSxZQUFZLEVBQWEsTUFBTSw2QkFBNkIsQ0FBQztBQUV0RSxPQUFPLEVBQUUsZUFBZSxFQUE0QixNQUFNLE1BQU0sQ0FBQztBQUdqRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUNsRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUV4RixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUVyRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUdqRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUc5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFJaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxFQUFFLHFCQUFxQixFQUFF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QUFxQixFQUFFOztvRUFDVztBQUduQztJQUFDLHFCQUFxQixFQUFFOztnRUFDaUI7QUFDekM7SUFBQyxxQkFBcUIsRUFBRTs7a0VBQ1M7QUFFakM7SUFBQyxxQkFBcUIsRUFBRTs7K0RBQ0Y7QUFDdEI7SUFBQyxxQkFBcUIsRUFBRTs7cUVBQ1c7QUFDbkM7SUFBQyxxQkFBcUIsRUFBRTs7NkVBQ29CO0FBK0I1QztJQUFDLHFCQUFxQixFQUFFOztrRUFDbUI7MkZBNUV2Qix5QkFBeUI7a0JBSjlDLFNBQVM7bUJBQUM7b0JBQ1QsTUFBTSxFQUFFLGtDQUFrQztvQkFDMUMsT0FBTyxFQUFFLG1DQUFtQztpQkFDN0M7cUpBSTBCLFlBQVk7c0JBQXBDLFNBQVM7dUJBQUMsWUFBWTtnQkFrQmIsUUFBUSxNQUVSLFFBQVEsTUFFUixRQUFRLE1BSVIsZUFBZSxNQUV6QixpQkFBaUIsTUFJUCxhQUFhLE1BRXZCLGVBQWUsTUFHZixZQUFZLE1BRVosa0JBQWtCLE1BRWxCLDBCQUEwQixNQWdDaEIsZUFBZSxNQXFEbEIsb0JBQW9CO3NCQUQxQixTQUFTO3VCQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHFCQUFxQixDQUFDLENBQUM7O0FBb3hCdEQsTUFBTSxPQUFPLGlCQUFrQixTQUFRLHlCQUE4RDs7OEdBQXhGLGlCQUFpQjtrR0FBakIsaUJBQWlCOzJGQUFqQixpQkFBaUI7a0JBRDdCLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSW5qZWN0b3IsIE5nWm9uZSwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRBcHBlYXJhbmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IsIFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBPRmlsdGVyQnVpbGRlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZmlsdGVyLWJ1aWxkZXIvby1maWx0ZXItYnVpbGRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgT1NlYXJjaElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9pbnB1dC9zZWFyY2gtaW5wdXQvby1zZWFyY2gtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEJvb2xlYW5Db252ZXJ0ZXIsIEJvb2xlYW5JbnB1dENvbnZlcnRlciB9IGZyb20gJy4uL2RlY29yYXRvcnMvaW5wdXQtY29udmVydGVyJztcbmltcG9ydCB7IElTZXJ2aWNlRGF0YUNvbXBvbmVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VydmljZS1kYXRhLWNvbXBvbmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT0Zvcm1MYXlvdXREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9sYXlvdXRzL2Zvcm0tbGF5b3V0L2RpYWxvZy9vLWZvcm0tbGF5b3V0LWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vbGF5b3V0cy9mb3JtLWxheW91dC9vLWZvcm0tbGF5b3V0LW1hbmFnZXIuY29tcG9uZW50JztcbmltcG9ydCB7IE9Gb3JtTGF5b3V0VGFiR3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi9sYXlvdXRzL2Zvcm0tbGF5b3V0L3RhYmdyb3VwL28tZm9ybS1sYXlvdXQtdGFiZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFBlcm1pc3Npb25zU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWJzdHJhY3RTZXJ2aWNlQ29tcG9uZW50U3RhdGVDbGFzcyB9IGZyb20gJy4uL3NlcnZpY2VzL3N0YXRlL28tY29tcG9uZW50LXN0YXRlLmNsYXNzJztcbmltcG9ydCB7IEFic3RyYWN0Q29tcG9uZW50U3RhdGVTZXJ2aWNlLCBEZWZhdWx0U2VydmljZUNvbXBvbmVudFN0YXRlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0YXRlL28tY29tcG9uZW50LXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT1RyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy90cmFuc2xhdGUvby10cmFuc2xhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBPUGVybWlzc2lvbnMgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBFeHByZXNzaW9uIH0gZnJvbSAnLi4vdHlwZXMvZXhwcmVzc2lvbi50eXBlJztcbmltcG9ydCB7IE9fR0xPQkFMX0NPTkZJRyB9IGZyb20gJy4uL3R5cGVzL28tZ2xvYmFsLWNvbmZpZy50eXBlJztcbmltcG9ydCB7IE9MaXN0SW5pdGlhbGl6YXRpb25PcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMvby1saXN0LWluaXRpYWxpemF0aW9uLW9wdGlvbnMudHlwZSc7XG5pbXBvcnQgeyBPUXVlcnlEYXRhQXJncyB9IGZyb20gJy4uL3R5cGVzL3F1ZXJ5LWRhdGEtYXJncy50eXBlJztcbmltcG9ydCB7IE9UYWJsZUluaXRpYWxpemF0aW9uT3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzL3RhYmxlL28tdGFibGUtaW5pdGlhbGl6YXRpb24tb3B0aW9ucy50eXBlJztcbmltcG9ydCB7IE9ic2VydmFibGVXcmFwcGVyIH0gZnJvbSAnLi4vdXRpbC9hc3luYyc7XG5pbXBvcnQgeyBDb2RlcyB9IGZyb20gJy4uL3V0aWwvY29kZXMnO1xuaW1wb3J0IHsgRmlsdGVyRXhwcmVzc2lvblV0aWxzIH0gZnJvbSAnLi4vdXRpbC9maWx0ZXItZXhwcmVzc2lvbi51dGlscyc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uc1V0aWxzIH0gZnJvbSAnLi4vdXRpbC9wZXJtaXNzaW9ucyc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IE9Gb3JtQ29tcG9uZW50IH0gZnJvbSAnLi9mb3JtL28tZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWJzdHJhY3RPU2VydmljZUJhc2VDb21wb25lbnQsIERFRkFVTFRfSU5QVVRTX09fU0VSVklDRV9CQVNFX0NPTVBPTkVOVCB9IGZyb20gJy4vby1zZXJ2aWNlLWJhc2UtY29tcG9uZW50LmNsYXNzJztcbmltcG9ydCB7IE9Gb3JtTGF5b3V0TWFuYWdlckJhc2UgfSBmcm9tICcuLi9sYXlvdXRzL2Zvcm0tbGF5b3V0L28tZm9ybS1sYXlvdXQtbWFuYWdlci1iYXNlLmNsYXNzJztcbmltcG9ydCB7IE9Gb3JtTGF5b3V0TWFuYWdlckNvbnRleHQgfSBmcm9tICcuLi90eXBlcy9mb3JtLWxheW91dC1tYW5hZ2VyLWNvbnRleHQudHlwZSc7XG5pbXBvcnQgeyBPRm9ybUxheW91dE1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvby1mb3JtLWxheW91dC1tYW5hZ2VyLnNlcnZpY2UnO1xuXG5pbnRlcmZhY2UgSXRlbUNsaWNrIHtcbiAgZ2V0SXRlbURhdGEoKTogYW55XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOUFVUU19PX1NFUlZJQ0VfQ09NUE9ORU5UID0gW1xuICAuLi5ERUZBVUxUX0lOUFVUU19PX1NFUlZJQ0VfQkFTRV9DT01QT05FTlQsXG5cbiAgJ190aXRsZTogdGl0bGUnLFxuXG4gIC8vIHZpc2libGUgW25vfHllc106IHZpc2liaWxpdHkuIERlZmF1bHQ6IHllcy5cbiAgJ292aXNpYmxlOiB2aXNpYmxlJyxcblxuICAvLyBlbmFibGVkIFtub3x5ZXNdOiBlZGl0YWJpbGl0eS4gRGVmYXVsdDogeWVzLlxuICAnb2VuYWJsZWQ6IGVuYWJsZWQnLFxuXG4gIC8vIGNvbnRyb2xzIFtzdHJpbmddW3llc3xub3x0cnVlfGZhbHNlXTpcbiAgJ2NvbnRyb2xzJyxcblxuICAvLyBkZXRhaWwtbW9kZSBbbm9uZXxjbGlja3xkb3VibGVjbGlja106IHdheSB0byBvcGVuIHRoZSBkZXRhaWwgZm9ybSBvZiBhIHJvdy4gRGVmYXVsdDogJ2NsaWNrJy5cbiAgJ2RldGFpbE1vZGU6IGRldGFpbC1tb2RlJyxcblxuICAvLyBkZXRhaWwtZm9ybS1yb3V0ZSBbc3RyaW5nXTogcm91dGUgb2YgZGV0YWlsIGZvcm0uIERlZmF1bHQ6ICdkZXRhaWwnLlxuICAnZGV0YWlsRm9ybVJvdXRlOiBkZXRhaWwtZm9ybS1yb3V0ZScsXG5cbiAgLy8gcmVjdXJzaXZlLWRldGFpbCBbbm98eWVzXTogZG8gbm90IGFwcGVuZCBkZXRhaWwga2V5cyB3aGVuIG5hdmlnYXRlIChvdmVyd3JpdGUgY3VycmVudCkuIERlZmF1bHQ6IG5vLlxuICAncmVjdXJzaXZlRGV0YWlsOiByZWN1cnNpdmUtZGV0YWlsJyxcblxuICAvLyBkZXRhaWwtYnV0dG9uLWluLXJvdyBbbm98eWVzXTogYWRkaW5nIGEgYnV0dG9uIGluIHJvdyBmb3Igb3BlbmluZyBkZXRhaWwgZm9ybS4gRGVmYXVsdDogeWVzLlxuICAnZGV0YWlsQnV0dG9uSW5Sb3c6IGRldGFpbC1idXR0b24taW4tcm93JyxcblxuICAvLyBkZXRhaWwtYnV0dG9uLWluLXJvdy1pY29uIFtzdHJpbmddOiBtYXRlcmlhbCBpY29uLiBEZWZhdWx0OiBtb2RlX2VkaXQuXG4gICdkZXRhaWxCdXR0b25JblJvd0ljb246IGRldGFpbC1idXR0b24taW4tcm93LWljb24nLFxuXG4gIC8vIGVkaXQtZm9ybS1yb3V0ZSBbc3RyaW5nXTogcm91dGUgb2YgZWRpdCBmb3JtLiBEZWZhdWx0OiAnZWRpdCcuXG4gICdlZGl0Rm9ybVJvdXRlOiBlZGl0LWZvcm0tcm91dGUnLFxuXG4gIC8vIHJlY3Vyc2l2ZS1lZGl0IFtub3x5ZXNdOiBkbyBub3QgYXBwZW5kIGRldGFpbCBrZXlzIHdoZW4gbmF2aWdhdGUgKG92ZXJ3cml0ZSBjdXJyZW50KS4gRGVmYXVsdDogbm8uXG4gICdyZWN1cnNpdmVFZGl0OiByZWN1cnNpdmUtZWRpdCcsXG5cbiAgLy8gZWRpdC1idXR0b24taW4tcm93IFtub3x5ZXNdOiBhZGRpbmcgYSBidXR0b24gaW4gcm93IGZvciBvcGVuaW5nIGVkaXRpb24gZm9ybS4gRGVmYXVsdDogbm8uXG4gICdlZGl0QnV0dG9uSW5Sb3c6IGVkaXQtYnV0dG9uLWluLXJvdycsXG5cbiAgLy8gZWRpdC1idXR0b24taW4tcm93LWljb24gW3N0cmluZ106IG1hdGVyaWFsIGljb24uIERlZmF1bHQ6IHNlYXJjaC5cbiAgJ2VkaXRCdXR0b25JblJvd0ljb246IGVkaXQtYnV0dG9uLWluLXJvdy1pY29uJyxcblxuICAvLyBpbnNlcnQtYnV0dG9uIFtub3x5ZXNdOiBzaG93IGluc2VydCBidXR0b24uIERlZmF1bHQ6IHllcy5cbiAgJ2luc2VydEJ1dHRvbjogaW5zZXJ0LWJ1dHRvbicsXG5cbiAgLy8gcm93LWhlaWdodCBbc21hbGwgfCBtZWRpdW0gfCBsYXJnZV1cbiAgJ3Jvd0hlaWdodCA6IHJvdy1oZWlnaHQnLFxuXG4gIC8vIGluc2VydC1mb3JtLXJvdXRlIFtzdHJpbmddOiByb3V0ZSBvZiBpbnNlcnQgZm9ybS4gRGVmYXVsdDpcbiAgJ2luc2VydEZvcm1Sb3V0ZTogaW5zZXJ0LWZvcm0tcm91dGUnLFxuXG4gIC8vIHJlY3Vyc2l2ZS1pbnNlcnQgW25vfHllc106IGRvIG5vdCBhcHBlbmQgaW5zZXJ0IGtleXMgd2hlbiBuYXZpZ2F0ZSAob3ZlcndyaXRlIGN1cnJlbnQpLiBEZWZhdWx0OiBuby5cbiAgJ3JlY3Vyc2l2ZUluc2VydDogcmVjdXJzaXZlLWluc2VydCcsXG5cbiAgLy8gZmlsdGVyIFt5ZXN8bm98dHJ1ZXxmYWxzZV06IHdoZXRoZXIgZmlsdGVyIGlzIGNhc2Ugc2Vuc2l0aXZlLiBEZWZhdWx0OiBuby5cbiAgJ2ZpbHRlckNhc2VTZW5zaXRpdmU6IGZpbHRlci1jYXNlLXNlbnNpdGl2ZScsXG5cbiAgLy8gcXVpY2stZmlsdGVyIFtub3x5ZXNdOiBzaG93IHF1aWNrIGZpbHRlci4gRGVmYXVsdDogeWVzLlxuICAncXVpY2tGaWx0ZXI6IHF1aWNrLWZpbHRlcicsXG5cbiAgLy8gcXVpY2stZmlsdGVyLXBsYWNlaG9sZGVyOiBxdWljayBmaWx0ZXIgcGxhY2Vob2xkZXJcbiAgJ3F1aWNrRmlsdGVyUGxhY2Vob2xkZXI6IHF1aWNrLWZpbHRlci1wbGFjZWhvbGRlcicsXG5cbiAgLy8gcGFnaW5hdGlvbi1jb250cm9scyBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IHBhZ2luYXRpb24gY29udHJvbHMuIERlZmF1bHQ6IHllcy5cbiAgJ3BhZ2luYXRpb25Db250cm9sczogcGFnaW5hdGlvbi1jb250cm9scycsXG5cbiAgLy8gcGFnZS1zaXplLW9wdGlvbnMgW3N0cmluZ106IFBhZ2Ugc2l6ZSBvcHRpb25zIHNlcGFyYXRlZCBieSAnOycuXG4gICdwYWdlU2l6ZU9wdGlvbnM6IHBhZ2Utc2l6ZS1vcHRpb25zJyxcblxuICAvL3F1aWNrRmlsdGVyQXBwZWFyYW5jZVtsZWdhY3l8c3RhbmRhcmR8ZmlsbHxvdXRsaW5lXSBJbmRpY2F0ZXMgd2hpY2ggb2YgdGhlIG1hdC1mb3JtLWZpZWxkIGRpZmZlcmVudCBhcHBlYXJhbmNlIHZhcmlhbnRzIHdpbGwgYmUgdXNlZC4gRGVmYXVsdDogb3V0bGluZVxuICAncXVpY2tGaWx0ZXJBcHBlYXJhbmNlOnF1aWNrLWZpbHRlci1hcHBlYXJhbmNlJyxcblxuICAnZGlzYWJsZVBhZ2VTaXplQ2FsY3VsYXRpb246IGRpc2FibGUtcGFnZS1zaXplLWNhbGN1bGF0aW9uJ1xuXTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1VUUFVUU19PX1NFUlZJQ0VfQ09NUE9ORU5UID0gW1xuICAnb25DbGljaycsXG4gICdvbkRvdWJsZUNsaWNrJyxcbiAgJ29uRGF0YUxvYWRlZCcsXG4gICdvblBhZ2luYXRlZERhdGFMb2FkZWQnLFxuICAnb25TZWFyY2gnXG5dXG5cbkBEaXJlY3RpdmUoe1xuICBpbnB1dHM6IERFRkFVTFRfSU5QVVRTX09fU0VSVklDRV9DT01QT05FTlQsXG4gIG91dHB1dHM6IERFRkFVTFRfT1VUUFVUU19PX1NFUlZJQ0VfQ09NUE9ORU5UXG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0T1NlcnZpY2VDb21wb25lbnQ8VCBleHRlbmRzIEFic3RyYWN0Q29tcG9uZW50U3RhdGVTZXJ2aWNlPEFic3RyYWN0U2VydmljZUNvbXBvbmVudFN0YXRlQ2xhc3M+PlxuICBleHRlbmRzIEFic3RyYWN0T1NlcnZpY2VCYXNlQ29tcG9uZW50PFQ+XG4gIGltcGxlbWVudHMgSVNlcnZpY2VEYXRhQ29tcG9uZW50IHtcbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IpIG1hdHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xuXG4gIHByb3RlY3RlZCBwZXJtaXNzaW9uc1NlcnZpY2U6IFBlcm1pc3Npb25zU2VydmljZTtcbiAgcHJvdGVjdGVkIHRyYW5zbGF0ZVNlcnZpY2U6IE9UcmFuc2xhdGVTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlO1xuXG4gIC8qIGlucHV0cyB2YXJpYWJsZXMgKi9cbiAgc2V0IHRpdGxlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGl0bGUgPSB2YWw7XG4gIH1cbiAgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuX3RpdGxlKSkge1xuICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQodGhpcy5fdGl0bGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdGl0bGU7XG4gIH1cbiAgcHJvdGVjdGVkIF90aXRsZTogc3RyaW5nO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHJvdGVjdGVkIG92aXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHByb3RlY3RlZCBvZW5hYmxlZDogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwcm90ZWN0ZWQgY29udHJvbHM6IGJvb2xlYW4gPSB0cnVlO1xuICBwdWJsaWMgZGV0YWlsTW9kZTogc3RyaW5nID0gQ29kZXMuREVUQUlMX01PREVfQ0xJQ0s7XG4gIHByb3RlY3RlZCBkZXRhaWxGb3JtUm91dGU6IHN0cmluZztcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHByb3RlY3RlZCByZWN1cnNpdmVEZXRhaWw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGRldGFpbEJ1dHRvbkluUm93OiBib29sZWFuID0gZmFsc2U7XG4gIGRldGFpbEJ1dHRvbkluUm93SWNvbjogc3RyaW5nID0gQ29kZXMuREVUQUlMX0lDT047XG4gIHByb3RlY3RlZCBlZGl0Rm9ybVJvdXRlOiBzdHJpbmc7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwcm90ZWN0ZWQgcmVjdXJzaXZlRWRpdDogYm9vbGVhbiA9IGZhbHNlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgZWRpdEJ1dHRvbkluUm93OiBib29sZWFuID0gZmFsc2U7XG4gIGVkaXRCdXR0b25JblJvd0ljb246IHN0cmluZyA9IENvZGVzLkVESVRfSUNPTjtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGluc2VydEJ1dHRvbjogYm9vbGVhbjtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHBhZ2luYXRpb25Db250cm9sczogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBkaXNhYmxlUGFnZVNpemVDYWxjdWxhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGdldCBwYWdlU2l6ZU9wdGlvbnMoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLl9wYWdlU2l6ZU9wdGlvbnM7XG4gIH1cblxuICBzZXQgcGFnZVNpemVPcHRpb25zKHZhbDogbnVtYmVyW10pIHtcbiAgICBpZiAoISh2YWwgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgIHZhbCA9IFV0aWwucGFyc2VBcnJheShTdHJpbmcodmFsKSkubWFwKGEgPT4gcGFyc2VJbnQoYSwgMTApKTtcbiAgICB9XG4gICAgdGhpcy5fcGFnZVNpemVPcHRpb25zID0gdmFsO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9yb3dIZWlnaHQgPSBDb2Rlcy5ERUZBVUxUX1JPV19IRUlHSFQ7XG4gIHByb3RlY3RlZCByb3dIZWlnaHRTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3QodGhpcy5fcm93SGVpZ2h0KTtcbiAgcHVibGljIHJvd0hlaWdodE9ic2VydmFibGU6IE9ic2VydmFibGU8c3RyaW5nPiA9IHRoaXMucm93SGVpZ2h0U3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcm90ZWN0ZWQgY2hlY2tWaWV3UG9ydFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwdWJsaWMgY2hlY2tWaWV3UG9ydE9ic2VydmFibGU6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmNoZWNrVmlld1BvcnRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHNldCByb3dIZWlnaHQodmFsdWUpIHtcbiAgICB0aGlzLl9yb3dIZWlnaHQgPSB2YWx1ZSA/IHZhbHVlLnRvTG93ZXJDYXNlKCkgOiB2YWx1ZTtcbiAgICBpZiAoIUNvZGVzLmlzVmFsaWRSb3dIZWlnaHQodGhpcy5fcm93SGVpZ2h0KSkge1xuICAgICAgdGhpcy5fcm93SGVpZ2h0ID0gQ29kZXMuREVGQVVMVF9ST1dfSEVJR0hUO1xuICAgIH1cbiAgICB0aGlzLnJvd0hlaWdodFN1YmplY3QubmV4dCh0aGlzLl9yb3dIZWlnaHQpO1xuICB9XG4gIGdldCByb3dIZWlnaHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcm93SGVpZ2h0O1xuICB9XG4gIHByb3RlY3RlZCBpbnNlcnRGb3JtUm91dGU6IHN0cmluZztcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHByb3RlY3RlZCByZWN1cnNpdmVJbnNlcnQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcm90ZWN0ZWQgX2ZpbHRlckNhc2VTZW5zaXRpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2V0IGZpbHRlckNhc2VTZW5zaXRpdmUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9maWx0ZXJDYXNlU2Vuc2l0aXZlID0gQm9vbGVhbkNvbnZlcnRlcih2YWx1ZSk7XG4gIH1cbiAgZ2V0IGZpbHRlckNhc2VTZW5zaXRpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlckNhc2VTZW5zaXRpdmU7XG4gIH1cblxuICBwcm90ZWN0ZWQgX3F1aWNrRmlsdGVyOiBib29sZWFuID0gdHJ1ZTtcbiAgZ2V0IHF1aWNrRmlsdGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9xdWlja0ZpbHRlcjtcbiAgfVxuICBzZXQgcXVpY2tGaWx0ZXIodmFsOiBib29sZWFuKSB7XG4gICAgdmFsID0gVXRpbC5wYXJzZUJvb2xlYW4oU3RyaW5nKHZhbCkpO1xuICAgIHRoaXMuX3F1aWNrRmlsdGVyID0gdmFsO1xuICAgIGlmICh2YWwpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZWdpc3RlclF1aWNrRmlsdGVyKHRoaXMuc2VhcmNoSW5wdXRDb21wb25lbnQpLCAwKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcXVpY2tGaWx0ZXJQbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG4gIC8qIGVuZCBvZiBpbnB1dHMgdmFyaWFibGVzICovXG5cbiAgLyogb3V0cHV0cyB2YXJpYWJsZXMgKi9cbiAgcHVibGljIG9uQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgb25Eb3VibGVDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHB1YmxpYyBvbkRhdGFMb2FkZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgb25QYWdpbmF0ZWREYXRhTG9hZGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHVibGljIG9uU2VhcmNoOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLyogZW5kIG9mIG91dHB1dHMgdmFyaWFibGVzICovXG5cbiAgcHVibGljIGZpbHRlckJ1aWxkZXI6IE9GaWx0ZXJCdWlsZGVyQ29tcG9uZW50O1xuICBwcm90ZWN0ZWQgX3NlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8YW55PjtcblxuICBnZXQgc2VsZWN0aW9uKCkge1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQodGhpcy5fc2VsZWN0aW9uKSkge1xuICAgICAgdGhpcy5fc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPGFueT4odHJ1ZSwgW10sIHRydWUsIHRoaXMuY29tcGFyZVJvdygpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblRyaWdnZXJVcGRhdGVTdWJzY3JpcHRpb246IGFueTtcbiAgcHJvdGVjdGVkIGZvcm1MYXlvdXRNYW5hZ2VyOiBPRm9ybUxheW91dE1hbmFnZXJCYXNlO1xuICBwcm90ZWN0ZWQgZm9ybUxheW91dE1hbmFnZXJUYWJJbmRleDogbnVtYmVyO1xuICBwdWJsaWMgb0Zvcm1MYXlvdXREaWFsb2c6IE9Gb3JtTGF5b3V0RGlhbG9nQ29tcG9uZW50O1xuXG4gIHByb3RlY3RlZCB0YWJzU3Vic2NyaXB0aW9uczogYW55O1xuXG4gIHB1YmxpYyBxdWlja0ZpbHRlckNvbXBvbmVudDogT1NlYXJjaElucHV0Q29tcG9uZW50O1xuXG4gIEBWaWV3Q2hpbGQoKGZvcndhcmRSZWYoKCkgPT4gT1NlYXJjaElucHV0Q29tcG9uZW50KSkpXG4gIHB1YmxpYyBzZWFyY2hJbnB1dENvbXBvbmVudDogT1NlYXJjaElucHV0Q29tcG9uZW50O1xuXG4gIHByb3RlY3RlZCBxdWlja0ZpbHRlckNvbEFycmF5OiBzdHJpbmdbXTtcblxuICBwcm90ZWN0ZWQgZGF0YVJlc3BvbnNlQXJyYXk6IGFueVtdID0gW107XG4gIHByb3RlY3RlZCBxdWlja0ZpbHRlclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBfcGFnZVNpemVPcHRpb25zID0gQ29kZXMuUEFHRV9TSVpFX09QVElPTlM7XG5cbiAgcHJvdGVjdGVkIGNsaWNrVGltZXI7XG4gIHByb3RlY3RlZCBjbGlja0RlbGF5ID0gMjAwO1xuICBwcm90ZWN0ZWQgY2xpY2tQcmV2ZW50ID0gZmFsc2U7XG4gIHByb3RlY3RlZCBfcXVpY2tGaWx0ZXJBcHBlYXJhbmNlOiBNYXRGb3JtRmllbGRBcHBlYXJhbmNlID0gJ291dGxpbmUnO1xuXG4gIHByaXZhdGUgbXV0YXRpb25PYnNlcnZlcnM6IE11dGF0aW9uT2JzZXJ2ZXJbXSA9IFtdO1xuICBwdWJsaWMgZW5hYmxlZEluc2VydEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG4gIHB1YmxpYyBlbmFibGVkUmVmcmVzaEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByb3RlY3RlZCBlbFJlZjogRWxlbWVudFJlZixcbiAgICBwcm90ZWN0ZWQgZm9ybTogT0Zvcm1Db21wb25lbnRcbiAgKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgIHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoUGVybWlzc2lvbnNTZXJ2aWNlKTtcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChPVHJhbnNsYXRlU2VydmljZSk7XG4gICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5hdmlnYXRpb25TZXJ2aWNlKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5mb3JtTGF5b3V0TWFuYWdlciA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gbm8gcGFyZW50IGZvcm0gbGF5b3V0IG1hbmFnZXJcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMub0Zvcm1MYXlvdXREaWFsb2cgPSB0aGlzLmluamVjdG9yLmdldChPRm9ybUxheW91dERpYWxvZ0NvbXBvbmVudCk7XG4gICAgICB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyID0gdGhpcy5vRm9ybUxheW91dERpYWxvZy5mb3JtTGF5b3V0TWFuYWdlcjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBubyBwYXJlbnQgZm9ybSBsYXlvdXQgbWFuYWdlclxuICAgIH1cbiAgICB0aGlzLmdldEdsb2JhbEluamVjdGlvblRva2VuQ29uZmlnKCk7XG4gIH1cblxuICBwcml2YXRlIGdldEdsb2JhbEluamVjdGlvblRva2VuQ29uZmlnKCkge1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG9HbG9iYWxDb25maWcgPSB0aGlzLmluamVjdG9yLmdldChPX0dMT0JBTF9DT05GSUcpO1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKG9HbG9iYWxDb25maWcuc3RvcmVTdGF0ZSkpIHtcbiAgICAgICAgdGhpcy5zdG9yZVN0YXRlID0gb0dsb2JhbENvbmZpZy5zdG9yZVN0YXRlO1xuICAgICAgfTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBEbyBub3RoaW5nIGJlY2F1c2UgaXMgb3B0aW9uYWxcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICBzdXBlci5pbml0aWFsaXplKCk7XG4gICAgaWYgKHRoaXMuZGV0YWlsQnV0dG9uSW5Sb3cgfHwgdGhpcy5lZGl0QnV0dG9uSW5Sb3cpIHtcbiAgICAgIHRoaXMuZGV0YWlsTW9kZSA9IENvZGVzLkRFVEFJTF9NT0RFX05PTkU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5yZWdpc3RlckZvcm1MYXlvdXRNYW5hZ2VyU3RhdGUoKTtcbiAgICBzdXBlci5hZnRlclZpZXdJbml0KCk7XG4gICAgaWYgKHRoaXMuZWxSZWYpIHtcbiAgICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3RpdGxlJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyICYmIHRoaXMuZm9ybUxheW91dE1hbmFnZXIuaXNNYWluQ29tcG9uZW50KHRoaXMpKSB7XG4gICAgICB0aGlzLm9uVHJpZ2dlclVwZGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybUxheW91dE1hbmFnZXIub25UcmlnZ2VyVXBkYXRlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVsb2FkRGF0YSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgc3VwZXIuZGVzdHJveSgpO1xuICAgIGlmICh0aGlzLm9uVHJpZ2dlclVwZGF0ZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5vblRyaWdnZXJVcGRhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGFic1N1YnNjcmlwdGlvbnMpIHtcbiAgICAgIHRoaXMudGFic1N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVpY2tGaWx0ZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucXVpY2tGaWx0ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm92aXNpYmxlO1xuICB9XG5cbiAgcHVibGljIGhhc0NvbnRyb2xzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2xzO1xuICB9XG5cbiAgcHVibGljIGhhc1RpdGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRpdGxlICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRJdGVtcygpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkO1xuICB9XG5cbiAgcHVibGljIGNsZWFyU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0U2VsZWN0ZWQoaXRlbTogYW55KTogdm9pZCB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGl0ZW0pKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbi50b2dnbGUoaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5hdmlnYXRlVG9EZXRhaWwocm91dGU6IGFueVtdLCBxUGFyYW1zOiBhbnksIHJlbGF0aXZlVG86IEFjdGl2YXRlZFJvdXRlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZXh0cmFzID0ge1xuICAgICAgcmVsYXRpdmVUbzogcmVsYXRpdmVUb1xuICAgIH07XG4gICAgaWYgKHRoaXMuZm9ybUxheW91dE1hbmFnZXIgJiYgdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5pc01haW5Db21wb25lbnQodGhpcykpIHtcbiAgICAgIHFQYXJhbXNbQ29kZXMuSUdOT1JFX0NBTl9ERUFDVElWQVRFXSA9IHRoaXMuZm9ybUxheW91dE1hbmFnZXIuaWdub3JlQ2FuRGVhY3RpdmF0ZTtcbiAgICAgIHRoaXMuZm9ybUxheW91dE1hbmFnZXIuc2V0QXNBY3RpdmVGb3JtTGF5b3V0TWFuYWdlcigpO1xuICAgIH1cbiAgICBleHRyYXNbQ29kZXMuUVVFUllfUEFSQU1TXSA9IHFQYXJhbXM7XG5cbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShyb3V0ZSwgZXh0cmFzKS5cbiAgICAgIHRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybUxheW91dE1hbmFnZXIpIHtcbiAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmlzTmF2aWdhdGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQ2Fubm90IG1hdGNoIGFueSByb3V0ZXMuIFVSTCBTZWdtZW50OiAnLCByb3V0ZSk7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuaXNOYXZpZ2F0aW5nID0gZmFsc2VcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGluc2VydERldGFpbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vRm9ybUxheW91dERpYWxvZykge1xuICAgICAgY29uc29sZS53YXJuKCdOYXZpZ2F0aW9uIGlzIG5vdCBhdmFpbGFibGUgeWV0IGluIGEgZm9ybSBsYXlvdXQgbWFuYWdlciB3aXRoIG1vZGU9XCJkaWFsb2dcIicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByb3V0ZSA9IHRoaXMuZ2V0SW5zZXJ0Um91dGUoKTtcbiAgICB0aGlzLmFkZEZvcm1MYXlvdXRNYW5hZ2VyUm91dGUocm91dGUpO1xuICAgIGlmIChyb3V0ZS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCByZWxhdGl2ZVRvID0gdGhpcy5yZWN1cnNpdmVJbnNlcnQgPyB0aGlzLmFjdFJvdXRlLnBhcmVudCA6IHRoaXMuYWN0Um91dGU7XG4gICAgICBjb25zdCBxUGFyYW1zID0ge307XG4gICAgICBpZiAodGhpcy5mb3JtTGF5b3V0TWFuYWdlciAmJiB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLmlzVGFiTW9kZSgpKSB7XG4gICAgICAgIHFQYXJhbXNbQ29kZXMuSU5TRVJUSU9OX01PREVdID0gJ3RydWUnO1xuICAgICAgfVxuICAgICAgdGhpcy5uYXZpZ2F0ZVRvRGV0YWlsKHJvdXRlLCBxUGFyYW1zLCByZWxhdGl2ZVRvKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdmlld0RldGFpbChpdGVtOiBhbnksIGNvbnRleHQ/OiBPRm9ybUxheW91dE1hbmFnZXJDb250ZXh0KTogdm9pZCB7XG4gICAgY29uc3QgZm9ybUxheW91dE1hbmFnZXJTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoT0Zvcm1MYXlvdXRNYW5hZ2VyU2VydmljZSk7XG4gICAgZm9ybUxheW91dE1hbmFnZXJTZXJ2aWNlLmNvbnRleHQgPSB2b2lkIDA7XG5cbiAgICBpZiAodGhpcy5vRm9ybUxheW91dERpYWxvZykge1xuICAgICAgY29uc29sZS53YXJuKCdOYXZpZ2F0aW9uIGlzIG5vdCBhdmFpbGFibGUgeWV0IGluIGEgZm9ybSBsYXlvdXQgbWFuYWdlciB3aXRoIG1vZGU9XCJkaWFsb2dcIicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU2VydmljZS5pc05hdmlnYXRpbmcpIHtcbiAgICAgIHJldHVybjtcblxuICAgIH1cbiAgICBjb25zdCB6b25lID0gdGhpcy5pbmplY3Rvci5nZXQoTmdab25lKTtcbiAgICB6b25lLnJ1bihhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByb3V0ZSA9IHRoaXMuZ2V0SXRlbU1vZGVSb3V0ZShpdGVtLCAnZGV0YWlsRm9ybVJvdXRlJyk7XG4gICAgICB0aGlzLmFkZEZvcm1MYXlvdXRNYW5hZ2VyUm91dGUocm91dGUpO1xuICAgICAgaWYgKHJvdXRlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgcVBhcmFtcyA9IENvZGVzLmdldElzRGV0YWlsT2JqZWN0KCk7XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlVG8gPSB0aGlzLnJlY3Vyc2l2ZURldGFpbCA/IHRoaXMuYWN0Um91dGUucGFyZW50IDogdGhpcy5hY3RSb3V0ZTtcblxuICAgICAgICBpZiAoIXRoaXMuZm9ybUxheW91dE1hbmFnZXI/LmlzU3BsaXRQYW5lTW9kZSgpKSB7XG4gICAgICAgICAgZm9ybUxheW91dE1hbmFnZXJTZXJ2aWNlLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuaXNOYXZpZ2F0aW5nID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgdGhpcy5uYXZpZ2F0ZVRvRGV0YWlsKHJvdXRlLCBxUGFyYW1zLCByZWxhdGl2ZVRvKVxuICAgICAgfVxuICAgIH0pO1xuXG4gIH1cblxuICBwdWJsaWMgZWRpdERldGFpbChpdGVtOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vRm9ybUxheW91dERpYWxvZykge1xuICAgICAgY29uc29sZS53YXJuKCdOYXZpZ2F0aW9uIGlzIG5vdCBhdmFpbGFibGUgeWV0IGluIGEgZm9ybSBsYXlvdXQgbWFuYWdlciB3aXRoIG1vZGU9XCJkaWFsb2dcIicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB6b25lID0gdGhpcy5pbmplY3Rvci5nZXQoTmdab25lKTtcbiAgICB6b25lLnJ1bihhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByb3V0ZSA9IHRoaXMuZ2V0SXRlbU1vZGVSb3V0ZShpdGVtLCAnZWRpdEZvcm1Sb3V0ZScpO1xuICAgICAgdGhpcy5hZGRGb3JtTGF5b3V0TWFuYWdlclJvdXRlKHJvdXRlKTtcbiAgICAgIGlmIChyb3V0ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHFQYXJhbXMgPSBDb2Rlcy5nZXRJc0RldGFpbE9iamVjdCgpO1xuICAgICAgICBjb25zdCByZWxhdGl2ZVRvID0gdGhpcy5yZWN1cnNpdmVFZGl0ID8gdGhpcy5hY3RSb3V0ZS5wYXJlbnQgOiB0aGlzLmFjdFJvdXRlO1xuXG4gICAgICAgIGF3YWl0IHRoaXMubmF2aWdhdGVUb0RldGFpbChyb3V0ZSwgcVBhcmFtcywgcmVsYXRpdmVUbylcblxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFkZEZvcm1MYXlvdXRNYW5hZ2VyUm91dGUocm91dGVBcnI6IGFueVtdKTogYW55W10ge1xuICAgIGlmICh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyICYmIHJvdXRlQXJyLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGNvbXBSb3V0ZSA9IHRoaXMuZm9ybUxheW91dE1hbmFnZXIuZ2V0Um91dGVGb3JDb21wb25lbnQodGhpcyk7XG4gICAgICBpZiAoY29tcFJvdXRlICYmIGNvbXBSb3V0ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJvdXRlQXJyLnVuc2hpZnQoLi4uY29tcFJvdXRlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJvdXRlQXJyO1xuICB9XG4gIHByb3RlY3RlZCBzZXRCdXR0b25QZXJtaXNzaW9ucyhhY3Rpb25zUGVybWlzc2lvbnMpOiB2b2lkIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoYWN0aW9uc1Blcm1pc3Npb25zKSkge1xuICAgICAgdGhpcy5zZXRQZXJtaXNzaW9uKCdpbnNlcnQnLCAnaW5zZXJ0QnV0dG9uJywgJ2VuYWJsZWRJbnNlcnRCdXR0b24nLCBhY3Rpb25zUGVybWlzc2lvbnMpO1xuICAgICAgdGhpcy5zZXRQZXJtaXNzaW9uKCdyZWZyZXNoJywgJ3JlZnJlc2hCdXR0b24nLCAnZW5hYmxlZFJlZnJlc2hCdXR0b24nLCBhY3Rpb25zUGVybWlzc2lvbnMpO1xuICAgICAgdGhpcy5zZXRQZXJtaXNzaW9uKCdkZWxldGUnLCAnZGVsZXRlQnV0dG9uJywgJ2VuYWJsZWREZWxldGVCdXR0b24nLCBhY3Rpb25zUGVybWlzc2lvbnMpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgc2V0UGVybWlzc2lvbihhdHRyOiBzdHJpbmcsIHZpc2libGVQcm9wOiBzdHJpbmcsIGVuYWJsZWRQcm9wOiBzdHJpbmcsIGFjdGlvbnNQZXJtaXNzaW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IHBlcm0gPSB0aGlzLmdldFBlcm1pc3Npb25CeUF0dHIoYXR0ciwgYWN0aW9uc1Blcm1pc3Npb25zKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQocGVybSkpIHtcbiAgICAgIHRoaXNbdmlzaWJsZVByb3BdID0gcGVybS52aXNpYmxlO1xuICAgICAgdGhpc1tlbmFibGVkUHJvcF0gPSBwZXJtLmVuYWJsZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG1hbmFnZUN1c3RvbVBlcm1pc3Npb25zKGFjdGlvbnNQZXJtaXNzaW9ucywgc2VsZWN0b3IpOiB2b2lkIHtcbiAgICBjb25zdCBjdXN0b21QZXJtaXNzaW9ucyA9IGFjdGlvbnNQZXJtaXNzaW9ucy5maWx0ZXIocGVybSA9PiAhWydpbnNlcnQnLCAncmVmcmVzaCcsICdkZWxldGUnXS5pbmNsdWRlcyhwZXJtLmF0dHIpKTtcbiAgICBjdXN0b21QZXJtaXNzaW9ucy5mb3JFYWNoKHBlcm1pc3Npb24gPT4ge1xuICAgICAgdGhpcy5tYW5hZ2VQZXJtaXNzaW9uKHRoaXMuZWxSZWYsIHBlcm1pc3Npb24sIHRoaXMubXV0YXRpb25PYnNlcnZlcnMsIHNlbGVjdG9yKTtcbiAgICB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0QWN0aW9uc1Blcm1pc3Npb25zKHBlcm1pc3Npb25zOiBhbnkpOiBPUGVybWlzc2lvbnNbXSB7XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKHBlcm1pc3Npb25zKSA/IChwZXJtaXNzaW9ucy5hY3Rpb25zIHx8IFtdKSA6IFtdO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFBlcm1pc3Npb25CeUF0dHIoYXR0cjogc3RyaW5nLCBhY3Rpb25zUGVybWlzc2lvbnM6IE9QZXJtaXNzaW9uc1tdKTogT1Blcm1pc3Npb25zIHtcbiAgICByZXR1cm4gYWN0aW9uc1Blcm1pc3Npb25zLmZpbmQoKHBlcm06IE9QZXJtaXNzaW9ucykgPT4gcGVybS5hdHRyID09PSBhdHRyKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYW5hZ2VQZXJtaXNzaW9uKGVsZW1lbnRSZWY6IGFueSwgcGVybWlzc2lvbjogT1Blcm1pc3Npb25zLCBtdXRhdGlvbk9ic2VydmVyczogYW55W10sIHNlbGVjdG9yOiBzdHJpbmcsIGF0dHI/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBsZXQgZWxlbWVudEJ5QWN0aW9uO1xuICAgIGNvbnN0IGF0dHJBY3Rpb24gPSBVdGlsLmlzRGVmaW5lZChhdHRyKSA/IGF0dHIgOiBwZXJtaXNzaW9uLmF0dHI7XG4gICAgY29uc3QgYWxsRWxlbWVudHMgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG5cbiAgICBhbGxFbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdhdHRyJykgPT09IGF0dHJBY3Rpb24pIHtcbiAgICAgICAgZWxlbWVudEJ5QWN0aW9uID0gZWxlbWVudDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChVdGlsLmlzRGVmaW5lZChlbGVtZW50QnlBY3Rpb24pKSB7XG4gICAgICBpZiAoIXBlcm1pc3Npb24udmlzaWJsZSkge1xuICAgICAgICBlbGVtZW50QnlBY3Rpb24ucmVtb3ZlKCk7XG4gICAgICB9IGVsc2UgaWYgKCFwZXJtaXNzaW9uLmVuYWJsZWQpIHtcbiAgICAgICAgZWxlbWVudEJ5QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgbXV0YXRpb25PYnNlcnZlciA9IFBlcm1pc3Npb25zVXRpbHMucmVnaXN0ZXJEaXNhYmxlZENoYW5nZXNJbkRvbShlbGVtZW50QnlBY3Rpb24pO1xuICAgICAgICBtdXRhdGlvbk9ic2VydmVycy5wdXNoKG11dGF0aW9uT2JzZXJ2ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRFbmNvZGVkUGFyZW50S2V5cygpOiBzdHJpbmcge1xuICAgIGxldCBlbmNvZGVkOiBzdHJpbmc7XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuX3BLZXlzRXF1aXYpLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHBLZXlzID0gdGhpcy5nZXRQYXJlbnRLZXlzVmFsdWVzKCk7XG4gICAgICBpZiAoT2JqZWN0LmtleXMocEtleXMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZW5jb2RlZCA9IFV0aWwuZW5jb2RlUGFyZW50S2V5cyhwS2V5cyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBlbmNvZGVkO1xuICB9XG5cbiAgcHVibGljIGdldEluc2VydFJvdXRlKCk6IGFueVtdIHtcbiAgICBjb25zdCByb3V0ZSA9IFtdO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLmRldGFpbEZvcm1Sb3V0ZSkpIHtcbiAgICAgIHJvdXRlLnB1c2godGhpcy5kZXRhaWxGb3JtUm91dGUpO1xuICAgIH1cbiAgICBjb25zdCBpbnNlcnRSb3V0ZSA9IFV0aWwuaXNEZWZpbmVkKHRoaXMuaW5zZXJ0Rm9ybVJvdXRlKSA/IHRoaXMuaW5zZXJ0Rm9ybVJvdXRlIDogQ29kZXMuREVGQVVMVF9JTlNFUlRfUk9VVEU7XG4gICAgcm91dGUucHVzaChpbnNlcnRSb3V0ZSk7XG4gICAgLy8gYWRkaW5nIHBhcmVudC1rZXlzIGluZm8uLi5cbiAgICBjb25zdCBlbmNvZGVkUGFyZW50S2V5cyA9IHRoaXMuZ2V0RW5jb2RlZFBhcmVudEtleXMoKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoZW5jb2RlZFBhcmVudEtleXMpKSB7XG4gICAgICBjb25zdCByb3V0ZU9iaiA9IHt9O1xuICAgICAgcm91dGVPYmpbQ29kZXMuUEFSRU5UX0tFWVNfS0VZXSA9IGVuY29kZWRQYXJlbnRLZXlzO1xuICAgICAgcm91dGUucHVzaChyb3V0ZU9iaik7XG4gICAgfVxuICAgIGlmIChyb3V0ZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnN0b3JlTmF2aWdhdGlvbkZvcm1Sb3V0ZXMoJ2luc2VydEZvcm1Sb3V0ZScpO1xuICAgIH1cbiAgICByZXR1cm4gcm91dGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0SXRlbU1vZGVSb3V0ZShpdGVtOiBhbnksIG1vZGVSb3V0ZTogc3RyaW5nKTogYW55W10ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZ2V0Um91dGVPZlNlbGVjdGVkUm93KGl0ZW0pO1xuICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuZGV0YWlsRm9ybVJvdXRlKSkge1xuICAgICAgICByZXN1bHQudW5zaGlmdCh0aGlzLmRldGFpbEZvcm1Sb3V0ZSk7XG4gICAgICB9XG4gICAgICBpZiAobW9kZVJvdXRlID09PSAnZWRpdEZvcm1Sb3V0ZScpIHtcbiAgICAgICAgcmVzdWx0LnB1c2godGhpcy5lZGl0Rm9ybVJvdXRlIHx8IENvZGVzLkRFRkFVTFRfRURJVF9ST1VURSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCAmJiAhdGhpcy5vRm9ybUxheW91dERpYWxvZykge1xuICAgICAgdGhpcy5zdG9yZU5hdmlnYXRpb25Gb3JtUm91dGVzKG1vZGVSb3V0ZSwgdGhpcy5nZXRRdWVyeUNvbmZpZ3VyYXRpb24oKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UXVlcnlDb25maWd1cmF0aW9uKCk6IGFueSB7XG4gICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgIGtleXNWYWx1ZXM6IHRoaXMuZ2V0S2V5c1ZhbHVlcygpXG4gICAgfTtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIHNlcnZpY2VUeXBlOiB0aGlzLnNlcnZpY2VUeXBlLFxuICAgICAgICBxdWVyeUFyZ3VtZW50czogdGhpcy5xdWVyeUFyZ3VtZW50cyxcbiAgICAgICAgZW50aXR5OiB0aGlzLmVudGl0eSxcbiAgICAgICAgc2VydmljZTogdGhpcy5zZXJ2aWNlLFxuICAgICAgICBxdWVyeU1ldGhvZDogdGhpcy5wYWdlYWJsZSA/IHRoaXMucGFnaW5hdGVkUXVlcnlNZXRob2QgOiB0aGlzLnF1ZXJ5TWV0aG9kLFxuICAgICAgICB0b3RhbFJlY29yZHNOdW1iZXI6IHRoaXMuZ2V0VG90YWxSZWNvcmRzTnVtYmVyKCksXG4gICAgICAgIHF1ZXJ5Um93czogdGhpcy5xdWVyeVJvd3MsXG4gICAgICAgIHF1ZXJ5UmVjb3JkT2Zmc2V0OiBNYXRoLm1heCh0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5xdWVyeVJvd3MsIHRoaXMuc3RhdGUucXVlcnlSZWNvcmRPZmZzZXQgLSB0aGlzLnF1ZXJ5Um93cylcbiAgICAgIH0sIHJlc3VsdCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0Um91dGVPZlNlbGVjdGVkUm93KGl0ZW06IGFueSk6IGFueVtdIHtcbiAgICBjb25zdCByb3V0ZSA9IFtdO1xuICAgIGlmIChVdGlsLmlzT2JqZWN0KGl0ZW0pKSB7XG4gICAgICB0aGlzLmtleXNBcnJheS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChpdGVtW2tleV0pKSB7XG4gICAgICAgICAgcm91dGUucHVzaChpdGVtW2tleV0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJvdXRlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRlbGV0ZUxvY2FsSXRlbXMoKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuZ2V0U2VsZWN0ZWRJdGVtcygpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0ZWRJdGVtcy5sZW5ndGg7ICsraSkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0ZWRJdGVtc1tpXTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbUt2ID0ge307XG4gICAgICBmb3IgKGxldCBrID0gMDsgayA8IHRoaXMua2V5c0FycmF5Lmxlbmd0aDsgKytrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMua2V5c0FycmF5W2tdO1xuICAgICAgICBzZWxlY3RlZEl0ZW1LdltrZXldID0gc2VsZWN0ZWRJdGVtW2tleV07XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBqID0gdGhpcy5kYXRhQXJyYXkubGVuZ3RoIC0gMTsgaiA+PSAwOyAtLWopIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZGF0YUFycmF5W2pdO1xuICAgICAgICBjb25zdCBpdGVtS3YgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCB0aGlzLmtleXNBcnJheS5sZW5ndGg7ICsraykge1xuICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMua2V5c0FycmF5W2tdO1xuICAgICAgICAgIGl0ZW1LdltrZXldID0gaXRlbVtrZXldO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IGsgaW4gc2VsZWN0ZWRJdGVtS3YpIHtcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtS3YuaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgIGZvdW5kID0gaXRlbUt2Lmhhc093blByb3BlcnR5KGspICYmIChzZWxlY3RlZEl0ZW1LdltrXSA9PT0gaXRlbUt2W2tdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgdGhpcy5kYXRhQXJyYXkuc3BsaWNlKGosIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyByZWluaXRpYWxpemUob3B0aW9uczogT0xpc3RJbml0aWFsaXphdGlvbk9wdGlvbnMgfCBPVGFibGVJbml0aWFsaXphdGlvbk9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAob3B0aW9ucyAmJiBPYmplY3Qua2V5cyhvcHRpb25zKS5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGNsb25lZE9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKTtcbiAgICAgIGlmIChjbG9uZWRPcHRzLmhhc093blByb3BlcnR5KCdlbnRpdHknKSkge1xuICAgICAgICB0aGlzLmVudGl0eSA9IGNsb25lZE9wdHMuZW50aXR5O1xuICAgICAgICBpZiAodGhpcy5vYXR0ckZyb21FbnRpdHkpIHtcbiAgICAgICAgICB0aGlzLm9hdHRyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSBjbG9uZWRPcHRzLmVudGl0eTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBjbG9uZWRPcHRzKSB7XG4gICAgICAgIGlmIChjbG9uZWRPcHRzLmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICAgICAgdGhpc1twcm9wXSA9IGNsb25lZE9wdHNbcHJvcF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgdGhpcy5pbml0aWFsaXplKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGBvLWZpbHRlci1idWlsZGVyYCBjb21wb25lbnQgdGhhdCB0aGlzIGNvbXBvbmVudCB3aWxsIHVzZSB0byBmaWx0ZXIgaXRzIGRhdGEuXG4gICAqIEBwYXJhbSBmaWx0ZXJCdWlsZGVyIHRoZSBgby1maWx0ZXItYnVpbGRlcmAgY29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIHNldEZpbHRlckJ1aWxkZXIoZmlsdGVyQnVpbGRlcjogT0ZpbHRlckJ1aWxkZXJDb21wb25lbnQpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlckJ1aWxkZXIgPSBmaWx0ZXJCdWlsZGVyO1xuICB9XG5cbiAgcHVibGljIGdldENvbXBvbmVudEZpbHRlcihleGlzdGluZ0ZpbHRlcjogYW55ID0ge30pOiBhbnkge1xuICAgIGNvbnN0IGZpbHRlciA9IHN1cGVyLmdldENvbXBvbmVudEZpbHRlcihleGlzdGluZ0ZpbHRlcik7XG5cbiAgICBjb25zdCBxdWlja0ZpbHRlckV4cHIgPSB0aGlzLmdldFF1aWNrRmlsdGVyRXhwcmVzc2lvbigpO1xuICAgIGNvbnN0IGZpbHRlckJ1aWxkZXJFeHByID0gdGhpcy5nZXRGaWx0ZXJCdWlsZGVyRXhwcmVzc2lvbigpO1xuICAgIGxldCBjb21wbGV4RXhwciA9IHF1aWNrRmlsdGVyRXhwciB8fCBmaWx0ZXJCdWlsZGVyRXhwcjtcbiAgICBpZiAocXVpY2tGaWx0ZXJFeHByICYmIGZpbHRlckJ1aWxkZXJFeHByKSB7XG4gICAgICBjb21wbGV4RXhwciA9IEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZENvbXBsZXhFeHByZXNzaW9uKHF1aWNrRmlsdGVyRXhwciwgZmlsdGVyQnVpbGRlckV4cHIsIEZpbHRlckV4cHJlc3Npb25VdGlscy5PUF9BTkQpO1xuICAgIH1cblxuICAgIGlmIChjb21wbGV4RXhwciAmJiAhVXRpbC5pc0RlZmluZWQoZmlsdGVyW0ZpbHRlckV4cHJlc3Npb25VdGlscy5CQVNJQ19FWFBSRVNTSU9OX0tFWV0pKSB7XG4gICAgICBmaWx0ZXJbRmlsdGVyRXhwcmVzc2lvblV0aWxzLkJBU0lDX0VYUFJFU1NJT05fS0VZXSA9IGNvbXBsZXhFeHByO1xuICAgIH0gZWxzZSBpZiAoY29tcGxleEV4cHIpIHtcbiAgICAgIGZpbHRlcltGaWx0ZXJFeHByZXNzaW9uVXRpbHMuQkFTSUNfRVhQUkVTU0lPTl9LRVldID1cbiAgICAgICAgRmlsdGVyRXhwcmVzc2lvblV0aWxzLmJ1aWxkQ29tcGxleEV4cHJlc3Npb24oZmlsdGVyW0ZpbHRlckV4cHJlc3Npb25VdGlscy5CQVNJQ19FWFBSRVNTSU9OX0tFWV0sIGNvbXBsZXhFeHByLCBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuT1BfQU5EKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFF1aWNrRmlsdGVyRXhwcmVzc2lvbigpOiBFeHByZXNzaW9uIHtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSAmJiBVdGlsLmlzRGVmaW5lZCh0aGlzLnF1aWNrRmlsdGVyQ29tcG9uZW50KSkge1xuICAgICAgcmV0dXJuIHRoaXMucXVpY2tGaWx0ZXJDb21wb25lbnQuZmlsdGVyRXhwcmVzc2lvbjtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRGaWx0ZXJCdWlsZGVyRXhwcmVzc2lvbigpOiBFeHByZXNzaW9uIHtcbiAgICAvLyBBZGQgZmlsdGVyIGZyb20gby1maWx0ZXItYnVpbGRlciBjb21wb25lbnRcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5maWx0ZXJCdWlsZGVyKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyQnVpbGRlci5nZXRFeHByZXNzaW9uKCk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3RvcmVOYXZpZ2F0aW9uRm9ybVJvdXRlcyhhY3RpdmVNb2RlOiBzdHJpbmcsIHF1ZXJ5Q29uZj86IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IG1haW5Gb3JtTGF5b3V0Q29tcCA9IHRoaXMuZm9ybUxheW91dE1hbmFnZXIgPyBVdGlsLmlzRGVmaW5lZCh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLmlzTWFpbkNvbXBvbmVudCh0aGlzKSkgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5zdG9yZUZvcm1Sb3V0ZXMoe1xuICAgICAgbWFpbkZvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50OiBtYWluRm9ybUxheW91dENvbXAsXG4gICAgICBpc01haW5OYXZpZ2F0aW9uQ29tcG9uZW50OiB0cnVlLFxuICAgICAgZGV0YWlsRm9ybVJvdXRlOiB0aGlzLmRldGFpbEZvcm1Sb3V0ZSxcbiAgICAgIGVkaXRGb3JtUm91dGU6IHRoaXMuZWRpdEZvcm1Sb3V0ZSxcbiAgICAgIGluc2VydEZvcm1Sb3V0ZTogVXRpbC5pc0RlZmluZWQodGhpcy5pbnNlcnRGb3JtUm91dGUpID8gdGhpcy5pbnNlcnRGb3JtUm91dGUgOiBDb2Rlcy5ERUZBVUxUX0lOU0VSVF9ST1VURVxuICAgIH0sIGFjdGl2ZU1vZGUsIHF1ZXJ5Q29uZik7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2F2ZURhdGFOYXZpZ2F0aW9uSW5Mb2NhbFN0b3JhZ2UoKTogdm9pZCB7XG4gICAgLy8gU2F2ZSBkYXRhIG9mIHRoZSBsaXN0IGluIG5hdmlnYXRpb24tZGF0YSBpbiB0aGUgbG9jYWxzdG9yYWdlXG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0S2V5c1ZhbHVlcygpOiBhbnlbXSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YUFycmF5O1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHJldHVybiBkYXRhLm1hcCgocm93KSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgIHNlbGYua2V5c0FycmF5LmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBpZiAocm93W2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG9ialtrZXldID0gcm93W2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFJvdXRlS2V5KCk6IHN0cmluZyB7XG4gICAgbGV0IHJvdXRlID0gJyc7XG4gICAgaWYgKHRoaXMuZm9ybUxheW91dE1hbmFnZXIgJiYgIXRoaXMuZm9ybUxheW91dE1hbmFnZXIuaXNNYWluQ29tcG9uZW50KHRoaXMpKSB7XG4gICAgICByb3V0ZSA9IHRoaXMucm91dGVyLnVybDtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuZm9ybUxheW91dE1hbmFnZXIuZ2V0UGFyYW1zKCk7XG4gICAgICBpZiAocGFyYW1zKSB7XG4gICAgICAgIHJvdXRlICs9ICcvJyArIChPYmplY3Qua2V5cyhwYXJhbXMpLmpvaW4oJy8nKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvdXRlID0gc3VwZXIuZ2V0Um91dGVLZXkoKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvdXRlO1xuICB9XG5cbiAgZ2V0IGVsZW1lbnRSZWYoKTogRWxlbWVudFJlZiB7XG4gICAgcmV0dXJuIHRoaXMuZWxSZWY7XG4gIH1cblxuICBwdWJsaWMgc2hvd0Nhc2VTZW5zaXRpdmVDaGVja2JveCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMucGFnZWFibGU7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJRdWlja0ZpbHRlcihhcmc6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IHF1aWNrRmlsdGVyID0gKGFyZyBhcyBPU2VhcmNoSW5wdXRDb21wb25lbnQpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnF1aWNrRmlsdGVyQ29tcG9uZW50KSkge1xuICAgICAgLy8gYXZvaWRpbmcgdG8gcmVnaXN0ZXIgYSBxdWlja2ZpbHRlcmNvbXBvbmVudCBpZiBpdCBhbHJlYWR5IGV4aXN0cyBvbmVcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudCA9IHF1aWNrRmlsdGVyO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnF1aWNrRmlsdGVyQ29tcG9uZW50KSkge1xuICAgICAgdGhpcy5xdWlja0ZpbHRlclN1YnNjcmlwdGlvbiA9IHRoaXMucXVpY2tGaWx0ZXJDb21wb25lbnQub25TZWFyY2guc3Vic2NyaWJlKHZhbCA9PiB7XG4gICAgICAgIHRoaXMub25TZWFyY2guZW1pdCh2YWwpO1xuICAgICAgICB0aGlzLmZpbHRlckRhdGEodmFsKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUpKSB7XG4gICAgICAgIGlmICgodGhpcy5zdGF0ZS5xdWlja0ZpbHRlclZhbHVlIHx8ICcnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudC5zZXRWYWx1ZSh0aGlzLnN0YXRlLnF1aWNrRmlsdGVyVmFsdWUsIHtcbiAgICAgICAgICAgIGVtaXRFdmVudDogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzRmlsdGVyQ2FzZVNlbnNpdGl2ZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCB1c2VRdWlja0ZpbHRlclZhbHVlID0gVXRpbC5pc0RlZmluZWQodGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudCkgJiYgdGhpcy5zaG93Q2FzZVNlbnNpdGl2ZUNoZWNrYm94KCk7XG4gICAgaWYgKHVzZVF1aWNrRmlsdGVyVmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1aWNrRmlsdGVyQ29tcG9uZW50LmZpbHRlckNhc2VTZW5zaXRpdmU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpbHRlckNhc2VTZW5zaXRpdmU7XG4gIH1cblxuICBwdWJsaWMgY29uZmlndXJlRmlsdGVyVmFsdWUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHJldHVyblZhbCA9IHZhbHVlO1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoIXZhbHVlLnN0YXJ0c1dpdGgoJyonKSkge1xuICAgICAgICByZXR1cm5WYWwgPSAnKicgKyByZXR1cm5WYWw7XG4gICAgICB9XG4gICAgICBpZiAoIXZhbHVlLmVuZHNXaXRoKCcqJykpIHtcbiAgICAgICAgcmV0dXJuVmFsID0gcmV0dXJuVmFsICsgJyonO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0dXJuVmFsO1xuICB9XG5cbiAgcHVibGljIGdldFF1aWNrRmlsdGVyVmFsdWUoKTogc3RyaW5nIHtcbiAgICBjb25zdCByZXN1bHQgPSAnJztcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1aWNrRmlsdGVyQ29tcG9uZW50LmdldFZhbHVlKCkgfHwgJyc7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0UXVpY2tGaWx0ZXJDb2x1bW5zKCk6IHN0cmluZ1tdIHtcbiAgICBsZXQgcmVzdWx0ID0gdGhpcy5xdWlja0ZpbHRlckNvbEFycmF5O1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnF1aWNrRmlsdGVyQ29tcG9uZW50KSkge1xuICAgICAgcmVzdWx0ID0gdGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudC5nZXRBY3RpdmVDb2x1bW5zKCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBkYXRhIGxvY2FsbHlcbiAgICogQHBhcmFtIHZhbHVlIHRoZSBmaWx0ZXJpbmcgdmFsdWVcbiAgICovXG4gIHB1YmxpYyBmaWx0ZXJEYXRhKHZhbHVlPzogc3RyaW5nLCBsb2FkTW9yZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB2YWx1ZSA9IFV0aWwuaXNEZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogVXRpbC5pc0RlZmluZWQodGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudCkgPyB0aGlzLnF1aWNrRmlsdGVyQ29tcG9uZW50LmdldFZhbHVlKCkgOiB2b2lkIDA7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUpICYmIFV0aWwuaXNEZWZpbmVkKHZhbHVlKSkge1xuICAgICAgdGhpcy5zdGF0ZS5xdWlja0ZpbHRlclZhbHVlID0gdmFsdWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICBjb25zdCBxdWVyeUFyZ3M6IE9RdWVyeURhdGFBcmdzID0ge1xuICAgICAgICBvZmZzZXQ6IDAsXG4gICAgICAgIGxlbmd0aDogdGhpcy5xdWVyeVJvd3MsXG4gICAgICAgIHJlcGxhY2U6IHRydWVcbiAgICAgIH07XG4gICAgICB0aGlzLnF1ZXJ5RGF0YSh2b2lkIDAsIHF1ZXJ5QXJncyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGFSZXNwb25zZUFycmF5ICYmIHRoaXMuZGF0YVJlc3BvbnNlQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGZpbHRlcmVkRGF0YSA9IHRoaXMuZGF0YVJlc3BvbnNlQXJyYXkuc2xpY2UoMCk7XG4gICAgICBmaWx0ZXJlZERhdGEgPSB0aGlzLmdldFF1aWNrRmlsdGVyRGF0YUZyb21BcnJheSh2YWx1ZSwgZmlsdGVyZWREYXRhKTtcbiAgICAgIGZpbHRlcmVkRGF0YSA9IHRoaXMuZ2V0U29ydGVkRGF0YUZyb21BcnJheShmaWx0ZXJlZERhdGEpO1xuICAgICAgZmlsdGVyZWREYXRhID0gdGhpcy5nZXRQYWdpbmF0aW9uRGF0YUZyb21BcnJheShmaWx0ZXJlZERhdGEpO1xuICAgICAgdGhpcy5zZXREYXRhQXJyYXkoZmlsdGVyZWREYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXREYXRhQXJyYXkodGhpcy5kYXRhUmVzcG9uc2VBcnJheSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldFF1aWNrRmlsdGVyRGF0YUZyb21BcnJheShxdWlja2ZpbHRlcjogc3RyaW5nLCBkYXRhQXJyYXk6IGFueVtdKTogYW55W10ge1xuICAgIGxldCByZXN1bHQgPSBkYXRhQXJyYXk7XG4gICAgaWYgKHF1aWNrZmlsdGVyICYmIHF1aWNrZmlsdGVyLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGNhc2VTZW5zaXRpdmUgPSB0aGlzLmlzRmlsdGVyQ2FzZVNlbnNpdGl2ZSgpO1xuICAgICAgY29uc3QgcXVpY2tGaWx0ZXJDb2x1bW5zID0gdGhpcy5nZXRRdWlja0ZpbHRlckNvbHVtbnMoKTtcbiAgICAgIGNvbnN0IHJlZ0V4cFN0ciA9IG5ldyBSZWdFeHAoVXRpbC5lc2NhcGVTcGVjaWFsQ2hhcmFjdGVyKFV0aWwubm9ybWFsaXplU3RyaW5nKHF1aWNrZmlsdGVyLCAhY2FzZVNlbnNpdGl2ZSkpKTtcbiAgICAgIHJlc3VsdCA9IGRhdGFBcnJheS5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgIHJldHVybiBxdWlja0ZpbHRlckNvbHVtbnMuc29tZShjb2wgPT4gcmVnRXhwU3RyLnRlc3QoVXRpbC5ub3JtYWxpemVTdHJpbmcoaXRlbVtjb2xdICsgJycsICFjYXNlU2Vuc2l0aXZlKSkpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U29ydGVkRGF0YUZyb21BcnJheShkYXRhQXJyYXk6IGFueVtdKTogYW55W10ge1xuICAgIHJldHVybiBkYXRhQXJyYXk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0RGF0YShkYXRhOiBhbnksIHNxbFR5cGVzPzogYW55LCByZXBsYWNlPzogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghVXRpbC5pc0FycmF5KGRhdGEpKSB7XG4gICAgICB0aGlzLnNldERhdGFBcnJheShbXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YVJlc3BvbnNlQXJyYXkgPSB0aGlzLnBhcnNlUmVzcG9uc2VBcnJheShkYXRhLCByZXBsYWNlKTtcbiAgICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICAgIHRoaXMuc2V0RGF0YUFycmF5KHRoaXMuZGF0YVJlc3BvbnNlQXJyYXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5maWx0ZXJEYXRhKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICBPYnNlcnZhYmxlV3JhcHBlci5jYWxsRW1pdCh0aGlzLm9uUGFnaW5hdGVkRGF0YUxvYWRlZCwgZGF0YSk7XG4gICAgfVxuICAgIE9ic2VydmFibGVXcmFwcGVyLmNhbGxFbWl0KHRoaXMub25EYXRhTG9hZGVkLCB0aGlzLmRhdGFSZXNwb25zZUFycmF5KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZVJlc3BvbnNlQXJyYXkoZGF0YTogYW55W10sIHJlcGxhY2U/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVnaXN0ZXJGb3JtTGF5b3V0TWFuYWdlclN0YXRlKCkge1xuICAgIGlmICh0aGlzLnN0b3JlU3RhdGUgJiYgdGhpcy5mb3JtTGF5b3V0TWFuYWdlciAmJiB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLmlzVGFiTW9kZSgpICYmIHRoaXMuZm9ybUxheW91dE1hbmFnZXIub1RhYkdyb3VwKSB7XG4gICAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHRoaXMuZm9ybUxheW91dE1hbmFnZXJUYWJJbmRleCkpIHtcbiAgICAgICAgdGhpcy5mb3JtTGF5b3V0TWFuYWdlclRhYkluZGV4ID0gdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5vVGFiR3JvdXAuZGF0YS5sZW5ndGg7XG4gICAgICB9XG4gICAgICBjb25zdCB1cGRhdGVDb21wb25lbnRTdGF0ZVN1YmplY3QgPSAodGhpcy5mb3JtTGF5b3V0TWFuYWdlci5vVGFiR3JvdXAgYXMgT0Zvcm1MYXlvdXRUYWJHcm91cENvbXBvbmVudCkudXBkYXRlVGFiQ29tcG9uZW50c1N0YXRlO1xuXG4gICAgICB0aGlzLnRhYnNTdWJzY3JpcHRpb25zID0gdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5vblNlbGVjdGVkVGFiQ2hhbmdlLnN1YnNjcmliZSgoYXJnKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyVGFiSW5kZXggPT09IGFyZy5wcmV2aW91c0luZGV4KSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZVN0b3JhZ2UoKTtcbiAgICAgICAgICAvLyBzZXR0aW5nIGFscmVhZHlTdG9yZWQgdG8gZmFsc2UgdG8gZm9yY2UgdHJpZ2dlcmluZyBhIG5ldyBzdG9yYWdlIHVwZGF0ZSBhZnRlciB0aGlzXG4gICAgICAgICAgdGhpcy5hbHJlYWR5U3RvcmVkID0gZmFsc2U7XG4gICAgICAgICAgaWYgKGFyZy5pbmRleCAhPT0gMCkge1xuICAgICAgICAgICAgdXBkYXRlQ29tcG9uZW50U3RhdGVTdWJqZWN0Lm5leHQoYXJnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCgoYXJnLnByZXZpb3VzSW5kZXggPT09IHZvaWQgMCkgfHwgYXJnLnByZXZpb3VzSW5kZXggPT09IDApICYmIHRoaXMuZm9ybUxheW91dE1hbmFnZXIubmF2aWdhdGlvblNlcnZpY2UuaXNOYXZpZ2F0aW5nKSB7XG4gICAgICAgICAgLyogaW4gdGhlIGZvcm0tbGF5b3V0IG1vZGU9dGFiLCB0aGUgb25seSB3YXkgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbXBvbmVudCBoYXMgYmVlbiByZW5kZXJlZCBpc1xuICAgICAgICAgICB3aGVuIG5hdmlnYXRpb25TZXJ2aWNlLmlzTmF2aWdhdGluZyBhbmQgY29tZXMgcHJldmlvdXNJbmRleD0wICAqL1xuICAgICAgICAgIGFyZy5kYXRhLnJlbmRlcmVyU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tWaWV3UG9ydFN1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnRhYnNTdWJzY3JpcHRpb25zLmFkZCh1cGRhdGVDb21wb25lbnRTdGF0ZVN1YmplY3Quc3Vic2NyaWJlKChhcmcpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybUxheW91dE1hbmFnZXJUYWJJbmRleCA9PT0gYXJnLmluZGV4KSB7XG4gICAgICAgICAgdGhpcy5jb21wb25lbnRTdGF0ZVNlcnZpY2UuaW5pdGlhbGl6ZSh0aGlzKTtcbiAgICAgICAgICB0aGlzLmFwcGx5RGVmYXVsdENvbmZpZ3VyYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuXG4gICAgICB0aGlzLnRhYnNTdWJzY3JpcHRpb25zLmFkZCh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLm9uQ2xvc2VUYWIuc3Vic2NyaWJlKChhcmcpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybUxheW91dE1hbmFnZXJUYWJJbmRleCA9PT0gYXJnLmluZGV4KSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZVN0b3JhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5RGVmYXVsdENvbmZpZ3VyYXRpb24oKSB7XG5cbiAgfVxuXG4gIHB1YmxpYyBvbkNoYW5nZVBhZ2UoZTogUGFnZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5kYXRhU2VydmljZT8uc2V0UGFnaW5hdGlvbkNvbnRleHQoeyBwYWdlTnVtYmVyOiBlLnBhZ2VJbmRleCwgcGFnZVNpemU6IGUucGFnZVNpemUgfSk7XG5cbiAgICBpZiAoIXRoaXMucGFnZWFibGUpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBlLnBhZ2VJbmRleDtcbiAgICAgIHRoaXMucXVlcnlSb3dzID0gZS5wYWdlU2l6ZTtcbiAgICAgIHRoaXMuZmlsdGVyRGF0YSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBnb2luZ0JhY2sgPSBlLnBhZ2VJbmRleCA8IHRoaXMuY3VycmVudFBhZ2U7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IGUucGFnZUluZGV4O1xuICAgIGNvbnN0IHBhZ2VTaXplID0gZS5wYWdlU2l6ZTtcblxuICAgIGNvbnN0IG9sZFF1ZXJ5Um93cyA9IHRoaXMucXVlcnlSb3dzO1xuICAgIGNvbnN0IGNoYW5naW5nUGFnZVNpemUgPSAob2xkUXVlcnlSb3dzICE9PSBwYWdlU2l6ZSk7XG4gICAgdGhpcy5xdWVyeVJvd3MgPSBwYWdlU2l6ZTtcblxuICAgIGxldCBuZXdTdGFydFJlY29yZDtcbiAgICBsZXQgcXVlcnlMZW5ndGg7XG5cbiAgICBpZiAoZ29pbmdCYWNrIHx8IGNoYW5naW5nUGFnZVNpemUpIHtcbiAgICAgIG5ld1N0YXJ0UmVjb3JkID0gKHRoaXMuY3VycmVudFBhZ2UgKiB0aGlzLnF1ZXJ5Um93cyk7XG4gICAgICBxdWVyeUxlbmd0aCA9IHRoaXMucXVlcnlSb3dzO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdTdGFydFJlY29yZCA9IE1hdGgubWF4KHRoaXMuc3RhdGUucXVlcnlSZWNvcmRPZmZzZXQsICh0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5xdWVyeVJvd3MpKTtcbiAgICAgIGNvbnN0IG5ld0VuZFJlY29yZCA9IE1hdGgubWluKG5ld1N0YXJ0UmVjb3JkICsgdGhpcy5xdWVyeVJvd3MsIHRoaXMuc3RhdGUudG90YWxRdWVyeVJlY29yZHNOdW1iZXIpO1xuICAgICAgcXVlcnlMZW5ndGggPSB0aGlzLmRpc2FibGVQYWdlU2l6ZUNhbGN1bGF0aW9uID8gdGhpcy5xdWVyeVJvd3MgOiBNYXRoLm1pbih0aGlzLnF1ZXJ5Um93cywgbmV3RW5kUmVjb3JkIC0gbmV3U3RhcnRSZWNvcmQpO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5QXJnczogT1F1ZXJ5RGF0YUFyZ3MgPSB7XG4gICAgICBvZmZzZXQ6IG5ld1N0YXJ0UmVjb3JkLFxuICAgICAgbGVuZ3RoOiBxdWVyeUxlbmd0aCxcbiAgICAgIHJlcGxhY2U6IHRydWVcbiAgICB9O1xuXG4gICAgdGhpcy5xdWVyeURhdGEodm9pZCAwLCBxdWVyeUFyZ3MpO1xuICB9XG5cbiAgc2V0IGN1cnJlbnRQYWdlKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5fY3VycmVudFBhZ2UgPSB2YWw7XG4gIH1cblxuICBnZXQgY3VycmVudFBhZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFBhZ2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2N1cnJlbnRQYWdlOiBudW1iZXIgPSAwO1xuXG5cbiAgZ2V0IHRvdGFsUmVjb3JkcygpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRUb3RhbFJlY29yZHNOdW1iZXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGF0YVJlc3BvbnNlQXJyYXkubGVuZ3RoO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFBhZ2luYXRpb25EYXRhRnJvbUFycmF5KGRhdGFBcnJheTogYW55W10pOiBhbnlbXSB7XG4gICAgbGV0IHJlc3VsdCA9IGRhdGFBcnJheTtcbiAgICBpZiAodGhpcy5wYWdpbmF0aW9uQ29udHJvbHMpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5zcGxpY2UodGhpcy5jdXJyZW50UGFnZSAqIHRoaXMucXVlcnlSb3dzLCB0aGlzLnF1ZXJ5Um93cyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBoYW5kbGVJdGVtQ2xpY2soaXRlbTogSXRlbUNsaWNrKTogdm9pZCB7XG4gICAgdGhpcy5jbGlja1RpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY2xpY2tQcmV2ZW50KSB7XG4gICAgICAgIHRoaXMuaXRlbUNsaWNrRG9uZShpdGVtKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2xpY2tQcmV2ZW50ID0gZmFsc2U7XG4gICAgfSwgdGhpcy5jbGlja0RlbGF5KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpdGVtQ2xpY2tEb25lKGl0ZW06IEl0ZW1DbGljayk6IHZvaWQge1xuICAgIGlmICghdGhpcy5vZW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gaXRlbS5nZXRJdGVtRGF0YSgpO1xuICAgIGlmICh0aGlzLmRldGFpbE1vZGUgPT09IENvZGVzLkRFVEFJTF9NT0RFX0NMSUNLKSB7XG4gICAgICB0aGlzLnNhdmVEYXRhTmF2aWdhdGlvbkluTG9jYWxTdG9yYWdlKCk7XG4gICAgICB0aGlzLnZpZXdEZXRhaWwoZGF0YSk7XG4gICAgfVxuICAgIHRoaXMub25DbGljay5lbWl0KGRhdGEpO1xuICB9XG5cbiAgaGFuZGxlSXRlbURibENsaWNrKGl0ZW06IEl0ZW1DbGljayk6IHZvaWQge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmNsaWNrVGltZXIpO1xuICAgIHRoaXMuY2xpY2tQcmV2ZW50ID0gdHJ1ZTtcbiAgICB0aGlzLml0ZW1EYmxDbGlja0RvbmUoaXRlbSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXRlbURibENsaWNrRG9uZShpdGVtOiBJdGVtQ2xpY2spOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMub2VuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IGl0ZW0uZ2V0SXRlbURhdGEoKTtcbiAgICBpZiAoQ29kZXMuaXNEb3VibGVDbGlja01vZGUodGhpcy5kZXRhaWxNb2RlKSkge1xuICAgICAgdGhpcy5zYXZlRGF0YU5hdmlnYXRpb25JbkxvY2FsU3RvcmFnZSgpO1xuICAgICAgdGhpcy52aWV3RGV0YWlsKGRhdGEpO1xuICAgIH1cbiAgICB0aGlzLm9uRG91YmxlQ2xpY2suZW1pdChkYXRhKTtcbiAgfVxuXG4gIGdldCBxdWlja0ZpbHRlckFwcGVhcmFuY2UoKTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSB7XG4gICAgcmV0dXJuIHRoaXMuX3F1aWNrRmlsdGVyQXBwZWFyYW5jZTtcbiAgfVxuXG4gIHNldCBxdWlja0ZpbHRlckFwcGVhcmFuY2UodmFsdWU6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSBbJ2ZpbGwnLCAnb3V0bGluZSddO1xuICAgIGlmICh2YWx1ZXMuaW5kZXhPZih2YWx1ZSkgPT09IC0xKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1RoZSBxdWljay1maWx0ZXItYXBwZWFyYW5jZSBhdHRyaWJ1dGUgaXMgdW5kZWZpbmVkIHNvIHRoZSBvdXRsaW5lIHZhbHVlIHdpbGwgYmUgdXNlZCcpO1xuICAgICAgdmFsdWUgPSAnb3V0bGluZSc7XG4gICAgfVxuICAgIHRoaXMuX3F1aWNrRmlsdGVyQXBwZWFyYW5jZSA9IHZhbHVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNxbFR5cGVzT2ZLZXlzKCkge1xuICAgIGNvbnN0IHNxbFR5cGVzID0gdGhpcy5nZXRTcWxUeXBlcygpO1xuICAgIGNvbnN0IHNxbFR5cGVzQXJnID0ge307XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHNxbFR5cGVzKSkge1xuICAgICAgdGhpcy5rZXlzQXJyYXkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBzcWxUeXBlc0FyZ1trZXldID0gc3FsVHlwZXNba2V5XTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gc3FsVHlwZXNBcmc7XG5cbiAgfVxuXG4gIGNvbXBhcmVSb3coKTogKChvMTogYW55LCBvMjogYW55KSA9PiBib29sZWFuKSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIChvMTogYW55LCBvMjogYW55KSA9PiB0aGlzLmtleXNBcnJheS5ldmVyeShrZXkgPT4gbzFba2V5XSA9PT0gbzJba2V5XSk7XG4gIH1cbn1cblxuLypUaGlzIGNsYXNzIGlzIGRlZmluaWVkIHRvIG1hbnRhaW4gYmFjd2FyZHMgY29tcGF0aWJpbGl0eSAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgY2xhc3MgT1NlcnZpY2VDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdE9TZXJ2aWNlQ29tcG9uZW50PERlZmF1bHRTZXJ2aWNlQ29tcG9uZW50U3RhdGVTZXJ2aWNlPiB7XG5cbn1cbiJdfQ==
|
|
@@ -12,10 +12,10 @@ export class OSkeletonComponent {
|
|
|
12
12
|
this.subscription?.unsubscribe();
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
|
-
OSkeletonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
16
|
-
OSkeletonComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.
|
|
17
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
15
|
+
OSkeletonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OSkeletonComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive });
|
|
16
|
+
OSkeletonComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: OSkeletonComponent, ngImport: i0 });
|
|
17
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OSkeletonComponent, decorators: [{
|
|
18
18
|
type: Directive,
|
|
19
19
|
args: [{}]
|
|
20
20
|
}], ctorParameters: function () { return [{ type: i0.Injector }]; } });
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1za2VsZXRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy9vLXNrZWxldG9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUUvRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFHbkUsTUFBTSxPQUFPLGtCQUFrQjtJQUs3QixZQUFzQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ3RDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBb0IsaUJBQWlCLENBQUMsQ0FBQztRQUNqRixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQzs7K0dBYlUsa0JBQWtCO21HQUFsQixrQkFBa0I7MkZBQWxCLGtCQUFrQjtrQkFEOUIsU0FBUzttQkFBQyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbmplY3RvciwgT25EZXN0cm95IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBBcHBlYXJhbmNlU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9hcHBlYXJhbmNlLnNlcnZpY2VcIjtcblxuQERpcmVjdGl2ZSh7fSlcbmV4cG9ydCBjbGFzcyBPU2tlbGV0b25Db21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBpc0RhcmtNb2RlOiBib29sZWFuO1xuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgYXBwZWFyYW5jZVNlcnZpY2U6IEFwcGVhcmFuY2VTZXJ2aWNlO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICB0aGlzLmFwcGVhcmFuY2VTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQ8QXBwZWFyYW5jZVNlcnZpY2U+KEFwcGVhcmFuY2VTZXJ2aWNlKTtcbiAgICB0aGlzLmlzRGFya01vZGUgPSB0aGlzLmFwcGVhcmFuY2VTZXJ2aWNlLmlzRGFya01vZGUoKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuYXBwZWFyYW5jZVNlcnZpY2UuaXNEYXJrTW9kZSQuc3Vic2NyaWJlKHggPT4gdGhpcy5pc0RhcmtNb2RlID0geCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxufSJdfQ==
|
package/esm2020/lib/components/table/column/calculated/o-table-column-calculated.component.mjs
CHANGED
|
@@ -14,14 +14,14 @@ export class OTableColumnCalculatedComponent extends OTableColumnComponent {
|
|
|
14
14
|
this.injector = injector;
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
|
-
OTableColumnCalculatedComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
18
|
-
OTableColumnCalculatedComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.
|
|
17
|
+
OTableColumnCalculatedComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OTableColumnCalculatedComponent, deps: [{ token: forwardRef(() => OTableComponent) }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
18
|
+
OTableColumnCalculatedComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: OTableColumnCalculatedComponent, selector: "o-table-column-calculated", inputs: { operation: "operation", functionOperation: ["operation-function", "functionOperation"] }, providers: [
|
|
19
19
|
{
|
|
20
20
|
provide: OTableColumnComponent,
|
|
21
21
|
useExisting: forwardRef(() => OTableColumnCalculatedComponent)
|
|
22
22
|
}
|
|
23
23
|
], usesInheritance: true, ngImport: i0, template: "<span #container>\n</span>", changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
24
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
24
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OTableColumnCalculatedComponent, decorators: [{
|
|
25
25
|
type: Component,
|
|
26
26
|
args: [{ selector: 'o-table-column-calculated', inputs: DEFAULT_INPUTS_O_TABLE_COLUMN_CALCULATED, providers: [
|
|
27
27
|
{
|
|
@@ -33,4 +33,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
33
33
|
type: Inject,
|
|
34
34
|
args: [forwardRef(() => OTableComponent)]
|
|
35
35
|
}] }, { type: i0.Injector }]; } });
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS1jb2x1bW4tY2FsY3VsYXRlZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9jb2x1bW4vY2FsY3VsYXRlZC9vLXRhYmxlLWNvbHVtbi1jYWxjdWxhdGVkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2NvbHVtbi9jYWxjdWxhdGVkL28tdGFibGUtY29sdW1uLWNhbGN1bGF0ZWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUlqRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7OztBQUVwRSxNQUFNLENBQUMsTUFBTSx3Q0FBd0MsR0FBRztJQUV0RCxXQUFXO0lBRVgsdUNBQXVDO0NBQ3hDLENBQUM7QUFlRixNQUFNLE9BQU8sK0JBQWdDLFNBQVEscUJBQXFCO0lBS3hFLFlBQ29ELEtBQXNCLEVBQzlELFFBQWtCO1FBQzVCLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFGMkIsVUFBSyxHQUFMLEtBQUssQ0FBaUI7UUFDOUQsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUc5QixDQUFDOzs0SEFWVSwrQkFBK0Isa0JBTWhDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUM7Z0hBTmhDLCtCQUErQix3SkFUL0I7UUFDVDtZQUNFLE9BQU8sRUFBRSxxQkFBcUI7WUFDOUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQztTQUMvRDtLQUNGLGlEQ3ZCSCw0QkFDTzsyRkQwQk0sK0JBQStCO2tCQWIzQyxTQUFTOytCQUNFLDJCQUEyQixVQUU3Qix3Q0FBd0MsYUFDckM7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLHFCQUFxQjs0QkFDOUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsZ0NBQWdDLENBQUM7eUJBQy9EO3FCQUNGLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNOzswQkFTNUMsTUFBTTsyQkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5qZWN0LCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBPVGFibGVDb2x1bW5DYWxjdWxhdGVkIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLWNvbHVtbi1jYWxjdWxhdGVkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBPcGVyYXRvckZ1bmN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vdHlwZXMvb3BlcmF0aW9uLWZ1bmN0aW9uLnR5cGUnO1xuaW1wb3J0IHsgT1RhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vby10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgT1RhYmxlQ29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi4vby10YWJsZS1jb2x1bW4uY29tcG9uZW50JztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSU5QVVRTX09fVEFCTEVfQ09MVU1OX0NBTENVTEFURUQgPSBbXG4gIC8vIG9wZXJhdGlvbiBbc3RyaW5nXTogb3BlcmF0aW9uIC5cbiAgJ29wZXJhdGlvbicsXG4gIC8vIG9wZXJhdGlvbi1mdW5jdGlvbiBbZnVudGlvbl06IGNhbGxiYWNrIHRpdGxlLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ2Z1bmN0aW9uT3BlcmF0aW9uOiBvcGVyYXRpb24tZnVuY3Rpb24nXG5dO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvLXRhYmxlLWNvbHVtbi1jYWxjdWxhdGVkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL28tdGFibGUtY29sdW1uLWNhbGN1bGF0ZWQuY29tcG9uZW50Lmh0bWwnLFxuICBpbnB1dHM6IERFRkFVTFRfSU5QVVRTX09fVEFCTEVfQ09MVU1OX0NBTENVTEFURUQsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE9UYWJsZUNvbHVtbkNvbXBvbmVudCxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE9UYWJsZUNvbHVtbkNhbGN1bGF0ZWRDb21wb25lbnQpXG4gICAgfVxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5cbmV4cG9ydCBjbGFzcyBPVGFibGVDb2x1bW5DYWxjdWxhdGVkQ29tcG9uZW50IGV4dGVuZHMgT1RhYmxlQ29sdW1uQ29tcG9uZW50IGltcGxlbWVudHMgT1RhYmxlQ29sdW1uQ2FsY3VsYXRlZCB7XG5cbiAgcHVibGljIG9wZXJhdGlvbjogc3RyaW5nO1xuICBwdWJsaWMgZnVuY3Rpb25PcGVyYXRpb246IE9wZXJhdG9yRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChmb3J3YXJkUmVmKCgpID0+IE9UYWJsZUNvbXBvbmVudCkpIHB1YmxpYyB0YWJsZTogT1RhYmxlQ29tcG9uZW50LFxuICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBzdXBlcih0YWJsZSwgaW5qZWN0b3IpO1xuXG4gIH1cblxufVxuIiwiPHNwYW4gI2NvbnRhaW5lcj5cbjwvc3Bhbj4iXX0=
|