@norwegian/core-components 6.0.3 → 6.2.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/esm2022/lib/components/accordion/accordion.component.mjs +17 -12
- package/esm2022/lib/components/airport-select/airport-select-dropdown/airport-select-dropdown.component.mjs +1 -1
- package/esm2022/lib/components/airport-select/airport-select.component.mjs +13 -1
- package/esm2022/lib/components/autocomplete/autocomplete.component.mjs +7 -1
- package/esm2022/lib/components/backdrop/backdrop.component.mjs +3 -1
- package/esm2022/lib/components/box/box.component.mjs +4 -4
- package/esm2022/lib/components/button/button.component.mjs +5 -1
- package/esm2022/lib/components/checkbox/checkbox.component.mjs +3 -1
- package/esm2022/lib/components/chip/chip.component.mjs +2 -7
- package/esm2022/lib/components/container/container.component.mjs +1 -1
- package/esm2022/lib/components/continue/continue.component.mjs +6 -1
- package/esm2022/lib/components/cover/cover.component.mjs +1 -1
- package/esm2022/lib/components/datepicker/calendar/calendar.component.mjs +1 -1
- package/esm2022/lib/components/datepicker/datepicker.component.mjs +16 -1
- package/esm2022/lib/components/datepicker-combo/datepicker-combo.component.mjs +17 -1
- package/esm2022/lib/components/divider/divider.component.mjs +1 -1
- package/esm2022/lib/components/dropdown/dropdown.component.mjs +2 -1
- package/esm2022/lib/components/filter/filter.component.mjs +36 -2
- package/esm2022/lib/components/grid/grid.component.mjs +1 -1
- package/esm2022/lib/components/icon/icon.component.mjs +1 -1
- package/esm2022/lib/components/icon-list/icon-list.component.mjs +1 -1
- package/esm2022/lib/components/icon-list/icon-list.model.mjs +1 -1
- package/esm2022/lib/components/info/info.component.mjs +5 -4
- package/esm2022/lib/components/input/input.component.mjs +6 -1
- package/esm2022/lib/components/journey/journey.component.mjs +5 -7
- package/esm2022/lib/components/journey-availability/journey-availability.component.mjs +7 -5
- package/esm2022/lib/components/journey-availability-list/journey-availability-list.component.mjs +22 -25
- package/esm2022/lib/components/journey-selection/journey-selection.component.mjs +12 -4
- package/esm2022/lib/components/journey-stopover/journey-stopover.component.mjs +18 -20
- package/esm2022/lib/components/list/list.component.mjs +1 -1
- package/esm2022/lib/components/modal/modal.component.mjs +5 -7
- package/esm2022/lib/components/number-field/number-field.component.mjs +4 -2
- package/esm2022/lib/components/page-footer/page-footer.component.mjs +2 -4
- package/esm2022/lib/components/page-header/page-header.component.mjs +30 -12
- package/esm2022/lib/components/page-header/page-header.module.mjs +5 -4
- package/esm2022/lib/components/passenger-select/models/passengers.model.mjs +1 -1
- package/esm2022/lib/components/passenger-select/passenger-select.component.mjs +11 -7
- package/esm2022/lib/components/phone-number/phone-number.component.mjs +11 -15
- package/esm2022/lib/components/premium-toggle/premium-toggle.component.mjs +3 -4
- package/esm2022/lib/components/radio/radio.component.mjs +4 -2
- package/esm2022/lib/components/select/select.component.mjs +11 -7
- package/esm2022/lib/components/simple-list/simple-list.component.mjs +1 -1
- package/esm2022/lib/components/slide-toggle/slide-toggle.component.mjs +9 -5
- package/esm2022/lib/components/slider/slider.component.mjs +32 -18
- package/esm2022/lib/components/sort/sort.component.mjs +11 -7
- package/esm2022/lib/components/spinner/spinner.component.mjs +13 -18
- package/esm2022/lib/components/subsidy-discount/subsidy-discount.component.mjs +13 -7
- package/esm2022/lib/components/suggestions/suggestions.component.mjs +3 -2
- package/esm2022/lib/components/tab-group/tab-group.component.mjs +3 -2
- package/esm2022/lib/components/table/table.component.mjs +1 -3
- package/esm2022/lib/components/textarea/textarea.component.mjs +6 -1
- package/esm2022/lib/components/toggle/toggle.component.mjs +5 -5
- package/esm2022/lib/components/trip-summary/trip-summary.component.mjs +26 -31
- package/esm2022/lib/components/weather-icon/weather-icon.component.mjs +3 -2
- package/fesm2022/norwegian-core-components.mjs +371 -221
- package/fesm2022/norwegian-core-components.mjs.map +1 -1
- package/lib/components/accordion/accordion.component.d.ts +81 -78
- package/lib/components/airport-select/airport-select-dropdown/airport-select-dropdown.component.d.ts +2 -2
- package/lib/components/airport-select/airport-select.component.d.ts +38 -2
- package/lib/components/autocomplete/autocomplete.component.d.ts +15 -2
- package/lib/components/backdrop/backdrop.component.d.ts +3 -0
- package/lib/components/box/box.component.d.ts +13 -3
- package/lib/components/button/button.component.d.ts +26 -0
- package/lib/components/checkbox/checkbox.component.d.ts +18 -2
- package/lib/components/chip/chip.component.d.ts +5 -21
- package/lib/components/container/container.component.d.ts +6 -0
- package/lib/components/continue/continue.component.d.ts +14 -0
- package/lib/components/cover/cover.component.d.ts +13 -3
- package/lib/components/datepicker/calendar/calendar.component.d.ts +2 -2
- package/lib/components/datepicker/datepicker.component.d.ts +33 -2
- package/lib/components/datepicker-combo/datepicker-combo.component.d.ts +42 -0
- package/lib/components/divider/divider.component.d.ts +9 -0
- package/lib/components/dropdown/dropdown.component.d.ts +8 -0
- package/lib/components/filter/filter.component.d.ts +108 -2
- package/lib/components/grid/grid.component.d.ts +12 -0
- package/lib/components/icon/icon.component.d.ts +5 -8
- package/lib/components/icon-list/icon-list.component.d.ts +5 -0
- package/lib/components/icon-list/icon-list.model.d.ts +1 -0
- package/lib/components/info/info.component.d.ts +7 -18
- package/lib/components/input/input.component.d.ts +30 -5
- package/lib/components/journey/journey.component.d.ts +9 -16
- package/lib/components/journey-availability/journey-availability.component.d.ts +8 -8
- package/lib/components/journey-availability-list/journey-availability-list.component.d.ts +29 -34
- package/lib/components/journey-selection/journey-selection.component.d.ts +14 -3
- package/lib/components/journey-stopover/journey-stopover.component.d.ts +35 -43
- package/lib/components/list/list.component.d.ts +8 -0
- package/lib/components/modal/modal.component.d.ts +16 -34
- package/lib/components/number-field/number-field.component.d.ts +26 -12
- package/lib/components/page-footer/page-footer.component.d.ts +9 -16
- package/lib/components/page-header/page-header.component.d.ts +30 -15
- package/lib/components/page-header/page-header.module.d.ts +2 -1
- package/lib/components/passenger-select/models/passengers.model.d.ts +2 -2
- package/lib/components/passenger-select/passenger-select.component.d.ts +33 -18
- package/lib/components/phone-number/phone-number.component.d.ts +80 -108
- package/lib/components/premium-toggle/premium-toggle.component.d.ts +9 -13
- package/lib/components/radio/radio.component.d.ts +35 -18
- package/lib/components/select/select.component.d.ts +47 -29
- package/lib/components/simple-list/simple-list.component.d.ts +16 -8
- package/lib/components/slide-toggle/slide-toggle.component.d.ts +16 -9
- package/lib/components/slider/slider.component.d.ts +51 -28
- package/lib/components/sort/sort.component.d.ts +12 -7
- package/lib/components/spinner/spinner.component.d.ts +24 -37
- package/lib/components/subsidy-discount/subsidy-discount.component.d.ts +14 -7
- package/lib/components/suggestions/suggestions.component.d.ts +6 -3
- package/lib/components/tab-group/tab-group.component.d.ts +6 -3
- package/lib/components/table/table.component.d.ts +3 -8
- package/lib/components/textarea/textarea.component.d.ts +42 -20
- package/lib/components/toggle/toggle.component.d.ts +44 -68
- package/lib/components/trip-summary/trip-summary.component.d.ts +68 -82
- package/lib/components/weather-icon/weather-icon.component.d.ts +12 -6
- package/package.json +3 -3
|
@@ -580,4 +580,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.5", ngImpor
|
|
|
580
580
|
}], activeDateChange: [{
|
|
581
581
|
type: Output
|
|
582
582
|
}], onPreviousMonthKeydown: [], onNextMonthKeydown: [], onNextMonthMousedown: [], onPreviousMonthMousedown: [] } });
|
|
583
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9kYXRlcGlja2VyL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBS0EsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUVsQixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFekUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBSTlELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7Ozs7Ozs7QUFRdkUsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGdCQUFnQjtJQStCckQ7OztPQUdHO0lBQ0gsSUFDSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7SUFDRCxJQUFJLGNBQWMsQ0FBQyxJQUFhO1FBQzlCLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBRWhDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7WUFD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LGlCQUFpQixDQUFDLElBQUk7c0pBUU4sZ0JBQWdCO3NCQUE5QyxTQUFTO3VCQUFDLGtCQUFrQjtnQkFDRixZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ0csVUFBVTtzQkFBckMsWUFBWTt1QkFBQyxZQUFZO2dCQUNFLFdBQVc7c0JBQXRDLFlBQVk7dUJBQUMsWUFBWTtnQkFDSSxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFDRixjQUFjO3NCQUF2QyxTQUFTO3VCQUFDLGFBQWE7Z0JBTWYsdUJBQXVCO3NCQUEvQixLQUFLO2dCQU1HLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFNRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBT0YsY0FBYztzQkFEakIsS0FBSztnQkE0QkcsSUFBSTtzQkFBWixLQUFLO2dCQU1HLFNBQVM7c0JBQWpCLEtBQUs7Z0JBTUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQU1HLFlBQVk7c0JBQXBCLEtBQUs7Z0JBT0csTUFBTTtzQkFBZCxLQUFLO2dCQU9GLGNBQWM7c0JBRGpCLEtBQUs7Z0JBNkNGLFVBQVU7c0JBRGIsS0FBSztnQkEyQ0YsWUFBWTtzQkFEZixLQUFLO2dCQXFCRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFNSSxXQUFXO3NCQUFwQixNQUFNO2dCQU1HLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFNRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBTUcsZ0JBQWdCO3NCQUF6QixNQUFNO2dCQXlKUCxzQkFBc0IsTUE0QnRCLGtCQUFrQixNQTBCbEIsb0JBQW9CLE1BS3BCLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBOb3J3ZWdpYW4gQWlyIFNodXR0bGUuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgUXVlcnlMaXN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENhbGVuZGFyRGF0ZU1vZGVsIH0gZnJvbSAnLi9jYWxlbmRhci1kYXRlLm1vZGVsJztcbmltcG9ydCB7IFdlZWtTdGFydCB9IGZyb20gJy4vZW51bXMvd2Vlay1zdGFydC5lbnVtJztcbmltcG9ydCB7IERheU1vZGVsIH0gZnJvbSAnLi9tb2RlbHMvZGF5Lm1vZGVsJztcbmltcG9ydCB7IFNlbGVjdE9wdGlvbk1vZGVsIH0gZnJvbSAnLi9tb2RlbHMvc2VsZWN0LW9wdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBXZWVrTW9kZWwgfSBmcm9tICcuL21vZGVscy93ZWVrLm1vZGVsJztcbmltcG9ydCB7IE5hc0NvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2Jhc2UvbmFzLWNvbXBvbmVudC5iYXNlJztcbmltcG9ydCB7IENsYXNzTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9jbGFzcy5tb2RlbCc7XG5pbXBvcnQgeyBVdGNEYXRlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvdXRjLWRhdGUubW9kZWwnO1xuaW1wb3J0IHsgRGF0ZUhlbHBlciB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvZGF0ZS9kYXRlLWhlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7IENhbGVuZGFyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NhbGVuZGFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGVib3VuY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2RlY29yYXRvcnMvZGVib3VuY2UuZGVjb3JhdG9yJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmFzLWNhbGVuZGFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FsZW5kYXIuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBDYWxlbmRhckNvbXBvbmVudCBleHRlbmRzIE5hc0NvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQge1xuICB3ZWVrczogQXJyYXk8V2Vla01vZGVsPjtcbiAgbW9udGhzID0gbmV3IEFycmF5PFNlbGVjdE9wdGlvbk1vZGVsPigpO1xuICB3ZWVrZGF5cyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIGlzUHJldmlvdXNNb250aERpc2FibGVkOiBib29sZWFuO1xuXG4gIEBWaWV3Q2hpbGQoJ3ByZXZpb3VzTW9udGhSZWYnKSBwcmV2aW91c01vbnRoUmVmOiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnbmV4dE1vbnRoUmVmJykgbmV4dE1vbnRoUmVmOiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcbiAgQFZpZXdDaGlsZHJlbigndGFibGVDZWxscycpIHRhYmxlQ2VsbHM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgQFZpZXdDaGlsZHJlbignZGF0ZUJ1dHRvbicpIGRhdGVCdXR0b25zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG4gIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyQ29udGVudCcpIGNhbGVuZGFyQ29udGVudDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnbW9udGhTZWxlY3QnKSBtb250aFNlbGVjdFJlZjogU2VsZWN0Q29tcG9uZW50O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yIG5vIGF2YWlsYWJsZSBmbGlnaHRzLlxuICAgKi9cbiAgQElucHV0KCkgbm9BdmFpbGFibGVGbGlnaHRzTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciBhdmFpbGFibGUgZmxpZ2h0cy5cbiAgICovXG4gIEBJbnB1dCgpIGF2YWlsYWJsZUZsaWdodHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGlzYWJsZSBwb3NzaWJpbGl0eSB0byBzZWxlY3QgZGF0ZXMgaW4gdGhlIHBhc3QuXG4gICAqL1xuICBASW5wdXQoKSBkaXNhYmxlUGFzdFNlbGVjdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgbG93ZXN0IGRhdGUgYWxsb3dlZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBsb3dlckxpbWl0RGF0ZSgpOiBVdGNEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5sb3dlckxpbWl0RGF0ZVZhbHVlO1xuICB9XG4gIHNldCBsb3dlckxpbWl0RGF0ZShkYXRlOiBVdGNEYXRlKSB7XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb3dlckxpbWl0RGF0ZVZhbHVlID0gZGF0ZTtcblxuICAgIGlmICghdGhpcy5zZWxlY3RlZERhdGUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlVmFsdWUgPSB0aGlzLmxvd2VyTGltaXREYXRlVmFsdWU7XG4gICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLmxvd2VyTGltaXREYXRlVmFsdWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkRGF0ZSAmJiB0aGlzLmRhdGVTZXJ2aWNlLmlzR3JlYXRlclRoYW4oZGF0ZSwgdGhpcy5zZWxlY3RlZERhdGUsIGZhbHNlLCB0cnVlLCB0cnVlKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZERhdGVWYWx1ZSA9IHRoaXMubG93ZXJMaW1pdERhdGVWYWx1ZTtcbiAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMubG93ZXJMaW1pdERhdGVWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aXZlRGF0ZSAmJiB0aGlzLmRhdGVTZXJ2aWNlLmlzR3JlYXRlclRoYW4oZGF0ZSwgdGhpcy5hY3RpdmVEYXRlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSkpIHtcbiAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMubG93ZXJMaW1pdERhdGVWYWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmFwcGx5U2VsZWN0ZWREYXRlQ2hhbmdlcygpO1xuICB9XG5cbiAgLyoqXG4gICogQGRlc2NyaXB0aW9uXG4gICogQ3VycmVudCBtb250aCBkYXRlIHRvIGJlIGRpc3BsYXllZC4gSXQgd2lsbCB0YWtlIHByZWNlZGVuY2Ugb3ZlciBzZWxlY3RlZCBkYXRlIGlucHV0LCBpZiBpdCBpcyBzZXQuXG4gICovXG4gIEBJbnB1dCgpIGRhdGU6IFV0Y0RhdGU7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEZXNpZGVzIGlmIHRoZSB3ZWVrIHNob3VsZCBzdGFydCBvbiBhIG1vbmRheSBvciBzdW5kYXkuIERlZmF1bHRzIHRvIG1vbmRheS5cbiAgICovXG4gIEBJbnB1dCgpIHdlZWtTdGFydCA9IFdlZWtTdGFydC5tb25kYXk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEaXNwbGF5IHdlZWsgbnVtYmVycy5cbiAgICovXG4gIEBJbnB1dCgpIGRpc3BsYXlXZWVrTnVtYmVyczogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgdGhlIGRhdGVwaWNrZXIgaW4gYXZhaWxhYmlsaXR5IG1vZGUgd2hlcmUgYXZhaWxhYmxlIGRhdGVzIGNhbiBiZSBhZGRlZC5cbiAgICovXG4gIEBJbnB1dCgpIGF2YWlsYWJpbGl0eTogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbG9jYWxlIGNvZGUgZm9yIHRoZSBsb2NhbGUgZm9ybWF0IHJ1bGVzIHRvIHVzZS4gV2hlbiBub3Qgc3VwcGxpZWQsIHVzZXMgdGhlIHZhbHVlIG9mIExPQ0FMRV9JRCwgd2hpY2ggaXMgZW4tVVMgYnkgZGVmYXVsdC5cbiAgICogVGhpcyByZXF1aXJlcyB0aGF0IHJlZ2lzdGVyTG9jYWxlRGF0YSBpcyBjYWxsZWQgd2l0aCB0aGUgcmVzcGVjdGl2ZSBsb2NhbGUuXG4gICAqL1xuICBASW5wdXQoKSBsb2NhbGUgPSAnZW4tVVMnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gYXJyYXkgd2l0aCBhbGwgdGhlIGF2YWlsYWJsZSBkYXRlcyBvZiB0aGUgbW9udGggZm9yIHNlYXRzLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IGF2YWlsYWJsZURhdGVzKCk6IEFycmF5PFV0Y0RhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5hdmFpbGFibGVEYXRlc1ZhbHVlO1xuICB9XG4gIHNldCBhdmFpbGFibGVEYXRlcyhkYXRlczogQXJyYXk8VXRjRGF0ZT4pIHtcbiAgICBpZiAoIWRhdGVzIHx8ICF0aGlzLmV4aXN0cyh0aGlzLmF2YWlsYWJpbGl0eSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZGF0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmlyc3REYXRlID0gZGF0ZXNbMF07XG4gICAgICB0aGlzLmN1cnJlbnRNb250aCA9IGZpcnN0RGF0ZTtcbiAgICAgIHRoaXMuc2V0UHJldmlvdXNNb250aERpc2FibGVkKCk7XG4gICAgfVxuXG4gICAgdGhpcy5hdmFpbGFibGVEYXRlc1ZhbHVlID0gZGF0ZXM7XG5cbiAgICB0aGlzLmFwcGx5U2VsZWN0ZWREYXRlQ2hhbmdlcygpO1xuXG4gICAgaWYgKCF0aGlzLnNob3VsZEZvY3VzQ2FsZW5kYXJPbkF2YWlsYWJsZURhdGVzVXBkYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMubmV4dE1vbnRoUmVmLm5hdGl2ZUVsZW1lbnQgfHxcbiAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMucHJldmlvdXNNb250aFJlZi5uYXRpdmVFbGVtZW50IHx8XG4gICAgICB0aGlzLm1vbnRoU2VsZWN0UmVmICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMubW9udGhTZWxlY3RSZWYuc2VsZWN0Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGVsbWVtZW50VG9Gb2N1cyA9IHRoaXMuYWN0aXZlRGF0ZUNlbGw7XG5cbiAgICAgIGlmIChlbG1lbWVudFRvRm9jdXMpIHtcbiAgICAgICAgZWxtZW1lbnRUb0ZvY3VzLmZvY3VzKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2hvdWxkRm9jdXNDYWxlbmRhck9uQXZhaWxhYmxlRGF0ZXNVcGRhdGUgPSBmYWxzZTtcbiAgICB9LCAxMDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBHZXRzIG9yIHNldHMgdGhlIGFjdGl2ZSBkYXRlXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgYWN0aXZlRGF0ZSgpOiBVdGNEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVEYXRlVmFsdWU7XG4gIH1cbiAgc2V0IGFjdGl2ZURhdGUoZGF0ZTogVXRjRGF0ZSkge1xuICAgIGlmICghZGF0ZSB8fCB0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZURhdGUoZGF0ZSwgdGhpcy5hY3RpdmVEYXRlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jdXJyZW50TW9udGgpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoID0gZGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZGF0ZVNlcnZpY2UuaXNTYW1lTW9udGgoZGF0ZSwgdGhpcy5jdXJyZW50TW9udGgpKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb250aCA9IGRhdGU7XG5cbiAgICAgIHRoaXMuYXBwbHlTZWxlY3RlZERhdGVDaGFuZ2VzKCk7XG4gICAgICB0aGlzLm1vbnRoQ2hhbmdlLmVtaXQodGhpcy5jdXJyZW50TW9udGgpO1xuICAgICAgdGhpcy5zZXRQcmV2aW91c01vbnRoRGlzYWJsZWQoKTtcblxuICAgICAgY29uc3QgZWxtZW1lbnRUb0ZvY3VzID0gdGhpcy5hY3RpdmVEYXRlQ2VsbDtcbiAgICAgIGlmIChlbG1lbWVudFRvRm9jdXMpIHtcbiAgICAgICAgZWxtZW1lbnRUb0ZvY3VzLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMud2Vla3MpIHtcbiAgICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLnNldEFjdGl2ZURhdGUoZGF0ZSwgdGhpcy53ZWVrcyk7XG5cbiAgICAgIGZvciAoY29uc3QgZGF5IG9mIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmdldERheXModGhpcy53ZWVrcykpIHtcbiAgICAgICAgaWYgKCFkYXkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXkuaXNBY3RpdmUpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZURhdGVWYWx1ZSA9IGRhdGU7XG4gICAgICAgICAgdGhpcy5hY3RpdmVEYXRlQ2hhbmdlLmVtaXQoZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgc2VsZWN0ZWREYXRlKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRGF0ZVZhbHVlO1xuICB9XG4gIHNldCBzZWxlY3RlZERhdGUoZGF0ZTogVXRjRGF0ZSkge1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWREYXRlVmFsdWUgPSBkYXRlO1xuXG4gICAgaWYgKCF0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZU1vbnRoKGRhdGUsIHRoaXMuYWN0aXZlRGF0ZSlcbiAgICAgIHx8ICF0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZU1vbnRoKGRhdGUsIHRoaXMuY3VycmVudE1vbnRoKSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9udGggPSBkYXRlO1xuICAgICAgdGhpcy5hY3RpdmVEYXRlVmFsdWUgPSBkYXRlO1xuICAgICAgdGhpcy5hcHBseVNlbGVjdGVkRGF0ZUNoYW5nZXMoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFNlbGVjdGVkRGF0ZShkYXRlKTtcbiAgfVxuXG4gIEBJbnB1dCgpIG5hc0Zvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cDtcbiAgQElucHV0KCkgbmFzRm9ybUNvbnRyb2xOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRhdGVEaXNwbGF5Rm9ybWF0ID0gJ0VFRUUgZCwgTU1NTSB5eXl5JztcbiAgQElucHV0KCkgYXJpYUxhYmVsUHJldmlvdXNNb250aDogc3RyaW5nO1xuICBASW5wdXQoKSBhcmlhTGFiZWxOZXh0TW9udGg6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIE1vbnRoIHNlbGVjdGVkIGJ5IHRoZSB1c2VyIGJ5IGNsaWNraW5nIGluIGRyb3AgZG93biBmb3IgbW9udGggc2VsZWN0aW9uIG9yIG1vbnRoIG5hdmlnYXRpb24gYnV0dG9ucy5cbiAgICovXG4gIEBPdXRwdXQoKSBtb250aENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VXRjRGF0ZT4oKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdoZW4gYSB1c2VyIGhhcyBhY3RpdmVseSBjaGFuZ2VkIHRoZSBkYXRlLlxuICAgKi9cbiAgQE91dHB1dCgpIGZvY3VzT25OZXh0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxLZXlib2FyZEV2ZW50IHwgTW91c2VFdmVudCB8IG51bGw+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXaGVuIHNlbGVjdGVkIGRhdGUgaGFzIGJlZW4gY2hhbmdlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBzZWxlY3RlZERhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFV0Y0RhdGU+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXaGVuIGFjdGl2ZSBkYXRlIGhhcyBiZWVuIGNoYW5nZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgYWN0aXZlRGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VXRjRGF0ZT4oKTtcblxuICBnZXQgc2VsZWN0ZWRNb250aCgpOiBTZWxlY3RPcHRpb25Nb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRWYWx1ZTtcbiAgfVxuICBzZXQgc2VsZWN0ZWRNb250aChvcHRpb246IFNlbGVjdE9wdGlvbk1vZGVsKSB7XG4gICAgaWYgKCFvcHRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gb3B0aW9uO1xuICAgIGNvbnN0IG9wdGlvbkRhdGUgPSB0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUob3B0aW9uLnZhbHVlKTtcblxuICAgIGlmICghdGhpcy5kYXRlU2VydmljZS5pc1NhbWVNb250aChvcHRpb25EYXRlLCB0aGlzLmN1cnJlbnRNb250aCkpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoID0gb3B0aW9uRGF0ZTtcbiAgICAgIHRoaXMuYXBwbHlTZWxlY3RlZERhdGVDaGFuZ2VzKCk7XG4gICAgICB0aGlzLm1vbnRoQ2hhbmdlLmVtaXQodGhpcy5jdXJyZW50TW9udGgpO1xuICAgICAgdGhpcy5zZXRQcmV2aW91c01vbnRoRGlzYWJsZWQoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgbmV4dE1vbnRoRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbmV4dE1vbnRoSW5kZXggPSB0aGlzLmN1cnJlbnRNb250aFxuICAgICAgJiYgdGhpcy5kYXRlU2VydmljZS5nZXRVdGNOdW1iZXJPZk1vbnRoQmV0d2Vlbih0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUoKSwgdGhpcy5jdXJyZW50TW9udGgpO1xuXG4gICAgcmV0dXJuIChuZXh0TW9udGhJbmRleCArIDIpID49IHRoaXMubWF4TW9udGhJbmRleDtcbiAgfVxuXG4gIGdldCBjdXJyZW50TW9udGhNb2RlbCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5jdXJyZW50TW9udGgpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7dGhpcy5tb250aE5hbWVzW3RoaXMuY3VycmVudE1vbnRoLnRvRGF0ZSgpLmdldFVUQ01vbnRoKCldfSAtICR7dGhpcy5jdXJyZW50TW9udGgudG9EYXRlKCkuZ2V0VVRDRnVsbFllYXIoKX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBJcyBpbiB1c2UgYnkgRGF0ZXBpY2tlckNvbXBvbmVudFxuICAgKi9cbiAgZ2V0IGFjdGl2ZURhdGVDZWxsKCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm5hcy1jYWxlbmRhcl9faXRlbS0tYWN0aXZlJyk7XG4gIH1cblxuICBwcml2YXRlIG1heE1vbnRoSW5kZXggPSAxMztcbiAgcHJpdmF0ZSBhY3RpdmVEYXRlVmFsdWU6IFV0Y0RhdGU7XG4gIHByaXZhdGUgYXZhaWxhYmxlRGF0ZXNWYWx1ZTogQXJyYXk8VXRjRGF0ZT47XG4gIHByaXZhdGUgY3VycmVudE1vbnRoOiBVdGNEYXRlO1xuICBwcml2YXRlIHNlbGVjdGVkVmFsdWU6IFNlbGVjdE9wdGlvbk1vZGVsO1xuICBwcml2YXRlIGF2YWlsYWJsZURheXM6IEFycmF5PERheU1vZGVsPjtcbiAgcHJpdmF0ZSBtb250aE5hbWVzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBsb3dlckxpbWl0RGF0ZVZhbHVlOiBVdGNEYXRlO1xuICBwcml2YXRlIHNlbGVjdGVkRGF0ZVZhbHVlOiBVdGNEYXRlO1xuICBwcml2YXRlIHNob3VsZEZvY3VzQ2FsZW5kYXJPbkF2YWlsYWJsZURhdGVzVXBkYXRlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGRhdGVTZXJ2aWNlOiBEYXRlSGVscGVyLFxuICAgIHB1YmxpYyBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgcHJpdmF0ZSBjYWxlbmRhclNlcnZpY2U6IENhbGVuZGFyU2VydmljZSkge1xuICAgIHN1cGVyKCduYXMtY2FsZW5kYXInKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5hcmlhTGFiZWxQcmV2aW91c01vbnRoKSB7XG4gICAgICB0aGlzLndhcm5NaXNzaW5nQWNjZXNzaWJpbHR5SW5wdXQoJ2FyaWFMYWJlbFByZXZpb3VzTW9udGgnKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuYXJpYUxhYmVsTmV4dE1vbnRoKSB7XG4gICAgICB0aGlzLndhcm5NaXNzaW5nQWNjZXNzaWJpbHR5SW5wdXQoJ2FyaWFMYWJlbE5leHRNb250aCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm5hc0Zvcm1Hcm91cCAmJiB0aGlzLm5hc0Zvcm1Db250cm9sTmFtZSkge1xuXG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lKTtcblxuICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgY29uc3QgY2FsZW5kYXJEYXRlOiBDYWxlbmRhckRhdGVNb2RlbCA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICAgICAgaWYgKGNhbGVuZGFyRGF0ZSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gY2FsZW5kYXJEYXRlLmRhdGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlIHx8ICF0aGlzLmN1cnJlbnRNb250aCkge1xuICAgICAgdGhpcy5jdXJyZW50TW9udGggPSB0aGlzLmNhbGVuZGFyU2VydmljZS5nZXRDdXJyZW50TW9udGgodGhpcy5kYXRlKTtcbiAgICB9XG5cbiAgICB0aGlzLmF2YWlsYWJsZURheXMgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5nZXRBdmFpbGFibGVEYXlzKFxuICAgICAgdGhpcy5jdXJyZW50TW9udGgsXG4gICAgICB0aGlzLmF2YWlsYWJsZURhdGVzLFxuICAgICAgdGhpcy5hdmFpbGFiaWxpdHksXG4gICAgICB0aGlzLmRpc2FibGVQYXN0U2VsZWN0aW9uLFxuICAgICAgdGhpcy5sb3dlckxpbWl0RGF0ZSxcbiAgICAgIHRoaXMuYWN0aXZlRGF0ZSxcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlKTtcblxuICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLnVwZGF0ZUF2YWlsYWJsZURheXNXaXRoU2VsZWN0ZWREYXRlKHRoaXMuYXZhaWxhYmxlRGF5cywgdGhpcy5zZWxlY3RlZERhdGUpO1xuXG4gICAgdGhpcy53ZWVrcyA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmdldFdlZWtzKHRoaXMuYXZhaWxhYmxlRGF5cywgdGhpcy53ZWVrU3RhcnQpO1xuICAgIHRoaXMubW9udGhOYW1lcyA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmdldE1vbnRoTmFtZXModGhpcy5sb2NhbGUpO1xuICAgIHRoaXMubW9udGhzID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuZ2V0TW9udGhzU2VsZWN0T3B0aW9ucyh0aGlzLmRpc2FibGVQYXN0U2VsZWN0aW9uLCB0aGlzLm1heE1vbnRoSW5kZXgsIHRoaXMubW9udGhOYW1lcyk7XG4gICAgdGhpcy5zZWxlY3RlZE1vbnRoID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuZ2V0U2VsZWN0ZWRNb250aCh0aGlzLm1vbnRocywgdGhpcy5jdXJyZW50TW9udGgpO1xuICAgIHRoaXMud2Vla2RheXMgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5nZXRXZWVrZGF5cyh0aGlzLndlZWtTdGFydCwgdGhpcy5sb2NhbGUpO1xuXG4gICAgdGhpcy5zZXRQcmV2aW91c01vbnRoRGlzYWJsZWQoKTtcbiAgfVxuXG4gIGRhdGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgbGV0IGVsZW1lbnRUb0ZvY3VzOiBIVE1MRWxlbWVudDtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICB0aGlzLnNob3VsZEZvY3VzQ2FsZW5kYXJPbkF2YWlsYWJsZURhdGVzVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdUYWInOlxuICAgICAgICBpZiAoIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgaWYgKHRoaXMucHJldmlvdXNNb250aFJlZiAmJiAhdGhpcy5pc1ByZXZpb3VzTW9udGhEaXNhYmxlZCkge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLnByZXZpb3VzTW9udGhSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9udGhTZWxlY3RSZWYgJiYgdGhpcy5tb250aHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLm1vbnRoU2VsZWN0UmVmLnNlbGVjdC5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5uZXh0TW9udGhSZWYgJiYgIXRoaXMubmV4dE1vbnRoRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5uZXh0TW9udGhSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMubmV4dE1vbnRoUmVmICYmICF0aGlzLm5leHRNb250aERpc2FibGVkKSB7XG4gICAgICAgICAgICBlbGVtZW50VG9Gb2N1cyA9IHRoaXMubmV4dE1vbnRoUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1vbnRoU2VsZWN0UmVmICYmIHRoaXMubW9udGhzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5tb250aFNlbGVjdFJlZi5zZWxlY3QubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldmlvdXNNb250aFJlZiAmJiAhdGhpcy5pc1ByZXZpb3VzTW9udGhEaXNhYmxlZCkge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLnByZXZpb3VzTW9udGhSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZvY3VzRWxlbWVudChldmVudCwgZWxlbWVudFRvRm9jdXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBjb25zdCBhY3RpdmVEYXkgPSB0aGlzLmNhbGVuZGFyU2VydmljZVxuICAgICAgICAgIC5nZXREYXlzKHRoaXMud2Vla3MpXG4gICAgICAgICAgLmZpbmQoeCA9PiB4ICYmIHRoaXMuZGF0ZVNlcnZpY2UuaXNTYW1lRGF0ZSh0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUoeC5kYXRlKSwgdGhpcy5hY3RpdmVEYXRlKSk7XG5cbiAgICAgICAgaWYgKHRoaXMuYXZhaWxhYmlsaXR5ICYmIGFjdGl2ZURheT8uaXNBdmFpbGFibGUgJiYgIWFjdGl2ZURheT8uaXNEaXNhYmxlZCB8fCAhdGhpcy5hdmFpbGFiaWxpdHkpIHtcbiAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkRGF0ZSh0aGlzLmFjdGl2ZURhdGUpO1xuICAgICAgICAgIHRoaXMuZm9jdXNPbk5leHRDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgQERlYm91bmNlKDE1MClcbiAgb25QcmV2aW91c01vbnRoS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGxldCBlbGVtZW50VG9Gb2N1czogSFRNTEVsZW1lbnQ7XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgIGlmICghZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICBpZiAodGhpcy5tb250aFNlbGVjdFJlZiAmJiB0aGlzLm1vbnRocy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBlbGVtZW50VG9Gb2N1cyA9IHRoaXMubW9udGhTZWxlY3RSZWYuc2VsZWN0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm5leHRNb250aFJlZiAmJiAhdGhpcy5uZXh0TW9udGhEaXNhYmxlZCkge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLm5leHRNb250aFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbGVtZW50VG9Gb2N1cyA9IHRoaXMuYWN0aXZlRGF0ZUNlbGw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5hY3RpdmVEYXRlQ2VsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZm9jdXNFbGVtZW50KGV2ZW50LCBlbGVtZW50VG9Gb2N1cyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICB0aGlzLmdldFByZXZpb3VzTW9udGgoKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBARGVib3VuY2UoMTUwKVxuICBvbk5leHRNb250aEtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBsZXQgZWxlbWVudFRvRm9jdXM6IEhUTUxFbGVtZW50O1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdUYWInOlxuICAgICAgICBpZiAoIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLmFjdGl2ZURhdGVDZWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLm1vbnRoU2VsZWN0UmVmICYmIHRoaXMubW9udGhzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5tb250aFNlbGVjdFJlZi5zZWxlY3QubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMub25QcmV2aW91c01vbnRoS2V5ZG93biAmJiAhdGhpcy5pc1ByZXZpb3VzTW9udGhEaXNhYmxlZCkge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLnByZXZpb3VzTW9udGhSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLmFjdGl2ZURhdGVDZWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZm9jdXNFbGVtZW50KGV2ZW50LCBlbGVtZW50VG9Gb2N1cyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmdldE5leHRNb250aCgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBARGVib3VuY2UoMjAwKVxuICBvbk5leHRNb250aE1vdXNlZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLmdldE5leHRNb250aCgpO1xuICB9XG5cbiAgQERlYm91bmNlKDIwMClcbiAgb25QcmV2aW91c01vbnRoTW91c2Vkb3duKCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0UHJldmlvdXNNb250aCgpO1xuICB9XG5cbiAgb25Nb250aFNlbGVjdEtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBsZXQgZWxlbWVudFRvRm9jdXM6IEhUTUxFbGVtZW50O1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdUYWInOlxuICAgICAgICBpZiAoIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgaWYgKHRoaXMubmV4dE1vbnRoUmVmICYmICF0aGlzLm5leHRNb250aERpc2FibGVkKSB7XG4gICAgICAgICAgICBlbGVtZW50VG9Gb2N1cyA9IHRoaXMubmV4dE1vbnRoUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5hY3RpdmVEYXRlQ2VsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMub25QcmV2aW91c01vbnRoS2V5ZG93biAmJiAhdGhpcy5pc1ByZXZpb3VzTW9udGhEaXNhYmxlZCkge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLnByZXZpb3VzTW9udGhSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLmFjdGl2ZURhdGVDZWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZm9jdXNFbGVtZW50KGV2ZW50LCBlbGVtZW50VG9Gb2N1cyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzRWxlbWVudChldmVudDogS2V5Ym9hcmRFdmVudCwgZWxlbWVudFRvRm9jdXM6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKGVsZW1lbnRUb0ZvY3VzKSB7XG4gICAgICBlbGVtZW50VG9Gb2N1cy5mb2N1cygpO1xuICAgIH1cblxuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBzZXRBY3RpdmVEYXRlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jdXJyZW50TW9udGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0b2RheSA9IHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZSgpO1xuICAgIGNvbnN0IGxhc3REYXkgPSBuZXcgRGF0ZSh0aGlzLmN1cnJlbnRNb250aC55ZWFyLCB0aGlzLmN1cnJlbnRNb250aC5tb250aCArIDEsIDApO1xuICAgIGNvbnN0IG5ld0RhdGUgPSB0aGlzLmFjdGl2ZURhdGU/LmRhdGUgPiBsYXN0RGF5LmdldERhdGUoKSA/IGxhc3REYXkuZ2V0RGF0ZSgpIDogdGhpcy5hY3RpdmVEYXRlPy5kYXRlO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudE1vbnRoLm1vbnRoICE9PSB0b2RheS5tb250aCB8fCB0aGlzLmN1cnJlbnRNb250aC55ZWFyICE9PSB0b2RheS55ZWFyKSB7XG4gICAgICBjb25zdCBuZXh0TW9udGggPSB0aGlzLmN1cnJlbnRNb250aC5tb250aDtcbiAgICAgIGNvbnN0IG5leHRZZWFyID0gdGhpcy5jdXJyZW50TW9udGgueWVhcjtcblxuICAgICAgdGhpcy5hY3RpdmVEYXRlID0gbmV3IFV0Y0RhdGUobmV4dFllYXIsIG5leHRNb250aCwgbmV3RGF0ZSk7XG5cbiAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aXZlRGF0ZSAmJiB0aGlzLmFjdGl2ZURhdGUubW9udGggIT09IHRoaXMuY3VycmVudE1vbnRoLm1vbnRoKSB7XG4gICAgICB0aGlzLmFjdGl2ZURhdGUgPSBuZXcgVXRjRGF0ZSh0aGlzLmFjdGl2ZURhdGVWYWx1ZS55ZWFyLCB0aGlzLmN1cnJlbnRNb250aC5tb250aCwgbmV3RGF0ZSk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5kYXRlU2VydmljZS51dGNEYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgb25Nb3VzZURvd24oZGF0ZTogc3RyaW5nLCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2V0U2VsZWN0ZWREYXRlKHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZShkYXRlKSk7XG4gICAgdGhpcy5mb2N1c09uTmV4dENoYW5nZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uRGF5Rm9jdXMoZGF5OiBEYXlNb2RlbCk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZShkYXkuZGF0ZSk7XG4gIH1cblxuICBvbkRheUNsaWNrKGRheTogRGF5TW9kZWwpOiB2b2lkIHtcbiAgICBpZiAoIWRheS5pc0F2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U2VsZWN0ZWREYXRlKHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZShkYXkuZGF0ZSkpO1xuICB9XG5cbiAgc2V0U2VsZWN0ZWREYXRlKGRhdGU6IFV0Y0RhdGUpOiB2b2lkIHtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5uYXNGb3JtR3JvdXAgJiYgdGhpcy5uYXNGb3JtQ29udHJvbE5hbWUpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQodGhpcy5uYXNGb3JtQ29udHJvbE5hbWUpO1xuXG4gICAgICBjb25zdCBjYWxlbmRhckRhdGU6IENhbGVuZGFyRGF0ZU1vZGVsID0ge1xuICAgICAgICBtb2RlbDogdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5kYXRlU2VydmljZS5kYXRlKGRhdGUpLCB0aGlzLmRhdGVEaXNwbGF5Rm9ybWF0LCAnVVRDJywgdGhpcy5sb2NhbGUpLFxuICAgICAgICBkYXRlOiBkYXRlXG4gICAgICB9O1xuXG4gICAgICBjb250cm9sLnBhdGNoVmFsdWUoY2FsZW5kYXJEYXRlKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkRGF0ZUNoYW5nZS5lbWl0KGRhdGUpO1xuXG4gICAgaWYgKHRoaXMud2Vla3MgJiYgdGhpcy53ZWVrcy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IHdlZWsgb2YgdGhpcy53ZWVrcykge1xuICAgICAgICBpZiAoIXdlZWspIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgZGF5IG9mIHdlZWsuZGF5cykge1xuICAgICAgICAgIGlmICghZGF5KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkYXkuaXNTZWxlY3RlZCA9IGRheS5pc0F2YWlsYWJsZVxuICAgICAgICAgICAgJiYgdGhpcy5kYXRlU2VydmljZS5pc1NhbWVEYXRlKHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZShkYXkuZGF0ZSksIGRhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0Q2VsbEJ1dHRvbkNsYXNzKGRheTogRGF5TW9kZWwpOiBDbGFzc01vZGVsIHtcbiAgICBpZiAoIWRheSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2xhc3MoJ2l0ZW0nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRDbGFzcygnaXRlbScsIFtcbiAgICAgIGRheS5pc0Rpc2FibGVkICYmICdiZWZvcmUnLFxuICAgICAgZGF5LmlzU2VsZWN0ZWQgJiYgJ3NlbGVjdGVkJyxcbiAgICAgICF0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZU1vbnRoKHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZShkYXkuZGF0ZSksIHRoaXMuY3VycmVudE1vbnRoKSAmJiAnZW1wdHknLFxuICAgICAgZGF5LmlzQXZhaWxhYmxlICYmICdhdmFpbGFibGUnLFxuICAgICAgJ2xhcmdlJyxcbiAgICAgIGRheS5pc0FjdGl2ZSAmJiAnYWN0aXZlJ1xuICAgIF0pO1xuICB9XG5cbiAgZ2V0TmV4dE1vbnRoKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy53ZWVrcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0V2VlayA9IHRoaXMud2Vla3NbMF07XG5cbiAgICBpZiAoIWZpcnN0V2Vlaykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0VmFsaWREYXkgPSBmaXJzdFdlZWsuZGF5c1xuICAgICAgLmZpbmQoZGF5ID0+IGRheSAmJiB0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZU1vbnRoKHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZShkYXkuZGF0ZSksIHRoaXMuY3VycmVudE1vbnRoKSk7XG5cbiAgICBpZiAoIWZpcnN0VmFsaWREYXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0TW9udGggPSB0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUoZmlyc3RWYWxpZERheS5kYXRlKTtcbiAgICBjb25zdCBtb250aCA9IG5leHRNb250aC5tb250aCArIDE7XG4gICAgbmV4dE1vbnRoLnNldE1vbnRoKG1vbnRoKTtcblxuICAgIHRoaXMuY3VycmVudE1vbnRoID0gbmV4dE1vbnRoO1xuXG4gICAgdGhpcy5hcHBseVNlbGVjdGVkRGF0ZUNoYW5nZXMoKTtcbiAgICB0aGlzLm1vbnRoQ2hhbmdlLmVtaXQodGhpcy5jdXJyZW50TW9udGgpO1xuICAgIHRoaXMuc2V0UHJldmlvdXNNb250aERpc2FibGVkKCk7XG5cbiAgICBpZiAoIXRoaXMuYXZhaWxhYmlsaXR5KSB7XG4gICAgICB0aGlzLm1heE1vbnRoSW5kZXgrKztcbiAgICB9XG4gIH1cblxuICBnZXRQcmV2aW91c01vbnRoKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy53ZWVrcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0V2VlayA9IHRoaXMud2Vla3NbMF07XG5cbiAgICBpZiAoIWZpcnN0V2Vlaykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0VmFsaWREYXkgPSBmaXJzdFdlZWsuZGF5c1xuICAgICAgLmZpbmQoZGF5ID0+IGRheSAmJiB0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZU1vbnRoKHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZShkYXkuZGF0ZSksIHRoaXMuY3VycmVudE1vbnRoKSk7XG5cbiAgICBjb25zdCBwcmV2aW91c01vbnRoID0gdGhpcy5kYXRlU2VydmljZS51dGNEYXRlKGZpcnN0VmFsaWREYXkuZGF0ZSk7XG4gICAgY29uc3QgbW9udGggPSBwcmV2aW91c01vbnRoLm1vbnRoIC0gMTtcbiAgICBwcmV2aW91c01vbnRoLnNldE1vbnRoKG1vbnRoKTtcblxuICAgIHRoaXMuY3VycmVudE1vbnRoID0gcHJldmlvdXNNb250aDtcblxuICAgIHRoaXMuYXBwbHlTZWxlY3RlZERhdGVDaGFuZ2VzKCk7XG4gICAgdGhpcy5tb250aENoYW5nZS5lbWl0KHRoaXMuY3VycmVudE1vbnRoKTtcbiAgICB0aGlzLnNldFByZXZpb3VzTW9udGhEaXNhYmxlZCgpO1xuICB9XG5cbiAgc2V0UHJldmlvdXNNb250aERpc2FibGVkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmN1cnJlbnRNb250aCkge1xuICAgICAgY29uc3QgcHJldmlvdXNNb250aCA9IG5ldyBVdGNEYXRlKHRoaXMuY3VycmVudE1vbnRoLnllYXIsIHRoaXMuY3VycmVudE1vbnRoLm1vbnRoLCB0aGlzLmN1cnJlbnRNb250aC5kYXRlKTtcbiAgICAgIGNvbnN0IG1vbnRoID0gcHJldmlvdXNNb250aC5tb250aCAtIDE7XG4gICAgICBwcmV2aW91c01vbnRoLnNldE1vbnRoKG1vbnRoKTtcblxuICAgICAgaWYgKHRoaXMuZGlzYWJsZVBhc3RTZWxlY3Rpb24gJiYgdGhpcy5kYXRlU2VydmljZS5pc0luVGhlUGFzdChwcmV2aW91c01vbnRoLCB0cnVlKSkge1xuICAgICAgICB0aGlzLmlzUHJldmlvdXNNb250aERpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaXNQcmV2aW91c01vbnRoRGlzYWJsZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlTZWxlY3RlZERhdGVDaGFuZ2VzKCkge1xuICAgIHRoaXMuYXZhaWxhYmxlRGF5cyA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmdldEF2YWlsYWJsZURheXMoXG4gICAgICB0aGlzLmN1cnJlbnRNb250aCxcbiAgICAgIHRoaXMuYXZhaWxhYmxlRGF0ZXMsXG4gICAgICB0aGlzLmF2YWlsYWJpbGl0eSxcbiAgICAgIHRoaXMuZGlzYWJsZVBhc3RTZWxlY3Rpb24sXG4gICAgICB0aGlzLmxvd2VyTGltaXREYXRlLFxuICAgICAgdGhpcy5hY3RpdmVEYXRlLFxuICAgICAgdGhpcy5zZWxlY3RlZERhdGUpO1xuXG4gICAgdGhpcy5zZWxlY3RlZE1vbnRoID0gdGhpcy5tb250aHNcbiAgICAgIC5maW5kKHggPT4gdGhpcy5kYXRlU2VydmljZS5pc1NhbWVNb250aCh0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUoeC52YWx1ZSksIHRoaXMuY3VycmVudE1vbnRoKSk7XG5cbiAgICB0aGlzLmNhbGVuZGFyU2VydmljZS51cGRhdGVBdmFpbGFibGVEYXlzV2l0aFNlbGVjdGVkRGF0ZSh0aGlzLmF2YWlsYWJsZURheXMsIHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICB0aGlzLndlZWtzID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuZ2V0V2Vla3ModGhpcy5hdmFpbGFibGVEYXlzLCB0aGlzLndlZWtTdGFydCk7XG4gIH1cbn1cbiIsIjxkaXYgW25hc0NsYXNzXT1cImdldENsYXNzKClcIj5cbiAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCdhcnJvdycpXCI+PC9zcGFuPlxuICA8ZGl2ICNjYWxlbmRhckNvbnRlbnRcbiAgICB0YWJpbmRleD1cIjBcIlxuICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygnY29udGVudCcpXCI+XG4gICAgPGhlYWRlciBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2hlYWRlcicpXCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAjcHJldmlvdXNNb250aFJlZlxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFByZXZpb3VzTW9udGhcIlxuICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ25hdicpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzUHJldmlvdXNNb250aERpc2FibGVkID09PSB0cnVlXCJcbiAgICAgICAgKGtleWRvd24pPVwib25QcmV2aW91c01vbnRoS2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJvblByZXZpb3VzTW9udGhNb3VzZWRvd24oKVwiPlxuICAgICAgICA8bmFzLWljb24gdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgW3R5cGVdPVwiJ2Fycm93LWxlZnQtLWxpZ2h0J1wiPjwvbmFzLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb250aHM/Lmxlbmd0aCA+IDA7IGVsc2UgY3VycmVudE1vbnRoVGVtcGxhdGVcIj5cbiAgICAgICAgPG5hcy1zZWxlY3QgI21vbnRoU2VsZWN0XG4gICAgICAgICAgW2Nzc0NsYXNzXT1cImdldENsYXNzKCdtb250aCcpXCJcbiAgICAgICAgICBbaW5saW5lXT1cInRydWVcIlxuICAgICAgICAgIFtzaW1wbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgW29wdGlvbnNdPVwibW9udGhzXCJcbiAgICAgICAgICBbKHNlbGVjdGVkKV09XCJzZWxlY3RlZE1vbnRoXCJcbiAgICAgICAgICAoa2V5ZG93bik9XCJvbk1vbnRoU2VsZWN0S2V5ZG93bigkZXZlbnQpXCI+PC9uYXMtc2VsZWN0PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctdGVtcGxhdGUgI2N1cnJlbnRNb250aFRlbXBsYXRlPlxuICAgICAgICB7e2N1cnJlbnRNb250aE1vZGVsfX1cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAjbmV4dE1vbnRoUmVmXG4gICAgICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygnbmF2JylcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbE5leHRNb250aFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJuZXh0TW9udGhEaXNhYmxlZFwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uTmV4dE1vbnRoS2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJvbk5leHRNb250aE1vdXNlZG93bigpXCI+XG4gICAgICAgIDxuYXMtaWNvbiBbdHlwZV09XCInYXJyb3ctcmlnaHQtLWxpZ2h0J1wiPjwvbmFzLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2hlYWRlcj5cbiAgICA8dGFibGUgW25hc0NsYXNzXT1cImdldENsYXNzKCd0YWJsZScpXCI+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGggKm5nSWY9XCJleGlzdHMoZGlzcGxheVdlZWtOdW1iZXJzKVwiXG4gICAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3dlZWstbnVtYmVyJylcIj48L3RoPlxuICAgICAgICAgIDx0aCBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2NlbGwnKVwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgd2Vla2RheSBvZiB3ZWVrZGF5c1wiPlxuICAgICAgICAgICAgPGRpdiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2l0ZW0nLCAnaGVhZGVyJylcIj57e3dlZWtkYXl9fTwvZGl2PlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3RoZWFkPlxuICAgICAgPHRib2R5PlxuICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHdlZWsgb2Ygd2Vla3NcIlxuICAgICAgICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygncm93JywgJ2FuaW1hdGUnKVwiPlxuICAgICAgICAgIDx0ZCAqbmdJZj1cImV4aXN0cyhkaXNwbGF5V2Vla051bWJlcnMpXCJcbiAgICAgICAgICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygnd2Vlay1udW1iZXInKVwiPlxuICAgICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCdkYXRlJywgJ3dlZWstbnVtYmVyJylcIj57e3dlZWsud2Vla051bWJlcn19PC9zcGFuPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIFtuYXNDbGFzc109XCJnZXRDbGFzcygnY2VsbCcpXCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkYXkgb2Ygd2Vlaz8uZGF5c1wiXG4gICAgICAgICAgICAjdGFibGVDZWxscz5cbiAgICAgICAgICAgIDxkaXYgW25hc0NsYXNzXT1cImdldENsYXNzKCdpdGVtJywgJ2R1bW15JylcIlxuICAgICAgICAgICAgICAqbmdJZj1cImRheSA9PT0gbnVsbDsgZWxzZSBkYXlUZW1wbGF0ZVwiPjwvZGl2PlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkYXlUZW1wbGF0ZVxuICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAjZGF0ZUJ1dHRvblxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImRhdGVLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgIHRhYkluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgW25hc0NsYXNzXT1cImdldENlbGxCdXR0b25DbGFzcyhkYXkpXCJcbiAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIm9uTW91c2VEb3duKGRheS5kYXRlLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EYXlDbGljayhkYXkpXCJcbiAgICAgICAgICAgICAgICAoZm9jdXMpPVwib25EYXlGb2N1cyhkYXkpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2RhdGUtd3JhcHBlcicpXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2RhdGUnKVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZGF5LmRhdGUgfCBkYXRlIDogJ2RkJzonVVRDJ1wiPnt7ZGF5LmRhdGUgfCBkYXRlIDogJ2RkJzonVVRDJzpsb2NhbGV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG4gICAgPGRpdiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2Zvb3RlcicpXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwiYXZhaWxhYmxlRGF0ZXM/Lmxlbmd0aCA9PT0gMCAmJiBub0F2YWlsYWJsZUZsaWdodHNMYWJlbFwiXG4gICAgICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygnZm9vdGVyJywgJ2l0ZW0nKVwiPlxuICAgICAgICA8bmFzLWljb24gW2ljb25dPVwiJ2FsZXJ0J1wiPjwvbmFzLWljb24+XG4gICAgICAgIHt7bm9BdmFpbGFibGVGbGlnaHRzTGFiZWx9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiYXZhaWxhYmxlRGF0ZXM/Lmxlbmd0aCA+IDAgJiYgbm9BdmFpbGFibGVGbGlnaHRzTGFiZWwgJiYgYXZhaWxhYmxlRmxpZ2h0c0xhYmVsXCJcbiAgICAgICAgW25hc0NsYXNzXT1cImdldENsYXNzKCdmb290ZXInLCAnaXRlbScpXCI+XG4gICAgICAgIDxkaXYgW25hc0NsYXNzXT1cImdldENsYXNzKCdpdGVtJywgJ2F2YWlsYWJsZScpXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgW25hc0NsYXNzXT1cImdldENsYXNzKCdmb290ZXInLCAnbGFiZWwnKVwiPnt7YXZhaWxhYmxlRmxpZ2h0c0xhYmVsfX08L2Rpdj5cbiAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCdpdGVtJywgJ3VuYXZhaWxhYmxlJylcIj48L3NwYW4+XG4gICAgICAgIDxkaXYgW25hc0NsYXNzXT1cImdldENsYXNzKCdmb290ZXInLCAnbGFiZWwnKVwiPnt7bm9BdmFpbGFibGVGbGlnaHRzTGFiZWx9fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
583
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9kYXRlcGlja2VyL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBS0EsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUVsQixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFekUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBSTlELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7Ozs7Ozs7QUFRdkUsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGdCQUFnQjtJQStCckQ7OztPQUdHO0lBQ0gsSUFDSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7SUFDRCxJQUFJLGNBQWMsQ0FBQyxJQUFhO1FBQzlCLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBRWhDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7WUFD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LGlCQUFpQixDQUFDLElBQUk7c0pBUU4sZ0JBQWdCO3NCQUE5QyxTQUFTO3VCQUFDLGtCQUFrQjtnQkFDRixZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ0csVUFBVTtzQkFBckMsWUFBWTt1QkFBQyxZQUFZO2dCQUNFLFdBQVc7c0JBQXRDLFlBQVk7dUJBQUMsWUFBWTtnQkFDSSxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFDRixjQUFjO3NCQUF2QyxTQUFTO3VCQUFDLGFBQWE7Z0JBTWYsdUJBQXVCO3NCQUEvQixLQUFLO2dCQU1HLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFNRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBT0YsY0FBYztzQkFEakIsS0FBSztnQkE0QkcsSUFBSTtzQkFBWixLQUFLO2dCQU1HLFNBQVM7c0JBQWpCLEtBQUs7Z0JBTUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQU1HLFlBQVk7c0JBQXBCLEtBQUs7Z0JBT0csTUFBTTtzQkFBZCxLQUFLO2dCQU9GLGNBQWM7c0JBRGpCLEtBQUs7Z0JBNkNGLFVBQVU7c0JBRGIsS0FBSztnQkEyQ0YsWUFBWTtzQkFEZixLQUFLO2dCQXFCRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFNSSxXQUFXO3NCQUFwQixNQUFNO2dCQU1HLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFNRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBTUcsZ0JBQWdCO3NCQUF6QixNQUFNO2dCQXlKUCxzQkFBc0IsTUE0QnRCLGtCQUFrQixNQTBCbEIsb0JBQW9CLE1BS3BCLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBOb3J3ZWdpYW4gQWlyIFNodXR0bGUuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgUXVlcnlMaXN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ2FsZW5kYXJEYXRlTW9kZWwgfSBmcm9tICcuL2NhbGVuZGFyLWRhdGUubW9kZWwnO1xuaW1wb3J0IHsgV2Vla1N0YXJ0IH0gZnJvbSAnLi9lbnVtcy93ZWVrLXN0YXJ0LmVudW0nO1xuaW1wb3J0IHsgRGF5TW9kZWwgfSBmcm9tICcuL21vZGVscy9kYXkubW9kZWwnO1xuaW1wb3J0IHsgU2VsZWN0T3B0aW9uTW9kZWwgfSBmcm9tICcuL21vZGVscy9zZWxlY3Qtb3B0aW9uLm1vZGVsJztcbmltcG9ydCB7IFdlZWtNb2RlbCB9IGZyb20gJy4vbW9kZWxzL3dlZWsubW9kZWwnO1xuaW1wb3J0IHsgTmFzQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvYmFzZS9uYXMtY29tcG9uZW50LmJhc2UnO1xuaW1wb3J0IHsgQ2xhc3NNb2RlbCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL2NsYXNzLm1vZGVsJztcbmltcG9ydCB7IFV0Y0RhdGUgfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy91dGMtZGF0ZS5tb2RlbCc7XG5pbXBvcnQgeyBEYXRlSGVscGVyIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9kYXRlL2RhdGUtaGVscGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc2VsZWN0L3NlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FsZW5kYXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY2FsZW5kYXIuc2VydmljZSc7XG5pbXBvcnQgeyBEZWJvdW5jZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvZGVjb3JhdG9ycy9kZWJvdW5jZS5kZWNvcmF0b3InO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduYXMtY2FsZW5kYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYWxlbmRhci5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyQ29tcG9uZW50IGV4dGVuZHMgTmFzQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHdlZWtzOiBBcnJheTxXZWVrTW9kZWw+O1xuICBtb250aHMgPSBuZXcgQXJyYXk8U2VsZWN0T3B0aW9uTW9kZWw+KCk7XG4gIHdlZWtkYXlzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgaXNQcmV2aW91c01vbnRoRGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgQFZpZXdDaGlsZCgncHJldmlvdXNNb250aFJlZicpIHByZXZpb3VzTW9udGhSZWY6IEVsZW1lbnRSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCduZXh0TW9udGhSZWYnKSBuZXh0TW9udGhSZWY6IEVsZW1lbnRSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkcmVuKCd0YWJsZUNlbGxzJykgdGFibGVDZWxsczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBAVmlld0NoaWxkcmVuKCdkYXRlQnV0dG9uJykgZGF0ZUJ1dHRvbnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgQFZpZXdDaGlsZCgnY2FsZW5kYXJDb250ZW50JykgY2FsZW5kYXJDb250ZW50OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdtb250aFNlbGVjdCcpIG1vbnRoU2VsZWN0UmVmOiBTZWxlY3RDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBMYWJlbCBmb3Igbm8gYXZhaWxhYmxlIGZsaWdodHMuXG4gICAqL1xuICBASW5wdXQoKSBub0F2YWlsYWJsZUZsaWdodHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yIGF2YWlsYWJsZSBmbGlnaHRzLlxuICAgKi9cbiAgQElucHV0KCkgYXZhaWxhYmxlRmxpZ2h0c0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEaXNhYmxlIHBvc3NpYmlsaXR5IHRvIHNlbGVjdCBkYXRlcyBpbiB0aGUgcGFzdC5cbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVQYXN0U2VsZWN0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBsb3dlc3QgZGF0ZSBhbGxvd2VkLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IGxvd2VyTGltaXREYXRlKCk6IFV0Y0RhdGUge1xuICAgIHJldHVybiB0aGlzLmxvd2VyTGltaXREYXRlVmFsdWU7XG4gIH1cbiAgc2V0IGxvd2VyTGltaXREYXRlKGRhdGU6IFV0Y0RhdGUpIHtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvd2VyTGltaXREYXRlVmFsdWUgPSBkYXRlO1xuXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkRGF0ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZERhdGVWYWx1ZSA9IHRoaXMubG93ZXJMaW1pdERhdGVWYWx1ZTtcbiAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMubG93ZXJMaW1pdERhdGVWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWREYXRlICYmIHRoaXMuZGF0ZVNlcnZpY2UuaXNHcmVhdGVyVGhhbihkYXRlLCB0aGlzLnNlbGVjdGVkRGF0ZSwgZmFsc2UsIHRydWUsIHRydWUpKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZVZhbHVlID0gdGhpcy5sb3dlckxpbWl0RGF0ZVZhbHVlO1xuICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5sb3dlckxpbWl0RGF0ZVZhbHVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5hY3RpdmVEYXRlICYmIHRoaXMuZGF0ZVNlcnZpY2UuaXNHcmVhdGVyVGhhbihkYXRlLCB0aGlzLmFjdGl2ZURhdGUsIGZhbHNlLCB0cnVlLCB0cnVlKSkge1xuICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5sb3dlckxpbWl0RGF0ZVZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMuYXBwbHlTZWxlY3RlZERhdGVDaGFuZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgKiBAZGVzY3JpcHRpb25cbiAgKiBDdXJyZW50IG1vbnRoIGRhdGUgdG8gYmUgZGlzcGxheWVkLiBJdCB3aWxsIHRha2UgcHJlY2VkZW5jZSBvdmVyIHNlbGVjdGVkIGRhdGUgaW5wdXQsIGlmIGl0IGlzIHNldC5cbiAgKi9cbiAgQElucHV0KCkgZGF0ZTogVXRjRGF0ZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERlc2lkZXMgaWYgdGhlIHdlZWsgc2hvdWxkIHN0YXJ0IG9uIGEgbW9uZGF5IG9yIHN1bmRheS4gRGVmYXVsdHMgdG8gbW9uZGF5LlxuICAgKi9cbiAgQElucHV0KCkgd2Vla1N0YXJ0ID0gV2Vla1N0YXJ0Lm1vbmRheTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERpc3BsYXkgd2VlayBudW1iZXJzLlxuICAgKi9cbiAgQElucHV0KCkgZGlzcGxheVdlZWtOdW1iZXJzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyB0aGUgZGF0ZXBpY2tlciBpbiBhdmFpbGFiaWxpdHkgbW9kZSB3aGVyZSBhdmFpbGFibGUgZGF0ZXMgY2FuIGJlIGFkZGVkLlxuICAgKi9cbiAgQElucHV0KCkgYXZhaWxhYmlsaXR5OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsb2NhbGUgY29kZSBmb3IgdGhlIGxvY2FsZSBmb3JtYXQgcnVsZXMgdG8gdXNlLiBXaGVuIG5vdCBzdXBwbGllZCwgdXNlcyB0aGUgdmFsdWUgb2YgTE9DQUxFX0lELCB3aGljaCBpcyBlbi1VUyBieSBkZWZhdWx0LlxuICAgKiBUaGlzIHJlcXVpcmVzIHRoYXQgcmVnaXN0ZXJMb2NhbGVEYXRhIGlzIGNhbGxlZCB3aXRoIHRoZSByZXNwZWN0aXZlIGxvY2FsZS5cbiAgICovXG4gIEBJbnB1dCgpIGxvY2FsZSA9ICdlbi1VUyc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBhcnJheSB3aXRoIGFsbCB0aGUgYXZhaWxhYmxlIGRhdGVzIG9mIHRoZSBtb250aCBmb3Igc2VhdHMuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgYXZhaWxhYmxlRGF0ZXMoKTogQXJyYXk8VXRjRGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLmF2YWlsYWJsZURhdGVzVmFsdWU7XG4gIH1cbiAgc2V0IGF2YWlsYWJsZURhdGVzKGRhdGVzOiBBcnJheTxVdGNEYXRlPikge1xuICAgIGlmICghZGF0ZXMgfHwgIXRoaXMuZXhpc3RzKHRoaXMuYXZhaWxhYmlsaXR5KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmaXJzdERhdGUgPSBkYXRlc1swXTtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoID0gZmlyc3REYXRlO1xuICAgICAgdGhpcy5zZXRQcmV2aW91c01vbnRoRGlzYWJsZWQoKTtcbiAgICB9XG5cbiAgICB0aGlzLmF2YWlsYWJsZURhdGVzVmFsdWUgPSBkYXRlcztcblxuICAgIHRoaXMuYXBwbHlTZWxlY3RlZERhdGVDaGFuZ2VzKCk7XG5cbiAgICBpZiAoIXRoaXMuc2hvdWxkRm9jdXNDYWxlbmRhck9uQXZhaWxhYmxlRGF0ZXNVcGRhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5uZXh0TW9udGhSZWYubmF0aXZlRWxlbWVudCB8fFxuICAgICAgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5wcmV2aW91c01vbnRoUmVmLm5hdGl2ZUVsZW1lbnQgfHxcbiAgICAgIHRoaXMubW9udGhTZWxlY3RSZWYgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5tb250aFNlbGVjdFJlZi5zZWxlY3QubmF0aXZlRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgZWxtZW1lbnRUb0ZvY3VzID0gdGhpcy5hY3RpdmVEYXRlQ2VsbDtcblxuICAgICAgaWYgKGVsbWVtZW50VG9Gb2N1cykge1xuICAgICAgICBlbG1lbWVudFRvRm9jdXMuZm9jdXMoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zaG91bGRGb2N1c0NhbGVuZGFyT25BdmFpbGFibGVEYXRlc1VwZGF0ZSA9IGZhbHNlO1xuICAgIH0sIDEwMCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgYWN0aXZlIGRhdGVcbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBhY3RpdmVEYXRlKCk6IFV0Y0RhdGUge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZURhdGVWYWx1ZTtcbiAgfVxuICBzZXQgYWN0aXZlRGF0ZShkYXRlOiBVdGNEYXRlKSB7XG4gICAgaWYgKCFkYXRlIHx8IHRoaXMuZGF0ZVNlcnZpY2UuaXNTYW1lRGF0ZShkYXRlLCB0aGlzLmFjdGl2ZURhdGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmN1cnJlbnRNb250aCkge1xuICAgICAgdGhpcy5jdXJyZW50TW9udGggPSBkYXRlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5kYXRlU2VydmljZS5pc1NhbWVNb250aChkYXRlLCB0aGlzLmN1cnJlbnRNb250aCkpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoID0gZGF0ZTtcblxuICAgICAgdGhpcy5hcHBseVNlbGVjdGVkRGF0ZUNoYW5nZXMoKTtcbiAgICAgIHRoaXMubW9udGhDaGFuZ2UuZW1pdCh0aGlzLmN1cnJlbnRNb250aCk7XG4gICAgICB0aGlzLnNldFByZXZpb3VzTW9udGhEaXNhYmxlZCgpO1xuXG4gICAgICBjb25zdCBlbG1lbWVudFRvRm9jdXMgPSB0aGlzLmFjdGl2ZURhdGVDZWxsO1xuICAgICAgaWYgKGVsbWVtZW50VG9Gb2N1cykge1xuICAgICAgICBlbG1lbWVudFRvRm9jdXMuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy53ZWVrcykge1xuICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2Uuc2V0QWN0aXZlRGF0ZShkYXRlLCB0aGlzLndlZWtzKTtcblxuICAgICAgZm9yIChjb25zdCBkYXkgb2YgdGhpcy5jYWxlbmRhclNlcnZpY2UuZ2V0RGF5cyh0aGlzLndlZWtzKSkge1xuICAgICAgICBpZiAoIWRheSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRheS5pc0FjdGl2ZSkge1xuICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZVZhbHVlID0gZGF0ZTtcbiAgICAgICAgICB0aGlzLmFjdGl2ZURhdGVDaGFuZ2UuZW1pdChkYXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGdldCBzZWxlY3RlZERhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWREYXRlVmFsdWU7XG4gIH1cbiAgc2V0IHNlbGVjdGVkRGF0ZShkYXRlOiBVdGNEYXRlKSB7XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZERhdGVWYWx1ZSA9IGRhdGU7XG5cbiAgICBpZiAoIXRoaXMuZGF0ZVNlcnZpY2UuaXNTYW1lTW9udGgoZGF0ZSwgdGhpcy5hY3RpdmVEYXRlKVxuICAgICAgfHwgIXRoaXMuZGF0ZVNlcnZpY2UuaXNTYW1lTW9udGgoZGF0ZSwgdGhpcy5jdXJyZW50TW9udGgpKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb250aCA9IGRhdGU7XG4gICAgICB0aGlzLmFjdGl2ZURhdGVWYWx1ZSA9IGRhdGU7XG4gICAgICB0aGlzLmFwcGx5U2VsZWN0ZWREYXRlQ2hhbmdlcygpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U2VsZWN0ZWREYXRlKGRhdGUpO1xuICB9XG5cbiAgQElucHV0KCkgbmFzRm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gIEBJbnB1dCgpIG5hc0Zvcm1Db250cm9sTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSBkYXRlRGlzcGxheUZvcm1hdCA9ICdFRUVFIGQsIE1NTU0geXl5eSc7XG4gIEBJbnB1dCgpIGFyaWFMYWJlbFByZXZpb3VzTW9udGg6IHN0cmluZztcbiAgQElucHV0KCkgYXJpYUxhYmVsTmV4dE1vbnRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBNb250aCBzZWxlY3RlZCBieSB0aGUgdXNlciBieSBjbGlja2luZyBpbiBkcm9wIGRvd24gZm9yIG1vbnRoIHNlbGVjdGlvbiBvciBtb250aCBuYXZpZ2F0aW9uIGJ1dHRvbnMuXG4gICAqL1xuICBAT3V0cHV0KCkgbW9udGhDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFV0Y0RhdGU+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXaGVuIGEgdXNlciBoYXMgYWN0aXZlbHkgY2hhbmdlZCB0aGUgZGF0ZS5cbiAgICovXG4gIEBPdXRwdXQoKSBmb2N1c09uTmV4dENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8S2V5Ym9hcmRFdmVudCB8IE1vdXNlRXZlbnQgfCBudWxsPigpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogV2hlbiBzZWxlY3RlZCBkYXRlIGhhcyBiZWVuIGNoYW5nZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgc2VsZWN0ZWREYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxVdGNEYXRlPigpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogV2hlbiBhY3RpdmUgZGF0ZSBoYXMgYmVlbiBjaGFuZ2VkLlxuICAgKi9cbiAgQE91dHB1dCgpIGFjdGl2ZURhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFV0Y0RhdGU+KCk7XG5cbiAgZ2V0IHNlbGVjdGVkTW9udGgoKTogU2VsZWN0T3B0aW9uTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVmFsdWU7XG4gIH1cbiAgc2V0IHNlbGVjdGVkTW9udGgob3B0aW9uOiBTZWxlY3RPcHRpb25Nb2RlbCkge1xuICAgIGlmICghb3B0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IG9wdGlvbjtcbiAgICBjb25zdCBvcHRpb25EYXRlID0gdGhpcy5kYXRlU2VydmljZS51dGNEYXRlKG9wdGlvbi52YWx1ZSk7XG5cbiAgICBpZiAoIXRoaXMuZGF0ZVNlcnZpY2UuaXNTYW1lTW9udGgob3B0aW9uRGF0ZSwgdGhpcy5jdXJyZW50TW9udGgpKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb250aCA9IG9wdGlvbkRhdGU7XG4gICAgICB0aGlzLmFwcGx5U2VsZWN0ZWREYXRlQ2hhbmdlcygpO1xuICAgICAgdGhpcy5tb250aENoYW5nZS5lbWl0KHRoaXMuY3VycmVudE1vbnRoKTtcbiAgICAgIHRoaXMuc2V0UHJldmlvdXNNb250aERpc2FibGVkKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG5leHRNb250aERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5leHRNb250aEluZGV4ID0gdGhpcy5jdXJyZW50TW9udGhcbiAgICAgICYmIHRoaXMuZGF0ZVNlcnZpY2UuZ2V0VXRjTnVtYmVyT2ZNb250aEJldHdlZW4odGhpcy5kYXRlU2VydmljZS51dGNEYXRlKCksIHRoaXMuY3VycmVudE1vbnRoKTtcblxuICAgIHJldHVybiAobmV4dE1vbnRoSW5kZXggKyAyKSA+PSB0aGlzLm1heE1vbnRoSW5kZXg7XG4gIH1cblxuICBnZXQgY3VycmVudE1vbnRoTW9kZWwoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuY3VycmVudE1vbnRoKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGAke3RoaXMubW9udGhOYW1lc1t0aGlzLmN1cnJlbnRNb250aC50b0RhdGUoKS5nZXRVVENNb250aCgpXX0gLSAke3RoaXMuY3VycmVudE1vbnRoLnRvRGF0ZSgpLmdldFVUQ0Z1bGxZZWFyKCl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSXMgaW4gdXNlIGJ5IERhdGVwaWNrZXJDb21wb25lbnRcbiAgICovXG4gIGdldCBhY3RpdmVEYXRlQ2VsbCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5uYXMtY2FsZW5kYXJfX2l0ZW0tLWFjdGl2ZScpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXhNb250aEluZGV4ID0gMTM7XG4gIHByaXZhdGUgYWN0aXZlRGF0ZVZhbHVlOiBVdGNEYXRlO1xuICBwcml2YXRlIGF2YWlsYWJsZURhdGVzVmFsdWU6IEFycmF5PFV0Y0RhdGU+O1xuICBwcml2YXRlIGN1cnJlbnRNb250aDogVXRjRGF0ZTtcbiAgcHJpdmF0ZSBzZWxlY3RlZFZhbHVlOiBTZWxlY3RPcHRpb25Nb2RlbDtcbiAgcHJpdmF0ZSBhdmFpbGFibGVEYXlzOiBBcnJheTxEYXlNb2RlbD47XG4gIHByaXZhdGUgbW9udGhOYW1lcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIHByaXZhdGUgbG93ZXJMaW1pdERhdGVWYWx1ZTogVXRjRGF0ZTtcbiAgcHJpdmF0ZSBzZWxlY3RlZERhdGVWYWx1ZTogVXRjRGF0ZTtcbiAgcHJpdmF0ZSBzaG91bGRGb2N1c0NhbGVuZGFyT25BdmFpbGFibGVEYXRlc1VwZGF0ZSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkYXRlU2VydmljZTogRGF0ZUhlbHBlcixcbiAgICBwdWJsaWMgZGF0ZVBpcGU6IERhdGVQaXBlLFxuICAgIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlOiBDYWxlbmRhclNlcnZpY2UpIHtcbiAgICBzdXBlcignbmFzLWNhbGVuZGFyJyk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYXJpYUxhYmVsUHJldmlvdXNNb250aCkge1xuICAgICAgdGhpcy53YXJuTWlzc2luZ0FjY2Vzc2liaWx0eUlucHV0KCdhcmlhTGFiZWxQcmV2aW91c01vbnRoJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmFyaWFMYWJlbE5leHRNb250aCkge1xuICAgICAgdGhpcy53YXJuTWlzc2luZ0FjY2Vzc2liaWx0eUlucHV0KCdhcmlhTGFiZWxOZXh0TW9udGgnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5uYXNGb3JtR3JvdXAgJiYgdGhpcy5uYXNGb3JtQ29udHJvbE5hbWUpIHtcblxuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMubmFzRm9ybUdyb3VwLmdldCh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZSk7XG5cbiAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgIGNvbnN0IGNhbGVuZGFyRGF0ZTogQ2FsZW5kYXJEYXRlTW9kZWwgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgICAgIGlmIChjYWxlbmRhckRhdGUpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IGNhbGVuZGFyRGF0ZS5kYXRlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZSB8fCAhdGhpcy5jdXJyZW50TW9udGgpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuZ2V0Q3VycmVudE1vbnRoKHRoaXMuZGF0ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5hdmFpbGFibGVEYXlzID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuZ2V0QXZhaWxhYmxlRGF5cyhcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoLFxuICAgICAgdGhpcy5hdmFpbGFibGVEYXRlcyxcbiAgICAgIHRoaXMuYXZhaWxhYmlsaXR5LFxuICAgICAgdGhpcy5kaXNhYmxlUGFzdFNlbGVjdGlvbixcbiAgICAgIHRoaXMubG93ZXJMaW1pdERhdGUsXG4gICAgICB0aGlzLmFjdGl2ZURhdGUsXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZSk7XG5cbiAgICB0aGlzLmNhbGVuZGFyU2VydmljZS51cGRhdGVBdmFpbGFibGVEYXlzV2l0aFNlbGVjdGVkRGF0ZSh0aGlzLmF2YWlsYWJsZURheXMsIHRoaXMuc2VsZWN0ZWREYXRlKTtcblxuICAgIHRoaXMud2Vla3MgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5nZXRXZWVrcyh0aGlzLmF2YWlsYWJsZURheXMsIHRoaXMud2Vla1N0YXJ0KTtcbiAgICB0aGlzLm1vbnRoTmFtZXMgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5nZXRNb250aE5hbWVzKHRoaXMubG9jYWxlKTtcbiAgICB0aGlzLm1vbnRocyA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmdldE1vbnRoc1NlbGVjdE9wdGlvbnModGhpcy5kaXNhYmxlUGFzdFNlbGVjdGlvbiwgdGhpcy5tYXhNb250aEluZGV4LCB0aGlzLm1vbnRoTmFtZXMpO1xuICAgIHRoaXMuc2VsZWN0ZWRNb250aCA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmdldFNlbGVjdGVkTW9udGgodGhpcy5tb250aHMsIHRoaXMuY3VycmVudE1vbnRoKTtcbiAgICB0aGlzLndlZWtkYXlzID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuZ2V0V2Vla2RheXModGhpcy53ZWVrU3RhcnQsIHRoaXMubG9jYWxlKTtcblxuICAgIHRoaXMuc2V0UHJldmlvdXNNb250aERpc2FibGVkKCk7XG4gIH1cblxuICBkYXRlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGxldCBlbGVtZW50VG9Gb2N1czogSFRNTEVsZW1lbnQ7XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgdGhpcy5zaG91bGRGb2N1c0NhbGVuZGFyT25BdmFpbGFibGVEYXRlc1VwZGF0ZSA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgaWYgKCFldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgIGlmICh0aGlzLnByZXZpb3VzTW9udGhSZWYgJiYgIXRoaXMuaXNQcmV2aW91c01vbnRoRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5wcmV2aW91c01vbnRoUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1vbnRoU2VsZWN0UmVmICYmIHRoaXMubW9udGhzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5tb250aFNlbGVjdFJlZi5zZWxlY3QubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubmV4dE1vbnRoUmVmICYmICF0aGlzLm5leHRNb250aERpc2FibGVkKSB7XG4gICAgICAgICAgICBlbGVtZW50VG9Gb2N1cyA9IHRoaXMubmV4dE1vbnRoUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLm5leHRNb250aFJlZiAmJiAhdGhpcy5uZXh0TW9udGhEaXNhYmxlZCkge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLm5leHRNb250aFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5tb250aFNlbGVjdFJlZiAmJiB0aGlzLm1vbnRocy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBlbGVtZW50VG9Gb2N1cyA9IHRoaXMubW9udGhTZWxlY3RSZWYuc2VsZWN0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXZpb3VzTW9udGhSZWYgJiYgIXRoaXMuaXNQcmV2aW91c01vbnRoRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5wcmV2aW91c01vbnRoUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5mb2N1c0VsZW1lbnQoZXZlbnQsIGVsZW1lbnRUb0ZvY3VzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgY29uc3QgYWN0aXZlRGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2VcbiAgICAgICAgICAuZ2V0RGF5cyh0aGlzLndlZWtzKVxuICAgICAgICAgIC5maW5kKHggPT4geCAmJiB0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZURhdGUodGhpcy5kYXRlU2VydmljZS51dGNEYXRlKHguZGF0ZSksIHRoaXMuYWN0aXZlRGF0ZSkpO1xuXG4gICAgICAgIGlmICh0aGlzLmF2YWlsYWJpbGl0eSAmJiBhY3RpdmVEYXk/LmlzQXZhaWxhYmxlICYmICFhY3RpdmVEYXk/LmlzRGlzYWJsZWQgfHwgIXRoaXMuYXZhaWxhYmlsaXR5KSB7XG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZERhdGUodGhpcy5hY3RpdmVEYXRlKTtcbiAgICAgICAgICB0aGlzLmZvY3VzT25OZXh0Q2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIEBEZWJvdW5jZSgxNTApXG4gIG9uUHJldmlvdXNNb250aEtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBsZXQgZWxlbWVudFRvRm9jdXM6IEhUTUxFbGVtZW50O1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdUYWInOlxuICAgICAgICBpZiAoIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgaWYgKHRoaXMubW9udGhTZWxlY3RSZWYgJiYgdGhpcy5tb250aHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLm1vbnRoU2VsZWN0UmVmLnNlbGVjdC5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5uZXh0TW9udGhSZWYgJiYgIXRoaXMubmV4dE1vbnRoRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5uZXh0TW9udGhSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLmFjdGl2ZURhdGVDZWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbGVtZW50VG9Gb2N1cyA9IHRoaXMuYWN0aXZlRGF0ZUNlbGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZvY3VzRWxlbWVudChldmVudCwgZWxlbWVudFRvRm9jdXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgdGhpcy5nZXRQcmV2aW91c01vbnRoKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgQERlYm91bmNlKDE1MClcbiAgb25OZXh0TW9udGhLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgbGV0IGVsZW1lbnRUb0ZvY3VzOiBIVE1MRWxlbWVudDtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgaWYgKCFldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5hY3RpdmVEYXRlQ2VsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5tb250aFNlbGVjdFJlZiAmJiB0aGlzLm1vbnRocy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBlbGVtZW50VG9Gb2N1cyA9IHRoaXMubW9udGhTZWxlY3RSZWYuc2VsZWN0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9uUHJldmlvdXNNb250aEtleWRvd24gJiYgIXRoaXMuaXNQcmV2aW91c01vbnRoRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5wcmV2aW91c01vbnRoUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5hY3RpdmVEYXRlQ2VsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZvY3VzRWxlbWVudChldmVudCwgZWxlbWVudFRvRm9jdXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5nZXROZXh0TW9udGgoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgQERlYm91bmNlKDIwMClcbiAgb25OZXh0TW9udGhNb3VzZWRvd24oKTogdm9pZCB7XG4gICAgdGhpcy5nZXROZXh0TW9udGgoKTtcbiAgfVxuXG4gIEBEZWJvdW5jZSgyMDApXG4gIG9uUHJldmlvdXNNb250aE1vdXNlZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLmdldFByZXZpb3VzTW9udGgoKTtcbiAgfVxuXG4gIG9uTW9udGhTZWxlY3RLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgbGV0IGVsZW1lbnRUb0ZvY3VzOiBIVE1MRWxlbWVudDtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgaWYgKCFldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgIGlmICh0aGlzLm5leHRNb250aFJlZiAmJiAhdGhpcy5uZXh0TW9udGhEaXNhYmxlZCkge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLm5leHRNb250aFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbGVtZW50VG9Gb2N1cyA9IHRoaXMuYWN0aXZlRGF0ZUNlbGw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLm9uUHJldmlvdXNNb250aEtleWRvd24gJiYgIXRoaXMuaXNQcmV2aW91c01vbnRoRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5wcmV2aW91c01vbnRoUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5hY3RpdmVEYXRlQ2VsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZvY3VzRWxlbWVudChldmVudCwgZWxlbWVudFRvRm9jdXMpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBmb2N1c0VsZW1lbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGVsZW1lbnRUb0ZvY3VzOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xuICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgc2V0QWN0aXZlRGF0ZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY3VycmVudE1vbnRoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdG9kYXkgPSB0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUoKTtcbiAgICBjb25zdCBsYXN0RGF5ID0gbmV3IERhdGUodGhpcy5jdXJyZW50TW9udGgueWVhciwgdGhpcy5jdXJyZW50TW9udGgubW9udGggKyAxLCAwKTtcbiAgICBjb25zdCBuZXdEYXRlID0gdGhpcy5hY3RpdmVEYXRlPy5kYXRlID4gbGFzdERheS5nZXREYXRlKCkgPyBsYXN0RGF5LmdldERhdGUoKSA6IHRoaXMuYWN0aXZlRGF0ZT8uZGF0ZTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRNb250aC5tb250aCAhPT0gdG9kYXkubW9udGggfHwgdGhpcy5jdXJyZW50TW9udGgueWVhciAhPT0gdG9kYXkueWVhcikge1xuICAgICAgY29uc3QgbmV4dE1vbnRoID0gdGhpcy5jdXJyZW50TW9udGgubW9udGg7XG4gICAgICBjb25zdCBuZXh0WWVhciA9IHRoaXMuY3VycmVudE1vbnRoLnllYXI7XG5cbiAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IG5ldyBVdGNEYXRlKG5leHRZZWFyLCBuZXh0TW9udGgsIG5ld0RhdGUpO1xuXG4gICAgfSBlbHNlIGlmICh0aGlzLmFjdGl2ZURhdGUgJiYgdGhpcy5hY3RpdmVEYXRlLm1vbnRoICE9PSB0aGlzLmN1cnJlbnRNb250aC5tb250aCkge1xuICAgICAgdGhpcy5hY3RpdmVEYXRlID0gbmV3IFV0Y0RhdGUodGhpcy5hY3RpdmVEYXRlVmFsdWUueWVhciwgdGhpcy5jdXJyZW50TW9udGgubW9udGgsIG5ld0RhdGUpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIG9uTW91c2VEb3duKGRhdGU6IHN0cmluZywgZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNldFNlbGVjdGVkRGF0ZSh0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUoZGF0ZSkpO1xuICAgIHRoaXMuZm9jdXNPbk5leHRDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICBvbkRheUZvY3VzKGRheTogRGF5TW9kZWwpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUoZGF5LmRhdGUpO1xuICB9XG5cbiAgb25EYXlDbGljayhkYXk6IERheU1vZGVsKTogdm9pZCB7XG4gICAgaWYgKCFkYXkuaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNldFNlbGVjdGVkRGF0ZSh0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUoZGF5LmRhdGUpKTtcbiAgfVxuXG4gIHNldFNlbGVjdGVkRGF0ZShkYXRlOiBVdGNEYXRlKTogdm9pZCB7XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubmFzRm9ybUdyb3VwICYmIHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lKTtcblxuICAgICAgY29uc3QgY2FsZW5kYXJEYXRlOiBDYWxlbmRhckRhdGVNb2RlbCA9IHtcbiAgICAgICAgbW9kZWw6IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuZGF0ZVNlcnZpY2UuZGF0ZShkYXRlKSwgdGhpcy5kYXRlRGlzcGxheUZvcm1hdCwgJ1VUQycsIHRoaXMubG9jYWxlKSxcbiAgICAgICAgZGF0ZTogZGF0ZVxuICAgICAgfTtcblxuICAgICAgY29udHJvbC5wYXRjaFZhbHVlKGNhbGVuZGFyRGF0ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZERhdGVDaGFuZ2UuZW1pdChkYXRlKTtcblxuICAgIGlmICh0aGlzLndlZWtzICYmIHRoaXMud2Vla3MubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCB3ZWVrIG9mIHRoaXMud2Vla3MpIHtcbiAgICAgICAgaWYgKCF3ZWVrKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGRheSBvZiB3ZWVrLmRheXMpIHtcbiAgICAgICAgICBpZiAoIWRheSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF5LmlzU2VsZWN0ZWQgPSBkYXkuaXNBdmFpbGFibGVcbiAgICAgICAgICAgICYmIHRoaXMuZGF0ZVNlcnZpY2UuaXNTYW1lRGF0ZSh0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUoZGF5LmRhdGUpLCBkYXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldENlbGxCdXR0b25DbGFzcyhkYXk6IERheU1vZGVsKTogQ2xhc3NNb2RlbCB7XG4gICAgaWYgKCFkYXkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENsYXNzKCdpdGVtJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2xhc3MoJ2l0ZW0nLCBbXG4gICAgICBkYXkuaXNEaXNhYmxlZCAmJiAnYmVmb3JlJyxcbiAgICAgIGRheS5pc1NlbGVjdGVkICYmICdzZWxlY3RlZCcsXG4gICAgICAhdGhpcy5kYXRlU2VydmljZS5pc1NhbWVNb250aCh0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUoZGF5LmRhdGUpLCB0aGlzLmN1cnJlbnRNb250aCkgJiYgJ2VtcHR5JyxcbiAgICAgIGRheS5pc0F2YWlsYWJsZSAmJiAnYXZhaWxhYmxlJyxcbiAgICAgICdsYXJnZScsXG4gICAgICBkYXkuaXNBY3RpdmUgJiYgJ2FjdGl2ZSdcbiAgICBdKTtcbiAgfVxuXG4gIGdldE5leHRNb250aCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMud2Vla3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmaXJzdFdlZWsgPSB0aGlzLndlZWtzWzBdO1xuXG4gICAgaWYgKCFmaXJzdFdlZWspIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmaXJzdFZhbGlkRGF5ID0gZmlyc3RXZWVrLmRheXNcbiAgICAgIC5maW5kKGRheSA9PiBkYXkgJiYgdGhpcy5kYXRlU2VydmljZS5pc1NhbWVNb250aCh0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUoZGF5LmRhdGUpLCB0aGlzLmN1cnJlbnRNb250aCkpO1xuXG4gICAgaWYgKCFmaXJzdFZhbGlkRGF5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV4dE1vbnRoID0gdGhpcy5kYXRlU2VydmljZS51dGNEYXRlKGZpcnN0VmFsaWREYXkuZGF0ZSk7XG4gICAgY29uc3QgbW9udGggPSBuZXh0TW9udGgubW9udGggKyAxO1xuICAgIG5leHRNb250aC5zZXRNb250aChtb250aCk7XG5cbiAgICB0aGlzLmN1cnJlbnRNb250aCA9IG5leHRNb250aDtcblxuICAgIHRoaXMuYXBwbHlTZWxlY3RlZERhdGVDaGFuZ2VzKCk7XG4gICAgdGhpcy5tb250aENoYW5nZS5lbWl0KHRoaXMuY3VycmVudE1vbnRoKTtcbiAgICB0aGlzLnNldFByZXZpb3VzTW9udGhEaXNhYmxlZCgpO1xuXG4gICAgaWYgKCF0aGlzLmF2YWlsYWJpbGl0eSkge1xuICAgICAgdGhpcy5tYXhNb250aEluZGV4Kys7XG4gICAgfVxuICB9XG5cbiAgZ2V0UHJldmlvdXNNb250aCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMud2Vla3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmaXJzdFdlZWsgPSB0aGlzLndlZWtzWzBdO1xuXG4gICAgaWYgKCFmaXJzdFdlZWspIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmaXJzdFZhbGlkRGF5ID0gZmlyc3RXZWVrLmRheXNcbiAgICAgIC5maW5kKGRheSA9PiBkYXkgJiYgdGhpcy5kYXRlU2VydmljZS5pc1NhbWVNb250aCh0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUoZGF5LmRhdGUpLCB0aGlzLmN1cnJlbnRNb250aCkpO1xuXG4gICAgY29uc3QgcHJldmlvdXNNb250aCA9IHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZShmaXJzdFZhbGlkRGF5LmRhdGUpO1xuICAgIGNvbnN0IG1vbnRoID0gcHJldmlvdXNNb250aC5tb250aCAtIDE7XG4gICAgcHJldmlvdXNNb250aC5zZXRNb250aChtb250aCk7XG5cbiAgICB0aGlzLmN1cnJlbnRNb250aCA9IHByZXZpb3VzTW9udGg7XG5cbiAgICB0aGlzLmFwcGx5U2VsZWN0ZWREYXRlQ2hhbmdlcygpO1xuICAgIHRoaXMubW9udGhDaGFuZ2UuZW1pdCh0aGlzLmN1cnJlbnRNb250aCk7XG4gICAgdGhpcy5zZXRQcmV2aW91c01vbnRoRGlzYWJsZWQoKTtcbiAgfVxuXG4gIHNldFByZXZpb3VzTW9udGhEaXNhYmxlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jdXJyZW50TW9udGgpIHtcbiAgICAgIGNvbnN0IHByZXZpb3VzTW9udGggPSBuZXcgVXRjRGF0ZSh0aGlzLmN1cnJlbnRNb250aC55ZWFyLCB0aGlzLmN1cnJlbnRNb250aC5tb250aCwgdGhpcy5jdXJyZW50TW9udGguZGF0ZSk7XG4gICAgICBjb25zdCBtb250aCA9IHByZXZpb3VzTW9udGgubW9udGggLSAxO1xuICAgICAgcHJldmlvdXNNb250aC5zZXRNb250aChtb250aCk7XG5cbiAgICAgIGlmICh0aGlzLmRpc2FibGVQYXN0U2VsZWN0aW9uICYmIHRoaXMuZGF0ZVNlcnZpY2UuaXNJblRoZVBhc3QocHJldmlvdXNNb250aCwgdHJ1ZSkpIHtcbiAgICAgICAgdGhpcy5pc1ByZXZpb3VzTW9udGhEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmlzUHJldmlvdXNNb250aERpc2FibGVkID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5U2VsZWN0ZWREYXRlQ2hhbmdlcygpIHtcbiAgICB0aGlzLmF2YWlsYWJsZURheXMgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5nZXRBdmFpbGFibGVEYXlzKFxuICAgICAgdGhpcy5jdXJyZW50TW9udGgsXG4gICAgICB0aGlzLmF2YWlsYWJsZURhdGVzLFxuICAgICAgdGhpcy5hdmFpbGFiaWxpdHksXG4gICAgICB0aGlzLmRpc2FibGVQYXN0U2VsZWN0aW9uLFxuICAgICAgdGhpcy5sb3dlckxpbWl0RGF0ZSxcbiAgICAgIHRoaXMuYWN0aXZlRGF0ZSxcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRNb250aCA9IHRoaXMubW9udGhzXG4gICAgICAuZmluZCh4ID0+IHRoaXMuZGF0ZVNlcnZpY2UuaXNTYW1lTW9udGgodGhpcy5kYXRlU2VydmljZS51dGNEYXRlKHgudmFsdWUpLCB0aGlzLmN1cnJlbnRNb250aCkpO1xuXG4gICAgdGhpcy5jYWxlbmRhclNlcnZpY2UudXBkYXRlQXZhaWxhYmxlRGF5c1dpdGhTZWxlY3RlZERhdGUodGhpcy5hdmFpbGFibGVEYXlzLCB0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgdGhpcy53ZWVrcyA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmdldFdlZWtzKHRoaXMuYXZhaWxhYmxlRGF5cywgdGhpcy53ZWVrU3RhcnQpO1xuICB9XG59XG4iLCI8ZGl2IFtuYXNDbGFzc109XCJnZXRDbGFzcygpXCI+XG4gIDxzcGFuIFtuYXNDbGFzc109XCJnZXRDbGFzcygnYXJyb3cnKVwiPjwvc3Bhbj5cbiAgPGRpdiAjY2FsZW5kYXJDb250ZW50XG4gICAgdGFiaW5kZXg9XCIwXCJcbiAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2NvbnRlbnQnKVwiPlxuICAgIDxoZWFkZXIgW25hc0NsYXNzXT1cImdldENsYXNzKCdoZWFkZXInKVwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgI3ByZXZpb3VzTW9udGhSZWZcbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxQcmV2aW91c01vbnRoXCJcbiAgICAgICAgW25hc0NsYXNzXT1cImdldENsYXNzKCduYXYnKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc1ByZXZpb3VzTW9udGhEaXNhYmxlZCA9PT0gdHJ1ZVwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uUHJldmlvdXNNb250aEtleWRvd24oJGV2ZW50KVwiXG4gICAgICAgIChtb3VzZWRvd24pPVwib25QcmV2aW91c01vbnRoTW91c2Vkb3duKClcIj5cbiAgICAgICAgPG5hcy1pY29uIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgIFt0eXBlXT1cIidhcnJvdy1sZWZ0LS1saWdodCdcIj48L25hcy1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9udGhzPy5sZW5ndGggPiAwOyBlbHNlIGN1cnJlbnRNb250aFRlbXBsYXRlXCI+XG4gICAgICAgIDxuYXMtc2VsZWN0ICNtb250aFNlbGVjdFxuICAgICAgICAgIFtjc3NDbGFzc109XCJnZXRDbGFzcygnbW9udGgnKVwiXG4gICAgICAgICAgW2lubGluZV09XCJ0cnVlXCJcbiAgICAgICAgICBbc2ltcGxlXT1cInRydWVcIlxuICAgICAgICAgIFtvcHRpb25zXT1cIm1vbnRoc1wiXG4gICAgICAgICAgWyhzZWxlY3RlZCldPVwic2VsZWN0ZWRNb250aFwiXG4gICAgICAgICAgKGtleWRvd24pPVwib25Nb250aFNlbGVjdEtleWRvd24oJGV2ZW50KVwiPjwvbmFzLXNlbGVjdD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNjdXJyZW50TW9udGhUZW1wbGF0ZT5cbiAgICAgICAge3tjdXJyZW50TW9udGhNb2RlbH19XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgI25leHRNb250aFJlZlxuICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ25hdicpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxOZXh0TW9udGhcIlxuICAgICAgICBbZGlzYWJsZWRdPVwibmV4dE1vbnRoRGlzYWJsZWRcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbk5leHRNb250aEtleWRvd24oJGV2ZW50KVwiXG4gICAgICAgIChtb3VzZWRvd24pPVwib25OZXh0TW9udGhNb3VzZWRvd24oKVwiPlxuICAgICAgICA8bmFzLWljb24gW3R5cGVdPVwiJ2Fycm93LXJpZ2h0LS1saWdodCdcIj48L25hcy1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9oZWFkZXI+XG4gICAgPHRhYmxlIFtuYXNDbGFzc109XCJnZXRDbGFzcygndGFibGUnKVwiPlxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRoICpuZ0lmPVwiZXhpc3RzKGRpc3BsYXlXZWVrTnVtYmVycylcIlxuICAgICAgICAgICAgW25hc0NsYXNzXT1cImdldENsYXNzKCd3ZWVrLW51bWJlcicpXCI+PC90aD5cbiAgICAgICAgICA8dGggW25hc0NsYXNzXT1cImdldENsYXNzKCdjZWxsJylcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHdlZWtkYXkgb2Ygd2Vla2RheXNcIj5cbiAgICAgICAgICAgIDxkaXYgW25hc0NsYXNzXT1cImdldENsYXNzKCdpdGVtJywgJ2hlYWRlcicpXCI+e3t3ZWVrZGF5fX08L2Rpdj5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keT5cbiAgICAgICAgPHRyICpuZ0Zvcj1cImxldCB3ZWVrIG9mIHdlZWtzXCJcbiAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3JvdycsICdhbmltYXRlJylcIj5cbiAgICAgICAgICA8dGQgKm5nSWY9XCJleGlzdHMoZGlzcGxheVdlZWtOdW1iZXJzKVwiXG4gICAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3dlZWstbnVtYmVyJylcIj5cbiAgICAgICAgICAgIDxzcGFuIFtuYXNDbGFzc109XCJnZXRDbGFzcygnZGF0ZScsICd3ZWVrLW51bWJlcicpXCI+e3t3ZWVrLndlZWtOdW1iZXJ9fTwvc3Bhbj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZCBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2NlbGwnKVwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF5IG9mIHdlZWs/LmRheXNcIlxuICAgICAgICAgICAgI3RhYmxlQ2VsbHM+XG4gICAgICAgICAgICA8ZGl2IFtuYXNDbGFzc109XCJnZXRDbGFzcygnaXRlbScsICdkdW1teScpXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJkYXkgPT09IG51bGw7IGVsc2UgZGF5VGVtcGxhdGVcIj48L2Rpdj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGF5VGVtcGxhdGVcbiAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgI2RhdGVCdXR0b25cbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJkYXRlS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICB0YWJJbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgIFtuYXNDbGFzc109XCJnZXRDZWxsQnV0dG9uQ2xhc3MoZGF5KVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJvbk1vdXNlRG93bihkYXkuZGF0ZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGF5Q2xpY2soZGF5KVwiXG4gICAgICAgICAgICAgICAgKGZvY3VzKT1cIm9uRGF5Rm9jdXMoZGF5KVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgW25hc0NsYXNzXT1cImdldENsYXNzKCdkYXRlLXdyYXBwZXInKVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCdkYXRlJylcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImRheS5kYXRlIHwgZGF0ZSA6ICdkZCc6J1VUQydcIj57e2RheS5kYXRlIHwgZGF0ZSA6ICdkZCc6J1VUQyc6bG9jYWxlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90Ym9keT5cbiAgICA8L3RhYmxlPlxuICAgIDxkaXYgW25hc0NsYXNzXT1cImdldENsYXNzKCdmb290ZXInKVwiPlxuICAgICAgPGRpdiAqbmdJZj1cImF2YWlsYWJsZURhdGVzPy5sZW5ndGggPT09IDAgJiYgbm9BdmFpbGFibGVGbGlnaHRzTGFiZWxcIlxuICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2Zvb3RlcicsICdpdGVtJylcIj5cbiAgICAgICAgPG5hcy1pY29uIFtpY29uXT1cIidhbGVydCdcIj48L25hcy1pY29uPlxuICAgICAgICB7e25vQXZhaWxhYmxlRmxpZ2h0c0xhYmVsfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cImF2YWlsYWJsZURhdGVzPy5sZW5ndGggPiAwICYmIG5vQXZhaWxhYmxlRmxpZ2h0c0xhYmVsICYmIGF2YWlsYWJsZUZsaWdodHNMYWJlbFwiXG4gICAgICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygnZm9vdGVyJywgJ2l0ZW0nKVwiPlxuICAgICAgICA8ZGl2IFtuYXNDbGFzc109XCJnZXRDbGFzcygnaXRlbScsICdhdmFpbGFibGUnKVwiPjwvZGl2PlxuICAgICAgICA8ZGl2IFtuYXNDbGFzc109XCJnZXRDbGFzcygnZm9vdGVyJywgJ2xhYmVsJylcIj57e2F2YWlsYWJsZUZsaWdodHNMYWJlbH19PC9kaXY+XG4gICAgICAgIDxzcGFuIFtuYXNDbGFzc109XCJnZXRDbGFzcygnaXRlbScsICd1bmF2YWlsYWJsZScpXCI+PC9zcGFuPlxuICAgICAgICA8ZGl2IFtuYXNDbGFzc109XCJnZXRDbGFzcygnZm9vdGVyJywgJ2xhYmVsJylcIj57e25vQXZhaWxhYmxlRmxpZ2h0c0xhYmVsfX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -28,6 +28,7 @@ export class DatepickerComponent extends NasComponentBase {
|
|
|
28
28
|
});
|
|
29
29
|
}
|
|
30
30
|
/**
|
|
31
|
+
* @property Input
|
|
31
32
|
* @description
|
|
32
33
|
* The lowest date allowed.
|
|
33
34
|
*/
|
|
@@ -41,6 +42,7 @@ export class DatepickerComponent extends NasComponentBase {
|
|
|
41
42
|
}
|
|
42
43
|
}
|
|
43
44
|
/**
|
|
45
|
+
* @property Input
|
|
44
46
|
* @description
|
|
45
47
|
* boolean value to disable or enable the input of the date picker.
|
|
46
48
|
*/
|
|
@@ -65,6 +67,7 @@ export class DatepickerComponent extends NasComponentBase {
|
|
|
65
67
|
}
|
|
66
68
|
}
|
|
67
69
|
/**
|
|
70
|
+
* @property Input
|
|
68
71
|
* @description
|
|
69
72
|
* An array of times to be added in the time selector.
|
|
70
73
|
*/
|
|
@@ -87,6 +90,7 @@ export class DatepickerComponent extends NasComponentBase {
|
|
|
87
90
|
this.dateDisplayFormat = 'mediumDate';
|
|
88
91
|
}
|
|
89
92
|
/**
|
|
93
|
+
* @property Input
|
|
90
94
|
* @description
|
|
91
95
|
* The calendar is open or closed.
|
|
92
96
|
*/
|
|
@@ -106,6 +110,7 @@ export class DatepickerComponent extends NasComponentBase {
|
|
|
106
110
|
}
|
|
107
111
|
}
|
|
108
112
|
/**
|
|
113
|
+
* @property Input
|
|
109
114
|
* @description
|
|
110
115
|
* Set selected month.
|
|
111
116
|
*/
|
|
@@ -125,6 +130,7 @@ export class DatepickerComponent extends NasComponentBase {
|
|
|
125
130
|
});
|
|
126
131
|
}
|
|
127
132
|
/**
|
|
133
|
+
* @property Input
|
|
128
134
|
* @description
|
|
129
135
|
* Gets or sets the selected Date in the date picker. Setting this date will highlight the date in the date picker
|
|
130
136
|
* and user can change it by clicking from any other enabled dates
|
|
@@ -163,6 +169,7 @@ export class DatepickerComponent extends NasComponentBase {
|
|
|
163
169
|
}
|
|
164
170
|
}
|
|
165
171
|
/**
|
|
172
|
+
* @property Input
|
|
166
173
|
* @description
|
|
167
174
|
* Sets the selected time in the time selector.
|
|
168
175
|
*/
|
|
@@ -220,43 +227,51 @@ export class DatepickerComponent extends NasComponentBase {
|
|
|
220
227
|
this.dateService = dateService;
|
|
221
228
|
this.show = false;
|
|
222
229
|
/**
|
|
230
|
+
* @property Input
|
|
223
231
|
* @description
|
|
224
232
|
* The display format of the date when user has selected the date and it is being shown in the input box for the date picker.
|
|
225
233
|
* Please look at the angular Date pipe for valid formats and variations.
|
|
226
234
|
*/
|
|
227
235
|
this.dateDisplayFormat = 'EEEE d, MMMM yyyy';
|
|
228
236
|
/**
|
|
237
|
+
* @property Input
|
|
229
238
|
* @description
|
|
230
239
|
* The time display format.
|
|
231
240
|
*/
|
|
232
241
|
this.timeDisplayFormat = 'HH:mm';
|
|
233
242
|
/**
|
|
243
|
+
* @property Input
|
|
234
244
|
* @description
|
|
235
245
|
* A locale code for the locale format rules to use. When not supplied, uses the value of LOCALE_ID, which is en-US by default.
|
|
236
246
|
* This requires that registerLocaleData is called with the respective locale.
|
|
237
247
|
*/
|
|
238
248
|
this.locale = 'en-US';
|
|
239
249
|
/**
|
|
250
|
+
* @property Output
|
|
240
251
|
* @description
|
|
241
252
|
* Date selected by the user by clicking in date-picker date-box.
|
|
242
253
|
*/
|
|
243
254
|
this.selectedDateChange = new EventEmitter();
|
|
244
255
|
/**
|
|
256
|
+
* @property Output
|
|
245
257
|
* @description
|
|
246
258
|
* Month selected by the user by clicking in drop down for month selection or month navigation buttons.
|
|
247
259
|
*/
|
|
248
260
|
this.selectedMonthChange = new EventEmitter();
|
|
249
261
|
/**
|
|
262
|
+
* @property Output
|
|
250
263
|
* @description
|
|
251
264
|
* The calendar is open or closed.
|
|
252
265
|
*/
|
|
253
266
|
this.openChange = new EventEmitter();
|
|
254
267
|
/**
|
|
268
|
+
* @property Output
|
|
255
269
|
* @description
|
|
256
270
|
* When a user has actively changed the date.
|
|
257
271
|
*/
|
|
258
272
|
this.focusOnNextChange = new EventEmitter();
|
|
259
273
|
/**
|
|
274
|
+
* @property Output
|
|
260
275
|
* @description
|
|
261
276
|
* When a user has pressed shift + tab to go to previous control.
|
|
262
277
|
*/
|
|
@@ -547,4 +562,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.5", ngImpor
|
|
|
547
562
|
}], focusOnPreviousChange: [{
|
|
548
563
|
type: Output
|
|
549
564
|
}] } });
|
|
550
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFFbEIsTUFBTSxlQUFlLENBQUM7QUFLdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFdEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7Ozs7OztBQUszRDs7O0dBR0c7QUFPSCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsZ0JBQWdCO0lBTXZELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFDRCxJQUFJLFlBQVksQ0FBQyxLQUFjO1FBQzdCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7WUFDdkIsT0FBTztTQUNSO1FBRUQsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQXFDRDs7O09BR0c7SUFDSCxJQUNJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7SUFDbEMsQ0FBQztJQUNELElBQUksY0FB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QixLQUFLO2dCQU1HLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFPRixjQUFjO3NCQURqQixLQUFLO2dCQWdCRyxZQUFZO3NCQUFwQixLQUFLO2dCQU1HLGNBQWM7c0JBQXRCLEtBQUs7Z0JBT0YsUUFBUTtzQkFEWCxLQUFLO2dCQTRCRyxXQUFXO3NCQUFuQixLQUFLO2dCQU1HLFFBQVE7c0JBQWhCLEtBQUs7Z0JBTUcsZUFBZTtzQkFBdkIsS0FBSztnQkFNRyxTQUFTO3NCQUFqQixLQUFLO2dCQU9HLGlCQUFpQjtzQkFBekIsS0FBSztnQkFNRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBT0csTUFBTTtzQkFBZCxLQUFLO2dCQU1HLE9BQU87c0JBQWYsS0FBSztnQkFRRyxZQUFZO3NCQUFwQixLQUFLO2dCQVFHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFPRixLQUFLO3NCQURSLEtBQUs7Z0JBNEJGLElBQUk7c0JBRFAsS0FBSztnQkF1QkYsYUFBYTtzQkFEaEIsS0FBSztnQkEwQkYsWUFBWTtzQkFEZixLQUFLO2dCQWlERixZQUFZO3NCQURmLEtBQUs7Z0JBeUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFNRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBTUksa0JBQWtCO3NCQUEzQixNQUFNO2dCQU1HLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFNRyxVQUFVO3NCQUFuQixNQUFNO2dCQU1HLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFNRyxxQkFBcUI7c0JBQTlCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgTm9yd2VnaWFuIEFpciBTaHV0dGxlLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgT25Jbml0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF5TW9kZWwgfSBmcm9tICcuL2NhbGVuZGFyL21vZGVscy9kYXkubW9kZWwnO1xuaW1wb3J0IHsgU2VsZWN0T3B0aW9uTW9kZWwgfSBmcm9tICcuL2NhbGVuZGFyL21vZGVscy9zZWxlY3Qtb3B0aW9uLm1vZGVsJztcbmltcG9ydCB7IE5hc0NvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi9jb3JlL2Jhc2UvbmFzLWNvbXBvbmVudC5iYXNlJztcbmltcG9ydCB7IENsYXNzTW9kZWwgfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9jbGFzcy5tb2RlbCc7XG5pbXBvcnQgeyBVdGNEYXRlIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvdXRjLWRhdGUubW9kZWwnO1xuaW1wb3J0IHsgRGF0ZUhlbHBlciB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvZGF0ZS9kYXRlLWhlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7IENhbGVuZGFyRGF0ZU1vZGVsIH0gZnJvbSAnLi9jYWxlbmRhci9jYWxlbmRhci1kYXRlLm1vZGVsJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqIE5vcndlZ2lhbiBEYXRlIFBpY2tlciBDb21wb25lbnQgfCBGdW5jdGlvbmFsXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25hcy1kYXRlcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRlcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZXBpY2tlckNvbXBvbmVudCBleHRlbmRzIE5hc0NvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQge1xuICB0aW1lT3B0aW9uczogQXJyYXk8U2VsZWN0T3B0aW9uTW9kZWw+O1xuICBtb2RlbDogc3RyaW5nO1xuICBzaG93ID0gZmFsc2U7XG4gIHNlbGVjdGVkVGltZU9wdGlvbjogU2VsZWN0T3B0aW9uTW9kZWw7XG5cbiAgZ2V0IHNob3dCYWNrZHJvcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93ICYmICF0aGlzLmV4aXN0cyh0aGlzLmRpc2FibGVCYWNrZHJvcCk7XG4gIH1cbiAgc2V0IHNob3dCYWNrZHJvcCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLnNob3cgPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNob3cgPSB2YWx1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ2lucHV0JykgaW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyJykgY2FsZW5kYXI6IENhbGVuZGFyQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdkYXRlUGlja2VyQ29udGVudCcpIGRhdGVQaWNrZXJDb250ZW50OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0aW1lU2VsZWN0b3InKSB0aW1lU2VsZWN0b3I6IFNlbGVjdENvbXBvbmVudDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFkZHMgJ2FyaWEtbGFiZWwnIHRvIHRoZSBiYWNrZHJvcHMuXG4gICAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWxCYWNrZHJvcDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBib29sZWFuIHZhbHVlIHdoZW4gc2V0IHdpbGwgZGlzYWJsZSBzaG93aW5nIHRoZSBiYWNrZHJvcCBvbiBwb3B1cCBvcGVuXG4gICAqL1xuICBASW5wdXQoKSBkaXNhYmxlQmFja2Ryb3A6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBMYWJlbCBmb3Igbm8gYXZhaWxhYmxlIGZsaWdodHMuXG4gICAqL1xuICBASW5wdXQoKSBub0F2YWlsYWJsZUZsaWdodHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yIGF2YWlsYWJsZSBmbGlnaHRzLlxuICAgKi9cbiAgQElucHV0KCkgYXZhaWxhYmxlRmxpZ2h0c0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEaXNhYmxlIHBvc3NpYmlsaXR5IHRvIHNlbGVjdCBkYXRlcyBpbiB0aGUgcGFzdC5cbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVQYXN0U2VsZWN0aW9uOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIGxvd2VzdCBkYXRlIGFsbG93ZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgbG93ZXJMaW1pdERhdGUoKTogVXRjRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMubG93ZXJMaW1pdERhdGVWYWx1ZTtcbiAgfVxuICBzZXQgbG93ZXJMaW1pdERhdGUoZGF0ZTogVXRjRGF0ZSkge1xuICAgIHRoaXMubG93ZXJMaW1pdERhdGVWYWx1ZSA9IGRhdGU7XG5cbiAgICBpZiAodGhpcy5kYXRlU2VydmljZS5pc0xlc3NUaGFuKHRoaXMuc2VsZWN0ZWREYXRlLCBkYXRlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSkpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gZGF0ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgdGhlIGRhdGVwaWNrZXIgaW4gYXZhaWxhYmlsaXR5IG1vZGUgd2hlcmUgYXZhaWxhYmxlIGRhdGVzIGNhbiBiZSBhZGRlZC5cbiAgICovXG4gIEBJbnB1dCgpIGF2YWlsYWJpbGl0eTogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFuIGFycmF5IHdpdGggYWxsIHRoZSBhdmFpbGFibGUgKHNlbGVjdGFibGUpIGRhdGVzIG9mIHRoZSBtb250aC5cbiAgICovXG4gIEBJbnB1dCgpIGF2YWlsYWJsZURhdGVzOiBBcnJheTxVdGNEYXRlPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIGJvb2xlYW4gdmFsdWUgdG8gZGlzYWJsZSBvciBlbmFibGUgdGhlIGlucHV0IG9mIHRoZSBkYXRlIHBpY2tlci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlZFZhbHVlO1xuICB9XG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuZGlzYWJsZWRWYWx1ZSA9IHZhbHVlO1xuXG4gICAgaWYgKHRoaXMubmFzRm9ybUdyb3VwICYmIHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMubmFzRm9ybUdyb3VwLmdldCh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZSk7XG5cbiAgICAgICAgaWYgKCFjb250cm9sKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgY29udHJvbC5kaXNhYmxlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udHJvbC5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIHBsYWNlIGhvbGRlciBzdHJpbmcgZm9yIHRoZSBpbnB1dCBmb3IgZGF0ZSBwaWNrZXIuXG4gICAqL1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogdGhpcyB3aWxsIHNldCB0aGUgcmVxdWlyZWQgYXR0cmlidXRlIG9uIHRoZSBpbnB1dCBzbyBzdWVyIGhhcyB0byBkYXRlLXBpY2tlciB0aGUgZGF0ZS5cbiAgICovXG4gIEBJbnB1dCgpIHJlcXVpcmVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSXMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgSURzIG9mIHRoZSBlbGVtZW50cyB0aGF0IGRlc2NyaWJlIHRoZSBkYXRlIHBpY2tlciBpbnB1dC5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFEZXNjcmliZWRieTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQXJpYSBsYWJlbCBmb3IgaW5wdXQgdGhhdCBlbmFibGVzIGRhdGUtcGlja2VyIHBvcHVwIG9uY2UgY2xpY2tlZC4gRm9yIGFjY2Vzc2liaWxpdHkgd2ViIHN0YW5kYXJkcy5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIGRpc3BsYXkgZm9ybWF0IG9mIHRoZSBkYXRlIHdoZW4gdXNlciBoYXMgc2VsZWN0ZWQgdGhlIGRhdGUgYW5kIGl0IGlzIGJlaW5nIHNob3duIGluIHRoZSBpbnB1dCBib3ggZm9yIHRoZSBkYXRlIHBpY2tlci5cbiAgICogUGxlYXNlIGxvb2sgYXQgdGhlIGFuZ3VsYXIgRGF0ZSBwaXBlIGZvciB2YWxpZCBmb3JtYXRzIGFuZCB2YXJpYXRpb25zLlxuICAgKi9cbiAgQElucHV0KCkgZGF0ZURpc3BsYXlGb3JtYXQgPSAnRUVFRSBkLCBNTU1NIHl5eXknO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIHRpbWUgZGlzcGxheSBmb3JtYXQuXG4gICAqL1xuICBASW5wdXQoKSB0aW1lRGlzcGxheUZvcm1hdCA9ICdISDptbSc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxvY2FsZSBjb2RlIGZvciB0aGUgbG9jYWxlIGZvcm1hdCBydWxlcyB0byB1c2UuIFdoZW4gbm90IHN1cHBsaWVkLCB1c2VzIHRoZSB2YWx1ZSBvZiBMT0NBTEVfSUQsIHdoaWNoIGlzIGVuLVVTIGJ5IGRlZmF1bHQuXG4gICAqIFRoaXMgcmVxdWlyZXMgdGhhdCByZWdpc3RlckxvY2FsZURhdGEgaXMgY2FsbGVkIHdpdGggdGhlIHJlc3BlY3RpdmUgbG9jYWxlLlxuICAgKi9cbiAgQElucHV0KCkgbG9jYWxlID0gJ2VuLVVTJztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbW9kaWZpZXIgdG8gcmVtb3ZlIHRoZSBwYWRkaW5nIGFuZCBtYXJnaW5zIGFyb3VuZCB0aGUgZWxlbWVudC5cbiAgICovXG4gIEBJbnB1dCgpIGNvbXBhY3Q6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBZGRzIHRoZSBwYXJlbnQncyBmb3JtIGdyb3VwLlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCBpcyByZXF1aWVyZWQgdG8gYmUgZmlsbGVkIGlmIG5hc0Zvcm1Db250cm9sTmFtZSBhZGRlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYSBmb3JtQ29udHJvbE5hbWUgZGlyZWN0aXZlIHRvIHRoZSBpbnB1dC5cbiAgICogSXQgcmVxdWlyZXMgdGhhdCB0aGUgY29uc3VtZXIgaW5jbHVkZWQgUmVhY3RpdmVGb3Jtc01vZHVsZSBpbiBpdCdzIG1vZHVsZS5cbiAgICogSXQgcmVxdWllcnMgdGhhdCB0aGUgbmFzRm9ybUdyb3VwIGlucHV0IGlzIGZpbGxlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Db250cm9sTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gYXJyYXkgb2YgdGltZXMgdG8gYmUgYWRkZWQgaW4gdGhlIHRpbWUgc2VsZWN0b3IuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgdGltZXMoKTogQXJyYXk8VXRjRGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLnRpbWVzVmFsdWU7XG4gIH1cbiAgc2V0IHRpbWVzKHRpbWVzOiBBcnJheTxVdGNEYXRlPikge1xuICAgIGlmICghdGltZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRpbWVzVmFsdWUgPSB0aW1lcztcbiAgICB0aGlzLnRpbWVPcHRpb25zID0gdGltZXMubWFwKHggPT4ge1xuICAgICAgeC55ZWFyID0gbmV3IERhdGUoKS5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgY29uc3Qgb3B0aW9uOiBTZWxlY3RPcHRpb25Nb2RlbCA9IHtcbiAgICAgICAgdGl0bGU6IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuZGF0ZVNlcnZpY2UuZGF0ZSh4KSwgdGhpcy50aW1lRGlzcGxheUZvcm1hdCwgJ1VUQycsIHRoaXMubG9jYWxlKSxcbiAgICAgICAgdmFsdWU6IHRoaXMuZGF0ZVNlcnZpY2UuZGF0ZSh4KS50b0lTT1N0cmluZygpXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gb3B0aW9uO1xuICAgIH0pO1xuXG4gICAgdGhpcy5kYXRlRGlzcGxheUZvcm1hdCA9ICdtZWRpdW1EYXRlJztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIGNhbGVuZGFyIGlzIG9wZW4gb3IgY2xvc2VkLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IG9wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3BlblZhbHVlO1xuICB9XG4gIHNldCBvcGVuKG9wZW46IGJvb2xlYW4pIHtcbiAgICBpZiAob3BlbiA9PT0gdGhpcy5vcGVuVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9wZW5WYWx1ZSA9IG9wZW47XG5cbiAgICBpZiAob3Blbikge1xuICAgICAgdGhpcy5vcGVuQ2FsZW5kYXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbG9zZUNhbGVuZGFyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXQgc2VsZWN0ZWQgbW9udGguXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgc2VsZWN0ZWRNb250aCgpOiBVdGNEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE1vbnRoVmFsdWU7XG4gIH1cbiAgc2V0IHNlbGVjdGVkTW9udGgobW9udGg6IFV0Y0RhdGUpIHtcbiAgICBpZiAoIW1vbnRoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZVNlcnZpY2UuaXNTYW1lTW9udGgodGhpcy5zZWxlY3RlZE1vbnRoVmFsdWUsIG1vbnRoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zZWxlY3RlZE1vbnRoVmFsdWUgPSBtb250aDtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNb250aENoYW5nZS5lbWl0KG1vbnRoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogR2V0cyBvciBzZXRzIHRoZSBzZWxlY3RlZCBEYXRlIGluIHRoZSBkYXRlIHBpY2tlci4gU2V0dGluZyB0aGlzIGRhdGUgd2lsbCBoaWdobGlnaHQgdGhlIGRhdGUgaW4gdGhlIGRhdGUgcGlja2VyXG4gICAqIGFuZCB1c2VyIGNhbiBjaGFuZ2UgaXQgYnkgY2xpY2tpbmcgZnJvbSBhbnkgb3RoZXIgZW5hYmxlZCBkYXRlc1xuICAgKiBvciBieSBuYXZpZ2F0aW5nIGJldHJ3ZWVuIG1vbnRocyBhbmQgc2VsZWN0aW5nIGZyb20gZGlmZmVyZW50IGF2YWlsYWJsZSBtb250aC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBzZWxlY3RlZERhdGUoKTogVXRjRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWREYXRlVmFsdWU7XG4gIH1cbiAgc2V0IHNlbGVjdGVkRGF0ZShkYXRlOiBVdGNEYXRlKSB7XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRlVmFsdWUgJiYgdGhpcy5kYXRlU2VydmljZS5pc1NhbWVEYXRlKHRoaXMuc2VsZWN0ZWREYXRlVmFsdWUsIGRhdGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRUaW1lVmFsdWUpIHtcbiAgICAgIGRhdGUgPSBuZXcgVXRjRGF0ZShkYXRlLnllYXIsIGRhdGUubW9udGgsIGRhdGUuZGF0ZSwgdGhpcy5zZWxlY3RlZFRpbWVWYWx1ZS5ob3VycywgdGhpcy5zZWxlY3RlZFRpbWVWYWx1ZS5taW51dGVzKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkRGF0ZVZhbHVlID0gZGF0ZTtcblxuICAgIGlmICh0aGlzLm5hc0Zvcm1Hcm91cCAmJiB0aGlzLm5hc0Zvcm1Db250cm9sTmFtZSkge1xuXG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lKTtcblxuICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgY29uc3QgY2FsZW5kYXJEYXRlOiBDYWxlbmRhckRhdGVNb2RlbCA9IHtcbiAgICAgICAgICBtb2RlbDogdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5kYXRlU2VydmljZS5kYXRlKGRhdGUpLCB0aGlzLmRhdGVEaXNwbGF5Rm9ybWF0LCAnVVRDJywgdGhpcy5sb2NhbGUpLFxuICAgICAgICAgIGRhdGU6IGRhdGVcbiAgICAgICAgfTtcblxuICAgICAgICBjb250cm9sLnBhdGNoVmFsdWUoY2FsZW5kYXJEYXRlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubW9kZWwgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmRhdGVTZXJ2aWNlLmRhdGUoZGF0ZSksIHRoaXMuZGF0ZURpc3BsYXlGb3JtYXQsICdVVEMnLCB0aGlzLmxvY2FsZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNlbGVjdGVkRGF0ZUNoYW5nZS5lbWl0KGRhdGUpO1xuXG4gICAgaWYgKHRoaXMuc2hvdykge1xuICAgICAgdGhpcy5jbG9zZUNhbGVuZGFyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIHRoZSBzZWxlY3RlZCB0aW1lIGluIHRoZSB0aW1lIHNlbGVjdG9yLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IHNlbGVjdGVkVGltZSgpOiBVdGNEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRpbWVWYWx1ZTtcbiAgfVxuICBzZXQgc2VsZWN0ZWRUaW1lKHRpbWU6IFV0Y0RhdGUpIHtcbiAgICBpZiAoIXRpbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkVGltZVZhbHVlID0gdGltZTtcblxuICAgIGlmICh0aGlzLnRpbWVPcHRpb25zICYmIHRoaXMudGltZU9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgdGltZU9wdGlvbiA9IHRoaXMudGltZU9wdGlvbnMuZmluZCh4ID0+IHgudmFsdWUgPT09IHRoaXMuZGF0ZVNlcnZpY2UuZGF0ZSh0aW1lKS50b0lTT1N0cmluZygpKTtcblxuICAgICAgaWYgKHRpbWVPcHRpb24pIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRpbWVPcHRpb24gPSB0aW1lT3B0aW9uO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBuZXcgVXRjRGF0ZShcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUueWVhcixcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUubW9udGgsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlLmRhdGUsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaW1lVmFsdWUuaG91cnMsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaW1lVmFsdWUubWludXRlcyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmFjdGl2ZURhdGUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbmV3IFV0Y0RhdGUoXG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZS55ZWFyLFxuICAgICAgICB0aGlzLmFjdGl2ZURhdGUubW9udGgsXG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZS5kYXRlLFxuICAgICAgICB0aGlzLnNlbGVjdGVkVGltZVZhbHVlLmhvdXJzLFxuICAgICAgICB0aGlzLnNlbGVjdGVkVGltZVZhbHVlLm1pbnV0ZXNcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBUklBIGxhYmVsIGZvciB0aGUgcHJldmlvdXMgbW9udGggYnV0dG9uIGluIHRoZSBjYWxlbmRhci5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbFByZXZpb3VzTW9udGg6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFSSUEgbGFiZWwgZm9yIHRoZSBuZXh0IG1vbnRoIGJ1dHRvbiBpbiB0aGUgY2FsZW5kYXIuXG4gICAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWxOZXh0TW9udGg6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERhdGUgc2VsZWN0ZWQgYnkgdGhlIHVzZXIgYnkgY2xpY2tpbmcgaW4gZGF0ZS1waWNrZXIgZGF0ZS1ib3guXG4gICAqL1xuICBAT3V0cHV0KCkgc2VsZWN0ZWREYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxVdGNEYXRlPigpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTW9udGggc2VsZWN0ZWQgYnkgdGhlIHVzZXIgYnkgY2xpY2tpbmcgaW4gZHJvcCBkb3duIGZvciBtb250aCBzZWxlY3Rpb24gb3IgbW9udGggbmF2aWdhdGlvbiBidXR0b25zLlxuICAgKi9cbiAgQE91dHB1dCgpIHNlbGVjdGVkTW9udGhDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFV0Y0RhdGU+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgY2FsZW5kYXIgaXMgb3BlbiBvciBjbG9zZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgb3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdoZW4gYSB1c2VyIGhhcyBhY3RpdmVseSBjaGFuZ2VkIHRoZSBkYXRlLlxuICAgKi9cbiAgQE91dHB1dCgpIGZvY3VzT25OZXh0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxLZXlib2FyZEV2ZW50IHwgTW91c2VFdmVudD4oKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdoZW4gYSB1c2VyIGhhcyBwcmVzc2VkIHNoaWZ0ICsgdGFiIHRvIGdvIHRvIHByZXZpb3VzIGNvbnRyb2wuXG4gICAqL1xuICBAT3V0cHV0KCkgZm9jdXNPblByZXZpb3VzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxLZXlib2FyZEV2ZW50IHwgTW91c2VFdmVudD4oKTtcblxuICBnZXQgYWN0aXZlRGF0ZSgpOiBVdGNEYXRlIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZERhdGUgJiYgdGhpcy5hY3RpdmVEYXRlVmFsdWUgJiZcbiAgICAgICAgdGhpcy5kYXRlU2VydmljZS5pc0xlc3NUaGFuKHRoaXMuYWN0aXZlRGF0ZVZhbHVlLCB0aGlzLnNlbGVjdGVkRGF0ZSwgZmFsc2UsIHRydWUsIHRydWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5hY3RpdmVEYXRlVmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWN0aXZlRGF0ZVZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5hY3RpdmVEYXRlVmFsdWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkRGF0ZSkge1xuICAgICAgdGhpcy5hY3RpdmVEYXRlVmFsdWUgPSB0aGlzLnNlbGVjdGVkRGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgIHRoaXMuYWN0aXZlRGF0ZVZhbHVlID0gbmV3IFV0Y0RhdGUobm93LmdldEZ1bGxZZWFyKCksIG5vdy5nZXRNb250aCgpLCBub3cuZ2V0RGF0ZSgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlRGF0ZVZhbHVlO1xuICB9XG4gIHNldCBhY3RpdmVEYXRlKGRhdGU6IFV0Y0RhdGUpIHtcbiAgICBpZiAodGhpcy5sb3dlckxpbWl0RGF0ZSAmJiB0aGlzLmRhdGVTZXJ2aWNlLmlzTGVzc1RoYW4oZGF0ZSwgdGhpcy5sb3dlckxpbWl0RGF0ZSwgZmFsc2UsIHRydWUsIHRydWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hY3RpdmVEYXRlVmFsdWUgPSBkYXRlO1xuXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuYWN0aXZlRGF0ZVRpbWVvdXQpO1xuXG4gICAgdGhpcy5hY3RpdmVEYXRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5tb2RlbCA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuZGF0ZVNlcnZpY2UuZGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZSksIHRoaXMuZGF0ZURpc3BsYXlGb3JtYXQsICdVVEMnLCB0aGlzLmxvY2FsZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5DYWxlbmRhclRpbWVvdXQ6IGFueTtcbiAgcHJpdmF0ZSBhY3RpdmVEYXRlVGltZW91dDogYW55O1xuICBwcml2YXRlIHNlbGVjdGVkRGF0ZVZhbHVlOiBVdGNEYXRlO1xuICBwcml2YXRlIG9wZW5WYWx1ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBhY3RpdmVEYXRlVmFsdWU6IFV0Y0RhdGU7XG4gIHByaXZhdGUgdGltZXNWYWx1ZTogQXJyYXk8VXRjRGF0ZT47XG4gIHByaXZhdGUgc2VsZWN0ZWRUaW1lVmFsdWU6IFV0Y0RhdGU7XG4gIHByaXZhdGUgc2VsZWN0ZWRNb250aFZhbHVlOiBVdGNEYXRlO1xuICBwcml2YXRlIGRpc2FibGVkVmFsdWU6IGJvb2xlYW47XG4gIHByaXZhdGUgZm9yY2VOb3RPcGVuQ2FsZW5kYXIgPSBmYWxzZTtcbiAgcHJpdmF0ZSBsb3dlckxpbWl0RGF0ZVZhbHVlOiBVdGNEYXRlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxuICAgIHByaXZhdGUgZGF0ZVNlcnZpY2U6IERhdGVIZWxwZXIpIHtcbiAgICBzdXBlcignbmFzLWRhdGVwaWNrZXInKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm5hc0Zvcm1Hcm91cCAmJiB0aGlzLm5hc0Zvcm1Db250cm9sTmFtZSkge1xuICAgICAgdGhpcy5uYXNGb3JtR3JvdXBcbiAgICAgICAgLmdldCh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZSlcbiAgICAgICAgLnZhbHVlQ2hhbmdlc1xuICAgICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5tb2RlbCA9PT0gdmFsdWU/Lm1vZGVsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsID0gdmFsdWU/Lm1vZGVsO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVWYWx1ZSA9IHZhbHVlPy5kYXRlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvbklucHV0S2V5ZG93blNoaWZ0VGFiKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZUNhbGVuZGFyKCk7XG4gICAgdGhpcy5mb2N1c09uUHJldmlvdXNDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICBvbkNhbGVuZGFyS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGxldCBjdXJyZW50QWN0aXZlRGF0ZSA9IHRoaXMuYWN0aXZlRGF0ZS5kYXRlO1xuICAgIGxldCBkYXRlOiBVdGNEYXRlO1xuICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmVFbGVtZW50TW9udGhCdXR0b25zKCkpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudEFjdGl2ZURhdGUrKztcblxuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUobmV3IERhdGUoRGF0ZS5VVEModGhpcy5hY3RpdmVEYXRlLnllYXIsIHRoaXMuYWN0aXZlRGF0ZS5tb250aCwgY3VycmVudEFjdGl2ZURhdGUpKSk7XG4gICAgICAgIHRoaXMuc2V0Rm9jdXNPbkFjdGl2ZURhdGVBc3luYygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIGlmICh0aGlzLmlzQWN0aXZlRWxlbWVudE1vbnRoQnV0dG9ucygpKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRBY3RpdmVEYXRlLS07XG4gICAgICAgIGRhdGUgPSB0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUobmV3IERhdGUoRGF0ZS5VVEModGhpcy5hY3RpdmVEYXRlLnllYXIsIHRoaXMuYWN0aXZlRGF0ZS5tb250aCwgY3VycmVudEFjdGl2ZURhdGUpKSk7XG5cbiAgICAgICAgaWYgKHRoaXMuZXhpc3RzKHRoaXMuZGlzYWJsZVBhc3RTZWxlY3Rpb24pICYmIHRoaXMuZGF0ZVNlcnZpY2UuaXNJblRoZVBhc3QoZGF0ZSkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IGRhdGU7XG4gICAgICAgIHRoaXMuc2V0Rm9jdXNPbkFjdGl2ZURhdGVBc3luYygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICBpZiAodGhpcy5pc0FjdGl2ZUVsZW1lbnRNb250aEJ1dHRvbnMoKSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50QWN0aXZlRGF0ZSAtPSA3O1xuICAgICAgICBkYXRlID0gdGhpcy5kYXRlU2VydmljZS51dGNEYXRlKG5ldyBEYXRlKERhdGUuVVRDKHRoaXMuYWN0aXZlRGF0ZS55ZWFyLCB0aGlzLmFjdGl2ZURhdGUubW9udGgsIGN1cnJlbnRBY3RpdmVEYXRlKSkpO1xuXG4gICAgICAgIGlmICh0aGlzLmV4aXN0cyh0aGlzLmRpc2FibGVQYXN0U2VsZWN0aW9uKSAmJiB0aGlzLmRhdGVTZXJ2aWNlLmlzSW5UaGVQYXN0KGRhdGUpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSBkYXRlO1xuICAgICAgICB0aGlzLnNldEZvY3VzT25BY3RpdmVEYXRlQXN5bmMoKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICBpZiAodGhpcy5pc0FjdGl2ZUVsZW1lbnRNb250aEJ1dHRvbnMoKSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50QWN0aXZlRGF0ZSArPSA3O1xuICAgICAgICB0aGlzLmFjdGl2ZURhdGVWYWx1ZSA9IHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZShuZXcgRGF0ZShEYXRlLlVUQyh0aGlzLmFjdGl2ZURhdGUueWVhciwgdGhpcy5hY3RpdmVEYXRlLm1vbnRoLCBjdXJyZW50QWN0aXZlRGF0ZSkpKTtcblxuICAgICAgICB0aGlzLnNldEZvY3VzT25BY3RpdmVEYXRlQXN5bmMoKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICB0aGlzLmNsb3NlQ2FsZW5kYXIoKTtcblxuICAgICAgICB0aGlzLmZvcmNlTm90T3BlbkNhbGVuZGFyID0gdHJ1ZTtcblxuICAgICAgICBpZiAodGhpcy5pbnB1dCkge1xuICAgICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3QoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmVFbGVtZW50TW9udGhCdXR0b25zKCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldEZvY3VzT25UaW1lU2VsZWN0b3JPck5leHQoZXZlbnQpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBvblRpbWVTZWxlY3RvcktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJykge1xuICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgIHRoaXMub3BlbkNhbGVuZGFyKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZvY3VzT25OZXh0Q2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgICAgfVxuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIHNldEZvY3VzT25UaW1lU2VsZWN0b3JPck5leHQoZXZlbnQ6IEtleWJvYXJkRXZlbnQgfCBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGltZU9wdGlvbnMpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3RFbGVtZW50ID0gdGhpcy50aW1lU2VsZWN0b3Iuc2VsZWN0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmIChzZWxlY3RFbGVtZW50KSB7XG4gICAgICAgICAgc2VsZWN0RWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1c09uTmV4dENoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3NlQ2FsZW5kYXIoKTtcbiAgfVxuXG4gIG9uTW9udGhDaGFuZ2UoY3VycmVudE1vbnRoOiBVdGNEYXRlKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZE1vbnRoID0gY3VycmVudE1vbnRoO1xuICB9XG5cbiAgb25Nb3VzZURvd25EYXRlcGlja2VyKCk6IHZvaWQge1xuICAgIHRoaXMub3BlbkNhbGVuZGFyKCk7XG4gIH1cblxuICBvcGVuQ2FsZW5kYXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2hvdyB8fCB0aGlzLmRpc2FibGVkIHx8IHRoaXMuZm9yY2VOb3RPcGVuQ2FsZW5kYXIpIHtcbiAgICAgIHRoaXMuZm9yY2VOb3RPcGVuQ2FsZW5kYXIgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2hvdyA9IHRydWU7XG4gICAgfSk7XG5cbiAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLnNlbGVjdGVkRGF0ZTtcblxuICAgIGNsZWFyVGltZW91dCh0aGlzLm9wZW5DYWxlbmRhclRpbWVvdXQpO1xuXG4gICAgdGhpcy5vcGVuQ2FsZW5kYXJUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0KCk7XG4gICAgICB0aGlzLm9wZW5DaGFuZ2UuZW1pdCh0aGlzLnNob3cpO1xuICAgIH0sIDEwMCk7XG4gIH1cblxuICBvblRpbWVTZWxlY3RlZChvcHRpb246IFNlbGVjdE9wdGlvbk1vZGVsKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFRpbWUgPSB0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUob3B0aW9uLnZhbHVlKTtcbiAgICB0aGlzLmZvY3VzT25OZXh0Q2hhbmdlLmVtaXQoKTtcbiAgfVxuXG4gIGdldE1haW5DbGFzcygpOiBBcnJheTxDbGFzc01vZGVsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29udGFpbmVyQ2xhc3MoJycsIFsodGhpcy5leGlzdHMoPGFueT50aGlzLnRpbWVPcHRpb25zKSAmJiAnaGFzLXRpbWUnKSxcbiAgICAodGhpcy5leGlzdHModGhpcy5jb21wYWN0KSAmJiAnY29tcGFjdCcpXSk7XG4gIH1cblxuICBnZXRMYWJlbENsYXNzKCk6IENsYXNzTW9kZWwge1xuICAgIGlmICh0aGlzLmV4aXN0cyh0aGlzLmRpc2FibGVkKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2xhc3MoJ2RhdGUtcGlja2VyLWxhYmVsJywgWydkaXNhYmxlZCddKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2xhc3MoJ2RhdGUtcGlja2VyLWxhYmVsJyk7XG4gICAgfVxuICB9XG5cbiAgY2xvc2VDYWxlbmRhcigpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xuICAgIH0pO1xuXG4gICAgdGhpcy5vcGVuQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICB9XG5cbiAgc2VsZWN0RGF0ZShldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc01vZGVsVmFsaWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuZGF0ZSgpO1xuXG4gICAgaWYgKCF0aGlzLnNvbWVWYWxpZERheXNFcXVhbHNTZWxlY3RlZERheSh0aGlzLmFjdGl2ZURhdGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZERhdGUgPSB0aGlzLmFjdGl2ZURhdGU7XG4gICAgdGhpcy5zZXRGb2N1c09uVGltZVNlbGVjdG9yT3JOZXh0KGV2ZW50KTtcblxuICAgIHRoaXMuY2xvc2VDYWxlbmRhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0FjdGl2ZUVsZW1lbnRNb250aEJ1dHRvbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMuY2FsZW5kYXIubmV4dE1vbnRoUmVmLm5hdGl2ZUVsZW1lbnQgfHxcbiAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMuY2FsZW5kYXIucHJldmlvdXNNb250aFJlZi5uYXRpdmVFbGVtZW50IHx8XG4gICAgICB0aGlzLmNhbGVuZGFyLm1vbnRoU2VsZWN0UmVmICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMuY2FsZW5kYXIubW9udGhTZWxlY3RSZWYuc2VsZWN0Lm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzT25BY3RpdmVEYXRlQXN5bmMoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBlbG1lbWVudFRvRm9jdXMgPSB0aGlzLmNhbGVuZGFyLmFjdGl2ZURhdGVDZWxsO1xuICAgICAgaWYgKGVsbWVtZW50VG9Gb2N1cykge1xuICAgICAgICBlbG1lbWVudFRvRm9jdXMuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9LCAyMDApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc01vZGVsVmFsaWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5wYXJzZSh0aGlzLm1vZGVsKTtcbiAgICByZXR1cm4gaXNOYU4odGltZXN0YW1wKSAhPT0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgYWxsRGF5cygpOiBBcnJheTxEYXlNb2RlbD4ge1xuICAgIGNvbnN0IGFsbERheXMgPSBuZXcgQXJyYXk8RGF5TW9kZWw+KCk7XG5cbiAgICBpZiAodGhpcy5jYWxlbmRhcikge1xuICAgICAgdGhpcy5jYWxlbmRhci53ZWVrcy5mb3JFYWNoKHggPT4geCAmJiB4LmRheXMuZm9yRWFjaChkID0+IGFsbERheXMucHVzaChkKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBhbGxEYXlzO1xuICB9XG5cbiAgcHJpdmF0ZSBzb21lVmFsaWREYXlzRXF1YWxzU2VsZWN0ZWREYXkoc2VsZWN0ZWREYXk6IFV0Y0RhdGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hbGxEYXlzKClcbiAgICAgIC5zb21lKHggPT4geFxuICAgICAgICAmJiB0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZURhdGUodGhpcy5kYXRlU2VydmljZS51dGNEYXRlKHguZGF0ZSksIHNlbGVjdGVkRGF5KVxuICAgICAgICAmJiAoeC5pc0F2YWlsYWJsZSB8fCAheC5pc0Rpc2FibGVkKSk7XG4gIH1cblxuICBwcml2YXRlIGRhdGUoKTogVXRjRGF0ZSB7XG4gICAgY29uc3QgbW9kZWxEYXRlID0gbmV3IERhdGUodGhpcy5tb2RlbCk7XG4gICAgY29uc3QgbW9kZWxVdGNEYXRlID0gbmV3IFV0Y0RhdGUobW9kZWxEYXRlLmdldEZ1bGxZZWFyKCksIG1vZGVsRGF0ZS5nZXRNb250aCgpLCBtb2RlbERhdGUuZ2V0RGF0ZSgpKTtcbiAgICByZXR1cm4gbW9kZWxVdGNEYXRlO1xuICB9XG59XG4iLCI8bGFiZWwgW25hc0NsYXNzXT1cImdldE1haW5DbGFzcygpXCI+XG4gIDxkaXYgW25hc0NsYXNzXT1cImdldENsYXNzKCdkYXRlLXBpY2tlci1jb250ZW50JylcIj5cbiAgICA8ZGl2IFtuYXNDbGFzc109XCJnZXRDbGFzcygnZGF0ZS1waWNrZXItd3JhcHBlcicpXCI+XG4gICAgICA8ZGl2IFtuYXNDbGFzc109XCJnZXRDbGFzcygnY29udHJvbHMnLCBzaG93ICYmICdhY3RpdmUnKVwiXG4gICAgICAgIChtb3VzZWRvd24pPVwib25Nb3VzZURvd25EYXRlcGlja2VyKClcIj5cbiAgICAgICAgPGRpdiAjZGF0ZVBpY2tlckNvbnRlbnRcbiAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0TGFiZWxDbGFzcygpXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxpbnB1dCAjaW5wdXRcbiAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2RhdGUtcGlja2VyJylcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiYXJpYURlc2NyaWJlZGJ5XCJcbiAgICAgICAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cInRydWVcIlxuICAgICAgICAgIChrZXlkb3duLnRhYik9XCJzZWxlY3REYXRlKCRldmVudClcIlxuICAgICAgICAgIChrZXlkb3duLnNoaWZ0LnRhYik9XCJvbklucHV0S2V5ZG93blNoaWZ0VGFiKCRldmVudClcIlxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNlbGVjdERhdGUoJGV2ZW50KVwiXG4gICAgICAgICAgKGtleWRvd24uYXJyb3dkb3duKT1cIm9uQ2FsZW5kYXJLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgIChrZXlkb3duLmFycm93bGVmdCk9XCJvbkNhbGVuZGFyS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAoa2V5ZG93bi5hcnJvd3JpZ2h0KT1cIm9uQ2FsZW5kYXJLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgIChrZXlkb3duLmFycm93dXApPVwib25DYWxlbmRhcktleURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgKGZvY3VzKT1cIm9wZW5DYWxlbmRhcigpXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1vZGVsXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2NhbGVuZGFyLWljb24nKVwiPlxuICAgICAgICA8bmFzLWljb24gKm5nSWY9XCJleGlzdHMoZGlzYWJsZWQpOyBlbHNlIHJlZ3VsYXJJY29uXCJcbiAgICAgICAgICBbaWNvbl09XCInY2FsZW5kYXItLWRpc2FibGVkJ1wiXG4gICAgICAgICAgW25nU3R5bGVdPVwieydwb2ludGVyLWV2ZW50cyc6ICdub25lJ31cIj5cbiAgICAgICAgPC9uYXMtaWNvbj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNyZWd1bGFySWNvbj5cbiAgICAgICAgICA8bmFzLWljb24gaWNvbj1cImNhbGVuZGFyXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvcGVuQ2FsZW5kYXIoKVwiPlxuICAgICAgICAgIDwvbmFzLWljb24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuYXMtY2FsZW5kYXIgI2NhbGVuZGFyICpuZ0lmPVwic2hvd1wiXG4gICAgICAgIFtuYXNGb3JtR3JvdXBdPVwibmFzRm9ybUdyb3VwXCJcbiAgICAgICAgW25hc0Zvcm1Db250cm9sTmFtZV09XCJuYXNGb3JtQ29udHJvbE5hbWVcIlxuICAgICAgICBbZGF0ZURpc3BsYXlGb3JtYXRdPVwiZGF0ZURpc3BsYXlGb3JtYXRcIlxuICAgICAgICBbbm9BdmFpbGFibGVGbGlnaHRzTGFiZWxdPVwibm9BdmFpbGFibGVGbGlnaHRzTGFiZWxcIlxuICAgICAgICBbYXZhaWxhYmxlRmxpZ2h0c0xhYmVsXT1cImF2YWlsYWJsZUZsaWdodHNMYWJlbFwiXG4gICAgICAgIFthdmFpbGFiaWxpdHldPVwiZXhpc3RzKGF2YWlsYWJpbGl0eSlcIlxuICAgICAgICBbYXZhaWxhYmxlRGF0ZXNdPVwiYXZhaWxhYmxlRGF0ZXNcIlxuICAgICAgICBbbG93ZXJMaW1pdERhdGVdPVwibG93ZXJMaW1pdERhdGVcIlxuICAgICAgICBbZGlzYWJsZVBhc3RTZWxlY3Rpb25dPVwiZXhpc3RzKGRpc2FibGVQYXN0U2VsZWN0aW9uKVwiXG4gICAgICAgIFtsb2NhbGVdPVwibG9jYWxlXCJcbiAgICAgICAgW2FyaWFMYWJlbFByZXZpb3VzTW9udGhdPVwiYXJpYUxhYmVsUHJldmlvdXNNb250aFwiXG4gICAgICAgIFthcmlhTGFiZWxOZXh0TW9udGhdPVwiYXJpYUxhYmVsTmV4dE1vbnRoXCJcbiAgICAgICAgWyhhY3RpdmVEYXRlKV09XCJhY3RpdmVEYXRlXCJcbiAgICAgICAgWyhzZWxlY3RlZERhdGUpXT1cInNlbGVjdGVkRGF0ZVwiXG4gICAgICAgIChmb2N1c09uTmV4dENoYW5nZSk9XCJzZXRGb2N1c09uVGltZVNlbGVjdG9yT3JOZXh0KCRldmVudClcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbkNhbGVuZGFyS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgKG1vbnRoQ2hhbmdlKT1cIm9uTW9udGhDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgPC9uYXMtY2FsZW5kYXI+XG4gICAgPC9kaXY+XG4gICAgPG5hcy1iYWNrZHJvcCBbYXJpYUxhYmVsQmFja2Ryb3BdPVwiYXJpYUxhYmVsQmFja2Ryb3BcIlxuICAgICAgWyhzaG93QmFja2Ryb3ApXT1cInNob3dCYWNrZHJvcFwiPjwvbmFzLWJhY2tkcm9wPlxuICA8L2Rpdj5cbjwvbGFiZWw+XG48ZGl2ICpuZ0lmPVwidGltZU9wdGlvbnNcIlxuICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3RpbWUtc2VsZWN0b3Itd3JhcHBlcicpXCI+XG4gIDxuYXMtc2VsZWN0ICN0aW1lU2VsZWN0b3JcbiAgICBbc2VsZWN0ZWRdPVwic2VsZWN0ZWRUaW1lT3B0aW9uXCJcbiAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwib25UaW1lU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgKGtleWRvd24pPVwib25UaW1lU2VsZWN0b3JLZXlkb3duKCRldmVudClcIj5cbiAgICA8bmFzLW9wdGlvbiAqbmdGb3I9XCJsZXQgdGltZSBvZiB0aW1lT3B0aW9uc1wiXG4gICAgICBbb3B0aW9uXT1cInRpbWVcIj48L25hcy1vcHRpb24+XG4gIDwvbmFzLXNlbGVjdD5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
565
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFFbEIsTUFBTSxlQUFlLENBQUM7QUFLdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFdEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7Ozs7OztBQUszRDs7O0dBR0c7QUFPSCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsZ0JBQWdCO0lBTXZELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFDRCxJQUFJLFlBQVksQ0FBQyxLQUFjO1FBQzdCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7WUFDdkIsT0FBTztTQUNSO1FBRUQsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQTBDRDs7OztPQUlHO0lBQ0gsSUFDSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7SUFDRCxJQUFJLGNB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QU9HLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFPRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBUUYsY0FBYztzQkFEakIsS0FBSztnQkFpQkcsWUFBWTtzQkFBcEIsS0FBSztnQkFPRyxjQUFjO3NCQUF0QixLQUFLO2dCQVFGLFFBQVE7c0JBRFgsS0FBSztnQkE2QkcsV0FBVztzQkFBbkIsS0FBSztnQkFPRyxRQUFRO3NCQUFoQixLQUFLO2dCQU9HLGVBQWU7c0JBQXZCLEtBQUs7Z0JBT0csU0FBUztzQkFBakIsS0FBSztnQkFRRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBT0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQVFHLE1BQU07c0JBQWQsS0FBSztnQkFPRyxPQUFPO3NCQUFmLEtBQUs7Z0JBU0csWUFBWTtzQkFBcEIsS0FBSztnQkFTRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBUUYsS0FBSztzQkFEUixLQUFLO2dCQTZCRixJQUFJO3NCQURQLEtBQUs7Z0JBd0JGLGFBQWE7c0JBRGhCLEtBQUs7Z0JBMkJGLFlBQVk7c0JBRGYsS0FBSztnQkFrREYsWUFBWTtzQkFEZixLQUFLO2dCQTBDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBT0csa0JBQWtCO3NCQUExQixLQUFLO2dCQU9JLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFPRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBT0csVUFBVTtzQkFBbkIsTUFBTTtnQkFPRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBT0cscUJBQXFCO3NCQUE5QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IE5vcndlZ2lhbiBBaXIgU2h1dHRsZS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIE9uSW5pdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF5TW9kZWwgfSBmcm9tICcuL2NhbGVuZGFyL21vZGVscy9kYXkubW9kZWwnO1xuaW1wb3J0IHsgU2VsZWN0T3B0aW9uTW9kZWwgfSBmcm9tICcuL2NhbGVuZGFyL21vZGVscy9zZWxlY3Qtb3B0aW9uLm1vZGVsJztcbmltcG9ydCB7IE5hc0NvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi9jb3JlL2Jhc2UvbmFzLWNvbXBvbmVudC5iYXNlJztcbmltcG9ydCB7IENsYXNzTW9kZWwgfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9jbGFzcy5tb2RlbCc7XG5pbXBvcnQgeyBVdGNEYXRlIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvdXRjLWRhdGUubW9kZWwnO1xuaW1wb3J0IHsgRGF0ZUhlbHBlciB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvZGF0ZS9kYXRlLWhlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7IENhbGVuZGFyRGF0ZU1vZGVsIH0gZnJvbSAnLi9jYWxlbmRhci9jYWxlbmRhci1kYXRlLm1vZGVsJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqIE5vcndlZ2lhbiBEYXRlIFBpY2tlciBDb21wb25lbnQgfCBGdW5jdGlvbmFsXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25hcy1kYXRlcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRlcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZXBpY2tlckNvbXBvbmVudCBleHRlbmRzIE5hc0NvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQge1xuICB0aW1lT3B0aW9uczogQXJyYXk8U2VsZWN0T3B0aW9uTW9kZWw+O1xuICBtb2RlbDogc3RyaW5nO1xuICBzaG93ID0gZmFsc2U7XG4gIHNlbGVjdGVkVGltZU9wdGlvbjogU2VsZWN0T3B0aW9uTW9kZWw7XG5cbiAgZ2V0IHNob3dCYWNrZHJvcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93ICYmICF0aGlzLmV4aXN0cyh0aGlzLmRpc2FibGVCYWNrZHJvcCk7XG4gIH1cbiAgc2V0IHNob3dCYWNrZHJvcCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLnNob3cgPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNob3cgPSB2YWx1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ2lucHV0JykgaW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyJykgY2FsZW5kYXI6IENhbGVuZGFyQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdkYXRlUGlja2VyQ29udGVudCcpIGRhdGVQaWNrZXJDb250ZW50OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0aW1lU2VsZWN0b3InKSB0aW1lU2VsZWN0b3I6IFNlbGVjdENvbXBvbmVudDtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBZGRzICdhcmlhLWxhYmVsJyB0byB0aGUgYmFja2Ryb3BzLlxuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsQmFja2Ryb3A6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGJvb2xlYW4gdmFsdWUgd2hlbiBzZXQgd2lsbCBkaXNhYmxlIHNob3dpbmcgdGhlIGJhY2tkcm9wIG9uIHBvcHVwIG9wZW5cbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVCYWNrZHJvcDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBMYWJlbCBmb3Igbm8gYXZhaWxhYmxlIGZsaWdodHMuXG4gICAqL1xuICBASW5wdXQoKSBub0F2YWlsYWJsZUZsaWdodHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciBhdmFpbGFibGUgZmxpZ2h0cy5cbiAgICovXG4gIEBJbnB1dCgpIGF2YWlsYWJsZUZsaWdodHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERpc2FibGUgcG9zc2liaWxpdHkgdG8gc2VsZWN0IGRhdGVzIGluIHRoZSBwYXN0LlxuICAgKi9cbiAgQElucHV0KCkgZGlzYWJsZVBhc3RTZWxlY3Rpb246IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIGxvd2VzdCBkYXRlIGFsbG93ZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgbG93ZXJMaW1pdERhdGUoKTogVXRjRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMubG93ZXJMaW1pdERhdGVWYWx1ZTtcbiAgfVxuICBzZXQgbG93ZXJMaW1pdERhdGUoZGF0ZTogVXRjRGF0ZSkge1xuICAgIHRoaXMubG93ZXJMaW1pdERhdGVWYWx1ZSA9IGRhdGU7XG5cbiAgICBpZiAodGhpcy5kYXRlU2VydmljZS5pc0xlc3NUaGFuKHRoaXMuc2VsZWN0ZWREYXRlLCBkYXRlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSkpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gZGF0ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIHRoZSBkYXRlcGlja2VyIGluIGF2YWlsYWJpbGl0eSBtb2RlIHdoZXJlIGF2YWlsYWJsZSBkYXRlcyBjYW4gYmUgYWRkZWQuXG4gICAqL1xuICBASW5wdXQoKSBhdmFpbGFiaWxpdHk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gYXJyYXkgd2l0aCBhbGwgdGhlIGF2YWlsYWJsZSAoc2VsZWN0YWJsZSkgZGF0ZXMgb2YgdGhlIG1vbnRoLlxuICAgKi9cbiAgQElucHV0KCkgYXZhaWxhYmxlRGF0ZXM6IEFycmF5PFV0Y0RhdGU+O1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIGJvb2xlYW4gdmFsdWUgdG8gZGlzYWJsZSBvciBlbmFibGUgdGhlIGlucHV0IG9mIHRoZSBkYXRlIHBpY2tlci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlZFZhbHVlO1xuICB9XG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuZGlzYWJsZWRWYWx1ZSA9IHZhbHVlO1xuXG4gICAgaWYgKHRoaXMubmFzRm9ybUdyb3VwICYmIHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMubmFzRm9ybUdyb3VwLmdldCh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZSk7XG5cbiAgICAgICAgaWYgKCFjb250cm9sKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgY29udHJvbC5kaXNhYmxlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udHJvbC5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBwbGFjZSBob2xkZXIgc3RyaW5nIGZvciB0aGUgaW5wdXQgZm9yIGRhdGUgcGlja2VyLlxuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiB0aGlzIHdpbGwgc2V0IHRoZSByZXF1aXJlZCBhdHRyaWJ1dGUgb24gdGhlIGlucHV0IHNvIHN1ZXIgaGFzIHRvIGRhdGUtcGlja2VyIHRoZSBkYXRlLlxuICAgKi9cbiAgQElucHV0KCkgcmVxdWlyZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSXMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgSURzIG9mIHRoZSBlbGVtZW50cyB0aGF0IGRlc2NyaWJlIHRoZSBkYXRlIHBpY2tlciBpbnB1dC5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFEZXNjcmliZWRieTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFyaWEgbGFiZWwgZm9yIGlucHV0IHRoYXQgZW5hYmxlcyBkYXRlLXBpY2tlciBwb3B1cCBvbmNlIGNsaWNrZWQuIEZvciBhY2Nlc3NpYmlsaXR5IHdlYiBzdGFuZGFyZHMuXG4gICAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgZGlzcGxheSBmb3JtYXQgb2YgdGhlIGRhdGUgd2hlbiB1c2VyIGhhcyBzZWxlY3RlZCB0aGUgZGF0ZSBhbmQgaXQgaXMgYmVpbmcgc2hvd24gaW4gdGhlIGlucHV0IGJveCBmb3IgdGhlIGRhdGUgcGlja2VyLlxuICAgKiBQbGVhc2UgbG9vayBhdCB0aGUgYW5ndWxhciBEYXRlIHBpcGUgZm9yIHZhbGlkIGZvcm1hdHMgYW5kIHZhcmlhdGlvbnMuXG4gICAqL1xuICBASW5wdXQoKSBkYXRlRGlzcGxheUZvcm1hdCA9ICdFRUVFIGQsIE1NTU0geXl5eSc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIHRpbWUgZGlzcGxheSBmb3JtYXQuXG4gICAqL1xuICBASW5wdXQoKSB0aW1lRGlzcGxheUZvcm1hdCA9ICdISDptbSc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsb2NhbGUgY29kZSBmb3IgdGhlIGxvY2FsZSBmb3JtYXQgcnVsZXMgdG8gdXNlLiBXaGVuIG5vdCBzdXBwbGllZCwgdXNlcyB0aGUgdmFsdWUgb2YgTE9DQUxFX0lELCB3aGljaCBpcyBlbi1VUyBieSBkZWZhdWx0LlxuICAgKiBUaGlzIHJlcXVpcmVzIHRoYXQgcmVnaXN0ZXJMb2NhbGVEYXRhIGlzIGNhbGxlZCB3aXRoIHRoZSByZXNwZWN0aXZlIGxvY2FsZS5cbiAgICovXG4gIEBJbnB1dCgpIGxvY2FsZSA9ICdlbi1VUyc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBtb2RpZmllciB0byByZW1vdmUgdGhlIHBhZGRpbmcgYW5kIG1hcmdpbnMgYXJvdW5kIHRoZSBlbGVtZW50LlxuICAgKi9cbiAgQElucHV0KCkgY29tcGFjdDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBZGRzIHRoZSBwYXJlbnQncyBmb3JtIGdyb3VwLlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCBpcyByZXF1aWVyZWQgdG8gYmUgZmlsbGVkIGlmIG5hc0Zvcm1Db250cm9sTmFtZSBhZGRlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Hcm91cDogRm9ybUdyb3VwO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYSBmb3JtQ29udHJvbE5hbWUgZGlyZWN0aXZlIHRvIHRoZSBpbnB1dC5cbiAgICogSXQgcmVxdWlyZXMgdGhhdCB0aGUgY29uc3VtZXIgaW5jbHVkZWQgUmVhY3RpdmVGb3Jtc01vZHVsZSBpbiBpdCdzIG1vZHVsZS5cbiAgICogSXQgcmVxdWllcnMgdGhhdCB0aGUgbmFzRm9ybUdyb3VwIGlucHV0IGlzIGZpbGxlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Db250cm9sTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFuIGFycmF5IG9mIHRpbWVzIHRvIGJlIGFkZGVkIGluIHRoZSB0aW1lIHNlbGVjdG9yLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IHRpbWVzKCk6IEFycmF5PFV0Y0RhdGU+IHtcbiAgICByZXR1cm4gdGhpcy50aW1lc1ZhbHVlO1xuICB9XG4gIHNldCB0aW1lcyh0aW1lczogQXJyYXk8VXRjRGF0ZT4pIHtcbiAgICBpZiAoIXRpbWVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50aW1lc1ZhbHVlID0gdGltZXM7XG4gICAgdGhpcy50aW1lT3B0aW9ucyA9IHRpbWVzLm1hcCh4ID0+IHtcbiAgICAgIHgueWVhciA9IG5ldyBEYXRlKCkuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAgIGNvbnN0IG9wdGlvbjogU2VsZWN0T3B0aW9uTW9kZWwgPSB7XG4gICAgICAgIHRpdGxlOiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmRhdGVTZXJ2aWNlLmRhdGUoeCksIHRoaXMudGltZURpc3BsYXlGb3JtYXQsICdVVEMnLCB0aGlzLmxvY2FsZSksXG4gICAgICAgIHZhbHVlOiB0aGlzLmRhdGVTZXJ2aWNlLmRhdGUoeCkudG9JU09TdHJpbmcoKVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICB9KTtcblxuICAgIHRoaXMuZGF0ZURpc3BsYXlGb3JtYXQgPSAnbWVkaXVtRGF0ZSc7XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgY2FsZW5kYXIgaXMgb3BlbiBvciBjbG9zZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgb3BlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vcGVuVmFsdWU7XG4gIH1cbiAgc2V0IG9wZW4ob3BlbjogYm9vbGVhbikge1xuICAgIGlmIChvcGVuID09PSB0aGlzLm9wZW5WYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub3BlblZhbHVlID0gb3BlbjtcblxuICAgIGlmIChvcGVuKSB7XG4gICAgICB0aGlzLm9wZW5DYWxlbmRhcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsb3NlQ2FsZW5kYXIoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXQgc2VsZWN0ZWQgbW9udGguXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgc2VsZWN0ZWRNb250aCgpOiBVdGNEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE1vbnRoVmFsdWU7XG4gIH1cbiAgc2V0IHNlbGVjdGVkTW9udGgobW9udGg6IFV0Y0RhdGUpIHtcbiAgICBpZiAoIW1vbnRoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZVNlcnZpY2UuaXNTYW1lTW9udGgodGhpcy5zZWxlY3RlZE1vbnRoVmFsdWUsIG1vbnRoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zZWxlY3RlZE1vbnRoVmFsdWUgPSBtb250aDtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNb250aENoYW5nZS5lbWl0KG1vbnRoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgc2VsZWN0ZWQgRGF0ZSBpbiB0aGUgZGF0ZSBwaWNrZXIuIFNldHRpbmcgdGhpcyBkYXRlIHdpbGwgaGlnaGxpZ2h0IHRoZSBkYXRlIGluIHRoZSBkYXRlIHBpY2tlclxuICAgKiBhbmQgdXNlciBjYW4gY2hhbmdlIGl0IGJ5IGNsaWNraW5nIGZyb20gYW55IG90aGVyIGVuYWJsZWQgZGF0ZXNcbiAgICogb3IgYnkgbmF2aWdhdGluZyBiZXRyd2VlbiBtb250aHMgYW5kIHNlbGVjdGluZyBmcm9tIGRpZmZlcmVudCBhdmFpbGFibGUgbW9udGguXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgc2VsZWN0ZWREYXRlKCk6IFV0Y0RhdGUge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRGF0ZVZhbHVlO1xuICB9XG4gIHNldCBzZWxlY3RlZERhdGUoZGF0ZTogVXRjRGF0ZSkge1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0ZVZhbHVlICYmIHRoaXMuZGF0ZVNlcnZpY2UuaXNTYW1lRGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZVZhbHVlLCBkYXRlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlbGVjdGVkVGltZVZhbHVlKSB7XG4gICAgICBkYXRlID0gbmV3IFV0Y0RhdGUoZGF0ZS55ZWFyLCBkYXRlLm1vbnRoLCBkYXRlLmRhdGUsIHRoaXMuc2VsZWN0ZWRUaW1lVmFsdWUuaG91cnMsIHRoaXMuc2VsZWN0ZWRUaW1lVmFsdWUubWludXRlcyk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZERhdGVWYWx1ZSA9IGRhdGU7XG5cbiAgICBpZiAodGhpcy5uYXNGb3JtR3JvdXAgJiYgdGhpcy5uYXNGb3JtQ29udHJvbE5hbWUpIHtcblxuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMubmFzRm9ybUdyb3VwLmdldCh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZSk7XG5cbiAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgIGNvbnN0IGNhbGVuZGFyRGF0ZTogQ2FsZW5kYXJEYXRlTW9kZWwgPSB7XG4gICAgICAgICAgbW9kZWw6IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuZGF0ZVNlcnZpY2UuZGF0ZShkYXRlKSwgdGhpcy5kYXRlRGlzcGxheUZvcm1hdCwgJ1VUQycsIHRoaXMubG9jYWxlKSxcbiAgICAgICAgICBkYXRlOiBkYXRlXG4gICAgICAgIH07XG5cbiAgICAgICAgY29udHJvbC5wYXRjaFZhbHVlKGNhbGVuZGFyRGF0ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm1vZGVsID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5kYXRlU2VydmljZS5kYXRlKGRhdGUpLCB0aGlzLmRhdGVEaXNwbGF5Rm9ybWF0LCAnVVRDJywgdGhpcy5sb2NhbGUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zZWxlY3RlZERhdGVDaGFuZ2UuZW1pdChkYXRlKTtcblxuICAgIGlmICh0aGlzLnNob3cpIHtcbiAgICAgIHRoaXMuY2xvc2VDYWxlbmRhcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgdGhlIHNlbGVjdGVkIHRpbWUgaW4gdGhlIHRpbWUgc2VsZWN0b3IuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgc2VsZWN0ZWRUaW1lKCk6IFV0Y0RhdGUge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVGltZVZhbHVlO1xuICB9XG4gIHNldCBzZWxlY3RlZFRpbWUodGltZTogVXRjRGF0ZSkge1xuICAgIGlmICghdGltZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWRUaW1lVmFsdWUgPSB0aW1lO1xuXG4gICAgaWYgKHRoaXMudGltZU9wdGlvbnMgJiYgdGhpcy50aW1lT3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB0aW1lT3B0aW9uID0gdGhpcy50aW1lT3B0aW9ucy5maW5kKHggPT4geC52YWx1ZSA9PT0gdGhpcy5kYXRlU2VydmljZS5kYXRlKHRpbWUpLnRvSVNPU3RyaW5nKCkpO1xuXG4gICAgICBpZiAodGltZU9wdGlvbikge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGltZU9wdGlvbiA9IHRpbWVPcHRpb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBVdGNEYXRlKFxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZS55ZWFyLFxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZS5tb250aCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUuZGF0ZSxcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRpbWVWYWx1ZS5ob3VycyxcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRpbWVWYWx1ZS5taW51dGVzKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aXZlRGF0ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBuZXcgVXRjRGF0ZShcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlLnllYXIsXG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZS5tb250aCxcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlLmRhdGUsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaW1lVmFsdWUuaG91cnMsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaW1lVmFsdWUubWludXRlc1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBUklBIGxhYmVsIGZvciB0aGUgcHJldmlvdXMgbW9udGggYnV0dG9uIGluIHRoZSBjYWxlbmRhci5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbFByZXZpb3VzTW9udGg6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBUklBIGxhYmVsIGZvciB0aGUgbmV4dCBtb250aCBidXR0b24gaW4gdGhlIGNhbGVuZGFyLlxuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsTmV4dE1vbnRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERhdGUgc2VsZWN0ZWQgYnkgdGhlIHVzZXIgYnkgY2xpY2tpbmcgaW4gZGF0ZS1waWNrZXIgZGF0ZS1ib3guXG4gICAqL1xuICBAT3V0cHV0KCkgc2VsZWN0ZWREYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxVdGNEYXRlPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBNb250aCBzZWxlY3RlZCBieSB0aGUgdXNlciBieSBjbGlja2luZyBpbiBkcm9wIGRvd24gZm9yIG1vbnRoIHNlbGVjdGlvbiBvciBtb250aCBuYXZpZ2F0aW9uIGJ1dHRvbnMuXG4gICAqL1xuICBAT3V0cHV0KCkgc2VsZWN0ZWRNb250aENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VXRjRGF0ZT4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIGNhbGVuZGFyIGlzIG9wZW4gb3IgY2xvc2VkLlxuICAgKi9cbiAgQE91dHB1dCgpIG9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdoZW4gYSB1c2VyIGhhcyBhY3RpdmVseSBjaGFuZ2VkIHRoZSBkYXRlLlxuICAgKi9cbiAgQE91dHB1dCgpIGZvY3VzT25OZXh0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxLZXlib2FyZEV2ZW50IHwgTW91c2VFdmVudD4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogV2hlbiBhIHVzZXIgaGFzIHByZXNzZWQgc2hpZnQgKyB0YWIgdG8gZ28gdG8gcHJldmlvdXMgY29udHJvbC5cbiAgICovXG4gIEBPdXRwdXQoKSBmb2N1c09uUHJldmlvdXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEtleWJvYXJkRXZlbnQgfCBNb3VzZUV2ZW50PigpO1xuXG4gIGdldCBhY3RpdmVEYXRlKCk6IFV0Y0RhdGUge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0ZSAmJiB0aGlzLmFjdGl2ZURhdGVWYWx1ZSAmJlxuICAgICAgdGhpcy5kYXRlU2VydmljZS5pc0xlc3NUaGFuKHRoaXMuYWN0aXZlRGF0ZVZhbHVlLCB0aGlzLnNlbGVjdGVkRGF0ZSwgZmFsc2UsIHRydWUsIHRydWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5hY3RpdmVEYXRlVmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWN0aXZlRGF0ZVZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5hY3RpdmVEYXRlVmFsdWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkRGF0ZSkge1xuICAgICAgdGhpcy5hY3RpdmVEYXRlVmFsdWUgPSB0aGlzLnNlbGVjdGVkRGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgIHRoaXMuYWN0aXZlRGF0ZVZhbHVlID0gbmV3IFV0Y0RhdGUobm93LmdldEZ1bGxZZWFyKCksIG5vdy5nZXRNb250aCgpLCBub3cuZ2V0RGF0ZSgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlRGF0ZVZhbHVlO1xuICB9XG4gIHNldCBhY3RpdmVEYXRlKGRhdGU6IFV0Y0RhdGUpIHtcbiAgICBpZiAodGhpcy5sb3dlckxpbWl0RGF0ZSAmJiB0aGlzLmRhdGVTZXJ2aWNlLmlzTGVzc1RoYW4oZGF0ZSwgdGhpcy5sb3dlckxpbWl0RGF0ZSwgZmFsc2UsIHRydWUsIHRydWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hY3RpdmVEYXRlVmFsdWUgPSBkYXRlO1xuXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuYWN0aXZlRGF0ZVRpbWVvdXQpO1xuXG4gICAgdGhpcy5hY3RpdmVEYXRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5tb2RlbCA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuZGF0ZVNlcnZpY2UuZGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZSksIHRoaXMuZGF0ZURpc3BsYXlGb3JtYXQsICdVVEMnLCB0aGlzLmxvY2FsZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5DYWxlbmRhclRpbWVvdXQ6IGFueTtcbiAgcHJpdmF0ZSBhY3RpdmVEYXRlVGltZW91dDogYW55O1xuICBwcml2YXRlIHNlbGVjdGVkRGF0ZVZhbHVlOiBVdGNEYXRlO1xuICBwcml2YXRlIG9wZW5WYWx1ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBhY3RpdmVEYXRlVmFsdWU6IFV0Y0RhdGU7XG4gIHByaXZhdGUgdGltZXNWYWx1ZTogQXJyYXk8VXRjRGF0ZT47XG4gIHByaXZhdGUgc2VsZWN0ZWRUaW1lVmFsdWU6IFV0Y0RhdGU7XG4gIHByaXZhdGUgc2VsZWN0ZWRNb250aFZhbHVlOiBVdGNEYXRlO1xuICBwcml2YXRlIGRpc2FibGVkVmFsdWU6IGJvb2xlYW47XG4gIHByaXZhdGUgZm9yY2VOb3RPcGVuQ2FsZW5kYXIgPSBmYWxzZTtcbiAgcHJpdmF0ZSBsb3dlckxpbWl0RGF0ZVZhbHVlOiBVdGNEYXRlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxuICAgIHByaXZhdGUgZGF0ZVNlcnZpY2U6IERhdGVIZWxwZXIpIHtcbiAgICBzdXBlcignbmFzLWRhdGVwaWNrZXInKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm5hc0Zvcm1Hcm91cCAmJiB0aGlzLm5hc0Zvcm1Db250cm9sTmFtZSkge1xuICAgICAgdGhpcy5uYXNGb3JtR3JvdXBcbiAgICAgICAgLmdldCh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZSlcbiAgICAgICAgLnZhbHVlQ2hhbmdlc1xuICAgICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5tb2RlbCA9PT0gdmFsdWU/Lm1vZGVsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsID0gdmFsdWU/Lm1vZGVsO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVWYWx1ZSA9IHZhbHVlPy5kYXRlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvbklucHV0S2V5ZG93blNoaWZ0VGFiKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZUNhbGVuZGFyKCk7XG4gICAgdGhpcy5mb2N1c09uUHJldmlvdXNDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICBvbkNhbGVuZGFyS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGxldCBjdXJyZW50QWN0aXZlRGF0ZSA9IHRoaXMuYWN0aXZlRGF0ZS5kYXRlO1xuICAgIGxldCBkYXRlOiBVdGNEYXRlO1xuICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmVFbGVtZW50TW9udGhCdXR0b25zKCkpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudEFjdGl2ZURhdGUrKztcblxuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUobmV3IERhdGUoRGF0ZS5VVEModGhpcy5hY3RpdmVEYXRlLnllYXIsIHRoaXMuYWN0aXZlRGF0ZS5tb250aCwgY3VycmVudEFjdGl2ZURhdGUpKSk7XG4gICAgICAgIHRoaXMuc2V0Rm9jdXNPbkFjdGl2ZURhdGVBc3luYygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIGlmICh0aGlzLmlzQWN0aXZlRWxlbWVudE1vbnRoQnV0dG9ucygpKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRBY3RpdmVEYXRlLS07XG4gICAgICAgIGRhdGUgPSB0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUobmV3IERhdGUoRGF0ZS5VVEModGhpcy5hY3RpdmVEYXRlLnllYXIsIHRoaXMuYWN0aXZlRGF0ZS5tb250aCwgY3VycmVudEFjdGl2ZURhdGUpKSk7XG5cbiAgICAgICAgaWYgKHRoaXMuZXhpc3RzKHRoaXMuZGlzYWJsZVBhc3RTZWxlY3Rpb24pICYmIHRoaXMuZGF0ZVNlcnZpY2UuaXNJblRoZVBhc3QoZGF0ZSkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IGRhdGU7XG4gICAgICAgIHRoaXMuc2V0Rm9jdXNPbkFjdGl2ZURhdGVBc3luYygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICBpZiAodGhpcy5pc0FjdGl2ZUVsZW1lbnRNb250aEJ1dHRvbnMoKSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50QWN0aXZlRGF0ZSAtPSA3O1xuICAgICAgICBkYXRlID0gdGhpcy5kYXRlU2VydmljZS51dGNEYXRlKG5ldyBEYXRlKERhdGUuVVRDKHRoaXMuYWN0aXZlRGF0ZS55ZWFyLCB0aGlzLmFjdGl2ZURhdGUubW9udGgsIGN1cnJlbnRBY3RpdmVEYXRlKSkpO1xuXG4gICAgICAgIGlmICh0aGlzLmV4aXN0cyh0aGlzLmRpc2FibGVQYXN0U2VsZWN0aW9uKSAmJiB0aGlzLmRhdGVTZXJ2aWNlLmlzSW5UaGVQYXN0KGRhdGUpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSBkYXRlO1xuICAgICAgICB0aGlzLnNldEZvY3VzT25BY3RpdmVEYXRlQXN5bmMoKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICBpZiAodGhpcy5pc0FjdGl2ZUVsZW1lbnRNb250aEJ1dHRvbnMoKSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50QWN0aXZlRGF0ZSArPSA3O1xuICAgICAgICB0aGlzLmFjdGl2ZURhdGVWYWx1ZSA9IHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZShuZXcgRGF0ZShEYXRlLlVUQyh0aGlzLmFjdGl2ZURhdGUueWVhciwgdGhpcy5hY3RpdmVEYXRlLm1vbnRoLCBjdXJyZW50QWN0aXZlRGF0ZSkpKTtcblxuICAgICAgICB0aGlzLnNldEZvY3VzT25BY3RpdmVEYXRlQXN5bmMoKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICB0aGlzLmNsb3NlQ2FsZW5kYXIoKTtcblxuICAgICAgICB0aGlzLmZvcmNlTm90T3BlbkNhbGVuZGFyID0gdHJ1ZTtcblxuICAgICAgICBpZiAodGhpcy5pbnB1dCkge1xuICAgICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3QoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmVFbGVtZW50TW9udGhCdXR0b25zKCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldEZvY3VzT25UaW1lU2VsZWN0b3JPck5leHQoZXZlbnQpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBvblRpbWVTZWxlY3RvcktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJykge1xuICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgIHRoaXMub3BlbkNhbGVuZGFyKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZvY3VzT25OZXh0Q2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgICAgfVxuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIHNldEZvY3VzT25UaW1lU2VsZWN0b3JPck5leHQoZXZlbnQ6IEtleWJvYXJkRXZlbnQgfCBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGltZU9wdGlvbnMpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3RFbGVtZW50ID0gdGhpcy50aW1lU2VsZWN0b3Iuc2VsZWN0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmIChzZWxlY3RFbGVtZW50KSB7XG4gICAgICAgICAgc2VsZWN0RWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1c09uTmV4dENoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3NlQ2FsZW5kYXIoKTtcbiAgfVxuXG4gIG9uTW9udGhDaGFuZ2UoY3VycmVudE1vbnRoOiBVdGNEYXRlKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZE1vbnRoID0gY3VycmVudE1vbnRoO1xuICB9XG5cbiAgb25Nb3VzZURvd25EYXRlcGlja2VyKCk6IHZvaWQge1xuICAgIHRoaXMub3BlbkNhbGVuZGFyKCk7XG4gIH1cblxuICBvcGVuQ2FsZW5kYXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2hvdyB8fCB0aGlzLmRpc2FibGVkIHx8IHRoaXMuZm9yY2VOb3RPcGVuQ2FsZW5kYXIpIHtcbiAgICAgIHRoaXMuZm9yY2VOb3RPcGVuQ2FsZW5kYXIgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2hvdyA9IHRydWU7XG4gICAgfSk7XG5cbiAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLnNlbGVjdGVkRGF0ZTtcblxuICAgIGNsZWFyVGltZW91dCh0aGlzLm9wZW5DYWxlbmRhclRpbWVvdXQpO1xuXG4gICAgdGhpcy5vcGVuQ2FsZW5kYXJUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0KCk7XG4gICAgICB0aGlzLm9wZW5DaGFuZ2UuZW1pdCh0aGlzLnNob3cpO1xuICAgIH0sIDEwMCk7XG4gIH1cblxuICBvblRpbWVTZWxlY3RlZChvcHRpb246IFNlbGVjdE9wdGlvbk1vZGVsKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFRpbWUgPSB0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUob3B0aW9uLnZhbHVlKTtcbiAgICB0aGlzLmZvY3VzT25OZXh0Q2hhbmdlLmVtaXQoKTtcbiAgfVxuXG4gIGdldE1haW5DbGFzcygpOiBBcnJheTxDbGFzc01vZGVsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29udGFpbmVyQ2xhc3MoJycsIFsodGhpcy5leGlzdHMoPGFueT50aGlzLnRpbWVPcHRpb25zKSAmJiAnaGFzLXRpbWUnKSxcbiAgICAodGhpcy5leGlzdHModGhpcy5jb21wYWN0KSAmJiAnY29tcGFjdCcpXSk7XG4gIH1cblxuICBnZXRMYWJlbENsYXNzKCk6IENsYXNzTW9kZWwge1xuICAgIGlmICh0aGlzLmV4aXN0cyh0aGlzLmRpc2FibGVkKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2xhc3MoJ2RhdGUtcGlja2VyLWxhYmVsJywgWydkaXNhYmxlZCddKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2xhc3MoJ2RhdGUtcGlja2VyLWxhYmVsJyk7XG4gICAgfVxuICB9XG5cbiAgY2xvc2VDYWxlbmRhcigpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xuICAgIH0pO1xuXG4gICAgdGhpcy5vcGVuQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICB9XG5cbiAgc2VsZWN0RGF0ZShldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc01vZGVsVmFsaWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuZGF0ZSgpO1xuXG4gICAgaWYgKCF0aGlzLnNvbWVWYWxpZERheXNFcXVhbHNTZWxlY3RlZERheSh0aGlzLmFjdGl2ZURhdGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZERhdGUgPSB0aGlzLmFjdGl2ZURhdGU7XG4gICAgdGhpcy5zZXRGb2N1c09uVGltZVNlbGVjdG9yT3JOZXh0KGV2ZW50KTtcblxuICAgIHRoaXMuY2xvc2VDYWxlbmRhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0FjdGl2ZUVsZW1lbnRNb250aEJ1dHRvbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMuY2FsZW5kYXIubmV4dE1vbnRoUmVmLm5hdGl2ZUVsZW1lbnQgfHxcbiAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMuY2FsZW5kYXIucHJldmlvdXNNb250aFJlZi5uYXRpdmVFbGVtZW50IHx8XG4gICAgICB0aGlzLmNhbGVuZGFyLm1vbnRoU2VsZWN0UmVmICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMuY2FsZW5kYXIubW9udGhTZWxlY3RSZWYuc2VsZWN0Lm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzT25BY3RpdmVEYXRlQXN5bmMoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBlbG1lbWVudFRvRm9jdXMgPSB0aGlzLmNhbGVuZGFyLmFjdGl2ZURhdGVDZWxsO1xuICAgICAgaWYgKGVsbWVtZW50VG9Gb2N1cykge1xuICAgICAgICBlbG1lbWVudFRvRm9jdXMuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9LCAyMDApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc01vZGVsVmFsaWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5wYXJzZSh0aGlzLm1vZGVsKTtcbiAgICByZXR1cm4gaXNOYU4odGltZXN0YW1wKSAhPT0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgYWxsRGF5cygpOiBBcnJheTxEYXlNb2RlbD4ge1xuICAgIGNvbnN0IGFsbERheXMgPSBuZXcgQXJyYXk8RGF5TW9kZWw+KCk7XG5cbiAgICBpZiAodGhpcy5jYWxlbmRhcikge1xuICAgICAgdGhpcy5jYWxlbmRhci53ZWVrcy5mb3JFYWNoKHggPT4geCAmJiB4LmRheXMuZm9yRWFjaChkID0+IGFsbERheXMucHVzaChkKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBhbGxEYXlzO1xuICB9XG5cbiAgcHJpdmF0ZSBzb21lVmFsaWREYXlzRXF1YWxzU2VsZWN0ZWREYXkoc2VsZWN0ZWREYXk6IFV0Y0RhdGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hbGxEYXlzKClcbiAgICAgIC5zb21lKHggPT4geFxuICAgICAgICAmJiB0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZURhdGUodGhpcy5kYXRlU2VydmljZS51dGNEYXRlKHguZGF0ZSksIHNlbGVjdGVkRGF5KVxuICAgICAgICAmJiAoeC5pc0F2YWlsYWJsZSB8fCAheC5pc0Rpc2FibGVkKSk7XG4gIH1cblxuICBwcml2YXRlIGRhdGUoKTogVXRjRGF0ZSB7XG4gICAgY29uc3QgbW9kZWxEYXRlID0gbmV3IERhdGUodGhpcy5tb2RlbCk7XG4gICAgY29uc3QgbW9kZWxVdGNEYXRlID0gbmV3IFV0Y0RhdGUobW9kZWxEYXRlLmdldEZ1bGxZZWFyKCksIG1vZGVsRGF0ZS5nZXRNb250aCgpLCBtb2RlbERhdGUuZ2V0RGF0ZSgpKTtcbiAgICByZXR1cm4gbW9kZWxVdGNEYXRlO1xuICB9XG59XG4iLCI8bGFiZWwgW25hc0NsYXNzXT1cImdldE1haW5DbGFzcygpXCI+XG4gIDxkaXYgW25hc0NsYXNzXT1cImdldENsYXNzKCdkYXRlLXBpY2tlci1jb250ZW50JylcIj5cbiAgICA8ZGl2IFtuYXNDbGFzc109XCJnZXRDbGFzcygnZGF0ZS1waWNrZXItd3JhcHBlcicpXCI+XG4gICAgICA8ZGl2IFtuYXNDbGFzc109XCJnZXRDbGFzcygnY29udHJvbHMnLCBzaG93ICYmICdhY3RpdmUnKVwiXG4gICAgICAgIChtb3VzZWRvd24pPVwib25Nb3VzZURvd25EYXRlcGlja2VyKClcIj5cbiAgICAgICAgPGRpdiAjZGF0ZVBpY2tlckNvbnRlbnRcbiAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0TGFiZWxDbGFzcygpXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxpbnB1dCAjaW5wdXRcbiAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2RhdGUtcGlja2VyJylcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiYXJpYURlc2NyaWJlZGJ5XCJcbiAgICAgICAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cInRydWVcIlxuICAgICAgICAgIChrZXlkb3duLnRhYik9XCJzZWxlY3REYXRlKCRldmVudClcIlxuICAgICAgICAgIChrZXlkb3duLnNoaWZ0LnRhYik9XCJvbklucHV0S2V5ZG93blNoaWZ0VGFiKCRldmVudClcIlxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNlbGVjdERhdGUoJGV2ZW50KVwiXG4gICAgICAgICAgKGtleWRvd24uYXJyb3dkb3duKT1cIm9uQ2FsZW5kYXJLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgIChrZXlkb3duLmFycm93bGVmdCk9XCJvbkNhbGVuZGFyS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAoa2V5ZG93bi5hcnJvd3JpZ2h0KT1cIm9uQ2FsZW5kYXJLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgIChrZXlkb3duLmFycm93dXApPVwib25DYWxlbmRhcktleURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgKGZvY3VzKT1cIm9wZW5DYWxlbmRhcigpXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1vZGVsXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2NhbGVuZGFyLWljb24nKVwiPlxuICAgICAgICA8bmFzLWljb24gKm5nSWY9XCJleGlzdHMoZGlzYWJsZWQpOyBlbHNlIHJlZ3VsYXJJY29uXCJcbiAgICAgICAgICBbaWNvbl09XCInY2FsZW5kYXItLWRpc2FibGVkJ1wiXG4gICAgICAgICAgW25nU3R5bGVdPVwieydwb2ludGVyLWV2ZW50cyc6ICdub25lJ31cIj5cbiAgICAgICAgPC9uYXMtaWNvbj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNyZWd1bGFySWNvbj5cbiAgICAgICAgICA8bmFzLWljb24gaWNvbj1cImNhbGVuZGFyXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvcGVuQ2FsZW5kYXIoKVwiPlxuICAgICAgICAgIDwvbmFzLWljb24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuYXMtY2FsZW5kYXIgI2NhbGVuZGFyICpuZ0lmPVwic2hvd1wiXG4gICAgICAgIFtuYXNGb3JtR3JvdXBdPVwibmFzRm9ybUdyb3VwXCJcbiAgICAgICAgW25hc0Zvcm1Db250cm9sTmFtZV09XCJuYXNGb3JtQ29udHJvbE5hbWVcIlxuICAgICAgICBbZGF0ZURpc3BsYXlGb3JtYXRdPVwiZGF0ZURpc3BsYXlGb3JtYXRcIlxuICAgICAgICBbbm9BdmFpbGFibGVGbGlnaHRzTGFiZWxdPVwibm9BdmFpbGFibGVGbGlnaHRzTGFiZWxcIlxuICAgICAgICBbYXZhaWxhYmxlRmxpZ2h0c0xhYmVsXT1cImF2YWlsYWJsZUZsaWdodHNMYWJlbFwiXG4gICAgICAgIFthdmFpbGFiaWxpdHldPVwiZXhpc3RzKGF2YWlsYWJpbGl0eSlcIlxuICAgICAgICBbYXZhaWxhYmxlRGF0ZXNdPVwiYXZhaWxhYmxlRGF0ZXNcIlxuICAgICAgICBbbG93ZXJMaW1pdERhdGVdPVwibG93ZXJMaW1pdERhdGVcIlxuICAgICAgICBbZGlzYWJsZVBhc3RTZWxlY3Rpb25dPVwiZXhpc3RzKGRpc2FibGVQYXN0U2VsZWN0aW9uKVwiXG4gICAgICAgIFtsb2NhbGVdPVwibG9jYWxlXCJcbiAgICAgICAgW2FyaWFMYWJlbFByZXZpb3VzTW9udGhdPVwiYXJpYUxhYmVsUHJldmlvdXNNb250aFwiXG4gICAgICAgIFthcmlhTGFiZWxOZXh0TW9udGhdPVwiYXJpYUxhYmVsTmV4dE1vbnRoXCJcbiAgICAgICAgWyhhY3RpdmVEYXRlKV09XCJhY3RpdmVEYXRlXCJcbiAgICAgICAgWyhzZWxlY3RlZERhdGUpXT1cInNlbGVjdGVkRGF0ZVwiXG4gICAgICAgIChmb2N1c09uTmV4dENoYW5nZSk9XCJzZXRGb2N1c09uVGltZVNlbGVjdG9yT3JOZXh0KCRldmVudClcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbkNhbGVuZGFyS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgKG1vbnRoQ2hhbmdlKT1cIm9uTW9udGhDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgPC9uYXMtY2FsZW5kYXI+XG4gICAgPC9kaXY+XG4gICAgPG5hcy1iYWNrZHJvcCBbYXJpYUxhYmVsQmFja2Ryb3BdPVwiYXJpYUxhYmVsQmFja2Ryb3BcIlxuICAgICAgWyhzaG93QmFja2Ryb3ApXT1cInNob3dCYWNrZHJvcFwiPjwvbmFzLWJhY2tkcm9wPlxuICA8L2Rpdj5cbjwvbGFiZWw+XG48ZGl2ICpuZ0lmPVwidGltZU9wdGlvbnNcIlxuICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3RpbWUtc2VsZWN0b3Itd3JhcHBlcicpXCI+XG4gIDxuYXMtc2VsZWN0ICN0aW1lU2VsZWN0b3JcbiAgICBbc2VsZWN0ZWRdPVwic2VsZWN0ZWRUaW1lT3B0aW9uXCJcbiAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwib25UaW1lU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgKGtleWRvd24pPVwib25UaW1lU2VsZWN0b3JLZXlkb3duKCRldmVudClcIj5cbiAgICA8bmFzLW9wdGlvbiAqbmdGb3I9XCJsZXQgdGltZSBvZiB0aW1lT3B0aW9uc1wiXG4gICAgICBbb3B0aW9uXT1cInRpbWVcIj48L25hcy1vcHRpb24+XG4gIDwvbmFzLXNlbGVjdD5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuIl19
|