{"version":3,"file":"Stamp_Card.BbPBYr5n.mjs","names":["useId","useRef","useState","t","p"],"sources":["https:/framerusercontent.com/modules/rcIBGmHoaihQCjZI1v4F/BUobnX8L355BEMNrYXXW/Stamp_Card.js"],"sourcesContent":["/**\n * 92\n * #92 Coffee Stamp Card\n *\n * Loyalty bonus card with animated stamps. Each time a stamp tips active,\n * a soft pop + checkmark draw plays. The final slot reveals a gift icon\n * when the punch card completes.\n *\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any\n * @framerIntrinsicWidth 460\n * @framerIntrinsicHeight 320\n */import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useId,useRef,useState}from\"react\";import{addPropertyControls,ControlType,RenderTarget,useIsStaticRenderer}from\"framer\";// ─── Defaults ───────────────────────────────────────────────\nconst DEFAULT_TYPOGRAPHY={titleFont:{fontSize:22,variant:\"Bold\",lineHeight:1.15},subtitleFont:{fontSize:14,variant:\"Regular\",lineHeight:1.35},stampFont:{fontSize:18,variant:\"Semibold\"},titleColor:\"#FFFFFF\",subtitleColor:\"rgba(255,255,255,0.7)\",stampNumberColor:\"#FFFFFF\"};const DEFAULT_CARD_STYLE={background:\"#1A1A1C\",borderRadius:22,padding:22,shadow:true};const DEFAULT_STAMP_STYLE={columns:6,gap:8,stampRadius:14,unfilledBackground:\"rgba(255,255,255,0.08)\",filledBackground:\"#3F8C46\",filledIconColor:\"#FFFFFF\",rewardBackground:\"rgba(255,255,255,0.08)\",rewardFilledBackground:\"#C58B3A\",rewardIconColor:\"#FFFFFF\"};const DEFAULT_ANIMATION={autoDemo:true,loop:true,// demoSpeed < stampDuration on purpose: each next stamp starts popping\n// while the previous is still mid-pop, producing an overlapping cascade\n// rather than a slow one-by-one tick.\ndemoSpeed:.18,holdAtEnd:1.6,stampDuration:.45,bounceStrength:1.18,drawDuration:.25};// ─── Icons — Phosphor regular ───────────────────────────────\n// Phosphor uses a 256×256 viewBox with stroke-width 16 for the \"regular\"\n// weight. Strokes are rounded so icons feel friendly on small chips.\nconst CheckIcon=({color,drawMs})=>/*#__PURE__*/_jsx(\"svg\",{viewBox:\"0 0 256 256\",width:\"58%\",height:\"58%\",fill:\"none\",stroke:color,strokeWidth:20,strokeLinecap:\"round\",strokeLinejoin:\"round\",\"aria-hidden\":\"true\",style:{display:\"block\",// Tiny settle on the SVG itself — starts a hair offset+small and\n    // lands at 1×, so the check reads as \"pressed down\" rather than\n    // a stroke being drawn on a static surface.\n    transformOrigin:\"50% 50%\",animation:`csc-settle ${drawMs}ms ease-out both`},children:/*#__PURE__*/_jsx(\"path\",{d:\"M40 144 L96 200 L216 80\",pathLength:100,strokeDasharray:100,strokeDashoffset:100,style:{animation:`csc-draw ${drawMs}ms ease-out forwards`}})});const GiftIcon=({color})=>/*#__PURE__*/_jsxs(\"svg\",{viewBox:\"0 0 256 256\",width:\"60%\",height:\"60%\",fill:\"none\",stroke:color,strokeWidth:16,strokeLinecap:\"round\",strokeLinejoin:\"round\",\"aria-hidden\":\"true\",style:{display:\"block\"},children:[/*#__PURE__*/_jsx(\"rect\",{x:\"32\",y:\"80\",width:\"192\",height:\"48\",rx:\"8\"}),/*#__PURE__*/_jsx(\"line\",{x1:\"128\",y1:\"80\",x2:\"128\",y2:\"216\"}),/*#__PURE__*/_jsx(\"path\",{d:\"M208 128 v80 a8 8 0 0 1 -8 8 H56 a8 8 0 0 1 -8 -8 V128\"}),/*#__PURE__*/_jsx(\"path\",{d:\"M172 80 a28 28 0 0 0 0 -56 c -28 0 -44 56 -44 56 s -16 -56 -44 -56 a28 28 0 0 0 0 56\"})]});// ─── Component ──────────────────────────────────────────────\nexport default function CoffeeStampCard(props){const{title=\"Coffee card\",subtitle=\"Buy 10 and get your 11th for free\",stampCount=11,activeCount=2,typography=DEFAULT_TYPOGRAPHY,cardStyle=DEFAULT_CARD_STYLE,stamps=DEFAULT_STAMP_STYLE,animation=DEFAULT_ANIMATION}=props;const isStatic=useIsStaticRenderer();const isCanvas=RenderTarget.current()===RenderTarget.canvas;const rawId=useId();const uid=rawId.replace(/:/g,\"\");// ── In-view gating ──\n// The demo cycle only ticks while the card is intersecting the viewport.\n// When it scrolls out we pause (no resets); when it scrolls back in we\n// resume from wherever `demoActive` left off, so no animation replays.\nconst cardRef=useRef(null);const[inView,setInView]=useState(false);useEffect(()=>{if(typeof window===\"undefined\")return;const el=cardRef.current;if(!el)return;if(!(\"IntersectionObserver\"in window)){setInView(true);return;}const io=new IntersectionObserver(entries=>{for(const e of entries)setInView(e.isIntersecting);},{threshold:.15});io.observe(el);return()=>io.disconnect();},[]);// ── Reduced motion ──\n// Safari < 14 doesn't expose `addEventListener` on MediaQueryList — only\n// the older `addListener` / `removeListener`. Feature-detect both so we\n// keep working on iOS 13 / older macOS Safari.\nconst[reducedMotion,setReducedMotion]=useState(false);useEffect(()=>{if(typeof window===\"undefined\"||!window.matchMedia)return;const mq=window.matchMedia(\"(prefers-reduced-motion: reduce)\");setReducedMotion(mq.matches);const handler=e=>setReducedMotion(e.matches);if(mq.addEventListener){mq.addEventListener(\"change\",handler);}else if(mq.addListener){mq.addListener(handler);}return()=>{if(mq.removeEventListener){mq.removeEventListener(\"change\",handler);}else if(mq.removeListener){mq.removeListener(handler);}};},[]);// Clamp counts to safe ranges.\nconst total=Math.max(2,Math.min(30,Math.round(stampCount)));const externalActive=Math.max(0,Math.min(total,Math.round(activeCount)));// ── Auto-demo cycle ──\n// When autoDemo is on, the active count steps from 0 → total, holds at\n// full, then resets to 0 to loop. In canvas / static / reduced motion\n// we freeze on `externalActive` so the designer sees a representative\n// still frame.\nconst useDemo=animation.autoDemo&&!isStatic&&!isCanvas&&!reducedMotion;const[demoActive,setDemoActive]=useState(useDemo?0:externalActive);// Sync demoActive whenever we leave demo mode (or externalActive changes\n// while frozen). Kept out of the cycle effect so changing the canvas\n// preview value doesn't reset the live loop.\nuseEffect(()=>{if(!useDemo)setDemoActive(externalActive);},[useDemo,externalActive]);// Cycle driver — each tick schedules exactly one timeout for the next\n// step (or the hold-then-reset when full). Re-runs every time\n// `demoActive` changes, so cleanup naturally clears the pending timer.\n// Gated on `inView` — when the card scrolls off screen the pending\n// timer is cleared and the cycle parks at the current `demoActive`,\n// resuming from that exact step when the card returns.\nuseEffect(()=>{if(!useDemo)return;if(!inView)return;if(typeof window===\"undefined\")return;const stepMs=Math.max(animation.demoSpeed,.1)*1e3;const holdMs=Math.max(animation.holdAtEnd,0)*1e3;if(demoActive>=total){// Loop off → park at full and never schedule a reset.\nif(!animation.loop)return;const t=window.setTimeout(()=>setDemoActive(0),holdMs);return()=>window.clearTimeout(t);}const t=window.setTimeout(()=>setDemoActive(a=>a+1),stepMs);return()=>window.clearTimeout(t);},[useDemo,inView,demoActive,total,animation.demoSpeed,animation.holdAtEnd,animation.loop]);const active=useDemo?demoActive:externalActive;// Track previous active so each render can tell which stamps just\n// flipped (and so only those animate, not the whole grid on a reset).\nconst prevActiveRef=useRef(active);const prevActive=prevActiveRef.current;useEffect(()=>{prevActiveRef.current=active;},[active]);// ── Styling ──\nconst titleFontStyle={fontSize:22,fontWeight:700,lineHeight:1.15,...typography.titleFont||{},color:typography.titleColor,margin:0};const subtitleFontStyle={fontSize:14,fontWeight:400,lineHeight:1.35,...typography.subtitleFont||{},color:typography.subtitleColor,margin:0};const stampFontStyle={fontSize:18,fontWeight:600,...typography.stampFont||{},color:typography.stampNumberColor,lineHeight:1};// Depth treatment (active when `shadow` is on):\n//   - Outer drop shadow (two layers: tight + wide) grounds the card.\n//   - Hairline rim from a translucent border catches edge light.\n//   - Inset top highlight + inset bottom darkening give the card a\n//     beveled, \"lifted\" feel without needing a thick border.\n//   - A diagonal glare overlay (rendered as a child below) adds a\n//     subtle sheen from the top-left.\nconst containerStyle={position:\"relative\",width:\"100%\",height:\"100%\",boxSizing:\"border-box\",background:cardStyle.background,borderRadius:cardStyle.borderRadius,padding:cardStyle.padding,border:cardStyle.shadow?\"1px solid rgba(255,255,255,0.06)\":undefined,boxShadow:cardStyle.shadow?[\"0 2px 6px -2px rgba(0,0,0,0.35)\",\"0 24px 60px -28px rgba(0,0,0,0.55)\",\"inset 0 1px 0 rgba(255,255,255,0.09)\",\"inset 0 -1px 0 rgba(0,0,0,0.4)\"].join(\", \"):undefined,display:\"flex\",flexDirection:\"column\",gap:18,overflow:\"hidden\"};const stampDurMs=Math.round(animation.stampDuration*1e3);const drawDurMs=Math.round(animation.drawDuration*1e3);const bounce=Math.max(1,animation.bounceStrength);// Keyframes scoped to this instance so multiple cards on a page don't\n// share `bounce` values. The press ring fires alongside the pop so the\n// stamp looks pressed into the card at the moment of impact.\nconst keyframes=`\n@keyframes csc-stamp-${uid} {\n    0%   { transform: scale(0.4); opacity: 0; }\n    55%  { transform: scale(${bounce}); opacity: 1; }\n    80%  { transform: scale(0.96); }\n    100% { transform: scale(1); opacity: 1; }\n}\n@keyframes csc-press-${uid} {\n    0%   { box-shadow: inset 0 0 0 rgba(0,0,0,0); }\n    55%  { box-shadow: inset 0 2px 6px rgba(0,0,0,0.28); }\n    100% { box-shadow: inset 0 0 0 rgba(0,0,0,0); }\n}\n@keyframes csc-draw {\n    to { stroke-dashoffset: 0; }\n}\n@keyframes csc-settle {\n    from { transform: translateY(1px) scale(0.95); }\n    to   { transform: translateY(0) scale(1); }\n}`;return /*#__PURE__*/_jsxs(\"div\",{ref:cardRef,role:\"region\",\"aria-label\":title,style:containerStyle,children:[/*#__PURE__*/_jsx(\"style\",{children:keyframes}),cardStyle.shadow&&/*#__PURE__*/_jsx(\"div\",{\"aria-hidden\":\"true\",style:{position:\"absolute\",top:0,right:0,bottom:0,left:0,borderRadius:cardStyle.borderRadius,background:\"radial-gradient(120% 80% at 0% 0%, rgba(255,255,255,0.10), rgba(255,255,255,0) 55%), linear-gradient(135deg, rgba(255,255,255,0.05) 0%, rgba(255,255,255,0) 38%, rgba(255,255,255,0) 70%, rgba(255,255,255,0.02) 100%)\",pointerEvents:\"none\"}}),/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",flexDirection:\"column\",gap:4,minWidth:0},children:[/*#__PURE__*/_jsx(\"h3\",{style:titleFontStyle,children:title}),subtitle&&/*#__PURE__*/_jsx(\"p\",{style:subtitleFontStyle,children:subtitle})]}),/*#__PURE__*/_jsx(\"div\",{role:\"list\",\"aria-label\":\"Stamps\",style:{display:\"grid\",gridTemplateColumns:`repeat(${Math.max(1,Math.round(stamps.columns))}, minmax(0, 1fr))`,gap:stamps.gap,width:\"100%\",flex:1,alignContent:\"start\"},children:Array.from({length:total}).map((_,i)=>{const isFilled=i<active;const isReward=i===total-1;const justFlipped=isFilled&&i>=prevActive&&active>prevActive;const animateThis=justFlipped&&!reducedMotion&&!isStatic&&!isCanvas;return /*#__PURE__*/_jsx(StampSlot,{index:i,isFilled:isFilled,isReward:isReward,animate:animateThis,stampRadius:stamps.stampRadius,unfilledBg:stamps.unfilledBackground,filledBg:stamps.filledBackground,filledIconColor:stamps.filledIconColor,rewardBg:stamps.rewardBackground,rewardFilledBg:stamps.rewardFilledBackground,rewardIconColor:stamps.rewardIconColor,numberStyle:stampFontStyle,stampMs:stampDurMs,drawMs:drawDurMs,uid:uid},i);})})]});}const FADE_OUT_MS=200;// Hair longer than the CSS transition so the unmount never trims the last\n// frame of the fade.\nconst UNMOUNT_DELAY_MS=220;function StampSlot({index,isFilled,isReward,animate,stampRadius,unfilledBg,filledBg,filledIconColor,rewardBg,rewardFilledBg,rewardIconColor,numberStyle,stampMs,drawMs,uid}){// Delayed-unmount pattern for the check icon. When `isFilled` flips\n// false (typically a cycle reset), the icon stays mounted long enough\n// for an opacity transition to play, then unmounts. On re-fill it\n// remounts and the SVG draw animation plays from scratch.\nconst[keepIcon,setKeepIcon]=useState(isFilled&&!isReward);useEffect(()=>{if(isReward)return;if(isFilled){setKeepIcon(true);return;}if(typeof window===\"undefined\")return;const t=window.setTimeout(()=>setKeepIcon(false),UNMOUNT_DELAY_MS);return()=>window.clearTimeout(t);},[isFilled,isReward]);// Each fresh fill gets a unique key so the SVG remounts and replays\n// its stroke-draw animation. Bumping happens in an effect — not during\n// render — so strict-mode's double-render can't double-increment.\n// The ref tracks the previously-committed `isFilled` so we only bump\n// on a true false→true transition (the initial mount with isFilled=true\n// already mounts a fresh SVG, so no key bump is needed there).\nconst[drawKey,setDrawKey]=useState(0);const wasFilledRef=useRef(isFilled);useEffect(()=>{if(isFilled&&!wasFilledRef.current){setDrawKey(k=>k+1);}wasFilledRef.current=isFilled;},[isFilled]);const background=isReward?isFilled?rewardFilledBg:rewardBg:isFilled?filledBg:unfilledBg;return(// Outer: just a layout shell. `padding-bottom: 100%` forces a 1:1\n// box (padding % is relative to the containing block's width) and\n// works in every browser without depending on the newer\n// `aspect-ratio` property (which only ships in Safari 15+).\n// Inner: the visible chip — absolutely positioned to fill the\n// shell, so animation transforms apply only to the chip and the\n// shell stays in flow inside the grid.\n/*#__PURE__*/_jsx(\"div\",{role:\"listitem\",\"aria-label\":isReward?isFilled?\"Reward earned\":\"Reward\":`Stamp ${index+1}${isFilled?\" collected\":\"\"}`,style:{position:\"relative\",width:\"100%\",paddingBottom:\"100%\"},children:/*#__PURE__*/_jsxs(\"div\",{style:{position:\"absolute\",top:0,right:0,bottom:0,left:0,background,borderRadius:stampRadius,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",transition:\"background 240ms ease\",willChange:animate?\"transform, opacity, box-shadow\":undefined,animation:animate?`csc-stamp-${uid} ${stampMs}ms cubic-bezier(0.34, 1.56, 0.64, 1) both, csc-press-${uid} ${stampMs}ms ease-out both`:undefined},children:[!isFilled&&!isReward&&/*#__PURE__*/_jsx(\"span\",{style:{...numberStyle,userSelect:\"none\"},children:index+1}),keepIcon&&!isReward&&/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",top:0,right:0,bottom:0,left:0,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",opacity:isFilled?1:0,transition:`opacity ${FADE_OUT_MS}ms ease`,pointerEvents:\"none\"},children:/*#__PURE__*/_jsx(CheckIcon,{color:filledIconColor,drawMs:drawMs},drawKey)}),isReward&&/*#__PURE__*/_jsx(GiftIcon,{color:rewardIconColor})]})}));}CoffeeStampCard.displayName=\"Coffee Stamp Card\";// ─── Property Controls ──────────────────────────────────────\naddPropertyControls(CoffeeStampCard,{title:{type:ControlType.String,title:\"Title\",defaultValue:\"Coffee card\"},subtitle:{type:ControlType.String,title:\"Subtitle\",defaultValue:\"Buy 10 and get your 11th for free\",displayTextArea:true},stampCount:{type:ControlType.Number,title:\"Stamps\",defaultValue:11,min:2,max:30,step:1},activeCount:{type:ControlType.Number,title:\"Filled\",defaultValue:2,min:0,max:30,step:1,description:\"How many stamps are collected. Used when Auto Demo is off, or as the canvas preview value.\"},typography:{type:ControlType.Object,title:\"Typography\",controls:{titleFont:{type:ControlType.Font,title:\"Title Font\",controls:\"extended\",defaultFontType:\"sans-serif\",defaultValue:{fontSize:22,variant:\"Bold\",lineHeight:1.15}},titleColor:{type:ControlType.Color,title:\"Title Color\",defaultValue:\"#FFFFFF\"},subtitleFont:{type:ControlType.Font,title:\"Subtitle Font\",controls:\"extended\",defaultFontType:\"sans-serif\",defaultValue:{fontSize:14,variant:\"Regular\",lineHeight:1.35}},subtitleColor:{type:ControlType.Color,title:\"Subtitle Color\",defaultValue:\"rgba(255,255,255,0.7)\"},stampFont:{type:ControlType.Font,title:\"Stamp Font\",controls:\"extended\",defaultFontType:\"sans-serif\",defaultValue:{fontSize:18,variant:\"Semibold\"}},stampNumberColor:{type:ControlType.Color,title:\"Stamp Number\",defaultValue:\"#FFFFFF\"}}},cardStyle:{type:ControlType.Object,title:\"Card\",controls:{background:{type:ControlType.Color,title:\"Background\",defaultValue:\"#1A1A1C\"},borderRadius:{type:ControlType.Number,title:\"Radius\",defaultValue:22,min:0,max:48,step:1,unit:\"px\"},padding:{type:ControlType.Number,title:\"Padding\",defaultValue:22,min:8,max:48,step:1,unit:\"px\"},shadow:{type:ControlType.Boolean,title:\"Shadow\",defaultValue:true}}},stamps:{type:ControlType.Object,title:\"Stamps\",controls:{columns:{type:ControlType.Number,title:\"Columns\",defaultValue:6,min:2,max:10,step:1},gap:{type:ControlType.Number,title:\"Gap\",defaultValue:8,min:0,max:24,step:1,unit:\"px\"},stampRadius:{type:ControlType.Number,title:\"Radius\",defaultValue:14,min:0,max:32,step:1,unit:\"px\"},unfilledBackground:{type:ControlType.Color,title:\"Unfilled BG\",defaultValue:\"rgba(255,255,255,0.08)\"},filledBackground:{type:ControlType.Color,title:\"Filled BG\",defaultValue:\"#3F8C46\"},filledIconColor:{type:ControlType.Color,title:\"Check Color\",defaultValue:\"#FFFFFF\"},rewardBackground:{type:ControlType.Color,title:\"Reward BG\",defaultValue:\"rgba(255,255,255,0.08)\"},rewardFilledBackground:{type:ControlType.Color,title:\"Reward Filled\",defaultValue:\"#C58B3A\"},rewardIconColor:{type:ControlType.Color,title:\"Gift Color\",defaultValue:\"#FFFFFF\"}}},animation:{type:ControlType.Object,title:\"Animation\",controls:{autoDemo:{type:ControlType.Boolean,title:\"Auto Demo\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\",description:\"Cycles stamps from empty to full on the live site for a demo loop. On canvas the stamps freeze at Filled.\"},loop:{type:ControlType.Boolean,title:\"Loop\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\",hidden:p=>!p.autoDemo,description:\"When off, the demo fills once and stops at full instead of resetting and replaying.\"},demoSpeed:{type:ControlType.Number,title:\"Demo Speed\",defaultValue:.18,min:.08,max:3,step:.02,unit:\"s\",hidden:p=>!p.autoDemo,description:\"Time between each stamp starting to fill. Lower than Pop Time for an overlapping cascade.\"},holdAtEnd:{type:ControlType.Number,title:\"Hold\",defaultValue:1.6,min:0,max:6,step:.1,unit:\"s\",hidden:p=>!p.autoDemo},stampDuration:{type:ControlType.Number,title:\"Pop Time\",defaultValue:.45,min:.1,max:1.2,step:.05,unit:\"s\"},bounceStrength:{type:ControlType.Number,title:\"Bounce\",defaultValue:1.18,min:1,max:1.5,step:.02},drawDuration:{type:ControlType.Number,title:\"Draw Time\",defaultValue:.25,min:.1,max:1,step:.05,unit:\"s\"}}}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"CoffeeStampCard\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Stamp_Card.map"],"mappings":"8NAuBA,SAAwB,EAAgB,EAAM,CAAC,GAAK,CAAC,QAAM,cAAc,WAAS,oCAAoC,aAAW,GAAG,cAAY,EAAE,aAAW,EAAmB,YAAU,EAAmB,SAAO,EAAoB,YAAU,GAAmB,EAAY,EAAS,GAAqB,CAAO,EAAS,EAAa,SAAS,GAAG,EAAa,OAAiC,EAAdA,GAAO,CAAiB,QAAQ,KAAK,GAAG,CAI1Z,EAAQC,EAAO,KAAK,CAAM,CAAC,EAAO,GAAWC,EAAS,GAAM,CAAC,MAAc,CAAC,GAAU,IAAS,OAAY,OAAO,IAAM,EAAG,EAAQ,QAAQ,GAAG,CAAC,EAAG,OAAO,GAAG,EAAE,yBAAyB,GAAQ,CAAC,EAAU,GAAK,CAAC,OAAQ,IAAM,EAAG,IAAI,qBAAqB,GAAS,CAAC,IAAI,IAAM,KAAK,EAAQ,EAAU,EAAE,eAAe,EAAG,CAAC,UAAU,IAAI,CAAC,CAAgB,OAAf,EAAG,QAAQ,EAAG,KAAW,EAAG,YAAY,EAAG,EAAE,CAAC,CAI9X,GAAK,CAAC,EAAc,GAAkBA,EAAS,GAAM,CAAC,MAAc,CAAC,GAAU,IAAS,QAAa,CAAC,EAAO,WAAW,OAAO,IAAM,EAAG,EAAO,WAAW,mCAAmC,CAAC,EAAiB,EAAG,QAAQ,CAAC,IAAM,EAAQ,GAAG,EAAiB,EAAE,QAAQ,CAAiH,OAA7G,EAAG,iBAAkB,EAAG,iBAAiB,SAAS,EAAQ,CAAU,EAAG,aAAa,EAAG,YAAY,EAAQ,KAAY,CAAI,EAAG,oBAAqB,EAAG,oBAAoB,SAAS,EAAQ,CAAU,EAAG,gBAAgB,EAAG,eAAe,EAAQ,GAAM,EAAE,CAAC,CACtgB,IAAM,EAAM,KAAK,IAAI,EAAE,KAAK,IAAI,GAAG,KAAK,MAAM,EAAW,CAAC,CAAC,CAAO,EAAe,KAAK,IAAI,EAAE,KAAK,IAAI,EAAM,KAAK,MAAM,EAAY,CAAC,CAAC,CAK9H,EAAQ,EAAU,UAAU,CAAC,GAAU,CAAC,GAAU,CAAC,EAAmB,CAAC,EAAW,GAAeA,EAAS,EAAQ,EAAE,EAAe,CAGzI,MAAc,CAAK,GAAQ,EAAc,EAAe,EAAG,CAAC,EAAQ,EAAe,CAAC,CAMpF,MAAc,CAAsC,GAAlC,CAAC,GAAkB,CAAC,GAAwB,IAAS,OAAY,OAAO,IAAM,EAAO,KAAK,IAAI,EAAU,UAAU,GAAG,CAAC,IAAU,EAAO,KAAK,IAAI,EAAU,UAAU,EAAE,CAAC,IAAI,GAAG,GAAY,EAAM,CAClN,GAAG,CAAC,EAAU,KAAK,OAAO,IAAMC,EAAE,EAAO,eAAe,EAAc,EAAE,CAAC,EAAO,CAAC,UAAU,EAAO,aAAaA,EAAE,CAAE,IAAM,EAAE,EAAO,eAAe,EAAc,GAAG,EAAE,EAAE,CAAC,EAAO,CAAC,UAAU,EAAO,aAAa,EAAE,EAAG,CAAC,EAAQ,EAAO,EAAW,EAAM,EAAU,UAAU,EAAU,UAAU,EAAU,KAAK,CAAC,CAAC,IAAM,EAAO,EAAQ,EAAW,EAEtU,EAAcF,EAAO,EAAO,CAAO,EAAW,EAAc,QAAQ,MAAc,CAAC,EAAc,QAAQ,GAAS,CAAC,EAAO,CAAC,CACjI,IAAM,EAAe,CAAC,SAAS,GAAG,WAAW,IAAI,WAAW,KAAK,GAAG,EAAW,WAAW,EAAE,CAAC,MAAM,EAAW,WAAW,OAAO,EAAE,CAAO,EAAkB,CAAC,SAAS,GAAG,WAAW,IAAI,WAAW,KAAK,GAAG,EAAW,cAAc,EAAE,CAAC,MAAM,EAAW,cAAc,OAAO,EAAE,CAAO,EAAe,CAAC,SAAS,GAAG,WAAW,IAAI,GAAG,EAAW,WAAW,EAAE,CAAC,MAAM,EAAW,iBAAiB,WAAW,EAAE,CAOrY,EAAe,CAAC,SAAS,WAAW,MAAM,OAAO,OAAO,OAAO,UAAU,aAAa,WAAW,EAAU,WAAW,aAAa,EAAU,aAAa,QAAQ,EAAU,QAAQ,OAAO,EAAU,OAAO,mCAAmC,IAAA,GAAU,UAAU,EAAU,OAAO,CAAC,kCAAkC,qCAAqC,uCAAuC,iCAAiC,CAAC,KAAK,KAAK,CAAC,IAAA,GAAU,QAAQ,OAAO,cAAc,SAAS,IAAI,GAAG,SAAS,SAAS,CAAO,EAAW,KAAK,MAAM,EAAU,cAAc,IAAI,CAAO,EAAU,KAAK,MAAM,EAAU,aAAa,IAAI,CAGzmB,EAAU;uBACO,EAAI;;8BAJkmB,KAAK,IAAI,EAAE,EAAU,eAAe,CAM5nB;;;;uBAId,EAAI;;;;;;;;;;;GAWxB,OAAoB,EAAM,MAAM,CAAC,IAAI,EAAQ,KAAK,SAAS,aAAa,EAAM,MAAM,EAAe,SAAS,CAAc,EAAK,QAAQ,CAAC,SAAS,EAAU,CAAC,CAAC,EAAU,QAAqB,EAAK,MAAM,CAAC,cAAc,OAAO,MAAM,CAAC,SAAS,WAAW,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAU,aAAa,WAAW,yNAAyN,cAAc,OAAO,CAAC,CAAC,CAAc,EAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,OAAO,cAAc,SAAS,IAAI,EAAE,SAAS,EAAE,CAAC,SAAS,CAAc,EAAK,KAAK,CAAC,MAAM,EAAe,SAAS,EAAM,CAAC,CAAC,GAAuB,EAAK,IAAI,CAAC,MAAM,EAAkB,SAAS,EAAS,CAAC,CAAC,CAAC,CAAC,CAAc,EAAK,MAAM,CAAC,KAAK,OAAO,aAAa,SAAS,MAAM,CAAC,QAAQ,OAAO,oBAAoB,UAAU,KAAK,IAAI,EAAE,KAAK,MAAM,EAAO,QAAQ,CAAC,CAAC,mBAAmB,IAAI,EAAO,IAAI,MAAM,OAAO,KAAK,EAAE,aAAa,QAAQ,CAAC,SAAS,MAAM,KAAK,CAAC,OAAO,EAAM,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,IAAM,EAAS,EAAE,EAAmK,OAAoB,EAAK,EAAU,CAAC,MAAM,EAAW,WAAS,SAA3M,IAAI,EAAM,EAAmN,QAA/L,GAAU,GAAG,GAAY,EAAO,GAA0C,CAAC,GAAe,CAAC,GAAU,CAAC,EAA6G,YAAY,EAAO,YAAY,WAAW,EAAO,mBAAmB,SAAS,EAAO,iBAAiB,gBAAgB,EAAO,gBAAgB,SAAS,EAAO,iBAAiB,eAAe,EAAO,uBAAuB,gBAAgB,EAAO,gBAAgB,YAAY,EAAe,QAAQ,EAAW,OAAO,EAAc,MAAI,CAAC,EAAE,EAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAE5oD,SAAS,EAAU,CAAC,QAAM,WAAS,WAAS,UAAQ,cAAY,aAAW,WAAS,kBAAgB,WAAS,iBAAe,kBAAgB,cAAY,UAAQ,SAAO,OAAK,CAIvM,GAAK,CAAC,EAAS,GAAaC,EAAS,GAAU,CAAC,EAAS,CAAC,MAAc,CAAC,GAAG,EAAS,OAAO,GAAG,EAAS,CAAC,EAAY,GAAK,CAAC,OAAQ,GAAU,IAAS,OAAY,OAAO,IAAM,EAAE,EAAO,eAAe,EAAY,GAAM,CAAC,EAAiB,CAAC,UAAU,EAAO,aAAa,EAAE,EAAG,CAAC,EAAS,EAAS,CAAC,CAMnS,GAAK,CAAC,EAAQ,GAAYA,EAAS,EAAE,CAAO,EAAaD,EAAO,EAAS,CAAC,MAAc,CAAI,GAAU,CAAC,EAAa,SAAS,EAAW,GAAG,EAAE,EAAE,CAAE,EAAa,QAAQ,GAAW,CAAC,EAAS,CAAC,CAAC,IAAM,EAAW,EAAS,EAAS,EAAe,EAAS,EAAS,EAAS,EAAW,OAOxQ,EAAK,MAAM,CAAC,KAAK,WAAW,aAAa,EAAS,EAAS,gBAAgB,SAAS,SAAS,EAAM,IAAI,EAAS,aAAa,KAAK,MAAM,CAAC,SAAS,WAAW,MAAM,OAAO,cAAc,OAAO,CAAC,SAAsB,EAAM,MAAM,CAAC,MAAM,CAAC,SAAS,WAAW,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,aAAW,aAAa,EAAY,QAAQ,OAAO,WAAW,SAAS,eAAe,SAAS,WAAW,wBAAwB,WAAW,EAAQ,iCAAiC,IAAA,GAAU,UAAU,EAAQ,aAAa,EAAI,GAAG,EAAQ,uDAAuD,EAAI,GAAG,EAAQ,kBAAkB,IAAA,GAAU,CAAC,SAAS,CAAC,CAAC,GAAU,CAAC,GAAuB,EAAK,OAAO,CAAC,MAAM,CAAC,GAAG,EAAY,WAAW,OAAO,CAAC,SAAS,EAAM,EAAE,CAAC,CAAC,GAAU,CAAC,GAAuB,EAAK,MAAM,CAAC,MAAM,CAAC,SAAS,WAAW,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,OAAO,WAAW,SAAS,eAAe,SAAS,QAAQ,EAAS,EAAE,EAAE,WAAW,WAAW,EAAY,SAAS,cAAc,OAAO,CAAC,SAAsB,EAAK,EAAU,CAAC,MAAM,EAAuB,SAAO,CAAC,EAAQ,CAAC,CAAC,CAAC,GAAuB,EAAK,EAAS,CAAC,MAAM,EAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,sCArFpkC,IAAmD,IAAqF,CAC9L,EAAmB,CAAC,UAAU,CAAC,SAAS,GAAG,QAAQ,OAAO,WAAW,KAAK,CAAC,aAAa,CAAC,SAAS,GAAG,QAAQ,UAAU,WAAW,KAAK,CAAC,UAAU,CAAC,SAAS,GAAG,QAAQ,WAAW,CAAC,WAAW,UAAU,cAAc,wBAAwB,iBAAiB,UAAU,CAAO,EAAmB,CAAC,WAAW,UAAU,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAK,CAAO,EAAoB,CAAC,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,mBAAmB,yBAAyB,iBAAiB,UAAU,gBAAgB,UAAU,iBAAiB,yBAAyB,uBAAuB,UAAU,gBAAgB,UAAU,CAAO,EAAkB,CAAC,SAAS,GAAK,KAAK,GAGppB,UAAU,IAAI,UAAU,IAAI,cAAc,IAAI,eAAe,KAAK,aAAa,IAAI,CAG7E,GAAW,CAAC,QAAM,YAAuB,EAAK,MAAM,CAAC,QAAQ,cAAc,MAAM,MAAM,OAAO,MAAM,KAAK,OAAO,OAAO,EAAM,YAAY,GAAG,cAAc,QAAQ,eAAe,QAAQ,cAAc,OAAO,MAAM,CAAC,QAAQ,QAG/N,gBAAgB,UAAU,UAAU,cAAc,EAAO,kBAAkB,CAAC,SAAsB,EAAK,OAAO,CAAC,EAAE,0BAA0B,WAAW,IAAI,gBAAgB,IAAI,iBAAiB,IAAI,MAAM,CAAC,UAAU,YAAY,EAAO,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAO,GAAU,CAAC,WAAsB,EAAM,MAAM,CAAC,QAAQ,cAAc,MAAM,MAAM,OAAO,MAAM,KAAK,OAAO,OAAO,EAAM,YAAY,GAAG,cAAc,QAAQ,eAAe,QAAQ,cAAc,OAAO,MAAM,CAAC,QAAQ,QAAQ,CAAC,SAAS,CAAc,EAAK,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,MAAM,MAAM,OAAO,KAAK,GAAG,IAAI,CAAC,CAAc,EAAK,OAAO,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC,CAAc,EAAK,OAAO,CAAC,EAAE,yDAAyD,CAAC,CAAc,EAAK,OAAO,CAAC,EAAE,uFAAuF,CAAC,CAAC,CAAC,CAAC,CAwDo2B,EAAY,IAErrD,EAAiB,IAiB4mC,EAAgB,YAAY,oBAC/pC,EAAoB,EAAgB,CAAC,MAAM,CAAC,KAAK,EAAY,OAAO,MAAM,QAAQ,aAAa,cAAc,CAAC,SAAS,CAAC,KAAK,EAAY,OAAO,MAAM,WAAW,aAAa,oCAAoC,gBAAgB,GAAK,CAAC,WAAW,CAAC,KAAK,EAAY,OAAO,MAAM,SAAS,aAAa,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,YAAY,CAAC,KAAK,EAAY,OAAO,MAAM,SAAS,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,YAAY,6FAA6F,CAAC,WAAW,CAAC,KAAK,EAAY,OAAO,MAAM,aAAa,SAAS,CAAC,UAAU,CAAC,KAAK,EAAY,KAAK,MAAM,aAAa,SAAS,WAAW,gBAAgB,aAAa,aAAa,CAAC,SAAS,GAAG,QAAQ,OAAO,WAAW,KAAK,CAAC,CAAC,WAAW,CAAC,KAAK,EAAY,MAAM,MAAM,cAAc,aAAa,UAAU,CAAC,aAAa,CAAC,KAAK,EAAY,KAAK,MAAM,gBAAgB,SAAS,WAAW,gBAAgB,aAAa,aAAa,CAAC,SAAS,GAAG,QAAQ,UAAU,WAAW,KAAK,CAAC,CAAC,cAAc,CAAC,KAAK,EAAY,MAAM,MAAM,iBAAiB,aAAa,wBAAwB,CAAC,UAAU,CAAC,KAAK,EAAY,KAAK,MAAM,aAAa,SAAS,WAAW,gBAAgB,aAAa,aAAa,CAAC,SAAS,GAAG,QAAQ,WAAW,CAAC,CAAC,iBAAiB,CAAC,KAAK,EAAY,MAAM,MAAM,eAAe,aAAa,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAY,OAAO,MAAM,OAAO,SAAS,CAAC,WAAW,CAAC,KAAK,EAAY,MAAM,MAAM,aAAa,aAAa,UAAU,CAAC,aAAa,CAAC,KAAK,EAAY,OAAO,MAAM,SAAS,aAAa,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,KAAK,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAY,OAAO,MAAM,UAAU,aAAa,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,EAAY,QAAQ,MAAM,SAAS,aAAa,GAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAY,OAAO,MAAM,SAAS,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAY,OAAO,MAAM,UAAU,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,EAAY,OAAO,MAAM,MAAM,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,KAAK,KAAK,CAAC,YAAY,CAAC,KAAK,EAAY,OAAO,MAAM,SAAS,aAAa,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,KAAK,KAAK,CAAC,mBAAmB,CAAC,KAAK,EAAY,MAAM,MAAM,cAAc,aAAa,yBAAyB,CAAC,iBAAiB,CAAC,KAAK,EAAY,MAAM,MAAM,YAAY,aAAa,UAAU,CAAC,gBAAgB,CAAC,KAAK,EAAY,MAAM,MAAM,cAAc,aAAa,UAAU,CAAC,iBAAiB,CAAC,KAAK,EAAY,MAAM,MAAM,YAAY,aAAa,yBAAyB,CAAC,uBAAuB,CAAC,KAAK,EAAY,MAAM,MAAM,gBAAgB,aAAa,UAAU,CAAC,gBAAgB,CAAC,KAAK,EAAY,MAAM,MAAM,aAAa,aAAa,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAY,OAAO,MAAM,YAAY,SAAS,CAAC,SAAS,CAAC,KAAK,EAAY,QAAQ,MAAM,YAAY,aAAa,GAAK,aAAa,KAAK,cAAc,MAAM,YAAY,4GAA4G,CAAC,KAAK,CAAC,KAAK,EAAY,QAAQ,MAAM,OAAO,aAAa,GAAK,aAAa,KAAK,cAAc,MAAM,OAAO,GAAG,CAACG,EAAE,SAAS,YAAY,sFAAsF,CAAC,UAAU,CAAC,KAAK,EAAY,OAAO,MAAM,aAAa,aAAa,IAAI,IAAI,IAAI,IAAI,EAAE,KAAK,IAAI,KAAK,IAAI,OAAO,GAAG,CAACA,EAAE,SAAS,YAAY,4FAA4F,CAAC,UAAU,CAAC,KAAK,EAAY,OAAO,MAAM,OAAO,aAAa,IAAI,IAAI,EAAE,IAAI,EAAE,KAAK,GAAG,KAAK,IAAI,OAAO,GAAG,CAACA,EAAE,SAAS,CAAC,cAAc,CAAC,KAAK,EAAY,OAAO,MAAM,WAAW,aAAa,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,eAAe,CAAC,KAAK,EAAY,OAAO,MAAM,SAAS,aAAa,KAAK,IAAI,EAAE,IAAI,IAAI,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,EAAY,OAAO,MAAM,YAAY,aAAa,IAAI,IAAI,GAAG,IAAI,EAAE,KAAK,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC"}