@workflow/web-shared 5.0.0-beta.35 → 5.0.0-beta.36

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.
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { RotateCcw, Search, ZoomIn, ZoomOut } from 'lucide-react';
4
4
  import { useCallback, useDeferredValue, useEffect, useMemo, useRef, useState, } from 'react';
5
5
  import { useLoadMoreOnScroll } from '../../hooks/use-load-more-on-scroll';
@@ -258,14 +258,14 @@ function NewTraceViewerContent({ trace, onLoadMore, hasMore, isLoadingMore, }) {
258
258
  };
259
259
  }, [handleClearActiveSpan]);
260
260
  const timelineRef = useRef(null);
261
- const [hoverFraction, setHoverFraction] = useState(null);
261
+ const [hover, setHover] = useState(null);
262
262
  const hoverInfo = useMemo(() => {
263
- if (hoverFraction == null)
263
+ if (hover == null)
264
264
  return null;
265
- const absTime = viewport.start + hoverFraction * viewDuration;
265
+ const absTime = viewport.start + hover.fraction * viewDuration;
266
266
  const offset = absTime - root.startTime;
267
- return { fraction: hoverFraction, label: formatDurationPrecise(offset) };
268
- }, [hoverFraction, viewport.start, viewDuration, root.startTime]);
267
+ return { fraction: hover.fraction, label: formatDurationPrecise(offset) };
268
+ }, [hover, viewport.start, viewDuration, root.startTime]);
269
269
  const handleTimelineMouseMove = useCallback((e) => {
270
270
  const el = timelineRef.current;
271
271
  if (!el)
@@ -275,10 +275,13 @@ function NewTraceViewerContent({ trace, onLoadMore, hasMore, isLoadingMore, }) {
275
275
  if (contentWidth <= 0)
276
276
  return;
277
277
  const fraction = Math.max(0, Math.min(1, (e.clientX - rect.left - TIMELINE_PADDING_PX) / contentWidth));
278
- setHoverFraction(fraction);
278
+ setHover({
279
+ fraction,
280
+ rowIndex: Math.floor((e.clientY - rect.top) / ROW_HEIGHT_PX),
281
+ });
279
282
  }, []);
280
283
  const handleTimelineMouseLeave = useCallback(() => {
281
- setHoverFraction(null);
284
+ setHover(null);
282
285
  }, []);
283
286
  useEffect(() => {
284
287
  const el = timelineRef.current;
@@ -323,12 +326,12 @@ function NewTraceViewerContent({ trace, onLoadMore, hasMore, isLoadingMore, }) {
323
326
  el.addEventListener('wheel', onWheel, { passive: false });
324
327
  return () => el.removeEventListener('wheel', onWheel);
325
328
  }, [root.duration, setViewport, clampToRoot]);
326
- return (_jsxs("div", { ref: paneRootRef, "data-pane": "pane-root", className: "relative flex w-full h-full max-h-full", children: [_jsxs("div", { id: "trace-parent", className: "flex-1 min-w-0 grid grid-rows-[auto_1fr] h-full min-h-0 overflow-hidden relative bg-background-100", children: [_jsx(Minimap, { spans: trace.spans, root: root, viewport: viewport, minViewportMs: MIN_VIEWPORT_MS, onViewportChange: setViewport, onAnimateTo: animateTo }), _jsxs(SplitPane, { scrollContainerRef: scrollContainerRef, startHeader: _jsxs("div", { className: "bg-background-100 border-b border-gray-alpha-400 h-10 min-h-10 flex items-center pl-4 pr-2 gap-1.5", children: [_jsx(Search, { className: "w-3.5 h-3.5 shrink-0 text-gray-800" }), _jsx("input", { id: "trace-viewer-search", name: "trace-viewer-search", type: "text", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), onKeyDown: (e) => {
329
+ return (_jsxs("div", { ref: paneRootRef, "data-pane": "pane-root", className: "relative flex w-full h-full max-h-full", children: [_jsxs("div", { id: "trace-parent", className: "@container flex-1 min-w-0 grid grid-rows-[auto_1fr] h-full min-h-0 overflow-hidden relative bg-background-100", children: [_jsx(Minimap, { spans: trace.spans, root: root, viewport: viewport, minViewportMs: MIN_VIEWPORT_MS, onViewportChange: setViewport, onAnimateTo: animateTo }), _jsxs(SplitPane, { scrollContainerRef: scrollContainerRef, startHeader: _jsxs("div", { className: "bg-background-100 border-b border-gray-alpha-400 h-10 min-h-10 flex items-center pl-4 pr-2 gap-1.5", children: [_jsx(Search, { className: "w-3.5 h-3.5 shrink-0 text-gray-800" }), _jsx("input", { id: "trace-viewer-search", name: "trace-viewer-search", type: "text", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), onKeyDown: (e) => {
327
330
  if (e.key === 'Escape' && searchQuery) {
328
331
  e.preventDefault();
329
332
  e.stopPropagation();
330
333
  setSearchQuery('');
331
334
  }
332
- }, placeholder: "Search spans...", "aria-label": "Search spans", className: "flex-1 min-w-0 bg-transparent text-sm text-gray-1000 placeholder:text-gray-800 outline-none" }), searchQuery && (_jsx("button", { type: "button", "aria-label": "Clear search", onClick: () => setSearchQuery(''), className: "-mr-2 hidden h-full max-w-full shrink-0 cursor-pointer items-center rounded-r-md border-0 bg-transparent px-2.5 font-inherit text-base text-gray-900 no-underline transition-colors duration-150 ease-in hover:text-gray-1000 focus-visible:-outline-offset-1 focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--ds-focus-color)] min-[961px]:flex", children: _jsx(Kbd, { variant: "outline", size: "search", children: "Esc" }) }))] }), endHeader: _jsx(TimelineHeader, { markers: timeMarkers, hoverInfo: hoverInfo }), children: [_jsxs("div", { className: "block overflow-visible", children: [_jsx(EventList, { spans: trace.spans, activeSpanId: activeSpanId, searchResult: searchResult, onSelectSpan: handleSelectSpan }), _jsx("div", { ref: loadMoreSentinelRef, className: "flex justify-center", children: isLoadingMore ? (_jsxs("div", { className: "flex items-center justify-center gap-2 py-3 text-sm text-gray-800", children: [_jsx(Spinner, { size: 14 }), _jsx("span", { children: "Loading spans\u2026" })] })) : null })] }), _jsxs("div", { ref: timelineRef, id: "trace-timeline", className: "@container block min-h-0 overflow-visible relative", onDoubleClick: resetZoom, onMouseMove: handleTimelineMouseMove, onMouseLeave: handleTimelineMouseLeave, children: [_jsx(Timeline, { spans: trace.spans, viewStart: viewport.start, viewEnd: viewport.end, markers: timeMarkers, selectedId: activeSpanId, searchResult: searchResult, onSelect: handleSelectSpan, onRevealTime: handleRevealTime, hoverFraction: hoverFraction, altHeld: altHeld }), _jsx(TraceShortcutHelper, { hasMultipleSpans: trace.spans.length > 1, reducedMotion: reducedMotion })] })] }), _jsxs("div", { className: "absolute right-3 bottom-3 z-[5] flex items-center border border-gray-alpha-400 rounded-md bg-background-100 shadow-sm overflow-hidden divide-x divide-gray-alpha-400", children: [_jsx(IconButton, { variant: "muted", size: "small", onClick: zoomOut, disabled: isAtMinZoom, "aria-label": "Zoom out", children: _jsx(ZoomOut, { className: "w-4 h-4" }) }), _jsx(IconButton, { variant: "muted", size: "small", onClick: resetZoom, "aria-label": "Reset zoom", children: _jsx(RotateCcw, { className: "w-3.5 h-3.5" }) }), _jsx(IconButton, { variant: "muted", size: "small", onClick: zoomIn, disabled: isAtMaxZoom, "aria-label": "Zoom in", children: _jsx(ZoomIn, { className: "w-4 h-4" }) })] })] }), _jsx(TraceDetailPanel, { containerRef: paneRootRef, onNavigateToSpan: navigateToSpan, onClose: handleClearActiveSpan })] }));
335
+ }, placeholder: "Search spans...", "aria-label": "Search spans", className: "flex-1 min-w-0 bg-transparent text-sm text-gray-1000 placeholder:text-gray-800 outline-none" }), searchQuery && (_jsx("button", { type: "button", "aria-label": "Clear search", onClick: () => setSearchQuery(''), className: "-mr-2 hidden h-full max-w-full shrink-0 cursor-pointer items-center rounded-r-md border-0 bg-transparent px-2.5 font-inherit text-base text-gray-900 no-underline transition-colors duration-150 ease-in hover:text-gray-1000 focus-visible:-outline-offset-1 focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--ds-focus-color)] min-[961px]:flex", children: _jsx(Kbd, { variant: "outline", size: "search", children: "Esc" }) }))] }), endHeader: _jsx(TimelineHeader, { markers: timeMarkers, hoverInfo: hoverInfo }), children: [_jsxs("div", { className: "block overflow-visible", children: [_jsx(EventList, { spans: trace.spans, activeSpanId: activeSpanId, searchResult: searchResult, onSelectSpan: handleSelectSpan }), _jsx("div", { ref: loadMoreSentinelRef, className: "flex justify-center", children: isLoadingMore ? (_jsxs("div", { className: "flex items-center justify-center gap-2 py-3 text-sm text-gray-800", children: [_jsx(Spinner, { size: 14 }), _jsx("span", { children: "Loading spans\u2026" })] })) : null })] }), _jsx("div", { ref: timelineRef, id: "trace-timeline", className: "@container block min-h-0 overflow-visible relative", onDoubleClick: resetZoom, onMouseMove: handleTimelineMouseMove, onMouseLeave: handleTimelineMouseLeave, children: _jsx(Timeline, { spans: trace.spans, viewStart: viewport.start, viewEnd: viewport.end, markers: timeMarkers, selectedId: activeSpanId, searchResult: searchResult, onSelect: handleSelectSpan, onRevealTime: handleRevealTime, hover: hover, altHeld: altHeld }) }), _jsxs(_Fragment, { children: [_jsx(TraceShortcutHelper, { hasMultipleSpans: trace.spans.length > 1, reducedMotion: reducedMotion }), _jsxs("div", { className: "pointer-events-auto flex items-center border border-gray-alpha-400 rounded-md bg-background-100 shadow-sm overflow-hidden divide-x divide-gray-alpha-400", children: [_jsx(IconButton, { variant: "muted", size: "small", onClick: zoomOut, disabled: isAtMinZoom, "aria-label": "Zoom out", children: _jsx(ZoomOut, { className: "w-4 h-4" }) }), _jsx(IconButton, { variant: "muted", size: "small", onClick: resetZoom, "aria-label": "Reset zoom", children: _jsx(RotateCcw, { className: "w-3.5 h-3.5" }) }), _jsx(IconButton, { variant: "muted", size: "small", onClick: zoomIn, disabled: isAtMaxZoom, "aria-label": "Zoom in", children: _jsx(ZoomIn, { className: "w-4 h-4" }) })] })] })] })] }), _jsx(TraceDetailPanel, { containerRef: paneRootRef, onNavigateToSpan: navigateToSpan, onClose: handleClearActiveSpan })] }));
333
336
  }
334
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2Utdmlld2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbmV3LXRyYWNlLXZpZXdlci90cmFjZS12aWV3ZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2xFLE9BQU8sRUFFTCxXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCxPQUFPLEVBQ1AsTUFBTSxFQUNOLFFBQVEsR0FDVCxNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsY0FBYyxHQUNmLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sU0FBUyxNQUFNLHlCQUF5QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixRQUFRLEVBQ1IsY0FBYyxHQUNmLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1B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QWdCLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUN4QyxhQUFhLEVBQUUsYUFBYSxHQUM1QixJQUNFLElBQ0ksRUFDWixlQUFLLFNBQVMsRUFBQyxzS0FBc0ssYUFDbkwsS0FBQyxVQUFVLElBQ1QsT0FBTyxFQUFDLE9BQU8sRUFDZixJQUFJLEVBQUMsT0FBTyxFQUNaLE9BQU8sRUFBRSxPQUFPLEVBQ2hCLFFBQVEsRUFBRSxXQUFXLGdCQUNWLFVBQVUsWUFFckIsS0FBQyxPQUFPLElBQUMsU0FBUyxFQUFDLFNBQVMsR0FBRyxHQUNwQixFQUNiLEtBQUMsVUFBVSxJQUNULE9BQU8sRUFBQyxPQUFPLEVBQ2YsSUFBSSxFQUFDLE9BQU8sRUFDWixPQUFPLEVBQUUsU0FBUyxnQkFDUCxZQUFZLFlBRXZCLEtBQUMsU0FBUyxJQUFDLFNBQVMsRUFBQyxhQUFhLEdBQUcsR0FDMUIsRUFDYixLQUFDLFVBQVUsSUFDVCxPQUFPLEVBQUMsT0FBTyxFQUNmLElBQUksRUFBQyxPQUFPLEVBQ1osT0FBTyxFQUFFLE1BQU0sRUFDZixRQUFRLEVBQUUsV0FBVyxnQkFDVixTQUFTLFlBRXBCLEtBQUMsTUFBTSxJQUFDLFNBQVMsRUFBQyxTQUFTLEdBQUcsR0FDbkIsSUFDVCxJQUNGLEVBRU4sS0FBQyxnQkFBZ0IsSUFDZixZQUFZLEVBQUUsV0FBVyxFQUN6QixnQkFBZ0IsRUFBRSxjQUFjLEVBQ2hDLE9BQU8sRUFBRSxxQkFBcUIsR0FDOUIsSUFDRSxDQUNQLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyBSb3RhdGVDY3csIFNlYXJjaCwgWm9vbUluLCBab29tT3V0IH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB7XG4gIHR5cGUgUmVhY3ROb2RlLFxuICB1c2VDYWxsYmFjayxcbiAgdXNlRGVmZXJyZWRWYWx1ZSxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VMb2FkTW9yZU9uU2Nyb2xsIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlLWxvYWQtbW9yZS1vbi1zY3JvbGwnO1xuaW1wb3J0IHsgdXNlUmVkdWNlZE1vdGlvbiB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZS1yZWR1Y2VkLW1vdGlvbic7XG5pbXBvcnQge1xuICBmb3JtYXREdXJhdGlvblByZWNpc2UsXG4gIGdldEhpZ2hSZXNJbk1zLFxufSBmcm9tICcuLi90cmFjZS12aWV3ZXIvdXRpbC90aW1pbmcnO1xuaW1wb3J0IHsgSWNvbkJ1dHRvbiB9IGZyb20gJy4uL3VpL2ljb24tYnV0dG9uJztcbmltcG9ydCB7IEtiZCB9IGZyb20gJy4uL3VpL2tiZCc7XG5pbXBvcnQgeyBTcGlubmVyIH0gZnJvbSAnLi4vdWkvc3Bpbm5lcic7XG5pbXBvcnQgeyBUb29sdGlwUHJvdmlkZXIgfSBmcm9tICcuLi91aS90b29sdGlwJztcbmltcG9ydCB7IFRyYWNlRGV0YWlsUGFuZWwgfSBmcm9tICcuL2NvbXBvbmVudHMvZGV0YWlsLXBhbmVsJztcbmltcG9ydCBFdmVudExpc3QgZnJvbSAnLi9jb21wb25lbnRzL2V2ZW50LWxpc3QnO1xuaW1wb3J0IHsgTWluaW1hcCB9IGZyb20gJy4vY29tcG9uZW50cy9taW5pbWFwJztcbmltcG9ydCB7IFNwbGl0UGFuZSB9IGZyb20gJy4vY29tcG9uZW50cy9zcGxpdC1wYW5lJztcbmltcG9ydCB7XG4gIFRJTUVMSU5FX1BBRERJTkdfUFgsXG4gIFRpbWVsaW5lLFxuICBUaW1lbGluZUhlYWRlcixcbn0gZnJvbSAnLi9jb21wb25lbnRzL3RpbWVsaW5lJztcbmltcG9ydCB7IFRyYWNlU2hvcnRjdXRIZWxwZXIgfSBmcm9tICcuL2NvbXBvbmVudHMvdHJhY2Utc2hvcnRjdXQtaGVscGVyJztcbmltcG9ydCB7IFJPV19IRUlHSFRfUFgsIHNjcm9sbFJvd0ludG9WaWV3IH0gZnJvbSAnLi9jb21wb25lbnRzL3VzZS1yb3ctd2luZG93JztcbmltcG9ydCB7IEFjdGl2ZVNwYW5Qcm92aWRlciwgdXNlQWN0aXZlU3BhbiB9IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQgeyBzZWFyY2hTcGFucyB9IGZyb20gJy4vc2VhcmNoJztcbmltcG9ydCB0eXBlIHsgVHJhY2VXaXRoTWV0YSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgY2xhbXBWaWV3cG9ydFRvUm9vdCxcbiAgY29tcHV0ZVJvb3RCb3VuZHMsXG4gIGNvbXB1dGVUaW1lTWFya2VycyxcbiAgdHlwZSBWaWV3cG9ydFJhbmdlLFxuICB3aGVlbERlbHRhVG9QaXhlbHMsXG4gIHdoZWVsWm9vbVNjYWxlRmFjdG9yLFxufSBmcm9tICcuL3V0aWxzJztcblxuaW50ZXJmYWNlIE5ld1RyYWNlVmlld2VyUHJvcHMge1xuICB0cmFjZTogVHJhY2VXaXRoTWV0YTtcbiAgb25Mb2FkTW9yZT86ICgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICBoYXNNb3JlPzogYm9vbGVhbjtcbiAgaXNMb2FkaW5nTW9yZT86IGJvb2xlYW47XG59XG5cbmNvbnN0IE1JTl9WSUVXUE9SVF9NUyA9IDAuMDAxO1xuXG5jb25zdCBaT09NX0RFQk9VTkNFX01TID0gMTUwO1xuXG5mdW5jdGlvbiB1c2VBbmltYXRlZFZpZXdwb3J0KGluaXRpYWw6IFZpZXdwb3J0UmFuZ2UpIHtcbiAgY29uc3QgW3ZpZXdwb3J0LCBzZXRWaWV3cG9ydFN0YXRlXSA9IHVzZVN0YXRlPFZpZXdwb3J0UmFuZ2U+KGluaXRpYWwpO1xuICBjb25zdCBhbmltUmVmID0gdXNlUmVmPHtcbiAgICByYWY6IG51bWJlcjtcbiAgICBmcm9tOiBWaWV3cG9ydFJhbmdlO1xuICAgIHRvOiBWaWV3cG9ydFJhbmdlO1xuICAgIHN0YXJ0OiBudW1iZXI7XG4gIH0gfCBudWxsPihudWxsKTtcbiAgY29uc3QgY3VycmVudFJlZiA9IHVzZVJlZihpbml0aWFsKTtcbiAgY3VycmVudFJlZi5jdXJyZW50ID0gdmlld3BvcnQ7XG4gIGNvbnN0IHJlZHVjZWRNb3Rpb24gPSB1c2VSZWR1Y2VkTW90aW9uKCk7XG5cbiAgY29uc3QgY2FuY2VsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChhbmltUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGFuaW1SZWYuY3VycmVudC5yYWYpO1xuICAgICAgYW5pbVJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH0sIFtdKTtcblxuICBjb25zdCBhbmltYXRlVG8gPSB1c2VDYWxsYmFjayhcbiAgICAodGFyZ2V0OiBWaWV3cG9ydFJhbmdlKSA9PiB7XG4gICAgICBjYW5jZWwoKTtcblxuICAgICAgaWYgKHJlZHVjZWRNb3Rpb24pIHtcbiAgICAgICAgY3VycmVudFJlZi5jdXJyZW50ID0gdGFyZ2V0O1xuICAgICAgICBzZXRWaWV3cG9ydFN0YXRlKHRhcmdldCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZnJvbSA9IGN1cnJlbnRSZWYuY3VycmVudDtcbiAgICAgIGNvbnN0IGFuaW0gPSB7IHJhZjogMCwgZnJvbSwgdG86IHRhcmdldCwgc3RhcnQ6IHBlcmZvcm1hbmNlLm5vdygpIH07XG5cbiAgICAgIGNvbnN0IHRpY2sgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHQgPSBNYXRoLm1pbigocGVyZm9ybWFuY2Uubm93KCkgLSBhbmltLnN0YXJ0KSAvIDI0MCwgMSk7XG4gICAgICAgIGNvbnN0IGUgPSB0IDwgMC41ID8gOCAqIHQgKiB0ICogdCAqIHQgOiAxIC0gKC0yICogdCArIDIpICoqIDQgLyAyO1xuICAgICAgICBzZXRWaWV3cG9ydFN0YXRlKHtcbiAgICAgICAgICBzdGFydDogYW5pbS5mcm9tLnN0YXJ0ICsgKGFuaW0udG8uc3RhcnQgLSBhbmltLmZyb20uc3RhcnQpICogZSxcbiAgICAgICAgICBlbmQ6IGFuaW0uZnJvbS5lbmQgKyAoYW5pbS50by5lbmQgLSBhbmltLmZyb20uZW5kKSAqIGUsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodCA8IDEpIGFuaW0ucmFmID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spO1xuICAgICAgICBlbHNlIGFuaW1SZWYuY3VycmVudCA9IG51bGw7XG4gICAgICB9O1xuXG4gICAgICBhbmltUmVmLmN1cnJlbnQgPSBhbmltO1xuICAgICAgYW5pbS5yYWYgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7XG4gICAgfSxcbiAgICBbY2FuY2VsLCByZWR1Y2VkTW90aW9uXVxuICApO1xuXG4gIGNvbnN0IHNldFZpZXdwb3J0ID0gdXNlQ2FsbGJhY2soXG4gICAgKHVwZGF0ZTogVmlld3BvcnRSYW5nZSB8ICgocHJldjogVmlld3BvcnRSYW5nZSkgPT4gVmlld3BvcnRSYW5nZSkpID0+IHtcbiAgICAgIGNhbmNlbCgpO1xuICAgICAgaWYgKHR5cGVvZiB1cGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgc2V0Vmlld3BvcnRTdGF0ZSgocHJldikgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHQgPSB1cGRhdGUocHJldik7XG4gICAgICAgICAgY3VycmVudFJlZi5jdXJyZW50ID0gbmV4dDtcbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyZW50UmVmLmN1cnJlbnQgPSB1cGRhdGU7XG4gICAgICAgIHNldFZpZXdwb3J0U3RhdGUodXBkYXRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtjYW5jZWxdXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IGNhbmNlbCwgW2NhbmNlbF0pO1xuXG4gIHJldHVybiB7IHZpZXdwb3J0LCBzZXRWaWV3cG9ydCwgYW5pbWF0ZVRvIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUm9vdCBjb21wb25lbnRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgZnVuY3Rpb24gTmV3VHJhY2VWaWV3ZXIoe1xuICB0cmFjZSxcbiAgb25Mb2FkTW9yZSxcbiAgaGFzTW9yZSxcbiAgaXNMb2FkaW5nTW9yZSxcbn06IE5ld1RyYWNlVmlld2VyUHJvcHMpOiBSZWFjdE5vZGUge1xuICByZXR1cm4gKFxuICAgIDxUb29sdGlwUHJvdmlkZXIgZGVsYXlEdXJhdGlvbj17MzAwfT5cbiAgICAgIDxBY3RpdmVTcGFuUHJvdmlkZXIgc3BhbnM9e3RyYWNlLnNwYW5zfT5cbiAgICAgICAgPE5ld1RyYWNlVmlld2VyQ29udGVudFxuICAgICAgICAgIHRyYWNlPXt0cmFjZX1cbiAgICAgICAgICBvbkxvYWRNb3JlPXtvbkxvYWRNb3JlfVxuICAgICAgICAgIGhhc01vcmU9e2hhc01vcmV9XG4gICAgICAgICAgaXNMb2FkaW5nTW9yZT17aXNMb2FkaW5nTW9yZX1cbiAgICAgICAgLz5cbiAgICAgIDwvQWN0aXZlU3BhblByb3ZpZGVyPlxuICAgIDwvVG9vbHRpcFByb3ZpZGVyPlxuICApO1xufVxuXG5mdW5jdGlvbiBOZXdUcmFjZVZpZXdlckNvbnRlbnQoe1xuICB0cmFjZSxcbiAgb25Mb2FkTW9yZSxcbiAgaGFzTW9yZSxcbiAgaXNMb2FkaW5nTW9yZSxcbn06IE5ld1RyYWNlVmlld2VyUHJvcHMpOiBSZWFjdE5vZGUge1xuICBjb25zdCB7IGFjdGl2ZVNwYW5JZCwgc2V0QWN0aXZlU3BhbiwgY2xlYXJBY3RpdmVTcGFuIH0gPSB1c2VBY3RpdmVTcGFuKCk7XG5cbiAgY29uc3QgcmVkdWNlZE1vdGlvbiA9IHVzZVJlZHVjZWRNb3Rpb24oKTtcblxuICBjb25zdCBbc2VhcmNoUXVlcnksIHNldFNlYXJjaFF1ZXJ5XSA9IHVzZVN0YXRlKCcnKTtcbiAgY29uc3QgZGVmZXJyZWRTZWFyY2hRdWVyeSA9IHVzZURlZmVycmVkVmFsdWUoc2VhcmNoUXVlcnkpO1xuXG4gIGNvbnN0IHBhbmVSb290UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcblxuICBjb25zdCBzZWFyY2hSZXN1bHQgPSB1c2VNZW1vKFxuICAgICgpID0+IHNlYXJjaFNwYW5zKHRyYWNlLnNwYW5zLCBkZWZlcnJlZFNlYXJjaFF1ZXJ5KSxcbiAgICBbdHJhY2Uuc3BhbnMsIGRlZmVycmVkU2VhcmNoUXVlcnldXG4gICk7XG5cbiAgY29uc3Qgcm9vdCA9IHVzZU1lbW8oKCkgPT4gY29tcHV0ZVJvb3RCb3VuZHModHJhY2Uuc3BhbnMpLCBbdHJhY2Uuc3BhbnNdKTtcblxuICBjb25zdCBzY3JvbGxDb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBsb2FkTW9yZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB2b2lkIG9uTG9hZE1vcmU/LigpO1xuICB9LCBbb25Mb2FkTW9yZV0pO1xuICBjb25zdCBsb2FkTW9yZVNlbnRpbmVsUmVmID0gdXNlTG9hZE1vcmVPblNjcm9sbChsb2FkTW9yZSwge1xuICAgIGhhc01vcmU6IEJvb2xlYW4ob25Mb2FkTW9yZSAmJiBoYXNNb3JlKSxcbiAgICBpc0xvYWRpbmdNb3JlOiBCb29sZWFuKGlzTG9hZGluZ01vcmUpLFxuICAgIHJvb3RSZWY6IHNjcm9sbENvbnRhaW5lclJlZixcbiAgfSk7XG5cbiAgY29uc3QgeyB2aWV3cG9ydCwgc2V0Vmlld3BvcnQsIGFuaW1hdGVUbyB9ID0gdXNlQW5pbWF0ZWRWaWV3cG9ydCh7XG4gICAgc3RhcnQ6IHJvb3Quc3RhcnRUaW1lLFxuICAgIGVuZDogcm9vdC5zdGFydFRpbWUgKyByb290LmR1cmF0aW9uLFxuICB9KTtcblxuICBjb25zdCBwcmV2Um9vdFJlZiA9IHVzZVJlZjxWaWV3cG9ydFJhbmdlPih7XG4gICAgc3RhcnQ6IHJvb3Quc3RhcnRUaW1lLFxuICAgIGVuZDogcm9vdC5zdGFydFRpbWUgKyByb290LmR1cmF0aW9uLFxuICB9KTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHByZXZSb290ID0gcHJldlJvb3RSZWYuY3VycmVudDtcbiAgICBjb25zdCBuZXdTdGFydCA9IHJvb3Quc3RhcnRUaW1lO1xuICAgIGNvbnN0IG5ld0VuZCA9IHJvb3Quc3RhcnRUaW1lICsgcm9vdC5kdXJhdGlvbjtcblxuICAgIHNldFZpZXdwb3J0KChwcmV2KSA9PiB7XG4gICAgICBjb25zdCB3YXNBdEZ1bGxFeHRlbnQgPVxuICAgICAgICBNYXRoLmFicyhwcmV2LnN0YXJ0IC0gcHJldlJvb3Quc3RhcnQpIDwgMC4wMSAmJlxuICAgICAgICBNYXRoLmFicyhwcmV2LmVuZCAtIHByZXZSb290LmVuZCkgPCAwLjAxO1xuXG4gICAgICBpZiAod2FzQXRGdWxsRXh0ZW50KSB7XG4gICAgICAgIHJldHVybiB7IHN0YXJ0OiBuZXdTdGFydCwgZW5kOiBuZXdFbmQgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcmV2O1xuICAgIH0pO1xuXG4gICAgcHJldlJvb3RSZWYuY3VycmVudCA9IHsgc3RhcnQ6IG5ld1N0YXJ0LCBlbmQ6IG5ld0VuZCB9O1xuICB9LCBbcm9vdC5zdGFydFRpbWUsIHJvb3QuZHVyYXRpb24sIHNldFZpZXdwb3J0XSk7XG5cbiAgY29uc3Qgdmlld0R1cmF0aW9uID0gdmlld3BvcnQuZW5kIC0gdmlld3BvcnQuc3RhcnQ7XG5cbiAgLy8gS2VlcCBhIHJlZiB0byB0aGUgbGl2ZSB2aWV3cG9ydCBzbyB0aGUgcmV2ZWFsIGNhbGxiYWNrIGNhbiByZWFkIHRoZSBjdXJyZW50XG4gIC8vIHpvb20gd2l0aG91dCBiZWluZyByZWNyZWF0ZWQgb24gZXZlcnkgcGFuICh3aGljaCB3b3VsZCBidXN0IFRpbWVsaW5lQmFyJ3NcbiAgLy8gbWVtbyBhbmQgcmUtcmVuZGVyIGV2ZXJ5IHJvdyBlYWNoIGFuaW1hdGlvbiBmcmFtZSkuXG4gIGNvbnN0IHZpZXdwb3J0UmVmID0gdXNlUmVmKHZpZXdwb3J0KTtcbiAgdmlld3BvcnRSZWYuY3VycmVudCA9IHZpZXdwb3J0O1xuXG4gIGNvbnN0IHRpbWVNYXJrZXJzID0gdXNlTWVtbyhcbiAgICAoKSA9PiBjb21wdXRlVGltZU1hcmtlcnModmlld0R1cmF0aW9uLCB2aWV3cG9ydC5zdGFydCAtIHJvb3Quc3RhcnRUaW1lKSxcbiAgICBbdmlld0R1cmF0aW9uLCB2aWV3cG9ydC5zdGFydCwgcm9vdC5zdGFydFRpbWVdXG4gICk7XG5cbiAgY29uc3QgcmVzZXRab29tID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGFuaW1hdGVUbyh7IHN0YXJ0OiByb290LnN0YXJ0VGltZSwgZW5kOiByb290LnN0YXJ0VGltZSArIHJvb3QuZHVyYXRpb24gfSk7XG4gIH0sIFthbmltYXRlVG8sIHJvb3Quc3RhcnRUaW1lLCByb290LmR1cmF0aW9uXSk7XG5cbiAgY29uc3QgY2xhbXBUb1Jvb3QgPSB1c2VDYWxsYmFjayhcbiAgICAobmV4dDogVmlld3BvcnRSYW5nZSk6IFZpZXdwb3J0UmFuZ2UgPT5cbiAgICAgIGNsYW1wVmlld3BvcnRUb1Jvb3QobmV4dCwgcm9vdC5zdGFydFRpbWUsIHJvb3QuZW5kVGltZSwgTUlOX1ZJRVdQT1JUX01TKSxcbiAgICBbcm9vdC5zdGFydFRpbWUsIHJvb3QuZW5kVGltZV1cbiAgKTtcblxuICAvLyBQYW4gKGtlZXBpbmcgdGhlIGN1cnJlbnQgem9vbSkgc28gYHRpbWVNc2AgaXMgY2VudGVyZWQgaW4gdmlldyDigJQgdXNlZCBieSB0aGVcbiAgLy8gb2ZmLXNjcmVlbiBtYXJrZXIgaW5kaWNhdG9ycyB0byBzY3JvbGwgdGhlaXIgbWFya2VyIGludG8gdmlldy5cbiAgY29uc3QgaGFuZGxlUmV2ZWFsVGltZSA9IHVzZUNhbGxiYWNrKFxuICAgICh0aW1lTXM6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSB2aWV3cG9ydFJlZi5jdXJyZW50O1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBlbmQgLSBzdGFydDtcbiAgICAgIGFuaW1hdGVUbyhcbiAgICAgICAgY2xhbXBUb1Jvb3Qoe1xuICAgICAgICAgIHN0YXJ0OiB0aW1lTXMgLSBkdXJhdGlvbiAvIDIsXG4gICAgICAgICAgZW5kOiB0aW1lTXMgKyBkdXJhdGlvbiAvIDIsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0sXG4gICAgW2FuaW1hdGVUbywgY2xhbXBUb1Jvb3RdXG4gICk7XG5cbiAgY29uc3QgWk9PTV9GQUNUT1IgPSAwLjU7XG5cbiAgY29uc3Qgem9vbUJ5ID0gdXNlQ2FsbGJhY2soXG4gICAgKGZhY3RvcjogbnVtYmVyKSA9PiB7XG4gICAgICBzZXRWaWV3cG9ydCgocHJldikgPT4ge1xuICAgICAgICBjb25zdCBjZW50ZXIgPSAocHJldi5zdGFydCArIHByZXYuZW5kKSAvIDI7XG4gICAgICAgIGNvbnN0IG5ld0R1cmF0aW9uID0gTWF0aC5tYXgoXG4gICAgICAgICAgTUlOX1ZJRVdQT1JUX01TLFxuICAgICAgICAgIChwcmV2LmVuZCAtIHByZXYuc3RhcnQpICogZmFjdG9yXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBjbGFtcFRvUm9vdCh7XG4gICAgICAgICAgc3RhcnQ6IGNlbnRlciAtIG5ld0R1cmF0aW9uIC8gMixcbiAgICAgICAgICBlbmQ6IGNlbnRlciArIG5ld0R1cmF0aW9uIC8gMixcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtzZXRWaWV3cG9ydCwgY2xhbXBUb1Jvb3RdXG4gICk7XG5cbiAgY29uc3Qgem9vbUluID0gdXNlQ2FsbGJhY2soKCkgPT4gem9vbUJ5KFpPT01fRkFDVE9SKSwgW3pvb21CeV0pO1xuICBjb25zdCB6b29tT3V0ID0gdXNlQ2FsbGJhY2soKCkgPT4gem9vbUJ5KDEgLyBaT09NX0ZBQ1RPUiksIFt6b29tQnldKTtcbiAgY29uc3QgaXNBdE1pblpvb20gPSB2aWV3RHVyYXRpb24gPj0gcm9vdC5kdXJhdGlvbjtcbiAgY29uc3QgaXNBdE1heFpvb20gPSB2aWV3RHVyYXRpb24gPD0gTUlOX1ZJRVdQT1JUX01TO1xuXG4gIGNvbnN0IGZvY3VzVmlld3BvcnRPblNwYW4gPSB1c2VDYWxsYmFjayhcbiAgICAoc3BhbklkOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHNwYW4gPSB0cmFjZS5zcGFucy5maW5kKChzKSA9PiBzLnNwYW5JZCA9PT0gc3BhbklkKTtcbiAgICAgIGlmICghc3BhbikgcmV0dXJuO1xuXG4gICAgICBjb25zdCBzcGFuU3RhcnQgPSBnZXRIaWdoUmVzSW5NcyhzcGFuLnN0YXJ0VGltZSk7XG4gICAgICBjb25zdCBzcGFuRW5kID0gZ2V0SGlnaFJlc0luTXMoc3Bhbi5lbmRUaW1lKTtcbiAgICAgIGNvbnN0IHNwYW5EdXJhdGlvbiA9IHNwYW5FbmQgLSBzcGFuU3RhcnQ7XG5cbiAgICAgIGlmIChzcGFuRHVyYXRpb24gPiByb290LmR1cmF0aW9uICogMC44KSB7XG4gICAgICAgIGFuaW1hdGVUbyh7IHN0YXJ0OiByb290LnN0YXJ0VGltZSwgZW5kOiByb290LmVuZFRpbWUgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFkZGluZyA9IE1hdGgubWF4KHNwYW5EdXJhdGlvbiAqIDAuMiwgTUlOX1ZJRVdQT1JUX01TIC8gMik7XG4gICAgICBsZXQgbmV3U3RhcnQgPSBzcGFuU3RhcnQgLSBwYWRkaW5nO1xuICAgICAgbGV0IG5ld0VuZCA9IHNwYW5FbmQgKyBwYWRkaW5nO1xuXG4gICAgICBpZiAobmV3RW5kIC0gbmV3U3RhcnQgPCBNSU5fVklFV1BPUlRfTVMpIHtcbiAgICAgICAgY29uc3QgY2VudGVyID0gKHNwYW5TdGFydCArIHNwYW5FbmQpIC8gMjtcbiAgICAgICAgbmV3U3RhcnQgPSBjZW50ZXIgLSBNSU5fVklFV1BPUlRfTVMgLyAyO1xuICAgICAgICBuZXdFbmQgPSBjZW50ZXIgKyBNSU5fVklFV1BPUlRfTVMgLyAyO1xuICAgICAgfVxuXG4gICAgICBhbmltYXRlVG8oY2xhbXBUb1Jvb3QoeyBzdGFydDogbmV3U3RhcnQsIGVuZDogbmV3RW5kIH0pKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIGFuaW1hdGVUbyxcbiAgICAgIHRyYWNlLnNwYW5zLFxuICAgICAgcm9vdC5zdGFydFRpbWUsXG4gICAgICByb290LmVuZFRpbWUsXG4gICAgICByb290LmR1cmF0aW9uLFxuICAgICAgY2xhbXBUb1Jvb3QsXG4gICAgXVxuICApO1xuXG4gIC8vIEJyaW5nIGEgcm93IGludG8gdmlldyB3aGVuIGtleWJvYXJkL2J1dHRvbiBuYXZpZ2F0aW9uIGxhbmRzIG9uIGEgc3BhbiB0aGF0XG4gIC8vIHNpdHMgb3V0c2lkZSB0aGUgc2hhcmVkIHNjcm9sbCBjb250YWluZXIncyB2aXNpYmxlIGFyZWEuIFRoZSBsaXN0IGlzXG4gIC8vIHdpbmRvd2VkLCBzbyBhbiBvZmYtc2NyZWVuIHJvdyBoYXMgbm8gRE9NIG5vZGUgdG8gYHNjcm9sbEludG9WaWV3YCDigJRcbiAgLy8gYHNjcm9sbFJvd0ludG9WaWV3YCBjb21wdXRlcyB0aGUgdGFyZ2V0IG9mZnNldCBmcm9tIHRoZSBzcGFuJ3MgaW5kZXguXG4gIGNvbnN0IHNjcm9sbFNwYW5JbnRvVmlldyA9IHVzZUNhbGxiYWNrKFxuICAgIChzcGFuSWQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSB0cmFjZS5zcGFucy5maW5kSW5kZXgoKHMpID0+IHMuc3BhbklkID09PSBzcGFuSWQpO1xuICAgICAgaWYgKGluZGV4ID09PSAtMSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBsaXN0ID1cbiAgICAgICAgc2Nyb2xsQ29udGFpbmVyUmVmLmN1cnJlbnQ/LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KCcjZXZlbnQtbGlzdCcpID8/XG4gICAgICAgIG51bGw7XG4gICAgICBzY3JvbGxSb3dJbnRvVmlldyhsaXN0LCBpbmRleCwgUk9XX0hFSUdIVF9QWCwge1xuICAgICAgICBiZWhhdmlvcjogcmVkdWNlZE1vdGlvbiA/ICdhdXRvJyA6ICdzbW9vdGgnLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBbdHJhY2Uuc3BhbnMsIHJlZHVjZWRNb3Rpb25dXG4gICk7XG5cbiAgY29uc3Qgem9vbVRpbWVyUmVmID0gdXNlUmVmPFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGNhbmNlbFBlbmRpbmdab29tID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICh6b29tVGltZXJSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHpvb21UaW1lclJlZi5jdXJyZW50KTtcbiAgICAgIHpvb21UaW1lclJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH0sIFtdKTtcbiAgdXNlRWZmZWN0KCgpID0+IGNhbmNlbFBlbmRpbmdab29tLCBbY2FuY2VsUGVuZGluZ1pvb21dKTtcblxuICBjb25zdCBoYW5kbGVDbGVhckFjdGl2ZVNwYW4gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY2FuY2VsUGVuZGluZ1pvb20oKTtcbiAgICBjbGVhckFjdGl2ZVNwYW4oKTtcbiAgfSwgW2NhbmNlbFBlbmRpbmdab29tLCBjbGVhckFjdGl2ZVNwYW5dKTtcblxuICBjb25zdCBoYW5kbGVTZWxlY3RTcGFuID0gdXNlQ2FsbGJhY2soXG4gICAgKHNwYW5JZDogc3RyaW5nKSA9PiB7XG4gICAgICBjYW5jZWxQZW5kaW5nWm9vbSgpO1xuICAgICAgaWYgKHNwYW5JZCA9PT0gYWN0aXZlU3BhbklkKSB7XG4gICAgICAgIGNsZWFyQWN0aXZlU3BhbigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZXRBY3RpdmVTcGFuKHNwYW5JZCk7XG4gICAgICBmb2N1c1ZpZXdwb3J0T25TcGFuKHNwYW5JZCk7XG4gICAgfSxcbiAgICBbXG4gICAgICBjYW5jZWxQZW5kaW5nWm9vbSxcbiAgICAgIGFjdGl2ZVNwYW5JZCxcbiAgICAgIGNsZWFyQWN0aXZlU3BhbixcbiAgICAgIHNldEFjdGl2ZVNwYW4sXG4gICAgICBmb2N1c1ZpZXdwb3J0T25TcGFuLFxuICAgIF1cbiAgKTtcblxuICBjb25zdCBuYXZpZ2F0ZVRvU3BhbiA9IHVzZUNhbGxiYWNrKFxuICAgIChzcGFuSWQ6IHN0cmluZykgPT4ge1xuICAgICAgc2V0QWN0aXZlU3BhbihzcGFuSWQpO1xuICAgICAgc2Nyb2xsU3BhbkludG9WaWV3KHNwYW5JZCk7XG4gICAgICBjYW5jZWxQZW5kaW5nWm9vbSgpO1xuICAgICAgem9vbVRpbWVyUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgem9vbVRpbWVyUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICBmb2N1c1ZpZXdwb3J0T25TcGFuKHNwYW5JZCk7XG4gICAgICB9LCBaT09NX0RFQk9VTkNFX01TKTtcbiAgICB9LFxuICAgIFtzZXRBY3RpdmVTcGFuLCBzY3JvbGxTcGFuSW50b1ZpZXcsIGNhbmNlbFBlbmRpbmdab29tLCBmb2N1c1ZpZXdwb3J0T25TcGFuXVxuICApO1xuXG4gIGNvbnN0IFthbHRIZWxkLCBzZXRBbHRIZWxkXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9uS2V5RG93biA9IChlOiBLZXlib2FyZEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgIGhhbmRsZUNsZWFyQWN0aXZlU3BhbigpO1xuICAgICAgfSBlbHNlIGlmIChlLmtleSA9PT0gJ0FsdCcpIHtcbiAgICAgICAgc2V0QWx0SGVsZCh0cnVlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG9uS2V5VXAgPSAoZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKGUua2V5ID09PSAnQWx0Jykgc2V0QWx0SGVsZChmYWxzZSk7XG4gICAgfTtcbiAgICBjb25zdCBvbkJsdXIgPSAoKTogdm9pZCA9PiBzZXRBbHRIZWxkKGZhbHNlKTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlEb3duKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBvbktleVVwKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIG9uQmx1cik7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlEb3duKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIG9uS2V5VXApO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JsdXInLCBvbkJsdXIpO1xuICAgIH07XG4gIH0sIFtoYW5kbGVDbGVhckFjdGl2ZVNwYW5dKTtcblxuICBjb25zdCB0aW1lbGluZVJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IFtob3ZlckZyYWN0aW9uLCBzZXRIb3ZlckZyYWN0aW9uXSA9IHVzZVN0YXRlPG51bWJlciB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IGhvdmVySW5mbyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChob3ZlckZyYWN0aW9uID09IG51bGwpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGFic1RpbWUgPSB2aWV3cG9ydC5zdGFydCArIGhvdmVyRnJhY3Rpb24gKiB2aWV3RHVyYXRpb247XG4gICAgY29uc3Qgb2Zmc2V0ID0gYWJzVGltZSAtIHJvb3Quc3RhcnRUaW1lO1xuICAgIHJldHVybiB7IGZyYWN0aW9uOiBob3ZlckZyYWN0aW9uLCBsYWJlbDogZm9ybWF0RHVyYXRpb25QcmVjaXNlKG9mZnNldCkgfTtcbiAgfSwgW2hvdmVyRnJhY3Rpb24sIHZpZXdwb3J0LnN0YXJ0LCB2aWV3RHVyYXRpb24sIHJvb3Quc3RhcnRUaW1lXSk7XG5cbiAgY29uc3QgaGFuZGxlVGltZWxpbmVNb3VzZU1vdmUgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuTW91c2VFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IGVsID0gdGltZWxpbmVSZWYuY3VycmVudDtcbiAgICAgIGlmICghZWwpIHJldHVybjtcbiAgICAgIGNvbnN0IHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9IHJlY3Qud2lkdGggLSBUSU1FTElORV9QQURESU5HX1BYICogMjtcbiAgICAgIGlmIChjb250ZW50V2lkdGggPD0gMCkgcmV0dXJuO1xuICAgICAgY29uc3QgZnJhY3Rpb24gPSBNYXRoLm1heChcbiAgICAgICAgMCxcbiAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgMSxcbiAgICAgICAgICAoZS5jbGllbnRYIC0gcmVjdC5sZWZ0IC0gVElNRUxJTkVfUEFERElOR19QWCkgLyBjb250ZW50V2lkdGhcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHNldEhvdmVyRnJhY3Rpb24oZnJhY3Rpb24pO1xuICAgIH0sXG4gICAgW11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVUaW1lbGluZU1vdXNlTGVhdmUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0SG92ZXJGcmFjdGlvbihudWxsKTtcbiAgfSwgW10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZWwgPSB0aW1lbGluZVJlZi5jdXJyZW50O1xuICAgIGlmICghZWwgfHwgcm9vdC5kdXJhdGlvbiA8PSAwKSByZXR1cm47XG5cbiAgICBjb25zdCBvbldoZWVsID0gKGU6IFdoZWVsRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IGlzWm9vbUdlc3R1cmUgPSBlLmN0cmxLZXkgfHwgZS5tZXRhS2V5O1xuICAgICAgY29uc3QgaGFzRGVsdGFYID0gTWF0aC5hYnMoZS5kZWx0YVgpID4gTWF0aC5hYnMoZS5kZWx0YVkpO1xuXG4gICAgICBpZiAoIWlzWm9vbUdlc3R1cmUgJiYgIWhhc0RlbHRhWCkgcmV0dXJuO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBjb250ZW50V2lkdGggPSByZWN0LndpZHRoIC0gVElNRUxJTkVfUEFERElOR19QWCAqIDI7XG4gICAgICBpZiAoY29udGVudFdpZHRoIDw9IDApIHJldHVybjtcblxuICAgICAgaWYgKGlzWm9vbUdlc3R1cmUpIHtcbiAgICAgICAgY29uc3QgY3Vyc29yRnJhY3Rpb24gPSBNYXRoLm1heChcbiAgICAgICAgICAwLFxuICAgICAgICAgIE1hdGgubWluKFxuICAgICAgICAgICAgMSxcbiAgICAgICAgICAgIChlLmNsaWVudFggLSByZWN0LmxlZnQgLSBUSU1FTElORV9QQURESU5HX1BYKSAvIGNvbnRlbnRXaWR0aFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgc2NhbGVGYWN0b3IgPSB3aGVlbFpvb21TY2FsZUZhY3RvcihlKTtcblxuICAgICAgICBzZXRWaWV3cG9ydCgocHJldikgPT4ge1xuICAgICAgICAgIGNvbnN0IHByZXZEdXJhdGlvbiA9IHByZXYuZW5kIC0gcHJldi5zdGFydDtcbiAgICAgICAgICBjb25zdCBjdXJzb3JUaW1lID0gcHJldi5zdGFydCArIGN1cnNvckZyYWN0aW9uICogcHJldkR1cmF0aW9uO1xuICAgICAgICAgIC8vIENsYW1wIHRoZSBkdXJhdGlvbiBiZWZvcmUgYW5jaG9yaW5nIHNvIHRoZSBjdXJzb3Iga2VlcHMgaXRzXG4gICAgICAgICAgLy8gZnJhY3Rpb24gZXZlbiB3aGVuIHRoZSB6b29tIGhpdHMgdGhlIG1pbi9tYXggYm91bmRzLlxuICAgICAgICAgIGNvbnN0IG5ld0R1cmF0aW9uID0gTWF0aC5tYXgoXG4gICAgICAgICAgICBNSU5fVklFV1BPUlRfTVMsXG4gICAgICAgICAgICBNYXRoLm1pbihyb290LmR1cmF0aW9uLCBwcmV2RHVyYXRpb24gKiBzY2FsZUZhY3RvcilcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBjbGFtcFRvUm9vdCh7XG4gICAgICAgICAgICBzdGFydDogY3Vyc29yVGltZSAtIGN1cnNvckZyYWN0aW9uICogbmV3RHVyYXRpb24sXG4gICAgICAgICAgICBlbmQ6IGN1cnNvclRpbWUgKyAoMSAtIGN1cnNvckZyYWN0aW9uKSAqIG5ld0R1cmF0aW9uLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGR4ID0gd2hlZWxEZWx0YVRvUGl4ZWxzKGUuZGVsdGFYLCBlLmRlbHRhTW9kZSk7XG4gICAgICAgIHNldFZpZXdwb3J0KChwcmV2KSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFuQW1vdW50ID0gKGR4IC8gY29udGVudFdpZHRoKSAqIChwcmV2LmVuZCAtIHByZXYuc3RhcnQpO1xuICAgICAgICAgIHJldHVybiBjbGFtcFRvUm9vdCh7XG4gICAgICAgICAgICBzdGFydDogcHJldi5zdGFydCArIHBhbkFtb3VudCxcbiAgICAgICAgICAgIGVuZDogcHJldi5lbmQgKyBwYW5BbW91bnQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd3aGVlbCcsIG9uV2hlZWwsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XG4gICAgcmV0dXJuICgpID0+IGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3doZWVsJywgb25XaGVlbCk7XG4gIH0sIFtyb290LmR1cmF0aW9uLCBzZXRWaWV3cG9ydCwgY2xhbXBUb1Jvb3RdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17cGFuZVJvb3RSZWZ9XG4gICAgICBkYXRhLXBhbmU9XCJwYW5lLXJvb3RcIlxuICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgZmxleCB3LWZ1bGwgaC1mdWxsIG1heC1oLWZ1bGxcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgaWQ9XCJ0cmFjZS1wYXJlbnRcIlxuICAgICAgICBjbGFzc05hbWU9XCJmbGV4LTEgbWluLXctMCBncmlkIGdyaWQtcm93cy1bYXV0b18xZnJdIGgtZnVsbCBtaW4taC0wIG92ZXJmbG93LWhpZGRlbiByZWxhdGl2ZSBiZy1iYWNrZ3JvdW5kLTEwMFwiXG4gICAgICA+XG4gICAgICAgIDxNaW5pbWFwXG4gICAgICAgICAgc3BhbnM9e3RyYWNlLnNwYW5zfVxuICAgICAgICAgIHJvb3Q9e3Jvb3R9XG4gICAgICAgICAgdmlld3BvcnQ9e3ZpZXdwb3J0fVxuICAgICAgICAgIG1pblZpZXdwb3J0TXM9e01JTl9WSUVXUE9SVF9NU31cbiAgICAgICAgICBvblZpZXdwb3J0Q2hhbmdlPXtzZXRWaWV3cG9ydH1cbiAgICAgICAgICBvbkFuaW1hdGVUbz17YW5pbWF0ZVRvfVxuICAgICAgICAvPlxuICAgICAgICA8U3BsaXRQYW5lXG4gICAgICAgICAgc2Nyb2xsQ29udGFpbmVyUmVmPXtzY3JvbGxDb250YWluZXJSZWZ9XG4gICAgICAgICAgc3RhcnRIZWFkZXI9e1xuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZy1iYWNrZ3JvdW5kLTEwMCBib3JkZXItYiBib3JkZXItZ3JheS1hbHBoYS00MDAgaC0xMCBtaW4taC0xMCBmbGV4IGl0ZW1zLWNlbnRlciBwbC00IHByLTIgZ2FwLTEuNVwiPlxuICAgICAgICAgICAgICA8U2VhcmNoIGNsYXNzTmFtZT1cInctMy41IGgtMy41IHNocmluay0wIHRleHQtZ3JheS04MDBcIiAvPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBpZD1cInRyYWNlLXZpZXdlci1zZWFyY2hcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJ0cmFjZS12aWV3ZXItc2VhcmNoXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgdmFsdWU9e3NlYXJjaFF1ZXJ5fVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0U2VhcmNoUXVlcnkoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgIG9uS2V5RG93bj17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScgJiYgc2VhcmNoUXVlcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICBzZXRTZWFyY2hRdWVyeSgnJyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBzcGFucy4uLlwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlNlYXJjaCBzcGFuc1wiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC0xIG1pbi13LTAgYmctdHJhbnNwYXJlbnQgdGV4dC1zbSB0ZXh0LWdyYXktMTAwMCBwbGFjZWhvbGRlcjp0ZXh0LWdyYXktODAwIG91dGxpbmUtbm9uZVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIHtzZWFyY2hRdWVyeSAmJiAoXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xlYXIgc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNlYXJjaFF1ZXJ5KCcnKX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIi1tci0yIGhpZGRlbiBoLWZ1bGwgbWF4LXctZnVsbCBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIgcm91bmRlZC1yLW1kIGJvcmRlci0wIGJnLXRyYW5zcGFyZW50IHB4LTIuNSBmb250LWluaGVyaXQgdGV4dC1iYXNlIHRleHQtZ3JheS05MDAgbm8tdW5kZXJsaW5lIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTE1MCBlYXNlLWluIGhvdmVyOnRleHQtZ3JheS0xMDAwIGZvY3VzLXZpc2libGU6LW91dGxpbmUtb2Zmc2V0LTEgZm9jdXMtdmlzaWJsZTpvdXRsaW5lIGZvY3VzLXZpc2libGU6b3V0bGluZS0yIGZvY3VzLXZpc2libGU6b3V0bGluZS1bdmFyKC0tZHMtZm9jdXMtY29sb3IpXSBtaW4tWzk2MXB4XTpmbGV4XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8S2JkIHZhcmlhbnQ9XCJvdXRsaW5lXCIgc2l6ZT1cInNlYXJjaFwiPlxuICAgICAgICAgICAgICAgICAgICBFc2NcbiAgICAgICAgICAgICAgICAgIDwvS2JkPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICAgIGVuZEhlYWRlcj17XG4gICAgICAgICAgICA8VGltZWxpbmVIZWFkZXIgbWFya2Vycz17dGltZU1hcmtlcnN9IGhvdmVySW5mbz17aG92ZXJJbmZvfSAvPlxuICAgICAgICAgIH1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmxvY2sgb3ZlcmZsb3ctdmlzaWJsZVwiPlxuICAgICAgICAgICAgPEV2ZW50TGlzdFxuICAgICAgICAgICAgICBzcGFucz17dHJhY2Uuc3BhbnN9XG4gICAgICAgICAgICAgIGFjdGl2ZVNwYW5JZD17YWN0aXZlU3BhbklkfVxuICAgICAgICAgICAgICBzZWFyY2hSZXN1bHQ9e3NlYXJjaFJlc3VsdH1cbiAgICAgICAgICAgICAgb25TZWxlY3RTcGFuPXtoYW5kbGVTZWxlY3RTcGFufVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxkaXYgcmVmPXtsb2FkTW9yZVNlbnRpbmVsUmVmfSBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICAgIHtpc0xvYWRpbmdNb3JlID8gKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgcHktMyB0ZXh0LXNtIHRleHQtZ3JheS04MDBcIj5cbiAgICAgICAgICAgICAgICAgIDxTcGlubmVyIHNpemU9ezE0fSAvPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+TG9hZGluZyBzcGFuc+KApjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7LyogYmlvbWUtaWdub3JlIGxpbnQvYTExeS9ub1N0YXRpY0VsZW1lbnRJbnRlcmFjdGlvbnM6IHRpbWVsaW5lIGhvdmVyIGFuZCB3aGVlbCBnZXN0dXJlcyBhcmUgcG9pbnRlci1vbmx5IGFubm90YXRpb25zICovfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHJlZj17dGltZWxpbmVSZWZ9XG4gICAgICAgICAgICBpZD1cInRyYWNlLXRpbWVsaW5lXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cIkBjb250YWluZXIgYmxvY2sgbWluLWgtMCBvdmVyZmxvdy12aXNpYmxlIHJlbGF0aXZlXCJcbiAgICAgICAgICAgIG9uRG91YmxlQ2xpY2s9e3Jlc2V0Wm9vbX1cbiAgICAgICAgICAgIG9uTW91c2VNb3ZlPXtoYW5kbGVUaW1lbGluZU1vdXNlTW92ZX1cbiAgICAgICAgICAgIG9uTW91c2VMZWF2ZT17aGFuZGxlVGltZWxpbmVNb3VzZUxlYXZlfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxUaW1lbGluZVxuICAgICAgICAgICAgICBzcGFucz17dHJhY2Uuc3BhbnN9XG4gICAgICAgICAgICAgIHZpZXdTdGFydD17dmlld3BvcnQuc3RhcnR9XG4gICAgICAgICAgICAgIHZpZXdFbmQ9e3ZpZXdwb3J0LmVuZH1cbiAgICAgICAgICAgICAgbWFya2Vycz17dGltZU1hcmtlcnN9XG4gICAgICAgICAgICAgIHNlbGVjdGVkSWQ9e2FjdGl2ZVNwYW5JZH1cbiAgICAgICAgICAgICAgc2VhcmNoUmVzdWx0PXtzZWFyY2hSZXN1bHR9XG4gICAgICAgICAgICAgIG9uU2VsZWN0PXtoYW5kbGVTZWxlY3RTcGFufVxuICAgICAgICAgICAgICBvblJldmVhbFRpbWU9e2hhbmRsZVJldmVhbFRpbWV9XG4gICAgICAgICAgICAgIGhvdmVyRnJhY3Rpb249e2hvdmVyRnJhY3Rpb259XG4gICAgICAgICAgICAgIGFsdEhlbGQ9e2FsdEhlbGR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFRyYWNlU2hvcnRjdXRIZWxwZXJcbiAgICAgICAgICAgICAgaGFzTXVsdGlwbGVTcGFucz17dHJhY2Uuc3BhbnMubGVuZ3RoID4gMX1cbiAgICAgICAgICAgICAgcmVkdWNlZE1vdGlvbj17cmVkdWNlZE1vdGlvbn1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvU3BsaXRQYW5lPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIHJpZ2h0LTMgYm90dG9tLTMgei1bNV0gZmxleCBpdGVtcy1jZW50ZXIgYm9yZGVyIGJvcmRlci1ncmF5LWFscGhhLTQwMCByb3VuZGVkLW1kIGJnLWJhY2tncm91bmQtMTAwIHNoYWRvdy1zbSBvdmVyZmxvdy1oaWRkZW4gZGl2aWRlLXggZGl2aWRlLWdyYXktYWxwaGEtNDAwXCI+XG4gICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJtdXRlZFwiXG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgb25DbGljaz17em9vbU91dH1cbiAgICAgICAgICAgIGRpc2FibGVkPXtpc0F0TWluWm9vbX1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJab29tIG91dFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFpvb21PdXQgY2xhc3NOYW1lPVwidy00IGgtNFwiIC8+XG4gICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICB2YXJpYW50PVwibXV0ZWRcIlxuICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e3Jlc2V0Wm9vbX1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJSZXNldCB6b29tXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Um90YXRlQ2N3IGNsYXNzTmFtZT1cInctMy41IGgtMy41XCIgLz5cbiAgICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJtdXRlZFwiXG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgb25DbGljaz17em9vbUlufVxuICAgICAgICAgICAgZGlzYWJsZWQ9e2lzQXRNYXhab29tfVxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlpvb20gaW5cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxab29tSW4gY2xhc3NOYW1lPVwidy00IGgtNFwiIC8+XG4gICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8VHJhY2VEZXRhaWxQYW5lbFxuICAgICAgICBjb250YWluZXJSZWY9e3BhbmVSb290UmVmfVxuICAgICAgICBvbk5hdmlnYXRlVG9TcGFuPXtuYXZpZ2F0ZVRvU3Bhbn1cbiAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xlYXJBY3RpdmVTcGFufVxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiJdfQ==
337
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2Utdmlld2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbmV3LXRyYWNlLXZpZXdlci90cmFjZS12aWV3ZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2xFLE9BQU8sRUFFTCxXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCxPQUFPLEVBQ1AsTUFBTSxFQUNOLFFBQVEsR0FDVCxNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsY0FBYyxHQUNmLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sU0FBUyxNQUFNLHlCQUF5QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixRQUFRLEVBQ1IsY0FBYyxHQUVmLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV2QyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixrQkFBa0IsRUFFbEIsa0JBQWtCLEVBQ2xCLG9CQUFvQixHQUNyQixNQUFNLFNBQVMsQ0FBQztBQVNqQixNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUM7QUFFOUIsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7QUFFN0IsU0FBUyxtQkFBbUIsQ0FBQyxPQUFzQjtJQUNqRCxNQUFNLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLEdBQUcsUUFBUSxDQUFnQixPQUFPLENBQUMsQ0FBQztJQUN0RSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBS1osSUFBSSxDQUFDLENBQUM7SUFDaEIsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLFVBQVUsQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDO0lBQzlCLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFFekMsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRTtRQUM5QixJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQixvQkFBb0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQzNCLENBQUMsTUFBcUIsRUFBRSxFQUFFO1FBQ3hCLE1BQU0sRUFBRSxDQUFDO1FBRVQsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixVQUFVLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztZQUM1QixnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN6QixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7UUFDaEMsTUFBTSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUVwRSxNQUFNLElBQUksR0FBRyxHQUFHLEVBQUU7WUFDaEIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzlELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xFLGdCQUFnQixDQUFDO2dCQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztnQkFDOUQsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO2FBQ3ZELENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxHQUFHLENBQUM7Z0JBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7Z0JBQzdDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQzlCLENBQUMsQ0FBQztRQUVGLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekMsQ0FBQyxFQUNELENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUN4QixDQUFDO0lBRUYsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUM3QixDQUFDLE1BQWdFLEVBQUUsRUFBRTtRQUNuRSxNQUFNLEVBQUUsQ0FBQztRQUNULElBQUksT0FBTyxNQUFNLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDakMsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDeEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMxQixVQUFVLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFDMUIsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ04sVUFBVSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7WUFDNUIsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUMsRUFDRCxDQUFDLE1BQU0sQ0FBQyxDQUNULENBQUM7SUFFRixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUVsQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsQ0FBQztBQUM5QyxDQUFDO0FBRUQsOEVBQThFO0FBQzlFLGlCQUFpQjtBQUNqQiw4RUFBOEU7QUFFOUUsTUFBTSxVQUFVLGNBQWMsQ0FBQyxFQUM3QixLQUFLLEVBQ0wsVUFBVSxFQUNWLE9BQU8sRUFDUCxhQUFhLEdBQ087SUFDcEIsT0FBTyxDQUNMLEtBQUMsZUFBZSxJQUFDLGFBQWEsRUFBRSxHQUFHLFlBQ2pDLEtBQUMsa0JBQWtCLElBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLFlBQ3BDLEtBQUMscUJBQXFCLElBQ3BCLEtBQUssRUFBRSxLQUFLLEVBQ1osVUFBVSxFQUFFLFVBQVUsRUFDdEIsT0FBTyxFQUFFLE9BQU8sRUFDaEIsYUFBYSxFQUFFLGFBQWEsR0FDNUIsR0FDaUIsR0FDTCxDQUNuQixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMscUJBQXFCLENBQUMsRUFDN0IsS0FBSyxFQUNMLFVBQVUsRUFDVixPQUFPLEVBQ1AsYUFBYSxHQUNPO0lBQ3BCLE1BQU0sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxHQUFHLGFBQWEsRUFBRSxDQUFDO0lBRXpFLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFFekMsTUFBTSxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkQsTUFBTSxtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUUxRCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQWlCLElBQUksQ0FBQyxDQUFDO0lBRWpELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FDMUIsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLENBQUMsRUFDbkQsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLG1CQUFtQixDQUFDLENBQ25DLENBQUM7SUFFRixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFFMUUsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQWlCLElBQUksQ0FBQyxDQUFDO0lBQ3hELE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUU7UUFDaEMsS0FBSyxVQUFVLEVBQUUsRUFBRSxDQUFDO0lBQ3RCLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDakIsTUFBTSxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUU7UUFDeEQsT0FBTyxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDO1FBQ3ZDLGFBQWEsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDO1FBQ3JDLE9BQU8sRUFBRSxrQkFBa0I7S0FDNUIsQ0FBQyxDQUFDO0lBRUgsTUFBTSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsbUJBQW1CLENBQUM7UUFDL0QsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTO1FBQ3JCLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRO0tBQ3BDLENBQUMsQ0FBQztJQUVILE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBZ0I7UUFDeEMsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTO1FBQ3JCLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRO0tBQ3BDLENBQUMsQ0FBQztJQUVILFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDaEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBRTlDLFdBQVcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ25CLE1BQU0sZUFBZSxHQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUk7Z0JBQzVDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBRTNDLElBQUksZUFBZSxFQUFFLENBQUM7Z0JBQ3BCLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUMxQyxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztRQUVILFdBQVcsQ0FBQyxPQUFPLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUN6RCxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUVqRCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFFbkQsOEVBQThFO0lBQzlFLDRFQUE0RTtJQUM1RSxzREFBc0Q7SUFDdEQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JDLFdBQVcsQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDO0lBRS9CLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FDekIsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUN2RSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDL0MsQ0FBQztJQUVGLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUU7UUFDakMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDNUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFFL0MsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUM3QixDQUFDLElBQW1CLEVBQWlCLEVBQUUsQ0FDckMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsRUFDMUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FDL0IsQ0FBQztJQUVGLCtFQUErRTtJQUMvRSxpRUFBaUU7SUFDakUsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQ2xDLENBQUMsTUFBYyxFQUFFLEVBQUU7UUFDakIsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDO1FBQzNDLE1BQU0sUUFBUSxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7UUFDN0IsU0FBUyxDQUNQLFdBQVcsQ0FBQztZQUNWLEtBQUssRUFBRSxNQUFNLEdBQUcsUUFBUSxHQUFHLENBQUM7WUFDNUIsR0FBRyxFQUFFLE1BQU0sR0FBRyxRQUFRLEdBQUcsQ0FBQztTQUMzQixDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUMsRUFDRCxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FDekIsQ0FBQztJQUVGLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQztJQUV4QixNQUFNLE1BQU0sR0FBRyxXQUFXLENBQ3hCLENBQUMsTUFBYyxFQUFFLEVBQUU7UUFDakIsV0FBVyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDbkIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0MsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDMUIsZUFBZSxFQUNmLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUNqQyxDQUFDO1lBQ0YsT0FBTyxXQUFXLENBQUM7Z0JBQ2pCLEtBQUssRUFBRSxNQUFNLEdBQUcsV0FBVyxHQUFHLENBQUM7Z0JBQy9CLEdBQUcsRUFBRSxNQUFNLEdBQUcsV0FBVyxHQUFHLENBQUM7YUFDOUIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLEVBQ0QsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQzNCLENBQUM7SUFFRixNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNoRSxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckUsTUFBTSxXQUFXLEdBQUcsWUFBWSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDbEQsTUFBTSxXQUFXLEdBQUcsWUFBWSxJQUFJLGVBQWUsQ0FBQztJQUVwRCxNQUFNLG1CQUFtQixHQUFHLFdBQVcsQ0FDckMsQ0FBQyxNQUFjLEVBQUUsRUFBRTtRQUNqQixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU87UUFFbEIsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqRCxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLE1BQU0sWUFBWSxHQUFHLE9BQU8sR0FBRyxTQUFTLENBQUM7UUFFekMsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUN2QyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDeEQsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksR0FBRyxHQUFHLEVBQUUsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLElBQUksUUFBUSxHQUFHLFNBQVMsR0FBRyxPQUFPLENBQUM7UUFDbkMsSUFBSSxNQUFNLEdBQUcsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUUvQixJQUFJLE1BQU0sR0FBRyxRQUFRLEdBQUcsZUFBZSxFQUFFLENBQUM7WUFDeEMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pDLFFBQVEsR0FBRyxNQUFNLEdBQUcsZUFBZSxHQUFHLENBQUMsQ0FBQztZQUN4QyxNQUFNLEdBQUcsTUFBTSxHQUFHLGVBQWUsR0FBRyxDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUVELFNBQVMsQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0QsQ0FBQyxFQUNEO1FBQ0UsU0FBUztRQUNULEtBQUssQ0FBQyxLQUFLO1FBQ1gsSUFBSSxDQUFDLFNBQVM7UUFDZCxJQUFJLENBQUMsT0FBTztRQUNaLElBQUksQ0FBQyxRQUFRO1FBQ2IsV0FBVztLQUNaLENBQ0YsQ0FBQztJQUVGLDZFQUE2RTtJQUM3RSx1RUFBdUU7SUFDdkUsdUVBQXVFO0lBQ3ZFLHdFQUF3RTtJQUN4RSxNQUFNLGtCQUFrQixHQUFHLFdBQVcsQ0FDcEMsQ0FBQyxNQUFjLEVBQUUsRUFBRTtRQUNqQixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsQ0FBQztRQUNoRSxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUM7WUFBRSxPQUFPO1FBRXpCLE1BQU0sSUFBSSxHQUNSLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxhQUFhLENBQWMsYUFBYSxDQUFDO1lBQ3JFLElBQUksQ0FBQztRQUNQLGlCQUFpQixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO1lBQzVDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUTtTQUM1QyxDQUFDLENBQUM7SUFDTCxDQUFDLEVBQ0QsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUM3QixDQUFDO0lBRUYsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUF1QyxJQUFJLENBQUMsQ0FBQztJQUN4RSxNQUFNLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUU7UUFDekMsSUFBSSxZQUFZLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ2xDLFlBQVksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkMsWUFBWSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNQLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztJQUV4RCxNQUFNLHFCQUFxQixHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUU7UUFDN0MsaUJBQWlCLEVBQUUsQ0FBQztRQUNwQixlQUFlLEVBQUUsQ0FBQztJQUNwQixDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBRXpDLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUNsQyxDQUFDLE1BQWMsRUFBRSxFQUFFO1FBQ2pCLGlCQUFpQixFQUFFLENBQUM7UUFDcEIsSUFBSSxNQUFNLEtBQUssWUFBWSxFQUFFLENBQUM7WUFDNUIsZUFBZSxFQUFFLENBQUM7WUFDbEIsT0FBTztRQUNULENBQUM7UUFDRCxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEIsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUIsQ0FBQyxFQUNEO1FBQ0UsaUJBQWlCO1FBQ2pCLFlBQVk7UUFDWixlQUFlO1FBQ2YsYUFBYTtRQUNiLG1CQUFtQjtLQUNwQixDQUNGLENBQUM7SUFFRixNQUFNLGNBQWMsR0FBRyxXQUFXLENBQ2hDLENBQUMsTUFBYyxFQUFFLEVBQUU7UUFDakIsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RCLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLGlCQUFpQixFQUFFLENBQUM7UUFDcEIsWUFBWSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ3JDLFlBQVksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQzVCLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlCLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3ZCLENBQUMsRUFDRCxDQUFDLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsQ0FBQyxDQUM1RSxDQUFDO0lBRUYsTUFBTSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFOUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBZ0IsRUFBUSxFQUFFO1lBQzNDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDdkIscUJBQXFCLEVBQUUsQ0FBQztZQUMxQixDQUFDO2lCQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDM0IsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25CLENBQUM7UUFDSCxDQUFDLENBQUM7UUFDRixNQUFNLE9BQU8sR0FBRyxDQUFDLENBQWdCLEVBQVEsRUFBRTtZQUN6QyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssS0FBSztnQkFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcsR0FBUyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTdDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDOUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMxQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sR0FBRyxFQUFFO1lBQ1YsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNqRCxNQUFNLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzdDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxFQUFFLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDO0lBRTVCLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBaUIsSUFBSSxDQUFDLENBQUM7SUFDakQsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsR0FBRyxRQUFRLENBQXVCLElBQUksQ0FBQyxDQUFDO0lBRS9ELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUU7UUFDN0IsSUFBSSxLQUFLLElBQUksSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQy9CLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsR0FBRyxZQUFZLENBQUM7UUFDL0QsTUFBTSxNQUFNLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDeEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0lBQzVFLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUUxRCxNQUFNLHVCQUF1QixHQUFHLFdBQVcsQ0FDekMsQ0FBQyxDQUFtQyxFQUFFLEVBQUU7UUFDdEMsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUMvQixJQUFJLENBQUMsRUFBRTtZQUFFLE9BQU87UUFDaEIsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDeEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7UUFDMUQsSUFBSSxZQUFZLElBQUksQ0FBQztZQUFFLE9BQU87UUFDOUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDdkIsQ0FBQyxFQUNELElBQUksQ0FBQyxHQUFHLENBQ04sQ0FBQyxFQUNELENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLG1CQUFtQixDQUFDLEdBQUcsWUFBWSxDQUM3RCxDQUNGLENBQUM7UUFDRixRQUFRLENBQUM7WUFDUCxRQUFRO1lBQ1IsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUM7U0FDN0QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxFQUNELEVBQUUsQ0FDSCxDQUFDO0lBRUYsTUFBTSx3QkFBd0IsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFO1FBQ2hELFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUMvQixJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQztZQUFFLE9BQU87UUFFdEMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFhLEVBQVEsRUFBRTtZQUN0QyxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDN0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFMUQsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLFNBQVM7Z0JBQUUsT0FBTztZQUN6QyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFbkIsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDeEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7WUFDMUQsSUFBSSxZQUFZLElBQUksQ0FBQztnQkFBRSxPQUFPO1lBRTlCLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2xCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQzdCLENBQUMsRUFDRCxJQUFJLENBQUMsR0FBRyxDQUNOLENBQUMsRUFDRCxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLFlBQVksQ0FDN0QsQ0FDRixDQUFDO2dCQUNGLE1BQU0sV0FBVyxHQUFHLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUU1QyxXQUFXLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDbkIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO29CQUMzQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLGNBQWMsR0FBRyxZQUFZLENBQUM7b0JBQzlELDhEQUE4RDtvQkFDOUQsdURBQXVEO29CQUN2RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUMxQixlQUFlLEVBQ2YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFlBQVksR0FBRyxXQUFXLENBQUMsQ0FDcEQsQ0FBQztvQkFDRixPQUFPLFdBQVcsQ0FBQzt3QkFDakIsS0FBSyxFQUFFLFVBQVUsR0FBRyxjQUFjLEdBQUcsV0FBVzt3QkFDaEQsR0FBRyxFQUFFLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsR0FBRyxXQUFXO3FCQUNyRCxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxFQUFFLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3JELFdBQVcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO29CQUNuQixNQUFNLFNBQVMsR0FBRyxDQUFDLEVBQUUsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNoRSxPQUFPLFdBQVcsQ0FBQzt3QkFDakIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUzt3QkFDN0IsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUztxQkFDMUIsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQztRQUVGLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDMUQsT0FBTyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3hELENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFFOUMsT0FBTyxDQUNMLGVBQ0UsR0FBRyxFQUFFLFdBQVcsZUFDTixXQUFXLEVBQ3JCLFNBQVMsRUFBQyx3Q0FBd0MsYUFFbEQsZUFDRSxFQUFFLEVBQUMsY0FBYyxFQUNqQixTQUFTLEVBQUMsK0dBQStHLGFBRXpILEtBQUMsT0FBTyxJQUNOLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUNsQixJQUFJLEVBQUUsSUFBSSxFQUNWLFFBQVEsRUFBRSxRQUFRLEVBQ2xCLGFBQWEsRUFBRSxlQUFlLEVBQzlCLGdCQUFnQixFQUFFLFdBQVcsRUFDN0IsV0FBVyxFQUFFLFNBQVMsR0FDdEIsRUFDRixNQUFDLFNBQVMsSUFDUixrQkFBa0IsRUFBRSxrQkFBa0IsRUFDdEMsV0FBVyxFQUNULGVBQUssU0FBUyxFQUFDLG9HQUFvRyxhQUNqSCxLQUFDLE1BQU0sSUFBQyxTQUFTLEVBQUMsb0NBQW9DLEdBQUcsRUFDekQsZ0JBQ0UsRUFBRSxFQUFDLHFCQUFxQixFQUN4QixJQUFJLEVBQUMscUJBQXFCLEVBQzFCLElBQUksRUFBQyxNQUFNLEVBQ1gsS0FBSyxFQUFFLFdBQVcsRUFDbEIsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFDL0MsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7d0NBQ2YsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLFFBQVEsSUFBSSxXQUFXLEVBQUUsQ0FBQzs0Q0FDdEMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDOzRDQUNuQixDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7NENBQ3BCLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3Q0FDckIsQ0FBQztvQ0FDSCxDQUFDLEVBQ0QsV0FBVyxFQUFDLGlCQUFpQixnQkFDbEIsY0FBYyxFQUN6QixTQUFTLEVBQUMsNkZBQTZGLEdBQ3ZHLEVBQ0QsV0FBVyxJQUFJLENBQ2QsaUJBQ0UsSUFBSSxFQUFDLFFBQVEsZ0JBQ0YsY0FBYyxFQUN6QixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxFQUNqQyxTQUFTLEVBQUMsNFdBQTRXLFlBRXRYLEtBQUMsR0FBRyxJQUFDLE9BQU8sRUFBQyxTQUFTLEVBQUMsSUFBSSxFQUFDLFFBQVEsb0JBRTlCLEdBQ0MsQ0FDVixJQUNHLEVBRVIsU0FBUyxFQUNQLEtBQUMsY0FBYyxJQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFNBQVMsR0FBSSxhQUdoRSxlQUFLLFNBQVMsRUFBQyx3QkFBd0IsYUFDckMsS0FBQyxTQUFTLElBQ1IsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQ2xCLFlBQVksRUFBRSxZQUFZLEVBQzFCLFlBQVksRUFBRSxZQUFZLEVBQzFCLFlBQVksRUFBRSxnQkFBZ0IsR0FDOUIsRUFDRixjQUFLLEdBQUcsRUFBRSxtQkFBbUIsRUFBRSxTQUFTLEVBQUMscUJBQXFCLFlBQzNELGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FDZixlQUFLLFNBQVMsRUFBQyxtRUFBbUUsYUFDaEYsS0FBQyxPQUFPLElBQUMsSUFBSSxFQUFFLEVBQUUsR0FBSSxFQUNyQixpREFBMkIsSUFDdkIsQ0FDUCxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQ0osSUFDRixFQUVOLGNBQ0UsR0FBRyxFQUFFLFdBQVcsRUFDaEIsRUFBRSxFQUFDLGdCQUFnQixFQUNuQixTQUFTLEVBQUMsb0RBQW9ELEVBQzlELGFBQWEsRUFBRSxTQUFTLEVBQ3hCLFdBQVcsRUFBRSx1QkFBdUIsRUFDcEMsWUFBWSxFQUFFLHdCQUF3QixZQUV0QyxLQUFDLFFBQVEsSUFDUCxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFDbEIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQ3pCLE9BQU8sRUFBRSxRQUFRLENBQUMsR0FBRyxFQUNyQixPQUFPLEVBQUUsV0FBVyxFQUNwQixVQUFVLEVBQUUsWUFBWSxFQUN4QixZQUFZLEVBQUUsWUFBWSxFQUMxQixRQUFRLEVBQUUsZ0JBQWdCLEVBQzFCLFlBQVksRUFBRSxnQkFBZ0IsRUFDOUIsS0FBSyxFQUFFLEtBQUssRUFDWixPQUFPLEVBQUUsT0FBTyxHQUNoQixHQUNFLEVBQ04sOEJBQ0UsS0FBQyxtQkFBbUIsSUFDbEIsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUN4QyxhQUFhLEVBQUUsYUFBYSxHQUM1QixFQUNGLGVBQUssU0FBUyxFQUFDLDBKQUEwSixhQUN2SyxLQUFDLFVBQVUsSUFDVCxPQUFPLEVBQUMsT0FBTyxFQUNmLElBQUksRUFBQyxPQUFPLEVBQ1osT0FBTyxFQUFFLE9BQU8sRUFDaEIsUUFBUSxFQUFFLFdBQVcsZ0JBQ1YsVUFBVSxZQUVyQixLQUFDLE9BQU8sSUFBQyxTQUFTLEVBQUMsU0FBUyxHQUFHLEdBQ3BCLEVBQ2IsS0FBQyxVQUFVLElBQ1QsT0FBTyxFQUFDLE9BQU8sRUFDZixJQUFJLEVBQUMsT0FBTyxFQUNaLE9BQU8sRUFBRSxTQUFTLGdCQUNQLFlBQVksWUFFdkIsS0FBQyxTQUFTLElBQUMsU0FBUyxFQUFDLGFBQWEsR0FBRyxHQUMxQixFQUNiLEtBQUMsVUFBVSxJQUNULE9BQU8sRUFBQyxPQUFPLEVBQ2YsSUFBSSxFQUFDLE9BQU8sRUFDWixPQUFPLEVBQUUsTUFBTSxFQUNmLFFBQVEsRUFBRSxXQUFXLGdCQUNWLFNBQVMsWUFFcEIsS0FBQyxNQUFNLElBQUMsU0FBUyxFQUFDLFNBQVMsR0FBRyxHQUNuQixJQUNULElBQ0wsSUFDTyxJQUNSLEVBRU4sS0FBQyxnQkFBZ0IsSUFDZixZQUFZLEVBQUUsV0FBVyxFQUN6QixnQkFBZ0IsRUFBRSxjQUFjLEVBQ2hDLE9BQU8sRUFBRSxxQkFBcUIsR0FDOUIsSUFDRSxDQUNQLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyBSb3RhdGVDY3csIFNlYXJjaCwgWm9vbUluLCBab29tT3V0IH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB7XG4gIHR5cGUgUmVhY3ROb2RlLFxuICB1c2VDYWxsYmFjayxcbiAgdXNlRGVmZXJyZWRWYWx1ZSxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VMb2FkTW9yZU9uU2Nyb2xsIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlLWxvYWQtbW9yZS1vbi1zY3JvbGwnO1xuaW1wb3J0IHsgdXNlUmVkdWNlZE1vdGlvbiB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZS1yZWR1Y2VkLW1vdGlvbic7XG5pbXBvcnQge1xuICBmb3JtYXREdXJhdGlvblByZWNpc2UsXG4gIGdldEhpZ2hSZXNJbk1zLFxufSBmcm9tICcuLi90cmFjZS12aWV3ZXIvdXRpbC90aW1pbmcnO1xuaW1wb3J0IHsgSWNvbkJ1dHRvbiB9IGZyb20gJy4uL3VpL2ljb24tYnV0dG9uJztcbmltcG9ydCB7IEtiZCB9IGZyb20gJy4uL3VpL2tiZCc7XG5pbXBvcnQgeyBTcGlubmVyIH0gZnJvbSAnLi4vdWkvc3Bpbm5lcic7XG5pbXBvcnQgeyBUb29sdGlwUHJvdmlkZXIgfSBmcm9tICcuLi91aS90b29sdGlwJztcbmltcG9ydCB7IFRyYWNlRGV0YWlsUGFuZWwgfSBmcm9tICcuL2NvbXBvbmVudHMvZGV0YWlsLXBhbmVsJztcbmltcG9ydCBFdmVudExpc3QgZnJvbSAnLi9jb21wb25lbnRzL2V2ZW50LWxpc3QnO1xuaW1wb3J0IHsgTWluaW1hcCB9IGZyb20gJy4vY29tcG9uZW50cy9taW5pbWFwJztcbmltcG9ydCB7IFNwbGl0UGFuZSB9IGZyb20gJy4vY29tcG9uZW50cy9zcGxpdC1wYW5lJztcbmltcG9ydCB7XG4gIFRJTUVMSU5FX1BBRERJTkdfUFgsXG4gIFRpbWVsaW5lLFxuICBUaW1lbGluZUhlYWRlcixcbiAgdHlwZSBUaW1lbGluZUhvdmVyLFxufSBmcm9tICcuL2NvbXBvbmVudHMvdGltZWxpbmUnO1xuaW1wb3J0IHsgVHJhY2VTaG9ydGN1dEhlbHBlciB9IGZyb20gJy4vY29tcG9uZW50cy90cmFjZS1zaG9ydGN1dC1oZWxwZXInO1xuaW1wb3J0IHsgUk9XX0hFSUdIVF9QWCwgc2Nyb2xsUm93SW50b1ZpZXcgfSBmcm9tICcuL2NvbXBvbmVudHMvdXNlLXJvdy13aW5kb3cnO1xuaW1wb3J0IHsgQWN0aXZlU3BhblByb3ZpZGVyLCB1c2VBY3RpdmVTcGFuIH0gZnJvbSAnLi9jb250ZXh0JztcbmltcG9ydCB7IHNlYXJjaFNwYW5zIH0gZnJvbSAnLi9zZWFyY2gnO1xuaW1wb3J0IHR5cGUgeyBUcmFjZVdpdGhNZXRhIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge1xuICBjbGFtcFZpZXdwb3J0VG9Sb290LFxuICBjb21wdXRlUm9vdEJvdW5kcyxcbiAgY29tcHV0ZVRpbWVNYXJrZXJzLFxuICB0eXBlIFZpZXdwb3J0UmFuZ2UsXG4gIHdoZWVsRGVsdGFUb1BpeGVscyxcbiAgd2hlZWxab29tU2NhbGVGYWN0b3IsXG59IGZyb20gJy4vdXRpbHMnO1xuXG5pbnRlcmZhY2UgTmV3VHJhY2VWaWV3ZXJQcm9wcyB7XG4gIHRyYWNlOiBUcmFjZVdpdGhNZXRhO1xuICBvbkxvYWRNb3JlPzogKCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gIGhhc01vcmU/OiBib29sZWFuO1xuICBpc0xvYWRpbmdNb3JlPzogYm9vbGVhbjtcbn1cblxuY29uc3QgTUlOX1ZJRVdQT1JUX01TID0gMC4wMDE7XG5cbmNvbnN0IFpPT01fREVCT1VOQ0VfTVMgPSAxNTA7XG5cbmZ1bmN0aW9uIHVzZUFuaW1hdGVkVmlld3BvcnQoaW5pdGlhbDogVmlld3BvcnRSYW5nZSkge1xuICBjb25zdCBbdmlld3BvcnQsIHNldFZpZXdwb3J0U3RhdGVdID0gdXNlU3RhdGU8Vmlld3BvcnRSYW5nZT4oaW5pdGlhbCk7XG4gIGNvbnN0IGFuaW1SZWYgPSB1c2VSZWY8e1xuICAgIHJhZjogbnVtYmVyO1xuICAgIGZyb206IFZpZXdwb3J0UmFuZ2U7XG4gICAgdG86IFZpZXdwb3J0UmFuZ2U7XG4gICAgc3RhcnQ6IG51bWJlcjtcbiAgfSB8IG51bGw+KG51bGwpO1xuICBjb25zdCBjdXJyZW50UmVmID0gdXNlUmVmKGluaXRpYWwpO1xuICBjdXJyZW50UmVmLmN1cnJlbnQgPSB2aWV3cG9ydDtcbiAgY29uc3QgcmVkdWNlZE1vdGlvbiA9IHVzZVJlZHVjZWRNb3Rpb24oKTtcblxuICBjb25zdCBjYW5jZWwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGFuaW1SZWYuY3VycmVudCkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoYW5pbVJlZi5jdXJyZW50LnJhZik7XG4gICAgICBhbmltUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfSwgW10pO1xuXG4gIGNvbnN0IGFuaW1hdGVUbyA9IHVzZUNhbGxiYWNrKFxuICAgICh0YXJnZXQ6IFZpZXdwb3J0UmFuZ2UpID0+IHtcbiAgICAgIGNhbmNlbCgpO1xuXG4gICAgICBpZiAocmVkdWNlZE1vdGlvbikge1xuICAgICAgICBjdXJyZW50UmVmLmN1cnJlbnQgPSB0YXJnZXQ7XG4gICAgICAgIHNldFZpZXdwb3J0U3RhdGUodGFyZ2V0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmcm9tID0gY3VycmVudFJlZi5jdXJyZW50O1xuICAgICAgY29uc3QgYW5pbSA9IHsgcmFmOiAwLCBmcm9tLCB0bzogdGFyZ2V0LCBzdGFydDogcGVyZm9ybWFuY2Uubm93KCkgfTtcblxuICAgICAgY29uc3QgdGljayA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgdCA9IE1hdGgubWluKChwZXJmb3JtYW5jZS5ub3coKSAtIGFuaW0uc3RhcnQpIC8gMjQwLCAxKTtcbiAgICAgICAgY29uc3QgZSA9IHQgPCAwLjUgPyA4ICogdCAqIHQgKiB0ICogdCA6IDEgLSAoLTIgKiB0ICsgMikgKiogNCAvIDI7XG4gICAgICAgIHNldFZpZXdwb3J0U3RhdGUoe1xuICAgICAgICAgIHN0YXJ0OiBhbmltLmZyb20uc3RhcnQgKyAoYW5pbS50by5zdGFydCAtIGFuaW0uZnJvbS5zdGFydCkgKiBlLFxuICAgICAgICAgIGVuZDogYW5pbS5mcm9tLmVuZCArIChhbmltLnRvLmVuZCAtIGFuaW0uZnJvbS5lbmQpICogZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0IDwgMSkgYW5pbS5yYWYgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7XG4gICAgICAgIGVsc2UgYW5pbVJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIGFuaW1SZWYuY3VycmVudCA9IGFuaW07XG4gICAgICBhbmltLnJhZiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTtcbiAgICB9LFxuICAgIFtjYW5jZWwsIHJlZHVjZWRNb3Rpb25dXG4gICk7XG5cbiAgY29uc3Qgc2V0Vmlld3BvcnQgPSB1c2VDYWxsYmFjayhcbiAgICAodXBkYXRlOiBWaWV3cG9ydFJhbmdlIHwgKChwcmV2OiBWaWV3cG9ydFJhbmdlKSA9PiBWaWV3cG9ydFJhbmdlKSkgPT4ge1xuICAgICAgY2FuY2VsKCk7XG4gICAgICBpZiAodHlwZW9mIHVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBzZXRWaWV3cG9ydFN0YXRlKChwcmV2KSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV4dCA9IHVwZGF0ZShwcmV2KTtcbiAgICAgICAgICBjdXJyZW50UmVmLmN1cnJlbnQgPSBuZXh0O1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnRSZWYuY3VycmVudCA9IHVwZGF0ZTtcbiAgICAgICAgc2V0Vmlld3BvcnRTdGF0ZSh1cGRhdGUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2NhbmNlbF1cbiAgKTtcblxuICB1c2VFZmZlY3QoKCkgPT4gY2FuY2VsLCBbY2FuY2VsXSk7XG5cbiAgcmV0dXJuIHsgdmlld3BvcnQsIHNldFZpZXdwb3J0LCBhbmltYXRlVG8gfTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSb290IGNvbXBvbmVudFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBmdW5jdGlvbiBOZXdUcmFjZVZpZXdlcih7XG4gIHRyYWNlLFxuICBvbkxvYWRNb3JlLFxuICBoYXNNb3JlLFxuICBpc0xvYWRpbmdNb3JlLFxufTogTmV3VHJhY2VWaWV3ZXJQcm9wcyk6IFJlYWN0Tm9kZSB7XG4gIHJldHVybiAoXG4gICAgPFRvb2x0aXBQcm92aWRlciBkZWxheUR1cmF0aW9uPXszMDB9PlxuICAgICAgPEFjdGl2ZVNwYW5Qcm92aWRlciBzcGFucz17dHJhY2Uuc3BhbnN9PlxuICAgICAgICA8TmV3VHJhY2VWaWV3ZXJDb250ZW50XG4gICAgICAgICAgdHJhY2U9e3RyYWNlfVxuICAgICAgICAgIG9uTG9hZE1vcmU9e29uTG9hZE1vcmV9XG4gICAgICAgICAgaGFzTW9yZT17aGFzTW9yZX1cbiAgICAgICAgICBpc0xvYWRpbmdNb3JlPXtpc0xvYWRpbmdNb3JlfVxuICAgICAgICAvPlxuICAgICAgPC9BY3RpdmVTcGFuUHJvdmlkZXI+XG4gICAgPC9Ub29sdGlwUHJvdmlkZXI+XG4gICk7XG59XG5cbmZ1bmN0aW9uIE5ld1RyYWNlVmlld2VyQ29udGVudCh7XG4gIHRyYWNlLFxuICBvbkxvYWRNb3JlLFxuICBoYXNNb3JlLFxuICBpc0xvYWRpbmdNb3JlLFxufTogTmV3VHJhY2VWaWV3ZXJQcm9wcyk6IFJlYWN0Tm9kZSB7XG4gIGNvbnN0IHsgYWN0aXZlU3BhbklkLCBzZXRBY3RpdmVTcGFuLCBjbGVhckFjdGl2ZVNwYW4gfSA9IHVzZUFjdGl2ZVNwYW4oKTtcblxuICBjb25zdCByZWR1Y2VkTW90aW9uID0gdXNlUmVkdWNlZE1vdGlvbigpO1xuXG4gIGNvbnN0IFtzZWFyY2hRdWVyeSwgc2V0U2VhcmNoUXVlcnldID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCBkZWZlcnJlZFNlYXJjaFF1ZXJ5ID0gdXNlRGVmZXJyZWRWYWx1ZShzZWFyY2hRdWVyeSk7XG5cbiAgY29uc3QgcGFuZVJvb3RSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuXG4gIGNvbnN0IHNlYXJjaFJlc3VsdCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gc2VhcmNoU3BhbnModHJhY2Uuc3BhbnMsIGRlZmVycmVkU2VhcmNoUXVlcnkpLFxuICAgIFt0cmFjZS5zcGFucywgZGVmZXJyZWRTZWFyY2hRdWVyeV1cbiAgKTtcblxuICBjb25zdCByb290ID0gdXNlTWVtbygoKSA9PiBjb21wdXRlUm9vdEJvdW5kcyh0cmFjZS5zcGFucyksIFt0cmFjZS5zcGFuc10pO1xuXG4gIGNvbnN0IHNjcm9sbENvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGxvYWRNb3JlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHZvaWQgb25Mb2FkTW9yZT8uKCk7XG4gIH0sIFtvbkxvYWRNb3JlXSk7XG4gIGNvbnN0IGxvYWRNb3JlU2VudGluZWxSZWYgPSB1c2VMb2FkTW9yZU9uU2Nyb2xsKGxvYWRNb3JlLCB7XG4gICAgaGFzTW9yZTogQm9vbGVhbihvbkxvYWRNb3JlICYmIGhhc01vcmUpLFxuICAgIGlzTG9hZGluZ01vcmU6IEJvb2xlYW4oaXNMb2FkaW5nTW9yZSksXG4gICAgcm9vdFJlZjogc2Nyb2xsQ29udGFpbmVyUmVmLFxuICB9KTtcblxuICBjb25zdCB7IHZpZXdwb3J0LCBzZXRWaWV3cG9ydCwgYW5pbWF0ZVRvIH0gPSB1c2VBbmltYXRlZFZpZXdwb3J0KHtcbiAgICBzdGFydDogcm9vdC5zdGFydFRpbWUsXG4gICAgZW5kOiByb290LnN0YXJ0VGltZSArIHJvb3QuZHVyYXRpb24sXG4gIH0pO1xuXG4gIGNvbnN0IHByZXZSb290UmVmID0gdXNlUmVmPFZpZXdwb3J0UmFuZ2U+KHtcbiAgICBzdGFydDogcm9vdC5zdGFydFRpbWUsXG4gICAgZW5kOiByb290LnN0YXJ0VGltZSArIHJvb3QuZHVyYXRpb24sXG4gIH0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcHJldlJvb3QgPSBwcmV2Um9vdFJlZi5jdXJyZW50O1xuICAgIGNvbnN0IG5ld1N0YXJ0ID0gcm9vdC5zdGFydFRpbWU7XG4gICAgY29uc3QgbmV3RW5kID0gcm9vdC5zdGFydFRpbWUgKyByb290LmR1cmF0aW9uO1xuXG4gICAgc2V0Vmlld3BvcnQoKHByZXYpID0+IHtcbiAgICAgIGNvbnN0IHdhc0F0RnVsbEV4dGVudCA9XG4gICAgICAgIE1hdGguYWJzKHByZXYuc3RhcnQgLSBwcmV2Um9vdC5zdGFydCkgPCAwLjAxICYmXG4gICAgICAgIE1hdGguYWJzKHByZXYuZW5kIC0gcHJldlJvb3QuZW5kKSA8IDAuMDE7XG5cbiAgICAgIGlmICh3YXNBdEZ1bGxFeHRlbnQpIHtcbiAgICAgICAgcmV0dXJuIHsgc3RhcnQ6IG5ld1N0YXJ0LCBlbmQ6IG5ld0VuZCB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHByZXY7XG4gICAgfSk7XG5cbiAgICBwcmV2Um9vdFJlZi5jdXJyZW50ID0geyBzdGFydDogbmV3U3RhcnQsIGVuZDogbmV3RW5kIH07XG4gIH0sIFtyb290LnN0YXJ0VGltZSwgcm9vdC5kdXJhdGlvbiwgc2V0Vmlld3BvcnRdKTtcblxuICBjb25zdCB2aWV3RHVyYXRpb24gPSB2aWV3cG9ydC5lbmQgLSB2aWV3cG9ydC5zdGFydDtcblxuICAvLyBLZWVwIGEgcmVmIHRvIHRoZSBsaXZlIHZpZXdwb3J0IHNvIHRoZSByZXZlYWwgY2FsbGJhY2sgY2FuIHJlYWQgdGhlIGN1cnJlbnRcbiAgLy8gem9vbSB3aXRob3V0IGJlaW5nIHJlY3JlYXRlZCBvbiBldmVyeSBwYW4gKHdoaWNoIHdvdWxkIGJ1c3QgVGltZWxpbmVCYXInc1xuICAvLyBtZW1vIGFuZCByZS1yZW5kZXIgZXZlcnkgcm93IGVhY2ggYW5pbWF0aW9uIGZyYW1lKS5cbiAgY29uc3Qgdmlld3BvcnRSZWYgPSB1c2VSZWYodmlld3BvcnQpO1xuICB2aWV3cG9ydFJlZi5jdXJyZW50ID0gdmlld3BvcnQ7XG5cbiAgY29uc3QgdGltZU1hcmtlcnMgPSB1c2VNZW1vKFxuICAgICgpID0+IGNvbXB1dGVUaW1lTWFya2Vycyh2aWV3RHVyYXRpb24sIHZpZXdwb3J0LnN0YXJ0IC0gcm9vdC5zdGFydFRpbWUpLFxuICAgIFt2aWV3RHVyYXRpb24sIHZpZXdwb3J0LnN0YXJ0LCByb290LnN0YXJ0VGltZV1cbiAgKTtcblxuICBjb25zdCByZXNldFpvb20gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgYW5pbWF0ZVRvKHsgc3RhcnQ6IHJvb3Quc3RhcnRUaW1lLCBlbmQ6IHJvb3Quc3RhcnRUaW1lICsgcm9vdC5kdXJhdGlvbiB9KTtcbiAgfSwgW2FuaW1hdGVUbywgcm9vdC5zdGFydFRpbWUsIHJvb3QuZHVyYXRpb25dKTtcblxuICBjb25zdCBjbGFtcFRvUm9vdCA9IHVzZUNhbGxiYWNrKFxuICAgIChuZXh0OiBWaWV3cG9ydFJhbmdlKTogVmlld3BvcnRSYW5nZSA9PlxuICAgICAgY2xhbXBWaWV3cG9ydFRvUm9vdChuZXh0LCByb290LnN0YXJ0VGltZSwgcm9vdC5lbmRUaW1lLCBNSU5fVklFV1BPUlRfTVMpLFxuICAgIFtyb290LnN0YXJ0VGltZSwgcm9vdC5lbmRUaW1lXVxuICApO1xuXG4gIC8vIFBhbiAoa2VlcGluZyB0aGUgY3VycmVudCB6b29tKSBzbyBgdGltZU1zYCBpcyBjZW50ZXJlZCBpbiB2aWV3IOKAlCB1c2VkIGJ5IHRoZVxuICAvLyBvZmYtc2NyZWVuIG1hcmtlciBpbmRpY2F0b3JzIHRvIHNjcm9sbCB0aGVpciBtYXJrZXIgaW50byB2aWV3LlxuICBjb25zdCBoYW5kbGVSZXZlYWxUaW1lID0gdXNlQ2FsbGJhY2soXG4gICAgKHRpbWVNczogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IHZpZXdwb3J0UmVmLmN1cnJlbnQ7XG4gICAgICBjb25zdCBkdXJhdGlvbiA9IGVuZCAtIHN0YXJ0O1xuICAgICAgYW5pbWF0ZVRvKFxuICAgICAgICBjbGFtcFRvUm9vdCh7XG4gICAgICAgICAgc3RhcnQ6IHRpbWVNcyAtIGR1cmF0aW9uIC8gMixcbiAgICAgICAgICBlbmQ6IHRpbWVNcyArIGR1cmF0aW9uIC8gMixcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSxcbiAgICBbYW5pbWF0ZVRvLCBjbGFtcFRvUm9vdF1cbiAgKTtcblxuICBjb25zdCBaT09NX0ZBQ1RPUiA9IDAuNTtcblxuICBjb25zdCB6b29tQnkgPSB1c2VDYWxsYmFjayhcbiAgICAoZmFjdG9yOiBudW1iZXIpID0+IHtcbiAgICAgIHNldFZpZXdwb3J0KChwcmV2KSA9PiB7XG4gICAgICAgIGNvbnN0IGNlbnRlciA9IChwcmV2LnN0YXJ0ICsgcHJldi5lbmQpIC8gMjtcbiAgICAgICAgY29uc3QgbmV3RHVyYXRpb24gPSBNYXRoLm1heChcbiAgICAgICAgICBNSU5fVklFV1BPUlRfTVMsXG4gICAgICAgICAgKHByZXYuZW5kIC0gcHJldi5zdGFydCkgKiBmYWN0b3JcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGNsYW1wVG9Sb290KHtcbiAgICAgICAgICBzdGFydDogY2VudGVyIC0gbmV3RHVyYXRpb24gLyAyLFxuICAgICAgICAgIGVuZDogY2VudGVyICsgbmV3RHVyYXRpb24gLyAyLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW3NldFZpZXdwb3J0LCBjbGFtcFRvUm9vdF1cbiAgKTtcblxuICBjb25zdCB6b29tSW4gPSB1c2VDYWxsYmFjaygoKSA9PiB6b29tQnkoWk9PTV9GQUNUT1IpLCBbem9vbUJ5XSk7XG4gIGNvbnN0IHpvb21PdXQgPSB1c2VDYWxsYmFjaygoKSA9PiB6b29tQnkoMSAvIFpPT01fRkFDVE9SKSwgW3pvb21CeV0pO1xuICBjb25zdCBpc0F0TWluWm9vbSA9IHZpZXdEdXJhdGlvbiA+PSByb290LmR1cmF0aW9uO1xuICBjb25zdCBpc0F0TWF4Wm9vbSA9IHZpZXdEdXJhdGlvbiA8PSBNSU5fVklFV1BPUlRfTVM7XG5cbiAgY29uc3QgZm9jdXNWaWV3cG9ydE9uU3BhbiA9IHVzZUNhbGxiYWNrKFxuICAgIChzcGFuSWQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3Qgc3BhbiA9IHRyYWNlLnNwYW5zLmZpbmQoKHMpID0+IHMuc3BhbklkID09PSBzcGFuSWQpO1xuICAgICAgaWYgKCFzcGFuKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHNwYW5TdGFydCA9IGdldEhpZ2hSZXNJbk1zKHNwYW4uc3RhcnRUaW1lKTtcbiAgICAgIGNvbnN0IHNwYW5FbmQgPSBnZXRIaWdoUmVzSW5NcyhzcGFuLmVuZFRpbWUpO1xuICAgICAgY29uc3Qgc3BhbkR1cmF0aW9uID0gc3BhbkVuZCAtIHNwYW5TdGFydDtcblxuICAgICAgaWYgKHNwYW5EdXJhdGlvbiA+IHJvb3QuZHVyYXRpb24gKiAwLjgpIHtcbiAgICAgICAgYW5pbWF0ZVRvKHsgc3RhcnQ6IHJvb3Quc3RhcnRUaW1lLCBlbmQ6IHJvb3QuZW5kVGltZSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYWRkaW5nID0gTWF0aC5tYXgoc3BhbkR1cmF0aW9uICogMC4yLCBNSU5fVklFV1BPUlRfTVMgLyAyKTtcbiAgICAgIGxldCBuZXdTdGFydCA9IHNwYW5TdGFydCAtIHBhZGRpbmc7XG4gICAgICBsZXQgbmV3RW5kID0gc3BhbkVuZCArIHBhZGRpbmc7XG5cbiAgICAgIGlmIChuZXdFbmQgLSBuZXdTdGFydCA8IE1JTl9WSUVXUE9SVF9NUykge1xuICAgICAgICBjb25zdCBjZW50ZXIgPSAoc3BhblN0YXJ0ICsgc3BhbkVuZCkgLyAyO1xuICAgICAgICBuZXdTdGFydCA9IGNlbnRlciAtIE1JTl9WSUVXUE9SVF9NUyAvIDI7XG4gICAgICAgIG5ld0VuZCA9IGNlbnRlciArIE1JTl9WSUVXUE9SVF9NUyAvIDI7XG4gICAgICB9XG5cbiAgICAgIGFuaW1hdGVUbyhjbGFtcFRvUm9vdCh7IHN0YXJ0OiBuZXdTdGFydCwgZW5kOiBuZXdFbmQgfSkpO1xuICAgIH0sXG4gICAgW1xuICAgICAgYW5pbWF0ZVRvLFxuICAgICAgdHJhY2Uuc3BhbnMsXG4gICAgICByb290LnN0YXJ0VGltZSxcbiAgICAgIHJvb3QuZW5kVGltZSxcbiAgICAgIHJvb3QuZHVyYXRpb24sXG4gICAgICBjbGFtcFRvUm9vdCxcbiAgICBdXG4gICk7XG5cbiAgLy8gQnJpbmcgYSByb3cgaW50byB2aWV3IHdoZW4ga2V5Ym9hcmQvYnV0dG9uIG5hdmlnYXRpb24gbGFuZHMgb24gYSBzcGFuIHRoYXRcbiAgLy8gc2l0cyBvdXRzaWRlIHRoZSBzaGFyZWQgc2Nyb2xsIGNvbnRhaW5lcidzIHZpc2libGUgYXJlYS4gVGhlIGxpc3QgaXNcbiAgLy8gd2luZG93ZWQsIHNvIGFuIG9mZi1zY3JlZW4gcm93IGhhcyBubyBET00gbm9kZSB0byBgc2Nyb2xsSW50b1ZpZXdgIOKAlFxuICAvLyBgc2Nyb2xsUm93SW50b1ZpZXdgIGNvbXB1dGVzIHRoZSB0YXJnZXQgb2Zmc2V0IGZyb20gdGhlIHNwYW4ncyBpbmRleC5cbiAgY29uc3Qgc2Nyb2xsU3BhbkludG9WaWV3ID0gdXNlQ2FsbGJhY2soXG4gICAgKHNwYW5JZDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IHRyYWNlLnNwYW5zLmZpbmRJbmRleCgocykgPT4gcy5zcGFuSWQgPT09IHNwYW5JZCk7XG4gICAgICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGxpc3QgPVxuICAgICAgICBzY3JvbGxDb250YWluZXJSZWYuY3VycmVudD8ucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oJyNldmVudC1saXN0JykgPz9cbiAgICAgICAgbnVsbDtcbiAgICAgIHNjcm9sbFJvd0ludG9WaWV3KGxpc3QsIGluZGV4LCBST1dfSEVJR0hUX1BYLCB7XG4gICAgICAgIGJlaGF2aW9yOiByZWR1Y2VkTW90aW9uID8gJ2F1dG8nIDogJ3Ntb290aCcsXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFt0cmFjZS5zcGFucywgcmVkdWNlZE1vdGlvbl1cbiAgKTtcblxuICBjb25zdCB6b29tVGltZXJSZWYgPSB1c2VSZWY8UmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsPihudWxsKTtcbiAgY29uc3QgY2FuY2VsUGVuZGluZ1pvb20gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHpvb21UaW1lclJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQoem9vbVRpbWVyUmVmLmN1cnJlbnQpO1xuICAgICAgem9vbVRpbWVyUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfSwgW10pO1xuICB1c2VFZmZlY3QoKCkgPT4gY2FuY2VsUGVuZGluZ1pvb20sIFtjYW5jZWxQZW5kaW5nWm9vbV0pO1xuXG4gIGNvbnN0IGhhbmRsZUNsZWFyQWN0aXZlU3BhbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjYW5jZWxQZW5kaW5nWm9vbSgpO1xuICAgIGNsZWFyQWN0aXZlU3BhbigpO1xuICB9LCBbY2FuY2VsUGVuZGluZ1pvb20sIGNsZWFyQWN0aXZlU3Bhbl0pO1xuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdFNwYW4gPSB1c2VDYWxsYmFjayhcbiAgICAoc3BhbklkOiBzdHJpbmcpID0+IHtcbiAgICAgIGNhbmNlbFBlbmRpbmdab29tKCk7XG4gICAgICBpZiAoc3BhbklkID09PSBhY3RpdmVTcGFuSWQpIHtcbiAgICAgICAgY2xlYXJBY3RpdmVTcGFuKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNldEFjdGl2ZVNwYW4oc3BhbklkKTtcbiAgICAgIGZvY3VzVmlld3BvcnRPblNwYW4oc3BhbklkKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIGNhbmNlbFBlbmRpbmdab29tLFxuICAgICAgYWN0aXZlU3BhbklkLFxuICAgICAgY2xlYXJBY3RpdmVTcGFuLFxuICAgICAgc2V0QWN0aXZlU3BhbixcbiAgICAgIGZvY3VzVmlld3BvcnRPblNwYW4sXG4gICAgXVxuICApO1xuXG4gIGNvbnN0IG5hdmlnYXRlVG9TcGFuID0gdXNlQ2FsbGJhY2soXG4gICAgKHNwYW5JZDogc3RyaW5nKSA9PiB7XG4gICAgICBzZXRBY3RpdmVTcGFuKHNwYW5JZCk7XG4gICAgICBzY3JvbGxTcGFuSW50b1ZpZXcoc3BhbklkKTtcbiAgICAgIGNhbmNlbFBlbmRpbmdab29tKCk7XG4gICAgICB6b29tVGltZXJSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB6b29tVGltZXJSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgIGZvY3VzVmlld3BvcnRPblNwYW4oc3BhbklkKTtcbiAgICAgIH0sIFpPT01fREVCT1VOQ0VfTVMpO1xuICAgIH0sXG4gICAgW3NldEFjdGl2ZVNwYW4sIHNjcm9sbFNwYW5JbnRvVmlldywgY2FuY2VsUGVuZGluZ1pvb20sIGZvY3VzVmlld3BvcnRPblNwYW5dXG4gICk7XG5cbiAgY29uc3QgW2FsdEhlbGQsIHNldEFsdEhlbGRdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb25LZXlEb3duID0gKGU6IEtleWJvYXJkRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgaGFuZGxlQ2xlYXJBY3RpdmVTcGFuKCk7XG4gICAgICB9IGVsc2UgaWYgKGUua2V5ID09PSAnQWx0Jykge1xuICAgICAgICBzZXRBbHRIZWxkKHRydWUpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgb25LZXlVcCA9IChlOiBLZXlib2FyZEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBpZiAoZS5rZXkgPT09ICdBbHQnKSBzZXRBbHRIZWxkKGZhbHNlKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uQmx1ciA9ICgpOiB2b2lkID0+IHNldEFsdEhlbGQoZmFsc2UpO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvbktleURvd24pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIG9uS2V5VXApO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgb25CbHVyKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvbktleURvd24pO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgb25LZXlVcCk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmx1cicsIG9uQmx1cik7XG4gICAgfTtcbiAgfSwgW2hhbmRsZUNsZWFyQWN0aXZlU3Bhbl0pO1xuXG4gIGNvbnN0IHRpbWVsaW5lUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgW2hvdmVyLCBzZXRIb3Zlcl0gPSB1c2VTdGF0ZTxUaW1lbGluZUhvdmVyIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3QgaG92ZXJJbmZvID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGhvdmVyID09IG51bGwpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGFic1RpbWUgPSB2aWV3cG9ydC5zdGFydCArIGhvdmVyLmZyYWN0aW9uICogdmlld0R1cmF0aW9uO1xuICAgIGNvbnN0IG9mZnNldCA9IGFic1RpbWUgLSByb290LnN0YXJ0VGltZTtcbiAgICByZXR1cm4geyBmcmFjdGlvbjogaG92ZXIuZnJhY3Rpb24sIGxhYmVsOiBmb3JtYXREdXJhdGlvblByZWNpc2Uob2Zmc2V0KSB9O1xuICB9LCBbaG92ZXIsIHZpZXdwb3J0LnN0YXJ0LCB2aWV3RHVyYXRpb24sIHJvb3Quc3RhcnRUaW1lXSk7XG5cbiAgY29uc3QgaGFuZGxlVGltZWxpbmVNb3VzZU1vdmUgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuTW91c2VFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IGVsID0gdGltZWxpbmVSZWYuY3VycmVudDtcbiAgICAgIGlmICghZWwpIHJldHVybjtcbiAgICAgIGNvbnN0IHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9IHJlY3Qud2lkdGggLSBUSU1FTElORV9QQURESU5HX1BYICogMjtcbiAgICAgIGlmIChjb250ZW50V2lkdGggPD0gMCkgcmV0dXJuO1xuICAgICAgY29uc3QgZnJhY3Rpb24gPSBNYXRoLm1heChcbiAgICAgICAgMCxcbiAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgMSxcbiAgICAgICAgICAoZS5jbGllbnRYIC0gcmVjdC5sZWZ0IC0gVElNRUxJTkVfUEFERElOR19QWCkgLyBjb250ZW50V2lkdGhcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHNldEhvdmVyKHtcbiAgICAgICAgZnJhY3Rpb24sXG4gICAgICAgIHJvd0luZGV4OiBNYXRoLmZsb29yKChlLmNsaWVudFkgLSByZWN0LnRvcCkgLyBST1dfSEVJR0hUX1BYKSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVUaW1lbGluZU1vdXNlTGVhdmUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0SG92ZXIobnVsbCk7XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gdGltZWxpbmVSZWYuY3VycmVudDtcbiAgICBpZiAoIWVsIHx8IHJvb3QuZHVyYXRpb24gPD0gMCkgcmV0dXJuO1xuXG4gICAgY29uc3Qgb25XaGVlbCA9IChlOiBXaGVlbEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBpc1pvb21HZXN0dXJlID0gZS5jdHJsS2V5IHx8IGUubWV0YUtleTtcbiAgICAgIGNvbnN0IGhhc0RlbHRhWCA9IE1hdGguYWJzKGUuZGVsdGFYKSA+IE1hdGguYWJzKGUuZGVsdGFZKTtcblxuICAgICAgaWYgKCFpc1pvb21HZXN0dXJlICYmICFoYXNEZWx0YVgpIHJldHVybjtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgY29uc3QgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgY29udGVudFdpZHRoID0gcmVjdC53aWR0aCAtIFRJTUVMSU5FX1BBRERJTkdfUFggKiAyO1xuICAgICAgaWYgKGNvbnRlbnRXaWR0aCA8PSAwKSByZXR1cm47XG5cbiAgICAgIGlmIChpc1pvb21HZXN0dXJlKSB7XG4gICAgICAgIGNvbnN0IGN1cnNvckZyYWN0aW9uID0gTWF0aC5tYXgoXG4gICAgICAgICAgMCxcbiAgICAgICAgICBNYXRoLm1pbihcbiAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAoZS5jbGllbnRYIC0gcmVjdC5sZWZ0IC0gVElNRUxJTkVfUEFERElOR19QWCkgLyBjb250ZW50V2lkdGhcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHNjYWxlRmFjdG9yID0gd2hlZWxab29tU2NhbGVGYWN0b3IoZSk7XG5cbiAgICAgICAgc2V0Vmlld3BvcnQoKHByZXYpID0+IHtcbiAgICAgICAgICBjb25zdCBwcmV2RHVyYXRpb24gPSBwcmV2LmVuZCAtIHByZXYuc3RhcnQ7XG4gICAgICAgICAgY29uc3QgY3Vyc29yVGltZSA9IHByZXYuc3RhcnQgKyBjdXJzb3JGcmFjdGlvbiAqIHByZXZEdXJhdGlvbjtcbiAgICAgICAgICAvLyBDbGFtcCB0aGUgZHVyYXRpb24gYmVmb3JlIGFuY2hvcmluZyBzbyB0aGUgY3Vyc29yIGtlZXBzIGl0c1xuICAgICAgICAgIC8vIGZyYWN0aW9uIGV2ZW4gd2hlbiB0aGUgem9vbSBoaXRzIHRoZSBtaW4vbWF4IGJvdW5kcy5cbiAgICAgICAgICBjb25zdCBuZXdEdXJhdGlvbiA9IE1hdGgubWF4KFxuICAgICAgICAgICAgTUlOX1ZJRVdQT1JUX01TLFxuICAgICAgICAgICAgTWF0aC5taW4ocm9vdC5kdXJhdGlvbiwgcHJldkR1cmF0aW9uICogc2NhbGVGYWN0b3IpXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gY2xhbXBUb1Jvb3Qoe1xuICAgICAgICAgICAgc3RhcnQ6IGN1cnNvclRpbWUgLSBjdXJzb3JGcmFjdGlvbiAqIG5ld0R1cmF0aW9uLFxuICAgICAgICAgICAgZW5kOiBjdXJzb3JUaW1lICsgKDEgLSBjdXJzb3JGcmFjdGlvbikgKiBuZXdEdXJhdGlvbixcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBkeCA9IHdoZWVsRGVsdGFUb1BpeGVscyhlLmRlbHRhWCwgZS5kZWx0YU1vZGUpO1xuICAgICAgICBzZXRWaWV3cG9ydCgocHJldikgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhbkFtb3VudCA9IChkeCAvIGNvbnRlbnRXaWR0aCkgKiAocHJldi5lbmQgLSBwcmV2LnN0YXJ0KTtcbiAgICAgICAgICByZXR1cm4gY2xhbXBUb1Jvb3Qoe1xuICAgICAgICAgICAgc3RhcnQ6IHByZXYuc3RhcnQgKyBwYW5BbW91bnQsXG4gICAgICAgICAgICBlbmQ6IHByZXYuZW5kICsgcGFuQW1vdW50LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBvbldoZWVsLCB7IHBhc3NpdmU6IGZhbHNlIH0pO1xuICAgIHJldHVybiAoKSA9PiBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCd3aGVlbCcsIG9uV2hlZWwpO1xuICB9LCBbcm9vdC5kdXJhdGlvbiwgc2V0Vmlld3BvcnQsIGNsYW1wVG9Sb290XSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e3BhbmVSb290UmVmfVxuICAgICAgZGF0YS1wYW5lPVwicGFuZS1yb290XCJcbiAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIGZsZXggdy1mdWxsIGgtZnVsbCBtYXgtaC1mdWxsXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGlkPVwidHJhY2UtcGFyZW50XCJcbiAgICAgICAgY2xhc3NOYW1lPVwiQGNvbnRhaW5lciBmbGV4LTEgbWluLXctMCBncmlkIGdyaWQtcm93cy1bYXV0b18xZnJdIGgtZnVsbCBtaW4taC0wIG92ZXJmbG93LWhpZGRlbiByZWxhdGl2ZSBiZy1iYWNrZ3JvdW5kLTEwMFwiXG4gICAgICA+XG4gICAgICAgIDxNaW5pbWFwXG4gICAgICAgICAgc3BhbnM9e3RyYWNlLnNwYW5zfVxuICAgICAgICAgIHJvb3Q9e3Jvb3R9XG4gICAgICAgICAgdmlld3BvcnQ9e3ZpZXdwb3J0fVxuICAgICAgICAgIG1pblZpZXdwb3J0TXM9e01JTl9WSUVXUE9SVF9NU31cbiAgICAgICAgICBvblZpZXdwb3J0Q2hhbmdlPXtzZXRWaWV3cG9ydH1cbiAgICAgICAgICBvbkFuaW1hdGVUbz17YW5pbWF0ZVRvfVxuICAgICAgICAvPlxuICAgICAgICA8U3BsaXRQYW5lXG4gICAgICAgICAgc2Nyb2xsQ29udGFpbmVyUmVmPXtzY3JvbGxDb250YWluZXJSZWZ9XG4gICAgICAgICAgc3RhcnRIZWFkZXI9e1xuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZy1iYWNrZ3JvdW5kLTEwMCBib3JkZXItYiBib3JkZXItZ3JheS1hbHBoYS00MDAgaC0xMCBtaW4taC0xMCBmbGV4IGl0ZW1zLWNlbnRlciBwbC00IHByLTIgZ2FwLTEuNVwiPlxuICAgICAgICAgICAgICA8U2VhcmNoIGNsYXNzTmFtZT1cInctMy41IGgtMy41IHNocmluay0wIHRleHQtZ3JheS04MDBcIiAvPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBpZD1cInRyYWNlLXZpZXdlci1zZWFyY2hcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJ0cmFjZS12aWV3ZXItc2VhcmNoXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgdmFsdWU9e3NlYXJjaFF1ZXJ5fVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0U2VhcmNoUXVlcnkoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgIG9uS2V5RG93bj17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScgJiYgc2VhcmNoUXVlcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICBzZXRTZWFyY2hRdWVyeSgnJyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBzcGFucy4uLlwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlNlYXJjaCBzcGFuc1wiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC0xIG1pbi13LTAgYmctdHJhbnNwYXJlbnQgdGV4dC1zbSB0ZXh0LWdyYXktMTAwMCBwbGFjZWhvbGRlcjp0ZXh0LWdyYXktODAwIG91dGxpbmUtbm9uZVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIHtzZWFyY2hRdWVyeSAmJiAoXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xlYXIgc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNlYXJjaFF1ZXJ5KCcnKX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIi1tci0yIGhpZGRlbiBoLWZ1bGwgbWF4LXctZnVsbCBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIgcm91bmRlZC1yLW1kIGJvcmRlci0wIGJnLXRyYW5zcGFyZW50IHB4LTIuNSBmb250LWluaGVyaXQgdGV4dC1iYXNlIHRleHQtZ3JheS05MDAgbm8tdW5kZXJsaW5lIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTE1MCBlYXNlLWluIGhvdmVyOnRleHQtZ3JheS0xMDAwIGZvY3VzLXZpc2libGU6LW91dGxpbmUtb2Zmc2V0LTEgZm9jdXMtdmlzaWJsZTpvdXRsaW5lIGZvY3VzLXZpc2libGU6b3V0bGluZS0yIGZvY3VzLXZpc2libGU6b3V0bGluZS1bdmFyKC0tZHMtZm9jdXMtY29sb3IpXSBtaW4tWzk2MXB4XTpmbGV4XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8S2JkIHZhcmlhbnQ9XCJvdXRsaW5lXCIgc2l6ZT1cInNlYXJjaFwiPlxuICAgICAgICAgICAgICAgICAgICBFc2NcbiAgICAgICAgICAgICAgICAgIDwvS2JkPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICAgIGVuZEhlYWRlcj17XG4gICAgICAgICAgICA8VGltZWxpbmVIZWFkZXIgbWFya2Vycz17dGltZU1hcmtlcnN9IGhvdmVySW5mbz17aG92ZXJJbmZvfSAvPlxuICAgICAgICAgIH1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmxvY2sgb3ZlcmZsb3ctdmlzaWJsZVwiPlxuICAgICAgICAgICAgPEV2ZW50TGlzdFxuICAgICAgICAgICAgICBzcGFucz17dHJhY2Uuc3BhbnN9XG4gICAgICAgICAgICAgIGFjdGl2ZVNwYW5JZD17YWN0aXZlU3BhbklkfVxuICAgICAgICAgICAgICBzZWFyY2hSZXN1bHQ9e3NlYXJjaFJlc3VsdH1cbiAgICAgICAgICAgICAgb25TZWxlY3RTcGFuPXtoYW5kbGVTZWxlY3RTcGFufVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxkaXYgcmVmPXtsb2FkTW9yZVNlbnRpbmVsUmVmfSBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICAgIHtpc0xvYWRpbmdNb3JlID8gKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgcHktMyB0ZXh0LXNtIHRleHQtZ3JheS04MDBcIj5cbiAgICAgICAgICAgICAgICAgIDxTcGlubmVyIHNpemU9ezE0fSAvPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+TG9hZGluZyBzcGFuc+KApjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7LyogYmlvbWUtaWdub3JlIGxpbnQvYTExeS9ub1N0YXRpY0VsZW1lbnRJbnRlcmFjdGlvbnM6IHRpbWVsaW5lIGhvdmVyIGFuZCB3aGVlbCBnZXN0dXJlcyBhcmUgcG9pbnRlci1vbmx5IGFubm90YXRpb25zICovfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHJlZj17dGltZWxpbmVSZWZ9XG4gICAgICAgICAgICBpZD1cInRyYWNlLXRpbWVsaW5lXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cIkBjb250YWluZXIgYmxvY2sgbWluLWgtMCBvdmVyZmxvdy12aXNpYmxlIHJlbGF0aXZlXCJcbiAgICAgICAgICAgIG9uRG91YmxlQ2xpY2s9e3Jlc2V0Wm9vbX1cbiAgICAgICAgICAgIG9uTW91c2VNb3ZlPXtoYW5kbGVUaW1lbGluZU1vdXNlTW92ZX1cbiAgICAgICAgICAgIG9uTW91c2VMZWF2ZT17aGFuZGxlVGltZWxpbmVNb3VzZUxlYXZlfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxUaW1lbGluZVxuICAgICAgICAgICAgICBzcGFucz17dHJhY2Uuc3BhbnN9XG4gICAgICAgICAgICAgIHZpZXdTdGFydD17dmlld3BvcnQuc3RhcnR9XG4gICAgICAgICAgICAgIHZpZXdFbmQ9e3ZpZXdwb3J0LmVuZH1cbiAgICAgICAgICAgICAgbWFya2Vycz17dGltZU1hcmtlcnN9XG4gICAgICAgICAgICAgIHNlbGVjdGVkSWQ9e2FjdGl2ZVNwYW5JZH1cbiAgICAgICAgICAgICAgc2VhcmNoUmVzdWx0PXtzZWFyY2hSZXN1bHR9XG4gICAgICAgICAgICAgIG9uU2VsZWN0PXtoYW5kbGVTZWxlY3RTcGFufVxuICAgICAgICAgICAgICBvblJldmVhbFRpbWU9e2hhbmRsZVJldmVhbFRpbWV9XG4gICAgICAgICAgICAgIGhvdmVyPXtob3Zlcn1cbiAgICAgICAgICAgICAgYWx0SGVsZD17YWx0SGVsZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxUcmFjZVNob3J0Y3V0SGVscGVyXG4gICAgICAgICAgICAgIGhhc011bHRpcGxlU3BhbnM9e3RyYWNlLnNwYW5zLmxlbmd0aCA+IDF9XG4gICAgICAgICAgICAgIHJlZHVjZWRNb3Rpb249e3JlZHVjZWRNb3Rpb259XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwb2ludGVyLWV2ZW50cy1hdXRvIGZsZXggaXRlbXMtY2VudGVyIGJvcmRlciBib3JkZXItZ3JheS1hbHBoYS00MDAgcm91bmRlZC1tZCBiZy1iYWNrZ3JvdW5kLTEwMCBzaGFkb3ctc20gb3ZlcmZsb3ctaGlkZGVuIGRpdmlkZS14IGRpdmlkZS1ncmF5LWFscGhhLTQwMFwiPlxuICAgICAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJtdXRlZFwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXt6b29tT3V0fVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0F0TWluWm9vbX1cbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiWm9vbSBvdXRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFpvb21PdXQgY2xhc3NOYW1lPVwidy00IGgtNFwiIC8+XG4gICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICB2YXJpYW50PVwibXV0ZWRcIlxuICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17cmVzZXRab29tfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJSZXNldCB6b29tXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxSb3RhdGVDY3cgY2xhc3NOYW1lPVwidy0zLjUgaC0zLjVcIiAvPlxuICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cIm11dGVkXCJcbiAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3pvb21Jbn1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNBdE1heFpvb219XG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlpvb20gaW5cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFpvb21JbiBjbGFzc05hbWU9XCJ3LTQgaC00XCIgLz5cbiAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC8+XG4gICAgICAgIDwvU3BsaXRQYW5lPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxUcmFjZURldGFpbFBhbmVsXG4gICAgICAgIGNvbnRhaW5lclJlZj17cGFuZVJvb3RSZWZ9XG4gICAgICAgIG9uTmF2aWdhdGVUb1NwYW49e25hdmlnYXRlVG9TcGFufVxuICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbGVhckFjdGl2ZVNwYW59XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuIl19
@@ -40,6 +40,35 @@ export interface SpanGap {
40
40
  rowIndex: number;
41
41
  }
42
42
  export declare function computeSpanGaps(spans: Span[], viewStart: number, viewEnd: number): SpanGap[];
43
+ export interface SpanDelta {
44
+ /** True measured time between the two spans, unaffected by clamping. */
45
+ deltaMs: number;
46
+ /** Viewport-clamped fraction of the anchor span's measured edge. */
47
+ anchorFrac: number;
48
+ /** Viewport-clamped fraction of the hovered span's measured edge. */
49
+ hoveredFrac: number;
50
+ /**
51
+ * Which edge of the anchor span the measurement runs from: its end when the
52
+ * spans are disjoint and the anchor comes first, otherwise its start.
53
+ */
54
+ anchorEdge: 'start' | 'end';
55
+ /**
56
+ * Set when the hovered span lies entirely outside the viewport on one side,
57
+ * i.e. its row renders an off-screen arrow the line should stop short of.
58
+ */
59
+ hoveredOffscreen: 'left' | 'right' | null;
60
+ }
61
+ /**
62
+ * Measure the temporal delta between an anchor (selected) span and a hovered
63
+ * span for the Alt+hover measurement overlay. Ordering the two spans by start
64
+ * time (E = earlier-starting, L = later-starting), the measurement runs to
65
+ * L's start from E's end when the spans are disjoint ("how long after E ended
66
+ * did L start"), or from E's start when they overlap ("how long after E
67
+ * started did L start"). Fractions are clamped to the viewport like
68
+ * `computeSpanGaps`; `deltaMs` is always the true duration. Returns null when
69
+ * the measurement lies entirely outside the viewport.
70
+ */
71
+ export declare function computeSpanDelta(anchor: Span, hovered: Span, viewStart: number, viewEnd: number): SpanDelta | null;
43
72
  export declare const RESOURCE_COLORS: Record<string, {
44
73
  bg: string;
45
74
  border: string;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/new-trace-viewer/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/new-trace-viewer/utils.ts"],"names":[],"mappings":"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"}