@amboss/design-system 4.2.2 → 4.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/components/Content/ContentList/ContentList.js +1 -1
- package/build/cjs/components/Content/DosageButton/DosageButton.js +1 -1
- package/build/cjs/components/Internal/LayoutFloat/LayoutFloat.d.ts +5 -3
- package/build/cjs/components/Internal/LayoutFloat/LayoutFloat.js +1 -1
- package/build/cjs/components/Internal/LayoutFloat/LayoutFloatDragHandle.d.ts +31 -0
- package/build/cjs/components/Internal/LayoutFloat/LayoutFloatDragHandle.js +1 -0
- package/build/cjs/components/Internal/LayoutFloat/LayoutFloatDragHandleGuard.d.ts +10 -0
- package/build/cjs/components/Internal/LayoutFloat/LayoutFloatDragHandleGuard.js +1 -0
- package/build/cjs/components/Internal/LayoutFloat/LayoutFloatDragProvider.d.ts +10 -0
- package/build/cjs/components/Internal/LayoutFloat/LayoutFloatDragProvider.js +1 -0
- package/build/cjs/components/Internal/LayoutFloat/useLayoutFloatDrag.d.ts +16 -0
- package/build/cjs/components/Internal/LayoutFloat/useLayoutFloatDrag.js +1 -0
- package/build/cjs/components/Internal/LayoutFloat/useLayoutFloatDragHandleContext.d.ts +22 -0
- package/build/cjs/components/Internal/LayoutFloat/useLayoutFloatDragHandleContext.js +1 -0
- package/build/cjs/components/Internal/Panel/Panel.d.ts +4 -0
- package/build/cjs/components/Internal/Panel/Panel.js +1 -1
- package/build/cjs/components/Internal/Sandwich/SandwichHeader.d.ts +1 -0
- package/build/cjs/components/Internal/Sandwich/SandwichHeader.js +1 -1
- package/build/cjs/components/Layout/-types.d.ts +96 -48
- package/build/cjs/components/Layout/Content/Content.d.ts +6 -2
- package/build/cjs/components/Layout/Content/Content.js +1 -1
- package/build/cjs/components/Layout/Content/ContentDocked.d.ts +12 -0
- package/build/cjs/components/Layout/Content/ContentDocked.js +1 -0
- package/build/cjs/components/Layout/Layout.js +1 -1
- package/build/cjs/components/Layout/RightPanel/RightPanel.d.ts +10 -8
- package/build/cjs/components/Layout/RightPanel/RightPanel.js +1 -1
- package/build/cjs/components/Layout/RightPanel/RightPanelDocked.d.ts +19 -0
- package/build/cjs/components/Layout/RightPanel/RightPanelDocked.js +1 -0
- package/build/cjs/components/Layout/RightPanel/RightPanelHeader.d.ts +14 -10
- package/build/cjs/components/Layout/RightPanel/RightPanelHeader.js +1 -1
- package/build/cjs/components/Layout/RightPanel/RightPanelSheet.d.ts +18 -0
- package/build/cjs/components/Layout/RightPanel/RightPanelSheet.js +1 -0
- package/build/cjs/components/Layout/Split/MobileSplitView/ContentSplitBase.d.ts +13 -0
- package/build/cjs/components/Layout/Split/MobileSplitView/ContentSplitBase.js +1 -0
- package/build/cjs/components/Layout/Split/MobileSplitView/MobileSplitView.d.ts +11 -0
- package/build/cjs/components/Layout/Split/MobileSplitView/MobileSplitView.js +1 -0
- package/build/cjs/components/Layout/Split/MobileSplitView/StyledMobileSplitSlideLayer.d.ts +20 -0
- package/build/cjs/components/Layout/Split/MobileSplitView/StyledMobileSplitSlideLayer.js +1 -0
- package/build/cjs/components/Layout/Split/MobileSplitView/useMobileSplitStack.d.ts +20 -0
- package/build/cjs/components/Layout/Split/MobileSplitView/useMobileSplitStack.js +1 -0
- package/build/cjs/components/Layout/Split/MobileSplitView/useMobileSplitView.d.ts +27 -0
- package/build/cjs/components/Layout/Split/MobileSplitView/useMobileSplitView.js +1 -0
- package/build/cjs/components/Layout/Split/Split.d.ts +5 -4
- package/build/cjs/components/Layout/Split/Split.js +1 -1
- package/build/cjs/components/Layout/Split/SplitDocked.d.ts +9 -0
- package/build/cjs/components/Layout/Split/SplitDocked.js +1 -0
- package/build/cjs/components/Layout/index.d.ts +1 -0
- package/build/cjs/components/Layout/index.js +1 -1
- package/build/cjs/components/Layout/reducer.js +1 -1
- package/build/cjs/components/Layout/registry.d.ts +9 -1
- package/build/cjs/components/Layout/registry.js +1 -1
- package/build/cjs/components/Layout/useLayout.js +1 -1
- package/build/cjs/shared/useDragTransform.d.ts +39 -0
- package/build/cjs/shared/useDragTransform.js +1 -0
- package/build/cjs/web-tokens/_sizes.json +10 -0
- package/build/cjs/web-tokens/layout-vars.d.ts +2 -0
- package/build/cjs/web-tokens/layout-vars.js +1 -1
- package/build/cjs/web-tokens/layout-vars.ts +2 -0
- package/build/cjs/web-tokens/visualConfig.d.ts +9 -0
- package/build/cjs/web-tokens/visualConfig.js +1 -1
- package/build/esm/components/Content/ContentList/ContentList.js +1 -1
- package/build/esm/components/Content/DosageButton/DosageButton.js +1 -1
- package/build/esm/components/Internal/LayoutFloat/LayoutFloat.d.ts +5 -3
- package/build/esm/components/Internal/LayoutFloat/LayoutFloat.js +1 -1
- package/build/esm/components/Internal/LayoutFloat/LayoutFloatDragHandle.d.ts +31 -0
- package/build/esm/components/Internal/LayoutFloat/LayoutFloatDragHandle.js +1 -0
- package/build/esm/components/Internal/LayoutFloat/LayoutFloatDragHandleGuard.d.ts +10 -0
- package/build/esm/components/Internal/LayoutFloat/LayoutFloatDragHandleGuard.js +1 -0
- package/build/esm/components/Internal/LayoutFloat/LayoutFloatDragProvider.d.ts +10 -0
- package/build/esm/components/Internal/LayoutFloat/LayoutFloatDragProvider.js +1 -0
- package/build/esm/components/Internal/LayoutFloat/useLayoutFloatDrag.d.ts +16 -0
- package/build/esm/components/Internal/LayoutFloat/useLayoutFloatDrag.js +1 -0
- package/build/esm/components/Internal/LayoutFloat/useLayoutFloatDragHandleContext.d.ts +22 -0
- package/build/esm/components/Internal/LayoutFloat/useLayoutFloatDragHandleContext.js +1 -0
- package/build/esm/components/Internal/Panel/Panel.d.ts +4 -0
- package/build/esm/components/Internal/Panel/Panel.js +1 -1
- package/build/esm/components/Internal/Sandwich/SandwichHeader.d.ts +1 -0
- package/build/esm/components/Internal/Sandwich/SandwichHeader.js +1 -1
- package/build/esm/components/Layout/-types.d.ts +96 -48
- package/build/esm/components/Layout/Content/Content.d.ts +6 -2
- package/build/esm/components/Layout/Content/Content.js +1 -1
- package/build/esm/components/Layout/Content/ContentDocked.d.ts +12 -0
- package/build/esm/components/Layout/Content/ContentDocked.js +1 -0
- package/build/esm/components/Layout/Layout.js +1 -1
- package/build/esm/components/Layout/RightPanel/RightPanel.d.ts +10 -8
- package/build/esm/components/Layout/RightPanel/RightPanel.js +1 -1
- package/build/esm/components/Layout/RightPanel/RightPanelDocked.d.ts +19 -0
- package/build/esm/components/Layout/RightPanel/RightPanelDocked.js +1 -0
- package/build/esm/components/Layout/RightPanel/RightPanelHeader.d.ts +14 -10
- package/build/esm/components/Layout/RightPanel/RightPanelHeader.js +1 -1
- package/build/esm/components/Layout/RightPanel/RightPanelSheet.d.ts +18 -0
- package/build/esm/components/Layout/RightPanel/RightPanelSheet.js +1 -0
- package/build/esm/components/Layout/Split/MobileSplitView/ContentSplitBase.d.ts +13 -0
- package/build/esm/components/Layout/Split/MobileSplitView/ContentSplitBase.js +1 -0
- package/build/esm/components/Layout/Split/MobileSplitView/MobileSplitView.d.ts +11 -0
- package/build/esm/components/Layout/Split/MobileSplitView/MobileSplitView.js +1 -0
- package/build/esm/components/Layout/Split/MobileSplitView/StyledMobileSplitSlideLayer.d.ts +20 -0
- package/build/esm/components/Layout/Split/MobileSplitView/StyledMobileSplitSlideLayer.js +1 -0
- package/build/esm/components/Layout/Split/MobileSplitView/useMobileSplitStack.d.ts +20 -0
- package/build/esm/components/Layout/Split/MobileSplitView/useMobileSplitStack.js +1 -0
- package/build/esm/components/Layout/Split/MobileSplitView/useMobileSplitView.d.ts +27 -0
- package/build/esm/components/Layout/Split/MobileSplitView/useMobileSplitView.js +1 -0
- package/build/esm/components/Layout/Split/Split.d.ts +5 -4
- package/build/esm/components/Layout/Split/Split.js +1 -1
- package/build/esm/components/Layout/Split/SplitDocked.d.ts +9 -0
- package/build/esm/components/Layout/Split/SplitDocked.js +1 -0
- package/build/esm/components/Layout/index.d.ts +1 -0
- package/build/esm/components/Layout/index.js +1 -1
- package/build/esm/components/Layout/reducer.js +1 -1
- package/build/esm/components/Layout/registry.d.ts +9 -1
- package/build/esm/components/Layout/registry.js +1 -1
- package/build/esm/components/Layout/useLayout.js +1 -1
- package/build/esm/shared/useDragTransform.d.ts +39 -0
- package/build/esm/shared/useDragTransform.js +1 -0
- package/build/esm/web-tokens/_sizes.json +10 -0
- package/build/esm/web-tokens/layout-vars.d.ts +2 -0
- package/build/esm/web-tokens/layout-vars.js +1 -1
- package/build/esm/web-tokens/layout-vars.ts +2 -0
- package/build/esm/web-tokens/visualConfig.d.ts +9 -0
- package/build/esm/web-tokens/visualConfig.js +1 -1
- package/build/scss/_layout.scss +4 -0
- package/build/scss/_variables.scss +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import React,{useCallback,useEffect,useMemo,useRef,useState}from"react";import styled from"@emotion/styled";import{Panel}from"../Internal/Panel/Panel";import{LayoutFloat}from"../Internal/LayoutFloat/LayoutFloat";import{useBreakpoints}from"../../shared/useBreakpoints";import{PANEL_ORDER,PANEL_WIDTH_VAR,Slot}from"./-constants";import{useLayoutPanelsEnabled,useLayoutPersistence}from"./context";import{LayoutProvider}from"./LayoutProvider";import{Content}from"./Content/Content";import{RightPanel}from"./RightPanel/RightPanel";import{RightPanelHeader}from"./RightPanel/RightPanelHeader";import{RightPanelFooter}from"./RightPanel/RightPanelFooter";import{LeftPanel}from"./LeftPanel/LeftPanel";import{LeftPanelHeader}from"./LeftPanel/LeftPanelHeader";import{LeftPanelFooter}from"./LeftPanel/LeftPanelFooter";import{Split}from"./Split/Split";import{SplitHeader}from"./Split/SplitHeader";import{SplitFooter}from"./Split/SplitFooter";import{LayoutPortalContext,PanelRegistryContext,PanelPresenceContext,PanelAnimationContext}from"./registry";import{useFloatablePortalTargets}from"./useFloatablePortalTargets";import{useLayoutVar}from"./LayoutCssVars";import{useLayout}from"./useLayout";let useGlobalCssVariables=slotHosts=>{let contentWidthCssVar=useLayoutVar(PANEL_WIDTH_VAR.content),rightPanelWidthCssVar=useLayoutVar(PANEL_WIDTH_VAR.rightPanel);useEffect(()=>{let targets=[[Slot.content,contentWidthCssVar],[Slot.rightPanel,rightPanelWidthCssVar]],observers=[];return targets.forEach(([slot,handle])=>{let node=slotHosts[slot]??null;if(!node)return void handle.set("0px");let publishNodeWidth=()=>handle.set(`${node.getBoundingClientRect().width}px`);if(publishNodeWidth(),"undefined"==typeof ResizeObserver)return;let observer=new ResizeObserver(publishNodeWidth);observer.observe(node),observers.push(observer)}),()=>observers.forEach(observer=>observer.disconnect())},[contentWidthCssVar,rightPanelWidthCssVar,slotHosts])},StyledLayout=styled("div",{target:"e1exnax50",label:"StyledLayout"})({position:"relative",height:"100%",width:"100%"},"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3JjL2NvbXBvbmVudHMvTGF5b3V0L0xheW91dC50c3giLCJzb3VyY2VzIjpbInNyYy9jb21wb25lbnRzL0xheW91dC9MYXlvdXQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwge1xuICB1c2VDYWxsYmFjayxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBzdHlsZWQgZnJvbSBcIkBlbW90aW9uL3N0eWxlZFwiO1xuaW1wb3J0IHR5cGUgeyBQYW5lbEltcGVyYXRpdmVIYW5kbGUgfSBmcm9tIFwicmVhY3QtcmVzaXphYmxlLXBhbmVsc1wiO1xuaW1wb3J0IHsgUGFuZWwgfSBmcm9tIFwiLi4vSW50ZXJuYWwvUGFuZWwvUGFuZWxcIjtcbmltcG9ydCB0eXBlIHsgUGFuZWxJdGVtIH0gZnJvbSBcIi4uL0ludGVybmFsL1BhbmVsL1BhbmVsXCI7XG5pbXBvcnQgeyBMYXlvdXRGbG9hdCB9IGZyb20gXCIuLi9JbnRlcm5hbC9MYXlvdXRGbG9hdC9MYXlvdXRGbG9hdFwiO1xuaW1wb3J0IHsgdXNlQnJlYWtwb2ludHMgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL3VzZUJyZWFrcG9pbnRzXCI7XG5pbXBvcnQgeyBQQU5FTF9PUkRFUiwgUEFORUxfV0lEVEhfVkFSLCBTbG90IH0gZnJvbSBcIi4vLWNvbnN0YW50c1wiO1xuaW1wb3J0IHsgdXNlTGF5b3V0UGFuZWxzRW5hYmxlZCwgdXNlTGF5b3V0UGVyc2lzdGVuY2UgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQgeyBMYXlvdXRQcm92aWRlciB9IGZyb20gXCIuL0xheW91dFByb3ZpZGVyXCI7XG5pbXBvcnQgeyBDb250ZW50IH0gZnJvbSBcIi4vQ29udGVudC9Db250ZW50XCI7XG5pbXBvcnQgeyBSaWdodFBhbmVsIH0gZnJvbSBcIi4vUmlnaHRQYW5lbC9SaWdodFBhbmVsXCI7XG5pbXBvcnQgeyBSaWdodFBhbmVsSGVhZGVyIH0gZnJvbSBcIi4vUmlnaHRQYW5lbC9SaWdodFBhbmVsSGVhZGVyXCI7XG5pbXBvcnQgeyBSaWdodFBhbmVsRm9vdGVyIH0gZnJvbSBcIi4vUmlnaHRQYW5lbC9SaWdodFBhbmVsRm9vdGVyXCI7XG5pbXBvcnQgeyBMZWZ0UGFuZWwgfSBmcm9tIFwiLi9MZWZ0UGFuZWwvTGVmdFBhbmVsXCI7XG5pbXBvcnQgeyBMZWZ0UGFuZWxIZWFkZXIgfSBmcm9tIFwiLi9MZWZ0UGFuZWwvTGVmdFBhbmVsSGVhZGVyXCI7XG5pbXBvcnQgeyBMZWZ0UGFuZWxGb290ZXIgfSBmcm9tIFwiLi9MZWZ0UGFuZWwvTGVmdFBhbmVsRm9vdGVyXCI7XG5pbXBvcnQgeyBTcGxpdCB9IGZyb20gXCIuL1NwbGl0L1NwbGl0XCI7XG5pbXBvcnQgeyBTcGxpdEhlYWRlciB9IGZyb20gXCIuL1NwbGl0L1NwbGl0SGVhZGVyXCI7XG5pbXBvcnQgeyBTcGxpdEZvb3RlciB9IGZyb20gXCIuL1NwbGl0L1NwbGl0Rm9vdGVyXCI7XG5pbXBvcnQge1xuICBMYXlvdXRQb3J0YWxDb250ZXh0LFxuICBQYW5lbFJlZ2lzdHJ5Q29udGV4dCxcbiAgUGFuZWxQcmVzZW5jZUNvbnRleHQsXG4gIFBhbmVsQW5pbWF0aW9uQ29udGV4dCxcbiAgdHlwZSBQb3J0YWxUYXJnZXRzLFxuICB0eXBlIFBhbmVsUmVnLFxuICB0eXBlIFBhbmVsUmVnaXN0cnksXG4gIHR5cGUgUGFuZWxQcmVzZW5jZSxcbiAgdHlwZSBQYW5lbEFuaW1hdGlvbkNvbnRyb2wsXG59IGZyb20gXCIuL3JlZ2lzdHJ5XCI7XG5pbXBvcnQgeyB1c2VGbG9hdGFibGVQb3J0YWxUYXJnZXRzIH0gZnJvbSBcIi4vdXNlRmxvYXRhYmxlUG9ydGFsVGFyZ2V0c1wiO1xuaW1wb3J0IHsgdXNlTGF5b3V0VmFyLCB0eXBlIExheW91dFZhckhhbmRsZSB9IGZyb20gXCIuL0xheW91dENzc1ZhcnNcIjtcbmltcG9ydCB7IHVzZUxheW91dCB9IGZyb20gXCIuL3VzZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgeyBMYXlvdXRQcm9wcywgU2l6ZSwgU2xvdEtleSB9IGZyb20gXCIuLy10eXBlc1wiO1xuXG4vKipcbiAqIFB1Ymxpc2hlcyBlYWNoIHBhbmVsJ3MgbGl2ZSBwaXhlbCB3aWR0aCBhcyBhIGxheW91dCBDU1MgdmFyIChlLmcuXG4gKiBgLS1kcy1sYXlvdXQtcmlnaHRQYW5lbC13aWR0aGApLCB0cmFja2luZyBkcmFnLSBhbmQgd2luZG93LXJlc2l6ZXMuIEEgaGlkZGVuXG4gKiBwYXJ0IChubyBob3N0IG5vZGUpIHJlYWRzIGAwcHhgLCBzbyB0aGUgdmFyIGlzIGFsd2F5cyBkZWZpbmVkLiBPbmVcbiAqIGB1c2VMYXlvdXRWYXJgIHBlciBzbG90IGluIGBQQU5FTF9XSURUSF9WQVJgLlxuICovXG5jb25zdCB1c2VHbG9iYWxDc3NWYXJpYWJsZXMgPSAoc2xvdEhvc3RzOiBQb3J0YWxUYXJnZXRzKTogdm9pZCA9PiB7XG4gIGNvbnN0IGNvbnRlbnRXaWR0aENzc1ZhciA9IHVzZUxheW91dFZhcihQQU5FTF9XSURUSF9WQVIuY29udGVudCk7XG4gIGNvbnN0IHJpZ2h0UGFuZWxXaWR0aENzc1ZhciA9IHVzZUxheW91dFZhcihQQU5FTF9XSURUSF9WQVIucmlnaHRQYW5lbCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB0YXJnZXRzOiBbU2xvdEtleSwgTGF5b3V0VmFySGFuZGxlXVtdID0gW1xuICAgICAgW1Nsb3QuY29udGVudCwgY29udGVudFdpZHRoQ3NzVmFyXSxcbiAgICAgIFtTbG90LnJpZ2h0UGFuZWwsIHJpZ2h0UGFuZWxXaWR0aENzc1Zhcl0sXG4gICAgXTtcbiAgICBjb25zdCBvYnNlcnZlcnM6IFJlc2l6ZU9ic2VydmVyW10gPSBbXTtcblxuICAgIHRhcmdldHMuZm9yRWFjaCgoW3Nsb3QsIGhhbmRsZV0pID0+IHtcbiAgICAgIGNvbnN0IG5vZGUgPSBzbG90SG9zdHNbc2xvdF0gPz8gbnVsbDtcbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICBoYW5kbGUuc2V0KFwiMHB4XCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBwdWJsaXNoTm9kZVdpZHRoID0gKCk6IHZvaWQgPT5cbiAgICAgICAgaGFuZGxlLnNldChgJHtub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRofXB4YCk7XG4gICAgICBwdWJsaXNoTm9kZVdpZHRoKCk7XG4gICAgICAvLyBqc2RvbSAoYW5kIG9sZCBicm93c2VycykgbGFjayBSZXNpemVPYnNlcnZlciDigJQgc2tpcCBsaXZlIHRyYWNraW5nIHRoZXJlLlxuICAgICAgaWYgKHR5cGVvZiBSZXNpemVPYnNlcnZlciA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xuICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIocHVibGlzaE5vZGVXaWR0aCk7XG4gICAgICBvYnNlcnZlci5vYnNlcnZlKG5vZGUpO1xuICAgICAgb2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuICgpID0+IG9ic2VydmVycy5mb3JFYWNoKChvYnNlcnZlcikgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpKTtcbiAgfSwgW2NvbnRlbnRXaWR0aENzc1ZhciwgcmlnaHRQYW5lbFdpZHRoQ3NzVmFyLCBzbG90SG9zdHNdKTtcbn07XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4vKiBMYXlvdXQgLSByZWdpc3RyeSArIGhvc3RzOyBtYXJrZXJzIGRlY2xhcmUvcG9ydGFsOyB0aGUgcmVzaXphYmxlIHBhbmVsIHJvdyAgICovXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5jb25zdCBTdHlsZWRMYXlvdXQgPSBzdHlsZWQuZGl2KHtcbiAgcG9zaXRpb246IFwicmVsYXRpdmVcIixcbiAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgd2lkdGg6IFwiMTAwJVwiLFxufSk7XG5cbi8vIFNvbG8tbW9kZSBob3N0OiBhIGxvbmUgcGFuZWwgKG5vIHJlc2l6YWJsZSBzaWJsaW5nKSBpcyBob3N0ZWQgaGVyZSBpbnN0ZWFkIG9mXG4vLyBpbnNpZGUgcmVhY3QtcmVzaXphYmxlLXBhbmVscy4gTWF0Y2hlcyB0aGUgcGVyLXBhbmVsIGhvc3QgdGhlIEdyb3VwIHJlbmRlcnNcbi8vIChgcmVsYXRpdmVgICsgZnVsbC1ibGVlZCkgc28gY29udGVudCByZWZsb3dzL3Njcm9sbHMgaWRlbnRpY2FsbHkgZWl0aGVyIHdheS5cbmNvbnN0IFN0eWxlZFNvbG9Ib3N0ID0gc3R5bGVkLmRpdih7XG4gIHBvc2l0aW9uOiBcInJlbGF0aXZlXCIsXG4gIGhlaWdodDogXCIxMDAlXCIsXG4gIHdpZHRoOiBcIjEwMCVcIixcbn0pO1xuXG5mdW5jdGlvbiBMYXlvdXRCYXNlKHtcbiAgY2hpbGRyZW4sXG4gIHBlcnNpc3RlbmNlS2V5LFxuICBzdG9yYWdlLFxufTogTGF5b3V0UHJvcHMpOiBSZWFjdC5SZWFjdEVsZW1lbnQge1xuICBjb25zdCBbZGVjbGFyZWQsIHNldERlY2xhcmVkXSA9IHVzZVN0YXRlPFBhcnRpYWw8UmVjb3JkPFNsb3RLZXksIFBhbmVsUmVnPj4+KFxuICAgIHt9XG4gICk7XG4gIGNvbnN0IHsgc3RhdGU6IGxheW91dFN0YXRlLCAuLi5wYW5lbENhbGxiYWNrcyB9ID0gdXNlTGF5b3V0KCk7XG4gIGNvbnN0IHBlcnNpc3RlbmNlID0gdXNlTGF5b3V0UGVyc2lzdGVuY2UoKTtcbiAgY29uc3QgcmVzb2x2ZWRLZXkgPSBwZXJzaXN0ZW5jZUtleSA/PyBwZXJzaXN0ZW5jZS5wZXJzaXN0ZW5jZUtleTtcbiAgY29uc3QgcmVzb2x2ZWRTdG9yYWdlID0gc3RvcmFnZSA/PyBwZXJzaXN0ZW5jZS5zdG9yYWdlO1xuXG4gIC8vIEJlbG93IHRoZSBtb2JpbGUgYnJlYWtwb2ludCB0aGUgcmlnaHRQYW5lbCByZW5kZXJzIGFzIGEgYm90dG9tIHNoZWV0IChpdHNcbiAgLy8gbWFya2VyIHJlbmRlcnMgdGhlIFNoZWV0IGl0c2VsZikgLSBhbiBhdXRvbWF0aWMsIHJlbmRlci1sZXZlbCBhZGFwdGF0aW9uLlxuICAvLyBUaGUgc3RvcmVkIHZhcmlhbnQgaXMgdW50b3VjaGVkLCBzbyByZXNpemluZyBiYWNrIHRvIGRlc2t0b3AgcmVzdG9yZXMgdGhlXG4gIC8vIGV4YWN0IHByZXNlbnRhdGlvbiAoZG9ja2VkIG9yIGZsb2F0aW5nKSB0aGUgdXNlciBsZWZ0LlxuICBjb25zdCB7IGlzTW9iaWxlIH0gPSB1c2VCcmVha3BvaW50cygpO1xuICBjb25zdCBpc1JpZ2h0UGFuZWxTaGVldCA9IGlzTW9iaWxlO1xuXG4gIC8vIEEgZmxvYXRpbmcgcmlnaHRQYW5lbCBzdGF5cyB2aXNpYmxlIChpdHMgbWFya2VyIGtlZXBzIHJlbmRlcmluZyBjb250ZW50KVxuICAvLyBidXQgbGVhdmVzIHRoZSByZXNpemFibGUgcm93IC0gZXhhY3RseSBsaWtlIGEgaGlkZGVuIHBhbmVsIGRvZXMuIFRoZVxuICAvLyBtb2JpbGUgc2hlZXQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSBmbG9hdGluZyB3aW5kb3cuIEZsb2F0IGlzIGFcbiAgLy8gZGVza3RvcCBwcmVzZW50YXRpb24sIHNvIG9ubHkgbW9kZSBgdHJ1ZWAgZW5hYmxlcyBpdC5cbiAgY29uc3QgcGFuZWxzRW5hYmxlZCA9IHVzZUxheW91dFBhbmVsc0VuYWJsZWQoKTtcbiAgY29uc3QgaXNSaWdodFBhbmVsRmxvYXRpbmcgPVxuICAgIHBhbmVsc0VuYWJsZWQgPT09IHRydWUgJiZcbiAgICAhaXNSaWdodFBhbmVsU2hlZXQgJiZcbiAgICBsYXlvdXRTdGF0ZVtTbG90LnJpZ2h0UGFuZWxdLnZhcmlhbnQgPT09IFwiZmxvYXRcIjtcblxuICBjb25zdCBpc1Nob3duID0gKHNsb3Q6IFNsb3RLZXkpOiBib29sZWFuID0+XG4gICAgbGF5b3V0U3RhdGVbc2xvdF0udmlzaWJsZSAmJlxuICAgICEoc2xvdCA9PT0gU2xvdC5yaWdodFBhbmVsICYmIChpc1JpZ2h0UGFuZWxGbG9hdGluZyB8fCBpc1JpZ2h0UGFuZWxTaGVldCkpO1xuXG4gIC8vIFNsb3RzIGtlcHQgbW91bnRlZCB0aHJvdWdoIHRoZWlyIGV4aXQgYW5pbWF0aW9uIChyZXBvcnRlZCB2aWFcbiAgLy8gYHVzZVBhbmVsUHJlc2VuY2VgKS4gQSBwcmVzZW50LWJ1dC1oaWRkZW4gc2xvdCBzdGF5cyBpbiB0aGUgcm93IHNvIGl0c1xuICAvLyBjbG9zZSBhbmltYXRpb24gY2FuIHBsYXk7IGl0J3MgcmVtb3ZlZCBvbmNlIHByZXNlbmNlIGZsaXBzIGZhbHNlLlxuICBjb25zdCBbcHJlc2VudCwgc2V0UHJlc2VudF0gPSB1c2VTdGF0ZTxQYXJ0aWFsPFJlY29yZDxTbG90S2V5LCBib29sZWFuPj4+KHt9KTtcbiAgY29uc3QgcHJlc2VuY2UgPSB1c2VNZW1vPFBhbmVsUHJlc2VuY2U+KFxuICAgICgpID0+ICh7XG4gICAgICBzZXRQcmVzZW50OiAoc2xvdCwgaXNQcmVzZW50KSA9PlxuICAgICAgICBzZXRQcmVzZW50KChwcmV2KSA9PlxuICAgICAgICAgIHByZXZbc2xvdF0gPT09IGlzUHJlc2VudCA/IHByZXYgOiB7IC4uLnByZXYsIFtzbG90XTogaXNQcmVzZW50IH1cbiAgICAgICAgKSxcbiAgICB9KSxcbiAgICBbXVxuICApO1xuXG4gIC8vIEFuaW1hdGlvbiBjb250cm9sIGZvciB0aGUgZG9ja2VkIHNpZGUgcGFuZWxzJyBvcGVuL2Nsb3NlIHdpZHRoIHNsaWRlLiBBbGxcbiAgLy8gcmVmLWJhc2VkIG9uIHB1cnBvc2U6IHJlZ2lzdGVyaW5nIGhhbmRsZXMvZWxlbWVudHMgYW5kIHRvZ2dsaW5nIHN1cHByZXNzaW9uXG4gIC8vIGhhcHBlbiBkdXJpbmcgY29tbWl0cyBhbmQgcGVyLWZyYW1lIC0gbm9uZSBvZiBpdCBtYXkgcmUtcmVuZGVyIHRoZSBMYXlvdXQuXG4gIGNvbnN0IHBhbmVsSGFuZGxlcyA9IHVzZVJlZjxcbiAgICBQYXJ0aWFsPFJlY29yZDxTbG90S2V5LCBQYW5lbEltcGVyYXRpdmVIYW5kbGUgfCBudWxsPj5cbiAgPih7fSk7XG4gIGNvbnN0IHBhbmVsRWxlbWVudHMgPSB1c2VSZWY8UGFydGlhbDxSZWNvcmQ8U2xvdEtleSwgSFRNTEVsZW1lbnQgfCBudWxsPj4+KFxuICAgIHt9XG4gICk7XG4gIGNvbnN0IHJlc2l6ZVN1cHByZXNzZWQgPSB1c2VSZWY8UGFydGlhbDxSZWNvcmQ8U2xvdEtleSwgYm9vbGVhbj4+Pih7fSk7XG4gIGNvbnN0IGFuaW1hdGlvbkNvbnRyb2wgPSB1c2VNZW1vPFBhbmVsQW5pbWF0aW9uQ29udHJvbD4oXG4gICAgKCkgPT4gKHtcbiAgICAgIHNldEhhbmRsZTogKHNsb3QsIGhhbmRsZSkgPT4ge1xuICAgICAgICBwYW5lbEhhbmRsZXMuY3VycmVudFtzbG90XSA9IGhhbmRsZTtcbiAgICAgIH0sXG4gICAgICBnZXRIYW5kbGU6IChzbG90KSA9PiBwYW5lbEhhbmRsZXMuY3VycmVudFtzbG90XSA/PyBudWxsLFxuICAgICAgc2V0RWxlbWVudDogKHNsb3QsIGVsZW1lbnQpID0+IHtcbiAgICAgICAgcGFuZWxFbGVtZW50cy5jdXJyZW50W3Nsb3RdID0gZWxlbWVudDtcbiAgICAgIH0sXG4gICAgICBnZXRFbGVtZW50OiAoc2xvdCkgPT4gcGFuZWxFbGVtZW50cy5jdXJyZW50W3Nsb3RdID8/IG51bGwsXG4gICAgICBzZXRSZXNpemVTdXBwcmVzc2VkOiAoc2xvdCwgc3VwcHJlc3NlZCkgPT4ge1xuICAgICAgICByZXNpemVTdXBwcmVzc2VkLmN1cnJlbnRbc2xvdF0gPSBzdXBwcmVzc2VkO1xuICAgICAgfSxcbiAgICB9KSxcbiAgICBbXVxuICApO1xuICAvLyBTdGFibGUgcGVyLXNsb3QgcmVmIGNhbGxiYWNrcyAtIGEgZnJlc2ggY2FsbGJhY2sgaWRlbnRpdHkgcGVyIHJlbmRlciB3b3VsZFxuICAvLyBtYWtlIFJlYWN0IGRldGFjaC9yZWF0dGFjaCB0aGUgcmVmcyBvbiBldmVyeSBMYXlvdXQgcmUtcmVuZGVyLlxuICBjb25zdCBwYW5lbFJlZkNhbGxiYWNrcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZUNhbGxiYWNrcyA9IG5ldyBNYXA8XG4gICAgICBzdHJpbmcsXG4gICAgICAoaGFuZGxlOiBQYW5lbEltcGVyYXRpdmVIYW5kbGUgfCBudWxsKSA9PiB2b2lkXG4gICAgPigpO1xuICAgIGNvbnN0IGVsZW1lbnRDYWxsYmFja3MgPSBuZXcgTWFwPFxuICAgICAgc3RyaW5nLFxuICAgICAgKGVsZW1lbnQ6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCkgPT4gdm9pZFxuICAgID4oKTtcbiAgICByZXR1cm4ge1xuICAgICAgaGFuZGxlRm9yOiAoaWQ6IHN0cmluZykgPT4ge1xuICAgICAgICBsZXQgY2FsbGJhY2sgPSBoYW5kbGVDYWxsYmFja3MuZ2V0KGlkKTtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgIGNhbGxiYWNrID0gKGhhbmRsZSkgPT5cbiAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2wuc2V0SGFuZGxlKGlkIGFzIFNsb3RLZXksIGhhbmRsZSk7XG4gICAgICAgICAgaGFuZGxlQ2FsbGJhY2tzLnNldChpZCwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWxsYmFjaztcbiAgICAgIH0sXG4gICAgICBlbGVtZW50Rm9yOiAoaWQ6IHN0cmluZykgPT4ge1xuICAgICAgICBsZXQgY2FsbGJhY2sgPSBlbGVtZW50Q2FsbGJhY2tzLmdldChpZCk7XG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICBjYWxsYmFjayA9IChlbGVtZW50KSA9PlxuICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbC5zZXRFbGVtZW50KGlkIGFzIFNsb3RLZXksIGVsZW1lbnQpO1xuICAgICAgICAgIGVsZW1lbnRDYWxsYmFja3Muc2V0KGlkLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrO1xuICAgICAgfSxcbiAgICB9O1xuICB9LCBbYW5pbWF0aW9uQ29udHJvbF0pO1xuICBjb25zdCBzaG91bGRTdXBwcmVzc0xheW91dENhbGxiYWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKCkgPT4gT2JqZWN0LnZhbHVlcyhyZXNpemVTdXBwcmVzc2VkLmN1cnJlbnQpLnNvbWUoQm9vbGVhbiksXG4gICAgW11cbiAgKTtcblxuICBjb25zdCByZWdpc3RyeSA9IHVzZU1lbW88UGFuZWxSZWdpc3RyeT4oXG4gICAgKCkgPT4gKHtcbiAgICAgIHJlZ2lzdGVyOiAoc2xvdCwgcmVnKSA9PlxuICAgICAgICBzZXREZWNsYXJlZCgocHJldikgPT4gKHsgLi4ucHJldiwgW3Nsb3RdOiByZWcgfSkpLFxuICAgICAgdW5yZWdpc3RlcjogKHNsb3QpID0+XG4gICAgICAgIHNldERlY2xhcmVkKChwcmV2KSA9PiB7XG4gICAgICAgICAgaWYgKCEoc2xvdCBpbiBwcmV2KSkgcmV0dXJuIHByZXY7XG4gICAgICAgICAgY29uc3QgbmV4dCA9IHsgLi4ucHJldiB9O1xuICAgICAgICAgIGRlbGV0ZSBuZXh0W3Nsb3RdO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9KSxcbiAgICB9KSxcbiAgICBbXVxuICApO1xuXG4gIGNvbnN0IHsgcG9ydGFsVGFyZ2V0cywgc2xvdEhvc3RzLCBzbG90SG9zdFJlZnMsIGZsb2F0SG9zdFJlZiB9ID1cbiAgICB1c2VGbG9hdGFibGVQb3J0YWxUYXJnZXRzKHtcbiAgICAgIHNsb3RzOiBQQU5FTF9PUkRFUixcbiAgICAgIGZsb2F0YWJsZVNsb3Q6IFNsb3QucmlnaHRQYW5lbCxcbiAgICAgIGlzRmxvYXRpbmc6IGlzUmlnaHRQYW5lbEZsb2F0aW5nLFxuICAgIH0pO1xuXG4gIHVzZUdsb2JhbENzc1ZhcmlhYmxlcyhzbG90SG9zdHMpO1xuXG4gIC8vIFBhbmVscyB0aGF0IGV4aXN0IGluIHRoZSBsYXlvdXQsIHJlZ2FyZGxlc3Mgb2YgdmlzaWJpbGl0eS4gRHJpdmVzIHRoZVxuICAvLyBzb2xvLXZzLXJlc2l6YWJsZSBkZWNpc2lvbiBiZWxvdyAtIGtleWVkIG9uIERFQ0xBUkVEIChub3Qgc2hvd24pIHNvIHRoYXRcbiAgLy8gc2hvd2luZy9oaWRpbmcgYSBwYW5lbCBuZXZlciBmbGlwcyB0aGUgbW9kZS5cbiAgY29uc3QgZGVjbGFyZWRTbG90cyA9IFBBTkVMX09SREVSLmZpbHRlcigoc2xvdCkgPT4gZGVjbGFyZWRbc2xvdF0pO1xuXG4gIC8vIFNvbG8gbW9kZTogYSBzaW5nbGUgcGFuZWwgaXMgZGVjbGFyZWQgKGUuZy4ganVzdCBgQ29udGVudGAsIHdpdGggbm9cbiAgLy8gUmlnaHRQYW5lbC9MZWZ0UGFuZWwvU3BsaXQgaW4gdGhlIHRyZWUpIC0gbm90aGluZyB0byByZXNpemUgYWdhaW5zdCwgc28gaG9zdFxuICAvLyBpdCBpbiBhIHBsYWluIGRpdiBhbmQgc2tpcCByZWFjdC1yZXNpemFibGUtcGFuZWxzIGVudGlyZWx5LiBCZWNhdXNlIHRoZVxuICAvLyBjaGVjayBpcyBvbiBERUNMQVJFRCBwYW5lbHMsIHRvZ2dsaW5nIGEgKmRlY2xhcmVkKiBwYW5lbCdzIHZpc2liaWxpdHkga2VlcHNcbiAgLy8gdGhlIG1vZGUgc3RhYmxlLCBzbyBgQ29udGVudGAgaXMgbmV2ZXIgcmVtb3VudGVkIGJ5IGEgc2hvdy9oaWRlLiBUaGUgbW9kZVxuICAvLyBvbmx5IGZsaXBzIHdoZW4gYSBwYW5lbCBtYXJrZXIgaXMgYWRkZWQgdG8gLyByZW1vdmVkIGZyb20gdGhlIHRyZWUgKGFcbiAgLy8gc3RydWN0dXJhbCBjaGFuZ2UpLCB3aGVyZSBhIG9uZS10aW1lIHJlbW91bnQgaXMgYWNjZXB0YWJsZS5cbiAgY29uc3QgaXNTb2xvID0gZGVjbGFyZWRTbG90cy5sZW5ndGggPD0gMTtcbiAgY29uc3Qgc29sb1Nsb3QgPSBkZWNsYXJlZFNsb3RzWzBdO1xuXG4gIC8vIGNvbnRlbnQgZmxleGVzIChubyBmaXhlZCBzaXplKTsgb3RoZXJzIHVzZSB0aGUgZGVjbGFyZWQgZGVmYXVsdCwgZmFsbGluZ1xuICAvLyBiYWNrIHRvIHRoZSBwZXJzaXN0ZWQvY29uZmlnIHNpemUuXG4gIGNvbnN0IGRlZmF1bHRTaXplRm9yID0gKHNsb3Q6IFNsb3RLZXkpOiBTaXplIHwgdW5kZWZpbmVkID0+IHtcbiAgICBpZiAoc2xvdCA9PT0gU2xvdC5jb250ZW50KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBkZWNsYXJlZFtzbG90XT8uZGVmYXVsdFNpemUgPz8gbGF5b3V0U3RhdGVbc2xvdF0uc2l6ZTtcbiAgfTtcblxuICAvLyBPbmx5IHRoZSBwYW5lbHMgdGhhdCBhcmUgZGVjbGFyZWQgQU5EIChjdXJyZW50bHkgc2hvd24gT1IgbWlkLWV4aXQpLiBBXG4gIC8vIGhpZGRlbi1idXQtcHJlc2VudCBzbG90IGxpbmdlcnMgc28gaXRzIGNsb3NlIGFuaW1hdGlvbiBjYW4gcGxheTsgb3RoZXJ3aXNlXG4gIC8vIGNsb3NlZCBwYW5lbHMgcmVzZXJ2ZSBubyBzcGFjZS5cbiAgY29uc3QgcGFuZWxJdGVtczogUGFuZWxJdGVtW10gPSBQQU5FTF9PUkRFUi5maWx0ZXIoXG4gICAgKHNsb3QpID0+IGRlY2xhcmVkW3Nsb3RdICYmIChpc1Nob3duKHNsb3QpIHx8IHByZXNlbnRbc2xvdF0pXG4gICkubWFwKChzbG90KSA9PiAoe1xuICAgIGlkOiBzbG90LFxuICAgIGRlZmF1bHRTaXplOiBkZWZhdWx0U2l6ZUZvcihzbG90KSxcbiAgICBtaW5TaXplOiBkZWNsYXJlZFtzbG90XT8ubWluU2l6ZSA/PyBsYXlvdXRTdGF0ZVtzbG90XS5taW5TaXplLFxuICAgIG1heFNpemU6IGRlY2xhcmVkW3Nsb3RdPy5tYXhTaXplID8/IGxheW91dFN0YXRlW3Nsb3RdLm1heFNpemUsXG4gICAgY29sbGFwc2libGU6IHNsb3QgIT09IFNsb3QuY29udGVudCAmJiAoZGVjbGFyZWRbc2xvdF0/LmNvbGxhcHNpYmxlID8/IHRydWUpLFxuICB9KSk7XG5cbiAgLy8gU29sbyBtb2RlIGhvc3RzIHRoZSBsb25lIHBhbmVsIGluIGEgcGxhaW4gZGl2LCBubyByZXNpemFibGUgR3JvdXAuIEEgaGlkZGVuXG4gIC8vIGxvbmUgcGFuZWwgcmVuZGVycyBub3RoaW5nIChDb250ZW50IGlzIGFsd2F5cyBzaG93bikuXG4gIGNvbnN0IHNvbG9Ib3N0ID1cbiAgICBzb2xvU2xvdCAmJiBpc1Nob3duKHNvbG9TbG90KSA/IChcbiAgICAgIDxTdHlsZWRTb2xvSG9zdCByZWY9e3Nsb3RIb3N0UmVmc1tzb2xvU2xvdF19IC8+XG4gICAgKSA6IG51bGw7XG5cbiAgLy8gVGhlIHJlc2l6YWJsZSBHcm91cC4gYGtleWAgPSB0aGUgcGVyc2lzdGVuY2UgbmFtZXNwYWNlOiByZWFjdC1yZXNpemFibGUtcGFuZWxzXG4gIC8vIHJlYWRzIHN0b3JlZCBzaXplcyBvbmx5IG9uIG1vdW50LCBzbyByZW1vdW50IHdoZW4gdGhlIGtleSBjaGFuZ2VzIHRvIGxvYWRcbiAgLy8gdGhhdCBpbnN0YW5jZSdzIHNpemVzIChwZXItcm91dGUgc2l6ZSBtZW1vcnkpLiBUaGUga2V5IG5ldmVyIGNoYW5nZXMgb25cbiAgLy8gcGFuZWwgb3Blbi9jbG9zZSwgc28gbm9ybWFsIHRvZ2dsaW5nIHN0YXlzIHJlbW91bnQtZnJlZS5cbiAgY29uc3QgcGFuZWxHcm91cCA9XG4gICAgcGFuZWxJdGVtcy5sZW5ndGggPiAwID8gKFxuICAgICAgPFBhbmVsXG4gICAgICAgIGtleT17cmVzb2x2ZWRLZXl9XG4gICAgICAgIHBhbmVscz17cGFuZWxJdGVtc31cbiAgICAgICAgcGVyc2lzdGVuY2VLZXk9e3Jlc29sdmVkS2V5fVxuICAgICAgICBzdG9yYWdlPXtyZXNvbHZlZFN0b3JhZ2V9XG4gICAgICAgIGhvc3RGb3I9eyhpZCkgPT4gc2xvdEhvc3RSZWZzW2lkIGFzIFNsb3RLZXldfVxuICAgICAgICBvblJlc2l6ZT17KGlkLCBzaXplKSA9PiBwYW5lbENhbGxiYWNrc1tpZCBhcyBTbG90S2V5XS5yZXNpemUoc2l6ZSl9XG4gICAgICAgIG9uQ29sbGFwc2U9eyhpZCkgPT4gcGFuZWxDYWxsYmFja3NbaWQgYXMgU2xvdEtleV0uaGlkZSgpfVxuICAgICAgICBwYW5lbEhhbmRsZUZvcj17cGFuZWxSZWZDYWxsYmFja3MuaGFuZGxlRm9yfVxuICAgICAgICBwYW5lbEVsZW1lbnRGb3I9e3BhbmVsUmVmQ2FsbGJhY2tzLmVsZW1lbnRGb3J9XG4gICAgICAgIHNob3VsZFN1cHByZXNzTGF5b3V0Q2FsbGJhY2s9e3Nob3VsZFN1cHByZXNzTGF5b3V0Q2FsbGJhY2t9XG4gICAgICAvPlxuICAgICkgOiBudWxsO1xuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsUmVnaXN0cnlDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtyZWdpc3RyeX0+XG4gICAgICA8UGFuZWxQcmVzZW5jZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3ByZXNlbmNlfT5cbiAgICAgICAgPFBhbmVsQW5pbWF0aW9uQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17YW5pbWF0aW9uQ29udHJvbH0+XG4gICAgICAgICAgPExheW91dFBvcnRhbENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3BvcnRhbFRhcmdldHN9PlxuICAgICAgICAgICAgPFN0eWxlZExheW91dCBkYXRhLWRzLWlkPVwiTGF5b3V0XCI+XG4gICAgICAgICAgICAgIHtpc1NvbG8gPyBzb2xvSG9zdCA6IHBhbmVsR3JvdXB9XG4gICAgICAgICAgICAgIHtpc1JpZ2h0UGFuZWxGbG9hdGluZyAmJiBsYXlvdXRTdGF0ZVtTbG90LnJpZ2h0UGFuZWxdLnZpc2libGUgJiYgKFxuICAgICAgICAgICAgICAgIDxMYXlvdXRGbG9hdCBob3N0UmVmPXtmbG9hdEhvc3RSZWZ9IC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgIDwvU3R5bGVkTGF5b3V0PlxuICAgICAgICAgIDwvTGF5b3V0UG9ydGFsQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICAgPC9QYW5lbEFuaW1hdGlvbkNvbnRleHQuUHJvdmlkZXI+XG4gICAgICA8L1BhbmVsUHJlc2VuY2VDb250ZXh0LlByb3ZpZGVyPlxuICAgIDwvUGFuZWxSZWdpc3RyeUNvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4vKiBQdWJsaWMgTGF5b3V0IC0gdGhlIHJlc2l6YWJsZSBwYW5lbCByb3cgKyBjb21wb3VuZCBwYXJ0cyBhcyBzdGF0aWNzICAgICAgICAgKi9cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbnR5cGUgTGF5b3V0Q29tcG9uZW50ID0gdHlwZW9mIExheW91dEJhc2UgJiB7XG4gIFByb3ZpZGVyOiB0eXBlb2YgTGF5b3V0UHJvdmlkZXI7XG4gIExlZnRQYW5lbDogdHlwZW9mIExlZnRQYW5lbDtcbiAgTGVmdFBhbmVsSGVhZGVyOiB0eXBlb2YgTGVmdFBhbmVsSGVhZGVyO1xuICBMZWZ0UGFuZWxGb290ZXI6IHR5cGVvZiBMZWZ0UGFuZWxGb290ZXI7XG4gIFJpZ2h0UGFuZWw6IHR5cGVvZiBSaWdodFBhbmVsO1xuICBSaWdodFBhbmVsSGVhZGVyOiB0eXBlb2YgUmlnaHRQYW5lbEhlYWRlcjtcbiAgUmlnaHRQYW5lbEZvb3RlcjogdHlwZW9mIFJpZ2h0UGFuZWxGb290ZXI7XG4gIENvbnRlbnQ6IHR5cGVvZiBDb250ZW50O1xuICBTcGxpdDogdHlwZW9mIFNwbGl0O1xuICBTcGxpdEhlYWRlcjogdHlwZW9mIFNwbGl0SGVhZGVyO1xuICBTcGxpdEZvb3RlcjogdHlwZW9mIFNwbGl0Rm9vdGVyO1xufTtcblxuZXhwb3J0IGNvbnN0IExheW91dCA9IExheW91dEJhc2UgYXMgTGF5b3V0Q29tcG9uZW50O1xuXG5MYXlvdXQuUHJvdmlkZXIgPSBMYXlvdXRQcm92aWRlcjtcbkxheW91dC5MZWZ0UGFuZWwgPSBMZWZ0UGFuZWw7XG5MYXlvdXQuTGVmdFBhbmVsSGVhZGVyID0gTGVmdFBhbmVsSGVhZGVyO1xuTGF5b3V0LkxlZnRQYW5lbEZvb3RlciA9IExlZnRQYW5lbEZvb3RlcjtcbkxheW91dC5SaWdodFBhbmVsID0gUmlnaHRQYW5lbDtcbkxheW91dC5SaWdodFBhbmVsSGVhZGVyID0gUmlnaHRQYW5lbEhlYWRlcjtcbkxheW91dC5SaWdodFBhbmVsRm9vdGVyID0gUmlnaHRQYW5lbEZvb3RlcjtcbkxheW91dC5Db250ZW50ID0gQ29udGVudDtcbkxheW91dC5TcGxpdCA9IFNwbGl0O1xuTGF5b3V0LlNwbGl0SGVhZGVyID0gU3BsaXRIZWFkZXI7XG5MYXlvdXQuU3BsaXRGb290ZXIgPSBTcGxpdEZvb3RlcjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtRnFCIn0= */"),StyledSoloHost=styled("div",{target:"e1exnax51",label:"StyledSoloHost"})({position:"relative",height:"100%",width:"100%"},"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3JjL2NvbXBvbmVudHMvTGF5b3V0L0xheW91dC50c3giLCJzb3VyY2VzIjpbInNyYy9jb21wb25lbnRzL0xheW91dC9MYXlvdXQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwge1xuICB1c2VDYWxsYmFjayxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBzdHlsZWQgZnJvbSBcIkBlbW90aW9uL3N0eWxlZFwiO1xuaW1wb3J0IHR5cGUgeyBQYW5lbEltcGVyYXRpdmVIYW5kbGUgfSBmcm9tIFwicmVhY3QtcmVzaXphYmxlLXBhbmVsc1wiO1xuaW1wb3J0IHsgUGFuZWwgfSBmcm9tIFwiLi4vSW50ZXJuYWwvUGFuZWwvUGFuZWxcIjtcbmltcG9ydCB0eXBlIHsgUGFuZWxJdGVtIH0gZnJvbSBcIi4uL0ludGVybmFsL1BhbmVsL1BhbmVsXCI7XG5pbXBvcnQgeyBMYXlvdXRGbG9hdCB9IGZyb20gXCIuLi9JbnRlcm5hbC9MYXlvdXRGbG9hdC9MYXlvdXRGbG9hdFwiO1xuaW1wb3J0IHsgdXNlQnJlYWtwb2ludHMgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL3VzZUJyZWFrcG9pbnRzXCI7XG5pbXBvcnQgeyBQQU5FTF9PUkRFUiwgUEFORUxfV0lEVEhfVkFSLCBTbG90IH0gZnJvbSBcIi4vLWNvbnN0YW50c1wiO1xuaW1wb3J0IHsgdXNlTGF5b3V0UGFuZWxzRW5hYmxlZCwgdXNlTGF5b3V0UGVyc2lzdGVuY2UgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQgeyBMYXlvdXRQcm92aWRlciB9IGZyb20gXCIuL0xheW91dFByb3ZpZGVyXCI7XG5pbXBvcnQgeyBDb250ZW50IH0gZnJvbSBcIi4vQ29udGVudC9Db250ZW50XCI7XG5pbXBvcnQgeyBSaWdodFBhbmVsIH0gZnJvbSBcIi4vUmlnaHRQYW5lbC9SaWdodFBhbmVsXCI7XG5pbXBvcnQgeyBSaWdodFBhbmVsSGVhZGVyIH0gZnJvbSBcIi4vUmlnaHRQYW5lbC9SaWdodFBhbmVsSGVhZGVyXCI7XG5pbXBvcnQgeyBSaWdodFBhbmVsRm9vdGVyIH0gZnJvbSBcIi4vUmlnaHRQYW5lbC9SaWdodFBhbmVsRm9vdGVyXCI7XG5pbXBvcnQgeyBMZWZ0UGFuZWwgfSBmcm9tIFwiLi9MZWZ0UGFuZWwvTGVmdFBhbmVsXCI7XG5pbXBvcnQgeyBMZWZ0UGFuZWxIZWFkZXIgfSBmcm9tIFwiLi9MZWZ0UGFuZWwvTGVmdFBhbmVsSGVhZGVyXCI7XG5pbXBvcnQgeyBMZWZ0UGFuZWxGb290ZXIgfSBmcm9tIFwiLi9MZWZ0UGFuZWwvTGVmdFBhbmVsRm9vdGVyXCI7XG5pbXBvcnQgeyBTcGxpdCB9IGZyb20gXCIuL1NwbGl0L1NwbGl0XCI7XG5pbXBvcnQgeyBTcGxpdEhlYWRlciB9IGZyb20gXCIuL1NwbGl0L1NwbGl0SGVhZGVyXCI7XG5pbXBvcnQgeyBTcGxpdEZvb3RlciB9IGZyb20gXCIuL1NwbGl0L1NwbGl0Rm9vdGVyXCI7XG5pbXBvcnQge1xuICBMYXlvdXRQb3J0YWxDb250ZXh0LFxuICBQYW5lbFJlZ2lzdHJ5Q29udGV4dCxcbiAgUGFuZWxQcmVzZW5jZUNvbnRleHQsXG4gIFBhbmVsQW5pbWF0aW9uQ29udGV4dCxcbiAgdHlwZSBQb3J0YWxUYXJnZXRzLFxuICB0eXBlIFBhbmVsUmVnLFxuICB0eXBlIFBhbmVsUmVnaXN0cnksXG4gIHR5cGUgUGFuZWxQcmVzZW5jZSxcbiAgdHlwZSBQYW5lbEFuaW1hdGlvbkNvbnRyb2wsXG59IGZyb20gXCIuL3JlZ2lzdHJ5XCI7XG5pbXBvcnQgeyB1c2VGbG9hdGFibGVQb3J0YWxUYXJnZXRzIH0gZnJvbSBcIi4vdXNlRmxvYXRhYmxlUG9ydGFsVGFyZ2V0c1wiO1xuaW1wb3J0IHsgdXNlTGF5b3V0VmFyLCB0eXBlIExheW91dFZhckhhbmRsZSB9IGZyb20gXCIuL0xheW91dENzc1ZhcnNcIjtcbmltcG9ydCB7IHVzZUxheW91dCB9IGZyb20gXCIuL3VzZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgeyBMYXlvdXRQcm9wcywgU2l6ZSwgU2xvdEtleSB9IGZyb20gXCIuLy10eXBlc1wiO1xuXG4vKipcbiAqIFB1Ymxpc2hlcyBlYWNoIHBhbmVsJ3MgbGl2ZSBwaXhlbCB3aWR0aCBhcyBhIGxheW91dCBDU1MgdmFyIChlLmcuXG4gKiBgLS1kcy1sYXlvdXQtcmlnaHRQYW5lbC13aWR0aGApLCB0cmFja2luZyBkcmFnLSBhbmQgd2luZG93LXJlc2l6ZXMuIEEgaGlkZGVuXG4gKiBwYXJ0IChubyBob3N0IG5vZGUpIHJlYWRzIGAwcHhgLCBzbyB0aGUgdmFyIGlzIGFsd2F5cyBkZWZpbmVkLiBPbmVcbiAqIGB1c2VMYXlvdXRWYXJgIHBlciBzbG90IGluIGBQQU5FTF9XSURUSF9WQVJgLlxuICovXG5jb25zdCB1c2VHbG9iYWxDc3NWYXJpYWJsZXMgPSAoc2xvdEhvc3RzOiBQb3J0YWxUYXJnZXRzKTogdm9pZCA9PiB7XG4gIGNvbnN0IGNvbnRlbnRXaWR0aENzc1ZhciA9IHVzZUxheW91dFZhcihQQU5FTF9XSURUSF9WQVIuY29udGVudCk7XG4gIGNvbnN0IHJpZ2h0UGFuZWxXaWR0aENzc1ZhciA9IHVzZUxheW91dFZhcihQQU5FTF9XSURUSF9WQVIucmlnaHRQYW5lbCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB0YXJnZXRzOiBbU2xvdEtleSwgTGF5b3V0VmFySGFuZGxlXVtdID0gW1xuICAgICAgW1Nsb3QuY29udGVudCwgY29udGVudFdpZHRoQ3NzVmFyXSxcbiAgICAgIFtTbG90LnJpZ2h0UGFuZWwsIHJpZ2h0UGFuZWxXaWR0aENzc1Zhcl0sXG4gICAgXTtcbiAgICBjb25zdCBvYnNlcnZlcnM6IFJlc2l6ZU9ic2VydmVyW10gPSBbXTtcblxuICAgIHRhcmdldHMuZm9yRWFjaCgoW3Nsb3QsIGhhbmRsZV0pID0+IHtcbiAgICAgIGNvbnN0IG5vZGUgPSBzbG90SG9zdHNbc2xvdF0gPz8gbnVsbDtcbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICBoYW5kbGUuc2V0KFwiMHB4XCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBwdWJsaXNoTm9kZVdpZHRoID0gKCk6IHZvaWQgPT5cbiAgICAgICAgaGFuZGxlLnNldChgJHtub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRofXB4YCk7XG4gICAgICBwdWJsaXNoTm9kZVdpZHRoKCk7XG4gICAgICAvLyBqc2RvbSAoYW5kIG9sZCBicm93c2VycykgbGFjayBSZXNpemVPYnNlcnZlciDigJQgc2tpcCBsaXZlIHRyYWNraW5nIHRoZXJlLlxuICAgICAgaWYgKHR5cGVvZiBSZXNpemVPYnNlcnZlciA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xuICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIocHVibGlzaE5vZGVXaWR0aCk7XG4gICAgICBvYnNlcnZlci5vYnNlcnZlKG5vZGUpO1xuICAgICAgb2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuICgpID0+IG9ic2VydmVycy5mb3JFYWNoKChvYnNlcnZlcikgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpKTtcbiAgfSwgW2NvbnRlbnRXaWR0aENzc1ZhciwgcmlnaHRQYW5lbFdpZHRoQ3NzVmFyLCBzbG90SG9zdHNdKTtcbn07XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4vKiBMYXlvdXQgLSByZWdpc3RyeSArIGhvc3RzOyBtYXJrZXJzIGRlY2xhcmUvcG9ydGFsOyB0aGUgcmVzaXphYmxlIHBhbmVsIHJvdyAgICovXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5jb25zdCBTdHlsZWRMYXlvdXQgPSBzdHlsZWQuZGl2KHtcbiAgcG9zaXRpb246IFwicmVsYXRpdmVcIixcbiAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgd2lkdGg6IFwiMTAwJVwiLFxufSk7XG5cbi8vIFNvbG8tbW9kZSBob3N0OiBhIGxvbmUgcGFuZWwgKG5vIHJlc2l6YWJsZSBzaWJsaW5nKSBpcyBob3N0ZWQgaGVyZSBpbnN0ZWFkIG9mXG4vLyBpbnNpZGUgcmVhY3QtcmVzaXphYmxlLXBhbmVscy4gTWF0Y2hlcyB0aGUgcGVyLXBhbmVsIGhvc3QgdGhlIEdyb3VwIHJlbmRlcnNcbi8vIChgcmVsYXRpdmVgICsgZnVsbC1ibGVlZCkgc28gY29udGVudCByZWZsb3dzL3Njcm9sbHMgaWRlbnRpY2FsbHkgZWl0aGVyIHdheS5cbmNvbnN0IFN0eWxlZFNvbG9Ib3N0ID0gc3R5bGVkLmRpdih7XG4gIHBvc2l0aW9uOiBcInJlbGF0aXZlXCIsXG4gIGhlaWdodDogXCIxMDAlXCIsXG4gIHdpZHRoOiBcIjEwMCVcIixcbn0pO1xuXG5mdW5jdGlvbiBMYXlvdXRCYXNlKHtcbiAgY2hpbGRyZW4sXG4gIHBlcnNpc3RlbmNlS2V5LFxuICBzdG9yYWdlLFxufTogTGF5b3V0UHJvcHMpOiBSZWFjdC5SZWFjdEVsZW1lbnQge1xuICBjb25zdCBbZGVjbGFyZWQsIHNldERlY2xhcmVkXSA9IHVzZVN0YXRlPFBhcnRpYWw8UmVjb3JkPFNsb3RLZXksIFBhbmVsUmVnPj4+KFxuICAgIHt9XG4gICk7XG4gIGNvbnN0IHsgc3RhdGU6IGxheW91dFN0YXRlLCAuLi5wYW5lbENhbGxiYWNrcyB9ID0gdXNlTGF5b3V0KCk7XG4gIGNvbnN0IHBlcnNpc3RlbmNlID0gdXNlTGF5b3V0UGVyc2lzdGVuY2UoKTtcbiAgY29uc3QgcmVzb2x2ZWRLZXkgPSBwZXJzaXN0ZW5jZUtleSA/PyBwZXJzaXN0ZW5jZS5wZXJzaXN0ZW5jZUtleTtcbiAgY29uc3QgcmVzb2x2ZWRTdG9yYWdlID0gc3RvcmFnZSA/PyBwZXJzaXN0ZW5jZS5zdG9yYWdlO1xuXG4gIC8vIEJlbG93IHRoZSBtb2JpbGUgYnJlYWtwb2ludCB0aGUgcmlnaHRQYW5lbCByZW5kZXJzIGFzIGEgYm90dG9tIHNoZWV0IChpdHNcbiAgLy8gbWFya2VyIHJlbmRlcnMgdGhlIFNoZWV0IGl0c2VsZikgLSBhbiBhdXRvbWF0aWMsIHJlbmRlci1sZXZlbCBhZGFwdGF0aW9uLlxuICAvLyBUaGUgc3RvcmVkIHZhcmlhbnQgaXMgdW50b3VjaGVkLCBzbyByZXNpemluZyBiYWNrIHRvIGRlc2t0b3AgcmVzdG9yZXMgdGhlXG4gIC8vIGV4YWN0IHByZXNlbnRhdGlvbiAoZG9ja2VkIG9yIGZsb2F0aW5nKSB0aGUgdXNlciBsZWZ0LlxuICBjb25zdCB7IGlzTW9iaWxlIH0gPSB1c2VCcmVha3BvaW50cygpO1xuICBjb25zdCBpc1JpZ2h0UGFuZWxTaGVldCA9IGlzTW9iaWxlO1xuXG4gIC8vIEEgZmxvYXRpbmcgcmlnaHRQYW5lbCBzdGF5cyB2aXNpYmxlIChpdHMgbWFya2VyIGtlZXBzIHJlbmRlcmluZyBjb250ZW50KVxuICAvLyBidXQgbGVhdmVzIHRoZSByZXNpemFibGUgcm93IC0gZXhhY3RseSBsaWtlIGEgaGlkZGVuIHBhbmVsIGRvZXMuIFRoZVxuICAvLyBtb2JpbGUgc2hlZXQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSBmbG9hdGluZyB3aW5kb3cuIEZsb2F0IGlzIGFcbiAgLy8gZGVza3RvcCBwcmVzZW50YXRpb24sIHNvIG9ubHkgbW9kZSBgdHJ1ZWAgZW5hYmxlcyBpdC5cbiAgY29uc3QgcGFuZWxzRW5hYmxlZCA9IHVzZUxheW91dFBhbmVsc0VuYWJsZWQoKTtcbiAgY29uc3QgaXNSaWdodFBhbmVsRmxvYXRpbmcgPVxuICAgIHBhbmVsc0VuYWJsZWQgPT09IHRydWUgJiZcbiAgICAhaXNSaWdodFBhbmVsU2hlZXQgJiZcbiAgICBsYXlvdXRTdGF0ZVtTbG90LnJpZ2h0UGFuZWxdLnZhcmlhbnQgPT09IFwiZmxvYXRcIjtcblxuICBjb25zdCBpc1Nob3duID0gKHNsb3Q6IFNsb3RLZXkpOiBib29sZWFuID0+XG4gICAgbGF5b3V0U3RhdGVbc2xvdF0udmlzaWJsZSAmJlxuICAgICEoc2xvdCA9PT0gU2xvdC5yaWdodFBhbmVsICYmIChpc1JpZ2h0UGFuZWxGbG9hdGluZyB8fCBpc1JpZ2h0UGFuZWxTaGVldCkpO1xuXG4gIC8vIFNsb3RzIGtlcHQgbW91bnRlZCB0aHJvdWdoIHRoZWlyIGV4aXQgYW5pbWF0aW9uIChyZXBvcnRlZCB2aWFcbiAgLy8gYHVzZVBhbmVsUHJlc2VuY2VgKS4gQSBwcmVzZW50LWJ1dC1oaWRkZW4gc2xvdCBzdGF5cyBpbiB0aGUgcm93IHNvIGl0c1xuICAvLyBjbG9zZSBhbmltYXRpb24gY2FuIHBsYXk7IGl0J3MgcmVtb3ZlZCBvbmNlIHByZXNlbmNlIGZsaXBzIGZhbHNlLlxuICBjb25zdCBbcHJlc2VudCwgc2V0UHJlc2VudF0gPSB1c2VTdGF0ZTxQYXJ0aWFsPFJlY29yZDxTbG90S2V5LCBib29sZWFuPj4+KHt9KTtcbiAgY29uc3QgcHJlc2VuY2UgPSB1c2VNZW1vPFBhbmVsUHJlc2VuY2U+KFxuICAgICgpID0+ICh7XG4gICAgICBzZXRQcmVzZW50OiAoc2xvdCwgaXNQcmVzZW50KSA9PlxuICAgICAgICBzZXRQcmVzZW50KChwcmV2KSA9PlxuICAgICAgICAgIHByZXZbc2xvdF0gPT09IGlzUHJlc2VudCA/IHByZXYgOiB7IC4uLnByZXYsIFtzbG90XTogaXNQcmVzZW50IH1cbiAgICAgICAgKSxcbiAgICB9KSxcbiAgICBbXVxuICApO1xuXG4gIC8vIEFuaW1hdGlvbiBjb250cm9sIGZvciB0aGUgZG9ja2VkIHNpZGUgcGFuZWxzJyBvcGVuL2Nsb3NlIHdpZHRoIHNsaWRlLiBBbGxcbiAgLy8gcmVmLWJhc2VkIG9uIHB1cnBvc2U6IHJlZ2lzdGVyaW5nIGhhbmRsZXMvZWxlbWVudHMgYW5kIHRvZ2dsaW5nIHN1cHByZXNzaW9uXG4gIC8vIGhhcHBlbiBkdXJpbmcgY29tbWl0cyBhbmQgcGVyLWZyYW1lIC0gbm9uZSBvZiBpdCBtYXkgcmUtcmVuZGVyIHRoZSBMYXlvdXQuXG4gIGNvbnN0IHBhbmVsSGFuZGxlcyA9IHVzZVJlZjxcbiAgICBQYXJ0aWFsPFJlY29yZDxTbG90S2V5LCBQYW5lbEltcGVyYXRpdmVIYW5kbGUgfCBudWxsPj5cbiAgPih7fSk7XG4gIGNvbnN0IHBhbmVsRWxlbWVudHMgPSB1c2VSZWY8UGFydGlhbDxSZWNvcmQ8U2xvdEtleSwgSFRNTEVsZW1lbnQgfCBudWxsPj4+KFxuICAgIHt9XG4gICk7XG4gIGNvbnN0IHJlc2l6ZVN1cHByZXNzZWQgPSB1c2VSZWY8UGFydGlhbDxSZWNvcmQ8U2xvdEtleSwgYm9vbGVhbj4+Pih7fSk7XG4gIGNvbnN0IGFuaW1hdGlvbkNvbnRyb2wgPSB1c2VNZW1vPFBhbmVsQW5pbWF0aW9uQ29udHJvbD4oXG4gICAgKCkgPT4gKHtcbiAgICAgIHNldEhhbmRsZTogKHNsb3QsIGhhbmRsZSkgPT4ge1xuICAgICAgICBwYW5lbEhhbmRsZXMuY3VycmVudFtzbG90XSA9IGhhbmRsZTtcbiAgICAgIH0sXG4gICAgICBnZXRIYW5kbGU6IChzbG90KSA9PiBwYW5lbEhhbmRsZXMuY3VycmVudFtzbG90XSA/PyBudWxsLFxuICAgICAgc2V0RWxlbWVudDogKHNsb3QsIGVsZW1lbnQpID0+IHtcbiAgICAgICAgcGFuZWxFbGVtZW50cy5jdXJyZW50W3Nsb3RdID0gZWxlbWVudDtcbiAgICAgIH0sXG4gICAgICBnZXRFbGVtZW50OiAoc2xvdCkgPT4gcGFuZWxFbGVtZW50cy5jdXJyZW50W3Nsb3RdID8/IG51bGwsXG4gICAgICBzZXRSZXNpemVTdXBwcmVzc2VkOiAoc2xvdCwgc3VwcHJlc3NlZCkgPT4ge1xuICAgICAgICByZXNpemVTdXBwcmVzc2VkLmN1cnJlbnRbc2xvdF0gPSBzdXBwcmVzc2VkO1xuICAgICAgfSxcbiAgICB9KSxcbiAgICBbXVxuICApO1xuICAvLyBTdGFibGUgcGVyLXNsb3QgcmVmIGNhbGxiYWNrcyAtIGEgZnJlc2ggY2FsbGJhY2sgaWRlbnRpdHkgcGVyIHJlbmRlciB3b3VsZFxuICAvLyBtYWtlIFJlYWN0IGRldGFjaC9yZWF0dGFjaCB0aGUgcmVmcyBvbiBldmVyeSBMYXlvdXQgcmUtcmVuZGVyLlxuICBjb25zdCBwYW5lbFJlZkNhbGxiYWNrcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZUNhbGxiYWNrcyA9IG5ldyBNYXA8XG4gICAgICBzdHJpbmcsXG4gICAgICAoaGFuZGxlOiBQYW5lbEltcGVyYXRpdmVIYW5kbGUgfCBudWxsKSA9PiB2b2lkXG4gICAgPigpO1xuICAgIGNvbnN0IGVsZW1lbnRDYWxsYmFja3MgPSBuZXcgTWFwPFxuICAgICAgc3RyaW5nLFxuICAgICAgKGVsZW1lbnQ6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCkgPT4gdm9pZFxuICAgID4oKTtcbiAgICByZXR1cm4ge1xuICAgICAgaGFuZGxlRm9yOiAoaWQ6IHN0cmluZykgPT4ge1xuICAgICAgICBsZXQgY2FsbGJhY2sgPSBoYW5kbGVDYWxsYmFja3MuZ2V0KGlkKTtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgIGNhbGxiYWNrID0gKGhhbmRsZSkgPT5cbiAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2wuc2V0SGFuZGxlKGlkIGFzIFNsb3RLZXksIGhhbmRsZSk7XG4gICAgICAgICAgaGFuZGxlQ2FsbGJhY2tzLnNldChpZCwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWxsYmFjaztcbiAgICAgIH0sXG4gICAgICBlbGVtZW50Rm9yOiAoaWQ6IHN0cmluZykgPT4ge1xuICAgICAgICBsZXQgY2FsbGJhY2sgPSBlbGVtZW50Q2FsbGJhY2tzLmdldChpZCk7XG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICBjYWxsYmFjayA9IChlbGVtZW50KSA9PlxuICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbC5zZXRFbGVtZW50KGlkIGFzIFNsb3RLZXksIGVsZW1lbnQpO1xuICAgICAgICAgIGVsZW1lbnRDYWxsYmFja3Muc2V0KGlkLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrO1xuICAgICAgfSxcbiAgICB9O1xuICB9LCBbYW5pbWF0aW9uQ29udHJvbF0pO1xuICBjb25zdCBzaG91bGRTdXBwcmVzc0xheW91dENhbGxiYWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKCkgPT4gT2JqZWN0LnZhbHVlcyhyZXNpemVTdXBwcmVzc2VkLmN1cnJlbnQpLnNvbWUoQm9vbGVhbiksXG4gICAgW11cbiAgKTtcblxuICBjb25zdCByZWdpc3RyeSA9IHVzZU1lbW88UGFuZWxSZWdpc3RyeT4oXG4gICAgKCkgPT4gKHtcbiAgICAgIHJlZ2lzdGVyOiAoc2xvdCwgcmVnKSA9PlxuICAgICAgICBzZXREZWNsYXJlZCgocHJldikgPT4gKHsgLi4ucHJldiwgW3Nsb3RdOiByZWcgfSkpLFxuICAgICAgdW5yZWdpc3RlcjogKHNsb3QpID0+XG4gICAgICAgIHNldERlY2xhcmVkKChwcmV2KSA9PiB7XG4gICAgICAgICAgaWYgKCEoc2xvdCBpbiBwcmV2KSkgcmV0dXJuIHByZXY7XG4gICAgICAgICAgY29uc3QgbmV4dCA9IHsgLi4ucHJldiB9O1xuICAgICAgICAgIGRlbGV0ZSBuZXh0W3Nsb3RdO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9KSxcbiAgICB9KSxcbiAgICBbXVxuICApO1xuXG4gIGNvbnN0IHsgcG9ydGFsVGFyZ2V0cywgc2xvdEhvc3RzLCBzbG90SG9zdFJlZnMsIGZsb2F0SG9zdFJlZiB9ID1cbiAgICB1c2VGbG9hdGFibGVQb3J0YWxUYXJnZXRzKHtcbiAgICAgIHNsb3RzOiBQQU5FTF9PUkRFUixcbiAgICAgIGZsb2F0YWJsZVNsb3Q6IFNsb3QucmlnaHRQYW5lbCxcbiAgICAgIGlzRmxvYXRpbmc6IGlzUmlnaHRQYW5lbEZsb2F0aW5nLFxuICAgIH0pO1xuXG4gIHVzZUdsb2JhbENzc1ZhcmlhYmxlcyhzbG90SG9zdHMpO1xuXG4gIC8vIFBhbmVscyB0aGF0IGV4aXN0IGluIHRoZSBsYXlvdXQsIHJlZ2FyZGxlc3Mgb2YgdmlzaWJpbGl0eS4gRHJpdmVzIHRoZVxuICAvLyBzb2xvLXZzLXJlc2l6YWJsZSBkZWNpc2lvbiBiZWxvdyAtIGtleWVkIG9uIERFQ0xBUkVEIChub3Qgc2hvd24pIHNvIHRoYXRcbiAgLy8gc2hvd2luZy9oaWRpbmcgYSBwYW5lbCBuZXZlciBmbGlwcyB0aGUgbW9kZS5cbiAgY29uc3QgZGVjbGFyZWRTbG90cyA9IFBBTkVMX09SREVSLmZpbHRlcigoc2xvdCkgPT4gZGVjbGFyZWRbc2xvdF0pO1xuXG4gIC8vIFNvbG8gbW9kZTogYSBzaW5nbGUgcGFuZWwgaXMgZGVjbGFyZWQgKGUuZy4ganVzdCBgQ29udGVudGAsIHdpdGggbm9cbiAgLy8gUmlnaHRQYW5lbC9MZWZ0UGFuZWwvU3BsaXQgaW4gdGhlIHRyZWUpIC0gbm90aGluZyB0byByZXNpemUgYWdhaW5zdCwgc28gaG9zdFxuICAvLyBpdCBpbiBhIHBsYWluIGRpdiBhbmQgc2tpcCByZWFjdC1yZXNpemFibGUtcGFuZWxzIGVudGlyZWx5LiBCZWNhdXNlIHRoZVxuICAvLyBjaGVjayBpcyBvbiBERUNMQVJFRCBwYW5lbHMsIHRvZ2dsaW5nIGEgKmRlY2xhcmVkKiBwYW5lbCdzIHZpc2liaWxpdHkga2VlcHNcbiAgLy8gdGhlIG1vZGUgc3RhYmxlLCBzbyBgQ29udGVudGAgaXMgbmV2ZXIgcmVtb3VudGVkIGJ5IGEgc2hvdy9oaWRlLiBUaGUgbW9kZVxuICAvLyBvbmx5IGZsaXBzIHdoZW4gYSBwYW5lbCBtYXJrZXIgaXMgYWRkZWQgdG8gLyByZW1vdmVkIGZyb20gdGhlIHRyZWUgKGFcbiAgLy8gc3RydWN0dXJhbCBjaGFuZ2UpLCB3aGVyZSBhIG9uZS10aW1lIHJlbW91bnQgaXMgYWNjZXB0YWJsZS5cbiAgY29uc3QgaXNTb2xvID0gZGVjbGFyZWRTbG90cy5sZW5ndGggPD0gMTtcbiAgY29uc3Qgc29sb1Nsb3QgPSBkZWNsYXJlZFNsb3RzWzBdO1xuXG4gIC8vIGNvbnRlbnQgZmxleGVzIChubyBmaXhlZCBzaXplKTsgb3RoZXJzIHVzZSB0aGUgZGVjbGFyZWQgZGVmYXVsdCwgZmFsbGluZ1xuICAvLyBiYWNrIHRvIHRoZSBwZXJzaXN0ZWQvY29uZmlnIHNpemUuXG4gIGNvbnN0IGRlZmF1bHRTaXplRm9yID0gKHNsb3Q6IFNsb3RLZXkpOiBTaXplIHwgdW5kZWZpbmVkID0+IHtcbiAgICBpZiAoc2xvdCA9PT0gU2xvdC5jb250ZW50KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBkZWNsYXJlZFtzbG90XT8uZGVmYXVsdFNpemUgPz8gbGF5b3V0U3RhdGVbc2xvdF0uc2l6ZTtcbiAgfTtcblxuICAvLyBPbmx5IHRoZSBwYW5lbHMgdGhhdCBhcmUgZGVjbGFyZWQgQU5EIChjdXJyZW50bHkgc2hvd24gT1IgbWlkLWV4aXQpLiBBXG4gIC8vIGhpZGRlbi1idXQtcHJlc2VudCBzbG90IGxpbmdlcnMgc28gaXRzIGNsb3NlIGFuaW1hdGlvbiBjYW4gcGxheTsgb3RoZXJ3aXNlXG4gIC8vIGNsb3NlZCBwYW5lbHMgcmVzZXJ2ZSBubyBzcGFjZS5cbiAgY29uc3QgcGFuZWxJdGVtczogUGFuZWxJdGVtW10gPSBQQU5FTF9PUkRFUi5maWx0ZXIoXG4gICAgKHNsb3QpID0+IGRlY2xhcmVkW3Nsb3RdICYmIChpc1Nob3duKHNsb3QpIHx8IHByZXNlbnRbc2xvdF0pXG4gICkubWFwKChzbG90KSA9PiAoe1xuICAgIGlkOiBzbG90LFxuICAgIGRlZmF1bHRTaXplOiBkZWZhdWx0U2l6ZUZvcihzbG90KSxcbiAgICBtaW5TaXplOiBkZWNsYXJlZFtzbG90XT8ubWluU2l6ZSA/PyBsYXlvdXRTdGF0ZVtzbG90XS5taW5TaXplLFxuICAgIG1heFNpemU6IGRlY2xhcmVkW3Nsb3RdPy5tYXhTaXplID8/IGxheW91dFN0YXRlW3Nsb3RdLm1heFNpemUsXG4gICAgY29sbGFwc2libGU6IHNsb3QgIT09IFNsb3QuY29udGVudCAmJiAoZGVjbGFyZWRbc2xvdF0/LmNvbGxhcHNpYmxlID8/IHRydWUpLFxuICB9KSk7XG5cbiAgLy8gU29sbyBtb2RlIGhvc3RzIHRoZSBsb25lIHBhbmVsIGluIGEgcGxhaW4gZGl2LCBubyByZXNpemFibGUgR3JvdXAuIEEgaGlkZGVuXG4gIC8vIGxvbmUgcGFuZWwgcmVuZGVycyBub3RoaW5nIChDb250ZW50IGlzIGFsd2F5cyBzaG93bikuXG4gIGNvbnN0IHNvbG9Ib3N0ID1cbiAgICBzb2xvU2xvdCAmJiBpc1Nob3duKHNvbG9TbG90KSA/IChcbiAgICAgIDxTdHlsZWRTb2xvSG9zdCByZWY9e3Nsb3RIb3N0UmVmc1tzb2xvU2xvdF19IC8+XG4gICAgKSA6IG51bGw7XG5cbiAgLy8gVGhlIHJlc2l6YWJsZSBHcm91cC4gYGtleWAgPSB0aGUgcGVyc2lzdGVuY2UgbmFtZXNwYWNlOiByZWFjdC1yZXNpemFibGUtcGFuZWxzXG4gIC8vIHJlYWRzIHN0b3JlZCBzaXplcyBvbmx5IG9uIG1vdW50LCBzbyByZW1vdW50IHdoZW4gdGhlIGtleSBjaGFuZ2VzIHRvIGxvYWRcbiAgLy8gdGhhdCBpbnN0YW5jZSdzIHNpemVzIChwZXItcm91dGUgc2l6ZSBtZW1vcnkpLiBUaGUga2V5IG5ldmVyIGNoYW5nZXMgb25cbiAgLy8gcGFuZWwgb3Blbi9jbG9zZSwgc28gbm9ybWFsIHRvZ2dsaW5nIHN0YXlzIHJlbW91bnQtZnJlZS5cbiAgY29uc3QgcGFuZWxHcm91cCA9XG4gICAgcGFuZWxJdGVtcy5sZW5ndGggPiAwID8gKFxuICAgICAgPFBhbmVsXG4gICAgICAgIGtleT17cmVzb2x2ZWRLZXl9XG4gICAgICAgIHBhbmVscz17cGFuZWxJdGVtc31cbiAgICAgICAgcGVyc2lzdGVuY2VLZXk9e3Jlc29sdmVkS2V5fVxuICAgICAgICBzdG9yYWdlPXtyZXNvbHZlZFN0b3JhZ2V9XG4gICAgICAgIGhvc3RGb3I9eyhpZCkgPT4gc2xvdEhvc3RSZWZzW2lkIGFzIFNsb3RLZXldfVxuICAgICAgICBvblJlc2l6ZT17KGlkLCBzaXplKSA9PiBwYW5lbENhbGxiYWNrc1tpZCBhcyBTbG90S2V5XS5yZXNpemUoc2l6ZSl9XG4gICAgICAgIG9uQ29sbGFwc2U9eyhpZCkgPT4gcGFuZWxDYWxsYmFja3NbaWQgYXMgU2xvdEtleV0uaGlkZSgpfVxuICAgICAgICBwYW5lbEhhbmRsZUZvcj17cGFuZWxSZWZDYWxsYmFja3MuaGFuZGxlRm9yfVxuICAgICAgICBwYW5lbEVsZW1lbnRGb3I9e3BhbmVsUmVmQ2FsbGJhY2tzLmVsZW1lbnRGb3J9XG4gICAgICAgIHNob3VsZFN1cHByZXNzTGF5b3V0Q2FsbGJhY2s9e3Nob3VsZFN1cHByZXNzTGF5b3V0Q2FsbGJhY2t9XG4gICAgICAvPlxuICAgICkgOiBudWxsO1xuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsUmVnaXN0cnlDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtyZWdpc3RyeX0+XG4gICAgICA8UGFuZWxQcmVzZW5jZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3ByZXNlbmNlfT5cbiAgICAgICAgPFBhbmVsQW5pbWF0aW9uQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17YW5pbWF0aW9uQ29udHJvbH0+XG4gICAgICAgICAgPExheW91dFBvcnRhbENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3BvcnRhbFRhcmdldHN9PlxuICAgICAgICAgICAgPFN0eWxlZExheW91dCBkYXRhLWRzLWlkPVwiTGF5b3V0XCI+XG4gICAgICAgICAgICAgIHtpc1NvbG8gPyBzb2xvSG9zdCA6IHBhbmVsR3JvdXB9XG4gICAgICAgICAgICAgIHtpc1JpZ2h0UGFuZWxGbG9hdGluZyAmJiBsYXlvdXRTdGF0ZVtTbG90LnJpZ2h0UGFuZWxdLnZpc2libGUgJiYgKFxuICAgICAgICAgICAgICAgIDxMYXlvdXRGbG9hdCBob3N0UmVmPXtmbG9hdEhvc3RSZWZ9IC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgIDwvU3R5bGVkTGF5b3V0PlxuICAgICAgICAgIDwvTGF5b3V0UG9ydGFsQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICAgPC9QYW5lbEFuaW1hdGlvbkNvbnRleHQuUHJvdmlkZXI+XG4gICAgICA8L1BhbmVsUHJlc2VuY2VDb250ZXh0LlByb3ZpZGVyPlxuICAgIDwvUGFuZWxSZWdpc3RyeUNvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4vKiBQdWJsaWMgTGF5b3V0IC0gdGhlIHJlc2l6YWJsZSBwYW5lbCByb3cgKyBjb21wb3VuZCBwYXJ0cyBhcyBzdGF0aWNzICAgICAgICAgKi9cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbnR5cGUgTGF5b3V0Q29tcG9uZW50ID0gdHlwZW9mIExheW91dEJhc2UgJiB7XG4gIFByb3ZpZGVyOiB0eXBlb2YgTGF5b3V0UHJvdmlkZXI7XG4gIExlZnRQYW5lbDogdHlwZW9mIExlZnRQYW5lbDtcbiAgTGVmdFBhbmVsSGVhZGVyOiB0eXBlb2YgTGVmdFBhbmVsSGVhZGVyO1xuICBMZWZ0UGFuZWxGb290ZXI6IHR5cGVvZiBMZWZ0UGFuZWxGb290ZXI7XG4gIFJpZ2h0UGFuZWw6IHR5cGVvZiBSaWdodFBhbmVsO1xuICBSaWdodFBhbmVsSGVhZGVyOiB0eXBlb2YgUmlnaHRQYW5lbEhlYWRlcjtcbiAgUmlnaHRQYW5lbEZvb3RlcjogdHlwZW9mIFJpZ2h0UGFuZWxGb290ZXI7XG4gIENvbnRlbnQ6IHR5cGVvZiBDb250ZW50O1xuICBTcGxpdDogdHlwZW9mIFNwbGl0O1xuICBTcGxpdEhlYWRlcjogdHlwZW9mIFNwbGl0SGVhZGVyO1xuICBTcGxpdEZvb3RlcjogdHlwZW9mIFNwbGl0Rm9vdGVyO1xufTtcblxuZXhwb3J0IGNvbnN0IExheW91dCA9IExheW91dEJhc2UgYXMgTGF5b3V0Q29tcG9uZW50O1xuXG5MYXlvdXQuUHJvdmlkZXIgPSBMYXlvdXRQcm92aWRlcjtcbkxheW91dC5MZWZ0UGFuZWwgPSBMZWZ0UGFuZWw7XG5MYXlvdXQuTGVmdFBhbmVsSGVhZGVyID0gTGVmdFBhbmVsSGVhZGVyO1xuTGF5b3V0LkxlZnRQYW5lbEZvb3RlciA9IExlZnRQYW5lbEZvb3RlcjtcbkxheW91dC5SaWdodFBhbmVsID0gUmlnaHRQYW5lbDtcbkxheW91dC5SaWdodFBhbmVsSGVhZGVyID0gUmlnaHRQYW5lbEhlYWRlcjtcbkxheW91dC5SaWdodFBhbmVsRm9vdGVyID0gUmlnaHRQYW5lbEZvb3RlcjtcbkxheW91dC5Db250ZW50ID0gQ29udGVudDtcbkxheW91dC5TcGxpdCA9IFNwbGl0O1xuTGF5b3V0LlNwbGl0SGVhZGVyID0gU3BsaXRIZWFkZXI7XG5MYXlvdXQuU3BsaXRGb290ZXIgPSBTcGxpdEZvb3RlcjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE0RnVCIn0= */");export const Layout=function({children,persistenceKey,storage}){let[declared,setDeclared]=useState({}),{state:layoutState,...panelCallbacks}=useLayout(),persistence=useLayoutPersistence(),resolvedKey=persistenceKey??persistence.persistenceKey,resolvedStorage=storage??persistence.storage,{isMobile}=useBreakpoints(),isRightPanelFloating=!0===useLayoutPanelsEnabled()&&!isMobile&&"float"===layoutState[Slot.rightPanel].variant,isShown=slot=>layoutState[slot].visible&&!(slot===Slot.rightPanel&&(isRightPanelFloating||isMobile)),[present,setPresent]=useState({}),presence=useMemo(()=>({setPresent:(slot,isPresent)=>setPresent(prev=>prev[slot]===isPresent?prev:{...prev,[slot]:isPresent})}),[]),panelHandles=useRef({}),panelElements=useRef({}),resizeSuppressed=useRef({}),animationControl=useMemo(()=>({setHandle:(slot,handle)=>{panelHandles.current[slot]=handle},getHandle:slot=>panelHandles.current[slot]??null,setElement:(slot,element)=>{panelElements.current[slot]=element},getElement:slot=>panelElements.current[slot]??null,setResizeSuppressed:(slot,suppressed)=>{resizeSuppressed.current[slot]=suppressed}}),[]),panelRefCallbacks=useMemo(()=>{let handleCallbacks=new Map,elementCallbacks=new Map;return{handleFor:id=>{let callback=handleCallbacks.get(id);return callback||(callback=handle=>animationControl.setHandle(id,handle),handleCallbacks.set(id,callback)),callback},elementFor:id=>{let callback=elementCallbacks.get(id);return callback||(callback=element=>animationControl.setElement(id,element),elementCallbacks.set(id,callback)),callback}}},[animationControl]),shouldSuppressLayoutCallback=useCallback(()=>Object.values(resizeSuppressed.current).some(Boolean),[]),registry=useMemo(()=>({register:(slot,reg)=>setDeclared(prev=>({...prev,[slot]:reg})),unregister:slot=>setDeclared(prev=>{if(!(slot in prev))return prev;let next={...prev};return delete next[slot],next})}),[]),{portalTargets,slotHosts,slotHostRefs,floatHostRef}=useFloatablePortalTargets({slots:PANEL_ORDER,floatableSlot:Slot.rightPanel,isFloating:isRightPanelFloating});useGlobalCssVariables(slotHosts);let declaredSlots=PANEL_ORDER.filter(slot=>declared[slot]),isSolo=declaredSlots.length<=1,soloSlot=declaredSlots[0],defaultSizeFor=slot=>{if(slot!==Slot.content)return declared[slot]?.defaultSize??layoutState[slot].size},panelItems=PANEL_ORDER.filter(slot=>declared[slot]&&(isShown(slot)||present[slot])).map(slot=>({id:slot,defaultSize:defaultSizeFor(slot),minSize:declared[slot]?.minSize??layoutState[slot].minSize,maxSize:declared[slot]?.maxSize??layoutState[slot].maxSize,collapsible:slot!==Slot.content&&(declared[slot]?.collapsible??!0)})),soloHost=soloSlot&&isShown(soloSlot)?React.createElement(StyledSoloHost,{ref:slotHostRefs[soloSlot]}):null,panelGroup=panelItems.length>0?React.createElement(Panel,{key:resolvedKey,panels:panelItems,persistenceKey:resolvedKey,storage:resolvedStorage,hostFor:id=>slotHostRefs[id],onResize:(id,size)=>panelCallbacks[id].resize(size),onCollapse:id=>panelCallbacks[id].hide(),panelHandleFor:panelRefCallbacks.handleFor,panelElementFor:panelRefCallbacks.elementFor,shouldSuppressLayoutCallback:shouldSuppressLayoutCallback}):null;return React.createElement(PanelRegistryContext.Provider,{value:registry},React.createElement(PanelPresenceContext.Provider,{value:presence},React.createElement(PanelAnimationContext.Provider,{value:animationControl},React.createElement(LayoutPortalContext.Provider,{value:portalTargets},React.createElement(StyledLayout,{"data-ds-id":"Layout"},isSolo?soloHost:panelGroup,isRightPanelFloating&&layoutState[Slot.rightPanel].visible&&React.createElement(LayoutFloat,{hostRef:floatHostRef}),children)))))};Layout.Provider=LayoutProvider,Layout.LeftPanel=LeftPanel,Layout.LeftPanelHeader=LeftPanelHeader,Layout.LeftPanelFooter=LeftPanelFooter,Layout.RightPanel=RightPanel,Layout.RightPanelHeader=RightPanelHeader,Layout.RightPanelFooter=RightPanelFooter,Layout.Content=Content,Layout.Split=Split,Layout.SplitHeader=SplitHeader,Layout.SplitFooter=SplitFooter;
|
|
1
|
+
import React,{useCallback,useEffect,useMemo,useRef,useState}from"react";import styled from"@emotion/styled";import{Panel}from"../Internal/Panel/Panel";import{LayoutFloat}from"../Internal/LayoutFloat/LayoutFloat";import{useBreakpoints}from"../../shared/useBreakpoints";import{PANEL_ORDER,PANEL_WIDTH_VAR,Slot}from"./-constants";import{useLayoutPanelsEnabled,useLayoutPersistence}from"./context";import{MobileSplitStackContext}from"./Split/MobileSplitView/useMobileSplitStack";import{useMobileSplitViewEnabled}from"./Split/MobileSplitView/useMobileSplitView";import{LayoutProvider}from"./LayoutProvider";import{Content}from"./Content/Content";import{RightPanel}from"./RightPanel/RightPanel";import{RightPanelHeader}from"./RightPanel/RightPanelHeader";import{RightPanelFooter}from"./RightPanel/RightPanelFooter";import{LeftPanel}from"./LeftPanel/LeftPanel";import{LeftPanelHeader}from"./LeftPanel/LeftPanelHeader";import{LeftPanelFooter}from"./LeftPanel/LeftPanelFooter";import{Split}from"./Split/Split";import{SplitHeader}from"./Split/SplitHeader";import{SplitFooter}from"./Split/SplitFooter";import{LayoutPortalContext,PanelRegistryContext,PanelDeclarationsContext,PanelPresenceContext,PanelAnimationContext}from"./registry";import{useFloatablePortalTargets}from"./useFloatablePortalTargets";import{LayoutFloatDragProvider}from"../Internal/LayoutFloat/LayoutFloatDragProvider";import{useLayoutVar}from"./LayoutCssVars";import{useLayout}from"./useLayout";let useGlobalCssVariables=slotHosts=>{let contentWidthCssVar=useLayoutVar(PANEL_WIDTH_VAR.content),rightPanelWidthCssVar=useLayoutVar(PANEL_WIDTH_VAR.rightPanel);useEffect(()=>{let targets=[[Slot.content,contentWidthCssVar],[Slot.rightPanel,rightPanelWidthCssVar]],observers=[];return targets.forEach(([slot,handle])=>{let node=slotHosts[slot]??null;if(!node)return void handle.set("0px");let publishNodeWidth=()=>handle.set(`${node.getBoundingClientRect().width}px`);if(publishNodeWidth(),"undefined"==typeof ResizeObserver)return;let observer=new ResizeObserver(publishNodeWidth);observer.observe(node),observers.push(observer)}),()=>observers.forEach(observer=>observer.disconnect())},[contentWidthCssVar,rightPanelWidthCssVar,slotHosts])},StyledLayout=styled("div",{target:"e1mskuo90",label:"StyledLayout"})({position:"relative",height:"100%",width:"100%"},"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3JjL2NvbXBvbmVudHMvTGF5b3V0L0xheW91dC50c3giLCJzb3VyY2VzIjpbInNyYy9jb21wb25lbnRzL0xheW91dC9MYXlvdXQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwge1xuICB1c2VDYWxsYmFjayxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBzdHlsZWQgZnJvbSBcIkBlbW90aW9uL3N0eWxlZFwiO1xuaW1wb3J0IHR5cGUgeyBQYW5lbEltcGVyYXRpdmVIYW5kbGUgfSBmcm9tIFwicmVhY3QtcmVzaXphYmxlLXBhbmVsc1wiO1xuaW1wb3J0IHsgUGFuZWwgfSBmcm9tIFwiLi4vSW50ZXJuYWwvUGFuZWwvUGFuZWxcIjtcbmltcG9ydCB0eXBlIHsgUGFuZWxJdGVtIH0gZnJvbSBcIi4uL0ludGVybmFsL1BhbmVsL1BhbmVsXCI7XG5pbXBvcnQgeyBMYXlvdXRGbG9hdCB9IGZyb20gXCIuLi9JbnRlcm5hbC9MYXlvdXRGbG9hdC9MYXlvdXRGbG9hdFwiO1xuaW1wb3J0IHsgdXNlQnJlYWtwb2ludHMgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL3VzZUJyZWFrcG9pbnRzXCI7XG5pbXBvcnQgeyBQQU5FTF9PUkRFUiwgUEFORUxfV0lEVEhfVkFSLCBTbG90IH0gZnJvbSBcIi4vLWNvbnN0YW50c1wiO1xuaW1wb3J0IHsgdXNlTGF5b3V0UGFuZWxzRW5hYmxlZCwgdXNlTGF5b3V0UGVyc2lzdGVuY2UgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQge1xuICBNb2JpbGVTcGxpdFN0YWNrQ29udGV4dCxcbiAgdHlwZSBNb2JpbGVTcGxpdFN0YWNrVmFsdWUsXG59IGZyb20gXCIuL1NwbGl0L01vYmlsZVNwbGl0Vmlldy91c2VNb2JpbGVTcGxpdFN0YWNrXCI7XG5pbXBvcnQgeyB1c2VNb2JpbGVTcGxpdFZpZXdFbmFibGVkIH0gZnJvbSBcIi4vU3BsaXQvTW9iaWxlU3BsaXRWaWV3L3VzZU1vYmlsZVNwbGl0Vmlld1wiO1xuaW1wb3J0IHsgTGF5b3V0UHJvdmlkZXIgfSBmcm9tIFwiLi9MYXlvdXRQcm92aWRlclwiO1xuaW1wb3J0IHsgQ29udGVudCB9IGZyb20gXCIuL0NvbnRlbnQvQ29udGVudFwiO1xuaW1wb3J0IHsgUmlnaHRQYW5lbCB9IGZyb20gXCIuL1JpZ2h0UGFuZWwvUmlnaHRQYW5lbFwiO1xuaW1wb3J0IHsgUmlnaHRQYW5lbEhlYWRlciB9IGZyb20gXCIuL1JpZ2h0UGFuZWwvUmlnaHRQYW5lbEhlYWRlclwiO1xuaW1wb3J0IHsgUmlnaHRQYW5lbEZvb3RlciB9IGZyb20gXCIuL1JpZ2h0UGFuZWwvUmlnaHRQYW5lbEZvb3RlclwiO1xuaW1wb3J0IHsgTGVmdFBhbmVsIH0gZnJvbSBcIi4vTGVmdFBhbmVsL0xlZnRQYW5lbFwiO1xuaW1wb3J0IHsgTGVmdFBhbmVsSGVhZGVyIH0gZnJvbSBcIi4vTGVmdFBhbmVsL0xlZnRQYW5lbEhlYWRlclwiO1xuaW1wb3J0IHsgTGVmdFBhbmVsRm9vdGVyIH0gZnJvbSBcIi4vTGVmdFBhbmVsL0xlZnRQYW5lbEZvb3RlclwiO1xuaW1wb3J0IHsgU3BsaXQgfSBmcm9tIFwiLi9TcGxpdC9TcGxpdFwiO1xuaW1wb3J0IHsgU3BsaXRIZWFkZXIgfSBmcm9tIFwiLi9TcGxpdC9TcGxpdEhlYWRlclwiO1xuaW1wb3J0IHsgU3BsaXRGb290ZXIgfSBmcm9tIFwiLi9TcGxpdC9TcGxpdEZvb3RlclwiO1xuaW1wb3J0IHtcbiAgTGF5b3V0UG9ydGFsQ29udGV4dCxcbiAgUGFuZWxSZWdpc3RyeUNvbnRleHQsXG4gIFBhbmVsRGVjbGFyYXRpb25zQ29udGV4dCxcbiAgUGFuZWxQcmVzZW5jZUNvbnRleHQsXG4gIFBhbmVsQW5pbWF0aW9uQ29udGV4dCxcbiAgdHlwZSBQb3J0YWxUYXJnZXRzLFxuICB0eXBlIFBhbmVsUmVnLFxuICB0eXBlIFBhbmVsUmVnaXN0cnksXG4gIHR5cGUgUGFuZWxQcmVzZW5jZSxcbiAgdHlwZSBQYW5lbEFuaW1hdGlvbkNvbnRyb2wsXG59IGZyb20gXCIuL3JlZ2lzdHJ5XCI7XG5pbXBvcnQgeyB1c2VGbG9hdGFibGVQb3J0YWxUYXJnZXRzIH0gZnJvbSBcIi4vdXNlRmxvYXRhYmxlUG9ydGFsVGFyZ2V0c1wiO1xuaW1wb3J0IHsgTGF5b3V0RmxvYXREcmFnUHJvdmlkZXIgfSBmcm9tIFwiLi4vSW50ZXJuYWwvTGF5b3V0RmxvYXQvTGF5b3V0RmxvYXREcmFnUHJvdmlkZXJcIjtcbmltcG9ydCB7IHVzZUxheW91dFZhciwgdHlwZSBMYXlvdXRWYXJIYW5kbGUgfSBmcm9tIFwiLi9MYXlvdXRDc3NWYXJzXCI7XG5pbXBvcnQgeyB1c2VMYXlvdXQgfSBmcm9tIFwiLi91c2VMYXlvdXRcIjtcbmltcG9ydCB0eXBlIHsgTGF5b3V0UHJvcHMsIFNpemUsIFNsb3RLZXkgfSBmcm9tIFwiLi8tdHlwZXNcIjtcblxuLyoqXG4gKiBQdWJsaXNoZXMgZWFjaCBwYW5lbCdzIGxpdmUgcGl4ZWwgd2lkdGggYXMgYSBsYXlvdXQgQ1NTIHZhciAoZS5nLlxuICogYC0tZHMtbGF5b3V0LXJpZ2h0UGFuZWwtd2lkdGhgKSwgdHJhY2tpbmcgZHJhZy0gYW5kIHdpbmRvdy1yZXNpemVzLiBBIGhpZGRlblxuICogcGFydCAobm8gaG9zdCBub2RlKSByZWFkcyBgMHB4YCwgc28gdGhlIHZhciBpcyBhbHdheXMgZGVmaW5lZC4gT25lXG4gKiBgdXNlTGF5b3V0VmFyYCBwZXIgc2xvdCBpbiBgUEFORUxfV0lEVEhfVkFSYC5cbiAqL1xuY29uc3QgdXNlR2xvYmFsQ3NzVmFyaWFibGVzID0gKHNsb3RIb3N0czogUG9ydGFsVGFyZ2V0cyk6IHZvaWQgPT4ge1xuICBjb25zdCBjb250ZW50V2lkdGhDc3NWYXIgPSB1c2VMYXlvdXRWYXIoUEFORUxfV0lEVEhfVkFSLmNvbnRlbnQpO1xuICBjb25zdCByaWdodFBhbmVsV2lkdGhDc3NWYXIgPSB1c2VMYXlvdXRWYXIoUEFORUxfV0lEVEhfVkFSLnJpZ2h0UGFuZWwpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0czogW1Nsb3RLZXksIExheW91dFZhckhhbmRsZV1bXSA9IFtcbiAgICAgIFtTbG90LmNvbnRlbnQsIGNvbnRlbnRXaWR0aENzc1Zhcl0sXG4gICAgICBbU2xvdC5yaWdodFBhbmVsLCByaWdodFBhbmVsV2lkdGhDc3NWYXJdLFxuICAgIF07XG4gICAgY29uc3Qgb2JzZXJ2ZXJzOiBSZXNpemVPYnNlcnZlcltdID0gW107XG5cbiAgICB0YXJnZXRzLmZvckVhY2goKFtzbG90LCBoYW5kbGVdKSA9PiB7XG4gICAgICBjb25zdCBub2RlID0gc2xvdEhvc3RzW3Nsb3RdID8/IG51bGw7XG4gICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgaGFuZGxlLnNldChcIjBweFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcHVibGlzaE5vZGVXaWR0aCA9ICgpOiB2b2lkID0+XG4gICAgICAgIGhhbmRsZS5zZXQoYCR7bm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aH1weGApO1xuICAgICAgcHVibGlzaE5vZGVXaWR0aCgpO1xuICAgICAgLy8ganNkb20gKGFuZCBvbGQgYnJvd3NlcnMpIGxhY2sgUmVzaXplT2JzZXJ2ZXIg4oCUIHNraXAgbGl2ZSB0cmFja2luZyB0aGVyZS5cbiAgICAgIGlmICh0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcbiAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHB1Ymxpc2hOb2RlV2lkdGgpO1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShub2RlKTtcbiAgICAgIG9ic2VydmVycy5wdXNoKG9ic2VydmVyKTtcbiAgICB9KTtcblxuICAgIHJldHVybiAoKSA9PiBvYnNlcnZlcnMuZm9yRWFjaCgob2JzZXJ2ZXIpID0+IG9ic2VydmVyLmRpc2Nvbm5lY3QoKSk7XG4gIH0sIFtjb250ZW50V2lkdGhDc3NWYXIsIHJpZ2h0UGFuZWxXaWR0aENzc1Zhciwgc2xvdEhvc3RzXSk7XG59O1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLyogTGF5b3V0IC0gcmVnaXN0cnkgKyBob3N0czsgbWFya2VycyBkZWNsYXJlL3BvcnRhbDsgdGhlIHJlc2l6YWJsZSBwYW5lbCByb3cgICAqL1xuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLy8gYHBvc2l0aW9uOiByZWxhdGl2ZWAgYW5jaG9ycyB0aGUgYWJzb2x1dGVseS1wb3NpdGlvbmVkIHNwbGl0IHN0YWNrIGhvc3QgYW5kXG4vLyB0aGUgZmxvYXRpbmcgd2luZG93LiBPdmVyZmxvdyBpcyBsZWZ0IHVudG91Y2hlZCAodmlzaWJsZSkgc28gYSBwYWdlIHJlbHlpbmdcbi8vIG9uIGRvY3VtZW50L2FuY2VzdG9yIHNjcm9sbGluZyBpcyB1bmFmZmVjdGVkIC0gdGhlIG9mZnNjcmVlbiBzcGxpdCBsYXllcnMgYXJlXG4vLyBjbGlwcGVkIGJ5IHRoZWlyIG93biBob3N0IGJlbG93LCBub3QgaGVyZS5cbmNvbnN0IFN0eWxlZExheW91dCA9IHN0eWxlZC5kaXYoe1xuICBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLFxuICBoZWlnaHQ6IFwiMTAwJVwiLFxuICB3aWR0aDogXCIxMDAlXCIsXG59KTtcblxuLy8gU29sby1tb2RlIGhvc3Q6IGEgbG9uZSBwYW5lbCAobm8gcmVzaXphYmxlIHNpYmxpbmcpIGlzIGhvc3RlZCBoZXJlIGluc3RlYWQgb2Zcbi8vIGluc2lkZSByZWFjdC1yZXNpemFibGUtcGFuZWxzLiBNYXRjaGVzIHRoZSBwZXItcGFuZWwgaG9zdCB0aGUgR3JvdXAgcmVuZGVyc1xuLy8gKGByZWxhdGl2ZWAgKyBmdWxsLWJsZWVkKSBzbyBjb250ZW50IHJlZmxvd3Mvc2Nyb2xscyBpZGVudGljYWxseSBlaXRoZXIgd2F5LlxuY29uc3QgU3R5bGVkU29sb0hvc3QgPSBzdHlsZWQuZGl2KHtcbiAgcG9zaXRpb246IFwicmVsYXRpdmVcIixcbiAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgd2lkdGg6IFwiMTAwJVwiLFxufSk7XG5cbi8vIEZ1bGwtYXJlYSBvdmVybGF5IGF0IHRoZSBsYXlvdXQgcm9vdCB0aGF0IGhvc3RzIHRoZSBtb2JpbGUgc3BsaXQgc3RhY2suIFRoZVxuLy8gbGFzdCBjaGlsZCBvZiBgU3R5bGVkTGF5b3V0YCwgc28gaXQgc3RhY2tzIGFib3ZlIHRoZSBwYW5lbCByb3c7IGBjb250ZW50YCBhbmRcbi8vIHRoZSBzcGxpdCB2aWV3cyBwb3J0YWwgdGhlaXIgc2xpZGluZyBsYXllcnMgaW4gaGVyZS4gYHBvaW50ZXItZXZlbnRzOiBub25lYFxuLy8gc28gaXQgbmV2ZXIgYmxvY2tzIHRoZSBsYXlvdXQgYmVuZWF0aCAtIGVhY2ggbGF5ZXIgcmUtZW5hYmxlcyBldmVudHMgd2hlblxuLy8gaXQncyB0aGUgYWN0aXZlIChmcm9udCkgdmlldy4gYG92ZXJmbG93OiBoaWRkZW5gIGNsaXBzIHRoZSBpbmFjdGl2ZSBsYXllcnMnXG4vLyBvZmZzY3JlZW4gcmVzdGluZyBwb3NpdGlvbiAodHJhbnNsYXRlWCBwYXN0IHRoZSBlZGdlKSBzbyB0aGV5IGRvbid0IHdpZGVuXG4vLyB0aGUgcGFnZSAtIHNjb3BlZCBoZXJlLCBub3Qgb24gdGhlIHJvb3QsIHNvIGl0IG5ldmVyIGFmZmVjdHMgcGFnZSBzY3JvbGxpbmcuXG5jb25zdCBTdHlsZWRNb2JpbGVTcGxpdFN0YWNrSG9zdCA9IHN0eWxlZC5kaXYoe1xuICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICBpbnNldDogMCxcbiAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gIHBvaW50ZXJFdmVudHM6IFwibm9uZVwiLFxufSk7XG5cbmZ1bmN0aW9uIExheW91dEJhc2Uoe1xuICBjaGlsZHJlbixcbiAgcGVyc2lzdGVuY2VLZXksXG4gIHN0b3JhZ2UsXG59OiBMYXlvdXRQcm9wcyk6IFJlYWN0LlJlYWN0RWxlbWVudCB7XG4gIGNvbnN0IFtkZWNsYXJlZCwgc2V0RGVjbGFyZWRdID0gdXNlU3RhdGU8UGFydGlhbDxSZWNvcmQ8U2xvdEtleSwgUGFuZWxSZWc+Pj4oXG4gICAge31cbiAgKTtcbiAgY29uc3QgeyBzdGF0ZTogbGF5b3V0U3RhdGUsIC4uLnBhbmVsQ2FsbGJhY2tzIH0gPSB1c2VMYXlvdXQoKTtcbiAgY29uc3QgcGVyc2lzdGVuY2UgPSB1c2VMYXlvdXRQZXJzaXN0ZW5jZSgpO1xuICBjb25zdCByZXNvbHZlZEtleSA9IHBlcnNpc3RlbmNlS2V5ID8/IHBlcnNpc3RlbmNlLnBlcnNpc3RlbmNlS2V5O1xuICBjb25zdCByZXNvbHZlZFN0b3JhZ2UgPSBzdG9yYWdlID8/IHBlcnNpc3RlbmNlLnN0b3JhZ2U7XG5cbiAgLy8gQmVsb3cgdGhlIG1vYmlsZSBicmVha3BvaW50IHRoZSByaWdodFBhbmVsIHJlbmRlcnMgYXMgYSBib3R0b20gc2hlZXQgKGl0c1xuICAvLyBtYXJrZXIgcmVuZGVycyB0aGUgU2hlZXQgaXRzZWxmKSAtIGFuIGF1dG9tYXRpYywgcmVuZGVyLWxldmVsIGFkYXB0YXRpb24uXG4gIC8vIFRoZSBzdG9yZWQgdmFyaWFudCBpcyB1bnRvdWNoZWQsIHNvIHJlc2l6aW5nIGJhY2sgdG8gZGVza3RvcCByZXN0b3JlcyB0aGVcbiAgLy8gZXhhY3QgcHJlc2VudGF0aW9uIChkb2NrZWQgb3IgZmxvYXRpbmcpIHRoZSB1c2VyIGxlZnQuXG4gIGNvbnN0IHsgaXNNb2JpbGUgfSA9IHVzZUJyZWFrcG9pbnRzKCk7XG4gIGNvbnN0IGlzUmlnaHRQYW5lbFNoZWV0ID0gaXNNb2JpbGU7XG5cbiAgLy8gVGhlIG1vYmlsZSBzcGxpdCBzdGFjaydzIHNoYXJlZCBzdGF0ZSwgc2NvcGVkIHRvIHRoaXMgTGF5b3V0OiB0aGUgaG9zdFxuICAvLyBlbGVtZW50IG1hcmtlcnMgcG9ydGFsIGludG8gKG9ubHkgcmVuZGVyZWQgd2hpbGUgdGhlIHN0YWNrIGFwcGxpZXMgdG8gdGhlXG4gIC8vIHZpZXdwb3J0KSBhbmQgaG93IG1hbnkgc3BsaXQgdmlld3MgYXJlIG1vdW50ZWQgKGEgY291bnQgdG9sZXJhdGVzIHRyYW5zaWVudFxuICAvLyBkb3VibGUtbW91bnRzKS4gYGNvbnRlbnRgIHJlYWRzIHByZXNlbmNlIHRvIGRlY2lkZSB3aGV0aGVyIHRvIGpvaW4gdGhlXG4gIC8vIHN0YWNrOyBib3RoIGFyZSBwdWJsaXNoZWQgdG9nZXRoZXIgdmlhIE1vYmlsZVNwbGl0U3RhY2tDb250ZXh0LlxuICBjb25zdCBzaG93TW9iaWxlU3BsaXRTdGFjayA9IHVzZU1vYmlsZVNwbGl0Vmlld0VuYWJsZWQoKTtcbiAgY29uc3QgW21vYmlsZVNwbGl0U3RhY2tIb3N0LCBzZXRNb2JpbGVTcGxpdFN0YWNrSG9zdF0gPVxuICAgIHVzZVN0YXRlPEhUTUxFbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtzcGxpdENvdW50LCBzZXRTcGxpdENvdW50XSA9IHVzZVN0YXRlKDApO1xuICBjb25zdCByZWdpc3RlclNwbGl0ID0gdXNlQ2FsbGJhY2s8XG4gICAgTW9iaWxlU3BsaXRTdGFja1ZhbHVlW1wicmVnaXN0ZXJTcGxpdFwiXVxuICA+KCgpID0+IHtcbiAgICBzZXRTcGxpdENvdW50KChjb3VudCkgPT4gY291bnQgKyAxKTtcbiAgICByZXR1cm4gKCkgPT4gc2V0U3BsaXRDb3VudCgoY291bnQpID0+IGNvdW50IC0gMSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgbW9iaWxlU3BsaXRTdGFjayA9IHVzZU1lbW88TW9iaWxlU3BsaXRTdGFja1ZhbHVlPihcbiAgICAoKSA9PiAoe1xuICAgICAgaG9zdDogbW9iaWxlU3BsaXRTdGFja0hvc3QsXG4gICAgICBpc1NwbGl0UHJlc2VudDogc3BsaXRDb3VudCA+IDAsXG4gICAgICByZWdpc3RlclNwbGl0LFxuICAgIH0pLFxuICAgIFttb2JpbGVTcGxpdFN0YWNrSG9zdCwgc3BsaXRDb3VudCwgcmVnaXN0ZXJTcGxpdF1cbiAgKTtcblxuICAvLyBBIGZsb2F0aW5nIHJpZ2h0UGFuZWwgc3RheXMgdmlzaWJsZSAoaXRzIG1hcmtlciBrZWVwcyByZW5kZXJpbmcgY29udGVudClcbiAgLy8gYnV0IGxlYXZlcyB0aGUgcmVzaXphYmxlIHJvdyAtIGV4YWN0bHkgbGlrZSBhIGhpZGRlbiBwYW5lbCBkb2VzLiBUaGVcbiAgLy8gbW9iaWxlIHNoZWV0IHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGUgZmxvYXQuIEZsb2F0IGlzIGFcbiAgLy8gZGVza3RvcCBwcmVzZW50YXRpb24sIHNvIG9ubHkgbW9kZSBgdHJ1ZWAgZW5hYmxlcyBpdC4gVGhlIHN0b3JlJ3MgdmFyaWFudFxuICAvLyBzdGFydHMgdW5zZXQ7IHRoZSBtYXJrZXIncyBkZWNsYXJlZCBgdmFyaWFudGAgcHJvcCBpcyB0aGUgaW5pdGlhbFxuICAvLyBwcmVzZW50YXRpb24gdW50aWwgdGhlIGZpcnN0IGBzZXRWYXJpYW50YCB3cml0ZXMgdG8gdGhlIHN0b3JlLlxuICBjb25zdCBwYW5lbHNFbmFibGVkID0gdXNlTGF5b3V0UGFuZWxzRW5hYmxlZCgpO1xuICBjb25zdCByaWdodFBhbmVsVmFyaWFudCA9XG4gICAgbGF5b3V0U3RhdGVbU2xvdC5yaWdodFBhbmVsXS52YXJpYW50ID8/XG4gICAgZGVjbGFyZWRbU2xvdC5yaWdodFBhbmVsXT8udmFyaWFudCA/P1xuICAgIFwic2lkZWJhclwiO1xuICBjb25zdCBpc1JpZ2h0UGFuZWxGbG9hdGluZyA9XG4gICAgcGFuZWxzRW5hYmxlZCA9PT0gdHJ1ZSAmJlxuICAgICFpc1JpZ2h0UGFuZWxTaGVldCAmJlxuICAgIHJpZ2h0UGFuZWxWYXJpYW50ID09PSBcImZsb2F0XCI7XG5cbiAgY29uc3QgaXNTaG93biA9IChzbG90OiBTbG90S2V5KTogYm9vbGVhbiA9PlxuICAgIGxheW91dFN0YXRlW3Nsb3RdLnZpc2libGUgJiZcbiAgICAhKHNsb3QgPT09IFNsb3QucmlnaHRQYW5lbCAmJiAoaXNSaWdodFBhbmVsRmxvYXRpbmcgfHwgaXNSaWdodFBhbmVsU2hlZXQpKTtcblxuICAvLyBTbG90cyBrZXB0IG1vdW50ZWQgdGhyb3VnaCB0aGVpciBleGl0IGFuaW1hdGlvbiAocmVwb3J0ZWQgdmlhXG4gIC8vIGB1c2VQYW5lbFByZXNlbmNlYCkuIEEgcHJlc2VudC1idXQtaGlkZGVuIHNsb3Qgc3RheXMgaW4gdGhlIHJvdyBzbyBpdHNcbiAgLy8gY2xvc2UgYW5pbWF0aW9uIGNhbiBwbGF5OyBpdCdzIHJlbW92ZWQgb25jZSBwcmVzZW5jZSBmbGlwcyBmYWxzZS5cbiAgY29uc3QgW3ByZXNlbnQsIHNldFByZXNlbnRdID0gdXNlU3RhdGU8UGFydGlhbDxSZWNvcmQ8U2xvdEtleSwgYm9vbGVhbj4+Pih7fSk7XG4gIGNvbnN0IHByZXNlbmNlID0gdXNlTWVtbzxQYW5lbFByZXNlbmNlPihcbiAgICAoKSA9PiAoe1xuICAgICAgc2V0UHJlc2VudDogKHNsb3QsIGlzUHJlc2VudCkgPT5cbiAgICAgICAgc2V0UHJlc2VudCgocHJldikgPT5cbiAgICAgICAgICBwcmV2W3Nsb3RdID09PSBpc1ByZXNlbnQgPyBwcmV2IDogeyAuLi5wcmV2LCBbc2xvdF06IGlzUHJlc2VudCB9XG4gICAgICAgICksXG4gICAgfSksXG4gICAgW11cbiAgKTtcblxuICAvLyBBbmltYXRpb24gY29udHJvbCBmb3IgdGhlIGRvY2tlZCBzaWRlIHBhbmVscycgb3Blbi9jbG9zZSB3aWR0aCBzbGlkZS4gQWxsXG4gIC8vIHJlZi1iYXNlZCBvbiBwdXJwb3NlOiByZWdpc3RlcmluZyBoYW5kbGVzL2VsZW1lbnRzIGFuZCB0b2dnbGluZyBzdXBwcmVzc2lvblxuICAvLyBoYXBwZW4gZHVyaW5nIGNvbW1pdHMgYW5kIHBlci1mcmFtZSAtIG5vbmUgb2YgaXQgbWF5IHJlLXJlbmRlciB0aGUgTGF5b3V0LlxuICBjb25zdCBwYW5lbEhhbmRsZXMgPSB1c2VSZWY8XG4gICAgUGFydGlhbDxSZWNvcmQ8U2xvdEtleSwgUGFuZWxJbXBlcmF0aXZlSGFuZGxlIHwgbnVsbD4+XG4gID4oe30pO1xuICBjb25zdCBwYW5lbEVsZW1lbnRzID0gdXNlUmVmPFBhcnRpYWw8UmVjb3JkPFNsb3RLZXksIEhUTUxFbGVtZW50IHwgbnVsbD4+PihcbiAgICB7fVxuICApO1xuICBjb25zdCByZXNpemVTdXBwcmVzc2VkID0gdXNlUmVmPFBhcnRpYWw8UmVjb3JkPFNsb3RLZXksIGJvb2xlYW4+Pj4oe30pO1xuICBjb25zdCBhbmltYXRpb25Db250cm9sID0gdXNlTWVtbzxQYW5lbEFuaW1hdGlvbkNvbnRyb2w+KFxuICAgICgpID0+ICh7XG4gICAgICBzZXRIYW5kbGU6IChzbG90LCBoYW5kbGUpID0+IHtcbiAgICAgICAgcGFuZWxIYW5kbGVzLmN1cnJlbnRbc2xvdF0gPSBoYW5kbGU7XG4gICAgICB9LFxuICAgICAgZ2V0SGFuZGxlOiAoc2xvdCkgPT4gcGFuZWxIYW5kbGVzLmN1cnJlbnRbc2xvdF0gPz8gbnVsbCxcbiAgICAgIHNldEVsZW1lbnQ6IChzbG90LCBlbGVtZW50KSA9PiB7XG4gICAgICAgIHBhbmVsRWxlbWVudHMuY3VycmVudFtzbG90XSA9IGVsZW1lbnQ7XG4gICAgICB9LFxuICAgICAgZ2V0RWxlbWVudDogKHNsb3QpID0+IHBhbmVsRWxlbWVudHMuY3VycmVudFtzbG90XSA/PyBudWxsLFxuICAgICAgc2V0UmVzaXplU3VwcHJlc3NlZDogKHNsb3QsIHN1cHByZXNzZWQpID0+IHtcbiAgICAgICAgcmVzaXplU3VwcHJlc3NlZC5jdXJyZW50W3Nsb3RdID0gc3VwcHJlc3NlZDtcbiAgICAgIH0sXG4gICAgfSksXG4gICAgW11cbiAgKTtcbiAgLy8gU3RhYmxlIHBlci1zbG90IHJlZiBjYWxsYmFja3MgLSBhIGZyZXNoIGNhbGxiYWNrIGlkZW50aXR5IHBlciByZW5kZXIgd291bGRcbiAgLy8gbWFrZSBSZWFjdCBkZXRhY2gvcmVhdHRhY2ggdGhlIHJlZnMgb24gZXZlcnkgTGF5b3V0IHJlLXJlbmRlci5cbiAgY29uc3QgcGFuZWxSZWZDYWxsYmFja3MgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVDYWxsYmFja3MgPSBuZXcgTWFwPFxuICAgICAgc3RyaW5nLFxuICAgICAgKGhhbmRsZTogUGFuZWxJbXBlcmF0aXZlSGFuZGxlIHwgbnVsbCkgPT4gdm9pZFxuICAgID4oKTtcbiAgICBjb25zdCBlbGVtZW50Q2FsbGJhY2tzID0gbmV3IE1hcDxcbiAgICAgIHN0cmluZyxcbiAgICAgIChlbGVtZW50OiBIVE1MRGl2RWxlbWVudCB8IG51bGwpID0+IHZvaWRcbiAgICA+KCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhhbmRsZUZvcjogKGlkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgbGV0IGNhbGxiYWNrID0gaGFuZGxlQ2FsbGJhY2tzLmdldChpZCk7XG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICBjYWxsYmFjayA9IChoYW5kbGUpID0+XG4gICAgICAgICAgICBhbmltYXRpb25Db250cm9sLnNldEhhbmRsZShpZCBhcyBTbG90S2V5LCBoYW5kbGUpO1xuICAgICAgICAgIGhhbmRsZUNhbGxiYWNrcy5zZXQoaWQsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FsbGJhY2s7XG4gICAgICB9LFxuICAgICAgZWxlbWVudEZvcjogKGlkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgbGV0IGNhbGxiYWNrID0gZWxlbWVudENhbGxiYWNrcy5nZXQoaWQpO1xuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgY2FsbGJhY2sgPSAoZWxlbWVudCkgPT5cbiAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2wuc2V0RWxlbWVudChpZCBhcyBTbG90S2V5LCBlbGVtZW50KTtcbiAgICAgICAgICBlbGVtZW50Q2FsbGJhY2tzLnNldChpZCwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWxsYmFjaztcbiAgICAgIH0sXG4gICAgfTtcbiAgfSwgW2FuaW1hdGlvbkNvbnRyb2xdKTtcbiAgY29uc3Qgc2hvdWxkU3VwcHJlc3NMYXlvdXRDYWxsYmFjayA9IHVzZUNhbGxiYWNrKFxuICAgICgpID0+IE9iamVjdC52YWx1ZXMocmVzaXplU3VwcHJlc3NlZC5jdXJyZW50KS5zb21lKEJvb2xlYW4pLFxuICAgIFtdXG4gICk7XG5cbiAgY29uc3QgcmVnaXN0cnkgPSB1c2VNZW1vPFBhbmVsUmVnaXN0cnk+KFxuICAgICgpID0+ICh7XG4gICAgICByZWdpc3RlcjogKHNsb3QsIHJlZykgPT5cbiAgICAgICAgc2V0RGVjbGFyZWQoKHByZXYpID0+ICh7IC4uLnByZXYsIFtzbG90XTogcmVnIH0pKSxcbiAgICAgIHVucmVnaXN0ZXI6IChzbG90KSA9PlxuICAgICAgICBzZXREZWNsYXJlZCgocHJldikgPT4ge1xuICAgICAgICAgIGlmICghKHNsb3QgaW4gcHJldikpIHJldHVybiBwcmV2O1xuICAgICAgICAgIGNvbnN0IG5leHQgPSB7IC4uLnByZXYgfTtcbiAgICAgICAgICBkZWxldGUgbmV4dFtzbG90XTtcbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfSksXG4gICAgfSksXG4gICAgW11cbiAgKTtcblxuICBjb25zdCB7IHBvcnRhbFRhcmdldHMsIHNsb3RIb3N0cywgc2xvdEhvc3RSZWZzLCBmbG9hdEhvc3RSZWYgfSA9XG4gICAgdXNlRmxvYXRhYmxlUG9ydGFsVGFyZ2V0cyh7XG4gICAgICBzbG90czogUEFORUxfT1JERVIsXG4gICAgICBmbG9hdGFibGVTbG90OiBTbG90LnJpZ2h0UGFuZWwsXG4gICAgICBpc0Zsb2F0aW5nOiBpc1JpZ2h0UGFuZWxGbG9hdGluZyxcbiAgICB9KTtcblxuICB1c2VHbG9iYWxDc3NWYXJpYWJsZXMoc2xvdEhvc3RzKTtcblxuICAvLyBQYW5lbHMgdGhhdCBleGlzdCBpbiB0aGUgbGF5b3V0LCByZWdhcmRsZXNzIG9mIHZpc2liaWxpdHkuIERyaXZlcyB0aGVcbiAgLy8gc29sby12cy1yZXNpemFibGUgZGVjaXNpb24gYmVsb3cgLSBrZXllZCBvbiBERUNMQVJFRCAobm90IHNob3duKSBzbyB0aGF0XG4gIC8vIHNob3dpbmcvaGlkaW5nIGEgcGFuZWwgbmV2ZXIgZmxpcHMgdGhlIG1vZGUuXG4gIGNvbnN0IGRlY2xhcmVkU2xvdHMgPSBQQU5FTF9PUkRFUi5maWx0ZXIoKHNsb3QpID0+IGRlY2xhcmVkW3Nsb3RdKTtcblxuICAvLyBTb2xvIG1vZGU6IGEgc2luZ2xlIHBhbmVsIGlzIGRlY2xhcmVkIChlLmcuIGp1c3QgYENvbnRlbnRgLCB3aXRoIG5vXG4gIC8vIFJpZ2h0UGFuZWwvTGVmdFBhbmVsL1NwbGl0IGluIHRoZSB0cmVlKSAtIG5vdGhpbmcgdG8gcmVzaXplIGFnYWluc3QsIHNvIGhvc3RcbiAgLy8gaXQgaW4gYSBwbGFpbiBkaXYgYW5kIHNraXAgcmVhY3QtcmVzaXphYmxlLXBhbmVscyBlbnRpcmVseS4gQmVjYXVzZSB0aGVcbiAgLy8gY2hlY2sgaXMgb24gREVDTEFSRUQgcGFuZWxzLCB0b2dnbGluZyBhICpkZWNsYXJlZCogcGFuZWwncyB2aXNpYmlsaXR5IGtlZXBzXG4gIC8vIHRoZSBtb2RlIHN0YWJsZSwgc28gYENvbnRlbnRgIGlzIG5ldmVyIHJlbW91bnRlZCBieSBhIHNob3cvaGlkZS4gVGhlIG1vZGVcbiAgLy8gb25seSBmbGlwcyB3aGVuIGEgcGFuZWwgbWFya2VyIGlzIGFkZGVkIHRvIC8gcmVtb3ZlZCBmcm9tIHRoZSB0cmVlIChhXG4gIC8vIHN0cnVjdHVyYWwgY2hhbmdlKSwgd2hlcmUgYSBvbmUtdGltZSByZW1vdW50IGlzIGFjY2VwdGFibGUuXG4gIGNvbnN0IGlzU29sbyA9IGRlY2xhcmVkU2xvdHMubGVuZ3RoIDw9IDE7XG4gIGNvbnN0IHNvbG9TbG90ID0gZGVjbGFyZWRTbG90c1swXTtcblxuICAvLyBjb250ZW50IGZsZXhlcyAobm8gZml4ZWQgc2l6ZSk7IG90aGVycyB1c2UgdGhlIGRlY2xhcmVkIGRlZmF1bHQsIGZhbGxpbmdcbiAgLy8gYmFjayB0byB0aGUgcGVyc2lzdGVkL2NvbmZpZyBzaXplLlxuICBjb25zdCBkZWZhdWx0U2l6ZUZvciA9IChzbG90OiBTbG90S2V5KTogU2l6ZSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgaWYgKHNsb3QgPT09IFNsb3QuY29udGVudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gZGVjbGFyZWRbc2xvdF0/LmRlZmF1bHRTaXplID8/IGxheW91dFN0YXRlW3Nsb3RdLnNpemU7XG4gIH07XG5cbiAgLy8gT25seSB0aGUgcGFuZWxzIHRoYXQgYXJlIGRlY2xhcmVkIEFORCAoY3VycmVudGx5IHNob3duIE9SIG1pZC1leGl0KS4gQVxuICAvLyBoaWRkZW4tYnV0LXByZXNlbnQgc2xvdCBsaW5nZXJzIHNvIGl0cyBjbG9zZSBhbmltYXRpb24gY2FuIHBsYXk7IG90aGVyd2lzZVxuICAvLyBjbG9zZWQgcGFuZWxzIHJlc2VydmUgbm8gc3BhY2UuXG4gIGNvbnN0IHBhbmVsSXRlbXM6IFBhbmVsSXRlbVtdID0gUEFORUxfT1JERVIuZmlsdGVyKFxuICAgIChzbG90KSA9PiBkZWNsYXJlZFtzbG90XSAmJiAoaXNTaG93bihzbG90KSB8fCBwcmVzZW50W3Nsb3RdKVxuICApLm1hcCgoc2xvdCkgPT4gKHtcbiAgICBpZDogc2xvdCxcbiAgICBkZWZhdWx0U2l6ZTogZGVmYXVsdFNpemVGb3Ioc2xvdCksXG4gICAgbWluU2l6ZTogZGVjbGFyZWRbc2xvdF0/Lm1pblNpemUgPz8gbGF5b3V0U3RhdGVbc2xvdF0ubWluU2l6ZSxcbiAgICBtYXhTaXplOiBkZWNsYXJlZFtzbG90XT8ubWF4U2l6ZSA/PyBsYXlvdXRTdGF0ZVtzbG90XS5tYXhTaXplLFxuICAgIGNvbGxhcHNpYmxlOiBzbG90ICE9PSBTbG90LmNvbnRlbnQgJiYgKGRlY2xhcmVkW3Nsb3RdPy5jb2xsYXBzaWJsZSA/PyB0cnVlKSxcbiAgICByZXNpemFibGU6IGRlY2xhcmVkW3Nsb3RdPy5yZXNpemFibGUsXG4gIH0pKTtcblxuICAvLyBTb2xvIG1vZGUgaG9zdHMgdGhlIGxvbmUgcGFuZWwgaW4gYSBwbGFpbiBkaXYsIG5vIHJlc2l6YWJsZSBHcm91cC4gQSBoaWRkZW5cbiAgLy8gbG9uZSBwYW5lbCByZW5kZXJzIG5vdGhpbmcgKENvbnRlbnQgaXMgYWx3YXlzIHNob3duKS5cbiAgY29uc3Qgc29sb0hvc3QgPVxuICAgIHNvbG9TbG90ICYmIGlzU2hvd24oc29sb1Nsb3QpID8gKFxuICAgICAgPFN0eWxlZFNvbG9Ib3N0IHJlZj17c2xvdEhvc3RSZWZzW3NvbG9TbG90XX0gLz5cbiAgICApIDogbnVsbDtcblxuICAvLyBUaGUgcmVzaXphYmxlIEdyb3VwLiBga2V5YCA9IHRoZSBwZXJzaXN0ZW5jZSBuYW1lc3BhY2U6IHJlYWN0LXJlc2l6YWJsZS1wYW5lbHNcbiAgLy8gcmVhZHMgc3RvcmVkIHNpemVzIG9ubHkgb24gbW91bnQsIHNvIHJlbW91bnQgd2hlbiB0aGUga2V5IGNoYW5nZXMgdG8gbG9hZFxuICAvLyB0aGF0IGluc3RhbmNlJ3Mgc2l6ZXMgKHBlci1yb3V0ZSBzaXplIG1lbW9yeSkuIFRoZSBrZXkgbmV2ZXIgY2hhbmdlcyBvblxuICAvLyBwYW5lbCBvcGVuL2Nsb3NlLCBzbyBub3JtYWwgdG9nZ2xpbmcgc3RheXMgcmVtb3VudC1mcmVlLlxuICBjb25zdCBwYW5lbEdyb3VwID1cbiAgICBwYW5lbEl0ZW1zLmxlbmd0aCA+IDAgPyAoXG4gICAgICA8UGFuZWxcbiAgICAgICAga2V5PXtyZXNvbHZlZEtleX1cbiAgICAgICAgcGFuZWxzPXtwYW5lbEl0ZW1zfVxuICAgICAgICBwZXJzaXN0ZW5jZUtleT17cmVzb2x2ZWRLZXl9XG4gICAgICAgIHN0b3JhZ2U9e3Jlc29sdmVkU3RvcmFnZX1cbiAgICAgICAgaG9zdEZvcj17KGlkKSA9PiBzbG90SG9zdFJlZnNbaWQgYXMgU2xvdEtleV19XG4gICAgICAgIG9uUmVzaXplPXsoaWQsIHNpemUpID0+IHBhbmVsQ2FsbGJhY2tzW2lkIGFzIFNsb3RLZXldLnJlc2l6ZShzaXplKX1cbiAgICAgICAgb25Db2xsYXBzZT17KGlkKSA9PiBwYW5lbENhbGxiYWNrc1tpZCBhcyBTbG90S2V5XS5oaWRlKCl9XG4gICAgICAgIHBhbmVsSGFuZGxlRm9yPXtwYW5lbFJlZkNhbGxiYWNrcy5oYW5kbGVGb3J9XG4gICAgICAgIHBhbmVsRWxlbWVudEZvcj17cGFuZWxSZWZDYWxsYmFja3MuZWxlbWVudEZvcn1cbiAgICAgICAgc2hvdWxkU3VwcHJlc3NMYXlvdXRDYWxsYmFjaz17c2hvdWxkU3VwcHJlc3NMYXlvdXRDYWxsYmFja31cbiAgICAgIC8+XG4gICAgKSA6IG51bGw7XG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxSZWdpc3RyeUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3JlZ2lzdHJ5fT5cbiAgICAgIDxQYW5lbERlY2xhcmF0aW9uc0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2RlY2xhcmVkfT5cbiAgICAgICAgPFBhbmVsUHJlc2VuY2VDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtwcmVzZW5jZX0+XG4gICAgICAgICAgPFBhbmVsQW5pbWF0aW9uQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17YW5pbWF0aW9uQ29udHJvbH0+XG4gICAgICAgICAgICA8TGF5b3V0UG9ydGFsQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17cG9ydGFsVGFyZ2V0c30+XG4gICAgICAgICAgICAgIDxMYXlvdXRGbG9hdERyYWdQcm92aWRlcj5cbiAgICAgICAgICAgICAgICA8TW9iaWxlU3BsaXRTdGFja0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e21vYmlsZVNwbGl0U3RhY2t9PlxuICAgICAgICAgICAgICAgICAgPFN0eWxlZExheW91dCBkYXRhLWRzLWlkPVwiTGF5b3V0XCI+XG4gICAgICAgICAgICAgICAgICAgIHtpc1NvbG8gPyBzb2xvSG9zdCA6IHBhbmVsR3JvdXB9XG4gICAgICAgICAgICAgICAgICAgIHtpc1JpZ2h0UGFuZWxGbG9hdGluZyAmJlxuICAgICAgICAgICAgICAgICAgICAgIGxheW91dFN0YXRlW1Nsb3QucmlnaHRQYW5lbF0udmlzaWJsZSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8TGF5b3V0RmxvYXQgaG9zdFJlZj17ZmxvYXRIb3N0UmVmfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICAgICAge3Nob3dNb2JpbGVTcGxpdFN0YWNrICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8U3R5bGVkTW9iaWxlU3BsaXRTdGFja0hvc3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZj17c2V0TW9iaWxlU3BsaXRTdGFja0hvc3R9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDwvU3R5bGVkTGF5b3V0PlxuICAgICAgICAgICAgICAgIDwvTW9iaWxlU3BsaXRTdGFja0NvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgICAgICAgIDwvTGF5b3V0RmxvYXREcmFnUHJvdmlkZXI+XG4gICAgICAgICAgICA8L0xheW91dFBvcnRhbENvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgICAgPC9QYW5lbEFuaW1hdGlvbkNvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgIDwvUGFuZWxQcmVzZW5jZUNvbnRleHQuUHJvdmlkZXI+XG4gICAgICA8L1BhbmVsRGVjbGFyYXRpb25zQ29udGV4dC5Qcm92aWRlcj5cbiAgICA8L1BhbmVsUmVnaXN0cnlDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLyogUHVibGljIExheW91dCAtIHRoZSByZXNpemFibGUgcGFuZWwgcm93ICsgY29tcG91bmQgcGFydHMgYXMgc3RhdGljcyAgICAgICAgICovXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG50eXBlIExheW91dENvbXBvbmVudCA9IHR5cGVvZiBMYXlvdXRCYXNlICYge1xuICBQcm92aWRlcjogdHlwZW9mIExheW91dFByb3ZpZGVyO1xuICBMZWZ0UGFuZWw6IHR5cGVvZiBMZWZ0UGFuZWw7XG4gIExlZnRQYW5lbEhlYWRlcjogdHlwZW9mIExlZnRQYW5lbEhlYWRlcjtcbiAgTGVmdFBhbmVsRm9vdGVyOiB0eXBlb2YgTGVmdFBhbmVsRm9vdGVyO1xuICBSaWdodFBhbmVsOiB0eXBlb2YgUmlnaHRQYW5lbDtcbiAgUmlnaHRQYW5lbEhlYWRlcjogdHlwZW9mIFJpZ2h0UGFuZWxIZWFkZXI7XG4gIFJpZ2h0UGFuZWxGb290ZXI6IHR5cGVvZiBSaWdodFBhbmVsRm9vdGVyO1xuICBDb250ZW50OiB0eXBlb2YgQ29udGVudDtcbiAgU3BsaXQ6IHR5cGVvZiBTcGxpdDtcbiAgU3BsaXRIZWFkZXI6IHR5cGVvZiBTcGxpdEhlYWRlcjtcbiAgU3BsaXRGb290ZXI6IHR5cGVvZiBTcGxpdEZvb3Rlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBMYXlvdXQgPSBMYXlvdXRCYXNlIGFzIExheW91dENvbXBvbmVudDtcblxuTGF5b3V0LlByb3ZpZGVyID0gTGF5b3V0UHJvdmlkZXI7XG5MYXlvdXQuTGVmdFBhbmVsID0gTGVmdFBhbmVsO1xuTGF5b3V0LkxlZnRQYW5lbEhlYWRlciA9IExlZnRQYW5lbEhlYWRlcjtcbkxheW91dC5MZWZ0UGFuZWxGb290ZXIgPSBMZWZ0UGFuZWxGb290ZXI7XG5MYXlvdXQuUmlnaHRQYW5lbCA9IFJpZ2h0UGFuZWw7XG5MYXlvdXQuUmlnaHRQYW5lbEhlYWRlciA9IFJpZ2h0UGFuZWxIZWFkZXI7XG5MYXlvdXQuUmlnaHRQYW5lbEZvb3RlciA9IFJpZ2h0UGFuZWxGb290ZXI7XG5MYXlvdXQuQ29udGVudCA9IENvbnRlbnQ7XG5MYXlvdXQuU3BsaXQgPSBTcGxpdDtcbkxheW91dC5TcGxpdEhlYWRlciA9IFNwbGl0SGVhZGVyO1xuTGF5b3V0LlNwbGl0Rm9vdGVyID0gU3BsaXRGb290ZXI7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBOEZxQiJ9 */"),StyledSoloHost=styled("div",{target:"e1mskuo91",label:"StyledSoloHost"})({position:"relative",height:"100%",width:"100%"},"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3JjL2NvbXBvbmVudHMvTGF5b3V0L0xheW91dC50c3giLCJzb3VyY2VzIjpbInNyYy9jb21wb25lbnRzL0xheW91dC9MYXlvdXQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwge1xuICB1c2VDYWxsYmFjayxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBzdHlsZWQgZnJvbSBcIkBlbW90aW9uL3N0eWxlZFwiO1xuaW1wb3J0IHR5cGUgeyBQYW5lbEltcGVyYXRpdmVIYW5kbGUgfSBmcm9tIFwicmVhY3QtcmVzaXphYmxlLXBhbmVsc1wiO1xuaW1wb3J0IHsgUGFuZWwgfSBmcm9tIFwiLi4vSW50ZXJuYWwvUGFuZWwvUGFuZWxcIjtcbmltcG9ydCB0eXBlIHsgUGFuZWxJdGVtIH0gZnJvbSBcIi4uL0ludGVybmFsL1BhbmVsL1BhbmVsXCI7XG5pbXBvcnQgeyBMYXlvdXRGbG9hdCB9IGZyb20gXCIuLi9JbnRlcm5hbC9MYXlvdXRGbG9hdC9MYXlvdXRGbG9hdFwiO1xuaW1wb3J0IHsgdXNlQnJlYWtwb2ludHMgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL3VzZUJyZWFrcG9pbnRzXCI7XG5pbXBvcnQgeyBQQU5FTF9PUkRFUiwgUEFORUxfV0lEVEhfVkFSLCBTbG90IH0gZnJvbSBcIi4vLWNvbnN0YW50c1wiO1xuaW1wb3J0IHsgdXNlTGF5b3V0UGFuZWxzRW5hYmxlZCwgdXNlTGF5b3V0UGVyc2lzdGVuY2UgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQge1xuICBNb2JpbGVTcGxpdFN0YWNrQ29udGV4dCxcbiAgdHlwZSBNb2JpbGVTcGxpdFN0YWNrVmFsdWUsXG59IGZyb20gXCIuL1NwbGl0L01vYmlsZVNwbGl0Vmlldy91c2VNb2JpbGVTcGxpdFN0YWNrXCI7XG5pbXBvcnQgeyB1c2VNb2JpbGVTcGxpdFZpZXdFbmFibGVkIH0gZnJvbSBcIi4vU3BsaXQvTW9iaWxlU3BsaXRWaWV3L3VzZU1vYmlsZVNwbGl0Vmlld1wiO1xuaW1wb3J0IHsgTGF5b3V0UHJvdmlkZXIgfSBmcm9tIFwiLi9MYXlvdXRQcm92aWRlclwiO1xuaW1wb3J0IHsgQ29udGVudCB9IGZyb20gXCIuL0NvbnRlbnQvQ29udGVudFwiO1xuaW1wb3J0IHsgUmlnaHRQYW5lbCB9IGZyb20gXCIuL1JpZ2h0UGFuZWwvUmlnaHRQYW5lbFwiO1xuaW1wb3J0IHsgUmlnaHRQYW5lbEhlYWRlciB9IGZyb20gXCIuL1JpZ2h0UGFuZWwvUmlnaHRQYW5lbEhlYWRlclwiO1xuaW1wb3J0IHsgUmlnaHRQYW5lbEZvb3RlciB9IGZyb20gXCIuL1JpZ2h0UGFuZWwvUmlnaHRQYW5lbEZvb3RlclwiO1xuaW1wb3J0IHsgTGVmdFBhbmVsIH0gZnJvbSBcIi4vTGVmdFBhbmVsL0xlZnRQYW5lbFwiO1xuaW1wb3J0IHsgTGVmdFBhbmVsSGVhZGVyIH0gZnJvbSBcIi4vTGVmdFBhbmVsL0xlZnRQYW5lbEhlYWRlclwiO1xuaW1wb3J0IHsgTGVmdFBhbmVsRm9vdGVyIH0gZnJvbSBcIi4vTGVmdFBhbmVsL0xlZnRQYW5lbEZvb3RlclwiO1xuaW1wb3J0IHsgU3BsaXQgfSBmcm9tIFwiLi9TcGxpdC9TcGxpdFwiO1xuaW1wb3J0IHsgU3BsaXRIZWFkZXIgfSBmcm9tIFwiLi9TcGxpdC9TcGxpdEhlYWRlclwiO1xuaW1wb3J0IHsgU3BsaXRGb290ZXIgfSBmcm9tIFwiLi9TcGxpdC9TcGxpdEZvb3RlclwiO1xuaW1wb3J0IHtcbiAgTGF5b3V0UG9ydGFsQ29udGV4dCxcbiAgUGFuZWxSZWdpc3RyeUNvbnRleHQsXG4gIFBhbmVsRGVjbGFyYXRpb25zQ29udGV4dCxcbiAgUGFuZWxQcmVzZW5jZUNvbnRleHQsXG4gIFBhbmVsQW5pbWF0aW9uQ29udGV4dCxcbiAgdHlwZSBQb3J0YWxUYXJnZXRzLFxuICB0eXBlIFBhbmVsUmVnLFxuICB0eXBlIFBhbmVsUmVnaXN0cnksXG4gIHR5cGUgUGFuZWxQcmVzZW5jZSxcbiAgdHlwZSBQYW5lbEFuaW1hdGlvbkNvbnRyb2wsXG59IGZyb20gXCIuL3JlZ2lzdHJ5XCI7XG5pbXBvcnQgeyB1c2VGbG9hdGFibGVQb3J0YWxUYXJnZXRzIH0gZnJvbSBcIi4vdXNlRmxvYXRhYmxlUG9ydGFsVGFyZ2V0c1wiO1xuaW1wb3J0IHsgTGF5b3V0RmxvYXREcmFnUHJvdmlkZXIgfSBmcm9tIFwiLi4vSW50ZXJuYWwvTGF5b3V0RmxvYXQvTGF5b3V0RmxvYXREcmFnUHJvdmlkZXJcIjtcbmltcG9ydCB7IHVzZUxheW91dFZhciwgdHlwZSBMYXlvdXRWYXJIYW5kbGUgfSBmcm9tIFwiLi9MYXlvdXRDc3NWYXJzXCI7XG5pbXBvcnQgeyB1c2VMYXlvdXQgfSBmcm9tIFwiLi91c2VMYXlvdXRcIjtcbmltcG9ydCB0eXBlIHsgTGF5b3V0UHJvcHMsIFNpemUsIFNsb3RLZXkgfSBmcm9tIFwiLi8tdHlwZXNcIjtcblxuLyoqXG4gKiBQdWJsaXNoZXMgZWFjaCBwYW5lbCdzIGxpdmUgcGl4ZWwgd2lkdGggYXMgYSBsYXlvdXQgQ1NTIHZhciAoZS5nLlxuICogYC0tZHMtbGF5b3V0LXJpZ2h0UGFuZWwtd2lkdGhgKSwgdHJhY2tpbmcgZHJhZy0gYW5kIHdpbmRvdy1yZXNpemVzLiBBIGhpZGRlblxuICogcGFydCAobm8gaG9zdCBub2RlKSByZWFkcyBgMHB4YCwgc28gdGhlIHZhciBpcyBhbHdheXMgZGVmaW5lZC4gT25lXG4gKiBgdXNlTGF5b3V0VmFyYCBwZXIgc2xvdCBpbiBgUEFORUxfV0lEVEhfVkFSYC5cbiAqL1xuY29uc3QgdXNlR2xvYmFsQ3NzVmFyaWFibGVzID0gKHNsb3RIb3N0czogUG9ydGFsVGFyZ2V0cyk6IHZvaWQgPT4ge1xuICBjb25zdCBjb250ZW50V2lkdGhDc3NWYXIgPSB1c2VMYXlvdXRWYXIoUEFORUxfV0lEVEhfVkFSLmNvbnRlbnQpO1xuICBjb25zdCByaWdodFBhbmVsV2lkdGhDc3NWYXIgPSB1c2VMYXlvdXRWYXIoUEFORUxfV0lEVEhfVkFSLnJpZ2h0UGFuZWwpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0czogW1Nsb3RLZXksIExheW91dFZhckhhbmRsZV1bXSA9IFtcbiAgICAgIFtTbG90LmNvbnRlbnQsIGNvbnRlbnRXaWR0aENzc1Zhcl0sXG4gICAgICBbU2xvdC5yaWdodFBhbmVsLCByaWdodFBhbmVsV2lkdGhDc3NWYXJdLFxuICAgIF07XG4gICAgY29uc3Qgb2JzZXJ2ZXJzOiBSZXNpemVPYnNlcnZlcltdID0gW107XG5cbiAgICB0YXJnZXRzLmZvckVhY2goKFtzbG90LCBoYW5kbGVdKSA9PiB7XG4gICAgICBjb25zdCBub2RlID0gc2xvdEhvc3RzW3Nsb3RdID8/IG51bGw7XG4gICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgaGFuZGxlLnNldChcIjBweFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcHVibGlzaE5vZGVXaWR0aCA9ICgpOiB2b2lkID0+XG4gICAgICAgIGhhbmRsZS5zZXQoYCR7bm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aH1weGApO1xuICAgICAgcHVibGlzaE5vZGVXaWR0aCgpO1xuICAgICAgLy8ganNkb20gKGFuZCBvbGQgYnJvd3NlcnMpIGxhY2sgUmVzaXplT2JzZXJ2ZXIg4oCUIHNraXAgbGl2ZSB0cmFja2luZyB0aGVyZS5cbiAgICAgIGlmICh0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcbiAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHB1Ymxpc2hOb2RlV2lkdGgpO1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShub2RlKTtcbiAgICAgIG9ic2VydmVycy5wdXNoKG9ic2VydmVyKTtcbiAgICB9KTtcblxuICAgIHJldHVybiAoKSA9PiBvYnNlcnZlcnMuZm9yRWFjaCgob2JzZXJ2ZXIpID0+IG9ic2VydmVyLmRpc2Nvbm5lY3QoKSk7XG4gIH0sIFtjb250ZW50V2lkdGhDc3NWYXIsIHJpZ2h0UGFuZWxXaWR0aENzc1Zhciwgc2xvdEhvc3RzXSk7XG59O1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLyogTGF5b3V0IC0gcmVnaXN0cnkgKyBob3N0czsgbWFya2VycyBkZWNsYXJlL3BvcnRhbDsgdGhlIHJlc2l6YWJsZSBwYW5lbCByb3cgICAqL1xuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLy8gYHBvc2l0aW9uOiByZWxhdGl2ZWAgYW5jaG9ycyB0aGUgYWJzb2x1dGVseS1wb3NpdGlvbmVkIHNwbGl0IHN0YWNrIGhvc3QgYW5kXG4vLyB0aGUgZmxvYXRpbmcgd2luZG93LiBPdmVyZmxvdyBpcyBsZWZ0IHVudG91Y2hlZCAodmlzaWJsZSkgc28gYSBwYWdlIHJlbHlpbmdcbi8vIG9uIGRvY3VtZW50L2FuY2VzdG9yIHNjcm9sbGluZyBpcyB1bmFmZmVjdGVkIC0gdGhlIG9mZnNjcmVlbiBzcGxpdCBsYXllcnMgYXJlXG4vLyBjbGlwcGVkIGJ5IHRoZWlyIG93biBob3N0IGJlbG93LCBub3QgaGVyZS5cbmNvbnN0IFN0eWxlZExheW91dCA9IHN0eWxlZC5kaXYoe1xuICBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLFxuICBoZWlnaHQ6IFwiMTAwJVwiLFxuICB3aWR0aDogXCIxMDAlXCIsXG59KTtcblxuLy8gU29sby1tb2RlIGhvc3Q6IGEgbG9uZSBwYW5lbCAobm8gcmVzaXphYmxlIHNpYmxpbmcpIGlzIGhvc3RlZCBoZXJlIGluc3RlYWQgb2Zcbi8vIGluc2lkZSByZWFjdC1yZXNpemFibGUtcGFuZWxzLiBNYXRjaGVzIHRoZSBwZXItcGFuZWwgaG9zdCB0aGUgR3JvdXAgcmVuZGVyc1xuLy8gKGByZWxhdGl2ZWAgKyBmdWxsLWJsZWVkKSBzbyBjb250ZW50IHJlZmxvd3Mvc2Nyb2xscyBpZGVudGljYWxseSBlaXRoZXIgd2F5LlxuY29uc3QgU3R5bGVkU29sb0hvc3QgPSBzdHlsZWQuZGl2KHtcbiAgcG9zaXRpb246IFwicmVsYXRpdmVcIixcbiAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgd2lkdGg6IFwiMTAwJVwiLFxufSk7XG5cbi8vIEZ1bGwtYXJlYSBvdmVybGF5IGF0IHRoZSBsYXlvdXQgcm9vdCB0aGF0IGhvc3RzIHRoZSBtb2JpbGUgc3BsaXQgc3RhY2suIFRoZVxuLy8gbGFzdCBjaGlsZCBvZiBgU3R5bGVkTGF5b3V0YCwgc28gaXQgc3RhY2tzIGFib3ZlIHRoZSBwYW5lbCByb3c7IGBjb250ZW50YCBhbmRcbi8vIHRoZSBzcGxpdCB2aWV3cyBwb3J0YWwgdGhlaXIgc2xpZGluZyBsYXllcnMgaW4gaGVyZS4gYHBvaW50ZXItZXZlbnRzOiBub25lYFxuLy8gc28gaXQgbmV2ZXIgYmxvY2tzIHRoZSBsYXlvdXQgYmVuZWF0aCAtIGVhY2ggbGF5ZXIgcmUtZW5hYmxlcyBldmVudHMgd2hlblxuLy8gaXQncyB0aGUgYWN0aXZlIChmcm9udCkgdmlldy4gYG92ZXJmbG93OiBoaWRkZW5gIGNsaXBzIHRoZSBpbmFjdGl2ZSBsYXllcnMnXG4vLyBvZmZzY3JlZW4gcmVzdGluZyBwb3NpdGlvbiAodHJhbnNsYXRlWCBwYXN0IHRoZSBlZGdlKSBzbyB0aGV5IGRvbid0IHdpZGVuXG4vLyB0aGUgcGFnZSAtIHNjb3BlZCBoZXJlLCBub3Qgb24gdGhlIHJvb3QsIHNvIGl0IG5ldmVyIGFmZmVjdHMgcGFnZSBzY3JvbGxpbmcuXG5jb25zdCBTdHlsZWRNb2JpbGVTcGxpdFN0YWNrSG9zdCA9IHN0eWxlZC5kaXYoe1xuICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICBpbnNldDogMCxcbiAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gIHBvaW50ZXJFdmVudHM6IFwibm9uZVwiLFxufSk7XG5cbmZ1bmN0aW9uIExheW91dEJhc2Uoe1xuICBjaGlsZHJlbixcbiAgcGVyc2lzdGVuY2VLZXksXG4gIHN0b3JhZ2UsXG59OiBMYXlvdXRQcm9wcyk6IFJlYWN0LlJlYWN0RWxlbWVudCB7XG4gIGNvbnN0IFtkZWNsYXJlZCwgc2V0RGVjbGFyZWRdID0gdXNlU3RhdGU8UGFydGlhbDxSZWNvcmQ8U2xvdEtleSwgUGFuZWxSZWc+Pj4oXG4gICAge31cbiAgKTtcbiAgY29uc3QgeyBzdGF0ZTogbGF5b3V0U3RhdGUsIC4uLnBhbmVsQ2FsbGJhY2tzIH0gPSB1c2VMYXlvdXQoKTtcbiAgY29uc3QgcGVyc2lzdGVuY2UgPSB1c2VMYXlvdXRQZXJzaXN0ZW5jZSgpO1xuICBjb25zdCByZXNvbHZlZEtleSA9IHBlcnNpc3RlbmNlS2V5ID8/IHBlcnNpc3RlbmNlLnBlcnNpc3RlbmNlS2V5O1xuICBjb25zdCByZXNvbHZlZFN0b3JhZ2UgPSBzdG9yYWdlID8/IHBlcnNpc3RlbmNlLnN0b3JhZ2U7XG5cbiAgLy8gQmVsb3cgdGhlIG1vYmlsZSBicmVha3BvaW50IHRoZSByaWdodFBhbmVsIHJlbmRlcnMgYXMgYSBib3R0b20gc2hlZXQgKGl0c1xuICAvLyBtYXJrZXIgcmVuZGVycyB0aGUgU2hlZXQgaXRzZWxmKSAtIGFuIGF1dG9tYXRpYywgcmVuZGVyLWxldmVsIGFkYXB0YXRpb24uXG4gIC8vIFRoZSBzdG9yZWQgdmFyaWFudCBpcyB1bnRvdWNoZWQsIHNvIHJlc2l6aW5nIGJhY2sgdG8gZGVza3RvcCByZXN0b3JlcyB0aGVcbiAgLy8gZXhhY3QgcHJlc2VudGF0aW9uIChkb2NrZWQgb3IgZmxvYXRpbmcpIHRoZSB1c2VyIGxlZnQuXG4gIGNvbnN0IHsgaXNNb2JpbGUgfSA9IHVzZUJyZWFrcG9pbnRzKCk7XG4gIGNvbnN0IGlzUmlnaHRQYW5lbFNoZWV0ID0gaXNNb2JpbGU7XG5cbiAgLy8gVGhlIG1vYmlsZSBzcGxpdCBzdGFjaydzIHNoYXJlZCBzdGF0ZSwgc2NvcGVkIHRvIHRoaXMgTGF5b3V0OiB0aGUgaG9zdFxuICAvLyBlbGVtZW50IG1hcmtlcnMgcG9ydGFsIGludG8gKG9ubHkgcmVuZGVyZWQgd2hpbGUgdGhlIHN0YWNrIGFwcGxpZXMgdG8gdGhlXG4gIC8vIHZpZXdwb3J0KSBhbmQgaG93IG1hbnkgc3BsaXQgdmlld3MgYXJlIG1vdW50ZWQgKGEgY291bnQgdG9sZXJhdGVzIHRyYW5zaWVudFxuICAvLyBkb3VibGUtbW91bnRzKS4gYGNvbnRlbnRgIHJlYWRzIHByZXNlbmNlIHRvIGRlY2lkZSB3aGV0aGVyIHRvIGpvaW4gdGhlXG4gIC8vIHN0YWNrOyBib3RoIGFyZSBwdWJsaXNoZWQgdG9nZXRoZXIgdmlhIE1vYmlsZVNwbGl0U3RhY2tDb250ZXh0LlxuICBjb25zdCBzaG93TW9iaWxlU3BsaXRTdGFjayA9IHVzZU1vYmlsZVNwbGl0Vmlld0VuYWJsZWQoKTtcbiAgY29uc3QgW21vYmlsZVNwbGl0U3RhY2tIb3N0LCBzZXRNb2JpbGVTcGxpdFN0YWNrSG9zdF0gPVxuICAgIHVzZVN0YXRlPEhUTUxFbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtzcGxpdENvdW50LCBzZXRTcGxpdENvdW50XSA9IHVzZVN0YXRlKDApO1xuICBjb25zdCByZWdpc3RlclNwbGl0ID0gdXNlQ2FsbGJhY2s8XG4gICAgTW9iaWxlU3BsaXRTdGFja1ZhbHVlW1wicmVnaXN0ZXJTcGxpdFwiXVxuICA+KCgpID0+IHtcbiAgICBzZXRTcGxpdENvdW50KChjb3VudCkgPT4gY291bnQgKyAxKTtcbiAgICByZXR1cm4gKCkgPT4gc2V0U3BsaXRDb3VudCgoY291bnQpID0+IGNvdW50IC0gMSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgbW9iaWxlU3BsaXRTdGFjayA9IHVzZU1lbW88TW9iaWxlU3BsaXRTdGFja1ZhbHVlPihcbiAgICAoKSA9PiAoe1xuICAgICAgaG9zdDogbW9iaWxlU3BsaXRTdGFja0hvc3QsXG4gICAgICBpc1NwbGl0UHJlc2VudDogc3BsaXRDb3VudCA+IDAsXG4gICAgICByZWdpc3RlclNwbGl0LFxuICAgIH0pLFxuICAgIFttb2JpbGVTcGxpdFN0YWNrSG9zdCwgc3BsaXRDb3VudCwgcmVnaXN0ZXJTcGxpdF1cbiAgKTtcblxuICAvLyBBIGZsb2F0aW5nIHJpZ2h0UGFuZWwgc3RheXMgdmlzaWJsZSAoaXRzIG1hcmtlciBrZWVwcyByZW5kZXJpbmcgY29udGVudClcbiAgLy8gYnV0IGxlYXZlcyB0aGUgcmVzaXphYmxlIHJvdyAtIGV4YWN0bHkgbGlrZSBhIGhpZGRlbiBwYW5lbCBkb2VzLiBUaGVcbiAgLy8gbW9iaWxlIHNoZWV0IHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGUgZmxvYXQuIEZsb2F0IGlzIGFcbiAgLy8gZGVza3RvcCBwcmVzZW50YXRpb24sIHNvIG9ubHkgbW9kZSBgdHJ1ZWAgZW5hYmxlcyBpdC4gVGhlIHN0b3JlJ3MgdmFyaWFudFxuICAvLyBzdGFydHMgdW5zZXQ7IHRoZSBtYXJrZXIncyBkZWNsYXJlZCBgdmFyaWFudGAgcHJvcCBpcyB0aGUgaW5pdGlhbFxuICAvLyBwcmVzZW50YXRpb24gdW50aWwgdGhlIGZpcnN0IGBzZXRWYXJpYW50YCB3cml0ZXMgdG8gdGhlIHN0b3JlLlxuICBjb25zdCBwYW5lbHNFbmFibGVkID0gdXNlTGF5b3V0UGFuZWxzRW5hYmxlZCgpO1xuICBjb25zdCByaWdodFBhbmVsVmFyaWFudCA9XG4gICAgbGF5b3V0U3RhdGVbU2xvdC5yaWdodFBhbmVsXS52YXJpYW50ID8/XG4gICAgZGVjbGFyZWRbU2xvdC5yaWdodFBhbmVsXT8udmFyaWFudCA/P1xuICAgIFwic2lkZWJhclwiO1xuICBjb25zdCBpc1JpZ2h0UGFuZWxGbG9hdGluZyA9XG4gICAgcGFuZWxzRW5hYmxlZCA9PT0gdHJ1ZSAmJlxuICAgICFpc1JpZ2h0UGFuZWxTaGVldCAmJlxuICAgIHJpZ2h0UGFuZWxWYXJpYW50ID09PSBcImZsb2F0XCI7XG5cbiAgY29uc3QgaXNTaG93biA9IChzbG90OiBTbG90S2V5KTogYm9vbGVhbiA9PlxuICAgIGxheW91dFN0YXRlW3Nsb3RdLnZpc2libGUgJiZcbiAgICAhKHNsb3QgPT09IFNsb3QucmlnaHRQYW5lbCAmJiAoaXNSaWdodFBhbmVsRmxvYXRpbmcgfHwgaXNSaWdodFBhbmVsU2hlZXQpKTtcblxuICAvLyBTbG90cyBrZXB0IG1vdW50ZWQgdGhyb3VnaCB0aGVpciBleGl0IGFuaW1hdGlvbiAocmVwb3J0ZWQgdmlhXG4gIC8vIGB1c2VQYW5lbFByZXNlbmNlYCkuIEEgcHJlc2VudC1idXQtaGlkZGVuIHNsb3Qgc3RheXMgaW4gdGhlIHJvdyBzbyBpdHNcbiAgLy8gY2xvc2UgYW5pbWF0aW9uIGNhbiBwbGF5OyBpdCdzIHJlbW92ZWQgb25jZSBwcmVzZW5jZSBmbGlwcyBmYWxzZS5cbiAgY29uc3QgW3ByZXNlbnQsIHNldFByZXNlbnRdID0gdXNlU3RhdGU8UGFydGlhbDxSZWNvcmQ8U2xvdEtleSwgYm9vbGVhbj4+Pih7fSk7XG4gIGNvbnN0IHByZXNlbmNlID0gdXNlTWVtbzxQYW5lbFByZXNlbmNlPihcbiAgICAoKSA9PiAoe1xuICAgICAgc2V0UHJlc2VudDogKHNsb3QsIGlzUHJlc2VudCkgPT5cbiAgICAgICAgc2V0UHJlc2VudCgocHJldikgPT5cbiAgICAgICAgICBwcmV2W3Nsb3RdID09PSBpc1ByZXNlbnQgPyBwcmV2IDogeyAuLi5wcmV2LCBbc2xvdF06IGlzUHJlc2VudCB9XG4gICAgICAgICksXG4gICAgfSksXG4gICAgW11cbiAgKTtcblxuICAvLyBBbmltYXRpb24gY29udHJvbCBmb3IgdGhlIGRvY2tlZCBzaWRlIHBhbmVscycgb3Blbi9jbG9zZSB3aWR0aCBzbGlkZS4gQWxsXG4gIC8vIHJlZi1iYXNlZCBvbiBwdXJwb3NlOiByZWdpc3RlcmluZyBoYW5kbGVzL2VsZW1lbnRzIGFuZCB0b2dnbGluZyBzdXBwcmVzc2lvblxuICAvLyBoYXBwZW4gZHVyaW5nIGNvbW1pdHMgYW5kIHBlci1mcmFtZSAtIG5vbmUgb2YgaXQgbWF5IHJlLXJlbmRlciB0aGUgTGF5b3V0LlxuICBjb25zdCBwYW5lbEhhbmRsZXMgPSB1c2VSZWY8XG4gICAgUGFydGlhbDxSZWNvcmQ8U2xvdEtleSwgUGFuZWxJbXBlcmF0aXZlSGFuZGxlIHwgbnVsbD4+XG4gID4oe30pO1xuICBjb25zdCBwYW5lbEVsZW1lbnRzID0gdXNlUmVmPFBhcnRpYWw8UmVjb3JkPFNsb3RLZXksIEhUTUxFbGVtZW50IHwgbnVsbD4+PihcbiAgICB7fVxuICApO1xuICBjb25zdCByZXNpemVTdXBwcmVzc2VkID0gdXNlUmVmPFBhcnRpYWw8UmVjb3JkPFNsb3RLZXksIGJvb2xlYW4+Pj4oe30pO1xuICBjb25zdCBhbmltYXRpb25Db250cm9sID0gdXNlTWVtbzxQYW5lbEFuaW1hdGlvbkNvbnRyb2w+KFxuICAgICgpID0+ICh7XG4gICAgICBzZXRIYW5kbGU6IChzbG90LCBoYW5kbGUpID0+IHtcbiAgICAgICAgcGFuZWxIYW5kbGVzLmN1cnJlbnRbc2xvdF0gPSBoYW5kbGU7XG4gICAgICB9LFxuICAgICAgZ2V0SGFuZGxlOiAoc2xvdCkgPT4gcGFuZWxIYW5kbGVzLmN1cnJlbnRbc2xvdF0gPz8gbnVsbCxcbiAgICAgIHNldEVsZW1lbnQ6IChzbG90LCBlbGVtZW50KSA9PiB7XG4gICAgICAgIHBhbmVsRWxlbWVudHMuY3VycmVudFtzbG90XSA9IGVsZW1lbnQ7XG4gICAgICB9LFxuICAgICAgZ2V0RWxlbWVudDogKHNsb3QpID0+IHBhbmVsRWxlbWVudHMuY3VycmVudFtzbG90XSA/PyBudWxsLFxuICAgICAgc2V0UmVzaXplU3VwcHJlc3NlZDogKHNsb3QsIHN1cHByZXNzZWQpID0+IHtcbiAgICAgICAgcmVzaXplU3VwcHJlc3NlZC5jdXJyZW50W3Nsb3RdID0gc3VwcHJlc3NlZDtcbiAgICAgIH0sXG4gICAgfSksXG4gICAgW11cbiAgKTtcbiAgLy8gU3RhYmxlIHBlci1zbG90IHJlZiBjYWxsYmFja3MgLSBhIGZyZXNoIGNhbGxiYWNrIGlkZW50aXR5IHBlciByZW5kZXIgd291bGRcbiAgLy8gbWFrZSBSZWFjdCBkZXRhY2gvcmVhdHRhY2ggdGhlIHJlZnMgb24gZXZlcnkgTGF5b3V0IHJlLXJlbmRlci5cbiAgY29uc3QgcGFuZWxSZWZDYWxsYmFja3MgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVDYWxsYmFja3MgPSBuZXcgTWFwPFxuICAgICAgc3RyaW5nLFxuICAgICAgKGhhbmRsZTogUGFuZWxJbXBlcmF0aXZlSGFuZGxlIHwgbnVsbCkgPT4gdm9pZFxuICAgID4oKTtcbiAgICBjb25zdCBlbGVtZW50Q2FsbGJhY2tzID0gbmV3IE1hcDxcbiAgICAgIHN0cmluZyxcbiAgICAgIChlbGVtZW50OiBIVE1MRGl2RWxlbWVudCB8IG51bGwpID0+IHZvaWRcbiAgICA+KCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhhbmRsZUZvcjogKGlkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgbGV0IGNhbGxiYWNrID0gaGFuZGxlQ2FsbGJhY2tzLmdldChpZCk7XG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICBjYWxsYmFjayA9IChoYW5kbGUpID0+XG4gICAgICAgICAgICBhbmltYXRpb25Db250cm9sLnNldEhhbmRsZShpZCBhcyBTbG90S2V5LCBoYW5kbGUpO1xuICAgICAgICAgIGhhbmRsZUNhbGxiYWNrcy5zZXQoaWQsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FsbGJhY2s7XG4gICAgICB9LFxuICAgICAgZWxlbWVudEZvcjogKGlkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgbGV0IGNhbGxiYWNrID0gZWxlbWVudENhbGxiYWNrcy5nZXQoaWQpO1xuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgY2FsbGJhY2sgPSAoZWxlbWVudCkgPT5cbiAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2wuc2V0RWxlbWVudChpZCBhcyBTbG90S2V5LCBlbGVtZW50KTtcbiAgICAgICAgICBlbGVtZW50Q2FsbGJhY2tzLnNldChpZCwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWxsYmFjaztcbiAgICAgIH0sXG4gICAgfTtcbiAgfSwgW2FuaW1hdGlvbkNvbnRyb2xdKTtcbiAgY29uc3Qgc2hvdWxkU3VwcHJlc3NMYXlvdXRDYWxsYmFjayA9IHVzZUNhbGxiYWNrKFxuICAgICgpID0+IE9iamVjdC52YWx1ZXMocmVzaXplU3VwcHJlc3NlZC5jdXJyZW50KS5zb21lKEJvb2xlYW4pLFxuICAgIFtdXG4gICk7XG5cbiAgY29uc3QgcmVnaXN0cnkgPSB1c2VNZW1vPFBhbmVsUmVnaXN0cnk+KFxuICAgICgpID0+ICh7XG4gICAgICByZWdpc3RlcjogKHNsb3QsIHJlZykgPT5cbiAgICAgICAgc2V0RGVjbGFyZWQoKHByZXYpID0+ICh7IC4uLnByZXYsIFtzbG90XTogcmVnIH0pKSxcbiAgICAgIHVucmVnaXN0ZXI6IChzbG90KSA9PlxuICAgICAgICBzZXREZWNsYXJlZCgocHJldikgPT4ge1xuICAgICAgICAgIGlmICghKHNsb3QgaW4gcHJldikpIHJldHVybiBwcmV2O1xuICAgICAgICAgIGNvbnN0IG5leHQgPSB7IC4uLnByZXYgfTtcbiAgICAgICAgICBkZWxldGUgbmV4dFtzbG90XTtcbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfSksXG4gICAgfSksXG4gICAgW11cbiAgKTtcblxuICBjb25zdCB7IHBvcnRhbFRhcmdldHMsIHNsb3RIb3N0cywgc2xvdEhvc3RSZWZzLCBmbG9hdEhvc3RSZWYgfSA9XG4gICAgdXNlRmxvYXRhYmxlUG9ydGFsVGFyZ2V0cyh7XG4gICAgICBzbG90czogUEFORUxfT1JERVIsXG4gICAgICBmbG9hdGFibGVTbG90OiBTbG90LnJpZ2h0UGFuZWwsXG4gICAgICBpc0Zsb2F0aW5nOiBpc1JpZ2h0UGFuZWxGbG9hdGluZyxcbiAgICB9KTtcblxuICB1c2VHbG9iYWxDc3NWYXJpYWJsZXMoc2xvdEhvc3RzKTtcblxuICAvLyBQYW5lbHMgdGhhdCBleGlzdCBpbiB0aGUgbGF5b3V0LCByZWdhcmRsZXNzIG9mIHZpc2liaWxpdHkuIERyaXZlcyB0aGVcbiAgLy8gc29sby12cy1yZXNpemFibGUgZGVjaXNpb24gYmVsb3cgLSBrZXllZCBvbiBERUNMQVJFRCAobm90IHNob3duKSBzbyB0aGF0XG4gIC8vIHNob3dpbmcvaGlkaW5nIGEgcGFuZWwgbmV2ZXIgZmxpcHMgdGhlIG1vZGUuXG4gIGNvbnN0IGRlY2xhcmVkU2xvdHMgPSBQQU5FTF9PUkRFUi5maWx0ZXIoKHNsb3QpID0+IGRlY2xhcmVkW3Nsb3RdKTtcblxuICAvLyBTb2xvIG1vZGU6IGEgc2luZ2xlIHBhbmVsIGlzIGRlY2xhcmVkIChlLmcuIGp1c3QgYENvbnRlbnRgLCB3aXRoIG5vXG4gIC8vIFJpZ2h0UGFuZWwvTGVmdFBhbmVsL1NwbGl0IGluIHRoZSB0cmVlKSAtIG5vdGhpbmcgdG8gcmVzaXplIGFnYWluc3QsIHNvIGhvc3RcbiAgLy8gaXQgaW4gYSBwbGFpbiBkaXYgYW5kIHNraXAgcmVhY3QtcmVzaXphYmxlLXBhbmVscyBlbnRpcmVseS4gQmVjYXVzZSB0aGVcbiAgLy8gY2hlY2sgaXMgb24gREVDTEFSRUQgcGFuZWxzLCB0b2dnbGluZyBhICpkZWNsYXJlZCogcGFuZWwncyB2aXNpYmlsaXR5IGtlZXBzXG4gIC8vIHRoZSBtb2RlIHN0YWJsZSwgc28gYENvbnRlbnRgIGlzIG5ldmVyIHJlbW91bnRlZCBieSBhIHNob3cvaGlkZS4gVGhlIG1vZGVcbiAgLy8gb25seSBmbGlwcyB3aGVuIGEgcGFuZWwgbWFya2VyIGlzIGFkZGVkIHRvIC8gcmVtb3ZlZCBmcm9tIHRoZSB0cmVlIChhXG4gIC8vIHN0cnVjdHVyYWwgY2hhbmdlKSwgd2hlcmUgYSBvbmUtdGltZSByZW1vdW50IGlzIGFjY2VwdGFibGUuXG4gIGNvbnN0IGlzU29sbyA9IGRlY2xhcmVkU2xvdHMubGVuZ3RoIDw9IDE7XG4gIGNvbnN0IHNvbG9TbG90ID0gZGVjbGFyZWRTbG90c1swXTtcblxuICAvLyBjb250ZW50IGZsZXhlcyAobm8gZml4ZWQgc2l6ZSk7IG90aGVycyB1c2UgdGhlIGRlY2xhcmVkIGRlZmF1bHQsIGZhbGxpbmdcbiAgLy8gYmFjayB0byB0aGUgcGVyc2lzdGVkL2NvbmZpZyBzaXplLlxuICBjb25zdCBkZWZhdWx0U2l6ZUZvciA9IChzbG90OiBTbG90S2V5KTogU2l6ZSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgaWYgKHNsb3QgPT09IFNsb3QuY29udGVudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gZGVjbGFyZWRbc2xvdF0/LmRlZmF1bHRTaXplID8/IGxheW91dFN0YXRlW3Nsb3RdLnNpemU7XG4gIH07XG5cbiAgLy8gT25seSB0aGUgcGFuZWxzIHRoYXQgYXJlIGRlY2xhcmVkIEFORCAoY3VycmVudGx5IHNob3duIE9SIG1pZC1leGl0KS4gQVxuICAvLyBoaWRkZW4tYnV0LXByZXNlbnQgc2xvdCBsaW5nZXJzIHNvIGl0cyBjbG9zZSBhbmltYXRpb24gY2FuIHBsYXk7IG90aGVyd2lzZVxuICAvLyBjbG9zZWQgcGFuZWxzIHJlc2VydmUgbm8gc3BhY2UuXG4gIGNvbnN0IHBhbmVsSXRlbXM6IFBhbmVsSXRlbVtdID0gUEFORUxfT1JERVIuZmlsdGVyKFxuICAgIChzbG90KSA9PiBkZWNsYXJlZFtzbG90XSAmJiAoaXNTaG93bihzbG90KSB8fCBwcmVzZW50W3Nsb3RdKVxuICApLm1hcCgoc2xvdCkgPT4gKHtcbiAgICBpZDogc2xvdCxcbiAgICBkZWZhdWx0U2l6ZTogZGVmYXVsdFNpemVGb3Ioc2xvdCksXG4gICAgbWluU2l6ZTogZGVjbGFyZWRbc2xvdF0/Lm1pblNpemUgPz8gbGF5b3V0U3RhdGVbc2xvdF0ubWluU2l6ZSxcbiAgICBtYXhTaXplOiBkZWNsYXJlZFtzbG90XT8ubWF4U2l6ZSA/PyBsYXlvdXRTdGF0ZVtzbG90XS5tYXhTaXplLFxuICAgIGNvbGxhcHNpYmxlOiBzbG90ICE9PSBTbG90LmNvbnRlbnQgJiYgKGRlY2xhcmVkW3Nsb3RdPy5jb2xsYXBzaWJsZSA/PyB0cnVlKSxcbiAgICByZXNpemFibGU6IGRlY2xhcmVkW3Nsb3RdPy5yZXNpemFibGUsXG4gIH0pKTtcblxuICAvLyBTb2xvIG1vZGUgaG9zdHMgdGhlIGxvbmUgcGFuZWwgaW4gYSBwbGFpbiBkaXYsIG5vIHJlc2l6YWJsZSBHcm91cC4gQSBoaWRkZW5cbiAgLy8gbG9uZSBwYW5lbCByZW5kZXJzIG5vdGhpbmcgKENvbnRlbnQgaXMgYWx3YXlzIHNob3duKS5cbiAgY29uc3Qgc29sb0hvc3QgPVxuICAgIHNvbG9TbG90ICYmIGlzU2hvd24oc29sb1Nsb3QpID8gKFxuICAgICAgPFN0eWxlZFNvbG9Ib3N0IHJlZj17c2xvdEhvc3RSZWZzW3NvbG9TbG90XX0gLz5cbiAgICApIDogbnVsbDtcblxuICAvLyBUaGUgcmVzaXphYmxlIEdyb3VwLiBga2V5YCA9IHRoZSBwZXJzaXN0ZW5jZSBuYW1lc3BhY2U6IHJlYWN0LXJlc2l6YWJsZS1wYW5lbHNcbiAgLy8gcmVhZHMgc3RvcmVkIHNpemVzIG9ubHkgb24gbW91bnQsIHNvIHJlbW91bnQgd2hlbiB0aGUga2V5IGNoYW5nZXMgdG8gbG9hZFxuICAvLyB0aGF0IGluc3RhbmNlJ3Mgc2l6ZXMgKHBlci1yb3V0ZSBzaXplIG1lbW9yeSkuIFRoZSBrZXkgbmV2ZXIgY2hhbmdlcyBvblxuICAvLyBwYW5lbCBvcGVuL2Nsb3NlLCBzbyBub3JtYWwgdG9nZ2xpbmcgc3RheXMgcmVtb3VudC1mcmVlLlxuICBjb25zdCBwYW5lbEdyb3VwID1cbiAgICBwYW5lbEl0ZW1zLmxlbmd0aCA+IDAgPyAoXG4gICAgICA8UGFuZWxcbiAgICAgICAga2V5PXtyZXNvbHZlZEtleX1cbiAgICAgICAgcGFuZWxzPXtwYW5lbEl0ZW1zfVxuICAgICAgICBwZXJzaXN0ZW5jZUtleT17cmVzb2x2ZWRLZXl9XG4gICAgICAgIHN0b3JhZ2U9e3Jlc29sdmVkU3RvcmFnZX1cbiAgICAgICAgaG9zdEZvcj17KGlkKSA9PiBzbG90SG9zdFJlZnNbaWQgYXMgU2xvdEtleV19XG4gICAgICAgIG9uUmVzaXplPXsoaWQsIHNpemUpID0+IHBhbmVsQ2FsbGJhY2tzW2lkIGFzIFNsb3RLZXldLnJlc2l6ZShzaXplKX1cbiAgICAgICAgb25Db2xsYXBzZT17KGlkKSA9PiBwYW5lbENhbGxiYWNrc1tpZCBhcyBTbG90S2V5XS5oaWRlKCl9XG4gICAgICAgIHBhbmVsSGFuZGxlRm9yPXtwYW5lbFJlZkNhbGxiYWNrcy5oYW5kbGVGb3J9XG4gICAgICAgIHBhbmVsRWxlbWVudEZvcj17cGFuZWxSZWZDYWxsYmFja3MuZWxlbWVudEZvcn1cbiAgICAgICAgc2hvdWxkU3VwcHJlc3NMYXlvdXRDYWxsYmFjaz17c2hvdWxkU3VwcHJlc3NMYXlvdXRDYWxsYmFja31cbiAgICAgIC8+XG4gICAgKSA6IG51bGw7XG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxSZWdpc3RyeUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3JlZ2lzdHJ5fT5cbiAgICAgIDxQYW5lbERlY2xhcmF0aW9uc0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2RlY2xhcmVkfT5cbiAgICAgICAgPFBhbmVsUHJlc2VuY2VDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtwcmVzZW5jZX0+XG4gICAgICAgICAgPFBhbmVsQW5pbWF0aW9uQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17YW5pbWF0aW9uQ29udHJvbH0+XG4gICAgICAgICAgICA8TGF5b3V0UG9ydGFsQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17cG9ydGFsVGFyZ2V0c30+XG4gICAgICAgICAgICAgIDxMYXlvdXRGbG9hdERyYWdQcm92aWRlcj5cbiAgICAgICAgICAgICAgICA8TW9iaWxlU3BsaXRTdGFja0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e21vYmlsZVNwbGl0U3RhY2t9PlxuICAgICAgICAgICAgICAgICAgPFN0eWxlZExheW91dCBkYXRhLWRzLWlkPVwiTGF5b3V0XCI+XG4gICAgICAgICAgICAgICAgICAgIHtpc1NvbG8gPyBzb2xvSG9zdCA6IHBhbmVsR3JvdXB9XG4gICAgICAgICAgICAgICAgICAgIHtpc1JpZ2h0UGFuZWxGbG9hdGluZyAmJlxuICAgICAgICAgICAgICAgICAgICAgIGxheW91dFN0YXRlW1Nsb3QucmlnaHRQYW5lbF0udmlzaWJsZSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8TGF5b3V0RmxvYXQgaG9zdFJlZj17ZmxvYXRIb3N0UmVmfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICAgICAge3Nob3dNb2JpbGVTcGxpdFN0YWNrICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8U3R5bGVkTW9iaWxlU3BsaXRTdGFja0hvc3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZj17c2V0TW9iaWxlU3BsaXRTdGFja0hvc3R9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDwvU3R5bGVkTGF5b3V0PlxuICAgICAgICAgICAgICAgIDwvTW9iaWxlU3BsaXRTdGFja0NvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgICAgICAgIDwvTGF5b3V0RmxvYXREcmFnUHJvdmlkZXI+XG4gICAgICAgICAgICA8L0xheW91dFBvcnRhbENvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgICAgPC9QYW5lbEFuaW1hdGlvbkNvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgIDwvUGFuZWxQcmVzZW5jZUNvbnRleHQuUHJvdmlkZXI+XG4gICAgICA8L1BhbmVsRGVjbGFyYXRpb25zQ29udGV4dC5Qcm92aWRlcj5cbiAgICA8L1BhbmVsUmVnaXN0cnlDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLyogUHVibGljIExheW91dCAtIHRoZSByZXNpemFibGUgcGFuZWwgcm93ICsgY29tcG91bmQgcGFydHMgYXMgc3RhdGljcyAgICAgICAgICovXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG50eXBlIExheW91dENvbXBvbmVudCA9IHR5cGVvZiBMYXlvdXRCYXNlICYge1xuICBQcm92aWRlcjogdHlwZW9mIExheW91dFByb3ZpZGVyO1xuICBMZWZ0UGFuZWw6IHR5cGVvZiBMZWZ0UGFuZWw7XG4gIExlZnRQYW5lbEhlYWRlcjogdHlwZW9mIExlZnRQYW5lbEhlYWRlcjtcbiAgTGVmdFBhbmVsRm9vdGVyOiB0eXBlb2YgTGVmdFBhbmVsRm9vdGVyO1xuICBSaWdodFBhbmVsOiB0eXBlb2YgUmlnaHRQYW5lbDtcbiAgUmlnaHRQYW5lbEhlYWRlcjogdHlwZW9mIFJpZ2h0UGFuZWxIZWFkZXI7XG4gIFJpZ2h0UGFuZWxGb290ZXI6IHR5cGVvZiBSaWdodFBhbmVsRm9vdGVyO1xuICBDb250ZW50OiB0eXBlb2YgQ29udGVudDtcbiAgU3BsaXQ6IHR5cGVvZiBTcGxpdDtcbiAgU3BsaXRIZWFkZXI6IHR5cGVvZiBTcGxpdEhlYWRlcjtcbiAgU3BsaXRGb290ZXI6IHR5cGVvZiBTcGxpdEZvb3Rlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBMYXlvdXQgPSBMYXlvdXRCYXNlIGFzIExheW91dENvbXBvbmVudDtcblxuTGF5b3V0LlByb3ZpZGVyID0gTGF5b3V0UHJvdmlkZXI7XG5MYXlvdXQuTGVmdFBhbmVsID0gTGVmdFBhbmVsO1xuTGF5b3V0LkxlZnRQYW5lbEhlYWRlciA9IExlZnRQYW5lbEhlYWRlcjtcbkxheW91dC5MZWZ0UGFuZWxGb290ZXIgPSBMZWZ0UGFuZWxGb290ZXI7XG5MYXlvdXQuUmlnaHRQYW5lbCA9IFJpZ2h0UGFuZWw7XG5MYXlvdXQuUmlnaHRQYW5lbEhlYWRlciA9IFJpZ2h0UGFuZWxIZWFkZXI7XG5MYXlvdXQuUmlnaHRQYW5lbEZvb3RlciA9IFJpZ2h0UGFuZWxGb290ZXI7XG5MYXlvdXQuQ29udGVudCA9IENvbnRlbnQ7XG5MYXlvdXQuU3BsaXQgPSBTcGxpdDtcbkxheW91dC5TcGxpdEhlYWRlciA9IFNwbGl0SGVhZGVyO1xuTGF5b3V0LlNwbGl0Rm9vdGVyID0gU3BsaXRGb290ZXI7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBdUd1QiJ9 */"),StyledMobileSplitStackHost=styled("div",{target:"e1mskuo92",label:"StyledMobileSplitStackHost"})({position:"absolute",inset:0,overflow:"hidden",pointerEvents:"none"},"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3JjL2NvbXBvbmVudHMvTGF5b3V0L0xheW91dC50c3giLCJzb3VyY2VzIjpbInNyYy9jb21wb25lbnRzL0xheW91dC9MYXlvdXQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwge1xuICB1c2VDYWxsYmFjayxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBzdHlsZWQgZnJvbSBcIkBlbW90aW9uL3N0eWxlZFwiO1xuaW1wb3J0IHR5cGUgeyBQYW5lbEltcGVyYXRpdmVIYW5kbGUgfSBmcm9tIFwicmVhY3QtcmVzaXphYmxlLXBhbmVsc1wiO1xuaW1wb3J0IHsgUGFuZWwgfSBmcm9tIFwiLi4vSW50ZXJuYWwvUGFuZWwvUGFuZWxcIjtcbmltcG9ydCB0eXBlIHsgUGFuZWxJdGVtIH0gZnJvbSBcIi4uL0ludGVybmFsL1BhbmVsL1BhbmVsXCI7XG5pbXBvcnQgeyBMYXlvdXRGbG9hdCB9IGZyb20gXCIuLi9JbnRlcm5hbC9MYXlvdXRGbG9hdC9MYXlvdXRGbG9hdFwiO1xuaW1wb3J0IHsgdXNlQnJlYWtwb2ludHMgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL3VzZUJyZWFrcG9pbnRzXCI7XG5pbXBvcnQgeyBQQU5FTF9PUkRFUiwgUEFORUxfV0lEVEhfVkFSLCBTbG90IH0gZnJvbSBcIi4vLWNvbnN0YW50c1wiO1xuaW1wb3J0IHsgdXNlTGF5b3V0UGFuZWxzRW5hYmxlZCwgdXNlTGF5b3V0UGVyc2lzdGVuY2UgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQge1xuICBNb2JpbGVTcGxpdFN0YWNrQ29udGV4dCxcbiAgdHlwZSBNb2JpbGVTcGxpdFN0YWNrVmFsdWUsXG59IGZyb20gXCIuL1NwbGl0L01vYmlsZVNwbGl0Vmlldy91c2VNb2JpbGVTcGxpdFN0YWNrXCI7XG5pbXBvcnQgeyB1c2VNb2JpbGVTcGxpdFZpZXdFbmFibGVkIH0gZnJvbSBcIi4vU3BsaXQvTW9iaWxlU3BsaXRWaWV3L3VzZU1vYmlsZVNwbGl0Vmlld1wiO1xuaW1wb3J0IHsgTGF5b3V0UHJvdmlkZXIgfSBmcm9tIFwiLi9MYXlvdXRQcm92aWRlclwiO1xuaW1wb3J0IHsgQ29udGVudCB9IGZyb20gXCIuL0NvbnRlbnQvQ29udGVudFwiO1xuaW1wb3J0IHsgUmlnaHRQYW5lbCB9IGZyb20gXCIuL1JpZ2h0UGFuZWwvUmlnaHRQYW5lbFwiO1xuaW1wb3J0IHsgUmlnaHRQYW5lbEhlYWRlciB9IGZyb20gXCIuL1JpZ2h0UGFuZWwvUmlnaHRQYW5lbEhlYWRlclwiO1xuaW1wb3J0IHsgUmlnaHRQYW5lbEZvb3RlciB9IGZyb20gXCIuL1JpZ2h0UGFuZWwvUmlnaHRQYW5lbEZvb3RlclwiO1xuaW1wb3J0IHsgTGVmdFBhbmVsIH0gZnJvbSBcIi4vTGVmdFBhbmVsL0xlZnRQYW5lbFwiO1xuaW1wb3J0IHsgTGVmdFBhbmVsSGVhZGVyIH0gZnJvbSBcIi4vTGVmdFBhbmVsL0xlZnRQYW5lbEhlYWRlclwiO1xuaW1wb3J0IHsgTGVmdFBhbmVsRm9vdGVyIH0gZnJvbSBcIi4vTGVmdFBhbmVsL0xlZnRQYW5lbEZvb3RlclwiO1xuaW1wb3J0IHsgU3BsaXQgfSBmcm9tIFwiLi9TcGxpdC9TcGxpdFwiO1xuaW1wb3J0IHsgU3BsaXRIZWFkZXIgfSBmcm9tIFwiLi9TcGxpdC9TcGxpdEhlYWRlclwiO1xuaW1wb3J0IHsgU3BsaXRGb290ZXIgfSBmcm9tIFwiLi9TcGxpdC9TcGxpdEZvb3RlclwiO1xuaW1wb3J0IHtcbiAgTGF5b3V0UG9ydGFsQ29udGV4dCxcbiAgUGFuZWxSZWdpc3RyeUNvbnRleHQsXG4gIFBhbmVsRGVjbGFyYXRpb25zQ29udGV4dCxcbiAgUGFuZWxQcmVzZW5jZUNvbnRleHQsXG4gIFBhbmVsQW5pbWF0aW9uQ29udGV4dCxcbiAgdHlwZSBQb3J0YWxUYXJnZXRzLFxuICB0eXBlIFBhbmVsUmVnLFxuICB0eXBlIFBhbmVsUmVnaXN0cnksXG4gIHR5cGUgUGFuZWxQcmVzZW5jZSxcbiAgdHlwZSBQYW5lbEFuaW1hdGlvbkNvbnRyb2wsXG59IGZyb20gXCIuL3JlZ2lzdHJ5XCI7XG5pbXBvcnQgeyB1c2VGbG9hdGFibGVQb3J0YWxUYXJnZXRzIH0gZnJvbSBcIi4vdXNlRmxvYXRhYmxlUG9ydGFsVGFyZ2V0c1wiO1xuaW1wb3J0IHsgTGF5b3V0RmxvYXREcmFnUHJvdmlkZXIgfSBmcm9tIFwiLi4vSW50ZXJuYWwvTGF5b3V0RmxvYXQvTGF5b3V0RmxvYXREcmFnUHJvdmlkZXJcIjtcbmltcG9ydCB7IHVzZUxheW91dFZhciwgdHlwZSBMYXlvdXRWYXJIYW5kbGUgfSBmcm9tIFwiLi9MYXlvdXRDc3NWYXJzXCI7XG5pbXBvcnQgeyB1c2VMYXlvdXQgfSBmcm9tIFwiLi91c2VMYXlvdXRcIjtcbmltcG9ydCB0eXBlIHsgTGF5b3V0UHJvcHMsIFNpemUsIFNsb3RLZXkgfSBmcm9tIFwiLi8tdHlwZXNcIjtcblxuLyoqXG4gKiBQdWJsaXNoZXMgZWFjaCBwYW5lbCdzIGxpdmUgcGl4ZWwgd2lkdGggYXMgYSBsYXlvdXQgQ1NTIHZhciAoZS5nLlxuICogYC0tZHMtbGF5b3V0LXJpZ2h0UGFuZWwtd2lkdGhgKSwgdHJhY2tpbmcgZHJhZy0gYW5kIHdpbmRvdy1yZXNpemVzLiBBIGhpZGRlblxuICogcGFydCAobm8gaG9zdCBub2RlKSByZWFkcyBgMHB4YCwgc28gdGhlIHZhciBpcyBhbHdheXMgZGVmaW5lZC4gT25lXG4gKiBgdXNlTGF5b3V0VmFyYCBwZXIgc2xvdCBpbiBgUEFORUxfV0lEVEhfVkFSYC5cbiAqL1xuY29uc3QgdXNlR2xvYmFsQ3NzVmFyaWFibGVzID0gKHNsb3RIb3N0czogUG9ydGFsVGFyZ2V0cyk6IHZvaWQgPT4ge1xuICBjb25zdCBjb250ZW50V2lkdGhDc3NWYXIgPSB1c2VMYXlvdXRWYXIoUEFORUxfV0lEVEhfVkFSLmNvbnRlbnQpO1xuICBjb25zdCByaWdodFBhbmVsV2lkdGhDc3NWYXIgPSB1c2VMYXlvdXRWYXIoUEFORUxfV0lEVEhfVkFSLnJpZ2h0UGFuZWwpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0czogW1Nsb3RLZXksIExheW91dFZhckhhbmRsZV1bXSA9IFtcbiAgICAgIFtTbG90LmNvbnRlbnQsIGNvbnRlbnRXaWR0aENzc1Zhcl0sXG4gICAgICBbU2xvdC5yaWdodFBhbmVsLCByaWdodFBhbmVsV2lkdGhDc3NWYXJdLFxuICAgIF07XG4gICAgY29uc3Qgb2JzZXJ2ZXJzOiBSZXNpemVPYnNlcnZlcltdID0gW107XG5cbiAgICB0YXJnZXRzLmZvckVhY2goKFtzbG90LCBoYW5kbGVdKSA9PiB7XG4gICAgICBjb25zdCBub2RlID0gc2xvdEhvc3RzW3Nsb3RdID8/IG51bGw7XG4gICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgaGFuZGxlLnNldChcIjBweFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcHVibGlzaE5vZGVXaWR0aCA9ICgpOiB2b2lkID0+XG4gICAgICAgIGhhbmRsZS5zZXQoYCR7bm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aH1weGApO1xuICAgICAgcHVibGlzaE5vZGVXaWR0aCgpO1xuICAgICAgLy8ganNkb20gKGFuZCBvbGQgYnJvd3NlcnMpIGxhY2sgUmVzaXplT2JzZXJ2ZXIg4oCUIHNraXAgbGl2ZSB0cmFja2luZyB0aGVyZS5cbiAgICAgIGlmICh0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcbiAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHB1Ymxpc2hOb2RlV2lkdGgpO1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShub2RlKTtcbiAgICAgIG9ic2VydmVycy5wdXNoKG9ic2VydmVyKTtcbiAgICB9KTtcblxuICAgIHJldHVybiAoKSA9PiBvYnNlcnZlcnMuZm9yRWFjaCgob2JzZXJ2ZXIpID0+IG9ic2VydmVyLmRpc2Nvbm5lY3QoKSk7XG4gIH0sIFtjb250ZW50V2lkdGhDc3NWYXIsIHJpZ2h0UGFuZWxXaWR0aENzc1Zhciwgc2xvdEhvc3RzXSk7XG59O1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLyogTGF5b3V0IC0gcmVnaXN0cnkgKyBob3N0czsgbWFya2VycyBkZWNsYXJlL3BvcnRhbDsgdGhlIHJlc2l6YWJsZSBwYW5lbCByb3cgICAqL1xuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLy8gYHBvc2l0aW9uOiByZWxhdGl2ZWAgYW5jaG9ycyB0aGUgYWJzb2x1dGVseS1wb3NpdGlvbmVkIHNwbGl0IHN0YWNrIGhvc3QgYW5kXG4vLyB0aGUgZmxvYXRpbmcgd2luZG93LiBPdmVyZmxvdyBpcyBsZWZ0IHVudG91Y2hlZCAodmlzaWJsZSkgc28gYSBwYWdlIHJlbHlpbmdcbi8vIG9uIGRvY3VtZW50L2FuY2VzdG9yIHNjcm9sbGluZyBpcyB1bmFmZmVjdGVkIC0gdGhlIG9mZnNjcmVlbiBzcGxpdCBsYXllcnMgYXJlXG4vLyBjbGlwcGVkIGJ5IHRoZWlyIG93biBob3N0IGJlbG93LCBub3QgaGVyZS5cbmNvbnN0IFN0eWxlZExheW91dCA9IHN0eWxlZC5kaXYoe1xuICBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLFxuICBoZWlnaHQ6IFwiMTAwJVwiLFxuICB3aWR0aDogXCIxMDAlXCIsXG59KTtcblxuLy8gU29sby1tb2RlIGhvc3Q6IGEgbG9uZSBwYW5lbCAobm8gcmVzaXphYmxlIHNpYmxpbmcpIGlzIGhvc3RlZCBoZXJlIGluc3RlYWQgb2Zcbi8vIGluc2lkZSByZWFjdC1yZXNpemFibGUtcGFuZWxzLiBNYXRjaGVzIHRoZSBwZXItcGFuZWwgaG9zdCB0aGUgR3JvdXAgcmVuZGVyc1xuLy8gKGByZWxhdGl2ZWAgKyBmdWxsLWJsZWVkKSBzbyBjb250ZW50IHJlZmxvd3Mvc2Nyb2xscyBpZGVudGljYWxseSBlaXRoZXIgd2F5LlxuY29uc3QgU3R5bGVkU29sb0hvc3QgPSBzdHlsZWQuZGl2KHtcbiAgcG9zaXRpb246IFwicmVsYXRpdmVcIixcbiAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgd2lkdGg6IFwiMTAwJVwiLFxufSk7XG5cbi8vIEZ1bGwtYXJlYSBvdmVybGF5IGF0IHRoZSBsYXlvdXQgcm9vdCB0aGF0IGhvc3RzIHRoZSBtb2JpbGUgc3BsaXQgc3RhY2suIFRoZVxuLy8gbGFzdCBjaGlsZCBvZiBgU3R5bGVkTGF5b3V0YCwgc28gaXQgc3RhY2tzIGFib3ZlIHRoZSBwYW5lbCByb3c7IGBjb250ZW50YCBhbmRcbi8vIHRoZSBzcGxpdCB2aWV3cyBwb3J0YWwgdGhlaXIgc2xpZGluZyBsYXllcnMgaW4gaGVyZS4gYHBvaW50ZXItZXZlbnRzOiBub25lYFxuLy8gc28gaXQgbmV2ZXIgYmxvY2tzIHRoZSBsYXlvdXQgYmVuZWF0aCAtIGVhY2ggbGF5ZXIgcmUtZW5hYmxlcyBldmVudHMgd2hlblxuLy8gaXQncyB0aGUgYWN0aXZlIChmcm9udCkgdmlldy4gYG92ZXJmbG93OiBoaWRkZW5gIGNsaXBzIHRoZSBpbmFjdGl2ZSBsYXllcnMnXG4vLyBvZmZzY3JlZW4gcmVzdGluZyBwb3NpdGlvbiAodHJhbnNsYXRlWCBwYXN0IHRoZSBlZGdlKSBzbyB0aGV5IGRvbid0IHdpZGVuXG4vLyB0aGUgcGFnZSAtIHNjb3BlZCBoZXJlLCBub3Qgb24gdGhlIHJvb3QsIHNvIGl0IG5ldmVyIGFmZmVjdHMgcGFnZSBzY3JvbGxpbmcuXG5jb25zdCBTdHlsZWRNb2JpbGVTcGxpdFN0YWNrSG9zdCA9IHN0eWxlZC5kaXYoe1xuICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICBpbnNldDogMCxcbiAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gIHBvaW50ZXJFdmVudHM6IFwibm9uZVwiLFxufSk7XG5cbmZ1bmN0aW9uIExheW91dEJhc2Uoe1xuICBjaGlsZHJlbixcbiAgcGVyc2lzdGVuY2VLZXksXG4gIHN0b3JhZ2UsXG59OiBMYXlvdXRQcm9wcyk6IFJlYWN0LlJlYWN0RWxlbWVudCB7XG4gIGNvbnN0IFtkZWNsYXJlZCwgc2V0RGVjbGFyZWRdID0gdXNlU3RhdGU8UGFydGlhbDxSZWNvcmQ8U2xvdEtleSwgUGFuZWxSZWc+Pj4oXG4gICAge31cbiAgKTtcbiAgY29uc3QgeyBzdGF0ZTogbGF5b3V0U3RhdGUsIC4uLnBhbmVsQ2FsbGJhY2tzIH0gPSB1c2VMYXlvdXQoKTtcbiAgY29uc3QgcGVyc2lzdGVuY2UgPSB1c2VMYXlvdXRQZXJzaXN0ZW5jZSgpO1xuICBjb25zdCByZXNvbHZlZEtleSA9IHBlcnNpc3RlbmNlS2V5ID8/IHBlcnNpc3RlbmNlLnBlcnNpc3RlbmNlS2V5O1xuICBjb25zdCByZXNvbHZlZFN0b3JhZ2UgPSBzdG9yYWdlID8/IHBlcnNpc3RlbmNlLnN0b3JhZ2U7XG5cbiAgLy8gQmVsb3cgdGhlIG1vYmlsZSBicmVha3BvaW50IHRoZSByaWdodFBhbmVsIHJlbmRlcnMgYXMgYSBib3R0b20gc2hlZXQgKGl0c1xuICAvLyBtYXJrZXIgcmVuZGVycyB0aGUgU2hlZXQgaXRzZWxmKSAtIGFuIGF1dG9tYXRpYywgcmVuZGVyLWxldmVsIGFkYXB0YXRpb24uXG4gIC8vIFRoZSBzdG9yZWQgdmFyaWFudCBpcyB1bnRvdWNoZWQsIHNvIHJlc2l6aW5nIGJhY2sgdG8gZGVza3RvcCByZXN0b3JlcyB0aGVcbiAgLy8gZXhhY3QgcHJlc2VudGF0aW9uIChkb2NrZWQgb3IgZmxvYXRpbmcpIHRoZSB1c2VyIGxlZnQuXG4gIGNvbnN0IHsgaXNNb2JpbGUgfSA9IHVzZUJyZWFrcG9pbnRzKCk7XG4gIGNvbnN0IGlzUmlnaHRQYW5lbFNoZWV0ID0gaXNNb2JpbGU7XG5cbiAgLy8gVGhlIG1vYmlsZSBzcGxpdCBzdGFjaydzIHNoYXJlZCBzdGF0ZSwgc2NvcGVkIHRvIHRoaXMgTGF5b3V0OiB0aGUgaG9zdFxuICAvLyBlbGVtZW50IG1hcmtlcnMgcG9ydGFsIGludG8gKG9ubHkgcmVuZGVyZWQgd2hpbGUgdGhlIHN0YWNrIGFwcGxpZXMgdG8gdGhlXG4gIC8vIHZpZXdwb3J0KSBhbmQgaG93IG1hbnkgc3BsaXQgdmlld3MgYXJlIG1vdW50ZWQgKGEgY291bnQgdG9sZXJhdGVzIHRyYW5zaWVudFxuICAvLyBkb3VibGUtbW91bnRzKS4gYGNvbnRlbnRgIHJlYWRzIHByZXNlbmNlIHRvIGRlY2lkZSB3aGV0aGVyIHRvIGpvaW4gdGhlXG4gIC8vIHN0YWNrOyBib3RoIGFyZSBwdWJsaXNoZWQgdG9nZXRoZXIgdmlhIE1vYmlsZVNwbGl0U3RhY2tDb250ZXh0LlxuICBjb25zdCBzaG93TW9iaWxlU3BsaXRTdGFjayA9IHVzZU1vYmlsZVNwbGl0Vmlld0VuYWJsZWQoKTtcbiAgY29uc3QgW21vYmlsZVNwbGl0U3RhY2tIb3N0LCBzZXRNb2JpbGVTcGxpdFN0YWNrSG9zdF0gPVxuICAgIHVzZVN0YXRlPEhUTUxFbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtzcGxpdENvdW50LCBzZXRTcGxpdENvdW50XSA9IHVzZVN0YXRlKDApO1xuICBjb25zdCByZWdpc3RlclNwbGl0ID0gdXNlQ2FsbGJhY2s8XG4gICAgTW9iaWxlU3BsaXRTdGFja1ZhbHVlW1wicmVnaXN0ZXJTcGxpdFwiXVxuICA+KCgpID0+IHtcbiAgICBzZXRTcGxpdENvdW50KChjb3VudCkgPT4gY291bnQgKyAxKTtcbiAgICByZXR1cm4gKCkgPT4gc2V0U3BsaXRDb3VudCgoY291bnQpID0+IGNvdW50IC0gMSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgbW9iaWxlU3BsaXRTdGFjayA9IHVzZU1lbW88TW9iaWxlU3BsaXRTdGFja1ZhbHVlPihcbiAgICAoKSA9PiAoe1xuICAgICAgaG9zdDogbW9iaWxlU3BsaXRTdGFja0hvc3QsXG4gICAgICBpc1NwbGl0UHJlc2VudDogc3BsaXRDb3VudCA+IDAsXG4gICAgICByZWdpc3RlclNwbGl0LFxuICAgIH0pLFxuICAgIFttb2JpbGVTcGxpdFN0YWNrSG9zdCwgc3BsaXRDb3VudCwgcmVnaXN0ZXJTcGxpdF1cbiAgKTtcblxuICAvLyBBIGZsb2F0aW5nIHJpZ2h0UGFuZWwgc3RheXMgdmlzaWJsZSAoaXRzIG1hcmtlciBrZWVwcyByZW5kZXJpbmcgY29udGVudClcbiAgLy8gYnV0IGxlYXZlcyB0aGUgcmVzaXphYmxlIHJvdyAtIGV4YWN0bHkgbGlrZSBhIGhpZGRlbiBwYW5lbCBkb2VzLiBUaGVcbiAgLy8gbW9iaWxlIHNoZWV0IHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGUgZmxvYXQuIEZsb2F0IGlzIGFcbiAgLy8gZGVza3RvcCBwcmVzZW50YXRpb24sIHNvIG9ubHkgbW9kZSBgdHJ1ZWAgZW5hYmxlcyBpdC4gVGhlIHN0b3JlJ3MgdmFyaWFudFxuICAvLyBzdGFydHMgdW5zZXQ7IHRoZSBtYXJrZXIncyBkZWNsYXJlZCBgdmFyaWFudGAgcHJvcCBpcyB0aGUgaW5pdGlhbFxuICAvLyBwcmVzZW50YXRpb24gdW50aWwgdGhlIGZpcnN0IGBzZXRWYXJpYW50YCB3cml0ZXMgdG8gdGhlIHN0b3JlLlxuICBjb25zdCBwYW5lbHNFbmFibGVkID0gdXNlTGF5b3V0UGFuZWxzRW5hYmxlZCgpO1xuICBjb25zdCByaWdodFBhbmVsVmFyaWFudCA9XG4gICAgbGF5b3V0U3RhdGVbU2xvdC5yaWdodFBhbmVsXS52YXJpYW50ID8/XG4gICAgZGVjbGFyZWRbU2xvdC5yaWdodFBhbmVsXT8udmFyaWFudCA/P1xuICAgIFwic2lkZWJhclwiO1xuICBjb25zdCBpc1JpZ2h0UGFuZWxGbG9hdGluZyA9XG4gICAgcGFuZWxzRW5hYmxlZCA9PT0gdHJ1ZSAmJlxuICAgICFpc1JpZ2h0UGFuZWxTaGVldCAmJlxuICAgIHJpZ2h0UGFuZWxWYXJpYW50ID09PSBcImZsb2F0XCI7XG5cbiAgY29uc3QgaXNTaG93biA9IChzbG90OiBTbG90S2V5KTogYm9vbGVhbiA9PlxuICAgIGxheW91dFN0YXRlW3Nsb3RdLnZpc2libGUgJiZcbiAgICAhKHNsb3QgPT09IFNsb3QucmlnaHRQYW5lbCAmJiAoaXNSaWdodFBhbmVsRmxvYXRpbmcgfHwgaXNSaWdodFBhbmVsU2hlZXQpKTtcblxuICAvLyBTbG90cyBrZXB0IG1vdW50ZWQgdGhyb3VnaCB0aGVpciBleGl0IGFuaW1hdGlvbiAocmVwb3J0ZWQgdmlhXG4gIC8vIGB1c2VQYW5lbFByZXNlbmNlYCkuIEEgcHJlc2VudC1idXQtaGlkZGVuIHNsb3Qgc3RheXMgaW4gdGhlIHJvdyBzbyBpdHNcbiAgLy8gY2xvc2UgYW5pbWF0aW9uIGNhbiBwbGF5OyBpdCdzIHJlbW92ZWQgb25jZSBwcmVzZW5jZSBmbGlwcyBmYWxzZS5cbiAgY29uc3QgW3ByZXNlbnQsIHNldFByZXNlbnRdID0gdXNlU3RhdGU8UGFydGlhbDxSZWNvcmQ8U2xvdEtleSwgYm9vbGVhbj4+Pih7fSk7XG4gIGNvbnN0IHByZXNlbmNlID0gdXNlTWVtbzxQYW5lbFByZXNlbmNlPihcbiAgICAoKSA9PiAoe1xuICAgICAgc2V0UHJlc2VudDogKHNsb3QsIGlzUHJlc2VudCkgPT5cbiAgICAgICAgc2V0UHJlc2VudCgocHJldikgPT5cbiAgICAgICAgICBwcmV2W3Nsb3RdID09PSBpc1ByZXNlbnQgPyBwcmV2IDogeyAuLi5wcmV2LCBbc2xvdF06IGlzUHJlc2VudCB9XG4gICAgICAgICksXG4gICAgfSksXG4gICAgW11cbiAgKTtcblxuICAvLyBBbmltYXRpb24gY29udHJvbCBmb3IgdGhlIGRvY2tlZCBzaWRlIHBhbmVscycgb3Blbi9jbG9zZSB3aWR0aCBzbGlkZS4gQWxsXG4gIC8vIHJlZi1iYXNlZCBvbiBwdXJwb3NlOiByZWdpc3RlcmluZyBoYW5kbGVzL2VsZW1lbnRzIGFuZCB0b2dnbGluZyBzdXBwcmVzc2lvblxuICAvLyBoYXBwZW4gZHVyaW5nIGNvbW1pdHMgYW5kIHBlci1mcmFtZSAtIG5vbmUgb2YgaXQgbWF5IHJlLXJlbmRlciB0aGUgTGF5b3V0LlxuICBjb25zdCBwYW5lbEhhbmRsZXMgPSB1c2VSZWY8XG4gICAgUGFydGlhbDxSZWNvcmQ8U2xvdEtleSwgUGFuZWxJbXBlcmF0aXZlSGFuZGxlIHwgbnVsbD4+XG4gID4oe30pO1xuICBjb25zdCBwYW5lbEVsZW1lbnRzID0gdXNlUmVmPFBhcnRpYWw8UmVjb3JkPFNsb3RLZXksIEhUTUxFbGVtZW50IHwgbnVsbD4+PihcbiAgICB7fVxuICApO1xuICBjb25zdCByZXNpemVTdXBwcmVzc2VkID0gdXNlUmVmPFBhcnRpYWw8UmVjb3JkPFNsb3RLZXksIGJvb2xlYW4+Pj4oe30pO1xuICBjb25zdCBhbmltYXRpb25Db250cm9sID0gdXNlTWVtbzxQYW5lbEFuaW1hdGlvbkNvbnRyb2w+KFxuICAgICgpID0+ICh7XG4gICAgICBzZXRIYW5kbGU6IChzbG90LCBoYW5kbGUpID0+IHtcbiAgICAgICAgcGFuZWxIYW5kbGVzLmN1cnJlbnRbc2xvdF0gPSBoYW5kbGU7XG4gICAgICB9LFxuICAgICAgZ2V0SGFuZGxlOiAoc2xvdCkgPT4gcGFuZWxIYW5kbGVzLmN1cnJlbnRbc2xvdF0gPz8gbnVsbCxcbiAgICAgIHNldEVsZW1lbnQ6IChzbG90LCBlbGVtZW50KSA9PiB7XG4gICAgICAgIHBhbmVsRWxlbWVudHMuY3VycmVudFtzbG90XSA9IGVsZW1lbnQ7XG4gICAgICB9LFxuICAgICAgZ2V0RWxlbWVudDogKHNsb3QpID0+IHBhbmVsRWxlbWVudHMuY3VycmVudFtzbG90XSA/PyBudWxsLFxuICAgICAgc2V0UmVzaXplU3VwcHJlc3NlZDogKHNsb3QsIHN1cHByZXNzZWQpID0+IHtcbiAgICAgICAgcmVzaXplU3VwcHJlc3NlZC5jdXJyZW50W3Nsb3RdID0gc3VwcHJlc3NlZDtcbiAgICAgIH0sXG4gICAgfSksXG4gICAgW11cbiAgKTtcbiAgLy8gU3RhYmxlIHBlci1zbG90IHJlZiBjYWxsYmFja3MgLSBhIGZyZXNoIGNhbGxiYWNrIGlkZW50aXR5IHBlciByZW5kZXIgd291bGRcbiAgLy8gbWFrZSBSZWFjdCBkZXRhY2gvcmVhdHRhY2ggdGhlIHJlZnMgb24gZXZlcnkgTGF5b3V0IHJlLXJlbmRlci5cbiAgY29uc3QgcGFuZWxSZWZDYWxsYmFja3MgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVDYWxsYmFja3MgPSBuZXcgTWFwPFxuICAgICAgc3RyaW5nLFxuICAgICAgKGhhbmRsZTogUGFuZWxJbXBlcmF0aXZlSGFuZGxlIHwgbnVsbCkgPT4gdm9pZFxuICAgID4oKTtcbiAgICBjb25zdCBlbGVtZW50Q2FsbGJhY2tzID0gbmV3IE1hcDxcbiAgICAgIHN0cmluZyxcbiAgICAgIChlbGVtZW50OiBIVE1MRGl2RWxlbWVudCB8IG51bGwpID0+IHZvaWRcbiAgICA+KCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhhbmRsZUZvcjogKGlkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgbGV0IGNhbGxiYWNrID0gaGFuZGxlQ2FsbGJhY2tzLmdldChpZCk7XG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICBjYWxsYmFjayA9IChoYW5kbGUpID0+XG4gICAgICAgICAgICBhbmltYXRpb25Db250cm9sLnNldEhhbmRsZShpZCBhcyBTbG90S2V5LCBoYW5kbGUpO1xuICAgICAgICAgIGhhbmRsZUNhbGxiYWNrcy5zZXQoaWQsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FsbGJhY2s7XG4gICAgICB9LFxuICAgICAgZWxlbWVudEZvcjogKGlkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgbGV0IGNhbGxiYWNrID0gZWxlbWVudENhbGxiYWNrcy5nZXQoaWQpO1xuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgY2FsbGJhY2sgPSAoZWxlbWVudCkgPT5cbiAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2wuc2V0RWxlbWVudChpZCBhcyBTbG90S2V5LCBlbGVtZW50KTtcbiAgICAgICAgICBlbGVtZW50Q2FsbGJhY2tzLnNldChpZCwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWxsYmFjaztcbiAgICAgIH0sXG4gICAgfTtcbiAgfSwgW2FuaW1hdGlvbkNvbnRyb2xdKTtcbiAgY29uc3Qgc2hvdWxkU3VwcHJlc3NMYXlvdXRDYWxsYmFjayA9IHVzZUNhbGxiYWNrKFxuICAgICgpID0+IE9iamVjdC52YWx1ZXMocmVzaXplU3VwcHJlc3NlZC5jdXJyZW50KS5zb21lKEJvb2xlYW4pLFxuICAgIFtdXG4gICk7XG5cbiAgY29uc3QgcmVnaXN0cnkgPSB1c2VNZW1vPFBhbmVsUmVnaXN0cnk+KFxuICAgICgpID0+ICh7XG4gICAgICByZWdpc3RlcjogKHNsb3QsIHJlZykgPT5cbiAgICAgICAgc2V0RGVjbGFyZWQoKHByZXYpID0+ICh7IC4uLnByZXYsIFtzbG90XTogcmVnIH0pKSxcbiAgICAgIHVucmVnaXN0ZXI6IChzbG90KSA9PlxuICAgICAgICBzZXREZWNsYXJlZCgocHJldikgPT4ge1xuICAgICAgICAgIGlmICghKHNsb3QgaW4gcHJldikpIHJldHVybiBwcmV2O1xuICAgICAgICAgIGNvbnN0IG5leHQgPSB7IC4uLnByZXYgfTtcbiAgICAgICAgICBkZWxldGUgbmV4dFtzbG90XTtcbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfSksXG4gICAgfSksXG4gICAgW11cbiAgKTtcblxuICBjb25zdCB7IHBvcnRhbFRhcmdldHMsIHNsb3RIb3N0cywgc2xvdEhvc3RSZWZzLCBmbG9hdEhvc3RSZWYgfSA9XG4gICAgdXNlRmxvYXRhYmxlUG9ydGFsVGFyZ2V0cyh7XG4gICAgICBzbG90czogUEFORUxfT1JERVIsXG4gICAgICBmbG9hdGFibGVTbG90OiBTbG90LnJpZ2h0UGFuZWwsXG4gICAgICBpc0Zsb2F0aW5nOiBpc1JpZ2h0UGFuZWxGbG9hdGluZyxcbiAgICB9KTtcblxuICB1c2VHbG9iYWxDc3NWYXJpYWJsZXMoc2xvdEhvc3RzKTtcblxuICAvLyBQYW5lbHMgdGhhdCBleGlzdCBpbiB0aGUgbGF5b3V0LCByZWdhcmRsZXNzIG9mIHZpc2liaWxpdHkuIERyaXZlcyB0aGVcbiAgLy8gc29sby12cy1yZXNpemFibGUgZGVjaXNpb24gYmVsb3cgLSBrZXllZCBvbiBERUNMQVJFRCAobm90IHNob3duKSBzbyB0aGF0XG4gIC8vIHNob3dpbmcvaGlkaW5nIGEgcGFuZWwgbmV2ZXIgZmxpcHMgdGhlIG1vZGUuXG4gIGNvbnN0IGRlY2xhcmVkU2xvdHMgPSBQQU5FTF9PUkRFUi5maWx0ZXIoKHNsb3QpID0+IGRlY2xhcmVkW3Nsb3RdKTtcblxuICAvLyBTb2xvIG1vZGU6IGEgc2luZ2xlIHBhbmVsIGlzIGRlY2xhcmVkIChlLmcuIGp1c3QgYENvbnRlbnRgLCB3aXRoIG5vXG4gIC8vIFJpZ2h0UGFuZWwvTGVmdFBhbmVsL1NwbGl0IGluIHRoZSB0cmVlKSAtIG5vdGhpbmcgdG8gcmVzaXplIGFnYWluc3QsIHNvIGhvc3RcbiAgLy8gaXQgaW4gYSBwbGFpbiBkaXYgYW5kIHNraXAgcmVhY3QtcmVzaXphYmxlLXBhbmVscyBlbnRpcmVseS4gQmVjYXVzZSB0aGVcbiAgLy8gY2hlY2sgaXMgb24gREVDTEFSRUQgcGFuZWxzLCB0b2dnbGluZyBhICpkZWNsYXJlZCogcGFuZWwncyB2aXNpYmlsaXR5IGtlZXBzXG4gIC8vIHRoZSBtb2RlIHN0YWJsZSwgc28gYENvbnRlbnRgIGlzIG5ldmVyIHJlbW91bnRlZCBieSBhIHNob3cvaGlkZS4gVGhlIG1vZGVcbiAgLy8gb25seSBmbGlwcyB3aGVuIGEgcGFuZWwgbWFya2VyIGlzIGFkZGVkIHRvIC8gcmVtb3ZlZCBmcm9tIHRoZSB0cmVlIChhXG4gIC8vIHN0cnVjdHVyYWwgY2hhbmdlKSwgd2hlcmUgYSBvbmUtdGltZSByZW1vdW50IGlzIGFjY2VwdGFibGUuXG4gIGNvbnN0IGlzU29sbyA9IGRlY2xhcmVkU2xvdHMubGVuZ3RoIDw9IDE7XG4gIGNvbnN0IHNvbG9TbG90ID0gZGVjbGFyZWRTbG90c1swXTtcblxuICAvLyBjb250ZW50IGZsZXhlcyAobm8gZml4ZWQgc2l6ZSk7IG90aGVycyB1c2UgdGhlIGRlY2xhcmVkIGRlZmF1bHQsIGZhbGxpbmdcbiAgLy8gYmFjayB0byB0aGUgcGVyc2lzdGVkL2NvbmZpZyBzaXplLlxuICBjb25zdCBkZWZhdWx0U2l6ZUZvciA9IChzbG90OiBTbG90S2V5KTogU2l6ZSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgaWYgKHNsb3QgPT09IFNsb3QuY29udGVudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gZGVjbGFyZWRbc2xvdF0/LmRlZmF1bHRTaXplID8/IGxheW91dFN0YXRlW3Nsb3RdLnNpemU7XG4gIH07XG5cbiAgLy8gT25seSB0aGUgcGFuZWxzIHRoYXQgYXJlIGRlY2xhcmVkIEFORCAoY3VycmVudGx5IHNob3duIE9SIG1pZC1leGl0KS4gQVxuICAvLyBoaWRkZW4tYnV0LXByZXNlbnQgc2xvdCBsaW5nZXJzIHNvIGl0cyBjbG9zZSBhbmltYXRpb24gY2FuIHBsYXk7IG90aGVyd2lzZVxuICAvLyBjbG9zZWQgcGFuZWxzIHJlc2VydmUgbm8gc3BhY2UuXG4gIGNvbnN0IHBhbmVsSXRlbXM6IFBhbmVsSXRlbVtdID0gUEFORUxfT1JERVIuZmlsdGVyKFxuICAgIChzbG90KSA9PiBkZWNsYXJlZFtzbG90XSAmJiAoaXNTaG93bihzbG90KSB8fCBwcmVzZW50W3Nsb3RdKVxuICApLm1hcCgoc2xvdCkgPT4gKHtcbiAgICBpZDogc2xvdCxcbiAgICBkZWZhdWx0U2l6ZTogZGVmYXVsdFNpemVGb3Ioc2xvdCksXG4gICAgbWluU2l6ZTogZGVjbGFyZWRbc2xvdF0/Lm1pblNpemUgPz8gbGF5b3V0U3RhdGVbc2xvdF0ubWluU2l6ZSxcbiAgICBtYXhTaXplOiBkZWNsYXJlZFtzbG90XT8ubWF4U2l6ZSA/PyBsYXlvdXRTdGF0ZVtzbG90XS5tYXhTaXplLFxuICAgIGNvbGxhcHNpYmxlOiBzbG90ICE9PSBTbG90LmNvbnRlbnQgJiYgKGRlY2xhcmVkW3Nsb3RdPy5jb2xsYXBzaWJsZSA/PyB0cnVlKSxcbiAgICByZXNpemFibGU6IGRlY2xhcmVkW3Nsb3RdPy5yZXNpemFibGUsXG4gIH0pKTtcblxuICAvLyBTb2xvIG1vZGUgaG9zdHMgdGhlIGxvbmUgcGFuZWwgaW4gYSBwbGFpbiBkaXYsIG5vIHJlc2l6YWJsZSBHcm91cC4gQSBoaWRkZW5cbiAgLy8gbG9uZSBwYW5lbCByZW5kZXJzIG5vdGhpbmcgKENvbnRlbnQgaXMgYWx3YXlzIHNob3duKS5cbiAgY29uc3Qgc29sb0hvc3QgPVxuICAgIHNvbG9TbG90ICYmIGlzU2hvd24oc29sb1Nsb3QpID8gKFxuICAgICAgPFN0eWxlZFNvbG9Ib3N0IHJlZj17c2xvdEhvc3RSZWZzW3NvbG9TbG90XX0gLz5cbiAgICApIDogbnVsbDtcblxuICAvLyBUaGUgcmVzaXphYmxlIEdyb3VwLiBga2V5YCA9IHRoZSBwZXJzaXN0ZW5jZSBuYW1lc3BhY2U6IHJlYWN0LXJlc2l6YWJsZS1wYW5lbHNcbiAgLy8gcmVhZHMgc3RvcmVkIHNpemVzIG9ubHkgb24gbW91bnQsIHNvIHJlbW91bnQgd2hlbiB0aGUga2V5IGNoYW5nZXMgdG8gbG9hZFxuICAvLyB0aGF0IGluc3RhbmNlJ3Mgc2l6ZXMgKHBlci1yb3V0ZSBzaXplIG1lbW9yeSkuIFRoZSBrZXkgbmV2ZXIgY2hhbmdlcyBvblxuICAvLyBwYW5lbCBvcGVuL2Nsb3NlLCBzbyBub3JtYWwgdG9nZ2xpbmcgc3RheXMgcmVtb3VudC1mcmVlLlxuICBjb25zdCBwYW5lbEdyb3VwID1cbiAgICBwYW5lbEl0ZW1zLmxlbmd0aCA+IDAgPyAoXG4gICAgICA8UGFuZWxcbiAgICAgICAga2V5PXtyZXNvbHZlZEtleX1cbiAgICAgICAgcGFuZWxzPXtwYW5lbEl0ZW1zfVxuICAgICAgICBwZXJzaXN0ZW5jZUtleT17cmVzb2x2ZWRLZXl9XG4gICAgICAgIHN0b3JhZ2U9e3Jlc29sdmVkU3RvcmFnZX1cbiAgICAgICAgaG9zdEZvcj17KGlkKSA9PiBzbG90SG9zdFJlZnNbaWQgYXMgU2xvdEtleV19XG4gICAgICAgIG9uUmVzaXplPXsoaWQsIHNpemUpID0+IHBhbmVsQ2FsbGJhY2tzW2lkIGFzIFNsb3RLZXldLnJlc2l6ZShzaXplKX1cbiAgICAgICAgb25Db2xsYXBzZT17KGlkKSA9PiBwYW5lbENhbGxiYWNrc1tpZCBhcyBTbG90S2V5XS5oaWRlKCl9XG4gICAgICAgIHBhbmVsSGFuZGxlRm9yPXtwYW5lbFJlZkNhbGxiYWNrcy5oYW5kbGVGb3J9XG4gICAgICAgIHBhbmVsRWxlbWVudEZvcj17cGFuZWxSZWZDYWxsYmFja3MuZWxlbWVudEZvcn1cbiAgICAgICAgc2hvdWxkU3VwcHJlc3NMYXlvdXRDYWxsYmFjaz17c2hvdWxkU3VwcHJlc3NMYXlvdXRDYWxsYmFja31cbiAgICAgIC8+XG4gICAgKSA6IG51bGw7XG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxSZWdpc3RyeUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3JlZ2lzdHJ5fT5cbiAgICAgIDxQYW5lbERlY2xhcmF0aW9uc0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2RlY2xhcmVkfT5cbiAgICAgICAgPFBhbmVsUHJlc2VuY2VDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtwcmVzZW5jZX0+XG4gICAgICAgICAgPFBhbmVsQW5pbWF0aW9uQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17YW5pbWF0aW9uQ29udHJvbH0+XG4gICAgICAgICAgICA8TGF5b3V0UG9ydGFsQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17cG9ydGFsVGFyZ2V0c30+XG4gICAgICAgICAgICAgIDxMYXlvdXRGbG9hdERyYWdQcm92aWRlcj5cbiAgICAgICAgICAgICAgICA8TW9iaWxlU3BsaXRTdGFja0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e21vYmlsZVNwbGl0U3RhY2t9PlxuICAgICAgICAgICAgICAgICAgPFN0eWxlZExheW91dCBkYXRhLWRzLWlkPVwiTGF5b3V0XCI+XG4gICAgICAgICAgICAgICAgICAgIHtpc1NvbG8gPyBzb2xvSG9zdCA6IHBhbmVsR3JvdXB9XG4gICAgICAgICAgICAgICAgICAgIHtpc1JpZ2h0UGFuZWxGbG9hdGluZyAmJlxuICAgICAgICAgICAgICAgICAgICAgIGxheW91dFN0YXRlW1Nsb3QucmlnaHRQYW5lbF0udmlzaWJsZSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8TGF5b3V0RmxvYXQgaG9zdFJlZj17ZmxvYXRIb3N0UmVmfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICAgICAge3Nob3dNb2JpbGVTcGxpdFN0YWNrICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8U3R5bGVkTW9iaWxlU3BsaXRTdGFja0hvc3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZj17c2V0TW9iaWxlU3BsaXRTdGFja0hvc3R9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDwvU3R5bGVkTGF5b3V0PlxuICAgICAgICAgICAgICAgIDwvTW9iaWxlU3BsaXRTdGFja0NvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgICAgICAgIDwvTGF5b3V0RmxvYXREcmFnUHJvdmlkZXI+XG4gICAgICAgICAgICA8L0xheW91dFBvcnRhbENvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgICAgPC9QYW5lbEFuaW1hdGlvbkNvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgIDwvUGFuZWxQcmVzZW5jZUNvbnRleHQuUHJvdmlkZXI+XG4gICAgICA8L1BhbmVsRGVjbGFyYXRpb25zQ29udGV4dC5Qcm92aWRlcj5cbiAgICA8L1BhbmVsUmVnaXN0cnlDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLyogUHVibGljIExheW91dCAtIHRoZSByZXNpemFibGUgcGFuZWwgcm93ICsgY29tcG91bmQgcGFydHMgYXMgc3RhdGljcyAgICAgICAgICovXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG50eXBlIExheW91dENvbXBvbmVudCA9IHR5cGVvZiBMYXlvdXRCYXNlICYge1xuICBQcm92aWRlcjogdHlwZW9mIExheW91dFByb3ZpZGVyO1xuICBMZWZ0UGFuZWw6IHR5cGVvZiBMZWZ0UGFuZWw7XG4gIExlZnRQYW5lbEhlYWRlcjogdHlwZW9mIExlZnRQYW5lbEhlYWRlcjtcbiAgTGVmdFBhbmVsRm9vdGVyOiB0eXBlb2YgTGVmdFBhbmVsRm9vdGVyO1xuICBSaWdodFBhbmVsOiB0eXBlb2YgUmlnaHRQYW5lbDtcbiAgUmlnaHRQYW5lbEhlYWRlcjogdHlwZW9mIFJpZ2h0UGFuZWxIZWFkZXI7XG4gIFJpZ2h0UGFuZWxGb290ZXI6IHR5cGVvZiBSaWdodFBhbmVsRm9vdGVyO1xuICBDb250ZW50OiB0eXBlb2YgQ29udGVudDtcbiAgU3BsaXQ6IHR5cGVvZiBTcGxpdDtcbiAgU3BsaXRIZWFkZXI6IHR5cGVvZiBTcGxpdEhlYWRlcjtcbiAgU3BsaXRGb290ZXI6IHR5cGVvZiBTcGxpdEZvb3Rlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBMYXlvdXQgPSBMYXlvdXRCYXNlIGFzIExheW91dENvbXBvbmVudDtcblxuTGF5b3V0LlByb3ZpZGVyID0gTGF5b3V0UHJvdmlkZXI7XG5MYXlvdXQuTGVmdFBhbmVsID0gTGVmdFBhbmVsO1xuTGF5b3V0LkxlZnRQYW5lbEhlYWRlciA9IExlZnRQYW5lbEhlYWRlcjtcbkxheW91dC5MZWZ0UGFuZWxGb290ZXIgPSBMZWZ0UGFuZWxGb290ZXI7XG5MYXlvdXQuUmlnaHRQYW5lbCA9IFJpZ2h0UGFuZWw7XG5MYXlvdXQuUmlnaHRQYW5lbEhlYWRlciA9IFJpZ2h0UGFuZWxIZWFkZXI7XG5MYXlvdXQuUmlnaHRQYW5lbEZvb3RlciA9IFJpZ2h0UGFuZWxGb290ZXI7XG5MYXlvdXQuQ29udGVudCA9IENvbnRlbnQ7XG5MYXlvdXQuU3BsaXQgPSBTcGxpdDtcbkxheW91dC5TcGxpdEhlYWRlciA9IFNwbGl0SGVhZGVyO1xuTGF5b3V0LlNwbGl0Rm9vdGVyID0gU3BsaXRGb290ZXI7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBb0htQyJ9 */");export const Layout=function({children,persistenceKey,storage}){let[declared,setDeclared]=useState({}),{state:layoutState,...panelCallbacks}=useLayout(),persistence=useLayoutPersistence(),resolvedKey=persistenceKey??persistence.persistenceKey,resolvedStorage=storage??persistence.storage,{isMobile}=useBreakpoints(),showMobileSplitStack=useMobileSplitViewEnabled(),[mobileSplitStackHost,setMobileSplitStackHost]=useState(null),[splitCount,setSplitCount]=useState(0),registerSplit=useCallback(()=>(setSplitCount(count=>count+1),()=>setSplitCount(count=>count-1)),[]),mobileSplitStack=useMemo(()=>({host:mobileSplitStackHost,isSplitPresent:splitCount>0,registerSplit}),[mobileSplitStackHost,splitCount,registerSplit]),panelsEnabled=useLayoutPanelsEnabled(),rightPanelVariant=layoutState[Slot.rightPanel].variant??declared[Slot.rightPanel]?.variant??"sidebar",isRightPanelFloating=!0===panelsEnabled&&!isMobile&&"float"===rightPanelVariant,isShown=slot=>layoutState[slot].visible&&!(slot===Slot.rightPanel&&(isRightPanelFloating||isMobile)),[present,setPresent]=useState({}),presence=useMemo(()=>({setPresent:(slot,isPresent)=>setPresent(prev=>prev[slot]===isPresent?prev:{...prev,[slot]:isPresent})}),[]),panelHandles=useRef({}),panelElements=useRef({}),resizeSuppressed=useRef({}),animationControl=useMemo(()=>({setHandle:(slot,handle)=>{panelHandles.current[slot]=handle},getHandle:slot=>panelHandles.current[slot]??null,setElement:(slot,element)=>{panelElements.current[slot]=element},getElement:slot=>panelElements.current[slot]??null,setResizeSuppressed:(slot,suppressed)=>{resizeSuppressed.current[slot]=suppressed}}),[]),panelRefCallbacks=useMemo(()=>{let handleCallbacks=new Map,elementCallbacks=new Map;return{handleFor:id=>{let callback=handleCallbacks.get(id);return callback||(callback=handle=>animationControl.setHandle(id,handle),handleCallbacks.set(id,callback)),callback},elementFor:id=>{let callback=elementCallbacks.get(id);return callback||(callback=element=>animationControl.setElement(id,element),elementCallbacks.set(id,callback)),callback}}},[animationControl]),shouldSuppressLayoutCallback=useCallback(()=>Object.values(resizeSuppressed.current).some(Boolean),[]),registry=useMemo(()=>({register:(slot,reg)=>setDeclared(prev=>({...prev,[slot]:reg})),unregister:slot=>setDeclared(prev=>{if(!(slot in prev))return prev;let next={...prev};return delete next[slot],next})}),[]),{portalTargets,slotHosts,slotHostRefs,floatHostRef}=useFloatablePortalTargets({slots:PANEL_ORDER,floatableSlot:Slot.rightPanel,isFloating:isRightPanelFloating});useGlobalCssVariables(slotHosts);let declaredSlots=PANEL_ORDER.filter(slot=>declared[slot]),isSolo=declaredSlots.length<=1,soloSlot=declaredSlots[0],defaultSizeFor=slot=>{if(slot!==Slot.content)return declared[slot]?.defaultSize??layoutState[slot].size},panelItems=PANEL_ORDER.filter(slot=>declared[slot]&&(isShown(slot)||present[slot])).map(slot=>({id:slot,defaultSize:defaultSizeFor(slot),minSize:declared[slot]?.minSize??layoutState[slot].minSize,maxSize:declared[slot]?.maxSize??layoutState[slot].maxSize,collapsible:slot!==Slot.content&&(declared[slot]?.collapsible??!0),resizable:declared[slot]?.resizable})),soloHost=soloSlot&&isShown(soloSlot)?React.createElement(StyledSoloHost,{ref:slotHostRefs[soloSlot]}):null,panelGroup=panelItems.length>0?React.createElement(Panel,{key:resolvedKey,panels:panelItems,persistenceKey:resolvedKey,storage:resolvedStorage,hostFor:id=>slotHostRefs[id],onResize:(id,size)=>panelCallbacks[id].resize(size),onCollapse:id=>panelCallbacks[id].hide(),panelHandleFor:panelRefCallbacks.handleFor,panelElementFor:panelRefCallbacks.elementFor,shouldSuppressLayoutCallback:shouldSuppressLayoutCallback}):null;return React.createElement(PanelRegistryContext.Provider,{value:registry},React.createElement(PanelDeclarationsContext.Provider,{value:declared},React.createElement(PanelPresenceContext.Provider,{value:presence},React.createElement(PanelAnimationContext.Provider,{value:animationControl},React.createElement(LayoutPortalContext.Provider,{value:portalTargets},React.createElement(LayoutFloatDragProvider,null,React.createElement(MobileSplitStackContext.Provider,{value:mobileSplitStack},React.createElement(StyledLayout,{"data-ds-id":"Layout"},isSolo?soloHost:panelGroup,isRightPanelFloating&&layoutState[Slot.rightPanel].visible&&React.createElement(LayoutFloat,{hostRef:floatHostRef}),children,showMobileSplitStack&&React.createElement(StyledMobileSplitStackHost,{ref:setMobileSplitStackHost})))))))))};Layout.Provider=LayoutProvider,Layout.LeftPanel=LeftPanel,Layout.LeftPanelHeader=LeftPanelHeader,Layout.LeftPanelFooter=LeftPanelFooter,Layout.RightPanel=RightPanel,Layout.RightPanelHeader=RightPanelHeader,Layout.RightPanelFooter=RightPanelFooter,Layout.Content=Content,Layout.Split=Split,Layout.SplitHeader=SplitHeader,Layout.SplitFooter=SplitFooter;
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import type { RightPanelProps } from "../-types";
|
|
3
3
|
/**
|
|
4
|
-
* Right side panel. Declares the `rightPanel` slot
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* the mobile breakpoint (
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* `Layout.RightPanelHeader` / `Layout.RightPanelFooter` children stick
|
|
11
|
-
* panel edges; the remaining content scrolls.
|
|
4
|
+
* Right side panel. Declares the `rightPanel` slot, then picks its presentation
|
|
5
|
+
* by breakpoint: an in-flow resizable column on desktop ({@link RightPanelDocked},
|
|
6
|
+
* whose content tracks the `--ds-layout-subnav-offset` var) and a bottom sheet
|
|
7
|
+
* below the mobile breakpoint ({@link RightPanelSheet}) - content remounts on a
|
|
8
|
+
* breakpoint cross. Both are driven by the same `rightPanel` layout state, so
|
|
9
|
+
* `useLayout()` controls it the same way at any width. The offcanvas overlay is
|
|
10
|
+
* deferred. `Layout.RightPanelHeader` / `Layout.RightPanelFooter` children stick
|
|
11
|
+
* to the panel edges; the remaining content scrolls. `variant` sets the
|
|
12
|
+
* presentation the panel starts in; the header's variant toggle drives it from
|
|
13
|
+
* then on.
|
|
12
14
|
*/
|
|
13
15
|
export declare const RightPanel: React.FC<RightPanelProps>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React from"react";import styled from"@emotion/styled";import{Slot,SUBNAV_OFFSET_VAR}from"../-constants";import{useDeclarePanel,useLayoutPortal,useRunCallbackOnValueChange}from"../registry";import{useLayout}from"../useLayout";import{useCanRenderPanel}from"../context";import{useBreakpoints}from"../../../shared/useBreakpoints";import{PanelContainer}from"../PanelContainer";import{Sheet,SHEET_MAX_HEIGHT}from"../../Sheet/Sheet";let StyledSheetPanelShell=styled("div",{target:"e12v2el90",label:"StyledSheetPanelShell"})({height:SHEET_MAX_HEIGHT},"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3JjL2NvbXBvbmVudHMvTGF5b3V0L1JpZ2h0UGFuZWwvUmlnaHRQYW5lbC50c3giLCJzb3VyY2VzIjpbInNyYy9jb21wb25lbnRzL0xheW91dC9SaWdodFBhbmVsL1JpZ2h0UGFuZWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBzdHlsZWQgZnJvbSBcIkBlbW90aW9uL3N0eWxlZFwiO1xuaW1wb3J0IHsgU2xvdCwgU1VCTkFWX09GRlNFVF9WQVIgfSBmcm9tIFwiLi4vLWNvbnN0YW50c1wiO1xuaW1wb3J0IHtcbiAgdXNlRGVjbGFyZVBhbmVsLFxuICB1c2VMYXlvdXRQb3J0YWwsXG4gIHVzZVJ1bkNhbGxiYWNrT25WYWx1ZUNoYW5nZSxcbn0gZnJvbSBcIi4uL3JlZ2lzdHJ5XCI7XG5pbXBvcnQgeyB1c2VMYXlvdXQgfSBmcm9tIFwiLi4vdXNlTGF5b3V0XCI7XG5pbXBvcnQgeyB1c2VDYW5SZW5kZXJQYW5lbCB9IGZyb20gXCIuLi9jb250ZXh0XCI7XG5pbXBvcnQgeyB1c2VCcmVha3BvaW50cyB9IGZyb20gXCIuLi8uLi8uLi9zaGFyZWQvdXNlQnJlYWtwb2ludHNcIjtcbmltcG9ydCB7IFBhbmVsQ29udGFpbmVyIH0gZnJvbSBcIi4uL1BhbmVsQ29udGFpbmVyXCI7XG5pbXBvcnQgeyBTaGVldCwgU0hFRVRfTUFYX0hFSUdIVCB9IGZyb20gXCIuLi8uLi9TaGVldC9TaGVldFwiO1xuaW1wb3J0IHR5cGUgeyBSaWdodFBhbmVsUHJvcHMgfSBmcm9tIFwiLi4vLXR5cGVzXCI7XG5cbi8vIEdpdmVzIHRoZSBwYW5lbCBzaGVsbCBhIGRlZmluaXRlIGhlaWdodCBpbnNpZGUgdGhlIFNoZWV0ICh3aGljaCBvbmx5IGNhcHNcbi8vIGl0cyBjb250ZW50IGF0IFNIRUVUX01BWF9IRUlHSFQpLiBXaXRoIHRoZSBoZWlnaHQgYm91bmRlZCwgdGhlIFNhbmR3aWNoXG4vLyBpbnNpZGUgUGFuZWxDb250YWluZXIgc2Nyb2xscyBpdHMgYm9keSByZWdpb24gaXRzZWxmLCBzb1xuLy8gYExheW91dC5SaWdodFBhbmVsSGVhZGVyYCAvIGBMYXlvdXQuUmlnaHRQYW5lbEZvb3RlcmAgc3RpY2sgdG8gdGhlIHNoZWV0XG4vLyBlZGdlcyBleGFjdGx5IGFzIHRoZXkgZG8gaW4gdGhlIGRvY2tlZCBwYW5lbC5cbmNvbnN0IFN0eWxlZFNoZWV0UGFuZWxTaGVsbCA9IHN0eWxlZC5kaXYoe1xuICBoZWlnaHQ6IFNIRUVUX01BWF9IRUlHSFQsXG59KTtcblxuLy8gQnVpbHQtaW4gc2xvdDogb2Zmc2V0cyB0aGUgcGFuZWwgY29udGVudCBieSB0aGUgc3VibmF2LW9mZnNldCB2YXIgKDAgd2hlblxuLy8gdW5zZXQpLCB0cmFuc2l0aW9uZWQgd2l0aCB0aGUgdGhlbWUncyBgbmF2U2xpZGVgIHRpbWluZyDigJQgc28gdGhlIHJpZ2h0IHBhbmVsXG4vLyB0cmFja3MgYSBzdGlja3kgc3VibmF2IHdpdGggbm8gd2lyaW5nIG9uIHRoZSBjb25zdW1lcidzIHNpZGUuXG5jb25zdCBTdHlsZWRSaWdodFBhbmVsU2xvdCA9IHN0eWxlZC5kaXYoKHsgdGhlbWUgfSkgPT4gKHtcbiAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgbGVmdDogMCxcbiAgcmlnaHQ6IDAsXG4gIGJvdHRvbTogMCxcbiAgdG9wOiBgdmFyKCR7U1VCTkFWX09GRlNFVF9WQVJ9LCAwcHgpYCxcbiAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gIHRyYW5zaXRpb246IGB0b3AgJHt0aGVtZS52YXJpYWJsZXMuYW5pbWF0aW9uLm5hdlNsaWRlLm9wZW4uZHVyYXRpb259ICR7dGhlbWUudmFyaWFibGVzLmFuaW1hdGlvbi5uYXZTbGlkZS5vcGVuLnRpbWluZ0Z1bmN0aW9ufWAsXG59KSk7XG5cbi8qKlxuICogUmlnaHQgc2lkZSBwYW5lbC4gRGVjbGFyZXMgdGhlIGByaWdodFBhbmVsYCBzbG90IGFuZCBwb3J0YWxzIGl0cyBjb250ZW50IGludG9cbiAqIHRoZSBHcm91cCdzIGhvc3Qgd2hpbGUgdmlzaWJsZS4gUmVuZGVycyBpbi1mbG93IChhIHJlc2l6YWJsZSBjb2x1bW4pIG9uXG4gKiBkZXNrdG9wIC0gdGhlIG9mZmNhbnZhcyBvdmVybGF5IGlzIGRlZmVycmVkIC0gYW5kIGFzIGEgYm90dG9tIHNoZWV0IGJlbG93XG4gKiB0aGUgbW9iaWxlIGJyZWFrcG9pbnQgKGBTaGVldGAgcG9ydGFscyBpdHNlbGYsIHNvIHRoZSBsYXlvdXQgcG9ydGFsIGlzXG4gKiBieXBhc3NlZCB0aGVyZTsgY29udGVudCByZW1vdW50cyBvbiBhIGJyZWFrcG9pbnQgY3Jvc3MpLiBEb2NrZWQgY29udGVudCBpc1xuICogd3JhcHBlZCBpbiBhIHNsb3QgdGhhdCB0cmFja3MgdGhlIGAtLWRzLWxheW91dC1zdWJuYXYtb2Zmc2V0YCB2YXIuXG4gKiBgTGF5b3V0LlJpZ2h0UGFuZWxIZWFkZXJgIC8gYExheW91dC5SaWdodFBhbmVsRm9vdGVyYCBjaGlsZHJlbiBzdGljayB0byB0aGVcbiAqIHBhbmVsIGVkZ2VzOyB0aGUgcmVtYWluaW5nIGNvbnRlbnQgc2Nyb2xscy5cbiAqL1xuZXhwb3J0IGNvbnN0IFJpZ2h0UGFuZWw6IFJlYWN0LkZDPFJpZ2h0UGFuZWxQcm9wcz4gPSAoe1xuICBjaGlsZHJlbixcbiAgZGVmYXVsdFNpemUgPSAzNzgsXG4gIG1pblNpemUgPSAzMjgsXG4gIG1heFNpemUgPSBcIjMwJVwiLFxuICBjb2xsYXBzaWJsZSA9IGZhbHNlLFxuICBvblZpc2libGVDaGFuZ2UsXG4gIG9uVmFyaWFudENoYW5nZSxcbiAgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbCxcbiAgc2Nyb2xsQ29udGFpbmVyUmVmLFxuICBvblNjcm9sbCxcbn0pID0+IHtcbiAgY29uc3QgeyBpc1Zpc2libGUsIGhpZGUsIHN0YXRlIH0gPSB1c2VMYXlvdXQoKVtTbG90LnJpZ2h0UGFuZWxdO1xuICBjb25zdCB7IGlzTW9iaWxlIH0gPSB1c2VCcmVha3BvaW50cygpO1xuICBjb25zdCBjYW5SZW5kZXIgPSB1c2VDYW5SZW5kZXJQYW5lbCgpO1xuICB1c2VEZWNsYXJlUGFuZWwoU2xvdC5yaWdodFBhbmVsLCB7XG4gICAgZGVmYXVsdFNpemUsXG4gICAgbWluU2l6ZSxcbiAgICBtYXhTaXplLFxuICAgIGNvbGxhcHNpYmxlLFxuICB9KTtcbiAgdXNlUnVuQ2FsbGJhY2tPblZhbHVlQ2hhbmdlKGlzVmlzaWJsZSwgb25WaXNpYmxlQ2hhbmdlKTtcbiAgdXNlUnVuQ2FsbGJhY2tPblZhbHVlQ2hhbmdlKHN0YXRlLnZhcmlhbnQsIG9uVmFyaWFudENoYW5nZSk7XG4gIGNvbnN0IGRvY2tlZFBhbmVsID0gdXNlTGF5b3V0UG9ydGFsKFxuICAgIFNsb3QucmlnaHRQYW5lbCxcbiAgICBjYW5SZW5kZXIgJiYgaXNWaXNpYmxlICYmICFpc01vYmlsZSA/IChcbiAgICAgIDxTdHlsZWRSaWdodFBhbmVsU2xvdD5cbiAgICAgICAgPFBhbmVsQ29udGFpbmVyXG4gICAgICAgICAgYXJpYS1sYWJlbD17YXJpYUxhYmVsfVxuICAgICAgICAgIHNjcm9sbENvbnRhaW5lclJlZj17c2Nyb2xsQ29udGFpbmVyUmVmfVxuICAgICAgICAgIG9uU2Nyb2xsPXtvblNjcm9sbH1cbiAgICAgICAgICAvLyBUaGUgbGVmdCBib3JkZXIgc2VwYXJhdGVzIHRoZSBkb2NrZWQgY29sdW1uIGZyb20gdGhlIGNvbnRlbnQ7IHRoZVxuICAgICAgICAgIC8vIGZsb2F0aW5nIHdpbmRvdyBoYXMgaXRzIG93biBib3JkZXIsIHNvIGRyb3AgaXQgdGhlcmUuXG4gICAgICAgICAgc2hvd0JvcmRlckxlZnQ9e3N0YXRlLnZhcmlhbnQgIT09IFwiZmxvYXRcIn1cbiAgICAgICAgPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9QYW5lbENvbnRhaW5lcj5cbiAgICAgIDwvU3R5bGVkUmlnaHRQYW5lbFNsb3Q+XG4gICAgKSA6IG51bGxcbiAgKTtcbiAgaWYgKCFjYW5SZW5kZXIpIHJldHVybiBudWxsO1xuICBpZiAoaXNNb2JpbGUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgLy8gSW5pdGlhbCBmb2N1cyBpcyBzdXBwcmVzc2VkIHNvIG9wZW5pbmcgdGhlIHNoZWV0IG5ldmVyIHBvcHMgdGhlXG4gICAgICAvLyBvbi1zY3JlZW4ga2V5Ym9hcmQuXG4gICAgICA8U2hlZXRcbiAgICAgICAgaXNWaXNpYmxlPXtpc1Zpc2libGV9XG4gICAgICAgIG9uQ2xvc2U9e2hpZGV9XG4gICAgICAgIGhhc0JhY2tkcm9wXG4gICAgICAgIGRpc21pc3NPbk91dHNpZGVDbGlja1xuICAgICAgICBkaXNhYmxlSW5pdGlhbEZvY3VzXG4gICAgICA+XG4gICAgICAgIDxTdHlsZWRTaGVldFBhbmVsU2hlbGw+XG4gICAgICAgICAgPFBhbmVsQ29udGFpbmVyXG4gICAgICAgICAgICBhcmlhLWxhYmVsPXthcmlhTGFiZWx9XG4gICAgICAgICAgICBzY3JvbGxDb250YWluZXJSZWY9e3Njcm9sbENvbnRhaW5lclJlZn1cbiAgICAgICAgICAgIG9uU2Nyb2xsPXtvblNjcm9sbH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgPC9QYW5lbENvbnRhaW5lcj5cbiAgICAgICAgPC9TdHlsZWRTaGVldFBhbmVsU2hlbGw+XG4gICAgICA8L1NoZWV0PlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGRvY2tlZFBhbmVsO1xufTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvQjhCIn0= */"),StyledRightPanelSlot=styled("div",{target:"e12v2el91",label:"StyledRightPanelSlot"})(({theme})=>({position:"absolute",left:0,right:0,bottom:0,top:`var(${SUBNAV_OFFSET_VAR}, 0px)`,overflow:"hidden",transition:`top ${theme.variables.animation.navSlide.open.duration} ${theme.variables.animation.navSlide.open.timingFunction}`}),"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3JjL2NvbXBvbmVudHMvTGF5b3V0L1JpZ2h0UGFuZWwvUmlnaHRQYW5lbC50c3giLCJzb3VyY2VzIjpbInNyYy9jb21wb25lbnRzL0xheW91dC9SaWdodFBhbmVsL1JpZ2h0UGFuZWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBzdHlsZWQgZnJvbSBcIkBlbW90aW9uL3N0eWxlZFwiO1xuaW1wb3J0IHsgU2xvdCwgU1VCTkFWX09GRlNFVF9WQVIgfSBmcm9tIFwiLi4vLWNvbnN0YW50c1wiO1xuaW1wb3J0IHtcbiAgdXNlRGVjbGFyZVBhbmVsLFxuICB1c2VMYXlvdXRQb3J0YWwsXG4gIHVzZVJ1bkNhbGxiYWNrT25WYWx1ZUNoYW5nZSxcbn0gZnJvbSBcIi4uL3JlZ2lzdHJ5XCI7XG5pbXBvcnQgeyB1c2VMYXlvdXQgfSBmcm9tIFwiLi4vdXNlTGF5b3V0XCI7XG5pbXBvcnQgeyB1c2VDYW5SZW5kZXJQYW5lbCB9IGZyb20gXCIuLi9jb250ZXh0XCI7XG5pbXBvcnQgeyB1c2VCcmVha3BvaW50cyB9IGZyb20gXCIuLi8uLi8uLi9zaGFyZWQvdXNlQnJlYWtwb2ludHNcIjtcbmltcG9ydCB7IFBhbmVsQ29udGFpbmVyIH0gZnJvbSBcIi4uL1BhbmVsQ29udGFpbmVyXCI7XG5pbXBvcnQgeyBTaGVldCwgU0hFRVRfTUFYX0hFSUdIVCB9IGZyb20gXCIuLi8uLi9TaGVldC9TaGVldFwiO1xuaW1wb3J0IHR5cGUgeyBSaWdodFBhbmVsUHJvcHMgfSBmcm9tIFwiLi4vLXR5cGVzXCI7XG5cbi8vIEdpdmVzIHRoZSBwYW5lbCBzaGVsbCBhIGRlZmluaXRlIGhlaWdodCBpbnNpZGUgdGhlIFNoZWV0ICh3aGljaCBvbmx5IGNhcHNcbi8vIGl0cyBjb250ZW50IGF0IFNIRUVUX01BWF9IRUlHSFQpLiBXaXRoIHRoZSBoZWlnaHQgYm91bmRlZCwgdGhlIFNhbmR3aWNoXG4vLyBpbnNpZGUgUGFuZWxDb250YWluZXIgc2Nyb2xscyBpdHMgYm9keSByZWdpb24gaXRzZWxmLCBzb1xuLy8gYExheW91dC5SaWdodFBhbmVsSGVhZGVyYCAvIGBMYXlvdXQuUmlnaHRQYW5lbEZvb3RlcmAgc3RpY2sgdG8gdGhlIHNoZWV0XG4vLyBlZGdlcyBleGFjdGx5IGFzIHRoZXkgZG8gaW4gdGhlIGRvY2tlZCBwYW5lbC5cbmNvbnN0IFN0eWxlZFNoZWV0UGFuZWxTaGVsbCA9IHN0eWxlZC5kaXYoe1xuICBoZWlnaHQ6IFNIRUVUX01BWF9IRUlHSFQsXG59KTtcblxuLy8gQnVpbHQtaW4gc2xvdDogb2Zmc2V0cyB0aGUgcGFuZWwgY29udGVudCBieSB0aGUgc3VibmF2LW9mZnNldCB2YXIgKDAgd2hlblxuLy8gdW5zZXQpLCB0cmFuc2l0aW9uZWQgd2l0aCB0aGUgdGhlbWUncyBgbmF2U2xpZGVgIHRpbWluZyDigJQgc28gdGhlIHJpZ2h0IHBhbmVsXG4vLyB0cmFja3MgYSBzdGlja3kgc3VibmF2IHdpdGggbm8gd2lyaW5nIG9uIHRoZSBjb25zdW1lcidzIHNpZGUuXG5jb25zdCBTdHlsZWRSaWdodFBhbmVsU2xvdCA9IHN0eWxlZC5kaXYoKHsgdGhlbWUgfSkgPT4gKHtcbiAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgbGVmdDogMCxcbiAgcmlnaHQ6IDAsXG4gIGJvdHRvbTogMCxcbiAgdG9wOiBgdmFyKCR7U1VCTkFWX09GRlNFVF9WQVJ9LCAwcHgpYCxcbiAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gIHRyYW5zaXRpb246IGB0b3AgJHt0aGVtZS52YXJpYWJsZXMuYW5pbWF0aW9uLm5hdlNsaWRlLm9wZW4uZHVyYXRpb259ICR7dGhlbWUudmFyaWFibGVzLmFuaW1hdGlvbi5uYXZTbGlkZS5vcGVuLnRpbWluZ0Z1bmN0aW9ufWAsXG59KSk7XG5cbi8qKlxuICogUmlnaHQgc2lkZSBwYW5lbC4gRGVjbGFyZXMgdGhlIGByaWdodFBhbmVsYCBzbG90IGFuZCBwb3J0YWxzIGl0cyBjb250ZW50IGludG9cbiAqIHRoZSBHcm91cCdzIGhvc3Qgd2hpbGUgdmlzaWJsZS4gUmVuZGVycyBpbi1mbG93IChhIHJlc2l6YWJsZSBjb2x1bW4pIG9uXG4gKiBkZXNrdG9wIC0gdGhlIG9mZmNhbnZhcyBvdmVybGF5IGlzIGRlZmVycmVkIC0gYW5kIGFzIGEgYm90dG9tIHNoZWV0IGJlbG93XG4gKiB0aGUgbW9iaWxlIGJyZWFrcG9pbnQgKGBTaGVldGAgcG9ydGFscyBpdHNlbGYsIHNvIHRoZSBsYXlvdXQgcG9ydGFsIGlzXG4gKiBieXBhc3NlZCB0aGVyZTsgY29udGVudCByZW1vdW50cyBvbiBhIGJyZWFrcG9pbnQgY3Jvc3MpLiBEb2NrZWQgY29udGVudCBpc1xuICogd3JhcHBlZCBpbiBhIHNsb3QgdGhhdCB0cmFja3MgdGhlIGAtLWRzLWxheW91dC1zdWJuYXYtb2Zmc2V0YCB2YXIuXG4gKiBgTGF5b3V0LlJpZ2h0UGFuZWxIZWFkZXJgIC8gYExheW91dC5SaWdodFBhbmVsRm9vdGVyYCBjaGlsZHJlbiBzdGljayB0byB0aGVcbiAqIHBhbmVsIGVkZ2VzOyB0aGUgcmVtYWluaW5nIGNvbnRlbnQgc2Nyb2xscy5cbiAqL1xuZXhwb3J0IGNvbnN0IFJpZ2h0UGFuZWw6IFJlYWN0LkZDPFJpZ2h0UGFuZWxQcm9wcz4gPSAoe1xuICBjaGlsZHJlbixcbiAgZGVmYXVsdFNpemUgPSAzNzgsXG4gIG1pblNpemUgPSAzMjgsXG4gIG1heFNpemUgPSBcIjMwJVwiLFxuICBjb2xsYXBzaWJsZSA9IGZhbHNlLFxuICBvblZpc2libGVDaGFuZ2UsXG4gIG9uVmFyaWFudENoYW5nZSxcbiAgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbCxcbiAgc2Nyb2xsQ29udGFpbmVyUmVmLFxuICBvblNjcm9sbCxcbn0pID0+IHtcbiAgY29uc3QgeyBpc1Zpc2libGUsIGhpZGUsIHN0YXRlIH0gPSB1c2VMYXlvdXQoKVtTbG90LnJpZ2h0UGFuZWxdO1xuICBjb25zdCB7IGlzTW9iaWxlIH0gPSB1c2VCcmVha3BvaW50cygpO1xuICBjb25zdCBjYW5SZW5kZXIgPSB1c2VDYW5SZW5kZXJQYW5lbCgpO1xuICB1c2VEZWNsYXJlUGFuZWwoU2xvdC5yaWdodFBhbmVsLCB7XG4gICAgZGVmYXVsdFNpemUsXG4gICAgbWluU2l6ZSxcbiAgICBtYXhTaXplLFxuICAgIGNvbGxhcHNpYmxlLFxuICB9KTtcbiAgdXNlUnVuQ2FsbGJhY2tPblZhbHVlQ2hhbmdlKGlzVmlzaWJsZSwgb25WaXNpYmxlQ2hhbmdlKTtcbiAgdXNlUnVuQ2FsbGJhY2tPblZhbHVlQ2hhbmdlKHN0YXRlLnZhcmlhbnQsIG9uVmFyaWFudENoYW5nZSk7XG4gIGNvbnN0IGRvY2tlZFBhbmVsID0gdXNlTGF5b3V0UG9ydGFsKFxuICAgIFNsb3QucmlnaHRQYW5lbCxcbiAgICBjYW5SZW5kZXIgJiYgaXNWaXNpYmxlICYmICFpc01vYmlsZSA/IChcbiAgICAgIDxTdHlsZWRSaWdodFBhbmVsU2xvdD5cbiAgICAgICAgPFBhbmVsQ29udGFpbmVyXG4gICAgICAgICAgYXJpYS1sYWJlbD17YXJpYUxhYmVsfVxuICAgICAgICAgIHNjcm9sbENvbnRhaW5lclJlZj17c2Nyb2xsQ29udGFpbmVyUmVmfVxuICAgICAgICAgIG9uU2Nyb2xsPXtvblNjcm9sbH1cbiAgICAgICAgICAvLyBUaGUgbGVmdCBib3JkZXIgc2VwYXJhdGVzIHRoZSBkb2NrZWQgY29sdW1uIGZyb20gdGhlIGNvbnRlbnQ7IHRoZVxuICAgICAgICAgIC8vIGZsb2F0aW5nIHdpbmRvdyBoYXMgaXRzIG93biBib3JkZXIsIHNvIGRyb3AgaXQgdGhlcmUuXG4gICAgICAgICAgc2hvd0JvcmRlckxlZnQ9e3N0YXRlLnZhcmlhbnQgIT09IFwiZmxvYXRcIn1cbiAgICAgICAgPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9QYW5lbENvbnRhaW5lcj5cbiAgICAgIDwvU3R5bGVkUmlnaHRQYW5lbFNsb3Q+XG4gICAgKSA6IG51bGxcbiAgKTtcbiAgaWYgKCFjYW5SZW5kZXIpIHJldHVybiBudWxsO1xuICBpZiAoaXNNb2JpbGUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgLy8gSW5pdGlhbCBmb2N1cyBpcyBzdXBwcmVzc2VkIHNvIG9wZW5pbmcgdGhlIHNoZWV0IG5ldmVyIHBvcHMgdGhlXG4gICAgICAvLyBvbi1zY3JlZW4ga2V5Ym9hcmQuXG4gICAgICA8U2hlZXRcbiAgICAgICAgaXNWaXNpYmxlPXtpc1Zpc2libGV9XG4gICAgICAgIG9uQ2xvc2U9e2hpZGV9XG4gICAgICAgIGhhc0JhY2tkcm9wXG4gICAgICAgIGRpc21pc3NPbk91dHNpZGVDbGlja1xuICAgICAgICBkaXNhYmxlSW5pdGlhbEZvY3VzXG4gICAgICA+XG4gICAgICAgIDxTdHlsZWRTaGVldFBhbmVsU2hlbGw+XG4gICAgICAgICAgPFBhbmVsQ29udGFpbmVyXG4gICAgICAgICAgICBhcmlhLWxhYmVsPXthcmlhTGFiZWx9XG4gICAgICAgICAgICBzY3JvbGxDb250YWluZXJSZWY9e3Njcm9sbENvbnRhaW5lclJlZn1cbiAgICAgICAgICAgIG9uU2Nyb2xsPXtvblNjcm9sbH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgPC9QYW5lbENvbnRhaW5lcj5cbiAgICAgICAgPC9TdHlsZWRTaGVldFBhbmVsU2hlbGw+XG4gICAgICA8L1NoZWV0PlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGRvY2tlZFBhbmVsO1xufTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQjZCIn0= */");export const RightPanel=({children,defaultSize=378,minSize=328,maxSize="30%",collapsible=!1,onVisibleChange,onVariantChange,"aria-label":ariaLabel,scrollContainerRef,onScroll})=>{let{isVisible,hide,state}=useLayout()[Slot.rightPanel],{isMobile}=useBreakpoints(),canRender=useCanRenderPanel();useDeclarePanel(Slot.rightPanel,{defaultSize,minSize,maxSize,collapsible}),useRunCallbackOnValueChange(isVisible,onVisibleChange),useRunCallbackOnValueChange(state.variant,onVariantChange);let dockedPanel=useLayoutPortal(Slot.rightPanel,canRender&&isVisible&&!isMobile?React.createElement(StyledRightPanelSlot,null,React.createElement(PanelContainer,{"aria-label":ariaLabel,scrollContainerRef:scrollContainerRef,onScroll:onScroll,showBorderLeft:"float"!==state.variant},children)):null);return canRender?isMobile?React.createElement(Sheet,{isVisible:isVisible,onClose:hide,hasBackdrop:!0,dismissOnOutsideClick:!0,disableInitialFocus:!0},React.createElement(StyledSheetPanelShell,null,React.createElement(PanelContainer,{"aria-label":ariaLabel,scrollContainerRef:scrollContainerRef,onScroll:onScroll},children))):dockedPanel:null};
|
|
1
|
+
import React from"react";import{Slot}from"../-constants";import{useDeclarePanel,useRunCallbackOnValueChange}from"../registry";import{useLayout}from"../useLayout";import{useCanRenderPanel}from"../context";import{useBreakpoints}from"../../../shared/useBreakpoints";import{RightPanelDocked}from"./RightPanelDocked";import{RightPanelSheet}from"./RightPanelSheet";export const RightPanel=({children,defaultSize=378,minSize=328,maxSize="30%",collapsible=!1,variant="sidebar",onVisibleChange,onVariantChange,"aria-label":ariaLabel,scrollContainerRef,onScroll})=>{let{state:layoutState,[Slot.rightPanel]:panel}=useLayout(),{isVisible,hide}=panel,{isMobile}=useBreakpoints(),canRender=useCanRenderPanel();useDeclarePanel(Slot.rightPanel,{defaultSize,minSize,maxSize,collapsible,variant});let resolvedVariant=layoutState[Slot.rightPanel].variant??variant;return(useRunCallbackOnValueChange(isVisible,onVisibleChange),useRunCallbackOnValueChange(resolvedVariant,onVariantChange),canRender)?isMobile?React.createElement(RightPanelSheet,{isVisible:isVisible,hide:hide,"aria-label":ariaLabel,scrollContainerRef:scrollContainerRef,onScroll:onScroll},children):React.createElement(RightPanelDocked,{isVisible:isVisible,variant:resolvedVariant,"aria-label":ariaLabel,scrollContainerRef:scrollContainerRef,onScroll:onScroll},children):null};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { RightPanelVariant } from "../-types";
|
|
3
|
+
export type RightPanelDockedProps = {
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
isVisible: boolean;
|
|
6
|
+
/** Docked column vs. minimized floating window - only the border differs here. */
|
|
7
|
+
variant: RightPanelVariant;
|
|
8
|
+
"aria-label": string;
|
|
9
|
+
scrollContainerRef?: React.Ref<HTMLDivElement>;
|
|
10
|
+
onScroll?: React.UIEventHandler<HTMLDivElement>;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Docked (desktop) right panel. Portals its content into the `rightPanel` slot's
|
|
14
|
+
* host - an in-flow, resizable column - while the panel is visible. Content lives
|
|
15
|
+
* in a {@link PanelContainer} so `Layout.RightPanelHeader` /
|
|
16
|
+
* `Layout.RightPanelFooter` children stick to the edges. The mobile presentation
|
|
17
|
+
* is {@link RightPanelSheet}; `RightPanel` picks between the two by breakpoint.
|
|
18
|
+
*/
|
|
19
|
+
export declare const RightPanelDocked: React.FC<RightPanelDockedProps>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import React from"react";import styled from"@emotion/styled";import{Slot,SUBNAV_OFFSET_VAR}from"../-constants";import{useLayoutPortal}from"../registry";import{PanelContainer}from"../PanelContainer";let StyledRightPanelSlot=styled("div",{target:"eq48lip0",label:"StyledRightPanelSlot"})(({theme})=>({position:"absolute",left:0,right:0,bottom:0,top:`var(${SUBNAV_OFFSET_VAR}, 0px)`,overflow:"hidden",transition:`top ${theme.variables.animation.navSlide.open.duration} ${theme.variables.animation.navSlide.open.timingFunction}`}),"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3JjL2NvbXBvbmVudHMvTGF5b3V0L1JpZ2h0UGFuZWwvUmlnaHRQYW5lbERvY2tlZC50c3giLCJzb3VyY2VzIjpbInNyYy9jb21wb25lbnRzL0xheW91dC9SaWdodFBhbmVsL1JpZ2h0UGFuZWxEb2NrZWQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBzdHlsZWQgZnJvbSBcIkBlbW90aW9uL3N0eWxlZFwiO1xuaW1wb3J0IHsgU2xvdCwgU1VCTkFWX09GRlNFVF9WQVIgfSBmcm9tIFwiLi4vLWNvbnN0YW50c1wiO1xuaW1wb3J0IHsgdXNlTGF5b3V0UG9ydGFsIH0gZnJvbSBcIi4uL3JlZ2lzdHJ5XCI7XG5pbXBvcnQgeyBQYW5lbENvbnRhaW5lciB9IGZyb20gXCIuLi9QYW5lbENvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgeyBSaWdodFBhbmVsVmFyaWFudCB9IGZyb20gXCIuLi8tdHlwZXNcIjtcblxuLy8gQnVpbHQtaW4gc2xvdDogb2Zmc2V0cyB0aGUgcGFuZWwgY29udGVudCBieSB0aGUgc3VibmF2LW9mZnNldCB2YXIgKDAgd2hlblxuLy8gdW5zZXQpLCB0cmFuc2l0aW9uZWQgd2l0aCB0aGUgdGhlbWUncyBgbmF2U2xpZGVgIHRpbWluZyDigJQgc28gdGhlIHJpZ2h0IHBhbmVsXG4vLyB0cmFja3MgYSBzdGlja3kgc3VibmF2IHdpdGggbm8gd2lyaW5nIG9uIHRoZSBjb25zdW1lcidzIHNpZGUuXG5jb25zdCBTdHlsZWRSaWdodFBhbmVsU2xvdCA9IHN0eWxlZC5kaXYoKHsgdGhlbWUgfSkgPT4gKHtcbiAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgbGVmdDogMCxcbiAgcmlnaHQ6IDAsXG4gIGJvdHRvbTogMCxcbiAgdG9wOiBgdmFyKCR7U1VCTkFWX09GRlNFVF9WQVJ9LCAwcHgpYCxcbiAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gIHRyYW5zaXRpb246IGB0b3AgJHt0aGVtZS52YXJpYWJsZXMuYW5pbWF0aW9uLm5hdlNsaWRlLm9wZW4uZHVyYXRpb259ICR7dGhlbWUudmFyaWFibGVzLmFuaW1hdGlvbi5uYXZTbGlkZS5vcGVuLnRpbWluZ0Z1bmN0aW9ufWAsXG59KSk7XG5cbmV4cG9ydCB0eXBlIFJpZ2h0UGFuZWxEb2NrZWRQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbiAgaXNWaXNpYmxlOiBib29sZWFuO1xuICAvKiogRG9ja2VkIGNvbHVtbiB2cy4gbWluaW1pemVkIGZsb2F0aW5nIHdpbmRvdyAtIG9ubHkgdGhlIGJvcmRlciBkaWZmZXJzIGhlcmUuICovXG4gIHZhcmlhbnQ6IFJpZ2h0UGFuZWxWYXJpYW50O1xuICBcImFyaWEtbGFiZWxcIjogc3RyaW5nO1xuICBzY3JvbGxDb250YWluZXJSZWY/OiBSZWFjdC5SZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBvblNjcm9sbD86IFJlYWN0LlVJRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50Pjtcbn07XG5cbi8qKlxuICogRG9ja2VkIChkZXNrdG9wKSByaWdodCBwYW5lbC4gUG9ydGFscyBpdHMgY29udGVudCBpbnRvIHRoZSBgcmlnaHRQYW5lbGAgc2xvdCdzXG4gKiBob3N0IC0gYW4gaW4tZmxvdywgcmVzaXphYmxlIGNvbHVtbiAtIHdoaWxlIHRoZSBwYW5lbCBpcyB2aXNpYmxlLiBDb250ZW50IGxpdmVzXG4gKiBpbiBhIHtAbGluayBQYW5lbENvbnRhaW5lcn0gc28gYExheW91dC5SaWdodFBhbmVsSGVhZGVyYCAvXG4gKiBgTGF5b3V0LlJpZ2h0UGFuZWxGb290ZXJgIGNoaWxkcmVuIHN0aWNrIHRvIHRoZSBlZGdlcy4gVGhlIG1vYmlsZSBwcmVzZW50YXRpb25cbiAqIGlzIHtAbGluayBSaWdodFBhbmVsU2hlZXR9OyBgUmlnaHRQYW5lbGAgcGlja3MgYmV0d2VlbiB0aGUgdHdvIGJ5IGJyZWFrcG9pbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBSaWdodFBhbmVsRG9ja2VkOiBSZWFjdC5GQzxSaWdodFBhbmVsRG9ja2VkUHJvcHM+ID0gKHtcbiAgY2hpbGRyZW4sXG4gIGlzVmlzaWJsZSxcbiAgdmFyaWFudCxcbiAgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbCxcbiAgc2Nyb2xsQ29udGFpbmVyUmVmLFxuICBvblNjcm9sbCxcbn0pID0+XG4gIHVzZUxheW91dFBvcnRhbChcbiAgICBTbG90LnJpZ2h0UGFuZWwsXG4gICAgaXNWaXNpYmxlID8gKFxuICAgICAgPFN0eWxlZFJpZ2h0UGFuZWxTbG90PlxuICAgICAgICA8UGFuZWxDb250YWluZXJcbiAgICAgICAgICBhcmlhLWxhYmVsPXthcmlhTGFiZWx9XG4gICAgICAgICAgc2Nyb2xsQ29udGFpbmVyUmVmPXtzY3JvbGxDb250YWluZXJSZWZ9XG4gICAgICAgICAgb25TY3JvbGw9e29uU2Nyb2xsfVxuICAgICAgICAgIC8vIFRoZSBsZWZ0IGJvcmRlciBzZXBhcmF0ZXMgdGhlIGRvY2tlZCBjb2x1bW4gZnJvbSB0aGUgY29udGVudDsgdGhlXG4gICAgICAgICAgLy8gZmxvYXRpbmcgd2luZG93IGhhcyBpdHMgb3duIGJvcmRlciwgc28gZHJvcCBpdCB0aGVyZS5cbiAgICAgICAgICBzaG93Qm9yZGVyTGVmdD17dmFyaWFudCAhPT0gXCJmbG9hdFwifVxuICAgICAgICA+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L1BhbmVsQ29udGFpbmVyPlxuICAgICAgPC9TdHlsZWRSaWdodFBhbmVsU2xvdD5cbiAgICApIDogbnVsbFxuICApO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVU2QiJ9 */");export const RightPanelDocked=({children,isVisible,variant,"aria-label":ariaLabel,scrollContainerRef,onScroll})=>useLayoutPortal(Slot.rightPanel,isVisible?React.createElement(StyledRightPanelSlot,null,React.createElement(PanelContainer,{"aria-label":ariaLabel,scrollContainerRef:scrollContainerRef,onScroll:onScroll,showBorderLeft:"float"!==variant},children)):null);
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import type { RightPanelHeaderProps } from "../-types";
|
|
3
3
|
/**
|
|
4
|
-
* Optional sticky header for `Layout.RightPanel` - place it among the
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* into the
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
4
|
+
* Optional sticky header for `Layout.RightPanel` - place it among the panel's
|
|
5
|
+
* children; it sticks to the top while the rest of the content scrolls. Renders
|
|
6
|
+
* the `title` block after `leftSlot` and buttons at the header end (after
|
|
7
|
+
* `rightSlot`): a close button that hides the panel, plus a variant toggle
|
|
8
|
+
* that minimizes the panel into the float / docks it back - shown
|
|
9
|
+
* only when `slotProps.variantButton` is supplied, which is what opts the panel
|
|
10
|
+
* into floating at all. While floating (desktop only - the
|
|
11
|
+
* mobile sheet never mounts the float), the whole header becomes a
|
|
12
|
+
* `LayoutFloatDragHandle`; `leftSlot`, `rightSlot`, and the built-in buttons
|
|
13
|
+
* are each wrapped in `LayoutFloatDragHandle.Guard` so their own click/arrow-key
|
|
14
|
+
* behavior keeps working even though a drag can start on them. On mobile
|
|
15
|
+
* viewports the panel renders as a bottom sheet where dock/float has no meaning
|
|
16
|
+
* and the sheet brings its own dismiss affordances, so the variant toggle is
|
|
17
|
+
* omitted there too.
|
|
14
18
|
*/
|
|
15
19
|
export declare function RightPanelHeader({ leftSlot, rightSlot, title, slotProps, "data-e2e-test-id": dataE2eTestId, }: RightPanelHeaderProps): React.ReactElement;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React from"react";import{Slot}from"../-constants";import{useLayout}from"../useLayout";import{useBreakpoints}from"../../../shared/useBreakpoints";import{Sandwich}from"../../Internal/Sandwich/Sandwich";import{PanelHeader}from"../../Internal/PanelHeader/PanelHeader";import{PictogramButton}from"../../PictogramButton/PictogramButton";export function RightPanelHeader({leftSlot,rightSlot,title,slotProps,"data-e2e-test-id":dataE2eTestId}){let{hide,setVariant,state}=useLayout()[Slot.rightPanel],{isMobile}=useBreakpoints(),isFloating="float"===state.variant;return React.createElement(Sandwich.Header,{"data-e2e-test-id":dataE2eTestId},React.createElement(PanelHeader,{leftSlot:leftSlot,title:title,rightSlot:React.createElement(React.Fragment,null,rightSlot,!isMobile&&React.createElement(
|
|
1
|
+
import React from"react";import{Slot}from"../-constants";import{useLayout}from"../useLayout";import{useBreakpoints}from"../../../shared/useBreakpoints";import{Sandwich}from"../../Internal/Sandwich/Sandwich";import{PanelHeader}from"../../Internal/PanelHeader/PanelHeader";import{PictogramButton}from"../../PictogramButton/PictogramButton";import{Inline}from"../../Inline/Inline";import{LayoutFloatDragHandle}from"../../Internal/LayoutFloat/LayoutFloatDragHandle";export function RightPanelHeader({leftSlot,rightSlot,title,slotProps,"data-e2e-test-id":dataE2eTestId}){let{hide,setVariant,state}=useLayout()[Slot.rightPanel],{isMobile}=useBreakpoints(),isFloating="float"===state.variant,variantButtonSlotProps=slotProps.variantButton;return React.createElement(Sandwich.Header,{"data-e2e-test-id":dataE2eTestId},React.createElement(LayoutFloatDragHandle,{isDraggable:isFloating,"aria-label":slotProps.dragHandle?.["aria-label"]},React.createElement(PanelHeader,{leftSlot:React.createElement(LayoutFloatDragHandle.Guard,null,leftSlot),title:title,rightSlot:React.createElement(React.Fragment,null,React.createElement(LayoutFloatDragHandle.Guard,null,rightSlot),!isMobile&&React.createElement(LayoutFloatDragHandle.Guard,null,React.createElement(Inline,{space:"xxs",vAlignItems:"center",noWrap:!0},variantButtonSlotProps&&React.createElement(PictogramButton,{icon:isFloating?"open-sidebar-right":"minimize",size:"s",variant:"tertiary","aria-label":isFloating?variantButtonSlotProps.dockLabel:variantButtonSlotProps.minimizeLabel,onClick:()=>setVariant(isFloating?"sidebar":"float")}),React.createElement(PictogramButton,{icon:"x",size:"s",variant:"tertiary","aria-label":slotProps.closeButton["aria-label"],onClick:hide}))))})))}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export type RightPanelSheetProps = {
|
|
3
|
+
children: React.ReactNode;
|
|
4
|
+
isVisible: boolean;
|
|
5
|
+
hide: () => void;
|
|
6
|
+
"aria-label": string;
|
|
7
|
+
scrollContainerRef?: React.Ref<HTMLDivElement>;
|
|
8
|
+
onScroll?: React.UIEventHandler<HTMLDivElement>;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Mobile right panel. Renders its content as a bottom {@link Sheet} instead of an
|
|
12
|
+
* in-flow column - the Sheet portals itself, so the layout portal is bypassed
|
|
13
|
+
* here. Visibility is the shared `rightPanel` layout state, so `useLayout()`
|
|
14
|
+
* drives it identically to the docked desktop panel; outside-click / backdrop
|
|
15
|
+
* dismissal routes back through `hide`. Initial focus is suppressed so opening
|
|
16
|
+
* the sheet never pops the on-screen keyboard.
|
|
17
|
+
*/
|
|
18
|
+
export declare const RightPanelSheet: React.FC<RightPanelSheetProps>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import React from"react";import styled from"@emotion/styled";import{PanelContainer}from"../PanelContainer";import{Sheet,SHEET_MAX_HEIGHT}from"../../Sheet/Sheet";let StyledSheetPanelShell=styled("div",{target:"e1wbhy260",label:"StyledSheetPanelShell"})({height:SHEET_MAX_HEIGHT},"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3JjL2NvbXBvbmVudHMvTGF5b3V0L1JpZ2h0UGFuZWwvUmlnaHRQYW5lbFNoZWV0LnRzeCIsInNvdXJjZXMiOlsic3JjL2NvbXBvbmVudHMvTGF5b3V0L1JpZ2h0UGFuZWwvUmlnaHRQYW5lbFNoZWV0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgc3R5bGVkIGZyb20gXCJAZW1vdGlvbi9zdHlsZWRcIjtcbmltcG9ydCB7IFBhbmVsQ29udGFpbmVyIH0gZnJvbSBcIi4uL1BhbmVsQ29udGFpbmVyXCI7XG5pbXBvcnQgeyBTaGVldCwgU0hFRVRfTUFYX0hFSUdIVCB9IGZyb20gXCIuLi8uLi9TaGVldC9TaGVldFwiO1xuXG4vLyBHaXZlcyB0aGUgcGFuZWwgc2hlbGwgYSBkZWZpbml0ZSBoZWlnaHQgaW5zaWRlIHRoZSBTaGVldCAod2hpY2ggb25seSBjYXBzXG4vLyBpdHMgY29udGVudCBhdCBTSEVFVF9NQVhfSEVJR0hUKS4gV2l0aCB0aGUgaGVpZ2h0IGJvdW5kZWQsIHRoZSBTYW5kd2ljaFxuLy8gaW5zaWRlIFBhbmVsQ29udGFpbmVyIHNjcm9sbHMgaXRzIGJvZHkgcmVnaW9uIGl0c2VsZiwgc29cbi8vIGBMYXlvdXQuUmlnaHRQYW5lbEhlYWRlcmAgLyBgTGF5b3V0LlJpZ2h0UGFuZWxGb290ZXJgIHN0aWNrIHRvIHRoZSBzaGVldFxuLy8gZWRnZXMgZXhhY3RseSBhcyB0aGV5IGRvIGluIHRoZSBkb2NrZWQgcGFuZWwuXG5jb25zdCBTdHlsZWRTaGVldFBhbmVsU2hlbGwgPSBzdHlsZWQuZGl2KHtcbiAgaGVpZ2h0OiBTSEVFVF9NQVhfSEVJR0hULFxufSk7XG5cbmV4cG9ydCB0eXBlIFJpZ2h0UGFuZWxTaGVldFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICBpc1Zpc2libGU6IGJvb2xlYW47XG4gIGhpZGU6ICgpID0+IHZvaWQ7XG4gIFwiYXJpYS1sYWJlbFwiOiBzdHJpbmc7XG4gIHNjcm9sbENvbnRhaW5lclJlZj86IFJlYWN0LlJlZjxIVE1MRGl2RWxlbWVudD47XG4gIG9uU2Nyb2xsPzogUmVhY3QuVUlFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+O1xufTtcblxuLyoqXG4gKiBNb2JpbGUgcmlnaHQgcGFuZWwuIFJlbmRlcnMgaXRzIGNvbnRlbnQgYXMgYSBib3R0b20ge0BsaW5rIFNoZWV0fSBpbnN0ZWFkIG9mIGFuXG4gKiBpbi1mbG93IGNvbHVtbiAtIHRoZSBTaGVldCBwb3J0YWxzIGl0c2VsZiwgc28gdGhlIGxheW91dCBwb3J0YWwgaXMgYnlwYXNzZWRcbiAqIGhlcmUuIFZpc2liaWxpdHkgaXMgdGhlIHNoYXJlZCBgcmlnaHRQYW5lbGAgbGF5b3V0IHN0YXRlLCBzbyBgdXNlTGF5b3V0KClgXG4gKiBkcml2ZXMgaXQgaWRlbnRpY2FsbHkgdG8gdGhlIGRvY2tlZCBkZXNrdG9wIHBhbmVsOyBvdXRzaWRlLWNsaWNrIC8gYmFja2Ryb3BcbiAqIGRpc21pc3NhbCByb3V0ZXMgYmFjayB0aHJvdWdoIGBoaWRlYC4gSW5pdGlhbCBmb2N1cyBpcyBzdXBwcmVzc2VkIHNvIG9wZW5pbmdcbiAqIHRoZSBzaGVldCBuZXZlciBwb3BzIHRoZSBvbi1zY3JlZW4ga2V5Ym9hcmQuXG4gKi9cbmV4cG9ydCBjb25zdCBSaWdodFBhbmVsU2hlZXQ6IFJlYWN0LkZDPFJpZ2h0UGFuZWxTaGVldFByb3BzPiA9ICh7XG4gIGNoaWxkcmVuLFxuICBpc1Zpc2libGUsXG4gIGhpZGUsXG4gIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwsXG4gIHNjcm9sbENvbnRhaW5lclJlZixcbiAgb25TY3JvbGwsXG59KSA9PiAoXG4gIDxTaGVldFxuICAgIGlzVmlzaWJsZT17aXNWaXNpYmxlfVxuICAgIG9uQ2xvc2U9e2hpZGV9XG4gICAgaGFzQmFja2Ryb3BcbiAgICBkaXNtaXNzT25PdXRzaWRlQ2xpY2tcbiAgICBkaXNhYmxlSW5pdGlhbEZvY3VzXG4gID5cbiAgICA8U3R5bGVkU2hlZXRQYW5lbFNoZWxsPlxuICAgICAgPFBhbmVsQ29udGFpbmVyXG4gICAgICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgICAgICAgc2Nyb2xsQ29udGFpbmVyUmVmPXtzY3JvbGxDb250YWluZXJSZWZ9XG4gICAgICAgIG9uU2Nyb2xsPXtvblNjcm9sbH1cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9QYW5lbENvbnRhaW5lcj5cbiAgICA8L1N0eWxlZFNoZWV0UGFuZWxTaGVsbD5cbiAgPC9TaGVldD5cbik7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVThCIn0= */");export const RightPanelSheet=({children,isVisible,hide,"aria-label":ariaLabel,scrollContainerRef,onScroll})=>React.createElement(Sheet,{isVisible:isVisible,onClose:hide,hasBackdrop:!0,dismissOnOutsideClick:!0,disableInitialFocus:!0},React.createElement(StyledSheetPanelShell,null,React.createElement(PanelContainer,{"aria-label":ariaLabel,scrollContainerRef:scrollContainerRef,onScroll:onScroll},children)));
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export type ContentSplitBaseProps = {
|
|
3
|
+
children: React.ReactNode;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Base layer of the mobile split stack - the presentation `Layout.Content` takes
|
|
7
|
+
* while a `Layout.Split` is stacked over it. Portals into the layout-root stack
|
|
8
|
+
* host and wraps in a sliding layer, so content and the split view share one
|
|
9
|
+
* containing block and slide against each other regardless of where their
|
|
10
|
+
* markers sit in the tree. The overlay layer is {@link MobileSplitView}; the
|
|
11
|
+
* in-flow presentation is {@link ContentDocked}.
|
|
12
|
+
*/
|
|
13
|
+
export declare const ContentSplitBase: React.FC<ContentSplitBaseProps>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import React from"react";import{createPortal}from"react-dom";import{StyledMobileSplitSlideLayer}from"./StyledMobileSplitSlideLayer";import{useMobileSplitStack}from"./useMobileSplitStack";import{contentOffsetFor,useMobileSplitView}from"./useMobileSplitView";export const ContentSplitBase=({children})=>{let{isSplitViewActive}=useMobileSplitView(),{host}=useMobileSplitStack();return host?createPortal(React.createElement(StyledMobileSplitSlideLayer,{layer:"base",offset:contentOffsetFor(isSplitViewActive)},children),host):null};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { MobileSplitViewProps } from "../../-types";
|
|
3
|
+
/**
|
|
4
|
+
* Mobile presentation of `Layout.Split`: a full-area layer that slides in over
|
|
5
|
+
* the base `content` view and back out, without unmounting. Registers its
|
|
6
|
+
* presence so `content` knows to join the sliding stack, and portals into the
|
|
7
|
+
* layout-root stack host so the two views share one containing block regardless
|
|
8
|
+
* of the marker's depth. Whether it's in front is the `splitview` slot's
|
|
9
|
+
* visibility. Renders nothing on desktop.
|
|
10
|
+
*/
|
|
11
|
+
export declare const MobileSplitView: React.FC<MobileSplitViewProps>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import React,{useLayoutEffect}from"react";import{createPortal}from"react-dom";import{PanelContainer}from"../../PanelContainer";import{StyledMobileSplitSlideLayer}from"./StyledMobileSplitSlideLayer";import{useMobileSplitStack}from"./useMobileSplitStack";import{splitViewOffsetFor,useMobileSplitView,useMobileSplitViewEnabled}from"./useMobileSplitView";export const MobileSplitView=({children,"aria-label":ariaLabel})=>{let enabled=useMobileSplitViewEnabled(),{isSplitViewActive}=useMobileSplitView(),{host,registerSplit}=useMobileSplitStack();return(useLayoutEffect(()=>{if(enabled)return registerSplit()},[enabled,registerSplit]),enabled&&host)?createPortal(React.createElement(StyledMobileSplitSlideLayer,{layer:"overlay",offset:splitViewOffsetFor(isSplitViewActive)},React.createElement(PanelContainer,{"aria-label":ariaLabel},children)),host):null};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { MobileSplitViewOffset } from "./useMobileSplitView";
|
|
2
|
+
declare const LAYER_Z_INDEX: {
|
|
3
|
+
readonly base: 1;
|
|
4
|
+
readonly overlay: 2;
|
|
5
|
+
};
|
|
6
|
+
export type MobileSplitLayer = keyof typeof LAYER_Z_INDEX;
|
|
7
|
+
/**
|
|
8
|
+
* One layer of the two-view mobile split. Slides to `offset` - -1 (parked to the
|
|
9
|
+
* left), 0 (in view), 1 (parked to the right) - so switching pushes the outgoing
|
|
10
|
+
* view toward the side it rests on while the incoming one slides in from the
|
|
11
|
+
* opposite edge, like a Drawer.
|
|
12
|
+
*/
|
|
13
|
+
export declare const StyledMobileSplitSlideLayer: import("@emotion/styled").StyledComponent<{
|
|
14
|
+
theme?: import("@emotion/react").Theme;
|
|
15
|
+
as?: React.ElementType;
|
|
16
|
+
} & {
|
|
17
|
+
offset: MobileSplitViewOffset;
|
|
18
|
+
layer: MobileSplitLayer;
|
|
19
|
+
}, React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
|
|
20
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import styled from"@emotion/styled";let OFFSET_TRANSFORM={[-1]:"translateX(-100%)",0:"translateX(0)",1:"translateX(100%)"},LAYER_Z_INDEX={base:1,overlay:2};export const StyledMobileSplitSlideLayer=styled("div",{shouldForwardProp:prop=>"offset"!==prop&&"layer"!==prop,target:"e187cevn0",label:"StyledMobileSplitSlideLayer"})(({theme,offset,layer})=>{let{duration,timingFunction}=theme.variables.animation.navSlide.open;return{position:"absolute",inset:0,zIndex:LAYER_Z_INDEX[layer],transform:OFFSET_TRANSFORM[offset],transition:`transform ${duration} ${timingFunction}`,pointerEvents:0===offset?"auto":"none","@media (prefers-reduced-motion: reduce)":{transition:"none"}}},"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3JjL2NvbXBvbmVudHMvTGF5b3V0L1NwbGl0L01vYmlsZVNwbGl0Vmlldy9TdHlsZWRNb2JpbGVTcGxpdFNsaWRlTGF5ZXIudHN4Iiwic291cmNlcyI6WyJzcmMvY29tcG9uZW50cy9MYXlvdXQvU3BsaXQvTW9iaWxlU3BsaXRWaWV3L1N0eWxlZE1vYmlsZVNwbGl0U2xpZGVMYXllci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHN0eWxlZCBmcm9tIFwiQGVtb3Rpb24vc3R5bGVkXCI7XG5pbXBvcnQgdHlwZSB7IE1vYmlsZVNwbGl0Vmlld09mZnNldCB9IGZyb20gXCIuL3VzZU1vYmlsZVNwbGl0Vmlld1wiO1xuXG5jb25zdCBPRkZTRVRfVFJBTlNGT1JNOiBSZWNvcmQ8TW9iaWxlU3BsaXRWaWV3T2Zmc2V0LCBzdHJpbmc+ID0ge1xuICBbLTFdOiBcInRyYW5zbGF0ZVgoLTEwMCUpXCIsXG4gIDA6IFwidHJhbnNsYXRlWCgwKVwiLFxuICAxOiBcInRyYW5zbGF0ZVgoMTAwJSlcIixcbn07XG5cbi8vIFRoZSBzcGxpdCB2aWV3IChgb3ZlcmxheWApIHN0YWNrcyBhYm92ZSB0aGUgYmFzZSBgY29udGVudGAgdmlldyAoYGJhc2VgKS5cbmNvbnN0IExBWUVSX1pfSU5ERVggPSB7IGJhc2U6IDEsIG92ZXJsYXk6IDIgfSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIE1vYmlsZVNwbGl0TGF5ZXIgPSBrZXlvZiB0eXBlb2YgTEFZRVJfWl9JTkRFWDtcblxuLyoqXG4gKiBPbmUgbGF5ZXIgb2YgdGhlIHR3by12aWV3IG1vYmlsZSBzcGxpdC4gU2xpZGVzIHRvIGBvZmZzZXRgIC0gLTEgKHBhcmtlZCB0byB0aGVcbiAqIGxlZnQpLCAwIChpbiB2aWV3KSwgMSAocGFya2VkIHRvIHRoZSByaWdodCkgLSBzbyBzd2l0Y2hpbmcgcHVzaGVzIHRoZSBvdXRnb2luZ1xuICogdmlldyB0b3dhcmQgdGhlIHNpZGUgaXQgcmVzdHMgb24gd2hpbGUgdGhlIGluY29taW5nIG9uZSBzbGlkZXMgaW4gZnJvbSB0aGVcbiAqIG9wcG9zaXRlIGVkZ2UsIGxpa2UgYSBEcmF3ZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBTdHlsZWRNb2JpbGVTcGxpdFNsaWRlTGF5ZXIgPSBzdHlsZWQoXCJkaXZcIiwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogKHByb3ApID0+IHByb3AgIT09IFwib2Zmc2V0XCIgJiYgcHJvcCAhPT0gXCJsYXllclwiLFxufSk8eyBvZmZzZXQ6IE1vYmlsZVNwbGl0Vmlld09mZnNldDsgbGF5ZXI6IE1vYmlsZVNwbGl0TGF5ZXIgfT4oXG4gICh7IHRoZW1lLCBvZmZzZXQsIGxheWVyIH0pID0+IHtcbiAgICBjb25zdCB7IGR1cmF0aW9uLCB0aW1pbmdGdW5jdGlvbiB9ID1cbiAgICAgIHRoZW1lLnZhcmlhYmxlcy5hbmltYXRpb24ubmF2U2xpZGUub3BlbjtcbiAgICByZXR1cm4ge1xuICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgIGluc2V0OiAwLFxuICAgICAgekluZGV4OiBMQVlFUl9aX0lOREVYW2xheWVyXSxcbiAgICAgIHRyYW5zZm9ybTogT0ZGU0VUX1RSQU5TRk9STVtvZmZzZXRdLFxuICAgICAgdHJhbnNpdGlvbjogYHRyYW5zZm9ybSAke2R1cmF0aW9ufSAke3RpbWluZ0Z1bmN0aW9ufWAsXG4gICAgICBwb2ludGVyRXZlbnRzOiBvZmZzZXQgPT09IDAgPyBcImF1dG9cIiA6IFwibm9uZVwiLFxuICAgICAgXCJAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSlcIjogeyB0cmFuc2l0aW9uOiBcIm5vbmVcIiB9LFxuICAgIH07XG4gIH1cbik7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBbUIyQyJ9 */");
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type MobileSplitStackValue = {
|
|
2
|
+
/** The full-area DOM node at the layout root that hosts the mobile split
|
|
3
|
+
* stack. `null` until it mounts (and on desktop, where it isn't rendered). */
|
|
4
|
+
host: HTMLElement | null;
|
|
5
|
+
/** True while a mobile split view is mounted, so `content` knows to join the
|
|
6
|
+
* sliding stack (vs. staying in-flow). */
|
|
7
|
+
isSplitPresent: boolean;
|
|
8
|
+
/** Register a mounted split view; returns its unregister cleanup. */
|
|
9
|
+
registerSplit: () => () => void;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Everything the two-view mobile split shares, scoped to one `<Layout>`: the
|
|
13
|
+
* stack host to portal into and whether a split view is present. `content` and
|
|
14
|
+
* the split view read this to slide against each other inside one containing
|
|
15
|
+
* block, regardless of where their markers sit in the tree. *Which* view is in
|
|
16
|
+
* front isn't stored here - it derives from the `splitview` slot's visibility
|
|
17
|
+
* (see {@link useMobileSplitView}).
|
|
18
|
+
*/
|
|
19
|
+
export declare const MobileSplitStackContext: React.Context<MobileSplitStackValue>;
|
|
20
|
+
export declare const useMobileSplitStack: () => MobileSplitStackValue;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{createContext,useContext}from"react";export const MobileSplitStackContext=createContext(null);export const useMobileSplitStack=()=>{let context=useContext(MobileSplitStackContext);if(!context)throw Error("useMobileSplitStack must be used within a <Layout>.");return context};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** Whether the mobile split stack applies to the current viewport: below the
|
|
2
|
+
* mobile breakpoint with panels enabled. */
|
|
3
|
+
export declare function useMobileSplitViewEnabled(): boolean;
|
|
4
|
+
/** A view's horizontal rest position in the mobile stack: `-1` (parked off the
|
|
5
|
+
* left edge), `0` (in view), `1` (parked off the right edge). */
|
|
6
|
+
export type MobileSplitViewOffset = -1 | 0 | 1;
|
|
7
|
+
/** The base `content` view parks off the left edge while the split view is in
|
|
8
|
+
* front; otherwise it's in view. */
|
|
9
|
+
export declare const contentOffsetFor: (isSplitViewActive: boolean) => MobileSplitViewOffset;
|
|
10
|
+
/** The split view rests off the right edge until it's brought to the front. */
|
|
11
|
+
export declare const splitViewOffsetFor: (isSplitViewActive: boolean) => MobileSplitViewOffset;
|
|
12
|
+
export type MobileSplitViewValue = {
|
|
13
|
+
/** Whether the split view is in front of the base content view. */
|
|
14
|
+
isSplitViewActive: boolean;
|
|
15
|
+
/** Bring the split view to the front. */
|
|
16
|
+
showSplitView: () => void;
|
|
17
|
+
/** Return to the base content view. */
|
|
18
|
+
showContent: () => void;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Mobile control for the two-view split: read whether the split view is in front
|
|
22
|
+
* and switch between it and the base `content` view - wire your own button to
|
|
23
|
+
* `showSplitView` / `showContent`. Backed by the `splitview` slot's visibility
|
|
24
|
+
* (the same state the desktop column tracks), so the two presentations never
|
|
25
|
+
* disagree; on desktop this just shows/hides the column.
|
|
26
|
+
*/
|
|
27
|
+
export declare function useMobileSplitView(): MobileSplitViewValue;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{useBreakpoints}from"../../../../shared/useBreakpoints";import{Slot}from"../../-constants";import{useCanRenderPanel}from"../../context";import{useLayout}from"../../useLayout";export function useMobileSplitViewEnabled(){let{isMobile}=useBreakpoints(),canRenderPanel=useCanRenderPanel();return isMobile&&canRenderPanel}export const contentOffsetFor=isSplitViewActive=>isSplitViewActive?-1:0;export const splitViewOffsetFor=isSplitViewActive=>+!isSplitViewActive;export function useMobileSplitView(){let{isVisible,show,hide}=useLayout()[Slot.splitview];return{isSplitViewActive:isVisible,showSplitView:show,showContent:hide}}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import type { SplitProps } from "../-types";
|
|
3
3
|
/**
|
|
4
|
-
* Split view panel.
|
|
5
|
-
*
|
|
6
|
-
* `
|
|
7
|
-
*
|
|
4
|
+
* Split view panel. Picks its presentation by breakpoint: an in-flow resizable
|
|
5
|
+
* column on desktop ({@link SplitDocked}) and a full-area {@link MobileSplitView}
|
|
6
|
+
* that slides over `content` on mobile. Both are driven by the same state - the
|
|
7
|
+
* `splitview` slot's visibility (`useLayout().splitview` / `useMobileSplitView`)
|
|
8
|
+
* - so showing or hiding the split behaves identically on either breakpoint.
|
|
8
9
|
*/
|
|
9
10
|
export declare const Split: React.FC<SplitProps>;
|