{"version":3,"file":"DynamicsForm.CIfuh-V3.mjs","names":["useState","useRef","_Fragment"],"sources":["https:/framerusercontent.com/modules/rVs0I0dqoSPMprchtrv6/XQODeGFOCEuqbnNGy3kW/DynamicsForm.js"],"sourcesContent":["// ─────────────────────────────────────────────────────────────────────────────\n// DynamicsForm.tsx — Framer Code Component\n//\n// A fully config-driven form component. Marketing adds this to any Framer page,\n// fills in the property panel, and it renders + submits the correct form.\n// No developer involvement needed to create new forms.\n//\n// HOW TO USE IN FRAMER:\n//   1. Assets → Code → + → paste this file\n//   2. Drag onto any page or frame\n//   3. Fill in the property panel (Form Key, Destination, Fields JSON, etc.)\n//   4. Connect to CMS if desired by binding props to CMS fields\n//\n// POSTHOG TRACKING:\n//   Requires PostHog snippet in Site Settings → Custom Code → <head>.\n//   Events fired:\n//     form_started    — first field interaction\n//     form_submitted  — successful submission\n//   identify()        — called on success if email field is present.\n//   Consent is treated as implied for all form submissions at this stage.\n// ─────────────────────────────────────────────────────────────────────────────\nimport{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{addPropertyControls,ControlType}from\"framer\";import{useState,useEffect,useRef}from\"react\";// ─── PostHog helper — safe call that no-ops if snippet not yet loaded ─────────\nfunction ph(method,...args){try{const posthog=window.posthog;if(posthog&&typeof posthog[method]===\"function\"){posthog[method](...args);}}catch{/* silently ignore if PostHog is blocked or not loaded */}}// ─── Component ────────────────────────────────────────────────────────────────\nexport default function DynamicsForm(props){const{formKey=\"lead-general\",destinationType=\"lead\",fieldsJson=\"\",metadata=\"\",heading=\"\",subheading=\"\",subject=\"Website enquiry\",successMessage=\"Thanks! We'll be in touch soon.\",submitLabel=\"Submit\",functionUrl=\"https://payevo-forms.azurewebsites.net/api/formsubmit\",primaryColor=\"#156bb4\",backgroundColor=\"#FFFFFF\",borderColor=\"#D1D5DB\",textColor=\"#111827\",labelColor=\"#374151\",placeholderColor=\"#9CA3AF\",errorColor=\"#DC2626\",borderRadius=8,inputPadding=12,gap=20,fontFamily=\"inherit\",fontSize=15}=props;const[fields,setFields]=useState([]);const[values,setValues]=useState({});const[errors,setErrors]=useState({});const[touched,setTouched]=useState({});const[status,setStatus]=useState(\"idle\");const[submitError,setSubmitError]=useState(\"\");const honeypotRef=useRef(null);// Track whether form_started has been fired this session\nconst formStartedRef=useRef(false);// Parse the fields JSON when it changes\nuseEffect(()=>{try{const parsed=JSON.parse(fieldsJson||\"[]\");setFields(parsed);const initial={};parsed.forEach(f=>{initial[f.name]=\"\";});setValues(initial);setErrors({});setTouched({});formStartedRef.current=false;}catch{setFields([]);}},[fieldsJson]);// ── Validation ──────────────────────────────────────────────────────────\nfunction validateField(field,value){if(field.required&&!value.trim()){return`${field.label} is required`;}if(field.type===\"email\"&&value.trim()){if(!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value)){return\"Please enter a valid email address\";}}if(field.type===\"tel\"&&value.trim()){if(!/^[\\d\\s\\-+().]{7,}$/.test(value)){return\"Please enter a valid phone number\";}}return\"\";}function validateAll(){const newErrors={};fields.forEach(f=>{const err=validateField(f,values[f.name]??\"\");if(err)newErrors[f.name]=err;});setErrors(newErrors);// Mark all as touched so errors show\nconst allTouched={};fields.forEach(f=>{allTouched[f.name]=true;});setTouched(allTouched);return Object.keys(newErrors).length===0;}function handleChange(name,value){const newValues={...values,[name]:value};setValues(newValues);// ── PostHog: fire form_started once on first interaction ───────────\nif(!formStartedRef.current){formStartedRef.current=true;ph(\"capture\",\"form_started\",{form_key:formKey,destination_type:destinationType,page:typeof window!==\"undefined\"?window.location.pathname:\"\"});}// Live validation once a field has been touched\nif(touched[name]){const field=fields.find(f=>f.name===name);if(field){const err=validateField(field,value);setErrors(prev=>({...prev,[name]:err}));}}}function handleBlur(name){setTouched(prev=>({...prev,[name]:true}));const field=fields.find(f=>f.name===name);if(field){const err=validateField(field,values[name]??\"\");setErrors(prev=>({...prev,[name]:err}));}}// ── Submit ───────────────────────────────────────────────────────────────\nasync function handleSubmit(){if(!validateAll())return;if(!functionUrl){setStatus(\"error\");setSubmitError(\"Form endpoint not configured.\");return;}setStatus(\"submitting\");setSubmitError(\"\");let parsedMetadata={};try{parsedMetadata=JSON.parse(metadata||\"{}\");}catch{/* ignore */}try{const res=await fetch(functionUrl,{method:\"POST\",headers:{\"Content-Type\":\"application/json\"},body:JSON.stringify({formKey,destinationType,fields:values,_hp:honeypotRef.current?.value??\"\",metadata:parsedMetadata,subject})});if(res.ok){setStatus(\"success\");// ── PostHog: form_submitted ────────────────────────────────\nph(\"capture\",\"form_submitted\",{form_key:formKey,destination_type:destinationType,consent_type:\"implied\",page:typeof window!==\"undefined\"?window.location.pathname:\"\"});// ── PostHog: identify if email is present ──────────────────\nconst email=values[\"email\"]??values[\"workEmail\"]??\"\";if(email){const firstName=values[\"firstName\"]??values[\"first_name\"]??\"\";const lastName=values[\"lastName\"]??values[\"last_name\"]??\"\";const fullName=[firstName,lastName].filter(Boolean).join(\" \");ph(\"identify\",email,{email,...fullName&&{name:fullName},...values[\"company\"]&&{company:values[\"company\"]},form_key:formKey,consent_type:\"implied\",consent_source:formKey,consent_timestamp:new Date().toISOString()});}}else{const data=await res.json().catch(()=>({}));setStatus(\"error\");setSubmitError(data.error??\"Something went wrong. Please try again.\");}}catch{setStatus(\"error\");setSubmitError(\"Unable to submit. Please check your connection and try again.\");}}// ── Styles ───────────────────────────────────────────────────────────────\nconst css={wrapper:{width:\"100%\",fontFamily,fontSize:`${fontSize}px`,color:textColor,backgroundColor,boxSizing:\"border-box\"},header:{marginBottom:`${gap}px`},heading:{fontSize:`${fontSize*1.4}px`,fontWeight:700,color:textColor,marginBottom:\"6px\",margin:0},subheading:{fontSize:`${fontSize*.9}px`,color:labelColor,marginTop:\"6px\",lineHeight:1.5},row:{display:\"flex\",gap:`${gap*.6}px`,marginBottom:`${gap}px`},fieldWrapper:{flex:1,minWidth:0},fieldWrapperFull:{marginBottom:`${gap}px`},label:{display:\"block\",fontSize:`${fontSize*.875}px`,fontWeight:500,color:labelColor,marginBottom:\"6px\"},required:{color:errorColor,marginLeft:\"3px\"},input:hasError=>({width:\"100%\",padding:`${inputPadding}px ${inputPadding*1.2}px`,fontSize:`${fontSize}px`,color:textColor,backgroundColor,border:`1.5px solid ${hasError?errorColor:borderColor}`,borderRadius:`${borderRadius*.7}px`,outline:\"none\",boxSizing:\"border-box\",transition:\"border-color 0.15s ease\",appearance:\"none\",WebkitAppearance:\"none\"}),errorText:{fontSize:`${fontSize*.8}px`,color:errorColor,marginTop:\"5px\",display:\"flex\",alignItems:\"center\",gap:\"4px\"},submitBtn:disabled=>({width:\"100%\",padding:`${inputPadding*1.1}px ${inputPadding*2}px`,fontSize:`${fontSize}px`,fontWeight:600,letterSpacing:\"0.01em\",color:\"#FFFFFF\",backgroundColor:primaryColor,border:\"none\",borderRadius:`${borderRadius*.7}px`,cursor:disabled?\"not-allowed\":\"pointer\",opacity:disabled?.65:1,transition:\"opacity 0.15s ease\",marginTop:`${gap*.4}px`}),submitError:{padding:`${inputPadding}px ${inputPadding*1.2}px`,backgroundColor:\"#FEF2F2\",border:`1px solid #FCA5A5`,borderRadius:`${borderRadius*.7}px`,color:\"#991B1B\",fontSize:`${fontSize*.875}px`,lineHeight:1.5,marginBottom:`${gap*.6}px`},successWrapper:{display:\"flex\",flexDirection:\"column\",alignItems:\"center\",justifyContent:\"center\",padding:`${gap*2}px ${gap}px`,textAlign:\"center\"},successIcon:{width:\"52px\",height:\"52px\",borderRadius:\"50%\",backgroundColor:`${primaryColor}18`,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",marginBottom:`${gap*.8}px`,fontSize:\"24px\",color:primaryColor},successTitle:{fontSize:`${fontSize*1.2}px`,fontWeight:700,color:textColor,marginBottom:\"10px\"},successMsg:{fontSize:`${fontSize*.95}px`,color:labelColor,lineHeight:1.6,maxWidth:\"360px\"}};// ── Success screen ───────────────────────────────────────────────────────\nif(status===\"success\"){return /*#__PURE__*/_jsx(\"div\",{style:css.wrapper,children:/*#__PURE__*/_jsxs(\"div\",{style:css.successWrapper,children:[/*#__PURE__*/_jsx(\"div\",{style:css.successIcon,children:\"✓\"}),/*#__PURE__*/_jsx(\"div\",{style:css.successTitle,children:\"You're all set!\"}),/*#__PURE__*/_jsx(\"div\",{style:css.successMsg,children:successMessage})]})});}const rows=[];let i=0;while(i<fields.length){const f=fields[i];if(f.halfWidth&&i+1<fields.length&&fields[i+1].halfWidth){rows.push({type:\"pair\",fields:[f,fields[i+1]]});i+=2;}else{rows.push({type:\"full\",field:f});i++;}}// ── Render a single input ────────────────────────────────────────────────\nfunction renderInput(field){const hasError=!!errors[field.name];const commonProps={id:field.name,name:field.name,value:values[field.name]??\"\",onChange:e=>handleChange(field.name,e.target.value),onBlur:()=>handleBlur(field.name),placeholder:field.placeholder??\"\",style:css.input(hasError)};if(field.type===\"select\"){return /*#__PURE__*/_jsxs(\"select\",{...commonProps,children:[/*#__PURE__*/_jsx(\"option\",{value:\"\",children:\"Select an option\"}),(field.options??[]).map(opt=>/*#__PURE__*/_jsx(\"option\",{value:opt,children:opt},opt))]});}if(field.type===\"textarea\"){return /*#__PURE__*/_jsx(\"textarea\",{...commonProps,rows:4,style:{...css.input(hasError),resize:\"vertical\",lineHeight:1.5}});}return /*#__PURE__*/_jsx(\"input\",{...commonProps,type:field.type});}function renderField(field){return /*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsxs(\"label\",{htmlFor:field.name,style:css.label,children:[field.label,field.required&&/*#__PURE__*/_jsx(\"span\",{style:css.required,children:\"*\"})]}),renderInput(field),touched[field.name]&&errors[field.name]&&/*#__PURE__*/_jsxs(\"div\",{style:css.errorText,children:[/*#__PURE__*/_jsx(\"span\",{children:\"⚠\"}),\" \",errors[field.name]]})]});}// ── Form render ──────────────────────────────────────────────────────────\nconst isSubmitting=status===\"submitting\";return /*#__PURE__*/_jsxs(\"div\",{style:css.wrapper,children:[/*#__PURE__*/_jsx(\"div\",{\"aria-hidden\":\"true\",style:{position:\"absolute\",opacity:0,pointerEvents:\"none\",height:0,overflow:\"hidden\"},children:/*#__PURE__*/_jsx(\"input\",{ref:honeypotRef,type:\"text\",name:\"_hp\",tabIndex:-1,autoComplete:\"off\",defaultValue:\"\"})}),(heading||subheading)&&/*#__PURE__*/_jsxs(\"div\",{style:css.header,children:[heading&&/*#__PURE__*/_jsx(\"h2\",{style:css.heading,children:heading}),subheading&&/*#__PURE__*/_jsx(\"p\",{style:css.subheading,children:subheading})]}),status===\"error\"&&submitError&&/*#__PURE__*/_jsx(\"div\",{style:css.submitError,children:submitError}),rows.map((row,idx)=>{if(row.type===\"pair\"){return /*#__PURE__*/_jsx(\"div\",{style:css.row,children:row.fields.map(f=>/*#__PURE__*/_jsx(\"div\",{style:css.fieldWrapper,children:renderField(f)},f.name))},idx);}return /*#__PURE__*/_jsx(\"div\",{style:css.fieldWrapperFull,children:renderField(row.field)},row.field.name);}),/*#__PURE__*/_jsx(\"button\",{onClick:handleSubmit,disabled:isSubmitting,style:css.submitBtn(isSubmitting),children:isSubmitting?\"Submitting…\":submitLabel})]});}// ─── Framer Property Controls ─────────────────────────────────────────────────\naddPropertyControls(DynamicsForm,{// ── Form identity ──────────────────────────────────────────────────────\nsubject:{type:ControlType.String,title:\"Form Subject\",defaultValue:\"Website enquiry\",description:\"Appears as the TOPIC on the Dynamics lead record.\"},formKey:{type:ControlType.String,title:\"Form Key\",placeholder:\"lead-general\",description:\"Unique identifier. Not used in the lead but required\"},destinationType:{type:ControlType.Enum,title:\"Destination\",options:[\"lead\",\"event-registration\",\"contest-entry\"],optionTitles:[\"Lead\",\"Event Registration\",\"Contest Entry\"],description:\"Which Dynamics entity to write to.\"},fieldsJson:{type:ControlType.String,title:\"Fields (JSON)\",displayTextArea:true,placeholder:'[{\"name\":\"email\",\"label\":\"Work Email\",\"type\":\"email\",\"required\":true}]',description:\"JSON array of field definitions. See README for schema.\"},metadata:{type:ControlType.String,title:\"Metadata (JSON)\",placeholder:'{\"eventId\":\"EVT-001\"}',description:\"Optional extra data stamped on the Dynamics record.\"},// ── Content ────────────────────────────────────────────────────────────\nheading:{type:ControlType.String,title:\"Heading\",placeholder:\"Get in touch\"},subheading:{type:ControlType.String,title:\"Subheading\",placeholder:\"We'll respond within one business day.\"},successMessage:{type:ControlType.String,title:\"Success Message\",defaultValue:\"Thanks! We'll be in touch within one business day.\"},submitLabel:{type:ControlType.String,title:\"Button Label\",defaultValue:\"Submit\"},// ── Endpoint ───────────────────────────────────────────────────────────\nfunctionUrl:{type:ControlType.String,title:\"Function URL\",placeholder:\"https://payevo-forms.azurewebsites.net/api/formSubmit\",description:\"Your Azure Function endpoint. Set this once as a site variable.\"},// ── Appearance ─────────────────────────────────────────────────────────\nprimaryColor:{type:ControlType.Color,title:\"Primary (Button)\",defaultValue:\"#0057FF\"},backgroundColor:{type:ControlType.Color,title:\"Background\",defaultValue:\"#FFFFFF\"},borderColor:{type:ControlType.Color,title:\"Border\",defaultValue:\"#D1D5DB\"},textColor:{type:ControlType.Color,title:\"Text\",defaultValue:\"#111827\"},labelColor:{type:ControlType.Color,title:\"Labels\",defaultValue:\"#374151\"},errorColor:{type:ControlType.Color,title:\"Error\",defaultValue:\"#DC2626\"},borderRadius:{type:ControlType.Number,title:\"Border Radius\",defaultValue:8,min:0,max:24,step:1,unit:\"px\"},inputPadding:{type:ControlType.Number,title:\"Input Padding\",defaultValue:12,min:6,max:24,step:1,unit:\"px\"},gap:{type:ControlType.Number,title:\"Field Gap\",defaultValue:20,min:8,max:40,step:2,unit:\"px\"},fontSize:{type:ControlType.Number,title:\"Font Size\",defaultValue:15,min:12,max:20,step:1,unit:\"px\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"DynamicsForm\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./DynamicsForm.map"],"mappings":"gNAsBA,SAAS,EAAG,EAAO,GAAG,EAAK,CAAC,GAAG,CAAC,IAAM,EAAQ,EAAO,QAAW,GAAS,OAAO,EAAQ,IAAU,YAAY,EAAQ,EAAO,CAAC,GAAG,CAAI,CAAG,MAAM,CAA0D,CAAC,CACzM,SAAwB,EAAa,EAAM,CAAC,GAAK,CAAC,UAAQ,eAAe,kBAAgB,OAAO,aAAW,GAAG,WAAS,GAAG,UAAQ,GAAG,aAAW,GAAG,UAAQ,kBAAkB,iBAAe,kCAAkC,cAAY,SAAS,cAAY,wDAAwD,eAAa,UAAU,kBAAgB,UAAU,cAAY,UAAU,YAAU,UAAU,aAAW,UAAU,oBAAiB,UAAU,aAAW,UAAU,eAAa,EAAE,eAAa,GAAG,MAAI,GAAG,cAAW,UAAU,WAAS,IAAI,EAAW,CAAC,EAAO,GAAWA,EAAS,CAAC,CAAC,EAAO,CAAC,EAAO,GAAWA,EAAS,CAAC,CAAC,EAAO,CAAC,EAAO,GAAWA,EAAS,CAAC,CAAC,EAAO,CAAC,EAAQ,GAAYA,EAAS,CAAC,CAAC,EAAO,CAAC,EAAO,GAAWA,EAAS,MAAM,EAAO,CAAC,EAAY,GAAgBA,EAAS,EAAE,EAAQ,EAAYC,EAAO,IAAI,EAC1yB,EAAeA,EAAO,EAAK,EACjC,MAAc,CAAC,GAAG,CAAC,IAAM,EAAO,KAAK,MAAM,GAAY,IAAI,EAAE,EAAU,CAAM,EAAE,IAAM,EAAQ,CAAC,EAAE,EAAO,QAAQ,GAAG,CAAC,EAAQ,EAAE,MAAM,EAAG,CAAC,EAAE,EAAU,CAAO,EAAE,EAAU,CAAC,CAAC,EAAE,EAAW,CAAC,CAAC,EAAE,EAAe,QAAQ,EAAM,MAAM,CAAC,EAAU,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC,CAAU,CAAC,EAC1P,SAAS,EAAc,EAAM,EAAM,CAAgU,OAA5T,EAAM,UAAU,CAAC,EAAM,KAAK,EAAS,GAAG,EAAM,MAAM,cAAkB,EAAM,OAAO,SAAS,EAAM,KAAK,GAAM,CAAC,6BAA6B,KAAK,CAAK,EAAS,qCAA0C,EAAM,OAAO,OAAO,EAAM,KAAK,GAAM,CAAC,qBAAqB,KAAK,CAAK,EAAS,oCAA4C,EAAG,CAAC,SAAS,GAAa,CAAC,IAAM,EAAU,CAAC,EAAE,EAAO,QAAQ,GAAG,CAAC,IAAM,EAAI,EAAc,EAAE,EAAO,EAAE,OAAO,EAAE,EAAK,IAAI,EAAU,EAAE,MAAM,EAAI,CAAC,EAAE,EAAU,CAAS,EAC3gB,IAAM,EAAW,CAAC,EAAuE,OAArE,EAAO,QAAQ,GAAG,CAAC,EAAW,EAAE,MAAM,EAAK,CAAC,EAAE,EAAW,CAAU,EAAS,OAAO,KAAK,CAAS,CAAC,CAAC,SAAS,CAAE,CAAC,SAAS,EAAa,EAAK,EAAM,CAAC,IAAM,EAAU,CAAC,GAAG,GAAQ,GAAM,CAAK,EAE5M,GAF8M,EAAU,CAAS,EAC7N,EAAe,UAAS,EAAe,QAAQ,GAAK,EAAG,UAAU,eAAe,CAAC,SAAS,EAAQ,iBAAiB,EAAgB,KAAY,IAAS,OAAqC,GAAzB,EAAO,SAAS,QAAW,CAAC,GACjM,EAAQ,GAAM,CAAC,IAAM,EAAM,EAAO,KAAK,GAAG,EAAE,OAAO,CAAI,EAAE,GAAG,EAAM,CAAC,IAAM,EAAI,EAAc,EAAM,CAAK,EAAE,EAAU,IAAO,CAAC,GAAG,GAAM,GAAM,CAAG,EAAE,CAAE,CAAC,CAAC,CAAC,SAAS,EAAW,EAAK,CAAC,EAAW,IAAO,CAAC,GAAG,GAAM,GAAM,EAAI,EAAE,EAAE,IAAM,EAAM,EAAO,KAAK,GAAG,EAAE,OAAO,CAAI,EAAE,GAAG,EAAM,CAAC,IAAM,EAAI,EAAc,EAAM,EAAO,IAAO,EAAE,EAAE,EAAU,IAAO,CAAC,GAAG,GAAM,GAAM,CAAG,EAAE,CAAE,CAAC,CACvW,eAAe,GAAc,CAAC,GAAG,CAAC,EAAY,EAAE,OAAO,GAAG,CAAC,EAAY,CAAC,EAAU,OAAO,EAAE,EAAe,+BAA+B,EAAE,MAAO,CAAC,EAAU,YAAY,EAAE,EAAe,EAAE,EAAE,IAAI,EAAe,CAAC,EAAE,GAAG,CAAC,EAAe,KAAK,MAAM,GAAU,IAAI,CAAE,MAAM,CAAa,CAAC,GAAG,CAAC,IAAM,EAAI,MAAM,MAAM,EAAY,CAAC,OAAO,OAAO,QAAQ,CAAC,eAAe,kBAAkB,EAAE,KAAK,KAAK,UAAU,CAAC,UAAQ,kBAAgB,OAAO,EAAO,IAAI,EAAY,SAAS,OAAO,GAAG,SAAS,EAAe,SAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAI,GAAG,CAAC,EAAU,SAAS,EACvhB,EAAG,UAAU,iBAAiB,CAAC,SAAS,EAAQ,iBAAiB,EAAgB,aAAa,UAAU,KAAY,IAAS,OAAqC,GAAzB,EAAO,SAAS,QAAW,CAAC,EACrK,IAAM,EAAM,EAAO,OAAU,EAAO,WAAc,GAAG,GAAG,EAAM,CAA0H,IAAM,EAAS,CAAxH,EAAO,WAAc,EAAO,YAAe,GAAkB,EAAO,UAAa,EAAO,WAAc,EAAqC,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,EAAE,EAAG,WAAW,EAAM,CAAC,QAAM,GAAG,GAAU,CAAC,KAAK,CAAQ,EAAE,GAAG,EAAO,SAAY,CAAC,QAAQ,EAAO,OAAU,EAAE,SAAS,EAAQ,aAAa,UAAU,eAAe,EAAQ,kBAAkB,IAAI,KAAK,CAAA,CAAE,YAAY,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,IAAM,EAAK,MAAM,EAAI,KAAK,CAAC,CAAC,WAAW,CAAC,EAAE,EAAE,EAAU,OAAO,EAAE,EAAe,EAAK,OAAO,yCAAyC,CAAE,CAAC,MAAM,CAAC,EAAU,OAAO,EAAE,EAAe,+DAA+D,CAAE,CAAC,CACpsB,IAAM,EAAI,CAAC,QAAQ,CAAC,MAAM,OAAO,cAAW,SAAS,GAAG,EAAS,IAAI,MAAM,EAAU,kBAAgB,UAAU,YAAY,EAAE,OAAO,CAAC,aAAa,GAAG,EAAI,GAAG,EAAE,QAAQ,CAAC,SAAS,GAAG,EAAS,IAAI,IAAI,WAAW,IAAI,MAAM,EAAU,aAAa,MAAM,OAAO,CAAC,EAAE,WAAW,CAAC,SAAS,GAAG,EAAS,GAAG,IAAI,MAAM,EAAW,UAAU,MAAM,WAAW,GAAG,EAAE,IAAI,CAAC,QAAQ,OAAO,IAAI,GAAG,EAAI,GAAG,IAAI,aAAa,GAAG,EAAI,GAAG,EAAE,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,iBAAiB,CAAC,aAAa,GAAG,EAAI,GAAG,EAAE,MAAM,CAAC,QAAQ,QAAQ,SAAS,GAAG,EAAS,KAAK,IAAI,WAAW,IAAI,MAAM,EAAW,aAAa,KAAK,EAAE,SAAS,CAAC,MAAM,EAAW,WAAW,KAAK,EAAE,MAAM,IAAW,CAAC,MAAM,OAAO,QAAQ,GAAG,EAAa,KAAK,EAAa,IAAI,IAAI,SAAS,GAAG,EAAS,IAAI,MAAM,EAAU,kBAAgB,OAAO,eAAe,EAAS,EAAW,IAAc,aAAa,GAAG,EAAa,GAAG,IAAI,QAAQ,OAAO,UAAU,aAAa,WAAW,0BAA0B,WAAW,OAAO,iBAAiB,MAAM,GAAG,UAAU,CAAC,SAAS,GAAG,EAAS,GAAG,IAAI,MAAM,EAAW,UAAU,MAAM,QAAQ,OAAO,WAAW,SAAS,IAAI,KAAK,EAAE,UAAU,IAAW,CAAC,MAAM,OAAO,QAAQ,GAAG,EAAa,IAAI,KAAK,EAAa,EAAE,IAAI,SAAS,GAAG,EAAS,IAAI,WAAW,IAAI,cAAc,SAAS,MAAM,UAAU,gBAAgB,EAAa,OAAO,OAAO,aAAa,GAAG,EAAa,GAAG,IAAI,OAAO,EAAS,cAAc,UAAU,QAAQ,EAAS,IAAI,EAAE,WAAW,qBAAqB,UAAU,GAAG,EAAI,GAAG,GAAG,GAAG,YAAY,CAAC,QAAQ,GAAG,EAAa,KAAK,EAAa,IAAI,IAAI,gBAAgB,UAAU,OAAO,oBAAoB,aAAa,GAAG,EAAa,GAAG,IAAI,MAAM,UAAU,SAAS,GAAG,EAAS,KAAK,IAAI,WAAW,IAAI,aAAa,GAAG,EAAI,GAAG,GAAG,EAAE,eAAe,CAAC,QAAQ,OAAO,cAAc,SAAS,WAAW,SAAS,eAAe,SAAS,QAAQ,GAAG,EAAI,EAAE,KAAK,EAAI,IAAI,UAAU,QAAQ,EAAE,YAAY,CAAC,MAAM,OAAO,OAAO,OAAO,aAAa,MAAM,gBAAgB,GAAG,EAAa,IAAI,QAAQ,OAAO,WAAW,SAAS,eAAe,SAAS,aAAa,GAAG,EAAI,GAAG,IAAI,SAAS,OAAO,MAAM,CAAY,EAAE,aAAa,CAAC,SAAS,GAAG,EAAS,IAAI,IAAI,WAAW,IAAI,MAAM,EAAU,aAAa,MAAM,EAAE,WAAW,CAAC,SAAS,GAAG,EAAS,IAAI,IAAI,MAAM,EAAW,WAAW,IAAI,SAAS,OAAO,CAAC,EACltE,GAAG,IAAS,UAAW,OAAoB,EAAK,MAAM,CAAC,MAAM,EAAI,QAAQ,SAAsB,EAAM,MAAM,CAAC,MAAM,EAAI,eAAe,SAAS,CAAc,EAAK,MAAM,CAAC,MAAM,EAAI,YAAY,SAAS,GAAG,CAAC,EAAe,EAAK,MAAM,CAAC,MAAM,EAAI,aAAa,SAAS,iBAAiB,CAAC,EAAe,EAAK,MAAM,CAAC,MAAM,EAAI,WAAW,SAAS,CAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAG,IAAM,EAAK,CAAC,EAAM,EAAE,EAAE,KAAM,EAAE,EAAO,QAAO,CAAC,IAAM,EAAE,EAAO,GAAM,EAAE,WAAW,EAAE,EAAE,EAAO,QAAQ,EAAO,EAAE,EAAE,CAAC,WAAW,EAAK,KAAK,CAAC,KAAK,OAAO,OAAO,CAAC,EAAE,EAAO,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAQ,EAAK,KAAK,CAAC,KAAK,OAAO,MAAM,CAAC,CAAC,EAAE,IAAK,CAClkB,SAAS,EAAY,EAAM,CAAC,IAAM,EAAS,CAAC,CAAC,EAAO,EAAM,MAAY,EAAY,CAAC,GAAG,EAAM,KAAK,KAAK,EAAM,KAAK,MAAM,EAAO,EAAM,OAAO,GAAG,SAAS,GAAG,EAAa,EAAM,KAAK,EAAE,OAAO,KAAK,EAAE,WAAW,EAAW,EAAM,IAAI,EAAE,YAAY,EAAM,aAAa,GAAG,MAAM,EAAI,MAAM,CAAQ,CAAC,EAAiZ,OAA5Y,EAAM,OAAO,SAA8B,EAAM,SAAS,CAAC,GAAG,EAAY,SAAS,CAAc,EAAK,SAAS,CAAC,MAAM,GAAG,SAAS,kBAAkB,CAAC,GAAG,EAAM,SAAS,CAAC,EAAA,CAAG,IAAI,GAAkB,EAAK,SAAS,CAAC,MAAM,EAAI,SAAS,CAAG,EAAE,CAAG,CAAC,CAAC,CAAC,CAAC,EAAM,EAAM,OAAO,WAAgC,EAAK,WAAW,CAAC,GAAG,EAAY,KAAK,EAAE,MAAM,CAAC,GAAG,EAAI,MAAM,CAAQ,EAAE,OAAO,WAAW,WAAW,GAAG,CAAC,CAAC,EAAuB,EAAK,QAAQ,CAAC,GAAG,EAAY,KAAK,EAAM,IAAI,CAAC,CAAE,CAAC,SAAS,EAAY,EAAM,CAAC,OAAoB,EAAMC,EAAU,CAAC,SAAS,CAAc,EAAM,QAAQ,CAAC,QAAQ,EAAM,KAAK,MAAM,EAAI,MAAM,SAAS,CAAC,EAAM,MAAM,EAAM,UAAuB,EAAK,OAAO,CAAC,MAAM,EAAI,SAAS,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAY,CAAK,EAAE,EAAQ,EAAM,OAAO,EAAO,EAAM,OAAoB,EAAM,MAAM,CAAC,MAAM,EAAI,UAAU,SAAS,CAAc,EAAK,OAAO,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,EAAO,EAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAC7pC,IAAM,EAAa,IAAS,aAAa,OAAoB,EAAM,MAAM,CAAC,MAAM,EAAI,QAAQ,SAAS,CAAc,EAAK,MAAM,CAAC,cAAc,OAAO,MAAM,CAAC,SAAS,WAAW,QAAQ,EAAE,cAAc,OAAO,OAAO,EAAE,SAAS,QAAQ,EAAE,SAAsB,EAAK,QAAQ,CAAC,IAAI,EAAY,KAAK,OAAO,KAAK,MAAM,SAAS,GAAG,aAAa,MAAM,aAAa,EAAE,CAAC,CAAC,CAAC,GAAG,GAAS,IAA0B,EAAM,MAAM,CAAC,MAAM,EAAI,OAAO,SAAS,CAAC,GAAsB,EAAK,KAAK,CAAC,MAAM,EAAI,QAAQ,SAAS,CAAO,CAAC,EAAE,GAAyB,EAAK,IAAI,CAAC,MAAM,EAAI,WAAW,SAAS,CAAU,CAAC,CAAC,CAAC,CAAC,EAAE,IAAS,SAAS,GAA0B,EAAK,MAAM,CAAC,MAAM,EAAI,YAAY,SAAS,CAAW,CAAC,EAAE,EAAK,KAAK,EAAI,IAAU,EAAI,OAAO,OAA4B,EAAK,MAAM,CAAC,MAAM,EAAI,IAAI,SAAS,EAAI,OAAO,IAAI,GAAgB,EAAK,MAAM,CAAC,MAAM,EAAI,aAAa,SAAS,EAAY,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,CAAG,EAAuB,EAAK,MAAM,CAAC,MAAM,EAAI,iBAAiB,SAAS,EAAY,EAAI,KAAK,CAAC,EAAE,EAAI,MAAM,IAAI,CAAG,EAAe,EAAK,SAAS,CAAC,QAAQ,EAAa,SAAS,EAAa,MAAM,EAAI,UAAU,CAAY,EAAE,SAAS,EAAa,cAAc,CAAW,CAAC,CAAC,CAAC,CAAC,CAAE,qBAf5jC,IAAoD,IAA6C,EAgB/K,EAAoB,EAAa,CACjC,QAAQ,CAAC,KAAK,EAAY,OAAO,MAAM,eAAe,aAAa,kBAAkB,YAAY,mDAAmD,EAAE,QAAQ,CAAC,KAAK,EAAY,OAAO,MAAM,WAAW,YAAY,eAAe,YAAY,sDAAsD,EAAE,gBAAgB,CAAC,KAAK,EAAY,KAAK,MAAM,cAAc,QAAQ,CAAC,OAAO,qBAAqB,eAAe,EAAE,aAAa,CAAC,OAAO,qBAAqB,eAAe,EAAE,YAAY,oCAAoC,EAAE,WAAW,CAAC,KAAK,EAAY,OAAO,MAAM,gBAAgB,gBAAgB,GAAK,YAAY,yEAAyE,YAAY,yDAAyD,EAAE,SAAS,CAAC,KAAK,EAAY,OAAO,MAAM,kBAAkB,YAAY,wBAAwB,YAAY,qDAAqD,EAC/4B,QAAQ,CAAC,KAAK,EAAY,OAAO,MAAM,UAAU,YAAY,cAAc,EAAE,WAAW,CAAC,KAAK,EAAY,OAAO,MAAM,aAAa,YAAY,wCAAwC,EAAE,eAAe,CAAC,KAAK,EAAY,OAAO,MAAM,kBAAkB,aAAa,oDAAoD,EAAE,YAAY,CAAC,KAAK,EAAY,OAAO,MAAM,eAAe,aAAa,QAAQ,EAC5Y,YAAY,CAAC,KAAK,EAAY,OAAO,MAAM,eAAe,YAAY,wDAAwD,YAAY,iEAAiE,EAC3M,aAAa,CAAC,KAAK,EAAY,MAAM,MAAM,mBAAmB,aAAa,SAAS,EAAE,gBAAgB,CAAC,KAAK,EAAY,MAAM,MAAM,aAAa,aAAa,SAAS,EAAE,YAAY,CAAC,KAAK,EAAY,MAAM,MAAM,SAAS,aAAa,SAAS,EAAE,UAAU,CAAC,KAAK,EAAY,MAAM,MAAM,OAAO,aAAa,SAAS,EAAE,WAAW,CAAC,KAAK,EAAY,MAAM,MAAM,SAAS,aAAa,SAAS,EAAE,WAAW,CAAC,KAAK,EAAY,MAAM,MAAM,QAAQ,aAAa,SAAS,EAAE,aAAa,CAAC,KAAK,EAAY,OAAO,MAAM,gBAAgB,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,KAAK,IAAI,EAAE,aAAa,CAAC,KAAK,EAAY,OAAO,MAAM,gBAAgB,aAAa,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,KAAK,IAAI,EAAE,IAAI,CAAC,KAAK,EAAY,OAAO,MAAM,YAAY,aAAa,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,KAAK,IAAI,EAAE,SAAS,CAAC,KAAK,EAAY,OAAO,MAAM,YAAY,aAAa,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,EAAE,KAAK,IAAI,CAAC,CAAC"}