{"version":3,"file":"Squishy_Sticky.BPNa890U.mjs","names":["clamp","useRef","useMemo","THREE.WebGLRenderer","THREE.Scene","THREE.PerspectiveCamera","THREE.ShaderMaterial","THREE.Vector2","THREE.Color","THREE.DoubleSide","THREE.Mesh","THREE.PlaneGeometry","THREE.TextureLoader","THREE.LinearFilter","_Fragment","THREE.DataTexture","useState","useRef"],"sources":["https:/framerusercontent.com/modules/Rl283tZgh3PFsheTfVdT/04CqjqZ4ZyqvarhMzulA/Paperunroll.js","https:/framerusercontent.com/modules/sK2Ozu4Gj83OIMqTGqCa/64L9I2tbHn2IOxp5nk1E/Squishy_Sticky.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{useRef,useMemo,useEffect}from\"react\";import{addPropertyControls,ControlType}from\"framer\";import*as THREE from\"three\";function mix(a,b,t){return a+(b-a)*t;}function makeNoiseTexture(scale){const baseFrequency=(.9/clamp(scale,40,220)).toFixed(4);const svg=`<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"180\" height=\"180\"><filter id=\"n\"><feTurbulence type=\"fractalNoise\" baseFrequency=\"${baseFrequency}\" numOctaves=\"3\" stitchTiles=\"stitch\"/><feColorMatrix type=\"saturate\" values=\"0\"/><feComponentTransfer><feFuncA type=\"table\" tableValues=\"0 0.95\"/></feComponentTransfer></filter><rect width=\"180\" height=\"180\" filter=\"url(#n)\"/></svg>`;return`url(\"data:image/svg+xml;utf8,${encodeURIComponent(svg)}\")`;}function makeDustTexture(){const svg=`<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"320\" height=\"320\"><rect width=\"320\" height=\"320\" fill=\"transparent\"/><g fill=\"white\" opacity=\"0.9\"><circle cx=\"24\" cy=\"54\" r=\"1.4\"/><circle cx=\"68\" cy=\"142\" r=\"1.2\"/><circle cx=\"130\" cy=\"92\" r=\"1.8\"/><circle cx=\"202\" cy=\"48\" r=\"1.1\"/><circle cx=\"278\" cy=\"84\" r=\"1.6\"/><circle cx=\"294\" cy=\"198\" r=\"1.2\"/><circle cx=\"186\" cy=\"246\" r=\"1.5\"/><circle cx=\"76\" cy=\"280\" r=\"1.8\"/><circle cx=\"145\" cy=\"300\" r=\"1.1\"/></g><g stroke=\"white\" stroke-linecap=\"round\" opacity=\"0.6\"><line x1=\"35\" y1=\"210\" x2=\"52\" y2=\"230\" stroke-width=\"0.7\"/><line x1=\"248\" y1=\"22\" x2=\"260\" y2=\"41\" stroke-width=\"0.6\"/><line x1=\"278\" y1=\"248\" x2=\"294\" y2=\"266\" stroke-width=\"0.7\"/><line x1=\"112\" y1=\"30\" x2=\"120\" y2=\"44\" stroke-width=\"0.5\"/></g></svg>`;return`url(\"data:image/svg+xml;utf8,${encodeURIComponent(svg)}\")`;}function getLookRecipe(visuals){const look=visuals.look;const strength=clamp(visuals.strength/100,0,1);const warmth=visuals.warmth/100;const fade=visuals.fade/100;const softness=visuals.softness/100;const isVision=look===\"vision\";let recipe={brightness:100,contrast:100,saturate:100,sepia:0,hue:0,wash:\"none\",washOpacity:0,highlight:\"none\",highlightOpacity:0,vignetteBase:.1};switch(look){case\"hasselblad\":recipe={brightness:101,contrast:108,saturate:95,sepia:6,hue:-2,wash:\"linear-gradient(180deg, rgba(242,224,198,0.22), rgba(182,204,224,0.07) 55%, rgba(39,53,74,0.14))\",washOpacity:.24,highlight:\"radial-gradient(120% 85% at 50% 10%, rgba(255,241,224,0.45), rgba(255,241,224,0) 52%)\",highlightOpacity:.16,vignetteBase:.18};break;case\"fujifilm\":recipe={brightness:102,contrast:104,saturate:103,sepia:10,hue:-6,wash:\"linear-gradient(180deg, rgba(248,221,170,0.23), rgba(172,195,157,0.09) 58%, rgba(72,86,94,0.12))\",washOpacity:.26,highlight:\"radial-gradient(130% 90% at 50% 12%, rgba(255,244,214,0.48), rgba(255,244,214,0) 54%)\",highlightOpacity:.15,vignetteBase:.16};break;case\"leica\":recipe={brightness:99,contrast:112,saturate:92,sepia:5,hue:2,wash:\"linear-gradient(180deg, rgba(241,225,206,0.18), rgba(120,106,96,0.06) 44%, rgba(24,25,31,0.16))\",washOpacity:.22,highlight:\"radial-gradient(120% 80% at 50% 8%, rgba(255,246,237,0.38), rgba(255,246,237,0) 48%)\",highlightOpacity:.1,vignetteBase:.2};break;case\"dreamy\":recipe={brightness:104,contrast:92,saturate:94,sepia:12,hue:-8,wash:\"linear-gradient(180deg, rgba(255,226,211,0.28), rgba(196,208,233,0.14) 56%, rgba(84,90,112,0.1))\",washOpacity:.3,highlight:\"radial-gradient(120% 90% at 50% 16%, rgba(255,248,240,0.58), rgba(255,248,240,0) 58%)\",highlightOpacity:.22,vignetteBase:.12};break;case\"vision\":recipe={brightness:101,contrast:95,saturate:88,sepia:18,hue:-4,wash:\"linear-gradient(180deg, rgba(247,220,185,0.28), rgba(209,185,150,0.18) 46%, rgba(84,74,66,0.16))\",washOpacity:.34,highlight:\"radial-gradient(120% 90% at 50% 14%, rgba(255,241,222,0.46), rgba(255,241,222,0) 56%)\",highlightOpacity:.12,vignetteBase:.16};break;}const visionVintage=clamp(visuals.visionVintage/100,0,1);const baseStrength=isVision?1:strength;const brightness=mix(100,recipe.brightness,baseStrength);const contrast=mix(100,recipe.contrast,baseStrength);const saturate=mix(100,recipe.saturate,baseStrength);const sepia=mix(0,recipe.sepia,baseStrength)+warmth*10+(isVision?visionVintage*16:0);const hue=mix(0,recipe.hue,baseStrength)-warmth*4;const blur=softness*1.8+(look===\"dreamy\"?baseStrength*.8:0);const washOpacity=recipe.washOpacity*baseStrength+warmth*.08+(isVision?visionVintage*.12:0);const highlightOpacity=recipe.highlightOpacity*baseStrength+softness*.08;const vignetteOpacity=clamp(isVision?visuals.visionVignette/100:recipe.vignetteBase*baseStrength+visuals.vignette/100,0,.7);const fadeOpacity=clamp(isVision?visionVintage*.4:fade*.45,0,.45);return{canvasFilter:`brightness(${brightness}%) contrast(${contrast}%) saturate(${saturate}%) sepia(${sepia}%) hue-rotate(${hue}deg) blur(${blur}px)`,washBackground:recipe.wash,washOpacity,highlightBackground:recipe.highlight,highlightOpacity,vignetteOpacity,fadeOpacity,grainAmount:isVision?clamp(visuals.visionGrain/100,0,1):visuals.noiseEnabled?clamp(visuals.noiseAmount/100,0,1):0,dustAmount:isVision?clamp(visuals.visionDust/100,0,1):0};}// ─── Helpers ──────────────────────────────────────────────────────────────────\nfunction clamp(v,min=0,max=1){return Math.min(max,Math.max(min,v));}const DUMMY_TEX=new THREE.DataTexture(new Uint8Array([255,255,255,255]),1,1);DUMMY_TEX.needsUpdate=true;// ─── Vertex Shader (Diagonal Shrinking Cylinder) ──────────────────────────────\nconst VERT=/* glsl */`\n    precision highp float;\n\n    uniform float uProgress;\n    uniform vec2  uDir;\n    uniform float uMinD;\n    uniform float uMaxD;\n\n    varying vec2  vUv;\n    varying vec3  vViewNormal;\n    varying float vCurlAmt;\n\n    #define PI 3.14159265358979\n\n    void main() {\n        vUv = uv;\n\n        float d = dot(position.xy, uDir);\n        float L = uMaxD - uMinD;\n        float foldPos = uMinD + uProgress * L;\n        float dist = d - foldPos;\n\n        vec3 pos  = position;\n        vec3 norm = vec3(0.0, 0.0, 1.0);\n\n        if (dist > 0.0) {\n            float rolledLength = uMaxD - foldPos;\n            float r = max(0.0001, rolledLength / (2.0 * PI));\n            float theta = dist / r;\n\n            float newD = foldPos + r * sin(theta);\n            float newZ = r * (1.0 - cos(theta));\n\n            pos.xy += uDir * (newD - d);\n            pos.z += newZ;\n            norm = vec3(-uDir.x * sin(theta), -uDir.y * sin(theta), cos(theta));\n\n            vCurlAmt = clamp(dist / max(0.0001, rolledLength), 0.0, 1.0);\n        } else {\n            vCurlAmt = 0.0;\n        }\n\n        vViewNormal = normalMatrix * norm;\n        gl_Position = projectionMatrix * modelViewMatrix * vec4(pos, 1.0);\n    }\n`;// ─── Fragment Shader (Volume & Shadows) ───────────────────────────────────────\nconst FRAG=/* glsl */`\n    precision mediump float;\n\n    uniform sampler2D uTex;\n    uniform float     uHasTex;\n    uniform vec3      uPageColor;\n    uniform vec3      uRollColor;   // color of the rolled-up paper (back face)\n    uniform float     uImgAspect;   // image width / height\n    uniform float     uPlaneAspect; // plane width / height\n\n    varying vec2  vUv;\n    varying vec3  vViewNormal;\n    varying float vCurlAmt;\n\n    void main() {\n        vec3 LIGHT = normalize(vec3(-0.4, 0.7, 1.0));\n\n        vec4 base = vec4(uPageColor, 1.0);\n\n        if (uHasTex > 0.5) {\n            // COVER FIT: scale the image so it fills the whole plane while\n            // preserving its aspect ratio. Whichever image dimension would\n            // overflow gets cropped (centered), so there is never any white\n            // space AND the image is never squeezed or stretched.\n            vec2 imgUV = vUv;\n            if (uImgAspect > uPlaneAspect) {\n                // Image is wider than plane → crop horizontally.\n                float s = uPlaneAspect / max(0.0001, uImgAspect);\n                imgUV.x = vUv.x * s + (1.0 - s) * 0.5;\n            } else {\n                // Image is taller than plane → crop vertically.\n                float s = uImgAspect / max(0.0001, uPlaneAspect);\n                imgUV.y = vUv.y * s + (1.0 - s) * 0.5;\n            }\n            base = texture2D(uTex, imgUV);\n        } else {\n            float lineV = fract(vUv.y * 35.0);\n            float lineW = smoothstep(0.03, 0.0, lineV);\n            vec3 lineCol = mix(uPageColor, vec3(0.4, 0.6, 0.9), 0.35);\n            base.rgb = mix(base.rgb, lineCol, lineW);\n\n            float marginV = abs(vUv.x - 0.12);\n            float marginW = smoothstep(0.005, 0.0, marginV);\n            base.rgb = mix(base.rgb, vec3(0.8, 0.3, 0.3), marginW * 0.5);\n        }\n\n        vec3 col = base.rgb;\n\n        // Back face = the rolled/underside of the paper. Uses the user-\n        // configurable uRollColor instead of a derived grey so the rolled\n        // cylinder can be tinted independently of the paper's page color.\n        bool front = gl_FrontFacing;\n        if (!front) {\n            col = uRollColor;\n        }\n\n        vec3 N = normalize(vViewNormal);\n        if (!front) N = -N;\n\n        float NdotL = max(dot(N, LIGHT), 0.0);\n        float light = 0.5 + 0.5 * NdotL;\n\n        float specular = 0.0;\n        if (!front && vCurlAmt > 0.0) {\n            vec3 H = normalize(LIGHT + vec3(0.0, 0.0, 1.0));\n            float spec = pow(max(dot(N, H), 0.0), 45.0);\n            specular = spec * 0.4;\n        }\n\n        gl_FragColor = vec4(col * light + specular, base.a);\n    }\n`;// ─── React Component ──────────────────────────────────────────────────────────\nexport default function DiagonalUnroll({bgType=\"color\",bgColor=\"#141414\",bgImage=\"\",bgComponent,pageColor=\"#FAF9F6\",rollColor=\"#9A9A9A\",imageURL=\"\",paperFit=\"stretch\",imageURLLaptop=\"\",imageURLTablet=\"\",imageURLMobile=\"\",mobileBreakpoint=768,tabletBreakpoint=1024,rollAngle=45,scrollHeight=1500,previewProgress=-1,visuals={look:\"none\",strength:60,noiseEnabled:true,noiseAmount:14,noiseScale:40,vignette:0,softness:0,warmth:0,fade:0,visionGrain:48,visionDust:0,visionVignette:16,visionVintage:40}}){const wrapperRef=useRef(null);const mountRef=useRef(null);const lookRecipe=useMemo(()=>getLookRecipe(visuals),[visuals]);const noiseTexture=useMemo(()=>makeNoiseTexture(visuals.noiseScale||100),[visuals.noiseScale]);const dustTexture=useMemo(()=>makeDustTexture(),[]);const progRef=useRef(previewProgress);useEffect(()=>{progRef.current=previewProgress;},[previewProgress]);useEffect(()=>{const mount=mountRef.current;const wrapper=wrapperRef.current;if(!mount||!wrapper)return;let disposed=false;let rafId=0;let smoothP=0;let last=performance.now();let loadedTex=null;let geo=null;const renderer=new THREE.WebGLRenderer({antialias:true,alpha:true});renderer.setPixelRatio(Math.min(window.devicePixelRatio||1,2));renderer.setClearColor(0,0);Object.assign(renderer.domElement.style,{position:\"absolute\",inset:\"0\",pointerEvents:\"none\",filter:\"drop-shadow(-15px 25px 20px rgba(0,0,0,0.5))\"});mount.appendChild(renderer.domElement);const scene=new THREE.Scene;const camera=new THREE.PerspectiveCamera(45,1,.1,5e3);const material=new THREE.ShaderMaterial({vertexShader:VERT,fragmentShader:FRAG,uniforms:{uProgress:{value:0},uMinD:{value:0},uMaxD:{value:1},uDir:{value:new THREE.Vector2(1,1).normalize()},uTex:{value:DUMMY_TEX},uHasTex:{value:0},uPageColor:{value:new THREE.Color(pageColor)},uRollColor:{value:new THREE.Color(rollColor)},uImgAspect:{value:1},uPlaneAspect:{value:1}},side:THREE.DoubleSide});const mesh=new THREE.Mesh(new THREE.PlaneGeometry(1,1,192,192),material);mesh.frustumCulled=false;scene.add(mesh);const resize=()=>{const w=mount.clientWidth||1;const h=mount.clientHeight||1;renderer.setSize(w,h,false);geo?.dispose();geo=new THREE.PlaneGeometry(w,h,192,192);mesh.geometry=geo;const angle=rollAngle*(Math.PI/180);const dirX=Math.cos(angle);const dirY=Math.sin(angle);material.uniforms.uDir.value.set(dirX,dirY);const p1=-w/2*dirX+-h/2*dirY;const p2=w/2*dirX+-h/2*dirY;const p3=-w/2*dirX+h/2*dirY;const p4=w/2*dirX+h/2*dirY;material.uniforms.uMinD.value=Math.min(p1,p2,p3,p4);material.uniforms.uMaxD.value=Math.max(p1,p2,p3,p4);camera.aspect=w/h;camera.position.z=h/2/Math.tan(45*Math.PI/180/2);camera.updateProjectionMatrix();// Plane aspect ratio for the fragment shader's pin-top-right math.\nmaterial.uniforms.uPlaneAspect.value=w/h;};const ro=new ResizeObserver(resize);ro.observe(mount);resize();// ─── Paper image loading (stretch / manual) ─────────────────────\n//\n// • stretch → single image, cover-fit in the fragment shader so it\n//             preserves aspect ratio at any viewport (no squeeze,\n//             no stretch, no white space).\n// • manual  → three user-supplied images (mobile / tablet / laptop)\n//             selected automatically by window.innerWidth and swapped\n//             live when the user crosses a breakpoint. Each chosen\n//             image is still cover-fit in the shader so even if the\n//             user supplies an image that doesn't perfectly match\n//             the device, it stays undistorted.\nconst loader=new THREE.TextureLoader;loader.setCrossOrigin(\"anonymous\");const getActiveURL=()=>{if(paperFit===\"manual\"){if(typeof window===\"undefined\"){return imageURLLaptop||\"\";}const w=window.innerWidth;const mb=mobileBreakpoint||768;const tb=tabletBreakpoint||1024;if(w<mb)return imageURLMobile||\"\";if(w<tb)return imageURLTablet||\"\";return imageURLLaptop||\"\";}return imageURL||\"\";};let currentLoadedURL=\"\";const loadActive=()=>{const url=getActiveURL();if(url===currentLoadedURL)return;currentLoadedURL=url;if(!url){material.uniforms.uHasTex.value=0;return;}loader.load(url,tex=>{if(disposed)return;tex.colorSpace=THREE.SRGBColorSpace;tex.minFilter=THREE.LinearFilter;tex.magFilter=THREE.LinearFilter;tex.generateMipmaps=false;// Replace and dispose the previous texture to avoid leaks\n// when the manual breakpoint swaps images back and forth.\nconst prev=loadedTex;loadedTex=tex;material.uniforms.uTex.value=tex;material.uniforms.uHasTex.value=1;const iw=tex.image&&tex.image.width||1;const ih=tex.image&&tex.image.height||1;material.uniforms.uImgAspect.value=iw/ih;if(prev&&prev!==tex)prev.dispose();});};loadActive();// In manual mode we need to react to window width changes so we can\n// swap laptop ↔ mobile images when the user crosses the breakpoint.\nconst onWindowResize=()=>{if(paperFit===\"manual\")loadActive();};window.addEventListener(\"resize\",onWindowResize);// Progress is derived from the wrapper's ACTUAL on-page scroll range\n// (wrapperHeight − viewportHeight). This is viewport-independent, so\n// the component always fills exactly the slot Framer allocated to it\n// and the next section sits flush against it — no overlap, no gap.\nconst computeProgress=()=>{if(progRef.current>=0)return progRef.current;const rect=wrapper.getBoundingClientRect();const viewportH=window.innerHeight||1;// Finish the roll slightly before the sticky zone ends so the\n// paper is fully unrolled by the time the next section appears.\nconst scrollRange=Math.max(1,(rect.height-viewportH)*.9);return clamp(-rect.top/scrollRange);};const animate=now=>{if(disposed)return;const dt=Math.min((now-last)/1e3,.05);last=now;const raw=computeProgress();smoothP+=(raw-smoothP)*(1-Math.exp(-dt*12));material.uniforms.uProgress.value=smoothP;renderer.render(scene,camera);rafId=requestAnimationFrame(animate);};rafId=requestAnimationFrame(animate);return()=>{disposed=true;cancelAnimationFrame(rafId);ro.disconnect();window.removeEventListener(\"resize\",onWindowResize);loadedTex?.dispose();geo?.dispose();material.dispose();renderer.dispose();if(mount.contains(renderer.domElement)){mount.removeChild(renderer.domElement);}};},[pageColor,rollColor,imageURL,rollAngle,paperFit,imageURLLaptop,imageURLTablet,imageURLMobile,mobileBreakpoint,tabletBreakpoint]);return /*#__PURE__*/_jsx(\"div\",{ref:wrapperRef,style:{width:\"100%\",// Fill exactly the height Framer gives this component on the\n// canvas. The user controls scroll duration by resizing the\n// component in Framer (taller = longer scroll). This prevents\n// the wrapper from ever exceeding its allotted slot, which was\n// the cause of the next section overlapping.\nheight:\"100%\",position:\"relative\"},children:/*#__PURE__*/_jsxs(\"div\",{style:{position:\"sticky\",top:0,width:\"100%\",height:\"100vh\",overflow:\"hidden\"},children:[/*#__PURE__*/_jsxs(\"div\",{style:{position:\"absolute\",inset:0,zIndex:0},children:[bgType===\"color\"&&/*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:\"100%\",backgroundColor:bgColor}}),bgType===\"image\"&&bgImage&&/*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:\"100%\",backgroundImage:`url(${bgImage})`,backgroundSize:\"cover\",backgroundPosition:\"center\"}}),bgType===\"component\"&&/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",inset:0,display:\"flex\",alignItems:\"stretch\",justifyContent:\"stretch\"},children:bgComponent})]}),/*#__PURE__*/_jsx(\"div\",{ref:mountRef,style:{position:\"absolute\",inset:0,zIndex:1,pointerEvents:\"none\",filter:visuals.look!==\"none\"?lookRecipe.canvasFilter:undefined}}),visuals.look!==\"none\"&&/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",inset:0,zIndex:2,background:lookRecipe.washBackground,mixBlendMode:\"soft-light\",opacity:lookRecipe.washOpacity,pointerEvents:\"none\"}}),/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",inset:0,zIndex:2,background:lookRecipe.highlightBackground,mixBlendMode:\"screen\",opacity:lookRecipe.highlightOpacity,pointerEvents:\"none\"}}),lookRecipe.fadeOpacity>0&&/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",inset:0,zIndex:2,background:\"rgba(245,237,225,1)\",mixBlendMode:\"screen\",opacity:lookRecipe.fadeOpacity,pointerEvents:\"none\"}}),lookRecipe.vignetteOpacity>0&&/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",inset:0,zIndex:2,background:\"radial-gradient(ellipse at center, rgba(0,0,0,0) 52%, rgba(0,0,0,0.12) 74%, rgba(0,0,0,0.42) 100%)\",mixBlendMode:\"multiply\",opacity:lookRecipe.vignetteOpacity,pointerEvents:\"none\"}}),lookRecipe.grainAmount>0&&/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",inset:0,zIndex:2,backgroundImage:noiseTexture,backgroundSize:`${clamp(visuals.noiseScale,40,220)}px ${clamp(visuals.noiseScale,40,220)}px`,mixBlendMode:\"soft-light\",opacity:lookRecipe.grainAmount*.55,pointerEvents:\"none\"}}),lookRecipe.dustAmount>0&&/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",inset:0,zIndex:2,backgroundImage:dustTexture,backgroundSize:\"320px 320px\",mixBlendMode:\"screen\",opacity:lookRecipe.dustAmount*.7,pointerEvents:\"none\"}})]})]})});}// ─── Framer Property Controls ─────────────────────────────────────────────────\naddPropertyControls(DiagonalUnroll,{bgType:{type:ControlType.Enum,title:\"Background (Underneath)\",options:[\"color\",\"image\",\"component\"],optionTitles:[\"Solid Color\",\"Image\",\"Framer Component\"],defaultValue:\"color\"},bgColor:{type:ControlType.Color,title:\"↳ Color\",defaultValue:\"#1a1a1a\",hidden(props){return props.bgType!==\"color\";}},bgImage:{type:ControlType.Image,title:\"↳ Image\",hidden(props){return props.bgType!==\"image\";}},bgComponent:{type:ControlType.ComponentInstance,title:\"↳ Component\",hidden(props){return props.bgType!==\"component\";}},previewProgress:{type:ControlType.Number,title:\"Preview Roll\",defaultValue:-1,min:-1,max:1,step:.01,displayStepper:true,description:\"Set to -1 for live scroll. Use 0 to 1 to inspect the 3D cylinder.\"},rollAngle:{type:ControlType.Number,title:\"Unroll Target Angle\",defaultValue:45,min:0,max:360},pageColor:{type:ControlType.Color,title:\"Paper Base Color\",defaultValue:\"#FAF9F6\"},rollColor:{type:ControlType.Color,title:\"Roll Color\",defaultValue:\"#9A9A9A\",description:\"Color of the rolled-up paper cylinder (the back/underside of the page as it curls).\"},imageURL:{type:ControlType.Image,title:\"Paper Image\",hidden(props){return props.paperFit===\"manual\";}},paperFit:{type:ControlType.Enum,title:\"Paper Image Adaptive\",options:[\"stretch\",\"manual\"],optionTitles:[\"Auto (Cover)\",\"Manual (Device Images)\"],defaultValue:\"stretch\",description:\"Auto cover-fits a single image to any viewport while preserving its aspect ratio. Manual lets you supply dedicated images for mobile / tablet / laptop which are swapped automatically by window width.\"},imageURLLaptop:{type:ControlType.Image,title:\"↳ Laptop Image\",hidden(props){return props.paperFit!==\"manual\";}},imageURLTablet:{type:ControlType.Image,title:\"↳ Tablet Image\",hidden(props){return props.paperFit!==\"manual\";}},imageURLMobile:{type:ControlType.Image,title:\"↳ Mobile Image\",hidden(props){return props.paperFit!==\"manual\";}},tabletBreakpoint:{type:ControlType.Number,title:\"↳ Tablet Below\",defaultValue:1024,min:480,max:1600,step:1,unit:\"px\",description:\"Widths below this value use the Tablet image (and below Mobile Below they use the Mobile image).\",hidden(props){return props.paperFit!==\"manual\";}},mobileBreakpoint:{type:ControlType.Number,title:\"↳ Mobile Below\",defaultValue:768,min:320,max:1440,step:1,unit:\"px\",hidden(props){return props.paperFit!==\"manual\";}},visuals:{type:ControlType.Object,title:\"Visuals\",controls:{look:{type:ControlType.Enum,title:\"Look\",options:[\"none\",\"hasselblad\",\"fujifilm\",\"leica\",\"dreamy\",\"vision\"],optionTitles:[\"None\",\"Hasselblad\",\"Fujifilm\",\"Leica\",\"Dreamy\",\"Vision\"],defaultValue:\"none\"},strength:{type:ControlType.Number,title:\"Strength\",min:0,max:100,step:1,defaultValue:60,hidden:v=>v.look===\"vision\"||v.look===\"none\"},noiseEnabled:{type:ControlType.Boolean,title:\"Noise\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\",hidden:v=>v.look===\"vision\"||v.look===\"none\"},noiseAmount:{type:ControlType.Number,title:\"Noise Amt\",min:0,max:100,step:1,defaultValue:14,hidden:v=>v.look===\"vision\"||v.look===\"none\"||!v.noiseEnabled},noiseScale:{type:ControlType.Number,title:\"Noise Size\",min:40,max:220,step:1,defaultValue:40,hidden:v=>v.look===\"none\"||v.look!==\"vision\"&&!v.noiseEnabled},vignette:{type:ControlType.Number,title:\"Vignette\",min:0,max:100,step:1,defaultValue:0,hidden:v=>v.look===\"vision\"||v.look===\"none\"},softness:{type:ControlType.Number,title:\"Softness\",min:0,max:100,step:1,defaultValue:0,hidden:v=>v.look===\"none\"},warmth:{type:ControlType.Number,title:\"Warmth\",min:-100,max:100,step:1,defaultValue:0,hidden:v=>v.look===\"vision\"||v.look===\"none\"},fade:{type:ControlType.Number,title:\"Fade\",min:0,max:100,step:1,defaultValue:0,hidden:v=>v.look===\"vision\"||v.look===\"none\"},visionGrain:{type:ControlType.Number,title:\"Kuji Grain\",min:0,max:100,step:1,defaultValue:48,hidden:v=>v.look!==\"vision\"},visionDust:{type:ControlType.Number,title:\"Kuji Dust\",min:0,max:100,step:1,defaultValue:0,hidden:v=>v.look!==\"vision\"},visionVignette:{type:ControlType.Number,title:\"Kuji Vign\",min:0,max:100,step:1,defaultValue:16,hidden:v=>v.look!==\"vision\"},visionVintage:{type:ControlType.Number,title:\"Kuji Vintage\",min:0,max:100,step:1,defaultValue:40,hidden:v=>v.look!==\"vision\"}}},scrollHeight:{type:ControlType.Number,title:\"Scroll Duration\",defaultValue:1500,min:500,max:5e3,step:100,unit:\"px\",description:\"Legacy control. Scroll duration is now controlled by the component's HEIGHT on the Framer canvas — make it taller for a longer unroll. A good starting point is 100vh + this value.\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"DiagonalUnroll\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Paperunroll.map","import{jsx as _jsx}from\"react/jsx-runtime\";import{forwardRef,useEffect,useLayoutEffect,useRef,useState}from\"react\";const ORIGINAL_PATH_HEIGHT=1456.5;const SQUISHED_PATH_HEIGHT=699;const MIN_HEIGHT_RATIO=SQUISHED_PATH_HEIGHT/ORIGINAL_PATH_HEIGHT;const DEFAULT_SCROLL_DISTANCE=700;const STRETCHED_PATH_HEIGHT=2425;const MAX_HEIGHT_RATIO=STRETCHED_PATH_HEIGHT/ORIGINAL_PATH_HEIGHT;const SMOOTHING_FACTOR=.08;const BLURRED_SVG_MASK=`url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-300 -300 2400 2600' preserveAspectRatio='none'%3E%3Cfilter id='blur' x='-50%25' y='-50%25' width='200%25' height='200%25'%3E%3CfeGaussianBlur stdDeviation='100' /%3E%3C/filter%3E%3Cpath fill='white' filter='url(%23blur)' d='M 83.221 1456.5 C -140.094 996.244 82.862 0 790.319 0 C 1497.776 0 1750.934 934.096 1497.319 1456.5 C 1243.704 1978.904 306.537 1916.756 83.221 1456.5 Z'/%3E%3C/svg%3E\")`;const BLURRED_STRETCH_SVG_MASK=`url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-300 -300 2400 3000' preserveAspectRatio='none'%3E%3Cfilter id='blur' x='-50%25' y='-50%25' width='200%25' height='200%25'%3E%3CfeGaussianBlur stdDeviation='100' /%3E%3C/filter%3E%3Cpath fill='white' filter='url(%23blur)' d='M 0 1456.5 C -0.045 850.25 148.142 0 855.599 0 C 1563.056 0 1710.955 850.25 1711.001 1456.5 C 1711.046 2062.75 1294.214 2425 855.78 2425 C 417.346 2425 0.045 2062.75 0 1456.5 Z'/%3E%3C/svg%3E\")`;function clamp(value,min=0,max=1){return Math.min(max,Math.max(min,value));}function easeOutCubic(value){return 1-Math.pow(1-value,3);}function parsePixelHeight(value){if(typeof value===\"number\"&&Number.isFinite(value))return value;if(typeof value===\"string\"){const match=value.match(/^(-?\\d+(?:\\.\\d+)?)px$/);if(match)return Number(match[1]);}return null;}function getDocumentTop(element){let top=0;let current=element;while(current){top+=current.offsetTop;current=current.offsetParent;}return top;}function createHideAfterScroll(limit){return function(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const[isVisible,setIsVisible]=useState(true);useEffect(()=>{const updateVisibility=()=>{setIsVisible(window.scrollY<=limit);};updateVisibility();window.addEventListener(\"scroll\",updateVisibility,{passive:true});return()=>{window.removeEventListener(\"scroll\",updateVisibility);};},[]);return /*#__PURE__*/_jsx(Component,{ref:ref,...props,style:{...props.style,opacity:isVisible?1:0,visibility:isVisible?\"visible\":\"hidden\",pointerEvents:\"none\"}});});};}export const HideAfter1000=createHideAfterScroll(1e3);export const HideAfter1500=createHideAfterScroll(1500);export const HideAfter2000=createHideAfterScroll(2e3);export const HideAfter2500=createHideAfterScroll(2500);export const HideAfter3000=createHideAfterScroll(3e3);// 1. OPTION ONE: Sticky + Squishy SVG Mask\nexport function StickySquishOnScroll(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const trackRef=useRef(null);const stickyRef=useRef(null);const initialHeight=parsePixelHeight(props?.style?.height)??ORIGINAL_PATH_HEIGHT;const[baseHeight,setBaseHeight]=useState(initialHeight);const triggerTopRef=useRef(0);const targetHeightRef=useRef(initialHeight);const currentHeightRef=useRef(initialHeight);const rafRef=useRef(0);useLayoutEffect(()=>{const explicitHeight=parsePixelHeight(props?.style?.height);if(explicitHeight!==null){setBaseHeight(explicitHeight);targetHeightRef.current=explicitHeight;currentHeightRef.current=explicitHeight;return;}if(!stickyRef.current)return;const measuredHeight=stickyRef.current.getBoundingClientRect().height;if(measuredHeight>0){setBaseHeight(measuredHeight);targetHeightRef.current=measuredHeight;currentHeightRef.current=measuredHeight;}},[props?.style?.height]);useEffect(()=>{if(!trackRef.current||!stickyRef.current)return;const updateTriggerTop=()=>{if(!trackRef.current)return;triggerTopRef.current=getDocumentTop(trackRef.current);};const renderLoop=()=>{currentHeightRef.current+=(targetHeightRef.current-currentHeightRef.current)*SMOOTHING_FACTOR;if(stickyRef.current){stickyRef.current.style.height=`${currentHeightRef.current}px`;}if(Math.abs(targetHeightRef.current-currentHeightRef.current)>.5){rafRef.current=window.requestAnimationFrame(renderLoop);}else{currentHeightRef.current=targetHeightRef.current;if(stickyRef.current)stickyRef.current.style.height=`${currentHeightRef.current}px`;rafRef.current=0;}};const onScroll=()=>{const progress=clamp((window.scrollY-triggerTopRef.current)/DEFAULT_SCROLL_DISTANCE);const easedProgress=easeOutCubic(progress);const nextHeight=baseHeight*(1-(1-MIN_HEIGHT_RATIO)*easedProgress);targetHeightRef.current=nextHeight;if(!rafRef.current){rafRef.current=window.requestAnimationFrame(renderLoop);}};setTimeout(()=>{updateTriggerTop();onScroll();},50);window.addEventListener(\"scroll\",onScroll,{passive:true});window.addEventListener(\"resize\",()=>{updateTriggerTop();onScroll();});return()=>{if(rafRef.current)window.cancelAnimationFrame(rafRef.current);window.removeEventListener(\"scroll\",onScroll);window.removeEventListener(\"resize\",updateTriggerTop);};},[baseHeight]);const{style,...restProps}=props;const trackStyle={position:style?.position||\"relative\",top:style?.top,left:style?.left,right:style?.right,bottom:style?.bottom,transform:style?.transform,width:style?.width||\"100%\",gridArea:style?.gridArea,zIndex:style?.zIndex,height:baseHeight+DEFAULT_SCROLL_DISTANCE,overflow:\"visible\",pointerEvents:\"none\"};const stickyWrapperStyle={position:\"sticky\",top:0,width:\"100%\",height:baseHeight,overflow:\"hidden\",maskImage:BLURRED_SVG_MASK,WebkitMaskImage:BLURRED_SVG_MASK,maskRepeat:\"no-repeat\",WebkitMaskRepeat:\"no-repeat\",maskPosition:\"center top\",WebkitMaskPosition:\"center top\",maskSize:\"100% 100%\",WebkitMaskSize:\"100% 100%\",willChange:\"height, mask-image\",pointerEvents:\"auto\"};const componentStyle={...style,position:\"relative\",top:0,left:0,right:\"auto\",bottom:\"auto\",transform:\"none\",width:\"100%\",height:\"100%\"};return /*#__PURE__*/_jsx(\"div\",{ref:trackRef,style:trackStyle,children:/*#__PURE__*/_jsx(\"div\",{ref:stickyRef,style:stickyWrapperStyle,children:/*#__PURE__*/_jsx(Component,{ref:ref,...restProps,style:componentStyle})})});});}// 2. OPTION TWO: Sticky Only\nexport function StickyOnly(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const trackRef=useRef(null);const stickyRef=useRef(null);const initialHeight=parsePixelHeight(props?.style?.height)??ORIGINAL_PATH_HEIGHT;const[baseHeight,setBaseHeight]=useState(initialHeight);useLayoutEffect(()=>{const explicitHeight=parsePixelHeight(props?.style?.height);if(explicitHeight!==null){setBaseHeight(explicitHeight);return;}if(!stickyRef.current)return;const measuredHeight=stickyRef.current.getBoundingClientRect().height;if(measuredHeight>0){setBaseHeight(measuredHeight);}},[props?.style?.height]);const{style,...restProps}=props;const trackStyle={position:style?.position||\"relative\",top:style?.top,left:style?.left,right:style?.right,bottom:style?.bottom,transform:style?.transform,width:style?.width||\"100%\",gridArea:style?.gridArea,zIndex:style?.zIndex,height:baseHeight+DEFAULT_SCROLL_DISTANCE,overflow:\"visible\",pointerEvents:\"none\"};const stickyWrapperStyle={position:\"sticky\",top:0,width:\"100%\",height:baseHeight,overflow:\"hidden\",pointerEvents:\"auto\"};const componentStyle={...style,position:\"relative\",top:0,left:0,right:\"auto\",bottom:\"auto\",transform:\"none\",width:\"100%\",height:\"100%\"};return /*#__PURE__*/_jsx(\"div\",{ref:trackRef,style:trackStyle,children:/*#__PURE__*/_jsx(\"div\",{ref:stickyRef,style:stickyWrapperStyle,children:/*#__PURE__*/_jsx(Component,{ref:ref,...restProps,style:componentStyle})})});});}// 3. OPTION THREE: Sticky + Stretch SVG Mask (FIXED)\nexport function StickyStretchOnScroll(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const trackRef=useRef(null);const stickyRef=useRef(null);const innerRef=useRef(null);const initialHeight=parsePixelHeight(props?.style?.height)??ORIGINAL_PATH_HEIGHT;const[baseHeight,setBaseHeight]=useState(initialHeight);const triggerTopRef=useRef(0);const targetRatioRef=useRef(1);const currentRatioRef=useRef(1);const rafRef=useRef(0);useLayoutEffect(()=>{const explicitHeight=parsePixelHeight(props?.style?.height);if(explicitHeight!==null){setBaseHeight(explicitHeight);return;}if(!stickyRef.current)return;const measuredHeight=stickyRef.current.getBoundingClientRect().height;if(measuredHeight>0){setBaseHeight(measuredHeight);}},[props?.style?.height]);useEffect(()=>{if(!trackRef.current||!stickyRef.current)return;const updateTriggerTop=()=>{if(!trackRef.current)return;triggerTopRef.current=getDocumentTop(trackRef.current);};const renderLoop=()=>{currentRatioRef.current+=(targetRatioRef.current-currentRatioRef.current)*SMOOTHING_FACTOR;if(innerRef.current){innerRef.current.style.transform=`scaleY(${currentRatioRef.current})`;}if(Math.abs(targetRatioRef.current-currentRatioRef.current)>.001){rafRef.current=window.requestAnimationFrame(renderLoop);}else{currentRatioRef.current=targetRatioRef.current;if(innerRef.current)innerRef.current.style.transform=`scaleY(${currentRatioRef.current})`;rafRef.current=0;}};const onScroll=()=>{const progress=clamp((window.scrollY-triggerTopRef.current)/DEFAULT_SCROLL_DISTANCE);const easedProgress=easeOutCubic(progress);const nextRatio=1+(MAX_HEIGHT_RATIO-1)*easedProgress;targetRatioRef.current=nextRatio;if(!rafRef.current){rafRef.current=window.requestAnimationFrame(renderLoop);}};setTimeout(()=>{updateTriggerTop();onScroll();},50);window.addEventListener(\"scroll\",onScroll,{passive:true});window.addEventListener(\"resize\",()=>{updateTriggerTop();onScroll();});return()=>{if(rafRef.current)window.cancelAnimationFrame(rafRef.current);window.removeEventListener(\"scroll\",onScroll);window.removeEventListener(\"resize\",updateTriggerTop);};},[baseHeight]);const{style,...restProps}=props;const trackStyle={position:style?.position||\"relative\",top:style?.top,left:style?.left,right:style?.right,bottom:style?.bottom,transform:style?.transform,width:style?.width||\"100%\",gridArea:style?.gridArea,zIndex:style?.zIndex,height:baseHeight+DEFAULT_SCROLL_DISTANCE,overflow:\"visible\",pointerEvents:\"none\"};const stickyWrapperStyle={position:\"sticky\",top:0,width:\"100%\",height:baseHeight,overflow:\"hidden\",maskImage:BLURRED_STRETCH_SVG_MASK,WebkitMaskImage:BLURRED_STRETCH_SVG_MASK,maskRepeat:\"no-repeat\",WebkitMaskRepeat:\"no-repeat\",maskPosition:\"center top\",WebkitMaskPosition:\"center top\",maskSize:\"100% 100%\",WebkitMaskSize:\"100% 100%\",pointerEvents:\"auto\"};const innerWrapperStyle={width:\"100%\",height:\"100%\",transformOrigin:\"top center\",transform:\"scaleY(1)\",willChange:\"transform\"};const componentStyle={...style,position:\"relative\",top:0,left:0,right:\"auto\",bottom:\"auto\",transform:\"none\",width:\"100%\",height:\"100%\"};return /*#__PURE__*/_jsx(\"div\",{ref:trackRef,style:trackStyle,children:/*#__PURE__*/_jsx(\"div\",{ref:stickyRef,style:stickyWrapperStyle,children:/*#__PURE__*/_jsx(\"div\",{ref:innerRef,style:innerWrapperStyle,children:/*#__PURE__*/_jsx(Component,{ref:ref,...restProps,style:componentStyle})})})});});}// 4. OPTION FOUR: Absolutely nothing happens\nexport function NoEffect(Component){return /*#__PURE__*/forwardRef((props,ref)=>{return /*#__PURE__*/_jsx(Component,{ref:ref,...props});});}\nexport const __FramerMetadata__ = {\"exports\":{\"HideAfter1500\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"HideAfter3000\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"HideAfter2000\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"StickyOnly\":{\"type\":\"reactHoc\",\"name\":\"StickyOnly\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"HideAfter2500\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"HideAfter1000\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"NoEffect\":{\"type\":\"reactHoc\",\"name\":\"NoEffect\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"StickySquishOnScroll\":{\"type\":\"reactHoc\",\"name\":\"StickySquishOnScroll\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"StickyStretchOnScroll\":{\"type\":\"reactHoc\",\"name\":\"StickyStretchOnScroll\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Squishy_Sticky.map"],"mappings":"6WAA2M,SAAS,EAAI,EAAE,EAAE,EAAE,CAAC,OAAO,GAAG,EAAE,GAAG,EAAG,SAAS,EAAiB,EAAM,CAAyD,IAAM,EAAI,qIAA7C,GAAGA,EAAM,EAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,CAA6J,2OAA2O,MAAM,gCAAgC,mBAAmB,EAAI,CAAC,IAAK,SAAS,GAAiB,CAA2wB,MAAM,22CAA6D,SAAS,EAAc,EAAQ,CAAC,IAAM,EAAK,EAAQ,KAAW,EAASA,EAAM,EAAQ,SAAS,IAAI,EAAE,EAAE,CAAO,EAAO,EAAQ,OAAO,IAAU,EAAK,EAAQ,KAAK,IAAU,EAAS,EAAQ,SAAS,IAAU,EAAS,IAAO,SAAa,EAAO,CAAC,WAAW,IAAI,SAAS,IAAI,SAAS,IAAI,MAAM,EAAE,IAAI,EAAE,KAAK,OAAO,YAAY,EAAE,UAAU,OAAO,iBAAiB,EAAE,aAAa,GAAG,CAAC,OAAO,EAAP,CAAa,IAAI,aAAa,EAAO,CAAC,WAAW,IAAI,SAAS,IAAI,SAAS,GAAG,MAAM,EAAE,IAAI,GAAG,KAAK,mGAAmG,YAAY,IAAI,UAAU,wFAAwF,iBAAiB,IAAI,aAAa,IAAI,CAAC,MAAM,IAAI,WAAW,EAAO,CAAC,WAAW,IAAI,SAAS,IAAI,SAAS,IAAI,MAAM,GAAG,IAAI,GAAG,KAAK,mGAAmG,YAAY,IAAI,UAAU,wFAAwF,iBAAiB,IAAI,aAAa,IAAI,CAAC,MAAM,IAAI,QAAQ,EAAO,CAAC,WAAW,GAAG,SAAS,IAAI,SAAS,GAAG,MAAM,EAAE,IAAI,EAAE,KAAK,kGAAkG,YAAY,IAAI,UAAU,uFAAuF,iBAAiB,GAAG,aAAa,GAAG,CAAC,MAAM,IAAI,SAAS,EAAO,CAAC,WAAW,IAAI,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,mGAAmG,YAAY,GAAG,UAAU,wFAAwF,iBAAiB,IAAI,aAAa,IAAI,CAAC,MAAM,IAAI,SAAS,EAAO,CAAC,WAAW,IAAI,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,mGAAmG,YAAY,IAAI,UAAU,wFAAwF,iBAAiB,IAAI,aAAa,IAAI,CAAC,MAAO,IAAM,EAAcA,EAAM,EAAQ,cAAc,IAAI,EAAE,EAAE,CAAO,EAAa,EAAS,EAAE,EAAe,EAAW,EAAI,IAAI,EAAO,WAAW,EAAa,CAAO,EAAS,EAAI,IAAI,EAAO,SAAS,EAAa,CAAO,EAAS,EAAI,IAAI,EAAO,SAAS,EAAa,CAAO,EAAM,EAAI,EAAE,EAAO,MAAM,EAAa,CAAC,EAAO,IAAI,EAAS,EAAc,GAAG,GAAS,EAAI,EAAI,EAAE,EAAO,IAAI,EAAa,CAAC,EAAO,EAAQ,EAAK,EAAS,KAAK,IAAO,SAAS,EAAa,GAAG,GAAS,EAAY,EAAO,YAAY,EAAa,EAAO,KAAK,EAAS,EAAc,IAAI,GAAS,EAAiB,EAAO,iBAAiB,EAAa,EAAS,IAAU,EAAgBA,EAAM,EAAS,EAAQ,eAAe,IAAI,EAAO,aAAa,EAAa,EAAQ,SAAS,IAAI,EAAE,GAAG,CAAO,EAAYA,EAAM,EAAS,EAAc,GAAG,EAAK,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,cAAc,EAAW,cAAc,EAAS,cAAc,EAAS,WAAW,EAAM,gBAAgB,EAAI,YAAY,EAAK,KAAK,eAAe,EAAO,KAAK,cAAY,oBAAoB,EAAO,UAAU,mBAAiB,kBAAgB,cAAY,YAAY,EAASA,EAAM,EAAQ,YAAY,IAAI,EAAE,EAAE,CAAC,EAAQ,aAAaA,EAAM,EAAQ,YAAY,IAAI,EAAE,EAAE,CAAC,EAAE,WAAW,EAASA,EAAM,EAAQ,WAAW,IAAI,EAAE,EAAE,CAAC,EAAE,CACn4J,SAASA,EAAM,EAAE,EAAI,EAAE,EAAI,EAAE,CAAC,OAAO,KAAK,IAAI,EAAI,KAAK,IAAI,EAAI,EAAE,CAAC,CAuHlE,SAAwB,EAAe,CAAC,SAAO,QAAQ,UAAQ,UAAU,UAAQ,GAAG,cAAY,YAAU,UAAU,YAAU,UAAU,WAAS,GAAG,WAAS,UAAU,iBAAe,GAAG,iBAAe,GAAG,iBAAe,GAAG,mBAAiB,IAAI,mBAAiB,KAAK,YAAU,GAAG,eAAa,KAAK,kBAAgB,GAAG,UAAQ,CAAC,KAAK,OAAO,SAAS,GAAG,aAAa,GAAK,YAAY,GAAG,WAAW,GAAG,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,GAAG,WAAW,EAAE,eAAe,GAAG,cAAc,GAAG,EAAE,CAAC,IAAM,EAAWC,EAAO,KAAK,CAAO,EAASA,EAAO,KAAK,CAAO,EAAWC,MAAY,EAAc,EAAQ,CAAC,CAAC,EAAQ,CAAC,CAAO,EAAaA,MAAY,EAAiB,EAAQ,YAAY,IAAI,CAAC,CAAC,EAAQ,WAAW,CAAC,CAAO,EAAYA,MAAY,GAAiB,CAAC,EAAE,CAAC,CAAO,EAAQD,EAAO,EAAgB,CAsBO,OAtBN,MAAc,CAAC,EAAQ,QAAQ,GAAkB,CAAC,EAAgB,CAAC,CAAC,MAAc,CAAC,IAAM,EAAM,EAAS,QAAc,EAAQ,EAAW,QAAQ,GAAG,CAAC,GAAO,CAAC,EAAQ,OAAO,IAAI,EAAS,GAAU,EAAM,EAAM,EAAQ,EAAM,EAAK,YAAY,KAAK,CAAK,EAAU,KAAS,EAAI,KAAW,EAAS,IAAIE,EAAoB,CAAC,UAAU,GAAK,MAAM,GAAK,CAAC,CAAC,EAAS,cAAc,KAAK,IAAI,EAAO,kBAAkB,EAAE,EAAE,CAAC,CAAC,EAAS,cAAc,EAAE,EAAE,CAAC,OAAO,OAAO,EAAS,WAAW,MAAM,CAAC,SAAS,WAAW,MAAM,IAAI,cAAc,OAAO,OAAO,+CAA+C,CAAC,CAAC,EAAM,YAAY,EAAS,WAAW,CAAC,IAAM,EAAM,IAAIC,EAAkB,EAAO,IAAIC,EAAwB,GAAG,EAAE,GAAG,IAAI,CAAO,EAAS,IAAIC,EAAqB,CAAC,aAAa,EAAK,eAAe,EAAK,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,IAAIC,EAAc,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,MAAM,EAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,MAAM,IAAIC,EAAY,EAAU,CAAC,CAAC,WAAW,CAAC,MAAM,IAAIA,EAAY,EAAU,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,KAAKC,EAAiB,CAAC,CAAO,EAAK,IAAIC,EAAW,IAAIC,EAAoB,EAAE,EAAE,IAAI,IAAI,CAAC,EAAS,CAAC,EAAK,cAAc,GAAM,EAAM,IAAI,EAAK,CAAC,IAAM,MAAW,CAAC,IAAM,EAAE,EAAM,aAAa,EAAQ,EAAE,EAAM,cAAc,EAAE,EAAS,QAAQ,EAAE,EAAE,GAAM,CAAC,GAAK,SAAS,CAAC,EAAI,IAAIA,EAAoB,EAAE,EAAE,IAAI,IAAI,CAAC,EAAK,SAAS,EAAI,IAAM,EAAM,GAAW,KAAK,GAAG,KAAW,EAAK,KAAK,IAAI,EAAM,CAAO,EAAK,KAAK,IAAI,EAAM,CAAC,EAAS,SAAS,KAAK,MAAM,IAAI,EAAK,EAAK,CAAC,IAAM,EAAG,CAAC,EAAE,EAAE,EAAK,CAAC,EAAE,EAAE,EAAW,EAAG,EAAE,EAAE,EAAK,CAAC,EAAE,EAAE,EAAW,EAAG,CAAC,EAAE,EAAE,EAAK,EAAE,EAAE,EAAW,EAAG,EAAE,EAAE,EAAK,EAAE,EAAE,EAAK,EAAS,SAAS,MAAM,MAAM,KAAK,IAAI,EAAG,EAAG,EAAG,EAAG,CAAC,EAAS,SAAS,MAAM,MAAM,KAAK,IAAI,EAAG,EAAG,EAAG,EAAG,CAAC,EAAO,OAAO,EAAE,EAAE,EAAO,SAAS,EAAE,EAAE,EAAE,KAAK,IAAI,GAAG,KAAK,GAAG,IAAI,EAAE,CAAC,EAAO,wBAAwB,CAChlF,EAAS,SAAS,aAAa,MAAM,EAAE,GAAU,EAAG,IAAI,eAAe,EAAO,CAAC,EAAG,QAAQ,EAAM,CAAC,GAAQ,CAWzG,IAAM,EAAO,IAAIC,EAAoB,EAAO,eAAe,YAAY,CAAC,IAAM,MAAiB,CAAC,GAAG,IAAW,SAAS,CAAC,GAAU,IAAS,OAAa,OAAO,GAAgB,GAAI,IAAM,EAAE,EAAO,WAA8I,OAAjE,GAAzD,GAAkB,KAAmD,GAAgB,GAAM,GAA5D,GAAkB,MAAsD,GAAgB,GAAU,GAAgB,GAAI,OAAO,GAAU,IAAS,EAAiB,GAAS,MAAe,CAAC,IAAM,EAAI,GAAc,CAAI,OAAM,EAA6C,IAArB,EAAiB,EAAO,CAAC,EAAI,CAAC,EAAS,SAAS,QAAQ,MAAM,EAAE,OAAQ,EAAO,KAAK,EAAI,GAAK,CAAC,GAAG,EAAS,OAAO,EAAI,WAAW,IAAA,GAAqB,EAAI,UAAUC,EAAmB,EAAI,UAAUA,EAAmB,EAAI,gBAAgB,GAEptB,IAAM,EAAK,EAAU,EAAU,EAAI,EAAS,SAAS,KAAK,MAAM,EAAI,EAAS,SAAS,QAAQ,MAAM,EAAE,IAAM,EAAG,EAAI,OAAO,EAAI,MAAM,OAAO,EAAQ,EAAG,EAAI,OAAO,EAAI,MAAM,QAAQ,EAAE,EAAS,SAAS,WAAW,MAAM,EAAG,EAAM,GAAM,IAAO,GAAI,EAAK,SAAS,EAAG,GAAG,GAAY,CAElR,IAAM,MAAmB,CAAI,IAAW,UAAS,GAAY,EAAG,EAAO,iBAAiB,SAAS,EAAe,CAIhH,IAAM,MAAoB,CAAC,GAAG,EAAQ,SAAS,EAAE,OAAO,EAAQ,QAAQ,IAAM,EAAK,EAAQ,uBAAuB,CAAO,EAAU,EAAO,aAAa,EAEjJ,EAAY,KAAK,IAAI,GAAG,EAAK,OAAO,GAAW,GAAG,CAAC,OAAOb,EAAM,CAAC,EAAK,IAAI,EAAY,EAAS,EAAQ,GAAK,CAAC,GAAG,EAAS,OAAO,IAAM,EAAG,KAAK,KAAK,EAAI,GAAM,IAAI,IAAI,CAAC,EAAK,EAAI,IAAM,EAAI,GAAiB,CAAC,IAAU,EAAI,IAAU,EAAE,KAAK,IAAI,CAAC,EAAG,GAAG,EAAE,EAAS,SAAS,UAAU,MAAM,EAAQ,EAAS,OAAO,EAAM,EAAO,CAAC,EAAM,sBAAsB,EAAQ,EAAwC,MAArC,GAAM,sBAAsB,EAAQ,KAAW,CAAC,EAAS,GAAK,qBAAqB,EAAM,CAAC,EAAG,YAAY,CAAC,EAAO,oBAAoB,SAAS,EAAe,CAAC,GAAW,SAAS,CAAC,GAAK,SAAS,CAAC,EAAS,SAAS,CAAC,EAAS,SAAS,CAAI,EAAM,SAAS,EAAS,WAAW,EAAE,EAAM,YAAY,EAAS,WAAW,GAAM,CAAC,EAAU,EAAU,EAAS,EAAU,EAAS,EAAe,EAAe,EAAe,EAAiB,EAAiB,CAAC,CAAqB,EAAK,MAAM,CAAC,IAAI,EAAW,MAAM,CAAC,MAAM,OAKt2B,OAAO,OAAO,SAAS,WAAW,CAAC,SAAsB,EAAM,MAAM,CAAC,MAAM,CAAC,SAAS,SAAS,IAAI,EAAE,MAAM,OAAO,OAAO,QAAQ,SAAS,SAAS,CAAC,SAAS,CAAc,EAAM,MAAM,CAAC,MAAM,CAAC,SAAS,WAAW,MAAM,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC,IAAS,SAAsB,EAAK,MAAM,CAAC,MAAM,CAAC,MAAM,OAAO,OAAO,OAAO,gBAAgB,EAAQ,CAAC,CAAC,CAAC,IAAS,SAAS,GAAsB,EAAK,MAAM,CAAC,MAAM,CAAC,MAAM,OAAO,OAAO,OAAO,gBAAgB,OAAO,EAAQ,GAAG,eAAe,QAAQ,mBAAmB,SAAS,CAAC,CAAC,CAAC,IAAS,aAA0B,EAAK,MAAM,CAAC,MAAM,CAAC,SAAS,WAAW,MAAM,EAAE,QAAQ,OAAO,WAAW,UAAU,eAAe,UAAU,CAAC,SAAS,EAAY,CAAC,CAAC,CAAC,CAAC,CAAc,EAAK,MAAM,CAAC,IAAI,EAAS,MAAM,CAAC,SAAS,WAAW,MAAM,EAAE,OAAO,EAAE,cAAc,OAAO,OAAO,EAAQ,OAAO,OAA+B,IAAA,GAAxB,EAAW,aAAuB,CAAC,CAAC,CAAC,EAAQ,OAAO,QAAqB,EAAMc,EAAU,CAAC,SAAS,CAAc,EAAK,MAAM,CAAC,MAAM,CAAC,SAAS,WAAW,MAAM,EAAE,OAAO,EAAE,WAAW,EAAW,eAAe,aAAa,aAAa,QAAQ,EAAW,YAAY,cAAc,OAAO,CAAC,CAAC,CAAc,EAAK,MAAM,CAAC,MAAM,CAAC,SAAS,WAAW,MAAM,EAAE,OAAO,EAAE,WAAW,EAAW,oBAAoB,aAAa,SAAS,QAAQ,EAAW,iBAAiB,cAAc,OAAO,CAAC,CAAC,CAAC,EAAW,YAAY,GAAgB,EAAK,MAAM,CAAC,MAAM,CAAC,SAAS,WAAW,MAAM,EAAE,OAAO,EAAE,WAAW,sBAAsB,aAAa,SAAS,QAAQ,EAAW,YAAY,cAAc,OAAO,CAAC,CAAC,CAAC,EAAW,gBAAgB,GAAgB,EAAK,MAAM,CAAC,MAAM,CAAC,SAAS,WAAW,MAAM,EAAE,OAAO,EAAE,WAAW,qGAAqG,aAAa,WAAW,QAAQ,EAAW,gBAAgB,cAAc,OAAO,CAAC,CAAC,CAAC,EAAW,YAAY,GAAgB,EAAK,MAAM,CAAC,MAAM,CAAC,SAAS,WAAW,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAa,eAAe,GAAGd,EAAM,EAAQ,WAAW,GAAG,IAAI,CAAC,KAAKA,EAAM,EAAQ,WAAW,GAAG,IAAI,CAAC,IAAI,aAAa,aAAa,QAAQ,EAAW,YAAY,IAAI,cAAc,OAAO,CAAC,CAAC,CAAC,EAAW,WAAW,GAAgB,EAAK,MAAM,CAAC,MAAM,CAAC,SAAS,WAAW,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAY,eAAe,cAAc,aAAa,SAAS,QAAQ,EAAW,WAAW,GAAG,cAAc,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,4BAnJltE,IAA4C,IAAoD,IAA4B,CACjI,EAAU,IAAIe,EAAkB,IAAI,WAAW,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,EAAU,YAAY,GACjK,EAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8Cf,EAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoGrB,EAAoB,EAAe,CAAC,OAAO,CAAC,KAAK,EAAY,KAAK,MAAM,0BAA0B,QAAQ,CAAC,QAAQ,QAAQ,YAAY,CAAC,aAAa,CAAC,cAAc,QAAQ,mBAAmB,CAAC,aAAa,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAY,MAAM,MAAM,UAAU,aAAa,UAAU,OAAO,EAAM,CAAC,OAAO,EAAM,SAAS,SAAU,CAAC,QAAQ,CAAC,KAAK,EAAY,MAAM,MAAM,UAAU,OAAO,EAAM,CAAC,OAAO,EAAM,SAAS,SAAU,CAAC,YAAY,CAAC,KAAK,EAAY,kBAAkB,MAAM,cAAc,OAAO,EAAM,CAAC,OAAO,EAAM,SAAS,aAAc,CAAC,gBAAgB,CAAC,KAAK,EAAY,OAAO,MAAM,eAAe,aAAa,GAAG,IAAI,GAAG,IAAI,EAAE,KAAK,IAAI,eAAe,GAAK,YAAY,oEAAoE,CAAC,UAAU,CAAC,KAAK,EAAY,OAAO,MAAM,sBAAsB,aAAa,GAAG,IAAI,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAY,MAAM,MAAM,mBAAmB,aAAa,UAAU,CAAC,UAAU,CAAC,KAAK,EAAY,MAAM,MAAM,aAAa,aAAa,UAAU,YAAY,sFAAsF,CAAC,SAAS,CAAC,KAAK,EAAY,MAAM,MAAM,cAAc,OAAO,EAAM,CAAC,OAAO,EAAM,WAAW,UAAW,CAAC,SAAS,CAAC,KAAK,EAAY,KAAK,MAAM,uBAAuB,QAAQ,CAAC,UAAU,SAAS,CAAC,aAAa,CAAC,eAAe,yBAAyB,CAAC,aAAa,UAAU,YAAY,0MAA0M,CAAC,eAAe,CAAC,KAAK,EAAY,MAAM,MAAM,iBAAiB,OAAO,EAAM,CAAC,OAAO,EAAM,WAAW,UAAW,CAAC,eAAe,CAAC,KAAK,EAAY,MAAM,MAAM,iBAAiB,OAAO,EAAM,CAAC,OAAO,EAAM,WAAW,UAAW,CAAC,eAAe,CAAC,KAAK,EAAY,MAAM,MAAM,iBAAiB,OAAO,EAAM,CAAC,OAAO,EAAM,WAAW,UAAW,CAAC,iBAAiB,CAAC,KAAK,EAAY,OAAO,MAAM,iBAAiB,aAAa,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE,KAAK,KAAK,YAAY,mGAAmG,OAAO,EAAM,CAAC,OAAO,EAAM,WAAW,UAAW,CAAC,iBAAiB,CAAC,KAAK,EAAY,OAAO,MAAM,iBAAiB,aAAa,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE,KAAK,KAAK,OAAO,EAAM,CAAC,OAAO,EAAM,WAAW,UAAW,CAAC,QAAQ,CAAC,KAAK,EAAY,OAAO,MAAM,UAAU,SAAS,CAAC,KAAK,CAAC,KAAK,EAAY,KAAK,MAAM,OAAO,QAAQ,CAAC,OAAO,aAAa,WAAW,QAAQ,SAAS,SAAS,CAAC,aAAa,CAAC,OAAO,aAAa,WAAW,QAAQ,SAAS,SAAS,CAAC,aAAa,OAAO,CAAC,SAAS,CAAC,KAAK,EAAY,OAAO,MAAM,WAAW,IAAI,EAAE,IAAI,IAAI,KAAK,EAAE,aAAa,GAAG,OAAO,GAAG,EAAE,OAAO,UAAU,EAAE,OAAO,OAAO,CAAC,aAAa,CAAC,KAAK,EAAY,QAAQ,MAAM,QAAQ,aAAa,GAAK,aAAa,KAAK,cAAc,MAAM,OAAO,GAAG,EAAE,OAAO,UAAU,EAAE,OAAO,OAAO,CAAC,YAAY,CAAC,KAAK,EAAY,OAAO,MAAM,YAAY,IAAI,EAAE,IAAI,IAAI,KAAK,EAAE,aAAa,GAAG,OAAO,GAAG,EAAE,OAAO,UAAU,EAAE,OAAO,QAAQ,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,KAAK,EAAY,OAAO,MAAM,aAAa,IAAI,GAAG,IAAI,IAAI,KAAK,EAAE,aAAa,GAAG,OAAO,GAAG,EAAE,OAAO,QAAQ,EAAE,OAAO,UAAU,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,KAAK,EAAY,OAAO,MAAM,WAAW,IAAI,EAAE,IAAI,IAAI,KAAK,EAAE,aAAa,EAAE,OAAO,GAAG,EAAE,OAAO,UAAU,EAAE,OAAO,OAAO,CAAC,SAAS,CAAC,KAAK,EAAY,OAAO,MAAM,WAAW,IAAI,EAAE,IAAI,IAAI,KAAK,EAAE,aAAa,EAAE,OAAO,GAAG,EAAE,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,EAAY,OAAO,MAAM,SAAS,IAAI,KAAK,IAAI,IAAI,KAAK,EAAE,aAAa,EAAE,OAAO,GAAG,EAAE,OAAO,UAAU,EAAE,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,EAAY,OAAO,MAAM,OAAO,IAAI,EAAE,IAAI,IAAI,KAAK,EAAE,aAAa,EAAE,OAAO,GAAG,EAAE,OAAO,UAAU,EAAE,OAAO,OAAO,CAAC,YAAY,CAAC,KAAK,EAAY,OAAO,MAAM,aAAa,IAAI,EAAE,IAAI,IAAI,KAAK,EAAE,aAAa,GAAG,OAAO,GAAG,EAAE,OAAO,SAAS,CAAC,WAAW,CAAC,KAAK,EAAY,OAAO,MAAM,YAAY,IAAI,EAAE,IAAI,IAAI,KAAK,EAAE,aAAa,EAAE,OAAO,GAAG,EAAE,OAAO,SAAS,CAAC,eAAe,CAAC,KAAK,EAAY,OAAO,MAAM,YAAY,IAAI,EAAE,IAAI,IAAI,KAAK,EAAE,aAAa,GAAG,OAAO,GAAG,EAAE,OAAO,SAAS,CAAC,cAAc,CAAC,KAAK,EAAY,OAAO,MAAM,eAAe,IAAI,EAAE,IAAI,IAAI,KAAK,EAAE,aAAa,GAAG,OAAO,GAAG,EAAE,OAAO,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,EAAY,OAAO,MAAM,kBAAkB,aAAa,KAAK,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,KAAK,YAAY,sLAAsL,CAAC,CAAC,ICpJliG,SAAS,EAAM,EAAM,EAAI,EAAE,EAAI,EAAE,CAAC,OAAO,KAAK,IAAI,EAAI,KAAK,IAAI,EAAI,EAAM,CAAC,CAAE,SAAS,EAAa,EAAM,CAAC,MAAO,IAAW,EAAE,IAAM,EAAI,SAAS,EAAiB,EAAM,CAAC,GAAG,OAAO,GAAQ,UAAU,OAAO,SAAS,EAAM,CAAC,OAAO,EAAM,GAAG,OAAO,GAAQ,SAAS,CAAC,IAAM,EAAM,EAAM,MAAM,wBAAwB,CAAC,GAAG,EAAM,OAAO,OAAO,EAAM,GAAG,CAAE,OAAO,KAAM,SAAS,EAAe,EAAQ,CAAC,IAAI,EAAI,EAAM,EAAQ,EAAQ,KAAM,GAAS,GAAK,EAAQ,UAAU,EAAQ,EAAQ,aAAc,OAAO,EAGj4D,SAAgB,EAAsB,EAAU,CAAC,OAAoB,GAAY,EAAM,IAAM,CAAC,IAAM,EAASE,EAAO,KAAK,CAAO,EAAUA,EAAO,KAAK,CAAO,EAASA,EAAO,KAAK,CAAuF,CAAC,EAAW,GAAeD,EAA7F,EAAiB,GAAO,OAAO,OAAO,EAAE,EAA4E,CAAO,EAAcC,EAAO,EAAE,CAAO,EAAeA,EAAO,EAAE,CAAO,EAAgBA,EAAO,EAAE,CAAO,EAAOA,EAAO,EAAE,CAAC,MAAoB,CAAC,IAAM,EAAe,EAAiB,GAAO,OAAO,OAAO,CAAC,GAAG,IAAiB,KAAK,CAAC,EAAc,EAAe,CAAC,OAAQ,GAAG,CAAC,EAAU,QAAQ,OAAO,IAAM,EAAe,EAAU,QAAQ,uBAAuB,CAAC,OAAU,EAAe,GAAG,EAAc,EAAe,EAAI,CAAC,GAAO,OAAO,OAAO,CAAC,CAAC,MAAc,CAAC,GAAG,CAAC,EAAS,SAAS,CAAC,EAAU,QAAQ,OAAO,IAAM,MAAqB,CAAK,EAAS,UAAe,EAAc,QAAQ,EAAe,EAAS,QAAQ,GAAS,MAAe,CAAC,EAAgB,UAAU,EAAe,QAAQ,EAAgB,SAAS,EAAoB,EAAS,UAAS,EAAS,QAAQ,MAAM,UAAU,UAAU,EAAgB,QAAQ,IAAO,KAAK,IAAI,EAAe,QAAQ,EAAgB,QAAQ,CAAC,KAAM,EAAO,QAAQ,EAAO,sBAAsB,EAAW,EAAO,EAAgB,QAAQ,EAAe,QAAW,EAAS,UAAQ,EAAS,QAAQ,MAAM,UAAU,UAAU,EAAgB,QAAQ,IAAG,EAAO,QAAQ,IAAW,MAAa,CAAsF,IAAM,EAAc,EAA1F,GAAO,EAAO,QAAQ,EAAc,SAAS,EAAwB,CAA2C,CAAsD,EAAe,QAApD,GAAG,EAAiB,GAAG,EAA+C,AAAoB,EAAO,UAAQ,EAAO,sBAAsB,EAAW,EAAyL,OAArL,eAAe,CAAC,GAAkB,CAAC,GAAU,EAAG,GAAG,CAAC,EAAO,iBAAiB,SAAS,EAAS,CAAC,QAAQ,GAAK,CAAC,CAAC,EAAO,iBAAiB,aAAa,CAAC,GAAkB,CAAC,GAAU,EAAG,KAAW,CAAI,EAAO,SAAQ,EAAO,qBAAqB,EAAO,QAAQ,CAAC,EAAO,oBAAoB,SAAS,EAAS,CAAC,EAAO,oBAAoB,SAAS,EAAiB,GAAK,CAAC,EAAW,CAAC,CAAC,GAAK,CAAC,QAAM,GAAG,GAAW,EAAY,EAAW,CAAC,SAAS,GAAO,UAAU,WAAW,IAAI,GAAO,IAAI,KAAK,GAAO,KAAK,MAAM,GAAO,MAAM,OAAO,GAAO,OAAO,UAAU,GAAO,UAAU,MAAM,GAAO,OAAO,OAAO,SAAS,GAAO,SAAS,OAAO,GAAO,OAAO,OAAO,EAAW,EAAwB,SAAS,UAAU,cAAc,OAAO,CAAO,EAAmB,CAAC,SAAS,SAAS,IAAI,EAAE,MAAM,OAAO,OAAO,EAAW,SAAS,SAAS,UAAU,EAAyB,gBAAgB,EAAyB,WAAW,YAAY,iBAAiB,YAAY,aAAa,aAAa,mBAAmB,aAAa,SAAS,YAAY,eAAe,YAAY,cAAc,OAAO,CAAO,EAAkB,CAAC,MAAM,OAAO,OAAO,OAAO,gBAAgB,aAAa,UAAU,YAAY,WAAW,YAAY,CAAO,EAAe,CAAC,GAAG,EAAM,SAAS,WAAW,IAAI,EAAE,KAAK,EAAE,MAAM,OAAO,OAAO,OAAO,UAAU,OAAO,MAAM,OAAO,OAAO,OAAO,CAAC,OAAoB,EAAK,MAAM,CAAC,IAAI,EAAS,MAAM,EAAW,SAAsB,EAAK,MAAM,CAAC,IAAI,EAAU,MAAM,EAAmB,SAAsB,EAAK,MAAM,CAAC,IAAI,EAAS,MAAM,EAAkB,SAAsB,EAAK,EAAU,CAAK,MAAI,GAAG,EAAU,MAAM,EAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAG,gCAHtvG,IAAwE,CAAM,EAAqB,OAAkC,IAAgD,EAA2B,EAAwB,IAA2C,EAAX,KAAkD,EAA2B,EAAiB,IAAyf,EAAyB"}