@argusoft/medplat-core 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"file":"ImmunizationConfigurationBase-CdCgDaAl.js","sources":["../src/views/ImmunizationConfiguration/ImmunizationConfiguration.jsx","../src/views/ImmunizationConfiguration/components/VaccineCard.jsx","../src/views/ImmunizationConfiguration/service/index.js","../src/views/ImmunizationConfiguration/components/AddCustomVaccineModal.jsx","../src/views/ImmunizationConfiguration/Skeletons/VaccineGridSkeleton.jsx","../src/views/ImmunizationConfiguration/ImmunizationScheduleConfiguration.jsx","../src/views/ImmunizationConfiguration/components/ConfigureBaseDateModal.jsx","../src/views/ImmunizationConfiguration/components/ConfigureFiltersModal.jsx","../src/views/ImmunizationConfiguration/components/ConfigureRecipientModal.jsx","../src/views/ImmunizationConfiguration/components/DoseDetailsTable.jsx","../../app-shell/src/common/services/LocationService.js","../../app-shell/src/common/services/LocationType.js","../src/views/ImmunizationConfiguration/components/GeographicalApplicability.jsx","../src/views/ImmunizationConfiguration/components/VaccineDependencies.jsx","../src/views/ImmunizationConfiguration/components/DoseSelector.jsx","../src/views/ImmunizationConfiguration/components/VaccineFilters.jsx","../src/views/ImmunizationConfiguration/utils/summaryUtils.js","../src/views/ImmunizationConfiguration/utils/validationUtils.js","../src/views/ImmunizationConfiguration/ImmunizationSummary.jsx","../src/views/ImmunizationConfiguration/ImmunizationConfigurationBase.jsx"],"sourcesContent":["import { useDispatch } from \"react-redux\";\nimport { setCurrentView } from \"@/store/reducers/immunizationSlice\";\nimport {\n Box,\n Typography,\n TextField,\n InputAdornment,\n Button,\n IconButton,\n Tooltip,\n} from \"@mui/material\";\nimport Grid from \"@mui/material/Grid2\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport PropTypes from \"prop-types\";\nimport {\n faSearch,\n faInfoCircle,\n faPlus,\n faArrowRight,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport \"./styles/ImmunizationConfiguration.scss\";\n\nconst TemplateCard = ({\n title,\n toolTipText,\n buttonText,\n icon,\n iconColor,\n iconBgColor,\n isCustom,\n onClick,\n}) => {\n return (\n <Box className={`template-card ${isCustom ? \"custom-card\" : \"\"}`}>\n <Box className=\"card-header\">\n <Box className=\"icon-wrapper\" style={{ backgroundColor: iconBgColor }}>\n <FontAwesomeIcon\n icon={icon}\n className=\"main-icon\"\n style={{ color: iconColor }}\n />\n </Box>\n <Tooltip arrow placement=\"right\" title={toolTipText}>\n <IconButton size=\"small\" className=\"info-btn\">\n <FontAwesomeIcon icon={faInfoCircle} />\n </IconButton>\n </Tooltip>\n </Box>\n\n <Typography className=\"card-title\">{title}</Typography>\n\n <Button\n fullWidth\n className={`card-btn ${isCustom ? \"primary-btn\" : \"secondary-btn\"}`}\n endIcon={<FontAwesomeIcon icon={faArrowRight} />}\n onClick={onClick}\n >\n {buttonText}\n </Button>\n </Box>\n );\n};\n\nTemplateCard.propTypes = {\n title: PropTypes.string.isRequired,\n toolTipText: PropTypes.string,\n buttonText: PropTypes.string.isRequired,\n icon: PropTypes.oneOfType([PropTypes.object, PropTypes.array]).isRequired,\n iconColor: PropTypes.string.isRequired,\n iconBgColor: PropTypes.string.isRequired,\n isCustom: PropTypes.bool,\n onClick: PropTypes.func,\n};\n\nTemplateCard.defaultProps = {\n isCustom: false,\n onClick: () => {},\n};\n\nconst ImmunizationConfiguration = () => {\n const dispatch = useDispatch();\n\n const handleOpenConfiguration = () => {\n dispatch(setCurrentView(\"schedule-config\"));\n };\n\n return (\n <Box className=\"immunization-landing\">\n <Box className=\"content-wrapper\">\n <Box className=\"header-text\">\n <Typography className=\"page-title\">\n Create Immunization Records Using Template\n </Typography>\n <Typography className=\"page-subtitle\">\n Select a pre-configured template or make your own, to configure your\n immunization records.\n </Typography>\n </Box>\n\n <Box className=\"search-filter-section\">\n <TextField\n fullWidth\n placeholder=\"Search templates, (e.g. WHO, Govt of India, ...)\"\n className=\"search-field\"\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <FontAwesomeIcon icon={faSearch} className=\"search-icon\" />\n </InputAdornment>\n ),\n }}\n />\n {/* <Button\n className=\"filter-button\"\n startIcon={<FontAwesomeIcon icon={faSlidersH} />}\n disabled={true}\n >\n Filters\n </Button> */}\n </Box>\n\n <Grid container spacing={{ xs: 2, md: 4 }} className=\"template-grid\">\n {/* <Grid size={{ xs: 12, sm: 12, md: 4 }}>\n <TemplateCard\n title=\"WHO Guidelines\"\n toolTipText=\"WHO Guidelines\"\n buttonText=\"Select Template\"\n icon={faGlobe}\n iconColor=\"#1C86F3\"\n iconBgColor=\"#E8F2FE\"\n />\n </Grid>\n <Grid size={{ xs: 12, sm: 12, md: 4 }}>\n <TemplateCard\n title=\"Govt. Of India\"\n toolTipText=\"Govt. Of India\"\n buttonText=\"Select Template\"\n icon={faBuilding}\n iconColor=\"#F18A37\"\n iconBgColor=\"#FEF3EA\"\n />\n </Grid> */}\n <Grid\n size={{ xs: 12, sm: 10, md: 6, lg: 5 }}\n className=\"custom-template-slot\"\n >\n <TemplateCard\n title=\"Custom Template\"\n toolTipText=\"Custom Template\"\n buttonText=\"Open Configuration\"\n icon={faPlus}\n iconColor=\"#4c5e70\"\n iconBgColor=\"#E7F7EF\"\n isCustom={true}\n onClick={handleOpenConfiguration}\n />\n </Grid>\n </Grid>\n </Box>\n </Box>\n );\n};\n\nexport default ImmunizationConfiguration;\n","import { Box, Typography } from \"@mui/material\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faSyringe, faPlus } from \"@fortawesome/free-solid-svg-icons\";\nimport PropTypes from \"prop-types\";\n\nconst VaccineCard = ({\n vaccine = {},\n selected = false,\n onClick = () => {},\n isCustom = false,\n}) => {\n return (\n <Box\n className={`vaccine-card ${selected ? \"selected\" : \"\"} ${\n isCustom ? \"custom-vaccine\" : \"\"\n }`}\n onClick={onClick}\n >\n <Box className=\"icon-container\">\n <FontAwesomeIcon icon={isCustom ? faPlus : faSyringe} />\n </Box>\n <Box className=\"text-container\">\n <Typography className=\"vaccine-name\">\n {isCustom ? \"ADD CUSTOM VACCINE\" : vaccine.name}\n </Typography>\n {vaccine?.category && (\n <Typography className=\"vaccine-cat\">{vaccine.category}</Typography>\n )}\n </Box>\n </Box>\n );\n};\n\nVaccineCard.propTypes = {\n vaccine: PropTypes.shape({\n name: PropTypes.string,\n category: PropTypes.string,\n }),\n selected: PropTypes.bool,\n onClick: PropTypes.func,\n isCustom: PropTypes.bool,\n};\n\nexport default VaccineCard;\n","import { execute, executeAll } from \"@/common/services/GlobalApis\";\nimport { api } from \"@/common/interceptors/AxiosInterceptor\";\n\nconst safeParseJson = (value, fallback) => {\n if (value == null) {\n return fallback;\n }\n\n if (typeof value !== \"string\") {\n return value;\n }\n\n try {\n return JSON.parse(value);\n } catch {\n return fallback;\n }\n};\n\nconst toStableId = (...parts) => parts.filter(Boolean).join(\"_\");\n\nconst normaliseEligibilityValue = (value) => {\n if (\n value === undefined ||\n value === null ||\n value === \"\" ||\n value === \"N.A.\" ||\n value === \"null days\"\n ) {\n return \"N.A.\";\n }\n\n return value;\n};\n\nexport const calculateOverallEligibility = (\n doseDetails,\n doseType = \"FLEXIBLE\",\n doses = 1,\n) => {\n if (doses === 0) {\n return \"N.A.\";\n }\n\n if (!doseDetails) {\n return \"N.A.\";\n }\n\n if (doseType === \"FIXED\") {\n const details = Array.isArray(doseDetails) ? doseDetails[0] : doseDetails;\n if (!details) {\n return \"N.A.\";\n }\n\n const eligibleFrom = normaliseEligibilityValue(details.eligibleFrom);\n const eligibleTo = normaliseEligibilityValue(details.eligibleTo);\n\n if (eligibleFrom === \"N.A.\" && eligibleTo === \"N.A.\") {\n return \"N.A.\";\n }\n\n return `${eligibleFrom} to ${eligibleTo}`;\n }\n\n if (!Array.isArray(doseDetails) || doseDetails.length === 0) {\n return \"N.A.\";\n }\n\n const first = normaliseEligibilityValue(doseDetails[0].eligibleFrom);\n const last = normaliseEligibilityValue(\n doseDetails[doseDetails.length - 1].eligibleTo,\n );\n\n if (first === \"N.A.\" && last === \"N.A.\") {\n return \"N.A.\";\n }\n\n return `${first} to ${last}`;\n};\n\nexport const mapImmunizationVaccineConfig = (vaccine) => {\n const doseTypeLower = String(vaccine.dose_type || \"\").toLowerCase();\n const isFixed =\n doseTypeLower === \"fixed\" || doseTypeLower === \"na\" || !vaccine.dose_type;\n\n const doseDetails = isFixed\n ? [\n {\n id: toStableId(\"fixed\", vaccine.id),\n eligibleFrom:\n vaccine.dose_eligible_from !== undefined\n ? `${vaccine.dose_eligible_from} days`\n : \"\",\n eligibleTo:\n vaccine.dose_eligible_to !== undefined\n ? `${vaccine.dose_eligible_to} days`\n : \"\",\n interval: vaccine.min_gap || 0,\n },\n ]\n : safeParseJson(vaccine.dose, []).map((dose, index) => ({\n id: dose.id || toStableId(\"dose\", vaccine.id, index),\n isBooster:\n dose.isBooster === true ||\n dose.is_booster === true ||\n (typeof dose.dose === \"string\" && dose.dose.toUpperCase().startsWith(\"B\")),\n alias: dose.alias || dose.booster_alias || \"\",\n eligibleFrom:\n dose.eligible_from !== undefined ? `${dose.eligible_from} days` : \"\",\n eligibleTo:\n dose.eligible_to !== undefined ? `${dose.eligible_to} days` : \"\",\n interval: dose.min_gap || 0,\n }));\n\n const regions = safeParseJson(vaccine.location, [])\n .filter((location) => location && typeof location === \"object\")\n .map((location, index) => ({\n id: toStableId(\"region\", vaccine.id, index),\n locationId: location.locationId,\n locationIdArr: location.locationIdArr,\n locationList: location.locationList,\n fullPath: location.locationList?.replaceAll(\" => \", \" → \"),\n }));\n\n const dependencies = safeParseJson(vaccine.validations, []).map(\n (dependency, index) => ({\n id: toStableId(\"dep\", vaccine.id, index),\n vaccine: dependency.vaccine || \"\",\n requirement: dependency.requirement || \"Should be given\",\n minGap: Number.parseInt(dependency.minGap, 10) || 0,\n maxGap: Number.parseInt(dependency.maxGap, 10) || 0,\n message: dependency.message || \"\",\n }),\n );\n\n const parsedFilters = safeParseJson(vaccine.filters, []);\n const filters = Array.isArray(parsedFilters)\n ? parsedFilters\n : parsedFilters?.codes || [];\n\n return {\n ...vaccine,\n name: vaccine.vaccine_name || vaccine.name || \"N.A.\",\n category:\n vaccine.target_prevention || vaccine.disease || vaccine.category || \"N.A.\",\n doses: vaccine.no_of_doses || 0,\n doseType:\n vaccine.dose_type && vaccine.dose_type !== \"NA\"\n ? vaccine.dose_type\n : \"FIXED\",\n doseDetails,\n eligibility: calculateOverallEligibility(\n doseDetails,\n vaccine.dose_type,\n vaccine.no_of_doses || 0,\n ),\n isActive: vaccine.is_active !== undefined ? vaccine.is_active : true,\n regions,\n dependencies,\n filters,\n baseDateCode: vaccine.base_date_code,\n recipientType: vaccine.recipient_type || \"\",\n };\n};\n\nexport const getVaccines = () => {\n return execute({\n code: \"FETCH_IMMUNISATION_MASTER\",\n parameters: {},\n });\n};\n\nexport const getBaseDates = () => {\n return execute({\n code: \"FETCH_IMMUNISATION_BASE_DATE\",\n parameters: {},\n });\n};\n\nexport const getRecipients = () => {\n return execute({\n code: \"FETCH_IMMUNISATION_RECEPIENT_MASTER\",\n parameters: {},\n });\n};\n\nexport const getImmunizationReferenceData = () => {\n return executeAll([\n {\n code: \"FETCH_IMMUNISATION_BASE_DATE\",\n parameters: {},\n sequence: 1,\n },\n {\n code: \"GET_ALL_IMMUNISATION_FILTERS\",\n parameters: {},\n sequence: 2,\n },\n {\n code: \"FETCH_IMMUNISATION_MASTER\",\n parameters: {},\n sequence: 3,\n },\n {\n code: \"FETCH_IMMUNISATION_RECEPIENT_MASTER\",\n parameters: {},\n sequence: 4,\n },\n ]);\n};\n\nexport const addImmunization = (data) => {\n return execute({\n code: \"INSERT_IMMUNIZATION_MASTER\",\n parameters: data,\n });\n};\n\nexport const updateImmunization = (data) => {\n return execute({\n code: \"UPDATE_IMMUNIZATION_DOSE\",\n ...data,\n });\n};\n\nexport const checkImmunizationConfigurationInitiation = (data) => {\n return execute({\n code: \"CHECK_IMMUNIZATION_CONFIGURATION_INITIATION\",\n ...data,\n });\n};\n\nexport const updateVaccineStatus = (data) => {\n return execute({\n code: \"UPDATE_IMMUNIZATION_STATUS\",\n ...data,\n });\n};\n\nexport const updateVaccineStatusFromArray = (data) => {\n return execute({\n code: \"UPDATE_IMMUNIZATION_STATUS_FOR_ARRAY\",\n ...data,\n });\n};\n\nexport const updateImmunizationConfigurationInitiation = (data) => {\n return execute({\n code: \"UPDATE_IMMUNIZATION_CONFIGURATION_INITIATION\",\n ...data,\n });\n};\n\nexport const saveBaseDate = (data) => {\n return execute({\n code: \"SAVE_IMMUNISATION_BASE_DATE\",\n parameters: data,\n });\n};\n\nexport const saveRecipient = (data) => {\n return execute({\n code: \"SAVE_IMMUNISATION_RECEPIENT_MASTER\",\n parameters: data,\n });\n};\n\nexport const updateRecipient = (data) => {\n return execute({\n code: \"UPDATE_IMMUNISATION_RECEPIENT_MASTER\",\n parameters: data,\n });\n};\n\nexport const updateBaseDate = (data) => {\n return execute({\n code: \"UPDATE_IMMUNISATION_BASE_DATE\",\n parameters: data,\n });\n};\n\nexport const getAllTablesAndColumns = () => {\n return execute({\n code: \"retrieve_all_tables_and_columns\",\n parameters: {},\n });\n};\n\nexport const getFilters = () => {\n return execute({\n code: \"GET_ALL_IMMUNISATION_FILTERS\",\n parameters: {},\n });\n};\n\nexport const addFilter = (data) => {\n return execute({\n code: \"ADD_IMMUNISATION_FILTER\",\n parameters: data,\n });\n};\n\nexport const updateFilter = (data) => {\n return execute({\n code: \"UPDATE_IMMUNISATION_FILTER\",\n parameters: data,\n });\n};\n\nexport const getImmunisationV2List = (data) => {\n return api.post(\"/medplatform/v2/immunisation/list\", data);\n};\n\nexport const revalidateImmunisationV2List = (data) => {\n return api.post(\"/medplatform/v2/immunisation/revalidate\", data);\n};\n","import { useMemo, useState } from \"react\";\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n Box,\n Typography,\n TextField,\n InputAdornment,\n IconButton,\n Autocomplete,\n} from \"@mui/material\";\nimport { useSelector } from \"react-redux\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n faTimes,\n faSyringe,\n faTag,\n faShieldVirus,\n faUser,\n faCalendarDay,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport {\n addImmunization,\n updateVaccineStatus,\n} from \"../service\";\nimport PropTypes from \"prop-types\";\nimport \"../styles/AddCustomVaccineModal.scss\";\n\nconst AddCustomVaccineModal = ({ open, onClose, onAdd, isFromSummary }) => {\n const [vaccineName, setVaccineName] = useState(\"\");\n const [disease, setDisease] = useState(\"\");\n const [recipientType, setRecipientType] = useState(\"\");\n const [baseDateCode, setBaseDateCode] = useState(null);\n const [touched, setTouched] = useState({\n vaccineName: false,\n disease: false,\n recipientType: false,\n baseDate: false,\n });\n\n const { vaccines = [], recipientMaster = [], baseDateMaster = [] } = useSelector(\n (state) => state.immunization,\n );\n\n const selectedRecipient = useMemo(\n () =>\n recipientMaster.find((recipient) => recipient.code === recipientType) ||\n null,\n [recipientMaster, recipientType],\n );\n\n const allowedBaseDateCodes = useMemo(() => {\n const config = selectedRecipient?.config;\n if (!config) return [];\n if (typeof config === \"object\") {\n return config.allowedBaseDates || [];\n }\n try {\n return JSON.parse(config).allowedBaseDates || [];\n } catch {\n return [];\n }\n }, [selectedRecipient]);\n\n const availableBaseDateOptions = useMemo(() => {\n const activeBaseDates = baseDateMaster.filter((baseDate) => baseDate.is_active);\n if (!recipientType) return [];\n\n const allowedCodeSet = new Set(\n allowedBaseDateCodes\n .map((code) => String(code || \"\").trim().toLowerCase())\n .filter(Boolean),\n );\n\n return activeBaseDates.filter((baseDate) =>\n allowedCodeSet.has(String(baseDate.code || \"\").trim().toLowerCase()),\n );\n }, [allowedBaseDateCodes, baseDateMaster, recipientType]);\n\n const selectedBaseDate = useMemo(() => {\n if (baseDateCode === undefined || baseDateCode === null) return null;\n const normalizedCode = String(baseDateCode).trim().toLowerCase();\n return (\n availableBaseDateOptions.find(\n (baseDate) =>\n String(baseDate.code || \"\").trim().toLowerCase() === normalizedCode,\n ) || null\n );\n }, [availableBaseDateOptions, baseDateCode]);\n\n const isFormValid =\n vaccineName.trim() !== \"\" &&\n disease.trim() !== \"\" &&\n !!recipientType &&\n !!baseDateCode;\n\n const handleAdd = async () => {\n if (isFormValid) {\n const derivedCode = vaccineName.trim().toUpperCase().replace(/\\s+/g, \"\");\n const isDuplicate = vaccines.some(\n (v) =>\n String(v?.vaccine_code || v?.name || v?.vaccine_name || \"\")\n .toUpperCase()\n .replace(/\\s+/g, \"\") === derivedCode,\n );\n\n if (isDuplicate) {\n showToast({\n message: `Vaccine with name \"${vaccineName}\" already exists.`,\n type: \"error\",\n });\n setTouched((p) => ({ ...p, vaccineName: true }));\n return;\n }\n\n try {\n const payload = {\n vaccine_name: vaccineName,\n target_prevention: disease,\n baseDateCode,\n recipientType,\n };\n\n const response = await addImmunization(payload);\n\n if (response.data) {\n const resultObject = response.data?.result?.[0] || response.data;\n const vaccineId =\n resultObject?.id || response.data?.id || response.data?.sequence;\n\n if (isFromSummary) {\n try {\n await updateVaccineStatus({\n parameters: {\n vaccineId: vaccineId,\n status: true,\n },\n });\n } catch (err) {\n console.error(\"Failed to activate new vaccine:\", err);\n }\n }\n\n showToast({\n message: \"Vaccine added successfully!\",\n type: \"success\",\n });\n\n onAdd({\n ...payload,\n isActive: !!isFromSummary,\n ...(resultObject && typeof resultObject === \"object\"\n ? resultObject\n : {}),\n id: vaccineId || undefined,\n });\n\n handleReset();\n onClose();\n }\n } catch (error) {\n console.error(\"Error adding immunization:\", error);\n showToast({ message: \"Failed to add vaccine\", type: \"error\" });\n }\n } else {\n setTouched({\n vaccineName: true,\n disease: true,\n recipientType: true,\n baseDate: true,\n });\n }\n };\n\n const handleReset = () => {\n setVaccineName(\"\");\n setDisease(\"\");\n setRecipientType(\"\");\n setBaseDateCode(null);\n setTouched({\n vaccineName: false,\n disease: false,\n recipientType: false,\n baseDate: false,\n });\n };\n\n const handleCloseModal = () => {\n handleReset();\n onClose();\n };\n\n return (\n <Dialog\n open={open}\n onClose={handleCloseModal}\n maxWidth=\"xs\"\n fullWidth\n className=\"add-custom-vaccine-dialog\"\n PaperProps={{\n sx: { borderRadius: \"18px\", padding: \"2px\" },\n }}\n >\n <DialogTitle className=\"dialog-header\">\n <Box className=\"header-content\">\n <Box className=\"icon-box\">\n <FontAwesomeIcon icon={faSyringe} />\n </Box>\n <Box className=\"text-wrap\">\n <Typography className=\"title\">Add Custom Vaccine</Typography>\n <Typography className=\"subtitle\">\n Define a new immunization protocol\n </Typography>\n </Box>\n </Box>\n <IconButton\n aria-label=\"close\"\n onClick={handleCloseModal}\n className=\"close-button\"\n size=\"small\"\n >\n <FontAwesomeIcon icon={faTimes} />\n </IconButton>\n </DialogTitle>\n\n <DialogContent className=\"dialog-content\">\n <Box className=\"input-group\">\n <Typography className=\"input-label\">Vaccine Name</Typography>\n <TextField\n fullWidth\n placeholder=\"e.g. Varicella\"\n value={vaccineName}\n onChange={(e) => setVaccineName(e.target.value)}\n onBlur={() => setTouched((p) => ({ ...p, vaccineName: true }))}\n error={touched.vaccineName && !vaccineName.trim()}\n helperText={\n touched.vaccineName && !vaccineName.trim()\n ? \"Vaccine name is required\"\n : \"\"\n }\n className=\"custom-textfield\"\n slotProps={{\n input: {\n startAdornment: (\n <InputAdornment position=\"start\">\n <FontAwesomeIcon icon={faTag} className=\"input-icon\" />\n </InputAdornment>\n ),\n },\n }}\n />\n </Box>\n\n <Box className=\"input-group\">\n <Typography className=\"input-label\">\n Target Disease/Prevention\n </Typography>\n <TextField\n fullWidth\n placeholder=\"e.g. Chickenpox\"\n value={disease}\n onChange={(e) => setDisease(e.target.value)}\n onBlur={() => setTouched((p) => ({ ...p, disease: true }))}\n error={touched.disease && !disease.trim()}\n helperText={\n touched.disease && !disease.trim()\n ? \"Target disease is required\"\n : \"\"\n }\n className=\"custom-textfield\"\n slotProps={{\n input: {\n startAdornment: (\n <InputAdornment position=\"start\">\n <FontAwesomeIcon\n icon={faShieldVirus}\n className=\"input-icon\"\n />\n </InputAdornment>\n ),\n },\n }}\n />\n </Box>\n\n <Box className=\"input-group\">\n <Typography className=\"input-label\">Recipient Type</Typography>\n <Autocomplete\n options={recipientMaster}\n getOptionLabel={(option) => option?.name || \"\"}\n isOptionEqualToValue={(option, value) => option.code === value.code}\n value={selectedRecipient}\n onChange={(_, newValue) => {\n setRecipientType(newValue?.code || \"\");\n setBaseDateCode(null);\n }}\n onBlur={() =>\n setTouched((p) => ({ ...p, recipientType: true }))\n }\n renderInput={(params) => (\n <TextField\n {...params}\n fullWidth\n placeholder=\"Select Recipient Type\"\n error={touched.recipientType && !recipientType}\n helperText={\n touched.recipientType && !recipientType\n ? \"Recipient type is required\"\n : \"\"\n }\n className=\"custom-textfield\"\n InputProps={{\n ...params.InputProps,\n startAdornment: (\n <>\n <InputAdornment position=\"start\">\n <FontAwesomeIcon\n icon={faUser}\n className=\"input-icon\"\n />\n </InputAdornment>\n {params.InputProps.startAdornment}\n </>\n ),\n }}\n />\n )}\n />\n </Box>\n\n <Box className=\"input-group\">\n <Typography className=\"input-label\">Base Date</Typography>\n <Autocomplete\n options={availableBaseDateOptions}\n disabled={!recipientType}\n getOptionLabel={(option) =>\n option?.name ||\n option?.label ||\n option?.base_name ||\n option?.code ||\n option?.id ||\n \"\"\n }\n isOptionEqualToValue={(option, value) =>\n String(option?.code || \"\").trim().toLowerCase() ===\n String(value?.code || \"\").trim().toLowerCase()\n }\n value={selectedBaseDate}\n onChange={(_, newValue) => setBaseDateCode(newValue?.code ?? null)}\n onBlur={() => setTouched((p) => ({ ...p, baseDate: true }))}\n renderInput={(params) => (\n <TextField\n {...params}\n fullWidth\n placeholder={\n recipientType ? \"Select Base Date\" : \"Select Recipient Type First\"\n }\n error={touched.baseDate && !baseDateCode}\n helperText={\n touched.baseDate && !baseDateCode\n ? recipientType\n ? \"Base date is required\"\n : \"Select recipient type first\"\n : \"\"\n }\n className=\"custom-textfield\"\n InputProps={{\n ...params.InputProps,\n startAdornment: (\n <>\n <InputAdornment position=\"start\">\n <FontAwesomeIcon\n icon={faCalendarDay}\n className=\"input-icon\"\n />\n </InputAdornment>\n {params.InputProps.startAdornment}\n </>\n ),\n }}\n />\n )}\n />\n </Box>\n </DialogContent>\n\n <DialogActions className=\"dialog-actions\">\n <Button\n onClick={handleAdd}\n className=\"add-btn\"\n fullWidth\n disabled={!isFormValid}\n >\n {isFromSummary ? \"Add to List\" : \"Add to Schedule\"}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nAddCustomVaccineModal.propTypes = {\n open: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n onAdd: PropTypes.func.isRequired,\n isFromSummary: PropTypes.bool,\n};\n\nexport default AddCustomVaccineModal;\n","import PropTypes from \"prop-types\";\nimport { useSelector } from \"react-redux\";\nimport { getUseSkeleton } from \"@/store/reducers/SkeletonReducer\";\nimport { Box } from \"@mui/material\";\n\nexport const VaccineGridSkeleton = ({ children, isLoading }) => {\n const useSkeleton = useSelector(getUseSkeleton);\n\n if (!useSkeleton || !isLoading) {\n return children;\n }\n\n return (\n <Box\n sx={{\n display: \"grid\",\n gridTemplateColumns: \"repeat(6, 1fr)\",\n gap: 1,\n width: \"100%\",\n }}\n >\n {[...Array(12)].map((_, index) => (\n <Box\n key={index}\n sx={{\n height: \"100px\",\n backgroundColor: \"#f5f5f5\",\n borderRadius: \"16px\",\n border: \"1.5px solid #eaeaea\",\n animation: \"pulse 1.5s infinite ease-in-out\",\n \"@keyframes pulse\": {\n \"0%\": { opacity: 1 },\n \"50%\": { opacity: 0.5 },\n \"100%\": { opacity: 1 },\n },\n }}\n />\n ))}\n </Box>\n );\n};\n\nVaccineGridSkeleton.propTypes = {\n children: PropTypes.node,\n isLoading: PropTypes.bool,\n};\n\nexport default VaccineGridSkeleton;\n","import { useState, useEffect } from \"react\";\nimport {\n Box,\n Typography,\n TextField,\n InputAdornment,\n Button,\n} from \"@mui/material\";\nimport Grid from \"@mui/material/Grid2\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n faSearch,\n faListCheck,\n faArrowRight,\n faCheckDouble,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport VaccineCard from \"./components/VaccineCard\";\nimport AddCustomVaccineModal from \"./components/AddCustomVaccineModal\";\nimport VaccineGridSkeleton from \"./Skeletons/VaccineGridSkeleton\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport {\n toggleVaccine,\n addCustomVaccine,\n setCurrentView,\n activateSelectedVaccines,\n setSelectedVaccineIds,\n setVaccines,\n setImmunizationConfigLoaded,\n} from \"@/store/reducers/immunizationSlice\";\nimport {\n updateImmunizationConfigurationInitiation,\n updateVaccineStatusFromArray,\n getVaccines,\n mapImmunizationVaccineConfig,\n} from \"./service\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport \"./styles/ImmunizationScheduleConfiguration.scss\";\n\nconst ImmunizationScheduleConfiguration = () => {\n const dispatch = useDispatch();\n const { vaccines, selectedVaccineIds, isConfigLoaded } = useSelector(\n (state) => state.immunization,\n );\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [isFetchingVaccines, setIsFetchingVaccines] = useState(false);\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n useEffect(() => {\n if (!vaccines || vaccines.length === 0) {\n const fetchVaccines = async () => {\n try {\n setIsFetchingVaccines(true);\n const vaccinesResponse = await getVaccines();\n if (vaccinesResponse?.data?.result) {\n const mappedVaccines = vaccinesResponse.data.result.map(\n mapImmunizationVaccineConfig,\n );\n dispatch(setVaccines(mappedVaccines));\n }\n } catch (vaccineErr) {\n console.warn(\"Could not fetch vaccines master:\", vaccineErr);\n } finally {\n setIsFetchingVaccines(false);\n }\n };\n fetchVaccines();\n }\n }, [dispatch, vaccines]);\n\n const isLoading =\n (!isConfigLoaded || isFetchingVaccines || isSubmitting) &&\n (!vaccines || vaccines.length === 0);\n\n const handleToggleVaccine = (id) => {\n dispatch(toggleVaccine(id));\n };\n\n const handleAddCustomVaccine = (data) => {\n dispatch(addCustomVaccine(data));\n };\n\n const handleToggleAll = () => {\n const allVisibleIds = filteredVaccines\n .filter((v) => v && v.id)\n .map((v) => v.id);\n const areAllVisibleSelected =\n allVisibleIds.length > 0 &&\n allVisibleIds.every((id) => (selectedVaccineIds || []).includes(id));\n\n if (areAllVisibleSelected) {\n const newSelectedIds = (selectedVaccineIds || []).filter(\n (id) => !allVisibleIds.includes(id),\n );\n dispatch(setSelectedVaccineIds(newSelectedIds));\n } else {\n const newSelectedIds = [\n ...new Set([...(selectedVaccineIds || []), ...allVisibleIds]),\n ];\n dispatch(setSelectedVaccineIds(newSelectedIds));\n }\n };\n\n const handleSelectVaccines = async () => {\n try {\n setIsSubmitting(true);\n await updateImmunizationConfigurationInitiation();\n } catch (error) {\n showToast({\n message: error?.message || \"Failed to update vaccine initiation state\",\n type: \"error\",\n });\n return;\n }\n\n const activateIds = [];\n const deactivateIds = [];\n\n vaccines?.forEach((v) => {\n if (!v) return;\n\n const isNowSelected = selectedVaccineIds.includes(v.id);\n const wasActive = !!v.isActive;\n\n if (isNowSelected !== wasActive) {\n if (isNowSelected) activateIds.push(v.id);\n else deactivateIds.push(v.id);\n }\n });\n\n try {\n if (activateIds.length) {\n await updateVaccineStatusFromArray({\n parameters: {\n vaccineIds: activateIds.join(\",\"),\n status: true,\n },\n });\n }\n\n if (deactivateIds.length) {\n await updateVaccineStatusFromArray({\n parameters: {\n vaccineIds: deactivateIds.join(\",\"),\n status: false,\n },\n });\n }\n\n dispatch(activateSelectedVaccines());\n dispatch(setImmunizationConfigLoaded(false));\n\n dispatch(setCurrentView(\"summary\"));\n } catch (error) {\n showToast({\n message: error?.message || \"Failed to update vaccine status\",\n type: \"error\",\n });\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const allVaccines = vaccines || [];\n const activeSelectedIds = selectedVaccineIds || [];\n\n const filteredVaccines = allVaccines.filter(\n (v) => v && (v.name || \"\").toLowerCase().includes(searchTerm.toLowerCase()),\n );\n\n const allVisibleIds = filteredVaccines\n .filter((v) => v && v.id)\n .map((v) => v.id);\n const areAllVisibleSelected =\n allVisibleIds.length > 0 &&\n allVisibleIds.every((id) => activeSelectedIds.includes(id));\n return (\n <Box className=\"immunization-schedule-config\">\n <Box className=\"content-wrapper\">\n <Box sx={{ mb: 1 }}>\n {/* <Button\n startIcon={\n <FontAwesomeIcon\n icon={faArrowRight}\n style={{ transform: \"rotate(180deg)\" }}\n />\n }\n onClick={() => dispatch(setCurrentView(\"landing\"))}\n sx={{ color: \"#717171\", fontWeight: 600, fontSize: \"12px\" }}\n >\n Back\n </Button> */}\n </Box>\n <Typography\n variant=\"h5\"\n align=\"center\"\n sx={{ fontWeight: 800, mb: 1, color: \"#1a1a1a\", fontSize: \"28px\" }}\n >\n Set Up Your Immunization Schedule\n </Typography>\n <Typography\n variant=\"body1\"\n align=\"center\"\n sx={{ color: \"#717171\", mb: 4, fontWeight: 500, display: \"block\", fontSize: \"16px\" }}\n >\n Select one of the options below to start setting up your immunization\n schedule.\n </Typography>\n\n <Box className=\"main-config-card\">\n <Box className=\"section-header\">\n <Box className=\"title-group\">\n <Box className=\"icon-box\">\n <FontAwesomeIcon icon={faListCheck} />\n </Box>\n <Box className=\"text-wrap\">\n <Typography className=\"title\">Select Vaccines</Typography>\n <Typography className=\"subtitle\">\n Start by selecting vaccines from the list. You can set up the\n schedule step by step.\n </Typography>\n </Box>\n </Box>\n\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 2 }}>\n <Button\n variant=\"outlined\"\n onClick={handleToggleAll}\n disabled={filteredVaccines.length === 0}\n startIcon={<FontAwesomeIcon icon={faCheckDouble} />}\n sx={{\n color: \"#4c5e70\",\n borderColor: \"#4c5e70\",\n fontWeight: 800,\n fontSize: \"14px\",\n padding: \"6px 20px\",\n height: \"40px\",\n borderRadius: \"12px\",\n textTransform: \"none\",\n whiteSpace: \"nowrap\",\n flexShrink: 0,\n \"&:hover\": {\n backgroundColor: \"rgba(17, 182, 102, 0.08)\",\n borderColor: \"#4c5e70\",\n },\n }}\n >\n {areAllVisibleSelected ? \"Unselect All\" : \"Add All\"}\n </Button>\n <Box className=\"search-box\">\n <TextField\n fullWidth\n placeholder=\"Search Vaccines...\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <FontAwesomeIcon\n icon={faSearch}\n className=\"search-icon\"\n />\n </InputAdornment>\n ),\n }}\n />\n </Box>\n </Box>\n </Box>\n\n <VaccineGridSkeleton isLoading={isLoading}>\n <Grid container spacing={1} className=\"vaccine-grid\">\n {filteredVaccines.map((vaccine) => (\n <Grid key={vaccine?.id}>\n <VaccineCard\n vaccine={vaccine}\n selected={activeSelectedIds.includes(vaccine?.id)}\n onClick={() => handleToggleVaccine(vaccine?.id)}\n />\n </Grid>\n ))}\n <Grid>\n <VaccineCard\n isCustom={true}\n onClick={() => setIsModalOpen(true)}\n />\n </Grid>\n </Grid>\n </VaccineGridSkeleton>\n\n <Box className=\"selection-info\">\n <Typography className=\"selected-count\">\n <span>{selectedVaccineIds.length}</span> vaccines selected\n </Typography>\n <Button\n className=\"select-btn\"\n disabled={selectedVaccineIds.length === 0 || isLoading || isSubmitting}\n endIcon={<FontAwesomeIcon icon={faArrowRight} />}\n onClick={handleSelectVaccines}\n >\n SELECT VACCINES\n </Button>\n </Box>\n </Box>\n </Box>\n\n <AddCustomVaccineModal\n open={isModalOpen}\n onClose={() => setIsModalOpen(false)}\n onAdd={handleAddCustomVaccine}\n />\n </Box>\n );\n};\n\nexport default ImmunizationScheduleConfiguration;\n","import { useState, useEffect, useMemo } from \"react\";\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n Box,\n Typography,\n IconButton,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n Paper,\n TextField,\n CircularProgress,\n Chip,\n Autocomplete,\n} from \"@mui/material\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n faTimes,\n faCalendarDay,\n faPlus,\n faArrowLeft,\n faDatabase,\n faColumns,\n faCode,\n faTag,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport PropTypes from \"prop-types\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport {\n setDbTablesMaster,\n upsertBaseDateMasterItem,\n updateBaseDateMasterStatus,\n} from \"@/store/reducers/immunizationSlice\";\nimport CustomSwitch from \"@/views/custom-components/CustomSwitch\";\nimport {\n saveBaseDate,\n getAllTablesAndColumns,\n updateBaseDate,\n} from \"../service\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport \"../styles/AddCustomVaccineModal.scss\";\n\nconst DATE_COLUMN_TYPE_KEYWORDS = [\"date\", \"timestamp\", \"datetime\"];\nconst modalHeaderCellSx = {\n fontWeight: 700,\n color: \"#717171\",\n fontSize: \"11px\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.5px\",\n backgroundColor: \"#f9fafb\",\n borderBottom: \"1.5px solid #f0f0f0\",\n py: 1.5,\n};\n\nconst modalFieldSx = {\n \"& .MuiOutlinedInput-root\": {\n borderRadius: \"9px\",\n backgroundColor: \"#f8fafc\",\n fontSize: \"13px\",\n \"& fieldset\": { borderColor: \"#e2e8f0\", borderWidth: \"1.5px\" },\n \"&:hover fieldset\": { borderColor: \"#cbd5e1\" },\n \"&.Mui-focused fieldset\": { borderColor: \"#4c5e70\" },\n \"&.Mui-disabled fieldset\": { borderColor: \"#e2e8f0\" },\n \"&.Mui-disabled\": {\n backgroundColor: \"#f1f5f9\",\n \"& .MuiOutlinedInput-input\": {\n WebkitTextFillColor: \"#475569\",\n },\n },\n },\n \"& .MuiInputLabel-root\": {\n fontSize: \"13px\",\n \"&.Mui-focused\": { color: \"#4c5e70\" },\n },\n};\n\nconst parseColumnInfo = (columnInfo) => {\n if (!columnInfo) return {};\n if (typeof columnInfo === \"object\") return columnInfo;\n try {\n return JSON.parse(columnInfo);\n } catch {\n return {};\n }\n};\n\nconst isDateTypeColumn = (dataType) => {\n const normalisedType = String(dataType || \"\").toLowerCase();\n return DATE_COLUMN_TYPE_KEYWORDS.some((keyword) =>\n normalisedType.includes(keyword),\n );\n};\n\nconst ConfigureBaseDateModal = ({\n open,\n onClose,\n startInAddMode = false,\n onSaved,\n}) => {\n const dispatch = useDispatch();\n const { baseDateMaster, vaccines, scheduledVaccines, dbTablesMaster } =\n useSelector((state) => state.immunization);\n\n const [isAdding, setIsAdding] = useState(false);\n const [loading, setLoading] = useState(false);\n const [saving, setSaving] = useState(false);\n\n const [usageWarning, setUsageWarning] = useState({\n open: false,\n bdName: \"\",\n usedIn: [],\n });\n\n const [newName, setNewName] = useState(\"\");\n const [newCode, setNewCode] = useState(\"\");\n const [selectedTable, setSelectedTable] = useState(\"\");\n const [selectedColumn, setSelectedColumn] = useState(\"\");\n\n useEffect(() => {\n if (open) {\n setIsAdding(!!startInAddMode);\n resetForm();\n fetchTables();\n }\n }, [open, startInAddMode]);\n\n const fetchTables = async () => {\n if (dbTablesMaster?.length > 0) return;\n try {\n setLoading(true);\n const res = await getAllTablesAndColumns();\n if (res?.data?.result) {\n dispatch(setDbTablesMaster(res.data.result));\n }\n } catch (e) {\n console.error(\"Failed to fetch tables\", e);\n } finally {\n setLoading(false);\n }\n };\n\n const resetForm = () => {\n setNewName(\"\");\n setNewCode(\"\");\n setSelectedTable(\"\");\n setSelectedColumn(\"\");\n };\n\n const availableColumns = useMemo(() => {\n if (!selectedTable) return [];\n const tableObj = dbTablesMaster.find((t) => t.tableName === selectedTable);\n const columnInfo = parseColumnInfo(tableObj?.columnInfo);\n\n return Object.entries(columnInfo)\n .filter(([, dataType]) => isDateTypeColumn(dataType))\n .map(([columnName]) => columnName)\n .sort((left, right) => left.localeCompare(right));\n }, [selectedTable, dbTablesMaster]);\n\n const availableTables = useMemo(() => {\n return [...(dbTablesMaster || [])].sort((left, right) =>\n left.tableName.localeCompare(right.tableName),\n );\n }, [dbTablesMaster]);\n\n const existingCodes = useMemo(\n () => baseDateMaster?.map((bd) => bd.code?.toLowerCase()) || [],\n [baseDateMaster],\n );\n\n const isCodeDuplicate =\n !!newCode && existingCodes.includes(newCode.trim().toLowerCase());\n\n const canSave =\n newName.trim() &&\n newCode.trim() &&\n !isCodeDuplicate &&\n selectedTable &&\n selectedColumn &&\n !saving;\n\n const handleSave = async () => {\n try {\n setSaving(true);\n const payload = {\n name: newName.trim(),\n code: newCode.trim(),\n rel_table: selectedTable,\n rel_column: selectedColumn,\n is_active: true,\n };\n\n const res = await saveBaseDate(payload);\n\n if (res?.data?.success !== false) {\n showToast({ message: \"Base Date added successfully\", type: \"success\" });\n const createdBaseDate = res?.data?.result?.[0] || {\n name: payload.name,\n code: payload.code,\n rel_table: payload.rel_table,\n rel_column: payload.rel_column,\n is_active: payload.is_active,\n };\n dispatch(upsertBaseDateMasterItem(createdBaseDate));\n onSaved?.(createdBaseDate);\n resetForm();\n if (startInAddMode) {\n onClose();\n } else {\n setIsAdding(false);\n }\n } else {\n throw new Error(\"Failed to save base date\");\n }\n } catch (e) {\n console.error(e);\n showToast({\n message: e?.message || \"Error saving base date\",\n type: \"error\",\n });\n } finally {\n setSaving(false);\n }\n };\n\n const handleStatusChange = async (bd, newStatus) => {\n if (!newStatus) {\n const usingVaccines = vaccines\n ?.filter((v) => {\n const scheduled = scheduledVaccines?.find((sv) => sv.id === v.id);\n const effectiveBaseDateCode = String(\n scheduled?.baseDateCode ??\n v.baseDateCode ??\n v.base_date_code ??\n \"\",\n );\n const bdCode = String(bd.code || \"\");\n return effectiveBaseDateCode === bdCode && bdCode !== \"\";\n })\n .map((v) => v.vaccine_name || v.name);\n\n if (usingVaccines?.length > 0) {\n setUsageWarning({\n open: true,\n bdName: bd.name,\n usedIn: usingVaccines,\n });\n return;\n }\n }\n\n try {\n const payload = {\n code: bd.code,\n is_active: newStatus,\n };\n\n const res = await updateBaseDate(payload);\n\n if (res?.data?.success !== false) {\n showToast({\n message: `Base Date ${newStatus ? \"activated\" : \"deactivated\"} successfully`,\n type: \"success\",\n });\n dispatch(\n updateBaseDateMasterStatus({\n code: bd.code,\n is_active: newStatus,\n }),\n );\n } else {\n throw new Error(\"Failed to update base date status\");\n }\n } catch (e) {\n console.error(e);\n showToast({\n message: e?.message || \"Error updating base date status\",\n type: \"error\",\n });\n }\n };\n\n return (\n <Dialog\n open={open}\n onClose={onClose}\n maxWidth=\"md\"\n fullWidth\n className=\"add-custom-vaccine-dialog\"\n PaperProps={{\n sx: {\n borderRadius: \"18px\",\n padding: \"2px\",\n height: \"530px\",\n maxHeight: \"90vh\",\n },\n }}\n >\n <DialogTitle className=\"dialog-header\" sx={{ pb: 1.5 }}>\n <Box className=\"header-content\">\n <Box className=\"icon-box\">\n <FontAwesomeIcon icon={faCalendarDay} />\n </Box>\n <Box className=\"text-wrap\">\n <Typography className=\"title\">\n {isAdding ? \"Add New Base Date\" : \"Configure Base Date\"}\n </Typography>\n {!isAdding && (\n <Typography className=\"subtitle\">\n {baseDateMaster?.length || 0} base date\n {baseDateMaster?.length !== 1 ? \"s\" : \"\"} configured\n </Typography>\n )}\n </Box>\n </Box>\n <IconButton\n aria-label=\"close\"\n onClick={onClose}\n className=\"close-button\"\n size=\"small\"\n >\n <FontAwesomeIcon icon={faTimes} />\n </IconButton>\n </DialogTitle>\n <DialogContent\n className=\"dialog-content\"\n sx={{ pt: 1, overflowY: \"auto\" }}\n >\n {loading ? (\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n height: 220,\n }}\n >\n <CircularProgress size={28} sx={{ color: \"#394d61\" }} />\n </Box>\n ) : isAdding ? (\n <Box\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 2,\n p: 2,\n border: \"1.5px solid #e8edf2\",\n borderRadius: \"14px\",\n backgroundColor: \"#f8fafc\",\n }}\n >\n <Box className=\"input-group\">\n <Typography className=\"input-label\" sx={{ mb: 0.8 }}>\n <FontAwesomeIcon\n icon={faTag}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Base Date Name\n </Typography>\n <TextField\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={newName}\n onChange={(e) => setNewName(e.target.value)}\n placeholder=\"e.g., Member's Birth Date\"\n sx={modalFieldSx}\n />\n </Box>\n\n <Box className=\"input-group\">\n <Typography className=\"input-label\" sx={{ mb: 0.8 }}>\n <FontAwesomeIcon\n icon={faCode}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Base Date Code\n {isCodeDuplicate && (\n <Chip\n label=\"Duplicate\"\n size=\"small\"\n sx={{\n ml: 1,\n height: 18,\n fontSize: \"9px\",\n fontWeight: 700,\n backgroundColor: \"#fee2e2\",\n color: \"#dc2626\",\n }}\n />\n )}\n </Typography>\n <TextField\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={newCode}\n onChange={(e) =>\n setNewCode(e.target.value.toLowerCase().replace(/\\s+/g, \"_\"))\n }\n placeholder=\"e.g., dob\"\n error={isCodeDuplicate}\n helperText={isCodeDuplicate ? \"This code already exists.\" : \"\"}\n sx={modalFieldSx}\n />\n </Box>\n\n <Box sx={{ display: \"flex\", gap: 2 }}>\n <Box className=\"input-group\" sx={{ flex: 1 }}>\n <Typography className=\"input-label\" sx={{ mb: 0.5 }}>\n <FontAwesomeIcon\n icon={faDatabase}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Related Table\n </Typography>\n <Autocomplete\n size=\"small\"\n fullWidth\n options={availableTables}\n value={\n availableTables.find(\n (table) => table.tableName === selectedTable,\n ) || null\n }\n onChange={(_, selectedOption) => {\n const nextTable = selectedOption?.tableName || \"\";\n setSelectedTable(nextTable);\n if (nextTable !== selectedTable) {\n setSelectedColumn(\"\");\n }\n }}\n getOptionLabel={(option) => option?.tableName || \"\"}\n isOptionEqualToValue={(option, value) =>\n option?.tableName === value?.tableName\n }\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"Select Table\"\n placeholder=\"Search related table\"\n sx={modalFieldSx}\n />\n )}\n />\n </Box>\n\n <Box className=\"input-group\" sx={{ flex: 1 }}>\n <Typography className=\"input-label\" sx={{ mb: 0.5 }}>\n <FontAwesomeIcon\n icon={faColumns}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Related Column\n </Typography>\n <Autocomplete\n size=\"small\"\n fullWidth\n options={availableColumns}\n value={selectedColumn || null}\n disabled={!selectedTable}\n onChange={(_, selectedOption) =>\n setSelectedColumn(selectedOption || \"\")\n }\n noOptionsText={\n selectedTable\n ? \"No date-type columns available\"\n : \"Select a table first\"\n }\n renderInput={(params) => (\n <TextField\n {...params}\n label={\n selectedTable ? \"Select Column\" : \"Select a table first\"\n }\n placeholder={\n selectedTable\n ? \"Search date-type column\"\n : \"Select a table first\"\n }\n sx={modalFieldSx}\n />\n )}\n />\n </Box>\n </Box>\n </Box>\n ) : baseDateMaster?.length > 0 ? (\n <TableContainer\n component={Paper}\n elevation={0}\n sx={{\n border: \"1.5px solid #f0f0f0\",\n borderRadius: \"12px\",\n overflow: \"hidden\",\n maxHeight: 360,\n mt: 1,\n }}\n >\n <Table stickyHeader aria-label=\"base dates table\">\n <TableHead>\n <TableRow>\n <TableCell sx={{ ...modalHeaderCellSx, width: 40 }}>#</TableCell>\n <TableCell sx={modalHeaderCellSx}>Name</TableCell>\n <TableCell sx={modalHeaderCellSx}>Code</TableCell>\n <TableCell sx={modalHeaderCellSx}>Related Table</TableCell>\n <TableCell sx={modalHeaderCellSx}>Related Column</TableCell>\n <TableCell sx={modalHeaderCellSx}>Status</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {baseDateMaster.map((bd, index) => (\n <TableRow\n key={bd.id}\n sx={{\n \"&:hover\": { backgroundColor: \"#f9fafb\" },\n \"&:last-child td\": { border: 0 },\n }}\n >\n <TableCell\n sx={{ fontSize: \"13px\", color: \"#94a3b8\", py: 1.5 }}\n >\n {index + 1}\n </TableCell>\n <TableCell\n sx={{\n fontSize: \"13px\",\n fontWeight: 700,\n color: \"#1e293b\",\n py: 1.5,\n }}\n >\n {bd.name}\n </TableCell>\n <TableCell sx={{ py: 1.5 }}>\n <Box\n component=\"code\"\n sx={{\n fontSize: \"11px\",\n fontWeight: 700,\n color: \"#394d61\",\n backgroundColor: \"#e8edf2\",\n px: 1,\n py: 0.3,\n borderRadius: \"5px\",\n }}\n >\n {bd.code}\n </Box>\n </TableCell>\n <TableCell\n sx={{ fontSize: \"13px\", color: \"#64748b\", py: 1.5 }}\n >\n {bd.rel_table}\n </TableCell>\n <TableCell\n sx={{ fontSize: \"13px\", color: \"#64748b\", py: 1.5 }}\n >\n {bd.rel_column}\n </TableCell>\n <TableCell sx={{ py: 1.5 }}>\n <CustomSwitch\n checked={!!bd.is_active}\n onChange={(e) =>\n handleStatusChange(bd, e.target.checked)\n }\n />\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n ) : (\n <Box\n sx={{\n py: 7,\n textAlign: \"center\",\n color: \"#94a3b8\",\n }}\n >\n <FontAwesomeIcon\n icon={faCalendarDay}\n style={{ fontSize: 28, marginBottom: 10, opacity: 0.35 }}\n />\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: 600, color: \"#94a3b8\" }}\n >\n No base dates configured yet.\n </Typography>\n <Typography variant=\"caption\" sx={{ color: \"#b0bec5\" }}>\n Click &ldquo;Add New&rdquo; to create the first one.\n </Typography>\n </Box>\n )}\n </DialogContent>\n <DialogActions className=\"dialog-actions\" sx={{ pt: 0, pb: 3, px: 3 }}>\n {isAdding ? (\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n width: \"100%\",\n gap: 1.5,\n }}\n >\n <Button\n onClick={() => {\n resetForm();\n if (startInAddMode) {\n onClose();\n } else {\n setIsAdding(false);\n }\n }}\n className=\"cancel-btn\"\n startIcon={\n <FontAwesomeIcon icon={faArrowLeft} style={{ fontSize: 11 }} />\n }\n >\n Back\n </Button>\n <Button\n onClick={handleSave}\n className=\"add-btn\"\n disabled={!canSave}\n >\n Save Base Date\n </Button>\n </Box>\n ) : (\n <Button\n onClick={() => setIsAdding(true)}\n className=\"add-btn\"\n sx={{ width: \"100%\" }}\n startIcon={\n <FontAwesomeIcon icon={faPlus} style={{ fontSize: 11 }} />\n }\n >\n Add New Base Date\n </Button>\n )}\n </DialogActions>\n\n <Dialog\n open={usageWarning.open}\n onClose={() => setUsageWarning({ ...usageWarning, open: false })}\n PaperProps={{ sx: { borderRadius: \"14px\", p: 1 } }}\n >\n <DialogTitle\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n pb: 1,\n }}\n >\n <Typography\n variant=\"h6\"\n sx={{ fontWeight: 800, fontSize: \"16px\", color: \"#394d61\" }}\n >\n Base Date in Use\n </Typography>\n <IconButton\n onClick={() => setUsageWarning({ ...usageWarning, open: false })}\n size=\"small\"\n >\n <FontAwesomeIcon icon={faTimes} />\n </IconButton>\n </DialogTitle>\n <DialogContent>\n <Box>\n <Typography variant=\"body2\" sx={{ mb: 2 }}>\n <strong>&quot;{usageWarning.bdName}&quot;</strong> is currently\n being used in the following vaccines:\n </Typography>\n <Box\n sx={{\n maxHeight: \"150px\",\n overflowY: \"auto\",\n bgcolor: \"#f8fafc\",\n p: 1.5,\n borderRadius: \"8px\",\n border: \"1.5px solid #e2e8f0\",\n }}\n >\n {usageWarning.usedIn.map((name, idx) => (\n <Typography\n key={idx}\n variant=\"caption\"\n sx={{ display: \"block\", color: \"#475569\", fontWeight: 600 }}\n >\n • {name}\n </Typography>\n ))}\n </Box>\n <Typography\n variant=\"body2\"\n sx={{ mt: 2, color: \"#ef4444\", fontWeight: 700 }}\n >\n To toggle it off, please ensure it&apos;s not used anywhere.\n </Typography>\n </Box>\n </DialogContent>\n </Dialog>\n </Dialog>\n );\n};\n\nConfigureBaseDateModal.propTypes = {\n open: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n startInAddMode: PropTypes.bool,\n onSaved: PropTypes.func,\n};\n\nexport default ConfigureBaseDateModal;\n","import { useState, useEffect, useMemo } from \"react\";\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n Box,\n Typography,\n IconButton,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n Paper,\n TextField,\n CircularProgress,\n Chip,\n Tooltip,\n} from \"@mui/material\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n faTimes,\n faFilter,\n faPlus,\n faArrowLeft,\n faCode,\n faTag,\n faAlignLeft,\n faDatabase,\n faEdit,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport PropTypes from \"prop-types\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport {\n setFiltersMaster,\n upsertFilterMasterItem,\n updateFilterMasterStatus,\n} from \"@/store/reducers/immunizationSlice\";\nimport CustomSwitch from \"@/views/custom-components/CustomSwitch\";\nimport { getFilters, addFilter, updateFilter } from \"../service\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport \"../styles/AddCustomVaccineModal.scss\";\n\nconst RESOURCE_ID_PLACEHOLDER = \"#resourceId#\";\nconst PLACEHOLDER_PATTERN = /#(\\w+)#/g;\nconst modalHeaderCellSx = {\n fontWeight: 700,\n color: \"#717171\",\n fontSize: \"11px\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.5px\",\n backgroundColor: \"#f9fafb\",\n borderBottom: \"1.5px solid #f0f0f0\",\n py: 1.5,\n};\n\nconst modalFieldSx = {\n \"& .MuiOutlinedInput-root\": {\n borderRadius: \"9px\",\n backgroundColor: \"#f8fafc\",\n fontSize: \"13px\",\n \"& fieldset\": { borderColor: \"#e2e8f0\", borderWidth: \"1.5px\" },\n \"&:hover fieldset\": { borderColor: \"#cbd5e1\" },\n \"&.Mui-focused fieldset\": { borderColor: \"#4c5e70\" },\n \"&.Mui-disabled fieldset\": { borderColor: \"#e2e8f0\" },\n \"&.Mui-disabled\": {\n backgroundColor: \"#f1f5f9\",\n \"& .MuiOutlinedInput-input\": {\n WebkitTextFillColor: \"#475569\",\n },\n },\n },\n \"& .MuiInputLabel-root\": {\n fontSize: \"13px\",\n \"&.Mui-focused\": { color: \"#4c5e70\" },\n },\n};\n\nconst ConfigureFiltersModal = ({ open, onClose }) => {\n const dispatch = useDispatch();\n const {\n filtersMaster: filtersList = [],\n vaccines,\n scheduledVaccines,\n } = useSelector((state) => state.immunization);\n\n const [isAdding, setIsAdding] = useState(false);\n const [editingFilter, setEditingFilter] = useState(null);\n const [loading, setLoading] = useState(false);\n const [saving, setSaving] = useState(false);\n\n const [usageWarning, setUsageWarning] = useState({\n open: false,\n filterName: \"\",\n usedIn: [],\n });\n\n // Form State\n const [newName, setNewName] = useState(\"\");\n const [newCode, setNewCode] = useState(\"\");\n const [newDescription, setNewDescription] = useState(\"\");\n const [newQuery, setNewQuery] = useState(\"\");\n\n useEffect(() => {\n if (open) {\n setIsAdding(false);\n setEditingFilter(null);\n resetForm();\n fetchFilters();\n }\n }, [open]);\n\n const fetchFilters = async (forceRefetch = false) => {\n if (!forceRefetch && filtersList?.length > 0) return;\n try {\n setLoading(true);\n const res = await getFilters();\n if (res?.data?.result) {\n dispatch(setFiltersMaster(res.data.result));\n }\n } catch (e) {\n console.error(\"Failed to fetch filters\", e);\n } finally {\n setLoading(false);\n }\n };\n\n const resetForm = () => {\n setNewName(\"\");\n setNewCode(\"\");\n setNewDescription(\"\");\n setNewQuery(\"\");\n setEditingFilter(null);\n };\n\n const handleEditClick = (filter) => {\n setEditingFilter(filter);\n setNewName(filter.name || \"\");\n setNewCode(filter.code || \"\");\n setNewDescription(filter.description || \"\");\n setNewQuery(filter.query || \"\");\n setIsAdding(true);\n };\n\n const existingCodes = useMemo(\n () => filtersList?.map((f) => f.code?.toLowerCase()) || [],\n [filtersList],\n );\n\n const isCodeDuplicate =\n !editingFilter &&\n !!newCode &&\n existingCodes.includes(newCode.trim().toLowerCase());\n\n const queryPlaceholders = useMemo(() => {\n return Array.from(\n new Set(\n [...newQuery.matchAll(PLACEHOLDER_PATTERN)].map((match) => match[1]),\n ),\n );\n }, [newQuery]);\n\n const hasResourceIdPlaceholder = queryPlaceholders.includes(\"resourceId\");\n const hasUnsupportedPlaceholders = queryPlaceholders.some(\n (placeholder) => placeholder !== \"resourceId\",\n );\n const queryPlaceholderError =\n !newQuery.trim()\n ? \"\"\n : !hasResourceIdPlaceholder\n ? `Query must include ${RESOURCE_ID_PLACEHOLDER}.`\n : hasUnsupportedPlaceholders\n ? `Only ${RESOURCE_ID_PLACEHOLDER} is allowed as a parameter.`\n : \"\";\n\n const canSave =\n newName.trim() &&\n newCode.trim() &&\n newDescription.trim() &&\n newQuery.trim() &&\n !queryPlaceholderError &&\n !isCodeDuplicate &&\n !saving;\n\n const handleSave = async () => {\n try {\n if (queryPlaceholderError) {\n throw new Error(queryPlaceholderError);\n }\n\n setSaving(true);\n const payload = {\n name: newName.trim(),\n code: newCode.trim(),\n description: newDescription.trim(),\n query: newQuery.trim(),\n is_active: editingFilter ? editingFilter.is_active : true, // Preserve status when editing\n };\n\n let res;\n if (editingFilter) {\n res = await updateFilter(payload);\n } else {\n res = await addFilter(payload);\n }\n\n if (res?.data?.success !== false) {\n showToast({\n message: `Filter ${editingFilter ? \"updated\" : \"added\"} successfully`,\n type: \"success\",\n });\n const savedFilter = res?.data?.result?.[0] || {\n ...editingFilter,\n name: payload.name,\n code: payload.code,\n description: payload.description,\n query: payload.query,\n is_active: payload.is_active,\n };\n dispatch(upsertFilterMasterItem(savedFilter));\n resetForm();\n setIsAdding(false);\n } else {\n throw new Error(\"Failed to save filter\");\n }\n } catch (e) {\n console.error(e);\n showToast({\n message: e?.message || \"Error saving filter\",\n type: \"error\",\n });\n } finally {\n setSaving(false);\n }\n };\n\n const handleStatusChange = async (filter, newStatus) => {\n if (!newStatus) {\n const usingVaccines = vaccines\n ?.filter((v) => {\n const scheduled = scheduledVaccines?.find((sv) => sv.id === v.id);\n const currentFilters = scheduled?.filters || v.filters || [];\n return currentFilters.includes(filter.code);\n })\n .map((v) => v.vaccine_name || v.name);\n\n if (usingVaccines?.length > 0) {\n setUsageWarning({\n open: true,\n filterName: filter.name,\n usedIn: usingVaccines,\n });\n return;\n }\n }\n\n try {\n const payload = {\n ...filter, // Send all old info, but toggled\n is_active: newStatus,\n };\n\n const res = await updateFilter(payload);\n\n if (res?.data?.success !== false) {\n showToast({\n message: `Filter ${newStatus ? \"activated\" : \"deactivated\"} successfully`,\n type: \"success\",\n });\n dispatch(\n updateFilterMasterStatus({\n code: filter.code,\n is_active: newStatus,\n }),\n );\n } else {\n throw new Error(\"Failed to update filter status\");\n }\n } catch (e) {\n console.error(e);\n showToast({\n message: e?.message || \"Error updating filter status\",\n type: \"error\",\n });\n }\n };\n\n return (\n <Dialog\n open={open}\n onClose={onClose}\n maxWidth=\"md\"\n fullWidth\n className=\"add-custom-vaccine-dialog\"\n PaperProps={{\n sx: {\n borderRadius: \"18px\",\n padding: \"2px\",\n height: \"650px\",\n maxHeight: \"95vh\",\n },\n }}\n >\n <DialogTitle className=\"dialog-header\" sx={{ pb: 1.5 }}>\n <Box className=\"header-content\">\n <Box className=\"icon-box\">\n <FontAwesomeIcon icon={faFilter} />\n </Box>\n <Box className=\"text-wrap\">\n <Typography className=\"title\">\n {isAdding\n ? editingFilter\n ? \"Edit Filter\"\n : \"Add New Filter\"\n : \"Configure Filters\"}\n </Typography>\n {!isAdding && (\n <Typography className=\"subtitle\">\n {filtersList?.length || 0} filter\n {filtersList?.length !== 1 ? \"s\" : \"\"} configured\n </Typography>\n )}\n </Box>\n </Box>\n <IconButton\n aria-label=\"close\"\n onClick={onClose}\n className=\"close-button\"\n size=\"small\"\n >\n <FontAwesomeIcon icon={faTimes} />\n </IconButton>\n </DialogTitle>\n\n <DialogContent\n className=\"dialog-content\"\n sx={{ pt: 1, overflowY: \"auto\" }}\n >\n {loading ? (\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n height: 220,\n }}\n >\n <CircularProgress size={28} sx={{ color: \"#394d61\" }} />\n </Box>\n ) : isAdding ? (\n <Box\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 2,\n p: 2,\n border: \"1.5px solid #e8edf2\",\n borderRadius: \"14px\",\n backgroundColor: \"#f8fafc\",\n }}\n >\n <Box sx={{ display: \"flex\", gap: 2 }}>\n <Box className=\"input-group\" sx={{ flex: 1 }}>\n <Typography className=\"input-label\" sx={{ mb: 0.8 }}>\n <FontAwesomeIcon\n icon={faTag}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Filter Name\n </Typography>\n <TextField\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={newName}\n onChange={(e) => setNewName(e.target.value)}\n placeholder=\"e.g., Eligibility Filter\"\n sx={modalFieldSx}\n />\n </Box>\n\n <Box className=\"input-group\" sx={{ flex: 1 }}>\n <Typography className=\"input-label\" sx={{ mb: 0.5 }}>\n <FontAwesomeIcon\n icon={faCode}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Filter Code\n {isCodeDuplicate && (\n <Chip\n label=\"Duplicate\"\n size=\"small\"\n sx={{\n ml: 1,\n height: 18,\n fontSize: \"9px\",\n fontWeight: 700,\n backgroundColor: \"#fee2e2\",\n color: \"#dc2626\",\n }}\n />\n )}\n </Typography>\n <TextField\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={newCode}\n onChange={(e) =>\n !editingFilter &&\n setNewCode(\n e.target.value.toLowerCase().replace(/\\s+/g, \"_\"),\n )\n }\n placeholder=\"e.g., check_eligibility\"\n disabled={!!editingFilter}\n error={isCodeDuplicate}\n helperText={\n isCodeDuplicate ? \"This code already exists.\" : \"\"\n }\n sx={modalFieldSx}\n />\n </Box>\n </Box>\n\n <Box className=\"input-group\">\n <Typography className=\"input-label\" sx={{ mb: 0.8 }}>\n <FontAwesomeIcon\n icon={faAlignLeft}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Description\n </Typography>\n <TextField\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n multiline\n rows={2}\n value={newDescription}\n onChange={(e) => setNewDescription(e.target.value)}\n placeholder=\"Describe the purpose of this filter...\"\n sx={modalFieldSx}\n />\n </Box>\n\n <Box className=\"input-group\">\n <Typography className=\"input-label\" sx={{ mb: 0.8 }}>\n <FontAwesomeIcon\n icon={faDatabase}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n SQL Query\n </Typography>\n <TextField\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n multiline\n rows={5}\n value={newQuery}\n onChange={(e) => setNewQuery(e.target.value)}\n placeholder={\"SELECT EXISTS(...) AS result\"}\n error={!!queryPlaceholderError}\n helperText={queryPlaceholderError}\n sx={modalFieldSx}\n />\n <Typography\n variant=\"caption\"\n sx={{\n color: \"#64748b\",\n mt: 1,\n display: \"block\",\n lineHeight: 1.4,\n }}\n >\n <strong>Important:</strong> The query must return a{\" \"}\n <strong>boolean</strong> value whether the member passes the\n filter. Use only <code>{RESOURCE_ID_PLACEHOLDER}</code> as the\n parameter.\n </Typography>\n </Box>\n </Box>\n ) : filtersList?.length > 0 ? (\n <TableContainer\n component={Paper}\n elevation={0}\n sx={{\n border: \"1.5px solid #f0f0f0\",\n borderRadius: \"12px\",\n overflow: \"hidden\",\n maxHeight: 360,\n mt: 1,\n }}\n >\n <Table stickyHeader aria-label=\"filters table\">\n <TableHead>\n <TableRow>\n <TableCell sx={{ ...modalHeaderCellSx, width: 40 }}>#</TableCell>\n <TableCell sx={modalHeaderCellSx}>Name</TableCell>\n <TableCell sx={modalHeaderCellSx}>Code</TableCell>\n <TableCell sx={modalHeaderCellSx}>Description</TableCell>\n <TableCell sx={modalHeaderCellSx} align=\"center\">\n Status\n </TableCell>\n <TableCell sx={modalHeaderCellSx} align=\"center\" width=\"60\">\n Edit\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {filtersList.map((filter, index) => (\n <TableRow\n key={filter.id || filter.code}\n sx={{\n \"&:hover\": { backgroundColor: \"#f9fafb\" },\n \"&:last-child td\": { border: 0 },\n }}\n >\n <TableCell\n sx={{ fontSize: \"13px\", color: \"#94a3b8\", py: 1.5 }}\n >\n {index + 1}\n </TableCell>\n <TableCell\n sx={{\n fontSize: \"13px\",\n fontWeight: 700,\n color: \"#1e293b\",\n py: 1.5,\n }}\n >\n {filter.name}\n </TableCell>\n <TableCell sx={{ py: 1.5 }}>\n <Box\n component=\"code\"\n sx={{\n fontSize: \"11px\",\n fontWeight: 700,\n color: \"#394d61\",\n backgroundColor: \"#e8edf2\",\n px: 1,\n py: 0.3,\n borderRadius: \"5px\",\n }}\n >\n {filter.code}\n </Box>\n </TableCell>\n <TableCell\n sx={{\n fontSize: \"13px\",\n color: \"#64748b\",\n py: 1.5,\n maxWidth: 200,\n }}\n >\n <Tooltip title={filter.description || \"\"} placement=\"top\">\n <Typography\n variant=\"caption\"\n noWrap\n sx={{ display: \"block\" }}\n >\n {filter.description}\n </Typography>\n </Tooltip>\n </TableCell>\n <TableCell sx={{ py: 1.5 }} align=\"center\">\n <CustomSwitch\n checked={!!filter.is_active}\n onChange={(e) =>\n handleStatusChange(filter, e.target.checked)\n }\n />\n </TableCell>\n <TableCell sx={{ py: 1.5 }} align=\"center\">\n <IconButton\n size=\"small\"\n onClick={() => handleEditClick(filter)}\n sx={{\n color: \"#94a3b8\",\n \"&:hover\": { color: \"#394d61\" },\n }}\n >\n <FontAwesomeIcon\n icon={faEdit}\n style={{ fontSize: 13 }}\n />\n </IconButton>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n ) : (\n <Box\n sx={{\n py: 7,\n textAlign: \"center\",\n color: \"#94a3b8\",\n }}\n >\n <FontAwesomeIcon\n icon={faFilter}\n style={{ fontSize: 28, marginBottom: 10, opacity: 0.35 }}\n />\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: 600, color: \"#94a3b8\" }}\n >\n No filters configured yet.\n </Typography>\n <Typography variant=\"caption\" sx={{ color: \"#b0bec5\" }}>\n Click &ldquo;Add New&rdquo; to create the first one.\n </Typography>\n </Box>\n )}\n </DialogContent>\n\n <DialogActions className=\"dialog-actions\" sx={{ pt: 0, pb: 3, px: 3 }}>\n {isAdding ? (\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n width: \"100%\",\n gap: 1.5,\n }}\n >\n <Button\n onClick={() => {\n setIsAdding(false);\n resetForm();\n }}\n className=\"cancel-btn\"\n startIcon={\n <FontAwesomeIcon icon={faArrowLeft} style={{ fontSize: 11 }} />\n }\n >\n Back\n </Button>\n <Button\n onClick={handleSave}\n className=\"add-btn\"\n disabled={!canSave}\n >\n {editingFilter ? \"Update Filter\" : \"Save Filter\"}\n </Button>\n </Box>\n ) : (\n <Button\n onClick={() => setIsAdding(true)}\n className=\"add-btn\"\n sx={{ width: \"100%\" }}\n startIcon={\n <FontAwesomeIcon icon={faPlus} style={{ fontSize: 11 }} />\n }\n >\n Add New Filter\n </Button>\n )}\n </DialogActions>\n\n <Dialog\n open={usageWarning.open}\n onClose={() => setUsageWarning({ ...usageWarning, open: false })}\n PaperProps={{ sx: { borderRadius: \"14px\", p: 1 } }}\n >\n <DialogTitle\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n pb: 1,\n }}\n >\n <Typography\n variant=\"h6\"\n sx={{ fontWeight: 800, fontSize: \"16px\", color: \"#394d61\" }}\n >\n Filter in Use\n </Typography>\n <IconButton\n onClick={() => setUsageWarning({ ...usageWarning, open: false })}\n size=\"small\"\n >\n <FontAwesomeIcon icon={faTimes} />\n </IconButton>\n </DialogTitle>\n <DialogContent>\n <Box>\n <Typography variant=\"body2\" sx={{ mb: 2 }}>\n <strong>&quot;{usageWarning.filterName}&quot;</strong> is\n currently being used in the following vaccines:\n </Typography>\n <Box\n sx={{\n maxHeight: \"150px\",\n overflowY: \"auto\",\n bgcolor: \"#f8fafc\",\n p: 1.5,\n borderRadius: \"8px\",\n border: \"1.5px solid #e2e8f0\",\n }}\n >\n {usageWarning.usedIn.map((name, idx) => (\n <Typography\n key={idx}\n variant=\"caption\"\n sx={{ display: \"block\", color: \"#475569\", fontWeight: 600 }}\n >\n • {name}\n </Typography>\n ))}\n </Box>\n <Typography\n variant=\"body2\"\n sx={{ mt: 2, color: \"#ef4444\", fontWeight: 700 }}\n >\n To deactivate this filter, please ensure it&apos;s removed from\n all vaccines first.\n </Typography>\n </Box>\n </DialogContent>\n </Dialog>\n </Dialog>\n );\n};\n\nConfigureFiltersModal.propTypes = {\n open: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n};\n\nexport default ConfigureFiltersModal;\n","import { useEffect, useMemo, useState, useCallback } from \"react\";\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n Box,\n Typography,\n IconButton,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n Paper,\n TextField,\n CircularProgress,\n Chip,\n Autocomplete,\n} from \"@mui/material\";\nimport PostgresEditor from \"@/views/custom-components/PostgresEditor\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n faTimes,\n faUser,\n faPlus,\n faArrowLeft,\n faCode,\n faTag,\n faDatabase,\n faEdit,\n faMapMarkedAlt,\n faClockRotateLeft,\n faListCheck,\n faCalendarDay,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport PropTypes from \"prop-types\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport CustomSwitch from \"@/views/custom-components/CustomSwitch\";\nimport {\n getRecipients,\n saveRecipient,\n updateRecipient,\n} from \"../service\";\nimport {\n setRecipientMaster,\n upsertRecipientMasterItem,\n} from \"@/store/reducers/immunizationSlice\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport ConfigureBaseDateModal from \"./ConfigureBaseDateModal\";\nimport \"../styles/AddCustomVaccineModal.scss\";\n\nconst RESOURCE_ID_PLACEHOLDER = \"#resourceId#\";\nconst modalHeaderCellSx = {\n fontWeight: 700,\n color: \"#717171\",\n fontSize: \"11px\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.5px\",\n backgroundColor: \"#f9fafb\",\n borderBottom: \"1.5px solid #f0f0f0\",\n py: 1.5,\n};\n\nconst modalFieldSx = {\n \"& .MuiOutlinedInput-root\": {\n borderRadius: \"9px\",\n backgroundColor: \"#f8fafc\",\n fontSize: \"13px\",\n \"& fieldset\": { borderColor: \"#e2e8f0\", borderWidth: \"1.5px\" },\n \"&:hover fieldset\": { borderColor: \"#cbd5e1\" },\n \"&.Mui-focused fieldset\": { borderColor: \"#4c5e70\" },\n \"&.Mui-disabled fieldset\": { borderColor: \"#e2e8f0\" },\n \"&.Mui-disabled\": {\n backgroundColor: \"#f1f5f9\",\n \"& .MuiOutlinedInput-input\": {\n WebkitTextFillColor: \"#475569\",\n },\n },\n },\n \"& .MuiInputLabel-root\": {\n fontSize: \"13px\",\n \"&.Mui-focused\": { color: \"#4c5e70\" },\n },\n};\n\nconst normaliseKeyValue = (value) => value?.trim().toLowerCase() || \"\";\n\nconst normaliseColumnName = (columnExpression) => {\n const cleaned = columnExpression.trim().replace(/,$/, \"\");\n const aliasMatch = cleaned.match(/\\s+as\\s+([a-zA-Z0-9_\"]+)$/i);\n if (aliasMatch) {\n return aliasMatch[1].replace(/\"/g, \"\");\n }\n\n const directAliasMatch = cleaned.match(/\\s+([a-zA-Z_][a-zA-Z0-9_]*)$/);\n if (\n directAliasMatch &&\n !/[)\\]]$/.test(cleaned.slice(0, cleaned.lastIndexOf(directAliasMatch[0])))\n ) {\n return directAliasMatch[1];\n }\n\n const lastPart = cleaned.split(\".\").pop() || cleaned;\n return lastPart.replace(/[\"'`]/g, \"\").trim();\n};\n\nconst splitSelectColumns = (selectPart) => {\n const columns = [];\n let current = \"\";\n let bracketDepth = 0;\n\n for (const char of selectPart) {\n if (char === \"(\") bracketDepth += 1;\n if (char === \")\") bracketDepth = Math.max(0, bracketDepth - 1);\n\n if (char === \",\" && bracketDepth === 0) {\n if (current.trim()) {\n columns.push(current.trim());\n }\n current = \"\";\n continue;\n }\n current += char;\n }\n\n if (current.trim()) {\n columns.push(current.trim());\n }\n\n return columns;\n};\n\nconst inferColumnsFromQueryText = (query) => {\n const match = query.match(/select\\s+([\\s\\S]+?)\\s+from\\s/i);\n if (!match?.[1]) {\n return [];\n }\n\n return splitSelectColumns(match[1])\n .map(normaliseColumnName)\n .filter(Boolean)\n .filter((value, index, arr) => arr.indexOf(value) === index);\n};\n\nconst parseRecipientConfig = (config) => {\n if (!config) return {};\n if (typeof config === \"object\") return config;\n try {\n return JSON.parse(config);\n } catch {\n return {};\n }\n};\n\nconst ConfigureRecipientModal = ({ open, onClose }) => {\n const dispatch = useDispatch();\n const { recipientMaster = [], baseDateMaster = [] } = useSelector(\n (state) => state.immunization,\n );\n\n const [isAdding, setIsAdding] = useState(false);\n const [editingRecipient, setEditingRecipient] = useState(null);\n const [loading, setLoading] = useState(false);\n const [saving, setSaving] = useState(false);\n const [isBaseDateModalOpen, setIsBaseDateModalOpen] = useState(false);\n\n const [newName, setNewName] = useState(\"\");\n const [newCode, setNewCode] = useState(\"\");\n const [newQuery, setNewQuery] = useState(\"\");\n const [geographicalApplicability, setGeographicalApplicability] =\n useState(false);\n const [allowedBaseDates, setAllowedBaseDates] = useState([]);\n const [fetchTypeKeys, setFetchTypeKeys] = useState([]);\n const [locationKey, setLocationKey] = useState(\"\");\n const [historyKey, setHistoryKey] = useState(\"\");\n const [isQueryTouched, setIsQueryTouched] = useState(false);\n const [queryColumns, setQueryColumns] = useState([]);\n\n useEffect(() => {\n if (open) {\n setIsAdding(false);\n setEditingRecipient(null);\n resetForm();\n fetchRecipients();\n }\n }, [open]);\n\n const fetchRecipients = async (forceRefetch = false) => {\n if (!forceRefetch && recipientMaster.length > 0) return;\n try {\n setLoading(true);\n const res = await getRecipients();\n if (res?.data?.result) {\n dispatch(setRecipientMaster(res.data.result));\n }\n } catch (error) {\n console.error(error);\n showToast({\n message: \"Failed to fetch recipients\",\n type: \"error\",\n });\n } finally {\n setLoading(false);\n }\n };\n\n const resetForm = () => {\n setNewName(\"\");\n setNewCode(\"\");\n setNewQuery(\"\");\n setGeographicalApplicability(false);\n setAllowedBaseDates([]);\n setFetchTypeKeys([]);\n setLocationKey(\"\");\n setHistoryKey(\"\");\n setEditingRecipient(null);\n setIsQueryTouched(false);\n setQueryColumns([]);\n };\n\n const existingCodes = useMemo(\n () =>\n recipientMaster.map((item) => item.code?.toLowerCase()).filter(Boolean),\n [recipientMaster],\n );\n\n const normalizedCode = newCode.trim().replace(/\\s+/g, \"_\").toUpperCase();\n const isCodeDuplicate =\n !editingRecipient &&\n !!normalizedCode &&\n existingCodes.includes(normalizedCode.toLowerCase());\n\n const baseDateOptions = useMemo(\n () =>\n baseDateMaster.map((item) => ({\n label: item.name,\n value: item.code,\n })),\n [baseDateMaster],\n );\n\n const queryColumnOptions = useMemo(() => queryColumns, [queryColumns]);\n\n const duplicateColumnUsageError = useMemo(() => {\n const usageMap = new Map();\n\n const registerUsage = (value, fieldLabel) => {\n const normalisedValue = normaliseKeyValue(value);\n if (!normalisedValue) return;\n\n const existingUsage = usageMap.get(normalisedValue);\n if (existingUsage) {\n return `${value} is already used in ${existingUsage}. Each column can only be used once across recipient keys.`;\n }\n\n usageMap.set(normalisedValue, fieldLabel);\n return \"\";\n };\n\n for (const fetchTypeKey of fetchTypeKeys) {\n const duplicateError = registerUsage(fetchTypeKey, \"Fetch Type Keys\");\n if (duplicateError) return duplicateError;\n }\n\n const historyKeyError = registerUsage(historyKey, \"History Key\");\n if (historyKeyError) return historyKeyError;\n\n const locationKeyError = registerUsage(locationKey, \"Location Key\");\n if (locationKeyError) return locationKeyError;\n\n return \"\";\n }, [fetchTypeKeys, historyKey, locationKey]);\n\n const getAvailableColumnOptions = useCallback(\n (currentValues = []) => {\n const currentValueSet = new Set(\n currentValues.map((value) => normaliseKeyValue(value)).filter(Boolean),\n );\n\n const reservedValues = new Set(\n [...fetchTypeKeys, historyKey, geographicalApplicability ? locationKey : \"\"]\n .map((value) => normaliseKeyValue(value))\n .filter(Boolean),\n );\n\n currentValueSet.forEach((value) => reservedValues.delete(value));\n\n return queryColumnOptions.filter((option) => {\n const normalisedOption = normaliseKeyValue(option);\n return !reservedValues.has(normalisedOption);\n });\n },\n [\n fetchTypeKeys,\n geographicalApplicability,\n historyKey,\n locationKey,\n queryColumnOptions,\n ],\n );\n\n const queryError = useMemo(() => {\n const q = newQuery.trim().toLowerCase();\n if (!q) return \"\";\n if (!q.startsWith(\"select\")) return \"Query must start with SELECT.\";\n const forbidden = [\n \"insert\",\n \"update\",\n \"delete\",\n \"drop\",\n \"truncate\",\n \"alter\",\n \"create\",\n ];\n const foundForbidden = forbidden.find((keyword) => {\n const regex = new RegExp(`\\\\b${keyword}\\\\b`, \"i\");\n return regex.test(q);\n });\n if (foundForbidden)\n return `Query contains forbidden keyword: ${foundForbidden.toUpperCase()}`;\n return \"\";\n }, [newQuery]);\n\n const canSave =\n newName.trim() &&\n normalizedCode &&\n newQuery.trim() &&\n !isCodeDuplicate &&\n !queryError &&\n !duplicateColumnUsageError &&\n fetchTypeKeys.length > 0 &&\n !!historyKey &&\n (!geographicalApplicability || !!locationKey) &&\n !saving;\n\n const loadColumnsFromQuery = (queryToPreview = newQuery) => {\n if (!queryToPreview.trim() || queryError) {\n setQueryColumns([]);\n return;\n }\n\n const discoveredColumns = inferColumnsFromQueryText(queryToPreview);\n setQueryColumns(discoveredColumns);\n };\n\n useEffect(() => {\n const timer = setTimeout(() => {\n if (newQuery) {\n loadColumnsFromQuery(newQuery);\n }\n }, 1000);\n return () => clearTimeout(timer);\n }, [newQuery]);\n\n const handleEditClick = (recipient) => {\n const config = parseRecipientConfig(recipient.config);\n setEditingRecipient(recipient);\n setIsAdding(true);\n setNewName(recipient.name || \"\");\n setNewCode(recipient.code || \"\");\n setNewQuery(config.query || \"\");\n setGeographicalApplicability(!!config.geographicalApplicability);\n setAllowedBaseDates(config.allowedBaseDates || []);\n setFetchTypeKeys(config.fetchTypeKeys || []);\n setLocationKey(config.locationKey || \"\");\n setHistoryKey(config.historyKey || \"\");\n setIsQueryTouched(false);\n };\n\n const handleSave = async () => {\n try {\n setIsQueryTouched(true);\n if (!editingRecipient && isCodeDuplicate) {\n showToast({\n message: \"Code must be unique. This code already exists.\",\n type: \"error\",\n });\n return;\n }\n\n if (queryError) {\n showToast({ message: queryError, type: \"error\" });\n return;\n }\n\n if (duplicateColumnUsageError) {\n showToast({ message: duplicateColumnUsageError, type: \"error\" });\n return;\n }\n\n const payload = {\n name: newName.trim(),\n code: editingRecipient?.code || normalizedCode,\n config: JSON.stringify({\n allowedBaseDates,\n geographicalApplicability,\n query: newQuery.trim(),\n fetchTypeKeys,\n locationKey: geographicalApplicability ? locationKey : \"\",\n historyKey,\n }),\n };\n\n setSaving(true);\n const res = editingRecipient\n ? await updateRecipient(payload)\n : await saveRecipient(payload);\n\n if (res?.data?.success === false) {\n throw new Error(\"Failed to save recipient\");\n }\n\n const savedRecipient = res?.data?.result?.[0] || {\n ...editingRecipient,\n name: payload.name,\n code: payload.code,\n config: parseRecipientConfig(payload.config),\n };\n\n dispatch(upsertRecipientMasterItem(savedRecipient));\n showToast({\n message: `Recipient ${editingRecipient ? \"updated\" : \"added\"} successfully`,\n type: \"success\",\n });\n resetForm();\n setIsAdding(false);\n } catch (error) {\n console.error(error);\n showToast({\n message: error?.message || \"Failed to save recipient\",\n type: \"error\",\n });\n } finally {\n setSaving(false);\n }\n };\n\n return (\n <>\n <Dialog\n open={open}\n onClose={onClose}\n maxWidth=\"md\"\n fullWidth\n className=\"add-custom-vaccine-dialog\"\n PaperProps={{\n sx: {\n borderRadius: \"18px\",\n padding: \"2px\",\n height: \"680px\",\n maxHeight: \"95vh\",\n },\n }}\n >\n <DialogTitle className=\"dialog-header\" sx={{ pb: 1.5 }}>\n <Box className=\"header-content\">\n <Box className=\"icon-box\">\n <FontAwesomeIcon icon={faUser} />\n </Box>\n <Box className=\"text-wrap\">\n <Typography className=\"title\">\n {isAdding\n ? editingRecipient\n ? \"Edit Recipient\"\n : \"Add New Recipient\"\n : \"Configure Recipient\"}\n </Typography>\n {!isAdding && (\n <Typography className=\"subtitle\">\n {recipientMaster.length || 0} recipient\n {recipientMaster.length !== 1 ? \"s\" : \"\"} configured\n </Typography>\n )}\n </Box>\n </Box>\n <IconButton\n aria-label=\"close\"\n onClick={onClose}\n className=\"close-button\"\n size=\"small\"\n >\n <FontAwesomeIcon icon={faTimes} />\n </IconButton>\n </DialogTitle>\n\n <DialogContent\n className=\"dialog-content\"\n sx={{ pt: 1, overflowY: \"auto\" }}\n >\n {loading ? (\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n height: 220,\n }}\n >\n <CircularProgress size={28} sx={{ color: \"#394d61\" }} />\n </Box>\n ) : isAdding ? (\n <Box\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 2,\n p: 2,\n border: \"1.5px solid #e8edf2\",\n borderRadius: \"14px\",\n backgroundColor: \"#f8fafc\",\n }}\n >\n <Box sx={{ display: \"flex\", gap: 2 }}>\n <Box className=\"input-group\" sx={{ flex: 1 }}>\n <Typography className=\"input-label\" sx={{ mb: 0.8 }}>\n <FontAwesomeIcon\n icon={faTag}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Name\n </Typography>\n <TextField\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={newName}\n onChange={(e) => {\n const val = e.target.value;\n setNewName(val);\n if (!editingRecipient) {\n const generatedCode = val\n .trim()\n .replace(/\\s+/g, \"_\")\n .toUpperCase();\n setNewCode(generatedCode);\n }\n }}\n sx={modalFieldSx}\n />\n </Box>\n\n <Box className=\"input-group\" sx={{ flex: 1 }}>\n <Typography className=\"input-label\" sx={{ mb: 0.5 }}>\n <FontAwesomeIcon\n icon={faCode}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Code\n {isCodeDuplicate && (\n <Chip\n label=\"Duplicate\"\n size=\"small\"\n sx={{\n ml: 1,\n height: 18,\n fontSize: \"9px\",\n fontWeight: 700,\n backgroundColor: \"#fee2e2\",\n color: \"#dc2626\",\n }}\n />\n )}\n </Typography>\n <TextField\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={newCode}\n onChange={(e) =>\n !editingRecipient && setNewCode(e.target.value)\n }\n disabled={!!editingRecipient}\n error={isCodeDuplicate}\n helperText={\n editingRecipient\n ? \"Code cannot be changed while editing.\"\n : isCodeDuplicate\n ? \"This code already exists.\"\n : \"\"\n }\n sx={modalFieldSx}\n />\n </Box>\n </Box>\n\n <Box className=\"input-group\">\n <Typography className=\"input-label\" sx={{ mb: 0.8 }}>\n <FontAwesomeIcon\n icon={faDatabase}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Query\n </Typography>\n <Box\n sx={{\n border:\n !!queryError && isQueryTouched\n ? \"1.5px solid #d32f2f\"\n : \"1.5px solid #e2e8f0\",\n borderRadius: \"12px\",\n overflow: \"hidden\",\n height: \"180px\",\n }}\n >\n <PostgresEditor\n defaultValue={newQuery}\n height=\"180px\"\n onChange={(value) => setNewQuery(value)}\n />\n </Box>\n {isQueryTouched && queryError && (\n <Typography\n variant=\"caption\"\n color=\"error\"\n sx={{ mt: 0.5, ml: 1, display: \"block\" }}\n >\n {queryError}\n </Typography>\n )}\n </Box>\n\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n p: 1.5,\n border: \"1px solid #e2e8f0\",\n borderRadius: \"12px\",\n backgroundColor: \"#fff\",\n }}\n >\n <Box>\n <Typography\n sx={{ fontWeight: 700, fontSize: \"13px\", color: \"#334155\" }}\n >\n Geographical Applicability\n </Typography>\n <Typography sx={{ fontSize: \"12px\", color: \"#64748b\" }}>\n Show location key only when recipient config needs\n geography.\n </Typography>\n </Box>\n <CustomSwitch\n checked={geographicalApplicability}\n onChange={(e) => {\n const checked = e.target.checked;\n setGeographicalApplicability(checked);\n if (!checked) {\n setLocationKey(\"\");\n }\n }}\n />\n </Box>\n\n <Box sx={{ display: \"flex\", gap: 2, flexWrap: \"wrap\" }}>\n <Box className=\"input-group\" sx={{ flex: 1, minWidth: 250 }}>\n <Typography className=\"input-label\" sx={{ mb: 0.8 }}>\n <FontAwesomeIcon\n icon={faListCheck}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Fetch Type Keys\n </Typography>\n <Autocomplete\n multiple\n freeSolo\n disableCloseOnSelect\n size=\"small\"\n options={getAvailableColumnOptions(fetchTypeKeys)}\n value={fetchTypeKeys}\n onChange={(_, newValue) => {\n const uniqueValues = [];\n const seenValues = new Set();\n\n newValue.forEach((value) => {\n const normalisedValue = normaliseKeyValue(value);\n if (!normalisedValue || seenValues.has(normalisedValue)) {\n return;\n }\n seenValues.add(normalisedValue);\n uniqueValues.push(value);\n });\n\n setFetchTypeKeys(uniqueValues);\n }}\n renderTags={(value, getTagProps) =>\n value.map((option, index) => (\n <Chip\n label={option}\n {...getTagProps({ index })}\n size=\"small\"\n />\n ))\n }\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"Fetch Type Keys\"\n placeholder=\"Select or type and press enter\"\n sx={modalFieldSx}\n />\n )}\n />\n </Box>\n\n <Box className=\"input-group\" sx={{ flex: 1, minWidth: 250 }}>\n <Typography className=\"input-label\" sx={{ mb: 0.8 }}>\n <FontAwesomeIcon\n icon={faClockRotateLeft}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n History Key\n </Typography>\n <Autocomplete\n freeSolo\n size=\"small\"\n options={getAvailableColumnOptions([historyKey])}\n value={historyKey}\n onChange={(_, newValue) =>\n setHistoryKey(newValue || \"\")\n }\n onInputChange={(_, newInputValue) =>\n setHistoryKey(newInputValue)\n }\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"History Key\"\n placeholder=\"Select or type column name\"\n sx={modalFieldSx}\n />\n )}\n />\n </Box>\n </Box>\n\n {geographicalApplicability && (\n <Box className=\"input-group\">\n <Typography className=\"input-label\" sx={{ mb: 0.8 }}>\n <FontAwesomeIcon\n icon={faMapMarkedAlt}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Location Key\n </Typography>\n <Autocomplete\n freeSolo\n size=\"small\"\n options={getAvailableColumnOptions([locationKey])}\n value={locationKey}\n onChange={(_, newValue) =>\n setLocationKey(newValue || \"\")\n }\n onInputChange={(_, newInputValue) =>\n setLocationKey(newInputValue)\n }\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"Location Key\"\n placeholder=\"Select or type column name\"\n sx={modalFieldSx}\n />\n )}\n />\n </Box>\n )}\n\n <Box className=\"input-group\">\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n gap: 1.5,\n mb: 0.8,\n flexWrap: \"wrap\",\n }}\n >\n <Typography className=\"input-label\" sx={{ mb: 0 }}>\n <FontAwesomeIcon\n icon={faCalendarDay}\n style={{ marginRight: 6, opacity: 0.6 }}\n />\n Allowed Base Dates\n </Typography>\n <Button\n variant=\"text\"\n size=\"small\"\n onClick={() => setIsBaseDateModalOpen(true)}\n sx={{\n textTransform: \"none\",\n fontWeight: 700,\n color: \"#394d61\",\n p: 0,\n minWidth: 0,\n }}\n >\n + Add New Base Date\n </Button>\n </Box>\n <Autocomplete\n multiple\n disableCloseOnSelect\n size=\"small\"\n options={baseDateOptions}\n value={baseDateOptions.filter((option) =>\n allowedBaseDates.includes(option.value),\n )}\n onChange={(_, selectedOptions) =>\n setAllowedBaseDates(\n selectedOptions.map((item) => item.value),\n )\n }\n getOptionLabel={(option) => option.label}\n isOptionEqualToValue={(option, value) =>\n option.value === value.value\n }\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"Select allowed base dates\"\n placeholder=\"Choose one or more\"\n sx={modalFieldSx}\n />\n )}\n />\n </Box>\n </Box>\n ) : recipientMaster.length > 0 ? (\n <TableContainer\n component={Paper}\n elevation={0}\n sx={{\n border: \"1.5px solid #f0f0f0\",\n borderRadius: \"12px\",\n overflow: \"hidden\",\n maxHeight: 360,\n mt: 1,\n }}\n >\n <Table stickyHeader aria-label=\"recipient table\">\n <TableHead>\n <TableRow>\n <TableCell sx={modalHeaderCellSx}>Name</TableCell>\n <TableCell sx={modalHeaderCellSx}>Code</TableCell>\n <TableCell sx={modalHeaderCellSx} align=\"center\" width=\"60\">\n Edit\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {recipientMaster.map((recipient) => (\n <TableRow\n key={recipient.id || recipient.code}\n sx={{\n \"&:hover\": { backgroundColor: \"#f9fafb\" },\n \"&:last-child td\": { border: 0 },\n }}\n >\n <TableCell\n sx={{\n fontSize: \"13px\",\n fontWeight: 700,\n color: \"#1e293b\",\n py: 1.5,\n }}\n >\n {recipient.name}\n </TableCell>\n <TableCell sx={{ py: 1.5 }}>\n <Box\n component=\"code\"\n sx={{\n fontSize: \"11px\",\n fontWeight: 700,\n color: \"#394d61\",\n backgroundColor: \"#e8edf2\",\n px: 1,\n py: 0.3,\n borderRadius: \"5px\",\n }}\n >\n {recipient.code}\n </Box>\n </TableCell>\n <TableCell sx={{ py: 1.5 }} align=\"center\">\n <IconButton\n size=\"small\"\n onClick={() => handleEditClick(recipient)}\n sx={{\n color: \"#94a3b8\",\n \"&:hover\": { color: \"#394d61\" },\n }}\n >\n <FontAwesomeIcon\n icon={faEdit}\n style={{ fontSize: 13 }}\n />\n </IconButton>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n ) : (\n <Box\n sx={{\n py: 7,\n textAlign: \"center\",\n color: \"#94a3b8\",\n }}\n >\n <FontAwesomeIcon\n icon={faUser}\n style={{ fontSize: 28, marginBottom: 10, opacity: 0.35 }}\n />\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: 600, color: \"#94a3b8\" }}\n >\n No recipients configured yet.\n </Typography>\n <Typography variant=\"caption\" sx={{ color: \"#b0bec5\" }}>\n Click &ldquo;Add New&rdquo; to create the first one.\n </Typography>\n </Box>\n )}\n </DialogContent>\n\n <DialogActions className=\"dialog-actions\" sx={{ pt: 0, pb: 3, px: 3 }}>\n {isAdding ? (\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n width: \"100%\",\n gap: 1.5,\n }}\n >\n <Button\n onClick={() => {\n resetForm();\n setIsAdding(false);\n }}\n className=\"cancel-btn\"\n startIcon={\n <FontAwesomeIcon\n icon={faArrowLeft}\n style={{ fontSize: 11 }}\n />\n }\n >\n Back\n </Button>\n <Button\n onClick={handleSave}\n className=\"add-btn\"\n disabled={!canSave}\n >\n {editingRecipient ? \"Update Recipient\" : \"Save Recipient\"}\n </Button>\n </Box>\n ) : (\n <Button\n onClick={() => setIsAdding(true)}\n className=\"add-btn\"\n sx={{ width: \"100%\" }}\n startIcon={\n <FontAwesomeIcon icon={faPlus} style={{ fontSize: 11 }} />\n }\n >\n Add New Recipient\n </Button>\n )}\n </DialogActions>\n </Dialog>\n\n <ConfigureBaseDateModal\n open={isBaseDateModalOpen}\n onClose={() => setIsBaseDateModalOpen(false)}\n startInAddMode\n onSaved={(savedBaseDate) => {\n if (savedBaseDate?.code) {\n setAllowedBaseDates((prev) =>\n prev.includes(savedBaseDate.code)\n ? prev\n : [...prev, savedBaseDate.code],\n );\n }\n }}\n />\n </>\n );\n};\n\nConfigureRecipientModal.propTypes = {\n open: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n};\n\nexport default ConfigureRecipientModal;\n","import {\n Typography,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n TextField,\n IconButton,\n Box,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n Popover,\n Switch,\n Tooltip,\n} from \"@mui/material\";\nimport React, { useState } from \"react\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport PropTypes from \"prop-types\";\nimport {\n faExclamationCircle,\n faPlus,\n faTrash,\n} from \"@fortawesome/free-solid-svg-icons\";\n\nconst getDays = (val) => {\n if (!val) return 0;\n if (typeof val === \"string\" && val.toLowerCase() === \"birth\") return 0;\n return parseInt(val) || 0;\n};\n\nconst DurationInput = ({ defaultValue, error, onFieldUpdate }) => {\n const quantity = getDays(defaultValue);\n\n const handleQtyChange = (e) => {\n const rawValue = e.target.value;\n if (rawValue === \"\") {\n onFieldUpdate(\"0 days\");\n return;\n }\n\n const val = Math.max(0, parseInt(rawValue) || 0);\n onFieldUpdate(`${val} days`);\n };\n\n return (\n <Box sx={{ position: \"relative\", mb: error ? 3.5 : 0 }}>\n <Box sx={{ display: \"flex\", gap: 1, alignItems: \"center\" }}>\n <TextField\n size=\"small\"\n type=\"number\"\n value={quantity.toString()}\n onChange={handleQtyChange}\n inputProps={{ min: 0 }}\n className={`dose-input duration-qty ${error ? \"error-input\" : \"\"}`}\n sx={{ flex: 1 }}\n />\n <Typography\n sx={{ color: \"#717171\", fontSize: \"12px\", minWidth: \"30px\" }}\n >\n days\n </Typography>\n </Box>\n {error && (\n <Box\n className=\"error-msg\"\n sx={{ position: \"absolute\", top: \"100%\", mt: 1, left: 0 }}\n >\n <FontAwesomeIcon icon={faExclamationCircle} />\n {error}\n </Box>\n )}\n </Box>\n );\n};\n\nDurationInput.propTypes = {\n defaultValue: PropTypes.string,\n error: PropTypes.string,\n onFieldUpdate: PropTypes.func.isRequired,\n};\n\nconst DoseDetailsTable = ({\n doses = [],\n doseType = \"FIXED\",\n doseCount = 0,\n onUpdate,\n onDoseTypeChange,\n errors = [],\n}) => {\n const [deleteConfirmModal, setDeleteConfirmModal] = useState({\n open: false,\n index: null,\n });\n const [boosterAliasModal, setBoosterAliasModal] = useState({\n open: false,\n index: null,\n value: \"\",\n anchorEl: null,\n });\n\n const isFixed = doseType === \"FIXED\";\n\n let safeDoses = [];\n if (doseCount > 0) {\n if (isFixed) {\n safeDoses =\n doses && typeof doses === \"object\" && !Array.isArray(doses)\n ? [doses]\n : Array.isArray(doses) && doses.length > 0\n ? [doses[0]]\n : [];\n } else {\n const baseArray = Array.isArray(doses) ? doses : [];\n safeDoses = baseArray.slice(0, doseCount);\n }\n }\n\n const handleFieldChange = (idx, field, value) => {\n let sanitizedValue = value;\n if (field === \"interval\") {\n sanitizedValue = value === \"\" ? \"\" : Math.max(0, parseInt(value) || 0);\n }\n\n if (isFixed) {\n const updatedDose = {\n ...(Array.isArray(doses) ? doses[0] : doses),\n [field]: sanitizedValue,\n };\n\n // If fixed dose and count is 1, interval must be 0\n if (doseCount === 1) {\n updatedDose.interval = 0;\n }\n\n onUpdate(updatedDose);\n } else {\n const baseArray = Array.isArray(doses) ? doses : [];\n const updatedDoses = baseArray.map((d, i) => {\n let newDose = { ...d };\n if (field === \"isBooster\") {\n if (value && i >= idx) {\n newDose.isBooster = true;\n } else if (!value && i <= idx) {\n newDose.isBooster = false;\n delete newDose.alias;\n }\n } else if (i === idx) {\n if (field === \"alias\" && !sanitizedValue) {\n delete newDose.alias;\n } else {\n newDose[field] = sanitizedValue;\n }\n }\n // Also ensure last dose in flexible mode has 0 interval in DTO\n if (i === baseArray.length - 1) {\n newDose.interval = 0;\n }\n return newDose;\n });\n onUpdate(updatedDoses);\n }\n };\n\n const handleSaveBoosterAlias = () => {\n if (boosterAliasModal.index === null) {\n return;\n }\n\n handleFieldChange(\n boosterAliasModal.index,\n \"alias\",\n boosterAliasModal.value.trim(),\n );\n setBoosterAliasModal({\n open: false,\n index: null,\n value: \"\",\n anchorEl: null,\n });\n };\n\n const confirmDeleteDose = () => {\n onUpdate(safeDoses.filter((_, i) => i !== deleteConfirmModal.index));\n setDeleteConfirmModal({ open: false, index: null });\n };\n\n return (\n <Box className=\"left-panel\">\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n gap: 2,\n flexWrap: \"wrap\",\n mb: 2,\n }}\n >\n <Typography className=\"section-label\" sx={{ mb: 0 }}>\n DOSE - WISE DETAILS\n </Typography>\n\n <Box className=\"dose-type-toggle\">\n <Typography className=\"toggle-label\">Dose Type:</Typography>\n <Box className=\"toggle-container\">\n <Tooltip\n title=\"A single eligibility window applies to all doses, separated by the minimum interval.\"\n arrow\n placement=\"top\"\n >\n <Box\n className={`toggle-option ${doseType === \"FIXED\" ? \"active\" : \"\"}`}\n onClick={() => onDoseTypeChange(\"FIXED\")}\n >\n Fixed\n </Box>\n </Tooltip>\n <Tooltip\n title=\"Each dose has its own independent eligibility window and minimum interval.\"\n arrow\n placement=\"top\"\n >\n <Box\n className={`toggle-option ${doseType === \"FLEXIBLE\" ? \"active\" : \"\"}`}\n onClick={() => onDoseTypeChange(\"FLEXIBLE\")}\n >\n Flexible\n </Box>\n </Tooltip>\n </Box>\n </Box>\n </Box>\n <TableContainer className=\"dose-table\">\n <Table\n size=\"small\"\n sx={{\n \"& .MuiTableCell-head\": {\n paddingTop: \"12px\",\n paddingBottom: \"12px\",\n },\n }}\n >\n <TableHead>\n <TableRow>\n <TableCell className=\"header-cell\" sx={{ pl: 2.5, width: 56 }}>\n #\n </TableCell>\n <TableCell className=\"header-cell\" sx={{ px: 2.5 }}>\n ELIGIBLE FROM\n </TableCell>\n <TableCell className=\"header-cell\" sx={{ px: 2.5 }}>\n ELIGIBLE TO\n </TableCell>\n <TableCell className=\"header-cell\" sx={{ px: 2.5 }}>\n INTERVAL (MIN DAYS)\n </TableCell>\n {!isFixed && (\n <>\n <TableCell className=\"header-cell\" sx={{ px: 2.5, width: 132 }}>\n BOOSTER\n </TableCell>\n <TableCell className=\"header-cell\" sx={{ px: 2.5, width: 64 }}>\n ACTIONS\n </TableCell>\n </>\n )}\n </TableRow>\n </TableHead>\n <TableBody>\n {safeDoses && safeDoses.length > 0 ? (\n safeDoses.map((dose, idx) => {\n const externalErrors = errors[idx] || {};\n const fromError = externalErrors.eligibleFrom;\n let toError = externalErrors.eligibleTo;\n const intervalError = externalErrors.interval;\n const fromDays = getDays(dose?.eligibleFrom);\n const toDays = getDays(dose?.eligibleTo);\n if (!toError && toDays > 0 && toDays <= fromDays) {\n toError = \"Must be strictly greater than Eligible From\";\n }\n return (\n <TableRow key={dose.id || idx}>\n <TableCell sx={{ pl: 2.5 }}>{idx + 1}</TableCell>\n <TableCell sx={{ px: 2.5 }}>\n <DurationInput\n defaultValue={dose?.eligibleFrom}\n error={fromError || dose?.error}\n onFieldUpdate={(val) =>\n handleFieldChange(idx, \"eligibleFrom\", val)\n }\n />\n </TableCell>\n <TableCell sx={{ px: 2.5 }}>\n <DurationInput\n defaultValue={dose?.eligibleTo}\n error={toError}\n onFieldUpdate={(val) =>\n handleFieldChange(idx, \"eligibleTo\", val)\n }\n />\n </TableCell>\n <TableCell sx={{ px: 2.5 }}>\n {(isFixed && doseCount === 1) ||\n (!isFixed && idx === safeDoses.length - 1) ? (\n <Typography\n variant=\"body2\"\n sx={{ color: \"#717171\", pl: 1 }}\n >\n N.A.\n </Typography>\n ) : (\n <>\n <TextField\n size=\"small\"\n type=\"number\"\n value={String(dose?.interval ?? 0)}\n inputProps={{ min: 0 }}\n onChange={(e) =>\n handleFieldChange(idx, \"interval\", e.target.value)\n }\n className=\"dose-input\"\n error={!!intervalError}\n />\n {intervalError && (\n <Box className=\"error-msg\">\n <FontAwesomeIcon icon={faExclamationCircle} />\n {intervalError}\n </Box>\n )}\n </>\n )}\n </TableCell>\n {!isFixed && (\n <TableCell sx={{ px: 2.5 }}>\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 0.75,\n minWidth: 0,\n }}\n >\n <Switch\n size=\"small\"\n checked={!!dose?.isBooster}\n onChange={(e) =>\n handleFieldChange(\n idx,\n \"isBooster\",\n e.target.checked,\n )\n }\n />\n {dose?.isBooster && (\n <Tooltip\n title=\"Add booster alias\"\n arrow\n placement=\"top\"\n >\n <IconButton\n size=\"small\"\n sx={{\n width: 20,\n height: 20,\n bgcolor: dose?.alias ? \"#e8f5ee\" : \"#f5f7fa\",\n color: dose?.alias ? \"#11b666\" : \"#657584\",\n border: \"1px solid\",\n borderColor: dose?.alias ? \"#b7e4cb\" : \"#d9e0e7\",\n boxShadow: \"0 1px 2px rgba(57, 77, 97, 0.12)\",\n \"&:hover\": {\n bgcolor: dose?.alias ? \"#d9efe4\" : \"#edf1f5\",\n },\n }}\n onClick={(event) =>\n setBoosterAliasModal({\n open: true,\n index: idx,\n value: dose?.alias || \"\",\n anchorEl: event.currentTarget,\n })\n }\n >\n <FontAwesomeIcon icon={faPlus} fontSize={9} />\n </IconButton>\n </Tooltip>\n )}\n </Box>\n {externalErrors.isBooster && (\n <Box className=\"error-msg\">\n <FontAwesomeIcon icon={faExclamationCircle} />\n {externalErrors.isBooster}\n </Box>\n )}\n </TableCell>\n )}\n {!isFixed && (\n <TableCell sx={{ px: 2.5, textAlign: \"center\" }}>\n <IconButton\n size=\"small\"\n color=\"error\"\n onClick={() =>\n setDeleteConfirmModal({ open: true, index: idx })\n }\n >\n <FontAwesomeIcon icon={faTrash} />\n </IconButton>\n </TableCell>\n )}\n </TableRow>\n );\n })\n ) : (\n <TableRow>\n <TableCell\n colSpan={isFixed ? 4 : 6}\n align=\"center\"\n sx={{ py: 3 }}\n >\n <Typography variant=\"body2\" sx={{ color: \"#717171\" }}>\n {doseCount === 0\n ? \"Please select number of doses to configure details.\"\n : \"No doses configured for this vaccine.\"}\n </Typography>\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </TableContainer>\n\n <Popover\n open={boosterAliasModal.open}\n anchorEl={boosterAliasModal.anchorEl}\n onClose={() =>\n setBoosterAliasModal({\n open: false,\n index: null,\n value: \"\",\n anchorEl: null,\n })\n }\n anchorOrigin={{\n vertical: \"bottom\",\n horizontal: \"center\",\n }}\n transformOrigin={{\n vertical: \"top\",\n horizontal: \"center\",\n }}\n PaperProps={{\n sx: {\n borderRadius: \"12px\",\n p: 1.5,\n width: 260,\n boxShadow: \"0 10px 24px rgba(57, 77, 97, 0.16)\",\n border: \"1px solid #e6ebf0\",\n mt: 0.5,\n },\n }}\n >\n <Typography\n sx={{ fontWeight: 800, color: \"#1a1a1a\", fontSize: \"13px\", mb: 1 }}\n >\n Booster Alias\n </Typography>\n <Box>\n <Typography sx={{ color: \"#717171\", mb: 1.25, fontSize: \"12px\" }}>\n Add an alias for this booster dose.\n </Typography>\n <TextField\n autoFocus\n fullWidth\n size=\"small\"\n label=\"Alias\"\n value={boosterAliasModal.value}\n onChange={(e) =>\n setBoosterAliasModal((prev) => ({\n ...prev,\n value: e.target.value,\n }))\n }\n />\n </Box>\n <Box sx={{ display: \"flex\", justifyContent: \"flex-end\", gap: 1, mt: 1.5 }}>\n <Button\n onClick={() =>\n setBoosterAliasModal({\n open: false,\n index: null,\n value: \"\",\n anchorEl: null,\n })\n }\n sx={{ color: \"#717171\", fontWeight: 700, minWidth: 0, px: 1 }}\n >\n CANCEL\n </Button>\n <Button\n variant=\"contained\"\n onClick={handleSaveBoosterAlias}\n sx={{\n fontWeight: 700,\n borderRadius: \"8px\",\n bgcolor: \"#11b666\",\n minWidth: 0,\n px: 1.5,\n }}\n >\n SAVE\n </Button>\n </Box>\n </Popover>\n\n <Dialog\n open={deleteConfirmModal.open}\n onClose={() => setDeleteConfirmModal({ open: false, index: null })}\n PaperProps={{\n sx: { borderRadius: \"12px\", padding: \"8px\" },\n }}\n >\n <DialogTitle sx={{ fontWeight: 800, color: \"#1a1a1a\" }}>\n Delete Dose?\n </DialogTitle>\n <DialogContent>\n <Typography sx={{ color: \"#717171\", mb: 2, fontSize: \"14px\" }}>\n Are you sure you want to remove this dosage configuration?\n </Typography>\n </DialogContent>\n <DialogActions sx={{ p: 2 }}>\n <Button\n onClick={() => setDeleteConfirmModal({ open: false, index: null })}\n sx={{ color: \"#717171\", fontWeight: 700 }}\n >\n CANCEL\n </Button>\n <Button\n variant=\"contained\"\n color=\"error\"\n onClick={confirmDeleteDose}\n sx={{ fontWeight: 700, borderRadius: \"8px\", bgcolor: \"#f44336\" }}\n >\n CONFIRM DELETE\n </Button>\n </DialogActions>\n </Dialog>\n </Box>\n );\n};\n\nDoseDetailsTable.propTypes = {\n doses: PropTypes.oneOfType([\n PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n isBooster: PropTypes.bool,\n eligibleFrom: PropTypes.string,\n eligibleTo: PropTypes.string,\n interval: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n alias: PropTypes.string,\n error: PropTypes.string,\n }),\n ),\n PropTypes.shape({\n id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n isBooster: PropTypes.bool,\n eligibleFrom: PropTypes.string,\n eligibleTo: PropTypes.string,\n interval: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n alias: PropTypes.string,\n error: PropTypes.string,\n }),\n ]),\n doseType: PropTypes.string,\n doseCount: PropTypes.number,\n onUpdate: PropTypes.func.isRequired,\n onDoseTypeChange: PropTypes.func.isRequired,\n errors: PropTypes.array,\n};\n\nexport default DoseDetailsTable;\n","import { api } from '@/common/interceptors/AxiosInterceptor';\nimport { showToast } from '@/common/toaster/toaster';\n\nexport const retrieveNextLevel = async (locationIds, level, fetchAccordingToUserAOI, languagePreference) => {\n const ids = Array.isArray(locationIds) ? locationIds : [locationIds];\n\n const params = {\n level,\n fetchAccordingToUserAOI,\n languagePreference,\n };\n if (ids.length) {\n params.locationIds = ids.join(',');\n params.locationId = ids[0];\n }\n try {\n const res = await api.get('/location/hierarchy', { params, showLoader: false });\n return res.data;\n } catch (error) {\n console.error(error);\n showToast({ type: 'error', message: 'Can not fetch next level locations' });\n }\n};\n\nexport const getParent = async (locationId, languagePreference) => {\n try {\n const res = await api.get('/location/parent', {\n params: { languagePreference, locationId },\n showLoader: false,\n });\n return res.data;\n } catch (error) {\n console.error(error);\n showToast({ type: 'error', message: 'Can not fetch parent details' });\n }\n};\n\nexport const createOrUpdate = async (location) => {\n try {\n await api.post('/location', location);\n } catch (error) {\n showToast({ type: '' });\n throw new Error(error.message);\n }\n};\n\nexport const retrieveNextLevelOfGivenLocationId = async (locationId) => {\n try {\n const res = await api.get('/location/childlocations', { params: { locationId } });\n return res.data;\n } catch (error) {\n throw new Error(error.message);\n }\n};\n\nexport const retrieveById = async (locationId) => {\n try {\n const res = await api.get('/location/byid', { params: { location_id: locationId } });\n return res.data;\n } catch (error) {\n throw new Error(error.message);\n }\n};\n\nexport const retrieveLocationByRoleId = (roleId) => api.get('/location/byroleid', { params: { role_id: roleId } });\n","import { api } from '@/common/interceptors/AxiosInterceptor';\n\nexport const retriveLocationType = (params, config) => api.get('/location/locationtypes', { params, ...config });\n\nexport const createLocationType = (data) => api.post('/resource/getdata/create_location_type', data);\n\nexport const getLocationTypeById = (data) => api.post('/resource/getdata/retrieve_location_type_by_id', data);\n\nexport const updateLocationType = (data) => api.post('/resource/getdata/update_location_type', data);\n\nexport const toggleLocationTypeStatus = (data) => api.post('/resource/getdata/toggle_location_type_status', data);\n","import React, { useState, useRef } from \"react\";\nimport {\n Box,\n Typography,\n IconButton,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n Select,\n MenuItem,\n CircularProgress,\n} from \"@mui/material\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport PropTypes from \"prop-types\";\nimport { faEdit, faTrash, faTimes } from \"@fortawesome/free-solid-svg-icons\";\nimport { useSelector } from \"react-redux\";\nimport { retrieveNextLevel } from \"../../../../../app-shell/src/common/services/LocationService\";\nimport { retriveLocationType } from \"../../../../../app-shell/src/common/services/LocationType\";\n\nconst GeographicalApplicability = ({ regions = [], onUpdate }) => {\n const { userWithToken: loggedInUser } = useSelector(\n (state) => state.Authenticate,\n );\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [loading, setLoading] = useState(false);\n const [loadingLevels, setLoadingLevels] = useState({});\n\n const [activeLevels, setActiveLevels] = useState([]);\n const [levelOptions, setLevelOptions] = useState({});\n const [selections, setSelections] = useState({});\n const [editingId, setEditingId] = useState(null);\n\n const fetchingRef = useRef(false);\n\n const hydrateOptions = async (selectionMap, levels = activeLevels) => {\n if (!selectionMap || !levels || levels.length === 0) return;\n for (let i = 0; i < levels.length - 1; i++) {\n const currentType = levels[i];\n if (!currentType) continue;\n const currentKey = String(currentType.id || currentType.name);\n const selectedId = selectionMap[currentKey]?.id;\n\n if (selectedId) {\n const nextType = levels[i + 1];\n const nextKey = String(nextType.id || nextType.name);\n await fetchLevelData(selectedId, nextType.level, nextKey);\n } else {\n break;\n }\n }\n };\n\n const fetchMetadata = async (initialSelectionMap = null) => {\n if (fetchingRef.current) return;\n fetchingRef.current = true;\n setLoading(true);\n try {\n const resp = await retriveLocationType({}, { showLoader: false });\n if (resp?.data) {\n const sorted = resp.data\n .filter((l) => l.isActive)\n .sort((a, b) => a.level - b.level);\n\n const groupedMap = new Map();\n sorted.forEach((l) => {\n if (!groupedMap.has(l.level)) {\n groupedMap.set(l.level, {\n id: String(l.id || l.name),\n level: l.level,\n name: l.name,\n types: [l],\n });\n } else {\n const group = groupedMap.get(l.level);\n group.id += \"_\" + String(l.id || l.name);\n group.name += \" / \" + l.name;\n group.types.push(l);\n }\n });\n const groupedLevelsList = Array.from(groupedMap.values());\n setActiveLevels(groupedLevelsList);\n\n const initSels = {};\n const initOpts = {};\n groupedLevelsList.forEach((l) => {\n const key = String(l.id);\n initSels[key] = { id: \"\", name: \"\" };\n initOpts[key] = [];\n });\n\n if (groupedLevelsList.length > 0) {\n const lang = loggedInUser?.languagePreference || \"en\";\n const firstLevelNum = groupedLevelsList[0].level;\n const firstLevelResp = await retrieveNextLevel(\n [],\n firstLevelNum,\n false,\n lang,\n );\n\n if (firstLevelResp && Array.isArray(firstLevelResp)) {\n firstLevelResp.forEach((cluster) => {\n const clusterLevel = cluster.level;\n const matchingGroup = groupedLevelsList.find(\n (t) => t.level === clusterLevel,\n );\n\n if (matchingGroup) {\n const key = String(matchingGroup.id);\n const newOpts = (cluster.locationDetails || [])\n .filter((loc) => loc.id && loc.name)\n .map((loc) => ({ id: String(loc.id), name: loc.name }));\n\n initOpts[key] = [...(initOpts[key] || []), ...newOpts];\n }\n });\n }\n }\n\n if (initialSelectionMap) {\n setSelections(initialSelectionMap);\n setLevelOptions(initOpts);\n await hydrateOptions(initialSelectionMap, groupedLevelsList);\n } else {\n setSelections(initSels);\n setLevelOptions(initOpts);\n }\n }\n } catch (err) {\n console.error(\"GeographicalApplicability: Metadata fetch failed\", err);\n } finally {\n setLoading(false);\n fetchingRef.current = false;\n }\n };\n\n const fetchLevelData = async (parentId, targetLevelNum, targetTypeKey) => {\n try {\n setLoadingLevels((prev) => ({ ...prev, [targetTypeKey]: true }));\n const lang = loggedInUser?.languagePreference || \"en\";\n const locationIds = parentId ? [parentId] : [];\n const response = await retrieveNextLevel(\n locationIds,\n targetLevelNum,\n false,\n lang,\n );\n\n if (response && Array.isArray(response)) {\n setLevelOptions((prev) => {\n const next = { ...prev };\n next[targetTypeKey] = [];\n response.forEach((cluster) => {\n const clusterLevel = cluster.level;\n\n const matchingGroup = activeLevels.find(\n (t) => t.level === clusterLevel,\n );\n\n if (matchingGroup && String(matchingGroup.id) === targetTypeKey) {\n const key = String(matchingGroup.id);\n const newOpts = (cluster.locationDetails || [])\n .filter((loc) => loc.id && loc.name)\n .map((loc) => ({ id: String(loc.id), name: loc.name }));\n next[key] = [...(next[key] || []), ...newOpts];\n }\n });\n return next;\n });\n }\n } catch (error) {\n console.error(`Error fetching level ${targetLevelNum}:`, error);\n } finally {\n setLoadingLevels((prev) => ({ ...prev, [targetTypeKey]: false }));\n }\n };\n\n const scrollRef = useRef(null);\n\n React.useEffect(() => {\n if (isModalOpen && scrollRef.current) {\n setTimeout(() => {\n scrollRef.current.scrollTo({\n top: scrollRef.current.scrollHeight,\n behavior: \"smooth\",\n });\n }, 100);\n }\n }, [selections, isModalOpen]);\n\n const reconstructFromIds = async (locationIdArr) => {\n if (!locationIdArr || locationIdArr.length === 0) return;\n setLoading(true);\n try {\n let levels = activeLevels;\n let currentOpts = { ...levelOptions };\n\n if (levels.length === 0) {\n const resp = await retriveLocationType({}, { showLoader: false });\n if (resp?.data) {\n const sorted = resp.data\n .filter((l) => l.isActive)\n .sort((a, b) => a.level - b.level);\n\n const groupedMap = new Map();\n sorted.forEach((l) => {\n if (!groupedMap.has(l.level)) {\n groupedMap.set(l.level, {\n id: String(l.id || l.name),\n level: l.level,\n name: l.name,\n types: [l],\n });\n } else {\n const group = groupedMap.get(l.level);\n group.id += \"_\" + String(l.id || l.name);\n group.name += \" / \" + l.name;\n group.types.push(l);\n }\n });\n levels = Array.from(groupedMap.values());\n setActiveLevels(levels);\n }\n }\n\n if (levels.length === 0) {\n setLoading(false);\n return;\n }\n\n const newSels = {};\n let parentId = null;\n const lang = loggedInUser?.languagePreference || \"en\";\n\n for (let i = 0; i < locationIdArr.length; i++) {\n const targetId = String(locationIdArr[i]);\n const currentType = levels[i];\n if (!currentType) break;\n\n const key = String(currentType.id || currentType.name);\n const targetLevelNum = currentType.level;\n const locationIds = parentId ? [parentId] : [];\n\n const response = await retrieveNextLevel(\n locationIds,\n targetLevelNum,\n false,\n lang,\n );\n\n if (response && Array.isArray(response)) {\n let clusterOptions = [];\n response.forEach((cluster) => {\n const clusterLevel = cluster.level;\n const matchingGroup = levels.find((t) => t.level === clusterLevel);\n\n if (matchingGroup && String(matchingGroup.id) === key) {\n const newOpts = (cluster.locationDetails || [])\n .filter((loc) => loc.id && loc.name)\n .map((loc) => ({ id: String(loc.id), name: loc.name }));\n clusterOptions = [...clusterOptions, ...newOpts];\n }\n });\n\n currentOpts[key] = clusterOptions;\n const matchedOpt = clusterOptions.find(\n (o) => String(o.id) === targetId,\n );\n if (matchedOpt) {\n newSels[key] = { id: matchedOpt.id, name: matchedOpt.name };\n parentId = matchedOpt.id;\n } else {\n break;\n }\n } else {\n break;\n }\n }\n\n levels.forEach((l) => {\n const k = String(l.id || l.name);\n if (!newSels[k]) newSels[k] = { id: \"\", name: \"\" };\n if (!currentOpts[k]) currentOpts[k] = [];\n });\n\n setLevelOptions(currentOpts);\n setSelections(newSels);\n } catch (err) {\n console.error(\"Error reconstructing from IDs:\", err);\n } finally {\n setLoading(false);\n }\n };\n\n const handleOpen = (region = null) => {\n setIsModalOpen(true);\n if (region) {\n setEditingId(region.id);\n if (region.selectionMap && Object.keys(region.selectionMap).length > 0) {\n if (activeLevels.length === 0) {\n fetchMetadata(region.selectionMap);\n } else {\n setSelections(region.selectionMap);\n hydrateOptions(region.selectionMap);\n }\n } else if (region.locationIdArr) {\n reconstructFromIds(region.locationIdArr);\n }\n } else {\n setEditingId(null);\n if (activeLevels.length === 0) {\n fetchMetadata();\n } else {\n const initSels = {};\n activeLevels.forEach((l) => {\n initSels[String(l.id || l.name)] = { id: \"\", name: \"\" };\n });\n setSelections(initSels);\n }\n }\n };\n\n const handleClose = () => {\n setIsModalOpen(false);\n setEditingId(null);\n setSelections((prev) => {\n const reset = { ...prev };\n activeLevels.forEach((l) => {\n reset[String(l.id || l.name)] = { id: \"\", name: \"\" };\n });\n return reset;\n });\n };\n\n const handleAddLocation = () => {\n const activeLevelKeys = activeLevels.map((l) => String(l.id || l.name));\n const selectedEntries = activeLevelKeys\n .map((key) => selections[key])\n .filter((sel) => sel?.id && sel?.name);\n\n if (selectedEntries.length === 0) return;\n\n const locationId = Number.parseInt(selectedEntries.at(-1).id);\n const locationIdArr = selectedEntries.map((sel) =>\n Number.parseInt(sel.id, 10),\n );\n const locationList = selectedEntries.map((sel) => sel.name).join(\" => \");\n const fullPath = selectedEntries.map((sel) => sel.name).join(\" → \");\n\n const isRelated = (p1, p2) =>\n p1 === p2 || p1.startsWith(p2 + \" → \") || p2.startsWith(p1 + \" → \");\n\n const filteredRegions = regions.filter(\n (r) => r.id !== editingId && !isRelated(r.fullPath, fullPath),\n );\n\n const newRegion = {\n id: editingId || Date.now(),\n locationId: locationId,\n locationIdArr: locationIdArr,\n locationList: locationList,\n fullPath: fullPath,\n selectionMap: { ...selections },\n };\n\n onUpdate([...filteredRegions, newRegion]);\n handleClose();\n };\n\n const handleChange = (typeObj) => async (e) => {\n const typeId = String(typeObj.id || typeObj.name);\n const selectedId = String(e.target.value);\n\n if (!selectedId) return;\n\n const currentOptions = levelOptions[typeId] || [];\n const selectedOption = currentOptions.find(\n (opt) => String(opt.id) === selectedId,\n );\n\n setSelections((prev) => {\n const next = { ...prev };\n next[typeId] = { id: selectedId, name: selectedOption?.name || \"\" };\n\n const currentIndex = activeLevels.findIndex(\n (l) => String(l.id || l.name) === typeId,\n );\n for (let i = currentIndex + 1; i < activeLevels.length; i++) {\n const childKey = String(activeLevels[i].id || activeLevels[i].name);\n next[childKey] = { id: \"\", name: \"\" };\n }\n return next;\n });\n\n const currentIndex = activeLevels.findIndex(\n (l) => String(l.id || l.name) === typeId,\n );\n if (currentIndex + 1 < activeLevels.length) {\n const nextType = activeLevels[currentIndex + 1];\n const nextKey = String(nextType.id || nextType.name);\n\n setLevelOptions((prev) => {\n const nextOpts = { ...prev };\n for (let i = currentIndex + 1; i < activeLevels.length; i++) {\n nextOpts[String(activeLevels[i].id || activeLevels[i].name)] = [];\n }\n return nextOpts;\n });\n\n fetchLevelData(selectedId, nextType.level, nextKey);\n }\n };\n\n const renderDropdown = (levelObj, index) => {\n const typeId = String(levelObj.id || levelObj.name);\n const label = `Select ${levelObj.name}`;\n\n const isVisible =\n index === 0 ||\n (activeLevels &&\n activeLevels[index - 1] &&\n selections &&\n !!selections[\n String(activeLevels[index - 1].id || activeLevels[index - 1].name)\n ]?.id);\n\n if (!isVisible) return null;\n\n const isLoading = loadingLevels[typeId] || (index === 0 && loading);\n const options = levelOptions[typeId] || [];\n\n return (\n <Box sx={{ mb: 1.5 }} key={typeId}>\n <Typography\n variant=\"caption\"\n sx={{\n fontWeight: 600,\n mb: 0.5,\n display: \"flex\",\n alignItems: \"center\",\n gap: 1,\n color: \"#333\",\n }}\n >\n {label} {index === 0 && <span style={{ color: \"red\" }}>*</span>}\n {isLoading && <CircularProgress size={12} />}\n </Typography>\n <Select\n size=\"small\"\n fullWidth\n value={selections[typeId]?.id || \"\"}\n onChange={handleChange(levelObj)}\n displayEmpty\n disabled={isLoading}\n sx={{\n borderRadius: \"6px\",\n bgcolor: \"#fff\",\n \"& .MuiSelect-select\": { py: 0.75 },\n }}\n >\n <MenuItem value=\"\" disabled>\n {label}\n </MenuItem>\n {options.map((opt) => (\n <MenuItem key={opt.id} value={String(opt.id)}>\n {opt.name}\n </MenuItem>\n ))}\n </Select>\n </Box>\n );\n };\n\n return (\n <Box className=\"region-section\">\n <Box className=\"side-card\">\n <Box className=\"card-header\">\n <Typography\n className=\"section-label\"\n sx={{\n color: \"#394d61\",\n fontWeight: 800,\n fontSize: \"11px\",\n textTransform: \"uppercase\",\n }}\n >\n GEOGRAPHICAL APPLICABILITY\n </Typography>\n <Typography\n className=\"add-link\"\n onClick={() => handleOpen()}\n sx={{ cursor: \"pointer\" }}\n >\n + ADD REGION\n </Typography>\n </Box>\n {regions.map((region, idx) => (\n <Box key={region.id || idx} className=\"region-item\">\n <Typography className=\"region-path\">{region.fullPath}</Typography>\n <Box className=\"region-actions\">\n <IconButton\n size=\"small\"\n color=\"inherit\"\n onClick={() => handleOpen(region)}\n >\n <FontAwesomeIcon icon={faEdit} />\n </IconButton>\n <IconButton\n className=\"delete\"\n size=\"small\"\n onClick={() => onUpdate(regions.filter((_, i) => i !== idx))}\n >\n <FontAwesomeIcon icon={faTrash} />\n </IconButton>\n </Box>\n </Box>\n ))}\n {regions.length === 0 && (\n <Box\n className=\"dependency-hint\"\n sx={{\n p: 2,\n textAlign: \"center\",\n border: \"1px dashed #e0e0e0\",\n borderRadius: \"8px\",\n color: \"#9e9e9e\",\n }}\n >\n Click &quot;+ ADD REGION&quot; to add GEOGRAPHICAL APPLICABILITY.\n </Box>\n )}\n </Box>\n\n <Dialog\n open={isModalOpen}\n onClose={handleClose}\n fullWidth\n maxWidth=\"sm\"\n PaperProps={{\n sx: { borderRadius: \"10px\" },\n }}\n >\n <DialogTitle\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n borderBottom: \"1px solid #eee\",\n mb: 0.5,\n py: 1.5,\n }}\n >\n <Typography sx={{ fontWeight: 700, fontSize: \"15px\" }}>\n {editingId\n ? \"Edit Geographical Location\"\n : \"Add Geographical Location\"}\n </Typography>\n <IconButton onClick={handleClose} size=\"small\">\n <FontAwesomeIcon icon={faTimes} />\n </IconButton>\n </DialogTitle>\n <DialogContent ref={scrollRef} sx={{ mt: 0.5, py: 1 }}>\n {activeLevels.map((level, idx) => renderDropdown(level, idx))}\n {loading && activeLevels.length === 0 && (\n <Box sx={{ display: \"flex\", justifyContent: \"center\", p: 3 }}>\n <CircularProgress size={24} />\n </Box>\n )}\n </DialogContent>\n <DialogActions sx={{ p: 2, pt: 0.5 }}>\n <Button\n variant=\"contained\"\n fullWidth\n onClick={handleAddLocation}\n disabled={\n !activeLevels.length ||\n !selections[String(activeLevels[0].id || activeLevels[0].name)]\n ?.id\n }\n sx={{\n bgcolor: \"#4c5e70\",\n textTransform: \"none\",\n fontWeight: 700,\n borderRadius: \"20px\",\n py: 0.75,\n fontSize: \"13px\",\n \"&:hover\": { bgcolor: \"#394d61\" },\n }}\n >\n {editingId ? \"UPDATE LOCATION\" : \"ADD LOCATION\"}\n </Button>\n </DialogActions>\n </Dialog>\n </Box>\n );\n};\n\nGeographicalApplicability.propTypes = {\n regions: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n fullPath: PropTypes.string,\n locationId: PropTypes.number,\n locationIdArr: PropTypes.arrayOf(PropTypes.number),\n locationList: PropTypes.string,\n }),\n ),\n onUpdate: PropTypes.func.isRequired,\n};\n\nexport default GeographicalApplicability;\n","import {\n Box,\n Typography,\n Select,\n MenuItem,\n IconButton,\n TextField,\n} from \"@mui/material\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faTrash } from \"@fortawesome/free-solid-svg-icons\";\nimport PropTypes from \"prop-types\";\n\nconst VaccineDependencies = ({\n dependencies = [],\n onUpdate,\n vaccineOptions = [],\n errors = [],\n}) => {\n const handleAddField = () => {\n const newDep = {\n id: Date.now(),\n vaccine: \"\",\n requirement: \"Should be given\",\n minGap: 0,\n maxGap: 0,\n };\n onUpdate([...dependencies, newDep]);\n };\n\n const handleDelete = (idx) => {\n onUpdate(dependencies.filter((_, i) => i !== idx));\n };\n\n const handleInputChange = (idx, field, value) => {\n const updated = dependencies.map((dep, i) => {\n if (i === idx) {\n if (field === \"requirement\") {\n return { ...dep, [field]: value, minGap: 0, maxGap: 0 };\n }\n return { ...dep, [field]: value };\n }\n return dep;\n });\n onUpdate(updated);\n };\n\n return (\n <Box className=\"dependency-section\">\n <Box className=\"side-card dependency-item\" sx={{ overflow: \"visible\" }}>\n <Box className=\"card-header\">\n <Typography\n className=\"section-label\"\n sx={{\n color: \"#394d61\",\n fontWeight: 800,\n fontSize: \"11px\",\n textTransform: \"uppercase\",\n }}\n >\n VACCINE DEPENDENCIES\n </Typography>\n <Typography\n className=\"add-link\"\n onClick={handleAddField}\n sx={{ cursor: \"pointer\" }}\n >\n + ADD DEPENDENCY\n </Typography>\n </Box>\n\n {dependencies.map((dep, idx) => {\n const depErrors = (Array.isArray(errors) ? errors[idx] : {}) || {};\n return (\n <Box\n key={dep.id || idx}\n sx={{\n mb: 2,\n pb: 1.5,\n borderBottom: \"1px solid #f0f0f0\",\n \"&:last-child\": { borderBottom: \"none\", mb: 0, pb: 0 },\n }}\n >\n <Box\n sx={{\n display: \"flex\",\n gap: 1.25,\n alignItems: \"flex-start\",\n mb: 1.25,\n flexWrap: \"wrap\",\n }}\n >\n <Box sx={{ flex: 1.5 }}>\n <Typography\n variant=\"caption\"\n sx={{\n fontWeight: 700,\n mb: 0.5,\n display: \"block\",\n color: \"#394d61\",\n fontSize: \"12px\",\n }}\n >\n Select Vaccines\n </Typography>\n <Select\n size=\"small\"\n fullWidth\n value={dep.vaccine}\n onChange={(e) =>\n handleInputChange(idx, \"vaccine\", e.target.value)\n }\n displayEmpty\n sx={{ borderRadius: \"6px\", bgcolor: \"#fff\" }}\n >\n <MenuItem value=\"\" disabled>\n Select some options\n </MenuItem>\n {vaccineOptions.map((v) => (\n <MenuItem key={v.id} value={v.vaccine_code}>\n {v.name}\n </MenuItem>\n ))}\n </Select>\n {depErrors.vaccine && (\n <Typography\n variant=\"caption\"\n sx={{ color: \"#d32f2f\", fontSize: \"0.75rem\", mt: 0.5 }}\n >\n {depErrors.vaccine}\n </Typography>\n )}\n </Box>\n\n <Box sx={{ flex: 1 }}>\n <Typography\n variant=\"caption\"\n sx={{\n fontWeight: 700,\n mb: 0.5,\n display: \"block\",\n color: \"#394d61\",\n fontSize: \"12px\",\n }}\n >\n Requirement\n </Typography>\n <Select\n size=\"small\"\n fullWidth\n value={dep.requirement}\n onChange={(e) =>\n handleInputChange(idx, \"requirement\", e.target.value)\n }\n sx={{ borderRadius: \"6px\", bgcolor: \"#fff\" }}\n >\n <MenuItem value=\"Should be given\">Should be given</MenuItem>\n <MenuItem value=\"Should not be given\">\n Should not be given\n </MenuItem>\n <MenuItem value=\"Optional\">Optional</MenuItem>\n </Select>\n </Box>\n\n {(dep.requirement === \"Should be given\" ||\n dep.requirement === \"Optional\") && (\n <>\n <Box sx={{ width: 100 }}>\n <Typography\n variant=\"caption\"\n sx={{\n fontWeight: 700,\n mb: 0.5,\n display: \"block\",\n color: \"#333\",\n fontSize: \"11px\",\n }}\n >\n Min Gap (In Days)\n </Typography>\n <TextField\n size=\"small\"\n type=\"number\"\n value={dep.minGap}\n onChange={(e) =>\n handleInputChange(idx, \"minGap\", e.target.value)\n }\n error={!!depErrors.minGap}\n helperText={depErrors.minGap}\n inputProps={{ min: 0 }}\n sx={{\n \"& .MuiOutlinedInput-root\": {\n borderRadius: \"6px\",\n bgcolor: \"#fff\",\n height: \"37px\",\n },\n \"& .MuiFormHelperText-root\": {\n position: \"absolute\",\n top: \"100%\",\n left: 0,\n width: \"220px\",\n wordWrap: \"break-word\",\n textAlign: \"left\",\n },\n }}\n />\n </Box>\n\n <Box sx={{ width: 100, position: \"relative\" }}>\n <Typography\n variant=\"caption\"\n sx={{\n fontWeight: 700,\n mb: 0.5,\n display: \"block\",\n color: \"#333\",\n fontSize: \"11px\",\n }}\n >\n Max Gap (In Days)\n </Typography>\n <TextField\n size=\"small\"\n type=\"number\"\n value={dep.maxGap}\n onChange={(e) =>\n handleInputChange(idx, \"maxGap\", e.target.value)\n }\n error={!!depErrors.maxGap}\n helperText={depErrors.maxGap}\n inputProps={{ min: 0 }}\n sx={{\n \"& .MuiOutlinedInput-root\": {\n borderRadius: \"6px\",\n bgcolor: \"#fff\",\n height: \"37px\",\n },\n \"& .MuiFormHelperText-root\": {\n position: \"absolute\",\n top: \"100%\",\n right: 0,\n width: \"220px\",\n wordWrap: \"break-word\",\n textAlign: \"right\",\n },\n }}\n />\n </Box>\n </>\n )}\n <IconButton\n color=\"error\"\n size=\"small\"\n sx={{\n mt: 3,\n \"&:hover\": { bgcolor: \"rgba(244, 67, 54, 0.08)\" },\n }}\n onClick={() => handleDelete(idx)}\n >\n <FontAwesomeIcon icon={faTrash} />\n </IconButton>\n </Box>\n </Box>\n );\n })}\n\n {dependencies.length === 0 && (\n <Box\n className=\"dependency-hint\"\n sx={{\n p: 2,\n textAlign: \"center\",\n border: \"1px dashed #e0e0e0\",\n borderRadius: \"8px\",\n color: \"#9e9e9e\",\n }}\n >\n Click &quot;+ ADD DEPENDENCY&quot; to add validations.\n </Box>\n )}\n </Box>\n </Box>\n );\n};\n\nVaccineDependencies.propTypes = {\n dependencies: PropTypes.array,\n onUpdate: PropTypes.func.isRequired,\n vaccineOptions: PropTypes.array,\n errors: PropTypes.array,\n};\n\nexport default VaccineDependencies;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport {\n Box,\n Select,\n MenuItem,\n Typography,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n} from \"@mui/material\";\n\nconst DoseSelector = ({\n vaccineId,\n currentDoses,\n currentDoseDetails,\n maxDoses,\n onChange,\n}) => {\n const [decreaseConfirmModal, setDecreaseConfirmModal] = React.useState({\n open: false,\n newCount: 0,\n dosesToDelete: [],\n });\n\n const handleDoseChange = (e) => {\n const newDoseCount = e.target.value;\n const isArray = Array.isArray(currentDoseDetails);\n\n if (!isArray) {\n onChange(vaccineId, newDoseCount, currentDoseDetails);\n return;\n }\n\n const updatedDoseDetails = [...(currentDoseDetails || [])];\n\n if (newDoseCount > updatedDoseDetails.length) {\n for (let i = updatedDoseDetails.length; i < newDoseCount; i++) {\n updatedDoseDetails.push({\n id: `new_${Date.now()}_${i}`,\n eligibleFrom: \"\",\n eligibleTo: \"\",\n interval: 0,\n });\n }\n onChange(vaccineId, newDoseCount, updatedDoseDetails);\n } else if (newDoseCount < updatedDoseDetails.length) {\n const dosesToDelete = updatedDoseDetails.slice(newDoseCount);\n setDecreaseConfirmModal({\n open: true,\n newCount: newDoseCount,\n dosesToDelete,\n });\n }\n };\n\n const confirmDoseDecrease = () => {\n const { newCount } = decreaseConfirmModal;\n const isArray = Array.isArray(currentDoseDetails);\n const updatedDoseDetails = isArray\n ? (currentDoseDetails || []).slice(0, newCount)\n : currentDoseDetails;\n\n onChange(vaccineId, newCount, updatedDoseDetails);\n setDecreaseConfirmModal({ open: false, newCount: 0, dosesToDelete: [] });\n };\n\n return (\n <>\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n <Select\n size=\"small\"\n value={currentDoses}\n onChange={handleDoseChange}\n sx={{ minWidth: 80, bgcolor: \"#fff\" }}\n MenuProps={{\n PaperProps: {\n style: {\n maxHeight: 150,\n },\n },\n }}\n >\n {[0, ...Array.from({ length: maxDoses }, (_, i) => i + 1)].map(\n (val) => (\n <MenuItem\n key={val}\n value={val}\n sx={val === 0 ? { display: \"none\" } : {}}\n >\n {val}\n </MenuItem>\n ),\n )}\n </Select>\n <span>Doses</span>\n </Box>\n\n <Dialog\n open={decreaseConfirmModal.open}\n onClose={() =>\n setDecreaseConfirmModal({ ...decreaseConfirmModal, open: false })\n }\n PaperProps={{\n sx: { borderRadius: \"12px\", padding: \"8px\" },\n }}\n >\n <DialogTitle sx={{ fontWeight: 800, color: \"#1a1a1a\" }}>\n Delete Dosages?\n </DialogTitle>\n <DialogContent>\n <Typography sx={{ color: \"#717171\", mb: 2, fontSize: \"14px\" }}>\n Reducing the number of doses will delete the following dosage\n configurations.\n </Typography>\n <Box\n sx={{\n bgcolor: \"#fff5f5\",\n border: \"1px solid #ffe3e3\",\n borderRadius: \"8px\",\n p: 1.5,\n }}\n >\n <Typography\n variant=\"caption\"\n sx={{\n color: \"#f44336\",\n fontWeight: 700,\n mb: 1,\n display: \"block\",\n }}\n >\n DOSAGES TO BE REMOVED:\n </Typography>\n {decreaseConfirmModal.dosesToDelete.map((dose, idx) => (\n <Typography\n key={dose.id}\n sx={{ fontSize: \"12px\", color: \"#1a1a1a\", fontWeight: 600 }}\n >\n • Dose {decreaseConfirmModal.newCount + idx + 1}:{\" \"}\n {dose.eligibleFrom || \"Not set\"} to{\" \"}\n {dose.eligibleTo || \"Not set\"}\n </Typography>\n ))}\n </Box>\n </DialogContent>\n <DialogActions sx={{ p: 2 }}>\n <Button\n onClick={() =>\n setDecreaseConfirmModal({ ...decreaseConfirmModal, open: false })\n }\n sx={{ color: \"#717171\", fontWeight: 700 }}\n >\n CANCEL\n </Button>\n <Button\n variant=\"contained\"\n color=\"error\"\n onClick={confirmDoseDecrease}\n sx={{ fontWeight: 700, borderRadius: \"8px\", bgcolor: \"#f44336\" }}\n >\n CONFIRM DELETE\n </Button>\n </DialogActions>\n </Dialog>\n </>\n );\n};\n\nDoseSelector.propTypes = {\n vaccineId: PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n .isRequired,\n currentDoses: PropTypes.number.isRequired,\n currentDoseDetails: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.object),\n PropTypes.object,\n ]),\n maxDoses: PropTypes.number.isRequired,\n onChange: PropTypes.func.isRequired,\n};\n\nexport default DoseSelector;\n","import {\n Box,\n Typography,\n TextField,\n InputAdornment,\n Autocomplete,\n Chip,\n Checkbox,\n} from \"@mui/material\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faFilter } from \"@fortawesome/free-solid-svg-icons\";\nimport { useSelector } from \"react-redux\";\nimport PropTypes from \"prop-types\";\n\nconst VaccineFilters = ({ filters = [], onUpdate }) => {\n const { filtersMaster = [] } = useSelector((state) => state.immunization);\n\n const activeFilters = filtersMaster.filter((f) => f.is_active);\n\n const selectedOptions = activeFilters.filter((f) =>\n filters.some(\n (code) => (typeof code === \"string\" ? code : code.code) === f.code,\n ),\n );\n\n const normalizedFilters = filters.map((f) =>\n typeof f === \"string\" ? f : f.code,\n );\n\n return (\n <Box sx={{ mb: 2 }}>\n <Typography\n variant=\"caption\"\n sx={{\n color: \"#394d61\",\n fontWeight: 800,\n fontSize: \"11px\",\n textTransform: \"uppercase\",\n display: \"block\",\n mb: \"6px\",\n }}\n >\n VACCINE FILTERS\n </Typography>\n\n <Autocomplete\n multiple\n options={activeFilters}\n disableCloseOnSelect\n getOptionLabel={(option) => option.name || option.code || \"\"}\n value={selectedOptions}\n onChange={(event, newValue) => {\n onUpdate(newValue.map((val) => val.code));\n }}\n renderOption={(props, option, { selected }) => (\n <li {...props} style={{ fontSize: \"13px\", padding: \"8px 12px\" }}>\n <Checkbox\n size=\"small\"\n style={{ marginRight: 8 }}\n checked={selected}\n sx={{\n p: 0,\n color: \"#cbd5e1\",\n \"&.Mui-checked\": { color: \"#394d61\" },\n }}\n />\n <Box>\n <Typography sx={{ fontSize: \"13px\", fontWeight: 600 }}>\n {option.name}\n </Typography>\n </Box>\n </li>\n )}\n renderInput={(params) => (\n <TextField\n {...params}\n size=\"small\"\n fullWidth\n placeholder={normalizedFilters.length === 0 ? \"Select Filters\" : \"\"}\n InputProps={{\n ...params.InputProps,\n startAdornment: (\n <>\n <InputAdornment position=\"start\" sx={{ pl: 1 }}>\n <FontAwesomeIcon\n icon={faFilter}\n style={{ color: \"#94a3b8\", fontSize: \"12px\" }}\n />\n </InputAdornment>\n {params.InputProps.startAdornment}\n </>\n ),\n }}\n sx={{\n \"& .MuiOutlinedInput-root\": {\n borderRadius: \"6px\",\n bgcolor: \"#fff\",\n \"& fieldset\": { borderColor: \"#e2e8f0\" },\n },\n }}\n />\n )}\n renderTags={(tagValue, getTagProps) =>\n tagValue.map((option, index) => (\n <Chip\n label={option.name}\n {...getTagProps({ index })}\n size=\"small\"\n key={option.code}\n sx={{\n height: 20,\n fontSize: \"10px\",\n backgroundColor: \"#e8edf2\",\n fontWeight: 600,\n borderRadius: \"4px\",\n }}\n />\n ))\n }\n />\n </Box>\n );\n};\n\nVaccineFilters.propTypes = {\n filters: PropTypes.array,\n onUpdate: PropTypes.func.isRequired,\n};\n\nexport default VaccineFilters;\n","import { calculateOverallEligibility } from \"../service\";\n\nexport const getInitialSummaryVaccineData = ({\n vaccineId,\n vaccines,\n scheduledVaccines,\n}) => {\n const base = vaccines.find((v) => v.id === vaccineId);\n const scheduled = scheduledVaccines.find((sv) => sv.id === vaccineId);\n const doseType = base?.doseType || \"FIXED\";\n\n const data = scheduled\n ? { ...scheduled }\n : {\n id: base?.id || vaccineId,\n name: base?.name || \"N.A.\",\n doses: base?.doses || 0,\n eligibility: base?.eligibility || \"N.A.\",\n doseDetails:\n doseType === \"FIXED\" && Array.isArray(base?.doseDetails)\n ? base.doseDetails[0] || {}\n : base?.doseDetails || (doseType === \"FIXED\" ? {} : []),\n regions: base?.regions || [],\n dependencies: base?.dependencies || [],\n isActive: base?.isActive !== undefined ? base.isActive : true,\n doseType,\n baseDateCode: base?.baseDateCode || null,\n recipientType: base?.recipientType || \"\",\n filters: base?.filters || [],\n filterMessage: base?.filterMessage || \"\",\n };\n\n return {\n ...data,\n eligibility: calculateOverallEligibility(\n data?.doseDetails,\n data?.doseType,\n data?.doses,\n ),\n };\n};\n\nexport const buildDisplayVaccines = ({\n vaccines,\n editedVaccines,\n scheduledVaccines,\n showInactive,\n}) =>\n vaccines\n .map((v) =>\n editedVaccines[v.id] ||\n getInitialSummaryVaccineData({\n vaccineId: v.id,\n vaccines,\n scheduledVaccines,\n }),\n )\n .filter((v) => (showInactive ? true : v.isActive))\n .sort((a, b) => Number(b.isActive) - Number(a.isActive));\n\nexport const getAllowedBaseDateCodesForRecipient = (\n recipientMaster,\n recipientType,\n) => {\n const selectedRecipient = recipientMaster.find(\n (recipient) => recipient.code === recipientType,\n );\n const config = selectedRecipient?.config;\n if (!config) return [];\n if (typeof config === \"object\") {\n return config.allowedBaseDates || [];\n }\n try {\n return JSON.parse(config).allowedBaseDates || [];\n } catch {\n return [];\n }\n};\n","export const getDays = (val) => {\n if (!val) return 0;\n if (typeof val === \"string\" && val.toLowerCase() === \"birth\") return 0;\n return Number.parseInt(val) || 0;\n};\n\nexport const validateDoseDetails = (doseDetails, doseType, doseCount) => {\n if (doseCount === 0) return null;\n const errors = [];\n const details = Array.isArray(doseDetails) ? doseDetails : [doseDetails];\n\n details.forEach((dose, idx) => {\n const doseErrors = {};\n const startInDays = getDays(dose.eligibleFrom);\n const endInDays = getDays(dose.eligibleTo);\n\n if (\n (dose.eligibleFrom === undefined ||\n dose.eligibleFrom === null ||\n dose.eligibleFrom === \"\") &&\n idx !== 0\n ) {\n doseErrors.eligibleFrom = \"Eligible From is required\";\n }\n\n if (\n dose.eligibleTo === undefined ||\n dose.eligibleTo === null ||\n dose.eligibleTo === \"\" ||\n getDays(dose.eligibleTo) === 0\n ) {\n doseErrors.eligibleTo = \"Eligible To is required\";\n }\n\n const isLastFlexibleRow =\n doseType === \"FLEXIBLE\" && idx === details.length - 1;\n\n const isIntervalRequired =\n (doseType === \"FIXED\" && doseCount > 1) ||\n (!isLastFlexibleRow && doseType === \"FLEXIBLE\");\n\n if (isIntervalRequired) {\n const intervalVal = Number.parseInt(dose.interval) || 0;\n if (\n dose.interval === undefined ||\n dose.interval === null ||\n dose.interval === \"\" ||\n intervalVal === 0 ||\n dose.interval === \"0 days\"\n ) {\n doseErrors.interval = \"Interval is required\";\n } else if (\n doseType === \"FIXED\" &&\n doseCount > 1 &&\n (doseCount - 1) * intervalVal > endInDays - startInDays\n ) {\n doseErrors.interval = `Number of doses not possible in the window. Total interval exceeds available window (${endInDays - startInDays} days).`;\n }\n }\n\n if (endInDays <= startInDays && dose.eligibleFrom && dose.eligibleTo) {\n doseErrors.eligibleTo = \"Must be strictly greater than ELIGIBLE FROM\";\n }\n\n if (idx > 0 && doseType === \"FLEXIBLE\") {\n const prevStartInDays = getDays(details[idx - 1].eligibleFrom);\n const prevIntervalDays = Number.parseInt(details[idx - 1].interval) || 0;\n if (startInDays < prevStartInDays + prevIntervalDays) {\n doseErrors.eligibleFrom =\n \"Must be greater than previous ELIGIBLE FROM and INTERVAL\";\n }\n\n if (details[idx - 1].isBooster && !dose.isBooster) {\n doseErrors.isBooster = \"A regular dose cannot follow a booster dose\";\n }\n }\n\n if (Object.keys(doseErrors).length > 0) {\n errors[idx] = doseErrors;\n }\n });\n\n return errors.length > 0 ? errors : null;\n};\n\nexport const validateDependencies = (dependencies) => {\n const errors = [];\n const seenVaccines = new Set();\n\n dependencies.forEach((dep, idx) => {\n const depErrors = {};\n if (!dep.vaccine) {\n depErrors.vaccine = \"Vaccine selection is required\";\n } else {\n if (seenVaccines.has(dep.vaccine)) {\n depErrors.vaccine = \"This vaccine is already added as a dependency\";\n }\n seenVaccines.add(dep.vaccine);\n }\n\n const isMinEmpty =\n dep.minGap === \"\" || dep.minGap === null || dep.minGap === undefined;\n const isMaxEmpty =\n dep.maxGap === \"\" || dep.maxGap === null || dep.maxGap === undefined;\n\n const minGap = getDays(dep.minGap);\n const maxGap = getDays(dep.maxGap);\n\n if (\n dep.requirement === \"Should be given\" ||\n dep.requirement === \"Optional\"\n ) {\n if (isMinEmpty) {\n depErrors.minGap = \"Gap cannot be empty\";\n } else if (minGap <= 0) {\n depErrors.minGap = \"Must be greater than 0\";\n }\n\n if (isMaxEmpty) {\n depErrors.maxGap = \"Gap cannot be empty\";\n } else if (maxGap <= 0) {\n depErrors.maxGap = \"Must be greater than 0\";\n }\n\n if (\n !isMinEmpty &&\n !isMaxEmpty &&\n minGap > 0 &&\n maxGap > 0 &&\n maxGap <= minGap\n ) {\n depErrors.maxGap = \"Max gap must be greater than Min Gap\";\n }\n } else {\n // For \"Should not be given\", values can be empty or zero.\n if (!isMinEmpty && minGap < 0) {\n depErrors.minGap = \"Gap cannot be negative\";\n }\n if (!isMaxEmpty && maxGap < 0) {\n depErrors.maxGap = \"Gap cannot be negative\";\n }\n }\n\n if (Object.keys(depErrors).length > 0) {\n errors[idx] = depErrors;\n }\n });\n\n return errors.some((e) => e && Object.keys(e).length > 0) ? errors : null;\n};\n\nexport const validateVaccineForm = (vaccine) => {\n const errors = {};\n\n if (!vaccine.name || vaccine.name.trim() === \"\") {\n errors.name = \"Vaccine Name is required\";\n }\n\n if (!vaccine.recipientType) {\n errors.recipientType = \"Recipient Type is required\";\n }\n\n if (!vaccine.baseDateCode) {\n errors.baseDateCode = \"Base Date is required\";\n }\n\n if (!vaccine.doses || vaccine.doses === 0) {\n errors.doses = \"At least one dose is required\";\n }\n\n const doseErrors = validateDoseDetails(\n vaccine.doseDetails,\n vaccine.doseType,\n vaccine.doses,\n );\n if (doseErrors) {\n errors.doseDetails = doseErrors;\n }\n\n const depErrors = validateDependencies(vaccine.dependencies || []);\n if (depErrors) {\n errors.dependencies = depErrors;\n }\n\n return Object.keys(errors).length > 0 ? errors : null;\n};\n","import React, { useState, useCallback, useMemo } from \"react\";\nimport {\n Box,\n Typography,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n Paper,\n IconButton,\n Collapse,\n TextField,\n Button,\n Autocomplete,\n InputAdornment,\n} from \"@mui/material\";\nimport CustomSwitch from \"@/views/custom-components/CustomSwitch\";\nimport CustomConfirmationModal from \"@/views/custom-components/CustomConfirmationModal\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n faChevronUp,\n faArrowRight,\n faChevronDown,\n faPlus,\n faCalendarDay,\n faFilter,\n faUser,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport {\n updateScheduledVaccine,\n setValidationErrors,\n clearValidationErrors,\n addCustomVaccine,\n setVaccineStatus,\n} from \"@/store/reducers/immunizationSlice\";\nimport AddCustomVaccineModal from \"./components/AddCustomVaccineModal\";\nimport ConfigureBaseDateModal from \"./components/ConfigureBaseDateModal\";\nimport ConfigureFiltersModal from \"./components/ConfigureFiltersModal\";\nimport ConfigureRecipientModal from \"./components/ConfigureRecipientModal\";\nimport DoseDetailsTable from \"./components/DoseDetailsTable\";\nimport GeographicalApplicability from \"./components/GeographicalApplicability\";\nimport VaccineDependencies from \"./components/VaccineDependencies\";\nimport DoseSelector from \"./components/DoseSelector\";\nimport VaccineFilters from \"./components/VaccineFilters\";\nimport {\n buildDisplayVaccines,\n getAllowedBaseDateCodesForRecipient,\n getInitialSummaryVaccineData,\n} from \"./utils/summaryUtils\";\nimport {\n calculateOverallEligibility,\n updateImmunization,\n updateVaccineStatus,\n} from \"./service\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport { validateVaccineForm } from \"./utils/validationUtils\";\nimport \"./styles/ImmunizationSummary.scss\";\n\nconst MAX_DOSES = 10;\n\nconst formatEligibilityPart = (part) => {\n if (!part) return \"N.A.\";\n const trimmed = part.trim();\n if (trimmed === \"N.A.\" || trimmed === \"null days\") return \"N.A.\";\n\n const match = trimmed.match(/^(\\d+)/);\n if (!match) return trimmed;\n\n const days = parseInt(match[1]);\n if (days === 0) return \"From Start\";\n if (days < 30) return `${days} Days`;\n if (days < 365) {\n const months = Math.round(days / 30.44);\n return `${months} ${months === 1 ? \"Month\" : \"Months\"}`;\n }\n const years = Math.round(days / 365.25);\n return `${years} ${years === 1 ? \"Year\" : \"Years\"}`;\n};\n\nconst prepareVaccinePayload = (draft) => {\n const helperGetDays = (val) => {\n if (!val) return 0;\n if (typeof val === \"string\" && val.toLowerCase() === \"birth\") return 0;\n return Number.parseInt(val) || 0;\n };\n\n const doseRows = (() => {\n if (draft.doseType === \"FIXED\") return \"[]\";\n let regularCount = 0;\n let boosterCount = 0;\n return JSON.stringify(\n (draft.doseDetails || []).map((d, idx, arr) => {\n let doseLabel;\n if (d.isBooster) {\n boosterCount++;\n doseLabel = `B${boosterCount}`;\n } else {\n regularCount++;\n doseLabel = regularCount;\n }\n return {\n dose: doseLabel,\n is_booster: !!d.isBooster,\n ...(d.isBooster && d.alias ? { alias: d.alias.trim() } : {}),\n eligible_from: helperGetDays(d.eligibleFrom),\n eligible_to: helperGetDays(d.eligibleTo),\n min_gap:\n idx === arr.length - 1 ? 0 : Number.parseInt(d.interval) || 0,\n };\n }),\n );\n })();\n\n const locationArray = JSON.stringify(\n (draft.regions || []).map((r) => ({\n locationId: r.locationId,\n locationIdArr: r.locationIdArr,\n locationList: r.locationList,\n })),\n );\n\n const dependencyArray = JSON.stringify(\n (draft.dependencies || []).map((dep) => ({\n vaccine: dep.vaccine,\n requirement: dep.requirement,\n minGap: Number.parseInt(dep.minGap) || 0,\n maxGap: Number.parseInt(dep.maxGap) || 0,\n })),\n );\n\n const filtersPayload = draft.filters || [];\n const filtersJSON = JSON.stringify(filtersPayload);\n\n return {\n parameters: {\n vaccineId: draft.id,\n vaccineName: draft.name,\n noOfDoses: draft.doses,\n dose: doseRows,\n doseType: draft.doseType,\n status: draft.isActive,\n fixedEligibleFrom:\n draft.doseType === \"FIXED\"\n ? helperGetDays(\n Array.isArray(draft.doseDetails)\n ? draft.doseDetails[0]?.eligibleFrom\n : draft.doseDetails?.eligibleFrom,\n )\n : null,\n fixedEligibleTo:\n draft.doseType === \"FIXED\"\n ? helperGetDays(\n Array.isArray(draft.doseDetails)\n ? draft.doseDetails[0]?.eligibleTo\n : draft.doseDetails?.eligibleTo,\n )\n : null,\n fixedInterval:\n draft.doseType === \"FIXED\" && draft.doses > 1\n ? helperGetDays(\n Array.isArray(draft.doseDetails)\n ? draft.doseDetails[0]?.interval\n : draft.doseDetails?.interval,\n )\n : draft.doseType === \"FIXED\"\n ? 0\n : null,\n location: locationArray,\n dependencies: dependencyArray,\n filters: filtersJSON,\n baseDateCode: draft.baseDateCode,\n recipientType: draft.recipientType,\n },\n };\n};\n\nconst ImmunizationSummary = () => {\n const dispatch = useDispatch();\n const {\n scheduledVaccines,\n vaccines,\n validationErrors,\n featureRights: rights,\n recipientMaster,\n baseDateMaster,\n } = useSelector((state) => state.immunization);\n const [expandedRowId, setExpandedRowId] = useState(null);\n const [showInactive, setShowInactive] = useState(false);\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [isBaseDateModalOpen, setIsBaseDateModalOpen] = useState(false);\n const [isFiltersModalOpen, setIsFiltersModalOpen] = useState(false);\n const [isRecipientModalOpen, setIsRecipientModalOpen] = useState(false);\n const [editedVaccines, setEditedVaccines] = useState({});\n\n const hasFilterRight =\n rights?.[\"update.admin.immunizationConfiguration.filter\"];\n const hasRecipientRight =\n rights?.[\"update.admin.immunizationConfiguration.recipient\"];\n const [statusConfirmation, setStatusConfirmation] = useState({\n open: false,\n vaccineId: null,\n newStatus: null,\n });\n\n const [doseTypeConfirmation, setDoseTypeConfirmation] = useState({\n open: false,\n vaccineId: null,\n newDoseType: null,\n });\n\n const toggleExpand = useCallback(\n (id) => {\n const isExpanding = expandedRowId !== id;\n setExpandedRowId((prev) => (prev === id ? null : id));\n if (isExpanding) {\n dispatch(clearValidationErrors(id));\n }\n },\n [expandedRowId, dispatch],\n );\n\n const getInitialVaccineData = useCallback(\n (vaccineId) =>\n getInitialSummaryVaccineData({\n vaccineId,\n vaccines,\n scheduledVaccines,\n }),\n [vaccines, scheduledVaccines],\n );\n\n const updateEditedVaccine = useCallback(\n (vaccineId, updater, shouldClearErrors = true) => {\n setEditedVaccines((prev) => {\n const currentData = prev[vaccineId] || getInitialVaccineData(vaccineId);\n const nextData =\n typeof updater === \"function\" ? updater(currentData) : updater;\n\n return {\n ...prev,\n [vaccineId]: nextData,\n };\n });\n\n if (shouldClearErrors) {\n dispatch(clearValidationErrors(vaccineId));\n }\n },\n [dispatch, getInitialVaccineData],\n );\n\n const handleUpdateDoseState = useCallback(\n (vaccineId, newDoseCount, updatedDoseDetails, doseType) => {\n updateEditedVaccine(vaccineId, (currentData) => {\n const finalDoseDetails =\n newDoseCount === 0\n ? doseType === \"FIXED\"\n ? {}\n : []\n : updatedDoseDetails;\n\n return {\n ...currentData,\n doses: newDoseCount,\n doseDetails: finalDoseDetails,\n eligibility: calculateOverallEligibility(\n finalDoseDetails,\n doseType,\n newDoseCount,\n ),\n };\n });\n },\n [updateEditedVaccine],\n );\n\n const handleUpdateDoseDetails = useCallback(\n (vaccineId, updatedDoseDetails, doseType) => {\n updateEditedVaccine(vaccineId, (currentData) => {\n const newDoseCount =\n doseType === \"FLEXIBLE\"\n ? updatedDoseDetails.length\n : currentData.doses;\n\n return {\n ...currentData,\n doses: newDoseCount,\n doseDetails: updatedDoseDetails,\n eligibility: calculateOverallEligibility(\n updatedDoseDetails,\n doseType,\n newDoseCount,\n ),\n };\n });\n },\n [updateEditedVaccine],\n );\n\n const handleUpdateRegions = useCallback(\n (vaccineId, updatedRegions) => {\n updateEditedVaccine(vaccineId, (currentData) => ({\n ...currentData,\n regions: updatedRegions,\n }));\n },\n [updateEditedVaccine],\n );\n\n const handleUpdateDependencies = useCallback(\n (vaccineId, updatedDependencies) => {\n updateEditedVaccine(vaccineId, (currentData) => ({\n ...currentData,\n dependencies: updatedDependencies,\n }));\n },\n [updateEditedVaccine],\n );\n\n const handleUpdateName = useCallback(\n (vaccineId, newName) => {\n updateEditedVaccine(vaccineId, (currentData) => ({\n ...currentData,\n name: newName,\n }));\n },\n [updateEditedVaccine],\n );\n\n const handleUpdateFilters = useCallback(\n (vaccineId, updatedFilters) => {\n updateEditedVaccine(vaccineId, (currentData) => ({\n ...currentData,\n filters: updatedFilters,\n }));\n },\n [updateEditedVaccine],\n );\n\n const handleUpdateDoseType = useCallback(\n (vaccineId, newDoseType) => {\n updateEditedVaccine(vaccineId, (currentData) => {\n if (currentData.doseType === newDoseType) return currentData;\n\n let updatedDoseDetails;\n\n if (newDoseType === \"FIXED\") {\n updatedDoseDetails = Array.isArray(currentData.doseDetails)\n ? currentData.doseDetails[0] || {\n id: `fixed_${Date.now()}`,\n eligibleFrom: \"\",\n eligibleTo: \"\",\n interval: 0,\n }\n : currentData.doseDetails;\n } else {\n updatedDoseDetails = Array.isArray(currentData.doseDetails)\n ? [...currentData.doseDetails]\n : [\n currentData.doseDetails || {\n id: `new_flex_${Date.now()}`,\n eligibleFrom: \"\",\n eligibleTo: \"\",\n interval: 0,\n },\n ];\n\n const targetCount = currentData.doses || 1;\n if (updatedDoseDetails.length < targetCount) {\n for (let i = updatedDoseDetails.length; i < targetCount; i++) {\n updatedDoseDetails.push({\n id: `new_flex_${Date.now()}_${i}`,\n eligibleFrom: \"\",\n eligibleTo: \"\",\n interval: 0,\n });\n }\n }\n }\n\n return {\n ...currentData,\n doseType: newDoseType,\n doseDetails: updatedDoseDetails,\n eligibility: calculateOverallEligibility(\n updatedDoseDetails,\n newDoseType,\n currentData.doses,\n ),\n };\n });\n },\n [updateEditedVaccine],\n );\n\n const handleUpdateDoseTypeRequested = useCallback(\n (vaccineId, newDoseType) => {\n const current =\n editedVaccines[vaccineId] || getInitialVaccineData(vaccineId);\n if (current.doseType === newDoseType) return;\n\n setDoseTypeConfirmation({\n open: true,\n vaccineId,\n newDoseType,\n });\n },\n [editedVaccines, getInitialVaccineData],\n );\n\n const confirmDoseTypeChange = useCallback(() => {\n const { vaccineId, newDoseType } = doseTypeConfirmation;\n handleUpdateDoseType(vaccineId, newDoseType);\n setDoseTypeConfirmation({\n open: false,\n vaccineId: null,\n newDoseType: null,\n });\n }, [doseTypeConfirmation, handleUpdateDoseType]);\n\n const confirmUpdateStatus = useCallback(async () => {\n const { vaccineId, newStatus } = statusConfirmation;\n try {\n await updateVaccineStatus({\n parameters: {\n vaccineId,\n status: newStatus,\n },\n });\n\n dispatch(setVaccineStatus({ vaccineId, status: newStatus }));\n\n setEditedVaccines((prev) => {\n const currentData = prev[vaccineId] || getInitialVaccineData(vaccineId);\n return {\n ...prev,\n [vaccineId]: {\n ...currentData,\n isActive: newStatus,\n },\n };\n });\n\n showToast({\n message: `Vaccine status marked as ${newStatus ? \"Active\" : \"Inactive\"}.`,\n type: \"success\",\n });\n } catch (error) {\n console.error(\"Failed to update vaccine status:\", error);\n showToast({\n message: error?.message || \"Failed to update vaccine status\",\n type: \"error\",\n });\n } finally {\n setStatusConfirmation({ open: false, vaccineId: null, newStatus: null });\n }\n }, [statusConfirmation, getInitialVaccineData]);\n\n const handleUpdateStatus = useCallback((vaccineId, newStatus) => {\n setStatusConfirmation({\n open: true,\n vaccineId,\n newStatus,\n });\n }, []);\n\n const handleUpdateBaseDateCode = useCallback(\n (vaccineId, newBaseDateCode) => {\n updateEditedVaccine(vaccineId, (currentData) => ({\n ...currentData,\n baseDateCode: newBaseDateCode,\n }));\n },\n [updateEditedVaccine],\n );\n\n const getAllowedBaseDateCodes = useCallback(\n (recipientType) =>\n getAllowedBaseDateCodesForRecipient(recipientMaster, recipientType),\n [recipientMaster],\n );\n\n const getAvailableBaseDateOptions = useCallback(\n (recipientType) => {\n if (!recipientType) return [];\n\n const allowedCodeSet = new Set(\n getAllowedBaseDateCodes(recipientType)\n .map((code) => String(code || \"\").trim().toLowerCase())\n .filter(Boolean),\n );\n\n return baseDateMaster.filter(\n (baseDate) =>\n baseDate.is_active &&\n allowedCodeSet.has(String(baseDate.code || \"\").trim().toLowerCase()),\n );\n },\n [baseDateMaster, getAllowedBaseDateCodes],\n );\n\n const handleUpdateRecipientType = useCallback(\n (vaccineId, newRecipientType) => {\n updateEditedVaccine(vaccineId, (currentData) => {\n const allowedBaseDates = getAllowedBaseDateCodes(newRecipientType);\n const currentBaseDateCode = currentData.baseDateCode;\n const isCurrentBaseDateAllowed =\n !currentBaseDateCode ||\n allowedBaseDates.includes(currentBaseDateCode);\n\n return {\n ...currentData,\n recipientType: newRecipientType,\n baseDateCode: isCurrentBaseDateAllowed ? currentBaseDateCode : null,\n };\n });\n },\n [getAllowedBaseDateCodes, updateEditedVaccine],\n );\n\n const handleDiscard = (vaccineId) => {\n setEditedVaccines((prev) => {\n const updated = { ...prev };\n delete updated[vaccineId];\n return updated;\n });\n toggleExpand(vaccineId);\n };\n\n const handleAddCustomVaccine = (data) => {\n dispatch(addCustomVaccine({ ...data, isActive: true }));\n setIsModalOpen(false);\n };\n\n const handleSaveVaccineDetails = async (vaccineId) => {\n const draft =\n editedVaccines[vaccineId] ||\n scheduledVaccines.find((sv) => sv.id === vaccineId) ||\n getInitialVaccineData(vaccineId);\n\n if (draft) {\n const errors = validateVaccineForm(draft);\n if (errors) {\n dispatch(setValidationErrors({ vaccineId, errors }));\n showToast({\n message: \"Please fix the errors before saving.\",\n type: \"error\",\n });\n return;\n }\n\n const payload = prepareVaccinePayload(draft);\n\n try {\n await updateImmunization(payload);\n dispatch(updateScheduledVaccine(draft));\n dispatch(clearValidationErrors(vaccineId));\n\n showToast({\n message: \"Vaccine details updated successfully!\",\n type: \"success\",\n });\n\n setEditedVaccines((prev) => {\n const updated = { ...prev };\n delete updated[vaccineId];\n return updated;\n });\n } catch (err) {\n console.error(\"Failed to update immunization:\", err);\n showToast({\n message: err?.message || \"Failed to update vaccine details\",\n type: \"error\",\n });\n }\n }\n toggleExpand(vaccineId);\n };\n\n const displayVaccines = useMemo(() => {\n return buildDisplayVaccines({\n vaccines,\n editedVaccines,\n scheduledVaccines,\n showInactive,\n });\n }, [vaccines, editedVaccines, scheduledVaccines, showInactive]);\n\n return (\n <Box className=\"immunization-summary\">\n <Box className=\"header-section\">\n <Box className=\"title-group\">\n <Typography className=\"page-title\">\n Immunization Configuration\n </Typography>\n <Typography className=\"page-subtitle\">\n Configure the specific details for your selected vaccines.\n </Typography>\n </Box>\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1.5 }}>\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 1.2,\n mr: 1,\n }}\n >\n <CustomSwitch\n checked={showInactive}\n onChange={(e) => setShowInactive(e.target.checked)}\n />\n <Typography\n sx={{\n fontSize: \"12px\",\n fontWeight: 700,\n color: \"#717171\",\n cursor: \"pointer\",\n userSelect: \"none\",\n }}\n onClick={() => setShowInactive(!showInactive)}\n >\n Show Inactives\n </Typography>\n </Box>\n {hasRecipientRight && (\n <Button\n variant=\"contained\"\n startIcon={<FontAwesomeIcon icon={faUser} />}\n onClick={() => setIsRecipientModalOpen(true)}\n sx={{\n backgroundColor: \"#394d61\",\n \"&:hover\": { backgroundColor: \"#243A50\" },\n textTransform: \"none\",\n fontWeight: 800,\n fontSize: \"12px\",\n borderRadius: \"10px\",\n padding: \"6px 18px\",\n boxShadow: \"0 4px 12px rgba(57, 77, 97, 0.2)\",\n }}\n >\n Configure Recipient\n </Button>\n )}\n {hasRecipientRight && (\n <Button\n variant=\"contained\"\n startIcon={<FontAwesomeIcon icon={faCalendarDay} />}\n onClick={() => setIsBaseDateModalOpen(true)}\n sx={{\n backgroundColor: \"#394d61\",\n \"&:hover\": { backgroundColor: \"#243A50\" },\n textTransform: \"none\",\n fontWeight: 800,\n fontSize: \"12px\",\n borderRadius: \"10px\",\n padding: \"6px 18px\",\n boxShadow: \"0 4px 12px rgba(57, 77, 97, 0.2)\",\n }}\n >\n Configure Base Date\n </Button>\n )}\n {hasFilterRight && (\n <Button\n variant=\"contained\"\n startIcon={<FontAwesomeIcon icon={faFilter} />}\n onClick={() => setIsFiltersModalOpen(true)}\n sx={{\n backgroundColor: \"#394d61\",\n \"&:hover\": { backgroundColor: \"#243A50\" },\n textTransform: \"none\",\n fontWeight: 800,\n fontSize: \"12px\",\n borderRadius: \"10px\",\n padding: \"6px 18px\",\n boxShadow: \"0 4px 12px rgba(57, 77, 97, 0.2)\",\n }}\n >\n Configure Filters\n </Button>\n )}\n <Button\n variant=\"contained\"\n startIcon={<FontAwesomeIcon icon={faPlus} />}\n onClick={() => setIsModalOpen(true)}\n sx={{\n backgroundColor: \"#394d61\",\n \"&:hover\": { backgroundColor: \"#243A50\" },\n textTransform: \"none\",\n fontWeight: 800,\n fontSize: \"12px\",\n borderRadius: \"10px\",\n padding: \"6px 18px\",\n boxShadow: \"0 4px 12px rgba(17, 182, 102, 0.2)\",\n }}\n >\n Add Vaccines\n </Button>\n </Box>\n </Box>\n\n <TableContainer component={Paper} className=\"table-container\">\n <Table stickyHeader>\n <TableHead>\n <TableRow>\n <TableCell className=\"header-cell\">SR. NO.</TableCell>\n <TableCell className=\"header-cell\">NAME</TableCell>\n <TableCell className=\"header-cell\">NUMBER OF DOSES</TableCell>\n <TableCell className=\"header-cell\">OVERALL ELIGIBILITY</TableCell>\n <TableCell className=\"header-cell\">STATUS</TableCell>\n <TableCell className=\"header-cell\" align=\"right\"></TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {displayVaccines.map((vaccine, index) => {\n const isExpanded = expandedRowId === vaccine.id;\n return (\n <React.Fragment key={vaccine.id}>\n <TableRow\n className={`table-row ${isExpanded ? \"expanded-row\" : \"\"}`}\n onClick={() => !isExpanded && toggleExpand(vaccine.id)}\n sx={{ cursor: isExpanded ? \"default\" : \"pointer\" }}\n >\n <TableCell>{index + 1}</TableCell>\n <TableCell>\n {isExpanded ? (\n <TextField\n variant=\"outlined\"\n size=\"small\"\n value={vaccine.name}\n error={!!validationErrors[vaccine.id]?.name}\n helperText={validationErrors[vaccine.id]?.name}\n onChange={(e) =>\n handleUpdateName(vaccine.id, e.target.value)\n }\n className=\"vaccine-name-input\"\n fullWidth\n />\n ) : (\n <span className=\"vaccine-name\">{vaccine.name}</span>\n )}\n </TableCell>\n <TableCell>\n {isExpanded ? (\n <Box>\n <DoseSelector\n vaccineId={vaccine.id}\n currentDoses={vaccine.doses}\n currentDoseDetails={vaccine.doseDetails}\n maxDoses={MAX_DOSES}\n onChange={(id, count, details) =>\n handleUpdateDoseState(\n id,\n count,\n details,\n vaccine.doseType,\n )\n }\n />\n {validationErrors[vaccine.id]?.doses && (\n <Typography\n variant=\"caption\"\n color=\"error\"\n sx={{ mt: 0.5, display: \"block\" }}\n >\n {validationErrors[vaccine.id].doses}\n </Typography>\n )}\n </Box>\n ) : (\n `${vaccine.doses} Doses`\n )}\n </TableCell>\n <TableCell className=\"eligibility-cell\">\n {vaccine.eligibility\n ? vaccine.eligibility.split(\"to\").map((part, i) => (\n <React.Fragment\n key={`${vaccine.id}_eligibility_${i}`}\n >\n {i === 0 ? (\n <strong>{formatEligibilityPart(part)}</strong>\n ) : (\n <>\n {\" to \"}\n <strong>{formatEligibilityPart(part)}</strong>\n </>\n )}\n </React.Fragment>\n ))\n : \"N.A.\"}\n </TableCell>\n <TableCell onClick={(e) => e.stopPropagation()}>\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n }}\n >\n <CustomSwitch\n checked={!!vaccine.isActive}\n onChange={(e) => {\n e.stopPropagation();\n handleUpdateStatus(vaccine.id, e.target.checked);\n }}\n />\n </Box>\n </TableCell>\n <TableCell align=\"right\">\n {!isExpanded ? (\n <IconButton\n className=\"action-btn edit\"\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n toggleExpand(vaccine.id);\n }}\n >\n <FontAwesomeIcon icon={faChevronDown} size=\"xs\" />\n </IconButton>\n ) : (\n <IconButton\n className=\"action-btn collapse-btn\"\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n handleDiscard(vaccine.id);\n }}\n >\n <FontAwesomeIcon icon={faChevronUp} />\n </IconButton>\n )}\n </TableCell>\n </TableRow>\n\n <TableRow>\n <TableCell\n colSpan={6}\n className=\"expanded-content-cell\"\n sx={{ padding: 0 }}\n >\n <Collapse in={isExpanded} timeout=\"auto\" unmountOnExit>\n <Box className=\"expansion-container\">\n <Box className=\"left-panel\">\n <Box sx={{ mb: 2 }}>\n <Typography\n variant=\"caption\"\n sx={{\n color: \"#394d61\",\n fontWeight: 800,\n fontSize: \"11px\",\n textTransform: \"uppercase\",\n display: \"block\",\n mb: \"6px\",\n }}\n >\n RECIPIENT TYPE\n </Typography>\n <Autocomplete\n options={recipientMaster}\n getOptionLabel={(option) => option?.name || \"\"}\n isOptionEqualToValue={(option, value) =>\n option.code === value.code\n }\n value={\n recipientMaster.find(\n (recipient) =>\n recipient.code === vaccine.recipientType,\n ) || null\n }\n onChange={(_, newValue) =>\n handleUpdateRecipientType(\n vaccine.id,\n newValue?.code || \"\",\n )\n }\n renderInput={(params) => (\n <TextField\n {...params}\n size=\"small\"\n fullWidth\n placeholder=\"Select Recipient Type\"\n error={\n !!validationErrors[vaccine.id]?.recipientType\n }\n helperText={\n validationErrors[vaccine.id]?.recipientType\n }\n InputProps={{\n ...params.InputProps,\n startAdornment: (\n <>\n <InputAdornment\n position=\"start\"\n sx={{ pl: 1 }}\n >\n <FontAwesomeIcon\n icon={faUser}\n style={{\n color: \"#94a3b8\",\n fontSize: \"14px\",\n }}\n />\n </InputAdornment>\n {params.InputProps.startAdornment}\n </>\n ),\n }}\n sx={{\n \"& .MuiOutlinedInput-root\": {\n borderRadius: \"6px\",\n bgcolor: \"#fff\",\n },\n }}\n />\n )}\n />\n </Box>\n <Box sx={{ mb: 2 }}>\n <Typography\n variant=\"caption\"\n sx={{\n color: \"#394d61\",\n fontWeight: 800,\n fontSize: \"11px\",\n textTransform: \"uppercase\",\n display: \"block\",\n mb: \"6px\",\n }}\n >\n BASE DATE\n </Typography>\n <Autocomplete\n options={getAvailableBaseDateOptions(\n vaccine.recipientType,\n )}\n disabled={!vaccine.recipientType}\n getOptionLabel={(option) =>\n option?.name ||\n option?.label ||\n option?.base_name ||\n option?.code ||\n option?.id ||\n \"\"\n }\n isOptionEqualToValue={(option, value) =>\n String(option?.code || \"\")\n .trim()\n .toLowerCase() ===\n String(value?.code || \"\")\n .trim()\n .toLowerCase()\n }\n value={\n getAvailableBaseDateOptions(\n vaccine.recipientType,\n ).find(\n (baseDate) =>\n String(baseDate.code || \"\")\n .trim()\n .toLowerCase() ===\n String(vaccine.baseDateCode || \"\")\n .trim()\n .toLowerCase(),\n ) || null\n }\n onChange={(_, newValue) =>\n handleUpdateBaseDateCode(\n vaccine.id,\n newValue?.code ?? null,\n )\n }\n renderInput={(params) => (\n <TextField\n {...params}\n size=\"small\"\n fullWidth\n placeholder={\n vaccine.recipientType\n ? \"Select Base Date\"\n : \"Select Recipient Type First\"\n }\n error={\n !!validationErrors[vaccine.id]?.baseDateCode\n }\n helperText={\n validationErrors[vaccine.id]?.baseDateCode\n }\n InputProps={{\n ...params.InputProps,\n startAdornment: (\n <>\n <InputAdornment\n position=\"start\"\n sx={{ pl: 1 }}\n >\n <FontAwesomeIcon\n icon={faCalendarDay}\n style={{\n color: \"#94a3b8\",\n fontSize: \"14px\",\n }}\n />\n </InputAdornment>\n {params.InputProps.startAdornment}\n </>\n ),\n }}\n sx={{\n \"& .MuiOutlinedInput-root\": {\n borderRadius: \"6px\",\n bgcolor: \"#fff\",\n },\n }}\n />\n )}\n />\n </Box>\n <DoseDetailsTable\n doses={vaccine.doseDetails}\n doseCount={vaccine.doses}\n doseType={vaccine.doseType || \"FIXED\"}\n onUpdate={(updatedDoses) =>\n handleUpdateDoseDetails(\n vaccine.id,\n updatedDoses,\n vaccine.doseType || \"FIXED\",\n )\n }\n onDoseTypeChange={(val) =>\n handleUpdateDoseTypeRequested(vaccine.id, val)\n }\n errors={validationErrors[vaccine.id]?.doseDetails}\n />\n </Box>\n <Box className=\"right-panel\">\n <VaccineFilters\n filters={vaccine.filters || []}\n onUpdate={(updatedFilters) =>\n handleUpdateFilters(vaccine.id, updatedFilters)\n }\n />\n <GeographicalApplicability\n regions={vaccine.regions}\n onUpdate={(updatedRegions) =>\n handleUpdateRegions(vaccine.id, updatedRegions)\n }\n />\n <VaccineDependencies\n dependencies={vaccine.dependencies || []}\n onUpdate={(updatedDeps) =>\n handleUpdateDependencies(\n vaccine.id,\n updatedDeps,\n )\n }\n vaccineOptions={vaccines.filter(\n (v) => v.isActive && v.id !== vaccine.id,\n )}\n errors={\n validationErrors[vaccine.id]?.dependencies\n }\n />\n </Box>\n </Box>\n\n <Box className=\"expansion-footer\">\n <Button\n variant=\"outlined\"\n className=\"discard-btn\"\n onClick={() => handleDiscard(vaccine.id)}\n >\n DISCARD CHANGES\n </Button>\n <Button\n variant=\"contained\"\n className=\"save-btn\"\n endIcon={<FontAwesomeIcon icon={faArrowRight} />}\n onClick={() => handleSaveVaccineDetails(vaccine.id)}\n >\n SAVE VACCINE DETAILS\n </Button>\n </Box>\n </Collapse>\n </TableCell>\n </TableRow>\n </React.Fragment>\n );\n })}\n </TableBody>\n </Table>\n </TableContainer>\n\n <CustomConfirmationModal\n open={statusConfirmation.open}\n handleClose={() =>\n setStatusConfirmation({\n open: false,\n vaccineId: null,\n newStatus: null,\n })\n }\n handleClick={confirmUpdateStatus}\n title=\"Confirm Status Change\"\n description={`Are you sure you want to mark this vaccine as ${statusConfirmation.newStatus ? \"Active\" : \"Inactive\"\n }?`}\n dataTestId=\"status-change-confirmation\"\n />\n\n <CustomConfirmationModal\n open={doseTypeConfirmation.open}\n handleClose={() =>\n setDoseTypeConfirmation({\n open: false,\n vaccineId: null,\n newDoseType: null,\n })\n }\n handleClick={confirmDoseTypeChange}\n title=\"Confirm Dose Type Change\"\n description={`Changing the dose type to ${doseTypeConfirmation.newDoseType?.toUpperCase() || \"\"\n } may result in data loss for existing dose configuration. Are you sure you want to proceed?`}\n dataTestId=\"dosetype-change-confirmation\"\n />\n <AddCustomVaccineModal\n open={isModalOpen}\n onClose={() => setIsModalOpen(false)}\n onAdd={handleAddCustomVaccine}\n isFromSummary={true}\n />\n <ConfigureRecipientModal\n open={isRecipientModalOpen}\n onClose={() => setIsRecipientModalOpen(false)}\n />\n <ConfigureBaseDateModal\n open={isBaseDateModalOpen}\n onClose={() => setIsBaseDateModalOpen(false)}\n />\n <ConfigureFiltersModal\n open={isFiltersModalOpen}\n onClose={() => setIsFiltersModalOpen(false)}\n />\n </Box>\n );\n};\n\nexport default ImmunizationSummary;\n","import { useEffect, useRef, useState } from \"react\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { Box, CircularProgress } from \"@mui/material\";\nimport ImmunizationConfiguration from \"./ImmunizationConfiguration\";\nimport ImmunizationScheduleConfiguration from \"./ImmunizationScheduleConfiguration\";\nimport ImmunizationSummary from \"./ImmunizationSummary\";\nimport {\n checkImmunizationConfigurationInitiation,\n getImmunizationReferenceData,\n mapImmunizationVaccineConfig,\n} from \"./service\";\nimport {\n setBaseDatesMaster,\n setCurrentView,\n setRecipientMaster,\n setVaccines,\n setFiltersMaster,\n setFeatureRights,\n setImmunizationConfigLoaded,\n} from \"@/store/reducers/immunizationSlice\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport { getAssignedFeatures } from \"@/utils/feature\";\n\nconst VIEW_COMPONENT_MAP = {\n landing: ImmunizationConfiguration,\n \"schedule-config\": ImmunizationScheduleConfiguration,\n summary: ImmunizationSummary,\n};\n\nconst ImmunizationConfigurationBase = () => {\n const dispatch = useDispatch();\n const {\n currentViewId,\n isConfigLoaded,\n } = useSelector((state) => state.immunization);\n const [isInitializing, setIsInitializing] = useState(!isConfigLoaded);\n\n const hasFetchedRef = useRef(false);\n\n useEffect(() => {\n if (isConfigLoaded) {\n setIsInitializing(false);\n hasFetchedRef.current = false;\n return;\n }\n\n if (hasFetchedRef.current) {\n return;\n }\n hasFetchedRef.current = true;\n\n const fetchInitialData = async () => {\n try {\n setIsInitializing(true);\n const [initiationResponse, rightsResponse] = await Promise.allSettled([\n checkImmunizationConfigurationInitiation({}),\n getAssignedFeatures(\"techo.manage.immunizationConfiguration\"),\n ]);\n\n if (rightsResponse?.status === \"fulfilled\") {\n dispatch(\n setFeatureRights(JSON.parse(rightsResponse.value.data || \"{}\"))\n );\n }\n\n const initiationStatus =\n initiationResponse?.status === \"fulfilled\"\n ? initiationResponse.value?.data?.result?.[0]?.key_value\n : null;\n\n if (initiationResponse?.status !== \"fulfilled\") {\n throw (\n initiationResponse?.reason ||\n new Error(\"Failed to fetch initiation status\")\n );\n }\n\n const isDone = initiationStatus === \"DONE\";\n\n if (!isDone) {\n // dispatch(setCurrentView(\"landing\"));\n dispatch(setCurrentView(\"schedule-config\"));\n dispatch(setImmunizationConfigLoaded(true));\n return;\n }\n\n const referenceDataResponse = await getImmunizationReferenceData();\n\n if (referenceDataResponse) {\n const referenceDataResults = referenceDataResponse?.data || [];\n const baseDatesResponse = referenceDataResults[0];\n const filtersResponse = referenceDataResults[1];\n const vaccineResponse = referenceDataResults[2];\n const recipientResponse = referenceDataResults[3];\n\n if (baseDatesResponse?.result) {\n dispatch(setBaseDatesMaster(baseDatesResponse.result));\n }\n\n if (filtersResponse?.result) {\n dispatch(setFiltersMaster(filtersResponse.result));\n }\n\n if (recipientResponse?.result) {\n dispatch(setRecipientMaster(recipientResponse.result));\n }\n\n if (vaccineResponse?.result) {\n const mappedVaccines = vaccineResponse.result.map(\n mapImmunizationVaccineConfig,\n );\n dispatch(setVaccines(mappedVaccines));\n }\n }\n\n dispatch(setCurrentView(\"summary\"));\n dispatch(setImmunizationConfigLoaded(true));\n } catch (error) {\n console.error(\"Error fetching initial data:\", error);\n showToast({\n message: error?.message || \"Failed to fetch initial configuration\",\n type: \"error\",\n });\n hasFetchedRef.current = false;\n } finally {\n setIsInitializing(false);\n }\n };\n fetchInitialData();\n }, [dispatch, isConfigLoaded]);\n\n const ActiveView =\n VIEW_COMPONENT_MAP[currentViewId] || ImmunizationConfiguration;\n\n if (isInitializing && !isConfigLoaded) {\n return (\n <Box className=\"flex justify-center items-center w-full h-[60vh]\">\n <CircularProgress color=\"primary\" />\n </Box>\n );\n }\n\n return (\n <div className=\"immunization-configuration-base-wrapper\">\n <ActiveView />\n </div>\n );\n};\n\nexport default ImmunizationConfigurationBase;\n"],"names":["TemplateCard","title","toolTipText","buttonText","icon","iconColor","iconBgColor","isCustom","onClick","Box","jsxs","jsx","FontAwesomeIcon","Tooltip","IconButton","faInfoCircle","Typography","Button","faArrowRight","PropTypes","ImmunizationConfiguration","dispatch","useDispatch","TextField","InputAdornment","faSearch","Grid","faPlus","setCurrentView","VaccineCard","vaccine","selected","faSyringe","safeParseJson","value","fallback","toStableId","parts","normaliseEligibilityValue","calculateOverallEligibility","doseDetails","doseType","doses","details","eligibleFrom","eligibleTo","first","last","mapImmunizationVaccineConfig","doseTypeLower","dose","index","regions","location","_a","dependencies","dependency","parsedFilters","filters","getVaccines","execute","getRecipients","getImmunizationReferenceData","executeAll","addImmunization","data","updateImmunization","checkImmunizationConfigurationInitiation","updateVaccineStatus","updateVaccineStatusFromArray","updateImmunizationConfigurationInitiation","saveBaseDate","saveRecipient","updateRecipient","updateBaseDate","getAllTablesAndColumns","getFilters","addFilter","updateFilter","AddCustomVaccineModal","open","onClose","onAdd","isFromSummary","vaccineName","setVaccineName","useState","disease","setDisease","recipientType","setRecipientType","baseDateCode","setBaseDateCode","touched","setTouched","vaccines","recipientMaster","baseDateMaster","useSelector","state","selectedRecipient","useMemo","recipient","allowedBaseDateCodes","config","availableBaseDateOptions","activeBaseDates","baseDate","allowedCodeSet","code","selectedBaseDate","normalizedCode","isFormValid","handleAdd","derivedCode","v","showToast","p","payload","response","resultObject","_b","vaccineId","_c","_d","err","handleReset","error","handleCloseModal","Dialog","DialogTitle","faTimes","DialogContent","e","faTag","faShieldVirus","Autocomplete","option","_","newValue","params","Fragment","faUser","faCalendarDay","DialogActions","VaccineGridSkeleton","children","isLoading","getUseSkeleton","ImmunizationScheduleConfiguration","selectedVaccineIds","isConfigLoaded","searchTerm","setSearchTerm","isModalOpen","setIsModalOpen","isFetchingVaccines","setIsFetchingVaccines","isSubmitting","setIsSubmitting","useEffect","vaccinesResponse","mappedVaccines","setVaccines","vaccineErr","handleToggleVaccine","id","toggleVaccine","handleAddCustomVaccine","addCustomVaccine","handleToggleAll","allVisibleIds","filteredVaccines","newSelectedIds","setSelectedVaccineIds","handleSelectVaccines","activateIds","deactivateIds","isNowSelected","wasActive","activateSelectedVaccines","setImmunizationConfigLoaded","allVaccines","activeSelectedIds","areAllVisibleSelected","faListCheck","faCheckDouble","DATE_COLUMN_TYPE_KEYWORDS","modalHeaderCellSx","modalFieldSx","parseColumnInfo","columnInfo","isDateTypeColumn","dataType","normalisedType","keyword","ConfigureBaseDateModal","startInAddMode","onSaved","scheduledVaccines","dbTablesMaster","isAdding","setIsAdding","loading","setLoading","saving","setSaving","usageWarning","setUsageWarning","newName","setNewName","newCode","setNewCode","selectedTable","setSelectedTable","selectedColumn","setSelectedColumn","resetForm","fetchTables","res","setDbTablesMaster","availableColumns","tableObj","t","columnName","left","right","availableTables","existingCodes","bd","isCodeDuplicate","canSave","handleSave","createdBaseDate","upsertBaseDateMasterItem","handleStatusChange","newStatus","usingVaccines","scheduled","sv","effectiveBaseDateCode","bdCode","updateBaseDateMasterStatus","CircularProgress","faCode","Chip","faDatabase","table","selectedOption","nextTable","faColumns","TableContainer","Paper","Table","TableHead","TableRow","TableCell","TableBody","CustomSwitch","faArrowLeft","name","idx","RESOURCE_ID_PLACEHOLDER","PLACEHOLDER_PATTERN","ConfigureFiltersModal","filtersList","editingFilter","setEditingFilter","newDescription","setNewDescription","newQuery","setNewQuery","fetchFilters","forceRefetch","setFiltersMaster","handleEditClick","filter","f","queryPlaceholders","match","hasResourceIdPlaceholder","hasUnsupportedPlaceholders","placeholder","queryPlaceholderError","savedFilter","upsertFilterMasterItem","updateFilterMasterStatus","faFilter","faAlignLeft","faEdit","normaliseKeyValue","normaliseColumnName","columnExpression","cleaned","aliasMatch","directAliasMatch","splitSelectColumns","selectPart","columns","current","bracketDepth","char","inferColumnsFromQueryText","query","arr","parseRecipientConfig","ConfigureRecipientModal","editingRecipient","setEditingRecipient","isBaseDateModalOpen","setIsBaseDateModalOpen","geographicalApplicability","setGeographicalApplicability","allowedBaseDates","setAllowedBaseDates","fetchTypeKeys","setFetchTypeKeys","locationKey","setLocationKey","historyKey","setHistoryKey","isQueryTouched","setIsQueryTouched","queryColumns","setQueryColumns","fetchRecipients","setRecipientMaster","item","baseDateOptions","queryColumnOptions","duplicateColumnUsageError","usageMap","registerUsage","fieldLabel","normalisedValue","existingUsage","fetchTypeKey","duplicateError","historyKeyError","locationKeyError","getAvailableColumnOptions","useCallback","currentValues","currentValueSet","reservedValues","normalisedOption","queryError","q","foundForbidden","loadColumnsFromQuery","queryToPreview","discoveredColumns","timer","savedRecipient","upsertRecipientMasterItem","val","generatedCode","PostgresEditor","checked","uniqueValues","seenValues","getTagProps","faClockRotateLeft","newInputValue","faMapMarkedAlt","selectedOptions","savedBaseDate","prev","getDays","DurationInput","defaultValue","onFieldUpdate","quantity","handleQtyChange","rawValue","faExclamationCircle","DoseDetailsTable","doseCount","onUpdate","onDoseTypeChange","errors","deleteConfirmModal","setDeleteConfirmModal","boosterAliasModal","setBoosterAliasModal","isFixed","safeDoses","handleFieldChange","field","sanitizedValue","updatedDose","baseArray","updatedDoses","d","i","newDose","handleSaveBoosterAlias","confirmDeleteDose","externalErrors","fromError","toError","intervalError","fromDays","toDays","Switch","event","faTrash","Popover","retrieveNextLevel","locationIds","level","fetchAccordingToUserAOI","languagePreference","ids","api","retriveLocationType","GeographicalApplicability","loggedInUser","loadingLevels","setLoadingLevels","activeLevels","setActiveLevels","levelOptions","setLevelOptions","selections","setSelections","editingId","setEditingId","fetchingRef","useRef","hydrateOptions","selectionMap","levels","currentType","currentKey","selectedId","nextType","nextKey","fetchLevelData","fetchMetadata","initialSelectionMap","resp","sorted","a","b","groupedMap","group","groupedLevelsList","initSels","initOpts","key","lang","firstLevelNum","firstLevelResp","cluster","clusterLevel","matchingGroup","newOpts","loc","parentId","targetLevelNum","targetTypeKey","next","scrollRef","React","reconstructFromIds","locationIdArr","currentOpts","l","newSels","targetId","clusterOptions","matchedOpt","o","k","handleOpen","region","handleClose","reset","handleAddLocation","selectedEntries","sel","locationId","locationList","fullPath","isRelated","p1","p2","filteredRegions","r","newRegion","handleChange","typeObj","typeId","opt","currentIndex","childKey","nextOpts","renderDropdown","levelObj","label","options","Select","MenuItem","VaccineDependencies","vaccineOptions","handleAddField","newDep","handleDelete","handleInputChange","updated","dep","depErrors","DoseSelector","currentDoses","currentDoseDetails","maxDoses","onChange","decreaseConfirmModal","setDecreaseConfirmModal","handleDoseChange","newDoseCount","updatedDoseDetails","dosesToDelete","confirmDoseDecrease","newCount","VaccineFilters","filtersMaster","activeFilters","normalizedFilters","props","Checkbox","tagValue","createElement","getInitialSummaryVaccineData","base","buildDisplayVaccines","editedVaccines","showInactive","getAllowedBaseDateCodesForRecipient","validateDoseDetails","doseErrors","startInDays","endInDays","isLastFlexibleRow","intervalVal","prevStartInDays","prevIntervalDays","validateDependencies","seenVaccines","isMinEmpty","isMaxEmpty","minGap","maxGap","validateVaccineForm","MAX_DOSES","formatEligibilityPart","part","trimmed","days","months","years","prepareVaccinePayload","draft","helperGetDays","doseRows","regularCount","boosterCount","doseLabel","locationArray","dependencyArray","filtersPayload","filtersJSON","_e","_f","ImmunizationSummary","validationErrors","rights","expandedRowId","setExpandedRowId","setShowInactive","isFiltersModalOpen","setIsFiltersModalOpen","isRecipientModalOpen","setIsRecipientModalOpen","setEditedVaccines","hasFilterRight","hasRecipientRight","statusConfirmation","setStatusConfirmation","doseTypeConfirmation","setDoseTypeConfirmation","toggleExpand","isExpanding","clearValidationErrors","getInitialVaccineData","updateEditedVaccine","updater","shouldClearErrors","currentData","nextData","handleUpdateDoseState","finalDoseDetails","handleUpdateDoseDetails","handleUpdateRegions","updatedRegions","handleUpdateDependencies","updatedDependencies","handleUpdateName","handleUpdateFilters","updatedFilters","handleUpdateDoseType","newDoseType","targetCount","handleUpdateDoseTypeRequested","confirmDoseTypeChange","confirmUpdateStatus","setVaccineStatus","handleUpdateStatus","handleUpdateBaseDateCode","newBaseDateCode","getAllowedBaseDateCodes","getAvailableBaseDateOptions","handleUpdateRecipientType","newRecipientType","currentBaseDateCode","isCurrentBaseDateAllowed","handleDiscard","handleSaveVaccineDetails","setValidationErrors","updateScheduledVaccine","displayVaccines","isExpanded","count","faChevronUp","faChevronDown","Collapse","updatedDeps","CustomConfirmationModal","VIEW_COMPONENT_MAP","ImmunizationConfigurationBase","currentViewId","isInitializing","setIsInitializing","hasFetchedRef","initiationResponse","rightsResponse","getAssignedFeatures","setFeatureRights","initiationStatus","referenceDataResponse","referenceDataResults","baseDatesResponse","filtersResponse","vaccineResponse","recipientResponse","setBaseDatesMaster","ActiveView"],"mappings":";;;;;;;;;;;;;;;;;AAsBA,MAAMA,KAAe,CAAC;AAAA,EACpB,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,YAAAC;AAAA,EACA,MAAAC;AAAA,EACA,WAAAC;AAAA,EACA,aAAAC;AAAA,EACA,UAAAC;AAAA,EACA,SAAAC;AACF,wBAEKC,GAAA,EAAI,WAAW,iBAAiBF,IAAW,gBAAgB,EAAE,IAC5D,UAAA;AAAA,EAAA,gBAAAG,EAACD,GAAA,EAAI,WAAU,eACb,UAAA;AAAA,IAAA,gBAAAE,EAACF,KAAI,WAAU,gBAAe,OAAO,EAAE,iBAAiBH,KACtD,UAAA,gBAAAK;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,MAAAR;AAAA,QACA,WAAU;AAAA,QACV,OAAO,EAAE,OAAOC,EAAA;AAAA,MAAU;AAAA,IAAA,GAE9B;AAAA,sBACCQ,IAAA,EAAQ,OAAK,IAAC,WAAU,SAAQ,OAAOX,GACtC,UAAA,gBAAAS,EAACG,MAAW,MAAK,SAAQ,WAAU,YACjC,UAAA,gBAAAH,EAACC,KAAgB,MAAMG,GAAA,CAAc,GACvC,EAAA,CACF;AAAA,EAAA,GACF;AAAA,EAEA,gBAAAJ,EAACK,GAAA,EAAW,WAAU,cAAc,UAAAf,GAAM;AAAA,EAE1C,gBAAAU;AAAA,IAACM;AAAA,IAAA;AAAA,MACC,WAAS;AAAA,MACT,WAAW,YAAYV,IAAW,gBAAgB,eAAe;AAAA,MACjE,SAAS,gBAAAI,EAACC,GAAA,EAAgB,MAAMM,GAAA,CAAc;AAAA,MAC9C,SAAAV;AAAA,MAEC,UAAAL;AAAA,IAAA;AAAA,EAAA;AACH,GACF;AAIJH,GAAa,YAAY;AAAA,EACvB,OAAOmB,EAAU,OAAO;AAAA,EACxB,aAAaA,EAAU;AAAA,EACvB,YAAYA,EAAU,OAAO;AAAA,EAC7B,MAAMA,EAAU,UAAU,CAACA,EAAU,QAAQA,EAAU,KAAK,CAAC,EAAE;AAAA,EAC/D,WAAWA,EAAU,OAAO;AAAA,EAC5B,aAAaA,EAAU,OAAO;AAAA,EAC9B,UAAUA,EAAU;AAAA,EACpB,SAASA,EAAU;AACrB;AAEAnB,GAAa,eAAe;AAAA,EAC1B,UAAU;AAAA,EACV,SAAS,MAAM;AAAA,EAAC;AAClB;AAEA,MAAMoB,KAA4B,MAAM;AACtC,QAAMC,IAAWC,GAAA;AAMjB,2BACGb,GAAA,EAAI,WAAU,wBACb,UAAA,gBAAAC,EAACD,GAAA,EAAI,WAAU,mBACb,UAAA;AAAA,IAAA,gBAAAC,EAACD,GAAA,EAAI,WAAU,eACb,UAAA;AAAA,MAAA,gBAAAE,EAACK,GAAA,EAAW,WAAU,cAAa,UAAA,8CAEnC;AAAA,MACA,gBAAAL,EAACK,GAAA,EAAW,WAAU,iBAAgB,UAAA,6FAAA,CAGtC;AAAA,IAAA,GACF;AAAA,IAEA,gBAAAL,EAACF,GAAA,EAAI,WAAU,yBACb,UAAA,gBAAAE;AAAA,MAACY;AAAA,MAAA;AAAA,QACC,WAAS;AAAA,QACT,aAAY;AAAA,QACZ,WAAU;AAAA,QACV,YAAY;AAAA,UACV,gBACE,gBAAAZ,EAACa,IAAA,EAAe,UAAS,SACvB,UAAA,gBAAAb,EAACC,GAAA,EAAgB,MAAMa,IAAU,WAAU,cAAA,CAAc,EAAA,CAC3D;AAAA,QAAA;AAAA,MAEJ;AAAA,IAAA,GASJ;AAAA,IAEA,gBAAAd,EAACe,IAAA,EAAK,WAAS,IAAC,SAAS,EAAE,IAAI,GAAG,IAAI,EAAA,GAAK,WAAU,iBAqBnD,UAAA,gBAAAf;AAAA,MAACe;AAAA,MAAA;AAAA,QACC,MAAM,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,EAAA;AAAA,QACnC,WAAU;AAAA,QAEV,UAAA,gBAAAf;AAAA,UAACX;AAAA,UAAA;AAAA,YACC,OAAM;AAAA,YACN,aAAY;AAAA,YACZ,YAAW;AAAA,YACX,MAAM2B;AAAA,YACN,WAAU;AAAA,YACV,aAAY;AAAA,YACZ,UAAU;AAAA,YACV,SAxEoB,MAAM;AACpC,cAAAN,EAASO,GAAe,iBAAiB,CAAC;AAAA,YAC5C;AAAA,UAsEqB;AAAA,QAAA;AAAA,MACX;AAAA,IAAA,EACF,CACF;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAEJ,GC5JMC,KAAc,CAAC;AAAA,EACnB,SAAAC,IAAU,CAAA;AAAA,EACV,UAAAC,IAAW;AAAA,EACX,SAAAvB,IAAU,MAAM;AAAA,EAAC;AAAA,EACjB,UAAAD,IAAW;AACb,MAEI,gBAAAG;AAAA,EAACD;AAAA,EAAA;AAAA,IACC,WAAW,gBAAgBsB,IAAW,aAAa,EAAE,IACnDxB,IAAW,mBAAmB,EAChC;AAAA,IACA,SAAAC;AAAA,IAEA,UAAA;AAAA,MAAA,gBAAAG,EAACF,GAAA,EAAI,WAAU,kBACb,UAAA,gBAAAE,EAACC,KAAgB,MAAML,IAAWoB,KAASK,GAAA,CAAW,EAAA,CACxD;AAAA,MACA,gBAAAtB,EAACD,GAAA,EAAI,WAAU,kBACb,UAAA;AAAA,QAAA,gBAAAE,EAACK,KAAW,WAAU,gBACnB,UAAAT,IAAW,uBAAuBuB,EAAQ,MAC7C;AAAA,SACCA,KAAA,gBAAAA,EAAS,aACR,gBAAAnB,EAACK,KAAW,WAAU,eAAe,YAAQ,SAAA,CAAS;AAAA,MAAA,EAAA,CAE1D;AAAA,IAAA;AAAA,EAAA;AAAA;AAKNa,GAAY,YAAY;AAAA,EACtB,SAASV,EAAU,MAAM;AAAA,IACvB,MAAMA,EAAU;AAAA,IAChB,UAAUA,EAAU;AAAA,EAAA,CACrB;AAAA,EACD,UAAUA,EAAU;AAAA,EACpB,SAASA,EAAU;AAAA,EACnB,UAAUA,EAAU;AACtB;ACtCA,MAAMc,KAAgB,CAACC,GAAOC,MAAa;AACzC,MAAID,KAAS;AACX,WAAOC;AAGT,MAAI,OAAOD,KAAU;AACnB,WAAOA;AAGT,MAAI;AACF,WAAO,KAAK,MAAMA,CAAK;AAAA,EACzB,QAAQ;AACN,WAAOC;AAAA,EACT;AACF,GAEMC,KAAa,IAAIC,MAAUA,EAAM,OAAO,OAAO,EAAE,KAAK,GAAG,GAEzDC,KAA4B,CAACJ,MAG/BA,KAAU,QACVA,MAAU,MACVA,MAAU,UACVA,MAAU,cAEH,SAGFA,GAGIK,KAA8B,CACzCC,GACAC,IAAW,YACXC,IAAQ,MACL;AAKH,MAJIA,MAAU,KAIV,CAACF;AACH,WAAO;AAGT,MAAIC,MAAa,SAAS;AACxB,UAAME,IAAU,MAAM,QAAQH,CAAW,IAAIA,EAAY,CAAC,IAAIA;AAC9D,QAAI,CAACG;AACH,aAAO;AAGT,UAAMC,IAAeN,GAA0BK,EAAQ,YAAY,GAC7DE,IAAaP,GAA0BK,EAAQ,UAAU;AAE/D,WAAIC,MAAiB,UAAUC,MAAe,SACrC,SAGF,GAAGD,CAAY,OAAOC,CAAU;AAAA,EACzC;AAEA,MAAI,CAAC,MAAM,QAAQL,CAAW,KAAKA,EAAY,WAAW;AACxD,WAAO;AAGT,QAAMM,IAAQR,GAA0BE,EAAY,CAAC,EAAE,YAAY,GAC7DO,IAAOT;AAAA,IACXE,EAAYA,EAAY,SAAS,CAAC,EAAE;AAAA,EACxC;AAEE,SAAIM,MAAU,UAAUC,MAAS,SACxB,SAGF,GAAGD,CAAK,OAAOC,CAAI;AAC5B,GAEaC,KAA+B,CAAClB,MAAY;AACvD,QAAMmB,IAAgB,OAAOnB,EAAQ,aAAa,EAAE,EAAE,YAAW,GAI3DU,IAFJS,MAAkB,WAAWA,MAAkB,QAAQ,CAACnB,EAAQ,YAG9D;AAAA,IACE;AAAA,MACE,IAAIM,GAAW,SAASN,EAAQ,EAAE;AAAA,MAClC,cACEA,EAAQ,uBAAuB,SAC3B,GAAGA,EAAQ,kBAAkB,UAC7B;AAAA,MACN,YACEA,EAAQ,qBAAqB,SACzB,GAAGA,EAAQ,gBAAgB,UAC3B;AAAA,MACN,UAAUA,EAAQ,WAAW;AAAA,IACvC;AAAA,EACA,IACMG,GAAcH,EAAQ,MAAM,CAAA,CAAE,EAAE,IAAI,CAACoB,GAAMC,OAAW;AAAA,IACpD,IAAID,EAAK,MAAMd,GAAW,QAAQN,EAAQ,IAAIqB,CAAK;AAAA,IACnD,WACED,EAAK,cAAc,MACnBA,EAAK,eAAe,MACnB,OAAOA,EAAK,QAAS,YAAYA,EAAK,KAAK,YAAW,EAAG,WAAW,GAAG;AAAA,IAC1E,OAAOA,EAAK,SAASA,EAAK,iBAAiB;AAAA,IAC3C,cACEA,EAAK,kBAAkB,SAAY,GAAGA,EAAK,aAAa,UAAU;AAAA,IACpE,YACEA,EAAK,gBAAgB,SAAY,GAAGA,EAAK,WAAW,UAAU;AAAA,IAChE,UAAUA,EAAK,WAAW;AAAA,EAClC,EAAQ,GAEAE,IAAUnB,GAAcH,EAAQ,UAAU,CAAA,CAAE,EAC/C,OAAO,CAACuB,MAAaA,KAAY,OAAOA,KAAa,QAAQ,EAC7D,IAAI,CAACA,GAAUF,MAAK;;AAAM;AAAA,MACzB,IAAIf,GAAW,UAAUN,EAAQ,IAAIqB,CAAK;AAAA,MAC1C,YAAYE,EAAS;AAAA,MACrB,eAAeA,EAAS;AAAA,MACxB,cAAcA,EAAS;AAAA,MACvB,WAAUC,IAAAD,EAAS,iBAAT,gBAAAC,EAAuB,WAAW,QAAQ;AAAA,IAC1D;AAAA,GAAM,GAEEC,IAAetB,GAAcH,EAAQ,aAAa,CAAA,CAAE,EAAE;AAAA,IAC1D,CAAC0B,GAAYL,OAAW;AAAA,MACtB,IAAIf,GAAW,OAAON,EAAQ,IAAIqB,CAAK;AAAA,MACvC,SAASK,EAAW,WAAW;AAAA,MAC/B,aAAaA,EAAW,eAAe;AAAA,MACvC,QAAQ,OAAO,SAASA,EAAW,QAAQ,EAAE,KAAK;AAAA,MAClD,QAAQ,OAAO,SAASA,EAAW,QAAQ,EAAE,KAAK;AAAA,MAClD,SAASA,EAAW,WAAW;AAAA,IACrC;AAAA,EACA,GAEQC,IAAgBxB,GAAcH,EAAQ,SAAS,CAAA,CAAE,GACjD4B,IAAU,MAAM,QAAQD,CAAa,IACvCA,KACAA,KAAA,gBAAAA,EAAe,UAAS,CAAA;AAE5B,SAAO;AAAA,IACL,GAAG3B;AAAA,IACH,MAAMA,EAAQ,gBAAgBA,EAAQ,QAAQ;AAAA,IAC9C,UACEA,EAAQ,qBAAqBA,EAAQ,WAAWA,EAAQ,YAAY;AAAA,IACtE,OAAOA,EAAQ,eAAe;AAAA,IAC9B,UACEA,EAAQ,aAAaA,EAAQ,cAAc,OACvCA,EAAQ,YACR;AAAA,IACN,aAAAU;AAAA,IACA,aAAaD;AAAA,MACXC;AAAA,MACAV,EAAQ;AAAA,MACRA,EAAQ,eAAe;AAAA,IAC7B;AAAA,IACI,UAAUA,EAAQ,cAAc,SAAYA,EAAQ,YAAY;AAAA,IAChE,SAAAsB;AAAA,IACA,cAAAG;AAAA,IACA,SAAAG;AAAA,IACA,cAAc5B,EAAQ;AAAA,IACtB,eAAeA,EAAQ,kBAAkB;AAAA,EAC7C;AACA,GAEa6B,KAAc,MAClBC,GAAQ;AAAA,EACb,MAAM;AAAA,EACN,YAAY,CAAA;AAChB,CAAG,GAUUC,KAAgB,MACpBD,GAAQ;AAAA,EACb,MAAM;AAAA,EACN,YAAY,CAAA;AAChB,CAAG,GAGUE,KAA+B,MACnCC,GAAW;AAAA,EAChB;AAAA,IACE,MAAM;AAAA,IACN,YAAY,CAAA;AAAA,IACZ,UAAU;AAAA,EAChB;AAAA,EACI;AAAA,IACE,MAAM;AAAA,IACN,YAAY,CAAA;AAAA,IACZ,UAAU;AAAA,EAChB;AAAA,EACI;AAAA,IACE,MAAM;AAAA,IACN,YAAY,CAAA;AAAA,IACZ,UAAU;AAAA,EAChB;AAAA,EACI;AAAA,IACE,MAAM;AAAA,IACN,YAAY,CAAA;AAAA,IACZ,UAAU;AAAA,EAChB;AACA,CAAG,GAGUC,KAAkB,CAACC,MACvBL,GAAQ;AAAA,EACb,MAAM;AAAA,EACN,YAAYK;AAChB,CAAG,GAGUC,KAAqB,CAACD,MAC1BL,GAAQ;AAAA,EACb,MAAM;AAAA,EACN,GAAGK;AACP,CAAG,GAGUE,KAA2C,CAACF,MAChDL,GAAQ;AAAA,EACb,MAAM;AAAA,EACN,GAAGK;AACP,CAAG,GAGUG,KAAsB,CAACH,MAC3BL,GAAQ;AAAA,EACb,MAAM;AAAA,EACN,GAAGK;AACP,CAAG,GAGUI,KAA+B,CAACJ,MACpCL,GAAQ;AAAA,EACb,MAAM;AAAA,EACN,GAAGK;AACP,CAAG,GAGUK,KAA4C,CAACL,MACjDL,GAAQ;AAAA,EACb,MAAM;AAAA,EACN,GAAGK;AACP,CAAG,GAGUM,KAAe,CAACN,MACpBL,GAAQ;AAAA,EACb,MAAM;AAAA,EACN,YAAYK;AAChB,CAAG,GAGUO,KAAgB,CAACP,MACrBL,GAAQ;AAAA,EACb,MAAM;AAAA,EACN,YAAYK;AAChB,CAAG,GAGUQ,KAAkB,CAACR,MACvBL,GAAQ;AAAA,EACb,MAAM;AAAA,EACN,YAAYK;AAChB,CAAG,GAGUS,KAAiB,CAACT,MACtBL,GAAQ;AAAA,EACb,MAAM;AAAA,EACN,YAAYK;AAChB,CAAG,GAGUU,KAAyB,MAC7Bf,GAAQ;AAAA,EACb,MAAM;AAAA,EACN,YAAY,CAAA;AAChB,CAAG,GAGUgB,KAAa,MACjBhB,GAAQ;AAAA,EACb,MAAM;AAAA,EACN,YAAY,CAAA;AAChB,CAAG,GAGUiB,KAAY,CAACZ,MACjBL,GAAQ;AAAA,EACb,MAAM;AAAA,EACN,YAAYK;AAChB,CAAG,GAGUa,KAAe,CAACb,MACpBL,GAAQ;AAAA,EACb,MAAM;AAAA,EACN,YAAYK;AAChB,CAAG,GClRGc,KAAwB,CAAC,EAAE,MAAAC,GAAM,SAAAC,GAAS,OAAAC,GAAO,eAAAC,QAAoB;AACzE,QAAM,CAACC,GAAaC,CAAc,IAAIC,EAAS,EAAE,GAC3C,CAACC,GAASC,CAAU,IAAIF,EAAS,EAAE,GACnC,CAACG,GAAeC,CAAgB,IAAIJ,EAAS,EAAE,GAC/C,CAACK,GAAcC,CAAe,IAAIN,EAAS,IAAI,GAC/C,CAACO,GAASC,CAAU,IAAIR,EAAS;AAAA,IACrC,aAAa;AAAA,IACb,SAAS;AAAA,IACT,eAAe;AAAA,IACf,UAAU;AAAA,EAAA,CACX,GAEK,EAAE,UAAAS,IAAW,IAAI,iBAAAC,IAAkB,CAAA,GAAI,gBAAAC,IAAiB,CAAA,EAAC,IAAMC;AAAA,IACnE,CAACC,MAAUA,EAAM;AAAA,EAAA,GAGbC,IAAoBC;AAAA,IACxB,MACEL,EAAgB,KAAK,CAACM,MAAcA,EAAU,SAASb,CAAa,KACpE;AAAA,IACF,CAACO,GAAiBP,CAAa;AAAA,EAAA,GAG3Bc,IAAuBF,GAAQ,MAAM;AACzC,UAAMG,IAASJ,KAAA,gBAAAA,EAAmB;AAClC,QAAI,CAACI,EAAQ,QAAO,CAAA;AACpB,QAAI,OAAOA,KAAW;AACpB,aAAOA,EAAO,oBAAoB,CAAA;AAEpC,QAAI;AACF,aAAO,KAAK,MAAMA,CAAM,EAAE,oBAAoB,CAAA;AAAA,IAChD,QAAQ;AACN,aAAO,CAAA;AAAA,IACT;AAAA,EACF,GAAG,CAACJ,CAAiB,CAAC,GAEhBK,IAA2BJ,GAAQ,MAAM;AAC7C,UAAMK,IAAkBT,EAAe,OAAO,CAACU,OAAaA,GAAS,SAAS;AAC9E,QAAI,CAAClB,EAAe,QAAO,CAAA;AAE3B,UAAMmB,IAAiB,IAAI;AAAA,MACzBL,EACG,IAAI,CAACM,OAAS,OAAOA,MAAQ,EAAE,EAAE,KAAA,EAAO,aAAa,EACrD,OAAO,OAAO;AAAA,IAAA;AAGnB,WAAOH,EAAgB;AAAA,MAAO,CAACC,OAC7BC,EAAe,IAAI,OAAOD,GAAS,QAAQ,EAAE,EAAE,KAAA,EAAO,YAAA,CAAa;AAAA,IAAA;AAAA,EAEvE,GAAG,CAACJ,GAAsBN,GAAgBR,CAAa,CAAC,GAElDqB,IAAmBT,GAAQ,MAAM;AACrC,QAAkCV,KAAiB,KAAM,QAAO;AAChE,UAAMoB,IAAiB,OAAOpB,CAAY,EAAE,KAAA,EAAO,YAAA;AACnD,WACEc,EAAyB;AAAA,MACvB,CAACE,MACC,OAAOA,EAAS,QAAQ,EAAE,EAAE,OAAO,kBAAkBI;AAAA,IAAA,KACpD;AAAA,EAET,GAAG,CAACN,GAA0Bd,CAAY,CAAC,GAErCqB,IACJ5B,EAAY,KAAA,MAAW,MACvBG,EAAQ,KAAA,MAAW,MACnB,CAAC,CAACE,KACF,CAAC,CAACE,GAEEsB,IAAY,YAAY;;AAC5B,QAAID,GAAa;AACf,YAAME,IAAc9B,EAAY,KAAA,EAAO,cAAc,QAAQ,QAAQ,EAAE;AAQvE,UAPoBW,EAAS;AAAA,QAC3B,CAACoB,MACC,QAAOA,KAAA,gBAAAA,EAAG,kBAAgBA,KAAA,gBAAAA,EAAG,UAAQA,KAAA,gBAAAA,EAAG,iBAAgB,EAAE,EACvD,YAAA,EACA,QAAQ,QAAQ,EAAE,MAAMD;AAAA,MAAA,GAGd;AACf,QAAAE,GAAU;AAAA,UACR,SAAS,sBAAsBhC,CAAW;AAAA,UAC1C,MAAM;AAAA,QAAA,CACP,GACDU,EAAW,CAACuB,OAAO,EAAE,GAAGA,GAAG,aAAa,KAAO;AAC/C;AAAA,MACF;AAEA,UAAI;AACF,cAAMC,IAAU;AAAA,UACd,cAAclC;AAAA,UACd,mBAAmBG;AAAA,UACnB,cAAAI;AAAA,UACA,eAAAF;AAAA,QAAA,GAGI8B,IAAW,MAAMvD,GAAgBsD,CAAO;AAE9C,YAAIC,EAAS,MAAM;AACjB,gBAAMC,MAAeC,KAAAnE,IAAAiE,EAAS,SAAT,gBAAAjE,EAAe,WAAf,gBAAAmE,EAAwB,OAAMF,EAAS,MACtDG,KACJF,KAAA,gBAAAA,EAAc,SAAMG,KAAAJ,EAAS,SAAT,gBAAAI,GAAe,SAAMC,KAAAL,EAAS,SAAT,gBAAAK,GAAe;AAE1D,cAAIzC;AACF,gBAAI;AACF,oBAAMf,GAAoB;AAAA,gBACxB,YAAY;AAAA,kBACV,WAAAsD;AAAA,kBACA,QAAQ;AAAA,gBAAA;AAAA,cACV,CACD;AAAA,YACH,SAASG,GAAK;AACZ,sBAAQ,MAAM,mCAAmCA,CAAG;AAAA,YACtD;AAGF,UAAAT,GAAU;AAAA,YACR,SAAS;AAAA,YACT,MAAM;AAAA,UAAA,CACP,GAEDlC,EAAM;AAAA,YACJ,GAAGoC;AAAA,YACH,UAAU,CAAC,CAACnC;AAAA,YACZ,GAAIqC,KAAgB,OAAOA,KAAiB,WACxCA,IACA,CAAA;AAAA,YACJ,IAAIE,KAAa;AAAA,UAAA,CAClB,GAEDI,EAAA,GACA7C,EAAA;AAAA,QACF;AAAA,MACF,SAAS8C,GAAO;AACd,gBAAQ,MAAM,8BAA8BA,CAAK,GACjDX,GAAU,EAAE,SAAS,yBAAyB,MAAM,SAAS;AAAA,MAC/D;AAAA,IACF;AACE,MAAAtB,EAAW;AAAA,QACT,aAAa;AAAA,QACb,SAAS;AAAA,QACT,eAAe;AAAA,QACf,UAAU;AAAA,MAAA,CACX;AAAA,EAEL,GAEMgC,IAAc,MAAM;AACxB,IAAAzC,EAAe,EAAE,GACjBG,EAAW,EAAE,GACbE,EAAiB,EAAE,GACnBE,EAAgB,IAAI,GACpBE,EAAW;AAAA,MACT,aAAa;AAAA,MACb,SAAS;AAAA,MACT,eAAe;AAAA,MACf,UAAU;AAAA,IAAA,CACX;AAAA,EACH,GAEMkC,IAAmB,MAAM;AAC7B,IAAAF,EAAA,GACA7C,EAAA;AAAA,EACF;AAEA,SACE,gBAAAvE;AAAA,IAACuH;AAAA,IAAA;AAAA,MACC,MAAAjD;AAAA,MACA,SAASgD;AAAA,MACT,UAAS;AAAA,MACT,WAAS;AAAA,MACT,WAAU;AAAA,MACV,YAAY;AAAA,QACV,IAAI,EAAE,cAAc,QAAQ,SAAS,MAAA;AAAA,MAAM;AAAA,MAG7C,UAAA;AAAA,QAAA,gBAAAtH,EAACwH,IAAA,EAAY,WAAU,iBACrB,UAAA;AAAA,UAAA,gBAAAxH,EAACD,GAAA,EAAI,WAAU,kBACb,UAAA;AAAA,YAAA,gBAAAE,EAACF,KAAI,WAAU,YACb,4BAACG,GAAA,EAAgB,MAAMoB,IAAW,EAAA,CACpC;AAAA,YACA,gBAAAtB,EAACD,GAAA,EAAI,WAAU,aACb,UAAA;AAAA,cAAA,gBAAAE,EAACK,GAAA,EAAW,WAAU,SAAQ,UAAA,sBAAkB;AAAA,cAChD,gBAAAL,EAACK,GAAA,EAAW,WAAU,YAAW,UAAA,qCAAA,CAEjC;AAAA,YAAA,EAAA,CACF;AAAA,UAAA,GACF;AAAA,UACA,gBAAAL;AAAA,YAACG;AAAA,YAAA;AAAA,cACC,cAAW;AAAA,cACX,SAASkH;AAAA,cACT,WAAU;AAAA,cACV,MAAK;AAAA,cAEL,UAAA,gBAAArH,EAACC,GAAA,EAAgB,MAAMuH,GAAA,CAAS;AAAA,YAAA;AAAA,UAAA;AAAA,QAClC,GACF;AAAA,QAEA,gBAAAzH,EAAC0H,IAAA,EAAc,WAAU,kBACvB,UAAA;AAAA,UAAA,gBAAA1H,EAACD,GAAA,EAAI,WAAU,eACb,UAAA;AAAA,YAAA,gBAAAE,EAACK,GAAA,EAAW,WAAU,eAAc,UAAA,gBAAY;AAAA,YAChD,gBAAAL;AAAA,cAACY;AAAA,cAAA;AAAA,gBACC,WAAS;AAAA,gBACT,aAAY;AAAA,gBACZ,OAAO6D;AAAA,gBACP,UAAU,CAACiD,MAAMhD,EAAegD,EAAE,OAAO,KAAK;AAAA,gBAC9C,QAAQ,MAAMvC,EAAW,CAACuB,OAAO,EAAE,GAAGA,GAAG,aAAa,GAAA,EAAO;AAAA,gBAC7D,OAAOxB,EAAQ,eAAe,CAACT,EAAY,KAAA;AAAA,gBAC3C,YACES,EAAQ,eAAe,CAACT,EAAY,KAAA,IAChC,6BACA;AAAA,gBAEN,WAAU;AAAA,gBACV,WAAW;AAAA,kBACT,OAAO;AAAA,oBACL,gBACE,gBAAAzE,EAACa,IAAA,EAAe,UAAS,SACvB,UAAA,gBAAAb,EAACC,GAAA,EAAgB,MAAM0H,IAAO,WAAU,aAAA,CAAa,EAAA,CACvD;AAAA,kBAAA;AAAA,gBAEJ;AAAA,cACF;AAAA,YAAA;AAAA,UACF,GACF;AAAA,UAEA,gBAAA5H,EAACD,GAAA,EAAI,WAAU,eACb,UAAA;AAAA,YAAA,gBAAAE,EAACK,GAAA,EAAW,WAAU,eAAc,UAAA,6BAEpC;AAAA,YACA,gBAAAL;AAAA,cAACY;AAAA,cAAA;AAAA,gBACC,WAAS;AAAA,gBACT,aAAY;AAAA,gBACZ,OAAOgE;AAAA,gBACP,UAAU,CAAC8C,MAAM7C,EAAW6C,EAAE,OAAO,KAAK;AAAA,gBAC1C,QAAQ,MAAMvC,EAAW,CAACuB,OAAO,EAAE,GAAGA,GAAG,SAAS,GAAA,EAAO;AAAA,gBACzD,OAAOxB,EAAQ,WAAW,CAACN,EAAQ,KAAA;AAAA,gBACnC,YACEM,EAAQ,WAAW,CAACN,EAAQ,KAAA,IACxB,+BACA;AAAA,gBAEN,WAAU;AAAA,gBACV,WAAW;AAAA,kBACT,OAAO;AAAA,oBACL,gBACE,gBAAA5E,EAACa,IAAA,EAAe,UAAS,SACvB,UAAA,gBAAAb;AAAA,sBAACC;AAAA,sBAAA;AAAA,wBACC,MAAM2H;AAAA,wBACN,WAAU;AAAA,sBAAA;AAAA,oBAAA,EACZ,CACF;AAAA,kBAAA;AAAA,gBAEJ;AAAA,cACF;AAAA,YAAA;AAAA,UACF,GACF;AAAA,UAEA,gBAAA7H,EAACD,GAAA,EAAI,WAAU,eACb,UAAA;AAAA,YAAA,gBAAAE,EAACK,GAAA,EAAW,WAAU,eAAc,UAAA,kBAAc;AAAA,YAClD,gBAAAL;AAAA,cAAC6H;AAAA,cAAA;AAAA,gBACC,SAASxC;AAAA,gBACT,gBAAgB,CAACyC,OAAWA,KAAA,gBAAAA,EAAQ,SAAQ;AAAA,gBAC5C,sBAAsB,CAACA,GAAQvG,MAAUuG,EAAO,SAASvG,EAAM;AAAA,gBAC/D,OAAOkE;AAAA,gBACP,UAAU,CAACsC,GAAGC,MAAa;AACzB,kBAAAjD,GAAiBiD,KAAA,gBAAAA,EAAU,SAAQ,EAAE,GACrC/C,EAAgB,IAAI;AAAA,gBACtB;AAAA,gBACA,QAAQ,MACNE,EAAW,CAACuB,OAAO,EAAE,GAAGA,GAAG,eAAe,GAAA,EAAO;AAAA,gBAEnD,aAAa,CAACuB,MACZ,gBAAAjI;AAAA,kBAACY;AAAA,kBAAA;AAAA,oBACE,GAAGqH;AAAA,oBACJ,WAAS;AAAA,oBACT,aAAY;AAAA,oBACZ,OAAO/C,EAAQ,iBAAiB,CAACJ;AAAA,oBACjC,YACEI,EAAQ,iBAAiB,CAACJ,IACtB,+BACA;AAAA,oBAEN,WAAU;AAAA,oBACV,YAAY;AAAA,sBACV,GAAGmD,EAAO;AAAA,sBACV,gBACE,gBAAAlI,EAAAmI,IAAA,EACE,UAAA;AAAA,wBAAA,gBAAAlI,EAACa,IAAA,EAAe,UAAS,SACvB,UAAA,gBAAAb;AAAA,0BAACC;AAAA,0BAAA;AAAA,4BACC,MAAMkI;AAAA,4BACN,WAAU;AAAA,0BAAA;AAAA,wBAAA,GAEd;AAAA,wBACCF,EAAO,WAAW;AAAA,sBAAA,EAAA,CACrB;AAAA,oBAAA;AAAA,kBAEJ;AAAA,gBAAA;AAAA,cACF;AAAA,YAAA;AAAA,UAEJ,GACF;AAAA,UAEA,gBAAAlI,EAACD,GAAA,EAAI,WAAU,eACb,UAAA;AAAA,YAAA,gBAAAE,EAACK,GAAA,EAAW,WAAU,eAAc,UAAA,aAAS;AAAA,YAC7C,gBAAAL;AAAA,cAAC6H;AAAA,cAAA;AAAA,gBACC,SAAS/B;AAAA,gBACT,UAAU,CAAChB;AAAA,gBACX,gBAAgB,CAACgD,OACfA,KAAA,gBAAAA,EAAQ,UACRA,KAAA,gBAAAA,EAAQ,WACRA,KAAA,gBAAAA,EAAQ,eACRA,KAAA,gBAAAA,EAAQ,UACRA,KAAA,gBAAAA,EAAQ,OACR;AAAA,gBAEF,sBAAsB,CAACA,GAAQvG,MAC7B,QAAOuG,KAAA,gBAAAA,EAAQ,SAAQ,EAAE,EAAE,KAAA,EAAO,YAAA,MAClC,QAAOvG,KAAA,gBAAAA,EAAO,SAAQ,EAAE,EAAE,KAAA,EAAO,YAAA;AAAA,gBAEnC,OAAO4E;AAAA,gBACP,UAAU,CAAC4B,GAAGC,MAAa/C,GAAgB+C,KAAA,gBAAAA,EAAU,SAAQ,IAAI;AAAA,gBACjE,QAAQ,MAAM7C,EAAW,CAACuB,OAAO,EAAE,GAAGA,GAAG,UAAU,GAAA,EAAO;AAAA,gBAC1D,aAAa,CAACuB,MACZ,gBAAAjI;AAAA,kBAACY;AAAA,kBAAA;AAAA,oBACE,GAAGqH;AAAA,oBACJ,WAAS;AAAA,oBACT,aACEnD,IAAgB,qBAAqB;AAAA,oBAEvC,OAAOI,EAAQ,YAAY,CAACF;AAAA,oBAC5B,YACEE,EAAQ,YAAY,CAACF,IACjBF,IACE,0BACA,gCACF;AAAA,oBAEN,WAAU;AAAA,oBACV,YAAY;AAAA,sBACV,GAAGmD,EAAO;AAAA,sBACV,gBACE,gBAAAlI,EAAAmI,IAAA,EACE,UAAA;AAAA,wBAAA,gBAAAlI,EAACa,IAAA,EAAe,UAAS,SACvB,UAAA,gBAAAb;AAAA,0BAACC;AAAA,0BAAA;AAAA,4BACC,MAAMmI;AAAA,4BACN,WAAU;AAAA,0BAAA;AAAA,wBAAA,GAEd;AAAA,wBACCH,EAAO,WAAW;AAAA,sBAAA,EAAA,CACrB;AAAA,oBAAA;AAAA,kBAEJ;AAAA,gBAAA;AAAA,cACF;AAAA,YAAA;AAAA,UAEJ,EAAA,CACF;AAAA,QAAA,GACF;AAAA,QAEA,gBAAAjI,EAACqI,IAAA,EAAc,WAAU,kBACvB,UAAA,gBAAArI;AAAA,UAACM;AAAA,UAAA;AAAA,YACC,SAASgG;AAAA,YACT,WAAU;AAAA,YACV,WAAS;AAAA,YACT,UAAU,CAACD;AAAA,YAEV,cAAgB,gBAAgB;AAAA,UAAA;AAAA,QAAA,EACnC,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAEAjC,GAAsB,YAAY;AAAA,EAChC,MAAM5D,EAAU,KAAK;AAAA,EACrB,SAASA,EAAU,KAAK;AAAA,EACxB,OAAOA,EAAU,KAAK;AAAA,EACtB,eAAeA,EAAU;AAC3B;ACpZO,MAAM8H,KAAsB,CAAC,EAAE,UAAAC,GAAU,WAAAC,QAG1C,CAFgBjD,GAAYkD,EAAc,KAE1B,CAACD,IACZD,IAIP,gBAAAvI;AAAA,EAACF;AAAA,EAAA;AAAA,IACC,IAAI;AAAA,MACF,SAAS;AAAA,MACT,qBAAqB;AAAA,MACrB,KAAK;AAAA,MACL,OAAO;AAAA,IAAA;AAAA,IAGR,UAAA,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,CAACiI,GAAGvF,MACtB,gBAAAxC;AAAA,MAACF;AAAA,MAAA;AAAA,QAEC,IAAI;AAAA,UACF,QAAQ;AAAA,UACR,iBAAiB;AAAA,UACjB,cAAc;AAAA,UACd,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,oBAAoB;AAAA,YAClB,MAAM,EAAE,SAAS,EAAA;AAAA,YACjB,OAAO,EAAE,SAAS,IAAA;AAAA,YAClB,QAAQ,EAAE,SAAS,EAAA;AAAA,UAAE;AAAA,QACvB;AAAA,MACF;AAAA,MAZK0C;AAAA,IAAA,CAcR;AAAA,EAAA;AAAA;AAKP8F,GAAoB,YAAY;AAAA,EAC9B,UAAU9H,EAAU;AAAA,EACpB,WAAWA,EAAU;AACvB;ACPA,MAAMkI,KAAoC,MAAM;AAC9C,QAAMhI,IAAWC,GAAA,GACX,EAAE,UAAAyE,GAAU,oBAAAuD,GAAoB,gBAAAC,EAAA,IAAmBrD;AAAA,IACvD,CAACC,MAAUA,EAAM;AAAA,EAAA,GAEb,CAACqD,GAAYC,CAAa,IAAInE,EAAS,EAAE,GACzC,CAACoE,GAAaC,CAAc,IAAIrE,EAAS,EAAK,GAC9C,CAACsE,GAAoBC,CAAqB,IAAIvE,EAAS,EAAK,GAC5D,CAACwE,GAAcC,CAAe,IAAIzE,EAAS,EAAK;AAEtD,EAAA0E,GAAU,MAAM;AACd,KAAI,CAACjE,KAAYA,EAAS,WAAW,OACb,YAAY;;AAChC,UAAI;AACF,QAAA8D,EAAsB,EAAI;AAC1B,cAAMI,IAAmB,MAAMtG,GAAA;AAC/B,aAAIL,IAAA2G,KAAA,gBAAAA,EAAkB,SAAlB,QAAA3G,EAAwB,QAAQ;AAClC,gBAAM4G,IAAiBD,EAAiB,KAAK,OAAO;AAAA,YAClDjH;AAAA,UAAA;AAEF,UAAA3B,EAAS8I,GAAYD,CAAc,CAAC;AAAA,QACtC;AAAA,MACF,SAASE,GAAY;AACnB,gBAAQ,KAAK,oCAAoCA,CAAU;AAAA,MAC7D,UAAA;AACE,QAAAP,EAAsB,EAAK;AAAA,MAC7B;AAAA,IACF,GACA;AAAA,EAEJ,GAAG,CAACxI,GAAU0E,CAAQ,CAAC;AAEvB,QAAMoD,KACH,CAACI,KAAkBK,KAAsBE,OACzC,CAAC/D,KAAYA,EAAS,WAAW,IAE9BsE,IAAsB,CAACC,MAAO;AAClC,IAAAjJ,EAASkJ,GAAcD,CAAE,CAAC;AAAA,EAC5B,GAEME,IAAyB,CAACvG,MAAS;AACvC,IAAA5C,EAASoJ,GAAiBxG,CAAI,CAAC;AAAA,EACjC,GAEMyG,IAAkB,MAAM;AAC5B,UAAMC,IAAgBC,EACnB,OAAO,CAACzD,MAAMA,KAAKA,EAAE,EAAE,EACvB,IAAI,CAACA,MAAMA,EAAE,EAAE;AAKlB,QAHEwD,EAAc,SAAS,KACvBA,EAAc,MAAM,CAACL,OAAQhB,KAAsB,CAAA,GAAI,SAASgB,CAAE,CAAC,GAE1C;AACzB,YAAMO,KAAkBvB,KAAsB,CAAA,GAAI;AAAA,QAChD,CAACgB,MAAO,CAACK,EAAc,SAASL,CAAE;AAAA,MAAA;AAEpC,MAAAjJ,EAASyJ,GAAsBD,CAAc,CAAC;AAAA,IAChD,OAAO;AACL,YAAMA,IAAiB;AAAA,QACrB,GAAG,oBAAI,IAAI,CAAC,GAAIvB,KAAsB,CAAA,GAAK,GAAGqB,CAAa,CAAC;AAAA,MAAA;AAE9D,MAAAtJ,EAASyJ,GAAsBD,CAAc,CAAC;AAAA,IAChD;AAAA,EACF,GAEME,IAAuB,YAAY;AACvC,QAAI;AACF,MAAAhB,EAAgB,EAAI,GACpB,MAAMzF,GAAA;AAAA,IACR,SAASyD,GAAO;AACd,MAAAX,GAAU;AAAA,QACR,UAASW,KAAA,gBAAAA,EAAO,YAAW;AAAA,QAC3B,MAAM;AAAA,MAAA,CACP;AACD;AAAA,IACF;AAEA,UAAMiD,IAAc,CAAA,GACdC,IAAgB,CAAA;AAEtB,IAAAlF,KAAA,QAAAA,EAAU,QAAQ,CAACoB,MAAM;AACvB,UAAI,CAACA,EAAG;AAER,YAAM+D,IAAgB5B,EAAmB,SAASnC,EAAE,EAAE,GAChDgE,IAAY,CAAC,CAAChE,EAAE;AAEtB,MAAI+D,MAAkBC,MAChBD,IAAeF,EAAY,KAAK7D,EAAE,EAAE,IACnC8D,EAAc,KAAK9D,EAAE,EAAE;AAAA,IAEhC;AAEA,QAAI;AACF,MAAI6D,EAAY,UACd,MAAM3G,GAA6B;AAAA,QACjC,YAAY;AAAA,UACV,YAAY2G,EAAY,KAAK,GAAG;AAAA,UAChC,QAAQ;AAAA,QAAA;AAAA,MACV,CACD,GAGCC,EAAc,UAChB,MAAM5G,GAA6B;AAAA,QACjC,YAAY;AAAA,UACV,YAAY4G,EAAc,KAAK,GAAG;AAAA,UAClC,QAAQ;AAAA,QAAA;AAAA,MACV,CACD,GAGH5J,EAAS+J,IAA0B,GACnC/J,EAASgK,GAA4B,EAAK,CAAC,GAE3ChK,EAASO,GAAe,SAAS,CAAC;AAAA,IACpC,SAASmG,GAAO;AACd,MAAAX,GAAU;AAAA,QACR,UAASW,KAAA,gBAAAA,EAAO,YAAW;AAAA,QAC3B,MAAM;AAAA,MAAA,CACP;AAAA,IACH,UAAA;AACE,MAAAgC,EAAgB,EAAK;AAAA,IACvB;AAAA,EACF,GAEMuB,IAAcvF,KAAY,CAAA,GAC1BwF,IAAoBjC,KAAsB,CAAA,GAE1CsB,IAAmBU,EAAY;AAAA,IACnC,CAACnE,MAAMA,MAAMA,EAAE,QAAQ,IAAI,cAAc,SAASqC,EAAW,YAAA,CAAa;AAAA,EAAA,GAGtEmB,IAAgBC,EACnB,OAAO,CAACzD,MAAMA,KAAKA,EAAE,EAAE,EACvB,IAAI,CAACA,MAAMA,EAAE,EAAE,GACZqE,IACJb,EAAc,SAAS,KACvBA,EAAc,MAAM,CAACL,MAAOiB,EAAkB,SAASjB,CAAE,CAAC;AAC5D,SACE,gBAAA5J,EAACD,GAAA,EAAI,WAAU,gCACb,UAAA;AAAA,IAAA,gBAAAC,EAACD,GAAA,EAAI,WAAU,mBACb,UAAA;AAAA,MAAA,gBAAAE,EAACF,GAAA,EAAI,IAAI,EAAE,IAAI,KAaf;AAAA,MACA,gBAAAE;AAAA,QAACK;AAAA,QAAA;AAAA,UACC,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,IAAI,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,WAAW,UAAU,OAAA;AAAA,UAC3D,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAGD,gBAAAL;AAAA,QAACK;AAAA,QAAA;AAAA,UACC,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,IAAI,EAAE,OAAO,WAAW,IAAI,GAAG,YAAY,KAAK,SAAS,SAAS,UAAU,OAAA;AAAA,UAC7E,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAKD,gBAAAN,EAACD,GAAA,EAAI,WAAU,oBACb,UAAA;AAAA,QAAA,gBAAAC,EAACD,GAAA,EAAI,WAAU,kBACb,UAAA;AAAA,UAAA,gBAAAC,EAACD,GAAA,EAAI,WAAU,eACb,UAAA;AAAA,YAAA,gBAAAE,EAACF,KAAI,WAAU,YACb,4BAACG,GAAA,EAAgB,MAAM6K,IAAa,EAAA,CACtC;AAAA,YACA,gBAAA/K,EAACD,GAAA,EAAI,WAAU,aACb,UAAA;AAAA,cAAA,gBAAAE,EAACK,GAAA,EAAW,WAAU,SAAQ,UAAA,mBAAe;AAAA,cAC7C,gBAAAL,EAACK,GAAA,EAAW,WAAU,YAAW,UAAA,uFAAA,CAGjC;AAAA,YAAA,EAAA,CACF;AAAA,UAAA,GACF;AAAA,UAEA,gBAAAN,EAACD,GAAA,EAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,EAAA,GACrD,UAAA;AAAA,YAAA,gBAAAE;AAAA,cAACM;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,SAASyJ;AAAA,gBACT,UAAUE,EAAiB,WAAW;AAAA,gBACtC,WAAW,gBAAAjK,EAACC,GAAA,EAAgB,MAAM8K,GAAA,CAAe;AAAA,gBACjD,IAAI;AAAA,kBACF,OAAO;AAAA,kBACP,aAAa;AAAA,kBACb,YAAY;AAAA,kBACZ,UAAU;AAAA,kBACV,SAAS;AAAA,kBACT,QAAQ;AAAA,kBACR,cAAc;AAAA,kBACd,eAAe;AAAA,kBACf,YAAY;AAAA,kBACZ,YAAY;AAAA,kBACZ,WAAW;AAAA,oBACT,iBAAiB;AAAA,oBACjB,aAAa;AAAA,kBAAA;AAAA,gBACf;AAAA,gBAGD,cAAwB,iBAAiB;AAAA,cAAA;AAAA,YAAA;AAAA,YAE5C,gBAAA/K,EAACF,GAAA,EAAI,WAAU,cACb,UAAA,gBAAAE;AAAA,cAACY;AAAA,cAAA;AAAA,gBACC,WAAS;AAAA,gBACT,aAAY;AAAA,gBACZ,OAAOiI;AAAA,gBACP,UAAU,CAACnB,MAAMoB,EAAcpB,EAAE,OAAO,KAAK;AAAA,gBAC7C,YAAY;AAAA,kBACV,gBACE,gBAAA1H,EAACa,IAAA,EAAe,UAAS,SACvB,UAAA,gBAAAb;AAAA,oBAACC;AAAA,oBAAA;AAAA,sBACC,MAAMa;AAAA,sBACN,WAAU;AAAA,oBAAA;AAAA,kBAAA,EACZ,CACF;AAAA,gBAAA;AAAA,cAEJ;AAAA,YAAA,EACF,CACF;AAAA,UAAA,EAAA,CACF;AAAA,QAAA,GACF;AAAA,QAEA,gBAAAd,EAACsI,IAAA,EAAoB,WAAAE,GACnB,UAAA,gBAAAzI,EAACgB,IAAA,EAAK,WAAS,IAAC,SAAS,GAAG,WAAU,gBACnC,UAAA;AAAA,UAAAkJ,EAAiB,IAAI,CAAC9I,MACrB,gBAAAnB,EAACe,IAAA,EACC,UAAA,gBAAAf;AAAA,YAACkB;AAAA,YAAA;AAAA,cACC,SAAAC;AAAA,cACA,UAAUyJ,EAAkB,SAASzJ,KAAA,gBAAAA,EAAS,EAAE;AAAA,cAChD,SAAS,MAAMuI,EAAoBvI,KAAA,gBAAAA,EAAS,EAAE;AAAA,YAAA;AAAA,UAAA,KAJvCA,KAAA,gBAAAA,EAAS,EAMpB,CACD;AAAA,4BACAJ,IAAA,EACC,UAAA,gBAAAf;AAAA,YAACkB;AAAA,YAAA;AAAA,cACC,UAAU;AAAA,cACV,SAAS,MAAM8H,EAAe,EAAI;AAAA,YAAA;AAAA,UAAA,EACpC,CACF;AAAA,QAAA,EAAA,CACF,EAAA,CACF;AAAA,QAEA,gBAAAjJ,EAACD,GAAA,EAAI,WAAU,kBACb,UAAA;AAAA,UAAA,gBAAAC,EAACM,GAAA,EAAW,WAAU,kBACpB,UAAA;AAAA,YAAA,gBAAAL,EAAC,QAAA,EAAM,YAAmB,OAAA,CAAO;AAAA,YAAO;AAAA,UAAA,GAC1C;AAAA,UACA,gBAAAA;AAAA,YAACM;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,UAAUqI,EAAmB,WAAW,KAAKH,KAAaW;AAAA,cAC1D,SAAS,gBAAAnJ,EAACC,GAAA,EAAgB,MAAMM,GAAA,CAAc;AAAA,cAC9C,SAAS6J;AAAA,cACV,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAED,EAAA,CACF;AAAA,MAAA,EAAA,CACF;AAAA,IAAA,GACF;AAAA,IAEA,gBAAApK;AAAA,MAACoE;AAAA,MAAA;AAAA,QACC,MAAM2E;AAAA,QACN,SAAS,MAAMC,EAAe,EAAK;AAAA,QACnC,OAAOa;AAAA,MAAA;AAAA,IAAA;AAAA,EACT,GACF;AAEJ,GCxQMmB,KAA4B,CAAC,QAAQ,aAAa,UAAU,GAC5DC,KAAoB;AAAA,EACxB,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,UAAU;AAAA,EACV,eAAe;AAAA,EACf,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,IAAI;AACN,GAEMC,KAAe;AAAA,EACnB,4BAA4B;AAAA,IAC1B,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,UAAU;AAAA,IACV,cAAc,EAAE,aAAa,WAAW,aAAa,QAAA;AAAA,IACrD,oBAAoB,EAAE,aAAa,UAAA;AAAA,IACnC,0BAA0B,EAAE,aAAa,UAAA;AAAA,IACzC,2BAA2B,EAAE,aAAa,UAAA;AAAA,IAC1C,kBAAkB;AAAA,MAChB,iBAAiB;AAAA,MACjB,6BAA6B;AAAA,QAC3B,qBAAqB;AAAA,MAAA;AAAA,IACvB;AAAA,EACF;AAAA,EAEF,yBAAyB;AAAA,IACvB,UAAU;AAAA,IACV,iBAAiB,EAAE,OAAO,UAAA;AAAA,EAAU;AAExC,GAEMC,KAAkB,CAACC,MAAe;AACtC,MAAI,CAACA,EAAY,QAAO,CAAA;AACxB,MAAI,OAAOA,KAAe,SAAU,QAAOA;AAC3C,MAAI;AACF,WAAO,KAAK,MAAMA,CAAU;AAAA,EAC9B,QAAQ;AACN,WAAO,CAAA;AAAA,EACT;AACF,GAEMC,KAAmB,CAACC,MAAa;AACrC,QAAMC,IAAiB,OAAOD,KAAY,EAAE,EAAE,YAAA;AAC9C,SAAON,GAA0B;AAAA,IAAK,CAACQ,MACrCD,EAAe,SAASC,CAAO;AAAA,EAAA;AAEnC,GAEMC,KAAyB,CAAC;AAAA,EAC9B,MAAApH;AAAA,EACA,SAAAC;AAAA,EACA,gBAAAoH,IAAiB;AAAA,EACjB,SAAAC;AACF,MAAM;AACJ,QAAMjL,IAAWC,GAAA,GACX,EAAE,gBAAA2E,GAAgB,UAAAF,GAAU,mBAAAwG,GAAmB,gBAAAC,MACnDtG,GAAY,CAACC,MAAUA,EAAM,YAAY,GAErC,CAACsG,GAAUC,CAAW,IAAIpH,EAAS,EAAK,GACxC,CAACqH,GAASC,CAAU,IAAItH,EAAS,EAAK,GACtC,CAACuH,GAAQC,CAAS,IAAIxH,EAAS,EAAK,GAEpC,CAACyH,GAAcC,CAAe,IAAI1H,EAAS;AAAA,IAC/C,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ,CAAA;AAAA,EAAC,CACV,GAEK,CAAC2H,GAASC,CAAU,IAAI5H,EAAS,EAAE,GACnC,CAAC6H,GAASC,CAAU,IAAI9H,EAAS,EAAE,GACnC,CAAC+H,GAAeC,CAAgB,IAAIhI,EAAS,EAAE,GAC/C,CAACiI,GAAgBC,CAAiB,IAAIlI,EAAS,EAAE;AAEvD,EAAA0E,GAAU,MAAM;AACd,IAAIhF,MACF0H,EAAY,CAAC,CAACL,CAAc,GAC5BoB,EAAA,GACAC,EAAA;AAAA,EAEJ,GAAG,CAAC1I,GAAMqH,CAAc,CAAC;AAEzB,QAAMqB,IAAc,YAAY;;AAC9B,QAAI,GAAAlB,KAAA,gBAAAA,EAAgB,UAAS;AAC7B,UAAI;AACF,QAAAI,EAAW,EAAI;AACf,cAAMe,IAAM,MAAMhJ,GAAA;AAClB,SAAIrB,IAAAqK,KAAA,gBAAAA,EAAK,SAAL,QAAArK,EAAW,UACbjC,EAASuM,GAAkBD,EAAI,KAAK,MAAM,CAAC;AAAA,MAE/C,SAAStF,GAAG;AACV,gBAAQ,MAAM,0BAA0BA,CAAC;AAAA,MAC3C,UAAA;AACE,QAAAuE,EAAW,EAAK;AAAA,MAClB;AAAA,EACF,GAEMa,IAAY,MAAM;AACtB,IAAAP,EAAW,EAAE,GACbE,EAAW,EAAE,GACbE,EAAiB,EAAE,GACnBE,EAAkB,EAAE;AAAA,EACtB,GAEMK,KAAmBxH,GAAQ,MAAM;AACrC,QAAI,CAACgH,EAAe,QAAO,CAAA;AAC3B,UAAMS,IAAWtB,EAAe,KAAK,CAACuB,MAAMA,EAAE,cAAcV,CAAa,GACnEtB,IAAaD,GAAgBgC,KAAA,gBAAAA,EAAU,UAAU;AAEvD,WAAO,OAAO,QAAQ/B,CAAU,EAC7B,OAAO,CAAC,CAAA,EAAGE,CAAQ,MAAMD,GAAiBC,CAAQ,CAAC,EACnD,IAAI,CAAC,CAAC+B,CAAU,MAAMA,CAAU,EAChC,KAAK,CAACC,GAAMC,MAAUD,EAAK,cAAcC,CAAK,CAAC;AAAA,EACpD,GAAG,CAACb,GAAeb,CAAc,CAAC,GAE5B2B,KAAkB9H,GAAQ,MACvB,CAAC,GAAImG,KAAkB,CAAA,CAAG,EAAE;AAAA,IAAK,CAACyB,GAAMC,MAC7CD,EAAK,UAAU,cAAcC,EAAM,SAAS;AAAA,EAAA,GAE7C,CAAC1B,CAAc,CAAC,GAEb4B,IAAgB/H;AAAA,IACpB,OAAMJ,KAAA,gBAAAA,EAAgB,IAAI,CAACoI,MAAA;;AAAO,cAAA/K,IAAA+K,EAAG,SAAH,gBAAA/K,EAAS;AAAA,WAAkB,CAAA;AAAA,IAC7D,CAAC2C,CAAc;AAAA,EAAA,GAGXqI,IACJ,CAAC,CAACnB,KAAWiB,EAAc,SAASjB,EAAQ,OAAO,aAAa,GAE5DoB,IACJtB,EAAQ,KAAA,KACRE,EAAQ,KAAA,KACR,CAACmB,KACDjB,KACAE,KACA,CAACV,GAEG2B,IAAa,YAAY;;AAC7B,QAAI;AACF,MAAA1B,EAAU,EAAI;AACd,YAAMxF,IAAU;AAAA,QACd,MAAM2F,EAAQ,KAAA;AAAA,QACd,MAAME,EAAQ,KAAA;AAAA,QACd,WAAWE;AAAA,QACX,YAAYE;AAAA,QACZ,WAAW;AAAA,MAAA,GAGPI,IAAM,MAAMpJ,GAAa+C,CAAO;AAEtC,YAAIhE,IAAAqK,KAAA,gBAAAA,EAAK,SAAL,gBAAArK,EAAW,aAAY,IAAO;AAChC,QAAA8D,GAAU,EAAE,SAAS,gCAAgC,MAAM,WAAW;AACtE,cAAMqH,MAAkB9G,KAAAF,IAAAkG,KAAA,gBAAAA,EAAK,SAAL,gBAAAlG,EAAW,WAAX,gBAAAE,EAAoB,OAAM;AAAA,UAChD,MAAML,EAAQ;AAAA,UACd,MAAMA,EAAQ;AAAA,UACd,WAAWA,EAAQ;AAAA,UACnB,YAAYA,EAAQ;AAAA,UACpB,WAAWA,EAAQ;AAAA,QAAA;AAErB,QAAAjG,EAASqN,GAAyBD,CAAe,CAAC,GAClDnC,KAAA,QAAAA,EAAUmC,IACVhB,EAAA,GACIpB,IACFpH,EAAA,IAEAyH,EAAY,EAAK;AAAA,MAErB;AACE,cAAM,IAAI,MAAM,0BAA0B;AAAA,IAE9C,SAASrE,GAAG;AACV,cAAQ,MAAMA,CAAC,GACfjB,GAAU;AAAA,QACR,UAASiB,KAAA,gBAAAA,EAAG,YAAW;AAAA,QACvB,MAAM;AAAA,MAAA,CACP;AAAA,IACH,UAAA;AACE,MAAAyE,EAAU,EAAK;AAAA,IACjB;AAAA,EACF,GAEM6B,IAAqB,OAAON,GAAIO,MAAc;;AAClD,QAAI,CAACA,GAAW;AACd,YAAMC,IAAgB9I,KAAA,gBAAAA,EAClB,OAAO,CAACoB,MAAM;AACd,cAAM2H,IAAYvC,KAAA,gBAAAA,EAAmB,KAAK,CAACwC,OAAOA,GAAG,OAAO5H,EAAE,KACxD6H,IAAwB;AAAA,WAC5BF,KAAA,gBAAAA,EAAW,iBACX3H,EAAE,gBACFA,EAAE,kBACF;AAAA,QAAA,GAEI8H,KAAS,OAAOZ,EAAG,QAAQ,EAAE;AACnC,eAAOW,MAA0BC,MAAUA,OAAW;AAAA,MACxD,GACC,IAAI,CAAC9H,MAAMA,EAAE,gBAAgBA,EAAE;AAElC,WAAI0H,KAAA,gBAAAA,EAAe,UAAS,GAAG;AAC7B,QAAA7B,EAAgB;AAAA,UACd,MAAM;AAAA,UACN,QAAQqB,EAAG;AAAA,UACX,QAAQQ;AAAA,QAAA,CACT;AACD;AAAA,MACF;AAAA,IACF;AAEA,QAAI;AACF,YAAMvH,IAAU;AAAA,QACd,MAAM+G,EAAG;AAAA,QACT,WAAWO;AAAA,MAAA,GAGPjB,IAAM,MAAMjJ,GAAe4C,CAAO;AAExC,YAAIhE,IAAAqK,KAAA,gBAAAA,EAAK,SAAL,gBAAArK,EAAW,aAAY;AACzB,QAAA8D,GAAU;AAAA,UACR,SAAS,aAAawH,IAAY,cAAc,aAAa;AAAA,UAC7D,MAAM;AAAA,QAAA,CACP,GACDvN;AAAA,UACE6N,GAA2B;AAAA,YACzB,MAAMb,EAAG;AAAA,YACT,WAAWO;AAAA,UAAA,CACZ;AAAA,QAAA;AAAA;AAGH,cAAM,IAAI,MAAM,mCAAmC;AAAA,IAEvD,SAASvG,GAAG;AACV,cAAQ,MAAMA,CAAC,GACfjB,GAAU;AAAA,QACR,UAASiB,KAAA,gBAAAA,EAAG,YAAW;AAAA,QACvB,MAAM;AAAA,MAAA,CACP;AAAA,IACH;AAAA,EACF;AAEA,SACE,gBAAA3H;AAAA,IAACuH;AAAA,IAAA;AAAA,MACC,MAAAjD;AAAA,MACA,SAAAC;AAAA,MACA,UAAS;AAAA,MACT,WAAS;AAAA,MACT,WAAU;AAAA,MACV,YAAY;AAAA,QACV,IAAI;AAAA,UACF,cAAc;AAAA,UACd,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,WAAW;AAAA,QAAA;AAAA,MACb;AAAA,MAGF,UAAA;AAAA,QAAA,gBAAAvE,EAACwH,MAAY,WAAU,iBAAgB,IAAI,EAAE,IAAI,OAC/C,UAAA;AAAA,UAAA,gBAAAxH,EAACD,GAAA,EAAI,WAAU,kBACb,UAAA;AAAA,YAAA,gBAAAE,EAACF,KAAI,WAAU,YACb,4BAACG,GAAA,EAAgB,MAAMmI,IAAe,EAAA,CACxC;AAAA,YACA,gBAAArI,EAACD,GAAA,EAAI,WAAU,aACb,UAAA;AAAA,cAAA,gBAAAE,EAACK,GAAA,EAAW,WAAU,SACnB,UAAAyL,IAAW,sBAAsB,uBACpC;AAAA,cACC,CAACA,KACA,gBAAA/L,EAACM,GAAA,EAAW,WAAU,YACnB,UAAA;AAAA,iBAAAiF,KAAA,gBAAAA,EAAgB,WAAU;AAAA,gBAAE;AAAA,iBAC5BA,KAAA,gBAAAA,EAAgB,YAAW,IAAI,MAAM;AAAA,gBAAG;AAAA,cAAA,EAAA,CAC3C;AAAA,YAAA,EAAA,CAEJ;AAAA,UAAA,GACF;AAAA,UACA,gBAAAtF;AAAA,YAACG;AAAA,YAAA;AAAA,cACC,cAAW;AAAA,cACX,SAASmE;AAAA,cACT,WAAU;AAAA,cACV,MAAK;AAAA,cAEL,UAAA,gBAAAtE,EAACC,GAAA,EAAgB,MAAMuH,GAAA,CAAS;AAAA,YAAA;AAAA,UAAA;AAAA,QAClC,GACF;AAAA,QACA,gBAAAxH;AAAA,UAACyH;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,IAAI,EAAE,IAAI,GAAG,WAAW,OAAA;AAAA,YAEvB,UAAAuE,IACC,gBAAAhM;AAAA,cAACF;AAAA,cAAA;AAAA,gBACC,IAAI;AAAA,kBACF,SAAS;AAAA,kBACT,gBAAgB;AAAA,kBAChB,YAAY;AAAA,kBACZ,QAAQ;AAAA,gBAAA;AAAA,gBAGV,UAAA,gBAAAE,EAACwO,MAAiB,MAAM,IAAI,IAAI,EAAE,OAAO,YAAU,CAAG;AAAA,cAAA;AAAA,YAAA,IAEtD1C,IACF,gBAAA/L;AAAA,cAACD;AAAA,cAAA;AAAA,gBACC,IAAI;AAAA,kBACF,SAAS;AAAA,kBACT,eAAe;AAAA,kBACf,KAAK;AAAA,kBACL,GAAG;AAAA,kBACH,QAAQ;AAAA,kBACR,cAAc;AAAA,kBACd,iBAAiB;AAAA,gBAAA;AAAA,gBAGnB,UAAA;AAAA,kBAAA,gBAAAC,EAACD,GAAA,EAAI,WAAU,eACb,UAAA;AAAA,oBAAA,gBAAAC,EAACM,KAAW,WAAU,eAAc,IAAI,EAAE,IAAI,OAC5C,UAAA;AAAA,sBAAA,gBAAAL;AAAA,wBAACC;AAAA,wBAAA;AAAA,0BACC,MAAM0H;AAAA,0BACN,OAAO,EAAE,aAAa,GAAG,SAAS,IAAA;AAAA,wBAAI;AAAA,sBAAA;AAAA,sBACtC;AAAA,oBAAA,GAEJ;AAAA,oBACA,gBAAA3H;AAAA,sBAACY;AAAA,sBAAA;AAAA,wBACC,SAAQ;AAAA,wBACR,MAAK;AAAA,wBACL,WAAS;AAAA,wBACT,OAAO0L;AAAA,wBACP,UAAU,CAAC5E,MAAM6E,EAAW7E,EAAE,OAAO,KAAK;AAAA,wBAC1C,aAAY;AAAA,wBACZ,IAAIwD;AAAAA,sBAAA;AAAA,oBAAA;AAAA,kBACN,GACF;AAAA,kBAEA,gBAAAnL,EAACD,GAAA,EAAI,WAAU,eACb,UAAA;AAAA,oBAAA,gBAAAC,EAACM,KAAW,WAAU,eAAc,IAAI,EAAE,IAAI,OAC5C,UAAA;AAAA,sBAAA,gBAAAL;AAAA,wBAACC;AAAA,wBAAA;AAAA,0BACC,MAAMwO;AAAA,0BACN,OAAO,EAAE,aAAa,GAAG,SAAS,IAAA;AAAA,wBAAI;AAAA,sBAAA;AAAA,sBACtC;AAAA,sBAEDd,KACC,gBAAA3N;AAAA,wBAAC0O;AAAA,wBAAA;AAAA,0BACC,OAAM;AAAA,0BACN,MAAK;AAAA,0BACL,IAAI;AAAA,4BACF,IAAI;AAAA,4BACJ,QAAQ;AAAA,4BACR,UAAU;AAAA,4BACV,YAAY;AAAA,4BACZ,iBAAiB;AAAA,4BACjB,OAAO;AAAA,0BAAA;AAAA,wBACT;AAAA,sBAAA;AAAA,oBACF,GAEJ;AAAA,oBACA,gBAAA1O;AAAA,sBAACY;AAAA,sBAAA;AAAA,wBACC,SAAQ;AAAA,wBACR,MAAK;AAAA,wBACL,WAAS;AAAA,wBACT,OAAO4L;AAAA,wBACP,UAAU,CAAC9E,MACT+E,EAAW/E,EAAE,OAAO,MAAM,cAAc,QAAQ,QAAQ,GAAG,CAAC;AAAA,wBAE9D,aAAY;AAAA,wBACZ,OAAOiG;AAAA,wBACP,YAAYA,IAAkB,8BAA8B;AAAA,wBAC5D,IAAIzC;AAAAA,sBAAA;AAAA,oBAAA;AAAA,kBACN,GACF;AAAA,kBAEA,gBAAAnL,EAACD,KAAI,IAAI,EAAE,SAAS,QAAQ,KAAK,KAC/B,UAAA;AAAA,oBAAA,gBAAAC,EAACD,KAAI,WAAU,eAAc,IAAI,EAAE,MAAM,KACvC,UAAA;AAAA,sBAAA,gBAAAC,EAACM,KAAW,WAAU,eAAc,IAAI,EAAE,IAAI,OAC5C,UAAA;AAAA,wBAAA,gBAAAL;AAAA,0BAACC;AAAA,0BAAA;AAAA,4BACC,MAAM0O;AAAA,4BACN,OAAO,EAAE,aAAa,GAAG,SAAS,IAAA;AAAA,0BAAI;AAAA,wBAAA;AAAA,wBACtC;AAAA,sBAAA,GAEJ;AAAA,sBACA,gBAAA3O;AAAA,wBAAC6H;AAAA,wBAAA;AAAA,0BACC,MAAK;AAAA,0BACL,WAAS;AAAA,0BACT,SAAS2F;AAAA,0BACT,OACEA,GAAgB;AAAA,4BACd,CAACoB,MAAUA,EAAM,cAAclC;AAAA,0BAAA,KAC5B;AAAA,0BAEP,UAAU,CAAC3E,GAAG8G,MAAmB;AAC/B,kCAAMC,KAAYD,KAAA,gBAAAA,EAAgB,cAAa;AAC/C,4BAAAlC,EAAiBmC,CAAS,GACtBA,MAAcpC,KAChBG,EAAkB,EAAE;AAAA,0BAExB;AAAA,0BACA,gBAAgB,CAAC/E,OAAWA,KAAA,gBAAAA,EAAQ,cAAa;AAAA,0BACjD,sBAAsB,CAACA,GAAQvG,OAC7BuG,KAAA,gBAAAA,EAAQ,gBAAcvG,KAAA,gBAAAA,EAAO;AAAA,0BAE/B,aAAa,CAAC0G,MACZ,gBAAAjI;AAAA,4BAACY;AAAA,4BAAA;AAAA,8BACE,GAAGqH;AAAA,8BACJ,OAAM;AAAA,8BACN,aAAY;AAAA,8BACZ,IAAIiD;AAAAA,4BAAA;AAAA,0BAAA;AAAA,wBACN;AAAA,sBAAA;AAAA,oBAEJ,GACF;AAAA,oBAEA,gBAAAnL,EAACD,KAAI,WAAU,eAAc,IAAI,EAAE,MAAM,KACvC,UAAA;AAAA,sBAAA,gBAAAC,EAACM,KAAW,WAAU,eAAc,IAAI,EAAE,IAAI,OAC5C,UAAA;AAAA,wBAAA,gBAAAL;AAAA,0BAACC;AAAA,0BAAA;AAAA,4BACC,MAAM8O;AAAA,4BACN,OAAO,EAAE,aAAa,GAAG,SAAS,IAAA;AAAA,0BAAI;AAAA,wBAAA;AAAA,wBACtC;AAAA,sBAAA,GAEJ;AAAA,sBACA,gBAAA/O;AAAA,wBAAC6H;AAAA,wBAAA;AAAA,0BACC,MAAK;AAAA,0BACL,WAAS;AAAA,0BACT,SAASqF;AAAA,0BACT,OAAON,KAAkB;AAAA,0BACzB,UAAU,CAACF;AAAA,0BACX,UAAU,CAAC3E,GAAG8G,MACZhC,EAAkBgC,KAAkB,EAAE;AAAA,0BAExC,eACEnC,IACI,mCACA;AAAA,0BAEN,aAAa,CAACzE,MACZ,gBAAAjI;AAAA,4BAACY;AAAA,4BAAA;AAAA,8BACE,GAAGqH;AAAA,8BACJ,OACEyE,IAAgB,kBAAkB;AAAA,8BAEpC,aACEA,IACI,4BACA;AAAA,8BAEN,IAAIxB;AAAAA,4BAAA;AAAA,0BAAA;AAAA,wBACN;AAAA,sBAAA;AAAA,oBAEJ,EAAA,CACF;AAAA,kBAAA,EAAA,CACF;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA,KAEA5F,KAAA,gBAAAA,EAAgB,UAAS,IAC3B,gBAAAtF;AAAA,cAACgP;AAAA,cAAA;AAAA,gBACC,WAAWC;AAAA,gBACX,WAAW;AAAA,gBACX,IAAI;AAAA,kBACF,QAAQ;AAAA,kBACR,cAAc;AAAA,kBACd,UAAU;AAAA,kBACV,WAAW;AAAA,kBACX,IAAI;AAAA,gBAAA;AAAA,gBAGN,UAAA,gBAAAlP,EAACmP,IAAA,EAAM,cAAY,IAAC,cAAW,oBAC7B,UAAA;AAAA,kBAAA,gBAAAlP,EAACmP,IAAA,EACC,4BAACC,IAAA,EACC,UAAA;AAAA,oBAAA,gBAAApP,EAACqP,GAAA,EAAU,IAAI,EAAE,GAAGpE,IAAmB,OAAO,GAAA,GAAM,UAAA,KAAC;AAAA,oBACrD,gBAAAjL,EAACqP,GAAA,EAAU,IAAIpE,IAAmB,UAAA,QAAI;AAAA,oBACtC,gBAAAjL,EAACqP,GAAA,EAAU,IAAIpE,IAAmB,UAAA,QAAI;AAAA,oBACtC,gBAAAjL,EAACqP,GAAA,EAAU,IAAIpE,IAAmB,UAAA,iBAAa;AAAA,oBAC/C,gBAAAjL,EAACqP,GAAA,EAAU,IAAIpE,IAAmB,UAAA,kBAAc;AAAA,oBAChD,gBAAAjL,EAACqP,GAAA,EAAU,IAAIpE,IAAmB,UAAA,SAAA,CAAM;AAAA,kBAAA,EAAA,CAC1C,EAAA,CACF;AAAA,oCACCqE,IAAA,EACE,UAAAhK,EAAe,IAAI,CAACoI,GAAIlL,MACvB,gBAAAzC;AAAA,oBAACqP;AAAA,oBAAA;AAAA,sBAEC,IAAI;AAAA,wBACF,WAAW,EAAE,iBAAiB,UAAA;AAAA,wBAC9B,mBAAmB,EAAE,QAAQ,EAAA;AAAA,sBAAE;AAAA,sBAGjC,UAAA;AAAA,wBAAA,gBAAApP;AAAA,0BAACqP;AAAA,0BAAA;AAAA,4BACC,IAAI,EAAE,UAAU,QAAQ,OAAO,WAAW,IAAI,IAAA;AAAA,4BAE7C,UAAA7M,IAAQ;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAEX,gBAAAxC;AAAA,0BAACqP;AAAA,0BAAA;AAAA,4BACC,IAAI;AAAA,8BACF,UAAU;AAAA,8BACV,YAAY;AAAA,8BACZ,OAAO;AAAA,8BACP,IAAI;AAAA,4BAAA;AAAA,4BAGL,UAAA3B,EAAG;AAAA,0BAAA;AAAA,wBAAA;AAAA,0CAEL2B,GAAA,EAAU,IAAI,EAAE,IAAI,OACnB,UAAA,gBAAArP;AAAA,0BAACF;AAAA,0BAAA;AAAA,4BACC,WAAU;AAAA,4BACV,IAAI;AAAA,8BACF,UAAU;AAAA,8BACV,YAAY;AAAA,8BACZ,OAAO;AAAA,8BACP,iBAAiB;AAAA,8BACjB,IAAI;AAAA,8BACJ,IAAI;AAAA,8BACJ,cAAc;AAAA,4BAAA;AAAA,4BAGf,UAAA4N,EAAG;AAAA,0BAAA;AAAA,wBAAA,GAER;AAAA,wBACA,gBAAA1N;AAAA,0BAACqP;AAAA,0BAAA;AAAA,4BACC,IAAI,EAAE,UAAU,QAAQ,OAAO,WAAW,IAAI,IAAA;AAAA,4BAE7C,UAAA3B,EAAG;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAEN,gBAAA1N;AAAA,0BAACqP;AAAA,0BAAA;AAAA,4BACC,IAAI,EAAE,UAAU,QAAQ,OAAO,WAAW,IAAI,IAAA;AAAA,4BAE7C,UAAA3B,EAAG;AAAA,0BAAA;AAAA,wBAAA;AAAA,0CAEL2B,GAAA,EAAU,IAAI,EAAE,IAAI,OACnB,UAAA,gBAAArP;AAAA,0BAACuP;AAAA,0BAAA;AAAA,4BACC,SAAS,CAAC,CAAC7B,EAAG;AAAA,4BACd,UAAU,CAAChG,MACTsG,EAAmBN,GAAIhG,EAAE,OAAO,OAAO;AAAA,0BAAA;AAAA,wBAAA,EAE3C,CACF;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAtDKgG,EAAG;AAAA,kBAAA,CAwDX,EAAA,CACH;AAAA,gBAAA,EAAA,CACF;AAAA,cAAA;AAAA,YAAA,IAGF,gBAAA3N;AAAA,cAACD;AAAA,cAAA;AAAA,gBACC,IAAI;AAAA,kBACF,IAAI;AAAA,kBACJ,WAAW;AAAA,kBACX,OAAO;AAAA,gBAAA;AAAA,gBAGT,UAAA;AAAA,kBAAA,gBAAAE;AAAA,oBAACC;AAAA,oBAAA;AAAA,sBACC,MAAMmI;AAAA,sBACN,OAAO,EAAE,UAAU,IAAI,cAAc,IAAI,SAAS,KAAA;AAAA,oBAAK;AAAA,kBAAA;AAAA,kBAEzD,gBAAApI;AAAA,oBAACK;AAAA,oBAAA;AAAA,sBACC,SAAQ;AAAA,sBACR,IAAI,EAAE,YAAY,KAAK,OAAO,UAAA;AAAA,sBAC/B,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAGD,gBAAAL,EAACK,KAAW,SAAQ,WAAU,IAAI,EAAE,OAAO,UAAA,GAAa,UAAA,2CAAA,CAExD;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UACF;AAAA,QAAA;AAAA,QAGJ,gBAAAL,EAACqI,IAAA,EAAc,WAAU,kBAAiB,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,EAAA,GAC/D,UAAAyD,IACC,gBAAA/L;AAAA,UAACD;AAAA,UAAA;AAAA,YACC,IAAI;AAAA,cACF,SAAS;AAAA,cACT,gBAAgB;AAAA,cAChB,OAAO;AAAA,cACP,KAAK;AAAA,YAAA;AAAA,YAGP,UAAA;AAAA,cAAA,gBAAAE;AAAA,gBAACM;AAAA,gBAAA;AAAA,kBACC,SAAS,MAAM;AACb,oBAAAwM,EAAA,GACIpB,IACFpH,EAAA,IAEAyH,EAAY,EAAK;AAAA,kBAErB;AAAA,kBACA,WAAU;AAAA,kBACV,6BACG9L,GAAA,EAAgB,MAAMuP,IAAa,OAAO,EAAE,UAAU,GAAA,GAAM;AAAA,kBAEhE,UAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGD,gBAAAxP;AAAA,gBAACM;AAAA,gBAAA;AAAA,kBACC,SAASuN;AAAA,kBACT,WAAU;AAAA,kBACV,UAAU,CAACD;AAAA,kBACZ,UAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YAED;AAAA,UAAA;AAAA,QAAA,IAGF,gBAAA5N;AAAA,UAACM;AAAA,UAAA;AAAA,YACC,SAAS,MAAMyL,EAAY,EAAI;AAAA,YAC/B,WAAU;AAAA,YACV,IAAI,EAAE,OAAO,OAAA;AAAA,YACb,6BACG9L,GAAA,EAAgB,MAAMe,IAAQ,OAAO,EAAE,UAAU,GAAA,GAAM;AAAA,YAE3D,UAAA;AAAA,UAAA;AAAA,QAAA,GAIL;AAAA,QAEA,gBAAAjB;AAAA,UAACuH;AAAA,UAAA;AAAA,YACC,MAAM8E,EAAa;AAAA,YACnB,SAAS,MAAMC,EAAgB,EAAE,GAAGD,GAAc,MAAM,IAAO;AAAA,YAC/D,YAAY,EAAE,IAAI,EAAE,cAAc,QAAQ,GAAG,IAAE;AAAA,YAE/C,UAAA;AAAA,cAAA,gBAAArM;AAAA,gBAACwH;AAAA,gBAAA;AAAA,kBACC,IAAI;AAAA,oBACF,SAAS;AAAA,oBACT,gBAAgB;AAAA,oBAChB,YAAY;AAAA,oBACZ,IAAI;AAAA,kBAAA;AAAA,kBAGN,UAAA;AAAA,oBAAA,gBAAAvH;AAAA,sBAACK;AAAA,sBAAA;AAAA,wBACC,SAAQ;AAAA,wBACR,IAAI,EAAE,YAAY,KAAK,UAAU,QAAQ,OAAO,UAAA;AAAA,wBACjD,UAAA;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAGD,gBAAAL;AAAA,sBAACG;AAAA,sBAAA;AAAA,wBACC,SAAS,MAAMkM,EAAgB,EAAE,GAAGD,GAAc,MAAM,IAAO;AAAA,wBAC/D,MAAK;AAAA,wBAEL,UAAA,gBAAApM,EAACC,GAAA,EAAgB,MAAMuH,GAAA,CAAS;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAClC;AAAA,gBAAA;AAAA,cAAA;AAAA,cAEF,gBAAAxH,EAACyH,IAAA,EACC,UAAA,gBAAA1H,EAACD,GAAA,EACC,UAAA;AAAA,gBAAA,gBAAAC,EAACM,KAAW,SAAQ,SAAQ,IAAI,EAAE,IAAI,KACpC,UAAA;AAAA,kBAAA,gBAAAN,EAAC,UAAA,EAAO,UAAA;AAAA,oBAAA;AAAA,oBAAOqM,EAAa;AAAA,oBAAO;AAAA,kBAAA,GAAM;AAAA,kBAAS;AAAA,gBAAA,GAEpD;AAAA,gBACA,gBAAApM;AAAA,kBAACF;AAAA,kBAAA;AAAA,oBACC,IAAI;AAAA,sBACF,WAAW;AAAA,sBACX,WAAW;AAAA,sBACX,SAAS;AAAA,sBACT,GAAG;AAAA,sBACH,cAAc;AAAA,sBACd,QAAQ;AAAA,oBAAA;AAAA,oBAGT,UAAAsM,EAAa,OAAO,IAAI,CAACqD,GAAMC,MAC9B,gBAAA3P;AAAA,sBAACM;AAAA,sBAAA;AAAA,wBAEC,SAAQ;AAAA,wBACR,IAAI,EAAE,SAAS,SAAS,OAAO,WAAW,YAAY,IAAA;AAAA,wBACvD,UAAA;AAAA,0BAAA;AAAA,0BACIoP;AAAA,wBAAA;AAAA,sBAAA;AAAA,sBAJEC;AAAA,oBAAA,CAMR;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEH,gBAAA1P;AAAA,kBAACK;AAAA,kBAAA;AAAA,oBACC,SAAQ;AAAA,oBACR,IAAI,EAAE,IAAI,GAAG,OAAO,WAAW,YAAY,IAAA;AAAA,oBAC5C,UAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAED,EAAA,CACF,EAAA,CACF;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA;AAGN;AAEAoL,GAAuB,YAAY;AAAA,EACjC,MAAMjL,EAAU,KAAK;AAAA,EACrB,SAASA,EAAU,KAAK;AAAA,EACxB,gBAAgBA,EAAU;AAAA,EAC1B,SAASA,EAAU;AACrB;ACpqBA,MAAMmP,KAA0B,gBAC1BC,KAAsB,YACtB3E,KAAoB;AAAA,EACxB,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,UAAU;AAAA,EACV,eAAe;AAAA,EACf,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,IAAI;AACN,GAEMC,KAAe;AAAA,EACnB,4BAA4B;AAAA,IAC1B,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,UAAU;AAAA,IACV,cAAc,EAAE,aAAa,WAAW,aAAa,QAAA;AAAA,IACrD,oBAAoB,EAAE,aAAa,UAAA;AAAA,IACnC,0BAA0B,EAAE,aAAa,UAAA;AAAA,IACzC,2BAA2B,EAAE,aAAa,UAAA;AAAA,IAC1C,kBAAkB;AAAA,MAChB,iBAAiB;AAAA,MACjB,6BAA6B;AAAA,QAC3B,qBAAqB;AAAA,MAAA;AAAA,IACvB;AAAA,EACF;AAAA,EAEF,yBAAyB;AAAA,IACvB,UAAU;AAAA,IACV,iBAAiB,EAAE,OAAO,UAAA;AAAA,EAAU;AAExC,GAEM2E,KAAwB,CAAC,EAAE,MAAAxL,GAAM,SAAAC,QAAc;AACnD,QAAM5D,IAAWC,GAAA,GACX;AAAA,IACJ,eAAemP,IAAc,CAAA;AAAA,IAC7B,UAAA1K;AAAA,IACA,mBAAAwG;AAAA,EAAA,IACErG,GAAY,CAACC,MAAUA,EAAM,YAAY,GAEvC,CAACsG,GAAUC,CAAW,IAAIpH,EAAS,EAAK,GACxC,CAACoL,GAAeC,CAAgB,IAAIrL,EAAS,IAAI,GACjD,CAACqH,GAASC,CAAU,IAAItH,EAAS,EAAK,GACtC,CAACuH,GAAQC,CAAS,IAAIxH,EAAS,EAAK,GAEpC,CAACyH,GAAcC,CAAe,IAAI1H,EAAS;AAAA,IAC/C,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,QAAQ,CAAA;AAAA,EAAC,CACV,GAGK,CAAC2H,GAASC,CAAU,IAAI5H,EAAS,EAAE,GACnC,CAAC6H,GAASC,CAAU,IAAI9H,EAAS,EAAE,GACnC,CAACsL,GAAgBC,CAAiB,IAAIvL,EAAS,EAAE,GACjD,CAACwL,GAAUC,CAAW,IAAIzL,EAAS,EAAE;AAE3C,EAAA0E,GAAU,MAAM;AACd,IAAIhF,MACF0H,EAAY,EAAK,GACjBiE,EAAiB,IAAI,GACrBlD,EAAA,GACAuD,EAAA;AAAA,EAEJ,GAAG,CAAChM,CAAI,CAAC;AAET,QAAMgM,IAAe,OAAOC,IAAe,OAAU;;AACnD,QAAI,GAACA,MAAgBR,KAAA,gBAAAA,EAAa,UAAS;AAC3C,UAAI;AACF,QAAA7D,EAAW,EAAI;AACf,cAAMe,IAAM,MAAM/I,GAAA;AAClB,SAAItB,IAAAqK,KAAA,gBAAAA,EAAK,SAAL,QAAArK,EAAW,UACbjC,EAAS6P,GAAiBvD,EAAI,KAAK,MAAM,CAAC;AAAA,MAE9C,SAAStF,GAAG;AACV,gBAAQ,MAAM,2BAA2BA,CAAC;AAAA,MAC5C,UAAA;AACE,QAAAuE,EAAW,EAAK;AAAA,MAClB;AAAA,EACF,GAEMa,IAAY,MAAM;AACtB,IAAAP,EAAW,EAAE,GACbE,EAAW,EAAE,GACbyD,EAAkB,EAAE,GACpBE,EAAY,EAAE,GACdJ,EAAiB,IAAI;AAAA,EACvB,GAEMQ,IAAkB,CAACC,MAAW;AAClC,IAAAT,EAAiBS,CAAM,GACvBlE,EAAWkE,EAAO,QAAQ,EAAE,GAC5BhE,EAAWgE,EAAO,QAAQ,EAAE,GAC5BP,EAAkBO,EAAO,eAAe,EAAE,GAC1CL,EAAYK,EAAO,SAAS,EAAE,GAC9B1E,EAAY,EAAI;AAAA,EAClB,GAEM0B,KAAgB/H;AAAA,IACpB,OAAMoK,KAAA,gBAAAA,EAAa,IAAI,CAACY,MAAA;;AAAM,cAAA/N,IAAA+N,EAAE,SAAF,gBAAA/N,EAAQ;AAAA,WAAkB,CAAA;AAAA,IACxD,CAACmN,CAAW;AAAA,EAAA,GAGRnC,KACJ,CAACoC,KACD,CAAC,CAACvD,KACFiB,GAAc,SAASjB,EAAQ,KAAA,EAAO,YAAA,CAAa,GAE/CmE,IAAoBjL,GAAQ,MACzB,MAAM;AAAA,IACX,IAAI;AAAA,MACF,CAAC,GAAGyK,EAAS,SAASP,EAAmB,CAAC,EAAE,IAAI,CAACgB,MAAUA,EAAM,CAAC,CAAC;AAAA,IAAA;AAAA,EACrE,GAED,CAACT,CAAQ,CAAC,GAEPU,IAA2BF,EAAkB,SAAS,YAAY,GAClEG,IAA6BH,EAAkB;AAAA,IACnD,CAACI,MAAgBA,MAAgB;AAAA,EAAA,GAE7BC,IACHb,EAAS,KAAA,IAELU,IAECC,IACE,QAAQnB,EAAuB,gCAC/B,KAHF,sBAAsBA,EAAuB,MAF/C,IAOA/B,IACJtB,EAAQ,KAAA,KACRE,EAAQ,UACRyD,EAAe,KAAA,KACfE,EAAS,KAAA,KACT,CAACa,KACD,CAACrD,MACD,CAACzB,GAEG2B,IAAa,YAAY;;AAC7B,QAAI;AACF,UAAImD;AACF,cAAM,IAAI,MAAMA,CAAqB;AAGvC,MAAA7E,EAAU,EAAI;AACd,YAAMxF,IAAU;AAAA,QACd,MAAM2F,EAAQ,KAAA;AAAA,QACd,MAAME,EAAQ,KAAA;AAAA,QACd,aAAayD,EAAe,KAAA;AAAA,QAC5B,OAAOE,EAAS,KAAA;AAAA,QAChB,WAAWJ,IAAgBA,EAAc,YAAY;AAAA;AAAA,MAAA;AAGvD,UAAI/C;AAOJ,UANI+C,IACF/C,IAAM,MAAM7I,GAAawC,CAAO,IAEhCqG,IAAM,MAAM9I,GAAUyC,CAAO,KAG3BhE,IAAAqK,KAAA,gBAAAA,EAAK,SAAL,gBAAArK,EAAW,aAAY,IAAO;AAChC,QAAA8D,GAAU;AAAA,UACR,SAAS,UAAUsJ,IAAgB,YAAY,OAAO;AAAA,UACtD,MAAM;AAAA,QAAA,CACP;AACD,cAAMkB,OAAcjK,KAAAF,IAAAkG,KAAA,gBAAAA,EAAK,SAAL,gBAAAlG,EAAW,WAAX,gBAAAE,EAAoB,OAAM;AAAA,UAC5C,GAAG+I;AAAA,UACH,MAAMpJ,EAAQ;AAAA,UACd,MAAMA,EAAQ;AAAA,UACd,aAAaA,EAAQ;AAAA,UACrB,OAAOA,EAAQ;AAAA,UACf,WAAWA,EAAQ;AAAA,QAAA;AAErB,QAAAjG,EAASwQ,GAAuBD,EAAW,CAAC,GAC5CnE,EAAA,GACAf,EAAY,EAAK;AAAA,MACnB;AACE,cAAM,IAAI,MAAM,uBAAuB;AAAA,IAE3C,SAASrE,GAAG;AACV,cAAQ,MAAMA,CAAC,GACfjB,GAAU;AAAA,QACR,UAASiB,KAAA,gBAAAA,EAAG,YAAW;AAAA,QACvB,MAAM;AAAA,MAAA,CACP;AAAA,IACH,UAAA;AACE,MAAAyE,EAAU,EAAK;AAAA,IACjB;AAAA,EACF,GAEM6B,IAAqB,OAAOyC,GAAQxC,MAAc;;AACtD,QAAI,CAACA,GAAW;AACd,YAAMC,IAAgB9I,KAAA,gBAAAA,EAClB,OAAO,CAACoB,MAAM;AACd,cAAM2H,KAAYvC,KAAA,gBAAAA,EAAmB,KAAK,CAACwC,OAAOA,GAAG,OAAO5H,EAAE;AAE9D,iBADuB2H,MAAA,gBAAAA,GAAW,YAAW3H,EAAE,WAAW,CAAA,GACpC,SAASiK,EAAO,IAAI;AAAA,MAC5C,GACC,IAAI,CAACjK,MAAMA,EAAE,gBAAgBA,EAAE;AAElC,WAAI0H,KAAA,gBAAAA,EAAe,UAAS,GAAG;AAC7B,QAAA7B,EAAgB;AAAA,UACd,MAAM;AAAA,UACN,YAAYoE,EAAO;AAAA,UACnB,QAAQvC;AAAA,QAAA,CACT;AACD;AAAA,MACF;AAAA,IACF;AAEA,QAAI;AACF,YAAMvH,IAAU;AAAA,QACd,GAAG8J;AAAA;AAAA,QACH,WAAWxC;AAAA,MAAA,GAGPjB,IAAM,MAAM7I,GAAawC,CAAO;AAEtC,YAAIhE,IAAAqK,KAAA,gBAAAA,EAAK,SAAL,gBAAArK,EAAW,aAAY;AACzB,QAAA8D,GAAU;AAAA,UACR,SAAS,UAAUwH,IAAY,cAAc,aAAa;AAAA,UAC1D,MAAM;AAAA,QAAA,CACP,GACDvN;AAAA,UACEyQ,GAAyB;AAAA,YACvB,MAAMV,EAAO;AAAA,YACb,WAAWxC;AAAA,UAAA,CACZ;AAAA,QAAA;AAAA;AAGH,cAAM,IAAI,MAAM,gCAAgC;AAAA,IAEpD,SAASvG,GAAG;AACV,cAAQ,MAAMA,CAAC,GACfjB,GAAU;AAAA,QACR,UAASiB,KAAA,gBAAAA,EAAG,YAAW;AAAA,QACvB,MAAM;AAAA,MAAA,CACP;AAAA,IACH;AAAA,EACF;AAEA,SACE,gBAAA3H;AAAA,IAACuH;AAAA,IAAA;AAAA,MACC,MAAAjD;AAAA,MACA,SAAAC;AAAA,MACA,UAAS;AAAA,MACT,WAAS;AAAA,MACT,WAAU;AAAA,MACV,YAAY;AAAA,QACV,IAAI;AAAA,UACF,cAAc;AAAA,UACd,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,WAAW;AAAA,QAAA;AAAA,MACb;AAAA,MAGF,UAAA;AAAA,QAAA,gBAAAvE,EAACwH,MAAY,WAAU,iBAAgB,IAAI,EAAE,IAAI,OAC/C,UAAA;AAAA,UAAA,gBAAAxH,EAACD,GAAA,EAAI,WAAU,kBACb,UAAA;AAAA,YAAA,gBAAAE,EAACF,KAAI,WAAU,YACb,4BAACG,GAAA,EAAgB,MAAMmR,IAAU,EAAA,CACnC;AAAA,YACA,gBAAArR,EAACD,GAAA,EAAI,WAAU,aACb,UAAA;AAAA,cAAA,gBAAAE,EAACK,KAAW,WAAU,SACnB,cACG0P,IACE,gBACA,mBACF,oBAAA,CACN;AAAA,cACC,CAACjE,KACA,gBAAA/L,EAACM,GAAA,EAAW,WAAU,YACnB,UAAA;AAAA,iBAAAyP,KAAA,gBAAAA,EAAa,WAAU;AAAA,gBAAE;AAAA,iBACzBA,KAAA,gBAAAA,EAAa,YAAW,IAAI,MAAM;AAAA,gBAAG;AAAA,cAAA,EAAA,CACxC;AAAA,YAAA,EAAA,CAEJ;AAAA,UAAA,GACF;AAAA,UACA,gBAAA9P;AAAA,YAACG;AAAA,YAAA;AAAA,cACC,cAAW;AAAA,cACX,SAASmE;AAAA,cACT,WAAU;AAAA,cACV,MAAK;AAAA,cAEL,UAAA,gBAAAtE,EAACC,GAAA,EAAgB,MAAMuH,GAAA,CAAS;AAAA,YAAA;AAAA,UAAA;AAAA,QAClC,GACF;AAAA,QAEA,gBAAAxH;AAAA,UAACyH;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,IAAI,EAAE,IAAI,GAAG,WAAW,OAAA;AAAA,YAEvB,UAAAuE,IACC,gBAAAhM;AAAA,cAACF;AAAA,cAAA;AAAA,gBACC,IAAI;AAAA,kBACF,SAAS;AAAA,kBACT,gBAAgB;AAAA,kBAChB,YAAY;AAAA,kBACZ,QAAQ;AAAA,gBAAA;AAAA,gBAGV,UAAA,gBAAAE,EAACwO,MAAiB,MAAM,IAAI,IAAI,EAAE,OAAO,YAAU,CAAG;AAAA,cAAA;AAAA,YAAA,IAEtD1C,IACF,gBAAA/L;AAAA,cAACD;AAAA,cAAA;AAAA,gBACC,IAAI;AAAA,kBACF,SAAS;AAAA,kBACT,eAAe;AAAA,kBACf,KAAK;AAAA,kBACL,GAAG;AAAA,kBACH,QAAQ;AAAA,kBACR,cAAc;AAAA,kBACd,iBAAiB;AAAA,gBAAA;AAAA,gBAGnB,UAAA;AAAA,kBAAA,gBAAAC,EAACD,KAAI,IAAI,EAAE,SAAS,QAAQ,KAAK,KAC/B,UAAA;AAAA,oBAAA,gBAAAC,EAACD,KAAI,WAAU,eAAc,IAAI,EAAE,MAAM,KACvC,UAAA;AAAA,sBAAA,gBAAAC,EAACM,KAAW,WAAU,eAAc,IAAI,EAAE,IAAI,OAC5C,UAAA;AAAA,wBAAA,gBAAAL;AAAA,0BAACC;AAAA,0BAAA;AAAA,4BACC,MAAM0H;AAAA,4BACN,OAAO,EAAE,aAAa,GAAG,SAAS,IAAA;AAAA,0BAAI;AAAA,wBAAA;AAAA,wBACtC;AAAA,sBAAA,GAEJ;AAAA,sBACA,gBAAA3H;AAAA,wBAACY;AAAA,wBAAA;AAAA,0BACC,SAAQ;AAAA,0BACR,MAAK;AAAA,0BACL,WAAS;AAAA,0BACT,OAAO0L;AAAA,0BACP,UAAU,CAAC5E,MAAM6E,EAAW7E,EAAE,OAAO,KAAK;AAAA,0BAC1C,aAAY;AAAA,0BACZ,IAAIwD;AAAAA,wBAAA;AAAA,sBAAA;AAAA,oBACN,GACF;AAAA,oBAEA,gBAAAnL,EAACD,KAAI,WAAU,eAAc,IAAI,EAAE,MAAM,KACvC,UAAA;AAAA,sBAAA,gBAAAC,EAACM,KAAW,WAAU,eAAc,IAAI,EAAE,IAAI,OAC5C,UAAA;AAAA,wBAAA,gBAAAL;AAAA,0BAACC;AAAA,0BAAA;AAAA,4BACC,MAAMwO;AAAA,4BACN,OAAO,EAAE,aAAa,GAAG,SAAS,IAAA;AAAA,0BAAI;AAAA,wBAAA;AAAA,wBACtC;AAAA,wBAEDd,MACC,gBAAA3N;AAAA,0BAAC0O;AAAA,0BAAA;AAAA,4BACC,OAAM;AAAA,4BACN,MAAK;AAAA,4BACL,IAAI;AAAA,8BACF,IAAI;AAAA,8BACJ,QAAQ;AAAA,8BACR,UAAU;AAAA,8BACV,YAAY;AAAA,8BACZ,iBAAiB;AAAA,8BACjB,OAAO;AAAA,4BAAA;AAAA,0BACT;AAAA,wBAAA;AAAA,sBACF,GAEJ;AAAA,sBACA,gBAAA1O;AAAA,wBAACY;AAAA,wBAAA;AAAA,0BACC,SAAQ;AAAA,0BACR,MAAK;AAAA,0BACL,WAAS;AAAA,0BACT,OAAO4L;AAAA,0BACP,UAAU,CAAC9E,MACT,CAACqI,KACDtD;AAAA,4BACE/E,EAAE,OAAO,MAAM,cAAc,QAAQ,QAAQ,GAAG;AAAA,0BAAA;AAAA,0BAGpD,aAAY;AAAA,0BACZ,UAAU,CAAC,CAACqI;AAAA,0BACZ,OAAOpC;AAAA,0BACP,YACEA,KAAkB,8BAA8B;AAAA,0BAElD,IAAIzC;AAAAA,wBAAA;AAAA,sBAAA;AAAA,oBACN,EAAA,CACF;AAAA,kBAAA,GACF;AAAA,kBAEA,gBAAAnL,EAACD,GAAA,EAAI,WAAU,eACb,UAAA;AAAA,oBAAA,gBAAAC,EAACM,KAAW,WAAU,eAAc,IAAI,EAAE,IAAI,OAC5C,UAAA;AAAA,sBAAA,gBAAAL;AAAA,wBAACC;AAAA,wBAAA;AAAA,0BACC,MAAMoR;AAAA,0BACN,OAAO,EAAE,aAAa,GAAG,SAAS,IAAA;AAAA,wBAAI;AAAA,sBAAA;AAAA,sBACtC;AAAA,oBAAA,GAEJ;AAAA,oBACA,gBAAArR;AAAA,sBAACY;AAAA,sBAAA;AAAA,wBACC,SAAQ;AAAA,wBACR,MAAK;AAAA,wBACL,WAAS;AAAA,wBACT,WAAS;AAAA,wBACT,MAAM;AAAA,wBACN,OAAOqP;AAAA,wBACP,UAAU,CAACvI,MAAMwI,EAAkBxI,EAAE,OAAO,KAAK;AAAA,wBACjD,aAAY;AAAA,wBACZ,IAAIwD;AAAAA,sBAAA;AAAA,oBAAA;AAAA,kBACN,GACF;AAAA,kBAEA,gBAAAnL,EAACD,GAAA,EAAI,WAAU,eACb,UAAA;AAAA,oBAAA,gBAAAC,EAACM,KAAW,WAAU,eAAc,IAAI,EAAE,IAAI,OAC5C,UAAA;AAAA,sBAAA,gBAAAL;AAAA,wBAACC;AAAA,wBAAA;AAAA,0BACC,MAAM0O;AAAA,0BACN,OAAO,EAAE,aAAa,GAAG,SAAS,IAAA;AAAA,wBAAI;AAAA,sBAAA;AAAA,sBACtC;AAAA,oBAAA,GAEJ;AAAA,oBACA,gBAAA3O;AAAA,sBAACY;AAAA,sBAAA;AAAA,wBACC,SAAQ;AAAA,wBACR,MAAK;AAAA,wBACL,WAAS;AAAA,wBACT,WAAS;AAAA,wBACT,MAAM;AAAA,wBACN,OAAOuP;AAAA,wBACP,UAAU,CAACzI,MAAM0I,EAAY1I,EAAE,OAAO,KAAK;AAAA,wBAC3C,aAAa;AAAA,wBACb,OAAO,CAAC,CAACsJ;AAAA,wBACT,YAAYA;AAAA,wBACZ,IAAI9F;AAAAA,sBAAA;AAAA,oBAAA;AAAA,oBAEN,gBAAAnL;AAAA,sBAACM;AAAA,sBAAA;AAAA,wBACC,SAAQ;AAAA,wBACR,IAAI;AAAA,0BACF,OAAO;AAAA,0BACP,IAAI;AAAA,0BACJ,SAAS;AAAA,0BACT,YAAY;AAAA,wBAAA;AAAA,wBAGd,UAAA;AAAA,0BAAA,gBAAAL,EAAC,YAAO,UAAA,aAAA,CAAU;AAAA,0BAAS;AAAA,0BAAyB;AAAA,0BACpD,gBAAAA,EAAC,YAAO,UAAA,UAAA,CAAO;AAAA,0BAAS;AAAA,0BACP,gBAAAA,EAAC,UAAM,UAAA2P,GAAA,CAAwB;AAAA,0BAAO;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAEzD,EAAA,CACF;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA,KAEAG,KAAA,gBAAAA,EAAa,UAAS,IACxB,gBAAA9P;AAAA,cAACgP;AAAA,cAAA;AAAA,gBACC,WAAWC;AAAA,gBACX,WAAW;AAAA,gBACX,IAAI;AAAA,kBACF,QAAQ;AAAA,kBACR,cAAc;AAAA,kBACd,UAAU;AAAA,kBACV,WAAW;AAAA,kBACX,IAAI;AAAA,gBAAA;AAAA,gBAGN,UAAA,gBAAAlP,EAACmP,IAAA,EAAM,cAAY,IAAC,cAAW,iBAC7B,UAAA;AAAA,kBAAA,gBAAAlP,EAACmP,IAAA,EACC,4BAACC,IAAA,EACC,UAAA;AAAA,oBAAA,gBAAApP,EAACqP,GAAA,EAAU,IAAI,EAAE,GAAGpE,IAAmB,OAAO,GAAA,GAAM,UAAA,KAAC;AAAA,oBACrD,gBAAAjL,EAACqP,GAAA,EAAU,IAAIpE,IAAmB,UAAA,QAAI;AAAA,oBACtC,gBAAAjL,EAACqP,GAAA,EAAU,IAAIpE,IAAmB,UAAA,QAAI;AAAA,oBACtC,gBAAAjL,EAACqP,GAAA,EAAU,IAAIpE,IAAmB,UAAA,eAAW;AAAA,sCAC5CoE,GAAA,EAAU,IAAIpE,IAAmB,OAAM,UAAS,UAAA,UAEjD;AAAA,oBACA,gBAAAjL,EAACqP,KAAU,IAAIpE,IAAmB,OAAM,UAAS,OAAM,MAAK,UAAA,OAAA,CAE5D;AAAA,kBAAA,EAAA,CACF,EAAA,CACF;AAAA,oCACCqE,IAAA,EACE,UAAAQ,EAAY,IAAI,CAACW,GAAQjO,MACxB,gBAAAzC;AAAA,oBAACqP;AAAA,oBAAA;AAAA,sBAEC,IAAI;AAAA,wBACF,WAAW,EAAE,iBAAiB,UAAA;AAAA,wBAC9B,mBAAmB,EAAE,QAAQ,EAAA;AAAA,sBAAE;AAAA,sBAGjC,UAAA;AAAA,wBAAA,gBAAApP;AAAA,0BAACqP;AAAA,0BAAA;AAAA,4BACC,IAAI,EAAE,UAAU,QAAQ,OAAO,WAAW,IAAI,IAAA;AAAA,4BAE7C,UAAA7M,IAAQ;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAEX,gBAAAxC;AAAA,0BAACqP;AAAA,0BAAA;AAAA,4BACC,IAAI;AAAA,8BACF,UAAU;AAAA,8BACV,YAAY;AAAA,8BACZ,OAAO;AAAA,8BACP,IAAI;AAAA,4BAAA;AAAA,4BAGL,UAAAoB,EAAO;AAAA,0BAAA;AAAA,wBAAA;AAAA,0CAETpB,GAAA,EAAU,IAAI,EAAE,IAAI,OACnB,UAAA,gBAAArP;AAAA,0BAACF;AAAA,0BAAA;AAAA,4BACC,WAAU;AAAA,4BACV,IAAI;AAAA,8BACF,UAAU;AAAA,8BACV,YAAY;AAAA,8BACZ,OAAO;AAAA,8BACP,iBAAiB;AAAA,8BACjB,IAAI;AAAA,8BACJ,IAAI;AAAA,8BACJ,cAAc;AAAA,4BAAA;AAAA,4BAGf,UAAA2Q,EAAO;AAAA,0BAAA;AAAA,wBAAA,GAEZ;AAAA,wBACA,gBAAAzQ;AAAA,0BAACqP;AAAA,0BAAA;AAAA,4BACC,IAAI;AAAA,8BACF,UAAU;AAAA,8BACV,OAAO;AAAA,8BACP,IAAI;AAAA,8BACJ,UAAU;AAAA,4BAAA;AAAA,4BAGZ,4BAACnP,IAAA,EAAQ,OAAOuQ,EAAO,eAAe,IAAI,WAAU,OAClD,UAAA,gBAAAzQ;AAAA,8BAACK;AAAA,8BAAA;AAAA,gCACC,SAAQ;AAAA,gCACR,QAAM;AAAA,gCACN,IAAI,EAAE,SAAS,QAAA;AAAA,gCAEd,UAAAoQ,EAAO;AAAA,8BAAA;AAAA,4BAAA,EACV,CACF;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAEF,gBAAAzQ,EAACqP,KAAU,IAAI,EAAE,IAAI,IAAA,GAAO,OAAM,UAChC,UAAA,gBAAArP;AAAA,0BAACuP;AAAA,0BAAA;AAAA,4BACC,SAAS,CAAC,CAACkB,EAAO;AAAA,4BAClB,UAAU,CAAC/I,MACTsG,EAAmByC,GAAQ/I,EAAE,OAAO,OAAO;AAAA,0BAAA;AAAA,wBAAA,GAGjD;AAAA,wBACA,gBAAA1H,EAACqP,KAAU,IAAI,EAAE,IAAI,IAAA,GAAO,OAAM,UAChC,UAAA,gBAAArP;AAAA,0BAACG;AAAA,0BAAA;AAAA,4BACC,MAAK;AAAA,4BACL,SAAS,MAAMqQ,EAAgBC,CAAM;AAAA,4BACrC,IAAI;AAAA,8BACF,OAAO;AAAA,8BACP,WAAW,EAAE,OAAO,UAAA;AAAA,4BAAU;AAAA,4BAGhC,UAAA,gBAAAzQ;AAAA,8BAACC;AAAA,8BAAA;AAAA,gCACC,MAAMqR;AAAA,gCACN,OAAO,EAAE,UAAU,GAAA;AAAA,8BAAG;AAAA,4BAAA;AAAA,0BACxB;AAAA,wBAAA,EACF,CACF;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBA7EKb,EAAO,MAAMA,EAAO;AAAA,kBAAA,CA+E5B,EAAA,CACH;AAAA,gBAAA,EAAA,CACF;AAAA,cAAA;AAAA,YAAA,IAGF,gBAAA1Q;AAAA,cAACD;AAAA,cAAA;AAAA,gBACC,IAAI;AAAA,kBACF,IAAI;AAAA,kBACJ,WAAW;AAAA,kBACX,OAAO;AAAA,gBAAA;AAAA,gBAGT,UAAA;AAAA,kBAAA,gBAAAE;AAAA,oBAACC;AAAA,oBAAA;AAAA,sBACC,MAAMmR;AAAA,sBACN,OAAO,EAAE,UAAU,IAAI,cAAc,IAAI,SAAS,KAAA;AAAA,oBAAK;AAAA,kBAAA;AAAA,kBAEzD,gBAAApR;AAAA,oBAACK;AAAA,oBAAA;AAAA,sBACC,SAAQ;AAAA,sBACR,IAAI,EAAE,YAAY,KAAK,OAAO,UAAA;AAAA,sBAC/B,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAGD,gBAAAL,EAACK,KAAW,SAAQ,WAAU,IAAI,EAAE,OAAO,UAAA,GAAa,UAAA,2CAAA,CAExD;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UACF;AAAA,QAAA;AAAA,QAIJ,gBAAAL,EAACqI,IAAA,EAAc,WAAU,kBAAiB,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,EAAA,GAC/D,UAAAyD,IACC,gBAAA/L;AAAA,UAACD;AAAA,UAAA;AAAA,YACC,IAAI;AAAA,cACF,SAAS;AAAA,cACT,gBAAgB;AAAA,cAChB,OAAO;AAAA,cACP,KAAK;AAAA,YAAA;AAAA,YAGP,UAAA;AAAA,cAAA,gBAAAE;AAAA,gBAACM;AAAA,gBAAA;AAAA,kBACC,SAAS,MAAM;AACb,oBAAAyL,EAAY,EAAK,GACjBe,EAAA;AAAA,kBACF;AAAA,kBACA,WAAU;AAAA,kBACV,6BACG7M,GAAA,EAAgB,MAAMuP,IAAa,OAAO,EAAE,UAAU,GAAA,GAAM;AAAA,kBAEhE,UAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGD,gBAAAxP;AAAA,gBAACM;AAAA,gBAAA;AAAA,kBACC,SAASuN;AAAA,kBACT,WAAU;AAAA,kBACV,UAAU,CAACD;AAAA,kBAEV,cAAgB,kBAAkB;AAAA,gBAAA;AAAA,cAAA;AAAA,YACrC;AAAA,UAAA;AAAA,QAAA,IAGF,gBAAA5N;AAAA,UAACM;AAAA,UAAA;AAAA,YACC,SAAS,MAAMyL,EAAY,EAAI;AAAA,YAC/B,WAAU;AAAA,YACV,IAAI,EAAE,OAAO,OAAA;AAAA,YACb,6BACG9L,GAAA,EAAgB,MAAMe,IAAQ,OAAO,EAAE,UAAU,GAAA,GAAM;AAAA,YAE3D,UAAA;AAAA,UAAA;AAAA,QAAA,GAIL;AAAA,QAEA,gBAAAjB;AAAA,UAACuH;AAAA,UAAA;AAAA,YACC,MAAM8E,EAAa;AAAA,YACnB,SAAS,MAAMC,EAAgB,EAAE,GAAGD,GAAc,MAAM,IAAO;AAAA,YAC/D,YAAY,EAAE,IAAI,EAAE,cAAc,QAAQ,GAAG,IAAE;AAAA,YAE/C,UAAA;AAAA,cAAA,gBAAArM;AAAA,gBAACwH;AAAA,gBAAA;AAAA,kBACC,IAAI;AAAA,oBACF,SAAS;AAAA,oBACT,gBAAgB;AAAA,oBAChB,YAAY;AAAA,oBACZ,IAAI;AAAA,kBAAA;AAAA,kBAGN,UAAA;AAAA,oBAAA,gBAAAvH;AAAA,sBAACK;AAAA,sBAAA;AAAA,wBACC,SAAQ;AAAA,wBACR,IAAI,EAAE,YAAY,KAAK,UAAU,QAAQ,OAAO,UAAA;AAAA,wBACjD,UAAA;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAGD,gBAAAL;AAAA,sBAACG;AAAA,sBAAA;AAAA,wBACC,SAAS,MAAMkM,EAAgB,EAAE,GAAGD,GAAc,MAAM,IAAO;AAAA,wBAC/D,MAAK;AAAA,wBAEL,UAAA,gBAAApM,EAACC,GAAA,EAAgB,MAAMuH,GAAA,CAAS;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAClC;AAAA,gBAAA;AAAA,cAAA;AAAA,cAEF,gBAAAxH,EAACyH,IAAA,EACC,UAAA,gBAAA1H,EAACD,GAAA,EACC,UAAA;AAAA,gBAAA,gBAAAC,EAACM,KAAW,SAAQ,SAAQ,IAAI,EAAE,IAAI,KACpC,UAAA;AAAA,kBAAA,gBAAAN,EAAC,UAAA,EAAO,UAAA;AAAA,oBAAA;AAAA,oBAAOqM,EAAa;AAAA,oBAAW;AAAA,kBAAA,GAAM;AAAA,kBAAS;AAAA,gBAAA,GAExD;AAAA,gBACA,gBAAApM;AAAA,kBAACF;AAAA,kBAAA;AAAA,oBACC,IAAI;AAAA,sBACF,WAAW;AAAA,sBACX,WAAW;AAAA,sBACX,SAAS;AAAA,sBACT,GAAG;AAAA,sBACH,cAAc;AAAA,sBACd,QAAQ;AAAA,oBAAA;AAAA,oBAGT,UAAAsM,EAAa,OAAO,IAAI,CAACqD,GAAMC,MAC9B,gBAAA3P;AAAA,sBAACM;AAAA,sBAAA;AAAA,wBAEC,SAAQ;AAAA,wBACR,IAAI,EAAE,SAAS,SAAS,OAAO,WAAW,YAAY,IAAA;AAAA,wBACvD,UAAA;AAAA,0BAAA;AAAA,0BACIoP;AAAA,wBAAA;AAAA,sBAAA;AAAA,sBAJEC;AAAA,oBAAA,CAMR;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEH,gBAAA1P;AAAA,kBAACK;AAAA,kBAAA;AAAA,oBACC,SAAQ;AAAA,oBACR,IAAI,EAAE,IAAI,GAAG,OAAO,WAAW,YAAY,IAAA;AAAA,oBAC5C,UAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAGD,EAAA,CACF,EAAA,CACF;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA;AAGN;AAEAwP,GAAsB,YAAY;AAAA,EAChC,MAAMrP,EAAU,KAAK;AAAA,EACrB,SAASA,EAAU,KAAK;AAC1B;AC1qBA,MAAMyK,KAAoB;AAAA,EACxB,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,UAAU;AAAA,EACV,eAAe;AAAA,EACf,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,IAAI;AACN,GAEMC,KAAe;AAAA,EACnB,4BAA4B;AAAA,IAC1B,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,UAAU;AAAA,IACV,cAAc,EAAE,aAAa,WAAW,aAAa,QAAA;AAAA,IACrD,oBAAoB,EAAE,aAAa,UAAA;AAAA,IACnC,0BAA0B,EAAE,aAAa,UAAA;AAAA,IACzC,2BAA2B,EAAE,aAAa,UAAA;AAAA,IAC1C,kBAAkB;AAAA,MAChB,iBAAiB;AAAA,MACjB,6BAA6B;AAAA,QAC3B,qBAAqB;AAAA,MAAA;AAAA,IACvB;AAAA,EACF;AAAA,EAEF,yBAAyB;AAAA,IACvB,UAAU;AAAA,IACV,iBAAiB,EAAE,OAAO,UAAA;AAAA,EAAU;AAExC,GAEMqG,KAAoB,CAAChQ,OAAUA,KAAA,gBAAAA,EAAO,OAAO,kBAAiB,IAE9DiQ,KAAsB,CAACC,MAAqB;AAChD,QAAMC,IAAUD,EAAiB,KAAA,EAAO,QAAQ,MAAM,EAAE,GAClDE,IAAaD,EAAQ,MAAM,4BAA4B;AAC7D,MAAIC;AACF,WAAOA,EAAW,CAAC,EAAE,QAAQ,MAAM,EAAE;AAGvC,QAAMC,IAAmBF,EAAQ,MAAM,8BAA8B;AACrE,SACEE,KACA,CAAC,SAAS,KAAKF,EAAQ,MAAM,GAAGA,EAAQ,YAAYE,EAAiB,CAAC,CAAC,CAAC,CAAC,IAElEA,EAAiB,CAAC,KAGVF,EAAQ,MAAM,GAAG,EAAE,SAASA,GAC7B,QAAQ,UAAU,EAAE,EAAE,KAAA;AACxC,GAEMG,KAAqB,CAACC,MAAe;AACzC,QAAMC,IAAU,CAAA;AAChB,MAAIC,IAAU,IACVC,IAAe;AAEnB,aAAWC,KAAQJ,GAAY;AAI7B,QAHII,MAAS,QAAKD,KAAgB,IAC9BC,MAAS,QAAKD,IAAe,KAAK,IAAI,GAAGA,IAAe,CAAC,IAEzDC,MAAS,OAAOD,MAAiB,GAAG;AACtC,MAAID,EAAQ,UACVD,EAAQ,KAAKC,EAAQ,MAAM,GAE7BA,IAAU;AACV;AAAA,IACF;AACA,IAAAA,KAAWE;AAAA,EACb;AAEA,SAAIF,EAAQ,UACVD,EAAQ,KAAKC,EAAQ,MAAM,GAGtBD;AACT,GAEMI,KAA4B,CAACC,MAAU;AAC3C,QAAMxB,IAAQwB,EAAM,MAAM,+BAA+B;AACzD,SAAKxB,KAAA,QAAAA,EAAQ,KAINiB,GAAmBjB,EAAM,CAAC,CAAC,EAC/B,IAAIY,EAAmB,EACvB,OAAO,OAAO,EACd,OAAO,CAACjQ,GAAOiB,GAAO6P,MAAQA,EAAI,QAAQ9Q,CAAK,MAAMiB,CAAK,IANpD,CAAA;AAOX,GAEM8P,KAAuB,CAACzM,MAAW;AACvC,MAAI,CAACA,EAAQ,QAAO,CAAA;AACpB,MAAI,OAAOA,KAAW,SAAU,QAAOA;AACvC,MAAI;AACF,WAAO,KAAK,MAAMA,CAAM;AAAA,EAC1B,QAAQ;AACN,WAAO,CAAA;AAAA,EACT;AACF,GAEM0M,KAA0B,CAAC,EAAE,MAAAlO,GAAM,SAAAC,QAAc;AACrD,QAAM5D,IAAWC,GAAA,GACX,EAAE,iBAAA0E,IAAkB,CAAA,GAAI,gBAAAC,IAAiB,CAAA,MAAOC;AAAA,IACpD,CAACC,MAAUA,EAAM;AAAA,EAAA,GAGb,CAACsG,GAAUC,CAAW,IAAIpH,EAAS,EAAK,GACxC,CAAC6N,GAAkBC,CAAmB,IAAI9N,EAAS,IAAI,GACvD,CAACqH,GAASC,CAAU,IAAItH,EAAS,EAAK,GACtC,CAACuH,GAAQC,CAAS,IAAIxH,EAAS,EAAK,GACpC,CAAC+N,GAAqBC,CAAsB,IAAIhO,EAAS,EAAK,GAE9D,CAAC2H,GAASC,CAAU,IAAI5H,EAAS,EAAE,GACnC,CAAC6H,GAASC,CAAU,IAAI9H,EAAS,EAAE,GACnC,CAACwL,GAAUC,CAAW,IAAIzL,EAAS,EAAE,GACrC,CAACiO,GAA2BC,CAA4B,IAC5DlO,EAAS,EAAK,GACV,CAACmO,GAAkBC,CAAmB,IAAIpO,EAAS,CAAA,CAAE,GACrD,CAACqO,GAAeC,CAAgB,IAAItO,EAAS,CAAA,CAAE,GAC/C,CAACuO,IAAaC,EAAc,IAAIxO,EAAS,EAAE,GAC3C,CAACyO,GAAYC,CAAa,IAAI1O,EAAS,EAAE,GACzC,CAAC2O,GAAgBC,CAAiB,IAAI5O,EAAS,EAAK,GACpD,CAAC6O,GAAcC,CAAe,IAAI9O,EAAS,CAAA,CAAE;AAEnD,EAAA0E,GAAU,MAAM;AACd,IAAIhF,MACF0H,EAAY,EAAK,GACjB0G,EAAoB,IAAI,GACxB3F,EAAA,GACA4G,EAAA;AAAA,EAEJ,GAAG,CAACrP,CAAI,CAAC;AAET,QAAMqP,IAAkB,OAAOpD,IAAe,OAAU;;AACtD,QAAI,GAACA,KAAgBjL,EAAgB,SAAS;AAC9C,UAAI;AACF,QAAA4G,EAAW,EAAI;AACf,cAAMe,IAAM,MAAM9J,GAAA;AAClB,SAAIP,IAAAqK,KAAA,gBAAAA,EAAK,SAAL,QAAArK,EAAW,UACbjC,EAASiT,GAAmB3G,EAAI,KAAK,MAAM,CAAC;AAAA,MAEhD,SAAS5F,GAAO;AACd,gBAAQ,MAAMA,CAAK,GACnBX,GAAU;AAAA,UACR,SAAS;AAAA,UACT,MAAM;AAAA,QAAA,CACP;AAAA,MACH,UAAA;AACE,QAAAwF,EAAW,EAAK;AAAA,MAClB;AAAA,EACF,GAEMa,IAAY,MAAM;AACtB,IAAAP,EAAW,EAAE,GACbE,EAAW,EAAE,GACb2D,EAAY,EAAE,GACdyC,EAA6B,EAAK,GAClCE,EAAoB,CAAA,CAAE,GACtBE,EAAiB,CAAA,CAAE,GACnBE,GAAe,EAAE,GACjBE,EAAc,EAAE,GAChBZ,EAAoB,IAAI,GACxBc,EAAkB,EAAK,GACvBE,EAAgB,CAAA,CAAE;AAAA,EACpB,GAEMhG,IAAgB/H;AAAA,IACpB,MACEL,EAAgB,IAAI,CAACuO,MAAA;;AAAS,cAAAjR,IAAAiR,EAAK,SAAL,gBAAAjR,EAAW;AAAA,KAAa,EAAE,OAAO,OAAO;AAAA,IACxE,CAAC0C,CAAe;AAAA,EAAA,GAGZe,IAAiBoG,EAAQ,KAAA,EAAO,QAAQ,QAAQ,GAAG,EAAE,YAAA,GACrDmB,IACJ,CAAC6E,KACD,CAAC,CAACpM,KACFqH,EAAc,SAASrH,EAAe,aAAa,GAE/CyN,IAAkBnO;AAAA,IACtB,MACEJ,EAAe,IAAI,CAACsO,OAAU;AAAA,MAC5B,OAAOA,EAAK;AAAA,MACZ,OAAOA,EAAK;AAAA,IAAA,EACZ;AAAA,IACJ,CAACtO,CAAc;AAAA,EAAA,GAGXwO,KAAqBpO,GAAQ,MAAM8N,GAAc,CAACA,CAAY,CAAC,GAE/DO,KAA4BrO,GAAQ,MAAM;AAC9C,UAAMsO,wBAAe,IAAA,GAEfC,IAAgB,CAAC1S,GAAO2S,MAAe;AAC3C,YAAMC,KAAkB5C,GAAkBhQ,CAAK;AAC/C,UAAI,CAAC4S,GAAiB;AAEtB,YAAMC,KAAgBJ,EAAS,IAAIG,EAAe;AAClD,aAAIC,KACK,GAAG7S,CAAK,uBAAuB6S,EAAa,gEAGrDJ,EAAS,IAAIG,IAAiBD,CAAU,GACjC;AAAA,IACT;AAEA,eAAWG,KAAgBrB,GAAe;AACxC,YAAMsB,IAAiBL,EAAcI,GAAc,iBAAiB;AACpE,UAAIC,EAAgB,QAAOA;AAAA,IAC7B;AAEA,UAAMC,IAAkBN,EAAcb,GAAY,aAAa;AAC/D,QAAImB,EAAiB,QAAOA;AAE5B,UAAMC,IAAmBP,EAAcf,IAAa,cAAc;AAClE,WAAIsB,KAEG;AAAA,EACT,GAAG,CAACxB,GAAeI,GAAYF,EAAW,CAAC,GAErCuB,KAA4BC;AAAA,IAChC,CAACC,IAAgB,CAAA,MAAO;AACtB,YAAMC,IAAkB,IAAI;AAAA,QAC1BD,EAAc,IAAI,CAACpT,MAAUgQ,GAAkBhQ,CAAK,CAAC,EAAE,OAAO,OAAO;AAAA,MAAA,GAGjEsT,IAAiB,IAAI;AAAA,QACzB,CAAC,GAAG7B,GAAeI,GAAYR,IAA4BM,KAAc,EAAE,EACxE,IAAI,CAAC3R,MAAUgQ,GAAkBhQ,CAAK,CAAC,EACvC,OAAO,OAAO;AAAA,MAAA;AAGnB,aAAAqT,EAAgB,QAAQ,CAACrT,MAAUsT,EAAe,OAAOtT,CAAK,CAAC,GAExDuS,GAAmB,OAAO,CAAChM,MAAW;AAC3C,cAAMgN,IAAmBvD,GAAkBzJ,CAAM;AACjD,eAAO,CAAC+M,EAAe,IAAIC,CAAgB;AAAA,MAC7C,CAAC;AAAA,IACH;AAAA,IACA;AAAA,MACE9B;AAAA,MACAJ;AAAA,MACAQ;AAAA,MACAF;AAAA,MACAY;AAAA,IAAA;AAAA,EACF,GAGIiB,KAAarP,GAAQ,MAAM;AAC/B,UAAMsP,IAAI7E,EAAS,KAAA,EAAO,YAAA;AAC1B,QAAI,CAAC6E,EAAG,QAAO;AACf,QAAI,CAACA,EAAE,WAAW,QAAQ,EAAG,QAAO;AAUpC,UAAMC,IATY;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,EAE+B,KAAK,CAACzJ,MACvB,IAAI,OAAO,MAAMA,CAAO,OAAO,GAAG,EACnC,KAAKwJ,CAAC,CACpB;AACD,WAAIC,IACK,qCAAqCA,EAAe,YAAA,CAAa,KACnE;AAAA,EACT,GAAG,CAAC9E,CAAQ,CAAC,GAEPvC,KACJtB,EAAQ,UACRlG,KACA+J,EAAS,KAAA,KACT,CAACxC,KACD,CAACoH,MACD,CAAChB,MACDf,EAAc,SAAS,KACvB,CAAC,CAACI,MACD,CAACR,KAA6B,CAAC,CAACM,OACjC,CAAChH,GAEGgJ,KAAuB,CAACC,IAAiBhF,MAAa;AAC1D,QAAI,CAACgF,EAAe,KAAA,KAAUJ,IAAY;AACxC,MAAAtB,EAAgB,CAAA,CAAE;AAClB;AAAA,IACF;AAEA,UAAM2B,IAAoBjD,GAA0BgD,CAAc;AAClE,IAAA1B,EAAgB2B,CAAiB;AAAA,EACnC;AAEA,EAAA/L,GAAU,MAAM;AACd,UAAMgM,IAAQ,WAAW,MAAM;AAC7B,MAAIlF,KACF+E,GAAqB/E,CAAQ;AAAA,IAEjC,GAAG,GAAI;AACP,WAAO,MAAM,aAAakF,CAAK;AAAA,EACjC,GAAG,CAAClF,CAAQ,CAAC;AAEb,QAAMK,KAAkB,CAAC7K,MAAc;AACrC,UAAME,IAASyM,GAAqB3M,EAAU,MAAM;AACpD,IAAA8M,EAAoB9M,CAAS,GAC7BoG,EAAY,EAAI,GAChBQ,EAAW5G,EAAU,QAAQ,EAAE,GAC/B8G,EAAW9G,EAAU,QAAQ,EAAE,GAC/ByK,EAAYvK,EAAO,SAAS,EAAE,GAC9BgN,EAA6B,CAAC,CAAChN,EAAO,yBAAyB,GAC/DkN,EAAoBlN,EAAO,oBAAoB,EAAE,GACjDoN,EAAiBpN,EAAO,iBAAiB,EAAE,GAC3CsN,GAAetN,EAAO,eAAe,EAAE,GACvCwN,EAAcxN,EAAO,cAAc,EAAE,GACrC0N,EAAkB,EAAK;AAAA,EACzB,GAEM1F,KAAa,YAAY;;AAC7B,QAAI;AAEF,UADA0F,EAAkB,EAAI,GAClB,CAACf,KAAoB7E,GAAiB;AACxC,QAAAlH,GAAU;AAAA,UACR,SAAS;AAAA,UACT,MAAM;AAAA,QAAA,CACP;AACD;AAAA,MACF;AAEA,UAAIsO,IAAY;AACd,QAAAtO,GAAU,EAAE,SAASsO,IAAY,MAAM,SAAS;AAChD;AAAA,MACF;AAEA,UAAIhB,IAA2B;AAC7B,QAAAtN,GAAU,EAAE,SAASsN,IAA2B,MAAM,SAAS;AAC/D;AAAA,MACF;AAEA,YAAMpN,IAAU;AAAA,QACd,MAAM2F,EAAQ,KAAA;AAAA,QACd,OAAMkG,KAAA,gBAAAA,EAAkB,SAAQpM;AAAA,QAChC,QAAQ,KAAK,UAAU;AAAA,UACrB,kBAAA0M;AAAA,UACA,2BAAAF;AAAA,UACA,OAAOzC,EAAS,KAAA;AAAA,UAChB,eAAA6C;AAAA,UACA,aAAaJ,IAA4BM,KAAc;AAAA,UACvD,YAAAE;AAAA,QAAA,CACD;AAAA,MAAA;AAGH,MAAAjH,EAAU,EAAI;AACd,YAAMa,IAAMwF,IACR,MAAM1O,GAAgB6C,CAAO,IAC7B,MAAM9C,GAAc8C,CAAO;AAE/B,YAAIhE,IAAAqK,KAAA,gBAAAA,EAAK,SAAL,gBAAArK,EAAW,aAAY;AACzB,cAAM,IAAI,MAAM,0BAA0B;AAG5C,YAAM2S,MAAiBtO,KAAAF,IAAAkG,KAAA,gBAAAA,EAAK,SAAL,gBAAAlG,EAAW,WAAX,gBAAAE,EAAoB,OAAM;AAAA,QAC/C,GAAGwL;AAAA,QACH,MAAM7L,EAAQ;AAAA,QACd,MAAMA,EAAQ;AAAA,QACd,QAAQ2L,GAAqB3L,EAAQ,MAAM;AAAA,MAAA;AAG7C,MAAAjG,EAAS6U,GAA0BD,CAAc,CAAC,GAClD7O,GAAU;AAAA,QACR,SAAS,aAAa+L,IAAmB,YAAY,OAAO;AAAA,QAC5D,MAAM;AAAA,MAAA,CACP,GACD1F,EAAA,GACAf,EAAY,EAAK;AAAA,IACnB,SAAS3E,GAAO;AACd,cAAQ,MAAMA,CAAK,GACnBX,GAAU;AAAA,QACR,UAASW,KAAA,gBAAAA,EAAO,YAAW;AAAA,QAC3B,MAAM;AAAA,MAAA,CACP;AAAA,IACH,UAAA;AACE,MAAA+E,EAAU,EAAK;AAAA,IACjB;AAAA,EACF;AAEA,SACE,gBAAApM,EAAAmI,IAAA,EACE,UAAA;AAAA,IAAA,gBAAAnI;AAAA,MAACuH;AAAA,MAAA;AAAA,QACC,MAAAjD;AAAA,QACA,SAAAC;AAAA,QACA,UAAS;AAAA,QACT,WAAS;AAAA,QACT,WAAU;AAAA,QACV,YAAY;AAAA,UACV,IAAI;AAAA,YACF,cAAc;AAAA,YACd,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,WAAW;AAAA,UAAA;AAAA,QACb;AAAA,QAGF,UAAA;AAAA,UAAA,gBAAAvE,EAACwH,MAAY,WAAU,iBAAgB,IAAI,EAAE,IAAI,OAC/C,UAAA;AAAA,YAAA,gBAAAxH,EAACD,GAAA,EAAI,WAAU,kBACb,UAAA;AAAA,cAAA,gBAAAE,EAACF,KAAI,WAAU,YACb,4BAACG,GAAA,EAAgB,MAAMkI,IAAQ,EAAA,CACjC;AAAA,cACA,gBAAApI,EAACD,GAAA,EAAI,WAAU,aACb,UAAA;AAAA,gBAAA,gBAAAE,EAACK,KAAW,WAAU,SACnB,cACGmS,IACE,mBACA,sBACF,sBAAA,CACN;AAAA,gBACC,CAAC1G,KACA,gBAAA/L,EAACM,GAAA,EAAW,WAAU,YACnB,UAAA;AAAA,kBAAAgF,EAAgB,UAAU;AAAA,kBAAE;AAAA,kBAC5BA,EAAgB,WAAW,IAAI,MAAM;AAAA,kBAAG;AAAA,gBAAA,EAAA,CAC3C;AAAA,cAAA,EAAA,CAEJ;AAAA,YAAA,GACF;AAAA,YACA,gBAAArF;AAAA,cAACG;AAAA,cAAA;AAAA,gBACC,cAAW;AAAA,gBACX,SAASmE;AAAA,gBACT,WAAU;AAAA,gBACV,MAAK;AAAA,gBAEL,UAAA,gBAAAtE,EAACC,GAAA,EAAgB,MAAMuH,GAAA,CAAS;AAAA,cAAA;AAAA,YAAA;AAAA,UAClC,GACF;AAAA,UAEA,gBAAAxH;AAAA,YAACyH;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,IAAI,EAAE,IAAI,GAAG,WAAW,OAAA;AAAA,cAEvB,UAAAuE,IACC,gBAAAhM;AAAA,gBAACF;AAAA,gBAAA;AAAA,kBACC,IAAI;AAAA,oBACF,SAAS;AAAA,oBACT,gBAAgB;AAAA,oBAChB,YAAY;AAAA,oBACZ,QAAQ;AAAA,kBAAA;AAAA,kBAGV,UAAA,gBAAAE,EAACwO,MAAiB,MAAM,IAAI,IAAI,EAAE,OAAO,YAAU,CAAG;AAAA,gBAAA;AAAA,cAAA,IAEtD1C,IACF,gBAAA/L;AAAA,gBAACD;AAAA,gBAAA;AAAA,kBACC,IAAI;AAAA,oBACF,SAAS;AAAA,oBACT,eAAe;AAAA,oBACf,KAAK;AAAA,oBACL,GAAG;AAAA,oBACH,QAAQ;AAAA,oBACR,cAAc;AAAA,oBACd,iBAAiB;AAAA,kBAAA;AAAA,kBAGnB,UAAA;AAAA,oBAAA,gBAAAC,EAACD,KAAI,IAAI,EAAE,SAAS,QAAQ,KAAK,KAC/B,UAAA;AAAA,sBAAA,gBAAAC,EAACD,KAAI,WAAU,eAAc,IAAI,EAAE,MAAM,KACvC,UAAA;AAAA,wBAAA,gBAAAC,EAACM,KAAW,WAAU,eAAc,IAAI,EAAE,IAAI,OAC5C,UAAA;AAAA,0BAAA,gBAAAL;AAAA,4BAACC;AAAA,4BAAA;AAAA,8BACC,MAAM0H;AAAA,8BACN,OAAO,EAAE,aAAa,GAAG,SAAS,IAAA;AAAA,4BAAI;AAAA,0BAAA;AAAA,0BACtC;AAAA,wBAAA,GAEJ;AAAA,wBACA,gBAAA3H;AAAA,0BAACY;AAAA,0BAAA;AAAA,4BACC,SAAQ;AAAA,4BACR,MAAK;AAAA,4BACL,WAAS;AAAA,4BACT,OAAO0L;AAAA,4BACP,UAAU,CAAC5E,MAAM;AACf,oCAAM8N,IAAM9N,EAAE,OAAO;AAErB,kCADA6E,EAAWiJ,CAAG,GACV,CAAChD,GAAkB;AACrB,sCAAMiD,IAAgBD,EACnB,KAAA,EACA,QAAQ,QAAQ,GAAG,EACnB,YAAA;AACH,gCAAA/I,EAAWgJ,CAAa;AAAA,8BAC1B;AAAA,4BACF;AAAA,4BACA,IAAIvK;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBACN,GACF;AAAA,sBAEA,gBAAAnL,EAACD,KAAI,WAAU,eAAc,IAAI,EAAE,MAAM,KACvC,UAAA;AAAA,wBAAA,gBAAAC,EAACM,KAAW,WAAU,eAAc,IAAI,EAAE,IAAI,OAC5C,UAAA;AAAA,0BAAA,gBAAAL;AAAA,4BAACC;AAAA,4BAAA;AAAA,8BACC,MAAMwO;AAAA,8BACN,OAAO,EAAE,aAAa,GAAG,SAAS,IAAA;AAAA,4BAAI;AAAA,0BAAA;AAAA,0BACtC;AAAA,0BAEDd,KACC,gBAAA3N;AAAA,4BAAC0O;AAAA,4BAAA;AAAA,8BACC,OAAM;AAAA,8BACN,MAAK;AAAA,8BACL,IAAI;AAAA,gCACF,IAAI;AAAA,gCACJ,QAAQ;AAAA,gCACR,UAAU;AAAA,gCACV,YAAY;AAAA,gCACZ,iBAAiB;AAAA,gCACjB,OAAO;AAAA,8BAAA;AAAA,4BACT;AAAA,0BAAA;AAAA,wBACF,GAEJ;AAAA,wBACA,gBAAA1O;AAAA,0BAACY;AAAA,0BAAA;AAAA,4BACC,SAAQ;AAAA,4BACR,MAAK;AAAA,4BACL,WAAS;AAAA,4BACT,OAAO4L;AAAA,4BACP,UAAU,CAAC9E,MACT,CAAC8K,KAAoB/F,EAAW/E,EAAE,OAAO,KAAK;AAAA,4BAEhD,UAAU,CAAC,CAAC8K;AAAA,4BACZ,OAAO7E;AAAA,4BACP,YACE6E,IACI,0CACA7E,IACE,8BACA;AAAA,4BAER,IAAIzC;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBACN,EAAA,CACF;AAAA,oBAAA,GACF;AAAA,oBAEA,gBAAAnL,EAACD,GAAA,EAAI,WAAU,eACb,UAAA;AAAA,sBAAA,gBAAAC,EAACM,KAAW,WAAU,eAAc,IAAI,EAAE,IAAI,OAC5C,UAAA;AAAA,wBAAA,gBAAAL;AAAA,0BAACC;AAAA,0BAAA;AAAA,4BACC,MAAM0O;AAAA,4BACN,OAAO,EAAE,aAAa,GAAG,SAAS,IAAA;AAAA,0BAAI;AAAA,wBAAA;AAAA,wBACtC;AAAA,sBAAA,GAEJ;AAAA,sBACA,gBAAA3O;AAAA,wBAACF;AAAA,wBAAA;AAAA,0BACC,IAAI;AAAA,4BACF,QACIiV,MAAczB,IACZ,wBACA;AAAA,4BACN,cAAc;AAAA,4BACd,UAAU;AAAA,4BACV,QAAQ;AAAA,0BAAA;AAAA,0BAGV,UAAA,gBAAAtT;AAAA,4BAAC0V;AAAA,4BAAA;AAAA,8BACC,cAAcvF;AAAA,8BACd,QAAO;AAAA,8BACP,UAAU,CAAC5O,MAAU6O,EAAY7O,CAAK;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBACxC;AAAA,sBAAA;AAAA,sBAED+R,KAAkByB,MACjB,gBAAA/U;AAAA,wBAACK;AAAA,wBAAA;AAAA,0BACC,SAAQ;AAAA,0BACR,OAAM;AAAA,0BACN,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,SAAS,QAAA;AAAA,0BAE9B,UAAA0U;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBACH,GAEJ;AAAA,oBAEA,gBAAAhV;AAAA,sBAACD;AAAA,sBAAA;AAAA,wBACC,IAAI;AAAA,0BACF,SAAS;AAAA,0BACT,YAAY;AAAA,0BACZ,gBAAgB;AAAA,0BAChB,GAAG;AAAA,0BACH,QAAQ;AAAA,0BACR,cAAc;AAAA,0BACd,iBAAiB;AAAA,wBAAA;AAAA,wBAGnB,UAAA;AAAA,0BAAA,gBAAAC,EAACD,GAAA,EACC,UAAA;AAAA,4BAAA,gBAAAE;AAAA,8BAACK;AAAA,8BAAA;AAAA,gCACC,IAAI,EAAE,YAAY,KAAK,UAAU,QAAQ,OAAO,UAAA;AAAA,gCACjD,UAAA;AAAA,8BAAA;AAAA,4BAAA;AAAA,4BAGD,gBAAAL,EAACK,KAAW,IAAI,EAAE,UAAU,QAAQ,OAAO,UAAA,GAAa,UAAA,gEAAA,CAGxD;AAAA,0BAAA,GACF;AAAA,0BACA,gBAAAL;AAAA,4BAACuP;AAAA,4BAAA;AAAA,8BACC,SAASqD;AAAA,8BACT,UAAU,CAAClL,MAAM;AACf,sCAAMiO,IAAUjO,EAAE,OAAO;AACzB,gCAAAmL,EAA6B8C,CAAO,GAC/BA,KACHxC,GAAe,EAAE;AAAA,8BAErB;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBACF;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAGF,gBAAApT,EAACD,GAAA,EAAI,IAAI,EAAE,SAAS,QAAQ,KAAK,GAAG,UAAU,OAAA,GAC5C,UAAA;AAAA,sBAAA,gBAAAC,EAACD,GAAA,EAAI,WAAU,eAAc,IAAI,EAAE,MAAM,GAAG,UAAU,IAAA,GACpD,UAAA;AAAA,wBAAA,gBAAAC,EAACM,KAAW,WAAU,eAAc,IAAI,EAAE,IAAI,OAC5C,UAAA;AAAA,0BAAA,gBAAAL;AAAA,4BAACC;AAAA,4BAAA;AAAA,8BACC,MAAM6K;AAAA,8BACN,OAAO,EAAE,aAAa,GAAG,SAAS,IAAA;AAAA,4BAAI;AAAA,0BAAA;AAAA,0BACtC;AAAA,wBAAA,GAEJ;AAAA,wBACA,gBAAA9K;AAAA,0BAAC6H;AAAA,0BAAA;AAAA,4BACC,UAAQ;AAAA,4BACR,UAAQ;AAAA,4BACR,sBAAoB;AAAA,4BACpB,MAAK;AAAA,4BACL,SAAS4M,GAA0BzB,CAAa;AAAA,4BAChD,OAAOA;AAAA,4BACP,UAAU,CAACjL,GAAGC,MAAa;AACzB,oCAAM4N,IAAe,CAAA,GACfC,wBAAiB,IAAA;AAEvB,8BAAA7N,EAAS,QAAQ,CAACzG,MAAU;AAC1B,sCAAM4S,IAAkB5C,GAAkBhQ,CAAK;AAC/C,gCAAI,CAAC4S,KAAmB0B,EAAW,IAAI1B,CAAe,MAGtD0B,EAAW,IAAI1B,CAAe,GAC9ByB,EAAa,KAAKrU,CAAK;AAAA,8BACzB,CAAC,GAED0R,EAAiB2C,CAAY;AAAA,4BAC/B;AAAA,4BACA,YAAY,CAACrU,GAAOuU,MAClBvU,EAAM,IAAI,CAACuG,GAAQtF,MACjB,gBAAAxC;AAAA,8BAAC0O;AAAA,8BAAA;AAAA,gCACC,OAAO5G;AAAA,gCACN,GAAGgO,EAAY,EAAE,OAAAtT,GAAO;AAAA,gCACzB,MAAK;AAAA,8BAAA;AAAA,4BAAA,CAER;AAAA,4BAEH,aAAa,CAACyF,MACZ,gBAAAjI;AAAA,8BAACY;AAAA,8BAAA;AAAA,gCACE,GAAGqH;AAAA,gCACJ,OAAM;AAAA,gCACN,aAAY;AAAA,gCACZ,IAAIiD;AAAA,8BAAA;AAAA,4BAAA;AAAA,0BACN;AAAA,wBAAA;AAAA,sBAEJ,GACF;AAAA,sBAEA,gBAAAnL,EAACD,GAAA,EAAI,WAAU,eAAc,IAAI,EAAE,MAAM,GAAG,UAAU,IAAA,GACpD,UAAA;AAAA,wBAAA,gBAAAC,EAACM,KAAW,WAAU,eAAc,IAAI,EAAE,IAAI,OAC5C,UAAA;AAAA,0BAAA,gBAAAL;AAAA,4BAACC;AAAA,4BAAA;AAAA,8BACC,MAAM8V;AAAA,8BACN,OAAO,EAAE,aAAa,GAAG,SAAS,IAAA;AAAA,4BAAI;AAAA,0BAAA;AAAA,0BACtC;AAAA,wBAAA,GAEJ;AAAA,wBACA,gBAAA/V;AAAA,0BAAC6H;AAAA,0BAAA;AAAA,4BACC,UAAQ;AAAA,4BACR,MAAK;AAAA,4BACL,SAAS4M,GAA0B,CAACrB,CAAU,CAAC;AAAA,4BAC/C,OAAOA;AAAA,4BACP,UAAU,CAACrL,GAAGC,MACZqL,EAAcrL,KAAY,EAAE;AAAA,4BAE9B,eAAe,CAACD,GAAGiO,MACjB3C,EAAc2C,CAAa;AAAA,4BAE7B,aAAa,CAAC/N,MACZ,gBAAAjI;AAAA,8BAACY;AAAA,8BAAA;AAAA,gCACE,GAAGqH;AAAA,gCACJ,OAAM;AAAA,gCACN,aAAY;AAAA,gCACZ,IAAIiD;AAAA,8BAAA;AAAA,4BAAA;AAAA,0BACN;AAAA,wBAAA;AAAA,sBAEJ,EAAA,CACF;AAAA,oBAAA,GACF;AAAA,oBAEC0H,KACC,gBAAA7S,EAACD,GAAA,EAAI,WAAU,eACb,UAAA;AAAA,sBAAA,gBAAAC,EAACM,KAAW,WAAU,eAAc,IAAI,EAAE,IAAI,OAC5C,UAAA;AAAA,wBAAA,gBAAAL;AAAA,0BAACC;AAAA,0BAAA;AAAA,4BACC,MAAMgW;AAAA,4BACN,OAAO,EAAE,aAAa,GAAG,SAAS,IAAA;AAAA,0BAAI;AAAA,wBAAA;AAAA,wBACtC;AAAA,sBAAA,GAEJ;AAAA,sBACA,gBAAAjW;AAAA,wBAAC6H;AAAA,wBAAA;AAAA,0BACC,UAAQ;AAAA,0BACR,MAAK;AAAA,0BACL,SAAS4M,GAA0B,CAACvB,EAAW,CAAC;AAAA,0BAChD,OAAOA;AAAA,0BACP,UAAU,CAACnL,GAAGC,MACZmL,GAAenL,KAAY,EAAE;AAAA,0BAE/B,eAAe,CAACD,GAAGiO,MACjB7C,GAAe6C,CAAa;AAAA,0BAE9B,aAAa,CAAC/N,MACZ,gBAAAjI;AAAA,4BAACY;AAAA,4BAAA;AAAA,8BACE,GAAGqH;AAAA,8BACJ,OAAM;AAAA,8BACN,aAAY;AAAA,8BACZ,IAAIiD;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBACN;AAAA,sBAAA;AAAA,oBAEJ,GACF;AAAA,oBAGF,gBAAAnL,EAACD,GAAA,EAAI,WAAU,eACb,UAAA;AAAA,sBAAA,gBAAAC;AAAA,wBAACD;AAAA,wBAAA;AAAA,0BACC,IAAI;AAAA,4BACF,SAAS;AAAA,4BACT,gBAAgB;AAAA,4BAChB,YAAY;AAAA,4BACZ,KAAK;AAAA,4BACL,IAAI;AAAA,4BACJ,UAAU;AAAA,0BAAA;AAAA,0BAGZ,UAAA;AAAA,4BAAA,gBAAAC,EAACM,KAAW,WAAU,eAAc,IAAI,EAAE,IAAI,KAC5C,UAAA;AAAA,8BAAA,gBAAAL;AAAA,gCAACC;AAAA,gCAAA;AAAA,kCACC,MAAMmI;AAAA,kCACN,OAAO,EAAE,aAAa,GAAG,SAAS,IAAA;AAAA,gCAAI;AAAA,8BAAA;AAAA,8BACtC;AAAA,4BAAA,GAEJ;AAAA,4BACA,gBAAApI;AAAA,8BAACM;AAAA,8BAAA;AAAA,gCACC,SAAQ;AAAA,gCACR,MAAK;AAAA,gCACL,SAAS,MAAMqS,EAAuB,EAAI;AAAA,gCAC1C,IAAI;AAAA,kCACF,eAAe;AAAA,kCACf,YAAY;AAAA,kCACZ,OAAO;AAAA,kCACP,GAAG;AAAA,kCACH,UAAU;AAAA,gCAAA;AAAA,gCAEb,UAAA;AAAA,8BAAA;AAAA,4BAAA;AAAA,0BAED;AAAA,wBAAA;AAAA,sBAAA;AAAA,sBAEF,gBAAA3S;AAAA,wBAAC6H;AAAA,wBAAA;AAAA,0BACC,UAAQ;AAAA,0BACR,sBAAoB;AAAA,0BACpB,MAAK;AAAA,0BACL,SAASgM;AAAA,0BACT,OAAOA,EAAgB;AAAA,4BAAO,CAAC/L,MAC7BgL,EAAiB,SAAShL,EAAO,KAAK;AAAA,0BAAA;AAAA,0BAExC,UAAU,CAACC,GAAGmO,MACZnD;AAAA,4BACEmD,EAAgB,IAAI,CAACtC,MAASA,EAAK,KAAK;AAAA,0BAAA;AAAA,0BAG5C,gBAAgB,CAAC9L,MAAWA,EAAO;AAAA,0BACnC,sBAAsB,CAACA,GAAQvG,MAC7BuG,EAAO,UAAUvG,EAAM;AAAA,0BAEzB,aAAa,CAAC0G,MACZ,gBAAAjI;AAAA,4BAACY;AAAA,4BAAA;AAAA,8BACE,GAAGqH;AAAA,8BACJ,OAAM;AAAA,8BACN,aAAY;AAAA,8BACZ,IAAIiD;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBACN;AAAA,sBAAA;AAAA,oBAEJ,EAAA,CACF;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA,IAEA7F,EAAgB,SAAS,IAC3B,gBAAArF;AAAA,gBAACgP;AAAA,gBAAA;AAAA,kBACC,WAAWC;AAAA,kBACX,WAAW;AAAA,kBACX,IAAI;AAAA,oBACF,QAAQ;AAAA,oBACR,cAAc;AAAA,oBACd,UAAU;AAAA,oBACV,WAAW;AAAA,oBACX,IAAI;AAAA,kBAAA;AAAA,kBAGN,UAAA,gBAAAlP,EAACmP,IAAA,EAAM,cAAY,IAAC,cAAW,mBAC7B,UAAA;AAAA,oBAAA,gBAAAlP,EAACmP,IAAA,EACC,4BAACC,IAAA,EACC,UAAA;AAAA,sBAAA,gBAAApP,EAACqP,GAAA,EAAU,IAAIpE,IAAmB,UAAA,QAAI;AAAA,sBACtC,gBAAAjL,EAACqP,GAAA,EAAU,IAAIpE,IAAmB,UAAA,QAAI;AAAA,sBACtC,gBAAAjL,EAACqP,KAAU,IAAIpE,IAAmB,OAAM,UAAS,OAAM,MAAK,UAAA,OAAA,CAE5D;AAAA,oBAAA,EAAA,CACF,EAAA,CACF;AAAA,oBACA,gBAAAjL,EAACsP,IAAA,EACE,UAAAjK,EAAgB,IAAI,CAACM,MACpB,gBAAA5F;AAAA,sBAACqP;AAAA,sBAAA;AAAA,wBAEC,IAAI;AAAA,0BACF,WAAW,EAAE,iBAAiB,UAAA;AAAA,0BAC9B,mBAAmB,EAAE,QAAQ,EAAA;AAAA,wBAAE;AAAA,wBAGjC,UAAA;AAAA,0BAAA,gBAAApP;AAAA,4BAACqP;AAAA,4BAAA;AAAA,8BACC,IAAI;AAAA,gCACF,UAAU;AAAA,gCACV,YAAY;AAAA,gCACZ,OAAO;AAAA,gCACP,IAAI;AAAA,8BAAA;AAAA,8BAGL,UAAA1J,EAAU;AAAA,4BAAA;AAAA,0BAAA;AAAA,4CAEZ0J,GAAA,EAAU,IAAI,EAAE,IAAI,OACnB,UAAA,gBAAArP;AAAA,4BAACF;AAAA,4BAAA;AAAA,8BACC,WAAU;AAAA,8BACV,IAAI;AAAA,gCACF,UAAU;AAAA,gCACV,YAAY;AAAA,gCACZ,OAAO;AAAA,gCACP,iBAAiB;AAAA,gCACjB,IAAI;AAAA,gCACJ,IAAI;AAAA,gCACJ,cAAc;AAAA,8BAAA;AAAA,8BAGf,UAAA6F,EAAU;AAAA,4BAAA;AAAA,0BAAA,GAEf;AAAA,0BACA,gBAAA3F,EAACqP,KAAU,IAAI,EAAE,IAAI,IAAA,GAAO,OAAM,UAChC,UAAA,gBAAArP;AAAA,4BAACG;AAAA,4BAAA;AAAA,8BACC,MAAK;AAAA,8BACL,SAAS,MAAMqQ,GAAgB7K,CAAS;AAAA,8BACxC,IAAI;AAAA,gCACF,OAAO;AAAA,gCACP,WAAW,EAAE,OAAO,UAAA;AAAA,8BAAU;AAAA,8BAGhC,UAAA,gBAAA3F;AAAA,gCAACC;AAAA,gCAAA;AAAA,kCACC,MAAMqR;AAAA,kCACN,OAAO,EAAE,UAAU,GAAA;AAAA,gCAAG;AAAA,8BAAA;AAAA,4BACxB;AAAA,0BAAA,EACF,CACF;AAAA,wBAAA;AAAA,sBAAA;AAAA,sBA9CK3L,EAAU,MAAMA,EAAU;AAAA,oBAAA,CAgDlC,EAAA,CACH;AAAA,kBAAA,EAAA,CACF;AAAA,gBAAA;AAAA,cAAA,IAGF,gBAAA5F;AAAA,gBAACD;AAAA,gBAAA;AAAA,kBACC,IAAI;AAAA,oBACF,IAAI;AAAA,oBACJ,WAAW;AAAA,oBACX,OAAO;AAAA,kBAAA;AAAA,kBAGT,UAAA;AAAA,oBAAA,gBAAAE;AAAA,sBAACC;AAAA,sBAAA;AAAA,wBACC,MAAMkI;AAAA,wBACN,OAAO,EAAE,UAAU,IAAI,cAAc,IAAI,SAAS,KAAA;AAAA,sBAAK;AAAA,oBAAA;AAAA,oBAEzD,gBAAAnI;AAAA,sBAACK;AAAA,sBAAA;AAAA,wBACC,SAAQ;AAAA,wBACR,IAAI,EAAE,YAAY,KAAK,OAAO,UAAA;AAAA,wBAC/B,UAAA;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAGD,gBAAAL,EAACK,KAAW,SAAQ,WAAU,IAAI,EAAE,OAAO,UAAA,GAAa,UAAA,2CAAA,CAExD;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YACF;AAAA,UAAA;AAAA,UAIJ,gBAAAL,EAACqI,IAAA,EAAc,WAAU,kBAAiB,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,EAAA,GAC/D,UAAAyD,IACC,gBAAA/L;AAAA,YAACD;AAAA,YAAA;AAAA,cACC,IAAI;AAAA,gBACF,SAAS;AAAA,gBACT,gBAAgB;AAAA,gBAChB,OAAO;AAAA,gBACP,KAAK;AAAA,cAAA;AAAA,cAGP,UAAA;AAAA,gBAAA,gBAAAE;AAAA,kBAACM;AAAA,kBAAA;AAAA,oBACC,SAAS,MAAM;AACb,sBAAAwM,EAAA,GACAf,EAAY,EAAK;AAAA,oBACnB;AAAA,oBACA,WAAU;AAAA,oBACV,WACE,gBAAA/L;AAAA,sBAACC;AAAA,sBAAA;AAAA,wBACC,MAAMuP;AAAA,wBACN,OAAO,EAAE,UAAU,GAAA;AAAA,sBAAG;AAAA,oBAAA;AAAA,oBAG3B,UAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAGD,gBAAAxP;AAAA,kBAACM;AAAA,kBAAA;AAAA,oBACC,SAASuN;AAAA,oBACT,WAAU;AAAA,oBACV,UAAU,CAACD;AAAA,oBAEV,cAAmB,qBAAqB;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAC3C;AAAA,YAAA;AAAA,UAAA,IAGF,gBAAA5N;AAAA,YAACM;AAAA,YAAA;AAAA,cACC,SAAS,MAAMyL,EAAY,EAAI;AAAA,cAC/B,WAAU;AAAA,cACV,IAAI,EAAE,OAAO,OAAA;AAAA,cACb,6BACG9L,GAAA,EAAgB,MAAMe,IAAQ,OAAO,EAAE,UAAU,GAAA,GAAM;AAAA,cAE3D,UAAA;AAAA,YAAA;AAAA,UAAA,EAED,CAEJ;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGF,gBAAAhB;AAAA,MAACyL;AAAA,MAAA;AAAA,QACC,MAAMiH;AAAA,QACN,SAAS,MAAMC,EAAuB,EAAK;AAAA,QAC3C,gBAAc;AAAA,QACd,SAAS,CAACwD,MAAkB;AAC1B,UAAIA,KAAA,QAAAA,EAAe,QACjBpD;AAAA,YAAoB,CAACqD,MACnBA,EAAK,SAASD,EAAc,IAAI,IAC5BC,IACA,CAAC,GAAGA,GAAMD,EAAc,IAAI;AAAA,UAAA;AAAA,QAGtC;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AAEA5D,GAAwB,YAAY;AAAA,EAClC,MAAM/R,EAAU,KAAK;AAAA,EACrB,SAASA,EAAU,KAAK;AAC1B;AC/8BA,MAAM6V,KAAU,CAACb,MACX,CAACA,KACD,OAAOA,KAAQ,YAAYA,EAAI,YAAA,MAAkB,UAAgB,IAC9D,SAASA,CAAG,KAAK,GAGpBc,KAAgB,CAAC,EAAE,cAAAC,GAAc,OAAAnP,GAAO,eAAAoP,QAAoB;AAChE,QAAMC,IAAWJ,GAAQE,CAAY,GAE/BG,IAAkB,CAAChP,MAAM;AAC7B,UAAMiP,IAAWjP,EAAE,OAAO;AAC1B,QAAIiP,MAAa,IAAI;AACnB,MAAAH,EAAc,QAAQ;AACtB;AAAA,IACF;AAEA,UAAMhB,IAAM,KAAK,IAAI,GAAG,SAASmB,CAAQ,KAAK,CAAC;AAC/C,IAAAH,EAAc,GAAGhB,CAAG,OAAO;AAAA,EAC7B;AAEA,SACE,gBAAAzV,EAACD,GAAA,EAAI,IAAI,EAAE,UAAU,YAAY,IAAIsH,IAAQ,MAAM,EAAA,GACjD,UAAA;AAAA,IAAA,gBAAArH,EAACD,GAAA,EAAI,IAAI,EAAE,SAAS,QAAQ,KAAK,GAAG,YAAY,SAAA,GAC9C,UAAA;AAAA,MAAA,gBAAAE;AAAA,QAACY;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,MAAK;AAAA,UACL,OAAO6V,EAAS,SAAA;AAAA,UAChB,UAAUC;AAAA,UACV,YAAY,EAAE,KAAK,EAAA;AAAA,UACnB,WAAW,2BAA2BtP,IAAQ,gBAAgB,EAAE;AAAA,UAChE,IAAI,EAAE,MAAM,EAAA;AAAA,QAAE;AAAA,MAAA;AAAA,MAEhB,gBAAApH;AAAA,QAACK;AAAA,QAAA;AAAA,UACC,IAAI,EAAE,OAAO,WAAW,UAAU,QAAQ,UAAU,OAAA;AAAA,UACrD,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAED,GACF;AAAA,IACC+G,KACC,gBAAArH;AAAA,MAACD;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,IAAI,EAAE,UAAU,YAAY,KAAK,QAAQ,IAAI,GAAG,MAAM,EAAA;AAAA,QAEtD,UAAA;AAAA,UAAA,gBAAAE,EAACC,GAAA,EAAgB,MAAM2W,GAAA,CAAqB;AAAA,UAC3CxP;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACH,GAEJ;AAEJ;AAEAkP,GAAc,YAAY;AAAA,EACxB,cAAc9V,EAAU;AAAA,EACxB,OAAOA,EAAU;AAAA,EACjB,eAAeA,EAAU,KAAK;AAChC;AAEA,MAAMqW,KAAmB,CAAC;AAAA,EACxB,OAAA9U,IAAQ,CAAA;AAAA,EACR,UAAAD,IAAW;AAAA,EACX,WAAAgV,IAAY;AAAA,EACZ,UAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,QAAAC,IAAS,CAAA;AACX,MAAM;AACJ,QAAM,CAACC,GAAoBC,CAAqB,IAAIxS,EAAS;AAAA,IAC3D,MAAM;AAAA,IACN,OAAO;AAAA,EAAA,CACR,GACK,CAACyS,GAAmBC,CAAoB,IAAI1S,EAAS;AAAA,IACzD,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,IACP,UAAU;AAAA,EAAA,CACX,GAEK2S,IAAUxV,MAAa;AAE7B,MAAIyV,IAAY,CAAA;AAChB,EAAIT,IAAY,MACVQ,IACFC,IACExV,KAAS,OAAOA,KAAU,YAAY,CAAC,MAAM,QAAQA,CAAK,IACtD,CAACA,CAAK,IACN,MAAM,QAAQA,CAAK,KAAKA,EAAM,SAAS,IACrC,CAACA,EAAM,CAAC,CAAC,IACT,CAAA,IAGRwV,KADkB,MAAM,QAAQxV,CAAK,IAAIA,IAAQ,CAAA,GAC3B,MAAM,GAAG+U,CAAS;AAI5C,QAAMU,IAAoB,CAAC9H,GAAK+H,GAAOlW,MAAU;AAC/C,QAAImW,IAAiBnW;AAKrB,QAJIkW,MAAU,eACZC,IAAiBnW,MAAU,KAAK,KAAK,KAAK,IAAI,GAAG,SAASA,CAAK,KAAK,CAAC,IAGnE+V,GAAS;AACX,YAAMK,IAAc;AAAA,QAClB,GAAI,MAAM,QAAQ5V,CAAK,IAAIA,EAAM,CAAC,IAAIA;AAAA,QACtC,CAAC0V,CAAK,GAAGC;AAAA,MAAA;AAIX,MAAIZ,MAAc,MAChBa,EAAY,WAAW,IAGzBZ,EAASY,CAAW;AAAA,IACtB,OAAO;AACL,YAAMC,IAAY,MAAM,QAAQ7V,CAAK,IAAIA,IAAQ,CAAA,GAC3C8V,IAAeD,EAAU,IAAI,CAACE,GAAGC,MAAM;AAC3C,YAAIC,IAAU,EAAE,GAAGF,EAAA;AACnB,eAAIL,MAAU,cACRlW,KAASwW,KAAKrI,IAChBsI,EAAQ,YAAY,KACX,CAACzW,KAASwW,KAAKrI,MACxBsI,EAAQ,YAAY,IACpB,OAAOA,EAAQ,SAERD,MAAMrI,MACX+H,MAAU,WAAW,CAACC,IACxB,OAAOM,EAAQ,QAEfA,EAAQP,CAAK,IAAIC,IAIjBK,MAAMH,EAAU,SAAS,MAC3BI,EAAQ,WAAW,IAEdA;AAAA,MACT,CAAC;AACD,MAAAjB,EAASc,CAAY;AAAA,IACvB;AAAA,EACF,GAEMI,IAAyB,MAAM;AACnC,IAAIb,EAAkB,UAAU,SAIhCI;AAAA,MACEJ,EAAkB;AAAA,MAClB;AAAA,MACAA,EAAkB,MAAM,KAAA;AAAA,IAAK,GAE/BC,EAAqB;AAAA,MACnB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,UAAU;AAAA,IAAA,CACX;AAAA,EACH,GAEMa,IAAoB,MAAM;AAC9B,IAAAnB,EAASQ,EAAU,OAAO,CAACxP,GAAGgQ,MAAMA,MAAMb,EAAmB,KAAK,CAAC,GACnEC,EAAsB,EAAE,MAAM,IAAO,OAAO,MAAM;AAAA,EACpD;AAEA,SACE,gBAAApX,EAACD,GAAA,EAAI,WAAU,cACb,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAACD;AAAA,MAAA;AAAA,QACC,IAAI;AAAA,UACF,SAAS;AAAA,UACT,gBAAgB;AAAA,UAChB,YAAY;AAAA,UACZ,KAAK;AAAA,UACL,UAAU;AAAA,UACV,IAAI;AAAA,QAAA;AAAA,QAGN,UAAA;AAAA,UAAA,gBAAAE,EAACK,GAAA,EAAW,WAAU,iBAAgB,IAAI,EAAE,IAAI,EAAA,GAAK,UAAA,sBAAA,CAErD;AAAA,UAEA,gBAAAN,EAACD,GAAA,EAAI,WAAU,oBACb,UAAA;AAAA,YAAA,gBAAAE,EAACK,GAAA,EAAW,WAAU,gBAAe,UAAA,cAAU;AAAA,YAC/C,gBAAAN,EAACD,GAAA,EAAI,WAAU,oBACb,UAAA;AAAA,cAAA,gBAAAE;AAAA,gBAACE;AAAA,gBAAA;AAAA,kBACC,OAAM;AAAA,kBACN,OAAK;AAAA,kBACL,WAAU;AAAA,kBAEV,UAAA,gBAAAF;AAAA,oBAACF;AAAA,oBAAA;AAAA,sBACC,WAAW,iBAAiBgC,MAAa,UAAU,WAAW,EAAE;AAAA,sBAChE,SAAS,MAAMkV,EAAiB,OAAO;AAAA,sBACxC,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAED;AAAA,cAAA;AAAA,cAEF,gBAAAhX;AAAA,gBAACE;AAAA,gBAAA;AAAA,kBACC,OAAM;AAAA,kBACN,OAAK;AAAA,kBACL,WAAU;AAAA,kBAEV,UAAA,gBAAAF;AAAA,oBAACF;AAAA,oBAAA;AAAA,sBACC,WAAW,iBAAiBgC,MAAa,aAAa,WAAW,EAAE;AAAA,sBACnE,SAAS,MAAMkV,EAAiB,UAAU;AAAA,sBAC3C,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAED;AAAA,cAAA;AAAA,YACF,EAAA,CACF;AAAA,UAAA,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAEF,gBAAAhX,EAACgP,IAAA,EAAe,WAAU,cACxB,UAAA,gBAAAjP;AAAA,MAACmP;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,IAAI;AAAA,UACF,wBAAwB;AAAA,YACtB,YAAY;AAAA,YACZ,eAAe;AAAA,UAAA;AAAA,QACjB;AAAA,QAGF,UAAA;AAAA,UAAA,gBAAAlP,EAACmP,IAAA,EACC,4BAACC,IAAA,EACC,UAAA;AAAA,YAAA,gBAAApP,EAACqP,GAAA,EAAU,WAAU,eAAc,IAAI,EAAE,IAAI,KAAK,OAAO,GAAA,GAAM,UAAA,IAAA,CAE/D;AAAA,YACA,gBAAArP,EAACqP,KAAU,WAAU,eAAc,IAAI,EAAE,IAAI,IAAA,GAAO,UAAA,gBAAA,CAEpD;AAAA,YACA,gBAAArP,EAACqP,KAAU,WAAU,eAAc,IAAI,EAAE,IAAI,IAAA,GAAO,UAAA,cAAA,CAEpD;AAAA,YACA,gBAAArP,EAACqP,KAAU,WAAU,eAAc,IAAI,EAAE,IAAI,IAAA,GAAO,UAAA,sBAAA,CAEpD;AAAA,YACC,CAACiI,KACA,gBAAAvX,EAAAmI,IAAA,EACE,UAAA;AAAA,cAAA,gBAAAlI,EAACqP,GAAA,EAAU,WAAU,eAAc,IAAI,EAAE,IAAI,KAAK,OAAO,IAAA,GAAO,UAAA,UAAA,CAEhE;AAAA,cACA,gBAAArP,EAACqP,GAAA,EAAU,WAAU,eAAc,IAAI,EAAE,IAAI,KAAK,OAAO,MAAM,UAAA,UAAA,CAE/D;AAAA,YAAA,EAAA,CACF;AAAA,UAAA,EAAA,CAEJ,EAAA,CACF;AAAA,UACA,gBAAArP,EAACsP,IAAA,EACE,UAAAiI,KAAaA,EAAU,SAAS,IAC/BA,EAAU,IAAI,CAAChV,GAAMmN,MAAQ;AAC3B,kBAAMyI,IAAiBlB,EAAOvH,CAAG,KAAK,CAAA,GAChC0I,IAAYD,EAAe;AACjC,gBAAIE,IAAUF,EAAe;AAC7B,kBAAMG,IAAgBH,EAAe,UAC/BI,IAAWlC,GAAQ9T,KAAA,gBAAAA,EAAM,YAAY,GACrCiW,IAASnC,GAAQ9T,KAAA,gBAAAA,EAAM,UAAU;AACvC,mBAAI,CAAC8V,KAAWG,IAAS,KAAKA,KAAUD,MACtCF,IAAU,kEAGTjJ,IAAA,EACC,UAAA;AAAA,cAAA,gBAAApP,EAACqP,KAAU,IAAI,EAAE,IAAI,IAAA,GAAQ,cAAM,GAAE;AAAA,gCACpCA,GAAA,EAAU,IAAI,EAAE,IAAI,OACnB,UAAA,gBAAArP;AAAA,gBAACsW;AAAA,gBAAA;AAAA,kBACC,cAAc/T,KAAA,gBAAAA,EAAM;AAAA,kBACpB,OAAO6V,MAAa7V,KAAA,gBAAAA,EAAM;AAAA,kBAC1B,eAAe,CAACiT,MACdgC,EAAkB9H,GAAK,gBAAgB8F,CAAG;AAAA,gBAAA;AAAA,cAAA,GAGhD;AAAA,gCACCnG,GAAA,EAAU,IAAI,EAAE,IAAI,OACnB,UAAA,gBAAArP;AAAA,gBAACsW;AAAA,gBAAA;AAAA,kBACC,cAAc/T,KAAA,gBAAAA,EAAM;AAAA,kBACpB,OAAO8V;AAAA,kBACP,eAAe,CAAC7C,MACdgC,EAAkB9H,GAAK,cAAc8F,CAAG;AAAA,gBAAA;AAAA,cAAA,GAG9C;AAAA,cACA,gBAAAxV,EAACqP,GAAA,EAAU,IAAI,EAAE,IAAI,IAAA,GACjB,UAAAiI,KAAWR,MAAc,KAC1B,CAACQ,KAAW5H,MAAQ6H,EAAU,SAAS,IACtC,gBAAAvX;AAAA,gBAACK;AAAA,gBAAA;AAAA,kBACC,SAAQ;AAAA,kBACR,IAAI,EAAE,OAAO,WAAW,IAAI,EAAA;AAAA,kBAC7B,UAAA;AAAA,gBAAA;AAAA,cAAA,IAID,gBAAAN,EAAAmI,IAAA,EACE,UAAA;AAAA,gBAAA,gBAAAlI;AAAA,kBAACY;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,MAAK;AAAA,oBACL,OAAO,QAAO2B,KAAA,gBAAAA,EAAM,aAAY,CAAC;AAAA,oBACjC,YAAY,EAAE,KAAK,EAAA;AAAA,oBACnB,UAAU,CAACmF,MACT8P,EAAkB9H,GAAK,YAAYhI,EAAE,OAAO,KAAK;AAAA,oBAEnD,WAAU;AAAA,oBACV,OAAO,CAAC,CAAC4Q;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEVA,KACC,gBAAAvY,EAACD,GAAA,EAAI,WAAU,aACb,UAAA;AAAA,kBAAA,gBAAAE,EAACC,GAAA,EAAgB,MAAM2W,GAAA,CAAqB;AAAA,kBAC3C0B;AAAA,gBAAA,EAAA,CACH;AAAA,cAAA,EAAA,CAEJ,EAAA,CAEJ;AAAA,cACC,CAAChB,KACA,gBAAAvX,EAACsP,GAAA,EAAU,IAAI,EAAE,IAAI,OACnB,UAAA;AAAA,gBAAA,gBAAAtP;AAAA,kBAACD;AAAA,kBAAA;AAAA,oBACC,IAAI;AAAA,sBACF,SAAS;AAAA,sBACT,YAAY;AAAA,sBACZ,gBAAgB;AAAA,sBAChB,KAAK;AAAA,sBACL,UAAU;AAAA,oBAAA;AAAA,oBAGZ,UAAA;AAAA,sBAAA,gBAAAE;AAAA,wBAACyY;AAAA,wBAAA;AAAA,0BACC,MAAK;AAAA,0BACL,SAAS,CAAC,EAAClW,KAAA,QAAAA,EAAM;AAAA,0BACjB,UAAU,CAACmF,MACT8P;AAAA,4BACE9H;AAAA,4BACA;AAAA,4BACAhI,EAAE,OAAO;AAAA,0BAAA;AAAA,wBACX;AAAA,sBAAA;AAAA,uBAGHnF,KAAA,gBAAAA,EAAM,cACL,gBAAAvC;AAAA,wBAACE;AAAA,wBAAA;AAAA,0BACC,OAAM;AAAA,0BACN,OAAK;AAAA,0BACL,WAAU;AAAA,0BAEV,UAAA,gBAAAF;AAAA,4BAACG;AAAA,4BAAA;AAAA,8BACC,MAAK;AAAA,8BACL,IAAI;AAAA,gCACF,OAAO;AAAA,gCACP,QAAQ;AAAA,gCACR,SAASoC,KAAA,QAAAA,EAAM,QAAQ,YAAY;AAAA,gCACnC,OAAOA,KAAA,QAAAA,EAAM,QAAQ,YAAY;AAAA,gCACjC,QAAQ;AAAA,gCACR,aAAaA,KAAA,QAAAA,EAAM,QAAQ,YAAY;AAAA,gCACvC,WAAW;AAAA,gCACX,WAAW;AAAA,kCACT,SAASA,KAAA,QAAAA,EAAM,QAAQ,YAAY;AAAA,gCAAA;AAAA,8BACrC;AAAA,8BAEF,SAAS,CAACmW,MACRrB,EAAqB;AAAA,gCACnB,MAAM;AAAA,gCACN,OAAO3H;AAAA,gCACP,QAAOnN,KAAA,gBAAAA,EAAM,UAAS;AAAA,gCACtB,UAAUmW,EAAM;AAAA,8BAAA,CACjB;AAAA,8BAGH,UAAA,gBAAA1Y,EAACC,GAAA,EAAgB,MAAMe,IAAQ,UAAU,EAAA,CAAG;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBAC9C;AAAA,sBAAA;AAAA,oBACF;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAGHmX,EAAe,aACd,gBAAApY,EAACD,GAAA,EAAI,WAAU,aACb,UAAA;AAAA,kBAAA,gBAAAE,EAACC,GAAA,EAAgB,MAAM2W,GAAA,CAAqB;AAAA,kBAC3CuB,EAAe;AAAA,gBAAA,EAAA,CAClB;AAAA,cAAA,GAEJ;AAAA,cAED,CAACb,KACA,gBAAAtX,EAACqP,GAAA,EAAU,IAAI,EAAE,IAAI,KAAK,WAAW,SAAA,GACnC,UAAA,gBAAArP;AAAA,gBAACG;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,OAAM;AAAA,kBACN,SAAS,MACPgX,EAAsB,EAAE,MAAM,IAAM,OAAOzH,GAAK;AAAA,kBAGlD,UAAA,gBAAA1P,EAACC,GAAA,EAAgB,MAAM0Y,GAAA,CAAS;AAAA,gBAAA;AAAA,cAAA,EAClC,CACF;AAAA,YAAA,KA9HWpW,EAAK,MAAMmN,CAgI1B;AAAA,UAEJ,CAAC,IAED,gBAAA1P,EAACoP,IAAA,EACC,UAAA,gBAAApP;AAAA,YAACqP;AAAA,YAAA;AAAA,cACC,SAASiI,IAAU,IAAI;AAAA,cACvB,OAAM;AAAA,cACN,IAAI,EAAE,IAAI,EAAA;AAAA,cAEV,UAAA,gBAAAtX,EAACK,GAAA,EAAW,SAAQ,SAAQ,IAAI,EAAE,OAAO,UAAA,GACtC,UAAAyW,MAAc,IACX,wDACA,wCAAA,CACN;AAAA,YAAA;AAAA,UAAA,GAEJ,EAAA,CAEJ;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAEJ;AAAA,IAEA,gBAAA/W;AAAA,MAAC6Y;AAAA,MAAA;AAAA,QACC,MAAMxB,EAAkB;AAAA,QACxB,UAAUA,EAAkB;AAAA,QAC5B,SAAS,MACPC,EAAqB;AAAA,UACnB,MAAM;AAAA,UACN,OAAO;AAAA,UACP,OAAO;AAAA,UACP,UAAU;AAAA,QAAA,CACX;AAAA,QAEH,cAAc;AAAA,UACZ,UAAU;AAAA,UACV,YAAY;AAAA,QAAA;AAAA,QAEd,iBAAiB;AAAA,UACf,UAAU;AAAA,UACV,YAAY;AAAA,QAAA;AAAA,QAEd,YAAY;AAAA,UACV,IAAI;AAAA,YACF,cAAc;AAAA,YACd,GAAG;AAAA,YACH,OAAO;AAAA,YACP,WAAW;AAAA,YACX,QAAQ;AAAA,YACR,IAAI;AAAA,UAAA;AAAA,QACN;AAAA,QAGF,UAAA;AAAA,UAAA,gBAAArX;AAAA,YAACK;AAAA,YAAA;AAAA,cACC,IAAI,EAAE,YAAY,KAAK,OAAO,WAAW,UAAU,QAAQ,IAAI,EAAA;AAAA,cAChE,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,4BAGAP,GAAA,EACC,UAAA;AAAA,YAAA,gBAAAE,EAACK,GAAA,EAAW,IAAI,EAAE,OAAO,WAAW,IAAI,MAAM,UAAU,OAAA,GAAU,UAAA,sCAAA,CAElE;AAAA,YACA,gBAAAL;AAAA,cAACY;AAAA,cAAA;AAAA,gBACC,WAAS;AAAA,gBACT,WAAS;AAAA,gBACT,MAAK;AAAA,gBACL,OAAM;AAAA,gBACN,OAAOwW,EAAkB;AAAA,gBACzB,UAAU,CAAC1P,MACT2P,EAAqB,CAACjB,OAAU;AAAA,kBAC9B,GAAGA;AAAA,kBACH,OAAO1O,EAAE,OAAO;AAAA,gBAAA,EAChB;AAAA,cAAA;AAAA,YAAA;AAAA,UAEN,GACF;AAAA,UACA,gBAAA3H,EAACD,GAAA,EAAI,IAAI,EAAE,SAAS,QAAQ,gBAAgB,YAAY,KAAK,GAAG,IAAI,IAAA,GAClE,UAAA;AAAA,YAAA,gBAAAE;AAAA,cAACM;AAAA,cAAA;AAAA,gBACC,SAAS,MACP+W,EAAqB;AAAA,kBACnB,MAAM;AAAA,kBACN,OAAO;AAAA,kBACP,OAAO;AAAA,kBACP,UAAU;AAAA,gBAAA,CACX;AAAA,gBAEH,IAAI,EAAE,OAAO,WAAW,YAAY,KAAK,UAAU,GAAG,IAAI,EAAA;AAAA,gBAC3D,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAGD,gBAAArX;AAAA,cAACM;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,SAAS2X;AAAA,gBACT,IAAI;AAAA,kBACF,YAAY;AAAA,kBACZ,cAAc;AAAA,kBACd,SAAS;AAAA,kBACT,UAAU;AAAA,kBACV,IAAI;AAAA,gBAAA;AAAA,gBAEP,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAED,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGF,gBAAAlY;AAAA,MAACuH;AAAA,MAAA;AAAA,QACC,MAAM4P,EAAmB;AAAA,QACzB,SAAS,MAAMC,EAAsB,EAAE,MAAM,IAAO,OAAO,MAAM;AAAA,QACjE,YAAY;AAAA,UACV,IAAI,EAAE,cAAc,QAAQ,SAAS,MAAA;AAAA,QAAM;AAAA,QAG7C,UAAA;AAAA,UAAA,gBAAAnX,EAACuH,IAAA,EAAY,IAAI,EAAE,YAAY,KAAK,OAAO,UAAA,GAAa,UAAA,eAAA,CAExD;AAAA,UACA,gBAAAvH,EAACyH,IAAA,EACC,UAAA,gBAAAzH,EAACK,GAAA,EAAW,IAAI,EAAE,OAAO,WAAW,IAAI,GAAG,UAAU,OAAA,GAAU,wEAE/D,GACF;AAAA,4BACCgI,IAAA,EAAc,IAAI,EAAE,GAAG,KACtB,UAAA;AAAA,YAAA,gBAAArI;AAAA,cAACM;AAAA,cAAA;AAAA,gBACC,SAAS,MAAM6W,EAAsB,EAAE,MAAM,IAAO,OAAO,MAAM;AAAA,gBACjE,IAAI,EAAE,OAAO,WAAW,YAAY,IAAA;AAAA,gBACrC,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAGD,gBAAAnX;AAAA,cAACM;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,OAAM;AAAA,gBACN,SAAS4X;AAAA,gBACT,IAAI,EAAE,YAAY,KAAK,cAAc,OAAO,SAAS,UAAA;AAAA,gBACtD,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAED,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AAEArB,GAAiB,YAAY;AAAA,EAC3B,OAAOrW,EAAU,UAAU;AAAA,IACzBA,EAAU;AAAA,MACRA,EAAU,MAAM;AAAA,QACd,IAAIA,EAAU,UAAU,CAACA,EAAU,QAAQA,EAAU,MAAM,CAAC;AAAA,QAC5D,WAAWA,EAAU;AAAA,QACrB,cAAcA,EAAU;AAAA,QACxB,YAAYA,EAAU;AAAA,QACtB,UAAUA,EAAU,UAAU,CAACA,EAAU,QAAQA,EAAU,MAAM,CAAC;AAAA,QAClE,OAAOA,EAAU;AAAA,QACjB,OAAOA,EAAU;AAAA,MAAA,CAClB;AAAA,IAAA;AAAA,IAEHA,EAAU,MAAM;AAAA,MACd,IAAIA,EAAU,UAAU,CAACA,EAAU,QAAQA,EAAU,MAAM,CAAC;AAAA,MAC5D,WAAWA,EAAU;AAAA,MACrB,cAAcA,EAAU;AAAA,MACxB,YAAYA,EAAU;AAAA,MACtB,UAAUA,EAAU,UAAU,CAACA,EAAU,QAAQA,EAAU,MAAM,CAAC;AAAA,MAClE,OAAOA,EAAU;AAAA,MACjB,OAAOA,EAAU;AAAA,IAAA,CAClB;AAAA,EAAA,CACF;AAAA,EACD,UAAUA,EAAU;AAAA,EACpB,WAAWA,EAAU;AAAA,EACrB,UAAUA,EAAU,KAAK;AAAA,EACzB,kBAAkBA,EAAU,KAAK;AAAA,EACjC,QAAQA,EAAU;AACpB;ACpkBO,MAAMqY,KAAoB,OAAOC,GAAaC,GAAOC,GAAyBC,MAAuB;AAC1G,QAAMC,IAAM,MAAM,QAAQJ,CAAW,IAAIA,IAAc,CAACA,CAAW,GAE7D7Q,IAAS;AAAA,IACb,OAAA8Q;AAAA,IACA,yBAAAC;AAAA,IACA,oBAAAC;AAAA,EACJ;AACE,EAAIC,EAAI,WACNjR,EAAO,cAAciR,EAAI,KAAK,GAAG,GACjCjR,EAAO,aAAaiR,EAAI,CAAC;AAE3B,MAAI;AAEF,YADY,MAAMC,GAAI,IAAI,uBAAuB,EAAE,QAAAlR,GAAQ,YAAY,IAAO,GACnE;AAAA,EACb,SAASb,GAAO;AACd,YAAQ,MAAMA,CAAK,GACnBX,GAAU,EAAE,MAAM,SAAS,SAAS,qCAAoC,CAAE;AAAA,EAC5E;AACF,GCpBa2S,KAAsB,CAACnR,GAAQpC,MAAWsT,GAAI,IAAI,2BAA2B,EAAE,QAAAlR,GAAQ,GAAGpC,GAAQ,GCmBzGwT,KAA4B,CAAC,EAAE,SAAA5W,IAAU,CAAA,GAAI,UAAAsU,QAAe;;AAChE,QAAM,EAAE,eAAeuC,EAAA,IAAiB/T;AAAA,IACtC,CAACC,MAAUA,EAAM;AAAA,EAAA,GAEb,CAACuD,GAAaC,CAAc,IAAIrE,EAAS,EAAK,GAC9C,CAACqH,GAASC,CAAU,IAAItH,EAAS,EAAK,GACtC,CAAC4U,GAAeC,CAAgB,IAAI7U,EAAS,CAAA,CAAE,GAE/C,CAAC8U,GAAcC,CAAe,IAAI/U,EAAS,CAAA,CAAE,GAC7C,CAACgV,GAAcC,CAAe,IAAIjV,EAAS,CAAA,CAAE,GAC7C,CAACkV,GAAYC,CAAa,IAAInV,EAAS,CAAA,CAAE,GACzC,CAACoV,GAAWC,CAAY,IAAIrV,EAAS,IAAI,GAEzCsV,IAAcC,GAAO,EAAK,GAE1BC,IAAiB,OAAOC,GAAcC,IAASZ,MAAiB;;AACpE,QAAI,GAACW,KAAgB,CAACC,KAAUA,EAAO,WAAW;AAClD,eAAStC,IAAI,GAAGA,IAAIsC,EAAO,SAAS,GAAGtC,KAAK;AAC1C,cAAMuC,IAAcD,EAAOtC,CAAC;AAC5B,YAAI,CAACuC,EAAa;AAClB,cAAMC,IAAa,OAAOD,EAAY,MAAMA,EAAY,IAAI,GACtDE,KAAa7X,IAAAyX,EAAaG,CAAU,MAAvB,gBAAA5X,EAA0B;AAE7C,YAAI6X,GAAY;AACd,gBAAMC,IAAWJ,EAAOtC,IAAI,CAAC,GACvB2C,IAAU,OAAOD,EAAS,MAAMA,EAAS,IAAI;AACnD,gBAAME,EAAeH,GAAYC,EAAS,OAAOC,CAAO;AAAA,QAC1D;AACE;AAAA,MAEJ;AAAA,EACF,GAEME,IAAgB,OAAOC,IAAsB,SAAS;AAC1D,QAAI,CAAAZ,EAAY,SAChB;AAAA,MAAAA,EAAY,UAAU,IACtBhO,EAAW,EAAI;AACf,UAAI;AACF,cAAM6O,IAAO,MAAM1B,GAAoB,CAAA,GAAI,EAAE,YAAY,IAAO;AAChE,YAAI0B,KAAA,QAAAA,EAAM,MAAM;AACd,gBAAMC,IAASD,EAAK,KACjB,OAAO,CAAC,MAAM,EAAE,QAAQ,EACxB,KAAK,CAACE,GAAGC,MAAMD,EAAE,QAAQC,EAAE,KAAK,GAE7BC,wBAAiB,IAAA;AACvB,UAAAH,EAAO,QAAQ,CAAC,MAAM;AACpB,gBAAI,CAACG,EAAW,IAAI,EAAE,KAAK;AACzB,cAAAA,EAAW,IAAI,EAAE,OAAO;AAAA,gBACtB,IAAI,OAAO,EAAE,MAAM,EAAE,IAAI;AAAA,gBACzB,OAAO,EAAE;AAAA,gBACT,MAAM,EAAE;AAAA,gBACR,OAAO,CAAC,CAAC;AAAA,cAAA,CACV;AAAA,iBACI;AACL,oBAAMC,IAAQD,EAAW,IAAI,EAAE,KAAK;AACpC,cAAAC,EAAM,MAAM,MAAM,OAAO,EAAE,MAAM,EAAE,IAAI,GACvCA,EAAM,QAAQ,QAAQ,EAAE,MACxBA,EAAM,MAAM,KAAK,CAAC;AAAA,YACpB;AAAA,UACF,CAAC;AACD,gBAAMC,IAAoB,MAAM,KAAKF,EAAW,QAAQ;AACxD,UAAAxB,EAAgB0B,CAAiB;AAEjC,gBAAMC,IAAW,CAAA,GACXC,IAAW,CAAA;AAOjB,cANAF,EAAkB,QAAQ,CAAC,MAAM;AAC/B,kBAAMG,IAAM,OAAO,EAAE,EAAE;AACvB,YAAAF,EAASE,CAAG,IAAI,EAAE,IAAI,IAAI,MAAM,GAAA,GAChCD,EAASC,CAAG,IAAI,CAAA;AAAA,UAClB,CAAC,GAEGH,EAAkB,SAAS,GAAG;AAChC,kBAAMI,KAAOlC,KAAA,gBAAAA,EAAc,uBAAsB,MAC3CmC,IAAgBL,EAAkB,CAAC,EAAE,OACrCM,IAAiB,MAAM7C;AAAA,cAC3B,CAAA;AAAA,cACA4C;AAAA,cACA;AAAA,cACAD;AAAA,YAAA;AAGF,YAAIE,KAAkB,MAAM,QAAQA,CAAc,KAChDA,EAAe,QAAQ,CAACC,MAAY;AAClC,oBAAMC,IAAeD,EAAQ,OACvBE,KAAgBT,EAAkB;AAAA,gBACtC,CAAChO,OAAMA,GAAE,UAAUwO;AAAA,cAAA;AAGrB,kBAAIC,IAAe;AACjB,sBAAMN,KAAM,OAAOM,GAAc,EAAE,GAC7BC,MAAWH,EAAQ,mBAAmB,CAAA,GACzC,OAAO,CAACI,OAAQA,GAAI,MAAMA,GAAI,IAAI,EAClC,IAAI,CAACA,QAAS,EAAE,IAAI,OAAOA,GAAI,EAAE,GAAG,MAAMA,GAAI,KAAA,EAAO;AAExD,gBAAAT,EAASC,EAAG,IAAI,CAAC,GAAID,EAASC,EAAG,KAAK,CAAA,GAAK,GAAGO,EAAO;AAAA,cACvD;AAAA,YACF,CAAC;AAAA,UAEL;AAEA,UAAIjB,KACFf,EAAce,CAAmB,GACjCjB,EAAgB0B,CAAQ,GACxB,MAAMnB,EAAeU,GAAqBO,CAAiB,MAE3DtB,EAAcuB,CAAQ,GACtBzB,EAAgB0B,CAAQ;AAAA,QAE5B;AAAA,MACF,SAASpU,GAAK;AACZ,gBAAQ,MAAM,oDAAoDA,CAAG;AAAA,MACvE,UAAA;AACE,QAAA+E,EAAW,EAAK,GAChBgO,EAAY,UAAU;AAAA,MACxB;AAAA;AAAA,EACF,GAEMU,IAAiB,OAAOqB,GAAUC,GAAgBC,MAAkB;AACxE,QAAI;AACF,MAAA1C,EAAiB,CAACpD,OAAU,EAAE,GAAGA,GAAM,CAAC8F,CAAa,GAAG,GAAA,EAAO;AAC/D,YAAMV,KAAOlC,KAAA,gBAAAA,EAAc,uBAAsB,MAE3C1S,IAAW,MAAMiS;AAAA,QADHmD,IAAW,CAACA,CAAQ,IAAI,CAAA;AAAA,QAG1CC;AAAA,QACA;AAAA,QACAT;AAAA,MAAA;AAGF,MAAI5U,KAAY,MAAM,QAAQA,CAAQ,KACpCgT,EAAgB,CAACxD,MAAS;AACxB,cAAM+F,IAAO,EAAE,GAAG/F,EAAA;AAClB,eAAA+F,EAAKD,CAAa,IAAI,CAAA,GACtBtV,EAAS,QAAQ,CAAC+U,MAAY;AAC5B,gBAAMC,IAAeD,EAAQ,OAEvBE,IAAgBpC,EAAa;AAAA,YACjC,CAACrM,MAAMA,EAAE,UAAUwO;AAAA,UAAA;AAGrB,cAAIC,KAAiB,OAAOA,EAAc,EAAE,MAAMK,GAAe;AAC/D,kBAAMX,IAAM,OAAOM,EAAc,EAAE,GAC7BC,MAAWH,EAAQ,mBAAmB,CAAA,GACzC,OAAO,CAACI,OAAQA,GAAI,MAAMA,GAAI,IAAI,EAClC,IAAI,CAACA,QAAS,EAAE,IAAI,OAAOA,GAAI,EAAE,GAAG,MAAMA,GAAI,KAAA,EAAO;AACxD,YAAAI,EAAKZ,CAAG,IAAI,CAAC,GAAIY,EAAKZ,CAAG,KAAK,CAAA,GAAK,GAAGO,EAAO;AAAA,UAC/C;AAAA,QACF,CAAC,GACMK;AAAA,MACT,CAAC;AAAA,IAEL,SAAS/U,GAAO;AACd,cAAQ,MAAM,wBAAwB6U,CAAc,KAAK7U,CAAK;AAAA,IAChE,UAAA;AACE,MAAAoS,EAAiB,CAACpD,OAAU,EAAE,GAAGA,GAAM,CAAC8F,CAAa,GAAG,GAAA,EAAQ;AAAA,IAClE;AAAA,EACF,GAEME,IAAYlC,GAAO,IAAI;AAE7B,EAAAmC,GAAM,UAAU,MAAM;AACpB,IAAItT,KAAeqT,EAAU,WAC3B,WAAW,MAAM;AACf,MAAAA,EAAU,QAAQ,SAAS;AAAA,QACzB,KAAKA,EAAU,QAAQ;AAAA,QACvB,UAAU;AAAA,MAAA,CACX;AAAA,IACH,GAAG,GAAG;AAAA,EAEV,GAAG,CAACvC,GAAY9Q,CAAW,CAAC;AAE5B,QAAMuT,IAAqB,OAAOC,MAAkB;AAClD,QAAI,GAACA,KAAiBA,EAAc,WAAW,IAC/C;AAAA,MAAAtQ,EAAW,EAAI;AACf,UAAI;AACF,YAAIoO,IAASZ,GACT+C,IAAc,EAAE,GAAG7C,EAAA;AAEvB,YAAIU,EAAO,WAAW,GAAG;AACvB,gBAAMS,IAAO,MAAM1B,GAAoB,CAAA,GAAI,EAAE,YAAY,IAAO;AAChE,cAAI0B,KAAA,QAAAA,EAAM,MAAM;AACd,kBAAMC,IAASD,EAAK,KACjB,OAAO,CAAC2B,MAAMA,EAAE,QAAQ,EACxB,KAAK,CAACzB,GAAGC,MAAMD,EAAE,QAAQC,EAAE,KAAK,GAE7BC,wBAAiB,IAAA;AACvB,YAAAH,EAAO,QAAQ,CAAC0B,MAAM;AACpB,kBAAI,CAACvB,EAAW,IAAIuB,EAAE,KAAK;AACzB,gBAAAvB,EAAW,IAAIuB,EAAE,OAAO;AAAA,kBACtB,IAAI,OAAOA,EAAE,MAAMA,EAAE,IAAI;AAAA,kBACzB,OAAOA,EAAE;AAAA,kBACT,MAAMA,EAAE;AAAA,kBACR,OAAO,CAACA,CAAC;AAAA,gBAAA,CACV;AAAA,mBACI;AACL,sBAAMtB,IAAQD,EAAW,IAAIuB,EAAE,KAAK;AACpC,gBAAAtB,EAAM,MAAM,MAAM,OAAOsB,EAAE,MAAMA,EAAE,IAAI,GACvCtB,EAAM,QAAQ,QAAQsB,EAAE,MACxBtB,EAAM,MAAM,KAAKsB,CAAC;AAAA,cACpB;AAAA,YACF,CAAC,GACDpC,IAAS,MAAM,KAAKa,EAAW,OAAA,CAAQ,GACvCxB,EAAgBW,CAAM;AAAA,UACxB;AAAA,QACF;AAEA,YAAIA,EAAO,WAAW,GAAG;AACvB,UAAApO,EAAW,EAAK;AAChB;AAAA,QACF;AAEA,cAAMyQ,IAAU,CAAA;AAChB,YAAIV,IAAW;AACf,cAAMR,KAAOlC,KAAA,gBAAAA,EAAc,uBAAsB;AAEjD,iBAASvB,IAAI,GAAGA,IAAIwE,EAAc,QAAQxE,KAAK;AAC7C,gBAAM4E,IAAW,OAAOJ,EAAcxE,CAAC,CAAC,GAClCuC,IAAcD,EAAOtC,CAAC;AAC5B,cAAI,CAACuC,EAAa;AAElB,gBAAMiB,IAAM,OAAOjB,EAAY,MAAMA,EAAY,IAAI,GAC/C2B,IAAiB3B,EAAY,OAG7B1T,KAAW,MAAMiS;AAAA,YAFHmD,IAAW,CAACA,CAAQ,IAAI,CAAA;AAAA,YAI1CC;AAAA,YACA;AAAA,YACAT;AAAA,UAAA;AAGF,cAAI5U,MAAY,MAAM,QAAQA,EAAQ,GAAG;AACvC,gBAAIgW,KAAiB,CAAA;AACrB,YAAAhW,GAAS,QAAQ,CAAC+U,OAAY;AAC5B,oBAAMC,KAAeD,GAAQ,OACvBE,KAAgBxB,EAAO,KAAK,CAACjN,OAAMA,GAAE,UAAUwO,EAAY;AAEjE,kBAAIC,MAAiB,OAAOA,GAAc,EAAE,MAAMN,GAAK;AACrD,sBAAMO,MAAWH,GAAQ,mBAAmB,CAAA,GACzC,OAAO,CAACI,OAAQA,GAAI,MAAMA,GAAI,IAAI,EAClC,IAAI,CAACA,QAAS,EAAE,IAAI,OAAOA,GAAI,EAAE,GAAG,MAAMA,GAAI,KAAA,EAAO;AACxD,gBAAAa,KAAiB,CAAC,GAAGA,IAAgB,GAAGd,EAAO;AAAA,cACjD;AAAA,YACF,CAAC,GAEDU,EAAYjB,CAAG,IAAIqB;AACnB,kBAAMC,KAAaD,GAAe;AAAA,cAChC,CAACE,OAAM,OAAOA,GAAE,EAAE,MAAMH;AAAA,YAAA;AAE1B,gBAAIE;AACF,cAAAH,EAAQnB,CAAG,IAAI,EAAE,IAAIsB,GAAW,IAAI,MAAMA,GAAW,KAAA,GACrDb,IAAWa,GAAW;AAAA;AAEtB;AAAA,UAEJ;AACE;AAAA,QAEJ;AAEA,QAAAxC,EAAO,QAAQ,CAACoC,MAAM;AACpB,gBAAMM,IAAI,OAAON,EAAE,MAAMA,EAAE,IAAI;AAC/B,UAAKC,EAAQK,CAAC,MAAGL,EAAQK,CAAC,IAAI,EAAE,IAAI,IAAI,MAAM,GAAA,IACzCP,EAAYO,CAAC,MAAGP,EAAYO,CAAC,IAAI,CAAA;AAAA,QACxC,CAAC,GAEDnD,EAAgB4C,CAAW,GAC3B1C,EAAc4C,CAAO;AAAA,MACvB,SAASxV,GAAK;AACZ,gBAAQ,MAAM,kCAAkCA,CAAG;AAAA,MACrD,UAAA;AACE,QAAA+E,EAAW,EAAK;AAAA,MAClB;AAAA;AAAA,EACF,GAEM+Q,IAAa,CAACC,IAAS,SAAS;AAEpC,QADAjU,EAAe,EAAI,GACfiU;AACF,MAAAjD,EAAaiD,EAAO,EAAE,GAClBA,EAAO,gBAAgB,OAAO,KAAKA,EAAO,YAAY,EAAE,SAAS,IAC/DxD,EAAa,WAAW,IAC1BmB,EAAcqC,EAAO,YAAY,KAEjCnD,EAAcmD,EAAO,YAAY,GACjC9C,EAAe8C,EAAO,YAAY,KAE3BA,EAAO,iBAChBX,EAAmBW,EAAO,aAAa;AAAA,aAGzCjD,EAAa,IAAI,GACbP,EAAa,WAAW;AAC1B,MAAAmB,EAAA;AAAA,SACK;AACL,YAAMS,IAAW,CAAA;AACjB,MAAA5B,EAAa,QAAQ,CAACgD,MAAM;AAC1B,QAAApB,EAAS,OAAOoB,EAAE,MAAMA,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,MAAM,GAAA;AAAA,MACrD,CAAC,GACD3C,EAAcuB,CAAQ;AAAA,IACxB;AAAA,EAEJ,GAEM6B,IAAc,MAAM;AACxB,IAAAlU,EAAe,EAAK,GACpBgR,EAAa,IAAI,GACjBF,EAAc,CAAC1D,MAAS;AACtB,YAAM+G,IAAQ,EAAE,GAAG/G,EAAA;AACnB,aAAAqD,EAAa,QAAQ,CAACgD,MAAM;AAC1B,QAAAU,EAAM,OAAOV,EAAE,MAAMA,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,MAAM,GAAA;AAAA,MAClD,CAAC,GACMU;AAAA,IACT,CAAC;AAAA,EACH,GAEMC,IAAoB,MAAM;AAE9B,UAAMC,IADkB5D,EAAa,IAAI,CAACgD,MAAM,OAAOA,EAAE,MAAMA,EAAE,IAAI,CAAC,EAEnE,IAAI,CAAClB,MAAQ1B,EAAW0B,CAAG,CAAC,EAC5B,OAAO,CAAC+B,OAAQA,KAAA,gBAAAA,EAAK,QAAMA,KAAA,gBAAAA,EAAK,KAAI;AAEvC,QAAID,EAAgB,WAAW,EAAG;AAElC,UAAME,IAAa,OAAO,SAASF,EAAgB,GAAG,EAAE,EAAE,EAAE,GACtDd,IAAgBc,EAAgB;AAAA,MAAI,CAACC,MACzC,OAAO,SAASA,EAAI,IAAI,EAAE;AAAA,IAAA,GAEtBE,IAAeH,EAAgB,IAAI,CAACC,MAAQA,EAAI,IAAI,EAAE,KAAK,MAAM,GACjEG,IAAWJ,EAAgB,IAAI,CAACC,MAAQA,EAAI,IAAI,EAAE,KAAK,KAAK,GAE5DI,IAAY,CAACC,GAAIC,MACrBD,MAAOC,KAAMD,EAAG,WAAWC,IAAK,KAAK,KAAKA,EAAG,WAAWD,IAAK,KAAK,GAE9DE,IAAkBpb,EAAQ;AAAA,MAC9B,CAACqb,MAAMA,EAAE,OAAO/D,KAAa,CAAC2D,EAAUI,EAAE,UAAUL,CAAQ;AAAA,IAAA,GAGxDM,IAAY;AAAA,MAChB,IAAIhE,KAAa,KAAK,IAAA;AAAA,MACtB,YAAAwD;AAAA,MACA,eAAAhB;AAAA,MACA,cAAAiB;AAAA,MACA,UAAAC;AAAA,MACA,cAAc,EAAE,GAAG5D,EAAA;AAAA,IAAW;AAGhC,IAAA9C,EAAS,CAAC,GAAG8G,GAAiBE,CAAS,CAAC,GACxCb,EAAA;AAAA,EACF,GAEMc,IAAe,CAACC,MAAY,OAAOvW,MAAM;AAC7C,UAAMwW,IAAS,OAAOD,EAAQ,MAAMA,EAAQ,IAAI,GAC1CzD,IAAa,OAAO9S,EAAE,OAAO,KAAK;AAExC,QAAI,CAAC8S,EAAY;AAGjB,UAAM3L,KADiB8K,EAAauE,CAAM,KAAK,CAAA,GACT;AAAA,MACpC,CAACC,MAAQ,OAAOA,EAAI,EAAE,MAAM3D;AAAA,IAAA;AAG9B,IAAAV,EAAc,CAAC1D,MAAS;AACtB,YAAM+F,IAAO,EAAE,GAAG/F,EAAA;AAClB,MAAA+F,EAAK+B,CAAM,IAAI,EAAE,IAAI1D,GAAY,OAAM3L,KAAA,gBAAAA,EAAgB,SAAQ,GAAA;AAE/D,YAAMuP,IAAe3E,EAAa;AAAA,QAChC,CAACgD,MAAM,OAAOA,EAAE,MAAMA,EAAE,IAAI,MAAMyB;AAAA,MAAA;AAEpC,eAASnG,IAAIqG,IAAe,GAAGrG,IAAI0B,EAAa,QAAQ1B,KAAK;AAC3D,cAAMsG,IAAW,OAAO5E,EAAa1B,CAAC,EAAE,MAAM0B,EAAa1B,CAAC,EAAE,IAAI;AAClE,QAAAoE,EAAKkC,CAAQ,IAAI,EAAE,IAAI,IAAI,MAAM,GAAA;AAAA,MACnC;AACA,aAAOlC;AAAA,IACT,CAAC;AAED,UAAMiC,IAAe3E,EAAa;AAAA,MAChC,CAAC,MAAM,OAAO,EAAE,MAAM,EAAE,IAAI,MAAMyE;AAAA,IAAA;AAEpC,QAAIE,IAAe,IAAI3E,EAAa,QAAQ;AAC1C,YAAMgB,IAAWhB,EAAa2E,IAAe,CAAC,GACxC1D,IAAU,OAAOD,EAAS,MAAMA,EAAS,IAAI;AAEnD,MAAAb,EAAgB,CAACxD,MAAS;AACxB,cAAMkI,IAAW,EAAE,GAAGlI,EAAA;AACtB,iBAAS2B,IAAIqG,IAAe,GAAGrG,IAAI0B,EAAa,QAAQ1B;AACtD,UAAAuG,EAAS,OAAO7E,EAAa1B,CAAC,EAAE,MAAM0B,EAAa1B,CAAC,EAAE,IAAI,CAAC,IAAI,CAAA;AAEjE,eAAOuG;AAAA,MACT,CAAC,GAED3D,EAAeH,GAAYC,EAAS,OAAOC,CAAO;AAAA,IACpD;AAAA,EACF,GAEM6D,KAAiB,CAACC,GAAUhc,MAAU;;AAC1C,UAAM0b,IAAS,OAAOM,EAAS,MAAMA,EAAS,IAAI,GAC5CC,IAAQ,UAAUD,EAAS,IAAI;AAWrC,QAAI,EARFhc,MAAU,KACTiX,KACCA,EAAajX,IAAQ,CAAC,KACtBqX,KACA,CAAC,GAAClX,IAAAkX,EACA,OAAOJ,EAAajX,IAAQ,CAAC,EAAE,MAAMiX,EAAajX,IAAQ,CAAC,EAAE,IAAI,CACnE,MAFE,QAAAG,EAEC,KAES,QAAO;AAEvB,UAAM6F,IAAY+Q,EAAc2E,CAAM,KAAM1b,MAAU,KAAKwJ,GACrD0S,IAAU/E,EAAauE,CAAM,KAAK,CAAA;AAExC,6BACGpe,GAAA,EAAI,IAAI,EAAE,IAAI,OACb,UAAA;AAAA,MAAA,gBAAAC;AAAA,QAACM;AAAA,QAAA;AAAA,UACC,SAAQ;AAAA,UACR,IAAI;AAAA,YACF,YAAY;AAAA,YACZ,IAAI;AAAA,YACJ,SAAS;AAAA,YACT,YAAY;AAAA,YACZ,KAAK;AAAA,YACL,OAAO;AAAA,UAAA;AAAA,UAGR,UAAA;AAAA,YAAAoe;AAAA,YAAM;AAAA,YAAEjc,MAAU,KAAK,gBAAAxC,EAAC,QAAA,EAAK,OAAO,EAAE,OAAO,MAAA,GAAS,UAAA,IAAA,CAAC;AAAA,YACvDwI,KAAa,gBAAAxI,EAACwO,IAAA,EAAiB,MAAM,GAAA,CAAI;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAE5C,gBAAAzO;AAAA,QAAC4e;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAS;AAAA,UACT,SAAO7X,IAAA+S,EAAWqE,CAAM,MAAjB,gBAAApX,EAAoB,OAAM;AAAA,UACjC,UAAUkX,EAAaQ,CAAQ;AAAA,UAC/B,cAAY;AAAA,UACZ,UAAUhW;AAAA,UACV,IAAI;AAAA,YACF,cAAc;AAAA,YACd,SAAS;AAAA,YACT,uBAAuB,EAAE,IAAI,KAAA;AAAA,UAAK;AAAA,UAGpC,UAAA;AAAA,YAAA,gBAAAxI,EAAC4e,IAAA,EAAS,OAAM,IAAG,UAAQ,IACxB,UAAAH,GACH;AAAA,YACCC,EAAQ,IAAI,CAACP,wBACXS,IAAA,EAAsB,OAAO,OAAOT,EAAI,EAAE,GACxC,UAAAA,EAAI,KAAA,GADQA,EAAI,EAEnB,CACD;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACH,EAAA,GApCyBD,CAqC3B;AAAA,EAEJ;AAEA,SACE,gBAAAne,EAACD,GAAA,EAAI,WAAU,kBACb,UAAA;AAAA,IAAA,gBAAAC,EAACD,GAAA,EAAI,WAAU,aACb,UAAA;AAAA,MAAA,gBAAAC,EAACD,GAAA,EAAI,WAAU,eACb,UAAA;AAAA,QAAA,gBAAAE;AAAA,UAACK;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,IAAI;AAAA,cACF,OAAO;AAAA,cACP,YAAY;AAAA,cACZ,UAAU;AAAA,cACV,eAAe;AAAA,YAAA;AAAA,YAElB,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAGD,gBAAAL;AAAA,UAACK;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,SAAS,MAAM2c,EAAA;AAAA,YACf,IAAI,EAAE,QAAQ,UAAA;AAAA,YACf,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAED,GACF;AAAA,MACCva,EAAQ,IAAI,CAACwa,GAAQvN,MACpB,gBAAA3P,EAACD,GAAA,EAA2B,WAAU,eACpC,UAAA;AAAA,QAAA,gBAAAE,EAACK,GAAA,EAAW,WAAU,eAAe,UAAA4c,EAAO,UAAS;AAAA,QACrD,gBAAAld,EAACD,GAAA,EAAI,WAAU,kBACb,UAAA;AAAA,UAAA,gBAAAE;AAAA,YAACG;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAM;AAAA,cACN,SAAS,MAAM6c,EAAWC,CAAM;AAAA,cAEhC,UAAA,gBAAAjd,EAACC,GAAA,EAAgB,MAAMqR,GAAA,CAAQ;AAAA,YAAA;AAAA,UAAA;AAAA,UAEjC,gBAAAtR;AAAA,YAACG;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,MAAK;AAAA,cACL,SAAS,MAAM4W,EAAStU,EAAQ,OAAO,CAACsF,GAAGgQ,MAAMA,MAAMrI,CAAG,CAAC;AAAA,cAE3D,UAAA,gBAAA1P,EAACC,GAAA,EAAgB,MAAM0Y,GAAA,CAAS;AAAA,YAAA;AAAA,UAAA;AAAA,QAClC,EAAA,CACF;AAAA,MAAA,EAAA,GAjBQsE,EAAO,MAAMvN,CAkBvB,CACD;AAAA,MACAjN,EAAQ,WAAW,KAClB,gBAAAzC;AAAA,QAACF;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,IAAI;AAAA,YACF,GAAG;AAAA,YACH,WAAW;AAAA,YACX,QAAQ;AAAA,YACR,cAAc;AAAA,YACd,OAAO;AAAA,UAAA;AAAA,UAEV,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAED,GAEJ;AAAA,IAEA,gBAAAC;AAAA,MAACuH;AAAA,MAAA;AAAA,QACC,MAAMyB;AAAA,QACN,SAASmU;AAAA,QACT,WAAS;AAAA,QACT,UAAS;AAAA,QACT,YAAY;AAAA,UACV,IAAI,EAAE,cAAc,OAAA;AAAA,QAAO;AAAA,QAG7B,UAAA;AAAA,UAAA,gBAAAnd;AAAA,YAACwH;AAAA,YAAA;AAAA,cACC,IAAI;AAAA,gBACF,SAAS;AAAA,gBACT,gBAAgB;AAAA,gBAChB,YAAY;AAAA,gBACZ,cAAc;AAAA,gBACd,IAAI;AAAA,gBACJ,IAAI;AAAA,cAAA;AAAA,cAGN,UAAA;AAAA,gBAAA,gBAAAvH,EAACK,GAAA,EAAW,IAAI,EAAE,YAAY,KAAK,UAAU,OAAA,GAC1C,UAAA0Z,IACG,+BACA,4BAAA,CACN;AAAA,gBACA,gBAAA/Z,EAACG,IAAA,EAAW,SAAS+c,GAAa,MAAK,SACrC,UAAA,gBAAAld,EAACC,GAAA,EAAgB,MAAMuH,GAAA,CAAS,EAAA,CAClC;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAEF,gBAAAzH,EAAC0H,IAAA,EAAc,KAAK2U,GAAW,IAAI,EAAE,IAAI,KAAK,IAAI,EAAA,GAC/C,UAAA;AAAA,YAAA3C,EAAa,IAAI,CAACV,GAAOrJ,MAAQ6O,GAAexF,GAAOrJ,CAAG,CAAC;AAAA,YAC3D1D,KAAWyN,EAAa,WAAW,KAClC,gBAAAzZ,EAACF,GAAA,EAAI,IAAI,EAAE,SAAS,QAAQ,gBAAgB,UAAU,GAAG,EAAA,GACvD,4BAAC0O,IAAA,EAAiB,MAAM,IAAI,EAAA,CAC9B;AAAA,UAAA,GAEJ;AAAA,UACA,gBAAAxO,EAACqI,MAAc,IAAI,EAAE,GAAG,GAAG,IAAI,OAC7B,UAAA,gBAAArI;AAAA,YAACM;AAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,WAAS;AAAA,cACT,SAAS8c;AAAA,cACT,UACE,CAAC3D,EAAa,UACd,GAAC9W,KAAAkX,EAAW,OAAOJ,EAAa,CAAC,EAAE,MAAMA,EAAa,CAAC,EAAE,IAAI,CAAC,MAA7D,QAAA9W,GACG;AAAA,cAEN,IAAI;AAAA,gBACF,SAAS;AAAA,gBACT,eAAe;AAAA,gBACf,YAAY;AAAA,gBACZ,cAAc;AAAA,gBACd,IAAI;AAAA,gBACJ,UAAU;AAAA,gBACV,WAAW,EAAE,SAAS,UAAA;AAAA,cAAU;AAAA,cAGjC,cAAY,oBAAoB;AAAA,YAAA;AAAA,UAAA,EACnC,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AAEA0W,GAA0B,YAAY;AAAA,EACpC,SAAS7Y,EAAU;AAAA,IACjBA,EAAU,MAAM;AAAA,MACd,IAAIA,EAAU,UAAU,CAACA,EAAU,QAAQA,EAAU,MAAM,CAAC;AAAA,MAC5D,UAAUA,EAAU;AAAA,MACpB,YAAYA,EAAU;AAAA,MACtB,eAAeA,EAAU,QAAQA,EAAU,MAAM;AAAA,MACjD,cAAcA,EAAU;AAAA,IAAA,CACzB;AAAA,EAAA;AAAA,EAEH,UAAUA,EAAU,KAAK;AAC3B;ACtlBA,MAAMqe,KAAsB,CAAC;AAAA,EAC3B,cAAAjc,IAAe,CAAA;AAAA,EACf,UAAAmU;AAAA,EACA,gBAAA+H,IAAiB,CAAA;AAAA,EACjB,QAAA7H,IAAS,CAAA;AACX,MAAM;AACJ,QAAM8H,IAAiB,MAAM;AAC3B,UAAMC,IAAS;AAAA,MACb,IAAI,KAAK,IAAA;AAAA,MACT,SAAS;AAAA,MACT,aAAa;AAAA,MACb,QAAQ;AAAA,MACR,QAAQ;AAAA,IAAA;AAEV,IAAAjI,EAAS,CAAC,GAAGnU,GAAcoc,CAAM,CAAC;AAAA,EACpC,GAEMC,IAAe,CAACvP,MAAQ;AAC5B,IAAAqH,EAASnU,EAAa,OAAO,CAACmF,GAAGgQ,MAAMA,MAAMrI,CAAG,CAAC;AAAA,EACnD,GAEMwP,IAAoB,CAACxP,GAAK+H,GAAOlW,MAAU;AAC/C,UAAM4d,IAAUvc,EAAa,IAAI,CAACwc,GAAKrH,MACjCA,MAAMrI,IACJ+H,MAAU,gBACL,EAAE,GAAG2H,GAAK,CAAC3H,CAAK,GAAGlW,GAAO,QAAQ,GAAG,QAAQ,EAAA,IAE/C,EAAE,GAAG6d,GAAK,CAAC3H,CAAK,GAAGlW,EAAA,IAErB6d,CACR;AACD,IAAArI,EAASoI,CAAO;AAAA,EAClB;AAEA,SACE,gBAAAnf,EAACF,GAAA,EAAI,WAAU,sBACb,UAAA,gBAAAC,EAACD,GAAA,EAAI,WAAU,6BAA4B,IAAI,EAAE,UAAU,UAAA,GACzD,UAAA;AAAA,IAAA,gBAAAC,EAACD,GAAA,EAAI,WAAU,eACb,UAAA;AAAA,MAAA,gBAAAE;AAAA,QAACK;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,IAAI;AAAA,YACF,OAAO;AAAA,YACP,YAAY;AAAA,YACZ,UAAU;AAAA,YACV,eAAe;AAAA,UAAA;AAAA,UAElB,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAGD,gBAAAL;AAAA,QAACK;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,SAAS0e;AAAA,UACT,IAAI,EAAE,QAAQ,UAAA;AAAA,UACf,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAED,GACF;AAAA,IAECnc,EAAa,IAAI,CAACwc,GAAK1P,MAAQ;AAC9B,YAAM2P,KAAa,MAAM,QAAQpI,CAAM,IAAIA,EAAOvH,CAAG,IAAI,CAAA,MAAO,CAAA;AAChE,aACE,gBAAA1P;AAAA,QAACF;AAAA,QAAA;AAAA,UAEC,IAAI;AAAA,YACF,IAAI;AAAA,YACJ,IAAI;AAAA,YACJ,cAAc;AAAA,YACd,gBAAgB,EAAE,cAAc,QAAQ,IAAI,GAAG,IAAI,EAAA;AAAA,UAAE;AAAA,UAGvD,UAAA,gBAAAC;AAAA,YAACD;AAAA,YAAA;AAAA,cACC,IAAI;AAAA,gBACF,SAAS;AAAA,gBACT,KAAK;AAAA,gBACL,YAAY;AAAA,gBACZ,IAAI;AAAA,gBACJ,UAAU;AAAA,cAAA;AAAA,cAGZ,UAAA;AAAA,gBAAA,gBAAAC,EAACD,GAAA,EAAI,IAAI,EAAE,MAAM,OACf,UAAA;AAAA,kBAAA,gBAAAE;AAAA,oBAACK;AAAA,oBAAA;AAAA,sBACC,SAAQ;AAAA,sBACR,IAAI;AAAA,wBACF,YAAY;AAAA,wBACZ,IAAI;AAAA,wBACJ,SAAS;AAAA,wBACT,OAAO;AAAA,wBACP,UAAU;AAAA,sBAAA;AAAA,sBAEb,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAGD,gBAAAN;AAAA,oBAAC4e;AAAA,oBAAA;AAAA,sBACC,MAAK;AAAA,sBACL,WAAS;AAAA,sBACT,OAAOS,EAAI;AAAA,sBACX,UAAU,CAAC1X,MACTwX,EAAkBxP,GAAK,WAAWhI,EAAE,OAAO,KAAK;AAAA,sBAElD,cAAY;AAAA,sBACZ,IAAI,EAAE,cAAc,OAAO,SAAS,OAAA;AAAA,sBAEpC,UAAA;AAAA,wBAAA,gBAAA1H,EAAC4e,IAAA,EAAS,OAAM,IAAG,UAAQ,IAAC,UAAA,uBAE5B;AAAA,wBACCE,EAAe,IAAI,CAACtY,MACnB,gBAAAxG,EAAC4e,IAAA,EAAoB,OAAOpY,EAAE,cAC3B,UAAAA,EAAE,KAAA,GADUA,EAAE,EAEjB,CACD;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAEF6Y,EAAU,WACT,gBAAArf;AAAA,oBAACK;AAAA,oBAAA;AAAA,sBACC,SAAQ;AAAA,sBACR,IAAI,EAAE,OAAO,WAAW,UAAU,WAAW,IAAI,IAAA;AAAA,sBAEhD,UAAAgf,EAAU;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACb,GAEJ;AAAA,kCAECvf,GAAA,EAAI,IAAI,EAAE,MAAM,KACf,UAAA;AAAA,kBAAA,gBAAAE;AAAA,oBAACK;AAAA,oBAAA;AAAA,sBACC,SAAQ;AAAA,sBACR,IAAI;AAAA,wBACF,YAAY;AAAA,wBACZ,IAAI;AAAA,wBACJ,SAAS;AAAA,wBACT,OAAO;AAAA,wBACP,UAAU;AAAA,sBAAA;AAAA,sBAEb,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAGD,gBAAAN;AAAA,oBAAC4e;AAAA,oBAAA;AAAA,sBACC,MAAK;AAAA,sBACL,WAAS;AAAA,sBACT,OAAOS,EAAI;AAAA,sBACX,UAAU,CAAC1X,MACTwX,EAAkBxP,GAAK,eAAehI,EAAE,OAAO,KAAK;AAAA,sBAEtD,IAAI,EAAE,cAAc,OAAO,SAAS,OAAA;AAAA,sBAEpC,UAAA;AAAA,wBAAA,gBAAA1H,EAAC4e,IAAA,EAAS,OAAM,mBAAkB,UAAA,mBAAe;AAAA,wBACjD,gBAAA5e,EAAC4e,IAAA,EAAS,OAAM,uBAAsB,UAAA,uBAEtC;AAAA,wBACA,gBAAA5e,EAAC4e,IAAA,EAAS,OAAM,YAAW,UAAA,WAAA,CAAQ;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACrC,GACF;AAAA,iBAEEQ,EAAI,gBAAgB,qBACpBA,EAAI,gBAAgB,eACpB,gBAAArf,EAAAmI,IAAA,EACE,UAAA;AAAA,kBAAA,gBAAAnI,EAACD,GAAA,EAAI,IAAI,EAAE,OAAO,OAChB,UAAA;AAAA,oBAAA,gBAAAE;AAAA,sBAACK;AAAA,sBAAA;AAAA,wBACC,SAAQ;AAAA,wBACR,IAAI;AAAA,0BACF,YAAY;AAAA,0BACZ,IAAI;AAAA,0BACJ,SAAS;AAAA,0BACT,OAAO;AAAA,0BACP,UAAU;AAAA,wBAAA;AAAA,wBAEb,UAAA;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAGD,gBAAAL;AAAA,sBAACY;AAAA,sBAAA;AAAA,wBACC,MAAK;AAAA,wBACL,MAAK;AAAA,wBACL,OAAOwe,EAAI;AAAA,wBACX,UAAU,CAAC1X,MACTwX,EAAkBxP,GAAK,UAAUhI,EAAE,OAAO,KAAK;AAAA,wBAEjD,OAAO,CAAC,CAAC2X,EAAU;AAAA,wBACnB,YAAYA,EAAU;AAAA,wBACtB,YAAY,EAAE,KAAK,EAAA;AAAA,wBACnB,IAAI;AAAA,0BACF,4BAA4B;AAAA,4BAC1B,cAAc;AAAA,4BACd,SAAS;AAAA,4BACT,QAAQ;AAAA,0BAAA;AAAA,0BAEV,6BAA6B;AAAA,4BAC3B,UAAU;AAAA,4BACV,KAAK;AAAA,4BACL,MAAM;AAAA,4BACN,OAAO;AAAA,4BACP,UAAU;AAAA,4BACV,WAAW;AAAA,0BAAA;AAAA,wBACb;AAAA,sBACF;AAAA,oBAAA;AAAA,kBACF,GACF;AAAA,kBAEA,gBAAAtf,EAACD,KAAI,IAAI,EAAE,OAAO,KAAK,UAAU,cAC/B,UAAA;AAAA,oBAAA,gBAAAE;AAAA,sBAACK;AAAA,sBAAA;AAAA,wBACC,SAAQ;AAAA,wBACR,IAAI;AAAA,0BACF,YAAY;AAAA,0BACZ,IAAI;AAAA,0BACJ,SAAS;AAAA,0BACT,OAAO;AAAA,0BACP,UAAU;AAAA,wBAAA;AAAA,wBAEb,UAAA;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAGD,gBAAAL;AAAA,sBAACY;AAAA,sBAAA;AAAA,wBACC,MAAK;AAAA,wBACL,MAAK;AAAA,wBACL,OAAOwe,EAAI;AAAA,wBACX,UAAU,CAAC1X,MACTwX,EAAkBxP,GAAK,UAAUhI,EAAE,OAAO,KAAK;AAAA,wBAEjD,OAAO,CAAC,CAAC2X,EAAU;AAAA,wBACnB,YAAYA,EAAU;AAAA,wBACtB,YAAY,EAAE,KAAK,EAAA;AAAA,wBACnB,IAAI;AAAA,0BACF,4BAA4B;AAAA,4BAC1B,cAAc;AAAA,4BACd,SAAS;AAAA,4BACT,QAAQ;AAAA,0BAAA;AAAA,0BAEV,6BAA6B;AAAA,4BAC3B,UAAU;AAAA,4BACV,KAAK;AAAA,4BACL,OAAO;AAAA,4BACP,OAAO;AAAA,4BACP,UAAU;AAAA,4BACV,WAAW;AAAA,0BAAA;AAAA,wBACb;AAAA,sBACF;AAAA,oBAAA;AAAA,kBACF,EAAA,CACF;AAAA,gBAAA,GACF;AAAA,gBAEF,gBAAArf;AAAA,kBAACG;AAAA,kBAAA;AAAA,oBACC,OAAM;AAAA,oBACN,MAAK;AAAA,oBACL,IAAI;AAAA,sBACF,IAAI;AAAA,sBACJ,WAAW,EAAE,SAAS,0BAAA;AAAA,oBAA0B;AAAA,oBAElD,SAAS,MAAM8e,EAAavP,CAAG;AAAA,oBAE/B,UAAA,gBAAA1P,EAACC,GAAA,EAAgB,MAAM0Y,GAAA,CAAS;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAClC;AAAA,YAAA;AAAA,UAAA;AAAA,QACF;AAAA,QA1LKyG,EAAI,MAAM1P;AAAA,MAAA;AAAA,IA6LrB,CAAC;AAAA,IAEA9M,EAAa,WAAW,KACvB,gBAAA5C;AAAA,MAACF;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,IAAI;AAAA,UACF,GAAG;AAAA,UACH,WAAW;AAAA,UACX,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,OAAO;AAAA,QAAA;AAAA,QAEV,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAED,EAAA,CAEJ,EAAA,CACF;AAEJ;AAEA+e,GAAoB,YAAY;AAAA,EAC9B,cAAcre,EAAU;AAAA,EACxB,UAAUA,EAAU,KAAK;AAAA,EACzB,gBAAgBA,EAAU;AAAA,EAC1B,QAAQA,EAAU;AACpB;ACnRA,MAAM8e,KAAe,CAAC;AAAA,EACpB,WAAAvY;AAAA,EACA,cAAAwY;AAAA,EACA,oBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AACF,MAAM;AACJ,QAAM,CAACC,GAAsBC,CAAuB,IAAIvD,GAAM,SAAS;AAAA,IACrE,MAAM;AAAA,IACN,UAAU;AAAA,IACV,eAAe,CAAA;AAAA,EAAC,CACjB,GAEKwD,IAAmB,CAACnY,MAAM;AAC9B,UAAMoY,IAAepY,EAAE,OAAO;AAG9B,QAAI,CAFY,MAAM,QAAQ8X,CAAkB,GAElC;AACZ,MAAAE,EAAS3Y,GAAW+Y,GAAcN,CAAkB;AACpD;AAAA,IACF;AAEA,UAAMO,IAAqB,CAAC,GAAIP,KAAsB,EAAG;AAEzD,QAAIM,IAAeC,EAAmB,QAAQ;AAC5C,eAAShI,IAAIgI,EAAmB,QAAQhI,IAAI+H,GAAc/H;AACxD,QAAAgI,EAAmB,KAAK;AAAA,UACtB,IAAI,OAAO,KAAK,IAAA,CAAK,IAAIhI,CAAC;AAAA,UAC1B,cAAc;AAAA,UACd,YAAY;AAAA,UACZ,UAAU;AAAA,QAAA,CACX;AAEH,MAAA2H,EAAS3Y,GAAW+Y,GAAcC,CAAkB;AAAA,IACtD,WAAWD,IAAeC,EAAmB,QAAQ;AACnD,YAAMC,IAAgBD,EAAmB,MAAMD,CAAY;AAC3D,MAAAF,EAAwB;AAAA,QACtB,MAAM;AAAA,QACN,UAAUE;AAAA,QACV,eAAAE;AAAA,MAAA,CACD;AAAA,IACH;AAAA,EACF,GAEMC,IAAsB,MAAM;AAChC,UAAM,EAAE,UAAAC,MAAaP,GAEfI,IADU,MAAM,QAAQP,CAAkB,KAE3CA,KAAsB,CAAA,GAAI,MAAM,GAAGU,CAAQ,IAC5CV;AAEJ,IAAAE,EAAS3Y,GAAWmZ,GAAUH,CAAkB,GAChDH,EAAwB,EAAE,MAAM,IAAO,UAAU,GAAG,eAAe,CAAA,GAAI;AAAA,EACzE;AAEA,SACE,gBAAA7f,EAAAmI,IAAA,EACE,UAAA;AAAA,IAAA,gBAAAnI,EAACD,GAAA,EAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,EAAA,GACrD,UAAA;AAAA,MAAA,gBAAAE;AAAA,QAAC2e;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,OAAOY;AAAA,UACP,UAAUM;AAAA,UACV,IAAI,EAAE,UAAU,IAAI,SAAS,OAAA;AAAA,UAC7B,WAAW;AAAA,YACT,YAAY;AAAA,cACV,OAAO;AAAA,gBACL,WAAW;AAAA,cAAA;AAAA,YACb;AAAA,UACF;AAAA,UAGD,UAAA,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,QAAQJ,EAAA,GAAY,CAAC1X,GAAGgQ,MAAMA,IAAI,CAAC,CAAC,EAAE;AAAA,YACzD,CAACvC,MACC,gBAAAxV;AAAA,cAAC4e;AAAA,cAAA;AAAA,gBAEC,OAAOpJ;AAAA,gBACP,IAAIA,MAAQ,IAAI,EAAE,SAAS,OAAA,IAAW,CAAA;AAAA,gBAErC,UAAAA;AAAA,cAAA;AAAA,cAJIA;AAAA,YAAA;AAAA,UAKP;AAAA,QAEJ;AAAA,MAAA;AAAA,MAEF,gBAAAxV,EAAC,UAAK,UAAA,QAAA,CAAK;AAAA,IAAA,GACb;AAAA,IAEA,gBAAAD;AAAA,MAACuH;AAAA,MAAA;AAAA,QACC,MAAMqY,EAAqB;AAAA,QAC3B,SAAS,MACPC,EAAwB,EAAE,GAAGD,GAAsB,MAAM,IAAO;AAAA,QAElE,YAAY;AAAA,UACV,IAAI,EAAE,cAAc,QAAQ,SAAS,MAAA;AAAA,QAAM;AAAA,QAG7C,UAAA;AAAA,UAAA,gBAAA3f,EAACuH,IAAA,EAAY,IAAI,EAAE,YAAY,KAAK,OAAO,UAAA,GAAa,UAAA,kBAAA,CAExD;AAAA,4BACCE,IAAA,EACC,UAAA;AAAA,YAAA,gBAAAzH,EAACK,GAAA,EAAW,IAAI,EAAE,OAAO,WAAW,IAAI,GAAG,UAAU,OAAA,GAAU,UAAA,gFAAA,CAG/D;AAAA,YACA,gBAAAN;AAAA,cAACD;AAAA,cAAA;AAAA,gBACC,IAAI;AAAA,kBACF,SAAS;AAAA,kBACT,QAAQ;AAAA,kBACR,cAAc;AAAA,kBACd,GAAG;AAAA,gBAAA;AAAA,gBAGL,UAAA;AAAA,kBAAA,gBAAAE;AAAA,oBAACK;AAAA,oBAAA;AAAA,sBACC,SAAQ;AAAA,sBACR,IAAI;AAAA,wBACF,OAAO;AAAA,wBACP,YAAY;AAAA,wBACZ,IAAI;AAAA,wBACJ,SAAS;AAAA,sBAAA;AAAA,sBAEZ,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAGAsf,EAAqB,cAAc,IAAI,CAACpd,GAAMmN,MAC7C,gBAAA3P;AAAA,oBAACM;AAAA,oBAAA;AAAA,sBAEC,IAAI,EAAE,UAAU,QAAQ,OAAO,WAAW,YAAY,IAAA;AAAA,sBACvD,UAAA;AAAA,wBAAA;AAAA,wBACSsf,EAAqB,WAAWjQ,IAAM;AAAA,wBAAE;AAAA,wBAAE;AAAA,wBACjDnN,EAAK,gBAAgB;AAAA,wBAAU;AAAA,wBAAI;AAAA,wBACnCA,EAAK,cAAc;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBALfA,EAAK;AAAA,kBAAA,CAOb;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UACH,GACF;AAAA,4BACC8F,IAAA,EAAc,IAAI,EAAE,GAAG,KACtB,UAAA;AAAA,YAAA,gBAAArI;AAAA,cAACM;AAAA,cAAA;AAAA,gBACC,SAAS,MACPsf,EAAwB,EAAE,GAAGD,GAAsB,MAAM,IAAO;AAAA,gBAElE,IAAI,EAAE,OAAO,WAAW,YAAY,IAAA;AAAA,gBACrC,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAGD,gBAAA3f;AAAA,cAACM;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,OAAM;AAAA,gBACN,SAAS2f;AAAA,gBACT,IAAI,EAAE,YAAY,KAAK,cAAc,OAAO,SAAS,UAAA;AAAA,gBACtD,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAED,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AAEAX,GAAa,YAAY;AAAA,EACvB,WAAW9e,EAAU,UAAU,CAACA,EAAU,QAAQA,EAAU,MAAM,CAAC,EAChE;AAAA,EACH,cAAcA,EAAU,OAAO;AAAA,EAC/B,oBAAoBA,EAAU,UAAU;AAAA,IACtCA,EAAU,QAAQA,EAAU,MAAM;AAAA,IAClCA,EAAU;AAAA,EAAA,CACX;AAAA,EACD,UAAUA,EAAU,OAAO;AAAA,EAC3B,UAAUA,EAAU,KAAK;AAC3B;ACvKA,MAAM2f,KAAiB,CAAC,EAAE,SAAApd,IAAU,CAAA,GAAI,UAAAgU,QAAe;AACrD,QAAM,EAAE,eAAAqJ,IAAgB,GAAC,IAAM7a,GAAY,CAACC,MAAUA,EAAM,YAAY,GAElE6a,IAAgBD,EAAc,OAAO,CAAC1P,MAAMA,EAAE,SAAS,GAEvDwF,IAAkBmK,EAAc;AAAA,IAAO,CAAC3P,MAC5C3N,EAAQ;AAAA,MACN,CAACmD,OAAU,OAAOA,KAAS,WAAWA,IAAOA,EAAK,UAAUwK,EAAE;AAAA,IAAA;AAAA,EAChE,GAGI4P,IAAoBvd,EAAQ;AAAA,IAAI,CAAC2N,MACrC,OAAOA,KAAM,WAAWA,IAAIA,EAAE;AAAA,EAAA;AAGhC,2BACG5Q,GAAA,EAAI,IAAI,EAAE,IAAI,KACb,UAAA;AAAA,IAAA,gBAAAE;AAAA,MAACK;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,IAAI;AAAA,UACF,OAAO;AAAA,UACP,YAAY;AAAA,UACZ,UAAU;AAAA,UACV,eAAe;AAAA,UACf,SAAS;AAAA,UACT,IAAI;AAAA,QAAA;AAAA,QAEP,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAID,gBAAAL;AAAA,MAAC6H;AAAA,MAAA;AAAA,QACC,UAAQ;AAAA,QACR,SAASwY;AAAA,QACT,sBAAoB;AAAA,QACpB,gBAAgB,CAACvY,MAAWA,EAAO,QAAQA,EAAO,QAAQ;AAAA,QAC1D,OAAOoO;AAAA,QACP,UAAU,CAACwC,GAAO1Q,MAAa;AAC7B,UAAA+O,EAAS/O,EAAS,IAAI,CAACwN,MAAQA,EAAI,IAAI,CAAC;AAAA,QAC1C;AAAA,QACA,cAAc,CAAC+K,GAAOzY,GAAQ,EAAE,UAAA1G,QAC9B,gBAAArB,EAAC,MAAA,EAAI,GAAGwgB,GAAO,OAAO,EAAE,UAAU,QAAQ,SAAS,cACjD,UAAA;AAAA,UAAA,gBAAAvgB;AAAA,YAACwgB;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAO,EAAE,aAAa,EAAA;AAAA,cACtB,SAASpf;AAAA,cACT,IAAI;AAAA,gBACF,GAAG;AAAA,gBACH,OAAO;AAAA,gBACP,iBAAiB,EAAE,OAAO,UAAA;AAAA,cAAU;AAAA,YACtC;AAAA,UAAA;AAAA,UAEF,gBAAApB,EAACF,GAAA,EACC,UAAA,gBAAAE,EAACK,GAAA,EAAW,IAAI,EAAE,UAAU,QAAQ,YAAY,IAAA,GAC7C,UAAAyH,EAAO,MACV,EAAA,CACF;AAAA,QAAA,GACF;AAAA,QAEF,aAAa,CAACG,MACZ,gBAAAjI;AAAA,UAACY;AAAA,UAAA;AAAA,YACE,GAAGqH;AAAA,YACJ,MAAK;AAAA,YACL,WAAS;AAAA,YACT,aAAaqY,EAAkB,WAAW,IAAI,mBAAmB;AAAA,YACjE,YAAY;AAAA,cACV,GAAGrY,EAAO;AAAA,cACV,gBACE,gBAAAlI,EAAAmI,IAAA,EACE,UAAA;AAAA,gBAAA,gBAAAlI,EAACa,MAAe,UAAS,SAAQ,IAAI,EAAE,IAAI,KACzC,UAAA,gBAAAb;AAAA,kBAACC;AAAA,kBAAA;AAAA,oBACC,MAAMmR;AAAA,oBACN,OAAO,EAAE,OAAO,WAAW,UAAU,OAAA;AAAA,kBAAO;AAAA,gBAAA,GAEhD;AAAA,gBACCnJ,EAAO,WAAW;AAAA,cAAA,EAAA,CACrB;AAAA,YAAA;AAAA,YAGJ,IAAI;AAAA,cACF,4BAA4B;AAAA,gBAC1B,cAAc;AAAA,gBACd,SAAS;AAAA,gBACT,cAAc,EAAE,aAAa,UAAA;AAAA,cAAU;AAAA,YACzC;AAAA,UACF;AAAA,QAAA;AAAA,QAGJ,YAAY,CAACwY,GAAU3K,MACrB2K,EAAS,IAAI,CAAC3Y,GAAQtF,MACpB,gBAAAke;AAAA,UAAChS;AAAA,UAAA;AAAA,YACC,OAAO5G,EAAO;AAAA,YACb,GAAGgO,EAAY,EAAE,OAAAtT,GAAO;AAAA,YACzB,MAAK;AAAA,YACL,KAAKsF,EAAO;AAAA,YACZ,IAAI;AAAA,cACF,QAAQ;AAAA,cACR,UAAU;AAAA,cACV,iBAAiB;AAAA,cACjB,YAAY;AAAA,cACZ,cAAc;AAAA,YAAA;AAAA,UAChB;AAAA,QAAA,CAEH;AAAA,MAAA;AAAA,IAAA;AAAA,EAEL,GACF;AAEJ;AAEAqY,GAAe,YAAY;AAAA,EACzB,SAAS3f,EAAU;AAAA,EACnB,UAAUA,EAAU,KAAK;AAC3B;AC7HO,MAAMmgB,KAA+B,CAAC;AAAA,EAC3C,WAAA5Z;AAAA,EACA,UAAA3B;AAAA,EACA,mBAAAwG;AACF,MAAM;AACJ,QAAMgV,IAAOxb,EAAS,KAAK,CAACoB,MAAMA,EAAE,OAAOO,CAAS,GAC9CoH,IAAYvC,EAAkB,KAAK,CAACwC,MAAOA,EAAG,OAAOrH,CAAS,GAC9DjF,KAAW8e,KAAA,gBAAAA,EAAM,aAAY,SAE7Btd,IAAO6K,IACT,EAAE,GAAGA,EAAS,IACd;AAAA,IACE,KAAIyS,KAAA,gBAAAA,EAAM,OAAM7Z;AAAA,IAChB,OAAM6Z,KAAA,gBAAAA,EAAM,SAAQ;AAAA,IACpB,QAAOA,KAAA,gBAAAA,EAAM,UAAS;AAAA,IACtB,cAAaA,KAAA,gBAAAA,EAAM,gBAAe;AAAA,IAClC,aACE9e,MAAa,WAAW,MAAM,QAAQ8e,KAAA,gBAAAA,EAAM,WAAW,IACnDA,EAAK,YAAY,CAAC,KAAK,CAAA,KACvBA,KAAA,gBAAAA,EAAM,iBAAgB9e,MAAa,UAAU,CAAA,IAAK,CAAA;AAAA,IACxD,UAAS8e,KAAA,gBAAAA,EAAM,YAAW,CAAA;AAAA,IAC1B,eAAcA,KAAA,gBAAAA,EAAM,iBAAgB,CAAA;AAAA,IACpC,WAAUA,KAAA,gBAAAA,EAAM,cAAa,SAAYA,EAAK,WAAW;AAAA,IACzD,UAAA9e;AAAA,IACA,eAAc8e,KAAA,gBAAAA,EAAM,iBAAgB;AAAA,IACpC,gBAAeA,KAAA,gBAAAA,EAAM,kBAAiB;AAAA,IACtC,UAASA,KAAA,gBAAAA,EAAM,YAAW,CAAA;AAAA,IAC1B,gBAAeA,KAAA,gBAAAA,EAAM,kBAAiB;AAAA,EAC9C;AAEE,SAAO;AAAA,IACL,GAAGtd;AAAA,IACH,aAAa1B;AAAA,MACX0B,KAAA,gBAAAA,EAAM;AAAA,MACNA,KAAA,gBAAAA,EAAM;AAAA,MACNA,KAAA,gBAAAA,EAAM;AAAA,IACZ;AAAA,EACA;AACA,GAEaud,KAAuB,CAAC;AAAA,EACnC,UAAAzb;AAAA,EACA,gBAAA0b;AAAA,EACA,mBAAAlV;AAAA,EACA,cAAAmV;AACF,MACE3b,EACG;AAAA,EAAI,CAACoB,MACJsa,EAAeta,EAAE,EAAE,KACnBma,GAA6B;AAAA,IAC3B,WAAWna,EAAE;AAAA,IACb,UAAApB;AAAA,IACA,mBAAAwG;AAAA,EACR,CAAO;AACP,EACK,OAAO,CAACpF,MAAOua,IAAe,KAAOva,EAAE,QAAS,EAChD,KAAK,CAACwU,GAAGC,MAAM,OAAOA,EAAE,QAAQ,IAAI,OAAOD,EAAE,QAAQ,CAAC,GAE9CgG,KAAsC,CACjD3b,GACAP,MACG;AACH,QAAMW,IAAoBJ,EAAgB;AAAA,IACxC,CAACM,MAAcA,EAAU,SAASb;AAAA,EACtC,GACQe,IAASJ,KAAA,gBAAAA,EAAmB;AAClC,MAAI,CAACI,EAAQ,QAAO,CAAA;AACpB,MAAI,OAAOA,KAAW;AACpB,WAAOA,EAAO,oBAAoB,CAAA;AAEpC,MAAI;AACF,WAAO,KAAK,MAAMA,CAAM,EAAE,oBAAoB,CAAA;AAAA,EAChD,QAAQ;AACN,WAAO,CAAA;AAAA,EACT;AACF,GC7EawQ,KAAU,CAACb,MAClB,CAACA,KACD,OAAOA,KAAQ,YAAYA,EAAI,YAAW,MAAO,UAAgB,IAC9D,OAAO,SAASA,CAAG,KAAK,GAGpByL,KAAsB,CAACpf,GAAaC,GAAUgV,MAAc;AACvE,MAAIA,MAAc,EAAG,QAAO;AAC5B,QAAMG,IAAS,CAAA,GACTjV,IAAU,MAAM,QAAQH,CAAW,IAAIA,IAAc,CAACA,CAAW;AAEvE,SAAAG,EAAQ,QAAQ,CAACO,GAAMmN,MAAQ;AAC7B,UAAMwR,IAAa,CAAA,GACbC,IAAc9K,GAAQ9T,EAAK,YAAY,GACvC6e,IAAY/K,GAAQ9T,EAAK,UAAU;AAEzC,KACGA,EAAK,iBAAiB,UACrBA,EAAK,iBAAiB,QACtBA,EAAK,iBAAiB,OACxBmN,MAAQ,MAERwR,EAAW,eAAe,+BAI1B3e,EAAK,eAAe,UACpBA,EAAK,eAAe,QACpBA,EAAK,eAAe,MACpB8T,GAAQ9T,EAAK,UAAU,MAAM,OAE7B2e,EAAW,aAAa;AAG1B,UAAMG,IACJvf,MAAa,cAAc4N,MAAQ1N,EAAQ,SAAS;AAMtD,QAHGF,MAAa,WAAWgV,IAAY,KACpC,CAACuK,KAAqBvf,MAAa,YAEd;AACtB,YAAMwf,IAAc,OAAO,SAAS/e,EAAK,QAAQ,KAAK;AACtD,MACEA,EAAK,aAAa,UAClBA,EAAK,aAAa,QAClBA,EAAK,aAAa,MAClB+e,MAAgB,KAChB/e,EAAK,aAAa,WAElB2e,EAAW,WAAW,yBAEtBpf,MAAa,WACbgV,IAAY,MACXA,IAAY,KAAKwK,IAAcF,IAAYD,MAE5CD,EAAW,WAAW,wFAAwFE,IAAYD,CAAW;AAAA,IAEzI;AAMA,QAJIC,KAAaD,KAAe5e,EAAK,gBAAgBA,EAAK,eACxD2e,EAAW,aAAa,gDAGtBxR,IAAM,KAAK5N,MAAa,YAAY;AACtC,YAAMyf,IAAkBlL,GAAQrU,EAAQ0N,IAAM,CAAC,EAAE,YAAY,GACvD8R,IAAmB,OAAO,SAASxf,EAAQ0N,IAAM,CAAC,EAAE,QAAQ,KAAK;AACvE,MAAIyR,IAAcI,IAAkBC,MAClCN,EAAW,eACT,6DAGAlf,EAAQ0N,IAAM,CAAC,EAAE,aAAa,CAACnN,EAAK,cACtC2e,EAAW,YAAY;AAAA,IAE3B;AAEA,IAAI,OAAO,KAAKA,CAAU,EAAE,SAAS,MACnCjK,EAAOvH,CAAG,IAAIwR;AAAA,EAElB,CAAC,GAEMjK,EAAO,SAAS,IAAIA,IAAS;AACtC,GAEawK,KAAuB,CAAC7e,MAAiB;AACpD,QAAMqU,IAAS,CAAA,GACTyK,IAAe,oBAAI,IAAG;AAE5B,SAAA9e,EAAa,QAAQ,CAACwc,GAAK1P,MAAQ;AACjC,UAAM2P,IAAY,CAAA;AAClB,IAAKD,EAAI,WAGHsC,EAAa,IAAItC,EAAI,OAAO,MAC9BC,EAAU,UAAU,kDAEtBqC,EAAa,IAAItC,EAAI,OAAO,KAL5BC,EAAU,UAAU;AAQtB,UAAMsC,IACJvC,EAAI,WAAW,MAAMA,EAAI,WAAW,QAAQA,EAAI,WAAW,QACvDwC,IACJxC,EAAI,WAAW,MAAMA,EAAI,WAAW,QAAQA,EAAI,WAAW,QAEvDyC,IAASxL,GAAQ+I,EAAI,MAAM,GAC3B0C,IAASzL,GAAQ+I,EAAI,MAAM;AAEjC,IACEA,EAAI,gBAAgB,qBACpBA,EAAI,gBAAgB,cAEhBuC,IACFtC,EAAU,SAAS,wBACVwC,KAAU,MACnBxC,EAAU,SAAS,2BAGjBuC,IACFvC,EAAU,SAAS,wBACVyC,KAAU,MACnBzC,EAAU,SAAS,2BAInB,CAACsC,KACD,CAACC,KACDC,IAAS,KACTC,IAAS,KACTA,KAAUD,MAEVxC,EAAU,SAAS,4CAIjB,CAACsC,KAAcE,IAAS,MAC1BxC,EAAU,SAAS,2BAEjB,CAACuC,KAAcE,IAAS,MAC1BzC,EAAU,SAAS,4BAInB,OAAO,KAAKA,CAAS,EAAE,SAAS,MAClCpI,EAAOvH,CAAG,IAAI2P;AAAA,EAElB,CAAC,GAEMpI,EAAO,KAAK,CAACvP,MAAMA,KAAK,OAAO,KAAKA,CAAC,EAAE,SAAS,CAAC,IAAIuP,IAAS;AACvE,GAEa8K,KAAsB,CAAC5gB,MAAY;AAC9C,QAAM8V,IAAS,CAAA;AAEf,GAAI,CAAC9V,EAAQ,QAAQA,EAAQ,KAAK,KAAI,MAAO,QAC3C8V,EAAO,OAAO,6BAGX9V,EAAQ,kBACX8V,EAAO,gBAAgB,+BAGpB9V,EAAQ,iBACX8V,EAAO,eAAe,2BAGpB,CAAC9V,EAAQ,SAASA,EAAQ,UAAU,OACtC8V,EAAO,QAAQ;AAGjB,QAAMiK,IAAaD;AAAA,IACjB9f,EAAQ;AAAA,IACRA,EAAQ;AAAA,IACRA,EAAQ;AAAA,EACZ;AACE,EAAI+f,MACFjK,EAAO,cAAciK;AAGvB,QAAM7B,IAAYoC,GAAqBtgB,EAAQ,gBAAgB,CAAA,CAAE;AACjE,SAAIke,MACFpI,EAAO,eAAeoI,IAGjB,OAAO,KAAKpI,CAAM,EAAE,SAAS,IAAIA,IAAS;AACnD,GC5HM+K,KAAY,IAEZC,KAAwB,CAACC,MAAS;AACtC,MAAI,CAACA,EAAM,QAAO;AAClB,QAAMC,IAAUD,EAAK,KAAA;AACrB,MAAIC,MAAY,UAAUA,MAAY,YAAa,QAAO;AAE1D,QAAMvR,IAAQuR,EAAQ,MAAM,QAAQ;AACpC,MAAI,CAACvR,EAAO,QAAOuR;AAEnB,QAAMC,IAAO,SAASxR,EAAM,CAAC,CAAC;AAC9B,MAAIwR,MAAS,EAAG,QAAO;AACvB,MAAIA,IAAO,GAAI,QAAO,GAAGA,CAAI;AAC7B,MAAIA,IAAO,KAAK;AACd,UAAMC,IAAS,KAAK,MAAMD,IAAO,KAAK;AACtC,WAAO,GAAGC,CAAM,IAAIA,MAAW,IAAI,UAAU,QAAQ;AAAA,EACvD;AACA,QAAMC,IAAQ,KAAK,MAAMF,IAAO,MAAM;AACtC,SAAO,GAAGE,CAAK,IAAIA,MAAU,IAAI,SAAS,OAAO;AACnD,GAEMC,KAAwB,CAACC,MAAU;;AACvC,QAAMC,IAAgB,CAACjN,MACjB,CAACA,KACD,OAAOA,KAAQ,YAAYA,EAAI,YAAA,MAAkB,UAAgB,IAC9D,OAAO,SAASA,CAAG,KAAK,GAG3BkN,KAAY,MAAM;AACtB,QAAIF,EAAM,aAAa,QAAS,QAAO;AACvC,QAAIG,IAAe,GACfC,IAAe;AACnB,WAAO,KAAK;AAAA,OACTJ,EAAM,eAAe,CAAA,GAAI,IAAI,CAAC1K,GAAGpI,GAAK2C,MAAQ;AAC7C,YAAIwQ;AACJ,eAAI/K,EAAE,aACJ8K,KACAC,IAAY,IAAID,CAAY,OAE5BD,KACAE,IAAYF,IAEP;AAAA,UACL,MAAME;AAAA,UACN,YAAY,CAAC,CAAC/K,EAAE;AAAA,UAChB,GAAIA,EAAE,aAAaA,EAAE,QAAQ,EAAE,OAAOA,EAAE,MAAM,KAAA,EAAK,IAAM,CAAA;AAAA,UACzD,eAAe2K,EAAc3K,EAAE,YAAY;AAAA,UAC3C,aAAa2K,EAAc3K,EAAE,UAAU;AAAA,UACvC,SACEpI,MAAQ2C,EAAI,SAAS,IAAI,IAAI,OAAO,SAASyF,EAAE,QAAQ,KAAK;AAAA,QAAA;AAAA,MAElE,CAAC;AAAA,IAAA;AAAA,EAEL,GAAA,GAEMgL,IAAgB,KAAK;AAAA,KACxBN,EAAM,WAAW,CAAA,GAAI,IAAI,CAAC1E,OAAO;AAAA,MAChC,YAAYA,EAAE;AAAA,MACd,eAAeA,EAAE;AAAA,MACjB,cAAcA,EAAE;AAAA,IAAA,EAChB;AAAA,EAAA,GAGEiF,IAAkB,KAAK;AAAA,KAC1BP,EAAM,gBAAgB,CAAA,GAAI,IAAI,CAACpD,OAAS;AAAA,MACvC,SAASA,EAAI;AAAA,MACb,aAAaA,EAAI;AAAA,MACjB,QAAQ,OAAO,SAASA,EAAI,MAAM,KAAK;AAAA,MACvC,QAAQ,OAAO,SAASA,EAAI,MAAM,KAAK;AAAA,IAAA,EACvC;AAAA,EAAA,GAGE4D,IAAiBR,EAAM,WAAW,CAAA,GAClCS,IAAc,KAAK,UAAUD,CAAc;AAEjD,SAAO;AAAA,IACL,YAAY;AAAA,MACV,WAAWR,EAAM;AAAA,MACjB,aAAaA,EAAM;AAAA,MACnB,WAAWA,EAAM;AAAA,MACjB,MAAME;AAAA,MACN,UAAUF,EAAM;AAAA,MAChB,QAAQA,EAAM;AAAA,MACd,mBACEA,EAAM,aAAa,UACfC;AAAA,QACA,MAAM,QAAQD,EAAM,WAAW,KAC3B7f,IAAA6f,EAAM,YAAY,CAAC,MAAnB,gBAAA7f,EAAsB,gBACtBmE,IAAA0b,EAAM,gBAAN,gBAAA1b,EAAmB;AAAA,MAAA,IAEvB;AAAA,MACN,iBACE0b,EAAM,aAAa,UACfC;AAAA,QACA,MAAM,QAAQD,EAAM,WAAW,KAC3Bxb,IAAAwb,EAAM,YAAY,CAAC,MAAnB,gBAAAxb,EAAsB,cACtBC,IAAAub,EAAM,gBAAN,gBAAAvb,EAAmB;AAAA,MAAA,IAEvB;AAAA,MACN,eACEub,EAAM,aAAa,WAAWA,EAAM,QAAQ,IACxCC;AAAA,QACA,MAAM,QAAQD,EAAM,WAAW,KAC3BU,IAAAV,EAAM,YAAY,CAAC,MAAnB,gBAAAU,EAAsB,YACtBC,IAAAX,EAAM,gBAAN,gBAAAW,EAAmB;AAAA,MAAA,IAEvBX,EAAM,aAAa,UACjB,IACA;AAAA,MACR,UAAUM;AAAA,MACV,cAAcC;AAAA,MACd,SAASE;AAAA,MACT,cAAcT,EAAM;AAAA,MACpB,eAAeA,EAAM;AAAA,IAAA;AAAA,EACvB;AAEJ,GAEMY,KAAsB,MAAM;;AAChC,QAAM1iB,IAAWC,GAAA,GACX;AAAA,IACJ,mBAAAiL;AAAA,IACA,UAAAxG;AAAA,IACA,kBAAAie;AAAA,IACA,eAAeC;AAAA,IACf,iBAAAje;AAAA,IACA,gBAAAC;AAAA,EAAA,IACEC,GAAY,CAACC,MAAUA,EAAM,YAAY,GACvC,CAAC+d,GAAeC,CAAgB,IAAI7e,EAAS,IAAI,GACjD,CAACoc,GAAc0C,CAAe,IAAI9e,EAAS,EAAK,GAChD,CAACoE,GAAaC,CAAc,IAAIrE,EAAS,EAAK,GAC9C,CAAC+N,GAAqBC,CAAsB,IAAIhO,EAAS,EAAK,GAC9D,CAAC+e,GAAoBC,CAAqB,IAAIhf,EAAS,EAAK,GAC5D,CAACif,GAAsBC,CAAuB,IAAIlf,EAAS,EAAK,GAChE,CAACmc,GAAgBgD,CAAiB,IAAInf,EAAS,CAAA,CAAE,GAEjDof,IACJT,KAAA,gBAAAA,EAAS,kDACLU,IACJV,KAAA,gBAAAA,EAAS,qDACL,CAACW,GAAoBC,CAAqB,IAAIvf,EAAS;AAAA,IAC3D,MAAM;AAAA,IACN,WAAW;AAAA,IACX,WAAW;AAAA,EAAA,CACZ,GAEK,CAACwf,GAAsBC,CAAuB,IAAIzf,EAAS;AAAA,IAC/D,MAAM;AAAA,IACN,WAAW;AAAA,IACX,aAAa;AAAA,EAAA,CACd,GAEK0f,KAAe3P;AAAA,IACnB,CAAC/K,MAAO;AACN,YAAM2a,IAAcf,MAAkB5Z;AACtC,MAAA6Z,EAAiB,CAACpN,MAAUA,MAASzM,IAAK,OAAOA,CAAG,GAChD2a,KACF5jB,EAAS6jB,GAAsB5a,CAAE,CAAC;AAAA,IAEtC;AAAA,IACA,CAAC4Z,GAAe7iB,CAAQ;AAAA,EAAA,GAGpB8jB,KAAwB9P;AAAA,IAC5B,CAAC3N,MACC4Z,GAA6B;AAAA,MAC3B,WAAA5Z;AAAA,MACA,UAAA3B;AAAA,MACA,mBAAAwG;AAAA,IAAA,CACD;AAAA,IACH,CAACxG,GAAUwG,CAAiB;AAAA,EAAA,GAGxB6Y,IAAsB/P;AAAA,IAC1B,CAAC3N,GAAW2d,GAASC,IAAoB,OAAS;AAChD,MAAAb,EAAkB,CAAC1N,MAAS;AAC1B,cAAMwO,IAAcxO,EAAKrP,CAAS,KAAKyd,GAAsBzd,CAAS,GAChE8d,KACJ,OAAOH,KAAY,aAAaA,EAAQE,CAAW,IAAIF;AAEzD,eAAO;AAAA,UACL,GAAGtO;AAAA,UACH,CAACrP,CAAS,GAAG8d;AAAA,QAAA;AAAA,MAEjB,CAAC,GAEGF,KACFjkB,EAAS6jB,GAAsBxd,CAAS,CAAC;AAAA,IAE7C;AAAA,IACA,CAACrG,GAAU8jB,EAAqB;AAAA,EAAA,GAG5BM,IAAwBpQ;AAAA,IAC5B,CAAC3N,GAAW+Y,GAAcC,GAAoBje,MAAa;AACzD,MAAA2iB,EAAoB1d,GAAW,CAAC6d,MAAgB;AAC9C,cAAMG,KACJjF,MAAiB,IACbhe,MAAa,UACX,CAAA,IACA,CAAA,IACFie;AAEN,eAAO;AAAA,UACL,GAAG6E;AAAA,UACH,OAAO9E;AAAA,UACP,aAAaiF;AAAA,UACb,aAAanjB;AAAA,YACXmjB;AAAA,YACAjjB;AAAA,YACAge;AAAA,UAAA;AAAA,QACF;AAAA,MAEJ,CAAC;AAAA,IACH;AAAA,IACA,CAAC2E,CAAmB;AAAA,EAAA,GAGhBO,IAA0BtQ;AAAA,IAC9B,CAAC3N,GAAWgZ,GAAoBje,MAAa;AAC3C,MAAA2iB,EAAoB1d,GAAW,CAAC6d,MAAgB;AAC9C,cAAM9E,IACJhe,MAAa,aACTie,EAAmB,SACnB6E,EAAY;AAElB,eAAO;AAAA,UACL,GAAGA;AAAA,UACH,OAAO9E;AAAA,UACP,aAAaC;AAAA,UACb,aAAane;AAAA,YACXme;AAAA,YACAje;AAAA,YACAge;AAAA,UAAA;AAAA,QACF;AAAA,MAEJ,CAAC;AAAA,IACH;AAAA,IACA,CAAC2E,CAAmB;AAAA,EAAA,GAGhBQ,IAAsBvQ;AAAA,IAC1B,CAAC3N,GAAWme,MAAmB;AAC7B,MAAAT,EAAoB1d,GAAW,CAAC6d,OAAiB;AAAA,QAC/C,GAAGA;AAAA,QACH,SAASM;AAAA,MAAA,EACT;AAAA,IACJ;AAAA,IACA,CAACT,CAAmB;AAAA,EAAA,GAGhBU,IAA2BzQ;AAAA,IAC/B,CAAC3N,GAAWqe,MAAwB;AAClC,MAAAX,EAAoB1d,GAAW,CAAC6d,OAAiB;AAAA,QAC/C,GAAGA;AAAA,QACH,cAAcQ;AAAA,MAAA,EACd;AAAA,IACJ;AAAA,IACA,CAACX,CAAmB;AAAA,EAAA,GAGhBY,IAAmB3Q;AAAA,IACvB,CAAC3N,GAAWuF,MAAY;AACtB,MAAAmY,EAAoB1d,GAAW,CAAC6d,OAAiB;AAAA,QAC/C,GAAGA;AAAA,QACH,MAAMtY;AAAA,MAAA,EACN;AAAA,IACJ;AAAA,IACA,CAACmY,CAAmB;AAAA,EAAA,GAGhBa,IAAsB5Q;AAAA,IAC1B,CAAC3N,GAAWwe,MAAmB;AAC7B,MAAAd,EAAoB1d,GAAW,CAAC6d,OAAiB;AAAA,QAC/C,GAAGA;AAAA,QACH,SAASW;AAAA,MAAA,EACT;AAAA,IACJ;AAAA,IACA,CAACd,CAAmB;AAAA,EAAA,GAGhBe,IAAuB9Q;AAAA,IAC3B,CAAC3N,GAAW0e,MAAgB;AAC1B,MAAAhB,EAAoB1d,GAAW,CAAC6d,MAAgB;AAC9C,YAAIA,EAAY,aAAaa,EAAa,QAAOb;AAEjD,YAAI7E;AAEJ,YAAI0F,MAAgB;AAClB,UAAA1F,IAAqB,MAAM,QAAQ6E,EAAY,WAAW,IACtDA,EAAY,YAAY,CAAC,KAAK;AAAA,YAC9B,IAAI,SAAS,KAAK,IAAA,CAAK;AAAA,YACvB,cAAc;AAAA,YACd,YAAY;AAAA,YACZ,UAAU;AAAA,UAAA,IAEVA,EAAY;AAAA,aACX;AACL,UAAA7E,IAAqB,MAAM,QAAQ6E,EAAY,WAAW,IACtD,CAAC,GAAGA,EAAY,WAAW,IAC3B;AAAA,YACAA,EAAY,eAAe;AAAA,cACzB,IAAI,YAAY,KAAK,IAAA,CAAK;AAAA,cAC1B,cAAc;AAAA,cACd,YAAY;AAAA,cACZ,UAAU;AAAA,YAAA;AAAA,UACZ;AAGJ,gBAAMc,IAAcd,EAAY,SAAS;AACzC,cAAI7E,EAAmB,SAAS2F;AAC9B,qBAAS3N,KAAIgI,EAAmB,QAAQhI,KAAI2N,GAAa3N;AACvD,cAAAgI,EAAmB,KAAK;AAAA,gBACtB,IAAI,YAAY,KAAK,IAAA,CAAK,IAAIhI,EAAC;AAAA,gBAC/B,cAAc;AAAA,gBACd,YAAY;AAAA,gBACZ,UAAU;AAAA,cAAA,CACX;AAAA,QAGP;AAEA,eAAO;AAAA,UACL,GAAG6M;AAAA,UACH,UAAUa;AAAA,UACV,aAAa1F;AAAA,UACb,aAAane;AAAA,YACXme;AAAA,YACA0F;AAAA,YACAb,EAAY;AAAA,UAAA;AAAA,QACd;AAAA,MAEJ,CAAC;AAAA,IACH;AAAA,IACA,CAACH,CAAmB;AAAA,EAAA,GAGhBkB,IAAgCjR;AAAA,IACpC,CAAC3N,GAAW0e,MAAgB;AAG1B,OADE3E,EAAe/Z,CAAS,KAAKyd,GAAsBzd,CAAS,GAClD,aAAa0e,KAEzBrB,EAAwB;AAAA,QACtB,MAAM;AAAA,QACN,WAAArd;AAAA,QACA,aAAA0e;AAAA,MAAA,CACD;AAAA,IACH;AAAA,IACA,CAAC3E,GAAgB0D,EAAqB;AAAA,EAAA,GAGlCoB,IAAwBlR,GAAY,MAAM;AAC9C,UAAM,EAAE,WAAA3N,GAAW,aAAA0e,EAAA,IAAgBtB;AACnC,IAAAqB,EAAqBze,GAAW0e,CAAW,GAC3CrB,EAAwB;AAAA,MACtB,MAAM;AAAA,MACN,WAAW;AAAA,MACX,aAAa;AAAA,IAAA,CACd;AAAA,EACH,GAAG,CAACD,GAAsBqB,CAAoB,CAAC,GAEzCK,IAAsBnR,GAAY,YAAY;AAClD,UAAM,EAAE,WAAA3N,GAAW,WAAAkH,EAAA,IAAcgW;AACjC,QAAI;AACF,YAAMxgB,GAAoB;AAAA,QACxB,YAAY;AAAA,UACV,WAAAsD;AAAA,UACA,QAAQkH;AAAA,QAAA;AAAA,MACV,CACD,GAEDvN,EAASolB,GAAiB,EAAE,WAAA/e,GAAW,QAAQkH,EAAA,CAAW,CAAC,GAE3D6V,EAAkB,CAAC1N,MAAS;AAC1B,cAAMwO,IAAcxO,EAAKrP,CAAS,KAAKyd,GAAsBzd,CAAS;AACtE,eAAO;AAAA,UACL,GAAGqP;AAAA,UACH,CAACrP,CAAS,GAAG;AAAA,YACX,GAAG6d;AAAA,YACH,UAAU3W;AAAA,UAAA;AAAA,QACZ;AAAA,MAEJ,CAAC,GAEDxH,GAAU;AAAA,QACR,SAAS,4BAA4BwH,IAAY,WAAW,UAAU;AAAA,QACtE,MAAM;AAAA,MAAA,CACP;AAAA,IACH,SAAS7G,GAAO;AACd,cAAQ,MAAM,oCAAoCA,CAAK,GACvDX,GAAU;AAAA,QACR,UAASW,KAAA,gBAAAA,EAAO,YAAW;AAAA,QAC3B,MAAM;AAAA,MAAA,CACP;AAAA,IACH,UAAA;AACE,MAAA8c,EAAsB,EAAE,MAAM,IAAO,WAAW,MAAM,WAAW,MAAM;AAAA,IACzE;AAAA,EACF,GAAG,CAACD,GAAoBO,EAAqB,CAAC,GAExCuB,IAAqBrR,GAAY,CAAC3N,GAAWkH,MAAc;AAC/D,IAAAiW,EAAsB;AAAA,MACpB,MAAM;AAAA,MACN,WAAAnd;AAAA,MACA,WAAAkH;AAAA,IAAA,CACD;AAAA,EACH,GAAG,CAAA,CAAE,GAEC+X,KAA2BtR;AAAA,IAC/B,CAAC3N,GAAWkf,MAAoB;AAC9B,MAAAxB,EAAoB1d,GAAW,CAAC6d,OAAiB;AAAA,QAC/C,GAAGA;AAAA,QACH,cAAcqB;AAAA,MAAA,EACd;AAAA,IACJ;AAAA,IACA,CAACxB,CAAmB;AAAA,EAAA,GAGhByB,KAA0BxR;AAAA,IAC9B,CAAC5P,MACCkc,GAAoC3b,GAAiBP,CAAa;AAAA,IACpE,CAACO,CAAe;AAAA,EAAA,GAGZ8gB,KAA8BzR;AAAA,IAClC,CAAC5P,MAAkB;AACjB,UAAI,CAACA,EAAe,QAAO,CAAA;AAE3B,YAAMmB,IAAiB,IAAI;AAAA,QACzBigB,GAAwBphB,CAAa,EAClC,IAAI,CAACoB,MAAS,OAAOA,KAAQ,EAAE,EAAE,OAAO,YAAA,CAAa,EACrD,OAAO,OAAO;AAAA,MAAA;AAGnB,aAAOZ,EAAe;AAAA,QACpB,CAACU,MACCA,EAAS,aACTC,EAAe,IAAI,OAAOD,EAAS,QAAQ,EAAE,EAAE,KAAA,EAAO,aAAa;AAAA,MAAA;AAAA,IAEzE;AAAA,IACA,CAACV,GAAgB4gB,EAAuB;AAAA,EAAA,GAGpCE,KAA4B1R;AAAA,IAChC,CAAC3N,GAAWsf,MAAqB;AAC/B,MAAA5B,EAAoB1d,GAAW,CAAC6d,MAAgB;AAC9C,cAAM9R,IAAmBoT,GAAwBG,CAAgB,GAC3DC,IAAsB1B,EAAY,cAClC2B,KACJ,CAACD,KACDxT,EAAiB,SAASwT,CAAmB;AAE/C,eAAO;AAAA,UACL,GAAG1B;AAAA,UACH,eAAeyB;AAAA,UACf,cAAcE,KAA2BD,IAAsB;AAAA,QAAA;AAAA,MAEnE,CAAC;AAAA,IACH;AAAA,IACA,CAACJ,IAAyBzB,CAAmB;AAAA,EAAA,GAGzC+B,KAAgB,CAACzf,MAAc;AACnC,IAAA+c,EAAkB,CAAC1N,MAAS;AAC1B,YAAM+I,IAAU,EAAE,GAAG/I,EAAA;AACrB,oBAAO+I,EAAQpY,CAAS,GACjBoY;AAAA,IACT,CAAC,GACDkF,GAAatd,CAAS;AAAA,EACxB,GAEM8C,KAAyB,CAACvG,MAAS;AACvC,IAAA5C,EAASoJ,GAAiB,EAAE,GAAGxG,GAAM,UAAU,GAAA,CAAM,CAAC,GACtD0F,EAAe,EAAK;AAAA,EACtB,GAEMyd,KAA2B,OAAO1f,MAAc;AACpD,UAAMyb,IACJ1B,EAAe/Z,CAAS,KACxB6E,EAAkB,KAAK,CAACwC,MAAOA,EAAG,OAAOrH,CAAS,KAClDyd,GAAsBzd,CAAS;AAEjC,QAAIyb,GAAO;AACT,YAAMvL,IAAS8K,GAAoBS,CAAK;AACxC,UAAIvL,GAAQ;AACV,QAAAvW,EAASgmB,GAAoB,EAAE,WAAA3f,GAAW,QAAAkQ,EAAA,CAAQ,CAAC,GACnDxQ,GAAU;AAAA,UACR,SAAS;AAAA,UACT,MAAM;AAAA,QAAA,CACP;AACD;AAAA,MACF;AAEA,YAAME,IAAU4b,GAAsBC,CAAK;AAE3C,UAAI;AACF,cAAMjf,GAAmBoD,CAAO,GAChCjG,EAASimB,GAAuBnE,CAAK,CAAC,GACtC9hB,EAAS6jB,GAAsBxd,CAAS,CAAC,GAEzCN,GAAU;AAAA,UACR,SAAS;AAAA,UACT,MAAM;AAAA,QAAA,CACP,GAEDqd,EAAkB,CAAC1N,MAAS;AAC1B,gBAAM+I,KAAU,EAAE,GAAG/I,EAAA;AACrB,wBAAO+I,GAAQpY,CAAS,GACjBoY;AAAA,QACT,CAAC;AAAA,MACH,SAASjY,GAAK;AACZ,gBAAQ,MAAM,kCAAkCA,CAAG,GACnDT,GAAU;AAAA,UACR,UAASS,KAAA,gBAAAA,EAAK,YAAW;AAAA,UACzB,MAAM;AAAA,QAAA,CACP;AAAA,MACH;AAAA,IACF;AACA,IAAAmd,GAAatd,CAAS;AAAA,EACxB,GAEM6f,KAAkBlhB,GAAQ,MACvBmb,GAAqB;AAAA,IAC1B,UAAAzb;AAAA,IACA,gBAAA0b;AAAA,IACA,mBAAAlV;AAAA,IACA,cAAAmV;AAAA,EAAA,CACD,GACA,CAAC3b,GAAU0b,GAAgBlV,GAAmBmV,CAAY,CAAC;AAE9D,SACE,gBAAAhhB,EAACD,GAAA,EAAI,WAAU,wBACb,UAAA;AAAA,IAAA,gBAAAC,EAACD,GAAA,EAAI,WAAU,kBACb,UAAA;AAAA,MAAA,gBAAAC,EAACD,GAAA,EAAI,WAAU,eACb,UAAA;AAAA,QAAA,gBAAAE,EAACK,GAAA,EAAW,WAAU,cAAa,UAAA,8BAEnC;AAAA,QACA,gBAAAL,EAACK,GAAA,EAAW,WAAU,iBAAgB,UAAA,6DAAA,CAEtC;AAAA,MAAA,GACF;AAAA,MACA,gBAAAN,EAACD,GAAA,EAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,IAAA,GACrD,UAAA;AAAA,QAAA,gBAAAC;AAAA,UAACD;AAAA,UAAA;AAAA,YACC,IAAI;AAAA,cACF,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,KAAK;AAAA,cACL,IAAI;AAAA,YAAA;AAAA,YAGN,UAAA;AAAA,cAAA,gBAAAE;AAAA,gBAACuP;AAAA,gBAAA;AAAA,kBACC,SAASwR;AAAA,kBACT,UAAU,CAACrZ,MAAM+b,EAAgB/b,EAAE,OAAO,OAAO;AAAA,gBAAA;AAAA,cAAA;AAAA,cAEnD,gBAAA1H;AAAA,gBAACK;AAAA,gBAAA;AAAA,kBACC,IAAI;AAAA,oBACF,UAAU;AAAA,oBACV,YAAY;AAAA,oBACZ,OAAO;AAAA,oBACP,QAAQ;AAAA,oBACR,YAAY;AAAA,kBAAA;AAAA,kBAEd,SAAS,MAAMojB,EAAgB,CAAC1C,CAAY;AAAA,kBAC7C,UAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YAED;AAAA,UAAA;AAAA,QAAA;AAAA,QAEDiD,KACC,gBAAAhkB;AAAA,UAACM;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,WAAW,gBAAAN,EAACC,GAAA,EAAgB,MAAMkI,GAAA,CAAQ;AAAA,YAC1C,SAAS,MAAM0b,EAAwB,EAAI;AAAA,YAC3C,IAAI;AAAA,cACF,iBAAiB;AAAA,cACjB,WAAW,EAAE,iBAAiB,UAAA;AAAA,cAC9B,eAAe;AAAA,cACf,YAAY;AAAA,cACZ,UAAU;AAAA,cACV,cAAc;AAAA,cACd,SAAS;AAAA,cACT,WAAW;AAAA,YAAA;AAAA,YAEd,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAIFG,KACC,gBAAAhkB;AAAA,UAACM;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,WAAW,gBAAAN,EAACC,GAAA,EAAgB,MAAMmI,GAAA,CAAe;AAAA,YACjD,SAAS,MAAMuK,EAAuB,EAAI;AAAA,YAC1C,IAAI;AAAA,cACF,iBAAiB;AAAA,cACjB,WAAW,EAAE,iBAAiB,UAAA;AAAA,cAC9B,eAAe;AAAA,cACf,YAAY;AAAA,cACZ,UAAU;AAAA,cACV,cAAc;AAAA,cACd,SAAS;AAAA,cACT,WAAW;AAAA,YAAA;AAAA,YAEd,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAIFoR,KACC,gBAAA/jB;AAAA,UAACM;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,WAAW,gBAAAN,EAACC,GAAA,EAAgB,MAAMmR,GAAA,CAAU;AAAA,YAC5C,SAAS,MAAMuS,EAAsB,EAAI;AAAA,YACzC,IAAI;AAAA,cACF,iBAAiB;AAAA,cACjB,WAAW,EAAE,iBAAiB,UAAA;AAAA,cAC9B,eAAe;AAAA,cACf,YAAY;AAAA,cACZ,UAAU;AAAA,cACV,cAAc;AAAA,cACd,SAAS;AAAA,cACT,WAAW;AAAA,YAAA;AAAA,YAEd,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAIH,gBAAA3jB;AAAA,UAACM;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,WAAW,gBAAAN,EAACC,GAAA,EAAgB,MAAMe,GAAA,CAAQ;AAAA,YAC1C,SAAS,MAAMgI,EAAe,EAAI;AAAA,YAClC,IAAI;AAAA,cACF,iBAAiB;AAAA,cACjB,WAAW,EAAE,iBAAiB,UAAA;AAAA,cAC9B,eAAe;AAAA,cACf,YAAY;AAAA,cACZ,UAAU;AAAA,cACV,cAAc;AAAA,cACd,SAAS;AAAA,cACT,WAAW;AAAA,YAAA;AAAA,YAEd,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAED,EAAA,CACF;AAAA,IAAA,GACF;AAAA,IAEA,gBAAAhJ,EAACgP,MAAe,WAAWC,IAAO,WAAU,mBAC1C,UAAA,gBAAAlP,EAACmP,IAAA,EAAM,cAAY,IACjB,UAAA;AAAA,MAAA,gBAAAlP,EAACmP,IAAA,EACC,4BAACC,IAAA,EACC,UAAA;AAAA,QAAA,gBAAApP,EAACqP,GAAA,EAAU,WAAU,eAAc,UAAA,WAAO;AAAA,QAC1C,gBAAArP,EAACqP,GAAA,EAAU,WAAU,eAAc,UAAA,QAAI;AAAA,QACvC,gBAAArP,EAACqP,GAAA,EAAU,WAAU,eAAc,UAAA,mBAAe;AAAA,QAClD,gBAAArP,EAACqP,GAAA,EAAU,WAAU,eAAc,UAAA,uBAAmB;AAAA,QACtD,gBAAArP,EAACqP,GAAA,EAAU,WAAU,eAAc,UAAA,UAAM;AAAA,QACzC,gBAAArP,EAACqP,GAAA,EAAU,WAAU,eAAc,OAAM,QAAA,CAAQ;AAAA,MAAA,EAAA,CACnD,EAAA,CACF;AAAA,wBACCC,IAAA,EACE,UAAAsX,GAAgB,IAAI,CAACzlB,GAASqB,MAAU;;AACvC,cAAMqkB,IAAatD,MAAkBpiB,EAAQ;AAC7C,eACE,gBAAApB,EAACsc,GAAM,UAAN,EACC,UAAA;AAAA,UAAA,gBAAAtc;AAAA,YAACqP;AAAA,YAAA;AAAA,cACC,WAAW,aAAayX,IAAa,iBAAiB,EAAE;AAAA,cACxD,SAAS,MAAM,CAACA,KAAcxC,GAAaljB,EAAQ,EAAE;AAAA,cACrD,IAAI,EAAE,QAAQ0lB,IAAa,YAAY,UAAA;AAAA,cAEvC,UAAA;AAAA,gBAAA,gBAAA7mB,EAACqP,GAAA,EAAW,cAAQ,EAAA,CAAE;AAAA,gBACtB,gBAAArP,EAACqP,KACE,UAAAwX,IACC,gBAAA7mB;AAAA,kBAACY;AAAA,kBAAA;AAAA,oBACC,SAAQ;AAAA,oBACR,MAAK;AAAA,oBACL,OAAOO,EAAQ;AAAA,oBACf,OAAO,CAAC,GAACwB,IAAA0gB,EAAiBliB,EAAQ,EAAE,MAA3B,QAAAwB,EAA8B;AAAA,oBACvC,aAAYmE,IAAAuc,EAAiBliB,EAAQ,EAAE,MAA3B,gBAAA2F,EAA8B;AAAA,oBAC1C,UAAU,CAACY,MACT2d,EAAiBlkB,EAAQ,IAAIuG,EAAE,OAAO,KAAK;AAAA,oBAE7C,WAAU;AAAA,oBACV,WAAS;AAAA,kBAAA;AAAA,gBAAA,IAGX,gBAAA1H,EAAC,QAAA,EAAK,WAAU,gBAAgB,UAAAmB,EAAQ,MAAK,GAEjD;AAAA,gBACA,gBAAAnB,EAACqP,GAAA,EACE,UAAAwX,IACC,gBAAA9mB,EAACD,GAAA,EACC,UAAA;AAAA,kBAAA,gBAAAE;AAAA,oBAACsf;AAAA,oBAAA;AAAA,sBACC,WAAWne,EAAQ;AAAA,sBACnB,cAAcA,EAAQ;AAAA,sBACtB,oBAAoBA,EAAQ;AAAA,sBAC5B,UAAU6gB;AAAA,sBACV,UAAU,CAACrY,GAAImd,IAAO9kB,OACpB8iB;AAAA,wBACEnb;AAAA,wBACAmd;AAAA,wBACA9kB;AAAA,wBACAb,EAAQ;AAAA,sBAAA;AAAA,oBACV;AAAA,kBAAA;AAAA,oBAGH6F,KAAAqc,EAAiBliB,EAAQ,EAAE,MAA3B,gBAAA6F,GAA8B,UAC7B,gBAAAhH;AAAA,oBAACK;AAAA,oBAAA;AAAA,sBACC,SAAQ;AAAA,sBACR,OAAM;AAAA,sBACN,IAAI,EAAE,IAAI,KAAK,SAAS,QAAA;AAAA,sBAEvB,UAAAgjB,EAAiBliB,EAAQ,EAAE,EAAE;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAChC,EAAA,CAEJ,IAEA,GAAGA,EAAQ,KAAK,SAAA,CAEpB;AAAA,gBACA,gBAAAnB,EAACqP,GAAA,EAAU,WAAU,oBAClB,YAAQ,cACLlO,EAAQ,YAAY,MAAM,IAAI,EAAE,IAAI,CAAC+gB,GAAMnK,OAC3C,gBAAA/X;AAAA,kBAACqc,GAAM;AAAA,kBAAN;AAAA,oBAGE,UAAAtE,OAAM,IACL,gBAAA/X,EAAC,UAAA,EAAQ,aAAsBkiB,CAAI,EAAA,CAAE,IAErC,gBAAAniB,EAAAmI,IAAA,EACG,UAAA;AAAA,sBAAA;AAAA,sBACD,gBAAAlI,EAAC,UAAA,EAAQ,UAAAiiB,GAAsBC,CAAI,EAAA,CAAE;AAAA,oBAAA,EAAA,CACvC;AAAA,kBAAA;AAAA,kBARG,GAAG/gB,EAAQ,EAAE,gBAAgB4W,EAAC;AAAA,gBAAA,CAWtC,IACC,OAAA,CACN;AAAA,kCACC1I,GAAA,EAAU,SAAS,CAAC3H,MAAMA,EAAE,mBAC3B,UAAA,gBAAA1H;AAAA,kBAACF;AAAA,kBAAA;AAAA,oBACC,IAAI;AAAA,sBACF,SAAS;AAAA,sBACT,YAAY;AAAA,sBACZ,gBAAgB;AAAA,oBAAA;AAAA,oBAGlB,UAAA,gBAAAE;AAAA,sBAACuP;AAAA,sBAAA;AAAA,wBACC,SAAS,CAAC,CAACpO,EAAQ;AAAA,wBACnB,UAAU,CAACuG,MAAM;AACf,0BAAAA,EAAE,gBAAA,GACFqe,EAAmB5kB,EAAQ,IAAIuG,EAAE,OAAO,OAAO;AAAA,wBACjD;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACF;AAAA,gBAAA,GAEJ;AAAA,gBACA,gBAAA1H,EAACqP,GAAA,EAAU,OAAM,SACd,UAACwX,IAYA,gBAAA7mB;AAAA,kBAACG;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,MAAK;AAAA,oBACL,SAAS,CAACuH,MAAM;AACd,sBAAAA,EAAE,gBAAA,GACF8e,GAAcrlB,EAAQ,EAAE;AAAA,oBAC1B;AAAA,oBAEA,UAAA,gBAAAnB,EAACC,GAAA,EAAgB,MAAM8mB,GAAA,CAAa;AAAA,kBAAA;AAAA,gBAAA,IAnBtC,gBAAA/mB;AAAA,kBAACG;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,MAAK;AAAA,oBACL,SAAS,CAACuH,MAAM;AACd,sBAAAA,EAAE,gBAAA,GACF2c,GAAaljB,EAAQ,EAAE;AAAA,oBACzB;AAAA,oBAEA,UAAA,gBAAAnB,EAACC,GAAA,EAAgB,MAAM+mB,IAAe,MAAK,KAAA,CAAK;AAAA,kBAAA;AAAA,gBAAA,EAYlD,CAEJ;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,4BAGD5X,IAAA,EACC,UAAA,gBAAApP;AAAA,YAACqP;AAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT,WAAU;AAAA,cACV,IAAI,EAAE,SAAS,EAAA;AAAA,cAEf,4BAAC4X,IAAA,EAAS,IAAIJ,GAAY,SAAQ,QAAO,eAAa,IACpD,UAAA;AAAA,gBAAA,gBAAA9mB,EAACD,GAAA,EAAI,WAAU,uBACb,UAAA;AAAA,kBAAA,gBAAAC,EAACD,GAAA,EAAI,WAAU,cACb,UAAA;AAAA,oBAAA,gBAAAC,EAACD,GAAA,EAAI,IAAI,EAAE,IAAI,KACb,UAAA;AAAA,sBAAA,gBAAAE;AAAA,wBAACK;AAAA,wBAAA;AAAA,0BACC,SAAQ;AAAA,0BACR,IAAI;AAAA,4BACF,OAAO;AAAA,4BACP,YAAY;AAAA,4BACZ,UAAU;AAAA,4BACV,eAAe;AAAA,4BACf,SAAS;AAAA,4BACT,IAAI;AAAA,0BAAA;AAAA,0BAEP,UAAA;AAAA,wBAAA;AAAA,sBAAA;AAAA,sBAGD,gBAAAL;AAAA,wBAAC6H;AAAA,wBAAA;AAAA,0BACC,SAASxC;AAAA,0BACT,gBAAgB,CAACyC,OAAWA,KAAA,gBAAAA,EAAQ,SAAQ;AAAA,0BAC5C,sBAAsB,CAACA,GAAQvG,OAC7BuG,EAAO,SAASvG,GAAM;AAAA,0BAExB,OACE8D,EAAgB;AAAA,4BACd,CAACM,MACCA,EAAU,SAASxE,EAAQ;AAAA,0BAAA,KAC1B;AAAA,0BAEP,UAAU,CAAC4G,GAAGC,OACZoe;AAAA,4BACEjlB,EAAQ;AAAA,6BACR6G,MAAA,gBAAAA,GAAU,SAAQ;AAAA,0BAAA;AAAA,0BAGtB,aAAa,CAACC;;AACZ,mDAAAjI;AAAA,8BAACY;AAAA,8BAAA;AAAA,gCACE,GAAGqH;AAAA,gCACJ,MAAK;AAAA,gCACL,WAAS;AAAA,gCACT,aAAY;AAAA,gCACZ,OACE,CAAC,GAACtF,KAAA0gB,EAAiBliB,EAAQ,EAAE,MAA3B,QAAAwB,GAA8B;AAAA,gCAElC,aACEmE,KAAAuc,EAAiBliB,EAAQ,EAAE,MAA3B,gBAAA2F,GAA8B;AAAA,gCAEhC,YAAY;AAAA,kCACV,GAAGmB,EAAO;AAAA,kCACV,gBACE,gBAAAlI,EAAAmI,IAAA,EACE,UAAA;AAAA,oCAAA,gBAAAlI;AAAA,sCAACa;AAAA,sCAAA;AAAA,wCACC,UAAS;AAAA,wCACT,IAAI,EAAE,IAAI,EAAA;AAAA,wCAEV,UAAA,gBAAAb;AAAA,0CAACC;AAAA,0CAAA;AAAA,4CACC,MAAMkI;AAAA,4CACN,OAAO;AAAA,8CACL,OAAO;AAAA,8CACP,UAAU;AAAA,4CAAA;AAAA,0CACZ;AAAA,wCAAA;AAAA,sCACF;AAAA,oCAAA;AAAA,oCAEDF,EAAO,WAAW;AAAA,kCAAA,EAAA,CACrB;AAAA,gCAAA;AAAA,gCAGJ,IAAI;AAAA,kCACF,4BAA4B;AAAA,oCAC1B,cAAc;AAAA,oCACd,SAAS;AAAA,kCAAA;AAAA,gCACX;AAAA,8BACF;AAAA,4BAAA;AAAA;AAAA,wBACF;AAAA,sBAAA;AAAA,oBAEJ,GACF;AAAA,sCACCnI,GAAA,EAAI,IAAI,EAAE,IAAI,KACb,UAAA;AAAA,sBAAA,gBAAAE;AAAA,wBAACK;AAAA,wBAAA;AAAA,0BACC,SAAQ;AAAA,0BACR,IAAI;AAAA,4BACF,OAAO;AAAA,4BACP,YAAY;AAAA,4BACZ,UAAU;AAAA,4BACV,eAAe;AAAA,4BACf,SAAS;AAAA,4BACT,IAAI;AAAA,0BAAA;AAAA,0BAEP,UAAA;AAAA,wBAAA;AAAA,sBAAA;AAAA,sBAGD,gBAAAL;AAAA,wBAAC6H;AAAA,wBAAA;AAAA,0BACC,SAASse;AAAA,4BACPhlB,EAAQ;AAAA,0BAAA;AAAA,0BAEV,UAAU,CAACA,EAAQ;AAAA,0BACnB,gBAAgB,CAAC2G,OACfA,KAAA,gBAAAA,EAAQ,UACRA,KAAA,gBAAAA,EAAQ,WACRA,KAAA,gBAAAA,EAAQ,eACRA,KAAA,gBAAAA,EAAQ,UACRA,KAAA,gBAAAA,EAAQ,OACR;AAAA,0BAEF,sBAAsB,CAACA,GAAQvG,OAC7B,QAAOuG,KAAA,gBAAAA,EAAQ,SAAQ,EAAE,EACtB,KAAA,EACA,YAAA,MACH,QAAOvG,MAAA,gBAAAA,GAAO,SAAQ,EAAE,EACrB,KAAA,EACA,YAAA;AAAA,0BAEL,OACE4kB;AAAA,4BACEhlB,EAAQ;AAAA,0BAAA,EACR;AAAA,4BACA,CAAC6E,MACC,OAAOA,EAAS,QAAQ,EAAE,EACvB,KAAA,EACA,YAAA,MACH,OAAO7E,EAAQ,gBAAgB,EAAE,EAC9B,KAAA,EACA,YAAA;AAAA,0BAAY,KACd;AAAA,0BAEP,UAAU,CAAC4G,GAAGC,OACZge;AAAA,4BACE7kB,EAAQ;AAAA,6BACR6G,MAAA,gBAAAA,GAAU,SAAQ;AAAA,0BAAA;AAAA,0BAGtB,aAAa,CAACC;;AACZ,mDAAAjI;AAAA,8BAACY;AAAA,8BAAA;AAAA,gCACE,GAAGqH;AAAA,gCACJ,MAAK;AAAA,gCACL,WAAS;AAAA,gCACT,aACE9G,EAAQ,gBACJ,qBACA;AAAA,gCAEN,OACE,CAAC,GAACwB,KAAA0gB,EAAiBliB,EAAQ,EAAE,MAA3B,QAAAwB,GAA8B;AAAA,gCAElC,aACEmE,KAAAuc,EAAiBliB,EAAQ,EAAE,MAA3B,gBAAA2F,GAA8B;AAAA,gCAEhC,YAAY;AAAA,kCACV,GAAGmB,EAAO;AAAA,kCACV,gBACE,gBAAAlI,EAAAmI,IAAA,EACE,UAAA;AAAA,oCAAA,gBAAAlI;AAAA,sCAACa;AAAA,sCAAA;AAAA,wCACC,UAAS;AAAA,wCACT,IAAI,EAAE,IAAI,EAAA;AAAA,wCAEV,UAAA,gBAAAb;AAAA,0CAACC;AAAA,0CAAA;AAAA,4CACC,MAAMmI;AAAA,4CACN,OAAO;AAAA,8CACL,OAAO;AAAA,8CACP,UAAU;AAAA,4CAAA;AAAA,0CACZ;AAAA,wCAAA;AAAA,sCACF;AAAA,oCAAA;AAAA,oCAEDH,EAAO,WAAW;AAAA,kCAAA,EAAA,CACrB;AAAA,gCAAA;AAAA,gCAGJ,IAAI;AAAA,kCACF,4BAA4B;AAAA,oCAC1B,cAAc;AAAA,oCACd,SAAS;AAAA,kCAAA;AAAA,gCACX;AAAA,8BACF;AAAA,4BAAA;AAAA;AAAA,wBACF;AAAA,sBAAA;AAAA,oBAEJ,GACF;AAAA,oBACA,gBAAAjI;AAAA,sBAAC6W;AAAA,sBAAA;AAAA,wBACC,OAAO1V,EAAQ;AAAA,wBACf,WAAWA,EAAQ;AAAA,wBACnB,UAAUA,EAAQ,YAAY;AAAA,wBAC9B,UAAU,CAAC0W,MACTmN;AAAA,0BACE7jB,EAAQ;AAAA,0BACR0W;AAAA,0BACA1W,EAAQ,YAAY;AAAA,wBAAA;AAAA,wBAGxB,kBAAkB,CAACqU,MACjBmQ,EAA8BxkB,EAAQ,IAAIqU,CAAG;AAAA,wBAE/C,SAAQvO,KAAAoc,EAAiBliB,EAAQ,EAAE,MAA3B,gBAAA8F,GAA8B;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACxC,GACF;AAAA,kBACA,gBAAAlH,EAACD,GAAA,EAAI,WAAU,eACb,UAAA;AAAA,oBAAA,gBAAAE;AAAA,sBAACmgB;AAAA,sBAAA;AAAA,wBACC,SAAShf,EAAQ,WAAW,CAAA;AAAA,wBAC5B,UAAU,CAACokB,MACTD,EAAoBnkB,EAAQ,IAAIokB,CAAc;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAGlD,gBAAAvlB;AAAA,sBAACqZ;AAAA,sBAAA;AAAA,wBACC,SAASlY,EAAQ;AAAA,wBACjB,UAAU,CAAC+jB,MACTD,EAAoB9jB,EAAQ,IAAI+jB,CAAc;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAGlD,gBAAAllB;AAAA,sBAAC6e;AAAA,sBAAA;AAAA,wBACC,cAAc1d,EAAQ,gBAAgB,CAAA;AAAA,wBACtC,UAAU,CAAC+lB,MACT/B;AAAA,0BACEhkB,EAAQ;AAAA,0BACR+lB;AAAA,wBAAA;AAAA,wBAGJ,gBAAgB9hB,EAAS;AAAA,0BACvB,CAACoB,MAAMA,EAAE,YAAYA,EAAE,OAAOrF,EAAQ;AAAA,wBAAA;AAAA,wBAExC,SACE+hB,KAAAG,EAAiBliB,EAAQ,EAAE,MAA3B,gBAAA+hB,GAA8B;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAElC,EAAA,CACF;AAAA,gBAAA,GACF;AAAA,gBAEA,gBAAAnjB,EAACD,GAAA,EAAI,WAAU,oBACb,UAAA;AAAA,kBAAA,gBAAAE;AAAA,oBAACM;AAAA,oBAAA;AAAA,sBACC,SAAQ;AAAA,sBACR,WAAU;AAAA,sBACV,SAAS,MAAMkmB,GAAcrlB,EAAQ,EAAE;AAAA,sBACxC,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAGD,gBAAAnB;AAAA,oBAACM;AAAA,oBAAA;AAAA,sBACC,SAAQ;AAAA,sBACR,WAAU;AAAA,sBACV,SAAS,gBAAAN,EAACC,GAAA,EAAgB,MAAMM,GAAA,CAAc;AAAA,sBAC9C,SAAS,MAAMkmB,GAAyBtlB,EAAQ,EAAE;AAAA,sBACnD,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAED,EAAA,CACF;AAAA,cAAA,EAAA,CACF;AAAA,YAAA;AAAA,UAAA,EACF,CACF;AAAA,QAAA,EAAA,GAhXmBA,EAAQ,EAiX7B;AAAA,MAEJ,CAAC,EAAA,CACH;AAAA,IAAA,EAAA,CACF,EAAA,CACF;AAAA,IAEA,gBAAAnB;AAAA,MAACmnB;AAAA,MAAA;AAAA,QACC,MAAMlD,EAAmB;AAAA,QACzB,aAAa,MACXC,EAAsB;AAAA,UACpB,MAAM;AAAA,UACN,WAAW;AAAA,UACX,WAAW;AAAA,QAAA,CACZ;AAAA,QAEH,aAAa2B;AAAA,QACb,OAAM;AAAA,QACN,aAAa,iDAAiD5B,EAAmB,YAAY,WAAW,UACtG;AAAA,QACF,YAAW;AAAA,MAAA;AAAA,IAAA;AAAA,IAGb,gBAAAjkB;AAAA,MAACmnB;AAAA,MAAA;AAAA,QACC,MAAMhD,EAAqB;AAAA,QAC3B,aAAa,MACXC,EAAwB;AAAA,UACtB,MAAM;AAAA,UACN,WAAW;AAAA,UACX,aAAa;AAAA,QAAA,CACd;AAAA,QAEH,aAAawB;AAAA,QACb,OAAM;AAAA,QACN,aAAa,+BAA6BjjB,IAAAwhB,EAAqB,gBAArB,gBAAAxhB,EAAkC,kBAAiB,EAC3F;AAAA,QACF,YAAW;AAAA,MAAA;AAAA,IAAA;AAAA,IAEb,gBAAA3C;AAAA,MAACoE;AAAA,MAAA;AAAA,QACC,MAAM2E;AAAA,QACN,SAAS,MAAMC,EAAe,EAAK;AAAA,QACnC,OAAOa;AAAA,QACP,eAAe;AAAA,MAAA;AAAA,IAAA;AAAA,IAEjB,gBAAA7J;AAAA,MAACuS;AAAA,MAAA;AAAA,QACC,MAAMqR;AAAA,QACN,SAAS,MAAMC,EAAwB,EAAK;AAAA,MAAA;AAAA,IAAA;AAAA,IAE9C,gBAAA7jB;AAAA,MAACyL;AAAA,MAAA;AAAA,QACC,MAAMiH;AAAA,QACN,SAAS,MAAMC,EAAuB,EAAK;AAAA,MAAA;AAAA,IAAA;AAAA,IAE7C,gBAAA3S;AAAA,MAAC6P;AAAA,MAAA;AAAA,QACC,MAAM6T;AAAA,QACN,SAAS,MAAMC,EAAsB,EAAK;AAAA,MAAA;AAAA,IAAA;AAAA,EAC5C,GACF;AAEJ,GCrmCMyD,KAAqB;AAAA,EACzB,SAAS3mB;AAAA,EACT,mBAAmBiI;AAAA,EACnB,SAAS0a;AACX,GAEMiE,KAAgC,MAAM;AAC1C,QAAM3mB,IAAWC,GAAA,GACX;AAAA,IACJ,eAAA2mB;AAAA,IACA,gBAAA1e;AAAA,EAAA,IACErD,GAAY,CAACC,MAAUA,EAAM,YAAY,GACvC,CAAC+hB,GAAgBC,CAAiB,IAAI7iB,EAAS,CAACiE,CAAc,GAE9D6e,IAAgBvN,GAAO,EAAK;AAElC,EAAA7Q,GAAU,MAAM;AACd,QAAIT,GAAgB;AAClB,MAAA4e,EAAkB,EAAK,GACvBC,EAAc,UAAU;AACxB;AAAA,IACF;AAEA,QAAIA,EAAc;AAChB;AAEF,IAAAA,EAAc,UAAU,KAEC,YAAY;;AACnC,UAAI;AACF,QAAAD,EAAkB,EAAI;AACtB,cAAM,CAACE,GAAoBC,CAAc,IAAI,MAAM,QAAQ,WAAW;AAAA,UACpEnkB,GAAyC,CAAA,CAAE;AAAA,UAC3CokB,GAAoB,wCAAwC;AAAA,QAAA,CAC7D;AAED,SAAID,KAAA,gBAAAA,EAAgB,YAAW,eAC7BjnB;AAAA,UACEmnB,GAAiB,KAAK,MAAMF,EAAe,MAAM,QAAQ,IAAI,CAAC;AAAA,QAAA;AAIlE,cAAMG,KACJJ,KAAA,gBAAAA,EAAoB,YAAW,eAC3BzgB,KAAAD,KAAAF,KAAAnE,IAAA+kB,EAAmB,UAAnB,gBAAA/kB,EAA0B,SAA1B,gBAAAmE,EAAgC,WAAhC,gBAAAE,EAAyC,OAAzC,gBAAAC,EAA6C,YAC7C;AAEN,aAAIygB,KAAA,gBAAAA,EAAoB,YAAW;AACjC,iBACEA,KAAA,gBAAAA,EAAoB,WACpB,IAAI,MAAM,mCAAmC;AAMjD,YAAI,EAFWI,MAAqB,SAEvB;AAEX,UAAApnB,EAASO,GAAe,iBAAiB,CAAC,GAC1CP,EAASgK,GAA4B,EAAI,CAAC;AAC1C;AAAA,QACF;AAEA,cAAMqd,IAAwB,MAAM5kB,GAAA;AAEpC,YAAI4kB,GAAuB;AACzB,gBAAMC,KAAuBD,KAAA,gBAAAA,EAAuB,SAAQ,CAAA,GACtDE,IAAoBD,EAAqB,CAAC,GAC1CE,IAAkBF,EAAqB,CAAC,GACxCG,IAAkBH,EAAqB,CAAC,GACxCI,IAAoBJ,EAAqB,CAAC;AAchD,cAZIC,KAAA,QAAAA,EAAmB,UACrBvnB,EAAS2nB,GAAmBJ,EAAkB,MAAM,CAAC,GAGnDC,KAAA,QAAAA,EAAiB,UACnBxnB,EAAS6P,GAAiB2X,EAAgB,MAAM,CAAC,GAG/CE,KAAA,QAAAA,EAAmB,UACrB1nB,EAASiT,GAAmByU,EAAkB,MAAM,CAAC,GAGnDD,KAAA,QAAAA,EAAiB,QAAQ;AAC3B,kBAAM5e,IAAiB4e,EAAgB,OAAO;AAAA,cAC5C9lB;AAAA,YAAA;AAEF,YAAA3B,EAAS8I,GAAYD,CAAc,CAAC;AAAA,UACtC;AAAA,QACF;AAEA,QAAA7I,EAASO,GAAe,SAAS,CAAC,GAClCP,EAASgK,GAA4B,EAAI,CAAC;AAAA,MAC5C,SAAStD,GAAO;AACd,gBAAQ,MAAM,gCAAgCA,CAAK,GACnDX,GAAU;AAAA,UACR,UAASW,KAAA,gBAAAA,EAAO,YAAW;AAAA,UAC3B,MAAM;AAAA,QAAA,CACP,GACDqgB,EAAc,UAAU;AAAA,MAC1B,UAAA;AACE,QAAAD,EAAkB,EAAK;AAAA,MACzB;AAAA,IACF,GACA;AAAA,EACF,GAAG,CAAC9mB,GAAUkI,CAAc,CAAC;AAE7B,QAAM0f,IACJlB,GAAmBE,CAAa,KAAK7mB;AAEvC,SAAI8mB,KAAkB,CAAC3e,IAEnB,gBAAA5I,EAACF,KAAI,WAAU,oDACb,4BAAC0O,IAAA,EAAiB,OAAM,WAAU,EAAA,CACpC,sBAKD,OAAA,EAAI,WAAU,2CACb,UAAA,gBAAAxO,EAACsoB,KAAW,GACd;AAEJ;"}