@idealyst/mcp-server 1.2.49 → 1.2.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-WJCICXOJ.js → chunk-SRNAGZJL.js} +6251 -8769
- package/dist/chunk-SRNAGZJL.js.map +1 -0
- package/dist/index.cjs +2237 -4575
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +202 -13
- package/dist/index.js.map +1 -1
- package/dist/tools/index.cjs +6233 -8756
- package/dist/tools/index.cjs.map +1 -1
- package/dist/tools/index.d.cts +29 -3
- package/dist/tools/index.d.ts +29 -3
- package/dist/tools/index.js +5 -1
- package/package.json +4 -4
- package/dist/chunk-WJCICXOJ.js.map +0 -1
- package/dist/generated/types.json +0 -2560
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tools/definitions.ts","../src/data/component-metadata.ts","../src/data/cli-commands.ts","../src/data/translate-guides.ts","../src/data/storage-guides.ts","../src/data/packages.ts","../src/data/recipes.ts","../src/data/install-guides.ts","../src/data/icons.json","../src/tools/get-types.ts","../src/tools/handlers.ts"],"sourcesContent":["/**\n * Tool Definitions\n *\n * MCP tool schema definitions for all Idealyst tools.\n * These can be used to register tools with an MCP server or other systems.\n */\n\nimport type { ToolDefinition } from \"./types.js\";\n\n// ============================================================================\n// Component Tool Definitions\n// ============================================================================\n\nexport const listComponentsDefinition: ToolDefinition = {\n name: \"list_components\",\n description: \"List all available Idealyst components with brief descriptions\",\n inputSchema: {\n type: \"object\",\n properties: {},\n },\n};\n\nexport const getComponentDocsDefinition: ToolDefinition = {\n name: \"get_component_docs\",\n description:\n \"Get detailed documentation for a specific Idealyst component including props, usage, and examples\",\n inputSchema: {\n type: \"object\",\n properties: {\n component: {\n type: \"string\",\n description:\n \"The name of the component (e.g., 'Button', 'Card', 'Input')\",\n },\n },\n required: [\"component\"],\n },\n};\n\nexport const getComponentExampleDefinition: ToolDefinition = {\n name: \"get_component_example\",\n description: \"Get a code example for a specific Idealyst component\",\n inputSchema: {\n type: \"object\",\n properties: {\n component: {\n type: \"string\",\n description: \"The name of the component\",\n },\n example_type: {\n type: \"string\",\n description:\n \"Type of example: 'basic', 'variants', 'with-icons', 'interactive'\",\n enum: [\"basic\", \"variants\", \"with-icons\", \"interactive\"],\n },\n },\n required: [\"component\"],\n },\n};\n\nexport const searchComponentsDefinition: ToolDefinition = {\n name: \"search_components\",\n description: \"Search for components by name, category, or feature\",\n inputSchema: {\n type: \"object\",\n properties: {\n query: {\n type: \"string\",\n description: \"Search query\",\n },\n category: {\n type: \"string\",\n description:\n \"Filter by category: 'layout', 'form', 'display', 'navigation', 'overlay', 'data'\",\n enum: [\"layout\", \"form\", \"display\", \"navigation\", \"overlay\", \"data\"],\n },\n },\n },\n};\n\nexport const getComponentTypesDefinition: ToolDefinition = {\n name: \"get_component_types\",\n description:\n \"Get TypeScript type definitions for a specific component directly from the source. Returns the actual TypeScript interface and/or JSON schema.\",\n inputSchema: {\n type: \"object\",\n properties: {\n component: {\n type: \"string\",\n description:\n \"The name of the component (e.g., 'Button', 'Card', 'Input')\",\n },\n format: {\n type: \"string\",\n description:\n \"Output format: 'typescript' for raw TypeScript definitions, 'json' for parsed schema, 'both' for combined output (default: 'both')\",\n enum: [\"typescript\", \"json\", \"both\"],\n },\n },\n required: [\"component\"],\n },\n};\n\nexport const getComponentExamplesTsDefinition: ToolDefinition = {\n name: \"get_component_examples_ts\",\n description:\n \"Get validated TypeScript example code for a component. These examples are type-checked and guaranteed to compile.\",\n inputSchema: {\n type: \"object\",\n properties: {\n component: {\n type: \"string\",\n description: \"The name of the component (e.g., 'Button', 'Card')\",\n },\n },\n required: [\"component\"],\n },\n};\n\n// ============================================================================\n// CLI Tool Definitions\n// ============================================================================\n\nexport const getCliUsageDefinition: ToolDefinition = {\n name: \"get_cli_usage\",\n description: \"Get information about Idealyst CLI commands and usage\",\n inputSchema: {\n type: \"object\",\n properties: {\n command: {\n type: \"string\",\n description: \"Specific CLI command to get info about (optional)\",\n },\n },\n },\n};\n\n// ============================================================================\n// Icon Tool Definitions\n// ============================================================================\n\nexport const searchIconsDefinition: ToolDefinition = {\n name: \"search_icons\",\n description:\n \"Search for Material Design Icons by name or keyword. Returns matching icon names from 7,447 available icons.\",\n inputSchema: {\n type: \"object\",\n properties: {\n query: {\n type: \"string\",\n description:\n \"Search term to find icons (e.g., 'home', 'user', 'arrow')\",\n },\n limit: {\n type: \"number\",\n description: \"Maximum number of results to return (default: 20)\",\n },\n },\n required: [\"query\"],\n },\n};\n\n// ============================================================================\n// Theme Tool Definitions\n// ============================================================================\n\nexport const getThemeTypesDefinition: ToolDefinition = {\n name: \"get_theme_types\",\n description:\n \"Get TypeScript type definitions for theme types (Size, Intent, Color, etc.) directly from @idealyst/theme\",\n inputSchema: {\n type: \"object\",\n properties: {\n format: {\n type: \"string\",\n description:\n \"Output format: 'typescript', 'json', or 'both' (default: 'both')\",\n enum: [\"typescript\", \"json\", \"both\"],\n },\n },\n },\n};\n\n// ============================================================================\n// Navigation Tool Definitions\n// ============================================================================\n\nexport const getNavigationTypesDefinition: ToolDefinition = {\n name: \"get_navigation_types\",\n description:\n \"Get TypeScript type definitions for navigation types directly from @idealyst/navigation\",\n inputSchema: {\n type: \"object\",\n properties: {\n format: {\n type: \"string\",\n description:\n \"Output format: 'typescript', 'json', or 'both' (default: 'both')\",\n enum: [\"typescript\", \"json\", \"both\"],\n },\n },\n },\n};\n\n// ============================================================================\n// Guide Tool Definitions\n// ============================================================================\n\nexport const getTranslateGuideDefinition: ToolDefinition = {\n name: \"get_translate_guide\",\n description:\n \"Get documentation for @idealyst/translate internationalization package. Covers runtime API, Babel plugin, translation files, and examples.\",\n inputSchema: {\n type: \"object\",\n properties: {\n topic: {\n type: \"string\",\n description:\n \"Topic to get docs for: 'overview', 'runtime-api', 'babel-plugin', 'translation-files', 'examples'\",\n enum: [\n \"overview\",\n \"runtime-api\",\n \"babel-plugin\",\n \"translation-files\",\n \"examples\",\n ],\n },\n },\n required: [\"topic\"],\n },\n};\n\nexport const getStorageGuideDefinition: ToolDefinition = {\n name: \"get_storage_guide\",\n description:\n \"Get documentation for @idealyst/storage cross-platform storage package. Covers API reference and usage examples.\",\n inputSchema: {\n type: \"object\",\n properties: {\n topic: {\n type: \"string\",\n description: \"Topic to get docs for: 'overview', 'api', 'examples'\",\n enum: [\"overview\", \"api\", \"examples\"],\n },\n },\n required: [\"topic\"],\n },\n};\n\n// ============================================================================\n// Package Tool Definitions\n// ============================================================================\n\nexport const listPackagesDefinition: ToolDefinition = {\n name: \"list_packages\",\n description:\n \"List all available Idealyst packages with descriptions, categories, and documentation status. Use this to discover what packages are available in the framework.\",\n inputSchema: {\n type: \"object\",\n properties: {\n category: {\n type: \"string\",\n description: \"Filter by category (optional)\",\n enum: [\"core\", \"ui\", \"media\", \"data\", \"auth\", \"utility\", \"tooling\"],\n },\n },\n },\n};\n\nexport const getPackageDocsDefinition: ToolDefinition = {\n name: \"get_package_docs\",\n description:\n \"Get detailed documentation for a specific Idealyst package including installation, features, quick start, and API highlights.\",\n inputSchema: {\n type: \"object\",\n properties: {\n package: {\n type: \"string\",\n description:\n \"Package name (e.g., 'camera', 'oauth-client', 'datagrid')\",\n },\n section: {\n type: \"string\",\n description:\n \"Specific section to retrieve (optional, returns all if not specified)\",\n enum: [\"overview\", \"installation\", \"features\", \"quickstart\", \"api\"],\n },\n },\n required: [\"package\"],\n },\n};\n\nexport const searchPackagesDefinition: ToolDefinition = {\n name: \"search_packages\",\n description:\n \"Search across all Idealyst packages by name, description, or features.\",\n inputSchema: {\n type: \"object\",\n properties: {\n query: {\n type: \"string\",\n description: \"Search query\",\n },\n },\n required: [\"query\"],\n },\n};\n\n// ============================================================================\n// Recipe Tool Definitions\n// ============================================================================\n\nexport const listRecipesDefinition: ToolDefinition = {\n name: \"list_recipes\",\n description:\n \"List all available Idealyst recipes (common UI patterns) with descriptions. Recipes provide ready-to-use code examples for building apps.\",\n inputSchema: {\n type: \"object\",\n properties: {\n category: {\n type: \"string\",\n description: \"Filter by category (optional)\",\n enum: [\n \"forms\",\n \"navigation\",\n \"data\",\n \"layout\",\n \"auth\",\n \"settings\",\n \"media\",\n ],\n },\n difficulty: {\n type: \"string\",\n description: \"Filter by difficulty (optional)\",\n enum: [\"beginner\", \"intermediate\", \"advanced\"],\n },\n },\n },\n};\n\nexport const getRecipeDefinition: ToolDefinition = {\n name: \"get_recipe\",\n description:\n \"Get a complete code recipe for a common UI pattern. Returns ready-to-use code with explanation and tips.\",\n inputSchema: {\n type: \"object\",\n properties: {\n recipe: {\n type: \"string\",\n description:\n \"Recipe ID (e.g., 'login-form', 'settings-screen', 'tab-navigation')\",\n },\n },\n required: [\"recipe\"],\n },\n};\n\nexport const searchRecipesDefinition: ToolDefinition = {\n name: \"search_recipes\",\n description:\n \"Search for recipes by name, description, category, or required packages.\",\n inputSchema: {\n type: \"object\",\n properties: {\n query: {\n type: \"string\",\n description: \"Search query (e.g., 'auth', 'form', 'navigation')\",\n },\n },\n required: [\"query\"],\n },\n};\n\n// ============================================================================\n// Install Guide Tool Definitions\n// ============================================================================\n\nexport const getInstallGuideDefinition: ToolDefinition = {\n name: \"get_install_guide\",\n description:\n \"Get detailed installation instructions for an Idealyst package, including iOS (Info.plist, CocoaPods), Android (AndroidManifest.xml, permissions, Gradle), and web configuration. Essential for packages with native dependencies.\",\n inputSchema: {\n type: \"object\",\n properties: {\n package: {\n type: \"string\",\n description:\n \"Package name (e.g., 'camera', 'audio', 'oauth-client', 'storage')\",\n },\n },\n required: [\"package\"],\n },\n};\n\n// ============================================================================\n// All Tool Definitions Array\n// ============================================================================\n\n/**\n * Array of all tool definitions.\n * Use this to register all tools with an MCP server.\n */\nexport const toolDefinitions: ToolDefinition[] = [\n // Component tools\n listComponentsDefinition,\n getComponentDocsDefinition,\n getComponentExampleDefinition,\n searchComponentsDefinition,\n getComponentTypesDefinition,\n getComponentExamplesTsDefinition,\n // CLI tools\n getCliUsageDefinition,\n // Icon tools\n searchIconsDefinition,\n // Theme tools\n getThemeTypesDefinition,\n // Navigation tools\n getNavigationTypesDefinition,\n // Guide tools\n getTranslateGuideDefinition,\n getStorageGuideDefinition,\n // Package tools\n listPackagesDefinition,\n getPackageDocsDefinition,\n searchPackagesDefinition,\n // Recipe tools\n listRecipesDefinition,\n getRecipeDefinition,\n searchRecipesDefinition,\n // Install guide tools\n getInstallGuideDefinition,\n];\n\n/**\n * Map of tool definitions by name.\n * Use this for quick lookup of a specific tool definition.\n */\nexport const toolDefinitionMap: Record<string, ToolDefinition> =\n Object.fromEntries(toolDefinitions.map((tool) => [tool.name, tool]));\n","/**\n * Component Metadata\n *\n * Minimal metadata for components that cannot be derived from TypeScript types\n * or example files. Types come from @idealyst/tooling, examples come from\n * the examples/components/*.examples.tsx files.\n */\n\nexport interface ComponentMetadata {\n /** Category for filtering/search */\n category: 'form' | 'feedback' | 'layout' | 'display' | 'navigation' | 'overlay' | 'data';\n /** Brief description of the component */\n description: string;\n /** Key features of the component */\n features: string[];\n /** Best practices for using the component */\n bestPractices: string[];\n}\n\nexport const componentMetadata: Record<string, ComponentMetadata> = {\n Accordion: {\n category: 'display',\n description: 'Expandable content sections that show/hide content on user interaction',\n features: [\n 'Single or multiple expanded sections',\n 'Customizable icons',\n 'Disabled state support',\n 'Controlled and uncontrolled modes',\n ],\n bestPractices: [\n 'Use for organizing related content into collapsible sections',\n 'Keep section titles concise and descriptive',\n 'Consider single-expand mode for sequential content',\n ],\n },\n\n ActivityIndicator: {\n category: 'feedback',\n description: 'Loading spinner to indicate ongoing operations',\n features: [\n 'Multiple sizes',\n 'Intent colors',\n 'Cross-platform',\n ],\n bestPractices: [\n 'Use for short loading operations',\n 'For longer operations, consider Progress with determinate value',\n 'Place near the content being loaded',\n ],\n },\n\n Alert: {\n category: 'feedback',\n description: 'Message banner for displaying important information, warnings, errors, and success messages',\n features: [\n 'Five intent types with semantic meaning',\n 'Three visual variants (filled, outlined, soft)',\n 'Default icons for each intent',\n 'Custom icon support',\n 'Dismissible with close button',\n 'Action buttons support',\n ],\n bestPractices: [\n \"Use 'danger' intent for critical errors requiring immediate attention\",\n \"Use 'warning' intent for important but non-critical information\",\n \"Use 'success' intent for positive confirmations\",\n \"Use 'info' intent for general informational messages\",\n 'Keep alert messages concise and actionable',\n ],\n },\n\n Avatar: {\n category: 'display',\n description: 'User or entity representation with image, initials, or icon fallback',\n features: [\n 'Image, initials, or icon display',\n 'Multiple sizes (xs, sm, md, lg, xl)',\n 'Circle or square shapes',\n 'Automatic fallback to initials',\n 'Custom background colors',\n ],\n bestPractices: [\n 'Provide fallback initials for missing images',\n 'Use consistent sizes within lists',\n 'Consider accessibility with alt text',\n ],\n },\n\n Badge: {\n category: 'display',\n description: 'Small status indicator or count display',\n features: [\n 'Multiple sizes',\n 'Intent and custom colors',\n 'Filled, outlined, and soft variants',\n 'Icon support',\n ],\n bestPractices: [\n 'Use for status indicators or counts',\n 'Keep badge content minimal (numbers or short text)',\n 'Use semantic intent colors for meaning',\n ],\n },\n\n Breadcrumb: {\n category: 'navigation',\n description: 'Navigation trail showing the current page location within a hierarchy',\n features: [\n 'Customizable separators',\n 'Link and text items',\n 'Responsive truncation',\n ],\n bestPractices: [\n 'Use for deep navigation hierarchies',\n 'Keep breadcrumb labels short',\n 'Make all items except the last clickable',\n ],\n },\n\n Button: {\n category: 'form',\n description: 'Interactive button component with multiple variants, sizes, and icon support',\n features: [\n 'Three type variants: contained, outlined, text',\n 'Five intent colors: primary, neutral, success, danger, warning',\n 'Five sizes: xs, sm, md, lg, xl',\n 'Loading state with spinner',\n 'Gradient overlay effects',\n 'Left and right icon support',\n 'Disabled states',\n 'Cross-platform',\n ],\n bestPractices: [\n \"Use 'primary' intent for main actions\",\n \"Use 'contained' type for prominent actions\",\n 'Keep button labels concise and action-oriented',\n 'Use loading state for async operations',\n ],\n },\n\n Card: {\n category: 'layout',\n description: 'Container component for grouping related content with optional elevation and borders',\n features: [\n 'Multiple variants (default, outlined, elevated, filled)',\n 'Clickable mode with press feedback',\n 'Customizable border radius',\n 'Intent colors',\n ],\n bestPractices: [\n 'Use for grouping related content',\n 'Keep card content focused on a single topic',\n \"Use 'elevated' variant sparingly for emphasis\",\n ],\n },\n\n Checkbox: {\n category: 'form',\n description: 'Toggle control for binary choices with optional label',\n features: [\n 'Checked, unchecked, and indeterminate states',\n 'Multiple sizes',\n 'Intent colors',\n 'Label support',\n 'Error state with helper text',\n 'Custom children support',\n ],\n bestPractices: [\n 'Use for independent binary choices',\n 'Use RadioButton for mutually exclusive options',\n 'Provide clear, descriptive labels',\n ],\n },\n\n Chip: {\n category: 'display',\n description: 'Compact element for tags, filters, or selections',\n features: [\n 'Filled, outlined, and soft variants',\n 'Intent colors',\n 'Multiple sizes',\n 'Deletable with close icon',\n 'Selectable mode',\n 'Icon support',\n ],\n bestPractices: [\n 'Use for tags, filters, or compact selections',\n 'Keep chip labels concise',\n 'Use consistent styling within groups',\n ],\n },\n\n Dialog: {\n category: 'overlay',\n description: 'Modal overlay for important content requiring user attention or interaction',\n features: [\n 'Multiple sizes (sm, md, lg, fullscreen)',\n 'Standard, alert, and confirmation types',\n 'Title and close button',\n 'Backdrop click to close',\n 'Animation types (slide, fade)',\n ],\n bestPractices: [\n 'Use sparingly for important interactions',\n 'Provide clear actions for dismissal',\n 'Keep dialog content focused',\n 'Use confirmation dialogs for destructive actions',\n ],\n },\n\n Divider: {\n category: 'layout',\n description: 'Visual separator for content sections',\n features: [\n 'Horizontal and vertical orientations',\n 'Solid, dashed, and dotted types',\n 'Multiple sizes (thickness)',\n 'Intent colors',\n 'Text/content dividers',\n 'Configurable spacing',\n ],\n bestPractices: [\n 'Use to separate distinct content sections',\n 'Avoid overuse - whitespace is often sufficient',\n 'Use text dividers for labeled sections',\n ],\n },\n\n Icon: {\n category: 'display',\n description: 'Material Design icon component with extensive icon library',\n features: [\n '7,447+ Material Design icons',\n 'Multiple sizes',\n 'Intent and custom colors',\n 'Accessibility support',\n ],\n bestPractices: [\n 'Use meaningful icons that match their purpose',\n 'Pair icons with text for clarity when needed',\n 'Maintain consistent icon sizing',\n ],\n },\n\n Image: {\n category: 'display',\n description: 'Cross-platform image component with loading and error states',\n features: [\n 'Multiple resize modes',\n 'Loading placeholder',\n 'Error fallback',\n 'Lazy loading',\n 'Border radius support',\n ],\n bestPractices: [\n 'Provide appropriate alt text',\n 'Use correct resize mode for layout',\n 'Consider placeholder for slow-loading images',\n ],\n },\n\n Link: {\n category: 'navigation',\n description: 'Navigation link component for routing and external URLs',\n features: [\n 'Internal and external link support',\n 'Intent colors',\n 'Underline variants',\n 'Disabled state',\n ],\n bestPractices: [\n 'Use for navigation, not actions (use Button for actions)',\n 'Make link text descriptive',\n 'Indicate external links when appropriate',\n ],\n },\n\n List: {\n category: 'data',\n description: 'Optimized list component for displaying scrollable data',\n features: [\n 'Virtualized rendering for performance',\n 'Pull-to-refresh',\n 'Infinite scroll',\n 'Section headers',\n 'Empty state support',\n ],\n bestPractices: [\n 'Use for displaying collections of similar items',\n 'Implement pull-to-refresh for refreshable content',\n 'Provide empty state feedback',\n ],\n },\n\n Menu: {\n category: 'overlay',\n description: 'Dropdown menu for displaying a list of actions or options',\n features: [\n 'Trigger-based display',\n 'Multiple placements',\n 'Icon and description support',\n 'Dividers between groups',\n 'Keyboard navigation',\n ],\n bestPractices: [\n 'Group related actions together',\n 'Use icons for quick recognition',\n 'Keep menu items to a reasonable number',\n ],\n },\n\n Popover: {\n category: 'overlay',\n description: 'Floating content container anchored to a trigger element',\n features: [\n 'Multiple placements',\n 'Customizable content',\n 'Controlled and uncontrolled modes',\n 'Click outside to close',\n ],\n bestPractices: [\n 'Use for supplementary content or controls',\n 'Keep popover content focused',\n 'Consider mobile touch interactions',\n ],\n },\n\n Pressable: {\n category: 'form',\n description: 'Low-level touchable component for custom interactive elements',\n features: [\n 'Press feedback',\n 'Long press support',\n 'Disabled state',\n 'Custom hit slop',\n ],\n bestPractices: [\n 'Use Button for standard button interactions',\n 'Use Pressable for custom interactive areas',\n 'Provide visual feedback on press',\n ],\n },\n\n Progress: {\n category: 'feedback',\n description: 'Visual indicator for task completion or loading progress',\n features: [\n 'Linear and circular variants',\n 'Determinate and indeterminate modes',\n 'Multiple sizes',\n 'Intent colors',\n 'Label support',\n 'Rounded option',\n ],\n bestPractices: [\n 'Use determinate progress when percentage is known',\n 'Use indeterminate for unknown duration',\n 'Show percentage for long operations',\n ],\n },\n\n RadioButton: {\n category: 'form',\n description: 'Selection control for mutually exclusive options',\n features: [\n 'Single selection in a group',\n 'Multiple sizes',\n 'Intent colors',\n 'Label support',\n 'Disabled state',\n ],\n bestPractices: [\n 'Use for mutually exclusive options',\n 'Group related options together',\n 'Provide a default selection when appropriate',\n ],\n },\n\n Screen: {\n category: 'layout',\n description: 'Full-screen container component for app screens',\n features: [\n 'Safe area handling',\n 'Keyboard avoiding behavior',\n 'Status bar configuration',\n 'Background color support',\n ],\n bestPractices: [\n 'Use as the root container for screens',\n 'Enable keyboard avoiding for form screens',\n 'Configure safe areas appropriately',\n ],\n },\n\n Select: {\n category: 'form',\n description: 'Dropdown selection component for choosing from a list of options',\n features: [\n 'Outlined and filled variants',\n 'Multiple sizes',\n 'Searchable (web)',\n 'Label and helper text',\n 'Error state',\n 'Disabled options',\n ],\n bestPractices: [\n 'Use for selecting from many options',\n 'Use RadioButton for 2-5 visible options',\n 'Provide a clear placeholder',\n ],\n },\n\n Skeleton: {\n category: 'feedback',\n description: 'Placeholder loading state for content',\n features: [\n 'Multiple shapes (text, circle, rectangle)',\n 'Customizable dimensions',\n 'Animation support',\n ],\n bestPractices: [\n 'Match skeleton shape to actual content',\n 'Use for predictable content layouts',\n 'Avoid for dynamic or unknown layouts',\n ],\n },\n\n Slider: {\n category: 'form',\n description: 'Range input control for selecting numeric values',\n features: [\n 'Min/max/step configuration',\n 'Value display',\n 'Min/max labels',\n 'Custom marks',\n 'Intent colors',\n 'Multiple sizes',\n ],\n bestPractices: [\n 'Use for selecting from a continuous range',\n 'Show current value for precision',\n 'Use marks for discrete steps',\n ],\n },\n\n SVGImage: {\n category: 'display',\n description: 'SVG image component for vector graphics',\n features: [\n 'URL and inline SVG support',\n 'Color tinting',\n 'Responsive sizing',\n ],\n bestPractices: [\n 'Use for scalable graphics',\n 'Provide fallback for missing SVGs',\n 'Consider Icon for simple icons',\n ],\n },\n\n Switch: {\n category: 'form',\n description: 'Toggle control for binary on/off states',\n features: [\n 'On/off states',\n 'Multiple sizes',\n 'Intent colors',\n 'Label support',\n 'Custom on/off icons',\n ],\n bestPractices: [\n 'Use for immediate effect toggles',\n 'Use Checkbox when submission is required',\n 'Provide clear labels indicating the on state',\n ],\n },\n\n TabBar: {\n category: 'navigation',\n description: 'Bottom navigation bar for main app sections',\n features: [\n 'Icon and label tabs',\n 'Badge indicators',\n 'Custom styling',\n ],\n bestPractices: [\n 'Limit to 3-5 main destinations',\n 'Use clear, recognizable icons',\n 'Show badges for notifications',\n ],\n },\n\n Table: {\n category: 'data',\n description: 'Structured data display in rows and columns',\n features: [\n 'Sortable columns',\n 'Custom cell rendering',\n 'Header and footer',\n 'Striped rows',\n ],\n bestPractices: [\n 'Use for structured, comparable data',\n 'Align numbers to the right',\n 'Provide sorting for large datasets',\n ],\n },\n\n Tabs: {\n category: 'navigation',\n description: 'Horizontal tab navigation for switching between content panels',\n features: [\n 'Controlled and uncontrolled modes',\n 'Icon and label tabs',\n 'Scrollable for many tabs',\n 'Badge support',\n ],\n bestPractices: [\n 'Use for content at the same hierarchy level',\n 'Keep tab labels short',\n 'Limit visible tabs to avoid scrolling',\n ],\n },\n\n Text: {\n category: 'display',\n description: 'Typography component for displaying text with consistent styling',\n features: [\n 'Multiple typography variants',\n 'Font weight options',\n 'Color variants',\n 'Text alignment',\n ],\n bestPractices: [\n 'Use typography variants consistently',\n 'Maintain hierarchy with size and weight',\n 'Use semantic colors for meaning',\n ],\n },\n\n TextArea: {\n category: 'form',\n description: 'Multi-line text input for longer content',\n features: [\n 'Outlined and filled variants',\n 'Multiple sizes',\n 'Character count',\n 'Auto-resize',\n 'Error state',\n ],\n bestPractices: [\n 'Use for multi-line input',\n 'Show character limits when applicable',\n 'Provide appropriate placeholder text',\n ],\n },\n\n TextInput: {\n category: 'form',\n description: 'Single-line text input field with various configurations',\n features: [\n 'Outlined and filled variants',\n 'Multiple sizes',\n 'Left and right icons',\n 'Password visibility toggle',\n 'Input modes (text, email, number, etc.)',\n 'Error state with helper text',\n ],\n bestPractices: [\n 'Use appropriate input mode for content type',\n 'Provide clear labels and placeholders',\n 'Show validation errors inline',\n ],\n },\n\n Tooltip: {\n category: 'overlay',\n description: 'Contextual information popup on hover or focus',\n features: [\n 'Multiple placements',\n 'Customizable delay',\n 'Arrow indicator',\n 'Custom content support',\n ],\n bestPractices: [\n 'Use for supplementary information',\n 'Keep tooltip content brief',\n 'Ensure touch-friendly alternatives for mobile',\n ],\n },\n\n Video: {\n category: 'display',\n description: 'Video player component with playback controls',\n features: [\n 'Multiple source support',\n 'Playback controls',\n 'Poster image',\n 'Loop and autoplay',\n ],\n bestPractices: [\n 'Provide poster images for preview',\n 'Consider autoplay carefully (user experience)',\n 'Support multiple formats for compatibility',\n ],\n },\n\n View: {\n category: 'layout',\n description: 'Fundamental layout container with spacing and flex support',\n features: [\n 'Spacing presets',\n 'Flex layout shortcuts',\n 'Cross-platform',\n ],\n bestPractices: [\n 'Use spacing prop for consistent gaps',\n 'Prefer View over native div/View for consistency',\n 'Use for layout structure, not styling',\n ],\n },\n};\n\n/**\n * Find the canonical component name (case-insensitive lookup)\n */\nexport function findComponentName(componentName: string): string | undefined {\n // Direct match first (fast path)\n if (componentMetadata[componentName]) {\n return componentName;\n }\n\n // Case-insensitive lookup\n const lowerName = componentName.toLowerCase();\n return Object.keys(componentMetadata).find(\n (name) => name.toLowerCase() === lowerName\n );\n}\n\n/**\n * Get metadata for a specific component (case-insensitive)\n */\nexport function getComponentMetadata(componentName: string): ComponentMetadata | undefined {\n const canonicalName = findComponentName(componentName);\n return canonicalName ? componentMetadata[canonicalName] : undefined;\n}\n\n/**\n * Get all component names\n */\nexport function getComponentNames(): string[] {\n return Object.keys(componentMetadata);\n}\n\n/**\n * Search components by name, description, or features\n */\nexport function searchComponents(query: string, category?: string): string[] {\n const lowerQuery = query.toLowerCase();\n\n return Object.entries(componentMetadata)\n .filter(([name, meta]) => {\n if (category && meta.category !== category) {\n return false;\n }\n\n return (\n name.toLowerCase().includes(lowerQuery) ||\n meta.description.toLowerCase().includes(lowerQuery) ||\n meta.features.some(f => f.toLowerCase().includes(lowerQuery))\n );\n })\n .map(([name]) => name);\n}\n\n/**\n * Get components by category\n */\nexport function getComponentsByCategory(category: string): string[] {\n return Object.entries(componentMetadata)\n .filter(([_, meta]) => meta.category === category)\n .map(([name]) => name);\n}\n","export const cliCommands: Record<string, any> = {\n init: {\n description: \"Initialize a new Idealyst workspace with monorepo structure\",\n usage: \"idealyst init <workspace-name> [options]\",\n options: [\n {\n flag: \"workspace-name\",\n description: \"Name for the new workspace (required)\",\n },\n {\n flag: \"--git\",\n description: \"Initialize git repository (default: true)\",\n },\n {\n flag: \"--install\",\n description: \"Install dependencies after creation (default: true)\",\n },\n ],\n examples: [\n \"idealyst init my-app\",\n \"idealyst init my-company-workspace --no-git\",\n ],\n },\n\n create: {\n description: \"Create a new package within the Idealyst workspace\",\n usage: \"idealyst create <name> --type <type> [options]\",\n options: [\n {\n flag: \"name\",\n description: \"Name for the new package (required)\",\n },\n {\n flag: \"--type\",\n description: \"Package type: web | native | api | database | shared (required)\",\n },\n {\n flag: \"--app-name\",\n description: \"Display name for native app (required for native type)\",\n },\n {\n flag: \"--with-trpc\",\n description: \"Include tRPC setup (for web/native)\",\n },\n {\n flag: \"--no-trpc\",\n description: \"Exclude tRPC setup (for web/native)\",\n },\n ],\n examples: [\n \"idealyst create web --type web --with-trpc\",\n \"idealyst create mobile --type native --app-name \\\"My App\\\" --with-trpc\",\n \"idealyst create api --type api\",\n \"idealyst create database --type database\",\n \"idealyst create shared --type shared\",\n ],\n },\n\n dev: {\n description: \"Start development server for a package\",\n usage: \"cd packages/<name> && yarn dev\",\n options: [\n {\n flag: \"--port\",\n description: \"Port number for dev server (web only)\",\n },\n ],\n examples: [\n \"cd packages/web && yarn dev\",\n \"cd packages/native && yarn dev\",\n ],\n },\n\n build: {\n description: \"Build a package for production\",\n usage: \"cd packages/<name> && yarn build\",\n options: [],\n examples: [\n \"cd packages/web && yarn build\",\n \"cd packages/api && yarn build\",\n ],\n },\n\n test: {\n description: \"Run tests for packages\",\n usage: \"yarn test [options]\",\n options: [\n {\n flag: \"--watch\",\n description: \"Run tests in watch mode\",\n },\n {\n flag: \"--coverage\",\n description: \"Generate coverage report\",\n },\n ],\n examples: [\n \"yarn test\",\n \"yarn test:watch\",\n \"yarn test:coverage\",\n ],\n },\n};\n","export const translateGuides: Record<string, string> = {\n \"idealyst://translate/overview\": `# @idealyst/translate Overview\n\nCross-platform internationalization for the Idealyst Framework. Wraps \\`react-i18next\\` with a unified API and includes a Babel plugin for static translation key analysis.\n\n## Core Features\n\n- **Unified API** - Single API for React and React Native\n- **Babel Plugin** - Static extraction of translation keys at build time\n- **Missing Translation Detection** - Automatically detect keys missing translations\n- **Unused Translation Detection** - Find translations not used in code\n- **JSON Report** - Generate detailed reports for CI/CD integration\n- **Namespace Support** - Organize translations with nested namespaces\n- **Pluralization** - Full i18next pluralization support\n- **Interpolation** - Variable interpolation in translations\n- **Rich Text** - Component interpolation with the Trans component\n\n## Installation\n\n\\`\\`\\`bash\nyarn add @idealyst/translate react-i18next i18next\n\\`\\`\\`\n\n## Quick Start\n\n### 1. Create Translation Files\n\n\\`\\`\\`\nlocales/\n├── en/\n│ └── common.json\n└── es/\n └── common.json\n\\`\\`\\`\n\n**locales/en/common.json**\n\\`\\`\\`json\n{\n \"welcome\": {\n \"title\": \"Welcome to Our App\",\n \"greeting\": \"Hello, {{name}}!\"\n },\n \"buttons\": {\n \"submit\": \"Submit\",\n \"cancel\": \"Cancel\"\n }\n}\n\\`\\`\\`\n\n### 2. Set Up the Provider\n\n\\`\\`\\`tsx\nimport { TranslateProvider } from '@idealyst/translate';\nimport en from './locales/en/common.json';\nimport es from './locales/es/common.json';\n\nconst config = {\n defaultLanguage: 'en',\n languages: ['en', 'es'],\n resources: {\n en: { common: en },\n es: { common: es },\n },\n defaultNamespace: 'common',\n};\n\nexport function App() {\n return (\n <TranslateProvider config={config}>\n <MyApp />\n </TranslateProvider>\n );\n}\n\\`\\`\\`\n\n### 3. Use Translations\n\n\\`\\`\\`tsx\nimport { useTranslation } from '@idealyst/translate';\n\nfunction MyComponent() {\n const { t } = useTranslation('common');\n\n return (\n <div>\n <h1>{t('welcome.title')}</h1>\n <p>{t('welcome.greeting', { name: 'John' })}</p>\n <button>{t('buttons.submit')}</button>\n </div>\n );\n}\n\\`\\`\\`\n\n## Key Concepts\n\n### Key Formats\nThe package supports two key formats:\n\n\\`\\`\\`tsx\n// Namespace:key format (i18next standard)\nt('auth:login.title')\n\n// Namespace.key format (first segment is namespace)\nt('auth.login.title')\n\\`\\`\\`\n\n### Namespace Organization\nOrganize translations by domain:\n- \\`common.json\\` - Shared UI strings\n- \\`auth.json\\` - Authentication strings\n- \\`errors.json\\` - Error messages\n- \\`forms.json\\` - Form labels and validation\n`,\n\n \"idealyst://translate/runtime-api\": `# Runtime API Reference\n\nComplete reference for the @idealyst/translate runtime API.\n\n## TranslateProvider\n\nWrap your app with the provider to enable translations:\n\n\\`\\`\\`tsx\nimport { TranslateProvider } from '@idealyst/translate';\n\n<TranslateProvider\n config={{\n defaultLanguage: 'en',\n languages: ['en', 'es', 'fr'],\n resources: {\n en: { common: enCommon, auth: enAuth },\n es: { common: esCommon, auth: esAuth },\n },\n defaultNamespace: 'common',\n fallbackLanguage: 'en',\n debug: false,\n }}\n onInitialized={(i18n) => console.log('i18n ready')}\n onLanguageChanged={(lang) => console.log('Language:', lang)}\n>\n <App />\n</TranslateProvider>\n\\`\\`\\`\n\n### TranslateConfig Options\n\n| Option | Type | Required | Description |\n|--------|------|----------|-------------|\n| \\`defaultLanguage\\` | string | Yes | Default language code |\n| \\`languages\\` | string[] | Yes | Supported language codes |\n| \\`resources\\` | object | No | Pre-loaded translation resources |\n| \\`defaultNamespace\\` | string | No | Default namespace (default: 'translation') |\n| \\`fallbackLanguage\\` | string | No | Fallback when key missing |\n| \\`debug\\` | boolean | No | Enable debug logging |\n\n## useTranslation Hook\n\nThe main hook for accessing translations:\n\n\\`\\`\\`tsx\nimport { useTranslation } from '@idealyst/translate';\n\nfunction Component() {\n const { t, language, languages, ready, i18n } = useTranslation('common');\n\n // Simple translation\n const title = t('welcome.title');\n\n // With interpolation\n const greeting = t('welcome.greeting', { name: 'World' });\n\n // With default value\n const fallback = t('missing.key', { defaultValue: 'Fallback text' });\n\n // With pluralization\n const items = t('items', { count: 5 });\n\n // With context\n const gendered = t('liked', { context: 'male' });\n\n return <div>{title}</div>;\n}\n\\`\\`\\`\n\n### Return Values\n\n| Property | Type | Description |\n|----------|------|-------------|\n| \\`t\\` | function | Translation function |\n| \\`language\\` | string | Current language code |\n| \\`languages\\` | string[] | All available languages |\n| \\`ready\\` | boolean | Whether translations are loaded |\n| \\`i18n\\` | i18n | i18next instance for advanced usage |\n\n### Translation Options\n\n\\`\\`\\`tsx\nt('key', {\n // Default value if key not found\n defaultValue: 'Fallback',\n\n // Interpolation values\n name: 'John',\n count: 5,\n\n // Pluralization count\n count: 3,\n\n // Context for contextual translations\n context: 'male',\n});\n\\`\\`\\`\n\n## useLanguage Hook\n\nFor language management:\n\n\\`\\`\\`tsx\nimport { useLanguage } from '@idealyst/translate';\n\nfunction LanguageControls() {\n const {\n language, // Current: 'en'\n languages, // Available: ['en', 'es', 'fr']\n setLanguage, // Change language\n isSupported, // Check availability\n getDisplayName, // Get 'English', 'Español'\n } = useLanguage();\n\n return (\n <select value={language} onChange={(e) => setLanguage(e.target.value)}>\n {languages.map((lang) => (\n <option key={lang} value={lang}>\n {getDisplayName(lang)}\n </option>\n ))}\n </select>\n );\n}\n\\`\\`\\`\n\n## Trans Component\n\nFor rich text with embedded components:\n\n\\`\\`\\`tsx\nimport { Trans } from '@idealyst/translate';\n\nfunction RichText() {\n return (\n <Trans\n i18nKey=\"common.richText\"\n components={{\n terms: <a href=\"/terms\" />,\n privacy: <a href=\"/privacy\" />,\n bold: <strong />,\n }}\n values={{ name: 'User' }}\n />\n );\n}\n\n// Translation:\n// \"richText\": \"Read our <terms>Terms</terms> and <privacy>Privacy Policy</privacy>\"\n//\n// Renders:\n// Read our <a href=\"/terms\">Terms</a> and <a href=\"/privacy\">Privacy Policy</a>\n\\`\\`\\`\n\n### Trans Props\n\n| Prop | Type | Required | Description |\n|------|------|----------|-------------|\n| \\`i18nKey\\` | string | Yes | Translation key |\n| \\`ns\\` | string | No | Namespace |\n| \\`components\\` | object | No | Component interpolations |\n| \\`values\\` | object | No | Value interpolations |\n| \\`count\\` | number | No | Pluralization count |\n`,\n\n \"idealyst://translate/babel-plugin\": `# Babel Plugin Reference\n\nThe Babel plugin extracts translation keys at build time and generates reports of missing/unused translations.\n\n## Installation\n\nThe plugin is included with @idealyst/translate. Just configure it in your Babel config.\n\n## Configuration\n\n### babel.config.js\n\n\\`\\`\\`javascript\nmodule.exports = {\n presets: ['@babel/preset-react', '@babel/preset-typescript'],\n plugins: [\n ['@idealyst/translate/plugin', {\n // Required: paths to translation JSON files\n translationFiles: ['./locales/**/*.json'],\n\n // Optional: output path for the report\n reportPath: '.idealyst/translations-report.json',\n\n // Optional: default namespace\n defaultNamespace: 'common',\n\n // Optional: emit console warnings\n emitWarnings: true,\n\n // Optional: fail build on missing translations\n failOnMissing: false,\n\n // Optional: verbose logging\n verbose: false,\n }],\n ],\n};\n\\`\\`\\`\n\n### Vite Configuration\n\n\\`\\`\\`typescript\n// vite.config.ts\nimport { defineConfig } from 'vite';\nimport react from '@vitejs/plugin-react';\n\nexport default defineConfig({\n plugins: [\n react({\n babel: {\n plugins: [\n ['@idealyst/translate/plugin', {\n translationFiles: ['./locales/**/*.json'],\n reportPath: '.idealyst/translations-report.json',\n defaultNamespace: 'common',\n }],\n ],\n },\n }),\n ],\n});\n\\`\\`\\`\n\n### React Native Configuration\n\n\\`\\`\\`javascript\n// babel.config.js\nmodule.exports = {\n presets: ['module:@react-native/babel-preset'],\n plugins: [\n ['@idealyst/translate/plugin', {\n translationFiles: ['./locales/**/*.json'],\n reportPath: '.idealyst/translations-report.json',\n defaultNamespace: 'common',\n emitWarnings: true,\n }],\n ],\n};\n\\`\\`\\`\n\n## Plugin Options\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| \\`translationFiles\\` | string[] | Required | Glob patterns for translation files |\n| \\`reportPath\\` | string | '.idealyst/translations-report.json' | Output path for report |\n| \\`languages\\` | string[] | Auto-detected | Languages to check |\n| \\`defaultNamespace\\` | string | 'translation' | Default namespace |\n| \\`failOnMissing\\` | boolean | false | Fail build if missing |\n| \\`emitWarnings\\` | boolean | true | Console warnings |\n| \\`verbose\\` | boolean | false | Verbose logging |\n\n## What Gets Extracted\n\nThe plugin statically analyzes your code for:\n\n\\`\\`\\`tsx\n// t() function calls\nt('common.key')\nt('namespace:key')\nt('key', { defaultValue: 'Default' })\n\n// i18n.t() method calls\ni18n.t('common.key')\n\n// Trans component\n<Trans i18nKey=\"common.richText\" />\n<Trans i18nKey={\"common.richText\"} />\n\n// Dynamic keys (tracked but marked as dynamic)\nconst key = \\`common.\\${type}\\`;\nt(key); // Marked as isDynamic: true\n\\`\\`\\`\n\n## Report Structure\n\nThe plugin generates a JSON report:\n\n\\`\\`\\`json\n{\n \"timestamp\": \"2026-01-08T12:00:00.000Z\",\n \"totalKeys\": 45,\n \"dynamicKeys\": [\n {\n \"key\": \"<dynamic>\",\n \"file\": \"src/DynamicComponent.tsx\",\n \"line\": 15,\n \"isDynamic\": true\n }\n ],\n \"extractedKeys\": [\n {\n \"key\": \"common.buttons.submit\",\n \"namespace\": \"common\",\n \"localKey\": \"buttons.submit\",\n \"file\": \"src/Form.tsx\",\n \"line\": 42,\n \"column\": 12,\n \"defaultValue\": \"Submit\",\n \"isDynamic\": false\n }\n ],\n \"languages\": [\"en\", \"es\", \"fr\"],\n \"missing\": {\n \"en\": [],\n \"es\": [\n {\n \"key\": \"common.buttons.submit\",\n \"namespace\": \"common\",\n \"usedIn\": [\n { \"file\": \"src/Form.tsx\", \"line\": 42, \"column\": 12 }\n ],\n \"defaultValue\": \"Submit\"\n }\n ]\n },\n \"unused\": {\n \"en\": [\"common.legacy.oldFeature\"]\n },\n \"summary\": {\n \"totalMissing\": 1,\n \"totalUnused\": 1,\n \"coveragePercent\": {\n \"en\": 100,\n \"es\": 98,\n \"fr\": 100\n }\n }\n}\n\\`\\`\\`\n\n## CI/CD Integration\n\n### GitHub Actions\n\n\\`\\`\\`yaml\nname: Translation Check\n\non: [push, pull_request]\n\njobs:\n check-translations:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v3\n - uses: actions/setup-node@v3\n with:\n node-version: '20'\n - run: yarn install\n - run: yarn build\n - name: Check missing translations\n run: |\n MISSING=$(jq '.summary.totalMissing' .idealyst/translations-report.json)\n if [ \"$MISSING\" -gt 0 ]; then\n echo \"Missing translations: $MISSING\"\n jq '.missing' .idealyst/translations-report.json\n exit 1\n fi\n\\`\\`\\`\n\n### Shell Script\n\n\\`\\`\\`bash\n#!/bin/bash\nyarn build\n\nMISSING=$(jq '.summary.totalMissing' .idealyst/translations-report.json)\n\nif [ \"$MISSING\" -gt 0 ]; then\n echo \"ERROR: $MISSING missing translation(s)\"\n jq -r '.missing | to_entries[] | select(.value | length > 0) | \"\\\\(.key): \\\\(.value | length) missing\"' \\\\\n .idealyst/translations-report.json\n exit 1\nfi\n\necho \"All translations present!\"\n\\`\\`\\`\n`,\n\n \"idealyst://translate/translation-files\": `# Translation File Format\n\nGuide to organizing and formatting translation files for @idealyst/translate.\n\n## Directory Structure\n\nOrganize translations by language and namespace:\n\n\\`\\`\\`\nlocales/\n├── en/\n│ ├── common.json # Common UI strings\n│ ├── auth.json # Authentication strings\n│ ├── errors.json # Error messages\n│ └── forms.json # Form labels\n├── es/\n│ ├── common.json\n│ ├── auth.json\n│ ├── errors.json\n│ └── forms.json\n└── fr/\n ├── common.json\n ├── auth.json\n ├── errors.json\n └── forms.json\n\\`\\`\\`\n\n## JSON Format\n\n### Basic Structure\n\n\\`\\`\\`json\n{\n \"simple\": \"Simple text\",\n\n \"nested\": {\n \"keys\": {\n \"work\": \"Like this\"\n }\n }\n}\n\\`\\`\\`\n\n### Interpolation\n\nUse \\`{{variable}}\\` for dynamic values:\n\n\\`\\`\\`json\n{\n \"greeting\": \"Hello, {{name}}!\",\n \"welcome\": \"Welcome back, {{user}}. You have {{count}} messages.\"\n}\n\\`\\`\\`\n\nUsage:\n\\`\\`\\`tsx\nt('greeting', { name: 'John' }) // \"Hello, John!\"\nt('welcome', { user: 'Alice', count: 5 }) // \"Welcome back, Alice. You have 5 messages.\"\n\\`\\`\\`\n\n### Pluralization\n\nAdd \\`_plural\\` suffix for plural forms:\n\n\\`\\`\\`json\n{\n \"item\": \"{{count}} item\",\n \"item_plural\": \"{{count}} items\",\n\n \"message\": \"You have {{count}} new message\",\n \"message_plural\": \"You have {{count}} new messages\"\n}\n\\`\\`\\`\n\nUsage:\n\\`\\`\\`tsx\nt('item', { count: 1 }) // \"1 item\"\nt('item', { count: 5 }) // \"5 items\"\n\\`\\`\\`\n\n### Context\n\nAdd \\`_context\\` suffix for contextual variations:\n\n\\`\\`\\`json\n{\n \"friend\": \"A friend\",\n \"friend_male\": \"A boyfriend\",\n \"friend_female\": \"A girlfriend\"\n}\n\\`\\`\\`\n\nUsage:\n\\`\\`\\`tsx\nt('friend') // \"A friend\"\nt('friend', { context: 'male' }) // \"A boyfriend\"\nt('friend', { context: 'female' }) // \"A girlfriend\"\n\\`\\`\\`\n\n### Rich Text (Trans Component)\n\nUse HTML-like tags for component interpolation:\n\n\\`\\`\\`json\n{\n \"terms\": \"By signing up, you agree to our <terms>Terms of Service</terms> and <privacy>Privacy Policy</privacy>.\",\n \"welcome\": \"Welcome, <bold>{{name}}</bold>! Click <link>here</link> to continue.\"\n}\n\\`\\`\\`\n\nUsage:\n\\`\\`\\`tsx\n<Trans\n i18nKey=\"common.terms\"\n components={{\n terms: <a href=\"/terms\" />,\n privacy: <a href=\"/privacy\" />,\n }}\n/>\n\\`\\`\\`\n\n## Namespace Organization\n\n### common.json - Shared UI\n\\`\\`\\`json\n{\n \"buttons\": {\n \"submit\": \"Submit\",\n \"cancel\": \"Cancel\",\n \"save\": \"Save\",\n \"delete\": \"Delete\",\n \"edit\": \"Edit\"\n },\n \"labels\": {\n \"loading\": \"Loading...\",\n \"danger\": \"An error occurred\",\n \"success\": \"Success!\"\n }\n}\n\\`\\`\\`\n\n### auth.json - Authentication\n\\`\\`\\`json\n{\n \"login\": {\n \"title\": \"Sign In\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign In\",\n \"forgotPassword\": \"Forgot password?\"\n },\n \"register\": {\n \"title\": \"Create Account\",\n \"submit\": \"Sign Up\"\n },\n \"errors\": {\n \"invalidCredentials\": \"Invalid email or password\",\n \"emailTaken\": \"Email is already registered\"\n }\n}\n\\`\\`\\`\n\n### errors.json - Error Messages\n\\`\\`\\`json\n{\n \"network\": {\n \"offline\": \"You are offline. Please check your connection.\",\n \"timeout\": \"Request timed out. Please try again.\"\n },\n \"validation\": {\n \"required\": \"This field is required\",\n \"email\": \"Please enter a valid email\",\n \"minLength\": \"Must be at least {{min}} characters\"\n },\n \"http\": {\n \"400\": \"Bad request\",\n \"401\": \"Unauthorized\",\n \"403\": \"Forbidden\",\n \"404\": \"Not found\",\n \"500\": \"Server error\"\n }\n}\n\\`\\`\\`\n\n## Best Practices\n\n### 1. Use Descriptive Keys\n\\`\\`\\`json\n// Good\n{\n \"userProfile\": {\n \"editButton\": \"Edit Profile\",\n \"saveSuccess\": \"Profile saved successfully\"\n }\n}\n\n// Avoid\n{\n \"btn1\": \"Edit Profile\",\n \"msg1\": \"Profile saved successfully\"\n}\n\\`\\`\\`\n\n### 2. Group Related Translations\n\\`\\`\\`json\n{\n \"checkout\": {\n \"title\": \"Checkout\",\n \"steps\": {\n \"shipping\": \"Shipping\",\n \"payment\": \"Payment\",\n \"review\": \"Review\"\n },\n \"buttons\": {\n \"next\": \"Continue\",\n \"back\": \"Go Back\",\n \"placeOrder\": \"Place Order\"\n }\n }\n}\n\\`\\`\\`\n\n### 3. Keep Keys Consistent Across Languages\nAll language files should have the same key structure:\n\n\\`\\`\\`json\n// en/common.json\n{ \"greeting\": \"Hello\" }\n\n// es/common.json\n{ \"greeting\": \"Hola\" }\n\n// fr/common.json\n{ \"greeting\": \"Bonjour\" }\n\\`\\`\\`\n\n### 4. Add Comments with Default Values\nThe Babel plugin extracts \\`defaultValue\\` for documentation:\n\n\\`\\`\\`tsx\nt('newFeature.title', { defaultValue: 'New Feature' })\n\\`\\`\\`\n\nThis appears in the report and helps translators understand context.\n`,\n\n \"idealyst://translate/examples\": `# Translation Examples\n\nComplete code examples for common @idealyst/translate patterns.\n\n## Basic App Setup\n\n\\`\\`\\`tsx\n// App.tsx\nimport { TranslateProvider } from '@idealyst/translate';\nimport en from './locales/en/common.json';\nimport es from './locales/es/common.json';\n\nconst config = {\n defaultLanguage: 'en',\n languages: ['en', 'es'],\n resources: {\n en: { common: en },\n es: { common: es },\n },\n defaultNamespace: 'common',\n};\n\nexport function App() {\n return (\n <TranslateProvider config={config}>\n <Navigation />\n </TranslateProvider>\n );\n}\n\\`\\`\\`\n\n## Component with Translations\n\n\\`\\`\\`tsx\n// components/WelcomeScreen.tsx\nimport { View, Text, Button } from '@idealyst/components';\nimport { useTranslation } from '@idealyst/translate';\n\nexport function WelcomeScreen() {\n const { t } = useTranslation('common');\n\n return (\n <View>\n <Text variant=\"h1\">{t('welcome.title')}</Text>\n <Text>{t('welcome.subtitle')}</Text>\n <Button onPress={() => {}}>\n {t('buttons.getStarted')}\n </Button>\n </View>\n );\n}\n\\`\\`\\`\n\n## Language Switcher Component\n\n\\`\\`\\`tsx\n// components/LanguageSwitcher.tsx\nimport { Select } from '@idealyst/components';\nimport { useLanguage } from '@idealyst/translate';\n\nexport function LanguageSwitcher() {\n const { language, languages, setLanguage, getDisplayName } = useLanguage();\n\n const options = languages.map((lang) => ({\n value: lang,\n label: getDisplayName(lang),\n }));\n\n return (\n <Select\n value={language}\n options={options}\n onChange={(value) => setLanguage(value)}\n label=\"Language\"\n />\n );\n}\n\\`\\`\\`\n\n## Form with Validation Messages\n\n\\`\\`\\`tsx\n// components/LoginForm.tsx\nimport { View, Input, Button, Text } from '@idealyst/components';\nimport { useTranslation } from '@idealyst/translate';\nimport { useState } from 'react';\n\nexport function LoginForm() {\n const { t } = useTranslation('auth');\n const [error, setError] = useState<string | null>(null);\n\n const handleSubmit = async () => {\n try {\n // ... login logic\n } catch (e) {\n setError(t('errors.invalidCredentials'));\n }\n };\n\n return (\n <View>\n <Text variant=\"h2\">{t('login.title')}</Text>\n\n <Input\n label={t('login.email')}\n placeholder={t('login.emailPlaceholder')}\n keyboardType=\"email-address\"\n />\n\n <Input\n label={t('login.password')}\n placeholder={t('login.passwordPlaceholder')}\n secureTextEntry\n />\n\n {error && <Text intent=\"danger\">{error}</Text>}\n\n <Button onPress={handleSubmit}>\n {t('login.submit')}\n </Button>\n </View>\n );\n}\n\\`\\`\\`\n\n## Pluralization Example\n\n\\`\\`\\`tsx\n// components/NotificationBadge.tsx\nimport { Badge } from '@idealyst/components';\nimport { useTranslation } from '@idealyst/translate';\n\ninterface Props {\n count: number;\n}\n\nexport function NotificationBadge({ count }: Props) {\n const { t } = useTranslation('common');\n\n if (count === 0) return null;\n\n return (\n <Badge intent=\"primary\">\n {t('notifications.count', { count })}\n </Badge>\n );\n}\n\n// Translation file:\n// {\n// \"notifications\": {\n// \"count\": \"{{count}} notification\",\n// \"count_plural\": \"{{count}} notifications\"\n// }\n// }\n\\`\\`\\`\n\n## Rich Text with Trans Component\n\n\\`\\`\\`tsx\n// components/TermsAgreement.tsx\nimport { View, Text, Checkbox } from '@idealyst/components';\nimport { Trans, useTranslation } from '@idealyst/translate';\nimport { Link } from '@idealyst/navigation';\nimport { useState } from 'react';\n\nexport function TermsAgreement() {\n const { t } = useTranslation('auth');\n const [agreed, setAgreed] = useState(false);\n\n return (\n <View>\n <Checkbox\n checked={agreed}\n onChange={setAgreed}\n label={\n <Trans\n i18nKey=\"auth.termsAgreement\"\n components={{\n terms: <Link to=\"/terms\" />,\n privacy: <Link to=\"/privacy\" />,\n }}\n />\n }\n />\n </View>\n );\n}\n\n// Translation file:\n// {\n// \"termsAgreement\": \"I agree to the <terms>Terms of Service</terms> and <privacy>Privacy Policy</privacy>\"\n// }\n\\`\\`\\`\n\n## Persisting Language Preference\n\n\\`\\`\\`tsx\n// hooks/usePersistedLanguage.ts\nimport { useLanguage } from '@idealyst/translate';\nimport { useEffect } from 'react';\nimport AsyncStorage from '@react-native-async-storage/async-storage';\n\nconst LANGUAGE_KEY = '@app/language';\n\nexport function usePersistedLanguage() {\n const { language, setLanguage } = useLanguage();\n\n // Load saved language on mount\n useEffect(() => {\n AsyncStorage.getItem(LANGUAGE_KEY).then((saved) => {\n if (saved) setLanguage(saved);\n });\n }, []);\n\n // Save language when changed\n useEffect(() => {\n AsyncStorage.setItem(LANGUAGE_KEY, language);\n }, [language]);\n\n return { language, setLanguage };\n}\n\\`\\`\\`\n\n## Multiple Namespaces\n\n\\`\\`\\`tsx\n// components/UserProfile.tsx\nimport { useTranslation } from '@idealyst/translate';\n\nexport function UserProfile() {\n // Load multiple namespaces\n const { t } = useTranslation(['common', 'user']);\n\n return (\n <View>\n {/* Use namespace prefix */}\n <Text variant=\"h1\">{t('user:profile.title')}</Text>\n <Button>{t('common:buttons.edit')}</Button>\n </View>\n );\n}\n\\`\\`\\`\n\n## Date and Number Formatting\n\n\\`\\`\\`tsx\n// components/OrderSummary.tsx\nimport { View, Text } from '@idealyst/components';\nimport { useTranslation, useLanguage } from '@idealyst/translate';\n\ninterface Props {\n total: number;\n orderDate: Date;\n}\n\nexport function OrderSummary({ total, orderDate }: Props) {\n const { t } = useTranslation('orders');\n const { language } = useLanguage();\n\n // Format based on current language\n const formattedTotal = new Intl.NumberFormat(language, {\n style: 'currency',\n currency: 'USD',\n }).format(total);\n\n const formattedDate = new Intl.DateTimeFormat(language, {\n dateStyle: 'long',\n }).format(orderDate);\n\n return (\n <View>\n <Text>{t('summary.total', { amount: formattedTotal })}</Text>\n <Text>{t('summary.date', { date: formattedDate })}</Text>\n </View>\n );\n}\n\n// Translation file:\n// {\n// \"summary\": {\n// \"total\": \"Total: {{amount}}\",\n// \"date\": \"Order placed on {{date}}\"\n// }\n// }\n\\`\\`\\`\n`,\n};\n","export const storageGuides: Record<string, string> = {\n \"idealyst://storage/overview\": `# @idealyst/storage Overview\n\nCross-platform storage solution for React and React Native applications. Provides a consistent async API for persistent data storage.\n\n## Features\n\n- **Cross-Platform** - Works seamlessly on React Native and Web\n- **Simple API** - Async/await based with consistent interface\n- **React Native** - Uses MMKV for high-performance storage\n- **Web** - Uses localStorage with proper error handling\n- **TypeScript** - Full type safety and IntelliSense support\n\n## Installation\n\n\\`\\`\\`bash\nyarn add @idealyst/storage\n\n# React Native also needs:\nyarn add react-native-mmkv\ncd ios && pod install\n\\`\\`\\`\n\n## Quick Start\n\n\\`\\`\\`tsx\nimport { storage } from '@idealyst/storage';\n\n// Store string data\nawait storage.setItem('token', 'abc123');\n\n// Store objects (use JSON.stringify)\nawait storage.setItem('user', JSON.stringify({ name: 'John', id: 123 }));\n\n// Retrieve string data\nconst token = await storage.getItem('token');\n\n// Retrieve and parse objects\nconst userData = await storage.getItem('user');\nconst user = userData ? JSON.parse(userData) : null;\n\n// Remove data\nawait storage.removeItem('token');\n\n// Clear all data\nawait storage.clear();\n\n// Get all keys\nconst keys = await storage.getAllKeys();\n\\`\\`\\`\n\n## Import Options\n\n\\`\\`\\`tsx\n// Named import (recommended)\nimport { storage } from '@idealyst/storage';\n\n// Default import\nimport storage from '@idealyst/storage';\n\\`\\`\\`\n\n## Platform Details\n\n- **React Native**: Uses \\`react-native-mmkv\\` for high-performance storage\n- **Web**: Uses browser \\`localStorage\\`\n`,\n\n \"idealyst://storage/api\": `# Storage API Reference\n\nComplete API reference for @idealyst/storage.\n\n## setItem\n\nStore a string value with the given key.\n\n\\`\\`\\`tsx\nawait storage.setItem(key: string, value: string): Promise<void>\n\n// Examples\nawait storage.setItem('token', 'abc123');\nawait storage.setItem('userId', '42');\n\n// For objects, use JSON.stringify\nawait storage.setItem('user', JSON.stringify({ name: 'John', age: 30 }));\nawait storage.setItem('tags', JSON.stringify(['react', 'native']));\nawait storage.setItem('settings', JSON.stringify({ theme: 'dark', notifications: true }));\n\\`\\`\\`\n\n## getItem\n\nRetrieve a string value by key. Returns \\`null\\` if the key doesn't exist.\n\n\\`\\`\\`tsx\nawait storage.getItem(key: string): Promise<string | null>\n\n// Examples\nconst token = await storage.getItem('token');\nconst userId = await storage.getItem('userId');\n\n// For objects, parse the JSON\nconst userData = await storage.getItem('user');\nconst user = userData ? JSON.parse(userData) as User : null;\n\nconst tagsData = await storage.getItem('tags');\nconst tags = tagsData ? JSON.parse(tagsData) as string[] : [];\n\nif (user) {\n console.log(user.name);\n}\n\\`\\`\\`\n\n## removeItem\n\nRemove a specific item from storage.\n\n\\`\\`\\`tsx\nawait storage.removeItem(key: string): Promise<void>\n\n// Examples\nawait storage.removeItem('user');\nawait storage.removeItem('temporaryData');\n\\`\\`\\`\n\n## clear\n\nRemove all items from storage.\n\n\\`\\`\\`tsx\nawait storage.clear(): Promise<void>\n\\`\\`\\`\n\n## getAllKeys\n\nReturns all keys currently in storage.\n\n\\`\\`\\`tsx\nawait storage.getAllKeys(): Promise<string[]>\n\n// Example\nconst keys = await storage.getAllKeys();\nconsole.log('Stored keys:', keys); // ['user', 'settings', 'token']\n\\`\\`\\`\n\n## Helper Pattern for Typed Storage\n\nCreate a typed wrapper for cleaner code:\n\n\\`\\`\\`tsx\nimport { storage } from '@idealyst/storage';\n\n// Helper functions for typed storage\nasync function setObject<T>(key: string, value: T): Promise<void> {\n await storage.setItem(key, JSON.stringify(value));\n}\n\nasync function getObject<T>(key: string): Promise<T | null> {\n const data = await storage.getItem(key);\n return data ? JSON.parse(data) as T : null;\n}\n\n// Usage\ninterface User {\n id: number;\n name: string;\n}\n\nawait setObject<User>('user', { id: 1, name: 'John' });\nconst user = await getObject<User>('user');\n\\`\\`\\`\n`,\n\n \"idealyst://storage/examples\": `# Storage Examples\n\nComplete code examples for common @idealyst/storage patterns.\n\n## User Session Management\n\n\\`\\`\\`tsx\nimport { storage } from '@idealyst/storage';\n\ninterface User {\n id: number;\n name: string;\n email: string;\n}\n\nclass AuthService {\n static async saveUserSession(user: User, token: string) {\n await Promise.all([\n storage.setItem('currentUser', JSON.stringify(user)),\n storage.setItem('authToken', token),\n storage.setItem('loginTime', new Date().toISOString()),\n ]);\n }\n\n static async getUserSession() {\n const userData = await storage.getItem('currentUser');\n const token = await storage.getItem('authToken');\n\n const user = userData ? JSON.parse(userData) as User : null;\n return user && token ? { user, token } : null;\n }\n\n static async clearSession() {\n await Promise.all([\n storage.removeItem('currentUser'),\n storage.removeItem('authToken'),\n storage.removeItem('loginTime'),\n ]);\n }\n}\n\\`\\`\\`\n\n## Settings Management\n\n\\`\\`\\`tsx\nimport { storage } from '@idealyst/storage';\n\ninterface AppSettings {\n theme: 'light' | 'dark';\n notifications: boolean;\n language: string;\n fontSize: number;\n}\n\nconst defaultSettings: AppSettings = {\n theme: 'light',\n notifications: true,\n language: 'en',\n fontSize: 16,\n};\n\nclass SettingsService {\n static async getSettings(): Promise<AppSettings> {\n const data = await storage.getItem('appSettings');\n const stored = data ? JSON.parse(data) as AppSettings : null;\n return stored ? { ...defaultSettings, ...stored } : defaultSettings;\n }\n\n static async updateSettings(newSettings: Partial<AppSettings>) {\n const current = await this.getSettings();\n const updated = { ...current, ...newSettings };\n await storage.setItem('appSettings', JSON.stringify(updated));\n return updated;\n }\n\n static async resetSettings() {\n await storage.setItem('appSettings', JSON.stringify(defaultSettings));\n return defaultSettings;\n }\n}\n\\`\\`\\`\n\n## Cache with Expiration\n\n\\`\\`\\`tsx\nimport { storage } from '@idealyst/storage';\n\ninterface CacheItem<T> {\n data: T;\n timestamp: number;\n expiresIn: number; // milliseconds\n}\n\nclass CacheService {\n static async setCache<T>(key: string, data: T, expiresIn: number = 3600000) {\n const cacheItem: CacheItem<T> = {\n data,\n timestamp: Date.now(),\n expiresIn,\n };\n\n await storage.setItem(\\`cache_\\${key}\\`, JSON.stringify(cacheItem));\n }\n\n static async getCache<T>(key: string): Promise<T | null> {\n const data = await storage.getItem(\\`cache_\\${key}\\`);\n if (!data) return null;\n\n const cacheItem = JSON.parse(data) as CacheItem<T>;\n const isExpired = Date.now() - cacheItem.timestamp > cacheItem.expiresIn;\n\n if (isExpired) {\n await storage.removeItem(\\`cache_\\${key}\\`);\n return null;\n }\n\n return cacheItem.data;\n }\n\n static async clearExpiredCache() {\n const keys = await storage.getAllKeys();\n const cacheKeys = keys.filter(key => key.startsWith('cache_'));\n\n for (const key of cacheKeys) {\n const data = await storage.getItem(key);\n if (data) {\n const cacheItem = JSON.parse(data) as CacheItem<unknown>;\n const isExpired = Date.now() - cacheItem.timestamp > cacheItem.expiresIn;\n if (isExpired) {\n await storage.removeItem(key);\n }\n }\n }\n }\n}\n\\`\\`\\`\n\n## Persisting Language Preference\n\n\\`\\`\\`tsx\nimport { storage } from '@idealyst/storage';\nimport { useLanguage } from '@idealyst/translate';\nimport { useEffect } from 'react';\n\nconst LANGUAGE_KEY = 'app_language';\n\nexport function usePersistedLanguage() {\n const { language, setLanguage } = useLanguage();\n\n // Load saved language on mount\n useEffect(() => {\n storage.getItem(LANGUAGE_KEY).then((saved) => {\n if (saved) setLanguage(saved);\n });\n }, []);\n\n // Save language when changed\n useEffect(() => {\n storage.setItem(LANGUAGE_KEY, language);\n }, [language]);\n\n return { language, setLanguage };\n}\n\\`\\`\\`\n\n## React Hook for Storage\n\n\\`\\`\\`tsx\nimport { storage } from '@idealyst/storage';\nimport { useState, useEffect, useCallback } from 'react';\n\nexport function useStorage<T>(key: string, initialValue: T) {\n const [value, setValue] = useState<T>(initialValue);\n const [loading, setLoading] = useState(true);\n\n // Load value on mount\n useEffect(() => {\n storage.getItem(key).then((stored) => {\n if (stored !== null) {\n setValue(JSON.parse(stored) as T);\n }\n setLoading(false);\n });\n }, [key]);\n\n // Update storage when value changes\n const updateValue = useCallback(async (newValue: T) => {\n setValue(newValue);\n await storage.setItem(key, JSON.stringify(newValue));\n }, [key]);\n\n // Remove from storage\n const removeValue = useCallback(async () => {\n setValue(initialValue);\n await storage.removeItem(key);\n }, [key, initialValue]);\n\n return { value, setValue: updateValue, removeValue, loading };\n}\n\n// Usage\nfunction MyComponent() {\n const { value: theme, setValue: setTheme, loading } = useStorage('theme', 'light');\n\n if (loading) return <ActivityIndicator />;\n\n return (\n <Button onPress={() => setTheme(theme === 'light' ? 'dark' : 'light')}>\n Toggle Theme\n </Button>\n );\n}\n\\`\\`\\`\n\n## Error Handling\n\n\\`\\`\\`tsx\nimport { storage } from '@idealyst/storage';\n\nasync function safeStorageOperation() {\n try {\n await storage.setItem('data', JSON.stringify(largeObject));\n } catch (error) {\n console.error('Storage failed:', error);\n // Handle storage quota exceeded or other errors\n }\n\n // Or with null checking\n const result = await storage.getItem('data');\n if (result === null) {\n // Key doesn't exist or retrieval failed\n console.log('No data found');\n }\n}\n\\`\\`\\`\n\n## Best Practices\n\n1. **Use JSON.stringify/parse** - Storage only accepts strings, so serialize objects\n2. **Handle Nulls** - Always check for null returns from \\`getItem\\`\n3. **Batch Operations** - Use \\`Promise.all\\` for multiple storage operations\n4. **Error Handling** - Wrap storage operations in try-catch blocks for critical data\n5. **Key Naming** - Use consistent, descriptive key names\n6. **Data Size** - Keep stored objects reasonably sized\n7. **Cleanup** - Periodically clean up unused data\n8. **Type Safety** - Create typed wrapper functions for better TypeScript support\n`,\n};\n","/**\n * Idealyst Framework Package Registry\n * Central metadata for all @idealyst packages\n */\n\nexport interface PackageInfo {\n name: string;\n npmName: string;\n description: string;\n category: \"core\" | \"ui\" | \"media\" | \"data\" | \"auth\" | \"utility\" | \"tooling\";\n platforms: (\"web\" | \"native\" | \"node\")[];\n documentationStatus: \"full\" | \"partial\" | \"minimal\";\n installation: string;\n peerDependencies?: string[];\n features: string[];\n quickStart: string;\n apiHighlights?: string[];\n relatedPackages?: string[];\n}\n\nexport const packages: Record<string, PackageInfo> = {\n components: {\n name: \"Components\",\n npmName: \"@idealyst/components\",\n description:\n \"Cross-platform React UI components for web and React Native. Includes buttons, cards, inputs, dialogs, and 30+ more components with consistent styling.\",\n category: \"core\",\n platforms: [\"web\", \"native\"],\n documentationStatus: \"full\",\n installation: \"yarn add @idealyst/components @idealyst/theme\",\n peerDependencies: [\"@idealyst/theme\", \"react-native-unistyles\"],\n features: [\n \"36+ production-ready components\",\n \"Consistent API across web and native\",\n \"Theme-aware with automatic dark mode\",\n \"Accessible by default\",\n \"TypeScript-first with full type definitions\",\n \"Tree-shakeable exports\",\n ],\n quickStart: `import { Button, Card, Text } from '@idealyst/components';\n\n<Card>\n <Text variant=\"headline\">Hello World</Text>\n <Button onPress={() => console.log('Pressed!')}>\n Click Me\n </Button>\n</Card>`,\n apiHighlights: [\n \"Button, IconButton, FAB\",\n \"Card, View, Screen\",\n \"Input, Select, Checkbox, Switch\",\n \"Dialog, Popover, Menu\",\n \"Text, Link, Badge, Chip\",\n ],\n relatedPackages: [\"theme\", \"navigation\"],\n },\n\n theme: {\n name: \"Theme\",\n npmName: \"@idealyst/theme\",\n description:\n \"Cross-platform theming system built on react-native-unistyles. Provides colors, typography, spacing, and responsive breakpoints with a fluent builder API.\",\n category: \"core\",\n platforms: [\"web\", \"native\"],\n documentationStatus: \"full\",\n installation: \"yarn add @idealyst/theme react-native-unistyles\",\n peerDependencies: [\"react-native-unistyles\"],\n features: [\n \"Light and dark theme variants\",\n \"Semantic color tokens (intent-based)\",\n \"Fluent builder API for theme creation\",\n \"Individual color modification (add/set surface, text, border, pallet)\",\n \"Intent management (addIntent, setIntent)\",\n \"Responsive breakpoints\",\n \"Typography scale\",\n \"Spacing and sizing utilities\",\n \"Platform-specific adaptations\",\n ],\n quickStart: `import { UnistylesProvider } from '@idealyst/theme';\n\n<UnistylesProvider>\n <App />\n</UnistylesProvider>`,\n apiHighlights: [\n \"createTheme() / fromTheme(base) - Theme builder\",\n \"addIntent() / setIntent() - Intent management\",\n \"addSurfaceColor() / setSurfaceColor() - Surface colors\",\n \"addTextColor() / setTextColor() - Text colors\",\n \"addBorderColor() / setBorderColor() - Border colors\",\n \"addPalletColor() / setPalletColor() - Pallet colors\",\n \"Size: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\",\n \"Intent: 'primary' | 'secondary' | 'success' | 'warning' | 'danger'\",\n ],\n relatedPackages: [\"components\"],\n },\n\n navigation: {\n name: \"Navigation\",\n npmName: \"@idealyst/navigation\",\n description:\n \"Unified navigation system for web and React Native. Stack, tab, drawer, and modal navigators with type-safe routing.\",\n category: \"core\",\n platforms: [\"web\", \"native\"],\n documentationStatus: \"full\",\n installation: \"yarn add @idealyst/navigation\",\n peerDependencies: [\"@react-navigation/native (native only)\"],\n features: [\n \"Type-safe route definitions\",\n \"Stack, Tab, Drawer, Modal navigators\",\n \"Deep linking support\",\n \"Custom layouts for web (headers, sidebars)\",\n \"useNavigator hook for navigation actions\",\n \"Cross-platform URL handling\",\n ],\n quickStart: `import { Router, useNavigator } from '@idealyst/navigation';\n\nconst routes = {\n home: { path: '/', screen: HomeScreen },\n profile: { path: '/profile/:id', screen: ProfileScreen },\n};\n\n<Router routes={routes} />`,\n apiHighlights: [\n \"Router component\",\n \"useNavigator() hook\",\n \"Route configuration\",\n \"Navigator types (stack, tabs, drawer)\",\n ],\n relatedPackages: [\"components\", \"theme\"],\n },\n\n cli: {\n name: \"CLI\",\n npmName: \"@idealyst/cli\",\n description:\n \"Command-line tool for generating Idealyst projects. Creates monorepo workspaces with web, native, API, and database packages.\",\n category: \"tooling\",\n platforms: [\"node\"],\n documentationStatus: \"full\",\n installation: \"npx @idealyst/cli init my-project\",\n features: [\n \"Monorepo workspace generation\",\n \"React Native app scaffolding\",\n \"Vite-based web app generation\",\n \"tRPC API server template\",\n \"Prisma database layer\",\n \"Shared library template\",\n ],\n quickStart: `# Create a new workspace\nnpx @idealyst/cli init my-app\n\n# Add a native app\ncd my-app\nnpx @idealyst/cli create mobile --type native --app-name \"My App\"\n\n# Add a web app\nnpx @idealyst/cli create web --type web --with-trpc`,\n apiHighlights: [\n \"idealyst init <name>\",\n \"idealyst create <name> --type native|web|api|database|shared\",\n ],\n relatedPackages: [\"components\", \"theme\", \"navigation\"],\n },\n\n storage: {\n name: \"Storage\",\n npmName: \"@idealyst/storage\",\n description:\n \"Cross-platform key-value storage with async API. Uses localStorage on web and AsyncStorage on React Native.\",\n category: \"data\",\n platforms: [\"web\", \"native\"],\n documentationStatus: \"full\",\n installation: \"yarn add @idealyst/storage\",\n peerDependencies: [\"@react-native-async-storage/async-storage (native)\"],\n features: [\n \"Unified API across platforms\",\n \"Async/await interface\",\n \"JSON serialization built-in\",\n \"TypeScript generics for type safety\",\n \"Prefix namespacing\",\n ],\n quickStart: `import { storage } from '@idealyst/storage';\n\n// Store a value\nawait storage.set('user', { name: 'Alice', id: 1 });\n\n// Retrieve a value\nconst user = await storage.get<User>('user');\n\n// Remove a value\nawait storage.remove('user');`,\n apiHighlights: [\n \"storage.get<T>(key)\",\n \"storage.set(key, value)\",\n \"storage.remove(key)\",\n \"storage.clear()\",\n ],\n relatedPackages: [\"oauth-client\", \"config\"],\n },\n\n translate: {\n name: \"Translate\",\n npmName: \"@idealyst/translate\",\n description:\n \"Internationalization (i18n) package with runtime API and Babel plugin for static key extraction.\",\n category: \"utility\",\n platforms: [\"web\", \"native\"],\n documentationStatus: \"full\",\n installation: \"yarn add @idealyst/translate\",\n features: [\n \"TranslateProvider for app-wide i18n\",\n \"useTranslation hook\",\n \"Interpolation support\",\n \"Pluralization\",\n \"Babel plugin for key extraction\",\n \"Missing translation detection\",\n ],\n quickStart: `import { TranslateProvider, useTranslation } from '@idealyst/translate';\n\nfunction App() {\n return (\n <TranslateProvider translations={translations} defaultLanguage=\"en\">\n <MyComponent />\n </TranslateProvider>\n );\n}\n\nfunction MyComponent() {\n const { t } = useTranslation();\n return <Text>{t('greeting', { name: 'World' })}</Text>;\n}`,\n apiHighlights: [\n \"TranslateProvider\",\n \"useTranslation()\",\n \"useLanguage()\",\n \"Trans component\",\n ],\n relatedPackages: [\"components\"],\n },\n\n camera: {\n name: \"Camera\",\n npmName: \"@idealyst/camera\",\n description:\n \"Cross-platform camera component for photo and video capture. Uses react-native-vision-camera on native and MediaDevices API on web.\",\n category: \"media\",\n platforms: [\"web\", \"native\"],\n documentationStatus: \"minimal\",\n installation: \"yarn add @idealyst/camera react-native-vision-camera\",\n peerDependencies: [\"react-native-vision-camera (native)\"],\n features: [\n \"Photo capture\",\n \"Video recording\",\n \"Camera switching (front/back)\",\n \"Flash control\",\n \"Zoom support\",\n \"Permission handling\",\n ],\n quickStart: `import { Camera, useCameraPermission } from '@idealyst/camera';\n\nfunction CameraScreen() {\n const { hasPermission, requestPermission } = useCameraPermission();\n\n if (!hasPermission) {\n return <Button onPress={requestPermission}>Grant Permission</Button>;\n }\n\n return (\n <Camera\n onCapture={(photo) => console.log('Photo taken:', photo)}\n />\n );\n}`,\n apiHighlights: [\n \"Camera component\",\n \"useCameraPermission()\",\n \"useCamera()\",\n \"Photo/Video capture callbacks\",\n ],\n relatedPackages: [\"components\", \"storage\"],\n },\n\n audio: {\n name: \"Audio\",\n npmName: \"@idealyst/audio\",\n description:\n \"Unified cross-platform audio for React and React Native. Provides recording with real-time PCM streaming, file playback, and session management for simultaneous recording and playback.\",\n category: \"media\",\n platforms: [\"web\", \"native\"],\n documentationStatus: \"full\",\n installation: \"yarn add @idealyst/audio react-native-audio-api\",\n peerDependencies: [\"react-native-audio-api (native)\"],\n features: [\n \"Recording with real-time PCM streaming\",\n \"File playback (mp3, wav, etc.)\",\n \"PCM streaming playback for TTS\",\n \"Audio session management (iOS/Android)\",\n \"Simultaneous recording and playback\",\n \"Audio level monitoring\",\n \"Configurable sample rates and bit depths\",\n \"Audio profiles (speech, music, phone)\",\n ],\n quickStart: `import { useRecorder, usePlayer, AUDIO_PROFILES } from '@idealyst/audio';\n\nfunction AudioApp() {\n const recorder = useRecorder({ config: AUDIO_PROFILES.speech });\n const player = usePlayer();\n\n // Record audio\n const handleRecord = async () => {\n if (recorder.isRecording) {\n await recorder.stop();\n } else {\n await recorder.start();\n }\n };\n\n // Play file\n const handlePlay = async () => {\n await player.loadFile('/audio/music.mp3');\n await player.play();\n };\n\n // Stream PCM (e.g., from TTS API)\n const handleStream = async () => {\n await player.loadPCMStream(AUDIO_PROFILES.speech);\n await player.play();\n player.feedPCMData(pcmData); // Feed PCM chunks\n };\n\n return (\n <View>\n <Button onPress={handleRecord}>\n {recorder.isRecording ? 'Stop' : 'Record'}\n </Button>\n <Button onPress={handlePlay}>Play File</Button>\n </View>\n );\n}`,\n apiHighlights: [\n \"useRecorder() - Recording with PCM streaming\",\n \"usePlayer() - File and PCM playback\",\n \"useAudio() - Session management\",\n \"AUDIO_PROFILES - Pre-configured audio settings\",\n \"SESSION_PRESETS - Audio session configurations\",\n ],\n relatedPackages: [\"camera\", \"components\"],\n },\n\n datagrid: {\n name: \"DataGrid\",\n npmName: \"@idealyst/datagrid\",\n description:\n \"High-performance virtualized data grid for large datasets. Supports sorting, filtering, and custom cell rendering.\",\n category: \"data\",\n platforms: [\"web\", \"native\"],\n documentationStatus: \"minimal\",\n installation: \"yarn add @idealyst/datagrid @idealyst/components @idealyst/theme\",\n peerDependencies: [\n \"@idealyst/components\",\n \"@idealyst/theme\",\n \"react-window (web)\",\n ],\n features: [\n \"Virtualized rendering for large datasets\",\n \"Column sorting\",\n \"Row selection\",\n \"Custom cell renderers\",\n \"Fixed headers\",\n \"Responsive column sizing\",\n ],\n quickStart: `import { DataGrid } from '@idealyst/datagrid';\n\nconst columns = [\n { key: 'name', header: 'Name', width: 200 },\n { key: 'email', header: 'Email', width: 250 },\n { key: 'status', header: 'Status', width: 100 },\n];\n\n<DataGrid\n data={users}\n columns={columns}\n onRowClick={(row) => console.log('Selected:', row)}\n/>`,\n apiHighlights: [\n \"DataGrid component\",\n \"Column configuration\",\n \"Row selection callbacks\",\n \"Custom cell renderers\",\n ],\n relatedPackages: [\"components\", \"theme\"],\n },\n\n datepicker: {\n name: \"DatePicker\",\n npmName: \"@idealyst/datepicker\",\n description:\n \"Cross-platform date and time picker components. Includes calendar, time picker, and date range selection.\",\n category: \"ui\",\n platforms: [\"web\", \"native\"],\n documentationStatus: \"minimal\",\n installation: \"yarn add @idealyst/datepicker @idealyst/theme\",\n peerDependencies: [\"@idealyst/theme\"],\n features: [\n \"Date picker with calendar\",\n \"Time picker\",\n \"Date range selection\",\n \"Min/max date constraints\",\n \"Locale support\",\n \"Customizable styling\",\n ],\n quickStart: `import { DatePicker, TimePicker } from '@idealyst/datepicker';\n\n<DatePicker\n value={selectedDate}\n onChange={setSelectedDate}\n minDate={new Date()}\n/>\n\n<TimePicker\n value={selectedTime}\n onChange={setSelectedTime}\n is24Hour={true}\n/>`,\n apiHighlights: [\n \"DatePicker component\",\n \"TimePicker component\",\n \"DateRangePicker component\",\n \"Calendar component\",\n ],\n relatedPackages: [\"components\", \"theme\"],\n },\n\n \"oauth-client\": {\n name: \"OAuth Client\",\n npmName: \"@idealyst/oauth-client\",\n description:\n \"Universal OAuth2 client for web and React Native. Supports authorization code flow with PKCE.\",\n category: \"auth\",\n platforms: [\"web\", \"native\"],\n documentationStatus: \"minimal\",\n installation: \"yarn add @idealyst/oauth-client @idealyst/storage\",\n peerDependencies: [\"@idealyst/storage\"],\n features: [\n \"Authorization code flow with PKCE\",\n \"Token refresh handling\",\n \"Secure token storage\",\n \"Multiple provider support\",\n \"Silent token refresh\",\n \"Logout handling\",\n ],\n quickStart: `import { OAuthClient } from '@idealyst/oauth-client';\n\nconst oauth = new OAuthClient({\n clientId: 'your-client-id',\n authorizationEndpoint: 'https://auth.example.com/authorize',\n tokenEndpoint: 'https://auth.example.com/token',\n redirectUri: 'myapp://callback',\n});\n\n// Start login flow\nawait oauth.login();\n\n// Get access token\nconst token = await oauth.getAccessToken();\n\n// Logout\nawait oauth.logout();`,\n apiHighlights: [\n \"OAuthClient class\",\n \"login() / logout()\",\n \"getAccessToken()\",\n \"Token refresh handling\",\n ],\n relatedPackages: [\"storage\", \"navigation\"],\n },\n\n config: {\n name: \"Config\",\n npmName: \"@idealyst/config\",\n description:\n \"Cross-platform configuration and environment variable support. Type-safe access to env vars on web and native.\",\n category: \"utility\",\n platforms: [\"web\", \"native\", \"node\"],\n documentationStatus: \"minimal\",\n installation: \"yarn add @idealyst/config\",\n peerDependencies: [\"react-native-config (native)\"],\n features: [\n \"Type-safe environment variables\",\n \"Cross-platform API\",\n \"Build-time configuration\",\n \"Vite plugin for web\",\n \"React Native Config integration\",\n \"Default value support\",\n ],\n quickStart: `// config.ts\nimport { defineConfig } from '@idealyst/config';\n\nexport const config = defineConfig({\n API_URL: { required: true },\n DEBUG: { default: 'false' },\n APP_NAME: { default: 'My App' },\n});\n\n// Usage\nimport { config } from './config';\nconsole.log(config.API_URL);`,\n apiHighlights: [\n \"defineConfig()\",\n \"Type-safe config object\",\n \"Vite plugin\",\n \"CLI for generation\",\n ],\n relatedPackages: [\"storage\"],\n },\n\n tooling: {\n name: \"Tooling\",\n npmName: \"@idealyst/tooling\",\n description:\n \"Code analysis and validation utilities for Idealyst Framework. Includes Vite plugins and static analyzers.\",\n category: \"tooling\",\n platforms: [\"node\"],\n documentationStatus: \"minimal\",\n installation: \"yarn add -D @idealyst/tooling\",\n features: [\n \"Component usage analysis\",\n \"Import validation\",\n \"Vite plugin for build-time checks\",\n \"Custom rule definitions\",\n \"Documentation generation\",\n ],\n quickStart: `// vite.config.ts\nimport { idealystPlugin } from '@idealyst/tooling/vite';\n\nexport default {\n plugins: [\n idealystPlugin({\n validateImports: true,\n analyzeUsage: true,\n }),\n ],\n};`,\n apiHighlights: [\n \"idealystPlugin() for Vite\",\n \"analyzeComponent()\",\n \"Custom rule API\",\n ],\n relatedPackages: [\"cli\"],\n },\n\n \"mcp-server\": {\n name: \"MCP Server\",\n npmName: \"@idealyst/mcp-server\",\n description:\n \"Model Context Protocol server providing AI assistants with Idealyst framework documentation, types, and examples.\",\n category: \"tooling\",\n platforms: [\"node\"],\n documentationStatus: \"full\",\n installation: \"yarn add @idealyst/mcp-server\",\n features: [\n \"Component documentation\",\n \"Type extraction from source\",\n \"Validated code examples\",\n \"Icon search (7,447 MDI icons)\",\n \"Navigation and theme guides\",\n \"CLI command reference\",\n ],\n quickStart: `// .mcp.json (Claude Code)\n{\n \"mcpServers\": {\n \"idealyst\": {\n \"command\": \"node\",\n \"args\": [\"node_modules/@idealyst/mcp-server/dist/index.js\"]\n }\n }\n}`,\n apiHighlights: [\n \"list_components\",\n \"get_component_docs\",\n \"search_icons\",\n \"get_*_types\",\n ],\n relatedPackages: [\"components\", \"theme\", \"navigation\"],\n },\n\n markdown: {\n name: \"Markdown\",\n npmName: \"@idealyst/markdown\",\n description:\n \"Cross-platform markdown renderer for React and React Native. Supports GitHub Flavored Markdown with theme integration.\",\n category: \"ui\",\n platforms: [\"web\", \"native\"],\n documentationStatus: \"full\",\n installation: \"yarn add @idealyst/markdown @idealyst/theme\",\n peerDependencies: [\n \"@idealyst/theme\",\n \"react-markdown (web)\",\n \"remark-gfm (web)\",\n \"react-native-markdown-display (native)\",\n ],\n features: [\n \"GitHub Flavored Markdown support\",\n \"Tables, strikethrough, task lists\",\n \"Theme-integrated styling\",\n \"Custom link and image handlers\",\n \"Style overrides per element\",\n \"Cross-platform consistency\",\n ],\n quickStart: `import { Markdown } from '@idealyst/markdown';\n\n<Markdown\n size=\"md\"\n linkIntent=\"primary\"\n linkHandler={{\n onLinkPress: (url) => console.log('Link:', url),\n }}\n>\n{\\`# Hello World\n\nThis is **bold** and _italic_ text.\n\n| Column 1 | Column 2 |\n|----------|----------|\n| Data 1 | Data 2 |\n\\`}\n</Markdown>`,\n apiHighlights: [\n \"Markdown component\",\n \"size prop (xs-xl)\",\n \"linkIntent prop\",\n \"styleOverrides prop\",\n \"linkHandler / imageHandler\",\n ],\n relatedPackages: [\"components\", \"theme\"],\n },\n};\n\n/**\n * Get all packages grouped by category\n */\nexport function getPackagesByCategory(): Record<string, PackageInfo[]> {\n const grouped: Record<string, PackageInfo[]> = {};\n\n for (const pkg of Object.values(packages)) {\n if (!grouped[pkg.category]) {\n grouped[pkg.category] = [];\n }\n grouped[pkg.category].push(pkg);\n }\n\n return grouped;\n}\n\n/**\n * Get a summary list of all packages\n */\nexport function getPackageSummary(): Array<{\n name: string;\n npmName: string;\n category: string;\n description: string;\n platforms: string[];\n documentationStatus: string;\n}> {\n return Object.entries(packages).map(([key, pkg]) => ({\n name: pkg.name,\n npmName: pkg.npmName,\n category: pkg.category,\n description: pkg.description,\n platforms: pkg.platforms,\n documentationStatus: pkg.documentationStatus,\n }));\n}\n\n/**\n * Search packages by query\n */\nexport function searchPackages(query: string): PackageInfo[] {\n const lowerQuery = query.toLowerCase();\n\n return Object.values(packages).filter(\n (pkg) =>\n pkg.name.toLowerCase().includes(lowerQuery) ||\n pkg.npmName.toLowerCase().includes(lowerQuery) ||\n pkg.description.toLowerCase().includes(lowerQuery) ||\n pkg.features.some((f) => f.toLowerCase().includes(lowerQuery)) ||\n pkg.category.toLowerCase().includes(lowerQuery)\n );\n}\n","/**\n * Idealyst Recipes - Common UI Patterns\n * Ready-to-use code examples for building apps with Idealyst\n */\n\nexport interface Recipe {\n name: string;\n description: string;\n category: \"forms\" | \"navigation\" | \"data\" | \"layout\" | \"auth\" | \"settings\" | \"media\";\n difficulty: \"beginner\" | \"intermediate\" | \"advanced\";\n packages: string[];\n code: string;\n explanation: string;\n tips?: string[];\n relatedRecipes?: string[];\n}\n\nexport const recipes: Record<string, Recipe> = {\n \"login-form\": {\n name: \"Login Form\",\n description: \"A complete login form with email/password validation and error handling\",\n category: \"auth\",\n difficulty: \"beginner\",\n packages: [\"@idealyst/components\", \"@idealyst/theme\"],\n code: `import React, { useState } from 'react';\nimport { Button, Input, Card, Text, View } from '@idealyst/components';\n\ninterface LoginFormProps {\n onSubmit: (email: string, password: string) => Promise<void>;\n onForgotPassword?: () => void;\n}\n\nexport function LoginForm({ onSubmit, onForgotPassword }: LoginFormProps) {\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [errors, setErrors] = useState<{ email?: string; password?: string }>({});\n const [isLoading, setIsLoading] = useState(false);\n const [submitError, setSubmitError] = useState<string | null>(null);\n\n const validate = () => {\n const newErrors: typeof errors = {};\n\n if (!email) {\n newErrors.email = 'Email is required';\n } else if (!/^[^\\\\s@]+@[^\\\\s@]+\\\\.[^\\\\s@]+$/.test(email)) {\n newErrors.email = 'Please enter a valid email';\n }\n\n if (!password) {\n newErrors.password = 'Password is required';\n } else if (password.length < 8) {\n newErrors.password = 'Password must be at least 8 characters';\n }\n\n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n };\n\n const handleSubmit = async () => {\n setSubmitError(null);\n\n if (!validate()) return;\n\n setIsLoading(true);\n try {\n await onSubmit(email, password);\n } catch (error) {\n setSubmitError(error instanceof Error ? error.message : 'Login failed');\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <Card padding=\"lg\">\n <Text variant=\"headline\" style={{ marginBottom: 24 }}>\n Sign In\n </Text>\n\n {submitError && (\n <View style={{ marginBottom: 16 }}>\n <Text intent=\"danger\">{submitError}</Text>\n </View>\n )}\n\n <View style={{ gap: 16 }}>\n <Input\n label=\"Email\"\n placeholder=\"you@example.com\"\n value={email}\n onChangeText={setEmail}\n keyboardType=\"email-address\"\n autoCapitalize=\"none\"\n autoComplete=\"email\"\n error={errors.email}\n />\n\n <Input\n label=\"Password\"\n placeholder=\"Enter your password\"\n value={password}\n onChangeText={setPassword}\n secureTextEntry\n autoComplete=\"current-password\"\n error={errors.password}\n />\n\n <Button\n onPress={handleSubmit}\n loading={isLoading}\n disabled={isLoading}\n >\n Sign In\n </Button>\n\n {onForgotPassword && (\n <Button type=\"text\" onPress={onForgotPassword}>\n Forgot Password?\n </Button>\n )}\n </View>\n </Card>\n );\n}`,\n explanation: `This login form demonstrates:\n- Controlled inputs with useState\n- Client-side validation with error messages\n- Loading state during submission\n- Error handling for failed login attempts\n- Proper keyboard types and autocomplete hints for better UX`,\n tips: [\n \"Add onBlur validation for immediate feedback\",\n \"Consider using react-hook-form for complex forms\",\n \"Store tokens securely using @idealyst/storage after successful login\",\n ],\n relatedRecipes: [\"signup-form\", \"forgot-password\", \"protected-route\"],\n },\n\n \"signup-form\": {\n name: \"Signup Form\",\n description: \"User registration form with password confirmation and terms acceptance\",\n category: \"auth\",\n difficulty: \"beginner\",\n packages: [\"@idealyst/components\", \"@idealyst/theme\"],\n code: `import React, { useState } from 'react';\nimport { Button, Input, Card, Text, View, Checkbox, Link } from '@idealyst/components';\n\ninterface SignupFormProps {\n onSubmit: (data: { name: string; email: string; password: string }) => Promise<void>;\n onTermsPress?: () => void;\n}\n\nexport function SignupForm({ onSubmit, onTermsPress }: SignupFormProps) {\n const [name, setName] = useState('');\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [confirmPassword, setConfirmPassword] = useState('');\n const [acceptedTerms, setAcceptedTerms] = useState(false);\n const [errors, setErrors] = useState<Record<string, string>>({});\n const [isLoading, setIsLoading] = useState(false);\n\n const validate = () => {\n const newErrors: Record<string, string> = {};\n\n if (!name.trim()) {\n newErrors.name = 'Name is required';\n }\n\n if (!email) {\n newErrors.email = 'Email is required';\n } else if (!/^[^\\\\s@]+@[^\\\\s@]+\\\\.[^\\\\s@]+$/.test(email)) {\n newErrors.email = 'Please enter a valid email';\n }\n\n if (!password) {\n newErrors.password = 'Password is required';\n } else if (password.length < 8) {\n newErrors.password = 'Password must be at least 8 characters';\n }\n\n if (password !== confirmPassword) {\n newErrors.confirmPassword = 'Passwords do not match';\n }\n\n if (!acceptedTerms) {\n newErrors.terms = 'You must accept the terms and conditions';\n }\n\n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n };\n\n const handleSubmit = async () => {\n if (!validate()) return;\n\n setIsLoading(true);\n try {\n await onSubmit({ name, email, password });\n } catch (error) {\n setErrors({ submit: error instanceof Error ? error.message : 'Signup failed' });\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <Card padding=\"lg\">\n <Text variant=\"headline\" style={{ marginBottom: 24 }}>\n Create Account\n </Text>\n\n {errors.submit && (\n <View style={{ marginBottom: 16 }}>\n <Text intent=\"danger\">{errors.submit}</Text>\n </View>\n )}\n\n <View style={{ gap: 16 }}>\n <Input\n label=\"Full Name\"\n placeholder=\"John Doe\"\n value={name}\n onChangeText={setName}\n autoComplete=\"name\"\n error={errors.name}\n />\n\n <Input\n label=\"Email\"\n placeholder=\"you@example.com\"\n value={email}\n onChangeText={setEmail}\n keyboardType=\"email-address\"\n autoCapitalize=\"none\"\n autoComplete=\"email\"\n error={errors.email}\n />\n\n <Input\n label=\"Password\"\n placeholder=\"At least 8 characters\"\n value={password}\n onChangeText={setPassword}\n secureTextEntry\n autoComplete=\"new-password\"\n error={errors.password}\n />\n\n <Input\n label=\"Confirm Password\"\n placeholder=\"Confirm your password\"\n value={confirmPassword}\n onChangeText={setConfirmPassword}\n secureTextEntry\n autoComplete=\"new-password\"\n error={errors.confirmPassword}\n />\n\n <View style={{ flexDirection: 'row', alignItems: 'center', gap: 8 }}>\n <Checkbox\n checked={acceptedTerms}\n onChange={setAcceptedTerms}\n />\n <Text>\n I agree to the{' '}\n <Link onPress={onTermsPress}>Terms and Conditions</Link>\n </Text>\n </View>\n {errors.terms && <Text intent=\"danger\" size=\"sm\">{errors.terms}</Text>}\n\n <Button\n onPress={handleSubmit}\n loading={isLoading}\n disabled={isLoading}\n >\n Create Account\n </Button>\n </View>\n </Card>\n );\n}`,\n explanation: `This signup form includes:\n- Multiple field validation including password matching\n- Terms and conditions checkbox with validation\n- Proper autocomplete hints for password managers\n- Loading and error states`,\n tips: [\n \"Add password strength indicator for better UX\",\n \"Consider email verification flow after signup\",\n \"Use secure password hashing on the backend\",\n ],\n relatedRecipes: [\"login-form\", \"email-verification\"],\n },\n\n \"settings-screen\": {\n name: \"Settings Screen\",\n description: \"App settings screen with toggles, selections, and grouped options\",\n category: \"settings\",\n difficulty: \"beginner\",\n packages: [\"@idealyst/components\", \"@idealyst/theme\", \"@idealyst/storage\"],\n code: `import React, { useState, useEffect } from 'react';\nimport { ScrollView } from 'react-native';\nimport {\n View, Text, Switch, Select, Card, Divider, Icon\n} from '@idealyst/components';\nimport { storage } from '@idealyst/storage';\n\ninterface Settings {\n notifications: boolean;\n emailUpdates: boolean;\n darkMode: boolean;\n language: string;\n fontSize: string;\n}\n\nconst defaultSettings: Settings = {\n notifications: true,\n emailUpdates: false,\n darkMode: false,\n language: 'en',\n fontSize: 'medium',\n};\n\nexport function SettingsScreen() {\n const [settings, setSettings] = useState<Settings>(defaultSettings);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n loadSettings();\n }, []);\n\n const loadSettings = async () => {\n try {\n const saved = await storage.get<Settings>('user-settings');\n if (saved) {\n setSettings(saved);\n }\n } finally {\n setIsLoading(false);\n }\n };\n\n const updateSetting = async <K extends keyof Settings>(\n key: K,\n value: Settings[K]\n ) => {\n const newSettings = { ...settings, [key]: value };\n setSettings(newSettings);\n await storage.set('user-settings', newSettings);\n };\n\n if (isLoading) {\n return <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>\n <Text>Loading...</Text>\n </View>;\n }\n\n return (\n <ScrollView style={{ flex: 1 }}>\n <View style={{ padding: 16, gap: 16 }}>\n {/* Notifications Section */}\n <Card>\n <Text variant=\"title\" style={{ marginBottom: 16 }}>\n Notifications\n </Text>\n\n <SettingRow\n icon=\"bell\"\n label=\"Push Notifications\"\n description=\"Receive push notifications\"\n >\n <Switch\n checked={settings.notifications}\n onChange={(v) => updateSetting('notifications', v)}\n />\n </SettingRow>\n\n <Divider />\n\n <SettingRow\n icon=\"email\"\n label=\"Email Updates\"\n description=\"Receive weekly email updates\"\n >\n <Switch\n checked={settings.emailUpdates}\n onChange={(v) => updateSetting('emailUpdates', v)}\n />\n </SettingRow>\n </Card>\n\n {/* Appearance Section */}\n <Card>\n <Text variant=\"title\" style={{ marginBottom: 16 }}>\n Appearance\n </Text>\n\n <SettingRow\n icon=\"theme-light-dark\"\n label=\"Dark Mode\"\n description=\"Use dark theme\"\n >\n <Switch\n checked={settings.darkMode}\n onChange={(v) => updateSetting('darkMode', v)}\n />\n </SettingRow>\n\n <Divider />\n\n <SettingRow\n icon=\"format-size\"\n label=\"Font Size\"\n >\n <Select\n value={settings.fontSize}\n onChange={(v) => updateSetting('fontSize', v)}\n options={[\n { label: 'Small', value: 'small' },\n { label: 'Medium', value: 'medium' },\n { label: 'Large', value: 'large' },\n ]}\n style={{ width: 120 }}\n />\n </SettingRow>\n </Card>\n\n {/* Language Section */}\n <Card>\n <Text variant=\"title\" style={{ marginBottom: 16 }}>\n Language & Region\n </Text>\n\n <SettingRow\n icon=\"translate\"\n label=\"Language\"\n >\n <Select\n value={settings.language}\n onChange={(v) => updateSetting('language', v)}\n options={[\n { label: 'English', value: 'en' },\n { label: 'Spanish', value: 'es' },\n { label: 'French', value: 'fr' },\n { label: 'German', value: 'de' },\n ]}\n style={{ width: 140 }}\n />\n </SettingRow>\n </Card>\n </View>\n </ScrollView>\n );\n}\n\n// Helper component for consistent setting rows\nfunction SettingRow({\n icon,\n label,\n description,\n children\n}: {\n icon: string;\n label: string;\n description?: string;\n children: React.ReactNode;\n}) {\n return (\n <View style={{\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingVertical: 12,\n }}>\n <View style={{ flexDirection: 'row', alignItems: 'center', gap: 12, flex: 1 }}>\n <Icon name={icon} size={24} />\n <View style={{ flex: 1 }}>\n <Text>{label}</Text>\n {description && (\n <Text size=\"sm\" style={{ opacity: 0.7 }}>{description}</Text>\n )}\n </View>\n </View>\n {children}\n </View>\n );\n}`,\n explanation: `This settings screen demonstrates:\n- Loading and persisting settings with @idealyst/storage\n- Grouped settings sections with Cards\n- Switch toggles for boolean options\n- Select dropdowns for choices\n- Reusable SettingRow component for consistent layout`,\n tips: [\n \"Consider debouncing saves for rapid toggles\",\n \"Add a 'Reset to Defaults' option\",\n \"Sync settings with backend for cross-device consistency\",\n ],\n relatedRecipes: [\"theme-switcher\", \"profile-screen\"],\n },\n\n \"theme-switcher\": {\n name: \"Theme Switcher\",\n description: \"Toggle between light and dark mode with persistence\",\n category: \"settings\",\n difficulty: \"beginner\",\n packages: [\"@idealyst/components\", \"@idealyst/theme\", \"@idealyst/storage\"],\n code: `import React, { createContext, useContext, useEffect, useState } from 'react';\nimport { UnistylesRuntime } from 'react-native-unistyles';\nimport { storage } from '@idealyst/storage';\nimport { Switch, View, Text, Icon } from '@idealyst/components';\n\ntype ThemeMode = 'light' | 'dark' | 'system';\n\ninterface ThemeContextType {\n mode: ThemeMode;\n setMode: (mode: ThemeMode) => void;\n isDark: boolean;\n}\n\nconst ThemeContext = createContext<ThemeContextType | null>(null);\n\nexport function ThemeProvider({ children }: { children: React.ReactNode }) {\n const [mode, setModeState] = useState<ThemeMode>('system');\n const [isLoaded, setIsLoaded] = useState(false);\n\n useEffect(() => {\n loadTheme();\n }, []);\n\n useEffect(() => {\n if (!isLoaded) return;\n\n // Apply theme based on mode\n if (mode === 'system') {\n UnistylesRuntime.setAdaptiveThemes(true);\n } else {\n UnistylesRuntime.setAdaptiveThemes(false);\n UnistylesRuntime.setTheme(mode);\n }\n }, [mode, isLoaded]);\n\n const loadTheme = async () => {\n const saved = await storage.get<ThemeMode>('theme-mode');\n if (saved) {\n setModeState(saved);\n }\n setIsLoaded(true);\n };\n\n const setMode = async (newMode: ThemeMode) => {\n setModeState(newMode);\n await storage.set('theme-mode', newMode);\n };\n\n const isDark = mode === 'dark' ||\n (mode === 'system' && UnistylesRuntime.colorScheme === 'dark');\n\n if (!isLoaded) return null;\n\n return (\n <ThemeContext.Provider value={{ mode, setMode, isDark }}>\n {children}\n </ThemeContext.Provider>\n );\n}\n\nexport function useTheme() {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within ThemeProvider');\n }\n return context;\n}\n\n// Simple toggle component\nexport function ThemeToggle() {\n const { isDark, setMode } = useTheme();\n\n return (\n <View style={{ flexDirection: 'row', alignItems: 'center', gap: 12 }}>\n <Icon name={isDark ? 'weather-night' : 'weather-sunny'} size={24} />\n <Text>Dark Mode</Text>\n <Switch\n checked={isDark}\n onChange={(checked) => setMode(checked ? 'dark' : 'light')}\n />\n </View>\n );\n}\n\n// Full selector with system option\nexport function ThemeSelector() {\n const { mode, setMode } = useTheme();\n\n return (\n <View style={{ gap: 8 }}>\n <ThemeOption\n label=\"Light\"\n icon=\"weather-sunny\"\n selected={mode === 'light'}\n onPress={() => setMode('light')}\n />\n <ThemeOption\n label=\"Dark\"\n icon=\"weather-night\"\n selected={mode === 'dark'}\n onPress={() => setMode('dark')}\n />\n <ThemeOption\n label=\"System\"\n icon=\"cellphone\"\n selected={mode === 'system'}\n onPress={() => setMode('system')}\n />\n </View>\n );\n}\n\nfunction ThemeOption({\n label,\n icon,\n selected,\n onPress\n}: {\n label: string;\n icon: string;\n selected: boolean;\n onPress: () => void;\n}) {\n return (\n <Pressable onPress={onPress}>\n <View style={{\n flexDirection: 'row',\n alignItems: 'center',\n gap: 12,\n padding: 12,\n borderRadius: 8,\n backgroundColor: selected ? 'rgba(0,0,0,0.1)' : 'transparent',\n }}>\n <Icon name={icon} size={20} />\n <Text>{label}</Text>\n {selected && <Icon name=\"check\" size={20} intent=\"success\" />}\n </View>\n </Pressable>\n );\n}`,\n explanation: `This theme switcher provides:\n- ThemeProvider context for app-wide theme state\n- Persistence with @idealyst/storage\n- Support for light, dark, and system-follow modes\n- Integration with Unistyles runtime\n- Both simple toggle and full selector UI components`,\n tips: [\n \"Wrap your app root with ThemeProvider\",\n \"The system option follows device settings automatically\",\n \"Theme changes are instant with no reload required\",\n ],\n relatedRecipes: [\"settings-screen\"],\n },\n\n \"tab-navigation\": {\n name: \"Tab Navigation\",\n description: \"Bottom tab navigation with icons and badges\",\n category: \"navigation\",\n difficulty: \"beginner\",\n packages: [\"@idealyst/components\", \"@idealyst/navigation\"],\n code: `import React from 'react';\nimport { Router, TabBar } from '@idealyst/navigation';\nimport { Icon, Badge, View } from '@idealyst/components';\n\n// Define your screens\nfunction HomeScreen() {\n return <View><Text>Home</Text></View>;\n}\n\nfunction SearchScreen() {\n return <View><Text>Search</Text></View>;\n}\n\nfunction NotificationsScreen() {\n return <View><Text>Notifications</Text></View>;\n}\n\nfunction ProfileScreen() {\n return <View><Text>Profile</Text></View>;\n}\n\n// Route configuration\nconst routes = {\n home: {\n path: '/',\n screen: HomeScreen,\n options: {\n title: 'Home',\n tabBarIcon: ({ focused }: { focused: boolean }) => (\n <Icon name={focused ? 'home' : 'home-outline'} size={24} />\n ),\n },\n },\n search: {\n path: '/search',\n screen: SearchScreen,\n options: {\n title: 'Search',\n tabBarIcon: ({ focused }: { focused: boolean }) => (\n <Icon name={focused ? 'magnify' : 'magnify'} size={24} />\n ),\n },\n },\n notifications: {\n path: '/notifications',\n screen: NotificationsScreen,\n options: {\n title: 'Notifications',\n tabBarIcon: ({ focused }: { focused: boolean }) => (\n <View>\n <Icon name={focused ? 'bell' : 'bell-outline'} size={24} />\n {/* Show badge when there are unread notifications */}\n <Badge\n count={3}\n style={{ position: 'absolute', top: -4, right: -8 }}\n />\n </View>\n ),\n },\n },\n profile: {\n path: '/profile',\n screen: ProfileScreen,\n options: {\n title: 'Profile',\n tabBarIcon: ({ focused }: { focused: boolean }) => (\n <Icon name={focused ? 'account' : 'account-outline'} size={24} />\n ),\n },\n },\n};\n\nexport function App() {\n return (\n <Router\n routes={routes}\n navigator=\"tabs\"\n tabBarPosition=\"bottom\"\n />\n );\n}`,\n explanation: `This tab navigation setup includes:\n- Four tabs with icons that change when focused\n- Badge on notifications tab for unread count\n- Type-safe route configuration\n- Works on both web and native`,\n tips: [\n \"Use outline/filled icon variants to indicate focus state\",\n \"Keep tab count to 3-5 for best usability\",\n \"Consider hiding tabs on certain screens (like detail views)\",\n ],\n relatedRecipes: [\"drawer-navigation\", \"stack-navigation\", \"protected-route\"],\n },\n\n \"drawer-navigation\": {\n name: \"Drawer Navigation\",\n description: \"Side drawer menu with navigation items and user profile\",\n category: \"navigation\",\n difficulty: \"intermediate\",\n packages: [\"@idealyst/components\", \"@idealyst/navigation\"],\n code: `import React from 'react';\nimport { Router, useNavigator } from '@idealyst/navigation';\nimport { View, Text, Icon, Avatar, Pressable, Divider } from '@idealyst/components';\n\n// Custom drawer content\nfunction DrawerContent() {\n const { navigate, currentRoute } = useNavigator();\n\n const menuItems = [\n { route: 'home', icon: 'home', label: 'Home' },\n { route: 'dashboard', icon: 'view-dashboard', label: 'Dashboard' },\n { route: 'messages', icon: 'message', label: 'Messages' },\n { route: 'settings', icon: 'cog', label: 'Settings' },\n ];\n\n return (\n <View style={{ flex: 1, padding: 16 }}>\n {/* User Profile Header */}\n <View style={{ alignItems: 'center', paddingVertical: 24 }}>\n <Avatar\n source={{ uri: 'https://example.com/avatar.jpg' }}\n size=\"lg\"\n />\n <Text variant=\"title\" style={{ marginTop: 12 }}>John Doe</Text>\n <Text size=\"sm\" style={{ opacity: 0.7 }}>john@example.com</Text>\n </View>\n\n <Divider style={{ marginVertical: 16 }} />\n\n {/* Menu Items */}\n <View style={{ gap: 4 }}>\n {menuItems.map((item) => (\n <DrawerItem\n key={item.route}\n icon={item.icon}\n label={item.label}\n active={currentRoute === item.route}\n onPress={() => navigate(item.route)}\n />\n ))}\n </View>\n\n {/* Footer */}\n <View style={{ marginTop: 'auto' }}>\n <Divider style={{ marginVertical: 16 }} />\n <DrawerItem\n icon=\"logout\"\n label=\"Sign Out\"\n onPress={() => {\n // Handle logout\n }}\n />\n </View>\n </View>\n );\n}\n\nfunction DrawerItem({\n icon,\n label,\n active,\n onPress\n}: {\n icon: string;\n label: string;\n active?: boolean;\n onPress: () => void;\n}) {\n return (\n <Pressable onPress={onPress}>\n <View style={{\n flexDirection: 'row',\n alignItems: 'center',\n gap: 16,\n padding: 12,\n borderRadius: 8,\n backgroundColor: active ? 'rgba(0,0,0,0.1)' : 'transparent',\n }}>\n <Icon name={icon} size={24} intent={active ? 'primary' : undefined} />\n <Text intent={active ? 'primary' : undefined}>{label}</Text>\n </View>\n </Pressable>\n );\n}\n\n// Route configuration\nconst routes = {\n home: { path: '/', screen: HomeScreen },\n dashboard: { path: '/dashboard', screen: DashboardScreen },\n messages: { path: '/messages', screen: MessagesScreen },\n settings: { path: '/settings', screen: SettingsScreen },\n};\n\nexport function App() {\n return (\n <Router\n routes={routes}\n navigator=\"drawer\"\n drawerContent={DrawerContent}\n />\n );\n}`,\n explanation: `This drawer navigation includes:\n- Custom drawer content with user profile\n- Active state highlighting for current route\n- Grouped menu items with icons\n- Sign out button at the bottom\n- Works on both web (sidebar) and native (slide-out drawer)`,\n tips: [\n \"Add a hamburger menu button to open drawer on native\",\n \"Consider using drawer on tablet/desktop, tabs on mobile\",\n \"Add gesture support for swipe-to-open on native\",\n ],\n relatedRecipes: [\"tab-navigation\", \"stack-navigation\"],\n },\n\n \"protected-route\": {\n name: \"Protected Routes\",\n description: \"Redirect unauthenticated users to login with auth state management\",\n category: \"auth\",\n difficulty: \"intermediate\",\n packages: [\"@idealyst/navigation\", \"@idealyst/storage\", \"@idealyst/components\"],\n code: `import React, { createContext, useContext, useEffect, useState } from 'react';\nimport { Router, useNavigator } from '@idealyst/navigation';\nimport { storage } from '@idealyst/storage';\nimport { View, Text, ActivityIndicator } from '@idealyst/components';\n\n// Auth Context\ninterface User {\n id: string;\n email: string;\n name: string;\n}\n\ninterface AuthContextType {\n user: User | null;\n isLoading: boolean;\n login: (email: string, password: string) => Promise<void>;\n logout: () => Promise<void>;\n}\n\nconst AuthContext = createContext<AuthContextType | null>(null);\n\nexport function AuthProvider({ children }: { children: React.ReactNode }) {\n const [user, setUser] = useState<User | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n checkAuth();\n }, []);\n\n const checkAuth = async () => {\n try {\n const token = await storage.get<string>('auth-token');\n if (token) {\n // Validate token and get user data\n const userData = await fetchUser(token);\n setUser(userData);\n }\n } catch (error) {\n // Token invalid or expired\n await storage.remove('auth-token');\n } finally {\n setIsLoading(false);\n }\n };\n\n const login = async (email: string, password: string) => {\n const { token, user } = await apiLogin(email, password);\n await storage.set('auth-token', token);\n setUser(user);\n };\n\n const logout = async () => {\n await storage.remove('auth-token');\n setUser(null);\n };\n\n return (\n <AuthContext.Provider value={{ user, isLoading, login, logout }}>\n {children}\n </AuthContext.Provider>\n );\n}\n\nexport function useAuth() {\n const context = useContext(AuthContext);\n if (!context) {\n throw new Error('useAuth must be used within AuthProvider');\n }\n return context;\n}\n\n// Protected Route Wrapper\nfunction ProtectedRoute({ children }: { children: React.ReactNode }) {\n const { user, isLoading } = useAuth();\n const { navigate } = useNavigator();\n\n useEffect(() => {\n if (!isLoading && !user) {\n navigate('login');\n }\n }, [user, isLoading]);\n\n if (isLoading) {\n return (\n <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>\n <ActivityIndicator size=\"lg\" />\n </View>\n );\n }\n\n if (!user) {\n return null; // Will redirect\n }\n\n return <>{children}</>;\n}\n\n// Route configuration\nconst routes = {\n login: {\n path: '/login',\n screen: LoginScreen,\n options: { public: true },\n },\n signup: {\n path: '/signup',\n screen: SignupScreen,\n options: { public: true },\n },\n home: {\n path: '/',\n screen: () => (\n <ProtectedRoute>\n <HomeScreen />\n </ProtectedRoute>\n ),\n },\n profile: {\n path: '/profile',\n screen: () => (\n <ProtectedRoute>\n <ProfileScreen />\n </ProtectedRoute>\n ),\n },\n settings: {\n path: '/settings',\n screen: () => (\n <ProtectedRoute>\n <SettingsScreen />\n </ProtectedRoute>\n ),\n },\n};\n\nexport function App() {\n return (\n <AuthProvider>\n <Router routes={routes} />\n </AuthProvider>\n );\n}`,\n explanation: `This protected routes setup includes:\n- AuthProvider context for app-wide auth state\n- Token persistence with @idealyst/storage\n- Loading state while checking authentication\n- Automatic redirect to login for unauthenticated users\n- ProtectedRoute wrapper component for easy use`,\n tips: [\n \"Add token refresh logic for long-lived sessions\",\n \"Consider deep link handling for login redirects\",\n \"Use @idealyst/oauth-client for OAuth flows\",\n ],\n relatedRecipes: [\"login-form\", \"oauth-flow\"],\n },\n\n \"data-list\": {\n name: \"Data List with Pull-to-Refresh\",\n description: \"Scrollable list with pull-to-refresh, loading states, and empty state\",\n category: \"data\",\n difficulty: \"intermediate\",\n packages: [\"@idealyst/components\"],\n code: `import React, { useState, useEffect, useCallback } from 'react';\nimport { FlatList, RefreshControl } from 'react-native';\nimport { View, Text, Card, ActivityIndicator, Button, Icon } from '@idealyst/components';\n\ninterface Item {\n id: string;\n title: string;\n description: string;\n createdAt: string;\n}\n\ninterface DataListProps {\n fetchItems: () => Promise<Item[]>;\n onItemPress?: (item: Item) => void;\n}\n\nexport function DataList({ fetchItems, onItemPress }: DataListProps) {\n const [items, setItems] = useState<Item[]>([]);\n const [isLoading, setIsLoading] = useState(true);\n const [isRefreshing, setIsRefreshing] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const loadData = useCallback(async (showLoader = true) => {\n if (showLoader) setIsLoading(true);\n setError(null);\n\n try {\n const data = await fetchItems();\n setItems(data);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load data');\n } finally {\n setIsLoading(false);\n setIsRefreshing(false);\n }\n }, [fetchItems]);\n\n useEffect(() => {\n loadData();\n }, [loadData]);\n\n const handleRefresh = () => {\n setIsRefreshing(true);\n loadData(false);\n };\n\n // Loading state\n if (isLoading) {\n return (\n <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>\n <ActivityIndicator size=\"lg\" />\n <Text style={{ marginTop: 16 }}>Loading...</Text>\n </View>\n );\n }\n\n // Error state\n if (error) {\n return (\n <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center', padding: 24 }}>\n <Icon name=\"alert-circle\" size={48} intent=\"danger\" />\n <Text variant=\"title\" style={{ marginTop: 16 }}>Something went wrong</Text>\n <Text style={{ textAlign: 'center', marginTop: 8, opacity: 0.7 }}>\n {error}\n </Text>\n <Button onPress={() => loadData()} style={{ marginTop: 24 }}>\n Try Again\n </Button>\n </View>\n );\n }\n\n // Empty state\n if (items.length === 0) {\n return (\n <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center', padding: 24 }}>\n <Icon name=\"inbox\" size={48} style={{ opacity: 0.5 }} />\n <Text variant=\"title\" style={{ marginTop: 16 }}>No items yet</Text>\n <Text style={{ textAlign: 'center', marginTop: 8, opacity: 0.7 }}>\n Pull down to refresh or check back later\n </Text>\n </View>\n );\n }\n\n return (\n <FlatList\n data={items}\n keyExtractor={(item) => item.id}\n contentContainerStyle={{ padding: 16, gap: 12 }}\n refreshControl={\n <RefreshControl\n refreshing={isRefreshing}\n onRefresh={handleRefresh}\n />\n }\n renderItem={({ item }) => (\n <Card\n onPress={() => onItemPress?.(item)}\n style={{ padding: 16 }}\n >\n <Text variant=\"title\">{item.title}</Text>\n <Text style={{ marginTop: 4, opacity: 0.7 }}>\n {item.description}\n </Text>\n <Text size=\"sm\" style={{ marginTop: 8, opacity: 0.5 }}>\n {new Date(item.createdAt).toLocaleDateString()}\n </Text>\n </Card>\n )}\n />\n );\n}\n\n// Usage example\nfunction MyScreen() {\n const fetchItems = async () => {\n const response = await fetch('/api/items');\n return response.json();\n };\n\n return (\n <DataList\n fetchItems={fetchItems}\n onItemPress={(item) => console.log('Selected:', item)}\n />\n );\n}`,\n explanation: `This data list component handles:\n- Initial loading state with spinner\n- Pull-to-refresh functionality\n- Error state with retry button\n- Empty state with helpful message\n- Efficient FlatList rendering for large lists`,\n tips: [\n \"Add pagination with onEndReached for large datasets\",\n \"Use skeleton loading for smoother perceived performance\",\n \"Consider optimistic updates for better UX\",\n ],\n relatedRecipes: [\"search-filter\", \"infinite-scroll\"],\n },\n\n \"search-filter\": {\n name: \"Search with Filters\",\n description: \"Search input with filter chips and debounced search\",\n category: \"data\",\n difficulty: \"intermediate\",\n packages: [\"@idealyst/components\"],\n code: `import React, { useState, useEffect, useMemo } from 'react';\nimport { ScrollView } from 'react-native';\nimport { View, Input, Chip, Text, Icon } from '@idealyst/components';\n\ninterface SearchFilterProps<T> {\n data: T[];\n searchKeys: (keyof T)[];\n filterOptions: { key: string; label: string; values: string[] }[];\n renderItem: (item: T) => React.ReactNode;\n placeholder?: string;\n}\n\n// Debounce hook\nfunction useDebounce<T>(value: T, delay: number): T {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay);\n return () => clearTimeout(timer);\n }, [value, delay]);\n\n return debouncedValue;\n}\n\nexport function SearchFilter<T extends Record<string, any>>({\n data,\n searchKeys,\n filterOptions,\n renderItem,\n placeholder = 'Search...',\n}: SearchFilterProps<T>) {\n const [searchQuery, setSearchQuery] = useState('');\n const [activeFilters, setActiveFilters] = useState<Record<string, string[]>>({});\n\n const debouncedQuery = useDebounce(searchQuery, 300);\n\n const toggleFilter = (key: string, value: string) => {\n setActiveFilters((prev) => {\n const current = prev[key] || [];\n const updated = current.includes(value)\n ? current.filter((v) => v !== value)\n : [...current, value];\n\n return { ...prev, [key]: updated };\n });\n };\n\n const clearFilters = () => {\n setActiveFilters({});\n setSearchQuery('');\n };\n\n const filteredData = useMemo(() => {\n let result = data;\n\n // Apply search\n if (debouncedQuery) {\n const query = debouncedQuery.toLowerCase();\n result = result.filter((item) =>\n searchKeys.some((key) =>\n String(item[key]).toLowerCase().includes(query)\n )\n );\n }\n\n // Apply filters\n for (const [key, values] of Object.entries(activeFilters)) {\n if (values.length > 0) {\n result = result.filter((item) => values.includes(String(item[key])));\n }\n }\n\n return result;\n }, [data, debouncedQuery, activeFilters, searchKeys]);\n\n const hasActiveFilters =\n searchQuery || Object.values(activeFilters).some((v) => v.length > 0);\n\n return (\n <View style={{ flex: 1 }}>\n {/* Search Input */}\n <View style={{ padding: 16 }}>\n <Input\n placeholder={placeholder}\n value={searchQuery}\n onChangeText={setSearchQuery}\n leftIcon=\"magnify\"\n rightIcon={searchQuery ? 'close' : undefined}\n onRightIconPress={() => setSearchQuery('')}\n />\n </View>\n\n {/* Filter Chips */}\n {filterOptions.map((filter) => (\n <View key={filter.key} style={{ paddingHorizontal: 16, marginBottom: 12 }}>\n <Text size=\"sm\" style={{ marginBottom: 8, opacity: 0.7 }}>\n {filter.label}\n </Text>\n <ScrollView horizontal showsHorizontalScrollIndicator={false}>\n <View style={{ flexDirection: 'row', gap: 8 }}>\n {filter.values.map((value) => (\n <Chip\n key={value}\n selected={(activeFilters[filter.key] || []).includes(value)}\n onPress={() => toggleFilter(filter.key, value)}\n >\n {value}\n </Chip>\n ))}\n </View>\n </ScrollView>\n </View>\n ))}\n\n {/* Results Header */}\n <View style={{\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n paddingHorizontal: 16,\n paddingVertical: 8,\n }}>\n <Text size=\"sm\" style={{ opacity: 0.7 }}>\n {filteredData.length} result{filteredData.length !== 1 ? 's' : ''}\n </Text>\n {hasActiveFilters && (\n <Chip onPress={clearFilters} size=\"sm\">\n <Icon name=\"close\" size={14} /> Clear all\n </Chip>\n )}\n </View>\n\n {/* Results */}\n <ScrollView style={{ flex: 1 }} contentContainerStyle={{ padding: 16, gap: 12 }}>\n {filteredData.length === 0 ? (\n <View style={{ alignItems: 'center', paddingVertical: 32 }}>\n <Icon name=\"magnify-close\" size={48} style={{ opacity: 0.5 }} />\n <Text style={{ marginTop: 16 }}>No results found</Text>\n </View>\n ) : (\n filteredData.map((item, index) => (\n <View key={index}>{renderItem(item)}</View>\n ))\n )}\n </ScrollView>\n </View>\n );\n}\n\n// Usage example\nconst products = [\n { id: '1', name: 'iPhone', category: 'Electronics', price: 999 },\n { id: '2', name: 'MacBook', category: 'Electronics', price: 1999 },\n { id: '3', name: 'Desk Chair', category: 'Furniture', price: 299 },\n];\n\nfunction ProductSearch() {\n return (\n <SearchFilter\n data={products}\n searchKeys={['name']}\n filterOptions={[\n { key: 'category', label: 'Category', values: ['Electronics', 'Furniture'] },\n ]}\n renderItem={(product) => (\n <Card>\n <Text>{product.name}</Text>\n <Text>\\${product.price}</Text>\n </Card>\n )}\n />\n );\n}`,\n explanation: `This search and filter component provides:\n- Debounced search input (300ms delay)\n- Multiple filter categories with chips\n- Combined search + filter logic\n- Clear all filters button\n- Result count display\n- Empty state handling`,\n tips: [\n \"Add URL query params sync for shareable filtered views\",\n \"Consider server-side filtering for large datasets\",\n \"Add sort options alongside filters\",\n ],\n relatedRecipes: [\"data-list\", \"infinite-scroll\"],\n },\n\n \"modal-confirmation\": {\n name: \"Confirmation Dialog\",\n description: \"Reusable confirmation modal for destructive actions\",\n category: \"layout\",\n difficulty: \"beginner\",\n packages: [\"@idealyst/components\"],\n code: `import React, { createContext, useContext, useState, useCallback } from 'react';\nimport { Dialog, Button, Text, View, Icon } from '@idealyst/components';\n\ninterface ConfirmOptions {\n title: string;\n message: string;\n confirmLabel?: string;\n cancelLabel?: string;\n intent?: 'danger' | 'warning' | 'primary';\n icon?: string;\n}\n\ninterface ConfirmContextType {\n confirm: (options: ConfirmOptions) => Promise<boolean>;\n}\n\nconst ConfirmContext = createContext<ConfirmContextType | null>(null);\n\nexport function ConfirmProvider({ children }: { children: React.ReactNode }) {\n const [isOpen, setIsOpen] = useState(false);\n const [options, setOptions] = useState<ConfirmOptions | null>(null);\n const [resolveRef, setResolveRef] = useState<((value: boolean) => void) | null>(null);\n\n const confirm = useCallback((opts: ConfirmOptions): Promise<boolean> => {\n return new Promise((resolve) => {\n setOptions(opts);\n setResolveRef(() => resolve);\n setIsOpen(true);\n });\n }, []);\n\n const handleClose = (confirmed: boolean) => {\n setIsOpen(false);\n resolveRef?.(confirmed);\n // Clean up after animation\n setTimeout(() => {\n setOptions(null);\n setResolveRef(null);\n }, 300);\n };\n\n return (\n <ConfirmContext.Provider value={{ confirm }}>\n {children}\n\n <Dialog open={isOpen} onClose={() => handleClose(false)}>\n {options && (\n <View style={{ padding: 24, alignItems: 'center' }}>\n {options.icon && (\n <Icon\n name={options.icon}\n size={48}\n intent={options.intent || 'danger'}\n style={{ marginBottom: 16 }}\n />\n )}\n\n <Text variant=\"headline\" style={{ textAlign: 'center' }}>\n {options.title}\n </Text>\n\n <Text style={{ textAlign: 'center', marginTop: 8, opacity: 0.7 }}>\n {options.message}\n </Text>\n\n <View style={{\n flexDirection: 'row',\n gap: 12,\n marginTop: 24,\n width: '100%',\n }}>\n <Button\n type=\"outlined\"\n onPress={() => handleClose(false)}\n style={{ flex: 1 }}\n >\n {options.cancelLabel || 'Cancel'}\n </Button>\n\n <Button\n intent={options.intent || 'danger'}\n onPress={() => handleClose(true)}\n style={{ flex: 1 }}\n >\n {options.confirmLabel || 'Confirm'}\n </Button>\n </View>\n </View>\n )}\n </Dialog>\n </ConfirmContext.Provider>\n );\n}\n\nexport function useConfirm() {\n const context = useContext(ConfirmContext);\n if (!context) {\n throw new Error('useConfirm must be used within ConfirmProvider');\n }\n return context.confirm;\n}\n\n// Usage example\nfunction DeleteButton({ onDelete }: { onDelete: () => void }) {\n const confirm = useConfirm();\n\n const handleDelete = async () => {\n const confirmed = await confirm({\n title: 'Delete Item?',\n message: 'This action cannot be undone. Are you sure you want to delete this item?',\n confirmLabel: 'Delete',\n cancelLabel: 'Keep',\n intent: 'danger',\n icon: 'delete',\n });\n\n if (confirmed) {\n onDelete();\n }\n };\n\n return (\n <Button intent=\"danger\" type=\"outlined\" onPress={handleDelete}>\n Delete\n </Button>\n );\n}\n\n// Wrap your app\nfunction App() {\n return (\n <ConfirmProvider>\n <MyApp />\n </ConfirmProvider>\n );\n}`,\n explanation: `This confirmation dialog system provides:\n- Async/await API for easy use: \\`if (await confirm({...})) { ... }\\`\n- Customizable title, message, buttons, and icon\n- Intent-based styling (danger, warning, primary)\n- Promise-based resolution\n- Clean context-based architecture`,\n tips: [\n \"Use danger intent for destructive actions\",\n \"Keep messages concise and actionable\",\n \"Consider adding a 'Don't ask again' checkbox for repeated actions\",\n ],\n relatedRecipes: [\"toast-notifications\"],\n },\n\n \"toast-notifications\": {\n name: \"Toast Notifications\",\n description: \"Temporary notification messages that auto-dismiss\",\n category: \"layout\",\n difficulty: \"intermediate\",\n packages: [\"@idealyst/components\"],\n code: `import React, { createContext, useContext, useState, useCallback } from 'react';\nimport { Animated, Pressable } from 'react-native';\nimport { View, Text, Icon } from '@idealyst/components';\n\ntype ToastType = 'success' | 'danger' | 'warning' | 'info';\n\ninterface Toast {\n id: string;\n type: ToastType;\n message: string;\n duration?: number;\n}\n\ninterface ToastContextType {\n showToast: (type: ToastType, message: string, duration?: number) => void;\n success: (message: string) => void;\n danger: (message: string) => void;\n warning: (message: string) => void;\n info: (message: string) => void;\n}\n\nconst ToastContext = createContext<ToastContextType | null>(null);\n\nconst toastConfig: Record<ToastType, { icon: string; intent: string }> = {\n success: { icon: 'check-circle', intent: 'success' },\n danger: { icon: 'alert-circle', intent: 'danger' },\n warning: { icon: 'alert', intent: 'warning' },\n info: { icon: 'information', intent: 'primary' },\n};\n\nexport function ToastProvider({ children }: { children: React.ReactNode }) {\n const [toasts, setToasts] = useState<Toast[]>([]);\n\n const removeToast = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id));\n }, []);\n\n const showToast = useCallback((type: ToastType, message: string, duration = 3000) => {\n const id = Date.now().toString();\n const toast: Toast = { id, type, message, duration };\n\n setToasts((prev) => [...prev, toast]);\n\n if (duration > 0) {\n setTimeout(() => removeToast(id), duration);\n }\n }, [removeToast]);\n\n const contextValue: ToastContextType = {\n showToast,\n success: (msg) => showToast('success', msg),\n danger: (msg) => showToast('danger', msg),\n warning: (msg) => showToast('warning', msg),\n info: (msg) => showToast('info', msg),\n };\n\n return (\n <ToastContext.Provider value={contextValue}>\n {children}\n\n {/* Toast Container */}\n <View\n style={{\n position: 'absolute',\n top: 60,\n left: 16,\n right: 16,\n zIndex: 9999,\n gap: 8,\n }}\n pointerEvents=\"box-none\"\n >\n {toasts.map((toast) => (\n <ToastItem\n key={toast.id}\n toast={toast}\n onDismiss={() => removeToast(toast.id)}\n />\n ))}\n </View>\n </ToastContext.Provider>\n );\n}\n\nfunction ToastItem({ toast, onDismiss }: { toast: Toast; onDismiss: () => void }) {\n const fadeAnim = React.useRef(new Animated.Value(0)).current;\n const config = toastConfig[toast.type];\n\n React.useEffect(() => {\n Animated.timing(fadeAnim, {\n toValue: 1,\n duration: 200,\n useNativeDriver: true,\n }).start();\n }, []);\n\n return (\n <Animated.View style={{ opacity: fadeAnim, transform: [{ translateY: fadeAnim.interpolate({\n inputRange: [0, 1],\n outputRange: [-20, 0],\n }) }] }}>\n <Pressable onPress={onDismiss}>\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n gap: 12,\n padding: 16,\n borderRadius: 8,\n backgroundColor: '#1a1a1a',\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.25,\n shadowRadius: 4,\n elevation: 5,\n }}\n >\n <Icon name={config.icon} size={20} intent={config.intent as any} />\n <Text style={{ flex: 1, color: '#fff' }}>{toast.message}</Text>\n <Icon name=\"close\" size={16} style={{ opacity: 0.5 }} />\n </View>\n </Pressable>\n </Animated.View>\n );\n}\n\nexport function useToast() {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error('useToast must be used within ToastProvider');\n }\n return context;\n}\n\n// Usage example\nfunction SaveButton() {\n const toast = useToast();\n const [isSaving, setIsSaving] = useState(false);\n\n const handleSave = async () => {\n setIsSaving(true);\n try {\n await saveData();\n toast.success('Changes saved successfully!');\n } catch (error) {\n toast.error('Failed to save changes. Please try again.');\n } finally {\n setIsSaving(false);\n }\n };\n\n return (\n <Button onPress={handleSave} loading={isSaving}>\n Save\n </Button>\n );\n}\n\n// Wrap your app\nfunction App() {\n return (\n <ToastProvider>\n <MyApp />\n </ToastProvider>\n );\n}`,\n explanation: `This toast notification system provides:\n- Simple API: \\`toast.success('Message')\\`\n- Four types: success, error, warning, info\n- Auto-dismiss with configurable duration\n- Tap to dismiss\n- Animated entrance\n- Stacking multiple toasts`,\n tips: [\n \"Use success for completed actions, error for failures\",\n \"Keep messages under 50 characters for readability\",\n \"Don't show toasts for every action - use sparingly\",\n ],\n relatedRecipes: [\"modal-confirmation\"],\n },\n\n \"form-with-validation\": {\n name: \"Form with Validation\",\n description: \"Multi-field form with real-time validation and error handling\",\n category: \"forms\",\n difficulty: \"intermediate\",\n packages: [\"@idealyst/components\"],\n code: `import React, { useState } from 'react';\nimport { ScrollView } from 'react-native';\nimport {\n View, Text, Input, Select, Checkbox, Button, Card\n} from '@idealyst/components';\n\n// Validation rules\ntype ValidationRule<T> = {\n validate: (value: T, formData: FormData) => boolean;\n message: string;\n};\n\ninterface FormData {\n name: string;\n email: string;\n phone: string;\n country: string;\n message: string;\n subscribe: boolean;\n}\n\nconst validationRules: Partial<Record<keyof FormData, ValidationRule<any>[]>> = {\n name: [\n { validate: (v) => v.trim().length > 0, message: 'Name is required' },\n { validate: (v) => v.trim().length >= 2, message: 'Name must be at least 2 characters' },\n ],\n email: [\n { validate: (v) => v.length > 0, message: 'Email is required' },\n { validate: (v) => /^[^\\\\s@]+@[^\\\\s@]+\\\\.[^\\\\s@]+$/.test(v), message: 'Invalid email format' },\n ],\n phone: [\n { validate: (v) => !v || /^[+]?[0-9\\\\s-]{10,}$/.test(v), message: 'Invalid phone number' },\n ],\n country: [\n { validate: (v) => v.length > 0, message: 'Please select a country' },\n ],\n message: [\n { validate: (v) => v.length > 0, message: 'Message is required' },\n { validate: (v) => v.length >= 10, message: 'Message must be at least 10 characters' },\n ],\n};\n\nexport function ContactForm({ onSubmit }: { onSubmit: (data: FormData) => Promise<void> }) {\n const [formData, setFormData] = useState<FormData>({\n name: '',\n email: '',\n phone: '',\n country: '',\n message: '',\n subscribe: false,\n });\n\n const [errors, setErrors] = useState<Partial<Record<keyof FormData, string>>>({});\n const [touched, setTouched] = useState<Partial<Record<keyof FormData, boolean>>>({});\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const validateField = (field: keyof FormData, value: any): string | undefined => {\n const rules = validationRules[field];\n if (!rules) return undefined;\n\n for (const rule of rules) {\n if (!rule.validate(value, formData)) {\n return rule.message;\n }\n }\n return undefined;\n };\n\n const validateAll = (): boolean => {\n const newErrors: typeof errors = {};\n let isValid = true;\n\n for (const field of Object.keys(validationRules) as (keyof FormData)[]) {\n const error = validateField(field, formData[field]);\n if (error) {\n newErrors[field] = error;\n isValid = false;\n }\n }\n\n setErrors(newErrors);\n return isValid;\n };\n\n const handleChange = (field: keyof FormData, value: any) => {\n setFormData((prev) => ({ ...prev, [field]: value }));\n\n // Validate on change if field was touched\n if (touched[field]) {\n const error = validateField(field, value);\n setErrors((prev) => ({ ...prev, [field]: error }));\n }\n };\n\n const handleBlur = (field: keyof FormData) => {\n setTouched((prev) => ({ ...prev, [field]: true }));\n const error = validateField(field, formData[field]);\n setErrors((prev) => ({ ...prev, [field]: error }));\n };\n\n const handleSubmit = async () => {\n // Mark all fields as touched\n const allTouched = Object.keys(formData).reduce(\n (acc, key) => ({ ...acc, [key]: true }),\n {}\n );\n setTouched(allTouched);\n\n if (!validateAll()) return;\n\n setIsSubmitting(true);\n try {\n await onSubmit(formData);\n } catch (error) {\n setErrors({\n submit: error instanceof Error ? error.message : 'Submission failed'\n } as any);\n } finally {\n setIsSubmitting(false);\n }\n };\n\n return (\n <ScrollView>\n <Card padding=\"lg\">\n <Text variant=\"headline\" style={{ marginBottom: 24 }}>\n Contact Us\n </Text>\n\n <View style={{ gap: 16 }}>\n <Input\n label=\"Name *\"\n placeholder=\"Your full name\"\n value={formData.name}\n onChangeText={(v) => handleChange('name', v)}\n onBlur={() => handleBlur('name')}\n error={touched.name ? errors.name : undefined}\n />\n\n <Input\n label=\"Email *\"\n placeholder=\"you@example.com\"\n value={formData.email}\n onChangeText={(v) => handleChange('email', v)}\n onBlur={() => handleBlur('email')}\n keyboardType=\"email-address\"\n autoCapitalize=\"none\"\n error={touched.email ? errors.email : undefined}\n />\n\n <Input\n label=\"Phone\"\n placeholder=\"+1 234 567 8900\"\n value={formData.phone}\n onChangeText={(v) => handleChange('phone', v)}\n onBlur={() => handleBlur('phone')}\n keyboardType=\"phone-pad\"\n error={touched.phone ? errors.phone : undefined}\n />\n\n <Select\n label=\"Country *\"\n placeholder=\"Select your country\"\n value={formData.country}\n onChange={(v) => handleChange('country', v)}\n options={[\n { label: 'United States', value: 'us' },\n { label: 'United Kingdom', value: 'uk' },\n { label: 'Canada', value: 'ca' },\n { label: 'Australia', value: 'au' },\n { label: 'Other', value: 'other' },\n ]}\n error={touched.country ? errors.country : undefined}\n />\n\n <Input\n label=\"Message *\"\n placeholder=\"How can we help you?\"\n value={formData.message}\n onChangeText={(v) => handleChange('message', v)}\n onBlur={() => handleBlur('message')}\n multiline\n numberOfLines={4}\n error={touched.message ? errors.message : undefined}\n />\n\n <View style={{ flexDirection: 'row', alignItems: 'center', gap: 8 }}>\n <Checkbox\n checked={formData.subscribe}\n onChange={(v) => handleChange('subscribe', v)}\n />\n <Text>Subscribe to our newsletter</Text>\n </View>\n\n <Button\n onPress={handleSubmit}\n loading={isSubmitting}\n disabled={isSubmitting}\n style={{ marginTop: 8 }}\n >\n Send Message\n </Button>\n </View>\n </Card>\n </ScrollView>\n );\n}`,\n explanation: `This form demonstrates:\n- Field-level validation with custom rules\n- Validation on blur (after first touch)\n- Real-time validation after field is touched\n- Full form validation on submit\n- Error display with touched state tracking\n- Loading state during submission`,\n tips: [\n \"Consider using a form library like react-hook-form for complex forms\",\n \"Add success state/message after submission\",\n \"Implement autosave for long forms\",\n ],\n relatedRecipes: [\"login-form\", \"signup-form\"],\n },\n\n \"image-upload\": {\n name: \"Image Upload\",\n description: \"Image picker with preview, crop option, and upload progress\",\n category: \"media\",\n difficulty: \"intermediate\",\n packages: [\"@idealyst/components\", \"@idealyst/camera\"],\n code: `import React, { useState } from 'react';\nimport { Image } from 'react-native';\nimport { View, Text, Button, Card, Icon, Progress } from '@idealyst/components';\n// Note: You'll need expo-image-picker or react-native-image-picker\n\ninterface ImageUploadProps {\n onUpload: (uri: string) => Promise<string>; // Returns uploaded URL\n currentImage?: string;\n}\n\nexport function ImageUpload({ onUpload, currentImage }: ImageUploadProps) {\n const [imageUri, setImageUri] = useState<string | null>(currentImage || null);\n const [isUploading, setIsUploading] = useState(false);\n const [uploadProgress, setUploadProgress] = useState(0);\n const [error, setError] = useState<string | null>(null);\n\n const pickImage = async () => {\n try {\n // Using expo-image-picker as example\n const result = await ImagePicker.launchImageLibraryAsync({\n mediaTypes: ImagePicker.MediaTypeOptions.Images,\n allowsEditing: true,\n aspect: [1, 1],\n quality: 0.8,\n });\n\n if (!result.canceled && result.assets[0]) {\n setImageUri(result.assets[0].uri);\n setError(null);\n }\n } catch (err) {\n setError('Failed to pick image');\n }\n };\n\n const takePhoto = async () => {\n try {\n const result = await ImagePicker.launchCameraAsync({\n allowsEditing: true,\n aspect: [1, 1],\n quality: 0.8,\n });\n\n if (!result.canceled && result.assets[0]) {\n setImageUri(result.assets[0].uri);\n setError(null);\n }\n } catch (err) {\n setError('Failed to take photo');\n }\n };\n\n const handleUpload = async () => {\n if (!imageUri) return;\n\n setIsUploading(true);\n setUploadProgress(0);\n setError(null);\n\n try {\n // Simulate upload progress\n const progressInterval = setInterval(() => {\n setUploadProgress((prev) => Math.min(prev + 10, 90));\n }, 200);\n\n const uploadedUrl = await onUpload(imageUri);\n\n clearInterval(progressInterval);\n setUploadProgress(100);\n setImageUri(uploadedUrl);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Upload failed');\n } finally {\n setIsUploading(false);\n }\n };\n\n const removeImage = () => {\n setImageUri(null);\n setUploadProgress(0);\n setError(null);\n };\n\n return (\n <Card padding=\"lg\">\n <Text variant=\"title\" style={{ marginBottom: 16 }}>\n Profile Photo\n </Text>\n\n {/* Image Preview */}\n <View style={{ alignItems: 'center', marginBottom: 16 }}>\n {imageUri ? (\n <View style={{ position: 'relative' }}>\n <Image\n source={{ uri: imageUri }}\n style={{\n width: 150,\n height: 150,\n borderRadius: 75,\n }}\n />\n <Pressable\n onPress={removeImage}\n style={{\n position: 'absolute',\n top: 0,\n right: 0,\n backgroundColor: 'rgba(0,0,0,0.6)',\n borderRadius: 12,\n padding: 4,\n }}\n >\n <Icon name=\"close\" size={16} color=\"#fff\" />\n </Pressable>\n </View>\n ) : (\n <View\n style={{\n width: 150,\n height: 150,\n borderRadius: 75,\n backgroundColor: 'rgba(0,0,0,0.1)',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n <Icon name=\"account\" size={64} style={{ opacity: 0.3 }} />\n </View>\n )}\n </View>\n\n {/* Upload Progress */}\n {isUploading && (\n <View style={{ marginBottom: 16 }}>\n <Progress value={uploadProgress} />\n <Text size=\"sm\" style={{ textAlign: 'center', marginTop: 4 }}>\n Uploading... {uploadProgress}%\n </Text>\n </View>\n )}\n\n {/* Error Message */}\n {error && (\n <Text intent=\"danger\" style={{ textAlign: 'center', marginBottom: 16 }}>\n {error}\n </Text>\n )}\n\n {/* Action Buttons */}\n <View style={{ gap: 12 }}>\n <View style={{ flexDirection: 'row', gap: 12 }}>\n <Button\n type=\"outlined\"\n onPress={pickImage}\n disabled={isUploading}\n style={{ flex: 1 }}\n >\n <Icon name=\"image\" size={18} /> Gallery\n </Button>\n <Button\n type=\"outlined\"\n onPress={takePhoto}\n disabled={isUploading}\n style={{ flex: 1 }}\n >\n <Icon name=\"camera\" size={18} /> Camera\n </Button>\n </View>\n\n {imageUri && !imageUri.startsWith('http') && (\n <Button\n onPress={handleUpload}\n loading={isUploading}\n disabled={isUploading}\n >\n Upload Photo\n </Button>\n )}\n </View>\n </Card>\n );\n}\n\n// Usage\nfunction ProfileScreen() {\n const uploadImage = async (uri: string): Promise<string> => {\n // Upload to your server/cloud storage\n const formData = new FormData();\n formData.append('image', {\n uri,\n type: 'image/jpeg',\n name: 'photo.jpg',\n } as any);\n\n const response = await fetch('/api/upload', {\n method: 'POST',\n body: formData,\n });\n\n const { url } = await response.json();\n return url;\n };\n\n return (\n <ImageUpload\n currentImage=\"https://example.com/current-avatar.jpg\"\n onUpload={uploadImage}\n />\n );\n}`,\n explanation: `This image upload component provides:\n- Pick from gallery or take photo\n- Image preview with circular crop\n- Upload progress indicator\n- Error handling\n- Remove/replace image option\n- Works with any backend upload API`,\n tips: [\n \"Add image compression before upload to reduce size\",\n \"Consider using a CDN for image hosting\",\n \"Implement retry logic for failed uploads\",\n ],\n relatedRecipes: [\"form-with-validation\"],\n },\n\n \"web-stack-layout\": {\n name: \"Web Stack Layout\",\n description: \"Stack layout for web that mimics native stack navigator with header, back button, and title\",\n category: \"navigation\",\n difficulty: \"intermediate\",\n packages: [\"@idealyst/components\", \"@idealyst/navigation\"],\n code: `import React from 'react';\nimport { Outlet } from 'react-router-dom';\nimport { View, Text, Pressable, Icon } from '@idealyst/components';\nimport { useNavigator } from '@idealyst/navigation';\nimport type { StackLayoutProps, NavigatorOptions } from '@idealyst/navigation';\n\n/**\n * Web Stack Layout - mimics native stack navigator header\n *\n * Features:\n * - Header with title (from options.headerTitle)\n * - Automatic back button when canGoBack() is true\n * - Left and right header slots\n * - Hide header with headerShown: false\n */\nexport function WebStackLayout({ options }: StackLayoutProps) {\n const { canGoBack, goBack } = useNavigator();\n\n const showHeader = options?.headerShown !== false;\n const showBackButton = options?.headerBackVisible !== false && canGoBack();\n\n return (\n <View style={{ flex: 1 }}>\n {/* Header bar - like native stack header */}\n {showHeader && (\n <View style={{\n height: 56,\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 8,\n backgroundColor: '#ffffff',\n borderBottomWidth: 1,\n borderBottomColor: '#e0e0e0',\n // Web shadow\n boxShadow: '0 1px 3px rgba(0,0,0,0.1)',\n }}>\n {/* Back button */}\n {showBackButton && (\n <Pressable\n onPress={goBack}\n style={{\n width: 40,\n height: 40,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 20,\n }}\n >\n <Icon name=\"arrow-left\" size={24} />\n </Pressable>\n )}\n\n {/* Left header slot */}\n {options?.headerLeft && (\n <View style={{ marginLeft: 8 }}>\n {renderHeaderComponent(options.headerLeft)}\n </View>\n )}\n\n {/* Title */}\n <View style={{ flex: 1, marginHorizontal: 8 }}>\n {typeof options?.headerTitle === 'string' ? (\n <Text variant=\"title\" numberOfLines={1}>\n {options.headerTitle}\n </Text>\n ) : options?.headerTitle ? (\n renderHeaderComponent(options.headerTitle)\n ) : null}\n </View>\n\n {/* Right header slot */}\n {options?.headerRight && (\n <View>\n {renderHeaderComponent(options.headerRight)}\n </View>\n )}\n </View>\n )}\n\n {/* Content area - Outlet renders child routes */}\n <View style={{ flex: 1 }}>\n <Outlet />\n </View>\n </View>\n );\n}\n\n// Helper to render header components (can be React element or function)\nfunction renderHeaderComponent(\n component: React.ComponentType | React.ReactElement | undefined\n) {\n if (!component) return null;\n if (typeof component === 'function') {\n const Component = component;\n return <Component />;\n }\n return component;\n}\n\n// Usage in router config:\n// {\n// path: \"/\",\n// type: 'navigator',\n// layout: 'stack',\n// layoutComponent: WebStackLayout,\n// options: {\n// headerTitle: \"My App\",\n// headerRight: <UserMenu />,\n// },\n// routes: [...]\n// }`,\n explanation: `This layout mimics the native stack navigator header:\n\n**What it provides:**\n- Fixed header bar at the top (56px height like native)\n- Automatic back button that appears when canGoBack() returns true\n- headerTitle renders as text or custom component\n- headerLeft and headerRight slots for custom actions\n- headerShown: false hides the entire header\n- headerBackVisible: false hides just the back button\n\n**Key insight:** On web, canGoBack() checks if there's a parent route in the hierarchy, not browser history. This matches the native behavior where back goes \"up\" the navigation stack.`,\n tips: [\n \"Use options.headerShown: false for fullscreen content like media players\",\n \"The back button appears automatically - no need to manage visibility\",\n \"headerRight is great for action buttons, user menus, or search\",\n \"Wrap your entire app router with this for consistent headers\",\n ],\n relatedRecipes: [\"web-tab-layout\", \"web-drawer-layout\", \"responsive-navigation\"],\n },\n\n \"web-tab-layout\": {\n name: \"Web Tab Layout\",\n description: \"Tab layout for web that mimics native bottom tab navigator with icons, labels, and badges\",\n category: \"navigation\",\n difficulty: \"intermediate\",\n packages: [\"@idealyst/components\", \"@idealyst/navigation\"],\n code: `import React from 'react';\nimport { Outlet } from 'react-router-dom';\nimport { View, Text, Pressable, Icon, Badge } from '@idealyst/components';\nimport { useNavigator } from '@idealyst/navigation';\nimport type { TabLayoutProps } from '@idealyst/navigation';\n\n/**\n * Web Tab Layout - mimics native bottom tab navigator\n *\n * Features:\n * - Bottom tab bar (like iOS/Android)\n * - Icons from tabBarIcon option\n * - Labels from tabBarLabel option\n * - Badge counts from tabBarBadge option\n * - Active state highlighting\n */\nexport function WebTabLayout({ routes, currentPath }: TabLayoutProps) {\n const { navigate } = useNavigator();\n\n return (\n <View style={{ flex: 1 }}>\n {/* Content area - takes remaining space */}\n <View style={{ flex: 1 }}>\n <Outlet />\n </View>\n\n {/* Bottom tab bar */}\n <View style={{\n height: 56,\n flexDirection: 'row',\n backgroundColor: '#ffffff',\n borderTopWidth: 1,\n borderTopColor: '#e0e0e0',\n // Safe area padding for mobile web\n paddingBottom: 'env(safe-area-inset-bottom, 0px)',\n }}>\n {routes.map((route) => {\n // Check if this tab is active\n const isActive = currentPath === route.fullPath ||\n currentPath.startsWith(route.fullPath + '/');\n\n const tabOptions = route.options;\n const activeColor = '#007AFF';\n const inactiveColor = '#8E8E93';\n\n return (\n <Pressable\n key={route.fullPath}\n onPress={() => navigate({ path: route.fullPath })}\n style={{\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n paddingVertical: 4,\n }}\n >\n {/* Icon container with badge */}\n <View style={{ position: 'relative' }}>\n {tabOptions?.tabBarIcon?.({\n focused: isActive,\n color: isActive ? activeColor : inactiveColor,\n size: 24,\n })}\n\n {/* Badge */}\n {tabOptions?.tabBarBadge != null && (\n <View style={{\n position: 'absolute',\n top: -4,\n right: -12,\n minWidth: 18,\n height: 18,\n borderRadius: 9,\n backgroundColor: '#FF3B30',\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 4,\n }}>\n <Text style={{ color: '#fff', fontSize: 10, fontWeight: '600' }}>\n {typeof tabOptions.tabBarBadge === 'number' && tabOptions.tabBarBadge > 99\n ? '99+'\n : tabOptions.tabBarBadge}\n </Text>\n </View>\n )}\n </View>\n\n {/* Label */}\n {tabOptions?.tabBarLabel && (\n <Text\n size=\"xs\"\n style={{\n marginTop: 2,\n color: isActive ? activeColor : inactiveColor,\n fontWeight: isActive ? '600' : '400',\n }}\n >\n {tabOptions.tabBarLabel}\n </Text>\n )}\n </Pressable>\n );\n })}\n </View>\n </View>\n );\n}\n\n// Usage in router config:\n// {\n// path: \"/main\",\n// type: 'navigator',\n// layout: 'tab',\n// layoutComponent: WebTabLayout,\n// routes: [\n// {\n// path: \"home\",\n// type: 'screen',\n// component: HomeScreen,\n// options: {\n// tabBarLabel: \"Home\",\n// tabBarIcon: ({ focused, color }) => (\n// <Icon name={focused ? \"home\" : \"home-outline\"} color={color} />\n// ),\n// },\n// },\n// {\n// path: \"notifications\",\n// type: 'screen',\n// component: NotificationsScreen,\n// options: {\n// tabBarLabel: \"Notifications\",\n// tabBarIcon: ({ color }) => <Icon name=\"bell\" color={color} />,\n// tabBarBadge: 5,\n// },\n// },\n// ],\n// }`,\n explanation: `This layout mimics the native bottom tab bar:\n\n**What routes provide:**\n- \\`route.fullPath\\` - The complete path for navigation\n- \\`route.options.tabBarIcon\\` - Function that receives { focused, color, size }\n- \\`route.options.tabBarLabel\\` - Text label for the tab\n- \\`route.options.tabBarBadge\\` - Badge count (number or string)\n\n**Active state detection:**\n\\`currentPath === route.fullPath\\` - Exact match for active state\nOr use \\`startsWith\\` for nested routes under a tab\n\n**Platform parity:**\n- 56px tab bar height matches iOS/Android\n- Icon + label layout matches native patterns\n- Badge styling matches iOS notification badges\n- Safe area inset for mobile web browsers`,\n tips: [\n \"Use outlined/filled icon variants for focused state (home-outline vs home)\",\n \"Keep tab count to 3-5 for best usability\",\n \"Badge counts over 99 should show '99+' to fit\",\n \"Consider hiding the tab bar on detail screens with conditional rendering\",\n ],\n relatedRecipes: [\"web-stack-layout\", \"tab-navigation\", \"responsive-navigation\"],\n },\n\n \"web-drawer-layout\": {\n name: \"Web Drawer/Sidebar Layout\",\n description: \"Sidebar layout for web that provides persistent navigation menu with collapsible support\",\n category: \"navigation\",\n difficulty: \"intermediate\",\n packages: [\"@idealyst/components\", \"@idealyst/navigation\"],\n code: `import React, { useState } from 'react';\nimport { Outlet } from 'react-router-dom';\nimport { View, Text, Pressable, Icon, Avatar } from '@idealyst/components';\nimport { useNavigator } from '@idealyst/navigation';\nimport type { StackLayoutProps } from '@idealyst/navigation';\n\ninterface DrawerLayoutOptions {\n expandedWidth?: number;\n collapsedWidth?: number;\n initiallyCollapsed?: boolean;\n}\n\n/**\n * Web Drawer Layout - persistent sidebar navigation\n *\n * Features:\n * - Collapsible sidebar with smooth animation\n * - Active route highlighting\n * - Icon + label navigation items\n * - User profile section\n * - Works with any navigator layout type\n */\nexport function WebDrawerLayout({\n routes,\n currentPath,\n options,\n}: StackLayoutProps & { drawerOptions?: DrawerLayoutOptions }) {\n const { navigate } = useNavigator();\n const [isCollapsed, setIsCollapsed] = useState(false);\n\n const expandedWidth = 240;\n const collapsedWidth = 64;\n const sidebarWidth = isCollapsed ? collapsedWidth : expandedWidth;\n\n return (\n <View style={{ flex: 1, flexDirection: 'row' }}>\n {/* Sidebar */}\n <View style={{\n width: sidebarWidth,\n backgroundColor: '#1a1a2e',\n transition: 'width 0.2s ease',\n overflow: 'hidden',\n }}>\n {/* Logo / App Header */}\n <View style={{\n height: 64,\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 16,\n borderBottomWidth: 1,\n borderBottomColor: 'rgba(255,255,255,0.1)',\n }}>\n <Icon name=\"rocket\" size={28} color=\"#fff\" />\n {!isCollapsed && (\n <Text\n variant=\"title\"\n style={{ color: '#fff', marginLeft: 12 }}\n >\n {options?.headerTitle || 'My App'}\n </Text>\n )}\n </View>\n\n {/* Navigation Items */}\n <View style={{ flex: 1, paddingVertical: 8 }}>\n {routes.map((route) => {\n const isActive = currentPath === route.fullPath ||\n currentPath.startsWith(route.fullPath + '/');\n\n return (\n <Pressable\n key={route.fullPath}\n onPress={() => navigate({ path: route.fullPath })}\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: 12,\n paddingHorizontal: 16,\n marginHorizontal: 8,\n marginVertical: 2,\n borderRadius: 8,\n backgroundColor: isActive ? 'rgba(255,255,255,0.15)' : 'transparent',\n }}\n >\n <Icon\n name={route.options?.icon || 'circle'}\n size={24}\n color={isActive ? '#fff' : 'rgba(255,255,255,0.6)'}\n />\n {!isCollapsed && (\n <Text\n style={{\n marginLeft: 12,\n color: isActive ? '#fff' : 'rgba(255,255,255,0.6)',\n fontWeight: isActive ? '600' : '400',\n }}\n >\n {route.options?.title || route.path}\n </Text>\n )}\n </Pressable>\n );\n })}\n </View>\n\n {/* User Section (optional) */}\n <View style={{\n padding: 16,\n borderTopWidth: 1,\n borderTopColor: 'rgba(255,255,255,0.1)',\n }}>\n <Pressable\n style={{ flexDirection: 'row', alignItems: 'center' }}\n onPress={() => navigate({ path: '/profile' })}\n >\n <Avatar size=\"sm\" />\n {!isCollapsed && (\n <View style={{ marginLeft: 12 }}>\n <Text style={{ color: '#fff', fontWeight: '500' }}>John Doe</Text>\n <Text size=\"xs\" style={{ color: 'rgba(255,255,255,0.5)' }}>\n View profile\n </Text>\n </View>\n )}\n </Pressable>\n </View>\n\n {/* Collapse Toggle */}\n <Pressable\n onPress={() => setIsCollapsed(!isCollapsed)}\n style={{\n padding: 16,\n borderTopWidth: 1,\n borderTopColor: 'rgba(255,255,255,0.1)',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: isCollapsed ? 'center' : 'flex-start',\n }}\n >\n <Icon\n name={isCollapsed ? 'chevron-right' : 'chevron-left'}\n size={20}\n color=\"rgba(255,255,255,0.6)\"\n />\n {!isCollapsed && (\n <Text style={{ marginLeft: 12, color: 'rgba(255,255,255,0.6)' }}>\n Collapse\n </Text>\n )}\n </Pressable>\n </View>\n\n {/* Main Content */}\n <View style={{ flex: 1, backgroundColor: '#f5f5f5' }}>\n <Outlet />\n </View>\n </View>\n );\n}\n\n// Usage:\n// {\n// path: \"/\",\n// type: 'navigator',\n// layout: 'drawer', // or 'stack' - layout type doesn't matter for web\n// layoutComponent: WebDrawerLayout,\n// options: { headerTitle: \"Dashboard\" },\n// routes: [\n// { path: \"home\", component: Home, options: { title: \"Home\", icon: \"home\" } },\n// { path: \"users\", component: Users, options: { title: \"Users\", icon: \"account-group\" } },\n// { path: \"settings\", component: Settings, options: { title: \"Settings\", icon: \"cog\" } },\n// ],\n// }`,\n explanation: `This sidebar layout is ideal for dashboards and admin panels:\n\n**Route options used:**\n- \\`route.options.title\\` - Menu item label\n- \\`route.options.icon\\` - Material Design Icon name\n\n**Features:**\n- Collapsible sidebar with smooth width transition\n- Active state with background highlight\n- User profile section at bottom\n- Collapse toggle button\n- Dark theme (easily customizable)\n\n**Why this differs from mobile:**\nOn native, a drawer slides over content. On web, a persistent sidebar is more common and user-friendly. This layout provides the web-appropriate pattern while using the same route configuration.`,\n tips: [\n \"Add tooltips on collapsed icons using the title attribute\",\n \"Consider responsive behavior - hide sidebar on mobile, show bottom tabs instead\",\n \"Use the icon option on routes to define sidebar icons\",\n \"The collapse state could be persisted to localStorage\",\n ],\n relatedRecipes: [\"web-stack-layout\", \"responsive-navigation\", \"drawer-navigation\"],\n },\n\n \"responsive-navigation\": {\n name: \"Responsive Navigation Layout\",\n description: \"Layout that switches between bottom tabs on mobile and sidebar on desktop\",\n category: \"navigation\",\n difficulty: \"advanced\",\n packages: [\"@idealyst/components\", \"@idealyst/navigation\"],\n code: `import React, { useState, useEffect } from 'react';\nimport { Outlet } from 'react-router-dom';\nimport { View, Text, Pressable, Icon } from '@idealyst/components';\nimport { useNavigator } from '@idealyst/navigation';\nimport type { StackLayoutProps } from '@idealyst/navigation';\n\n// Custom hook for responsive breakpoints\nfunction useResponsive() {\n const [width, setWidth] = useState(\n typeof window !== 'undefined' ? window.innerWidth : 1024\n );\n\n useEffect(() => {\n const handleResize = () => setWidth(window.innerWidth);\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n return {\n isMobile: width < 768,\n isTablet: width >= 768 && width < 1024,\n isDesktop: width >= 1024,\n width,\n };\n}\n\n/**\n * Responsive Navigation Layout\n *\n * - Mobile (<768px): Bottom tab bar\n * - Desktop (>=768px): Sidebar navigation\n *\n * Uses the same route configuration for both!\n */\nexport function ResponsiveNavLayout({ routes, currentPath, options }: StackLayoutProps) {\n const { isMobile } = useResponsive();\n\n // Same routes power both layouts\n return isMobile ? (\n <MobileTabBar routes={routes} currentPath={currentPath} />\n ) : (\n <DesktopSidebar routes={routes} currentPath={currentPath} options={options} />\n );\n}\n\n// Mobile: Bottom tab bar\nfunction MobileTabBar({ routes, currentPath }: StackLayoutProps) {\n const { navigate } = useNavigator();\n\n return (\n <View style={{ flex: 1 }}>\n <View style={{ flex: 1 }}>\n <Outlet />\n </View>\n\n <View style={{\n flexDirection: 'row',\n height: 56,\n backgroundColor: '#fff',\n borderTopWidth: 1,\n borderTopColor: '#e0e0e0',\n paddingBottom: 'env(safe-area-inset-bottom, 0px)',\n }}>\n {routes.slice(0, 5).map((route) => {\n const isActive = currentPath.startsWith(route.fullPath);\n return (\n <Pressable\n key={route.fullPath}\n onPress={() => navigate({ path: route.fullPath })}\n style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}\n >\n <Icon\n name={route.options?.icon || 'circle'}\n size={24}\n color={isActive ? '#007AFF' : '#8E8E93'}\n />\n <Text\n size=\"xs\"\n style={{\n marginTop: 2,\n color: isActive ? '#007AFF' : '#8E8E93',\n }}\n >\n {route.options?.tabBarLabel || route.options?.title}\n </Text>\n </Pressable>\n );\n })}\n </View>\n </View>\n );\n}\n\n// Desktop: Sidebar\nfunction DesktopSidebar({ routes, currentPath, options }: StackLayoutProps) {\n const { navigate } = useNavigator();\n const [isCollapsed, setIsCollapsed] = useState(false);\n\n return (\n <View style={{ flex: 1, flexDirection: 'row' }}>\n {/* Sidebar */}\n <View style={{\n width: isCollapsed ? 64 : 240,\n backgroundColor: '#1e1e2d',\n transition: 'width 0.2s',\n }}>\n {/* Header */}\n <View style={{\n height: 64,\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 16,\n }}>\n <Icon name=\"rocket\" size={28} color=\"#fff\" />\n {!isCollapsed && (\n <Text style={{ color: '#fff', marginLeft: 12, fontWeight: '600' }}>\n {options?.headerTitle || 'App'}\n </Text>\n )}\n </View>\n\n {/* Nav Items */}\n <View style={{ flex: 1, paddingTop: 8 }}>\n {routes.map((route) => {\n const isActive = currentPath.startsWith(route.fullPath);\n return (\n <Pressable\n key={route.fullPath}\n onPress={() => navigate({ path: route.fullPath })}\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n padding: 12,\n marginHorizontal: 8,\n marginVertical: 2,\n borderRadius: 8,\n backgroundColor: isActive ? 'rgba(255,255,255,0.1)' : 'transparent',\n }}\n >\n <Icon\n name={route.options?.icon || 'circle'}\n size={24}\n color={isActive ? '#fff' : 'rgba(255,255,255,0.6)'}\n />\n {!isCollapsed && (\n <Text style={{\n marginLeft: 12,\n color: isActive ? '#fff' : 'rgba(255,255,255,0.6)',\n }}>\n {route.options?.title}\n </Text>\n )}\n </Pressable>\n );\n })}\n </View>\n\n {/* Collapse toggle */}\n <Pressable\n onPress={() => setIsCollapsed(!isCollapsed)}\n style={{ padding: 16 }}\n >\n <Icon\n name={isCollapsed ? 'menu' : 'menu-open'}\n size={24}\n color=\"rgba(255,255,255,0.6)\"\n />\n </Pressable>\n </View>\n\n {/* Content */}\n <View style={{ flex: 1 }}>\n <Outlet />\n </View>\n </View>\n );\n}\n\n// Usage - works with same routes for both mobile and desktop:\n// {\n// path: \"/\",\n// type: 'navigator',\n// layout: 'stack',\n// layoutComponent: ResponsiveNavLayout,\n// options: { headerTitle: \"My App\" },\n// routes: [\n// {\n// path: \"home\",\n// component: HomeScreen,\n// options: {\n// title: \"Home\", // Used by sidebar\n// tabBarLabel: \"Home\", // Used by tab bar\n// icon: \"home\", // Used by both\n// },\n// },\n// {\n// path: \"search\",\n// component: SearchScreen,\n// options: { title: \"Search\", tabBarLabel: \"Search\", icon: \"magnify\" },\n// },\n// // ... more routes\n// ],\n// }`,\n explanation: `This layout automatically adapts to screen size:\n\n**Breakpoint logic:**\n- Mobile (<768px): Bottom tab bar like native apps\n- Desktop (>=768px): Persistent sidebar like web apps\n\n**Key insight:** The same route configuration powers both layouts! Routes define:\n- \\`title\\` - Used by sidebar menu\n- \\`tabBarLabel\\` - Used by tab bar (falls back to title)\n- \\`icon\\` - Used by both\n\n**Why this matters:**\n1. Write routes once, render appropriately per device\n2. Users get the expected pattern for their device\n3. No need for separate mobile/desktop route configs\n4. Smooth transition when resizing browser\n\n**useResponsive hook:**\nCustom hook that tracks window width and provides boolean flags for breakpoints. Could be extended with more breakpoints or use a library like react-responsive.`,\n tips: [\n \"Limit mobile tabs to 5 items max (slice shown in code)\",\n \"Consider adding a 'More' tab that opens a menu for additional items\",\n \"Persist sidebar collapsed state to localStorage\",\n \"Add transition animation when switching between layouts\",\n \"Consider tablet-specific layout (sidebar + different styling)\",\n ],\n relatedRecipes: [\"web-stack-layout\", \"web-tab-layout\", \"web-drawer-layout\"],\n },\n};\n\n/**\n * Get all recipes grouped by category\n */\nexport function getRecipesByCategory(): Record<string, Recipe[]> {\n const grouped: Record<string, Recipe[]> = {};\n\n for (const recipe of Object.values(recipes)) {\n if (!grouped[recipe.category]) {\n grouped[recipe.category] = [];\n }\n grouped[recipe.category].push(recipe);\n }\n\n return grouped;\n}\n\n/**\n * Get a summary list of all recipes\n */\nexport function getRecipeSummary(): Array<{\n id: string;\n name: string;\n description: string;\n category: string;\n difficulty: string;\n packages: string[];\n}> {\n return Object.entries(recipes).map(([id, recipe]) => ({\n id,\n name: recipe.name,\n description: recipe.description,\n category: recipe.category,\n difficulty: recipe.difficulty,\n packages: recipe.packages,\n }));\n}\n\n/**\n * Search recipes by query\n */\nexport function searchRecipes(query: string): Recipe[] {\n const lowerQuery = query.toLowerCase();\n\n return Object.values(recipes).filter(\n (recipe) =>\n recipe.name.toLowerCase().includes(lowerQuery) ||\n recipe.description.toLowerCase().includes(lowerQuery) ||\n recipe.category.toLowerCase().includes(lowerQuery) ||\n recipe.packages.some((p) => p.toLowerCase().includes(lowerQuery))\n );\n}\n","/**\n * Installation Guides for Idealyst Packages\n *\n * Provides detailed installation instructions including:\n * - npm/yarn installation commands\n * - iOS configuration (Info.plist, CocoaPods)\n * - Android configuration (AndroidManifest.xml, Gradle)\n * - Additional dependencies and peer dependencies\n */\n\nexport interface InstallGuide {\n packageName: string;\n npmName: string;\n description: string;\n platforms: (\"web\" | \"native\" | \"node\")[];\n complexity: \"simple\" | \"moderate\" | \"complex\";\n\n // Basic installation\n installation: {\n yarn: string;\n npm: string;\n };\n\n // Peer dependencies to install\n peerDependencies?: {\n name: string;\n required: boolean;\n platforms: (\"web\" | \"native\")[];\n note?: string;\n }[];\n\n // iOS-specific configuration\n ios?: {\n podInstallRequired: boolean;\n infoPlistEntries?: {\n key: string;\n value: string;\n description: string;\n }[];\n additionalSteps?: string[];\n };\n\n // Android-specific configuration\n android?: {\n permissions?: {\n permission: string;\n description: string;\n }[];\n manifestEntries?: {\n location: string;\n xml: string;\n description: string;\n }[];\n gradleChanges?: {\n file: string;\n changes: string;\n description: string;\n }[];\n additionalSteps?: string[];\n };\n\n // Web-specific configuration\n web?: {\n additionalDependencies?: string[];\n bundlerConfig?: string;\n notes?: string[];\n };\n\n // Post-installation verification\n verification?: string;\n\n // Common issues and solutions\n troubleshooting?: {\n issue: string;\n solution: string;\n }[];\n}\n\nexport const installGuides: Record<string, InstallGuide> = {\n // ============================================================================\n // CORE PACKAGES\n // ============================================================================\n\n theme: {\n packageName: \"Theme\",\n npmName: \"@idealyst/theme\",\n description: \"Cross-platform theming system built on react-native-unistyles\",\n platforms: [\"web\", \"native\"],\n complexity: \"simple\",\n installation: {\n yarn: \"yarn add @idealyst/theme react-native-unistyles\",\n npm: \"npm install @idealyst/theme react-native-unistyles\",\n },\n peerDependencies: [\n {\n name: \"react-native-unistyles\",\n required: true,\n platforms: [\"web\", \"native\"],\n note: \"Required for styling system\",\n },\n ],\n ios: {\n podInstallRequired: true,\n additionalSteps: [\"cd ios && pod install\"],\n },\n android: {\n additionalSteps: [\n \"No additional configuration required - auto-linked by React Native\",\n ],\n },\n verification: `import { UnistylesProvider } from '@idealyst/theme';\n// Wrap your app with UnistylesProvider`,\n },\n\n components: {\n packageName: \"Components\",\n npmName: \"@idealyst/components\",\n description: \"Cross-platform React UI components for web and React Native\",\n platforms: [\"web\", \"native\"],\n complexity: \"moderate\",\n installation: {\n yarn: \"yarn add @idealyst/components @idealyst/theme\",\n npm: \"npm install @idealyst/components @idealyst/theme\",\n },\n peerDependencies: [\n {\n name: \"@idealyst/theme\",\n required: true,\n platforms: [\"web\", \"native\"],\n },\n {\n name: \"react-native-unistyles\",\n required: true,\n platforms: [\"web\", \"native\"],\n },\n {\n name: \"react-native-reanimated\",\n required: false,\n platforms: [\"native\"],\n note: \"Required for animated components\",\n },\n {\n name: \"react-native-safe-area-context\",\n required: false,\n platforms: [\"native\"],\n note: \"Required for Screen component\",\n },\n {\n name: \"react-native-vector-icons\",\n required: false,\n platforms: [\"native\"],\n note: \"Required for icons on native\",\n },\n {\n name: \"@mdi/react @mdi/js\",\n required: false,\n platforms: [\"web\"],\n note: \"Required for icons on web\",\n },\n ],\n ios: {\n podInstallRequired: true,\n additionalSteps: [\n \"cd ios && pod install\",\n \"If using vector icons, add fonts to Info.plist\",\n ],\n },\n android: {\n additionalSteps: [\n \"No additional configuration required for base components\",\n \"If using vector icons, follow react-native-vector-icons setup\",\n ],\n },\n web: {\n additionalDependencies: [\"@mdi/react\", \"@mdi/js\"],\n notes: [\n \"Icons use @mdi/react on web instead of vector-icons\",\n \"Ensure your bundler supports .web.tsx and .native.tsx extensions\",\n ],\n },\n },\n\n navigation: {\n packageName: \"Navigation\",\n npmName: \"@idealyst/navigation\",\n description: \"Unified navigation system for web and React Native\",\n platforms: [\"web\", \"native\"],\n complexity: \"moderate\",\n installation: {\n yarn: \"yarn add @idealyst/navigation\",\n npm: \"npm install @idealyst/navigation\",\n },\n peerDependencies: [\n {\n name: \"@react-navigation/native @react-navigation/stack @react-navigation/bottom-tabs\",\n required: true,\n platforms: [\"native\"],\n note: \"Required for native navigation\",\n },\n {\n name: \"react-native-screens react-native-safe-area-context\",\n required: true,\n platforms: [\"native\"],\n note: \"Required dependencies for React Navigation\",\n },\n {\n name: \"react-native-gesture-handler\",\n required: true,\n platforms: [\"native\"],\n note: \"Required for gesture-based navigation\",\n },\n {\n name: \"react-router react-router-dom\",\n required: true,\n platforms: [\"web\"],\n note: \"Required for web routing\",\n },\n ],\n ios: {\n podInstallRequired: true,\n additionalSteps: [\n \"cd ios && pod install\",\n \"Add to the top of index.js or App.tsx: import 'react-native-gesture-handler';\",\n ],\n },\n android: {\n additionalSteps: [\n \"Ensure react-native-screens is configured in MainActivity\",\n \"Add to the top of index.js or App.tsx: import 'react-native-gesture-handler';\",\n ],\n },\n web: {\n additionalDependencies: [\"react-router\", \"react-router-dom\"],\n },\n },\n\n // ============================================================================\n // MEDIA PACKAGES (Complex Native Setup)\n // ============================================================================\n\n camera: {\n packageName: \"Camera\",\n npmName: \"@idealyst/camera\",\n description:\n \"Cross-platform camera component for photo and video capture using Vision Camera\",\n platforms: [\"web\", \"native\"],\n complexity: \"complex\",\n installation: {\n yarn: \"yarn add @idealyst/camera react-native-vision-camera\",\n npm: \"npm install @idealyst/camera react-native-vision-camera\",\n },\n peerDependencies: [\n {\n name: \"react-native-vision-camera\",\n required: true,\n platforms: [\"native\"],\n note: \"Core camera functionality for React Native\",\n },\n {\n name: \"react-native-worklets-core\",\n required: false,\n platforms: [\"native\"],\n note: \"Required for frame processors\",\n },\n ],\n ios: {\n podInstallRequired: true,\n infoPlistEntries: [\n {\n key: \"NSCameraUsageDescription\",\n value: \"$(PRODUCT_NAME) needs access to your camera\",\n description: \"Required: Camera permission description\",\n },\n {\n key: \"NSMicrophoneUsageDescription\",\n value: \"$(PRODUCT_NAME) needs access to your microphone for video recording\",\n description: \"Required for video recording with audio\",\n },\n {\n key: \"NSPhotoLibraryUsageDescription\",\n value: \"$(PRODUCT_NAME) needs access to your photo library to save photos\",\n description: \"Optional: Only if saving to photo library\",\n },\n ],\n additionalSteps: [\n \"cd ios && pod install\",\n \"Ensure minimum iOS deployment target is 13.0 or higher\",\n \"For advanced features, see: https://react-native-vision-camera.com/docs/guides/\",\n ],\n },\n android: {\n permissions: [\n {\n permission: \"android.permission.CAMERA\",\n description: \"Required: Camera access\",\n },\n {\n permission: \"android.permission.RECORD_AUDIO\",\n description: \"Required for video recording with audio\",\n },\n {\n permission: \"android.permission.WRITE_EXTERNAL_STORAGE\",\n description: \"Optional: Only if saving to external storage (API < 29)\",\n },\n ],\n manifestEntries: [\n {\n location: \"AndroidManifest.xml (inside <manifest>)\",\n xml: `<uses-permission android:name=\"android.permission.CAMERA\" />\n<uses-permission android:name=\"android.permission.RECORD_AUDIO\" />\n\n<!-- Required for camera features -->\n<uses-feature android:name=\"android.hardware.camera\" android:required=\"false\" />\n<uses-feature android:name=\"android.hardware.camera.autofocus\" android:required=\"false\" />`,\n description: \"Camera and audio permissions\",\n },\n ],\n additionalSteps: [\n \"Ensure minSdkVersion is 21 or higher in android/build.gradle\",\n \"Enable Kotlin if not already enabled\",\n \"For CameraX features, ensure you have the latest camera libraries\",\n ],\n },\n web: {\n notes: [\n \"Uses native MediaDevices API (WebRTC)\",\n \"Requires HTTPS in production for camera access\",\n \"User must grant camera permission in browser\",\n ],\n },\n verification: `import { Camera, useCameraPermission } from '@idealyst/camera';\n\nconst { hasPermission, requestPermission } = useCameraPermission();\nif (!hasPermission) {\n await requestPermission();\n}`,\n troubleshooting: [\n {\n issue: \"Camera not showing on iOS\",\n solution:\n \"Ensure NSCameraUsageDescription is in Info.plist and rebuild the app\",\n },\n {\n issue: \"Permission denied on Android\",\n solution:\n \"Check AndroidManifest.xml has CAMERA permission and user granted it at runtime\",\n },\n {\n issue: \"Build fails with Vision Camera\",\n solution:\n \"Ensure you have the latest CocoaPods (iOS) or Gradle (Android) and clean build\",\n },\n ],\n },\n\n audio: {\n packageName: \"Audio\",\n npmName: \"@idealyst/audio\",\n description:\n \"Unified cross-platform audio for recording, playback, and PCM streaming using React Native Audio API\",\n platforms: [\"web\", \"native\"],\n complexity: \"complex\",\n installation: {\n yarn: \"yarn add @idealyst/audio react-native-audio-api\",\n npm: \"npm install @idealyst/audio react-native-audio-api\",\n },\n peerDependencies: [\n {\n name: \"react-native-audio-api\",\n required: true,\n platforms: [\"native\"],\n note: \"Core audio API for React Native (Web Audio API polyfill)\",\n },\n ],\n ios: {\n podInstallRequired: true,\n infoPlistEntries: [\n {\n key: \"NSMicrophoneUsageDescription\",\n value: \"$(PRODUCT_NAME) needs access to your microphone to record audio\",\n description: \"Required for recording: Microphone permission description\",\n },\n ],\n additionalSteps: [\n \"cd ios && pod install\",\n \"Ensure minimum iOS deployment target is 13.0 or higher\",\n \"For background audio, add audio background mode to Info.plist\",\n \"Audio session is auto-configured for playAndRecord mode\",\n ],\n },\n android: {\n permissions: [\n {\n permission: \"android.permission.RECORD_AUDIO\",\n description: \"Required for recording: Microphone access\",\n },\n ],\n manifestEntries: [\n {\n location: \"AndroidManifest.xml (inside <manifest>)\",\n xml: `<uses-permission android:name=\"android.permission.RECORD_AUDIO\" />`,\n description: \"Microphone permission for recording\",\n },\n ],\n additionalSteps: [\n \"Ensure minSdkVersion is 21 or higher\",\n \"Permission must be requested at runtime on Android 6.0+\",\n \"No additional permissions required for playback only\",\n ],\n },\n web: {\n notes: [\n \"Uses Web Audio API for recording and playback\",\n \"Requires HTTPS in production for microphone access\",\n \"User must grant microphone permission in browser for recording\",\n \"No permissions required for playback only\",\n \"Supports PCM streaming for real-time TTS playback\",\n ],\n },\n verification: `import { useRecorder, usePlayer, useAudio, AUDIO_PROFILES } from '@idealyst/audio';\n\n// Initialize audio session (recommended)\nconst audio = useAudio();\n\n// Recording\nconst recorder = useRecorder({ config: AUDIO_PROFILES.speech });\nawait recorder.start();\n// ... later\nawait recorder.stop();\n\n// File playback\nconst player = usePlayer();\nawait player.loadFile('/audio/music.mp3');\nawait player.play();\n\n// PCM streaming (for TTS)\nawait player.loadPCMStream(AUDIO_PROFILES.speech);\nawait player.play();\nplayer.feedPCMData(pcmData);`,\n troubleshooting: [\n {\n issue: \"No audio data received during recording\",\n solution:\n \"Ensure microphone permission is granted and check subscribeToData callback\",\n },\n {\n issue: \"Build fails on iOS\",\n solution:\n \"Run pod install and ensure NSMicrophoneUsageDescription is set in Info.plist\",\n },\n {\n issue: \"Permission prompt not appearing on web\",\n solution: \"Ensure page is served over HTTPS (required for getUserMedia)\",\n },\n {\n issue: \"Recording and playback conflict on iOS\",\n solution:\n \"Use useAudio() hook to initialize session with playAndRecord category, or use SESSION_PRESETS.voiceChat\",\n },\n {\n issue: \"Audio cuts out when switching between recording and playback\",\n solution:\n \"Ensure audio session is configured with SESSION_PRESETS.default which enables simultaneous recording and playback\",\n },\n ],\n },\n\n // ============================================================================\n // DATA & STORAGE PACKAGES\n // ============================================================================\n\n storage: {\n packageName: \"Storage\",\n npmName: \"@idealyst/storage\",\n description:\n \"Cross-platform key-value storage with MMKV on native and localStorage on web\",\n platforms: [\"web\", \"native\"],\n complexity: \"moderate\",\n installation: {\n yarn: \"yarn add @idealyst/storage react-native-mmkv\",\n npm: \"npm install @idealyst/storage react-native-mmkv\",\n },\n peerDependencies: [\n {\n name: \"react-native-mmkv\",\n required: true,\n platforms: [\"native\"],\n note: \"High-performance storage for React Native\",\n },\n ],\n ios: {\n podInstallRequired: true,\n additionalSteps: [\n \"cd ios && pod install\",\n \"MMKV requires iOS 11.0 or higher\",\n ],\n },\n android: {\n additionalSteps: [\n \"No additional configuration required\",\n \"MMKV auto-links with React Native\",\n \"Ensure minSdkVersion is 21 or higher\",\n ],\n },\n web: {\n notes: [\n \"Uses localStorage as the storage backend\",\n \"Falls back gracefully if localStorage is unavailable\",\n \"API is identical across platforms\",\n ],\n },\n verification: `import { storage } from '@idealyst/storage';\n\nawait storage.set('key', { data: 'value' });\nconst data = await storage.get('key');`,\n },\n\n datagrid: {\n packageName: \"DataGrid\",\n npmName: \"@idealyst/datagrid\",\n description:\n \"High-performance virtualized data grid for large datasets\",\n platforms: [\"web\", \"native\"],\n complexity: \"simple\",\n installation: {\n yarn: \"yarn add @idealyst/datagrid @idealyst/components @idealyst/theme\",\n npm: \"npm install @idealyst/datagrid @idealyst/components @idealyst/theme\",\n },\n peerDependencies: [\n {\n name: \"@idealyst/components\",\n required: true,\n platforms: [\"web\", \"native\"],\n },\n {\n name: \"@idealyst/theme\",\n required: true,\n platforms: [\"web\", \"native\"],\n },\n {\n name: \"react-window\",\n required: true,\n platforms: [\"web\"],\n note: \"Virtualization library for web\",\n },\n ],\n web: {\n additionalDependencies: [\"react-window\"],\n notes: [\"Uses react-window for virtualized rendering on web\"],\n },\n },\n\n // ============================================================================\n // AUTH PACKAGES\n // ============================================================================\n\n \"oauth-client\": {\n packageName: \"OAuth Client\",\n npmName: \"@idealyst/oauth-client\",\n description: \"Universal OAuth2 client with PKCE support for web and React Native\",\n platforms: [\"web\", \"native\"],\n complexity: \"complex\",\n installation: {\n yarn: \"yarn add @idealyst/oauth-client @idealyst/storage\",\n npm: \"npm install @idealyst/oauth-client @idealyst/storage\",\n },\n peerDependencies: [\n {\n name: \"@idealyst/storage\",\n required: true,\n platforms: [\"web\", \"native\"],\n note: \"Required for secure token storage\",\n },\n ],\n ios: {\n podInstallRequired: true,\n infoPlistEntries: [\n {\n key: \"CFBundleURLTypes\",\n value: `<array>\n <dict>\n <key>CFBundleURLSchemes</key>\n <array>\n <string>com.yourapp</string>\n </array>\n </dict>\n</array>`,\n description: \"URL scheme for OAuth callback deep links\",\n },\n ],\n additionalSteps: [\n \"cd ios && pod install\",\n \"Replace 'com.yourapp' with your app's bundle identifier or custom scheme\",\n \"Handle the URL in your AppDelegate or SceneDelegate\",\n ],\n },\n android: {\n manifestEntries: [\n {\n location: \"AndroidManifest.xml (inside <activity> for MainActivity)\",\n xml: `<intent-filter android:label=\"oauth_callback\">\n <action android:name=\"android.intent.action.VIEW\" />\n <category android:name=\"android.intent.category.DEFAULT\" />\n <category android:name=\"android.intent.category.BROWSABLE\" />\n <data android:scheme=\"com.yourapp\" />\n</intent-filter>`,\n description:\n \"Deep link handler for OAuth callback. Replace 'com.yourapp' with your scheme.\",\n },\n ],\n additionalSteps: [\n \"Replace 'com.yourapp' with your app's package name or custom scheme\",\n \"Ensure the scheme matches your OAuth provider's redirect URI configuration\",\n ],\n },\n web: {\n notes: [\n \"Uses standard browser redirect for OAuth flow\",\n \"Tokens are stored in localStorage via @idealyst/storage\",\n \"Configure your OAuth provider to allow your web app's origin\",\n ],\n },\n verification: `import { OAuthClient } from '@idealyst/oauth-client';\n\nconst oauth = new OAuthClient({\n clientId: 'your-client-id',\n authorizationEndpoint: 'https://auth.example.com/authorize',\n tokenEndpoint: 'https://auth.example.com/token',\n redirectUri: 'com.yourapp://callback',\n});\n\nawait oauth.login();`,\n troubleshooting: [\n {\n issue: \"OAuth redirect not returning to app (iOS)\",\n solution:\n \"Ensure CFBundleURLSchemes in Info.plist matches your redirectUri scheme\",\n },\n {\n issue: \"OAuth redirect not returning to app (Android)\",\n solution:\n \"Ensure intent-filter scheme in AndroidManifest matches your redirectUri\",\n },\n {\n issue: \"CORS errors on token exchange (web)\",\n solution:\n \"Token exchange must be done server-side or ensure provider supports CORS\",\n },\n ],\n },\n\n // ============================================================================\n // UI PACKAGES\n // ============================================================================\n\n datepicker: {\n packageName: \"DatePicker\",\n npmName: \"@idealyst/datepicker\",\n description: \"Cross-platform date and time picker components\",\n platforms: [\"web\", \"native\"],\n complexity: \"simple\",\n installation: {\n yarn: \"yarn add @idealyst/datepicker @idealyst/theme\",\n npm: \"npm install @idealyst/datepicker @idealyst/theme\",\n },\n peerDependencies: [\n {\n name: \"@idealyst/theme\",\n required: true,\n platforms: [\"web\", \"native\"],\n },\n {\n name: \"react-native-svg\",\n required: false,\n platforms: [\"native\"],\n note: \"Required for calendar icons\",\n },\n ],\n ios: {\n podInstallRequired: true,\n additionalSteps: [\"cd ios && pod install (if using react-native-svg)\"],\n },\n },\n\n markdown: {\n packageName: \"Markdown\",\n npmName: \"@idealyst/markdown\",\n description:\n \"Cross-platform markdown renderer with GitHub Flavored Markdown support\",\n platforms: [\"web\", \"native\"],\n complexity: \"moderate\",\n installation: {\n yarn: \"yarn add @idealyst/markdown @idealyst/theme\",\n npm: \"npm install @idealyst/markdown @idealyst/theme\",\n },\n peerDependencies: [\n {\n name: \"@idealyst/theme\",\n required: true,\n platforms: [\"web\", \"native\"],\n },\n {\n name: \"react-markdown remark-gfm\",\n required: true,\n platforms: [\"web\"],\n note: \"Required for web markdown rendering\",\n },\n {\n name: \"react-native-markdown-display react-native-webview\",\n required: true,\n platforms: [\"native\"],\n note: \"Required for native markdown rendering\",\n },\n ],\n ios: {\n podInstallRequired: true,\n additionalSteps: [\n \"cd ios && pod install\",\n \"WebView requires additional iOS configuration for some features\",\n ],\n },\n android: {\n additionalSteps: [\n \"No additional configuration for basic markdown\",\n \"WebView is included in React Native by default\",\n ],\n },\n web: {\n additionalDependencies: [\"react-markdown\", \"remark-gfm\"],\n },\n },\n\n blur: {\n packageName: \"Blur\",\n npmName: \"@idealyst/blur\",\n description: \"Cross-platform blur component\",\n platforms: [\"web\", \"native\"],\n complexity: \"moderate\",\n installation: {\n yarn: \"yarn add @idealyst/blur @react-native-community/blur\",\n npm: \"npm install @idealyst/blur @react-native-community/blur\",\n },\n peerDependencies: [\n {\n name: \"@react-native-community/blur\",\n required: true,\n platforms: [\"native\"],\n note: \"Native blur implementation\",\n },\n ],\n ios: {\n podInstallRequired: true,\n additionalSteps: [\"cd ios && pod install\"],\n },\n android: {\n additionalSteps: [\n \"Blur uses RenderScript which is included in Android SDK\",\n \"Ensure compileSdkVersion is 31 or higher\",\n ],\n },\n web: {\n notes: [\"Uses CSS backdrop-filter for blur effect on web\"],\n },\n },\n\n lottie: {\n packageName: \"Lottie\",\n npmName: \"@idealyst/lottie\",\n description: \"Cross-platform Lottie animation support\",\n platforms: [\"web\", \"native\"],\n complexity: \"moderate\",\n installation: {\n yarn: \"yarn add @idealyst/lottie lottie-react-native lottie-web\",\n npm: \"npm install @idealyst/lottie lottie-react-native lottie-web\",\n },\n peerDependencies: [\n {\n name: \"lottie-react-native\",\n required: true,\n platforms: [\"native\"],\n note: \"Native Lottie player\",\n },\n {\n name: \"lottie-web\",\n required: true,\n platforms: [\"web\"],\n note: \"Web Lottie player\",\n },\n ],\n ios: {\n podInstallRequired: true,\n additionalSteps: [\"cd ios && pod install\"],\n },\n android: {\n additionalSteps: [\"No additional configuration required\"],\n },\n },\n\n animate: {\n packageName: \"Animate\",\n npmName: \"@idealyst/animate\",\n description: \"Cross-platform animation utilities\",\n platforms: [\"web\", \"native\"],\n complexity: \"moderate\",\n installation: {\n yarn: \"yarn add @idealyst/animate react-native-reanimated\",\n npm: \"npm install @idealyst/animate react-native-reanimated\",\n },\n peerDependencies: [\n {\n name: \"react-native-reanimated\",\n required: true,\n platforms: [\"native\"],\n note: \"Core animation library\",\n },\n {\n name: \"react-native-svg\",\n required: false,\n platforms: [\"native\"],\n note: \"Required for animated SVGs\",\n },\n ],\n ios: {\n podInstallRequired: true,\n additionalSteps: [\"cd ios && pod install\"],\n },\n android: {\n additionalSteps: [\n \"Add Reanimated Babel plugin to babel.config.js:\",\n \"plugins: ['react-native-reanimated/plugin']\",\n \"Ensure Hermes is enabled for best performance\",\n ],\n },\n },\n\n // ============================================================================\n // UTILITY PACKAGES\n // ============================================================================\n\n translate: {\n packageName: \"Translate\",\n npmName: \"@idealyst/translate\",\n description: \"Internationalization (i18n) package with Babel plugin support\",\n platforms: [\"web\", \"native\"],\n complexity: \"simple\",\n installation: {\n yarn: \"yarn add @idealyst/translate i18next react-i18next\",\n npm: \"npm install @idealyst/translate i18next react-i18next\",\n },\n peerDependencies: [\n {\n name: \"i18next\",\n required: true,\n platforms: [\"web\", \"native\"],\n },\n {\n name: \"react-i18next\",\n required: true,\n platforms: [\"web\", \"native\"],\n },\n ],\n verification: `import { TranslateProvider, useTranslation } from '@idealyst/translate';\n\n<TranslateProvider translations={translations} defaultLanguage=\"en\">\n <App />\n</TranslateProvider>`,\n },\n\n config: {\n packageName: \"Config\",\n npmName: \"@idealyst/config\",\n description:\n \"Cross-platform configuration and environment variable support\",\n platforms: [\"web\", \"native\", \"node\"],\n complexity: \"moderate\",\n installation: {\n yarn: \"yarn add @idealyst/config react-native-config\",\n npm: \"npm install @idealyst/config react-native-config\",\n },\n peerDependencies: [\n {\n name: \"react-native-config\",\n required: true,\n platforms: [\"native\"],\n note: \"Required for native environment variables\",\n },\n ],\n ios: {\n podInstallRequired: true,\n additionalSteps: [\n \"cd ios && pod install\",\n \"Create .env file in project root\",\n \"Add .env to .gitignore\",\n ],\n },\n android: {\n gradleChanges: [\n {\n file: \"android/app/build.gradle\",\n changes: `apply from: project(':react-native-config').projectDir.getPath() + \"/dotenv.gradle\"`,\n description: \"Add dotenv gradle plugin for environment variables\",\n },\n ],\n additionalSteps: [\n \"Create .env file in project root\",\n \"Add .env to .gitignore\",\n ],\n },\n web: {\n notes: [\n \"Uses Vite's import.meta.env or process.env depending on bundler\",\n \"Configure environment variables in your bundler (Vite, Webpack, etc.)\",\n ],\n },\n },\n\n // ============================================================================\n // TOOLING PACKAGES\n // ============================================================================\n\n cli: {\n packageName: \"CLI\",\n npmName: \"@idealyst/cli\",\n description: \"Command-line tool for generating Idealyst projects\",\n platforms: [\"node\"],\n complexity: \"simple\",\n installation: {\n yarn: \"yarn global add @idealyst/cli\",\n npm: \"npm install -g @idealyst/cli\",\n },\n verification: `# Create a new workspace\nnpx @idealyst/cli init my-app\n\n# Or use directly without installing\nnpx @idealyst/cli create mobile --type native`,\n },\n\n tooling: {\n packageName: \"Tooling\",\n npmName: \"@idealyst/tooling\",\n description: \"Code analysis and validation utilities for Idealyst Framework\",\n platforms: [\"node\"],\n complexity: \"simple\",\n installation: {\n yarn: \"yarn add -D @idealyst/tooling\",\n npm: \"npm install -D @idealyst/tooling\",\n },\n verification: `// vite.config.ts\nimport { idealystPlugin } from '@idealyst/tooling/vite';\n\nexport default {\n plugins: [idealystPlugin()],\n};`,\n },\n\n \"mcp-server\": {\n packageName: \"MCP Server\",\n npmName: \"@idealyst/mcp-server\",\n description:\n \"Model Context Protocol server for AI assistant integration\",\n platforms: [\"node\"],\n complexity: \"simple\",\n installation: {\n yarn: \"yarn add @idealyst/mcp-server\",\n npm: \"npm install @idealyst/mcp-server\",\n },\n verification: `// .mcp.json (Claude Code)\n{\n \"mcpServers\": {\n \"idealyst\": {\n \"command\": \"node\",\n \"args\": [\"node_modules/@idealyst/mcp-server/dist/index.js\"]\n }\n }\n}`,\n },\n};\n\n/**\n * Get installation guide for a package\n */\nexport function getInstallGuide(packageName: string): InstallGuide | undefined {\n const normalizedName = packageName.replace(\"@idealyst/\", \"\").toLowerCase();\n return installGuides[normalizedName];\n}\n\n/**\n * Get all packages that require complex native setup\n */\nexport function getComplexPackages(): InstallGuide[] {\n return Object.values(installGuides).filter((g) => g.complexity === \"complex\");\n}\n\n/**\n * Get all packages by complexity level\n */\nexport function getPackagesByComplexity(\n complexity: \"simple\" | \"moderate\" | \"complex\"\n): InstallGuide[] {\n return Object.values(installGuides).filter((g) => g.complexity === complexity);\n}\n\n/**\n * Format installation guide as markdown\n */\nexport function formatInstallGuideMarkdown(guide: InstallGuide): string {\n let md = `# ${guide.packageName} Installation Guide\n\n**Package:** \\`${guide.npmName}\\`\n**Platforms:** ${guide.platforms.join(\", \")}\n**Complexity:** ${guide.complexity}\n\n${guide.description}\n\n## Installation\n\n\\`\\`\\`bash\n# Using Yarn\n${guide.installation.yarn}\n\n# Using npm\n${guide.installation.npm}\n\\`\\`\\`\n`;\n\n // Peer Dependencies\n if (guide.peerDependencies && guide.peerDependencies.length > 0) {\n md += `\\n## Peer Dependencies\\n\\n`;\n for (const dep of guide.peerDependencies) {\n const required = dep.required ? \"**Required**\" : \"Optional\";\n const platforms = dep.platforms.join(\", \");\n md += `- \\`${dep.name}\\` - ${required} (${platforms})`;\n if (dep.note) {\n md += ` - ${dep.note}`;\n }\n md += \"\\n\";\n }\n }\n\n // iOS Configuration\n if (guide.ios && guide.platforms.includes(\"native\")) {\n md += `\\n## iOS Configuration\\n\\n`;\n\n if (guide.ios.podInstallRequired) {\n md += `\\`\\`\\`bash\ncd ios && pod install\n\\`\\`\\`\\n\\n`;\n }\n\n if (guide.ios.infoPlistEntries && guide.ios.infoPlistEntries.length > 0) {\n md += `### Info.plist Entries\\n\\nAdd the following to your \\`ios/YourApp/Info.plist\\`:\\n\\n\\`\\`\\`xml\\n`;\n for (const entry of guide.ios.infoPlistEntries) {\n md += `<!-- ${entry.description} -->\\n`;\n md += `<key>${entry.key}</key>\\n`;\n if (entry.value.includes(\"<\")) {\n md += `${entry.value}\\n`;\n } else {\n md += `<string>${entry.value}</string>\\n`;\n }\n md += \"\\n\";\n }\n md += `\\`\\`\\`\\n`;\n }\n\n if (guide.ios.additionalSteps && guide.ios.additionalSteps.length > 0) {\n md += `### Additional Steps\\n\\n`;\n for (const step of guide.ios.additionalSteps) {\n md += `- ${step}\\n`;\n }\n }\n }\n\n // Android Configuration\n if (guide.android && guide.platforms.includes(\"native\")) {\n md += `\\n## Android Configuration\\n\\n`;\n\n if (guide.android.permissions && guide.android.permissions.length > 0) {\n md += `### Permissions\\n\\nAdd to \\`android/app/src/main/AndroidManifest.xml\\`:\\n\\n\\`\\`\\`xml\\n`;\n for (const perm of guide.android.permissions) {\n md += `<!-- ${perm.description} -->\\n`;\n md += `<uses-permission android:name=\"${perm.permission}\" />\\n`;\n }\n md += `\\`\\`\\`\\n`;\n }\n\n if (guide.android.manifestEntries && guide.android.manifestEntries.length > 0) {\n md += `### Manifest Entries\\n\\n`;\n for (const entry of guide.android.manifestEntries) {\n md += `**${entry.location}:**\\n`;\n md += `\\n\\`\\`\\`xml\\n${entry.xml}\\n\\`\\`\\`\\n\\n`;\n md += `_${entry.description}_\\n\\n`;\n }\n }\n\n if (guide.android.gradleChanges && guide.android.gradleChanges.length > 0) {\n md += `### Gradle Changes\\n\\n`;\n for (const change of guide.android.gradleChanges) {\n md += `**${change.file}:**\\n`;\n md += `\\n\\`\\`\\`groovy\\n${change.changes}\\n\\`\\`\\`\\n\\n`;\n md += `_${change.description}_\\n\\n`;\n }\n }\n\n if (guide.android.additionalSteps && guide.android.additionalSteps.length > 0) {\n md += `### Additional Steps\\n\\n`;\n for (const step of guide.android.additionalSteps) {\n md += `- ${step}\\n`;\n }\n }\n }\n\n // Web Configuration\n if (guide.web && guide.platforms.includes(\"web\")) {\n md += `\\n## Web Configuration\\n\\n`;\n\n if (guide.web.additionalDependencies && guide.web.additionalDependencies.length > 0) {\n md += `### Additional Dependencies\\n\\n\\`\\`\\`bash\\nyarn add ${guide.web.additionalDependencies.join(\" \")}\\n\\`\\`\\`\\n\\n`;\n }\n\n if (guide.web.bundlerConfig) {\n md += `### Bundler Configuration\\n\\n\\`\\`\\`js\\n${guide.web.bundlerConfig}\\n\\`\\`\\`\\n\\n`;\n }\n\n if (guide.web.notes && guide.web.notes.length > 0) {\n md += `### Notes\\n\\n`;\n for (const note of guide.web.notes) {\n md += `- ${note}\\n`;\n }\n }\n }\n\n // Verification\n if (guide.verification) {\n md += `\\n## Verification\\n\\nTest your installation:\\n\\n\\`\\`\\`tsx\\n${guide.verification}\\n\\`\\`\\`\\n`;\n }\n\n // Troubleshooting\n if (guide.troubleshooting && guide.troubleshooting.length > 0) {\n md += `\\n## Troubleshooting\\n\\n`;\n for (const item of guide.troubleshooting) {\n md += `### ${item.issue}\\n\\n${item.solution}\\n\\n`;\n }\n }\n\n return md;\n}\n","{\n \"total\": 7447,\n \"icons\": [\n \"ab-testing\",\n \"abacus\",\n \"abjad-arabic\",\n \"abjad-hebrew\",\n \"abugida-devanagari\",\n \"abugida-thai\",\n \"access-point\",\n \"access-point-check\",\n \"access-point-minus\",\n \"access-point-network\",\n \"access-point-network-off\",\n \"access-point-off\",\n \"access-point-plus\",\n \"access-point-remove\",\n \"account\",\n \"account-alert\",\n \"account-alert-outline\",\n \"account-arrow-down\",\n \"account-arrow-down-outline\",\n \"account-arrow-left\",\n \"account-arrow-left-outline\",\n \"account-arrow-right\",\n \"account-arrow-right-outline\",\n \"account-arrow-up\",\n \"account-arrow-up-outline\",\n \"account-badge\",\n \"account-badge-outline\",\n \"account-box\",\n \"account-box-edit-outline\",\n \"account-box-minus-outline\",\n \"account-box-multiple\",\n \"account-box-multiple-outline\",\n \"account-box-outline\",\n \"account-box-plus-outline\",\n \"account-cancel\",\n \"account-cancel-outline\",\n \"account-card\",\n \"account-card-outline\",\n \"account-cash\",\n \"account-cash-outline\",\n \"account-check\",\n \"account-check-outline\",\n \"account-child\",\n \"account-child-circle\",\n \"account-child-outline\",\n \"account-circle\",\n \"account-circle-outline\",\n \"account-clock\",\n \"account-clock-outline\",\n \"account-cog\",\n \"account-cog-outline\",\n \"account-convert\",\n \"account-convert-outline\",\n \"account-cowboy-hat\",\n \"account-cowboy-hat-outline\",\n \"account-credit-card\",\n \"account-credit-card-outline\",\n \"account-details\",\n \"account-details-outline\",\n \"account-edit\",\n \"account-edit-outline\",\n \"account-eye\",\n \"account-eye-outline\",\n \"account-file\",\n \"account-file-outline\",\n \"account-file-text\",\n \"account-file-text-outline\",\n \"account-filter\",\n \"account-filter-outline\",\n \"account-group\",\n \"account-group-outline\",\n \"account-hard-hat\",\n \"account-hard-hat-outline\",\n \"account-heart\",\n \"account-heart-outline\",\n \"account-injury\",\n \"account-injury-outline\",\n \"account-key\",\n \"account-key-outline\",\n \"account-lock\",\n \"account-lock-open\",\n \"account-lock-open-outline\",\n \"account-lock-outline\",\n \"account-minus\",\n \"account-minus-outline\",\n \"account-multiple\",\n \"account-multiple-check\",\n \"account-multiple-check-outline\",\n \"account-multiple-minus\",\n \"account-multiple-minus-outline\",\n \"account-multiple-outline\",\n \"account-multiple-plus\",\n \"account-multiple-plus-outline\",\n \"account-multiple-remove\",\n \"account-multiple-remove-outline\",\n \"account-music\",\n \"account-music-outline\",\n \"account-network\",\n \"account-network-off\",\n \"account-network-off-outline\",\n \"account-network-outline\",\n \"account-off\",\n \"account-off-outline\",\n \"account-outline\",\n \"account-plus\",\n \"account-plus-outline\",\n \"account-question\",\n \"account-question-outline\",\n \"account-reactivate\",\n \"account-reactivate-outline\",\n \"account-remove\",\n \"account-remove-outline\",\n \"account-school\",\n \"account-school-outline\",\n \"account-search\",\n \"account-search-outline\",\n \"account-settings\",\n \"account-settings-outline\",\n \"account-star\",\n \"account-star-outline\",\n \"account-supervisor\",\n \"account-supervisor-circle\",\n \"account-supervisor-circle-outline\",\n \"account-supervisor-outline\",\n \"account-switch\",\n \"account-switch-outline\",\n \"account-sync\",\n \"account-sync-outline\",\n \"account-tag\",\n \"account-tag-outline\",\n \"account-tie\",\n \"account-tie-hat\",\n \"account-tie-hat-outline\",\n \"account-tie-outline\",\n \"account-tie-voice\",\n \"account-tie-voice-off\",\n \"account-tie-voice-off-outline\",\n \"account-tie-voice-outline\",\n \"account-tie-woman\",\n \"account-voice\",\n \"account-voice-off\",\n \"account-wrench\",\n \"account-wrench-outline\",\n \"adjust\",\n \"advertisements\",\n \"advertisements-off\",\n \"air-conditioner\",\n \"air-filter\",\n \"air-horn\",\n \"air-humidifier\",\n \"air-humidifier-off\",\n \"air-purifier\",\n \"air-purifier-off\",\n \"airbag\",\n \"airballoon\",\n \"airballoon-outline\",\n \"airplane\",\n \"airplane-alert\",\n \"airplane-check\",\n \"airplane-clock\",\n \"airplane-cog\",\n \"airplane-edit\",\n \"airplane-landing\",\n \"airplane-marker\",\n \"airplane-minus\",\n \"airplane-off\",\n \"airplane-plus\",\n \"airplane-remove\",\n \"airplane-search\",\n \"airplane-settings\",\n \"airplane-takeoff\",\n \"airport\",\n \"alarm\",\n \"alarm-bell\",\n \"alarm-check\",\n \"alarm-light\",\n \"alarm-light-off\",\n \"alarm-light-off-outline\",\n \"alarm-light-outline\",\n \"alarm-multiple\",\n \"alarm-note\",\n \"alarm-note-off\",\n \"alarm-off\",\n \"alarm-panel\",\n \"alarm-panel-outline\",\n \"alarm-plus\",\n \"alarm-snooze\",\n \"album\",\n \"alert\",\n \"alert-box\",\n \"alert-box-outline\",\n \"alert-circle\",\n \"alert-circle-check\",\n \"alert-circle-check-outline\",\n \"alert-circle-outline\",\n \"alert-decagram\",\n \"alert-decagram-outline\",\n \"alert-minus\",\n \"alert-minus-outline\",\n \"alert-octagon\",\n \"alert-octagon-outline\",\n \"alert-octagram\",\n \"alert-octagram-outline\",\n \"alert-outline\",\n \"alert-plus\",\n \"alert-plus-outline\",\n \"alert-remove\",\n \"alert-remove-outline\",\n \"alert-rhombus\",\n \"alert-rhombus-outline\",\n \"alien\",\n \"alien-outline\",\n \"align-horizontal-center\",\n \"align-horizontal-distribute\",\n \"align-horizontal-left\",\n \"align-horizontal-right\",\n \"align-vertical-bottom\",\n \"align-vertical-center\",\n \"align-vertical-distribute\",\n \"align-vertical-top\",\n \"all-inclusive\",\n \"all-inclusive-box\",\n \"all-inclusive-box-outline\",\n \"allergy\",\n \"alpha\",\n \"alpha-a\",\n \"alpha-a-box\",\n \"alpha-a-box-outline\",\n \"alpha-a-circle\",\n \"alpha-a-circle-outline\",\n \"alpha-b\",\n \"alpha-b-box\",\n \"alpha-b-box-outline\",\n \"alpha-b-circle\",\n \"alpha-b-circle-outline\",\n \"alpha-c\",\n \"alpha-c-box\",\n \"alpha-c-box-outline\",\n \"alpha-c-circle\",\n \"alpha-c-circle-outline\",\n \"alpha-d\",\n \"alpha-d-box\",\n \"alpha-d-box-outline\",\n \"alpha-d-circle\",\n \"alpha-d-circle-outline\",\n \"alpha-e\",\n \"alpha-e-box\",\n \"alpha-e-box-outline\",\n \"alpha-e-circle\",\n \"alpha-e-circle-outline\",\n \"alpha-f\",\n \"alpha-f-box\",\n \"alpha-f-box-outline\",\n \"alpha-f-circle\",\n \"alpha-f-circle-outline\",\n \"alpha-g\",\n \"alpha-g-box\",\n \"alpha-g-box-outline\",\n \"alpha-g-circle\",\n \"alpha-g-circle-outline\",\n \"alpha-h\",\n \"alpha-h-box\",\n \"alpha-h-box-outline\",\n \"alpha-h-circle\",\n \"alpha-h-circle-outline\",\n \"alpha-i\",\n \"alpha-i-box\",\n \"alpha-i-box-outline\",\n \"alpha-i-circle\",\n \"alpha-i-circle-outline\",\n \"alpha-j\",\n \"alpha-j-box\",\n \"alpha-j-box-outline\",\n \"alpha-j-circle\",\n \"alpha-j-circle-outline\",\n \"alpha-k\",\n \"alpha-k-box\",\n \"alpha-k-box-outline\",\n \"alpha-k-circle\",\n \"alpha-k-circle-outline\",\n \"alpha-l\",\n \"alpha-l-box\",\n \"alpha-l-box-outline\",\n \"alpha-l-circle\",\n \"alpha-l-circle-outline\",\n \"alpha-m\",\n \"alpha-m-box\",\n \"alpha-m-box-outline\",\n \"alpha-m-circle\",\n \"alpha-m-circle-outline\",\n \"alpha-n\",\n \"alpha-n-box\",\n \"alpha-n-box-outline\",\n \"alpha-n-circle\",\n \"alpha-n-circle-outline\",\n \"alpha-o\",\n \"alpha-o-box\",\n \"alpha-o-box-outline\",\n \"alpha-o-circle\",\n \"alpha-o-circle-outline\",\n \"alpha-p\",\n \"alpha-p-box\",\n \"alpha-p-box-outline\",\n \"alpha-p-circle\",\n \"alpha-p-circle-outline\",\n \"alpha-q\",\n \"alpha-q-box\",\n \"alpha-q-box-outline\",\n \"alpha-q-circle\",\n \"alpha-q-circle-outline\",\n \"alpha-r\",\n \"alpha-r-box\",\n \"alpha-r-box-outline\",\n \"alpha-r-circle\",\n \"alpha-r-circle-outline\",\n \"alpha-s\",\n \"alpha-s-box\",\n \"alpha-s-box-outline\",\n \"alpha-s-circle\",\n \"alpha-s-circle-outline\",\n \"alpha-t\",\n \"alpha-t-box\",\n \"alpha-t-box-outline\",\n \"alpha-t-circle\",\n \"alpha-t-circle-outline\",\n \"alpha-u\",\n \"alpha-u-box\",\n \"alpha-u-box-outline\",\n \"alpha-u-circle\",\n \"alpha-u-circle-outline\",\n \"alpha-v\",\n \"alpha-v-box\",\n \"alpha-v-box-outline\",\n \"alpha-v-circle\",\n \"alpha-v-circle-outline\",\n \"alpha-w\",\n \"alpha-w-box\",\n \"alpha-w-box-outline\",\n \"alpha-w-circle\",\n \"alpha-w-circle-outline\",\n \"alpha-x\",\n \"alpha-x-box\",\n \"alpha-x-box-outline\",\n \"alpha-x-circle\",\n \"alpha-x-circle-outline\",\n \"alpha-y\",\n \"alpha-y-box\",\n \"alpha-y-box-outline\",\n \"alpha-y-circle\",\n \"alpha-y-circle-outline\",\n \"alpha-z\",\n \"alpha-z-box\",\n \"alpha-z-box-outline\",\n \"alpha-z-circle\",\n \"alpha-z-circle-outline\",\n \"alphabet-aurebesh\",\n \"alphabet-cyrillic\",\n \"alphabet-greek\",\n \"alphabet-latin\",\n \"alphabet-piqad\",\n \"alphabet-tengwar\",\n \"alphabetical\",\n \"alphabetical-off\",\n \"alphabetical-variant\",\n \"alphabetical-variant-off\",\n \"altimeter\",\n \"ambulance\",\n \"ammunition\",\n \"ampersand\",\n \"amplifier\",\n \"amplifier-off\",\n \"anchor\",\n \"android\",\n \"android-studio\",\n \"angle-acute\",\n \"angle-obtuse\",\n \"angle-right\",\n \"angular\",\n \"angularjs\",\n \"animation\",\n \"animation-outline\",\n \"animation-play\",\n \"animation-play-outline\",\n \"ansible\",\n \"antenna\",\n \"anvil\",\n \"apache-kafka\",\n \"api\",\n \"api-off\",\n \"apple\",\n \"apple-finder\",\n \"apple-icloud\",\n \"apple-ios\",\n \"apple-keyboard-caps\",\n \"apple-keyboard-command\",\n \"apple-keyboard-control\",\n \"apple-keyboard-option\",\n \"apple-keyboard-shift\",\n \"apple-safari\",\n \"application\",\n \"application-array\",\n \"application-array-outline\",\n \"application-braces\",\n \"application-braces-outline\",\n \"application-brackets\",\n \"application-brackets-outline\",\n \"application-cog\",\n \"application-cog-outline\",\n \"application-edit\",\n \"application-edit-outline\",\n \"application-export\",\n \"application-import\",\n \"application-outline\",\n \"application-parentheses\",\n \"application-parentheses-outline\",\n \"application-settings\",\n \"application-settings-outline\",\n \"application-variable\",\n \"application-variable-outline\",\n \"approximately-equal\",\n \"approximately-equal-box\",\n \"apps\",\n \"apps-box\",\n \"arch\",\n \"archive\",\n \"archive-alert\",\n \"archive-alert-outline\",\n \"archive-arrow-down\",\n \"archive-arrow-down-outline\",\n \"archive-arrow-up\",\n \"archive-arrow-up-outline\",\n \"archive-cancel\",\n \"archive-cancel-outline\",\n \"archive-check\",\n \"archive-check-outline\",\n \"archive-clock\",\n \"archive-clock-outline\",\n \"archive-cog\",\n \"archive-cog-outline\",\n \"archive-edit\",\n \"archive-edit-outline\",\n \"archive-eye\",\n \"archive-eye-outline\",\n \"archive-lock\",\n \"archive-lock-open\",\n \"archive-lock-open-outline\",\n \"archive-lock-outline\",\n \"archive-marker\",\n \"archive-marker-outline\",\n \"archive-minus\",\n \"archive-minus-outline\",\n \"archive-music\",\n \"archive-music-outline\",\n \"archive-off\",\n \"archive-off-outline\",\n \"archive-outline\",\n \"archive-plus\",\n \"archive-plus-outline\",\n \"archive-refresh\",\n \"archive-refresh-outline\",\n \"archive-remove\",\n \"archive-remove-outline\",\n \"archive-search\",\n \"archive-search-outline\",\n \"archive-settings\",\n \"archive-settings-outline\",\n \"archive-star\",\n \"archive-star-outline\",\n \"archive-sync\",\n \"archive-sync-outline\",\n \"arm-flex\",\n \"arm-flex-outline\",\n \"arrange-bring-forward\",\n \"arrange-bring-to-front\",\n \"arrange-send-backward\",\n \"arrange-send-to-back\",\n \"arrow-all\",\n \"arrow-bottom-left\",\n \"arrow-bottom-left-bold-box\",\n \"arrow-bottom-left-bold-box-outline\",\n \"arrow-bottom-left-bold-outline\",\n \"arrow-bottom-left-thick\",\n \"arrow-bottom-left-thin\",\n \"arrow-bottom-left-thin-circle-outline\",\n \"arrow-bottom-right\",\n \"arrow-bottom-right-bold-box\",\n \"arrow-bottom-right-bold-box-outline\",\n \"arrow-bottom-right-bold-outline\",\n \"arrow-bottom-right-thick\",\n \"arrow-bottom-right-thin\",\n \"arrow-bottom-right-thin-circle-outline\",\n \"arrow-collapse\",\n \"arrow-collapse-all\",\n \"arrow-collapse-down\",\n \"arrow-collapse-horizontal\",\n \"arrow-collapse-left\",\n \"arrow-collapse-right\",\n \"arrow-collapse-up\",\n \"arrow-collapse-vertical\",\n \"arrow-decision\",\n \"arrow-decision-auto\",\n \"arrow-decision-auto-outline\",\n \"arrow-decision-outline\",\n \"arrow-down\",\n \"arrow-down-bold\",\n \"arrow-down-bold-box\",\n \"arrow-down-bold-box-outline\",\n \"arrow-down-bold-circle\",\n \"arrow-down-bold-circle-outline\",\n \"arrow-down-bold-hexagon-outline\",\n \"arrow-down-bold-outline\",\n \"arrow-down-box\",\n \"arrow-down-circle\",\n \"arrow-down-circle-outline\",\n \"arrow-down-drop-circle\",\n \"arrow-down-drop-circle-outline\",\n \"arrow-down-left\",\n \"arrow-down-left-bold\",\n \"arrow-down-right\",\n \"arrow-down-right-bold\",\n \"arrow-down-thick\",\n \"arrow-down-thin\",\n \"arrow-down-thin-circle-outline\",\n \"arrow-expand\",\n \"arrow-expand-all\",\n \"arrow-expand-down\",\n \"arrow-expand-horizontal\",\n \"arrow-expand-left\",\n \"arrow-expand-right\",\n \"arrow-expand-up\",\n \"arrow-expand-vertical\",\n \"arrow-horizontal-lock\",\n \"arrow-left\",\n \"arrow-left-bold\",\n \"arrow-left-bold-box\",\n \"arrow-left-bold-box-outline\",\n \"arrow-left-bold-circle\",\n \"arrow-left-bold-circle-outline\",\n \"arrow-left-bold-hexagon-outline\",\n \"arrow-left-bold-outline\",\n \"arrow-left-bottom\",\n \"arrow-left-bottom-bold\",\n \"arrow-left-box\",\n \"arrow-left-circle\",\n \"arrow-left-circle-outline\",\n \"arrow-left-drop-circle\",\n \"arrow-left-drop-circle-outline\",\n \"arrow-left-right\",\n \"arrow-left-right-bold\",\n \"arrow-left-right-bold-outline\",\n \"arrow-left-thick\",\n \"arrow-left-thin\",\n \"arrow-left-thin-circle-outline\",\n \"arrow-left-top\",\n \"arrow-left-top-bold\",\n \"arrow-oscillating\",\n \"arrow-oscillating-off\",\n \"arrow-projectile\",\n \"arrow-projectile-multiple\",\n \"arrow-right\",\n \"arrow-right-bold\",\n \"arrow-right-bold-box\",\n \"arrow-right-bold-box-outline\",\n \"arrow-right-bold-circle\",\n \"arrow-right-bold-circle-outline\",\n \"arrow-right-bold-hexagon-outline\",\n \"arrow-right-bold-outline\",\n \"arrow-right-bottom\",\n \"arrow-right-bottom-bold\",\n \"arrow-right-box\",\n \"arrow-right-circle\",\n \"arrow-right-circle-outline\",\n \"arrow-right-drop-circle\",\n \"arrow-right-drop-circle-outline\",\n \"arrow-right-thick\",\n \"arrow-right-thin\",\n \"arrow-right-thin-circle-outline\",\n \"arrow-right-top\",\n \"arrow-right-top-bold\",\n \"arrow-split-horizontal\",\n \"arrow-split-vertical\",\n \"arrow-top-left\",\n \"arrow-top-left-bold-box\",\n \"arrow-top-left-bold-box-outline\",\n \"arrow-top-left-bold-outline\",\n \"arrow-top-left-bottom-right\",\n \"arrow-top-left-bottom-right-bold\",\n \"arrow-top-left-thick\",\n \"arrow-top-left-thin\",\n \"arrow-top-left-thin-circle-outline\",\n \"arrow-top-right\",\n \"arrow-top-right-bold-box\",\n \"arrow-top-right-bold-box-outline\",\n \"arrow-top-right-bold-outline\",\n \"arrow-top-right-bottom-left\",\n \"arrow-top-right-bottom-left-bold\",\n \"arrow-top-right-thick\",\n \"arrow-top-right-thin\",\n \"arrow-top-right-thin-circle-outline\",\n \"arrow-u-down-left\",\n \"arrow-u-down-left-bold\",\n \"arrow-u-down-right\",\n \"arrow-u-down-right-bold\",\n \"arrow-u-left-bottom\",\n \"arrow-u-left-bottom-bold\",\n \"arrow-u-left-top\",\n \"arrow-u-left-top-bold\",\n \"arrow-u-right-bottom\",\n \"arrow-u-right-bottom-bold\",\n \"arrow-u-right-top\",\n \"arrow-u-right-top-bold\",\n \"arrow-u-up-left\",\n \"arrow-u-up-left-bold\",\n \"arrow-u-up-right\",\n \"arrow-u-up-right-bold\",\n \"arrow-up\",\n \"arrow-up-bold\",\n \"arrow-up-bold-box\",\n \"arrow-up-bold-box-outline\",\n \"arrow-up-bold-circle\",\n \"arrow-up-bold-circle-outline\",\n \"arrow-up-bold-hexagon-outline\",\n \"arrow-up-bold-outline\",\n \"arrow-up-box\",\n \"arrow-up-circle\",\n \"arrow-up-circle-outline\",\n \"arrow-up-down\",\n \"arrow-up-down-bold\",\n \"arrow-up-down-bold-outline\",\n \"arrow-up-drop-circle\",\n \"arrow-up-drop-circle-outline\",\n \"arrow-up-left\",\n \"arrow-up-left-bold\",\n \"arrow-up-right\",\n \"arrow-up-right-bold\",\n \"arrow-up-thick\",\n \"arrow-up-thin\",\n \"arrow-up-thin-circle-outline\",\n \"arrow-vertical-lock\",\n \"artboard\",\n \"artstation\",\n \"aspect-ratio\",\n \"assistant\",\n \"asterisk\",\n \"asterisk-circle-outline\",\n \"at\",\n \"atlassian\",\n \"atm\",\n \"atom\",\n \"atom-variant\",\n \"attachment\",\n \"attachment-check\",\n \"attachment-lock\",\n \"attachment-minus\",\n \"attachment-off\",\n \"attachment-plus\",\n \"attachment-remove\",\n \"atv\",\n \"audio-input-rca\",\n \"audio-input-stereo-minijack\",\n \"audio-input-xlr\",\n \"audio-video\",\n \"audio-video-off\",\n \"augmented-reality\",\n \"aurora\",\n \"auto-download\",\n \"auto-fix\",\n \"auto-mode\",\n \"auto-upload\",\n \"autorenew\",\n \"autorenew-off\",\n \"av-timer\",\n \"awning\",\n \"awning-outline\",\n \"aws\",\n \"axe\",\n \"axe-battle\",\n \"axis\",\n \"axis-arrow\",\n \"axis-arrow-info\",\n \"axis-arrow-lock\",\n \"axis-lock\",\n \"axis-x-arrow\",\n \"axis-x-arrow-lock\",\n \"axis-x-rotate-clockwise\",\n \"axis-x-rotate-counterclockwise\",\n \"axis-x-y-arrow-lock\",\n \"axis-y-arrow\",\n \"axis-y-arrow-lock\",\n \"axis-y-rotate-clockwise\",\n \"axis-y-rotate-counterclockwise\",\n \"axis-z-arrow\",\n \"axis-z-arrow-lock\",\n \"axis-z-rotate-clockwise\",\n \"axis-z-rotate-counterclockwise\",\n \"babel\",\n \"baby\",\n \"baby-bottle\",\n \"baby-bottle-outline\",\n \"baby-buggy\",\n \"baby-buggy-off\",\n \"baby-carriage\",\n \"baby-carriage-off\",\n \"baby-face\",\n \"baby-face-outline\",\n \"backburger\",\n \"backspace\",\n \"backspace-outline\",\n \"backspace-reverse\",\n \"backspace-reverse-outline\",\n \"backup-restore\",\n \"bacteria\",\n \"bacteria-outline\",\n \"badge-account\",\n \"badge-account-alert\",\n \"badge-account-alert-outline\",\n \"badge-account-horizontal\",\n \"badge-account-horizontal-outline\",\n \"badge-account-outline\",\n \"badminton\",\n \"bag-carry-on\",\n \"bag-carry-on-check\",\n \"bag-carry-on-off\",\n \"bag-checked\",\n \"bag-personal\",\n \"bag-personal-off\",\n \"bag-personal-off-outline\",\n \"bag-personal-outline\",\n \"bag-personal-plus\",\n \"bag-personal-plus-outline\",\n \"bag-personal-tag\",\n \"bag-personal-tag-outline\",\n \"bag-suitcase\",\n \"bag-suitcase-off\",\n \"bag-suitcase-off-outline\",\n \"bag-suitcase-outline\",\n \"baguette\",\n \"balcony\",\n \"balloon\",\n \"ballot\",\n \"ballot-outline\",\n \"ballot-recount\",\n \"ballot-recount-outline\",\n \"bandage\",\n \"bank\",\n \"bank-check\",\n \"bank-circle\",\n \"bank-circle-outline\",\n \"bank-minus\",\n \"bank-off\",\n \"bank-off-outline\",\n \"bank-outline\",\n \"bank-plus\",\n \"bank-remove\",\n \"bank-transfer\",\n \"bank-transfer-in\",\n \"bank-transfer-out\",\n \"barcode\",\n \"barcode-off\",\n \"barcode-scan\",\n \"barley\",\n \"barley-off\",\n \"barn\",\n \"barrel\",\n \"barrel-outline\",\n \"baseball\",\n \"baseball-bat\",\n \"baseball-diamond\",\n \"baseball-diamond-outline\",\n \"baseball-outline\",\n \"bash\",\n \"basket\",\n \"basket-check\",\n \"basket-check-outline\",\n \"basket-fill\",\n \"basket-minus\",\n \"basket-minus-outline\",\n \"basket-off\",\n \"basket-off-outline\",\n \"basket-outline\",\n \"basket-plus\",\n \"basket-plus-outline\",\n \"basket-remove\",\n \"basket-remove-outline\",\n \"basket-unfill\",\n \"basketball\",\n \"basketball-hoop\",\n \"basketball-hoop-outline\",\n \"bat\",\n \"bathtub\",\n \"bathtub-outline\",\n \"battery\",\n \"battery-10\",\n \"battery-10-bluetooth\",\n \"battery-20\",\n \"battery-20-bluetooth\",\n \"battery-30\",\n \"battery-30-bluetooth\",\n \"battery-40\",\n \"battery-40-bluetooth\",\n \"battery-50\",\n \"battery-50-bluetooth\",\n \"battery-60\",\n \"battery-60-bluetooth\",\n \"battery-70\",\n \"battery-70-bluetooth\",\n \"battery-80\",\n \"battery-80-bluetooth\",\n \"battery-90\",\n \"battery-90-bluetooth\",\n \"battery-alert\",\n \"battery-alert-bluetooth\",\n \"battery-alert-variant\",\n \"battery-alert-variant-outline\",\n \"battery-arrow-down\",\n \"battery-arrow-down-outline\",\n \"battery-arrow-up\",\n \"battery-arrow-up-outline\",\n \"battery-bluetooth\",\n \"battery-bluetooth-variant\",\n \"battery-charging\",\n \"battery-charging-10\",\n \"battery-charging-100\",\n \"battery-charging-20\",\n \"battery-charging-30\",\n \"battery-charging-40\",\n \"battery-charging-50\",\n \"battery-charging-60\",\n \"battery-charging-70\",\n \"battery-charging-80\",\n \"battery-charging-90\",\n \"battery-charging-high\",\n \"battery-charging-low\",\n \"battery-charging-medium\",\n \"battery-charging-outline\",\n \"battery-charging-wireless\",\n \"battery-charging-wireless-10\",\n \"battery-charging-wireless-20\",\n \"battery-charging-wireless-30\",\n \"battery-charging-wireless-40\",\n \"battery-charging-wireless-50\",\n \"battery-charging-wireless-60\",\n \"battery-charging-wireless-70\",\n \"battery-charging-wireless-80\",\n \"battery-charging-wireless-90\",\n \"battery-charging-wireless-alert\",\n \"battery-charging-wireless-outline\",\n \"battery-check\",\n \"battery-check-outline\",\n \"battery-clock\",\n \"battery-clock-outline\",\n \"battery-heart\",\n \"battery-heart-outline\",\n \"battery-heart-variant\",\n \"battery-high\",\n \"battery-lock\",\n \"battery-lock-open\",\n \"battery-low\",\n \"battery-medium\",\n \"battery-minus\",\n \"battery-minus-outline\",\n \"battery-minus-variant\",\n \"battery-negative\",\n \"battery-off\",\n \"battery-off-outline\",\n \"battery-outline\",\n \"battery-plus\",\n \"battery-plus-outline\",\n \"battery-plus-variant\",\n \"battery-positive\",\n \"battery-remove\",\n \"battery-remove-outline\",\n \"battery-sync\",\n \"battery-sync-outline\",\n \"battery-unknown\",\n \"battery-unknown-bluetooth\",\n \"beach\",\n \"beaker\",\n \"beaker-alert\",\n \"beaker-alert-outline\",\n \"beaker-check\",\n \"beaker-check-outline\",\n \"beaker-minus\",\n \"beaker-minus-outline\",\n \"beaker-outline\",\n \"beaker-plus\",\n \"beaker-plus-outline\",\n \"beaker-question\",\n \"beaker-question-outline\",\n \"beaker-remove\",\n \"beaker-remove-outline\",\n \"bed\",\n \"bed-clock\",\n \"bed-double\",\n \"bed-double-outline\",\n \"bed-empty\",\n \"bed-king\",\n \"bed-king-outline\",\n \"bed-outline\",\n \"bed-queen\",\n \"bed-queen-outline\",\n \"bed-single\",\n \"bed-single-outline\",\n \"bee\",\n \"bee-flower\",\n \"beehive-off-outline\",\n \"beehive-outline\",\n \"beekeeper\",\n \"beer\",\n \"beer-outline\",\n \"bell\",\n \"bell-alert\",\n \"bell-alert-outline\",\n \"bell-badge\",\n \"bell-badge-outline\",\n \"bell-cancel\",\n \"bell-cancel-outline\",\n \"bell-check\",\n \"bell-check-outline\",\n \"bell-circle\",\n \"bell-circle-outline\",\n \"bell-cog\",\n \"bell-cog-outline\",\n \"bell-minus\",\n \"bell-minus-outline\",\n \"bell-off\",\n \"bell-off-outline\",\n \"bell-outline\",\n \"bell-plus\",\n \"bell-plus-outline\",\n \"bell-remove\",\n \"bell-remove-outline\",\n \"bell-ring\",\n \"bell-ring-outline\",\n \"bell-sleep\",\n \"bell-sleep-outline\",\n \"bench\",\n \"bench-back\",\n \"beta\",\n \"betamax\",\n \"biathlon\",\n \"bicycle\",\n \"bicycle-basket\",\n \"bicycle-cargo\",\n \"bicycle-electric\",\n \"bicycle-penny-farthing\",\n \"bike\",\n \"bike-fast\",\n \"bike-pedal\",\n \"bike-pedal-clipless\",\n \"bike-pedal-mountain\",\n \"billboard\",\n \"billiards\",\n \"billiards-rack\",\n \"binoculars\",\n \"bio\",\n \"biohazard\",\n \"bird\",\n \"bitbucket\",\n \"bitcoin\",\n \"black-mesa\",\n \"blender\",\n \"blender-outline\",\n \"blender-software\",\n \"blinds\",\n \"blinds-horizontal\",\n \"blinds-horizontal-closed\",\n \"blinds-open\",\n \"blinds-vertical\",\n \"blinds-vertical-closed\",\n \"block-helper\",\n \"blood-bag\",\n \"bluetooth\",\n \"bluetooth-audio\",\n \"bluetooth-connect\",\n \"bluetooth-off\",\n \"bluetooth-settings\",\n \"bluetooth-transfer\",\n \"blur\",\n \"blur-linear\",\n \"blur-off\",\n \"blur-radial\",\n \"bolt\",\n \"bomb\",\n \"bomb-off\",\n \"bone\",\n \"bone-off\",\n \"book\",\n \"book-account\",\n \"book-account-outline\",\n \"book-alert\",\n \"book-alert-outline\",\n \"book-alphabet\",\n \"book-arrow-down\",\n \"book-arrow-down-outline\",\n \"book-arrow-left\",\n \"book-arrow-left-outline\",\n \"book-arrow-right\",\n \"book-arrow-right-outline\",\n \"book-arrow-up\",\n \"book-arrow-up-outline\",\n \"book-cancel\",\n \"book-cancel-outline\",\n \"book-check\",\n \"book-check-outline\",\n \"book-clock\",\n \"book-clock-outline\",\n \"book-cog\",\n \"book-cog-outline\",\n \"book-cross\",\n \"book-edit\",\n \"book-edit-outline\",\n \"book-education\",\n \"book-education-outline\",\n \"book-heart\",\n \"book-heart-outline\",\n \"book-information-variant\",\n \"book-lock\",\n \"book-lock-open\",\n \"book-lock-open-outline\",\n \"book-lock-outline\",\n \"book-marker\",\n \"book-marker-outline\",\n \"book-minus\",\n \"book-minus-multiple\",\n \"book-minus-multiple-outline\",\n \"book-minus-outline\",\n \"book-multiple\",\n \"book-multiple-outline\",\n \"book-music\",\n \"book-music-outline\",\n \"book-off\",\n \"book-off-outline\",\n \"book-open\",\n \"book-open-blank-variant\",\n \"book-open-blank-variant-outline\",\n \"book-open-outline\",\n \"book-open-page-variant\",\n \"book-open-page-variant-outline\",\n \"book-open-variant\",\n \"book-open-variant-outline\",\n \"book-outline\",\n \"book-play\",\n \"book-play-outline\",\n \"book-plus\",\n \"book-plus-multiple\",\n \"book-plus-multiple-outline\",\n \"book-plus-outline\",\n \"book-refresh\",\n \"book-refresh-outline\",\n \"book-remove\",\n \"book-remove-multiple\",\n \"book-remove-multiple-outline\",\n \"book-remove-outline\",\n \"book-search\",\n \"book-search-outline\",\n \"book-settings\",\n \"book-settings-outline\",\n \"book-sync\",\n \"book-sync-outline\",\n \"book-variant\",\n \"bookmark\",\n \"bookmark-box\",\n \"bookmark-box-multiple\",\n \"bookmark-box-multiple-outline\",\n \"bookmark-box-outline\",\n \"bookmark-check\",\n \"bookmark-check-outline\",\n \"bookmark-minus\",\n \"bookmark-minus-outline\",\n \"bookmark-multiple\",\n \"bookmark-multiple-outline\",\n \"bookmark-music\",\n \"bookmark-music-outline\",\n \"bookmark-off\",\n \"bookmark-off-outline\",\n \"bookmark-outline\",\n \"bookmark-plus\",\n \"bookmark-plus-outline\",\n \"bookmark-remove\",\n \"bookmark-remove-outline\",\n \"bookshelf\",\n \"boom-gate\",\n \"boom-gate-alert\",\n \"boom-gate-alert-outline\",\n \"boom-gate-arrow-down\",\n \"boom-gate-arrow-down-outline\",\n \"boom-gate-arrow-up\",\n \"boom-gate-arrow-up-outline\",\n \"boom-gate-outline\",\n \"boom-gate-up\",\n \"boom-gate-up-outline\",\n \"boombox\",\n \"boomerang\",\n \"bootstrap\",\n \"border-all\",\n \"border-all-variant\",\n \"border-bottom\",\n \"border-bottom-variant\",\n \"border-color\",\n \"border-horizontal\",\n \"border-inside\",\n \"border-left\",\n \"border-left-variant\",\n \"border-none\",\n \"border-none-variant\",\n \"border-outside\",\n \"border-radius\",\n \"border-right\",\n \"border-right-variant\",\n \"border-style\",\n \"border-top\",\n \"border-top-variant\",\n \"border-vertical\",\n \"bottle-soda\",\n \"bottle-soda-classic\",\n \"bottle-soda-classic-outline\",\n \"bottle-soda-outline\",\n \"bottle-tonic\",\n \"bottle-tonic-outline\",\n \"bottle-tonic-plus\",\n \"bottle-tonic-plus-outline\",\n \"bottle-tonic-skull\",\n \"bottle-tonic-skull-outline\",\n \"bottle-wine\",\n \"bottle-wine-outline\",\n \"bow-arrow\",\n \"bow-tie\",\n \"bowl\",\n \"bowl-mix\",\n \"bowl-mix-outline\",\n \"bowl-outline\",\n \"bowling\",\n \"box\",\n \"box-cutter\",\n \"box-cutter-off\",\n \"box-shadow\",\n \"boxing-glove\",\n \"braille\",\n \"brain\",\n \"bread-slice\",\n \"bread-slice-outline\",\n \"bridge\",\n \"briefcase\",\n \"briefcase-account\",\n \"briefcase-account-outline\",\n \"briefcase-arrow-left-right\",\n \"briefcase-arrow-left-right-outline\",\n \"briefcase-arrow-up-down\",\n \"briefcase-arrow-up-down-outline\",\n \"briefcase-check\",\n \"briefcase-check-outline\",\n \"briefcase-clock\",\n \"briefcase-clock-outline\",\n \"briefcase-download\",\n \"briefcase-download-outline\",\n \"briefcase-edit\",\n \"briefcase-edit-outline\",\n \"briefcase-eye\",\n \"briefcase-eye-outline\",\n \"briefcase-minus\",\n \"briefcase-minus-outline\",\n \"briefcase-off\",\n \"briefcase-off-outline\",\n \"briefcase-outline\",\n \"briefcase-plus\",\n \"briefcase-plus-outline\",\n \"briefcase-remove\",\n \"briefcase-remove-outline\",\n \"briefcase-search\",\n \"briefcase-search-outline\",\n \"briefcase-upload\",\n \"briefcase-upload-outline\",\n \"briefcase-variant\",\n \"briefcase-variant-off\",\n \"briefcase-variant-off-outline\",\n \"briefcase-variant-outline\",\n \"brightness-1\",\n \"brightness-2\",\n \"brightness-3\",\n \"brightness-4\",\n \"brightness-5\",\n \"brightness-6\",\n \"brightness-7\",\n \"brightness-auto\",\n \"brightness-percent\",\n \"broadcast\",\n \"broadcast-off\",\n \"broom\",\n \"brush\",\n \"brush-off\",\n \"brush-outline\",\n \"brush-variant\",\n \"bucket\",\n \"bucket-outline\",\n \"buffet\",\n \"bug\",\n \"bug-check\",\n \"bug-check-outline\",\n \"bug-outline\",\n \"bug-pause\",\n \"bug-pause-outline\",\n \"bug-play\",\n \"bug-play-outline\",\n \"bug-stop\",\n \"bug-stop-outline\",\n \"bugle\",\n \"bulkhead-light\",\n \"bulldozer\",\n \"bullet\",\n \"bulletin-board\",\n \"bullhorn\",\n \"bullhorn-outline\",\n \"bullhorn-variant\",\n \"bullhorn-variant-outline\",\n \"bullseye\",\n \"bullseye-arrow\",\n \"bulma\",\n \"bunk-bed\",\n \"bunk-bed-outline\",\n \"bus\",\n \"bus-alert\",\n \"bus-articulated-end\",\n \"bus-articulated-front\",\n \"bus-clock\",\n \"bus-double-decker\",\n \"bus-electric\",\n \"bus-marker\",\n \"bus-multiple\",\n \"bus-school\",\n \"bus-side\",\n \"bus-sign\",\n \"bus-stop\",\n \"bus-stop-covered\",\n \"bus-stop-uncovered\",\n \"bus-wrench\",\n \"butterfly\",\n \"butterfly-outline\",\n \"button-cursor\",\n \"button-pointer\",\n \"cabin-a-frame\",\n \"cable-data\",\n \"cached\",\n \"cactus\",\n \"cake\",\n \"cake-layered\",\n \"cake-variant\",\n \"cake-variant-outline\",\n \"calculator\",\n \"calculator-variant\",\n \"calculator-variant-outline\",\n \"calendar\",\n \"calendar-account\",\n \"calendar-account-outline\",\n \"calendar-alert\",\n \"calendar-alert-outline\",\n \"calendar-arrow-left\",\n \"calendar-arrow-right\",\n \"calendar-badge\",\n \"calendar-badge-outline\",\n \"calendar-blank\",\n \"calendar-blank-multiple\",\n \"calendar-blank-outline\",\n \"calendar-check\",\n \"calendar-check-outline\",\n \"calendar-clock\",\n \"calendar-clock-outline\",\n \"calendar-collapse-horizontal\",\n \"calendar-collapse-horizontal-outline\",\n \"calendar-cursor\",\n \"calendar-cursor-outline\",\n \"calendar-edit\",\n \"calendar-edit-outline\",\n \"calendar-end\",\n \"calendar-end-outline\",\n \"calendar-expand-horizontal\",\n \"calendar-expand-horizontal-outline\",\n \"calendar-export\",\n \"calendar-export-outline\",\n \"calendar-filter\",\n \"calendar-filter-outline\",\n \"calendar-heart\",\n \"calendar-heart-outline\",\n \"calendar-import\",\n \"calendar-import-outline\",\n \"calendar-lock\",\n \"calendar-lock-open\",\n \"calendar-lock-open-outline\",\n \"calendar-lock-outline\",\n \"calendar-minus\",\n \"calendar-minus-outline\",\n \"calendar-month\",\n \"calendar-month-outline\",\n \"calendar-multiple\",\n \"calendar-multiple-check\",\n \"calendar-multiselect\",\n \"calendar-multiselect-outline\",\n \"calendar-outline\",\n \"calendar-plus\",\n \"calendar-plus-outline\",\n \"calendar-question\",\n \"calendar-question-outline\",\n \"calendar-range\",\n \"calendar-range-outline\",\n \"calendar-refresh\",\n \"calendar-refresh-outline\",\n \"calendar-remove\",\n \"calendar-remove-outline\",\n \"calendar-search\",\n \"calendar-search-outline\",\n \"calendar-star\",\n \"calendar-star-four-points\",\n \"calendar-star-outline\",\n \"calendar-start\",\n \"calendar-start-outline\",\n \"calendar-sync\",\n \"calendar-sync-outline\",\n \"calendar-text\",\n \"calendar-text-outline\",\n \"calendar-today\",\n \"calendar-today-outline\",\n \"calendar-week\",\n \"calendar-week-begin\",\n \"calendar-week-begin-outline\",\n \"calendar-week-outline\",\n \"calendar-weekend\",\n \"calendar-weekend-outline\",\n \"call-made\",\n \"call-merge\",\n \"call-missed\",\n \"call-received\",\n \"call-split\",\n \"camcorder\",\n \"camcorder-off\",\n \"camera\",\n \"camera-account\",\n \"camera-burst\",\n \"camera-control\",\n \"camera-document\",\n \"camera-document-off\",\n \"camera-enhance\",\n \"camera-enhance-outline\",\n \"camera-flip\",\n \"camera-flip-outline\",\n \"camera-front\",\n \"camera-front-variant\",\n \"camera-gopro\",\n \"camera-image\",\n \"camera-iris\",\n \"camera-lock\",\n \"camera-lock-open\",\n \"camera-lock-open-outline\",\n \"camera-lock-outline\",\n \"camera-marker\",\n \"camera-marker-outline\",\n \"camera-metering-center\",\n \"camera-metering-matrix\",\n \"camera-metering-partial\",\n \"camera-metering-spot\",\n \"camera-off\",\n \"camera-off-outline\",\n \"camera-outline\",\n \"camera-party-mode\",\n \"camera-plus\",\n \"camera-plus-outline\",\n \"camera-rear\",\n \"camera-rear-variant\",\n \"camera-retake\",\n \"camera-retake-outline\",\n \"camera-switch\",\n \"camera-switch-outline\",\n \"camera-timer\",\n \"camera-wireless\",\n \"camera-wireless-outline\",\n \"campfire\",\n \"cancel\",\n \"candelabra\",\n \"candelabra-fire\",\n \"candle\",\n \"candy\",\n \"candy-off\",\n \"candy-off-outline\",\n \"candy-outline\",\n \"candycane\",\n \"cannabis\",\n \"cannabis-off\",\n \"caps-lock\",\n \"car\",\n \"car-2-plus\",\n \"car-3-plus\",\n \"car-arrow-left\",\n \"car-arrow-right\",\n \"car-back\",\n \"car-battery\",\n \"car-brake-abs\",\n \"car-brake-alert\",\n \"car-brake-fluid-level\",\n \"car-brake-hold\",\n \"car-brake-low-pressure\",\n \"car-brake-parking\",\n \"car-brake-retarder\",\n \"car-brake-temperature\",\n \"car-brake-worn-linings\",\n \"car-child-seat\",\n \"car-clock\",\n \"car-clutch\",\n \"car-cog\",\n \"car-connected\",\n \"car-convertible\",\n \"car-coolant-level\",\n \"car-cruise-control\",\n \"car-defrost-front\",\n \"car-defrost-rear\",\n \"car-door\",\n \"car-door-lock\",\n \"car-door-lock-open\",\n \"car-electric\",\n \"car-electric-outline\",\n \"car-emergency\",\n \"car-esp\",\n \"car-estate\",\n \"car-hatchback\",\n \"car-info\",\n \"car-key\",\n \"car-lifted-pickup\",\n \"car-light-alert\",\n \"car-light-dimmed\",\n \"car-light-fog\",\n \"car-light-high\",\n \"car-limousine\",\n \"car-multiple\",\n \"car-off\",\n \"car-outline\",\n \"car-parking-lights\",\n \"car-pickup\",\n \"car-search\",\n \"car-search-outline\",\n \"car-seat\",\n \"car-seat-cooler\",\n \"car-seat-heater\",\n \"car-select\",\n \"car-settings\",\n \"car-shift-pattern\",\n \"car-side\",\n \"car-speed-limiter\",\n \"car-sports\",\n \"car-tire-alert\",\n \"car-traction-control\",\n \"car-turbocharger\",\n \"car-wash\",\n \"car-windshield\",\n \"car-windshield-outline\",\n \"car-wireless\",\n \"car-wrench\",\n \"carabiner\",\n \"caravan\",\n \"card\",\n \"card-account-details\",\n \"card-account-details-outline\",\n \"card-account-details-star\",\n \"card-account-details-star-outline\",\n \"card-account-mail\",\n \"card-account-mail-outline\",\n \"card-account-phone\",\n \"card-account-phone-outline\",\n \"card-bulleted\",\n \"card-bulleted-off\",\n \"card-bulleted-off-outline\",\n \"card-bulleted-outline\",\n \"card-bulleted-settings\",\n \"card-bulleted-settings-outline\",\n \"card-minus\",\n \"card-minus-outline\",\n \"card-multiple\",\n \"card-multiple-outline\",\n \"card-off\",\n \"card-off-outline\",\n \"card-outline\",\n \"card-plus\",\n \"card-plus-outline\",\n \"card-remove\",\n \"card-remove-outline\",\n \"card-search\",\n \"card-search-outline\",\n \"card-text\",\n \"card-text-outline\",\n \"cards\",\n \"cards-club\",\n \"cards-club-outline\",\n \"cards-diamond\",\n \"cards-diamond-outline\",\n \"cards-heart\",\n \"cards-heart-outline\",\n \"cards-outline\",\n \"cards-playing\",\n \"cards-playing-club\",\n \"cards-playing-club-multiple\",\n \"cards-playing-club-multiple-outline\",\n \"cards-playing-club-outline\",\n \"cards-playing-diamond\",\n \"cards-playing-diamond-multiple\",\n \"cards-playing-diamond-multiple-outline\",\n \"cards-playing-diamond-outline\",\n \"cards-playing-heart\",\n \"cards-playing-heart-multiple\",\n \"cards-playing-heart-multiple-outline\",\n \"cards-playing-heart-outline\",\n \"cards-playing-outline\",\n \"cards-playing-spade\",\n \"cards-playing-spade-multiple\",\n \"cards-playing-spade-multiple-outline\",\n \"cards-playing-spade-outline\",\n \"cards-spade\",\n \"cards-spade-outline\",\n \"cards-variant\",\n \"carrot\",\n \"cart\",\n \"cart-arrow-down\",\n \"cart-arrow-right\",\n \"cart-arrow-up\",\n \"cart-check\",\n \"cart-heart\",\n \"cart-minus\",\n \"cart-off\",\n \"cart-outline\",\n \"cart-percent\",\n \"cart-plus\",\n \"cart-remove\",\n \"cart-variant\",\n \"case-sensitive-alt\",\n \"cash\",\n \"cash-100\",\n \"cash-check\",\n \"cash-clock\",\n \"cash-edit\",\n \"cash-fast\",\n \"cash-lock\",\n \"cash-lock-open\",\n \"cash-marker\",\n \"cash-minus\",\n \"cash-multiple\",\n \"cash-off\",\n \"cash-plus\",\n \"cash-refund\",\n \"cash-register\",\n \"cash-remove\",\n \"cash-sync\",\n \"cassette\",\n \"cast\",\n \"cast-audio\",\n \"cast-audio-variant\",\n \"cast-connected\",\n \"cast-education\",\n \"cast-off\",\n \"cast-variant\",\n \"castle\",\n \"cat\",\n \"cctv\",\n \"cctv-off\",\n \"ceiling-fan\",\n \"ceiling-fan-light\",\n \"ceiling-light\",\n \"ceiling-light-multiple\",\n \"ceiling-light-multiple-outline\",\n \"ceiling-light-outline\",\n \"cellphone\",\n \"cellphone-arrow-down\",\n \"cellphone-arrow-down-variant\",\n \"cellphone-basic\",\n \"cellphone-charging\",\n \"cellphone-check\",\n \"cellphone-cog\",\n \"cellphone-dock\",\n \"cellphone-information\",\n \"cellphone-key\",\n \"cellphone-link\",\n \"cellphone-link-off\",\n \"cellphone-lock\",\n \"cellphone-marker\",\n \"cellphone-message\",\n \"cellphone-message-off\",\n \"cellphone-nfc\",\n \"cellphone-nfc-off\",\n \"cellphone-off\",\n \"cellphone-play\",\n \"cellphone-remove\",\n \"cellphone-screenshot\",\n \"cellphone-settings\",\n \"cellphone-sound\",\n \"cellphone-text\",\n \"cellphone-wireless\",\n \"centos\",\n \"certificate\",\n \"certificate-outline\",\n \"chair-rolling\",\n \"chair-school\",\n \"chandelier\",\n \"charity\",\n \"charity-search\",\n \"chart-arc\",\n \"chart-areaspline\",\n \"chart-areaspline-variant\",\n \"chart-bar\",\n \"chart-bar-stacked\",\n \"chart-bell-curve\",\n \"chart-bell-curve-cumulative\",\n \"chart-box\",\n \"chart-box-multiple\",\n \"chart-box-multiple-outline\",\n \"chart-box-outline\",\n \"chart-box-plus-outline\",\n \"chart-bubble\",\n \"chart-donut\",\n \"chart-donut-variant\",\n \"chart-gantt\",\n \"chart-histogram\",\n \"chart-line\",\n \"chart-line-stacked\",\n \"chart-line-variant\",\n \"chart-multiline\",\n \"chart-multiple\",\n \"chart-pie\",\n \"chart-pie-outline\",\n \"chart-ppf\",\n \"chart-sankey\",\n \"chart-sankey-variant\",\n \"chart-scatter-plot\",\n \"chart-scatter-plot-hexbin\",\n \"chart-timeline\",\n \"chart-timeline-variant\",\n \"chart-timeline-variant-shimmer\",\n \"chart-tree\",\n \"chart-waterfall\",\n \"chat\",\n \"chat-alert\",\n \"chat-alert-outline\",\n \"chat-minus\",\n \"chat-minus-outline\",\n \"chat-outline\",\n \"chat-plus\",\n \"chat-plus-outline\",\n \"chat-processing\",\n \"chat-processing-outline\",\n \"chat-question\",\n \"chat-question-outline\",\n \"chat-remove\",\n \"chat-remove-outline\",\n \"chat-sleep\",\n \"chat-sleep-outline\",\n \"check\",\n \"check-all\",\n \"check-bold\",\n \"check-circle\",\n \"check-circle-outline\",\n \"check-decagram\",\n \"check-decagram-outline\",\n \"check-network\",\n \"check-network-outline\",\n \"check-outline\",\n \"check-underline\",\n \"check-underline-circle\",\n \"check-underline-circle-outline\",\n \"checkbook\",\n \"checkbook-arrow-left\",\n \"checkbook-arrow-right\",\n \"checkbox-blank\",\n \"checkbox-blank-badge\",\n \"checkbox-blank-badge-outline\",\n \"checkbox-blank-circle\",\n \"checkbox-blank-circle-outline\",\n \"checkbox-blank-off\",\n \"checkbox-blank-off-outline\",\n \"checkbox-blank-outline\",\n \"checkbox-intermediate\",\n \"checkbox-intermediate-variant\",\n \"checkbox-marked\",\n \"checkbox-marked-circle\",\n \"checkbox-marked-circle-auto-outline\",\n \"checkbox-marked-circle-minus-outline\",\n \"checkbox-marked-circle-outline\",\n \"checkbox-marked-circle-plus-outline\",\n \"checkbox-marked-outline\",\n \"checkbox-multiple-blank\",\n \"checkbox-multiple-blank-circle\",\n \"checkbox-multiple-blank-circle-outline\",\n \"checkbox-multiple-blank-outline\",\n \"checkbox-multiple-marked\",\n \"checkbox-multiple-marked-circle\",\n \"checkbox-multiple-marked-circle-outline\",\n \"checkbox-multiple-marked-outline\",\n \"checkbox-multiple-outline\",\n \"checkbox-outline\",\n \"checkerboard\",\n \"checkerboard-minus\",\n \"checkerboard-plus\",\n \"checkerboard-remove\",\n \"cheese\",\n \"cheese-off\",\n \"chef-hat\",\n \"chemical-weapon\",\n \"chess-bishop\",\n \"chess-king\",\n \"chess-knight\",\n \"chess-pawn\",\n \"chess-queen\",\n \"chess-rook\",\n \"chevron-double-down\",\n \"chevron-double-left\",\n \"chevron-double-right\",\n \"chevron-double-up\",\n \"chevron-down\",\n \"chevron-down-box\",\n \"chevron-down-box-outline\",\n \"chevron-down-circle\",\n \"chevron-down-circle-outline\",\n \"chevron-left\",\n \"chevron-left-box\",\n \"chevron-left-box-outline\",\n \"chevron-left-circle\",\n \"chevron-left-circle-outline\",\n \"chevron-right\",\n \"chevron-right-box\",\n \"chevron-right-box-outline\",\n \"chevron-right-circle\",\n \"chevron-right-circle-outline\",\n \"chevron-triple-down\",\n \"chevron-triple-left\",\n \"chevron-triple-right\",\n \"chevron-triple-up\",\n \"chevron-up\",\n \"chevron-up-box\",\n \"chevron-up-box-outline\",\n \"chevron-up-circle\",\n \"chevron-up-circle-outline\",\n \"chili-alert\",\n \"chili-alert-outline\",\n \"chili-hot\",\n \"chili-hot-outline\",\n \"chili-medium\",\n \"chili-medium-outline\",\n \"chili-mild\",\n \"chili-mild-outline\",\n \"chili-off\",\n \"chili-off-outline\",\n \"chip\",\n \"church\",\n \"church-outline\",\n \"cigar\",\n \"cigar-off\",\n \"circle\",\n \"circle-box\",\n \"circle-box-outline\",\n \"circle-double\",\n \"circle-edit-outline\",\n \"circle-expand\",\n \"circle-half\",\n \"circle-half-full\",\n \"circle-medium\",\n \"circle-multiple\",\n \"circle-multiple-outline\",\n \"circle-off-outline\",\n \"circle-opacity\",\n \"circle-outline\",\n \"circle-slice-1\",\n \"circle-slice-2\",\n \"circle-slice-3\",\n \"circle-slice-4\",\n \"circle-slice-5\",\n \"circle-slice-6\",\n \"circle-slice-7\",\n \"circle-slice-8\",\n \"circle-small\",\n \"circular-saw\",\n \"city\",\n \"city-switch\",\n \"city-variant\",\n \"city-variant-outline\",\n \"clipboard\",\n \"clipboard-account\",\n \"clipboard-account-outline\",\n \"clipboard-alert\",\n \"clipboard-alert-outline\",\n \"clipboard-arrow-down\",\n \"clipboard-arrow-down-outline\",\n \"clipboard-arrow-left\",\n \"clipboard-arrow-left-outline\",\n \"clipboard-arrow-right\",\n \"clipboard-arrow-right-outline\",\n \"clipboard-arrow-up\",\n \"clipboard-arrow-up-outline\",\n \"clipboard-check\",\n \"clipboard-check-multiple\",\n \"clipboard-check-multiple-outline\",\n \"clipboard-check-outline\",\n \"clipboard-clock\",\n \"clipboard-clock-outline\",\n \"clipboard-edit\",\n \"clipboard-edit-outline\",\n \"clipboard-file\",\n \"clipboard-file-outline\",\n \"clipboard-flow\",\n \"clipboard-flow-outline\",\n \"clipboard-list\",\n \"clipboard-list-outline\",\n \"clipboard-minus\",\n \"clipboard-minus-outline\",\n \"clipboard-multiple\",\n \"clipboard-multiple-outline\",\n \"clipboard-off\",\n \"clipboard-off-outline\",\n \"clipboard-outline\",\n \"clipboard-play\",\n \"clipboard-play-multiple\",\n \"clipboard-play-multiple-outline\",\n \"clipboard-play-outline\",\n \"clipboard-plus\",\n \"clipboard-plus-outline\",\n \"clipboard-pulse\",\n \"clipboard-pulse-outline\",\n \"clipboard-remove\",\n \"clipboard-remove-outline\",\n \"clipboard-search\",\n \"clipboard-search-outline\",\n \"clipboard-text\",\n \"clipboard-text-clock\",\n \"clipboard-text-clock-outline\",\n \"clipboard-text-multiple\",\n \"clipboard-text-multiple-outline\",\n \"clipboard-text-off\",\n \"clipboard-text-off-outline\",\n \"clipboard-text-outline\",\n \"clipboard-text-play\",\n \"clipboard-text-play-outline\",\n \"clipboard-text-search\",\n \"clipboard-text-search-outline\",\n \"clippy\",\n \"clock\",\n \"clock-alert\",\n \"clock-alert-outline\",\n \"clock-check\",\n \"clock-check-outline\",\n \"clock-digital\",\n \"clock-edit\",\n \"clock-edit-outline\",\n \"clock-end\",\n \"clock-fast\",\n \"clock-in\",\n \"clock-minus\",\n \"clock-minus-outline\",\n \"clock-out\",\n \"clock-outline\",\n \"clock-plus\",\n \"clock-plus-outline\",\n \"clock-remove\",\n \"clock-remove-outline\",\n \"clock-star-four-points\",\n \"clock-star-four-points-outline\",\n \"clock-start\",\n \"clock-time-eight\",\n \"clock-time-eight-outline\",\n \"clock-time-eleven\",\n \"clock-time-eleven-outline\",\n \"clock-time-five\",\n \"clock-time-five-outline\",\n \"clock-time-four\",\n \"clock-time-four-outline\",\n \"clock-time-nine\",\n \"clock-time-nine-outline\",\n \"clock-time-one\",\n \"clock-time-one-outline\",\n \"clock-time-seven\",\n \"clock-time-seven-outline\",\n \"clock-time-six\",\n \"clock-time-six-outline\",\n \"clock-time-ten\",\n \"clock-time-ten-outline\",\n \"clock-time-three\",\n \"clock-time-three-outline\",\n \"clock-time-twelve\",\n \"clock-time-twelve-outline\",\n \"clock-time-two\",\n \"clock-time-two-outline\",\n \"close\",\n \"close-box\",\n \"close-box-multiple\",\n \"close-box-multiple-outline\",\n \"close-box-outline\",\n \"close-circle\",\n \"close-circle-multiple\",\n \"close-circle-multiple-outline\",\n \"close-circle-outline\",\n \"close-network\",\n \"close-network-outline\",\n \"close-octagon\",\n \"close-octagon-outline\",\n \"close-outline\",\n \"close-thick\",\n \"closed-caption\",\n \"closed-caption-outline\",\n \"cloud\",\n \"cloud-alert\",\n \"cloud-alert-outline\",\n \"cloud-arrow-down\",\n \"cloud-arrow-down-outline\",\n \"cloud-arrow-left\",\n \"cloud-arrow-left-outline\",\n \"cloud-arrow-right\",\n \"cloud-arrow-right-outline\",\n \"cloud-arrow-up\",\n \"cloud-arrow-up-outline\",\n \"cloud-braces\",\n \"cloud-cancel\",\n \"cloud-cancel-outline\",\n \"cloud-check\",\n \"cloud-check-outline\",\n \"cloud-check-variant\",\n \"cloud-check-variant-outline\",\n \"cloud-circle\",\n \"cloud-circle-outline\",\n \"cloud-clock\",\n \"cloud-clock-outline\",\n \"cloud-cog\",\n \"cloud-cog-outline\",\n \"cloud-download\",\n \"cloud-download-outline\",\n \"cloud-key\",\n \"cloud-key-outline\",\n \"cloud-lock\",\n \"cloud-lock-open\",\n \"cloud-lock-open-outline\",\n \"cloud-lock-outline\",\n \"cloud-minus\",\n \"cloud-minus-outline\",\n \"cloud-off\",\n \"cloud-off-outline\",\n \"cloud-outline\",\n \"cloud-percent\",\n \"cloud-percent-outline\",\n \"cloud-plus\",\n \"cloud-plus-outline\",\n \"cloud-print\",\n \"cloud-print-outline\",\n \"cloud-question\",\n \"cloud-question-outline\",\n \"cloud-refresh\",\n \"cloud-refresh-outline\",\n \"cloud-refresh-variant\",\n \"cloud-refresh-variant-outline\",\n \"cloud-remove\",\n \"cloud-remove-outline\",\n \"cloud-search\",\n \"cloud-search-outline\",\n \"cloud-sync\",\n \"cloud-sync-outline\",\n \"cloud-tags\",\n \"cloud-upload\",\n \"cloud-upload-outline\",\n \"clouds\",\n \"clover\",\n \"clover-outline\",\n \"coach-lamp\",\n \"coach-lamp-variant\",\n \"coat-rack\",\n \"code-array\",\n \"code-block-braces\",\n \"code-block-brackets\",\n \"code-block-parentheses\",\n \"code-block-tags\",\n \"code-braces\",\n \"code-braces-box\",\n \"code-brackets\",\n \"code-equal\",\n \"code-greater-than\",\n \"code-greater-than-or-equal\",\n \"code-json\",\n \"code-less-than\",\n \"code-less-than-or-equal\",\n \"code-not-equal\",\n \"code-not-equal-variant\",\n \"code-parentheses\",\n \"code-parentheses-box\",\n \"code-string\",\n \"code-tags\",\n \"code-tags-check\",\n \"codepen\",\n \"coffee\",\n \"coffee-maker\",\n \"coffee-maker-check\",\n \"coffee-maker-check-outline\",\n \"coffee-maker-outline\",\n \"coffee-off\",\n \"coffee-off-outline\",\n \"coffee-outline\",\n \"coffee-to-go\",\n \"coffee-to-go-outline\",\n \"coffin\",\n \"cog\",\n \"cog-box\",\n \"cog-clockwise\",\n \"cog-counterclockwise\",\n \"cog-off\",\n \"cog-off-outline\",\n \"cog-outline\",\n \"cog-pause\",\n \"cog-pause-outline\",\n \"cog-play\",\n \"cog-play-outline\",\n \"cog-refresh\",\n \"cog-refresh-outline\",\n \"cog-stop\",\n \"cog-stop-outline\",\n \"cog-sync\",\n \"cog-sync-outline\",\n \"cog-transfer\",\n \"cog-transfer-outline\",\n \"cogs\",\n \"collage\",\n \"collapse-all\",\n \"collapse-all-outline\",\n \"color-helper\",\n \"comma\",\n \"comma-box\",\n \"comma-box-outline\",\n \"comma-circle\",\n \"comma-circle-outline\",\n \"comment\",\n \"comment-account\",\n \"comment-account-outline\",\n \"comment-alert\",\n \"comment-alert-outline\",\n \"comment-arrow-left\",\n \"comment-arrow-left-outline\",\n \"comment-arrow-right\",\n \"comment-arrow-right-outline\",\n \"comment-bookmark\",\n \"comment-bookmark-outline\",\n \"comment-check\",\n \"comment-check-outline\",\n \"comment-edit\",\n \"comment-edit-outline\",\n \"comment-eye\",\n \"comment-eye-outline\",\n \"comment-flash\",\n \"comment-flash-outline\",\n \"comment-minus\",\n \"comment-minus-outline\",\n \"comment-multiple\",\n \"comment-multiple-outline\",\n \"comment-off\",\n \"comment-off-outline\",\n \"comment-outline\",\n \"comment-plus\",\n \"comment-plus-outline\",\n \"comment-processing\",\n \"comment-processing-outline\",\n \"comment-question\",\n \"comment-question-outline\",\n \"comment-quote\",\n \"comment-quote-outline\",\n \"comment-remove\",\n \"comment-remove-outline\",\n \"comment-search\",\n \"comment-search-outline\",\n \"comment-text\",\n \"comment-text-multiple\",\n \"comment-text-multiple-outline\",\n \"comment-text-outline\",\n \"compare\",\n \"compare-horizontal\",\n \"compare-remove\",\n \"compare-vertical\",\n \"compass\",\n \"compass-off\",\n \"compass-off-outline\",\n \"compass-outline\",\n \"compass-rose\",\n \"compost\",\n \"cone\",\n \"cone-off\",\n \"connection\",\n \"console\",\n \"console-line\",\n \"console-network\",\n \"console-network-outline\",\n \"consolidate\",\n \"contactless-payment\",\n \"contactless-payment-circle\",\n \"contactless-payment-circle-outline\",\n \"contacts\",\n \"contacts-outline\",\n \"contain\",\n \"contain-end\",\n \"contain-start\",\n \"content-copy\",\n \"content-cut\",\n \"content-duplicate\",\n \"content-paste\",\n \"content-save\",\n \"content-save-alert\",\n \"content-save-alert-outline\",\n \"content-save-all\",\n \"content-save-all-outline\",\n \"content-save-check\",\n \"content-save-check-outline\",\n \"content-save-cog\",\n \"content-save-cog-outline\",\n \"content-save-edit\",\n \"content-save-edit-outline\",\n \"content-save-minus\",\n \"content-save-minus-outline\",\n \"content-save-move\",\n \"content-save-move-outline\",\n \"content-save-off\",\n \"content-save-off-outline\",\n \"content-save-outline\",\n \"content-save-plus\",\n \"content-save-plus-outline\",\n \"content-save-settings\",\n \"content-save-settings-outline\",\n \"contrast\",\n \"contrast-box\",\n \"contrast-circle\",\n \"controller\",\n \"controller-classic\",\n \"controller-classic-outline\",\n \"controller-off\",\n \"cookie\",\n \"cookie-alert\",\n \"cookie-alert-outline\",\n \"cookie-check\",\n \"cookie-check-outline\",\n \"cookie-clock\",\n \"cookie-clock-outline\",\n \"cookie-cog\",\n \"cookie-cog-outline\",\n \"cookie-edit\",\n \"cookie-edit-outline\",\n \"cookie-lock\",\n \"cookie-lock-outline\",\n \"cookie-minus\",\n \"cookie-minus-outline\",\n \"cookie-off\",\n \"cookie-off-outline\",\n \"cookie-outline\",\n \"cookie-plus\",\n \"cookie-plus-outline\",\n \"cookie-refresh\",\n \"cookie-refresh-outline\",\n \"cookie-remove\",\n \"cookie-remove-outline\",\n \"cookie-settings\",\n \"cookie-settings-outline\",\n \"coolant-temperature\",\n \"copyleft\",\n \"copyright\",\n \"cordova\",\n \"corn\",\n \"corn-off\",\n \"cosine-wave\",\n \"counter\",\n \"countertop\",\n \"countertop-outline\",\n \"cow\",\n \"cow-off\",\n \"cpu-32-bit\",\n \"cpu-64-bit\",\n \"cradle\",\n \"cradle-outline\",\n \"crane\",\n \"creation\",\n \"creation-outline\",\n \"creative-commons\",\n \"credit-card\",\n \"credit-card-check\",\n \"credit-card-check-outline\",\n \"credit-card-chip\",\n \"credit-card-chip-outline\",\n \"credit-card-clock\",\n \"credit-card-clock-outline\",\n \"credit-card-edit\",\n \"credit-card-edit-outline\",\n \"credit-card-fast\",\n \"credit-card-fast-outline\",\n \"credit-card-lock\",\n \"credit-card-lock-outline\",\n \"credit-card-marker\",\n \"credit-card-marker-outline\",\n \"credit-card-minus\",\n \"credit-card-minus-outline\",\n \"credit-card-multiple\",\n \"credit-card-multiple-outline\",\n \"credit-card-off\",\n \"credit-card-off-outline\",\n \"credit-card-outline\",\n \"credit-card-plus\",\n \"credit-card-plus-outline\",\n \"credit-card-refresh\",\n \"credit-card-refresh-outline\",\n \"credit-card-refund\",\n \"credit-card-refund-outline\",\n \"credit-card-remove\",\n \"credit-card-remove-outline\",\n \"credit-card-scan\",\n \"credit-card-scan-outline\",\n \"credit-card-search\",\n \"credit-card-search-outline\",\n \"credit-card-settings\",\n \"credit-card-settings-outline\",\n \"credit-card-sync\",\n \"credit-card-sync-outline\",\n \"credit-card-wireless\",\n \"credit-card-wireless-off\",\n \"credit-card-wireless-off-outline\",\n \"credit-card-wireless-outline\",\n \"cricket\",\n \"crop\",\n \"crop-free\",\n \"crop-landscape\",\n \"crop-portrait\",\n \"crop-rotate\",\n \"crop-square\",\n \"cross\",\n \"cross-bolnisi\",\n \"cross-celtic\",\n \"cross-outline\",\n \"crosshairs\",\n \"crosshairs-gps\",\n \"crosshairs-off\",\n \"crosshairs-question\",\n \"crowd\",\n \"crown\",\n \"crown-circle\",\n \"crown-circle-outline\",\n \"crown-outline\",\n \"cryengine\",\n \"crystal-ball\",\n \"cube\",\n \"cube-off\",\n \"cube-off-outline\",\n \"cube-outline\",\n \"cube-scan\",\n \"cube-send\",\n \"cube-unfolded\",\n \"cup\",\n \"cup-off\",\n \"cup-off-outline\",\n \"cup-outline\",\n \"cup-water\",\n \"cupboard\",\n \"cupboard-outline\",\n \"cupcake\",\n \"curling\",\n \"currency-bdt\",\n \"currency-brl\",\n \"currency-btc\",\n \"currency-cny\",\n \"currency-eth\",\n \"currency-eur\",\n \"currency-eur-off\",\n \"currency-fra\",\n \"currency-gbp\",\n \"currency-ils\",\n \"currency-inr\",\n \"currency-jpy\",\n \"currency-krw\",\n \"currency-kzt\",\n \"currency-mnt\",\n \"currency-ngn\",\n \"currency-php\",\n \"currency-rial\",\n \"currency-rub\",\n \"currency-rupee\",\n \"currency-sign\",\n \"currency-thb\",\n \"currency-try\",\n \"currency-twd\",\n \"currency-uah\",\n \"currency-usd\",\n \"currency-usd-off\",\n \"current-ac\",\n \"current-dc\",\n \"cursor-default\",\n \"cursor-default-click\",\n \"cursor-default-click-outline\",\n \"cursor-default-gesture\",\n \"cursor-default-gesture-outline\",\n \"cursor-default-outline\",\n \"cursor-move\",\n \"cursor-pointer\",\n \"cursor-text\",\n \"curtains\",\n \"curtains-closed\",\n \"cylinder\",\n \"cylinder-off\",\n \"dance-ballroom\",\n \"dance-pole\",\n \"data-matrix\",\n \"data-matrix-edit\",\n \"data-matrix-minus\",\n \"data-matrix-plus\",\n \"data-matrix-remove\",\n \"data-matrix-scan\",\n \"database\",\n \"database-alert\",\n \"database-alert-outline\",\n \"database-arrow-down\",\n \"database-arrow-down-outline\",\n \"database-arrow-left\",\n \"database-arrow-left-outline\",\n \"database-arrow-right\",\n \"database-arrow-right-outline\",\n \"database-arrow-up\",\n \"database-arrow-up-outline\",\n \"database-check\",\n \"database-check-outline\",\n \"database-clock\",\n \"database-clock-outline\",\n \"database-cog\",\n \"database-cog-outline\",\n \"database-edit\",\n \"database-edit-outline\",\n \"database-export\",\n \"database-export-outline\",\n \"database-eye\",\n \"database-eye-off\",\n \"database-eye-off-outline\",\n \"database-eye-outline\",\n \"database-import\",\n \"database-import-outline\",\n \"database-lock\",\n \"database-lock-outline\",\n \"database-marker\",\n \"database-marker-outline\",\n \"database-minus\",\n \"database-minus-outline\",\n \"database-off\",\n \"database-off-outline\",\n \"database-outline\",\n \"database-plus\",\n \"database-plus-outline\",\n \"database-refresh\",\n \"database-refresh-outline\",\n \"database-remove\",\n \"database-remove-outline\",\n \"database-search\",\n \"database-search-outline\",\n \"database-settings\",\n \"database-settings-outline\",\n \"database-sync\",\n \"database-sync-outline\",\n \"death-star\",\n \"death-star-variant\",\n \"deathly-hallows\",\n \"debian\",\n \"debug-step-into\",\n \"debug-step-out\",\n \"debug-step-over\",\n \"decagram\",\n \"decagram-outline\",\n \"decimal\",\n \"decimal-comma\",\n \"decimal-comma-decrease\",\n \"decimal-comma-increase\",\n \"decimal-decrease\",\n \"decimal-increase\",\n \"delete\",\n \"delete-alert\",\n \"delete-alert-outline\",\n \"delete-circle\",\n \"delete-circle-outline\",\n \"delete-clock\",\n \"delete-clock-outline\",\n \"delete-empty\",\n \"delete-empty-outline\",\n \"delete-forever\",\n \"delete-forever-outline\",\n \"delete-off\",\n \"delete-off-outline\",\n \"delete-outline\",\n \"delete-restore\",\n \"delete-sweep\",\n \"delete-sweep-outline\",\n \"delete-variant\",\n \"delta\",\n \"desk\",\n \"desk-lamp\",\n \"desk-lamp-off\",\n \"desk-lamp-on\",\n \"deskphone\",\n \"desktop-classic\",\n \"desktop-tower\",\n \"desktop-tower-monitor\",\n \"details\",\n \"dev-to\",\n \"developer-board\",\n \"deviantart\",\n \"devices\",\n \"dharmachakra\",\n \"diabetes\",\n \"dialpad\",\n \"diameter\",\n \"diameter-outline\",\n \"diameter-variant\",\n \"diamond\",\n \"diamond-outline\",\n \"diamond-stone\",\n \"diaper-outline\",\n \"dice-1\",\n \"dice-1-outline\",\n \"dice-2\",\n \"dice-2-outline\",\n \"dice-3\",\n \"dice-3-outline\",\n \"dice-4\",\n \"dice-4-outline\",\n \"dice-5\",\n \"dice-5-outline\",\n \"dice-6\",\n \"dice-6-outline\",\n \"dice-d10\",\n \"dice-d10-outline\",\n \"dice-d12\",\n \"dice-d12-outline\",\n \"dice-d20\",\n \"dice-d20-outline\",\n \"dice-d4\",\n \"dice-d4-outline\",\n \"dice-d6\",\n \"dice-d6-outline\",\n \"dice-d8\",\n \"dice-d8-outline\",\n \"dice-multiple\",\n \"dice-multiple-outline\",\n \"digital-ocean\",\n \"dip-switch\",\n \"directions\",\n \"directions-fork\",\n \"disc\",\n \"disc-alert\",\n \"disc-player\",\n \"dishwasher\",\n \"dishwasher-alert\",\n \"dishwasher-off\",\n \"disqus\",\n \"distribute-horizontal-center\",\n \"distribute-horizontal-left\",\n \"distribute-horizontal-right\",\n \"distribute-vertical-bottom\",\n \"distribute-vertical-center\",\n \"distribute-vertical-top\",\n \"diversify\",\n \"diving\",\n \"diving-flippers\",\n \"diving-helmet\",\n \"diving-scuba\",\n \"diving-scuba-flag\",\n \"diving-scuba-mask\",\n \"diving-scuba-tank\",\n \"diving-scuba-tank-multiple\",\n \"diving-snorkel\",\n \"division\",\n \"division-box\",\n \"dlna\",\n \"dna\",\n \"dns\",\n \"dns-outline\",\n \"dock-bottom\",\n \"dock-left\",\n \"dock-right\",\n \"dock-top\",\n \"dock-window\",\n \"docker\",\n \"doctor\",\n \"dog\",\n \"dog-service\",\n \"dog-side\",\n \"dog-side-off\",\n \"dolby\",\n \"dolly\",\n \"dolphin\",\n \"domain\",\n \"domain-off\",\n \"domain-plus\",\n \"domain-remove\",\n \"domain-switch\",\n \"dome-light\",\n \"domino-mask\",\n \"donkey\",\n \"door\",\n \"door-closed\",\n \"door-closed-cancel\",\n \"door-closed-lock\",\n \"door-open\",\n \"door-sliding\",\n \"door-sliding-lock\",\n \"door-sliding-open\",\n \"doorbell\",\n \"doorbell-video\",\n \"dot-net\",\n \"dots-circle\",\n \"dots-grid\",\n \"dots-hexagon\",\n \"dots-horizontal\",\n \"dots-horizontal-circle\",\n \"dots-horizontal-circle-outline\",\n \"dots-square\",\n \"dots-triangle\",\n \"dots-vertical\",\n \"dots-vertical-circle\",\n \"dots-vertical-circle-outline\",\n \"download\",\n \"download-box\",\n \"download-box-outline\",\n \"download-circle\",\n \"download-circle-outline\",\n \"download-lock\",\n \"download-lock-outline\",\n \"download-multiple\",\n \"download-multiple-outline\",\n \"download-network\",\n \"download-network-outline\",\n \"download-off\",\n \"download-off-outline\",\n \"download-outline\",\n \"drag\",\n \"drag-horizontal\",\n \"drag-horizontal-variant\",\n \"drag-variant\",\n \"drag-vertical\",\n \"drag-vertical-variant\",\n \"drama-masks\",\n \"draw\",\n \"draw-pen\",\n \"drawing\",\n \"drawing-box\",\n \"dresser\",\n \"dresser-outline\",\n \"drone\",\n \"dropbox\",\n \"drupal\",\n \"duck\",\n \"dumbbell\",\n \"dump-truck\",\n \"ear-hearing\",\n \"ear-hearing-loop\",\n \"ear-hearing-off\",\n \"earbuds\",\n \"earbuds-off\",\n \"earbuds-off-outline\",\n \"earbuds-outline\",\n \"earth\",\n \"earth-arrow-down\",\n \"earth-arrow-left\",\n \"earth-arrow-right\",\n \"earth-arrow-up\",\n \"earth-box\",\n \"earth-box-minus\",\n \"earth-box-off\",\n \"earth-box-plus\",\n \"earth-box-remove\",\n \"earth-minus\",\n \"earth-off\",\n \"earth-plus\",\n \"earth-remove\",\n \"egg\",\n \"egg-easter\",\n \"egg-fried\",\n \"egg-off\",\n \"egg-off-outline\",\n \"egg-outline\",\n \"eiffel-tower\",\n \"eight-track\",\n \"eject\",\n \"eject-circle\",\n \"eject-circle-outline\",\n \"eject-outline\",\n \"electric-switch\",\n \"electric-switch-closed\",\n \"electron-framework\",\n \"elephant\",\n \"elevation-decline\",\n \"elevation-rise\",\n \"elevator\",\n \"elevator-down\",\n \"elevator-passenger\",\n \"elevator-passenger-off\",\n \"elevator-passenger-off-outline\",\n \"elevator-passenger-outline\",\n \"elevator-up\",\n \"ellipse\",\n \"ellipse-outline\",\n \"email\",\n \"email-alert\",\n \"email-alert-outline\",\n \"email-arrow-left\",\n \"email-arrow-left-outline\",\n \"email-arrow-right\",\n \"email-arrow-right-outline\",\n \"email-box\",\n \"email-check\",\n \"email-check-outline\",\n \"email-edit\",\n \"email-edit-outline\",\n \"email-fast\",\n \"email-fast-outline\",\n \"email-heart-outline\",\n \"email-lock\",\n \"email-lock-outline\",\n \"email-mark-as-unread\",\n \"email-minus\",\n \"email-minus-outline\",\n \"email-multiple\",\n \"email-multiple-outline\",\n \"email-newsletter\",\n \"email-off\",\n \"email-off-outline\",\n \"email-open\",\n \"email-open-heart-outline\",\n \"email-open-multiple\",\n \"email-open-multiple-outline\",\n \"email-open-outline\",\n \"email-outline\",\n \"email-plus\",\n \"email-plus-outline\",\n \"email-remove\",\n \"email-remove-outline\",\n \"email-seal\",\n \"email-seal-outline\",\n \"email-search\",\n \"email-search-outline\",\n \"email-sync\",\n \"email-sync-outline\",\n \"email-variant\",\n \"ember\",\n \"emby\",\n \"emoticon\",\n \"emoticon-angry\",\n \"emoticon-angry-outline\",\n \"emoticon-confused\",\n \"emoticon-confused-outline\",\n \"emoticon-cool\",\n \"emoticon-cool-outline\",\n \"emoticon-cry\",\n \"emoticon-cry-outline\",\n \"emoticon-dead\",\n \"emoticon-dead-outline\",\n \"emoticon-devil\",\n \"emoticon-devil-outline\",\n \"emoticon-excited\",\n \"emoticon-excited-outline\",\n \"emoticon-frown\",\n \"emoticon-frown-outline\",\n \"emoticon-happy\",\n \"emoticon-happy-outline\",\n \"emoticon-kiss\",\n \"emoticon-kiss-outline\",\n \"emoticon-lol\",\n \"emoticon-lol-outline\",\n \"emoticon-minus\",\n \"emoticon-minus-outline\",\n \"emoticon-neutral\",\n \"emoticon-neutral-outline\",\n \"emoticon-outline\",\n \"emoticon-plus\",\n \"emoticon-plus-outline\",\n \"emoticon-poop\",\n \"emoticon-poop-outline\",\n \"emoticon-remove\",\n \"emoticon-remove-outline\",\n \"emoticon-sad\",\n \"emoticon-sad-outline\",\n \"emoticon-sick\",\n \"emoticon-sick-outline\",\n \"emoticon-tongue\",\n \"emoticon-tongue-outline\",\n \"emoticon-wink\",\n \"emoticon-wink-outline\",\n \"engine\",\n \"engine-off\",\n \"engine-off-outline\",\n \"engine-outline\",\n \"epsilon\",\n \"equal\",\n \"equal-box\",\n \"equalizer\",\n \"equalizer-outline\",\n \"eraser\",\n \"eraser-variant\",\n \"escalator\",\n \"escalator-box\",\n \"escalator-down\",\n \"escalator-up\",\n \"eslint\",\n \"et\",\n \"ethereum\",\n \"ethernet\",\n \"ethernet-cable\",\n \"ethernet-cable-off\",\n \"ethernet-off\",\n \"ev-plug-ccs1\",\n \"ev-plug-ccs2\",\n \"ev-plug-chademo\",\n \"ev-plug-tesla\",\n \"ev-plug-type1\",\n \"ev-plug-type2\",\n \"ev-station\",\n \"evernote\",\n \"excavator\",\n \"exclamation\",\n \"exclamation-thick\",\n \"exit-run\",\n \"exit-to-app\",\n \"expand-all\",\n \"expand-all-outline\",\n \"expansion-card\",\n \"expansion-card-variant\",\n \"exponent\",\n \"exponent-box\",\n \"export\",\n \"export-variant\",\n \"eye\",\n \"eye-arrow-left\",\n \"eye-arrow-left-outline\",\n \"eye-arrow-right\",\n \"eye-arrow-right-outline\",\n \"eye-check\",\n \"eye-check-outline\",\n \"eye-circle\",\n \"eye-circle-outline\",\n \"eye-closed\",\n \"eye-lock\",\n \"eye-lock-open\",\n \"eye-lock-open-outline\",\n \"eye-lock-outline\",\n \"eye-minus\",\n \"eye-minus-outline\",\n \"eye-off\",\n \"eye-off-outline\",\n \"eye-outline\",\n \"eye-plus\",\n \"eye-plus-outline\",\n \"eye-refresh\",\n \"eye-refresh-outline\",\n \"eye-remove\",\n \"eye-remove-outline\",\n \"eye-settings\",\n \"eye-settings-outline\",\n \"eyedropper\",\n \"eyedropper-minus\",\n \"eyedropper-off\",\n \"eyedropper-plus\",\n \"eyedropper-remove\",\n \"eyedropper-variant\",\n \"face-agent\",\n \"face-man\",\n \"face-man-outline\",\n \"face-man-profile\",\n \"face-man-shimmer\",\n \"face-man-shimmer-outline\",\n \"face-mask\",\n \"face-mask-outline\",\n \"face-recognition\",\n \"face-woman\",\n \"face-woman-outline\",\n \"face-woman-profile\",\n \"face-woman-shimmer\",\n \"face-woman-shimmer-outline\",\n \"facebook\",\n \"facebook-gaming\",\n \"facebook-messenger\",\n \"facebook-workplace\",\n \"factory\",\n \"family-tree\",\n \"fan\",\n \"fan-alert\",\n \"fan-auto\",\n \"fan-chevron-down\",\n \"fan-chevron-up\",\n \"fan-clock\",\n \"fan-minus\",\n \"fan-off\",\n \"fan-plus\",\n \"fan-remove\",\n \"fan-speed-1\",\n \"fan-speed-2\",\n \"fan-speed-3\",\n \"fast-forward\",\n \"fast-forward-10\",\n \"fast-forward-15\",\n \"fast-forward-30\",\n \"fast-forward-45\",\n \"fast-forward-5\",\n \"fast-forward-60\",\n \"fast-forward-outline\",\n \"faucet\",\n \"faucet-variant\",\n \"fax\",\n \"feather\",\n \"feature-search\",\n \"feature-search-outline\",\n \"fedora\",\n \"fence\",\n \"fence-electric\",\n \"fencing\",\n \"ferris-wheel\",\n \"ferry\",\n \"file\",\n \"file-account\",\n \"file-account-outline\",\n \"file-alert\",\n \"file-alert-outline\",\n \"file-arrow-left-right\",\n \"file-arrow-left-right-outline\",\n \"file-arrow-up-down\",\n \"file-arrow-up-down-outline\",\n \"file-cabinet\",\n \"file-cad\",\n \"file-cad-box\",\n \"file-cancel\",\n \"file-cancel-outline\",\n \"file-certificate\",\n \"file-certificate-outline\",\n \"file-chart\",\n \"file-chart-check\",\n \"file-chart-check-outline\",\n \"file-chart-outline\",\n \"file-check\",\n \"file-check-outline\",\n \"file-clock\",\n \"file-clock-outline\",\n \"file-cloud\",\n \"file-cloud-outline\",\n \"file-code\",\n \"file-code-outline\",\n \"file-cog\",\n \"file-cog-outline\",\n \"file-compare\",\n \"file-delimited\",\n \"file-delimited-outline\",\n \"file-document\",\n \"file-document-alert\",\n \"file-document-alert-outline\",\n \"file-document-arrow-right\",\n \"file-document-arrow-right-outline\",\n \"file-document-check\",\n \"file-document-check-outline\",\n \"file-document-edit\",\n \"file-document-edit-outline\",\n \"file-document-minus\",\n \"file-document-minus-outline\",\n \"file-document-multiple\",\n \"file-document-multiple-outline\",\n \"file-document-outline\",\n \"file-document-plus\",\n \"file-document-plus-outline\",\n \"file-document-refresh\",\n \"file-document-refresh-outline\",\n \"file-document-remove\",\n \"file-document-remove-outline\",\n \"file-download\",\n \"file-download-outline\",\n \"file-edit\",\n \"file-edit-outline\",\n \"file-excel\",\n \"file-excel-box\",\n \"file-excel-box-outline\",\n \"file-excel-outline\",\n \"file-export\",\n \"file-export-outline\",\n \"file-eye\",\n \"file-eye-outline\",\n \"file-find\",\n \"file-find-outline\",\n \"file-gif-box\",\n \"file-hidden\",\n \"file-image\",\n \"file-image-marker\",\n \"file-image-marker-outline\",\n \"file-image-minus\",\n \"file-image-minus-outline\",\n \"file-image-outline\",\n \"file-image-plus\",\n \"file-image-plus-outline\",\n \"file-image-remove\",\n \"file-image-remove-outline\",\n \"file-import\",\n \"file-import-outline\",\n \"file-jpg-box\",\n \"file-key\",\n \"file-key-outline\",\n \"file-link\",\n \"file-link-outline\",\n \"file-lock\",\n \"file-lock-open\",\n \"file-lock-open-outline\",\n \"file-lock-outline\",\n \"file-marker\",\n \"file-marker-outline\",\n \"file-minus\",\n \"file-minus-outline\",\n \"file-move\",\n \"file-move-outline\",\n \"file-multiple\",\n \"file-multiple-outline\",\n \"file-music\",\n \"file-music-outline\",\n \"file-outline\",\n \"file-pdf-box\",\n \"file-percent\",\n \"file-percent-outline\",\n \"file-phone\",\n \"file-phone-outline\",\n \"file-plus\",\n \"file-plus-outline\",\n \"file-png-box\",\n \"file-powerpoint\",\n \"file-powerpoint-box\",\n \"file-powerpoint-box-outline\",\n \"file-powerpoint-outline\",\n \"file-presentation-box\",\n \"file-question\",\n \"file-question-outline\",\n \"file-refresh\",\n \"file-refresh-outline\",\n \"file-remove\",\n \"file-remove-outline\",\n \"file-replace\",\n \"file-replace-outline\",\n \"file-restore\",\n \"file-restore-outline\",\n \"file-rotate-left\",\n \"file-rotate-left-outline\",\n \"file-rotate-right\",\n \"file-rotate-right-outline\",\n \"file-search\",\n \"file-search-outline\",\n \"file-send\",\n \"file-send-outline\",\n \"file-settings\",\n \"file-settings-outline\",\n \"file-sign\",\n \"file-star\",\n \"file-star-four-points\",\n \"file-star-four-points-outline\",\n \"file-star-outline\",\n \"file-swap\",\n \"file-swap-outline\",\n \"file-sync\",\n \"file-sync-outline\",\n \"file-table\",\n \"file-table-box\",\n \"file-table-box-multiple\",\n \"file-table-box-multiple-outline\",\n \"file-table-box-outline\",\n \"file-table-outline\",\n \"file-tree\",\n \"file-tree-outline\",\n \"file-undo\",\n \"file-undo-outline\",\n \"file-upload\",\n \"file-upload-outline\",\n \"file-video\",\n \"file-video-outline\",\n \"file-word\",\n \"file-word-box\",\n \"file-word-box-outline\",\n \"file-word-outline\",\n \"file-xml-box\",\n \"film\",\n \"filmstrip\",\n \"filmstrip-box\",\n \"filmstrip-box-multiple\",\n \"filmstrip-off\",\n \"filter\",\n \"filter-check\",\n \"filter-check-outline\",\n \"filter-cog\",\n \"filter-cog-outline\",\n \"filter-menu\",\n \"filter-menu-outline\",\n \"filter-minus\",\n \"filter-minus-outline\",\n \"filter-multiple\",\n \"filter-multiple-outline\",\n \"filter-off\",\n \"filter-off-outline\",\n \"filter-outline\",\n \"filter-plus\",\n \"filter-plus-outline\",\n \"filter-remove\",\n \"filter-remove-outline\",\n \"filter-settings\",\n \"filter-settings-outline\",\n \"filter-variant\",\n \"filter-variant-minus\",\n \"filter-variant-plus\",\n \"filter-variant-remove\",\n \"finance\",\n \"find-replace\",\n \"fingerprint\",\n \"fingerprint-off\",\n \"fire\",\n \"fire-alert\",\n \"fire-circle\",\n \"fire-extinguisher\",\n \"fire-hydrant\",\n \"fire-hydrant-alert\",\n \"fire-hydrant-off\",\n \"fire-off\",\n \"fire-station\",\n \"fire-truck\",\n \"firebase\",\n \"firefox\",\n \"fireplace\",\n \"fireplace-off\",\n \"firewire\",\n \"firework\",\n \"firework-off\",\n \"fish\",\n \"fish-off\",\n \"fishbowl\",\n \"fishbowl-outline\",\n \"fit-to-page\",\n \"fit-to-page-outline\",\n \"fit-to-screen\",\n \"fit-to-screen-outline\",\n \"flag\",\n \"flag-checkered\",\n \"flag-minus\",\n \"flag-minus-outline\",\n \"flag-off\",\n \"flag-off-outline\",\n \"flag-outline\",\n \"flag-plus\",\n \"flag-plus-outline\",\n \"flag-remove\",\n \"flag-remove-outline\",\n \"flag-triangle\",\n \"flag-variant\",\n \"flag-variant-minus\",\n \"flag-variant-minus-outline\",\n \"flag-variant-off\",\n \"flag-variant-off-outline\",\n \"flag-variant-outline\",\n \"flag-variant-plus\",\n \"flag-variant-plus-outline\",\n \"flag-variant-remove\",\n \"flag-variant-remove-outline\",\n \"flare\",\n \"flash\",\n \"flash-alert\",\n \"flash-alert-outline\",\n \"flash-auto\",\n \"flash-off\",\n \"flash-off-outline\",\n \"flash-outline\",\n \"flash-red-eye\",\n \"flash-triangle\",\n \"flash-triangle-outline\",\n \"flashlight\",\n \"flashlight-off\",\n \"flask\",\n \"flask-empty\",\n \"flask-empty-minus\",\n \"flask-empty-minus-outline\",\n \"flask-empty-off\",\n \"flask-empty-off-outline\",\n \"flask-empty-outline\",\n \"flask-empty-plus\",\n \"flask-empty-plus-outline\",\n \"flask-empty-remove\",\n \"flask-empty-remove-outline\",\n \"flask-minus\",\n \"flask-minus-outline\",\n \"flask-off\",\n \"flask-off-outline\",\n \"flask-outline\",\n \"flask-plus\",\n \"flask-plus-outline\",\n \"flask-remove\",\n \"flask-remove-outline\",\n \"flask-round-bottom\",\n \"flask-round-bottom-empty\",\n \"flask-round-bottom-empty-outline\",\n \"flask-round-bottom-outline\",\n \"fleur-de-lis\",\n \"flip-horizontal\",\n \"flip-to-back\",\n \"flip-to-front\",\n \"flip-vertical\",\n \"floor-lamp\",\n \"floor-lamp-dual\",\n \"floor-lamp-dual-outline\",\n \"floor-lamp-outline\",\n \"floor-lamp-torchiere\",\n \"floor-lamp-torchiere-outline\",\n \"floor-lamp-torchiere-variant\",\n \"floor-lamp-torchiere-variant-outline\",\n \"floor-plan\",\n \"floppy\",\n \"floppy-variant\",\n \"flower\",\n \"flower-outline\",\n \"flower-pollen\",\n \"flower-pollen-outline\",\n \"flower-poppy\",\n \"flower-tulip\",\n \"flower-tulip-outline\",\n \"focus-auto\",\n \"focus-field\",\n \"focus-field-horizontal\",\n \"focus-field-vertical\",\n \"folder\",\n \"folder-account\",\n \"folder-account-outline\",\n \"folder-alert\",\n \"folder-alert-outline\",\n \"folder-arrow-down\",\n \"folder-arrow-down-outline\",\n \"folder-arrow-left\",\n \"folder-arrow-left-outline\",\n \"folder-arrow-left-right\",\n \"folder-arrow-left-right-outline\",\n \"folder-arrow-right\",\n \"folder-arrow-right-outline\",\n \"folder-arrow-up\",\n \"folder-arrow-up-down\",\n \"folder-arrow-up-down-outline\",\n \"folder-arrow-up-outline\",\n \"folder-cancel\",\n \"folder-cancel-outline\",\n \"folder-check\",\n \"folder-check-outline\",\n \"folder-clock\",\n \"folder-clock-outline\",\n \"folder-cog\",\n \"folder-cog-outline\",\n \"folder-download\",\n \"folder-download-outline\",\n \"folder-edit\",\n \"folder-edit-outline\",\n \"folder-eye\",\n \"folder-eye-outline\",\n \"folder-file\",\n \"folder-file-outline\",\n \"folder-google-drive\",\n \"folder-heart\",\n \"folder-heart-outline\",\n \"folder-hidden\",\n \"folder-home\",\n \"folder-home-outline\",\n \"folder-image\",\n \"folder-information\",\n \"folder-information-outline\",\n \"folder-key\",\n \"folder-key-network\",\n \"folder-key-network-outline\",\n \"folder-key-outline\",\n \"folder-lock\",\n \"folder-lock-open\",\n \"folder-lock-open-outline\",\n \"folder-lock-outline\",\n \"folder-marker\",\n \"folder-marker-outline\",\n \"folder-minus\",\n \"folder-minus-outline\",\n \"folder-move\",\n \"folder-move-outline\",\n \"folder-multiple\",\n \"folder-multiple-image\",\n \"folder-multiple-outline\",\n \"folder-multiple-plus\",\n \"folder-multiple-plus-outline\",\n \"folder-music\",\n \"folder-music-outline\",\n \"folder-network\",\n \"folder-network-outline\",\n \"folder-off\",\n \"folder-off-outline\",\n \"folder-open\",\n \"folder-open-outline\",\n \"folder-outline\",\n \"folder-play\",\n \"folder-play-outline\",\n \"folder-plus\",\n \"folder-plus-outline\",\n \"folder-pound\",\n \"folder-pound-outline\",\n \"folder-question\",\n \"folder-question-outline\",\n \"folder-refresh\",\n \"folder-refresh-outline\",\n \"folder-remove\",\n \"folder-remove-outline\",\n \"folder-search\",\n \"folder-search-outline\",\n \"folder-settings\",\n \"folder-settings-outline\",\n \"folder-star\",\n \"folder-star-multiple\",\n \"folder-star-multiple-outline\",\n \"folder-star-outline\",\n \"folder-swap\",\n \"folder-swap-outline\",\n \"folder-sync\",\n \"folder-sync-outline\",\n \"folder-table\",\n \"folder-table-outline\",\n \"folder-text\",\n \"folder-text-outline\",\n \"folder-upload\",\n \"folder-upload-outline\",\n \"folder-wrench\",\n \"folder-wrench-outline\",\n \"folder-zip\",\n \"folder-zip-outline\",\n \"font-awesome\",\n \"food\",\n \"food-apple\",\n \"food-apple-outline\",\n \"food-croissant\",\n \"food-drumstick\",\n \"food-drumstick-off\",\n \"food-drumstick-off-outline\",\n \"food-drumstick-outline\",\n \"food-fork-drink\",\n \"food-halal\",\n \"food-hot-dog\",\n \"food-kosher\",\n \"food-off\",\n \"food-off-outline\",\n \"food-outline\",\n \"food-steak\",\n \"food-steak-off\",\n \"food-takeout-box\",\n \"food-takeout-box-outline\",\n \"food-turkey\",\n \"food-variant\",\n \"food-variant-off\",\n \"foot-print\",\n \"football\",\n \"football-australian\",\n \"football-helmet\",\n \"forest\",\n \"forest-outline\",\n \"forklift\",\n \"form-dropdown\",\n \"form-select\",\n \"form-textarea\",\n \"form-textbox\",\n \"form-textbox-lock\",\n \"form-textbox-password\",\n \"format-align-bottom\",\n \"format-align-center\",\n \"format-align-justify\",\n \"format-align-left\",\n \"format-align-middle\",\n \"format-align-right\",\n \"format-align-top\",\n \"format-annotation-minus\",\n \"format-annotation-plus\",\n \"format-bold\",\n \"format-clear\",\n \"format-color-fill\",\n \"format-color-highlight\",\n \"format-color-marker-cancel\",\n \"format-color-text\",\n \"format-columns\",\n \"format-float-center\",\n \"format-float-left\",\n \"format-float-none\",\n \"format-float-right\",\n \"format-font\",\n \"format-font-size-decrease\",\n \"format-font-size-increase\",\n \"format-header-1\",\n \"format-header-2\",\n \"format-header-3\",\n \"format-header-4\",\n \"format-header-5\",\n \"format-header-6\",\n \"format-header-decrease\",\n \"format-header-equal\",\n \"format-header-increase\",\n \"format-header-pound\",\n \"format-horizontal-align-center\",\n \"format-horizontal-align-left\",\n \"format-horizontal-align-right\",\n \"format-indent-decrease\",\n \"format-indent-increase\",\n \"format-italic\",\n \"format-letter-case\",\n \"format-letter-case-lower\",\n \"format-letter-case-upper\",\n \"format-letter-ends-with\",\n \"format-letter-matches\",\n \"format-letter-spacing\",\n \"format-letter-spacing-variant\",\n \"format-letter-starts-with\",\n \"format-line-height\",\n \"format-line-spacing\",\n \"format-line-style\",\n \"format-line-weight\",\n \"format-list-bulleted\",\n \"format-list-bulleted-square\",\n \"format-list-bulleted-triangle\",\n \"format-list-bulleted-type\",\n \"format-list-checkbox\",\n \"format-list-checks\",\n \"format-list-group\",\n \"format-list-group-plus\",\n \"format-list-numbered\",\n \"format-list-numbered-rtl\",\n \"format-list-text\",\n \"format-overline\",\n \"format-page-break\",\n \"format-page-split\",\n \"format-paint\",\n \"format-paragraph\",\n \"format-paragraph-spacing\",\n \"format-pilcrow\",\n \"format-pilcrow-arrow-left\",\n \"format-pilcrow-arrow-right\",\n \"format-quote-close\",\n \"format-quote-close-outline\",\n \"format-quote-open\",\n \"format-quote-open-outline\",\n \"format-rotate-90\",\n \"format-section\",\n \"format-size\",\n \"format-strikethrough\",\n \"format-strikethrough-variant\",\n \"format-subscript\",\n \"format-superscript\",\n \"format-text\",\n \"format-text-rotation-angle-down\",\n \"format-text-rotation-angle-up\",\n \"format-text-rotation-down\",\n \"format-text-rotation-down-vertical\",\n \"format-text-rotation-none\",\n \"format-text-rotation-up\",\n \"format-text-rotation-vertical\",\n \"format-text-variant\",\n \"format-text-variant-outline\",\n \"format-text-wrapping-clip\",\n \"format-text-wrapping-overflow\",\n \"format-text-wrapping-wrap\",\n \"format-textbox\",\n \"format-title\",\n \"format-underline\",\n \"format-underline-wavy\",\n \"format-vertical-align-bottom\",\n \"format-vertical-align-center\",\n \"format-vertical-align-top\",\n \"format-wrap-inline\",\n \"format-wrap-square\",\n \"format-wrap-tight\",\n \"format-wrap-top-bottom\",\n \"forum\",\n \"forum-minus\",\n \"forum-minus-outline\",\n \"forum-outline\",\n \"forum-plus\",\n \"forum-plus-outline\",\n \"forum-remove\",\n \"forum-remove-outline\",\n \"forward\",\n \"forwardburger\",\n \"fountain\",\n \"fountain-pen\",\n \"fountain-pen-tip\",\n \"fraction-one-half\",\n \"freebsd\",\n \"french-fries\",\n \"frequently-asked-questions\",\n \"fridge\",\n \"fridge-alert\",\n \"fridge-alert-outline\",\n \"fridge-bottom\",\n \"fridge-industrial\",\n \"fridge-industrial-alert\",\n \"fridge-industrial-alert-outline\",\n \"fridge-industrial-off\",\n \"fridge-industrial-off-outline\",\n \"fridge-industrial-outline\",\n \"fridge-off\",\n \"fridge-off-outline\",\n \"fridge-outline\",\n \"fridge-top\",\n \"fridge-variant\",\n \"fridge-variant-alert\",\n \"fridge-variant-alert-outline\",\n \"fridge-variant-off\",\n \"fridge-variant-off-outline\",\n \"fridge-variant-outline\",\n \"fruit-cherries\",\n \"fruit-cherries-off\",\n \"fruit-citrus\",\n \"fruit-citrus-off\",\n \"fruit-grapes\",\n \"fruit-grapes-outline\",\n \"fruit-pear\",\n \"fruit-pineapple\",\n \"fruit-watermelon\",\n \"fuel\",\n \"fuel-cell\",\n \"fullscreen\",\n \"fullscreen-exit\",\n \"function\",\n \"function-variant\",\n \"furigana-horizontal\",\n \"furigana-vertical\",\n \"fuse\",\n \"fuse-alert\",\n \"fuse-blade\",\n \"fuse-off\",\n \"gamepad\",\n \"gamepad-circle\",\n \"gamepad-circle-down\",\n \"gamepad-circle-left\",\n \"gamepad-circle-outline\",\n \"gamepad-circle-right\",\n \"gamepad-circle-up\",\n \"gamepad-down\",\n \"gamepad-left\",\n \"gamepad-outline\",\n \"gamepad-right\",\n \"gamepad-round\",\n \"gamepad-round-down\",\n \"gamepad-round-left\",\n \"gamepad-round-outline\",\n \"gamepad-round-right\",\n \"gamepad-round-up\",\n \"gamepad-square\",\n \"gamepad-square-outline\",\n \"gamepad-up\",\n \"gamepad-variant\",\n \"gamepad-variant-outline\",\n \"gamma\",\n \"gantry-crane\",\n \"garage\",\n \"garage-alert\",\n \"garage-alert-variant\",\n \"garage-lock\",\n \"garage-open\",\n \"garage-open-variant\",\n \"garage-variant\",\n \"garage-variant-lock\",\n \"gas-burner\",\n \"gas-cylinder\",\n \"gas-station\",\n \"gas-station-in-use\",\n \"gas-station-in-use-outline\",\n \"gas-station-off\",\n \"gas-station-off-outline\",\n \"gas-station-outline\",\n \"gate\",\n \"gate-alert\",\n \"gate-and\",\n \"gate-arrow-left\",\n \"gate-arrow-right\",\n \"gate-buffer\",\n \"gate-nand\",\n \"gate-nor\",\n \"gate-not\",\n \"gate-open\",\n \"gate-or\",\n \"gate-xnor\",\n \"gate-xor\",\n \"gatsby\",\n \"gauge\",\n \"gauge-empty\",\n \"gauge-full\",\n \"gauge-low\",\n \"gavel\",\n \"gender-female\",\n \"gender-male\",\n \"gender-male-female\",\n \"gender-male-female-variant\",\n \"gender-non-binary\",\n \"gender-transgender\",\n \"generator-mobile\",\n \"generator-portable\",\n \"generator-stationary\",\n \"gentoo\",\n \"gesture\",\n \"gesture-double-tap\",\n \"gesture-pinch\",\n \"gesture-spread\",\n \"gesture-swipe\",\n \"gesture-swipe-down\",\n \"gesture-swipe-horizontal\",\n \"gesture-swipe-left\",\n \"gesture-swipe-right\",\n \"gesture-swipe-up\",\n \"gesture-swipe-vertical\",\n \"gesture-tap\",\n \"gesture-tap-box\",\n \"gesture-tap-button\",\n \"gesture-tap-hold\",\n \"gesture-two-double-tap\",\n \"gesture-two-tap\",\n \"ghost\",\n \"ghost-off\",\n \"ghost-off-outline\",\n \"ghost-outline\",\n \"gift\",\n \"gift-off\",\n \"gift-off-outline\",\n \"gift-open\",\n \"gift-open-outline\",\n \"gift-outline\",\n \"git\",\n \"github\",\n \"gitlab\",\n \"glass-cocktail\",\n \"glass-cocktail-off\",\n \"glass-flute\",\n \"glass-fragile\",\n \"glass-mug\",\n \"glass-mug-off\",\n \"glass-mug-variant\",\n \"glass-mug-variant-off\",\n \"glass-pint-outline\",\n \"glass-stange\",\n \"glass-tulip\",\n \"glass-wine\",\n \"glasses\",\n \"globe-light\",\n \"globe-light-outline\",\n \"globe-model\",\n \"gmail\",\n \"gnome\",\n \"go-kart\",\n \"go-kart-track\",\n \"gog\",\n \"gold\",\n \"golf\",\n \"golf-cart\",\n \"golf-tee\",\n \"gondola\",\n \"goodreads\",\n \"google\",\n \"google-ads\",\n \"google-analytics\",\n \"google-assistant\",\n \"google-cardboard\",\n \"google-chrome\",\n \"google-circles\",\n \"google-circles-communities\",\n \"google-circles-extended\",\n \"google-circles-group\",\n \"google-classroom\",\n \"google-cloud\",\n \"google-downasaur\",\n \"google-drive\",\n \"google-earth\",\n \"google-fit\",\n \"google-glass\",\n \"google-hangouts\",\n \"google-keep\",\n \"google-lens\",\n \"google-maps\",\n \"google-my-business\",\n \"google-nearby\",\n \"google-play\",\n \"google-plus\",\n \"google-podcast\",\n \"google-spreadsheet\",\n \"google-street-view\",\n \"google-translate\",\n \"gradient-horizontal\",\n \"gradient-vertical\",\n \"grain\",\n \"graph\",\n \"graph-outline\",\n \"graphql\",\n \"grass\",\n \"grave-stone\",\n \"grease-pencil\",\n \"greater-than\",\n \"greater-than-or-equal\",\n \"greenhouse\",\n \"grid\",\n \"grid-large\",\n \"grid-off\",\n \"grill\",\n \"grill-outline\",\n \"group\",\n \"guitar-acoustic\",\n \"guitar-electric\",\n \"guitar-pick\",\n \"guitar-pick-outline\",\n \"guy-fawkes-mask\",\n \"gymnastics\",\n \"hail\",\n \"hair-dryer\",\n \"hair-dryer-outline\",\n \"halloween\",\n \"hamburger\",\n \"hamburger-check\",\n \"hamburger-minus\",\n \"hamburger-off\",\n \"hamburger-plus\",\n \"hamburger-remove\",\n \"hammer\",\n \"hammer-screwdriver\",\n \"hammer-sickle\",\n \"hammer-wrench\",\n \"hand-back-left\",\n \"hand-back-left-off\",\n \"hand-back-left-off-outline\",\n \"hand-back-left-outline\",\n \"hand-back-right\",\n \"hand-back-right-off\",\n \"hand-back-right-off-outline\",\n \"hand-back-right-outline\",\n \"hand-clap\",\n \"hand-clap-off\",\n \"hand-coin\",\n \"hand-coin-outline\",\n \"hand-cycle\",\n \"hand-extended\",\n \"hand-extended-outline\",\n \"hand-front-left\",\n \"hand-front-left-outline\",\n \"hand-front-right\",\n \"hand-front-right-outline\",\n \"hand-heart\",\n \"hand-heart-outline\",\n \"hand-okay\",\n \"hand-peace\",\n \"hand-peace-variant\",\n \"hand-pointing-down\",\n \"hand-pointing-left\",\n \"hand-pointing-right\",\n \"hand-pointing-up\",\n \"hand-saw\",\n \"hand-wash\",\n \"hand-wash-outline\",\n \"hand-water\",\n \"hand-wave\",\n \"hand-wave-outline\",\n \"handball\",\n \"handcuffs\",\n \"hands-pray\",\n \"handshake\",\n \"handshake-outline\",\n \"hanger\",\n \"hard-hat\",\n \"harddisk\",\n \"harddisk-plus\",\n \"harddisk-remove\",\n \"hat-fedora\",\n \"hazard-lights\",\n \"hdmi-port\",\n \"hdr\",\n \"hdr-off\",\n \"head\",\n \"head-alert\",\n \"head-alert-outline\",\n \"head-check\",\n \"head-check-outline\",\n \"head-cog\",\n \"head-cog-outline\",\n \"head-dots-horizontal\",\n \"head-dots-horizontal-outline\",\n \"head-flash\",\n \"head-flash-outline\",\n \"head-heart\",\n \"head-heart-outline\",\n \"head-lightbulb\",\n \"head-lightbulb-outline\",\n \"head-minus\",\n \"head-minus-outline\",\n \"head-outline\",\n \"head-plus\",\n \"head-plus-outline\",\n \"head-question\",\n \"head-question-outline\",\n \"head-remove\",\n \"head-remove-outline\",\n \"head-snowflake\",\n \"head-snowflake-outline\",\n \"head-sync\",\n \"head-sync-outline\",\n \"headphones\",\n \"headphones-bluetooth\",\n \"headphones-box\",\n \"headphones-off\",\n \"headphones-settings\",\n \"headset\",\n \"headset-dock\",\n \"headset-off\",\n \"heart\",\n \"heart-box\",\n \"heart-box-outline\",\n \"heart-broken\",\n \"heart-broken-outline\",\n \"heart-circle\",\n \"heart-circle-outline\",\n \"heart-cog\",\n \"heart-cog-outline\",\n \"heart-flash\",\n \"heart-half\",\n \"heart-half-full\",\n \"heart-half-outline\",\n \"heart-minus\",\n \"heart-minus-outline\",\n \"heart-multiple\",\n \"heart-multiple-outline\",\n \"heart-off\",\n \"heart-off-outline\",\n \"heart-outline\",\n \"heart-plus\",\n \"heart-plus-outline\",\n \"heart-pulse\",\n \"heart-remove\",\n \"heart-remove-outline\",\n \"heart-search\",\n \"heart-settings\",\n \"heart-settings-outline\",\n \"heat-pump\",\n \"heat-pump-outline\",\n \"heat-wave\",\n \"heating-coil\",\n \"helicopter\",\n \"help\",\n \"help-box\",\n \"help-box-multiple\",\n \"help-box-multiple-outline\",\n \"help-box-outline\",\n \"help-circle\",\n \"help-circle-outline\",\n \"help-network\",\n \"help-network-outline\",\n \"help-rhombus\",\n \"help-rhombus-outline\",\n \"hexadecimal\",\n \"hexagon\",\n \"hexagon-multiple\",\n \"hexagon-multiple-outline\",\n \"hexagon-outline\",\n \"hexagon-slice-1\",\n \"hexagon-slice-2\",\n \"hexagon-slice-3\",\n \"hexagon-slice-4\",\n \"hexagon-slice-5\",\n \"hexagon-slice-6\",\n \"hexagram\",\n \"hexagram-outline\",\n \"high-definition\",\n \"high-definition-box\",\n \"highway\",\n \"hiking\",\n \"history\",\n \"hockey-puck\",\n \"hockey-sticks\",\n \"hololens\",\n \"home\",\n \"home-account\",\n \"home-alert\",\n \"home-alert-outline\",\n \"home-analytics\",\n \"home-assistant\",\n \"home-automation\",\n \"home-battery\",\n \"home-battery-outline\",\n \"home-circle\",\n \"home-circle-outline\",\n \"home-city\",\n \"home-city-outline\",\n \"home-clock\",\n \"home-clock-outline\",\n \"home-edit\",\n \"home-edit-outline\",\n \"home-export-outline\",\n \"home-flood\",\n \"home-floor-0\",\n \"home-floor-1\",\n \"home-floor-2\",\n \"home-floor-3\",\n \"home-floor-a\",\n \"home-floor-b\",\n \"home-floor-g\",\n \"home-floor-l\",\n \"home-floor-negative-1\",\n \"home-group\",\n \"home-group-minus\",\n \"home-group-plus\",\n \"home-group-remove\",\n \"home-heart\",\n \"home-import-outline\",\n \"home-lightbulb\",\n \"home-lightbulb-outline\",\n \"home-lightning-bolt\",\n \"home-lightning-bolt-outline\",\n \"home-lock\",\n \"home-lock-open\",\n \"home-map-marker\",\n \"home-minus\",\n \"home-minus-outline\",\n \"home-modern\",\n \"home-off\",\n \"home-off-outline\",\n \"home-outline\",\n \"home-percent\",\n \"home-percent-outline\",\n \"home-plus\",\n \"home-plus-outline\",\n \"home-remove\",\n \"home-remove-outline\",\n \"home-roof\",\n \"home-search\",\n \"home-search-outline\",\n \"home-silo\",\n \"home-silo-outline\",\n \"home-sound-in\",\n \"home-sound-in-outline\",\n \"home-sound-out\",\n \"home-sound-out-outline\",\n \"home-switch\",\n \"home-switch-outline\",\n \"home-thermometer\",\n \"home-thermometer-outline\",\n \"home-variant\",\n \"home-variant-outline\",\n \"hook\",\n \"hook-off\",\n \"hoop-house\",\n \"hops\",\n \"horizontal-rotate-clockwise\",\n \"horizontal-rotate-counterclockwise\",\n \"horse\",\n \"horse-human\",\n \"horse-variant\",\n \"horse-variant-fast\",\n \"horseshoe\",\n \"hospital\",\n \"hospital-box\",\n \"hospital-box-outline\",\n \"hospital-building\",\n \"hospital-marker\",\n \"hot-tub\",\n \"hours-12\",\n \"hours-24\",\n \"hub\",\n \"hub-outline\",\n \"hubspot\",\n \"hulu\",\n \"human\",\n \"human-baby-changing-table\",\n \"human-cane\",\n \"human-capacity-decrease\",\n \"human-capacity-increase\",\n \"human-child\",\n \"human-dolly\",\n \"human-edit\",\n \"human-female\",\n \"human-female-boy\",\n \"human-female-dance\",\n \"human-female-female\",\n \"human-female-female-child\",\n \"human-female-girl\",\n \"human-greeting\",\n \"human-greeting-proximity\",\n \"human-greeting-variant\",\n \"human-handsdown\",\n \"human-handsup\",\n \"human-male\",\n \"human-male-board\",\n \"human-male-board-poll\",\n \"human-male-boy\",\n \"human-male-child\",\n \"human-male-female\",\n \"human-male-female-child\",\n \"human-male-girl\",\n \"human-male-height\",\n \"human-male-height-variant\",\n \"human-male-male\",\n \"human-male-male-child\",\n \"human-non-binary\",\n \"human-pregnant\",\n \"human-queue\",\n \"human-scooter\",\n \"human-walker\",\n \"human-wheelchair\",\n \"human-white-cane\",\n \"humble-bundle\",\n \"hvac\",\n \"hvac-off\",\n \"hydraulic-oil-level\",\n \"hydraulic-oil-temperature\",\n \"hydro-power\",\n \"hydrogen-station\",\n \"ice-cream\",\n \"ice-cream-off\",\n \"ice-pop\",\n \"id-card\",\n \"identifier\",\n \"ideogram-cjk\",\n \"ideogram-cjk-variant\",\n \"image\",\n \"image-album\",\n \"image-area\",\n \"image-area-close\",\n \"image-auto-adjust\",\n \"image-broken\",\n \"image-broken-variant\",\n \"image-check\",\n \"image-check-outline\",\n \"image-edit\",\n \"image-edit-outline\",\n \"image-filter-black-white\",\n \"image-filter-center-focus\",\n \"image-filter-center-focus-strong\",\n \"image-filter-center-focus-strong-outline\",\n \"image-filter-center-focus-weak\",\n \"image-filter-drama\",\n \"image-filter-drama-outline\",\n \"image-filter-frames\",\n \"image-filter-hdr\",\n \"image-filter-hdr-outline\",\n \"image-filter-none\",\n \"image-filter-tilt-shift\",\n \"image-filter-vintage\",\n \"image-frame\",\n \"image-lock\",\n \"image-lock-outline\",\n \"image-marker\",\n \"image-marker-outline\",\n \"image-minus\",\n \"image-minus-outline\",\n \"image-move\",\n \"image-multiple\",\n \"image-multiple-outline\",\n \"image-off\",\n \"image-off-outline\",\n \"image-outline\",\n \"image-plus\",\n \"image-plus-outline\",\n \"image-refresh\",\n \"image-refresh-outline\",\n \"image-remove\",\n \"image-remove-outline\",\n \"image-search\",\n \"image-search-outline\",\n \"image-size-select-actual\",\n \"image-size-select-large\",\n \"image-size-select-small\",\n \"image-sync\",\n \"image-sync-outline\",\n \"image-text\",\n \"import\",\n \"inbox\",\n \"inbox-arrow-down\",\n \"inbox-arrow-down-outline\",\n \"inbox-arrow-up\",\n \"inbox-arrow-up-outline\",\n \"inbox-full\",\n \"inbox-full-outline\",\n \"inbox-multiple\",\n \"inbox-multiple-outline\",\n \"inbox-outline\",\n \"inbox-remove\",\n \"inbox-remove-outline\",\n \"incognito\",\n \"incognito-circle\",\n \"incognito-circle-off\",\n \"incognito-off\",\n \"induction\",\n \"infinity\",\n \"information\",\n \"information-box\",\n \"information-box-outline\",\n \"information-off\",\n \"information-off-outline\",\n \"information-outline\",\n \"information-slab-box\",\n \"information-slab-box-outline\",\n \"information-slab-circle\",\n \"information-slab-circle-outline\",\n \"information-slab-symbol\",\n \"information-symbol\",\n \"information-variant\",\n \"information-variant-box\",\n \"information-variant-box-outline\",\n \"information-variant-circle\",\n \"information-variant-circle-outline\",\n \"instagram\",\n \"instrument-triangle\",\n \"integrated-circuit-chip\",\n \"invert-colors\",\n \"invert-colors-off\",\n \"invoice\",\n \"invoice-arrow-left\",\n \"invoice-arrow-left-outline\",\n \"invoice-arrow-right\",\n \"invoice-arrow-right-outline\",\n \"invoice-check\",\n \"invoice-check-outline\",\n \"invoice-clock\",\n \"invoice-clock-outline\",\n \"invoice-edit\",\n \"invoice-edit-outline\",\n \"invoice-export-outline\",\n \"invoice-fast\",\n \"invoice-fast-outline\",\n \"invoice-import\",\n \"invoice-import-outline\",\n \"invoice-list\",\n \"invoice-list-outline\",\n \"invoice-minus\",\n \"invoice-minus-outline\",\n \"invoice-multiple\",\n \"invoice-multiple-outline\",\n \"invoice-outline\",\n \"invoice-plus\",\n \"invoice-plus-outline\",\n \"invoice-remove\",\n \"invoice-remove-outline\",\n \"invoice-send\",\n \"invoice-send-outline\",\n \"invoice-text\",\n \"invoice-text-arrow-left\",\n \"invoice-text-arrow-left-outline\",\n \"invoice-text-arrow-right\",\n \"invoice-text-arrow-right-outline\",\n \"invoice-text-check\",\n \"invoice-text-check-outline\",\n \"invoice-text-clock\",\n \"invoice-text-clock-outline\",\n \"invoice-text-edit\",\n \"invoice-text-edit-outline\",\n \"invoice-text-fast\",\n \"invoice-text-fast-outline\",\n \"invoice-text-minus\",\n \"invoice-text-minus-outline\",\n \"invoice-text-multiple\",\n \"invoice-text-multiple-outline\",\n \"invoice-text-outline\",\n \"invoice-text-plus\",\n \"invoice-text-plus-outline\",\n \"invoice-text-remove\",\n \"invoice-text-remove-outline\",\n \"invoice-text-send\",\n \"invoice-text-send-outline\",\n \"iobroker\",\n \"ip\",\n \"ip-network\",\n \"ip-network-outline\",\n \"ip-outline\",\n \"ipod\",\n \"iron\",\n \"iron-board\",\n \"iron-outline\",\n \"island\",\n \"island-variant\",\n \"iv-bag\",\n \"jabber\",\n \"jeepney\",\n \"jellyfish\",\n \"jellyfish-outline\",\n \"jira\",\n \"jquery\",\n \"jsfiddle\",\n \"jump-rope\",\n \"kabaddi\",\n \"kangaroo\",\n \"karate\",\n \"kayaking\",\n \"keg\",\n \"kettle\",\n \"kettle-alert\",\n \"kettle-alert-outline\",\n \"kettle-off\",\n \"kettle-off-outline\",\n \"kettle-outline\",\n \"kettle-pour-over\",\n \"kettle-steam\",\n \"kettle-steam-outline\",\n \"kettlebell\",\n \"key\",\n \"key-alert\",\n \"key-alert-outline\",\n \"key-arrow-right\",\n \"key-chain\",\n \"key-chain-variant\",\n \"key-change\",\n \"key-link\",\n \"key-minus\",\n \"key-outline\",\n \"key-plus\",\n \"key-remove\",\n \"key-star\",\n \"key-variant\",\n \"key-wireless\",\n \"keyboard\",\n \"keyboard-backspace\",\n \"keyboard-caps\",\n \"keyboard-close\",\n \"keyboard-close-outline\",\n \"keyboard-esc\",\n \"keyboard-f1\",\n \"keyboard-f10\",\n \"keyboard-f11\",\n \"keyboard-f12\",\n \"keyboard-f2\",\n \"keyboard-f3\",\n \"keyboard-f4\",\n \"keyboard-f5\",\n \"keyboard-f6\",\n \"keyboard-f7\",\n \"keyboard-f8\",\n \"keyboard-f9\",\n \"keyboard-off\",\n \"keyboard-off-outline\",\n \"keyboard-outline\",\n \"keyboard-return\",\n \"keyboard-settings\",\n \"keyboard-settings-outline\",\n \"keyboard-space\",\n \"keyboard-tab\",\n \"keyboard-tab-reverse\",\n \"keyboard-variant\",\n \"khanda\",\n \"kickstarter\",\n \"kite\",\n \"kite-outline\",\n \"kitesurfing\",\n \"klingon\",\n \"knife\",\n \"knife-military\",\n \"knob\",\n \"koala\",\n \"kodi\",\n \"kubernetes\",\n \"label\",\n \"label-multiple\",\n \"label-multiple-outline\",\n \"label-off\",\n \"label-off-outline\",\n \"label-outline\",\n \"label-percent\",\n \"label-percent-outline\",\n \"label-variant\",\n \"label-variant-outline\",\n \"ladder\",\n \"ladybug\",\n \"lambda\",\n \"lamp\",\n \"lamp-outline\",\n \"lamps\",\n \"lamps-outline\",\n \"lan\",\n \"lan-check\",\n \"lan-connect\",\n \"lan-disconnect\",\n \"lan-pending\",\n \"land-fields\",\n \"land-plots\",\n \"land-plots-circle\",\n \"land-plots-circle-variant\",\n \"land-plots-marker\",\n \"land-rows-horizontal\",\n \"land-rows-vertical\",\n \"landslide\",\n \"landslide-outline\",\n \"language-c\",\n \"language-cpp\",\n \"language-csharp\",\n \"language-css3\",\n \"language-fortran\",\n \"language-go\",\n \"language-haskell\",\n \"language-html5\",\n \"language-java\",\n \"language-javascript\",\n \"language-kotlin\",\n \"language-lua\",\n \"language-markdown\",\n \"language-markdown-outline\",\n \"language-php\",\n \"language-python\",\n \"language-r\",\n \"language-ruby\",\n \"language-ruby-on-rails\",\n \"language-rust\",\n \"language-swift\",\n \"language-typescript\",\n \"language-xaml\",\n \"laptop\",\n \"laptop-account\",\n \"laptop-off\",\n \"laravel\",\n \"laser-pointer\",\n \"lasso\",\n \"lastpass\",\n \"latitude\",\n \"launch\",\n \"lava-lamp\",\n \"layers\",\n \"layers-edit\",\n \"layers-minus\",\n \"layers-off\",\n \"layers-off-outline\",\n \"layers-outline\",\n \"layers-plus\",\n \"layers-remove\",\n \"layers-search\",\n \"layers-search-outline\",\n \"layers-triple\",\n \"layers-triple-outline\",\n \"lead-pencil\",\n \"leaf\",\n \"leaf-circle\",\n \"leaf-circle-outline\",\n \"leaf-maple\",\n \"leaf-maple-off\",\n \"leaf-off\",\n \"leak\",\n \"leak-off\",\n \"lectern\",\n \"led-off\",\n \"led-on\",\n \"led-outline\",\n \"led-strip\",\n \"led-strip-variant\",\n \"led-strip-variant-off\",\n \"led-variant-off\",\n \"led-variant-on\",\n \"led-variant-outline\",\n \"leek\",\n \"less-than\",\n \"less-than-or-equal\",\n \"library\",\n \"library-outline\",\n \"library-shelves\",\n \"license\",\n \"lifebuoy\",\n \"light-flood-down\",\n \"light-flood-up\",\n \"light-recessed\",\n \"light-switch\",\n \"light-switch-off\",\n \"lightbulb\",\n \"lightbulb-alert\",\n \"lightbulb-alert-outline\",\n \"lightbulb-auto\",\n \"lightbulb-auto-outline\",\n \"lightbulb-cfl\",\n \"lightbulb-cfl-off\",\n \"lightbulb-cfl-spiral\",\n \"lightbulb-cfl-spiral-off\",\n \"lightbulb-fluorescent-tube\",\n \"lightbulb-fluorescent-tube-outline\",\n \"lightbulb-group\",\n \"lightbulb-group-off\",\n \"lightbulb-group-off-outline\",\n \"lightbulb-group-outline\",\n \"lightbulb-multiple\",\n \"lightbulb-multiple-off\",\n \"lightbulb-multiple-off-outline\",\n \"lightbulb-multiple-outline\",\n \"lightbulb-night\",\n \"lightbulb-night-outline\",\n \"lightbulb-off\",\n \"lightbulb-off-outline\",\n \"lightbulb-on\",\n \"lightbulb-on-10\",\n \"lightbulb-on-20\",\n \"lightbulb-on-30\",\n \"lightbulb-on-40\",\n \"lightbulb-on-50\",\n \"lightbulb-on-60\",\n \"lightbulb-on-70\",\n \"lightbulb-on-80\",\n \"lightbulb-on-90\",\n \"lightbulb-on-outline\",\n \"lightbulb-outline\",\n \"lightbulb-question\",\n \"lightbulb-question-outline\",\n \"lightbulb-spot\",\n \"lightbulb-spot-off\",\n \"lightbulb-variant\",\n \"lightbulb-variant-outline\",\n \"lighthouse\",\n \"lighthouse-on\",\n \"lightning-bolt\",\n \"lightning-bolt-circle\",\n \"lightning-bolt-outline\",\n \"line-scan\",\n \"lingerie\",\n \"link\",\n \"link-box\",\n \"link-box-outline\",\n \"link-box-variant\",\n \"link-box-variant-outline\",\n \"link-circle\",\n \"link-circle-outline\",\n \"link-edit\",\n \"link-lock\",\n \"link-off\",\n \"link-plus\",\n \"link-variant\",\n \"link-variant-minus\",\n \"link-variant-off\",\n \"link-variant-plus\",\n \"link-variant-remove\",\n \"linkedin\",\n \"linux\",\n \"linux-mint\",\n \"lipstick\",\n \"liquid-spot\",\n \"liquor\",\n \"list-box\",\n \"list-box-outline\",\n \"list-status\",\n \"litecoin\",\n \"loading\",\n \"location-enter\",\n \"location-exit\",\n \"lock\",\n \"lock-alert\",\n \"lock-alert-outline\",\n \"lock-check\",\n \"lock-check-outline\",\n \"lock-clock\",\n \"lock-minus\",\n \"lock-minus-outline\",\n \"lock-off\",\n \"lock-off-outline\",\n \"lock-open\",\n \"lock-open-alert\",\n \"lock-open-alert-outline\",\n \"lock-open-check\",\n \"lock-open-check-outline\",\n \"lock-open-minus\",\n \"lock-open-minus-outline\",\n \"lock-open-outline\",\n \"lock-open-plus\",\n \"lock-open-plus-outline\",\n \"lock-open-remove\",\n \"lock-open-remove-outline\",\n \"lock-open-variant\",\n \"lock-open-variant-outline\",\n \"lock-outline\",\n \"lock-pattern\",\n \"lock-percent\",\n \"lock-percent-open\",\n \"lock-percent-open-outline\",\n \"lock-percent-open-variant\",\n \"lock-percent-open-variant-outline\",\n \"lock-percent-outline\",\n \"lock-plus\",\n \"lock-plus-outline\",\n \"lock-question\",\n \"lock-remove\",\n \"lock-remove-outline\",\n \"lock-reset\",\n \"lock-smart\",\n \"locker\",\n \"locker-multiple\",\n \"login\",\n \"login-variant\",\n \"logout\",\n \"logout-variant\",\n \"longitude\",\n \"looks\",\n \"lotion\",\n \"lotion-outline\",\n \"lotion-plus\",\n \"lotion-plus-outline\",\n \"loupe\",\n \"lumx\",\n \"lungs\",\n \"mace\",\n \"magazine-pistol\",\n \"magazine-rifle\",\n \"magic-staff\",\n \"magnet\",\n \"magnet-on\",\n \"magnify\",\n \"magnify-close\",\n \"magnify-expand\",\n \"magnify-minus\",\n \"magnify-minus-cursor\",\n \"magnify-minus-outline\",\n \"magnify-plus\",\n \"magnify-plus-cursor\",\n \"magnify-plus-outline\",\n \"magnify-remove-cursor\",\n \"magnify-remove-outline\",\n \"magnify-scan\",\n \"mail\",\n \"mailbox\",\n \"mailbox-open\",\n \"mailbox-open-outline\",\n \"mailbox-open-up\",\n \"mailbox-open-up-outline\",\n \"mailbox-outline\",\n \"mailbox-up\",\n \"mailbox-up-outline\",\n \"manjaro\",\n \"map\",\n \"map-check\",\n \"map-check-outline\",\n \"map-clock\",\n \"map-clock-outline\",\n \"map-legend\",\n \"map-marker\",\n \"map-marker-account\",\n \"map-marker-account-outline\",\n \"map-marker-alert\",\n \"map-marker-alert-outline\",\n \"map-marker-check\",\n \"map-marker-check-outline\",\n \"map-marker-circle\",\n \"map-marker-distance\",\n \"map-marker-down\",\n \"map-marker-left\",\n \"map-marker-left-outline\",\n \"map-marker-minus\",\n \"map-marker-minus-outline\",\n \"map-marker-multiple\",\n \"map-marker-multiple-outline\",\n \"map-marker-off\",\n \"map-marker-off-outline\",\n \"map-marker-outline\",\n \"map-marker-path\",\n \"map-marker-plus\",\n \"map-marker-plus-outline\",\n \"map-marker-question\",\n \"map-marker-question-outline\",\n \"map-marker-radius\",\n \"map-marker-radius-outline\",\n \"map-marker-remove\",\n \"map-marker-remove-outline\",\n \"map-marker-remove-variant\",\n \"map-marker-right\",\n \"map-marker-right-outline\",\n \"map-marker-star\",\n \"map-marker-star-outline\",\n \"map-marker-up\",\n \"map-minus\",\n \"map-outline\",\n \"map-plus\",\n \"map-search\",\n \"map-search-outline\",\n \"mapbox\",\n \"margin\",\n \"marker\",\n \"marker-cancel\",\n \"marker-check\",\n \"mastodon\",\n \"material-design\",\n \"material-ui\",\n \"math-compass\",\n \"math-cos\",\n \"math-integral\",\n \"math-integral-box\",\n \"math-log\",\n \"math-norm\",\n \"math-norm-box\",\n \"math-sin\",\n \"math-tan\",\n \"matrix\",\n \"medal\",\n \"medal-outline\",\n \"medical-bag\",\n \"medical-cotton-swab\",\n \"medication\",\n \"medication-outline\",\n \"meditation\",\n \"memory\",\n \"memory-arrow-down\",\n \"menorah\",\n \"menorah-fire\",\n \"menu\",\n \"menu-close\",\n \"menu-down\",\n \"menu-down-outline\",\n \"menu-left\",\n \"menu-left-outline\",\n \"menu-open\",\n \"menu-right\",\n \"menu-right-outline\",\n \"menu-swap\",\n \"menu-swap-outline\",\n \"menu-up\",\n \"menu-up-outline\",\n \"merge\",\n \"message\",\n \"message-alert\",\n \"message-alert-outline\",\n \"message-arrow-left\",\n \"message-arrow-left-outline\",\n \"message-arrow-right\",\n \"message-arrow-right-outline\",\n \"message-badge\",\n \"message-badge-outline\",\n \"message-bookmark\",\n \"message-bookmark-outline\",\n \"message-bulleted\",\n \"message-bulleted-off\",\n \"message-check\",\n \"message-check-outline\",\n \"message-cog\",\n \"message-cog-outline\",\n \"message-draw\",\n \"message-fast\",\n \"message-fast-outline\",\n \"message-flash\",\n \"message-flash-outline\",\n \"message-image\",\n \"message-image-outline\",\n \"message-lock\",\n \"message-lock-outline\",\n \"message-minus\",\n \"message-minus-outline\",\n \"message-off\",\n \"message-off-outline\",\n \"message-outline\",\n \"message-plus\",\n \"message-plus-outline\",\n \"message-processing\",\n \"message-processing-outline\",\n \"message-question\",\n \"message-question-outline\",\n \"message-reply\",\n \"message-reply-outline\",\n \"message-reply-text\",\n \"message-reply-text-outline\",\n \"message-settings\",\n \"message-settings-outline\",\n \"message-star\",\n \"message-star-outline\",\n \"message-text\",\n \"message-text-clock\",\n \"message-text-clock-outline\",\n \"message-text-fast\",\n \"message-text-fast-outline\",\n \"message-text-lock\",\n \"message-text-lock-outline\",\n \"message-text-outline\",\n \"message-video\",\n \"meteor\",\n \"meter-electric\",\n \"meter-electric-outline\",\n \"meter-gas\",\n \"meter-gas-outline\",\n \"metronome\",\n \"metronome-tick\",\n \"micro-sd\",\n \"microphone\",\n \"microphone-message\",\n \"microphone-message-off\",\n \"microphone-minus\",\n \"microphone-off\",\n \"microphone-outline\",\n \"microphone-plus\",\n \"microphone-question\",\n \"microphone-question-outline\",\n \"microphone-settings\",\n \"microphone-variant\",\n \"microphone-variant-off\",\n \"microscope\",\n \"microsoft\",\n \"microsoft-access\",\n \"microsoft-azure\",\n \"microsoft-azure-devops\",\n \"microsoft-bing\",\n \"microsoft-dynamics-365\",\n \"microsoft-edge\",\n \"microsoft-excel\",\n \"microsoft-internet-explorer\",\n \"microsoft-office\",\n \"microsoft-onedrive\",\n \"microsoft-onenote\",\n \"microsoft-outlook\",\n \"microsoft-powerpoint\",\n \"microsoft-sharepoint\",\n \"microsoft-teams\",\n \"microsoft-visual-studio\",\n \"microsoft-visual-studio-code\",\n \"microsoft-windows\",\n \"microsoft-windows-classic\",\n \"microsoft-word\",\n \"microsoft-xbox\",\n \"microsoft-xbox-controller\",\n \"microsoft-xbox-controller-battery-alert\",\n \"microsoft-xbox-controller-battery-charging\",\n \"microsoft-xbox-controller-battery-empty\",\n \"microsoft-xbox-controller-battery-full\",\n \"microsoft-xbox-controller-battery-low\",\n \"microsoft-xbox-controller-battery-medium\",\n \"microsoft-xbox-controller-battery-unknown\",\n \"microsoft-xbox-controller-menu\",\n \"microsoft-xbox-controller-off\",\n \"microsoft-xbox-controller-view\",\n \"microwave\",\n \"microwave-off\",\n \"middleware\",\n \"middleware-outline\",\n \"midi\",\n \"midi-port\",\n \"mine\",\n \"minecraft\",\n \"mini-sd\",\n \"minidisc\",\n \"minus\",\n \"minus-box\",\n \"minus-box-multiple\",\n \"minus-box-multiple-outline\",\n \"minus-box-outline\",\n \"minus-circle\",\n \"minus-circle-multiple\",\n \"minus-circle-multiple-outline\",\n \"minus-circle-off\",\n \"minus-circle-off-outline\",\n \"minus-circle-outline\",\n \"minus-network\",\n \"minus-network-outline\",\n \"minus-thick\",\n \"mirror\",\n \"mirror-rectangle\",\n \"mirror-variant\",\n \"mixed-martial-arts\",\n \"mixed-reality\",\n \"molecule\",\n \"molecule-co\",\n \"molecule-co2\",\n \"monitor\",\n \"monitor-account\",\n \"monitor-arrow-down\",\n \"monitor-arrow-down-variant\",\n \"monitor-cellphone\",\n \"monitor-cellphone-star\",\n \"monitor-dashboard\",\n \"monitor-edit\",\n \"monitor-eye\",\n \"monitor-lock\",\n \"monitor-multiple\",\n \"monitor-off\",\n \"monitor-screenshot\",\n \"monitor-share\",\n \"monitor-shimmer\",\n \"monitor-small\",\n \"monitor-speaker\",\n \"monitor-speaker-off\",\n \"monitor-star\",\n \"monitor-vertical\",\n \"moon-first-quarter\",\n \"moon-full\",\n \"moon-last-quarter\",\n \"moon-new\",\n \"moon-waning-crescent\",\n \"moon-waning-gibbous\",\n \"moon-waxing-crescent\",\n \"moon-waxing-gibbous\",\n \"moped\",\n \"moped-electric\",\n \"moped-electric-outline\",\n \"moped-outline\",\n \"more\",\n \"mortar-pestle\",\n \"mortar-pestle-plus\",\n \"mosque\",\n \"mosque-outline\",\n \"mother-heart\",\n \"mother-nurse\",\n \"motion\",\n \"motion-outline\",\n \"motion-pause\",\n \"motion-pause-outline\",\n \"motion-play\",\n \"motion-play-outline\",\n \"motion-sensor\",\n \"motion-sensor-off\",\n \"motorbike\",\n \"motorbike-electric\",\n \"motorbike-off\",\n \"mouse\",\n \"mouse-bluetooth\",\n \"mouse-left-click\",\n \"mouse-left-click-outline\",\n \"mouse-move-down\",\n \"mouse-move-up\",\n \"mouse-move-vertical\",\n \"mouse-off\",\n \"mouse-outline\",\n \"mouse-right-click\",\n \"mouse-right-click-outline\",\n \"mouse-scroll-wheel\",\n \"mouse-variant\",\n \"mouse-variant-off\",\n \"move-resize\",\n \"move-resize-variant\",\n \"movie\",\n \"movie-check\",\n \"movie-check-outline\",\n \"movie-cog\",\n \"movie-cog-outline\",\n \"movie-edit\",\n \"movie-edit-outline\",\n \"movie-filter\",\n \"movie-filter-outline\",\n \"movie-minus\",\n \"movie-minus-outline\",\n \"movie-off\",\n \"movie-off-outline\",\n \"movie-open\",\n \"movie-open-check\",\n \"movie-open-check-outline\",\n \"movie-open-cog\",\n \"movie-open-cog-outline\",\n \"movie-open-edit\",\n \"movie-open-edit-outline\",\n \"movie-open-minus\",\n \"movie-open-minus-outline\",\n \"movie-open-off\",\n \"movie-open-off-outline\",\n \"movie-open-outline\",\n \"movie-open-play\",\n \"movie-open-play-outline\",\n \"movie-open-plus\",\n \"movie-open-plus-outline\",\n \"movie-open-remove\",\n \"movie-open-remove-outline\",\n \"movie-open-settings\",\n \"movie-open-settings-outline\",\n \"movie-open-star\",\n \"movie-open-star-outline\",\n \"movie-outline\",\n \"movie-play\",\n \"movie-play-outline\",\n \"movie-plus\",\n \"movie-plus-outline\",\n \"movie-remove\",\n \"movie-remove-outline\",\n \"movie-roll\",\n \"movie-search\",\n \"movie-search-outline\",\n \"movie-settings\",\n \"movie-settings-outline\",\n \"movie-star\",\n \"movie-star-outline\",\n \"mower\",\n \"mower-bag\",\n \"mower-bag-on\",\n \"mower-on\",\n \"muffin\",\n \"multicast\",\n \"multimedia\",\n \"multiplication\",\n \"multiplication-box\",\n \"mushroom\",\n \"mushroom-off\",\n \"mushroom-off-outline\",\n \"mushroom-outline\",\n \"music\",\n \"music-accidental-double-flat\",\n \"music-accidental-double-sharp\",\n \"music-accidental-flat\",\n \"music-accidental-natural\",\n \"music-accidental-sharp\",\n \"music-box\",\n \"music-box-multiple\",\n \"music-box-multiple-outline\",\n \"music-box-outline\",\n \"music-circle\",\n \"music-circle-outline\",\n \"music-clef-alto\",\n \"music-clef-bass\",\n \"music-clef-treble\",\n \"music-note\",\n \"music-note-bluetooth\",\n \"music-note-bluetooth-off\",\n \"music-note-eighth\",\n \"music-note-eighth-dotted\",\n \"music-note-half\",\n \"music-note-half-dotted\",\n \"music-note-minus\",\n \"music-note-off\",\n \"music-note-off-outline\",\n \"music-note-outline\",\n \"music-note-plus\",\n \"music-note-quarter\",\n \"music-note-quarter-dotted\",\n \"music-note-sixteenth\",\n \"music-note-sixteenth-dotted\",\n \"music-note-whole\",\n \"music-note-whole-dotted\",\n \"music-off\",\n \"music-rest-eighth\",\n \"music-rest-half\",\n \"music-rest-quarter\",\n \"music-rest-sixteenth\",\n \"music-rest-whole\",\n \"mustache\",\n \"nail\",\n \"nas\",\n \"nativescript\",\n \"nature\",\n \"nature-outline\",\n \"nature-people\",\n \"nature-people-outline\",\n \"navigation\",\n \"navigation-outline\",\n \"navigation-variant\",\n \"navigation-variant-outline\",\n \"near-me\",\n \"necklace\",\n \"needle\",\n \"needle-off\",\n \"netflix\",\n \"network\",\n \"network-off\",\n \"network-off-outline\",\n \"network-outline\",\n \"network-pos\",\n \"network-strength-1\",\n \"network-strength-1-alert\",\n \"network-strength-2\",\n \"network-strength-2-alert\",\n \"network-strength-3\",\n \"network-strength-3-alert\",\n \"network-strength-4\",\n \"network-strength-4-alert\",\n \"network-strength-4-cog\",\n \"network-strength-off\",\n \"network-strength-off-outline\",\n \"network-strength-outline\",\n \"new-box\",\n \"newspaper\",\n \"newspaper-check\",\n \"newspaper-minus\",\n \"newspaper-plus\",\n \"newspaper-remove\",\n \"newspaper-variant\",\n \"newspaper-variant-multiple\",\n \"newspaper-variant-multiple-outline\",\n \"newspaper-variant-outline\",\n \"nfc\",\n \"nfc-search-variant\",\n \"nfc-tap\",\n \"nfc-variant\",\n \"nfc-variant-off\",\n \"ninja\",\n \"nintendo-game-boy\",\n \"nintendo-switch\",\n \"nintendo-wii\",\n \"nintendo-wiiu\",\n \"nix\",\n \"nodejs\",\n \"noodles\",\n \"not-equal\",\n \"not-equal-variant\",\n \"note\",\n \"note-alert\",\n \"note-alert-outline\",\n \"note-check\",\n \"note-check-outline\",\n \"note-edit\",\n \"note-edit-outline\",\n \"note-minus\",\n \"note-minus-outline\",\n \"note-multiple\",\n \"note-multiple-outline\",\n \"note-off\",\n \"note-off-outline\",\n \"note-outline\",\n \"note-plus\",\n \"note-plus-outline\",\n \"note-remove\",\n \"note-remove-outline\",\n \"note-search\",\n \"note-search-outline\",\n \"note-text\",\n \"note-text-outline\",\n \"notebook\",\n \"notebook-check\",\n \"notebook-check-outline\",\n \"notebook-edit\",\n \"notebook-edit-outline\",\n \"notebook-heart\",\n \"notebook-heart-outline\",\n \"notebook-minus\",\n \"notebook-minus-outline\",\n \"notebook-multiple\",\n \"notebook-outline\",\n \"notebook-plus\",\n \"notebook-plus-outline\",\n \"notebook-remove\",\n \"notebook-remove-outline\",\n \"notification-clear-all\",\n \"npm\",\n \"nuke\",\n \"null\",\n \"numeric\",\n \"numeric-0\",\n \"numeric-0-box\",\n \"numeric-0-box-multiple\",\n \"numeric-0-box-multiple-outline\",\n \"numeric-0-box-outline\",\n \"numeric-0-circle\",\n \"numeric-0-circle-outline\",\n \"numeric-1\",\n \"numeric-1-box\",\n \"numeric-1-box-multiple\",\n \"numeric-1-box-multiple-outline\",\n \"numeric-1-box-outline\",\n \"numeric-1-circle\",\n \"numeric-1-circle-outline\",\n \"numeric-10\",\n \"numeric-10-box\",\n \"numeric-10-box-multiple\",\n \"numeric-10-box-multiple-outline\",\n \"numeric-10-box-outline\",\n \"numeric-10-circle\",\n \"numeric-10-circle-outline\",\n \"numeric-2\",\n \"numeric-2-box\",\n \"numeric-2-box-multiple\",\n \"numeric-2-box-multiple-outline\",\n \"numeric-2-box-outline\",\n \"numeric-2-circle\",\n \"numeric-2-circle-outline\",\n \"numeric-3\",\n \"numeric-3-box\",\n \"numeric-3-box-multiple\",\n \"numeric-3-box-multiple-outline\",\n \"numeric-3-box-outline\",\n \"numeric-3-circle\",\n \"numeric-3-circle-outline\",\n \"numeric-4\",\n \"numeric-4-box\",\n \"numeric-4-box-multiple\",\n \"numeric-4-box-multiple-outline\",\n \"numeric-4-box-outline\",\n \"numeric-4-circle\",\n \"numeric-4-circle-outline\",\n \"numeric-5\",\n \"numeric-5-box\",\n \"numeric-5-box-multiple\",\n \"numeric-5-box-multiple-outline\",\n \"numeric-5-box-outline\",\n \"numeric-5-circle\",\n \"numeric-5-circle-outline\",\n \"numeric-6\",\n \"numeric-6-box\",\n \"numeric-6-box-multiple\",\n \"numeric-6-box-multiple-outline\",\n \"numeric-6-box-outline\",\n \"numeric-6-circle\",\n \"numeric-6-circle-outline\",\n \"numeric-7\",\n \"numeric-7-box\",\n \"numeric-7-box-multiple\",\n \"numeric-7-box-multiple-outline\",\n \"numeric-7-box-outline\",\n \"numeric-7-circle\",\n \"numeric-7-circle-outline\",\n \"numeric-8\",\n \"numeric-8-box\",\n \"numeric-8-box-multiple\",\n \"numeric-8-box-multiple-outline\",\n \"numeric-8-box-outline\",\n \"numeric-8-circle\",\n \"numeric-8-circle-outline\",\n \"numeric-9\",\n \"numeric-9-box\",\n \"numeric-9-box-multiple\",\n \"numeric-9-box-multiple-outline\",\n \"numeric-9-box-outline\",\n \"numeric-9-circle\",\n \"numeric-9-circle-outline\",\n \"numeric-9-plus\",\n \"numeric-9-plus-box\",\n \"numeric-9-plus-box-multiple\",\n \"numeric-9-plus-box-multiple-outline\",\n \"numeric-9-plus-box-outline\",\n \"numeric-9-plus-circle\",\n \"numeric-9-plus-circle-outline\",\n \"numeric-negative-1\",\n \"numeric-off\",\n \"numeric-positive-1\",\n \"nut\",\n \"nutrition\",\n \"nuxt\",\n \"oar\",\n \"ocarina\",\n \"oci\",\n \"ocr\",\n \"octagon\",\n \"octagon-outline\",\n \"octagram\",\n \"octagram-edit\",\n \"octagram-edit-outline\",\n \"octagram-minus\",\n \"octagram-minus-outline\",\n \"octagram-outline\",\n \"octagram-plus\",\n \"octagram-plus-outline\",\n \"octahedron\",\n \"octahedron-off\",\n \"odnoklassniki\",\n \"offer\",\n \"office-building\",\n \"office-building-cog\",\n \"office-building-cog-outline\",\n \"office-building-marker\",\n \"office-building-marker-outline\",\n \"office-building-minus\",\n \"office-building-minus-outline\",\n \"office-building-outline\",\n \"office-building-plus\",\n \"office-building-plus-outline\",\n \"office-building-remove\",\n \"office-building-remove-outline\",\n \"oil\",\n \"oil-lamp\",\n \"oil-level\",\n \"oil-temperature\",\n \"om\",\n \"omega\",\n \"one-up\",\n \"onepassword\",\n \"opacity\",\n \"open-in-app\",\n \"open-in-new\",\n \"open-source-initiative\",\n \"openid\",\n \"opera\",\n \"orbit\",\n \"orbit-variant\",\n \"order-alphabetical-ascending\",\n \"order-alphabetical-descending\",\n \"order-bool-ascending\",\n \"order-bool-ascending-variant\",\n \"order-bool-descending\",\n \"order-bool-descending-variant\",\n \"order-numeric-ascending\",\n \"order-numeric-descending\",\n \"origin\",\n \"ornament\",\n \"ornament-variant\",\n \"outdoor-lamp\",\n \"overscan\",\n \"owl\",\n \"pac-man\",\n \"package\",\n \"package-check\",\n \"package-down\",\n \"package-up\",\n \"package-variant\",\n \"package-variant-closed\",\n \"package-variant-closed-check\",\n \"package-variant-closed-minus\",\n \"package-variant-closed-plus\",\n \"package-variant-closed-remove\",\n \"package-variant-minus\",\n \"package-variant-plus\",\n \"package-variant-remove\",\n \"page-first\",\n \"page-last\",\n \"page-layout-body\",\n \"page-layout-footer\",\n \"page-layout-header\",\n \"page-layout-header-footer\",\n \"page-layout-sidebar-left\",\n \"page-layout-sidebar-right\",\n \"page-next\",\n \"page-next-outline\",\n \"page-previous\",\n \"page-previous-outline\",\n \"pail\",\n \"pail-minus\",\n \"pail-minus-outline\",\n \"pail-off\",\n \"pail-off-outline\",\n \"pail-outline\",\n \"pail-plus\",\n \"pail-plus-outline\",\n \"pail-remove\",\n \"pail-remove-outline\",\n \"palette\",\n \"palette-advanced\",\n \"palette-outline\",\n \"palette-swatch\",\n \"palette-swatch-outline\",\n \"palette-swatch-variant\",\n \"palm-tree\",\n \"pan\",\n \"pan-bottom-left\",\n \"pan-bottom-right\",\n \"pan-down\",\n \"pan-horizontal\",\n \"pan-left\",\n \"pan-right\",\n \"pan-top-left\",\n \"pan-top-right\",\n \"pan-up\",\n \"pan-vertical\",\n \"panda\",\n \"pandora\",\n \"panorama\",\n \"panorama-fisheye\",\n \"panorama-horizontal\",\n \"panorama-horizontal-outline\",\n \"panorama-outline\",\n \"panorama-sphere\",\n \"panorama-sphere-outline\",\n \"panorama-variant\",\n \"panorama-variant-outline\",\n \"panorama-vertical\",\n \"panorama-vertical-outline\",\n \"panorama-wide-angle\",\n \"panorama-wide-angle-outline\",\n \"paper-cut-vertical\",\n \"paper-roll\",\n \"paper-roll-outline\",\n \"paperclip\",\n \"paperclip-check\",\n \"paperclip-lock\",\n \"paperclip-minus\",\n \"paperclip-off\",\n \"paperclip-plus\",\n \"paperclip-remove\",\n \"parachute\",\n \"parachute-outline\",\n \"paragliding\",\n \"parking\",\n \"party-popper\",\n \"passport\",\n \"passport-alert\",\n \"passport-biometric\",\n \"passport-cancel\",\n \"passport-check\",\n \"passport-minus\",\n \"passport-plus\",\n \"passport-remove\",\n \"pasta\",\n \"patio-heater\",\n \"patreon\",\n \"pause\",\n \"pause-box\",\n \"pause-box-outline\",\n \"pause-circle\",\n \"pause-circle-outline\",\n \"pause-octagon\",\n \"pause-octagon-outline\",\n \"paw\",\n \"paw-off\",\n \"paw-off-outline\",\n \"paw-outline\",\n \"peace\",\n \"peanut\",\n \"peanut-off\",\n \"peanut-off-outline\",\n \"peanut-outline\",\n \"pen\",\n \"pen-lock\",\n \"pen-minus\",\n \"pen-off\",\n \"pen-plus\",\n \"pen-remove\",\n \"pencil\",\n \"pencil-box\",\n \"pencil-box-multiple\",\n \"pencil-box-multiple-outline\",\n \"pencil-box-outline\",\n \"pencil-circle\",\n \"pencil-circle-outline\",\n \"pencil-lock\",\n \"pencil-lock-outline\",\n \"pencil-minus\",\n \"pencil-minus-outline\",\n \"pencil-off\",\n \"pencil-off-outline\",\n \"pencil-outline\",\n \"pencil-plus\",\n \"pencil-plus-outline\",\n \"pencil-remove\",\n \"pencil-remove-outline\",\n \"pencil-ruler\",\n \"pencil-ruler-outline\",\n \"penguin\",\n \"pentagon\",\n \"pentagon-outline\",\n \"pentagram\",\n \"percent\",\n \"percent-box\",\n \"percent-box-outline\",\n \"percent-circle\",\n \"percent-circle-outline\",\n \"percent-outline\",\n \"periodic-table\",\n \"perspective-less\",\n \"perspective-more\",\n \"ph\",\n \"phone\",\n \"phone-alert\",\n \"phone-alert-outline\",\n \"phone-bluetooth\",\n \"phone-bluetooth-outline\",\n \"phone-cancel\",\n \"phone-cancel-outline\",\n \"phone-check\",\n \"phone-check-outline\",\n \"phone-classic\",\n \"phone-classic-off\",\n \"phone-clock\",\n \"phone-dial\",\n \"phone-dial-outline\",\n \"phone-forward\",\n \"phone-forward-outline\",\n \"phone-hangup\",\n \"phone-hangup-outline\",\n \"phone-in-talk\",\n \"phone-in-talk-outline\",\n \"phone-incoming\",\n \"phone-incoming-outgoing\",\n \"phone-incoming-outgoing-outline\",\n \"phone-incoming-outline\",\n \"phone-lock\",\n \"phone-lock-outline\",\n \"phone-log\",\n \"phone-log-outline\",\n \"phone-message\",\n \"phone-message-outline\",\n \"phone-minus\",\n \"phone-minus-outline\",\n \"phone-missed\",\n \"phone-missed-outline\",\n \"phone-off\",\n \"phone-off-outline\",\n \"phone-outgoing\",\n \"phone-outgoing-outline\",\n \"phone-outline\",\n \"phone-paused\",\n \"phone-paused-outline\",\n \"phone-plus\",\n \"phone-plus-outline\",\n \"phone-refresh\",\n \"phone-refresh-outline\",\n \"phone-remove\",\n \"phone-remove-outline\",\n \"phone-return\",\n \"phone-return-outline\",\n \"phone-ring\",\n \"phone-ring-outline\",\n \"phone-rotate-landscape\",\n \"phone-rotate-portrait\",\n \"phone-settings\",\n \"phone-settings-outline\",\n \"phone-sync\",\n \"phone-sync-outline\",\n \"phone-voip\",\n \"pi\",\n \"pi-box\",\n \"pi-hole\",\n \"piano\",\n \"piano-off\",\n \"pickaxe\",\n \"picture-in-picture-bottom-right\",\n \"picture-in-picture-bottom-right-outline\",\n \"picture-in-picture-top-right\",\n \"picture-in-picture-top-right-outline\",\n \"pier\",\n \"pier-crane\",\n \"pig\",\n \"pig-variant\",\n \"pig-variant-outline\",\n \"piggy-bank\",\n \"piggy-bank-outline\",\n \"pill\",\n \"pill-multiple\",\n \"pill-off\",\n \"pillar\",\n \"pin\",\n \"pin-off\",\n \"pin-off-outline\",\n \"pin-outline\",\n \"pine-tree\",\n \"pine-tree-box\",\n \"pine-tree-fire\",\n \"pine-tree-variant\",\n \"pine-tree-variant-outline\",\n \"pinterest\",\n \"pinwheel\",\n \"pinwheel-outline\",\n \"pipe\",\n \"pipe-disconnected\",\n \"pipe-leak\",\n \"pipe-valve\",\n \"pipe-wrench\",\n \"pirate\",\n \"pistol\",\n \"piston\",\n \"pitchfork\",\n \"pizza\",\n \"plane-car\",\n \"plane-train\",\n \"play\",\n \"play-box\",\n \"play-box-edit-outline\",\n \"play-box-lock\",\n \"play-box-lock-open\",\n \"play-box-lock-open-outline\",\n \"play-box-lock-outline\",\n \"play-box-multiple\",\n \"play-box-multiple-outline\",\n \"play-box-outline\",\n \"play-circle\",\n \"play-circle-outline\",\n \"play-network\",\n \"play-network-outline\",\n \"play-outline\",\n \"play-pause\",\n \"play-protected-content\",\n \"play-speed\",\n \"playlist-check\",\n \"playlist-edit\",\n \"playlist-minus\",\n \"playlist-music\",\n \"playlist-music-outline\",\n \"playlist-play\",\n \"playlist-plus\",\n \"playlist-remove\",\n \"playlist-star\",\n \"plex\",\n \"pliers\",\n \"plus\",\n \"plus-box\",\n \"plus-box-multiple\",\n \"plus-box-multiple-outline\",\n \"plus-box-outline\",\n \"plus-circle\",\n \"plus-circle-multiple\",\n \"plus-circle-multiple-outline\",\n \"plus-circle-outline\",\n \"plus-lock\",\n \"plus-lock-open\",\n \"plus-minus\",\n \"plus-minus-box\",\n \"plus-minus-variant\",\n \"plus-network\",\n \"plus-network-outline\",\n \"plus-outline\",\n \"plus-thick\",\n \"pocket\",\n \"podcast\",\n \"podium\",\n \"podium-bronze\",\n \"podium-gold\",\n \"podium-silver\",\n \"point-of-sale\",\n \"pokeball\",\n \"pokemon-go\",\n \"poker-chip\",\n \"polaroid\",\n \"police-badge\",\n \"police-badge-outline\",\n \"police-station\",\n \"poll\",\n \"polo\",\n \"polymer\",\n \"pool\",\n \"pool-thermometer\",\n \"popcorn\",\n \"post\",\n \"post-lamp\",\n \"post-outline\",\n \"postage-stamp\",\n \"pot\",\n \"pot-mix\",\n \"pot-mix-outline\",\n \"pot-outline\",\n \"pot-steam\",\n \"pot-steam-outline\",\n \"pound\",\n \"pound-box\",\n \"pound-box-outline\",\n \"power\",\n \"power-cycle\",\n \"power-off\",\n \"power-on\",\n \"power-plug\",\n \"power-plug-battery\",\n \"power-plug-battery-outline\",\n \"power-plug-off\",\n \"power-plug-off-outline\",\n \"power-plug-outline\",\n \"power-settings\",\n \"power-sleep\",\n \"power-socket\",\n \"power-socket-au\",\n \"power-socket-ch\",\n \"power-socket-de\",\n \"power-socket-eu\",\n \"power-socket-fr\",\n \"power-socket-it\",\n \"power-socket-jp\",\n \"power-socket-uk\",\n \"power-socket-us\",\n \"power-standby\",\n \"powershell\",\n \"prescription\",\n \"presentation\",\n \"presentation-play\",\n \"pretzel\",\n \"printer\",\n \"printer-3d\",\n \"printer-3d-nozzle\",\n \"printer-3d-nozzle-alert\",\n \"printer-3d-nozzle-alert-outline\",\n \"printer-3d-nozzle-heat\",\n \"printer-3d-nozzle-heat-outline\",\n \"printer-3d-nozzle-off\",\n \"printer-3d-nozzle-off-outline\",\n \"printer-3d-nozzle-outline\",\n \"printer-3d-off\",\n \"printer-alert\",\n \"printer-check\",\n \"printer-eye\",\n \"printer-off\",\n \"printer-off-outline\",\n \"printer-outline\",\n \"printer-pos\",\n \"printer-pos-alert\",\n \"printer-pos-alert-outline\",\n \"printer-pos-cancel\",\n \"printer-pos-cancel-outline\",\n \"printer-pos-check\",\n \"printer-pos-check-outline\",\n \"printer-pos-cog\",\n \"printer-pos-cog-outline\",\n \"printer-pos-edit\",\n \"printer-pos-edit-outline\",\n \"printer-pos-minus\",\n \"printer-pos-minus-outline\",\n \"printer-pos-network\",\n \"printer-pos-network-outline\",\n \"printer-pos-off\",\n \"printer-pos-off-outline\",\n \"printer-pos-outline\",\n \"printer-pos-pause\",\n \"printer-pos-pause-outline\",\n \"printer-pos-play\",\n \"printer-pos-play-outline\",\n \"printer-pos-plus\",\n \"printer-pos-plus-outline\",\n \"printer-pos-refresh\",\n \"printer-pos-refresh-outline\",\n \"printer-pos-remove\",\n \"printer-pos-remove-outline\",\n \"printer-pos-star\",\n \"printer-pos-star-outline\",\n \"printer-pos-stop\",\n \"printer-pos-stop-outline\",\n \"printer-pos-sync\",\n \"printer-pos-sync-outline\",\n \"printer-pos-wrench\",\n \"printer-pos-wrench-outline\",\n \"printer-search\",\n \"printer-settings\",\n \"printer-wireless\",\n \"priority-high\",\n \"priority-low\",\n \"professional-hexagon\",\n \"progress-alert\",\n \"progress-check\",\n \"progress-clock\",\n \"progress-close\",\n \"progress-download\",\n \"progress-helper\",\n \"progress-pencil\",\n \"progress-question\",\n \"progress-star\",\n \"progress-star-four-points\",\n \"progress-tag\",\n \"progress-upload\",\n \"progress-wrench\",\n \"projector\",\n \"projector-off\",\n \"projector-screen\",\n \"projector-screen-off\",\n \"projector-screen-off-outline\",\n \"projector-screen-outline\",\n \"projector-screen-variant\",\n \"projector-screen-variant-off\",\n \"projector-screen-variant-off-outline\",\n \"projector-screen-variant-outline\",\n \"propane-tank\",\n \"propane-tank-outline\",\n \"protocol\",\n \"publish\",\n \"publish-off\",\n \"pulse\",\n \"pump\",\n \"pump-off\",\n \"pumpkin\",\n \"purse\",\n \"purse-outline\",\n \"puzzle\",\n \"puzzle-check\",\n \"puzzle-check-outline\",\n \"puzzle-edit\",\n \"puzzle-edit-outline\",\n \"puzzle-heart\",\n \"puzzle-heart-outline\",\n \"puzzle-minus\",\n \"puzzle-minus-outline\",\n \"puzzle-outline\",\n \"puzzle-plus\",\n \"puzzle-plus-outline\",\n \"puzzle-remove\",\n \"puzzle-remove-outline\",\n \"puzzle-star\",\n \"puzzle-star-outline\",\n \"pyramid\",\n \"pyramid-off\",\n \"qi\",\n \"qqchat\",\n \"qrcode\",\n \"qrcode-edit\",\n \"qrcode-minus\",\n \"qrcode-plus\",\n \"qrcode-remove\",\n \"qrcode-scan\",\n \"quadcopter\",\n \"quality-high\",\n \"quality-low\",\n \"quality-medium\",\n \"queue-first-in-last-out\",\n \"quora\",\n \"rabbit\",\n \"rabbit-variant\",\n \"rabbit-variant-outline\",\n \"racing-helmet\",\n \"racquetball\",\n \"radar\",\n \"radiator\",\n \"radiator-disabled\",\n \"radiator-off\",\n \"radio\",\n \"radio-am\",\n \"radio-fm\",\n \"radio-handheld\",\n \"radio-off\",\n \"radio-tower\",\n \"radioactive\",\n \"radioactive-circle\",\n \"radioactive-circle-outline\",\n \"radioactive-off\",\n \"radiobox-blank\",\n \"radiobox-indeterminate-variant\",\n \"radiobox-marked\",\n \"radiology-box\",\n \"radiology-box-outline\",\n \"radius\",\n \"radius-outline\",\n \"railroad-light\",\n \"rake\",\n \"raspberry-pi\",\n \"raw\",\n \"raw-off\",\n \"ray-end\",\n \"ray-end-arrow\",\n \"ray-start\",\n \"ray-start-arrow\",\n \"ray-start-end\",\n \"ray-start-vertex-end\",\n \"ray-vertex\",\n \"razor-double-edge\",\n \"razor-single-edge\",\n \"react\",\n \"read\",\n \"receipt\",\n \"receipt-clock\",\n \"receipt-clock-outline\",\n \"receipt-outline\",\n \"receipt-send\",\n \"receipt-send-outline\",\n \"receipt-text\",\n \"receipt-text-arrow-left\",\n \"receipt-text-arrow-left-outline\",\n \"receipt-text-arrow-right\",\n \"receipt-text-arrow-right-outline\",\n \"receipt-text-check\",\n \"receipt-text-check-outline\",\n \"receipt-text-clock\",\n \"receipt-text-clock-outline\",\n \"receipt-text-edit\",\n \"receipt-text-edit-outline\",\n \"receipt-text-minus\",\n \"receipt-text-minus-outline\",\n \"receipt-text-outline\",\n \"receipt-text-plus\",\n \"receipt-text-plus-outline\",\n \"receipt-text-remove\",\n \"receipt-text-remove-outline\",\n \"receipt-text-send\",\n \"receipt-text-send-outline\",\n \"record\",\n \"record-circle\",\n \"record-circle-outline\",\n \"record-player\",\n \"record-rec\",\n \"rectangle\",\n \"rectangle-outline\",\n \"recycle\",\n \"recycle-variant\",\n \"reddit\",\n \"redhat\",\n \"redo\",\n \"redo-variant\",\n \"reflect-horizontal\",\n \"reflect-vertical\",\n \"refresh\",\n \"refresh-auto\",\n \"refresh-circle\",\n \"regex\",\n \"registered-trademark\",\n \"reiterate\",\n \"relation-many-to-many\",\n \"relation-many-to-one\",\n \"relation-many-to-one-or-many\",\n \"relation-many-to-only-one\",\n \"relation-many-to-zero-or-many\",\n \"relation-many-to-zero-or-one\",\n \"relation-one-or-many-to-many\",\n \"relation-one-or-many-to-one\",\n \"relation-one-or-many-to-one-or-many\",\n \"relation-one-or-many-to-only-one\",\n \"relation-one-or-many-to-zero-or-many\",\n \"relation-one-or-many-to-zero-or-one\",\n \"relation-one-to-many\",\n \"relation-one-to-one\",\n \"relation-one-to-one-or-many\",\n \"relation-one-to-only-one\",\n \"relation-one-to-zero-or-many\",\n \"relation-one-to-zero-or-one\",\n \"relation-only-one-to-many\",\n \"relation-only-one-to-one\",\n \"relation-only-one-to-one-or-many\",\n \"relation-only-one-to-only-one\",\n \"relation-only-one-to-zero-or-many\",\n \"relation-only-one-to-zero-or-one\",\n \"relation-zero-or-many-to-many\",\n \"relation-zero-or-many-to-one\",\n \"relation-zero-or-many-to-one-or-many\",\n \"relation-zero-or-many-to-only-one\",\n \"relation-zero-or-many-to-zero-or-many\",\n \"relation-zero-or-many-to-zero-or-one\",\n \"relation-zero-or-one-to-many\",\n \"relation-zero-or-one-to-one\",\n \"relation-zero-or-one-to-one-or-many\",\n \"relation-zero-or-one-to-only-one\",\n \"relation-zero-or-one-to-zero-or-many\",\n \"relation-zero-or-one-to-zero-or-one\",\n \"relative-scale\",\n \"reload\",\n \"reload-alert\",\n \"reminder\",\n \"remote\",\n \"remote-desktop\",\n \"remote-off\",\n \"remote-tv\",\n \"remote-tv-off\",\n \"rename\",\n \"rename-box\",\n \"rename-box-outline\",\n \"rename-outline\",\n \"reorder-horizontal\",\n \"reorder-vertical\",\n \"repeat\",\n \"repeat-off\",\n \"repeat-once\",\n \"repeat-variant\",\n \"replay\",\n \"reply\",\n \"reply-all\",\n \"reply-all-outline\",\n \"reply-circle\",\n \"reply-outline\",\n \"reproduction\",\n \"resistor\",\n \"resistor-nodes\",\n \"resize\",\n \"resize-bottom-right\",\n \"responsive\",\n \"restart\",\n \"restart-alert\",\n \"restart-off\",\n \"restore\",\n \"restore-alert\",\n \"rewind\",\n \"rewind-10\",\n \"rewind-15\",\n \"rewind-30\",\n \"rewind-45\",\n \"rewind-5\",\n \"rewind-60\",\n \"rewind-outline\",\n \"rhombus\",\n \"rhombus-medium\",\n \"rhombus-medium-outline\",\n \"rhombus-outline\",\n \"rhombus-split\",\n \"rhombus-split-outline\",\n \"ribbon\",\n \"rice\",\n \"rickshaw\",\n \"rickshaw-electric\",\n \"ring\",\n \"rivet\",\n \"road\",\n \"road-variant\",\n \"robber\",\n \"robot\",\n \"robot-angry\",\n \"robot-angry-outline\",\n \"robot-confused\",\n \"robot-confused-outline\",\n \"robot-dead\",\n \"robot-dead-outline\",\n \"robot-excited\",\n \"robot-excited-outline\",\n \"robot-happy\",\n \"robot-happy-outline\",\n \"robot-industrial\",\n \"robot-industrial-outline\",\n \"robot-love\",\n \"robot-love-outline\",\n \"robot-mower\",\n \"robot-mower-outline\",\n \"robot-off\",\n \"robot-off-outline\",\n \"robot-outline\",\n \"robot-vacuum\",\n \"robot-vacuum-alert\",\n \"robot-vacuum-off\",\n \"robot-vacuum-variant\",\n \"robot-vacuum-variant-alert\",\n \"robot-vacuum-variant-off\",\n \"rocket\",\n \"rocket-launch\",\n \"rocket-launch-outline\",\n \"rocket-outline\",\n \"rodent\",\n \"roller-shade\",\n \"roller-shade-closed\",\n \"roller-skate\",\n \"roller-skate-off\",\n \"rollerblade\",\n \"rollerblade-off\",\n \"rollupjs\",\n \"rolodex\",\n \"rolodex-outline\",\n \"roman-numeral-1\",\n \"roman-numeral-10\",\n \"roman-numeral-2\",\n \"roman-numeral-3\",\n \"roman-numeral-4\",\n \"roman-numeral-5\",\n \"roman-numeral-6\",\n \"roman-numeral-7\",\n \"roman-numeral-8\",\n \"roman-numeral-9\",\n \"room-service\",\n \"room-service-outline\",\n \"rotate-360\",\n \"rotate-3d\",\n \"rotate-3d-variant\",\n \"rotate-left\",\n \"rotate-left-variant\",\n \"rotate-orbit\",\n \"rotate-right\",\n \"rotate-right-variant\",\n \"rounded-corner\",\n \"router\",\n \"router-network\",\n \"router-network-wireless\",\n \"router-wireless\",\n \"router-wireless-off\",\n \"router-wireless-settings\",\n \"routes\",\n \"routes-clock\",\n \"rowing\",\n \"rss\",\n \"rss-box\",\n \"rss-off\",\n \"rug\",\n \"rugby\",\n \"ruler\",\n \"ruler-square\",\n \"ruler-square-compass\",\n \"run\",\n \"run-fast\",\n \"rv-truck\",\n \"sack\",\n \"sack-outline\",\n \"sack-percent\",\n \"safe\",\n \"safe-square\",\n \"safe-square-outline\",\n \"safety-goggles\",\n \"sail-boat\",\n \"sail-boat-sink\",\n \"sale\",\n \"sale-outline\",\n \"salesforce\",\n \"sass\",\n \"satellite\",\n \"satellite-uplink\",\n \"satellite-variant\",\n \"sausage\",\n \"sausage-off\",\n \"saw-blade\",\n \"sawtooth-wave\",\n \"saxophone\",\n \"scale\",\n \"scale-balance\",\n \"scale-bathroom\",\n \"scale-off\",\n \"scale-unbalanced\",\n \"scan-helper\",\n \"scanner\",\n \"scanner-off\",\n \"scatter-plot\",\n \"scatter-plot-outline\",\n \"scent\",\n \"scent-off\",\n \"school\",\n \"school-outline\",\n \"scissors-cutting\",\n \"scooter\",\n \"scooter-electric\",\n \"scoreboard\",\n \"scoreboard-outline\",\n \"screen-rotation\",\n \"screen-rotation-lock\",\n \"screw-flat-top\",\n \"screw-lag\",\n \"screw-machine-flat-top\",\n \"screw-machine-round-top\",\n \"screw-round-top\",\n \"screwdriver\",\n \"script\",\n \"script-outline\",\n \"script-text\",\n \"script-text-key\",\n \"script-text-key-outline\",\n \"script-text-outline\",\n \"script-text-play\",\n \"script-text-play-outline\",\n \"sd\",\n \"seal\",\n \"seal-variant\",\n \"search-web\",\n \"seat\",\n \"seat-flat\",\n \"seat-flat-angled\",\n \"seat-individual-suite\",\n \"seat-legroom-extra\",\n \"seat-legroom-normal\",\n \"seat-legroom-reduced\",\n \"seat-outline\",\n \"seat-passenger\",\n \"seat-recline-extra\",\n \"seat-recline-normal\",\n \"seatbelt\",\n \"security\",\n \"security-network\",\n \"seed\",\n \"seed-off\",\n \"seed-off-outline\",\n \"seed-outline\",\n \"seed-plus\",\n \"seed-plus-outline\",\n \"seesaw\",\n \"segment\",\n \"select\",\n \"select-all\",\n \"select-arrow-down\",\n \"select-arrow-up\",\n \"select-color\",\n \"select-compare\",\n \"select-drag\",\n \"select-group\",\n \"select-inverse\",\n \"select-marker\",\n \"select-multiple\",\n \"select-multiple-marker\",\n \"select-off\",\n \"select-place\",\n \"select-remove\",\n \"select-search\",\n \"selection\",\n \"selection-drag\",\n \"selection-ellipse\",\n \"selection-ellipse-arrow-inside\",\n \"selection-ellipse-remove\",\n \"selection-marker\",\n \"selection-multiple\",\n \"selection-multiple-marker\",\n \"selection-off\",\n \"selection-remove\",\n \"selection-search\",\n \"semantic-web\",\n \"send\",\n \"send-check\",\n \"send-check-outline\",\n \"send-circle\",\n \"send-circle-outline\",\n \"send-clock\",\n \"send-clock-outline\",\n \"send-lock\",\n \"send-lock-outline\",\n \"send-outline\",\n \"send-variant\",\n \"send-variant-clock\",\n \"send-variant-clock-outline\",\n \"send-variant-outline\",\n \"serial-port\",\n \"server\",\n \"server-minus\",\n \"server-minus-outline\",\n \"server-network\",\n \"server-network-off\",\n \"server-network-outline\",\n \"server-off\",\n \"server-outline\",\n \"server-plus\",\n \"server-plus-outline\",\n \"server-remove\",\n \"server-security\",\n \"set-all\",\n \"set-center\",\n \"set-center-right\",\n \"set-left\",\n \"set-left-center\",\n \"set-left-right\",\n \"set-merge\",\n \"set-none\",\n \"set-right\",\n \"set-split\",\n \"set-square\",\n \"set-top-box\",\n \"settings-helper\",\n \"shaker\",\n \"shaker-outline\",\n \"shape\",\n \"shape-circle-plus\",\n \"shape-outline\",\n \"shape-oval-plus\",\n \"shape-plus\",\n \"shape-plus-outline\",\n \"shape-polygon-plus\",\n \"shape-rectangle-plus\",\n \"shape-square-plus\",\n \"shape-square-rounded-plus\",\n \"share\",\n \"share-all\",\n \"share-all-outline\",\n \"share-circle\",\n \"share-off\",\n \"share-off-outline\",\n \"share-outline\",\n \"share-variant\",\n \"share-variant-outline\",\n \"shark\",\n \"shark-fin\",\n \"shark-fin-outline\",\n \"shark-off\",\n \"sheep\",\n \"shield\",\n \"shield-account\",\n \"shield-account-outline\",\n \"shield-account-variant\",\n \"shield-account-variant-outline\",\n \"shield-airplane\",\n \"shield-airplane-outline\",\n \"shield-alert\",\n \"shield-alert-outline\",\n \"shield-bug\",\n \"shield-bug-outline\",\n \"shield-car\",\n \"shield-check\",\n \"shield-check-outline\",\n \"shield-cross\",\n \"shield-cross-outline\",\n \"shield-crown\",\n \"shield-crown-outline\",\n \"shield-edit\",\n \"shield-edit-outline\",\n \"shield-half\",\n \"shield-half-full\",\n \"shield-home\",\n \"shield-home-outline\",\n \"shield-key\",\n \"shield-key-outline\",\n \"shield-link-variant\",\n \"shield-link-variant-outline\",\n \"shield-lock\",\n \"shield-lock-open\",\n \"shield-lock-open-outline\",\n \"shield-lock-outline\",\n \"shield-moon\",\n \"shield-moon-outline\",\n \"shield-off\",\n \"shield-off-outline\",\n \"shield-outline\",\n \"shield-plus\",\n \"shield-plus-outline\",\n \"shield-refresh\",\n \"shield-refresh-outline\",\n \"shield-remove\",\n \"shield-remove-outline\",\n \"shield-search\",\n \"shield-star\",\n \"shield-star-outline\",\n \"shield-sun\",\n \"shield-sun-outline\",\n \"shield-sword\",\n \"shield-sword-outline\",\n \"shield-sync\",\n \"shield-sync-outline\",\n \"shimmer\",\n \"ship-wheel\",\n \"shipping-pallet\",\n \"shoe-ballet\",\n \"shoe-cleat\",\n \"shoe-formal\",\n \"shoe-heel\",\n \"shoe-print\",\n \"shoe-sneaker\",\n \"shopping\",\n \"shopping-music\",\n \"shopping-outline\",\n \"shopping-search\",\n \"shopping-search-outline\",\n \"shore\",\n \"shovel\",\n \"shovel-off\",\n \"shower\",\n \"shower-head\",\n \"shredder\",\n \"shuffle\",\n \"shuffle-disabled\",\n \"shuffle-variant\",\n \"shuriken\",\n \"sickle\",\n \"sigma\",\n \"sigma-lower\",\n \"sign-caution\",\n \"sign-direction\",\n \"sign-direction-minus\",\n \"sign-direction-plus\",\n \"sign-direction-remove\",\n \"sign-language\",\n \"sign-language-outline\",\n \"sign-pole\",\n \"sign-real-estate\",\n \"sign-text\",\n \"sign-yield\",\n \"signal\",\n \"signal-2g\",\n \"signal-3g\",\n \"signal-4g\",\n \"signal-5g\",\n \"signal-cellular-1\",\n \"signal-cellular-2\",\n \"signal-cellular-3\",\n \"signal-cellular-outline\",\n \"signal-distance-variant\",\n \"signal-hspa\",\n \"signal-hspa-plus\",\n \"signal-off\",\n \"signal-variant\",\n \"signature\",\n \"signature-freehand\",\n \"signature-image\",\n \"signature-text\",\n \"silo\",\n \"silo-outline\",\n \"silverware\",\n \"silverware-clean\",\n \"silverware-fork\",\n \"silverware-fork-knife\",\n \"silverware-spoon\",\n \"silverware-variant\",\n \"sim\",\n \"sim-alert\",\n \"sim-alert-outline\",\n \"sim-off\",\n \"sim-off-outline\",\n \"sim-outline\",\n \"simple-icons\",\n \"sina-weibo\",\n \"sine-wave\",\n \"sitemap\",\n \"sitemap-outline\",\n \"size-l\",\n \"size-m\",\n \"size-s\",\n \"size-xl\",\n \"size-xs\",\n \"size-xxl\",\n \"size-xxs\",\n \"size-xxxl\",\n \"skate\",\n \"skate-off\",\n \"skateboard\",\n \"skateboarding\",\n \"skew-less\",\n \"skew-more\",\n \"ski\",\n \"ski-cross-country\",\n \"ski-water\",\n \"skip-backward\",\n \"skip-backward-outline\",\n \"skip-forward\",\n \"skip-forward-outline\",\n \"skip-next\",\n \"skip-next-circle\",\n \"skip-next-circle-outline\",\n \"skip-next-outline\",\n \"skip-previous\",\n \"skip-previous-circle\",\n \"skip-previous-circle-outline\",\n \"skip-previous-outline\",\n \"skull\",\n \"skull-crossbones\",\n \"skull-crossbones-outline\",\n \"skull-outline\",\n \"skull-scan\",\n \"skull-scan-outline\",\n \"skype\",\n \"skype-business\",\n \"slack\",\n \"slash-forward\",\n \"slash-forward-box\",\n \"sledding\",\n \"sleep\",\n \"sleep-off\",\n \"slide\",\n \"slope-downhill\",\n \"slope-uphill\",\n \"slot-machine\",\n \"slot-machine-outline\",\n \"smart-card\",\n \"smart-card-off\",\n \"smart-card-off-outline\",\n \"smart-card-outline\",\n \"smart-card-reader\",\n \"smart-card-reader-outline\",\n \"smog\",\n \"smoke\",\n \"smoke-detector\",\n \"smoke-detector-alert\",\n \"smoke-detector-alert-outline\",\n \"smoke-detector-off\",\n \"smoke-detector-off-outline\",\n \"smoke-detector-outline\",\n \"smoke-detector-variant\",\n \"smoke-detector-variant-alert\",\n \"smoke-detector-variant-off\",\n \"smoking\",\n \"smoking-off\",\n \"smoking-pipe\",\n \"smoking-pipe-off\",\n \"snail\",\n \"snake\",\n \"snapchat\",\n \"snowboard\",\n \"snowflake\",\n \"snowflake-alert\",\n \"snowflake-check\",\n \"snowflake-melt\",\n \"snowflake-off\",\n \"snowflake-thermometer\",\n \"snowflake-variant\",\n \"snowman\",\n \"snowmobile\",\n \"snowshoeing\",\n \"soccer\",\n \"soccer-field\",\n \"social-distance-2-meters\",\n \"social-distance-6-feet\",\n \"sofa\",\n \"sofa-outline\",\n \"sofa-single\",\n \"sofa-single-outline\",\n \"solar-panel\",\n \"solar-panel-large\",\n \"solar-power\",\n \"solar-power-variant\",\n \"solar-power-variant-outline\",\n \"soldering-iron\",\n \"solid\",\n \"sony-playstation\",\n \"sort\",\n \"sort-alphabetical-ascending\",\n \"sort-alphabetical-ascending-variant\",\n \"sort-alphabetical-descending\",\n \"sort-alphabetical-descending-variant\",\n \"sort-alphabetical-variant\",\n \"sort-ascending\",\n \"sort-bool-ascending\",\n \"sort-bool-ascending-variant\",\n \"sort-bool-descending\",\n \"sort-bool-descending-variant\",\n \"sort-calendar-ascending\",\n \"sort-calendar-descending\",\n \"sort-clock-ascending\",\n \"sort-clock-ascending-outline\",\n \"sort-clock-descending\",\n \"sort-clock-descending-outline\",\n \"sort-descending\",\n \"sort-numeric-ascending\",\n \"sort-numeric-ascending-variant\",\n \"sort-numeric-descending\",\n \"sort-numeric-descending-variant\",\n \"sort-numeric-variant\",\n \"sort-reverse-variant\",\n \"sort-variant\",\n \"sort-variant-lock\",\n \"sort-variant-lock-open\",\n \"sort-variant-off\",\n \"sort-variant-remove\",\n \"soundbar\",\n \"soundcloud\",\n \"source-branch\",\n \"source-branch-check\",\n \"source-branch-minus\",\n \"source-branch-plus\",\n \"source-branch-refresh\",\n \"source-branch-remove\",\n \"source-branch-sync\",\n \"source-commit\",\n \"source-commit-end\",\n \"source-commit-end-local\",\n \"source-commit-local\",\n \"source-commit-next-local\",\n \"source-commit-start\",\n \"source-commit-start-next-local\",\n \"source-fork\",\n \"source-merge\",\n \"source-pull\",\n \"source-repository\",\n \"source-repository-multiple\",\n \"soy-sauce\",\n \"soy-sauce-off\",\n \"spa\",\n \"spa-outline\",\n \"space-invaders\",\n \"space-station\",\n \"spade\",\n \"speaker\",\n \"speaker-bluetooth\",\n \"speaker-message\",\n \"speaker-multiple\",\n \"speaker-off\",\n \"speaker-pause\",\n \"speaker-play\",\n \"speaker-stop\",\n \"speaker-wireless\",\n \"spear\",\n \"speedometer\",\n \"speedometer-medium\",\n \"speedometer-slow\",\n \"spellcheck\",\n \"sphere\",\n \"sphere-off\",\n \"spider\",\n \"spider-outline\",\n \"spider-thread\",\n \"spider-web\",\n \"spirit-level\",\n \"spoon-sugar\",\n \"spotify\",\n \"spotlight\",\n \"spotlight-beam\",\n \"spray\",\n \"spray-bottle\",\n \"sprinkler\",\n \"sprinkler-fire\",\n \"sprinkler-variant\",\n \"sprout\",\n \"sprout-outline\",\n \"square\",\n \"square-circle\",\n \"square-circle-outline\",\n \"square-edit-outline\",\n \"square-medium\",\n \"square-medium-outline\",\n \"square-off\",\n \"square-off-outline\",\n \"square-opacity\",\n \"square-outline\",\n \"square-root\",\n \"square-root-box\",\n \"square-rounded\",\n \"square-rounded-badge\",\n \"square-rounded-badge-outline\",\n \"square-rounded-outline\",\n \"square-small\",\n \"square-wave\",\n \"squeegee\",\n \"ssh\",\n \"stack-exchange\",\n \"stack-overflow\",\n \"stackpath\",\n \"stadium\",\n \"stadium-outline\",\n \"stadium-variant\",\n \"stairs\",\n \"stairs-box\",\n \"stairs-down\",\n \"stairs-up\",\n \"stamper\",\n \"standard-definition\",\n \"star\",\n \"star-box\",\n \"star-box-multiple\",\n \"star-box-multiple-outline\",\n \"star-box-outline\",\n \"star-check\",\n \"star-check-outline\",\n \"star-circle\",\n \"star-circle-outline\",\n \"star-cog\",\n \"star-cog-outline\",\n \"star-crescent\",\n \"star-david\",\n \"star-face\",\n \"star-four-points\",\n \"star-four-points-box\",\n \"star-four-points-box-outline\",\n \"star-four-points-circle\",\n \"star-four-points-circle-outline\",\n \"star-four-points-outline\",\n \"star-four-points-small\",\n \"star-half\",\n \"star-half-full\",\n \"star-minus\",\n \"star-minus-outline\",\n \"star-off\",\n \"star-off-outline\",\n \"star-outline\",\n \"star-plus\",\n \"star-plus-outline\",\n \"star-remove\",\n \"star-remove-outline\",\n \"star-settings\",\n \"star-settings-outline\",\n \"star-shooting\",\n \"star-shooting-outline\",\n \"star-three-points\",\n \"star-three-points-outline\",\n \"state-machine\",\n \"steam\",\n \"steering\",\n \"steering-off\",\n \"step-backward\",\n \"step-backward-2\",\n \"step-forward\",\n \"step-forward-2\",\n \"stethoscope\",\n \"sticker\",\n \"sticker-alert\",\n \"sticker-alert-outline\",\n \"sticker-check\",\n \"sticker-check-outline\",\n \"sticker-circle-outline\",\n \"sticker-emoji\",\n \"sticker-minus\",\n \"sticker-minus-outline\",\n \"sticker-outline\",\n \"sticker-plus\",\n \"sticker-plus-outline\",\n \"sticker-remove\",\n \"sticker-remove-outline\",\n \"sticker-text\",\n \"sticker-text-outline\",\n \"stocking\",\n \"stomach\",\n \"stool\",\n \"stool-outline\",\n \"stop\",\n \"stop-circle\",\n \"stop-circle-outline\",\n \"storage-tank\",\n \"storage-tank-outline\",\n \"store\",\n \"store-24-hour\",\n \"store-alert\",\n \"store-alert-outline\",\n \"store-check\",\n \"store-check-outline\",\n \"store-clock\",\n \"store-clock-outline\",\n \"store-cog\",\n \"store-cog-outline\",\n \"store-edit\",\n \"store-edit-outline\",\n \"store-marker\",\n \"store-marker-outline\",\n \"store-minus\",\n \"store-minus-outline\",\n \"store-off\",\n \"store-off-outline\",\n \"store-outline\",\n \"store-plus\",\n \"store-plus-outline\",\n \"store-remove\",\n \"store-remove-outline\",\n \"store-search\",\n \"store-search-outline\",\n \"store-settings\",\n \"store-settings-outline\",\n \"storefront\",\n \"storefront-check\",\n \"storefront-check-outline\",\n \"storefront-edit\",\n \"storefront-edit-outline\",\n \"storefront-minus\",\n \"storefront-minus-outline\",\n \"storefront-outline\",\n \"storefront-plus\",\n \"storefront-plus-outline\",\n \"storefront-remove\",\n \"storefront-remove-outline\",\n \"stove\",\n \"strategy\",\n \"stretch-to-page\",\n \"stretch-to-page-outline\",\n \"string-lights\",\n \"string-lights-off\",\n \"subdirectory-arrow-left\",\n \"subdirectory-arrow-right\",\n \"submarine\",\n \"subtitles\",\n \"subtitles-outline\",\n \"subway\",\n \"subway-alert-variant\",\n \"subway-variant\",\n \"summit\",\n \"sun-angle\",\n \"sun-angle-outline\",\n \"sun-clock\",\n \"sun-clock-outline\",\n \"sun-compass\",\n \"sun-snowflake\",\n \"sun-snowflake-variant\",\n \"sun-thermometer\",\n \"sun-thermometer-outline\",\n \"sun-wireless\",\n \"sun-wireless-outline\",\n \"sunglasses\",\n \"surfing\",\n \"surround-sound\",\n \"surround-sound-2-0\",\n \"surround-sound-2-1\",\n \"surround-sound-3-1\",\n \"surround-sound-5-1\",\n \"surround-sound-5-1-2\",\n \"surround-sound-7-1\",\n \"svg\",\n \"swap-horizontal\",\n \"swap-horizontal-bold\",\n \"swap-horizontal-circle\",\n \"swap-horizontal-circle-outline\",\n \"swap-horizontal-hidden\",\n \"swap-horizontal-variant\",\n \"swap-vertical\",\n \"swap-vertical-bold\",\n \"swap-vertical-circle\",\n \"swap-vertical-circle-outline\",\n \"swap-vertical-variant\",\n \"swim\",\n \"switch\",\n \"sword\",\n \"sword-cross\",\n \"syllabary-hangul\",\n \"syllabary-hiragana\",\n \"syllabary-katakana\",\n \"syllabary-katakana-halfwidth\",\n \"symbol\",\n \"symfony\",\n \"synagogue\",\n \"synagogue-outline\",\n \"sync\",\n \"sync-alert\",\n \"sync-circle\",\n \"sync-off\",\n \"tab\",\n \"tab-minus\",\n \"tab-plus\",\n \"tab-remove\",\n \"tab-search\",\n \"tab-unselected\",\n \"table\",\n \"table-account\",\n \"table-alert\",\n \"table-arrow-down\",\n \"table-arrow-left\",\n \"table-arrow-right\",\n \"table-arrow-up\",\n \"table-border\",\n \"table-cancel\",\n \"table-chair\",\n \"table-check\",\n \"table-clock\",\n \"table-cog\",\n \"table-column\",\n \"table-column-plus-after\",\n \"table-column-plus-before\",\n \"table-column-remove\",\n \"table-column-width\",\n \"table-edit\",\n \"table-eye\",\n \"table-eye-off\",\n \"table-filter\",\n \"table-furniture\",\n \"table-headers-eye\",\n \"table-headers-eye-off\",\n \"table-heart\",\n \"table-key\",\n \"table-large\",\n \"table-large-plus\",\n \"table-large-remove\",\n \"table-lock\",\n \"table-merge-cells\",\n \"table-minus\",\n \"table-multiple\",\n \"table-network\",\n \"table-of-contents\",\n \"table-off\",\n \"table-picnic\",\n \"table-pivot\",\n \"table-plus\",\n \"table-question\",\n \"table-refresh\",\n \"table-remove\",\n \"table-row\",\n \"table-row-height\",\n \"table-row-plus-after\",\n \"table-row-plus-before\",\n \"table-row-remove\",\n \"table-search\",\n \"table-settings\",\n \"table-split-cell\",\n \"table-star\",\n \"table-sync\",\n \"table-tennis\",\n \"tablet\",\n \"tablet-cellphone\",\n \"tablet-dashboard\",\n \"taco\",\n \"tag\",\n \"tag-arrow-down\",\n \"tag-arrow-down-outline\",\n \"tag-arrow-left\",\n \"tag-arrow-left-outline\",\n \"tag-arrow-right\",\n \"tag-arrow-right-outline\",\n \"tag-arrow-up\",\n \"tag-arrow-up-outline\",\n \"tag-check\",\n \"tag-check-outline\",\n \"tag-edit\",\n \"tag-edit-outline\",\n \"tag-faces\",\n \"tag-heart\",\n \"tag-heart-outline\",\n \"tag-hidden\",\n \"tag-minus\",\n \"tag-minus-outline\",\n \"tag-multiple\",\n \"tag-multiple-outline\",\n \"tag-off\",\n \"tag-off-outline\",\n \"tag-outline\",\n \"tag-plus\",\n \"tag-plus-outline\",\n \"tag-remove\",\n \"tag-remove-outline\",\n \"tag-search\",\n \"tag-search-outline\",\n \"tag-text\",\n \"tag-text-outline\",\n \"tailwind\",\n \"tally-mark-1\",\n \"tally-mark-2\",\n \"tally-mark-3\",\n \"tally-mark-4\",\n \"tally-mark-5\",\n \"tangram\",\n \"tank\",\n \"tanker-truck\",\n \"tape-drive\",\n \"tape-measure\",\n \"target\",\n \"target-account\",\n \"target-variant\",\n \"taxi\",\n \"tea\",\n \"tea-outline\",\n \"teamviewer\",\n \"teddy-bear\",\n \"telescope\",\n \"television\",\n \"television-ambient-light\",\n \"television-box\",\n \"television-classic\",\n \"television-classic-off\",\n \"television-guide\",\n \"television-off\",\n \"television-pause\",\n \"television-play\",\n \"television-shimmer\",\n \"television-speaker\",\n \"television-speaker-off\",\n \"television-stop\",\n \"temperature-celsius\",\n \"temperature-fahrenheit\",\n \"temperature-kelvin\",\n \"temple-buddhist\",\n \"temple-buddhist-outline\",\n \"temple-hindu\",\n \"temple-hindu-outline\",\n \"tennis\",\n \"tennis-ball\",\n \"tennis-ball-outline\",\n \"tent\",\n \"terraform\",\n \"terrain\",\n \"test-tube\",\n \"test-tube-empty\",\n \"test-tube-off\",\n \"text\",\n \"text-account\",\n \"text-box\",\n \"text-box-check\",\n \"text-box-check-outline\",\n \"text-box-edit\",\n \"text-box-edit-outline\",\n \"text-box-minus\",\n \"text-box-minus-outline\",\n \"text-box-multiple\",\n \"text-box-multiple-outline\",\n \"text-box-outline\",\n \"text-box-plus\",\n \"text-box-plus-outline\",\n \"text-box-remove\",\n \"text-box-remove-outline\",\n \"text-box-search\",\n \"text-box-search-outline\",\n \"text-long\",\n \"text-recognition\",\n \"text-search\",\n \"text-search-variant\",\n \"text-shadow\",\n \"text-short\",\n \"texture\",\n \"texture-box\",\n \"theater\",\n \"theme-light-dark\",\n \"thermometer\",\n \"thermometer-alert\",\n \"thermometer-auto\",\n \"thermometer-bluetooth\",\n \"thermometer-check\",\n \"thermometer-chevron-down\",\n \"thermometer-chevron-up\",\n \"thermometer-high\",\n \"thermometer-lines\",\n \"thermometer-low\",\n \"thermometer-minus\",\n \"thermometer-off\",\n \"thermometer-plus\",\n \"thermometer-probe\",\n \"thermometer-probe-off\",\n \"thermometer-water\",\n \"thermostat\",\n \"thermostat-auto\",\n \"thermostat-box\",\n \"thermostat-box-auto\",\n \"thermostat-cog\",\n \"thought-bubble\",\n \"thought-bubble-outline\",\n \"thumb-down\",\n \"thumb-down-outline\",\n \"thumb-up\",\n \"thumb-up-outline\",\n \"thumbs-up-down\",\n \"thumbs-up-down-outline\",\n \"ticket\",\n \"ticket-account\",\n \"ticket-confirmation\",\n \"ticket-confirmation-outline\",\n \"ticket-outline\",\n \"ticket-percent\",\n \"ticket-percent-outline\",\n \"tie\",\n \"tilde\",\n \"tilde-off\",\n \"timelapse\",\n \"timeline\",\n \"timeline-alert\",\n \"timeline-alert-outline\",\n \"timeline-check\",\n \"timeline-check-outline\",\n \"timeline-clock\",\n \"timeline-clock-outline\",\n \"timeline-minus\",\n \"timeline-minus-outline\",\n \"timeline-outline\",\n \"timeline-plus\",\n \"timeline-plus-outline\",\n \"timeline-question\",\n \"timeline-question-outline\",\n \"timeline-remove\",\n \"timeline-remove-outline\",\n \"timeline-text\",\n \"timeline-text-outline\",\n \"timer\",\n \"timer-10\",\n \"timer-3\",\n \"timer-alert\",\n \"timer-alert-outline\",\n \"timer-cancel\",\n \"timer-cancel-outline\",\n \"timer-check\",\n \"timer-check-outline\",\n \"timer-cog\",\n \"timer-cog-outline\",\n \"timer-edit\",\n \"timer-edit-outline\",\n \"timer-lock\",\n \"timer-lock-open\",\n \"timer-lock-open-outline\",\n \"timer-lock-outline\",\n \"timer-marker\",\n \"timer-marker-outline\",\n \"timer-minus\",\n \"timer-minus-outline\",\n \"timer-music\",\n \"timer-music-outline\",\n \"timer-off\",\n \"timer-off-outline\",\n \"timer-outline\",\n \"timer-pause\",\n \"timer-pause-outline\",\n \"timer-play\",\n \"timer-play-outline\",\n \"timer-plus\",\n \"timer-plus-outline\",\n \"timer-refresh\",\n \"timer-refresh-outline\",\n \"timer-remove\",\n \"timer-remove-outline\",\n \"timer-sand\",\n \"timer-sand-complete\",\n \"timer-sand-empty\",\n \"timer-sand-full\",\n \"timer-sand-paused\",\n \"timer-settings\",\n \"timer-settings-outline\",\n \"timer-star\",\n \"timer-star-outline\",\n \"timer-stop\",\n \"timer-stop-outline\",\n \"timer-sync\",\n \"timer-sync-outline\",\n \"timetable\",\n \"tire\",\n \"toaster\",\n \"toaster-off\",\n \"toaster-oven\",\n \"toggle-switch\",\n \"toggle-switch-off\",\n \"toggle-switch-off-outline\",\n \"toggle-switch-outline\",\n \"toggle-switch-variant\",\n \"toggle-switch-variant-off\",\n \"toilet\",\n \"toolbox\",\n \"toolbox-outline\",\n \"tools\",\n \"tooltip\",\n \"tooltip-account\",\n \"tooltip-cellphone\",\n \"tooltip-check\",\n \"tooltip-check-outline\",\n \"tooltip-edit\",\n \"tooltip-edit-outline\",\n \"tooltip-image\",\n \"tooltip-image-outline\",\n \"tooltip-minus\",\n \"tooltip-minus-outline\",\n \"tooltip-outline\",\n \"tooltip-plus\",\n \"tooltip-plus-outline\",\n \"tooltip-question\",\n \"tooltip-question-outline\",\n \"tooltip-remove\",\n \"tooltip-remove-outline\",\n \"tooltip-text\",\n \"tooltip-text-outline\",\n \"tooth\",\n \"tooth-outline\",\n \"toothbrush\",\n \"toothbrush-electric\",\n \"toothbrush-paste\",\n \"torch\",\n \"tortoise\",\n \"toslink\",\n \"touch-text-outline\",\n \"tournament\",\n \"tow-truck\",\n \"tower-beach\",\n \"tower-fire\",\n \"town-hall\",\n \"toy-brick\",\n \"toy-brick-marker\",\n \"toy-brick-marker-outline\",\n \"toy-brick-minus\",\n \"toy-brick-minus-outline\",\n \"toy-brick-outline\",\n \"toy-brick-plus\",\n \"toy-brick-plus-outline\",\n \"toy-brick-remove\",\n \"toy-brick-remove-outline\",\n \"toy-brick-search\",\n \"toy-brick-search-outline\",\n \"track-light\",\n \"track-light-off\",\n \"trackpad\",\n \"trackpad-lock\",\n \"tractor\",\n \"tractor-variant\",\n \"trademark\",\n \"traffic-cone\",\n \"traffic-light\",\n \"traffic-light-outline\",\n \"train\",\n \"train-bus\",\n \"train-car\",\n \"train-car-autorack\",\n \"train-car-box\",\n \"train-car-box-full\",\n \"train-car-box-open\",\n \"train-car-caboose\",\n \"train-car-centerbeam\",\n \"train-car-centerbeam-full\",\n \"train-car-container\",\n \"train-car-flatbed\",\n \"train-car-flatbed-car\",\n \"train-car-flatbed-tank\",\n \"train-car-gondola\",\n \"train-car-gondola-full\",\n \"train-car-hopper\",\n \"train-car-hopper-covered\",\n \"train-car-hopper-full\",\n \"train-car-intermodal\",\n \"train-car-passenger\",\n \"train-car-passenger-door\",\n \"train-car-passenger-door-open\",\n \"train-car-passenger-variant\",\n \"train-car-tank\",\n \"train-variant\",\n \"tram\",\n \"tram-side\",\n \"transcribe\",\n \"transcribe-close\",\n \"transfer\",\n \"transfer-down\",\n \"transfer-left\",\n \"transfer-right\",\n \"transfer-up\",\n \"transit-connection\",\n \"transit-connection-horizontal\",\n \"transit-connection-variant\",\n \"transit-detour\",\n \"transit-skip\",\n \"transit-transfer\",\n \"transition\",\n \"transition-masked\",\n \"translate\",\n \"translate-off\",\n \"translate-variant\",\n \"transmission-tower\",\n \"transmission-tower-export\",\n \"transmission-tower-import\",\n \"transmission-tower-off\",\n \"trash-can\",\n \"trash-can-outline\",\n \"tray\",\n \"tray-alert\",\n \"tray-arrow-down\",\n \"tray-arrow-up\",\n \"tray-full\",\n \"tray-minus\",\n \"tray-plus\",\n \"tray-remove\",\n \"treasure-chest\",\n \"treasure-chest-outline\",\n \"tree\",\n \"tree-outline\",\n \"trello\",\n \"trending-down\",\n \"trending-neutral\",\n \"trending-up\",\n \"triangle\",\n \"triangle-down\",\n \"triangle-down-outline\",\n \"triangle-outline\",\n \"triangle-small-down\",\n \"triangle-small-up\",\n \"triangle-wave\",\n \"triforce\",\n \"trophy\",\n \"trophy-award\",\n \"trophy-broken\",\n \"trophy-outline\",\n \"trophy-variant\",\n \"trophy-variant-outline\",\n \"truck\",\n \"truck-alert\",\n \"truck-alert-outline\",\n \"truck-cargo-container\",\n \"truck-check\",\n \"truck-check-outline\",\n \"truck-delivery\",\n \"truck-delivery-outline\",\n \"truck-fast\",\n \"truck-fast-outline\",\n \"truck-flatbed\",\n \"truck-minus\",\n \"truck-minus-outline\",\n \"truck-off-road\",\n \"truck-off-road-off\",\n \"truck-outline\",\n \"truck-plus\",\n \"truck-plus-outline\",\n \"truck-remove\",\n \"truck-remove-outline\",\n \"truck-snowflake\",\n \"truck-trailer\",\n \"trumpet\",\n \"tshirt-crew\",\n \"tshirt-crew-outline\",\n \"tshirt-v\",\n \"tshirt-v-outline\",\n \"tsunami\",\n \"tumble-dryer\",\n \"tumble-dryer-alert\",\n \"tumble-dryer-off\",\n \"tune\",\n \"tune-variant\",\n \"tune-vertical\",\n \"tune-vertical-variant\",\n \"tunnel\",\n \"tunnel-outline\",\n \"turbine\",\n \"turkey\",\n \"turnstile\",\n \"turnstile-outline\",\n \"turtle\",\n \"twitch\",\n \"twitter\",\n \"two-factor-authentication\",\n \"typewriter\",\n \"ubisoft\",\n \"ubuntu\",\n \"ufo\",\n \"ufo-outline\",\n \"ultra-high-definition\",\n \"umbraco\",\n \"umbrella\",\n \"umbrella-beach\",\n \"umbrella-beach-outline\",\n \"umbrella-closed\",\n \"umbrella-closed-outline\",\n \"umbrella-closed-variant\",\n \"umbrella-outline\",\n \"underwear-outline\",\n \"undo\",\n \"undo-variant\",\n \"unfold-less-horizontal\",\n \"unfold-less-vertical\",\n \"unfold-more-horizontal\",\n \"unfold-more-vertical\",\n \"ungroup\",\n \"unicode\",\n \"unicorn\",\n \"unicorn-variant\",\n \"unicycle\",\n \"unity\",\n \"unreal\",\n \"update\",\n \"upload\",\n \"upload-box\",\n \"upload-box-outline\",\n \"upload-circle\",\n \"upload-circle-outline\",\n \"upload-lock\",\n \"upload-lock-outline\",\n \"upload-multiple\",\n \"upload-multiple-outline\",\n \"upload-network\",\n \"upload-network-outline\",\n \"upload-off\",\n \"upload-off-outline\",\n \"upload-outline\",\n \"usb\",\n \"usb-c-port\",\n \"usb-flash-drive\",\n \"usb-flash-drive-outline\",\n \"usb-port\",\n \"vacuum\",\n \"vacuum-outline\",\n \"valve\",\n \"valve-closed\",\n \"valve-open\",\n \"van-passenger\",\n \"van-utility\",\n \"vanish\",\n \"vanish-quarter\",\n \"vanity-light\",\n \"variable\",\n \"variable-box\",\n \"vector-arrange-above\",\n \"vector-arrange-below\",\n \"vector-bezier\",\n \"vector-circle\",\n \"vector-circle-variant\",\n \"vector-combine\",\n \"vector-curve\",\n \"vector-difference\",\n \"vector-difference-ab\",\n \"vector-difference-ba\",\n \"vector-ellipse\",\n \"vector-intersection\",\n \"vector-line\",\n \"vector-link\",\n \"vector-point\",\n \"vector-point-edit\",\n \"vector-point-minus\",\n \"vector-point-plus\",\n \"vector-point-select\",\n \"vector-polygon\",\n \"vector-polygon-variant\",\n \"vector-polyline\",\n \"vector-polyline-edit\",\n \"vector-polyline-minus\",\n \"vector-polyline-plus\",\n \"vector-polyline-remove\",\n \"vector-radius\",\n \"vector-rectangle\",\n \"vector-selection\",\n \"vector-square\",\n \"vector-square-close\",\n \"vector-square-edit\",\n \"vector-square-minus\",\n \"vector-square-open\",\n \"vector-square-plus\",\n \"vector-square-remove\",\n \"vector-triangle\",\n \"vector-union\",\n \"vhs\",\n \"vibrate\",\n \"vibrate-off\",\n \"video\",\n \"video-2d\",\n \"video-3d\",\n \"video-3d-off\",\n \"video-3d-variant\",\n \"video-4k-box\",\n \"video-account\",\n \"video-box\",\n \"video-box-off\",\n \"video-check\",\n \"video-check-outline\",\n \"video-high-definition\",\n \"video-image\",\n \"video-input-antenna\",\n \"video-input-component\",\n \"video-input-hdmi\",\n \"video-input-scart\",\n \"video-input-svideo\",\n \"video-marker\",\n \"video-marker-outline\",\n \"video-minus\",\n \"video-minus-outline\",\n \"video-off\",\n \"video-off-outline\",\n \"video-outline\",\n \"video-plus\",\n \"video-plus-outline\",\n \"video-stabilization\",\n \"video-standard-definition\",\n \"video-switch\",\n \"video-switch-outline\",\n \"video-vintage\",\n \"video-wireless\",\n \"video-wireless-outline\",\n \"view-agenda\",\n \"view-agenda-outline\",\n \"view-array\",\n \"view-array-outline\",\n \"view-carousel\",\n \"view-carousel-outline\",\n \"view-column\",\n \"view-column-outline\",\n \"view-comfy\",\n \"view-comfy-outline\",\n \"view-compact\",\n \"view-compact-outline\",\n \"view-dashboard\",\n \"view-dashboard-edit\",\n \"view-dashboard-edit-outline\",\n \"view-dashboard-outline\",\n \"view-dashboard-variant\",\n \"view-dashboard-variant-outline\",\n \"view-day\",\n \"view-day-outline\",\n \"view-gallery\",\n \"view-gallery-outline\",\n \"view-grid\",\n \"view-grid-compact\",\n \"view-grid-outline\",\n \"view-grid-plus\",\n \"view-grid-plus-outline\",\n \"view-headline\",\n \"view-list\",\n \"view-list-outline\",\n \"view-module\",\n \"view-module-outline\",\n \"view-parallel\",\n \"view-parallel-outline\",\n \"view-quilt\",\n \"view-quilt-outline\",\n \"view-sequential\",\n \"view-sequential-outline\",\n \"view-split-horizontal\",\n \"view-split-vertical\",\n \"view-stream\",\n \"view-stream-outline\",\n \"view-week\",\n \"view-week-outline\",\n \"vimeo\",\n \"violin\",\n \"virtual-reality\",\n \"virus\",\n \"virus-off\",\n \"virus-off-outline\",\n \"virus-outline\",\n \"vlc\",\n \"voicemail\",\n \"volcano\",\n \"volcano-outline\",\n \"volleyball\",\n \"volume-equal\",\n \"volume-high\",\n \"volume-low\",\n \"volume-medium\",\n \"volume-minus\",\n \"volume-mute\",\n \"volume-off\",\n \"volume-plus\",\n \"volume-source\",\n \"volume-variant-off\",\n \"volume-vibrate\",\n \"vote\",\n \"vote-outline\",\n \"vpn\",\n \"vuejs\",\n \"vuetify\",\n \"walk\",\n \"wall\",\n \"wall-fire\",\n \"wall-sconce\",\n \"wall-sconce-flat\",\n \"wall-sconce-flat-outline\",\n \"wall-sconce-flat-variant\",\n \"wall-sconce-flat-variant-outline\",\n \"wall-sconce-outline\",\n \"wall-sconce-round\",\n \"wall-sconce-round-outline\",\n \"wall-sconce-round-variant\",\n \"wall-sconce-round-variant-outline\",\n \"wallet\",\n \"wallet-bifold\",\n \"wallet-bifold-outline\",\n \"wallet-giftcard\",\n \"wallet-membership\",\n \"wallet-outline\",\n \"wallet-plus\",\n \"wallet-plus-outline\",\n \"wallet-travel\",\n \"wallpaper\",\n \"wan\",\n \"wardrobe\",\n \"wardrobe-outline\",\n \"warehouse\",\n \"washing-machine\",\n \"washing-machine-alert\",\n \"washing-machine-off\",\n \"watch\",\n \"watch-export\",\n \"watch-export-variant\",\n \"watch-import\",\n \"watch-import-variant\",\n \"watch-variant\",\n \"watch-vibrate\",\n \"watch-vibrate-off\",\n \"water\",\n \"water-alert\",\n \"water-alert-outline\",\n \"water-boiler\",\n \"water-boiler-alert\",\n \"water-boiler-auto\",\n \"water-boiler-off\",\n \"water-check\",\n \"water-check-outline\",\n \"water-circle\",\n \"water-minus\",\n \"water-minus-outline\",\n \"water-off\",\n \"water-off-outline\",\n \"water-opacity\",\n \"water-outline\",\n \"water-percent\",\n \"water-percent-alert\",\n \"water-plus\",\n \"water-plus-outline\",\n \"water-polo\",\n \"water-pump\",\n \"water-pump-off\",\n \"water-remove\",\n \"water-remove-outline\",\n \"water-sync\",\n \"water-thermometer\",\n \"water-thermometer-outline\",\n \"water-well\",\n \"water-well-outline\",\n \"waterfall\",\n \"watering-can\",\n \"watering-can-outline\",\n \"watermark\",\n \"wave\",\n \"wave-arrow-down\",\n \"wave-arrow-up\",\n \"wave-undercurrent\",\n \"waveform\",\n \"waves\",\n \"waves-arrow-left\",\n \"waves-arrow-right\",\n \"waves-arrow-up\",\n \"waze\",\n \"weather-cloudy\",\n \"weather-cloudy-alert\",\n \"weather-cloudy-arrow-right\",\n \"weather-cloudy-clock\",\n \"weather-dust\",\n \"weather-fog\",\n \"weather-hail\",\n \"weather-hazy\",\n \"weather-hurricane\",\n \"weather-hurricane-outline\",\n \"weather-lightning\",\n \"weather-lightning-rainy\",\n \"weather-moonset\",\n \"weather-moonset-down\",\n \"weather-moonset-up\",\n \"weather-night\",\n \"weather-night-partly-cloudy\",\n \"weather-partly-cloudy\",\n \"weather-partly-lightning\",\n \"weather-partly-rainy\",\n \"weather-partly-snowy\",\n \"weather-partly-snowy-rainy\",\n \"weather-pouring\",\n \"weather-rainy\",\n \"weather-snowy\",\n \"weather-snowy-heavy\",\n \"weather-snowy-rainy\",\n \"weather-sunny\",\n \"weather-sunny-alert\",\n \"weather-sunny-off\",\n \"weather-sunset\",\n \"weather-sunset-down\",\n \"weather-sunset-up\",\n \"weather-tornado\",\n \"weather-windy\",\n \"weather-windy-variant\",\n \"web\",\n \"web-box\",\n \"web-cancel\",\n \"web-check\",\n \"web-clock\",\n \"web-minus\",\n \"web-off\",\n \"web-plus\",\n \"web-refresh\",\n \"web-remove\",\n \"web-sync\",\n \"webcam\",\n \"webcam-off\",\n \"webhook\",\n \"webpack\",\n \"webrtc\",\n \"wechat\",\n \"weight\",\n \"weight-gram\",\n \"weight-kilogram\",\n \"weight-lifter\",\n \"weight-pound\",\n \"whatsapp\",\n \"wheel-barrow\",\n \"wheelchair\",\n \"wheelchair-accessibility\",\n \"whistle\",\n \"whistle-outline\",\n \"white-balance-auto\",\n \"white-balance-incandescent\",\n \"white-balance-iridescent\",\n \"white-balance-sunny\",\n \"widgets\",\n \"widgets-outline\",\n \"wifi\",\n \"wifi-alert\",\n \"wifi-arrow-down\",\n \"wifi-arrow-left\",\n \"wifi-arrow-left-right\",\n \"wifi-arrow-right\",\n \"wifi-arrow-up\",\n \"wifi-arrow-up-down\",\n \"wifi-cancel\",\n \"wifi-check\",\n \"wifi-cog\",\n \"wifi-lock\",\n \"wifi-lock-open\",\n \"wifi-marker\",\n \"wifi-minus\",\n \"wifi-off\",\n \"wifi-plus\",\n \"wifi-refresh\",\n \"wifi-remove\",\n \"wifi-settings\",\n \"wifi-star\",\n \"wifi-strength-1\",\n \"wifi-strength-1-alert\",\n \"wifi-strength-1-lock\",\n \"wifi-strength-1-lock-open\",\n \"wifi-strength-2\",\n \"wifi-strength-2-alert\",\n \"wifi-strength-2-lock\",\n \"wifi-strength-2-lock-open\",\n \"wifi-strength-3\",\n \"wifi-strength-3-alert\",\n \"wifi-strength-3-lock\",\n \"wifi-strength-3-lock-open\",\n \"wifi-strength-4\",\n \"wifi-strength-4-alert\",\n \"wifi-strength-4-lock\",\n \"wifi-strength-4-lock-open\",\n \"wifi-strength-alert-outline\",\n \"wifi-strength-lock-open-outline\",\n \"wifi-strength-lock-outline\",\n \"wifi-strength-off\",\n \"wifi-strength-off-outline\",\n \"wifi-strength-outline\",\n \"wifi-sync\",\n \"wikipedia\",\n \"wind-power\",\n \"wind-power-outline\",\n \"wind-turbine\",\n \"wind-turbine-alert\",\n \"wind-turbine-check\",\n \"window-close\",\n \"window-closed\",\n \"window-closed-variant\",\n \"window-maximize\",\n \"window-minimize\",\n \"window-open\",\n \"window-open-variant\",\n \"window-restore\",\n \"window-shutter\",\n \"window-shutter-alert\",\n \"window-shutter-auto\",\n \"window-shutter-cog\",\n \"window-shutter-open\",\n \"window-shutter-settings\",\n \"windsock\",\n \"wiper\",\n \"wiper-wash\",\n \"wiper-wash-alert\",\n \"wizard-hat\",\n \"wordpress\",\n \"wrap\",\n \"wrap-disabled\",\n \"wrench\",\n \"wrench-check\",\n \"wrench-check-outline\",\n \"wrench-clock\",\n \"wrench-clock-outline\",\n \"wrench-cog\",\n \"wrench-cog-outline\",\n \"wrench-outline\",\n \"xamarin\",\n \"xml\",\n \"xmpp\",\n \"yahoo\",\n \"yeast\",\n \"yin-yang\",\n \"yoga\",\n \"youtube\",\n \"youtube-gaming\",\n \"youtube-studio\",\n \"youtube-subscription\",\n \"youtube-tv\",\n \"yurt\",\n \"z-wave\",\n \"zend\",\n \"zigbee\",\n \"zip-box\",\n \"zip-box-outline\",\n \"zip-disk\",\n \"zodiac-aquarius\",\n \"zodiac-aries\",\n \"zodiac-cancer\",\n \"zodiac-capricorn\",\n \"zodiac-gemini\",\n \"zodiac-leo\",\n \"zodiac-libra\",\n \"zodiac-pisces\",\n \"zodiac-sagittarius\",\n \"zodiac-scorpio\",\n \"zodiac-taurus\",\n \"zodiac-virgo\"\n ]\n}","/**\n * Get Types Tool\n *\n * Returns TypeScript type definitions for Idealyst components, theme, and navigation.\n * Enhanced with @idealyst/tooling registry data for authoritative prop values.\n *\n * Types are generated dynamically at runtime using @idealyst/tooling if the\n * pre-generated types.json file is not found.\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { fileURLToPath } from 'url';\nimport { analyzeComponents, analyzeTheme } from '@idealyst/tooling';\nimport type { ComponentRegistry, ThemeValues } from '@idealyst/tooling';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\ninterface TypesData {\n version: string;\n extractedAt: string;\n components: Record<string, any>;\n theme: Record<string, any>;\n navigation: Record<string, any>;\n // Registry data from @idealyst/tooling (single source of truth)\n registry?: {\n components: Record<string, any>;\n themeValues: any;\n };\n}\n\nlet cachedTypes: TypesData | null = null;\n\n/**\n * Find the monorepo root by looking for package.json with workspaces\n */\nfunction findMonorepoRoot(): string | null {\n // Start from the mcp-server package location\n let currentDir = path.resolve(__dirname, '../..');\n\n // Walk up looking for the monorepo root (has workspaces in package.json)\n for (let i = 0; i < 10; i++) {\n const packageJsonPath = path.join(currentDir, 'package.json');\n if (fs.existsSync(packageJsonPath)) {\n try {\n const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));\n if (pkg.workspaces) {\n return currentDir;\n }\n } catch {\n // Continue searching\n }\n }\n const parentDir = path.dirname(currentDir);\n if (parentDir === currentDir) break;\n currentDir = parentDir;\n }\n\n return null;\n}\n\n/**\n * Find package paths - works with both symlinked monorepo and installed packages\n */\nfunction findPackagePaths(): { componentsPath: string; themePath: string } | null {\n // First try: resolve via node_modules (works for symlinked monorepo)\n try {\n const componentsEntry = require.resolve('@idealyst/components');\n const themeEntry = require.resolve('@idealyst/theme');\n\n // Get the src directories\n const componentsPath = path.join(path.dirname(componentsEntry), '..', 'src');\n const themePath = path.join(path.dirname(themeEntry), '..', 'src', 'lightTheme.ts');\n\n if (fs.existsSync(componentsPath) && fs.existsSync(themePath)) {\n return { componentsPath, themePath };\n }\n } catch {\n // Not found via require.resolve\n }\n\n // Second try: look for monorepo structure\n const monorepoRoot = findMonorepoRoot();\n if (monorepoRoot) {\n const componentsPath = path.join(monorepoRoot, 'packages/components/src');\n const themePath = path.join(monorepoRoot, 'packages/theme/src/lightTheme.ts');\n\n if (fs.existsSync(componentsPath) && fs.existsSync(themePath)) {\n return { componentsPath, themePath };\n }\n }\n\n return null;\n}\n\n/**\n * Generate types dynamically using @idealyst/tooling\n */\nfunction generateTypes(): TypesData {\n const paths = findPackagePaths();\n\n if (!paths) {\n throw new Error(\n 'Could not find @idealyst/components and @idealyst/theme packages. ' +\n 'Ensure you are running in the Idealyst monorepo or have the packages installed.'\n );\n }\n\n const { componentsPath, themePath } = paths;\n\n // Analyze components using @idealyst/tooling\n let componentRegistry: ComponentRegistry = {};\n let themeValues: ThemeValues | null = null;\n\n try {\n componentRegistry = analyzeComponents({\n componentPaths: [componentsPath],\n themePath,\n });\n } catch (error) {\n console.warn('[mcp-server] Warning: Could not analyze components:', error);\n }\n\n try {\n themeValues = analyzeTheme(themePath, false);\n } catch (error) {\n console.warn('[mcp-server] Warning: Could not analyze theme:', error);\n }\n\n // Convert component registry to the expected format\n const components: Record<string, any> = {};\n for (const [name, def] of Object.entries(componentRegistry)) {\n components[name] = {\n propsInterface: `${name}Props`,\n props: Object.entries(def.props).map(([propName, prop]) => ({\n name: propName,\n type: prop.type,\n required: prop.required,\n description: prop.description,\n values: prop.values,\n default: prop.default,\n })),\n typeDefinition: '', // Not available without ts-morph\n relatedTypes: {},\n registry: def,\n };\n }\n\n // Build theme types from themeValues\n const theme: Record<string, any> = {};\n if (themeValues) {\n theme.Intent = {\n name: 'Intent',\n definition: `type Intent = ${themeValues.intents.map((i) => `'${i}'`).join(' | ')};`,\n values: themeValues.intents,\n };\n\n // Extract size keys from the first size group\n const sizeKeys = Object.keys(themeValues.sizes)[0]\n ? Object.keys(themeValues.sizes[Object.keys(themeValues.sizes)[0]])\n : ['xs', 'sm', 'md', 'lg', 'xl'];\n theme.Size = {\n name: 'Size',\n definition: `type Size = ${sizeKeys.map((s) => `'${s}'`).join(' | ')};`,\n values: sizeKeys,\n };\n }\n\n return {\n version: 'dynamic',\n extractedAt: new Date().toISOString(),\n components,\n theme,\n navigation: {}, // Navigation types require ts-morph, not available dynamically\n registry: {\n components: componentRegistry,\n themeValues,\n },\n };\n}\n\n/**\n * Load types from JSON file or generate dynamically\n */\nfunction loadTypes(): TypesData {\n if (cachedTypes) {\n return cachedTypes;\n }\n\n // Try to load pre-generated types first\n const typesPath = path.join(__dirname, '../generated/types.json');\n\n if (fs.existsSync(typesPath)) {\n try {\n const content = fs.readFileSync(typesPath, 'utf-8');\n cachedTypes = JSON.parse(content);\n return cachedTypes!;\n } catch (error) {\n console.warn('[mcp-server] Warning: Could not parse types.json, generating dynamically');\n }\n }\n\n // Generate types dynamically\n cachedTypes = generateTypes();\n return cachedTypes;\n}\n\n/**\n * Find the canonical component name from types data (case-insensitive)\n */\nfunction findComponentNameInTypes(types: TypesData, componentName: string): string | undefined {\n // Direct match first (fast path)\n if (types.components[componentName]) {\n return componentName;\n }\n\n // Case-insensitive lookup\n const lowerName = componentName.toLowerCase();\n return Object.keys(types.components).find(\n (name) => name.toLowerCase() === lowerName\n );\n}\n\n/**\n * Get component types by name (case-insensitive)\n */\nexport function getComponentTypes(componentName: string, format: 'typescript' | 'json' | 'both' = 'both') {\n const types = loadTypes();\n const canonicalName = findComponentNameInTypes(types, componentName);\n\n if (!canonicalName) {\n throw new Error(\n `Component \"${componentName}\" not found. Available components: ${Object.keys(types.components).join(', ')}`\n );\n }\n\n const component = types.components[canonicalName];\n\n const result: any = {\n component: canonicalName,\n };\n\n if (format === 'typescript' || format === 'both') {\n result.typescript = formatTypeScriptOutput(component);\n }\n\n if (format === 'json' || format === 'both') {\n result.schema = {\n propsInterface: component.propsInterface,\n props: component.props,\n relatedTypes: component.relatedTypes,\n };\n\n // Include registry data if available (authoritative prop values)\n if (component.registry) {\n result.registry = component.registry;\n }\n }\n\n return result;\n}\n\n/**\n * Get theme types\n */\nexport function getThemeTypes(format: 'typescript' | 'json' | 'both' = 'both') {\n const types = loadTypes();\n\n const result: any = {\n name: 'Theme Types',\n };\n\n if (format === 'typescript' || format === 'both') {\n const tsOutput = Object.entries(types.theme)\n .map(([_, info]: [string, any]) => info.definition)\n .join('\\n\\n');\n result.typescript = tsOutput;\n }\n\n if (format === 'json' || format === 'both') {\n result.schema = types.theme;\n\n // Include authoritative theme values from registry if available\n if (types.registry?.themeValues) {\n result.themeValues = types.registry.themeValues;\n }\n }\n\n return result;\n}\n\n/**\n * Get navigation types\n */\nexport function getNavigationTypes(format: 'typescript' | 'json' | 'both' = 'both') {\n const types = loadTypes();\n\n const result: any = {\n name: 'Navigation Types',\n };\n\n if (format === 'typescript' || format === 'both') {\n const tsOutput = Object.entries(types.navigation)\n .map(([_, definition]) => definition)\n .join('\\n\\n');\n result.typescript = tsOutput;\n }\n\n if (format === 'json' || format === 'both') {\n result.schema = types.navigation;\n }\n\n return result;\n}\n\n/**\n * Format TypeScript output for better readability\n */\nfunction formatTypeScriptOutput(component: any): string {\n const sections: string[] = [];\n\n // Main props interface\n sections.push(`// ${component.propsInterface}`);\n sections.push(component.typeDefinition);\n\n // Related types\n if (Object.keys(component.relatedTypes).length > 0) {\n sections.push('\\n// Related Types');\n for (const [_, definition] of Object.entries(component.relatedTypes)) {\n sections.push(definition as string);\n }\n }\n\n return sections.join('\\n\\n');\n}\n\n/**\n * Get list of all available components\n */\nexport function getAvailableComponents() {\n const types = loadTypes();\n return Object.keys(types.components);\n}\n\n/**\n * Find the correct example file name (case-insensitive)\n */\nfunction findExampleFile(componentName: string): string | null {\n const examplesDir = path.join(__dirname, '../../examples/components');\n\n // Direct match first (fast path)\n const directPath = path.join(examplesDir, `${componentName}.examples.tsx`);\n if (fs.existsSync(directPath)) {\n return directPath;\n }\n\n // Case-insensitive lookup\n if (!fs.existsSync(examplesDir)) {\n return null;\n }\n\n const lowerName = componentName.toLowerCase();\n const files = fs.readdirSync(examplesDir);\n const match = files.find(\n (file) => file.toLowerCase() === `${lowerName}.examples.tsx`\n );\n\n return match ? path.join(examplesDir, match) : null;\n}\n\n/**\n * Get examples for a component (case-insensitive)\n */\nexport function getComponentExamples(componentName: string): string | null {\n const examplesPath = findExampleFile(componentName);\n\n if (!examplesPath) {\n return null;\n }\n\n return fs.readFileSync(examplesPath, 'utf-8');\n}\n\n/**\n * Get the full component registry from @idealyst/tooling\n * This is the single source of truth for component props and values\n */\nexport function getComponentRegistry() {\n const types = loadTypes();\n return types.registry?.components || {};\n}\n\n/**\n * Get theme values from the registry\n * This is the single source of truth for available intents, sizes, etc.\n */\nexport function getRegistryThemeValues() {\n const types = loadTypes();\n return types.registry?.themeValues || null;\n}\n","/**\n * Tool Handlers\n *\n * Implementation functions for all MCP tools.\n * These handlers can be used directly or through an MCP server.\n *\n * Component documentation now uses:\n * - Types: Dynamically loaded from @idealyst/tooling via generated/types.json\n * - Examples: Type-checked .examples.tsx files in examples/components/\n * - Metadata: Minimal static metadata (category, description, features, best practices)\n */\n\nimport {\n componentMetadata,\n getComponentMetadata,\n getComponentNames,\n searchComponents as searchComponentsData,\n getComponentsByCategory,\n findComponentName,\n} from \"../data/component-metadata.js\";\nimport { cliCommands } from \"../data/cli-commands.js\";\nimport { translateGuides } from \"../data/translate-guides.js\";\nimport { storageGuides } from \"../data/storage-guides.js\";\nimport {\n packages,\n getPackageSummary,\n getPackagesByCategory as getPackagesByCat,\n searchPackages as searchPackagesData,\n} from \"../data/packages.js\";\nimport {\n recipes,\n getRecipeSummary,\n getRecipesByCategory,\n searchRecipes as searchRecipesData,\n} from \"../data/recipes.js\";\nimport {\n installGuides,\n getInstallGuide as getInstallGuideData,\n formatInstallGuideMarkdown,\n} from \"../data/install-guides.js\";\nimport iconsData from \"../data/icons.json\" with { type: \"json\" };\nimport {\n getComponentTypes as getTypesFromFile,\n getThemeTypes as getThemeTypesFromFile,\n getNavigationTypes as getNavigationTypesFromFile,\n getAvailableComponents,\n getComponentExamples as getComponentExamplesFromFile,\n} from \"./get-types.js\";\nimport type {\n ToolResponse,\n ListComponentsArgs,\n GetComponentDocsArgs,\n GetComponentExampleArgs,\n SearchComponentsArgs,\n GetComponentTypesArgs,\n GetComponentExamplesTsArgs,\n GetCliUsageArgs,\n SearchIconsArgs,\n GetThemeTypesArgs,\n GetNavigationTypesArgs,\n GetTranslateGuideArgs,\n GetStorageGuideArgs,\n ListPackagesArgs,\n GetPackageDocsArgs,\n SearchPackagesArgs,\n ListRecipesArgs,\n GetRecipeArgs,\n SearchRecipesArgs,\n GetInstallGuideArgs,\n} from \"./types.js\";\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Create a standard tool response with text content\n */\nfunction textResponse(text: string): ToolResponse {\n return {\n content: [{ type: \"text\", text }],\n };\n}\n\n/**\n * Create a JSON response\n */\nfunction jsonResponse(data: unknown): ToolResponse {\n return textResponse(JSON.stringify(data, null, 2));\n}\n\n// ============================================================================\n// Component Tool Handlers\n// ============================================================================\n\n/**\n * List all available Idealyst components with brief descriptions\n */\nexport function listComponents(_args: ListComponentsArgs = {}): ToolResponse {\n const componentList = getComponentNames().map((name) => {\n const meta = getComponentMetadata(name);\n return {\n name,\n category: meta?.category || \"unknown\",\n description: meta?.description || \"\",\n };\n });\n\n return jsonResponse(componentList);\n}\n\n/**\n * Get detailed documentation for a specific component\n *\n * Returns:\n * - Description and category from metadata\n * - TypeScript props from dynamic types\n * - Features and best practices from metadata\n * - Type-checked examples from .examples.tsx files\n */\nexport function getComponentDocs(args: GetComponentDocsArgs): ToolResponse {\n const inputName = args.component;\n const canonicalName = findComponentName(inputName);\n\n if (!canonicalName) {\n return textResponse(\n `Component \"${inputName}\" not found. Available components: ${getComponentNames().join(\", \")}`\n );\n }\n\n const meta = getComponentMetadata(canonicalName)!;\n\n // Get TypeScript types for props documentation\n let propsSection = \"\";\n try {\n const types = getTypesFromFile(canonicalName, \"typescript\");\n propsSection = `## Props (TypeScript)\n\n\\`\\`\\`typescript\n${types.typescript}\n\\`\\`\\``;\n } catch {\n propsSection = \"## Props\\n\\n_Types not available. Run `yarn extract-types` to generate._\";\n }\n\n // Get type-checked examples\n let examplesSection = \"\";\n const examples = getComponentExamplesFromFile(canonicalName);\n if (examples) {\n examplesSection = `## Examples\n\n\\`\\`\\`tsx\n${examples}\n\\`\\`\\``;\n }\n\n const docs = `# ${canonicalName}\n\n${meta.description}\n\n## Category\n${meta.category}\n\n${propsSection}\n\n## Features\n${meta.features.map((f) => `- ${f}`).join(\"\\n\")}\n\n## Best Practices\n${meta.bestPractices.map((bp) => `- ${bp}`).join(\"\\n\")}\n\n${examplesSection}\n`;\n\n return textResponse(docs);\n}\n\n/**\n * Get a code example for a specific component\n *\n * Returns the type-checked example file content.\n * The example_type parameter is kept for API compatibility but all examples\n * are now in a single .examples.tsx file.\n */\nexport function getComponentExample(args: GetComponentExampleArgs): ToolResponse {\n const inputName = args.component;\n const canonicalName = findComponentName(inputName);\n\n if (!canonicalName) {\n return textResponse(`Component \"${inputName}\" not found.`);\n }\n\n const examples = getComponentExamplesFromFile(canonicalName);\n if (!examples) {\n return textResponse(\n `No examples found for \"${canonicalName}\". Examples are in packages/mcp-server/examples/components/${canonicalName}.examples.tsx`\n );\n }\n\n return textResponse(examples);\n}\n\n/**\n * Search for components by name, category, or feature\n */\nexport function searchComponents(args: SearchComponentsArgs = {}): ToolResponse {\n const query = args.query || \"\";\n const category = args.category;\n\n let results: string[];\n\n if (query) {\n results = searchComponentsData(query, category);\n } else if (category) {\n results = getComponentsByCategory(category);\n } else {\n results = getComponentNames();\n }\n\n const resultList = results.map((name) => {\n const meta = getComponentMetadata(name);\n return {\n name,\n category: meta?.category || \"unknown\",\n description: meta?.description || \"\",\n };\n });\n\n return jsonResponse(resultList);\n}\n\n/**\n * Get TypeScript type definitions for a component\n */\nexport function getComponentTypes(args: GetComponentTypesArgs): ToolResponse {\n const componentName = args.component;\n const format = args.format || \"both\";\n\n try {\n const result = getTypesFromFile(componentName, format);\n return jsonResponse(result);\n } catch (error) {\n return textResponse(\n `Error: ${error instanceof Error ? error.message : \"Unknown error\"}`\n );\n }\n}\n\n/**\n * Get validated TypeScript examples for a component\n *\n * These examples are type-checked against the actual component props\n * to ensure they compile and are correct.\n */\nexport function getComponentExamplesTs(args: GetComponentExamplesTsArgs): ToolResponse {\n const inputName = args.component;\n const canonicalName = findComponentName(inputName);\n\n try {\n // If component name is not recognized in metadata, still try to find examples\n const lookupName = canonicalName || inputName;\n const examples = getComponentExamplesFromFile(lookupName);\n if (!examples) {\n const availableComponents = getAvailableComponents();\n return textResponse(\n `No TypeScript examples found for component \"${inputName}\". Available components with examples: ${availableComponents.join(\", \")}`\n );\n }\n\n return textResponse(examples);\n } catch (error) {\n return textResponse(\n `Error: ${error instanceof Error ? error.message : \"Unknown error\"}`\n );\n }\n}\n\n// ============================================================================\n// CLI Tool Handlers\n// ============================================================================\n\n/**\n * Get information about CLI commands and usage\n */\nexport function getCliUsage(args: GetCliUsageArgs = {}): ToolResponse {\n const commandName = args.command;\n\n if (commandName) {\n const command = cliCommands[commandName];\n if (!command) {\n return textResponse(\n `Command \"${commandName}\" not found. Available commands: ${Object.keys(cliCommands).join(\", \")}`\n );\n }\n\n return textResponse(`# ${commandName}\n\n${command.description}\n\n## Usage\n\\`\\`\\`bash\n${command.usage}\n\\`\\`\\`\n\n## Options\n${command.options.map((opt: any) => `- \\`${opt.flag}\\`: ${opt.description}`).join(\"\\n\")}\n\n## Examples\n${command.examples.map((ex: string) => `\\`\\`\\`bash\\n${ex}\\n\\`\\`\\``).join(\"\\n\\n\")}\n`);\n }\n\n // Return all commands\n const allCommands = Object.entries(cliCommands).map(([name, data]) => ({\n name,\n description: data.description,\n usage: data.usage,\n }));\n\n return jsonResponse(allCommands);\n}\n\n// ============================================================================\n// Icon Tool Handlers\n// ============================================================================\n\n/**\n * Search for Material Design Icons\n */\nexport function searchIcons(args: SearchIconsArgs): ToolResponse {\n const query = args.query?.toLowerCase() || \"\";\n const limit = args.limit || 20;\n\n if (!query) {\n return textResponse(\"Please provide a search query.\");\n }\n\n // Filter icons that match the query\n const matchingIcons = iconsData.icons.filter((icon: string) =>\n icon.toLowerCase().includes(query)\n );\n\n // Limit results\n const limitedResults = matchingIcons.slice(0, limit);\n\n const result = {\n query,\n total: iconsData.total,\n matches: matchingIcons.length,\n returned: limitedResults.length,\n icons: limitedResults,\n };\n\n return jsonResponse(result);\n}\n\n// ============================================================================\n// Theme Tool Handlers\n// ============================================================================\n\n/**\n * Get TypeScript type definitions for theme types\n */\nexport function getThemeTypes(args: GetThemeTypesArgs = {}): ToolResponse {\n const format = args.format || \"both\";\n\n try {\n const result = getThemeTypesFromFile(format);\n return jsonResponse(result);\n } catch (error) {\n return textResponse(\n `Error: ${error instanceof Error ? error.message : \"Unknown error\"}`\n );\n }\n}\n\n// ============================================================================\n// Navigation Tool Handlers\n// ============================================================================\n\n/**\n * Get TypeScript type definitions for navigation types\n */\nexport function getNavigationTypes(args: GetNavigationTypesArgs = {}): ToolResponse {\n const format = args.format || \"both\";\n\n try {\n const result = getNavigationTypesFromFile(format);\n return jsonResponse(result);\n } catch (error) {\n return textResponse(\n `Error: ${error instanceof Error ? error.message : \"Unknown error\"}`\n );\n }\n}\n\n// ============================================================================\n// Guide Tool Handlers\n// ============================================================================\n\n/**\n * Get documentation for the translate package\n */\nexport function getTranslateGuide(args: GetTranslateGuideArgs): ToolResponse {\n const topic = args.topic;\n const uri = `idealyst://translate/${topic}`;\n const guide = translateGuides[uri];\n\n if (!guide) {\n return textResponse(\n `Topic \"${topic}\" not found. Available topics: overview, runtime-api, babel-plugin, translation-files, examples`\n );\n }\n\n return textResponse(guide);\n}\n\n/**\n * Get documentation for the storage package\n */\nexport function getStorageGuide(args: GetStorageGuideArgs): ToolResponse {\n const topic = args.topic;\n const uri = `idealyst://storage/${topic}`;\n const guide = storageGuides[uri];\n\n if (!guide) {\n return textResponse(\n `Topic \"${topic}\" not found. Available topics: overview, api, examples`\n );\n }\n\n return textResponse(guide);\n}\n\n// ============================================================================\n// Package Tool Handlers\n// ============================================================================\n\n/**\n * List all available packages\n */\nexport function listPackages(args: ListPackagesArgs = {}): ToolResponse {\n const category = args.category;\n\n if (category) {\n // Filter by specific category\n const byCategory = getPackagesByCat();\n const packageList = (byCategory[category] || []).map((pkg) => ({\n name: pkg.name,\n npmName: pkg.npmName,\n description: pkg.description,\n platforms: pkg.platforms,\n documentationStatus: pkg.documentationStatus,\n }));\n\n return jsonResponse(packageList);\n }\n\n // Return all packages grouped by category\n const allPackages = getPackageSummary();\n const grouped = allPackages.reduce(\n (acc, pkg) => {\n const cat = pkg.category;\n if (!acc[cat]) acc[cat] = [];\n acc[cat].push(pkg);\n return acc;\n },\n {} as Record<string, typeof allPackages>\n );\n\n return jsonResponse(grouped);\n}\n\n/**\n * Get detailed documentation for a package\n */\nexport function getPackageDocs(args: GetPackageDocsArgs): ToolResponse {\n const packageName = args.package;\n const section = args.section;\n\n // Handle both formats: \"camera\" and \"@idealyst/camera\"\n const normalizedName = packageName.replace(\"@idealyst/\", \"\").toLowerCase();\n const pkg = packages[normalizedName];\n\n if (!pkg) {\n const availablePackages = Object.keys(packages).join(\", \");\n return textResponse(\n `Package \"${packageName}\" not found. Available packages: ${availablePackages}`\n );\n }\n\n // Build documentation based on section or return all\n let docs = \"\";\n\n if (!section || section === \"overview\") {\n docs += `# ${pkg.name} (${pkg.npmName})\n\n${pkg.description}\n\n**Category:** ${pkg.category}\n**Platforms:** ${pkg.platforms.join(\", \")}\n**Documentation Status:** ${pkg.documentationStatus}\n\n`;\n }\n\n if (!section || section === \"installation\") {\n docs += `## Installation\n\n\\`\\`\\`bash\n${pkg.installation}\n\\`\\`\\`\n\n`;\n if (pkg.peerDependencies && pkg.peerDependencies.length > 0) {\n docs += `### Peer Dependencies\n${pkg.peerDependencies.map((dep) => `- ${dep}`).join(\"\\n\")}\n\n`;\n }\n }\n\n if (!section || section === \"features\") {\n docs += `## Features\n\n${pkg.features.map((f) => `- ${f}`).join(\"\\n\")}\n\n`;\n }\n\n if (!section || section === \"quickstart\") {\n docs += `## Quick Start\n\n\\`\\`\\`tsx\n${pkg.quickStart}\n\\`\\`\\`\n\n`;\n }\n\n if (!section || section === \"api\") {\n if (pkg.apiHighlights && pkg.apiHighlights.length > 0) {\n docs += `## API Highlights\n\n${pkg.apiHighlights.map((api) => `- \\`${api}\\``).join(\"\\n\")}\n\n`;\n }\n }\n\n if (pkg.relatedPackages && pkg.relatedPackages.length > 0) {\n docs += `## Related Packages\n\n${pkg.relatedPackages.map((rp) => `- @idealyst/${rp}`).join(\"\\n\")}\n`;\n }\n\n return textResponse(docs.trim());\n}\n\n/**\n * Search across all packages\n */\nexport function searchPackages(args: SearchPackagesArgs): ToolResponse {\n const query = args.query;\n\n if (!query) {\n return textResponse(\"Please provide a search query.\");\n }\n\n const results = searchPackagesData(query);\n\n if (results.length === 0) {\n return textResponse(\n `No packages found matching \"${query}\". Try searching for: camera, oauth, storage, translate, datagrid, datepicker, navigation, etc.`\n );\n }\n\n const resultList = results.map((pkg) => ({\n name: pkg.name,\n npmName: pkg.npmName,\n category: pkg.category,\n description: pkg.description,\n platforms: pkg.platforms,\n }));\n\n return jsonResponse(resultList);\n}\n\n// ============================================================================\n// Recipe Tool Handlers\n// ============================================================================\n\n/**\n * List all available recipes\n */\nexport function listRecipes(args: ListRecipesArgs = {}): ToolResponse {\n const category = args.category;\n const difficulty = args.difficulty;\n\n let recipeList = getRecipeSummary();\n\n // Filter by category\n if (category) {\n recipeList = recipeList.filter((r) => r.category === category);\n }\n\n // Filter by difficulty\n if (difficulty) {\n recipeList = recipeList.filter((r) => r.difficulty === difficulty);\n }\n\n // Group by category for readability\n if (!category) {\n const grouped = recipeList.reduce(\n (acc, recipe) => {\n if (!acc[recipe.category]) acc[recipe.category] = [];\n acc[recipe.category].push(recipe);\n return acc;\n },\n {} as Record<string, typeof recipeList>\n );\n\n return jsonResponse(grouped);\n }\n\n return jsonResponse(recipeList);\n}\n\n/**\n * Get a complete code recipe\n */\nexport function getRecipe(args: GetRecipeArgs): ToolResponse {\n const recipeId = args.recipe;\n\n // Normalize the recipe ID (handle both \"login-form\" and \"loginForm\" etc)\n const normalizedId = recipeId.toLowerCase().replace(/\\s+/g, \"-\");\n const recipe = recipes[normalizedId];\n\n if (!recipe) {\n const availableRecipes = Object.keys(recipes).join(\", \");\n return textResponse(\n `Recipe \"${recipeId}\" not found.\\n\\nAvailable recipes: ${availableRecipes}`\n );\n }\n\n // Format the recipe as markdown\n const output = `# ${recipe.name}\n\n${recipe.description}\n\n**Category:** ${recipe.category}\n**Difficulty:** ${recipe.difficulty}\n**Required packages:** ${recipe.packages.join(\", \")}\n\n## Code\n\n\\`\\`\\`tsx\n${recipe.code}\n\\`\\`\\`\n\n## Explanation\n\n${recipe.explanation}\n\n${\n recipe.tips && recipe.tips.length > 0\n ? `## Tips\n\n${recipe.tips.map((tip) => `- ${tip}`).join(\"\\n\")}`\n : \"\"\n}\n\n${\n recipe.relatedRecipes && recipe.relatedRecipes.length > 0\n ? `## Related Recipes\n\n${recipe.relatedRecipes.map((r) => `- ${r}`).join(\"\\n\")}`\n : \"\"\n}\n`;\n\n return textResponse(output.trim());\n}\n\n/**\n * Search for recipes\n */\nexport function searchRecipes(args: SearchRecipesArgs): ToolResponse {\n const query = args.query;\n\n if (!query) {\n return textResponse(\"Please provide a search query.\");\n }\n\n const results = searchRecipesData(query);\n\n if (results.length === 0) {\n return textResponse(\n `No recipes found matching \"${query}\". Try searching for: login, form, navigation, settings, auth, list, modal, etc.`\n );\n }\n\n const resultList = results.map((recipe) => ({\n id: Object.entries(recipes).find(([_, r]) => r === recipe)?.[0],\n name: recipe.name,\n description: recipe.description,\n category: recipe.category,\n difficulty: recipe.difficulty,\n packages: recipe.packages,\n }));\n\n return jsonResponse(resultList);\n}\n\n// ============================================================================\n// Install Guide Tool Handlers\n// ============================================================================\n\n/**\n * Get detailed installation guide for a package\n */\nexport function getInstallGuide(args: GetInstallGuideArgs): ToolResponse {\n const packageName = args.package;\n\n if (!packageName) {\n return textResponse(\"Please provide a package name.\");\n }\n\n const guide = getInstallGuideData(packageName);\n\n if (!guide) {\n const availablePackages = Object.keys(installGuides).join(\", \");\n return textResponse(\n `No installation guide found for \"${packageName}\".\\n\\nAvailable packages: ${availablePackages}`\n );\n }\n\n // Format as detailed markdown\n const markdown = formatInstallGuideMarkdown(guide);\n return textResponse(markdown);\n}\n\n// ============================================================================\n// Handler Registry\n// ============================================================================\n\n/**\n * Map of all tool handlers by name.\n * Use this for dynamic tool dispatch.\n */\nexport const toolHandlers: Record<string, (args: any) => ToolResponse> = {\n list_components: listComponents,\n get_component_docs: getComponentDocs,\n get_component_example: getComponentExample,\n search_components: searchComponents,\n get_component_types: getComponentTypes,\n get_component_examples_ts: getComponentExamplesTs,\n get_cli_usage: getCliUsage,\n search_icons: searchIcons,\n get_theme_types: getThemeTypes,\n get_navigation_types: getNavigationTypes,\n get_translate_guide: getTranslateGuide,\n get_storage_guide: getStorageGuide,\n list_packages: listPackages,\n get_package_docs: getPackageDocs,\n search_packages: searchPackages,\n list_recipes: listRecipes,\n get_recipe: getRecipe,\n search_recipes: searchRecipes,\n get_install_guide: getInstallGuide,\n};\n\n/**\n * Call a tool by name with arguments.\n * Returns a tool response or throws if the tool is not found.\n */\nexport function callTool(name: string, args: Record<string, unknown> = {}): ToolResponse {\n const handler = toolHandlers[name];\n\n if (!handler) {\n return textResponse(`Unknown tool: ${name}`);\n }\n\n return handler(args);\n}\n"],"mappings":"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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsKpC,qCAAqC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2NrC,0CAA0C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsP1C,iCAAiC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+RnC;;;ACxgCO,IAAM,gBAAwC;AAAA,EACnD,+BAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkE/B,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwG1B,+BAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA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","names":["__filename","__dirname","searchComponents","getComponentTypes","getThemeTypes","getNavigationTypes","searchPackages","searchRecipes","getInstallGuide"]}
|