@workflow/web-shared 5.0.0-beta.26 → 5.0.0-beta.28

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.
Files changed (94) hide show
  1. package/dist/components/new-trace-viewer/components/detail-panel-width.d.ts +34 -0
  2. package/dist/components/new-trace-viewer/components/detail-panel-width.d.ts.map +1 -0
  3. package/dist/components/new-trace-viewer/components/detail-panel-width.js +67 -0
  4. package/dist/components/new-trace-viewer/components/detail-panel.d.ts +14 -0
  5. package/dist/components/new-trace-viewer/components/detail-panel.d.ts.map +1 -0
  6. package/dist/components/new-trace-viewer/components/detail-panel.js +122 -0
  7. package/dist/components/new-trace-viewer/components/draggable-border.d.ts +31 -0
  8. package/dist/components/new-trace-viewer/components/draggable-border.d.ts.map +1 -0
  9. package/dist/components/new-trace-viewer/components/draggable-border.js +140 -0
  10. package/dist/components/new-trace-viewer/components/event-list.d.ts +1 -1
  11. package/dist/components/new-trace-viewer/components/event-list.d.ts.map +1 -1
  12. package/dist/components/new-trace-viewer/components/event-list.js +3 -5
  13. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts +1 -1
  14. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts.map +1 -1
  15. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.js +2 -2
  16. package/dist/components/new-trace-viewer/components/minimap.d.ts +14 -0
  17. package/dist/components/new-trace-viewer/components/minimap.d.ts.map +1 -0
  18. package/dist/components/new-trace-viewer/components/minimap.js +337 -0
  19. package/dist/components/new-trace-viewer/components/pane-constants.d.ts +14 -0
  20. package/dist/components/new-trace-viewer/components/pane-constants.d.ts.map +1 -0
  21. package/dist/components/new-trace-viewer/components/pane-constants.js +16 -0
  22. package/dist/components/new-trace-viewer/components/split-pane.d.ts +1 -4
  23. package/dist/components/new-trace-viewer/components/split-pane.d.ts.map +1 -1
  24. package/dist/components/new-trace-viewer/components/split-pane.js +18 -16
  25. package/dist/components/new-trace-viewer/components/timeline.d.ts +2 -2
  26. package/dist/components/new-trace-viewer/components/timeline.d.ts.map +1 -1
  27. package/dist/components/new-trace-viewer/components/timeline.js +5 -7
  28. package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.d.ts.map +1 -1
  29. package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.js +10 -3
  30. package/dist/components/new-trace-viewer/components/use-element-width.d.ts +8 -0
  31. package/dist/components/new-trace-viewer/components/use-element-width.d.ts.map +1 -0
  32. package/dist/components/new-trace-viewer/components/use-element-width.js +25 -0
  33. package/dist/components/new-trace-viewer/context.d.ts +2 -0
  34. package/dist/components/new-trace-viewer/context.d.ts.map +1 -1
  35. package/dist/components/new-trace-viewer/context.js +3 -2
  36. package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +1 -1
  37. package/dist/components/new-trace-viewer/trace-viewer.js +53 -181
  38. package/dist/components/new-trace-viewer/utils.d.ts +21 -0
  39. package/dist/components/new-trace-viewer/utils.d.ts.map +1 -1
  40. package/dist/components/new-trace-viewer/utils.js +44 -3
  41. package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
  42. package/dist/components/sidebar/attribute-panel.js +38 -35
  43. package/dist/components/sidebar/attributes-block.d.ts +18 -7
  44. package/dist/components/sidebar/attributes-block.d.ts.map +1 -1
  45. package/dist/components/sidebar/attributes-block.js +76 -18
  46. package/dist/components/sidebar/events-list.d.ts +1 -1
  47. package/dist/components/sidebar/events-list.d.ts.map +1 -1
  48. package/dist/components/sidebar/events-list.js +9 -10
  49. package/dist/components/trace-viewer/components/map.d.ts +2 -2
  50. package/dist/components/trace-viewer/components/map.d.ts.map +1 -1
  51. package/dist/components/trace-viewer/components/node.d.ts +7 -7
  52. package/dist/components/trace-viewer/components/node.d.ts.map +1 -1
  53. package/dist/components/ui/collapsible.d.ts +46 -0
  54. package/dist/components/ui/collapsible.d.ts.map +1 -0
  55. package/dist/components/ui/collapsible.js +66 -0
  56. package/dist/components/ui/data-inspector.js +2 -7
  57. package/dist/index.d.ts +2 -2
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +3 -3
  60. package/dist/lib/hydration.d.ts +12 -2
  61. package/dist/lib/hydration.d.ts.map +1 -1
  62. package/dist/lib/hydration.js +41 -18
  63. package/dist/lib/utils.d.ts +8 -5
  64. package/dist/lib/utils.d.ts.map +1 -1
  65. package/dist/lib/utils.js +13 -16
  66. package/package.json +6 -6
  67. package/src/components/new-trace-viewer/components/detail-panel-width.test.ts +123 -0
  68. package/src/components/new-trace-viewer/components/detail-panel-width.ts +76 -0
  69. package/src/components/new-trace-viewer/components/detail-panel.tsx +272 -0
  70. package/src/components/new-trace-viewer/components/draggable-border.tsx +216 -0
  71. package/src/components/new-trace-viewer/components/event-list.tsx +3 -5
  72. package/src/components/new-trace-viewer/components/middle-truncate/truncate.ts +1 -1
  73. package/src/components/new-trace-viewer/components/minimap.tsx +559 -0
  74. package/src/components/new-trace-viewer/components/pane-constants.ts +19 -0
  75. package/src/components/new-trace-viewer/components/split-pane.tsx +44 -55
  76. package/src/components/new-trace-viewer/components/timeline.tsx +3 -5
  77. package/src/components/new-trace-viewer/components/trace-viewer-skeleton.tsx +21 -1
  78. package/src/components/new-trace-viewer/components/use-element-width.ts +29 -0
  79. package/src/components/new-trace-viewer/context.tsx +4 -1
  80. package/src/components/new-trace-viewer/trace-viewer.tsx +93 -312
  81. package/src/components/new-trace-viewer/utils.test.ts +65 -0
  82. package/src/components/new-trace-viewer/utils.ts +76 -2
  83. package/src/components/sidebar/attribute-panel.tsx +106 -105
  84. package/src/components/sidebar/attributes-block.tsx +170 -50
  85. package/src/components/sidebar/events-list.tsx +107 -92
  86. package/src/components/ui/collapsible.tsx +219 -0
  87. package/src/index.ts +8 -7
  88. package/src/lib/hydration.ts +48 -25
  89. package/src/lib/utils.test.ts +33 -0
  90. package/src/lib/utils.ts +12 -16
  91. package/dist/components/sidebar/detail-card.d.ts +0 -13
  92. package/dist/components/sidebar/detail-card.d.ts.map +0 -1
  93. package/dist/components/sidebar/detail-card.js +0 -36
  94. package/src/components/sidebar/detail-card.tsx +0 -143
@@ -0,0 +1,66 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { ChevronDown, ChevronRight } from 'lucide-react';
4
+ import { createContext, useContext, useState, } from 'react';
5
+ import { cn } from '../../lib/cn';
6
+ const CollapsibleContext = createContext(null);
7
+ function useCollapsibleContext(part) {
8
+ const context = useContext(CollapsibleContext);
9
+ if (!context) {
10
+ throw new Error(`<Collapsible${part}> must be rendered inside <CollapsibleRoot>`);
11
+ }
12
+ return context;
13
+ }
14
+ /**
15
+ * Low-level collapsible container. Use this together with `CollapsibleTrigger`
16
+ * and `CollapsibleContent` when you need to override the styling of individual
17
+ * parts. For the common case, prefer the all-in-one `Collapsible`.
18
+ */
19
+ export function CollapsibleRoot({ children, variant = 'section', disabled = false, defaultOpen = false, onOpenChange, className, }) {
20
+ const [open, setOpen] = useState(defaultOpen);
21
+ const handleToggle = (event) => {
22
+ // React bubbles the `toggle` event even though the native one doesn't, so
23
+ // a nested <details> (e.g. an event card inside the Events section)
24
+ // collapsing would otherwise flip this card. Only react to direct toggles.
25
+ if (event.target !== event.currentTarget)
26
+ return;
27
+ const next = event.currentTarget.open;
28
+ setOpen(next);
29
+ onOpenChange?.(next);
30
+ };
31
+ const details = (_jsx("details", { "data-slot": "collapsible", "data-state": open ? 'open' : 'closed', open: open, onToggle: disabled ? undefined : handleToggle, className: cn(variant === 'card'
32
+ ? 'group/card border-gray-alpha-400 last:border-b'
33
+ : 'group', className), children: _jsx(CollapsibleContext.Provider, { value: { variant, disabled }, children: children }) }));
34
+ if (variant === 'card') {
35
+ return details;
36
+ }
37
+ return (_jsx("section", { className: "-mx-4 border-t border-gray-alpha-400 px-4 py-2", children: details }));
38
+ }
39
+ /** The clickable header of a `CollapsibleRoot`. */
40
+ export function CollapsibleTrigger({ children, className, }) {
41
+ const { variant, disabled } = useCollapsibleContext('Trigger');
42
+ if (variant === 'card') {
43
+ return (_jsxs("summary", { "data-slot": "collapsible-trigger", className: cn('flex cursor-pointer list-none items-center gap-1.5 border-t border-gray-alpha-400 bg-background-200 px-3 py-4 hover:bg-gray-100 [&::-webkit-details-marker]:hidden', className), children: [_jsx(ChevronRight, { size: 14, className: "shrink-0 text-gray-700 group-hover/card:text-gray-1000 group-open/card:rotate-90" }), children] }));
44
+ }
45
+ // Shared row metrics keep every header the same height regardless of variant.
46
+ const row = 'flex h-9 items-center gap-2 -mx-2 px-2 text-heading-14 font-medium list-none [&::-webkit-details-marker]:hidden';
47
+ if (disabled) {
48
+ return (_jsx("summary", { "data-slot": "collapsible-trigger", className: cn(row, 'pointer-events-none text-gray-700', className), children: _jsx("span", { className: "min-w-0 flex-1", children: children }) }));
49
+ }
50
+ return (_jsxs("summary", { "data-slot": "collapsible-trigger", className: cn(row, 'group/trigger cursor-pointer rounded hover:bg-gray-alpha-100', className), children: [_jsxs("span", { className: "relative isolate h-3.5 w-3.5 shrink-0 text-gray-700 group-hover/trigger:text-gray-1000", children: [_jsx(ChevronRight, { size: 14, className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 opacity-100 group-open:opacity-0" }), _jsx(ChevronDown, { size: 14, className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 opacity-0 group-open:opacity-100" })] }), _jsx("span", { className: "min-w-0 flex-1", children: children })] }));
51
+ }
52
+ /** The collapsible body of a `CollapsibleRoot`. */
53
+ export function CollapsibleContent({ children, className, }) {
54
+ const { variant } = useCollapsibleContext('Content');
55
+ return (_jsx("div", { "data-slot": "collapsible-content", className: cn(variant === 'section' && 'mt-2 mb-3', className), children: children }));
56
+ }
57
+ /**
58
+ * All-in-one collapsible section: a labeled header plus body content. This is
59
+ * the component to reach for in most cases. When you need to override the
60
+ * styling of a specific part, compose `CollapsibleRoot`, `CollapsibleTrigger`,
61
+ * and `CollapsibleContent` directly instead.
62
+ */
63
+ export function Collapsible({ label, children, disabled, defaultOpen, onOpenChange, }) {
64
+ return (_jsxs(CollapsibleRoot, { disabled: disabled, defaultOpen: defaultOpen, onOpenChange: onOpenChange, children: [_jsx(CollapsibleTrigger, { children: label }), children != null && _jsx(CollapsibleContent, { children: children })] }));
65
+ }
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGFwc2libGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy91aS9jb2xsYXBzaWJsZS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViLE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pELE9BQU8sRUFDTCxhQUFhLEVBR2IsVUFBVSxFQUNWLFFBQVEsR0FDVCxNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFTbEMsTUFBTSxrQkFBa0IsR0FBRyxhQUFhLENBQWlDLElBQUksQ0FBQyxDQUFDO0FBRS9FLFNBQVMscUJBQXFCLENBQUMsSUFBWTtJQUN6QyxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUMvQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixNQUFNLElBQUksS0FBSyxDQUNiLGVBQWUsSUFBSSw2Q0FBNkMsQ0FDakUsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBV0Q7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsRUFDOUIsUUFBUSxFQUNSLE9BQU8sR0FBRyxTQUFTLEVBQ25CLFFBQVEsR0FBRyxLQUFLLEVBQ2hCLFdBQVcsR0FBRyxLQUFLLEVBQ25CLFlBQVksRUFDWixTQUFTLEdBQ1k7SUFDckIsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFOUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUF5QyxFQUFFLEVBQUU7UUFDakUsMEVBQTBFO1FBQzFFLG9FQUFvRTtRQUNwRSwyRUFBMkU7UUFDM0UsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxhQUFhO1lBQUUsT0FBTztRQUNqRCxNQUFN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QVUsV0FBVyxDQUFDLEVBQzFCLEtBQUssRUFDTCxRQUFRLEVBQ1IsUUFBUSxFQUNSLFdBQVcsRUFDWCxZQUFZLEdBQ0s7SUFDakIsT0FBTyxDQUNMLE1BQUMsZUFBZSxJQUNkLFFBQVEsRUFBRSxRQUFRLEVBQ2xCLFdBQVcsRUFBRSxXQUFXLEVBQ3hCLFlBQVksRUFBRSxZQUFZLGFBRTFCLEtBQUMsa0JBQWtCLGNBQUUsS0FBSyxHQUFzQixFQUMvQyxRQUFRLElBQUksSUFBSSxJQUFJLEtBQUMsa0JBQWtCLGNBQUUsUUFBUSxHQUFzQixJQUN4RCxDQUNuQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgQ2hldnJvbkRvd24sIENoZXZyb25SaWdodCB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQge1xuICBjcmVhdGVDb250ZXh0LFxuICB0eXBlIFJlYWN0Tm9kZSxcbiAgdHlwZSBTeW50aGV0aWNFdmVudCxcbiAgdXNlQ29udGV4dCxcbiAgdXNlU3RhdGUsXG59IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi4vLi4vbGliL2NuJztcblxudHlwZSBDb2xsYXBzaWJsZVZhcmlhbnQgPSAnc2VjdGlvbicgfCAnY2FyZCc7XG5cbnR5cGUgQ29sbGFwc2libGVDb250ZXh0VmFsdWUgPSB7XG4gIHZhcmlhbnQ6IENvbGxhcHNpYmxlVmFyaWFudDtcbiAgZGlzYWJsZWQ6IGJvb2xlYW47XG59O1xuXG5jb25zdCBDb2xsYXBzaWJsZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PENvbGxhcHNpYmxlQ29udGV4dFZhbHVlIHwgbnVsbD4obnVsbCk7XG5cbmZ1bmN0aW9uIHVzZUNvbGxhcHNpYmxlQ29udGV4dChwYXJ0OiBzdHJpbmcpOiBDb2xsYXBzaWJsZUNvbnRleHRWYWx1ZSB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KENvbGxhcHNpYmxlQ29udGV4dCk7XG4gIGlmICghY29udGV4dCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGA8Q29sbGFwc2libGUke3BhcnR9PiBtdXN0IGJlIHJlbmRlcmVkIGluc2lkZSA8Q29sbGFwc2libGVSb290PmBcbiAgICApO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufVxuXG50eXBlIENvbGxhcHNpYmxlUm9vdFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICB2YXJpYW50PzogQ29sbGFwc2libGVWYXJpYW50O1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGRlZmF1bHRPcGVuPzogYm9vbGVhbjtcbiAgb25PcGVuQ2hhbmdlPzogKG9wZW46IGJvb2xlYW4pID0+IHZvaWQ7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbi8qKlxuICogTG93LWxldmVsIGNvbGxhcHNpYmxlIGNvbnRhaW5lci4gVXNlIHRoaXMgdG9nZXRoZXIgd2l0aCBgQ29sbGFwc2libGVUcmlnZ2VyYFxuICogYW5kIGBDb2xsYXBzaWJsZUNvbnRlbnRgIHdoZW4geW91IG5lZWQgdG8gb3ZlcnJpZGUgdGhlIHN0eWxpbmcgb2YgaW5kaXZpZHVhbFxuICogcGFydHMuIEZvciB0aGUgY29tbW9uIGNhc2UsIHByZWZlciB0aGUgYWxsLWluLW9uZSBgQ29sbGFwc2libGVgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gQ29sbGFwc2libGVSb290KHtcbiAgY2hpbGRyZW4sXG4gIHZhcmlhbnQgPSAnc2VjdGlvbicsXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIGRlZmF1bHRPcGVuID0gZmFsc2UsXG4gIG9uT3BlbkNoYW5nZSxcbiAgY2xhc3NOYW1lLFxufTogQ29sbGFwc2libGVSb290UHJvcHMpIHtcbiAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoZGVmYXVsdE9wZW4pO1xuXG4gIGNvbnN0IGhhbmRsZVRvZ2dsZSA9IChldmVudDogU3ludGhldGljRXZlbnQ8SFRNTERldGFpbHNFbGVtZW50PikgPT4ge1xuICAgIC8vIFJlYWN0IGJ1YmJsZXMgdGhlIGB0b2dnbGVgIGV2ZW50IGV2ZW4gdGhvdWdoIHRoZSBuYXRpdmUgb25lIGRvZXNuJ3QsIHNvXG4gICAgLy8gYSBuZXN0ZWQgPGRldGFpbHM+IChlLmcuIGFuIGV2ZW50IGNhcmQgaW5zaWRlIHRoZSBFdmVudHMgc2VjdGlvbilcbiAgICAvLyBjb2xsYXBzaW5nIHdvdWxkIG90aGVyd2lzZSBmbGlwIHRoaXMgY2FyZC4gT25seSByZWFjdCB0byBkaXJlY3QgdG9nZ2xlcy5cbiAgICBpZiAoZXZlbnQudGFyZ2V0ICE9PSBldmVudC5jdXJyZW50VGFyZ2V0KSByZXR1cm47XG4gICAgY29uc3QgbmV4dCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQub3BlbjtcbiAgICBzZXRPcGVuKG5leHQpO1xuICAgIG9uT3BlbkNoYW5nZT8uKG5leHQpO1xuICB9O1xuXG4gIGNvbnN0IGRldGFpbHMgPSAoXG4gICAgPGRldGFpbHNcbiAgICAgIGRhdGEtc2xvdD1cImNvbGxhcHNpYmxlXCJcbiAgICAgIGRhdGEtc3RhdGU9e29wZW4gPyAnb3BlbicgOiAnY2xvc2VkJ31cbiAgICAgIG9wZW49e29wZW59XG4gICAgICBvblRvZ2dsZT17ZGlzYWJsZWQgPyB1bmRlZmluZWQgOiBoYW5kbGVUb2dnbGV9XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICB2YXJpYW50ID09PSAnY2FyZCdcbiAgICAgICAgICA/ICdncm91cC9jYXJkIGJvcmRlci1ncmF5LWFscGhhLTQwMCBsYXN0OmJvcmRlci1iJ1xuICAgICAgICAgIDogJ2dyb3VwJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgID5cbiAgICAgIDxDb2xsYXBzaWJsZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3sgdmFyaWFudCwgZGlzYWJsZWQgfX0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvQ29sbGFwc2libGVDb250ZXh0LlByb3ZpZGVyPlxuICAgIDwvZGV0YWlscz5cbiAgKTtcblxuICBpZiAodmFyaWFudCA9PT0gJ2NhcmQnKSB7XG4gICAgcmV0dXJuIGRldGFpbHM7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cIi1teC00IGJvcmRlci10IGJvcmRlci1ncmF5LWFscGhhLTQwMCBweC00IHB5LTJcIj5cbiAgICAgIHtkZXRhaWxzfVxuICAgIDwvc2VjdGlvbj5cbiAgKTtcbn1cblxudHlwZSBDb2xsYXBzaWJsZVRyaWdnZXJQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuLyoqIFRoZSBjbGlja2FibGUgaGVhZGVyIG9mIGEgYENvbGxhcHNpYmxlUm9vdGAuICovXG5leHBvcnQgZnVuY3Rpb24gQ29sbGFwc2libGVUcmlnZ2VyKHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbn06IENvbGxhcHNpYmxlVHJpZ2dlclByb3BzKSB7XG4gIGNvbnN0IHsgdmFyaWFudCwgZGlzYWJsZWQgfSA9IHVzZUNvbGxhcHNpYmxlQ29udGV4dCgnVHJpZ2dlcicpO1xuXG4gIGlmICh2YXJpYW50ID09PSAnY2FyZCcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPHN1bW1hcnlcbiAgICAgICAgZGF0YS1zbG90PVwiY29sbGFwc2libGUtdHJpZ2dlclwiXG4gICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgJ2ZsZXggY3Vyc29yLXBvaW50ZXIgbGlzdC1ub25lIGl0ZW1zLWNlbnRlciBnYXAtMS41IGJvcmRlci10IGJvcmRlci1ncmF5LWFscGhhLTQwMCBiZy1iYWNrZ3JvdW5kLTIwMCBweC0zIHB5LTQgaG92ZXI6YmctZ3JheS0xMDAgWyY6Oi13ZWJraXQtZGV0YWlscy1tYXJrZXJdOmhpZGRlbicsXG4gICAgICAgICAgY2xhc3NOYW1lXG4gICAgICAgICl9XG4gICAgICA+XG4gICAgICAgIDxDaGV2cm9uUmlnaHRcbiAgICAgICAgICBzaXplPXsxNH1cbiAgICAgICAgICBjbGFzc05hbWU9XCJzaHJpbmstMCB0ZXh0LWdyYXktNzAwIGdyb3VwLWhvdmVyL2NhcmQ6dGV4dC1ncmF5LTEwMDAgZ3JvdXAtb3Blbi9jYXJkOnJvdGF0ZS05MFwiXG4gICAgICAgIC8+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvc3VtbWFyeT5cbiAgICApO1xuICB9XG5cbiAgLy8gU2hhcmVkIHJvdyBtZXRyaWNzIGtlZXAgZXZlcnkgaGVhZGVyIHRoZSBzYW1lIGhlaWdodCByZWdhcmRsZXNzIG9mIHZhcmlhbnQuXG4gIGNvbnN0IHJvdyA9XG4gICAgJ2ZsZXggaC05IGl0ZW1zLWNlbnRlciBnYXAtMiAtbXgtMiBweC0yIHRleHQtaGVhZGluZy0xNCBmb250LW1lZGl1bSBsaXN0LW5vbmUgWyY6Oi13ZWJraXQtZGV0YWlscy1tYXJrZXJdOmhpZGRlbic7XG5cbiAgaWYgKGRpc2FibGVkKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxzdW1tYXJ5XG4gICAgICAgIGRhdGEtc2xvdD1cImNvbGxhcHNpYmxlLXRyaWdnZXJcIlxuICAgICAgICBjbGFzc05hbWU9e2NuKHJvdywgJ3BvaW50ZXItZXZlbnRzLW5vbmUgdGV4dC1ncmF5LTcwMCcsIGNsYXNzTmFtZSl9XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1pbi13LTAgZmxleC0xXCI+e2NoaWxkcmVufTwvc3Bhbj5cbiAgICAgIDwvc3VtbWFyeT5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8c3VtbWFyeVxuICAgICAgZGF0YS1zbG90PVwiY29sbGFwc2libGUtdHJpZ2dlclwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICByb3csXG4gICAgICAgICdncm91cC90cmlnZ2VyIGN1cnNvci1wb2ludGVyIHJvdW5kZWQgaG92ZXI6YmctZ3JheS1hbHBoYS0xMDAnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwicmVsYXRpdmUgaXNvbGF0ZSBoLTMuNSB3LTMuNSBzaHJpbmstMCB0ZXh0LWdyYXktNzAwIGdyb3VwLWhvdmVyL3RyaWdnZXI6dGV4dC1ncmF5LTEwMDBcIj5cbiAgICAgICAgPENoZXZyb25SaWdodFxuICAgICAgICAgIHNpemU9ezE0fVxuICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHRvcC0xLzIgbGVmdC0xLzIgLXRyYW5zbGF0ZS14LTEvMiAtdHJhbnNsYXRlLXktMS8yIG9wYWNpdHktMTAwIGdyb3VwLW9wZW46b3BhY2l0eS0wXCJcbiAgICAgICAgLz5cbiAgICAgICAgPENoZXZyb25Eb3duXG4gICAgICAgICAgc2l6ZT17MTR9XG4gICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgdG9wLTEvMiBsZWZ0LTEvMiAtdHJhbnNsYXRlLXgtMS8yIC10cmFuc2xhdGUteS0xLzIgb3BhY2l0eS0wIGdyb3VwLW9wZW46b3BhY2l0eS0xMDBcIlxuICAgICAgICAvPlxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWluLXctMCBmbGV4LTFcIj57Y2hpbGRyZW59PC9zcGFuPlxuICAgIDwvc3VtbWFyeT5cbiAgKTtcbn1cblxudHlwZSBDb2xsYXBzaWJsZUNvbnRlbnRQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuLyoqIFRoZSBjb2xsYXBzaWJsZSBib2R5IG9mIGEgYENvbGxhcHNpYmxlUm9vdGAuICovXG5leHBvcnQgZnVuY3Rpb24gQ29sbGFwc2libGVDb250ZW50KHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbn06IENvbGxhcHNpYmxlQ29udGVudFByb3BzKSB7XG4gIGNvbnN0IHsgdmFyaWFudCB9ID0gdXNlQ29sbGFwc2libGVDb250ZXh0KCdDb250ZW50Jyk7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiY29sbGFwc2libGUtY29udGVudFwiXG4gICAgICBjbGFzc05hbWU9e2NuKHZhcmlhbnQgPT09ICdzZWN0aW9uJyAmJiAnbXQtMiBtYi0zJywgY2xhc3NOYW1lKX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbnR5cGUgQ29sbGFwc2libGVQcm9wcyA9IHtcbiAgLyoqIEhlYWRlciBjb250ZW50IHNob3duIGluIHRoZSB0cmlnZ2VyIHJvdy4gKi9cbiAgbGFiZWw6IFJlYWN0Tm9kZTtcbiAgLyoqIEJvZHkgY29udGVudC4gT21pdCBmb3IgYSBoZWFkZXItb25seSAoZS5nLiBkaXNhYmxlZCBvciBza2VsZXRvbikgcm93LiAqL1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBkZWZhdWx0T3Blbj86IGJvb2xlYW47XG4gIG9uT3BlbkNoYW5nZT86IChvcGVuOiBib29sZWFuKSA9PiB2b2lkO1xufTtcblxuLyoqXG4gKiBBbGwtaW4tb25lIGNvbGxhcHNpYmxlIHNlY3Rpb246IGEgbGFiZWxlZCBoZWFkZXIgcGx1cyBib2R5IGNvbnRlbnQuIFRoaXMgaXNcbiAqIHRoZSBjb21wb25lbnQgdG8gcmVhY2ggZm9yIGluIG1vc3QgY2FzZXMuIFdoZW4geW91IG5lZWQgdG8gb3ZlcnJpZGUgdGhlXG4gKiBzdHlsaW5nIG9mIGEgc3BlY2lmaWMgcGFydCwgY29tcG9zZSBgQ29sbGFwc2libGVSb290YCwgYENvbGxhcHNpYmxlVHJpZ2dlcmAsXG4gKiBhbmQgYENvbGxhcHNpYmxlQ29udGVudGAgZGlyZWN0bHkgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIENvbGxhcHNpYmxlKHtcbiAgbGFiZWwsXG4gIGNoaWxkcmVuLFxuICBkaXNhYmxlZCxcbiAgZGVmYXVsdE9wZW4sXG4gIG9uT3BlbkNoYW5nZSxcbn06IENvbGxhcHNpYmxlUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8Q29sbGFwc2libGVSb290XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICBkZWZhdWx0T3Blbj17ZGVmYXVsdE9wZW59XG4gICAgICBvbk9wZW5DaGFuZ2U9e29uT3BlbkNoYW5nZX1cbiAgICA+XG4gICAgICA8Q29sbGFwc2libGVUcmlnZ2VyPntsYWJlbH08L0NvbGxhcHNpYmxlVHJpZ2dlcj5cbiAgICAgIHtjaGlsZHJlbiAhPSBudWxsICYmIDxDb2xsYXBzaWJsZUNvbnRlbnQ+e2NoaWxkcmVufTwvQ29sbGFwc2libGVDb250ZW50Pn1cbiAgICA8L0NvbGxhcHNpYmxlUm9vdD5cbiAgKTtcbn1cbiJdfQ==
@@ -312,12 +312,7 @@ function ExpandableContainer({ field, entries, open, close, prefix, ctx, isLast,
312
312
  }
313
313
  };
314
314
  const lastIndex = entries.length - 1;
315
- return (
316
- // The treeitem row is the focusable, keyboard-operable control (roving
317
- // tabindex + arrow keys); the disclosure marker below is purely decorative.
318
- _jsxs("div", { className: CLS.child, role: "treeitem", "aria-expanded": expanded, "aria-controls": expanded ? contentsId : undefined, "data-json-expander": true, ref: rowRef, tabIndex: level === 0 ? 0 : -1, onClick: onClick, onKeyDown: onKeyDown, children: [_jsx("span", { className: expanded ? CLS.collapseIcon : CLS.expandIcon, "aria-hidden": "true" }), field !== undefined && (_jsx("span", { className: CLS.clickableLabel, children: `${formatField(field)}:` })), prefix ? _jsx("span", { className: CLS.className, children: prefix }) : null, _jsx("span", { className: CLS.punctuation, children: open }), expanded ? (
319
- // biome-ignore lint/a11y/useSemanticElements: ARIA tree group is the correct role here
320
- _jsx("ul", { id: contentsId, className: CLS.childFields, role: "group", children: entries.map(([childField, childValue], index) => (_jsx(DataRender, { field: childField, value: childValue, isLast: index === lastIndex, ctx: { ...ctx, level: level + 1 } }, childField ?? index))) })) : (_jsx("span", { className: CLS.collapsedContent, "aria-hidden": "true" })), _jsx("span", { className: CLS.punctuation, children: close }), _jsx(Comma, { isLast: isLast })] }));
315
+ return (_jsxs("div", { className: CLS.child, role: "treeitem", "aria-expanded": expanded, "aria-controls": expanded ? contentsId : undefined, "data-json-expander": true, ref: rowRef, tabIndex: level === 0 ? 0 : -1, onClick: onClick, onKeyDown: onKeyDown, children: [_jsx("span", { className: expanded ? CLS.collapseIcon : CLS.expandIcon, "aria-hidden": "true" }), field !== undefined && (_jsx("span", { className: CLS.clickableLabel, children: `${formatField(field)}:` })), prefix ? _jsx("span", { className: CLS.className, children: prefix }) : null, _jsx("span", { className: CLS.punctuation, children: open }), expanded ? (_jsx("ul", { id: contentsId, className: CLS.childFields, role: "group", children: entries.map(([childField, childValue], index) => (_jsx(DataRender, { field: childField, value: childValue, isLast: index === lastIndex, ctx: { ...ctx, level: level + 1 } }, childField ?? index))) })) : (_jsx("span", { className: CLS.collapsedContent, "aria-hidden": "true" })), _jsx("span", { className: CLS.punctuation, children: close }), _jsx(Comma, { isLast: isLast })] }));
321
316
  }
322
317
  function DataRender({ field, value, isLast, ctx }) {
323
318
  if (isBytesDisplay(value)) {
@@ -526,4 +521,4 @@ function isDeepEqual(a, b, seen = new WeakMap()) {
526
521
  }
527
522
  return true;
528
523
  }
529
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1pbnNwZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy91aS9kYXRhLWluc3BlY3Rvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxhQUFhLEVBS2IsVUFBVSxFQUNWLEtBQUssRUFDTCxPQUFPLEVBQ1AsTUFBTSxFQUNOLFFBQVEsR0FDVCxNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdELE9BQU8sRUFHTCwrQkFBK0IsR0FDaEMsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBDLDhFQUE4RTtBQUM5RSw4Q0FBOEM7QUFDOUMsd0RBQXdEO0FBQ3hELDhFQUE4RTtBQUU5RSxNQUFNLGVBQWUsR0FBRyx5QkFBeUIsQ0FBQztBQUNsRCxNQUFNLHVCQUF1QixHQUFHLGlDQUFpQyxDQUFDO0FBQ2xFLE1BQU0sWUFBWSxHQUFHLHNCQUFzQixDQUFDO0FBQzVDLE1BQU0sa0JBQWtCLEdBQUcsNEJBQTRCLENBQUM7QUF5QnhELFNBQVMsb0JBQW9CLENBQUMsSUFBWTtJQUN4QyxJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDL0IsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUNELE9B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Q0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7UUFDbkQsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0IsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU07UUFBRSxPQUFPLEtBQUssQ0FBQztJQUVoRCxLQUFLLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN6QyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7SUFDdkQsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuLyoqXG4gKiBSZXVzYWJsZSBkYXRhIGluc3BlY3RvciBmb3IgdGhlIG8xMXkgVUkuXG4gKlxuICogUmVuZGVycyBKU09OIGFzIGEgY29sbGFwc2libGUgdHJlZTogYnJhY2tldCBub3RhdGlvbiAoYHsg4oCmIH1gIC8gYFsg4oCmIF1gKSxcbiAqIGNvbG9yZWQga2V5cywgdHlwZWQgdmFsdWUgY29sb3JzLCBg4pa4YC9g4pa+YCBkaXNjbG9zdXJlIGljb25zLCBhbmQgYSBgLi4uYFxuICogY29sbGFwc2VkIGluZGljYXRvci5cbiAqXG4gKiBPbiB0b3Agb2YgcGxhaW4gSlNPTiBpdCBoYW5kbGVzIHRoZSB3b3JrZmxvdy1zcGVjaWZpYyB2YWx1ZSB0eXBlczogU3RyZWFtUmVmIC9cbiAqIFJ1blJlZiBiYWRnZXMsIGVuY3J5cHRlZCBtYXJrZXJzLCBkZWNvZGVkIGJ5dGUgc3RyZWFtcywgRGF0ZXMsIGFuZCBuYW1lZFxuICogY2xhc3MgaW5zdGFuY2VzLlxuICovXG5cbmltcG9ydCB7IExvY2sgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHtcbiAgY3JlYXRlQ29udGV4dCxcbiAgdHlwZSBLZXlib2FyZEV2ZW50IGFzIFJlYWN0S2V5Ym9hcmRFdmVudCxcbiAgdHlwZSBNb3VzZUV2ZW50IGFzIFJlYWN0TW91c2VFdmVudCxcbiAgdHlwZSBSZWFjdE5vZGUsXG4gIHR5cGUgUmVmT2JqZWN0LFxuICB1c2VDb250ZXh0LFxuICB1c2VJZCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRU5DUllQVEVEX0RJU1BMQVlfTkFNRSB9IGZyb20gJy4uLy4uL2xpYi9oeWRyYXRpb24nO1xuaW1wb3J0IHtcbiAgdHlwZSBEZWNvZGVkU3RyZWFtQ2h1bmtTb3VyY2UsXG4gIHR5cGUgRm9ybWF0dGVkU3RyZWFtQ2h1bmtEaXNwbGF5LFxuICBmb3JtYXRBcnJheUJ1ZmZlclZpZXdGb3JEaXNwbGF5LFxufSBmcm9tICcuLi8uLi9saWIvc3RyZWFtLWRpc3BsYXknO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9idXR0b24nO1xuaW1wb3J0IHsgQ0xTLCBKU09OX1ZJRVdfU1RZTEVTIH0gZnJvbSAnLi9kYXRhLWluc3BlY3Rvci5zdHlsZXMnO1xuaW1wb3J0IHsgU3Bpbm5lciB9IGZyb20gJy4vc3Bpbm5lcic7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3RyZWFtUmVmIC8gQ2xhc3NJbnN0YW5jZVJlZiB0eXBlIGRldGVjdGlvblxuLy8gKGlubGluZSB0byBhdm9pZCBjaXJjdWxhciBkZXBzIHdpdGggaHlkcmF0aW9uIG1vZHVsZSlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5jb25zdCBTVFJFQU1fUkVGX1RZUEUgPSAnX193b3JrZmxvd19zdHJlYW1fcmVmX18nO1xuY29uc3QgQ0xBU1NfSU5TVEFOQ0VfUkVGX1RZUEUgPSAnX193b3JrZmxvd19jbGFzc19pbnN0YW5jZV9yZWZfXyc7XG5jb25zdCBSVU5fUkVGX1RZUEUgPSAnX193b3JrZmxvd19ydW5fcmVmX18nO1xuY29uc3QgQllURVNfRElTUExBWV9UWVBFID0gJ19fd29ya2Zsb3dfYnl0ZXNfZGlzcGxheV9fJztcblxuaW50ZXJmYWNlIFN0cmVhbVJlZiB7XG4gIF9fdHlwZTogdHlwZW9mIFNUUkVBTV9SRUZfVFlQRTtcbiAgc3RyZWFtSWQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFJ1blJlZiB7XG4gIF9fdHlwZTogdHlwZW9mIFJVTl9SRUZfVFlQRTtcbiAgcnVuSWQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEJ5dGVzRGlzcGxheSB7XG4gIF9fdHlwZTogdHlwZW9mIEJZVEVTX0RJU1BMQVlfVFlQRTtcbiAgdGV4dDogc3RyaW5nO1xuICBkZWNvZGVkRnJvbT86IERlY29kZWRTdHJlYW1DaHVua1NvdXJjZTtcbn1cblxuaW50ZXJmYWNlIENsYXNzSW5zdGFuY2VSZWYge1xuICBfX3R5cGU6IHR5cGVvZiBDTEFTU19JTlNUQU5DRV9SRUZfVFlQRTtcbiAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gIGNsYXNzSWQ6IHN0cmluZztcbiAgZGF0YTogdW5rbm93bjtcbn1cblxuZnVuY3Rpb24gZGVzZXJpYWxpemVDaHVua1RleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHRleHQpO1xuICAgIGlmICh0eXBlb2YgcGFyc2VkID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHBhcnNlZCwgbnVsbCwgMik7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ2h1bmtEYXRhKHRleHQ6IHN0cmluZyk6IHVua25vd24ge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHRleHQpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1N0cmVhbVJlZih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFN0cmVhbVJlZiB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gIC8vIENoZWNrIGJvdGggZW51bWVyYWJsZSBhbmQgbm9uLWVudW1lcmFibGUgX190eXBlIChvcGFxdWUgcmVmcyB1c2Ugbm9uLWVudW1lcmFibGUpXG4gIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCAnX190eXBlJyk7XG4gIHJldHVybiBkZXNjPy52YWx1ZSA9PT0gU1RSRUFNX1JFRl9UWVBFO1xufVxuXG5mdW5jdGlvbiBpc1J1blJlZih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJ1blJlZiB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCAnX190eXBlJyk7XG4gIHJldHVybiBkZXNjPy52YWx1ZSA9PT0gUlVOX1JFRl9UWVBFO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCeXRlc0Rpc3BsYXkodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBCeXRlc0Rpc3BsYXkge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih2YWx1ZSwgJ19fdHlwZScpO1xuICByZXR1cm4gZGVzYz8udmFsdWUgPT09IEJZVEVTX0RJU1BMQVlfVFlQRTtcbn1cblxuZnVuY3Rpb24gaXNDbGFzc0luc3RhbmNlUmVmKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgQ2xhc3NJbnN0YW5jZVJlZiB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgJ19fdHlwZScgaW4gdmFsdWUgJiZcbiAgICAodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLl9fdHlwZSA9PT0gQ0xBU1NfSU5TVEFOQ0VfUkVGX1RZUEVcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNFbmNyeXB0ZWRNYXJrZXIodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAodmFsdWUgYXMgeyBjb25zdHJ1Y3Rvcj86IHsgbmFtZT86IHN0cmluZyB9IH0pLmNvbnN0cnVjdG9yPy5uYW1lID09PVxuICAgICAgRU5DUllQVEVEX0RJU1BMQVlfTkFNRVxuICApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN0cmVhbSBjbGljayBjb250ZXh0IChwYXNzZWQgdGhyb3VnaCBmcm9tIHRoZSBwYW5lbClcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIENvbnRleHQgZm9yIHBhc3Npbmcgc3RyZWFtIGNsaWNrIGhhbmRsZXJzIGRvd24gdG8gRGF0YUluc3BlY3RvciBpbnN0YW5jZXMuXG4gKiBFeHBvcnRlZCBzbyB0aGF0IHBhcmVudCBjb21wb25lbnRzIChlLmcuLCBBdHRyaWJ1dGVQYW5lbCkgY2FuIHByb3ZpZGUgdGhlIGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBTdHJlYW1DbGlja0NvbnRleHQgPSBjcmVhdGVDb250ZXh0PFxuICAoKHN0cmVhbUlkOiBzdHJpbmcpID0+IHZvaWQpIHwgdW5kZWZpbmVkXG4+KHVuZGVmaW5lZCk7XG5cbi8qKlxuICogQ29udGV4dCBmb3IgcGFzc2luZyBhIGRlY3J5cHQgaGFuZGxlciBkb3duIHRvIERhdGFJbnNwZWN0b3IgaW5zdGFuY2VzLlxuICogV2hlbiBwcm92aWRlZCwgZW5jcnlwdGVkIG1hcmtlcnMgYmVjb21lIGNsaWNrYWJsZSBidXR0b25zIHRoYXQgdHJpZ2dlciBkZWNyeXB0aW9uLlxuICovXG5leHBvcnQgdHlwZSBEZWNyeXB0Q2xpY2tDb250ZXh0VmFsdWUgPSB7XG4gIG9uRGVjcnlwdDogKCkgPT4gdm9pZDtcbiAgaXNEZWNyeXB0aW5nOiBib29sZWFuO1xuICBoYXNFbmNyeXB0ZWREYXRhPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBEZWNyeXB0Q2xpY2tDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxcbiAgRGVjcnlwdENsaWNrQ29udGV4dFZhbHVlIHwgdW5kZWZpbmVkXG4+KHVuZGVmaW5lZCk7XG5cbmV4cG9ydCBjb25zdCBSdW5DbGlja0NvbnRleHQgPSBjcmVhdGVDb250ZXh0PFxuICAoKHJ1bklkOiBzdHJpbmcpID0+IHZvaWQpIHwgdW5kZWZpbmVkXG4+KHVuZGVmaW5lZCk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gV29ya2Zsb3ctc3BlY2lmaWMgdmFsdWUgcmVuZGVyZXJzIChiYWRnZXMsIGVuY3J5cHRlZCBtYXJrZXJzLCBieXRlIHN0cmVhbXMpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gRW5jcnlwdGVkSW5saW5lTGFiZWwoKSB7XG4gIGNvbnN0IGN0eCA9IHVzZUNvbnRleHQoRGVjcnlwdENsaWNrQ29udGV4dCk7XG4gIGlmIChjdHgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEJ1dHRvblxuICAgICAgICBzaXplPVwieHNcIlxuICAgICAgICBjbGFzc05hbWU9XCJhbGlnbi1iYXNlbGluZSBnYXAteC0xXCJcbiAgICAgICAgZGlzYWJsZWQ9e2N0eC5pc0RlY3J5cHRpbmd9XG4gICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBjdHgub25EZWNyeXB0KCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHtjdHguaXNEZWNyeXB0aW5nID8gKFxuICAgICAgICAgIDxTcGlubmVyIHNpemU9ezEwfSAvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxMb2NrIGNsYXNzTmFtZT1cImgtMyB3LTNcIiAvPlxuICAgICAgICApfVxuICAgICAgICA8c3Bhbj5EZWNyeXB0PC9zcGFuPlxuICAgICAgPC9CdXR0b24+XG4gICAgKTtcbiAgfVxuICByZXR1cm4gKFxuICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS02MDApJywgZm9udFN0eWxlOiAnaXRhbGljJyB9fT5cbiAgICAgIDxMb2NrXG4gICAgICAgIGNsYXNzTmFtZT1cImgtMyB3LTNcIlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGRpc3BsYXk6ICdpbmxpbmUnLFxuICAgICAgICAgIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICAgICAgICAgIG1hcmdpblJpZ2h0OiAnM3B4JyxcbiAgICAgICAgICBtYXJnaW5Ub3A6ICctMXB4JyxcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgICBFbmNyeXB0ZWRcbiAgICA8L3NwYW4+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFN0cmVhbVJlZklubGluZSh7IHN0cmVhbVJlZiB9OiB7IHN0cmVhbVJlZjogU3RyZWFtUmVmIH0pIHtcbiAgY29uc3Qgb25TdHJlYW1DbGljayA9IHVzZUNvbnRleHQoU3RyZWFtQ2xpY2tDb250ZXh0KTtcbiAgY29uc3QgW2hvdmVyZWQsIHNldEhvdmVyZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEuNSBweS0wLjUgcm91bmRlZCB0ZXh0LVsxMHB4XSBmb250LW1vbm8gY3Vyc29yLXBvaW50ZXIgdW5kZXJsaW5lIGRlY29yYXRpb24tdHJhbnNwYXJlbnQgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBob3ZlcmVkID8gJ3ZhcigtLWRzLWJsdWUtMjAwKScgOiAndmFyKC0tZHMtYmx1ZS0xMDApJyxcbiAgICAgICAgY29sb3I6ICd2YXIoLS1kcy1ibHVlLTkwMCknLFxuICAgICAgICBib3JkZXI6ICcxcHggc29saWQgdmFyKC0tZHMtYmx1ZS0zMDApJyxcbiAgICAgIH19XG4gICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldEhvdmVyZWQodHJ1ZSl9XG4gICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHNldEhvdmVyZWQoZmFsc2UpfVxuICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgb25TdHJlYW1DbGljaz8uKHN0cmVhbVJlZi5zdHJlYW1JZCk7XG4gICAgICB9fVxuICAgICAgdGl0bGU9e2BWaWV3IHN0cmVhbTogJHtzdHJlYW1SZWYuc3RyZWFtSWR9YH1cbiAgICA+XG4gICAgICA8c3Bhbj7wn5OhPC9zcGFuPlxuICAgICAgPHNwYW4+e3N0cmVhbVJlZi5zdHJlYW1JZH08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFJ1blJlZklubGluZSh7IHJ1blJlZiB9OiB7IHJ1blJlZjogUnVuUmVmIH0pIHtcbiAgY29uc3Qgb25SdW5DbGljayA9IHVzZUNvbnRleHQoUnVuQ2xpY2tDb250ZXh0KTtcbiAgY29uc3QgW2hvdmVyZWQsIHNldEhvdmVyZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEuNSBweS0wLjUgcm91bmRlZCB0ZXh0LVsxMHB4XSBmb250LW1vbm8gY3Vyc29yLXBvaW50ZXIgdW5kZXJsaW5lIGRlY29yYXRpb24tdHJhbnNwYXJlbnQgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBob3ZlcmVkXG4gICAgICAgICAgPyAndmFyKC0tZHMtcHVycGxlLTIwMCknXG4gICAgICAgICAgOiAndmFyKC0tZHMtcHVycGxlLTEwMCknLFxuICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLXB1cnBsZS05MDApJyxcbiAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkIHZhcigtLWRzLXB1cnBsZS0zMDApJyxcbiAgICAgIH19XG4gICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldEhvdmVyZWQodHJ1ZSl9XG4gICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHNldEhvdmVyZWQoZmFsc2UpfVxuICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgb25SdW5DbGljaz8uKHJ1blJlZi5ydW5JZCk7XG4gICAgICB9fVxuICAgICAgdGl0bGU9e2BWaWV3IHJ1bjogJHtydW5SZWYucnVuSWR9YH1cbiAgICA+XG4gICAgICA8c3Bhbj57cnVuUmVmLnJ1bklkfTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gRGVjb2RlZEJ5dGVzQ2h1bmsoe1xuICBkZWNvZGVkVGV4dCxcbiAgc291cmNlLFxufToge1xuICBkZWNvZGVkVGV4dDogc3RyaW5nO1xuICBzb3VyY2U6IERlY29kZWRTdHJlYW1DaHVua1NvdXJjZTtcbn0pIHtcbiAgY29uc3QgW3NlbGVjdGVkVmlldywgc2V0U2VsZWN0ZWRWaWV3XSA9IHVzZVN0YXRlPCdkZWNvZGVkJyB8ICdieXRlcyc+KFxuICAgICdkZWNvZGVkJ1xuICApO1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZUNodW5rRGF0YShkZWNvZGVkVGV4dCk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTBcIj5cbiAgICAgIHtzZWxlY3RlZFZpZXcgPT09ICdkZWNvZGVkJyA/IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wXCI+XG4gICAgICAgICAge3R5cGVvZiBwYXJzZWQgPT09ICdzdHJpbmcnID8gKFxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwid2hpdGVzcGFjZS1wcmUtd3JhcCBicmVhay13b3Jkc1wiXG4gICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS0xMDAwKScgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2Rlc2VyaWFsaXplQ2h1bmtUZXh0KHBhcnNlZCl9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxEYXRhSW5zcGVjdG9yIGRhdGE9e3BhcnNlZH0gZXhwYW5kTGV2ZWw9ezF9IC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApIDogKFxuICAgICAgICA8RGVjb2RlZEJ5dGVzSW5zcGVjdG9yIGRlY29kZWRUZXh0PXtkZWNvZGVkVGV4dH0gc291cmNlPXtzb3VyY2V9IC8+XG4gICAgICApfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0yIGZsZXhcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT1cImlubGluZS1mbGV4IG92ZXJmbG93LWhpZGRlbiByb3VuZGVkIGJvcmRlclwiXG4gICAgICAgICAgc3R5bGU9e3sgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1ncmF5LTQwMCknIH19XG4gICAgICAgICAgdGl0bGU9e2Ake3NvdXJjZS50eXBlfSBkZWNvZGVkIGFzICR7c291cmNlLmVuY29kaW5nLnRvVXBwZXJDYXNlKCl9IHRleHQuIFN3aXRjaCB0byBCeXRlcyB0byBpbnNwZWN0IHRoZSBzdW1tYXJpemVkIHJhdyB2YWx1ZS5gfVxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJoLTUgcHgtMS41IHRleHQtWzEwcHhdIGZvbnQtbWVkaXVtXCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFZpZXcgPT09ICdkZWNvZGVkJ1xuICAgICAgICAgICAgICAgICAgPyAndmFyKC0tZHMtZ3JheS0yMDApJ1xuICAgICAgICAgICAgICAgICAgOiAndmFyKC0tZHMtZ3JheS0xMDApJyxcbiAgICAgICAgICAgICAgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTkwMCknLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNlbGVjdGVkVmlldygnZGVjb2RlZCcpfVxuICAgICAgICAgICAgYXJpYS1wcmVzc2VkPXtzZWxlY3RlZFZpZXcgPT09ICdkZWNvZGVkJ31cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTaG93IGRlY29kZWQgdGV4dFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgRGVjb2RlZFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC01IGJvcmRlci1sIHB4LTEuNSB0ZXh0LVsxMHB4XSBmb250LW1lZGl1bVwiXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktNDAwKScsXG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFZpZXcgPT09ICdieXRlcydcbiAgICAgICAgICAgICAgICAgID8gJ3ZhcigtLWRzLWdyYXktMjAwKSdcbiAgICAgICAgICAgICAgICAgIDogJ3ZhcigtLWRzLWdyYXktMTAwKScsXG4gICAgICAgICAgICAgIGNvbG9yOiAndmFyKC0tZHMtZ3JheS05MDApJyxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTZWxlY3RlZFZpZXcoJ2J5dGVzJyl9XG4gICAgICAgICAgICBhcmlhLXByZXNzZWQ9e3NlbGVjdGVkVmlldyA9PT0gJ2J5dGVzJ31cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTaG93IHJhdyBieXRlcyBzdW1tYXJ5XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBCeXRlc1xuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBEZWNvZGVkQnl0ZXNJbnNwZWN0b3Ioe1xuICBkZWNvZGVkVGV4dCxcbiAgc291cmNlLFxufToge1xuICBkZWNvZGVkVGV4dDogc3RyaW5nO1xuICBzb3VyY2U6IERlY29kZWRTdHJlYW1DaHVua1NvdXJjZTtcbn0pIHtcbiAgY29uc3QgW2V4cGFuZGVkLCBzZXRFeHBhbmRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZvbnQtbW9ub1wiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBtYXgtdy1mdWxsIGl0ZW1zLXN0YXJ0IGdhcC0xIHRleHQtbGVmdFwiXG4gICAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS0xMDAwKScgfX1cbiAgICAgICAgb25DbGljaz17KCkgPT4gc2V0RXhwYW5kZWQoKHZhbHVlKSA9PiAhdmFsdWUpfVxuICAgICAgICB0aXRsZT17YCR7c291cmNlLnR5cGV9IGRlY29kZWQgYXMgJHtzb3VyY2UuZW5jb2RpbmcudG9VcHBlckNhc2UoKX0gdGV4dGB9XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNlbGVjdC1ub25lXCIgc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTcwMCknIH19PlxuICAgICAgICAgIHtleHBhbmRlZCA/ICfilrwnIDogJ+KWtid9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWluLXctMCBicmVhay13b3Jkc1wiPntzb3VyY2UucmF3U3VtbWFyeX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIHtleHBhbmRlZCAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMSBwbC01XCI+XG4gICAgICAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTcwMCknIH19PmRlY29kZWQ6IDwvc3Bhbj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3NOYW1lPVwid2hpdGVzcGFjZS1wcmUtd3JhcCBicmVhay13b3Jkc1wiXG4gICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyZWVuLTkwMCknIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge0pTT04uc3RyaW5naWZ5KGRlY29kZWRUZXh0KX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gQnl0ZXNEaXNwbGF5VmFsdWUoeyBkaXNwbGF5IH06IHsgZGlzcGxheTogQnl0ZXNEaXNwbGF5IH0pIHtcbiAgaWYgKGRpc3BsYXkuZGVjb2RlZEZyb20pIHtcbiAgICByZXR1cm4gKFxuICAgICAgPERlY29kZWRCeXRlc0NodW5rXG4gICAgICAgIGRlY29kZWRUZXh0PXtkaXNwbGF5LnRleHR9XG4gICAgICAgIHNvdXJjZT17ZGlzcGxheS5kZWNvZGVkRnJvbX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuICByZXR1cm4gKFxuICAgIDxzcGFuXG4gICAgICBjbGFzc05hbWU9XCJ3aGl0ZXNwYWNlLXByZS13cmFwIGJyZWFrLXdvcmRzXCJcbiAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS0xMDAwKScgfX1cbiAgICA+XG4gICAgICB7ZGlzcGxheS50ZXh0fVxuICAgIDwvc3Bhbj5cbiAgKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUcmVlIHJlbmRlcmVyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudHlwZSBFbnRyeSA9IFtmaWVsZDogc3RyaW5nIHwgdW5kZWZpbmVkLCB2YWx1ZTogdW5rbm93bl07XG5cbmludGVyZmFjZSBOb2RlQ29udGV4dCB7XG4gIGxldmVsOiBudW1iZXI7XG4gIHNob3VsZEV4cGFuZDogKGxldmVsOiBudW1iZXIpID0+IGJvb2xlYW47XG4gIG91dGVyUmVmOiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQgfCBudWxsPjtcbn1cblxuLyoqIEZpZWxkIG5hbWVzIGFyZSByZW5kZXJlZCB1bnF1b3RlZCAoZW1wdHkgc3RyaW5nIHNob3dzIGFzIGBcIlwiYCkuICovXG5mdW5jdGlvbiBmb3JtYXRGaWVsZChmaWVsZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGZpZWxkID09PSAnJyA/ICdcIlwiJyA6IGZpZWxkO1xufVxuXG4vKipcbiAqIERlc2NyaWJlIGFuIG9iamVjdC9hcnJheS9tYXAvc2V0IGFzIGFuIGV4cGFuZGFibGUgY29udGFpbmVyLiBSZXR1cm5zIG51bGwgZm9yXG4gKiB2YWx1ZXMgdGhhdCBzaG91bGQgcmVuZGVyIGFzIGEgcHJpbWl0aXZlLiBgcHJlZml4YCBjYXJyaWVzIGEgY2xhc3MgbmFtZSBzaG93blxuICogYmVmb3JlIHRoZSBvcGVuaW5nIGJyYWNrZXQgKE1hcC9TZXQgYW5kIG5hbWVkIGNsYXNzIGluc3RhbmNlcykuXG4gKi9cbmZ1bmN0aW9uIGRlc2NyaWJlQ29udGFpbmVyKFxuICB2YWx1ZTogdW5rbm93blxuKTogeyBlbnRyaWVzOiBFbnRyeVtdOyBvcGVuOiBzdHJpbmc7IGNsb3NlOiBzdHJpbmc7IHByZWZpeD86IHN0cmluZyB9IHwgbnVsbCB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB7XG4gICAgICBlbnRyaWVzOiB2YWx1ZS5tYXAoKGl0ZW0pID0+IFt1bmRlZmluZWQsIGl0ZW1dIGFzIEVudHJ5KSxcbiAgICAgIG9wZW46ICdbJyxcbiAgICAgIGNsb3NlOiAnXScsXG4gICAgfTtcbiAgfVxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBNYXApIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50cmllczogQXJyYXkuZnJvbSh2YWx1ZS5lbnRyaWVzKCksIChba2V5LCB2YWxdKSA9PiBbXG4gICAgICAgIFN0cmluZyhrZXkpLFxuICAgICAgICB2YWwsXG4gICAgICBdKSBhcyBFbnRyeVtdLFxuICAgICAgb3BlbjogJ3snLFxuICAgICAgY2xvc2U6ICd9JyxcbiAgICAgIHByZWZpeDogJ01hcCcsXG4gICAgfTtcbiAgfVxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50cmllczogQXJyYXkuZnJvbSh2YWx1ZS52YWx1ZXMoKSwgKGl0ZW0pID0+IFt1bmRlZmluZWQsIGl0ZW1dIGFzIEVudHJ5KSxcbiAgICAgIG9wZW46ICdbJyxcbiAgICAgIGNsb3NlOiAnXScsXG4gICAgICBwcmVmaXg6ICdTZXQnLFxuICAgIH07XG4gIH1cbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBuYW1lID0gKHZhbHVlIGFzIHsgY29uc3RydWN0b3I/OiB7IG5hbWU/OiBzdHJpbmcgfSB9KS5jb25zdHJ1Y3RvclxuICAgICAgPy5uYW1lO1xuICAgIHJldHVybiB7XG4gICAgICBlbnRyaWVzOiBPYmplY3QuZW50cmllcyh2YWx1ZSkgYXMgRW50cnlbXSxcbiAgICAgIG9wZW46ICd7JyxcbiAgICAgIGNsb3NlOiAnfScsXG4gICAgICBwcmVmaXg6IG5hbWUgJiYgbmFtZSAhPT0gJ09iamVjdCcgPyBuYW1lIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlUHJpbWl0aXZlKHZhbHVlOiB1bmtub3duKTogeyB0ZXh0OiBzdHJpbmc7IGNsczogc3RyaW5nIH0ge1xuICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiB7IHRleHQ6ICdudWxsJywgY2xzOiBDTFMubnVsbCB9O1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHsgdGV4dDogJ3VuZGVmaW5lZCcsIGNsczogQ0xTLnVuZGVmaW5lZCB9O1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgIHJldHVybiB7IHRleHQ6IGBcIiR7U3RyaW5nKHZhbHVlKX1cImAsIGNsczogQ0xTLnN0cmluZyB9O1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIEJvb2xlYW4pIHtcbiAgICByZXR1cm4geyB0ZXh0OiBTdHJpbmcodmFsdWUpLCBjbHM6IENMUy5ib29sZWFuIH07XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHwgdmFsdWUgaW5zdGFuY2VvZiBOdW1iZXIpIHtcbiAgICByZXR1cm4geyB0ZXh0OiBTdHJpbmcodmFsdWUpLCBjbHM6IENMUy5udW1iZXIgfTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50Jykge1xuICAgIHJldHVybiB7IHRleHQ6IGAke3ZhbHVlLnRvU3RyaW5nKCl9bmAsIGNsczogQ0xTLm51bWJlciB9O1xuICB9XG4gIHJldHVybiB7IHRleHQ6IFN0cmluZyh2YWx1ZSksIGNsczogQ0xTLnB1bmN0dWF0aW9uIH07XG59XG5cbmZ1bmN0aW9uIExhYmVsKHsgZmllbGQsIGNsaWNrYWJsZSB9OiB7IGZpZWxkPzogc3RyaW5nOyBjbGlja2FibGU/OiBib29sZWFuIH0pIHtcbiAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQpIHJldHVybiBudWxsO1xuICByZXR1cm4gKFxuICAgIDxzcGFuIGNsYXNzTmFtZT17Y2xpY2thYmxlID8gQ0xTLmNsaWNrYWJsZUxhYmVsIDogQ0xTLmxhYmVsfT5cbiAgICAgIHtgJHtmb3JtYXRGaWVsZChmaWVsZCl9OmB9XG4gICAgPC9zcGFuPlxuICApO1xufVxuXG5mdW5jdGlvbiBDb21tYSh7IGlzTGFzdCB9OiB7IGlzTGFzdDogYm9vbGVhbiB9KSB7XG4gIGlmIChpc0xhc3QpIHJldHVybiBudWxsO1xuICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPXtDTFMucHVuY3R1YXRpb259Piw8L3NwYW4+O1xufVxuXG4vKiogQSBub24tZXhwYW5kYWJsZSByb3c6IGBmaWVsZDogPHZhbHVlPmAuICovXG5mdW5jdGlvbiBMZWFmUm93KHtcbiAgZmllbGQsXG4gIGlzTGFzdCxcbiAgY2hpbGRyZW4sXG59OiB7XG4gIGZpZWxkPzogc3RyaW5nO1xuICBpc0xhc3Q6IGJvb2xlYW47XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG59KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e0NMUy5jaGlsZH0gcm9sZT1cInRyZWVpdGVtXCIgdGFiSW5kZXg9ey0xfT5cbiAgICAgIDxMYWJlbCBmaWVsZD17ZmllbGR9IC8+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgICA8Q29tbWEgaXNMYXN0PXtpc0xhc3R9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFByaW1pdGl2ZVZhbHVlKHsgZmllbGQsIHZhbHVlLCBpc0xhc3QgfTogTm9kZVByb3BzKSB7XG4gIGNvbnN0IHsgdGV4dCwgY2xzIH0gPSBkZXNjcmliZVByaW1pdGl2ZSh2YWx1ZSk7XG4gIHJldHVybiAoXG4gICAgPExlYWZSb3cgZmllbGQ9e2ZpZWxkfSBpc0xhc3Q9e2lzTGFzdH0+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9e2Nsc30+e3RleHR9PC9zcGFuPlxuICAgIDwvTGVhZlJvdz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gRW1wdHlDb250YWluZXIoe1xuICBmaWVsZCxcbiAgcHJlZml4LFxuICBvcGVuLFxuICBjbG9zZSxcbiAgaXNMYXN0LFxufToge1xuICBmaWVsZD86IHN0cmluZztcbiAgcHJlZml4Pzogc3RyaW5nO1xuICBvcGVuOiBzdHJpbmc7XG4gIGNsb3NlOiBzdHJpbmc7XG4gIGlzTGFzdDogYm9vbGVhbjtcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Q0xTLmNoaWxkfSByb2xlPVwidHJlZWl0ZW1cIiB0YWJJbmRleD17LTF9PlxuICAgICAgPExhYmVsIGZpZWxkPXtmaWVsZH0gLz5cbiAgICAgIHtwcmVmaXggPyA8c3BhbiBjbGFzc05hbWU9e0NMUy5jbGFzc05hbWV9PntwcmVmaXh9PC9zcGFuPiA6IG51bGx9XG4gICAgICA8c3BhbiBjbGFzc05hbWU9e0NMUy5wdW5jdHVhdGlvbn0+e29wZW59PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtDTFMucHVuY3R1YXRpb259PntjbG9zZX08L3NwYW4+XG4gICAgICA8Q29tbWEgaXNMYXN0PXtpc0xhc3R9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGZvY3VzRXhwYW5kZXIoXG4gIGJ1dHRvbjogSFRNTEVsZW1lbnQsXG4gIG91dGVyUmVmOiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQgfCBudWxsPlxuKSB7XG4gIGNvbnN0IHByZXZpb3VzID0gb3V0ZXJSZWYuY3VycmVudD8ucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXG4gICAgJ1tkYXRhLWpzb24tZXhwYW5kZXJdW3RhYmluZGV4PVwiMFwiXSdcbiAgKTtcbiAgaWYgKHByZXZpb3VzKSBwcmV2aW91cy50YWJJbmRleCA9IC0xO1xuICBidXR0b24udGFiSW5kZXggPSAwO1xuICBidXR0b24uZm9jdXMoKTtcbn1cblxuZnVuY3Rpb24gbW92ZUV4cGFuZGVyRm9jdXMoXG4gIG91dGVyUmVmOiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQgfCBudWxsPixcbiAgZGlyZWN0aW9uOiAxIHwgLTFcbikge1xuICBjb25zdCByb290ID0gb3V0ZXJSZWYuY3VycmVudDtcbiAgaWYgKCFyb290KSByZXR1cm47XG4gIGNvbnN0IGJ1dHRvbnMgPSByb290LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KCdbZGF0YS1qc29uLWV4cGFuZGVyXScpO1xuICBsZXQgY3VycmVudCA9IC0xO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1dHRvbnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAoYnV0dG9uc1tpXS50YWJJbmRleCA9PT0gMCkge1xuICAgICAgY3VycmVudCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGN1cnJlbnQgPCAwKSByZXR1cm47XG4gIGNvbnN0IG5leHQgPSAoY3VycmVudCArIGRpcmVjdGlvbiArIGJ1dHRvbnMubGVuZ3RoKSAlIGJ1dHRvbnMubGVuZ3RoO1xuICBidXR0b25zW2N1cnJlbnRdLnRhYkluZGV4ID0gLTE7XG4gIGJ1dHRvbnNbbmV4dF0udGFiSW5kZXggPSAwO1xuICBidXR0b25zW25leHRdLmZvY3VzKCk7XG59XG5cbmZ1bmN0aW9uIEV4cGFuZGFibGVDb250YWluZXIoe1xuICBmaWVsZCxcbiAgZW50cmllcyxcbiAgb3BlbixcbiAgY2xvc2UsXG4gIHByZWZpeCxcbiAgY3R4LFxuICBpc0xhc3QsXG59OiB7XG4gIGZpZWxkPzogc3RyaW5nO1xuICBlbnRyaWVzOiBFbnRyeVtdO1xuICBvcGVuOiBzdHJpbmc7XG4gIGNsb3NlOiBzdHJpbmc7XG4gIHByZWZpeD86IHN0cmluZztcbiAgY3R4OiBOb2RlQ29udGV4dDtcbiAgaXNMYXN0OiBib29sZWFuO1xufSkge1xuICBjb25zdCB7IGxldmVsLCBzaG91bGRFeHBhbmQsIG91dGVyUmVmIH0gPSBjdHg7XG4gIGNvbnN0IFtleHBhbmRlZCwgc2V0RXhwYW5kZWRdID0gdXNlU3RhdGUoKCkgPT4gc2hvdWxkRXhwYW5kKGxldmVsKSk7XG4gIGNvbnN0IHJvd1JlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGNvbnRlbnRzSWQgPSB1c2VJZCgpO1xuXG4gIGlmIChlbnRyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAoXG4gICAgICA8RW1wdHlDb250YWluZXJcbiAgICAgICAgZmllbGQ9e2ZpZWxkfVxuICAgICAgICBwcmVmaXg9e3ByZWZpeH1cbiAgICAgICAgb3Blbj17b3Blbn1cbiAgICAgICAgY2xvc2U9e2Nsb3NlfVxuICAgICAgICBpc0xhc3Q9e2lzTGFzdH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHRvZ2dsZSA9ICgpID0+IHtcbiAgICBzZXRFeHBhbmRlZCgodmFsdWUpID0+ICF2YWx1ZSk7XG4gICAgaWYgKHJvd1JlZi5jdXJyZW50KSBmb2N1c0V4cGFuZGVyKHJvd1JlZi5jdXJyZW50LCBvdXRlclJlZik7XG4gIH07XG5cbiAgLy8gVG9nZ2xlIG9ubHkgZm9yIGNsaWNrcyB0aGF0IGxhbmQgb24gdGhpcyByb3cgaXRzZWxmOyBjbGlja3MgYnViYmxpbmcgdXAgb3V0XG4gIC8vIG9mIGEgbmVzdGVkIHRyZWVpdGVtIGFyZSBoYW5kbGVkIGJ5IHRoYXQgZGVzY2VuZGFudCdzIG93biByb3cuXG4gIGNvbnN0IG9uQ2xpY2sgPSAoZXZlbnQ6IFJlYWN0TW91c2VFdmVudCkgPT4ge1xuICAgIGlmIChcbiAgICAgIChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoJ1tyb2xlPVwidHJlZWl0ZW1cIl0nKSAhPT1cbiAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXRcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdG9nZ2xlKCk7XG4gIH07XG5cbiAgY29uc3Qgb25LZXlEb3duID0gKGV2ZW50OiBSZWFjdEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBzZXRFeHBhbmRlZCh0cnVlKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBzZXRFeHBhbmRlZChmYWxzZSk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG1vdmVFeHBhbmRlckZvY3VzKG91dGVyUmVmLCAtMSk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgbW92ZUV4cGFuZGVyRm9jdXMob3V0ZXJSZWYsIDEpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBsYXN0SW5kZXggPSBlbnRyaWVzLmxlbmd0aCAtIDE7XG5cbiAgcmV0dXJuIChcbiAgICAvLyBUaGUgdHJlZWl0ZW0gcm93IGlzIHRoZSBmb2N1c2FibGUsIGtleWJvYXJkLW9wZXJhYmxlIGNvbnRyb2wgKHJvdmluZ1xuICAgIC8vIHRhYmluZGV4ICsgYXJyb3cga2V5cyk7IHRoZSBkaXNjbG9zdXJlIG1hcmtlciBiZWxvdyBpcyBwdXJlbHkgZGVjb3JhdGl2ZS5cbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e0NMUy5jaGlsZH1cbiAgICAgIHJvbGU9XCJ0cmVlaXRlbVwiXG4gICAgICBhcmlhLWV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgIGFyaWEtY29udHJvbHM9e2V4cGFuZGVkID8gY29udGVudHNJZCA6IHVuZGVmaW5lZH1cbiAgICAgIGRhdGEtanNvbi1leHBhbmRlclxuICAgICAgcmVmPXtyb3dSZWZ9XG4gICAgICB0YWJJbmRleD17bGV2ZWwgPT09IDAgPyAwIDogLTF9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgb25LZXlEb3duPXtvbktleURvd259XG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3NOYW1lPXtleHBhbmRlZCA/IENMUy5jb2xsYXBzZUljb24gOiBDTFMuZXhwYW5kSWNvbn1cbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgIC8+XG4gICAgICB7ZmllbGQgIT09IHVuZGVmaW5lZCAmJiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Q0xTLmNsaWNrYWJsZUxhYmVsfT57YCR7Zm9ybWF0RmllbGQoZmllbGQpfTpgfTwvc3Bhbj5cbiAgICAgICl9XG4gICAgICB7cHJlZml4ID8gPHNwYW4gY2xhc3NOYW1lPXtDTFMuY2xhc3NOYW1lfT57cHJlZml4fTwvc3Bhbj4gOiBudWxsfVxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtDTFMucHVuY3R1YXRpb259PntvcGVufTwvc3Bhbj5cbiAgICAgIHtleHBhbmRlZCA/IChcbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS91c2VTZW1hbnRpY0VsZW1lbnRzOiBBUklBIHRyZWUgZ3JvdXAgaXMgdGhlIGNvcnJlY3Qgcm9sZSBoZXJlXG4gICAgICAgIDx1bCBpZD17Y29udGVudHNJZH0gY2xhc3NOYW1lPXtDTFMuY2hpbGRGaWVsZHN9IHJvbGU9XCJncm91cFwiPlxuICAgICAgICAgIHtlbnRyaWVzLm1hcCgoW2NoaWxkRmllbGQsIGNoaWxkVmFsdWVdLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPERhdGFSZW5kZXJcbiAgICAgICAgICAgICAga2V5PXtjaGlsZEZpZWxkID8/IGluZGV4fVxuICAgICAgICAgICAgICBmaWVsZD17Y2hpbGRGaWVsZH1cbiAgICAgICAgICAgICAgdmFsdWU9e2NoaWxkVmFsdWV9XG4gICAgICAgICAgICAgIGlzTGFzdD17aW5kZXggPT09IGxhc3RJbmRleH1cbiAgICAgICAgICAgICAgY3R4PXt7IC4uLmN0eCwgbGV2ZWw6IGxldmVsICsgMSB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC91bD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Q0xTLmNvbGxhcHNlZENvbnRlbnR9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICApfVxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtDTFMucHVuY3R1YXRpb259PntjbG9zZX08L3NwYW4+XG4gICAgICA8Q29tbWEgaXNMYXN0PXtpc0xhc3R9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmludGVyZmFjZSBOb2RlUHJvcHMge1xuICBmaWVsZD86IHN0cmluZztcbiAgdmFsdWU6IHVua25vd247XG4gIGlzTGFzdDogYm9vbGVhbjtcbiAgY3R4OiBOb2RlQ29udGV4dDtcbn1cblxuZnVuY3Rpb24gRGF0YVJlbmRlcih7IGZpZWxkLCB2YWx1ZSwgaXNMYXN0LCBjdHggfTogTm9kZVByb3BzKSB7XG4gIGlmIChpc0J5dGVzRGlzcGxheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPExlYWZSb3cgZmllbGQ9e2ZpZWxkfSBpc0xhc3Q9e2lzTGFzdH0+XG4gICAgICAgIDxCeXRlc0Rpc3BsYXlWYWx1ZSBkaXNwbGF5PXt2YWx1ZX0gLz5cbiAgICAgIDwvTGVhZlJvdz5cbiAgICApO1xuICB9XG4gIGlmIChpc0VuY3J5cHRlZE1hcmtlcih2YWx1ZSkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPExlYWZSb3cgZmllbGQ9e2ZpZWxkfSBpc0xhc3Q9e2lzTGFzdH0+XG4gICAgICAgIDxFbmNyeXB0ZWRJbmxpbmVMYWJlbCAvPlxuICAgICAgPC9MZWFmUm93PlxuICAgICk7XG4gIH1cbiAgaWYgKGlzU3RyZWFtUmVmKHZhbHVlKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8TGVhZlJvdyBmaWVsZD17ZmllbGR9IGlzTGFzdD17aXNMYXN0fT5cbiAgICAgICAgPFN0cmVhbVJlZklubGluZSBzdHJlYW1SZWY9e3ZhbHVlfSAvPlxuICAgICAgPC9MZWFmUm93PlxuICAgICk7XG4gIH1cbiAgaWYgKGlzUnVuUmVmKHZhbHVlKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8TGVhZlJvdyBmaWVsZD17ZmllbGR9IGlzTGFzdD17aXNMYXN0fT5cbiAgICAgICAgPFJ1blJlZklubGluZSBydW5SZWY9e3ZhbHVlfSAvPlxuICAgICAgPC9MZWFmUm93PlxuICAgICk7XG4gIH1cbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiAoXG4gICAgICA8TGVhZlJvdyBmaWVsZD17ZmllbGR9IGlzTGFzdD17aXNMYXN0fT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtDTFMuZGF0ZX0+e3ZhbHVlLnRvSVNPU3RyaW5nKCl9PC9zcGFuPlxuICAgICAgPC9MZWFmUm93PlxuICAgICk7XG4gIH1cbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxMZWFmUm93IGZpZWxkPXtmaWVsZH0gaXNMYXN0PXtpc0xhc3R9PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e0NMUy5yZWdleHB9Pnt2YWx1ZS50b1N0cmluZygpfTwvc3Bhbj5cbiAgICAgIDwvTGVhZlJvdz5cbiAgICApO1xuICB9XG4gIGlmIChpc0NsYXNzSW5zdGFuY2VSZWYodmFsdWUpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxDbGFzc0luc3RhbmNlTm9kZVxuICAgICAgICBmaWVsZD17ZmllbGR9XG4gICAgICAgIGluc3RhbmNlPXt2YWx1ZX1cbiAgICAgICAgaXNMYXN0PXtpc0xhc3R9XG4gICAgICAgIGN0eD17Y3R4fVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgY29uc3QgY29udGFpbmVyID0gZGVzY3JpYmVDb250YWluZXIodmFsdWUpO1xuICBpZiAoY29udGFpbmVyKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxFeHBhbmRhYmxlQ29udGFpbmVyXG4gICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgZW50cmllcz17Y29udGFpbmVyLmVudHJpZXN9XG4gICAgICAgIG9wZW49e2NvbnRhaW5lci5vcGVufVxuICAgICAgICBjbG9zZT17Y29udGFpbmVyLmNsb3NlfVxuICAgICAgICBwcmVmaXg9e2NvbnRhaW5lci5wcmVmaXh9XG4gICAgICAgIGN0eD17Y3R4fVxuICAgICAgICBpc0xhc3Q9e2lzTGFzdH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFByaW1pdGl2ZVZhbHVlIGZpZWxkPXtmaWVsZH0gdmFsdWU9e3ZhbHVlfSBpc0xhc3Q9e2lzTGFzdH0gY3R4PXtjdHh9IC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIENsYXNzSW5zdGFuY2VOb2RlKHtcbiAgZmllbGQsXG4gIGluc3RhbmNlLFxuICBpc0xhc3QsXG4gIGN0eCxcbn06IHtcbiAgZmllbGQ/OiBzdHJpbmc7XG4gIGluc3RhbmNlOiBDbGFzc0luc3RhbmNlUmVmO1xuICBpc0xhc3Q6IGJvb2xlYW47XG4gIGN0eDogTm9kZUNvbnRleHQ7XG59KSB7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGRlc2NyaWJlQ29udGFpbmVyKGluc3RhbmNlLmRhdGEpO1xuICBpZiAoY29udGFpbmVyKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxFeHBhbmRhYmxlQ29udGFpbmVyXG4gICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgZW50cmllcz17Y29udGFpbmVyLmVudHJpZXN9XG4gICAgICAgIG9wZW49e2NvbnRhaW5lci5vcGVufVxuICAgICAgICBjbG9zZT17Y29udGFpbmVyLmNsb3NlfVxuICAgICAgICBwcmVmaXg9e2luc3RhbmNlLmNsYXNzTmFtZX1cbiAgICAgICAgY3R4PXtjdHh9XG4gICAgICAgIGlzTGFzdD17aXNMYXN0fVxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIGNvbnN0IHsgdGV4dCwgY2xzIH0gPSBkZXNjcmliZVByaW1pdGl2ZShpbnN0YW5jZS5kYXRhKTtcbiAgcmV0dXJuIChcbiAgICA8TGVhZlJvdyBmaWVsZD17ZmllbGR9IGlzTGFzdD17aXNMYXN0fT5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17Q0xTLmNsYXNzTmFtZX0+e2luc3RhbmNlLmNsYXNzTmFtZX08L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9e2Nsc30+e3RleHR9PC9zcGFuPlxuICAgIDwvTGVhZlJvdz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gSnNvblRyZWUoe1xuICBkYXRhLFxuICBuYW1lLFxuICBleHBhbmRMZXZlbCxcbn06IHtcbiAgZGF0YTogdW5rbm93bjtcbiAgbmFtZT86IHN0cmluZztcbiAgZXhwYW5kTGV2ZWw6IG51bWJlcjtcbn0pIHtcbiAgY29uc3Qgb3V0ZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBzaG91bGRFeHBhbmQgPSB1c2VNZW1vKFxuICAgICgpID0+IChsZXZlbDogbnVtYmVyKSA9PiBsZXZlbCA8IGV4cGFuZExldmVsLFxuICAgIFtleHBhbmRMZXZlbF1cbiAgKTtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e291dGVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtDTFMuY29udGFpbmVyfVxuICAgICAgcm9sZT1cInRyZWVcIlxuICAgICAgYXJpYS1sYWJlbD1cIkpTT04gdmlld1wiXG4gICAgPlxuICAgICAgPERhdGFSZW5kZXJcbiAgICAgICAgZmllbGQ9e25hbWV9XG4gICAgICAgIHZhbHVlPXtkYXRhfVxuICAgICAgICBpc0xhc3RcbiAgICAgICAgY3R4PXt7IGxldmVsOiAwLCBzaG91bGRFeHBhbmQsIG91dGVyUmVmIH19XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlZiAvIHR5cGVkLWFycmF5IGNvbGxhcHNpbmcgKHByZXByb2Nlc3NpbmcgYmVmb3JlIHJlbmRlcilcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIENyZWF0ZSBhIG5vbi1leHBhbmRhYmxlIHdyYXBwZXIgdGhhdCBjYXJyaWVzIHJlZiBkYXRhIGFzIG5vbi1lbnVtZXJhYmxlXG4gKiBwcm9wZXJ0aWVzIHNvIHRoZSByZW5kZXJlciBjYW4gZGV0ZWN0IFN0cmVhbVJlZi9SdW5SZWYgd2l0aG91dCBleHBvc2luZ1xuICogdGhlaXIgaW50ZXJuYWxzIGFzIG9iamVjdCBmaWVsZHMuXG4gKi9cbmZ1bmN0aW9uIG1ha2VPcGFxdWVSZWYocmVmOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHVua25vd24ge1xuICBjb25zdCBvcGFxdWUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZWYpKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9wYXF1ZSwga2V5LCB7IHZhbHVlLCBlbnVtZXJhYmxlOiBmYWxzZSB9KTtcbiAgfVxuICByZXR1cm4gb3BhcXVlO1xufVxuXG5mdW5jdGlvbiBtYWtlQnl0ZXNEaXNwbGF5KGRpc3BsYXk6IEZvcm1hdHRlZFN0cmVhbUNodW5rRGlzcGxheSk6IHVua25vd24ge1xuICBjb25zdCBvcGFxdWUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3BhcXVlLCAnX190eXBlJywge1xuICAgIHZhbHVlOiBCWVRFU19ESVNQTEFZX1RZUEUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3BhcXVlLCAndGV4dCcsIHtcbiAgICB2YWx1ZTogZGlzcGxheS50ZXh0LFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9wYXF1ZSwgJ2RlY29kZWRGcm9tJywge1xuICAgIHZhbHVlOiBkaXNwbGF5LmRlY29kZWRGcm9tLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICB9KTtcbiAgcmV0dXJuIG9wYXF1ZTtcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSB3YWxrIGRhdGEgYW5kIHJlcGxhY2UgUnVuUmVmL1N0cmVhbVJlZi90eXBlZCBhcnJheSBvYmplY3RzIHdpdGhcbiAqIG5vbi1leHBhbmRhYmxlIHZlcnNpb25zIHNvIHRoZSByZW5kZXJlciBkb2Vzbid0IHNob3cgdGhlaXIgaW50ZXJuYWxzLlxuICogT25seSByZWN1cnNlcyBpbnRvIHBsYWluIG9iamVjdHMgYW5kIGFycmF5cyB0byBhdm9pZCBzdHJpcHBpbmcgY2xhc3NcbiAqIGluc3RhbmNlcyAoRGF0ZSwgRXJyb3IsIFVSTCwgSGVhZGVycywgZXRjLikgdGhhdCBoYXZlIHRoZWlyIG93biByZW5kZXJpbmcuXG4gKiBNYXAgYW5kIFNldCBjb250YWluZXJzIGFyZSBwcmVzZXJ2ZWQgd2hpbGUgdGhlaXIgY29udGVudHMgYXJlIHByZXBhcmVkIGZvclxuICogZGlzcGxheS5cbiAqXG4gKiBFeHBvcnRlZCBmb3IgdGVzdGluZyB0aGUgdHlwZWQtYXJyYXkgZGV0ZWN0aW9uIHBhdGggdXNlZCBieSBoeWRyYXRlZFxuICogQUkgYWdlbnQgc3RyZWFtIGNodW5rcyAoZS5nLiBgeyBkZWx0YTogbmV3IFVpbnQ4QXJyYXkoLi4uKSB9YCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xsYXBzZVJlZnMoZGF0YTogdW5rbm93bik6IHVua25vd24ge1xuICBpZiAoZGF0YSA9PT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHJldHVybiBkYXRhO1xuICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGRhdGEpICYmICEoZGF0YSBpbnN0YW5jZW9mIERhdGFWaWV3KSkge1xuICAgIHJldHVybiBtYWtlQnl0ZXNEaXNwbGF5KGZvcm1hdEFycmF5QnVmZmVyVmlld0ZvckRpc3BsYXkoZGF0YSkpO1xuICB9XG4gIGlmIChpc1J1blJlZihkYXRhKSB8fCBpc1N0cmVhbVJlZihkYXRhKSlcbiAgICByZXR1cm4gbWFrZU9wYXF1ZVJlZihkYXRhIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkgcmV0dXJuIGRhdGEubWFwKGNvbGxhcHNlUmVmcyk7XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgcmV0dXJuIG5ldyBNYXAoXG4gICAgICBBcnJheS5mcm9tKGRhdGEuZW50cmllcygpLCAoW2tleSwgdmFsdWVdKSA9PiBbXG4gICAgICAgIGNvbGxhcHNlUmVmcyhrZXkpLFxuICAgICAgICBjb2xsYXBzZVJlZnModmFsdWUpLFxuICAgICAgXSlcbiAgICApO1xuICB9XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgcmV0dXJuIG5ldyBTZXQoQXJyYXkuZnJvbShkYXRhLnZhbHVlcygpLCBjb2xsYXBzZVJlZnMpKTtcbiAgfVxuICAvLyBPbmx5IHJlY3Vyc2UgaW50byBwbGFpbiBvYmplY3RzIOKAlCBsZWF2ZSBjbGFzcyBpbnN0YW5jZXMgdW50b3VjaGVkXG4gIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGRhdGEpO1xuICBpZiAocHJvdG8gIT09IE9iamVjdC5wcm90b3R5cGUgJiYgcHJvdG8gIT09IG51bGwpIHJldHVybiBkYXRhO1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgcmVzdWx0W2tleV0gPSBjb2xsYXBzZVJlZnModmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljIGNvbXBvbmVudFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUluc3BlY3RvclByb3BzIHtcbiAgLyoqIFRoZSBkYXRhIHRvIGluc3BlY3QgKi9cbiAgZGF0YTogdW5rbm93bjtcbiAgLyoqIExldmVscyBzdHJpY3RseSBiZWxvdyB0aGlzIG51bWJlciBhdXRvLWV4cGFuZCAoZGVmYXVsdDogMikgKi9cbiAgZXhwYW5kTGV2ZWw/OiBudW1iZXI7XG4gIC8qKiBPcHRpb25hbCBuYW1lIGZvciB0aGUgcm9vdCBub2RlICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBDYWxsYmFjayB3aGVuIGEgc3RyZWFtIHJlZmVyZW5jZSBpcyBjbGlja2VkICovXG4gIG9uU3RyZWFtQ2xpY2s/OiAoc3RyZWFtSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIENhbGxiYWNrIHdoZW4gYSBydW4gcmVmZXJlbmNlIGlzIGNsaWNrZWQgKi9cbiAgb25SdW5DbGljaz86IChydW5JZDogc3RyaW5nKSA9PiB2b2lkO1xuICAvKiogQ2FsbGJhY2sgd2hlbiBhbiBlbmNyeXB0ZWQgbWFya2VyIGlzIGNsaWNrZWQgKHRyaWdnZXJzIGRlY3J5cHRpb24pICovXG4gIG9uRGVjcnlwdD86ICgpID0+IHZvaWQ7XG4gIC8qKiBXaGV0aGVyIGRlY3J5cHRpb24gaXMgY3VycmVudGx5IGluIHByb2dyZXNzICovXG4gIGlzRGVjcnlwdGluZz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEYXRhSW5zcGVjdG9yKHtcbiAgZGF0YSxcbiAgZXhwYW5kTGV2ZWwgPSAyLFxuICBuYW1lLFxuICBvblN0cmVhbUNsaWNrLFxuICBvblJ1bkNsaWNrLFxuICBvbkRlY3J5cHQsXG4gIGlzRGVjcnlwdGluZyA9IGZhbHNlLFxufTogRGF0YUluc3BlY3RvclByb3BzKSB7XG4gIGNvbnN0IGNvbGxhcHNlZERhdGEgPSB1c2VNZW1vKCgpID0+IGNvbGxhcHNlUmVmcyhkYXRhKSwgW2RhdGFdKTtcbiAgY29uc3Qgc3RhYmxlRGF0YSA9IHVzZVN0YWJsZUluc3BlY3RvckRhdGEoY29sbGFwc2VkRGF0YSk7XG5cbiAgbGV0IGNvbnRlbnQ6IFJlYWN0Tm9kZSA9IChcbiAgICA8PlxuICAgICAgey8qIFJlYWN0IDE5IGhvaXN0cyAmIGRlZHVwZXMgdGhpcyA8c3R5bGU+IGJ5IGhyZWYsIHNvIGl0IGlzIGVtaXR0ZWQgb25jZVxuICAgICAgICAgIHJlZ2FyZGxlc3Mgb2YgaG93IG1hbnkgaW5zcGVjdG9ycyBhcmUgbW91bnRlZC4gKi99XG4gICAgICA8c3R5bGUgaHJlZj1cIndmLWpzb24tdmlld1wiIHByZWNlZGVuY2U9XCJkZWZhdWx0XCI+XG4gICAgICAgIHtKU09OX1ZJRVdfU1RZTEVTfVxuICAgICAgPC9zdHlsZT5cbiAgICAgIDxKc29uVHJlZSBkYXRhPXtzdGFibGVEYXRhfSBuYW1lPXtuYW1lfSBleHBhbmRMZXZlbD17ZXhwYW5kTGV2ZWx9IC8+XG4gICAgPC8+XG4gICk7XG5cbiAgaWYgKG9uU3RyZWFtQ2xpY2spIHtcbiAgICBjb250ZW50ID0gKFxuICAgICAgPFN0cmVhbUNsaWNrQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17b25TdHJlYW1DbGlja30+XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgPC9TdHJlYW1DbGlja0NvbnRleHQuUHJvdmlkZXI+XG4gICAgKTtcbiAgfVxuICBpZiAob25SdW5DbGljaykge1xuICAgIGNvbnRlbnQgPSAoXG4gICAgICA8UnVuQ2xpY2tDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtvblJ1bkNsaWNrfT5cbiAgICAgICAge2NvbnRlbnR9XG4gICAgICA8L1J1bkNsaWNrQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xuICB9XG4gIGlmIChvbkRlY3J5cHQpIHtcbiAgICBjb250ZW50ID0gKFxuICAgICAgPERlY3J5cHRDbGlja0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3sgb25EZWNyeXB0LCBpc0RlY3J5cHRpbmcgfX0+XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgPC9EZWNyeXB0Q2xpY2tDb250ZXh0LlByb3ZpZGVyPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gY29udGVudDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZW5kZXIgc3RhYmlsaXphdGlvbiAoYXZvaWQgcmUtcmVuZGVycyB3aGVuIGRhdGEgaXMgZGVlcGx5IGVxdWFsKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIHVzZVN0YWJsZUluc3BlY3RvckRhdGE8VD4obmV4dDogVCk6IFQge1xuICBjb25zdCBwcmV2aW91c1JlZiA9IHVzZVJlZjxUPihuZXh0KTtcbiAgaWYgKCFpc0RlZXBFcXVhbChwcmV2aW91c1JlZi5jdXJyZW50LCBuZXh0KSkge1xuICAgIHByZXZpb3VzUmVmLmN1cnJlbnQgPSBuZXh0O1xuICB9XG4gIHJldHVybiBwcmV2aW91c1JlZi5jdXJyZW50O1xufVxuXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc1NhbWVCeXRlc0Rpc3BsYXkoYTogQnl0ZXNEaXNwbGF5LCBiOiBCeXRlc0Rpc3BsYXkpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBhLnRleHQgPT09IGIudGV4dCAmJlxuICAgIGEuZGVjb2RlZEZyb20/LnR5cGUgPT09IGIuZGVjb2RlZEZyb20/LnR5cGUgJiZcbiAgICBhLmRlY29kZWRGcm9tPy5lbmNvZGluZyA9PT0gYi5kZWNvZGVkRnJvbT8uZW5jb2RpbmcgJiZcbiAgICBhLmRlY29kZWRGcm9tPy5yYXdTdW1tYXJ5ID09PSBiLmRlY29kZWRGcm9tPy5yYXdTdW1tYXJ5XG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzRGVlcEVxdWFsKGE6IHVua25vd24sIGI6IHVua25vd24sIHNlZW4gPSBuZXcgV2Vha01hcCgpKTogYm9vbGVhbiB7XG4gIGlmIChPYmplY3QuaXMoYSwgYikpIHJldHVybiB0cnVlO1xuXG4gIGlmIChpc0J5dGVzRGlzcGxheShhKSB8fCBpc0J5dGVzRGlzcGxheShiKSkge1xuICAgIHJldHVybiBpc0J5dGVzRGlzcGxheShhKSAmJiBpc0J5dGVzRGlzcGxheShiKSAmJiBpc1NhbWVCeXRlc0Rpc3BsYXkoYSwgYik7XG4gIH1cblxuICBpZiAoYSBpbnN0YW5jZW9mIERhdGUgJiYgYiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gYS5nZXRUaW1lKCkgPT09IGIuZ2V0VGltZSgpO1xuICB9XG5cbiAgaWYgKGEgaW5zdGFuY2VvZiBSZWdFeHAgJiYgYiBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiBhLnNvdXJjZSA9PT0gYi5zb3VyY2UgJiYgYS5mbGFncyA9PT0gYi5mbGFncztcbiAgfVxuXG4gIGlmIChhIGluc3RhbmNlb2YgTWFwICYmIGIgaW5zdGFuY2VvZiBNYXApIHtcbiAgICBpZiAoYS5zaXplICE9PSBiLnNpemUpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBhLmVudHJpZXMoKSkge1xuICAgICAgaWYgKCFiLmhhcyhrZXkpIHx8ICFpc0RlZXBFcXVhbCh2YWx1ZSwgYi5nZXQoa2V5KSwgc2VlbikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoYSBpbnN0YW5jZW9mIFNldCAmJiBiIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgaWYgKGEuc2l6ZSAhPT0gYi5zaXplKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBhLnZhbHVlcygpKSB7XG4gICAgICBpZiAoIWIuaGFzKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICghaXNPYmplY3RMaWtlKGEpIHx8ICFpc09iamVjdExpa2UoYikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoc2Vlbi5nZXQoYSkgPT09IGIpIHJldHVybiB0cnVlO1xuICBzZWVuLnNldChhLCBiKTtcblxuICBjb25zdCBhSXNBcnJheSA9IEFycmF5LmlzQXJyYXkoYSk7XG4gIGNvbnN0IGJJc0FycmF5ID0gQXJyYXkuaXNBcnJheShiKTtcbiAgaWYgKGFJc0FycmF5ICE9PSBiSXNBcnJheSkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChhSXNBcnJheSAmJiBiSXNBcnJheSkge1xuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmICghaXNEZWVwRXF1YWwoYVtpXSwgYltpXSwgc2VlbikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBhS2V5cyA9IE9iamVjdC5rZXlzKGEpO1xuICBjb25zdCBiS2V5cyA9IE9iamVjdC5rZXlzKGIpO1xuICBpZiAoYUtleXMubGVuZ3RoICE9PSBiS2V5cy5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICBmb3IgKGNvbnN0IGtleSBvZiBhS2V5cykge1xuICAgIGlmICghT2JqZWN0Lmhhc093bihiLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCFpc0RlZXBFcXVhbChhW2tleV0sIGJba2V5XSwgc2VlbikpIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuIl19
524
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1pbnNwZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy91aS9kYXRhLWluc3BlY3Rvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxhQUFhLEVBS2IsVUFBVSxFQUNWLEtBQUssRUFDTCxPQUFPLEVBQ1AsTUFBTSxFQUNOLFFBQVEsR0FDVCxNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdELE9BQU8sRUFHTCwrQkFBK0IsR0FDaEMsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBDLDhFQUE4RTtBQUM5RSw4Q0FBOEM7QUFDOUMsd0RBQXdEO0FBQ3hELDhFQUE4RTtBQUU5RSxNQUFNLGVBQWUsR0FBRyx5QkFBeUIsQ0FBQztBQUNsRCxNQUFNLHVCQUF1QixHQUFHLGlDQUFpQyxDQUFDO0FBQ2xFLE1BQU0sWUFBWSxHQUFHLHNCQUFzQixDQUFDO0FBQzVDLE1BQU0sa0JBQWtCLEdBQUcsNEJBQTRCLENBQUM7QUF5QnhELFNBQVMsb0JBQW9CLENBQUMsSUFBWTtJQUN4QyxJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDL0IsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUNELE9B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LENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7UUFDbkQsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0IsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU07UUFBRSxPQUFPLEtBQUssQ0FBQztJQUVoRCxLQUFLLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN6QyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7SUFDdkQsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuLyoqXG4gKiBSZXVzYWJsZSBkYXRhIGluc3BlY3RvciBmb3IgdGhlIG8xMXkgVUkuXG4gKlxuICogUmVuZGVycyBKU09OIGFzIGEgY29sbGFwc2libGUgdHJlZTogYnJhY2tldCBub3RhdGlvbiAoYHsg4oCmIH1gIC8gYFsg4oCmIF1gKSxcbiAqIGNvbG9yZWQga2V5cywgdHlwZWQgdmFsdWUgY29sb3JzLCBg4pa4YC9g4pa+YCBkaXNjbG9zdXJlIGljb25zLCBhbmQgYSBgLi4uYFxuICogY29sbGFwc2VkIGluZGljYXRvci5cbiAqXG4gKiBPbiB0b3Agb2YgcGxhaW4gSlNPTiBpdCBoYW5kbGVzIHRoZSB3b3JrZmxvdy1zcGVjaWZpYyB2YWx1ZSB0eXBlczogU3RyZWFtUmVmIC9cbiAqIFJ1blJlZiBiYWRnZXMsIGVuY3J5cHRlZCBtYXJrZXJzLCBkZWNvZGVkIGJ5dGUgc3RyZWFtcywgRGF0ZXMsIGFuZCBuYW1lZFxuICogY2xhc3MgaW5zdGFuY2VzLlxuICovXG5cbmltcG9ydCB7IExvY2sgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHtcbiAgY3JlYXRlQ29udGV4dCxcbiAgdHlwZSBLZXlib2FyZEV2ZW50IGFzIFJlYWN0S2V5Ym9hcmRFdmVudCxcbiAgdHlwZSBNb3VzZUV2ZW50IGFzIFJlYWN0TW91c2VFdmVudCxcbiAgdHlwZSBSZWFjdE5vZGUsXG4gIHR5cGUgUmVmT2JqZWN0LFxuICB1c2VDb250ZXh0LFxuICB1c2VJZCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRU5DUllQVEVEX0RJU1BMQVlfTkFNRSB9IGZyb20gJy4uLy4uL2xpYi9oeWRyYXRpb24nO1xuaW1wb3J0IHtcbiAgdHlwZSBEZWNvZGVkU3RyZWFtQ2h1bmtTb3VyY2UsXG4gIHR5cGUgRm9ybWF0dGVkU3RyZWFtQ2h1bmtEaXNwbGF5LFxuICBmb3JtYXRBcnJheUJ1ZmZlclZpZXdGb3JEaXNwbGF5LFxufSBmcm9tICcuLi8uLi9saWIvc3RyZWFtLWRpc3BsYXknO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9idXR0b24nO1xuaW1wb3J0IHsgQ0xTLCBKU09OX1ZJRVdfU1RZTEVTIH0gZnJvbSAnLi9kYXRhLWluc3BlY3Rvci5zdHlsZXMnO1xuaW1wb3J0IHsgU3Bpbm5lciB9IGZyb20gJy4vc3Bpbm5lcic7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3RyZWFtUmVmIC8gQ2xhc3NJbnN0YW5jZVJlZiB0eXBlIGRldGVjdGlvblxuLy8gKGlubGluZSB0byBhdm9pZCBjaXJjdWxhciBkZXBzIHdpdGggaHlkcmF0aW9uIG1vZHVsZSlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5jb25zdCBTVFJFQU1fUkVGX1RZUEUgPSAnX193b3JrZmxvd19zdHJlYW1fcmVmX18nO1xuY29uc3QgQ0xBU1NfSU5TVEFOQ0VfUkVGX1RZUEUgPSAnX193b3JrZmxvd19jbGFzc19pbnN0YW5jZV9yZWZfXyc7XG5jb25zdCBSVU5fUkVGX1RZUEUgPSAnX193b3JrZmxvd19ydW5fcmVmX18nO1xuY29uc3QgQllURVNfRElTUExBWV9UWVBFID0gJ19fd29ya2Zsb3dfYnl0ZXNfZGlzcGxheV9fJztcblxuaW50ZXJmYWNlIFN0cmVhbVJlZiB7XG4gIF9fdHlwZTogdHlwZW9mIFNUUkVBTV9SRUZfVFlQRTtcbiAgc3RyZWFtSWQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFJ1blJlZiB7XG4gIF9fdHlwZTogdHlwZW9mIFJVTl9SRUZfVFlQRTtcbiAgcnVuSWQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEJ5dGVzRGlzcGxheSB7XG4gIF9fdHlwZTogdHlwZW9mIEJZVEVTX0RJU1BMQVlfVFlQRTtcbiAgdGV4dDogc3RyaW5nO1xuICBkZWNvZGVkRnJvbT86IERlY29kZWRTdHJlYW1DaHVua1NvdXJjZTtcbn1cblxuaW50ZXJmYWNlIENsYXNzSW5zdGFuY2VSZWYge1xuICBfX3R5cGU6IHR5cGVvZiBDTEFTU19JTlNUQU5DRV9SRUZfVFlQRTtcbiAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gIGNsYXNzSWQ6IHN0cmluZztcbiAgZGF0YTogdW5rbm93bjtcbn1cblxuZnVuY3Rpb24gZGVzZXJpYWxpemVDaHVua1RleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHRleHQpO1xuICAgIGlmICh0eXBlb2YgcGFyc2VkID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHBhcnNlZCwgbnVsbCwgMik7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ2h1bmtEYXRhKHRleHQ6IHN0cmluZyk6IHVua25vd24ge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHRleHQpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1N0cmVhbVJlZih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFN0cmVhbVJlZiB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gIC8vIENoZWNrIGJvdGggZW51bWVyYWJsZSBhbmQgbm9uLWVudW1lcmFibGUgX190eXBlIChvcGFxdWUgcmVmcyB1c2Ugbm9uLWVudW1lcmFibGUpXG4gIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCAnX190eXBlJyk7XG4gIHJldHVybiBkZXNjPy52YWx1ZSA9PT0gU1RSRUFNX1JFRl9UWVBFO1xufVxuXG5mdW5jdGlvbiBpc1J1blJlZih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJ1blJlZiB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCAnX190eXBlJyk7XG4gIHJldHVybiBkZXNjPy52YWx1ZSA9PT0gUlVOX1JFRl9UWVBFO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCeXRlc0Rpc3BsYXkodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBCeXRlc0Rpc3BsYXkge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih2YWx1ZSwgJ19fdHlwZScpO1xuICByZXR1cm4gZGVzYz8udmFsdWUgPT09IEJZVEVTX0RJU1BMQVlfVFlQRTtcbn1cblxuZnVuY3Rpb24gaXNDbGFzc0luc3RhbmNlUmVmKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgQ2xhc3NJbnN0YW5jZVJlZiB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgJ19fdHlwZScgaW4gdmFsdWUgJiZcbiAgICAodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLl9fdHlwZSA9PT0gQ0xBU1NfSU5TVEFOQ0VfUkVGX1RZUEVcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNFbmNyeXB0ZWRNYXJrZXIodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAodmFsdWUgYXMgeyBjb25zdHJ1Y3Rvcj86IHsgbmFtZT86IHN0cmluZyB9IH0pLmNvbnN0cnVjdG9yPy5uYW1lID09PVxuICAgICAgRU5DUllQVEVEX0RJU1BMQVlfTkFNRVxuICApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN0cmVhbSBjbGljayBjb250ZXh0IChwYXNzZWQgdGhyb3VnaCBmcm9tIHRoZSBwYW5lbClcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIENvbnRleHQgZm9yIHBhc3Npbmcgc3RyZWFtIGNsaWNrIGhhbmRsZXJzIGRvd24gdG8gRGF0YUluc3BlY3RvciBpbnN0YW5jZXMuXG4gKiBFeHBvcnRlZCBzbyB0aGF0IHBhcmVudCBjb21wb25lbnRzIChlLmcuLCBBdHRyaWJ1dGVQYW5lbCkgY2FuIHByb3ZpZGUgdGhlIGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBTdHJlYW1DbGlja0NvbnRleHQgPSBjcmVhdGVDb250ZXh0PFxuICAoKHN0cmVhbUlkOiBzdHJpbmcpID0+IHZvaWQpIHwgdW5kZWZpbmVkXG4+KHVuZGVmaW5lZCk7XG5cbi8qKlxuICogQ29udGV4dCBmb3IgcGFzc2luZyBhIGRlY3J5cHQgaGFuZGxlciBkb3duIHRvIERhdGFJbnNwZWN0b3IgaW5zdGFuY2VzLlxuICogV2hlbiBwcm92aWRlZCwgZW5jcnlwdGVkIG1hcmtlcnMgYmVjb21lIGNsaWNrYWJsZSBidXR0b25zIHRoYXQgdHJpZ2dlciBkZWNyeXB0aW9uLlxuICovXG5leHBvcnQgdHlwZSBEZWNyeXB0Q2xpY2tDb250ZXh0VmFsdWUgPSB7XG4gIG9uRGVjcnlwdDogKCkgPT4gdm9pZDtcbiAgaXNEZWNyeXB0aW5nOiBib29sZWFuO1xuICBoYXNFbmNyeXB0ZWREYXRhPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBEZWNyeXB0Q2xpY2tDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxcbiAgRGVjcnlwdENsaWNrQ29udGV4dFZhbHVlIHwgdW5kZWZpbmVkXG4+KHVuZGVmaW5lZCk7XG5cbmV4cG9ydCBjb25zdCBSdW5DbGlja0NvbnRleHQgPSBjcmVhdGVDb250ZXh0PFxuICAoKHJ1bklkOiBzdHJpbmcpID0+IHZvaWQpIHwgdW5kZWZpbmVkXG4+KHVuZGVmaW5lZCk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gV29ya2Zsb3ctc3BlY2lmaWMgdmFsdWUgcmVuZGVyZXJzIChiYWRnZXMsIGVuY3J5cHRlZCBtYXJrZXJzLCBieXRlIHN0cmVhbXMpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gRW5jcnlwdGVkSW5saW5lTGFiZWwoKSB7XG4gIGNvbnN0IGN0eCA9IHVzZUNvbnRleHQoRGVjcnlwdENsaWNrQ29udGV4dCk7XG4gIGlmIChjdHgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEJ1dHRvblxuICAgICAgICBzaXplPVwieHNcIlxuICAgICAgICBjbGFzc05hbWU9XCJhbGlnbi1iYXNlbGluZSBnYXAteC0xXCJcbiAgICAgICAgZGlzYWJsZWQ9e2N0eC5pc0RlY3J5cHRpbmd9XG4gICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBjdHgub25EZWNyeXB0KCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHtjdHguaXNEZWNyeXB0aW5nID8gKFxuICAgICAgICAgIDxTcGlubmVyIHNpemU9ezEwfSAvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxMb2NrIGNsYXNzTmFtZT1cImgtMyB3LTNcIiAvPlxuICAgICAgICApfVxuICAgICAgICA8c3Bhbj5EZWNyeXB0PC9zcGFuPlxuICAgICAgPC9CdXR0b24+XG4gICAgKTtcbiAgfVxuICByZXR1cm4gKFxuICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS02MDApJywgZm9udFN0eWxlOiAnaXRhbGljJyB9fT5cbiAgICAgIDxMb2NrXG4gICAgICAgIGNsYXNzTmFtZT1cImgtMyB3LTNcIlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGRpc3BsYXk6ICdpbmxpbmUnLFxuICAgICAgICAgIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICAgICAgICAgIG1hcmdpblJpZ2h0OiAnM3B4JyxcbiAgICAgICAgICBtYXJnaW5Ub3A6ICctMXB4JyxcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgICBFbmNyeXB0ZWRcbiAgICA8L3NwYW4+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFN0cmVhbVJlZklubGluZSh7IHN0cmVhbVJlZiB9OiB7IHN0cmVhbVJlZjogU3RyZWFtUmVmIH0pIHtcbiAgY29uc3Qgb25TdHJlYW1DbGljayA9IHVzZUNvbnRleHQoU3RyZWFtQ2xpY2tDb250ZXh0KTtcbiAgY29uc3QgW2hvdmVyZWQsIHNldEhvdmVyZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEuNSBweS0wLjUgcm91bmRlZCB0ZXh0LVsxMHB4XSBmb250LW1vbm8gY3Vyc29yLXBvaW50ZXIgdW5kZXJsaW5lIGRlY29yYXRpb24tdHJhbnNwYXJlbnQgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBob3ZlcmVkID8gJ3ZhcigtLWRzLWJsdWUtMjAwKScgOiAndmFyKC0tZHMtYmx1ZS0xMDApJyxcbiAgICAgICAgY29sb3I6ICd2YXIoLS1kcy1ibHVlLTkwMCknLFxuICAgICAgICBib3JkZXI6ICcxcHggc29saWQgdmFyKC0tZHMtYmx1ZS0zMDApJyxcbiAgICAgIH19XG4gICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldEhvdmVyZWQodHJ1ZSl9XG4gICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHNldEhvdmVyZWQoZmFsc2UpfVxuICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgb25TdHJlYW1DbGljaz8uKHN0cmVhbVJlZi5zdHJlYW1JZCk7XG4gICAgICB9fVxuICAgICAgdGl0bGU9e2BWaWV3IHN0cmVhbTogJHtzdHJlYW1SZWYuc3RyZWFtSWR9YH1cbiAgICA+XG4gICAgICA8c3Bhbj7wn5OhPC9zcGFuPlxuICAgICAgPHNwYW4+e3N0cmVhbVJlZi5zdHJlYW1JZH08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFJ1blJlZklubGluZSh7IHJ1blJlZiB9OiB7IHJ1blJlZjogUnVuUmVmIH0pIHtcbiAgY29uc3Qgb25SdW5DbGljayA9IHVzZUNvbnRleHQoUnVuQ2xpY2tDb250ZXh0KTtcbiAgY29uc3QgW2hvdmVyZWQsIHNldEhvdmVyZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEuNSBweS0wLjUgcm91bmRlZCB0ZXh0LVsxMHB4XSBmb250LW1vbm8gY3Vyc29yLXBvaW50ZXIgdW5kZXJsaW5lIGRlY29yYXRpb24tdHJhbnNwYXJlbnQgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBob3ZlcmVkXG4gICAgICAgICAgPyAndmFyKC0tZHMtcHVycGxlLTIwMCknXG4gICAgICAgICAgOiAndmFyKC0tZHMtcHVycGxlLTEwMCknLFxuICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLXB1cnBsZS05MDApJyxcbiAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkIHZhcigtLWRzLXB1cnBsZS0zMDApJyxcbiAgICAgIH19XG4gICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldEhvdmVyZWQodHJ1ZSl9XG4gICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHNldEhvdmVyZWQoZmFsc2UpfVxuICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgb25SdW5DbGljaz8uKHJ1blJlZi5ydW5JZCk7XG4gICAgICB9fVxuICAgICAgdGl0bGU9e2BWaWV3IHJ1bjogJHtydW5SZWYucnVuSWR9YH1cbiAgICA+XG4gICAgICA8c3Bhbj57cnVuUmVmLnJ1bklkfTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gRGVjb2RlZEJ5dGVzQ2h1bmsoe1xuICBkZWNvZGVkVGV4dCxcbiAgc291cmNlLFxufToge1xuICBkZWNvZGVkVGV4dDogc3RyaW5nO1xuICBzb3VyY2U6IERlY29kZWRTdHJlYW1DaHVua1NvdXJjZTtcbn0pIHtcbiAgY29uc3QgW3NlbGVjdGVkVmlldywgc2V0U2VsZWN0ZWRWaWV3XSA9IHVzZVN0YXRlPCdkZWNvZGVkJyB8ICdieXRlcyc+KFxuICAgICdkZWNvZGVkJ1xuICApO1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZUNodW5rRGF0YShkZWNvZGVkVGV4dCk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTBcIj5cbiAgICAgIHtzZWxlY3RlZFZpZXcgPT09ICdkZWNvZGVkJyA/IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wXCI+XG4gICAgICAgICAge3R5cGVvZiBwYXJzZWQgPT09ICdzdHJpbmcnID8gKFxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwid2hpdGVzcGFjZS1wcmUtd3JhcCBicmVhay13b3Jkc1wiXG4gICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS0xMDAwKScgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2Rlc2VyaWFsaXplQ2h1bmtUZXh0KHBhcnNlZCl9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxEYXRhSW5zcGVjdG9yIGRhdGE9e3BhcnNlZH0gZXhwYW5kTGV2ZWw9ezF9IC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApIDogKFxuICAgICAgICA8RGVjb2RlZEJ5dGVzSW5zcGVjdG9yIGRlY29kZWRUZXh0PXtkZWNvZGVkVGV4dH0gc291cmNlPXtzb3VyY2V9IC8+XG4gICAgICApfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0yIGZsZXhcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT1cImlubGluZS1mbGV4IG92ZXJmbG93LWhpZGRlbiByb3VuZGVkIGJvcmRlclwiXG4gICAgICAgICAgc3R5bGU9e3sgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1ncmF5LTQwMCknIH19XG4gICAgICAgICAgdGl0bGU9e2Ake3NvdXJjZS50eXBlfSBkZWNvZGVkIGFzICR7c291cmNlLmVuY29kaW5nLnRvVXBwZXJDYXNlKCl9IHRleHQuIFN3aXRjaCB0byBCeXRlcyB0byBpbnNwZWN0IHRoZSBzdW1tYXJpemVkIHJhdyB2YWx1ZS5gfVxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJoLTUgcHgtMS41IHRleHQtWzEwcHhdIGZvbnQtbWVkaXVtXCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFZpZXcgPT09ICdkZWNvZGVkJ1xuICAgICAgICAgICAgICAgICAgPyAndmFyKC0tZHMtZ3JheS0yMDApJ1xuICAgICAgICAgICAgICAgICAgOiAndmFyKC0tZHMtZ3JheS0xMDApJyxcbiAgICAgICAgICAgICAgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTkwMCknLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNlbGVjdGVkVmlldygnZGVjb2RlZCcpfVxuICAgICAgICAgICAgYXJpYS1wcmVzc2VkPXtzZWxlY3RlZFZpZXcgPT09ICdkZWNvZGVkJ31cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTaG93IGRlY29kZWQgdGV4dFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgRGVjb2RlZFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC01IGJvcmRlci1sIHB4LTEuNSB0ZXh0LVsxMHB4XSBmb250LW1lZGl1bVwiXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktNDAwKScsXG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFZpZXcgPT09ICdieXRlcydcbiAgICAgICAgICAgICAgICAgID8gJ3ZhcigtLWRzLWdyYXktMjAwKSdcbiAgICAgICAgICAgICAgICAgIDogJ3ZhcigtLWRzLWdyYXktMTAwKScsXG4gICAgICAgICAgICAgIGNvbG9yOiAndmFyKC0tZHMtZ3JheS05MDApJyxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTZWxlY3RlZFZpZXcoJ2J5dGVzJyl9XG4gICAgICAgICAgICBhcmlhLXByZXNzZWQ9e3NlbGVjdGVkVmlldyA9PT0gJ2J5dGVzJ31cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTaG93IHJhdyBieXRlcyBzdW1tYXJ5XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBCeXRlc1xuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBEZWNvZGVkQnl0ZXNJbnNwZWN0b3Ioe1xuICBkZWNvZGVkVGV4dCxcbiAgc291cmNlLFxufToge1xuICBkZWNvZGVkVGV4dDogc3RyaW5nO1xuICBzb3VyY2U6IERlY29kZWRTdHJlYW1DaHVua1NvdXJjZTtcbn0pIHtcbiAgY29uc3QgW2V4cGFuZGVkLCBzZXRFeHBhbmRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZvbnQtbW9ub1wiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBtYXgtdy1mdWxsIGl0ZW1zLXN0YXJ0IGdhcC0xIHRleHQtbGVmdFwiXG4gICAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS0xMDAwKScgfX1cbiAgICAgICAgb25DbGljaz17KCkgPT4gc2V0RXhwYW5kZWQoKHZhbHVlKSA9PiAhdmFsdWUpfVxuICAgICAgICB0aXRsZT17YCR7c291cmNlLnR5cGV9IGRlY29kZWQgYXMgJHtzb3VyY2UuZW5jb2RpbmcudG9VcHBlckNhc2UoKX0gdGV4dGB9XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNlbGVjdC1ub25lXCIgc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTcwMCknIH19PlxuICAgICAgICAgIHtleHBhbmRlZCA/ICfilrwnIDogJ+KWtid9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWluLXctMCBicmVhay13b3Jkc1wiPntzb3VyY2UucmF3U3VtbWFyeX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIHtleHBhbmRlZCAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMSBwbC01XCI+XG4gICAgICAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTcwMCknIH19PmRlY29kZWQ6IDwvc3Bhbj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3NOYW1lPVwid2hpdGVzcGFjZS1wcmUtd3JhcCBicmVhay13b3Jkc1wiXG4gICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyZWVuLTkwMCknIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge0pTT04uc3RyaW5naWZ5KGRlY29kZWRUZXh0KX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gQnl0ZXNEaXNwbGF5VmFsdWUoeyBkaXNwbGF5IH06IHsgZGlzcGxheTogQnl0ZXNEaXNwbGF5IH0pIHtcbiAgaWYgKGRpc3BsYXkuZGVjb2RlZEZyb20pIHtcbiAgICByZXR1cm4gKFxuICAgICAgPERlY29kZWRCeXRlc0NodW5rXG4gICAgICAgIGRlY29kZWRUZXh0PXtkaXNwbGF5LnRleHR9XG4gICAgICAgIHNvdXJjZT17ZGlzcGxheS5kZWNvZGVkRnJvbX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuICByZXR1cm4gKFxuICAgIDxzcGFuXG4gICAgICBjbGFzc05hbWU9XCJ3aGl0ZXNwYWNlLXByZS13cmFwIGJyZWFrLXdvcmRzXCJcbiAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS0xMDAwKScgfX1cbiAgICA+XG4gICAgICB7ZGlzcGxheS50ZXh0fVxuICAgIDwvc3Bhbj5cbiAgKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUcmVlIHJlbmRlcmVyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudHlwZSBFbnRyeSA9IFtmaWVsZDogc3RyaW5nIHwgdW5kZWZpbmVkLCB2YWx1ZTogdW5rbm93bl07XG5cbmludGVyZmFjZSBOb2RlQ29udGV4dCB7XG4gIGxldmVsOiBudW1iZXI7XG4gIHNob3VsZEV4cGFuZDogKGxldmVsOiBudW1iZXIpID0+IGJvb2xlYW47XG4gIG91dGVyUmVmOiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQgfCBudWxsPjtcbn1cblxuLyoqIEZpZWxkIG5hbWVzIGFyZSByZW5kZXJlZCB1bnF1b3RlZCAoZW1wdHkgc3RyaW5nIHNob3dzIGFzIGBcIlwiYCkuICovXG5mdW5jdGlvbiBmb3JtYXRGaWVsZChmaWVsZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGZpZWxkID09PSAnJyA/ICdcIlwiJyA6IGZpZWxkO1xufVxuXG4vKipcbiAqIERlc2NyaWJlIGFuIG9iamVjdC9hcnJheS9tYXAvc2V0IGFzIGFuIGV4cGFuZGFibGUgY29udGFpbmVyLiBSZXR1cm5zIG51bGwgZm9yXG4gKiB2YWx1ZXMgdGhhdCBzaG91bGQgcmVuZGVyIGFzIGEgcHJpbWl0aXZlLiBgcHJlZml4YCBjYXJyaWVzIGEgY2xhc3MgbmFtZSBzaG93blxuICogYmVmb3JlIHRoZSBvcGVuaW5nIGJyYWNrZXQgKE1hcC9TZXQgYW5kIG5hbWVkIGNsYXNzIGluc3RhbmNlcykuXG4gKi9cbmZ1bmN0aW9uIGRlc2NyaWJlQ29udGFpbmVyKFxuICB2YWx1ZTogdW5rbm93blxuKTogeyBlbnRyaWVzOiBFbnRyeVtdOyBvcGVuOiBzdHJpbmc7IGNsb3NlOiBzdHJpbmc7IHByZWZpeD86IHN0cmluZyB9IHwgbnVsbCB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB7XG4gICAgICBlbnRyaWVzOiB2YWx1ZS5tYXAoKGl0ZW0pID0+IFt1bmRlZmluZWQsIGl0ZW1dIGFzIEVudHJ5KSxcbiAgICAgIG9wZW46ICdbJyxcbiAgICAgIGNsb3NlOiAnXScsXG4gICAgfTtcbiAgfVxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBNYXApIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50cmllczogQXJyYXkuZnJvbSh2YWx1ZS5lbnRyaWVzKCksIChba2V5LCB2YWxdKSA9PiBbXG4gICAgICAgIFN0cmluZyhrZXkpLFxuICAgICAgICB2YWwsXG4gICAgICBdKSBhcyBFbnRyeVtdLFxuICAgICAgb3BlbjogJ3snLFxuICAgICAgY2xvc2U6ICd9JyxcbiAgICAgIHByZWZpeDogJ01hcCcsXG4gICAgfTtcbiAgfVxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50cmllczogQXJyYXkuZnJvbSh2YWx1ZS52YWx1ZXMoKSwgKGl0ZW0pID0+IFt1bmRlZmluZWQsIGl0ZW1dIGFzIEVudHJ5KSxcbiAgICAgIG9wZW46ICdbJyxcbiAgICAgIGNsb3NlOiAnXScsXG4gICAgICBwcmVmaXg6ICdTZXQnLFxuICAgIH07XG4gIH1cbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBuYW1lID0gKHZhbHVlIGFzIHsgY29uc3RydWN0b3I/OiB7IG5hbWU/OiBzdHJpbmcgfSB9KS5jb25zdHJ1Y3RvclxuICAgICAgPy5uYW1lO1xuICAgIHJldHVybiB7XG4gICAgICBlbnRyaWVzOiBPYmplY3QuZW50cmllcyh2YWx1ZSkgYXMgRW50cnlbXSxcbiAgICAgIG9wZW46ICd7JyxcbiAgICAgIGNsb3NlOiAnfScsXG4gICAgICBwcmVmaXg6IG5hbWUgJiYgbmFtZSAhPT0gJ09iamVjdCcgPyBuYW1lIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlUHJpbWl0aXZlKHZhbHVlOiB1bmtub3duKTogeyB0ZXh0OiBzdHJpbmc7IGNsczogc3RyaW5nIH0ge1xuICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiB7IHRleHQ6ICdudWxsJywgY2xzOiBDTFMubnVsbCB9O1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHsgdGV4dDogJ3VuZGVmaW5lZCcsIGNsczogQ0xTLnVuZGVmaW5lZCB9O1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgIHJldHVybiB7IHRleHQ6IGBcIiR7U3RyaW5nKHZhbHVlKX1cImAsIGNsczogQ0xTLnN0cmluZyB9O1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIEJvb2xlYW4pIHtcbiAgICByZXR1cm4geyB0ZXh0OiBTdHJpbmcodmFsdWUpLCBjbHM6IENMUy5ib29sZWFuIH07XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHwgdmFsdWUgaW5zdGFuY2VvZiBOdW1iZXIpIHtcbiAgICByZXR1cm4geyB0ZXh0OiBTdHJpbmcodmFsdWUpLCBjbHM6IENMUy5udW1iZXIgfTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50Jykge1xuICAgIHJldHVybiB7IHRleHQ6IGAke3ZhbHVlLnRvU3RyaW5nKCl9bmAsIGNsczogQ0xTLm51bWJlciB9O1xuICB9XG4gIHJldHVybiB7IHRleHQ6IFN0cmluZyh2YWx1ZSksIGNsczogQ0xTLnB1bmN0dWF0aW9uIH07XG59XG5cbmZ1bmN0aW9uIExhYmVsKHsgZmllbGQsIGNsaWNrYWJsZSB9OiB7IGZpZWxkPzogc3RyaW5nOyBjbGlja2FibGU/OiBib29sZWFuIH0pIHtcbiAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQpIHJldHVybiBudWxsO1xuICByZXR1cm4gKFxuICAgIDxzcGFuIGNsYXNzTmFtZT17Y2xpY2thYmxlID8gQ0xTLmNsaWNrYWJsZUxhYmVsIDogQ0xTLmxhYmVsfT5cbiAgICAgIHtgJHtmb3JtYXRGaWVsZChmaWVsZCl9OmB9XG4gICAgPC9zcGFuPlxuICApO1xufVxuXG5mdW5jdGlvbiBDb21tYSh7IGlzTGFzdCB9OiB7IGlzTGFzdDogYm9vbGVhbiB9KSB7XG4gIGlmIChpc0xhc3QpIHJldHVybiBudWxsO1xuICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPXtDTFMucHVuY3R1YXRpb259Piw8L3NwYW4+O1xufVxuXG4vKiogQSBub24tZXhwYW5kYWJsZSByb3c6IGBmaWVsZDogPHZhbHVlPmAuICovXG5mdW5jdGlvbiBMZWFmUm93KHtcbiAgZmllbGQsXG4gIGlzTGFzdCxcbiAgY2hpbGRyZW4sXG59OiB7XG4gIGZpZWxkPzogc3RyaW5nO1xuICBpc0xhc3Q6IGJvb2xlYW47XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG59KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e0NMUy5jaGlsZH0gcm9sZT1cInRyZWVpdGVtXCIgdGFiSW5kZXg9ey0xfT5cbiAgICAgIDxMYWJlbCBmaWVsZD17ZmllbGR9IC8+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgICA8Q29tbWEgaXNMYXN0PXtpc0xhc3R9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFByaW1pdGl2ZVZhbHVlKHsgZmllbGQsIHZhbHVlLCBpc0xhc3QgfTogTm9kZVByb3BzKSB7XG4gIGNvbnN0IHsgdGV4dCwgY2xzIH0gPSBkZXNjcmliZVByaW1pdGl2ZSh2YWx1ZSk7XG4gIHJldHVybiAoXG4gICAgPExlYWZSb3cgZmllbGQ9e2ZpZWxkfSBpc0xhc3Q9e2lzTGFzdH0+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9e2Nsc30+e3RleHR9PC9zcGFuPlxuICAgIDwvTGVhZlJvdz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gRW1wdHlDb250YWluZXIoe1xuICBmaWVsZCxcbiAgcHJlZml4LFxuICBvcGVuLFxuICBjbG9zZSxcbiAgaXNMYXN0LFxufToge1xuICBmaWVsZD86IHN0cmluZztcbiAgcHJlZml4Pzogc3RyaW5nO1xuICBvcGVuOiBzdHJpbmc7XG4gIGNsb3NlOiBzdHJpbmc7XG4gIGlzTGFzdDogYm9vbGVhbjtcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Q0xTLmNoaWxkfSByb2xlPVwidHJlZWl0ZW1cIiB0YWJJbmRleD17LTF9PlxuICAgICAgPExhYmVsIGZpZWxkPXtmaWVsZH0gLz5cbiAgICAgIHtwcmVmaXggPyA8c3BhbiBjbGFzc05hbWU9e0NMUy5jbGFzc05hbWV9PntwcmVmaXh9PC9zcGFuPiA6IG51bGx9XG4gICAgICA8c3BhbiBjbGFzc05hbWU9e0NMUy5wdW5jdHVhdGlvbn0+e29wZW59PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtDTFMucHVuY3R1YXRpb259PntjbG9zZX08L3NwYW4+XG4gICAgICA8Q29tbWEgaXNMYXN0PXtpc0xhc3R9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGZvY3VzRXhwYW5kZXIoXG4gIGJ1dHRvbjogSFRNTEVsZW1lbnQsXG4gIG91dGVyUmVmOiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQgfCBudWxsPlxuKSB7XG4gIGNvbnN0IHByZXZpb3VzID0gb3V0ZXJSZWYuY3VycmVudD8ucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXG4gICAgJ1tkYXRhLWpzb24tZXhwYW5kZXJdW3RhYmluZGV4PVwiMFwiXSdcbiAgKTtcbiAgaWYgKHByZXZpb3VzKSBwcmV2aW91cy50YWJJbmRleCA9IC0xO1xuICBidXR0b24udGFiSW5kZXggPSAwO1xuICBidXR0b24uZm9jdXMoKTtcbn1cblxuZnVuY3Rpb24gbW92ZUV4cGFuZGVyRm9jdXMoXG4gIG91dGVyUmVmOiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQgfCBudWxsPixcbiAgZGlyZWN0aW9uOiAxIHwgLTFcbikge1xuICBjb25zdCByb290ID0gb3V0ZXJSZWYuY3VycmVudDtcbiAgaWYgKCFyb290KSByZXR1cm47XG4gIGNvbnN0IGJ1dHRvbnMgPSByb290LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KCdbZGF0YS1qc29uLWV4cGFuZGVyXScpO1xuICBsZXQgY3VycmVudCA9IC0xO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1dHRvbnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAoYnV0dG9uc1tpXS50YWJJbmRleCA9PT0gMCkge1xuICAgICAgY3VycmVudCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGN1cnJlbnQgPCAwKSByZXR1cm47XG4gIGNvbnN0IG5leHQgPSAoY3VycmVudCArIGRpcmVjdGlvbiArIGJ1dHRvbnMubGVuZ3RoKSAlIGJ1dHRvbnMubGVuZ3RoO1xuICBidXR0b25zW2N1cnJlbnRdLnRhYkluZGV4ID0gLTE7XG4gIGJ1dHRvbnNbbmV4dF0udGFiSW5kZXggPSAwO1xuICBidXR0b25zW25leHRdLmZvY3VzKCk7XG59XG5cbmZ1bmN0aW9uIEV4cGFuZGFibGVDb250YWluZXIoe1xuICBmaWVsZCxcbiAgZW50cmllcyxcbiAgb3BlbixcbiAgY2xvc2UsXG4gIHByZWZpeCxcbiAgY3R4LFxuICBpc0xhc3QsXG59OiB7XG4gIGZpZWxkPzogc3RyaW5nO1xuICBlbnRyaWVzOiBFbnRyeVtdO1xuICBvcGVuOiBzdHJpbmc7XG4gIGNsb3NlOiBzdHJpbmc7XG4gIHByZWZpeD86IHN0cmluZztcbiAgY3R4OiBOb2RlQ29udGV4dDtcbiAgaXNMYXN0OiBib29sZWFuO1xufSkge1xuICBjb25zdCB7IGxldmVsLCBzaG91bGRFeHBhbmQsIG91dGVyUmVmIH0gPSBjdHg7XG4gIGNvbnN0IFtleHBhbmRlZCwgc2V0RXhwYW5kZWRdID0gdXNlU3RhdGUoKCkgPT4gc2hvdWxkRXhwYW5kKGxldmVsKSk7XG4gIGNvbnN0IHJvd1JlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGNvbnRlbnRzSWQgPSB1c2VJZCgpO1xuXG4gIGlmIChlbnRyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAoXG4gICAgICA8RW1wdHlDb250YWluZXJcbiAgICAgICAgZmllbGQ9e2ZpZWxkfVxuICAgICAgICBwcmVmaXg9e3ByZWZpeH1cbiAgICAgICAgb3Blbj17b3Blbn1cbiAgICAgICAgY2xvc2U9e2Nsb3NlfVxuICAgICAgICBpc0xhc3Q9e2lzTGFzdH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHRvZ2dsZSA9ICgpID0+IHtcbiAgICBzZXRFeHBhbmRlZCgodmFsdWUpID0+ICF2YWx1ZSk7XG4gICAgaWYgKHJvd1JlZi5jdXJyZW50KSBmb2N1c0V4cGFuZGVyKHJvd1JlZi5jdXJyZW50LCBvdXRlclJlZik7XG4gIH07XG5cbiAgLy8gVG9nZ2xlIG9ubHkgZm9yIGNsaWNrcyB0aGF0IGxhbmQgb24gdGhpcyByb3cgaXRzZWxmOyBjbGlja3MgYnViYmxpbmcgdXAgb3V0XG4gIC8vIG9mIGEgbmVzdGVkIHRyZWVpdGVtIGFyZSBoYW5kbGVkIGJ5IHRoYXQgZGVzY2VuZGFudCdzIG93biByb3cuXG4gIGNvbnN0IG9uQ2xpY2sgPSAoZXZlbnQ6IFJlYWN0TW91c2VFdmVudCkgPT4ge1xuICAgIGlmIChcbiAgICAgIChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoJ1tyb2xlPVwidHJlZWl0ZW1cIl0nKSAhPT1cbiAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXRcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdG9nZ2xlKCk7XG4gIH07XG5cbiAgY29uc3Qgb25LZXlEb3duID0gKGV2ZW50OiBSZWFjdEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBzZXRFeHBhbmRlZCh0cnVlKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBzZXRFeHBhbmRlZChmYWxzZSk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG1vdmVFeHBhbmRlckZvY3VzKG91dGVyUmVmLCAtMSk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgbW92ZUV4cGFuZGVyRm9jdXMob3V0ZXJSZWYsIDEpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBsYXN0SW5kZXggPSBlbnRyaWVzLmxlbmd0aCAtIDE7XG5cbiAgcmV0dXJuIChcbiAgICAvLyBUaGUgdHJlZWl0ZW0gcm93IGlzIHRoZSBmb2N1c2FibGUsIGtleWJvYXJkLW9wZXJhYmxlIGNvbnRyb2wgKHJvdmluZ1xuICAgIC8vIHRhYmluZGV4ICsgYXJyb3cga2V5cyk7IHRoZSBkaXNjbG9zdXJlIG1hcmtlciBiZWxvdyBpcyBwdXJlbHkgZGVjb3JhdGl2ZS5cbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e0NMUy5jaGlsZH1cbiAgICAgIHJvbGU9XCJ0cmVlaXRlbVwiXG4gICAgICBhcmlhLWV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgIGFyaWEtY29udHJvbHM9e2V4cGFuZGVkID8gY29udGVudHNJZCA6IHVuZGVmaW5lZH1cbiAgICAgIGRhdGEtanNvbi1leHBhbmRlclxuICAgICAgcmVmPXtyb3dSZWZ9XG4gICAgICB0YWJJbmRleD17bGV2ZWwgPT09IDAgPyAwIDogLTF9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgb25LZXlEb3duPXtvbktleURvd259XG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3NOYW1lPXtleHBhbmRlZCA/IENMUy5jb2xsYXBzZUljb24gOiBDTFMuZXhwYW5kSWNvbn1cbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgIC8+XG4gICAgICB7ZmllbGQgIT09IHVuZGVmaW5lZCAmJiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Q0xTLmNsaWNrYWJsZUxhYmVsfT57YCR7Zm9ybWF0RmllbGQoZmllbGQpfTpgfTwvc3Bhbj5cbiAgICAgICl9XG4gICAgICB7cHJlZml4ID8gPHNwYW4gY2xhc3NOYW1lPXtDTFMuY2xhc3NOYW1lfT57cHJlZml4fTwvc3Bhbj4gOiBudWxsfVxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtDTFMucHVuY3R1YXRpb259PntvcGVufTwvc3Bhbj5cbiAgICAgIHtleHBhbmRlZCA/IChcbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS91c2VTZW1hbnRpY0VsZW1lbnRzOiBBUklBIHRyZWUgZ3JvdXAgaXMgdGhlIGNvcnJlY3Qgcm9sZSBoZXJlXG4gICAgICAgIDx1bCBpZD17Y29udGVudHNJZH0gY2xhc3NOYW1lPXtDTFMuY2hpbGRGaWVsZHN9IHJvbGU9XCJncm91cFwiPlxuICAgICAgICAgIHtlbnRyaWVzLm1hcCgoW2NoaWxkRmllbGQsIGNoaWxkVmFsdWVdLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPERhdGFSZW5kZXJcbiAgICAgICAgICAgICAga2V5PXtjaGlsZEZpZWxkID8/IGluZGV4fVxuICAgICAgICAgICAgICBmaWVsZD17Y2hpbGRGaWVsZH1cbiAgICAgICAgICAgICAgdmFsdWU9e2NoaWxkVmFsdWV9XG4gICAgICAgICAgICAgIGlzTGFzdD17aW5kZXggPT09IGxhc3RJbmRleH1cbiAgICAgICAgICAgICAgY3R4PXt7IC4uLmN0eCwgbGV2ZWw6IGxldmVsICsgMSB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC91bD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Q0xTLmNvbGxhcHNlZENvbnRlbnR9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICApfVxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtDTFMucHVuY3R1YXRpb259PntjbG9zZX08L3NwYW4+XG4gICAgICA8Q29tbWEgaXNMYXN0PXtpc0xhc3R9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmludGVyZmFjZSBOb2RlUHJvcHMge1xuICBmaWVsZD86IHN0cmluZztcbiAgdmFsdWU6IHVua25vd247XG4gIGlzTGFzdDogYm9vbGVhbjtcbiAgY3R4OiBOb2RlQ29udGV4dDtcbn1cblxuZnVuY3Rpb24gRGF0YVJlbmRlcih7IGZpZWxkLCB2YWx1ZSwgaXNMYXN0LCBjdHggfTogTm9kZVByb3BzKSB7XG4gIGlmIChpc0J5dGVzRGlzcGxheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPExlYWZSb3cgZmllbGQ9e2ZpZWxkfSBpc0xhc3Q9e2lzTGFzdH0+XG4gICAgICAgIDxCeXRlc0Rpc3BsYXlWYWx1ZSBkaXNwbGF5PXt2YWx1ZX0gLz5cbiAgICAgIDwvTGVhZlJvdz5cbiAgICApO1xuICB9XG4gIGlmIChpc0VuY3J5cHRlZE1hcmtlcih2YWx1ZSkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPExlYWZSb3cgZmllbGQ9e2ZpZWxkfSBpc0xhc3Q9e2lzTGFzdH0+XG4gICAgICAgIDxFbmNyeXB0ZWRJbmxpbmVMYWJlbCAvPlxuICAgICAgPC9MZWFmUm93PlxuICAgICk7XG4gIH1cbiAgaWYgKGlzU3RyZWFtUmVmKHZhbHVlKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8TGVhZlJvdyBmaWVsZD17ZmllbGR9IGlzTGFzdD17aXNMYXN0fT5cbiAgICAgICAgPFN0cmVhbVJlZklubGluZSBzdHJlYW1SZWY9e3ZhbHVlfSAvPlxuICAgICAgPC9MZWFmUm93PlxuICAgICk7XG4gIH1cbiAgaWYgKGlzUnVuUmVmKHZhbHVlKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8TGVhZlJvdyBmaWVsZD17ZmllbGR9IGlzTGFzdD17aXNMYXN0fT5cbiAgICAgICAgPFJ1blJlZklubGluZSBydW5SZWY9e3ZhbHVlfSAvPlxuICAgICAgPC9MZWFmUm93PlxuICAgICk7XG4gIH1cbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiAoXG4gICAgICA8TGVhZlJvdyBmaWVsZD17ZmllbGR9IGlzTGFzdD17aXNMYXN0fT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtDTFMuZGF0ZX0+e3ZhbHVlLnRvSVNPU3RyaW5nKCl9PC9zcGFuPlxuICAgICAgPC9MZWFmUm93PlxuICAgICk7XG4gIH1cbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxMZWFmUm93IGZpZWxkPXtmaWVsZH0gaXNMYXN0PXtpc0xhc3R9PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e0NMUy5yZWdleHB9Pnt2YWx1ZS50b1N0cmluZygpfTwvc3Bhbj5cbiAgICAgIDwvTGVhZlJvdz5cbiAgICApO1xuICB9XG4gIGlmIChpc0NsYXNzSW5zdGFuY2VSZWYodmFsdWUpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxDbGFzc0luc3RhbmNlTm9kZVxuICAgICAgICBmaWVsZD17ZmllbGR9XG4gICAgICAgIGluc3RhbmNlPXt2YWx1ZX1cbiAgICAgICAgaXNMYXN0PXtpc0xhc3R9XG4gICAgICAgIGN0eD17Y3R4fVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgY29uc3QgY29udGFpbmVyID0gZGVzY3JpYmVDb250YWluZXIodmFsdWUpO1xuICBpZiAoY29udGFpbmVyKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxFeHBhbmRhYmxlQ29udGFpbmVyXG4gICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgZW50cmllcz17Y29udGFpbmVyLmVudHJpZXN9XG4gICAgICAgIG9wZW49e2NvbnRhaW5lci5vcGVufVxuICAgICAgICBjbG9zZT17Y29udGFpbmVyLmNsb3NlfVxuICAgICAgICBwcmVmaXg9e2NvbnRhaW5lci5wcmVmaXh9XG4gICAgICAgIGN0eD17Y3R4fVxuICAgICAgICBpc0xhc3Q9e2lzTGFzdH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFByaW1pdGl2ZVZhbHVlIGZpZWxkPXtmaWVsZH0gdmFsdWU9e3ZhbHVlfSBpc0xhc3Q9e2lzTGFzdH0gY3R4PXtjdHh9IC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIENsYXNzSW5zdGFuY2VOb2RlKHtcbiAgZmllbGQsXG4gIGluc3RhbmNlLFxuICBpc0xhc3QsXG4gIGN0eCxcbn06IHtcbiAgZmllbGQ/OiBzdHJpbmc7XG4gIGluc3RhbmNlOiBDbGFzc0luc3RhbmNlUmVmO1xuICBpc0xhc3Q6IGJvb2xlYW47XG4gIGN0eDogTm9kZUNvbnRleHQ7XG59KSB7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGRlc2NyaWJlQ29udGFpbmVyKGluc3RhbmNlLmRhdGEpO1xuICBpZiAoY29udGFpbmVyKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxFeHBhbmRhYmxlQ29udGFpbmVyXG4gICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgZW50cmllcz17Y29udGFpbmVyLmVudHJpZXN9XG4gICAgICAgIG9wZW49e2NvbnRhaW5lci5vcGVufVxuICAgICAgICBjbG9zZT17Y29udGFpbmVyLmNsb3NlfVxuICAgICAgICBwcmVmaXg9e2luc3RhbmNlLmNsYXNzTmFtZX1cbiAgICAgICAgY3R4PXtjdHh9XG4gICAgICAgIGlzTGFzdD17aXNMYXN0fVxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIGNvbnN0IHsgdGV4dCwgY2xzIH0gPSBkZXNjcmliZVByaW1pdGl2ZShpbnN0YW5jZS5kYXRhKTtcbiAgcmV0dXJuIChcbiAgICA8TGVhZlJvdyBmaWVsZD17ZmllbGR9IGlzTGFzdD17aXNMYXN0fT5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17Q0xTLmNsYXNzTmFtZX0+e2luc3RhbmNlLmNsYXNzTmFtZX08L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9e2Nsc30+e3RleHR9PC9zcGFuPlxuICAgIDwvTGVhZlJvdz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gSnNvblRyZWUoe1xuICBkYXRhLFxuICBuYW1lLFxuICBleHBhbmRMZXZlbCxcbn06IHtcbiAgZGF0YTogdW5rbm93bjtcbiAgbmFtZT86IHN0cmluZztcbiAgZXhwYW5kTGV2ZWw6IG51bWJlcjtcbn0pIHtcbiAgY29uc3Qgb3V0ZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBzaG91bGRFeHBhbmQgPSB1c2VNZW1vKFxuICAgICgpID0+IChsZXZlbDogbnVtYmVyKSA9PiBsZXZlbCA8IGV4cGFuZExldmVsLFxuICAgIFtleHBhbmRMZXZlbF1cbiAgKTtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e291dGVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtDTFMuY29udGFpbmVyfVxuICAgICAgcm9sZT1cInRyZWVcIlxuICAgICAgYXJpYS1sYWJlbD1cIkpTT04gdmlld1wiXG4gICAgPlxuICAgICAgPERhdGFSZW5kZXJcbiAgICAgICAgZmllbGQ9e25hbWV9XG4gICAgICAgIHZhbHVlPXtkYXRhfVxuICAgICAgICBpc0xhc3RcbiAgICAgICAgY3R4PXt7IGxldmVsOiAwLCBzaG91bGRFeHBhbmQsIG91dGVyUmVmIH19XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlZiAvIHR5cGVkLWFycmF5IGNvbGxhcHNpbmcgKHByZXByb2Nlc3NpbmcgYmVmb3JlIHJlbmRlcilcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIENyZWF0ZSBhIG5vbi1leHBhbmRhYmxlIHdyYXBwZXIgdGhhdCBjYXJyaWVzIHJlZiBkYXRhIGFzIG5vbi1lbnVtZXJhYmxlXG4gKiBwcm9wZXJ0aWVzIHNvIHRoZSByZW5kZXJlciBjYW4gZGV0ZWN0IFN0cmVhbVJlZi9SdW5SZWYgd2l0aG91dCBleHBvc2luZ1xuICogdGhlaXIgaW50ZXJuYWxzIGFzIG9iamVjdCBmaWVsZHMuXG4gKi9cbmZ1bmN0aW9uIG1ha2VPcGFxdWVSZWYocmVmOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHVua25vd24ge1xuICBjb25zdCBvcGFxdWUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZWYpKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9wYXF1ZSwga2V5LCB7IHZhbHVlLCBlbnVtZXJhYmxlOiBmYWxzZSB9KTtcbiAgfVxuICByZXR1cm4gb3BhcXVlO1xufVxuXG5mdW5jdGlvbiBtYWtlQnl0ZXNEaXNwbGF5KGRpc3BsYXk6IEZvcm1hdHRlZFN0cmVhbUNodW5rRGlzcGxheSk6IHVua25vd24ge1xuICBjb25zdCBvcGFxdWUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3BhcXVlLCAnX190eXBlJywge1xuICAgIHZhbHVlOiBCWVRFU19ESVNQTEFZX1RZUEUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3BhcXVlLCAndGV4dCcsIHtcbiAgICB2YWx1ZTogZGlzcGxheS50ZXh0LFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9wYXF1ZSwgJ2RlY29kZWRGcm9tJywge1xuICAgIHZhbHVlOiBkaXNwbGF5LmRlY29kZWRGcm9tLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICB9KTtcbiAgcmV0dXJuIG9wYXF1ZTtcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSB3YWxrIGRhdGEgYW5kIHJlcGxhY2UgUnVuUmVmL1N0cmVhbVJlZi90eXBlZCBhcnJheSBvYmplY3RzIHdpdGhcbiAqIG5vbi1leHBhbmRhYmxlIHZlcnNpb25zIHNvIHRoZSByZW5kZXJlciBkb2Vzbid0IHNob3cgdGhlaXIgaW50ZXJuYWxzLlxuICogT25seSByZWN1cnNlcyBpbnRvIHBsYWluIG9iamVjdHMgYW5kIGFycmF5cyB0byBhdm9pZCBzdHJpcHBpbmcgY2xhc3NcbiAqIGluc3RhbmNlcyAoRGF0ZSwgRXJyb3IsIFVSTCwgSGVhZGVycywgZXRjLikgdGhhdCBoYXZlIHRoZWlyIG93biByZW5kZXJpbmcuXG4gKiBNYXAgYW5kIFNldCBjb250YWluZXJzIGFyZSBwcmVzZXJ2ZWQgd2hpbGUgdGhlaXIgY29udGVudHMgYXJlIHByZXBhcmVkIGZvclxuICogZGlzcGxheS5cbiAqXG4gKiBFeHBvcnRlZCBmb3IgdGVzdGluZyB0aGUgdHlwZWQtYXJyYXkgZGV0ZWN0aW9uIHBhdGggdXNlZCBieSBoeWRyYXRlZFxuICogQUkgYWdlbnQgc3RyZWFtIGNodW5rcyAoZS5nLiBgeyBkZWx0YTogbmV3IFVpbnQ4QXJyYXkoLi4uKSB9YCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xsYXBzZVJlZnMoZGF0YTogdW5rbm93bik6IHVua25vd24ge1xuICBpZiAoZGF0YSA9PT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHJldHVybiBkYXRhO1xuICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGRhdGEpICYmICEoZGF0YSBpbnN0YW5jZW9mIERhdGFWaWV3KSkge1xuICAgIHJldHVybiBtYWtlQnl0ZXNEaXNwbGF5KGZvcm1hdEFycmF5QnVmZmVyVmlld0ZvckRpc3BsYXkoZGF0YSkpO1xuICB9XG4gIGlmIChpc1J1blJlZihkYXRhKSB8fCBpc1N0cmVhbVJlZihkYXRhKSlcbiAgICByZXR1cm4gbWFrZU9wYXF1ZVJlZihkYXRhIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkgcmV0dXJuIGRhdGEubWFwKGNvbGxhcHNlUmVmcyk7XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgcmV0dXJuIG5ldyBNYXAoXG4gICAgICBBcnJheS5mcm9tKGRhdGEuZW50cmllcygpLCAoW2tleSwgdmFsdWVdKSA9PiBbXG4gICAgICAgIGNvbGxhcHNlUmVmcyhrZXkpLFxuICAgICAgICBjb2xsYXBzZVJlZnModmFsdWUpLFxuICAgICAgXSlcbiAgICApO1xuICB9XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgcmV0dXJuIG5ldyBTZXQoQXJyYXkuZnJvbShkYXRhLnZhbHVlcygpLCBjb2xsYXBzZVJlZnMpKTtcbiAgfVxuICAvLyBPbmx5IHJlY3Vyc2UgaW50byBwbGFpbiBvYmplY3RzIOKAlCBsZWF2ZSBjbGFzcyBpbnN0YW5jZXMgdW50b3VjaGVkXG4gIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGRhdGEpO1xuICBpZiAocHJvdG8gIT09IE9iamVjdC5wcm90b3R5cGUgJiYgcHJvdG8gIT09IG51bGwpIHJldHVybiBkYXRhO1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgcmVzdWx0W2tleV0gPSBjb2xsYXBzZVJlZnModmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljIGNvbXBvbmVudFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUluc3BlY3RvclByb3BzIHtcbiAgLyoqIFRoZSBkYXRhIHRvIGluc3BlY3QgKi9cbiAgZGF0YTogdW5rbm93bjtcbiAgLyoqIExldmVscyBzdHJpY3RseSBiZWxvdyB0aGlzIG51bWJlciBhdXRvLWV4cGFuZCAoZGVmYXVsdDogMikgKi9cbiAgZXhwYW5kTGV2ZWw/OiBudW1iZXI7XG4gIC8qKiBPcHRpb25hbCBuYW1lIGZvciB0aGUgcm9vdCBub2RlICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBDYWxsYmFjayB3aGVuIGEgc3RyZWFtIHJlZmVyZW5jZSBpcyBjbGlja2VkICovXG4gIG9uU3RyZWFtQ2xpY2s/OiAoc3RyZWFtSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIENhbGxiYWNrIHdoZW4gYSBydW4gcmVmZXJlbmNlIGlzIGNsaWNrZWQgKi9cbiAgb25SdW5DbGljaz86IChydW5JZDogc3RyaW5nKSA9PiB2b2lkO1xuICAvKiogQ2FsbGJhY2sgd2hlbiBhbiBlbmNyeXB0ZWQgbWFya2VyIGlzIGNsaWNrZWQgKHRyaWdnZXJzIGRlY3J5cHRpb24pICovXG4gIG9uRGVjcnlwdD86ICgpID0+IHZvaWQ7XG4gIC8qKiBXaGV0aGVyIGRlY3J5cHRpb24gaXMgY3VycmVudGx5IGluIHByb2dyZXNzICovXG4gIGlzRGVjcnlwdGluZz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEYXRhSW5zcGVjdG9yKHtcbiAgZGF0YSxcbiAgZXhwYW5kTGV2ZWwgPSAyLFxuICBuYW1lLFxuICBvblN0cmVhbUNsaWNrLFxuICBvblJ1bkNsaWNrLFxuICBvbkRlY3J5cHQsXG4gIGlzRGVjcnlwdGluZyA9IGZhbHNlLFxufTogRGF0YUluc3BlY3RvclByb3BzKSB7XG4gIGNvbnN0IGNvbGxhcHNlZERhdGEgPSB1c2VNZW1vKCgpID0+IGNvbGxhcHNlUmVmcyhkYXRhKSwgW2RhdGFdKTtcbiAgY29uc3Qgc3RhYmxlRGF0YSA9IHVzZVN0YWJsZUluc3BlY3RvckRhdGEoY29sbGFwc2VkRGF0YSk7XG5cbiAgbGV0IGNvbnRlbnQ6IFJlYWN0Tm9kZSA9IChcbiAgICA8PlxuICAgICAgey8qIFJlYWN0IDE5IGhvaXN0cyAmIGRlZHVwZXMgdGhpcyA8c3R5bGU+IGJ5IGhyZWYsIHNvIGl0IGlzIGVtaXR0ZWQgb25jZVxuICAgICAgICAgIHJlZ2FyZGxlc3Mgb2YgaG93IG1hbnkgaW5zcGVjdG9ycyBhcmUgbW91bnRlZC4gKi99XG4gICAgICA8c3R5bGUgaHJlZj1cIndmLWpzb24tdmlld1wiIHByZWNlZGVuY2U9XCJkZWZhdWx0XCI+XG4gICAgICAgIHtKU09OX1ZJRVdfU1RZTEVTfVxuICAgICAgPC9zdHlsZT5cbiAgICAgIDxKc29uVHJlZSBkYXRhPXtzdGFibGVEYXRhfSBuYW1lPXtuYW1lfSBleHBhbmRMZXZlbD17ZXhwYW5kTGV2ZWx9IC8+XG4gICAgPC8+XG4gICk7XG5cbiAgaWYgKG9uU3RyZWFtQ2xpY2spIHtcbiAgICBjb250ZW50ID0gKFxuICAgICAgPFN0cmVhbUNsaWNrQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17b25TdHJlYW1DbGlja30+XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgPC9TdHJlYW1DbGlja0NvbnRleHQuUHJvdmlkZXI+XG4gICAgKTtcbiAgfVxuICBpZiAob25SdW5DbGljaykge1xuICAgIGNvbnRlbnQgPSAoXG4gICAgICA8UnVuQ2xpY2tDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtvblJ1bkNsaWNrfT5cbiAgICAgICAge2NvbnRlbnR9XG4gICAgICA8L1J1bkNsaWNrQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xuICB9XG4gIGlmIChvbkRlY3J5cHQpIHtcbiAgICBjb250ZW50ID0gKFxuICAgICAgPERlY3J5cHRDbGlja0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3sgb25EZWNyeXB0LCBpc0RlY3J5cHRpbmcgfX0+XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgPC9EZWNyeXB0Q2xpY2tDb250ZXh0LlByb3ZpZGVyPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gY29udGVudDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZW5kZXIgc3RhYmlsaXphdGlvbiAoYXZvaWQgcmUtcmVuZGVycyB3aGVuIGRhdGEgaXMgZGVlcGx5IGVxdWFsKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIHVzZVN0YWJsZUluc3BlY3RvckRhdGE8VD4obmV4dDogVCk6IFQge1xuICBjb25zdCBwcmV2aW91c1JlZiA9IHVzZVJlZjxUPihuZXh0KTtcbiAgaWYgKCFpc0RlZXBFcXVhbChwcmV2aW91c1JlZi5jdXJyZW50LCBuZXh0KSkge1xuICAgIHByZXZpb3VzUmVmLmN1cnJlbnQgPSBuZXh0O1xuICB9XG4gIHJldHVybiBwcmV2aW91c1JlZi5jdXJyZW50O1xufVxuXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc1NhbWVCeXRlc0Rpc3BsYXkoYTogQnl0ZXNEaXNwbGF5LCBiOiBCeXRlc0Rpc3BsYXkpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBhLnRleHQgPT09IGIudGV4dCAmJlxuICAgIGEuZGVjb2RlZEZyb20/LnR5cGUgPT09IGIuZGVjb2RlZEZyb20/LnR5cGUgJiZcbiAgICBhLmRlY29kZWRGcm9tPy5lbmNvZGluZyA9PT0gYi5kZWNvZGVkRnJvbT8uZW5jb2RpbmcgJiZcbiAgICBhLmRlY29kZWRGcm9tPy5yYXdTdW1tYXJ5ID09PSBiLmRlY29kZWRGcm9tPy5yYXdTdW1tYXJ5XG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzRGVlcEVxdWFsKGE6IHVua25vd24sIGI6IHVua25vd24sIHNlZW4gPSBuZXcgV2Vha01hcCgpKTogYm9vbGVhbiB7XG4gIGlmIChPYmplY3QuaXMoYSwgYikpIHJldHVybiB0cnVlO1xuXG4gIGlmIChpc0J5dGVzRGlzcGxheShhKSB8fCBpc0J5dGVzRGlzcGxheShiKSkge1xuICAgIHJldHVybiBpc0J5dGVzRGlzcGxheShhKSAmJiBpc0J5dGVzRGlzcGxheShiKSAmJiBpc1NhbWVCeXRlc0Rpc3BsYXkoYSwgYik7XG4gIH1cblxuICBpZiAoYSBpbnN0YW5jZW9mIERhdGUgJiYgYiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gYS5nZXRUaW1lKCkgPT09IGIuZ2V0VGltZSgpO1xuICB9XG5cbiAgaWYgKGEgaW5zdGFuY2VvZiBSZWdFeHAgJiYgYiBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiBhLnNvdXJjZSA9PT0gYi5zb3VyY2UgJiYgYS5mbGFncyA9PT0gYi5mbGFncztcbiAgfVxuXG4gIGlmIChhIGluc3RhbmNlb2YgTWFwICYmIGIgaW5zdGFuY2VvZiBNYXApIHtcbiAgICBpZiAoYS5zaXplICE9PSBiLnNpemUpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBhLmVudHJpZXMoKSkge1xuICAgICAgaWYgKCFiLmhhcyhrZXkpIHx8ICFpc0RlZXBFcXVhbCh2YWx1ZSwgYi5nZXQoa2V5KSwgc2VlbikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoYSBpbnN0YW5jZW9mIFNldCAmJiBiIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgaWYgKGEuc2l6ZSAhPT0gYi5zaXplKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBhLnZhbHVlcygpKSB7XG4gICAgICBpZiAoIWIuaGFzKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICghaXNPYmplY3RMaWtlKGEpIHx8ICFpc09iamVjdExpa2UoYikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoc2Vlbi5nZXQoYSkgPT09IGIpIHJldHVybiB0cnVlO1xuICBzZWVuLnNldChhLCBiKTtcblxuICBjb25zdCBhSXNBcnJheSA9IEFycmF5LmlzQXJyYXkoYSk7XG4gIGNvbnN0IGJJc0FycmF5ID0gQXJyYXkuaXNBcnJheShiKTtcbiAgaWYgKGFJc0FycmF5ICE9PSBiSXNBcnJheSkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChhSXNBcnJheSAmJiBiSXNBcnJheSkge1xuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmICghaXNEZWVwRXF1YWwoYVtpXSwgYltpXSwgc2VlbikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBhS2V5cyA9IE9iamVjdC5rZXlzKGEpO1xuICBjb25zdCBiS2V5cyA9IE9iamVjdC5rZXlzKGIpO1xuICBpZiAoYUtleXMubGVuZ3RoICE9PSBiS2V5cy5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICBmb3IgKGNvbnN0IGtleSBvZiBhS2V5cykge1xuICAgIGlmICghT2JqZWN0Lmhhc093bihiLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCFpc0RlZXBFcXVhbChhW2tleV0sIGJba2V5XSwgc2VlbikpIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuIl19
package/dist/index.d.ts CHANGED
@@ -4,12 +4,12 @@ export type { Event, Hook, Step, WorkflowRun } from '@workflow/world';
4
4
  export * from './components';
5
5
  export { hookEventsToHookEntity, stepEventsToStepEntity, waitEventsToWaitEntity, } from './components/workflow-traces/trace-span-construction';
6
6
  export type { EventAnalysis } from './lib/event-analysis';
7
- export { parseExactWorkflowSearchId, looksLikeWorkflowIdSearchInput, type ExactWorkflowSearchId, type ExactWorkflowSearchIdKind, type ExactIdSearchResult, } from './lib/exact-event-search-id';
8
7
  export { analyzeEvents, hasPendingHooksFromEvents, hasPendingStepsFromEvents, isTerminalStatus, shouldShowReenqueueButton, } from './lib/event-analysis';
9
8
  export type { MaterializedEntities, MaterializedHook, MaterializedStep, MaterializedWait, } from './lib/event-materialization';
10
9
  export { materializeAll, materializeHooks, materializeSteps, materializeWaits, } from './lib/event-materialization';
10
+ export { type ExactIdSearchResult, type ExactWorkflowSearchId, type ExactWorkflowSearchIdKind, looksLikeWorkflowIdSearchInput, parseExactWorkflowSearchId, } from './lib/exact-event-search-id';
11
11
  export type { Revivers, StreamRef } from './lib/hydration';
12
- export { CLASS_INSTANCE_REF_TYPE, ClassInstanceRef, ENCRYPTED_PLACEHOLDER, extractStreamIds, getWebRevivers, hasEncryptedFields, hydrateResourceIO, hydrateResourceIOWithKey, isClassInstanceRef, isEncryptedMarker, isStreamId, isStreamRef, STREAM_REF_TYPE, truncateId, } from './lib/hydration';
12
+ export { CLASS_INSTANCE_REF_TYPE, ClassInstanceRef, ENCRYPTED_PLACEHOLDER, extractStreamIds, getWebRevivers, hasEncryptedFields, hydrateResourceIO, hydrateResourceIOAsync, hydrateResourceIOWithKey, isClassInstanceRef, isEncryptedMarker, isStreamId, isStreamRef, STREAM_REF_TYPE, truncateId, } from './lib/hydration';
13
13
  export type { DecodedStreamChunkSource } from './lib/stream-display';
14
14
  export type { ToastAdapter } from './lib/toast';
15
15
  export { ToastProvider, useToast } from './lib/toast';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,aAAa,EACb,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACtE,cAAc,cAAc,CAAC;AAC7B,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,sDAAsD,CAAC;AAC9D,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EACL,0BAA0B,EAC1B,8BAA8B,EAC9B,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,GACzB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,aAAa,EACb,yBAAyB,EACzB,yBAAyB,EACzB,gBAAgB,EAChB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,wBAAwB,EACxB,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,eAAe,EACf,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AACrE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACtD,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,GACf,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,aAAa,EACb,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACtE,cAAc,cAAc,CAAC;AAC7B,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,sDAAsD,CAAC;AAC9D,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EACL,aAAa,EACb,yBAAyB,EACzB,yBAAyB,EACzB,gBAAgB,EAChB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,8BAA8B,EAC9B,0BAA0B,GAC3B,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,wBAAwB,EACxB,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,eAAe,EACf,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AACrE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACtD,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,GACf,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -1,10 +1,10 @@
1
1
  export { parseStepName, parseWorkflowName, } from '@workflow/utils/parse-name';
2
2
  export * from './components';
3
3
  export { hookEventsToHookEntity, stepEventsToStepEntity, waitEventsToWaitEntity, } from './components/workflow-traces/trace-span-construction';
4
- export { parseExactWorkflowSearchId, looksLikeWorkflowIdSearchInput, } from './lib/exact-event-search-id';
5
4
  export { analyzeEvents, hasPendingHooksFromEvents, hasPendingStepsFromEvents, isTerminalStatus, shouldShowReenqueueButton, } from './lib/event-analysis';
6
5
  export { materializeAll, materializeHooks, materializeSteps, materializeWaits, } from './lib/event-materialization';
7
- export { CLASS_INSTANCE_REF_TYPE, ClassInstanceRef, ENCRYPTED_PLACEHOLDER, extractStreamIds, getWebRevivers, hasEncryptedFields, hydrateResourceIO, hydrateResourceIOWithKey, isClassInstanceRef, isEncryptedMarker, isStreamId, isStreamRef, STREAM_REF_TYPE, truncateId, } from './lib/hydration';
6
+ export { looksLikeWorkflowIdSearchInput, parseExactWorkflowSearchId, } from './lib/exact-event-search-id';
7
+ export { CLASS_INSTANCE_REF_TYPE, ClassInstanceRef, ENCRYPTED_PLACEHOLDER, extractStreamIds, getWebRevivers, hasEncryptedFields, hydrateResourceIO, hydrateResourceIOAsync, hydrateResourceIOWithKey, isClassInstanceRef, isEncryptedMarker, isStreamId, isStreamRef, STREAM_REF_TYPE, truncateId, } from './lib/hydration';
8
8
  export { ToastProvider, useToast } from './lib/toast';
9
9
  export { extractConversation, formatDuration, formatDurationPrecise, identifyStreamSteps, isDoStreamStep, } from './lib/utils';
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUNMLGFBQWEsRUFDYixpQkFBaUIsR0FDbEIsTUFBTSw0QkFBNEIsQ0FBQztBQUVwQyxjQUFjLGNBQWMsQ0FBQztBQUM3QixPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QixzQkFBc0IsR0FDdkIsTUFBTSxzREFBc0QsQ0FBQztBQUU5RCxPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLDhCQUE4QixHQUkvQixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFDTCxhQUFhLEVBQ2IseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6QixnQkFBZ0IsRUFDaEIseUJBQXlCLEdBQzFCLE1BQU0sc0JBQXNCLENBQUM7QUFPOUIsT0FBTyxFQUNMLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLGdCQUFnQixHQUNqQixNQUFNLDZCQUE2QixDQUFDO0FBRXJDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsZ0JBQWdCLEVBQ2hCLHFCQUFxQixFQUNyQixnQkFBZ0IsRUFDaEIsY0FBYyxFQUNkLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsd0JBQXdCLEVBQ3hCLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsVUFBVSxFQUNWLFdBQVcsRUFDWCxlQUFlLEVBQ2YsVUFBVSxHQUNYLE1BQU0saUJBQWlCLENBQUM7QUFHekIsT0FBTyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdEQsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixjQUFjLEVBQ2QscUJBQXFCLEVBQ3JCLG1CQUFtQixFQUNuQixjQUFjLEdBQ2YsTUFBTSxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSB7XG4gIEhlYWx0aENoZWNrRW5kcG9pbnQsXG4gIEhlYWx0aENoZWNrUmVzdWx0LFxufSBmcm9tICdAd29ya2Zsb3cvY29yZS9ydW50aW1lJztcbmV4cG9ydCB7XG4gIHBhcnNlU3RlcE5hbWUsXG4gIHBhcnNlV29ya2Zsb3dOYW1lLFxufSBmcm9tICdAd29ya2Zsb3cvdXRpbHMvcGFyc2UtbmFtZSc7XG5leHBvcnQgdHlwZSB7IEV2ZW50LCBIb29rLCBTdGVwLCBXb3JrZmxvd1J1biB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMnO1xuZXhwb3J0IHtcbiAgaG9va0V2ZW50c1RvSG9va0VudGl0eSxcbiAgc3RlcEV2ZW50c1RvU3RlcEVudGl0eSxcbiAgd2FpdEV2ZW50c1RvV2FpdEVudGl0eSxcbn0gZnJvbSAnLi9jb21wb25lbnRzL3dvcmtmbG93LXRyYWNlcy90cmFjZS1zcGFuLWNvbnN0cnVjdGlvbic7XG5leHBvcnQgdHlwZSB7IEV2ZW50QW5hbHlzaXMgfSBmcm9tICcuL2xpYi9ldmVudC1hbmFseXNpcyc7XG5leHBvcnQge1xuICBwYXJzZUV4YWN0V29ya2Zsb3dTZWFyY2hJZCxcbiAgbG9va3NMaWtlV29ya2Zsb3dJZFNlYXJjaElucHV0LFxuICB0eXBlIEV4YWN0V29ya2Zsb3dTZWFyY2hJZCxcbiAgdHlwZSBFeGFjdFdvcmtmbG93U2VhcmNoSWRLaW5kLFxuICB0eXBlIEV4YWN0SWRTZWFyY2hSZXN1bHQsXG59IGZyb20gJy4vbGliL2V4YWN0LWV2ZW50LXNlYXJjaC1pZCc7XG5leHBvcnQge1xuICBhbmFseXplRXZlbnRzLFxuICBoYXNQZW5kaW5nSG9va3NGcm9tRXZlbnRzLFxuICBoYXNQZW5kaW5nU3RlcHNGcm9tRXZlbnRzLFxuICBpc1Rlcm1pbmFsU3RhdHVzLFxuICBzaG91bGRTaG93UmVlbnF1ZXVlQnV0dG9uLFxufSBmcm9tICcuL2xpYi9ldmVudC1hbmFseXNpcyc7XG5leHBvcnQgdHlwZSB7XG4gIE1hdGVyaWFsaXplZEVudGl0aWVzLFxuICBNYXRlcmlhbGl6ZWRIb29rLFxuICBNYXRlcmlhbGl6ZWRTdGVwLFxuICBNYXRlcmlhbGl6ZWRXYWl0LFxufSBmcm9tICcuL2xpYi9ldmVudC1tYXRlcmlhbGl6YXRpb24nO1xuZXhwb3J0IHtcbiAgbWF0ZXJpYWxpemVBbGwsXG4gIG1hdGVyaWFsaXplSG9va3MsXG4gIG1hdGVyaWFsaXplU3RlcHMsXG4gIG1hdGVyaWFsaXplV2FpdHMsXG59IGZyb20gJy4vbGliL2V2ZW50LW1hdGVyaWFsaXphdGlvbic7XG5leHBvcnQgdHlwZSB7IFJldml2ZXJzLCBTdHJlYW1SZWYgfSBmcm9tICcuL2xpYi9oeWRyYXRpb24nO1xuZXhwb3J0IHtcbiAgQ0xBU1NfSU5TVEFOQ0VfUkVGX1RZUEUsXG4gIENsYXNzSW5zdGFuY2VSZWYsXG4gIEVOQ1JZUFRFRF9QTEFDRUhPTERFUixcbiAgZXh0cmFjdFN0cmVhbUlkcyxcbiAgZ2V0V2ViUmV2aXZlcnMsXG4gIGhhc0VuY3J5cHRlZEZpZWxkcyxcbiAgaHlkcmF0ZVJlc291cmNlSU8sXG4gIGh5ZHJhdGVSZXNvdXJjZUlPV2l0aEtleSxcbiAgaXNDbGFzc0luc3RhbmNlUmVmLFxuICBpc0VuY3J5cHRlZE1hcmtlcixcbiAgaXNTdHJlYW1JZCxcbiAgaXNTdHJlYW1SZWYsXG4gIFNUUkVBTV9SRUZfVFlQRSxcbiAgdHJ1bmNhdGVJZCxcbn0gZnJvbSAnLi9saWIvaHlkcmF0aW9uJztcbmV4cG9ydCB0eXBlIHsgRGVjb2RlZFN0cmVhbUNodW5rU291cmNlIH0gZnJvbSAnLi9saWIvc3RyZWFtLWRpc3BsYXknO1xuZXhwb3J0IHR5cGUgeyBUb2FzdEFkYXB0ZXIgfSBmcm9tICcuL2xpYi90b2FzdCc7XG5leHBvcnQgeyBUb2FzdFByb3ZpZGVyLCB1c2VUb2FzdCB9IGZyb20gJy4vbGliL3RvYXN0JztcbmV4cG9ydCB0eXBlIHsgU3RyZWFtU3RlcCB9IGZyb20gJy4vbGliL3V0aWxzJztcbmV4cG9ydCB7XG4gIGV4dHJhY3RDb252ZXJzYXRpb24sXG4gIGZvcm1hdER1cmF0aW9uLFxuICBmb3JtYXREdXJhdGlvblByZWNpc2UsXG4gIGlkZW50aWZ5U3RyZWFtU3RlcHMsXG4gIGlzRG9TdHJlYW1TdGVwLFxufSBmcm9tICcuL2xpYi91dGlscyc7XG4iXX0=
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUNMLGFBQWEsRUFDYixpQkFBaUIsR0FDbEIsTUFBTSw0QkFBNEIsQ0FBQztBQUVwQyxjQUFjLGNBQWMsQ0FBQztBQUM3QixPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QixzQkFBc0IsR0FDdkIsTUFBTSxzREFBc0QsQ0FBQztBQUU5RCxPQUFPLEVBQ0wsYUFBYSxFQUNiLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFDekIsZ0JBQWdCLEVBQ2hCLHlCQUF5QixHQUMxQixNQUFNLHNCQUFzQixDQUFDO0FBTzlCLE9BQU8sRUFDTCxjQUFjLEVBQ2QsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixnQkFBZ0IsR0FDakIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBSUwsOEJBQThCLEVBQzlCLDBCQUEwQixHQUMzQixNQUFNLDZCQUE2QixDQUFDO0FBRXJDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsZ0JBQWdCLEVBQ2hCLHFCQUFxQixFQUNyQixnQkFBZ0IsRUFDaEIsY0FBYyxFQUNkLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsc0JBQXNCLEVBQ3RCLHdCQUF3QixFQUN4QixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDVixXQUFXLEVBQ1gsZUFBZSxFQUNmLFVBQVUsR0FDWCxNQUFNLGlCQUFpQixDQUFDO0FBR3pCLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXRELE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsY0FBYyxFQUNkLHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsY0FBYyxHQUNmLE1BQU0sYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUge1xuICBIZWFsdGhDaGVja0VuZHBvaW50LFxuICBIZWFsdGhDaGVja1Jlc3VsdCxcbn0gZnJvbSAnQHdvcmtmbG93L2NvcmUvcnVudGltZSc7XG5leHBvcnQge1xuICBwYXJzZVN0ZXBOYW1lLFxuICBwYXJzZVdvcmtmbG93TmFtZSxcbn0gZnJvbSAnQHdvcmtmbG93L3V0aWxzL3BhcnNlLW5hbWUnO1xuZXhwb3J0IHR5cGUgeyBFdmVudCwgSG9vaywgU3RlcCwgV29ya2Zsb3dSdW4gfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnRzJztcbmV4cG9ydCB7XG4gIGhvb2tFdmVudHNUb0hvb2tFbnRpdHksXG4gIHN0ZXBFdmVudHNUb1N0ZXBFbnRpdHksXG4gIHdhaXRFdmVudHNUb1dhaXRFbnRpdHksXG59IGZyb20gJy4vY29tcG9uZW50cy93b3JrZmxvdy10cmFjZXMvdHJhY2Utc3Bhbi1jb25zdHJ1Y3Rpb24nO1xuZXhwb3J0IHR5cGUgeyBFdmVudEFuYWx5c2lzIH0gZnJvbSAnLi9saWIvZXZlbnQtYW5hbHlzaXMnO1xuZXhwb3J0IHtcbiAgYW5hbHl6ZUV2ZW50cyxcbiAgaGFzUGVuZGluZ0hvb2tzRnJvbUV2ZW50cyxcbiAgaGFzUGVuZGluZ1N0ZXBzRnJvbUV2ZW50cyxcbiAgaXNUZXJtaW5hbFN0YXR1cyxcbiAgc2hvdWxkU2hvd1JlZW5xdWV1ZUJ1dHRvbixcbn0gZnJvbSAnLi9saWIvZXZlbnQtYW5hbHlzaXMnO1xuZXhwb3J0IHR5cGUge1xuICBNYXRlcmlhbGl6ZWRFbnRpdGllcyxcbiAgTWF0ZXJpYWxpemVkSG9vayxcbiAgTWF0ZXJpYWxpemVkU3RlcCxcbiAgTWF0ZXJpYWxpemVkV2FpdCxcbn0gZnJvbSAnLi9saWIvZXZlbnQtbWF0ZXJpYWxpemF0aW9uJztcbmV4cG9ydCB7XG4gIG1hdGVyaWFsaXplQWxsLFxuICBtYXRlcmlhbGl6ZUhvb2tzLFxuICBtYXRlcmlhbGl6ZVN0ZXBzLFxuICBtYXRlcmlhbGl6ZVdhaXRzLFxufSBmcm9tICcuL2xpYi9ldmVudC1tYXRlcmlhbGl6YXRpb24nO1xuZXhwb3J0IHtcbiAgdHlwZSBFeGFjdElkU2VhcmNoUmVzdWx0LFxuICB0eXBlIEV4YWN0V29ya2Zsb3dTZWFyY2hJZCxcbiAgdHlwZSBFeGFjdFdvcmtmbG93U2VhcmNoSWRLaW5kLFxuICBsb29rc0xpa2VXb3JrZmxvd0lkU2VhcmNoSW5wdXQsXG4gIHBhcnNlRXhhY3RXb3JrZmxvd1NlYXJjaElkLFxufSBmcm9tICcuL2xpYi9leGFjdC1ldmVudC1zZWFyY2gtaWQnO1xuZXhwb3J0IHR5cGUgeyBSZXZpdmVycywgU3RyZWFtUmVmIH0gZnJvbSAnLi9saWIvaHlkcmF0aW9uJztcbmV4cG9ydCB7XG4gIENMQVNTX0lOU1RBTkNFX1JFRl9UWVBFLFxuICBDbGFzc0luc3RhbmNlUmVmLFxuICBFTkNSWVBURURfUExBQ0VIT0xERVIsXG4gIGV4dHJhY3RTdHJlYW1JZHMsXG4gIGdldFdlYlJldml2ZXJzLFxuICBoYXNFbmNyeXB0ZWRGaWVsZHMsXG4gIGh5ZHJhdGVSZXNvdXJjZUlPLFxuICBoeWRyYXRlUmVzb3VyY2VJT0FzeW5jLFxuICBoeWRyYXRlUmVzb3VyY2VJT1dpdGhLZXksXG4gIGlzQ2xhc3NJbnN0YW5jZVJlZixcbiAgaXNFbmNyeXB0ZWRNYXJrZXIsXG4gIGlzU3RyZWFtSWQsXG4gIGlzU3RyZWFtUmVmLFxuICBTVFJFQU1fUkVGX1RZUEUsXG4gIHRydW5jYXRlSWQsXG59IGZyb20gJy4vbGliL2h5ZHJhdGlvbic7XG5leHBvcnQgdHlwZSB7IERlY29kZWRTdHJlYW1DaHVua1NvdXJjZSB9IGZyb20gJy4vbGliL3N0cmVhbS1kaXNwbGF5JztcbmV4cG9ydCB0eXBlIHsgVG9hc3RBZGFwdGVyIH0gZnJvbSAnLi9saWIvdG9hc3QnO1xuZXhwb3J0IHsgVG9hc3RQcm92aWRlciwgdXNlVG9hc3QgfSBmcm9tICcuL2xpYi90b2FzdCc7XG5leHBvcnQgdHlwZSB7IFN0cmVhbVN0ZXAgfSBmcm9tICcuL2xpYi91dGlscyc7XG5leHBvcnQge1xuICBleHRyYWN0Q29udmVyc2F0aW9uLFxuICBmb3JtYXREdXJhdGlvbixcbiAgZm9ybWF0RHVyYXRpb25QcmVjaXNlLFxuICBpZGVudGlmeVN0cmVhbVN0ZXBzLFxuICBpc0RvU3RyZWFtU3RlcCxcbn0gZnJvbSAnLi9saWIvdXRpbHMnO1xuIl19
@@ -6,6 +6,7 @@
6
6
  * objects for UI rendering.
7
7
  */
8
8
  import { type Revivers } from '@workflow/core/serialization-format';
9
+ export declare function getEventDataRefFields(eventType: string): string[];
9
10
  export { CLASS_INSTANCE_REF_TYPE, ClassInstanceRef, ENCRYPTED_PLACEHOLDER, extractStreamIds, isClassInstanceRef, isEncryptedData, isRunRef, isStreamId, isStreamRef, type Revivers, RUN_REF_TYPE, type RunRef, STREAM_REF_TYPE, type StreamRef, serializedInstanceToRef, truncateId, } from '@workflow/core/serialization-format';
10
11
  /**
11
12
  * Get the web-specific revivers for hydrating serialized data.
@@ -41,10 +42,19 @@ export declare function isExpiredMarker(value: unknown): boolean;
41
42
  * When a key is provided, encrypted fields are decrypted before hydration.
42
43
  * This is the async version used when the user clicks "Decrypt" in the web UI.
43
44
  *
44
- * Handles both top-level fields (input, output, metadata) and nested
45
- * eventData subfields per `EVENT_DATA_REF_FIELDS` from `@workflow/world` for that event type.
45
+ * Handles both top-level fields (input, output, metadata) and nested eventData
46
+ * payload fields for that event type.
46
47
  */
47
48
  export declare function hydrateResourceIOWithKey<T>(resource: T, key: Uint8Array): Promise<T>;
49
+ /**
50
+ * Async hydration for web display.
51
+ *
52
+ * This follows the same resource-field mapping as {@link hydrateResourceIO},
53
+ * but can also inflate compressed browser payloads through the registered
54
+ * zstd WASM decoder. When a key is provided, encrypted fields are decrypted
55
+ * first and then inflated/hydrated.
56
+ */
57
+ export declare function hydrateResourceIOAsync<T>(resource: T, key?: Uint8Array): Promise<T>;
48
58
  /**
49
59
  * Check whether a hydrated resource (event, step, run, etc.) contains any
50
60
  * encrypted display markers. Inspects the standard top-level fields
@@ -1 +1 @@
1
- {"version":3,"file":"hydration.d.ts","sourceRoot":"","sources":["../../src/lib/hydration.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAOL,KAAK,QAAQ,EAEd,MAAM,qCAAqC,CAAC;AAI7C,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,QAAQ,EACR,UAAU,EACV,WAAW,EACX,KAAK,QAAQ,EACb,YAAY,EACZ,KAAK,MAAM,EACX,eAAe,EACf,KAAK,SAAS,EACd,uBAAuB,EACvB,UAAU,GACX,MAAM,qCAAqC,CAAC;AAgE7C;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,IAAI,QAAQ,CA+MzC;AAmBD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAMnD;AAMD,eAAO,MAAM,sBAAsB,cAAc,CAAC;AA0BlD,sDAAsD;AACtD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMzD;AAMD,eAAO,MAAM,oBAAoB,iBAAiB,CAAC;AAiBnD,yDAAyD;AACzD,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMvD;AAsCD;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAAC,CAAC,EAC9C,QAAQ,EAAE,CAAC,EACX,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,CAAC,CAAC,CA+DZ;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAkB7D"}
1
+ {"version":3,"file":"hydration.d.ts","sourceRoot":"","sources":["../../src/lib/hydration.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAOL,KAAK,QAAQ,EAEd,MAAM,qCAAqC,CAAC;AAQ7C,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAOjE;AAGD,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,QAAQ,EACR,UAAU,EACV,WAAW,EACX,KAAK,QAAQ,EACb,YAAY,EACZ,KAAK,MAAM,EACX,eAAe,EACf,KAAK,SAAS,EACd,uBAAuB,EACvB,UAAU,GACX,MAAM,qCAAqC,CAAC;AAgE7C;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,IAAI,QAAQ,CA+MzC;AAmBD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAMnD;AAMD,eAAO,MAAM,sBAAsB,cAAc,CAAC;AA0BlD,sDAAsD;AACtD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMzD;AAMD,eAAO,MAAM,oBAAoB,iBAAiB,CAAC;AAiBnD,yDAAyD;AACzD,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMvD;AAsCD;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAAC,CAAC,EAC9C,QAAQ,EAAE,CAAC,EACX,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,CAAC,CAAC,CAEZ;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAAC,CAAC,EAC5C,QAAQ,EAAE,CAAC,EACX,GAAG,CAAC,EAAE,UAAU,GACf,OAAO,CAAC,CAAC,CAAC,CAyDZ;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAkB7D"}