ngx-tethys 18.0.0-next.0 → 18.0.0-next.2
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/CHANGELOG.md +161 -1
- package/action/action.component.d.ts +3 -3
- package/alert/alert.component.d.ts +1 -1
- package/anchor/anchor.component.d.ts +3 -1
- package/autocomplete/autocomplete.component.d.ts +1 -1
- package/autocomplete/autocomplete.trigger.directive.d.ts +1 -1
- package/avatar/avatar.component.d.ts +4 -4
- package/badge/badge.component.d.ts +3 -3
- package/breadcrumb/breadcrumb.component.d.ts +30 -2
- package/breadcrumb/module.d.ts +3 -1
- package/breadcrumb/styles/breadcrumb.scss +8 -0
- package/button/button-icon.component.d.ts +2 -2
- package/button/button.component.d.ts +2 -2
- package/button/styles/button.scss +5 -5
- package/card/card.component.d.ts +3 -3
- package/card/content.component.d.ts +1 -1
- package/carousel/carousel.component.d.ts +4 -4
- package/cascader/cascader-li.component.d.ts +5 -5
- package/cascader/cascader-search-option.component.d.ts +3 -3
- package/cascader/cascader.component.d.ts +8 -8
- package/checkbox/checkbox.component.d.ts +1 -1
- package/collapse/collapse-item.component.d.ts +2 -2
- package/collapse/collapse.component.d.ts +1 -1
- package/color-picker/color-picker-panel.component.d.ts +1 -1
- package/color-picker/color-picker.component.d.ts +3 -3
- package/copy/copy.directive.d.ts +1 -1
- package/core/behaviors/decorators.d.ts +1 -1
- package/core/overlay/abstract-overlay.config.d.ts +6 -0
- package/date-picker/abstract-picker.component.d.ts +15 -8
- package/date-picker/abstract-picker.directive.d.ts +3 -3
- package/date-picker/base-picker.component.d.ts +2 -2
- package/date-picker/date-picker.config.d.ts +1 -0
- package/date-picker/date-picker.service.d.ts +1 -0
- package/date-picker/lib/calendar/calendar-footer.component.d.ts +1 -1
- package/date-picker/lib/popups/date-popup.component.d.ts +2 -1
- package/date-picker/lib/popups/inner-popup.component.d.ts +1 -1
- package/date-picker/picker.component.d.ts +1 -1
- package/date-picker/picker.util.d.ts +2 -0
- package/date-range/date-range.component.d.ts +8 -2
- package/dialog/body/dialog-body.component.d.ts +1 -1
- package/dialog/footer/dialog-footer.component.d.ts +1 -1
- package/dialog/header/dialog-header.component.d.ts +1 -1
- package/divider/divider.component.d.ts +2 -2
- package/drag-drop/drag-handle.directive.d.ts +1 -1
- package/drag-drop/drag.directive.d.ts +1 -1
- package/drag-drop/drop-container.directive.d.ts +1 -1
- package/dropdown/dropdown-menu-item.directive.d.ts +2 -2
- package/dropdown/dropdown-menu.component.d.ts +1 -1
- package/dropdown/dropdown.directive.d.ts +1 -1
- package/empty/empty.component.d.ts +1 -1
- package/esm2022/action/action.component.mjs +7 -6
- package/esm2022/alert/alert.component.mjs +5 -5
- package/esm2022/anchor/anchor.component.mjs +5 -5
- package/esm2022/autocomplete/autocomplete.component.mjs +5 -4
- package/esm2022/autocomplete/autocomplete.trigger.directive.mjs +5 -5
- package/esm2022/avatar/avatar.component.mjs +8 -8
- package/esm2022/badge/badge.component.mjs +7 -6
- package/esm2022/breadcrumb/breadcrumb.component.mjs +73 -32
- package/esm2022/breadcrumb/module.mjs +6 -4
- package/esm2022/button/button-icon.component.mjs +6 -5
- package/esm2022/button/button.component.mjs +6 -6
- package/esm2022/card/card.component.mjs +7 -6
- package/esm2022/card/content.component.mjs +5 -4
- package/esm2022/carousel/carousel.component.mjs +8 -7
- package/esm2022/cascader/cascader-li.component.mjs +9 -8
- package/esm2022/cascader/cascader-search-option.component.mjs +7 -6
- package/esm2022/cascader/cascader.component.mjs +19 -12
- package/esm2022/checkbox/checkbox.component.mjs +5 -4
- package/esm2022/collapse/collapse-item.component.mjs +6 -6
- package/esm2022/collapse/collapse.component.mjs +5 -4
- package/esm2022/color-picker/color-picker-panel.component.mjs +5 -4
- package/esm2022/color-picker/color-picker.component.mjs +7 -6
- package/esm2022/color-picker/parts/inputs/inputs.component.mjs +1 -1
- package/esm2022/copy/copy.directive.mjs +5 -4
- package/esm2022/core/behaviors/decorators.mjs +2 -2
- package/esm2022/core/overlay/abstract-overlay.config.mjs +7 -1
- package/esm2022/date-picker/abstract-picker.component.mjs +28 -17
- package/esm2022/date-picker/abstract-picker.directive.mjs +8 -7
- package/esm2022/date-picker/base-picker.component.mjs +5 -5
- package/esm2022/date-picker/date-picker.component.mjs +3 -3
- package/esm2022/date-picker/date-picker.config.mjs +2 -1
- package/esm2022/date-picker/date-picker.service.mjs +4 -1
- package/esm2022/date-picker/lib/calendar/calendar-footer.component.mjs +5 -5
- package/esm2022/date-picker/lib/date/date-header.component.mjs +4 -4
- package/esm2022/date-picker/lib/decade/decade-header.component.mjs +4 -4
- package/esm2022/date-picker/lib/month/month-header.component.mjs +4 -4
- package/esm2022/date-picker/lib/popups/date-popup.component.mjs +7 -4
- package/esm2022/date-picker/lib/popups/inner-popup.component.mjs +5 -5
- package/esm2022/date-picker/lib/year/year-header.component.mjs +4 -4
- package/esm2022/date-picker/month-picker.component.mjs +3 -3
- package/esm2022/date-picker/picker.component.mjs +5 -5
- package/esm2022/date-picker/picker.util.mjs +14 -2
- package/esm2022/date-picker/quarter-picker.component.mjs +3 -3
- package/esm2022/date-picker/range-picker.component.mjs +3 -3
- package/esm2022/date-picker/week-picker.component.mjs +3 -3
- package/esm2022/date-picker/year-picker.component.mjs +3 -3
- package/esm2022/date-range/date-range.component.mjs +6 -5
- package/esm2022/dialog/body/dialog-body.component.mjs +5 -4
- package/esm2022/dialog/footer/dialog-footer.component.mjs +5 -4
- package/esm2022/dialog/header/dialog-header.component.mjs +5 -4
- package/esm2022/divider/divider.component.mjs +6 -5
- package/esm2022/drag-drop/drag-handle.directive.mjs +5 -4
- package/esm2022/drag-drop/drag.directive.mjs +5 -4
- package/esm2022/drag-drop/drop-container.directive.mjs +5 -4
- package/esm2022/dropdown/dropdown-menu-item.directive.mjs +7 -6
- package/esm2022/dropdown/dropdown-menu.component.mjs +5 -4
- package/esm2022/dropdown/dropdown.directive.mjs +5 -5
- package/esm2022/empty/empty.component.mjs +5 -4
- package/esm2022/form/form-group-error/form-group-error.component.mjs +5 -4
- package/esm2022/form/form-group-label.directive.mjs +5 -4
- package/esm2022/form/form-group.component.mjs +7 -6
- package/esm2022/icon/icon.component.mjs +6 -5
- package/esm2022/image/image.class.mjs +1 -1
- package/esm2022/image/image.directive.mjs +6 -5
- package/esm2022/image/index.mjs +6 -5
- package/esm2022/image/preview/image-preview.component.mjs +21 -13
- package/esm2022/input/input-search.component.mjs +5 -4
- package/esm2022/input/input.component.mjs +6 -5
- package/esm2022/input-number/input-number.component.mjs +14 -7
- package/esm2022/layout/header.component.mjs +7 -6
- package/esm2022/layout/sidebar-header.component.mjs +5 -4
- package/esm2022/layout/sidebar.component.mjs +12 -11
- package/esm2022/list/list.component.mjs +5 -4
- package/esm2022/list/selection/selection-list.mjs +7 -7
- package/esm2022/loading/loading.component.mjs +6 -5
- package/esm2022/mention/mention.directive.mjs +3 -3
- package/esm2022/menu/group/menu-group.component.mjs +10 -9
- package/esm2022/menu/item/action/menu-item-action.component.mjs +17 -7
- package/esm2022/menu/item/name/menu-item-name.component.mjs +5 -4
- package/esm2022/menu/menu.component.mjs +5 -4
- package/esm2022/nav/icon-nav/icon-nav-link.directive.mjs +5 -4
- package/esm2022/nav/nav-ink-bar.directive.mjs +6 -5
- package/esm2022/nav/nav-item.directive.mjs +7 -6
- package/esm2022/nav/nav.component.mjs +18 -7
- package/esm2022/pagination/pagination.class.mjs +1 -1
- package/esm2022/pagination/pagination.component.mjs +22 -10
- package/esm2022/pagination/pagination.config.mjs +3 -2
- package/esm2022/popover/popover.directive.mjs +6 -5
- package/esm2022/popover/popover.service.mjs +2 -1
- package/esm2022/property/property-item.component.mjs +6 -5
- package/esm2022/property-operation/property-operation.component.mjs +9 -9
- package/esm2022/radio/group/radio-group.component.mjs +5 -4
- package/esm2022/rate/rate-item.component.mjs +5 -4
- package/esm2022/rate/rate.component.mjs +7 -7
- package/esm2022/resizable/resizable.directive.mjs +7 -6
- package/esm2022/resizable/resize-handle.component.mjs +5 -4
- package/esm2022/resizable/resize-handles.component.mjs +5 -4
- package/esm2022/segment/segment-item.component.mjs +5 -5
- package/esm2022/segment/segment.component.mjs +5 -4
- package/esm2022/select/custom-select/custom-select.component.mjs +14 -14
- package/esm2022/select/native-select/native-select.component.mjs +5 -5
- package/esm2022/shared/base-form-check.component.mjs +6 -5
- package/esm2022/shared/directives/thy-autofocus.directive.mjs +6 -5
- package/esm2022/shared/directives/thy-scroll.directive.mjs +5 -4
- package/esm2022/shared/directives/thy-show.mjs +5 -4
- package/esm2022/shared/option/group/option-group.component.mjs +5 -4
- package/esm2022/shared/option/list-option/list-option.component.mjs +5 -4
- package/esm2022/shared/option/option.component.mjs +5 -5
- package/esm2022/shared/select/select-control/select-control.component.mjs +10 -10
- package/esm2022/skeleton/skeleton-circle.component.mjs +5 -5
- package/esm2022/skeleton/skeleton-rectangle.component.mjs +5 -5
- package/esm2022/skeleton/skeleton.component.mjs +5 -4
- package/esm2022/skeleton/stylized/bullet-list.component.mjs +5 -4
- package/esm2022/skeleton/stylized/list.component.mjs +5 -4
- package/esm2022/skeleton/stylized/paragraph.component.mjs +5 -4
- package/esm2022/slide/slide-body/slide-body-section.component.mjs +5 -4
- package/esm2022/slider/slider.component.mjs +6 -6
- package/esm2022/space/space.component.mjs +5 -4
- package/esm2022/stepper/step-header.component.mjs +6 -5
- package/esm2022/stepper/stepper.component.mjs +5 -4
- package/esm2022/switch/switch.component.mjs +6 -5
- package/esm2022/table/table-column.component.mjs +9 -9
- package/esm2022/table/table-skeleton.component.mjs +8 -7
- package/esm2022/table/table.component.mjs +19 -17
- package/esm2022/tabs/tab.component.mjs +5 -4
- package/esm2022/tabs/tabs.component.mjs +6 -6
- package/esm2022/tag/tag.component.mjs +5 -5
- package/esm2022/time-picker/time-picker-panel.component.mjs +6 -6
- package/esm2022/time-picker/time-picker.component.mjs +9 -9
- package/esm2022/timeline/timeline.component.mjs +5 -4
- package/esm2022/tooltip/tooltip.directive.mjs +6 -6
- package/esm2022/tree/tree-node.component.mjs +9 -8
- package/esm2022/tree/tree.component.mjs +32 -11
- package/esm2022/tree/tree.service.mjs +3 -3
- package/esm2022/tree-select/tree-select.component.mjs +20 -18
- package/esm2022/upload/file-select.component.mjs +24 -27
- package/esm2022/version.mjs +2 -2
- package/esm2022/vote/vote.component.mjs +7 -6
- package/esm2022/watermark/watermark.directive.mjs +5 -4
- package/fesm2022/ngx-tethys-action.mjs +6 -5
- package/fesm2022/ngx-tethys-action.mjs.map +1 -1
- package/fesm2022/ngx-tethys-alert.mjs +4 -4
- package/fesm2022/ngx-tethys-alert.mjs.map +1 -1
- package/fesm2022/ngx-tethys-anchor.mjs +4 -4
- package/fesm2022/ngx-tethys-anchor.mjs.map +1 -1
- package/fesm2022/ngx-tethys-autocomplete.mjs +6 -6
- package/fesm2022/ngx-tethys-autocomplete.mjs.map +1 -1
- package/fesm2022/ngx-tethys-avatar.mjs +7 -7
- package/fesm2022/ngx-tethys-avatar.mjs.map +1 -1
- package/fesm2022/ngx-tethys-badge.mjs +6 -5
- package/fesm2022/ngx-tethys-badge.mjs.map +1 -1
- package/fesm2022/ngx-tethys-breadcrumb.mjs +117 -77
- package/fesm2022/ngx-tethys-breadcrumb.mjs.map +1 -1
- package/fesm2022/ngx-tethys-button.mjs +8 -8
- package/fesm2022/ngx-tethys-button.mjs.map +1 -1
- package/fesm2022/ngx-tethys-card.mjs +8 -7
- package/fesm2022/ngx-tethys-card.mjs.map +1 -1
- package/fesm2022/ngx-tethys-carousel.mjs +7 -6
- package/fesm2022/ngx-tethys-carousel.mjs.map +1 -1
- package/fesm2022/ngx-tethys-cascader.mjs +28 -21
- package/fesm2022/ngx-tethys-cascader.mjs.map +1 -1
- package/fesm2022/ngx-tethys-checkbox.mjs +4 -3
- package/fesm2022/ngx-tethys-checkbox.mjs.map +1 -1
- package/fesm2022/ngx-tethys-collapse.mjs +7 -7
- package/fesm2022/ngx-tethys-collapse.mjs.map +1 -1
- package/fesm2022/ngx-tethys-color-picker.mjs +9 -8
- package/fesm2022/ngx-tethys-color-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-copy.mjs +4 -3
- package/fesm2022/ngx-tethys-copy.mjs.map +1 -1
- package/fesm2022/ngx-tethys-core.mjs +7 -1
- package/fesm2022/ngx-tethys-core.mjs.map +1 -1
- package/fesm2022/ngx-tethys-date-picker.mjs +86 -57
- package/fesm2022/ngx-tethys-date-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-date-range.mjs +5 -4
- package/fesm2022/ngx-tethys-date-range.mjs.map +1 -1
- package/fesm2022/ngx-tethys-dialog.mjs +8 -7
- package/fesm2022/ngx-tethys-dialog.mjs.map +1 -1
- package/fesm2022/ngx-tethys-divider.mjs +5 -4
- package/fesm2022/ngx-tethys-divider.mjs.map +1 -1
- package/fesm2022/ngx-tethys-drag-drop.mjs +8 -8
- package/fesm2022/ngx-tethys-drag-drop.mjs.map +1 -1
- package/fesm2022/ngx-tethys-dropdown.mjs +10 -10
- package/fesm2022/ngx-tethys-dropdown.mjs.map +1 -1
- package/fesm2022/ngx-tethys-empty.mjs +4 -3
- package/fesm2022/ngx-tethys-empty.mjs.map +1 -1
- package/fesm2022/ngx-tethys-form.mjs +10 -10
- package/fesm2022/ngx-tethys-form.mjs.map +1 -1
- package/fesm2022/ngx-tethys-icon.mjs +5 -5
- package/fesm2022/ngx-tethys-icon.mjs.map +1 -1
- package/fesm2022/ngx-tethys-image.mjs +24 -16
- package/fesm2022/ngx-tethys-image.mjs.map +1 -1
- package/fesm2022/ngx-tethys-input-number.mjs +13 -6
- package/fesm2022/ngx-tethys-input-number.mjs.map +1 -1
- package/fesm2022/ngx-tethys-input.mjs +7 -6
- package/fesm2022/ngx-tethys-input.mjs.map +1 -1
- package/fesm2022/ngx-tethys-layout.mjs +17 -16
- package/fesm2022/ngx-tethys-layout.mjs.map +1 -1
- package/fesm2022/ngx-tethys-list.mjs +8 -8
- package/fesm2022/ngx-tethys-list.mjs.map +1 -1
- package/fesm2022/ngx-tethys-loading.mjs +5 -4
- package/fesm2022/ngx-tethys-loading.mjs.map +1 -1
- package/fesm2022/ngx-tethys-mention.mjs +2 -2
- package/fesm2022/ngx-tethys-mention.mjs.map +1 -1
- package/fesm2022/ngx-tethys-menu.mjs +26 -16
- package/fesm2022/ngx-tethys-menu.mjs.map +1 -1
- package/fesm2022/ngx-tethys-nav.mjs +26 -16
- package/fesm2022/ngx-tethys-nav.mjs.map +1 -1
- package/fesm2022/ngx-tethys-pagination.mjs +23 -10
- package/fesm2022/ngx-tethys-pagination.mjs.map +1 -1
- package/fesm2022/ngx-tethys-popover.mjs +6 -5
- package/fesm2022/ngx-tethys-popover.mjs.map +1 -1
- package/fesm2022/ngx-tethys-property-operation.mjs +8 -8
- package/fesm2022/ngx-tethys-property-operation.mjs.map +1 -1
- package/fesm2022/ngx-tethys-property.mjs +5 -4
- package/fesm2022/ngx-tethys-property.mjs.map +1 -1
- package/fesm2022/ngx-tethys-radio.mjs +7 -6
- package/fesm2022/ngx-tethys-radio.mjs.map +1 -1
- package/fesm2022/ngx-tethys-rate.mjs +8 -8
- package/fesm2022/ngx-tethys-rate.mjs.map +1 -1
- package/fesm2022/ngx-tethys-resizable.mjs +10 -10
- package/fesm2022/ngx-tethys-resizable.mjs.map +1 -1
- package/fesm2022/ngx-tethys-segment.mjs +6 -6
- package/fesm2022/ngx-tethys-segment.mjs.map +1 -1
- package/fesm2022/ngx-tethys-select.mjs +15 -15
- package/fesm2022/ngx-tethys-select.mjs.map +1 -1
- package/fesm2022/ngx-tethys-shared.mjs +25 -25
- package/fesm2022/ngx-tethys-shared.mjs.map +1 -1
- package/fesm2022/ngx-tethys-skeleton.mjs +14 -14
- package/fesm2022/ngx-tethys-skeleton.mjs.map +1 -1
- package/fesm2022/ngx-tethys-slide.mjs +4 -4
- package/fesm2022/ngx-tethys-slide.mjs.map +1 -1
- package/fesm2022/ngx-tethys-slider.mjs +5 -5
- package/fesm2022/ngx-tethys-slider.mjs.map +1 -1
- package/fesm2022/ngx-tethys-space.mjs +4 -3
- package/fesm2022/ngx-tethys-space.mjs.map +1 -1
- package/fesm2022/ngx-tethys-stepper.mjs +7 -6
- package/fesm2022/ngx-tethys-stepper.mjs.map +1 -1
- package/fesm2022/ngx-tethys-switch.mjs +5 -4
- package/fesm2022/ngx-tethys-switch.mjs.map +1 -1
- package/fesm2022/ngx-tethys-table.mjs +29 -27
- package/fesm2022/ngx-tethys-table.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tabs.mjs +7 -7
- package/fesm2022/ngx-tethys-tabs.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tag.mjs +4 -4
- package/fesm2022/ngx-tethys-tag.mjs.map +1 -1
- package/fesm2022/ngx-tethys-time-picker.mjs +11 -11
- package/fesm2022/ngx-tethys-time-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-timeline.mjs +4 -3
- package/fesm2022/ngx-tethys-timeline.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tooltip.mjs +5 -5
- package/fesm2022/ngx-tethys-tooltip.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tree-select.mjs +14 -11
- package/fesm2022/ngx-tethys-tree-select.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tree.mjs +39 -18
- package/fesm2022/ngx-tethys-tree.mjs.map +1 -1
- package/fesm2022/ngx-tethys-upload.mjs +23 -27
- package/fesm2022/ngx-tethys-upload.mjs.map +1 -1
- package/fesm2022/ngx-tethys-vote.mjs +6 -5
- package/fesm2022/ngx-tethys-vote.mjs.map +1 -1
- package/fesm2022/ngx-tethys-watermark.mjs +4 -3
- package/fesm2022/ngx-tethys-watermark.mjs.map +1 -1
- package/fesm2022/ngx-tethys.mjs +1 -1
- package/fesm2022/ngx-tethys.mjs.map +1 -1
- package/form/form-group-error/form-group-error.component.d.ts +1 -1
- package/form/form-group-label.directive.d.ts +1 -1
- package/form/form-group.component.d.ts +3 -3
- package/icon/icon.component.d.ts +2 -2
- package/image/image.class.d.ts +1 -1
- package/image/image.directive.d.ts +2 -2
- package/image/index.d.ts +5 -4
- package/image/preview/image-preview.component.d.ts +5 -5
- package/input/input-search.component.d.ts +1 -1
- package/input/input.component.d.ts +2 -2
- package/input/styles/input-group.scss +3 -0
- package/input-number/input-number.component.d.ts +10 -3
- package/layout/header.component.d.ts +3 -3
- package/layout/sidebar-header.component.d.ts +1 -1
- package/layout/sidebar.component.d.ts +7 -7
- package/list/list.component.d.ts +1 -1
- package/list/selection/selection-list.d.ts +3 -3
- package/loading/loading.component.d.ts +2 -2
- package/menu/group/menu-group.component.d.ts +6 -6
- package/menu/item/action/menu-item-action.component.d.ts +8 -3
- package/menu/item/name/menu-item-name.component.d.ts +1 -1
- package/menu/menu.component.d.ts +1 -1
- package/menu/styles/menu.scss +8 -0
- package/nav/icon-nav/icon-nav-link.directive.d.ts +1 -1
- package/nav/nav-ink-bar.directive.d.ts +2 -2
- package/nav/nav-item.directive.d.ts +3 -3
- package/nav/nav.component.d.ts +7 -5
- package/package.json +2 -2
- package/pagination/pagination.class.d.ts +4 -0
- package/pagination/pagination.component.d.ts +11 -6
- package/popover/popover.directive.d.ts +2 -2
- package/property/property-item.component.d.ts +4 -1
- package/property/styles/properties.scss +2 -0
- package/property-operation/property-operation.component.d.ts +5 -5
- package/radio/group/radio-group.component.d.ts +1 -1
- package/rate/rate-item.component.d.ts +1 -1
- package/rate/rate.component.d.ts +3 -3
- package/resizable/resizable.directive.d.ts +3 -3
- package/resizable/resize-handle.component.d.ts +1 -1
- package/resizable/resize-handles.component.d.ts +1 -1
- package/schematics/ng-update/update-18/complete.js +0 -10
- package/schematics/ng-update/update-18/index.spec.js +0 -73
- package/schematics/ng-update/update-18/update-data.js +4 -860
- package/schematics/version.d.ts +1 -1
- package/schematics/version.js +1 -1
- package/segment/segment-item.component.d.ts +1 -1
- package/segment/segment.component.d.ts +5 -1
- package/select/custom-select/custom-select.component.d.ts +10 -10
- package/select/native-select/native-select.component.d.ts +1 -1
- package/shared/base-form-check.component.d.ts +2 -2
- package/shared/directives/thy-autofocus.directive.d.ts +2 -2
- package/shared/directives/thy-scroll.directive.d.ts +1 -1
- package/shared/directives/thy-show.d.ts +1 -1
- package/shared/option/group/option-group.component.d.ts +1 -1
- package/shared/option/list-option/list-option.component.d.ts +1 -1
- package/shared/option/option.component.d.ts +1 -1
- package/shared/option/styles/select-dropdown.scss +1 -0
- package/shared/select/select-control/select-control.component.d.ts +6 -6
- package/skeleton/skeleton-circle.component.d.ts +1 -1
- package/skeleton/skeleton-rectangle.component.d.ts +1 -1
- package/skeleton/skeleton.component.d.ts +1 -1
- package/skeleton/stylized/bullet-list.component.d.ts +1 -1
- package/skeleton/stylized/list.component.d.ts +1 -1
- package/skeleton/stylized/paragraph.component.d.ts +1 -1
- package/slide/slide-body/slide-body-section.component.d.ts +1 -1
- package/slider/slider.component.d.ts +2 -2
- package/slider/slider.scss +12 -20
- package/space/space.component.d.ts +1 -1
- package/stepper/step-header.component.d.ts +2 -2
- package/stepper/stepper.component.d.ts +1 -1
- package/styles/modules/tables.scss +20 -0
- package/styles/variables.scss +2 -2
- package/switch/switch.component.d.ts +2 -2
- package/table/styles/skeleton.scss +5 -0
- package/table/table-column.component.d.ts +5 -5
- package/table/table-skeleton.component.d.ts +2 -2
- package/table/table.component.d.ts +13 -11
- package/tabs/tab.component.d.ts +1 -1
- package/tabs/tabs.component.d.ts +2 -2
- package/tag/tag.component.d.ts +1 -1
- package/time-picker/time-picker-panel.component.d.ts +2 -2
- package/time-picker/time-picker.component.d.ts +5 -5
- package/timeline/timeline.component.d.ts +1 -1
- package/tooltip/tooltip.directive.d.ts +10 -2
- package/tree/tree-node.component.d.ts +20 -5
- package/tree/tree.component.d.ts +17 -7
- package/tree/tree.service.d.ts +1 -1
- package/tree-select/tree-select.component.d.ts +7 -7
- package/upload/file-select.component.d.ts +7 -8
- package/vote/vote.component.d.ts +3 -3
- package/watermark/watermark.directive.d.ts +1 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { helpers } from 'ngx-tethys/util';
|
|
1
|
+
import { coerceBooleanProperty, helpers } from 'ngx-tethys/util';
|
|
2
2
|
import { useHostRenderer } from '@tethys/cdk/dom';
|
|
3
3
|
import { SelectionModel } from '@angular/cdk/collections';
|
|
4
4
|
import { CdkVirtualScrollViewport, CdkFixedSizeVirtualScroll, CdkVirtualForOf } from '@angular/cdk/scrolling';
|
|
5
|
-
import {
|
|
5
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, EventEmitter, forwardRef, HostBinding, Inject, Input, numberAttribute, Output, QueryList, TemplateRef, ViewChild, ViewChildren, ViewEncapsulation } from '@angular/core';
|
|
6
6
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
7
7
|
import { THY_TREE_ABSTRACT_TOKEN } from './tree-abstract';
|
|
8
8
|
import { ThyTreeNode } from './tree-node.class';
|
|
@@ -163,6 +163,10 @@ export class ThyTree {
|
|
|
163
163
|
* @type boolean
|
|
164
164
|
*/
|
|
165
165
|
this.thyTitleTruncate = true;
|
|
166
|
+
/**
|
|
167
|
+
* 是否展开所有树节点
|
|
168
|
+
*/
|
|
169
|
+
this.thyExpandAll = false;
|
|
166
170
|
/**
|
|
167
171
|
* 设置缩进距离,缩进距离 = thyIndent * node.level
|
|
168
172
|
* @type number
|
|
@@ -237,6 +241,12 @@ export class ThyTree {
|
|
|
237
241
|
this._selectedKeys = changes.thySelectedKeys.currentValue;
|
|
238
242
|
this._selectTreeNodes(changes.thySelectedKeys.currentValue);
|
|
239
243
|
}
|
|
244
|
+
if (changes.thyExpandedKeys && !changes.thyExpandedKeys.isFirstChange()) {
|
|
245
|
+
this._handleExpandedKeys();
|
|
246
|
+
}
|
|
247
|
+
if (changes.thyExpandAll && !changes.thyExpandAll.isFirstChange()) {
|
|
248
|
+
this._handleExpandedKeys();
|
|
249
|
+
}
|
|
240
250
|
}
|
|
241
251
|
eventTriggerChanged(event) {
|
|
242
252
|
switch (event.eventName) {
|
|
@@ -254,7 +264,13 @@ export class ThyTree {
|
|
|
254
264
|
this.thyTreeService.initializeTreeNodes(this.thyNodes);
|
|
255
265
|
this.flattenTreeNodes = this.thyTreeService.flattenTreeNodes;
|
|
256
266
|
this._selectTreeNodes(this._selectedKeys);
|
|
257
|
-
this.
|
|
267
|
+
this._handleExpandedKeys();
|
|
268
|
+
}
|
|
269
|
+
_handleExpandedKeys() {
|
|
270
|
+
if (this.thyExpandedKeys?.length) {
|
|
271
|
+
this._expandedKeys = helpers.concatArray(this.thyExpandedKeys.filter(key => !this._expandedKeys.includes(key)), this._expandedKeys);
|
|
272
|
+
}
|
|
273
|
+
this.thyTreeService.expandTreeNodes(this.thyExpandAll || this._expandedKeys);
|
|
258
274
|
}
|
|
259
275
|
_setTreeType() {
|
|
260
276
|
if (this.thyType && treeTypeClassMap[this.thyType]) {
|
|
@@ -506,7 +522,7 @@ export class ThyTree {
|
|
|
506
522
|
this.destroy$.complete();
|
|
507
523
|
}
|
|
508
524
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ThyTree, deps: [{ token: i1.ThyTreeService }, { token: i0.ChangeDetectorRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
509
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.0.0", type: ThyTree, isStandalone: true, selector: "thy-tree", inputs: { thyNodes: "thyNodes", thyShowExpand: "thyShowExpand", thyMultiple: ["thyMultiple", "thyMultiple",
|
|
525
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.0.0", type: ThyTree, isStandalone: true, selector: "thy-tree", inputs: { thyNodes: "thyNodes", thyShowExpand: "thyShowExpand", thyMultiple: ["thyMultiple", "thyMultiple", coerceBooleanProperty], thyDraggable: ["thyDraggable", "thyDraggable", coerceBooleanProperty], thyCheckable: ["thyCheckable", "thyCheckable", coerceBooleanProperty], thyClickBehavior: "thyClickBehavior", thyCheckStateResolve: "thyCheckStateResolve", thyAsync: ["thyAsync", "thyAsync", coerceBooleanProperty], thyType: "thyType", thyIcons: "thyIcons", thySize: "thySize", thyVirtualScroll: ["thyVirtualScroll", "thyVirtualScroll", coerceBooleanProperty], thyItemSize: ["thyItemSize", "thyItemSize", numberAttribute], thyTitleTruncate: ["thyTitleTruncate", "thyTitleTruncate", coerceBooleanProperty], thySelectedKeys: "thySelectedKeys", thyExpandedKeys: "thyExpandedKeys", thyExpandAll: ["thyExpandAll", "thyExpandAll", coerceBooleanProperty], thyIndent: ["thyIndent", "thyIndent", numberAttribute], thyBeforeDragStart: "thyBeforeDragStart", thyBeforeDragDrop: "thyBeforeDragDrop" }, outputs: { viewport: "viewport", thyOnClick: "thyOnClick", thyOnCheckboxChange: "thyOnCheckboxChange", thyOnExpandChange: "thyOnExpandChange", thyOnDragDrop: "thyOnDragDrop", thyDblClick: "thyDblClick" }, host: { properties: { "class.thy-multiple-selection-list": "this.thyMultiple", "class.thy-tree-draggable": "this.thyDraggable", "class.thy-virtual-scrolling-tree": "this.thyVirtualScroll", "class.thy-tree": "this.thyTreeClass", "class.thy-tree-dragging": "this.dragging" } }, providers: [
|
|
510
526
|
{
|
|
511
527
|
provide: NG_VALUE_ACCESSOR,
|
|
512
528
|
useExisting: forwardRef(() => ThyTree),
|
|
@@ -560,23 +576,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
|
|
|
560
576
|
args: [`class.thy-multiple-selection-list`]
|
|
561
577
|
}, {
|
|
562
578
|
type: Input,
|
|
563
|
-
args: [{ transform:
|
|
579
|
+
args: [{ transform: coerceBooleanProperty }]
|
|
564
580
|
}], thyDraggable: [{
|
|
565
581
|
type: HostBinding,
|
|
566
582
|
args: ['class.thy-tree-draggable']
|
|
567
583
|
}, {
|
|
568
584
|
type: Input,
|
|
569
|
-
args: [{ transform:
|
|
585
|
+
args: [{ transform: coerceBooleanProperty }]
|
|
570
586
|
}], thyCheckable: [{
|
|
571
587
|
type: Input,
|
|
572
|
-
args: [{ transform:
|
|
588
|
+
args: [{ transform: coerceBooleanProperty }]
|
|
573
589
|
}], thyClickBehavior: [{
|
|
574
590
|
type: Input
|
|
575
591
|
}], thyCheckStateResolve: [{
|
|
576
592
|
type: Input
|
|
577
593
|
}], thyAsync: [{
|
|
578
594
|
type: Input,
|
|
579
|
-
args: [{ transform:
|
|
595
|
+
args: [{ transform: coerceBooleanProperty }]
|
|
580
596
|
}], thyType: [{
|
|
581
597
|
type: Input
|
|
582
598
|
}], thyIcons: [{
|
|
@@ -588,15 +604,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
|
|
|
588
604
|
args: ['class.thy-virtual-scrolling-tree']
|
|
589
605
|
}, {
|
|
590
606
|
type: Input,
|
|
591
|
-
args: [{ transform:
|
|
607
|
+
args: [{ transform: coerceBooleanProperty }]
|
|
592
608
|
}], thyItemSize: [{
|
|
593
609
|
type: Input,
|
|
594
610
|
args: [{ transform: numberAttribute }]
|
|
595
611
|
}], thyTitleTruncate: [{
|
|
596
612
|
type: Input,
|
|
597
|
-
args: [{ transform:
|
|
613
|
+
args: [{ transform: coerceBooleanProperty }]
|
|
598
614
|
}], thySelectedKeys: [{
|
|
599
615
|
type: Input
|
|
616
|
+
}], thyExpandedKeys: [{
|
|
617
|
+
type: Input
|
|
618
|
+
}], thyExpandAll: [{
|
|
619
|
+
type: Input,
|
|
620
|
+
args: [{ transform: coerceBooleanProperty }]
|
|
600
621
|
}], thyIndent: [{
|
|
601
622
|
type: Input,
|
|
602
623
|
args: [{ transform: numberAttribute }]
|
|
@@ -630,4 +651,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
|
|
|
630
651
|
type: ViewChildren,
|
|
631
652
|
args: [CdkDrag]
|
|
632
653
|
}] } });
|
|
633
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHJlZS90cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy90cmVlL3RyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlHLE9BQU8sRUFFSCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBQ0wsZUFBZSxFQUlmLE1BQU0sRUFDTixTQUFTLEVBRVQsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUtILG1CQUFtQixFQUVuQixZQUFZLEVBR2YsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxPQUFPLEVBQXNELFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xILE9BQU8sRUFBYSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sYUFBYSxDQUFDOzs7QUFNdkQsTUFBTSxnQkFBZ0IsR0FBRztJQUNyQixPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztJQUM3QixRQUFRLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztDQUNsQyxDQUFDO0FBRUYsTUFBTSxlQUFlLEdBQUc7SUFDcEIsT0FBTyxFQUFFLEVBQUU7SUFDWCxFQUFFLEVBQUUsRUFBRTtDQUNULENBQUM7QUFFRjs7O0dBR0c7QUErQkgsTUFBTSxPQUFPLE9BQU87SUEyQ2hCLElBQVcsU0FBUztRQUNoQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO0lBQ3pDLENBQUM7SUE0QkQ7OztPQUdHO0lBQ0gsSUFFSSxZQUFZLENBQUMsS0FBYztRQUMzQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ1osT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzNCLENBQUM7SUFhRDs7T0FFRztJQUNILElBQWEsb0JBQW9CLENBQUMsT0FBcUQ7UUFDbkYsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEQsQ0FBQztJQUNMLENBQUM7SUFTRDs7OztPQUlHO0lBQ0gsSUFDSSxPQUFPLENBQUMsSUFBaUI7UUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxDQUFDO1FBQ3hFLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7SUFTRDs7OztPQUlHO0lBQ0gsSUFDSSxPQUFPLENBQUMsSUFBaUI7UUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLFlBQVksR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLFlBQVksR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDO1FBQ2hELENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7SUFXRDs7O09BR0c7SUFDSCxJQUNJLFdBQVcsQ0FBQyxRQUFnQjtRQUM1QixJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7SUF1REQ7O09BRUc7SUFDSCxJQUNJLFdBQVcsQ0FBQyxRQUEwQjtRQUN0QyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUM7UUFDakMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDN0IsQ0FBQztJQU1ELElBQUksd0JBQXdCLENBQUMsUUFBMEI7UUFDbkQsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxRQUFRLENBQUM7UUFDOUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLHdCQUF3QjtRQUN4QixPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQztJQUMxQyxDQUFDO0lBVUQsWUFBbUIsY0FBOEIsRUFBVSxHQUFzQixFQUE0QixRQUFrQjtRQUE1RyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUE0QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBMVF2SCxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBTW5CLGlCQUFZLEdBQUcsZUFBZSxFQUFFLENBQUM7UUFFakMsZUFBVSxHQUFlLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUVsQyxjQUFTLEdBQXlCLENBQUMsQ0FBTSxFQUFFLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFFakQsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFFakMsMENBQTBDO1FBQ2xDLGlCQUFZLEdBQUcsSUFBSSxHQUFHLEVBQXFDLENBQUM7UUFFNUQsa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBZSxDQUFDO1FBWTNDLHVCQUFrQixHQUN0QixPQUFPLENBQUMsRUFBRTtZQUNOLE9BQU8sQ0FDSCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLFlBQVksS0FBSyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FDL0gsQ0FBQztRQUNOLENBQUMsQ0FBQztRQVFDLHFCQUFnQixHQUFrQixFQUFFLENBQUM7UUFhNUM7OztXQUdHO1FBQ00sa0JBQWEsR0FBZ0QsSUFBSSxDQUFDO1FBRTNFOztXQUVHO1FBR0gsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFzQnBCOztXQUVHO1FBQ00scUJBQWdCLEdBQXFCLFNBQVMsQ0FBQztRQVd4RDs7V0FFRztRQUNxQyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpELGFBQVEsR0FBZ0IsU0FBUyxDQUFDO1FBbUIxQzs7O1dBR0c7UUFDTSxhQUFRLEdBQWlCLEVBQUUsQ0FBQztRQUU3QixhQUFRLEdBQWdCLFNBQVMsQ0FBQztRQW9CMUM7O1dBRUc7UUFHSCxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFFakIsaUJBQVksR0FBRyxFQUFFLENBQUM7UUFrQjFCOzs7V0FHRztRQUNxQyxxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFRaEU7OztXQUdHO1FBQ29DLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFZdEQ7O1dBRUc7UUFDTyxlQUFVLEdBQW1DLElBQUksWUFBWSxFQUFvQixDQUFDO1FBRTVGOztXQUVHO1FBQ08sd0JBQW1CLEdBQW1DLElBQUksWUFBWSxFQUFvQixDQUFDO1FBRXJHOztXQUVHO1FBQ08sc0JBQWlCLEdBQW1DLElBQUksWUFBWSxFQUFvQixDQUFDO1FBRW5HOztXQUVHO1FBQ08sa0JBQWEsR0FBdUMsSUFBSSxZQUFZLEVBQXdCLENBQUM7UUFFdkc7O1dBRUc7UUFDTyxnQkFBVyxHQUFtQyxJQUFJLFlBQVksRUFBb0IsQ0FBQztRQStCN0YsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFnRXBCLGVBQVUsR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUF6RDRHLENBQUM7SUFFbkksUUFBUTtRQUNKLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFNUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLEVBQUU7WUFDM0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1lBQ3pDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTzthQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3hELFNBQVMsQ0FBQyxDQUFDLEtBQXNDLEVBQUUsRUFBRTtZQUNsRCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzFCLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ2pCLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNaLHdEQUF3RDtvQkFDeEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzVELENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO1FBRVAsSUFBSSxDQUFDLGFBQWE7YUFDYixJQUFJO1FBQ0QsaUJBQWlCO1FBQ2pCLGlFQUFpRTtRQUNqRSxNQUFNLENBQUMsQ0FBQyxLQUFrQixFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUNsRSxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUMzQjthQUNBLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLElBQUksT0FBTyxDQUFDLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztZQUN4RCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztZQUN0RCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEIsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLFdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztZQUM5RCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUNuQyxDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsZUFBZSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO1lBQ3RFLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUM7WUFDMUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDaEUsQ0FBQztJQUNMLENBQUM7SUFJRCxtQkFBbUIsQ0FBQyxLQUF1QjtRQUN2QyxRQUFRLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN0QixLQUFLLFFBQVE7Z0JBQ1QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkMsTUFBTTtZQUVWLEtBQUssZ0JBQWdCO2dCQUNqQixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNyQyxNQUFNO1FBQ2QsQ0FBQztJQUNMLENBQUM7SUFFTyxhQUFhO1FBQ2pCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDO1FBQzdELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFTyxZQUFZO1FBQ2hCLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNqRCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUMvQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxQyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDTCxDQUFDO0lBRU8sWUFBWTtRQUNoQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFlBQVksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDM0QsQ0FBQztJQUNMLENBQUM7SUFFTyx1QkFBdUI7UUFDM0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLGNBQWMsQ0FBTSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVPLGdCQUFnQixDQUFDLElBQXlCO1FBQzlDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN2QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsRCxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNQLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM5RCxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQWlCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFpQjtRQUM1QixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFhLEVBQUUsSUFBUztRQUM5QixPQUFPLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFFRCxZQUFZLENBQUMsSUFBaUI7UUFDMUIsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ3pDLE9BQVEsSUFBSSxDQUFDLGFBQTBCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEQsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDOUIsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBd0I7UUFDL0IsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNSLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQU87UUFDcEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQU87UUFDckIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFnQztRQUMxQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvRCxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQy9CLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxDQUFDO0lBQ0wsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFrQjtRQUM1QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQStCO1FBQ3ZDLHdCQUF3QjtRQUN4QixJQUFJLG1CQUFtQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQWdCLENBQUM7UUFDMUgsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDNUIsT0FBTztRQUNYLENBQUM7UUFDRCxJQUFJLGFBQWEsR0FBRyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQztZQUN2RSxDQUFDLENBQUMsbUJBQW1CO1lBQ3JCLENBQUMsQ0FBRSxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQWlCLENBQUM7UUFDckUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzVCLE9BQU87UUFDWCxDQUFDO1FBQ0QsdUJBQXVCO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLEdBQUc7WUFDbEIsR0FBRyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQ25ELFFBQVEsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQztTQUN6RCxDQUFDO1FBQ0YseUNBQXlDO1FBQ3pDLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDMUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDM0QsSUFDSSxJQUFJLENBQUMsa0JBQWtCLENBQUM7Z0JBQ3BCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUk7Z0JBQ3pCLE1BQU0sRUFBRSxhQUFhLENBQUMsSUFBSTtnQkFDMUIsWUFBWSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUTthQUM3QyxDQUFDLEVBQ0osQ0FBQztnQkFDQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDcEQsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUMzQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUNoQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsMkJBQTJCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEQsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBOEI7UUFDdEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsaUJBQWlCO1FBQ2pCLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEUsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQTZEO1FBQ3ZFLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsT0FBTztRQUNYLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsS0FBSyxtQkFBbUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN6RyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUM1QixPQUFPO1FBQ1gsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUMzQyxNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFDL0MsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdGLE1BQU0sVUFBVSxHQUFHLGFBQWEsRUFBRSxJQUFJLENBQUM7UUFDdkMsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDO1FBRS9DLE1BQU0scUJBQXFCLEdBQWlDO1lBQ3hELFlBQVksRUFBRSxVQUFVO1lBQ3hCLHNCQUFzQixFQUFFLGdCQUFnQixFQUFFLFFBQVE7WUFDbEQsSUFBSSxFQUFFLFVBQVU7WUFDaEIsY0FBYyxFQUFFLGdCQUFnQixFQUFFLFFBQVE7WUFDMUMsUUFBUSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUTtTQUN6QyxDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDO1lBQzNFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzVCLE9BQU87UUFDWCxDQUFDO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFL0MsUUFBUSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25DLEtBQUssUUFBUTtnQkFDVCxNQUFNLGlCQUFpQixHQUFHLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzdGLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO2dCQUNqRixNQUFNO1lBQ1YsS0FBSyxPQUFPO2dCQUNSLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUNoRixNQUFNO1lBQ1YsS0FBSyxJQUFJO2dCQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDeEQsTUFBTTtRQUNkLENBQUM7UUFFRCxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFFM0MsSUFBSSxLQUFLLEdBQWdCLElBQUksQ0FBQztRQUM5QixJQUFJLEtBQUssR0FBZ0IsSUFBSSxDQUFDO1FBQzlCLElBQUkscUJBQXFCLENBQUMsUUFBUSxLQUFLLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hFLE1BQU0sb0JBQW9CLEdBQUcsZ0JBQWdCLEVBQUUsUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDMUUsS0FBSyxHQUFHLG9CQUFvQixDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMzRSxLQUFLLEdBQUcsZ0JBQWdCLENBQUM7UUFDN0IsQ0FBQzthQUFNLElBQUkscUJBQXFCLENBQUMsUUFBUSxLQUFLLG1CQUFtQixDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3RFLEtBQUssR0FBRyxVQUFVLENBQUM7WUFDbkIsS0FBSyxHQUFHLGdCQUFnQixDQUFDO1FBQzdCLENBQUM7YUFBTSxDQUFDO1lBQ0osS0FBSyxHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3JHLEtBQUssR0FBRyxVQUFVLENBQUM7UUFDdkIsQ0FBQztRQUVELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO1lBQ3BCLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1lBQ3pELFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFNBQVMsRUFBRSxLQUFLO1NBQ25CLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxNQUFtQixFQUFFLEtBQWtCO1FBQzdELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ2xELE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDakQsc0VBQXNFO1FBQ3RFLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLEdBQUcsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzlELE9BQU8sbUJBQW1CLENBQUMsTUFBTSxDQUFDO1FBQ3RDLENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztZQUN6RSxPQUFPLG1CQUFtQixDQUFDLEtBQUssQ0FBQztRQUNyQyxDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sbUJBQW1CLENBQUMsRUFBRSxDQUFDO1FBQ2xDLENBQUM7SUFDTCxDQUFDO0lBRU8sMkJBQTJCLENBQUMsYUFBMEI7UUFDMUQsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7UUFDdEMsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ3ZDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGlCQUFpQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDakYsQ0FBQztJQUNMLENBQUM7SUFFTyw4QkFBOEI7UUFDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztRQUM3SCxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDO1FBQzNILElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7SUFDekgsQ0FBQztJQUVPLG9CQUFvQjtRQUN4QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsMEJBQTBCO0lBRTFCLGNBQWMsQ0FBQyxJQUFpQjtRQUM1QixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDL0MsQ0FBQztJQUNMLENBQUM7SUFFRCxZQUFZO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxXQUFXLENBQUMsR0FBVztRQUNuQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxlQUFlO1FBQ1gsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzFFLENBQUM7SUFFRCxnQkFBZ0I7UUFDWixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDckUsQ0FBQztJQUVELGdCQUFnQjtRQUNaLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFFRCxlQUFlO1FBQ1gsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFRCxXQUFXLENBQUMsSUFBcUIsRUFBRSxNQUFvQixFQUFFLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pHLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQWlCO1FBQzVCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVELGNBQWM7UUFDVixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELGlCQUFpQjtRQUNiLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNsQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsWUFBWTtJQUVaLFdBQVc7UUFDUCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQzs4R0E1bkJRLE9BQU8saUZBK1EyRSxRQUFRO2tHQS9RMUYsT0FBTyx3SkFzRUksZ0JBQWdCLGtEQVFoQixnQkFBZ0Isa0RBYWhCLGdCQUFnQiwwSEFtQmhCLGdCQUFnQiw0SEFtRGhCLGdCQUFnQiwrQ0FTaEIsZUFBZSw4REFnQmYsZ0JBQWdCLDZFQVloQixlQUFlLG1rQkEvTnhCO1lBQ1A7Z0JBQ0ksT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUM7Z0JBQ3RDLEtBQUssRUFBRSxJQUFJO2FBQ2Q7WUFDRDtnQkFDSSxPQUFPLEVBQUUsdUJBQXVCO2dCQUNoQyxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQzthQUN6QztZQUNELGNBQWM7U0FDakIsd1lBMlJhLE9BQU8scUVDL1d6QixpcUZBdUVBLDRDRGdCUSxJQUFJLDZGQUNKLE9BQU8sd2JBQ1AsV0FBVywrZEFDWCx3QkFBd0IsaUpBQ3hCLHlCQUF5QixzSUFDekIsZUFBZSw2TEFDZixvQkFBb0IsMFVBQ3BCLEtBQUssOEdBQ0wsd0JBQXdCOzsyRkFHbkIsT0FBTztrQkE5Qm5CLFNBQVM7K0JBQ0ksVUFBVSxpQkFFTCxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQzs0QkFDdEMsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7d0JBQ0Q7NEJBQ0ksT0FBTyxFQUFFLHVCQUF1Qjs0QkFDaEMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDO3lCQUN6Qzt3QkFDRCxjQUFjO3FCQUNqQixjQUNXLElBQUksV0FDUDt3QkFDTCxJQUFJO3dCQUNKLE9BQU87d0JBQ1AsV0FBVzt3QkFDWCx3QkFBd0I7d0JBQ3hCLHlCQUF5Qjt3QkFDekIsZUFBZTt3QkFDZixvQkFBb0I7d0JBQ3BCLEtBQUs7d0JBQ0wsd0JBQXdCO3FCQUMzQjs7MEJBaVJtRixNQUFNOzJCQUFDLFFBQVE7eUNBM04vQyxRQUFRO3NCQUEzRCxNQUFNOztzQkFBSSxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBTXpDLFFBQVE7c0JBQWhCLEtBQUs7Z0JBTUcsYUFBYTtzQkFBckIsS0FBSztnQkFPTixXQUFXO3NCQUZWLFdBQVc7dUJBQUMsbUNBQW1DOztzQkFDL0MsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFTbEMsWUFBWTtzQkFGZixXQUFXO3VCQUFDLDBCQUEwQjs7c0JBQ3RDLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBYUUsWUFBWTtzQkFBbkQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFLN0IsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUtPLG9CQUFvQjtzQkFBaEMsS0FBSztnQkFTa0MsUUFBUTtzQkFBL0MsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFVbEMsT0FBTztzQkFEVixLQUFLO2dCQWdCRyxRQUFRO3NCQUFoQixLQUFLO2dCQVNGLE9BQU87c0JBRFYsS0FBSztnQkFtQk4sZ0JBQWdCO3NCQUZmLFdBQVc7dUJBQUMsa0NBQWtDOztzQkFDOUMsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFVbEMsV0FBVztzQkFEZCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtnQkFnQkcsZ0JBQWdCO3NCQUF2RCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQU03QixlQUFlO3NCQUF2QixLQUFLO2dCQU1pQyxTQUFTO3NCQUEvQyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtnQkFLNUIsa0JBQWtCO3NCQUExQixLQUFLO2dCQUtHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFLSSxVQUFVO3NCQUFuQixNQUFNO2dCQUtHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFLRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBS0csYUFBYTtzQkFBdEIsTUFBTTtnQkFLRyxXQUFXO3NCQUFwQixNQUFNO2dCQU1ILFdBQVc7c0JBRGQsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBY08scUJBQXFCO3NCQUE3RSxZQUFZO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFZdkQsWUFBWTtzQkFEWCxXQUFXO3VCQUFDLGdCQUFnQjtnQkFJN0IsUUFBUTtzQkFEUCxXQUFXO3VCQUFDLHlCQUF5QjtnQkFHZixRQUFRO3NCQUE5QixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBoZWxwZXJzIH0gZnJvbSAnbmd4LXRldGh5cy91dGlsJztcbmltcG9ydCB7IHVzZUhvc3RSZW5kZXJlciB9IGZyb20gJ0B0ZXRoeXMvY2RrL2RvbSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsIENka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGwsIENka1ZpcnR1YWxGb3JPZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgbnVtYmVyQXR0cmlidXRlLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVEhZX1RSRUVfQUJTVFJBQ1RfVE9LRU4gfSBmcm9tICcuL3RyZWUtYWJzdHJhY3QnO1xuaW1wb3J0IHsgVGh5VHJlZU5vZGUgfSBmcm9tICcuL3RyZWUtbm9kZS5jbGFzcyc7XG5pbXBvcnQge1xuICAgIFRoeVRyZWVCZWZvcmVEcmFnRHJvcENvbnRleHQsXG4gICAgVGh5VHJlZUJlZm9yZURyYWdTdGFydENvbnRleHQsXG4gICAgVGh5Q2xpY2tCZWhhdmlvcixcbiAgICBUaHlUcmVlRHJhZ0Ryb3BFdmVudCxcbiAgICBUaHlUcmVlRHJvcFBvc2l0aW9uLFxuICAgIFRoeVRyZWVFbWl0RXZlbnQsXG4gICAgVGh5VHJlZUljb25zLFxuICAgIFRoeVRyZWVOb2RlQ2hlY2tTdGF0ZSxcbiAgICBUaHlUcmVlTm9kZURhdGFcbn0gZnJvbSAnLi90cmVlLmNsYXNzJztcbmltcG9ydCB7IFRoeVRyZWVTZXJ2aWNlIH0gZnJvbSAnLi90cmVlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGh5VHJlZU5vZGVDb21wb25lbnQgfSBmcm9tICcuL3RyZWUtbm9kZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmdJZiwgTmdGb3IsIERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENka0RyYWcsIENka0RyYWdEcm9wLCBDZGtEcmFnRW5kLCBDZGtEcmFnTW92ZSwgQ2RrRHJhZ1N0YXJ0LCBDZGtEcm9wTGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgYXVkaXRUaW1lLCBmaWx0ZXIsIHN0YXJ0V2l0aCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVGh5VHJlZU5vZGVEcmFnZ2FibGVQaXBlIH0gZnJvbSAnLi90cmVlLnBpcGUnO1xuXG50eXBlIFRoeVRyZWVTaXplID0gJ3NtJyB8ICdkZWZhdWx0JztcblxudHlwZSBUaHlUcmVlVHlwZSA9ICdkZWZhdWx0JyB8ICdlc3BlY2lhbCc7XG5cbmNvbnN0IHRyZWVUeXBlQ2xhc3NNYXAgPSB7XG4gICAgZGVmYXVsdDogWyd0aHktdHJlZS1kZWZhdWx0J10sXG4gICAgZXNwZWNpYWw6IFsndGh5LXRyZWUtZXNwZWNpYWwnXVxufTtcblxuY29uc3QgdHJlZUl0ZW1TaXplTWFwID0ge1xuICAgIGRlZmF1bHQ6IDQ0LFxuICAgIHNtOiA0MlxufTtcblxuLyoqXG4gKiDmoJHlvaLmjqfku7bnu4Tku7ZcbiAqIEBuYW1lIHRoeS10cmVlXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndGh5LXRyZWUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRoeVRyZWUpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogVEhZX1RSRUVfQUJTVFJBQ1RfVE9LRU4sXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUaHlUcmVlKVxuICAgICAgICB9LFxuICAgICAgICBUaHlUcmVlU2VydmljZVxuICAgIF0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nSWYsXG4gICAgICAgIENka0RyYWcsXG4gICAgICAgIENka0Ryb3BMaXN0LFxuICAgICAgICBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsXG4gICAgICAgIENka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGwsXG4gICAgICAgIENka1ZpcnR1YWxGb3JPZixcbiAgICAgICAgVGh5VHJlZU5vZGVDb21wb25lbnQsXG4gICAgICAgIE5nRm9yLFxuICAgICAgICBUaHlUcmVlTm9kZURyYWdnYWJsZVBpcGVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFRoeVRyZWUgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSBfdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBwcml2YXRlIF9lbXB0eUNoaWxkcmVuVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBwcml2YXRlIF9kcmFnZ2FibGUgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX2V4cGFuZGVkS2V5czogKHN0cmluZyB8IG51bWJlcilbXTtcblxuICAgIHByaXZhdGUgX3NlbGVjdGVkS2V5czogKHN0cmluZyB8IG51bWJlcilbXTtcblxuICAgIHByaXZhdGUgaG9zdFJlbmRlcmVyID0gdXNlSG9zdFJlbmRlcmVyKCk7XG5cbiAgICBwcml2YXRlIF9vblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICAgIHByaXZhdGUgX29uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9IChfOiBhbnkpID0+IHt9O1xuXG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICAvLyDnvJPlrZggRWxlbWVudCDlkowgRHJhZ1JlZiDnmoTlhbPns7vvvIzmlrnkvr/lnKggSXRlbSDmi5bliqjml7bmn6Xmib5cbiAgICBwcml2YXRlIG5vZGVEcmFnc01hcCA9IG5ldyBNYXA8SFRNTEVsZW1lbnQsIENka0RyYWc8VGh5VHJlZU5vZGU+PigpO1xuXG4gICAgcHJpdmF0ZSBub2RlRHJhZ01vdmVkID0gbmV3IFN1YmplY3Q8Q2RrRHJhZ01vdmU+KCk7XG5cbiAgICAvLyBwcml2YXRlIHN0YXJ0RHJhZ05vZGVFeHBhbmRlZDogYm9vbGVhbjtcblxuICAgIHByaXZhdGUgc3RhcnREcmFnTm9kZUNsb25lOiBUaHlUcmVlTm9kZTtcblxuICAgIC8vIE5vZGUg5ouW5Yqo57uP6L+H55uu5qCH5pe25Li05pe26K6w5b2V55uu5qCHaWTku6Xlj4rnm7jlr7nlupTnm67moIfnmoTkvY3nva5cbiAgICBwcml2YXRlIG5vZGVEcm9wVGFyZ2V0OiB7XG4gICAgICAgIHBvc2l0aW9uPzogVGh5VHJlZURyb3BQb3NpdGlvbjtcbiAgICAgICAga2V5PzogbnVtYmVyIHwgc3RyaW5nO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGRyb3BFbnRlclByZWRpY2F0ZT86IChjb250ZXh0OiB7IHNvdXJjZTogVGh5VHJlZU5vZGU7IHRhcmdldDogVGh5VHJlZU5vZGU7IGRyb3BQb3NpdGlvbjogVGh5VHJlZURyb3BQb3NpdGlvbiB9KSA9PiBib29sZWFuID1cbiAgICAgICAgY29udGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHRoaXMuaXNTaG93RXhwYW5kKGNvbnRleHQudGFyZ2V0KSB8fCAoIXRoaXMuaXNTaG93RXhwYW5kKGNvbnRleHQudGFyZ2V0KSAmJiBjb250ZXh0LmRyb3BQb3NpdGlvbiAhPT0gVGh5VHJlZURyb3BQb3NpdGlvbi5pbilcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG5cbiAgICBwdWJsaWMgX3NlbGVjdGlvbk1vZGVsOiBTZWxlY3Rpb25Nb2RlbDxUaHlUcmVlTm9kZT47XG5cbiAgICBwdWJsaWMgZ2V0IHRyZWVOb2RlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGh5VHJlZVNlcnZpY2UudHJlZU5vZGVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBmbGF0dGVuVHJlZU5vZGVzOiBUaHlUcmVlTm9kZVtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiDomZrmi5/ljJbmu5rliqjnmoTop4blj6NcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgQFZpZXdDaGlsZCgndmlld3BvcnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgdmlld3BvcnQ6IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDtcblxuICAgIC8qKlxuICAgICAqIFRyZWVOb2RlIOWxleeOsOaJgOmcgOeahOaVsOaNrlxuICAgICAqIEB0eXBlIFRoeVRyZWVOb2RlRGF0YVtdXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5Tm9kZXM6IFRoeVRyZWVOb2RlRGF0YVtdO1xuXG4gICAgLyoqXG4gICAgICog6K6+572uIFRyZWVOb2RlIOaYr+WQpuaUr+aMgeWxleW8gFxuICAgICAqIEB0eXBlIGJvb2xlYW4gfCBGdW5jdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeVNob3dFeHBhbmQ6IGJvb2xlYW4gfCAoKF86IFRoeVRyZWVOb2RlRGF0YSkgPT4gYm9vbGVhbikgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICog6K6+572u5piv5ZCm5pSv5oyB5aSa6YCJ6IqC54K5XG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKGBjbGFzcy50aHktbXVsdGlwbGUtc2VsZWN0aW9uLWxpc3RgKVxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHRoeU11bHRpcGxlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gVHJlZU5vZGUg5piv5ZCm5pSv5oyB5ouW5ou95o6S5bqPXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS10cmVlLWRyYWdnYWJsZScpXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgc2V0IHRoeURyYWdnYWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9kcmFnZ2FibGUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgdGh5RHJhZ2dhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZHJhZ2dhYmxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9riBUcmVlTm9kZSDmmK/lkKbmlK/mjIEgQ2hlY2tib3gg6YCJ5oupXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgdGh5Q2hlY2thYmxlOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog54K55Ye76IqC54K555qE6KGM5Li677yMYGRlZmF1bHRgIOS4uumAieS4reW9k+WJjeiKgueCue+8jGBzZWxlY3RDaGVja2JveGAg5Li66YCJ5Lit6IqC54K555qEIENoZWNrYm9477yMIGB0aHlDaGVja2FibGVgIOS4uiB0cnVlIOaXtueUn+aViOOAglxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeUNsaWNrQmVoYXZpb3I6IFRoeUNsaWNrQmVoYXZpb3IgPSAnZGVmYXVsdCc7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gY2hlY2sg54q25oCB55qE6K6h566X562W55WlXG4gICAgICovXG4gICAgQElucHV0KCkgc2V0IHRoeUNoZWNrU3RhdGVSZXNvbHZlKHJlc29sdmU6IChub2RlOiBUaHlUcmVlTm9kZSkgPT4gVGh5VHJlZU5vZGVDaGVja1N0YXRlKSB7XG4gICAgICAgIGlmIChyZXNvbHZlKSB7XG4gICAgICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLnNldENoZWNrU3RhdGVSZXNvbHZlKHJlc29sdmUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572uIFRyZWVOb2RlIOaYr+WQpuaUr+aMgeW8guatpeWKoOi9vVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSB0aHlBc3luYyA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfdGh5VHlwZTogVGh5VHJlZVR5cGUgPSAnZGVmYXVsdCc7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7kuI3lkIzlsZXnpLrnsbvlnovnmoQgVHJlZe+8jGBkZWZhdWx0YCDkuLrlsI/nrq3lpLTlsZXnpLrvvIwgYGVzcGVjaWFsYCDkuLog5Yqg5YeP5Y+35Zu+5qCH5bGV56S6XG4gICAgICogQHR5cGUgVGh5VHJlZVR5cGVcbiAgICAgKiBAZGVmYXVsdCBkZWZhdWx0XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5VHlwZSh0eXBlOiBUaHlUcmVlVHlwZSkge1xuICAgICAgICB0aGlzLl90aHlUeXBlID0gdHlwZTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdlc3BlY2lhbCcpIHtcbiAgICAgICAgICAgIHRoaXMudGh5SWNvbnMgPSB7IGV4cGFuZDogJ21pbnVzLXNxdWFyZScsIGNvbGxhcHNlOiAncGx1cy1zcXVhcmUnIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgdGh5VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RoeVR5cGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5LiN5ZCMIFRyZWUg5bGV5byA5oqY5Y+g55qE5Zu+5qCH77yMYGV4cGFuZGAg5Li65bGV5byA54q25oCB55qE5Zu+5qCH77yMYGNvbGxhcHNlYCDkuLrmipjlj6DnirbmgIHnmoTlm77moIdcbiAgICAgKiBAdHlwZSB7IGV4cGFuZDogc3RyaW5nLCBjb2xsYXBzZTogc3RyaW5nIH1cbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlJY29uczogVGh5VHJlZUljb25zID0ge307XG5cbiAgICBwcml2YXRlIF90aHlTaXplOiBUaHlUcmVlU2l6ZSA9ICdkZWZhdWx0JztcbiAgICAvKipcbiAgICAgKiDmlK/mjIEgYHNtYCB8IGBkZWZhdWx0YCDkuKTnp43lpKflsI/vvIzpu5jorqTlgLzkuLogYGRlZmF1bHRgXG4gICAgICogQHR5cGUgVGh5VHJlZVNpemVcbiAgICAgKiBAZGVmYXVsdCBkZWZhdWx0XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5U2l6ZShzaXplOiBUaHlUcmVlU2l6ZSkge1xuICAgICAgICB0aGlzLl90aHlTaXplID0gc2l6ZTtcbiAgICAgICAgaWYgKHRoaXMuX3RoeVNpemUpIHtcbiAgICAgICAgICAgIHRoaXMuX3RoeUl0ZW1TaXplID0gdHJlZUl0ZW1TaXplTWFwW3RoaXMuX3RoeVNpemVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fdGh5SXRlbVNpemUgPSB0cmVlSXRlbVNpemVNYXAuZGVmYXVsdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCB0aHlTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGh5U2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mmK/lkKblvIDlkK/omZrmi5/mu5rliqhcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS12aXJ0dWFsLXNjcm9sbGluZy10cmVlJylcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICB0aHlWaXJ0dWFsU2Nyb2xsID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF90aHlJdGVtU2l6ZSA9IDQ0O1xuXG4gICAgLyoqXG4gICAgICog5byA5ZCv6Jma5ouf5rua5Yqo5pe277yM5Y2V6KGM6IqC54K555qE6auY5bqm77yM5b2TYHRoeVNpemVg5Li6YGRlZmF1bHRg5pe277yM6K+l5Y+C5pWw5omN55Sf5pWIXG4gICAgICogQGRlZmF1bHQgNDRcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KVxuICAgIHNldCB0aHlJdGVtU2l6ZShpdGVtU2l6ZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLnRoeVNpemUgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZXR0aW5nIHRoeVNpemUgYW5kIHRoeUl0ZW1TaXplIGF0IHRoZSBzYW1lIHRpbWUgaXMgbm90IGFsbG93ZWQnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90aHlJdGVtU2l6ZSA9IGl0ZW1TaXplO1xuICAgIH1cblxuICAgIGdldCB0aHlJdGVtU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RoeUl0ZW1TaXplO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruiKgueCueWQjeensOaYr+WQpuaUr+aMgei2heWHuuaIquWPllxuICAgICAqIEB0eXBlIGJvb2xlYW5cbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgdGh5VGl0bGVUcnVuY2F0ZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiDlt7LpgInkuK3nmoQgbm9kZSDoioLngrnpm4blkIhcbiAgICAgKiBAZGVmYXVsdCBbXVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeVNlbGVjdGVkS2V5czogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7nvKnov5vot53nprvvvIznvKnov5vot53nprsgPSB0aHlJbmRlbnQgKiBub2RlLmxldmVsXG4gICAgICogQHR5cGUgbnVtYmVyXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgdGh5SW5kZW50ID0gMjU7XG5cbiAgICAvKipcbiAgICAgKiDmi5bmi73kuYvliY3nmoTlm57osIPvvIzlh73mlbDov5Tlm54gZmFsc2Ug5YiZ6Zi75q2i5ouW5ou9XG4gICAgICovXG4gICAgQElucHV0KCkgdGh5QmVmb3JlRHJhZ1N0YXJ0OiAoY29udGV4dDogVGh5VHJlZUJlZm9yZURyYWdTdGFydENvbnRleHQpID0+IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiDmi5bmlL7liLDlhYPntKDml7blm57osIPvvIzlh73mlbDov5Tlm54gZmFsc2Ug5YiZ6Zi75q2i5ouW5pS+5Yiw5b2T5YmN5YWD57SgXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5QmVmb3JlRHJhZ0Ryb3A6IChjb250ZXh0OiBUaHlUcmVlQmVmb3JlRHJhZ0Ryb3BDb250ZXh0KSA9PiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog6K6+572u5a2QIFRyZWVOb2RlIOeCueWHu+S6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPbkNsaWNrOiBFdmVudEVtaXR0ZXI8VGh5VHJlZUVtaXRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVRyZWVFbWl0RXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gY2hlY2sg6YCJ5oup5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uQ2hlY2tib3hDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUaHlUcmVlRW1pdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5VHJlZUVtaXRFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOiuvue9rueCueWHu+WxleW8gOinpuWPkeS6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPbkV4cGFuZENoYW5nZTogRXZlbnRFbWl0dGVyPFRoeVRyZWVFbWl0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUcmVlRW1pdEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog6K6+572uIFRyZWVOb2RlIOaLluaLveS6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPbkRyYWdEcm9wOiBFdmVudEVtaXR0ZXI8VGh5VHJlZURyYWdEcm9wRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUcmVlRHJhZ0Ryb3BFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOWPjOWHuyBUcmVlTm9kZSDkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5RGJsQ2xpY2s6IEV2ZW50RW1pdHRlcjxUaHlUcmVlRW1pdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5VHJlZUVtaXRFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOiuvue9riBUcmVlTm9kZSDnmoTmuLLmn5PmqKHmnb9cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKCd0cmVlTm9kZVRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBzZXQgdGVtcGxhdGVSZWYodGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICAgICAgaWYgKHRlbXBsYXRlKSB7XG4gICAgICAgICAgICB0aGlzLl90ZW1wbGF0ZVJlZiA9IHRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHRlbXBsYXRlUmVmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGVSZWY7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5a2Q55qE56m65pWw5o2u5riy5p+T5qih5p2/XG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgnZW1wdHlDaGlsZHJlblRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgZW1wdHlDaGlsZHJlblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIHNldCBlbXB0eUNoaWxkcmVuVGVtcGxhdGVSZWYodGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICAgICAgaWYgKHRlbXBsYXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9lbXB0eUNoaWxkcmVuVGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBlbXB0eUNoaWxkcmVuVGVtcGxhdGVSZWYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbXB0eUNoaWxkcmVuVGVtcGxhdGVSZWY7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aHktdHJlZScpXG4gICAgdGh5VHJlZUNsYXNzID0gdHJ1ZTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGh5LXRyZWUtZHJhZ2dpbmcnKVxuICAgIGRyYWdnaW5nOiBib29sZWFuO1xuXG4gICAgQFZpZXdDaGlsZHJlbihDZGtEcmFnKSBjZGtEcmFnczogUXVlcnlMaXN0PENka0RyYWc8VGh5VHJlZU5vZGU+PjtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB0aHlUcmVlU2VydmljZTogVGh5VHJlZVNlcnZpY2UsIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnQpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5pdFRoeU5vZGVzKCk7XG4gICAgICAgIHRoaXMuX3NldFRyZWVUeXBlKCk7XG4gICAgICAgIHRoaXMuX3NldFRyZWVTaXplKCk7XG4gICAgICAgIHRoaXMuX2luc3RhbmNlU2VsZWN0aW9uTW9kZWwoKTtcbiAgICAgICAgdGhpcy5fc2VsZWN0VHJlZU5vZGVzKHRoaXMudGh5U2VsZWN0ZWRLZXlzKTtcblxuICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLmZsYXR0ZW5Ob2RlcyQuc3Vic2NyaWJlKGZsYXR0ZW5UcmVlTm9kZXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5mbGF0dGVuVHJlZU5vZGVzID0gZmxhdHRlblRyZWVOb2RlcztcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2RrRHJhZ3MuY2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoc3RhcnRXaXRoKHRoaXMuY2RrRHJhZ3MpLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkcmFnczogUXVlcnlMaXN0PENka0RyYWc8VGh5VHJlZU5vZGU+PikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZURyYWdzTWFwLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgZHJhZ3MuZm9yRWFjaChkcmFnID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRyYWcuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2RrRHJhZyDlj5jljJbml7bvvIznvJPlrZggRWxlbWVudCDkuI4gRHJhZ1JlZiDnmoTlhbPns7vvvIzmlrnkvr8gRHJhZyBNb3ZlIOaXtuafpeaJvlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub2RlRHJhZ3NNYXAuc2V0KGRyYWcuZWxlbWVudC5uYXRpdmVFbGVtZW50LCBkcmFnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5ub2RlRHJhZ01vdmVkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAvLyBhdWRpdFRpbWUoMzApLFxuICAgICAgICAgICAgICAgIC8vICBhdWRpdFRpbWUg5Y+v6IO95Lya5a+86Ie05ouW5Yqo57uT5p2f5ZCO5LuN54S25omn6KGMIG1vdmVkIO+8jOaJgOS7pemAmui/h+WIpOaWrSBkcmFnZ2luZyDnirbmgIHmnaXov4fmu6Tml6DmlYggbW92ZWRcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKGV2ZW50OiBDZGtEcmFnTW92ZSkgPT4gZXZlbnQuc291cmNlLl9kcmFnUmVmLmlzRHJhZ2dpbmcoKSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRHJhZ01vdmVkKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMudGh5Tm9kZXMgJiYgIWNoYW5nZXMudGh5Tm9kZXMuaXNGaXJzdENoYW5nZSgpKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0VGh5Tm9kZXMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy50aHlUeXBlICYmICFjaGFuZ2VzLnRoeVR5cGUuaXNGaXJzdENoYW5nZSgpKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRUcmVlVHlwZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLnRoeU11bHRpcGxlICYmICFjaGFuZ2VzLnRoeU11bHRpcGxlLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5faW5zdGFuY2VTZWxlY3Rpb25Nb2RlbCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMudGh5U2VsZWN0ZWRLZXlzICYmICFjaGFuZ2VzLnRoeVNlbGVjdGVkS2V5cy5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkS2V5cyA9IGNoYW5nZXMudGh5U2VsZWN0ZWRLZXlzLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdFRyZWVOb2RlcyhjaGFuZ2VzLnRoeVNlbGVjdGVkS2V5cy5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyVmlldyA9ICgpID0+IHt9O1xuXG4gICAgZXZlbnRUcmlnZ2VyQ2hhbmdlZChldmVudDogVGh5VHJlZUVtaXRFdmVudCk6IHZvaWQge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LmV2ZW50TmFtZSkge1xuICAgICAgICAgICAgY2FzZSAnZXhwYW5kJzpcbiAgICAgICAgICAgICAgICB0aGlzLnRoeU9uRXhwYW5kQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdjaGVja2JveENoYW5nZSc6XG4gICAgICAgICAgICAgICAgdGhpcy50aHlPbkNoZWNrYm94Q2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdFRoeU5vZGVzKCkge1xuICAgICAgICB0aGlzLl9leHBhbmRlZEtleXMgPSB0aGlzLmdldEV4cGFuZGVkTm9kZXMoKS5tYXAobm9kZSA9PiBub2RlLmtleSk7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkS2V5cyA9IHRoaXMuZ2V0U2VsZWN0ZWROb2RlcygpLm1hcChub2RlID0+IG5vZGUua2V5KTtcbiAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5pbml0aWFsaXplVHJlZU5vZGVzKHRoaXMudGh5Tm9kZXMpO1xuICAgICAgICB0aGlzLmZsYXR0ZW5UcmVlTm9kZXMgPSB0aGlzLnRoeVRyZWVTZXJ2aWNlLmZsYXR0ZW5UcmVlTm9kZXM7XG4gICAgICAgIHRoaXMuX3NlbGVjdFRyZWVOb2Rlcyh0aGlzLl9zZWxlY3RlZEtleXMpO1xuICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLmV4cGFuZFRyZWVOb2Rlcyh0aGlzLl9leHBhbmRlZEtleXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldFRyZWVUeXBlKCkge1xuICAgICAgICBpZiAodGhpcy50aHlUeXBlICYmIHRyZWVUeXBlQ2xhc3NNYXBbdGhpcy50aHlUeXBlXSkge1xuICAgICAgICAgICAgdHJlZVR5cGVDbGFzc01hcFt0aGlzLnRoeVR5cGVdLmZvckVhY2goY2xhc3NOYW1lID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhvc3RSZW5kZXJlci5hZGRDbGFzcyhjbGFzc05hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRUcmVlU2l6ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMudGh5U2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5ob3N0UmVuZGVyZXIuYWRkQ2xhc3MoYHRoeS10cmVlLSR7dGhpcy50aHlTaXplfWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5zdGFuY2VTZWxlY3Rpb25Nb2RlbCgpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwgPSBuZXcgU2VsZWN0aW9uTW9kZWw8YW55Pih0aGlzLnRoeU11bHRpcGxlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZWxlY3RUcmVlTm9kZXMoa2V5czogKHN0cmluZyB8IG51bWJlcilbXSkge1xuICAgICAgICAoa2V5cyB8fCBbXSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMudGh5VHJlZVNlcnZpY2UuZ2V0VHJlZU5vZGUoa2V5KTtcbiAgICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RUcmVlTm9kZSh0aGlzLnRoeVRyZWVTZXJ2aWNlLmdldFRyZWVOb2RlKGtleSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpc1NlbGVjdGVkKG5vZGU6IFRoeVRyZWVOb2RlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKG5vZGUpO1xuICAgIH1cblxuICAgIHRvZ2dsZVRyZWVOb2RlKG5vZGU6IFRoeVRyZWVOb2RlKSB7XG4gICAgICAgIGlmIChub2RlICYmICFub2RlLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnRvZ2dsZShub2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0ua2V5IHx8IGluZGV4O1xuICAgIH1cblxuICAgIGlzU2hvd0V4cGFuZChub2RlOiBUaHlUcmVlTm9kZSkge1xuICAgICAgICBpZiAoaGVscGVycy5pc0Z1bmN0aW9uKHRoaXMudGh5U2hvd0V4cGFuZCkpIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy50aHlTaG93RXhwYW5kIGFzIEZ1bmN0aW9uKShub2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRoeVNob3dFeHBhbmQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBUaHlUcmVlTm9kZURhdGFbXSk6IHZvaWQge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudGh5Tm9kZXMgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRUaHlOb2RlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICBvbkRyYWdTdGFydGVkKGV2ZW50OiBDZGtEcmFnU3RhcnQ8VGh5VHJlZU5vZGU+KSB7XG4gICAgICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0YXJ0RHJhZ05vZGVDbG9uZSA9IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50LnNvdXJjZS5kYXRhKTtcbiAgICAgICAgaWYgKGV2ZW50LnNvdXJjZS5kYXRhLmlzRXhwYW5kZWQpIHtcbiAgICAgICAgICAgIGV2ZW50LnNvdXJjZS5kYXRhLnNldEV4cGFuZGVkKGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVtaXREcmFnTW92ZWQoZXZlbnQ6IENka0RyYWdNb3ZlKSB7XG4gICAgICAgIHRoaXMubm9kZURyYWdNb3ZlZC5uZXh0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBvbkRyYWdNb3ZlZChldmVudDogQ2RrRHJhZ01vdmU8VGh5VHJlZU5vZGU+KSB7XG4gICAgICAgIC8vIOmAmui/h+m8oOagh+S9jee9ruafpeaJvuWvueW6lOeahOebruaghyBJdGVtIOWFg+e0oFxuICAgICAgICBsZXQgY3VycmVudFBvaW50RWxlbWVudCA9IHRoaXMuZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChldmVudC5wb2ludGVyUG9zaXRpb24ueCwgZXZlbnQucG9pbnRlclBvc2l0aW9uLnkpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAoIWN1cnJlbnRQb2ludEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYW51cERyYWdBcnRpZmFjdHMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdGFyZ2V0RWxlbWVudCA9IGN1cnJlbnRQb2ludEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCd0aHktdHJlZS1ub2RlJylcbiAgICAgICAgICAgID8gY3VycmVudFBvaW50RWxlbWVudFxuICAgICAgICAgICAgOiAoY3VycmVudFBvaW50RWxlbWVudC5jbG9zZXN0KCcudGh5LXRyZWUtbm9kZScpIGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgaWYgKCF0YXJnZXRFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFudXBEcmFnQXJ0aWZhY3RzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8g57yT5a2Y5pS+572u55uu5qCHSWQg5bm26K6h566X6byg5qCH55u45a+55bqU55qE5L2N572uXG4gICAgICAgIHRoaXMubm9kZURyb3BUYXJnZXQgPSB7XG4gICAgICAgICAgICBrZXk6IHRoaXMubm9kZURyYWdzTWFwLmdldCh0YXJnZXRFbGVtZW50KT8uZGF0YS5rZXksXG4gICAgICAgICAgICBwb3NpdGlvbjogdGhpcy5nZXRUYXJnZXRQb3NpdGlvbih0YXJnZXRFbGVtZW50LCBldmVudClcbiAgICAgICAgfTtcbiAgICAgICAgLy8g5omn6KGM5aSW6YOo5Lyg5YWl55qEIGRyb3BFbnRlclByZWRpY2F0ZSDliKTmlq3mmK/lkKblhYHorrjmi5blhaXnm67moIfpoblcbiAgICAgICAgaWYgKHRoaXMuZHJvcEVudGVyUHJlZGljYXRlKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXREcmFnUmVmID0gdGhpcy5ub2RlRHJhZ3NNYXAuZ2V0KHRhcmdldEVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuZHJvcEVudGVyUHJlZGljYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiBldmVudC5zb3VyY2UuZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXREcmFnUmVmLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIGRyb3BQb3NpdGlvbjogdGhpcy5ub2RlRHJvcFRhcmdldC5wb3NpdGlvblxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dEcm9wUG9zaXRpb25QbGFjZWhvbGRlcih0YXJnZXRFbGVtZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlRHJvcFRhcmdldCA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ0FydGlmYWN0cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93RHJvcFBvc2l0aW9uUGxhY2Vob2xkZXIodGFyZ2V0RWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRyYWdFbmRlZChldmVudDogQ2RrRHJhZ0VuZDxUaHlUcmVlTm9kZT4pIHtcbiAgICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgICAvLyDmi5bmi73nu5PmnZ/lkI7mgaLlpI3ljp/lp4vnmoTlsZXlvIDnirbmgIFcbiAgICAgICAgZXZlbnQuc291cmNlLmRhdGEuc2V0RXhwYW5kZWQodGhpcy5zdGFydERyYWdOb2RlQ2xvbmUuaXNFeHBhbmRlZCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdGFydERyYWdOb2RlQ2xvbmUgPSBudWxsO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkxpc3REcm9wcGVkKGV2ZW50OiBDZGtEcmFnRHJvcDxUaHlUcmVlTm9kZVtdLCBUaHlUcmVlTm9kZVtdLCBUaHlUcmVlTm9kZT4pIHtcbiAgICAgICAgaWYgKCF0aGlzLm5vZGVEcm9wVGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmlzU2hvd0V4cGFuZCh0aGlzLnN0YXJ0RHJhZ05vZGVDbG9uZSkgJiYgdGhpcy5ub2RlRHJvcFRhcmdldC5wb3NpdGlvbiA9PT0gVGh5VHJlZURyb3BQb3NpdGlvbi5pbikge1xuICAgICAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ0FydGlmYWN0cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc291cmNlTm9kZSA9IHRoaXMuc3RhcnREcmFnTm9kZUNsb25lO1xuICAgICAgICBjb25zdCBzb3VyY2VOb2RlUGFyZW50ID0gc291cmNlTm9kZS5wYXJlbnROb2RlO1xuICAgICAgICBjb25zdCB0YXJnZXREcmFnUmVmID0gdGhpcy5jZGtEcmFncy5maW5kKGl0ZW0gPT4gaXRlbS5kYXRhPy5rZXkgPT09IHRoaXMubm9kZURyb3BUYXJnZXQua2V5KTtcbiAgICAgICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHRhcmdldERyYWdSZWY/LmRhdGE7XG4gICAgICAgIGNvbnN0IHRhcmdldE5vZGVQYXJlbnQgPSB0YXJnZXROb2RlLnBhcmVudE5vZGU7XG5cbiAgICAgICAgY29uc3QgYmVmb3JlRHJhZ0Ryb3BDb250ZXh0OiBUaHlUcmVlQmVmb3JlRHJhZ0Ryb3BDb250ZXh0ID0ge1xuICAgICAgICAgICAgcHJldmlvdXNJdGVtOiBzb3VyY2VOb2RlLFxuICAgICAgICAgICAgcHJldmlvdXNDb250YWluZXJJdGVtczogc291cmNlTm9kZVBhcmVudD8uY2hpbGRyZW4sXG4gICAgICAgICAgICBpdGVtOiB0YXJnZXROb2RlLFxuICAgICAgICAgICAgY29udGFpbmVySXRlbXM6IHRhcmdldE5vZGVQYXJlbnQ/LmNoaWxkcmVuLFxuICAgICAgICAgICAgcG9zaXRpb246IHRoaXMubm9kZURyb3BUYXJnZXQucG9zaXRpb25cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy50aHlCZWZvcmVEcmFnRHJvcCAmJiAhdGhpcy50aHlCZWZvcmVEcmFnRHJvcChiZWZvcmVEcmFnRHJvcENvbnRleHQpKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFudXBEcmFnQXJ0aWZhY3RzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLmRlbGV0ZVRyZWVOb2RlKHNvdXJjZU5vZGUpO1xuXG4gICAgICAgIHN3aXRjaCAodGhpcy5ub2RlRHJvcFRhcmdldC5wb3NpdGlvbikge1xuICAgICAgICAgICAgY2FzZSAnYmVmb3JlJzpcbiAgICAgICAgICAgICAgICBjb25zdCBiZWZvcmVJbnNlcnRJbmRleCA9ICh0YXJnZXROb2RlUGFyZW50Py5jaGlsZHJlbiB8fCB0aGlzLnRyZWVOb2RlcykuaW5kZXhPZih0YXJnZXROb2RlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLmFkZFRyZWVOb2RlKHNvdXJjZU5vZGUsIHRhcmdldE5vZGVQYXJlbnQsIGJlZm9yZUluc2VydEluZGV4KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2FmdGVyJzpcbiAgICAgICAgICAgICAgICBjb25zdCBhZnRlckluc2VydEluZGV4ID0gKHRhcmdldE5vZGVQYXJlbnQ/LmNoaWxkcmVuIHx8IHRoaXMudHJlZU5vZGVzKS5pbmRleE9mKHRhcmdldE5vZGUpICsgMTtcbiAgICAgICAgICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLmFkZFRyZWVOb2RlKHNvdXJjZU5vZGUsIHRhcmdldE5vZGVQYXJlbnQsIGFmdGVySW5zZXJ0SW5kZXgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaW4nOlxuICAgICAgICAgICAgICAgIHRoaXMudGh5VHJlZVNlcnZpY2UuYWRkVHJlZU5vZGUoc291cmNlTm9kZSwgdGFyZ2V0Tm9kZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLnN5bmNGbGF0dGVuVHJlZU5vZGVzKCk7XG5cbiAgICAgICAgbGV0IGFmdGVyOiBUaHlUcmVlTm9kZSA9IG51bGw7XG4gICAgICAgIGxldCB0YXJnZTogVGh5VHJlZU5vZGUgPSBudWxsO1xuICAgICAgICBpZiAoYmVmb3JlRHJhZ0Ryb3BDb250ZXh0LnBvc2l0aW9uID09PSBUaHlUcmVlRHJvcFBvc2l0aW9uLmJlZm9yZSkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0Q29udGFpbmVyTm9kZXMgPSB0YXJnZXROb2RlUGFyZW50Py5jaGlsZHJlbiB8fCB0aGlzLnRyZWVOb2RlcztcbiAgICAgICAgICAgIGFmdGVyID0gdGFyZ2V0Q29udGFpbmVyTm9kZXNbdGFyZ2V0Q29udGFpbmVyTm9kZXMuaW5kZXhPZih0YXJnZXROb2RlKSAtIDJdO1xuICAgICAgICAgICAgdGFyZ2UgPSB0YXJnZXROb2RlUGFyZW50O1xuICAgICAgICB9IGVsc2UgaWYgKGJlZm9yZURyYWdEcm9wQ29udGV4dC5wb3NpdGlvbiA9PT0gVGh5VHJlZURyb3BQb3NpdGlvbi5hZnRlcikge1xuICAgICAgICAgICAgYWZ0ZXIgPSB0YXJnZXROb2RlO1xuICAgICAgICAgICAgdGFyZ2UgPSB0YXJnZXROb2RlUGFyZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWZ0ZXIgPSB0YXJnZXROb2RlLmNoaWxkcmVuPy5sZW5ndGggPiAwID8gdGFyZ2V0Tm9kZS5jaGlsZHJlblt0YXJnZXROb2RlLmNoaWxkcmVuLmxlbmd0aCAtIDJdIDogbnVsbDtcbiAgICAgICAgICAgIHRhcmdlID0gdGFyZ2V0Tm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGh5T25EcmFnRHJvcC5lbWl0KHtcbiAgICAgICAgICAgIGRyYWdOb2RlOiB0aGlzLnRoeVRyZWVTZXJ2aWNlLmdldFRyZWVOb2RlKHNvdXJjZU5vZGUua2V5KSxcbiAgICAgICAgICAgIHRhcmdldE5vZGU6IHRhcmdlLFxuICAgICAgICAgICAgYWZ0ZXJOb2RlOiBhZnRlclxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNsZWFudXBEcmFnQXJ0aWZhY3RzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUYXJnZXRQb3NpdGlvbih0YXJnZXQ6IEhUTUxFbGVtZW50LCBldmVudDogQ2RrRHJhZ01vdmUpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0UmVjdCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgYmVmb3JlT3JBZnRlckdhcCA9IHRhcmdldFJlY3QuaGVpZ2h0ICogMC4zO1xuICAgICAgICAvLyDlsIYgTm9kZSDpq5jluqbliIbkuLrkuIrkuK3kuIvkuInmrrXvvIzlhbbkuK3kuIrkuIvnmoQgR2FwIOS4uiBoZWlnaHQg55qEIDMwJe+8jOmAmui/h+WIpOaWrem8oOagh+S9jee9ruWcqOWTquS4gOautSBnYXAg5p2l6K6h566X5a+55bqU55qE5L2N572uXG4gICAgICAgIGlmIChldmVudC5wb2ludGVyUG9zaXRpb24ueSAtIHRhcmdldFJlY3QudG9wIDwgYmVmb3JlT3JBZnRlckdhcCkge1xuICAgICAgICAgICAgcmV0dXJuIFRoeVRyZWVEcm9wUG9zaXRpb24uYmVmb3JlO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnBvaW50ZXJQb3NpdGlvbi55ID49IHRhcmdldFJlY3QuYm90dG9tIC0gYmVmb3JlT3JBZnRlckdhcCkge1xuICAgICAgICAgICAgcmV0dXJuIFRoeVRyZWVEcm9wUG9zaXRpb24uYWZ0ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gVGh5VHJlZURyb3BQb3NpdGlvbi5pbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2hvd0Ryb3BQb3NpdGlvblBsYWNlaG9sZGVyKHRhcmdldEVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuY2xlYW51cERyb3BQb3NpdGlvblBsYWNlaG9sZGVyKCk7XG4gICAgICAgIGlmICh0aGlzLm5vZGVEcm9wVGFyZ2V0ICYmIHRhcmdldEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRhcmdldEVsZW1lbnQuY2xhc3NMaXN0LmFkZChgZHJvcC1wb3NpdGlvbi0ke3RoaXMubm9kZURyb3BUYXJnZXQucG9zaXRpb259YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFudXBEcm9wUG9zaXRpb25QbGFjZWhvbGRlcigpIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZHJvcC1wb3NpdGlvbi1iZWZvcmUnKS5mb3JFYWNoKGVsZW1lbnQgPT4gZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkcm9wLXBvc2l0aW9uLWJlZm9yZScpKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZHJvcC1wb3NpdGlvbi1hZnRlcicpLmZvckVhY2goZWxlbWVudCA9PiBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2Ryb3AtcG9zaXRpb24tYWZ0ZXInKSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRyb3AtcG9zaXRpb24taW4nKS5mb3JFYWNoKGVsZW1lbnQgPT4gZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkcm9wLXBvc2l0aW9uLWluJykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYW51cERyYWdBcnRpZmFjdHMoKSB7XG4gICAgICAgIHRoaXMubm9kZURyb3BUYXJnZXQgPSBudWxsO1xuICAgICAgICB0aGlzLmNsZWFudXBEcm9wUG9zaXRpb25QbGFjZWhvbGRlcigpO1xuICAgIH1cblxuICAgIC8vIHJlZ2lvbiBQdWJsaWMgRnVuY3Rpb25zXG5cbiAgICBzZWxlY3RUcmVlTm9kZShub2RlOiBUaHlUcmVlTm9kZSkge1xuICAgICAgICBpZiAobm9kZSAmJiAhbm9kZS5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3Qobm9kZSk7XG4gICAgICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLnN5bmNGbGF0dGVuVHJlZU5vZGVzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRSb290Tm9kZXMoKTogVGh5VHJlZU5vZGVbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWVOb2RlcztcbiAgICB9XG5cbiAgICBnZXRUcmVlTm9kZShrZXk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlUcmVlU2VydmljZS5nZXRUcmVlTm9kZShrZXkpO1xuICAgIH1cblxuICAgIGdldFNlbGVjdGVkTm9kZSgpOiBUaHlUcmVlTm9kZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25Nb2RlbCA/IHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkWzBdIDogbnVsbDtcbiAgICB9XG5cbiAgICBnZXRTZWxlY3RlZE5vZGVzKCk6IFRoeVRyZWVOb2RlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwgPyB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZCA6IFtdO1xuICAgIH1cblxuICAgIGdldEV4cGFuZGVkTm9kZXMoKTogVGh5VHJlZU5vZGVbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoeVRyZWVTZXJ2aWNlLmdldEV4cGFuZGVkTm9kZXMoKTtcbiAgICB9XG5cbiAgICBnZXRDaGVja2VkTm9kZXMoKTogVGh5VHJlZU5vZGVbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoeVRyZWVTZXJ2aWNlLmdldENoZWNrZWROb2RlcygpO1xuICAgIH1cblxuICAgIGFkZFRyZWVOb2RlKG5vZGU6IFRoeVRyZWVOb2RlRGF0YSwgcGFyZW50PzogVGh5VHJlZU5vZGUsIGluZGV4ID0gLTEpIHtcbiAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5hZGRUcmVlTm9kZShuZXcgVGh5VHJlZU5vZGUobm9kZSwgbnVsbCwgdGhpcy50aHlUcmVlU2VydmljZSksIHBhcmVudCwgaW5kZXgpO1xuICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLnN5bmNGbGF0dGVuVHJlZU5vZGVzKCk7XG4gICAgfVxuXG4gICAgZGVsZXRlVHJlZU5vZGUobm9kZTogVGh5VHJlZU5vZGUpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZChub2RlKSkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwudG9nZ2xlKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGh5VHJlZVNlcnZpY2UuZGVsZXRlVHJlZU5vZGUobm9kZSk7XG4gICAgICAgIHRoaXMudGh5VHJlZVNlcnZpY2Uuc3luY0ZsYXR0ZW5UcmVlTm9kZXMoKTtcbiAgICB9XG5cbiAgICBleHBhbmRBbGxOb2RlcygpIHtcbiAgICAgICAgY29uc3Qgbm9kZXMgPSB0aGlzLmdldFJvb3ROb2RlcygpO1xuICAgICAgICBub2Rlcy5mb3JFYWNoKG4gPT4gbi5zZXRFeHBhbmRlZCh0cnVlLCB0cnVlKSk7XG4gICAgfVxuXG4gICAgY29sbGFwc2VkQWxsTm9kZXMoKSB7XG4gICAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy5nZXRSb290Tm9kZXMoKTtcbiAgICAgICAgbm9kZXMuZm9yRWFjaChuID0+IG4uc2V0RXhwYW5kZWQoZmFsc2UsIHRydWUpKTtcbiAgICB9XG5cbiAgICAvLyBlbmRyZWdpb25cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cbn1cbiIsIjxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnRcbiAgI3ZpZXdwb3J0XG4gICpuZ0lmPVwidGh5VmlydHVhbFNjcm9sbFwiXG4gIFtpdGVtU2l6ZV09XCJ0aHlJdGVtU2l6ZVwiXG4gIFtzdHlsZS5oZWlnaHRdPVwiJzEwMCUnXCJcbiAgY2RrRHJvcExpc3RcbiAgW2Nka0Ryb3BMaXN0QXV0b1Njcm9sbFN0ZXBdPVwiNlwiXG4gIFtjZGtEcm9wTGlzdERhdGFdPVwiZmxhdHRlblRyZWVOb2Rlc1wiXG4gIFtjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZF09XCJ0cnVlXCJcbiAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvbkxpc3REcm9wcGVkKCRldmVudClcIlxuICA+XG4gIDxkaXYgY2xhc3M9XCJ2aXJ0dWFsLXRyZWVzLWNvbnRhaW5lclwiPlxuICAgIDx0aHktdHJlZS1ub2RlXG4gICAgICAqY2RrVmlydHVhbEZvcj1cImxldCBub2RlIG9mIGZsYXR0ZW5UcmVlTm9kZXM7IHRyYWNrQnk6IHRyYWNrQnlGbjsgbGV0IGkgPSBpbmRleFwiXG4gICAgICBjZGtEcmFnXG4gICAgICBbY2RrRHJhZ0RhdGFdPVwibm9kZVwiXG4gICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cIiF0aHlEcmFnZ2FibGUgfHwgIShub2RlIHwgdHJlZU5vZGVEcmFnZ2FibGUgOiB0aHlCZWZvcmVEcmFnU3RhcnQpXCJcbiAgICAgIChjZGtEcmFnU3RhcnRlZCk9XCJvbkRyYWdTdGFydGVkKCRldmVudClcIlxuICAgICAgKGNka0RyYWdFbmRlZCk9XCJvbkRyYWdFbmRlZCgkZXZlbnQpXCJcbiAgICAgIChjZGtEcmFnTW92ZWQpPVwiZW1pdERyYWdNb3ZlZCgkZXZlbnQpXCJcbiAgICAgIFtub2RlXT1cIm5vZGVcIlxuICAgICAgW3RlbXBsYXRlUmVmXT1cInRlbXBsYXRlUmVmXCJcbiAgICAgIFtlbXB0eUNoaWxkcmVuVGVtcGxhdGVSZWZdPVwiZW1wdHlDaGlsZHJlblRlbXBsYXRlXCJcbiAgICAgIFt0aHlBc3luY109XCJ0aHlBc3luY1wiXG4gICAgICBbdGh5RHJhZ2dhYmxlXT1cInRoeURyYWdnYWJsZVwiXG4gICAgICBbdGh5Q2hlY2thYmxlXT1cInRoeUNoZWNrYWJsZVwiXG4gICAgICBbdGh5TXVsdGlwbGVdPVwidGh5TXVsdGlwbGVcIlxuICAgICAgW3RoeUNsaWNrQmVoYXZpb3JdPVwidGh5Q2xpY2tCZWhhdmlvclwiXG4gICAgICBbdGh5VGl0bGVUcnVuY2F0ZV09XCJ0aHlUaXRsZVRydW5jYXRlXCJcbiAgICAgIFt0aHlJdGVtU2l6ZV09XCJ0aHlJdGVtU2l6ZVwiXG4gICAgICBbdGh5SW5kZW50XT1cInRoeUluZGVudFwiXG4gICAgICAodGh5T25DbGljayk9XCJ0aHlPbkNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAodGh5RGJsQ2xpY2spPVwidGh5RGJsQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICh0aHlPbkV4cGFuZENoYW5nZSk9XCJldmVudFRyaWdnZXJDaGFuZ2VkKCRldmVudClcIlxuICAgICAgKHRoeU9uQ2hlY2tib3hDaGFuZ2UpPVwiZXZlbnRUcmlnZ2VyQ2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgPC90aHktdHJlZS1ub2RlPlxuICA8L2Rpdj5cbjwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuXG48ZGl2XG4gICpuZ0lmPVwiIXRoeVZpcnR1YWxTY3JvbGxcIlxuICBjZGtEcm9wTGlzdFxuICBbY2RrRHJvcExpc3RBdXRvU2Nyb2xsU3RlcF09XCI2XCJcbiAgW2Nka0Ryb3BMaXN0RGF0YV09XCJmbGF0dGVuVHJlZU5vZGVzXCJcbiAgW2Nka0Ryb3BMaXN0U29ydGluZ0Rpc2FibGVkXT1cInRydWVcIlxuICAoY2RrRHJvcExpc3REcm9wcGVkKT1cIm9uTGlzdERyb3BwZWQoJGV2ZW50KVwiPlxuICA8dGh5LXRyZWUtbm9kZVxuICAgICpuZ0Zvcj1cImxldCBub2RlIG9mIGZsYXR0ZW5UcmVlTm9kZXM7IHRyYWNrQnk6IHRyYWNrQnlGbjsgbGV0IGkgPSBpbmRleFwiXG4gICAgY2RrRHJhZ1xuICAgIFtjZGtEcmFnRGF0YV09XCJub2RlXCJcbiAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cIiF0aHlEcmFnZ2FibGUgfHwgIShub2RlIHwgdHJlZU5vZGVEcmFnZ2FibGUgOiB0aHlCZWZvcmVEcmFnU3RhcnQpXCJcbiAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25EcmFnU3RhcnRlZCgkZXZlbnQpXCJcbiAgICAoY2RrRHJhZ0VuZGVkKT1cIm9uRHJhZ0VuZGVkKCRldmVudClcIlxuICAgIChjZGtEcmFnTW92ZWQpPVwiZW1pdERyYWdNb3ZlZCgkZXZlbnQpXCJcbiAgICBbbm9kZV09XCJub2RlXCJcbiAgICBbdGVtcGxhdGVSZWZdPVwidGVtcGxhdGVSZWZcIlxuICAgIFtlbXB0eUNoaWxkcmVuVGVtcGxhdGVSZWZdPVwiZW1wdHlDaGlsZHJlblRlbXBsYXRlXCJcbiAgICBbdGh5QXN5bmNdPVwidGh5QXN5bmNcIlxuICAgIFt0aHlEcmFnZ2FibGVdPVwidGh5RHJhZ2dhYmxlXCJcbiAgICBbdGh5Q2hlY2thYmxlXT1cInRoeUNoZWNrYWJsZVwiXG4gICAgW3RoeU11bHRpcGxlXT1cInRoeU11bHRpcGxlXCJcbiAgICBbdGh5VGl0bGVUcnVuY2F0ZV09XCJ0aHlUaXRsZVRydW5jYXRlXCJcbiAgICBbdGh5SXRlbVNpemVdPVwidGh5SXRlbVNpemVcIlxuICAgIFt0aHlDbGlja0JlaGF2aW9yXT1cInRoeUNsaWNrQmVoYXZpb3JcIlxuICAgIFt0aHlJbmRlbnRdPVwidGh5SW5kZW50XCJcbiAgICAodGh5T25DbGljayk9XCJ0aHlPbkNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgKHRoeURibENsaWNrKT1cInRoeURibENsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgKHRoeU9uRXhwYW5kQ2hhbmdlKT1cImV2ZW50VHJpZ2dlckNoYW5nZWQoJGV2ZW50KVwiXG4gICAgKHRoeU9uQ2hlY2tib3hDaGFuZ2UpPVwidGh5T25DaGVja2JveENoYW5nZS5lbWl0KCRldmVudClcIj5cbiAgPC90aHktdHJlZS1ub2RlPlxuPC9kaXY+XG4iXX0=
|
|
654
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHJlZS90cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy90cmVlL3RyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlHLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFDTCxlQUFlLEVBSWYsTUFBTSxFQUNOLFNBQVMsRUFFVCxXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFDWixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBS0gsbUJBQW1CLEVBRW5CLFlBQVksRUFHZixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxF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cnR5LCBoZWxwZXJzIH0gZnJvbSAnbmd4LXRldGh5cy91dGlsJztcbmltcG9ydCB7IHVzZUhvc3RSZW5kZXJlciB9IGZyb20gJ0B0ZXRoeXMvY2RrL2RvbSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsIENka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGwsIENka1ZpcnR1YWxGb3JPZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIG51bWJlckF0dHJpYnV0ZSxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRIWV9UUkVFX0FCU1RSQUNUX1RPS0VOIH0gZnJvbSAnLi90cmVlLWFic3RyYWN0JztcbmltcG9ydCB7IFRoeVRyZWVOb2RlIH0gZnJvbSAnLi90cmVlLW5vZGUuY2xhc3MnO1xuaW1wb3J0IHtcbiAgICBUaHlUcmVlQmVmb3JlRHJhZ0Ryb3BDb250ZXh0LFxuICAgIFRoeVRyZWVCZWZvcmVEcmFnU3RhcnRDb250ZXh0LFxuICAgIFRoeUNsaWNrQmVoYXZpb3IsXG4gICAgVGh5VHJlZURyYWdEcm9wRXZlbnQsXG4gICAgVGh5VHJlZURyb3BQb3NpdGlvbixcbiAgICBUaHlUcmVlRW1pdEV2ZW50LFxuICAgIFRoeVRyZWVJY29ucyxcbiAgICBUaHlUcmVlTm9kZUNoZWNrU3RhdGUsXG4gICAgVGh5VHJlZU5vZGVEYXRhXG59IGZyb20gJy4vdHJlZS5jbGFzcyc7XG5pbXBvcnQgeyBUaHlUcmVlU2VydmljZSB9IGZyb20gJy4vdHJlZS5zZXJ2aWNlJztcbmltcG9ydCB7IFRoeVRyZWVOb2RlQ29tcG9uZW50IH0gZnJvbSAnLi90cmVlLW5vZGUuY29tcG9uZW50JztcbmltcG9ydCB7IE5nSWYsIE5nRm9yLCBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDZGtEcmFnLCBDZGtEcmFnRHJvcCwgQ2RrRHJhZ0VuZCwgQ2RrRHJhZ01vdmUsIENka0RyYWdTdGFydCwgQ2RrRHJvcExpc3QgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IGF1ZGl0VGltZSwgZmlsdGVyLCBzdGFydFdpdGgsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRoeVRyZWVOb2RlRHJhZ2dhYmxlUGlwZSB9IGZyb20gJy4vdHJlZS5waXBlJztcblxudHlwZSBUaHlUcmVlU2l6ZSA9ICdzbScgfCAnZGVmYXVsdCc7XG5cbnR5cGUgVGh5VHJlZVR5cGUgPSAnZGVmYXVsdCcgfCAnZXNwZWNpYWwnO1xuXG5jb25zdCB0cmVlVHlwZUNsYXNzTWFwID0ge1xuICAgIGRlZmF1bHQ6IFsndGh5LXRyZWUtZGVmYXVsdCddLFxuICAgIGVzcGVjaWFsOiBbJ3RoeS10cmVlLWVzcGVjaWFsJ11cbn07XG5cbmNvbnN0IHRyZWVJdGVtU2l6ZU1hcCA9IHtcbiAgICBkZWZhdWx0OiA0NCxcbiAgICBzbTogNDJcbn07XG5cbi8qKlxuICog5qCR5b2i5o6n5Lu257uE5Lu2XG4gKiBAbmFtZSB0aHktdHJlZVxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RoeS10cmVlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdHJlZS5jb21wb25lbnQuaHRtbCcsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUaHlUcmVlKSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IFRIWV9UUkVFX0FCU1RSQUNUX1RPS0VOLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVGh5VHJlZSlcbiAgICAgICAgfSxcbiAgICAgICAgVGh5VHJlZVNlcnZpY2VcbiAgICBdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ0lmLFxuICAgICAgICBDZGtEcmFnLFxuICAgICAgICBDZGtEcm9wTGlzdCxcbiAgICAgICAgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LFxuICAgICAgICBDZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsLFxuICAgICAgICBDZGtWaXJ0dWFsRm9yT2YsXG4gICAgICAgIFRoeVRyZWVOb2RlQ29tcG9uZW50LFxuICAgICAgICBOZ0ZvcixcbiAgICAgICAgVGh5VHJlZU5vZGVEcmFnZ2FibGVQaXBlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBUaHlUcmVlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgX3RlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgcHJpdmF0ZSBfZW1wdHlDaGlsZHJlblRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgcHJpdmF0ZSBfZHJhZ2dhYmxlID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9leHBhbmRlZEtleXM6IChzdHJpbmcgfCBudW1iZXIpW107XG5cbiAgICBwcml2YXRlIF9zZWxlY3RlZEtleXM6IChzdHJpbmcgfCBudW1iZXIpW107XG5cbiAgICBwcml2YXRlIGhvc3RSZW5kZXJlciA9IHVzZUhvc3RSZW5kZXJlcigpO1xuXG4gICAgcHJpdmF0ZSBfb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgICBwcml2YXRlIF9vbkNoYW5nZTogKHZhbHVlOiBhbnkpID0+IHZvaWQgPSAoXzogYW55KSA9PiB7fTtcblxuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgLy8g57yT5a2YIEVsZW1lbnQg5ZKMIERyYWdSZWYg55qE5YWz57O777yM5pa55L6/5ZyoIEl0ZW0g5ouW5Yqo5pe25p+l5om+XG4gICAgcHJpdmF0ZSBub2RlRHJhZ3NNYXAgPSBuZXcgTWFwPEhUTUxFbGVtZW50LCBDZGtEcmFnPFRoeVRyZWVOb2RlPj4oKTtcblxuICAgIHByaXZhdGUgbm9kZURyYWdNb3ZlZCA9IG5ldyBTdWJqZWN0PENka0RyYWdNb3ZlPigpO1xuXG4gICAgLy8gcHJpdmF0ZSBzdGFydERyYWdOb2RlRXhwYW5kZWQ6IGJvb2xlYW47XG5cbiAgICBwcml2YXRlIHN0YXJ0RHJhZ05vZGVDbG9uZTogVGh5VHJlZU5vZGU7XG5cbiAgICAvLyBOb2RlIOaLluWKqOe7j+i/h+ebruagh+aXtuS4tOaXtuiusOW9leebruagh2lk5Lul5Y+K55u45a+55bqU55uu5qCH55qE5L2N572uXG4gICAgcHJpdmF0ZSBub2RlRHJvcFRhcmdldDoge1xuICAgICAgICBwb3NpdGlvbj86IFRoeVRyZWVEcm9wUG9zaXRpb247XG4gICAgICAgIGtleT86IG51bWJlciB8IHN0cmluZztcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBkcm9wRW50ZXJQcmVkaWNhdGU/OiAoY29udGV4dDogeyBzb3VyY2U6IFRoeVRyZWVOb2RlOyB0YXJnZXQ6IFRoeVRyZWVOb2RlOyBkcm9wUG9zaXRpb246IFRoeVRyZWVEcm9wUG9zaXRpb24gfSkgPT4gYm9vbGVhbiA9XG4gICAgICAgIGNvbnRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2hvd0V4cGFuZChjb250ZXh0LnRhcmdldCkgfHwgKCF0aGlzLmlzU2hvd0V4cGFuZChjb250ZXh0LnRhcmdldCkgJiYgY29udGV4dC5kcm9wUG9zaXRpb24gIT09IFRoeVRyZWVEcm9wUG9zaXRpb24uaW4pXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuXG4gICAgcHVibGljIF9zZWxlY3Rpb25Nb2RlbDogU2VsZWN0aW9uTW9kZWw8VGh5VHJlZU5vZGU+O1xuXG4gICAgcHVibGljIGdldCB0cmVlTm9kZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoeVRyZWVTZXJ2aWNlLnRyZWVOb2RlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZmxhdHRlblRyZWVOb2RlczogVGh5VHJlZU5vZGVbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICog6Jma5ouf5YyW5rua5Yqo55qE6KeG5Y+jXG4gICAgICovXG4gICAgQE91dHB1dCgpIEBWaWV3Q2hpbGQoJ3ZpZXdwb3J0JywgeyBzdGF0aWM6IGZhbHNlIH0pIHZpZXdwb3J0OiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ7XG5cbiAgICAvKipcbiAgICAgKiBUcmVlTm9kZSDlsZXnjrDmiYDpnIDnmoTmlbDmja5cbiAgICAgKiBAdHlwZSBUaHlUcmVlTm9kZURhdGFbXVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeU5vZGVzOiBUaHlUcmVlTm9kZURhdGFbXTtcblxuICAgIC8qKlxuICAgICAqIOiuvue9riBUcmVlTm9kZSDmmK/lkKbmlK/mjIHlsZXlvIBcbiAgICAgKiBAdHlwZSBib29sZWFuIHwgRnVuY3Rpb25cbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlTaG93RXhwYW5kOiBib29sZWFuIHwgKChfOiBUaHlUcmVlTm9kZURhdGEpID0+IGJvb2xlYW4pID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIOiuvue9ruaYr+WQpuaUr+aMgeWkmumAieiKgueCuVxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZyhgY2xhc3MudGh5LW11bHRpcGxlLXNlbGVjdGlvbi1saXN0YClcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KVxuICAgIHRoeU11bHRpcGxlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gVHJlZU5vZGUg5piv5ZCm5pSv5oyB5ouW5ou95o6S5bqPXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS10cmVlLWRyYWdnYWJsZScpXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSlcbiAgICBzZXQgdGh5RHJhZ2dhYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2RyYWdnYWJsZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCB0aHlEcmFnZ2FibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kcmFnZ2FibGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572uIFRyZWVOb2RlIOaYr+WQpuaUr+aMgSBDaGVja2JveCDpgInmi6lcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeUNoZWNrYWJsZTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIOeCueWHu+iKgueCueeahOihjOS4uu+8jGBkZWZhdWx0YCDkuLrpgInkuK3lvZPliY3oioLngrnvvIxgc2VsZWN0Q2hlY2tib3hgIOS4uumAieS4reiKgueCueeahCBDaGVja2JveO+8jCBgdGh5Q2hlY2thYmxlYCDkuLogdHJ1ZSDml7bnlJ/mlYjjgIJcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlDbGlja0JlaGF2aW9yOiBUaHlDbGlja0JlaGF2aW9yID0gJ2RlZmF1bHQnO1xuXG4gICAgLyoqXG4gICAgICog6K6+572uIGNoZWNrIOeKtuaAgeeahOiuoeeul+etlueVpVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHNldCB0aHlDaGVja1N0YXRlUmVzb2x2ZShyZXNvbHZlOiAobm9kZTogVGh5VHJlZU5vZGUpID0+IFRoeVRyZWVOb2RlQ2hlY2tTdGF0ZSkge1xuICAgICAgICBpZiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5zZXRDaGVja1N0YXRlUmVzb2x2ZShyZXNvbHZlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9riBUcmVlTm9kZSDmmK/lkKbmlK/mjIHlvILmraXliqDovb1cbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KSB0aHlBc3luYyA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfdGh5VHlwZTogVGh5VHJlZVR5cGUgPSAnZGVmYXVsdCc7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7kuI3lkIzlsZXnpLrnsbvlnovnmoQgVHJlZe+8jGBkZWZhdWx0YCDkuLrlsI/nrq3lpLTlsZXnpLrvvIwgYGVzcGVjaWFsYCDkuLog5Yqg5YeP5Y+35Zu+5qCH5bGV56S6XG4gICAgICogQHR5cGUgVGh5VHJlZVR5cGVcbiAgICAgKiBAZGVmYXVsdCBkZWZhdWx0XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5VHlwZSh0eXBlOiBUaHlUcmVlVHlwZSkge1xuICAgICAgICB0aGlzLl90aHlUeXBlID0gdHlwZTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdlc3BlY2lhbCcpIHtcbiAgICAgICAgICAgIHRoaXMudGh5SWNvbnMgPSB7IGV4cGFuZDogJ21pbnVzLXNxdWFyZScsIGNvbGxhcHNlOiAncGx1cy1zcXVhcmUnIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgdGh5VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RoeVR5cGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5LiN5ZCMIFRyZWUg5bGV5byA5oqY5Y+g55qE5Zu+5qCH77yMYGV4cGFuZGAg5Li65bGV5byA54q25oCB55qE5Zu+5qCH77yMYGNvbGxhcHNlYCDkuLrmipjlj6DnirbmgIHnmoTlm77moIdcbiAgICAgKiBAdHlwZSB7IGV4cGFuZDogc3RyaW5nLCBjb2xsYXBzZTogc3RyaW5nIH1cbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlJY29uczogVGh5VHJlZUljb25zID0ge307XG5cbiAgICBwcml2YXRlIF90aHlTaXplOiBUaHlUcmVlU2l6ZSA9ICdkZWZhdWx0JztcbiAgICAvKipcbiAgICAgKiDmlK/mjIEgYHNtYCB8IGBkZWZhdWx0YCDkuKTnp43lpKflsI/vvIzpu5jorqTlgLzkuLogYGRlZmF1bHRgXG4gICAgICogQHR5cGUgVGh5VHJlZVNpemVcbiAgICAgKiBAZGVmYXVsdCBkZWZhdWx0XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5U2l6ZShzaXplOiBUaHlUcmVlU2l6ZSkge1xuICAgICAgICB0aGlzLl90aHlTaXplID0gc2l6ZTtcbiAgICAgICAgaWYgKHRoaXMuX3RoeVNpemUpIHtcbiAgICAgICAgICAgIHRoaXMuX3RoeUl0ZW1TaXplID0gdHJlZUl0ZW1TaXplTWFwW3RoaXMuX3RoeVNpemVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fdGh5SXRlbVNpemUgPSB0cmVlSXRlbVNpemVNYXAuZGVmYXVsdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCB0aHlTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGh5U2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mmK/lkKblvIDlkK/omZrmi5/mu5rliqhcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS12aXJ0dWFsLXNjcm9sbGluZy10cmVlJylcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KVxuICAgIHRoeVZpcnR1YWxTY3JvbGwgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX3RoeUl0ZW1TaXplID0gNDQ7XG5cbiAgICAvKipcbiAgICAgKiDlvIDlkK/omZrmi5/mu5rliqjml7bvvIzljZXooYzoioLngrnnmoTpq5jluqbvvIzlvZNgdGh5U2l6ZWDkuLpgZGVmYXVsdGDml7bvvIzor6Xlj4LmlbDmiY3nlJ/mlYhcbiAgICAgKiBAZGVmYXVsdCA0NFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pXG4gICAgc2V0IHRoeUl0ZW1TaXplKGl0ZW1TaXplOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMudGh5U2l6ZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldHRpbmcgdGh5U2l6ZSBhbmQgdGh5SXRlbVNpemUgYXQgdGhlIHNhbWUgdGltZSBpcyBub3QgYWxsb3dlZCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3RoeUl0ZW1TaXplID0gaXRlbVNpemU7XG4gICAgfVxuXG4gICAgZ2V0IHRoeUl0ZW1TaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGh5SXRlbVNpemU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u6IqC54K55ZCN56ew5piv5ZCm5pSv5oyB6LaF5Ye65oiq5Y+WXG4gICAgICogQHR5cGUgYm9vbGVhblxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeVRpdGxlVHJ1bmNhdGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICog5bey6YCJ5Lit55qEIG5vZGUg6IqC54K56ZuG5ZCIXG4gICAgICogQGRlZmF1bHQgW11cbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlTZWxlY3RlZEtleXM6IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICog5bGV5byA5oyH5a6a55qE5qCR6IqC54K5XG4gICAgICovXG4gICAgQElucHV0KCkgdGh5RXhwYW5kZWRLZXlzOiAoc3RyaW5nIHwgbnVtYmVyKVtdO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5bGV5byA5omA5pyJ5qCR6IqC54K5XG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSkgdGh5RXhwYW5kQWxsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7nvKnov5vot53nprvvvIznvKnov5vot53nprsgPSB0aHlJbmRlbnQgKiBub2RlLmxldmVsXG4gICAgICogQHR5cGUgbnVtYmVyXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgdGh5SW5kZW50ID0gMjU7XG5cbiAgICAvKipcbiAgICAgKiDmi5bmi73kuYvliY3nmoTlm57osIPvvIzlh73mlbDov5Tlm54gZmFsc2Ug5YiZ6Zi75q2i5ouW5ou9XG4gICAgICovXG4gICAgQElucHV0KCkgdGh5QmVmb3JlRHJhZ1N0YXJ0OiAoY29udGV4dDogVGh5VHJlZUJlZm9yZURyYWdTdGFydENvbnRleHQpID0+IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiDmi5bmlL7liLDlhYPntKDml7blm57osIPvvIzlh73mlbDov5Tlm54gZmFsc2Ug5YiZ6Zi75q2i5ouW5pS+5Yiw5b2T5YmN5YWD57SgXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5QmVmb3JlRHJhZ0Ryb3A6IChjb250ZXh0OiBUaHlUcmVlQmVmb3JlRHJhZ0Ryb3BDb250ZXh0KSA9PiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog6K6+572u5a2QIFRyZWVOb2RlIOeCueWHu+S6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPbkNsaWNrOiBFdmVudEVtaXR0ZXI8VGh5VHJlZUVtaXRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVRyZWVFbWl0RXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gY2hlY2sg6YCJ5oup5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uQ2hlY2tib3hDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUaHlUcmVlRW1pdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5VHJlZUVtaXRFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOiuvue9rueCueWHu+WxleW8gOinpuWPkeS6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPbkV4cGFuZENoYW5nZTogRXZlbnRFbWl0dGVyPFRoeVRyZWVFbWl0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUcmVlRW1pdEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog6K6+572uIFRyZWVOb2RlIOaLluaLveS6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPbkRyYWdEcm9wOiBFdmVudEVtaXR0ZXI8VGh5VHJlZURyYWdEcm9wRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUcmVlRHJhZ0Ryb3BFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOWPjOWHuyBUcmVlTm9kZSDkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5RGJsQ2xpY2s6IEV2ZW50RW1pdHRlcjxUaHlUcmVlRW1pdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5VHJlZUVtaXRFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOiuvue9riBUcmVlTm9kZSDnmoTmuLLmn5PmqKHmnb9cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKCd0cmVlTm9kZVRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBzZXQgdGVtcGxhdGVSZWYodGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICAgICAgaWYgKHRlbXBsYXRlKSB7XG4gICAgICAgICAgICB0aGlzLl90ZW1wbGF0ZVJlZiA9IHRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHRlbXBsYXRlUmVmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGVSZWY7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5a2Q55qE56m65pWw5o2u5riy5p+T5qih5p2/XG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgnZW1wdHlDaGlsZHJlblRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgZW1wdHlDaGlsZHJlblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIHNldCBlbXB0eUNoaWxkcmVuVGVtcGxhdGVSZWYodGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICAgICAgaWYgKHRlbXBsYXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9lbXB0eUNoaWxkcmVuVGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBlbXB0eUNoaWxkcmVuVGVtcGxhdGVSZWYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbXB0eUNoaWxkcmVuVGVtcGxhdGVSZWY7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aHktdHJlZScpXG4gICAgdGh5VHJlZUNsYXNzID0gdHJ1ZTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGh5LXRyZWUtZHJhZ2dpbmcnKVxuICAgIGRyYWdnaW5nOiBib29sZWFuO1xuXG4gICAgQFZpZXdDaGlsZHJlbihDZGtEcmFnKSBjZGtEcmFnczogUXVlcnlMaXN0PENka0RyYWc8VGh5VHJlZU5vZGU+PjtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB0aHlUcmVlU2VydmljZTogVGh5VHJlZVNlcnZpY2UsIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnQpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5pdFRoeU5vZGVzKCk7XG4gICAgICAgIHRoaXMuX3NldFRyZWVUeXBlKCk7XG4gICAgICAgIHRoaXMuX3NldFRyZWVTaXplKCk7XG4gICAgICAgIHRoaXMuX2luc3RhbmNlU2VsZWN0aW9uTW9kZWwoKTtcbiAgICAgICAgdGhpcy5fc2VsZWN0VHJlZU5vZGVzKHRoaXMudGh5U2VsZWN0ZWRLZXlzKTtcblxuICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLmZsYXR0ZW5Ob2RlcyQuc3Vic2NyaWJlKGZsYXR0ZW5UcmVlTm9kZXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5mbGF0dGVuVHJlZU5vZGVzID0gZmxhdHRlblRyZWVOb2RlcztcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2RrRHJhZ3MuY2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoc3RhcnRXaXRoKHRoaXMuY2RrRHJhZ3MpLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkcmFnczogUXVlcnlMaXN0PENka0RyYWc8VGh5VHJlZU5vZGU+PikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZURyYWdzTWFwLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgZHJhZ3MuZm9yRWFjaChkcmFnID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRyYWcuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2RrRHJhZyDlj5jljJbml7bvvIznvJPlrZggRWxlbWVudCDkuI4gRHJhZ1JlZiDnmoTlhbPns7vvvIzmlrnkvr8gRHJhZyBNb3ZlIOaXtuafpeaJvlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub2RlRHJhZ3NNYXAuc2V0KGRyYWcuZWxlbWVudC5uYXRpdmVFbGVtZW50LCBkcmFnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5ub2RlRHJhZ01vdmVkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAvLyBhdWRpdFRpbWUoMzApLFxuICAgICAgICAgICAgICAgIC8vICBhdWRpdFRpbWUg5Y+v6IO95Lya5a+86Ie05ouW5Yqo57uT5p2f5ZCO5LuN54S25omn6KGMIG1vdmVkIO+8jOaJgOS7pemAmui/h+WIpOaWrSBkcmFnZ2luZyDnirbmgIHmnaXov4fmu6Tml6DmlYggbW92ZWRcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKGV2ZW50OiBDZGtEcmFnTW92ZSkgPT4gZXZlbnQuc291cmNlLl9kcmFnUmVmLmlzRHJhZ2dpbmcoKSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRHJhZ01vdmVkKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMudGh5Tm9kZXMgJiYgIWNoYW5nZXMudGh5Tm9kZXMuaXNGaXJzdENoYW5nZSgpKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0VGh5Tm9kZXMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy50aHlUeXBlICYmICFjaGFuZ2VzLnRoeVR5cGUuaXNGaXJzdENoYW5nZSgpKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRUcmVlVHlwZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLnRoeU11bHRpcGxlICYmICFjaGFuZ2VzLnRoeU11bHRpcGxlLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5faW5zdGFuY2VTZWxlY3Rpb25Nb2RlbCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMudGh5U2VsZWN0ZWRLZXlzICYmICFjaGFuZ2VzLnRoeVNlbGVjdGVkS2V5cy5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkS2V5cyA9IGNoYW5nZXMudGh5U2VsZWN0ZWRLZXlzLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdFRyZWVOb2RlcyhjaGFuZ2VzLnRoeVNlbGVjdGVkS2V5cy5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMudGh5RXhwYW5kZWRLZXlzICYmICFjaGFuZ2VzLnRoeUV4cGFuZGVkS2V5cy5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUV4cGFuZGVkS2V5cygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLnRoeUV4cGFuZEFsbCAmJiAhY2hhbmdlcy50aHlFeHBhbmRBbGwuaXNGaXJzdENoYW5nZSgpKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVFeHBhbmRlZEtleXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlclZpZXcgPSAoKSA9PiB7fTtcblxuICAgIGV2ZW50VHJpZ2dlckNoYW5nZWQoZXZlbnQ6IFRoeVRyZWVFbWl0RXZlbnQpOiB2b2lkIHtcbiAgICAgICAgc3dpdGNoIChldmVudC5ldmVudE5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2V4cGFuZCc6XG4gICAgICAgICAgICAgICAgdGhpcy50aHlPbkV4cGFuZENoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnY2hlY2tib3hDaGFuZ2UnOlxuICAgICAgICAgICAgICAgIHRoaXMudGh5T25DaGVja2JveENoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRUaHlOb2RlcygpIHtcbiAgICAgICAgdGhpcy5fZXhwYW5kZWRLZXlzID0gdGhpcy5nZXRFeHBhbmRlZE5vZGVzKCkubWFwKG5vZGUgPT4gbm9kZS5rZXkpO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZEtleXMgPSB0aGlzLmdldFNlbGVjdGVkTm9kZXMoKS5tYXAobm9kZSA9PiBub2RlLmtleSk7XG4gICAgICAgIHRoaXMudGh5VHJlZVNlcnZpY2UuaW5pdGlhbGl6ZVRyZWVOb2Rlcyh0aGlzLnRoeU5vZGVzKTtcbiAgICAgICAgdGhpcy5mbGF0dGVuVHJlZU5vZGVzID0gdGhpcy50aHlUcmVlU2VydmljZS5mbGF0dGVuVHJlZU5vZGVzO1xuICAgICAgICB0aGlzLl9zZWxlY3RUcmVlTm9kZXModGhpcy5fc2VsZWN0ZWRLZXlzKTtcbiAgICAgICAgdGhpcy5faGFuZGxlRXhwYW5kZWRLZXlzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaGFuZGxlRXhwYW5kZWRLZXlzKCkge1xuICAgICAgICBpZiAodGhpcy50aHlFeHBhbmRlZEtleXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5fZXhwYW5kZWRLZXlzID0gaGVscGVycy5jb25jYXRBcnJheShcbiAgICAgICAgICAgICAgICB0aGlzLnRoeUV4cGFuZGVkS2V5cy5maWx0ZXIoa2V5ID0+ICF0aGlzLl9leHBhbmRlZEtleXMuaW5jbHVkZXMoa2V5KSksXG4gICAgICAgICAgICAgICAgdGhpcy5fZXhwYW5kZWRLZXlzXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGh5VHJlZVNlcnZpY2UuZXhwYW5kVHJlZU5vZGVzKHRoaXMudGh5RXhwYW5kQWxsIHx8IHRoaXMuX2V4cGFuZGVkS2V5cyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0VHJlZVR5cGUoKSB7XG4gICAgICAgIGlmICh0aGlzLnRoeVR5cGUgJiYgdHJlZVR5cGVDbGFzc01hcFt0aGlzLnRoeVR5cGVdKSB7XG4gICAgICAgICAgICB0cmVlVHlwZUNsYXNzTWFwW3RoaXMudGh5VHlwZV0uZm9yRWFjaChjbGFzc05hbWUgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaG9zdFJlbmRlcmVyLmFkZENsYXNzKGNsYXNzTmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3NldFRyZWVTaXplKCkge1xuICAgICAgICBpZiAodGhpcy50aHlTaXplKSB7XG4gICAgICAgICAgICB0aGlzLmhvc3RSZW5kZXJlci5hZGRDbGFzcyhgdGh5LXRyZWUtJHt0aGlzLnRoeVNpemV9YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9pbnN0YW5jZVNlbGVjdGlvbk1vZGVsKCkge1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbCA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxhbnk+KHRoaXMudGh5TXVsdGlwbGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NlbGVjdFRyZWVOb2RlcyhrZXlzOiAoc3RyaW5nIHwgbnVtYmVyKVtdKSB7XG4gICAgICAgIChrZXlzIHx8IFtdKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy50aHlUcmVlU2VydmljZS5nZXRUcmVlTm9kZShrZXkpO1xuICAgICAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFRyZWVOb2RlKHRoaXMudGh5VHJlZVNlcnZpY2UuZ2V0VHJlZU5vZGUoa2V5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlzU2VsZWN0ZWQobm9kZTogVGh5VHJlZU5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQobm9kZSk7XG4gICAgfVxuXG4gICAgdG9nZ2xlVHJlZU5vZGUobm9kZTogVGh5VHJlZU5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUgJiYgIW5vZGUuaXNEaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwudG9nZ2xlKG5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdHJhY2tCeUZuKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkge1xuICAgICAgICByZXR1cm4gaXRlbS5rZXkgfHwgaW5kZXg7XG4gICAgfVxuXG4gICAgaXNTaG93RXhwYW5kKG5vZGU6IFRoeVRyZWVOb2RlKSB7XG4gICAgICAgIGlmIChoZWxwZXJzLmlzRnVuY3Rpb24odGhpcy50aHlTaG93RXhwYW5kKSkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLnRoeVNob3dFeHBhbmQgYXMgRnVuY3Rpb24pKG5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGh5U2hvd0V4cGFuZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdyaXRlVmFsdWUodmFsdWU6IFRoeVRyZWVOb2RlRGF0YVtdKTogdm9pZCB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy50aHlOb2RlcyA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5faW5pdFRoeU5vZGVzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIG9uRHJhZ1N0YXJ0ZWQoZXZlbnQ6IENka0RyYWdTdGFydDxUaHlUcmVlTm9kZT4pIHtcbiAgICAgICAgdGhpcy5kcmFnZ2luZyA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RhcnREcmFnTm9kZUNsb25lID0gT2JqZWN0LmFzc2lnbih7fSwgZXZlbnQuc291cmNlLmRhdGEpO1xuICAgICAgICBpZiAoZXZlbnQuc291cmNlLmRhdGEuaXNFeHBhbmRlZCkge1xuICAgICAgICAgICAgZXZlbnQuc291cmNlLmRhdGEuc2V0RXhwYW5kZWQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZW1pdERyYWdNb3ZlZChldmVudDogQ2RrRHJhZ01vdmUpIHtcbiAgICAgICAgdGhpcy5ub2RlRHJhZ01vdmVkLm5leHQoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uRHJhZ01vdmVkKGV2ZW50OiBDZGtEcmFnTW92ZTxUaHlUcmVlTm9kZT4pIHtcbiAgICAgICAgLy8g6YCa6L+H6byg5qCH5L2N572u5p+l5om+5a+55bqU55qE55uu5qCHIEl0ZW0g5YWD57SgXG4gICAgICAgIGxldCBjdXJyZW50UG9pbnRFbGVtZW50ID0gdGhpcy5kb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGV2ZW50LnBvaW50ZXJQb3NpdGlvbi54LCBldmVudC5wb2ludGVyUG9zaXRpb24ueSkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmICghY3VycmVudFBvaW50RWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ0FydGlmYWN0cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCB0YXJnZXRFbGVtZW50ID0gY3VycmVudFBvaW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ3RoeS10cmVlLW5vZGUnKVxuICAgICAgICAgICAgPyBjdXJyZW50UG9pbnRFbGVtZW50XG4gICAgICAgICAgICA6IChjdXJyZW50UG9pbnRFbGVtZW50LmNsb3Nlc3QoJy50aHktdHJlZS1ub2RlJykgYXMgSFRNTEVsZW1lbnQpO1xuICAgICAgICBpZiAoIXRhcmdldEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYW51cERyYWdBcnRpZmFjdHMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyDnvJPlrZjmlL7nva7nm67moIdJZCDlubborqHnrpfpvKDmoIfnm7jlr7nlupTnmoTkvY3nva5cbiAgICAgICAgdGhpcy5ub2RlRHJvcFRhcmdldCA9IHtcbiAgICAgICAgICAgIGtleTogdGhpcy5ub2RlRHJhZ3NNYXAuZ2V0KHRhcmdldEVsZW1lbnQpPy5kYXRhLmtleSxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB0aGlzLmdldFRhcmdldFBvc2l0aW9uKHRhcmdldEVsZW1lbnQsIGV2ZW50KVxuICAgICAgICB9O1xuICAgICAgICAvLyDmiafooYzlpJbpg6jkvKDlhaXnmoQgZHJvcEVudGVyUHJlZGljYXRlIOWIpOaWreaYr+WQpuWFgeiuuOaLluWFpeebruagh+mhuVxuICAgICAgICBpZiAodGhpcy5kcm9wRW50ZXJQcmVkaWNhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldERyYWdSZWYgPSB0aGlzLm5vZGVEcmFnc01hcC5nZXQodGFyZ2V0RWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wRW50ZXJQcmVkaWNhdGUoe1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGV2ZW50LnNvdXJjZS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHRhcmdldERyYWdSZWYuZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgZHJvcFBvc2l0aW9uOiB0aGlzLm5vZGVEcm9wVGFyZ2V0LnBvc2l0aW9uXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Ryb3BQb3NpdGlvblBsYWNlaG9sZGVyKHRhcmdldEVsZW1lbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVEcm9wVGFyZ2V0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFudXBEcmFnQXJ0aWZhY3RzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dEcm9wUG9zaXRpb25QbGFjZWhvbGRlcih0YXJnZXRFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRHJhZ0VuZGVkKGV2ZW50OiBDZGtEcmFnRW5kPFRoeVRyZWVOb2RlPikge1xuICAgICAgICB0aGlzLmRyYWdnaW5nID0gZmFsc2U7XG4gICAgICAgIC8vIOaLluaLvee7k+adn+WQjuaBouWkjeWOn+Wni+eahOWxleW8gOeKtuaAgVxuICAgICAgICBldmVudC5zb3VyY2UuZGF0YS5zZXRFeHBhbmRlZCh0aGlzLnN0YXJ0RHJhZ05vZGVDbG9uZS5pc0V4cGFuZGVkKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0RHJhZ05vZGVDbG9uZSA9IG51bGw7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uTGlzdERyb3BwZWQoZXZlbnQ6IENka0RyYWdEcm9wPFRoeVRyZWVOb2RlW10sIFRoeVRyZWVOb2RlW10sIFRoeVRyZWVOb2RlPikge1xuICAgICAgICBpZiAoIXRoaXMubm9kZURyb3BUYXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaXNTaG93RXhwYW5kKHRoaXMuc3RhcnREcmFnTm9kZUNsb25lKSAmJiB0aGlzLm5vZGVEcm9wVGFyZ2V0LnBvc2l0aW9uID09PSBUaHlUcmVlRHJvcFBvc2l0aW9uLmluKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFudXBEcmFnQXJ0aWZhY3RzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzb3VyY2VOb2RlID0gdGhpcy5zdGFydERyYWdOb2RlQ2xvbmU7XG4gICAgICAgIGNvbnN0IHNvdXJjZU5vZGVQYXJlbnQgPSBzb3VyY2VOb2RlLnBhcmVudE5vZGU7XG4gICAgICAgIGNvbnN0IHRhcmdldERyYWdSZWYgPSB0aGlzLmNka0RyYWdzLmZpbmQoaXRlbSA9PiBpdGVtLmRhdGE/LmtleSA9PT0gdGhpcy5ub2RlRHJvcFRhcmdldC5rZXkpO1xuICAgICAgICBjb25zdCB0YXJnZXROb2RlID0gdGFyZ2V0RHJhZ1JlZj8uZGF0YTtcbiAgICAgICAgY29uc3QgdGFyZ2V0Tm9kZVBhcmVudCA9IHRhcmdldE5vZGUucGFyZW50Tm9kZTtcblxuICAgICAgICBjb25zdCBiZWZvcmVEcmFnRHJvcENvbnRleHQ6IFRoeVRyZWVCZWZvcmVEcmFnRHJvcENvbnRleHQgPSB7XG4gICAgICAgICAgICBwcmV2aW91c0l0ZW06IHNvdXJjZU5vZGUsXG4gICAgICAgICAgICBwcmV2aW91c0NvbnRhaW5lckl0ZW1zOiBzb3VyY2VOb2RlUGFyZW50Py5jaGlsZHJlbixcbiAgICAgICAgICAgIGl0ZW06IHRhcmdldE5vZGUsXG4gICAgICAgICAgICBjb250YWluZXJJdGVtczogdGFyZ2V0Tm9kZVBhcmVudD8uY2hpbGRyZW4sXG4gICAgICAgICAgICBwb3NpdGlvbjogdGhpcy5ub2RlRHJvcFRhcmdldC5wb3NpdGlvblxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLnRoeUJlZm9yZURyYWdEcm9wICYmICF0aGlzLnRoeUJlZm9yZURyYWdEcm9wKGJlZm9yZURyYWdEcm9wQ29udGV4dCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYW51cERyYWdBcnRpZmFjdHMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGh5VHJlZVNlcnZpY2UuZGVsZXRlVHJlZU5vZGUoc291cmNlTm9kZSk7XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLm5vZGVEcm9wVGFyZ2V0LnBvc2l0aW9uKSB7XG4gICAgICAgICAgICBjYXNlICdiZWZvcmUnOlxuICAgICAgICAgICAgICAgIGNvbnN0IGJlZm9yZUluc2VydEluZGV4ID0gKHRhcmdldE5vZGVQYXJlbnQ/LmNoaWxkcmVuIHx8IHRoaXMudHJlZU5vZGVzKS5pbmRleE9mKHRhcmdldE5vZGUpO1xuICAgICAgICAgICAgICAgIHRoaXMudGh5VHJlZVNlcnZpY2UuYWRkVHJlZU5vZGUoc291cmNlTm9kZSwgdGFyZ2V0Tm9kZVBhcmVudCwgYmVmb3JlSW5zZXJ0SW5kZXgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYWZ0ZXInOlxuICAgICAgICAgICAgICAgIGNvbnN0IGFmdGVySW5zZXJ0SW5kZXggPSAodGFyZ2V0Tm9kZVBhcmVudD8uY2hpbGRyZW4gfHwgdGhpcy50cmVlTm9kZXMpLmluZGV4T2YodGFyZ2V0Tm9kZSkgKyAxO1xuICAgICAgICAgICAgICAgIHRoaXMudGh5VHJlZVNlcnZpY2UuYWRkVHJlZU5vZGUoc291cmNlTm9kZSwgdGFyZ2V0Tm9kZVBhcmVudCwgYWZ0ZXJJbnNlcnRJbmRleCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdpbic6XG4gICAgICAgICAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5hZGRUcmVlTm9kZShzb3VyY2VOb2RlLCB0YXJnZXROb2RlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGh5VHJlZVNlcnZpY2Uuc3luY0ZsYXR0ZW5UcmVlTm9kZXMoKTtcblxuICAgICAgICBsZXQgYWZ0ZXI6IFRoeVRyZWVOb2RlID0gbnVsbDtcbiAgICAgICAgbGV0IHRhcmdlOiBUaHlUcmVlTm9kZSA9IG51bGw7XG4gICAgICAgIGlmIChiZWZvcmVEcmFnRHJvcENvbnRleHQucG9zaXRpb24gPT09IFRoeVRyZWVEcm9wUG9zaXRpb24uYmVmb3JlKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRDb250YWluZXJOb2RlcyA9IHRhcmdldE5vZGVQYXJlbnQ/LmNoaWxkcmVuIHx8IHRoaXMudHJlZU5vZGVzO1xuICAgICAgICAgICAgYWZ0ZXIgPSB0YXJnZXRDb250YWluZXJOb2Rlc1t0YXJnZXRDb250YWluZXJOb2Rlcy5pbmRleE9mKHRhcmdldE5vZGUpIC0gMl07XG4gICAgICAgICAgICB0YXJnZSA9IHRhcmdldE5vZGVQYXJlbnQ7XG4gICAgICAgIH0gZWxzZSBpZiAoYmVmb3JlRHJhZ0Ryb3BDb250ZXh0LnBvc2l0aW9uID09PSBUaHlUcmVlRHJvcFBvc2l0aW9uLmFmdGVyKSB7XG4gICAgICAgICAgICBhZnRlciA9IHRhcmdldE5vZGU7XG4gICAgICAgICAgICB0YXJnZSA9IHRhcmdldE5vZGVQYXJlbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhZnRlciA9IHRhcmdldE5vZGUuY2hpbGRyZW4/Lmxlbmd0aCA+IDAgPyB0YXJnZXROb2RlLmNoaWxkcmVuW3RhcmdldE5vZGUuY2hpbGRyZW4ubGVuZ3RoIC0gMl0gOiBudWxsO1xuICAgICAgICAgICAgdGFyZ2UgPSB0YXJnZXROb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50aHlPbkRyYWdEcm9wLmVtaXQoe1xuICAgICAgICAgICAgZHJhZ05vZGU6IHRoaXMudGh5VHJlZVNlcnZpY2UuZ2V0VHJlZU5vZGUoc291cmNlTm9kZS5rZXkpLFxuICAgICAgICAgICAgdGFyZ2V0Tm9kZTogdGFyZ2UsXG4gICAgICAgICAgICBhZnRlck5vZGU6IGFmdGVyXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuY2xlYW51cERyYWdBcnRpZmFjdHMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRhcmdldFBvc2l0aW9uKHRhcmdldDogSFRNTEVsZW1lbnQsIGV2ZW50OiBDZGtEcmFnTW92ZSkge1xuICAgICAgICBjb25zdCB0YXJnZXRSZWN0ID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBiZWZvcmVPckFmdGVyR2FwID0gdGFyZ2V0UmVjdC5oZWlnaHQgKiAwLjM7XG4gICAgICAgIC8vIOWwhiBOb2RlIOmrmOW6puWIhuS4uuS4iuS4reS4i+S4ieaute+8jOWFtuS4reS4iuS4i+eahCBHYXAg5Li6IGhlaWdodCDnmoQgMzAl77yM6YCa6L+H5Yik5pat6byg5qCH5L2N572u5Zyo5ZOq5LiA5q61IGdhcCDmnaXorqHnrpflr7nlupTnmoTkvY3nva5cbiAgICAgICAgaWYgKGV2ZW50LnBvaW50ZXJQb3NpdGlvbi55IC0gdGFyZ2V0UmVjdC50b3AgPCBiZWZvcmVPckFmdGVyR2FwKSB7XG4gICAgICAgICAgICByZXR1cm4gVGh5VHJlZURyb3BQb3NpdGlvbi5iZWZvcmU7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQucG9pbnRlclBvc2l0aW9uLnkgPj0gdGFyZ2V0UmVjdC5ib3R0b20gLSBiZWZvcmVPckFmdGVyR2FwKSB7XG4gICAgICAgICAgICByZXR1cm4gVGh5VHJlZURyb3BQb3NpdGlvbi5hZnRlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBUaHlUcmVlRHJvcFBvc2l0aW9uLmluO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG93RHJvcFBvc2l0aW9uUGxhY2Vob2xkZXIodGFyZ2V0RWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5jbGVhbnVwRHJvcFBvc2l0aW9uUGxhY2Vob2xkZXIoKTtcbiAgICAgICAgaWYgKHRoaXMubm9kZURyb3BUYXJnZXQgJiYgdGFyZ2V0RWxlbWVudCkge1xuICAgICAgICAgICAgdGFyZ2V0RWxlbWVudC5jbGFzc0xpc3QuYWRkKGBkcm9wLXBvc2l0aW9uLSR7dGhpcy5ub2RlRHJvcFRhcmdldC5wb3NpdGlvbn1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYW51cERyb3BQb3NpdGlvblBsYWNlaG9sZGVyKCkge1xuICAgICAgICB0aGlzLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kcm9wLXBvc2l0aW9uLWJlZm9yZScpLmZvckVhY2goZWxlbWVudCA9PiBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2Ryb3AtcG9zaXRpb24tYmVmb3JlJykpO1xuICAgICAgICB0aGlzLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kcm9wLXBvc2l0aW9uLWFmdGVyJykuZm9yRWFjaChlbGVtZW50ID0+IGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZHJvcC1wb3NpdGlvbi1hZnRlcicpKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZHJvcC1wb3NpdGlvbi1pbicpLmZvckVhY2goZWxlbWVudCA9PiBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2Ryb3AtcG9zaXRpb24taW4nKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhbnVwRHJhZ0FydGlmYWN0cygpIHtcbiAgICAgICAgdGhpcy5ub2RlRHJvcFRhcmdldCA9IG51bGw7XG4gICAgICAgIHRoaXMuY2xlYW51cERyb3BQb3NpdGlvblBsYWNlaG9sZGVyKCk7XG4gICAgfVxuXG4gICAgLy8gcmVnaW9uIFB1YmxpYyBGdW5jdGlvbnNcblxuICAgIHNlbGVjdFRyZWVOb2RlKG5vZGU6IFRoeVRyZWVOb2RlKSB7XG4gICAgICAgIGlmIChub2RlICYmICFub2RlLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChub2RlKTtcbiAgICAgICAgICAgIHRoaXMudGh5VHJlZVNlcnZpY2Uuc3luY0ZsYXR0ZW5UcmVlTm9kZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFJvb3ROb2RlcygpOiBUaHlUcmVlTm9kZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJlZU5vZGVzO1xuICAgIH1cblxuICAgIGdldFRyZWVOb2RlKGtleTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoeVRyZWVTZXJ2aWNlLmdldFRyZWVOb2RlKGtleSk7XG4gICAgfVxuXG4gICAgZ2V0U2VsZWN0ZWROb2RlKCk6IFRoeVRyZWVOb2RlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGVsID8gdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF0gOiBudWxsO1xuICAgIH1cblxuICAgIGdldFNlbGVjdGVkTm9kZXMoKTogVGh5VHJlZU5vZGVbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25Nb2RlbCA/IHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkIDogW107XG4gICAgfVxuXG4gICAgZ2V0RXhwYW5kZWROb2RlcygpOiBUaHlUcmVlTm9kZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGh5VHJlZVNlcnZpY2UuZ2V0RXhwYW5kZWROb2RlcygpO1xuICAgIH1cblxuICAgIGdldENoZWNrZWROb2RlcygpOiBUaHlUcmVlTm9kZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGh5VHJlZVNlcnZpY2UuZ2V0Q2hlY2tlZE5vZGVzKCk7XG4gICAgfVxuXG4gICAgYWRkVHJlZU5vZGUobm9kZTogVGh5VHJlZU5vZGVEYXRhLCBwYXJlbnQ/OiBUaHlUcmVlTm9kZSwgaW5kZXggPSAtMSkge1xuICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLmFkZFRyZWVOb2RlKG5ldyBUaHlUcmVlTm9kZShub2RlLCBudWxsLCB0aGlzLnRoeVRyZWVTZXJ2aWNlKSwgcGFyZW50LCBpbmRleCk7XG4gICAgICAgIHRoaXMudGh5VHJlZVNlcnZpY2Uuc3luY0ZsYXR0ZW5UcmVlTm9kZXMoKTtcbiAgICB9XG5cbiAgICBkZWxldGVUcmVlTm9kZShub2RlOiBUaHlUcmVlTm9kZSkge1xuICAgICAgICBpZiAodGhpcy5pc1NlbGVjdGVkKG5vZGUpKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC50b2dnbGUobm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5kZWxldGVUcmVlTm9kZShub2RlKTtcbiAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5zeW5jRmxhdHRlblRyZWVOb2RlcygpO1xuICAgIH1cblxuICAgIGV4cGFuZEFsbE5vZGVzKCkge1xuICAgICAgICBjb25zdCBub2RlcyA9IHRoaXMuZ2V0Um9vdE5vZGVzKCk7XG4gICAgICAgIG5vZGVzLmZvckVhY2gobiA9PiBuLnNldEV4cGFuZGVkKHRydWUsIHRydWUpKTtcbiAgICB9XG5cbiAgICBjb2xsYXBzZWRBbGxOb2RlcygpIHtcbiAgICAgICAgY29uc3Qgbm9kZXMgPSB0aGlzLmdldFJvb3ROb2RlcygpO1xuICAgICAgICBub2Rlcy5mb3JFYWNoKG4gPT4gbi5zZXRFeHBhbmRlZChmYWxzZSwgdHJ1ZSkpO1xuICAgIH1cblxuICAgIC8vIGVuZHJlZ2lvblxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxufVxuIiwiPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydFxuICAjdmlld3BvcnRcbiAgKm5nSWY9XCJ0aHlWaXJ0dWFsU2Nyb2xsXCJcbiAgW2l0ZW1TaXplXT1cInRoeUl0ZW1TaXplXCJcbiAgW3N0eWxlLmhlaWdodF09XCInMTAwJSdcIlxuICBjZGtEcm9wTGlzdFxuICBbY2RrRHJvcExpc3RBdXRvU2Nyb2xsU3RlcF09XCI2XCJcbiAgW2Nka0Ryb3BMaXN0RGF0YV09XCJmbGF0dGVuVHJlZU5vZGVzXCJcbiAgW2Nka0Ryb3BMaXN0U29ydGluZ0Rpc2FibGVkXT1cInRydWVcIlxuICAoY2RrRHJvcExpc3REcm9wcGVkKT1cIm9uTGlzdERyb3BwZWQoJGV2ZW50KVwiXG4gID5cbiAgPGRpdiBjbGFzcz1cInZpcnR1YWwtdHJlZXMtY29udGFpbmVyXCI+XG4gICAgPHRoeS10cmVlLW5vZGVcbiAgICAgICpjZGtWaXJ0dWFsRm9yPVwibGV0IG5vZGUgb2YgZmxhdHRlblRyZWVOb2RlczsgdHJhY2tCeTogdHJhY2tCeUZuOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgIGNka0RyYWdcbiAgICAgIFtjZGtEcmFnRGF0YV09XCJub2RlXCJcbiAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwiIXRoeURyYWdnYWJsZSB8fCAhKG5vZGUgfCB0cmVlTm9kZURyYWdnYWJsZSA6IHRoeUJlZm9yZURyYWdTdGFydClcIlxuICAgICAgKGNka0RyYWdTdGFydGVkKT1cIm9uRHJhZ1N0YXJ0ZWQoJGV2ZW50KVwiXG4gICAgICAoY2RrRHJhZ0VuZGVkKT1cIm9uRHJhZ0VuZGVkKCRldmVudClcIlxuICAgICAgKGNka0RyYWdNb3ZlZCk9XCJlbWl0RHJhZ01vdmVkKCRldmVudClcIlxuICAgICAgW25vZGVdPVwibm9kZVwiXG4gICAgICBbdGVtcGxhdGVSZWZdPVwidGVtcGxhdGVSZWZcIlxuICAgICAgW2VtcHR5Q2hpbGRyZW5UZW1wbGF0ZVJlZl09XCJlbXB0eUNoaWxkcmVuVGVtcGxhdGVcIlxuICAgICAgW3RoeUFzeW5jXT1cInRoeUFzeW5jXCJcbiAgICAgIFt0aHlEcmFnZ2FibGVdPVwidGh5RHJhZ2dhYmxlXCJcbiAgICAgIFt0aHlDaGVja2FibGVdPVwidGh5Q2hlY2thYmxlXCJcbiAgICAgIFt0aHlNdWx0aXBsZV09XCJ0aHlNdWx0aXBsZVwiXG4gICAgICBbdGh5Q2xpY2tCZWhhdmlvcl09XCJ0aHlDbGlja0JlaGF2aW9yXCJcbiAgICAgIFt0aHlUaXRsZVRydW5jYXRlXT1cInRoeVRpdGxlVHJ1bmNhdGVcIlxuICAgICAgW3RoeUl0ZW1TaXplXT1cInRoeUl0ZW1TaXplXCJcbiAgICAgIFt0aHlJbmRlbnRdPVwidGh5SW5kZW50XCJcbiAgICAgICh0aHlPbkNsaWNrKT1cInRoeU9uQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICh0aHlEYmxDbGljayk9XCJ0aHlEYmxDbGljay5lbWl0KCRldmVudClcIlxuICAgICAgKHRoeU9uRXhwYW5kQ2hhbmdlKT1cImV2ZW50VHJpZ2dlckNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAodGh5T25DaGVja2JveENoYW5nZSk9XCJldmVudFRyaWdnZXJDaGFuZ2VkKCRldmVudClcIj5cbiAgICA8L3RoeS10cmVlLW5vZGU+XG4gIDwvZGl2PlxuPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG5cbjxkaXZcbiAgKm5nSWY9XCIhdGh5VmlydHVhbFNjcm9sbFwiXG4gIGNka0Ryb3BMaXN0XG4gIFtjZGtEcm9wTGlzdEF1dG9TY3JvbGxTdGVwXT1cIjZcIlxuICBbY2RrRHJvcExpc3REYXRhXT1cImZsYXR0ZW5UcmVlTm9kZXNcIlxuICBbY2RrRHJvcExpc3RTb3J0aW5nRGlzYWJsZWRdPVwidHJ1ZVwiXG4gIChjZGtEcm9wTGlzdERyb3BwZWQpPVwib25MaXN0RHJvcHBlZCgkZXZlbnQpXCI+XG4gIDx0aHktdHJlZS1ub2RlXG4gICAgKm5nRm9yPVwibGV0IG5vZGUgb2YgZmxhdHRlblRyZWVOb2RlczsgdHJhY2tCeTogdHJhY2tCeUZuOyBsZXQgaSA9IGluZGV4XCJcbiAgICBjZGtEcmFnXG4gICAgW2Nka0RyYWdEYXRhXT1cIm5vZGVcIlxuICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwiIXRoeURyYWdnYWJsZSB8fCAhKG5vZGUgfCB0cmVlTm9kZURyYWdnYWJsZSA6IHRoeUJlZm9yZURyYWdTdGFydClcIlxuICAgIChjZGtEcmFnU3RhcnRlZCk9XCJvbkRyYWdTdGFydGVkKCRldmVudClcIlxuICAgIChjZGtEcmFnRW5kZWQpPVwib25EcmFnRW5kZWQoJGV2ZW50KVwiXG4gICAgKGNka0RyYWdNb3ZlZCk9XCJlbWl0RHJhZ01vdmVkKCRldmVudClcIlxuICAgIFtub2RlXT1cIm5vZGVcIlxuICAgIFt0ZW1wbGF0ZVJlZl09XCJ0ZW1wbGF0ZVJlZlwiXG4gICAgW2VtcHR5Q2hpbGRyZW5UZW1wbGF0ZVJlZl09XCJlbXB0eUNoaWxkcmVuVGVtcGxhdGVcIlxuICAgIFt0aHlBc3luY109XCJ0aHlBc3luY1wiXG4gICAgW3RoeURyYWdnYWJsZV09XCJ0aHlEcmFnZ2FibGVcIlxuICAgIFt0aHlDaGVja2FibGVdPVwidGh5Q2hlY2thYmxlXCJcbiAgICBbdGh5TXVsdGlwbGVdPVwidGh5TXVsdGlwbGVcIlxuICAgIFt0aHlUaXRsZVRydW5jYXRlXT1cInRoeVRpdGxlVHJ1bmNhdGVcIlxuICAgIFt0aHlJdGVtU2l6ZV09XCJ0aHlJdGVtU2l6ZVwiXG4gICAgW3RoeUNsaWNrQmVoYXZpb3JdPVwidGh5Q2xpY2tCZWhhdmlvclwiXG4gICAgW3RoeUluZGVudF09XCJ0aHlJbmRlbnRcIlxuICAgICh0aHlPbkNsaWNrKT1cInRoeU9uQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAodGh5RGJsQ2xpY2spPVwidGh5RGJsQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAodGh5T25FeHBhbmRDaGFuZ2UpPVwiZXZlbnRUcmlnZ2VyQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAodGh5T25DaGVja2JveENoYW5nZSk9XCJ0aHlPbkNoZWNrYm94Q2hhbmdlLmVtaXQoJGV2ZW50KVwiPlxuICA8L3RoeS10cmVlLW5vZGU+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -122,9 +122,9 @@ export class ThyTreeService {
|
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
124
|
expandTreeNodes(keyOrKeys) {
|
|
125
|
-
const keys = coerceArray(keyOrKeys);
|
|
125
|
+
const keys = keyOrKeys === true ? [] : coerceArray(keyOrKeys);
|
|
126
126
|
const needExpandNodes = this.getParallelTreeNodes(this.treeNodes).filter(node => {
|
|
127
|
-
return keys.indexOf(node.key) > -1;
|
|
127
|
+
return keys.indexOf(node.key) > -1 || keyOrKeys === true;
|
|
128
128
|
});
|
|
129
129
|
needExpandNodes.forEach(node => {
|
|
130
130
|
node.setExpanded(true);
|
|
@@ -184,4 +184,4 @@ export class ThyTreeService {
|
|
|
184
184
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ThyTreeService, decorators: [{
|
|
185
185
|
type: Injectable
|
|
186
186
|
}], ctorParameters: () => [] });
|
|
187
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RyZWUvdHJlZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFFLHFCQUFxQixFQUFtQixNQUFNLGNBQWMsQ0FBQzs7QUFFdEUsU0FBUyxpQkFBaUIsQ0FBQyxJQUFpQjtJQUN4QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUsscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUYsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xHLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQy9DLE9BQU8scUJBQXFCLENBQUMsT0FBTyxDQUFDO0lBQ3pDLENBQUM7U0FBTSxJQUFJLGNBQWMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN4RCxPQUFPLHFCQUFxQixDQUFDLFNBQVMsQ0FBQztJQUMzQyxDQUFDO1NBQU0sQ0FBQztRQUNKLE9BQU8scUJBQXFCLENBQUMsYUFBYSxDQUFDO0lBQy9DLENBQUM7QUFDTCxDQUFDO0FBVUQ7O0dBRUc7QUFFSCxNQUFNLE9BQU8sY0FBYztJQWV2QjtRQVpBLGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBRXZELHFCQUFnQixHQUFrQixFQUFFLENBQUM7UUFFN0Isb0JBQWUsR0FBc0IsRUFBRSxDQUFDO1FBRXpDLGNBQVMsR0FBa0IsRUFBRSxDQUFDO1FBRTlCLHNCQUFpQixHQUFpRCxpQkFBaUIsQ0FBQztRQUUzRixrQkFBYSxHQUFHLElBQUksT0FBTyxFQUEwQixDQUFDO1FBR2xELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3hDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sbUJBQW1CLENBQUMsU0FBNEI7UUFDbkQsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLElBQUksRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFTSxvQkFBb0I7UUFDdkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQy9DLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQ2pDLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxZQUEyQixJQUFJLENBQUMsU0FBUyxFQUFFLGtCQUErQyxJQUFJO1FBQ3ZILE1BQU0sZUFBZSxHQUFrQixFQUFFLENBQUM7UUFDMUMsU0FBUyxxQkFBcUIsQ0FBQyxJQUFtQjtZQUM5QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ3BDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQy9CLE1BQU0sbUJBQW1CLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztnQkFDdEcsSUFBSSxtQkFBbUIsSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQzdDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDN0MsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUNELHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sZUFBZSxDQUFDO0lBQzNCLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxVQUF3RCxpQkFBaUI7UUFDMUYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQztJQUNyQyxDQUFDO0lBRU0sb0JBQW9CLENBQUMsU0FBd0IsRUFBRSxNQUFvQjtRQUN0RSxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7WUFDekIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sV0FBVyxDQUFDLEdBQW9CO1FBQ25DLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0QsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRU0sZ0JBQWdCO1FBQ25CLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0QsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTSxlQUFlO1FBQ2xCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0QsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRU0sY0FBYyxDQUFDLElBQWlCO1FBQ25DLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQzFDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNiLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDcEUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM3QyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDSixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hFLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDMUMsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRU0sV0FBVyxDQUFDLElBQWlCLEVBQUUsTUFBb0IsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2xFLElBQUksTUFBTSxFQUFFLENBQUM7WUFDVCxNQUFNLFVBQVUsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM5RCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNiLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDakQsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7WUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEMsQ0FBQzthQUFNLENBQUM7WUFDSixNQUFNLFVBQVUsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM1RCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNiLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDaEQsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3BDLENBQUM7WUFDRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9ELHVDQUF1QztRQUMzQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLGVBQWUsQ0FBQyxTQUFnRDtRQUNuRSxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDNUUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztRQUNILGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxXQUFXO0lBQ0osY0FBYyxDQUFDLElBQWlCLEVBQUUsT0FBZ0IsRUFBRSxXQUFXLEdBQUcsSUFBSSxFQUFFLGFBQWEsR0FBRyxJQUFJO1FBQy9GLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVPLGVBQWUsQ0FBQyxJQUFpQixFQUFFLE9BQWdCLEVBQUUsV0FBVyxHQUFHLElBQUksRUFBRSxhQUFhLEdBQUcsSUFBSTtRQUNqRyxJQUFJLGFBQWEsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDeEQsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNuQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksT0FBTyxFQUFFLENBQUM7b0JBQ1YsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUsscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQzNHLElBQUksQ0FBQyxTQUFTLEdBQUcsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsYUFBYSxDQUFDO29CQUM1RyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxvQkFBb0IsSUFBSSxPQUFPLENBQUM7Z0JBQzFELENBQUM7cUJBQU0sQ0FBQztvQkFDSixNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDL0csSUFBSSxDQUFDLFNBQVMsR0FBRyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUM7b0JBQ2hILElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLHNCQUFzQixJQUFJLE9BQU8sQ0FBQztnQkFDNUQsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUM7Z0JBQzNGLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztZQUNsQyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksV0FBVyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlDLENBQUM7SUFDTCxDQUFDO0lBRU0sa0JBQWtCLENBQUMsSUFBaUI7UUFDdkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxJQUFpQjtRQUN6QyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1AsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQzlCLENBQUM7OEdBL0tRLGNBQWM7a0hBQWQsY0FBYzs7MkZBQWQsY0FBYztrQkFEMUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvZXJjZUFycmF5LCBpc0Z1bmN0aW9uIH0gZnJvbSAnbmd4LXRldGh5cy91dGlsJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUaHlUcmVlTm9kZSB9IGZyb20gJy4vdHJlZS1ub2RlLmNsYXNzJztcbmltcG9ydCB7IFRoeVRyZWVOb2RlQ2hlY2tTdGF0ZSwgVGh5VHJlZU5vZGVEYXRhIH0gZnJvbSAnLi90cmVlLmNsYXNzJztcblxuZnVuY3Rpb24gY2hlY2tTdGF0ZVJlc29sdmUobm9kZTogVGh5VHJlZU5vZGUpIHtcbiAgICBjb25zdCBjaGVja2VkTm9kZXMgPSBub2RlLmNoaWxkcmVuLmZpbHRlcihuID0+IG4uaXNDaGVja2VkID09PSBUaHlUcmVlTm9kZUNoZWNrU3RhdGUuY2hlY2tlZCk7XG4gICAgY29uc3QgdW5DaGVja2VkTm9kZXMgPSBub2RlLmNoaWxkcmVuLmZpbHRlcihuID0+IG4uaXNDaGVja2VkID09PSBUaHlUcmVlTm9kZUNoZWNrU3RhdGUudW5jaGVja2VkKTtcbiAgICBpZiAoY2hlY2tlZE5vZGVzLmxlbmd0aCA9PT0gbm9kZS5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFRoeVRyZWVOb2RlQ2hlY2tTdGF0ZS5jaGVja2VkO1xuICAgIH0gZWxzZSBpZiAodW5DaGVja2VkTm9kZXMubGVuZ3RoID09PSBub2RlLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gVGh5VHJlZU5vZGVDaGVja1N0YXRlLnVuY2hlY2tlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gVGh5VHJlZU5vZGVDaGVja1N0YXRlLmluZGV0ZXJtaW5hdGU7XG4gICAgfVxufVxuXG50eXBlIEZsYXR0ZW5BbGxOb2Rlc0NiID0gKHRyZWVOb2RlOiBUaHlUcmVlTm9kZSkgPT4gYm9vbGVhbjtcblxuZXhwb3J0IGludGVyZmFjZSBUaHlUcmVlRm9ybWF0RW1pdEV2ZW50IHtcbiAgICBldmVudE5hbWU6IHN0cmluZztcbiAgICBub2RlOiBUaHlUcmVlTm9kZTtcbiAgICBldmVudD86IE1vdXNlRXZlbnQgfCBEcmFnRXZlbnQ7XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUaHlUcmVlU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgc2VsZWN0ZWROb2RlITogVGh5VHJlZU5vZGU7XG5cbiAgICBmbGF0dGVuTm9kZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUaHlUcmVlTm9kZVtdPihbXSk7XG5cbiAgICBmbGF0dGVuVHJlZU5vZGVzOiBUaHlUcmVlTm9kZVtdID0gW107XG5cbiAgICBwcml2YXRlIG9yaWdpblRyZWVOb2RlczogVGh5VHJlZU5vZGVEYXRhW10gPSBbXTtcblxuICAgIHB1YmxpYyB0cmVlTm9kZXM6IFRoeVRyZWVOb2RlW10gPSBbXTtcblxuICAgIHB1YmxpYyBjaGVja1N0YXRlUmVzb2x2ZTogKG5vZGU6IFRoeVRyZWVOb2RlKSA9PiBUaHlUcmVlTm9kZUNoZWNrU3RhdGUgPSBjaGVja1N0YXRlUmVzb2x2ZTtcblxuICAgIHN0YXR1c0NoYW5nZSQgPSBuZXcgU3ViamVjdDxUaHlUcmVlRm9ybWF0RW1pdEV2ZW50PigpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuc3RhdHVzQ2hhbmdlJC5waXBlKCkuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3luY0ZsYXR0ZW5UcmVlTm9kZXMoKTtcbiAgICAgICAgICAgIHRoaXMuc3luY05vZGVDaGVja1N0YXRlKGV2ZW50Lm5vZGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW5pdGlhbGl6ZVRyZWVOb2Rlcyhyb290Tm9kZXM6IFRoeVRyZWVOb2RlRGF0YVtdKSB7XG4gICAgICAgIHRoaXMub3JpZ2luVHJlZU5vZGVzID0gcm9vdE5vZGVzIHx8IFtdO1xuICAgICAgICB0aGlzLnRyZWVOb2RlcyA9IChyb290Tm9kZXMgfHwgW10pLm1hcChub2RlID0+IG5ldyBUaHlUcmVlTm9kZShub2RlLCBudWxsLCB0aGlzKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN5bmNGbGF0dGVuVHJlZU5vZGVzKCkge1xuICAgICAgICB0aGlzLmZsYXR0ZW5UcmVlTm9kZXMgPSB0aGlzLmdldFBhcmFsbGVsVHJlZU5vZGVzKHRoaXMudHJlZU5vZGVzLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuZmxhdHRlbk5vZGVzJC5uZXh0KHRoaXMuZmxhdHRlblRyZWVOb2Rlcyk7XG4gICAgICAgIHJldHVybiB0aGlzLmZsYXR0ZW5UcmVlTm9kZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQYXJhbGxlbFRyZWVOb2Rlcyhyb290VHJlZXM6IFRoeVRyZWVOb2RlW10gPSB0aGlzLnRyZWVOb2RlcywgZmxhdHRlbkFsbE5vZGVzOiBib29sZWFuIHwgRmxhdHRlbkFsbE5vZGVzQ2IgPSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IGZsYXR0ZW5UcmVlRGF0YTogVGh5VHJlZU5vZGVbXSA9IFtdO1xuICAgICAgICBmdW5jdGlvbiBfZ2V0UGFyYWxsZWxUcmVlTm9kZXMobGlzdDogVGh5VHJlZU5vZGVbXSkge1xuICAgICAgICAgICAgcmV0dXJuIGxpc3QuZm9yRWFjaCgodHJlZU5vZGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgZmxhdHRlblRyZWVEYXRhLnB1c2godHJlZU5vZGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZsYXR0ZW5BbGxOb2Rlc0ZsYWcgPSBpc0Z1bmN0aW9uKGZsYXR0ZW5BbGxOb2RlcykgPyBmbGF0dGVuQWxsTm9kZXModHJlZU5vZGUpIDogZmxhdHRlbkFsbE5vZGVzO1xuICAgICAgICAgICAgICAgIGlmIChmbGF0dGVuQWxsTm9kZXNGbGFnIHx8IHRyZWVOb2RlLmlzRXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgX2dldFBhcmFsbGVsVHJlZU5vZGVzKHRyZWVOb2RlLmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBfZ2V0UGFyYWxsZWxUcmVlTm9kZXMocm9vdFRyZWVzKTtcbiAgICAgICAgcmV0dXJuIGZsYXR0ZW5UcmVlRGF0YTtcbiAgICB9XG5cbiAgICBzZXRDaGVja1N0YXRlUmVzb2x2ZShyZXNvbHZlOiAobm9kZTogVGh5VHJlZU5vZGUpID0+IFRoeVRyZWVOb2RlQ2hlY2tTdGF0ZSA9IGNoZWNrU3RhdGVSZXNvbHZlKSB7XG4gICAgICAgIHRoaXMuY2hlY2tTdGF0ZVJlc29sdmUgPSByZXNvbHZlO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNldFNvcnRlZFRyZWVOb2Rlcyh0cmVlTm9kZXM6IFRoeVRyZWVOb2RlW10sIHBhcmVudD86IFRoeVRyZWVOb2RlKSB7XG4gICAgICAgIHRyZWVOb2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgbm9kZS5sZXZlbCA9IG5vZGUucGFyZW50Tm9kZSA/IG5vZGUucGFyZW50Tm9kZS5sZXZlbCArIDEgOiAwO1xuICAgICAgICAgICAgbm9kZS5vcmlnaW4uY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLm1hcChuID0+IG4ub3JpZ2luKTtcbiAgICAgICAgICAgIG5vZGUucGFyZW50Tm9kZSA9IHBhcmVudDtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTb3J0ZWRUcmVlTm9kZXMobm9kZS5jaGlsZHJlbiwgbm9kZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUcmVlTm9kZShrZXk6IHN0cmluZyB8IG51bWJlcikge1xuICAgICAgICBjb25zdCBhbGxOb2RlcyA9IHRoaXMuZ2V0UGFyYWxsZWxUcmVlTm9kZXModGhpcy50cmVlTm9kZXMpO1xuICAgICAgICByZXR1cm4gYWxsTm9kZXMuZmluZChuID0+IG4ua2V5ID09PSBrZXkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRFeHBhbmRlZE5vZGVzKCk6IFRoeVRyZWVOb2RlW10ge1xuICAgICAgICBjb25zdCBhbGxOb2RlcyA9IHRoaXMuZ2V0UGFyYWxsZWxUcmVlTm9kZXModGhpcy50cmVlTm9kZXMpO1xuICAgICAgICByZXR1cm4gYWxsTm9kZXMuZmlsdGVyKG4gPT4gbi5pc0V4cGFuZGVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q2hlY2tlZE5vZGVzKCk6IFRoeVRyZWVOb2RlW10ge1xuICAgICAgICBjb25zdCBhbGxOb2RlcyA9IHRoaXMuZ2V0UGFyYWxsZWxUcmVlTm9kZXModGhpcy50cmVlTm9kZXMpO1xuICAgICAgICByZXR1cm4gYWxsTm9kZXMuZmlsdGVyKG4gPT4gbi5pc0NoZWNrZWQgPT09IFRoeVRyZWVOb2RlQ2hlY2tTdGF0ZS5jaGVja2VkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVsZXRlVHJlZU5vZGUobm9kZTogVGh5VHJlZU5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBub2RlLnBhcmVudE5vZGUuY2hpbGRyZW47XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGNoaWxkcmVuLmZpbmRJbmRleChuID0+IG4ua2V5ID09PSBub2RlLmtleSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgbm9kZS5wYXJlbnROb2RlLm9yaWdpbi5jaGlsZHJlbiA9IGNoaWxkcmVuLm1hcChpdGVtID0+IGl0ZW0ub3JpZ2luKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN5bmNOb2RlQ2hlY2tTdGF0ZShub2RlLnBhcmVudE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnRyZWVOb2Rlcy5maW5kSW5kZXgobiA9PiBuLmtleSA9PT0gbm9kZS5rZXkpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVOb2Rlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgIHRoaXMub3JpZ2luVHJlZU5vZGVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkVHJlZU5vZGUobm9kZTogVGh5VHJlZU5vZGUsIHBhcmVudD86IFRoeVRyZWVOb2RlLCBpbmRleCA9IC0xKSB7XG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGluc2VydE5vZGUgPSBuZXcgVGh5VHJlZU5vZGUobm9kZS5vcmlnaW4sIHBhcmVudCwgdGhpcyk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIHBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGluc2VydE5vZGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChpbnNlcnROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmVudC5vcmlnaW4uY2hpbGRyZW4gPSBwYXJlbnQuY2hpbGRyZW4ubWFwKGl0ZW0gPT4gaXRlbS5vcmlnaW4pO1xuICAgICAgICAgICAgdGhpcy5zeW5jTm9kZUNoZWNrU3RhdGUocGFyZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGluc2VydE5vZGUgPSBuZXcgVGh5VHJlZU5vZGUobm9kZS5vcmlnaW4sIG51bGwsIHRoaXMpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVOb2Rlcy5zcGxpY2UoaW5kZXgsIDAsIGluc2VydE5vZGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVOb2Rlcy5wdXNoKGluc2VydE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vcmlnaW5UcmVlTm9kZXMgPSB0aGlzLnRyZWVOb2Rlcy5tYXAoaXRlbSA9PiBpdGVtLm9yaWdpbik7XG4gICAgICAgICAgICAvLyB0aGlzLnN5bmNOb2RlQ2hlY2tTdGF0ZShpbnNlcnROb2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBleHBhbmRUcmVlTm9kZXMoa2V5T3JLZXlzOiBzdHJpbmcgfCBudW1iZXIgfCAoc3RyaW5nIHwgbnVtYmVyKVtdKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBjb2VyY2VBcnJheShrZXlPcktleXMpO1xuICAgICAgICBjb25zdCBuZWVkRXhwYW5kTm9kZXMgPSB0aGlzLmdldFBhcmFsbGVsVHJlZU5vZGVzKHRoaXMudHJlZU5vZGVzKS5maWx0ZXIobm9kZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ga2V5cy5pbmRleE9mKG5vZGUua2V5KSA+IC0xO1xuICAgICAgICB9KTtcbiAgICAgICAgbmVlZEV4cGFuZE5vZGVzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICBub2RlLnNldEV4cGFuZGVkKHRydWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zeW5jRmxhdHRlblRyZWVOb2RlcygpO1xuICAgIH1cblxuICAgIC8vIOiuvue9ruiKgueCuemAieS4reeKtuaAgVxuICAgIHB1YmxpYyBzZXROb2RlQ2hlY2tlZChub2RlOiBUaHlUcmVlTm9kZSwgY2hlY2tlZDogYm9vbGVhbiwgcHJvcGFnYXRlVXAgPSB0cnVlLCBwcm9wYWdhdGVEb3duID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLl9zZXROb2RlQ2hlY2tlZChub2RlLCBjaGVja2VkLCBwcm9wYWdhdGVVcCwgcHJvcGFnYXRlRG93bik7XG4gICAgICAgIHRoaXMuc3luY0ZsYXR0ZW5UcmVlTm9kZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXROb2RlQ2hlY2tlZChub2RlOiBUaHlUcmVlTm9kZSwgY2hlY2tlZDogYm9vbGVhbiwgcHJvcGFnYXRlVXAgPSB0cnVlLCBwcm9wYWdhdGVEb3duID0gdHJ1ZSkge1xuICAgICAgICBpZiAocHJvcGFnYXRlRG93biAmJiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goc3ViTm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0Tm9kZUNoZWNrZWQoc3ViTm9kZSwgY2hlY2tlZCwgZmFsc2UsIHRydWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFub2RlLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQWxsQ2hpbGRyZW5DaGVja2VkID0gbm9kZS5jaGlsZHJlbi5ldmVyeShpdGVtID0+IGl0ZW0uaXNDaGVja2VkID09PSBUaHlUcmVlTm9kZUNoZWNrU3RhdGUuY2hlY2tlZCk7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuaXNDaGVja2VkID0gaXNBbGxDaGlsZHJlbkNoZWNrZWQgPyBUaHlUcmVlTm9kZUNoZWNrU3RhdGUuY2hlY2tlZCA6IFRoeVRyZWVOb2RlQ2hlY2tTdGF0ZS5pbmRldGVybWluYXRlO1xuICAgICAgICAgICAgICAgICAgICBub2RlLm9yaWdpbi5jaGVja2VkID0gaXNBbGxDaGlsZHJlbkNoZWNrZWQgJiYgY2hlY2tlZDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0FsbENoaWxkcmVuVW5DaGVja2VkID0gbm9kZS5jaGlsZHJlbi5ldmVyeShpdGVtID0+IGl0ZW0uaXNDaGVja2VkID09PSBUaHlUcmVlTm9kZUNoZWNrU3RhdGUudW5jaGVja2VkKTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5pc0NoZWNrZWQgPSBpc0FsbENoaWxkcmVuVW5DaGVja2VkID8gVGh5VHJlZU5vZGVDaGVja1N0YXRlLnVuY2hlY2tlZCA6IFRoeVRyZWVOb2RlQ2hlY2tTdGF0ZS5pbmRldGVybWluYXRlO1xuICAgICAgICAgICAgICAgICAgICBub2RlLm9yaWdpbi5jaGVja2VkID0gaXNBbGxDaGlsZHJlblVuQ2hlY2tlZCAmJiBjaGVja2VkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbm9kZS5pc0NoZWNrZWQgPSBjaGVja2VkID8gVGh5VHJlZU5vZGVDaGVja1N0YXRlLmNoZWNrZWQgOiBUaHlUcmVlTm9kZUNoZWNrU3RhdGUudW5jaGVja2VkO1xuICAgICAgICAgICAgICAgIG5vZGUub3JpZ2luLmNoZWNrZWQgPSBjaGVja2VkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wYWdhdGVVcCkge1xuICAgICAgICAgICAgdGhpcy5fc3luY05vZGVDaGVja1N0YXRlKG5vZGUucGFyZW50Tm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3luY05vZGVDaGVja1N0YXRlKG5vZGU6IFRoeVRyZWVOb2RlKSB7XG4gICAgICAgIHRoaXMuX3N5bmNOb2RlQ2hlY2tTdGF0ZShub2RlKTtcbiAgICAgICAgdGhpcy5zeW5jRmxhdHRlblRyZWVOb2RlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3N5bmNOb2RlQ2hlY2tTdGF0ZShub2RlOiBUaHlUcmVlTm9kZSkge1xuICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgbm9kZS5pc0NoZWNrZWQgPSB0aGlzLmNoZWNrU3RhdGVSZXNvbHZlKG5vZGUpO1xuICAgICAgICAgICAgdGhpcy5fc3luY05vZGVDaGVja1N0YXRlKG5vZGUucGFyZW50Tm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdGF0dXNDaGFuZ2UkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuc3RhdHVzQ2hhbmdlJCA9IG51bGw7XG4gICAgfVxufVxuIl19
|
|
187
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RyZWUvdHJlZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFFLHFCQUFxQixFQUFtQixNQUFNLGNBQWMsQ0FBQzs7QUFFdEUsU0FBUyxpQkFBaUIsQ0FBQyxJQUFpQjtJQUN4QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUsscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUYsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xHLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQy9DLE9BQU8scUJBQXFCLENBQUMsT0FBTyxDQUFDO0lBQ3pDLENBQUM7U0FBTSxJQUFJLGNBQWMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN4RCxPQUFPLHFCQUFxQixDQUFDLFNBQVMsQ0FBQztJQUMzQyxDQUFDO1NBQU0sQ0FBQztRQUNKLE9BQU8scUJBQXFCLENBQUMsYUFBYSxDQUFDO0lBQy9DLENBQUM7QUFD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SUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUM5QixDQUFDOzhHQS9LUSxjQUFjO2tIQUFkLGNBQWM7OzJGQUFkLGNBQWM7a0JBRDFCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VBcnJheSwgaXNGdW5jdGlvbiB9IGZyb20gJ25neC10ZXRoeXMvdXRpbCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGh5VHJlZU5vZGUgfSBmcm9tICcuL3RyZWUtbm9kZS5jbGFzcyc7XG5pbXBvcnQgeyBUaHlUcmVlTm9kZUNoZWNrU3RhdGUsIFRoeVRyZWVOb2RlRGF0YSB9IGZyb20gJy4vdHJlZS5jbGFzcyc7XG5cbmZ1bmN0aW9uIGNoZWNrU3RhdGVSZXNvbHZlKG5vZGU6IFRoeVRyZWVOb2RlKSB7XG4gICAgY29uc3QgY2hlY2tlZE5vZGVzID0gbm9kZS5jaGlsZHJlbi5maWx0ZXIobiA9PiBuLmlzQ2hlY2tlZCA9PT0gVGh5VHJlZU5vZGVDaGVja1N0YXRlLmNoZWNrZWQpO1xuICAgIGNvbnN0IHVuQ2hlY2tlZE5vZGVzID0gbm9kZS5jaGlsZHJlbi5maWx0ZXIobiA9PiBuLmlzQ2hlY2tlZCA9PT0gVGh5VHJlZU5vZGVDaGVja1N0YXRlLnVuY2hlY2tlZCk7XG4gICAgaWYgKGNoZWNrZWROb2Rlcy5sZW5ndGggPT09IG5vZGUuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBUaHlUcmVlTm9kZUNoZWNrU3RhdGUuY2hlY2tlZDtcbiAgICB9IGVsc2UgaWYgKHVuQ2hlY2tlZE5vZGVzLmxlbmd0aCA9PT0gbm9kZS5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFRoeVRyZWVOb2RlQ2hlY2tTdGF0ZS51bmNoZWNrZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFRoeVRyZWVOb2RlQ2hlY2tTdGF0ZS5pbmRldGVybWluYXRlO1xuICAgIH1cbn1cblxudHlwZSBGbGF0dGVuQWxsTm9kZXNDYiA9ICh0cmVlTm9kZTogVGh5VHJlZU5vZGUpID0+IGJvb2xlYW47XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGh5VHJlZUZvcm1hdEVtaXRFdmVudCB7XG4gICAgZXZlbnROYW1lOiBzdHJpbmc7XG4gICAgbm9kZTogVGh5VHJlZU5vZGU7XG4gICAgZXZlbnQ/OiBNb3VzZUV2ZW50IHwgRHJhZ0V2ZW50O1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVGh5VHJlZVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIHNlbGVjdGVkTm9kZSE6IFRoeVRyZWVOb2RlO1xuXG4gICAgZmxhdHRlbk5vZGVzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGh5VHJlZU5vZGVbXT4oW10pO1xuXG4gICAgZmxhdHRlblRyZWVOb2RlczogVGh5VHJlZU5vZGVbXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBvcmlnaW5UcmVlTm9kZXM6IFRoeVRyZWVOb2RlRGF0YVtdID0gW107XG5cbiAgICBwdWJsaWMgdHJlZU5vZGVzOiBUaHlUcmVlTm9kZVtdID0gW107XG5cbiAgICBwdWJsaWMgY2hlY2tTdGF0ZVJlc29sdmU6IChub2RlOiBUaHlUcmVlTm9kZSkgPT4gVGh5VHJlZU5vZGVDaGVja1N0YXRlID0gY2hlY2tTdGF0ZVJlc29sdmU7XG5cbiAgICBzdGF0dXNDaGFuZ2UkID0gbmV3IFN1YmplY3Q8VGh5VHJlZUZvcm1hdEVtaXRFdmVudD4oKTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnN0YXR1c0NoYW5nZSQucGlwZSgpLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgICB0aGlzLnN5bmNGbGF0dGVuVHJlZU5vZGVzKCk7XG4gICAgICAgICAgICB0aGlzLnN5bmNOb2RlQ2hlY2tTdGF0ZShldmVudC5ub2RlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGluaXRpYWxpemVUcmVlTm9kZXMocm9vdE5vZGVzOiBUaHlUcmVlTm9kZURhdGFbXSkge1xuICAgICAgICB0aGlzLm9yaWdpblRyZWVOb2RlcyA9IHJvb3ROb2RlcyB8fCBbXTtcbiAgICAgICAgdGhpcy50cmVlTm9kZXMgPSAocm9vdE5vZGVzIHx8IFtdKS5tYXAobm9kZSA9PiBuZXcgVGh5VHJlZU5vZGUobm9kZSwgbnVsbCwgdGhpcykpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzeW5jRmxhdHRlblRyZWVOb2RlcygpIHtcbiAgICAgICAgdGhpcy5mbGF0dGVuVHJlZU5vZGVzID0gdGhpcy5nZXRQYXJhbGxlbFRyZWVOb2Rlcyh0aGlzLnRyZWVOb2RlcywgZmFsc2UpO1xuICAgICAgICB0aGlzLmZsYXR0ZW5Ob2RlcyQubmV4dCh0aGlzLmZsYXR0ZW5UcmVlTm9kZXMpO1xuICAgICAgICByZXR1cm4gdGhpcy5mbGF0dGVuVHJlZU5vZGVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGFyYWxsZWxUcmVlTm9kZXMocm9vdFRyZWVzOiBUaHlUcmVlTm9kZVtdID0gdGhpcy50cmVlTm9kZXMsIGZsYXR0ZW5BbGxOb2RlczogYm9vbGVhbiB8IEZsYXR0ZW5BbGxOb2Rlc0NiID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBmbGF0dGVuVHJlZURhdGE6IFRoeVRyZWVOb2RlW10gPSBbXTtcbiAgICAgICAgZnVuY3Rpb24gX2dldFBhcmFsbGVsVHJlZU5vZGVzKGxpc3Q6IFRoeVRyZWVOb2RlW10pIHtcbiAgICAgICAgICAgIHJldHVybiBsaXN0LmZvckVhY2goKHRyZWVOb2RlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGZsYXR0ZW5UcmVlRGF0YS5wdXNoKHRyZWVOb2RlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmbGF0dGVuQWxsTm9kZXNGbGFnID0gaXNGdW5jdGlvbihmbGF0dGVuQWxsTm9kZXMpID8gZmxhdHRlbkFsbE5vZGVzKHRyZWVOb2RlKSA6IGZsYXR0ZW5BbGxOb2RlcztcbiAgICAgICAgICAgICAgICBpZiAoZmxhdHRlbkFsbE5vZGVzRmxhZyB8fCB0cmVlTm9kZS5pc0V4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIF9nZXRQYXJhbGxlbFRyZWVOb2Rlcyh0cmVlTm9kZS5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgX2dldFBhcmFsbGVsVHJlZU5vZGVzKHJvb3RUcmVlcyk7XG4gICAgICAgIHJldHVybiBmbGF0dGVuVHJlZURhdGE7XG4gICAgfVxuXG4gICAgc2V0Q2hlY2tTdGF0ZVJlc29sdmUocmVzb2x2ZTogKG5vZGU6IFRoeVRyZWVOb2RlKSA9PiBUaHlUcmVlTm9kZUNoZWNrU3RhdGUgPSBjaGVja1N0YXRlUmVzb2x2ZSkge1xuICAgICAgICB0aGlzLmNoZWNrU3RhdGVSZXNvbHZlID0gcmVzb2x2ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXRTb3J0ZWRUcmVlTm9kZXModHJlZU5vZGVzOiBUaHlUcmVlTm9kZVtdLCBwYXJlbnQ/OiBUaHlUcmVlTm9kZSkge1xuICAgICAgICB0cmVlTm9kZXMuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgIG5vZGUubGV2ZWwgPSBub2RlLnBhcmVudE5vZGUgPyBub2RlLnBhcmVudE5vZGUubGV2ZWwgKyAxIDogMDtcbiAgICAgICAgICAgIG5vZGUub3JpZ2luLmNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbi5tYXAobiA9PiBuLm9yaWdpbik7XG4gICAgICAgICAgICBub2RlLnBhcmVudE5vZGUgPSBwYXJlbnQ7XG4gICAgICAgICAgICB0aGlzLnJlc2V0U29ydGVkVHJlZU5vZGVzKG5vZGUuY2hpbGRyZW4sIG5vZGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VHJlZU5vZGUoa2V5OiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgYWxsTm9kZXMgPSB0aGlzLmdldFBhcmFsbGVsVHJlZU5vZGVzKHRoaXMudHJlZU5vZGVzKTtcbiAgICAgICAgcmV0dXJuIGFsbE5vZGVzLmZpbmQobiA9PiBuLmtleSA9PT0ga2V5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RXhwYW5kZWROb2RlcygpOiBUaHlUcmVlTm9kZVtdIHtcbiAgICAgICAgY29uc3QgYWxsTm9kZXMgPSB0aGlzLmdldFBhcmFsbGVsVHJlZU5vZGVzKHRoaXMudHJlZU5vZGVzKTtcbiAgICAgICAgcmV0dXJuIGFsbE5vZGVzLmZpbHRlcihuID0+IG4uaXNFeHBhbmRlZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENoZWNrZWROb2RlcygpOiBUaHlUcmVlTm9kZVtdIHtcbiAgICAgICAgY29uc3QgYWxsTm9kZXMgPSB0aGlzLmdldFBhcmFsbGVsVHJlZU5vZGVzKHRoaXMudHJlZU5vZGVzKTtcbiAgICAgICAgcmV0dXJuIGFsbE5vZGVzLmZpbHRlcihuID0+IG4uaXNDaGVja2VkID09PSBUaHlUcmVlTm9kZUNoZWNrU3RhdGUuY2hlY2tlZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlbGV0ZVRyZWVOb2RlKG5vZGU6IFRoeVRyZWVOb2RlKSB7XG4gICAgICAgIGlmIChub2RlLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gbm9kZS5wYXJlbnROb2RlLmNoaWxkcmVuO1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjaGlsZHJlbi5maW5kSW5kZXgobiA9PiBuLmtleSA9PT0gbm9kZS5rZXkpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgIG5vZGUucGFyZW50Tm9kZS5vcmlnaW4uY2hpbGRyZW4gPSBjaGlsZHJlbi5tYXAoaXRlbSA9PiBpdGVtLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgdGhpcy5zeW5jTm9kZUNoZWNrU3RhdGUobm9kZS5wYXJlbnROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy50cmVlTm9kZXMuZmluZEluZGV4KG4gPT4gbi5rZXkgPT09IG5vZGUua2V5KTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlTm9kZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9yaWdpblRyZWVOb2Rlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFRyZWVOb2RlKG5vZGU6IFRoeVRyZWVOb2RlLCBwYXJlbnQ/OiBUaHlUcmVlTm9kZSwgaW5kZXggPSAtMSkge1xuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICBjb25zdCBpbnNlcnROb2RlID0gbmV3IFRoeVRyZWVOb2RlKG5vZGUub3JpZ2luLCBwYXJlbnQsIHRoaXMpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnQuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBpbnNlcnROb2RlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2goaW5zZXJ0Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJlbnQub3JpZ2luLmNoaWxkcmVuID0gcGFyZW50LmNoaWxkcmVuLm1hcChpdGVtID0+IGl0ZW0ub3JpZ2luKTtcbiAgICAgICAgICAgIHRoaXMuc3luY05vZGVDaGVja1N0YXRlKHBhcmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpbnNlcnROb2RlID0gbmV3IFRoeVRyZWVOb2RlKG5vZGUub3JpZ2luLCBudWxsLCB0aGlzKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlTm9kZXMuc3BsaWNlKGluZGV4LCAwLCBpbnNlcnROb2RlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlTm9kZXMucHVzaChpbnNlcnROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub3JpZ2luVHJlZU5vZGVzID0gdGhpcy50cmVlTm9kZXMubWFwKGl0ZW0gPT4gaXRlbS5vcmlnaW4pO1xuICAgICAgICAgICAgLy8gdGhpcy5zeW5jTm9kZUNoZWNrU3RhdGUoaW5zZXJ0Tm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZXhwYW5kVHJlZU5vZGVzKGtleU9yS2V5czogc3RyaW5nIHwgbnVtYmVyIHwgKHN0cmluZyB8IG51bWJlcilbXSB8IHRydWUpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IGtleU9yS2V5cyA9PT0gdHJ1ZSA/IFtdIDogY29lcmNlQXJyYXkoa2V5T3JLZXlzKTtcbiAgICAgICAgY29uc3QgbmVlZEV4cGFuZE5vZGVzID0gdGhpcy5nZXRQYXJhbGxlbFRyZWVOb2Rlcyh0aGlzLnRyZWVOb2RlcykuZmlsdGVyKG5vZGUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGtleXMuaW5kZXhPZihub2RlLmtleSkgPiAtMSB8fCBrZXlPcktleXMgPT09IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBuZWVkRXhwYW5kTm9kZXMuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgIG5vZGUuc2V0RXhwYW5kZWQodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN5bmNGbGF0dGVuVHJlZU5vZGVzKCk7XG4gICAgfVxuXG4gICAgLy8g6K6+572u6IqC54K56YCJ5Lit54q25oCBXG4gICAgcHVibGljIHNldE5vZGVDaGVja2VkKG5vZGU6IFRoeVRyZWVOb2RlLCBjaGVja2VkOiBib29sZWFuLCBwcm9wYWdhdGVVcCA9IHRydWUsIHByb3BhZ2F0ZURvd24gPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuX3NldE5vZGVDaGVja2VkKG5vZGUsIGNoZWNrZWQsIHByb3BhZ2F0ZVVwLCBwcm9wYWdhdGVEb3duKTtcbiAgICAgICAgdGhpcy5zeW5jRmxhdHRlblRyZWVOb2RlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldE5vZGVDaGVja2VkKG5vZGU6IFRoeVRyZWVOb2RlLCBjaGVja2VkOiBib29sZWFuLCBwcm9wYWdhdGVVcCA9IHRydWUsIHByb3BhZ2F0ZURvd24gPSB0cnVlKSB7XG4gICAgICAgIGlmIChwcm9wYWdhdGVEb3duICYmIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaChzdWJOb2RlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXROb2RlQ2hlY2tlZChzdWJOb2RlLCBjaGVja2VkLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW5vZGUuaXNEaXNhYmxlZCkge1xuICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNBbGxDaGlsZHJlbkNoZWNrZWQgPSBub2RlLmNoaWxkcmVuLmV2ZXJ5KGl0ZW0gPT4gaXRlbS5pc0NoZWNrZWQgPT09IFRoeVRyZWVOb2RlQ2hlY2tTdGF0ZS5jaGVja2VkKTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5pc0NoZWNrZWQgPSBpc0FsbENoaWxkcmVuQ2hlY2tlZCA/IFRoeVRyZWVOb2RlQ2hlY2tTdGF0ZS5jaGVja2VkIDogVGh5VHJlZU5vZGVDaGVja1N0YXRlLmluZGV0ZXJtaW5hdGU7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUub3JpZ2luLmNoZWNrZWQgPSBpc0FsbENoaWxkcmVuQ2hlY2tlZCAmJiBjaGVja2VkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQWxsQ2hpbGRyZW5VbkNoZWNrZWQgPSBub2RlLmNoaWxkcmVuLmV2ZXJ5KGl0ZW0gPT4gaXRlbS5pc0NoZWNrZWQgPT09IFRoeVRyZWVOb2RlQ2hlY2tTdGF0ZS51bmNoZWNrZWQpO1xuICAgICAgICAgICAgICAgICAgICBub2RlLmlzQ2hlY2tlZCA9IGlzQWxsQ2hpbGRyZW5VbkNoZWNrZWQgPyBUaHlUcmVlTm9kZUNoZWNrU3RhdGUudW5jaGVja2VkIDogVGh5VHJlZU5vZGVDaGVja1N0YXRlLmluZGV0ZXJtaW5hdGU7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUub3JpZ2luLmNoZWNrZWQgPSBpc0FsbENoaWxkcmVuVW5DaGVja2VkICYmIGNoZWNrZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBub2RlLmlzQ2hlY2tlZCA9IGNoZWNrZWQgPyBUaHlUcmVlTm9kZUNoZWNrU3RhdGUuY2hlY2tlZCA6IFRoeVRyZWVOb2RlQ2hlY2tTdGF0ZS51bmNoZWNrZWQ7XG4gICAgICAgICAgICAgICAgbm9kZS5vcmlnaW4uY2hlY2tlZCA9IGNoZWNrZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BhZ2F0ZVVwKSB7XG4gICAgICAgICAgICB0aGlzLl9zeW5jTm9kZUNoZWNrU3RhdGUobm9kZS5wYXJlbnROb2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzeW5jTm9kZUNoZWNrU3RhdGUobm9kZTogVGh5VHJlZU5vZGUpIHtcbiAgICAgICAgdGhpcy5fc3luY05vZGVDaGVja1N0YXRlKG5vZGUpO1xuICAgICAgICB0aGlzLnN5bmNGbGF0dGVuVHJlZU5vZGVzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc3luY05vZGVDaGVja1N0YXRlKG5vZGU6IFRoeVRyZWVOb2RlKSB7XG4gICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICBub2RlLmlzQ2hlY2tlZCA9IHRoaXMuY2hlY2tTdGF0ZVJlc29sdmUobm9kZSk7XG4gICAgICAgICAgICB0aGlzLl9zeW5jTm9kZUNoZWNrU3RhdGUobm9kZS5wYXJlbnROb2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0YXR1c0NoYW5nZSQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5zdGF0dXNDaGFuZ2UkID0gbnVsbDtcbiAgICB9XG59XG4iXX0=
|