@dereekb/dbx-form 11.1.8 → 12.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/calendar/lib/calendar.module.d.ts +1 -14
- package/calendar/lib/calendar.schedule.selection.cell.component.d.ts +8 -5
- package/calendar/lib/calendar.schedule.selection.component.d.ts +13 -10
- package/calendar/lib/calendar.schedule.selection.d.ts +6 -6
- package/calendar/lib/calendar.schedule.selection.days.component.d.ts +1 -1
- package/calendar/lib/calendar.schedule.selection.days.form.component.d.ts +1 -1
- package/calendar/lib/calendar.schedule.selection.dialog.button.component.d.ts +4 -4
- package/calendar/lib/calendar.schedule.selection.dialog.component.d.ts +5 -5
- package/calendar/lib/calendar.schedule.selection.popover.button.component.d.ts +4 -2
- package/calendar/lib/calendar.schedule.selection.popover.component.d.ts +1 -1
- package/calendar/lib/calendar.schedule.selection.popover.content.component.d.ts +1 -1
- package/calendar/lib/calendar.schedule.selection.range.component.d.ts +19 -17
- package/calendar/lib/calendar.schedule.selection.store.d.ts +2 -2
- package/calendar/lib/calendar.schedule.selection.store.provide.d.ts +1 -1
- package/calendar/lib/calendar.schedule.selection.toggle.button.component.d.ts +8 -12
- package/calendar/lib/field/schedule/calendar.schedule.field.component.d.ts +22 -22
- package/calendar/lib/field/schedule/calendar.schedule.module.d.ts +2 -10
- package/esm2022/calendar/lib/calendar.module.mjs +19 -101
- package/esm2022/calendar/lib/calendar.schedule.selection.cell.component.mjs +27 -28
- package/esm2022/calendar/lib/calendar.schedule.selection.component.mjs +38 -55
- package/esm2022/calendar/lib/calendar.schedule.selection.days.component.mjs +17 -13
- package/esm2022/calendar/lib/calendar.schedule.selection.days.form.component.mjs +11 -12
- package/esm2022/calendar/lib/calendar.schedule.selection.dialog.button.component.mjs +18 -21
- package/esm2022/calendar/lib/calendar.schedule.selection.dialog.component.mjs +12 -9
- package/esm2022/calendar/lib/calendar.schedule.selection.mjs +3 -2
- package/esm2022/calendar/lib/calendar.schedule.selection.popover.button.component.mjs +22 -18
- package/esm2022/calendar/lib/calendar.schedule.selection.popover.component.mjs +12 -9
- package/esm2022/calendar/lib/calendar.schedule.selection.popover.content.component.mjs +13 -10
- package/esm2022/calendar/lib/calendar.schedule.selection.range.component.mjs +52 -70
- package/esm2022/calendar/lib/calendar.schedule.selection.store.mjs +5 -5
- package/esm2022/calendar/lib/calendar.schedule.selection.store.provide.mjs +9 -8
- package/esm2022/calendar/lib/calendar.schedule.selection.toggle.button.component.mjs +48 -50
- package/esm2022/calendar/lib/field/schedule/calendar.schedule.field.component.mjs +17 -14
- package/esm2022/calendar/lib/field/schedule/calendar.schedule.module.mjs +8 -40
- package/esm2022/lib/form/action/form.action.directive.mjs +58 -55
- package/esm2022/lib/form/action/form.action.module.mjs +9 -9
- package/esm2022/lib/form/action/transition/form.action.transition.module.mjs +9 -8
- package/esm2022/lib/form/action/transition/form.action.transition.safety.directive.mjs +14 -11
- package/esm2022/lib/form/form.mjs +1 -1
- package/esm2022/lib/form/form.module.mjs +4 -4
- package/esm2022/lib/form/io/form.changes.directive.mjs +11 -16
- package/esm2022/lib/form/io/form.input.directive.mjs +24 -38
- package/esm2022/lib/form/io/form.io.module.mjs +15 -9
- package/esm2022/lib/form/io/form.loading.directive.mjs +22 -42
- package/esm2022/lib/form.module.mjs +4 -4
- package/esm2022/lib/form.providers.mjs +32 -0
- package/esm2022/lib/formly/field/checklist/checklist.field.mjs +5 -5
- package/esm2022/lib/formly/field/checklist/checklist.item.field.component.mjs +51 -47
- package/esm2022/lib/formly/field/checklist/checklist.item.field.content.default.component.mjs +41 -29
- package/esm2022/lib/formly/field/checklist/checklist.item.field.mjs +3 -3
- package/esm2022/lib/formly/field/checklist/checklist.item.field.module.mjs +8 -45
- package/esm2022/lib/formly/field/checklist/checklist.item.mjs +1 -1
- package/esm2022/lib/formly/field/component/component.field.component.mjs +11 -8
- package/esm2022/lib/formly/field/component/component.field.module.mjs +8 -14
- package/esm2022/lib/formly/field/field.mjs +1 -1
- package/esm2022/lib/formly/field/form.field.module.mjs +4 -4
- package/esm2022/lib/formly/field/selection/list/list.field.component.mjs +17 -14
- package/esm2022/lib/formly/field/selection/list/list.field.module.mjs +8 -58
- package/esm2022/lib/formly/field/selection/pickable/pickable.chip.field.component.mjs +17 -13
- package/esm2022/lib/formly/field/selection/pickable/pickable.field.directive.mjs +16 -16
- package/esm2022/lib/formly/field/selection/pickable/pickable.field.module.mjs +8 -68
- package/esm2022/lib/formly/field/selection/pickable/pickable.list.field.component.mjs +71 -54
- package/esm2022/lib/formly/field/selection/pickable/pickable.util.mjs +2 -2
- package/esm2022/lib/formly/field/selection/searchable/searchable.chip.field.component.mjs +21 -16
- package/esm2022/lib/formly/field/selection/searchable/searchable.field.autocomplete.item.component.mjs +51 -49
- package/esm2022/lib/formly/field/selection/searchable/searchable.field.directive.mjs +35 -27
- package/esm2022/lib/formly/field/selection/searchable/searchable.field.mjs +1 -1
- package/esm2022/lib/formly/field/selection/searchable/searchable.field.module.mjs +8 -65
- package/esm2022/lib/formly/field/selection/searchable/searchable.mjs +1 -1
- package/esm2022/lib/formly/field/selection/searchable/searchable.text.field.component.mjs +48 -30
- package/esm2022/lib/formly/field/selection/searchable/text.chip.field.mjs +2 -2
- package/esm2022/lib/formly/field/selection/selection.field.mjs +1 -1
- package/esm2022/lib/formly/field/selection/selection.mjs +1 -1
- package/esm2022/lib/formly/field/selection/selection.module.mjs +4 -4
- package/esm2022/lib/formly/field/selection/sourceselect/sourceselect.field.component.mjs +20 -21
- package/esm2022/lib/formly/field/selection/sourceselect/sourceselect.field.module.mjs +6 -73
- package/esm2022/lib/formly/field/selection/sourceselect/sourceselect.mjs +1 -1
- package/esm2022/lib/formly/field/texteditor/texteditor.field.component.mjs +37 -22
- package/esm2022/lib/formly/field/texteditor/texteditor.field.mjs +2 -2
- package/esm2022/lib/formly/field/texteditor/texteditor.field.module.mjs +8 -33
- package/esm2022/lib/formly/field/value/array/array.field.component.mjs +72 -50
- package/esm2022/lib/formly/field/value/array/array.field.module.mjs +8 -44
- package/esm2022/lib/formly/field/value/boolean/boolean.field.mjs +2 -2
- package/esm2022/lib/formly/field/value/boolean/boolean.field.module.mjs +4 -4
- package/esm2022/lib/formly/field/value/date/date.field.module.mjs +5 -9
- package/esm2022/lib/formly/field/value/date/date.value.mjs +1 -1
- package/esm2022/lib/formly/field/value/date/datetime.field.component.mjs +8 -8
- package/esm2022/lib/formly/field/value/date/datetime.field.service.mjs +4 -4
- package/esm2022/lib/formly/field/value/date/datetime.mjs +1 -1
- package/esm2022/lib/formly/field/value/date/fixeddaterange.field.component.mjs +8 -8
- package/esm2022/lib/formly/field/value/number/number.field.mjs +1 -1
- package/esm2022/lib/formly/field/value/number/number.field.module.mjs +4 -4
- package/esm2022/lib/formly/field/value/phone/phone.field.component.mjs +4 -4
- package/esm2022/lib/formly/field/value/phone/phone.field.module.mjs +4 -4
- package/esm2022/lib/formly/field/value/text/text.address.field.mjs +1 -1
- package/esm2022/lib/formly/field/value/text/text.field.mjs +1 -1
- package/esm2022/lib/formly/field/value/text/text.field.module.mjs +4 -4
- package/esm2022/lib/formly/field/value/value.module.mjs +4 -4
- package/esm2022/lib/formly/field/wrapper/autotouch.wrapper.component.mjs +9 -7
- package/esm2022/lib/formly/field/wrapper/expand.wrapper.component.mjs +19 -24
- package/esm2022/lib/formly/field/wrapper/expand.wrapper.delegate.mjs +7 -4
- package/esm2022/lib/formly/field/wrapper/flex.wrapper.component.mjs +11 -8
- package/esm2022/lib/formly/field/wrapper/form.wrapper.module.mjs +8 -39
- package/esm2022/lib/formly/field/wrapper/index.mjs +2 -1
- package/esm2022/lib/formly/field/wrapper/info.wrapper.component.mjs +19 -16
- package/esm2022/lib/formly/field/wrapper/section.wrapper.component.mjs +11 -7
- package/esm2022/lib/formly/field/wrapper/style.wrapper.component.mjs +16 -11
- package/esm2022/lib/formly/field/wrapper/subsection.wrapper.component.mjs +11 -8
- package/esm2022/lib/formly/field/wrapper/toggle.wrapper.component.mjs +21 -17
- package/esm2022/lib/formly/field/wrapper/working.wrapper.component.mjs +11 -8
- package/esm2022/lib/formly/field/wrapper/wrapper.mjs +1 -1
- package/esm2022/lib/formly/form/form.form.module.mjs +4 -4
- package/esm2022/lib/formly/form/search.form.component.mjs +4 -4
- package/esm2022/lib/formly/formly.component.template.mjs +29 -0
- package/esm2022/lib/formly/formly.context.directive.mjs +6 -5
- package/esm2022/lib/formly/formly.context.mjs +12 -8
- package/esm2022/lib/formly/formly.directive.mjs +29 -44
- package/esm2022/lib/formly/formly.form.component.mjs +24 -18
- package/esm2022/lib/formly/formly.module.mjs +10 -14
- package/esm2022/lib/formly/index.mjs +2 -1
- package/esm2022/lib/formly/template/login.mjs +1 -1
- package/esm2022/lib/formly/template/timezone.mjs +1 -1
- package/esm2022/lib/index.mjs +2 -1
- package/esm2022/lib/layout/form.layout.module.mjs +4 -4
- package/esm2022/lib/layout/form.spacer.component.mjs +3 -3
- package/esm2022/lib/validator/available.mjs +1 -1
- package/esm2022/lib/validator/boolean.mjs +1 -1
- package/esm2022/lib/validator/field.mjs +2 -2
- package/esm2022/lib/validator/number.mjs +1 -1
- package/esm2022/lib/validator/phone.mjs +1 -1
- package/esm2022/mapbox/lib/field/latlng/latlng.field.component.mjs +65 -47
- package/esm2022/mapbox/lib/field/latlng/latlng.field.marker.component.mjs +13 -10
- package/esm2022/mapbox/lib/field/latlng/latlng.module.mjs +10 -43
- package/esm2022/mapbox/lib/field/zoom/zoom.field.component.mjs +32 -26
- package/esm2022/mapbox/lib/field/zoom/zoom.module.mjs +8 -36
- package/esm2022/mapbox/lib/mapbox.module.mjs +4 -4
- package/fesm2022/dereekb-dbx-form-calendar.mjs +340 -457
- package/fesm2022/dereekb-dbx-form-calendar.mjs.map +1 -1
- package/fesm2022/dereekb-dbx-form-mapbox.mjs +114 -141
- package/fesm2022/dereekb-dbx-form-mapbox.mjs.map +1 -1
- package/fesm2022/dereekb-dbx-form.mjs +935 -1106
- package/fesm2022/dereekb-dbx-form.mjs.map +1 -1
- package/lib/extension/calendar/_calendar.scss +3 -3
- package/lib/form/_form.scss +3 -3
- package/lib/form/action/form.action.directive.d.ts +35 -16
- package/lib/form/action/form.action.module.d.ts +4 -3
- package/lib/form/action/transition/form.action.transition.module.d.ts +4 -2
- package/lib/form/action/transition/form.action.transition.safety.directive.d.ts +4 -2
- package/lib/form/io/form.changes.directive.d.ts +3 -4
- package/lib/form/io/form.input.directive.d.ts +7 -10
- package/lib/form/io/form.io.module.d.ts +8 -2
- package/lib/form/io/form.loading.directive.d.ts +10 -11
- package/lib/form.providers.d.ts +8 -0
- package/lib/formly/_formly.scss +3 -3
- package/lib/formly/field/checklist/_checklist.scss +3 -3
- package/lib/formly/field/checklist/checklist.field.d.ts +7 -7
- package/lib/formly/field/checklist/checklist.item.d.ts +7 -9
- package/lib/formly/field/checklist/checklist.item.field.component.d.ts +19 -18
- package/lib/formly/field/checklist/checklist.item.field.content.default.component.d.ts +5 -5
- package/lib/formly/field/checklist/checklist.item.field.d.ts +1 -1
- package/lib/formly/field/checklist/checklist.item.field.module.d.ts +3 -11
- package/lib/formly/field/component/_component.scss +3 -3
- package/lib/formly/field/component/component.field.component.d.ts +1 -1
- package/lib/formly/field/component/component.field.module.d.ts +2 -4
- package/lib/formly/field/field.d.ts +8 -5
- package/lib/formly/field/selection/list/_list.scss +3 -3
- package/lib/formly/field/selection/list/list.field.component.d.ts +7 -5
- package/lib/formly/field/selection/list/list.field.module.d.ts +2 -12
- package/lib/formly/field/selection/pickable/_pickable.scss +3 -3
- package/lib/formly/field/selection/pickable/pickable.chip.field.component.d.ts +1 -1
- package/lib/formly/field/selection/pickable/pickable.field.directive.d.ts +25 -23
- package/lib/formly/field/selection/pickable/pickable.field.module.d.ts +2 -13
- package/lib/formly/field/selection/pickable/pickable.list.field.component.d.ts +15 -14
- package/lib/formly/field/selection/searchable/_searchable.scss +3 -3
- package/lib/formly/field/selection/searchable/searchable.chip.field.component.d.ts +4 -4
- package/lib/formly/field/selection/searchable/searchable.d.ts +3 -3
- package/lib/formly/field/selection/searchable/searchable.field.autocomplete.item.component.d.ts +8 -12
- package/lib/formly/field/selection/searchable/searchable.field.directive.d.ts +30 -25
- package/lib/formly/field/selection/searchable/searchable.field.module.d.ts +2 -13
- package/lib/formly/field/selection/searchable/searchable.text.field.component.d.ts +6 -8
- package/lib/formly/field/selection/selection.d.ts +5 -5
- package/lib/formly/field/selection/sourceselect/_sourceselect.scss +3 -3
- package/lib/formly/field/selection/sourceselect/sourceselect.d.ts +1 -1
- package/lib/formly/field/selection/sourceselect/sourceselect.field.component.d.ts +5 -3
- package/lib/formly/field/selection/sourceselect/sourceselect.field.module.d.ts +2 -17
- package/lib/formly/field/texteditor/_texteditor.scss +9 -9
- package/lib/formly/field/texteditor/texteditor.field.component.d.ts +5 -4
- package/lib/formly/field/texteditor/texteditor.field.module.d.ts +2 -8
- package/lib/formly/field/value/array/_array.scss +5 -5
- package/lib/formly/field/value/array/array.field.component.d.ts +16 -18
- package/lib/formly/field/value/array/array.field.d.ts +8 -5
- package/lib/formly/field/value/array/array.field.module.d.ts +2 -10
- package/lib/formly/field/value/boolean/_boolean.scss +3 -3
- package/lib/formly/field/value/date/_date.scss +5 -5
- package/lib/formly/field/value/date/date.field.module.d.ts +8 -9
- package/lib/formly/field/value/date/datetime.field.service.d.ts +1 -1
- package/lib/formly/field/value/date/fixeddaterange.field.component.d.ts +13 -13
- package/lib/formly/field/value/number/_number.scss +2 -2
- package/lib/formly/field/value/phone/_phone.scss +6 -6
- package/lib/formly/field/value/phone/phone.field.component.d.ts +6 -5
- package/lib/formly/field/value/text/_text.scss +3 -3
- package/lib/formly/field/wrapper/_wrapper.scss +3 -3
- package/lib/formly/field/wrapper/autotouch.wrapper.component.d.ts +1 -1
- package/lib/formly/field/wrapper/expand.wrapper.component.d.ts +1 -1
- package/lib/formly/field/wrapper/expand.wrapper.delegate.d.ts +2 -0
- package/lib/formly/field/wrapper/flex.wrapper.component.d.ts +4 -4
- package/lib/formly/field/wrapper/form.wrapper.module.d.ts +2 -8
- package/lib/formly/field/wrapper/index.d.ts +1 -0
- package/lib/formly/field/wrapper/info.wrapper.component.d.ts +2 -2
- package/lib/formly/field/wrapper/section.wrapper.component.d.ts +1 -1
- package/lib/formly/field/wrapper/style.wrapper.component.d.ts +5 -3
- package/lib/formly/field/wrapper/subsection.wrapper.component.d.ts +1 -1
- package/lib/formly/field/wrapper/toggle.wrapper.component.d.ts +2 -1
- package/lib/formly/field/wrapper/working.wrapper.component.d.ts +2 -2
- package/lib/formly/form/_form.scss +3 -3
- package/lib/formly/formly.component.template.d.ts +19 -0
- package/lib/formly/formly.context.d.ts +11 -7
- package/lib/formly/formly.context.directive.d.ts +2 -2
- package/lib/formly/formly.directive.d.ts +10 -10
- package/lib/formly/formly.form.component.d.ts +18 -13
- package/lib/formly/formly.module.d.ts +1 -1
- package/lib/formly/index.d.ts +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/layout/_layout.scss +3 -3
- package/lib/style/_all-typography.scss +1 -1
- package/lib/style/_theming.scss +1 -1
- package/mapbox/lib/field/latlng/latlng.field.component.d.ts +25 -23
- package/mapbox/lib/field/latlng/latlng.field.marker.component.d.ts +2 -1
- package/mapbox/lib/field/latlng/latlng.module.d.ts +2 -11
- package/mapbox/lib/field/zoom/zoom.field.component.d.ts +13 -13
- package/mapbox/lib/field/zoom/zoom.module.d.ts +3 -10
- package/package.json +10 -11
- package/mapbox/esm2022/dereekb-dbx-form-mapbox.mjs +0 -5
- package/mapbox/esm2022/index.mjs +0 -3
- package/mapbox/esm2022/lib/field/index.mjs +0 -3
- package/mapbox/esm2022/lib/field/latlng/index.mjs +0 -5
- package/mapbox/esm2022/lib/field/latlng/latlng.field.component.mjs +0 -244
- package/mapbox/esm2022/lib/field/latlng/latlng.field.marker.component.mjs +0 -31
- package/mapbox/esm2022/lib/field/latlng/latlng.field.mjs +0 -35
- package/mapbox/esm2022/lib/field/latlng/latlng.module.mjs +0 -59
- package/mapbox/esm2022/lib/field/zoom/index.mjs +0 -4
- package/mapbox/esm2022/lib/field/zoom/zoom.field.component.mjs +0 -140
- package/mapbox/esm2022/lib/field/zoom/zoom.field.mjs +0 -23
- package/mapbox/esm2022/lib/field/zoom/zoom.module.mjs +0 -57
- package/mapbox/esm2022/lib/mapbox.module.mjs +0 -16
- package/mapbox/fesm2022/dereekb-dbx-form-mapbox.mjs +0 -566
- package/mapbox/fesm2022/dereekb-dbx-form-mapbox.mjs.map +0 -1
- package/mapbox/package.json +0 -21
|
@@ -192,12 +192,12 @@ export class DbxCalendarScheduleSelectionStore extends ComponentStore {
|
|
|
192
192
|
* Should typically not be used by the user directly with the intention of the parent synchronizing to this state.
|
|
193
193
|
*/
|
|
194
194
|
setViewReadonlyState = this.updater((state, isViewReadonly) => ({ ...state, isViewReadonly }));
|
|
195
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
196
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
195
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxCalendarScheduleSelectionStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
196
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxCalendarScheduleSelectionStore });
|
|
197
197
|
}
|
|
198
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
198
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxCalendarScheduleSelectionStore, decorators: [{
|
|
199
199
|
type: Injectable
|
|
200
|
-
}], ctorParameters:
|
|
200
|
+
}], ctorParameters: () => [] });
|
|
201
201
|
export function updateStateWithInitialSelectionState(state, initialSelectionState) {
|
|
202
202
|
const { toggledIndexes } = state;
|
|
203
203
|
if (toggledIndexes.size === 0 && initialSelectionState === 'all') {
|
|
@@ -782,4 +782,4 @@ export function computeCalendarScheduleSelectionDateCellRange(state) {
|
|
|
782
782
|
return undefined;
|
|
783
783
|
}
|
|
784
784
|
}
|
|
785
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2NoZWR1bGUuc2VsZWN0aW9uLnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vY2FsZW5kYXIvc3JjL2xpYi9jYWxlbmRhci5zY2hlZHVsZS5zZWxlY3Rpb24uc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBRUwsd0JBQXdCLEVBR3hCLHlCQUF5QixFQUV6QiwwQkFBMEIsRUFDMUIsb0NBQW9DLEVBRXBDLHVCQUF1QixFQUN2QiwyQkFBMkIsRUFHM0Isa0NBQWtDLEVBQ2xDLDhCQUE4QixFQUM5Qiw0Q0FBNEMsRUFDNUMsV0FBVyxFQUNYLFdBQVcsRUFDWCx5QkFBeUIsRUFFekIsaUNBQWlDLEVBQ2pDLFVBQVUsRUFDVixhQUFhLEVBQ2IsZUFBZSxFQUVmLHVDQUF1QyxFQUN2QyxtQkFBbUIsRUFDbkIscUJBQXFCLEVBRXJCLDJCQUEyQixFQUczQixpQ0FBaUMsRUFFakMseUNBQXlDLEVBQ3pDLGdDQUFnQyxFQUNoQyxnQ0FBZ0MsRUFDaEMsOEJBQThCLEVBRTlCLG1DQUFtQyxFQUNuQywrQkFBK0IsRUFFL0IseUJBQXlCLEVBQ3pCLG9DQUFvQyxFQUNwQyx5Q0FBeUMsRUFDekMsd0NBQXdDLEVBQ3pDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUE0RCxlQUFlLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxpQ0FBaUMsRUFBWSxlQUFlLEVBQWEsS0FBSyxFQUFzQixNQUFNLEVBQUUsV0FBVyxFQUFrQyxjQUFjLEVBQUUsd0JBQXdCLEVBQVksc0JBQXNCLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFDL1ksT0FBTyxFQUFF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QUNMLE9BQU8sU0FBUyxDQUFDO0tBQ2xCO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIERhdGVDZWxsRGF5T2ZXZWVrRmFjdG9yeSxcbiAgZGF0ZUNlbGxEYXlPZldlZWtGYWN0b3J5LFxuICBEYXRlQ2VsbEluZGV4LFxuICBEYXRlQ2VsbFJhbmdlV2l0aFJhbmdlLFxuICBkYXRlQ2VsbFRpbWluZ0RhdGVGYWN0b3J5LFxuICBEYXRlUmFuZ2UsXG4gIGRhdGVDZWxsU2NoZWR1bGVEYXRlRmlsdGVyLFxuICBjb3B5RGF0ZUNlbGxTY2hlZHVsZURhdGVGaWx0ZXJDb25maWcsXG4gIERhdGVDZWxsU2NoZWR1bGVEYXRlRmlsdGVyQ29uZmlnLFxuICBEYXRlQ2VsbFNjaGVkdWxlRGF5Q29kZSxcbiAgZGF0ZUNlbGxTY2hlZHVsZUVuY29kZWRXZWVrLFxuICBEYXRlQ2VsbFNjaGVkdWxlRW5jb2RlZFdlZWssXG4gIERhdGVDZWxsVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnksXG4gIGRhdGVDZWxsVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnksXG4gIGV4cGFuZERhdGVDZWxsU2NoZWR1bGVEYXlDb2RlcyxcbiAgZXhwYW5kRGF0ZUNlbGxTY2hlZHVsZURheUNvZGVzVG9EYXlPZldlZWtTZXQsXG4gIGZpbmRNYXhEYXRlLFxuICBmaW5kTWluRGF0ZSxcbiAgaXNEYXRlSW5EYXRlUmFuZ2VGdW5jdGlvbixcbiAgSXNEYXRlV2l0aGluRGF0ZUNlbGxSYW5nZUZ1bmN0aW9uLFxuICBpc0RhdGVXaXRoaW5EYXRlQ2VsbFJhbmdlRnVuY3Rpb24sXG4gIGlzU2FtZURhdGUsXG4gIGlzU2FtZURhdGVEYXksXG4gIGlzU2FtZURhdGVSYW5nZSxcbiAgRGF0ZU9yRGF0ZVJhbmdlT3JEYXRlQ2VsbEluZGV4T3JEYXRlQ2VsbFJhbmdlLFxuICBkYXRlQ2VsbFRpbWluZ1JlbGF0aXZlSW5kZXhBcnJheUZhY3RvcnksXG4gIGlzSW5maW5pdGVEYXRlUmFuZ2UsXG4gIGRhdGVUaW1lem9uZVV0Y05vcm1hbCxcbiAgRGF0ZVRpbWV6b25lVXRjTm9ybWFsSW5zdGFuY2UsXG4gIGV4cGFuZERhdGVDZWxsU2NoZWR1bGVSYW5nZSxcbiAgRGF0ZUNlbGwsXG4gIERhdGVDZWxsRHVyYXRpb25TcGFuLFxuICBmb3JtYXRUb0lTTzg2MDFEYXlTdHJpbmdGb3JTeXN0ZW0sXG4gIERhdGVDZWxsVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dCxcbiAgZGF0ZUNlbGxTY2hlZHVsZURheUNvZGVzQXJlU2V0c0VxdWl2YWxlbnQsXG4gIHNpbXBsaWZ5RGF0ZUNlbGxTY2hlZHVsZURheUNvZGVzLFxuICBmdWxsV2Vla0RhdGVDZWxsU2NoZWR1bGVEYXlDb2RlcyxcbiAgZGF0ZUNlbGxUaW1pbmdTdGFydERhdGVGYWN0b3J5LFxuICBEYXRlQ2VsbFNjaGVkdWxlRGF0ZVJhbmdlLFxuICBkYXRlQ2VsbFRpbWluZ1N0YXJ0c0F0Rm9yU3RhcnRPZkRheSxcbiAgaXNTYW1lRGF0ZUNlbGxTY2hlZHVsZURhdGVSYW5nZSxcbiAgRnVsbERhdGVDZWxsU2NoZWR1bGVSYW5nZUlucHV0RGF0ZVJhbmdlLFxuICBmdWxsRGF0ZUNlbGxTY2hlZHVsZVJhbmdlLFxuICBkYXRlQ2VsbFRpbWluZ1RpbWV6b25lTm9ybWFsSW5zdGFuY2UsXG4gIGNoYW5nZURhdGVDZWxsU2NoZWR1bGVEYXRlUmFuZ2VUb1RpbWV6b25lLFxuICBTWVNURU1fREFURV9USU1FWk9ORV9VVENfTk9STUFMX0lOU1RBTkNFXG59IGZyb20gJ0BkZXJlZWtiL2RhdGUnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbEhhc0RpZmZlcmVudFZhbHVlcywgZmlsdGVyTWF5YmUgfSBmcm9tICdAZGVyZWVrYi9yeGpzJztcbmltcG9ydCB7IE1heWJlLCBUaW1lem9uZVN0cmluZywgRGVjaXNpb25GdW5jdGlvbiwgSXRlcmFibGVPclZhbHVlLCBpdGVyYWJsZVRvQXJyYXksIGFkZFRvU2V0LCB0b2dnbGVJblNldCwgaXNJbmRleE51bWJlckluSW5kZXhSYW5nZUZ1bmN0aW9uLCBNYXliZU1hcCwgbWluQW5kTWF4TnVtYmVyLCBEYXlPZldlZWssIHJhbmdlLCBBbGxPck5vbmVTZWxlY3Rpb24sIHVuaXF1ZSwgbWVyZ2VBcnJheXMsIEFycmF5T3JWYWx1ZSwgSVNPODYwMURheVN0cmluZywgbWFwVmFsdWVzVG9TZXQsIGlzSW5BbGxvd2VkRGF5c09mV2Vla1NldCwgQnVpbGRpbmcsIGZpcnN0VmFsdWVGcm9tSXRlcmFibGUsIGlzSXRlcmFibGUsIHJlbW92ZUZyb21TZXQsIENvbmZpZ3VyYWJsZSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgQ29tcG9uZW50U3RvcmUgfSBmcm9tICdAbmdyeC9jb21wb25lbnQtc3RvcmUnO1xuaW1wb3J0IHsgc3RhcnRPZkRheSwgZW5kT2ZEYXksIGlzQmVmb3JlIH0gZnJvbSAnZGF0ZS1mbnMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFwLCBmaXJzdCwgY29tYmluZUxhdGVzdFdpdGgsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uQ2VsbENvbnRlbnRGYWN0b3J5LCBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uVmFsdWUsIGRlZmF1bHRDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uQ2VsbENvbnRlbnRGYWN0b3J5IH0gZnJvbSAnLi9jYWxlbmRhci5zY2hlZHVsZS5zZWxlY3Rpb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25JbnB1dERhdGVSYW5nZSB7XG4gIC8qKlxuICAgKiBJbnB1dCBTdGFydCBEYXRlXG4gICAqL1xuICBpbnB1dFN0YXJ0OiBEYXRlO1xuICAvKipcbiAgICogSW5wdXQgRW5kIERhdGVcbiAgICovXG4gIGlucHV0RW5kOiBEYXRlO1xufVxuXG5leHBvcnQgdHlwZSBQYXJ0aWFsQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbklucHV0RGF0ZVJhbmdlID0gUGFydGlhbDxNYXliZU1hcDxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uSW5wdXREYXRlUmFuZ2U+PjtcblxuLyoqXG4gKiBEYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmUgc2VsZWN0aW9uIG1vZGUuXG4gKlxuICogV2hlbiBpbiBzaW5nbGUgbW9kZSB0aGUgdG9nZ2xlIGZ1bmN0aW9uIGlzIHRyZWF0ZWQgYXMgYSBzZXQgdGhhdCBjbGVhcnMgYWxsIHZhbHVlcyBhbmQgb25seSBzZWxlY3RzIHRoZSB0b2dnbGUnZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IHR5cGUgRGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlU2VsZWN0aW9uTW9kZSA9ICdtdWx0aXBsZScgfCAnc2luZ2xlJztcblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUgZXh0ZW5kcyBQYXJ0aWFsQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbklucHV0RGF0ZVJhbmdlIHtcbiAgLyoqXG4gICAqIFNlbGVjdGlvbiBtb2RlIGZvciB0aGlzIGNhbGVuZGFyLiBEZWZhdWx0cyB0byBcIm11bHRpcGxlXCJcbiAgICovXG4gIHJlYWRvbmx5IHNlbGVjdGlvbk1vZGU6IERieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZVNlbGVjdGlvbk1vZGU7XG4gIC8qKlxuICAgKiBSZWFkb25seSBzdGF0ZSBvZiB0aGUgdmlldy5cbiAgICpcbiAgICogRG9lcyBub3QgYWZmZWN0IHN0YXRlIGNoYW5nZXMgZGlyZWN0bHksIGJ1dCBpbnN0ZWFkIGFjdHMgYXMgYSBmbGFnIGZvciB0aGUgcGFyZW50IHZpZXcgdG8gc2V0IGFuZCB0aGUgY29uc3VtaW5nIHZpZXdzIHRvIHVwZGF0ZSBvbi5cbiAgICovXG4gIHJlYWRvbmx5IGlzVmlld1JlYWRvbmx5PzogTWF5YmU8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiBTZXQgb2YgdGhlIGRheXMgb2Ygd2VlayB0aGF0IGFyZSBhbGxvd2VkIGJ5IGRlZmF1bHQuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0U2NoZWR1bGVEYXlzOiBTZXQ8RGF0ZUNlbGxTY2hlZHVsZURheUNvZGU+O1xuICAvKipcbiAgICogRmlsdGVycyB0aGUgZGF5cyBvZiB0aGUgc2NoZWR1bGUgdG8gb25seSBhbGxvdyBzZWxlY3RpbmcgZGF5cyBpbiB0aGUgc2NoZWR1bGUuXG4gICAqXG4gICAqIFRoZSBvdXRwdXQgd2lsbCBiZSByZWxhdGl2ZSB0byB0aGlzIGZpbHRlciwgYW5kIGluIGl0J3MgdGltZXpvbmUgdW5sZXNzIGNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyIGlzIGZhbHNlLlxuICAgKlxuICAgKiBUaGlzIGlzIGEgY29weSBvZiBhbnkgc2V0L2NvbmZpZ3VyZWQgaW5wdXQgZmlsdGVyIGFuZCB3aWxsIGhhdmUgYSBzdGFydCBkYXRlIHNldCBmcm9tIHN0YXJ0IG9yIHN0YXJ0c0F0LlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsdGVyPzogTWF5YmU8RGF0ZUNlbGxTY2hlZHVsZURhdGVGaWx0ZXJDb25maWc+O1xuICAvKipcbiAgICogQWRkaXRpb25hbCBleGNsdXNpb25zIHRoYXQgbWF5IG5vdCBiZSBkZWZpbmVkIHdpdGhpbiB0aGUgZmlsdGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5wdXRFeGNsdXNpb25zPzogTWF5YmU8QXJyYXlPclZhbHVlPERhdGVPckRhdGVSYW5nZU9yRGF0ZUNlbGxJbmRleE9yRGF0ZUNlbGxSYW5nZT4+O1xuICAvKipcbiAgICogVGhlIGNvbXB1dGVkIGV4Y2x1c2lvbnMgZ2l2ZW4gdGhlIGlucHV0IGV4Y2x1c2lvbnMuXG4gICAqL1xuICByZWFkb25seSBjb21wdXRlZEV4Y2x1c2lvbnM/OiBNYXliZTxEYXRlQ2VsbEluZGV4W10+O1xuICAvKipcbiAgICogVGhlIG1pbi9tYXggZGF0ZSByYW5nZS4gVXNlZCBmb3IgcmVzdHJpY3RpbmcgdGhlIG1pbi9tYXggdmFsdWUuIFdvcmtzIHdpdGggdGhlIGZpbHRlci4gVGhlIGdyZWF0ZXIvbGVzc2VyIG9mIHRoZSBzdGFydC9lbmQgZGF0ZXMgYXJlIHVzZWQgaWYgYm90aCBhcmUgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBtaW5NYXhEYXRlUmFuZ2U/OiBNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+O1xuICAvKipcbiAgICogU3RhcnQgZGF0ZS4gSXMgdXBkYXRlZCBhcyB0aGUgaW5wdXRTdGFydCBpcyBtb2RpZmllZCBvciBmaWx0ZXIgaXMgcHJvdmlkZWQgdGhhdCBwcm92aWRlcyB0aGUgc3RhcnQgZGF0ZS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gdG9kYXkgYW5kIHRoZSBjdXJyZW50IHRpbWV6b25lLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhcnQ6IERhdGVDZWxsU2NoZWR1bGVEYXRlUmFuZ2VbJ3N0YXJ0J107XG4gIC8qKlxuICAgKiBTeXN0ZW0gVGltZXpvbmUuIERvZXMgbm90IGNoYW5nZS5cbiAgICovXG4gIHJlYWRvbmx5IHN5c3RlbVRpbWV6b25lOiBUaW1lem9uZVN0cmluZztcbiAgLyoqXG4gICAqIFRpbWV6b25lIHRvIHVzZSB3aGVuIG91dHB1dHRpbmcgdGhlIHZhbHVlLiBPbmx5IGluZmx1ZW5jZXMgdGhlIG91dHB1dCBzdGFydCBkYXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0VGltZXpvbmU/OiBNYXliZTxUaW1lem9uZVN0cmluZz47XG4gIC8qKlxuICAgKiBDdXJyZW50IHRpbWV6b25lIG5vcm1hbCB3aXRoIHRoZSBjdXJyZW50IHRpbWV6b25lLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0VGltZXpvbmVOb3JtYWw/OiBNYXliZTxEYXRlVGltZXpvbmVVdGNOb3JtYWxJbnN0YW5jZT47XG4gIC8qKlxuICAgKiBEYXRlQ2VsbFRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5XG4gICAqL1xuICByZWFkb25seSBpbmRleEZhY3Rvcnk6IERhdGVDZWxsVGltaW5nUmVsYXRpdmVJbmRleEZhY3Rvcnk7XG4gIC8qKlxuICAgKiBBcnJheSBvZiBtYW51YWxseSBzZWxlY3RlZCBkYXRlcyB3aXRoaW4gdGhlIHBpY2tlZCByYW5nZS4gVGhpcyBpcyBOT1QgdGhlIHNldCBvZiBhbGwgc2VsZWN0ZWQgaW5kZXhlcyBpbiB0ZXJtcyBvZiBvdXRwdXQuXG4gICAqXG4gICAqIFZhbHVlcyB0aGF0IGV4aXN0IG91dHNpZGUgb2YgdGhlIFwiaW5wdXRcIiByYW5nZSBhcmUgY29uc2lkZXJlZCB0b2dnbGVkIG9uLCB3aGlsZSB0aG9zZVxuICAgKiB0aGF0IGFyZSBzZWxlY3RlZCB3aXRoaW4gdGhlIHJhbmdlIGFyZSBjb25zaWRlcmVkIHRvZ2dsZWQgb2ZmLlxuICAgKlxuICAgKiBJZiBkYXRlcyBhcmUgc2VsZWN0ZWQsIGFuZCB0aGVuIGEgcmFuZ2UgaXMgc2VsZWN0ZWQsIHRoZW4gdGhvc2UgZGF0ZXMgd2l0aGluIHRoZSByYW5nZSB0aGF0IGZhbGxcbiAgICogd2l0aGluIHRoZSByYW5nZSBhcmUgY2xlYXJlZCBmcm9tIHNlbGVjdGlvbi5cbiAgICpcbiAgICogVGhlc2UgaW5kZXhlcyBhcmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IGRhdGUuXG4gICAqL1xuICByZWFkb25seSB0b2dnbGVkSW5kZXhlczogU2V0PERhdGVDZWxsSW5kZXg+O1xuICAvKipcbiAgICogRGF5cyBvZiB0aGUgc2NoZWR1bGUgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSBwaWNrZWQuIElmIG5vdCBkZWZpbmVkLCBkZWZhdWx0cyB0byBkZWZhdWx0U2NoZWR1bGVEYXlzLlxuICAgKi9cbiAgcmVhZG9ubHkgc2NoZWR1bGVEYXlzPzogTWF5YmU8U2V0PERhdGVDZWxsU2NoZWR1bGVEYXlDb2RlPj47XG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBEYXRlQ2VsbFNjaGVkdWxlRGF5Q29kZSB2YWx1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGVmZmVjdGl2ZVNjaGVkdWxlRGF5czogU2V0PERhdGVDZWxsU2NoZWR1bGVEYXlDb2RlPjtcbiAgLyoqXG4gICAqIFNldCBvZiB0aGUgZGF5cyBvZiB3ZWVrIHRoYXQgYXJlIGFsbG93ZWQuIERlcml2ZWQgZnJvbSB0aGUgY3VycmVudCBzY2hlZHVsZSBkYXlzIHZhbHVlLlxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dlZERheXNPZldlZWs6IFNldDxEYXlPZldlZWs+O1xuICAvKipcbiAgICpcbiAgICovXG4gIHJlYWRvbmx5IGluZGV4RGF5T2ZXZWVrOiBEYXRlQ2VsbERheU9mV2Vla0ZhY3Rvcnk7XG4gIC8qKlxuICAgKiBEZWNpc2lvbiBmdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSBpZiBhIHZhbHVlIGlzIGVuYWJsZWQgZ2l2ZW4gdGhlIGN1cnJlbnQgZmlsdGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNFbmFibGVkRmlsdGVyRGF5OiBEZWNpc2lvbkZ1bmN0aW9uPERhdGVDZWxsVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD47XG4gIC8qKlxuICAgKiBEZWNpc2lvbiBmdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSBpZiBhIHZhbHVlIGlzIGVuYWJsZWQuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdGFrZSB0aGUgY3VycmVudCBmaWx0ZXIgaW50byBhY2NvdW50LlxuICAgKi9cbiAgcmVhZG9ubHkgaXNFbmFibGVkRGF5OiBEZWNpc2lvbkZ1bmN0aW9uPERhdGVDZWxsVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD47XG4gIC8qKlxuICAgKiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uQ2VsbENvbnRlbnRGYWN0b3J5IGZvciB0aGUgdmlldy5cbiAgICovXG4gIHJlYWRvbmx5IGNlbGxDb250ZW50RmFjdG9yeTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbkNlbGxDb250ZW50RmFjdG9yeTtcbiAgLyoqXG4gICAqIEN1cnJlbnQgc2VsZWN0aW9uIHZhbHVlLlxuICAgKi9cbiAgcmVhZG9ubHkgY3VycmVudFNlbGVjdGlvblZhbHVlPzogTWF5YmU8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblZhbHVlPjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIHVzZSB0aGUgZmlsdGVyIGFzIHRoZSBzdGFydCBhbmQgZW5kIHJhbmdlIGluc3RlYWQgb2Ygb3B0aW1pemluZyBmb3IgdGhlIGN1cnJlbnQgaW5kZXguXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHRydWUuXG4gICAqL1xuICByZWFkb25seSBjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcj86IE1heWJlPGJvb2xlYW4+O1xuICAvKipcbiAgICogVGhlIGluaXRpYWwgc2VsZWN0aW9uIHN0YXRlIHdoZW4gdGhlIGNhbGVuZGFyIGlzIHJlc2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgaW5pdGlhbFNlbGVjdGlvblN0YXRlPzogTWF5YmU8QWxsT3JOb25lU2VsZWN0aW9uPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUoKTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgY29uc3QgZGVmYXVsdFNjaGVkdWxlRGF5cyA9IG5ldyBTZXQoW0RhdGVDZWxsU2NoZWR1bGVEYXlDb2RlLldFRUtEQVksIERhdGVDZWxsU2NoZWR1bGVEYXlDb2RlLldFRUtFTkRdKTtcbiAgY29uc3QgYWxsb3dlZERheXNPZldlZWsgPSBleHBhbmREYXRlQ2VsbFNjaGVkdWxlRGF5Q29kZXNUb0RheU9mV2Vla1NldChkZWZhdWx0U2NoZWR1bGVEYXlzKTtcbiAgY29uc3QgZGVmYXVsdFN0YXJ0c0F0ID0gZGF0ZUNlbGxUaW1pbmdTdGFydHNBdEZvclN0YXJ0T2ZEYXkoKTsgLy8gZ2V0IG1pZG5pZ2h0IG9mIHRoZSBjdXJyZW50IHRpbWV6b25lXG4gIGNvbnN0IHsgc3RhcnRzQXQsIHRpbWV6b25lOiBzeXN0ZW1UaW1lem9uZSB9ID0gZGVmYXVsdFN0YXJ0c0F0O1xuICBjb25zdCBpbmRleEZhY3RvcnkgPSBkYXRlQ2VsbFRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5KGRlZmF1bHRTdGFydHNBdCk7XG4gIGNvbnN0IGluZGV4RGF5T2ZXZWVrID0gZGF0ZUNlbGxEYXlPZldlZWtGYWN0b3J5KHN0YXJ0c0F0KTtcblxuICByZXR1cm4ge1xuICAgIHNlbGVjdGlvbk1vZGU6ICdtdWx0aXBsZScsXG4gICAgc3RhcnQ6IHN0YXJ0c0F0LFxuICAgIHN5c3RlbVRpbWV6b25lLFxuICAgIGluZGV4RmFjdG9yeSxcbiAgICB0b2dnbGVkSW5kZXhlczogbmV3IFNldCgpLFxuICAgIGRlZmF1bHRTY2hlZHVsZURheXMsXG4gICAgZWZmZWN0aXZlU2NoZWR1bGVEYXlzOiBkZWZhdWx0U2NoZWR1bGVEYXlzLFxuICAgIGFsbG93ZWREYXlzT2ZXZWVrLFxuICAgIGluZGV4RGF5T2ZXZWVrLFxuICAgIGlzRW5hYmxlZEZpbHRlckRheTogKCkgPT4gdHJ1ZSxcbiAgICBpc0VuYWJsZWREYXk6ICgpID0+IGZhbHNlLFxuICAgIGNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyOiB0cnVlLFxuICAgIGNlbGxDb250ZW50RmFjdG9yeTogZGVmYXVsdENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25DZWxsQ29udGVudEZhY3RvcnlcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGlzIGlzIHVzZWQgaW4gY2FzZXMgd2hlcmUgdGhlIGRhdGVzIGluIHRoZSBtaW4vbWF4IGRhdGUgcmFuZ2UgbmVlZCB0byBiZSBzaGlmdGVkIHRvIHRoZSBmaWx0ZXIncyB0aW1lem9uZS5cbiAqXG4gKiBUaGlzIGlzIGJlY2F1c2UgdGhlIGluZGV4IGZhY3RvcnkgaXMgYWx3YXlzIGluIHN5c3RlbSB0aW1lem9uZSwgYnV0IHdoZW4gc2VsZWN0aW5nIGFsbC9ub25lIHdpdGggYSBmaWx0ZXIgd2UgbmVlZCB0byB1c2UgdGhlIGZpbHRlcidzIHRpbWV6b25lLlxuICpcbiAqIEBwYXJhbSB4XG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiBjYWxlbmRhclNjaGVkdWxlTWluQW5kTWF4RGF0ZVJhbmdlUmVsYXRpdmVUb0ZpbHRlcih4OiBQaWNrPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgJ2ZpbHRlcicgfCAnbWluTWF4RGF0ZVJhbmdlJz4pOiBQYXJ0aWFsPERhdGVSYW5nZT4ge1xuICBsZXQgaW5wdXQ6IFBpY2s8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCAnZmlsdGVyJyB8ICdtaW5NYXhEYXRlUmFuZ2UnPiA9IHg7XG5cbiAgaWYgKHguZmlsdGVyPy50aW1lem9uZSAmJiB4Lm1pbk1heERhdGVSYW5nZSAhPSBudWxsKSB7XG4gICAgY29uc3QgZmlsdGVyTm9ybWFsID0gZGF0ZVRpbWV6b25lVXRjTm9ybWFsKHguZmlsdGVyLnRpbWV6b25lKTtcbiAgICBjb25zdCB0cmFuc2Zvcm1GbiA9IGZpbHRlck5vcm1hbC50cmFuc2Zvcm1GdW5jdGlvbignc3lzdGVtRGF0ZVRvVGFyZ2V0RGF0ZScpO1xuXG4gICAgaW5wdXQgPSB7XG4gICAgICBmaWx0ZXI6IHguZmlsdGVyLFxuICAgICAgbWluTWF4RGF0ZVJhbmdlOiB7XG4gICAgICAgIHN0YXJ0OiB4Lm1pbk1heERhdGVSYW5nZS5zdGFydCA/IHRyYW5zZm9ybUZuKHgubWluTWF4RGF0ZVJhbmdlLnN0YXJ0KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZW5kOiB4Lm1pbk1heERhdGVSYW5nZS5lbmQgPyB0cmFuc2Zvcm1Gbih4Lm1pbk1heERhdGVSYW5nZS5lbmQpIDogdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBjYWxlbmRhclNjaGVkdWxlTWluQW5kTWF4RGF0ZVJhbmdlKGlucHV0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGVuZGFyU2NoZWR1bGVNaW5BbmRNYXhEYXRlUmFuZ2UoeDogUGljazxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsICdmaWx0ZXInIHwgJ21pbk1heERhdGVSYW5nZSc+KTogUGFydGlhbDxEYXRlUmFuZ2U+IHtcbiAgcmV0dXJuIHtcbiAgICBzdGFydDogY2FsZW5kYXJTY2hlZHVsZU1pbkRhdGUoeCkgfHwgdW5kZWZpbmVkLFxuICAgIGVuZDogY2FsZW5kYXJTY2hlZHVsZU1heERhdGUoeCkgfHwgdW5kZWZpbmVkXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxlbmRhclNjaGVkdWxlTWluRGF0ZSh4OiBQaWNrPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgJ2ZpbHRlcicgfCAnbWluTWF4RGF0ZVJhbmdlJz4pOiBNYXliZTxEYXRlPiB7XG4gIHJldHVybiBmaW5kTWF4RGF0ZShbeC5maWx0ZXI/LnN0YXJ0LCB4Lm1pbk1heERhdGVSYW5nZT8uc3RhcnRdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGVuZGFyU2NoZWR1bGVNYXhEYXRlKHg6IFBpY2s8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCAnZmlsdGVyJyB8ICdtaW5NYXhEYXRlUmFuZ2UnPik6IE1heWJlPERhdGU+IHtcbiAgcmV0dXJuIGZpbmRNaW5EYXRlKFt4LmZpbHRlcj8uZW5kLCB4Lm1pbk1heERhdGVSYW5nZT8uZW5kXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxlbmRhclNjaGVkdWxlU3RhcnRCZWluZ1VzZWRGcm9tRmlsdGVyKHg6IFBpY2s8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCAnZmlsdGVyJyB8ICdjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcic+KSB7XG4gIHJldHVybiB4LmNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyICYmIHguZmlsdGVyPy5zdGFydCAhPSBudWxsOyAvLyBtYXkgYmUgdXNpbmcgZWl0aGVyXG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmUgZXh0ZW5kcyBDb21wb25lbnRTdG9yZTxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGU+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoaW5pdGlhbENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSgpKTtcbiAgfVxuXG4gIC8vIE1BUks6XG4gIHJlYWRvbmx5IHRvZ2dsZVNlbGVjdGlvbiA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTx2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgIHRoaXMubmV4dFRvZ2dsZVNlbGVjdGlvbiQucGlwZShcbiAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgIGZpbHRlck1heWJlKCksXG4gICAgICAgICAgdGFwKCh4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEFsbERhdGVzKHgpO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9KTtcblxuICAvLyBNQVJLOiBBY2Nlc3NvcnNcbiAgcmVhZG9ubHkgc2VsZWN0aW9uTW9kZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5zZWxlY3Rpb25Nb2RlKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZmlsdGVyJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmZpbHRlciksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IG1pbk1heERhdGVSYW5nZSQgPSB0aGlzLnN0YXRlJC5waXBlKG1hcChjYWxlbmRhclNjaGVkdWxlTWluQW5kTWF4RGF0ZVJhbmdlKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lRGF0ZVJhbmdlKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IG1pbkRhdGUkID0gdGhpcy5taW5NYXhEYXRlUmFuZ2UkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Py5zdGFydCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lRGF0ZURheSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcbiAgcmVhZG9ubHkgbWF4RGF0ZSQgPSB0aGlzLm1pbk1heERhdGVSYW5nZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHg/LmVuZCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lRGF0ZURheSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBoYXNDb25maWd1cmVkTWluTWF4UmFuZ2UkID0gdGhpcy5taW5NYXhEYXRlUmFuZ2UkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4ICE9IG51bGwgJiYgeC5zdGFydCAhPSBudWxsICYmIHguZW5kICE9IG51bGwpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpbnB1dFN0YXJ0JCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmlucHV0U3RhcnQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGUpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaW5wdXRFbmQkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguaW5wdXRFbmQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGUpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgY3VycmVudElucHV0UmFuZ2UkOiBPYnNlcnZhYmxlPE1heWJlPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25JbnB1dERhdGVSYW5nZT4+ID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHsgaW5wdXRTdGFydCwgaW5wdXRFbmQgfSkgPT4gKHsgc3RhcnQ6IGlucHV0U3RhcnQsIGVuZDogaW5wdXRFbmQgfSkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBpc1NhbWVEYXRlUmFuZ2UoYSBhcyBEYXRlUmFuZ2UsIGIgYXMgRGF0ZVJhbmdlKSksXG4gICAgbWFwKCh4KSA9PiAoeyBpbnB1dFN0YXJ0OiB4LnN0YXJ0LCBpbnB1dEVuZDogeC5lbmQgfSkpLFxuICAgIG1hcCgoeCkgPT4ge1xuICAgICAgaWYgKHguaW5wdXRTdGFydCAmJiB4LmlucHV0RW5kKSB7XG4gICAgICAgIHJldHVybiB4IGFzIENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25JbnB1dERhdGVSYW5nZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpbnB1dFJhbmdlJDogT2JzZXJ2YWJsZTxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uSW5wdXREYXRlUmFuZ2U+ID0gdGhpcy5jdXJyZW50SW5wdXRSYW5nZSQucGlwZShmaWx0ZXJNYXliZSgpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgcmVhZG9ubHkgaXNFbmFibGVkRmlsdGVyRGF5RnVuY3Rpb24kOiBPYnNlcnZhYmxlPERlY2lzaW9uRnVuY3Rpb248RGF0ZUNlbGxUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0Pj4gPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5pc0VuYWJsZWRGaWx0ZXJEYXkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpc0VuYWJsZWREYXlGdW5jdGlvbiQ6IE9ic2VydmFibGU8RGVjaXNpb25GdW5jdGlvbjxEYXRlQ2VsbFRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+PiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmlzRW5hYmxlZERheSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnREYXRlUmFuZ2UkOiBPYnNlcnZhYmxlPE1heWJlPERhdGVSYW5nZT4+ID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoY29tcHV0ZUNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25SYW5nZSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IGlzU2FtZURhdGVSYW5nZShhLCBiKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlciQ6IE9ic2VydmFibGU8TWF5YmU8Ym9vbGVhbj4+ID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgc3RhcnRCZWluZ1VzZWRGcm9tRmlsdGVyJDogT2JzZXJ2YWJsZTxNYXliZTxib29sZWFuPj4gPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIC8vXG4gICAgbWFwKGNhbGVuZGFyU2NoZWR1bGVTdGFydEJlaW5nVXNlZEZyb21GaWx0ZXIpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkYXRlUmFuZ2UkOiBPYnNlcnZhYmxlPERhdGVSYW5nZT4gPSB0aGlzLmN1cnJlbnREYXRlUmFuZ2UkLnBpcGUoZmlsdGVyTWF5YmUoKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IGFsbG93ZWREYXlzT2ZXZWVrJDogT2JzZXJ2YWJsZTxTZXQ8RGF5T2ZXZWVrPj4gPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5hbGxvd2VkRGF5c09mV2VlayksXG4gICAgZGlzdGluY3RVbnRpbEhhc0RpZmZlcmVudFZhbHVlcygpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNJbkFsbG93ZWREYXlzT2ZXZWVrRnVuY3Rpb24kID0gdGhpcy5hbGxvd2VkRGF5c09mV2VlayQucGlwZShcbiAgICBtYXAoKHgpID0+IGlzSW5BbGxvd2VkRGF5c09mV2Vla1NldCh4KSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBzY2hlZHVsZURheXMkOiBPYnNlcnZhYmxlPFNldDxEYXRlQ2VsbFNjaGVkdWxlRGF5Q29kZT4+ID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguZWZmZWN0aXZlU2NoZWR1bGVEYXlzKSxcbiAgICBkaXN0aW5jdFVudGlsSGFzRGlmZmVyZW50VmFsdWVzKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBvdXRwdXRUaW1lem9uZSQ6IE9ic2VydmFibGU8TWF5YmU8VGltZXpvbmVTdHJpbmc+PiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Lm91dHB1dFRpbWV6b25lKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lem9uZSBvZiB0aGUgb3V0cHV0IHZhbHVlcy5cbiAgICpcbiAgICogSWYgYW4gb3V0cHV0VGltZXpvbmUgaXMgbm90IHNwZWNpZmllZCwgdGhpcyBkZWZhdWx0cyB0byB0aGUgc3lzdGVtIHRpbWV6b25lLlxuICAgKi9cbiAgcmVhZG9ubHkgZWZmZWN0aXZlT3V0cHV0VGltZXpvbmUkOiBPYnNlcnZhYmxlPFRpbWV6b25lU3RyaW5nPiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Lm91dHB1dFRpbWV6b25lIHx8IHguc3lzdGVtVGltZXpvbmUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICAvKipcbiAgICogQW4gb3V0cHV0VGltZXpvbmVOb3JtYWwgdG8gdXNlLlxuICAgKlxuICAgKiBJZiBhbiBvdXRwdXRUaW1lem9uZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGlzIGlzIHVuZGVmaW5lZC5cbiAgICovXG4gIHJlYWRvbmx5IGVmZmVjdGl2ZU91dHB1dFRpbWV6b25lTm9ybWFsJDogT2JzZXJ2YWJsZTxNYXliZTxEYXRlVGltZXpvbmVVdGNOb3JtYWxJbnN0YW5jZT4+ID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+ICh4Lm91dHB1dFRpbWV6b25lTm9ybWFsID8geC5vdXRwdXRUaW1lem9uZU5vcm1hbCA6IHVuZGVmaW5lZCkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjdXJyZW50U2VsZWN0aW9uVmFsdWUkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguY3VycmVudFNlbGVjdGlvblZhbHVlKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgY3VycmVudFNlbGVjdGlvblZhbHVlU3RhcnQkID0gdGhpcy5jdXJyZW50U2VsZWN0aW9uVmFsdWUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Py5kYXRlU2NoZWR1bGVSYW5nZS5zdGFydCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lRGF0ZSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjdXJyZW50U2VsZWN0aW9uVmFsdWVEYXRlQ2VsbFRpbWluZ0RhdGVGYWN0b3J5JCA9IHRoaXMuY3VycmVudFNlbGVjdGlvblZhbHVlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gKHggPyBkYXRlQ2VsbFRpbWluZ0RhdGVGYWN0b3J5KHsgc3RhcnRzQXQ6IHguZGF0ZVNjaGVkdWxlUmFuZ2Uuc3RhcnQsIHRpbWV6b25lOiB4LmRhdGVTY2hlZHVsZVJhbmdlLnRpbWV6b25lIH0pIDogdW5kZWZpbmVkKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjdXJyZW50U2VsZWN0aW9uVmFsdWVEYXRlQ2VsbER1cmF0aW9uU3BhbkV4cGFuc2lvbiQ6IE9ic2VydmFibGU8RGF0ZUNlbGxEdXJhdGlvblNwYW48RGF0ZUNlbGw+W10+ID0gdGhpcy5jdXJyZW50U2VsZWN0aW9uVmFsdWUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiAoeCA/IGV4cGFuZERhdGVDZWxsU2NoZWR1bGVSYW5nZSh7IGRhdGVDZWxsU2NoZWR1bGVSYW5nZTogeC5kYXRlU2NoZWR1bGVSYW5nZSB9KSA6IFtdKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBzZWxlY3Rpb25WYWx1ZVNlbGVjdGVkSW5kZXhlcyQ6IE9ic2VydmFibGU8U2V0PERhdGVDZWxsSW5kZXg+PiA9IHRoaXMuY3VycmVudFNlbGVjdGlvblZhbHVlRGF0ZUNlbGxEdXJhdGlvblNwYW5FeHBhbnNpb24kLnBpcGUoXG4gICAgbWFwKCh4KSA9PiBuZXcgU2V0KHgubWFwKCh5KSA9PiB5LmkpKSksXG4gICAgZGlzdGluY3RVbnRpbEhhc0RpZmZlcmVudFZhbHVlcygpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgc2VsZWN0aW9uVmFsdWVTZWxlY3RlZERhdGVzJDogT2JzZXJ2YWJsZTxTZXQ8SVNPODYwMURheVN0cmluZz4+ID0gdGhpcy5jdXJyZW50U2VsZWN0aW9uVmFsdWVEYXRlQ2VsbFRpbWluZ0RhdGVGYWN0b3J5JC5waXBlKFxuICAgIHN3aXRjaE1hcCgoZGF0ZUZhY3RvcnkpID0+IHtcbiAgICAgIHJldHVybiBkYXRlRmFjdG9yeSA/IHRoaXMuc2VsZWN0aW9uVmFsdWVTZWxlY3RlZEluZGV4ZXMkLnBpcGUobWFwKCh4KSA9PiBtYXBWYWx1ZXNUb1NldCh4LCAoeSkgPT4gZm9ybWF0VG9JU084NjAxRGF5U3RyaW5nRm9yU3lzdGVtKGRhdGVGYWN0b3J5KHkpKSkpKSA6IG9mKG5ldyBTZXQ8SVNPODYwMURheVN0cmluZz4oKSk7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBzZWxlY3Rpb25WYWx1ZSQgPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZSQucGlwZShmaWx0ZXJNYXliZSgpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgcmVhZG9ubHkgY3VycmVudFNlbGVjdGlvblZhbHVlV2l0aFRpbWV6b25lJCA9IHRoaXMuY3VycmVudFNlbGVjdGlvblZhbHVlJC5waXBlKFxuICAgIGNvbWJpbmVMYXRlc3RXaXRoKHRoaXMuZWZmZWN0aXZlT3V0cHV0VGltZXpvbmVOb3JtYWwkKSxcbiAgICBtYXAoKFt4LCB0aW1lem9uZU5vcm1hbF0pID0+IHtcbiAgICAgIGxldCBjdXJyZW50VmFsdWVXaXRoVGltZXpvbmUgPSB4O1xuXG4gICAgICBpZiAoeCAmJiB0aW1lem9uZU5vcm1hbCkge1xuICAgICAgICBjdXJyZW50VmFsdWVXaXRoVGltZXpvbmUgPSB7XG4gICAgICAgICAgZGF0ZVNjaGVkdWxlUmFuZ2U6IGNoYW5nZURhdGVDZWxsU2NoZWR1bGVEYXRlUmFuZ2VUb1RpbWV6b25lKHguZGF0ZVNjaGVkdWxlUmFuZ2UsIHRpbWV6b25lTm9ybWFsKSxcbiAgICAgICAgICBtaW5NYXhSYW5nZTogeC5taW5NYXhSYW5nZVxuICAgICAgICB9IGFzIENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25WYWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZVdpdGhUaW1lem9uZTtcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgc2VsZWN0aW9uVmFsdWVXaXRoVGltZXpvbmUkID0gdGhpcy5jdXJyZW50U2VsZWN0aW9uVmFsdWVXaXRoVGltZXpvbmUkLnBpcGUoZmlsdGVyTWF5YmUoKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGlvblZhbHVlV2l0aFRpbWV6b25lRGF0ZUNlbGxEdXJhdGlvblNwYW5FeHBhbnNpb24kOiBPYnNlcnZhYmxlPERhdGVDZWxsRHVyYXRpb25TcGFuPERhdGVDZWxsPltdPiA9IHRoaXMuc2VsZWN0aW9uVmFsdWVXaXRoVGltZXpvbmUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiBleHBhbmREYXRlQ2VsbFNjaGVkdWxlUmFuZ2UoeyBkYXRlQ2VsbFNjaGVkdWxlUmFuZ2U6IHguZGF0ZVNjaGVkdWxlUmFuZ2UgfSkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgbmV4dFRvZ2dsZVNlbGVjdGlvbiQ6IE9ic2VydmFibGU8TWF5YmU8QWxsT3JOb25lU2VsZWN0aW9uPj4gPSB0aGlzLmhhc0NvbmZpZ3VyZWRNaW5NYXhSYW5nZSQucGlwZShcbiAgICBzd2l0Y2hNYXAoKGhhc0NvbmZpZ3VyZWRNaW5NYXhSYW5nZSkgPT4ge1xuICAgICAgbGV0IG9iczogT2JzZXJ2YWJsZTxNYXliZTxBbGxPck5vbmVTZWxlY3Rpb24+PjtcblxuICAgICAgaWYgKGhhc0NvbmZpZ3VyZWRNaW5NYXhSYW5nZSkge1xuICAgICAgICBvYnMgPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZSQucGlwZShtYXAoKHgpID0+ICh4ID8gJ25vbmUnIDogJ2FsbCcpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYnMgPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZSQucGlwZShtYXAoKHgpID0+ICh4ID8gJ25vbmUnIDogdW5kZWZpbmVkKSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2JzO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgY3VycmVudERhdGVDZWxsU2NoZWR1bGVSYW5nZVZhbHVlJCA9IHRoaXMuY3VycmVudFNlbGVjdGlvblZhbHVlV2l0aFRpbWV6b25lJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geD8uZGF0ZVNjaGVkdWxlUmFuZ2UpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVDZWxsU2NoZWR1bGVEYXRlUmFuZ2UpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZGF0ZUNlbGxTY2hlZHVsZVJhbmdlVmFsdWUkID0gdGhpcy5jdXJyZW50RGF0ZUNlbGxTY2hlZHVsZVJhbmdlVmFsdWUkLnBpcGUoZmlsdGVyTWF5YmUoKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IGNlbGxDb250ZW50RmFjdG9yeSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5jZWxsQ29udGVudEZhY3RvcnkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpc0N1c3RvbWl6ZWQkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgudG9nZ2xlZEluZGV4ZXMuc2l6ZSA+IDApLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpc1ZpZXdSZWFkb25seSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5pc1ZpZXdSZWFkb25seSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIC8vIE1BUks6IFN0YXRlIENoYW5nZXNcbiAgcmVhZG9ubHkgc2V0TWluTWF4RGF0ZVJhbmdlID0gdGhpcy51cGRhdGVyKHVwZGF0ZVN0YXRlV2l0aE1pbk1heERhdGVSYW5nZSk7XG4gIHJlYWRvbmx5IHNldERlZmF1bHRXZWVrID0gdGhpcy51cGRhdGVyKHVwZGF0ZVN0YXRlV2l0aE1pbk1heERhdGVSYW5nZSk7XG4gIHJlYWRvbmx5IHNldEZpbHRlciA9IHRoaXMudXBkYXRlcih1cGRhdGVTdGF0ZVdpdGhGaWx0ZXIpO1xuICByZWFkb25seSBzZXRFeGNsdXNpb25zID0gdGhpcy51cGRhdGVyKHVwZGF0ZVN0YXRlV2l0aEV4Y2x1c2lvbnMpO1xuICByZWFkb25seSBzZXRDb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlciA9IHRoaXMudXBkYXRlcih1cGRhdGVTdGF0ZVdpdGhDb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcik7XG4gIHJlYWRvbmx5IGNsZWFyRmlsdGVyID0gdGhpcy51cGRhdGVyKChzdGF0ZSkgPT4gdXBkYXRlU3RhdGVXaXRoRmlsdGVyKHN0YXRlLCB1bmRlZmluZWQpKTtcblxuICByZWFkb25seSBzZXRPdXRwdXRUaW1lem9uZSA9IHRoaXMudXBkYXRlcih1cGRhdGVTdGF0ZVdpdGhUaW1lem9uZVZhbHVlKTtcbiAgLyoqXG4gICAqIFNldHMgdGhlIFwiaW5wdXRcIiBkYXRlIHJhbmdlLiBUaGlzIGlzIHRoZSByYW5nZSB0aGF0IGdldHMgZGlzcGxheWVkIG9uIHRoZSBkYXRlIHJhbmdlIHBpY2tlci5cbiAgICovXG4gIHJlYWRvbmx5IHNldElucHV0UmFuZ2UgPSB0aGlzLnVwZGF0ZXIodXBkYXRlU3RhdGVXaXRoQ2hhbmdlZFJhbmdlKTtcblxuICAvLyBOT1RFOiBTZWxlY3RlZCBkYXRlcyBhcmUgTk9UIHNlbGVjdGVkIGluZGV4ZXMuIFRoZXkgYXJlIHRoZSBpbnRlcm5hbCBzZWxlY3RlZCBkYXRlcyB0aGF0IGFyZSBleGNsdWRlZCBmcm9tIHRoZSBzZWxlY3Rpb24uXG4gIHJlYWRvbmx5IHRvZ2dsZVNlbGVjdGVkRGF0ZXMgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCB0b2dnbGU6IEl0ZXJhYmxlT3JWYWx1ZTxEYXRlQ2VsbFRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+KSA9PiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGF0ZXMoc3RhdGUsIHsgdG9nZ2xlIH0pKTtcbiAgcmVhZG9ubHkgYWRkU2VsZWN0ZWREYXRlcyA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGFkZDogSXRlcmFibGVPclZhbHVlPERhdGVDZWxsVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD4pID0+IHVwZGF0ZVN0YXRlV2l0aENoYW5nZWREYXRlcyhzdGF0ZSwgeyBhZGQgfSkpO1xuICByZWFkb25seSByZW1vdmVTZWxlY3RlZERhdGVzID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgcmVtb3ZlOiBJdGVyYWJsZU9yVmFsdWU8RGF0ZUNlbGxUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0PikgPT4gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZERhdGVzKHN0YXRlLCB7IHJlbW92ZSB9KSk7XG4gIHJlYWRvbmx5IHNldFNlbGVjdGVkRGF0ZXMgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBzZXQ6IEl0ZXJhYmxlT3JWYWx1ZTxEYXRlQ2VsbFRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+KSA9PiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGF0ZXMoc3RhdGUsIHsgc2V0IH0pKTtcbiAgcmVhZG9ubHkgc2VsZWN0QWxsRGF0ZXMgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBzZWxlY3RBbGw6IEFsbE9yTm9uZVNlbGVjdGlvbiA9ICdhbGwnKSA9PiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGF0ZXMoc3RhdGUsIHsgc2VsZWN0QWxsIH0pKTtcblxuICAvLyBOT1RFOiBTZWxlY3RlZCBpbmRleGVzIGFyZSB0aGUgdHlwaWNhbC9leHBlY3RlZCBpbmRleGVzIHRoYXQgYXJlIHNlbGVjdGVkIG9yIG5vdC5cbiAgcmVhZG9ubHkgc2V0U2VsZWN0ZWRJbmRleGVzID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgc2V0OiBJdGVyYWJsZU9yVmFsdWU8RGF0ZUNlbGxUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0PikgPT4gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZERhdGVzKHN0YXRlLCB7IHNldCwgaW52ZXJ0U2V0QmVoYXZpb3I6IHRydWUgfSkpO1xuICByZWFkb25seSBzZXRJbml0aWFsU2VsZWN0aW9uU3RhdGUgPSB0aGlzLnVwZGF0ZXIodXBkYXRlU3RhdGVXaXRoSW5pdGlhbFNlbGVjdGlvblN0YXRlKTtcblxuICByZWFkb25seSBzZXREZWZhdWx0U2NoZWR1bGVEYXlzID0gdGhpcy51cGRhdGVyKHVwZGF0ZVN0YXRlV2l0aENoYW5nZWREZWZhdWx0U2NoZWR1bGVEYXlzKTtcbiAgcmVhZG9ubHkgc2V0U2NoZWR1bGVEYXlzID0gdGhpcy51cGRhdGVyKHVwZGF0ZVN0YXRlV2l0aENoYW5nZWRTY2hlZHVsZURheXMpO1xuICByZWFkb25seSBzZXRBbGxvd0FsbFNjaGVkdWxlRGF5cyA9IHRoaXMudXBkYXRlcigoc3RhdGUpID0+IHVwZGF0ZVN0YXRlV2l0aENoYW5nZWRTY2hlZHVsZURheXMoc3RhdGUsIFtEYXRlQ2VsbFNjaGVkdWxlRGF5Q29kZS5XRUVLREFZLCBEYXRlQ2VsbFNjaGVkdWxlRGF5Q29kZS5XRUVLRU5EXSkpO1xuXG4gIHJlYWRvbmx5IHNldERhdGVTY2hlZHVsZVJhbmdlVmFsdWUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCB2YWx1ZTogTWF5YmU8RnVsbERhdGVDZWxsU2NoZWR1bGVSYW5nZUlucHV0RGF0ZVJhbmdlPikgPT4gdXBkYXRlU3RhdGVXaXRoRGF0ZUNlbGxTY2hlZHVsZVJhbmdlVmFsdWUoc3RhdGUsIHZhbHVlKSk7XG4gIHJlYWRvbmx5IHNldENlbGxDb250ZW50RmFjdG9yeSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGNlbGxDb250ZW50RmFjdG9yeTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbkNlbGxDb250ZW50RmFjdG9yeSkgPT4gKHsgLi4uc3RhdGUsIGNlbGxDb250ZW50RmFjdG9yeSB9KSk7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHNlbGVjdGlvbiBtb2RlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2V0U2VsZWN0aW9uTW9kZSA9IHRoaXMudXBkYXRlcih1cGRhdGVTdGF0ZVdpdGhTZWxlY3Rpb25Nb2RlKTtcblxuICAvKipcbiAgICogVXNlZCBieSB0aGUgcGFyZW50IHZpZXcgdG8gcHJvcG9nYXRlIGEgcmVhZG9ubHkgc3RhdGUuXG4gICAqXG4gICAqIFNob3VsZCB0eXBpY2FsbHkgbm90IGJlIHVzZWQgYnkgdGhlIHVzZXIgZGlyZWN0bHkgd2l0aCB0aGUgaW50ZW50aW9uIG9mIHRoZSBwYXJlbnQgc3luY2hyb25pemluZyB0byB0aGlzIHN0YXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2V0Vmlld1JlYWRvbmx5U3RhdGUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBpc1ZpZXdSZWFkb25seTogYm9vbGVhbikgPT4gKHsgLi4uc3RhdGUsIGlzVmlld1JlYWRvbmx5IH0pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aEluaXRpYWxTZWxlY3Rpb25TdGF0ZShzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCBpbml0aWFsU2VsZWN0aW9uU3RhdGU6IE1heWJlPEFsbE9yTm9uZVNlbGVjdGlvbj4pOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBjb25zdCB7IHRvZ2dsZWRJbmRleGVzIH0gPSBzdGF0ZTtcblxuICBpZiAodG9nZ2xlZEluZGV4ZXMuc2l6ZSA9PT0gMCAmJiBpbml0aWFsU2VsZWN0aW9uU3RhdGUgPT09ICdhbGwnKSB7XG4gICAgc3RhdGUgPSB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGF0ZXMoc3RhdGUsIHsgc2VsZWN0QWxsOiBpbml0aWFsU2VsZWN0aW9uU3RhdGUgfSk7XG4gIH1cblxuICByZXR1cm4geyAuLi5zdGF0ZSwgaW5pdGlhbFNlbGVjdGlvblN0YXRlIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhDb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcihjdXJyZW50U3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXI6IE1heWJlPGJvb2xlYW4+KTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgbGV0IHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUgPSB7IC4uLmN1cnJlbnRTdGF0ZSwgY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIgfTtcblxuICBpZiAoQm9vbGVhbihjdXJyZW50U3RhdGUuY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIpICE9PSBCb29sZWFuKGNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyKSkge1xuICAgIHN0YXRlID0gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZERhdGVzKHN0YXRlLCB7fSk7IC8vIHJlY2FsY3VsYXRlIGlmIGNoYW5nZSBvY2N1cnMgYXMgaXQgd2lsbCBhZmZlY3QgdGhlIG91dHB1dCB2YWx1ZVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoRXhjbHVzaW9ucyhzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCBpbnB1dEV4Y2x1c2lvbnM6IE1heWJlPEFycmF5T3JWYWx1ZTxEYXRlT3JEYXRlUmFuZ2VPckRhdGVDZWxsSW5kZXhPckRhdGVDZWxsUmFuZ2U+Pik6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIGxldCBjb21wdXRlZEV4Y2x1c2lvbnM6IE1heWJlPERhdGVDZWxsSW5kZXhbXT47XG5cbiAgaWYgKGlucHV0RXhjbHVzaW9ucykge1xuICAgIGNvbnN0IHsgaW5kZXhGYWN0b3J5IH0gPSBzdGF0ZTtcbiAgICBjb25zdCBpbmRleEFycmF5RmFjdG9yeSA9IGRhdGVDZWxsVGltaW5nUmVsYXRpdmVJbmRleEFycmF5RmFjdG9yeShpbmRleEZhY3RvcnkpO1xuICAgIGNvbXB1dGVkRXhjbHVzaW9ucyA9IGluZGV4QXJyYXlGYWN0b3J5KGlucHV0RXhjbHVzaW9ucyk7XG4gIH1cblxuICBzdGF0ZSA9IHsgLi4uc3RhdGUsIGlucHV0RXhjbHVzaW9ucywgY29tcHV0ZWRFeGNsdXNpb25zIH07XG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhGaWx0ZXIoc3RhdGUsIHN0YXRlLmZpbHRlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhNaW5NYXhEYXRlUmFuZ2Uoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgbWluTWF4RGF0ZVJhbmdlOiBNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+KTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgaWYgKG1pbk1heERhdGVSYW5nZSAhPSBudWxsICYmICFpc0luZmluaXRlRGF0ZVJhbmdlKG1pbk1heERhdGVSYW5nZSkpIHtcbiAgICBzdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbWluTWF4RGF0ZVJhbmdlOiB7XG4gICAgICAgIHN0YXJ0OiBtaW5NYXhEYXRlUmFuZ2Uuc3RhcnQgIT0gbnVsbCA/IHN0YXJ0T2ZEYXkobWluTWF4RGF0ZVJhbmdlLnN0YXJ0KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZW5kOiBtaW5NYXhEYXRlUmFuZ2UuZW5kICE9IG51bGwgPyBlbmRPZkRheShtaW5NYXhEYXRlUmFuZ2UuZW5kKSA6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgc3RhdGUgPSB7IC4uLnN0YXRlLCBtaW5NYXhEYXRlUmFuZ2U6IHVuZGVmaW5lZCB9O1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aEZpbHRlcihzdGF0ZSwgc3RhdGUuZmlsdGVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aEZpbHRlcihjdXJyZW50U3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgaW5wdXRGaWx0ZXI6IE1heWJlPERhdGVDZWxsU2NoZWR1bGVEYXRlRmlsdGVyQ29uZmlnPik6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIGNvbnN0IHsgY29tcHV0ZWRFeGNsdXNpb25zOiBleGNsdXNpb25zLCBtaW5NYXhEYXRlUmFuZ2UsIHN5c3RlbVRpbWV6b25lIH0gPSBjdXJyZW50U3RhdGU7XG5cbiAgbGV0IGlzRW5hYmxlZEZpbHRlckRheTogTWF5YmU8RGVjaXNpb25GdW5jdGlvbjxEYXRlQ2VsbFRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+PiA9ICgpID0+IHRydWU7XG4gIGxldCBmaWx0ZXI6IE1heWJlPERhdGVDZWxsU2NoZWR1bGVEYXRlRmlsdGVyQ29uZmlnPiA9IG51bGw7XG5cbiAgLy8gY3JlYXRlIHRoZSBmaWx0ZXIgdXNpbmcgaW5wdXRGaWx0ZXIsIGV4Y2x1c2lvbnMsIGFuZCBtaW5NYXhEYXRlUmFuZ2VcbiAgaWYgKGlucHV0RmlsdGVyIHx8IGV4Y2x1c2lvbnM/Lmxlbmd0aCB8fCBtaW5NYXhEYXRlUmFuZ2UpIHtcbiAgICBsZXQgZW5hYmxlZEZpbHRlcjogQ29uZmlndXJhYmxlPERhdGVDZWxsU2NoZWR1bGVEYXRlRmlsdGVyQ29uZmlnPjtcbiAgICBsZXQgZmlsdGVyU3RhcnQ6IE1heWJlPERhdGU+ID0gbnVsbDsgLy8gdGhlIHN0YXJ0IGRhdGUgdGhhdCB3aWxsIGJlIHVzZWQvc2V0IG9uIHRoZSBmaWx0ZXIuXG5cbiAgICBpZiAoaW5wdXRGaWx0ZXIpIHtcbiAgICAgIGZpbHRlciA9IGNvcHlEYXRlQ2VsbFNjaGVkdWxlRGF0ZUZpbHRlckNvbmZpZyhpbnB1dEZpbHRlcik7IC8vIGNvcHkgZmlsdGVyXG5cbiAgICAgIGxldCBuZXh0RmlsdGVyVGltZXpvbmU6IFRpbWV6b25lU3RyaW5nIHwgdW5kZWZpbmVkOyAvLyBvbmx5IHNldCBpZiBpbnB1dEZpbHRlci5zdGFydCBvciBpbnB1dEZpbHRlci5zdGFydHNBdFxuXG4gICAgICAvLyBjb25maWd1cmUgZmlsdGVyIHN0YXJ0XG4gICAgICBpZiAoaW5wdXRGaWx0ZXIuc3RhcnQpIHtcbiAgICAgICAgZmlsdGVyU3RhcnQgPSBpbnB1dEZpbHRlci5zdGFydDtcblxuICAgICAgICAvLyBpZiBubyB0aW1lem9uZSBpcyBzcGVjaWZpZWQsIHRoZW4gdXNlIHRoZSBzeXN0ZW0gdGltZXpvbmUgYW5kIGFsaWduIGZpbHRlclN0YXJ0IHRvIHRoZSBzdGFydCBvZiB0aGUgZGF5LlxuICAgICAgICBpZiAoIWlucHV0RmlsdGVyLnRpbWV6b25lKSB7XG4gICAgICAgICAgZmlsdGVyU3RhcnQgPSBTWVNURU1fREFURV9USU1FWk9ORV9VVENfTk9STUFMX0lOU1RBTkNFLnN0YXJ0T2ZEYXlJblRhcmdldFRpbWV6b25lKGlucHV0RmlsdGVyLnN0YXJ0c0F0KTtcbiAgICAgICAgICBuZXh0RmlsdGVyVGltZXpvbmUgPSBzeXN0ZW1UaW1lem9uZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXh0RmlsdGVyVGltZXpvbmUgPSBpbnB1dEZpbHRlci50aW1lem9uZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpbnB1dEZpbHRlci5zdGFydHNBdCkge1xuICAgICAgICBpZiAoaW5wdXRGaWx0ZXIudGltZXpvbmUpIHtcbiAgICAgICAgICAvLyBpZiBubyB0aW1lem9uZSBpcyBwcm92aWRlZCwgdXNlIHN0YXJ0c0F0IGFzLWlzXG4gICAgICAgICAgY29uc3QgdGltZXpvbmVOb3JtYWwgPSBkYXRlVGltZXpvbmVVdGNOb3JtYWwoaW5wdXRGaWx0ZXIudGltZXpvbmUpO1xuICAgICAgICAgIGZpbHRlclN0YXJ0ID0gdGltZXpvbmVOb3JtYWwuc3RhcnRPZkRheUluVGFyZ2V0VGltZXpvbmUoaW5wdXRGaWx0ZXIuc3RhcnRzQXQpO1xuICAgICAgICAgIG5leHRGaWx0ZXJUaW1lem9uZSA9IGlucHV0RmlsdGVyLnRpbWV6b25lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHNldCB0byB0aGUgc3RhcnQgb2YgdG9kYXkgaW4gdGhlIHN5c3RlbSB0aW1lem9uZS5cbiAgICAgICAgICBmaWx0ZXJTdGFydCA9IFNZU1RFTV9EQVRFX1RJTUVaT05FX1VUQ19OT1JNQUxfSU5TVEFOQ0Uuc3RhcnRPZkRheUluVGFyZ2V0VGltZXpvbmUoaW5wdXRGaWx0ZXIuc3RhcnRzQXQpO1xuICAgICAgICAgIG5leHRGaWx0ZXJUaW1lem9uZSA9IHN5c3RlbVRpbWV6b25lO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZpbHRlci5zdGFydCA9IGZpbHRlclN0YXJ0ID8/IHVuZGVmaW5lZDtcbiAgICAgIGZpbHRlci50aW1lem9uZSA9IG5leHRGaWx0ZXJUaW1lem9uZTtcblxuICAgICAgLy8gY29uZmlndXJlIGV4Y2x1c2lvbnNcbiAgICAgIGlmIChleGNsdXNpb25zPy5sZW5ndGgpIHtcbiAgICAgICAgZW5hYmxlZEZpbHRlciA9IHtcbiAgICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgICAgZXg6IHVuaXF1ZShtZXJnZUFycmF5cyhbZmlsdGVyLmV4LCBleGNsdXNpb25zXSkpXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbmFibGVkRmlsdGVyID0gZmlsdGVyO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlbmFibGVkRmlsdGVyID0ge1xuICAgICAgICB3OiAnODknLFxuICAgICAgICBleDogZXhjbHVzaW9ucyBhcyBudW1iZXJbXVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAobWluTWF4RGF0ZVJhbmdlKSB7XG4gICAgICBlbmFibGVkRmlsdGVyLm1pbk1heERhdGVSYW5nZSA9IG1pbk1heERhdGVSYW5nZTtcbiAgICAgIGVuYWJsZWRGaWx0ZXIuc2V0U3RhcnRBc01pbkRhdGUgPSBmaWx0ZXJTdGFydCA/IHRydWUgOiBmYWxzZTsgLy8gSWYgYSBzdGFydCBkYXRlIGlzIHNldCwgdGhlbiBpdCBiZWNvbWVzIHRoZSBmbG9vci5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJZiB0aGUgaW5wdXQgZmlsdGVyIGhhcyBhIHN0YXJ0IGRhdGUsIHVzZSB0aGF0IGFzIHRoZSByZWxhdGl2ZSBzdGFydCB0byBlbnN1cmUgaW5kZXhlcyBhcmUgY29tcGFyZWQgdGhlIHNhbWUsXG4gICAgICogb3RoZXJ3aXNlIHVzZSB0aGUgc3RhdGUncyBzdGFydC4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHRoZSBpbmRleCBjYWxjdWxhdGlvbnMuXG4gICAgICovXG4gICAgbGV0IGZpbmFsRW5hYmxlZFN0YXJ0OiBEYXRlO1xuICAgIGxldCBmaW5hbEVuYWJsZWRUaW1lem9uZTogVGltZXpvbmVTdHJpbmc7XG4gICAgLy8gIGZpbHRlcj8uc3RhcnQgPz8gc3RhdGUuc3RhcnQ7XG5cbiAgICBpZiAoIWVuYWJsZWRGaWx0ZXIuc3RhcnQpIHtcbiAgICAgIC8vIHVzZSB0aGUgY3VycmVudCBzdGF0ZSdzIHN0YXJ0LCBidXQgbWFrZSBzdXJlIGl0IGlzIGluIHRoZSBwcm9wZXIgdGltZXpvbmUuXG4gICAgICBpZiAoZW5hYmxlZEZpbHRlci50aW1lem9uZSkge1xuICAgICAgICBjb25zdCB0aW1lem9uZU5vcm1hbCA9IGRhdGVUaW1lem9uZVV0Y05vcm1hbChlbmFibGVkRmlsdGVyLnRpbWV6b25lKTtcbiAgICAgICAgZmluYWxFbmFibGVkU3RhcnQgPSB0aW1lem9uZU5vcm1hbC5zdGFydE9mRGF5SW5UYXJnZXRUaW1lem9uZShjdXJyZW50U3RhdGUuc3RhcnQpOyAvLyBnZXQgdGhlIHN0YXJ0IG9mIHRoZSBkYXkgZm9yIHRoZSBjdXJyZW50IHN0YXJ0XG4gICAgICAgIGZpbmFsRW5hYmxlZFRpbWV6b25lID0gZW5hYmxlZEZpbHRlci50aW1lem9uZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbmFsRW5hYmxlZFN0YXJ0ID0gY3VycmVudFN0YXRlLnN0YXJ0O1xuICAgICAgICBmaW5hbEVuYWJsZWRUaW1lem9uZSA9IHN5c3RlbVRpbWV6b25lO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWVuYWJsZWRGaWx0ZXIudGltZXpvbmUpIHtcbiAgICAgIGZpbmFsRW5hYmxlZFRpbWV6b25lID0gc3lzdGVtVGltZXpvbmU7XG5cbiAgICAgIGNvbnN0IHRpbWV6b25lTm9ybWFsID0gZGF0ZVRpbWV6b25lVXRjTm9ybWFsKGZpbmFsRW5hYmxlZFRpbWV6b25lKTtcbiAgICAgIGZpbmFsRW5hYmxlZFN0YXJ0ID0gdGltZXpvbmVOb3JtYWwuc3RhcnRPZkRheUluVGFyZ2V0VGltZXpvbmUoZW5hYmxlZEZpbHRlci5zdGFydCk7IC8vIGdldCB0aGUgc3RhcnQgb2YgdGhlIGRheSBmb3IgdGhlIHRhcmdldCB0aW1lem9uZVxuICAgIH0gZWxzZSB7XG4gICAgICBmaW5hbEVuYWJsZWRTdGFydCA9IGVuYWJsZWRGaWx0ZXIuc3RhcnQ7XG4gICAgICBmaW5hbEVuYWJsZWRUaW1lem9uZSA9IGVuYWJsZWRGaWx0ZXIudGltZXpvbmU7XG4gICAgfVxuXG4gICAgZW5hYmxlZEZpbHRlci5zdGFydCA9IGZpbmFsRW5hYmxlZFN0YXJ0O1xuICAgIGVuYWJsZWRGaWx0ZXIudGltZXpvbmUgPSBmaW5hbEVuYWJsZWRUaW1lem9uZTtcblxuICAgIC8vIGNyZWF0ZSB0aGUgZmlsdGVyXG4gICAgaXNFbmFibGVkRmlsdGVyRGF5ID0gZGF0ZUNlbGxTY2hlZHVsZURhdGVGaWx0ZXIoZW5hYmxlZEZpbHRlcik7XG4gIH1cblxuICBsZXQgbmV4dFN0YXRlOiBCdWlsZGluZzxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGU+ID0geyAuLi5jdXJyZW50U3RhdGUsIGZpbHRlciwgaXNFbmFibGVkRmlsdGVyRGF5IH07XG5cbiAgLy8gRm9yIHRoZSBzYW1lIHJlYXNvbiBhcyBhYm92ZSwgdXNlIHRoZSBmaWx0ZXIncyBzdGFydCBkYXRlIGFzIHRoZSByZWxhdGl2ZSBzdGFydCBpZiBhcHBsaWNhYmxlLlxuICBpZiAoZmlsdGVyICYmIGZpbHRlci5zdGFydCkge1xuICAgIGxldCBzdGFydEZvclN5c3RlbVRpbWV6b25lOiBEYXRlID0gZmlsdGVyLnN0YXJ0O1xuXG4gICAgaWYgKGZpbHRlci50aW1lem9uZSkge1xuICAgICAgY29uc3QgdGltZXpvbmVOb3JtYWwgPSBkYXRlVGltZXpvbmVVdGNOb3JtYWwoZmlsdGVyLnRpbWV6b25lKTtcbiAgICAgIHN0YXJ0Rm9yU3lzdGVtVGltZXpvbmUgPSB0aW1lem9uZU5vcm1hbC5zeXN0ZW1EYXRlVG9UYXJnZXREYXRlKGZpbHRlci5zdGFydCk7IC8vIGdldCB0aGUgc3RhcnQgb2YgdGhlIGRheSBmb3IgdGhlIHN5c3RlbSB0aW1lem9uZVxuICAgIH1cblxuICAgIG5leHRTdGF0ZS5zdGFydCA9IHN0YXJ0Rm9yU3lzdGVtVGltZXpvbmU7XG4gICAgbmV4dFN0YXRlLmluZGV4RmFjdG9yeSA9IGRhdGVDZWxsVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnkoeyBzdGFydHNBdDogc3RhcnRGb3JTeXN0ZW1UaW1lem9uZSwgdGltZXpvbmU6IHN5c3RlbVRpbWV6b25lIH0pO1xuICAgIG5leHRTdGF0ZS5pbmRleERheU9mV2VlayA9IGRhdGVDZWxsRGF5T2ZXZWVrRmFjdG9yeShzdGFydEZvclN5c3RlbVRpbWV6b25lKTtcbiAgfVxuXG4gIC8vIGF0dGVtcHQgdG8gcmUtYXBwbHkgdGhlIGluaXRpYWwgc2VsZWN0aW9uIHN0YXRlIG9uY2UgZmlsdGVyIGlzIGFwcGxpZWRcbiAgaWYgKG5leHRTdGF0ZS5pbml0aWFsU2VsZWN0aW9uU3RhdGUpIHtcbiAgICBuZXh0U3RhdGUgPSB1cGRhdGVTdGF0ZVdpdGhJbml0aWFsU2VsZWN0aW9uU3RhdGUobmV4dFN0YXRlIGFzIENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgbmV4dFN0YXRlLmluaXRpYWxTZWxlY3Rpb25TdGF0ZSk7XG4gIH1cblxuICAvLyByZS1jYWxjdWxhdGUgdGhlIHNlbGVjdGlvbiBnaXZlbiB0aGUgZmlsdGVyXG4gIGNvbnN0IHsgaW5wdXRTdGFydCwgaW5wdXRFbmQgfSA9IG5leHRTdGF0ZTtcblxuICBpZiAoaW5wdXRTdGFydCAmJiBpbnB1dEVuZCkge1xuICAgIG5leHRTdGF0ZSA9IHVwZGF0ZVN0YXRlV2l0aENoYW5nZWRSYW5nZShuZXh0U3RhdGUgYXMgQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCB7IGlucHV0U3RhcnQsIGlucHV0RW5kIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZSBhcyBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhUaW1lem9uZVZhbHVlKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIHRpbWV6b25lOiBNYXliZTxUaW1lem9uZVN0cmluZz4pOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBjb25zdCB7IGN1cnJlbnRTZWxlY3Rpb25WYWx1ZSB9ID0gc3RhdGU7XG4gIGNvbnN0IHRpbWV6b25lTm9ybWFsID0gdGltZXpvbmUgPyBkYXRlVGltZXpvbmVVdGNOb3JtYWwoeyB0aW1lem9uZSB9KSA6IHVuZGVmaW5lZDtcblxuICBpZiAodGltZXpvbmVOb3JtYWwgJiYgY3VycmVudFNlbGVjdGlvblZhbHVlKSB7XG4gICAgLy8gdXBkYXRlIHRoZSBzZWxlY3Rpb24gdmFsdWUgdG8gcmVmbGVjdCB0aGUgdGltZXpvbmUgY2hhbmdlcy5cbiAgICBjb25zdCB7IGRhdGVTY2hlZHVsZVJhbmdlOiBjdXJyZW50RGF0ZUNlbGxTY2hlZHVsZVJhbmdlIH0gPSBjdXJyZW50U2VsZWN0aW9uVmFsdWU7XG4gICAgY29uc3Qgc3RhcnQgPSB0aW1lem9uZU5vcm1hbC50YXJnZXREYXRlVG9TeXN0ZW1EYXRlKGN1cnJlbnREYXRlQ2VsbFNjaGVkdWxlUmFuZ2Uuc3RhcnQpO1xuICAgIGNvbnN0IGVuZCA9IHRpbWV6b25lTm9ybWFsLnRhcmdldERhdGVUb1N5c3RlbURhdGUoY3VycmVudERhdGVDZWxsU2NoZWR1bGVSYW5nZS5lbmQpO1xuXG4gICAgY29uc3QgbmV3UmFuZ2U6IERhdGVDZWxsU2NoZWR1bGVEYXRlUmFuZ2UgPSB7XG4gICAgICAuLi5jdXJyZW50U2VsZWN0aW9uVmFsdWUuZGF0ZVNjaGVkdWxlUmFuZ2UsXG4gICAgICBzdGFydCxcbiAgICAgIGVuZFxuICAgIH07XG5cbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoRGF0ZUNlbGxTY2hlZHVsZVJhbmdlVmFsdWUoeyAuLi5zdGF0ZSwgb3V0cHV0VGltZXpvbmU6IHRpbWV6b25lLCBvdXRwdXRUaW1lem9uZU5vcm1hbDogdGltZXpvbmVOb3JtYWwgfSwgbmV3UmFuZ2UpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7IC4uLnN0YXRlLCBvdXRwdXRUaW1lem9uZTogdGltZXpvbmUsIG91dHB1dFRpbWV6b25lTm9ybWFsOiB0aW1lem9uZU5vcm1hbCB9OyAvLyBubyBjaGFuZ2UgaW4gdmFsdWVcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoRGF0ZUNlbGxTY2hlZHVsZVJhbmdlVmFsdWUoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgaW5wdXRDaGFuZ2U6IE1heWJlPEZ1bGxEYXRlQ2VsbFNjaGVkdWxlUmFuZ2VJbnB1dERhdGVSYW5nZT4pOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBjb25zdCB7IGN1cnJlbnRTZWxlY3Rpb25WYWx1ZSwgc3lzdGVtVGltZXpvbmUgfSA9IHN0YXRlO1xuICBjb25zdCBjdXJyZW50RGF0ZUNlbGxTY2hlZHVsZVJhbmdlID0gY3VycmVudFNlbGVjdGlvblZhbHVlPy5kYXRlU2NoZWR1bGVSYW5nZTsgLy8gY3VycmVudCByYW5nZSBpcyBhbHdheXMgaW4gc3lzdGVtIHRpbWVcbiAgbGV0IGNoYW5nZTogTWF5YmU8UGljazxEYXRlQ2VsbFNjaGVkdWxlRGF0ZVJhbmdlLCAnc3RhcnQnIHwgJ2VuZCcgfCAnZXgnIHwgJ3cnIHwgJ3RpbWV6b25lJz4+O1xuXG4gIC8vIFdoZW4gdXNpbmcgdGltZXpvbmVzLCBhbHdheXMgcmV0dXJuIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBkYXkuIElucHV0cyBhcmUgY29udmVydGVkIHRvIHRoZSBzeXN0ZW0gdGltZSBhbmQgdXNlZCBhcyB0aGUgc3RhcnQgb2YgdGhlIGRheS5cbiAgLy8gT3V0cHV0cyByZW1haW4gYWNjdXJhdGUuXG5cbiAgaWYgKGlucHV0Q2hhbmdlKSB7XG4gICAgLy8gbWFrZSBzdXJlIGEgdGltZXpvbmUgaXMgc2V0LiBJbnB1dCBtYXkgbm90IGhhdmUgYSB0aW1lem9uZSBhdHRhY2hlZC4gRGVmYXVsdCB0byBzeXN0ZW0gdGltZS5cbiAgICBjb25zdCBpbnB1dENoYW5nZVdpdGhUaW1lem9uZVNldCA9IHtcbiAgICAgIC4uLmlucHV0Q2hhbmdlLFxuICAgICAgdGltZXpvbmU6IGlucHV0Q2hhbmdlLnRpbWV6b25lID8/IHN5c3RlbVRpbWV6b25lXG4gICAgfTtcblxuICAgIC8vIGNhbGN1bGF0ZSB0aGUgc2NoZWR1bGUgcmFuZ2VcbiAgICBjb25zdCBmdWxsQ2hhbmdlID0gZnVsbERhdGVDZWxsU2NoZWR1bGVSYW5nZSh7IGRhdGVDZWxsU2NoZWR1bGVSYW5nZTogaW5wdXRDaGFuZ2VXaXRoVGltZXpvbmVTZXQgfSk7XG4gICAgY29uc3QgaW5wdXROb3JtYWwgPSBkYXRlQ2VsbFRpbWluZ1RpbWV6b25lTm9ybWFsSW5zdGFuY2UoZnVsbENoYW5nZSk7XG5cbiAgICBjb25zdCBzdGFydEluU3lzdGVtVHogPSBpbnB1dE5vcm1hbC5zeXN0ZW1EYXRlVG9UYXJnZXREYXRlKGZ1bGxDaGFuZ2Uuc3RhcnQpO1xuICAgIGNvbnN0IGVuZEluU3lzdGVtVHogPSBzdGFydE9mRGF5KGlucHV0Tm9ybWFsLnN5c3RlbURhdGVUb1RhcmdldERhdGUoZnVsbENoYW5nZS5lbmQpKTtcblxuICAgIC8vIGNvbnZlcnQgdGhlIHN0YXJ0L2VuZCB0byBzeXN0ZW0gdGltZVxuICAgIGNoYW5nZSA9IHtcbiAgICAgIHN0YXJ0OiBzdGFydEluU3lzdGVtVHosXG4gICAgICBlbmQ6IGVuZEluU3lzdGVtVHosXG4gICAgICB3OiBmdWxsQ2hhbmdlLncsXG4gICAgICBleDogZnVsbENoYW5nZS5leCxcbiAgICAgIHRpbWV6b25lOiBmdWxsQ2hhbmdlLnRpbWV6b25lXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGlzU2FtZVZhbHVlID0gaXNTYW1lRGF0ZUNlbGxTY2hlZHVsZURhdGVSYW5nZShjdXJyZW50RGF0ZUNlbGxTY2hlZHVsZVJhbmdlLCBjaGFuZ2UpO1xuXG4gIGlmIChpc1NhbWVWYWx1ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoY2hhbmdlICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IG5leHRTdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlID0geyAuLi5zdGF0ZSwgaW5wdXRTdGFydDogY2hhbmdlLnN0YXJ0LCBpbnB1dEVuZDogY2hhbmdlLmVuZCwgdG9nZ2xlZEluZGV4ZXM6IG5ldyBTZXQoY2hhbmdlLmV4KSB9O1xuICAgICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aENoYW5nZWRTY2hlZHVsZURheXMoZmluYWxpemVOZXdDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUobmV4dFN0YXRlKSwgZXhwYW5kRGF0ZUNlbGxTY2hlZHVsZURheUNvZGVzKGNoYW5nZS53IHx8ICc4OScpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5vU2VsZWN0aW9uQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKHN0YXRlKTsgLy8gY2xlYXIgc2VsZWN0aW9uLCByZXRhaW4gZGlzYWJsZWQgZGF5c1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZERlZmF1bHRTY2hlZHVsZURheXMoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgY2hhbmdlOiBNYXliZTxJdGVyYWJsZTxEYXRlQ2VsbFNjaGVkdWxlRGF5Q29kZT4+KTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgY29uc3QgeyBkZWZhdWx0U2NoZWR1bGVEYXlzOiBjdXJyZW50RGVmYXVsdFNjaGVkdWxlRGF5cyB9ID0gc3RhdGU7XG4gIGNvbnN0IGRlZmF1bHRTY2hlZHVsZURheXMgPSBuZXcgU2V0KGNoYW5nZSA/PyBmdWxsV2Vla0RhdGVDZWxsU2NoZWR1bGVEYXlDb2RlcygpKTtcblxuICBpZiAoZGF0ZUNlbGxTY2hlZHVsZURheUNvZGVzQXJlU2V0c0VxdWl2YWxlbnQoZGVmYXVsdFNjaGVkdWxlRGF5cywgY3VycmVudERlZmF1bHRTY2hlZHVsZURheXMpKSB7XG4gICAgcmV0dXJuIHN0YXRlOyAvLyBubyBjaGFuZ2VcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmluYWxpemVVcGRhdGVTdGF0ZVdpdGhDaGFuZ2VkU2NoZWR1bGVEYXlzKHN0YXRlLCB7IC4uLnN0YXRlLCBkZWZhdWx0U2NoZWR1bGVEYXlzIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkU2NoZWR1bGVEYXlzKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIGNoYW5nZTogTWF5YmU8SXRlcmFibGU8RGF0ZUNlbGxTY2hlZHVsZURheUNvZGU+Pik6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIGNvbnN0IHsgc2NoZWR1bGVEYXlzOiBjdXJyZW50U2NoZWR1bGVEYXlzIH0gPSBzdGF0ZTtcbiAgY29uc3Qgc2NoZWR1bGVEYXlzID0gbmV3IFNldChjaGFuZ2UgPz8gW10pO1xuXG4gIGxldCBuZXdTY2hlZHVsZURheXM6IFNldDxEYXRlQ2VsbFNjaGVkdWxlRGF5Q29kZT4gfCBudWxsIHwgdW5kZWZpbmVkO1xuXG4gIGlmIChjdXJyZW50U2NoZWR1bGVEYXlzICE9IG51bGwgJiYgY2hhbmdlICE9IG51bGwpIHtcbiAgICBpZiAoZGF0ZUNlbGxTY2hlZHVsZURheUNvZGVzQXJlU2V0c0VxdWl2YWxlbnQoc2NoZWR1bGVEYXlzLCBjdXJyZW50U2NoZWR1bGVEYXlzKSkge1xuICAgICAgbmV3U2NoZWR1bGVEYXlzID0gdW5kZWZpbmVkOyAvL25vIGNoYW5nZVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdTY2hlZHVsZURheXMgPSBzY2hlZHVsZURheXM7XG4gICAgfVxuICB9IGVsc2UgaWYgKGN1cnJlbnRTY2hlZHVsZURheXMgIT09IGNoYW5nZSkge1xuICAgIG5ld1NjaGVkdWxlRGF5cyA9IGNoYW5nZSA/IHNjaGVkdWxlRGF5cyA6IG51bGw7IC8vIHNldCB0aGUgbmV3IG9uZSwgb3IgY2xlYXIgaXRcbiAgfVxuXG4gIGlmIChuZXdTY2hlZHVsZURheXMgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmluYWxpemVVcGRhdGVTdGF0ZVdpdGhDaGFuZ2VkU2NoZWR1bGVEYXlzKHN0YXRlLCB7IC4uLnN0YXRlLCBzY2hlZHVsZURheXM6IG5ld1NjaGVkdWxlRGF5cyA/PyB1bmRlZmluZWQgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aFNlbGVjdGlvbk1vZGUoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgc2VsZWN0aW9uTW9kZTogRGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlU2VsZWN0aW9uTW9kZSk6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIGNvbnN0IHsgc2VsZWN0aW9uTW9kZTogY3VycmVudFNlbGVjdGlvbk1vZGUgfSA9IHN0YXRlO1xuXG4gIGlmIChjdXJyZW50U2VsZWN0aW9uTW9kZSAhPT0gc2VsZWN0aW9uTW9kZSkge1xuICAgIGNvbnN0IG5leHRTdGF0ZSA9IHsgLi4uc3RhdGUsIHNlbGVjdGlvbk1vZGUgfTtcblxuICAgIGlmIChzZWxlY3Rpb25Nb2RlID09PSAnbXVsdGlwbGUnKSB7XG4gICAgICByZXR1cm4gbmV4dFN0YXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjdXJyZW50U2VsZWN0aW9uUmFuZ2UgPSBjb21wdXRlQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbkRhdGVDZWxsUmFuZ2UobmV4dFN0YXRlKTtcbiAgICAgIHJldHVybiBjdXJyZW50U2VsZWN0aW9uUmFuZ2UgPyB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGF0ZXMobmV4dFN0YXRlLCB7IHNldDogW2N1cnJlbnRTZWxlY3Rpb25SYW5nZS5pXSwgaW52ZXJ0U2V0QmVoYXZpb3I6IHRydWUgfSkgOiBuZXh0U3RhdGU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluYWxpemVVcGRhdGVTdGF0ZVdpdGhDaGFuZ2VkU2NoZWR1bGVEYXlzKHByZXZpb3VzU3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgbmV4dFN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUpOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBjb25zdCBwcmV2aW91c1NjaGVkdWxlRGF5cyA9IHByZXZpb3VzU3RhdGUuZWZmZWN0aXZlU2NoZWR1bGVEYXlzO1xuICBjb25zdCBuZXh0U2NoZWR1bGVEYXlzID0gbmV4dFN0YXRlLnNjaGVkdWxlRGF5cyA/PyBuZXh0U3RhdGUuZGVmYXVsdFNjaGVkdWxlRGF5cztcblxuICBpZiAoZGF0ZUNlbGxTY2hlZHVsZURheUNvZGVzQXJlU2V0c0VxdWl2YWxlbnQobmV4dFNjaGVkdWxlRGF5cywgcHJldmlvdXNTY2hlZHVsZURheXMpKSB7XG4gICAgcmV0dXJuIG5leHRTdGF0ZTsgLy8gdGhlIGRlZmF1bHQgb3IgaW5wdXQgc2NoZWR1bGUgY2hhbmdlZCBidXQgdGhlIHNjaGVkdWxlIGlzIHN0aWxsIHRoZSBzYW1lLCBzbyBubyBuZWVkIGZvciBhbiB1cGRhdGUuXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZWZmZWN0aXZlU2NoZWR1bGVEYXlzID0gbmV3IFNldChzaW1wbGlmeURhdGVDZWxsU2NoZWR1bGVEYXlDb2RlcyhuZXh0U2NoZWR1bGVEYXlzKSk7XG4gICAgY29uc3QgYWxsb3dlZERheXNPZldlZWsgPSBleHBhbmREYXRlQ2VsbFNjaGVkdWxlRGF5Q29kZXNUb0RheU9mV2Vla1NldChuZXh0U2NoZWR1bGVEYXlzKTtcblxuICAgIHJldHVybiBmaW5hbGl6ZU5ld0NhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSh7XG4gICAgICAuLi5uZXh0U3RhdGUsXG4gICAgICAvLyB1cGRhdGUgdGhlIGVmZmVjdGl2ZSBzY2hlZHVsZSBkYXlzIGFuZCBhbGxvd2VkIGRheXMgb2Ygd2Vla1xuICAgICAgZWZmZWN0aXZlU2NoZWR1bGVEYXlzLFxuICAgICAgYWxsb3dlZERheXNPZldlZWtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZURhdGVzQ2hhbmdlIHtcbiAgcmVzZXQ/OiB0cnVlO1xuICB0b2dnbGU/OiBJdGVyYWJsZU9yVmFsdWU8RGF0ZUNlbGxUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0PjtcbiAgYWRkPzogSXRlcmFibGVPclZhbHVlPERhdGVDZWxsVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD47XG4gIHJlbW92ZT86IEl0ZXJhYmxlT3JWYWx1ZTxEYXRlQ2VsbFRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+O1xuICBzZXQ/OiBJdGVyYWJsZU9yVmFsdWU8RGF0ZUNlbGxUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0PjtcbiAgc2VsZWN0QWxsPzogQWxsT3JOb25lU2VsZWN0aW9uO1xuICAvKipcbiAgICogSW52ZXJ0cyB0aGUgc2V0IGRhdGUgY2hhbmdpbmcgYmVoYXZpb3Igc28gdGhhdCB0aGUgc2V0IGlucHV0IGlzIHRyZWF0ZWQgYXMgaXRlbXMgdGhhdCBzaG91bGQgYmUgcmV0YWluZWQgaW5zdGVhZCBvZiBleGNsdWRlZC5cbiAgICpcbiAgICogSWdub3JlZCB3aGVuIHNldCBpcyBub3QgdXNlZC4gSWdub3JlZCBmb3Igc2VsZWN0QWxsLlxuICAgKi9cbiAgaW52ZXJ0U2V0QmVoYXZpb3I/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZERhdGVzKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIGNoYW5nZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlRGF0ZXNDaGFuZ2UpOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBjb25zdCB7IHNlbGVjdGlvbk1vZGUsIGFsbG93ZWREYXlzT2ZXZWVrLCBpbmRleEZhY3RvcnksIGluZGV4RGF5T2ZXZWVrLCBpbnB1dFN0YXJ0OiBjdXJyZW50SW5wdXRTdGFydCwgaW5wdXRFbmQ6IGN1cnJlbnRJbnB1dEVuZCwgbWluTWF4RGF0ZVJhbmdlLCBmaWx0ZXIgfSA9IHN0YXRlO1xuICBjb25zdCB7IHN0YXJ0OiBtaW5EYXRlRnJvbUZpbHRlciwgZW5kOiBtYXhEYXRlRnJvbUZpbHRlciB9ID0gY2FsZW5kYXJTY2hlZHVsZU1pbkFuZE1heERhdGVSYW5nZVJlbGF0aXZlVG9GaWx0ZXIoc3RhdGUpO1xuICBsZXQgaW5wdXRTdGFydCA9IGN1cnJlbnRJbnB1dFN0YXJ0O1xuICBsZXQgaW5wdXRFbmQgPSBjdXJyZW50SW5wdXRFbmQ7XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBzZXQgb2YgaW5kZXhlcyB0aGF0IGFyZSBpbnRlcm5hbGx5IFwic2VsZWN0ZWRcIiBzbyB0aGF0IHRoZXkgYXJlIGV4Y2x1ZGVkIGZyb20gdGhlIGlucHV0U3RhcnQvaW5wdXRFbmQgZGF0ZSByYW5nZS5cbiAgICpcbiAgICogRG8gbm90IGNvbmZ1c2UgdGhpcyB3aXRoIHRoZSBhY3R1YWwgaW5kZXhlcyB0aGF0IGFyZSBzZWxlY3RlZC5cbiAgICovXG4gIGxldCB0b2dnbGVkSW5kZXhlczogU2V0PERhdGVDZWxsSW5kZXg+O1xuXG4gIGZ1bmN0aW9uIGFzSW5kZXhlcyhpbmRleGVzOiBJdGVyYWJsZU9yVmFsdWU8RGF0ZUNlbGxUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0Pik6IERhdGVDZWxsSW5kZXhbXSB7XG4gICAgcmV0dXJuIGl0ZXJhYmxlVG9BcnJheShpbmRleGVzKS5tYXAoaW5kZXhGYWN0b3J5KTtcbiAgfVxuXG4gIC8vIFdoZW4gdXNpbmcgc2VsZWN0aW9uIG1vZGUgXCJzaW5nbGVcIiB3ZSB1cGRhdGUgdGhlIGNoYW5nZSB0byByZWZsZWN0IHRoZSBzaW5nbGUgc2VsZWN0aW9uLlxuICBpZiAoc2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICBmdW5jdGlvbiBzZXRGcm9tRmlyc3RWYWx1ZShpbnB1dDogSXRlcmFibGVPclZhbHVlPERhdGVDZWxsVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD4pOiBTZXQ8RGF0ZUNlbGxUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0PiB7XG4gICAgICBjb25zdCBmaXJzdFZhbHVlID0gaXNJdGVyYWJsZShpbnB1dCkgPyBmaXJzdFZhbHVlRnJvbUl0ZXJhYmxlKGlucHV0KSA6IGlucHV0O1xuICAgICAgY29uc3Qgc2V0ID0gbmV3IFNldDxEYXRlQ2VsbFRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+KCk7XG5cbiAgICAgIGlmIChmaXJzdFZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgc2V0LmFkZChmaXJzdFZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNldDtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlLnNldCkge1xuICAgICAgY2hhbmdlID0geyBzZXQ6IHNldEZyb21GaXJzdFZhbHVlKGNoYW5nZS5zZXQpLCBpbnZlcnRTZXRCZWhhdmlvcjogdHJ1ZSB9O1xuICAgIH0gZWxzZSBpZiAoY2hhbmdlLnRvZ2dsZSkge1xuICAgICAgY29uc3QgbmV4dFNldCA9IHNldEZyb21GaXJzdFZhbHVlKGNoYW5nZS50b2dnbGUpO1xuXG4gICAgICBpZiAobmV4dFNldC5zaXplKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0U2V0VmFsdWVJbmRleCA9IGluZGV4RmFjdG9yeShmaXJzdFZhbHVlRnJvbUl0ZXJhYmxlKG5leHRTZXQpIGFzIERhdGVDZWxsVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dCk7XG5cbiAgICAgICAgaWYgKHN0YXRlLnRvZ2dsZWRJbmRleGVzLmhhcyhmaXJzdFNldFZhbHVlSW5kZXgpIHx8IChpbnB1dFN0YXJ0ICYmIGluZGV4RmFjdG9yeShpbnB1dFN0YXJ0KSA9PT0gZmlyc3RTZXRWYWx1ZUluZGV4KSkge1xuICAgICAgICAgIG5leHRTZXQuY2xlYXIoKTsgLy8gY2xlYXIgd2l0aCB0aGUgbmV4dCBzZXRcbiAgICAgICAgfVxuXG4gICAgICAgIGNoYW5nZSA9IHsgc2V0OiBuZXh0U2V0LCBpbnZlcnRTZXRCZWhhdmlvcjogdHJ1ZSB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNldCwgc2VsZWN0QWxsLCBhZGQsIGFuZCByZW1vdmUgYXJlIHRyZWF0ZWQgYXMgdGhleSBub3JtYWxseSBhcmUuXG4gIH1cblxuICBpZiAoY2hhbmdlLnJlc2V0IHx8IGNoYW5nZS5zZWxlY3RBbGwgIT0gbnVsbCB8fCBjaGFuZ2Uuc2V0ICE9IG51bGwpIHtcbiAgICBsZXQgc2V0OiBNYXliZTxJdGVyYWJsZU9yVmFsdWU8RGF0ZUNlbGxUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0Pj4gPSBjaGFuZ2Uuc2V0ID8/IFtdO1xuICAgIGNvbnN0IHNlbGVjdEFsbDogTWF5YmU8QWxsT3JOb25lU2VsZWN0aW9uPiA9IGNoYW5nZS5yZXNldCA9PT0gdHJ1ZSA/IHN0YXRlLmluaXRpYWxTZWxlY3Rpb25TdGF0ZSA6IGNoYW5nZS5zZWxlY3RBbGw7XG5cbiAgICBzd2l0Y2ggKHNlbGVjdEFsbCkge1xuICAgICAgY2FzZSAnYWxsJzpcbiAgICAgICAgaWYgKG1pbkRhdGVGcm9tRmlsdGVyICE9IG51bGwgJiYgbWF4RGF0ZUZyb21GaWx0ZXIgIT0gbnVsbCkge1xuICAgICAgICAgIGlucHV0U3RhcnQgPSBtaW5EYXRlRnJvbUZpbHRlcjtcbiAgICAgICAgICBpbnB1dEVuZCA9IG1heERhdGVGcm9tRmlsdGVyO1xuICAgICAgICAgIHNldCA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbm9uZSc6XG4gICAgICAgIGlucHV0U3RhcnQgPSBudWxsO1xuICAgICAgICBpbnB1dEVuZCA9IG51bGw7XG4gICAgICAgIHNldCA9IFtdO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dFNldEluZGV4ZXMgPSBhc0luZGV4ZXMoc2V0KTtcbiAgICB0b2dnbGVkSW5kZXhlcyA9IG5ldyBTZXQoaW5wdXRTZXRJbmRleGVzKTtcblxuICAgIGlmIChjaGFuZ2UuaW52ZXJ0U2V0QmVoYXZpb3IgJiYgIXNlbGVjdEFsbCkge1xuICAgICAgbGV0IG1pbkluZGV4OiBNYXliZTxudW1iZXI+O1xuICAgICAgbGV0IG1heEluZGV4OiBNYXliZTxudW1iZXI+O1xuXG4gICAgICBpZiAobWluRGF0ZUZyb21GaWx0ZXIgIT0gbnVsbCAmJiBtYXhEYXRlRnJvbUZpbHRlciAhPSBudWxsKSB7XG4gICAgICAgIC8vIG9ubHkgYXBwbGljYWJsZSB3aGVuIHRoZSBmaWx0ZXIgaXMgc2V0LlxuICAgICAgICBtaW5JbmRleCA9IGluZGV4RmFjdG9yeShtaW5EYXRlRnJvbUZpbHRlcik7XG4gICAgICAgIG1heEluZGV4ID0gaW5kZXhGYWN0b3J5KG1heERhdGVGcm9tRmlsdGVyKTtcblxuICAgICAgICBpbnB1dFN0YXJ0ID0gbWluRGF0ZUZyb21GaWx0ZXI7XG4gICAgICAgIGlucHV0RW5kID0gbWF4RGF0ZUZyb21GaWx0ZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB3aGVuIHRoZSBmaWx0ZXIgaXMgbm90IHNldCwgdXNlIHRoZSBsZWFzdCBhbmQgZ3JlYXRlc3QgaW5kZXhlcyBmcm9tIHRoZSBpbnB1dCBzZXQuXG4gICAgICAgIGNvbnN0IG1pbkFuZE1heCA9IG1pbkFuZE1heE51bWJlcihpbnB1dFNldEluZGV4ZXMpO1xuXG4gICAgICAgIGlmIChtaW5BbmRNYXggIT0gbnVsbCkge1xuICAgICAgICAgIG1pbkluZGV4ID0gbWluQW5kTWF4Lm1pbjtcbiAgICAgICAgICBtYXhJbmRleCA9IG1pbkFuZE1heC5tYXg7XG4gICAgICAgICAgY29uc3QgZGF0ZUZhY3RvcnkgPSBkYXRlQ2VsbFRpbWluZ1N0YXJ0RGF0ZUZhY3RvcnkoaW5kZXhGYWN0b3J5Ll90aW1pbmcpO1xuXG4gICAgICAgICAgaW5wdXRTdGFydCA9IGRhdGVGYWN0b3J5KG1pbkFuZE1heC5taW4pO1xuICAgICAgICAgIGlucHV0RW5kID0gbWluQW5kTWF4Lm1pbiA9PT0gbWluQW5kTWF4Lm1heCA/IGlucHV0U3RhcnQgOiBkYXRlRmFjdG9yeShtaW5BbmRNYXgubWF4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBlcXVpdmFsZW50IHRvIGFuIGVtcHR5IHNldCAvIHVzaW5nIFwibm9uZVwiIHdpdGggc2VsZWN0QWxsLlxuICAgICAgICAgIGlucHV0U3RhcnQgPSBudWxsO1xuICAgICAgICAgIGlucHV0RW5kID0gbnVsbDtcbiAgICAgICAgICB0b2dnbGVkSW5kZXhlcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyB0b2dnbGVkSW5kZXhlcyBzaG91bGQgbm90IGluY2x1ZGUgYW55IGluZGV4ZXMgd2Ugd2FudCB0byBpbmNsdWRlXG4gICAgICBpZiAobWluSW5kZXggIT0gbnVsbCAmJiBtYXhJbmRleCAhPSBudWxsKSB7XG4gICAgICAgIHRvZ2dsZWRJbmRleGVzID0gbmV3IFNldChyYW5nZShtaW5JbmRleCwgbWF4SW5kZXggKyAxKS5maWx0ZXIoKHgpID0+ICF0b2dnbGVkSW5kZXhlcy5oYXMoeCkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdG9nZ2xlZEluZGV4ZXMgPSBuZXcgU2V0KHN0YXRlLnRvZ2dsZWRJbmRleGVzKTsgLy8gY29weSB0aGUgc2V0XG5cbiAgICBpZiAoY2hhbmdlLnRvZ2dsZSkge1xuICAgICAgY29uc3QgYWxsb3dlZFRvVG9nZ2xlID0gYXNJbmRleGVzKGNoYW5nZS50b2dnbGUpLmZpbHRlcigoaSkgPT4gYWxsb3dlZERheXNPZldlZWsuaGFzKGluZGV4RGF5T2ZXZWVrKGkpKSk7XG4gICAgICB0b2dnbGVJblNldCh0b2dnbGVkSW5kZXhlcywgYWxsb3dlZFRvVG9nZ2xlKTtcbiAgICB9XG5cbiAgICBsZXQgYWRkVG9FeGNsdXNpb246IE1heWJlPEl0ZXJhYmxlT3JWYWx1ZTxEYXRlQ2VsbFRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+PjtcbiAgICBsZXQgcmVtb3ZlRnJvbUV4Y2x1c2lvbjogTWF5YmU8SXRlcmFibGVPclZhbHVlPERhdGVDZWxsVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD4+O1xuXG4gICAgaWYgKGNoYW5nZS5hZGQpIHtcbiAgICAgIGlmIChjaGFuZ2UuaW52ZXJ0U2V0QmVoYXZpb3IpIHtcbiAgICAgICAgYWRkVG9FeGNsdXNpb24gPSBjaGFuZ2UuYWRkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVtb3ZlRnJvbUV4Y2x1c2lvbiA9IGNoYW5nZS5hZGQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZS5yZW1vdmUpIHtcbiAgICAgIGlmIChjaGFuZ2UuaW52ZXJ0U2V0QmVoYXZpb3IpIHtcbiAgICAgICAgcmVtb3ZlRnJvbUV4Y2x1c2lvbiA9IGNoYW5nZS5yZW1vdmU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhZGRUb0V4Y2x1c2lvbiA9IGNoYW5nZS5yZW1vdmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFkZFRvRXhjbHVzaW9uKSB7XG4gICAgICByZW1vdmVGcm9tU2V0KHRvZ2dsZWRJbmRleGVzLCBhc0luZGV4ZXMoYWRkVG9FeGNsdXNpb24pKTtcbiAgICB9XG5cbiAgICBpZiAocmVtb3ZlRnJvbUV4Y2x1c2lvbikge1xuICAgICAgYWRkVG9TZXQodG9nZ2xlZEluZGV4ZXMsIGFzSW5kZXhlcyhyZW1vdmVGcm9tRXhjbHVzaW9uKSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbmV4dFN0YXRlID0geyAuLi5zdGF0ZSwgaW5wdXRTdGFydCwgaW5wdXRFbmQsIHRvZ2dsZWRJbmRleGVzIH07XG4gIG5leHRTdGF0ZS5pc0VuYWJsZWREYXkgPSBpc0VuYWJsZWREYXlJbkNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZShuZXh0U3RhdGUpO1xuXG4gIC8vIFJlY2FsY3VsYXRlIHRoZSByYW5nZSBhbmQgc2ltcGxpZmllZCB0byBleGNsdXNpb25zXG4gIGNvbnN0IHJhbmdlQW5kRXhjbHVzaW9uID0gY29tcHV0ZVNjaGVkdWxlU2VsZWN0aW9uUmFuZ2VBbmRFeGNsdXNpb24obmV4dFN0YXRlKTtcblxuICBpZiAocmFuZ2VBbmRFeGNsdXNpb24pIHtcbiAgICByZXR1cm4gZmluYWxpemVOZXdDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUoeyAuLi5uZXh0U3RhdGUsIHRvZ2dsZWRJbmRleGVzOiBuZXcgU2V0KHJhbmdlQW5kRXhjbHVzaW9uLmV4Y2x1ZGVkKSwgaW5wdXRTdGFydDogcmFuZ2VBbmRFeGNsdXNpb24uc3RhcnQsIGlucHV0RW5kOiByYW5nZUFuZEV4Y2x1c2lvbi5lbmQgfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gbm8gc2VsZWN0ZWQgZGF5c1xuICAgIHJldHVybiBub1NlbGVjdGlvbkNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZShuZXh0U3RhdGUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub1NlbGVjdGlvbkNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZShzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgcmV0dXJuIGZpbmFsaXplTmV3Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKHsgLi4uc3RhdGUsIHRvZ2dsZWRJbmRleGVzOiBuZXcgU2V0KCksIGlucHV0U3RhcnQ6IG51bGwsIGlucHV0RW5kOiBudWxsIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZFJhbmdlKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIGNoYW5nZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbklucHV0RGF0ZVJhbmdlKTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgY29uc3QgeyBpbnB1dFN0YXJ0OiBjdXJyZW50SW5wdXRTdGFydCwgaW5wdXRFbmQ6IGN1cnJlbnRJbnB1dEVuZCwgaW5kZXhGYWN0b3J5IH0gPSBzdGF0ZTtcbiAgY29uc3QgeyBzdGFydDogbWluRGF0ZSwgZW5kOiBtYXhEYXRlIH0gPSBjYWxlbmRhclNjaGVkdWxlTWluQW5kTWF4RGF0ZVJhbmdlKHN0YXRlKTtcblxuICBjb25zdCBpbnB1dFN0YXJ0OiBEYXRlID0gc3RhcnRPZkRheShjaGFuZ2UuaW5wdXRTdGFydCk7XG4gIGNvbnN0IGlucHV0RW5kOiBEYXRlID0gc3RhcnRPZkRheShjaGFuZ2UuaW5wdXRFbmQpOyAvLyBtaWRuaWdodCBvZiB0aGUgbGFzdCBkYXlcblxuICBjb25zdCBpc1ZhbGlkUmFuZ2UgPSBtaW5EYXRlICE9IG51bGwgfHwgbWF4RGF0ZSAhPSBudWxsID8gaXNEYXRlSW5EYXRlUmFuZ2VGdW5jdGlvbih7IHN0YXJ0OiBtaW5EYXRlID8/IHVuZGVmaW5lZCwgZW5kOiBtYXhEYXRlID8/IHVuZGVmaW5lZCB9KSA6ICgpID0+IHRydWU7XG5cbiAgaWYgKCFpc1ZhbGlkUmFuZ2UoaW5wdXRTdGFydCkgfHwgIWlzVmFsaWRSYW5nZShpbnB1dEVuZCkgfHwgKGlzU2FtZURhdGVEYXkoaW5wdXRTdGFydCwgY3VycmVudElucHV0U3RhcnQpICYmIGlzU2FtZURhdGVEYXkoaW5wdXRFbmQsIGN1cnJlbnRJbnB1dEVuZCkpKSB7XG4gICAgcmV0dXJuIHN0YXRlOyAvLyBpZiBubyBjaGFuZ2UsIHJldHVybiB0aGUgY3VycmVudCBzdGF0ZS5cbiAgfVxuXG4gIC8vIHJldGFpbiBhbGwgaW5kZXhlcyB0aGF0IGFyZSB3aXRoaW4gdGhlIG5ldyByYW5nZVxuICBjb25zdCBtaW5JbmRleCA9IGluZGV4RmFjdG9yeShpbnB1dFN0YXJ0KTtcbiAgY29uc3QgbWF4SW5kZXggPSBpbmRleEZhY3RvcnkoaW5wdXRFbmQpICsgMTtcblxuICBjb25zdCBjdXJyZW50SW5kZXhlczogRGF0ZUNlbGxJbmRleFtdID0gQXJyYXkuZnJvbShzdGF0ZS50b2dnbGVkSW5kZXhlcyk7XG4gIGNvbnN0IGlzSW5DdXJyZW50UmFuZ2UgPSBpc0luZGV4TnVtYmVySW5JbmRleFJhbmdlRnVuY3Rpb24oeyBtaW5JbmRleCwgbWF4SW5kZXggfSk7XG4gIGNvbnN0IGV4Y2x1ZGVkSW5kZXhlc0luTmV3UmFuZ2UgPSBjdXJyZW50SW5kZXhlcy5maWx0ZXIoaXNJbkN1cnJlbnRSYW5nZSk7XG4gIGNvbnN0IHRvZ2dsZWRJbmRleGVzID0gbmV3IFNldChleGNsdWRlZEluZGV4ZXNJbk5ld1JhbmdlKTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSB7IC4uLnN0YXRlLCB0b2dnbGVkSW5kZXhlcywgaW5wdXRTdGFydCwgaW5wdXRFbmQgfTtcbiAgcmV0dXJuIGZpbmFsaXplTmV3Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKG5leHRTdGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5hbGl6ZU5ld0NhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZShuZXh0U3RhdGU6IEJ1aWxkaW5nPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZT4pOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBuZXh0U3RhdGUuaXNFbmFibGVkRGF5ID0gaXNFbmFibGVkRGF5SW5DYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUobmV4dFN0YXRlIGFzIENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSk7XG4gIG5leHRTdGF0ZS5jdXJyZW50U2VsZWN0aW9uVmFsdWUgPSBjb21wdXRlU2NoZWR1bGVTZWxlY3Rpb25WYWx1ZShuZXh0U3RhdGUgYXMgQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKTtcbiAgcmV0dXJuIG5leHRTdGF0ZSBhcyBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VuYWJsZWREYXlJbkNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZShzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKTogRGVjaXNpb25GdW5jdGlvbjxEYXRlQ2VsbFRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+IHtcbiAgY29uc3QgeyBhbGxvd2VkRGF5c09mV2VlaywgaW5kZXhGYWN0b3J5LCBpbnB1dFN0YXJ0LCBpbnB1dEVuZCwgaW5kZXhEYXlPZldlZWssIHN5c3RlbVRpbWV6b25lIH0gPSBzdGF0ZTtcbiAgbGV0IGlzSW5TdGFydEFuZEVuZFJhbmdlOiBJc0RhdGVXaXRoaW5EYXRlQ2VsbFJhbmdlRnVuY3Rpb247XG5cbiAgaWYgKGlucHV0U3RhcnQgJiYgaW5wdXRFbmQpIHtcbiAgICBpc0luU3RhcnRBbmRFbmRSYW5nZSA9IGlzRGF0ZVdpdGhpbkRhdGVDZWxsUmFuZ2VGdW5jdGlvbih7IHN0YXJ0c0F0OiB7IHN0YXJ0c0F0OiBzdGF0ZS5zdGFydCwgdGltZXpvbmU6IHN5c3RlbVRpbWV6b25lIH0sIHJhbmdlOiB7IHN0YXJ0OiBpbnB1dFN0YXJ0LCBlbmQ6IGlucHV0RW5kIH0gfSk7XG4gIH0gZWxzZSB7XG4gICAgaXNJblN0YXJ0QW5kRW5kUmFuZ2UgPSAoKSA9PiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiAoaW5wdXQ6IERhdGVDZWxsVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dCkgPT4ge1xuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhGYWN0b3J5KGlucHV0KTtcbiAgICBjb25zdCBkYXlPZldlZWsgPSBpbmRleERheU9mV2VlayhpbmRleCk7XG5cbiAgICBjb25zdCBpc0luU2VsZWN0ZWRSYW5nZSA9IGlzSW5TdGFydEFuZEVuZFJhbmdlKGluZGV4KTtcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gc3RhdGUudG9nZ2xlZEluZGV4ZXMuaGFzKGluZGV4KTtcbiAgICBjb25zdCBpc0FsbG93ZWREYXlPZldlZWsgPSBhbGxvd2VkRGF5c09mV2Vlay5oYXMoZGF5T2ZXZWVrKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGlzQWxsb3dlZERheU9mV2VlayAmJiAoKGlzSW5TZWxlY3RlZFJhbmdlICYmICFpc1NlbGVjdGVkKSB8fCAoaXNTZWxlY3RlZCAmJiAhaXNJblNlbGVjdGVkUmFuZ2UpKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVNjaGVkdWxlU2VsZWN0aW9uVmFsdWUoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSk6IE1heWJlPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25WYWx1ZT4ge1xuICBjb25zdCB7IGluZGV4RmFjdG9yeTogc3lzdGVtSW5kZXhGYWN0b3J5LCBhbGxvd2VkRGF5c09mV2VlaywgZWZmZWN0aXZlU2NoZWR1bGVEYXlzLCBpbmRleERheU9mV2VlaywgY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIsIGZpbHRlciwgc3lzdGVtVGltZXpvbmUgfSA9IHN0YXRlO1xuICBsZXQgdGltZXpvbmUgPSBzeXN0ZW1UaW1lem9uZTtcbiAgY29uc3QgcmFuZ2VBbmRFeGNsdXNpb24gPSBjb21wdXRlU2NoZWR1bGVTZWxlY3Rpb25SYW5nZUFuZEV4Y2x1c2lvbihzdGF0ZSk7XG5cbiAgaWYgKHJhbmdlQW5kRXhjbHVzaW9uID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHsgc3RhcnQ6IHJhbmdlU3RhcnQsIGVuZDogcmFuZ2VFbmQsIGV4Y2x1ZGVkOiBhbGxFeGNsdWRlZCwgZGF0ZUNlbGxSYW5nZSB9ID0gcmFuZ2VBbmRFeGNsdXNpb247XG4gIGxldCBmaWx0ZXJPZmZzZXRFeGNsdWRlZFJhbmdlOiBEYXRlQ2VsbEluZGV4W10gPSBbXTtcbiAgbGV0IGluZGV4T2Zmc2V0ID0gZGF0ZUNlbGxSYW5nZS5pO1xuXG4gIGxldCBzdGFydCA9IHJhbmdlU3RhcnQ7XG4gIGxldCBlbmQgPSByYW5nZUVuZDtcblxuICAvLyBJZiBjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlciBpcyB0cnVlLCB0aGVuIHdlIG5lZWQgdG8gb2Zmc2V0IHRoZSB2YWx1ZXMgdG8gYmUgcmVsYXRpdmUgdG8gdGhhdCBzdGFydC5cbiAgaWYgKGNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyICYmIGZpbHRlcj8uc3RhcnQpIHtcbiAgICBzdGFydCA9IGZpbHRlci5zdGFydDsgLy8gYWx3YXlzIHN0YXJ0IGF0IHRoZSBmaWx0ZXIncyBzdGFydCBkYXRlXG4gICAgbGV0IHN0YXJ0SW5TeXN0ZW1UaW1lem9uZSA9IHN0YXJ0O1xuXG4gICAgaWYgKGZpbHRlci50aW1lem9uZSkge1xuICAgICAgdGltZXpvbmUgPSBmaWx0ZXIudGltZXpvbmU7XG4gICAgICBjb25zdCBmaWx0ZXJOb3JtYWwgPSBkYXRlVGltZXpvbmVVdGNOb3JtYWwodGltZXpvbmUpO1xuICAgICAgZW5kID0gZmlsdGVyTm9ybWFsLnN0YXJ0T2ZEYXlJblRhcmdldFRpbWV6b25lKGVuZCk7XG4gICAgICBzdGFydEluU3lzdGVtVGltZXpvbmUgPSBmaWx0ZXJOb3JtYWwuc3lzdGVtRGF0ZVRvVGFyZ2V0RGF0ZShzdGFydCk7IC8vIGNvbnZlcnQgdGhlIHN0YXJ0IHRvIHRoZSBzeXN0ZW0gdGltZXpvbmUgbm9ybWFsIGZvciBkZXJpdmluZyB0aGUgaW5kZXhcbiAgICB9XG5cbiAgICBjb25zdCByYW5nZVN0YXJ0SW5kZXggPSBzeXN0ZW1JbmRleEZhY3RvcnkocmFuZ2VTdGFydCk7XG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IHN5c3RlbUluZGV4RmFjdG9yeShzdGFydEluU3lzdGVtVGltZXpvbmUpO1xuICAgIGNvbnN0IGZpbHRlclN0YXJ0SW5kZXhPZmZzZXQgPSByYW5nZVN0YXJ0SW5kZXggLSBzdGFydEluZGV4O1xuICAgIGZpbHRlck9mZnNldEV4Y2x1ZGVkUmFuZ2UgPSByYW5nZSgwLCBmaWx0ZXJTdGFydEluZGV4T2Zmc2V0KTtcbiAgICBpbmRleE9mZnNldCA9IGluZGV4T2Zmc2V0IC0gZmlsdGVyU3RhcnRJbmRleE9mZnNldDtcbiAgfVxuXG4gIGNvbnN0IGV4Y2x1ZGVkID0gY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXJcbiAgICA/IGFsbEV4Y2x1ZGVkLmZpbHRlcigoeCkgPT4ge1xuICAgICAgICBjb25zdCBpc0V4Y2x1ZGVkSW5kZXggPSBhbGxvd2VkRGF5c09mV2Vlay5oYXMoaW5kZXhEYXlPZldlZWsoeCkpOyAvLyA/Pz9cbiAgICAgICAgcmV0dXJuIGlzRXhjbHVkZWRJbmRleDtcbiAgICAgIH0pXG4gICAgOiBhbGxFeGNsdWRlZDtcblxuICBjb25zdCBvZmZzZXRFeGNsdWRlZDogRGF0ZUNlbGxJbmRleFtdID0gZXhjbHVkZWQubWFwKCh4KSA9PiB4IC0gaW5kZXhPZmZzZXQpOyAvLyBzZXQgdG8gdGhlIHByb3BlciBvZmZzZXRcblxuICBjb25zdCBleCA9IFsuLi5maWx0ZXJPZmZzZXRFeGNsdWRlZFJhbmdlLCAuLi5vZmZzZXRFeGNsdWRlZF07XG5cbiAgY29uc3QgdzogRGF0ZUNlbGxTY2hlZHVsZUVuY29kZWRXZWVrID0gZGF0ZUNlbGxTY2hlZHVsZUVuY29kZWRXZWVrKGVmZmVjdGl2ZVNjaGVkdWxlRGF5cyk7XG4gIGNvbnN0IGQ6IERhdGVDZWxsSW5kZXhbXSA9IFtdOyAvLyBcImluY2x1ZGVkXCIgYmxvY2tzIGFyZSBuZXZlciB1c2VkL2NhbGN1bGF0ZWQuXG5cbiAgLy8gQWx3YXlzIGVuc3VyZSB0aGUgZW5kIGlzIGFmdGVyIG9yIGVxdWFsIHRvIHRoZSBzdGFydC5cbiAgaWYgKGlzQmVmb3JlKGVuZCwgc3RhcnQpKSB7XG4gICAgZW5kID0gc3RhcnQ7IC8vIGVuZCBpcyBzdGFydFxuICB9XG5cbiAgY29uc3QgZGF0ZVNjaGVkdWxlUmFuZ2U6IERhdGVDZWxsU2NoZWR1bGVEYXRlUmFuZ2UgPSB7XG4gICAgdGltZXpvbmUsXG4gICAgc3RhcnQsXG4gICAgZW5kLFxuICAgIHcsXG4gICAgZCxcbiAgICBleFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgZGF0ZVNjaGVkdWxlUmFuZ2UsXG4gICAgbWluTWF4UmFuZ2U6IHsgc3RhcnQsIGVuZCB9XG4gIH07XG59XG5cbi8qKlxuICogVGhlIHNlbGVjdGVkIGRhdGUgcmFuZ2UgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNlbGwgcmFuZ2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblJhbmdlQW5kRXhjbHVzaW9uIGV4dGVuZHMgRGF0ZVJhbmdlIHtcbiAgLyoqXG4gICAqIENvcnJlc3BvbmRzIHRvIHRoZSBzdGFydCBhbmQgZW5kIGluZGV4ZXMgaW4gdGhlIGRhdGUgcmFuZ2UuXG4gICAqL1xuICBkYXRlQ2VsbFJhbmdlOiBEYXRlQ2VsbFJhbmdlV2l0aFJhbmdlO1xuICAvKipcbiAgICogQWxsIGV4Y2x1ZGVkIGluZGV4ZXMuXG4gICAqL1xuICBleGNsdWRlZDogRGF0ZUNlbGxJbmRleFtdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVNjaGVkdWxlU2VsZWN0aW9uUmFuZ2VBbmRFeGNsdXNpb24oc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSk6IE1heWJlPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25SYW5nZUFuZEV4Y2x1c2lvbj4ge1xuICBjb25zdCB7IHN0YXJ0OiBjdXJyZW50U3RhcnQsIGlzRW5hYmxlZERheSwgaXNFbmFibGVkRmlsdGVyRGF5LCBzeXN0ZW1UaW1lem9uZSB9ID0gc3RhdGU7XG5cbiAgY29uc3QgZGF0ZUZhY3RvcnkgPSBkYXRlQ2VsbFRpbWluZ1N0YXJ0RGF0ZUZhY3RvcnkoeyBzdGFydHNBdDogY3VycmVudFN0YXJ0LCB0aW1lem9uZTogc3lzdGVtVGltZXpvbmUgfSk7XG4gIGNvbnN0IGRhdGVDZWxsUmFuZ2UgPSBjb21wdXRlQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbkRhdGVDZWxsUmFuZ2Uoc3RhdGUpO1xuXG4gIGlmIChkYXRlQ2VsbFJhbmdlID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDsgLy8gcmV0dXJucyBudWxsIGlmIG5vIGl0ZW1zIGFyZSBzZWxlY3RlZC5cbiAgfVxuXG4gIGNvbnN0IHN0YXJ0ID0gZGF0ZUZhY3RvcnkoZGF0ZUNlbGxSYW5nZS5pKTtcbiAgY29uc3QgZW5kID0gZGF0ZUZhY3RvcnkoZGF0ZUNlbGxSYW5nZS50byk7XG5cbiAgY29uc3QgZXhjbHVkZWQ6IERhdGVDZWxsSW5kZXhbXSA9IHJhbmdlKGRhdGVDZWxsUmFuZ2UuaSwgZGF0ZUNlbGxSYW5nZS50byArIDEpLmZpbHRlcigoeCkgPT4ge1xuICAgIGNvbnN0IGlzRXhjbHVkZWRJbmRleCA9ICFpc0VuYWJsZWREYXkoeCkgfHwgIWlzRW5hYmxlZEZpbHRlckRheSh4KTtcbiAgICByZXR1cm4gaXNFeGNsdWRlZEluZGV4O1xuICB9KTtcblxuICBjb25zdCByZXN1bHQ6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25SYW5nZUFuZEV4Y2x1c2lvbiA9IHtcbiAgICBkYXRlQ2VsbFJhbmdlLFxuICAgIHN0YXJ0LFxuICAgIGVuZCxcbiAgICBleGNsdWRlZFxuICB9O1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblJhbmdlKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUpOiBNYXliZTxEYXRlUmFuZ2U+IHtcbiAgY29uc3QgZGF0ZUZhY3RvcnkgPSBkYXRlQ2VsbFRpbWluZ0RhdGVGYWN0b3J5KHsgc3RhcnRzQXQ6IHN0YXRlLnN0YXJ0LCB0aW1lem9uZTogc3RhdGUuc3lzdGVtVGltZXpvbmUgfSk7XG4gIGNvbnN0IGRhdGVDZWxsUmFuZ2UgPSBjb21wdXRlQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbkRhdGVDZWxsUmFuZ2Uoc3RhdGUpO1xuICBjb25zdCBkYXRlUmFuZ2U6IE1heWJlPERhdGVSYW5nZT4gPSBkYXRlQ2VsbFJhbmdlICE9IG51bGwgPyB7IHN0YXJ0OiBkYXRlRmFjdG9yeShkYXRlQ2VsbFJhbmdlLmkpLCBlbmQ6IGRhdGVGYWN0b3J5KGRhdGVDZWxsUmFuZ2UudG8gYXMgbnVtYmVyKSB9IDogdW5kZWZpbmVkO1xuICByZXR1cm4gZGF0ZVJhbmdlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25EYXRlQ2VsbFJhbmdlKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUpOiBNYXliZTxEYXRlQ2VsbFJhbmdlV2l0aFJhbmdlPiB7XG4gIGNvbnN0IHsgYWxsb3dlZERheXNPZldlZWssIGluZGV4RmFjdG9yeSwgaW5wdXRTdGFydCwgaW5wdXRFbmQsIGluZGV4RGF5T2ZXZWVrLCBpc0VuYWJsZWREYXksIGlzRW5hYmxlZEZpbHRlckRheSB9ID0gc3RhdGU7XG4gIGNvbnN0IGVuYWJsZWRFeGNsdXNpb25JbmRleGVzID0gQXJyYXkuZnJvbShzdGF0ZS50b2dnbGVkSW5kZXhlcykuZmlsdGVyKChpKSA9PiBhbGxvd2VkRGF5c09mV2Vlay5oYXMoaW5kZXhEYXlPZldlZWsoaSkpKTtcbiAgY29uc3QgbWluQW5kTWF4U2VsZWN0ZWRWYWx1ZXMgPSBtaW5BbmRNYXhOdW1iZXIoZW5hYmxlZEV4Y2x1c2lvbkluZGV4ZXMpO1xuXG4gIGxldCBzdGFydFJhbmdlOiBNYXliZTxEYXRlQ2VsbEluZGV4PjtcbiAgbGV0IGVuZFJhbmdlOiBNYXliZTxEYXRlQ2VsbEluZGV4PjtcblxuICBpZiAobWluQW5kTWF4U2VsZWN0ZWRWYWx1ZXMpIHtcbiAgICBzdGFydFJhbmdlID0gbWluQW5kTWF4U2VsZWN0ZWRWYWx1ZXMubWluO1xuICAgIGVuZFJhbmdlID0gbWluQW5kTWF4U2VsZWN0ZWRWYWx1ZXMubWF4O1xuICB9XG5cbiAgaWYgKGlucHV0U3RhcnQgIT0gbnVsbCAmJiBpbnB1dEVuZCAhPSBudWxsKSB7XG4gICAgY29uc3QgaW5wdXRTdGFydEluZGV4ID0gaW5kZXhGYWN0b3J5KGlucHV0U3RhcnQpO1xuICAgIGNvbnN0IGlucHV0RW5kSW5kZXggPSBpbmRleEZhY3RvcnkoaW5wdXRFbmQpO1xuXG4gICAgc3RhcnRSYW5nZSA9IHN0YXJ0UmFuZ2UgIT0gbnVsbCA/IE1hdGgubWluKGlucHV0U3RhcnRJbmRleCwgc3RhcnRSYW5nZSkgOiBpbnB1dFN0YXJ0SW5kZXg7XG4gICAgZW5kUmFuZ2UgPSBlbmRSYW5nZSAhPSBudWxsID8gTWF0aC5tYXgoaW5wdXRFbmRJbmRleCwgZW5kUmFuZ2UpIDogaW5wdXRFbmRJbmRleDtcbiAgfVxuXG4gIGlmIChzdGFydFJhbmdlICE9IG51bGwgJiYgZW5kUmFuZ2UgIT0gbnVsbCkge1xuICAgIGNvbnN0IHNjYW5TdGFydEluZGV4ID0gc3RhcnRSYW5nZTtcbiAgICBjb25zdCBzY2FuRW5kSW5kZXggPSBlbmRSYW5nZTtcblxuICAgIC8vIGNsZWFyIHN0YXJ0IGFuZCBlbmRcbiAgICBzdGFydFJhbmdlID0gdW5kZWZpbmVkO1xuICAgIGVuZFJhbmdlID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gaWYgdGhlIG1pbiBpcyBlcXVhbCB0byB0aGUgc3RhcnQgaW5kZXgsIHRoZW4gd2UgYXJlIGluIHRoZSByYW5nZSBhbmQgbmVlZCB0byBpdGVyYXRlIGRhdGVzIHVudGlsIHdlIGZpbmQgb25lIHRoYXQgaXMgbm90IHNlbGVjdGVkL2V4Y2x1ZGVkLlxuICAgIGZvciAobGV0IGkgPSBzY2FuU3RhcnRJbmRleDsgaSA8PSBzY2FuRW5kSW5kZXg7IGkgKz0gMSkge1xuICAgICAgaWYgKGlzRW5hYmxlZEZpbHRlckRheShpKSAmJiBpc0VuYWJsZWREYXkoaSkpIHtcbiAgICAgICAgc3RhcnRSYW5nZSA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNhbWUgd2l0aCB0aGUgbWF4XG4gICAgZm9yIChsZXQgaSA9IHNjYW5FbmRJbmRleDsgaSA+PSBzY2FuU3RhcnRJbmRleDsgaSAtPSAxKSB7XG4gICAgICBpZiAoaXNFbmFibGVkRmlsdGVyRGF5KGkpICYmIGlzRW5hYmxlZERheShpKSkge1xuICAgICAgICBlbmRSYW5nZSA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdGFydFJhbmdlICE9IG51bGwgJiYgZW5kUmFuZ2UgIT0gbnVsbCkge1xuICAgIHJldHVybiB7IGk6IHN0YXJ0UmFuZ2UsIHRvOiBlbmRSYW5nZSB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
|
|
785
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2NoZWR1bGUuc2VsZWN0aW9uLnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vY2FsZW5kYXIvc3JjL2xpYi9jYWxlbmRhci5zY2hlZHVsZS5zZWxlY3Rpb24uc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBRUwsd0JBQXdCLEVBR3hCLHlCQUF5QixFQUV6QiwwQkFBMEIsRUFDMUIsb0NBQW9DLEVBRXBDLHVCQUF1QixFQUN2QiwyQkFBMkIsRUFHM0Isa0NBQWtDLEVBQ2xDLDhCQUE4QixFQUM5Qiw0Q0FBNEMsRUFDNUMsV0FBVyxFQUNYLFdBQVcsRUFDWCx5QkFBeUIsRUFFekIsaUNBQWlDLEVBQ2pDLFVBQVUsRUFDVixhQUFhLEVBQ2IsZUFBZSxFQUVmLHVDQUF1QyxFQUN2QyxtQkFBbUIsRUFDbkIscUJBQXFCLEVBRXJCLDJCQUEyQixFQUczQixpQ0FBaUMsRUFFakMseUNBQXlDLEVBQ3pDLGdDQUFnQyxFQUNoQyxnQ0FBZ0MsRUFDaEMsOEJBQThCLEVBRTlCLG1DQUFtQyxFQUNuQywrQkFBK0IsRUFFL0IseUJBQXlCLEVBQ3pCLG9DQUFvQyxFQUNwQyx5Q0FBeUMsRUFDekMsd0NBQXdDLEVBQ3pDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUE0RCxlQUFlLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxpQ0FBaUMsRUFBWSxlQUFlLEVBQWEsS0FBSyxFQUFzQixNQUFNLEVBQUUsV0FBVyxFQUFrQyxjQUFjLEVBQUUsd0JBQXdCLEVBQVksc0JBQXNCLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFDL1ksT0FBTyxFQUFF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LENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ3pDLENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBEYXRlQ2VsbERheU9mV2Vla0ZhY3RvcnksXG4gIGRhdGVDZWxsRGF5T2ZXZWVrRmFjdG9yeSxcbiAgRGF0ZUNlbGxJbmRleCxcbiAgRGF0ZUNlbGxSYW5nZVdpdGhSYW5nZSxcbiAgZGF0ZUNlbGxUaW1pbmdEYXRlRmFjdG9yeSxcbiAgRGF0ZVJhbmdlLFxuICBkYXRlQ2VsbFNjaGVkdWxlRGF0ZUZpbHRlcixcbiAgY29weURhdGVDZWxsU2NoZWR1bGVEYXRlRmlsdGVyQ29uZmlnLFxuICBEYXRlQ2VsbFNjaGVkdWxlRGF0ZUZpbHRlckNvbmZpZyxcbiAgRGF0ZUNlbGxTY2hlZHVsZURheUNvZGUsXG4gIGRhdGVDZWxsU2NoZWR1bGVFbmNvZGVkV2VlayxcbiAgRGF0ZUNlbGxTY2hlZHVsZUVuY29kZWRXZWVrLFxuICBEYXRlQ2VsbFRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5LFxuICBkYXRlQ2VsbFRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5LFxuICBleHBhbmREYXRlQ2VsbFNjaGVkdWxlRGF5Q29kZXMsXG4gIGV4cGFuZERhdGVDZWxsU2NoZWR1bGVEYXlDb2Rlc1RvRGF5T2ZXZWVrU2V0LFxuICBmaW5kTWF4RGF0ZSxcbiAgZmluZE1pbkRhdGUsXG4gIGlzRGF0ZUluRGF0ZVJhbmdlRnVuY3Rpb24sXG4gIElzRGF0ZVdpdGhpbkRhdGVDZWxsUmFuZ2VGdW5jdGlvbixcbiAgaXNEYXRlV2l0aGluRGF0ZUNlbGxSYW5nZUZ1bmN0aW9uLFxuICBpc1NhbWVEYXRlLFxuICBpc1NhbWVEYXRlRGF5LFxuICBpc1NhbWVEYXRlUmFuZ2UsXG4gIERhdGVPckRhdGVSYW5nZU9yRGF0ZUNlbGxJbmRleE9yRGF0ZUNlbGxSYW5nZSxcbiAgZGF0ZUNlbGxUaW1pbmdSZWxhdGl2ZUluZGV4QXJyYXlGYWN0b3J5LFxuICBpc0luZmluaXRlRGF0ZVJhbmdlLFxuICBkYXRlVGltZXpvbmVVdGNOb3JtYWwsXG4gIERhdGVUaW1lem9uZVV0Y05vcm1hbEluc3RhbmNlLFxuICBleHBhbmREYXRlQ2VsbFNjaGVkdWxlUmFuZ2UsXG4gIERhdGVDZWxsLFxuICBEYXRlQ2VsbER1cmF0aW9uU3BhbixcbiAgZm9ybWF0VG9JU084NjAxRGF5U3RyaW5nRm9yU3lzdGVtLFxuICBEYXRlQ2VsbFRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQsXG4gIGRhdGVDZWxsU2NoZWR1bGVEYXlDb2Rlc0FyZVNldHNFcXVpdmFsZW50LFxuICBzaW1wbGlmeURhdGVDZWxsU2NoZWR1bGVEYXlDb2RlcyxcbiAgZnVsbFdlZWtEYXRlQ2VsbFNjaGVkdWxlRGF5Q29kZXMsXG4gIGRhdGVDZWxsVGltaW5nU3RhcnREYXRlRmFjdG9yeSxcbiAgRGF0ZUNlbGxTY2hlZHVsZURhdGVSYW5nZSxcbiAgZGF0ZUNlbGxUaW1pbmdTdGFydHNBdEZvclN0YXJ0T2ZEYXksXG4gIGlzU2FtZURhdGVDZWxsU2NoZWR1bGVEYXRlUmFuZ2UsXG4gIEZ1bGxEYXRlQ2VsbFNjaGVkdWxlUmFuZ2VJbnB1dERhdGVSYW5nZSxcbiAgZnVsbERhdGVDZWxsU2NoZWR1bGVSYW5nZSxcbiAgZGF0ZUNlbGxUaW1pbmdUaW1lem9uZU5vcm1hbEluc3RhbmNlLFxuICBjaGFuZ2VEYXRlQ2VsbFNjaGVkdWxlRGF0ZVJhbmdlVG9UaW1lem9uZSxcbiAgU1lTVEVNX0RBVEVfVElNRVpPTkVfVVRDX05PUk1BTF9JTlNUQU5DRVxufSBmcm9tICdAZGVyZWVrYi9kYXRlJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxIYXNEaWZmZXJlbnRWYWx1ZXMsIGZpbHRlck1heWJlIH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBNYXliZSwgVGltZXpvbmVTdHJpbmcsIERlY2lzaW9uRnVuY3Rpb24sIEl0ZXJhYmxlT3JWYWx1ZSwgaXRlcmFibGVUb0FycmF5LCBhZGRUb1NldCwgdG9nZ2xlSW5TZXQsIGlzSW5kZXhOdW1iZXJJbkluZGV4UmFuZ2VGdW5jdGlvbiwgTWF5YmVNYXAsIG1pbkFuZE1heE51bWJlciwgRGF5T2ZXZWVrLCByYW5nZSwgQWxsT3JOb25lU2VsZWN0aW9uLCB1bmlxdWUsIG1lcmdlQXJyYXlzLCBBcnJheU9yVmFsdWUsIElTTzg2MDFEYXlTdHJpbmcsIG1hcFZhbHVlc1RvU2V0LCBpc0luQWxsb3dlZERheXNPZldlZWtTZXQsIEJ1aWxkaW5nLCBmaXJzdFZhbHVlRnJvbUl0ZXJhYmxlLCBpc0l0ZXJhYmxlLCByZW1vdmVGcm9tU2V0LCBDb25maWd1cmFibGUgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IENvbXBvbmVudFN0b3JlIH0gZnJvbSAnQG5ncngvY29tcG9uZW50LXN0b3JlJztcbmltcG9ydCB7IHN0YXJ0T2ZEYXksIGVuZE9mRGF5LCBpc0JlZm9yZSB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAsIHRhcCwgZmlyc3QsIGNvbWJpbmVMYXRlc3RXaXRoLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbkNlbGxDb250ZW50RmFjdG9yeSwgQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblZhbHVlLCBkZWZhdWx0Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbkNlbGxDb250ZW50RmFjdG9yeSB9IGZyb20gJy4vY2FsZW5kYXIuc2NoZWR1bGUuc2VsZWN0aW9uJztcblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uSW5wdXREYXRlUmFuZ2Uge1xuICAvKipcbiAgICogSW5wdXQgU3RhcnQgRGF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5wdXRTdGFydDogRGF0ZTtcbiAgLyoqXG4gICAqIElucHV0IEVuZCBEYXRlXG4gICAqL1xuICByZWFkb25seSBpbnB1dEVuZDogRGF0ZTtcbn1cblxuZXhwb3J0IHR5cGUgUGFydGlhbENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25JbnB1dERhdGVSYW5nZSA9IFBhcnRpYWw8TWF5YmVNYXA8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbklucHV0RGF0ZVJhbmdlPj47XG5cbi8qKlxuICogRGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlIHNlbGVjdGlvbiBtb2RlLlxuICpcbiAqIFdoZW4gaW4gc2luZ2xlIG1vZGUgdGhlIHRvZ2dsZSBmdW5jdGlvbiBpcyB0cmVhdGVkIGFzIGEgc2V0IHRoYXQgY2xlYXJzIGFsbCB2YWx1ZXMgYW5kIG9ubHkgc2VsZWN0cyB0aGUgdG9nZ2xlJ2QgdmFsdWUuXG4gKi9cbmV4cG9ydCB0eXBlIERieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZVNlbGVjdGlvbk1vZGUgPSAnbXVsdGlwbGUnIHwgJ3NpbmdsZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIGV4dGVuZHMgUGFydGlhbENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25JbnB1dERhdGVSYW5nZSB7XG4gIC8qKlxuICAgKiBTZWxlY3Rpb24gbW9kZSBmb3IgdGhpcyBjYWxlbmRhci4gRGVmYXVsdHMgdG8gXCJtdWx0aXBsZVwiXG4gICAqL1xuICByZWFkb25seSBzZWxlY3Rpb25Nb2RlOiBEYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmVTZWxlY3Rpb25Nb2RlO1xuICAvKipcbiAgICogUmVhZG9ubHkgc3RhdGUgb2YgdGhlIHZpZXcuXG4gICAqXG4gICAqIERvZXMgbm90IGFmZmVjdCBzdGF0ZSBjaGFuZ2VzIGRpcmVjdGx5LCBidXQgaW5zdGVhZCBhY3RzIGFzIGEgZmxhZyBmb3IgdGhlIHBhcmVudCB2aWV3IHRvIHNldCBhbmQgdGhlIGNvbnN1bWluZyB2aWV3cyB0byB1cGRhdGUgb24uXG4gICAqL1xuICByZWFkb25seSBpc1ZpZXdSZWFkb25seT86IE1heWJlPGJvb2xlYW4+O1xuICAvKipcbiAgICogU2V0IG9mIHRoZSBkYXlzIG9mIHdlZWsgdGhhdCBhcmUgYWxsb3dlZCBieSBkZWZhdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdFNjaGVkdWxlRGF5czogU2V0PERhdGVDZWxsU2NoZWR1bGVEYXlDb2RlPjtcbiAgLyoqXG4gICAqIEZpbHRlcnMgdGhlIGRheXMgb2YgdGhlIHNjaGVkdWxlIHRvIG9ubHkgYWxsb3cgc2VsZWN0aW5nIGRheXMgaW4gdGhlIHNjaGVkdWxlLlxuICAgKlxuICAgKiBUaGUgb3V0cHV0IHdpbGwgYmUgcmVsYXRpdmUgdG8gdGhpcyBmaWx0ZXIsIGFuZCBpbiBpdCdzIHRpbWV6b25lIHVubGVzcyBjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlciBpcyBmYWxzZS5cbiAgICpcbiAgICogVGhpcyBpcyBhIGNvcHkgb2YgYW55IHNldC9jb25maWd1cmVkIGlucHV0IGZpbHRlciBhbmQgd2lsbCBoYXZlIGEgc3RhcnQgZGF0ZSBzZXQgZnJvbSBzdGFydCBvciBzdGFydHNBdC5cbiAgICovXG4gIHJlYWRvbmx5IGZpbHRlcj86IE1heWJlPERhdGVDZWxsU2NoZWR1bGVEYXRlRmlsdGVyQ29uZmlnPjtcbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgZXhjbHVzaW9ucyB0aGF0IG1heSBub3QgYmUgZGVmaW5lZCB3aXRoaW4gdGhlIGZpbHRlci5cbiAgICovXG4gIHJlYWRvbmx5IGlucHV0RXhjbHVzaW9ucz86IE1heWJlPEFycmF5T3JWYWx1ZTxEYXRlT3JEYXRlUmFuZ2VPckRhdGVDZWxsSW5kZXhPckRhdGVDZWxsUmFuZ2U+PjtcbiAgLyoqXG4gICAqIFRoZSBjb21wdXRlZCBleGNsdXNpb25zIGdpdmVuIHRoZSBpbnB1dCBleGNsdXNpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tcHV0ZWRFeGNsdXNpb25zPzogTWF5YmU8RGF0ZUNlbGxJbmRleFtdPjtcbiAgLyoqXG4gICAqIFRoZSBtaW4vbWF4IGRhdGUgcmFuZ2UuIFVzZWQgZm9yIHJlc3RyaWN0aW5nIHRoZSBtaW4vbWF4IHZhbHVlLiBXb3JrcyB3aXRoIHRoZSBmaWx0ZXIuIFRoZSBncmVhdGVyL2xlc3NlciBvZiB0aGUgc3RhcnQvZW5kIGRhdGVzIGFyZSB1c2VkIGlmIGJvdGggYXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgbWluTWF4RGF0ZVJhbmdlPzogTWF5YmU8UGFydGlhbDxEYXRlUmFuZ2U+PjtcbiAgLyoqXG4gICAqIFN0YXJ0IGRhdGUuIElzIHVwZGF0ZWQgYXMgdGhlIGlucHV0U3RhcnQgaXMgbW9kaWZpZWQgb3IgZmlsdGVyIGlzIHByb3ZpZGVkIHRoYXQgcHJvdmlkZXMgdGhlIHN0YXJ0IGRhdGUuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHRvZGF5IGFuZCB0aGUgY3VycmVudCB0aW1lem9uZS5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0OiBEYXRlQ2VsbFNjaGVkdWxlRGF0ZVJhbmdlWydzdGFydCddO1xuICAvKipcbiAgICogU3lzdGVtIFRpbWV6b25lLiBEb2VzIG5vdCBjaGFuZ2UuXG4gICAqL1xuICByZWFkb25seSBzeXN0ZW1UaW1lem9uZTogVGltZXpvbmVTdHJpbmc7XG4gIC8qKlxuICAgKiBUaW1lem9uZSB0byB1c2Ugd2hlbiBvdXRwdXR0aW5nIHRoZSB2YWx1ZS4gT25seSBpbmZsdWVuY2VzIHRoZSBvdXRwdXQgc3RhcnQgZGF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IG91dHB1dFRpbWV6b25lPzogTWF5YmU8VGltZXpvbmVTdHJpbmc+O1xuICAvKipcbiAgICogQ3VycmVudCB0aW1lem9uZSBub3JtYWwgd2l0aCB0aGUgY3VycmVudCB0aW1lem9uZS5cbiAgICovXG4gIHJlYWRvbmx5IG91dHB1dFRpbWV6b25lTm9ybWFsPzogTWF5YmU8RGF0ZVRpbWV6b25lVXRjTm9ybWFsSW5zdGFuY2U+O1xuICAvKipcbiAgICogRGF0ZUNlbGxUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeVxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZXhGYWN0b3J5OiBEYXRlQ2VsbFRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5O1xuICAvKipcbiAgICogQXJyYXkgb2YgbWFudWFsbHkgc2VsZWN0ZWQgZGF0ZXMgd2l0aGluIHRoZSBwaWNrZWQgcmFuZ2UuIFRoaXMgaXMgTk9UIHRoZSBzZXQgb2YgYWxsIHNlbGVjdGVkIGluZGV4ZXMgaW4gdGVybXMgb2Ygb3V0cHV0LlxuICAgKlxuICAgKiBWYWx1ZXMgdGhhdCBleGlzdCBvdXRzaWRlIG9mIHRoZSBcImlucHV0XCIgcmFuZ2UgYXJlIGNvbnNpZGVyZWQgdG9nZ2xlZCBvbiwgd2hpbGUgdGhvc2VcbiAgICogdGhhdCBhcmUgc2VsZWN0ZWQgd2l0aGluIHRoZSByYW5nZSBhcmUgY29uc2lkZXJlZCB0b2dnbGVkIG9mZi5cbiAgICpcbiAgICogSWYgZGF0ZXMgYXJlIHNlbGVjdGVkLCBhbmQgdGhlbiBhIHJhbmdlIGlzIHNlbGVjdGVkLCB0aGVuIHRob3NlIGRhdGVzIHdpdGhpbiB0aGUgcmFuZ2UgdGhhdCBmYWxsXG4gICAqIHdpdGhpbiB0aGUgcmFuZ2UgYXJlIGNsZWFyZWQgZnJvbSBzZWxlY3Rpb24uXG4gICAqXG4gICAqIFRoZXNlIGluZGV4ZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBkYXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgdG9nZ2xlZEluZGV4ZXM6IFNldDxEYXRlQ2VsbEluZGV4PjtcbiAgLyoqXG4gICAqIERheXMgb2YgdGhlIHNjaGVkdWxlIHRoYXQgYXJlIGFsbG93ZWQgdG8gYmUgcGlja2VkLiBJZiBub3QgZGVmaW5lZCwgZGVmYXVsdHMgdG8gZGVmYXVsdFNjaGVkdWxlRGF5cy5cbiAgICovXG4gIHJlYWRvbmx5IHNjaGVkdWxlRGF5cz86IE1heWJlPFNldDxEYXRlQ2VsbFNjaGVkdWxlRGF5Q29kZT4+O1xuICAvKipcbiAgICogVGhlIGN1cnJlbnQgRGF0ZUNlbGxTY2hlZHVsZURheUNvZGUgdmFsdWUuXG4gICAqL1xuICByZWFkb25seSBlZmZlY3RpdmVTY2hlZHVsZURheXM6IFNldDxEYXRlQ2VsbFNjaGVkdWxlRGF5Q29kZT47XG4gIC8qKlxuICAgKiBTZXQgb2YgdGhlIGRheXMgb2Ygd2VlayB0aGF0IGFyZSBhbGxvd2VkLiBEZXJpdmVkIGZyb20gdGhlIGN1cnJlbnQgc2NoZWR1bGUgZGF5cyB2YWx1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGFsbG93ZWREYXlzT2ZXZWVrOiBTZXQ8RGF5T2ZXZWVrPjtcbiAgLyoqXG4gICAqXG4gICAqL1xuICByZWFkb25seSBpbmRleERheU9mV2VlazogRGF0ZUNlbGxEYXlPZldlZWtGYWN0b3J5O1xuICAvKipcbiAgICogRGVjaXNpb24gZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgYSB2YWx1ZSBpcyBlbmFibGVkIGdpdmVuIHRoZSBjdXJyZW50IGZpbHRlci5cbiAgICovXG4gIHJlYWRvbmx5IGlzRW5hYmxlZEZpbHRlckRheTogRGVjaXNpb25GdW5jdGlvbjxEYXRlQ2VsbFRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+O1xuICAvKipcbiAgICogRGVjaXNpb24gZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgYSB2YWx1ZSBpcyBlbmFibGVkLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHRha2UgdGhlIGN1cnJlbnQgZmlsdGVyIGludG8gYWNjb3VudC5cbiAgICovXG4gIHJlYWRvbmx5IGlzRW5hYmxlZERheTogRGVjaXNpb25GdW5jdGlvbjxEYXRlQ2VsbFRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+O1xuICAvKipcbiAgICogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbkNlbGxDb250ZW50RmFjdG9yeSBmb3IgdGhlIHZpZXcuXG4gICAqL1xuICByZWFkb25seSBjZWxsQ29udGVudEZhY3Rvcnk6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25DZWxsQ29udGVudEZhY3Rvcnk7XG4gIC8qKlxuICAgKiBDdXJyZW50IHNlbGVjdGlvbiB2YWx1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGN1cnJlbnRTZWxlY3Rpb25WYWx1ZT86IE1heWJlPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25WYWx1ZT47XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byB1c2UgdGhlIGZpbHRlciBhcyB0aGUgc3RhcnQgYW5kIGVuZCByYW5nZSBpbnN0ZWFkIG9mIG9wdGltaXppbmcgZm9yIHRoZSBjdXJyZW50IGluZGV4LlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXI/OiBNYXliZTxib29sZWFuPjtcbiAgLyoqXG4gICAqIFRoZSBpbml0aWFsIHNlbGVjdGlvbiBzdGF0ZSB3aGVuIHRoZSBjYWxlbmRhciBpcyByZXNldC5cbiAgICovXG4gIHJlYWRvbmx5IGluaXRpYWxTZWxlY3Rpb25TdGF0ZT86IE1heWJlPEFsbE9yTm9uZVNlbGVjdGlvbj47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKCk6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIGNvbnN0IGRlZmF1bHRTY2hlZHVsZURheXMgPSBuZXcgU2V0KFtEYXRlQ2VsbFNjaGVkdWxlRGF5Q29kZS5XRUVLREFZLCBEYXRlQ2VsbFNjaGVkdWxlRGF5Q29kZS5XRUVLRU5EXSk7XG4gIGNvbnN0IGFsbG93ZWREYXlzT2ZXZWVrID0gZXhwYW5kRGF0ZUNlbGxTY2hlZHVsZURheUNvZGVzVG9EYXlPZldlZWtTZXQoZGVmYXVsdFNjaGVkdWxlRGF5cyk7XG4gIGNvbnN0IGRlZmF1bHRTdGFydHNBdCA9IGRhdGVDZWxsVGltaW5nU3RhcnRzQXRGb3JTdGFydE9mRGF5KCk7IC8vIGdldCBtaWRuaWdodCBvZiB0aGUgY3VycmVudCB0aW1lem9uZVxuICBjb25zdCB7IHN0YXJ0c0F0LCB0aW1lem9uZTogc3lzdGVtVGltZXpvbmUgfSA9IGRlZmF1bHRTdGFydHNBdDtcbiAgY29uc3QgaW5kZXhGYWN0b3J5ID0gZGF0ZUNlbGxUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeShkZWZhdWx0U3RhcnRzQXQpO1xuICBjb25zdCBpbmRleERheU9mV2VlayA9IGRhdGVDZWxsRGF5T2ZXZWVrRmFjdG9yeShzdGFydHNBdCk7XG5cbiAgcmV0dXJuIHtcbiAgICBzZWxlY3Rpb25Nb2RlOiAnbXVsdGlwbGUnLFxuICAgIHN0YXJ0OiBzdGFydHNBdCxcbiAgICBzeXN0ZW1UaW1lem9uZSxcbiAgICBpbmRleEZhY3RvcnksXG4gICAgdG9nZ2xlZEluZGV4ZXM6IG5ldyBTZXQoKSxcbiAgICBkZWZhdWx0U2NoZWR1bGVEYXlzLFxuICAgIGVmZmVjdGl2ZVNjaGVkdWxlRGF5czogZGVmYXVsdFNjaGVkdWxlRGF5cyxcbiAgICBhbGxvd2VkRGF5c09mV2VlayxcbiAgICBpbmRleERheU9mV2VlayxcbiAgICBpc0VuYWJsZWRGaWx0ZXJEYXk6ICgpID0+IHRydWUsXG4gICAgaXNFbmFibGVkRGF5OiAoKSA9PiBmYWxzZSxcbiAgICBjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcjogdHJ1ZSxcbiAgICBjZWxsQ29udGVudEZhY3Rvcnk6IGRlZmF1bHRDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uQ2VsbENvbnRlbnRGYWN0b3J5XG4gIH07XG59XG5cbi8qKlxuICogVGhpcyBpcyB1c2VkIGluIGNhc2VzIHdoZXJlIHRoZSBkYXRlcyBpbiB0aGUgbWluL21heCBkYXRlIHJhbmdlIG5lZWQgdG8gYmUgc2hpZnRlZCB0byB0aGUgZmlsdGVyJ3MgdGltZXpvbmUuXG4gKlxuICogVGhpcyBpcyBiZWNhdXNlIHRoZSBpbmRleCBmYWN0b3J5IGlzIGFsd2F5cyBpbiBzeXN0ZW0gdGltZXpvbmUsIGJ1dCB3aGVuIHNlbGVjdGluZyBhbGwvbm9uZSB3aXRoIGEgZmlsdGVyIHdlIG5lZWQgdG8gdXNlIHRoZSBmaWx0ZXIncyB0aW1lem9uZS5cbiAqXG4gKiBAcGFyYW0geFxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gY2FsZW5kYXJTY2hlZHVsZU1pbkFuZE1heERhdGVSYW5nZVJlbGF0aXZlVG9GaWx0ZXIoeDogUGljazxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsICdmaWx0ZXInIHwgJ21pbk1heERhdGVSYW5nZSc+KTogUGFydGlhbDxEYXRlUmFuZ2U+IHtcbiAgbGV0IGlucHV0OiBQaWNrPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgJ2ZpbHRlcicgfCAnbWluTWF4RGF0ZVJhbmdlJz4gPSB4O1xuXG4gIGlmICh4LmZpbHRlcj8udGltZXpvbmUgJiYgeC5taW5NYXhEYXRlUmFuZ2UgIT0gbnVsbCkge1xuICAgIGNvbnN0IGZpbHRlck5vcm1hbCA9IGRhdGVUaW1lem9uZVV0Y05vcm1hbCh4LmZpbHRlci50aW1lem9uZSk7XG4gICAgY29uc3QgdHJhbnNmb3JtRm4gPSBmaWx0ZXJOb3JtYWwudHJhbnNmb3JtRnVuY3Rpb24oJ3N5c3RlbURhdGVUb1RhcmdldERhdGUnKTtcblxuICAgIGlucHV0ID0ge1xuICAgICAgZmlsdGVyOiB4LmZpbHRlcixcbiAgICAgIG1pbk1heERhdGVSYW5nZToge1xuICAgICAgICBzdGFydDogeC5taW5NYXhEYXRlUmFuZ2Uuc3RhcnQgPyB0cmFuc2Zvcm1Gbih4Lm1pbk1heERhdGVSYW5nZS5zdGFydCkgOiB1bmRlZmluZWQsXG4gICAgICAgIGVuZDogeC5taW5NYXhEYXRlUmFuZ2UuZW5kID8gdHJhbnNmb3JtRm4oeC5taW5NYXhEYXRlUmFuZ2UuZW5kKSA6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gY2FsZW5kYXJTY2hlZHVsZU1pbkFuZE1heERhdGVSYW5nZShpbnB1dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxlbmRhclNjaGVkdWxlTWluQW5kTWF4RGF0ZVJhbmdlKHg6IFBpY2s8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCAnZmlsdGVyJyB8ICdtaW5NYXhEYXRlUmFuZ2UnPik6IFBhcnRpYWw8RGF0ZVJhbmdlPiB7XG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IGNhbGVuZGFyU2NoZWR1bGVNaW5EYXRlKHgpIHx8IHVuZGVmaW5lZCxcbiAgICBlbmQ6IGNhbGVuZGFyU2NoZWR1bGVNYXhEYXRlKHgpIHx8IHVuZGVmaW5lZFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsZW5kYXJTY2hlZHVsZU1pbkRhdGUoeDogUGljazxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsICdmaWx0ZXInIHwgJ21pbk1heERhdGVSYW5nZSc+KTogTWF5YmU8RGF0ZT4ge1xuICByZXR1cm4gZmluZE1heERhdGUoW3guZmlsdGVyPy5zdGFydCwgeC5taW5NYXhEYXRlUmFuZ2U/LnN0YXJ0XSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxlbmRhclNjaGVkdWxlTWF4RGF0ZSh4OiBQaWNrPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgJ2ZpbHRlcicgfCAnbWluTWF4RGF0ZVJhbmdlJz4pOiBNYXliZTxEYXRlPiB7XG4gIHJldHVybiBmaW5kTWluRGF0ZShbeC5maWx0ZXI/LmVuZCwgeC5taW5NYXhEYXRlUmFuZ2U/LmVuZF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsZW5kYXJTY2hlZHVsZVN0YXJ0QmVpbmdVc2VkRnJvbUZpbHRlcih4OiBQaWNrPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgJ2ZpbHRlcicgfCAnY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXInPikge1xuICByZXR1cm4geC5jb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlciAmJiB4LmZpbHRlcj8uc3RhcnQgIT0gbnVsbDsgLy8gbWF5IGJlIHVzaW5nIGVpdGhlclxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlIGV4dGVuZHMgQ29tcG9uZW50U3RvcmU8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlPiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKGluaXRpYWxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUoKSk7XG4gIH1cblxuICAvLyBNQVJLOlxuICByZWFkb25seSB0b2dnbGVTZWxlY3Rpb24gPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8dm9pZD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICB0aGlzLm5leHRUb2dnbGVTZWxlY3Rpb24kLnBpcGUoXG4gICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICBmaWx0ZXJNYXliZSgpLFxuICAgICAgICAgIHRhcCgoeCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxEYXRlcyh4KTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfSk7XG5cbiAgLy8gTUFSSzogQWNjZXNzb3JzXG4gIHJlYWRvbmx5IHNlbGVjdGlvbk1vZGUkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguc2VsZWN0aW9uTW9kZSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGZpbHRlciQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5maWx0ZXIpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBtaW5NYXhEYXRlUmFuZ2UkID0gdGhpcy5zdGF0ZSQucGlwZShtYXAoY2FsZW5kYXJTY2hlZHVsZU1pbkFuZE1heERhdGVSYW5nZSksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVSYW5nZSksIHNoYXJlUmVwbGF5KDEpKTtcblxuICByZWFkb25seSBtaW5EYXRlJCA9IHRoaXMubWluTWF4RGF0ZVJhbmdlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geD8uc3RhcnQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVEYXkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG4gIHJlYWRvbmx5IG1heERhdGUkID0gdGhpcy5taW5NYXhEYXRlUmFuZ2UkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Py5lbmQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVEYXkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaGFzQ29uZmlndXJlZE1pbk1heFJhbmdlJCA9IHRoaXMubWluTWF4RGF0ZVJhbmdlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geCAhPSBudWxsICYmIHguc3RhcnQgIT0gbnVsbCAmJiB4LmVuZCAhPSBudWxsKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaW5wdXRTdGFydCQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5pbnB1dFN0YXJ0KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlucHV0RW5kJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmlucHV0RW5kKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRJbnB1dFJhbmdlJDogT2JzZXJ2YWJsZTxNYXliZTxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uSW5wdXREYXRlUmFuZ2U+PiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh7IGlucHV0U3RhcnQsIGlucHV0RW5kIH0pID0+ICh7IHN0YXJ0OiBpbnB1dFN0YXJ0LCBlbmQ6IGlucHV0RW5kIH0pKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gaXNTYW1lRGF0ZVJhbmdlKGEgYXMgRGF0ZVJhbmdlLCBiIGFzIERhdGVSYW5nZSkpLFxuICAgIG1hcCgoeCkgPT4gKHsgaW5wdXRTdGFydDogeC5zdGFydCwgaW5wdXRFbmQ6IHguZW5kIH0pKSxcbiAgICBtYXAoKHgpID0+IHtcbiAgICAgIGlmICh4LmlucHV0U3RhcnQgJiYgeC5pbnB1dEVuZCkge1xuICAgICAgICByZXR1cm4geCBhcyBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uSW5wdXREYXRlUmFuZ2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaW5wdXRSYW5nZSQ6IE9ic2VydmFibGU8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbklucHV0RGF0ZVJhbmdlPiA9IHRoaXMuY3VycmVudElucHV0UmFuZ2UkLnBpcGUoZmlsdGVyTWF5YmUoKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IGlzRW5hYmxlZEZpbHRlckRheUZ1bmN0aW9uJDogT2JzZXJ2YWJsZTxEZWNpc2lvbkZ1bmN0aW9uPERhdGVDZWxsVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD4+ID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguaXNFbmFibGVkRmlsdGVyRGF5KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNFbmFibGVkRGF5RnVuY3Rpb24kOiBPYnNlcnZhYmxlPERlY2lzaW9uRnVuY3Rpb248RGF0ZUNlbGxUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0Pj4gPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5pc0VuYWJsZWREYXkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjdXJyZW50RGF0ZVJhbmdlJDogT2JzZXJ2YWJsZTxNYXliZTxEYXRlUmFuZ2U+PiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKGNvbXB1dGVDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uUmFuZ2UpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBpc1NhbWVEYXRlUmFuZ2UoYSwgYikpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIkOiBPYnNlcnZhYmxlPE1heWJlPGJvb2xlYW4+PiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHN0YXJ0QmVpbmdVc2VkRnJvbUZpbHRlciQ6IE9ic2VydmFibGU8TWF5YmU8Ym9vbGVhbj4+ID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICAvL1xuICAgIG1hcChjYWxlbmRhclNjaGVkdWxlU3RhcnRCZWluZ1VzZWRGcm9tRmlsdGVyKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZGF0ZVJhbmdlJDogT2JzZXJ2YWJsZTxEYXRlUmFuZ2U+ID0gdGhpcy5jdXJyZW50RGF0ZVJhbmdlJC5waXBlKGZpbHRlck1heWJlKCksIHNoYXJlUmVwbGF5KDEpKTtcblxuICByZWFkb25seSBhbGxvd2VkRGF5c09mV2VlayQ6IE9ic2VydmFibGU8U2V0PERheU9mV2Vlaz4+ID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguYWxsb3dlZERheXNPZldlZWspLFxuICAgIGRpc3RpbmN0VW50aWxIYXNEaWZmZXJlbnRWYWx1ZXMoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzSW5BbGxvd2VkRGF5c09mV2Vla0Z1bmN0aW9uJCA9IHRoaXMuYWxsb3dlZERheXNPZldlZWskLnBpcGUoXG4gICAgbWFwKCh4KSA9PiBpc0luQWxsb3dlZERheXNPZldlZWtTZXQoeCkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgc2NoZWR1bGVEYXlzJDogT2JzZXJ2YWJsZTxTZXQ8RGF0ZUNlbGxTY2hlZHVsZURheUNvZGU+PiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmVmZmVjdGl2ZVNjaGVkdWxlRGF5cyksXG4gICAgZGlzdGluY3RVbnRpbEhhc0RpZmZlcmVudFZhbHVlcygpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgb3V0cHV0VGltZXpvbmUkOiBPYnNlcnZhYmxlPE1heWJlPFRpbWV6b25lU3RyaW5nPj4gPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5vdXRwdXRUaW1lem9uZSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZXpvbmUgb2YgdGhlIG91dHB1dCB2YWx1ZXMuXG4gICAqXG4gICAqIElmIGFuIG91dHB1dFRpbWV6b25lIGlzIG5vdCBzcGVjaWZpZWQsIHRoaXMgZGVmYXVsdHMgdG8gdGhlIHN5c3RlbSB0aW1lem9uZS5cbiAgICovXG4gIHJlYWRvbmx5IGVmZmVjdGl2ZU91dHB1dFRpbWV6b25lJDogT2JzZXJ2YWJsZTxUaW1lem9uZVN0cmluZz4gPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5vdXRwdXRUaW1lem9uZSB8fCB4LnN5c3RlbVRpbWV6b25lKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgLyoqXG4gICAqIEFuIG91dHB1dFRpbWV6b25lTm9ybWFsIHRvIHVzZS5cbiAgICpcbiAgICogSWYgYW4gb3V0cHV0VGltZXpvbmUgaXMgbm90IHNwZWNpZmllZCwgdGhpcyBpcyB1bmRlZmluZWQuXG4gICAqL1xuICByZWFkb25seSBlZmZlY3RpdmVPdXRwdXRUaW1lem9uZU5vcm1hbCQ6IE9ic2VydmFibGU8TWF5YmU8RGF0ZVRpbWV6b25lVXRjTm9ybWFsSW5zdGFuY2U+PiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiAoeC5vdXRwdXRUaW1lem9uZU5vcm1hbCA/IHgub3V0cHV0VGltZXpvbmVOb3JtYWwgOiB1bmRlZmluZWQpKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgY3VycmVudFNlbGVjdGlvblZhbHVlJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmN1cnJlbnRTZWxlY3Rpb25WYWx1ZSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRTZWxlY3Rpb25WYWx1ZVN0YXJ0JCA9IHRoaXMuY3VycmVudFNlbGVjdGlvblZhbHVlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geD8uZGF0ZVNjaGVkdWxlUmFuZ2Uuc3RhcnQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGUpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgY3VycmVudFNlbGVjdGlvblZhbHVlRGF0ZUNlbGxUaW1pbmdEYXRlRmFjdG9yeSQgPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZSQucGlwZShcbiAgICBtYXAoKHgpID0+ICh4ID8gZGF0ZUNlbGxUaW1pbmdEYXRlRmFjdG9yeSh7IHN0YXJ0c0F0OiB4LmRhdGVTY2hlZHVsZVJhbmdlLnN0YXJ0LCB0aW1lem9uZTogeC5kYXRlU2NoZWR1bGVSYW5nZS50aW1lem9uZSB9KSA6IHVuZGVmaW5lZCkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgY3VycmVudFNlbGVjdGlvblZhbHVlRGF0ZUNlbGxEdXJhdGlvblNwYW5FeHBhbnNpb24kOiBPYnNlcnZhYmxlPERhdGVDZWxsRHVyYXRpb25TcGFuPERhdGVDZWxsPltdPiA9IHRoaXMuY3VycmVudFNlbGVjdGlvblZhbHVlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gKHggPyBleHBhbmREYXRlQ2VsbFNjaGVkdWxlUmFuZ2UoeyBkYXRlQ2VsbFNjaGVkdWxlUmFuZ2U6IHguZGF0ZVNjaGVkdWxlUmFuZ2UgfSkgOiBbXSkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgc2VsZWN0aW9uVmFsdWVTZWxlY3RlZEluZGV4ZXMkOiBPYnNlcnZhYmxlPFNldDxEYXRlQ2VsbEluZGV4Pj4gPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZURhdGVDZWxsRHVyYXRpb25TcGFuRXhwYW5zaW9uJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gbmV3IFNldCh4Lm1hcCgoeSkgPT4geS5pKSkpLFxuICAgIGRpc3RpbmN0VW50aWxIYXNEaWZmZXJlbnRWYWx1ZXMoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGlvblZhbHVlU2VsZWN0ZWREYXRlcyQ6IE9ic2VydmFibGU8U2V0PElTTzg2MDFEYXlTdHJpbmc+PiA9IHRoaXMuY3VycmVudFNlbGVjdGlvblZhbHVlRGF0ZUNlbGxUaW1pbmdEYXRlRmFjdG9yeSQucGlwZShcbiAgICBzd2l0Y2hNYXAoKGRhdGVGYWN0b3J5KSA9PiB7XG4gICAgICByZXR1cm4gZGF0ZUZhY3RvcnkgPyB0aGlzLnNlbGVjdGlvblZhbHVlU2VsZWN0ZWRJbmRleGVzJC5waXBlKG1hcCgoeCkgPT4gbWFwVmFsdWVzVG9TZXQoeCwgKHkpID0+IGZvcm1hdFRvSVNPODYwMURheVN0cmluZ0ZvclN5c3RlbShkYXRlRmFjdG9yeSh5KSkpKSkgOiBvZihuZXcgU2V0PElTTzg2MDFEYXlTdHJpbmc+KCkpO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgc2VsZWN0aW9uVmFsdWUkID0gdGhpcy5jdXJyZW50U2VsZWN0aW9uVmFsdWUkLnBpcGUoZmlsdGVyTWF5YmUoKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRTZWxlY3Rpb25WYWx1ZVdpdGhUaW1lem9uZSQgPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZSQucGlwZShcbiAgICBjb21iaW5lTGF0ZXN0V2l0aCh0aGlzLmVmZmVjdGl2ZU91dHB1dFRpbWV6b25lTm9ybWFsJCksXG4gICAgbWFwKChbeCwgdGltZXpvbmVOb3JtYWxdKSA9PiB7XG4gICAgICBsZXQgY3VycmVudFZhbHVlV2l0aFRpbWV6b25lID0geDtcblxuICAgICAgaWYgKHggJiYgdGltZXpvbmVOb3JtYWwpIHtcbiAgICAgICAgY3VycmVudFZhbHVlV2l0aFRpbWV6b25lID0ge1xuICAgICAgICAgIGRhdGVTY2hlZHVsZVJhbmdlOiBjaGFuZ2VEYXRlQ2VsbFNjaGVkdWxlRGF0ZVJhbmdlVG9UaW1lem9uZSh4LmRhdGVTY2hlZHVsZVJhbmdlLCB0aW1lem9uZU5vcm1hbCksXG4gICAgICAgICAgbWluTWF4UmFuZ2U6IHgubWluTWF4UmFuZ2VcbiAgICAgICAgfSBhcyBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uVmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjdXJyZW50VmFsdWVXaXRoVGltZXpvbmU7XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGlvblZhbHVlV2l0aFRpbWV6b25lJCA9IHRoaXMuY3VycmVudFNlbGVjdGlvblZhbHVlV2l0aFRpbWV6b25lJC5waXBlKGZpbHRlck1heWJlKCksIHNoYXJlUmVwbGF5KDEpKTtcblxuICByZWFkb25seSBzZWxlY3Rpb25WYWx1ZVdpdGhUaW1lem9uZURhdGVDZWxsRHVyYXRpb25TcGFuRXhwYW5zaW9uJDogT2JzZXJ2YWJsZTxEYXRlQ2VsbER1cmF0aW9uU3BhbjxEYXRlQ2VsbD5bXT4gPSB0aGlzLnNlbGVjdGlvblZhbHVlV2l0aFRpbWV6b25lJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gZXhwYW5kRGF0ZUNlbGxTY2hlZHVsZVJhbmdlKHsgZGF0ZUNlbGxTY2hlZHVsZVJhbmdlOiB4LmRhdGVTY2hlZHVsZVJhbmdlIH0pKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IG5leHRUb2dnbGVTZWxlY3Rpb24kOiBPYnNlcnZhYmxlPE1heWJlPEFsbE9yTm9uZVNlbGVjdGlvbj4+ID0gdGhpcy5oYXNDb25maWd1cmVkTWluTWF4UmFuZ2UkLnBpcGUoXG4gICAgc3dpdGNoTWFwKChoYXNDb25maWd1cmVkTWluTWF4UmFuZ2UpID0+IHtcbiAgICAgIGxldCBvYnM6IE9ic2VydmFibGU8TWF5YmU8QWxsT3JOb25lU2VsZWN0aW9uPj47XG5cbiAgICAgIGlmIChoYXNDb25maWd1cmVkTWluTWF4UmFuZ2UpIHtcbiAgICAgICAgb2JzID0gdGhpcy5jdXJyZW50U2VsZWN0aW9uVmFsdWUkLnBpcGUobWFwKCh4KSA9PiAoeCA/ICdub25lJyA6ICdhbGwnKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JzID0gdGhpcy5jdXJyZW50U2VsZWN0aW9uVmFsdWUkLnBpcGUobWFwKCh4KSA9PiAoeCA/ICdub25lJyA6IHVuZGVmaW5lZCkpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9icztcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnREYXRlQ2VsbFNjaGVkdWxlUmFuZ2VWYWx1ZSQgPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZVdpdGhUaW1lem9uZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHg/LmRhdGVTY2hlZHVsZVJhbmdlKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlQ2VsbFNjaGVkdWxlRGF0ZVJhbmdlKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRhdGVDZWxsU2NoZWR1bGVSYW5nZVZhbHVlJCA9IHRoaXMuY3VycmVudERhdGVDZWxsU2NoZWR1bGVSYW5nZVZhbHVlJC5waXBlKGZpbHRlck1heWJlKCksIHNoYXJlUmVwbGF5KDEpKTtcblxuICByZWFkb25seSBjZWxsQ29udGVudEZhY3RvcnkkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguY2VsbENvbnRlbnRGYWN0b3J5KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNDdXN0b21pemVkJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LnRvZ2dsZWRJbmRleGVzLnNpemUgPiAwKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNWaWV3UmVhZG9ubHkkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguaXNWaWV3UmVhZG9ubHkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICAvLyBNQVJLOiBTdGF0ZSBDaGFuZ2VzXG4gIHJlYWRvbmx5IHNldE1pbk1heERhdGVSYW5nZSA9IHRoaXMudXBkYXRlcih1cGRhdGVTdGF0ZVdpdGhNaW5NYXhEYXRlUmFuZ2UpO1xuICByZWFkb25seSBzZXREZWZhdWx0V2VlayA9IHRoaXMudXBkYXRlcih1cGRhdGVTdGF0ZVdpdGhNaW5NYXhEYXRlUmFuZ2UpO1xuICByZWFkb25seSBzZXRGaWx0ZXIgPSB0aGlzLnVwZGF0ZXIodXBkYXRlU3RhdGVXaXRoRmlsdGVyKTtcbiAgcmVhZG9ubHkgc2V0RXhjbHVzaW9ucyA9IHRoaXMudXBkYXRlcih1cGRhdGVTdGF0ZVdpdGhFeGNsdXNpb25zKTtcbiAgcmVhZG9ubHkgc2V0Q29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIgPSB0aGlzLnVwZGF0ZXIodXBkYXRlU3RhdGVXaXRoQ29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIpO1xuICByZWFkb25seSBjbGVhckZpbHRlciA9IHRoaXMudXBkYXRlcigoc3RhdGUpID0+IHVwZGF0ZVN0YXRlV2l0aEZpbHRlcihzdGF0ZSwgdW5kZWZpbmVkKSk7XG5cbiAgcmVhZG9ubHkgc2V0T3V0cHV0VGltZXpvbmUgPSB0aGlzLnVwZGF0ZXIodXBkYXRlU3RhdGVXaXRoVGltZXpvbmVWYWx1ZSk7XG4gIC8qKlxuICAgKiBTZXRzIHRoZSBcImlucHV0XCIgZGF0ZSByYW5nZS4gVGhpcyBpcyB0aGUgcmFuZ2UgdGhhdCBnZXRzIGRpc3BsYXllZCBvbiB0aGUgZGF0ZSByYW5nZSBwaWNrZXIuXG4gICAqL1xuICByZWFkb25seSBzZXRJbnB1dFJhbmdlID0gdGhpcy51cGRhdGVyKHVwZGF0ZVN0YXRlV2l0aENoYW5nZWRSYW5nZSk7XG5cbiAgLy8gTk9URTogU2VsZWN0ZWQgZGF0ZXMgYXJlIE5PVCBzZWxlY3RlZCBpbmRleGVzLiBUaGV5IGFyZSB0aGUgaW50ZXJuYWwgc2VsZWN0ZWQgZGF0ZXMgdGhhdCBhcmUgZXhjbHVkZWQgZnJvbSB0aGUgc2VsZWN0aW9uLlxuICByZWFkb25seSB0b2dnbGVTZWxlY3RlZERhdGVzID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgdG9nZ2xlOiBJdGVyYWJsZU9yVmFsdWU8RGF0ZUNlbGxUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0PikgPT4gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZERhdGVzKHN0YXRlLCB7IHRvZ2dsZSB9KSk7XG4gIHJlYWRvbmx5IGFkZFNlbGVjdGVkRGF0ZXMgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBhZGQ6IEl0ZXJhYmxlT3JWYWx1ZTxEYXRlQ2VsbFRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+KSA9PiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGF0ZXMoc3RhdGUsIHsgYWRkIH0pKTtcbiAgcmVhZG9ubHkgcmVtb3ZlU2VsZWN0ZWREYXRlcyA9IHRoaXMudXBkYXRlcigoc3RhdGUsIHJlbW92ZTogSXRlcmFibGVPclZhbHVlPERhdGVDZWxsVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD4pID0+IHVwZGF0ZVN0YXRlV2l0aENoYW5nZWREYXRlcyhzdGF0ZSwgeyByZW1vdmUgfSkpO1xuICByZWFkb25seSBzZXRTZWxlY3RlZERhdGVzID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgc2V0OiBJdGVyYWJsZU9yVmFsdWU8RGF0ZUNlbGxUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0PikgPT4gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZERhdGVzKHN0YXRlLCB7IHNldCB9KSk7XG4gIHJlYWRvbmx5IHNlbGVjdEFsbERhdGVzID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgc2VsZWN0QWxsOiBBbGxPck5vbmVTZWxlY3Rpb24gPSAnYWxsJykgPT4gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZERhdGVzKHN0YXRlLCB7IHNlbGVjdEFsbCB9KSk7XG5cbiAgLy8gTk9URTogU2VsZWN0ZWQgaW5kZXhlcyBhcmUgdGhlIHR5cGljYWwvZXhwZWN0ZWQgaW5kZXhlcyB0aGF0IGFyZSBzZWxlY3RlZCBvciBub3QuXG4gIHJlYWRvbmx5IHNldFNlbGVjdGVkSW5kZXhlcyA9IHRoaXMudXBkYXRlcigoc3RhdGUsIHNldDogSXRlcmFibGVPclZhbHVlPERhdGVDZWxsVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD4pID0+IHVwZGF0ZVN0YXRlV2l0aENoYW5nZWREYXRlcyhzdGF0ZSwgeyBzZXQsIGludmVydFNldEJlaGF2aW9yOiB0cnVlIH0pKTtcbiAgcmVhZG9ubHkgc2V0SW5pdGlhbFNlbGVjdGlvblN0YXRlID0gdGhpcy51cGRhdGVyKHVwZGF0ZVN0YXRlV2l0aEluaXRpYWxTZWxlY3Rpb25TdGF0ZSk7XG5cbiAgcmVhZG9ubHkgc2V0RGVmYXVsdFNjaGVkdWxlRGF5cyA9IHRoaXMudXBkYXRlcih1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGVmYXVsdFNjaGVkdWxlRGF5cyk7XG4gIHJlYWRvbmx5IHNldFNjaGVkdWxlRGF5cyA9IHRoaXMudXBkYXRlcih1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkU2NoZWR1bGVEYXlzKTtcbiAgcmVhZG9ubHkgc2V0QWxsb3dBbGxTY2hlZHVsZURheXMgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlKSA9PiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkU2NoZWR1bGVEYXlzKHN0YXRlLCBbRGF0ZUNlbGxTY2hlZHVsZURheUNvZGUuV0VFS0RBWSwgRGF0ZUNlbGxTY2hlZHVsZURheUNvZGUuV0VFS0VORF0pKTtcblxuICByZWFkb25seSBzZXREYXRlU2NoZWR1bGVSYW5nZVZhbHVlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgdmFsdWU6IE1heWJlPEZ1bGxEYXRlQ2VsbFNjaGVkdWxlUmFuZ2VJbnB1dERhdGVSYW5nZT4pID0+IHVwZGF0ZVN0YXRlV2l0aERhdGVDZWxsU2NoZWR1bGVSYW5nZVZhbHVlKHN0YXRlLCB2YWx1ZSkpO1xuICByZWFkb25seSBzZXRDZWxsQ29udGVudEZhY3RvcnkgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBjZWxsQ29udGVudEZhY3Rvcnk6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25DZWxsQ29udGVudEZhY3RvcnkpID0+ICh7IC4uLnN0YXRlLCBjZWxsQ29udGVudEZhY3RvcnkgfSkpO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzZWxlY3Rpb24gbW9kZS5cbiAgICovXG4gIHJlYWRvbmx5IHNldFNlbGVjdGlvbk1vZGUgPSB0aGlzLnVwZGF0ZXIodXBkYXRlU3RhdGVXaXRoU2VsZWN0aW9uTW9kZSk7XG5cbiAgLyoqXG4gICAqIFVzZWQgYnkgdGhlIHBhcmVudCB2aWV3IHRvIHByb3BvZ2F0ZSBhIHJlYWRvbmx5IHN0YXRlLlxuICAgKlxuICAgKiBTaG91bGQgdHlwaWNhbGx5IG5vdCBiZSB1c2VkIGJ5IHRoZSB1c2VyIGRpcmVjdGx5IHdpdGggdGhlIGludGVudGlvbiBvZiB0aGUgcGFyZW50IHN5bmNocm9uaXppbmcgdG8gdGhpcyBzdGF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHNldFZpZXdSZWFkb25seVN0YXRlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgaXNWaWV3UmVhZG9ubHk6IGJvb2xlYW4pID0+ICh7IC4uLnN0YXRlLCBpc1ZpZXdSZWFkb25seSB9KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhJbml0aWFsU2VsZWN0aW9uU3RhdGUoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgaW5pdGlhbFNlbGVjdGlvblN0YXRlOiBNYXliZTxBbGxPck5vbmVTZWxlY3Rpb24+KTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgY29uc3QgeyB0b2dnbGVkSW5kZXhlcyB9ID0gc3RhdGU7XG5cbiAgaWYgKHRvZ2dsZWRJbmRleGVzLnNpemUgPT09IDAgJiYgaW5pdGlhbFNlbGVjdGlvblN0YXRlID09PSAnYWxsJykge1xuICAgIHN0YXRlID0gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZERhdGVzKHN0YXRlLCB7IHNlbGVjdEFsbDogaW5pdGlhbFNlbGVjdGlvblN0YXRlIH0pO1xuICB9XG5cbiAgcmV0dXJuIHsgLi4uc3RhdGUsIGluaXRpYWxTZWxlY3Rpb25TdGF0ZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoQ29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIoY3VycmVudFN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIGNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyOiBNYXliZTxib29sZWFuPik6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIGxldCBzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlID0geyAuLi5jdXJyZW50U3RhdGUsIGNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyIH07XG5cbiAgaWYgKEJvb2xlYW4oY3VycmVudFN0YXRlLmNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyKSAhPT0gQm9vbGVhbihjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcikpIHtcbiAgICBzdGF0ZSA9IHVwZGF0ZVN0YXRlV2l0aENoYW5nZWREYXRlcyhzdGF0ZSwge30pOyAvLyByZWNhbGN1bGF0ZSBpZiBjaGFuZ2Ugb2NjdXJzIGFzIGl0IHdpbGwgYWZmZWN0IHRoZSBvdXRwdXQgdmFsdWVcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aEV4Y2x1c2lvbnMoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgaW5wdXRFeGNsdXNpb25zOiBNYXliZTxBcnJheU9yVmFsdWU8RGF0ZU9yRGF0ZVJhbmdlT3JEYXRlQ2VsbEluZGV4T3JEYXRlQ2VsbFJhbmdlPj4pOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBsZXQgY29tcHV0ZWRFeGNsdXNpb25zOiBNYXliZTxEYXRlQ2VsbEluZGV4W10+O1xuXG4gIGlmIChpbnB1dEV4Y2x1c2lvbnMpIHtcbiAgICBjb25zdCB7IGluZGV4RmFjdG9yeSB9ID0gc3RhdGU7XG4gICAgY29uc3QgaW5kZXhBcnJheUZhY3RvcnkgPSBkYXRlQ2VsbFRpbWluZ1JlbGF0aXZlSW5kZXhBcnJheUZhY3RvcnkoaW5kZXhGYWN0b3J5KTtcbiAgICBjb21wdXRlZEV4Y2x1c2lvbnMgPSBpbmRleEFycmF5RmFjdG9yeShpbnB1dEV4Y2x1c2lvbnMpO1xuICB9XG5cbiAgc3RhdGUgPSB7IC4uLnN0YXRlLCBpbnB1dEV4Y2x1c2lvbnMsIGNvbXB1dGVkRXhjbHVzaW9ucyB9O1xuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoRmlsdGVyKHN0YXRlLCBzdGF0ZS5maWx0ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoTWluTWF4RGF0ZVJhbmdlKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIG1pbk1heERhdGVSYW5nZTogTWF5YmU8UGFydGlhbDxEYXRlUmFuZ2U+Pik6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIGlmIChtaW5NYXhEYXRlUmFuZ2UgIT0gbnVsbCAmJiAhaXNJbmZpbml0ZURhdGVSYW5nZShtaW5NYXhEYXRlUmFuZ2UpKSB7XG4gICAgc3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG1pbk1heERhdGVSYW5nZToge1xuICAgICAgICBzdGFydDogbWluTWF4RGF0ZVJhbmdlLnN0YXJ0ICE9IG51bGwgPyBzdGFydE9mRGF5KG1pbk1heERhdGVSYW5nZS5zdGFydCkgOiB1bmRlZmluZWQsXG4gICAgICAgIGVuZDogbWluTWF4RGF0ZVJhbmdlLmVuZCAhPSBudWxsID8gZW5kT2ZEYXkobWluTWF4RGF0ZVJhbmdlLmVuZCkgOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHN0YXRlID0geyAuLi5zdGF0ZSwgbWluTWF4RGF0ZVJhbmdlOiB1bmRlZmluZWQgfTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhGaWx0ZXIoc3RhdGUsIHN0YXRlLmZpbHRlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhGaWx0ZXIoY3VycmVudFN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIGlucHV0RmlsdGVyOiBNYXliZTxEYXRlQ2VsbFNjaGVkdWxlRGF0ZUZpbHRlckNvbmZpZz4pOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBjb25zdCB7IGNvbXB1dGVkRXhjbHVzaW9uczogZXhjbHVzaW9ucywgbWluTWF4RGF0ZVJhbmdlLCBzeXN0ZW1UaW1lem9uZSB9ID0gY3VycmVudFN0YXRlO1xuXG4gIGxldCBpc0VuYWJsZWRGaWx0ZXJEYXk6IE1heWJlPERlY2lzaW9uRnVuY3Rpb248RGF0ZUNlbGxUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0Pj4gPSAoKSA9PiB0cnVlO1xuICBsZXQgZmlsdGVyOiBNYXliZTxEYXRlQ2VsbFNjaGVkdWxlRGF0ZUZpbHRlckNvbmZpZz4gPSBudWxsO1xuXG4gIC8vIGNyZWF0ZSB0aGUgZmlsdGVyIHVzaW5nIGlucHV0RmlsdGVyLCBleGNsdXNpb25zLCBhbmQgbWluTWF4RGF0ZVJhbmdlXG4gIGlmIChpbnB1dEZpbHRlciB8fCBleGNsdXNpb25zPy5sZW5ndGggfHwgbWluTWF4RGF0ZVJhbmdlKSB7XG4gICAgbGV0IGVuYWJsZWRGaWx0ZXI6IENvbmZpZ3VyYWJsZTxEYXRlQ2VsbFNjaGVkdWxlRGF0ZUZpbHRlckNvbmZpZz47XG4gICAgbGV0IGZpbHRlclN0YXJ0OiBNYXliZTxEYXRlPiA9IG51bGw7IC8vIHRoZSBzdGFydCBkYXRlIHRoYXQgd2lsbCBiZSB1c2VkL3NldCBvbiB0aGUgZmlsdGVyLlxuXG4gICAgaWYgKGlucHV0RmlsdGVyKSB7XG4gICAgICBmaWx0ZXIgPSBjb3B5RGF0ZUNlbGxTY2hlZHVsZURhdGVGaWx0ZXJDb25maWcoaW5wdXRGaWx0ZXIpOyAvLyBjb3B5IGZpbHRlclxuXG4gICAgICBsZXQgbmV4dEZpbHRlclRpbWV6b25lOiBUaW1lem9uZVN0cmluZyB8IHVuZGVmaW5lZDsgLy8gb25seSBzZXQgaWYgaW5wdXRGaWx0ZXIuc3RhcnQgb3IgaW5wdXRGaWx0ZXIuc3RhcnRzQXRcblxuICAgICAgLy8gY29uZmlndXJlIGZpbHRlciBzdGFydFxuICAgICAgaWYgKGlucHV0RmlsdGVyLnN0YXJ0KSB7XG4gICAgICAgIGZpbHRlclN0YXJ0ID0gaW5wdXRGaWx0ZXIuc3RhcnQ7XG5cbiAgICAgICAgLy8gaWYgbm8gdGltZXpvbmUgaXMgc3BlY2lmaWVkLCB0aGVuIHVzZSB0aGUgc3lzdGVtIHRpbWV6b25lIGFuZCBhbGlnbiBmaWx0ZXJTdGFydCB0byB0aGUgc3RhcnQgb2YgdGhlIGRheS5cbiAgICAgICAgaWYgKCFpbnB1dEZpbHRlci50aW1lem9uZSkge1xuICAgICAgICAgIGZpbHRlclN0YXJ0ID0gU1lTVEVNX0RBVEVfVElNRVpPTkVfVVRDX05PUk1BTF9JTlNUQU5DRS5zdGFydE9mRGF5SW5UYXJnZXRUaW1lem9uZShpbnB1dEZpbHRlci5zdGFydHNBdCk7XG4gICAgICAgICAgbmV4dEZpbHRlclRpbWV6b25lID0gc3lzdGVtVGltZXpvbmU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV4dEZpbHRlclRpbWV6b25lID0gaW5wdXRGaWx0ZXIudGltZXpvbmU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaW5wdXRGaWx0ZXIuc3RhcnRzQXQpIHtcbiAgICAgICAgaWYgKGlucHV0RmlsdGVyLnRpbWV6b25lKSB7XG4gICAgICAgICAgLy8gaWYgbm8gdGltZXpvbmUgaXMgcHJvdmlkZWQsIHVzZSBzdGFydHNBdCBhcy1pc1xuICAgICAgICAgIGNvbnN0IHRpbWV6b25lTm9ybWFsID0gZGF0ZVRpbWV6b25lVXRjTm9ybWFsKGlucHV0RmlsdGVyLnRpbWV6b25lKTtcbiAgICAgICAgICBmaWx0ZXJTdGFydCA9IHRpbWV6b25lTm9ybWFsLnN0YXJ0T2ZEYXlJblRhcmdldFRpbWV6b25lKGlucHV0RmlsdGVyLnN0YXJ0c0F0KTtcbiAgICAgICAgICBuZXh0RmlsdGVyVGltZXpvbmUgPSBpbnB1dEZpbHRlci50aW1lem9uZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBzZXQgdG8gdGhlIHN0YXJ0IG9mIHRvZGF5IGluIHRoZSBzeXN0ZW0gdGltZXpvbmUuXG4gICAgICAgICAgZmlsdGVyU3RhcnQgPSBTWVNURU1fREFURV9USU1FWk9ORV9VVENfTk9STUFMX0lOU1RBTkNFLnN0YXJ0T2ZEYXlJblRhcmdldFRpbWV6b25lKGlucHV0RmlsdGVyLnN0YXJ0c0F0KTtcbiAgICAgICAgICBuZXh0RmlsdGVyVGltZXpvbmUgPSBzeXN0ZW1UaW1lem9uZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmaWx0ZXIuc3RhcnQgPSBmaWx0ZXJTdGFydCA/PyB1bmRlZmluZWQ7XG4gICAgICBmaWx0ZXIudGltZXpvbmUgPSBuZXh0RmlsdGVyVGltZXpvbmU7XG5cbiAgICAgIC8vIGNvbmZpZ3VyZSBleGNsdXNpb25zXG4gICAgICBpZiAoZXhjbHVzaW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgIGVuYWJsZWRGaWx0ZXIgPSB7XG4gICAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICAgIGV4OiB1bmlxdWUobWVyZ2VBcnJheXMoW2ZpbHRlci5leCwgZXhjbHVzaW9uc10pKVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW5hYmxlZEZpbHRlciA9IGZpbHRlcjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZW5hYmxlZEZpbHRlciA9IHtcbiAgICAgICAgdzogJzg5JyxcbiAgICAgICAgZXg6IGV4Y2x1c2lvbnMgYXMgbnVtYmVyW11cbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKG1pbk1heERhdGVSYW5nZSkge1xuICAgICAgZW5hYmxlZEZpbHRlci5taW5NYXhEYXRlUmFuZ2UgPSBtaW5NYXhEYXRlUmFuZ2U7XG4gICAgICBlbmFibGVkRmlsdGVyLnNldFN0YXJ0QXNNaW5EYXRlID0gZmlsdGVyU3RhcnQgPyB0cnVlIDogZmFsc2U7IC8vIElmIGEgc3RhcnQgZGF0ZSBpcyBzZXQsIHRoZW4gaXQgYmVjb21lcyB0aGUgZmxvb3IuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSWYgdGhlIGlucHV0IGZpbHRlciBoYXMgYSBzdGFydCBkYXRlLCB1c2UgdGhhdCBhcyB0aGUgcmVsYXRpdmUgc3RhcnQgdG8gZW5zdXJlIGluZGV4ZXMgYXJlIGNvbXBhcmVkIHRoZSBzYW1lLFxuICAgICAqIG90aGVyd2lzZSB1c2UgdGhlIHN0YXRlJ3Mgc3RhcnQuIFRoaXMgaXMgaW1wb3J0YW50IGZvciB0aGUgaW5kZXggY2FsY3VsYXRpb25zLlxuICAgICAqL1xuICAgIGxldCBmaW5hbEVuYWJsZWRTdGFydDogRGF0ZTtcbiAgICBsZXQgZmluYWxFbmFibGVkVGltZXpvbmU6IFRpbWV6b25lU3RyaW5nO1xuICAgIC8vICBmaWx0ZXI/LnN0YXJ0ID8/IHN0YXRlLnN0YXJ0O1xuXG4gICAgaWYgKCFlbmFibGVkRmlsdGVyLnN0YXJ0KSB7XG4gICAgICAvLyB1c2UgdGhlIGN1cnJlbnQgc3RhdGUncyBzdGFydCwgYnV0IG1ha2Ugc3VyZSBpdCBpcyBpbiB0aGUgcHJvcGVyIHRpbWV6b25lLlxuICAgICAgaWYgKGVuYWJsZWRGaWx0ZXIudGltZXpvbmUpIHtcbiAgICAgICAgY29uc3QgdGltZXpvbmVOb3JtYWwgPSBkYXRlVGltZXpvbmVVdGNOb3JtYWwoZW5hYmxlZEZpbHRlci50aW1lem9uZSk7XG4gICAgICAgIGZpbmFsRW5hYmxlZFN0YXJ0ID0gdGltZXpvbmVOb3JtYWwuc3RhcnRPZkRheUluVGFyZ2V0VGltZXpvbmUoY3VycmVudFN0YXRlLnN0YXJ0KTsgLy8gZ2V0IHRoZSBzdGFydCBvZiB0aGUgZGF5IGZvciB0aGUgY3VycmVudCBzdGFydFxuICAgICAgICBmaW5hbEVuYWJsZWRUaW1lem9uZSA9IGVuYWJsZWRGaWx0ZXIudGltZXpvbmU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaW5hbEVuYWJsZWRTdGFydCA9IGN1cnJlbnRTdGF0ZS5zdGFydDtcbiAgICAgICAgZmluYWxFbmFibGVkVGltZXpvbmUgPSBzeXN0ZW1UaW1lem9uZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFlbmFibGVkRmlsdGVyLnRpbWV6b25lKSB7XG4gICAgICBmaW5hbEVuYWJsZWRUaW1lem9uZSA9IHN5c3RlbVRpbWV6b25lO1xuXG4gICAgICBjb25zdCB0aW1lem9uZU5vcm1hbCA9IGRhdGVUaW1lem9uZVV0Y05vcm1hbChmaW5hbEVuYWJsZWRUaW1lem9uZSk7XG4gICAgICBmaW5hbEVuYWJsZWRTdGFydCA9IHRpbWV6b25lTm9ybWFsLnN0YXJ0T2ZEYXlJblRhcmdldFRpbWV6b25lKGVuYWJsZWRGaWx0ZXIuc3RhcnQpOyAvLyBnZXQgdGhlIHN0YXJ0IG9mIHRoZSBkYXkgZm9yIHRoZSB0YXJnZXQgdGltZXpvbmVcbiAgICB9IGVsc2Uge1xuICAgICAgZmluYWxFbmFibGVkU3RhcnQgPSBlbmFibGVkRmlsdGVyLnN0YXJ0O1xuICAgICAgZmluYWxFbmFibGVkVGltZXpvbmUgPSBlbmFibGVkRmlsdGVyLnRpbWV6b25lO1xuICAgIH1cblxuICAgIGVuYWJsZWRGaWx0ZXIuc3RhcnQgPSBmaW5hbEVuYWJsZWRTdGFydDtcbiAgICBlbmFibGVkRmlsdGVyLnRpbWV6b25lID0gZmluYWxFbmFibGVkVGltZXpvbmU7XG5cbiAgICAvLyBjcmVhdGUgdGhlIGZpbHRlclxuICAgIGlzRW5hYmxlZEZpbHRlckRheSA9IGRhdGVDZWxsU2NoZWR1bGVEYXRlRmlsdGVyKGVuYWJsZWRGaWx0ZXIpO1xuICB9XG5cbiAgbGV0IG5leHRTdGF0ZTogQnVpbGRpbmc8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlPiA9IHsgLi4uY3VycmVudFN0YXRlLCBmaWx0ZXIsIGlzRW5hYmxlZEZpbHRlckRheSB9O1xuXG4gIC8vIEZvciB0aGUgc2FtZSByZWFzb24gYXMgYWJvdmUsIHVzZSB0aGUgZmlsdGVyJ3Mgc3RhcnQgZGF0ZSBhcyB0aGUgcmVsYXRpdmUgc3RhcnQgaWYgYXBwbGljYWJsZS5cbiAgaWYgKGZpbHRlciAmJiBmaWx0ZXIuc3RhcnQpIHtcbiAgICBsZXQgc3RhcnRGb3JTeXN0ZW1UaW1lem9uZTogRGF0ZSA9IGZpbHRlci5zdGFydDtcblxuICAgIGlmIChmaWx0ZXIudGltZXpvbmUpIHtcbiAgICAgIGNvbnN0IHRpbWV6b25lTm9ybWFsID0gZGF0ZVRpbWV6b25lVXRjTm9ybWFsKGZpbHRlci50aW1lem9uZSk7XG4gICAgICBzdGFydEZvclN5c3RlbVRpbWV6b25lID0gdGltZXpvbmVOb3JtYWwuc3lzdGVtRGF0ZVRvVGFyZ2V0RGF0ZShmaWx0ZXIuc3RhcnQpOyAvLyBnZXQgdGhlIHN0YXJ0IG9mIHRoZSBkYXkgZm9yIHRoZSBzeXN0ZW0gdGltZXpvbmVcbiAgICB9XG5cbiAgICBuZXh0U3RhdGUuc3RhcnQgPSBzdGFydEZvclN5c3RlbVRpbWV6b25lO1xuICAgIG5leHRTdGF0ZS5pbmRleEZhY3RvcnkgPSBkYXRlQ2VsbFRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5KHsgc3RhcnRzQXQ6IHN0YXJ0Rm9yU3lzdGVtVGltZXpvbmUsIHRpbWV6b25lOiBzeXN0ZW1UaW1lem9uZSB9KTtcbiAgICBuZXh0U3RhdGUuaW5kZXhEYXlPZldlZWsgPSBkYXRlQ2VsbERheU9mV2Vla0ZhY3Rvcnkoc3RhcnRGb3JTeXN0ZW1UaW1lem9uZSk7XG4gIH1cblxuICAvLyBhdHRlbXB0IHRvIHJlLWFwcGx5IHRoZSBpbml0aWFsIHNlbGVjdGlvbiBzdGF0ZSBvbmNlIGZpbHRlciBpcyBhcHBsaWVkXG4gIGlmIChuZXh0U3RhdGUuaW5pdGlhbFNlbGVjdGlvblN0YXRlKSB7XG4gICAgbmV4dFN0YXRlID0gdXBkYXRlU3RhdGVXaXRoSW5pdGlhbFNlbGVjdGlvblN0YXRlKG5leHRTdGF0ZSBhcyBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIG5leHRTdGF0ZS5pbml0aWFsU2VsZWN0aW9uU3RhdGUpO1xuICB9XG5cbiAgLy8gcmUtY2FsY3VsYXRlIHRoZSBzZWxlY3Rpb24gZ2l2ZW4gdGhlIGZpbHRlclxuICBjb25zdCB7IGlucHV0U3RhcnQsIGlucHV0RW5kIH0gPSBuZXh0U3RhdGU7XG5cbiAgaWYgKGlucHV0U3RhcnQgJiYgaW5wdXRFbmQpIHtcbiAgICBuZXh0U3RhdGUgPSB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkUmFuZ2UobmV4dFN0YXRlIGFzIENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgeyBpbnB1dFN0YXJ0LCBpbnB1dEVuZCB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGUgYXMgQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoVGltZXpvbmVWYWx1ZShzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCB0aW1lem9uZTogTWF5YmU8VGltZXpvbmVTdHJpbmc+KTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgY29uc3QgeyBjdXJyZW50U2VsZWN0aW9uVmFsdWUgfSA9IHN0YXRlO1xuICBjb25zdCB0aW1lem9uZU5vcm1hbCA9IHRpbWV6b25lID8gZGF0ZVRpbWV6b25lVXRjTm9ybWFsKHsgdGltZXpvbmUgfSkgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKHRpbWV6b25lTm9ybWFsICYmIGN1cnJlbnRTZWxlY3Rpb25WYWx1ZSkge1xuICAgIC8vIHVwZGF0ZSB0aGUgc2VsZWN0aW9uIHZhbHVlIHRvIHJlZmxlY3QgdGhlIHRpbWV6b25lIGNoYW5nZXMuXG4gICAgY29uc3QgeyBkYXRlU2NoZWR1bGVSYW5nZTogY3VycmVudERhdGVDZWxsU2NoZWR1bGVSYW5nZSB9ID0gY3VycmVudFNlbGVjdGlvblZhbHVlO1xuICAgIGNvbnN0IHN0YXJ0ID0gdGltZXpvbmVOb3JtYWwudGFyZ2V0RGF0ZVRvU3lzdGVtRGF0ZShjdXJyZW50RGF0ZUNlbGxTY2hlZHVsZVJhbmdlLnN0YXJ0KTtcbiAgICBjb25zdCBlbmQgPSB0aW1lem9uZU5vcm1hbC50YXJnZXREYXRlVG9TeXN0ZW1EYXRlKGN1cnJlbnREYXRlQ2VsbFNjaGVkdWxlUmFuZ2UuZW5kKTtcblxuICAgIGNvbnN0IG5ld1JhbmdlOiBEYXRlQ2VsbFNjaGVkdWxlRGF0ZVJhbmdlID0ge1xuICAgICAgLi4uY3VycmVudFNlbGVjdGlvblZhbHVlLmRhdGVTY2hlZHVsZVJhbmdlLFxuICAgICAgc3RhcnQsXG4gICAgICBlbmRcbiAgICB9O1xuXG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aERhdGVDZWxsU2NoZWR1bGVSYW5nZVZhbHVlKHsgLi4uc3RhdGUsIG91dHB1dFRpbWV6b25lOiB0aW1lem9uZSwgb3V0cHV0VGltZXpvbmVOb3JtYWw6IHRpbWV6b25lTm9ybWFsIH0sIG5ld1JhbmdlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geyAuLi5zdGF0ZSwgb3V0cHV0VGltZXpvbmU6IHRpbWV6b25lLCBvdXRwdXRUaW1lem9uZU5vcm1hbDogdGltZXpvbmVOb3JtYWwgfTsgLy8gbm8gY2hhbmdlIGluIHZhbHVlXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aERhdGVDZWxsU2NoZWR1bGVSYW5nZVZhbHVlKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIGlucHV0Q2hhbmdlOiBNYXliZTxGdWxsRGF0ZUNlbGxTY2hlZHVsZVJhbmdlSW5wdXREYXRlUmFuZ2U+KTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgY29uc3QgeyBjdXJyZW50U2VsZWN0aW9uVmFsdWUsIHN5c3RlbVRpbWV6b25lIH0gPSBzdGF0ZTtcbiAgY29uc3QgY3VycmVudERhdGVDZWxsU2NoZWR1bGVSYW5nZSA9IGN1cnJlbnRTZWxlY3Rpb25WYWx1ZT8uZGF0ZVNjaGVkdWxlUmFuZ2U7IC8vIGN1cnJlbnQgcmFuZ2UgaXMgYWx3YXlzIGluIHN5c3RlbSB0aW1lXG4gIGxldCBjaGFuZ2U6IE1heWJlPFBpY2s8RGF0ZUNlbGxTY2hlZHVsZURhdGVSYW5nZSwgJ3N0YXJ0JyB8ICdlbmQnIHwgJ2V4JyB8ICd3JyB8ICd0aW1lem9uZSc+PjtcblxuICAvLyBXaGVuIHVzaW5nIHRpbWV6b25lcywgYWx3YXlzIHJldHVybiBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZGF5LiBJbnB1dHMgYXJlIGNvbnZlcnRlZCB0byB0aGUgc3lzdGVtIHRpbWUgYW5kIHVzZWQgYXMgdGhlIHN0YXJ0IG9mIHRoZSBkYXkuXG4gIC8vIE91dHB1dHMgcmVtYWluIGFjY3VyYXRlLlxuXG4gIGlmIChpbnB1dENoYW5nZSkge1xuICAgIC8vIG1ha2Ugc3VyZSBhIHRpbWV6b25lIGlzIHNldC4gSW5wdXQgbWF5IG5vdCBoYXZlIGEgdGltZXpvbmUgYXR0YWNoZWQuIERlZmF1bHQgdG8gc3lzdGVtIHRpbWUuXG4gICAgY29uc3QgaW5wdXRDaGFuZ2VXaXRoVGltZXpvbmVTZXQgPSB7XG4gICAgICAuLi5pbnB1dENoYW5nZSxcbiAgICAgIHRpbWV6b25lOiBpbnB1dENoYW5nZS50aW1lem9uZSA/PyBzeXN0ZW1UaW1lem9uZVxuICAgIH07XG5cbiAgICAvLyBjYWxjdWxhdGUgdGhlIHNjaGVkdWxlIHJhbmdlXG4gICAgY29uc3QgZnVsbENoYW5nZSA9IGZ1bGxEYXRlQ2VsbFNjaGVkdWxlUmFuZ2UoeyBkYXRlQ2VsbFNjaGVkdWxlUmFuZ2U6IGlucHV0Q2hhbmdlV2l0aFRpbWV6b25lU2V0IH0pO1xuICAgIGNvbnN0IGlucHV0Tm9ybWFsID0gZGF0ZUNlbGxUaW1pbmdUaW1lem9uZU5vcm1hbEluc3RhbmNlKGZ1bGxDaGFuZ2UpO1xuXG4gICAgY29uc3Qgc3RhcnRJblN5c3RlbVR6ID0gaW5wdXROb3JtYWwuc3lzdGVtRGF0ZVRvVGFyZ2V0RGF0ZShmdWxsQ2hhbmdlLnN0YXJ0KTtcbiAgICBjb25zdCBlbmRJblN5c3RlbVR6ID0gc3RhcnRPZkRheShpbnB1dE5vcm1hbC5zeXN0ZW1EYXRlVG9UYXJnZXREYXRlKGZ1bGxDaGFuZ2UuZW5kKSk7XG5cbiAgICAvLyBjb252ZXJ0IHRoZSBzdGFydC9lbmQgdG8gc3lzdGVtIHRpbWVcbiAgICBjaGFuZ2UgPSB7XG4gICAgICBzdGFydDogc3RhcnRJblN5c3RlbVR6LFxuICAgICAgZW5kOiBlbmRJblN5c3RlbVR6LFxuICAgICAgdzogZnVsbENoYW5nZS53LFxuICAgICAgZXg6IGZ1bGxDaGFuZ2UuZXgsXG4gICAgICB0aW1lem9uZTogZnVsbENoYW5nZS50aW1lem9uZVxuICAgIH07XG4gIH1cblxuICBjb25zdCBpc1NhbWVWYWx1ZSA9IGlzU2FtZURhdGVDZWxsU2NoZWR1bGVEYXRlUmFuZ2UoY3VycmVudERhdGVDZWxsU2NoZWR1bGVSYW5nZSwgY2hhbmdlKTtcblxuICBpZiAoaXNTYW1lVmFsdWUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGNoYW5nZSAhPSBudWxsKSB7XG4gICAgICBjb25zdCBuZXh0U3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSA9IHsgLi4uc3RhdGUsIGlucHV0U3RhcnQ6IGNoYW5nZS5zdGFydCwgaW5wdXRFbmQ6IGNoYW5nZS5lbmQsIHRvZ2dsZWRJbmRleGVzOiBuZXcgU2V0KGNoYW5nZS5leCkgfTtcbiAgICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkU2NoZWR1bGVEYXlzKGZpbmFsaXplTmV3Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKG5leHRTdGF0ZSksIGV4cGFuZERhdGVDZWxsU2NoZWR1bGVEYXlDb2RlcyhjaGFuZ2UudyB8fCAnODknKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBub1NlbGVjdGlvbkNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZShzdGF0ZSk7IC8vIGNsZWFyIHNlbGVjdGlvbiwgcmV0YWluIGRpc2FibGVkIGRheXNcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aENoYW5nZWREZWZhdWx0U2NoZWR1bGVEYXlzKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIGNoYW5nZTogTWF5YmU8SXRlcmFibGU8RGF0ZUNlbGxTY2hlZHVsZURheUNvZGU+Pik6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIGNvbnN0IHsgZGVmYXVsdFNjaGVkdWxlRGF5czogY3VycmVudERlZmF1bHRTY2hlZHVsZURheXMgfSA9IHN0YXRlO1xuICBjb25zdCBkZWZhdWx0U2NoZWR1bGVEYXlzID0gbmV3IFNldChjaGFuZ2UgPz8gZnVsbFdlZWtEYXRlQ2VsbFNjaGVkdWxlRGF5Q29kZXMoKSk7XG5cbiAgaWYgKGRhdGVDZWxsU2NoZWR1bGVEYXlDb2Rlc0FyZVNldHNFcXVpdmFsZW50KGRlZmF1bHRTY2hlZHVsZURheXMsIGN1cnJlbnREZWZhdWx0U2NoZWR1bGVEYXlzKSkge1xuICAgIHJldHVybiBzdGF0ZTsgLy8gbm8gY2hhbmdlXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZpbmFsaXplVXBkYXRlU3RhdGVXaXRoQ2hhbmdlZFNjaGVkdWxlRGF5cyhzdGF0ZSwgeyAuLi5zdGF0ZSwgZGVmYXVsdFNjaGVkdWxlRGF5cyB9KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZFNjaGVkdWxlRGF5cyhzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCBjaGFuZ2U6IE1heWJlPEl0ZXJhYmxlPERhdGVDZWxsU2NoZWR1bGVEYXlDb2RlPj4pOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBjb25zdCB7IHNjaGVkdWxlRGF5czogY3VycmVudFNjaGVkdWxlRGF5cyB9ID0gc3RhdGU7XG4gIGNvbnN0IHNjaGVkdWxlRGF5cyA9IG5ldyBTZXQoY2hhbmdlID8/IFtdKTtcblxuICBsZXQgbmV3U2NoZWR1bGVEYXlzOiBTZXQ8RGF0ZUNlbGxTY2hlZHVsZURheUNvZGU+IHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuICBpZiAoY3VycmVudFNjaGVkdWxlRGF5cyAhPSBudWxsICYmIGNoYW5nZSAhPSBudWxsKSB7XG4gICAgaWYgKGRhdGVDZWxsU2NoZWR1bGVEYXlDb2Rlc0FyZVNldHNFcXVpdmFsZW50KHNjaGVkdWxlRGF5cywgY3VycmVudFNjaGVkdWxlRGF5cykpIHtcbiAgICAgIG5ld1NjaGVkdWxlRGF5cyA9IHVuZGVmaW5lZDsgLy9ubyBjaGFuZ2VcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3U2NoZWR1bGVEYXlzID0gc2NoZWR1bGVEYXlzO1xuICAgIH1cbiAgfSBlbHNlIGlmIChjdXJyZW50U2NoZWR1bGVEYXlzICE9PSBjaGFuZ2UpIHtcbiAgICBuZXdTY2hlZHVsZURheXMgPSBjaGFuZ2UgPyBzY2hlZHVsZURheXMgOiBudWxsOyAvLyBzZXQgdGhlIG5ldyBvbmUsIG9yIGNsZWFyIGl0XG4gIH1cblxuICBpZiAobmV3U2NoZWR1bGVEYXlzID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZpbmFsaXplVXBkYXRlU3RhdGVXaXRoQ2hhbmdlZFNjaGVkdWxlRGF5cyhzdGF0ZSwgeyAuLi5zdGF0ZSwgc2NoZWR1bGVEYXlzOiBuZXdTY2hlZHVsZURheXMgPz8gdW5kZWZpbmVkIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhTZWxlY3Rpb25Nb2RlKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIHNlbGVjdGlvbk1vZGU6IERieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZVNlbGVjdGlvbk1vZGUpOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBjb25zdCB7IHNlbGVjdGlvbk1vZGU6IGN1cnJlbnRTZWxlY3Rpb25Nb2RlIH0gPSBzdGF0ZTtcblxuICBpZiAoY3VycmVudFNlbGVjdGlvbk1vZGUgIT09IHNlbGVjdGlvbk1vZGUpIHtcbiAgICBjb25zdCBuZXh0U3RhdGUgPSB7IC4uLnN0YXRlLCBzZWxlY3Rpb25Nb2RlIH07XG5cbiAgICBpZiAoc2VsZWN0aW9uTW9kZSA9PT0gJ211bHRpcGxlJykge1xuICAgICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY3VycmVudFNlbGVjdGlvblJhbmdlID0gY29tcHV0ZUNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25EYXRlQ2VsbFJhbmdlKG5leHRTdGF0ZSk7XG4gICAgICByZXR1cm4gY3VycmVudFNlbGVjdGlvblJhbmdlID8gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZERhdGVzKG5leHRTdGF0ZSwgeyBzZXQ6IFtjdXJyZW50U2VsZWN0aW9uUmFuZ2UuaV0sIGludmVydFNldEJlaGF2aW9yOiB0cnVlIH0pIDogbmV4dFN0YXRlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmFsaXplVXBkYXRlU3RhdGVXaXRoQ2hhbmdlZFNjaGVkdWxlRGF5cyhwcmV2aW91c1N0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIG5leHRTdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgY29uc3QgcHJldmlvdXNTY2hlZHVsZURheXMgPSBwcmV2aW91c1N0YXRlLmVmZmVjdGl2ZVNjaGVkdWxlRGF5cztcbiAgY29uc3QgbmV4dFNjaGVkdWxlRGF5cyA9IG5leHRTdGF0ZS5zY2hlZHVsZURheXMgPz8gbmV4dFN0YXRlLmRlZmF1bHRTY2hlZHVsZURheXM7XG5cbiAgaWYgKGRhdGVDZWxsU2NoZWR1bGVEYXlDb2Rlc0FyZVNldHNFcXVpdmFsZW50KG5leHRTY2hlZHVsZURheXMsIHByZXZpb3VzU2NoZWR1bGVEYXlzKSkge1xuICAgIHJldHVybiBuZXh0U3RhdGU7IC8vIHRoZSBkZWZhdWx0IG9yIGlucHV0IHNjaGVkdWxlIGNoYW5nZWQgYnV0IHRoZSBzY2hlZHVsZSBpcyBzdGlsbCB0aGUgc2FtZSwgc28gbm8gbmVlZCBmb3IgYW4gdXBkYXRlLlxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGVmZmVjdGl2ZVNjaGVkdWxlRGF5cyA9IG5ldyBTZXQoc2ltcGxpZnlEYXRlQ2VsbFNjaGVkdWxlRGF5Q29kZXMobmV4dFNjaGVkdWxlRGF5cykpO1xuICAgIGNvbnN0IGFsbG93ZWREYXlzT2ZXZWVrID0gZXhwYW5kRGF0ZUNlbGxTY2hlZHVsZURheUNvZGVzVG9EYXlPZldlZWtTZXQobmV4dFNjaGVkdWxlRGF5cyk7XG5cbiAgICByZXR1cm4gZmluYWxpemVOZXdDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUoe1xuICAgICAgLi4ubmV4dFN0YXRlLFxuICAgICAgLy8gdXBkYXRlIHRoZSBlZmZlY3RpdmUgc2NoZWR1bGUgZGF5cyBhbmQgYWxsb3dlZCBkYXlzIG9mIHdlZWtcbiAgICAgIGVmZmVjdGl2ZVNjaGVkdWxlRGF5cyxcbiAgICAgIGFsbG93ZWREYXlzT2ZXZWVrXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGVEYXRlc0NoYW5nZSB7XG4gIHJlc2V0PzogdHJ1ZTtcbiAgdG9nZ2xlPzogSXRlcmFibGVPclZhbHVlPERhdGVDZWxsVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD47XG4gIGFkZD86IEl0ZXJhYmxlT3JWYWx1ZTxEYXRlQ2VsbFRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+O1xuICByZW1vdmU/OiBJdGVyYWJsZU9yVmFsdWU8RGF0ZUNlbGxUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0PjtcbiAgc2V0PzogSXRlcmFibGVPclZhbHVlPERhdGVDZWxsVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD47XG4gIHNlbGVjdEFsbD86IEFsbE9yTm9uZVNlbGVjdGlvbjtcbiAgLyoqXG4gICAqIEludmVydHMgdGhlIHNldCBkYXRlIGNoYW5naW5nIGJlaGF2aW9yIHNvIHRoYXQgdGhlIHNldCBpbnB1dCBpcyB0cmVhdGVkIGFzIGl0ZW1zIHRoYXQgc2hvdWxkIGJlIHJldGFpbmVkIGluc3RlYWQgb2YgZXhjbHVkZWQuXG4gICAqXG4gICAqIElnbm9yZWQgd2hlbiBzZXQgaXMgbm90IHVzZWQuIElnbm9yZWQgZm9yIHNlbGVjdEFsbC5cbiAgICovXG4gIGludmVydFNldEJlaGF2aW9yPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aENoYW5nZWREYXRlcyhzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCBjaGFuZ2U6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZURhdGVzQ2hhbmdlKTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgY29uc3QgeyBzZWxlY3Rpb25Nb2RlLCBhbGxvd2VkRGF5c09mV2VlaywgaW5kZXhGYWN0b3J5LCBpbmRleERheU9mV2VlaywgaW5wdXRTdGFydDogY3VycmVudElucHV0U3RhcnQsIGlucHV0RW5kOiBjdXJyZW50SW5wdXRFbmQsIG1pbk1heERhdGVSYW5nZSwgZmlsdGVyIH0gPSBzdGF0ZTtcbiAgY29uc3QgeyBzdGFydDogbWluRGF0ZUZyb21GaWx0ZXIsIGVuZDogbWF4RGF0ZUZyb21GaWx0ZXIgfSA9IGNhbGVuZGFyU2NoZWR1bGVNaW5BbmRNYXhEYXRlUmFuZ2VSZWxhdGl2ZVRvRmlsdGVyKHN0YXRlKTtcbiAgbGV0IGlucHV0U3RhcnQgPSBjdXJyZW50SW5wdXRTdGFydDtcbiAgbGV0IGlucHV0RW5kID0gY3VycmVudElucHV0RW5kO1xuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGEgc2V0IG9mIGluZGV4ZXMgdGhhdCBhcmUgaW50ZXJuYWxseSBcInNlbGVjdGVkXCIgc28gdGhhdCB0aGV5IGFyZSBleGNsdWRlZCBmcm9tIHRoZSBpbnB1dFN0YXJ0L2lucHV0RW5kIGRhdGUgcmFuZ2UuXG4gICAqXG4gICAqIERvIG5vdCBjb25mdXNlIHRoaXMgd2l0aCB0aGUgYWN0dWFsIGluZGV4ZXMgdGhhdCBhcmUgc2VsZWN0ZWQuXG4gICAqL1xuICBsZXQgdG9nZ2xlZEluZGV4ZXM6IFNldDxEYXRlQ2VsbEluZGV4PjtcblxuICBmdW5jdGlvbiBhc0luZGV4ZXMoaW5kZXhlczogSXRlcmFibGVPclZhbHVlPERhdGVDZWxsVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD4pOiBEYXRlQ2VsbEluZGV4W10ge1xuICAgIHJldHVybiBpdGVyYWJsZVRvQXJyYXkoaW5kZXhlcykubWFwKGluZGV4RmFjdG9yeSk7XG4gIH1cblxuICAvLyBXaGVuIHVzaW5nIHNlbGVjdGlvbiBtb2RlIFwic2luZ2xlXCIgd2UgdXBkYXRlIHRoZSBjaGFuZ2UgdG8gcmVmbGVjdCB0aGUgc2luZ2xlIHNlbGVjdGlvbi5cbiAgaWYgKHNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgZnVuY3Rpb24gc2V0RnJvbUZpcnN0VmFsdWUoaW5wdXQ6IEl0ZXJhYmxlT3JWYWx1ZTxEYXRlQ2VsbFRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+KTogU2V0PERhdGVDZWxsVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD4ge1xuICAgICAgY29uc3QgZmlyc3RWYWx1ZSA9IGlzSXRlcmFibGUoaW5wdXQpID8gZmlyc3RWYWx1ZUZyb21JdGVyYWJsZShpbnB1dCkgOiBpbnB1dDtcbiAgICAgIGNvbnN0IHNldCA9IG5ldyBTZXQ8RGF0ZUNlbGxUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0PigpO1xuXG4gICAgICBpZiAoZmlyc3RWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIHNldC5hZGQoZmlyc3RWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZXQ7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZS5zZXQpIHtcbiAgICAgIGNoYW5nZSA9IHsgc2V0OiBzZXRGcm9tRmlyc3RWYWx1ZShjaGFuZ2Uuc2V0KSwgaW52ZXJ0U2V0QmVoYXZpb3I6IHRydWUgfTtcbiAgICB9IGVsc2UgaWYgKGNoYW5nZS50b2dnbGUpIHtcbiAgICAgIGNvbnN0IG5leHRTZXQgPSBzZXRGcm9tRmlyc3RWYWx1ZShjaGFuZ2UudG9nZ2xlKTtcblxuICAgICAgaWYgKG5leHRTZXQuc2l6ZSkge1xuICAgICAgICBjb25zdCBmaXJzdFNldFZhbHVlSW5kZXggPSBpbmRleEZhY3RvcnkoZmlyc3RWYWx1ZUZyb21JdGVyYWJsZShuZXh0U2V0KSBhcyBEYXRlQ2VsbFRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQpO1xuXG4gICAgICAgIGlmIChzdGF0ZS50b2dnbGVkSW5kZXhlcy5oYXMoZmlyc3RTZXRWYWx1ZUluZGV4KSB8fCAoaW5wdXRTdGFydCAmJiBpbmRleEZhY3RvcnkoaW5wdXRTdGFydCkgPT09IGZpcnN0U2V0VmFsdWVJbmRleCkpIHtcbiAgICAgICAgICBuZXh0U2V0LmNsZWFyKCk7IC8vIGNsZWFyIHdpdGggdGhlIG5leHQgc2V0XG4gICAgICAgIH1cblxuICAgICAgICBjaGFuZ2UgPSB7IHNldDogbmV4dFNldCwgaW52ZXJ0U2V0QmVoYXZpb3I6IHRydWUgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXQsIHNlbGVjdEFsbCwgYWRkLCBhbmQgcmVtb3ZlIGFyZSB0cmVhdGVkIGFzIHRoZXkgbm9ybWFsbHkgYXJlLlxuICB9XG5cbiAgaWYgKGNoYW5nZS5yZXNldCB8fCBjaGFuZ2Uuc2VsZWN0QWxsICE9IG51bGwgfHwgY2hhbmdlLnNldCAhPSBudWxsKSB7XG4gICAgbGV0IHNldDogTWF5YmU8SXRlcmFibGVPclZhbHVlPERhdGVDZWxsVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD4+ID0gY2hhbmdlLnNldCA/PyBbXTtcbiAgICBjb25zdCBzZWxlY3RBbGw6IE1heWJlPEFsbE9yTm9uZVNlbGVjdGlvbj4gPSBjaGFuZ2UucmVzZXQgPT09IHRydWUgPyBzdGF0ZS5pbml0aWFsU2VsZWN0aW9uU3RhdGUgOiBjaGFuZ2Uuc2VsZWN0QWxsO1xuXG4gICAgc3dpdGNoIChzZWxlY3RBbGwpIHtcbiAgICAgIGNhc2UgJ2FsbCc6XG4gICAgICAgIGlmIChtaW5EYXRlRnJvbUZpbHRlciAhPSBudWxsICYmIG1heERhdGVGcm9tRmlsdGVyICE9IG51bGwpIHtcbiAgICAgICAgICBpbnB1dFN0YXJ0ID0gbWluRGF0ZUZyb21GaWx0ZXI7XG4gICAgICAgICAgaW5wdXRFbmQgPSBtYXhEYXRlRnJvbUZpbHRlcjtcbiAgICAgICAgICBzZXQgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ25vbmUnOlxuICAgICAgICBpbnB1dFN0YXJ0ID0gbnVsbDtcbiAgICAgICAgaW5wdXRFbmQgPSBudWxsO1xuICAgICAgICBzZXQgPSBbXTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXRTZXRJbmRleGVzID0gYXNJbmRleGVzKHNldCk7XG4gICAgdG9nZ2xlZEluZGV4ZXMgPSBuZXcgU2V0KGlucHV0U2V0SW5kZXhlcyk7XG5cbiAgICBpZiAoY2hhbmdlLmludmVydFNldEJlaGF2aW9yICYmICFzZWxlY3RBbGwpIHtcbiAgICAgIGxldCBtaW5JbmRleDogTWF5YmU8bnVtYmVyPjtcbiAgICAgIGxldCBtYXhJbmRleDogTWF5YmU8bnVtYmVyPjtcblxuICAgICAgaWYgKG1pbkRhdGVGcm9tRmlsdGVyICE9IG51bGwgJiYgbWF4RGF0ZUZyb21GaWx0ZXIgIT0gbnVsbCkge1xuICAgICAgICAvLyBvbmx5IGFwcGxpY2FibGUgd2hlbiB0aGUgZmlsdGVyIGlzIHNldC5cbiAgICAgICAgbWluSW5kZXggPSBpbmRleEZhY3RvcnkobWluRGF0ZUZyb21GaWx0ZXIpO1xuICAgICAgICBtYXhJbmRleCA9IGluZGV4RmFjdG9yeShtYXhEYXRlRnJvbUZpbHRlcik7XG5cbiAgICAgICAgaW5wdXRTdGFydCA9IG1pbkRhdGVGcm9tRmlsdGVyO1xuICAgICAgICBpbnB1dEVuZCA9IG1heERhdGVGcm9tRmlsdGVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gd2hlbiB0aGUgZmlsdGVyIGlzIG5vdCBzZXQsIHVzZSB0aGUgbGVhc3QgYW5kIGdyZWF0ZXN0IGluZGV4ZXMgZnJvbSB0aGUgaW5wdXQgc2V0LlxuICAgICAgICBjb25zdCBtaW5BbmRNYXggPSBtaW5BbmRNYXhOdW1iZXIoaW5wdXRTZXRJbmRleGVzKTtcblxuICAgICAgICBpZiAobWluQW5kTWF4ICE9IG51bGwpIHtcbiAgICAgICAgICBtaW5JbmRleCA9IG1pbkFuZE1heC5taW47XG4gICAgICAgICAgbWF4SW5kZXggPSBtaW5BbmRNYXgubWF4O1xuICAgICAgICAgIGNvbnN0IGRhdGVGYWN0b3J5ID0gZGF0ZUNlbGxUaW1pbmdTdGFydERhdGVGYWN0b3J5KGluZGV4RmFjdG9yeS5fdGltaW5nKTtcblxuICAgICAgICAgIGlucHV0U3RhcnQgPSBkYXRlRmFjdG9yeShtaW5BbmRNYXgubWluKTtcbiAgICAgICAgICBpbnB1dEVuZCA9IG1pbkFuZE1heC5taW4gPT09IG1pbkFuZE1heC5tYXggPyBpbnB1dFN0YXJ0IDogZGF0ZUZhY3RvcnkobWluQW5kTWF4Lm1heCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZXF1aXZhbGVudCB0byBhbiBlbXB0eSBzZXQgLyB1c2luZyBcIm5vbmVcIiB3aXRoIHNlbGVjdEFsbC5cbiAgICAgICAgICBpbnB1dFN0YXJ0ID0gbnVsbDtcbiAgICAgICAgICBpbnB1dEVuZCA9IG51bGw7XG4gICAgICAgICAgdG9nZ2xlZEluZGV4ZXMgPSBuZXcgU2V0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gdG9nZ2xlZEluZGV4ZXMgc2hvdWxkIG5vdCBpbmNsdWRlIGFueSBpbmRleGVzIHdlIHdhbnQgdG8gaW5jbHVkZVxuICAgICAgaWYgKG1pbkluZGV4ICE9IG51bGwgJiYgbWF4SW5kZXggIT0gbnVsbCkge1xuICAgICAgICB0b2dnbGVkSW5kZXhlcyA9IG5ldyBTZXQocmFuZ2UobWluSW5kZXgsIG1heEluZGV4ICsgMSkuZmlsdGVyKCh4KSA9PiAhdG9nZ2xlZEluZGV4ZXMuaGFzKHgpKSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRvZ2dsZWRJbmRleGVzID0gbmV3IFNldChzdGF0ZS50b2dnbGVkSW5kZXhlcyk7IC8vIGNvcHkgdGhlIHNldFxuXG4gICAgaWYgKGNoYW5nZS50b2dnbGUpIHtcbiAgICAgIGNvbnN0IGFsbG93ZWRUb1RvZ2dsZSA9IGFzSW5kZXhlcyhjaGFuZ2UudG9nZ2xlKS5maWx0ZXIoKGkpID0+IGFsbG93ZWREYXlzT2ZXZWVrLmhhcyhpbmRleERheU9mV2VlayhpKSkpO1xuICAgICAgdG9nZ2xlSW5TZXQodG9nZ2xlZEluZGV4ZXMsIGFsbG93ZWRUb1RvZ2dsZSk7XG4gICAgfVxuXG4gICAgbGV0IGFkZFRvRXhjbHVzaW9uOiBNYXliZTxJdGVyYWJsZU9yVmFsdWU8RGF0ZUNlbGxUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0Pj47XG4gICAgbGV0IHJlbW92ZUZyb21FeGNsdXNpb246IE1heWJlPEl0ZXJhYmxlT3JWYWx1ZTxEYXRlQ2VsbFRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+PjtcblxuICAgIGlmIChjaGFuZ2UuYWRkKSB7XG4gICAgICBpZiAoY2hhbmdlLmludmVydFNldEJlaGF2aW9yKSB7XG4gICAgICAgIGFkZFRvRXhjbHVzaW9uID0gY2hhbmdlLmFkZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbW92ZUZyb21FeGNsdXNpb24gPSBjaGFuZ2UuYWRkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGFuZ2UucmVtb3ZlKSB7XG4gICAgICBpZiAoY2hhbmdlLmludmVydFNldEJlaGF2aW9yKSB7XG4gICAgICAgIHJlbW92ZUZyb21FeGNsdXNpb24gPSBjaGFuZ2UucmVtb3ZlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWRkVG9FeGNsdXNpb24gPSBjaGFuZ2UucmVtb3ZlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhZGRUb0V4Y2x1c2lvbikge1xuICAgICAgcmVtb3ZlRnJvbVNldCh0b2dnbGVkSW5kZXhlcywgYXNJbmRleGVzKGFkZFRvRXhjbHVzaW9uKSk7XG4gICAgfVxuXG4gICAgaWYgKHJlbW92ZUZyb21FeGNsdXNpb24pIHtcbiAgICAgIGFkZFRvU2V0KHRvZ2dsZWRJbmRleGVzLCBhc0luZGV4ZXMocmVtb3ZlRnJvbUV4Y2x1c2lvbikpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHsgLi4uc3RhdGUsIGlucHV0U3RhcnQsIGlucHV0RW5kLCB0b2dnbGVkSW5kZXhlcyB9O1xuICBuZXh0U3RhdGUuaXNFbmFibGVkRGF5ID0gaXNFbmFibGVkRGF5SW5DYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUobmV4dFN0YXRlKTtcblxuICAvLyBSZWNhbGN1bGF0ZSB0aGUgcmFuZ2UgYW5kIHNpbXBsaWZpZWQgdG8gZXhjbHVzaW9uc1xuICBjb25zdCByYW5nZUFuZEV4Y2x1c2lvbiA9IGNvbXB1dGVTY2hlZHVsZVNlbGVjdGlvblJhbmdlQW5kRXhjbHVzaW9uKG5leHRTdGF0ZSk7XG5cbiAgaWYgKHJhbmdlQW5kRXhjbHVzaW9uKSB7XG4gICAgcmV0dXJuIGZpbmFsaXplTmV3Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKHsgLi4ubmV4dFN0YXRlLCB0b2dnbGVkSW5kZXhlczogbmV3IFNldChyYW5nZUFuZEV4Y2x1c2lvbi5leGNsdWRlZCksIGlucHV0U3RhcnQ6IHJhbmdlQW5kRXhjbHVzaW9uLnN0YXJ0LCBpbnB1dEVuZDogcmFuZ2VBbmRFeGNsdXNpb24uZW5kIH0pO1xuICB9IGVsc2Uge1xuICAgIC8vIG5vIHNlbGVjdGVkIGRheXNcbiAgICByZXR1cm4gbm9TZWxlY3Rpb25DYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUobmV4dFN0YXRlKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9TZWxlY3Rpb25DYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSk6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIHJldHVybiBmaW5hbGl6ZU5ld0NhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSh7IC4uLnN0YXRlLCB0b2dnbGVkSW5kZXhlczogbmV3IFNldCgpLCBpbnB1dFN0YXJ0OiBudWxsLCBpbnB1dEVuZDogbnVsbCB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aENoYW5nZWRSYW5nZShzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCBjaGFuZ2U6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25JbnB1dERhdGVSYW5nZSk6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIGNvbnN0IHsgaW5wdXRTdGFydDogY3VycmVudElucHV0U3RhcnQsIGlucHV0RW5kOiBjdXJyZW50SW5wdXRFbmQsIGluZGV4RmFjdG9yeSB9ID0gc3RhdGU7XG4gIGNvbnN0IHsgc3RhcnQ6IG1pbkRhdGUsIGVuZDogbWF4RGF0ZSB9ID0gY2FsZW5kYXJTY2hlZHVsZU1pbkFuZE1heERhdGVSYW5nZShzdGF0ZSk7XG5cbiAgY29uc3QgaW5wdXRTdGFydDogRGF0ZSA9IHN0YXJ0T2ZEYXkoY2hhbmdlLmlucHV0U3RhcnQpO1xuICBjb25zdCBpbnB1dEVuZDogRGF0ZSA9IHN0YXJ0T2ZEYXkoY2hhbmdlLmlucHV0RW5kKTsgLy8gbWlkbmlnaHQgb2YgdGhlIGxhc3QgZGF5XG5cbiAgY29uc3QgaXNWYWxpZFJhbmdlID0gbWluRGF0ZSAhPSBudWxsIHx8IG1heERhdGUgIT0gbnVsbCA/IGlzRGF0ZUluRGF0ZVJhbmdlRnVuY3Rpb24oeyBzdGFydDogbWluRGF0ZSA/PyB1bmRlZmluZWQsIGVuZDogbWF4RGF0ZSA/PyB1bmRlZmluZWQgfSkgOiAoKSA9PiB0cnVlO1xuXG4gIGlmICghaXNWYWxpZFJhbmdlKGlucHV0U3RhcnQpIHx8ICFpc1ZhbGlkUmFuZ2UoaW5wdXRFbmQpIHx8IChpc1NhbWVEYXRlRGF5KGlucHV0U3RhcnQsIGN1cnJlbnRJbnB1dFN0YXJ0KSAmJiBpc1NhbWVEYXRlRGF5KGlucHV0RW5kLCBjdXJyZW50SW5wdXRFbmQpKSkge1xuICAgIHJldHVybiBzdGF0ZTsgLy8gaWYgbm8gY2hhbmdlLCByZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGUuXG4gIH1cblxuICAvLyByZXRhaW4gYWxsIGluZGV4ZXMgdGhhdCBhcmUgd2l0aGluIHRoZSBuZXcgcmFuZ2VcbiAgY29uc3QgbWluSW5kZXggPSBpbmRleEZhY3RvcnkoaW5wdXRTdGFydCk7XG4gIGNvbnN0IG1heEluZGV4ID0gaW5kZXhGYWN0b3J5KGlucHV0RW5kKSArIDE7XG5cbiAgY29uc3QgY3VycmVudEluZGV4ZXM6IERhdGVDZWxsSW5kZXhbXSA9IEFycmF5LmZyb20oc3RhdGUudG9nZ2xlZEluZGV4ZXMpO1xuICBjb25zdCBpc0luQ3VycmVudFJhbmdlID0gaXNJbmRleE51bWJlckluSW5kZXhSYW5nZUZ1bmN0aW9uKHsgbWluSW5kZXgsIG1heEluZGV4IH0pO1xuICBjb25zdCBleGNsdWRlZEluZGV4ZXNJbk5ld1JhbmdlID0gY3VycmVudEluZGV4ZXMuZmlsdGVyKGlzSW5DdXJyZW50UmFuZ2UpO1xuICBjb25zdCB0b2dnbGVkSW5kZXhlcyA9IG5ldyBTZXQoZXhjbHVkZWRJbmRleGVzSW5OZXdSYW5nZSk7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0geyAuLi5zdGF0ZSwgdG9nZ2xlZEluZGV4ZXMsIGlucHV0U3RhcnQsIGlucHV0RW5kIH07XG4gIHJldHVybiBmaW5hbGl6ZU5ld0NhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZShuZXh0U3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluYWxpemVOZXdDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUobmV4dFN0YXRlOiBCdWlsZGluZzxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGU+KTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgbmV4dFN0YXRlLmlzRW5hYmxlZERheSA9IGlzRW5hYmxlZERheUluQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKG5leHRTdGF0ZSBhcyBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUpO1xuICBuZXh0U3RhdGUuY3VycmVudFNlbGVjdGlvblZhbHVlID0gY29tcHV0ZVNjaGVkdWxlU2VsZWN0aW9uVmFsdWUobmV4dFN0YXRlIGFzIENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSk7XG4gIHJldHVybiBuZXh0U3RhdGUgYXMgQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbmFibGVkRGF5SW5DYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSk6IERlY2lzaW9uRnVuY3Rpb248RGF0ZUNlbGxUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0PiB7XG4gIGNvbnN0IHsgYWxsb3dlZERheXNPZldlZWssIGluZGV4RmFjdG9yeSwgaW5wdXRTdGFydCwgaW5wdXRFbmQsIGluZGV4RGF5T2ZXZWVrLCBzeXN0ZW1UaW1lem9uZSB9ID0gc3RhdGU7XG4gIGxldCBpc0luU3RhcnRBbmRFbmRSYW5nZTogSXNEYXRlV2l0aGluRGF0ZUNlbGxSYW5nZUZ1bmN0aW9uO1xuXG4gIGlmIChpbnB1dFN0YXJ0ICYmIGlucHV0RW5kKSB7XG4gICAgaXNJblN0YXJ0QW5kRW5kUmFuZ2UgPSBpc0RhdGVXaXRoaW5EYXRlQ2VsbFJhbmdlRnVuY3Rpb24oeyBzdGFydHNBdDogeyBzdGFydHNBdDogc3RhdGUuc3RhcnQsIHRpbWV6b25lOiBzeXN0ZW1UaW1lem9uZSB9LCByYW5nZTogeyBzdGFydDogaW5wdXRTdGFydCwgZW5kOiBpbnB1dEVuZCB9IH0pO1xuICB9IGVsc2Uge1xuICAgIGlzSW5TdGFydEFuZEVuZFJhbmdlID0gKCkgPT4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gKGlucHV0OiBEYXRlQ2VsbFRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQpID0+IHtcbiAgICBjb25zdCBpbmRleCA9IGluZGV4RmFjdG9yeShpbnB1dCk7XG4gICAgY29uc3QgZGF5T2ZXZWVrID0gaW5kZXhEYXlPZldlZWsoaW5kZXgpO1xuXG4gICAgY29uc3QgaXNJblNlbGVjdGVkUmFuZ2UgPSBpc0luU3RhcnRBbmRFbmRSYW5nZShpbmRleCk7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IHN0YXRlLnRvZ2dsZWRJbmRleGVzLmhhcyhpbmRleCk7XG4gICAgY29uc3QgaXNBbGxvd2VkRGF5T2ZXZWVrID0gYWxsb3dlZERheXNPZldlZWsuaGFzKGRheU9mV2Vlayk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBpc0FsbG93ZWREYXlPZldlZWsgJiYgKChpc0luU2VsZWN0ZWRSYW5nZSAmJiAhaXNTZWxlY3RlZCkgfHwgKGlzU2VsZWN0ZWQgJiYgIWlzSW5TZWxlY3RlZFJhbmdlKSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVTY2hlZHVsZVNlbGVjdGlvblZhbHVlKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUpOiBNYXliZTxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uVmFsdWU+IHtcbiAgY29uc3QgeyBpbmRleEZhY3Rvcnk6IHN5c3RlbUluZGV4RmFjdG9yeSwgYWxsb3dlZERheXNPZldlZWssIGVmZmVjdGl2ZVNjaGVkdWxlRGF5cywgaW5kZXhEYXlPZldlZWssIGNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyLCBmaWx0ZXIsIHN5c3RlbVRpbWV6b25lIH0gPSBzdGF0ZTtcbiAgbGV0IHRpbWV6b25lID0gc3lzdGVtVGltZXpvbmU7XG4gIGNvbnN0IHJhbmdlQW5kRXhjbHVzaW9uID0gY29tcHV0ZVNjaGVkdWxlU2VsZWN0aW9uUmFuZ2VBbmRFeGNsdXNpb24oc3RhdGUpO1xuXG4gIGlmIChyYW5nZUFuZEV4Y2x1c2lvbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCB7IHN0YXJ0OiByYW5nZVN0YXJ0LCBlbmQ6IHJhbmdlRW5kLCBleGNsdWRlZDogYWxsRXhjbHVkZWQsIGRhdGVDZWxsUmFuZ2UgfSA9IHJhbmdlQW5kRXhjbHVzaW9uO1xuICBsZXQgZmlsdGVyT2Zmc2V0RXhjbHVkZWRSYW5nZTogRGF0ZUNlbGxJbmRleFtdID0gW107XG4gIGxldCBpbmRleE9mZnNldCA9IGRhdGVDZWxsUmFuZ2UuaTtcblxuICBsZXQgc3RhcnQgPSByYW5nZVN0YXJ0O1xuICBsZXQgZW5kID0gcmFuZ2VFbmQ7XG5cbiAgLy8gSWYgY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIgaXMgdHJ1ZSwgdGhlbiB3ZSBuZWVkIHRvIG9mZnNldCB0aGUgdmFsdWVzIHRvIGJlIHJlbGF0aXZlIHRvIHRoYXQgc3RhcnQuXG4gIGlmIChjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlciAmJiBmaWx0ZXI/LnN0YXJ0KSB7XG4gICAgc3RhcnQgPSBmaWx0ZXIuc3RhcnQ7IC8vIGFsd2F5cyBzdGFydCBhdCB0aGUgZmlsdGVyJ3Mgc3RhcnQgZGF0ZVxuICAgIGxldCBzdGFydEluU3lzdGVtVGltZXpvbmUgPSBzdGFydDtcblxuICAgIGlmIChmaWx0ZXIudGltZXpvbmUpIHtcbiAgICAgIHRpbWV6b25lID0gZmlsdGVyLnRpbWV6b25lO1xuICAgICAgY29uc3QgZmlsdGVyTm9ybWFsID0gZGF0ZVRpbWV6b25lVXRjTm9ybWFsKHRpbWV6b25lKTtcbiAgICAgIGVuZCA9IGZpbHRlck5vcm1hbC5zdGFydE9mRGF5SW5UYXJnZXRUaW1lem9uZShlbmQpO1xuICAgICAgc3RhcnRJblN5c3RlbVRpbWV6b25lID0gZmlsdGVyTm9ybWFsLnN5c3RlbURhdGVUb1RhcmdldERhdGUoc3RhcnQpOyAvLyBjb252ZXJ0IHRoZSBzdGFydCB0byB0aGUgc3lzdGVtIHRpbWV6b25lIG5vcm1hbCBmb3IgZGVyaXZpbmcgdGhlIGluZGV4XG4gICAgfVxuXG4gICAgY29uc3QgcmFuZ2VTdGFydEluZGV4ID0gc3lzdGVtSW5kZXhGYWN0b3J5KHJhbmdlU3RhcnQpO1xuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBzeXN0ZW1JbmRleEZhY3Rvcnkoc3RhcnRJblN5c3RlbVRpbWV6b25lKTtcbiAgICBjb25zdCBmaWx0ZXJTdGFydEluZGV4T2Zmc2V0ID0gcmFuZ2VTdGFydEluZGV4IC0gc3RhcnRJbmRleDtcbiAgICBmaWx0ZXJPZmZzZXRFeGNsdWRlZFJhbmdlID0gcmFuZ2UoMCwgZmlsdGVyU3RhcnRJbmRleE9mZnNldCk7XG4gICAgaW5kZXhPZmZzZXQgPSBpbmRleE9mZnNldCAtIGZpbHRlclN0YXJ0SW5kZXhPZmZzZXQ7XG4gIH1cblxuICBjb25zdCBleGNsdWRlZCA9IGNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyXG4gICAgPyBhbGxFeGNsdWRlZC5maWx0ZXIoKHgpID0+IHtcbiAgICAgICAgY29uc3QgaXNFeGNsdWRlZEluZGV4ID0gYWxsb3dlZERheXNPZldlZWsuaGFzKGluZGV4RGF5T2ZXZWVrKHgpKTsgLy8gPz8/XG4gICAgICAgIHJldHVybiBpc0V4Y2x1ZGVkSW5kZXg7XG4gICAgICB9KVxuICAgIDogYWxsRXhjbHVkZWQ7XG5cbiAgY29uc3Qgb2Zmc2V0RXhjbHVkZWQ6IERhdGVDZWxsSW5kZXhbXSA9IGV4Y2x1ZGVkLm1hcCgoeCkgPT4geCAtIGluZGV4T2Zmc2V0KTsgLy8gc2V0IHRvIHRoZSBwcm9wZXIgb2Zmc2V0XG5cbiAgY29uc3QgZXggPSBbLi4uZmlsdGVyT2Zmc2V0RXhjbHVkZWRSYW5nZSwgLi4ub2Zmc2V0RXhjbHVkZWRdO1xuXG4gIGNvbnN0IHc6IERhdGVDZWxsU2NoZWR1bGVFbmNvZGVkV2VlayA9IGRhdGVDZWxsU2NoZWR1bGVFbmNvZGVkV2VlayhlZmZlY3RpdmVTY2hlZHVsZURheXMpO1xuICBjb25zdCBkOiBEYXRlQ2VsbEluZGV4W10gPSBbXTsgLy8gXCJpbmNsdWRlZFwiIGJsb2NrcyBhcmUgbmV2ZXIgdXNlZC9jYWxjdWxhdGVkLlxuXG4gIC8vIEFsd2F5cyBlbnN1cmUgdGhlIGVuZCBpcyBhZnRlciBvciBlcXVhbCB0byB0aGUgc3RhcnQuXG4gIGlmIChpc0JlZm9yZShlbmQsIHN0YXJ0KSkge1xuICAgIGVuZCA9IHN0YXJ0OyAvLyBlbmQgaXMgc3RhcnRcbiAgfVxuXG4gIGNvbnN0IGRhdGVTY2hlZHVsZVJhbmdlOiBEYXRlQ2VsbFNjaGVkdWxlRGF0ZVJhbmdlID0ge1xuICAgIHRpbWV6b25lLFxuICAgIHN0YXJ0LFxuICAgIGVuZCxcbiAgICB3LFxuICAgIGQsXG4gICAgZXhcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGRhdGVTY2hlZHVsZVJhbmdlLFxuICAgIG1pbk1heFJhbmdlOiB7IHN0YXJ0LCBlbmQgfVxuICB9O1xufVxuXG4vKipcbiAqIFRoZSBzZWxlY3RlZCBkYXRlIHJhbmdlIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjZWxsIHJhbmdlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25SYW5nZUFuZEV4Y2x1c2lvbiBleHRlbmRzIERhdGVSYW5nZSB7XG4gIC8qKlxuICAgKiBDb3JyZXNwb25kcyB0byB0aGUgc3RhcnQgYW5kIGVuZCBpbmRleGVzIGluIHRoZSBkYXRlIHJhbmdlLlxuICAgKi9cbiAgZGF0ZUNlbGxSYW5nZTogRGF0ZUNlbGxSYW5nZVdpdGhSYW5nZTtcbiAgLyoqXG4gICAqIEFsbCBleGNsdWRlZCBpbmRleGVzLlxuICAgKi9cbiAgZXhjbHVkZWQ6IERhdGVDZWxsSW5kZXhbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVTY2hlZHVsZVNlbGVjdGlvblJhbmdlQW5kRXhjbHVzaW9uKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUpOiBNYXliZTxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uUmFuZ2VBbmRFeGNsdXNpb24+IHtcbiAgY29uc3QgeyBzdGFydDogY3VycmVudFN0YXJ0LCBpc0VuYWJsZWREYXksIGlzRW5hYmxlZEZpbHRlckRheSwgc3lzdGVtVGltZXpvbmUgfSA9IHN0YXRlO1xuXG4gIGNvbnN0IGRhdGVGYWN0b3J5ID0gZGF0ZUNlbGxUaW1pbmdTdGFydERhdGVGYWN0b3J5KHsgc3RhcnRzQXQ6IGN1cnJlbnRTdGFydCwgdGltZXpvbmU6IHN5c3RlbVRpbWV6b25lIH0pO1xuICBjb25zdCBkYXRlQ2VsbFJhbmdlID0gY29tcHV0ZUNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25EYXRlQ2VsbFJhbmdlKHN0YXRlKTtcblxuICBpZiAoZGF0ZUNlbGxSYW5nZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7IC8vIHJldHVybnMgbnVsbCBpZiBubyBpdGVtcyBhcmUgc2VsZWN0ZWQuXG4gIH1cblxuICBjb25zdCBzdGFydCA9IGRhdGVGYWN0b3J5KGRhdGVDZWxsUmFuZ2UuaSk7XG4gIGNvbnN0IGVuZCA9IGRhdGVGYWN0b3J5KGRhdGVDZWxsUmFuZ2UudG8pO1xuXG4gIGNvbnN0IGV4Y2x1ZGVkOiBEYXRlQ2VsbEluZGV4W10gPSByYW5nZShkYXRlQ2VsbFJhbmdlLmksIGRhdGVDZWxsUmFuZ2UudG8gKyAxKS5maWx0ZXIoKHgpID0+IHtcbiAgICBjb25zdCBpc0V4Y2x1ZGVkSW5kZXggPSAhaXNFbmFibGVkRGF5KHgpIHx8ICFpc0VuYWJsZWRGaWx0ZXJEYXkoeCk7XG4gICAgcmV0dXJuIGlzRXhjbHVkZWRJbmRleDtcbiAgfSk7XG5cbiAgY29uc3QgcmVzdWx0OiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uUmFuZ2VBbmRFeGNsdXNpb24gPSB7XG4gICAgZGF0ZUNlbGxSYW5nZSxcbiAgICBzdGFydCxcbiAgICBlbmQsXG4gICAgZXhjbHVkZWRcbiAgfTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25SYW5nZShzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKTogTWF5YmU8RGF0ZVJhbmdlPiB7XG4gIGNvbnN0IGRhdGVGYWN0b3J5ID0gZGF0ZUNlbGxUaW1pbmdEYXRlRmFjdG9yeSh7IHN0YXJ0c0F0OiBzdGF0ZS5zdGFydCwgdGltZXpvbmU6IHN0YXRlLnN5c3RlbVRpbWV6b25lIH0pO1xuICBjb25zdCBkYXRlQ2VsbFJhbmdlID0gY29tcHV0ZUNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25EYXRlQ2VsbFJhbmdlKHN0YXRlKTtcbiAgY29uc3QgZGF0ZVJhbmdlOiBNYXliZTxEYXRlUmFuZ2U+ID0gZGF0ZUNlbGxSYW5nZSAhPSBudWxsID8geyBzdGFydDogZGF0ZUZhY3RvcnkoZGF0ZUNlbGxSYW5nZS5pKSwgZW5kOiBkYXRlRmFjdG9yeShkYXRlQ2VsbFJhbmdlLnRvIGFzIG51bWJlcikgfSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIGRhdGVSYW5nZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uRGF0ZUNlbGxSYW5nZShzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKTogTWF5YmU8RGF0ZUNlbGxSYW5nZVdpdGhSYW5nZT4ge1xuICBjb25zdCB7IGFsbG93ZWREYXlzT2ZXZWVrLCBpbmRleEZhY3RvcnksIGlucHV0U3RhcnQsIGlucHV0RW5kLCBpbmRleERheU9mV2VlaywgaXNFbmFibGVkRGF5LCBpc0VuYWJsZWRGaWx0ZXJEYXkgfSA9IHN0YXRlO1xuICBjb25zdCBlbmFibGVkRXhjbHVzaW9uSW5kZXhlcyA9IEFycmF5LmZyb20oc3RhdGUudG9nZ2xlZEluZGV4ZXMpLmZpbHRlcigoaSkgPT4gYWxsb3dlZERheXNPZldlZWsuaGFzKGluZGV4RGF5T2ZXZWVrKGkpKSk7XG4gIGNvbnN0IG1pbkFuZE1heFNlbGVjdGVkVmFsdWVzID0gbWluQW5kTWF4TnVtYmVyKGVuYWJsZWRFeGNsdXNpb25JbmRleGVzKTtcblxuICBsZXQgc3RhcnRSYW5nZTogTWF5YmU8RGF0ZUNlbGxJbmRleD47XG4gIGxldCBlbmRSYW5nZTogTWF5YmU8RGF0ZUNlbGxJbmRleD47XG5cbiAgaWYgKG1pbkFuZE1heFNlbGVjdGVkVmFsdWVzKSB7XG4gICAgc3RhcnRSYW5nZSA9IG1pbkFuZE1heFNlbGVjdGVkVmFsdWVzLm1pbjtcbiAgICBlbmRSYW5nZSA9IG1pbkFuZE1heFNlbGVjdGVkVmFsdWVzLm1heDtcbiAgfVxuXG4gIGlmIChpbnB1dFN0YXJ0ICE9IG51bGwgJiYgaW5wdXRFbmQgIT0gbnVsbCkge1xuICAgIGNvbnN0IGlucHV0U3RhcnRJbmRleCA9IGluZGV4RmFjdG9yeShpbnB1dFN0YXJ0KTtcbiAgICBjb25zdCBpbnB1dEVuZEluZGV4ID0gaW5kZXhGYWN0b3J5KGlucHV0RW5kKTtcblxuICAgIHN0YXJ0UmFuZ2UgPSBzdGFydFJhbmdlICE9IG51bGwgPyBNYXRoLm1pbihpbnB1dFN0YXJ0SW5kZXgsIHN0YXJ0UmFuZ2UpIDogaW5wdXRTdGFydEluZGV4O1xuICAgIGVuZFJhbmdlID0gZW5kUmFuZ2UgIT0gbnVsbCA/IE1hdGgubWF4KGlucHV0RW5kSW5kZXgsIGVuZFJhbmdlKSA6IGlucHV0RW5kSW5kZXg7XG4gIH1cblxuICBpZiAoc3RhcnRSYW5nZSAhPSBudWxsICYmIGVuZFJhbmdlICE9IG51bGwpIHtcbiAgICBjb25zdCBzY2FuU3RhcnRJbmRleCA9IHN0YXJ0UmFuZ2U7XG4gICAgY29uc3Qgc2NhbkVuZEluZGV4ID0gZW5kUmFuZ2U7XG5cbiAgICAvLyBjbGVhciBzdGFydCBhbmQgZW5kXG4gICAgc3RhcnRSYW5nZSA9IHVuZGVmaW5lZDtcbiAgICBlbmRSYW5nZSA9IHVuZGVmaW5lZDtcblxuICAgIC8vIGlmIHRoZSBtaW4gaXMgZXF1YWwgdG8gdGhlIHN0YXJ0IGluZGV4LCB0aGVuIHdlIGFyZSBpbiB0aGUgcmFuZ2UgYW5kIG5lZWQgdG8gaXRlcmF0ZSBkYXRlcyB1bnRpbCB3ZSBmaW5kIG9uZSB0aGF0IGlzIG5vdCBzZWxlY3RlZC9leGNsdWRlZC5cbiAgICBmb3IgKGxldCBpID0gc2NhblN0YXJ0SW5kZXg7IGkgPD0gc2NhbkVuZEluZGV4OyBpICs9IDEpIHtcbiAgICAgIGlmIChpc0VuYWJsZWRGaWx0ZXJEYXkoaSkgJiYgaXNFbmFibGVkRGF5KGkpKSB7XG4gICAgICAgIHN0YXJ0UmFuZ2UgPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzYW1lIHdpdGggdGhlIG1heFxuICAgIGZvciAobGV0IGkgPSBzY2FuRW5kSW5kZXg7IGkgPj0gc2NhblN0YXJ0SW5kZXg7IGkgLT0gMSkge1xuICAgICAgaWYgKGlzRW5hYmxlZEZpbHRlckRheShpKSAmJiBpc0VuYWJsZWREYXkoaSkpIHtcbiAgICAgICAgZW5kUmFuZ2UgPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoc3RhcnRSYW5nZSAhPSBudWxsICYmIGVuZFJhbmdlICE9IG51bGwpIHtcbiAgICByZXR1cm4geyBpOiBzdGFydFJhbmdlLCB0bzogZW5kUmFuZ2UgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
|