@workflow/web-shared 5.0.0-beta.43 → 5.0.0-beta.46
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/README.md +4 -4
- package/dist/components/event-list-view.d.ts +12 -0
- package/dist/components/event-list-view.d.ts.map +1 -1
- package/dist/components/event-list-view.js +41 -20
- package/dist/components/sidebar/attribute-panel.d.ts +6 -2
- package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
- package/dist/components/sidebar/attribute-panel.js +10 -8
- package/dist/components/sidebar/copyable-data-block.d.ts.map +1 -1
- package/dist/components/sidebar/copyable-data-block.js +2 -2
- package/dist/components/sidebar/entity-detail-panel.d.ts +6 -2
- package/dist/components/sidebar/entity-detail-panel.d.ts.map +1 -1
- package/dist/components/sidebar/entity-detail-panel.js +13 -5
- package/dist/components/sidebar/events-list.d.ts.map +1 -1
- package/dist/components/sidebar/events-list.js +12 -5
- package/dist/components/sidebar/resolve-hook-modal.js +1 -1
- package/dist/components/sidebar/sidebar-data-context.d.ts +2 -0
- package/dist/components/sidebar/sidebar-data-context.d.ts.map +1 -1
- package/dist/components/sidebar/sidebar-data-context.js +1 -1
- package/dist/components/stream-viewer.js +2 -2
- package/dist/components/trace-viewer/components/detail-panel-width.d.ts +4 -4
- package/dist/components/trace-viewer/components/detail-panel-width.d.ts.map +1 -1
- package/dist/components/trace-viewer/components/detail-panel-width.js +5 -5
- package/dist/components/trace-viewer/components/detail-panel.d.ts +1 -1
- package/dist/components/trace-viewer/components/detail-panel.d.ts.map +1 -1
- package/dist/components/trace-viewer/components/detail-panel.js +3 -3
- package/dist/components/trace-viewer/components/draggable-border.d.ts +1 -1
- package/dist/components/trace-viewer/components/draggable-border.js +2 -2
- package/dist/components/trace-viewer/components/minimap.js +4 -4
- package/dist/components/trace-viewer/components/span-markers.d.ts +8 -9
- package/dist/components/trace-viewer/components/span-markers.d.ts.map +1 -1
- package/dist/components/trace-viewer/components/span-markers.js +13 -10
- package/dist/components/trace-viewer/components/timeline.d.ts +1 -1
- package/dist/components/trace-viewer/components/timeline.js +4 -4
- package/dist/components/trace-viewer/components/use-row-window.d.ts +1 -1
- package/dist/components/trace-viewer/components/use-row-window.js +2 -2
- package/dist/components/trace-viewer/trace-viewer.js +3 -3
- package/dist/components/trace-viewer/utils.d.ts +3 -1
- package/dist/components/trace-viewer/utils.d.ts.map +1 -1
- package/dist/components/trace-viewer/utils.js +6 -5
- package/dist/components/ui/data-inspector.d.ts +7 -1
- package/dist/components/ui/data-inspector.d.ts.map +1 -1
- package/dist/components/ui/data-inspector.js +10 -5
- package/dist/components/ui/decrypt-button.d.ts +5 -1
- package/dist/components/ui/decrypt-button.d.ts.map +1 -1
- package/dist/components/ui/decrypt-button.js +4 -4
- package/dist/components/ui/duplicate-event-tooltip.d.ts +15 -5
- package/dist/components/ui/duplicate-event-tooltip.d.ts.map +1 -1
- package/dist/components/ui/duplicate-event-tooltip.js +18 -9
- package/dist/components/ui/error-stack-block.js +4 -4
- package/dist/components/ui/timestamp-tooltip.d.ts +5 -3
- package/dist/components/ui/timestamp-tooltip.d.ts.map +1 -1
- package/dist/components/ui/timestamp-tooltip.js +9 -9
- package/dist/components/workflow-traces/event-colors.d.ts.map +1 -1
- package/dist/components/workflow-traces/event-colors.js +11 -1
- package/dist/components/workflow-traces/trace-span-construction.d.ts.map +1 -1
- package/dist/components/workflow-traces/trace-span-construction.js +5 -4
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/lib/duplicate-events.d.ts +1 -1
- package/dist/lib/duplicate-events.js +2 -2
- package/dist/lib/hydration.d.ts.map +1 -1
- package/dist/lib/hydration.js +8 -13
- package/dist/lib/sealed-events.d.ts +28 -0
- package/dist/lib/sealed-events.d.ts.map +1 -0
- package/dist/lib/sealed-events.js +30 -0
- package/dist/lib/trace-builder.d.ts.map +1 -1
- package/dist/lib/trace-builder.js +8 -5
- package/dist/lib/utils.d.ts +1 -1
- package/dist/lib/utils.js +2 -2
- package/dist/lib/zstd-browser-decoder.js +2 -2
- package/package.json +5 -5
- package/src/components/event-list-view.tsx +57 -22
- package/src/components/sidebar/attribute-panel.tsx +15 -7
- package/src/components/sidebar/copyable-data-block.tsx +8 -1
- package/src/components/sidebar/entity-detail-panel.tsx +18 -2
- package/src/components/sidebar/events-list.tsx +16 -6
- package/src/components/sidebar/resolve-hook-modal.tsx +2 -2
- package/src/components/sidebar/sidebar-data-context.tsx +2 -0
- package/src/components/stream-viewer.tsx +1 -1
- package/src/components/trace-viewer/components/detail-panel-width.ts +4 -4
- package/src/components/trace-viewer/components/detail-panel.tsx +3 -1
- package/src/components/trace-viewer/components/draggable-border.tsx +1 -1
- package/src/components/trace-viewer/components/minimap.tsx +3 -3
- package/src/components/trace-viewer/components/span-markers.tsx +18 -13
- package/src/components/trace-viewer/components/timeline.tsx +4 -4
- package/src/components/trace-viewer/components/use-row-window.ts +1 -1
- package/src/components/trace-viewer/trace-viewer.tsx +2 -2
- package/src/components/trace-viewer/utils.test.ts +5 -3
- package/src/components/trace-viewer/utils.ts +12 -8
- package/src/components/ui/data-inspector.tsx +19 -3
- package/src/components/ui/decrypt-button.tsx +9 -2
- package/src/components/ui/duplicate-event-tooltip.tsx +32 -10
- package/src/components/ui/error-stack-block.tsx +3 -3
- package/src/components/ui/timestamp-tooltip.tsx +16 -6
- package/src/components/workflow-traces/event-colors.ts +11 -0
- package/src/components/workflow-traces/trace-span-construction.test.ts +27 -1
- package/src/components/workflow-traces/trace-span-construction.ts +5 -3
- package/src/index.ts +4 -0
- package/src/lib/duplicate-events.ts +1 -1
- package/src/lib/hydration.ts +7 -12
- package/src/lib/sealed-events.ts +32 -0
- package/src/lib/trace-builder.test.ts +29 -1
- package/src/lib/trace-builder.ts +10 -5
- package/src/lib/utils.ts +1 -1
- package/src/lib/zstd-browser-decoder.ts +1 -1
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
|
-
import type { SpanMarker } from '../utils';
|
|
2
|
+
import type { SpanMarker, SpanMarkerKind } from '../utils';
|
|
3
3
|
export interface VisibleMarker {
|
|
4
4
|
leftPct: number;
|
|
5
|
-
/** Absolute (epoch) timestamp in ms
|
|
5
|
+
/** Absolute (epoch) timestamp in ms, for the tooltip. */
|
|
6
6
|
timeMs: number;
|
|
7
|
+
kind: SpanMarkerKind;
|
|
7
8
|
}
|
|
8
9
|
/**
|
|
9
10
|
* Project point-in-time markers onto the visible window `[visibleStartMs,
|
|
@@ -14,18 +15,16 @@ export declare function projectMarkers(markers: SpanMarker[], visibleStartMs: nu
|
|
|
14
15
|
/**
|
|
15
16
|
* Thin out ticks that would visually collide: walk left-to-right and keep each
|
|
16
17
|
* one unless it sits within MARKER_MIN_GAP_PX of the last kept tick. Well-spaced
|
|
17
|
-
* markers survive even when a tight cluster elsewhere on the bar gets thinned
|
|
18
|
+
* markers survive even when a tight cluster elsewhere on the bar gets thinned;
|
|
18
19
|
* zoom in to resolve a cluster.
|
|
19
20
|
*/
|
|
20
21
|
export declare function cullCollidingMarkers(projected: VisibleMarker[], pixelWidth: number): VisibleMarker[];
|
|
21
22
|
/**
|
|
22
|
-
* Point-in-time markers overlaid on a bar
|
|
23
|
+
* Point-in-time markers overlaid on a bar: one vertical tick per event (hook
|
|
23
24
|
* resumptions and attribute writes), centered on the bar. Each tick sits inside
|
|
24
|
-
* a larger hit target and, on hover, shows the shared
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* of the product. The position is clamped a hair inside the bar so an edge
|
|
28
|
-
* marker never jams the rounded corner.
|
|
25
|
+
* a larger hit target and, on hover, shows the shared relative-time context
|
|
26
|
+
* card, prefixed with the event kind. The position is clamped a hair inside
|
|
27
|
+
* the bar so an edge marker never jams the rounded corner.
|
|
29
28
|
*/
|
|
30
29
|
export declare function MarkerLayer({ markers, }: {
|
|
31
30
|
markers: VisibleMarker[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"span-markers.d.ts","sourceRoot":"","sources":["../../../../src/components/trace-viewer/components/span-markers.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"span-markers.d.ts","sourceRoot":"","sources":["../../../../src/components/trace-viewer/components/span-markers.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAW3D,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,cAAc,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,UAAU,EAAE,EACrB,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,GACnB,aAAa,EAAE,CAgBjB;AAKD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,aAAa,EAAE,EAC1B,UAAU,EAAE,MAAM,GACjB,aAAa,EAAE,CAUjB;AAeD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,EAC1B,OAAO,GACR,EAAE;IACD,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B,GAAG,SAAS,CAkBZ;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,EACvC,SAAS,EACT,KAAK,EACL,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC,GAAG,SAAS,CAyCZ"}
|
|
@@ -3,6 +3,10 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
|
|
|
3
3
|
import { ArrowLeft, ArrowRight } from 'lucide-react';
|
|
4
4
|
import { cn } from '../../../lib/cn';
|
|
5
5
|
import { TimestampTooltip } from '../../ui/timestamp-tooltip';
|
|
6
|
+
const MARKER_KIND_PREFIX = {
|
|
7
|
+
hook_received: 'Hook received',
|
|
8
|
+
attr_set: 'Attribute set',
|
|
9
|
+
};
|
|
6
10
|
/**
|
|
7
11
|
* Project point-in-time markers onto the visible window `[visibleStartMs,
|
|
8
12
|
* visibleEndMs]` of a bar, as percentages of that window. Markers outside the
|
|
@@ -20,6 +24,7 @@ export function projectMarkers(markers, visibleStartMs, visibleEndMs) {
|
|
|
20
24
|
{
|
|
21
25
|
leftPct: ((m.timeMs - visibleStartMs) / visibleDurationMs) * 100,
|
|
22
26
|
timeMs: m.timeMs,
|
|
27
|
+
kind: m.kind,
|
|
23
28
|
},
|
|
24
29
|
];
|
|
25
30
|
});
|
|
@@ -29,7 +34,7 @@ const MARKER_MIN_GAP_PX = 16;
|
|
|
29
34
|
/**
|
|
30
35
|
* Thin out ticks that would visually collide: walk left-to-right and keep each
|
|
31
36
|
* one unless it sits within MARKER_MIN_GAP_PX of the last kept tick. Well-spaced
|
|
32
|
-
* markers survive even when a tight cluster elsewhere on the bar gets thinned
|
|
37
|
+
* markers survive even when a tight cluster elsewhere on the bar gets thinned;
|
|
33
38
|
* zoom in to resolve a cluster.
|
|
34
39
|
*/
|
|
35
40
|
export function cullCollidingMarkers(projected, pixelWidth) {
|
|
@@ -52,16 +57,14 @@ function MarkerTick({ className }) {
|
|
|
52
57
|
return (_jsx("span", { className: cn('block w-[3px] rounded-full bg-gray-1000', className) }));
|
|
53
58
|
}
|
|
54
59
|
/**
|
|
55
|
-
* Point-in-time markers overlaid on a bar
|
|
60
|
+
* Point-in-time markers overlaid on a bar: one vertical tick per event (hook
|
|
56
61
|
* resumptions and attribute writes), centered on the bar. Each tick sits inside
|
|
57
|
-
* a larger hit target and, on hover, shows the shared
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
* of the product. The position is clamped a hair inside the bar so an edge
|
|
61
|
-
* marker never jams the rounded corner.
|
|
62
|
+
* a larger hit target and, on hover, shows the shared relative-time context
|
|
63
|
+
* card, prefixed with the event kind. The position is clamped a hair inside
|
|
64
|
+
* the bar so an edge marker never jams the rounded corner.
|
|
62
65
|
*/
|
|
63
66
|
export function MarkerLayer({ markers, }) {
|
|
64
|
-
return (_jsx(_Fragment, { children: markers.map((m) => (_jsx("span", { className: "pointer-events-auto absolute top-0 bottom-0 z-10 flex w-8 -translate-x-1/2 items-center justify-center", style: { left: `clamp(8px, ${m.leftPct}%, calc(100% - 8px))` }, children: _jsx(TimestampTooltip, { date: m.timeMs, children: _jsx("span", { className: "flex h-6 w-8 items-center justify-center", children: _jsx(MarkerTick, { className: "h-3" }) }) }) }, m.timeMs))) }));
|
|
67
|
+
return (_jsx(_Fragment, { children: markers.map((m, index) => (_jsx("span", { className: "pointer-events-auto absolute top-0 bottom-0 z-10 flex w-8 -translate-x-1/2 items-center justify-center", style: { left: `clamp(8px, ${m.leftPct}%, calc(100% - 8px))` }, children: _jsx(TimestampTooltip, { date: m.timeMs, prefix: MARKER_KIND_PREFIX[m.kind], children: _jsx("span", { className: "flex h-6 w-8 items-center justify-center", children: _jsx(MarkerTick, { className: "h-3" }) }) }) }, `${m.timeMs}-${index}`))) }));
|
|
65
68
|
}
|
|
66
69
|
/**
|
|
67
70
|
* Edge indicator for markers that have scrolled out of view while zoomed in.
|
|
@@ -76,10 +79,10 @@ export function OffscreenMarkerIndicator({ direction, count, targetMs, onReveal,
|
|
|
76
79
|
const chevron = (_jsx("span", { className: "flex h-6 w-6 shrink-0 items-center justify-center", children: _jsx(Chevron, { className: "size-3 text-gray-900" }) }));
|
|
77
80
|
const tick = _jsx(MarkerTick, { className: "h-3.5 shrink-0" });
|
|
78
81
|
return (_jsx("button", { type: "button", "aria-label": label, title: label, onClick: (e) => {
|
|
79
|
-
// Don't let the row's onClick fire
|
|
82
|
+
// Don't let the row's onClick fire, since revealing shouldn't also
|
|
80
83
|
// change the span selection.
|
|
81
84
|
e.stopPropagation();
|
|
82
85
|
onReveal?.(targetMs);
|
|
83
86
|
}, className: cn('pointer-events-auto absolute top-1/2 z-20 flex h-6 -translate-y-1/2 cursor-pointer items-center rounded-[0.25rem] border border-gray-alpha-400 bg-background-100 hover:bg-gray-100', direction === 'right' ? 'right-0 pl-1.5' : 'left-0 pr-1.5'), children: direction === 'left' ? (_jsxs(_Fragment, { children: [chevron, tick] })) : (_jsxs(_Fragment, { children: [tick, chevron] })) }));
|
|
84
87
|
}
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Bhbi1tYXJrZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdHJhY2Utdmlld2VyL2NvbXBvbmVudHMvc3Bhbi1tYXJrZXJzLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBRWIsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFckQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBYTlEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUM1QixPQUFxQixFQUNyQixjQUFzQixFQUN0QixZQUFvQjtJQUVwQixNQUFNLGlCQUFpQixHQUFHLFlBQVksR0FBRyxjQUFjLENBQUM7SUFDeEQsSUFBSSxpQkFBaUIsSUFBSSxDQUFDO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFFdEMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDM0IsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLGNBQWMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLFlBQVksRUFBRSxDQUFDO1lBQ3pELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUNELE9BQU87WUFDTDtnQkFDRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxHQUFHO2dCQUNoRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU07YUFDakI7U0FDRixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsMkVBQTJFO0FBQzNFLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDO0FBRTdCOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxTQUEwQixFQUMxQixVQUFrQjtJQUVsQixNQUFNLElBQUksR0FBb0IsRUFBRSxDQUFDO0lBQ2pDLElBQUksV0FBVyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztJQUMzQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQzFCLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQztRQUM3RCxJQUFJLEtBQUssR0FBRyxpQkFBaUI7WUFBRSxTQUFTO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDYixXQUFXLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUMxQixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsOEVBQThFO0FBQzlFLFlBQVk7QUFDWiw4RUFBOEU7QUFFOUUsd0RBQXdEO0FBQ3hELFNBQVMsVUFBVSxDQUFDLEVBQUUsU0FBUyxFQUEwQjtJQUN2RCxPQUFPLENBQ0wsZUFDRSxTQUFTLEVBQUUsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLFNBQVMsQ0FBQyxHQUNuRSxDQUNILENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLEVBQzFCLE9BQU8sR0FHUjtJQUNDLE9BQU8sQ0FDTCw0QkFDRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUNsQixlQUVFLFNBQVMsRUFBQyx3R0FBd0csRUFDbEgsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDLE9BQU8sc0JBQXNCLEVBQUUsWUFFOUQsS0FBQyxnQkFBZ0IsSUFBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sWUFDOUIsZUFBTSxTQUFTLEVBQUMsMENBQTBDLFlBQ3hELEtBQUMsVUFBVSxJQUFDLFNBQVMsRUFBQyxLQUFLLEdBQUcsR0FDekIsR0FDVSxJQVJkLENBQUMsQ0FBQyxNQUFNLENBU1IsQ0FDUixDQUFDLEdBQ0QsQ0FDSixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxFQUN2QyxTQUFTLEVBQ1QsS0FBSyxFQUNMLFFBQVEsRUFDUixRQUFRLEdBTVQ7SUFDQyxNQUFNLE9BQU8sR0FBRyxTQUFTLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUMvRCxNQUFNLEtBQUssR0FBRyxHQUFHLEtBQUssVUFBVSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFDcEQsU0FBUyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUNwQyx5QkFBeUIsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM5RCxNQUFNLE9BQU8sR0FBRyxDQUNkLGVBQU0sU0FBUyxFQUFDLG1EQUFtRCxZQUNqRSxLQUFDLE9BQU8sSUFBQyxTQUFTLEVBQUMsc0JBQXNCLEdBQUcsR0FDdkMsQ0FDUixDQUFDO0lBQ0YsTUFBTSxJQUFJLEdBQUcsS0FBQyxVQUFVLElBQUMsU0FBUyxFQUFDLGdCQUFnQixHQUFHLENBQUM7SUFFdkQsT0FBTyxDQUNMLGlCQUNFLElBQUksRUFBQyxRQUFRLGdCQUNELEtBQUssRUFDakIsS0FBSyxFQUFFLEtBQUssRUFDWixPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNiLDhEQUE4RDtZQUM5RCw2QkFBNkI7WUFDN0IsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZCLENBQUMsRUFDRCxTQUFTLEVBQUUsRUFBRSxDQUNYLG9MQUFvTCxFQUNwTCxTQUFTLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUMzRCxZQUVBLFNBQVMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQ3RCLDhCQUNHLE9BQU8sRUFDUCxJQUFJLElBQ0osQ0FDSixDQUFDLENBQUMsQ0FBQyxDQUNGLDhCQUNHLElBQUksRUFDSixPQUFPLElBQ1AsQ0FDSixHQUNNLENBQ1YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IEFycm93TGVmdCwgQXJyb3dSaWdodCB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgdHlwZSB7IFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi4vLi4vLi4vbGliL2NuJztcbmltcG9ydCB7IFRpbWVzdGFtcFRvb2x0aXAgfSBmcm9tICcuLi8uLi91aS90aW1lc3RhbXAtdG9vbHRpcCc7XG5pbXBvcnQgdHlwZSB7IFNwYW5NYXJrZXIgfSBmcm9tICcuLi91dGlscyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTWFya2VyIHByb2plY3Rpb25cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpc2libGVNYXJrZXIge1xuICBsZWZ0UGN0OiBudW1iZXI7XG4gIC8qKiBBYnNvbHV0ZSAoZXBvY2gpIHRpbWVzdGFtcCBpbiBtcyDigJQgZm9yIHRoZSB0b29sdGlwLiAqL1xuICB0aW1lTXM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQcm9qZWN0IHBvaW50LWluLXRpbWUgbWFya2VycyBvbnRvIHRoZSB2aXNpYmxlIHdpbmRvdyBgW3Zpc2libGVTdGFydE1zLFxuICogdmlzaWJsZUVuZE1zXWAgb2YgYSBiYXIsIGFzIHBlcmNlbnRhZ2VzIG9mIHRoYXQgd2luZG93LiBNYXJrZXJzIG91dHNpZGUgdGhlXG4gKiB3aW5kb3cgYXJlIGRyb3BwZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9qZWN0TWFya2VycyhcbiAgbWFya2VyczogU3Bhbk1hcmtlcltdLFxuICB2aXNpYmxlU3RhcnRNczogbnVtYmVyLFxuICB2aXNpYmxlRW5kTXM6IG51bWJlclxuKTogVmlzaWJsZU1hcmtlcltdIHtcbiAgY29uc3QgdmlzaWJsZUR1cmF0aW9uTXMgPSB2aXNpYmxlRW5kTXMgLSB2aXNpYmxlU3RhcnRNcztcbiAgaWYgKHZpc2libGVEdXJhdGlvbk1zIDw9IDApIHJldHVybiBbXTtcblxuICByZXR1cm4gbWFya2Vycy5mbGF0TWFwKChtKSA9PiB7XG4gICAgaWYgKG0udGltZU1zIDwgdmlzaWJsZVN0YXJ0TXMgfHwgbS50aW1lTXMgPiB2aXNpYmxlRW5kTXMpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgbGVmdFBjdDogKChtLnRpbWVNcyAtIHZpc2libGVTdGFydE1zKSAvIHZpc2libGVEdXJhdGlvbk1zKSAqIDEwMCxcbiAgICAgICAgdGltZU1zOiBtLnRpbWVNcyxcbiAgICAgIH0sXG4gICAgXTtcbiAgfSk7XG59XG5cbi8qKiBNaW4gcGl4ZWwgZ2FwIGEgdGljayBuZWVkcyBmcm9tIHRoZSBsYXN0LWtlcHQgb25lLCBlbHNlIGl0J3MgY3VsbGVkLiAqL1xuY29uc3QgTUFSS0VSX01JTl9HQVBfUFggPSAxNjtcblxuLyoqXG4gKiBUaGluIG91dCB0aWNrcyB0aGF0IHdvdWxkIHZpc3VhbGx5IGNvbGxpZGU6IHdhbGsgbGVmdC10by1yaWdodCBhbmQga2VlcCBlYWNoXG4gKiBvbmUgdW5sZXNzIGl0IHNpdHMgd2l0aGluIE1BUktFUl9NSU5fR0FQX1BYIG9mIHRoZSBsYXN0IGtlcHQgdGljay4gV2VsbC1zcGFjZWRcbiAqIG1hcmtlcnMgc3Vydml2ZSBldmVuIHdoZW4gYSB0aWdodCBjbHVzdGVyIGVsc2V3aGVyZSBvbiB0aGUgYmFyIGdldHMgdGhpbm5lZCDigJRcbiAqIHpvb20gaW4gdG8gcmVzb2x2ZSBhIGNsdXN0ZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjdWxsQ29sbGlkaW5nTWFya2VycyhcbiAgcHJvamVjdGVkOiBWaXNpYmxlTWFya2VyW10sXG4gIHBpeGVsV2lkdGg6IG51bWJlclxuKTogVmlzaWJsZU1hcmtlcltdIHtcbiAgY29uc3Qga2VwdDogVmlzaWJsZU1hcmtlcltdID0gW107XG4gIGxldCBsYXN0S2VwdFBjdCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbiAgZm9yIChjb25zdCBtIG9mIHByb2plY3RlZCkge1xuICAgIGNvbnN0IGdhcFB4ID0gKChtLmxlZnRQY3QgLSBsYXN0S2VwdFBjdCkgLyAxMDApICogcGl4ZWxXaWR0aDtcbiAgICBpZiAoZ2FwUHggPCBNQVJLRVJfTUlOX0dBUF9QWCkgY29udGludWU7XG4gICAga2VwdC5wdXNoKG0pO1xuICAgIGxhc3RLZXB0UGN0ID0gbS5sZWZ0UGN0O1xuICB9XG4gIHJldHVybiBrZXB0O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlbmRlcmluZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBNYXJrZXIgZ2x5cGg6IGEgcm91bmRlZCB2ZXJ0aWNhbCB0aWNrICgzcHggd2lkZSkuICovXG5mdW5jdGlvbiBNYXJrZXJUaWNrKHsgY2xhc3NOYW1lIH06IHsgY2xhc3NOYW1lPzogc3RyaW5nIH0pOiBSZWFjdE5vZGUge1xuICByZXR1cm4gKFxuICAgIDxzcGFuXG4gICAgICBjbGFzc05hbWU9e2NuKCdibG9jayB3LVszcHhdIHJvdW5kZWQtZnVsbCBiZy1ncmF5LTEwMDAnLCBjbGFzc05hbWUpfVxuICAgIC8+XG4gICk7XG59XG5cbi8qKlxuICogUG9pbnQtaW4tdGltZSBtYXJrZXJzIG92ZXJsYWlkIG9uIGEgYmFyIOKAlCBvbmUgdmVydGljYWwgdGljayBwZXIgZXZlbnQgKGhvb2tcbiAqIHJlc3VtcHRpb25zIGFuZCBhdHRyaWJ1dGUgd3JpdGVzKSwgY2VudGVyZWQgb24gdGhlIGJhci4gRWFjaCB0aWNrIHNpdHMgaW5zaWRlXG4gKiBhIGxhcmdlciBoaXQgdGFyZ2V0IGFuZCwgb24gaG92ZXIsIHNob3dzIHRoZSBzaGFyZWQgYFRpbWVzdGFtcFRvb2x0aXBgIGNhcmRcbiAqICh0aGUgc2FtZSBsaWdodCBHZWlzdCBjYXJkIHVzZWQgZm9yIGV2ZXJ5IG90aGVyIHRpbWVzdGFtcCBpbiB0aGUgYXBwLCBlLmcuIHRoZVxuICogYXR0cmlidXRlIHBhbmVsIGFuZCBldmVudCBsaXN0KSBzbyB0aGUgdGltZSByZWFkcyBjb25zaXN0ZW50bHkgd2l0aCB0aGUgcmVzdFxuICogb2YgdGhlIHByb2R1Y3QuIFRoZSBwb3NpdGlvbiBpcyBjbGFtcGVkIGEgaGFpciBpbnNpZGUgdGhlIGJhciBzbyBhbiBlZGdlXG4gKiBtYXJrZXIgbmV2ZXIgamFtcyB0aGUgcm91bmRlZCBjb3JuZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBNYXJrZXJMYXllcih7XG4gIG1hcmtlcnMsXG59OiB7XG4gIG1hcmtlcnM6IFZpc2libGVNYXJrZXJbXTtcbn0pOiBSZWFjdE5vZGUge1xuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7bWFya2Vycy5tYXAoKG0pID0+IChcbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBrZXk9e20udGltZU1zfVxuICAgICAgICAgIGNsYXNzTmFtZT1cInBvaW50ZXItZXZlbnRzLWF1dG8gYWJzb2x1dGUgdG9wLTAgYm90dG9tLTAgei0xMCBmbGV4IHctOCAtdHJhbnNsYXRlLXgtMS8yIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiXG4gICAgICAgICAgc3R5bGU9e3sgbGVmdDogYGNsYW1wKDhweCwgJHttLmxlZnRQY3R9JSwgY2FsYygxMDAlIC0gOHB4KSlgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8VGltZXN0YW1wVG9vbHRpcCBkYXRlPXttLnRpbWVNc30+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmbGV4IGgtNiB3LTggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxNYXJrZXJUaWNrIGNsYXNzTmFtZT1cImgtM1wiIC8+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9UaW1lc3RhbXBUb29sdGlwPlxuICAgICAgICA8L3NwYW4+XG4gICAgICApKX1cbiAgICA8Lz5cbiAgKTtcbn1cblxuLyoqXG4gKiBFZGdlIGluZGljYXRvciBmb3IgbWFya2VycyB0aGF0IGhhdmUgc2Nyb2xsZWQgb3V0IG9mIHZpZXcgd2hpbGUgem9vbWVkIGluLlxuICogUGlubmVkIGZsdXNoIHRvIHRoZSBjb3JyZXNwb25kaW5nIGVkZ2Ugb2YgdGhlIHZpc2libGUgYmFyLCBpdCBzaG93cyB0aGUgbWFya2VyXG4gKiBnbHlwaCBwbHVzIGEgY2hldnJvbiBwb2ludGluZyB0aGUgd2F5IHRvIHNjcm9sbC4gVGhlIGNoZXZyb24gYWx3YXlzIHNpdHMgb25cbiAqIHRoZSBvdXRlciAob2ZmLXNjcmVlbikgc2lkZSwgaW4gYSBib3ggdGhhdCBsaW5lcyB1cCB3aXRoIHRoZSBiYXJlXG4gKiBCb3VuZGFyeUFycm93IG9uIGFkamFjZW50IHJvd3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBPZmZzY3JlZW5NYXJrZXJJbmRpY2F0b3Ioe1xuICBkaXJlY3Rpb24sXG4gIGNvdW50LFxuICB0YXJnZXRNcyxcbiAgb25SZXZlYWwsXG59OiB7XG4gIGRpcmVjdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0JztcbiAgY291bnQ6IG51bWJlcjtcbiAgdGFyZ2V0TXM6IG51bWJlcjtcbiAgb25SZXZlYWw/OiAodGltZU1zOiBudW1iZXIpID0+IHZvaWQ7XG59KTogUmVhY3ROb2RlIHtcbiAgY29uc3QgQ2hldnJvbiA9IGRpcmVjdGlvbiA9PT0gJ3JpZ2h0JyA/IEFycm93UmlnaHQgOiBBcnJvd0xlZnQ7XG4gIGNvbnN0IGxhYmVsID0gYCR7Y291bnR9IG1hcmtlciR7Y291bnQgPT09IDEgPyAnJyA6ICdzJ30gJHtcbiAgICBkaXJlY3Rpb24gPT09ICdyaWdodCcgPyAnYWhlYWQnIDogJ2JlaGluZCdcbiAgfSDigJQgY2xpY2sgdG8gc2Nyb2xsIHRvICR7Y291bnQgPT09IDEgPyAnaXQnIDogJ3RoZSBuZWFyZXN0J31gO1xuICBjb25zdCBjaGV2cm9uID0gKFxuICAgIDxzcGFuIGNsYXNzTmFtZT1cImZsZXggaC02IHctNiBzaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgIDxDaGV2cm9uIGNsYXNzTmFtZT1cInNpemUtMyB0ZXh0LWdyYXktOTAwXCIgLz5cbiAgICA8L3NwYW4+XG4gICk7XG4gIGNvbnN0IHRpY2sgPSA8TWFya2VyVGljayBjbGFzc05hbWU9XCJoLTMuNSBzaHJpbmstMFwiIC8+O1xuXG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBhcmlhLWxhYmVsPXtsYWJlbH1cbiAgICAgIHRpdGxlPXtsYWJlbH1cbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgIC8vIERvbid0IGxldCB0aGUgcm93J3Mgb25DbGljayBmaXJlIOKAlCByZXZlYWxpbmcgc2hvdWxkbid0IGFsc29cbiAgICAgICAgLy8gY2hhbmdlIHRoZSBzcGFuIHNlbGVjdGlvbi5cbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgb25SZXZlYWw/Lih0YXJnZXRNcyk7XG4gICAgICB9fVxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ3BvaW50ZXItZXZlbnRzLWF1dG8gYWJzb2x1dGUgdG9wLTEvMiB6LTIwIGZsZXggaC02IC10cmFuc2xhdGUteS0xLzIgY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIHJvdW5kZWQtWzAuMjVyZW1dIGJvcmRlciBib3JkZXItZ3JheS1hbHBoYS00MDAgYmctYmFja2dyb3VuZC0xMDAgaG92ZXI6YmctZ3JheS0xMDAnLFxuICAgICAgICBkaXJlY3Rpb24gPT09ICdyaWdodCcgPyAncmlnaHQtMCBwbC0xLjUnIDogJ2xlZnQtMCBwci0xLjUnXG4gICAgICApfVxuICAgID5cbiAgICAgIHtkaXJlY3Rpb24gPT09ICdsZWZ0JyA/IChcbiAgICAgICAgPD5cbiAgICAgICAgICB7Y2hldnJvbn1cbiAgICAgICAgICB7dGlja31cbiAgICAgICAgPC8+XG4gICAgICApIDogKFxuICAgICAgICA8PlxuICAgICAgICAgIHt0aWNrfVxuICAgICAgICAgIHtjaGV2cm9ufVxuICAgICAgICA8Lz5cbiAgICAgICl9XG4gICAgPC9idXR0b24+XG4gICk7XG59XG4iXX0=
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Bhbi1tYXJrZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdHJhY2Utdmlld2VyL2NvbXBvbmVudHMvc3Bhbi1tYXJrZXJzLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBRWIsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFckQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRzlELE1BQU0sa0JBQWtCLEdBQW1DO0lBQ3pELGFBQWEsRUFBRSxlQUFlO0lBQzlCLFFBQVEsRUFBRSxlQUFlO0NBQzFCLENBQUM7QUFhRjs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsT0FBcUIsRUFDckIsY0FBc0IsRUFDdEIsWUFBb0I7SUFFcEIsTUFBTSxpQkFBaUIsR0FBRyxZQUFZLEdBQUcsY0FBYyxDQUFDO0lBQ3hELElBQUksaUJBQWlCLElBQUksQ0FBQztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBRXRDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQzNCLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxjQUFjLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxZQUFZLEVBQUUsQ0FBQztZQUN6RCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxPQUFPO1lBQ0w7Z0JBQ0UsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLEdBQUcsR0FBRztnQkFDaEUsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNO2dCQUNoQixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7YUFDYjtTQUNGLENBQUM7SUFDSixDQUFDLENBQUMs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RTtZQUNiLG1FQUFtRTtZQUNuRSw2QkFBNkI7WUFDN0IsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZCLENBQUMsRUFDRCxTQUFTLEVBQUUsRUFBRSxDQUNYLG9MQUFvTCxFQUNwTCxTQUFTLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUMzRCxZQUVBLFNBQVMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQ3RCLDhCQUNHLE9BQU8sRUFDUCxJQUFJLElBQ0osQ0FDSixDQUFDLENBQUMsQ0FBQyxDQUNGLDhCQUNHLElBQUksRUFDSixPQUFPLElBQ1AsQ0FDSixHQUNNLENBQ1YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IEFycm93TGVmdCwgQXJyb3dSaWdodCB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgdHlwZSB7IFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi4vLi4vLi4vbGliL2NuJztcbmltcG9ydCB7IFRpbWVzdGFtcFRvb2x0aXAgfSBmcm9tICcuLi8uLi91aS90aW1lc3RhbXAtdG9vbHRpcCc7XG5pbXBvcnQgdHlwZSB7IFNwYW5NYXJrZXIsIFNwYW5NYXJrZXJLaW5kIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5jb25zdCBNQVJLRVJfS0lORF9QUkVGSVg6IFJlY29yZDxTcGFuTWFya2VyS2luZCwgc3RyaW5nPiA9IHtcbiAgaG9va19yZWNlaXZlZDogJ0hvb2sgcmVjZWl2ZWQnLFxuICBhdHRyX3NldDogJ0F0dHJpYnV0ZSBzZXQnLFxufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBNYXJrZXIgcHJvamVjdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlzaWJsZU1hcmtlciB7XG4gIGxlZnRQY3Q6IG51bWJlcjtcbiAgLyoqIEFic29sdXRlIChlcG9jaCkgdGltZXN0YW1wIGluIG1zLCBmb3IgdGhlIHRvb2x0aXAuICovXG4gIHRpbWVNczogbnVtYmVyO1xuICBraW5kOiBTcGFuTWFya2VyS2luZDtcbn1cblxuLyoqXG4gKiBQcm9qZWN0IHBvaW50LWluLXRpbWUgbWFya2VycyBvbnRvIHRoZSB2aXNpYmxlIHdpbmRvdyBgW3Zpc2libGVTdGFydE1zLFxuICogdmlzaWJsZUVuZE1zXWAgb2YgYSBiYXIsIGFzIHBlcmNlbnRhZ2VzIG9mIHRoYXQgd2luZG93LiBNYXJrZXJzIG91dHNpZGUgdGhlXG4gKiB3aW5kb3cgYXJlIGRyb3BwZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9qZWN0TWFya2VycyhcbiAgbWFya2VyczogU3Bhbk1hcmtlcltdLFxuICB2aXNpYmxlU3RhcnRNczogbnVtYmVyLFxuICB2aXNpYmxlRW5kTXM6IG51bWJlclxuKTogVmlzaWJsZU1hcmtlcltdIHtcbiAgY29uc3QgdmlzaWJsZUR1cmF0aW9uTXMgPSB2aXNpYmxlRW5kTXMgLSB2aXNpYmxlU3RhcnRNcztcbiAgaWYgKHZpc2libGVEdXJhdGlvbk1zIDw9IDApIHJldHVybiBbXTtcblxuICByZXR1cm4gbWFya2Vycy5mbGF0TWFwKChtKSA9PiB7XG4gICAgaWYgKG0udGltZU1zIDwgdmlzaWJsZVN0YXJ0TXMgfHwgbS50aW1lTXMgPiB2aXNpYmxlRW5kTXMpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgbGVmdFBjdDogKChtLnRpbWVNcyAtIHZpc2libGVTdGFydE1zKSAvIHZpc2libGVEdXJhdGlvbk1zKSAqIDEwMCxcbiAgICAgICAgdGltZU1zOiBtLnRpbWVNcyxcbiAgICAgICAga2luZDogbS5raW5kLFxuICAgICAgfSxcbiAgICBdO1xuICB9KTtcbn1cblxuLyoqIE1pbiBwaXhlbCBnYXAgYSB0aWNrIG5lZWRzIGZyb20gdGhlIGxhc3Qta2VwdCBvbmUsIGVsc2UgaXQncyBjdWxsZWQuICovXG5jb25zdCBNQVJLRVJfTUlOX0dBUF9QWCA9IDE2O1xuXG4vKipcbiAqIFRoaW4gb3V0IHRpY2tzIHRoYXQgd291bGQgdmlzdWFsbHkgY29sbGlkZTogd2FsayBsZWZ0LXRvLXJpZ2h0IGFuZCBrZWVwIGVhY2hcbiAqIG9uZSB1bmxlc3MgaXQgc2l0cyB3aXRoaW4gTUFSS0VSX01JTl9HQVBfUFggb2YgdGhlIGxhc3Qga2VwdCB0aWNrLiBXZWxsLXNwYWNlZFxuICogbWFya2VycyBzdXJ2aXZlIGV2ZW4gd2hlbiBhIHRpZ2h0IGNsdXN0ZXIgZWxzZXdoZXJlIG9uIHRoZSBiYXIgZ2V0cyB0aGlubmVkO1xuICogem9vbSBpbiB0byByZXNvbHZlIGEgY2x1c3Rlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGN1bGxDb2xsaWRpbmdNYXJrZXJzKFxuICBwcm9qZWN0ZWQ6IFZpc2libGVNYXJrZXJbXSxcbiAgcGl4ZWxXaWR0aDogbnVtYmVyXG4pOiBWaXNpYmxlTWFya2VyW10ge1xuICBjb25zdCBrZXB0OiBWaXNpYmxlTWFya2VyW10gPSBbXTtcbiAgbGV0IGxhc3RLZXB0UGN0ID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuICBmb3IgKGNvbnN0IG0gb2YgcHJvamVjdGVkKSB7XG4gICAgY29uc3QgZ2FwUHggPSAoKG0ubGVmdFBjdCAtIGxhc3RLZXB0UGN0KSAvIDEwMCkgKiBwaXhlbFdpZHRoO1xuICAgIGlmIChnYXBQeCA8IE1BUktFUl9NSU5fR0FQX1BYKSBjb250aW51ZTtcbiAgICBrZXB0LnB1c2gobSk7XG4gICAgbGFzdEtlcHRQY3QgPSBtLmxlZnRQY3Q7XG4gIH1cbiAgcmV0dXJuIGtlcHQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmVuZGVyaW5nXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIE1hcmtlciBnbHlwaDogYSByb3VuZGVkIHZlcnRpY2FsIHRpY2sgKDNweCB3aWRlKS4gKi9cbmZ1bmN0aW9uIE1hcmtlclRpY2soeyBjbGFzc05hbWUgfTogeyBjbGFzc05hbWU/OiBzdHJpbmcgfSk6IFJlYWN0Tm9kZSB7XG4gIHJldHVybiAoXG4gICAgPHNwYW5cbiAgICAgIGNsYXNzTmFtZT17Y24oJ2Jsb2NrIHctWzNweF0gcm91bmRlZC1mdWxsIGJnLWdyYXktMTAwMCcsIGNsYXNzTmFtZSl9XG4gICAgLz5cbiAgKTtcbn1cblxuLyoqXG4gKiBQb2ludC1pbi10aW1lIG1hcmtlcnMgb3ZlcmxhaWQgb24gYSBiYXI6IG9uZSB2ZXJ0aWNhbCB0aWNrIHBlciBldmVudCAoaG9va1xuICogcmVzdW1wdGlvbnMgYW5kIGF0dHJpYnV0ZSB3cml0ZXMpLCBjZW50ZXJlZCBvbiB0aGUgYmFyLiBFYWNoIHRpY2sgc2l0cyBpbnNpZGVcbiAqIGEgbGFyZ2VyIGhpdCB0YXJnZXQgYW5kLCBvbiBob3Zlciwgc2hvd3MgdGhlIHNoYXJlZCByZWxhdGl2ZS10aW1lIGNvbnRleHRcbiAqIGNhcmQsIHByZWZpeGVkIHdpdGggdGhlIGV2ZW50IGtpbmQuIFRoZSBwb3NpdGlvbiBpcyBjbGFtcGVkIGEgaGFpciBpbnNpZGVcbiAqIHRoZSBiYXIgc28gYW4gZWRnZSBtYXJrZXIgbmV2ZXIgamFtcyB0aGUgcm91bmRlZCBjb3JuZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBNYXJrZXJMYXllcih7XG4gIG1hcmtlcnMsXG59OiB7XG4gIG1hcmtlcnM6IFZpc2libGVNYXJrZXJbXTtcbn0pOiBSZWFjdE5vZGUge1xuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7bWFya2Vycy5tYXAoKG0sIGluZGV4KSA9PiAoXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAga2V5PXtgJHttLnRpbWVNc30tJHtpbmRleH1gfVxuICAgICAgICAgIGNsYXNzTmFtZT1cInBvaW50ZXItZXZlbnRzLWF1dG8gYWJzb2x1dGUgdG9wLTAgYm90dG9tLTAgei0xMCBmbGV4IHctOCAtdHJhbnNsYXRlLXgtMS8yIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiXG4gICAgICAgICAgc3R5bGU9e3sgbGVmdDogYGNsYW1wKDhweCwgJHttLmxlZnRQY3R9JSwgY2FsYygxMDAlIC0gOHB4KSlgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8VGltZXN0YW1wVG9vbHRpcCBkYXRlPXttLnRpbWVNc30gcHJlZml4PXtNQVJLRVJfS0lORF9QUkVGSVhbbS5raW5kXX0+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmbGV4IGgtNiB3LTggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxNYXJrZXJUaWNrIGNsYXNzTmFtZT1cImgtM1wiIC8+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9UaW1lc3RhbXBUb29sdGlwPlxuICAgICAgICA8L3NwYW4+XG4gICAgICApKX1cbiAgICA8Lz5cbiAgKTtcbn1cblxuLyoqXG4gKiBFZGdlIGluZGljYXRvciBmb3IgbWFya2VycyB0aGF0IGhhdmUgc2Nyb2xsZWQgb3V0IG9mIHZpZXcgd2hpbGUgem9vbWVkIGluLlxuICogUGlubmVkIGZsdXNoIHRvIHRoZSBjb3JyZXNwb25kaW5nIGVkZ2Ugb2YgdGhlIHZpc2libGUgYmFyLCBpdCBzaG93cyB0aGUgbWFya2VyXG4gKiBnbHlwaCBwbHVzIGEgY2hldnJvbiBwb2ludGluZyB0aGUgd2F5IHRvIHNjcm9sbC4gVGhlIGNoZXZyb24gYWx3YXlzIHNpdHMgb25cbiAqIHRoZSBvdXRlciAob2ZmLXNjcmVlbikgc2lkZSwgaW4gYSBib3ggdGhhdCBsaW5lcyB1cCB3aXRoIHRoZSBiYXJlXG4gKiBCb3VuZGFyeUFycm93IG9uIGFkamFjZW50IHJvd3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBPZmZzY3JlZW5NYXJrZXJJbmRpY2F0b3Ioe1xuICBkaXJlY3Rpb24sXG4gIGNvdW50LFxuICB0YXJnZXRNcyxcbiAgb25SZXZlYWwsXG59OiB7XG4gIGRpcmVjdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0JztcbiAgY291bnQ6IG51bWJlcjtcbiAgdGFyZ2V0TXM6IG51bWJlcjtcbiAgb25SZXZlYWw/OiAodGltZU1zOiBudW1iZXIpID0+IHZvaWQ7XG59KTogUmVhY3ROb2RlIHtcbiAgY29uc3QgQ2hldnJvbiA9IGRpcmVjdGlvbiA9PT0gJ3JpZ2h0JyA/IEFycm93UmlnaHQgOiBBcnJvd0xlZnQ7XG4gIGNvbnN0IGxhYmVsID0gYCR7Y291bnR9IG1hcmtlciR7Y291bnQgPT09IDEgPyAnJyA6ICdzJ30gJHtcbiAgICBkaXJlY3Rpb24gPT09ICdyaWdodCcgPyAnYWhlYWQnIDogJ2JlaGluZCdcbiAgfSDigJQgY2xpY2sgdG8gc2Nyb2xsIHRvICR7Y291bnQgPT09IDEgPyAnaXQnIDogJ3RoZSBuZWFyZXN0J31gO1xuICBjb25zdCBjaGV2cm9uID0gKFxuICAgIDxzcGFuIGNsYXNzTmFtZT1cImZsZXggaC02IHctNiBzaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgIDxDaGV2cm9uIGNsYXNzTmFtZT1cInNpemUtMyB0ZXh0LWdyYXktOTAwXCIgLz5cbiAgICA8L3NwYW4+XG4gICk7XG4gIGNvbnN0IHRpY2sgPSA8TWFya2VyVGljayBjbGFzc05hbWU9XCJoLTMuNSBzaHJpbmstMFwiIC8+O1xuXG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBhcmlhLWxhYmVsPXtsYWJlbH1cbiAgICAgIHRpdGxlPXtsYWJlbH1cbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgIC8vIERvbid0IGxldCB0aGUgcm93J3Mgb25DbGljayBmaXJlLCBzaW5jZSByZXZlYWxpbmcgc2hvdWxkbid0IGFsc29cbiAgICAgICAgLy8gY2hhbmdlIHRoZSBzcGFuIHNlbGVjdGlvbi5cbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgb25SZXZlYWw/Lih0YXJnZXRNcyk7XG4gICAgICB9fVxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ3BvaW50ZXItZXZlbnRzLWF1dG8gYWJzb2x1dGUgdG9wLTEvMiB6LTIwIGZsZXggaC02IC10cmFuc2xhdGUteS0xLzIgY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIHJvdW5kZWQtWzAuMjVyZW1dIGJvcmRlciBib3JkZXItZ3JheS1hbHBoYS00MDAgYmctYmFja2dyb3VuZC0xMDAgaG92ZXI6YmctZ3JheS0xMDAnLFxuICAgICAgICBkaXJlY3Rpb24gPT09ICdyaWdodCcgPyAncmlnaHQtMCBwbC0xLjUnIDogJ2xlZnQtMCBwci0xLjUnXG4gICAgICApfVxuICAgID5cbiAgICAgIHtkaXJlY3Rpb24gPT09ICdsZWZ0JyA/IChcbiAgICAgICAgPD5cbiAgICAgICAgICB7Y2hldnJvbn1cbiAgICAgICAgICB7dGlja31cbiAgICAgICAgPC8+XG4gICAgICApIDogKFxuICAgICAgICA8PlxuICAgICAgICAgIHt0aWNrfVxuICAgICAgICAgIHtjaGV2cm9ufVxuICAgICAgICA8Lz5cbiAgICAgICl9XG4gICAgPC9idXR0b24+XG4gICk7XG59XG4iXX0=
|
|
@@ -24,7 +24,7 @@ export declare function TimelineHeader({ markers, hoverInfo, }: {
|
|
|
24
24
|
export interface TimelineHover {
|
|
25
25
|
/** Pointer x as a fraction of the timeline's content width, in [0, 1]. */
|
|
26
26
|
fraction: number;
|
|
27
|
-
/** Row index under the pointer; may be past the last row
|
|
27
|
+
/** Row index under the pointer; may be past the last row (not validated). */
|
|
28
28
|
rowIndex: number;
|
|
29
29
|
}
|
|
30
30
|
export declare function Timeline({ spans, viewStart, viewEnd, markers, selectedId, searchResult, onSelect, onRevealTime, hover, altHeld, }: {
|
|
@@ -177,7 +177,7 @@ const TimelineBar = memo(function TimelineBar({ span, viewStart, viewDuration, c
|
|
|
177
177
|
? cullCollidingMarkers(projectMarkers(baseMarkers, geometry.visibleStartMs, geometry.visibleEndMs), geometry.visiblePixelWidth)
|
|
178
178
|
: [], [geometry, baseMarkers]);
|
|
179
179
|
// Markers that fall outside the visible window (scrolled off while zoomed in)
|
|
180
|
-
//
|
|
180
|
+
// are surfaced as edge indicators so they aren't silently lost.
|
|
181
181
|
const offscreen = useMemo(() => geometry.mode.kind === 'full'
|
|
182
182
|
? computeOffscreenMarkers(baseMarkers, geometry.visibleStartMs, geometry.visibleEndMs)
|
|
183
183
|
: { left: null, right: null }, [geometry, baseMarkers]);
|
|
@@ -206,7 +206,7 @@ export { TimelineBar };
|
|
|
206
206
|
// selection)
|
|
207
207
|
// ---------------------------------------------------------------------------
|
|
208
208
|
// Horizontal distance between the anchor bar's measured edge and the vertical
|
|
209
|
-
// guide
|
|
209
|
+
// guide; also the width of the connector stub bridging the two.
|
|
210
210
|
const MEASURE_GUIDE_OUTSET_PX = 4;
|
|
211
211
|
const DeltaMeasureLine = memo(function DeltaMeasureLine({ delta, anchorRowIndex, hoveredRowIndex, timelineWidth, }) {
|
|
212
212
|
// Both ends of the measurement align with the vertical middle of the bars
|
|
@@ -218,7 +218,7 @@ const DeltaMeasureLine = memo(function DeltaMeasureLine({ delta, anchorRowIndex,
|
|
|
218
218
|
// It sits just outside the anchor bar's measured edge (so it doesn't blend
|
|
219
219
|
// into the bar's border), joined to the bar by a short horizontal stub. The
|
|
220
220
|
// line runs from the elbow corner (the guide's x) to the hovered span's
|
|
221
|
-
// measured edge
|
|
221
|
+
// measured edge, pulled short of the edge arrow when the hovered span is
|
|
222
222
|
// fully off-screen.
|
|
223
223
|
const guideTop = Math.min(anchorCenterY, lineY);
|
|
224
224
|
const guideBottom = Math.max(anchorCenterY, lineY);
|
|
@@ -309,4 +309,4 @@ export function Timeline({ spans, viewStart, viewEnd, markers, selectedId, searc
|
|
|
309
309
|
// Skip the "0s" origin marker since the left edge already implies it.
|
|
310
310
|
Math.abs(marker.value) > 0.000001 ? (_jsx("div", { className: "absolute top-0 bottom-0 w-px bg-gray-alpha-300", style: { left: `${marker.position * 100}%` } }, String(marker.value))) : null) }), hover != null && (_jsx("div", { className: "pointer-events-none absolute inset-x-4 inset-y-0 z-10", children: _jsx("div", { className: "absolute top-0 bottom-0 w-px bg-gray-alpha-500", style: { left: `${hover.fraction * 100}%` } }) })), _jsx("div", { style: { transform: `translateY(${start * ROW_HEIGHT_PX}px)` }, children: spans.slice(start, end).map((span) => (_jsx(TimelineBar, { span: span, viewStart: viewStart, viewDuration: viewDuration, containerWidth: timelineWidth, isSelected: selectedId === span.spanId, isDimmed: isSpanDimmedBySearch(span.spanId, searchResult), onSelect: onSelect, onRevealTime: onRevealTime }, span.spanId))) }), altHeld && anchorIndex < 0 && (_jsx("div", { "aria-hidden": true, className: "pointer-events-none absolute inset-x-4 inset-y-0", children: gapMeasurements.map((gap) => (_jsx(DeltaMeasureLine, { ...gap, timelineWidth: timelineWidth }, gap.anchorRowIndex))) })), measurement && (_jsx("div", { "aria-hidden": true, className: "pointer-events-none absolute inset-x-4 inset-y-0 z-20", children: _jsx(DeltaMeasureLine, { ...measurement, timelineWidth: timelineWidth }) }))] }));
|
|
311
311
|
}
|
|
312
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy90cmFjZS12aWV3ZXIvY29tcG9uZW50cy90aW1lbGluZS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXJELE9BQU8sRUFDTCxRQUFRLEVBQ1IsSUFBSSxFQUNKLFdBQVcsRUFDWCxTQUFTLEVBQ1QsT0FBTyxFQUNQLE1BQU0sRUFDTixRQUFRLEdBQ1QsTUFBTSxPQUFPLENBQUM7QUFDZixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckMsT0FBTyxFQUFFLG9CQUFvQixFQUF5QixNQUFNLFdBQVcsQ0FBQztBQUV4RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFRdkUsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIscUJBQXFCLEVBQ3JCLGlCQUFpQixFQUNqQixhQUFhLEdBQ2QsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixXQUFXLEVBQ1gsd0JBQXdCLEVBQ3hCLGNBQWMsR0FDZixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sTUFBTSxNQUFNLHVCQUF1QixDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFL0QsOEVBQThFO0FBQzlFLFlBQVk7QUFDWiw4RUFBOEU7QUFFOUUsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLENBQUM7QUFDaEMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFDNUIsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDO0FB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Q0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxFQUN6RCxRQUFRLEVBQUUsUUFBUSxFQUNsQixZQUFZLEVBQUUsWUFBWSxJQVJyQixJQUFJLENBQUMsTUFBTSxDQVNoQixDQUNILENBQUMsR0FDRSxFQUNMLE9BQU8sSUFBSSxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQzdCLG1DQUVFLFNBQVMsRUFBQyxrREFBa0QsWUFFM0QsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FDNUIsS0FBQyxnQkFBZ0IsT0FFWCxHQUFHLEVBQ1AsYUFBYSxFQUFFLGFBQWEsSUFGdkIsR0FBRyxDQUFDLGNBQWMsQ0FHdkIsQ0FDSCxDQUFDLEdBQ0UsQ0FDUCxFQUNBLFdBQVcsSUFBSSxDQUNkLG1DQUVFLFNBQVMsRUFBQyx1REFBdUQsWUFFakUsS0FBQyxnQkFBZ0IsT0FBSyxXQUFXLEVBQUUsYUFBYSxFQUFFLGFBQWEsR0FBSSxHQUMvRCxDQUNQLElBQ0csQ0FDUCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgQXJyb3dMZWZ0LCBBcnJvd1JpZ2h0IH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB0eXBlIHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtcbiAgRnJhZ21lbnQsXG4gIG1lbW8sXG4gIHVzZUNhbGxiYWNrLFxuICB1c2VFZmZlY3QsXG4gIHVzZU1lbW8sXG4gIHVzZVJlZixcbiAgdXNlU3RhdGUsXG59IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi4vLi4vLi4vbGliL2NuJztcbmltcG9ydCB7IGlzU3BhbkRpbW1lZEJ5U2VhcmNoLCB0eXBlIFNwYW5TZWFyY2hSZXN1bHQgfSBmcm9tICcuLi9zZWFyY2gnO1xuaW1wb3J0IHR5cGUgeyBTcGFuIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZm9ybWF0RHVyYXRpb25QcmVjaXNlLCBnZXRIaWdoUmVzSW5NcyB9IGZyb20gJy4uL3V0aWwvdGltaW5nJztcbmltcG9ydCB0eXBlIHtcbiAgT2Zmc2NyZWVuTWFya2VycyxcbiAgU2VnbWVudCxcbiAgU2VnbWVudFN0YXR1cyxcbiAgU3BhbkRlbHRhLFxuICBUaW1lTWFya2VyLFxufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge1xuICBjb21wdXRlT2Zmc2NyZWVuTWFya2VycyxcbiAgY29tcHV0ZVNwYW5EZWx0YSxcbiAgY29tcHV0ZVNwYW5HYXBzLFxuICBjb21wdXRlU3Bhbk1hcmtlcnMsXG4gIGNvbXB1dGVTcGFuU2VnbWVudHMsXG4gIGdldFJlc291cmNlQ2xhc3NOYW1lcyxcbiAgZ2V0U3BhbkR1cmF0aW9uTXMsXG4gIGlzU3BhbkVycm9yZWQsXG59IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7XG4gIGN1bGxDb2xsaWRpbmdNYXJrZXJzLFxuICBNYXJrZXJMYXllcixcbiAgT2Zmc2NyZWVuTWFya2VySW5kaWNhdG9yLFxuICBwcm9qZWN0TWFya2Vycyxcbn0gZnJvbSAnLi9zcGFuLW1hcmtlcnMnO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3RpbWVsaW5lLm1vZHVsZS5jc3MnO1xuaW1wb3J0IHsgUk9XX0hFSUdIVF9QWCwgdXNlUm93V2luZG93IH0gZnJvbSAnLi91c2Utcm93LXdpbmRvdyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ29uc3RhbnRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgVElOWV9CQVJfQk9YX1NJWkVfUFggPSAyNDtcbmNvbnN0IFRJTllfQkFSX1dJRFRIX1BYID0gNDtcbmV4cG9ydCBjb25zdCBUSU1FTElORV9QQURESU5HX1BYID0gMTY7XG5cbmNvbnN0IFNFR01FTlRfQ0xBU1NFUzogUmVjb3JkPFNlZ21lbnRTdGF0dXMsIHN0cmluZz4gPSB7XG4gIHF1ZXVlZDogJ2JnLWdyYXktNDAwIGJvcmRlciBib3JkZXItZ3JheS01MDAnLFxuICBwZW5kaW5nOiAnYmctZ3JheS0yMDAgYm9yZGVyIGJvcmRlci1ncmF5LTUwMCcsXG4gIHJldHJ5aW5nOiAnYmctZ3JheS00MDAgYm9yZGVyIGJvcmRlci1ncmF5LTUwMCcsXG4gIHdhaXRpbmc6ICdiZy1ncmF5LTIwMCBib3JkZXIgYm9yZGVyLWdyYXktNTAwJyxcbiAgcnVubmluZzogJ2JnLWJsdWUtMjAwIGJvcmRlciBib3JkZXItYmx1ZS01MDAnLFxuICBjb21wbGV0ZWQ6ICdiZy1ibHVlLTIwMCBib3JkZXIgYm9yZGVyLWJsdWUtNTAwJyxcbiAgZmFpbGVkOiAnYmctcmVkLTIwMCBib3JkZXIgYm9yZGVyLXJlZC01MDAnLFxuICBzdWNjZWVkZWQ6ICdiZy1ncmVlbi0yMDAgYm9yZGVyIGJvcmRlci1ncmVlbi01MDAnLFxuICBzbGVlcGluZzogJ2JnLWdyYXktNDAwIGJvcmRlciBib3JkZXItZ3JheS01MDAnLFxuICByZWNlaXZlZDogJ2JnLWJsdWUtMjAwIGJvcmRlciBib3JkZXItYmx1ZS01MDAnLFxufTtcblxuY29uc3QgU1RSSVBFRF9TRUdNRU5UX1NUQVRVU0VTOiBSZWFkb25seVNldDxTZWdtZW50U3RhdHVzPiA9IG5ldyBTZXQoW1xuICAncGVuZGluZycsXG4gICdydW5uaW5nJyxcbiAgJ3JlY2VpdmVkJyxcbl0pO1xuXG5mdW5jdGlvbiBBbmltYXRlZFN0cmlwZXMoeyBzdGF0dXMgfTogeyBzdGF0dXM6IFNlZ21lbnRTdGF0dXMgfSk6IFJlYWN0Tm9kZSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgYXJpYS1oaWRkZW5cbiAgICAgIGNsYXNzTmFtZT17XG4gICAgICAgIHN0YXR1cyA9PT0gJ3BlbmRpbmcnID8gc3R5bGVzLnBlbmRpbmdTdHJpcGVzIDogc3R5bGVzLnJ1bm5pbmdTdHJpcGVzXG4gICAgICB9XG4gICAgLz5cbiAgKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBCYXIgZ2VvbWV0cnlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG50eXBlIEJhck1vZGUgPVxuICB8IHsga2luZDogJ2Fycm93JzsgZGlyZWN0aW9uOiAnbGVmdCcgfCAncmlnaHQnIH1cbiAgfCB7IGtpbmQ6ICd0aW55JyB9XG4gIHwgeyBraW5kOiAnZnVsbCcgfTtcblxuaW50ZXJmYWNlIEJhckdlb21ldHJ5IHtcbiAgbW9kZTogQmFyTW9kZTtcbiAgbGVmdFBjdDogbnVtYmVyO1xuICB3aWR0aFBjdDogbnVtYmVyO1xuICB2aXNpYmxlU3RhcnRNczogbnVtYmVyO1xuICB2aXNpYmxlRW5kTXM6IG51bWJlcjtcbiAgdmlzaWJsZVBpeGVsV2lkdGg6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDb21wdXRlIHRoZSBiYXIncyBnZW9tZXRyeSBpbnNpZGUgdGhlIHRpbWVsaW5lIHZpZXdwb3J0LiBQZXJjZW50YWdlcyBhcmVcbiAqIGFsd2F5cyBpbiBbMCwgMTAwXSBzbyB3ZSBuZXZlciBlbWl0IENTUyB2YWx1ZXMgdGhhdCBleGNlZWQgYnJvd3NlciBsYXlvdXRcbiAqIGxpbWl0cyBhdCBleHRyZW1lIHpvb20uXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVCYXJHZW9tZXRyeShcbiAgc3RhcnRNczogbnVtYmVyLFxuICBlbmRNczogbnVtYmVyLFxuICB2aWV3U3RhcnQ6IG51bWJlcixcbiAgdmlld0VuZDogbnVtYmVyLFxuICBjb250YWluZXJXaWR0aDogbnVtYmVyXG4pOiBCYXJHZW9tZXRyeSB7XG4gIGNvbnN0IHZpZXdEdXJhdGlvbiA9IHZpZXdFbmQgLSB2aWV3U3RhcnQ7XG4gIGNvbnN0IHZpc2libGVTdGFydE1zID0gTWF0aC5tYXgoc3RhcnRNcywgdmlld1N0YXJ0KTtcbiAgY29uc3QgdmlzaWJsZUVuZE1zID0gTWF0aC5taW4oZW5kTXMsIHZpZXdFbmQpO1xuICBjb25zdCB2aXNpYmxlRHVyYXRpb25NcyA9IE1hdGgubWF4KDAsIHZpc2libGVFbmRNcyAtIHZpc2libGVTdGFydE1zKTtcbiAgY29uc3Qgd2lkdGhGcmFjID0gdmlld0R1cmF0aW9uID4gMCA/IHZpc2libGVEdXJhdGlvbk1zIC8gdmlld0R1cmF0aW9uIDogMDtcbiAgY29uc3QgdmlzaWJsZVBpeGVsV2lkdGggPSB3aWR0aEZyYWMgKiBjb250YWluZXJXaWR0aDtcblxuICBjb25zdCBpc1RpbnkgPSBjb250YWluZXJXaWR0aCA+IDAgJiYgdmlzaWJsZVBpeGVsV2lkdGggPCBUSU5ZX0JBUl9CT1hfU0laRV9QWDtcbiAgY29uc3QgZXh0ZW5kc09mZkxlZnQgPSBzdGFydE1zIDwgdmlld1N0YXJ0O1xuICBjb25zdCBleHRlbmRzT2ZmUmlnaHQgPSBlbmRNcyA+IHZpZXdFbmQ7XG5cbiAgY29uc3QgbW9kZTogQmFyTW9kZSA9XG4gICAgaXNUaW55ICYmIChleHRlbmRzT2ZmTGVmdCB8fCBleHRlbmRzT2ZmUmlnaHQpXG4gICAgICA/IHsga2luZDogJ2Fycm93JywgZGlyZWN0aW9uOiBleHRlbmRzT2ZmUmlnaHQgPyAncmlnaHQnIDogJ2xlZnQnIH1cbiAgICAgIDogaXNUaW55XG4gICAgICAgID8geyBraW5kOiAndGlueScgfVxuICAgICAgICA6IHsga2luZDogJ2Z1bGwnIH07XG5cbiAgcmV0dXJuIHtcbiAgICBtb2RlLFxuICAgIGxlZnRQY3Q6XG4gICAgICB2aWV3RHVyYXRpb24gPiAwXG4gICAgICAgID8gKCh2aXNpYmxlU3RhcnRNcyAtIHZpZXdTdGFydCkgLyB2aWV3RHVyYXRpb24pICogMTAwXG4gICAgICAgIDogMCxcbiAgICB3aWR0aFBjdDogd2lkdGhGcmFjICogMTAwLFxuICAgIHZpc2libGVTdGFydE1zLFxuICAgIHZpc2libGVFbmRNcyxcbiAgICB2aXNpYmxlUGl4ZWxXaWR0aCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0QmFyUG9zaXRpb25TdHlsZShnZW9tZXRyeTogQmFyR2VvbWV0cnkpOiB7XG4gIGxlZnQ6IHN0cmluZztcbiAgd2lkdGg6IHN0cmluZztcbn0ge1xuICBzd2l0Y2ggKGdlb21ldHJ5Lm1vZGUua2luZCkge1xuICAgIGNhc2UgJ2Fycm93JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6XG4gICAgICAgICAgZ2VvbWV0cnkubW9kZS5kaXJlY3Rpb24gPT09ICdyaWdodCdcbiAgICAgICAgICAgID8gYGNhbGMoMTAwJSAtICR7VElOWV9CQVJfQk9YX1NJWkVfUFh9cHgpYFxuICAgICAgICAgICAgOiAnMHB4JyxcbiAgICAgICAgd2lkdGg6IGAke1RJTllfQkFSX0JPWF9TSVpFX1BYfXB4YCxcbiAgICAgIH07XG4gICAgY2FzZSAndGlueSc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiBgbWluKCR7Z2VvbWV0cnkubGVmdFBjdH0lLCBjYWxjKDEwMCUgLSAke1RJTllfQkFSX1dJRFRIX1BYfXB4KSlgLFxuICAgICAgICB3aWR0aDogYCR7VElOWV9CQVJfV0lEVEhfUFh9cHhgLFxuICAgICAgfTtcbiAgICBjYXNlICdmdWxsJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6IGAke2dlb21ldHJ5LmxlZnRQY3R9JWAsXG4gICAgICAgIHdpZHRoOiBgbWF4KCR7Z2VvbWV0cnkud2lkdGhQY3R9JSwgNHB4KWAsXG4gICAgICB9O1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2VnbWVudCBwcm9qZWN0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuaW50ZXJmYWNlIFZpc2libGVTZWdtZW50IHtcbiAgc3RhdHVzOiBTZWdtZW50U3RhdHVzO1xuICBsZWZ0UGN0OiBudW1iZXI7XG4gIHdpZHRoUGN0OiBudW1iZXI7XG4gIHBpeGVsV2lkdGg6IG51bWJlcjtcbiAgZnVsbER1cmF0aW9uTXM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQcm9qZWN0IHN0YXR1cyBzZWdtZW50cyBvbnRvIHRoZSB2aXNpYmxlIHBvcnRpb24gb2YgYSBiYXIuIFNlZ21lbnRzIGZ1bGx5XG4gKiBvdXRzaWRlIHRoZSB2aXNpYmxlIHdpbmRvdyBhcmUgZHJvcHBlZDsgc2VnbWVudHMgY3Jvc3NpbmcgdGhlIGVkZ2UgYXJlXG4gKiBjbGlwcGVkIHRvIFswJSwgMTAwJV0gb2YgdGhlIHZpc2libGUgYmFyLlxuICovXG5mdW5jdGlvbiBwcm9qZWN0U2VnbWVudHMoXG4gIHNlZ21lbnRzOiBTZWdtZW50W10sXG4gIHNwYW5TdGFydE1zOiBudW1iZXIsXG4gIHNwYW5EdXJhdGlvbk1zOiBudW1iZXIsXG4gIGdlb21ldHJ5OiBCYXJHZW9tZXRyeVxuKTogVmlzaWJsZVNlZ21lbnRbXSB7XG4gIGNvbnN0IHZpc2libGVEdXJhdGlvbk1zID0gZ2VvbWV0cnkudmlzaWJsZUVuZE1zIC0gZ2VvbWV0cnkudmlzaWJsZVN0YXJ0TXM7XG4gIGlmICh2aXNpYmxlRHVyYXRpb25NcyA8PSAwKSByZXR1cm4gW107XG5cbiAgcmV0dXJuIHNlZ21lbnRzLmZsYXRNYXAoKHNlZykgPT4ge1xuICAgIGNvbnN0IHNlZ1N0YXJ0TXMgPSBzcGFuU3RhcnRNcyArIHNlZy5zdGFydEZyYWN0aW9uICogc3BhbkR1cmF0aW9uTXM7XG4gICAgY29uc3Qgc2VnRW5kTXMgPSBzcGFuU3RhcnRNcyArIHNlZy5lbmRGcmFjdGlvbiAqIHNwYW5EdXJhdGlvbk1zO1xuICAgIGNvbnN0IHN0YXJ0TXMgPSBNYXRoLm1heChzZWdTdGFydE1zLCBnZW9tZXRyeS52aXNpYmxlU3RhcnRNcyk7XG4gICAgY29uc3QgZW5kTXMgPSBNYXRoLm1pbihzZWdFbmRNcywgZ2VvbWV0cnkudmlzaWJsZUVuZE1zKTtcbiAgICBpZiAoZW5kTXMgPD0gc3RhcnRNcykgcmV0dXJuIFtdO1xuXG4gICAgY29uc3Qgd2lkdGhGcmFjID0gKGVuZE1zIC0gc3RhcnRNcykgLyB2aXNpYmxlRHVyYXRpb25NcztcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBzdGF0dXM6IHNlZy5zdGF0dXMsXG4gICAgICAgIGxlZnRQY3Q6XG4gICAgICAgICAgKChzdGFydE1zIC0gZ2VvbWV0cnkudmlzaWJsZVN0YXJ0TXMpIC8gdmlzaWJsZUR1cmF0aW9uTXMpICogMTAwLFxuICAgICAgICB3aWR0aFBjdDogd2lkdGhGcmFjICogMTAwLFxuICAgICAgICBwaXhlbFdpZHRoOiB3aWR0aEZyYWMgKiBnZW9tZXRyeS52aXNpYmxlUGl4ZWxXaWR0aCxcbiAgICAgICAgZnVsbER1cmF0aW9uTXM6IChzZWcuZW5kRnJhY3Rpb24gLSBzZWcuc3RhcnRGcmFjdGlvbikgKiBzcGFuRHVyYXRpb25NcyxcbiAgICAgIH0sXG4gICAgXTtcbiAgfSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU21hbGwgcmVuZGVyIGhlbHBlcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogRXN0aW1hdGVkIHJlbmRlcmVkIHdpZHRoIG9mIGEgMTBweC1tb25vIGR1cmF0aW9uIGxhYmVsICg2cHgvZ2x5cGggKyBwYWRkaW5nKS4gKi9cbmZ1bmN0aW9uIGVzdGltYXRlTGFiZWxXaWR0aFB4KGxhYmVsOiBzdHJpbmcpOiBudW1iZXIge1xuICByZXR1cm4gbGFiZWwubGVuZ3RoICogNiArIDEyO1xufVxuXG5mdW5jdGlvbiBEdXJhdGlvbkxhYmVsKHtcbiAgbGFiZWwsXG4gIGNsYXNzTmFtZSxcbn06IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufSk6IFJlYWN0Tm9kZSB7XG4gIHJldHVybiAoXG4gICAgPHNwYW5cbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIGluc2V0LTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCBvdmVyZmxvdy1oaWRkZW4gcHgtMSB0ZXh0LVsxMHB4XSBmb250LW1vbm8gZm9udC1tZWRpdW0gbGVhZGluZy1ub25lIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtbGVmdCB0ZXh0LWdyYXktMTAwMCB0YWJ1bGFyLW51bXMgb3BhY2l0eS0wIGdyb3VwLWhvdmVyL3RpbWVsaW5lLXJvdzpvcGFjaXR5LTEwMCcsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICA+XG4gICAgICB7bGFiZWx9XG4gICAgPC9zcGFuPlxuICApO1xufVxuXG5mdW5jdGlvbiBCb3VuZGFyeUFycm93KHtcbiAgZGlyZWN0aW9uLFxufToge1xuICBkaXJlY3Rpb246ICdsZWZ0JyB8ICdyaWdodCc7XG59KTogUmVhY3ROb2RlIHtcbiAgY29uc3QgSWNvbiA9IGRpcmVjdGlvbiA9PT0gJ3JpZ2h0JyA/IEFycm93UmlnaHQgOiBBcnJvd0xlZnQ7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtNiB3LTYgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtWzAuMjVyZW1dXCI+XG4gICAgICA8SWNvbiBjbGFzc05hbWU9XCJzaXplLTMgdGV4dC1ncmF5LTkwMFwiIC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFBsYWluQmFyKHtcbiAgY2xhc3NOYW1lLFxuICBsYWJlbCxcbn06IHtcbiAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmcgfCBudWxsO1xufSk6IFJlYWN0Tm9kZSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ3JlbGF0aXZlIGgtNiB3LWZ1bGwgbWluLXctMSByb3VuZGVkLVswLjI1cmVtXSBib3JkZXInLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgPlxuICAgICAge2xhYmVsID8gPER1cmF0aW9uTGFiZWwgbGFiZWw9e2xhYmVsfSAvPiA6IG51bGx9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIExlYWRJbkNvbm5lY3Rvcih7XG4gIGxlZnRQY3QsXG4gIHdpZHRoUGN0LFxuICBsYWJlbCxcbn06IHtcbiAgbGVmdFBjdDogbnVtYmVyO1xuICB3aWR0aFBjdDogbnVtYmVyO1xuICBsYWJlbDogc3RyaW5nIHwgbnVsbDtcbn0pOiBSZWFjdE5vZGUge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHRvcC0xLzIgaC02IC10cmFuc2xhdGUteS0xLzJcIlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgbGVmdDogYGNhbGMoJHtsZWZ0UGN0fSUgKyAwLjVweClgLFxuICAgICAgICB3aWR0aDogYGNhbGMoJHt3aWR0aFBjdH0lIC0gMXB4KWAsXG4gICAgICB9fVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgbGVmdC0wIHRvcC0xLzIgaC00IHctcHggLXRyYW5zbGF0ZS15LTEvMiBiZy1ncmF5LTUwMFwiIC8+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LXgtMCB0b3AtMS8yIGgtcHggLXRyYW5zbGF0ZS15LTEvMiBiZy1ncmF5LTUwMFwiIC8+XG4gICAgICB7bGFiZWwgPyA8RHVyYXRpb25MYWJlbCBsYWJlbD17bGFiZWx9IC8+IDogbnVsbH1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gU2VnbWVudEJhcih7XG4gIHNlZ21lbnRzLFxuICBzaG93TGFiZWxzID0gdHJ1ZSxcbn06IHtcbiAgc2VnbWVudHM6IFZpc2libGVTZWdtZW50W107XG4gIC8qKlxuICAgKiBXaGVuIGZhbHNlLCBzZWdtZW50IGR1cmF0aW9uIGxhYmVscyBhcmUgc3VwcHJlc3NlZC4gVXNlZCB3aGVuIGEgc2VwYXJhdGVcbiAgICogdG9wIGxheWVyIChlLmcuIHRoZSByZXN1bXB0aW9uLW1hcmtlciBkdXJhdGlvbiBvdmVybGF5KSByZW5kZXJzIHRoZSBsYWJlbFxuICAgKiBhYm92ZSB0aGUgbWFya2VycyBpbnN0ZWFkLCBzbyB3ZSBkb24ndCBkcmF3IGl0IHR3aWNlLlxuICAgKi9cbiAgc2hvd0xhYmVscz86IGJvb2xlYW47XG59KTogUmVhY3ROb2RlIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIGgtNiB3LWZ1bGxcIj5cbiAgICAgIHtzZWdtZW50cy5tYXAoKHNlZywgaSkgPT4ge1xuICAgICAgICBpZiAoc2VnLnN0YXR1cyA9PT0gJ3F1ZXVlZCcpIHtcbiAgICAgICAgICBjb25zdCBsZWFkSW5MYWJlbCA9IGZvcm1hdER1cmF0aW9uUHJlY2lzZShzZWcuZnVsbER1cmF0aW9uTXMpO1xuICAgICAgICAgIGNvbnN0IHNob3dMZWFkSW5MYWJlbCA9XG4gICAgICAgICAgICBzaG93TGFiZWxzICYmXG4gICAgICAgICAgICBzZWcucGl4ZWxXaWR0aCA+PSBNYXRoLm1heCg0MCwgZXN0aW1hdGVMYWJlbFdpZHRoUHgobGVhZEluTGFiZWwpKTtcbiAgICAgICAgICBjb25zdCBpc0Z1bGxXaWR0aFF1ZXVlZCA9IHNlZ21lbnRzLmxlbmd0aCA9PT0gMTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEZyYWdtZW50IGtleT17aX0+XG4gICAgICAgICAgICAgIDxMZWFkSW5Db25uZWN0b3JcbiAgICAgICAgICAgICAgICBsZWZ0UGN0PXtzZWcubGVmdFBjdH1cbiAgICAgICAgICAgICAgICB3aWR0aFBjdD17c2VnLndpZHRoUGN0fVxuICAgICAgICAgICAgICAgIGxhYmVsPXtzaG93TGVhZEluTGFiZWwgPyBsZWFkSW5MYWJlbCA6IG51bGx9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIHtpc0Z1bGxXaWR0aFF1ZXVlZCA/IChcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSB0b3AtMS8yIGgtNCB3LXB4IC10cmFuc2xhdGUteS0xLzIgYmctZ3JheS01MDBcIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogYGNhbGMoJHtzZWcubGVmdFBjdCArIHNlZy53aWR0aFBjdH0lIC0gMS41cHgpYCxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYWJlbCA9IGZvcm1hdER1cmF0aW9uUHJlY2lzZShzZWcuZnVsbER1cmF0aW9uTXMpO1xuICAgICAgICAvLyBPbmx5IHJlbmRlciB0aGUgbGFiZWwgd2hlbiB0aGVyZSdzIGVub3VnaCByb29tIGZvciBpdCB3aXRob3V0IGNsaXBwaW5nLlxuICAgICAgICBjb25zdCBzaG93TGFiZWwgPVxuICAgICAgICAgIHNob3dMYWJlbHMgJiZcbiAgICAgICAgICBzZWcucGl4ZWxXaWR0aCA+PSBNYXRoLm1heCg0MCwgZXN0aW1hdGVMYWJlbFdpZHRoUHgobGFiZWwpKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGtleT17aX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICdhYnNvbHV0ZSBoLWZ1bGwgbWluLXctcHggb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtWzAuMjVyZW1dJyxcbiAgICAgICAgICAgICAgU0VHTUVOVF9DTEFTU0VTW3NlZy5zdGF0dXNdXG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgLy8gMXB4IGdhcCBiZXR3ZWVuIGFkamFjZW50IHNlZ21lbnRzLCBkaXN0cmlidXRlZCBlcXVhbGx5LlxuICAgICAgICAgICAgICBsZWZ0OiBgY2FsYygke3NlZy5sZWZ0UGN0fSUgKyAwLjVweClgLFxuICAgICAgICAgICAgICB3aWR0aDogYGNhbGMoJHtzZWcud2lkdGhQY3R9JSAtIDFweClgLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7U1RSSVBFRF9TRUdNRU5UX1NUQVRVU0VTLmhhcyhzZWcuc3RhdHVzKSA/IChcbiAgICAgICAgICAgICAgPEFuaW1hdGVkU3RyaXBlcyBzdGF0dXM9e3NlZy5zdGF0dXN9IC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIHtzaG93TGFiZWwgPyA8RHVyYXRpb25MYWJlbCBsYWJlbD17bGFiZWx9IC8+IDogbnVsbH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICAgIH0pfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRpbWVsaW5lQmFyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgVGltZWxpbmVCYXIgPSBtZW1vKGZ1bmN0aW9uIFRpbWVsaW5lQmFyKHtcbiAgc3BhbixcbiAgdmlld1N0YXJ0LFxuICB2aWV3RHVyYXRpb24sXG4gIGNvbnRhaW5lcldpZHRoLFxuICBpc1NlbGVjdGVkLFxuICBpc0RpbW1lZCxcbiAgb25TZWxlY3QsXG4gIG9uUmV2ZWFsVGltZSxcbn06IHtcbiAgc3BhbjogU3BhbjtcbiAgdmlld1N0YXJ0OiBudW1iZXI7XG4gIHZpZXdEdXJhdGlvbjogbnVtYmVyO1xuICBjb250YWluZXJXaWR0aDogbnVtYmVyO1xuICBpc1NlbGVjdGVkOiBib29sZWFuO1xuICBpc0RpbW1lZD86IGJvb2xlYW47XG4gIG9uU2VsZWN0OiAoc3BhbklkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uUmV2ZWFsVGltZT86ICh0aW1lTXM6IG51bWJlcikgPT4gdm9pZDtcbn0pOiBSZWFjdE5vZGUge1xuICBjb25zdCBzdGFydE1zID0gZ2V0SGlnaFJlc0luTXMoc3Bhbi5zdGFydFRpbWUpO1xuICBjb25zdCBlbmRNcyA9IGdldEhpZ2hSZXNJbk1zKHNwYW4uZW5kVGltZSk7XG4gIGNvbnN0IHRvdGFsRHVyYXRpb25NcyA9IGdldFNwYW5EdXJhdGlvbk1zKHNwYW4pO1xuXG4gIGNvbnN0IGdlb21ldHJ5ID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgY29tcHV0ZUJhckdlb21ldHJ5KFxuICAgICAgICBzdGFydE1zLFxuICAgICAgICBlbmRNcyxcbiAgICAgICAgdmlld1N0YXJ0LFxuICAgICAgICB2aWV3U3RhcnQgKyB2aWV3RHVyYXRpb24sXG4gICAgICAgIGNvbnRhaW5lcldpZHRoXG4gICAgICApLFxuICAgIFtzdGFydE1zLCBlbmRNcywgdmlld1N0YXJ0LCB2aWV3RHVyYXRpb24sIGNvbnRhaW5lcldpZHRoXVxuICApO1xuXG4gIGNvbnN0IGJhc2VTZWdtZW50cyA9IHVzZU1lbW8oKCkgPT4gY29tcHV0ZVNwYW5TZWdtZW50cyhzcGFuKSwgW3NwYW5dKTtcbiAgY29uc3Qgc2VnbWVudHMgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBnZW9tZXRyeS5tb2RlLmtpbmQgPT09ICdmdWxsJ1xuICAgICAgICA/IHByb2plY3RTZWdtZW50cyhiYXNlU2VnbWVudHMsIHN0YXJ0TXMsIHRvdGFsRHVyYXRpb25NcywgZ2VvbWV0cnkpXG4gICAgICAgIDogW10sXG4gICAgW2dlb21ldHJ5LCBiYXNlU2VnbWVudHMsIHN0YXJ0TXMsIHRvdGFsRHVyYXRpb25Nc11cbiAgKTtcblxuICBjb25zdCBiYXNlTWFya2VycyA9IHVzZU1lbW8oKCkgPT4gY29tcHV0ZVNwYW5NYXJrZXJzKHNwYW4pLCBbc3Bhbl0pO1xuICBjb25zdCBtYXJrZXJzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgZ2VvbWV0cnkubW9kZS5raW5kID09PSAnZnVsbCdcbiAgICAgICAgPyBjdWxsQ29sbGlkaW5nTWFya2VycyhcbiAgICAgICAgICAgIHByb2plY3RNYXJrZXJzKFxuICAgICAgICAgICAgICBiYXNlTWFya2VycyxcbiAgICAgICAgICAgICAgZ2VvbWV0cnkudmlzaWJsZVN0YXJ0TXMsXG4gICAgICAgICAgICAgIGdlb21ldHJ5LnZpc2libGVFbmRNc1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGdlb21ldHJ5LnZpc2libGVQaXhlbFdpZHRoXG4gICAgICAgICAgKVxuICAgICAgICA6IFtdLFxuICAgIFtnZW9tZXRyeSwgYmFzZU1hcmtlcnNdXG4gICk7XG5cbiAgLy8gTWFya2VycyB0aGF0IGZhbGwgb3V0c2lkZSB0aGUgdmlzaWJsZSB3aW5kb3cgKHNjcm9sbGVkIG9mZiB3aGlsZSB6b29tZWQgaW4pXG4gIC8vIOKAlCBzdXJmYWNlZCBhcyBlZGdlIGluZGljYXRvcnMgc28gdGhleSBhcmVuJ3Qgc2lsZW50bHkgbG9zdC5cbiAgY29uc3Qgb2Zmc2NyZWVuID0gdXNlTWVtbzxPZmZzY3JlZW5NYXJrZXJzPihcbiAgICAoKSA9PlxuICAgICAgZ2VvbWV0cnkubW9kZS5raW5kID09PSAnZnVsbCdcbiAgICAgICAgPyBjb21wdXRlT2Zmc2NyZWVuTWFya2VycyhcbiAgICAgICAgICAgIGJhc2VNYXJrZXJzLFxuICAgICAgICAgICAgZ2VvbWV0cnkudmlzaWJsZVN0YXJ0TXMsXG4gICAgICAgICAgICBnZW9tZXRyeS52aXNpYmxlRW5kTXNcbiAgICAgICAgICApXG4gICAgICAgIDogeyBsZWZ0OiBudWxsLCByaWdodDogbnVsbCB9LFxuICAgIFtnZW9tZXRyeSwgYmFzZU1hcmtlcnNdXG4gICk7XG5cbiAgLy8gTWFya2VycyAodmlzaWJsZSBvciBvZmYtc2NyZWVuKSBtb3ZlIHRoZSBkdXJhdGlvbiBsYWJlbCBpbnRvIHRoZSBvdmVybGF5LFxuICAvLyBzbyB0aGUgaW4tYmFyIHNlZ21lbnQgbGFiZWwgaXMgc3VwcHJlc3NlZC5cbiAgY29uc3QgaGFzTWFya2VycyA9XG4gICAgbWFya2Vycy5sZW5ndGggPiAwIHx8IG9mZnNjcmVlbi5sZWZ0ICE9PSBudWxsIHx8IG9mZnNjcmVlbi5yaWdodCAhPT0gbnVsbDtcblxuICBjb25zdCBpc0Vycm9yZWQgPSBpc1NwYW5FcnJvcmVkKHNwYW4pO1xuICBjb25zdCBjb2xvcnMgPSBnZXRSZXNvdXJjZUNsYXNzTmFtZXMoc3Bhbi5yZXNvdXJjZSk7XG4gIGNvbnN0IGZhbGxiYWNrQ2xhc3NOYW1lID0gaXNFcnJvcmVkXG4gICAgPyAoY29sb3JzLmVycm9yQ2xhc3NOYW1lID8/ICdib3JkZXItcmVkLTUwMCBiZy1yZWQtMjAwJylcbiAgICA6IGNvbG9ycy5jbGFzc05hbWU7XG5cbiAgY29uc3QgdG90YWxMYWJlbCA9IGZvcm1hdER1cmF0aW9uUHJlY2lzZSh0b3RhbER1cmF0aW9uTXMpO1xuICBjb25zdCBzaG93VG90YWxMYWJlbCA9XG4gICAgZ2VvbWV0cnkudmlzaWJsZVBpeGVsV2lkdGggPj1cbiAgICBNYXRoLm1heCg0MCwgZXN0aW1hdGVMYWJlbFdpZHRoUHgodG90YWxMYWJlbCkpO1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIG9uU2VsZWN0KHNwYW4uc3BhbklkKTtcbiAgfSwgW29uU2VsZWN0LCBzcGFuLnNwYW5JZF0pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcm9sZT1cInRyZWVpdGVtXCJcbiAgICAgIGFyaWEtc2VsZWN0ZWQ9e2lzU2VsZWN0ZWR9XG4gICAgICBhcmlhLWV4cGFuZGVkPXtpc1NlbGVjdGVkfVxuICAgICAgYXJpYS1sZXZlbD17MX1cbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdncm91cC90aW1lbGluZS1yb3cgaC0xMCByZWxhdGl2ZSBmbGV4IGl0ZW1zLWNlbnRlciBob3ZlcjpiZy1ncmF5LTEwMCBhcmlhLXNlbGVjdGVkOmJnLWdyYXktMTAwIGFyaWEtc2VsZWN0ZWQ6aG92ZXI6YmctZ3JheS0yMDAgdHJhbnNpdGlvbi1vcGFjaXR5JyxcbiAgICAgICAgaXNEaW1tZWQgJiYgJ29wYWNpdHktMzUnXG4gICAgICApfVxuICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2t9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC14LTQgaW5zZXQteS0wXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSB0b3AtMS8yIGgtNiAtdHJhbnNsYXRlLXktMS8yIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLVswLjI1cmVtXVwiXG4gICAgICAgICAgc3R5bGU9e2dldEJhclBvc2l0aW9uU3R5bGUoZ2VvbWV0cnkpfVxuICAgICAgICA+XG4gICAgICAgICAge2dlb21ldHJ5Lm1vZGUua2luZCA9PT0gJ2Fycm93JyA/IChcbiAgICAgICAgICAgIDxCb3VuZGFyeUFycm93IGRpcmVjdGlvbj17Z2VvbWV0cnkubW9kZS5kaXJlY3Rpb259IC8+XG4gICAgICAgICAgKSA6IGdlb21ldHJ5Lm1vZGUua2luZCA9PT0gJ3RpbnknID8gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKCdoLTYgcm91bmRlZC1bMC4yNXJlbV0gYm9yZGVyJywgZmFsbGJhY2tDbGFzc05hbWUpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogc2VnbWVudHMubGVuZ3RoID4gMCA/IChcbiAgICAgICAgICAgIDxTZWdtZW50QmFyIHNlZ21lbnRzPXtzZWdtZW50c30gc2hvd0xhYmVscz17IWhhc01hcmtlcnN9IC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxQbGFpbkJhclxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2ZhbGxiYWNrQ2xhc3NOYW1lfVxuICAgICAgICAgICAgICBsYWJlbD17c2hvd1RvdGFsTGFiZWwgPyB0b3RhbExhYmVsIDogbnVsbH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHsvKiBPdmVybGF5IChub3QgY2xpcHBlZCk6IHRpY2tzLCBvZmYtc2NyZWVuIGluZGljYXRvcnMsIHRoZW4gdGhlIGR1cmF0aW9uIGxhYmVsIG9uIHRvcC4gKi99XG4gICAgICAgIHtoYXNNYXJrZXJzID8gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInBvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgdG9wLTEvMiBoLTYgLXRyYW5zbGF0ZS15LTEvMlwiXG4gICAgICAgICAgICBzdHlsZT17Z2V0QmFyUG9zaXRpb25TdHlsZShnZW9tZXRyeSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge21hcmtlcnMubGVuZ3RoID4gMCA/IDxNYXJrZXJMYXllciBtYXJrZXJzPXttYXJrZXJzfSAvPiA6IG51bGx9XG4gICAgICAgICAgICB7b2Zmc2NyZWVuLmxlZnQgPyAoXG4gICAgICAgICAgICAgIDxPZmZzY3JlZW5NYXJrZXJJbmRpY2F0b3JcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb249XCJsZWZ0XCJcbiAgICAgICAgICAgICAgICBjb3VudD17b2Zmc2NyZWVuLmxlZnQuY291bnR9XG4gICAgICAgICAgICAgICAgdGFyZ2V0TXM9e29mZnNjcmVlbi5sZWZ0Lm5lYXJlc3RNc31cbiAgICAgICAgICAgICAgICBvblJldmVhbD17b25SZXZlYWxUaW1lfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICB7b2Zmc2NyZWVuLnJpZ2h0ID8gKFxuICAgICAgICAgICAgICA8T2Zmc2NyZWVuTWFya2VySW5kaWNhdG9yXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uPVwicmlnaHRcIlxuICAgICAgICAgICAgICAgIGNvdW50PXtvZmZzY3JlZW4ucmlnaHQuY291bnR9XG4gICAgICAgICAgICAgICAgdGFyZ2V0TXM9e29mZnNjcmVlbi5yaWdodC5uZWFyZXN0TXN9XG4gICAgICAgICAgICAgICAgb25SZXZlYWw9e29uUmV2ZWFsVGltZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAge3Nob3dUb3RhbExhYmVsID8gKFxuICAgICAgICAgICAgICA8RHVyYXRpb25MYWJlbFxuICAgICAgICAgICAgICAgIGxhYmVsPXt0b3RhbExhYmVsfVxuICAgICAgICAgICAgICAgIC8vIFNoaWZ0IGNsZWFyIG9mIHRoZSBsZWZ0IGVkZ2UgaW5kaWNhdG9yIHNvIGl0IGlzbid0IGNvdmVyZWQuXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtvZmZzY3JlZW4ubGVmdCA/ICdwbC0xMCcgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn0pO1xuXG5leHBvcnQgeyBUaW1lbGluZUJhciB9O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIERlbHRhTWVhc3VyZUxpbmUgKEFsdC1rZXkgbWVhc3VyZW1lbnQgb3ZlcmxheXM6IHRoZSBzZWxlY3RlZCDihpQgaG92ZXJlZFxuLy8gbWVhc3VyZW1lbnQsIGFuZCB0aGUgYW1iaWVudCBjb25zZWN1dGl2ZS1nYXAgaW5kaWNhdG9ycyBzaG93biB3aXRob3V0IGFcbi8vIHNlbGVjdGlvbilcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBIb3Jpem9udGFsIGRpc3RhbmNlIGJldHdlZW4gdGhlIGFuY2hvciBiYXIncyBtZWFzdXJlZCBlZGdlIGFuZCB0aGUgdmVydGljYWxcbi8vIGd1aWRlIOKAlCBhbHNvIHRoZSB3aWR0aCBvZiB0aGUgY29ubmVjdG9yIHN0dWIgYnJpZGdpbmcgdGhlIHR3by5cbmNvbnN0IE1FQVNVUkVfR1VJREVfT1VUU0VUX1BYID0gNDtcblxuY29uc3QgRGVsdGFNZWFzdXJlTGluZSA9IG1lbW8oZnVuY3Rpb24gRGVsdGFNZWFzdXJlTGluZSh7XG4gIGRlbHRhLFxuICBhbmNob3JSb3dJbmRleCxcbiAgaG92ZXJlZFJvd0luZGV4LFxuICB0aW1lbGluZVdpZHRoLFxufToge1xuICBkZWx0YTogU3BhbkRlbHRhO1xuICBhbmNob3JSb3dJbmRleDogbnVtYmVyO1xuICBob3ZlcmVkUm93SW5kZXg6IG51bWJlcjtcbiAgdGltZWxpbmVXaWR0aDogbnVtYmVyO1xufSkge1xuICAvLyBCb3RoIGVuZHMgb2YgdGhlIG1lYXN1cmVtZW50IGFsaWduIHdpdGggdGhlIHZlcnRpY2FsIG1pZGRsZSBvZiB0aGUgYmFyc1xuICAvLyAoYmFycyBhcmUgY2VudGVyZWQgaW4gdGhlaXIgcm93cywgc28gYmFyIGNlbnRlciA9PSByb3cgY2VudGVyKS5cbiAgY29uc3QgYW5jaG9yQ2VudGVyWSA9IGFuY2hvclJvd0luZGV4ICogUk9XX0hFSUdIVF9QWCArIFJPV19IRUlHSFRfUFggLyAyO1xuICBjb25zdCBsaW5lWSA9IGhvdmVyZWRSb3dJbmRleCAqIFJPV19IRUlHSFRfUFggKyBST1dfSEVJR0hUX1BYIC8gMjtcblxuICAvLyBHdWlkZSBjb25uZWN0aW5nIHRoZSBtaWRkbGUgb2YgdGhlIGFuY2hvciBiYXIgZG93bi91cCB0byB0aGUgbGluZSwgc29cbiAgLy8gdGhlIG1lYXN1cmVtZW50J3Mgb3JpZ2luIHN0YXlzIGxlZ2libGUgd2hlbiB0aGUgcm93cyBhcmUgZmFyIGFwYXJ0LlxuICAvLyBJdCBzaXRzIGp1c3Qgb3V0c2lkZSB0aGUgYW5jaG9yIGJhcidzIG1lYXN1cmVkIGVkZ2UgKHNvIGl0IGRvZXNuJ3QgYmxlbmRcbiAgLy8gaW50byB0aGUgYmFyJ3MgYm9yZGVyKSwgam9pbmVkIHRvIHRoZSBiYXIgYnkgYSBzaG9ydCBob3Jpem9udGFsIHN0dWIuIFRoZVxuICAvLyBsaW5lIHJ1bnMgZnJvbSB0aGUgZWxib3cgY29ybmVyICh0aGUgZ3VpZGUncyB4KSB0byB0aGUgaG92ZXJlZCBzcGFuJ3NcbiAgLy8gbWVhc3VyZWQgZWRnZSDigJQgcHVsbGVkIHNob3J0IG9mIHRoZSBlZGdlIGFycm93IHdoZW4gdGhlIGhvdmVyZWQgc3BhbiBpc1xuICAvLyBmdWxseSBvZmYtc2NyZWVuLlxuICBjb25zdCBndWlkZVRvcCA9IE1hdGgubWluKGFuY2hvckNlbnRlclksIGxpbmVZKTtcbiAgY29uc3QgZ3VpZGVCb3R0b20gPSBNYXRoLm1heChhbmNob3JDZW50ZXJZLCBsaW5lWSk7XG4gIGNvbnN0IGFuY2hvclggPSBkZWx0YS5hbmNob3JGcmFjICogdGltZWxpbmVXaWR0aDtcbiAgY29uc3QgZ3VpZGVYID1cbiAgICBhbmNob3JYICtcbiAgICAoZGVsdGEuYW5jaG9yRWRnZSA9PT0gJ2VuZCdcbiAgICAgID8gTUVBU1VSRV9HVUlERV9PVVRTRVRfUFhcbiAgICAgIDogLU1FQVNVUkVfR1VJREVfT1VUU0VUX1BYKTtcbiAgY29uc3QgYXJyb3dDbGVhcmFuY2UgPVxuICAgIGRlbHRhLmhvdmVyZWRPZmZzY3JlZW4gPT09ICdyaWdodCdcbiAgICAgID8gLShUSU5ZX0JBUl9CT1hfU0laRV9QWCArIDQpXG4gICAgICA6IGRlbHRhLmhvdmVyZWRPZmZzY3JlZW4gPT09ICdsZWZ0J1xuICAgICAgICA/IFRJTllfQkFSX0JPWF9TSVpFX1BYICsgNFxuICAgICAgICA6IDA7XG4gIGNvbnN0IGhvdmVyZWRYID0gZGVsdGEuaG92ZXJlZEZyYWMgKiB0aW1lbGluZVdpZHRoICsgYXJyb3dDbGVhcmFuY2U7XG4gIGNvbnN0IHN0YXJ0WCA9IE1hdGgubWluKGd1aWRlWCwgaG92ZXJlZFgpO1xuICBjb25zdCBlbmRYID0gTWF0aC5tYXgoZ3VpZGVYLCBob3ZlcmVkWCk7XG5cbiAgY29uc3QgbGFiZWwgPSBmb3JtYXREdXJhdGlvblByZWNpc2UoZGVsdGEuZGVsdGFNcyk7XG4gIGNvbnN0IGxhYmVsV2lkdGhQeCA9IGVzdGltYXRlTGFiZWxXaWR0aFB4KGxhYmVsKTtcbiAgLy8gQ2VudGVyIHRoZSBsYWJlbCBvbiB0aGUgbGluZTsgd2hlbiB0aGUgbGluZSBpcyB0b28gc2hvcnQsIHBsYWNlIGl0IGJlc2lkZVxuICAvLyB0aGUgcmlnaHQgZW5kcG9pbnQsIGZsaXBwaW5nIGxlZnQgbmVhciB0aGUgdmlld3BvcnQncyByaWdodCBlZGdlLlxuICBjb25zdCBsYWJlbFBsYWNlbWVudCA9XG4gICAgZW5kWCAtIHN0YXJ0WCA+PSBsYWJlbFdpZHRoUHhcbiAgICAgID8geyBsZWZ0OiAoc3RhcnRYICsgZW5kWCkgLyAyLCB0cmFuc2xhdGU6ICctdHJhbnNsYXRlLXgtMS8yJyB9XG4gICAgICA6IGVuZFggKyA0ICsgbGFiZWxXaWR0aFB4IDw9IHRpbWVsaW5lV2lkdGhcbiAgICAgICAgPyB7IGxlZnQ6IGVuZFggKyA0LCB0cmFuc2xhdGU6ICcnIH1cbiAgICAgICAgOiB7IGxlZnQ6IHN0YXJ0WCAtIDQsIHRyYW5zbGF0ZTogJy10cmFuc2xhdGUteC1mdWxsJyB9O1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaC1weCB3LTEgYmctYW1iZXItODAwXCJcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBsZWZ0OiBNYXRoLm1pbihhbmNob3JYLCBndWlkZVgpLFxuICAgICAgICAgIHRvcDogYW5jaG9yQ2VudGVyWSxcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHctcHggYmctYW1iZXItODAwXCJcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBsZWZ0OiBndWlkZVgsXG4gICAgICAgICAgdG9wOiBndWlkZVRvcCxcbiAgICAgICAgICBoZWlnaHQ6IGd1aWRlQm90dG9tIC0gZ3VpZGVUb3AsXG4gICAgICAgIH19XG4gICAgICAvPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSBoLXB4IGJnLWFtYmVyLTgwMFwiXG4gICAgICAgIHN0eWxlPXt7IGxlZnQ6IHN0YXJ0WCwgd2lkdGg6IE1hdGgubWF4KGVuZFggLSBzdGFydFgsIDEpLCB0b3A6IGxpbmVZIH19XG4gICAgICAvPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAnYWJzb2x1dGUgLXRyYW5zbGF0ZS15LTEvMiBmb250LW1vbm8gdGV4dC1bMTBweF0gZm9udC1tZWRpdW0gbGVhZGluZy1ub25lIHRhYnVsYXItbnVtcyB3aGl0ZXNwYWNlLW5vd3JhcCByb3VuZGVkLXhzIGJnLWJhY2tncm91bmQtMTAwIHB4LTEgcHktMC41IHRleHQtYW1iZXItODAwJyxcbiAgICAgICAgICBsYWJlbFBsYWNlbWVudC50cmFuc2xhdGVcbiAgICAgICAgKX1cbiAgICAgICAgc3R5bGU9e3sgbGVmdDogbGFiZWxQbGFjZW1lbnQubGVmdCwgdG9wOiBsaW5lWSB9fVxuICAgICAgPlxuICAgICAgICB7bGFiZWx9XG4gICAgICA8L3NwYW4+XG4gICAgPC8+XG4gICk7XG59KTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUaW1lbGluZUhlYWRlclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBmdW5jdGlvbiBUaW1lbGluZUhlYWRlcih7XG4gIG1hcmtlcnMsXG4gIGhvdmVySW5mbyxcbn06IHtcbiAgbWFya2VyczogVGltZU1hcmtlcltdO1xuICBob3ZlckluZm8/OiB7IGZyYWN0aW9uOiBudW1iZXI7IGxhYmVsOiBzdHJpbmcgfSB8IG51bGw7XG59KTogUmVhY3ROb2RlIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIGJnLWJhY2tncm91bmQtMTAwIGJvcmRlci1iIGJvcmRlci1ncmF5LWFscGhhLTQwMCBoLTEwIG1pbi1oLTEwIGZsZXggaXRlbXMtZW5kIHB4LTQgcGItMVwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSBoLWZ1bGwgZmxleC0xXCI+XG4gICAgICAgIHttYXJrZXJzLm1hcCgobSkgPT4gKFxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBrZXk9e1N0cmluZyhtLnZhbHVlKX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIGJvdHRvbS0xIHRleHQtbGFiZWwtMTItbW9ubyB0ZXh0LWdyYXktOTAwIHdoaXRlc3BhY2Utbm93cmFwXCJcbiAgICAgICAgICAgIHN0eWxlPXt7IGxlZnQ6IGAke20ucG9zaXRpb24gKiAxMDB9JWAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bS5sYWJlbH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICkpfVxuICAgICAgICB7aG92ZXJJbmZvICYmIChcbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgdG9wLTEgcG9pbnRlci1ldmVudHMtbm9uZSB6LTEwIGZvbnQtbW9ubyB0ZXh0LVsxMXB4XSBsZWFkaW5nLTQgdGV4dC1ncmF5LTEwMDAgd2hpdGVzcGFjZS1ub3dyYXAgYmctYmFja2dyb3VuZC0xMDAgYm9yZGVyIGJvcmRlci1ncmF5LWFscGhhLTQwMCByb3VuZGVkIHB4LTEgLXRyYW5zbGF0ZS14LTEvMlwiXG4gICAgICAgICAgICBzdHlsZT17eyBsZWZ0OiBgJHtob3ZlckluZm8uZnJhY3Rpb24gKiAxMDB9JWAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7aG92ZXJJbmZvLmxhYmVsfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRpbWVsaW5lXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBUaW1lbGluZUhvdmVyIHtcbiAgLyoqIFBvaW50ZXIgeCBhcyBhIGZyYWN0aW9uIG9mIHRoZSB0aW1lbGluZSdzIGNvbnRlbnQgd2lkdGgsIGluIFswLCAxXS4gKi9cbiAgZnJhY3Rpb246IG51bWJlcjtcbiAgLyoqIFJvdyBpbmRleCB1bmRlciB0aGUgcG9pbnRlcjsgbWF5IGJlIHBhc3QgdGhlIGxhc3Qgcm93IOKAlCBub3QgdmFsaWRhdGVkLiAqL1xuICByb3dJbmRleDogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVGltZWxpbmUoe1xuICBzcGFucyxcbiAgdmlld1N0YXJ0LFxuICB2aWV3RW5kLFxuICBtYXJrZXJzLFxuICBzZWxlY3RlZElkLFxuICBzZWFyY2hSZXN1bHQsXG4gIG9uU2VsZWN0LFxuICBvblJldmVhbFRpbWUsXG4gIGhvdmVyLFxuICBhbHRIZWxkID0gZmFsc2UsXG59OiB7XG4gIHNwYW5zOiBTcGFuW107XG4gIHZpZXdTdGFydDogbnVtYmVyO1xuICB2aWV3RW5kOiBudW1iZXI7XG4gIG1hcmtlcnM6IFRpbWVNYXJrZXJbXTtcbiAgc2VsZWN0ZWRJZDogc3RyaW5nIHwgbnVsbDtcbiAgc2VhcmNoUmVzdWx0OiBTcGFuU2VhcmNoUmVzdWx0O1xuICBvblNlbGVjdDogKHNwYW5JZDogc3RyaW5nKSA9PiB2b2lkO1xuICBvblJldmVhbFRpbWU/OiAodGltZU1zOiBudW1iZXIpID0+IHZvaWQ7XG4gIGhvdmVyPzogVGltZWxpbmVIb3ZlciB8IG51bGw7XG4gIGFsdEhlbGQ/OiBib29sZWFuO1xufSk6IFJlYWN0Tm9kZSB7XG4gIGNvbnN0IGNvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IFtjb250YWluZXJXaWR0aCwgc2V0Q29udGFpbmVyV2lkdGhdID0gdXNlU3RhdGUoMCk7XG4gIGNvbnN0IHZpZXdEdXJhdGlvbiA9IHZpZXdFbmQgLSB2aWV3U3RhcnQ7XG4gIGNvbnN0IHRpbWVsaW5lV2lkdGggPSBNYXRoLm1heCgwLCBjb250YWluZXJXaWR0aCAtIFRJTUVMSU5FX1BBRERJTkdfUFggKiAyKTtcbiAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSB1c2VSb3dXaW5kb3coXG4gICAgY29udGFpbmVyUmVmLFxuICAgIHNwYW5zLmxlbmd0aCxcbiAgICBST1dfSEVJR0hUX1BYXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBlbCA9IGNvbnRhaW5lclJlZi5jdXJyZW50O1xuICAgIGlmICghZWwpIHJldHVybjtcbiAgICBjb25zdCBybyA9IG5ldyBSZXNpemVPYnNlcnZlcigoW2VudHJ5XSkgPT4ge1xuICAgICAgc2V0Q29udGFpbmVyV2lkdGgoZW50cnkuY29udGVudFJlY3Qud2lkdGgpO1xuICAgIH0pO1xuICAgIHJvLm9ic2VydmUoZWwpO1xuICAgIHJldHVybiAoKSA9PiByby5kaXNjb25uZWN0KCk7XG4gIH0sIFtdKTtcblxuICAvLyBFYWNoIGNvbnNlY3V0aXZlIGdhcCByZW5kZXJzIGFzIGEgbWVhc3VyZW1lbnQgZnJvbSB0aGUgZWFybGllciBzcGFuJ3MgZW5kXG4gIC8vIGVkZ2UgdG8gdGhlIG5leHQgc3BhbidzIHN0YXJ0LCBpbiB0aGUgc2FtZSB2aXN1YWwgbGFuZ3VhZ2UgYXMgdGhlXG4gIC8vIHNlbGVjdGVkIOKGlCBob3ZlcmVkIG1lYXN1cmVtZW50LlxuICBjb25zdCBnYXBNZWFzdXJlbWVudHMgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBjb21wdXRlU3BhbkdhcHMoc3BhbnMsIHZpZXdTdGFydCwgdmlld0VuZCkubWFwKChnYXApID0+ICh7XG4gICAgICAgIGRlbHRhOiB7XG4gICAgICAgICAgZGVsdGFNczogZ2FwLmdhcE1zLFxuICAgICAgICAgIGFuY2hvckZyYWM6IGdhcC5sZWZ0RnJhYyxcbiAgICAgICAgICBob3ZlcmVkRnJhYzogZ2FwLnJpZ2h0RnJhYyxcbiAgICAgICAgICBhbmNob3JFZGdlOiAnZW5kJyxcbiAgICAgICAgICBob3ZlcmVkT2Zmc2NyZWVuOiBudWxsLFxuICAgICAgICB9IHNhdGlzZmllcyBTcGFuRGVsdGEsXG4gICAgICAgIGFuY2hvclJvd0luZGV4OiBnYXAucm93SW5kZXgsXG4gICAgICAgIGhvdmVyZWRSb3dJbmRleDogZ2FwLnJvd0luZGV4ICsgMSxcbiAgICAgIH0pKSxcbiAgICBbc3BhbnMsIHZpZXdTdGFydCwgdmlld0VuZF1cbiAgKTtcblxuICAvLyBXaXRoIGEgc3BhbiBzZWxlY3RlZCwgQWx0K2hvdmVyIG1lYXN1cmVzIHNlbGVjdGVkIOKGlCBob3ZlcmVkIGluc3RlYWQgb2ZcbiAgLy8gc2hvd2luZyB0aGUgYWxsLXNpYmxpbmctZ2FwcyBvdmVybGF5LlxuICBjb25zdCBhbmNob3JJbmRleCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHNlbGVjdGVkSWQgPyBzcGFucy5maW5kSW5kZXgoKHMpID0+IHMuc3BhbklkID09PSBzZWxlY3RlZElkKSA6IC0xKSxcbiAgICBbc3BhbnMsIHNlbGVjdGVkSWRdXG4gICk7XG5cbiAgY29uc3QgbWVhc3VyZW1lbnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIWFsdEhlbGQgfHwgaG92ZXIgPT0gbnVsbCB8fCBob3Zlci5yb3dJbmRleCA9PT0gYW5jaG9ySW5kZXgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBhbmNob3JTcGFuID0gc3BhbnNbYW5jaG9ySW5kZXhdO1xuICAgIGNvbnN0IGhvdmVyZWRTcGFuID0gc3BhbnNbaG92ZXIucm93SW5kZXhdO1xuICAgIGlmICghYW5jaG9yU3BhbiB8fCAhaG92ZXJlZFNwYW4pIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGRlbHRhID0gY29tcHV0ZVNwYW5EZWx0YShhbmNob3JTcGFuLCBob3ZlcmVkU3Bhbiwgdmlld1N0YXJ0LCB2aWV3RW5kKTtcbiAgICByZXR1cm4gZGVsdGFcbiAgICAgID8geyBkZWx0YSwgYW5jaG9yUm93SW5kZXg6IGFuY2hvckluZGV4LCBob3ZlcmVkUm93SW5kZXg6IGhvdmVyLnJvd0luZGV4IH1cbiAgICAgIDogbnVsbDtcbiAgfSwgW2FsdEhlbGQsIGFuY2hvckluZGV4LCBob3Zlciwgc3BhbnMsIHZpZXdTdGFydCwgdmlld0VuZF0pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBoLWZ1bGwgb3ZlcmZsb3ctaGlkZGVuXCJcbiAgICAgIHN0eWxlPXt7IG1pbkhlaWdodDogc3BhbnMubGVuZ3RoICogUk9XX0hFSUdIVF9QWCB9fVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgYXJpYS1oaWRkZW5cbiAgICAgICAgY2xhc3NOYW1lPVwicG9pbnRlci1ldmVudHMtbm9uZSBhYnNvbHV0ZSBpbnNldC14LTQgaW5zZXQteS0wXCJcbiAgICAgID5cbiAgICAgICAge21hcmtlcnMubWFwKChtYXJrZXIpID0+XG4gICAgICAgICAgLy8gU2tpcCB0aGUgXCIwc1wiIG9yaWdpbiBtYXJrZXIgc2luY2UgdGhlIGxlZnQgZWRnZSBhbHJlYWR5IGltcGxpZXMgaXQuXG4gICAgICAgICAgTWF0aC5hYnMobWFya2VyLnZhbHVlKSA+IDAuMDAwMDAxID8gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBrZXk9e1N0cmluZyhtYXJrZXIudmFsdWUpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSB0b3AtMCBib3R0b20tMCB3LXB4IGJnLWdyYXktYWxwaGEtMzAwXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3sgbGVmdDogYCR7bWFya2VyLnBvc2l0aW9uICogMTAwfSVgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsXG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIHtob3ZlciAhPSBudWxsICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIGluc2V0LXgtNCBpbnNldC15LTAgei0xMFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHRvcC0wIGJvdHRvbS0wIHctcHggYmctZ3JheS1hbHBoYS01MDBcIlxuICAgICAgICAgICAgc3R5bGU9e3sgbGVmdDogYCR7aG92ZXIuZnJhY3Rpb24gKiAxMDB9JWAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICA8ZGl2IHN0eWxlPXt7IHRyYW5zZm9ybTogYHRyYW5zbGF0ZVkoJHtzdGFydCAqIFJPV19IRUlHSFRfUFh9cHgpYCB9fT5cbiAgICAgICAge3NwYW5zLnNsaWNlKHN0YXJ0LCBlbmQpLm1hcCgoc3BhbikgPT4gKFxuICAgICAgICAgIDxUaW1lbGluZUJhclxuICAgICAgICAgICAga2V5PXtzcGFuLnNwYW5JZH1cbiAgICAgICAgICAgIHNwYW49e3NwYW59XG4gICAgICAgICAgICB2aWV3U3RhcnQ9e3ZpZXdTdGFydH1cbiAgICAgICAgICAgIHZpZXdEdXJhdGlvbj17dmlld0R1cmF0aW9ufVxuICAgICAgICAgICAgY29udGFpbmVyV2lkdGg9e3RpbWVsaW5lV2lkdGh9XG4gICAgICAgICAgICBpc1NlbGVjdGVkPXtzZWxlY3RlZElkID09PSBzcGFuLnNwYW5JZH1cbiAgICAgICAgICAgIGlzRGltbWVkPXtpc1NwYW5EaW1tZWRCeVNlYXJjaChzcGFuLnNwYW5JZCwgc2VhcmNoUmVzdWx0KX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXtvblNlbGVjdH1cbiAgICAgICAgICAgIG9uUmV2ZWFsVGltZT17b25SZXZlYWxUaW1lfVxuICAgICAgICAgIC8+XG4gICAgICAgICkpfVxuICAgICAgPC9kaXY+XG4gICAgICB7YWx0SGVsZCAmJiBhbmNob3JJbmRleCA8IDAgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgYXJpYS1oaWRkZW5cbiAgICAgICAgICBjbGFzc05hbWU9XCJwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIGluc2V0LXgtNCBpbnNldC15LTBcIlxuICAgICAgICA+XG4gICAgICAgICAge2dhcE1lYXN1cmVtZW50cy5tYXAoKGdhcCkgPT4gKFxuICAgICAgICAgICAgPERlbHRhTWVhc3VyZUxpbmVcbiAgICAgICAgICAgICAga2V5PXtnYXAuYW5jaG9yUm93SW5kZXh9XG4gICAgICAgICAgICAgIHsuLi5nYXB9XG4gICAgICAgICAgICAgIHRpbWVsaW5lV2lkdGg9e3RpbWVsaW5lV2lkdGh9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICB7bWVhc3VyZW1lbnQgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgYXJpYS1oaWRkZW5cbiAgICAgICAgICBjbGFzc05hbWU9XCJwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIGluc2V0LXgtNCBpbnNldC15LTAgei0yMFwiXG4gICAgICAgID5cbiAgICAgICAgICA8RGVsdGFNZWFzdXJlTGluZSB7Li4ubWVhc3VyZW1lbnR9IHRpbWVsaW5lV2lkdGg9e3RpbWVsaW5lV2lkdGh9IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiJdfQ==
|
|
312
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy90cmFjZS12aWV3ZXIvY29tcG9uZW50cy90aW1lbGluZS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXJELE9BQU8sRUFDTCxRQUFRLEVBQ1IsSUFBSSxFQUNKLFdBQVcsRUFDWCxTQUFTLEVBQ1QsT0FBTyxFQUNQLE1BQU0sRUFDTixRQUFRLEdBQ1QsTUFBTSxPQUFPLENBQUM7QUFDZixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckMsT0FBTyxFQUFFLG9CQUFvQixFQUF5QixNQUFNLFdBQVcsQ0FBQztBQUV4RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFRdkUsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIscUJBQXFCLEVBQ3JCLGlCQUFpQixFQUNqQixhQUFhLEdBQ2QsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixXQUFXLEVBQ1gsd0JBQXdCLEVBQ3hCLGNBQWMsR0FDZixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sTUFBTSxNQUFNLHVCQUF1QixDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFL0QsOEVBQThFO0FBQzlFLFlBQVk7QUFDWiw4RUFBOEU7QUFFOUUsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLENBQUM7QUFDaEMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFDNUIsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDO0FB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Q0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxFQUN6RCxRQUFRLEVBQUUsUUFBUSxFQUNsQixZQUFZLEVBQUUsWUFBWSxJQVJyQixJQUFJLENBQUMsTUFBTSxDQVNoQixDQUNILENBQUMsR0FDRSxFQUNMLE9BQU8sSUFBSSxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQzdCLG1DQUVFLFNBQVMsRUFBQyxrREFBa0QsWUFFM0QsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FDNUIsS0FBQyxnQkFBZ0IsT0FFWCxHQUFHLEVBQ1AsYUFBYSxFQUFFLGFBQWEsSUFGdkIsR0FBRyxDQUFDLGNBQWMsQ0FHdkIsQ0FDSCxDQUFDLEdBQ0UsQ0FDUCxFQUNBLFdBQVcsSUFBSSxDQUNkLG1DQUVFLFNBQVMsRUFBQyx1REFBdUQsWUFFakUsS0FBQyxnQkFBZ0IsT0FBSyxXQUFXLEVBQUUsYUFBYSxFQUFFLGFBQWEsR0FBSSxHQUMvRCxDQUNQLElBQ0csQ0FDUCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgQXJyb3dMZWZ0LCBBcnJvd1JpZ2h0IH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB0eXBlIHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtcbiAgRnJhZ21lbnQsXG4gIG1lbW8sXG4gIHVzZUNhbGxiYWNrLFxuICB1c2VFZmZlY3QsXG4gIHVzZU1lbW8sXG4gIHVzZVJlZixcbiAgdXNlU3RhdGUsXG59IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi4vLi4vLi4vbGliL2NuJztcbmltcG9ydCB7IGlzU3BhbkRpbW1lZEJ5U2VhcmNoLCB0eXBlIFNwYW5TZWFyY2hSZXN1bHQgfSBmcm9tICcuLi9zZWFyY2gnO1xuaW1wb3J0IHR5cGUgeyBTcGFuIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZm9ybWF0RHVyYXRpb25QcmVjaXNlLCBnZXRIaWdoUmVzSW5NcyB9IGZyb20gJy4uL3V0aWwvdGltaW5nJztcbmltcG9ydCB0eXBlIHtcbiAgT2Zmc2NyZWVuTWFya2VycyxcbiAgU2VnbWVudCxcbiAgU2VnbWVudFN0YXR1cyxcbiAgU3BhbkRlbHRhLFxuICBUaW1lTWFya2VyLFxufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge1xuICBjb21wdXRlT2Zmc2NyZWVuTWFya2VycyxcbiAgY29tcHV0ZVNwYW5EZWx0YSxcbiAgY29tcHV0ZVNwYW5HYXBzLFxuICBjb21wdXRlU3Bhbk1hcmtlcnMsXG4gIGNvbXB1dGVTcGFuU2VnbWVudHMsXG4gIGdldFJlc291cmNlQ2xhc3NOYW1lcyxcbiAgZ2V0U3BhbkR1cmF0aW9uTXMsXG4gIGlzU3BhbkVycm9yZWQsXG59IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7XG4gIGN1bGxDb2xsaWRpbmdNYXJrZXJzLFxuICBNYXJrZXJMYXllcixcbiAgT2Zmc2NyZWVuTWFya2VySW5kaWNhdG9yLFxuICBwcm9qZWN0TWFya2Vycyxcbn0gZnJvbSAnLi9zcGFuLW1hcmtlcnMnO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3RpbWVsaW5lLm1vZHVsZS5jc3MnO1xuaW1wb3J0IHsgUk9XX0hFSUdIVF9QWCwgdXNlUm93V2luZG93IH0gZnJvbSAnLi91c2Utcm93LXdpbmRvdyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ29uc3RhbnRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgVElOWV9CQVJfQk9YX1NJWkVfUFggPSAyNDtcbmNvbnN0IFRJTllfQkFSX1dJRFRIX1BYID0gNDtcbmV4cG9ydCBjb25zdCBUSU1FTElORV9QQURESU5HX1BYID0gMTY7XG5cbmNvbnN0IFNFR01FTlRfQ0xBU1NFUzogUmVjb3JkPFNlZ21lbnRTdGF0dXMsIHN0cmluZz4gPSB7XG4gIHF1ZXVlZDogJ2JnLWdyYXktNDAwIGJvcmRlciBib3JkZXItZ3JheS01MDAnLFxuICBwZW5kaW5nOiAnYmctZ3JheS0yMDAgYm9yZGVyIGJvcmRlci1ncmF5LTUwMCcsXG4gIHJldHJ5aW5nOiAnYmctZ3JheS00MDAgYm9yZGVyIGJvcmRlci1ncmF5LTUwMCcsXG4gIHdhaXRpbmc6ICdiZy1ncmF5LTIwMCBib3JkZXIgYm9yZGVyLWdyYXktNTAwJyxcbiAgcnVubmluZzogJ2JnLWJsdWUtMjAwIGJvcmRlciBib3JkZXItYmx1ZS01MDAnLFxuICBjb21wbGV0ZWQ6ICdiZy1ibHVlLTIwMCBib3JkZXIgYm9yZGVyLWJsdWUtNTAwJyxcbiAgZmFpbGVkOiAnYmctcmVkLTIwMCBib3JkZXIgYm9yZGVyLXJlZC01MDAnLFxuICBzdWNjZWVkZWQ6ICdiZy1ncmVlbi0yMDAgYm9yZGVyIGJvcmRlci1ncmVlbi01MDAnLFxuICBzbGVlcGluZzogJ2JnLWdyYXktNDAwIGJvcmRlciBib3JkZXItZ3JheS01MDAnLFxuICByZWNlaXZlZDogJ2JnLWJsdWUtMjAwIGJvcmRlciBib3JkZXItYmx1ZS01MDAnLFxufTtcblxuY29uc3QgU1RSSVBFRF9TRUdNRU5UX1NUQVRVU0VTOiBSZWFkb25seVNldDxTZWdtZW50U3RhdHVzPiA9IG5ldyBTZXQoW1xuICAncGVuZGluZycsXG4gICdydW5uaW5nJyxcbiAgJ3JlY2VpdmVkJyxcbl0pO1xuXG5mdW5jdGlvbiBBbmltYXRlZFN0cmlwZXMoeyBzdGF0dXMgfTogeyBzdGF0dXM6IFNlZ21lbnRTdGF0dXMgfSk6IFJlYWN0Tm9kZSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgYXJpYS1oaWRkZW5cbiAgICAgIGNsYXNzTmFtZT17XG4gICAgICAgIHN0YXR1cyA9PT0gJ3BlbmRpbmcnID8gc3R5bGVzLnBlbmRpbmdTdHJpcGVzIDogc3R5bGVzLnJ1bm5pbmdTdHJpcGVzXG4gICAgICB9XG4gICAgLz5cbiAgKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBCYXIgZ2VvbWV0cnlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG50eXBlIEJhck1vZGUgPVxuICB8IHsga2luZDogJ2Fycm93JzsgZGlyZWN0aW9uOiAnbGVmdCcgfCAncmlnaHQnIH1cbiAgfCB7IGtpbmQ6ICd0aW55JyB9XG4gIHwgeyBraW5kOiAnZnVsbCcgfTtcblxuaW50ZXJmYWNlIEJhckdlb21ldHJ5IHtcbiAgbW9kZTogQmFyTW9kZTtcbiAgbGVmdFBjdDogbnVtYmVyO1xuICB3aWR0aFBjdDogbnVtYmVyO1xuICB2aXNpYmxlU3RhcnRNczogbnVtYmVyO1xuICB2aXNpYmxlRW5kTXM6IG51bWJlcjtcbiAgdmlzaWJsZVBpeGVsV2lkdGg6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDb21wdXRlIHRoZSBiYXIncyBnZW9tZXRyeSBpbnNpZGUgdGhlIHRpbWVsaW5lIHZpZXdwb3J0LiBQZXJjZW50YWdlcyBhcmVcbiAqIGFsd2F5cyBpbiBbMCwgMTAwXSBzbyB3ZSBuZXZlciBlbWl0IENTUyB2YWx1ZXMgdGhhdCBleGNlZWQgYnJvd3NlciBsYXlvdXRcbiAqIGxpbWl0cyBhdCBleHRyZW1lIHpvb20uXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVCYXJHZW9tZXRyeShcbiAgc3RhcnRNczogbnVtYmVyLFxuICBlbmRNczogbnVtYmVyLFxuICB2aWV3U3RhcnQ6IG51bWJlcixcbiAgdmlld0VuZDogbnVtYmVyLFxuICBjb250YWluZXJXaWR0aDogbnVtYmVyXG4pOiBCYXJHZW9tZXRyeSB7XG4gIGNvbnN0IHZpZXdEdXJhdGlvbiA9IHZpZXdFbmQgLSB2aWV3U3RhcnQ7XG4gIGNvbnN0IHZpc2libGVTdGFydE1zID0gTWF0aC5tYXgoc3RhcnRNcywgdmlld1N0YXJ0KTtcbiAgY29uc3QgdmlzaWJsZUVuZE1zID0gTWF0aC5taW4oZW5kTXMsIHZpZXdFbmQpO1xuICBjb25zdCB2aXNpYmxlRHVyYXRpb25NcyA9IE1hdGgubWF4KDAsIHZpc2libGVFbmRNcyAtIHZpc2libGVTdGFydE1zKTtcbiAgY29uc3Qgd2lkdGhGcmFjID0gdmlld0R1cmF0aW9uID4gMCA/IHZpc2libGVEdXJhdGlvbk1zIC8gdmlld0R1cmF0aW9uIDogMDtcbiAgY29uc3QgdmlzaWJsZVBpeGVsV2lkdGggPSB3aWR0aEZyYWMgKiBjb250YWluZXJXaWR0aDtcblxuICBjb25zdCBpc1RpbnkgPSBjb250YWluZXJXaWR0aCA+IDAgJiYgdmlzaWJsZVBpeGVsV2lkdGggPCBUSU5ZX0JBUl9CT1hfU0laRV9QWDtcbiAgY29uc3QgZXh0ZW5kc09mZkxlZnQgPSBzdGFydE1zIDwgdmlld1N0YXJ0O1xuICBjb25zdCBleHRlbmRzT2ZmUmlnaHQgPSBlbmRNcyA+IHZpZXdFbmQ7XG5cbiAgY29uc3QgbW9kZTogQmFyTW9kZSA9XG4gICAgaXNUaW55ICYmIChleHRlbmRzT2ZmTGVmdCB8fCBleHRlbmRzT2ZmUmlnaHQpXG4gICAgICA/IHsga2luZDogJ2Fycm93JywgZGlyZWN0aW9uOiBleHRlbmRzT2ZmUmlnaHQgPyAncmlnaHQnIDogJ2xlZnQnIH1cbiAgICAgIDogaXNUaW55XG4gICAgICAgID8geyBraW5kOiAndGlueScgfVxuICAgICAgICA6IHsga2luZDogJ2Z1bGwnIH07XG5cbiAgcmV0dXJuIHtcbiAgICBtb2RlLFxuICAgIGxlZnRQY3Q6XG4gICAgICB2aWV3RHVyYXRpb24gPiAwXG4gICAgICAgID8gKCh2aXNpYmxlU3RhcnRNcyAtIHZpZXdTdGFydCkgLyB2aWV3RHVyYXRpb24pICogMTAwXG4gICAgICAgIDogMCxcbiAgICB3aWR0aFBjdDogd2lkdGhGcmFjICogMTAwLFxuICAgIHZpc2libGVTdGFydE1zLFxuICAgIHZpc2libGVFbmRNcyxcbiAgICB2aXNpYmxlUGl4ZWxXaWR0aCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0QmFyUG9zaXRpb25TdHlsZShnZW9tZXRyeTogQmFyR2VvbWV0cnkpOiB7XG4gIGxlZnQ6IHN0cmluZztcbiAgd2lkdGg6IHN0cmluZztcbn0ge1xuICBzd2l0Y2ggKGdlb21ldHJ5Lm1vZGUua2luZCkge1xuICAgIGNhc2UgJ2Fycm93JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6XG4gICAgICAgICAgZ2VvbWV0cnkubW9kZS5kaXJlY3Rpb24gPT09ICdyaWdodCdcbiAgICAgICAgICAgID8gYGNhbGMoMTAwJSAtICR7VElOWV9CQVJfQk9YX1NJWkVfUFh9cHgpYFxuICAgICAgICAgICAgOiAnMHB4JyxcbiAgICAgICAgd2lkdGg6IGAke1RJTllfQkFSX0JPWF9TSVpFX1BYfXB4YCxcbiAgICAgIH07XG4gICAgY2FzZSAndGlueSc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiBgbWluKCR7Z2VvbWV0cnkubGVmdFBjdH0lLCBjYWxjKDEwMCUgLSAke1RJTllfQkFSX1dJRFRIX1BYfXB4KSlgLFxuICAgICAgICB3aWR0aDogYCR7VElOWV9CQVJfV0lEVEhfUFh9cHhgLFxuICAgICAgfTtcbiAgICBjYXNlICdmdWxsJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6IGAke2dlb21ldHJ5LmxlZnRQY3R9JWAsXG4gICAgICAgIHdpZHRoOiBgbWF4KCR7Z2VvbWV0cnkud2lkdGhQY3R9JSwgNHB4KWAsXG4gICAgICB9O1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2VnbWVudCBwcm9qZWN0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuaW50ZXJmYWNlIFZpc2libGVTZWdtZW50IHtcbiAgc3RhdHVzOiBTZWdtZW50U3RhdHVzO1xuICBsZWZ0UGN0OiBudW1iZXI7XG4gIHdpZHRoUGN0OiBudW1iZXI7XG4gIHBpeGVsV2lkdGg6IG51bWJlcjtcbiAgZnVsbER1cmF0aW9uTXM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQcm9qZWN0IHN0YXR1cyBzZWdtZW50cyBvbnRvIHRoZSB2aXNpYmxlIHBvcnRpb24gb2YgYSBiYXIuIFNlZ21lbnRzIGZ1bGx5XG4gKiBvdXRzaWRlIHRoZSB2aXNpYmxlIHdpbmRvdyBhcmUgZHJvcHBlZDsgc2VnbWVudHMgY3Jvc3NpbmcgdGhlIGVkZ2UgYXJlXG4gKiBjbGlwcGVkIHRvIFswJSwgMTAwJV0gb2YgdGhlIHZpc2libGUgYmFyLlxuICovXG5mdW5jdGlvbiBwcm9qZWN0U2VnbWVudHMoXG4gIHNlZ21lbnRzOiBTZWdtZW50W10sXG4gIHNwYW5TdGFydE1zOiBudW1iZXIsXG4gIHNwYW5EdXJhdGlvbk1zOiBudW1iZXIsXG4gIGdlb21ldHJ5OiBCYXJHZW9tZXRyeVxuKTogVmlzaWJsZVNlZ21lbnRbXSB7XG4gIGNvbnN0IHZpc2libGVEdXJhdGlvbk1zID0gZ2VvbWV0cnkudmlzaWJsZUVuZE1zIC0gZ2VvbWV0cnkudmlzaWJsZVN0YXJ0TXM7XG4gIGlmICh2aXNpYmxlRHVyYXRpb25NcyA8PSAwKSByZXR1cm4gW107XG5cbiAgcmV0dXJuIHNlZ21lbnRzLmZsYXRNYXAoKHNlZykgPT4ge1xuICAgIGNvbnN0IHNlZ1N0YXJ0TXMgPSBzcGFuU3RhcnRNcyArIHNlZy5zdGFydEZyYWN0aW9uICogc3BhbkR1cmF0aW9uTXM7XG4gICAgY29uc3Qgc2VnRW5kTXMgPSBzcGFuU3RhcnRNcyArIHNlZy5lbmRGcmFjdGlvbiAqIHNwYW5EdXJhdGlvbk1zO1xuICAgIGNvbnN0IHN0YXJ0TXMgPSBNYXRoLm1heChzZWdTdGFydE1zLCBnZW9tZXRyeS52aXNpYmxlU3RhcnRNcyk7XG4gICAgY29uc3QgZW5kTXMgPSBNYXRoLm1pbihzZWdFbmRNcywgZ2VvbWV0cnkudmlzaWJsZUVuZE1zKTtcbiAgICBpZiAoZW5kTXMgPD0gc3RhcnRNcykgcmV0dXJuIFtdO1xuXG4gICAgY29uc3Qgd2lkdGhGcmFjID0gKGVuZE1zIC0gc3RhcnRNcykgLyB2aXNpYmxlRHVyYXRpb25NcztcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBzdGF0dXM6IHNlZy5zdGF0dXMsXG4gICAgICAgIGxlZnRQY3Q6XG4gICAgICAgICAgKChzdGFydE1zIC0gZ2VvbWV0cnkudmlzaWJsZVN0YXJ0TXMpIC8gdmlzaWJsZUR1cmF0aW9uTXMpICogMTAwLFxuICAgICAgICB3aWR0aFBjdDogd2lkdGhGcmFjICogMTAwLFxuICAgICAgICBwaXhlbFdpZHRoOiB3aWR0aEZyYWMgKiBnZW9tZXRyeS52aXNpYmxlUGl4ZWxXaWR0aCxcbiAgICAgICAgZnVsbER1cmF0aW9uTXM6IChzZWcuZW5kRnJhY3Rpb24gLSBzZWcuc3RhcnRGcmFjdGlvbikgKiBzcGFuRHVyYXRpb25NcyxcbiAgICAgIH0sXG4gICAgXTtcbiAgfSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU21hbGwgcmVuZGVyIGhlbHBlcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogRXN0aW1hdGVkIHJlbmRlcmVkIHdpZHRoIG9mIGEgMTBweC1tb25vIGR1cmF0aW9uIGxhYmVsICg2cHgvZ2x5cGggKyBwYWRkaW5nKS4gKi9cbmZ1bmN0aW9uIGVzdGltYXRlTGFiZWxXaWR0aFB4KGxhYmVsOiBzdHJpbmcpOiBudW1iZXIge1xuICByZXR1cm4gbGFiZWwubGVuZ3RoICogNiArIDEyO1xufVxuXG5mdW5jdGlvbiBEdXJhdGlvbkxhYmVsKHtcbiAgbGFiZWwsXG4gIGNsYXNzTmFtZSxcbn06IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufSk6IFJlYWN0Tm9kZSB7XG4gIHJldHVybiAoXG4gICAgPHNwYW5cbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIGluc2V0LTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCBvdmVyZmxvdy1oaWRkZW4gcHgtMSB0ZXh0LVsxMHB4XSBmb250LW1vbm8gZm9udC1tZWRpdW0gbGVhZGluZy1ub25lIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtbGVmdCB0ZXh0LWdyYXktMTAwMCB0YWJ1bGFyLW51bXMgb3BhY2l0eS0wIGdyb3VwLWhvdmVyL3RpbWVsaW5lLXJvdzpvcGFjaXR5LTEwMCcsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICA+XG4gICAgICB7bGFiZWx9XG4gICAgPC9zcGFuPlxuICApO1xufVxuXG5mdW5jdGlvbiBCb3VuZGFyeUFycm93KHtcbiAgZGlyZWN0aW9uLFxufToge1xuICBkaXJlY3Rpb246ICdsZWZ0JyB8ICdyaWdodCc7XG59KTogUmVhY3ROb2RlIHtcbiAgY29uc3QgSWNvbiA9IGRpcmVjdGlvbiA9PT0gJ3JpZ2h0JyA/IEFycm93UmlnaHQgOiBBcnJvd0xlZnQ7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtNiB3LTYgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtWzAuMjVyZW1dXCI+XG4gICAgICA8SWNvbiBjbGFzc05hbWU9XCJzaXplLTMgdGV4dC1ncmF5LTkwMFwiIC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFBsYWluQmFyKHtcbiAgY2xhc3NOYW1lLFxuICBsYWJlbCxcbn06IHtcbiAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmcgfCBudWxsO1xufSk6IFJlYWN0Tm9kZSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ3JlbGF0aXZlIGgtNiB3LWZ1bGwgbWluLXctMSByb3VuZGVkLVswLjI1cmVtXSBib3JkZXInLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgPlxuICAgICAge2xhYmVsID8gPER1cmF0aW9uTGFiZWwgbGFiZWw9e2xhYmVsfSAvPiA6IG51bGx9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIExlYWRJbkNvbm5lY3Rvcih7XG4gIGxlZnRQY3QsXG4gIHdpZHRoUGN0LFxuICBsYWJlbCxcbn06IHtcbiAgbGVmdFBjdDogbnVtYmVyO1xuICB3aWR0aFBjdDogbnVtYmVyO1xuICBsYWJlbDogc3RyaW5nIHwgbnVsbDtcbn0pOiBSZWFjdE5vZGUge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHRvcC0xLzIgaC02IC10cmFuc2xhdGUteS0xLzJcIlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgbGVmdDogYGNhbGMoJHtsZWZ0UGN0fSUgKyAwLjVweClgLFxuICAgICAgICB3aWR0aDogYGNhbGMoJHt3aWR0aFBjdH0lIC0gMXB4KWAsXG4gICAgICB9fVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgbGVmdC0wIHRvcC0xLzIgaC00IHctcHggLXRyYW5zbGF0ZS15LTEvMiBiZy1ncmF5LTUwMFwiIC8+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LXgtMCB0b3AtMS8yIGgtcHggLXRyYW5zbGF0ZS15LTEvMiBiZy1ncmF5LTUwMFwiIC8+XG4gICAgICB7bGFiZWwgPyA8RHVyYXRpb25MYWJlbCBsYWJlbD17bGFiZWx9IC8+IDogbnVsbH1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gU2VnbWVudEJhcih7XG4gIHNlZ21lbnRzLFxuICBzaG93TGFiZWxzID0gdHJ1ZSxcbn06IHtcbiAgc2VnbWVudHM6IFZpc2libGVTZWdtZW50W107XG4gIC8qKlxuICAgKiBXaGVuIGZhbHNlLCBzZWdtZW50IGR1cmF0aW9uIGxhYmVscyBhcmUgc3VwcHJlc3NlZC4gVXNlZCB3aGVuIGEgc2VwYXJhdGVcbiAgICogdG9wIGxheWVyIChlLmcuIHRoZSByZXN1bXB0aW9uLW1hcmtlciBkdXJhdGlvbiBvdmVybGF5KSByZW5kZXJzIHRoZSBsYWJlbFxuICAgKiBhYm92ZSB0aGUgbWFya2VycyBpbnN0ZWFkLCBzbyB3ZSBkb24ndCBkcmF3IGl0IHR3aWNlLlxuICAgKi9cbiAgc2hvd0xhYmVscz86IGJvb2xlYW47XG59KTogUmVhY3ROb2RlIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIGgtNiB3LWZ1bGxcIj5cbiAgICAgIHtzZWdtZW50cy5tYXAoKHNlZywgaSkgPT4ge1xuICAgICAgICBpZiAoc2VnLnN0YXR1cyA9PT0gJ3F1ZXVlZCcpIHtcbiAgICAgICAgICBjb25zdCBsZWFkSW5MYWJlbCA9IGZvcm1hdER1cmF0aW9uUHJlY2lzZShzZWcuZnVsbER1cmF0aW9uTXMpO1xuICAgICAgICAgIGNvbnN0IHNob3dMZWFkSW5MYWJlbCA9XG4gICAgICAgICAgICBzaG93TGFiZWxzICYmXG4gICAgICAgICAgICBzZWcucGl4ZWxXaWR0aCA+PSBNYXRoLm1heCg0MCwgZXN0aW1hdGVMYWJlbFdpZHRoUHgobGVhZEluTGFiZWwpKTtcbiAgICAgICAgICBjb25zdCBpc0Z1bGxXaWR0aFF1ZXVlZCA9IHNlZ21lbnRzLmxlbmd0aCA9PT0gMTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEZyYWdtZW50IGtleT17aX0+XG4gICAgICAgICAgICAgIDxMZWFkSW5Db25uZWN0b3JcbiAgICAgICAgICAgICAgICBsZWZ0UGN0PXtzZWcubGVmdFBjdH1cbiAgICAgICAgICAgICAgICB3aWR0aFBjdD17c2VnLndpZHRoUGN0fVxuICAgICAgICAgICAgICAgIGxhYmVsPXtzaG93TGVhZEluTGFiZWwgPyBsZWFkSW5MYWJlbCA6IG51bGx9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIHtpc0Z1bGxXaWR0aFF1ZXVlZCA/IChcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSB0b3AtMS8yIGgtNCB3LXB4IC10cmFuc2xhdGUteS0xLzIgYmctZ3JheS01MDBcIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogYGNhbGMoJHtzZWcubGVmdFBjdCArIHNlZy53aWR0aFBjdH0lIC0gMS41cHgpYCxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYWJlbCA9IGZvcm1hdER1cmF0aW9uUHJlY2lzZShzZWcuZnVsbER1cmF0aW9uTXMpO1xuICAgICAgICAvLyBPbmx5IHJlbmRlciB0aGUgbGFiZWwgd2hlbiB0aGVyZSdzIGVub3VnaCByb29tIGZvciBpdCB3aXRob3V0IGNsaXBwaW5nLlxuICAgICAgICBjb25zdCBzaG93TGFiZWwgPVxuICAgICAgICAgIHNob3dMYWJlbHMgJiZcbiAgICAgICAgICBzZWcucGl4ZWxXaWR0aCA+PSBNYXRoLm1heCg0MCwgZXN0aW1hdGVMYWJlbFdpZHRoUHgobGFiZWwpKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGtleT17aX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICdhYnNvbHV0ZSBoLWZ1bGwgbWluLXctcHggb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtWzAuMjVyZW1dJyxcbiAgICAgICAgICAgICAgU0VHTUVOVF9DTEFTU0VTW3NlZy5zdGF0dXNdXG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgLy8gMXB4IGdhcCBiZXR3ZWVuIGFkamFjZW50IHNlZ21lbnRzLCBkaXN0cmlidXRlZCBlcXVhbGx5LlxuICAgICAgICAgICAgICBsZWZ0OiBgY2FsYygke3NlZy5sZWZ0UGN0fSUgKyAwLjVweClgLFxuICAgICAgICAgICAgICB3aWR0aDogYGNhbGMoJHtzZWcud2lkdGhQY3R9JSAtIDFweClgLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7U1RSSVBFRF9TRUdNRU5UX1NUQVRVU0VTLmhhcyhzZWcuc3RhdHVzKSA/IChcbiAgICAgICAgICAgICAgPEFuaW1hdGVkU3RyaXBlcyBzdGF0dXM9e3NlZy5zdGF0dXN9IC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIHtzaG93TGFiZWwgPyA8RHVyYXRpb25MYWJlbCBsYWJlbD17bGFiZWx9IC8+IDogbnVsbH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICAgIH0pfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRpbWVsaW5lQmFyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgVGltZWxpbmVCYXIgPSBtZW1vKGZ1bmN0aW9uIFRpbWVsaW5lQmFyKHtcbiAgc3BhbixcbiAgdmlld1N0YXJ0LFxuICB2aWV3RHVyYXRpb24sXG4gIGNvbnRhaW5lcldpZHRoLFxuICBpc1NlbGVjdGVkLFxuICBpc0RpbW1lZCxcbiAgb25TZWxlY3QsXG4gIG9uUmV2ZWFsVGltZSxcbn06IHtcbiAgc3BhbjogU3BhbjtcbiAgdmlld1N0YXJ0OiBudW1iZXI7XG4gIHZpZXdEdXJhdGlvbjogbnVtYmVyO1xuICBjb250YWluZXJXaWR0aDogbnVtYmVyO1xuICBpc1NlbGVjdGVkOiBib29sZWFuO1xuICBpc0RpbW1lZD86IGJvb2xlYW47XG4gIG9uU2VsZWN0OiAoc3BhbklkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uUmV2ZWFsVGltZT86ICh0aW1lTXM6IG51bWJlcikgPT4gdm9pZDtcbn0pOiBSZWFjdE5vZGUge1xuICBjb25zdCBzdGFydE1zID0gZ2V0SGlnaFJlc0luTXMoc3Bhbi5zdGFydFRpbWUpO1xuICBjb25zdCBlbmRNcyA9IGdldEhpZ2hSZXNJbk1zKHNwYW4uZW5kVGltZSk7XG4gIGNvbnN0IHRvdGFsRHVyYXRpb25NcyA9IGdldFNwYW5EdXJhdGlvbk1zKHNwYW4pO1xuXG4gIGNvbnN0IGdlb21ldHJ5ID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgY29tcHV0ZUJhckdlb21ldHJ5KFxuICAgICAgICBzdGFydE1zLFxuICAgICAgICBlbmRNcyxcbiAgICAgICAgdmlld1N0YXJ0LFxuICAgICAgICB2aWV3U3RhcnQgKyB2aWV3RHVyYXRpb24sXG4gICAgICAgIGNvbnRhaW5lcldpZHRoXG4gICAgICApLFxuICAgIFtzdGFydE1zLCBlbmRNcywgdmlld1N0YXJ0LCB2aWV3RHVyYXRpb24sIGNvbnRhaW5lcldpZHRoXVxuICApO1xuXG4gIGNvbnN0IGJhc2VTZWdtZW50cyA9IHVzZU1lbW8oKCkgPT4gY29tcHV0ZVNwYW5TZWdtZW50cyhzcGFuKSwgW3NwYW5dKTtcbiAgY29uc3Qgc2VnbWVudHMgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBnZW9tZXRyeS5tb2RlLmtpbmQgPT09ICdmdWxsJ1xuICAgICAgICA/IHByb2plY3RTZWdtZW50cyhiYXNlU2VnbWVudHMsIHN0YXJ0TXMsIHRvdGFsRHVyYXRpb25NcywgZ2VvbWV0cnkpXG4gICAgICAgIDogW10sXG4gICAgW2dlb21ldHJ5LCBiYXNlU2VnbWVudHMsIHN0YXJ0TXMsIHRvdGFsRHVyYXRpb25Nc11cbiAgKTtcblxuICBjb25zdCBiYXNlTWFya2VycyA9IHVzZU1lbW8oKCkgPT4gY29tcHV0ZVNwYW5NYXJrZXJzKHNwYW4pLCBbc3Bhbl0pO1xuICBjb25zdCBtYXJrZXJzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgZ2VvbWV0cnkubW9kZS5raW5kID09PSAnZnVsbCdcbiAgICAgICAgPyBjdWxsQ29sbGlkaW5nTWFya2VycyhcbiAgICAgICAgICAgIHByb2plY3RNYXJrZXJzKFxuICAgICAgICAgICAgICBiYXNlTWFya2VycyxcbiAgICAgICAgICAgICAgZ2VvbWV0cnkudmlzaWJsZVN0YXJ0TXMsXG4gICAgICAgICAgICAgIGdlb21ldHJ5LnZpc2libGVFbmRNc1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGdlb21ldHJ5LnZpc2libGVQaXhlbFdpZHRoXG4gICAgICAgICAgKVxuICAgICAgICA6IFtdLFxuICAgIFtnZW9tZXRyeSwgYmFzZU1hcmtlcnNdXG4gICk7XG5cbiAgLy8gTWFya2VycyB0aGF0IGZhbGwgb3V0c2lkZSB0aGUgdmlzaWJsZSB3aW5kb3cgKHNjcm9sbGVkIG9mZiB3aGlsZSB6b29tZWQgaW4pXG4gIC8vIGFyZSBzdXJmYWNlZCBhcyBlZGdlIGluZGljYXRvcnMgc28gdGhleSBhcmVuJ3Qgc2lsZW50bHkgbG9zdC5cbiAgY29uc3Qgb2Zmc2NyZWVuID0gdXNlTWVtbzxPZmZzY3JlZW5NYXJrZXJzPihcbiAgICAoKSA9PlxuICAgICAgZ2VvbWV0cnkubW9kZS5raW5kID09PSAnZnVsbCdcbiAgICAgICAgPyBjb21wdXRlT2Zmc2NyZWVuTWFya2VycyhcbiAgICAgICAgICAgIGJhc2VNYXJrZXJzLFxuICAgICAgICAgICAgZ2VvbWV0cnkudmlzaWJsZVN0YXJ0TXMsXG4gICAgICAgICAgICBnZW9tZXRyeS52aXNpYmxlRW5kTXNcbiAgICAgICAgICApXG4gICAgICAgIDogeyBsZWZ0OiBudWxsLCByaWdodDogbnVsbCB9LFxuICAgIFtnZW9tZXRyeSwgYmFzZU1hcmtlcnNdXG4gICk7XG5cbiAgLy8gTWFya2VycyAodmlzaWJsZSBvciBvZmYtc2NyZWVuKSBtb3ZlIHRoZSBkdXJhdGlvbiBsYWJlbCBpbnRvIHRoZSBvdmVybGF5LFxuICAvLyBzbyB0aGUgaW4tYmFyIHNlZ21lbnQgbGFiZWwgaXMgc3VwcHJlc3NlZC5cbiAgY29uc3QgaGFzTWFya2VycyA9XG4gICAgbWFya2Vycy5sZW5ndGggPiAwIHx8IG9mZnNjcmVlbi5sZWZ0ICE9PSBudWxsIHx8IG9mZnNjcmVlbi5yaWdodCAhPT0gbnVsbDtcblxuICBjb25zdCBpc0Vycm9yZWQgPSBpc1NwYW5FcnJvcmVkKHNwYW4pO1xuICBjb25zdCBjb2xvcnMgPSBnZXRSZXNvdXJjZUNsYXNzTmFtZXMoc3Bhbi5yZXNvdXJjZSk7XG4gIGNvbnN0IGZhbGxiYWNrQ2xhc3NOYW1lID0gaXNFcnJvcmVkXG4gICAgPyAoY29sb3JzLmVycm9yQ2xhc3NOYW1lID8/ICdib3JkZXItcmVkLTUwMCBiZy1yZWQtMjAwJylcbiAgICA6IGNvbG9ycy5jbGFzc05hbWU7XG5cbiAgY29uc3QgdG90YWxMYWJlbCA9IGZvcm1hdER1cmF0aW9uUHJlY2lzZSh0b3RhbER1cmF0aW9uTXMpO1xuICBjb25zdCBzaG93VG90YWxMYWJlbCA9XG4gICAgZ2VvbWV0cnkudmlzaWJsZVBpeGVsV2lkdGggPj1cbiAgICBNYXRoLm1heCg0MCwgZXN0aW1hdGVMYWJlbFdpZHRoUHgodG90YWxMYWJlbCkpO1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIG9uU2VsZWN0KHNwYW4uc3BhbklkKTtcbiAgfSwgW29uU2VsZWN0LCBzcGFuLnNwYW5JZF0pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcm9sZT1cInRyZWVpdGVtXCJcbiAgICAgIGFyaWEtc2VsZWN0ZWQ9e2lzU2VsZWN0ZWR9XG4gICAgICBhcmlhLWV4cGFuZGVkPXtpc1NlbGVjdGVkfVxuICAgICAgYXJpYS1sZXZlbD17MX1cbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdncm91cC90aW1lbGluZS1yb3cgaC0xMCByZWxhdGl2ZSBmbGV4IGl0ZW1zLWNlbnRlciBob3ZlcjpiZy1ncmF5LTEwMCBhcmlhLXNlbGVjdGVkOmJnLWdyYXktMTAwIGFyaWEtc2VsZWN0ZWQ6aG92ZXI6YmctZ3JheS0yMDAgdHJhbnNpdGlvbi1vcGFjaXR5JyxcbiAgICAgICAgaXNEaW1tZWQgJiYgJ29wYWNpdHktMzUnXG4gICAgICApfVxuICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2t9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC14LTQgaW5zZXQteS0wXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSB0b3AtMS8yIGgtNiAtdHJhbnNsYXRlLXktMS8yIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLVswLjI1cmVtXVwiXG4gICAgICAgICAgc3R5bGU9e2dldEJhclBvc2l0aW9uU3R5bGUoZ2VvbWV0cnkpfVxuICAgICAgICA+XG4gICAgICAgICAge2dlb21ldHJ5Lm1vZGUua2luZCA9PT0gJ2Fycm93JyA/IChcbiAgICAgICAgICAgIDxCb3VuZGFyeUFycm93IGRpcmVjdGlvbj17Z2VvbWV0cnkubW9kZS5kaXJlY3Rpb259IC8+XG4gICAgICAgICAgKSA6IGdlb21ldHJ5Lm1vZGUua2luZCA9PT0gJ3RpbnknID8gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKCdoLTYgcm91bmRlZC1bMC4yNXJlbV0gYm9yZGVyJywgZmFsbGJhY2tDbGFzc05hbWUpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogc2VnbWVudHMubGVuZ3RoID4gMCA/IChcbiAgICAgICAgICAgIDxTZWdtZW50QmFyIHNlZ21lbnRzPXtzZWdtZW50c30gc2hvd0xhYmVscz17IWhhc01hcmtlcnN9IC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxQbGFpbkJhclxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2ZhbGxiYWNrQ2xhc3NOYW1lfVxuICAgICAgICAgICAgICBsYWJlbD17c2hvd1RvdGFsTGFiZWwgPyB0b3RhbExhYmVsIDogbnVsbH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHsvKiBPdmVybGF5IChub3QgY2xpcHBlZCk6IHRpY2tzLCBvZmYtc2NyZWVuIGluZGljYXRvcnMsIHRoZW4gdGhlIGR1cmF0aW9uIGxhYmVsIG9uIHRvcC4gKi99XG4gICAgICAgIHtoYXNNYXJrZXJzID8gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInBvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgdG9wLTEvMiBoLTYgLXRyYW5zbGF0ZS15LTEvMlwiXG4gICAgICAgICAgICBzdHlsZT17Z2V0QmFyUG9zaXRpb25TdHlsZShnZW9tZXRyeSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge21hcmtlcnMubGVuZ3RoID4gMCA/IDxNYXJrZXJMYXllciBtYXJrZXJzPXttYXJrZXJzfSAvPiA6IG51bGx9XG4gICAgICAgICAgICB7b2Zmc2NyZWVuLmxlZnQgPyAoXG4gICAgICAgICAgICAgIDxPZmZzY3JlZW5NYXJrZXJJbmRpY2F0b3JcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb249XCJsZWZ0XCJcbiAgICAgICAgICAgICAgICBjb3VudD17b2Zmc2NyZWVuLmxlZnQuY291bnR9XG4gICAgICAgICAgICAgICAgdGFyZ2V0TXM9e29mZnNjcmVlbi5sZWZ0Lm5lYXJlc3RNc31cbiAgICAgICAgICAgICAgICBvblJldmVhbD17b25SZXZlYWxUaW1lfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICB7b2Zmc2NyZWVuLnJpZ2h0ID8gKFxuICAgICAgICAgICAgICA8T2Zmc2NyZWVuTWFya2VySW5kaWNhdG9yXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uPVwicmlnaHRcIlxuICAgICAgICAgICAgICAgIGNvdW50PXtvZmZzY3JlZW4ucmlnaHQuY291bnR9XG4gICAgICAgICAgICAgICAgdGFyZ2V0TXM9e29mZnNjcmVlbi5yaWdodC5uZWFyZXN0TXN9XG4gICAgICAgICAgICAgICAgb25SZXZlYWw9e29uUmV2ZWFsVGltZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAge3Nob3dUb3RhbExhYmVsID8gKFxuICAgICAgICAgICAgICA8RHVyYXRpb25MYWJlbFxuICAgICAgICAgICAgICAgIGxhYmVsPXt0b3RhbExhYmVsfVxuICAgICAgICAgICAgICAgIC8vIFNoaWZ0IGNsZWFyIG9mIHRoZSBsZWZ0IGVkZ2UgaW5kaWNhdG9yIHNvIGl0IGlzbid0IGNvdmVyZWQuXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtvZmZzY3JlZW4ubGVmdCA/ICdwbC0xMCcgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn0pO1xuXG5leHBvcnQgeyBUaW1lbGluZUJhciB9O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIERlbHRhTWVhc3VyZUxpbmUgKEFsdC1rZXkgbWVhc3VyZW1lbnQgb3ZlcmxheXM6IHRoZSBzZWxlY3RlZCDihpQgaG92ZXJlZFxuLy8gbWVhc3VyZW1lbnQsIGFuZCB0aGUgYW1iaWVudCBjb25zZWN1dGl2ZS1nYXAgaW5kaWNhdG9ycyBzaG93biB3aXRob3V0IGFcbi8vIHNlbGVjdGlvbilcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBIb3Jpem9udGFsIGRpc3RhbmNlIGJldHdlZW4gdGhlIGFuY2hvciBiYXIncyBtZWFzdXJlZCBlZGdlIGFuZCB0aGUgdmVydGljYWxcbi8vIGd1aWRlOyBhbHNvIHRoZSB3aWR0aCBvZiB0aGUgY29ubmVjdG9yIHN0dWIgYnJpZGdpbmcgdGhlIHR3by5cbmNvbnN0IE1FQVNVUkVfR1VJREVfT1VUU0VUX1BYID0gNDtcblxuY29uc3QgRGVsdGFNZWFzdXJlTGluZSA9IG1lbW8oZnVuY3Rpb24gRGVsdGFNZWFzdXJlTGluZSh7XG4gIGRlbHRhLFxuICBhbmNob3JSb3dJbmRleCxcbiAgaG92ZXJlZFJvd0luZGV4LFxuICB0aW1lbGluZVdpZHRoLFxufToge1xuICBkZWx0YTogU3BhbkRlbHRhO1xuICBhbmNob3JSb3dJbmRleDogbnVtYmVyO1xuICBob3ZlcmVkUm93SW5kZXg6IG51bWJlcjtcbiAgdGltZWxpbmVXaWR0aDogbnVtYmVyO1xufSkge1xuICAvLyBCb3RoIGVuZHMgb2YgdGhlIG1lYXN1cmVtZW50IGFsaWduIHdpdGggdGhlIHZlcnRpY2FsIG1pZGRsZSBvZiB0aGUgYmFyc1xuICAvLyAoYmFycyBhcmUgY2VudGVyZWQgaW4gdGhlaXIgcm93cywgc28gYmFyIGNlbnRlciA9PSByb3cgY2VudGVyKS5cbiAgY29uc3QgYW5jaG9yQ2VudGVyWSA9IGFuY2hvclJvd0luZGV4ICogUk9XX0hFSUdIVF9QWCArIFJPV19IRUlHSFRfUFggLyAyO1xuICBjb25zdCBsaW5lWSA9IGhvdmVyZWRSb3dJbmRleCAqIFJPV19IRUlHSFRfUFggKyBST1dfSEVJR0hUX1BYIC8gMjtcblxuICAvLyBHdWlkZSBjb25uZWN0aW5nIHRoZSBtaWRkbGUgb2YgdGhlIGFuY2hvciBiYXIgZG93bi91cCB0byB0aGUgbGluZSwgc29cbiAgLy8gdGhlIG1lYXN1cmVtZW50J3Mgb3JpZ2luIHN0YXlzIGxlZ2libGUgd2hlbiB0aGUgcm93cyBhcmUgZmFyIGFwYXJ0LlxuICAvLyBJdCBzaXRzIGp1c3Qgb3V0c2lkZSB0aGUgYW5jaG9yIGJhcidzIG1lYXN1cmVkIGVkZ2UgKHNvIGl0IGRvZXNuJ3QgYmxlbmRcbiAgLy8gaW50byB0aGUgYmFyJ3MgYm9yZGVyKSwgam9pbmVkIHRvIHRoZSBiYXIgYnkgYSBzaG9ydCBob3Jpem9udGFsIHN0dWIuIFRoZVxuICAvLyBsaW5lIHJ1bnMgZnJvbSB0aGUgZWxib3cgY29ybmVyICh0aGUgZ3VpZGUncyB4KSB0byB0aGUgaG92ZXJlZCBzcGFuJ3NcbiAgLy8gbWVhc3VyZWQgZWRnZSwgcHVsbGVkIHNob3J0IG9mIHRoZSBlZGdlIGFycm93IHdoZW4gdGhlIGhvdmVyZWQgc3BhbiBpc1xuICAvLyBmdWxseSBvZmYtc2NyZWVuLlxuICBjb25zdCBndWlkZVRvcCA9IE1hdGgubWluKGFuY2hvckNlbnRlclksIGxpbmVZKTtcbiAgY29uc3QgZ3VpZGVCb3R0b20gPSBNYXRoLm1heChhbmNob3JDZW50ZXJZLCBsaW5lWSk7XG4gIGNvbnN0IGFuY2hvclggPSBkZWx0YS5hbmNob3JGcmFjICogdGltZWxpbmVXaWR0aDtcbiAgY29uc3QgZ3VpZGVYID1cbiAgICBhbmNob3JYICtcbiAgICAoZGVsdGEuYW5jaG9yRWRnZSA9PT0gJ2VuZCdcbiAgICAgID8gTUVBU1VSRV9HVUlERV9PVVRTRVRfUFhcbiAgICAgIDogLU1FQVNVUkVfR1VJREVfT1VUU0VUX1BYKTtcbiAgY29uc3QgYXJyb3dDbGVhcmFuY2UgPVxuICAgIGRlbHRhLmhvdmVyZWRPZmZzY3JlZW4gPT09ICdyaWdodCdcbiAgICAgID8gLShUSU5ZX0JBUl9CT1hfU0laRV9QWCArIDQpXG4gICAgICA6IGRlbHRhLmhvdmVyZWRPZmZzY3JlZW4gPT09ICdsZWZ0J1xuICAgICAgICA/IFRJTllfQkFSX0JPWF9TSVpFX1BYICsgNFxuICAgICAgICA6IDA7XG4gIGNvbnN0IGhvdmVyZWRYID0gZGVsdGEuaG92ZXJlZEZyYWMgKiB0aW1lbGluZVdpZHRoICsgYXJyb3dDbGVhcmFuY2U7XG4gIGNvbnN0IHN0YXJ0WCA9IE1hdGgubWluKGd1aWRlWCwgaG92ZXJlZFgpO1xuICBjb25zdCBlbmRYID0gTWF0aC5tYXgoZ3VpZGVYLCBob3ZlcmVkWCk7XG5cbiAgY29uc3QgbGFiZWwgPSBmb3JtYXREdXJhdGlvblByZWNpc2UoZGVsdGEuZGVsdGFNcyk7XG4gIGNvbnN0IGxhYmVsV2lkdGhQeCA9IGVzdGltYXRlTGFiZWxXaWR0aFB4KGxhYmVsKTtcbiAgLy8gQ2VudGVyIHRoZSBsYWJlbCBvbiB0aGUgbGluZTsgd2hlbiB0aGUgbGluZSBpcyB0b28gc2hvcnQsIHBsYWNlIGl0IGJlc2lkZVxuICAvLyB0aGUgcmlnaHQgZW5kcG9pbnQsIGZsaXBwaW5nIGxlZnQgbmVhciB0aGUgdmlld3BvcnQncyByaWdodCBlZGdlLlxuICBjb25zdCBsYWJlbFBsYWNlbWVudCA9XG4gICAgZW5kWCAtIHN0YXJ0WCA+PSBsYWJlbFdpZHRoUHhcbiAgICAgID8geyBsZWZ0OiAoc3RhcnRYICsgZW5kWCkgLyAyLCB0cmFuc2xhdGU6ICctdHJhbnNsYXRlLXgtMS8yJyB9XG4gICAgICA6IGVuZFggKyA0ICsgbGFiZWxXaWR0aFB4IDw9IHRpbWVsaW5lV2lkdGhcbiAgICAgICAgPyB7IGxlZnQ6IGVuZFggKyA0LCB0cmFuc2xhdGU6ICcnIH1cbiAgICAgICAgOiB7IGxlZnQ6IHN0YXJ0WCAtIDQsIHRyYW5zbGF0ZTogJy10cmFuc2xhdGUteC1mdWxsJyB9O1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaC1weCB3LTEgYmctYW1iZXItODAwXCJcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBsZWZ0OiBNYXRoLm1pbihhbmNob3JYLCBndWlkZVgpLFxuICAgICAgICAgIHRvcDogYW5jaG9yQ2VudGVyWSxcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHctcHggYmctYW1iZXItODAwXCJcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBsZWZ0OiBndWlkZVgsXG4gICAgICAgICAgdG9wOiBndWlkZVRvcCxcbiAgICAgICAgICBoZWlnaHQ6IGd1aWRlQm90dG9tIC0gZ3VpZGVUb3AsXG4gICAgICAgIH19XG4gICAgICAvPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSBoLXB4IGJnLWFtYmVyLTgwMFwiXG4gICAgICAgIHN0eWxlPXt7IGxlZnQ6IHN0YXJ0WCwgd2lkdGg6IE1hdGgubWF4KGVuZFggLSBzdGFydFgsIDEpLCB0b3A6IGxpbmVZIH19XG4gICAgICAvPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAnYWJzb2x1dGUgLXRyYW5zbGF0ZS15LTEvMiBmb250LW1vbm8gdGV4dC1bMTBweF0gZm9udC1tZWRpdW0gbGVhZGluZy1ub25lIHRhYnVsYXItbnVtcyB3aGl0ZXNwYWNlLW5vd3JhcCByb3VuZGVkLXhzIGJnLWJhY2tncm91bmQtMTAwIHB4LTEgcHktMC41IHRleHQtYW1iZXItODAwJyxcbiAgICAgICAgICBsYWJlbFBsYWNlbWVudC50cmFuc2xhdGVcbiAgICAgICAgKX1cbiAgICAgICAgc3R5bGU9e3sgbGVmdDogbGFiZWxQbGFjZW1lbnQubGVmdCwgdG9wOiBsaW5lWSB9fVxuICAgICAgPlxuICAgICAgICB7bGFiZWx9XG4gICAgICA8L3NwYW4+XG4gICAgPC8+XG4gICk7XG59KTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUaW1lbGluZUhlYWRlclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBmdW5jdGlvbiBUaW1lbGluZUhlYWRlcih7XG4gIG1hcmtlcnMsXG4gIGhvdmVySW5mbyxcbn06IHtcbiAgbWFya2VyczogVGltZU1hcmtlcltdO1xuICBob3ZlckluZm8/OiB7IGZyYWN0aW9uOiBudW1iZXI7IGxhYmVsOiBzdHJpbmcgfSB8IG51bGw7XG59KTogUmVhY3ROb2RlIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIGJnLWJhY2tncm91bmQtMTAwIGJvcmRlci1iIGJvcmRlci1ncmF5LWFscGhhLTQwMCBoLTEwIG1pbi1oLTEwIGZsZXggaXRlbXMtZW5kIHB4LTQgcGItMVwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSBoLWZ1bGwgZmxleC0xXCI+XG4gICAgICAgIHttYXJrZXJzLm1hcCgobSkgPT4gKFxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBrZXk9e1N0cmluZyhtLnZhbHVlKX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIGJvdHRvbS0xIHRleHQtbGFiZWwtMTItbW9ubyB0ZXh0LWdyYXktOTAwIHdoaXRlc3BhY2Utbm93cmFwXCJcbiAgICAgICAgICAgIHN0eWxlPXt7IGxlZnQ6IGAke20ucG9zaXRpb24gKiAxMDB9JWAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bS5sYWJlbH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICkpfVxuICAgICAgICB7aG92ZXJJbmZvICYmIChcbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgdG9wLTEgcG9pbnRlci1ldmVudHMtbm9uZSB6LTEwIGZvbnQtbW9ubyB0ZXh0LVsxMXB4XSBsZWFkaW5nLTQgdGV4dC1ncmF5LTEwMDAgd2hpdGVzcGFjZS1ub3dyYXAgYmctYmFja2dyb3VuZC0xMDAgYm9yZGVyIGJvcmRlci1ncmF5LWFscGhhLTQwMCByb3VuZGVkIHB4LTEgLXRyYW5zbGF0ZS14LTEvMlwiXG4gICAgICAgICAgICBzdHlsZT17eyBsZWZ0OiBgJHtob3ZlckluZm8uZnJhY3Rpb24gKiAxMDB9JWAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7aG92ZXJJbmZvLmxhYmVsfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRpbWVsaW5lXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBUaW1lbGluZUhvdmVyIHtcbiAgLyoqIFBvaW50ZXIgeCBhcyBhIGZyYWN0aW9uIG9mIHRoZSB0aW1lbGluZSdzIGNvbnRlbnQgd2lkdGgsIGluIFswLCAxXS4gKi9cbiAgZnJhY3Rpb246IG51bWJlcjtcbiAgLyoqIFJvdyBpbmRleCB1bmRlciB0aGUgcG9pbnRlcjsgbWF5IGJlIHBhc3QgdGhlIGxhc3Qgcm93IChub3QgdmFsaWRhdGVkKS4gKi9cbiAgcm93SW5kZXg6IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRpbWVsaW5lKHtcbiAgc3BhbnMsXG4gIHZpZXdTdGFydCxcbiAgdmlld0VuZCxcbiAgbWFya2VycyxcbiAgc2VsZWN0ZWRJZCxcbiAgc2VhcmNoUmVzdWx0LFxuICBvblNlbGVjdCxcbiAgb25SZXZlYWxUaW1lLFxuICBob3ZlcixcbiAgYWx0SGVsZCA9IGZhbHNlLFxufToge1xuICBzcGFuczogU3BhbltdO1xuICB2aWV3U3RhcnQ6IG51bWJlcjtcbiAgdmlld0VuZDogbnVtYmVyO1xuICBtYXJrZXJzOiBUaW1lTWFya2VyW107XG4gIHNlbGVjdGVkSWQ6IHN0cmluZyB8IG51bGw7XG4gIHNlYXJjaFJlc3VsdDogU3BhblNlYXJjaFJlc3VsdDtcbiAgb25TZWxlY3Q6IChzcGFuSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgb25SZXZlYWxUaW1lPzogKHRpbWVNczogbnVtYmVyKSA9PiB2b2lkO1xuICBob3Zlcj86IFRpbWVsaW5lSG92ZXIgfCBudWxsO1xuICBhbHRIZWxkPzogYm9vbGVhbjtcbn0pOiBSZWFjdE5vZGUge1xuICBjb25zdCBjb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBbY29udGFpbmVyV2lkdGgsIHNldENvbnRhaW5lcldpZHRoXSA9IHVzZVN0YXRlKDApO1xuICBjb25zdCB2aWV3RHVyYXRpb24gPSB2aWV3RW5kIC0gdmlld1N0YXJ0O1xuICBjb25zdCB0aW1lbGluZVdpZHRoID0gTWF0aC5tYXgoMCwgY29udGFpbmVyV2lkdGggLSBUSU1FTElORV9QQURESU5HX1BYICogMik7XG4gIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gdXNlUm93V2luZG93KFxuICAgIGNvbnRhaW5lclJlZixcbiAgICBzcGFucy5sZW5ndGgsXG4gICAgUk9XX0hFSUdIVF9QWFxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZWwgPSBjb250YWluZXJSZWYuY3VycmVudDtcbiAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgY29uc3Qgcm8gPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKFtlbnRyeV0pID0+IHtcbiAgICAgIHNldENvbnRhaW5lcldpZHRoKGVudHJ5LmNvbnRlbnRSZWN0LndpZHRoKTtcbiAgICB9KTtcbiAgICByby5vYnNlcnZlKGVsKTtcbiAgICByZXR1cm4gKCkgPT4gcm8uZGlzY29ubmVjdCgpO1xuICB9LCBbXSk7XG5cbiAgLy8gRWFjaCBjb25zZWN1dGl2ZSBnYXAgcmVuZGVycyBhcyBhIG1lYXN1cmVtZW50IGZyb20gdGhlIGVhcmxpZXIgc3BhbidzIGVuZFxuICAvLyBlZGdlIHRvIHRoZSBuZXh0IHNwYW4ncyBzdGFydCwgaW4gdGhlIHNhbWUgdmlzdWFsIGxhbmd1YWdlIGFzIHRoZVxuICAvLyBzZWxlY3RlZCDihpQgaG92ZXJlZCBtZWFzdXJlbWVudC5cbiAgY29uc3QgZ2FwTWVhc3VyZW1lbnRzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgY29tcHV0ZVNwYW5HYXBzKHNwYW5zLCB2aWV3U3RhcnQsIHZpZXdFbmQpLm1hcCgoZ2FwKSA9PiAoe1xuICAgICAgICBkZWx0YToge1xuICAgICAgICAgIGRlbHRhTXM6IGdhcC5nYXBNcyxcbiAgICAgICAgICBhbmNob3JGcmFjOiBnYXAubGVmdEZyYWMsXG4gICAgICAgICAgaG92ZXJlZEZyYWM6IGdhcC5yaWdodEZyYWMsXG4gICAgICAgICAgYW5jaG9yRWRnZTogJ2VuZCcsXG4gICAgICAgICAgaG92ZXJlZE9mZnNjcmVlbjogbnVsbCxcbiAgICAgICAgfSBzYXRpc2ZpZXMgU3BhbkRlbHRhLFxuICAgICAgICBhbmNob3JSb3dJbmRleDogZ2FwLnJvd0luZGV4LFxuICAgICAgICBob3ZlcmVkUm93SW5kZXg6IGdhcC5yb3dJbmRleCArIDEsXG4gICAgICB9KSksXG4gICAgW3NwYW5zLCB2aWV3U3RhcnQsIHZpZXdFbmRdXG4gICk7XG5cbiAgLy8gV2l0aCBhIHNwYW4gc2VsZWN0ZWQsIEFsdCtob3ZlciBtZWFzdXJlcyBzZWxlY3RlZCDihpQgaG92ZXJlZCBpbnN0ZWFkIG9mXG4gIC8vIHNob3dpbmcgdGhlIGFsbC1zaWJsaW5nLWdhcHMgb3ZlcmxheS5cbiAgY29uc3QgYW5jaG9ySW5kZXggPSB1c2VNZW1vKFxuICAgICgpID0+IChzZWxlY3RlZElkID8gc3BhbnMuZmluZEluZGV4KChzKSA9PiBzLnNwYW5JZCA9PT0gc2VsZWN0ZWRJZCkgOiAtMSksXG4gICAgW3NwYW5zLCBzZWxlY3RlZElkXVxuICApO1xuXG4gIGNvbnN0IG1lYXN1cmVtZW50ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFhbHRIZWxkIHx8IGhvdmVyID09IG51bGwgfHwgaG92ZXIucm93SW5kZXggPT09IGFuY2hvckluZGV4KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgYW5jaG9yU3BhbiA9IHNwYW5zW2FuY2hvckluZGV4XTtcbiAgICBjb25zdCBob3ZlcmVkU3BhbiA9IHNwYW5zW2hvdmVyLnJvd0luZGV4XTtcbiAgICBpZiAoIWFuY2hvclNwYW4gfHwgIWhvdmVyZWRTcGFuKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBkZWx0YSA9IGNvbXB1dGVTcGFuRGVsdGEoYW5jaG9yU3BhbiwgaG92ZXJlZFNwYW4sIHZpZXdTdGFydCwgdmlld0VuZCk7XG4gICAgcmV0dXJuIGRlbHRhXG4gICAgICA/IHsgZGVsdGEsIGFuY2hvclJvd0luZGV4OiBhbmNob3JJbmRleCwgaG92ZXJlZFJvd0luZGV4OiBob3Zlci5yb3dJbmRleCB9XG4gICAgICA6IG51bGw7XG4gIH0sIFthbHRIZWxkLCBhbmNob3JJbmRleCwgaG92ZXIsIHNwYW5zLCB2aWV3U3RhcnQsIHZpZXdFbmRdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgaC1mdWxsIG92ZXJmbG93LWhpZGRlblwiXG4gICAgICBzdHlsZT17eyBtaW5IZWlnaHQ6IHNwYW5zLmxlbmd0aCAqIFJPV19IRUlHSFRfUFggfX1cbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGFyaWEtaGlkZGVuXG4gICAgICAgIGNsYXNzTmFtZT1cInBvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgaW5zZXQteC00IGluc2V0LXktMFwiXG4gICAgICA+XG4gICAgICAgIHttYXJrZXJzLm1hcCgobWFya2VyKSA9PlxuICAgICAgICAgIC8vIFNraXAgdGhlIFwiMHNcIiBvcmlnaW4gbWFya2VyIHNpbmNlIHRoZSBsZWZ0IGVkZ2UgYWxyZWFkeSBpbXBsaWVzIGl0LlxuICAgICAgICAgIE1hdGguYWJzKG1hcmtlci52YWx1ZSkgPiAwLjAwMDAwMSA/IChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAga2V5PXtTdHJpbmcobWFya2VyLnZhbHVlKX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgdG9wLTAgYm90dG9tLTAgdy1weCBiZy1ncmF5LWFscGhhLTMwMFwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7IGxlZnQ6IGAke21hcmtlci5wb3NpdGlvbiAqIDEwMH0lYCB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogbnVsbFxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICB7aG92ZXIgIT0gbnVsbCAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicG9pbnRlci1ldmVudHMtbm9uZSBhYnNvbHV0ZSBpbnNldC14LTQgaW5zZXQteS0wIHotMTBcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSB0b3AtMCBib3R0b20tMCB3LXB4IGJnLWdyYXktYWxwaGEtNTAwXCJcbiAgICAgICAgICAgIHN0eWxlPXt7IGxlZnQ6IGAke2hvdmVyLmZyYWN0aW9uICogMTAwfSVgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAgPGRpdiBzdHlsZT17eyB0cmFuc2Zvcm06IGB0cmFuc2xhdGVZKCR7c3RhcnQgKiBST1dfSEVJR0hUX1BYfXB4KWAgfX0+XG4gICAgICAgIHtzcGFucy5zbGljZShzdGFydCwgZW5kKS5tYXAoKHNwYW4pID0+IChcbiAgICAgICAgICA8VGltZWxpbmVCYXJcbiAgICAgICAgICAgIGtleT17c3Bhbi5zcGFuSWR9XG4gICAgICAgICAgICBzcGFuPXtzcGFufVxuICAgICAgICAgICAgdmlld1N0YXJ0PXt2aWV3U3RhcnR9XG4gICAgICAgICAgICB2aWV3RHVyYXRpb249e3ZpZXdEdXJhdGlvbn1cbiAgICAgICAgICAgIGNvbnRhaW5lcldpZHRoPXt0aW1lbGluZVdpZHRofVxuICAgICAgICAgICAgaXNTZWxlY3RlZD17c2VsZWN0ZWRJZCA9PT0gc3Bhbi5zcGFuSWR9XG4gICAgICAgICAgICBpc0RpbW1lZD17aXNTcGFuRGltbWVkQnlTZWFyY2goc3Bhbi5zcGFuSWQsIHNlYXJjaFJlc3VsdCl9XG4gICAgICAgICAgICBvblNlbGVjdD17b25TZWxlY3R9XG4gICAgICAgICAgICBvblJldmVhbFRpbWU9e29uUmV2ZWFsVGltZX1cbiAgICAgICAgICAvPlxuICAgICAgICApKX1cbiAgICAgIDwvZGl2PlxuICAgICAge2FsdEhlbGQgJiYgYW5jaG9ySW5kZXggPCAwICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGFyaWEtaGlkZGVuXG4gICAgICAgICAgY2xhc3NOYW1lPVwicG9pbnRlci1ldmVudHMtbm9uZSBhYnNvbHV0ZSBpbnNldC14LTQgaW5zZXQteS0wXCJcbiAgICAgICAgPlxuICAgICAgICAgIHtnYXBNZWFzdXJlbWVudHMubWFwKChnYXApID0+IChcbiAgICAgICAgICAgIDxEZWx0YU1lYXN1cmVMaW5lXG4gICAgICAgICAgICAgIGtleT17Z2FwLmFuY2hvclJvd0luZGV4fVxuICAgICAgICAgICAgICB7Li4uZ2FwfVxuICAgICAgICAgICAgICB0aW1lbGluZVdpZHRoPXt0aW1lbGluZVdpZHRofVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAge21lYXN1cmVtZW50ICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGFyaWEtaGlkZGVuXG4gICAgICAgICAgY2xhc3NOYW1lPVwicG9pbnRlci1ldmVudHMtbm9uZSBhYnNvbHV0ZSBpbnNldC14LTQgaW5zZXQteS0wIHotMjBcIlxuICAgICAgICA+XG4gICAgICAgICAgPERlbHRhTWVhc3VyZUxpbmUgey4uLm1lYXN1cmVtZW50fSB0aW1lbGluZVdpZHRoPXt0aW1lbGluZVdpZHRofSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXX0=
|
|
@@ -21,7 +21,7 @@ export declare const ROW_HEIGHT_PX = 40;
|
|
|
21
21
|
* Scroll a windowed row into view by index.
|
|
22
22
|
*
|
|
23
23
|
* The list is virtualized (fixed `rowHeight` rows), so an off-screen row has no
|
|
24
|
-
* DOM node to `scrollIntoView
|
|
24
|
+
* DOM node to `scrollIntoView`; its target offset is computed from its index
|
|
25
25
|
* instead. Walks up from `listEl` to the shared scrollable ancestor (the same
|
|
26
26
|
* one `useRowWindow` measures against), only scrolls when the row sits outside
|
|
27
27
|
* the visible area, leaves a one-row `margin` of breathing room past it, and
|
|
@@ -70,7 +70,7 @@ export const ROW_HEIGHT_PX = 40;
|
|
|
70
70
|
* Scroll a windowed row into view by index.
|
|
71
71
|
*
|
|
72
72
|
* The list is virtualized (fixed `rowHeight` rows), so an off-screen row has no
|
|
73
|
-
* DOM node to `scrollIntoView
|
|
73
|
+
* DOM node to `scrollIntoView`; its target offset is computed from its index
|
|
74
74
|
* instead. Walks up from `listEl` to the shared scrollable ancestor (the same
|
|
75
75
|
* one `useRowWindow` measures against), only scrolls when the row sits outside
|
|
76
76
|
* the visible area, leaves a one-row `margin` of breathing room past it, and
|
|
@@ -104,4 +104,4 @@ export function scrollRowIntoView(listEl, index, rowHeight, opts) {
|
|
|
104
104
|
behavior: opts?.behavior,
|
|
105
105
|
});
|
|
106
106
|
}
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXJvdy13aW5kb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy90cmFjZS12aWV3ZXIvY29tcG9uZW50cy91c2Utcm93LXdpbmRvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7QUFFYixPQUFPLEVBQWtCLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFNUQsZ0ZBQWdGO0FBQ2hGLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFDO0FBU2hDLDhFQUE4RTtBQUM5RSxTQUFTLGVBQWUsQ0FBQyxFQUFzQjtJQUM3QyxJQUFJLElBQUksR0FBRyxFQUFFLEVBQUUsYUFBYSxJQUFJLElBQUksQ0FBQztJQUNyQyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ1osTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ25ELElBQUksU0FBUyxLQUFLLE1BQU0sSUFBSSxTQUFTLEtBQUssUUFBUTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ2hFLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQzFCLEdBQWtDLEVBQ2xDLFFBQWdCLEVBQ2hCLFNBQWlCLEVBQ2pCLFFBQVEsR0FBRyxFQUFFO0lBRWIsdUVBQXVFO0lBQ3ZFLDhEQUE4RDtJQUM5RCxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBWSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELEtBQUssRUFBRSxDQUFDO1FBQ1IsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLG9CQUFvQixDQUFDO0tBQzlDLENBQUMsQ0FBQyxDQUFDO0lBRUosU0FBUyxDQUFDLEdBQUcs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LEVBQUUsQ0FBQyxHQUFHO1FBQ2xDLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEdBQUc7UUFDcEMsUUFBUSxDQUFDLFNBQVMsQ0FBQztJQUVyQixNQUFNLE1BQU0sR0FBRyxVQUFVLEdBQUcsS0FBSyxHQUFHLFNBQVMsQ0FBQztJQUM5QyxNQUFNLFNBQVMsR0FBRyxNQUFNLEdBQUcsU0FBUyxDQUFDO0lBQ3JDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7SUFDbkMsTUFBTSxVQUFVLEdBQUcsT0FBTyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUM7SUFFbkQsSUFBSSxHQUFHLEdBQWtCLElBQUksQ0FBQztJQUM5QixJQUFJLE1BQU0sR0FBRyxPQUFPLEVBQUUsQ0FBQztRQUNyQixHQUFHLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN4QixDQUFDO1NBQU0sSUFBSSxTQUFTLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDbEMsR0FBRyxHQUFHLFNBQVMsR0FBRyxNQUFNLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztJQUNuRCxDQUFDO0lBQ0QsSUFBSSxHQUFHLEtBQUssSUFBSTtRQUFFLE9BQU87SUFFekIsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO0lBQzFELFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDaEIsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUTtLQUN6QixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyB0eXBlIFJlZk9iamVjdCwgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcblxuLyoqIFJvd3MgcmVuZGVyZWQgb24gdGhlIGZpcnN0IHBhaW50LCBiZWZvcmUgdGhlIGNvbnRhaW5lciBoYXMgYmVlbiBtZWFzdXJlZC4gKi9cbmNvbnN0IElOSVRJQUxfVklTSUJMRV9ST1dTID0gNjA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUm93V2luZG93IHtcbiAgLyoqIEZpcnN0IHZpc2libGUgcm93IGluZGV4IChpbmNsdXNpdmUpLCBhbHJlYWR5IHBhZGRlZCBieSBvdmVyc2Nhbi4gKi9cbiAgc3RhcnQ6IG51bWJlcjtcbiAgLyoqIExhc3QgdmlzaWJsZSByb3cgaW5kZXggKGV4Y2x1c2l2ZSksIGFscmVhZHkgcGFkZGVkIGJ5IG92ZXJzY2FuLiAqL1xuICBlbmQ6IG51bWJlcjtcbn1cblxuLyoqIE5lYXJlc3Qgc2Nyb2xsYWJsZSBhbmNlc3RvciBvZiBgZWxgICh0aGUgc2hhcmVkIGBTcGxpdFBhbmVgIGNvbnRhaW5lcikuICovXG5mdW5jdGlvbiBnZXRTY3JvbGxQYXJlbnQoZWw6IEhUTUxFbGVtZW50IHwgbnVsbCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gIGxldCBub2RlID0gZWw/LnBhcmVudEVsZW1lbnQgPz8gbnVsbDtcbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBjb25zdCBvdmVyZmxvd1kgPSBnZXRDb21wdXRlZFN0eWxlKG5vZGUpLm92ZXJmbG93WTtcbiAgICBpZiAob3ZlcmZsb3dZID09PSAnYXV0bycgfHwgb3ZlcmZsb3dZID09PSAnc2Nyb2xsJykgcmV0dXJuIG5vZGU7XG4gICAgbm9kZSA9IG5vZGUucGFyZW50RWxlbWVudDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBGaXhlZC1oZWlnaHQgd2luZG93aW5nIG92ZXIgYSBzaGFyZWQgc2Nyb2xsIGNvbnRhaW5lci5cbiAqXG4gKiBUaGUgZXZlbnRzIGxpc3QgYW5kIHRpbWVsaW5lIGJvdGggcmVuZGVyIG9uZSBgcm93SGVpZ2h0YC10YWxsIHJvdyBwZXIgc3BhblxuICogYW5kIHNjcm9sbCB0b2dldGhlciBpbnNpZGUgdGhlIHNhbWUgYFNwbGl0UGFuZWAuIEVhY2ggY2FsbGVyIHBhc3NlcyBhIHJlZiB0b1xuICogaXRzIG93biByb290OyB0aGUgaG9vayB3YWxrcyB1cCB0byB0aGUgc2hhcmVkIHNjcm9sbGFibGUgYW5jZXN0b3IsIHNvIHRoZVxuICogc2Nyb2xsIGNvbnRhaW5lciBkb2Vzbid0IGhhdmUgdG8gYmUgdGhyZWFkZWQgdGhyb3VnaCBwcm9wcy4gU2FtZSBzY3JvbGxcbiAqIHBvc2l0aW9uICsgc2FtZSByb3cgaGVpZ2h0IG1lYW5zIGJvdGggcGFuZXMgd2luZG93IHRvIHRoZSBzYW1lIHJhbmdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUm93V2luZG93KFxuICByZWY6IFJlZk9iamVjdDxIVE1MRWxlbWVudCB8IG51bGw+LFxuICByb3dDb3VudDogbnVtYmVyLFxuICByb3dIZWlnaHQ6IG51bWJlcixcbiAgb3ZlcnNjYW4gPSAxMlxuKTogUm93V2luZG93IHtcbiAgLy8gQm91bmQgdGhlIHByZS1tZWFzdXJlbWVudCB3aW5kb3cgc28gdGhlIGZpcnN0IHBhaW50IG9mIGEgbGFyZ2UgdHJhY2VcbiAgLy8gZG9lc24ndCByZW5kZXIgZXZlcnkgcm93IGJlZm9yZSB0aGUgZWZmZWN0IG5hcnJvd3MgaXQgZG93bi5cbiAgY29uc3QgW3JhbmdlLCBzZXRSYW5nZV0gPSB1c2VTdGF0ZTxSb3dXaW5kb3c+KCgpID0+ICh7XG4gICAgc3RhcnQ6IDAsXG4gICAgZW5kOiBNYXRoLm1pbihyb3dDb3VudCwgSU5JVElBTF9WSVNJQkxFX1JPV1MpLFxuICB9KSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzZWxmID0gcmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgZWwgPSBnZXRTY3JvbGxQYXJlbnQoc2VsZik7XG4gICAgaWYgKCFzZWxmIHx8ICFlbCkgcmV0dXJuO1xuXG4gICAgbGV0IHJhZiA9IDA7XG4gICAgY29uc3QgbWVhc3VyZSA9ICgpID0+IHtcbiAgICAgIHJhZiA9IDA7XG4gICAgICAvLyBPZmZzZXQgb2YgdGhlIGxpc3QncyB0b3Agd2l0aGluIHRoZSBzY3JvbGwgY29udGFpbmVyJ3MgY29udGVudCwgc28gdGhlXG4gICAgICAvLyB3aW5kb3cgc3RheXMgY29ycmVjdCBldmVuIGlmIHRoZSBsaXN0IGlzbid0IGZsdXNoIHdpdGggdGhlIHRvcC5cbiAgICAgIGNvbnN0IG9mZnNldCA9XG4gICAgICAgIHNlbGYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC1cbiAgICAgICAgZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICtcbiAgICAgICAgZWwuc2Nyb2xsVG9wO1xuICAgICAgY29uc3QgdG9wID0gZWwuc2Nyb2xsVG9wIC0gb2Zmc2V0O1xuICAgICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKHRvcCAvIHJvd0hlaWdodCkgLSBvdmVyc2Nhbik7XG4gICAgICBjb25zdCBlbmQgPSBNYXRoLm1pbihcbiAgICAgICAgcm93Q291bnQsXG4gICAgICAgIE1hdGguY2VpbCgodG9wICsgZWwuY2xpZW50SGVpZ2h0KSAvIHJvd0hlaWdodCkgKyBvdmVyc2NhblxuICAgICAgKTtcbiAgICAgIHNldFJhbmdlKChwcmV2KSA9PlxuICAgICAgICBwcmV2LnN0YXJ0ID09PSBzdGFydCAmJiBwcmV2LmVuZCA9PT0gZW5kID8gcHJldiA6IHsgc3RhcnQsIGVuZCB9XG4gICAgICApO1xuICAgIH07XG5cbiAgICBjb25zdCBvblNjcm9sbCA9ICgpID0+IHtcbiAgICAgIGlmICghcmFmKSByYWYgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUobWVhc3VyZSk7XG4gICAgfTtcblxuICAgIG1lYXN1cmUoKTtcbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBvblNjcm9sbCwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgIGNvbnN0IHJvID0gbmV3IFJlc2l6ZU9ic2VydmVyKG1lYXN1cmUpO1xuICAgIHJvLm9ic2VydmUoZWwpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIG9uU2Nyb2xsKTtcbiAgICAgIHJvLmRpc2Nvbm5lY3QoKTtcbiAgICAgIGlmIChyYWYpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7XG4gICAgfTtcbiAgfSwgW3JlZiwgcm93Q291bnQsIHJvd0hlaWdodCwgb3ZlcnNjYW5dKTtcblxuICByZXR1cm4gcmFuZ2U7XG59XG5cbi8qKiBSb3cgaGVpZ2h0IChweCkgc2hhcmVkIGJ5IHRoZSBldmVudHMgbGlzdCBhbmQgdGltZWxpbmUgcm93cyAoYGgtMTBgKS4gKi9cbmV4cG9ydCBjb25zdCBST1dfSEVJR0hUX1BYID0gNDA7XG5cbi8qKlxuICogU2Nyb2xsIGEgd2luZG93ZWQgcm93IGludG8gdmlldyBieSBpbmRleC5cbiAqXG4gKiBUaGUgbGlzdCBpcyB2aXJ0dWFsaXplZCAoZml4ZWQgYHJvd0hlaWdodGAgcm93cyksIHNvIGFuIG9mZi1zY3JlZW4gcm93IGhhcyBub1xuICogRE9NIG5vZGUgdG8gYHNjcm9sbEludG9WaWV3YCDigJQgaXRzIHRhcmdldCBvZmZzZXQgaXMgY29tcHV0ZWQgZnJvbSBpdHMgaW5kZXhcbiAqIGluc3RlYWQuIFdhbGtzIHVwIGZyb20gYGxpc3RFbGAgdG8gdGhlIHNoYXJlZCBzY3JvbGxhYmxlIGFuY2VzdG9yICh0aGUgc2FtZVxuICogb25lIGB1c2VSb3dXaW5kb3dgIG1lYXN1cmVzIGFnYWluc3QpLCBvbmx5IHNjcm9sbHMgd2hlbiB0aGUgcm93IHNpdHMgb3V0c2lkZVxuICogdGhlIHZpc2libGUgYXJlYSwgbGVhdmVzIGEgb25lLXJvdyBgbWFyZ2luYCBvZiBicmVhdGhpbmcgcm9vbSBwYXN0IGl0LCBhbmRcbiAqIGNsYW1wcyB0aGUgcmVzdWx0IHRvIGBbMCwgc2Nyb2xsSGVpZ2h0IC0gY2xpZW50SGVpZ2h0XWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxSb3dJbnRvVmlldyhcbiAgbGlzdEVsOiBIVE1MRWxlbWVudCB8IG51bGwsXG4gIGluZGV4OiBudW1iZXIsXG4gIHJvd0hlaWdodDogbnVtYmVyLFxuICBvcHRzPzogeyBtYXJnaW4/OiBudW1iZXI7IGJlaGF2aW9yPzogU2Nyb2xsQmVoYXZpb3IgfVxuKTogdm9pZCB7XG4gIGNvbnN0IHNjcm9sbGVyID0gbGlzdEVsID8gZ2V0U2Nyb2xsUGFyZW50KGxpc3RFbCkgOiBudWxsO1xuICBpZiAoIWxpc3RFbCB8fCAhc2Nyb2xsZXIpIHJldHVybjtcblxuICBjb25zdCBtYXJnaW4gPSBvcHRzPy5tYXJnaW4gPz8gcm93SGVpZ2h0O1xuXG4gIC8vIE9mZnNldCBvZiB0aGUgbGlzdCdzIHRvcCB3aXRoaW4gdGhlIHNjcm9sbCBjb250YWluZXIncyBjb250ZW50LlxuICBjb25zdCBsaXN0T2Zmc2V0ID1cbiAgICBsaXN0RWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC1cbiAgICBzY3JvbGxlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgK1xuICAgIHNjcm9sbGVyLnNjcm9sbFRvcDtcblxuICBjb25zdCByb3dUb3AgPSBsaXN0T2Zmc2V0ICsgaW5kZXggKiByb3dIZWlnaHQ7XG4gIGNvbnN0IHJvd0JvdHRvbSA9IHJvd1RvcCArIHJvd0hlaWdodDtcbiAgY29uc3Qgdmlld1RvcCA9IHNjcm9sbGVyLnNjcm9sbFRvcDtcbiAgY29uc3Qgdmlld0JvdHRvbSA9IHZpZXdUb3AgKyBzY3JvbGxlci5jbGllbnRIZWlnaHQ7XG5cbiAgbGV0IHRvcDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIGlmIChyb3dUb3AgPCB2aWV3VG9wKSB7XG4gICAgdG9wID0gcm93VG9wIC0gbWFyZ2luO1xuICB9IGVsc2UgaWYgKHJvd0JvdHRvbSA+IHZpZXdCb3R0b20pIHtcbiAgICB0b3AgPSByb3dCb3R0b20gKyBtYXJnaW4gLSBzY3JvbGxlci5jbGllbnRIZWlnaHQ7XG4gIH1cbiAgaWYgKHRvcCA9PT0gbnVsbCkgcmV0dXJuO1xuXG4gIGNvbnN0IG1heCA9IHNjcm9sbGVyLnNjcm9sbEhlaWdodCAtIHNjcm9sbGVyLmNsaWVudEhlaWdodDtcbiAgc2Nyb2xsZXIuc2Nyb2xsVG8oe1xuICAgIHRvcDogTWF0aC5tYXgoMCwgTWF0aC5taW4odG9wLCBtYXgpKSxcbiAgICBiZWhhdmlvcjogb3B0cz8uYmVoYXZpb3IsXG4gIH0pO1xufVxuIl19
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXJvdy13aW5kb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy90cmFjZS12aWV3ZXIvY29tcG9uZW50cy91c2Utcm93LXdpbmRvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7QUFFYixPQUFPLEVBQWtCLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFNUQsZ0ZBQWdGO0FBQ2hGLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFDO0FBU2hDLDhFQUE4RTtBQUM5RSxTQUFTLGVBQWUsQ0FBQyxFQUFzQjtJQUM3QyxJQUFJLElBQUksR0FBRyxFQUFFLEVBQUUsYUFBYSxJQUFJLElBQUksQ0FBQztJQUNyQyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ1osTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ25ELElBQUksU0FBUyxLQUFLLE1BQU0sSUFBSSxTQUFTLEtBQUssUUFBUTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ2hFLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQzFCLEdBQWtDLEVBQ2xDLFFBQWdCLEVBQ2hCLFNBQWlCLEVBQ2pCLFFBQVEsR0FBRyxFQUFFO0lBRWIsdUVBQXVFO0lBQ3ZFLDhEQUE4RDtJQUM5RCxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBWSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELEtBQUssRUFBRSxDQUFDO1FBQ1IsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLG9CQUFvQixDQUFDO0tBQzlDLENBQUMsQ0FBQyxDQUFDO0lBRUosU0FBUyxDQUFDLEdBQUcs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LEVBQUUsQ0FBQyxHQUFHO1FBQ2xDLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEdBQUc7UUFDcEMsUUFBUSxDQUFDLFNBQVMsQ0FBQztJQUVyQixNQUFNLE1BQU0sR0FBRyxVQUFVLEdBQUcsS0FBSyxHQUFHLFNBQVMsQ0FBQztJQUM5QyxNQUFNLFNBQVMsR0FBRyxNQUFNLEdBQUcsU0FBUyxDQUFDO0lBQ3JDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7SUFDbkMsTUFBTSxVQUFVLEdBQUcsT0FBTyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUM7SUFFbkQsSUFBSSxHQUFHLEdBQWtCLElBQUksQ0FBQztJQUM5QixJQUFJLE1BQU0sR0FBRyxPQUFPLEVBQUUsQ0FBQztRQUNyQixHQUFHLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN4QixDQUFDO1NBQU0sSUFBSSxTQUFTLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDbEMsR0FBRyxHQUFHLFNBQVMsR0FBRyxNQUFNLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztJQUNuRCxDQUFDO0lBQ0QsSUFBSSxHQUFHLEtBQUssSUFBSTtRQUFFLE9BQU87SUFFekIsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO0lBQzFELFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDaEIsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUTtLQUN6QixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyB0eXBlIFJlZk9iamVjdCwgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcblxuLyoqIFJvd3MgcmVuZGVyZWQgb24gdGhlIGZpcnN0IHBhaW50LCBiZWZvcmUgdGhlIGNvbnRhaW5lciBoYXMgYmVlbiBtZWFzdXJlZC4gKi9cbmNvbnN0IElOSVRJQUxfVklTSUJMRV9ST1dTID0gNjA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUm93V2luZG93IHtcbiAgLyoqIEZpcnN0IHZpc2libGUgcm93IGluZGV4IChpbmNsdXNpdmUpLCBhbHJlYWR5IHBhZGRlZCBieSBvdmVyc2Nhbi4gKi9cbiAgc3RhcnQ6IG51bWJlcjtcbiAgLyoqIExhc3QgdmlzaWJsZSByb3cgaW5kZXggKGV4Y2x1c2l2ZSksIGFscmVhZHkgcGFkZGVkIGJ5IG92ZXJzY2FuLiAqL1xuICBlbmQ6IG51bWJlcjtcbn1cblxuLyoqIE5lYXJlc3Qgc2Nyb2xsYWJsZSBhbmNlc3RvciBvZiBgZWxgICh0aGUgc2hhcmVkIGBTcGxpdFBhbmVgIGNvbnRhaW5lcikuICovXG5mdW5jdGlvbiBnZXRTY3JvbGxQYXJlbnQoZWw6IEhUTUxFbGVtZW50IHwgbnVsbCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gIGxldCBub2RlID0gZWw/LnBhcmVudEVsZW1lbnQgPz8gbnVsbDtcbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBjb25zdCBvdmVyZmxvd1kgPSBnZXRDb21wdXRlZFN0eWxlKG5vZGUpLm92ZXJmbG93WTtcbiAgICBpZiAob3ZlcmZsb3dZID09PSAnYXV0bycgfHwgb3ZlcmZsb3dZID09PSAnc2Nyb2xsJykgcmV0dXJuIG5vZGU7XG4gICAgbm9kZSA9IG5vZGUucGFyZW50RWxlbWVudDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBGaXhlZC1oZWlnaHQgd2luZG93aW5nIG92ZXIgYSBzaGFyZWQgc2Nyb2xsIGNvbnRhaW5lci5cbiAqXG4gKiBUaGUgZXZlbnRzIGxpc3QgYW5kIHRpbWVsaW5lIGJvdGggcmVuZGVyIG9uZSBgcm93SGVpZ2h0YC10YWxsIHJvdyBwZXIgc3BhblxuICogYW5kIHNjcm9sbCB0b2dldGhlciBpbnNpZGUgdGhlIHNhbWUgYFNwbGl0UGFuZWAuIEVhY2ggY2FsbGVyIHBhc3NlcyBhIHJlZiB0b1xuICogaXRzIG93biByb290OyB0aGUgaG9vayB3YWxrcyB1cCB0byB0aGUgc2hhcmVkIHNjcm9sbGFibGUgYW5jZXN0b3IsIHNvIHRoZVxuICogc2Nyb2xsIGNvbnRhaW5lciBkb2Vzbid0IGhhdmUgdG8gYmUgdGhyZWFkZWQgdGhyb3VnaCBwcm9wcy4gU2FtZSBzY3JvbGxcbiAqIHBvc2l0aW9uICsgc2FtZSByb3cgaGVpZ2h0IG1lYW5zIGJvdGggcGFuZXMgd2luZG93IHRvIHRoZSBzYW1lIHJhbmdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUm93V2luZG93KFxuICByZWY6IFJlZk9iamVjdDxIVE1MRWxlbWVudCB8IG51bGw+LFxuICByb3dDb3VudDogbnVtYmVyLFxuICByb3dIZWlnaHQ6IG51bWJlcixcbiAgb3ZlcnNjYW4gPSAxMlxuKTogUm93V2luZG93IHtcbiAgLy8gQm91bmQgdGhlIHByZS1tZWFzdXJlbWVudCB3aW5kb3cgc28gdGhlIGZpcnN0IHBhaW50IG9mIGEgbGFyZ2UgdHJhY2VcbiAgLy8gZG9lc24ndCByZW5kZXIgZXZlcnkgcm93IGJlZm9yZSB0aGUgZWZmZWN0IG5hcnJvd3MgaXQgZG93bi5cbiAgY29uc3QgW3JhbmdlLCBzZXRSYW5nZV0gPSB1c2VTdGF0ZTxSb3dXaW5kb3c+KCgpID0+ICh7XG4gICAgc3RhcnQ6IDAsXG4gICAgZW5kOiBNYXRoLm1pbihyb3dDb3VudCwgSU5JVElBTF9WSVNJQkxFX1JPV1MpLFxuICB9KSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzZWxmID0gcmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgZWwgPSBnZXRTY3JvbGxQYXJlbnQoc2VsZik7XG4gICAgaWYgKCFzZWxmIHx8ICFlbCkgcmV0dXJuO1xuXG4gICAgbGV0IHJhZiA9IDA7XG4gICAgY29uc3QgbWVhc3VyZSA9ICgpID0+IHtcbiAgICAgIHJhZiA9IDA7XG4gICAgICAvLyBPZmZzZXQgb2YgdGhlIGxpc3QncyB0b3Agd2l0aGluIHRoZSBzY3JvbGwgY29udGFpbmVyJ3MgY29udGVudCwgc28gdGhlXG4gICAgICAvLyB3aW5kb3cgc3RheXMgY29ycmVjdCBldmVuIGlmIHRoZSBsaXN0IGlzbid0IGZsdXNoIHdpdGggdGhlIHRvcC5cbiAgICAgIGNvbnN0IG9mZnNldCA9XG4gICAgICAgIHNlbGYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC1cbiAgICAgICAgZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICtcbiAgICAgICAgZWwuc2Nyb2xsVG9wO1xuICAgICAgY29uc3QgdG9wID0gZWwuc2Nyb2xsVG9wIC0gb2Zmc2V0O1xuICAgICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKHRvcCAvIHJvd0hlaWdodCkgLSBvdmVyc2Nhbik7XG4gICAgICBjb25zdCBlbmQgPSBNYXRoLm1pbihcbiAgICAgICAgcm93Q291bnQsXG4gICAgICAgIE1hdGguY2VpbCgodG9wICsgZWwuY2xpZW50SGVpZ2h0KSAvIHJvd0hlaWdodCkgKyBvdmVyc2NhblxuICAgICAgKTtcbiAgICAgIHNldFJhbmdlKChwcmV2KSA9PlxuICAgICAgICBwcmV2LnN0YXJ0ID09PSBzdGFydCAmJiBwcmV2LmVuZCA9PT0gZW5kID8gcHJldiA6IHsgc3RhcnQsIGVuZCB9XG4gICAgICApO1xuICAgIH07XG5cbiAgICBjb25zdCBvblNjcm9sbCA9ICgpID0+IHtcbiAgICAgIGlmICghcmFmKSByYWYgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUobWVhc3VyZSk7XG4gICAgfTtcblxuICAgIG1lYXN1cmUoKTtcbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBvblNjcm9sbCwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgIGNvbnN0IHJvID0gbmV3IFJlc2l6ZU9ic2VydmVyKG1lYXN1cmUpO1xuICAgIHJvLm9ic2VydmUoZWwpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIG9uU2Nyb2xsKTtcbiAgICAgIHJvLmRpc2Nvbm5lY3QoKTtcbiAgICAgIGlmIChyYWYpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7XG4gICAgfTtcbiAgfSwgW3JlZiwgcm93Q291bnQsIHJvd0hlaWdodCwgb3ZlcnNjYW5dKTtcblxuICByZXR1cm4gcmFuZ2U7XG59XG5cbi8qKiBSb3cgaGVpZ2h0IChweCkgc2hhcmVkIGJ5IHRoZSBldmVudHMgbGlzdCBhbmQgdGltZWxpbmUgcm93cyAoYGgtMTBgKS4gKi9cbmV4cG9ydCBjb25zdCBST1dfSEVJR0hUX1BYID0gNDA7XG5cbi8qKlxuICogU2Nyb2xsIGEgd2luZG93ZWQgcm93IGludG8gdmlldyBieSBpbmRleC5cbiAqXG4gKiBUaGUgbGlzdCBpcyB2aXJ0dWFsaXplZCAoZml4ZWQgYHJvd0hlaWdodGAgcm93cyksIHNvIGFuIG9mZi1zY3JlZW4gcm93IGhhcyBub1xuICogRE9NIG5vZGUgdG8gYHNjcm9sbEludG9WaWV3YDsgaXRzIHRhcmdldCBvZmZzZXQgaXMgY29tcHV0ZWQgZnJvbSBpdHMgaW5kZXhcbiAqIGluc3RlYWQuIFdhbGtzIHVwIGZyb20gYGxpc3RFbGAgdG8gdGhlIHNoYXJlZCBzY3JvbGxhYmxlIGFuY2VzdG9yICh0aGUgc2FtZVxuICogb25lIGB1c2VSb3dXaW5kb3dgIG1lYXN1cmVzIGFnYWluc3QpLCBvbmx5IHNjcm9sbHMgd2hlbiB0aGUgcm93IHNpdHMgb3V0c2lkZVxuICogdGhlIHZpc2libGUgYXJlYSwgbGVhdmVzIGEgb25lLXJvdyBgbWFyZ2luYCBvZiBicmVhdGhpbmcgcm9vbSBwYXN0IGl0LCBhbmRcbiAqIGNsYW1wcyB0aGUgcmVzdWx0IHRvIGBbMCwgc2Nyb2xsSGVpZ2h0IC0gY2xpZW50SGVpZ2h0XWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxSb3dJbnRvVmlldyhcbiAgbGlzdEVsOiBIVE1MRWxlbWVudCB8IG51bGwsXG4gIGluZGV4OiBudW1iZXIsXG4gIHJvd0hlaWdodDogbnVtYmVyLFxuICBvcHRzPzogeyBtYXJnaW4/OiBudW1iZXI7IGJlaGF2aW9yPzogU2Nyb2xsQmVoYXZpb3IgfVxuKTogdm9pZCB7XG4gIGNvbnN0IHNjcm9sbGVyID0gbGlzdEVsID8gZ2V0U2Nyb2xsUGFyZW50KGxpc3RFbCkgOiBudWxsO1xuICBpZiAoIWxpc3RFbCB8fCAhc2Nyb2xsZXIpIHJldHVybjtcblxuICBjb25zdCBtYXJnaW4gPSBvcHRzPy5tYXJnaW4gPz8gcm93SGVpZ2h0O1xuXG4gIC8vIE9mZnNldCBvZiB0aGUgbGlzdCdzIHRvcCB3aXRoaW4gdGhlIHNjcm9sbCBjb250YWluZXIncyBjb250ZW50LlxuICBjb25zdCBsaXN0T2Zmc2V0ID1cbiAgICBsaXN0RWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC1cbiAgICBzY3JvbGxlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgK1xuICAgIHNjcm9sbGVyLnNjcm9sbFRvcDtcblxuICBjb25zdCByb3dUb3AgPSBsaXN0T2Zmc2V0ICsgaW5kZXggKiByb3dIZWlnaHQ7XG4gIGNvbnN0IHJvd0JvdHRvbSA9IHJvd1RvcCArIHJvd0hlaWdodDtcbiAgY29uc3Qgdmlld1RvcCA9IHNjcm9sbGVyLnNjcm9sbFRvcDtcbiAgY29uc3Qgdmlld0JvdHRvbSA9IHZpZXdUb3AgKyBzY3JvbGxlci5jbGllbnRIZWlnaHQ7XG5cbiAgbGV0IHRvcDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIGlmIChyb3dUb3AgPCB2aWV3VG9wKSB7XG4gICAgdG9wID0gcm93VG9wIC0gbWFyZ2luO1xuICB9IGVsc2UgaWYgKHJvd0JvdHRvbSA+IHZpZXdCb3R0b20pIHtcbiAgICB0b3AgPSByb3dCb3R0b20gKyBtYXJnaW4gLSBzY3JvbGxlci5jbGllbnRIZWlnaHQ7XG4gIH1cbiAgaWYgKHRvcCA9PT0gbnVsbCkgcmV0dXJuO1xuXG4gIGNvbnN0IG1heCA9IHNjcm9sbGVyLnNjcm9sbEhlaWdodCAtIHNjcm9sbGVyLmNsaWVudEhlaWdodDtcbiAgc2Nyb2xsZXIuc2Nyb2xsVG8oe1xuICAgIHRvcDogTWF0aC5tYXgoMCwgTWF0aC5taW4odG9wLCBtYXgpKSxcbiAgICBiZWhhdmlvcjogb3B0cz8uYmVoYXZpb3IsXG4gIH0pO1xufVxuIl19
|