ngx-tethys 17.0.1 → 17.0.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 +9 -0
- package/action/action.component.d.ts +3 -0
- package/affix/affix.component.d.ts +2 -0
- package/alert/alert.component.d.ts +1 -0
- package/anchor/anchor.component.d.ts +3 -0
- package/arrow-switcher/arrow-switcher.component.d.ts +1 -0
- package/autocomplete/autocomplete.component.d.ts +2 -3
- package/autocomplete/autocomplete.trigger.directive.d.ts +3 -0
- package/avatar/avatar.component.d.ts +4 -0
- package/back-top/back-top.component.d.ts +1 -0
- package/badge/badge.component.d.ts +5 -0
- package/button/button-icon.component.d.ts +2 -0
- package/button/button.component.d.ts +2 -0
- package/card/card.component.d.ts +3 -0
- package/card/content.component.d.ts +2 -1
- package/carousel/carousel.component.d.ts +5 -0
- package/cascader/cascader-li.component.d.ts +9 -2
- package/cascader/cascader-search-option.component.d.ts +7 -2
- package/cascader/cascader.component.d.ts +23 -2
- package/cascader/styles/cascader.scss +1 -0
- package/cascader/types.d.ts +1 -0
- package/checkbox/checkbox.component.d.ts +1 -0
- package/collapse/collapse-item.component.d.ts +2 -0
- package/collapse/collapse.component.d.ts +1 -0
- package/color-picker/color-picker-panel.component.d.ts +1 -0
- package/color-picker/color-picker.component.d.ts +7 -1
- package/copy/copy.directive.d.ts +1 -0
- package/core/behaviors/decorators.d.ts +6 -0
- package/date-picker/abstract-picker.component.d.ts +8 -1
- package/date-picker/abstract-picker.directive.d.ts +4 -0
- package/date-picker/base-picker.component.d.ts +2 -0
- package/date-picker/lib/calendar/calendar-footer.component.d.ts +1 -0
- package/date-picker/lib/popups/inner-popup.component.d.ts +1 -0
- package/date-picker/picker.component.d.ts +1 -0
- package/date-range/date-range.component.d.ts +2 -0
- package/dialog/body/dialog-body.component.d.ts +2 -1
- package/dialog/footer/dialog-footer.component.d.ts +1 -0
- package/dialog/header/dialog-header.component.d.ts +1 -0
- package/divider/divider.component.d.ts +2 -0
- package/drag-drop/drag-handle.directive.d.ts +1 -0
- package/drag-drop/drag.directive.d.ts +1 -0
- package/drag-drop/drop-container.directive.d.ts +1 -0
- package/dropdown/dropdown-menu-item.directive.d.ts +3 -1
- package/dropdown/dropdown-menu.component.d.ts +1 -0
- package/dropdown/dropdown.directive.d.ts +3 -0
- package/empty/empty.component.d.ts +1 -0
- package/esm2022/action/action.component.mjs +9 -22
- package/esm2022/affix/affix.component.mjs +8 -15
- package/esm2022/alert/alert.component.mjs +5 -10
- package/esm2022/anchor/anchor.component.mjs +10 -20
- package/esm2022/arrow-switcher/arrow-switcher.component.mjs +5 -11
- package/esm2022/autocomplete/autocomplete.component.mjs +5 -23
- package/esm2022/autocomplete/autocomplete.trigger.directive.mjs +9 -20
- package/esm2022/avatar/avatar.component.mjs +14 -30
- package/esm2022/back-top/back-top.component.mjs +6 -10
- package/esm2022/badge/badge.component.mjs +15 -37
- package/esm2022/button/button-icon.component.mjs +9 -20
- package/esm2022/button/button.component.mjs +7 -16
- package/esm2022/card/card.component.mjs +6 -20
- package/esm2022/card/content.component.mjs +5 -6
- package/esm2022/carousel/carousel.component.mjs +13 -30
- package/esm2022/cascader/cascader-li.component.mjs +16 -31
- package/esm2022/cascader/cascader-search-option.component.mjs +12 -21
- package/esm2022/cascader/cascader.component.mjs +32 -52
- package/esm2022/cascader/types.mjs +1 -1
- package/esm2022/checkbox/checkbox.component.mjs +7 -13
- package/esm2022/collapse/collapse-item.component.mjs +8 -15
- package/esm2022/collapse/collapse.component.mjs +5 -10
- package/esm2022/color-picker/color-picker-panel.component.mjs +5 -10
- package/esm2022/color-picker/color-picker.component.mjs +17 -37
- package/esm2022/copy/copy.directive.mjs +5 -10
- package/esm2022/core/behaviors/decorators.mjs +7 -44
- package/esm2022/date-picker/abstract-picker.component.mjs +21 -45
- package/esm2022/date-picker/abstract-picker.directive.mjs +11 -27
- package/esm2022/date-picker/base-picker.component.mjs +8 -15
- package/esm2022/date-picker/lib/calendar/calendar-footer.component.mjs +5 -10
- package/esm2022/date-picker/lib/popups/inner-popup.component.mjs +7 -6
- package/esm2022/date-picker/picker.component.mjs +6 -10
- package/esm2022/date-range/date-range.component.mjs +7 -15
- package/esm2022/dialog/body/dialog-body.component.mjs +6 -6
- package/esm2022/dialog/footer/dialog-footer.component.mjs +6 -13
- package/esm2022/dialog/header/dialog-header.component.mjs +6 -10
- package/esm2022/divider/divider.component.mjs +7 -15
- package/esm2022/drag-drop/drag-handle.directive.mjs +5 -13
- package/esm2022/drag-drop/drag.directive.mjs +5 -11
- package/esm2022/drag-drop/drop-container.directive.mjs +5 -10
- package/esm2022/dropdown/dropdown-menu-item.directive.mjs +9 -19
- package/esm2022/dropdown/dropdown-menu.component.mjs +6 -9
- package/esm2022/dropdown/dropdown.directive.mjs +8 -22
- package/esm2022/empty/empty.component.mjs +7 -13
- package/esm2022/flexible-text/flexible-text.component.mjs +4 -11
- package/esm2022/form/form-group-error/form-group-error.component.mjs +5 -10
- package/esm2022/form/form-group-label.directive.mjs +6 -6
- package/esm2022/form/form-group.component.mjs +13 -17
- package/esm2022/icon/icon.component.mjs +6 -20
- package/esm2022/image/image.directive.mjs +7 -15
- package/esm2022/input/input-search.component.mjs +6 -11
- package/esm2022/input/input.component.mjs +7 -15
- package/esm2022/input-number/input-number.component.mjs +12 -25
- package/esm2022/layout/header.component.mjs +9 -19
- package/esm2022/layout/sidebar-header.component.mjs +5 -10
- package/esm2022/layout/sidebar.component.mjs +22 -45
- package/esm2022/list/list.component.mjs +5 -11
- package/esm2022/list/selection/selection-list.mjs +13 -10
- package/esm2022/loading/loading.component.mjs +9 -20
- package/esm2022/menu/group/menu-group.component.mjs +12 -38
- package/esm2022/menu/item/action/menu-item-action.component.mjs +5 -10
- package/esm2022/menu/item/name/menu-item-name.component.mjs +5 -10
- package/esm2022/menu/menu.component.mjs +5 -10
- package/esm2022/nav/icon-nav/icon-nav-link.directive.mjs +6 -6
- package/esm2022/nav/nav-ink-bar.directive.mjs +7 -15
- package/esm2022/nav/nav-item.directive.mjs +10 -20
- package/esm2022/nav/nav.component.mjs +12 -25
- package/esm2022/pagination/pagination.component.mjs +18 -68
- package/esm2022/popover/popover.directive.mjs +12 -33
- package/esm2022/progress/progress-circle.component.mjs +9 -20
- package/esm2022/progress/progress-strip.component.mjs +5 -11
- package/esm2022/progress/progress.component.mjs +11 -23
- package/esm2022/property/properties.component.mjs +5 -10
- package/esm2022/property/property-item.component.mjs +8 -15
- package/esm2022/property-operation/property-operation.component.mjs +16 -37
- package/esm2022/radio/group/radio-group.component.mjs +6 -21
- package/esm2022/rate/rate-item.component.mjs +5 -10
- package/esm2022/rate/rate.component.mjs +16 -25
- package/esm2022/resizable/resizable.directive.mjs +24 -55
- package/esm2022/resizable/resize-handle.component.mjs +6 -10
- package/esm2022/resizable/resize-handles.component.mjs +5 -10
- package/esm2022/segment/segment-item.component.mjs +5 -10
- package/esm2022/segment/segment.component.mjs +7 -16
- package/esm2022/select/custom-select/custom-select.component.mjs +30 -65
- package/esm2022/select/native-select/native-select.component.mjs +6 -10
- package/esm2022/shared/base-form-check.component.mjs +10 -20
- package/esm2022/shared/directives/thy-autofocus.directive.mjs +10 -15
- package/esm2022/shared/directives/thy-scroll.directive.mjs +6 -13
- package/esm2022/shared/directives/thy-show.mjs +5 -11
- package/esm2022/shared/option/group/option-group.component.mjs +5 -10
- package/esm2022/shared/option/list-option/list-option.component.mjs +6 -13
- package/esm2022/shared/option/option.component.mjs +5 -11
- package/esm2022/shared/select/select-control/select-control.component.mjs +17 -44
- package/esm2022/skeleton/skeleton-circle.component.mjs +6 -9
- package/esm2022/skeleton/skeleton-rectangle.component.mjs +6 -9
- package/esm2022/skeleton/skeleton.component.mjs +5 -10
- package/esm2022/skeleton/stylized/bullet-list.component.mjs +6 -9
- package/esm2022/skeleton/stylized/list.component.mjs +6 -9
- package/esm2022/skeleton/stylized/paragraph.component.mjs +6 -9
- package/esm2022/slide/slide-body/slide-body-section.component.mjs +6 -6
- package/esm2022/slider/slider.component.mjs +18 -35
- package/esm2022/space/space.component.mjs +6 -10
- package/esm2022/stepper/step-header.component.mjs +9 -20
- package/esm2022/stepper/stepper.component.mjs +7 -16
- package/esm2022/switch/switch.component.mjs +12 -17
- package/esm2022/table/table-column.component.mjs +9 -31
- package/esm2022/table/table-skeleton.component.mjs +8 -14
- package/esm2022/table/table.component.mjs +32 -83
- package/esm2022/tabs/tab.component.mjs +5 -10
- package/esm2022/tabs/tabs.component.mjs +8 -15
- package/esm2022/tag/tag.component.mjs +6 -10
- package/esm2022/time-picker/time-picker-panel.component.mjs +8 -15
- package/esm2022/time-picker/time-picker.component.mjs +20 -46
- package/esm2022/timeline/timeline.component.mjs +5 -10
- package/esm2022/tooltip/tooltip.directive.mjs +11 -34
- package/esm2022/tree/tree-node.component.mjs +17 -40
- package/esm2022/tree/tree.component.mjs +19 -47
- package/esm2022/tree-select/tree-select.component.mjs +18 -40
- package/esm2022/upload/file-select-base.mjs +7 -6
- package/esm2022/upload/file-select.component.mjs +11 -26
- package/esm2022/version.mjs +2 -2
- package/esm2022/vote/vote.component.mjs +11 -33
- package/esm2022/watermark/watermark.directive.mjs +6 -10
- package/fesm2022/ngx-tethys-action.mjs +9 -21
- package/fesm2022/ngx-tethys-action.mjs.map +1 -1
- package/fesm2022/ngx-tethys-affix.mjs +6 -14
- package/fesm2022/ngx-tethys-affix.mjs.map +1 -1
- package/fesm2022/ngx-tethys-alert.mjs +4 -9
- package/fesm2022/ngx-tethys-alert.mjs.map +1 -1
- package/fesm2022/ngx-tethys-anchor.mjs +8 -19
- package/fesm2022/ngx-tethys-anchor.mjs.map +1 -1
- package/fesm2022/ngx-tethys-arrow-switcher.mjs +4 -10
- package/fesm2022/ngx-tethys-arrow-switcher.mjs.map +1 -1
- package/fesm2022/ngx-tethys-autocomplete.mjs +14 -39
- package/fesm2022/ngx-tethys-autocomplete.mjs.map +1 -1
- package/fesm2022/ngx-tethys-avatar.mjs +14 -29
- package/fesm2022/ngx-tethys-avatar.mjs.map +1 -1
- package/fesm2022/ngx-tethys-back-top.mjs +5 -9
- package/fesm2022/ngx-tethys-back-top.mjs.map +1 -1
- package/fesm2022/ngx-tethys-badge.mjs +14 -36
- package/fesm2022/ngx-tethys-badge.mjs.map +1 -1
- package/fesm2022/ngx-tethys-button.mjs +13 -30
- package/fesm2022/ngx-tethys-button.mjs.map +1 -1
- package/fesm2022/ngx-tethys-card.mjs +8 -23
- package/fesm2022/ngx-tethys-card.mjs.map +1 -1
- package/fesm2022/ngx-tethys-carousel.mjs +12 -29
- package/fesm2022/ngx-tethys-carousel.mjs.map +1 -1
- package/fesm2022/ngx-tethys-cascader.mjs +55 -95
- package/fesm2022/ngx-tethys-cascader.mjs.map +1 -1
- package/fesm2022/ngx-tethys-checkbox.mjs +5 -12
- package/fesm2022/ngx-tethys-checkbox.mjs.map +1 -1
- package/fesm2022/ngx-tethys-collapse.mjs +10 -20
- package/fesm2022/ngx-tethys-collapse.mjs.map +1 -1
- package/fesm2022/ngx-tethys-color-picker.mjs +19 -42
- package/fesm2022/ngx-tethys-color-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-copy.mjs +4 -9
- package/fesm2022/ngx-tethys-copy.mjs.map +1 -1
- package/fesm2022/ngx-tethys-core.mjs +6 -43
- package/fesm2022/ngx-tethys-core.mjs.map +1 -1
- package/fesm2022/ngx-tethys-date-picker.mjs +45 -93
- package/fesm2022/ngx-tethys-date-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-date-range.mjs +6 -14
- package/fesm2022/ngx-tethys-date-range.mjs.map +1 -1
- package/fesm2022/ngx-tethys-dialog.mjs +13 -21
- package/fesm2022/ngx-tethys-dialog.mjs.map +1 -1
- package/fesm2022/ngx-tethys-divider.mjs +6 -14
- package/fesm2022/ngx-tethys-divider.mjs.map +1 -1
- package/fesm2022/ngx-tethys-drag-drop.mjs +10 -25
- package/fesm2022/ngx-tethys-drag-drop.mjs.map +1 -1
- package/fesm2022/ngx-tethys-dropdown.mjs +19 -42
- package/fesm2022/ngx-tethys-dropdown.mjs.map +1 -1
- package/fesm2022/ngx-tethys-empty.mjs +5 -12
- package/fesm2022/ngx-tethys-empty.mjs.map +1 -1
- package/fesm2022/ngx-tethys-flexible-text.mjs +3 -10
- package/fesm2022/ngx-tethys-flexible-text.mjs.map +1 -1
- package/fesm2022/ngx-tethys-form.mjs +19 -25
- package/fesm2022/ngx-tethys-form.mjs.map +1 -1
- package/fesm2022/ngx-tethys-icon.mjs +5 -19
- package/fesm2022/ngx-tethys-icon.mjs.map +1 -1
- package/fesm2022/ngx-tethys-image.mjs +7 -14
- package/fesm2022/ngx-tethys-image.mjs.map +1 -1
- package/fesm2022/ngx-tethys-input-number.mjs +11 -24
- package/fesm2022/ngx-tethys-input-number.mjs.map +1 -1
- package/fesm2022/ngx-tethys-input.mjs +10 -21
- package/fesm2022/ngx-tethys-input.mjs.map +1 -1
- package/fesm2022/ngx-tethys-layout.mjs +31 -64
- package/fesm2022/ngx-tethys-layout.mjs.map +1 -1
- package/fesm2022/ngx-tethys-list.mjs +16 -18
- package/fesm2022/ngx-tethys-list.mjs.map +1 -1
- package/fesm2022/ngx-tethys-loading.mjs +8 -19
- package/fesm2022/ngx-tethys-loading.mjs.map +1 -1
- package/fesm2022/ngx-tethys-menu.mjs +20 -55
- package/fesm2022/ngx-tethys-menu.mjs.map +1 -1
- package/fesm2022/ngx-tethys-nav.mjs +28 -55
- package/fesm2022/ngx-tethys-nav.mjs.map +1 -1
- package/fesm2022/ngx-tethys-pagination.mjs +17 -67
- package/fesm2022/ngx-tethys-pagination.mjs.map +1 -1
- package/fesm2022/ngx-tethys-popover.mjs +11 -32
- package/fesm2022/ngx-tethys-popover.mjs.map +1 -1
- package/fesm2022/ngx-tethys-progress.mjs +20 -45
- package/fesm2022/ngx-tethys-progress.mjs.map +1 -1
- package/fesm2022/ngx-tethys-property-operation.mjs +14 -36
- package/fesm2022/ngx-tethys-property-operation.mjs.map +1 -1
- package/fesm2022/ngx-tethys-property.mjs +10 -21
- package/fesm2022/ngx-tethys-property.mjs.map +1 -1
- package/fesm2022/ngx-tethys-radio.mjs +5 -19
- package/fesm2022/ngx-tethys-radio.mjs.map +1 -1
- package/fesm2022/ngx-tethys-rate.mjs +18 -30
- package/fesm2022/ngx-tethys-rate.mjs.map +1 -1
- package/fesm2022/ngx-tethys-resizable.mjs +29 -66
- package/fesm2022/ngx-tethys-resizable.mjs.map +1 -1
- package/fesm2022/ngx-tethys-segment.mjs +10 -21
- package/fesm2022/ngx-tethys-segment.mjs.map +1 -1
- package/fesm2022/ngx-tethys-select.mjs +32 -70
- package/fesm2022/ngx-tethys-select.mjs.map +1 -1
- package/fesm2022/ngx-tethys-shared.mjs +49 -105
- package/fesm2022/ngx-tethys-shared.mjs.map +1 -1
- package/fesm2022/ngx-tethys-skeleton.mjs +20 -38
- package/fesm2022/ngx-tethys-skeleton.mjs.map +1 -1
- package/fesm2022/ngx-tethys-slide.mjs +6 -5
- package/fesm2022/ngx-tethys-slide.mjs.map +1 -1
- package/fesm2022/ngx-tethys-slider.mjs +17 -34
- package/fesm2022/ngx-tethys-slider.mjs.map +1 -1
- package/fesm2022/ngx-tethys-space.mjs +5 -9
- package/fesm2022/ngx-tethys-space.mjs.map +1 -1
- package/fesm2022/ngx-tethys-stepper.mjs +13 -31
- package/fesm2022/ngx-tethys-stepper.mjs.map +1 -1
- package/fesm2022/ngx-tethys-switch.mjs +11 -16
- package/fesm2022/ngx-tethys-switch.mjs.map +1 -1
- package/fesm2022/ngx-tethys-table.mjs +43 -120
- package/fesm2022/ngx-tethys-table.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tabs.mjs +10 -20
- package/fesm2022/ngx-tethys-tabs.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tag.mjs +5 -9
- package/fesm2022/ngx-tethys-tag.mjs.map +1 -1
- package/fesm2022/ngx-tethys-time-picker.mjs +24 -55
- package/fesm2022/ngx-tethys-time-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-timeline.mjs +4 -9
- package/fesm2022/ngx-tethys-timeline.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tooltip.mjs +10 -33
- package/fesm2022/ngx-tethys-tooltip.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tree-select.mjs +17 -39
- package/fesm2022/ngx-tethys-tree-select.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tree.mjs +33 -82
- package/fesm2022/ngx-tethys-tree.mjs.map +1 -1
- package/fesm2022/ngx-tethys-upload.mjs +15 -28
- package/fesm2022/ngx-tethys-upload.mjs.map +1 -1
- package/fesm2022/ngx-tethys-vote.mjs +10 -32
- package/fesm2022/ngx-tethys-vote.mjs.map +1 -1
- package/fesm2022/ngx-tethys-watermark.mjs +5 -9
- 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/flexible-text/flexible-text.component.d.ts +1 -0
- package/form/form-group-error/form-group-error.component.d.ts +1 -0
- package/form/form-group-label.directive.d.ts +2 -1
- package/form/form-group.component.d.ts +5 -2
- package/icon/icon.component.d.ts +3 -0
- package/image/image.directive.d.ts +2 -0
- package/input/input-search.component.d.ts +1 -0
- package/input/input.component.d.ts +2 -0
- package/input-number/input-number.component.d.ts +4 -0
- package/layout/header.component.d.ts +5 -2
- package/layout/sidebar-header.component.d.ts +1 -0
- package/layout/sidebar.component.d.ts +14 -4
- package/list/list.component.d.ts +1 -0
- package/list/selection/selection-list.d.ts +4 -1
- package/loading/loading.component.d.ts +4 -2
- package/menu/group/menu-group.component.d.ts +6 -0
- package/menu/item/action/menu-item-action.component.d.ts +1 -0
- package/menu/item/name/menu-item-name.component.d.ts +1 -0
- package/menu/menu.component.d.ts +1 -0
- package/nav/icon-nav/icon-nav-link.directive.d.ts +2 -1
- package/nav/nav-ink-bar.directive.d.ts +2 -0
- package/nav/nav-item.directive.d.ts +3 -0
- package/nav/nav.component.d.ts +4 -0
- package/package.json +1 -1
- package/pagination/pagination.component.d.ts +11 -0
- package/popover/popover.directive.d.ts +5 -0
- package/progress/progress-circle.component.d.ts +3 -0
- package/progress/progress-strip.component.d.ts +1 -0
- package/progress/progress.component.d.ts +3 -0
- package/property/properties.component.d.ts +1 -0
- package/property/property-item.component.d.ts +2 -0
- package/property-operation/property-operation.component.d.ts +5 -0
- package/radio/group/radio-group.component.d.ts +2 -2
- package/rate/rate-item.component.d.ts +1 -0
- package/rate/rate.component.d.ts +5 -1
- package/resizable/resizable.directive.d.ts +10 -0
- package/resizable/resize-handle.component.d.ts +1 -0
- package/resizable/resize-handles.component.d.ts +1 -0
- package/schematics/version.d.ts +1 -1
- package/schematics/version.js +1 -1
- package/segment/segment-item.component.d.ts +1 -0
- package/segment/segment.component.d.ts +2 -0
- package/select/custom-select/custom-select.component.d.ts +12 -1
- package/select/native-select/native-select.component.d.ts +1 -0
- package/shared/base-form-check.component.d.ts +2 -0
- package/shared/directives/thy-autofocus.directive.d.ts +3 -1
- package/shared/directives/thy-scroll.directive.d.ts +1 -0
- package/shared/directives/thy-show.d.ts +1 -0
- package/shared/option/group/option-group.component.d.ts +1 -0
- package/shared/option/list-option/list-option.component.d.ts +1 -0
- package/shared/option/option.component.d.ts +1 -0
- package/shared/option/styles/select-dropdown.scss +1 -0
- package/shared/select/select-control/select-control.component.d.ts +7 -0
- package/skeleton/skeleton-circle.component.d.ts +1 -0
- package/skeleton/skeleton-rectangle.component.d.ts +1 -0
- package/skeleton/skeleton.component.d.ts +1 -0
- package/skeleton/stylized/bullet-list.component.d.ts +1 -0
- package/skeleton/stylized/list.component.d.ts +1 -0
- package/skeleton/stylized/paragraph.component.d.ts +1 -0
- package/slide/slide-body/slide-body-section.component.d.ts +2 -1
- package/slider/slider.component.d.ts +6 -1
- package/space/space.component.d.ts +1 -0
- package/stepper/step-header.component.d.ts +3 -0
- package/stepper/stepper.component.d.ts +2 -0
- package/switch/switch.component.d.ts +3 -1
- package/table/table-column.component.d.ts +7 -2
- package/table/table-skeleton.component.d.ts +2 -0
- package/table/table.component.d.ts +14 -0
- package/tabs/tab.component.d.ts +1 -0
- package/tabs/tabs.component.d.ts +2 -0
- package/tag/tag.component.d.ts +1 -0
- package/time-picker/time-picker-panel.component.d.ts +2 -0
- package/time-picker/time-picker.component.d.ts +6 -2
- package/timeline/timeline.component.d.ts +1 -0
- package/tooltip/tooltip.directive.d.ts +5 -0
- package/tree/tree-node.component.d.ts +7 -0
- package/tree/tree.component.d.ts +8 -0
- package/tree-select/tree-select.component.d.ts +7 -0
- package/upload/file-select-base.d.ts +1 -0
- package/upload/file-select.component.d.ts +3 -0
- package/vote/vote.component.d.ts +4 -2
- package/watermark/watermark.directive.d.ts +1 -0
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { InputCssPixel, MixinBase, mixinUnsubscribe, UpdateHostClassService } from 'ngx-tethys/core';
|
|
3
|
+
import { get, helpers, isString, keyBy, set } from 'ngx-tethys/util';
|
|
4
4
|
import { EMPTY, fromEvent, merge, Observable, of } from 'rxjs';
|
|
5
5
|
import { delay, startWith, switchMap, takeUntil } from 'rxjs/operators';
|
|
6
6
|
import { CdkDrag, CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop';
|
|
7
7
|
import { ViewportRuler } from '@angular/cdk/overlay';
|
|
8
8
|
import { normalizePassiveListenerOptions } from '@angular/cdk/platform';
|
|
9
9
|
import { DOCUMENT, isPlatformServer, NgClass, NgFor, NgIf, NgTemplateOutlet, NgStyle } from '@angular/common';
|
|
10
|
-
import { ChangeDetectorRef, Component, ContentChild, ContentChildren, ElementRef, EventEmitter, HostBinding, Inject, Input, IterableDiffers, NgZone, Output, PLATFORM_ID, QueryList, Renderer2, TemplateRef, ViewChild, ViewChildren, ViewEncapsulation } from '@angular/core';
|
|
10
|
+
import { booleanAttribute, ChangeDetectorRef, Component, ContentChild, ContentChildren, ElementRef, EventEmitter, HostBinding, Inject, Input, IterableDiffers, NgZone, numberAttribute, Output, PLATFORM_ID, QueryList, Renderer2, TemplateRef, ViewChild, ViewChildren, ViewEncapsulation } from '@angular/core';
|
|
11
11
|
import { THY_TABLE_COLUMN_PARENT_COMPONENT, ThyTableColumnComponent } from './table-column.component';
|
|
12
12
|
import { ThyTableSortDirection } from './table.interface';
|
|
13
13
|
import { TableRowDragDisabledPipe } from './pipes/drag.pipe';
|
|
@@ -166,7 +166,7 @@ export class ThyTable extends _MixinBase {
|
|
|
166
166
|
* @default false
|
|
167
167
|
*/
|
|
168
168
|
set thyDraggable(value) {
|
|
169
|
-
this.draggable =
|
|
169
|
+
this.draggable = value;
|
|
170
170
|
if ((typeof ngDevMode === 'undefined' || ngDevMode) && this.draggable && this.mode === 'tree') {
|
|
171
171
|
throw new Error('Tree mode sorting is not supported');
|
|
172
172
|
}
|
|
@@ -798,7 +798,7 @@ export class ThyTable extends _MixinBase {
|
|
|
798
798
|
this._destroyInvalidAttribute();
|
|
799
799
|
}
|
|
800
800
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ThyTable, deps: [{ token: i0.ElementRef }, { token: i0.IterableDiffers }, { token: i1.ViewportRuler }, { token: i2.UpdateHostClassService }, { token: DOCUMENT }, { token: PLATFORM_ID }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
801
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
801
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.2.3", type: ThyTable, isStandalone: true, selector: "thy-table", inputs: { thyMode: "thyMode", thyGroupBy: "thyGroupBy", thyRowKey: "thyRowKey", thyGroups: "thyGroups", thyModel: "thyModel", thyTheme: "thyTheme", thySize: "thySize", thyMinWidth: "thyMinWidth", thyLayoutFixed: ["thyLayoutFixed", "thyLayoutFixed", booleanAttribute], thyHeaderFixed: ["thyHeaderFixed", "thyHeaderFixed", booleanAttribute], thyHeight: "thyHeight", thyClassName: "thyClassName", thyRowClassName: "thyRowClassName", thyLoadingDone: ["thyLoadingDone", "thyLoadingDone", booleanAttribute], thyLoadingText: "thyLoadingText", thyEmptyOptions: "thyEmptyOptions", thyDraggable: ["thyDraggable", "thyDraggable", booleanAttribute], thyPageIndex: ["thyPageIndex", "thyPageIndex", numberAttribute], thyPageSize: ["thyPageSize", "thyPageSize", numberAttribute], thyPageTotal: ["thyPageTotal", "thyPageTotal", numberAttribute], thyWholeRowSelect: ["thyWholeRowSelect", "thyWholeRowSelect", booleanAttribute], thyHeadless: ["thyHeadless", "thyHeadless", booleanAttribute], thyShowHeader: ["thyShowHeader", "thyShowHeader", booleanAttribute], showTotal: ["thyShowTotal", "showTotal", booleanAttribute], showSizeChanger: ["thyShowSizeChanger", "showSizeChanger", booleanAttribute], pageSizeOptions: ["thyPageSizeOptions", "pageSizeOptions"], thyIndent: ["thyIndent", "thyIndent", numberAttribute], thyChildrenKey: "thyChildrenKey", thyHoverDisplayOperation: ["thyHoverDisplayOperation", "thyHoverDisplayOperation", booleanAttribute], thyDragDisabledPredicate: "thyDragDisabledPredicate", thyColumnSkeletonTypes: "thyColumnSkeletonTypes" }, outputs: { thyOnSwitchChange: "thyOnSwitchChange", thyOnPageChange: "thyOnPageChange", thyOnPageIndexChange: "thyOnPageIndexChange", thyOnPageSizeChange: "thyOnPageSizeChange", thyOnMultiSelectChange: "thyOnMultiSelectChange", thyOnRadioSelectChange: "thyOnRadioSelectChange", thyOnDraggableChange: "thyOnDraggableChange", thyOnRowClick: "thyOnRowClick", thySortChange: "thySortChange", thyOnRowContextMenu: "thyOnRowContextMenu" }, host: { properties: { "class.thy-table-bordered": "theme === 'bordered'", "class.thy-table-boxed": "theme === 'boxed'", "class.thy-table-fixed-header": "thyHeaderFixed", "style.height": "this.thyHeight", "class.thy-table-hover-display-operation": "this.thyHoverDisplayOperation" }, classAttribute: "thy-table" }, providers: [
|
|
802
802
|
{
|
|
803
803
|
provide: THY_TABLE_COLUMN_PARENT_COMPONENT,
|
|
804
804
|
useExisting: ThyTable
|
|
@@ -810,73 +810,10 @@ __decorate([
|
|
|
810
810
|
InputCssPixel(),
|
|
811
811
|
__metadata("design:type", Object)
|
|
812
812
|
], ThyTable.prototype, "thyMinWidth", void 0);
|
|
813
|
-
__decorate([
|
|
814
|
-
InputBoolean(),
|
|
815
|
-
__metadata("design:type", Boolean)
|
|
816
|
-
], ThyTable.prototype, "thyLayoutFixed", void 0);
|
|
817
|
-
__decorate([
|
|
818
|
-
InputBoolean(),
|
|
819
|
-
__metadata("design:type", Boolean)
|
|
820
|
-
], ThyTable.prototype, "thyHeaderFixed", void 0);
|
|
821
813
|
__decorate([
|
|
822
814
|
InputCssPixel(),
|
|
823
815
|
__metadata("design:type", String)
|
|
824
816
|
], ThyTable.prototype, "thyHeight", void 0);
|
|
825
|
-
__decorate([
|
|
826
|
-
InputBoolean(),
|
|
827
|
-
__metadata("design:type", Boolean),
|
|
828
|
-
__metadata("design:paramtypes", [Boolean])
|
|
829
|
-
], ThyTable.prototype, "thyLoadingDone", null);
|
|
830
|
-
__decorate([
|
|
831
|
-
InputBoolean(),
|
|
832
|
-
__metadata("design:type", Boolean),
|
|
833
|
-
__metadata("design:paramtypes", [Boolean])
|
|
834
|
-
], ThyTable.prototype, "thyDraggable", null);
|
|
835
|
-
__decorate([
|
|
836
|
-
InputNumber(),
|
|
837
|
-
__metadata("design:type", Number),
|
|
838
|
-
__metadata("design:paramtypes", [Number])
|
|
839
|
-
], ThyTable.prototype, "thyPageIndex", null);
|
|
840
|
-
__decorate([
|
|
841
|
-
InputNumber(),
|
|
842
|
-
__metadata("design:type", Number),
|
|
843
|
-
__metadata("design:paramtypes", [Number])
|
|
844
|
-
], ThyTable.prototype, "thyPageSize", null);
|
|
845
|
-
__decorate([
|
|
846
|
-
InputNumber(),
|
|
847
|
-
__metadata("design:type", Number),
|
|
848
|
-
__metadata("design:paramtypes", [Number])
|
|
849
|
-
], ThyTable.prototype, "thyPageTotal", null);
|
|
850
|
-
__decorate([
|
|
851
|
-
InputBoolean(),
|
|
852
|
-
__metadata("design:type", Boolean),
|
|
853
|
-
__metadata("design:paramtypes", [Boolean])
|
|
854
|
-
], ThyTable.prototype, "thyWholeRowSelect", null);
|
|
855
|
-
__decorate([
|
|
856
|
-
InputBoolean(),
|
|
857
|
-
__metadata("design:type", Object)
|
|
858
|
-
], ThyTable.prototype, "thyHeadless", void 0);
|
|
859
|
-
__decorate([
|
|
860
|
-
InputBoolean(),
|
|
861
|
-
__metadata("design:type", Boolean),
|
|
862
|
-
__metadata("design:paramtypes", [Boolean])
|
|
863
|
-
], ThyTable.prototype, "thyShowHeader", null);
|
|
864
|
-
__decorate([
|
|
865
|
-
InputBoolean(),
|
|
866
|
-
__metadata("design:type", Object)
|
|
867
|
-
], ThyTable.prototype, "showTotal", void 0);
|
|
868
|
-
__decorate([
|
|
869
|
-
InputBoolean(),
|
|
870
|
-
__metadata("design:type", Object)
|
|
871
|
-
], ThyTable.prototype, "showSizeChanger", void 0);
|
|
872
|
-
__decorate([
|
|
873
|
-
InputNumber(),
|
|
874
|
-
__metadata("design:type", Object)
|
|
875
|
-
], ThyTable.prototype, "thyIndent", void 0);
|
|
876
|
-
__decorate([
|
|
877
|
-
InputBoolean(),
|
|
878
|
-
__metadata("design:type", Boolean)
|
|
879
|
-
], ThyTable.prototype, "thyHoverDisplayOperation", void 0);
|
|
880
817
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ThyTable, decorators: [{
|
|
881
818
|
type: Component,
|
|
882
819
|
args: [{ selector: 'thy-table', providers: [
|
|
@@ -942,9 +879,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
942
879
|
}], thyMinWidth: [{
|
|
943
880
|
type: Input
|
|
944
881
|
}], thyLayoutFixed: [{
|
|
945
|
-
type: Input
|
|
882
|
+
type: Input,
|
|
883
|
+
args: [{ transform: booleanAttribute }]
|
|
946
884
|
}], thyHeaderFixed: [{
|
|
947
|
-
type: Input
|
|
885
|
+
type: Input,
|
|
886
|
+
args: [{ transform: booleanAttribute }]
|
|
948
887
|
}], thyHeight: [{
|
|
949
888
|
type: HostBinding,
|
|
950
889
|
args: ['style.height']
|
|
@@ -955,43 +894,53 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
955
894
|
}], thyRowClassName: [{
|
|
956
895
|
type: Input
|
|
957
896
|
}], thyLoadingDone: [{
|
|
958
|
-
type: Input
|
|
897
|
+
type: Input,
|
|
898
|
+
args: [{ transform: booleanAttribute }]
|
|
959
899
|
}], thyLoadingText: [{
|
|
960
900
|
type: Input
|
|
961
901
|
}], thyEmptyOptions: [{
|
|
962
902
|
type: Input
|
|
963
903
|
}], thyDraggable: [{
|
|
964
|
-
type: Input
|
|
904
|
+
type: Input,
|
|
905
|
+
args: [{ transform: booleanAttribute }]
|
|
965
906
|
}], thyPageIndex: [{
|
|
966
|
-
type: Input
|
|
907
|
+
type: Input,
|
|
908
|
+
args: [{ transform: numberAttribute }]
|
|
967
909
|
}], thyPageSize: [{
|
|
968
|
-
type: Input
|
|
910
|
+
type: Input,
|
|
911
|
+
args: [{ transform: numberAttribute }]
|
|
969
912
|
}], thyPageTotal: [{
|
|
970
|
-
type: Input
|
|
913
|
+
type: Input,
|
|
914
|
+
args: [{ transform: numberAttribute }]
|
|
971
915
|
}], thyWholeRowSelect: [{
|
|
972
|
-
type: Input
|
|
916
|
+
type: Input,
|
|
917
|
+
args: [{ transform: booleanAttribute }]
|
|
973
918
|
}], thyHeadless: [{
|
|
974
|
-
type: Input
|
|
919
|
+
type: Input,
|
|
920
|
+
args: [{ transform: booleanAttribute }]
|
|
975
921
|
}], thyShowHeader: [{
|
|
976
|
-
type: Input
|
|
922
|
+
type: Input,
|
|
923
|
+
args: [{ transform: booleanAttribute }]
|
|
977
924
|
}], showTotal: [{
|
|
978
925
|
type: Input,
|
|
979
|
-
args: ['thyShowTotal']
|
|
926
|
+
args: [{ alias: 'thyShowTotal', transform: booleanAttribute }]
|
|
980
927
|
}], showSizeChanger: [{
|
|
981
928
|
type: Input,
|
|
982
|
-
args: ['thyShowSizeChanger']
|
|
929
|
+
args: [{ alias: 'thyShowSizeChanger', transform: booleanAttribute }]
|
|
983
930
|
}], pageSizeOptions: [{
|
|
984
931
|
type: Input,
|
|
985
932
|
args: ['thyPageSizeOptions']
|
|
986
933
|
}], thyIndent: [{
|
|
987
|
-
type: Input
|
|
934
|
+
type: Input,
|
|
935
|
+
args: [{ transform: numberAttribute }]
|
|
988
936
|
}], thyChildrenKey: [{
|
|
989
937
|
type: Input
|
|
990
938
|
}], thyHoverDisplayOperation: [{
|
|
991
939
|
type: HostBinding,
|
|
992
940
|
args: ['class.thy-table-hover-display-operation']
|
|
993
941
|
}, {
|
|
994
|
-
type: Input
|
|
942
|
+
type: Input,
|
|
943
|
+
args: [{ transform: booleanAttribute }]
|
|
995
944
|
}], thyDragDisabledPredicate: [{
|
|
996
945
|
type: Input
|
|
997
946
|
}], thyColumnSkeletonTypes: [{
|
|
@@ -1023,4 +972,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
1023
972
|
type: ContentChildren,
|
|
1024
973
|
args: [ThyTableColumnComponent]
|
|
1025
974
|
}] } });
|
|
1026
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVILFlBQVksRUFDWixhQUFhLEVBQ2IsV0FBVyxFQUNYLFNBQVMsRUFDVCxnQkFBZ0IsRUFFaEIsc0JBQXNCLEVBQ3pCLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RixPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEUsT0FBTyxFQUFFLE9BQU8sRUFBeUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlHLE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFJTCxlQUFl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QUFFO2dCQUduQyxzQkFBc0I7c0JBRHpCLGVBQWU7dUJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb25zdHJ1Y3RvcixcbiAgICBJbnB1dEJvb2xlYW4sXG4gICAgSW5wdXRDc3NQaXhlbCxcbiAgICBJbnB1dE51bWJlcixcbiAgICBNaXhpbkJhc2UsXG4gICAgbWl4aW5VbnN1YnNjcmliZSxcbiAgICBUaHlVbnN1YnNjcmliZSxcbiAgICBVcGRhdGVIb3N0Q2xhc3NTZXJ2aWNlXG59IGZyb20gJ25neC10ZXRoeXMvY29yZSc7XG5pbXBvcnQgeyBEaWN0aW9uYXJ5LCBTYWZlQW55IH0gZnJvbSAnbmd4LXRldGh5cy90eXBlcyc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHksIGdldCwgaGVscGVycywgaXNTdHJpbmcsIGtleUJ5LCBzZXQgfSBmcm9tICduZ3gtdGV0aHlzL3V0aWwnO1xuaW1wb3J0IHsgRU1QVFksIGZyb21FdmVudCwgbWVyZ2UsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWxheSwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQ2RrRHJhZywgQ2RrRHJhZ0Ryb3AsIENka0RyYWdFbmQsIENka0RyYWdTdGFydCwgQ2RrRHJvcExpc3QsIG1vdmVJdGVtSW5BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgVmlld3BvcnRSdWxlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IG5vcm1hbGl6ZVBhc3NpdmVMaXN0ZW5lck9wdGlvbnMgfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHsgRE9DVU1FTlQsIGlzUGxhdGZvcm1TZXJ2ZXIsIE5nQ2xhc3MsIE5nRm9yLCBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0LCBOZ1N0eWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgSXRlcmFibGVDaGFuZ2VSZWNvcmQsXG4gICAgSXRlcmFibGVDaGFuZ2VzLFxuICAgIEl0ZXJhYmxlRGlmZmVyLFxuICAgIEl0ZXJhYmxlRGlmZmVycyxcbiAgICBOZ1pvbmUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFBMQVRGT1JNX0lELFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBSZW5kZXJlcjIsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBJVGh5VGFibGVDb2x1bW5QYXJlbnRDb21wb25lbnQsIFRIWV9UQUJMRV9DT0xVTU5fUEFSRU5UX0NPTVBPTkVOVCwgVGh5VGFibGVDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuL3RhYmxlLWNvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgICBQYWdlQ2hhbmdlZEV2ZW50LFxuICAgIFRoeU11bHRpU2VsZWN0RXZlbnQsXG4gICAgVGh5UGFnZSxcbiAgICBUaHlSYWRpb1NlbGVjdEV2ZW50LFxuICAgIFRoeVN3aXRjaEV2ZW50LFxuICAgIFRoeVRhYmxlU2tlbGV0b25Db2x1bW4sXG4gICAgVGh5VGFibGVEcmFnZ2FibGVFdmVudCxcbiAgICBUaHlUYWJsZUVtcHR5T3B0aW9ucyxcbiAgICBUaHlUYWJsZUV2ZW50LFxuICAgIFRoeVRhYmxlUm93RXZlbnQsXG4gICAgVGh5VGFibGVTb3J0RGlyZWN0aW9uLFxuICAgIFRoeVRhYmxlU29ydEV2ZW50XG59IGZyb20gJy4vdGFibGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IFRhYmxlUm93RHJhZ0Rpc2FibGVkUGlwZSB9IGZyb20gJy4vcGlwZXMvZHJhZy5waXBlJztcbmltcG9ydCB7IFRhYmxlSXNWYWxpZE1vZGVsVmFsdWVQaXBlIH0gZnJvbSAnLi9waXBlcy90YWJsZS5waXBlJztcbmltcG9ydCB7IFRoeVBhZ2luYXRpb24gfSBmcm9tICduZ3gtdGV0aHlzL3BhZ2luYXRpb24nO1xuaW1wb3J0IHsgVGh5VGFibGVTa2VsZXRvbiB9IGZyb20gJy4vdGFibGUtc2tlbGV0b24uY29tcG9uZW50JztcbmltcG9ydCB7IFRoeUVtcHR5IH0gZnJvbSAnbmd4LXRldGh5cy9lbXB0eSc7XG5pbXBvcnQgeyBUaHlTd2l0Y2ggfSBmcm9tICduZ3gtdGV0aHlzL3N3aXRjaCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRoeURyYWdEcm9wRGlyZWN0aXZlLCBUaHlDb250ZXh0TWVudURpcmVjdGl2ZSB9IGZyb20gJ25neC10ZXRoeXMvc2hhcmVkJztcbmltcG9ydCB7IFRoeUljb24gfSBmcm9tICduZ3gtdGV0aHlzL2ljb24nO1xuaW1wb3J0IHsgQ2RrU2Nyb2xsYWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgVGh5VGFibGVDb2x1bW5Ta2VsZXRvblR5cGUgfSBmcm9tICcuL2VudW1zJztcblxuZXhwb3J0IHR5cGUgVGh5VGFibGVUaGVtZSA9ICdkZWZhdWx0JyB8ICdib3JkZXJlZCcgfCAnYm94ZWQnO1xuXG5leHBvcnQgdHlwZSBUaHlUYWJsZU1vZGUgPSAnbGlzdCcgfCAnZ3JvdXAnIHwgJ3RyZWUnO1xuXG5leHBvcnQgdHlwZSBUaHlUYWJsZVNpemUgPSAnbWQnIHwgJ3NtJyB8ICd4cycgfCAnbGcnIHwgJ3hsZycgfCAnZGVmYXVsdCc7XG5cbmV4cG9ydCBlbnVtIFRoeUZpeGVkRGlyZWN0aW9uIHtcbiAgICBsZWZ0ID0gJ2xlZnQnLFxuICAgIHJpZ2h0ID0gJ3JpZ2h0J1xufVxuXG5pbnRlcmZhY2UgVGh5VGFibGVHcm91cDxUID0gdW5rbm93bj4ge1xuICAgIGlkPzogc3RyaW5nO1xuICAgIGV4cGFuZD86IGJvb2xlYW47XG4gICAgY2hpbGRyZW4/OiBvYmplY3RbXTtcbiAgICBvcmlnaW4/OiBUO1xufVxuXG5jb25zdCB0YWJsZVRoZW1lTWFwID0ge1xuICAgIGRlZmF1bHQ6ICd0YWJsZS1kZWZhdWx0JyxcbiAgICBib3JkZXJlZDogJ3RhYmxlLWJvcmRlcmVkJyxcbiAgICBib3hlZDogJ3RhYmxlLWJveGVkJ1xufTtcblxuY29uc3QgY3VzdG9tVHlwZSA9IHtcbiAgICBpbmRleDogJ2luZGV4JyxcbiAgICBjaGVja2JveDogJ2NoZWNrYm94JyxcbiAgICByYWRpbzogJ3JhZGlvJyxcbiAgICBzd2l0Y2g6ICdzd2l0Y2gnXG59O1xuXG5jb25zdCBjc3MgPSB7XG4gICAgdGFibGVCb2R5OiAndGh5LXRhYmxlLWJvZHknLFxuICAgIHRhYmxlU2Nyb2xsTGVmdDogJ3RoeS10YWJsZS1zY3JvbGwtbGVmdCcsXG4gICAgdGFibGVTY3JvbGxSaWdodDogJ3RoeS10YWJsZS1zY3JvbGwtcmlnaHQnLFxuICAgIHRhYmxlU2Nyb2xsTWlkZGxlOiAndGh5LXRhYmxlLXNjcm9sbC1taWRkbGUnXG59O1xuXG5jb25zdCBwYXNzaXZlRXZlbnRMaXN0ZW5lck9wdGlvbnMgPSBub3JtYWxpemVQYXNzaXZlTGlzdGVuZXJPcHRpb25zKHsgcGFzc2l2ZTogdHJ1ZSB9KTtcblxuY29uc3QgX01peGluQmFzZTogQ29uc3RydWN0b3I8VGh5VW5zdWJzY3JpYmU+ICYgdHlwZW9mIE1peGluQmFzZSA9IG1peGluVW5zdWJzY3JpYmUoTWl4aW5CYXNlKTtcblxuLyoqXG4gKiDooajmoLznu4Tku7ZcbiAqIEBuYW1lIHRoeS10YWJsZVxuICogQG9yZGVyIDEwXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndGh5LXRhYmxlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBUSFlfVEFCTEVfQ09MVU1OX1BBUkVOVF9DT01QT05FTlQsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogVGh5VGFibGVcbiAgICAgICAgfSxcbiAgICAgICAgVXBkYXRlSG9zdENsYXNzU2VydmljZVxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAndGh5LXRhYmxlJyxcbiAgICAgICAgJ1tjbGFzcy50aHktdGFibGUtYm9yZGVyZWRdJzogYHRoZW1lID09PSAnYm9yZGVyZWQnYCxcbiAgICAgICAgJ1tjbGFzcy50aHktdGFibGUtYm94ZWRdJzogYHRoZW1lID09PSAnYm94ZWQnYCxcbiAgICAgICAgJ1tjbGFzcy50aHktdGFibGUtZml4ZWQtaGVhZGVyXSc6ICd0aHlIZWFkZXJGaXhlZCdcbiAgICB9LFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDZGtTY3JvbGxhYmxlLFxuICAgICAgICBOZ0NsYXNzLFxuICAgICAgICBOZ0ZvcixcbiAgICAgICAgTmdJZixcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgVGh5SWNvbixcbiAgICAgICAgVGh5RHJhZ0Ryb3BEaXJlY3RpdmUsXG4gICAgICAgIENka0Ryb3BMaXN0LFxuICAgICAgICBDZGtEcmFnLFxuICAgICAgICBUaHlDb250ZXh0TWVudURpcmVjdGl2ZSxcbiAgICAgICAgTmdTdHlsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFRoeVN3aXRjaCxcbiAgICAgICAgVGh5RW1wdHksXG4gICAgICAgIFRoeVRhYmxlU2tlbGV0b24sXG4gICAgICAgIFRoeVBhZ2luYXRpb24sXG4gICAgICAgIFRhYmxlSXNWYWxpZE1vZGVsVmFsdWVQaXBlLFxuICAgICAgICBUYWJsZVJvd0RyYWdEaXNhYmxlZFBpcGVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFRoeVRhYmxlIGV4dGVuZHMgX01peGluQmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIElUaHlUYWJsZUNvbHVtblBhcmVudENvbXBvbmVudCB7XG4gICAgcHVibGljIGN1c3RvbVR5cGUgPSBjdXN0b21UeXBlO1xuXG4gICAgcHVibGljIG1vZGVsOiBvYmplY3RbXSA9IFtdO1xuXG4gICAgcHVibGljIGdyb3VwczogVGh5VGFibGVHcm91cFtdID0gW107XG5cbiAgICBwdWJsaWMgcm93S2V5ID0gJ19pZCc7XG5cbiAgICBwdWJsaWMgZ3JvdXBCeTogc3RyaW5nO1xuXG4gICAgcHVibGljIG1vZGU6IFRoeVRhYmxlTW9kZSA9ICdsaXN0JztcblxuICAgIHB1YmxpYyB0aGVtZTogVGh5VGFibGVUaGVtZSA9ICdkZWZhdWx0JztcblxuICAgIHB1YmxpYyBjbGFzc05hbWUgPSAnJztcblxuICAgIHB1YmxpYyBzaXplOiBUaHlUYWJsZVNpemUgPSAnbWQnO1xuXG4gICAgcHVibGljIHJvd0NsYXNzTmFtZTogc3RyaW5nIHwgRnVuY3Rpb247XG5cbiAgICBwdWJsaWMgbG9hZGluZ0RvbmUgPSB0cnVlO1xuXG4gICAgcHVibGljIGxvYWRpbmdUZXh0OiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgZW1wdHlPcHRpb25zOiBUaHlUYWJsZUVtcHR5T3B0aW9ucyA9IHt9O1xuXG4gICAgcHVibGljIGRyYWdnYWJsZSA9IGZhbHNlO1xuXG4gICAgcHVibGljIHNlbGVjdGVkUmFkaW9Sb3c6IFNhZmVBbnkgPSBudWxsO1xuXG4gICAgcHVibGljIHBhZ2luYXRpb246IFRoeVBhZ2UgPSB7IGluZGV4OiAxLCBzaXplOiAyMCwgdG90YWw6IDAsIHNpemVPcHRpb25zOiBbMjAsIDUwLCAxMDBdIH07XG5cbiAgICBwdWJsaWMgdHJhY2tCeUZuOiBTYWZlQW55O1xuXG4gICAgcHVibGljIHdob2xlUm93U2VsZWN0ID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgZml4ZWREaXJlY3Rpb24gPSBUaHlGaXhlZERpcmVjdGlvbjtcblxuICAgIHB1YmxpYyBoYXNGaXhlZCA9IGZhbHNlO1xuXG4gICAgcHVibGljIGNvbHVtbnM6IFRoeVRhYmxlQ29sdW1uQ29tcG9uZW50W10gPSBbXTtcblxuICAgIHByaXZhdGUgX2RpZmY6IEl0ZXJhYmxlRGlmZmVyPFNhZmVBbnk+O1xuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfb2xkVGh5Q2xhc3NOYW1lID0gJyc7XG5cbiAgICBwcml2YXRlIHNjcm9sbENsYXNzTmFtZSA9IGNzcy50YWJsZVNjcm9sbExlZnQ7XG5cbiAgICBwcml2YXRlIGdldCB0YWJsZVNjcm9sbEVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjc3MudGFibGVCb2R5KVswXSBhcyBIVE1MRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBzY3JvbGwkKCkge1xuICAgICAgICByZXR1cm4gbWVyZ2UodGhpcy50YWJsZVNjcm9sbEVsZW1lbnQgPyBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy50YWJsZVNjcm9sbEVsZW1lbnQsICdzY3JvbGwnKSA6IEVNUFRZKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mlbDmja7kuLrnqbrml7blsZXnpLrnmoTmqKHmnb9cbiAgICAgKiBAdHlwZSBUZW1wbGF0ZVJlZlxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ2VtcHR5JykgZW1wdHlUZW1wbGF0ZTogVGVtcGxhdGVSZWY8U2FmZUFueT47XG5cbiAgICBAVmlld0NoaWxkKCd0YWJsZScsIHsgc3RhdGljOiB0cnVlIH0pIHRhYmxlRWxlbWVudFJlZjogRWxlbWVudFJlZjxTYWZlQW55PjtcblxuICAgIEBWaWV3Q2hpbGRyZW4oJ3Jvd3MnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgcm93czogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PjtcblxuICAgIC8qKlxuICAgICAqIOihqOagvOWxleekuuaWueW8j++8jOWIl+ihqC/liIbnu4Qv5qCRXG4gICAgICogQHR5cGUgbGlzdCB8IGdyb3VwIHwgdHJlZVxuICAgICAqIEBkZWZhdWx0IGxpc3RcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlNb2RlKHZhbHVlOiBUaHlUYWJsZU1vZGUpIHtcbiAgICAgICAgdGhpcy5tb2RlID0gdmFsdWUgfHwgdGhpcy5tb2RlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHRoeU1vZGXnmoTlgLzkuLogYGdyb3VwYCDml7bliIbnu4TnmoQgS2V5XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5R3JvdXBCeSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBCeSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruavj+ihjOaVsOaNrueahOWUr+S4gOagh+ivhuWxnuaAp+WQjVxuICAgICAqIEBkZWZhdWx0IF9pZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeVJvd0tleSh2YWx1ZTogU2FmZUFueSkge1xuICAgICAgICB0aGlzLnJvd0tleSA9IHZhbHVlIHx8IHRoaXMucm93S2V5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIhue7hOaVsOaNrua6kFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUdyb3Vwcyh2YWx1ZTogU2FmZUFueSkge1xuICAgICAgICBpZiAodGhpcy5tb2RlID09PSAnZ3JvdXAnKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkR3JvdXBzKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaVsOaNrua6kFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeU1vZGVsKHZhbHVlOiBTYWZlQW55KSB7XG4gICAgICAgIHRoaXMubW9kZWwgPSB2YWx1ZSB8fCBbXTtcbiAgICAgICAgdGhpcy5fZGlmZiA9IHRoaXMuX2RpZmZlcnMuZmluZCh0aGlzLm1vZGVsKS5jcmVhdGUoKTtcbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZURhdGFNb2RlbCgpO1xuXG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdncm91cCcpIHtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRNb2RlbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6KGo5qC855qE5pi+56S66aOO5qC877yMYGJvcmRlcmVkYCDml7blpLTpg6jmnInog4zmma/oibLkuJTliIblibLnur/ljLrliKvmmI7mmL5cbiAgICAgKiBAdHlwZSBkZWZhdWx0IHwgYm9yZGVyZWQgfCBib3hlZFxuICAgICAqIEBkZWZhdWx0IGRlZmF1bHRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlUaGVtZSh2YWx1ZTogVGh5VGFibGVUaGVtZSkge1xuICAgICAgICB0aGlzLnRoZW1lID0gdmFsdWUgfHwgdGhpcy50aGVtZTtcbiAgICAgICAgdGhpcy5fc2V0Q2xhc3MoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDooajmoLznmoTlpKflsI9cbiAgICAgKiBAdHlwZSB4cyB8IHNtIHwgbWQgfCBsZyB8IHhsZyB8IGRlZmF1bHRcbiAgICAgKiBAZGVmYXVsdCBtZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeVNpemUodmFsdWU6IFRoeVRhYmxlU2l6ZSkge1xuICAgICAgICB0aGlzLnNpemUgPSB2YWx1ZSB8fCB0aGlzLnNpemU7XG4gICAgICAgIHRoaXMuX3NldENsYXNzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u6KGo5qC85pyA5bCP5a695bqm77yM5LiA6Iis5piv6YCC55So5LqO6K6+572u5YiX5a695Li655m+5YiG5LmL5oiWYXV0b+aXtumZkOWItuihqOagvOacgOWwj+WuveW6pidcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dENzc1BpeGVsKClcbiAgICB0aHlNaW5XaWR0aDogc3RyaW5nIHwgbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICog6K6+572u5Li6IGZpeGVkIOW4g+WxgOihqOagvO+8jOiuvue9riBmaXhlZCDlkI7vvIzliJflrr3lsIbkuKXmoLzmjInnhaforr7nva7lrr3luqblsZXnpLrvvIzliJflrr3lsIbkuI3kvJrmoLnmja7ooajmoLzlhoXlrrnoh6rliqjosIPmlbRcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSB0aHlMYXlvdXRGaXhlZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuihqOWktOWbuuWumu+8jOiLpeiuvue9ruS4uiB0cnVl77yMIOmcgOimgeWQjOatpeiuvue9riB0aHlIZWlnaHRcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSB0aHlIZWFkZXJGaXhlZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIOihqOagvOeahOmrmOW6plxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUuaGVpZ2h0JylcbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dENzc1BpeGVsKClcbiAgICB0aHlIZWlnaHQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIOiuvue9ruihqOagvOeahOagt+W8j1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUNsYXNzTmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSB0aGlzLmNsYXNzTmFtZS5zcGxpdCgnICcpLmZpbHRlcihhID0+IGEudHJpbSgpKTtcbiAgICAgICAgY29uc3QgaW5kZXg6IG51bWJlciA9IGxpc3QuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSA9PT0gdGhpcy5fb2xkVGh5Q2xhc3NOYW1lKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgbGlzdC5zcGxpY2UoaW5kZXgsIDEsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxpc3QucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fb2xkVGh5Q2xhc3NOYW1lID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY2xhc3NOYW1lID0gbGlzdC5qb2luKCcgJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u6KGo5qC86KGM55qE5qC35byP77yM5Lyg5YWl5Ye95pWw77yM5pSv5oyBIHJvd+OAgWluZGV4XG4gICAgICogQHR5cGUgc3RyaW5nIHwgKHJvdywgaW5kZXgpID0+IHN0cmluZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeVJvd0NsYXNzTmFtZSh2YWx1ZTogc3RyaW5nIHwgRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5yb3dDbGFzc05hbWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7liqDovb3nirbmgIFcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASW5wdXRCb29sZWFuKClcbiAgICBzZXQgdGh5TG9hZGluZ0RvbmUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nRG9uZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruWKoOi9veaXtuaYvuekuueahOaWh+acrO+8jOW3suW6n+W8g1xuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5TG9hZGluZ1RleHQodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLmxvYWRpbmdUZXh0ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6YWN572u56m654q25oCB57uE5Lu2XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5RW1wdHlPcHRpb25zKHZhbHVlOiBUaHlUYWJsZUVtcHR5T3B0aW9ucykge1xuICAgICAgICB0aGlzLmVtcHR5T3B0aW9ucyA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuW8gOWQr+ihjOaLluaLvVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASW5wdXRCb29sZWFuKClcbiAgICBzZXQgdGh5RHJhZ2dhYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuZHJhZ2dhYmxlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICAgICAgaWYgKCh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpICYmIHRoaXMuZHJhZ2dhYmxlICYmIHRoaXMubW9kZSA9PT0gJ3RyZWUnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyZWUgbW9kZSBzb3J0aW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruW9k+WJjemhteeggVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dE51bWJlcigpXG4gICAgc2V0IHRoeVBhZ2VJbmRleCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbi5pbmRleCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruavj+mhteaYvuekuuaVsOmHj1xuICAgICAqIEBkZWZhdWx0IDIwXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASW5wdXROdW1iZXIoKVxuICAgIHNldCB0aHlQYWdlU2l6ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbi5zaXplID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5oC76aG15pWwXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASW5wdXROdW1iZXIoKVxuICAgIHNldCB0aHlQYWdlVG90YWwodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24udG90YWwgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDpgInkuK3lvZPliY3ooYzmmK/lkKboh6rliqjpgInkuK0gQ2hlY2tib3jvvIzkuI3lvIDlkK/ml7blj6rmnInngrnlh7sgQ2hlY2tib3gg5YiX5pe25omN5Lya6Kem5Y+R6YCJ5LitXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dEJvb2xlYW4oKVxuICAgIHNldCB0aHlXaG9sZVJvd1NlbGVjdCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuY2xhc3NOYW1lICs9ICcgdGFibGUtaG92ZXInO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud2hvbGVSb3dTZWxlY3QgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKbmmL7npLrooajmoLzlpLRcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSB0aHlIZWFkbGVzcyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5pi+56S66KGo5qC85aS077yM5bey5bqf5byD77yM6K+35L2/55SoIHRoeUhlYWRsZXNzXG4gICAgICogQGRlcHJlY2F0ZWQgcGxlYXNlIHVzZSB0aHlIZWFkbGVzc1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQElucHV0Qm9vbGVhbigpXG4gICAgc2V0IHRoeVNob3dIZWFkZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy50aHlIZWFkbGVzcyA9ICF2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKbmmL7npLrlt6bkvqcgVG90YWxcbiAgICAgKi9cbiAgICBASW5wdXQoJ3RoeVNob3dUb3RhbCcpIEBJbnB1dEJvb2xlYW4oKSBzaG93VG90YWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuaYvuekuuiwg+aVtOavj+mhteaYvuekuuadoeaVsOS4i+aLieahhlxuICAgICAqL1xuICAgIEBJbnB1dCgndGh5U2hvd1NpemVDaGFuZ2VyJykgQElucHV0Qm9vbGVhbigpIHNob3dTaXplQ2hhbmdlciA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog5q+P6aG15pi+56S65p2h5pWw5LiL5ouJ5qGG5Y+v6YCJ6aG5XG4gICAgICogQHR5cGUgbnVtYmVyW11cbiAgICAgKi9cbiAgICBASW5wdXQoJ3RoeVBhZ2VTaXplT3B0aW9ucycpXG4gICAgc2V0IHBhZ2VTaXplT3B0aW9ucyh2YWx1ZTogbnVtYmVyW10pIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uLnNpemVPcHRpb25zID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogdGh5TW9kZSDkuLogdHJlZSDml7bvvIzorr7nva4gVHJlZSDmoJHnirbmlbDmja7lsZXnpLrml7bnmoTnvKnov5tcbiAgICAgKi9cbiAgICBASW5wdXQoKSBASW5wdXROdW1iZXIoKSB0aHlJbmRlbnQgPSAyMDtcblxuICAgIC8qKlxuICAgICAqIHRoeU1vZGUg5Li6IHRyZWUg5pe277yM6K6+572uIFRyZWUg5qCR54q25pWw5o2u5a+56LGh5Lit55qE5a2Q6IqC54K5IEtleVxuICAgICAqIEB0eXBlIHN0cmluZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeUNoaWxkcmVuS2V5ID0gJ2NoaWxkcmVuJztcblxuICAgIC8qKlxuICAgICAqIOW8gOWQryBIb3ZlciDlkI7mmL7npLrmk43kvZzvvIzpu5jorqTkuI3mmL7npLrmk43kvZzljLrlhoXlrrnvvIzpvKDmoIcgSG92ZXIg5pe25bGV56S6XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS10YWJsZS1ob3Zlci1kaXNwbGF5LW9wZXJhdGlvbicpXG4gICAgQElucHV0KClcbiAgICBASW5wdXRCb29sZWFuKClcbiAgICB0aHlIb3ZlckRpc3BsYXlPcGVyYXRpb246IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSB0aHlEcmFnRGlzYWJsZWRQcmVkaWNhdGU6IChpdGVtOiBTYWZlQW55KSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDooajmoLzliJfnmoTpqqjmnrbnsbvlnotcbiAgICAgKiBAdHlwZSBUaHlUYWJsZUNvbHVtblNrZWxldG9uVHlwZVtdXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5Q29sdW1uU2tlbGV0b25UeXBlczogVGh5VGFibGVDb2x1bW5Ta2VsZXRvblR5cGVbXSA9IFtcbiAgICAgICAgVGh5VGFibGVDb2x1bW5Ta2VsZXRvblR5cGUudGl0bGUsXG4gICAgICAgIFRoeVRhYmxlQ29sdW1uU2tlbGV0b25UeXBlLm1lbWJlcixcbiAgICAgICAgVGh5VGFibGVDb2x1bW5Ta2VsZXRvblR5cGUuZGVmYXVsdFxuICAgIF07XG5cbiAgICAvKipcbiAgICAgKiDliIfmjaLnu4Tku7blm57osIPkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25Td2l0Y2hDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUaHlTd2l0Y2hFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVN3aXRjaEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog6KGo5qC85YiG6aG15Zue6LCD5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uUGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPFBhZ2VDaGFuZ2VkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxQYWdlQ2hhbmdlZEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog6KGo5qC85YiG6aG15b2T5YmN6aG15pS55Y+Y5Zue6LCD5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uUGFnZUluZGV4Q2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgQE91dHB1dCgpIHRoeU9uUGFnZVNpemVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICAvKipcbiAgICAgKiDlpJrpgInlm57osIPkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25NdWx0aVNlbGVjdENoYW5nZTogRXZlbnRFbWl0dGVyPFRoeU11bHRpU2VsZWN0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlNdWx0aVNlbGVjdEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog5Y2V6YCJ5Zue6LCD5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uUmFkaW9TZWxlY3RDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUaHlSYWRpb1NlbGVjdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5UmFkaW9TZWxlY3RFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOaLluWKqOS/ruaUueS6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPbkRyYWdnYWJsZUNoYW5nZTogRXZlbnRFbWl0dGVyPFRoeVRhYmxlRHJhZ2dhYmxlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUYWJsZURyYWdnYWJsZUV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog6KGo5qC86KGM54K55Ye76Kem5Y+R5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uUm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxUaHlUYWJsZVJvd0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5VGFibGVSb3dFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOWIl+aOkuW6j+S/ruaUueS6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlTb3J0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8VGh5VGFibGVTb3J0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUYWJsZVNvcnRFdmVudD4oKTtcblxuICAgIEBPdXRwdXQoKSB0aHlPblJvd0NvbnRleHRNZW51OiBFdmVudEVtaXR0ZXI8VGh5VGFibGVFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVRhYmxlRXZlbnQ+KCk7XG5cbiAgICBAQ29udGVudENoaWxkKCdncm91cCcsIHsgc3RhdGljOiB0cnVlIH0pIGdyb3VwVGVtcGxhdGU6IFRlbXBsYXRlUmVmPFNhZmVBbnk+O1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihUaHlUYWJsZUNvbHVtbkNvbXBvbmVudClcbiAgICBzZXQgbGlzdE9mQ29sdW1uQ29tcG9uZW50cyhjb21wb25lbnRzOiBRdWVyeUxpc3Q8VGh5VGFibGVDb2x1bW5Db21wb25lbnQ+KSB7XG4gICAgICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMgPSBjb21wb25lbnRzLnRvQXJyYXkoKTtcbiAgICAgICAgICAgIHRoaXMuaGFzRml4ZWQgPSAhIXRoaXMuY29sdW1ucy5maW5kKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmZpeGVkID09PSB0aGlzLmZpeGVkRGlyZWN0aW9uLmxlZnQgfHwgaXRlbS5maXhlZCA9PT0gdGhpcy5maXhlZERpcmVjdGlvbi5yaWdodDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5idWlsZFNrZWxldG9uQ29sdW1ucygpO1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZUNvbHVtbnMoKTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVEYXRhTW9kZWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIOaVsOaNrueahOaKmOWPoOWxleW8gOeKtuaAgVxuICAgIHB1YmxpYyBleHBhbmRTdGF0dXNNYXA6IERpY3Rpb25hcnk8Ym9vbGVhbj4gPSB7fTtcblxuICAgIHB1YmxpYyBleHBhbmRTdGF0dXNNYXBPZkdyb3VwOiBEaWN0aW9uYXJ5PGJvb2xlYW4+ID0ge307XG5cbiAgICBwcml2YXRlIGV4cGFuZFN0YXR1c01hcE9mR3JvdXBCZWZvcmVEcmFnOiBEaWN0aW9uYXJ5PGJvb2xlYW4+ID0ge307XG5cbiAgICBkcmFnUHJldmlld0NsYXNzID0gJ3RoeS10YWJsZS1kcmFnLXByZXZpZXcnO1xuXG4gICAgcHVibGljIHNrZWxldG9uQ29sdW1uczogVGh5VGFibGVTa2VsZXRvbkNvbHVtbltdID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgX2RpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycyxcbiAgICAgICAgcHJpdmF0ZSB2aWV3cG9ydFJ1bGVyOiBWaWV3cG9ydFJ1bGVyLFxuICAgICAgICBwcml2YXRlIHVwZGF0ZUhvc3RDbGFzc1NlcnZpY2U6IFVwZGF0ZUhvc3RDbGFzc1NlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IFNhZmVBbnksXG4gICAgICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogc3RyaW5nLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9iaW5kVHJhY2tGbigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRpYWxpemVDb2x1bW5zKCkge1xuICAgICAgICBpZiAoIXRoaXMuY29sdW1ucy5zb21lKGl0ZW0gPT4gaXRlbS5leHBhbmQgPT09IHRydWUpICYmIHRoaXMuY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNbMF0uZXhwYW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbml0aWFsaXplQ29sdW1uRml4ZWRQb3NpdGlvbnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pbml0aWFsaXplQ29sdW1uRml4ZWRQb3NpdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IGxlZnRGaXhlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5maXhlZCA9PT0gVGh5Rml4ZWREaXJlY3Rpb24ubGVmdCk7XG4gICAgICAgIGxlZnRGaXhlZENvbHVtbnMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzID0gbGVmdEZpeGVkQ29sdW1uc1tpbmRleCAtIDFdO1xuICAgICAgICAgICAgaXRlbS5sZWZ0ID0gcHJldmlvdXMgPyBwcmV2aW91cy5sZWZ0ICsgcGFyc2VJbnQocHJldmlvdXMud2lkdGgudG9TdHJpbmcoKSwgMTApIDogMDtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJpZ2h0Rml4ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihpdGVtID0+IGl0ZW0uZml4ZWQgPT09IFRoeUZpeGVkRGlyZWN0aW9uLnJpZ2h0KS5yZXZlcnNlKCk7XG4gICAgICAgIHJpZ2h0Rml4ZWRDb2x1bW5zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91cyA9IHJpZ2h0Rml4ZWRDb2x1bW5zW2luZGV4IC0gMV07XG4gICAgICAgICAgICBpdGVtLnJpZ2h0ID0gcHJldmlvdXMgPyBwcmV2aW91cy5yaWdodCArIHBhcnNlSW50KHByZXZpb3VzLndpZHRoLnRvU3RyaW5nKCksIDEwKSA6IDA7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRpYWxpemVEYXRhTW9kZWwoKSB7XG4gICAgICAgIHRoaXMubW9kZWwuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbml0aWFsU2VsZWN0aW9ucyhyb3csIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgdGhpcy5faW5pdGlhbEN1c3RvbU1vZGVsVmFsdWUocm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRpYWxTZWxlY3Rpb25zKHJvdzogb2JqZWN0LCBjb2x1bW46IFRoeVRhYmxlQ29sdW1uQ29tcG9uZW50KSB7XG4gICAgICAgIGlmIChjb2x1bW4uc2VsZWN0aW9ucykge1xuICAgICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbi5rZXldID0gY29sdW1uLnNlbGVjdGlvbnMuaW5jbHVkZXMocm93W3RoaXMucm93S2V5XSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHJvdywgY29sdW1uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ3JhZGlvJykge1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4uc2VsZWN0aW9ucy5pbmNsdWRlcyhyb3dbdGhpcy5yb3dLZXldKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW9Sb3cgPSByb3c7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdGlhbEN1c3RvbU1vZGVsVmFsdWUocm93OiBvYmplY3QsIGNvbHVtbjogVGh5VGFibGVDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBjdXN0b21UeXBlLnN3aXRjaCkge1xuICAgICAgICAgICAgcm93W2NvbHVtbi5rZXldID0gZ2V0KHJvdywgY29sdW1uLm1vZGVsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3JlZnJlc2hDdXN0b21Nb2RlbFZhbHVlKHJvdzogU2FmZUFueSkge1xuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbEN1c3RvbU1vZGVsVmFsdWUocm93LCBjb2x1bW4pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9hcHBseURpZmZDaGFuZ2VzKGNoYW5nZXM6IEl0ZXJhYmxlQ2hhbmdlczxTYWZlQW55Pikge1xuICAgICAgICBpZiAoY2hhbmdlcykge1xuICAgICAgICAgICAgY2hhbmdlcy5mb3JFYWNoQWRkZWRJdGVtKChyZWNvcmQ6IEl0ZXJhYmxlQ2hhbmdlUmVjb3JkPFNhZmVBbnk+KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1c3RvbU1vZGVsVmFsdWUocmVjb3JkLml0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9iaW5kVHJhY2tGbigpIHtcbiAgICAgICAgdGhpcy50cmFja0J5Rm4gPSBmdW5jdGlvbiAodGhpczogU2FmZUFueSwgaW5kZXg6IG51bWJlciwgcm93OiBTYWZlQW55KTogU2FmZUFueSB7XG4gICAgICAgICAgICByZXR1cm4gcm93ICYmIHRoaXMucm93S2V5ID8gcm93W3RoaXMucm93S2V5XSA6IGluZGV4O1xuICAgICAgICB9LmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGVzdHJveUludmFsaWRBdHRyaWJ1dGUoKSB7XG4gICAgICAgIHRoaXMubW9kZWwuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcm93KSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleS5pbmNsdWRlcygnWyQkY29sdW1uXScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb3dba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldENsYXNzKGZpcnN0ID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKCFmaXJzdCAmJiAhdGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGlmICh0aGlzLnNpemUpIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZXMucHVzaChgdGFibGUtJHt0aGlzLnNpemV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhYmxlVGhlbWVNYXBbdGhpcy50aGVtZV0pIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZXMucHVzaCh0YWJsZVRoZW1lTWFwW3RoaXMudGhlbWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlSG9zdENsYXNzU2VydmljZS51cGRhdGVDbGFzcyhjbGFzc05hbWVzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlQ29sdW1uU2VsZWN0aW9ucyhrZXk6IHN0cmluZywgc2VsZWN0aW9uczogU2FmZUFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZChpdGVtID0+IGl0ZW0ua2V5ID09PSBrZXkpO1xuICAgICAgICB0aGlzLm1vZGVsLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxTZWxlY3Rpb25zKHJvdywgY29sdW1uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzVGVtcGxhdGVSZWYocmVmOiBTYWZlQW55KSB7XG4gICAgICAgIHJldHVybiByZWYgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TW9kZWxWYWx1ZShyb3c6IFNhZmVBbnksIHBhdGg6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gZ2V0KHJvdywgcGF0aCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbmRlclJvd0NsYXNzTmFtZShyb3c6IFNhZmVBbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvd0NsYXNzTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU3RyaW5nKHRoaXMucm93Q2xhc3NOYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm93Q2xhc3NOYW1lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLnJvd0NsYXNzTmFtZSBhcyBGdW5jdGlvbikocm93LCBpbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25Nb2RlbENoYW5nZShyb3c6IFNhZmVBbnksIGNvbHVtbjogVGh5VGFibGVDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgaWYgKGNvbHVtbi5tb2RlbCkge1xuICAgICAgICAgICAgc2V0KHJvdywgY29sdW1uLm1vZGVsLCByb3dbY29sdW1uLmtleV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uU3RvcFByb3BhZ2F0aW9uKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBpZiAodGhpcy53aG9sZVJvd1NlbGVjdCkge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25QYWdlQ2hhbmdlKGV2ZW50OiBQYWdlQ2hhbmdlZEV2ZW50KSB7XG4gICAgICAgIHRoaXMudGh5T25QYWdlQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBhZ2VJbmRleENoYW5nZShldmVudDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudGh5T25QYWdlSW5kZXhDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGFnZVNpemVDaGFuZ2UoZXZlbnQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnRoeU9uUGFnZVNpemVDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2hlY2tib3hDaGFuZ2Uocm93OiBTYWZlQW55LCBjb2x1bW46IFRoeVRhYmxlQ29sdW1uQ29tcG9uZW50KSB7XG4gICAgICAgIHRoaXMub25Nb2RlbENoYW5nZShyb3csIGNvbHVtbik7XG4gICAgICAgIHRoaXMub25NdWx0aVNlbGVjdENoYW5nZShudWxsLCByb3csIGNvbHVtbik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTXVsdGlTZWxlY3RDaGFuZ2UoZXZlbnQ6IEV2ZW50LCByb3c6IFNhZmVBbnksIGNvbHVtbjogVGh5VGFibGVDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgY29uc3Qgcm93cyA9IHRoaXMubW9kZWwuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1bY29sdW1uLmtleV07XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBtdWx0aVNlbGVjdEV2ZW50OiBUaHlNdWx0aVNlbGVjdEV2ZW50ID0ge1xuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICByb3dzOiByb3dzXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudGh5T25NdWx0aVNlbGVjdENoYW5nZS5lbWl0KG11bHRpU2VsZWN0RXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJhZGlvU2VsZWN0Q2hhbmdlKGV2ZW50OiBFdmVudCwgcm93OiBTYWZlQW55KSB7XG4gICAgICAgIGNvbnN0IHJhZGlvU2VsZWN0RXZlbnQ6IFRoeVJhZGlvU2VsZWN0RXZlbnQgPSB7XG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICByb3c6IHJvd1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRoeU9uUmFkaW9TZWxlY3RDaGFuZ2UuZW1pdChyYWRpb1NlbGVjdEV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Td2l0Y2hDaGFuZ2UoZXZlbnQ6IEV2ZW50LCByb3c6IFNhZmVBbnksIGNvbHVtbjogU2FmZUFueSkge1xuICAgICAgICBjb25zdCBzd2l0Y2hFdmVudDogVGh5U3dpdGNoRXZlbnQgPSB7XG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgIHJlZnJlc2g6ICh2YWx1ZTogU2FmZUFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgfHwgcm93O1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZVtjb2x1bW4ua2V5XSA9IGdldCh2YWx1ZSwgY29sdW1uLm1vZGVsKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50aHlPblN3aXRjaENoYW5nZS5lbWl0KHN3aXRjaEV2ZW50KTtcbiAgICB9XG5cbiAgICBzaG93RXhwYW5kKHJvdzogU2FmZUFueSkge1xuICAgICAgICByZXR1cm4gcm93W3RoaXMudGh5Q2hpbGRyZW5LZXldICYmIHJvd1t0aGlzLnRoeUNoaWxkcmVuS2V5XS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIGlzRXhwYW5kZWQocm93OiBTYWZlQW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4cGFuZFN0YXR1c01hcFtyb3dbdGhpcy5yb3dLZXldXTtcbiAgICB9XG5cbiAgICBpY29uSW5kZW50Q29tcHV0ZWQobGV2ZWw6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5tb2RlID09PSAndHJlZScpIHtcbiAgICAgICAgICAgIHJldHVybiBsZXZlbCAqIHRoaXMudGh5SW5kZW50IC0gNTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRkSW5kZW50Q29tcHV0ZWQobGV2ZWw6IG51bWJlcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgICBwYWRkaW5nTGVmdDogYCR7KGxldmVsICsgMSkgKiB0aGlzLnRoeUluZGVudCAtIDV9cHhgXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZXhwYW5kQ2hpbGRyZW4ocm93OiBTYWZlQW55KSB7XG4gICAgICAgIGlmICh0aGlzLmlzRXhwYW5kZWQocm93KSkge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRTdGF0dXNNYXBbcm93W3RoaXMucm93S2V5XV0gPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kU3RhdHVzTWFwW3Jvd1t0aGlzLnJvd0tleV1dID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRHJhZ0dyb3VwU3RhcnRlZChldmVudDogQ2RrRHJhZ1N0YXJ0PHVua25vd24+KSB7XG4gICAgICAgIHRoaXMuZXhwYW5kU3RhdHVzTWFwT2ZHcm91cEJlZm9yZURyYWcgPSB7IC4uLnRoaXMuZXhwYW5kU3RhdHVzTWFwT2ZHcm91cCB9O1xuICAgICAgICBjb25zdCBncm91cHMgPSB0aGlzLmdyb3Vwcy5maWx0ZXIoZ3JvdXAgPT4gZ3JvdXAuZXhwYW5kKTtcbiAgICAgICAgdGhpcy5mb2xkR3JvdXBzKGdyb3Vwcyk7XG4gICAgICAgIHRoaXMub25EcmFnU3RhcnRlZChldmVudCk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBvbkRyYWdHcm91cEVuZChldmVudDogQ2RrRHJhZ0VuZDx1bmtub3duPikge1xuICAgICAgICBjb25zdCBncm91cHMgPSB0aGlzLmdyb3Vwcy5maWx0ZXIoZ3JvdXAgPT4gdGhpcy5leHBhbmRTdGF0dXNNYXBPZkdyb3VwQmVmb3JlRHJhZ1tncm91cC5pZF0pO1xuICAgICAgICB0aGlzLmV4cGFuZEdyb3Vwcyhncm91cHMpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkRyYWdHcm91cERyb3BwZWQoZXZlbnQ6IENka0RyYWdEcm9wPHVua25vd24+KSB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5ncm91cHMuZmluZChncm91cCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZXZlbnQuaXRlbS5kYXRhLmlkID09PSBncm91cC5pZDtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChncm91cCkge1xuICAgICAgICAgICAgLy8gZHJhZyBncm91cFxuICAgICAgICAgICAgY29uc3QgZHJhZ0V2ZW50OiBUaHlUYWJsZURyYWdnYWJsZUV2ZW50ID0ge1xuICAgICAgICAgICAgICAgIG1vZGVsOiBldmVudC5pdGVtLFxuICAgICAgICAgICAgICAgIG1vZGVsczogdGhpcy5ncm91cHMsXG4gICAgICAgICAgICAgICAgb2xkSW5kZXg6IGV2ZW50LnByZXZpb3VzSW5kZXgsXG4gICAgICAgICAgICAgICAgbmV3SW5kZXg6IGV2ZW50LmN1cnJlbnRJbmRleFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLmdyb3VwcywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICAgICAgICAgIHRoaXMudGh5T25EcmFnZ2FibGVDaGFuZ2UuZW1pdChkcmFnRXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gZHJhZyBncm91cCBjaGlsZHJlblxuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3Vwcy5maW5kKGdyb3VwID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQuaXRlbS5kYXRhW3RoaXMuZ3JvdXBCeV0gPT09IGdyb3VwLmlkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBncm91cEluZGV4ID1cbiAgICAgICAgICAgICAgICBldmVudC5jb250YWluZXIuZ2V0U29ydGVkSXRlbXMoKS5maW5kSW5kZXgoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmRhdGEuaWQgPT09IGV2ZW50Lml0ZW0uZGF0YVt0aGlzLmdyb3VwQnldO1xuICAgICAgICAgICAgICAgIH0pICsgMTtcbiAgICAgICAgICAgIGNvbnN0IGRyYWdFdmVudDogVGh5VGFibGVEcmFnZ2FibGVFdmVudCA9IHtcbiAgICAgICAgICAgICAgICBtb2RlbDogZXZlbnQuaXRlbSxcbiAgICAgICAgICAgICAgICBtb2RlbHM6IGdyb3VwLmNoaWxkcmVuLFxuICAgICAgICAgICAgICAgIG9sZEluZGV4OiBldmVudC5wcmV2aW91c0luZGV4IC0gZ3JvdXBJbmRleCxcbiAgICAgICAgICAgICAgICBuZXdJbmRleDogZXZlbnQuY3VycmVudEluZGV4IC0gZ3JvdXBJbmRleFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG1vdmVJdGVtSW5BcnJheShncm91cC5jaGlsZHJlbiwgZHJhZ0V2ZW50Lm9sZEluZGV4LCBkcmFnRXZlbnQubmV3SW5kZXgpO1xuICAgICAgICAgICAgdGhpcy50aHlPbkRyYWdnYWJsZUNoYW5nZS5lbWl0KGRyYWdFdmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRyYWdTdGFydGVkKGV2ZW50OiBDZGtEcmFnU3RhcnQ8dW5rbm93bj4pIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpZXcgPSB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUodGhpcy5kcmFnUHJldmlld0NsYXNzKVswXTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbFRkczogSFRNTENvbGxlY3Rpb24gPSBldmVudC5zb3VyY2UuX2RyYWdSZWYuZ2V0UGxhY2Vob2xkZXJFbGVtZW50KCk/LmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIGlmIChwcmV2aWV3KSB7XG4gICAgICAgICAgICAgICAgICAgIEFycmF5LmZyb20ocHJldmlldz8uY2hpbGRyZW4pLmZvckVhY2goKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7b3JpZ2luYWxUZHNbaW5kZXhdPy5jbGllbnRXaWR0aH1weGA7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZHJvcExpc3RFbnRlclByZWRpY2F0ZSA9IChpbmRleDogbnVtYmVyLCBkcmFnOiBDZGtEcmFnLCBkcm9wOiBDZGtEcm9wTGlzdCkgPT4ge1xuICAgICAgICByZXR1cm4gZHJvcC5nZXRTb3J0ZWRJdGVtcygpW2luZGV4XS5kYXRhLmdyb3VwX2lkID09PSBkcmFnLmRhdGEuZ3JvdXBfaWQ7XG4gICAgfTtcblxuICAgIHByaXZhdGUgb25EcmFnTW9kZWxEcm9wcGVkKGV2ZW50OiBDZGtEcmFnRHJvcDx1bmtub3duPikge1xuICAgICAgICBjb25zdCBkcmFnRXZlbnQ6IFRoeVRhYmxlRHJhZ2dhYmxlRXZlbnQgPSB7XG4gICAgICAgICAgICBtb2RlbDogZXZlbnQuaXRlbSxcbiAgICAgICAgICAgIG1vZGVsczogdGhpcy5tb2RlbCxcbiAgICAgICAgICAgIG9sZEluZGV4OiBldmVudC5wcmV2aW91c0luZGV4LFxuICAgICAgICAgICAgbmV3SW5kZXg6IGV2ZW50LmN1cnJlbnRJbmRleFxuICAgICAgICB9O1xuICAgICAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5tb2RlbCwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICAgICAgdGhpcy50aHlPbkRyYWdnYWJsZUNoYW5nZS5lbWl0KGRyYWdFdmVudCk7XG4gICAgfVxuXG4gICAgb25EcmFnRHJvcHBlZChldmVudDogQ2RrRHJhZ0Ryb3A8dW5rbm93bj4pIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ2dyb3VwJykge1xuICAgICAgICAgICAgdGhpcy5vbkRyYWdHcm91cERyb3BwZWQoZXZlbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gJ2xpc3QnKSB7XG4gICAgICAgICAgICB0aGlzLm9uRHJhZ01vZGVsRHJvcHBlZChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNvbHVtbkhlYWRlckNsaWNrKGV2ZW50OiBFdmVudCwgY29sdW1uOiBUaHlUYWJsZUNvbHVtbkNvbXBvbmVudCkge1xuICAgICAgICBpZiAoY29sdW1uLnNvcnRhYmxlKSB7XG4gICAgICAgICAgICBjb25zdCB7IHNvcnREaXJlY3Rpb24sIG1vZGVsLCBzb3J0Q2hhbmdlIH0gPSBjb2x1bW47XG4gICAgICAgICAgICBsZXQgZGlyZWN0aW9uO1xuICAgICAgICAgICAgaWYgKHNvcnREaXJlY3Rpb24gPT09IFRoeVRhYmxlU29ydERpcmVjdGlvbi5kZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gVGh5VGFibGVTb3J0RGlyZWN0aW9uLmRlc2M7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNvcnREaXJlY3Rpb24gPT09IFRoeVRhYmxlU29ydERpcmVjdGlvbi5kZXNjKSB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gVGh5VGFibGVTb3J0RGlyZWN0aW9uLmFzYztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gVGh5VGFibGVTb3J0RGlyZWN0aW9uLmRlZmF1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb2x1bW4uc29ydERpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IHNvcnRFdmVudCA9IHsgZXZlbnQsIGtleTogbW9kZWwsIGRpcmVjdGlvbiB9O1xuICAgICAgICAgICAgc29ydENoYW5nZS5lbWl0KHNvcnRFdmVudCk7XG4gICAgICAgICAgICB0aGlzLnRoeVNvcnRDaGFuZ2UuZW1pdChzb3J0RXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uUm93Q2xpY2soZXZlbnQ6IEV2ZW50LCByb3c6IFNhZmVBbnkpIHtcbiAgICAgICAgY29uc3QgbmV4dCA9IHRoaXMub25Sb3dDbGlja1Byb3BhZ2F0aW9uRXZlbnRIYW5kbGVyKGV2ZW50LCByb3cpO1xuICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgaWYgKHRoaXMud2hvbGVSb3dTZWxlY3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gY3VzdG9tVHlwZS5jaGVja2JveCB8fCBpdGVtLnR5cGUgPT09IGN1c3RvbVR5cGUucmFkaW87XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbiAmJiAhY29sdW1uLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gY3VzdG9tVHlwZS5jaGVja2JveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5rZXldID0gIXJvd1tjb2x1bW4ua2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Nb2RlbENoYW5nZShyb3csIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTXVsdGlTZWxlY3RDaGFuZ2UoZXZlbnQsIHJvdywgY29sdW1uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IGN1c3RvbVR5cGUucmFkaW8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpb1JvdyA9IHJvdztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25SYWRpb1NlbGVjdENoYW5nZShldmVudCwgcm93KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJvd0V2ZW50ID0ge1xuICAgICAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgICAgICByb3c6IHJvd1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMudGh5T25Sb3dDbGljay5lbWl0KHJvd0V2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25Sb3dDbGlja1Byb3BhZ2F0aW9uRXZlbnRIYW5kbGVyKGV2ZW50OiBFdmVudCwgcm93OiBTYWZlQW55KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICgoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpLmNsb3Nlc3QoJy50cmVlLWV4cGFuZC1pY29uJykpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kQ2hpbGRyZW4ocm93KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Sb3dDb250ZXh0TWVudShldmVudDogRXZlbnQsIHJvdzogU2FmZUFueSkge1xuICAgICAgICBjb25zdCBjb250ZXh0TWVudUV2ZW50OiBUaHlUYWJsZUV2ZW50ID0ge1xuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgcm93OiByb3dcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50aHlPblJvd0NvbnRleHRNZW51LmVtaXQoY29udGV4dE1lbnVFdmVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVmcmVzaENvbHVtbnMoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmNvbHVtbnMgfHwgW107XG4gICAgICAgIGNvbnN0IF9jb2x1bW5zID0gY29tcG9uZW50cy5tYXAoY29tcG9uZW50ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IGNvbXBvbmVudC53aWR0aCxcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IGNvbXBvbmVudC5jbGFzc05hbWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChuLCBpKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKG4sIF9jb2x1bW5zW2ldKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZEdyb3VwcyhvcmlnaW5Hcm91cHM6IFNhZmVBbnkpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luR3JvdXBzTWFwID0gaGVscGVycy5rZXlCeShvcmlnaW5Hcm91cHMsICdpZCcpO1xuICAgICAgICB0aGlzLmdyb3VwcyA9IFtdO1xuICAgICAgICBvcmlnaW5Hcm91cHMuZm9yRWFjaCgob3JpZ2luOiBTYWZlQW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBncm91cDogVGh5VGFibGVHcm91cCA9IHsgaWQ6IG9yaWdpblt0aGlzLnJvd0tleV0sIGNoaWxkcmVuOiBbXSwgb3JpZ2luIH07XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmV4cGFuZFN0YXR1c01hcE9mR3JvdXAuaGFzT3duUHJvcGVydHkoZ3JvdXAuaWQpKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXAuZXhwYW5kID0gdGhpcy5leHBhbmRTdGF0dXNNYXBPZkdyb3VwW2dyb3VwLmlkXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZ3JvdXAuZXhwYW5kID0gISEob3JpZ2luR3JvdXBzTWFwW2dyb3VwLmlkXSBhcyBTYWZlQW55KS5leHBhbmQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzLnB1c2goZ3JvdXApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkTW9kZWwoKSB7XG4gICAgICAgIGNvbnN0IGdyb3Vwc01hcCA9IGtleUJ5KHRoaXMuZ3JvdXBzLCAnaWQnKTtcbiAgICAgICAgdGhpcy5tb2RlbC5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IGdyb3Vwc01hcFtyb3dbdGhpcy5ncm91cEJ5XV07XG4gICAgICAgICAgICBpZiAoZ3JvdXApIHtcbiAgICAgICAgICAgICAgICBncm91cC5jaGlsZHJlbi5wdXNoKHJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBleHBhbmRHcm91cChncm91cDogVGh5VGFibGVHcm91cCkge1xuICAgICAgICBncm91cC5leHBhbmQgPSAhZ3JvdXAuZXhwYW5kO1xuICAgICAgICB0aGlzLmV4cGFuZFN0YXR1c01hcE9mR3JvdXBbZ3JvdXAuaWRdID0gZ3JvdXAuZXhwYW5kO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXhwYW5kR3JvdXBzKGdyb3VwczogVGh5VGFibGVHcm91cFtdKSB7XG4gICAgICAgIGdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kR3JvdXAoZ3JvdXApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvbGRHcm91cHMoZ3JvdXBzOiBUaHlUYWJsZUdyb3VwW10pIHtcbiAgICAgICAgZ3JvdXBzLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRHcm91cChncm91cCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlU2Nyb2xsQ2xhc3MoKSB7XG4gICAgICAgIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSB0aGlzLnRhYmxlU2Nyb2xsRWxlbWVudDtcbiAgICAgICAgY29uc3QgbWF4U2Nyb2xsTGVmdCA9IHNjcm9sbEVsZW1lbnQuc2Nyb2xsV2lkdGggLSBzY3JvbGxFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICBjb25zdCBzY3JvbGxYID0gc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgICBjb25zdCBsYXN0U2Nyb2xsQ2xhc3NOYW1lID0gdGhpcy5zY3JvbGxDbGFzc05hbWU7XG4gICAgICAgIHRoaXMuc2Nyb2xsQ2xhc3NOYW1lID0gJyc7XG4gICAgICAgIGlmIChzY3JvbGxFbGVtZW50LnNjcm9sbFdpZHRoID4gc2Nyb2xsRWxlbWVudC5jbGllbnRXaWR0aCkge1xuICAgICAgICAgICAgaWYgKHNjcm9sbFggPj0gbWF4U2Nyb2xsTGVmdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQ2xhc3NOYW1lID0gY3NzLnRhYmxlU2Nyb2xsUmlnaHQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbENsYXNzTmFtZSA9IGNzcy50YWJsZVNjcm9sbExlZnQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQ2xhc3NOYW1lID0gY3NzLnRhYmxlU2Nyb2xsTWlkZGxlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChsYXN0U2Nyb2xsQ2xhc3NOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMudGFibGVTY3JvbGxFbGVtZW50LCBsYXN0U2Nyb2xsQ2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zY3JvbGxDbGFzc05hbWUpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy50YWJsZVNjcm9sbEVsZW1lbnQsIHRoaXMuc2Nyb2xsQ2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnVwZGF0ZUhvc3RDbGFzc1NlcnZpY2UuaW5pdGlhbGl6ZUVsZW1lbnQodGhpcy50YWJsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIHRoaXMuX3NldENsYXNzKHRydWUpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcblxuICAgICAgICBtZXJnZSh0aGlzLnZpZXdwb3J0UnVsZXIuY2hhbmdlKDIwMCksIG9mKG51bGwpLnBpcGUoZGVsYXkoMjAwKSkpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlJCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ29sdW1ucygpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsQ2xhc3MoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbCQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxDbGFzcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRTa2VsZXRvbkNvbHVtbnMoKSB7XG4gICAgICAgIHRoaXMuc2tlbGV0b25Db2x1bW5zID0gW107XG5cbiAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogVGh5VGFibGVDb2x1bW5Db21wb25lbnQsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogdGhpcy50aHlDb2x1bW5Ta2VsZXRvblR5cGVzW2luZGV4XSB8fCBUaHlUYWJsZUNvbHVtblNrZWxldG9uVHlwZS5kZWZhdWx0LFxuICAgICAgICAgICAgICAgIHdpZHRoOiBjb2x1bW4ud2lkdGggfHwgJ2F1dG8nXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5za2VsZXRvbkNvbHVtbnMgPSBbLi4udGhpcy5za2VsZXRvbkNvbHVtbnMsIGl0ZW1dO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIGlmIChpc1BsYXRmb3JtU2VydmVyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucm93cy5jaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzdGFydFdpdGgodGhpcy5yb3dzKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoXG4gICAgICAgICAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JzZXJ2YWJsZTxFdmVudD4oc3Vic2NyaWJlciA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5yb3dzLm1hcChyb3cgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RlOiB0aGVyZSdzIG5vIG5lZWQgdG8gYWRkIHRvdWNoLCBwb2ludGVyIGFuZCBtb3VzZSBldmVudCBsaXN0ZW5lcnMgdG9nZXRoZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mIHJvd3MsIHdoaWNoIHdpbGwgbGVhZCB0byBhZGRpbmcgTiAqIDMgZXZlbnQgbGlzdGVuZXJzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIHNwZWMgKGh0dHBzOi8vd3d3LnczLm9yZy9UUi9wb2ludGVyZXZlbnRzLyNleGFtcGxlcyksIHdlIGNhbiB1c2UgZmVhdHVyZSBkZXRlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIGlmIHBvaW50ZXIgZXZlbnRzIGFyZSBhdmFpbGFibGUuIElmIHBvaW50ZXIgZXZlbnRzIGFyZSBhdmFpbGFibGUsIHdlIGhhdmUgdG8gbGlzdGVuIG9ubHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gdGhlIGBwb2ludGVyZG93bmAgZXZlbnQuIE90aGVyd2lzZSwgd2UgaGF2ZSB0byBkZXRlcm1pbmUgaWYgd2UncmUgb24gYSB0b3VjaCBkZXZpY2Ugb3Igbm90LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUb3VjaCBldmVudHMgYXJlIGhhbmRsZWQgZWFybGllciB0aGFuIG1vdXNlIGV2ZW50cywgdGhvIG5vdCBhbGwgdXNlciBhZ2VudHMgZGlzcGF0Y2ggbW91c2UgZXZlbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmdGVyIHRvdWNoIGV2ZW50cy4gU2VlIHRoZSBzcGVjOiBodHRwczovL3d3dy53My5vcmcvVFIvdG91Y2gtZXZlbnRzLyNtb3VzZS1ldmVudHMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5Qb2ludGVyRXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ3BvaW50ZXJkb3duJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnb250b3VjaHN0YXJ0JyBpbiByb3cubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAndG91Y2hzdGFydCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ21vdXNlZG93bicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGU6IHNpbmNlIENocm9tZSA1NiBkZWZhdWx0cyBkb2N1bWVudCBsZXZlbCBgdG91Y2hzdGFydGAgbGlzdGVuZXIgdG8gcGFzc2l2ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGVsZW1lbnQgYHRvdWNoc3RhcnRgIGxpc3RlbmVyIGlzIG5vdCBwYXNzaXZlIGJ5IGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmV2ZXIgY2FsbCBgcHJldmVudERlZmF1bHQoKWAgb24gaXQsIHNvIHdlJ3JlIHNhZmUgbWFraW5nIGl0IHBhc3NpdmUgdG9vLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QWRkRXZlbnRMaXN0ZW5lck9wdGlvbnM+cGFzc2l2ZUV2ZW50TGlzdGVuZXJPcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLnN1YnNjcmliZShzdWJzY3JpYmVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRyYWdnYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhzaW1wbGVDaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGNvbnN0IG1vZGVDaGFuZ2UgPSBzaW1wbGVDaGFuZ2VzLnRoeU1vZGU7XG4gICAgICAgIGNvbnN0IHRoeUdyb3Vwc0NoYW5nZSA9IHNpbXBsZUNoYW5nZXMudGh5R3JvdXBzO1xuICAgICAgICBjb25zdCBpc0dyb3VwTW9kZSA9IG1vZGVDaGFuZ2UgJiYgbW9kZUNoYW5nZS5jdXJyZW50VmFsdWUgPT09ICdncm91cCc7XG4gICAgICAgIGlmIChpc0dyb3VwTW9kZSAmJiB0aHlHcm91cHNDaGFuZ2UgJiYgdGh5R3JvdXBzQ2hhbmdlLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkR3JvdXBzKHRoeUdyb3Vwc0NoYW5nZS5jdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5idWlsZE1vZGVsKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZGlmZikge1xuICAgICAgICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuX2RpZmYuZGlmZih0aGlzLm1vZGVsKTtcbiAgICAgICAgICAgIHRoaXMuX2FwcGx5RGlmZkNoYW5nZXMoY2hhbmdlcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5fZGVzdHJveUludmFsaWRBdHRyaWJ1dGUoKTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwidGh5LXRhYmxlLWJvZHlcIlxuICBjZGtTY3JvbGxhYmxlXG4gIFtuZ0NsYXNzXT1cInsgJ3RoeS10YWJsZS1maXhlZCc6IGhhc0ZpeGVkLCAndGh5LXRhYmxlLWJvcmRlcmVkLXRoZW1lJzogdGhlbWUgPT09ICdib3JkZXJlZCcgJiYgaGFzRml4ZWQgfVwiPlxuICA8dGFibGVcbiAgICAjdGFibGVcbiAgICBjbGFzcz1cInRhYmxlXCJcbiAgICBbbmdDbGFzc109XCJbY2xhc3NOYW1lXVwiXG4gICAgW2NsYXNzLnRhYmxlLWZpeGVkXT1cInRoeUxheW91dEZpeGVkXCJcbiAgICBbY2xhc3MudGFibGUtZHJhZ2dhYmxlXT1cImRyYWdnYWJsZVwiXG4gICAgW2NsYXNzLnRhYmxlLWdyb3VwXT1cIm1vZGUgPT09ICdncm91cCdcIlxuICAgIFtzdHlsZS5taW4td2lkdGhdPVwidGh5TWluV2lkdGhcIj5cbiAgICA8Y29sZ3JvdXA+XG4gICAgICA8Y29sICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uc1wiIFt3aWR0aF09XCJjb2x1bW4ud2lkdGhcIiBbc3R5bGUubWluV2lkdGhdPVwiaGFzRml4ZWQgPyBjb2x1bW4ud2lkdGggOiBjb2x1bW4ubWluV2lkdGhcIiAvPlxuICAgIDwvY29sZ3JvdXA+XG5cbiAgICA8dGhlYWQgKm5nSWY9XCIhdGh5SGVhZGxlc3NcIj5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRoXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uaGVhZGVyQ2xhc3NOYW1lXCJcbiAgICAgICAgICBbY2xhc3MudGh5LXRhYmxlLWNvbHVtbi1zb3J0YWJsZV09XCJjb2x1bW4uc29ydGFibGVcIlxuICAgICAgICAgIFtjbGFzcy50aHktdGFibGUtZml4ZWQtY29sdW1uLWxlZnRdPVwiY29sdW1uLmZpeGVkID09PSBmaXhlZERpcmVjdGlvbi5sZWZ0XCJcbiAgICAgICAgICBbY2xhc3MudGh5LXRhYmxlLWZpeGVkLWNvbHVtbi1yaWdodF09XCJjb2x1bW4uZml4ZWQgPT09IGZpeGVkRGlyZWN0aW9uLnJpZ2h0XCJcbiAgICAgICAgICBbc3R5bGUubGVmdC5weF09XCJjb2x1bW4ubGVmdFwiXG4gICAgICAgICAgW3N0eWxlLnJpZ2h0LnB4XT1cImNvbHVtbi5yaWdodFwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uQ29sdW1uSGVhZGVyQ2xpY2soJGV2ZW50LCBjb2x1bW4pXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb2x1bW4uaGVhZGVyVGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7IGNvbHVtbi50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmhlYWRlclRlbXBsYXRlUmVmXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmhlYWRlclRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjb2x1bW4gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5zb3J0YWJsZVwiPlxuICAgICAgICAgICAgPHRoeS1pY29uIFtuZ0NsYXNzXT1cIlsndGh5LXRhYmxlLWNvbHVtbi1zb3J0YWJsZS1pY29uJywgJ3B4LTEnLCBjb2x1bW4uc29ydERpcmVjdGlvbl1cIiB0aHlJY29uTmFtZT1cInNvcnQtdmVydGljYWwtdHRcIj5cbiAgICAgICAgICAgIDwvdGh5LWljb24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGg+XG4gICAgICA8L3RyPlxuICAgIDwvdGhlYWQ+XG5cbiAgICA8dGJvZHlcbiAgICAgICpuZ0lmPVwibG9hZGluZ0RvbmVcIlxuICAgICAgdGh5RHJhZ0Ryb3BcbiAgICAgIGNka0Ryb3BMaXN0XG4gICAgICBbY2RrRHJvcExpc3REaXNhYmxlZF09XCIhZHJhZ2dhYmxlXCJcbiAgICAgIFtjZGtEcm9wTGlzdFNvcnRQcmVkaWNhdGVdPVwiZHJvcExpc3RFbnRlclByZWRpY2F0ZVwiXG4gICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cIm9uRHJhZ0Ryb3BwZWQoJGV2ZW50KVwiPlxuICAgICAgPCEtLSBncm91cCAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlID09PSAnZ3JvdXAnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGdyb3Vwc1wiPlxuICAgICAgICAgIDx0clxuICAgICAgICAgICAgY2xhc3M9XCJ0aHktdGFibGUtZ3JvdXBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImV4cGFuZEdyb3VwKGdyb3VwKVwiXG4gICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICBbY2RrRHJhZ1ByZXZpZXdDbGFzc109XCJkcmFnUHJldmlld0NsYXNzXCJcbiAgICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJncm91cFwiXG4gICAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cImdyb3VwIHwgdGFibGVSb3dEcmFnRGlzYWJsZWQgOiB0aHlEcmFnRGlzYWJsZWRQcmVkaWNhdGVcIlxuICAgICAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cIm9uRHJhZ0dyb3VwU3RhcnRlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChjZGtEcmFnRW5kZWQpPVwib25EcmFnR3JvdXBFbmQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwiY29sdW1ucy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoeS10YWJsZS1ncm91cC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZHJhZ2dhYmxlICYmICEoZ3JvdXAgfCB0YWJsZVJvd0RyYWdEaXNhYmxlZCA6IHRoeURyYWdEaXNhYmxlZFByZWRpY2F0ZSlcIj5cbiAgICAgICAgICAgICAgICAgIDx0aHktaWNvbiBjbGFzcz1cInRhYmxlLWRyYWdnYWJsZS1pY29uXCIgdGh5SWNvbk5hbWU9XCJkcmFnXCI+PC90aHktaWNvbj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8dGh5LWljb24gY2xhc3M9XCJleHBhbmQtaWNvblwiIFt0aHlJY29uTmFtZV09XCJncm91cC5leHBhbmQgPyAnYW5nbGUtZG93bicgOiAnYW5nbGUtcmlnaHQnXCI+PC90aHktaWNvbj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXBUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImdyb3VwVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGdyb3VwLm9yaWdpbiwgZ3JvdXA6IGdyb3VwLm9yaWdpbiB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3VwLmNoaWxkcmVuPy5sZW5ndGggJiYgZ3JvdXAuZXhwYW5kXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3cgb2YgZ3JvdXAuY2hpbGRyZW47IHRyYWNrQnk6IHRyYWNrQnlGbjsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0clRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgIGxldmVsOiAwXG4gICAgICAgICAgICAgICAgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBsaXN05qih5byP5LiL5rKh5pyJ55u05o6l5L2/55SoaXRlbeaooeadv++8jOaYr+WboOS4uuS9v+eUqOS6huaooeadv+W9seWTjeS6hkFuZ3VsYXLnmoTkvp3otZbmoJHvvIzlr7zoh7RDZGtEcmFnRHJvcOaOkuW6j+WkseaViO+8jOebruWJjei/meagt+S/ruaUueWPr+S7peaaguaXtuino+WGs+e6v+S4iuS4jeiDveaOkuW6j+eahOmXrumimO+8jFRyZWXmqKHlvI/nmoTmjpLluo/mmoLml7bkuI3mlK/mjIEgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PT0gJ2xpc3QnXCI+XG4gICAgICAgIDx0clxuICAgICAgICAgICNyb3dzXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHJvdyBvZiBtb2RlbDsgdHJhY2tCeTogdHJhY2tCeUZuOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICBjbGFzcz1cInRoeS1zb3J0YWJsZS1pdGVtXCJcbiAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgW2Nka0RyYWdQcmV2aWV3Q2xhc3NdPVwiZHJhZ1ByZXZpZXdDbGFzc1wiXG4gICAgICAgICAgW2Nka0RyYWdEYXRhXT1cInJvd1wiXG4gICAgICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCJyb3cgfCB0YWJsZVJvd0RyYWdEaXNhYmxlZCA6IHRoeURyYWdEaXNhYmxlZFByZWRpY2F0ZVwiXG4gICAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cIm9uRHJhZ1N0YXJ0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwicmVuZGVyUm93Q2xhc3NOYW1lKHJvdywgaSlcIlxuICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKCRldmVudCwgcm93KVwiXG4gICAgICAgICAgKHRoeUNvbnRleHRNZW51KT1cIm9uUm93Q29udGV4dE1lbnUoJGV2ZW50LCByb3cpXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZHNUZW1wbGF0ZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgIGxldmVsOiAwXG4gICAgICAgICAgICB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PT0gJ3RyZWUnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiBtb2RlbDsgdHJhY2tCeTogdHJhY2tCeUZuOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyByb3c6IHJvdywgaW5kZXg6IGksIGxldmVsOiAwIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI3RyVGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiIGxldC1pPVwiaW5kZXhcIiBsZXQtbGV2ZWw9XCJsZXZlbFwiPlxuICAgICAgICA8dHJcbiAgICAgICAgICAjcm93c1xuICAgICAgICAgIGNsYXNzPVwidGh5LXNvcnRhYmxlLWl0ZW1cIlxuICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICBbY2RrRHJhZ1ByZXZpZXdDbGFzc109XCJkcmFnUHJldmlld0NsYXNzXCJcbiAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwicm93XCJcbiAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25EcmFnU3RhcnRlZCgkZXZlbnQpXCJcbiAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cInJvdyB8IHRhYmxlUm93RHJhZ0Rpc2FibGVkIDogdGh5RHJhZ0Rpc2FibGVkUHJlZGljYXRlXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJyZW5kZXJSb3dDbGFzc05hbWUocm93LCBpKVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCByb3cpXCJcbiAgICAgICAgICAodGh5Q29udGV4dE1lbnUpPVwib25Sb3dDb250ZXh0TWVudSgkZXZlbnQsIHJvdylcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRkc1RlbXBsYXRlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgbGV2ZWw6IGxldmVsICsgMVxuICAgICAgICAgICAgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvdHI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZGUgPT09ICd0cmVlJyAmJiBpc0V4cGFuZGVkKHJvdylcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjaGlsZCBvZiByb3dbdGh5Q2hpbGRyZW5LZXldOyB0cmFja0J5OiB0cmFja0J5Rm47IGxldCBqID0gaW5kZXhcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidHJUZW1wbGF0ZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyByb3c6IGNoaWxkLCBpbmRleDogaiwgbGV2ZWw6IGxldmVsICsgMSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI3Rkc1RlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtaT1cImluZGV4XCIgbGV0LWxldmVsPVwibGV2ZWxcIj5cbiAgICAgICAgPHRkXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zOyBsZXQgaiA9IGluZGV4XCJcbiAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uY2xhc3NOYW1lXCJcbiAgICAgICAgICBbY2xhc3MudGh5LW9wZXJhdGlvbi1saW5rc109XCIhIWNvbHVtbi5vcGVyYXRpb25hbFwiXG4gICAgICAgICAgW2NsYXNzLnRoeS10YWJsZS1jb2x1bW4tc2Vjb25kYXJ5XT1cIiEhY29sdW1uLnNlY29uZGFyeVwiXG4gICAgICAgICAgW2NsYXNzLnRoeS10YWJsZS1jaGVja2JveC1jb2x1bW5dPVwiY29sdW1uLnR5cGUgPT09IGN1c3RvbVR5cGUuY2hlY2tib3hcIlxuICAgICAgICAgIFtjbGFzcy50aHktdGFibGUtZml4ZWQtY29sdW1uLWxlZnRdPVwiY29sdW1uLmZpeGVkID09PSBmaXhlZERpcmVjdGlvbi5sZWZ0XCJcbiAgICAgICAgICBbY2xhc3MudGh5LXRhYmxlLWZpeGVkLWNvbHVtbi1yaWdodF09XCJjb2x1bW4uZml4ZWQgPT09IGZpeGVkRGlyZWN0aW9uLnJpZ2h0XCJcbiAgICAgICAgICBbc3R5bGUubGVmdC5weF09XCJjb2x1bW4ubGVmdFwiXG4gICAgICAgICAgW3N0eWxlLnJpZ2h0LnB4XT1cImNvbHVtbi5yaWdodFwiXG4gICAgICAgICAgW25nU3R5bGVdPVwibW9kZSA9PT0gJ3RyZWUnICYmIGNvbHVtbi5leHBhbmQgPyB0ZEluZGVudENvbXB1dGVkKGxldmVsKSA6IG51bGxcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaiA9PT0gMCAmJiBkcmFnZ2FibGUgJiYgIShyb3cgfCB0YWJsZVJvd0RyYWdEaXNhYmxlZCA6IHRoeURyYWdEaXNhYmxlZFByZWRpY2F0ZSlcIj5cbiAgICAgICAgICAgIDx0aHktaWNvbiBjbGFzcz1cInRhYmxlLWRyYWdnYWJsZS1pY29uXCIgdGh5SWNvbk5hbWU9XCJkcmFnXCI+PC90aHktaWNvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDwhLS10ZW1wbGF0ZS0tPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1RlbXBsYXRlUmVmKGNvbHVtbi5jZWxsVGVtcGxhdGVSZWYpXCI+XG4gICAgICAgICAgICA8dGh5LWljb25cbiAgICAgICAgICAgICAgY2xhc3M9XCJ0cmVlLWV4cGFuZC1pY29uIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJtb2RlID09PSAndHJlZScgJiYgY29sdW1uLmV4cGFuZFwiXG4gICAgICAgICAgICAgIFt0aHlJY29uTmFtZV09XCJpc0V4cGFuZGVkKHJvdykgPyAnYW5nbGUtZG93bicgOiAnYW5nbGUtcmlnaHQnXCJcbiAgICAgICAgICAgICAgW3N0eWxlLnZpc2liaWxpdHldPVwic2hvd0V4cGFuZChyb3cpID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcIlxuICAgICAgICAgICAgICBbc3R5bGUubGVmdC5weF09XCJpY29uSW5kZW50Q29tcHV0ZWQobGV2ZWwpXCI+PC90aHktaWNvbj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4uY2VsbFRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiByb3cgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8IS0tbm90IHRlbXBsYXRlLS0+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1RlbXBsYXRlUmVmKGNvbHVtbi5jZWxsVGVtcGxhdGVSZWYpXCI+XG4gICAgICAgICAgICA8IS0tIGRlZmF1bHQgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLm1vZGVsICYmICFjb2x1bW4udHlwZVwiPlxuICAgICAgICAgICAgICA8dGh5LWljb25cbiAgICAgICAgICAgICAgICBjbGFzcz1cInRyZWUtZXhwYW5kLWljb24gY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwibW9kZSA9PT0gJ3RyZWUnICYmIGNvbHVtbi5leHBhbmRcIlxuICAgICAgICAgICAgICAgIFt0aHlJY29uTmFtZV09XCJpc0V4cGFuZGVkKHJvdykgPyAnYW5nbGUtZG93bicgOiAnYW5nbGUtcmlnaHQnXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUudmlzaWJpbGl0eV09XCJzaG93RXhwYW5kKHJvdykgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1hcmdpbkxlZnQucHhdPVwiaWNvbkluZGVudENvbXB1dGVkKGxldmVsKVwiPjwvdGh5LWljb24+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRNb2RlbFZhbHVlKHJvdywgY29sdW1uLm1vZGVsKSB8IGlzVmFsaWRNb2RlbFZhbHVlOyBlbHNlIGRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICB7eyBnZXRNb2RlbFZhbHVlKHJvdywgY29sdW1uLm1vZGVsKSB9fVxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0PlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2x1bW4uZGVmYXVsdFRleHRcIiBjbGFzcz1cInRleHQtZGVzY1wiPlxuICAgICAgICAgICAgICAgICAge3sgY29sdW1uLmRlZmF1bHRUZXh0IH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLSBpbmRleCAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gY3VzdG9tVHlwZS5pbmRleFwiPlxuICAgICAgICAgICAgICB7eyBpICsgMSB9fVxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS0gY2hlY2tib3ggLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09IGN1c3RvbVR5cGUuY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4ua2V5XVwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGVja2JveENoYW5nZShyb3csIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblN0b3BQcm9wYWdhdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sdW1uLmRpc2FibGVkXCIgLz5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8IS0tIHJhZGlvIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi50eXBlID09PSBjdXN0b21UeXBlLnJhZGlvXCI+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFJhZGlvUm93XCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwicm93XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sdW1uLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TdG9wUHJvcGFnYXRpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblJhZGlvU2VsZWN0Q2hhbmdlKCRldmVudCwgcm93KVwiIC8+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLSBzd2l0Y2ggLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09IGN1c3RvbVR5cGUuc3dpdGNoXCI+XG4gICAgICAgICAgICAgIDx0aHktc3dpdGNoXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmtleV1cIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uTW9kZWxDaGFuZ2Uocm93LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sdW1uLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAodGh5Q2hhbmdlKT1cIm9uU3dpdGNoQ2hhbmdlKCRldmVudCwgcm93LCBjb2x1bW4pXCI+PC90aHktc3dpdGNoPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvdGJvZHk+XG4gIDwvdGFibGU+XG5cbiAgPGRpdiAqbmdJZj1cImxvYWRpbmdEb25lICYmIG1vZGVsLmxlbmd0aCA9PT0gMCAmJiBncm91cHMubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJ0aHktdGFibGUtZW1wdHkgY2xlYXItaG92ZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZW1wdHlUZW1wbGF0ZTsgZWxzZSBkZWZhdWx0RW1wdHlcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJlbXB0eVRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRFbXB0eT5cbiAgICAgIDx0aHktZW1wdHlcbiAgICAgICAgW3RoeU1lc3NhZ2VdPVwiZW1wdHlPcHRpb25zLm1lc3NhZ2VcIlxuICAgICAgICBbdGh5VHJhbnNsYXRpb25LZXldPVwiZW1wdHlPcHRpb25zLnRyYW5zbGF0aW9uS2V5XCJcbiAgICAgICAgW3RoeVRyYW5zbGF0aW9uVmFsdWVzXT1cImVtcHR5T3B0aW9ucy50cmFuc2xhdGlvblZhbHVlc1wiXG4gICAgICAgIFt0aHlFbnRpdHlOYW1lXT1cImVtcHR5T3B0aW9ucy5lbnRpdHlOYW1lXCJcbiAgICAgICAgW3RoeUVudGl0eU5hbWVUcmFuc2xhdGVLZXldPVwiZW1wdHlPcHRpb25zLmVudGl0eU5hbWVUcmFuc2xhdGVLZXlcIlxuICAgICAgICBbdGh5SWNvbk5hbWVdPVwiZW1wdHlPcHRpb25zLmljb25OYW1lXCJcbiAgICAgICAgW3RoeVNpemVdPVwiZW1wdHlPcHRpb25zLnNpemVcIlxuICAgICAgICBbdGh5TWFyZ2luVG9wXT1cImVtcHR5T3B0aW9ucy5tYXJnaW5Ub3BcIlxuICAgICAgICBbdGh5VG9wQXV0b109XCJlbXB0eU9wdGlvbnMudG9wQXV0b1wiXG4gICAgICAgIFt0aHlDb250YWluZXJdPVwiZW1wdHlPcHRpb25zLmNvbnRhaW5lclwiPjwvdGh5LWVtcHR5PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuXG4gIDx0aHktdGFibGUtc2tlbGV0b25cbiAgICAqbmdJZj1cIiFsb2FkaW5nRG9uZVwiXG4gICAgW3RoeVJvd0NvdW50XT1cIjZcIlxuICAgIFt0aHlIZWFkbGVzc109XCJ0cnVlXCJcbiAgICBbdGh5VGhlbWVdPVwidGhlbWVcIlxuICAgIFt0aHlTaXplXT1cInNpemVcIlxuICAgIFt0aHlNaW5XaWR0aF09XCJ0aHlNaW5XaWR0aFwiXG4gICAgW3RoeUNvbHVtbnNdPVwic2tlbGV0b25Db2x1bW5zXCI+XG4gIDwvdGh5LXRhYmxlLXNrZWxldG9uPlxuXG4gIDxkaXYgY2xhc3M9XCJ0aHktdGFibGUtZm9vdGVyXCIgKm5nSWY9XCJwYWdpbmF0aW9uLnRvdGFsID4gcGFnaW5hdGlvbi5zaXplXCIgW2NsYXNzLnRoeS10YWJsZS1mb290ZXItaGFzLXBhZGRpbmddPVwidGhlbWUgPT09ICdkZWZhdWx0J1wiPlxuICAgIDx0aHktcGFnaW5hdGlvblxuICAgICAgW3RoeVBhZ2VJbmRleF09XCJwYWdpbmF0aW9uLmluZGV4XCJcbiAgICAgIFt0aHlUb3RhbF09XCJwYWdpbmF0aW9uLnRvdGFsXCJcbiAgICAgIFt0aHlQYWdlU2l6ZV09XCJwYWdpbmF0aW9uLnNpemVcIlxuICAgICAgW3RoeVBhZ2VTaXplT3B0aW9uc109XCJwYWdpbmF0aW9uLnNpemVPcHRpb25zXCJcbiAgICAgIFt0aHlTaG93U2l6ZUNoYW5nZXJdPVwic2hvd1NpemVDaGFuZ2VyXCJcbiAgICAgIFt0aHlTaG93VG90YWxdPVwic2hvd1RvdGFsXCJcbiAgICAgICh0aHlQYWdlQ2hhbmdlZCk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAodGh5UGFnZUluZGV4Q2hhbmdlKT1cIm9uUGFnZUluZGV4Q2hhbmdlKCRldmVudClcIlxuICAgICAgKHRoeVBhZ2VTaXplQ2hhbmdlZCk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIj48L3RoeS1wYWdpbmF0aW9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGU+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
975
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFlLGFBQWEsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQWtCLHNCQUFzQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFbEksT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEUsT0FBTyxFQUFFLE9BQU8sRUFBeUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlHLE9BQU8sRUFFSCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBSUwsZUFBZSxFQUNmLE1BQU0sRUFDTixlQUFl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QU07Z0JBRUcsbUJBQW1CO3NCQUE1QixNQUFNO2dCQUtHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFLRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBS0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUtHLGFBQWE7c0JBQXRCLE1BQU07Z0JBS0csYUFBYTtzQkFBdEIsTUFBTTtnQkFFRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBRWtDLGFBQWE7c0JBQXJELFlBQVk7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHbkMsc0JBQXNCO3NCQUR6QixlQUFlO3VCQUFDLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdG9yLCBJbnB1dENzc1BpeGVsLCBNaXhpbkJhc2UsIG1peGluVW5zdWJzY3JpYmUsIFRoeVVuc3Vic2NyaWJlLCBVcGRhdGVIb3N0Q2xhc3NTZXJ2aWNlIH0gZnJvbSAnbmd4LXRldGh5cy9jb3JlJztcbmltcG9ydCB7IERpY3Rpb25hcnksIFNhZmVBbnkgfSBmcm9tICduZ3gtdGV0aHlzL3R5cGVzJztcbmltcG9ydCB7IGdldCwgaGVscGVycywgaXNTdHJpbmcsIGtleUJ5LCBzZXQgfSBmcm9tICduZ3gtdGV0aHlzL3V0aWwnO1xuaW1wb3J0IHsgRU1QVFksIGZyb21FdmVudCwgbWVyZ2UsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWxheSwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQ2RrRHJhZywgQ2RrRHJhZ0Ryb3AsIENka0RyYWdFbmQsIENka0RyYWdTdGFydCwgQ2RrRHJvcExpc3QsIG1vdmVJdGVtSW5BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgVmlld3BvcnRSdWxlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IG5vcm1hbGl6ZVBhc3NpdmVMaXN0ZW5lck9wdGlvbnMgfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHsgRE9DVU1FTlQsIGlzUGxhdGZvcm1TZXJ2ZXIsIE5nQ2xhc3MsIE5nRm9yLCBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0LCBOZ1N0eWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBJdGVyYWJsZUNoYW5nZVJlY29yZCxcbiAgICBJdGVyYWJsZUNoYW5nZXMsXG4gICAgSXRlcmFibGVEaWZmZXIsXG4gICAgSXRlcmFibGVEaWZmZXJzLFxuICAgIE5nWm9uZSxcbiAgICBudW1iZXJBdHRyaWJ1dGUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFBMQVRGT1JNX0lELFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBSZW5kZXJlcjIsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBJVGh5VGFibGVDb2x1bW5QYXJlbnRDb21wb25lbnQsIFRIWV9UQUJMRV9DT0xVTU5fUEFSRU5UX0NPTVBPTkVOVCwgVGh5VGFibGVDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuL3RhYmxlLWNvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgICBQYWdlQ2hhbmdlZEV2ZW50LFxuICAgIFRoeU11bHRpU2VsZWN0RXZlbnQsXG4gICAgVGh5UGFnZSxcbiAgICBUaHlSYWRpb1NlbGVjdEV2ZW50LFxuICAgIFRoeVN3aXRjaEV2ZW50LFxuICAgIFRoeVRhYmxlU2tlbGV0b25Db2x1bW4sXG4gICAgVGh5VGFibGVEcmFnZ2FibGVFdmVudCxcbiAgICBUaHlUYWJsZUVtcHR5T3B0aW9ucyxcbiAgICBUaHlUYWJsZUV2ZW50LFxuICAgIFRoeVRhYmxlUm93RXZlbnQsXG4gICAgVGh5VGFibGVTb3J0RGlyZWN0aW9uLFxuICAgIFRoeVRhYmxlU29ydEV2ZW50XG59IGZyb20gJy4vdGFibGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IFRhYmxlUm93RHJhZ0Rpc2FibGVkUGlwZSB9IGZyb20gJy4vcGlwZXMvZHJhZy5waXBlJztcbmltcG9ydCB7IFRhYmxlSXNWYWxpZE1vZGVsVmFsdWVQaXBlIH0gZnJvbSAnLi9waXBlcy90YWJsZS5waXBlJztcbmltcG9ydCB7IFRoeVBhZ2luYXRpb24gfSBmcm9tICduZ3gtdGV0aHlzL3BhZ2luYXRpb24nO1xuaW1wb3J0IHsgVGh5VGFibGVTa2VsZXRvbiB9IGZyb20gJy4vdGFibGUtc2tlbGV0b24uY29tcG9uZW50JztcbmltcG9ydCB7IFRoeUVtcHR5IH0gZnJvbSAnbmd4LXRldGh5cy9lbXB0eSc7XG5pbXBvcnQgeyBUaHlTd2l0Y2ggfSBmcm9tICduZ3gtdGV0aHlzL3N3aXRjaCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRoeURyYWdEcm9wRGlyZWN0aXZlLCBUaHlDb250ZXh0TWVudURpcmVjdGl2ZSB9IGZyb20gJ25neC10ZXRoeXMvc2hhcmVkJztcbmltcG9ydCB7IFRoeUljb24gfSBmcm9tICduZ3gtdGV0aHlzL2ljb24nO1xuaW1wb3J0IHsgQ2RrU2Nyb2xsYWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgVGh5VGFibGVDb2x1bW5Ta2VsZXRvblR5cGUgfSBmcm9tICcuL2VudW1zJztcblxuZXhwb3J0IHR5cGUgVGh5VGFibGVUaGVtZSA9ICdkZWZhdWx0JyB8ICdib3JkZXJlZCcgfCAnYm94ZWQnO1xuXG5leHBvcnQgdHlwZSBUaHlUYWJsZU1vZGUgPSAnbGlzdCcgfCAnZ3JvdXAnIHwgJ3RyZWUnO1xuXG5leHBvcnQgdHlwZSBUaHlUYWJsZVNpemUgPSAnbWQnIHwgJ3NtJyB8ICd4cycgfCAnbGcnIHwgJ3hsZycgfCAnZGVmYXVsdCc7XG5cbmV4cG9ydCBlbnVtIFRoeUZpeGVkRGlyZWN0aW9uIHtcbiAgICBsZWZ0ID0gJ2xlZnQnLFxuICAgIHJpZ2h0ID0gJ3JpZ2h0J1xufVxuXG5pbnRlcmZhY2UgVGh5VGFibGVHcm91cDxUID0gdW5rbm93bj4ge1xuICAgIGlkPzogc3RyaW5nO1xuICAgIGV4cGFuZD86IGJvb2xlYW47XG4gICAgY2hpbGRyZW4/OiBvYmplY3RbXTtcbiAgICBvcmlnaW4/OiBUO1xufVxuXG5jb25zdCB0YWJsZVRoZW1lTWFwID0ge1xuICAgIGRlZmF1bHQ6ICd0YWJsZS1kZWZhdWx0JyxcbiAgICBib3JkZXJlZDogJ3RhYmxlLWJvcmRlcmVkJyxcbiAgICBib3hlZDogJ3RhYmxlLWJveGVkJ1xufTtcblxuY29uc3QgY3VzdG9tVHlwZSA9IHtcbiAgICBpbmRleDogJ2luZGV4JyxcbiAgICBjaGVja2JveDogJ2NoZWNrYm94JyxcbiAgICByYWRpbzogJ3JhZGlvJyxcbiAgICBzd2l0Y2g6ICdzd2l0Y2gnXG59O1xuXG5jb25zdCBjc3MgPSB7XG4gICAgdGFibGVCb2R5OiAndGh5LXRhYmxlLWJvZHknLFxuICAgIHRhYmxlU2Nyb2xsTGVmdDogJ3RoeS10YWJsZS1zY3JvbGwtbGVmdCcsXG4gICAgdGFibGVTY3JvbGxSaWdodDogJ3RoeS10YWJsZS1zY3JvbGwtcmlnaHQnLFxuICAgIHRhYmxlU2Nyb2xsTWlkZGxlOiAndGh5LXRhYmxlLXNjcm9sbC1taWRkbGUnXG59O1xuXG5jb25zdCBwYXNzaXZlRXZlbnRMaXN0ZW5lck9wdGlvbnMgPSBub3JtYWxpemVQYXNzaXZlTGlzdGVuZXJPcHRpb25zKHsgcGFzc2l2ZTogdHJ1ZSB9KTtcblxuY29uc3QgX01peGluQmFzZTogQ29uc3RydWN0b3I8VGh5VW5zdWJzY3JpYmU+ICYgdHlwZW9mIE1peGluQmFzZSA9IG1peGluVW5zdWJzY3JpYmUoTWl4aW5CYXNlKTtcblxuLyoqXG4gKiDooajmoLznu4Tku7ZcbiAqIEBuYW1lIHRoeS10YWJsZVxuICogQG9yZGVyIDEwXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndGh5LXRhYmxlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBUSFlfVEFCTEVfQ09MVU1OX1BBUkVOVF9DT01QT05FTlQsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogVGh5VGFibGVcbiAgICAgICAgfSxcbiAgICAgICAgVXBkYXRlSG9zdENsYXNzU2VydmljZVxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAndGh5LXRhYmxlJyxcbiAgICAgICAgJ1tjbGFzcy50aHktdGFibGUtYm9yZGVyZWRdJzogYHRoZW1lID09PSAnYm9yZGVyZWQnYCxcbiAgICAgICAgJ1tjbGFzcy50aHktdGFibGUtYm94ZWRdJzogYHRoZW1lID09PSAnYm94ZWQnYCxcbiAgICAgICAgJ1tjbGFzcy50aHktdGFibGUtZml4ZWQtaGVhZGVyXSc6ICd0aHlIZWFkZXJGaXhlZCdcbiAgICB9LFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDZGtTY3JvbGxhYmxlLFxuICAgICAgICBOZ0NsYXNzLFxuICAgICAgICBOZ0ZvcixcbiAgICAgICAgTmdJZixcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgVGh5SWNvbixcbiAgICAgICAgVGh5RHJhZ0Ryb3BEaXJlY3RpdmUsXG4gICAgICAgIENka0Ryb3BMaXN0LFxuICAgICAgICBDZGtEcmFnLFxuICAgICAgICBUaHlDb250ZXh0TWVudURpcmVjdGl2ZSxcbiAgICAgICAgTmdTdHlsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFRoeVN3aXRjaCxcbiAgICAgICAgVGh5RW1wdHksXG4gICAgICAgIFRoeVRhYmxlU2tlbGV0b24sXG4gICAgICAgIFRoeVBhZ2luYXRpb24sXG4gICAgICAgIFRhYmxlSXNWYWxpZE1vZGVsVmFsdWVQaXBlLFxuICAgICAgICBUYWJsZVJvd0RyYWdEaXNhYmxlZFBpcGVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFRoeVRhYmxlIGV4dGVuZHMgX01peGluQmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIElUaHlUYWJsZUNvbHVtblBhcmVudENvbXBvbmVudCB7XG4gICAgcHVibGljIGN1c3RvbVR5cGUgPSBjdXN0b21UeXBlO1xuXG4gICAgcHVibGljIG1vZGVsOiBvYmplY3RbXSA9IFtdO1xuXG4gICAgcHVibGljIGdyb3VwczogVGh5VGFibGVHcm91cFtdID0gW107XG5cbiAgICBwdWJsaWMgcm93S2V5ID0gJ19pZCc7XG5cbiAgICBwdWJsaWMgZ3JvdXBCeTogc3RyaW5nO1xuXG4gICAgcHVibGljIG1vZGU6IFRoeVRhYmxlTW9kZSA9ICdsaXN0JztcblxuICAgIHB1YmxpYyB0aGVtZTogVGh5VGFibGVUaGVtZSA9ICdkZWZhdWx0JztcblxuICAgIHB1YmxpYyBjbGFzc05hbWUgPSAnJztcblxuICAgIHB1YmxpYyBzaXplOiBUaHlUYWJsZVNpemUgPSAnbWQnO1xuXG4gICAgcHVibGljIHJvd0NsYXNzTmFtZTogc3RyaW5nIHwgRnVuY3Rpb247XG5cbiAgICBwdWJsaWMgbG9hZGluZ0RvbmUgPSB0cnVlO1xuXG4gICAgcHVibGljIGxvYWRpbmdUZXh0OiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgZW1wdHlPcHRpb25zOiBUaHlUYWJsZUVtcHR5T3B0aW9ucyA9IHt9O1xuXG4gICAgcHVibGljIGRyYWdnYWJsZSA9IGZhbHNlO1xuXG4gICAgcHVibGljIHNlbGVjdGVkUmFkaW9Sb3c6IFNhZmVBbnkgPSBudWxsO1xuXG4gICAgcHVibGljIHBhZ2luYXRpb246IFRoeVBhZ2UgPSB7IGluZGV4OiAxLCBzaXplOiAyMCwgdG90YWw6IDAsIHNpemVPcHRpb25zOiBbMjAsIDUwLCAxMDBdIH07XG5cbiAgICBwdWJsaWMgdHJhY2tCeUZuOiBTYWZlQW55O1xuXG4gICAgcHVibGljIHdob2xlUm93U2VsZWN0ID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgZml4ZWREaXJlY3Rpb24gPSBUaHlGaXhlZERpcmVjdGlvbjtcblxuICAgIHB1YmxpYyBoYXNGaXhlZCA9IGZhbHNlO1xuXG4gICAgcHVibGljIGNvbHVtbnM6IFRoeVRhYmxlQ29sdW1uQ29tcG9uZW50W10gPSBbXTtcblxuICAgIHByaXZhdGUgX2RpZmY6IEl0ZXJhYmxlRGlmZmVyPFNhZmVBbnk+O1xuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfb2xkVGh5Q2xhc3NOYW1lID0gJyc7XG5cbiAgICBwcml2YXRlIHNjcm9sbENsYXNzTmFtZSA9IGNzcy50YWJsZVNjcm9sbExlZnQ7XG5cbiAgICBwcml2YXRlIGdldCB0YWJsZVNjcm9sbEVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjc3MudGFibGVCb2R5KVswXSBhcyBIVE1MRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBzY3JvbGwkKCkge1xuICAgICAgICByZXR1cm4gbWVyZ2UodGhpcy50YWJsZVNjcm9sbEVsZW1lbnQgPyBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy50YWJsZVNjcm9sbEVsZW1lbnQsICdzY3JvbGwnKSA6IEVNUFRZKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mlbDmja7kuLrnqbrml7blsZXnpLrnmoTmqKHmnb9cbiAgICAgKiBAdHlwZSBUZW1wbGF0ZVJlZlxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ2VtcHR5JykgZW1wdHlUZW1wbGF0ZTogVGVtcGxhdGVSZWY8U2FmZUFueT47XG5cbiAgICBAVmlld0NoaWxkKCd0YWJsZScsIHsgc3RhdGljOiB0cnVlIH0pIHRhYmxlRWxlbWVudFJlZjogRWxlbWVudFJlZjxTYWZlQW55PjtcblxuICAgIEBWaWV3Q2hpbGRyZW4oJ3Jvd3MnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgcm93czogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PjtcblxuICAgIC8qKlxuICAgICAqIOihqOagvOWxleekuuaWueW8j++8jOWIl+ihqC/liIbnu4Qv5qCRXG4gICAgICogQHR5cGUgbGlzdCB8IGdyb3VwIHwgdHJlZVxuICAgICAqIEBkZWZhdWx0IGxpc3RcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlNb2RlKHZhbHVlOiBUaHlUYWJsZU1vZGUpIHtcbiAgICAgICAgdGhpcy5tb2RlID0gdmFsdWUgfHwgdGhpcy5tb2RlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHRoeU1vZGXnmoTlgLzkuLogYGdyb3VwYCDml7bliIbnu4TnmoQgS2V5XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5R3JvdXBCeSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBCeSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruavj+ihjOaVsOaNrueahOWUr+S4gOagh+ivhuWxnuaAp+WQjVxuICAgICAqIEBkZWZhdWx0IF9pZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeVJvd0tleSh2YWx1ZTogU2FmZUFueSkge1xuICAgICAgICB0aGlzLnJvd0tleSA9IHZhbHVlIHx8IHRoaXMucm93S2V5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIhue7hOaVsOaNrua6kFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUdyb3Vwcyh2YWx1ZTogU2FmZUFueSkge1xuICAgICAgICBpZiAodGhpcy5tb2RlID09PSAnZ3JvdXAnKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkR3JvdXBzKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaVsOaNrua6kFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeU1vZGVsKHZhbHVlOiBTYWZlQW55KSB7XG4gICAgICAgIHRoaXMubW9kZWwgPSB2YWx1ZSB8fCBbXTtcbiAgICAgICAgdGhpcy5fZGlmZiA9IHRoaXMuX2RpZmZlcnMuZmluZCh0aGlzLm1vZGVsKS5jcmVhdGUoKTtcbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZURhdGFNb2RlbCgpO1xuXG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdncm91cCcpIHtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRNb2RlbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6KGo5qC855qE5pi+56S66aOO5qC877yMYGJvcmRlcmVkYCDml7blpLTpg6jmnInog4zmma/oibLkuJTliIblibLnur/ljLrliKvmmI7mmL5cbiAgICAgKiBAdHlwZSBkZWZhdWx0IHwgYm9yZGVyZWQgfCBib3hlZFxuICAgICAqIEBkZWZhdWx0IGRlZmF1bHRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlUaGVtZSh2YWx1ZTogVGh5VGFibGVUaGVtZSkge1xuICAgICAgICB0aGlzLnRoZW1lID0gdmFsdWUgfHwgdGhpcy50aGVtZTtcbiAgICAgICAgdGhpcy5fc2V0Q2xhc3MoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDooajmoLznmoTlpKflsI9cbiAgICAgKiBAdHlwZSB4cyB8IHNtIHwgbWQgfCBsZyB8IHhsZyB8IGRlZmF1bHRcbiAgICAgKiBAZGVmYXVsdCBtZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeVNpemUodmFsdWU6IFRoeVRhYmxlU2l6ZSkge1xuICAgICAgICB0aGlzLnNpemUgPSB2YWx1ZSB8fCB0aGlzLnNpemU7XG4gICAgICAgIHRoaXMuX3NldENsYXNzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u6KGo5qC85pyA5bCP5a695bqm77yM5LiA6Iis5piv6YCC55So5LqO6K6+572u5YiX5a695Li655m+5YiG5LmL5oiWYXV0b+aXtumZkOWItuihqOagvOacgOWwj+WuveW6pidcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dENzc1BpeGVsKClcbiAgICB0aHlNaW5XaWR0aDogc3RyaW5nIHwgbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICog6K6+572u5Li6IGZpeGVkIOW4g+WxgOihqOagvO+8jOiuvue9riBmaXhlZCDlkI7vvIzliJflrr3lsIbkuKXmoLzmjInnhaforr7nva7lrr3luqblsZXnpLrvvIzliJflrr3lsIbkuI3kvJrmoLnmja7ooajmoLzlhoXlrrnoh6rliqjosIPmlbRcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSB0aHlMYXlvdXRGaXhlZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuihqOWktOWbuuWumu+8jOiLpeiuvue9ruS4uiB0cnVl77yMIOmcgOimgeWQjOatpeiuvue9riB0aHlIZWlnaHRcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSB0aHlIZWFkZXJGaXhlZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIOihqOagvOeahOmrmOW6plxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUuaGVpZ2h0JylcbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dENzc1BpeGVsKClcbiAgICB0aHlIZWlnaHQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIOiuvue9ruihqOagvOeahOagt+W8j1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUNsYXNzTmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSB0aGlzLmNsYXNzTmFtZS5zcGxpdCgnICcpLmZpbHRlcihhID0+IGEudHJpbSgpKTtcbiAgICAgICAgY29uc3QgaW5kZXg6IG51bWJlciA9IGxpc3QuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSA9PT0gdGhpcy5fb2xkVGh5Q2xhc3NOYW1lKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgbGlzdC5zcGxpY2UoaW5kZXgsIDEsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxpc3QucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fb2xkVGh5Q2xhc3NOYW1lID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY2xhc3NOYW1lID0gbGlzdC5qb2luKCcgJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u6KGo5qC86KGM55qE5qC35byP77yM5Lyg5YWl5Ye95pWw77yM5pSv5oyBIHJvd+OAgWluZGV4XG4gICAgICogQHR5cGUgc3RyaW5nIHwgKHJvdywgaW5kZXgpID0+IHN0cmluZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeVJvd0NsYXNzTmFtZSh2YWx1ZTogc3RyaW5nIHwgRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5yb3dDbGFzc05hbWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7liqDovb3nirbmgIFcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgc2V0IHRoeUxvYWRpbmdEb25lKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMubG9hZGluZ0RvbmUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7liqDovb3ml7bmmL7npLrnmoTmlofmnKzvvIzlt7Llup/lvINcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUxvYWRpbmdUZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nVGV4dCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOmFjee9ruepuueKtuaAgee7hOS7tlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUVtcHR5T3B0aW9ucyh2YWx1ZTogVGh5VGFibGVFbXB0eU9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5lbXB0eU9wdGlvbnMgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKblvIDlkK/ooYzmi5bmi71cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHNldCB0aHlEcmFnZ2FibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5kcmFnZ2FibGUgPSB2YWx1ZTtcbiAgICAgICAgaWYgKCh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpICYmIHRoaXMuZHJhZ2dhYmxlICYmIHRoaXMubW9kZSA9PT0gJ3RyZWUnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyZWUgbW9kZSBzb3J0aW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruW9k+WJjemhteeggVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KVxuICAgIHNldCB0aHlQYWdlSW5kZXgodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24uaW5kZXggPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mr4/pobXmmL7npLrmlbDph49cbiAgICAgKiBAZGVmYXVsdCAyMFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pXG4gICAgc2V0IHRoeVBhZ2VTaXplKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uLnNpemUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mgLvpobXmlbBcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KVxuICAgIHNldCB0aHlQYWdlVG90YWwodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24udG90YWwgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDpgInkuK3lvZPliY3ooYzmmK/lkKboh6rliqjpgInkuK0gQ2hlY2tib3jvvIzkuI3lvIDlkK/ml7blj6rmnInngrnlh7sgQ2hlY2tib3gg5YiX5pe25omN5Lya6Kem5Y+R6YCJ5LitXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBzZXQgdGh5V2hvbGVSb3dTZWxlY3QodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNsYXNzTmFtZSArPSAnIHRhYmxlLWhvdmVyJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndob2xlUm93U2VsZWN0ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5pi+56S66KGo5qC85aS0XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgdGh5SGVhZGxlc3MgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuaYvuekuuihqOagvOWktO+8jOW3suW6n+W8g++8jOivt+S9v+eUqCB0aHlIZWFkbGVzc1xuICAgICAqIEBkZXByZWNhdGVkIHBsZWFzZSB1c2UgdGh5SGVhZGxlc3NcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBzZXQgdGh5U2hvd0hlYWRlcih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnRoeUhlYWRsZXNzID0gIXZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuaYvuekuuW3puS+pyBUb3RhbFxuICAgICAqL1xuICAgIEBJbnB1dCh7IGFsaWFzOiAndGh5U2hvd1RvdGFsJywgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNob3dUb3RhbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5pi+56S66LCD5pW05q+P6aG15pi+56S65p2h5pWw5LiL5ouJ5qGGXG4gICAgICovXG4gICAgQElucHV0KHsgYWxpYXM6ICd0aHlTaG93U2l6ZUNoYW5nZXInLCB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd1NpemVDaGFuZ2VyID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDmr4/pobXmmL7npLrmnaHmlbDkuIvmi4nmoYblj6/pgInpoblcbiAgICAgKiBAdHlwZSBudW1iZXJbXVxuICAgICAqL1xuICAgIEBJbnB1dCgndGh5UGFnZVNpemVPcHRpb25zJylcbiAgICBzZXQgcGFnZVNpemVPcHRpb25zKHZhbHVlOiBudW1iZXJbXSkge1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24uc2l6ZU9wdGlvbnMgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0aHlNb2RlIOS4uiB0cmVlIOaXtu+8jOiuvue9riBUcmVlIOagkeeKtuaVsOaNruWxleekuuaXtueahOe8qei/m1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIHRoeUluZGVudCA9IDIwO1xuXG4gICAgLyoqXG4gICAgICogdGh5TW9kZSDkuLogdHJlZSDml7bvvIzorr7nva4gVHJlZSDmoJHnirbmlbDmja7lr7nosaHkuK3nmoTlrZDoioLngrkgS2V5XG4gICAgICogQHR5cGUgc3RyaW5nXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5Q2hpbGRyZW5LZXkgPSAnY2hpbGRyZW4nO1xuXG4gICAgLyoqXG4gICAgICog5byA5ZCvIEhvdmVyIOWQjuaYvuekuuaTjeS9nO+8jOm7mOiupOS4jeaYvuekuuaTjeS9nOWMuuWGheWuue+8jOm8oOaghyBIb3ZlciDml7blsZXnpLpcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGh5LXRhYmxlLWhvdmVyLWRpc3BsYXktb3BlcmF0aW9uJylcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICB0aHlIb3ZlckRpc3BsYXlPcGVyYXRpb246IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSB0aHlEcmFnRGlzYWJsZWRQcmVkaWNhdGU6IChpdGVtOiBTYWZlQW55KSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDooajmoLzliJfnmoTpqqjmnrbnsbvlnotcbiAgICAgKiBAdHlwZSBUaHlUYWJsZUNvbHVtblNrZWxldG9uVHlwZVtdXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5Q29sdW1uU2tlbGV0b25UeXBlczogVGh5VGFibGVDb2x1bW5Ta2VsZXRvblR5cGVbXSA9IFtcbiAgICAgICAgVGh5VGFibGVDb2x1bW5Ta2VsZXRvblR5cGUudGl0bGUsXG4gICAgICAgIFRoeVRhYmxlQ29sdW1uU2tlbGV0b25UeXBlLm1lbWJlcixcbiAgICAgICAgVGh5VGFibGVDb2x1bW5Ta2VsZXRvblR5cGUuZGVmYXVsdFxuICAgIF07XG5cbiAgICAvKipcbiAgICAgKiDliIfmjaLnu4Tku7blm57osIPkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25Td2l0Y2hDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUaHlTd2l0Y2hFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVN3aXRjaEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog6KGo5qC85YiG6aG15Zue6LCD5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uUGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPFBhZ2VDaGFuZ2VkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxQYWdlQ2hhbmdlZEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog6KGo5qC85YiG6aG15b2T5YmN6aG15pS55Y+Y5Zue6LCD5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uUGFnZUluZGV4Q2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgQE91dHB1dCgpIHRoeU9uUGFnZVNpemVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICAvKipcbiAgICAgKiDlpJrpgInlm57osIPkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25NdWx0aVNlbGVjdENoYW5nZTogRXZlbnRFbWl0dGVyPFRoeU11bHRpU2VsZWN0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlNdWx0aVNlbGVjdEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog5Y2V6YCJ5Zue6LCD5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uUmFkaW9TZWxlY3RDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUaHlSYWRpb1NlbGVjdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5UmFkaW9TZWxlY3RFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOaLluWKqOS/ruaUueS6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPbkRyYWdnYWJsZUNoYW5nZTogRXZlbnRFbWl0dGVyPFRoeVRhYmxlRHJhZ2dhYmxlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUYWJsZURyYWdnYWJsZUV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog6KGo5qC86KGM54K55Ye76Kem5Y+R5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uUm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxUaHlUYWJsZVJvd0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5VGFibGVSb3dFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOWIl+aOkuW6j+S/ruaUueS6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlTb3J0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8VGh5VGFibGVTb3J0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUYWJsZVNvcnRFdmVudD4oKTtcblxuICAgIEBPdXRwdXQoKSB0aHlPblJvd0NvbnRleHRNZW51OiBFdmVudEVtaXR0ZXI8VGh5VGFibGVFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVRhYmxlRXZlbnQ+KCk7XG5cbiAgICBAQ29udGVudENoaWxkKCdncm91cCcsIHsgc3RhdGljOiB0cnVlIH0pIGdyb3VwVGVtcGxhdGU6IFRlbXBsYXRlUmVmPFNhZmVBbnk+O1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihUaHlUYWJsZUNvbHVtbkNvbXBvbmVudClcbiAgICBzZXQgbGlzdE9mQ29sdW1uQ29tcG9uZW50cyhjb21wb25lbnRzOiBRdWVyeUxpc3Q8VGh5VGFibGVDb2x1bW5Db21wb25lbnQ+KSB7XG4gICAgICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMgPSBjb21wb25lbnRzLnRvQXJyYXkoKTtcbiAgICAgICAgICAgIHRoaXMuaGFzRml4ZWQgPSAhIXRoaXMuY29sdW1ucy5maW5kKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmZpeGVkID09PSB0aGlzLmZpeGVkRGlyZWN0aW9uLmxlZnQgfHwgaXRlbS5maXhlZCA9PT0gdGhpcy5maXhlZERpcmVjdGlvbi5yaWdodDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5idWlsZFNrZWxldG9uQ29sdW1ucygpO1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZUNvbHVtbnMoKTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVEYXRhTW9kZWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIOaVsOaNrueahOaKmOWPoOWxleW8gOeKtuaAgVxuICAgIHB1YmxpYyBleHBhbmRTdGF0dXNNYXA6IERpY3Rpb25hcnk8Ym9vbGVhbj4gPSB7fTtcblxuICAgIHB1YmxpYyBleHBhbmRTdGF0dXNNYXBPZkdyb3VwOiBEaWN0aW9uYXJ5PGJvb2xlYW4+ID0ge307XG5cbiAgICBwcml2YXRlIGV4cGFuZFN0YXR1c01hcE9mR3JvdXBCZWZvcmVEcmFnOiBEaWN0aW9uYXJ5PGJvb2xlYW4+ID0ge307XG5cbiAgICBkcmFnUHJldmlld0NsYXNzID0gJ3RoeS10YWJsZS1kcmFnLXByZXZpZXcnO1xuXG4gICAgcHVibGljIHNrZWxldG9uQ29sdW1uczogVGh5VGFibGVTa2VsZXRvbkNvbHVtbltdID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgX2RpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycyxcbiAgICAgICAgcHJpdmF0ZSB2aWV3cG9ydFJ1bGVyOiBWaWV3cG9ydFJ1bGVyLFxuICAgICAgICBwcml2YXRlIHVwZGF0ZUhvc3RDbGFzc1NlcnZpY2U6IFVwZGF0ZUhvc3RDbGFzc1NlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IFNhZmVBbnksXG4gICAgICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogc3RyaW5nLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9iaW5kVHJhY2tGbigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRpYWxpemVDb2x1bW5zKCkge1xuICAgICAgICBpZiAoIXRoaXMuY29sdW1ucy5zb21lKGl0ZW0gPT4gaXRlbS5leHBhbmQgPT09IHRydWUpICYmIHRoaXMuY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNbMF0uZXhwYW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbml0aWFsaXplQ29sdW1uRml4ZWRQb3NpdGlvbnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pbml0aWFsaXplQ29sdW1uRml4ZWRQb3NpdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IGxlZnRGaXhlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5maXhlZCA9PT0gVGh5Rml4ZWREaXJlY3Rpb24ubGVmdCk7XG4gICAgICAgIGxlZnRGaXhlZENvbHVtbnMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzID0gbGVmdEZpeGVkQ29sdW1uc1tpbmRleCAtIDFdO1xuICAgICAgICAgICAgaXRlbS5sZWZ0ID0gcHJldmlvdXMgPyBwcmV2aW91cy5sZWZ0ICsgcGFyc2VJbnQocHJldmlvdXMud2lkdGgudG9TdHJpbmcoKSwgMTApIDogMDtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJpZ2h0Rml4ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihpdGVtID0+IGl0ZW0uZml4ZWQgPT09IFRoeUZpeGVkRGlyZWN0aW9uLnJpZ2h0KS5yZXZlcnNlKCk7XG4gICAgICAgIHJpZ2h0Rml4ZWRDb2x1bW5zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91cyA9IHJpZ2h0Rml4ZWRDb2x1bW5zW2luZGV4IC0gMV07XG4gICAgICAgICAgICBpdGVtLnJpZ2h0ID0gcHJldmlvdXMgPyBwcmV2aW91cy5yaWdodCArIHBhcnNlSW50KHByZXZpb3VzLndpZHRoLnRvU3RyaW5nKCksIDEwKSA6IDA7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRpYWxpemVEYXRhTW9kZWwoKSB7XG4gICAgICAgIHRoaXMubW9kZWwuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbml0aWFsU2VsZWN0aW9ucyhyb3csIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgdGhpcy5faW5pdGlhbEN1c3RvbU1vZGVsVmFsdWUocm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRpYWxTZWxlY3Rpb25zKHJvdzogb2JqZWN0LCBjb2x1bW46IFRoeVRhYmxlQ29sdW1uQ29tcG9uZW50KSB7XG4gICAgICAgIGlmIChjb2x1bW4uc2VsZWN0aW9ucykge1xuICAgICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbi5rZXldID0gY29sdW1uLnNlbGVjdGlvbnMuaW5jbHVkZXMocm93W3RoaXMucm93S2V5XSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHJvdywgY29sdW1uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ3JhZGlvJykge1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4uc2VsZWN0aW9ucy5pbmNsdWRlcyhyb3dbdGhpcy5yb3dLZXldKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW9Sb3cgPSByb3c7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdGlhbEN1c3RvbU1vZGVsVmFsdWUocm93OiBvYmplY3QsIGNvbHVtbjogVGh5VGFibGVDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBjdXN0b21UeXBlLnN3aXRjaCkge1xuICAgICAgICAgICAgcm93W2NvbHVtbi5rZXldID0gZ2V0KHJvdywgY29sdW1uLm1vZGVsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3JlZnJlc2hDdXN0b21Nb2RlbFZhbHVlKHJvdzogU2FmZUFueSkge1xuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbEN1c3RvbU1vZGVsVmFsdWUocm93LCBjb2x1bW4pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9hcHBseURpZmZDaGFuZ2VzKGNoYW5nZXM6IEl0ZXJhYmxlQ2hhbmdlczxTYWZlQW55Pikge1xuICAgICAgICBpZiAoY2hhbmdlcykge1xuICAgICAgICAgICAgY2hhbmdlcy5mb3JFYWNoQWRkZWRJdGVtKChyZWNvcmQ6IEl0ZXJhYmxlQ2hhbmdlUmVjb3JkPFNhZmVBbnk+KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1c3RvbU1vZGVsVmFsdWUocmVjb3JkLml0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9iaW5kVHJhY2tGbigpIHtcbiAgICAgICAgdGhpcy50cmFja0J5Rm4gPSBmdW5jdGlvbiAodGhpczogU2FmZUFueSwgaW5kZXg6IG51bWJlciwgcm93OiBTYWZlQW55KTogU2FmZUFueSB7XG4gICAgICAgICAgICByZXR1cm4gcm93ICYmIHRoaXMucm93S2V5ID8gcm93W3RoaXMucm93S2V5XSA6IGluZGV4O1xuICAgICAgICB9LmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGVzdHJveUludmFsaWRBdHRyaWJ1dGUoKSB7XG4gICAgICAgIHRoaXMubW9kZWwuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcm93KSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleS5pbmNsdWRlcygnWyQkY29sdW1uXScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb3dba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldENsYXNzKGZpcnN0ID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKCFmaXJzdCAmJiAhdGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGlmICh0aGlzLnNpemUpIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZXMucHVzaChgdGFibGUtJHt0aGlzLnNpemV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhYmxlVGhlbWVNYXBbdGhpcy50aGVtZV0pIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZXMucHVzaCh0YWJsZVRoZW1lTWFwW3RoaXMudGhlbWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlSG9zdENsYXNzU2VydmljZS51cGRhdGVDbGFzcyhjbGFzc05hbWVzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlQ29sdW1uU2VsZWN0aW9ucyhrZXk6IHN0cmluZywgc2VsZWN0aW9uczogU2FmZUFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZChpdGVtID0+IGl0ZW0ua2V5ID09PSBrZXkpO1xuICAgICAgICB0aGlzLm1vZGVsLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxTZWxlY3Rpb25zKHJvdywgY29sdW1uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzVGVtcGxhdGVSZWYocmVmOiBTYWZlQW55KSB7XG4gICAgICAgIHJldHVybiByZWYgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TW9kZWxWYWx1ZShyb3c6IFNhZmVBbnksIHBhdGg6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gZ2V0KHJvdywgcGF0aCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbmRlclJvd0NsYXNzTmFtZShyb3c6IFNhZmVBbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvd0NsYXNzTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU3RyaW5nKHRoaXMucm93Q2xhc3NOYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm93Q2xhc3NOYW1lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLnJvd0NsYXNzTmFtZSBhcyBGdW5jdGlvbikocm93LCBpbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25Nb2RlbENoYW5nZShyb3c6IFNhZmVBbnksIGNvbHVtbjogVGh5VGFibGVDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgaWYgKGNvbHVtbi5tb2RlbCkge1xuICAgICAgICAgICAgc2V0KHJvdywgY29sdW1uLm1vZGVsLCByb3dbY29sdW1uLmtleV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uU3RvcFByb3BhZ2F0aW9uKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBpZiAodGhpcy53aG9sZVJvd1NlbGVjdCkge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25QYWdlQ2hhbmdlKGV2ZW50OiBQYWdlQ2hhbmdlZEV2ZW50KSB7XG4gICAgICAgIHRoaXMudGh5T25QYWdlQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBhZ2VJbmRleENoYW5nZShldmVudDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudGh5T25QYWdlSW5kZXhDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGFnZVNpemVDaGFuZ2UoZXZlbnQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnRoeU9uUGFnZVNpemVDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2hlY2tib3hDaGFuZ2Uocm93OiBTYWZlQW55LCBjb2x1bW46IFRoeVRhYmxlQ29sdW1uQ29tcG9uZW50KSB7XG4gICAgICAgIHRoaXMub25Nb2RlbENoYW5nZShyb3csIGNvbHVtbik7XG4gICAgICAgIHRoaXMub25NdWx0aVNlbGVjdENoYW5nZShudWxsLCByb3csIGNvbHVtbik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTXVsdGlTZWxlY3RDaGFuZ2UoZXZlbnQ6IEV2ZW50LCByb3c6IFNhZmVBbnksIGNvbHVtbjogVGh5VGFibGVDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgY29uc3Qgcm93cyA9IHRoaXMubW9kZWwuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1bY29sdW1uLmtleV07XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBtdWx0aVNlbGVjdEV2ZW50OiBUaHlNdWx0aVNlbGVjdEV2ZW50ID0ge1xuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICByb3dzOiByb3dzXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudGh5T25NdWx0aVNlbGVjdENoYW5nZS5lbWl0KG11bHRpU2VsZWN0RXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJhZGlvU2VsZWN0Q2hhbmdlKGV2ZW50OiBFdmVudCwgcm93OiBTYWZlQW55KSB7XG4gICAgICAgIGNvbnN0IHJhZGlvU2VsZWN0RXZlbnQ6IFRoeVJhZGlvU2VsZWN0RXZlbnQgPSB7XG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICByb3c6IHJvd1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRoeU9uUmFkaW9TZWxlY3RDaGFuZ2UuZW1pdChyYWRpb1NlbGVjdEV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Td2l0Y2hDaGFuZ2UoZXZlbnQ6IEV2ZW50LCByb3c6IFNhZmVBbnksIGNvbHVtbjogU2FmZUFueSkge1xuICAgICAgICBjb25zdCBzd2l0Y2hFdmVudDogVGh5U3dpdGNoRXZlbnQgPSB7XG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgIHJlZnJlc2g6ICh2YWx1ZTogU2FmZUFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgfHwgcm93O1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZVtjb2x1bW4ua2V5XSA9IGdldCh2YWx1ZSwgY29sdW1uLm1vZGVsKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50aHlPblN3aXRjaENoYW5nZS5lbWl0KHN3aXRjaEV2ZW50KTtcbiAgICB9XG5cbiAgICBzaG93RXhwYW5kKHJvdzogU2FmZUFueSkge1xuICAgICAgICByZXR1cm4gcm93W3RoaXMudGh5Q2hpbGRyZW5LZXldICYmIHJvd1t0aGlzLnRoeUNoaWxkcmVuS2V5XS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIGlzRXhwYW5kZWQocm93OiBTYWZlQW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4cGFuZFN0YXR1c01hcFtyb3dbdGhpcy5yb3dLZXldXTtcbiAgICB9XG5cbiAgICBpY29uSW5kZW50Q29tcHV0ZWQobGV2ZWw6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5tb2RlID09PSAndHJlZScpIHtcbiAgICAgICAgICAgIHJldHVybiBsZXZlbCAqIHRoaXMudGh5SW5kZW50IC0gNTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRkSW5kZW50Q29tcHV0ZWQobGV2ZWw6IG51bWJlcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgICBwYWRkaW5nTGVmdDogYCR7KGxldmVsICsgMSkgKiB0aGlzLnRoeUluZGVudCAtIDV9cHhgXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZXhwYW5kQ2hpbGRyZW4ocm93OiBTYWZlQW55KSB7XG4gICAgICAgIGlmICh0aGlzLmlzRXhwYW5kZWQocm93KSkge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRTdGF0dXNNYXBbcm93W3RoaXMucm93S2V5XV0gPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kU3RhdHVzTWFwW3Jvd1t0aGlzLnJvd0tleV1dID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRHJhZ0dyb3VwU3RhcnRlZChldmVudDogQ2RrRHJhZ1N0YXJ0PHVua25vd24+KSB7XG4gICAgICAgIHRoaXMuZXhwYW5kU3RhdHVzTWFwT2ZHcm91cEJlZm9yZURyYWcgPSB7IC4uLnRoaXMuZXhwYW5kU3RhdHVzTWFwT2ZHcm91cCB9O1xuICAgICAgICBjb25zdCBncm91cHMgPSB0aGlzLmdyb3Vwcy5maWx0ZXIoZ3JvdXAgPT4gZ3JvdXAuZXhwYW5kKTtcbiAgICAgICAgdGhpcy5mb2xkR3JvdXBzKGdyb3Vwcyk7XG4gICAgICAgIHRoaXMub25EcmFnU3RhcnRlZChldmVudCk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBvbkRyYWdHcm91cEVuZChldmVudDogQ2RrRHJhZ0VuZDx1bmtub3duPikge1xuICAgICAgICBjb25zdCBncm91cHMgPSB0aGlzLmdyb3Vwcy5maWx0ZXIoZ3JvdXAgPT4gdGhpcy5leHBhbmRTdGF0dXNNYXBPZkdyb3VwQmVmb3JlRHJhZ1tncm91cC5pZF0pO1xuICAgICAgICB0aGlzLmV4cGFuZEdyb3Vwcyhncm91cHMpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkRyYWdHcm91cERyb3BwZWQoZXZlbnQ6IENka0RyYWdEcm9wPHVua25vd24+KSB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5ncm91cHMuZmluZChncm91cCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZXZlbnQuaXRlbS5kYXRhLmlkID09PSBncm91cC5pZDtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChncm91cCkge1xuICAgICAgICAgICAgLy8gZHJhZyBncm91cFxuICAgICAgICAgICAgY29uc3QgZHJhZ0V2ZW50OiBUaHlUYWJsZURyYWdnYWJsZUV2ZW50ID0ge1xuICAgICAgICAgICAgICAgIG1vZGVsOiBldmVudC5pdGVtLFxuICAgICAgICAgICAgICAgIG1vZGVsczogdGhpcy5ncm91cHMsXG4gICAgICAgICAgICAgICAgb2xkSW5kZXg6IGV2ZW50LnByZXZpb3VzSW5kZXgsXG4gICAgICAgICAgICAgICAgbmV3SW5kZXg6IGV2ZW50LmN1cnJlbnRJbmRleFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLmdyb3VwcywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICAgICAgICAgIHRoaXMudGh5T25EcmFnZ2FibGVDaGFuZ2UuZW1pdChkcmFnRXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gZHJhZyBncm91cCBjaGlsZHJlblxuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3Vwcy5maW5kKGdyb3VwID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQuaXRlbS5kYXRhW3RoaXMuZ3JvdXBCeV0gPT09IGdyb3VwLmlkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBncm91cEluZGV4ID1cbiAgICAgICAgICAgICAgICBldmVudC5jb250YWluZXIuZ2V0U29ydGVkSXRlbXMoKS5maW5kSW5kZXgoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmRhdGEuaWQgPT09IGV2ZW50Lml0ZW0uZGF0YVt0aGlzLmdyb3VwQnldO1xuICAgICAgICAgICAgICAgIH0pICsgMTtcbiAgICAgICAgICAgIGNvbnN0IGRyYWdFdmVudDogVGh5VGFibGVEcmFnZ2FibGVFdmVudCA9IHtcbiAgICAgICAgICAgICAgICBtb2RlbDogZXZlbnQuaXRlbSxcbiAgICAgICAgICAgICAgICBtb2RlbHM6IGdyb3VwLmNoaWxkcmVuLFxuICAgICAgICAgICAgICAgIG9sZEluZGV4OiBldmVudC5wcmV2aW91c0luZGV4IC0gZ3JvdXBJbmRleCxcbiAgICAgICAgICAgICAgICBuZXdJbmRleDogZXZlbnQuY3VycmVudEluZGV4IC0gZ3JvdXBJbmRleFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG1vdmVJdGVtSW5BcnJheShncm91cC5jaGlsZHJlbiwgZHJhZ0V2ZW50Lm9sZEluZGV4LCBkcmFnRXZlbnQubmV3SW5kZXgpO1xuICAgICAgICAgICAgdGhpcy50aHlPbkRyYWdnYWJsZUNoYW5nZS5lbWl0KGRyYWdFdmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRyYWdTdGFydGVkKGV2ZW50OiBDZGtEcmFnU3RhcnQ8dW5rbm93bj4pIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpZXcgPSB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUodGhpcy5kcmFnUHJldmlld0NsYXNzKVswXTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbFRkczogSFRNTENvbGxlY3Rpb24gPSBldmVudC5zb3VyY2UuX2RyYWdSZWYuZ2V0UGxhY2Vob2xkZXJFbGVtZW50KCk/LmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIGlmIChwcmV2aWV3KSB7XG4gICAgICAgICAgICAgICAgICAgIEFycmF5LmZyb20ocHJldmlldz8uY2hpbGRyZW4pLmZvckVhY2goKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7b3JpZ2luYWxUZHNbaW5kZXhdPy5jbGllbnRXaWR0aH1weGA7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZHJvcExpc3RFbnRlclByZWRpY2F0ZSA9IChpbmRleDogbnVtYmVyLCBkcmFnOiBDZGtEcmFnLCBkcm9wOiBDZGtEcm9wTGlzdCkgPT4ge1xuICAgICAgICByZXR1cm4gZHJvcC5nZXRTb3J0ZWRJdGVtcygpW2luZGV4XS5kYXRhLmdyb3VwX2lkID09PSBkcmFnLmRhdGEuZ3JvdXBfaWQ7XG4gICAgfTtcblxuICAgIHByaXZhdGUgb25EcmFnTW9kZWxEcm9wcGVkKGV2ZW50OiBDZGtEcmFnRHJvcDx1bmtub3duPikge1xuICAgICAgICBjb25zdCBkcmFnRXZlbnQ6IFRoeVRhYmxlRHJhZ2dhYmxlRXZlbnQgPSB7XG4gICAgICAgICAgICBtb2RlbDogZXZlbnQuaXRlbSxcbiAgICAgICAgICAgIG1vZGVsczogdGhpcy5tb2RlbCxcbiAgICAgICAgICAgIG9sZEluZGV4OiBldmVudC5wcmV2aW91c0luZGV4LFxuICAgICAgICAgICAgbmV3SW5kZXg6IGV2ZW50LmN1cnJlbnRJbmRleFxuICAgICAgICB9O1xuICAgICAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5tb2RlbCwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICAgICAgdGhpcy50aHlPbkRyYWdnYWJsZUNoYW5nZS5lbWl0KGRyYWdFdmVudCk7XG4gICAgfVxuXG4gICAgb25EcmFnRHJvcHBlZChldmVudDogQ2RrRHJhZ0Ryb3A8dW5rbm93bj4pIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ2dyb3VwJykge1xuICAgICAgICAgICAgdGhpcy5vbkRyYWdHcm91cERyb3BwZWQoZXZlbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gJ2xpc3QnKSB7XG4gICAgICAgICAgICB0aGlzLm9uRHJhZ01vZGVsRHJvcHBlZChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNvbHVtbkhlYWRlckNsaWNrKGV2ZW50OiBFdmVudCwgY29sdW1uOiBUaHlUYWJsZUNvbHVtbkNvbXBvbmVudCkge1xuICAgICAgICBpZiAoY29sdW1uLnNvcnRhYmxlKSB7XG4gICAgICAgICAgICBjb25zdCB7IHNvcnREaXJlY3Rpb24sIG1vZGVsLCBzb3J0Q2hhbmdlIH0gPSBjb2x1bW47XG4gICAgICAgICAgICBsZXQgZGlyZWN0aW9uO1xuICAgICAgICAgICAgaWYgKHNvcnREaXJlY3Rpb24gPT09IFRoeVRhYmxlU29ydERpcmVjdGlvbi5kZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gVGh5VGFibGVTb3J0RGlyZWN0aW9uLmRlc2M7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNvcnREaXJlY3Rpb24gPT09IFRoeVRhYmxlU29ydERpcmVjdGlvbi5kZXNjKSB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gVGh5VGFibGVTb3J0RGlyZWN0aW9uLmFzYztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gVGh5VGFibGVTb3J0RGlyZWN0aW9uLmRlZmF1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb2x1bW4uc29ydERpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IHNvcnRFdmVudCA9IHsgZXZlbnQsIGtleTogbW9kZWwsIGRpcmVjdGlvbiB9O1xuICAgICAgICAgICAgc29ydENoYW5nZS5lbWl0KHNvcnRFdmVudCk7XG4gICAgICAgICAgICB0aGlzLnRoeVNvcnRDaGFuZ2UuZW1pdChzb3J0RXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uUm93Q2xpY2soZXZlbnQ6IEV2ZW50LCByb3c6IFNhZmVBbnkpIHtcbiAgICAgICAgY29uc3QgbmV4dCA9IHRoaXMub25Sb3dDbGlja1Byb3BhZ2F0aW9uRXZlbnRIYW5kbGVyKGV2ZW50LCByb3cpO1xuICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgaWYgKHRoaXMud2hvbGVSb3dTZWxlY3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gY3VzdG9tVHlwZS5jaGVja2JveCB8fCBpdGVtLnR5cGUgPT09IGN1c3RvbVR5cGUucmFkaW87XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbiAmJiAhY29sdW1uLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gY3VzdG9tVHlwZS5jaGVja2JveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5rZXldID0gIXJvd1tjb2x1bW4ua2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Nb2RlbENoYW5nZShyb3csIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTXVsdGlTZWxlY3RDaGFuZ2UoZXZlbnQsIHJvdywgY29sdW1uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IGN1c3RvbVR5cGUucmFkaW8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpb1JvdyA9IHJvdztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25SYWRpb1NlbGVjdENoYW5nZShldmVudCwgcm93KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJvd0V2ZW50ID0ge1xuICAgICAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgICAgICByb3c6IHJvd1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMudGh5T25Sb3dDbGljay5lbWl0KHJvd0V2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25Sb3dDbGlja1Byb3BhZ2F0aW9uRXZlbnRIYW5kbGVyKGV2ZW50OiBFdmVudCwgcm93OiBTYWZlQW55KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICgoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpLmNsb3Nlc3QoJy50cmVlLWV4cGFuZC1pY29uJykpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kQ2hpbGRyZW4ocm93KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Sb3dDb250ZXh0TWVudShldmVudDogRXZlbnQsIHJvdzogU2FmZUFueSkge1xuICAgICAgICBjb25zdCBjb250ZXh0TWVudUV2ZW50OiBUaHlUYWJsZUV2ZW50ID0ge1xuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgcm93OiByb3dcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50aHlPblJvd0NvbnRleHRNZW51LmVtaXQoY29udGV4dE1lbnVFdmVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVmcmVzaENvbHVtbnMoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmNvbHVtbnMgfHwgW107XG4gICAgICAgIGNvbnN0IF9jb2x1bW5zID0gY29tcG9uZW50cy5tYXAoY29tcG9uZW50ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IGNvbXBvbmVudC53aWR0aCxcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IGNvbXBvbmVudC5jbGFzc05hbWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChuLCBpKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKG4sIF9jb2x1bW5zW2ldKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZEdyb3VwcyhvcmlnaW5Hcm91cHM6IFNhZmVBbnkpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luR3JvdXBzTWFwID0gaGVscGVycy5rZXlCeShvcmlnaW5Hcm91cHMsICdpZCcpO1xuICAgICAgICB0aGlzLmdyb3VwcyA9IFtdO1xuICAgICAgICBvcmlnaW5Hcm91cHMuZm9yRWFjaCgob3JpZ2luOiBTYWZlQW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBncm91cDogVGh5VGFibGVHcm91cCA9IHsgaWQ6IG9yaWdpblt0aGlzLnJvd0tleV0sIGNoaWxkcmVuOiBbXSwgb3JpZ2luIH07XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmV4cGFuZFN0YXR1c01hcE9mR3JvdXAuaGFzT3duUHJvcGVydHkoZ3JvdXAuaWQpKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXAuZXhwYW5kID0gdGhpcy5leHBhbmRTdGF0dXNNYXBPZkdyb3VwW2dyb3VwLmlkXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZ3JvdXAuZXhwYW5kID0gISEob3JpZ2luR3JvdXBzTWFwW2dyb3VwLmlkXSBhcyBTYWZlQW55KS5leHBhbmQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzLnB1c2goZ3JvdXApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkTW9kZWwoKSB7XG4gICAgICAgIGNvbnN0IGdyb3Vwc01hcCA9IGtleUJ5KHRoaXMuZ3JvdXBzLCAnaWQnKTtcbiAgICAgICAgdGhpcy5tb2RlbC5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IGdyb3Vwc01hcFtyb3dbdGhpcy5ncm91cEJ5XV07XG4gICAgICAgICAgICBpZiAoZ3JvdXApIHtcbiAgICAgICAgICAgICAgICBncm91cC5jaGlsZHJlbi5wdXNoKHJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBleHBhbmRHcm91cChncm91cDogVGh5VGFibGVHcm91cCkge1xuICAgICAgICBncm91cC5leHBhbmQgPSAhZ3JvdXAuZXhwYW5kO1xuICAgICAgICB0aGlzLmV4cGFuZFN0YXR1c01hcE9mR3JvdXBbZ3JvdXAuaWRdID0gZ3JvdXAuZXhwYW5kO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXhwYW5kR3JvdXBzKGdyb3VwczogVGh5VGFibGVHcm91cFtdKSB7XG4gICAgICAgIGdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kR3JvdXAoZ3JvdXApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvbGRHcm91cHMoZ3JvdXBzOiBUaHlUYWJsZUdyb3VwW10pIHtcbiAgICAgICAgZ3JvdXBzLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRHcm91cChncm91cCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlU2Nyb2xsQ2xhc3MoKSB7XG4gICAgICAgIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSB0aGlzLnRhYmxlU2Nyb2xsRWxlbWVudDtcbiAgICAgICAgY29uc3QgbWF4U2Nyb2xsTGVmdCA9IHNjcm9sbEVsZW1lbnQuc2Nyb2xsV2lkdGggLSBzY3JvbGxFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICBjb25zdCBzY3JvbGxYID0gc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgICBjb25zdCBsYXN0U2Nyb2xsQ2xhc3NOYW1lID0gdGhpcy5zY3JvbGxDbGFzc05hbWU7XG4gICAgICAgIHRoaXMuc2Nyb2xsQ2xhc3NOYW1lID0gJyc7XG4gICAgICAgIGlmIChzY3JvbGxFbGVtZW50LnNjcm9sbFdpZHRoID4gc2Nyb2xsRWxlbWVudC5jbGllbnRXaWR0aCkge1xuICAgICAgICAgICAgaWYgKHNjcm9sbFggPj0gbWF4U2Nyb2xsTGVmdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQ2xhc3NOYW1lID0gY3NzLnRhYmxlU2Nyb2xsUmlnaHQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbENsYXNzTmFtZSA9IGNzcy50YWJsZVNjcm9sbExlZnQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQ2xhc3NOYW1lID0gY3NzLnRhYmxlU2Nyb2xsTWlkZGxlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChsYXN0U2Nyb2xsQ2xhc3NOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMudGFibGVTY3JvbGxFbGVtZW50LCBsYXN0U2Nyb2xsQ2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zY3JvbGxDbGFzc05hbWUpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy50YWJsZVNjcm9sbEVsZW1lbnQsIHRoaXMuc2Nyb2xsQ2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnVwZGF0ZUhvc3RDbGFzc1NlcnZpY2UuaW5pdGlhbGl6ZUVsZW1lbnQodGhpcy50YWJsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIHRoaXMuX3NldENsYXNzKHRydWUpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcblxuICAgICAgICBtZXJnZSh0aGlzLnZpZXdwb3J0UnVsZXIuY2hhbmdlKDIwMCksIG9mKG51bGwpLnBpcGUoZGVsYXkoMjAwKSkpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlJCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ29sdW1ucygpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsQ2xhc3MoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbCQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxDbGFzcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRTa2VsZXRvbkNvbHVtbnMoKSB7XG4gICAgICAgIHRoaXMuc2tlbGV0b25Db2x1bW5zID0gW107XG5cbiAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogVGh5VGFibGVDb2x1bW5Db21wb25lbnQsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogdGhpcy50aHlDb2x1bW5Ta2VsZXRvblR5cGVzW2luZGV4XSB8fCBUaHlUYWJsZUNvbHVtblNrZWxldG9uVHlwZS5kZWZhdWx0LFxuICAgICAgICAgICAgICAgIHdpZHRoOiBjb2x1bW4ud2lkdGggfHwgJ2F1dG8nXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5za2VsZXRvbkNvbHVtbnMgPSBbLi4udGhpcy5za2VsZXRvbkNvbHVtbnMsIGl0ZW1dO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIGlmIChpc1BsYXRmb3JtU2VydmVyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucm93cy5jaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzdGFydFdpdGgodGhpcy5yb3dzKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoXG4gICAgICAgICAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JzZXJ2YWJsZTxFdmVudD4oc3Vic2NyaWJlciA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5yb3dzLm1hcChyb3cgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RlOiB0aGVyZSdzIG5vIG5lZWQgdG8gYWRkIHRvdWNoLCBwb2ludGVyIGFuZCBtb3VzZSBldmVudCBsaXN0ZW5lcnMgdG9nZXRoZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mIHJvd3MsIHdoaWNoIHdpbGwgbGVhZCB0byBhZGRpbmcgTiAqIDMgZXZlbnQgbGlzdGVuZXJzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIHNwZWMgKGh0dHBzOi8vd3d3LnczLm9yZy9UUi9wb2ludGVyZXZlbnRzLyNleGFtcGxlcyksIHdlIGNhbiB1c2UgZmVhdHVyZSBkZXRlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIGlmIHBvaW50ZXIgZXZlbnRzIGFyZSBhdmFpbGFibGUuIElmIHBvaW50ZXIgZXZlbnRzIGFyZSBhdmFpbGFibGUsIHdlIGhhdmUgdG8gbGlzdGVuIG9ubHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gdGhlIGBwb2ludGVyZG93bmAgZXZlbnQuIE90aGVyd2lzZSwgd2UgaGF2ZSB0byBkZXRlcm1pbmUgaWYgd2UncmUgb24gYSB0b3VjaCBkZXZpY2Ugb3Igbm90LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUb3VjaCBldmVudHMgYXJlIGhhbmRsZWQgZWFybGllciB0aGFuIG1vdXNlIGV2ZW50cywgdGhvIG5vdCBhbGwgdXNlciBhZ2VudHMgZGlzcGF0Y2ggbW91c2UgZXZlbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmdGVyIHRvdWNoIGV2ZW50cy4gU2VlIHRoZSBzcGVjOiBodHRwczovL3d3dy53My5vcmcvVFIvdG91Y2gtZXZlbnRzLyNtb3VzZS1ldmVudHMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5Qb2ludGVyRXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ3BvaW50ZXJkb3duJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnb250b3VjaHN0YXJ0JyBpbiByb3cubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAndG91Y2hzdGFydCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ21vdXNlZG93bicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGU6IHNpbmNlIENocm9tZSA1NiBkZWZhdWx0cyBkb2N1bWVudCBsZXZlbCBgdG91Y2hzdGFydGAgbGlzdGVuZXIgdG8gcGFzc2l2ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGVsZW1lbnQgYHRvdWNoc3RhcnRgIGxpc3RlbmVyIGlzIG5vdCBwYXNzaXZlIGJ5IGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmV2ZXIgY2FsbCBgcHJldmVudERlZmF1bHQoKWAgb24gaXQsIHNvIHdlJ3JlIHNhZmUgbWFraW5nIGl0IHBhc3NpdmUgdG9vLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QWRkRXZlbnRMaXN0ZW5lck9wdGlvbnM+cGFzc2l2ZUV2ZW50TGlzdGVuZXJPcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLnN1YnNjcmliZShzdWJzY3JpYmVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRyYWdnYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhzaW1wbGVDaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGNvbnN0IG1vZGVDaGFuZ2UgPSBzaW1wbGVDaGFuZ2VzLnRoeU1vZGU7XG4gICAgICAgIGNvbnN0IHRoeUdyb3Vwc0NoYW5nZSA9IHNpbXBsZUNoYW5nZXMudGh5R3JvdXBzO1xuICAgICAgICBjb25zdCBpc0dyb3VwTW9kZSA9IG1vZGVDaGFuZ2UgJiYgbW9kZUNoYW5nZS5jdXJyZW50VmFsdWUgPT09ICdncm91cCc7XG4gICAgICAgIGlmIChpc0dyb3VwTW9kZSAmJiB0aHlHcm91cHNDaGFuZ2UgJiYgdGh5R3JvdXBzQ2hhbmdlLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkR3JvdXBzKHRoeUdyb3Vwc0NoYW5nZS5jdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5idWlsZE1vZGVsKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZGlmZikge1xuICAgICAgICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuX2RpZmYuZGlmZih0aGlzLm1vZGVsKTtcbiAgICAgICAgICAgIHRoaXMuX2FwcGx5RGlmZkNoYW5nZXMoY2hhbmdlcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5fZGVzdHJveUludmFsaWRBdHRyaWJ1dGUoKTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwidGh5LXRhYmxlLWJvZHlcIlxuICBjZGtTY3JvbGxhYmxlXG4gIFtuZ0NsYXNzXT1cInsgJ3RoeS10YWJsZS1maXhlZCc6IGhhc0ZpeGVkLCAndGh5LXRhYmxlLWJvcmRlcmVkLXRoZW1lJzogdGhlbWUgPT09ICdib3JkZXJlZCcgJiYgaGFzRml4ZWQgfVwiPlxuICA8dGFibGVcbiAgICAjdGFibGVcbiAgICBjbGFzcz1cInRhYmxlXCJcbiAgICBbbmdDbGFzc109XCJbY2xhc3NOYW1lXVwiXG4gICAgW2NsYXNzLnRhYmxlLWZpeGVkXT1cInRoeUxheW91dEZpeGVkXCJcbiAgICBbY2xhc3MudGFibGUtZHJhZ2dhYmxlXT1cImRyYWdnYWJsZVwiXG4gICAgW2NsYXNzLnRhYmxlLWdyb3VwXT1cIm1vZGUgPT09ICdncm91cCdcIlxuICAgIFtzdHlsZS5taW4td2lkdGhdPVwidGh5TWluV2lkdGhcIj5cbiAgICA8Y29sZ3JvdXA+XG4gICAgICA8Y29sICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uc1wiIFt3aWR0aF09XCJjb2x1bW4ud2lkdGhcIiBbc3R5bGUubWluV2lkdGhdPVwiaGFzRml4ZWQgPyBjb2x1bW4ud2lkdGggOiBjb2x1bW4ubWluV2lkdGhcIiAvPlxuICAgIDwvY29sZ3JvdXA+XG5cbiAgICA8dGhlYWQgKm5nSWY9XCIhdGh5SGVhZGxlc3NcIj5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRoXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uaGVhZGVyQ2xhc3NOYW1lXCJcbiAgICAgICAgICBbY2xhc3MudGh5LXRhYmxlLWNvbHVtbi1zb3J0YWJsZV09XCJjb2x1bW4uc29ydGFibGVcIlxuICAgICAgICAgIFtjbGFzcy50aHktdGFibGUtZml4ZWQtY29sdW1uLWxlZnRdPVwiY29sdW1uLmZpeGVkID09PSBmaXhlZERpcmVjdGlvbi5sZWZ0XCJcbiAgICAgICAgICBbY2xhc3MudGh5LXRhYmxlLWZpeGVkLWNvbHVtbi1yaWdodF09XCJjb2x1bW4uZml4ZWQgPT09IGZpeGVkRGlyZWN0aW9uLnJpZ2h0XCJcbiAgICAgICAgICBbc3R5bGUubGVmdC5weF09XCJjb2x1bW4ubGVmdFwiXG4gICAgICAgICAgW3N0eWxlLnJpZ2h0LnB4XT1cImNvbHVtbi5yaWdodFwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uQ29sdW1uSGVhZGVyQ2xpY2soJGV2ZW50LCBjb2x1bW4pXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb2x1bW4uaGVhZGVyVGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7IGNvbHVtbi50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmhlYWRlclRlbXBsYXRlUmVmXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmhlYWRlclRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjb2x1bW4gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5zb3J0YWJsZVwiPlxuICAgICAgICAgICAgPHRoeS1pY29uIFtuZ0NsYXNzXT1cIlsndGh5LXRhYmxlLWNvbHVtbi1zb3J0YWJsZS1pY29uJywgJ3B4LTEnLCBjb2x1bW4uc29ydERpcmVjdGlvbl1cIiB0aHlJY29uTmFtZT1cInNvcnQtdmVydGljYWwtdHRcIj5cbiAgICAgICAgICAgIDwvdGh5LWljb24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGg+XG4gICAgICA8L3RyPlxuICAgIDwvdGhlYWQ+XG5cbiAgICA8dGJvZHlcbiAgICAgICpuZ0lmPVwibG9hZGluZ0RvbmVcIlxuICAgICAgdGh5RHJhZ0Ryb3BcbiAgICAgIGNka0Ryb3BMaXN0XG4gICAgICBbY2RrRHJvcExpc3REaXNhYmxlZF09XCIhZHJhZ2dhYmxlXCJcbiAgICAgIFtjZGtEcm9wTGlzdFNvcnRQcmVkaWNhdGVdPVwiZHJvcExpc3RFbnRlclByZWRpY2F0ZVwiXG4gICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cIm9uRHJhZ0Ryb3BwZWQoJGV2ZW50KVwiPlxuICAgICAgPCEtLSBncm91cCAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlID09PSAnZ3JvdXAnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGdyb3Vwc1wiPlxuICAgICAgICAgIDx0clxuICAgICAgICAgICAgY2xhc3M9XCJ0aHktdGFibGUtZ3JvdXBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImV4cGFuZEdyb3VwKGdyb3VwKVwiXG4gICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICBbY2RrRHJhZ1ByZXZpZXdDbGFzc109XCJkcmFnUHJldmlld0NsYXNzXCJcbiAgICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJncm91cFwiXG4gICAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cImdyb3VwIHwgdGFibGVSb3dEcmFnRGlzYWJsZWQgOiB0aHlEcmFnRGlzYWJsZWRQcmVkaWNhdGVcIlxuICAgICAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cIm9uRHJhZ0dyb3VwU3RhcnRlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChjZGtEcmFnRW5kZWQpPVwib25EcmFnR3JvdXBFbmQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwiY29sdW1ucy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoeS10YWJsZS1ncm91cC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZHJhZ2dhYmxlICYmICEoZ3JvdXAgfCB0YWJsZVJvd0RyYWdEaXNhYmxlZCA6IHRoeURyYWdEaXNhYmxlZFByZWRpY2F0ZSlcIj5cbiAgICAgICAgICAgICAgICAgIDx0aHktaWNvbiBjbGFzcz1cInRhYmxlLWRyYWdnYWJsZS1pY29uXCIgdGh5SWNvbk5hbWU9XCJkcmFnXCI+PC90aHktaWNvbj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8dGh5LWljb24gY2xhc3M9XCJleHBhbmQtaWNvblwiIFt0aHlJY29uTmFtZV09XCJncm91cC5leHBhbmQgPyAnYW5nbGUtZG93bicgOiAnYW5nbGUtcmlnaHQnXCI+PC90aHktaWNvbj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXBUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImdyb3VwVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGdyb3VwLm9yaWdpbiwgZ3JvdXA6IGdyb3VwLm9yaWdpbiB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3VwLmNoaWxkcmVuPy5sZW5ndGggJiYgZ3JvdXAuZXhwYW5kXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3cgb2YgZ3JvdXAuY2hpbGRyZW47IHRyYWNrQnk6IHRyYWNrQnlGbjsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0clRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgIGxldmVsOiAwXG4gICAgICAgICAgICAgICAgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBsaXN05qih5byP5LiL5rKh5pyJ55u05o6l5L2/55SoaXRlbeaooeadv++8jOaYr+WboOS4uuS9v+eUqOS6huaooeadv+W9seWTjeS6hkFuZ3VsYXLnmoTkvp3otZbmoJHvvIzlr7zoh7RDZGtEcmFnRHJvcOaOkuW6j+WkseaViO+8jOebruWJjei/meagt+S/ruaUueWPr+S7peaaguaXtuino+WGs+e6v+S4iuS4jeiDveaOkuW6j+eahOmXrumimO+8jFRyZWXmqKHlvI/nmoTmjpLluo/mmoLml7bkuI3mlK/mjIEgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PT0gJ2xpc3QnXCI+XG4gICAgICAgIDx0clxuICAgICAgICAgICNyb3dzXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHJvdyBvZiBtb2RlbDsgdHJhY2tCeTogdHJhY2tCeUZuOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICBjbGFzcz1cInRoeS1zb3J0YWJsZS1pdGVtXCJcbiAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgW2Nka0RyYWdQcmV2aWV3Q2xhc3NdPVwiZHJhZ1ByZXZpZXdDbGFzc1wiXG4gICAgICAgICAgW2Nka0RyYWdEYXRhXT1cInJvd1wiXG4gICAgICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCJyb3cgfCB0YWJsZVJvd0RyYWdEaXNhYmxlZCA6IHRoeURyYWdEaXNhYmxlZFByZWRpY2F0ZVwiXG4gICAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cIm9uRHJhZ1N0YXJ0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwicmVuZGVyUm93Q2xhc3NOYW1lKHJvdywgaSlcIlxuICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKCRldmVudCwgcm93KVwiXG4gICAgICAgICAgKHRoeUNvbnRleHRNZW51KT1cIm9uUm93Q29udGV4dE1lbnUoJGV2ZW50LCByb3cpXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZHNUZW1wbGF0ZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgIGxldmVsOiAwXG4gICAgICAgICAgICB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PT0gJ3RyZWUnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiBtb2RlbDsgdHJhY2tCeTogdHJhY2tCeUZuOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyByb3c6IHJvdywgaW5kZXg6IGksIGxldmVsOiAwIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI3RyVGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiIGxldC1pPVwiaW5kZXhcIiBsZXQtbGV2ZWw9XCJsZXZlbFwiPlxuICAgICAgICA8dHJcbiAgICAgICAgICAjcm93c1xuICAgICAgICAgIGNsYXNzPVwidGh5LXNvcnRhYmxlLWl0ZW1cIlxuICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICBbY2RrRHJhZ1ByZXZpZXdDbGFzc109XCJkcmFnUHJldmlld0NsYXNzXCJcbiAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwicm93XCJcbiAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25EcmFnU3RhcnRlZCgkZXZlbnQpXCJcbiAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cInJvdyB8IHRhYmxlUm93RHJhZ0Rpc2FibGVkIDogdGh5RHJhZ0Rpc2FibGVkUHJlZGljYXRlXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJyZW5kZXJSb3dDbGFzc05hbWUocm93LCBpKVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCByb3cpXCJcbiAgICAgICAgICAodGh5Q29udGV4dE1lbnUpPVwib25Sb3dDb250ZXh0TWVudSgkZXZlbnQsIHJvdylcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRkc1RlbXBsYXRlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgbGV2ZWw6IGxldmVsICsgMVxuICAgICAgICAgICAgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvdHI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZGUgPT09ICd0cmVlJyAmJiBpc0V4cGFuZGVkKHJvdylcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjaGlsZCBvZiByb3dbdGh5Q2hpbGRyZW5LZXldOyB0cmFja0J5OiB0cmFja0J5Rm47IGxldCBqID0gaW5kZXhcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidHJUZW1wbGF0ZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyByb3c6IGNoaWxkLCBpbmRleDogaiwgbGV2ZWw6IGxldmVsICsgMSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI3Rkc1RlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtaT1cImluZGV4XCIgbGV0LWxldmVsPVwibGV2ZWxcIj5cbiAgICAgICAgPHRkXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zOyBsZXQgaiA9IGluZGV4XCJcbiAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uY2xhc3NOYW1lXCJcbiAgICAgICAgICBbY2xhc3MudGh5LW9wZXJhdGlvbi1saW5rc109XCIhIWNvbHVtbi5vcGVyYXRpb25hbFwiXG4gICAgICAgICAgW2NsYXNzLnRoeS10YWJsZS1jb2x1bW4tc2Vjb25kYXJ5XT1cIiEhY29sdW1uLnNlY29uZGFyeVwiXG4gICAgICAgICAgW2NsYXNzLnRoeS10YWJsZS1jaGVja2JveC1jb2x1bW5dPVwiY29sdW1uLnR5cGUgPT09IGN1c3RvbVR5cGUuY2hlY2tib3hcIlxuICAgICAgICAgIFtjbGFzcy50aHktdGFibGUtZml4ZWQtY29sdW1uLWxlZnRdPVwiY29sdW1uLmZpeGVkID09PSBmaXhlZERpcmVjdGlvbi5sZWZ0XCJcbiAgICAgICAgICBbY2xhc3MudGh5LXRhYmxlLWZpeGVkLWNvbHVtbi1yaWdodF09XCJjb2x1bW4uZml4ZWQgPT09IGZpeGVkRGlyZWN0aW9uLnJpZ2h0XCJcbiAgICAgICAgICBbc3R5bGUubGVmdC5weF09XCJjb2x1bW4ubGVmdFwiXG4gICAgICAgICAgW3N0eWxlLnJpZ2h0LnB4XT1cImNvbHVtbi5yaWdodFwiXG4gICAgICAgICAgW25nU3R5bGVdPVwibW9kZSA9PT0gJ3RyZWUnICYmIGNvbHVtbi5leHBhbmQgPyB0ZEluZGVudENvbXB1dGVkKGxldmVsKSA6IG51bGxcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaiA9PT0gMCAmJiBkcmFnZ2FibGUgJiYgIShyb3cgfCB0YWJsZVJvd0RyYWdEaXNhYmxlZCA6IHRoeURyYWdEaXNhYmxlZFByZWRpY2F0ZSlcIj5cbiAgICAgICAgICAgIDx0aHktaWNvbiBjbGFzcz1cInRhYmxlLWRyYWdnYWJsZS1pY29uXCIgdGh5SWNvbk5hbWU9XCJkcmFnXCI+PC90aHktaWNvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDwhLS10ZW1wbGF0ZS0tPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1RlbXBsYXRlUmVmKGNvbHVtbi5jZWxsVGVtcGxhdGVSZWYpXCI+XG4gICAgICAgICAgICA8dGh5LWljb25cbiAgICAgICAgICAgICAgY2xhc3M9XCJ0cmVlLWV4cGFuZC1pY29uIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJtb2RlID09PSAndHJlZScgJiYgY29sdW1uLmV4cGFuZFwiXG4gICAgICAgICAgICAgIFt0aHlJY29uTmFtZV09XCJpc0V4cGFuZGVkKHJvdykgPyAnYW5nbGUtZG93bicgOiAnYW5nbGUtcmlnaHQnXCJcbiAgICAgICAgICAgICAgW3N0eWxlLnZpc2liaWxpdHldPVwic2hvd0V4cGFuZChyb3cpID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcIlxuICAgICAgICAgICAgICBbc3R5bGUubGVmdC5weF09XCJpY29uSW5kZW50Q29tcHV0ZWQobGV2ZWwpXCI+PC90aHktaWNvbj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4uY2VsbFRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiByb3cgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8IS0tbm90IHRlbXBsYXRlLS0+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1RlbXBsYXRlUmVmKGNvbHVtbi5jZWxsVGVtcGxhdGVSZWYpXCI+XG4gICAgICAgICAgICA8IS0tIGRlZmF1bHQgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLm1vZGVsICYmICFjb2x1bW4udHlwZVwiPlxuICAgICAgICAgICAgICA8dGh5LWljb25cbiAgICAgICAgICAgICAgICBjbGFzcz1cInRyZWUtZXhwYW5kLWljb24gY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwibW9kZSA9PT0gJ3RyZWUnICYmIGNvbHVtbi5leHBhbmRcIlxuICAgICAgICAgICAgICAgIFt0aHlJY29uTmFtZV09XCJpc0V4cGFuZGVkKHJvdykgPyAnYW5nbGUtZG93bicgOiAnYW5nbGUtcmlnaHQnXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUudmlzaWJpbGl0eV09XCJzaG93RXhwYW5kKHJvdykgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1hcmdpbkxlZnQucHhdPVwiaWNvbkluZGVudENvbXB1dGVkKGxldmVsKVwiPjwvdGh5LWljb24+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRNb2RlbFZhbHVlKHJvdywgY29sdW1uLm1vZGVsKSB8IGlzVmFsaWRNb2RlbFZhbHVlOyBlbHNlIGRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICB7eyBnZXRNb2RlbFZhbHVlKHJvdywgY29sdW1uLm1vZGVsKSB9fVxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0PlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2x1bW4uZGVmYXVsdFRleHRcIiBjbGFzcz1cInRleHQtZGVzY1wiPlxuICAgICAgICAgICAgICAgICAge3sgY29sdW1uLmRlZmF1bHRUZXh0IH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLSBpbmRleCAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gY3VzdG9tVHlwZS5pbmRleFwiPlxuICAgICAgICAgICAgICB7eyBpICsgMSB9fVxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS0gY2hlY2tib3ggLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09IGN1c3RvbVR5cGUuY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4ua2V5XVwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGVja2JveENoYW5nZShyb3csIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblN0b3BQcm9wYWdhdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sdW1uLmRpc2FibGVkXCIgLz5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8IS0tIHJhZGlvIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi50eXBlID09PSBjdXN0b21UeXBlLnJhZGlvXCI+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFJhZGlvUm93XCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwicm93XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sdW1uLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TdG9wUHJvcGFnYXRpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblJhZGlvU2VsZWN0Q2hhbmdlKCRldmVudCwgcm93KVwiIC8+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLSBzd2l0Y2ggLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09IGN1c3RvbVR5cGUuc3dpdGNoXCI+XG4gICAgICAgICAgICAgIDx0aHktc3dpdGNoXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmtleV1cIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uTW9kZWxDaGFuZ2Uocm93LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sdW1uLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAodGh5Q2hhbmdlKT1cIm9uU3dpdGNoQ2hhbmdlKCRldmVudCwgcm93LCBjb2x1bW4pXCI+PC90aHktc3dpdGNoPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvdGJvZHk+XG4gIDwvdGFibGU+XG5cbiAgPGRpdiAqbmdJZj1cImxvYWRpbmdEb25lICYmIG1vZGVsLmxlbmd0aCA9PT0gMCAmJiBncm91cHMubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJ0aHktdGFibGUtZW1wdHkgY2xlYXItaG92ZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZW1wdHlUZW1wbGF0ZTsgZWxzZSBkZWZhdWx0RW1wdHlcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJlbXB0eVRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRFbXB0eT5cbiAgICAgIDx0aHktZW1wdHlcbiAgICAgICAgW3RoeU1lc3NhZ2VdPVwiZW1wdHlPcHRpb25zLm1lc3NhZ2VcIlxuICAgICAgICBbdGh5VHJhbnNsYXRpb25LZXldPVwiZW1wdHlPcHRpb25zLnRyYW5zbGF0aW9uS2V5XCJcbiAgICAgICAgW3RoeVRyYW5zbGF0aW9uVmFsdWVzXT1cImVtcHR5T3B0aW9ucy50cmFuc2xhdGlvblZhbHVlc1wiXG4gICAgICAgIFt0aHlFbnRpdHlOYW1lXT1cImVtcHR5T3B0aW9ucy5lbnRpdHlOYW1lXCJcbiAgICAgICAgW3RoeUVudGl0eU5hbWVUcmFuc2xhdGVLZXldPVwiZW1wdHlPcHRpb25zLmVudGl0eU5hbWVUcmFuc2xhdGVLZXlcIlxuICAgICAgICBbdGh5SWNvbk5hbWVdPVwiZW1wdHlPcHRpb25zLmljb25OYW1lXCJcbiAgICAgICAgW3RoeVNpemVdPVwiZW1wdHlPcHRpb25zLnNpemVcIlxuICAgICAgICBbdGh5TWFyZ2luVG9wXT1cImVtcHR5T3B0aW9ucy5tYXJnaW5Ub3BcIlxuICAgICAgICBbdGh5VG9wQXV0b109XCJlbXB0eU9wdGlvbnMudG9wQXV0b1wiXG4gICAgICAgIFt0aHlDb250YWluZXJdPVwiZW1wdHlPcHRpb25zLmNvbnRhaW5lclwiPjwvdGh5LWVtcHR5PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuXG4gIDx0aHktdGFibGUtc2tlbGV0b25cbiAgICAqbmdJZj1cIiFsb2FkaW5nRG9uZVwiXG4gICAgW3RoeVJvd0NvdW50XT1cIjZcIlxuICAgIFt0aHlIZWFkbGVzc109XCJ0cnVlXCJcbiAgICBbdGh5VGhlbWVdPVwidGhlbWVcIlxuICAgIFt0aHlTaXplXT1cInNpemVcIlxuICAgIFt0aHlNaW5XaWR0aF09XCJ0aHlNaW5XaWR0aFwiXG4gICAgW3RoeUNvbHVtbnNdPVwic2tlbGV0b25Db2x1bW5zXCI+XG4gIDwvdGh5LXRhYmxlLXNrZWxldG9uPlxuXG4gIDxkaXYgY2xhc3M9XCJ0aHktdGFibGUtZm9vdGVyXCIgKm5nSWY9XCJwYWdpbmF0aW9uLnRvdGFsID4gcGFnaW5hdGlvbi5zaXplXCIgW2NsYXNzLnRoeS10YWJsZS1mb290ZXItaGFzLXBhZGRpbmddPVwidGhlbWUgPT09ICdkZWZhdWx0J1wiPlxuICAgIDx0aHktcGFnaW5hdGlvblxuICAgICAgW3RoeVBhZ2VJbmRleF09XCJwYWdpbmF0aW9uLmluZGV4XCJcbiAgICAgIFt0aHlUb3RhbF09XCJwYWdpbmF0aW9uLnRvdGFsXCJcbiAgICAgIFt0aHlQYWdlU2l6ZV09XCJwYWdpbmF0aW9uLnNpemVcIlxuICAgICAgW3RoeVBhZ2VTaXplT3B0aW9uc109XCJwYWdpbmF0aW9uLnNpemVPcHRpb25zXCJcbiAgICAgIFt0aHlTaG93U2l6ZUNoYW5nZXJdPVwic2hvd1NpemVDaGFuZ2VyXCJcbiAgICAgIFt0aHlTaG93VG90YWxdPVwic2hvd1RvdGFsXCJcbiAgICAgICh0aHlQYWdlQ2hhbmdlZCk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAodGh5UGFnZUluZGV4Q2hhbmdlKT1cIm9uUGFnZUluZGV4Q2hhbmdlKCRldmVudClcIlxuICAgICAgKHRoeVBhZ2VTaXplQ2hhbmdlZCk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIj48L3RoeS1wYWdpbmF0aW9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGU+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|