@nova-ui/charts
Version:
Nova Charts is a library created to provide potential consumers with solutions for various data visualizations that conform with the Nova Design Language. It's designed to solve common patterns identified by UX designers, but also be very flexible so that
113 lines • 15.5 kB
JavaScript
// © 2022 SolarWinds Worldwide, LLC. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
import isEmpty from "lodash/isEmpty";
import { Subject } from "rxjs";
import { takeUntil } from "rxjs/operators";
import { INTERACTION_COORDINATES_EVENT, INTERACTION_VALUES_ACTIVE_EVENT, INTERACTION_VALUES_EVENT, MOUSE_ACTIVE_EVENT, } from "../../constants";
import { ChartPlugin } from "../common/chart-plugin";
import { InteractionType } from "../common/types";
import { UtilityService } from "../common/utility.service";
/** @ignore */
export class MouseInteractiveAreaPlugin extends ChartPlugin {
mouseInteractiveArea;
destroy$ = new Subject();
interactionValuesActive = true;
constructor(mouseInteractiveArea) {
super();
this.mouseInteractiveArea = mouseInteractiveArea;
}
initialize() {
this.mouseInteractiveArea.active
.pipe(takeUntil(this.destroy$))
.subscribe((active) => {
this.chart
.getEventBus()
.getStream(MOUSE_ACTIVE_EVENT)
.next({ data: active });
});
this.chart
.getEventBus()
.getStream(MOUSE_ACTIVE_EVENT)
.pipe(takeUntil(this.destroy$))
.subscribe((event) => {
const active = event.data;
if (!active && this.chart.getDataManager().chartSeriesSet) {
this.highlightReset();
}
});
this.chart
.getEventBus()
.getStream(INTERACTION_VALUES_ACTIVE_EVENT)
.pipe(takeUntil(this.destroy$))
.subscribe((event) => (this.interactionValuesActive = event.data));
this.mouseInteractiveArea.interaction
.pipe(takeUntil(this.destroy$))
.subscribe((event) => {
const gridScales = this.chart.getGrid().scales;
if (isEmpty(gridScales)) {
return;
}
if (this.interactionValuesActive) {
const xScales = gridScales.x.list;
const yScales = gridScales.y.list;
const xCoordinate = event.coordinates.x;
const yCoordinate = event.coordinates.y;
const values = UtilityService.getXYValues(xScales, yScales, xCoordinate, yCoordinate);
this.chart
.getEventBus()
.getStream(INTERACTION_VALUES_EVENT)
.next({
data: { interactionType: event.type, values },
});
}
this.chart
.getEventBus()
.getStream(INTERACTION_COORDINATES_EVENT)
.next({
data: {
interactionType: event.type,
coordinates: event.coordinates,
},
});
});
}
update() {
this.highlightReset();
}
updateDimensions() {
this.highlightReset();
}
destroy() {
this.destroy$.next();
this.destroy$.complete();
}
highlightReset() {
this.chart
.getEventBus()
.getStream(INTERACTION_VALUES_EVENT)
.next({
data: {
interactionType: InteractionType.MouseMove,
values: {},
},
});
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW91c2UtaW50ZXJhY3RpdmUtYXJlYS1wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29yZS9wbHVnaW5zL21vdXNlLWludGVyYWN0aXZlLWFyZWEtcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlEQUF5RDtBQUN6RCxFQUFFO0FBQ0YsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSw4RUFBOEU7QUFDOUUsK0VBQStFO0FBQy9FLDhFQUE4RTtBQUM5RSw0REFBNEQ7QUFDNUQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSx1REFBdUQ7QUFDdkQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSw0RUFBNEU7QUFDNUUsK0VBQStFO0FBQy9FLDBFQUEwRTtBQUMxRSxpRkFBaUY7QUFDakYsNkVBQTZFO0FBQzdFLGlCQUFpQjtBQUVqQixPQUFPLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUczQyxPQUFPLEVBQ0gsNkJBQTZCLEVBQzdCLCtCQUErQixFQUMvQix3QkFBd0IsRUFDeEIsa0JBQWtCLEdBQ3JCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXJELE9BQU8sRUFBcUIsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTNELGNBQWM7QUFDZCxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsV0FBVztJQUluQztJQUhILFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBQ3hDLHVCQUF1QixHQUFHLElBQUksQ0FBQztJQUV2QyxZQUFvQixvQkFBMEM7UUFDMUQsS0FBSyxFQUFFLENBQUM7UUFEUSx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO0lBRTlELENBQUM7SUFFTSxVQUFVO1FBQ2IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU07YUFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsTUFBZSxFQUFFLEVBQUU7WUFDM0IsSUFBSSxDQUFDLEtBQUs7aUJBQ0wsV0FBVyxFQUFFO2lCQUNiLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQztpQkFDN0IsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFFUCxJQUFJLENBQUMsS0FBSzthQUNMLFdBQVcsRUFBRTthQUNiLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQzthQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5QixTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNqQixNQUFNLE1BQU0sR0FBWSxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ25DLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQyxjQUFjLEVBQUU7Z0JBQ3ZELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUN6QjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRVAsSUFBSSxDQUFDLEtBQUs7YUFDTCxXQUFXLEVBQUU7YUFDYixTQUFTLENBQUMsK0JBQStCLENBQUM7YUFDMUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUV2RSxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVzthQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5QixTQUFTLENBQUMsQ0FBQyxLQUF3QixFQUFFLEVBQUU7WUFDcEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDL0MsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQ3JCLE9BQU87YUFDVjtZQUVELElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFO2dCQUM5QixNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDbEMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2xDLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztnQkFFeEMsTUFBTSxNQUFNLEdBQ1IsY0FBYyxDQUFDLFdBQVcsQ0FDdEIsT0FBTyxFQUNQLE9BQU8sRUFDUCxXQUFXLEVBQ1gsV0FBVyxDQUNkLENBQUM7Z0JBQ04sSUFBSSxDQUFDLEtBQUs7cUJBQ0wsV0FBVyxFQUFFO3FCQUNiLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQztxQkFDbkMsSUFBSSxDQUFDO29CQUNGLElBQUksRUFBRSxFQUFFLGVBQWUsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtpQkFDaEQsQ0FBQyxDQUFDO2FBQ1Y7WUFFRCxJQUFJLENBQUMsS0FBSztpQkFDTCxXQUFXLEVBQUU7aUJBQ2IsU0FBUyxDQUFDLDZCQUE2QixDQUFDO2lCQUN4QyxJQUFJLENBQUM7Z0JBQ0YsSUFBSSxFQUFFO29CQUNGLGVBQWUsRUFBRSxLQUFLLENBQUMsSUFBSTtvQkFDM0IsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO2lCQUNqQzthQUNKLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVNLE1BQU07UUFDVCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVNLGdCQUFnQjtRQUNuQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVNLE9BQU87UUFDVixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVPLGNBQWM7UUFDbEIsSUFBSSxDQUFDLEtBQUs7YUFDTCxXQUFXLEVBQUU7YUFDYixTQUFTLENBQUMsd0JBQXdCLENBQUM7YUFDbkMsSUFBSSxDQUFDO1lBQ0YsSUFBSSxFQUFFO2dCQUNGLGVBQWUsRUFBRSxlQUFlLENBQUMsU0FBUztnQkFDMUMsTUFBTSxFQUFFLEVBQUU7YUFDYjtTQUNKLENBQUMsQ0FBQztJQUNYLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIi8vIMKpIDIwMjIgU29sYXJXaW5kcyBXb3JsZHdpZGUsIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyAgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG9cbi8vICBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuLy8gIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vclxuLy8gIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyAgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vICBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vICBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyAgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyAgVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgaXNFbXB0eSBmcm9tIFwibG9kYXNoL2lzRW1wdHlcIjtcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5cbmltcG9ydCB7IElJbnRlcmFjdGlvblZhbHVlcyB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQge1xuICAgIElOVEVSQUNUSU9OX0NPT1JESU5BVEVTX0VWRU5ULFxuICAgIElOVEVSQUNUSU9OX1ZBTFVFU19BQ1RJVkVfRVZFTlQsXG4gICAgSU5URVJBQ1RJT05fVkFMVUVTX0VWRU5ULFxuICAgIE1PVVNFX0FDVElWRV9FVkVOVCxcbn0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQ2hhcnRQbHVnaW4gfSBmcm9tIFwiLi4vY29tbW9uL2NoYXJ0LXBsdWdpblwiO1xuaW1wb3J0IHsgTW91c2VJbnRlcmFjdGl2ZUFyZWEgfSBmcm9tIFwiLi4vY29tbW9uL21vdXNlLWludGVyYWN0aXZlLWFyZWFcIjtcbmltcG9ydCB7IElJbnRlcmFjdGlvbkV2ZW50LCBJbnRlcmFjdGlvblR5cGUgfSBmcm9tIFwiLi4vY29tbW9uL3R5cGVzXCI7XG5pbXBvcnQgeyBVdGlsaXR5U2VydmljZSB9IGZyb20gXCIuLi9jb21tb24vdXRpbGl0eS5zZXJ2aWNlXCI7XG5cbi8qKiBAaWdub3JlICovXG5leHBvcnQgY2xhc3MgTW91c2VJbnRlcmFjdGl2ZUFyZWFQbHVnaW4gZXh0ZW5kcyBDaGFydFBsdWdpbiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJpdmF0ZSBpbnRlcmFjdGlvblZhbHVlc0FjdGl2ZSA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vdXNlSW50ZXJhY3RpdmVBcmVhOiBNb3VzZUludGVyYWN0aXZlQXJlYSkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1vdXNlSW50ZXJhY3RpdmVBcmVhLmFjdGl2ZVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoYWN0aXZlOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFydFxuICAgICAgICAgICAgICAgICAgICAuZ2V0RXZlbnRCdXMoKVxuICAgICAgICAgICAgICAgICAgICAuZ2V0U3RyZWFtKE1PVVNFX0FDVElWRV9FVkVOVClcbiAgICAgICAgICAgICAgICAgICAgLm5leHQoeyBkYXRhOiBhY3RpdmUgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNoYXJ0XG4gICAgICAgICAgICAuZ2V0RXZlbnRCdXMoKVxuICAgICAgICAgICAgLmdldFN0cmVhbShNT1VTRV9BQ1RJVkVfRVZFTlQpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZTogYm9vbGVhbiA9IGV2ZW50LmRhdGE7XG4gICAgICAgICAgICAgICAgaWYgKCFhY3RpdmUgJiYgdGhpcy5jaGFydC5nZXREYXRhTWFuYWdlcigpLmNoYXJ0U2VyaWVzU2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0UmVzZXQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNoYXJ0XG4gICAgICAgICAgICAuZ2V0RXZlbnRCdXMoKVxuICAgICAgICAgICAgLmdldFN0cmVhbShJTlRFUkFDVElPTl9WQUxVRVNfQUNUSVZFX0VWRU5UKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+ICh0aGlzLmludGVyYWN0aW9uVmFsdWVzQWN0aXZlID0gZXZlbnQuZGF0YSkpO1xuXG4gICAgICAgIHRoaXMubW91c2VJbnRlcmFjdGl2ZUFyZWEuaW50ZXJhY3Rpb25cbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBJSW50ZXJhY3Rpb25FdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyaWRTY2FsZXMgPSB0aGlzLmNoYXJ0LmdldEdyaWQoKS5zY2FsZXM7XG4gICAgICAgICAgICAgICAgaWYgKGlzRW1wdHkoZ3JpZFNjYWxlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmludGVyYWN0aW9uVmFsdWVzQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHhTY2FsZXMgPSBncmlkU2NhbGVzLngubGlzdDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeVNjYWxlcyA9IGdyaWRTY2FsZXMueS5saXN0O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB4Q29vcmRpbmF0ZSA9IGV2ZW50LmNvb3JkaW5hdGVzLng7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHlDb29yZGluYXRlID0gZXZlbnQuY29vcmRpbmF0ZXMueTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZXM6IElJbnRlcmFjdGlvblZhbHVlcyA9XG4gICAgICAgICAgICAgICAgICAgICAgICBVdGlsaXR5U2VydmljZS5nZXRYWVZhbHVlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4U2NhbGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlTY2FsZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeENvb3JkaW5hdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeUNvb3JkaW5hdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRFdmVudEJ1cygpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZ2V0U3RyZWFtKElOVEVSQUNUSU9OX1ZBTFVFU19FVkVOVClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7IGludGVyYWN0aW9uVHlwZTogZXZlbnQudHlwZSwgdmFsdWVzIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0XG4gICAgICAgICAgICAgICAgICAgIC5nZXRFdmVudEJ1cygpXG4gICAgICAgICAgICAgICAgICAgIC5nZXRTdHJlYW0oSU5URVJBQ1RJT05fQ09PUkRJTkFURVNfRVZFTlQpXG4gICAgICAgICAgICAgICAgICAgIC5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGlvblR5cGU6IGV2ZW50LnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZXM6IGV2ZW50LmNvb3JkaW5hdGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpZ2hsaWdodFJlc2V0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZURpbWVuc2lvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0UmVzZXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZ2hsaWdodFJlc2V0KCkge1xuICAgICAgICB0aGlzLmNoYXJ0XG4gICAgICAgICAgICAuZ2V0RXZlbnRCdXMoKVxuICAgICAgICAgICAgLmdldFN0cmVhbShJTlRFUkFDVElPTl9WQUxVRVNfRVZFTlQpXG4gICAgICAgICAgICAubmV4dCh7XG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGlvblR5cGU6IEludGVyYWN0aW9uVHlwZS5Nb3VzZU1vdmUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlczoge30sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==