igniteui-angular 18.2.11 → 18.2.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/action-strip/action-strip.component.mjs +1 -3
- package/esm2022/lib/action-strip/grid-actions/grid-action-button.component.mjs +2 -3
- package/esm2022/lib/calendar/calendar.component.mjs +3 -3
- package/esm2022/lib/calendar/month-picker/month-picker.component.mjs +2 -3
- package/esm2022/lib/calendar/months-view/months-view.component.mjs +12 -4
- package/esm2022/lib/calendar/years-view/years-view.component.mjs +11 -3
- package/esm2022/lib/combo/combo-add-item.component.mjs +10 -4
- package/esm2022/lib/dialog/dialog.component.mjs +2 -1
- package/esm2022/lib/drop-down/drop-down.component.mjs +2 -2
- package/esm2022/lib/grids/filtering/excel-style/excel-style-header.component.mjs +2 -3
- package/esm2022/lib/grids/pivot-grid/pivot-row-dimension-header-group.component.mjs +2 -3
- package/esm2022/lib/grids/pivot-grid/pivot-row-dimension-mrl-row.component.mjs +3 -6
- package/esm2022/lib/grids/pivot-grid/pivot-row-header-group.component.mjs +2 -3
- package/esm2022/lib/grids/toolbar/grid-toolbar-advanced-filtering.component.mjs +3 -3
- package/esm2022/lib/grids/toolbar/grid-toolbar-exporter.component.mjs +3 -3
- package/esm2022/lib/icon/icon.component.mjs +2 -3
- package/esm2022/lib/paginator/paginator.component.mjs +3 -5
- package/esm2022/lib/services/overlay/overlay.mjs +4 -2
- package/fesm2022/igniteui-angular.mjs +45 -23
- package/fesm2022/igniteui-angular.mjs.map +1 -1
- package/lib/calendar/months-view/months-view.component.d.ts +4 -0
- package/lib/calendar/years-view/years-view.component.d.ts +4 -0
- package/lib/combo/combo-add-item.component.d.ts +1 -0
- package/lib/core/styles/components/combo/_combo-theme.scss +2 -1
- package/lib/core/styles/components/icon-button/_icon-button-theme.scss +0 -1
- package/lib/core/styles/components/input/_input-group-theme.scss +3 -3
- package/package.json +1 -1
- package/styles/igniteui-angular-dark.css +1 -1
- package/styles/igniteui-angular.css +1 -1
- package/styles/igniteui-bootstrap-dark.css +1 -1
- package/styles/igniteui-bootstrap-light.css +1 -1
- package/styles/igniteui-dark-green.css +1 -1
- package/styles/igniteui-fluent-dark-excel.css +1 -1
- package/styles/igniteui-fluent-dark-word.css +1 -1
- package/styles/igniteui-fluent-dark.css +1 -1
- package/styles/igniteui-fluent-light-excel.css +1 -1
- package/styles/igniteui-fluent-light-word.css +1 -1
- package/styles/igniteui-fluent-light.css +1 -1
- package/styles/igniteui-indigo-dark.css +1 -1
- package/styles/igniteui-indigo-light.css +1 -1
- package/styles/maps/igniteui-angular-dark.css.map +1 -1
- package/styles/maps/igniteui-angular.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
- package/styles/maps/igniteui-dark-green.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-light.css.map +1 -1
- package/styles/maps/igniteui-indigo-dark.css.map +1 -1
- package/styles/maps/igniteui-indigo-light.css.map +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Component, ContentChild, forwardRef, HostBinding, Input, ViewChild, ViewChildren, booleanAttribute, HostListener, } from '@angular/core';
|
|
2
|
-
import { NgIf, NgTemplateOutlet,
|
|
2
|
+
import { NgIf, NgTemplateOutlet, NgFor, DatePipe } from '@angular/common';
|
|
3
3
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
4
4
|
import { IgxCalendarHeaderTemplateDirective, IgxCalendarHeaderTitleTemplateDirective, IgxCalendarSubheaderTemplateDirective, IgxCalendarScrollPageDirective, } from './calendar.directives';
|
|
5
5
|
import { IgxCalendarView } from './calendar';
|
|
@@ -830,7 +830,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImpor
|
|
|
830
830
|
multi: false,
|
|
831
831
|
provide: KeyboardNavigationService,
|
|
832
832
|
},
|
|
833
|
-
], selector: 'igx-calendar', standalone: true, imports: [NgIf, NgTemplateOutlet, IgxCalendarScrollPageDirective, NgStyle, IgxIconComponent, NgFor, IgxDaysViewComponent, IgxMonthsViewComponent, IgxYearsViewComponent, DatePipe, IgxMonthViewSlotsCalendar, IgxGetViewDateCalendar], template: "<ng-template let-result #defaultHeaderTitle>\n <ng-container *ngIf=\"selection === 'single'\">\n <span>{{ resourceStrings.igx_calendar_select_date }}</span>\n </ng-container>\n <ng-container *ngIf=\"selection === 'range'\">\n <span>{{ resourceStrings.igx_calendar_range_placeholder }}</span>\n </ng-container>\n</ng-template>\n\n<ng-template let-result #defaultHeaderDate>\n <ng-container *ngIf=\"selection === 'single'\">\n <span>{{ getFormattedDate().weekday }}, </span>\n <span>{{ getFormattedDate().monthday }}</span>\n </ng-container>\n <ng-container *ngIf=\"selection === 'range'\">\n <span>{{ selectedDates.length === 0 ? 'Start' : getFormattedRange().start}}</span>\n <span> - </span>\n <span>{{ selectedDates.length <= 1 ? 'End' : getFormattedRange().end}}</span>\n </ng-container>\n</ng-template>\n\n<!-- Month -->\n<ng-template #defaultMonth let-obj>\n <span\n #monthsBtn\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"(obj.date | date: 'LLLL') + ', ' + resourceStrings.igx_calendar_select_month\"\n (keydown)=\"onActiveViewYearKB(obj.date, $event, obj.index)\"\n (mousedown)=\"onActiveViewYear($event, obj.date, obj.index)\"\n class=\"igx-calendar-picker__date\">\n {{ formattedMonth(obj.date) }}\n </span>\n</ng-template>\n\n<!-- Year -->\n<ng-template #defaultYear let-obj>\n <span *ngIf=\"activeView === 'year'\" class=\"igx-calendar__aria-off-screen\" aria-live=\"polite\">{{ formattedYear(obj.date) }}</span>\n <span\n #yearsBtn\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"(obj.date | date: 'yyyy') + ', ' + resourceStrings.igx_calendar_select_year\"\n (keydown)=\"onActiveViewDecadeKB(obj.date, $event, obj.index)\"\n (mousedown)=\"onActiveViewDecade($event, obj.date, obj.index)\"\n class=\"igx-calendar-picker__date\">\n {{ formattedYear(obj.date) }}\n </span>\n</ng-template>\n\n<!-- Month Year -->\n<ng-template #defaultMonthYear let-obj let-result>\n <span *ngIf=\"monthsViewNumber < 2 || obj.index < 1\" class=\"igx-calendar__aria-off-screen\" aria-live=\"polite\">\n {{ monthsViewNumber > 1 ?\n (resourceStrings.igx_calendar_first_picker_of.replace('{0}', monthsViewNumber.toString()) + ' ' +\n (obj.date | date: 'LLLL yyyy')) :\n resourceStrings.igx_calendar_selected_month_is + (obj.date | date: 'LLLL yyyy')}}\n </span>\n <ng-container *ngTemplateOutlet=\"defaultMonth; context: {$implicit: obj}\"></ng-container>\n <ng-container *ngTemplateOutlet=\"defaultYear; context: {$implicit: obj}\"></ng-container>\n</ng-template>\n\n<!-- Decade -->\n<ng-template #defaultDecade>\n <span>{{ getDecadeRange().start }} - {{ getDecadeRange().end }}</span>\n</ng-template>\n\n<!-- Previous arrow icon -->\n<ng-template #prevArrow let-obj>\n <igx-icon aria-hidden=\"true\" family=\"default\" name=\"arrow_prev\"></igx-icon>\n</ng-template>\n\n<!-- Next arrow icon -->\n<ng-template #nextArrow let-obj>\n <igx-icon aria-hidden=\"true\" family=\"default\" name=\"arrow_next\"></igx-icon>\n</ng-template>\n\n<!-- Previous picker button -->\n<ng-template #prevPageButton let-obj>\n <div\n #prevPageBtn\n tabindex=\"0\"\n class=\"igx-calendar-picker__prev\"\n role=\"button\"\n [attr.aria-label]=\"prevNavLabel((getPrevMonth(viewDate) | date: 'LLLL'))\"\n data-action=\"prev\"\n igxCalendarScrollPage\n [startScroll]=\"startPrevPageScroll\"\n [stopScroll]=\"stopPageScroll\"\n (keydown)=\"$event.stopPropagation()\"\n >\n <ng-container *ngTemplateOutlet=\"prevArrow\"></ng-container>\n </div>\n</ng-template>\n\n<!-- Next picker button -->\n<ng-template #nextPageButton let-obj>\n <div\n #nextPageBtn\n tabindex=\"0\"\n class=\"igx-calendar-picker__next\"\n role=\"button\"\n [attr.aria-label]=\"nextNavLabel((getNextMonth(viewDate, monthsViewNumber) | date: 'LLLL'))\"\n data-action=\"next\"\n igxCalendarScrollPage\n [startScroll]=\"startNextPageScroll\"\n [stopScroll]=\"stopPageScroll\"\n (keydown)=\"$event.stopPropagation()\"\n >\n <ng-container *ngTemplateOutlet=\"nextArrow\"></ng-container>\n </div>\n</ng-template>\n\n<!-- PICKER IN DAYS -->\n<ng-template #calendarDaysPicker let-i>\n <section class=\"igx-calendar-picker\" [style.--calendar-row-start]=\"1 + (2 * i)\">\n <div class=\"igx-calendar-picker__dates\" [attr.data-month]=\"i | IgxGetViewDate:viewDate:false\">\n <ng-container\n *ngTemplateOutlet=\"subheaderTemplate ? subheaderTemplate : defaultMonthYear; context: getContext(i)\">\n </ng-container>\n </div>\n <div\n class=\"igx-calendar-picker__nav\"\n *ngIf=\"this.orientation === 'horizontal' ? i === monthsViewNumber - 1 : i === 0\"\n >\n <ng-container *ngTemplateOutlet=\"prevPageButton\"></ng-container>\n <ng-container *ngTemplateOutlet=\"nextPageButton\"></ng-container>\n </div>\n </section>\n</ng-template>\n\n<!-- PICKER IN MONTHS -->\n<ng-template #calendarYearPicker>\n <section class=\"igx-calendar-picker\">\n <div class=\"igx-calendar-picker__dates\">\n <ng-container\n *ngTemplateOutlet=\"subheaderTemplate ? subheaderTemplate : defaultYear; context: getContext(0)\">\n </ng-container>\n </div>\n <div class=\"igx-calendar-picker__nav\">\n <ng-container *ngTemplateOutlet=\"prevPageButton\"></ng-container>\n <ng-container *ngTemplateOutlet=\"nextPageButton\"></ng-container>\n </div>\n </section>\n</ng-template>\n\n<!-- PICKER IN YEARS -->\n<ng-template #calendarDecadePicker>\n <section class=\"igx-calendar-picker\">\n <div class=\"igx-calendar-picker__dates\" aria-live=\"polite\">\n <ng-container\n *ngTemplateOutlet=\"subheaderTemplate ? subheaderTemplate : defaultDecade;\">\n </ng-container>\n </div>\n <div class=\"igx-calendar-picker__nav\">\n <ng-container *ngTemplateOutlet=\"prevPageButton\"></ng-container>\n <ng-container *ngTemplateOutlet=\"nextPageButton\"></ng-container>\n </div>\n </section>\n</ng-template>\n\n\n<header\n aria-labelledby=\"igx-aria-calendar-title-month igx-aria-calendar-title-year\"\n class=\"igx-calendar__header\"\n *ngIf=\"selection === 'single' && hasHeader || selection === 'range' && hasHeader\">\n <h5 id=\"igx-aria-calendar-title-year\" class=\"igx-calendar__header-year\">\n <ng-container *ngTemplateOutlet=\"headerTitleTemplate ?? defaultHeaderTitle; context: headerContext\"></ng-container>\n </h5>\n <h2 id=\"igx-aria-calendar-title-month\" class=\"igx-calendar__header-date\">\n <ng-container *ngTemplateOutlet=\"headerTemplate ? headerTemplate : defaultHeaderDate; context: headerContext\">\n </ng-container>\n </h2>\n</header>\n\n\n<div\n #wrapper\n [style.--calendar-months]=\"monthsViewNumber\"\n [tabIndex]=\"0\"\n class=\"igx-calendar__wrapper\"\n [class.igx-calendar__wrapper--vertical]=\"orientation === 'vertical'\"\n [attr.aria-activedescendant]=\"activeDescendant\"\n [attr.aria-multiselectable]=\"selection !== 'single'\"\n aria-labelledby=\"calendar-desc\"\n role=\"grid\"\n >\n <caption id=\"calendar-desc\" tabindex=\"-1\" class=\"igx-calendar__aria-off-screen\">\n <ng-container *ngIf=\"selection === 'multi'\">\n {{ monthsViewNumber && monthsViewNumber > 1 ?\n resourceStrings.igx_calendar_multi_selection.replace('{0}', monthsViewNumber.toString()) :\n resourceStrings.igx_calendar_singular_multi_selection}}\n </ng-container>\n <ng-container *ngIf=\"selection === 'range'\">\n {{ monthsViewNumber && monthsViewNumber > 1 ?\n resourceStrings.igx_calendar_range_selection.replace('{0}', monthsViewNumber.toString()) :\n resourceStrings.igx_calendar_singular_range_selection}}\n </ng-container>\n <ng-container *ngIf=\"selection === 'single'\">\n {{ monthsViewNumber && monthsViewNumber > 1 ?\n resourceStrings.igx_calendar_single_selection.replace('{0}', monthsViewNumber.toString()) :\n resourceStrings.igx_calendar_singular_single_selection}}\n </ng-container>\n </caption>\n <section\n class=\"igx-calendar__pickers\"\n [class.igx-calendar__pickers--days]=\"isDefaultView\"\n [class.igx-calendar__pickers--vertical]=\"orientation === 'vertical'\"\n >\n <ng-container *ngIf=\"isDefaultView\">\n <ng-container *ngFor=\"let view of monthsViewNumber | IgxMonthViewSlots; index as i\">\n <ng-container *ngTemplateOutlet=\"calendarDaysPicker; context: {$implicit: i}\"></ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"isYearView\">\n <ng-container *ngTemplateOutlet=\"calendarYearPicker\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"isDecadeView\">\n <ng-container *ngTemplateOutlet=\"calendarDecadePicker\"></ng-container>\n </ng-container>\n </section>\n\n <section class=\"igx-calendar__body\" [class.igx-calendar__body--vertical]=\"orientation === 'vertical'\" role=\"presentation\">\n <ng-container *ngIf=\"isDefaultView\">\n <ng-container *ngFor=\"let view of monthsViewNumber | IgxMonthViewSlots; index as i\">\n <igx-days-view\n #days\n role=\"rowgroup\"\n [tabIndex]=\"-1\"\n [selection]=\"selection\"\n [locale]=\"locale\"\n [value]=\"value\"\n [(activeDate)]=\"activeDate\"\n [(previewRangeDate)]=\"previewRangeDate\"\n [viewDate]=\"i | IgxGetViewDate: viewDate\"\n [weekStart]=\"weekStart\"\n [formatOptions]=\"formatOptions\"\n [formatViews]=\"formatViews\"\n [disabledDates]=\"disabledDates\"\n [specialDates]=\"specialDates\"\n [style.--calendar-row-start]=\"(i + 1) * 2\"\n [hideLeadingDays]=\"hideOutsideDays || i !== 0\"\n [hideTrailingDays]=\"hideOutsideDays || i !== monthsViewNumber - 1\"\n [showWeekNumbers]=\"showWeekNumbers\"\n [showActiveDay]=\"showActiveDay\"\n [standalone]=\"false\"\n (swiperight)=\"previousPage()\"\n (swipeleft)=\"nextPage()\"\n (dateSelected)=\"handleDateSelection($event)\"\n (mousedown)=\"$event.preventDefault()\">\n </igx-days-view>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"isYearView\">\n <igx-months-view\n #months\n role=\"rowgroup\"\n [tabIndex]=\"-1\"\n [date]=\"viewDate\"\n [locale]=\"locale\"\n [formatView]=\"formatViews.month\"\n [monthFormat]=\"formatOptions.month\"\n [showActive]=\"showActiveDay\"\n [standalone]=\"false\"\n (swiperight)=\"previousPage()\"\n (swipeleft)=\"nextPage()\"\n (pageChanged)=\"updateYear($event)\"\n (activeDateChanged)=\"updateActiveDescendant($event)\"\n (selected)=\"changeMonth($event)\"\n (mousedown)=\"$event.preventDefault()\">\n </igx-months-view>\n </ng-container>\n\n <ng-container *ngIf=\"isDecadeView\">\n <igx-years-view\n #decade\n role=\"rowgroup\"\n [tabIndex]=\"-1\"\n [date]=\"viewDate\"\n [locale]=\"locale\"\n [formatView]=\"formatViews.year\"\n [yearFormat]=\"formatOptions.year\"\n [showActive]=\"showActiveDay\"\n [standalone]=\"false\"\n (swiperight)=\"previousPage()\"\n (swipeleft)=\"nextPage()\"\n (pageChanged)=\"updateYear($event)\"\n (activeDateChanged)=\"updateActiveDescendant($event)\"\n (selected)=\"changeYear($event)\"\n (mousedown)=\"$event.preventDefault()\">\n </igx-years-view>\n </ng-container>\n </section>\n</div>\n" }]
|
|
833
|
+
], selector: 'igx-calendar', standalone: true, imports: [NgIf, NgTemplateOutlet, IgxCalendarScrollPageDirective, IgxIconComponent, NgFor, IgxDaysViewComponent, IgxMonthsViewComponent, IgxYearsViewComponent, DatePipe, IgxMonthViewSlotsCalendar, IgxGetViewDateCalendar], template: "<ng-template let-result #defaultHeaderTitle>\n <ng-container *ngIf=\"selection === 'single'\">\n <span>{{ resourceStrings.igx_calendar_select_date }}</span>\n </ng-container>\n <ng-container *ngIf=\"selection === 'range'\">\n <span>{{ resourceStrings.igx_calendar_range_placeholder }}</span>\n </ng-container>\n</ng-template>\n\n<ng-template let-result #defaultHeaderDate>\n <ng-container *ngIf=\"selection === 'single'\">\n <span>{{ getFormattedDate().weekday }}, </span>\n <span>{{ getFormattedDate().monthday }}</span>\n </ng-container>\n <ng-container *ngIf=\"selection === 'range'\">\n <span>{{ selectedDates.length === 0 ? 'Start' : getFormattedRange().start}}</span>\n <span> - </span>\n <span>{{ selectedDates.length <= 1 ? 'End' : getFormattedRange().end}}</span>\n </ng-container>\n</ng-template>\n\n<!-- Month -->\n<ng-template #defaultMonth let-obj>\n <span\n #monthsBtn\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"(obj.date | date: 'LLLL') + ', ' + resourceStrings.igx_calendar_select_month\"\n (keydown)=\"onActiveViewYearKB(obj.date, $event, obj.index)\"\n (mousedown)=\"onActiveViewYear($event, obj.date, obj.index)\"\n class=\"igx-calendar-picker__date\">\n {{ formattedMonth(obj.date) }}\n </span>\n</ng-template>\n\n<!-- Year -->\n<ng-template #defaultYear let-obj>\n <span *ngIf=\"activeView === 'year'\" class=\"igx-calendar__aria-off-screen\" aria-live=\"polite\">{{ formattedYear(obj.date) }}</span>\n <span\n #yearsBtn\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"(obj.date | date: 'yyyy') + ', ' + resourceStrings.igx_calendar_select_year\"\n (keydown)=\"onActiveViewDecadeKB(obj.date, $event, obj.index)\"\n (mousedown)=\"onActiveViewDecade($event, obj.date, obj.index)\"\n class=\"igx-calendar-picker__date\">\n {{ formattedYear(obj.date) }}\n </span>\n</ng-template>\n\n<!-- Month Year -->\n<ng-template #defaultMonthYear let-obj let-result>\n <span *ngIf=\"monthsViewNumber < 2 || obj.index < 1\" class=\"igx-calendar__aria-off-screen\" aria-live=\"polite\">\n {{ monthsViewNumber > 1 ?\n (resourceStrings.igx_calendar_first_picker_of.replace('{0}', monthsViewNumber.toString()) + ' ' +\n (obj.date | date: 'LLLL yyyy')) :\n resourceStrings.igx_calendar_selected_month_is + (obj.date | date: 'LLLL yyyy')}}\n </span>\n <ng-container *ngTemplateOutlet=\"defaultMonth; context: {$implicit: obj}\"></ng-container>\n <ng-container *ngTemplateOutlet=\"defaultYear; context: {$implicit: obj}\"></ng-container>\n</ng-template>\n\n<!-- Decade -->\n<ng-template #defaultDecade>\n <span>{{ getDecadeRange().start }} - {{ getDecadeRange().end }}</span>\n</ng-template>\n\n<!-- Previous arrow icon -->\n<ng-template #prevArrow let-obj>\n <igx-icon aria-hidden=\"true\" family=\"default\" name=\"arrow_prev\"></igx-icon>\n</ng-template>\n\n<!-- Next arrow icon -->\n<ng-template #nextArrow let-obj>\n <igx-icon aria-hidden=\"true\" family=\"default\" name=\"arrow_next\"></igx-icon>\n</ng-template>\n\n<!-- Previous picker button -->\n<ng-template #prevPageButton let-obj>\n <div\n #prevPageBtn\n tabindex=\"0\"\n class=\"igx-calendar-picker__prev\"\n role=\"button\"\n [attr.aria-label]=\"prevNavLabel((getPrevMonth(viewDate) | date: 'LLLL'))\"\n data-action=\"prev\"\n igxCalendarScrollPage\n [startScroll]=\"startPrevPageScroll\"\n [stopScroll]=\"stopPageScroll\"\n (keydown)=\"$event.stopPropagation()\"\n >\n <ng-container *ngTemplateOutlet=\"prevArrow\"></ng-container>\n </div>\n</ng-template>\n\n<!-- Next picker button -->\n<ng-template #nextPageButton let-obj>\n <div\n #nextPageBtn\n tabindex=\"0\"\n class=\"igx-calendar-picker__next\"\n role=\"button\"\n [attr.aria-label]=\"nextNavLabel((getNextMonth(viewDate, monthsViewNumber) | date: 'LLLL'))\"\n data-action=\"next\"\n igxCalendarScrollPage\n [startScroll]=\"startNextPageScroll\"\n [stopScroll]=\"stopPageScroll\"\n (keydown)=\"$event.stopPropagation()\"\n >\n <ng-container *ngTemplateOutlet=\"nextArrow\"></ng-container>\n </div>\n</ng-template>\n\n<!-- PICKER IN DAYS -->\n<ng-template #calendarDaysPicker let-i>\n <section class=\"igx-calendar-picker\" [style.--calendar-row-start]=\"1 + (2 * i)\">\n <div class=\"igx-calendar-picker__dates\" [attr.data-month]=\"i | IgxGetViewDate:viewDate:false\">\n <ng-container\n *ngTemplateOutlet=\"subheaderTemplate ? subheaderTemplate : defaultMonthYear; context: getContext(i)\">\n </ng-container>\n </div>\n <div\n class=\"igx-calendar-picker__nav\"\n *ngIf=\"this.orientation === 'horizontal' ? i === monthsViewNumber - 1 : i === 0\"\n >\n <ng-container *ngTemplateOutlet=\"prevPageButton\"></ng-container>\n <ng-container *ngTemplateOutlet=\"nextPageButton\"></ng-container>\n </div>\n </section>\n</ng-template>\n\n<!-- PICKER IN MONTHS -->\n<ng-template #calendarYearPicker>\n <section class=\"igx-calendar-picker\">\n <div class=\"igx-calendar-picker__dates\">\n <ng-container\n *ngTemplateOutlet=\"subheaderTemplate ? subheaderTemplate : defaultYear; context: getContext(0)\">\n </ng-container>\n </div>\n <div class=\"igx-calendar-picker__nav\">\n <ng-container *ngTemplateOutlet=\"prevPageButton\"></ng-container>\n <ng-container *ngTemplateOutlet=\"nextPageButton\"></ng-container>\n </div>\n </section>\n</ng-template>\n\n<!-- PICKER IN YEARS -->\n<ng-template #calendarDecadePicker>\n <section class=\"igx-calendar-picker\">\n <div class=\"igx-calendar-picker__dates\" aria-live=\"polite\">\n <ng-container\n *ngTemplateOutlet=\"subheaderTemplate ? subheaderTemplate : defaultDecade;\">\n </ng-container>\n </div>\n <div class=\"igx-calendar-picker__nav\">\n <ng-container *ngTemplateOutlet=\"prevPageButton\"></ng-container>\n <ng-container *ngTemplateOutlet=\"nextPageButton\"></ng-container>\n </div>\n </section>\n</ng-template>\n\n\n<header\n aria-labelledby=\"igx-aria-calendar-title-month igx-aria-calendar-title-year\"\n class=\"igx-calendar__header\"\n *ngIf=\"selection === 'single' && hasHeader || selection === 'range' && hasHeader\">\n <h5 id=\"igx-aria-calendar-title-year\" class=\"igx-calendar__header-year\">\n <ng-container *ngTemplateOutlet=\"headerTitleTemplate ?? defaultHeaderTitle; context: headerContext\"></ng-container>\n </h5>\n <h2 id=\"igx-aria-calendar-title-month\" class=\"igx-calendar__header-date\">\n <ng-container *ngTemplateOutlet=\"headerTemplate ? headerTemplate : defaultHeaderDate; context: headerContext\">\n </ng-container>\n </h2>\n</header>\n\n\n<div\n #wrapper\n [style.--calendar-months]=\"monthsViewNumber\"\n [tabIndex]=\"0\"\n class=\"igx-calendar__wrapper\"\n [class.igx-calendar__wrapper--vertical]=\"orientation === 'vertical'\"\n [attr.aria-activedescendant]=\"activeDescendant\"\n [attr.aria-multiselectable]=\"selection !== 'single'\"\n aria-labelledby=\"calendar-desc\"\n role=\"grid\"\n >\n <caption id=\"calendar-desc\" tabindex=\"-1\" class=\"igx-calendar__aria-off-screen\">\n <ng-container *ngIf=\"selection === 'multi'\">\n {{ monthsViewNumber && monthsViewNumber > 1 ?\n resourceStrings.igx_calendar_multi_selection.replace('{0}', monthsViewNumber.toString()) :\n resourceStrings.igx_calendar_singular_multi_selection}}\n </ng-container>\n <ng-container *ngIf=\"selection === 'range'\">\n {{ monthsViewNumber && monthsViewNumber > 1 ?\n resourceStrings.igx_calendar_range_selection.replace('{0}', monthsViewNumber.toString()) :\n resourceStrings.igx_calendar_singular_range_selection}}\n </ng-container>\n <ng-container *ngIf=\"selection === 'single'\">\n {{ monthsViewNumber && monthsViewNumber > 1 ?\n resourceStrings.igx_calendar_single_selection.replace('{0}', monthsViewNumber.toString()) :\n resourceStrings.igx_calendar_singular_single_selection}}\n </ng-container>\n </caption>\n <section\n class=\"igx-calendar__pickers\"\n [class.igx-calendar__pickers--days]=\"isDefaultView\"\n [class.igx-calendar__pickers--vertical]=\"orientation === 'vertical'\"\n >\n <ng-container *ngIf=\"isDefaultView\">\n <ng-container *ngFor=\"let view of monthsViewNumber | IgxMonthViewSlots; index as i\">\n <ng-container *ngTemplateOutlet=\"calendarDaysPicker; context: {$implicit: i}\"></ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"isYearView\">\n <ng-container *ngTemplateOutlet=\"calendarYearPicker\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"isDecadeView\">\n <ng-container *ngTemplateOutlet=\"calendarDecadePicker\"></ng-container>\n </ng-container>\n </section>\n\n <section class=\"igx-calendar__body\" [class.igx-calendar__body--vertical]=\"orientation === 'vertical'\" role=\"presentation\">\n <ng-container *ngIf=\"isDefaultView\">\n <ng-container *ngFor=\"let view of monthsViewNumber | IgxMonthViewSlots; index as i\">\n <igx-days-view\n #days\n role=\"rowgroup\"\n [tabIndex]=\"-1\"\n [selection]=\"selection\"\n [locale]=\"locale\"\n [value]=\"value\"\n [(activeDate)]=\"activeDate\"\n [(previewRangeDate)]=\"previewRangeDate\"\n [viewDate]=\"i | IgxGetViewDate: viewDate\"\n [weekStart]=\"weekStart\"\n [formatOptions]=\"formatOptions\"\n [formatViews]=\"formatViews\"\n [disabledDates]=\"disabledDates\"\n [specialDates]=\"specialDates\"\n [style.--calendar-row-start]=\"(i + 1) * 2\"\n [hideLeadingDays]=\"hideOutsideDays || i !== 0\"\n [hideTrailingDays]=\"hideOutsideDays || i !== monthsViewNumber - 1\"\n [showWeekNumbers]=\"showWeekNumbers\"\n [showActiveDay]=\"showActiveDay\"\n [standalone]=\"false\"\n (swiperight)=\"previousPage()\"\n (swipeleft)=\"nextPage()\"\n (dateSelected)=\"handleDateSelection($event)\"\n (mousedown)=\"$event.preventDefault()\">\n </igx-days-view>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"isYearView\">\n <igx-months-view\n #months\n role=\"rowgroup\"\n [tabIndex]=\"-1\"\n [date]=\"viewDate\"\n [locale]=\"locale\"\n [formatView]=\"formatViews.month\"\n [monthFormat]=\"formatOptions.month\"\n [showActive]=\"showActiveDay\"\n [standalone]=\"false\"\n (swiperight)=\"previousPage()\"\n (swipeleft)=\"nextPage()\"\n (pageChanged)=\"updateYear($event)\"\n (activeDateChanged)=\"updateActiveDescendant($event)\"\n (selected)=\"changeMonth($event)\"\n (mousedown)=\"$event.preventDefault()\">\n </igx-months-view>\n </ng-container>\n\n <ng-container *ngIf=\"isDecadeView\">\n <igx-years-view\n #decade\n role=\"rowgroup\"\n [tabIndex]=\"-1\"\n [date]=\"viewDate\"\n [locale]=\"locale\"\n [formatView]=\"formatViews.year\"\n [yearFormat]=\"formatOptions.year\"\n [showActive]=\"showActiveDay\"\n [standalone]=\"false\"\n (swiperight)=\"previousPage()\"\n (swipeleft)=\"nextPage()\"\n (pageChanged)=\"updateYear($event)\"\n (activeDateChanged)=\"updateActiveDescendant($event)\"\n (selected)=\"changeYear($event)\"\n (mousedown)=\"$event.preventDefault()\">\n </igx-years-view>\n </ng-container>\n </section>\n</div>\n" }]
|
|
834
834
|
}], propDecorators: { wrapper: [{
|
|
835
835
|
type: ViewChild,
|
|
836
836
|
args: ["wrapper"]
|
|
@@ -894,4 +894,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImpor
|
|
|
894
894
|
type: HostListener,
|
|
895
895
|
args: ['mousedown', ['$event']]
|
|
896
896
|
}] } });
|
|
897
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFDTCxTQUFTLEVBR1QsWUFBWSxFQUdaLGdCQUFnQixFQUNiLFlBQVksR0FDZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkQsT0FBTyxFQUNOLGtDQUFrQyxFQUMvQix1Q0FBdUMsRUFDMUMscUNBQXFDLEVBQ2xDLDhCQUE4QixHQUNqQyxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxlQUFlLEVBQW1CLE1BQU0sWUFBWSxDQUFDO0FBQzlELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFFLE9BQU8s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b250ZW50IjpbImltcG9ydCB7XG5cdENvbXBvbmVudCxcblx0Q29udGVudENoaWxkLFxuXHRmb3J3YXJkUmVmLFxuXHRIb3N0QmluZGluZyxcblx0SW5wdXQsXG5cdFZpZXdDaGlsZCxcblx0RWxlbWVudFJlZixcblx0QWZ0ZXJWaWV3SW5pdCxcblx0Vmlld0NoaWxkcmVuLFxuXHRRdWVyeUxpc3QsXG5cdE9uRGVzdHJveSxcblx0Ym9vbGVhbkF0dHJpYnV0ZSxcbiAgICBIb3N0TGlzdGVuZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCwgTmdTdHlsZSwgTmdGb3IsIERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge1xuXHRJZ3hDYWxlbmRhckhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIElneENhbGVuZGFySGVhZGVyVGl0bGVUZW1wbGF0ZURpcmVjdGl2ZSxcblx0SWd4Q2FsZW5kYXJTdWJoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBJZ3hDYWxlbmRhclNjcm9sbFBhZ2VEaXJlY3RpdmUsXG59IGZyb20gJy4vY2FsZW5kYXIuZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBJZ3hDYWxlbmRhclZpZXcsIFNjcm9sbERpcmVjdGlvbiB9IGZyb20gJy4vY2FsZW5kYXInO1xuaW1wb3J0IHsgSWd4TW9udGhzVmlld0NvbXBvbmVudCB9IGZyb20gJy4vbW9udGhzLXZpZXcvbW9udGhzLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IElneFllYXJzVmlld0NvbXBvbmVudCB9IGZyb20gJy4veWVhcnMtdmlldy95ZWFycy12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hEYXlzVmlld0NvbXBvbmVudCB9IGZyb20gJy4vZGF5cy12aWV3L2RheXMtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgaW50ZXJ2YWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCwgZGVib3VuY2UsIHNraXBMYXN0LCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJZ3hNb250aFZpZXdTbG90c0NhbGVuZGFyLCBJZ3hHZXRWaWV3RGF0ZUNhbGVuZGFyIH0gZnJvbSAnLi9tb250aHMtdmlldy5waXBlJztcbmltcG9ydCB7IElneEljb25Db21wb25lbnQgfSBmcm9tICcuLi9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IGFyZVNhbWVNb250aCwgZm9ybWF0VG9QYXJ0cywgZ2V0Q2xvc2VzdEFjdGl2ZURhdGUsIGlzRGF0ZUluUmFuZ2VzIH0gZnJvbSAnLi9jb21tb24vaGVscGVycyc7XG5pbXBvcnQgeyBDYWxlbmRhckRheSB9IGZyb20gJy4vY29tbW9uL21vZGVsJztcbmltcG9ydCB7IElneENhbGVuZGFyQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4vY2FsZW5kYXItYmFzZSc7XG5pbXBvcnQgeyBLZXlib2FyZE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9jYWxlbmRhci5zZXJ2aWNlcyc7XG5cbmxldCBORVhUX0lEID0gMDtcblxuLyoqXG4gKiBDYWxlbmRhciBwcm92aWRlcyBhIHdheSB0byBkaXNwbGF5IGRhdGUgaW5mb3JtYXRpb24uXG4gKlxuICogQGlneE1vZHVsZSBJZ3hDYWxlbmRhck1vZHVsZVxuICpcbiAqIEBpZ3hUaGVtZSBpZ3gtY2FsZW5kYXItdGhlbWUsIGlneC1pY29uLXRoZW1lXG4gKlxuICogQGlneEtleXdvcmRzIGNhbGVuZGFyLCBkYXRlcGlja2VyLCBzY2hlZHVsZSwgZGF0ZVxuICpcbiAqIEBpZ3hHcm91cCBTY2hlZHVsaW5nXG4gKlxuICogQHJlbWFya3NcbiAqIFRoZSBJZ25pdGUgVUkgQ2FsZW5kYXIgcHJvdmlkZXMgYW4gZWFzeSB3YXkgdG8gZGlzcGxheSBhIGNhbGVuZGFyIGFuZCBhbGxvdyB1c2VycyB0byBzZWxlY3QgZGF0ZXMgdXNpbmcgc2luZ2xlLCBtdWx0aXBsZVxuICogb3IgcmFuZ2Ugc2VsZWN0aW9uLlxuICpcbiAqIEBleGFtcGxlOlxuICogYGBgaHRtbFxuICogPGlneC1jYWxlbmRhciBzZWxlY3Rpb249XCJyYW5nZVwiPjwvaWd4LWNhbGVuZGFyPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuXHRwcm92aWRlcnM6IFtcblx0XHR7XG5cdFx0XHRtdWx0aTogdHJ1ZSxcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuXHRcdFx0dXNlRXhpc3Rpbmc6IElneENhbGVuZGFyQ29tcG9uZW50LFxuXHRcdH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG11bHRpOiBmYWxzZSxcbiAgICAgICAgICAgIHByb3ZpZGU6IEtleWJvYXJkTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgICAgIH0sXG5cdF0sXG5cdHNlbGVjdG9yOiAnaWd4LWNhbGVuZGFyJyxcblx0dGVtcGxhdGVVcmw6ICdjYWxlbmRhci5jb21wb25lbnQuaHRtbCcsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdGltcG9ydHM6IFtOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0LCBJZ3hDYWxlbmRhclNjcm9sbFBhZ2VEaXJlY3RpdmUsIE5nU3R5bGUsIElneEljb25Db21wb25lbnQsIE5nRm9yLCBJZ3hEYXlzVmlld0NvbXBvbmVudCwgSWd4TW9udGhzVmlld0NvbXBvbmVudCwgSWd4WWVhcnNWaWV3Q29tcG9uZW50LCBEYXRlUGlwZSwgSWd4TW9udGhWaWV3U2xvdHNDYWxlbmRhciwgSWd4R2V0Vmlld0RhdGVDYWxlbmRhcl0sXG59KVxuZXhwb3J0IGNsYXNzIElneENhbGVuZGFyQ29tcG9uZW50IGV4dGVuZHMgSWd4Q2FsZW5kYXJCYXNlRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfYWN0aXZlRGVzY2VuZGFudDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoXCJ3cmFwcGVyXCIpXG4gICAgcHVibGljIHdyYXBwZXI6IEVsZW1lbnRSZWY7XG5cblx0LyoqXG5cdCAqIFNldHMvZ2V0cyB0aGUgYGlkYCBvZiB0aGUgY2FsZW5kYXIuXG5cdCAqXG5cdCAqIEByZW1hcmtzXG5cdCAqIElmIG5vdCBzZXQsIHRoZSBgaWRgIHdpbGwgaGF2ZSB2YWx1ZSBgXCJpZ3gtY2FsZW5kYXItMFwiYC5cblx0ICpcblx0ICogQGV4YW1wbGVcblx0ICogYGBgaHRtbFxuXHQgKiA8aWd4LWNhbGVuZGFyIGlkPVwibXktZmlyc3QtY2FsZW5kYXJcIj48L2lneC1jYWxlbmRhcj5cblx0ICogYGBgXG5cdCAqIEBtZW1iZXJvZiBJZ3hDYWxlbmRhckNvbXBvbmVudFxuXHQgKi9cblx0QEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcblx0QElucHV0KClcblx0cHVibGljIGlkID0gYGlneC1jYWxlbmRhci0keyBORVhUX0lEKysgfWA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgd2hldGhlciB0aGUgY2FsZW5kYXIgaGFzIGhlYWRlci5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2FsZW5kYXIgW2hhc0hlYWRlcl09XCJmYWxzZVwiPjwvaWd4LWNhbGVuZGFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBoYXNIZWFkZXIgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHdoZXRoZXIgdGhlIGNhbGVuZGFyIGhlYWRlciB3aWxsIGJlIGluIHZlcnRpY2FsIHBvc2l0aW9uLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2FsZW5kYXIgW3ZlcnRpY2FsXT1cInRydWVcIj48L2lneC1jYWxlbmRhcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgdmVydGljYWwgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG9yaWVudGF0aW9uOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnID0gJ2hvcml6b250YWwnO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaGVhZGVyT3JpZW50YXRpb246ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCcgPSAnaG9yaXpvbnRhbCc7XG5cblx0LyoqXG5cdCAqIFNldHMvZ2V0cyB0aGUgbnVtYmVyIG9mIG1vbnRoIHZpZXdzIGRpc3BsYXllZC5cblx0ICogRGVmYXVsdCB2YWx1ZSBpcyBgMWAuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYGh0bWxcblx0ICogPGlneC1jYWxlbmRhciBbbW9udGhzVmlld051bWJlcl09XCIyXCI+PC9pZ3gtY2FsZW5kYXI+XG5cdCAqIGBgYFxuXHQgKi9cblx0QElucHV0KClcblx0cHVibGljIGdldCBtb250aHNWaWV3TnVtYmVyKCkge1xuXHRcdHJldHVybiB0aGlzLl9tb250aHNWaWV3TnVtYmVyO1xuXHR9XG5cbiAgICBwdWJsaWMgc2V0IG1vbnRoc1ZpZXdOdW1iZXIodmFsOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHZhbCA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG5cdFx0dGhpcy5fbW9udGhzVmlld051bWJlciA9IHZhbDtcblx0fVxuXG4gICAgLyoqXG4gICAgICogU2hvdy9oaWRlIHdlZWsgbnVtYmVyc1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYWxlbmRhciBbc2hvd1dlZWtOdW1iZXJzXT1cInRydWVcIj48L2lneC1jYWxlbmRhcj5cbiAgICAgKiBgYFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBzaG93V2Vla051bWJlcnMgPSBmYWxzZTtcblxuXHQvKipcblx0ICogVGhlIGRlZmF1bHQgY3NzIGNsYXNzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWNhbGVuZGFyLS12ZXJ0aWNhbCcpXG5cdHB1YmxpYyBnZXQgc3R5bGVWZXJ0aWNhbENsYXNzKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmhlYWRlck9yaWVudGF0aW9uID09PSAndmVydGljYWwnO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBkZWZhdWx0IGNzcyBjbGFzcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1jYWxlbmRhcicpXG5cdHB1YmxpYyBzdHlsZUNsYXNzID0gdHJ1ZTtcblxuXHQvKipcblx0ICogTW9udGggYnV0dG9uLCB0aGF0IGRpc3BsYXlzIHRoZSBtb250aHMgdmlldy5cblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdEBWaWV3Q2hpbGRyZW4oJ21vbnRoc0J0bicpXG5cdHB1YmxpYyBtb250aHNCdG5zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cblx0LyoqXG5cdCAqIFZpZXdDaGlsZCB0aGF0IHJlcHJlc2VudHMgdGhlIGRlY2FkZSB2aWV3LlxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0QFZpZXdDaGlsZCgnZGVjYWRlJywgeyByZWFkOiBJZ3hZZWFyc1ZpZXdDb21wb25lbnQgfSlcblx0cHVibGljIGRhY2FkZVZpZXc6IElneFllYXJzVmlld0NvbXBvbmVudDtcblxuXHQvKipcblx0ICogVmlld0NoaWxkIHRoYXQgcmVwcmVzZW50cyB0aGUgbW9udGhzIHZpZXcuXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRAVmlld0NoaWxkKCdtb250aHMnLCB7IHJlYWQ6IElneE1vbnRoc1ZpZXdDb21wb25lbnQgfSlcblx0cHVibGljIG1vbnRoc1ZpZXc6IElneE1vbnRoc1ZpZXdDb21wb25lbnQ7XG5cblx0LyoqXG5cdCAqIFZpZXdDaGlsZCB0aGF0IHJlcHJlc2VudHMgdGhlIGRheXMgdmlldy5cblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdEBWaWV3Q2hpbGQoJ2RheXMnLCB7IHJlYWQ6IElneERheXNWaWV3Q29tcG9uZW50IH0pXG5cdHB1YmxpYyBkYXlzVmlldzogSWd4RGF5c1ZpZXdDb21wb25lbnQ7XG5cblx0LyoqXG5cdCAqIFZpZXdDaGlsZHJlbmRlbiByZXByZXNlbnRpbmcgYWxsIG9mIHRoZSByZW5kZXJlZCBkYXlzIHZpZXdzLlxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0QFZpZXdDaGlsZHJlbignZGF5cycsIHsgcmVhZDogSWd4RGF5c1ZpZXdDb21wb25lbnQgfSlcblx0cHVibGljIG1vbnRoVmlld3M6IFF1ZXJ5TGlzdDxJZ3hEYXlzVmlld0NvbXBvbmVudD47XG5cblx0LyoqXG5cdCAqIEJ1dHRvbiBmb3IgcHJldmlvdXMgbW9udGguXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRAVmlld0NoaWxkKCdwcmV2UGFnZUJ0bicpXG5cdHB1YmxpYyBwcmV2UGFnZUJ0bjogRWxlbWVudFJlZjtcblxuXHQvKipcblx0ICogQnV0dG9uIGZvciBuZXh0IG1vbnRoLlxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0QFZpZXdDaGlsZCgnbmV4dFBhZ2VCdG4nKVxuXHRwdWJsaWMgbmV4dFBhZ2VCdG46IEVsZW1lbnRSZWY7XG5cblx0LyoqXG5cdCAqIERlbm90ZSBpZiB0aGUgeWVhciB2aWV3IGlzIGFjdGl2ZS5cblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBnZXQgaXNZZWFyVmlldygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuWWVhcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBoZWFkZXIgdGVtcGxhdGUuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYHR5cGVzY3JpcHRcblx0ICogbGV0IGhlYWRlclRpdGxlVGVtcGxhdGUgPSB0aGlzLmNhbGVuZGFyLmhlYWRlclRpdGxlVGVhbXBsYXRlO1xuXHQgKiBgYGBcblx0ICogQG1lbWJlcm9mIElneENhbGVuZGFyQ29tcG9uZW50XG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGhlYWRlclRpdGxlVGVtcGxhdGUoKTogYW55IHtcblx0XHRpZiAodGhpcy5oZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5oZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlLnRlbXBsYXRlO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBoZWFkZXIgdGVtcGxhdGUuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYGh0bWxcblx0ICogPGlneC1jYWxlbmRhciBoZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlPVwiaWd4Q2FsZW5kYXJIZWFkZXJUaXRsZVwiPjwvaWd4LWNhbGVuZGFyPlxuXHQgKiBgYGBcblx0ICogQG1lbWJlcm9mIElneENhbGVuZGFyQ29tcG9uZW50XG5cdCAqL1xuXHRwdWJsaWMgc2V0IGhlYWRlclRpdGxlVGVtcGxhdGUoZGlyZWN0aXZlOiBhbnkpIHtcblx0XHR0aGlzLmhlYWRlclRpdGxlVGVtcGxhdGVEaXJlY3RpdmUgPSBkaXJlY3RpdmU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgaGVhZGVyIHRlbXBsYXRlLlxuXHQgKlxuXHQgKiBAZXhhbXBsZVxuXHQgKiBgYGB0eXBlc2NyaXB0XG5cdCAqIGxldCBoZWFkZXJUZW1wbGF0ZSA9ICB0aGlzLmNhbGVuZGFyLmhlYWRlclRlYW1wbGF0ZTtcblx0ICogYGBgXG5cdCAqIEBtZW1iZXJvZiBJZ3hDYWxlbmRhckNvbXBvbmVudFxuXHQgKi9cblx0cHVibGljIGdldCBoZWFkZXJUZW1wbGF0ZSgpOiBhbnkge1xuXHRcdGlmICh0aGlzLmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5oZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZS50ZW1wbGF0ZTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgaGVhZGVyIHRlbXBsYXRlLlxuXHQgKlxuXHQgKiBAZXhhbXBsZVxuXHQgKiBgYGBodG1sXG5cdCAqIDxpZ3gtY2FsZW5kYXIgaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmU9XCJpZ3hDYWxlbmRhckhlYWRlclwiPjwvaWd4LWNhbGVuZGFyPlxuXHQgKiBgYGBcblx0ICogQG1lbWJlcm9mIElneENhbGVuZGFyQ29tcG9uZW50XG5cdCAqL1xuXHRwdWJsaWMgc2V0IGhlYWRlclRlbXBsYXRlKGRpcmVjdGl2ZTogYW55KSB7XG5cdFx0dGhpcy5oZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSA9IGRpcmVjdGl2ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBzdWJoZWFkZXIgdGVtcGxhdGUuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYHR5cGVzY3JpcHRcblx0ICogbGV0IHN1YmhlYWRlclRlbXBsYXRlID0gdGhpcy5jYWxlbmRhci5zdWJoZWFkZXJUZW1wbGF0ZTtcblx0ICogYGBgXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IHN1YmhlYWRlclRlbXBsYXRlKCk6IGFueSB7XG5cdFx0aWYgKHRoaXMuc3ViaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUpIHtcblx0XHRcdHJldHVybiB0aGlzLnN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLnRlbXBsYXRlO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBzdWJoZWFkZXIgdGVtcGxhdGUuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYGh0bWxcblx0ICogPGlneC1jYWxlbmRhciBzdWJoZWFkZXJUZW1wbGF0ZT1cImlneENhbGVuZGFyU3ViaGVhZGVyXCI+PC9pZ3gtY2FsZW5kYXI+XG5cdCAqIGBgYFxuXHQgKiBAbWVtYmVyb2YgSWd4Q2FsZW5kYXJDb21wb25lbnRcblx0ICovXG5cdHB1YmxpYyBzZXQgc3ViaGVhZGVyVGVtcGxhdGUoZGlyZWN0aXZlOiBhbnkpIHtcblx0XHR0aGlzLnN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlID0gZGlyZWN0aXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGNvbnRleHQgZm9yIHRoZSB0ZW1wbGF0ZSBtYXJrZWQgd2l0aCB0aGUgYGlneENhbGVuZGFySGVhZGVyYCBkaXJlY3RpdmUuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYHR5cGVzY3JpcHRcblx0ICogbGV0IGhlYWRlckNvbnRleHQgPSAgdGhpcy5jYWxlbmRhci5oZWFkZXJDb250ZXh0O1xuXHQgKiBgYGBcblx0ICovXG5cdHB1YmxpYyBnZXQgaGVhZGVyQ29udGV4dCgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZW5lcmF0ZUNvbnRleHQodGhpcy5oZWFkZXJEYXRlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBjb250ZXh0IGZvciB0aGUgdGVtcGxhdGUgbWFya2VkIHdpdGggZWl0aGVyIGBpZ3hDYWxlbmRhclN1YkhlYWRlck1vbnRoYFxuXHQgKiBvciBgaWd4Q2FsZW5kYXJTdWJIZWFkZXJZZWFyYCBkaXJlY3RpdmUuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYHR5cGVzY3JpcHRcblx0ICogbGV0IGNvbnRleHQgPSAgdGhpcy5jYWxlbmRhci5jb250ZXh0O1xuXHQgKiBgYGBcblx0ICovXG5cdHB1YmxpYyBnZXQgY29udGV4dCgpIHtcblx0XHRjb25zdCBkYXRlOiBEYXRlID0gdGhpcy52aWV3RGF0ZTtcblx0XHRyZXR1cm4gdGhpcy5nZW5lcmF0ZUNvbnRleHQoZGF0ZSk7XG5cdH1cblxuXHQvKipcblx0ICogRGF0ZSBkaXNwbGF5ZWQgaW4gaGVhZGVyXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGhlYWRlckRhdGUoKTogRGF0ZSB7XG5cdFx0cmV0dXJuIHRoaXMuc2VsZWN0ZWREYXRlcz8uYXQoMCkgPz8gbmV3IERhdGUoKTtcblx0fVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoZm9yd2FyZFJlZigoKSA9PiBJZ3hDYWxlbmRhckhlYWRlclRlbXBsYXRlRGlyZWN0aXZlKSwgeyByZWFkOiBJZ3hDYWxlbmRhckhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcml2YXRlIGhlYWRlclRlbXBsYXRlRGlyZWN0aXZlOiBJZ3hDYWxlbmRhckhlYWRlclRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoZm9yd2FyZFJlZigoKSA9PiBJZ3hDYWxlbmRhckhlYWRlclRpdGxlVGVtcGxhdGVEaXJlY3RpdmUpLCB7IHJlYWQ6IElneENhbGVuZGFySGVhZGVyVGl0bGVUZW1wbGF0ZURpcmVjdGl2ZSwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBoZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlOiBJZ3hDYWxlbmRhckhlYWRlclRpdGxlVGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICBAQ29udGVudENoaWxkKGZvcndhcmRSZWYoKCkgPT4gSWd4Q2FsZW5kYXJTdWJoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSksIHsgcmVhZDogSWd4Q2FsZW5kYXJTdWJoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBzdWJoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZTogSWd4Q2FsZW5kYXJTdWJoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZTtcblxuXHQvKipcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBhY3RpdmVEYXRlID0gQ2FsZW5kYXJEYXkudG9kYXkubmF0aXZlO1xuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHJvdGVjdGVkIHByZXZpZXdSYW5nZURhdGU6IERhdGU7XG5cblx0LyoqXG5cdCAqIFVzZWQgdG8gYXBwbHkgdGhlIGFjdGl2ZSBkYXRlIHdoZW4gdGhlIGNhbGVuZGFyIHZpZXcgaXMgY2hhbmdlZFxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIG5leHREYXRlOiBEYXRlO1xuXG5cdC8qKlxuXHQgKiBEZW5vdGUgaWYgdGhlIGNhbGVuZGFyIHZpZXcgd2FzIGNoYW5nZWQgd2l0aCB0aGUga2V5Ym9hcmRcblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBpc0tleWRvd25UcmlnZ2VyID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwcml2YXRlIF9tb250aHNWaWV3TnVtYmVyID0gMTtcblxuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pXG4gICAgcHJvdGVjdGVkIG9uTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLndyYXBwZXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Nob3dBY3RpdmVEYXk6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuICAgIHByb3RlY3RlZCBzZXQgc2hvd0FjdGl2ZURheSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9zaG93QWN0aXZlRGF5ID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IHNob3dBY3RpdmVEYXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93QWN0aXZlRGF5O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgYWN0aXZlRGVzY2VuZGFudCgpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSAnbW9udGgnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVEYXRlLmdldFRpbWUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVEZXNjZW5kYW50ID8/IHRoaXMudmlld0RhdGUuZ2V0VGltZSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzZXQgYWN0aXZlRGVzY2VuZGFudChkYXRlOiBEYXRlKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZURlc2NlbmRhbnQgPSBkYXRlLmdldFRpbWUoKTtcbiAgICB9XG5cblx0cHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5rZXlib2FyZE5hdmlnYXRpb25cbiAgICAgICAgICAgIC5hdHRhY2hLZXlib2FyZEhhbmRsZXJzKHRoaXMud3JhcHBlciwgdGhpcylcbiAgICAgICAgICAgIC5zZXQoXCJBcnJvd1VwXCIsIHRoaXMub25BcnJvd1VwKVxuICAgICAgICAgICAgLnNldChcIkFycm93RG93blwiLCB0aGlzLm9uQXJyb3dEb3duKVxuICAgICAgICAgICAgLnNldChcIkFycm93TGVmdFwiLCB0aGlzLm9uQXJyb3dMZWZ0KVxuICAgICAgICAgICAgLnNldChcIkFycm93UmlnaHRcIiwgdGhpcy5vbkFycm93UmlnaHQpXG4gICAgICAgICAgICAuc2V0KFwiRW50ZXJcIiwgdGhpcy5vbkVudGVyKVxuICAgICAgICAgICAgLnNldChcIiBcIiwgdGhpcy5vbkVudGVyKVxuICAgICAgICAgICAgLnNldChcIkhvbWVcIiwgdGhpcy5vbkhvbWUpXG4gICAgICAgICAgICAuc2V0KFwiRW5kXCIsIHRoaXMub25FbmQpXG4gICAgICAgICAgICAuc2V0KFwiUGFnZVVwXCIsIHRoaXMuaGFuZGxlUGFnZVVwKVxuICAgICAgICAgICAgLnNldChcIlBhZ2VEb3duXCIsIHRoaXMuaGFuZGxlUGFnZURvd24pO1xuXG4gICAgICAgIHRoaXMud3JhcHBlci5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgKGV2ZW50OiBGb2N1c0V2ZW50KSA9PiB0aGlzLm9uV3JhcHBlckZvY3VzKGV2ZW50KSk7XG4gICAgICAgIHRoaXMud3JhcHBlci5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoZXZlbnQ6IEZvY3VzRXZlbnQpID0+IHRoaXMub25XcmFwcGVyQmx1cihldmVudCkpO1xuXG4gICAgICAgIHRoaXMuc3RhcnRQYWdlU2Nyb2xsJC5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuc3RvcFBhZ2VTY3JvbGwkKSxcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnNjcm9sbFBhZ2UkLnBpcGUoXG4gICAgICAgICAgICAgICAgc2tpcExhc3QoMSksXG4gICAgICAgICAgICAgICAgZGVib3VuY2UoKCkgPT4gaW50ZXJ2YWwoMzAwKSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuc3RvcFBhZ2VTY3JvbGwkKVxuICAgICAgICAgICAgKSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLnBhZ2VTY3JvbGxEaXJlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb24uUFJFVjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJldmlvdXNQYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb24uTkVYVDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFBhZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFNjcm9sbERpcmVjdGlvbi5OT05FOlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3JC5zdWJzY3JpYmUoKHZpZXcpID0+IHtcblx0XHRcdHRoaXMuYWN0aXZlVmlld0NoYW5nZWQuZW1pdCh2aWV3KTtcblxuICAgICAgICAgICAgdGhpcy52aWV3RGF0ZUNoYW5nZWQuZW1pdCh7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNWYWx1ZTogdGhpcy5wcmV2aW91c1ZpZXdEYXRlLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy52aWV3RGF0ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25XcmFwcGVyRm9jdXMoX2V2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgICAgIHRoaXMuc2hvd0FjdGl2ZURheSA9IHRydWU7XG4gICAgICAgIHRoaXMubW9udGhWaWV3cy5mb3JFYWNoKHZpZXcgPT4gdmlldy5jaGFuZ2VQcmV2aWV3UmFuZ2UodGhpcy5hY3RpdmVEYXRlKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbldyYXBwZXJCbHVyKF9ldmVudDogRm9jdXNFdmVudCkge1xuICAgICAgICB0aGlzLnNob3dBY3RpdmVEYXkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tb250aFZpZXdzLmZvckVhY2godmlldyA9PiB2aWV3LmNsZWFyUHJldmlld1JhbmdlKCkpO1xuICAgICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjaygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQXJyb3dLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBkZWx0YTogbnVtYmVyKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgY29uc3QgZGF0ZSA9IGdldENsb3Nlc3RBY3RpdmVEYXRlKFxuICAgICAgICAgICAgQ2FsZW5kYXJEYXkuZnJvbSh0aGlzLmFjdGl2ZURhdGUpLFxuICAgICAgICAgICAgZGVsdGEsXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkRGF0ZXMsXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gZGF0ZS5uYXRpdmU7XG5cbiAgICAgICAgY29uc3QgZGF0ZXMgPSB0aGlzLnZpZXdEYXRlcztcbiAgICAgICAgY29uc3QgaXNEYXRlSW5WaWV3ID0gZGF0ZXMuc29tZShkID0+IGQuZGF0ZS5lcXVhbFRvKHRoaXMuYWN0aXZlRGF0ZSkpO1xuICAgICAgICB0aGlzLm1vbnRoVmlld3MuZm9yRWFjaCh2aWV3ID0+IHZpZXcuY2xlYXJQcmV2aWV3UmFuZ2UoKSk7XG5cbiAgICAgICAgaWYgKCFpc0RhdGVJblZpZXcpIHtcbiAgICAgICAgICAgIGRlbHRhID4gMCA/IHRoaXMubmV4dFBhZ2UodHJ1ZSkgOiB0aGlzLnByZXZpb3VzUGFnZSh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlUGFnZVVwRG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgZGVsdGE6IG51bWJlcikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGNvbnN0IGRpciA9IGRlbHRhID4gMCA/IFNjcm9sbERpcmVjdGlvbi5ORVhUIDogU2Nyb2xsRGlyZWN0aW9uLlBSRVY7XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3Lk1vbnRoICYmIGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdEYXRlID0gQ2FsZW5kYXJEYXkuZnJvbSh0aGlzLnZpZXdEYXRlKS5hZGQoJ3llYXInLCBkZWx0YSkubmF0aXZlO1xuICAgICAgICAgICAgdGhpcy5yZXNldEFjdGl2ZURhdGUodGhpcy52aWV3RGF0ZSk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVBhZ2UoZmFsc2UsIGRpcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVBhZ2VVcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICB0aGlzLmhhbmRsZVBhZ2VVcERvd24oZXZlbnQsIC0xKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVBhZ2VEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIHRoaXMuaGFuZGxlUGFnZVVwRG93bihldmVudCwgMSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkFycm93VXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3Lk1vbnRoKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUFycm93S2V5ZG93bihldmVudCwgLTcpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3LlllYXIpIHtcbiAgICAgICAgICAgIHRoaXMubW9udGhzVmlldy5vbktleWRvd25BcnJvd1VwKGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5EZWNhZGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGFjYWRlVmlldy5vbktleWRvd25BcnJvd1VwKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25BcnJvd0Rvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3Lk1vbnRoKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUFycm93S2V5ZG93bihldmVudCwgNyk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuWWVhcikge1xuICAgICAgICAgICAgdGhpcy5tb250aHNWaWV3Lm9uS2V5ZG93bkFycm93RG93bihldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuRGVjYWRlKSB7XG4gICAgICAgICAgICB0aGlzLmRhY2FkZVZpZXcub25LZXlkb3duQXJyb3dEb3duKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25BcnJvd0xlZnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3Lk1vbnRoKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUFycm93S2V5ZG93bihldmVudCwgLTEpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3LlllYXIpIHtcbiAgICAgICAgICAgIHRoaXMubW9udGhzVmlldy5vbktleWRvd25BcnJvd0xlZnQoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3LkRlY2FkZSkge1xuICAgICAgICAgICAgdGhpcy5kYWNhZGVWaWV3Lm9uS2V5ZG93bkFycm93TGVmdChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQXJyb3dSaWdodChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuTW9udGgpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQXJyb3dLZXlkb3duKGV2ZW50LCAxKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5ZZWFyKSB7XG4gICAgICAgICAgICB0aGlzLm1vbnRoc1ZpZXcub25LZXlkb3duQXJyb3dSaWdodChldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuRGVjYWRlKSB7XG4gICAgICAgICAgICB0aGlzLmRhY2FkZVZpZXcub25LZXlkb3duQXJyb3dSaWdodChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRW50ZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3Lk1vbnRoKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZURhdGVTZWxlY3Rpb24odGhpcy5hY3RpdmVEYXRlKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5ZZWFyKSB7XG4gICAgICAgICAgICB0aGlzLm1vbnRoc1ZpZXcub25LZXlkb3duRW50ZXIoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3LkRlY2FkZSkge1xuICAgICAgICAgICAgdGhpcy5kYWNhZGVWaWV3Lm9uS2V5ZG93bkVudGVyKGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubW9udGhWaWV3cy5mb3JFYWNoKHZpZXcgPT4gdmlldy5jbGVhclByZXZpZXdSYW5nZSgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uSG9tZShldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuTW9udGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGVzID0gdGhpcy5tb250aFZpZXdzLnRvQXJyYXkoKVxuICAgICAgICAgICAgICAgIC5mbGF0TWFwKCh2aWV3KSA9PiB2aWV3LmRhdGVzLnRvQXJyYXkoKSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChkKSA9PiBkLmlzQ3VycmVudE1vbnRoICYmIGQuaXNGb2N1c2FibGUpO1xuXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSBkYXRlcy5hdCgwKS5kYXRlLm5hdGl2ZTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5ZZWFyKSB7XG4gICAgICAgICAgICB0aGlzLm1vbnRoc1ZpZXcub25LZXlkb3duSG9tZShldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuRGVjYWRlKSB7XG4gICAgICAgICAgICB0aGlzLmRhY2FkZVZpZXcub25LZXlkb3duSG9tZShldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRW5kKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5Nb250aCkge1xuICAgICAgICAgICAgY29uc3QgZGF0ZXMgPSB0aGlzLm1vbnRoVmlld3MudG9BcnJheSgpXG4gICAgICAgICAgICAgICAgLmZsYXRNYXAoKHZpZXcpID0+IHZpZXcuZGF0ZXMudG9BcnJheSgpKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGQpID0+IGQuaXNDdXJyZW50TW9udGggJiYgZC5pc0ZvY3VzYWJsZSk7XG5cbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IGRhdGVzLmF0KC0xKS5kYXRlLm5hdGl2ZTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5ZZWFyKSB7XG4gICAgICAgICAgICB0aGlzLm1vbnRoc1ZpZXcub25LZXlkb3duRW5kKGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5EZWNhZGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGFjYWRlVmlldy5vbktleWRvd25FbmQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBsb2NhbGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vbnRoIGluIHRoZSBtb250aCB2aWV3IGlmIGVuYWJsZWQsXG5cdCAqIG90aGVyd2lzZSByZXR1cm5zIHRoZSBkZWZhdWx0IGBEYXRlLmdldE1vbnRoKClgIHZhbHVlLlxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIGZvcm1hdHRlZE1vbnRoKHZhbHVlOiBEYXRlKTogc3RyaW5nIHtcblx0XHRpZiAodGhpcy5mb3JtYXRWaWV3cy5tb250aCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0dGVyTW9udGguZm9ybWF0KHZhbHVlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYCR7IHZhbHVlLmdldE1vbnRoKCkgfWA7XG5cdH1cblxuXHQvKipcblx0ICogQ2hhbmdlIHRvIHByZXZpb3VzIHBhZ2Vcblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBwcmV2aW91c1BhZ2UoaXNLZXlkb3duVHJpZ2dlciA9IGZhbHNlKSB7XG5cdFx0aWYgKGlzS2V5ZG93blRyaWdnZXIgJiYgdGhpcy5wYWdlU2Nyb2xsRGlyZWN0aW9uID09PSBTY3JvbGxEaXJlY3Rpb24uTkVYVCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuICAgICAgICB0aGlzLmNoYW5nZVBhZ2UoaXNLZXlkb3duVHJpZ2dlciwgU2Nyb2xsRGlyZWN0aW9uLlBSRVYpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoYW5nZSB0byBuZXh0IHBhZ2Vcblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBuZXh0UGFnZShpc0tleWRvd25UcmlnZ2VyID0gZmFsc2UpIHtcblx0XHRpZiAoaXNLZXlkb3duVHJpZ2dlciAmJiB0aGlzLnBhZ2VTY3JvbGxEaXJlY3Rpb24gPT09IFNjcm9sbERpcmVjdGlvbi5QUkVWKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG4gICAgICAgIHRoaXMuY2hhbmdlUGFnZShpc0tleWRvd25UcmlnZ2VyLCBTY3JvbGxEaXJlY3Rpb24uTkVYVCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hhbmdlcyB0aGUgY3VycmVudCBwYWdlXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuICAgIHByb3RlY3RlZCBjaGFuZ2VQYWdlKGlzS2V5ZG93blRyaWdnZXIgPSBmYWxzZSwgZGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24pIHtcblx0XHR0aGlzLnByZXZpb3VzVmlld0RhdGUgPSB0aGlzLnZpZXdEYXRlO1xuXHRcdHRoaXMuaXNLZXlkb3duVHJpZ2dlciA9IGlzS2V5ZG93blRyaWdnZXI7XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLmFjdGl2ZVZpZXcpIHtcbiAgICAgICAgICAgIGNhc2UgXCJtb250aFwiOlxuICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFNjcm9sbERpcmVjdGlvbi5QUkVWKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMudmlld0RhdGUpLmFkZCgnbW9udGgnLCAtMSkubmF0aXZlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFNjcm9sbERpcmVjdGlvbi5ORVhUKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMudmlld0RhdGUpLmFkZCgnbW9udGgnLCAxKS5uYXRpdmU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3RGF0ZUNoYW5nZWQuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsdWU6IHRoaXMucHJldmlvdXNWaWV3RGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlOiB0aGlzLnZpZXdEYXRlXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcInllYXJcIjpcbiAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSBTY3JvbGxEaXJlY3Rpb24uUFJFVikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdEYXRlID0gQ2FsZW5kYXJEYXkuZnJvbSh0aGlzLnZpZXdEYXRlKS5hZGQoJ3llYXInLCAtMSkubmF0aXZlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFNjcm9sbERpcmVjdGlvbi5ORVhUKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMudmlld0RhdGUpLmFkZCgneWVhcicsIDEpLm5hdGl2ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcImRlY2FkZVwiOlxuICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFNjcm9sbERpcmVjdGlvbi5QUkVWKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMudmlld0RhdGUpLmFkZCgneWVhcicsIC0xNSkubmF0aXZlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFNjcm9sbERpcmVjdGlvbi5ORVhUKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMudmlld0RhdGUpLmFkZCgneWVhcicsIDE1KS5uYXRpdmU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBYWFg6IFdoeSBvbmx5IHdoZW4gaXQncyBub3QgdHJpZ2dlcmVkIGJ5IGtleWJvYXJkP1xuICAgICAgICBpZiAoIXRoaXMuaXNLZXlkb3duVHJpZ2dlcikgdGhpcy5yZXNldEFjdGl2ZURhdGUodGhpcy52aWV3RGF0ZSk7XG4gICAgfVxuXG5cdC8qKlxuXHQgKiBDb250aW5pb3VzIG5hdmlnYXRpb24gdGhyb3VnaCB0aGUgcHJldmlvdXMgcGFnZXNcblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBzdGFydFByZXZQYWdlU2Nyb2xsID0gKGlzS2V5ZG93blRyaWdnZXIgPSBmYWxzZSkgPT4ge1xuXHRcdHRoaXMuc3RhcnRQYWdlU2Nyb2xsJC5uZXh0KCk7XG5cdFx0dGhpcy5wYWdlU2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsRGlyZWN0aW9uLlBSRVY7XG5cdFx0dGhpcy5wcmV2aW91c1BhZ2UoaXNLZXlkb3duVHJpZ2dlcik7XG5cdH1cblxuXHQvKipcblx0ICogQ29udGluaW91cyBuYXZpZ2F0aW9uIHRocm91Z2ggdGhlIG5leHQgcGFnZXNcblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBzdGFydE5leHRQYWdlU2Nyb2xsID0gKGlzS2V5ZG93blRyaWdnZXIgPSBmYWxzZSkgPT4ge1xuXHRcdHRoaXMuc3RhcnRQYWdlU2Nyb2xsJC5uZXh0KCk7XG5cdFx0dGhpcy5wYWdlU2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsRGlyZWN0aW9uLk5FWFQ7XG5cdFx0dGhpcy5uZXh0UGFnZShpc0tleWRvd25UcmlnZ2VyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTdG9wIGNvbnRpbnVvdXMgbmF2aWdhdGlvblxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIHN0b3BQYWdlU2Nyb2xsID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG5cdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cblx0XHR0aGlzLnN0b3BQYWdlU2Nyb2xsJC5uZXh0KHRydWUpO1xuXHRcdHRoaXMuc3RvcFBhZ2VTY3JvbGwkLmNvbXBsZXRlKCk7XG5cblx0XHRpZiAodGhpcy5wbGF0Zm9ybS5pc0FjdGl2YXRpb25LZXkoZXZlbnQpKSB7XG5cdFx0XHR0aGlzLnJlc2V0QWN0aXZlRGF0ZSh0aGlzLnZpZXdEYXRlKTtcblx0XHR9XG5cblx0XHR0aGlzLnBhZ2VTY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxEaXJlY3Rpb24uTk9ORTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIG9uQWN0aXZlVmlld0RlY2FkZShldmVudDogTW91c2VFdmVudCwgZGF0ZTogRGF0ZSwgYWN0aXZlVmlld0lkeDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRzdXBlci5hY3RpdmVWaWV3RGVjYWRlKGFjdGl2ZVZpZXdJZHgpO1xuICAgICAgICB0aGlzLnZpZXdEYXRlID0gZGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIG9uQWN0aXZlVmlld0RlY2FkZUtCKGRhdGU6IERhdGUsIGV2ZW50OiBLZXlib2FyZEV2ZW50LCBhY3RpdmVWaWV3SWR4OiBudW1iZXIpIHtcblx0XHRzdXBlci5hY3RpdmVWaWV3RGVjYWRlS0IoZXZlbnQsIGFjdGl2ZVZpZXdJZHgpO1xuXG5cdFx0aWYgKHRoaXMucGxhdGZvcm0uaXNBY3RpdmF0aW9uS2V5KGV2ZW50KSkge1xuICAgICAgICAgICAgdGhpcy52aWV3RGF0ZSA9IGRhdGU7XG4gICAgICAgICAgICB0aGlzLndyYXBwZXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cbiAgICBwdWJsaWMgb25ZZWFyc1ZpZXdDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWQgPyBldmVudC5jb21wb3NlZFBhdGgoKSA6IFtldmVudC50YXJnZXRdO1xuICAgICAgICBjb25zdCB5ZWFycyA9IHRoaXMuZGFjYWRlVmlldy52aWV3SXRlbXMudG9BcnJheSgpO1xuICAgICAgICBjb25zdCB2YWxpZFRhcmdldCA9IHllYXJzLnNvbWUoeWVhciA9PiBwYXRoLmluY2x1ZGVzKHllYXIubmF0aXZlRWxlbWVudCkpO1xuXG4gICAgICAgIGlmICh2YWxpZFRhcmdldCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gSWd4Q2FsZW5kYXJWaWV3LlllYXI7XG4gICAgICAgIH1cbiAgICB9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuICAgIHB1YmxpYyBvblllYXJzVmlld0tleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMucGxhdGZvcm0uaXNBY3RpdmF0aW9uS2V5KGV2ZW50KSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gSWd4Q2FsZW5kYXJWaWV3LlllYXI7XG4gICAgICAgIH1cbiAgICB9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwcm90ZWN0ZWQgZ2V0Rm9ybWF0dGVkRGF0ZSgpOiB7IHdlZWtkYXk6IHN0cmluZzsgbW9udGhkYXk6IHN0cmluZyB9IHtcblx0XHRjb25zdCBkYXRlID0gdGhpcy5oZWFkZXJEYXRlO1xuICAgICAgICBjb25zdCBtb250aEZvcm1hdHRlciA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMubG9jYWxlLCB7IG1vbnRoOiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJyB9KVxuICAgICAgICBjb25zdCBkYXlGb3JtYXR0ZXIgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSwgeyB3ZWVrZGF5OiAnc2hvcnQnIH0pXG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0bW9udGhkYXk6IG1vbnRoRm9ybWF0dGVyLmZvcm1hdChkYXRlKSxcblx0XHRcdHdlZWtkYXk6IGRheUZvcm1hdHRlci5mb3JtYXQoZGF0ZSksXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHJvdGVjdGVkIGdldEZvcm1hdHRlZFJhbmdlKCk6IHsgc3RhcnQ6IHN0cmluZzsgZW5kOiBzdHJpbmcgfSB7XG5cdFx0Y29uc3QgZGF0ZXMgPSB0aGlzLnNlbGVjdGVkRGF0ZXMgYXMgRGF0ZVtdO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHN0YXJ0OiB0aGlzLmZvcm1hdHRlclJhbmdlZGF5LmZvcm1hdChkYXRlcy5hdCgwKSksXG5cdFx0XHRlbmQ6IHRoaXMuZm9ybWF0dGVyUmFuZ2VkYXkuZm9ybWF0KGRhdGVzLmF0KC0xKSlcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuICAgIHByb3RlY3RlZCBnZXQgdmlld0RhdGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb250aFZpZXdzLnRvQXJyYXkoKVxuICAgICAgICAgICAgLmZsYXRNYXAodmlldyA9PiB2aWV3LmRhdGVzLnRvQXJyYXkoKSlcbiAgICAgICAgICAgIC5maWx0ZXIoZCA9PiBkLmlzQ3VycmVudE1vbnRoKTtcbiAgICB9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgaW52b2tlZCBvbiBkYXRlIHNlbGVjdGlvblxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHJvdGVjdGVkIGhhbmRsZURhdGVTZWxlY3Rpb24oZGF0ZTogRGF0ZSkge1xuICAgICAgICBjb25zdCBvdXRPZlJhbmdlID0gIXRoaXMudmlld0RhdGVzLnNvbWUoZCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZC5kYXRlLmVxdWFsVG8oZGF0ZSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKG91dE9mUmFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBkYXRlO1xuICAgICAgICB9XG5cblx0XHR0aGlzLnNlbGVjdERhdGUoZGF0ZSk7XG5cbiAgICAgICAgLy8ga2VlcCB2aWV3cyBpbiBzeW5jXG5cdFx0dGhpcy5tb250aFZpZXdzLmZvckVhY2goKG0pID0+IHtcblx0XHRcdG0uc2hpZnRLZXkgPSB0aGlzLnNoaWZ0S2V5O1xuICAgICAgICAgICAgbS5zZWxlY3RlZERhdGVzID0gdGhpcy5zZWxlY3RlZERhdGVzO1xuICAgICAgICAgICAgbS5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0fSk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uICE9PSAnc2luZ2xlJykge1xuXHRcdCAgICB0aGlzLnNlbGVjdGVkLmVtaXQodGhpcy5zZWxlY3RlZERhdGVzKTtcbiAgICAgICAgfSBlbHNlIHtcblx0XHQgICAgdGhpcy5zZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlcy5hdCgwKSk7XG4gICAgICAgIH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlbmFsXG5cdCAqL1xuXHRwdWJsaWMgY2hhbmdlTW9udGgoZGF0ZTogRGF0ZSkge1xuXHRcdHRoaXMucHJldmlvdXNWaWV3RGF0ZSA9IHRoaXMudmlld0RhdGU7XG4gICAgICAgIHRoaXMudmlld0RhdGUgPSBDYWxlbmRhckRheS5mcm9tKGRhdGUpLmFkZCgnbW9udGgnLCAtdGhpcy5hY3RpdmVWaWV3SWR4KS5uYXRpdmU7XG5cdFx0dGhpcy5hY3RpdmVWaWV3ID0gSWd4Q2FsZW5kYXJWaWV3Lk1vbnRoO1xuICAgICAgICB0aGlzLnJlc2V0QWN0aXZlRGF0ZShkYXRlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlbmFsXG5cdCAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBjaGFuZ2VZZWFyKGRhdGU6IERhdGUpIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c1ZpZXdEYXRlID0gdGhpcy52aWV3RGF0ZTtcbiAgICAgICAgdGhpcy52aWV3RGF0ZSA9IENhbGVuZGFyRGF5LmZyb20oZGF0ZSkuYWRkKCdtb250aCcsIC10aGlzLmFjdGl2ZVZpZXdJZHgpLm5hdGl2ZTtcblx0XHR0aGlzLmFjdGl2ZVZpZXcgPSBJZ3hDYWxlbmRhclZpZXcuWWVhcjtcbiAgICB9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVuYWxcblx0ICovXG5cdHB1YmxpYyB1cGRhdGVZZWFyKGRhdGU6IERhdGUpIHtcblx0XHR0aGlzLnByZXZpb3VzVmlld0RhdGUgPSB0aGlzLnZpZXdEYXRlO1xuICAgICAgICB0aGlzLnZpZXdEYXRlID0gQ2FsZW5kYXJEYXkuZnJvbShkYXRlKS5hZGQoJ3llYXInLCAtdGhpcy5hY3RpdmVWaWV3SWR4KS5uYXRpdmU7XG5cdH1cblxuICAgIHB1YmxpYyB1cGRhdGVBY3RpdmVEZXNjZW5kYW50KGRhdGU6IERhdGUpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50ID0gZGF0ZTtcbiAgICB9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgb25BY3RpdmVWaWV3WWVhcihldmVudDogTW91c2VFdmVudCwgZGF0ZTogRGF0ZSwgYWN0aXZlVmlld0lkeDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHR0aGlzLmFjdGl2ZVZpZXcgPSBJZ3hDYWxlbmRhclZpZXcuWWVhcjtcblx0XHR0aGlzLmFjdGl2ZVZpZXdJZHggPSBhY3RpdmVWaWV3SWR4O1xuICAgICAgICB0aGlzLnZpZXdEYXRlID0gZGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIG9uQWN0aXZlVmlld1llYXJLQihkYXRlOiBEYXRlLCBldmVudDogS2V5Ym9hcmRFdmVudCwgYWN0aXZlVmlld0lkeDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG5cdFx0aWYgKHRoaXMucGxhdGZvcm0uaXNBY3RpdmF0aW9uS2V5KGV2ZW50KSkge1xuXHRcdCAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gSWd4Q2FsZW5kYXJWaWV3LlllYXI7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVZpZXdJZHggPSBhY3RpdmVWaWV3SWR4O1xuICAgICAgICAgICAgdGhpcy52aWV3RGF0ZSA9IGRhdGU7XG5cbiAgICAgICAgICAgIHRoaXMud3JhcHBlci5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERlc2VsZWN0cyBkYXRlKHMpIChiYXNlZCBvbiB0aGUgc2VsZWN0aW9uIHR5cGUpLlxuXHQgKlxuXHQgKiBAZXhhbXBsZVxuXHQgKiBgYGB0eXBlc2NyaXB0XG5cdCAqICB0aGlzLmNhbGVuZGFyLmRlc2VsZWN0RGF0ZShuZXcgRGF0ZShgMjAxOC0wNi0xMmApKTtcblx0ICogYGBgYFxuXHQgKi9cblx0cHVibGljIG92ZXJyaWRlIGRlc2VsZWN0RGF0ZSh2YWx1ZT86IERhdGUgfCBEYXRlW10gfCBzdHJpbmcpIHtcblx0XHRzdXBlci5kZXNlbGVjdERhdGUodmFsdWUpO1xuXG5cdFx0dGhpcy5tb250aFZpZXdzLmZvckVhY2goKG0pID0+IHtcblx0XHRcdG0uc2VsZWN0ZWREYXRlcyA9IHRoaXMuc2VsZWN0ZWREYXRlcztcblx0XHRcdG0ucmFuZ2VTdGFydGVkID0gZmFsc2U7XG4gICAgICAgICAgICBtLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodGhpcy5zZWxlY3RlZERhdGVzKTtcblx0fVxuXG5cblx0LyoqXG5cdCAqIEdldHRlciBmb3IgdGhlIGNvbnRleHQgb2JqZWN0IGluc2lkZSB0aGUgY2FsZW5kYXIgdGVtcGxhdGVzLlxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIGdldENvbnRleHQoaTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMudmlld0RhdGUpLmFkZCgnbW9udGgnLCBpKS5uYXRpdmU7XG5cdFx0cmV0dXJuIHRoaXMuZ2VuZXJhdGVDb250ZXh0KGRhdGUsIGkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuICAgIC8vIFRPRE86IFNlZSBpZiB0aGlzIGNhbiBiZSBpbmNvcnBvcmF0ZWQgaW4gdGhlIERheXNWaWV3IGRpcmVjdGx5XG5cdHB1YmxpYyByZXNldEFjdGl2ZURhdGUoZGF0ZTogRGF0ZSkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMuYWN0aXZlRGF0ZSkuc2V0KHtcbiAgICAgICAgICAgIG1vbnRoOiBkYXRlLmdldE1vbnRoKCksXG4gICAgICAgICAgICB5ZWFyOiBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG91dE9mUmFuZ2UgPVxuICAgICAgICAgICAgIWFyZVNhbWVNb250aChkYXRlLCB0YXJnZXQpIHx8XG4gICAgICAgICAgICBpc0RhdGVJblJhbmdlcyh0YXJnZXQsIHRoaXMuZGlzYWJsZWREYXRlcyk7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gb3V0T2ZSYW5nZSA/IGRhdGUgOiB0YXJnZXQubmF0aXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMua2V5Ym9hcmROYXZpZ2F0aW9uLmRldGFjaEtleWJvYXJkSGFuZGxlcnMoKTtcbiAgICAgICAgdGhpcy53cmFwcGVyPy5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5vbldyYXBwZXJGb2N1cyk7XG4gICAgICAgIHRoaXMud3JhcHBlcj8ubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5vbldyYXBwZXJCbHVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIGdldFByZXZNb250aChkYXRlOiBEYXRlKTogRGF0ZSB7XG5cdFx0cmV0dXJuIENhbGVuZGFyRGF5LmZyb20oZGF0ZSkuYWRkKCdtb250aCcsIC0xKS5uYXRpdmU7XG5cdH1cblxuXHQvKipcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBnZXROZXh0TW9udGgoZGF0ZTogRGF0ZSwgdmlld0luZGV4OiBudW1iZXIpOiBEYXRlIHtcbiAgICAgICAgcmV0dXJuIENhbGVuZGFyRGF5LmZyb20oZGF0ZSkuYWRkKCdtb250aCcsIHZpZXdJbmRleCkubmF0aXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhlbHBlciBtZXRob2QgYnVpbGRpbmcgYW5kIHJldHVybmluZyB0aGUgY29udGV4dCBvYmplY3QgaW5zaWRlIHRoZSBjYWxlbmRhciB0ZW1wbGF0ZXMuXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwcml2YXRlIGdlbmVyYXRlQ29udGV4dCh2YWx1ZTogRGF0ZSB8IERhdGVbXSwgaT86IG51bWJlcikge1xuICAgICAgICBjb25zdCBjb25zdHJ1Y3QgPSAoZGF0ZTogRGF0ZSwgaW5kZXg6IG51bWJlcikgPT4gKHtcbiAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICAuLi5mb3JtYXRUb1BhcnRzKGRhdGUsIHRoaXMubG9jYWxlLCB0aGlzLmZvcm1hdE9wdGlvbnMsIFtcbiAgICAgICAgICAgICAgICBcImVyYVwiLFxuICAgICAgICAgICAgICAgIFwieWVhclwiLFxuICAgICAgICAgICAgICAgIFwibW9udGhcIixcbiAgICAgICAgICAgICAgICBcImRheVwiLFxuICAgICAgICAgICAgICAgIFwid2Vla2RheVwiLFxuICAgICAgICAgICAgXSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGZvcm1hdE9iamVjdCA9IEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgICA/IHZhbHVlLm1hcCgoZGF0ZSwgaW5kZXgpID0+IGNvbnN0cnVjdChkYXRlLCBpbmRleCkpXG4gICAgICAgICAgICA6IGNvbnN0cnVjdCh2YWx1ZSwgaSk7XG5cbiAgICAgICAgcmV0dXJuIHsgJGltcGxpY2l0OiBmb3JtYXRPYmplY3QgfTtcblx0fVxufVxuIiwiPG5nLXRlbXBsYXRlIGxldC1yZXN1bHQgI2RlZmF1bHRIZWFkZXJUaXRsZT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uID09PSAnc2luZ2xlJ1wiPlxuICAgICAgICA8c3Bhbj57eyByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX3NlbGVjdF9kYXRlIH19PC9zcGFuPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3Rpb24gPT09ICdyYW5nZSdcIj5cbiAgICAgICAgPHNwYW4+e3sgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9yYW5nZV9wbGFjZWhvbGRlciB9fTwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSBsZXQtcmVzdWx0ICNkZWZhdWx0SGVhZGVyRGF0ZT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uID09PSAnc2luZ2xlJ1wiPlxuICAgICAgICA8c3Bhbj57eyBnZXRGb3JtYXR0ZWREYXRlKCkud2Vla2RheSB9fSwmbmJzcDs8L3NwYW4+XG4gICAgICAgIDxzcGFuPnt7IGdldEZvcm1hdHRlZERhdGUoKS5tb250aGRheSB9fTwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uID09PSAncmFuZ2UnXCI+XG4gICAgICAgIDxzcGFuPnt7IHNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAwID8gJ1N0YXJ0JyA6IGdldEZvcm1hdHRlZFJhbmdlKCkuc3RhcnR9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4+Jm5ic3A7LSZuYnNwOzwvc3Bhbj5cbiAgICAgICAgPHNwYW4+e3sgc2VsZWN0ZWREYXRlcy5sZW5ndGggPD0gMSA/ICdFbmQnIDogZ2V0Rm9ybWF0dGVkUmFuZ2UoKS5lbmR9fTwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gTW9udGggLS0+XG48bmctdGVtcGxhdGUgI2RlZmF1bHRNb250aCBsZXQtb2JqPlxuICAgIDxzcGFuXG4gICAgICAgICNtb250aHNCdG5cbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKG9iai5kYXRlIHwgZGF0ZTogJ0xMTEwnKSArICcsICcgKyByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX3NlbGVjdF9tb250aFwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uQWN0aXZlVmlld1llYXJLQihvYmouZGF0ZSwgJGV2ZW50LCBvYmouaW5kZXgpXCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJvbkFjdGl2ZVZpZXdZZWFyKCRldmVudCwgb2JqLmRhdGUsIG9iai5pbmRleClcIlxuICAgICAgICBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX2RhdGVcIj5cbiAgICAgICAge3sgZm9ybWF0dGVkTW9udGgob2JqLmRhdGUpIH19XG4gICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBZZWFyIC0tPlxuPG5nLXRlbXBsYXRlICNkZWZhdWx0WWVhciBsZXQtb2JqPlxuICAgIDxzcGFuICpuZ0lmPVwiYWN0aXZlVmlldyA9PT0gJ3llYXInXCIgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2FyaWEtb2ZmLXNjcmVlblwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPnt7IGZvcm1hdHRlZFllYXIob2JqLmRhdGUpIH19PC9zcGFuPlxuICAgIDxzcGFuXG4gICAgICAgICN5ZWFyc0J0blxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIob2JqLmRhdGUgfCBkYXRlOiAneXl5eScpICsgJywgJyArIHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfc2VsZWN0X3llYXJcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbkFjdGl2ZVZpZXdEZWNhZGVLQihvYmouZGF0ZSwgJGV2ZW50LCBvYmouaW5kZXgpXCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJvbkFjdGl2ZVZpZXdEZWNhZGUoJGV2ZW50LCBvYmouZGF0ZSwgb2JqLmluZGV4KVwiXG4gICAgICAgIGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlcl9fZGF0ZVwiPlxuICAgICAgICB7eyBmb3JtYXR0ZWRZZWFyKG9iai5kYXRlKSB9fVxuICAgIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gTW9udGggWWVhciAtLT5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdE1vbnRoWWVhciBsZXQtb2JqIGxldC1yZXN1bHQ+XG4gICAgPHNwYW4gKm5nSWY9XCJtb250aHNWaWV3TnVtYmVyIDwgMiB8fCBvYmouaW5kZXggPCAxXCIgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2FyaWEtb2ZmLXNjcmVlblwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICAgICAge3sgbW9udGhzVmlld051bWJlciA+IDEgP1xuICAgICAgICAocmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9maXJzdF9waWNrZXJfb2YucmVwbGFjZSgnezB9JywgbW9udGhzVmlld051bWJlci50b1N0cmluZygpKSArICcgJyArXG4gICAgICAgICAgICAob2JqLmRhdGUgfCBkYXRlOiAnTExMTCB5eXl5JykpIDpcbiAgICAgICAgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9zZWxlY3RlZF9tb250aF9pcyArIChvYmouZGF0ZSB8IGRhdGU6ICdMTExMIHl5eXknKX19XG4gICAgPC9zcGFuPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZWZhdWx0TW9udGg7IGNvbnRleHQ6IHskaW1wbGljaXQ6IG9ian1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGVmYXVsdFllYXI7IGNvbnRleHQ6IHskaW1wbGljaXQ6IG9ian1cIj48L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gRGVjYWRlIC0tPlxuPG5nLXRlbXBsYXRlICNkZWZhdWx0RGVjYWRlPlxuICAgIDxzcGFuPnt7IGdldERlY2FkZVJhbmdlKCkuc3RhcnQgfX0gLSB7eyBnZXREZWNhZGVSYW5nZSgpLmVuZCB9fTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gUHJldmlvdXMgYXJyb3cgaWNvbiAtLT5cbjxuZy10ZW1wbGF0ZSAjcHJldkFycm93IGxldC1vYmo+XG4gICAgPGlneC1pY29uIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGZhbWlseT1cImRlZmF1bHRcIiBuYW1lPVwiYXJyb3dfcHJldlwiPjwvaWd4LWljb24+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIE5leHQgYXJyb3cgaWNvbiAtLT5cbjxuZy10ZW1wbGF0ZSAjbmV4dEFycm93IGxldC1vYmo+XG4gICAgPGlneC1pY29uIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGZhbWlseT1cImRlZmF1bHRcIiBuYW1lPVwiYXJyb3dfbmV4dFwiPjwvaWd4LWljb24+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFByZXZpb3VzIHBpY2tlciBidXR0b24gLS0+XG48bmctdGVtcGxhdGUgI3ByZXZQYWdlQnV0dG9uIGxldC1vYmo+XG4gICAgPGRpdlxuICAgICAgICAjcHJldlBhZ2VCdG5cbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgY2xhc3M9XCJpZ3gtY2FsZW5kYXItcGlja2VyX19wcmV2XCJcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicHJldk5hdkxhYmVsKChnZXRQcmV2TW9udGgodmlld0RhdGUpIHwgZGF0ZTogJ0xMTEwnKSlcIlxuICAgICAgICBkYXRhLWFjdGlvbj1cInByZXZcIlxuICAgICAgICBpZ3hDYWxlbmRhclNjcm9sbFBhZ2VcbiAgICAgICAgW3N0YXJ0U2Nyb2xsXT1cInN0YXJ0UHJldlBhZ2VTY3JvbGxcIlxuICAgICAgICBbc3RvcFNjcm9sbF09XCJzdG9wUGFnZVNjcm9sbFwiXG4gICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJldkFycm93XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIE5leHQgcGlja2VyIGJ1dHRvbiAtLT5cbjxuZy10ZW1wbGF0ZSAjbmV4dFBhZ2VCdXR0b24gbGV0LW9iaj5cbiAgICA8ZGl2XG4gICAgICAgICNuZXh0UGFnZUJ0blxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX25leHRcIlxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJuZXh0TmF2TGFiZWwoKGdldE5leHRNb250aCh2aWV3RGF0ZSwgbW9udGhzVmlld051bWJlcikgfCBkYXRlOiAnTExMTCcpKVwiXG4gICAgICAgIGRhdGEtYWN0aW9uPVwibmV4dFwiXG4gICAgICAgIGlneENhbGVuZGFyU2Nyb2xsUGFnZVxuICAgICAgICBbc3RhcnRTY3JvbGxdPVwic3RhcnROZXh0UGFnZVNjcm9sbFwiXG4gICAgICAgIFtzdG9wU2Nyb2xsXT1cInN0b3BQYWdlU2Nyb2xsXCJcbiAgICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJuZXh0QXJyb3dcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gUElDS0VSIElOIERBWVMgLS0+XG48bmctdGVtcGxhdGUgI2NhbGVuZGFyRGF5c1BpY2tlciBsZXQtaT5cbiAgICA8c2VjdGlvbiBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJcIiBbc3R5bGUuLS1jYWxlbmRhci1yb3ctc3RhcnRdPVwiMSArICgyICogaSlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX2RhdGVzXCIgW2F0dHIuZGF0YS1tb250aF09XCJpIHwgSWd4R2V0Vmlld0RhdGU6dmlld0RhdGU6ZmFsc2VcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdWJoZWFkZXJUZW1wbGF0ZSA/IHN1YmhlYWRlclRlbXBsYXRlIDogZGVmYXVsdE1vbnRoWWVhcjsgY29udGV4dDogZ2V0Q29udGV4dChpKVwiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX25hdlwiXG4gICAgICAgICAgICAqbmdJZj1cInRoaXMub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJyA/IGkgPT09IG1vbnRoc1ZpZXdOdW1iZXIgLSAxIDogaSA9PT0gMFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwcmV2UGFnZUJ1dHRvblwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5leHRQYWdlQnV0dG9uXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvc2VjdGlvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gUElDS0VSIElOIE1PTlRIUyAtLT5cbjxuZy10ZW1wbGF0ZSAjY2FsZW5kYXJZZWFyUGlja2VyPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlcl9fZGF0ZXNcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInN1YmhlYWRlclRlbXBsYXRlID8gc3ViaGVhZGVyVGVtcGxhdGUgOiBkZWZhdWx0WWVhcjsgY29udGV4dDogZ2V0Q29udGV4dCgwKVwiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlcl9fbmF2XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJldlBhZ2VCdXR0b25cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJuZXh0UGFnZUJ1dHRvblwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFBJQ0tFUiBJTiBZRUFSUyAtLT5cbjxuZy10ZW1wbGF0ZSAjY2FsZW5kYXJEZWNhZGVQaWNrZXI+XG4gICAgPHNlY3Rpb24gY2xhc3M9XCJpZ3gtY2FsZW5kYXItcGlja2VyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtY2FsZW5kYXItcGlja2VyX19kYXRlc1wiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInN1YmhlYWRlclRlbXBsYXRlID8gc3ViaGVhZGVyVGVtcGxhdGUgOiBkZWZhdWx0RGVjYWRlO1wiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlcl9fbmF2XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJldlBhZ2VCdXR0b25cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJuZXh0UGFnZUJ1dHRvblwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG48L25nLXRlbXBsYXRlPlxuXG5cbjxoZWFkZXJcbiAgICBhcmlhLWxhYmVsbGVkYnk9XCJpZ3gtYXJpYS1jYWxlbmRhci10aXRsZS1tb250aCBpZ3gtYXJpYS1jYWxlbmRhci10aXRsZS15ZWFyXCJcbiAgICBjbGFzcz1cImlneC1jYWxlbmRhcl9faGVhZGVyXCJcbiAgICAqbmdJZj1cInNlbGVjdGlvbiA9PT0gJ3NpbmdsZScgJiYgaGFzSGVhZGVyIHx8IHNlbGVjdGlvbiA9PT0gJ3JhbmdlJyAmJiBoYXNIZWFkZXJcIj5cbiAgICA8aDUgaWQ9XCJpZ3gtYXJpYS1jYWxlbmRhci10aXRsZS15ZWFyXCIgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2hlYWRlci15ZWFyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJUaXRsZVRlbXBsYXRlID8/IGRlZmF1bHRIZWFkZXJUaXRsZTsgY29udGV4dDogaGVhZGVyQ29udGV4dFwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvaDU+XG4gICAgPGgyIGlkPVwiaWd4LWFyaWEtY2FsZW5kYXItdGl0bGUtbW9udGhcIiBjbGFzcz1cImlneC1jYWxlbmRhcl9faGVhZGVyLWRhdGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclRlbXBsYXRlID8gaGVhZGVyVGVtcGxhdGUgOiBkZWZhdWx0SGVhZGVyRGF0ZTsgY29udGV4dDogaGVhZGVyQ29udGV4dFwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2gyPlxuPC9oZWFkZXI+XG5cblxuPGRpdlxuICAgICN3cmFwcGVyXG4gICAgW3N0eWxlLi0tY2FsZW5kYXItbW9udGhzXT1cIm1vbnRoc1ZpZXdOdW1iZXJcIlxuICAgIFt0YWJJbmRleF09XCIwXCJcbiAgICBjbGFzcz1cImlneC1jYWxlbmRhcl9fd3JhcHBlclwiXG4gICAgW2NsYXNzLmlneC1jYWxlbmRhcl9fd3JhcHBlci0tdmVydGljYWxdPVwib3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCdcIlxuICAgIFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCJhY3RpdmVEZXNjZW5kYW50XCJcbiAgICBbYXR0ci5hcmlhLW11bHRpc2VsZWN0YWJsZV09XCJzZWxlY3Rpb24gIT09ICdzaW5nbGUnXCJcbiAgICBhcmlhLWxhYmVsbGVkYnk9XCJjYWxlbmRhci1kZXNjXCJcbiAgICByb2xlPVwiZ3JpZFwiXG4gICAgPlxuICAgIDxjYXB0aW9uIGlkPVwiY2FsZW5kYXItZGVzY1wiIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cImlneC1jYWxlbmRhcl9fYXJpYS1vZmYtc2NyZWVuXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3Rpb24gPT09ICdtdWx0aSdcIj5cbiAgICAgICAgICAgIHt7IG1vbnRoc1ZpZXdOdW1iZXIgJiYgbW9udGhzVmlld051bWJlciA+IDEgP1xuICAgICAgICAgICAgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9tdWx0aV9zZWxlY3Rpb24ucmVwbGFjZSgnezB9JywgbW9udGhzVmlld051bWJlci50b1N0cmluZygpKSA6XG4gICAgICAgICAgICByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX3Npbmd1bGFyX211bHRpX3NlbGVjdGlvbn19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uID09PSAncmFuZ2UnXCI+XG4gICAgICAgICAgICB7eyBtb250aHNWaWV3TnVtYmVyICYmIG1vbnRoc1ZpZXdOdW1iZXIgPiAxID9cbiAgICAgICAgICAgIHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfcmFuZ2Vfc2VsZWN0aW9uLnJlcGxhY2UoJ3swfScsIG1vbnRoc1ZpZXdOdW1iZXIudG9TdHJpbmcoKSkgOlxuICAgICAgICAgICAgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9zaW5ndWxhcl9yYW5nZV9zZWxlY3Rpb259fVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGlvbiA9PT0gJ3NpbmdsZSdcIj5cbiAgICAgICAgICAgIHt7IG1vbnRoc1ZpZXdOdW1iZXIgJiYgbW9udGhzVmlld051bWJlciA+IDEgP1xuICAgICAgICAgICAgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9zaW5nbGVfc2VsZWN0aW9uLnJlcGxhY2UoJ3swfScsIG1vbnRoc1ZpZXdOdW1iZXIudG9TdHJpbmcoKSkgOlxuICAgICAgICAgICAgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9zaW5ndWxhcl9zaW5nbGVfc2VsZWN0aW9ufX1cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9jYXB0aW9uPlxuICAgIDxzZWN0aW9uXG4gICAgICAgIGNsYXNzPVwiaWd4LWNhbGVuZGFyX19waWNrZXJzXCJcbiAgICAgICAgW2NsYXNzLmlneC1jYWxlbmRhcl9fcGlja2Vycy0tZGF5c109XCJpc0RlZmF1bHRWaWV3XCJcbiAgICAgICAgW2NsYXNzLmlneC1jYWxlbmRhcl9fcGlja2Vycy0tdmVydGljYWxdPVwib3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCdcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRGVmYXVsdFZpZXdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHZpZXcgb2YgbW9udGhzVmlld051bWJlciB8IElneE1vbnRoVmlld1Nsb3RzOyBpbmRleCBhcyBpXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNhbGVuZGFyRGF5c1BpY2tlcjsgY29udGV4dDogeyRpbXBsaWNpdDogaX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNZZWFyVmlld1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNhbGVuZGFyWWVhclBpY2tlclwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNEZWNhZGVWaWV3XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2FsZW5kYXJEZWNhZGVQaWNrZXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9zZWN0aW9uPlxuXG4gICAgPHNlY3Rpb24gY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2JvZHlcIiBbY2xhc3MuaWd4LWNhbGVuZGFyX19ib2R5LS12ZXJ0aWNhbF09XCJvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJ1wiIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRGVmYXVsdFZpZXdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHZpZXcgb2YgbW9udGhzVmlld051bWJlciB8IElneE1vbnRoVmlld1Nsb3RzOyBpbmRleCBhcyBpXCI+XG4gICAgICAgICAgICAgICAgPGlneC1kYXlzLXZpZXdcbiAgICAgICAgICAgICAgICAgICAgI2RheXNcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cInJvd2dyb3VwXCJcbiAgICAgICAgICAgICAgICAgICAgW3RhYkluZGV4XT1cIi0xXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGlvbl09XCJzZWxlY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICBbbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFsoYWN0aXZlRGF0ZSldPVwiYWN0aXZlRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFsocHJldmlld1JhbmdlRGF0ZSldPVwicHJldmlld1JhbmdlRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFt2aWV3RGF0ZV09XCJpIHwgSWd4R2V0Vmlld0RhdGU6IHZpZXdEYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW3dlZWtTdGFydF09XCJ3ZWVrU3RhcnRcIlxuICAgICAgICAgICAgICAgICAgICBbZm9ybWF0T3B0aW9uc109XCJmb3JtYXRPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1hdFZpZXdzXT1cImZvcm1hdFZpZXdzXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkRGF0ZXNdPVwiZGlzYWJsZWREYXRlc1wiXG4gICAgICAgICAgICAgICAgICAgIFtzcGVjaWFsRGF0ZXNdPVwic3BlY2lhbERhdGVzXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLi0tY2FsZW5kYXItcm93LXN0YXJ0XT1cIihpICsgMSkgKiAyXCJcbiAgICAgICAgICAgICAgICAgICAgW2hpZGVMZWFkaW5nRGF5c109XCJoaWRlT3V0c2lkZURheXMgfHwgaSAhPT0gMFwiXG4gICAgICAgICAgICAgICAgICAgIFtoaWRlVHJhaWxpbmdEYXlzXT1cImhpZGVPdXRzaWRlRGF5cyB8fCBpICE9PSBtb250aHNWaWV3TnVtYmVyIC0gMVwiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93V2Vla051bWJlcnNdPVwic2hvd1dlZWtOdW1iZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dBY3RpdmVEYXldPVwic2hvd0FjdGl2ZURheVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdGFuZGFsb25lXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgKHN3aXBlcmlnaHQpPVwicHJldmlvdXNQYWdlKClcIlxuICAgICAgICAgICAgICAgICAgICAoc3dpcGVsZWZ0KT1cIm5leHRQYWdlKClcIlxuICAgICAgICAgICAgICAgICAgICAoZGF0ZVNlbGVjdGVkKT1cImhhbmRsZURhdGVTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICAgICAgICAgICAgICA8L2lneC1kYXlzLXZpZXc+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzWWVhclZpZXdcIj5cbiAgICAgICAgICAgIDxpZ3gtbW9udGhzLXZpZXdcbiAgICAgICAgICAgICAgICAjbW9udGhzXG4gICAgICAgICAgICAgICAgcm9sZT1cInJvd2dyb3VwXCJcbiAgICAgICAgICAgICAgICBbdGFiSW5kZXhdPVwiLTFcIlxuICAgICAgICAgICAgICAgIFtkYXRlXT1cInZpZXdEYXRlXCJcbiAgICAgICAgICAgICAgICBbbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICAgICAgICAgICAgW2Zvcm1hdFZpZXddPVwiZm9ybWF0Vmlld3MubW9udGhcIlxuICAgICAgICAgICAgICAgIFttb250aEZvcm1hdF09XCJmb3JtYXRPcHRpb25zLm1vbnRoXCJcbiAgICAgICAgICAgICAgICBbc2hvd0FjdGl2ZV09XCJzaG93QWN0aXZlRGF5XCJcbiAgICAgICAgICAgICAgICBbc3RhbmRhbG9uZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgKHN3aXBlcmlnaHQpPVwicHJldmlvdXNQYWdlKClcIlxuICAgICAgICAgICAgICAgIChzd2lwZWxlZnQpPVwibmV4dFBhZ2UoKVwiXG4gICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2VkKT1cInVwZGF0ZVllYXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGFjdGl2ZURhdGVDaGFuZ2VkKT1cInVwZGF0ZUFjdGl2ZURlc2NlbmRhbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cImNoYW5nZU1vbnRoKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICAgICAgICAgIDwvaWd4LW1vbnRocy12aWV3PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNEZWNhZGVWaWV3XCI+XG4gICAgICAgICAgICA8aWd4LXllYXJzLXZpZXdcbiAgICAgICAgICAgICAgICAjZGVjYWRlXG4gICAgICAgICAgICAgICAgcm9sZT1cInJvd2dyb3VwXCJcbiAgICAgICAgICAgICAgICBbdGFiSW5kZXhdPVwiLTFcIlxuICAgICAgICAgICAgICAgIFtkYXRlXT1cInZpZXdEYXRlXCJcbiAgICAgICAgICAgICAgICBbbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICAgICAgICAgICAgW2Zvcm1hdFZpZXddPVwiZm9ybWF0Vmlld3MueWVhclwiXG4gICAgICAgICAgICAgICAgW3llYXJGb3JtYXRdPVwiZm9ybWF0T3B0aW9ucy55ZWFyXCJcbiAgICAgICAgICAgICAgICBbc2hvd0FjdGl2ZV09XCJzaG93QWN0aXZlRGF5XCJcbiAgICAgICAgICAgICAgICBbc3RhbmRhbG9uZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgKHN3aXBlcmlnaHQpPVwicHJldmlvdXNQYWdlKClcIlxuICAgICAgICAgICAgICAgIChzd2lwZWxlZnQpPVwibmV4dFBhZ2UoKVwiXG4gICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2VkKT1cInVwZGF0ZVllYXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGFjdGl2ZURhdGVDaGFuZ2VkKT1cInVwZGF0ZUFjdGl2ZURlc2NlbmRhbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cImNoYW5nZVllYXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiPlxuICAgICAgICAgICAgPC9pZ3gteWVhcnMtdmlldz5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9zZWN0aW9uPlxuPC9kaXY+XG4iXX0=
|
|
897
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFDTCxTQUFTLEVBR1QsWUFBWSxFQUdaLGdCQUFnQixFQUNiLFlBQVksR0FDZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRCxPQUFPLEVBQ04sa0NBQWtDLEVBQy9CLHVDQUF1QyxFQUMxQyxxQ0FBcUMsRUFDbEMsOEJBQThCLEdBQ2pDLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLGVBQWUsRUFBbUIsTUFBTSxZQUFZLENBQUM7QUFDOUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDN0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDMUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdkYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQUVoRSxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFFaEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFrQkgsTUFBTSxPQUFPLG9CQUFxQixTQUFRLHdCQUF3QjtJQWpCbEU7O1FBK0JDOzs7Ozs7Ozs7OztXQVdHO1FBR0ksT0FBRSxHQUFHLGdCQUFpQixPQUFPLEVBQUcsRUFBRSxDQUFDO1FBRXZDOzs7Ozs7OztXQVFHO1FBRUksY0FBUyxHQUFHLElBQUksQ0FBQztRQUV4Qjs7Ozs7Ozs7V0FRRztRQUVJLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFHakIsZ0JBQVcsR0FBOEIsWUFBWSxDQUFDO1FBR3RELHNCQUFpQixHQUE4QixZQUFZLENBQUM7UUF3Qm5FOzs7Ozs7O1dBT0c7UUFFSSxvQkFBZSxHQUFHLEtBQUssQ0FBQztRQWFsQzs7Ozs7V0FLRztRQUVJLGVBQVUsR0FBRyxJQUFJLENBQUM7UUEyTnpCOzs7V0FHRztRQUNJLGVBQVUsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQWdCN0M7Ozs7O1dBS0c7UUFDSSxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFFaEM7OztXQUdHO1FBQ0ssc0JBQWlCLEdBQUcsQ0FBQyxDQUFDO1FBMlY5Qjs7Ozs7V0FLRztRQUNJLHdCQUFtQixHQUFHLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxFQUFFLEVBQUU7WUFDekQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxtQkFBbUIsb0NBQXVCLENBQUM7WUFDaEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQTtRQUVEOzs7OztXQUtHO1FBQ0ksd0JBQW1CLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLEVBQUUsRUFBRTtZQUN6RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLG1CQUFtQixvQ0FBdUIsQ0FBQztZQUNoRCxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFBO1FBRUQ7Ozs7O1dBS0c7UUFDSSxtQkFBYyxHQUFHLENBQUMsS0FBb0IsRUFBRSxFQUFFO1lBQ2hELEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUV4QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBRWhDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDckMsQ0FBQztZQUVELElBQUksQ0FBQyxtQkFBbUIsb0NBQXVCLENBQUM7UUFDakQsQ0FBQyxDQUFBO0tBMFJEO0lBNThCQTs7Ozs7Ozs7T0FRRztJQUNILElBQ1csZ0JBQWdCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQy9CLENBQUM7SUFFRSxJQUFXLGdCQUFnQixDQUFDLEdBQVc7UUFDbkMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDVixPQUFPO1FBQ1gsQ0FBQztRQUVQLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLENBQUM7SUFDOUIsQ0FBQztJQWFEOzs7OztPQUtHO0lBQ0gsSUFDVyxrQkFBa0I7UUFDNUIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLEtBQUssVUFBVSxDQUFDO0lBQzlDLENBQUM7SUEwRUQ7Ozs7O09BS0c7SUFDSCxJQUFXLFVBQVU7UUFDcEIsT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLGVBQWUsQ0FBQyxJQUFJLENBQUM7SUFDakQsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsSUFBVyxtQkFBbUI7UUFDN0IsSUFBSSxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztZQUN2QyxPQUFPLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxRQUFRLENBQUM7UUFDbkQsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsSUFBVyxtQkFBbUIsQ0FBQyxTQUFjO1FBQzVDLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxTQUFTLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsSUFBVyxjQUFjO1FBQ3hCLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDbEMsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDO1FBQzlDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILElBQVcsY0FBYyxDQUFDLFNBQWM7UUFDdkMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLFNBQVMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILElBQVcsaUJBQWlCO1FBQzNCLElBQUksSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDckMsT0FBTyxJQUFJLENBQUMsMEJBQTBCLENBQUMsUUFBUSxDQUFDO1FBQ2pELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILElBQVcsaUJBQWlCLENBQUMsU0FBYztRQUMxQyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsU0FBUyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsSUFBVyxhQUFhO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsSUFBVyxPQUFPO1FBQ2pCLE1BQU0sSUFBSSxHQUFTLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDakMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILElBQVcsVUFBVTtRQUNwQixPQUFPLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQTJEWSxXQUFXLENBQUMsS0FBaUI7UUFDbkMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFJSjs7O09BR0c7SUFDQSxJQUFjLGFBQWEsQ0FBQyxLQUFjO1FBQ3RDLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQWMsYUFBYTtRQUN2QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQWMsZ0JBQWdCO1FBQzFCLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUM5QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckMsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDN0QsQ0FBQztJQUVELElBQWMsZ0JBQWdCLENBQUMsSUFBVTtRQUNyQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRyxlQUFlO1FBQ2YsSUFBSSxDQUFDLGtCQUFrQjthQUNsQixzQkFBc0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQzthQUMxQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7YUFDOUIsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDO2FBQ2xDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQzthQUNsQyxHQUFHLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUM7YUFDcEMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDO2FBQzFCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQzthQUN0QixHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7YUFDeEIsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDO2FBQ3RCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQzthQUNoQyxHQUFHLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUUxQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFpQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDeEcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBaUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRXRHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQ3RCLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQy9CLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDakMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUNYLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDN0IsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FDbEMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNmLFFBQVEsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQy9CO29CQUNJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDcEIsTUFBTTtnQkFDVjtvQkFDSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2hCLE1BQU07Z0JBQ1YsdUNBQTBCO2dCQUMxQjtvQkFDSSxNQUFNO1lBQ2QsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRVAsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN6QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXpCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDO2dCQUN0QixhQUFhLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtnQkFDcEMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRO2FBQzlCLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGNBQWMsQ0FBQyxNQUFrQjtRQUNyQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRU8sYUFBYSxDQUFDLE1BQWtCO1FBQ3BDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRU8sa0JBQWtCLENBQUMsS0FBb0IsRUFBRSxLQUFhO1FBQzFELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV2QixNQUFNLElBQUksR0FBRyxvQkFBb0IsQ0FDN0IsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQ2pDLEtBQUssRUFDTCxJQUFJLENBQUMsYUFBYSxDQUNyQixDQUFDO1FBRUYsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRTlCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDN0IsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUUxRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDaEIsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5RCxDQUFDO0lBQ0wsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEtBQW9CLEVBQUUsS0FBYTtRQUN4RCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdkIsTUFBTSxHQUFHLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLG1DQUFzQixDQUFDLGtDQUFxQixDQUFDO1FBRXBFLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxlQUFlLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM5RCxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQzFFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0IsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNoQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFlBQVksQ0FBQyxLQUFvQjtRQUNyQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVPLGNBQWMsQ0FBQyxLQUFvQjtRQUN2QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTyxTQUFTLENBQUMsS0FBb0I7UUFDbEMsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM3QixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsQ0FBQztJQUNMLENBQUM7SUFFTyxXQUFXLENBQUMsS0FBb0I7UUFDcEMsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0IsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlDLENBQUM7SUFDTCxDQUFDO0lBRU8sV0FBVyxDQUFDLEtBQW9CO1FBQ3BDLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0IsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlDLENBQUM7SUFDTCxDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQW9CO1FBQ3JDLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzdCLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLE9BQU8sQ0FBQyxLQUFvQjtRQUNoQyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM3QixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFTyxNQUFNLENBQUMsS0FBb0I7UUFDL0IsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM1QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRTtpQkFDbEMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUN2QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRXRELElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0IsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsQ0FBQztJQUNMLENBQUM7SUFFTyxLQUFLLENBQUMsS0FBb0I7UUFDOUIsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM1QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRTtpQkFDbEMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUN2QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRXRELElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDM0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM3QixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxDQUFDO0lBQ0wsQ0FBQztJQUVKOzs7Ozs7T0FNRztJQUNJLGNBQWMsQ0FBQyxLQUFXO1FBQ2hDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM1QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFFRCxPQUFPLEdBQUksS0FBSyxDQUFDLFFBQVEsRUFBRyxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksWUFBWSxDQUFDLGdCQUFnQixHQUFHLEtBQUs7UUFDM0MsSUFBSSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsbUJBQW1CLHNDQUF5QixFQUFFLENBQUM7WUFDM0UsT0FBTztRQUNSLENBQUM7UUFFSyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixvQ0FBdUIsQ0FBQztJQUMvRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxRQUFRLENBQUMsZ0JBQWdCLEdBQUcsS0FBSztRQUN2QyxJQUFJLGdCQUFnQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsc0NBQXlCLEVBQUUsQ0FBQztZQUMzRSxPQUFPO1FBQ1IsQ0FBQztRQUVLLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLG9DQUF1QixDQUFDO0lBQy9ELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNVLFVBQVUsQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLEVBQUUsU0FBMEI7UUFDM0UsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDdEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBRW5DLFFBQVEsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3RCLEtBQUssT0FBTztnQkFDUixJQUFJLFNBQVMsc0NBQXlCLEVBQUUsQ0FBQztvQkFDckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO2dCQUM1RSxDQUFDO2dCQUVELElBQUksU0FBUyxzQ0FBeUIsRUFBRSxDQUFDO29CQUNyQyxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO2dCQUMzRSxDQUFDO2dCQUVELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDO29CQUN0QixhQUFhLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtvQkFDcEMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRO2lCQUM5QixDQUFDLENBQUM7Z0JBRUgsTUFBTTtZQUVWLEtBQUssTUFBTTtnQkFDUCxJQUFJLFNBQVMsc0NBQXlCLEVBQUUsQ0FBQztvQkFDckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO2dCQUMzRSxDQUFDO2dCQUVELElBQUksU0FBUyxzQ0FBeUIsRUFBRSxDQUFDO29CQUNyQyxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO2dCQUMxRSxDQUFDO2dCQUVELE1BQU07WUFFVixLQUFLLFFBQVE7Z0JBQ1QsSUFBSSxTQUFTLHNDQUF5QixFQUFFLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFDNUUsQ0FBQztnQkFFRCxJQUFJLFNBQVMsc0NBQXlCLEVBQUUsQ0FBQztvQkFDckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFDM0UsQ0FBQztnQkFFRCxNQUFNO1FBQ2QsQ0FBQztRQUVELHFEQUFxRDtRQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQjtZQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUE2Q0o7OztPQUdHO0lBQ0ksa0JBQWtCLENBQUMsS0FBaUIsRUFBRSxJQUFVLEVBQUUsYUFBcUI7UUFDdkUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRTdCLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztJQUM1QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksb0JBQW9CLENBQUMsSUFBVSxFQUFFLEtBQW9CLEVBQUUsYUFBcUI7UUFDbEYsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztRQUUvQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0MsQ0FBQztJQUNGLENBQUM7SUFFRDs7O09BR0c7SUFDTyxnQkFBZ0IsQ0FBQyxLQUFpQjtRQUNyQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBRTFFLElBQUksV0FBVyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUM7UUFDM0MsQ0FBQztJQUNMLENBQUM7SUFFSjs7O09BR0c7SUFDTyxrQkFBa0IsQ0FBQyxLQUFvQjtRQUMxQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDO1FBQzNDLENBQUM7SUFDTCxDQUFDO0lBRUo7OztPQUdHO0lBQ08sZ0JBQWdCO1FBQ3pCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDdkIsTUFBTSxjQUFjLEdBQUcsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFBO1FBQy9GLE1BQU0sWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7UUFFckYsT0FBTztZQUNOLFFBQVEsRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNyQyxPQUFPLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7U0FDbEMsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDTyxpQkFBaUI7UUFDMUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQXVCLENBQUM7UUFFM0MsT0FBTztZQUNOLEtBQUssRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakQsR0FBRyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hELENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0EsSUFBYyxTQUFTO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUU7YUFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUNyQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVKOzs7OztPQUtHO0lBQ08sbUJBQW1CLENBQUMsSUFBVTtRQUNqQyxNQUFNLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3hDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDekIsQ0FBQztRQUVQLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFaEIscUJBQXFCO1FBQzNCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDN0IsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ2xCLENBQUMsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUNyQyxDQUFDLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO1FBRUcsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNyQyxDQUFDO2FBQU0sQ0FBQztZQUNWLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0MsQ0FBQztJQUNSLENBQUM7SUFFRDs7O09BR0c7SUFDSSxXQUFXLENBQUMsSUFBVTtRQUM1QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDdEYsSUFBSSxDQUFDLFVBQVUsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7T0FHRztJQUNnQixVQUFVLENBQUMsSUFBVTtRQUNqQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN0QyxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDdEYsSUFBSSxDQUFDLFVBQVUsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDO0lBQ3JDLENBQUM7SUFFSjs7O09BR0c7SUFDSSxVQUFVLENBQUMsSUFBVTtRQUMzQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDdEYsQ0FBQztJQUVTLHNCQUFzQixDQUFDLElBQVU7UUFDcEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztJQUNqQyxDQUFDO0lBRUo7OztPQUdHO0lBQ0ksZ0JBQWdCLENBQUMsS0FBaUIsRUFBRSxJQUFVLEVBQUUsYUFBcUI7UUFDckUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRTdCLElBQUksQ0FBQyxVQUFVLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQztRQUN2QyxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztJQUM1QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksa0JBQWtCLENBQUMsSUFBVSxFQUFFLEtBQW9CLEVBQUUsYUFBcUI7UUFDMUUsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRTlCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFVBQVUsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1lBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBRXJCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdDLENBQUM7SUFDRixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNhLFlBQVksQ0FBQyxLQUE4QjtRQUMxRCxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTFCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDN0IsQ0FBQyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQ2QsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUdEOzs7OztPQUtHO0lBQ0ksVUFBVSxDQUFDLENBQVM7UUFDcEIsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDMUUsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0EsaUVBQWlFO0lBQzdELGVBQWUsQ0FBQyxJQUFVO1FBQzFCLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUNqRCxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUN0QixJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRTtTQUM1QixDQUFDLENBQUM7UUFDRixNQUFNLFVBQVUsR0FDWixDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDO1lBQzNCLGNBQWMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRS9DLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDM0QsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFdBQVc7UUFDWCxJQUFJLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUNqRCxJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFlBQVksQ0FBQyxJQUFVO1FBQzdCLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7O09BR0c7SUFDSSxZQUFZLENBQUMsSUFBVSxFQUFFLFNBQWlCO1FBQzFDLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNwRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxlQUFlLENBQUMsS0FBb0IsRUFBRSxDQUFVO1FBQ2pELE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBVSxFQUFFLEtBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM5QyxLQUFLLEVBQUUsS0FBSztZQUNaLElBQUk7WUFDSixHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUNwRCxLQUFLO2dCQUNMLE1BQU07Z0JBQ04sT0FBTztnQkFDUCxLQUFLO2dCQUNMLFNBQVM7YUFDWixDQUFDO1NBQ0wsQ0FBQyxDQUFDO1FBRUgsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDckMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BELENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTFCLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLENBQUM7SUFDMUMsQ0FBQzs4R0F2Z0NXLG9CQUFvQjtrR0FBcEIsb0JBQW9CLDBHQXVDVCxnQkFBZ0Isc0NBWWhCLGdCQUFnQixxS0F1Q2hCLGdCQUFnQix1TkExRzVCO1lBQ1Y7Z0JBQ0MsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLG9CQUFvQjthQUNqQztZQUNLO2dCQUNJLEtBQUssRUFBRSxLQUFLO2dCQUNaLE9BQU8sRUFBRSx5QkFBeUI7YUFDckM7U0FDUCxtR0E4VGlDLGtDQUFrQyw0QkFBVyxrQ0FBa0MsOEdBTy9FLHVDQUF1Qyw0QkFBVyx1Q0FBdUMsNEdBUXpGLHFDQUFxQyw0QkFBVyxxQ0FBcUMsaU5Bdk0xRixxQkFBcUIsK0ZBU3JCLHNCQUFzQiwyRkFTeEIsb0JBQW9CLHVWQVNqQixvQkFBb0Isb0RDdk9uRCxpaFpBeVNBLDRDRC9OVyxJQUFJLDZGQUFFLGdCQUFnQixvSkFBRSw4QkFBOEIsMkdBQUUsZ0JBQWdCLDJGQUFFLEtBQUssbUhBQUUsb0JBQW9CLGlUQUFFLHNCQUFzQix1SEFBRSxxQkFBcUIsNEZBQUUsUUFBUSx3Q0FBRSx5QkFBeUIscURBQUUsc0JBQXNCOzsyRkFFL00sb0JBQW9CO2tCQWpCaEMsU0FBUztnQ0FDRTt3QkFDVjs0QkFDQyxLQUFLLEVBQUUsSUFBSTs0QkFDWCxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLHNCQUFzQjt5QkFDakM7d0JBQ0s7NEJBQ0ksS0FBSyxFQUFFLEtBQUs7NEJBQ1osT0FBTyxFQUFFLHlCQUF5Qjt5QkFDckM7cUJBQ1AsWUFDUyxjQUFjLGNBRVosSUFBSSxXQUNQLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFLDhCQUE4QixFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxzQkFBc0IsRUFBRSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUseUJBQXlCLEVBQUUsc0JBQXNCLENBQUM7OEJBY2xOLE9BQU87c0JBRGIsU0FBUzt1QkFBQyxTQUFTO2dCQWlCaEIsRUFBRTtzQkFGUixXQUFXO3VCQUFDLFNBQVM7O3NCQUNyQixLQUFLO2dCQWFJLFNBQVM7c0JBRGYsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFhL0IsUUFBUTtzQkFEZCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUkvQixXQUFXO3NCQURqQixLQUFLO2dCQUlDLGlCQUFpQjtzQkFEdkIsS0FBSztnQkFhRSxnQkFBZ0I7c0JBRDFCLEtBQUs7Z0JBc0JJLGVBQWU7c0JBRHJCLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBVTlCLGtCQUFrQjtzQkFENUIsV0FBVzt1QkFBQyw4QkFBOEI7Z0JBWXBDLFVBQVU7c0JBRGhCLFdBQVc7dUJBQUMsb0JBQW9CO2dCQVUxQixVQUFVO3NCQURoQixZQUFZO3VCQUFDLFdBQVc7Z0JBVWxCLFVBQVU7c0JBRGhCLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFO2dCQVU3QyxVQUFVO3NCQURoQixTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxzQkFBc0IsRUFBRTtnQkFVOUMsUUFBUTtzQkFEZCxTQUFTO3VCQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRTtnQkFVMUMsVUFBVTtzQkFEaEIsWUFBWTt1QkFBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUU7Z0JBVTdDLFdBQVc7c0JBRGpCLFNBQVM7dUJBQUMsYUFBYTtnQkFVakIsV0FBVztzQkFEakIsU0FBUzt1QkFBQyxhQUFhO2dCQTRJYix1QkFBdUI7c0JBRDlCLFlBQVk7dUJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGtDQUFrQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFRdEgsNEJBQTRCO3NCQURuQyxZQUFZO3VCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx1Q0FBdUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLHVDQUF1QyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBU2hJLDBCQUEwQjtzQkFEakMsWUFBWTt1QkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMscUNBQXFDLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQXNDMUgsV0FBVztzQkFEcEIsWUFBWTt1QkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDb21wb25lbnQsXG5cdENvbnRlbnRDaGlsZCxcblx0Zm9yd2FyZFJlZixcblx0SG9zdEJpbmRpbmcsXG5cdElucHV0LFxuXHRWaWV3Q2hpbGQsXG5cdEVsZW1lbnRSZWYsXG5cdEFmdGVyVmlld0luaXQsXG5cdFZpZXdDaGlsZHJlbixcblx0UXVlcnlMaXN0LFxuXHRPbkRlc3Ryb3ksXG5cdGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgSG9zdExpc3RlbmVyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQsIE5nRm9yLCBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtcblx0SWd4Q2FsZW5kYXJIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBJZ3hDYWxlbmRhckhlYWRlclRpdGxlVGVtcGxhdGVEaXJlY3RpdmUsXG5cdElneENhbGVuZGFyU3ViaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgSWd4Q2FsZW5kYXJTY3JvbGxQYWdlRGlyZWN0aXZlLFxufSBmcm9tICcuL2NhbGVuZGFyLmRpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgSWd4Q2FsZW5kYXJWaWV3LCBTY3JvbGxEaXJlY3Rpb24gfSBmcm9tICcuL2NhbGVuZGFyJztcbmltcG9ydCB7IElneE1vbnRoc1ZpZXdDb21wb25lbnQgfSBmcm9tICcuL21vbnRocy12aWV3L21vbnRocy12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hZZWFyc1ZpZXdDb21wb25lbnQgfSBmcm9tICcuL3llYXJzLXZpZXcveWVhcnMtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4RGF5c1ZpZXdDb21wb25lbnQgfSBmcm9tICcuL2RheXMtdmlldy9kYXlzLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IGludGVydmFsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwsIGRlYm91bmNlLCBza2lwTGFzdCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSWd4TW9udGhWaWV3U2xvdHNDYWxlbmRhciwgSWd4R2V0Vmlld0RhdGVDYWxlbmRhciB9IGZyb20gJy4vbW9udGhzLXZpZXcucGlwZSc7XG5pbXBvcnQgeyBJZ3hJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBhcmVTYW1lTW9udGgsIGZvcm1hdFRvUGFydHMsIGdldENsb3Nlc3RBY3RpdmVEYXRlLCBpc0RhdGVJblJhbmdlcyB9IGZyb20gJy4vY29tbW9uL2hlbHBlcnMnO1xuaW1wb3J0IHsgQ2FsZW5kYXJEYXkgfSBmcm9tICcuL2NvbW1vbi9tb2RlbCc7XG5pbXBvcnQgeyBJZ3hDYWxlbmRhckJhc2VEaXJlY3RpdmUgfSBmcm9tICcuL2NhbGVuZGFyLWJhc2UnO1xuaW1wb3J0IHsgS2V5Ym9hcmROYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4vY2FsZW5kYXIuc2VydmljZXMnO1xuXG5sZXQgTkVYVF9JRCA9IDA7XG5cbi8qKlxuICogQ2FsZW5kYXIgcHJvdmlkZXMgYSB3YXkgdG8gZGlzcGxheSBkYXRlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4Q2FsZW5kYXJNb2R1bGVcbiAqXG4gKiBAaWd4VGhlbWUgaWd4LWNhbGVuZGFyLXRoZW1lLCBpZ3gtaWNvbi10aGVtZVxuICpcbiAqIEBpZ3hLZXl3b3JkcyBjYWxlbmRhciwgZGF0ZXBpY2tlciwgc2NoZWR1bGUsIGRhdGVcbiAqXG4gKiBAaWd4R3JvdXAgU2NoZWR1bGluZ1xuICpcbiAqIEByZW1hcmtzXG4gKiBUaGUgSWduaXRlIFVJIENhbGVuZGFyIHByb3ZpZGVzIGFuIGVhc3kgd2F5IHRvIGRpc3BsYXkgYSBjYWxlbmRhciBhbmQgYWxsb3cgdXNlcnMgdG8gc2VsZWN0IGRhdGVzIHVzaW5nIHNpbmdsZSwgbXVsdGlwbGVcbiAqIG9yIHJhbmdlIHNlbGVjdGlvbi5cbiAqXG4gKiBAZXhhbXBsZTpcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtY2FsZW5kYXIgc2VsZWN0aW9uPVwicmFuZ2VcIj48L2lneC1jYWxlbmRhcj5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcblx0cHJvdmlkZXJzOiBbXG5cdFx0e1xuXHRcdFx0bXVsdGk6IHRydWUsXG5cdFx0XHRwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcblx0XHRcdHVzZUV4aXN0aW5nOiBJZ3hDYWxlbmRhckNvbXBvbmVudCxcblx0XHR9LFxuICAgICAgICB7XG4gICAgICAgICAgICBtdWx0aTogZmFsc2UsXG4gICAgICAgICAgICBwcm92aWRlOiBLZXlib2FyZE5hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICB9LFxuXHRdLFxuXHRzZWxlY3RvcjogJ2lneC1jYWxlbmRhcicsXG5cdHRlbXBsYXRlVXJsOiAnY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRpbXBvcnRzOiBbTmdJZiwgTmdUZW1wbGF0ZU91dGxldCwgSWd4Q2FsZW5kYXJTY3JvbGxQYWdlRGlyZWN0aXZlLCBJZ3hJY29uQ29tcG9uZW50LCBOZ0ZvciwgSWd4RGF5c1ZpZXdDb21wb25lbnQsIElneE1vbnRoc1ZpZXdDb21wb25lbnQsIElneFllYXJzVmlld0NvbXBvbmVudCwgRGF0ZVBpcGUsIElneE1vbnRoVmlld1Nsb3RzQ2FsZW5kYXIsIElneEdldFZpZXdEYXRlQ2FsZW5kYXJdLFxufSlcbmV4cG9ydCBjbGFzcyBJZ3hDYWxlbmRhckNvbXBvbmVudCBleHRlbmRzIElneENhbGVuZGFyQmFzZURpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX2FjdGl2ZURlc2NlbmRhbnQ6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKFwid3JhcHBlclwiKVxuICAgIHB1YmxpYyB3cmFwcGVyOiBFbGVtZW50UmVmO1xuXG5cdC8qKlxuXHQgKiBTZXRzL2dldHMgdGhlIGBpZGAgb2YgdGhlIGNhbGVuZGFyLlxuXHQgKlxuXHQgKiBAcmVtYXJrc1xuXHQgKiBJZiBub3Qgc2V0LCB0aGUgYGlkYCB3aWxsIGhhdmUgdmFsdWUgYFwiaWd4LWNhbGVuZGFyLTBcImAuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYGh0bWxcblx0ICogPGlneC1jYWxlbmRhciBpZD1cIm15LWZpcnN0LWNhbGVuZGFyXCI+PC9pZ3gtY2FsZW5kYXI+XG5cdCAqIGBgYFxuXHQgKiBAbWVtYmVyb2YgSWd4Q2FsZW5kYXJDb21wb25lbnRcblx0ICovXG5cdEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG5cdEBJbnB1dCgpXG5cdHB1YmxpYyBpZCA9IGBpZ3gtY2FsZW5kYXItJHsgTkVYVF9JRCsrIH1gO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHdoZXRoZXIgdGhlIGNhbGVuZGFyIGhhcyBoZWFkZXIuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNhbGVuZGFyIFtoYXNIZWFkZXJdPVwiZmFsc2VcIj48L2lneC1jYWxlbmRhcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgaGFzSGVhZGVyID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB3aGV0aGVyIHRoZSBjYWxlbmRhciBoZWFkZXIgd2lsbCBiZSBpbiB2ZXJ0aWNhbCBwb3NpdGlvbi5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNhbGVuZGFyIFt2ZXJ0aWNhbF09XCJ0cnVlXCI+PC9pZ3gtY2FsZW5kYXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIHZlcnRpY2FsID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvcmllbnRhdGlvbjogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJyA9ICdob3Jpem9udGFsJztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGhlYWRlck9yaWVudGF0aW9uOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnID0gJ2hvcml6b250YWwnO1xuXG5cdC8qKlxuXHQgKiBTZXRzL2dldHMgdGhlIG51bWJlciBvZiBtb250aCB2aWV3cyBkaXNwbGF5ZWQuXG5cdCAqIERlZmF1bHQgdmFsdWUgaXMgYDFgLlxuXHQgKlxuXHQgKiBAZXhhbXBsZVxuXHQgKiBgYGBodG1sXG5cdCAqIDxpZ3gtY2FsZW5kYXIgW21vbnRoc1ZpZXdOdW1iZXJdPVwiMlwiPjwvaWd4LWNhbGVuZGFyPlxuXHQgKiBgYGBcblx0ICovXG5cdEBJbnB1dCgpXG5cdHB1YmxpYyBnZXQgbW9udGhzVmlld051bWJlcigpIHtcblx0XHRyZXR1cm4gdGhpcy5fbW9udGhzVmlld051bWJlcjtcblx0fVxuXG4gICAgcHVibGljIHNldCBtb250aHNWaWV3TnVtYmVyKHZhbDogbnVtYmVyKSB7XG4gICAgICAgIGlmICh2YWwgPCAxKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuXHRcdHRoaXMuX21vbnRoc1ZpZXdOdW1iZXIgPSB2YWw7XG5cdH1cblxuICAgIC8qKlxuICAgICAqIFNob3cvaGlkZSB3ZWVrIG51bWJlcnNcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2FsZW5kYXIgW3Nob3dXZWVrTnVtYmVyc109XCJ0cnVlXCI+PC9pZ3gtY2FsZW5kYXI+XG4gICAgICogYGBcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgc2hvd1dlZWtOdW1iZXJzID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIFRoZSBkZWZhdWx0IGNzcyBjbGFzcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1jYWxlbmRhci0tdmVydGljYWwnKVxuXHRwdWJsaWMgZ2V0IHN0eWxlVmVydGljYWxDbGFzcygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5oZWFkZXJPcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgZGVmYXVsdCBjc3MgY2xhc3MgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0QEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtY2FsZW5kYXInKVxuXHRwdWJsaWMgc3R5bGVDbGFzcyA9IHRydWU7XG5cblx0LyoqXG5cdCAqIE1vbnRoIGJ1dHRvbiwgdGhhdCBkaXNwbGF5cyB0aGUgbW9udGhzIHZpZXcuXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRAVmlld0NoaWxkcmVuKCdtb250aHNCdG4nKVxuXHRwdWJsaWMgbW9udGhzQnRuczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG5cdC8qKlxuXHQgKiBWaWV3Q2hpbGQgdGhhdCByZXByZXNlbnRzIHRoZSBkZWNhZGUgdmlldy5cblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdEBWaWV3Q2hpbGQoJ2RlY2FkZScsIHsgcmVhZDogSWd4WWVhcnNWaWV3Q29tcG9uZW50IH0pXG5cdHB1YmxpYyBkYWNhZGVWaWV3OiBJZ3hZZWFyc1ZpZXdDb21wb25lbnQ7XG5cblx0LyoqXG5cdCAqIFZpZXdDaGlsZCB0aGF0IHJlcHJlc2VudHMgdGhlIG1vbnRocyB2aWV3LlxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0QFZpZXdDaGlsZCgnbW9udGhzJywgeyByZWFkOiBJZ3hNb250aHNWaWV3Q29tcG9uZW50IH0pXG5cdHB1YmxpYyBtb250aHNWaWV3OiBJZ3hNb250aHNWaWV3Q29tcG9uZW50O1xuXG5cdC8qKlxuXHQgKiBWaWV3Q2hpbGQgdGhhdCByZXByZXNlbnRzIHRoZSBkYXlzIHZpZXcuXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRAVmlld0NoaWxkKCdkYXlzJywgeyByZWFkOiBJZ3hEYXlzVmlld0NvbXBvbmVudCB9KVxuXHRwdWJsaWMgZGF5c1ZpZXc6IElneERheXNWaWV3Q29tcG9uZW50O1xuXG5cdC8qKlxuXHQgKiBWaWV3Q2hpbGRyZW5kZW4gcmVwcmVzZW50aW5nIGFsbCBvZiB0aGUgcmVuZGVyZWQgZGF5cyB2aWV3cy5cblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdEBWaWV3Q2hpbGRyZW4oJ2RheXMnLCB7IHJlYWQ6IElneERheXNWaWV3Q29tcG9uZW50IH0pXG5cdHB1YmxpYyBtb250aFZpZXdzOiBRdWVyeUxpc3Q8SWd4RGF5c1ZpZXdDb21wb25lbnQ+O1xuXG5cdC8qKlxuXHQgKiBCdXR0b24gZm9yIHByZXZpb3VzIG1vbnRoLlxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0QFZpZXdDaGlsZCgncHJldlBhZ2VCdG4nKVxuXHRwdWJsaWMgcHJldlBhZ2VCdG46IEVsZW1lbnRSZWY7XG5cblx0LyoqXG5cdCAqIEJ1dHRvbiBmb3IgbmV4dCBtb250aC5cblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdEBWaWV3Q2hpbGQoJ25leHRQYWdlQnRuJylcblx0cHVibGljIG5leHRQYWdlQnRuOiBFbGVtZW50UmVmO1xuXG5cdC8qKlxuXHQgKiBEZW5vdGUgaWYgdGhlIHllYXIgdmlldyBpcyBhY3RpdmUuXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGlzWWVhclZpZXcoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3LlllYXI7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgaGVhZGVyIHRlbXBsYXRlLlxuXHQgKlxuXHQgKiBAZXhhbXBsZVxuXHQgKiBgYGB0eXBlc2NyaXB0XG5cdCAqIGxldCBoZWFkZXJUaXRsZVRlbXBsYXRlID0gdGhpcy5jYWxlbmRhci5oZWFkZXJUaXRsZVRlYW1wbGF0ZTtcblx0ICogYGBgXG5cdCAqIEBtZW1iZXJvZiBJZ3hDYWxlbmRhckNvbXBvbmVudFxuXHQgKi9cblx0cHVibGljIGdldCBoZWFkZXJUaXRsZVRlbXBsYXRlKCk6IGFueSB7XG5cdFx0aWYgKHRoaXMuaGVhZGVyVGl0bGVUZW1wbGF0ZURpcmVjdGl2ZSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuaGVhZGVyVGl0bGVUZW1wbGF0ZURpcmVjdGl2ZS50ZW1wbGF0ZTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgaGVhZGVyIHRlbXBsYXRlLlxuXHQgKlxuXHQgKiBAZXhhbXBsZVxuXHQgKiBgYGBodG1sXG5cdCAqIDxpZ3gtY2FsZW5kYXIgaGVhZGVyVGl0bGVUZW1wbGF0ZURpcmVjdGl2ZT1cImlneENhbGVuZGFySGVhZGVyVGl0bGVcIj48L2lneC1jYWxlbmRhcj5cblx0ICogYGBgXG5cdCAqIEBtZW1iZXJvZiBJZ3hDYWxlbmRhckNvbXBvbmVudFxuXHQgKi9cblx0cHVibGljIHNldCBoZWFkZXJUaXRsZVRlbXBsYXRlKGRpcmVjdGl2ZTogYW55KSB7XG5cdFx0dGhpcy5oZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlID0gZGlyZWN0aXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGhlYWRlciB0ZW1wbGF0ZS5cblx0ICpcblx0ICogQGV4YW1wbGVcblx0ICogYGBgdHlwZXNjcmlwdFxuXHQgKiBsZXQgaGVhZGVyVGVtcGxhdGUgPSAgdGhpcy5jYWxlbmRhci5oZWFkZXJUZWFtcGxhdGU7XG5cdCAqIGBgYFxuXHQgKiBAbWVtYmVyb2YgSWd4Q2FsZW5kYXJDb21wb25lbnRcblx0ICovXG5cdHB1YmxpYyBnZXQgaGVhZGVyVGVtcGxhdGUoKTogYW55IHtcblx0XHRpZiAodGhpcy5oZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUudGVtcGxhdGU7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGhlYWRlciB0ZW1wbGF0ZS5cblx0ICpcblx0ICogQGV4YW1wbGVcblx0ICogYGBgaHRtbFxuXHQgKiA8aWd4LWNhbGVuZGFyIGhlYWRlclRlbXBsYXRlRGlyZWN0aXZlPVwiaWd4Q2FsZW5kYXJIZWFkZXJcIj48L2lneC1jYWxlbmRhcj5cblx0ICogYGBgXG5cdCAqIEBtZW1iZXJvZiBJZ3hDYWxlbmRhckNvbXBvbmVudFxuXHQgKi9cblx0cHVibGljIHNldCBoZWFkZXJUZW1wbGF0ZShkaXJlY3RpdmU6IGFueSkge1xuXHRcdHRoaXMuaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUgPSBkaXJlY3RpdmU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgc3ViaGVhZGVyIHRlbXBsYXRlLlxuXHQgKlxuXHQgKiBAZXhhbXBsZVxuXHQgKiBgYGB0eXBlc2NyaXB0XG5cdCAqIGxldCBzdWJoZWFkZXJUZW1wbGF0ZSA9IHRoaXMuY2FsZW5kYXIuc3ViaGVhZGVyVGVtcGxhdGU7XG5cdCAqIGBgYFxuXHQgKi9cblx0cHVibGljIGdldCBzdWJoZWFkZXJUZW1wbGF0ZSgpOiBhbnkge1xuXHRcdGlmICh0aGlzLnN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5zdWJoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZS50ZW1wbGF0ZTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgc3ViaGVhZGVyIHRlbXBsYXRlLlxuXHQgKlxuXHQgKiBAZXhhbXBsZVxuXHQgKiBgYGBodG1sXG5cdCAqIDxpZ3gtY2FsZW5kYXIgc3ViaGVhZGVyVGVtcGxhdGU9XCJpZ3hDYWxlbmRhclN1YmhlYWRlclwiPjwvaWd4LWNhbGVuZGFyPlxuXHQgKiBgYGBcblx0ICogQG1lbWJlcm9mIElneENhbGVuZGFyQ29tcG9uZW50XG5cdCAqL1xuXHRwdWJsaWMgc2V0IHN1YmhlYWRlclRlbXBsYXRlKGRpcmVjdGl2ZTogYW55KSB7XG5cdFx0dGhpcy5zdWJoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSA9IGRpcmVjdGl2ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBjb250ZXh0IGZvciB0aGUgdGVtcGxhdGUgbWFya2VkIHdpdGggdGhlIGBpZ3hDYWxlbmRhckhlYWRlcmAgZGlyZWN0aXZlLlxuXHQgKlxuXHQgKiBAZXhhbXBsZVxuXHQgKiBgYGB0eXBlc2NyaXB0XG5cdCAqIGxldCBoZWFkZXJDb250ZXh0ID0gIHRoaXMuY2FsZW5kYXIuaGVhZGVyQ29udGV4dDtcblx0ICogYGBgXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGhlYWRlckNvbnRleHQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2VuZXJhdGVDb250ZXh0KHRoaXMuaGVhZGVyRGF0ZSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgY29udGV4dCBmb3IgdGhlIHRlbXBsYXRlIG1hcmtlZCB3aXRoIGVpdGhlciBgaWd4Q2FsZW5kYXJTdWJIZWFkZXJNb250aGBcblx0ICogb3IgYGlneENhbGVuZGFyU3ViSGVhZGVyWWVhcmAgZGlyZWN0aXZlLlxuXHQgKlxuXHQgKiBAZXhhbXBsZVxuXHQgKiBgYGB0eXBlc2NyaXB0XG5cdCAqIGxldCBjb250ZXh0ID0gIHRoaXMuY2FsZW5kYXIuY29udGV4dDtcblx0ICogYGBgXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGNvbnRleHQoKSB7XG5cdFx0Y29uc3QgZGF0ZTogRGF0ZSA9IHRoaXMudmlld0RhdGU7XG5cdFx0cmV0dXJuIHRoaXMuZ2VuZXJhdGVDb250ZXh0KGRhdGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERhdGUgZGlzcGxheWVkIGluIGhlYWRlclxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIGdldCBoZWFkZXJEYXRlKCk6IERhdGUge1xuXHRcdHJldHVybiB0aGlzLnNlbGVjdGVkRGF0ZXM/LmF0KDApID8/IG5ldyBEYXRlKCk7XG5cdH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKGZvcndhcmRSZWYoKCkgPT4gSWd4Q2FsZW5kYXJIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSksIHsgcmVhZDogSWd4Q2FsZW5kYXJIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZTogSWd4Q2FsZW5kYXJIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKGZvcndhcmRSZWYoKCkgPT4gSWd4Q2FsZW5kYXJIZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlKSwgeyByZWFkOiBJZ3hDYWxlbmRhckhlYWRlclRpdGxlVGVtcGxhdGVEaXJlY3RpdmUsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByaXZhdGUgaGVhZGVyVGl0bGVUZW1wbGF0ZURpcmVjdGl2ZTogSWd4Q2FsZW5kYXJIZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgQENvbnRlbnRDaGlsZChmb3J3YXJkUmVmKCgpID0+IElneENhbGVuZGFyU3ViaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUpLCB7IHJlYWQ6IElneENhbGVuZGFyU3ViaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByaXZhdGUgc3ViaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmU6IElneENhbGVuZGFyU3ViaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmU7XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgYWN0aXZlRGF0ZSA9IENhbGVuZGFyRGF5LnRvZGF5Lm5hdGl2ZTtcblxuXHQvKipcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHByb3RlY3RlZCBwcmV2aWV3UmFuZ2VEYXRlOiBEYXRlO1xuXG5cdC8qKlxuXHQgKiBVc2VkIHRvIGFwcGx5IHRoZSBhY3RpdmUgZGF0ZSB3aGVuIHRoZSBjYWxlbmRhciB2aWV3IGlzIGNoYW5nZWRcblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBuZXh0RGF0ZTogRGF0ZTtcblxuXHQvKipcblx0ICogRGVub3RlIGlmIHRoZSBjYWxlbmRhciB2aWV3IHdhcyBjaGFuZ2VkIHdpdGggdGhlIGtleWJvYXJkXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgaXNLZXlkb3duVHJpZ2dlciA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHJpdmF0ZSBfbW9udGhzVmlld051bWJlciA9IDE7XG5cbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nLCBbJyRldmVudCddKVxuICAgIHByb3RlY3RlZCBvbk1vdXNlRG93bihldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy53cmFwcGVyLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zaG93QWN0aXZlRGF5OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cbiAgICBwcm90ZWN0ZWQgc2V0IHNob3dBY3RpdmVEYXkodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fc2hvd0FjdGl2ZURheSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBzaG93QWN0aXZlRGF5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2hvd0FjdGl2ZURheTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IGFjdGl2ZURlc2NlbmRhbnQoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gJ21vbnRoJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlRGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlRGVzY2VuZGFudCA/PyB0aGlzLnZpZXdEYXRlLmdldFRpbWUoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc2V0IGFjdGl2ZURlc2NlbmRhbnQoZGF0ZTogRGF0ZSkge1xuICAgICAgICB0aGlzLl9hY3RpdmVEZXNjZW5kYW50ID0gZGF0ZS5nZXRUaW1lKCk7XG4gICAgfVxuXG5cdHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMua2V5Ym9hcmROYXZpZ2F0aW9uXG4gICAgICAgICAgICAuYXR0YWNoS2V5Ym9hcmRIYW5kbGVycyh0aGlzLndyYXBwZXIsIHRoaXMpXG4gICAgICAgICAgICAuc2V0KFwiQXJyb3dVcFwiLCB0aGlzLm9uQXJyb3dVcClcbiAgICAgICAgICAgIC5zZXQoXCJBcnJvd0Rvd25cIiwgdGhpcy5vbkFycm93RG93bilcbiAgICAgICAgICAgIC5zZXQoXCJBcnJvd0xlZnRcIiwgdGhpcy5vbkFycm93TGVmdClcbiAgICAgICAgICAgIC5zZXQoXCJBcnJvd1JpZ2h0XCIsIHRoaXMub25BcnJvd1JpZ2h0KVxuICAgICAgICAgICAgLnNldChcIkVudGVyXCIsIHRoaXMub25FbnRlcilcbiAgICAgICAgICAgIC5zZXQoXCIgXCIsIHRoaXMub25FbnRlcilcbiAgICAgICAgICAgIC5zZXQoXCJIb21lXCIsIHRoaXMub25Ib21lKVxuICAgICAgICAgICAgLnNldChcIkVuZFwiLCB0aGlzLm9uRW5kKVxuICAgICAgICAgICAgLnNldChcIlBhZ2VVcFwiLCB0aGlzLmhhbmRsZVBhZ2VVcClcbiAgICAgICAgICAgIC5zZXQoXCJQYWdlRG93blwiLCB0aGlzLmhhbmRsZVBhZ2VEb3duKTtcblxuICAgICAgICB0aGlzLndyYXBwZXIubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIChldmVudDogRm9jdXNFdmVudCkgPT4gdGhpcy5vbldyYXBwZXJGb2N1cyhldmVudCkpO1xuICAgICAgICB0aGlzLndyYXBwZXIubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKGV2ZW50OiBGb2N1c0V2ZW50KSA9PiB0aGlzLm9uV3JhcHBlckJsdXIoZXZlbnQpKTtcblxuICAgICAgICB0aGlzLnN0YXJ0UGFnZVNjcm9sbCQucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnN0b3BQYWdlU2Nyb2xsJCksXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5zY3JvbGxQYWdlJC5waXBlKFxuICAgICAgICAgICAgICAgIHNraXBMYXN0KDEpLFxuICAgICAgICAgICAgICAgIGRlYm91bmNlKCgpID0+IGludGVydmFsKDMwMCkpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnN0b3BQYWdlU2Nyb2xsJClcbiAgICAgICAgICAgICkpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5wYWdlU2Nyb2xsRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU2Nyb2xsRGlyZWN0aW9uLlBSRVY6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzUGFnZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU2Nyb2xsRGlyZWN0aW9uLk5FWFQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRQYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb24uTk9ORTpcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlVmlldyQuc3Vic2NyaWJlKCh2aWV3KSA9PiB7XG5cdFx0XHR0aGlzLmFjdGl2ZVZpZXdDaGFuZ2VkLmVtaXQodmlldyk7XG5cbiAgICAgICAgICAgIHRoaXMudmlld0RhdGVDaGFuZ2VkLmVtaXQoe1xuICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsdWU6IHRoaXMucHJldmlvdXNWaWV3RGF0ZSxcbiAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWU6IHRoaXMudmlld0RhdGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uV3JhcHBlckZvY3VzKF9ldmVudDogRm9jdXNFdmVudCkge1xuICAgICAgICB0aGlzLnNob3dBY3RpdmVEYXkgPSB0cnVlO1xuICAgICAgICB0aGlzLm1vbnRoVmlld3MuZm9yRWFjaCh2aWV3ID0+IHZpZXcuY2hhbmdlUHJldmlld1JhbmdlKHRoaXMuYWN0aXZlRGF0ZSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25XcmFwcGVyQmx1cihfZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICAgICAgdGhpcy5zaG93QWN0aXZlRGF5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMubW9udGhWaWV3cy5mb3JFYWNoKHZpZXcgPT4gdmlldy5jbGVhclByZXZpZXdSYW5nZSgpKTtcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUFycm93S2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgZGVsdGE6IG51bWJlcikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGNvbnN0IGRhdGUgPSBnZXRDbG9zZXN0QWN0aXZlRGF0ZShcbiAgICAgICAgICAgIENhbGVuZGFyRGF5LmZyb20odGhpcy5hY3RpdmVEYXRlKSxcbiAgICAgICAgICAgIGRlbHRhLFxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZERhdGVzLFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IGRhdGUubmF0aXZlO1xuXG4gICAgICAgIGNvbnN0IGRhdGVzID0gdGhpcy52aWV3RGF0ZXM7XG4gICAgICAgIGNvbnN0IGlzRGF0ZUluVmlldyA9IGRhdGVzLnNvbWUoZCA9PiBkLmRhdGUuZXF1YWxUbyh0aGlzLmFjdGl2ZURhdGUpKTtcbiAgICAgICAgdGhpcy5tb250aFZpZXdzLmZvckVhY2godmlldyA9PiB2aWV3LmNsZWFyUHJldmlld1JhbmdlKCkpO1xuXG4gICAgICAgIGlmICghaXNEYXRlSW5WaWV3KSB7XG4gICAgICAgICAgICBkZWx0YSA+IDAgPyB0aGlzLm5leHRQYWdlKHRydWUpIDogdGhpcy5wcmV2aW91c1BhZ2UodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVBhZ2VVcERvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGRlbHRhOiBudW1iZXIpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBjb25zdCBkaXIgPSBkZWx0YSA+IDAgPyBTY3JvbGxEaXJlY3Rpb24uTkVYVCA6IFNjcm9sbERpcmVjdGlvbi5QUkVWO1xuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5Nb250aCAmJiBldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgdGhpcy52aWV3RGF0ZSA9IENhbGVuZGFyRGF5LmZyb20odGhpcy52aWV3RGF0ZSkuYWRkKCd5ZWFyJywgZGVsdGEpLm5hdGl2ZTtcbiAgICAgICAgICAgIHRoaXMucmVzZXRBY3RpdmVEYXRlKHRoaXMudmlld0RhdGUpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VQYWdlKGZhbHNlLCBkaXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVQYWdlVXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVQYWdlVXBEb3duKGV2ZW50LCAtMSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVQYWdlRG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICB0aGlzLmhhbmRsZVBhZ2VVcERvd24oZXZlbnQsIDEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25BcnJvd1VwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5Nb250aCkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVBcnJvd0tleWRvd24oZXZlbnQsIC03KTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5ZZWFyKSB7XG4gICAgICAgICAgICB0aGlzLm1vbnRoc1ZpZXcub25LZXlkb3duQXJyb3dVcChldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuRGVjYWRlKSB7XG4gICAgICAgICAgICB0aGlzLmRhY2FkZVZpZXcub25LZXlkb3duQXJyb3dVcChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQXJyb3dEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5Nb250aCkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVBcnJvd0tleWRvd24oZXZlbnQsIDcpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3LlllYXIpIHtcbiAgICAgICAgICAgIHRoaXMubW9udGhzVmlldy5vbktleWRvd25BcnJvd0Rvd24oZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3LkRlY2FkZSkge1xuICAgICAgICAgICAgdGhpcy5kYWNhZGVWaWV3Lm9uS2V5ZG93bkFycm93RG93bihldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQXJyb3dMZWZ0KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5Nb250aCkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVBcnJvd0tleWRvd24oZXZlbnQsIC0xKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5ZZWFyKSB7XG4gICAgICAgICAgICB0aGlzLm1vbnRoc1ZpZXcub25LZXlkb3duQXJyb3dMZWZ0KGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5EZWNhZGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGFjYWRlVmlldy5vbktleWRvd25BcnJvd0xlZnQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkFycm93UmlnaHQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3Lk1vbnRoKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUFycm93S2V5ZG93bihldmVudCwgMSk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuWWVhcikge1xuICAgICAgICAgICAgdGhpcy5tb250aHNWaWV3Lm9uS2V5ZG93bkFycm93UmlnaHQoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3LkRlY2FkZSkge1xuICAgICAgICAgICAgdGhpcy5kYWNhZGVWaWV3Lm9uS2V5ZG93bkFycm93UmlnaHQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkVudGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5Nb250aCkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVEYXRlU2VsZWN0aW9uKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuWWVhcikge1xuICAgICAgICAgICAgdGhpcy5tb250aHNWaWV3Lm9uS2V5ZG93bkVudGVyKGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5EZWNhZGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGFjYWRlVmlldy5vbktleWRvd25FbnRlcihldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1vbnRoVmlld3MuZm9yRWFjaCh2aWV3ID0+IHZpZXcuY2xlYXJQcmV2aWV3UmFuZ2UoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkhvbWUoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3Lk1vbnRoKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRlcyA9IHRoaXMubW9udGhWaWV3cy50b0FycmF5KClcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgodmlldykgPT4gdmlldy5kYXRlcy50b0FycmF5KCkpXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoZCkgPT4gZC5pc0N1cnJlbnRNb250aCAmJiBkLmlzRm9jdXNhYmxlKTtcblxuICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gZGF0ZXMuYXQoMCkuZGF0ZS5uYXRpdmU7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuWWVhcikge1xuICAgICAgICAgICAgdGhpcy5tb250aHNWaWV3Lm9uS2V5ZG93bkhvbWUoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3LkRlY2FkZSkge1xuICAgICAgICAgICAgdGhpcy5kYWNhZGVWaWV3Lm9uS2V5ZG93bkhvbWUoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkVuZChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuTW9udGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGVzID0gdGhpcy5tb250aFZpZXdzLnRvQXJyYXkoKVxuICAgICAgICAgICAgICAgIC5mbGF0TWFwKCh2aWV3KSA9PiB2aWV3LmRhdGVzLnRvQXJyYXkoKSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChkKSA9PiBkLmlzQ3VycmVudE1vbnRoICYmIGQuaXNGb2N1c2FibGUpO1xuXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSBkYXRlcy5hdCgtMSkuZGF0ZS5uYXRpdmU7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuWWVhcikge1xuICAgICAgICAgICAgdGhpcy5tb250aHNWaWV3Lm9uS2V5ZG93bkVuZChldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuRGVjYWRlKSB7XG4gICAgICAgICAgICB0aGlzLmRhY2FkZVZpZXcub25LZXlkb3duRW5kKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbG9jYWxlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb250aCBpbiB0aGUgbW9udGggdmlldyBpZiBlbmFibGVkLFxuXHQgKiBvdGhlcndpc2UgcmV0dXJucyB0aGUgZGVmYXVsdCBgRGF0ZS5nZXRNb250aCgpYCB2YWx1ZS5cblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBmb3JtYXR0ZWRNb250aCh2YWx1ZTogRGF0ZSk6IHN0cmluZyB7XG5cdFx0aWYgKHRoaXMuZm9ybWF0Vmlld3MubW9udGgpIHtcblx0XHRcdHJldHVybiB0aGlzLmZvcm1hdHRlck1vbnRoLmZvcm1hdCh2YWx1ZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGAkeyB2YWx1ZS5nZXRNb250aCgpIH1gO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoYW5nZSB0byBwcmV2aW91cyBwYWdlXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgcHJldmlvdXNQYWdlKGlzS2V5ZG93blRyaWdnZXIgPSBmYWxzZSkge1xuXHRcdGlmIChpc0tleWRvd25UcmlnZ2VyICYmIHRoaXMucGFnZVNjcm9sbERpcmVjdGlvbiA9PT0gU2Nyb2xsRGlyZWN0aW9uLk5FWFQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cbiAgICAgICAgdGhpcy5jaGFuZ2VQYWdlKGlzS2V5ZG93blRyaWdnZXIsIFNjcm9sbERpcmVjdGlvbi5QUkVWKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGFuZ2UgdG8gbmV4dCBwYWdlXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgbmV4dFBhZ2UoaXNLZXlkb3duVHJpZ2dlciA9IGZhbHNlKSB7XG5cdFx0aWYgKGlzS2V5ZG93blRyaWdnZXIgJiYgdGhpcy5wYWdlU2Nyb2xsRGlyZWN0aW9uID09PSBTY3JvbGxEaXJlY3Rpb24uUFJFVikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuICAgICAgICB0aGlzLmNoYW5nZVBhZ2UoaXNLZXlkb3duVHJpZ2dlciwgU2Nyb2xsRGlyZWN0aW9uLk5FWFQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcGFnZVxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cbiAgICBwcm90ZWN0ZWQgY2hhbmdlUGFnZShpc0tleWRvd25UcmlnZ2VyID0gZmFsc2UsIGRpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uKSB7XG5cdFx0dGhpcy5wcmV2aW91c1ZpZXdEYXRlID0gdGhpcy52aWV3RGF0ZTtcblx0XHR0aGlzLmlzS2V5ZG93blRyaWdnZXIgPSBpc0tleWRvd25UcmlnZ2VyO1xuXG4gICAgICAgIHN3aXRjaCAodGhpcy5hY3RpdmVWaWV3KSB7XG4gICAgICAgICAgICBjYXNlIFwibW9udGhcIjpcbiAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSBTY3JvbGxEaXJlY3Rpb24uUFJFVikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdEYXRlID0gQ2FsZW5kYXJEYXkuZnJvbSh0aGlzLnZpZXdEYXRlKS5hZGQoJ21vbnRoJywgLTEpLm5hdGl2ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSBTY3JvbGxEaXJlY3Rpb24uTkVYVCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdEYXRlID0gQ2FsZW5kYXJEYXkuZnJvbSh0aGlzLnZpZXdEYXRlKS5hZGQoJ21vbnRoJywgMSkubmF0aXZlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMudmlld0RhdGVDaGFuZ2VkLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1ZhbHVlOiB0aGlzLnByZXZpb3VzVmlld0RhdGUsXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy52aWV3RGF0ZVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJ5ZWFyXCI6XG4gICAgICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gU2Nyb2xsRGlyZWN0aW9uLlBSRVYpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3RGF0ZSA9IENhbGVuZGFyRGF5LmZyb20odGhpcy52aWV3RGF0ZSkuYWRkKCd5ZWFyJywgLTEpLm5hdGl2ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSBTY3JvbGxEaXJlY3Rpb24uTkVYVCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdEYXRlID0gQ2FsZW5kYXJEYXkuZnJvbSh0aGlzLnZpZXdEYXRlKS5hZGQoJ3llYXInLCAxKS5uYXRpdmU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJkZWNhZGVcIjpcbiAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSBTY3JvbGxEaXJlY3Rpb24uUFJFVikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdEYXRlID0gQ2FsZW5kYXJEYXkuZnJvbSh0aGlzLnZpZXdEYXRlKS5hZGQoJ3llYXInLCAtMTUpLm5hdGl2ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSBTY3JvbGxEaXJlY3Rpb24uTkVYVCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdEYXRlID0gQ2FsZW5kYXJEYXkuZnJvbSh0aGlzLnZpZXdEYXRlKS5hZGQoJ3llYXInLCAxNSkubmF0aXZlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gWFhYOiBXaHkgb25seSB3aGVuIGl0J3Mgbm90IHRyaWdnZXJlZCBieSBrZXlib2FyZD9cbiAgICAgICAgaWYgKCF0aGlzLmlzS2V5ZG93blRyaWdnZXIpIHRoaXMucmVzZXRBY3RpdmVEYXRlKHRoaXMudmlld0RhdGUpO1xuICAgIH1cblxuXHQvKipcblx0ICogQ29udGluaW91cyBuYXZpZ2F0aW9uIHRocm91Z2ggdGhlIHByZXZpb3VzIHBhZ2VzXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgc3RhcnRQcmV2UGFnZVNjcm9sbCA9IChpc0tleWRvd25UcmlnZ2VyID0gZmFsc2UpID0+IHtcblx0XHR0aGlzLnN0YXJ0UGFnZVNjcm9sbCQubmV4dCgpO1xuXHRcdHRoaXMucGFnZVNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbERpcmVjdGlvbi5QUkVWO1xuXHRcdHRoaXMucHJldmlvdXNQYWdlKGlzS2V5ZG93blRyaWdnZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnRpbmlvdXMgbmF2aWdhdGlvbiB0aHJvdWdoIHRoZSBuZXh0IHBhZ2VzXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgc3RhcnROZXh0UGFnZVNjcm9sbCA9IChpc0tleWRvd25UcmlnZ2VyID0gZmFsc2UpID0+IHtcblx0XHR0aGlzLnN0YXJ0UGFnZVNjcm9sbCQubmV4dCgpO1xuXHRcdHRoaXMucGFnZVNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbERpcmVjdGlvbi5ORVhUO1xuXHRcdHRoaXMubmV4dFBhZ2UoaXNLZXlkb3duVHJpZ2dlcik7XG5cdH1cblxuXHQvKipcblx0ICogU3RvcCBjb250aW51b3VzIG5hdmlnYXRpb25cblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBzdG9wUGFnZVNjcm9sbCA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuXHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG5cdFx0dGhpcy5zdG9wUGFnZVNjcm9sbCQubmV4dCh0cnVlKTtcblx0XHR0aGlzLnN0b3BQYWdlU2Nyb2xsJC5jb21wbGV0ZSgpO1xuXG5cdFx0aWYgKHRoaXMucGxhdGZvcm0uaXNBY3RpdmF0aW9uS2V5KGV2ZW50KSkge1xuXHRcdFx0dGhpcy5yZXNldEFjdGl2ZURhdGUodGhpcy52aWV3RGF0ZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5wYWdlU2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsRGlyZWN0aW9uLk5PTkU7XG5cdH1cblxuXHQvKipcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBvbkFjdGl2ZVZpZXdEZWNhZGUoZXZlbnQ6IE1vdXNlRXZlbnQsIGRhdGU6IERhdGUsIGFjdGl2ZVZpZXdJZHg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0c3VwZXIuYWN0aXZlVmlld0RlY2FkZShhY3RpdmVWaWV3SWR4KTtcbiAgICAgICAgdGhpcy52aWV3RGF0ZSA9IGRhdGU7XG5cdH1cblxuXHQvKipcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBvbkFjdGl2ZVZpZXdEZWNhZGVLQihkYXRlOiBEYXRlLCBldmVudDogS2V5Ym9hcmRFdmVudCwgYWN0aXZlVmlld0lkeDogbnVtYmVyKSB7XG5cdFx0c3VwZXIuYWN0aXZlVmlld0RlY2FkZUtCKGV2ZW50LCBhY3RpdmVWaWV3SWR4KTtcblxuXHRcdGlmICh0aGlzLnBsYXRmb3JtLmlzQWN0aXZhdGlvbktleShldmVudCkpIHtcbiAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBkYXRlO1xuICAgICAgICAgICAgdGhpcy53cmFwcGVyLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG4gICAgcHVibGljIG9uWWVhcnNWaWV3Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkID8gZXZlbnQuY29tcG9zZWRQYXRoKCkgOiBbZXZlbnQudGFyZ2V0XTtcbiAgICAgICAgY29uc3QgeWVhcnMgPSB0aGlzLmRhY2FkZVZpZXcudmlld0l0ZW1zLnRvQXJyYXkoKTtcbiAgICAgICAgY29uc3QgdmFsaWRUYXJnZXQgPSB5ZWFycy5zb21lKHllYXIgPT4gcGF0aC5pbmNsdWRlcyh5ZWFyLm5hdGl2ZUVsZW1lbnQpKTtcblxuICAgICAgICBpZiAodmFsaWRUYXJnZXQpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVmlldyA9IElneENhbGVuZGFyVmlldy5ZZWFyO1xuICAgICAgICB9XG4gICAgfVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cbiAgICBwdWJsaWMgb25ZZWFyc1ZpZXdLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzQWN0aXZhdGlvbktleShldmVudCkpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVmlldyA9IElneENhbGVuZGFyVmlldy5ZZWFyO1xuICAgICAgICB9XG4gICAgfVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHJvdGVjdGVkIGdldEZvcm1hdHRlZERhdGUoKTogeyB3ZWVrZGF5OiBzdHJpbmc7IG1vbnRoZGF5OiBzdHJpbmcgfSB7XG5cdFx0Y29uc3QgZGF0ZSA9IHRoaXMuaGVhZGVyRGF0ZTtcbiAgICAgICAgY29uc3QgbW9udGhGb3JtYXR0ZXIgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSwgeyBtb250aDogJ3Nob3J0JywgZGF5OiAnbnVtZXJpYycgfSlcbiAgICAgICAgY29uc3QgZGF5Rm9ybWF0dGVyID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUsIHsgd2Vla2RheTogJ3Nob3J0JyB9KVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdG1vbnRoZGF5OiBtb250aEZvcm1hdHRlci5mb3JtYXQoZGF0ZSksXG5cdFx0XHR3ZWVrZGF5OiBkYXlGb3JtYXR0ZXIuZm9ybWF0KGRhdGUpLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHByb3RlY3RlZCBnZXRGb3JtYXR0ZWRSYW5nZSgpOiB7IHN0YXJ0OiBzdHJpbmc7IGVuZDogc3RyaW5nIH0ge1xuXHRcdGNvbnN0IGRhdGVzID0gdGhpcy5zZWxlY3RlZERhdGVzIGFzIERhdGVbXTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRzdGFydDogdGhpcy5mb3JtYXR0ZXJSYW5nZWRheS5mb3JtYXQoZGF0ZXMuYXQoMCkpLFxuXHRcdFx0ZW5kOiB0aGlzLmZvcm1hdHRlclJhbmdlZGF5LmZvcm1hdChkYXRlcy5hdCgtMSkpXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0IHZpZXdEYXRlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9udGhWaWV3cy50b0FycmF5KClcbiAgICAgICAgICAgIC5mbGF0TWFwKHZpZXcgPT4gdmlldy5kYXRlcy50b0FycmF5KCkpXG4gICAgICAgICAgICAuZmlsdGVyKGQgPT4gZC5pc0N1cnJlbnRNb250aCk7XG4gICAgfVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIGludm9rZWQgb24gZGF0ZSBzZWxlY3Rpb25cblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHByb3RlY3RlZCBoYW5kbGVEYXRlU2VsZWN0aW9uKGRhdGU6IERhdGUpIHtcbiAgICAgICAgY29uc3Qgb3V0T2ZSYW5nZSA9ICF0aGlzLnZpZXdEYXRlcy5zb21lKGQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGQuZGF0ZS5lcXVhbFRvKGRhdGUpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChvdXRPZlJhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdEYXRlID0gZGF0ZTtcbiAgICAgICAgfVxuXG5cdFx0dGhpcy5zZWxlY3REYXRlKGRhdGUpO1xuXG4gICAgICAgIC8vIGtlZXAgdmlld3MgaW4gc3luY1xuXHRcdHRoaXMubW9udGhWaWV3cy5mb3JFYWNoKChtKSA9PiB7XG5cdFx0XHRtLnNoaWZ0S2V5ID0gdGhpcy5zaGlmdEtleTtcbiAgICAgICAgICAgIG0uc2VsZWN0ZWREYXRlcyA9IHRoaXMuc2VsZWN0ZWREYXRlcztcbiAgICAgICAgICAgIG0uY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdH0pO1xuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbiAhPT0gJ3NpbmdsZScpIHtcblx0XHQgICAgdGhpcy5zZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlcyk7XG4gICAgICAgIH0gZWxzZSB7XG5cdFx0ICAgIHRoaXMuc2VsZWN0ZWQuZW1pdCh0aGlzLnNlbGVjdGVkRGF0ZXMuYXQoMCkpO1xuICAgICAgICB9XG5cdH1cblxuXHQvKipcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZW5hbFxuXHQgKi9cblx0cHVibGljIGNoYW5nZU1vbnRoKGRhdGU6IERhdGUpIHtcblx0XHR0aGlzLnByZXZpb3VzVmlld0RhdGUgPSB0aGlzLnZpZXdEYXRlO1xuICAgICAgICB0aGlzLnZpZXdEYXRlID0gQ2FsZW5kYXJEYXkuZnJvbShkYXRlKS5hZGQoJ21vbnRoJywgLXRoaXMuYWN0aXZlVmlld0lkeCkubmF0aXZlO1xuXHRcdHRoaXMuYWN0aXZlVmlldyA9IElneENhbGVuZGFyVmlldy5Nb250aDtcbiAgICAgICAgdGhpcy5yZXNldEFjdGl2ZURhdGUoZGF0ZSk7XG5cdH1cblxuXHQvKipcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZW5hbFxuXHQgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY2hhbmdlWWVhcihkYXRlOiBEYXRlKSB7XG4gICAgICAgIHRoaXMucHJldmlvdXNWaWV3RGF0ZSA9IHRoaXMudmlld0RhdGU7XG4gICAgICAgIHRoaXMudmlld0RhdGUgPSBDYWxlbmRhckRheS5mcm9tKGRhdGUpLmFkZCgnbW9udGgnLCAtdGhpcy5hY3RpdmVWaWV3SWR4KS5uYXRpdmU7XG5cdFx0dGhpcy5hY3RpdmVWaWV3ID0gSWd4Q2FsZW5kYXJWaWV3LlllYXI7XG4gICAgfVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlbmFsXG5cdCAqL1xuXHRwdWJsaWMgdXBkYXRlWWVhcihkYXRlOiBEYXRlKSB7XG5cdFx0dGhpcy5wcmV2aW91c1ZpZXdEYXRlID0gdGhpcy52aWV3RGF0ZTtcbiAgICAgICAgdGhpcy52aWV3RGF0ZSA9IENhbGVuZGFyRGF5LmZyb20oZGF0ZSkuYWRkKCd5ZWFyJywgLXRoaXMuYWN0aXZlVmlld0lkeCkubmF0aXZlO1xuXHR9XG5cbiAgICBwdWJsaWMgdXBkYXRlQWN0aXZlRGVzY2VuZGFudChkYXRlOiBEYXRlKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlRGVzY2VuZGFudCA9IGRhdGU7XG4gICAgfVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIG9uQWN0aXZlVmlld1llYXIoZXZlbnQ6IE1vdXNlRXZlbnQsIGRhdGU6IERhdGUsIGFjdGl2ZVZpZXdJZHg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0dGhpcy5hY3RpdmVWaWV3ID0gSWd4Q2FsZW5kYXJWaWV3LlllYXI7XG5cdFx0dGhpcy5hY3RpdmVWaWV3SWR4ID0gYWN0aXZlVmlld0lkeDtcbiAgICAgICAgdGhpcy52aWV3RGF0ZSA9IGRhdGU7XG5cdH1cblxuXHQvKipcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBvbkFjdGl2ZVZpZXdZZWFyS0IoZGF0ZTogRGF0ZSwgZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGFjdGl2ZVZpZXdJZHg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuXHRcdGlmICh0aGlzLnBsYXRmb3JtLmlzQWN0aXZhdGlvbktleShldmVudCkpIHtcblx0XHQgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVmlldyA9IElneENhbGVuZGFyVmlldy5ZZWFyO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVWaWV3SWR4ID0gYWN0aXZlVmlld0lkeDtcbiAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBkYXRlO1xuXG4gICAgICAgICAgICB0aGlzLndyYXBwZXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBEZXNlbGVjdHMgZGF0ZShzKSAoYmFzZWQgb24gdGhlIHNlbGVjdGlvbiB0eXBlKS5cblx0ICpcblx0ICogQGV4YW1wbGVcblx0ICogYGBgdHlwZXNjcmlwdFxuXHQgKiAgdGhpcy5jYWxlbmRhci5kZXNlbGVjdERhdGUobmV3IERhdGUoYDIwMTgtMDYtMTJgKSk7XG5cdCAqIGBgYGBcblx0ICovXG5cdHB1YmxpYyBvdmVycmlkZSBkZXNlbGVjdERhdGUodmFsdWU/OiBEYXRlIHwgRGF0ZVtdIHwgc3RyaW5nKSB7XG5cdFx0c3VwZXIuZGVzZWxlY3REYXRlKHZhbHVlKTtcblxuXHRcdHRoaXMubW9udGhWaWV3cy5mb3JFYWNoKChtKSA9PiB7XG5cdFx0XHRtLnNlbGVjdGVkRGF0ZXMgPSB0aGlzLnNlbGVjdGVkRGF0ZXM7XG5cdFx0XHRtLnJhbmdlU3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgbS5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKHRoaXMuc2VsZWN0ZWREYXRlcyk7XG5cdH1cblxuXG5cdC8qKlxuXHQgKiBHZXR0ZXIgZm9yIHRoZSBjb250ZXh0IG9iamVjdCBpbnNpZGUgdGhlIGNhbGVuZGFyIHRlbXBsYXRlcy5cblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBnZXRDb250ZXh0KGk6IG51bWJlcikge1xuICAgICAgICBjb25zdCBkYXRlID0gQ2FsZW5kYXJEYXkuZnJvbSh0aGlzLnZpZXdEYXRlKS5hZGQoJ21vbnRoJywgaSkubmF0aXZlO1xuXHRcdHJldHVybiB0aGlzLmdlbmVyYXRlQ29udGV4dChkYXRlLCBpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cbiAgICAvLyBUT0RPOiBTZWUgaWYgdGhpcyBjYW4gYmUgaW5jb3Jwb3JhdGVkIGluIHRoZSBEYXlzVmlldyBkaXJlY3RseVxuXHRwdWJsaWMgcmVzZXRBY3RpdmVEYXRlKGRhdGU6IERhdGUpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gQ2FsZW5kYXJEYXkuZnJvbSh0aGlzLmFjdGl2ZURhdGUpLnNldCh7XG4gICAgICAgICAgICBtb250aDogZGF0ZS5nZXRNb250aCgpLFxuICAgICAgICAgICAgeWVhcjogZGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgIH0pO1xuICAgICAgICBjb25zdCBvdXRPZlJhbmdlID1cbiAgICAgICAgICAgICFhcmVTYW1lTW9udGgoZGF0ZSwgdGFyZ2V0KSB8fFxuICAgICAgICAgICAgaXNEYXRlSW5SYW5nZXModGFyZ2V0LCB0aGlzLmRpc2FibGVkRGF0ZXMpO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IG91dE9mUmFuZ2UgPyBkYXRlIDogdGFyZ2V0Lm5hdGl2ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmtleWJvYXJkTmF2aWdhdGlvbi5kZXRhY2hLZXlib2FyZEhhbmRsZXJzKCk7XG4gICAgICAgIHRoaXMud3JhcHBlcj8ubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMub25XcmFwcGVyRm9jdXMpO1xuICAgICAgICB0aGlzLndyYXBwZXI/Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMub25XcmFwcGVyQmx1cik7XG5cdH1cblxuXHQvKipcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBnZXRQcmV2TW9udGgoZGF0ZTogRGF0ZSk6IERhdGUge1xuXHRcdHJldHVybiBDYWxlbmRhckRheS5mcm9tKGRhdGUpLmFkZCgnbW9udGgnLCAtMSkubmF0aXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgZ2V0TmV4dE1vbnRoKGRhdGU6IERhdGUsIHZpZXdJbmRleDogbnVtYmVyKTogRGF0ZSB7XG4gICAgICAgIHJldHVybiBDYWxlbmRhckRheS5mcm9tKGRhdGUpLmFkZCgnbW9udGgnLCB2aWV3SW5kZXgpLm5hdGl2ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIZWxwZXIgbWV0aG9kIGJ1aWxkaW5nIGFuZCByZXR1cm5pbmcgdGhlIGNvbnRleHQgb2JqZWN0IGluc2lkZSB0aGUgY2FsZW5kYXIgdGVtcGxhdGVzLlxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHJpdmF0ZSBnZW5lcmF0ZUNvbnRleHQodmFsdWU6IERhdGUgfCBEYXRlW10sIGk/OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgY29uc3RydWN0ID0gKGRhdGU6IERhdGUsIGluZGV4OiBudW1iZXIpID0+ICh7XG4gICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgLi4uZm9ybWF0VG9QYXJ0cyhkYXRlLCB0aGlzLmxvY2FsZSwgdGhpcy5mb3JtYXRPcHRpb25zLCBbXG4gICAgICAgICAgICAgICAgXCJlcmFcIixcbiAgICAgICAgICAgICAgICBcInllYXJcIixcbiAgICAgICAgICAgICAgICBcIm1vbnRoXCIsXG4gICAgICAgICAgICAgICAgXCJkYXlcIixcbiAgICAgICAgICAgICAgICBcIndlZWtkYXlcIixcbiAgICAgICAgICAgIF0pLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBmb3JtYXRPYmplY3QgPSBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgICAgICAgPyB2YWx1ZS5tYXAoKGRhdGUsIGluZGV4KSA9PiBjb25zdHJ1Y3QoZGF0ZSwgaW5kZXgpKVxuICAgICAgICAgICAgOiBjb25zdHJ1Y3QodmFsdWUsIGkpO1xuXG4gICAgICAgIHJldHVybiB7ICRpbXBsaWNpdDogZm9ybWF0T2JqZWN0IH07XG5cdH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSBsZXQtcmVzdWx0ICNkZWZhdWx0SGVhZGVyVGl0bGU+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGlvbiA9PT0gJ3NpbmdsZSdcIj5cbiAgICAgICAgPHNwYW4+e3sgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9zZWxlY3RfZGF0ZSB9fTwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uID09PSAncmFuZ2UnXCI+XG4gICAgICAgIDxzcGFuPnt7IHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfcmFuZ2VfcGxhY2Vob2xkZXIgfX08L3NwYW4+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgbGV0LXJlc3VsdCAjZGVmYXVsdEhlYWRlckRhdGU+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGlvbiA9PT0gJ3NpbmdsZSdcIj5cbiAgICAgICAgPHNwYW4+e3sgZ2V0Rm9ybWF0dGVkRGF0ZSgpLndlZWtkYXkgfX0sJm5ic3A7PC9zcGFuPlxuICAgICAgICA8c3Bhbj57eyBnZXRGb3JtYXR0ZWREYXRlKCkubW9udGhkYXkgfX08L3NwYW4+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGlvbiA9PT0gJ3JhbmdlJ1wiPlxuICAgICAgICA8c3Bhbj57eyBzZWxlY3RlZERhdGVzLmxlbmd0aCA9PT0gMCA/ICdTdGFydCcgOiBnZXRGb3JtYXR0ZWRSYW5nZSgpLnN0YXJ0fX08L3NwYW4+XG4gICAgICAgIDxzcGFuPiZuYnNwOy0mbmJzcDs8L3NwYW4+XG4gICAgICAgIDxzcGFuPnt7IHNlbGVjdGVkRGF0ZXMubGVuZ3RoIDw9IDEgPyAnRW5kJyA6IGdldEZvcm1hdHRlZFJhbmdlKCkuZW5kfX08L3NwYW4+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIE1vbnRoIC0tPlxuPG5nLXRlbXBsYXRlICNkZWZhdWx0TW9udGggbGV0LW9iaj5cbiAgICA8c3BhblxuICAgICAgICAjbW9udGhzQnRuXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihvYmouZGF0ZSB8IGRhdGU6ICdMTExMJykgKyAnLCAnICsgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9zZWxlY3RfbW9udGhcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbkFjdGl2ZVZpZXdZZWFyS0Iob2JqLmRhdGUsICRldmVudCwgb2JqLmluZGV4KVwiXG4gICAgICAgIChtb3VzZWRvd24pPVwib25BY3RpdmVWaWV3WWVhcigkZXZlbnQsIG9iai5kYXRlLCBvYmouaW5kZXgpXCJcbiAgICAgICAgY2xhc3M9XCJpZ3gtY2FsZW5kYXItcGlja2VyX19kYXRlXCI+XG4gICAgICAgIHt7IGZvcm1hdHRlZE1vbnRoKG9iai5kYXRlKSB9fVxuICAgIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gWWVhciAtLT5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFllYXIgbGV0LW9iaj5cbiAgICA8c3BhbiAqbmdJZj1cImFjdGl2ZVZpZXcgPT09ICd5ZWFyJ1wiIGNsYXNzPVwiaWd4LWNhbGVuZGFyX19hcmlhLW9mZi1zY3JlZW5cIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj57eyBmb3JtYXR0ZWRZZWFyKG9iai5kYXRlKSB9fTwvc3Bhbj5cbiAgICA8c3BhblxuICAgICAgICAjeWVhcnNCdG5cbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKG9iai5kYXRlIHwgZGF0ZTogJ3l5eXknKSArICcsICcgKyByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX3NlbGVjdF95ZWFyXCJcbiAgICAgICAgKGtleWRvd24pPVwib25BY3RpdmVWaWV3RGVjYWRlS0Iob2JqLmRhdGUsICRldmVudCwgb2JqLmluZGV4KVwiXG4gICAgICAgIChtb3VzZWRvd24pPVwib25BY3RpdmVWaWV3RGVjYWRlKCRldmVudCwgb2JqLmRhdGUsIG9iai5pbmRleClcIlxuICAgICAgICBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX2RhdGVcIj5cbiAgICAgICAge3sgZm9ybWF0dGVkWWVhcihvYmouZGF0ZSkgfX1cbiAgICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIE1vbnRoIFllYXIgLS0+XG48bmctdGVtcGxhdGUgI2RlZmF1bHRNb250aFllYXIgbGV0LW9iaiBsZXQtcmVzdWx0PlxuICAgIDxzcGFuICpuZ0lmPVwibW9udGhzVmlld051bWJlciA8IDIgfHwgb2JqLmluZGV4IDwgMVwiIGNsYXNzPVwiaWd4LWNhbGVuZGFyX19hcmlhLW9mZi1zY3JlZW5cIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICAgICAgICAgIHt7IG1vbnRoc1ZpZXdOdW1iZXIgPiAxID9cbiAgICAgICAgKHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfZmlyc3RfcGlja2VyX29mLnJlcGxhY2UoJ3swfScsIG1vbnRoc1ZpZXdOdW1iZXIudG9TdHJpbmcoKSkgKyAnICcgK1xuICAgICAgICAgICAgKG9iai5kYXRlIHwgZGF0ZTogJ0xMTEwgeXl5eScpKSA6XG4gICAgICAgIHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfc2VsZWN0ZWRfbW9udGhfaXMgKyAob2JqLmRhdGUgfCBkYXRlOiAnTExMTCB5eXl5Jyl9fVxuICAgIDwvc3Bhbj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGVmYXVsdE1vbnRoOyBjb250ZXh0OiB7JGltcGxpY2l0OiBvYmp9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRlZmF1bHRZZWFyOyBjb250ZXh0OiB7JGltcGxpY2l0OiBvYmp9XCI+PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIERlY2FkZSAtLT5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdERlY2FkZT5cbiAgICA8c3Bhbj57eyBnZXREZWNhZGVSYW5nZSgpLnN0YXJ0IH19IC0ge3sgZ2V0RGVjYWRlUmFuZ2UoKS5lbmQgfX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFByZXZpb3VzIGFycm93IGljb24gLS0+XG48bmctdGVtcGxhdGUgI3ByZXZBcnJvdyBsZXQtb2JqPlxuICAgIDxpZ3gtaWNvbiBhcmlhLWhpZGRlbj1cInRydWVcIiBmYW1pbHk9XCJkZWZhdWx0XCIgbmFtZT1cImFycm93X3ByZXZcIj48L2lneC1pY29uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBOZXh0IGFycm93IGljb24gLS0+XG48bmctdGVtcGxhdGUgI25leHRBcnJvdyBsZXQtb2JqPlxuICAgIDxpZ3gtaWNvbiBhcmlhLWhpZGRlbj1cInRydWVcIiBmYW1pbHk9XCJkZWZhdWx0XCIgbmFtZT1cImFycm93X25leHRcIj48L2lneC1pY29uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBQcmV2aW91cyBwaWNrZXIgYnV0dG9uIC0tPlxuPG5nLXRlbXBsYXRlICNwcmV2UGFnZUJ1dHRvbiBsZXQtb2JqPlxuICAgIDxkaXZcbiAgICAgICAgI3ByZXZQYWdlQnRuXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgIGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlcl9fcHJldlwiXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInByZXZOYXZMYWJlbCgoZ2V0UHJldk1vbnRoKHZpZXdEYXRlKSB8IGRhdGU6ICdMTExMJykpXCJcbiAgICAgICAgZGF0YS1hY3Rpb249XCJwcmV2XCJcbiAgICAgICAgaWd4Q2FsZW5kYXJTY3JvbGxQYWdlXG4gICAgICAgIFtzdGFydFNjcm9sbF09XCJzdGFydFByZXZQYWdlU2Nyb2xsXCJcbiAgICAgICAgW3N0b3BTY3JvbGxdPVwic3RvcFBhZ2VTY3JvbGxcIlxuICAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInByZXZBcnJvd1wiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBOZXh0IHBpY2tlciBidXR0b24gLS0+XG48bmctdGVtcGxhdGUgI25leHRQYWdlQnV0dG9uIGxldC1vYmo+XG4gICAgPGRpdlxuICAgICAgICAjbmV4dFBhZ2VCdG5cbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgY2xhc3M9XCJpZ3gtY2FsZW5kYXItcGlja2VyX19uZXh0XCJcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibmV4dE5hdkxhYmVsKChnZXROZXh0TW9udGgodmlld0RhdGUsIG1vbnRoc1ZpZXdOdW1iZXIpIHwgZGF0ZTogJ0xMTEwnKSlcIlxuICAgICAgICBkYXRhLWFjdGlvbj1cIm5leHRcIlxuICAgICAgICBpZ3hDYWxlbmRhclNjcm9sbFBhZ2VcbiAgICAgICAgW3N0YXJ0U2Nyb2xsXT1cInN0YXJ0TmV4dFBhZ2VTY3JvbGxcIlxuICAgICAgICBbc3RvcFNjcm9sbF09XCJzdG9wUGFnZVNjcm9sbFwiXG4gICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibmV4dEFycm93XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFBJQ0tFUiBJTiBEQVlTIC0tPlxuPG5nLXRlbXBsYXRlICNjYWxlbmRhckRheXNQaWNrZXIgbGV0LWk+XG4gICAgPHNlY3Rpb24gY2xhc3M9XCJpZ3gtY2FsZW5kYXItcGlja2VyXCIgW3N0eWxlLi0tY2FsZW5kYXItcm93LXN0YXJ0XT1cIjEgKyAoMiAqIGkpXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtY2FsZW5kYXItcGlja2VyX19kYXRlc1wiIFthdHRyLmRhdGEtbW9udGhdPVwiaSB8IElneEdldFZpZXdEYXRlOnZpZXdEYXRlOmZhbHNlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic3ViaGVhZGVyVGVtcGxhdGUgPyBzdWJoZWFkZXJUZW1wbGF0ZSA6IGRlZmF1bHRNb250aFllYXI7IGNvbnRleHQ6IGdldENvbnRleHQoaSlcIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJpZ3gtY2FsZW5kYXItcGlja2VyX19uYXZcIlxuICAgICAgICAgICAgKm5nSWY9XCJ0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcgPyBpID09PSBtb250aHNWaWV3TnVtYmVyIC0gMSA6IGkgPT09IDBcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJldlBhZ2VCdXR0b25cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJuZXh0UGFnZUJ1dHRvblwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFBJQ0tFUiBJTiBNT05USFMgLS0+XG48bmctdGVtcGxhdGUgI2NhbGVuZGFyWWVhclBpY2tlcj5cbiAgICA8c2VjdGlvbiBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX2RhdGVzXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdWJoZWFkZXJUZW1wbGF0ZSA/IHN1YmhlYWRlclRlbXBsYXRlIDogZGVmYXVsdFllYXI7IGNvbnRleHQ6IGdldENvbnRleHQoMClcIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX25hdlwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInByZXZQYWdlQnV0dG9uXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibmV4dFBhZ2VCdXR0b25cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9zZWN0aW9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBQSUNLRVIgSU4gWUVBUlMgLS0+XG48bmctdGVtcGxhdGUgI2NhbGVuZGFyRGVjYWRlUGlja2VyPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlcl9fZGF0ZXNcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdWJoZWFkZXJUZW1wbGF0ZSA/IHN1YmhlYWRlclRlbXBsYXRlIDogZGVmYXVsdERlY2FkZTtcIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX25hdlwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInByZXZQYWdlQnV0dG9uXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibmV4dFBhZ2VCdXR0b25cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9zZWN0aW9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuXG48aGVhZGVyXG4gICAgYXJpYS1sYWJlbGxlZGJ5PVwiaWd4LWFyaWEtY2FsZW5kYXItdGl0bGUtbW9udGggaWd4LWFyaWEtY2FsZW5kYXItdGl0bGUteWVhclwiXG4gICAgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2hlYWRlclwiXG4gICAgKm5nSWY9XCJzZWxlY3Rpb24gPT09ICdzaW5nbGUnICYmIGhhc0hlYWRlciB8fCBzZWxlY3Rpb24gPT09ICdyYW5nZScgJiYgaGFzSGVhZGVyXCI+XG4gICAgPGg1IGlkPVwiaWd4LWFyaWEtY2FsZW5kYXItdGl0bGUteWVhclwiIGNsYXNzPVwiaWd4LWNhbGVuZGFyX19oZWFkZXIteWVhclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGl0bGVUZW1wbGF0ZSA/PyBkZWZhdWx0SGVhZGVyVGl0bGU7IGNvbnRleHQ6IGhlYWRlckNvbnRleHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2g1PlxuICAgIDxoMiBpZD1cImlneC1hcmlhLWNhbGVuZGFyLXRpdGxlLW1vbnRoXCIgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2hlYWRlci1kYXRlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJUZW1wbGF0ZSA/IGhlYWRlclRlbXBsYXRlIDogZGVmYXVsdEhlYWRlckRhdGU7IGNvbnRleHQ6IGhlYWRlckNvbnRleHRcIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9oMj5cbjwvaGVhZGVyPlxuXG5cbjxkaXZcbiAgICAjd3JhcHBlclxuICAgIFtzdHlsZS4tLWNhbGVuZGFyLW1vbnRoc109XCJtb250aHNWaWV3TnVtYmVyXCJcbiAgICBbdGFiSW5kZXhdPVwiMFwiXG4gICAgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX3dyYXBwZXJcIlxuICAgIFtjbGFzcy5pZ3gtY2FsZW5kYXJfX3dyYXBwZXItLXZlcnRpY2FsXT1cIm9yaWVudGF0aW9uID09PSAndmVydGljYWwnXCJcbiAgICBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwiYWN0aXZlRGVzY2VuZGFudFwiXG4gICAgW2F0dHIuYXJpYS1tdWx0aXNlbGVjdGFibGVdPVwic2VsZWN0aW9uICE9PSAnc2luZ2xlJ1wiXG4gICAgYXJpYS1sYWJlbGxlZGJ5PVwiY2FsZW5kYXItZGVzY1wiXG4gICAgcm9sZT1cImdyaWRcIlxuICAgID5cbiAgICA8Y2FwdGlvbiBpZD1cImNhbGVuZGFyLWRlc2NcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2FyaWEtb2ZmLXNjcmVlblwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uID09PSAnbXVsdGknXCI+XG4gICAgICAgICAgICB7eyBtb250aHNWaWV3TnVtYmVyICYmIG1vbnRoc1ZpZXdOdW1iZXIgPiAxID9cbiAgICAgICAgICAgIHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfbXVsdGlfc2VsZWN0aW9uLnJlcGxhY2UoJ3swfScsIG1vbnRoc1ZpZXdOdW1iZXIudG9TdHJpbmcoKSkgOlxuICAgICAgICAgICAgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9zaW5ndWxhcl9tdWx0aV9zZWxlY3Rpb259fVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGlvbiA9PT0gJ3JhbmdlJ1wiPlxuICAgICAgICAgICAge3sgbW9udGhzVmlld051bWJlciAmJiBtb250aHNWaWV3TnVtYmVyID4gMSA/XG4gICAgICAgICAgICByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX3JhbmdlX3NlbGVjdGlvbi5yZXBsYWNlKCd7MH0nLCBtb250aHNWaWV3TnVtYmVyLnRvU3RyaW5nKCkpIDpcbiAgICAgICAgICAgIHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfc2luZ3VsYXJfcmFuZ2Vfc2VsZWN0aW9ufX1cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3Rpb24gPT09ICdzaW5nbGUnXCI+XG4gICAgICAgICAgICB7eyBtb250aHNWaWV3TnVtYmVyICYmIG1vbnRoc1ZpZXdOdW1iZXIgPiAxID9cbiAgICAgICAgICAgIHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfc2luZ2xlX3NlbGVjdGlvbi5yZXBsYWNlKCd7MH0nLCBtb250aHNWaWV3TnVtYmVyLnRvU3RyaW5nKCkpIDpcbiAgICAgICAgICAgIHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfc2luZ3VsYXJfc2luZ2xlX3NlbGVjdGlvbn19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvY2FwdGlvbj5cbiAgICA8c2VjdGlvblxuICAgICAgICBjbGFzcz1cImlneC1jYWxlbmRhcl9fcGlja2Vyc1wiXG4gICAgICAgIFtjbGFzcy5pZ3gtY2FsZW5kYXJfX3BpY2tlcnMtLWRheXNdPVwiaXNEZWZhdWx0Vmlld1wiXG4gICAgICAgIFtjbGFzcy5pZ3gtY2FsZW5kYXJfX3BpY2tlcnMtLXZlcnRpY2FsXT1cIm9yaWVudGF0aW9uID09PSAndmVydGljYWwnXCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0RlZmF1bHRWaWV3XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB2aWV3IG9mIG1vbnRoc1ZpZXdOdW1iZXIgfCBJZ3hNb250aFZpZXdTbG90czsgaW5kZXggYXMgaVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjYWxlbmRhckRheXNQaWNrZXI7IGNvbnRleHQ6IHskaW1wbGljaXQ6IGl9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzWWVhclZpZXdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjYWxlbmRhclllYXJQaWNrZXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRGVjYWRlVmlld1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNhbGVuZGFyRGVjYWRlUGlja2VyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvc2VjdGlvbj5cblxuICAgIDxzZWN0aW9uIGNsYXNzPVwiaWd4LWNhbGVuZGFyX19ib2R5XCIgW2NsYXNzLmlneC1jYWxlbmRhcl9fYm9keS0tdmVydGljYWxdPVwib3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCdcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0RlZmF1bHRWaWV3XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB2aWV3IG9mIG1vbnRoc1ZpZXdOdW1iZXIgfCBJZ3hNb250aFZpZXdTbG90czsgaW5kZXggYXMgaVwiPlxuICAgICAgICAgICAgICAgIDxpZ3gtZGF5cy12aWV3XG4gICAgICAgICAgICAgICAgICAgICNkYXlzXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJyb3dncm91cFwiXG4gICAgICAgICAgICAgICAgICAgIFt0YWJJbmRleF09XCItMVwiXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3Rpb25dPVwic2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvY2FsZV09XCJsb2NhbGVcIlxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICBbKGFjdGl2ZURhdGUpXT1cImFjdGl2ZURhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbKHByZXZpZXdSYW5nZURhdGUpXT1cInByZXZpZXdSYW5nZURhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbdmlld0RhdGVdPVwiaSB8IElneEdldFZpZXdEYXRlOiB2aWV3RGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFt3ZWVrU3RhcnRdPVwid2Vla1N0YXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1hdE9wdGlvbnNdPVwiZm9ybWF0T3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtYXRWaWV3c109XCJmb3JtYXRWaWV3c1wiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZERhdGVzXT1cImRpc2FibGVkRGF0ZXNcIlxuICAgICAgICAgICAgICAgICAgICBbc3BlY2lhbERhdGVzXT1cInNwZWNpYWxEYXRlc1wiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS4tLWNhbGVuZGFyLXJvdy1zdGFydF09XCIoaSArIDEpICogMlwiXG4gICAgICAgICAgICAgICAgICAgIFtoaWRlTGVhZGluZ0RheXNdPVwiaGlkZU91dHNpZGVEYXlzIHx8IGkgIT09IDBcIlxuICAgICAgICAgICAgICAgICAgICBbaGlkZVRyYWlsaW5nRGF5c109XCJoaWRlT3V0c2lkZURheXMgfHwgaSAhPT0gbW9udGhzVmlld051bWJlciAtIDFcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd1dlZWtOdW1iZXJzXT1cInNob3dXZWVrTnVtYmVyc1wiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93QWN0aXZlRGF5XT1cInNob3dBY3RpdmVEYXlcIlxuICAgICAgICAgICAgICAgICAgICBbc3RhbmRhbG9uZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIChzd2lwZXJpZ2h0KT1cInByZXZpb3VzUGFnZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgKHN3aXBlbGVmdCk9XCJuZXh0UGFnZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgKGRhdGVTZWxlY3RlZCk9XCJoYW5kbGVEYXRlU2VsZWN0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+XG4gICAgICAgICAgICAgICAgPC9pZ3gtZGF5cy12aWV3PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1llYXJWaWV3XCI+XG4gICAgICAgICAgICA8aWd4LW1vbnRocy12aWV3XG4gICAgICAgICAgICAgICAgI21vbnRoc1xuICAgICAgICAgICAgICAgIHJvbGU9XCJyb3dncm91cFwiXG4gICAgICAgICAgICAgICAgW3RhYkluZGV4XT1cIi0xXCJcbiAgICAgICAgICAgICAgICBbZGF0ZV09XCJ2aWV3RGF0ZVwiXG4gICAgICAgICAgICAgICAgW2xvY2FsZV09XCJsb2NhbGVcIlxuICAgICAgICAgICAgICAgIFtmb3JtYXRWaWV3XT1cImZvcm1hdFZpZXdzLm1vbnRoXCJcbiAgICAgICAgICAgICAgICBbbW9udGhGb3JtYXRdPVwiZm9ybWF0T3B0aW9ucy5tb250aFwiXG4gICAgICAgICAgICAgICAgW3Nob3dBY3RpdmVdPVwic2hvd0FjdGl2ZURheVwiXG4gICAgICAgICAgICAgICAgW3N0YW5kYWxvbmVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIChzd2lwZXJpZ2h0KT1cInByZXZpb3VzUGFnZSgpXCJcbiAgICAgICAgICAgICAgICAoc3dpcGVsZWZ0KT1cIm5leHRQYWdlKClcIlxuICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlZCk9XCJ1cGRhdGVZZWFyKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChhY3RpdmVEYXRlQ2hhbmdlZCk9XCJ1cGRhdGVBY3RpdmVEZXNjZW5kYW50KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJjaGFuZ2VNb250aCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+XG4gICAgICAgICAgICA8L2lneC1tb250aHMtdmlldz5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRGVjYWRlVmlld1wiPlxuICAgICAgICAgICAgPGlneC15ZWFycy12aWV3XG4gICAgICAgICAgICAgICAgI2RlY2FkZVxuICAgICAgICAgICAgICAgIHJvbGU9XCJyb3dncm91cFwiXG4gICAgICAgICAgICAgICAgW3RhYkluZGV4XT1cIi0xXCJcbiAgICAgICAgICAgICAgICBbZGF0ZV09XCJ2aWV3RGF0ZVwiXG4gICAgICAgICAgICAgICAgW2xvY2FsZV09XCJsb2NhbGVcIlxuICAgICAgICAgICAgICAgIFtmb3JtYXRWaWV3XT1cImZvcm1hdFZpZXdzLnllYXJcIlxuICAgICAgICAgICAgICAgIFt5ZWFyRm9ybWF0XT1cImZvcm1hdE9wdGlvbnMueWVhclwiXG4gICAgICAgICAgICAgICAgW3Nob3dBY3RpdmVdPVwic2hvd0FjdGl2ZURheVwiXG4gICAgICAgICAgICAgICAgW3N0YW5kYWxvbmVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIChzd2lwZXJpZ2h0KT1cInByZXZpb3VzUGFnZSgpXCJcbiAgICAgICAgICAgICAgICAoc3dpcGVsZWZ0KT1cIm5leHRQYWdlKClcIlxuICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlZCk9XCJ1cGRhdGVZZWFyKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChhY3RpdmVEYXRlQ2hhbmdlZCk9XCJ1cGRhdGVBY3RpdmVEZXNjZW5kYW50KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJjaGFuZ2VZZWFyKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICAgICAgICAgIDwvaWd4LXllYXJzLXZpZXc+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvc2VjdGlvbj5cbjwvZGl2PlxuIl19
|