@memberjunction/ng-dashboards 6.2.0-edge.5 → 6.2.0-edge.6
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/README.md +28 -0
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +15 -7
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +7 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +209 -57
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts +12 -11
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.js +15 -15
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.js.map +1 -1
- package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/AI/components/execution-monitoring.component.js +28 -16
- package/dist/AI/components/execution-monitoring.component.js.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +1 -0
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +30 -6
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +15 -7
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/sensitive-fields.d.ts +9 -4
- package/dist/AI/components/vectors/sensitive-fields.d.ts.map +1 -1
- package/dist/AI/components/vectors/sensitive-fields.js +39 -14
- package/dist/AI/components/vectors/sensitive-fields.js.map +1 -1
- package/dist/AI/components/vectors/vector-document-rules.d.ts +13 -0
- package/dist/AI/components/vectors/vector-document-rules.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-document-rules.js +14 -0
- package/dist/AI/components/vectors/vector-document-rules.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +34 -14
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +127 -50
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-store-selection.d.ts +32 -0
- package/dist/AI/components/vectors/vector-store-selection.d.ts.map +1 -0
- package/dist/AI/components/vectors/vector-store-selection.js +57 -0
- package/dist/AI/components/vectors/vector-store-selection.js.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts +236 -0
- package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-agent-context.js +374 -0
- package/dist/ChiefOfStaff/chief-of-staff-agent-context.js.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.d.ts +195 -0
- package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.js +2910 -0
- package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.js.map +1 -0
- package/dist/ChiefOfStaff/index.d.ts +3 -0
- package/dist/ChiefOfStaff/index.d.ts.map +1 -0
- package/dist/ChiefOfStaff/index.js +3 -0
- package/dist/ChiefOfStaff/index.js.map +1 -0
- package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +2 -1
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +23 -18
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +11 -10
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/DashboardEditor/dashboard-editor.component.d.ts +17 -2
- package/dist/DashboardEditor/dashboard-editor.component.d.ts.map +1 -1
- package/dist/DashboardEditor/dashboard-editor.component.js +94 -43
- package/dist/DashboardEditor/dashboard-editor.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +24 -0
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +146 -50
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/models/explorer-state.interface.d.ts +2 -0
- package/dist/DataExplorer/models/explorer-state.interface.d.ts.map +1 -1
- package/dist/DataExplorer/models/explorer-state.interface.js.map +1 -1
- package/dist/LoginStudio/login-studio-resource.component.d.ts +10 -2
- package/dist/LoginStudio/login-studio-resource.component.d.ts.map +1 -1
- package/dist/LoginStudio/login-studio-resource.component.js +110 -77
- package/dist/LoginStudio/login-studio-resource.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts +24 -4
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +118 -65
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/PredictiveStudio/business-predictions.view-models.d.ts +1 -1
- package/dist/PredictiveStudio/business-predictions.view-models.d.ts.map +1 -1
- package/dist/PredictiveStudio/business-predictions.view-models.js +3 -3
- package/dist/PredictiveStudio/business-predictions.view-models.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-experiments.component.d.ts +6 -63
- package/dist/PredictiveStudio/components/ps-experiments.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-experiments.component.js +256 -521
- package/dist/PredictiveStudio/components/ps-experiments.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts +0 -18
- package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js +122 -249
- package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts +5 -9
- package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipelines.component.js +98 -130
- package/dist/PredictiveStudio/components/ps-pipelines.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts +53 -4
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.js +335 -326
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-row-drivers.component.d.ts +19 -0
- package/dist/PredictiveStudio/components/ps-row-drivers.component.d.ts.map +1 -0
- package/dist/PredictiveStudio/components/ps-row-drivers.component.js +85 -0
- package/dist/PredictiveStudio/components/ps-row-drivers.component.js.map +1 -0
- package/dist/PredictiveStudio/engine/predictive-studio.engine.d.ts +19 -1
- package/dist/PredictiveStudio/engine/predictive-studio.engine.d.ts.map +1 -1
- package/dist/PredictiveStudio/engine/predictive-studio.engine.js +51 -2
- package/dist/PredictiveStudio/engine/predictive-studio.engine.js.map +1 -1
- package/dist/PredictiveStudio/predictive-studio-agent-context.d.ts +3 -1
- package/dist/PredictiveStudio/predictive-studio-agent-context.d.ts.map +1 -1
- package/dist/PredictiveStudio/predictive-studio-agent-context.js +3 -0
- package/dist/PredictiveStudio/predictive-studio-agent-context.js.map +1 -1
- package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts +27 -4
- package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts.map +1 -1
- package/dist/PredictiveStudio/predictive-studio-score-history.service.js +94 -61
- package/dist/PredictiveStudio/predictive-studio-score-history.service.js.map +1 -1
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts +29 -5
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js +185 -103
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js.map +1 -1
- package/dist/PredictiveStudio/resources/ps-studio-resource.component.js +1 -1
- package/dist/PredictiveStudio/resources/ps-studio-resource.component.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +22 -21
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +8 -2
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +2 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +71 -71
- package/dist/PredictiveStudio/at-risk.view-models.d.ts +0 -120
- package/dist/PredictiveStudio/at-risk.view-models.d.ts.map +0 -1
- package/dist/PredictiveStudio/at-risk.view-models.js +0 -261
- package/dist/PredictiveStudio/at-risk.view-models.js.map +0 -1
- package/dist/PredictiveStudio/components/ps-confirm-modal.component.d.ts +0 -109
- package/dist/PredictiveStudio/components/ps-confirm-modal.component.d.ts.map +0 -1
- package/dist/PredictiveStudio/components/ps-confirm-modal.component.js +0 -323
- package/dist/PredictiveStudio/components/ps-confirm-modal.component.js.map +0 -1
- package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts +0 -137
- package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts.map +0 -1
- package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.js +0 -826
- package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ps-pipelines.component.js","sourceRoot":"","sources":["../../../src/PredictiveStudio/components/ps-pipelines.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectorRef, Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewEncapsulation, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MJButtonDirective } from '@memberjunction/ng-ui-components';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { CompositeKey, IMetadataProvider, Metadata, UserInfo } from '@memberjunction/core';\nimport { MJMLTrainingPipelineEntity, MJMLModelEntity, PredictiveStudioTrainModelOperation, UserInfoEngine } from '@memberjunction/core-entities';\nimport { NavigationService } from '@memberjunction/ng-shared';\nimport { AngularSplitModule } from 'angular-split';\nimport { PSPipelineWizardComponent } from './ps-pipeline-wizard.component';\nimport {\n DOMINANCE_THRESHOLD_DEFAULT,\n parseDenyList,\n type SourceBinding,\n type FeatureStepGraph,\n type FeatureStep,\n type FeatureStepKind,\n type AsOfStrategy,\n type LeakageGuard,\n type ValidationStrategy,\n type ProblemType,\n} from '@memberjunction/predictive-studio-core';\nimport { PSPanelKey } from '../predictive-studio.types';\nimport { PredictiveStudioEngine } from '../engine/predictive-studio.engine';\n\ntype NodeType = 'src' | 'feat' | 'emb' | 'target' | 'algo' | 'output';\n\ninterface DagNode {\n id: string;\n type: NodeType;\n title: string;\n icon: string;\n tag?: string;\n rows: { k: string; v: string }[];\n x: number;\n y: number;\n hasIn: boolean;\n hasOut: boolean;\n}\n\ninterface DagEdge {\n from: string;\n to: string;\n}\n\nconst NODE_W = 230;\nconst NODE_H = 96;\nconst COL_GAP = 96;\nconst ROW_GAP = 28;\nconst PAD_X = 40;\nconst PAD_Y = 40;\n\nconst SOURCE_KINDS: SourceBinding['Kind'][] = ['Entity', 'Query', 'ExternalEntity', 'VectorSet', 'FeaturePipeline'];\nconst STEP_KINDS: FeatureStepKind[] = ['select', 'impute', 'standardize', 'onehot', 'bin', 'embedding', 'llm-derived', 'flow-agent', 'vision-llm'];\nconst PROBLEM_TYPES: ProblemType[] = ['classification', 'regression'];\nconst IMPUTE_STRATEGIES: Array<'mean' | 'median' | 'mode' | 'constant'> = ['mean', 'median', 'mode', 'constant'];\n\nconst SOURCE_ICONS: Record<SourceBinding['Kind'], string> = {\n Entity: 'fa-solid fa-table',\n Query: 'fa-solid fa-magnifying-glass-chart',\n ExternalEntity: 'fa-solid fa-arrows-turn-to-dots',\n VectorSet: 'fa-solid fa-vector-square',\n FeaturePipeline: 'fa-solid fa-diagram-project',\n};\n\nconst STEP_ICONS: Record<FeatureStepKind, string> = {\n select: 'fa-solid fa-list-check',\n impute: 'fa-solid fa-fill-drip',\n standardize: 'fa-solid fa-ruler-combined',\n onehot: 'fa-solid fa-table-cells',\n bin: 'fa-solid fa-chart-simple',\n embedding: 'fa-solid fa-vector-square',\n 'llm-derived': 'fa-solid fa-wand-magic-sparkles',\n 'flow-agent': 'fa-solid fa-robot',\n 'vision-llm': 'fa-solid fa-eye',\n};\n\nconst PS_PIPELINES_STARTER_PROMPT =\n 'Help me build a training pipeline. I will tell you what I want to predict and on which entity; ' +\n 'you assemble the features (guarding against leakage), pick an algorithm, and train a versioned model.';\n\n@Component({\n standalone: true,\n selector: 'ps-pipelines',\n imports: [CommonModule, MJButtonDirective, PSPipelineWizardComponent, AngularSplitModule],\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['../predictive-studio.shared.css', './ps-pipelines.component.css'],\n template: `\n <div class=\"ps-panel ps-pipelines\" data-testid=\"ps-pipelines-panel\">\n @if (pipelines.length === 0) {\n <div class=\"ps-empty\" data-testid=\"ps-pipelines-empty\">\n <span class=\"ps-empty-ico\"><i class=\"fa-solid fa-diagram-project\"></i></span>\n <h3>No training pipelines yet</h3>\n <p>\n A training pipeline assembles features from your data, picks an algorithm, and trains a\n versioned model. You can build one step-by-step with the manual wizard or ask the Model\n Development Agent to design one for you.\n </p>\n <div class=\"empty-actions\" style=\"display: flex; gap: 8px; margin-top: 12px;\">\n <button mjButton variant=\"primary\" size=\"sm\" data-testid=\"ps-pipelines-new-btn-empty\"\n (click)=\"openWizard()\">\n <i class=\"fa-solid fa-plus\"></i> New Pipeline\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-pipelines-ask-agent\"\n (click)=\"askAgent.emit(starterPrompt)\">\n <i class=\"fa-solid fa-robot\"></i> Ask the agent\n </button>\n </div>\n </div>\n } @else {\n <div class=\"pl-layout\" [class.catalog-collapsed]=\"isCatalogCollapsed\">\n @if (isCatalogCollapsed) {\n <div class=\"pl-collapsed-strip\" role=\"region\" aria-label=\"Pipelines catalog (collapsed)\">\n <button class=\"pl-rail-collapse\" type=\"button\" (click)=\"toggleCatalog()\" aria-label=\"Expand pipelines catalog\" title=\"Expand catalog\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </button>\n <div class=\"pl-collapsed-strip-label\"><i class=\"fa-solid fa-diagram-project\"></i></div>\n </div>\n }\n\n <as-split direction=\"horizontal\" class=\"pl-splitter\" unit=\"percent\" [gutterSize]=\"6\" (dragEnd)=\"onSplitDragEnd($event.sizes)\">\n @if (!isCatalogCollapsed) {\n <as-split-area [size]=\"catalogSizePct\" [minSize]=\"18\" [maxSize]=\"50\">\n <!-- Left Column: Master Pipeline Catalog -->\n <div class=\"pl-catalog\" data-testid=\"ps-pipelines-catalog\">\n <div class=\"pl-catalog-header\">\n <div class=\"pl-catalog-title-row\">\n <h2>Pipelines ({{ filteredPipelines.length }})</h2>\n <div style=\"display:flex;gap:6px;align-items:center\">\n <button mjButton variant=\"primary\" size=\"sm\" data-testid=\"ps-pipelines-new\" (click)=\"openWizard()\">\n <i class=\"fa-solid fa-plus\"></i> New\n </button>\n <button class=\"pl-collapse-btn\" type=\"button\" (click)=\"toggleCatalog()\" title=\"Collapse catalog\" aria-label=\"Collapse catalog\">\n <i class=\"fa-solid fa-chevron-left\"></i>\n </button>\n </div>\n </div>\n <div class=\"pl-search-box\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n <input type=\"text\" [value]=\"searchQuery\" (input)=\"onSearchInput($event)\" placeholder=\"Filter pipelines...\" />\n </div>\n <div class=\"pl-filter-chips\">\n <button class=\"pl-filter-chip\" [class.active]=\"activeFilter === 'all'\" (click)=\"setFilter('all')\">All</button>\n <button class=\"pl-filter-chip\" [class.active]=\"activeFilter === 'published'\" (click)=\"setFilter('published')\">Published</button>\n <button class=\"pl-filter-chip\" [class.active]=\"activeFilter === 'draft'\" (click)=\"setFilter('draft')\">Draft</button>\n <button class=\"pl-filter-chip\" [class.active]=\"activeFilter === 'core'\" (click)=\"setFilter('core')\">MJ Core</button>\n </div>\n </div>\n\n <!-- Scrollable Catalog Cards List (preserves data-testid=\"ps-pipelines-picker\" and \"ps-pipelines-pill\") -->\n <div class=\"pl-picker\" data-testid=\"ps-pipelines-picker\">\n @for (p of filteredPipelines; track p.ID) {\n <button class=\"pl-pill pipeline-card\" [class.on]=\"isSelectedPipeline(p)\"\n data-testid=\"ps-pipelines-pill\" (click)=\"selectPipeline(p.ID)\" [title]=\"p.Name\">\n <div class=\"pl-card-top\">\n <div class=\"pl-card-name\">{{ p.Name }}</div>\n <span class=\"ps-badge\" [class]=\"statusClass(p.Status)\">{{ p.Status }}</span>\n </div>\n <div class=\"pl-card-meta\">\n <span class=\"pl-entity-tag\">{{ targetEntityName(p) }}</span>\n <span>•</span>\n <span class=\"pl-target-tag\">{{ p.TargetVariable || 'Target' }}</span>\n </div>\n <div class=\"pl-card-meta\" style=\"justify-content: space-between; margin-top: 2px;\">\n <span>{{ p.ProblemType }}</span>\n @if (bestMetricForPipeline(p); as bm) {\n <span class=\"pl-metric-badge\"><i class=\"fa-solid fa-trophy\" style=\"color:#eab308\"></i> {{ bm }}</span>\n }\n </div>\n </button>\n }\n </div>\n </div>\n </as-split-area>\n }\n\n <as-split-area [size]=\"isCatalogCollapsed ? 100 : workspaceSizePct\" [minSize]=\"40\">\n <!-- Right Column: Human-Centric Workspace (Stages View Default + DAG View Toggle) -->\n <div class=\"pl-workspace\" data-testid=\"ps-pipelines-workspace\">\n <div class=\"pl-workspace-header\">\n <div class=\"pl-workspace-title-area\">\n <div class=\"pl-breadcrumbs\">\n <span>Pipelines</span> <i class=\"fa-solid fa-chevron-right\" style=\"font-size: 10px;\"></i>\n <span>{{ pipelineDomain(selectedPipeline) }}</span> <i class=\"fa-solid fa-chevron-right\" style=\"font-size: 10px;\"></i>\n <strong>{{ selectedPipeline?.Name }}</strong>\n </div>\n <div class=\"pl-title-row\">\n <h1>{{ selectedPipeline?.Name }}</h1>\n @if (selectedPipeline) {\n <span class=\"ps-badge\" [class]=\"statusClass(selectedPipeline.Status)\">{{ selectedPipeline.Status }}</span>\n @if (bestMetricForPipeline(selectedPipeline); as bm) {\n <span class=\"pl-metric-badge\"><i class=\"fa-solid fa-trophy\" style=\"color:#eab308\"></i> {{ bm }}</span>\n }\n }\n </div>\n </div>\n\n <!-- Action Toolbar -->\n <div class=\"pl-toolbar\">\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"toggleViewMode()\" [title]=\"isGraphView ? 'Switch to 5-Stage Progressive Flow' : 'Switch to Pipeline Graph View'\">\n <i class=\"fa-solid\" [class.fa-diagram-project]=\"!isGraphView\" [class.fa-layer-group]=\"isGraphView\"></i>\n {{ isGraphView ? 'Stages View' : 'Graph View' }}\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-pipelines-clone\" [disabled]=\"!selectedPipeline\" (click)=\"cloneSelected()\">\n <i class=\"fa-solid fa-copy\"></i> Clone\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-pipelines-save\" [disabled]=\"!dirty || busy\" (click)=\"save()\">\n <i class=\"fa-solid fa-floppy-disk\"></i> Save\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-pipelines-validate\" [disabled]=\"busy\" (click)=\"validate()\">\n <i class=\"fa-solid fa-circle-check\"></i> Validate\n </button>\n <button mjButton variant=\"primary\" size=\"sm\" data-testid=\"ps-pipelines-train\" [disabled]=\"busy || dirty\" (click)=\"train()\">\n <i class=\"fa-solid fa-play\"></i> Train\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"refine()\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Agent\n </button>\n @if (dirty) { <span class=\"ps-tag amber\" data-testid=\"ps-pipelines-dirty\"><i class=\"fa-solid fa-pen\"></i> Unsaved</span> }\n </div>\n </div>\n\n <!-- Stages View (Human-Readable Progressive Stages) -->\n @if (viewMode === 'stages') {\n <div class=\"pl-stages-body\">\n <!-- STAGE 1: Target Definition & Decision Boundary -->\n <div class=\"pl-stage-card\">\n <div class=\"pl-stage-header\">\n <div class=\"pl-stage-title-left\">\n <span class=\"pl-stage-num\">1</span>\n <div>\n <h3>Target Definition & Temporal Decision Boundary</h3>\n <span class=\"pl-stage-subtitle\">Defines the training unit entity, target variable, problem type, and point-in-time cutoff.</span>\n </div>\n </div>\n </div>\n\n <div class=\"pl-grid-4\">\n <div class=\"pl-metric-box\">\n <label>Target Entity</label>\n <div class=\"val\"><i class=\"fa-solid fa-table\" style=\"color:var(--mj-brand-primary)\"></i> {{ targetEntityName(selectedPipeline) }}</div>\n <div class=\"sub\">Primary training unit</div>\n </div>\n <div class=\"pl-metric-box\">\n <label>Target Variable</label>\n <div class=\"val\"><i class=\"fa-solid fa-bullseye\" style=\"color:var(--mj-status-warning)\"></i> {{ editTargetVariable || 'Not set' }}</div>\n <div class=\"sub\">{{ editProblemType }} outcome</div>\n </div>\n <div class=\"pl-metric-box\">\n <label>Problem Type</label>\n <div class=\"val\"><i class=\"fa-solid fa-chart-pie\" style=\"color:var(--mj-brand-primary)\"></i> {{ editProblemType }}</div>\n <div class=\"sub\">Optimization discipline</div>\n </div>\n <div class=\"pl-metric-box\" style=\"border-left: 3px solid var(--mj-brand-primary);\">\n <label>As-Of Temporal Anchor</label>\n <div class=\"val\"><i class=\"fa-solid fa-clock-rotate-left\" style=\"color:var(--mj-brand-primary)\"></i> {{ asOfLabel }}</div>\n <div class=\"sub\">Temporal cutoff to prevent leakage</div>\n </div>\n </div>\n </div>\n\n <!-- STAGE 2: Feature Architecture & Relational Sources -->\n <div class=\"pl-stage-card\">\n <div class=\"pl-stage-header\">\n <div class=\"pl-stage-title-left\">\n <span class=\"pl-stage-num\">2</span>\n <div>\n <h3>Feature Architecture & Relational Data Sources</h3>\n <span class=\"pl-stage-subtitle\">Combines core entity attributes with linked relational features across the database.</span>\n </div>\n </div>\n <div style=\"display:flex; gap:6px;\">\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-pipelines-add-source\" (click)=\"addSource()\"><i class=\"fa-solid fa-plus\"></i> Add Source</button>\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-pipelines-add-step\" (click)=\"addStep()\"><i class=\"fa-solid fa-sliders\"></i> Add Step</button>\n </div>\n </div>\n\n <div class=\"pl-grid-3\">\n <!-- Feature Group: Sources -->\n <div class=\"pl-feature-group\">\n <div class=\"pl-fg-head\">\n <span><i class=\"fa-solid fa-database\"></i> Feed-In Sources ({{ editSources.length }})</span>\n </div>\n <div class=\"pl-fg-body\">\n @for (s of editSources; track $index) {\n <div class=\"pl-feature-row\">\n <span class=\"pl-feature-name\">{{ s.Ref || 'Unnamed source' }}</span>\n <span class=\"ps-tag\">{{ s.Kind }}</span>\n </div>\n }\n </div>\n </div>\n\n <!-- Feature Group: Feature Steps -->\n <div class=\"pl-feature-group\">\n <div class=\"pl-fg-head\">\n <span><i class=\"fa-solid fa-sliders\"></i> Feature Transforms ({{ editSteps.length }})</span>\n </div>\n <div class=\"pl-fg-body\">\n @for (st of editSteps; track st.Id) {\n <div class=\"pl-feature-card\" data-testid=\"ps-pipelines-step-card\" (click)=\"selectStep(st.Id)\">\n <div class=\"pl-feature-card-header\">\n <span class=\"pl-feature-name\">{{ st.Label || st.Kind }}</span>\n <span class=\"ps-tag\">{{ st.Kind }}</span>\n </div>\n @if (getStepColumns(st); as cols) {\n @if (cols.length > 0) {\n <div class=\"pl-col-chips\">\n @for (col of cols; track col) {\n <span class=\"pl-col-chip\">{{ col }}</span>\n }\n </div>\n }\n }\n @if (getStepInputs(st); as inputs) {\n @if (inputs.length > 0) {\n <div class=\"pl-step-inputs\">\n <i class=\"fa-solid fa-arrow-right-to-bracket\"></i>\n <span>From: {{ inputs.join(', ') }}</span>\n </div>\n }\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Feature Group: Algorithm Selection -->\n <div class=\"pl-feature-group\">\n <div class=\"pl-fg-head\">\n <span><i class=\"fa-solid fa-shapes\"></i> Selected Algorithm</span>\n </div>\n <div class=\"pl-fg-body\">\n <div class=\"pl-feature-row\">\n <span class=\"pl-feature-name\">{{ selectedAlgorithmName }}</span>\n <span class=\"ps-tag primary\">Active</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Leakage Guard Bar -->\n <div class=\"pl-leakage-box\">\n <i class=\"fa-solid fa-shield-halved\"></i>\n <div style=\"flex:1;\">\n <div style=\"font-size:13px; font-weight:700; color:var(--mj-text-primary);\">Leakage Guard Active</div>\n <div style=\"font-size:12px; color:var(--mj-text-secondary); margin-top:2px;\">\n Deny-listed columns are excluded prior to matrix assembly. Dominance threshold: <strong>{{ editLeakage.SingleFeatureDominanceThreshold }}</strong>\n </div>\n <div style=\"margin-top:6px;\">\n @if (editLeakage.DenyFields.length === 0) {\n <span style=\"font-size:12px; color:var(--mj-text-muted);\">No deny-list columns configured.</span>\n } @else {\n @for (col of editLeakage.DenyFields; track col) {\n <span class=\"pl-deny-chip\">{{ col }}</span>\n }\n }\n </div>\n </div>\n </div>\n </div>\n\n <!-- STAGE 3: Preprocessing & Data Hygiene -->\n <div class=\"pl-stage-card\">\n <div class=\"pl-stage-header\">\n <div class=\"pl-stage-title-left\">\n <span class=\"pl-stage-num\">3</span>\n <div>\n <h3>Fitted Preprocessing & Validation Discipline</h3>\n <span class=\"pl-stage-subtitle\">Parameters fitted once on training folds and frozen with the model artifact for inference anti-skew.</span>\n </div>\n </div>\n </div>\n\n <div class=\"pl-grid-4\">\n <div class=\"pl-metric-box\">\n <label>Validation Strategy</label>\n <div class=\"val\">{{ editValidation.Strategy }}</div>\n <div class=\"sub\">Cross-validation split</div>\n </div>\n <div class=\"pl-metric-box\">\n <label>Locked Holdout</label>\n <div class=\"val\">{{ (editValidation.LockedHoldoutFraction * 100).toFixed(0) }}%</div>\n <div class=\"sub\">Honest benchmark score</div>\n </div>\n <div class=\"pl-metric-box\">\n <label>Folds / Split</label>\n <div class=\"val\">{{ editValidation.Strategy === 'kfold' ? (editValidation.K || 5) + ' Folds' : ((editValidation.TestSize || 0.2) * 100).toFixed(0) + '% Test' }}</div>\n <div class=\"sub\">Training evaluation</div>\n </div>\n <div class=\"pl-metric-box\">\n <label>Anti-Skew Guarantee</label>\n <div class=\"val\"><i class=\"fa-solid fa-lock\" style=\"color:var(--mj-status-success)\"></i> Enforced</div>\n <div class=\"sub\">Frozen params travel with model</div>\n </div>\n </div>\n </div>\n\n <!-- STAGE 4: Multi-Algorithm Tournament & Leaderboard -->\n <div class=\"pl-stage-card\">\n <div class=\"pl-stage-header\">\n <div class=\"pl-stage-title-left\">\n <span class=\"pl-stage-num\">4</span>\n <div>\n <h3>Multi-Algorithm Tournament Leaderboard</h3>\n <span class=\"pl-stage-subtitle\">Models trained and scored on locked holdout data for this pipeline.</span>\n </div>\n </div>\n </div>\n\n @if (pipelineModels.length === 0) {\n <div style=\"padding: 16px; text-align: center; color: var(--mj-text-muted); font-size: 13px;\">\n <i class=\"fa-solid fa-flask\" style=\"font-size: 24px; margin-bottom: 8px; display: block; opacity: 0.5;\"></i>\n No models trained yet for this pipeline. Click <strong>Train</strong> to execute the first training run.\n </div>\n } @else {\n <table class=\"pl-table\">\n <thead>\n <tr>\n <th>Version</th>\n <th>Algorithm</th>\n <th>Holdout Score</th>\n <th>Status</th>\n <th>Trained At</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (m of pipelineModels; track m.ID) {\n <tr [class.winner-row]=\"m.Status === 'Published'\" class=\"pl-model-row\" (click)=\"openModelRecord(m.ID)\" style=\"cursor:pointer;\" title=\"Open model record in Explorer\">\n <td>\n <div style=\"display:flex;align-items:center;gap:6px\">\n <a class=\"pl-model-link\" href=\"javascript:void(0)\" (click)=\"$event.stopPropagation(); openModelRecord(m.ID)\">\n <strong>v{{ m.Version }}</strong>\n </a>\n @if (m.Status === 'Published') {\n <span class=\"ps-tag success\"><i class=\"fa-solid fa-trophy\"></i> Winner</span>\n }\n </div>\n </td>\n <td>{{ m.Algorithm || 'Algorithm' }}</td>\n <td><strong>{{ formatHoldout(m) }}</strong></td>\n <td><span class=\"ps-badge\" [class]=\"statusClass(m.Status)\">{{ m.Status }}</span></td>\n <td>{{ m.TrainedAt | date:'short' }}</td>\n <td style=\"text-align:right\">\n <button type=\"button\" class=\"pl-action-icon-btn\" (click)=\"$event.stopPropagation(); openModelRecord(m.ID)\" title=\"Open model record in Explorer\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n\n <!-- STAGE 5: Production Serving & Deep Link -->\n <div class=\"pl-stage-card\">\n <div class=\"pl-stage-header\">\n <div class=\"pl-stage-title-left\">\n <span class=\"pl-stage-num\">5</span>\n <div>\n <h3>Production Serving & Model Registry</h3>\n <span class=\"pl-stage-subtitle\">Active inference wiring and model registry status.</span>\n </div>\n </div>\n <div style=\"display:flex;gap:8px;align-items:center;\">\n @if (publishedModel; as pub) {\n <button mjButton variant=\"secondary\" size=\"sm\" type=\"button\"\n (click)=\"openModelRecord(pub.ID)\"\n title=\"Open model record in Explorer\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i> Open Model Record\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" type=\"button\"\n (click)=\"viewTrainingRuns(pub.ID)\"\n title=\"View training runs for this model\">\n <i class=\"fa-solid fa-flask\"></i> View Training Runs\n </button>\n }\n </div>\n </div>\n\n <div class=\"pl-serving-box\">\n <div class=\"pl-metric-box\">\n <label>Active Serving Model</label>\n <div class=\"val\">\n @if (publishedModel; as pub) {\n <span>v{{ pub.Version }} ({{ pub.Algorithm || 'Model' }}) • ID: {{ pub.ID.slice(0, 8) }}…</span>\n } @else {\n <span style=\"color:var(--mj-text-muted);\">No published model serving live predictions yet.</span>\n }\n </div>\n <div class=\"sub\">Model: {{ publishedModel?.Status || 'None' }} • Pipeline: {{ selectedPipeline?.Status }}</div>\n </div>\n <div class=\"pl-metric-box\" style=\"background:var(--mj-brand-primary-subtle); border-color:rgba(0,118,182,0.2);\">\n <label>Inference Readiness</label>\n <div class=\"val\" style=\"color:var(--mj-brand-primary)\">\n <i class=\"fa-solid fa-circle-check\"></i> Ready\n </div>\n <div class=\"sub\">Batch & on-demand scoring enabled</div>\n </div>\n </div>\n </div>\n\n </div>\n }\n\n <!-- Graph Canvas & Inspector -->\n @if (isGraphView) {\n <div class=\"builder\">\n <as-split direction=\"horizontal\" class=\"builder-splitter\" unit=\"percent\" [gutterSize]=\"6\" (dragEnd)=\"onInspectorSplitDragEnd($event.sizes)\">\n <as-split-area [size]=\"isInspectorCollapsed ? 100 : canvasSizePct\" [minSize]=\"40\">\n <!-- Canvas Wrap -->\n <div class=\"canvas-wrap\">\n <div class=\"canvas-bar\">\n <div class=\"canvas-bar-left\">\n <span class=\"ps-small ps-muted\" style=\"font-weight:600\">Add to Graph:</span>\n <button class=\"ps-pchip s\" data-testid=\"ps-pipelines-add-source\" (click)=\"addSource()\"><i class=\"fa-solid fa-database\"></i> Source</button>\n <button class=\"ps-pchip f\" data-testid=\"ps-pipelines-add-step\" (click)=\"addStep()\"><i class=\"fa-solid fa-sliders\"></i> Feature step</button>\n </div>\n <div class=\"canvas-bar-right\">\n <div class=\"ps-zoom-controls\">\n <button class=\"ps-icon-btn\" (click)=\"zoomOut()\" [disabled]=\"zoomLevel <= 0.5\" title=\"Zoom Out\"><i class=\"fa-solid fa-minus\"></i></button>\n <span class=\"ps-zoom-label\" (click)=\"resetZoom()\" title=\"Reset to 100%\">{{ Math.round(zoomLevel * 100) }}%</span>\n <button class=\"ps-icon-btn\" (click)=\"zoomIn()\" [disabled]=\"zoomLevel >= 2.0\" title=\"Zoom In\"><i class=\"fa-solid fa-plus\"></i></button>\n </div>\n <button class=\"ps-icon-btn\" [class.active]=\"!isInspectorCollapsed\" (click)=\"toggleInspector()\" [title]=\"isInspectorCollapsed ? 'Open Inspector' : 'Collapse Inspector'\">\n <i class=\"fa-solid fa-circle-info\"></i>\n </button>\n <span class=\"ps-small ps-muted ps-node-count\"><i class=\"fa-solid fa-circle-nodes\"></i> {{ nodes.length }} nodes · {{ edges.length }} edges</span>\n </div>\n </div>\n\n <div class=\"ps-flow big\" data-testid=\"ps-pipelines-canvas\">\n <div class=\"ps-graph-viewport\"\n [style.width.px]=\"canvasW\"\n [style.height.px]=\"canvasH\"\n [style.transform]=\"'scale(' + zoomLevel + ')'\">\n <svg class=\"ps-graph-edges\"\n data-testid=\"ps-pipelines-edges\"\n [attr.width]=\"canvasW\"\n [attr.height]=\"canvasH\">\n <defs>\n <marker id=\"ps-arrow\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto\">\n <path d=\"M 0 1.5 L 8 5 L 0 8.5 z\" fill=\"var(--mj-border-strong)\" />\n </marker>\n <marker id=\"ps-arrow-active\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto\">\n <path d=\"M 0 1.5 L 8 5 L 0 8.5 z\" fill=\"var(--mj-brand-primary)\" />\n </marker>\n </defs>\n @for (edge of edges; track edge.from + '->' + edge.to) {\n <path class=\"ps-edge-path\"\n [class.active]=\"isEdgeActive(edge)\"\n [attr.d]=\"edgePath(edge)\"\n [attr.marker-end]=\"isEdgeActive(edge) ? 'url(#ps-arrow-active)' : 'url(#ps-arrow)'\"></path>\n }\n </svg>\n @for (node of nodes; track node.id) {\n <div class=\"ps-node\" data-testid=\"ps-pipelines-node\" [attr.data-node-id]=\"node.id\"\n [ngClass]=\"node.type\" [class.selected]=\"node.id === selectedId\"\n [style.left.px]=\"node.x\" [style.top.px]=\"node.y\"\n [style.width.px]=\"NODE_W\"\n (click)=\"selectNode(node.id)\">\n <div class=\"nh\">\n <i class=\"tile\" [ngClass]=\"node.icon\"></i>\n <span class=\"ps-node-title\" [title]=\"node.title\">{{ node.title }}</span>\n @if (node.tag) { <span class=\"ps-tag\">{{ node.tag }}</span> }\n </div>\n <div class=\"nb\">\n @for (row of node.rows; track row.k) {\n <div class=\"nb-row\">\n <span class=\"k\">{{ row.k }}</span>\n <span class=\"v\" [title]=\"row.v\">{{ row.v }}</span>\n </div>\n }\n </div>\n @if (node.hasIn) { <span class=\"port in\"></span> }\n @if (node.hasOut) { <span class=\"port out\"></span> }\n </div>\n }\n </div>\n </div>\n\n <div class=\"flow-toolbar\">\n <div class=\"legend\">\n <span><i class=\"sw src\"></i> Source</span>\n <span><i class=\"sw feat\"></i> Feature</span>\n <span><i class=\"sw emb\"></i> Embedding</span>\n <span><i class=\"sw target\"></i> Target</span>\n <span><i class=\"sw algo\"></i> Algorithm</span>\n <span><i class=\"sw output\"></i> Model</span>\n </div>\n </div>\n </div>\n </as-split-area>\n\n @if (!isInspectorCollapsed) {\n <as-split-area [size]=\"inspectorSizePct\" [minSize]=\"20\" [maxSize]=\"55\">\n <!-- Inspector -->\n <div class=\"ps-col inspector\" data-testid=\"ps-pipelines-inspector\">\n <div class=\"ps-card insp\">\n <div class=\"ihead\">\n <i class=\"tile\" [ngClass]=\"selectedNode.icon\" [attr.data-type]=\"selectedNode.type\"></i>\n <div style=\"flex:1\">\n <h3 data-testid=\"ps-pipelines-inspector-title\">{{ selectedNode.title }}</h3>\n <div class=\"ps-small ps-muted\">{{ nodeTypeLabel(selectedNode.type) }} · selected</div>\n </div>\n <button class=\"insp-collapse-btn\" type=\"button\" (click)=\"toggleInspector()\" title=\"Collapse inspector\" aria-label=\"Collapse inspector\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </button>\n @if (selectedNode.type === 'src' || selectedNode.type === 'feat' || selectedNode.type === 'emb') {\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-pipelines-delete\" (click)=\"deleteSelected()\"><i class=\"fa-solid fa-trash\"></i></button>\n }\n </div>\n <div class=\"ps-card-body\">\n @if (selectedSource) {\n <div class=\"ps-field\"><label>Kind</label>\n <select class=\"mj-input\" [value]=\"selectedSource.Kind\" (change)=\"setSourceKind(inputVal($event))\">\n @for (k of sourceKinds; track k) { <option [value]=\"k\">{{ k }}</option> }\n </select>\n </div>\n <div class=\"ps-field\"><label>Reference (entity / query / id)</label>\n <input class=\"mj-input\" type=\"text\" [value]=\"selectedSource.Ref\" (input)=\"setSourceRef(inputVal($event))\" />\n </div>\n <div class=\"ps-field\"><label>Alias (optional)</label>\n <input class=\"mj-input\" type=\"text\" [value]=\"selectedSource.Alias || ''\" (input)=\"setSourceAlias(inputVal($event))\" />\n </div>\n }\n @if (selectedStep) {\n <div class=\"ps-field\"><label>Kind</label>\n <select class=\"mj-input\" [value]=\"selectedStep.Kind\" (change)=\"setStepKind(inputVal($event))\">\n @for (k of stepKinds; track k) { <option [value]=\"k\">{{ k }}</option> }\n </select>\n </div>\n <div class=\"ps-field\"><label>Label</label>\n <input class=\"mj-input\" type=\"text\" [value]=\"selectedStep.Label || ''\" (input)=\"setStepLabel(inputVal($event))\" />\n </div>\n @switch (selectedStep.Kind) {\n @case ('select') { <div class=\"ps-field\"><label>Columns (comma-separated)</label><input class=\"mj-input\" type=\"text\" [value]=\"columnsText\" (input)=\"setColumns(inputVal($event))\" /></div> }\n @case ('standardize') { <div class=\"ps-field\"><label>Columns (comma-separated)</label><input class=\"mj-input\" type=\"text\" [value]=\"columnsText\" (input)=\"setColumns(inputVal($event))\" /></div> }\n @case ('impute') {\n <div class=\"ps-field\"><label>Column</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('Column')\" (input)=\"setStepStr('Column', inputVal($event))\" /></div>\n <div class=\"ps-field\"><label>Strategy</label><select class=\"mj-input\" [value]=\"stepField('Strategy')\" (change)=\"setStepStr('Strategy', inputVal($event))\">@for (s of imputeStrategies; track s) { <option [value]=\"s\">{{ s }}</option> }</select></div>\n }\n @case ('onehot') { <div class=\"ps-field\"><label>Column</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('Column')\" (input)=\"setStepStr('Column', inputVal($event))\" /></div> }\n @case ('bin') {\n <div class=\"ps-field\"><label>Column</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('Column')\" (input)=\"setStepStr('Column', inputVal($event))\" /></div>\n <div class=\"ps-field\"><label>Bins</label><input class=\"mj-input\" type=\"number\" [value]=\"stepField('Bins')\" (input)=\"setStepNum('Bins', inputVal($event))\" /></div>\n }\n @case ('embedding') {\n <div class=\"ps-field\"><label>Entity</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('Entity')\" (input)=\"setStepStr('Entity', inputVal($event))\" /></div>\n <div class=\"ps-field\"><label>Embedding model ref</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('EmbeddingModelRef')\" (input)=\"setStepStr('EmbeddingModelRef', inputVal($event))\" /></div>\n <div class=\"ps-field\"><label>Dimensions</label><input class=\"mj-input\" type=\"number\" [value]=\"stepField('Dims')\" (input)=\"setStepNum('Dims', inputVal($event))\" /></div>\n }\n @case ('llm-derived') { <div class=\"ps-field\"><label>Feature Pipeline ref</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('FeaturePipelineRef')\" (input)=\"setStepStr('FeaturePipelineRef', inputVal($event))\" /></div> }\n @case ('flow-agent') { <div class=\"ps-field\"><label>Flow Agent ref</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('FlowAgentRef')\" (input)=\"setStepStr('FlowAgentRef', inputVal($event))\" /></div> }\n @case ('vision-llm') { <div class=\"ps-field\"><label>Image column</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('ImageColumn')\" (input)=\"setStepStr('ImageColumn', inputVal($event))\" /></div> }\n }\n }\n @if (selectedNode.type === 'target') {\n <div class=\"ps-field\"><label>Target variable</label><input class=\"mj-input\" type=\"text\" [value]=\"editTargetVariable\" (input)=\"setTargetVariable(inputVal($event))\" /></div>\n <div class=\"ps-field\"><label>Problem type</label><select class=\"mj-input\" [value]=\"editProblemType\" (change)=\"setProblemType(inputVal($event))\">@for (pt of problemTypes; track pt) { <option [value]=\"pt\">{{ pt }}</option> }</select></div>\n }\n @if (selectedNode.type === 'algo') {\n <div class=\"ps-field\"><label>Algorithm</label><select class=\"mj-input\" [value]=\"editAlgorithmId\" (change)=\"setAlgorithm(inputVal($event))\">@for (a of algorithms; track a.ID) { <option [value]=\"a.ID\">{{ a.Name }}</option> }</select></div>\n <div class=\"ps-field\"><label>Hyperparameters (JSON)</label><textarea class=\"mj-textarea\" rows=\"4\" [value]=\"editHyperparams\" (input)=\"setHyperparams(inputVal($event))\"></textarea></div>\n @if (publishedModel; as pub) {\n <div style=\"margin-top:12px;padding:10px;border-radius:var(--mj-radius-sm);background:var(--mj-bg-surface-sunken);border:1px solid var(--mj-border-default);\">\n <div class=\"ps-small ps-muted\" style=\"margin-bottom:6px;\">Current Serving Winner</div>\n <div style=\"display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;\">\n <span style=\"font-size:var(--mj-text-xs);font-weight:600;\">v{{ pub.Version }} ({{ pub.Algorithm || 'Model' }})</span>\n <span class=\"ps-tag success\"><i class=\"fa-solid fa-trophy\"></i> Active</span>\n </div>\n <div style=\"display:flex;gap:6px;\">\n <button mjButton variant=\"secondary\" size=\"sm\" type=\"button\" (click)=\"openModelRecord(pub.ID)\" style=\"flex:1;justify-content:center;\" title=\"Open model record in Explorer\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i> Model\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" type=\"button\" (click)=\"viewTrainingRuns(pub.ID)\" style=\"flex:1;justify-content:center;\" title=\"View training runs\">\n <i class=\"fa-solid fa-flask\"></i> Runs\n </button>\n </div>\n </div>\n }\n }\n @if (selectedNode.type === 'output') {\n @if (pipelineModels.length === 0) {\n <div class=\"ps-small ps-muted\">The trained model artifact. Run <strong>Train</strong> to produce a new versioned model from this pipeline.</div>\n } @else {\n <div style=\"display:flex;flex-direction:column;gap:12px;\">\n @if (pipelineModels.length > 1) {\n <div class=\"ps-field\">\n <label>Model Version</label>\n <select class=\"mj-input\" [value]=\"inspectedModel?.ID\" (change)=\"selectModelVersion(inputVal($event))\">\n @for (m of pipelineModels; track m.ID) {\n <option [value]=\"m.ID\">v{{ m.Version }} · {{ m.Algorithm || 'Algorithm' }} ({{ m.Status }})</option>\n }\n </select>\n </div>\n }\n @if (inspectedModel; as mdl) {\n <div style=\"border:1px solid var(--mj-border-default);border-radius:var(--mj-radius-md);padding:12px;background:var(--mj-bg-surface-sunken);display:flex;flex-direction:column;gap:8px;\">\n <div style=\"display:flex;justify-content:space-between;align-items:center;\">\n <div style=\"display:flex;align-items:center;gap:6px;\">\n <strong>v{{ mdl.Version }}</strong>\n @if (mdl.Status === 'Published') {\n <span class=\"ps-tag success\"><i class=\"fa-solid fa-trophy\"></i> Winner</span>\n }\n <span class=\"ps-badge\" [class]=\"statusClass(mdl.Status)\">{{ mdl.Status }}</span>\n </div>\n <span class=\"ps-mono ps-small ps-muted\" [title]=\"mdl.ID\">{{ mdl.ID.slice(0, 8) }}…</span>\n </div>\n <div style=\"font-size:var(--mj-text-xs);color:var(--mj-text-secondary);\">\n Algorithm: <strong>{{ mdl.Algorithm || selectedAlgorithmName }}</strong>\n </div>\n <div style=\"font-size:var(--mj-text-xs);color:var(--mj-text-secondary);\">\n Holdout Score: <strong>{{ formatHoldout(mdl) }}</strong>\n </div>\n <div style=\"display:flex;flex-direction:column;gap:6px;margin-top:4px;\">\n <button mjButton variant=\"primary\" size=\"sm\" type=\"button\" (click)=\"openModelRecord(mdl.ID)\" style=\"width:100%;justify-content:center;\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i> Open Model Details\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" type=\"button\" (click)=\"viewTrainingRuns(mdl.ID)\" style=\"width:100%;justify-content:center;\">\n <i class=\"fa-solid fa-flask\"></i> View Training Runs\n </button>\n </div>\n </div>\n }\n </div>\n }\n }\n </div>\n </div>\n\n <!-- Leakage guard (editable) -->\n <div class=\"ps-card\">\n <div class=\"ps-card-head\"><i class=\"fa-solid fa-shield-halved\" style=\"color:var(--mj-status-warning)\"></i><h3>Leakage guard</h3></div>\n <div class=\"ps-card-body\">\n <div class=\"ps-field\"><label>Deny-list columns (comma-separated)</label><input class=\"mj-input\" type=\"text\" [value]=\"denyText\" (input)=\"setDeny(inputVal($event))\" /></div>\n <div class=\"ps-field\"><label>Single-feature dominance threshold</label><input class=\"mj-input\" type=\"number\" step=\"0.05\" min=\"0\" max=\"1\" [value]=\"editLeakage.SingleFeatureDominanceThreshold\" (input)=\"setThreshold(inputVal($event))\" /></div>\n </div>\n </div>\n\n <!-- As-of strategy (editable) -->\n <div class=\"ps-card\">\n <div class=\"ps-card-head\"><i class=\"fa-solid fa-clock-rotate-left\" style=\"color:var(--mj-brand-primary)\"></i><h3>As-of strategy</h3></div>\n <div class=\"ps-card-body\">\n <div class=\"ps-field\"><label>Mode</label><select class=\"mj-input\" [value]=\"editAsOf.Mode\" (change)=\"setAsOfMode(inputVal($event))\"><option value=\"none\">none</option><option value=\"column\">column</option><option value=\"offset\">offset</option></select></div>\n @if (editAsOf.Mode === 'column') { <div class=\"ps-field\"><label>Decision-date column</label><input class=\"mj-input\" type=\"text\" [value]=\"editAsOf.Column || ''\" (input)=\"setAsOfColumn(inputVal($event))\" /></div> }\n @if (editAsOf.Mode === 'offset') { <div class=\"ps-field\"><label>Offset days before label</label><input class=\"mj-input\" type=\"number\" [value]=\"editAsOf.OffsetDays ?? 0\" (input)=\"setAsOfOffset(inputVal($event))\" /></div> }\n </div>\n </div>\n\n <!-- Validation (editable) -->\n <div class=\"ps-card\">\n <div class=\"ps-card-head\"><i class=\"fa-solid fa-scissors\" style=\"color:var(--mj-brand-primary)\"></i><h3>Validation</h3></div>\n <div class=\"ps-card-body\">\n <div class=\"ps-field\"><label>Strategy</label><select class=\"mj-input\" [value]=\"editValidation.Strategy\" (change)=\"setValStrategy(inputVal($event))\"><option value=\"train_test_split\">train_test_split</option><option value=\"kfold\">kfold</option><option value=\"holdout\">holdout</option></select></div>\n @if (editValidation.Strategy === 'train_test_split') { <div class=\"ps-field\"><label>Test size</label><input class=\"mj-input\" type=\"number\" step=\"0.05\" [value]=\"editValidation.TestSize ?? 0.2\" (input)=\"setTestSize(inputVal($event))\" /></div> }\n @if (editValidation.Strategy === 'kfold') { <div class=\"ps-field\"><label>Folds (k)</label><input class=\"mj-input\" type=\"number\" [value]=\"editValidation.K ?? 5\" (input)=\"setK(inputVal($event))\" /></div> }\n <div class=\"ps-field\"><label>Locked holdout fraction</label><input class=\"mj-input\" type=\"number\" step=\"0.05\" [value]=\"editValidation.LockedHoldoutFraction\" (input)=\"setHoldout(inputVal($event))\" /></div>\n </div>\n </div>\n </div>\n </as-split-area>\n }\n </as-split>\n </div>\n }\n </div>\n </as-split-area>\n </as-split>\n </div>\n }\n\n @if (showWizard) {\n <ps-pipeline-wizard\n [engine]=\"engine\"\n [provider]=\"provider\"\n [currentUser]=\"currentUser\"\n [cloneFrom]=\"wizardClonePipeline\"\n [initialAlgorithmId]=\"initialWizardAlgorithmId\"\n (saved)=\"onWizardSaved($event)\"\n (trainRequested)=\"onWizardTrainRequested($event)\"\n (closed)=\"closeWizard()\">\n </ps-pipeline-wizard>\n }\n </div>\n `,\n})\nexport class PSPipelinesComponent implements OnInit, OnChanges {\n @Input() engine!: PredictiveStudioEngine;\n @Input() provider: IMetadataProvider | null = null;\n @Input() CurrentUser: UserInfo | null = null;\n\n /** @deprecated Use {@link CurrentUser}. */\n @Input() set currentUser(value: UserInfo | null) {\n this.CurrentUser = value;\n }\n /** @deprecated Use {@link CurrentUser}. */\n get currentUser(): UserInfo | null {\n return this.CurrentUser;\n }\n\n @Output() AskAgent = new EventEmitter<string>();\n\n /**\n * @deprecated Use {@link AskAgent}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (askAgent) keeps working. Must stay AFTER AskAgent: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() askAgent = this.AskAgent;\n @Output() Navigate = new EventEmitter<PSPanelKey>();\n\n /**\n * @deprecated Use {@link Navigate}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (navigate) keeps working. Must stay AFTER Navigate: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() navigate = this.Navigate;\n\n private cdr = inject(ChangeDetectorRef);\n private notifications = inject(MJNotificationService);\n private navigationService = inject(NavigationService);\n\n public IsCatalogCollapsed = false;\n\n /** @deprecated Use {@link IsCatalogCollapsed}. */\n public get isCatalogCollapsed() {\n return this.IsCatalogCollapsed;\n }\n /** @deprecated Use {@link IsCatalogCollapsed}. */\n public set isCatalogCollapsed(value) {\n this.IsCatalogCollapsed = value;\n }\n public CatalogSizePct = 28;\n\n /** @deprecated Use {@link CatalogSizePct}. */\n public get catalogSizePct() {\n return this.CatalogSizePct;\n }\n /** @deprecated Use {@link CatalogSizePct}. */\n public set catalogSizePct(value) {\n this.CatalogSizePct = value;\n }\n public WorkspaceSizePct = 72;\n\n /** @deprecated Use {@link WorkspaceSizePct}. */\n public get workspaceSizePct() {\n return this.WorkspaceSizePct;\n }\n /** @deprecated Use {@link WorkspaceSizePct}. */\n public set workspaceSizePct(value) {\n this.WorkspaceSizePct = value;\n }\n public IsInspectorCollapsed = false;\n\n /** @deprecated Use {@link IsInspectorCollapsed}. */\n public get isInspectorCollapsed() {\n return this.IsInspectorCollapsed;\n }\n /** @deprecated Use {@link IsInspectorCollapsed}. */\n public set isInspectorCollapsed(value) {\n this.IsInspectorCollapsed = value;\n }\n public CanvasSizePct = 72;\n\n /** @deprecated Use {@link CanvasSizePct}. */\n public get canvasSizePct() {\n return this.CanvasSizePct;\n }\n /** @deprecated Use {@link CanvasSizePct}. */\n public set canvasSizePct(value) {\n this.CanvasSizePct = value;\n }\n public InspectorSizePct = 28;\n\n /** @deprecated Use {@link InspectorSizePct}. */\n public get inspectorSizePct() {\n return this.InspectorSizePct;\n }\n /** @deprecated Use {@link InspectorSizePct}. */\n public set inspectorSizePct(value) {\n this.InspectorSizePct = value;\n }\n\n public readonly StarterPrompt = PS_PIPELINES_STARTER_PROMPT;\n\n /** @deprecated Use {@link StarterPrompt}. */\n public get starterPrompt() {\n return this.StarterPrompt;\n }\n public readonly SourceKinds = SOURCE_KINDS;\n\n /** @deprecated Use {@link SourceKinds}. */\n public get sourceKinds() {\n return this.SourceKinds;\n }\n public readonly StepKinds = STEP_KINDS;\n\n /** @deprecated Use {@link StepKinds}. */\n public get stepKinds() {\n return this.StepKinds;\n }\n public readonly ProblemTypes = PROBLEM_TYPES;\n\n /** @deprecated Use {@link ProblemTypes}. */\n public get problemTypes() {\n return this.ProblemTypes;\n }\n public readonly ImputeStrategies = IMPUTE_STRATEGIES;\n\n /** @deprecated Use {@link ImputeStrategies}. */\n public get imputeStrategies() {\n return this.ImputeStrategies;\n }\n\n public Pipelines: MJMLTrainingPipelineEntity[] = [];\n\n /** @deprecated Use {@link Pipelines}. */\n public get pipelines(): MJMLTrainingPipelineEntity[] {\n return this.Pipelines;\n }\n /** @deprecated Use {@link Pipelines}. */\n public set pipelines(value: MJMLTrainingPipelineEntity[]) {\n this.Pipelines = value;\n }\n public SelectedPipelineId = '';\n\n /** @deprecated Use {@link SelectedPipelineId}. */\n public get selectedPipelineId() {\n return this.SelectedPipelineId;\n }\n /** @deprecated Use {@link SelectedPipelineId}. */\n public set selectedPipelineId(value) {\n this.SelectedPipelineId = value;\n }\n\n public ShowWizard = false;\n\n /** @deprecated Use {@link ShowWizard}. */\n public get showWizard() {\n return this.ShowWizard;\n }\n /** @deprecated Use {@link ShowWizard}. */\n public set showWizard(value) {\n this.ShowWizard = value;\n }\n public WizardClonePipeline: MJMLTrainingPipelineEntity | null = null;\n\n /** @deprecated Use {@link WizardClonePipeline}. */\n public get wizardClonePipeline(): MJMLTrainingPipelineEntity | null {\n return this.WizardClonePipeline;\n }\n /** @deprecated Use {@link WizardClonePipeline}. */\n public set wizardClonePipeline(value: MJMLTrainingPipelineEntity | null) {\n this.WizardClonePipeline = value;\n }\n public initialWizardAlgorithmId?: string; // case-violation-ok-legacy-back-compat: an accessor cannot be optional, so a stub would turn this into a required member\n\n @Input() public ViewMode: 'stages' | 'graph' | 'dag' = 'stages';\n\n /** @deprecated Use {@link ViewMode}. */\n @Input() public set viewMode(value: 'stages' | 'graph' | 'dag') {\n this.ViewMode = value;\n }\n /** @deprecated Use {@link ViewMode}. */\n public get viewMode(): 'stages' | 'graph' | 'dag' {\n return this.ViewMode;\n }\n public SearchQuery = '';\n\n /** @deprecated Use {@link SearchQuery}. */\n public get searchQuery() {\n return this.SearchQuery;\n }\n /** @deprecated Use {@link SearchQuery}. */\n public set searchQuery(value) {\n this.SearchQuery = value;\n }\n public ActiveFilter = 'all';\n\n /** @deprecated Use {@link ActiveFilter}. */\n public get activeFilter() {\n return this.ActiveFilter;\n }\n /** @deprecated Use {@link ActiveFilter}. */\n public set activeFilter(value) {\n this.ActiveFilter = value;\n }\n\n public readonly NODE_W = NODE_W;\n public readonly NODE_H = NODE_H;\n public Math = Math;\n public ZoomLevel = 1;\n\n /** @deprecated Use {@link ZoomLevel}. */\n public get zoomLevel() {\n return this.ZoomLevel;\n }\n /** @deprecated Use {@link ZoomLevel}. */\n public set zoomLevel(value) {\n this.ZoomLevel = value;\n }\n\n public OpenWizard(algoId?: string): void {\n this.WizardClonePipeline = null;\n this.initialWizardAlgorithmId = algoId;\n this.ShowWizard = true;\n }\n\n /** @deprecated Use {@link OpenWizard}. */\n public openWizard(algoId?: string): void {\n return this.OpenWizard(algoId);\n }\n\n public CloneSelected(): void {\n if (!this.SelectedPipeline) return;\n this.WizardClonePipeline = this.SelectedPipeline;\n this.initialWizardAlgorithmId = undefined;\n this.ShowWizard = true;\n }\n\n /** @deprecated Use {@link CloneSelected}. */\n public cloneSelected(): void {\n return this.CloneSelected();\n }\n\n public CloseWizard(): void {\n this.ShowWizard = false;\n this.WizardClonePipeline = null;\n this.initialWizardAlgorithmId = undefined;\n }\n\n /** @deprecated Use {@link CloseWizard}. */\n public closeWizard(): void {\n return this.CloseWizard();\n }\n\n public async OnWizardSaved(pipeline: MJMLTrainingPipelineEntity): Promise<void> {\n this.CloseWizard();\n await this.engine.Config(true, this.CurrentUser ?? undefined, this.provider ?? undefined);\n this.Pipelines = this.engine.Pipelines;\n this.SelectPipeline(pipeline.ID);\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link OnWizardSaved}. */\n public async onWizardSaved(pipeline: MJMLTrainingPipelineEntity): Promise<void> {\n return this.OnWizardSaved(pipeline);\n }\n\n public async OnWizardTrainRequested(pipeline: MJMLTrainingPipelineEntity): Promise<void> {\n this.CloseWizard();\n await this.engine.Config(true, this.CurrentUser ?? undefined, this.provider ?? undefined);\n this.Pipelines = this.engine.Pipelines;\n this.SelectPipeline(pipeline.ID);\n await this.train();\n }\n\n /** @deprecated Use {@link OnWizardTrainRequested}. */\n public async onWizardTrainRequested(pipeline: MJMLTrainingPipelineEntity): Promise<void> {\n return this.OnWizardTrainRequested(pipeline);\n }\n\n // Editable spec state (the source of truth; nodes/edges are derived).\n public EditSources: SourceBinding[] = [];\n\n /** @deprecated Use {@link EditSources}. */\n public get editSources(): SourceBinding[] {\n return this.EditSources;\n }\n /** @deprecated Use {@link EditSources}. */\n public set editSources(value: SourceBinding[]) {\n this.EditSources = value;\n }\n public EditSteps: FeatureStep[] = [];\n\n /** @deprecated Use {@link EditSteps}. */\n public get editSteps(): FeatureStep[] {\n return this.EditSteps;\n }\n /** @deprecated Use {@link EditSteps}. */\n public set editSteps(value: FeatureStep[]) {\n this.EditSteps = value;\n }\n public EditTargetVariable = '';\n\n /** @deprecated Use {@link EditTargetVariable}. */\n public get editTargetVariable() {\n return this.EditTargetVariable;\n }\n /** @deprecated Use {@link EditTargetVariable}. */\n public set editTargetVariable(value) {\n this.EditTargetVariable = value;\n }\n public EditProblemType: ProblemType = 'classification';\n\n /** @deprecated Use {@link EditProblemType}. */\n public get editProblemType(): ProblemType {\n return this.EditProblemType;\n }\n /** @deprecated Use {@link EditProblemType}. */\n public set editProblemType(value: ProblemType) {\n this.EditProblemType = value;\n }\n public EditAlgorithmId = '';\n\n /** @deprecated Use {@link EditAlgorithmId}. */\n public get editAlgorithmId() {\n return this.EditAlgorithmId;\n }\n /** @deprecated Use {@link EditAlgorithmId}. */\n public set editAlgorithmId(value) {\n this.EditAlgorithmId = value;\n }\n public EditHyperparams = '{}';\n\n /** @deprecated Use {@link EditHyperparams}. */\n public get editHyperparams() {\n return this.EditHyperparams;\n }\n /** @deprecated Use {@link EditHyperparams}. */\n public set editHyperparams(value) {\n this.EditHyperparams = value;\n }\n public EditLeakage: LeakageGuard = { DenyFields: [], SingleFeatureDominanceThreshold: DOMINANCE_THRESHOLD_DEFAULT };\n\n /** @deprecated Use {@link EditLeakage}. */\n public get editLeakage(): LeakageGuard {\n return this.EditLeakage;\n }\n /** @deprecated Use {@link EditLeakage}. */\n public set editLeakage(value: LeakageGuard) {\n this.EditLeakage = value;\n }\n public EditAsOf: AsOfStrategy = { Mode: 'none' };\n\n /** @deprecated Use {@link EditAsOf}. */\n public get editAsOf(): AsOfStrategy {\n return this.EditAsOf;\n }\n /** @deprecated Use {@link EditAsOf}. */\n public set editAsOf(value: AsOfStrategy) {\n this.EditAsOf = value;\n }\n public EditValidation: ValidationStrategy = { Strategy: 'train_test_split', TestSize: 0.2, LockedHoldoutFraction: 0.15 };\n\n /** @deprecated Use {@link EditValidation}. */\n public get editValidation(): ValidationStrategy {\n return this.EditValidation;\n }\n /** @deprecated Use {@link EditValidation}. */\n public set editValidation(value: ValidationStrategy) {\n this.EditValidation = value;\n }\n\n public Nodes: DagNode[] = [];\n\n /** @deprecated Use {@link Nodes}. */\n public get nodes(): DagNode[] {\n return this.Nodes;\n }\n /** @deprecated Use {@link Nodes}. */\n public set nodes(value: DagNode[]) {\n this.Nodes = value;\n }\n public Edges: DagEdge[] = [];\n\n /** @deprecated Use {@link Edges}. */\n public get edges(): DagEdge[] {\n return this.Edges;\n }\n /** @deprecated Use {@link Edges}. */\n public set edges(value: DagEdge[]) {\n this.Edges = value;\n }\n public SelectedId = '';\n\n /** @deprecated Use {@link SelectedId}. */\n public get selectedId() {\n return this.SelectedId;\n }\n /** @deprecated Use {@link SelectedId}. */\n public set selectedId(value) {\n this.SelectedId = value;\n }\n public CanvasW = 800;\n\n /** @deprecated Use {@link CanvasW}. */\n public get canvasW() {\n return this.CanvasW;\n }\n /** @deprecated Use {@link CanvasW}. */\n public set canvasW(value) {\n this.CanvasW = value;\n }\n public CanvasH = 460;\n\n /** @deprecated Use {@link CanvasH}. */\n public get canvasH() {\n return this.CanvasH;\n }\n /** @deprecated Use {@link CanvasH}. */\n public set canvasH(value) {\n this.CanvasH = value;\n }\n public Dirty = false;\n\n /** @deprecated Use {@link Dirty}. */\n public get dirty() {\n return this.Dirty;\n }\n /** @deprecated Use {@link Dirty}. */\n public set dirty(value) {\n this.Dirty = value;\n }\n public Busy = false;\n\n /** @deprecated Use {@link Busy}. */\n public get busy() {\n return this.Busy;\n }\n /** @deprecated Use {@link Busy}. */\n public set busy(value) {\n this.Busy = value;\n }\n\n private nodeById = new Map<string, DagNode>();\n private stepSeq = 0;\n\n public ngOnChanges(_changes?: SimpleChanges): void {\n this.RefreshFromEngine();\n }\n\n ngOnInit(): void {\n const saved = UserInfoEngine.Instance.GetSetting('mj.predictiveStudio.pipelines.layout');\n if (saved) {\n try {\n const parsed = JSON.parse(saved);\n if (typeof parsed.catalogSizePct === 'number' && parsed.catalogSizePct >= 15 && parsed.catalogSizePct <= 60) {\n this.CatalogSizePct = parsed.catalogSizePct;\n this.WorkspaceSizePct = 100 - this.CatalogSizePct;\n }\n if (typeof parsed.isCatalogCollapsed === 'boolean') {\n this.IsCatalogCollapsed = parsed.isCatalogCollapsed;\n }\n if (typeof parsed.canvasSizePct === 'number' && parsed.canvasSizePct >= 40 && parsed.canvasSizePct <= 85) {\n this.CanvasSizePct = parsed.canvasSizePct;\n this.InspectorSizePct = 100 - this.CanvasSizePct;\n }\n if (typeof parsed.isInspectorCollapsed === 'boolean') {\n this.IsInspectorCollapsed = parsed.isInspectorCollapsed;\n }\n } catch {}\n }\n this.RefreshFromEngine();\n }\n\n public OnSplitDragEnd(sizes: readonly (number | '*')[]): void {\n if (Array.isArray(sizes) && sizes.length === 2 && typeof sizes[0] === 'number' && typeof sizes[1] === 'number') {\n this.CatalogSizePct = Math.round(sizes[0]);\n this.WorkspaceSizePct = Math.round(sizes[1]);\n this.saveLayoutPrefs();\n }\n }\n\n /** @deprecated Use {@link OnSplitDragEnd}. */\n public onSplitDragEnd(sizes: readonly (number | '*')[]): void {\n return this.OnSplitDragEnd(sizes);\n }\n\n public ToggleCatalog(): void {\n this.IsCatalogCollapsed = !this.IsCatalogCollapsed;\n this.saveLayoutPrefs();\n this.cdr.markForCheck();\n }\n\n /** @deprecated Use {@link ToggleCatalog}. */\n public toggleCatalog(): void {\n return this.ToggleCatalog();\n }\n\n public OnInspectorSplitDragEnd(sizes: readonly (number | '*')[]): void {\n if (Array.isArray(sizes) && sizes.length === 2 && typeof sizes[0] === 'number' && typeof sizes[1] === 'number') {\n this.CanvasSizePct = Math.round(sizes[0]);\n this.InspectorSizePct = Math.round(sizes[1]);\n this.saveLayoutPrefs();\n }\n }\n\n /** @deprecated Use {@link OnInspectorSplitDragEnd}. */\n public onInspectorSplitDragEnd(sizes: readonly (number | '*')[]): void {\n return this.OnInspectorSplitDragEnd(sizes);\n }\n\n public ToggleInspector(): void {\n this.IsInspectorCollapsed = !this.IsInspectorCollapsed;\n this.saveLayoutPrefs();\n this.cdr.markForCheck();\n }\n\n /** @deprecated Use {@link ToggleInspector}. */\n public toggleInspector(): void {\n return this.ToggleInspector();\n }\n\n private saveLayoutPrefs(): void {\n const prefs = {\n catalogSizePct: this.CatalogSizePct,\n isCatalogCollapsed: this.IsCatalogCollapsed,\n canvasSizePct: this.CanvasSizePct,\n inspectorSizePct: this.InspectorSizePct,\n isInspectorCollapsed: this.IsInspectorCollapsed,\n };\n UserInfoEngine.Instance.SetSettingDebounced('mj.predictiveStudio.pipelines.layout', JSON.stringify(prefs));\n }\n\n public OpenModelRecord(modelId: string): void {\n if (!modelId) return;\n try {\n const p = this.provider ?? new Metadata();\n if (!p) return;\n const entity = p.EntityByName('MJ: ML Models');\n if (!entity) return;\n const ck = CompositeKey.FromURLSegment(entity, modelId);\n this.navigationService.OpenEntityRecord('MJ: ML Models', ck);\n } catch (err) {\n this.notifications.CreateSimpleNotification(`Could not open model: ${err instanceof Error ? err.message : String(err)}`, 'error');\n }\n }\n\n /** @deprecated Use {@link OpenModelRecord}. */\n public openModelRecord(modelId: string): void {\n return this.OpenModelRecord(modelId);\n }\n\n public ViewTrainingRuns(modelId?: string): void {\n if (this.Navigate.observed) {\n this.Navigate.emit('experiments');\n return;\n }\n try {\n const p = this.provider ?? new Metadata();\n if (!p) return;\n const runs = this.engine?.TrainingRuns ?? [];\n const match = modelId\n ? runs.find((r) => UUIDsEqual(r.ResultingModelID, modelId))\n : runs.find((r) => this.SelectedPipelineId && UUIDsEqual(r.PipelineID, this.SelectedPipelineId));\n if (match) {\n const entity = p.EntityByName('MJ: ML Training Runs');\n if (entity) {\n const ck = CompositeKey.FromURLSegment(entity, match.ID);\n this.navigationService.OpenEntityRecord('MJ: ML Training Runs', ck);\n return;\n }\n }\n this.navigationService.OpenNavItemByName('Experiments');\n } catch (err) {\n this.notifications.CreateSimpleNotification(`Could not open training runs: ${err instanceof Error ? err.message : String(err)}`, 'error');\n }\n }\n\n /** @deprecated Use {@link ViewTrainingRuns}. */\n public viewTrainingRuns(modelId?: string): void {\n return this.ViewTrainingRuns(modelId);\n }\n\n public RefreshFromEngine(): void {\n this.Pipelines = this.engine?.Pipelines ?? [];\n if (!this.SelectedPipelineId && this.Pipelines.length > 0) {\n this.SelectPipeline(this.Pipelines[0].ID);\n } else if (this.SelectedPipelineId && !this.Pipelines.some((p) => UUIDsEqual(p.ID, this.SelectedPipelineId))) {\n if (this.Pipelines.length > 0) {\n this.SelectPipeline(this.Pipelines[0].ID);\n }\n }\n }\n\n /** @deprecated Use {@link RefreshFromEngine}. */\n public refreshFromEngine(): void {\n return this.RefreshFromEngine();\n }\n\n public get IsGraphView(): boolean {\n return this.ViewMode === 'graph' || this.ViewMode === 'dag';\n }\n\n /** @deprecated Use {@link IsGraphView}. */\n public get isGraphView(): boolean {\n return this.IsGraphView;\n }\n\n public ToggleViewMode(): void {\n this.ViewMode = this.IsGraphView ? 'stages' : 'graph';\n }\n\n /** @deprecated Use {@link ToggleViewMode}. */\n public toggleViewMode(): void {\n return this.ToggleViewMode();\n }\n\n public ZoomIn(): void {\n this.ZoomLevel = Math.min(2.0, Math.round((this.ZoomLevel + 0.15) * 100) / 100);\n }\n\n /** @deprecated Use {@link ZoomIn}. */\n public zoomIn(): void {\n return this.ZoomIn();\n }\n\n public ZoomOut(): void {\n this.ZoomLevel = Math.max(0.5, Math.round((this.ZoomLevel - 0.15) * 100) / 100);\n }\n\n /** @deprecated Use {@link ZoomOut}. */\n public zoomOut(): void {\n return this.ZoomOut();\n }\n\n public ResetZoom(): void {\n this.ZoomLevel = 1;\n }\n\n /** @deprecated Use {@link ResetZoom}. */\n public resetZoom(): void {\n return this.ResetZoom();\n }\n\n public InputVal(e: Event): string {\n return (e.target as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement).value;\n }\n\n /** @deprecated Use {@link InputVal}. */\n public inputVal(e: Event): string {\n return this.InputVal(e);\n }\n\n public IsEdgeActive(edge: DagEdge): boolean {\n return this.SelectedId === edge.from || this.SelectedId === edge.to;\n }\n\n /** @deprecated Use {@link IsEdgeActive}. */\n public isEdgeActive(edge: DagEdge): boolean {\n return this.IsEdgeActive(edge);\n }\n\n public SetFilter(f: string): void {\n this.ActiveFilter = f;\n }\n\n /** @deprecated Use {@link SetFilter}. */\n public setFilter(f: string): void {\n return this.SetFilter(f);\n }\n\n public OnSearchInput(ev: Event): void {\n this.SearchQuery = ((ev.target as HTMLInputElement)?.value ?? '').toLowerCase();\n }\n\n /** @deprecated Use {@link OnSearchInput}. */\n public onSearchInput(ev: Event): void {\n return this.OnSearchInput(ev);\n }\n\n public get FilteredPipelines(): MJMLTrainingPipelineEntity[] {\n return (this.Pipelines ?? []).filter((p) => {\n if (this.SearchQuery) {\n const nameMatch = p.Name?.toLowerCase().includes(this.SearchQuery);\n const entityMatch = p.TargetEntity?.toLowerCase().includes(this.SearchQuery);\n const targetMatch = p.TargetVariable?.toLowerCase().includes(this.SearchQuery);\n if (!nameMatch && !entityMatch && !targetMatch) return false;\n }\n if (this.ActiveFilter === 'published') return p.Status === 'Published';\n if (this.ActiveFilter === 'draft') return p.Status === 'Draft';\n if (this.ActiveFilter === 'core') return p.TargetEntity?.includes('AI') || p.Name?.includes('AI Agent');\n return true;\n });\n }\n\n /** @deprecated Use {@link FilteredPipelines}. */\n public get filteredPipelines(): MJMLTrainingPipelineEntity[] {\n return this.FilteredPipelines;\n }\n\n public PipelineDomain(p?: MJMLTrainingPipelineEntity): string {\n if (!p) return 'Platform';\n const n = (p.Name || '') + (p.TargetEntity || '');\n if (n.includes('MoreCheese') || n.includes('Membership') || n.includes('Event') || n.includes('Course')) return 'More Cheese Club';\n if (n.includes('AI') || n.includes('Prompt') || n.includes('Agent')) return 'MemberJunction Platform';\n return 'BizApps';\n }\n\n /** @deprecated Use {@link PipelineDomain}. */\n public pipelineDomain(p?: MJMLTrainingPipelineEntity): string {\n return this.PipelineDomain(p);\n }\n\n public TargetEntityName(p?: MJMLTrainingPipelineEntity): string {\n if (!p) return 'Entity';\n return p.TargetEntity || this.EditSources[0]?.Ref || 'Entity';\n }\n\n /** @deprecated Use {@link TargetEntityName}. */\n public targetEntityName(p?: MJMLTrainingPipelineEntity): string {\n return this.TargetEntityName(p);\n }\n\n public get PipelineModels(): MJMLModelEntity[] {\n if (!this.SelectedPipelineId || !this.engine?.Models) return [];\n return this.engine.Models.filter((m) => UUIDsEqual(m.PipelineID, this.SelectedPipelineId));\n }\n\n /** @deprecated Use {@link PipelineModels}. */\n public get pipelineModels(): MJMLModelEntity[] {\n return this.PipelineModels;\n }\n\n public get PublishedModel(): MJMLModelEntity | undefined {\n return this.PipelineModels.find((m) => m.Status === 'Published') ?? this.PipelineModels[0];\n }\n\n /** @deprecated Use {@link PublishedModel}. */\n public get publishedModel(): MJMLModelEntity | undefined {\n return this.PublishedModel;\n }\n\n public SelectedModelVersionId: string | null = null;\n\n /** @deprecated Use {@link SelectedModelVersionId}. */\n public get selectedModelVersionId(): string | null {\n return this.SelectedModelVersionId;\n }\n /** @deprecated Use {@link SelectedModelVersionId}. */\n public set selectedModelVersionId(value: string | null) {\n this.SelectedModelVersionId = value;\n }\n\n public get InspectedModel(): MJMLModelEntity | undefined {\n if (this.SelectedModelVersionId) {\n const found = this.PipelineModels.find((m) => UUIDsEqual(m.ID, this.SelectedModelVersionId));\n if (found) return found;\n }\n return this.PublishedModel;\n }\n\n /** @deprecated Use {@link InspectedModel}. */\n public get inspectedModel(): MJMLModelEntity | undefined {\n return this.InspectedModel;\n }\n\n public SelectModelVersion(id: string): void {\n this.SelectedModelVersionId = id;\n this.cdr.markForCheck();\n }\n\n /** @deprecated Use {@link SelectModelVersion}. */\n public selectModelVersion(id: string): void {\n return this.SelectModelVersion(id);\n }\n\n public BestMetricForPipeline(p?: MJMLTrainingPipelineEntity): string | null {\n if (!p || !this.engine?.Models) return null;\n const models = this.engine.Models.filter((m) => UUIDsEqual(m.PipelineID, p.ID));\n if (models.length === 0) return null;\n const best = models.find((m) => m.Status === 'Published') ?? models[0];\n return this.FormatHoldout(best);\n }\n\n /** @deprecated Use {@link BestMetricForPipeline}. */\n public bestMetricForPipeline(p?: MJMLTrainingPipelineEntity): string | null {\n return this.BestMetricForPipeline(p);\n }\n\n public SelectStep(id: string): void {\n this.SelectNode(id);\n }\n\n /** @deprecated Use {@link SelectStep}. */\n public selectStep(id: string): void {\n return this.SelectStep(id);\n }\n\n public GetStepColumns(step: FeatureStep): string[] {\n switch (step.Kind) {\n case 'select':\n case 'standardize':\n return step.Columns ?? [];\n case 'impute':\n case 'onehot':\n case 'bin':\n return step.Column ? [step.Column] : [];\n default:\n return [];\n }\n }\n\n /** @deprecated Use {@link GetStepColumns}. */\n public getStepColumns(step: FeatureStep): string[] {\n return this.GetStepColumns(step);\n }\n\n public GetStepInputs(step: FeatureStep): string[] {\n return step.Inputs ?? [];\n }\n\n /** @deprecated Use {@link GetStepInputs}. */\n public getStepInputs(step: FeatureStep): string[] {\n return this.GetStepInputs(step);\n }\n\n public FormatHoldout(m: MJMLModelEntity): string {\n if (!m.HoldoutMetrics) return m.Metrics ? 'Trained' : 'Pending';\n try {\n const hm = typeof m.HoldoutMetrics === 'string' ? JSON.parse(m.HoldoutMetrics) : m.HoldoutMetrics;\n if (hm.auc != null) return `AUC ${(Number(hm.auc)).toFixed(3)}`;\n if (hm.r2 != null) return `R² ${(Number(hm.r2)).toFixed(3)}`;\n if (hm.rmse != null) return `RMSE ${(Number(hm.rmse)).toFixed(2)}`;\n if (hm.accuracy != null) return `Acc ${(Number(hm.accuracy) * 100).toFixed(1)}%`;\n return 'Scored';\n } catch {\n return 'Scored';\n }\n }\n\n /** @deprecated Use {@link FormatHoldout}. */\n public formatHoldout(m: MJMLModelEntity): string {\n return this.FormatHoldout(m);\n }\n\n public get AsOfLabel(): string {\n if (this.EditAsOf.Mode === 'column') return `Column: ${this.EditAsOf.Column || 'DecisionDate'}`;\n if (this.EditAsOf.Mode === 'offset') return `Offset: ${this.EditAsOf.OffsetDays || 0}d prior`;\n return 'None (Static snapshot)';\n }\n\n /** @deprecated Use {@link AsOfLabel}. */\n public get asOfLabel(): string {\n return this.AsOfLabel;\n }\n\n public get SelectedAlgorithmName(): string {\n return this.engine?.AlgorithmName(this.EditAlgorithmId) || 'Auto-select (Tournament)';\n }\n\n /** @deprecated Use {@link SelectedAlgorithmName}. */\n public get selectedAlgorithmName(): string {\n return this.SelectedAlgorithmName;\n }\n\n public SelectPipeline(id: string): void {\n this.SelectedPipelineId = id;\n this.SelectedModelVersionId = null;\n const p = this.Pipelines.find((x) => UUIDsEqual(x.ID, id));\n if (!p) {\n return;\n }\n\n // Defensive parsing against non-array JSON schemas\n const rawSources = this.parse<unknown>(p.SourceBindings, []);\n this.EditSources = Array.isArray(rawSources)\n ? (rawSources as SourceBinding[])\n : rawSources && typeof rawSources === 'object'\n ? [{ Kind: 'Entity', Ref: (rawSources as { EntityID?: string }).EntityID || '' }]\n : [];\n\n const rawSteps = this.parse<unknown>(p.FeatureSteps, { Steps: [] });\n if (Array.isArray(rawSteps)) {\n this.EditSteps = rawSteps as FeatureStep[];\n } else if (rawSteps && typeof rawSteps === 'object' && 'Steps' in rawSteps && Array.isArray((rawSteps as { Steps: unknown[] }).Steps)) {\n this.EditSteps = (rawSteps as { Steps: FeatureStep[] }).Steps;\n } else {\n this.EditSteps = [];\n }\n\n this.EditTargetVariable = p.TargetVariable ?? '';\n this.EditProblemType = (p.ProblemType as ProblemType) ?? 'classification';\n this.EditAlgorithmId = p.AlgorithmID ?? '';\n this.EditHyperparams = p.Hyperparameters ?? '{}';\n this.EditLeakage = this.parse<LeakageGuard>(p.LeakageGuard, { DenyFields: [], SingleFeatureDominanceThreshold: DOMINANCE_THRESHOLD_DEFAULT });\n this.EditAsOf = this.parse<AsOfStrategy>(p.AsOfStrategy, { Mode: 'none' });\n this.EditValidation = this.parse<ValidationStrategy>(p.ValidationStrategy, { Strategy: 'train_test_split', TestSize: 0.2, LockedHoldoutFraction: 0.15 });\n this.stepSeq = this.EditSteps.length;\n this.Dirty = false;\n this.rebuild();\n this.SelectedId = this.Nodes[0]?.id ?? '';\n }\n\n /** @deprecated Use {@link SelectPipeline}. */\n public selectPipeline(id: string): void {\n return this.SelectPipeline(id);\n }\n\n public get SelectedPipeline(): MJMLTrainingPipelineEntity | undefined {\n return this.Pipelines.find((p) => UUIDsEqual(p.ID, this.SelectedPipelineId));\n }\n\n /** @deprecated Use {@link SelectedPipeline}. */\n public get selectedPipeline(): MJMLTrainingPipelineEntity | undefined {\n return this.SelectedPipeline;\n }\n\n public IsSelectedPipeline(p: MJMLTrainingPipelineEntity): boolean {\n return UUIDsEqual(p.ID, this.SelectedPipelineId);\n }\n\n /** @deprecated Use {@link IsSelectedPipeline}. */\n public isSelectedPipeline(p: MJMLTrainingPipelineEntity): boolean {\n return this.IsSelectedPipeline(p);\n }\n\n private parse<T>(raw: string | null | undefined, fallback: T): T {\n if (!raw) {\n return fallback;\n }\n try {\n const value: unknown = JSON.parse(raw);\n return (value ?? fallback) as T;\n } catch {\n return fallback;\n }\n }\n\n private markDirty(): void {\n this.Dirty = true;\n this.rebuild();\n }\n\n // ---- derive nodes/edges from editable state ----\n\n private rebuild(): void {\n const nodes: DagNode[] = [];\n const edges: DagEdge[] = [];\n\n this.EditSources.forEach((sb, i) => nodes.push(this.sourceNode(sb, i)));\n this.EditSteps.forEach((step) => nodes.push(this.stepNode(step)));\n nodes.push(this.targetNode());\n nodes.push(this.algoNode());\n nodes.push({\n id: '__output',\n type: 'output',\n title: 'Model Artifact',\n icon: 'fa-solid fa-cube',\n tag: this.SelectedPipeline?.Status ?? 'Draft',\n x: 0,\n y: 0,\n hasIn: true,\n hasOut: false,\n rows: [\n { k: 'status', v: this.SelectedPipeline?.Status ?? 'Draft' },\n { k: 'serving', v: this.SelectedPipeline?.Status === 'Published' ? 'Active' : 'Not Serving' }\n ]\n });\n\n const stepIds = new Set(this.EditSteps.map((s) => s.Id));\n const sourceKeyToId = new Map<string, string>();\n this.EditSources.forEach((sb, i) => {\n const sid = `src:${i}`;\n sourceKeyToId.set(sid.toLowerCase(), sid);\n if (sb.Ref) sourceKeyToId.set(sb.Ref.toLowerCase(), sid);\n if (sb.Alias) sourceKeyToId.set(sb.Alias.toLowerCase(), sid);\n });\n\n const stepSourcesConnected = new Set<string>();\n const referenced = new Set<string>();\n for (const step of this.EditSteps) {\n for (const input of step.Inputs ?? []) {\n if (stepIds.has(input)) {\n edges.push({ from: input, to: step.Id });\n referenced.add(input);\n } else {\n const matchedSrc = sourceKeyToId.get(input.toLowerCase());\n if (matchedSrc) {\n edges.push({ from: matchedSrc, to: step.Id });\n stepSourcesConnected.add(step.Id);\n }\n }\n }\n }\n const roots = this.EditSteps.filter((s) => {\n const hasStepInput = (s.Inputs ?? []).some((i) => stepIds.has(i));\n const hasSourceInput = stepSourcesConnected.has(s.Id);\n return !hasStepInput && !hasSourceInput;\n });\n const sourceIds = this.EditSources.map((_s, i) => `src:${i}`);\n if (this.EditSteps.length > 0) {\n for (const sid of sourceIds) {\n for (const r of roots) {\n edges.push({ from: sid, to: r.Id });\n }\n }\n } else {\n for (const sid of sourceIds) {\n edges.push({ from: sid, to: '__algo' });\n }\n }\n for (const t of this.EditSteps.filter((s) => !referenced.has(s.Id))) {\n edges.push({ from: t.Id, to: '__algo' });\n }\n // Connect source to target so target sits cleanly in the feature/target layer\n if (sourceIds.length > 0) {\n edges.push({ from: sourceIds[0], to: '__target' });\n }\n edges.push({ from: '__target', to: '__algo' });\n edges.push({ from: '__algo', to: '__output' });\n\n this.Nodes = nodes;\n this.Edges = edges;\n this.markPorts();\n this.layoutGraph();\n }\n\n private sourceNode(sb: SourceBinding, i: number): DagNode {\n const md = this.provider ?? new Metadata();\n let title = sb.Alias;\n if (!title && sb.Kind === 'Entity' && sb.Ref) {\n const entity = md.EntityByName(sb.Ref);\n title = entity?.DisplayName || entity?.Name;\n }\n title = title || sb.Ref || 'source';\n\n const rows: { k: string; v: string }[] = [{ k: 'kind', v: sb.Kind }];\n if (sb.Alias) {\n rows.push({ k: 'alias', v: sb.Alias });\n }\n if (sb.Kind === 'Entity' && title !== sb.Ref) {\n rows.push({ k: 'entity', v: sb.Ref });\n }\n return {\n id: `src:${i}`,\n type: 'src',\n title,\n icon: SOURCE_ICONS[sb.Kind] ?? 'fa-solid fa-database',\n tag: sb.Kind,\n rows,\n x: 0,\n y: 0,\n hasIn: false,\n hasOut: true\n };\n }\n\n private stepNode(step: FeatureStep): DagNode {\n return {\n id: step.Id,\n type: step.Kind === 'embedding' ? 'emb' : 'feat',\n title: step.Label || step.Kind,\n icon: STEP_ICONS[step.Kind] ?? 'fa-solid fa-sliders',\n tag: step.Kind,\n rows: this.stepRows(step),\n x: 0,\n y: 0,\n hasIn: true,\n hasOut: true\n };\n }\n\n private stepRows(step: FeatureStep): { k: string; v: string }[] {\n switch (step.Kind) {\n case 'select': {\n const preview = step.Columns.length <= 3\n ? step.Columns.join(', ')\n : `${step.Columns.slice(0, 2).join(', ')} +${step.Columns.length - 2} more`;\n return [{ k: 'columns', v: preview || '0 cols' }];\n }\n case 'impute': return [{ k: 'column', v: step.Column }, { k: 'strategy', v: step.Strategy }];\n case 'standardize': {\n const preview = step.Columns.length <= 3\n ? step.Columns.join(', ')\n : `${step.Columns.slice(0, 2).join(', ')} +${step.Columns.length - 2} more`;\n return [{ k: 'columns', v: preview || '0 cols' }, { k: 'scaler', v: 'z-score' }];\n }\n case 'onehot': return [{ k: 'column', v: step.Column }];\n case 'bin': return [{ k: 'column', v: step.Column }, { k: 'bins', v: String(step.Bins) }];\n case 'embedding': return [{ k: 'entity', v: step.Entity }, { k: 'dims', v: String(step.Dims) }];\n case 'llm-derived': return [{ k: 'pipeline', v: step.FeaturePipelineRef }];\n case 'flow-agent': return [{ k: 'agent', v: step.FlowAgentRef }];\n case 'vision-llm': return [{ k: 'image', v: step.ImageColumn }, { k: 'output', v: step.Output.FeatureName }];\n default: return [];\n }\n }\n\n private targetNode(): DagNode {\n return {\n id: '__target',\n type: 'target',\n title: `Target: ${this.EditTargetVariable || '—'}`,\n icon: 'fa-solid fa-bullseye',\n tag: this.EditProblemType,\n rows: [\n { k: 'variable', v: this.EditTargetVariable || '—' },\n { k: 'type', v: this.EditProblemType }\n ],\n x: 0,\n y: 0,\n hasIn: true,\n hasOut: true\n };\n }\n\n private algoNode(): DagNode {\n const name = this.engine?.AlgorithmName(this.EditAlgorithmId) || 'Algorithm';\n const rows = [{ k: 'algorithm', v: name }];\n const hp = this.parse<Record<string, unknown>>(this.EditHyperparams, {});\n Object.entries(hp).slice(0, 1).forEach(([k, v]) => rows.push({ k, v: String(v) }));\n return {\n id: '__algo',\n type: 'algo',\n title: name,\n icon: 'fa-solid fa-shapes',\n tag: 'Algorithm',\n rows,\n x: 0,\n y: 0,\n hasIn: true,\n hasOut: true\n };\n }\n\n private markPorts(): void {\n const hasIn = new Set(this.Edges.map((e) => e.to));\n const hasOut = new Set(this.Edges.map((e) => e.from));\n for (const n of this.Nodes) {\n n.hasIn = hasIn.has(n.id);\n n.hasOut = hasOut.has(n.id);\n }\n }\n\n // ---- selection ----\n\n public SelectNode(id: string): void {\n this.SelectedId = id;\n }\n\n /** @deprecated Use {@link SelectNode}. */\n public selectNode(id: string): void {\n return this.SelectNode(id);\n }\n\n public get SelectedNode(): DagNode {\n return this.nodeById.get(this.SelectedId) ?? this.Nodes[0] ?? { id: '', type: 'feat', title: '—', icon: 'fa-solid fa-sliders', rows: [], x: 0, y: 0, hasIn: false, hasOut: false };\n }\n\n /** @deprecated Use {@link SelectedNode}. */\n public get selectedNode(): DagNode {\n return this.SelectedNode;\n }\n\n public get SelectedSourceIndex(): number {\n return this.SelectedId.startsWith('src:') ? Number(this.SelectedId.slice(4)) : -1;\n }\n\n /** @deprecated Use {@link SelectedSourceIndex}. */\n public get selectedSourceIndex(): number {\n return this.SelectedSourceIndex;\n }\n public get SelectedSource(): SourceBinding | null {\n const i = this.SelectedSourceIndex;\n return i >= 0 ? this.EditSources[i] ?? null : null;\n }\n\n /** @deprecated Use {@link SelectedSource}. */\n public get selectedSource(): SourceBinding | null {\n return this.SelectedSource;\n }\n public get SelectedStep(): FeatureStep | null {\n return this.EditSteps.find((s) => s.Id === this.SelectedId) ?? null;\n }\n\n /** @deprecated Use {@link SelectedStep}. */\n public get selectedStep(): FeatureStep | null {\n return this.SelectedStep;\n }\n public get OtherSteps(): FeatureStep[] {\n return this.EditSteps.filter((s) => s.Id !== this.SelectedId);\n }\n\n /** @deprecated Use {@link OtherSteps}. */\n public get otherSteps(): FeatureStep[] {\n return this.OtherSteps;\n }\n public get Algorithms() {\n return this.engine?.Algorithms ?? [];\n }\n\n /** @deprecated Use {@link Algorithms}. */\n public get algorithms() {\n return this.Algorithms;\n }\n\n // ---- source editing ----\n\n public SetSourceKind(kind: string): void { const s = this.SelectedSource; if (s) { s.Kind = kind as SourceBinding['Kind']; this.markDirty(); } }\n\n /** @deprecated Use {@link SetSourceKind}. */\n public setSourceKind(kind: string): void {\n return this.SetSourceKind(kind);\n }\n public SetSourceRef(ref: string): void { const s = this.SelectedSource; if (s) { s.Ref = ref; this.markDirty(); } }\n\n /** @deprecated Use {@link SetSourceRef}. */\n public setSourceRef(ref: string): void {\n return this.SetSourceRef(ref);\n }\n public SetSourceAlias(alias: string): void { const s = this.SelectedSource; if (s) { s.Alias = alias || undefined; this.markDirty(); } }\n\n /** @deprecated Use {@link SetSourceAlias}. */\n public setSourceAlias(alias: string): void {\n return this.SetSourceAlias(alias);\n }\n\n // ---- step editing ----\n\n public get ColumnsText(): string {\n const s = this.SelectedStep;\n if (s && (s.Kind === 'select' || s.Kind === 'standardize')) {\n return s.Columns.join(', ');\n }\n return '';\n }\n\n /** @deprecated Use {@link ColumnsText}. */\n public get columnsText(): string {\n return this.ColumnsText;\n }\n public SetColumns(text: string): void {\n const s = this.SelectedStep;\n if (s && (s.Kind === 'select' || s.Kind === 'standardize')) {\n s.Columns = text.split(',').map((c) => c.trim()).filter(Boolean);\n this.markDirty();\n }\n }\n\n /** @deprecated Use {@link SetColumns}. */\n public setColumns(text: string): void {\n return this.SetColumns(text);\n }\n public StepField(field: string): string {\n const s = this.SelectedStep as unknown as Record<string, unknown> | null;\n const v = s?.[field];\n return v == null ? '' : String(v);\n }\n\n /** @deprecated Use {@link StepField}. */\n public stepField(field: string): string {\n return this.StepField(field);\n }\n public SetStepStr(field: string, value: string): void {\n const s = this.SelectedStep as unknown as Record<string, unknown> | null;\n if (s) { s[field] = value; this.markDirty(); }\n }\n\n /** @deprecated Use {@link SetStepStr}. */\n public setStepStr(field: string, value: string): void {\n return this.SetStepStr(field, value);\n }\n public SetStepNum(field: string, value: string): void {\n const s = this.SelectedStep as unknown as Record<string, unknown> | null;\n const n = Number(value);\n if (s && !Number.isNaN(n)) { s[field] = n; this.markDirty(); }\n }\n\n /** @deprecated Use {@link SetStepNum}. */\n public setStepNum(field: string, value: string): void {\n return this.SetStepNum(field, value);\n }\n public SetStepLabel(label: string): void { const s = this.SelectedStep; if (s) { s.Label = label || undefined; this.markDirty(); } }\n\n /** @deprecated Use {@link SetStepLabel}. */\n public setStepLabel(label: string): void {\n return this.SetStepLabel(label);\n }\n\n public SetStepKind(kind: string): void {\n const idx = this.EditSteps.findIndex((s) => s.Id === this.SelectedId);\n if (idx < 0) {\n return;\n }\n const prev = this.EditSteps[idx];\n this.EditSteps[idx] = this.defaultStep(kind as FeatureStepKind, prev.Id, prev.Label, prev.Inputs);\n this.markDirty();\n }\n\n /** @deprecated Use {@link SetStepKind}. */\n public setStepKind(kind: string): void {\n return this.SetStepKind(kind);\n }\n\n public HasInput(stepId: string): boolean {\n return (this.SelectedStep?.Inputs ?? []).includes(stepId);\n }\n\n /** @deprecated Use {@link HasInput}. */\n public hasInput(stepId: string): boolean {\n return this.HasInput(stepId);\n }\n public ToggleInput(stepId: string): void {\n const s = this.SelectedStep;\n if (!s) {\n return;\n }\n const inputs = s.Inputs ?? [];\n if (inputs.includes(stepId)) {\n s.Inputs = inputs.filter((i) => i !== stepId);\n } else if (!this.createsCycle(stepId, s.Id)) {\n s.Inputs = [...inputs, stepId];\n } else {\n this.notifications.CreateSimpleNotification('That would create a cycle.', 'warning', 2500);\n return;\n }\n this.markDirty();\n }\n\n /** @deprecated Use {@link ToggleInput}. */\n public toggleInput(stepId: string): void {\n return this.ToggleInput(stepId);\n }\n private createsCycle(from: string, target: string): boolean {\n const byId = new Map(this.EditSteps.map((s) => [s.Id, s]));\n const seen = new Set<string>();\n const stack = [from];\n while (stack.length) {\n const id = stack.pop()!;\n if (id === target) {\n return true;\n }\n if (seen.has(id)) {\n continue;\n }\n seen.add(id);\n stack.push(...(byId.get(id)?.Inputs ?? []));\n }\n return false;\n }\n\n // ---- target / algorithm editing ----\n\n public SetTargetVariable(v: string): void { this.EditTargetVariable = v; this.markDirty(); }\n\n /** @deprecated Use {@link SetTargetVariable}. */\n public setTargetVariable(v: string): void {\n return this.SetTargetVariable(v);\n }\n public SetProblemType(v: string): void { this.EditProblemType = v as ProblemType; this.markDirty(); }\n\n /** @deprecated Use {@link SetProblemType}. */\n public setProblemType(v: string): void {\n return this.SetProblemType(v);\n }\n public SetAlgorithm(id: string): void { this.EditAlgorithmId = id; this.markDirty(); }\n\n /** @deprecated Use {@link SetAlgorithm}. */\n public setAlgorithm(id: string): void {\n return this.SetAlgorithm(id);\n }\n public SetHyperparams(v: string): void { this.EditHyperparams = v; this.markDirty(); }\n\n /** @deprecated Use {@link SetHyperparams}. */\n public setHyperparams(v: string): void {\n return this.SetHyperparams(v);\n }\n\n // ---- leakage / as-of / validation editing ----\n\n public get DenyText(): string { return this.EditLeakage.DenyFields.join(', '); }\n\n /** @deprecated Use {@link DenyText}. */\n public get denyText(): string {\n return this.DenyText;\n }\n public SetDeny(text: string): void { this.EditLeakage.DenyFields = parseDenyList(text); this.Dirty = true; }\n\n /** @deprecated Use {@link SetDeny}. */\n public setDeny(text: string): void {\n return this.SetDeny(text);\n }\n public SetThreshold(v: string): void { const n = Number(v); if (!Number.isNaN(n)) { this.EditLeakage.SingleFeatureDominanceThreshold = n; this.Dirty = true; } }\n\n /** @deprecated Use {@link SetThreshold}. */\n public setThreshold(v: string): void {\n return this.SetThreshold(v);\n }\n public SetAsOfMode(v: string): void { this.EditAsOf = { ...this.EditAsOf, Mode: v as AsOfStrategy['Mode'] }; this.Dirty = true; }\n\n /** @deprecated Use {@link SetAsOfMode}. */\n public setAsOfMode(v: string): void {\n return this.SetAsOfMode(v);\n }\n public SetAsOfColumn(v: string): void { this.EditAsOf.Column = v; this.Dirty = true; }\n\n /** @deprecated Use {@link SetAsOfColumn}. */\n public setAsOfColumn(v: string): void {\n return this.SetAsOfColumn(v);\n }\n public SetAsOfOffset(v: string): void { const n = Number(v); if (!Number.isNaN(n)) { this.EditAsOf.OffsetDays = n; this.Dirty = true; } }\n\n /** @deprecated Use {@link SetAsOfOffset}. */\n public setAsOfOffset(v: string): void {\n return this.SetAsOfOffset(v);\n }\n public SetValStrategy(v: string): void { this.EditValidation = { ...this.EditValidation, Strategy: v as ValidationStrategy['Strategy'] }; this.Dirty = true; }\n\n /** @deprecated Use {@link SetValStrategy}. */\n public setValStrategy(v: string): void {\n return this.SetValStrategy(v);\n }\n public SetTestSize(v: string): void { const n = Number(v); if (!Number.isNaN(n)) { this.EditValidation.TestSize = n; this.Dirty = true; } }\n\n /** @deprecated Use {@link SetTestSize}. */\n public setTestSize(v: string): void {\n return this.SetTestSize(v);\n }\n public SetK(v: string): void { const n = Number(v); if (!Number.isNaN(n)) { this.EditValidation.K = n; this.Dirty = true; } }\n\n /** @deprecated Use {@link SetK}. */\n public setK(v: string): void {\n return this.SetK(v);\n }\n public SetHoldout(v: string): void { const n = Number(v); if (!Number.isNaN(n)) { this.EditValidation.LockedHoldoutFraction = n; this.Dirty = true; } }\n\n /** @deprecated Use {@link SetHoldout}. */\n public setHoldout(v: string): void {\n return this.SetHoldout(v);\n }\n\n // ---- add / delete nodes ----\n\n public AddSource(): void {\n this.EditSources = [...this.EditSources, { Kind: 'Entity', Ref: '' }];\n this.markDirty();\n this.SelectedId = `src:${this.EditSources.length - 1}`;\n }\n\n /** @deprecated Use {@link AddSource}. */\n public addSource(): void {\n return this.AddSource();\n }\n public AddStep(): void {\n const id = `step_${++this.stepSeq}`;\n this.EditSteps = [...this.EditSteps, this.defaultStep('select', id)];\n this.markDirty();\n this.SelectedId = id;\n }\n\n /** @deprecated Use {@link AddStep}. */\n public addStep(): void {\n return this.AddStep();\n }\n public DeleteSelected(): void {\n const si = this.SelectedSourceIndex;\n if (si >= 0) {\n this.EditSources = this.EditSources.filter((_s, i) => i !== si);\n this.markDirty();\n this.SelectedId = this.Nodes[0]?.id ?? '';\n return;\n }\n const step = this.SelectedStep;\n if (step) {\n this.EditSteps = this.EditSteps.filter((s) => s.Id !== step.Id);\n for (const s of this.EditSteps) {\n if (s.Inputs?.includes(step.Id)) {\n s.Inputs = s.Inputs.filter((i) => i !== step.Id);\n }\n }\n this.markDirty();\n this.SelectedId = this.Nodes[0]?.id ?? '';\n }\n }\n\n /** @deprecated Use {@link DeleteSelected}. */\n public deleteSelected(): void {\n return this.DeleteSelected();\n }\n\n private defaultStep(kind: FeatureStepKind, id: string, label?: string, inputs?: string[]): FeatureStep {\n const base = { Id: id, Label: label, Inputs: inputs };\n switch (kind) {\n case 'select': return { ...base, Kind: 'select', Columns: [] };\n case 'impute': return { ...base, Kind: 'impute', Column: '', Strategy: 'mean' };\n case 'standardize': return { ...base, Kind: 'standardize', Columns: [] };\n case 'onehot': return { ...base, Kind: 'onehot', Column: '' };\n case 'bin': return { ...base, Kind: 'bin', Column: '', Bins: 5 };\n case 'embedding': return { ...base, Kind: 'embedding', Entity: '', EmbeddingModelRef: '', Dims: 384 };\n case 'llm-derived': return { ...base, Kind: 'llm-derived', FeaturePipelineRef: '', Columns: [] };\n case 'flow-agent': return { ...base, Kind: 'flow-agent', FlowAgentRef: '', InputMapping: {}, OutputMapping: {} };\n case 'vision-llm': return { ...base, Kind: 'vision-llm', ImageColumn: '', Prompt: { InlinePrompt: '' }, Output: { FeatureName: '', Kind: 'category' } };\n }\n }\n\n // ---- save / validate / train ----\n\n public async save(): Promise<void> {\n const p = this.SelectedPipeline;\n if (!p || this.Busy) {\n return;\n }\n this.Busy = true;\n try {\n p.SourceBindings = JSON.stringify(this.EditSources);\n p.FeatureSteps = JSON.stringify({ Steps: this.EditSteps });\n p.TargetVariable = this.EditTargetVariable;\n p.ProblemType = this.EditProblemType;\n p.AlgorithmID = this.EditAlgorithmId;\n p.Hyperparameters = this.EditHyperparams || null;\n p.LeakageGuard = JSON.stringify(this.EditLeakage);\n p.AsOfStrategy = JSON.stringify(this.EditAsOf);\n p.ValidationStrategy = JSON.stringify(this.EditValidation);\n const ok = await p.Save();\n if (ok) {\n this.Dirty = false;\n this.notifications.CreateSimpleNotification(`Saved \"${p.Name}\".`, 'success', 3000);\n } else {\n this.notifications.CreateSimpleNotification(`Save failed: ${p.LatestResult?.CompleteMessage ?? 'unknown error'}`, 'error', 5000);\n }\n } finally {\n this.Busy = false;\n this.cdr.detectChanges();\n }\n }\n\n public validate(): void {\n const issues: string[] = [];\n if (this.EditSources.length === 0) {\n issues.push('at least one source');\n }\n if (!this.EditTargetVariable) {\n issues.push('a target variable');\n }\n if (!this.EditAlgorithmId) {\n issues.push('an algorithm');\n }\n try {\n JSON.parse(this.EditHyperparams || '{}');\n } catch {\n issues.push('valid hyperparameters JSON');\n }\n if (issues.length > 0) {\n this.notifications.CreateSimpleNotification(`Pipeline needs ${issues.join(', ')}.`, 'warning', 4500);\n } else {\n this.notifications.CreateSimpleNotification('Pipeline looks valid — ready to train.', 'success', 3000);\n }\n }\n\n public async train(): Promise<void> {\n const p = this.SelectedPipeline;\n if (!p || this.Busy || this.Dirty) {\n return;\n }\n this.Busy = true;\n this.notifications.CreateSimpleNotification(`Training \"${p.Name}\"…`, 'info', 2500);\n try {\n const op = new PredictiveStudioTrainModelOperation();\n const result = await op.Execute({ pipelineId: p.ID }, { provider: this.provider ?? undefined, user: this.CurrentUser ?? undefined });\n if (result.Success && result.Output) {\n const flagged = result.Output.leakageFlagged ? ' (leakage flag raised — needs sign-off)' : '';\n this.notifications.CreateSimpleNotification(`Trained ${p.Name} v${result.Output.version}${flagged}. See Registry.`, 'success', 5000);\n await this.engine.Config(true, this.CurrentUser ?? undefined, this.provider ?? undefined);\n } else {\n this.notifications.CreateSimpleNotification(result.ErrorMessage || 'Training failed.', 'error', 6000);\n }\n } catch (e) {\n this.notifications.CreateSimpleNotification(`Training error: ${e instanceof Error ? e.message : String(e)}`, 'error', 6000);\n } finally {\n this.Busy = false;\n this.cdr.detectChanges();\n }\n }\n\n public Refine(): void {\n const p = this.SelectedPipeline;\n if (!p) {\n this.AskAgent.emit(this.StarterPrompt);\n return;\n }\n const predicts = p.TargetVariable ? ` (predicts ${p.TargetVariable})` : '';\n this.AskAgent.emit(`Help me refine the \"${p.Name}\" training pipeline${predicts}. Suggest improvements to the features or algorithm to raise holdout performance.`);\n }\n\n /** @deprecated Use {@link Refine}. */\n public refine(): void {\n return this.Refine();\n }\n\n public StatusClass(status: string): string {\n switch (status) {\n case 'Published': return 'published';\n case 'Validated': return 'validated';\n default: return 'draft';\n }\n }\n\n /** @deprecated Use {@link StatusClass}. */\n public statusClass(status: string): string {\n return this.StatusClass(status);\n }\n\n public NodeTypeLabel(type: NodeType): string {\n switch (type) {\n case 'src': return 'Source';\n case 'feat': return 'Feature Step';\n case 'emb': return 'Embedding';\n case 'target': return 'Target';\n case 'algo': return 'Algorithm';\n case 'output': return 'Output Model';\n }\n }\n\n /** @deprecated Use {@link NodeTypeLabel}. */\n public nodeTypeLabel(type: NodeType): string {\n return this.NodeTypeLabel(type);\n }\n\n // ---- Graph layered layout ----\n\n private layoutGraph(): void {\n this.nodeById.clear();\n for (const n of this.Nodes) {\n this.nodeById.set(n.id, n);\n }\n const inEdges = new Map<string, string[]>();\n for (const n of this.Nodes) {\n inEdges.set(n.id, []);\n }\n for (const e of this.Edges) {\n inEdges.get(e.to)?.push(e.from);\n }\n const layerOf = new Map<string, number>();\n const computeLayer = (id: string, path: Set<string>): number => {\n if (layerOf.has(id)) {\n return layerOf.get(id)!;\n }\n if (path.has(id)) {\n return 0;\n }\n path.add(id);\n const preds = inEdges.get(id) ?? [];\n let l = 0;\n for (const p of preds) {\n l = Math.max(l, computeLayer(p, path) + 1);\n }\n path.delete(id);\n layerOf.set(id, l);\n return l;\n };\n for (const n of this.Nodes) {\n computeLayer(n.id, new Set());\n }\n\n const algoNode = this.Nodes.find((n) => n.id === '__algo');\n const outNode = this.Nodes.find((n) => n.id === '__output');\n let maxFeatureLayer = 0;\n for (const n of this.Nodes) {\n if (n.id !== '__algo' && n.id !== '__output') {\n maxFeatureLayer = Math.max(maxFeatureLayer, layerOf.get(n.id) ?? 0);\n }\n }\n if (algoNode) {\n layerOf.set('__algo', maxFeatureLayer + 1);\n }\n if (outNode) {\n layerOf.set('__output', maxFeatureLayer + 2);\n }\n\n const layers = new Map<number, DagNode[]>();\n for (const n of this.Nodes) {\n const l = layerOf.get(n.id) ?? 0;\n const arr = layers.get(l) ?? [];\n arr.push(n);\n layers.set(l, arr);\n }\n\n let maxCol = 0;\n let maxRow = 0;\n layers.forEach((nodesInCol, col) => {\n maxCol = Math.max(maxCol, col);\n maxRow = Math.max(maxRow, nodesInCol.length);\n });\n\n const maxCanvasHeight = PAD_Y * 2 + maxRow * NODE_H + Math.max(0, maxRow - 1) * ROW_GAP;\n\n layers.forEach((nodesInCol, col) => {\n const colHeight = nodesInCol.length * NODE_H + Math.max(0, nodesInCol.length - 1) * ROW_GAP;\n // Vertically center this column relative to the tallest column in the graph\n const colStartY = PAD_Y + Math.max(0, Math.floor((maxCanvasHeight - PAD_Y * 2 - colHeight) / 2));\n nodesInCol.forEach((n, row) => {\n n.x = PAD_X + col * (NODE_W + COL_GAP);\n n.y = colStartY + row * (NODE_H + ROW_GAP);\n });\n });\n\n this.CanvasW = Math.max(920, PAD_X * 2 + (maxCol + 1) * NODE_W + maxCol * COL_GAP);\n this.CanvasH = Math.max(540, maxCanvasHeight);\n }\n\n public EdgePath(edge: DagEdge): string {\n const from = this.nodeById.get(edge.from);\n const to = this.nodeById.get(edge.to);\n if (!from || !to) {\n return '';\n }\n const x1 = from.x + NODE_W;\n const y1 = from.y + NODE_H / 2;\n // Account for port diameter / marker-end: end 2px before port center\n const x2 = to.x - 2;\n const y2 = to.y + NODE_H / 2;\n const dx = Math.max(36, Math.abs(x2 - x1) * 0.45);\n return `M ${x1} ${y1} C ${x1 + dx} ${y1}, ${x2 - dx} ${y2}, ${x2} ${y2}`;\n }\n\n /** @deprecated Use {@link EdgePath}. */\n public edgePath(edge: DagEdge): string {\n return this.EdgePath(edge);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ps-pipelines.component.js","sourceRoot":"","sources":["../../../src/PredictiveStudio/components/ps-pipelines.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAqB,MAAM,EAAiB,iBAAiB,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvJ,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAqB,QAAQ,EAAY,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAA+C,mCAAmC,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACjJ,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EACL,2BAA2B,EAC3B,aAAa,GASd,MAAM,wCAAwC,CAAC;;;;;;mDAihBZ,IAAI;;;;;IA3c9B,AADF,8BAAuD,cAC1B;IAAA,uBAA2C;IAAA,iBAAO;IAC7E,0BAAI;IAAA,yCAAyB;IAAA,iBAAK;IAClC,yBAAG;IACD,0OAGF;IAAA,iBAAI;IAEF,AADF,8BAA8E,gBAEnD;IAAvB,wLAAS,mBAAY,KAAC;IACtB,uBAAgC;IAAC,+BACnC;IAAA,iBAAS;IACT,kCACyC;IAAvC,yLAAS,0CAA4B,KAAC;IACtC,yBAAiC;IAAC,gCACpC;IAEJ,AADE,AADE,iBAAS,EACL,EACF;;;;IAKA,AADF,+BAAyF,iBAC+C;IAAvF,uMAAS,sBAAe,KAAC;IACtE,wBAAyC;IAC3C,iBAAS;IACT,+BAAsC;IAAA,uBAA2C;IACnF,AADmF,iBAAM,EACnF;;;IAiDU,gCAA8B;IAAA,wBAAwD;IAAC,YAAQ;IAAA,iBAAO;;IAAf,eAAQ;IAAR,+BAAQ;;;;IAdrG,kCACkF;IAAhD,qOAAS,8BAAoB,KAAC;IAE5D,AADF,+BAAyB,cACG;IAAA,YAAY;IAAA,iBAAM;IAC5C,gCAAuD;IAAA,YAAc;IACvE,AADuE,iBAAO,EACxE;IAEJ,AADF,+BAA0B,eACI;IAAA,YAAyB;IAAA,iBAAO;IAC5D,4BAAM;IAAA,uBAAM;IAAA,iBAAO;IACnB,iCAA4B;IAAA,aAAkC;IAChE,AADgE,iBAAO,EACjE;IAEJ,AADF,gCAAmF,YAC3E;IAAA,aAAmB;IAAA,iBAAO;IAChC,6HAAuC;IAI3C,AADE,iBAAM,EACC;;;;;IAjB6B,qDAAkC;IACP,iCAAgB;IAEnD,eAAY;IAAZ,+BAAY;IACf,cAA+B;IAA/B,8CAA+B;IAAC,cAAc;IAAd,iCAAc;IAGzC,eAAyB;IAAzB,mDAAyB;IAEzB,eAAkC;IAAlC,qDAAkC;IAGxD,eAAmB;IAAnB,sCAAmB;IACzB,cAEC;IAFD,qFAEC;;;;IAxCL,AADF,AADF,AADF,AAFF,yCAAqE,cAER,cAC1B,cACK,SAC5B;IAAA,YAA0C;IAAA,iBAAK;IAEjD,AADF,+BAAqD,iBACgD;IAAvB,uMAAS,mBAAY,KAAC;IAChG,uBAAgC;IAAC,qBACnC;IAAA,iBAAS;IACT,mCAA+H;IAAjF,wMAAS,sBAAe,KAAC;IACrE,yBAAwC;IAG9C,AADE,AADE,iBAAS,EACL,EACF;IACN,gCAA2B;IACzB,yBAA4C;IAC5C,kCAA6G;IAApE,6MAAS,4BAAqB,KAAC;IAC1E,AADE,iBAA6G,EACzG;IAEJ,AADF,gCAA6B,kBACuE;IAA3B,wMAAS,iBAAU,KAAK,CAAC,KAAC;IAAC,oBAAG;IAAA,iBAAS;IAC9G,mCAA8G;IAAjC,wMAAS,iBAAU,WAAW,CAAC,KAAC;IAAC,0BAAS;IAAA,iBAAS;IAChI,mCAAsG;IAA7B,wMAAS,iBAAU,OAAO,CAAC,KAAC;IAAC,sBAAK;IAAA,iBAAS;IACpH,mCAAoG;IAA5B,wMAAS,iBAAU,MAAM,CAAC,KAAC;IAAC,wBAAO;IAE/G,AADE,AAD6G,iBAAS,EAChH,EACF;IAGN,gCAAyD;IACvD,2HAmBC;IAGP,AADE,AADE,iBAAM,EACF,EACQ;;;IAnDsC,AAAf,AAAxB,4CAAuB,eAAe,eAAe;IAKxD,eAA0C;IAA1C,0EAA0C;IAY3B,eAAqB;IAArB,0CAAqB;IAGT,eAAuC;IAAvC,uDAAuC;IACvC,eAA6C;IAA7C,6DAA6C;IAC7C,eAAyC;IAAzC,yDAAyC;IACzC,eAAwC;IAAxC,wDAAwC;IAMzE,eAmBC;IAnBD,uCAmBC;;;IAqBC,gCAA8B;IAAA,wBAAwD;IAAC,YAAQ;IAAA,iBAAO;;IAAf,eAAQ;IAAR,+BAAQ;;;IAFjG,gCAAsE;IAAA,YAA6B;IAAA,iBAAO;IAC1G,qHAAsD;;;;IAD/B,iEAA8C;IAAC,cAA6B;IAA7B,oDAA6B;IACnG,cAEC;IAFD,qGAEC;;;IA0BS,gCAA4D;IAAA,wBAA+B;IAAC,wBAAO;IAAA,iBAAO;;;IAoE5G,AADF,+BAA4B,eACI;IAAA,YAA+B;IAAA,iBAAO;IACpE,iCAAqB;IAAA,YAAY;IACnC,AADmC,iBAAO,EACpC;;;IAF0B,eAA+B;IAA/B,kDAA+B;IACxC,eAAY;IAAZ,+BAAY;;;IAsBzB,iCAA0B;IAAA,YAAS;IAAA,iBAAO;;;IAAhB,cAAS;IAAT,6BAAS;;;IAFvC,gCAA0B;IACxB,4KAEC;IACH,iBAAM;;;IAHJ,cAEC;IAFD,uBAEC;;;IAJL,0IAAuB;;IAAvB,yCAMC;;;IAIC,gCAA4B;IAC1B,yBAAkD;IAClD,4BAAM;IAAA,YAA6B;IACrC,AADqC,iBAAO,EACtC;;;IADE,eAA6B;IAA7B,sDAA6B;;;IAHvC,0IAAyB;;IAAzB,yCAKC;;;;IApBL,gCAA8F;IAA5B,sOAAS,4BAAiB,KAAC;IAEzF,AADF,gCAAoC,eACJ;IAAA,YAAyB;IAAA,iBAAO;IAC9D,iCAAqB;IAAA,YAAa;IACpC,AADoC,iBAAO,EACrC;IACN,gHAAmC;IASnC,gHAAoC;IAQtC,iBAAM;;;;;;IApB4B,eAAyB;IAAzB,iDAAyB;IAClC,eAAa;IAAb,iCAAa;IAEpC,cAQC;IARD,+EAQC;IACD,cAOC;IAPD,8EAOC;;;IA8BH,iCAA0D;IAAA,gDAAgC;IAAA,iBAAO;;;IAG/F,iCAA2B;IAAA,YAAS;IAAA,iBAAO;;;IAAhB,cAAS;IAAT,6BAAS;;;IADtC,yJAEC;;;IAFD,4CAEC;;;IAwDP,gCAA8F;IAC5F,yBAA4G;IAC5G,gEAA+C;IAAA,8BAAQ;IAAA,qBAAK;IAAA,iBAAS;IAAC,oDACxE;IAAA,iBAAM;;;IAsBQ,iCAA6B;IAAA,yBAAkC;IAAC,uBAAM;IAAA,iBAAO;;;;IAPrF,+BAAqK;IAA9F,oPAAS,gCAAqB,KAAC;IAGhG,AADF,AADF,0BAAI,eACmD,aAC0D;IAA1D,mOAAS,wBAAwB,wBAAE,gCAAqB,KAAC;IAC1G,8BAAQ;IAAA,YAAgB;IAC1B,AAD0B,iBAAS,EAC/B;IACJ,6IAAgC;IAIpC,AADE,iBAAM,EACH;IACL,0BAAI;IAAA,YAAgC;IAAA,iBAAK;IACrC,AAAJ,0BAAI,cAAQ;IAAA,aAAsB;IAAS,AAAT,iBAAS,EAAK;IAC5C,AAAJ,2BAAI,gBAAuD;IAAA,aAAc;IAAO,AAAP,iBAAO,EAAK;IACrF,2BAAI;IAAA,aAAgC;;IAAA,iBAAK;IAEvC,AADF,gCAA6B,mBACsH;IAAhG,yOAAS,wBAAwB,wBAAE,gCAAqB,KAAC;IACxG,0BAAsD;IAG5D,AADE,AADE,iBAAS,EACN,EACF;;;;IApBD,0DAA6C;IAIjC,eAAgB;IAAhB,yCAAgB;IAE1B,cAEC;IAFD,uDAEC;IAGD,eAAgC;IAAhC,oDAAgC;IACxB,eAAsB;IAAtB,iDAAsB;IACP,eAA+B;IAA/B,+CAA+B;IAAC,cAAc;IAAd,kCAAc;IACrE,eAAgC;IAAhC,sEAAgC;;;IAxBtC,AADF,AADF,AADF,kCAAwB,YACf,SACD,SACE;IAAA,uBAAO;IAAA,iBAAK;IAChB,0BAAI;IAAA,yBAAS;IAAA,iBAAK;IAClB,0BAAI;IAAA,6BAAa;IAAA,iBAAK;IACtB,0BAAI;IAAA,uBAAM;IAAA,iBAAK;IACf,2BAAI;IAAA,2BAAU;IAAA,iBAAK;IACnB,sBAAS;IAEb,AADE,iBAAK,EACC;IACR,8BAAO;IACL,yIAsBC;IAEL,AADE,iBAAQ,EACF;;;IAxBJ,gBAsBC;IAtBD,oCAsBC;;;;IAkBD,mCAEwC;IADtC,yOAAS,kCAAuB,KAAC;IAEjC,yBAAsD;IAAC,mCACzD;IAAA,iBAAS;IACT,mCAE4C;IAD1C,yOAAS,mCAAwB,KAAC;IAElC,yBAAiC;IAAC,oCACpC;IAAA,iBAAS;;;IAUP,4BAAM;IAAA,YAAwF;IAAA,iBAAO;;;IAA/F,cAAwF;IAAxF,kIAAwF;;;IAE9F,iCAA0C;IAAA,gEAAgD;IAAA,iBAAO;;;;IApQrG,AADF,AADF,AADF,AAFF,+BAA4B,cAEC,cACI,cACM,eACJ;IAAA,iBAAC;IAAA,iBAAO;IAEjC,AADF,2BAAK,SACC;IAAA,8DAA8C;IAAA,iBAAK;IACvD,gCAAgC;IAAA,2GAA0F;IAGhI,AADE,AADE,AAD4H,iBAAO,EAC7H,EACF,EACF;IAIF,AADF,AADF,gCAAuB,eACM,aAClB;IAAA,8BAAa;IAAA,iBAAQ;IAC5B,gCAAiB;IAAA,yBAAuE;IAAC,aAAwC;IAAA,iBAAM;IACvI,gCAAiB;IAAA,sCAAqB;IACxC,AADwC,iBAAM,EACxC;IAEJ,AADF,gCAA2B,aAClB;IAAA,gCAAe;IAAA,iBAAQ;IAC9B,gCAAiB;IAAA,yBAA2E;IAAC,aAAqC;IAAA,iBAAM;IACxI,gCAAiB;IAAA,aAA6B;IAChD,AADgD,iBAAM,EAChD;IAEJ,AADF,gCAA2B,aAClB;IAAA,6BAAY;IAAA,iBAAQ;IAC3B,gCAAiB;IAAA,yBAA2E;IAAC,aAAqB;IAAA,iBAAM;IACxH,gCAAiB;IAAA,wCAAuB;IAC1C,AAD0C,iBAAM,EAC1C;IAEJ,AADF,gCAAmF,aAC1E;IAAA,sCAAqB;IAAA,iBAAQ;IACpC,gCAAiB;IAAA,yBAAmF;IAAC,aAAe;IAAA,iBAAM;IAC1H,gCAAiB;IAAA,mDAAkC;IAGzD,AADE,AADE,AADqD,iBAAM,EACrD,EACF,EACF;IAMA,AADF,AADF,AADF,gCAA2B,eACI,eACM,gBACJ;IAAA,kBAAC;IAAA,iBAAO;IAEjC,AADF,4BAAK,UACC;IAAA,+DAA8C;IAAA,iBAAK;IACvD,iCAAgC;IAAA,qGAAoF;IAExH,AADE,AADsH,iBAAO,EACvH,EACF;IAEJ,AADF,gCAAoC,kBACyE;IAAtB,yMAAS,kBAAW,KAAC;IAAC,wBAAgC;IAAC,4BAAU;IAAA,iBAAS;IAC/J,mCAAuG;IAApB,yMAAS,gBAAS,KAAC;IAAC,yBAAmC;IAAC,0BAAQ;IAEvJ,AADE,AADqJ,iBAAS,EACxJ,EACF;IAMA,AADF,AADF,AAFF,gCAAuB,eAES,eACJ,YAChB;IAAA,yBAAoC;IAAC,aAA0C;IACvF,AADuF,iBAAO,EACxF;IACN,gCAAwB;IACtB,sIAKC;IAEL,AADE,iBAAM,EACF;IAKF,AADF,AADF,gCAA8B,eACJ,YAChB;IAAA,yBAAmC;IAAC,aAA2C;IACvF,AADuF,iBAAO,EACxF;IACN,gCAAwB;IACtB,uHAwBC;IAEL,AADE,iBAAM,EACF;IAKF,AADF,AADF,gCAA8B,eACJ,YAChB;IAAA,yBAAkC;IAAC,oCAAkB;IAC7D,AAD6D,iBAAO,EAC9D;IAGF,AADF,AADF,gCAAwB,eACM,gBACI;IAAA,aAA2B;IAAA,iBAAO;IAChE,iCAA6B;IAAA,uBAAM;IAI3C,AADE,AADE,AADE,AADqC,iBAAO,EACtC,EACF,EACF,EACF;IAGN,gCAA4B;IAC1B,yBAAyC;IAEvC,AADF,gCAAqB,eACyD;IAAA,qCAAoB;IAAA,iBAAM;IACtG,gCAA6E;IAC3E,kGAAgF;IAAA,+BAAQ;IAAA,aAAiD;IAC3I,AAD2I,iBAAS,EAC9I;IACN,gCAA6B;IAGzB,AAFF,wHAA2C,uFAElC;IAQjB,AADE,AADE,AADE,iBAAM,EACF,EACF,EACF;IAMA,AADF,AADF,AADF,iCAA2B,gBACI,gBACM,iBACJ;IAAA,mBAAC;IAAA,iBAAO;IAEjC,AADF,6BAAK,WACC;IAAA,8DAA4C;IAAA,iBAAK;IACrD,kCAAgC;IAAA,sHAAoG;IAG1I,AADE,AADE,AADsI,iBAAO,EACvI,EACF,EACF;IAIF,AADF,AADF,iCAAuB,gBACM,cAClB;IAAA,qCAAmB;IAAA,iBAAQ;IAClC,iCAAiB;IAAA,cAA6B;IAAA,iBAAM;IACpD,iCAAiB;IAAA,wCAAsB;IACzC,AADyC,iBAAM,EACzC;IAEJ,AADF,iCAA2B,cAClB;IAAA,gCAAc;IAAA,iBAAQ;IAC7B,iCAAiB;IAAA,cAA8D;IAAA,iBAAM;IACrF,iCAAiB;IAAA,wCAAsB;IACzC,AADyC,iBAAM,EACzC;IAEJ,AADF,iCAA2B,cAClB;IAAA,+BAAa;IAAA,iBAAQ;IAC5B,iCAAiB;IAAA,cAA+I;IAAA,iBAAM;IACtK,iCAAiB;IAAA,qCAAmB;IACtC,AADsC,iBAAM,EACtC;IAEJ,AADF,iCAA2B,cAClB;IAAA,qCAAmB;IAAA,iBAAQ;IAClC,iCAAiB;IAAA,2BAAuE;IAAC,2BAAQ;IAAA,iBAAM;IACvG,iCAAiB;IAAA,iDAA+B;IAGtD,AADE,AADE,AADkD,iBAAM,EAClD,EACF,EACF;IAMA,AADF,AADF,AADF,iCAA2B,gBACI,gBACM,iBACJ;IAAA,mBAAC;IAAA,iBAAO;IAEjC,AADF,6BAAK,WACC;IAAA,wDAAsC;IAAA,iBAAK;IAC/C,kCAAgC;IAAA,qFAAmE;IAGzG,AADE,AADE,AADqG,iBAAO,EACtG,EACF,EACF;IAOJ,AALF,yHAAmC,sGAK1B;IAuCX,iBAAM;IAMA,AADF,AADF,AADF,iCAA2B,gBACI,gBACM,iBACJ;IAAA,mBAAC;IAAA,iBAAO;IAEjC,AADF,6BAAK,WACC;IAAA,qDAAmC;IAAA,iBAAK;IAC5C,kCAAgC;IAAA,oEAAkD;IAEtF,AADE,AADoF,iBAAO,EACrF,EACF;IACN,kCAAsD;IACpD,6GAA8B;IAalC,AADE,iBAAM,EACF;IAIF,AADF,AADF,kCAA4B,gBACC,cAClB;IAAA,sCAAoB;IAAA,iBAAQ;IACnC,iCAAiB;IAGb,AAFF,qHAA8B,oGAErB;IAGX,iBAAM;IACN,iCAAiB;IAAA,cAA6F;IAChH,AADgH,iBAAM,EAChH;IAEJ,AADF,kCAAgH,cACvG;IAAA,qCAAmB;IAAA,iBAAQ;IAClC,kCAAuD;IACrD,0BAAwC;IAAC,yBAC3C;IAAA,iBAAM;IACN,iCAAiB;IAAA,mDAAiC;IAK1D,AAFE,AADE,AADE,AADoD,iBAAM,EACpD,EACF,EACF,EAEF;;;;;IAxQ2F,gBAAwC;IAAxC,4EAAwC;IAKpC,eAAqC;IAArC,kEAAqC;IACjH,eAA6B;IAA7B,6DAA6B;IAI+C,eAAqB;IAArB,kDAAqB;IAKb,eAAe;IAAf,4CAAe;IA0BvE,gBAA0C;IAA1C,2EAA0C;IAGrF,eAKC;IALD,iCAKC;IAOyC,eAA2C;IAA3C,4EAA2C;IAGrF,eAwBC;IAxBD,+BAwBC;IAW+B,gBAA2B;IAA3B,kDAA2B;IAa6B,gBAAiD;IAAjD,wEAAiD;IAGzI,eAMC;IAND,uEAMC;IAqBc,gBAA6B;IAA7B,oDAA6B;IAK7B,eAA8D;IAA9D,8FAA8D;IAK9D,eAA+I;IAA/I,oLAA+I;IAuBpK,gBA2CC;IA3CD,gEA2CC;IAcG,gBAWC;IAXD,yEAWC;IAQC,eAIC;IAJD,0EAIC;IAEc,eAA6F;IAA7F,gNAA6F;;;;IA2D1G,4BAGiG;;;;IAF3F,uDAAmC;;;;IActB,iCAAqB;IAAA,YAAc;IAAA,iBAAO;;;IAArB,cAAc;IAAd,kCAAc;;;IAKhD,AADF,gCAAoB,gBACF;IAAA,YAAW;IAAA,iBAAO;IAClC,iCAAgC;IAAA,YAAW;IAC7C,AAD6C,iBAAO,EAC9C;;;IAFY,eAAW;IAAX,+BAAW;IACX,cAAe;IAAf,iCAAe;IAAC,cAAW;IAAX,+BAAW;;;IAI9B,4BAA6B;;;IAC5B,4BAA8B;;;;IAnBpD,gCAIgC;IAA9B,wOAAS,8BAAmB,KAAC;IAC7B,gCAAgB;IACd,yBAA0C;IAC1C,iCAAiD;IAAA,YAAgB;IAAA,iBAAO;IACxE,6HAAgB;IAClB,iBAAM;IACN,gCAAgB;IACd,6HAKC;IACH,iBAAM;IACN,6HAAkB;IAClB,+HAAmB;IACrB,iBAAM;;;;IAjBJ,AADyB,AAAzB,wCAAwB,yBAAwB,8BACvB;IAFH,6DAAyC;IAA/D,uCAAqB;;IAKH,eAAqB;IAArB,uCAAqB;IACT,cAAoB;IAApB,sCAAoB;IAAC,cAAgB;IAAhB,oCAAgB;IACjE,cAA6D;IAA7D,uCAA6D;IAG7D,eAKC;IALD,4BAKC;IAEH,eAAkD;IAAlD,yCAAkD;IAClD,cAAoD;IAApD,2CAAoD;;;;IAkCtD,mCAA4G;IAA3B,uOAAS,uBAAgB,KAAC;IAAC,yBAAiC;IAAA,iBAAS;;;IAO/G,mCAAoB;IAAA,YAAO;IAAA,iBAAS;;;IAA5B,6BAAW;IAAC,cAAO;IAAP,2BAAO;;;;IAF5C,AAAtB,gCAAsB,YAAO;IAAA,oBAAI;IAAA,iBAAQ;IACvC,mCAAkG;IAA3C,+OAAU,qBAAc,uBAAgB,CAAC,KAAC;IAC/F,yKAAyE;IAE7E,AADE,iBAAS,EACL;IACgB,AAAtB,gCAAsB,YAAO;IAAA,+CAA+B;IAAA,iBAAQ;IAClE,kCAA4G;IAA3C,4OAAS,oBAAa,uBAAgB,CAAC,KAAC;IAC3G,AADE,iBAA4G,EACxG;IACgB,AAAtB,iCAAsB,aAAO;IAAA,iCAAgB;IAAA,iBAAQ;IACnD,mCAAsH;IAA7C,6OAAS,sBAAe,uBAAgB,CAAC,KAAC;IACrH,AADE,iBAAsH,EAClH;;;IATqB,eAA6B;IAA7B,kDAA6B;IACpD,cAAyE;IAAzE,iCAAyE;IAIvC,eAA4B;IAA5B,iDAA4B;IAG5B,eAAoC;IAApC,yDAAoC;;;IAMrC,mCAAoB;IAAA,YAAO;IAAA,iBAAS;;;IAA5B,6BAAW;IAAC,cAAO;IAAP,2BAAO;;;;IAOrB,AAAtB,gCAAsB,YAAO;IAAA,yCAAyB;IAAA,iBAAQ;IAAA,kCAAmG;IAAzC,oPAAS,kBAAW,uBAAgB,CAAC,KAAC;IAAG,AAAnG,iBAAmG,EAAM;;;IAArE,eAAqB;IAArB,0CAAqB;;;;IAC5F,AAAtB,gCAAsB,YAAO;IAAA,yCAAyB;IAAA,iBAAQ;IAAA,kCAAmG;IAAzC,oPAAS,kBAAW,uBAAgB,CAAC,KAAC;IAAG,AAAnG,iBAAmG,EAAM;;;IAArE,eAAqB;IAArB,0CAAqB;;;IAGqD,mCAAoB;IAAA,YAAO;IAAA,iBAAS;;;IAA5B,6BAAW;IAAC,cAAO;IAAP,2BAAO;;;;IADvM,AAAtB,gCAAsB,YAAO;IAAA,sBAAM;IAAA,iBAAQ;IAAA,kCAAqH;IAAnD,oPAAS,kBAAW,QAAQ,EAAE,uBAAgB,CAAC,KAAC;IAAG,AAArH,iBAAqH,EAAM;IAChJ,AAAtB,gCAAsB,YAAO;IAAA,wBAAQ;IAAA,iBAAQ;IAAA,mCAA6G;IAApD,uPAAU,kBAAW,UAAU,EAAE,uBAAgB,CAAC,KAAC;IAAC,iLAA8E;IAAS,AAAT,iBAAS,EAAM;;;IADxK,eAA6B;IAA7B,kDAA6B;IACtC,eAA+B;IAA/B,oDAA+B;IAAqD,cAA8E;IAA9E,sCAA8E;;;;IAEjM,AAAtB,gCAAsB,YAAO;IAAA,sBAAM;IAAA,iBAAQ;IAAA,kCAAqH;IAAnD,oPAAS,kBAAW,QAAQ,EAAE,uBAAgB,CAAC,KAAC;IAAG,AAArH,iBAAqH,EAAM;;;IAAvF,eAA6B;IAA7B,kDAA6B;;;;IAEvG,AAAtB,gCAAsB,YAAO;IAAA,sBAAM;IAAA,iBAAQ;IAAA,kCAAqH;IAAnD,oPAAS,kBAAW,QAAQ,EAAE,uBAAgB,CAAC,KAAC;IAAG,AAArH,iBAAqH,EAAM;IAChJ,AAAtB,gCAAsB,YAAO;IAAA,oBAAI;IAAA,iBAAQ;IAAA,kCAAmH;IAAjD,oPAAS,kBAAW,MAAM,EAAE,uBAAgB,CAAC,KAAC;IAAG,AAAnH,iBAAmH,EAAM;;;IADnF,eAA6B;IAA7B,kDAA6B;IAC7B,eAA2B;IAA3B,gDAA2B;;;;IAGpF,AAAtB,gCAAsB,YAAO;IAAA,sBAAM;IAAA,iBAAQ;IAAA,kCAAqH;IAAnD,oPAAS,kBAAW,QAAQ,EAAE,uBAAgB,CAAC,KAAC;IAAG,AAArH,iBAAqH,EAAM;IAChJ,AAAtB,gCAAsB,YAAO;IAAA,mCAAmB;IAAA,iBAAQ;IAAA,kCAA2I;IAA9D,oPAAS,kBAAW,mBAAmB,EAAE,uBAAgB,CAAC,KAAC;IAAG,AAA3I,iBAA2I,EAAM;IACnL,AAAtB,gCAAsB,YAAO;IAAA,2BAAU;IAAA,iBAAQ;IAAA,mCAAmH;IAAjD,qPAAS,kBAAW,MAAM,EAAE,uBAAgB,CAAC,KAAC;IAAG,AAAnH,iBAAmH,EAAM;;;IAFzF,eAA6B;IAA7B,kDAA6B;IAChB,eAAwC;IAAxC,6DAAwC;IAC/C,eAA2B;IAA3B,gDAA2B;;;;IAEpE,AAAtB,gCAAsB,YAAO;IAAA,oCAAoB;IAAA,iBAAQ;IAAA,kCAA6I;IAA/D,oPAAS,kBAAW,oBAAoB,EAAE,uBAAgB,CAAC,KAAC;IAAG,AAA7I,iBAA6I,EAAM;;;IAA/G,eAAyC;IAAzC,8DAAyC;;;;IACjH,AAAtB,gCAAsB,YAAO;IAAA,8BAAc;IAAA,iBAAQ;IAAA,kCAAiI;IAAzD,oPAAS,kBAAW,cAAc,EAAE,uBAAgB,CAAC,KAAC;IAAG,AAAjI,iBAAiI,EAAM;;;IAAnG,eAAmC;IAAnC,wDAAmC;;;;IACpG,AAAtB,gCAAsB,YAAO;IAAA,4BAAY;IAAA,iBAAQ;IAAA,kCAA+H;IAAxD,oPAAS,kBAAW,aAAa,EAAE,uBAAgB,CAAC,KAAC;IAAG,AAA/H,iBAA+H,EAAM;;;IAAjG,eAAkC;IAAlC,uDAAkC;;;;IA3B1H,AAAtB,gCAAsB,YAAO;IAAA,oBAAI;IAAA,iBAAQ;IACvC,mCAA8F;IAAzC,+OAAU,mBAAY,uBAAgB,CAAC,KAAC;IAC3F,yKAAuE;IAE3E,AADE,iBAAS,EACL;IACgB,AAAtB,gCAAsB,YAAO;IAAA,qBAAK;IAAA,iBAAQ;IACxC,kCAAkH;IAA3C,4OAAS,oBAAa,uBAAgB,CAAC,KAAC;IACjH,AADE,iBAAkH,EAC9G;IAoBJ,AADA,AADA,AALA,AAJA,AADA,AAJA,AADA,AADA,8IAAkB,wHACK,6GACL,wHAIA,4GACH,6GAIM,wHAKE,wHACD,wHACA;;;;IA1BG,eAA2B;IAA3B,gDAA2B;IAClD,cAAuE;IAAvE,+BAAuE;IAIrC,eAAkC;IAAlC,uDAAkC;IAExE,cAoBC;IApBD,0DAAA,QAAQ,oBAAR,aAAa,oBAAb,QAAQ,oBAAR,QAAQ,oBAAR,KAAK,oBAAL,WAAW,oBAAX,aAAa,oBAAb,YAAY,oBAAZ,YAAY,WAoBX;;;IAIqL,mCAAqB;IAAA,YAAQ;IAAA,iBAAS;;;IAA9B,8BAAY;IAAC,cAAQ;IAAR,4BAAQ;;;;IAD7L,AAAtB,gCAAsB,YAAO;IAAA,+BAAe;IAAA,iBAAQ;IAAA,kCAAiH;IAAhD,4OAAS,yBAAkB,uBAAgB,CAAC,KAAC;IAAG,AAAjH,iBAAiH,EAAM;IACrJ,AAAtB,gCAAsB,YAAO;IAAA,4BAAY;IAAA,iBAAQ;IAAA,mCAA+F;IAA5C,+OAAU,sBAAe,uBAAgB,CAAC,KAAC;IAAC,yKAA8E;IAAS,AAAT,iBAAS,EAAM;;;IADrJ,eAA4B;IAA5B,iDAA4B;IAC1C,eAAyB;IAAzB,8CAAyB;IAA6C,cAA8E;IAA9E,kCAA8E;;;IAG9C,mCAAuB;IAAA,YAAY;IAAA,iBAAS;;;IAApC,gCAAc;IAAC,cAAY;IAAZ,gCAAY;;;;IAI/M,AADF,gCAA8J,eAClG;IAAA,sCAAsB;IAAA,iBAAM;IAEpF,AADF,gCAA8F,gBACjC;IAAA,YAAmD;IAAA,iBAAO;IACrH,iCAA6B;IAAA,yBAAkC;IAAC,uBAAM;IACxE,AADwE,iBAAO,EACzE;IAEJ,AADF,+BAAmC,mBAC2I;IAA/G,uQAAS,kCAAuB,KAAC;IAC5F,0BAAsD;IAAC,wBACzD;IAAA,iBAAS;IACT,oCAAkK;IAArG,uQAAS,mCAAwB,KAAC;IAC7F,0BAAiC;IAAC,uBACpC;IAEJ,AADE,AADE,iBAAS,EACL,EACF;;;IAXyD,eAAmD;IAAnD,oFAAmD;;;;IAN9F,AAAtB,gCAAsB,YAAO;IAAA,yBAAS;IAAA,iBAAQ;IAAA,mCAA6F;IAA1C,+OAAU,oBAAa,uBAAgB,CAAC,KAAC;IAAC,uJAAmF;IAAS,AAAT,iBAAS,EAAM;IACvN,AAAtB,gCAAsB,YAAO;IAAA,sCAAsB;IAAA,iBAAQ;IAAA,qCAA4G;IAA3C,+OAAS,sBAAe,uBAAgB,CAAC,KAAC;IAAY,AAAX,iBAAW,EAAM;IACxL,sJAA8B;;;;IAFyC,eAAyB;IAAzB,8CAAyB;IAA2C,cAAmF;IAAnF,gCAAmF;IAC5H,eAAyB;IAAzB,8CAAyB;IAC3H,cAgBC;IAhBD,sEAgBC;;;IAIC,gCAA+B;IAAA,gDAAgC;IAAA,8BAAQ;IAAA,qBAAK;IAAA,iBAAS;IAAC,qEAAoD;IAAA,iBAAM;;;IAQtI,mCAAuB;IAAA,YAAoE;IAAA,iBAAS;;;IAA5F,gCAAc;IAAC,cAAoE;IAApE,8GAAoE;;;;IAH/F,AADF,gCAAsB,YACb;IAAA,6BAAa;IAAA,iBAAQ;IAC5B,mCAAsG;IAAhD,2QAAU,0BAAmB,uBAAgB,CAAC,KAAC;IACnG,mLAEC;IAEL,AADE,iBAAS,EACL;;;IALqB,eAA4B;IAA5B,uFAA4B;IACnD,cAEC;IAFD,oCAEC;;;IAUG,iCAA6B;IAAA,yBAAkC;IAAC,uBAAM;IAAA,iBAAO;;;;IAF/E,AADF,AADF,AADF,gCAAyL,eAC3G,eACpB,aAC5C;IAAA,YAAkB;IAAA,iBAAS;IACnC,gLAAkC;IAGlC,gCAAyD;IAAA,YAAgB;IAC3E,AAD2E,iBAAO,EAC5E;IACN,iCAAyD;IAAA,YAAyB;IACpF,AADoF,iBAAO,EACrF;IACN,iCAAyE;IACvE,6BAAW;IAAA,+BAAQ;IAAA,aAA4C;IACjE,AADiE,iBAAS,EACpE;IACN,iCAAyE;IACvE,iCAAe;IAAA,+BAAQ;IAAA,aAAwB;IACjD,AADiD,iBAAS,EACpD;IAEJ,AADF,iCAAwE,mBACkE;IAA7E,oRAAS,kCAAuB,KAAC;IAC1F,0BAAsD;IAAC,qCACzD;IAAA,iBAAS;IACT,oCAA2I;IAA9E,oRAAS,mCAAwB,KAAC;IAC7F,0BAAiC;IAAC,qCACpC;IAEJ,AADE,AADE,iBAAS,EACL,EACF;;;;IAtBQ,eAAkB;IAAlB,2CAAkB;IAC1B,cAEC;IAFD,yDAEC;IACsB,cAAiC;IAAjC,iDAAiC;IAAC,cAAgB;IAAhB,oCAAgB;IAEnC,cAAgB;IAAhB,kCAAgB;IAAC,cAAyB;IAAzB,2DAAyB;IAG/D,eAA4C;IAA5C,uEAA4C;IAGxC,eAAwB;IAAxB,mDAAwB;;;IA3BvD,gCAA0D;IACxD,iKAAiC;IAUjC,kKAA8B;IA4BhC,iBAAM;;;;IAtCJ,cASC;IATD,2DASC;IACD,cA2BC;IA3BD,qEA2BC;;;IAvCH,AAFF,mJAAmC,6HAE1B;;;IAFT,4DA2CC;;;;IAoBD,mCAAmI;IAA5B,uOAAS,wBAAiB,KAAC;IAAC,6BAAa;IAAA,iBAAS;IACzJ,8BAAoB;IAAA,sKAAsJ;IAAA,iBAAI;;;IADzF,sCAAiB;;;;IAW3B,AAAtB,gCAAsB,YAAO;IAAA,yBAAS;IAAA,iBAAQ;IAAA,kCAAqI;IAA1C,4OAAS,mBAAY,uBAAgB,CAAC,KAAC;IAAG,AAArI,iBAAqI,EAAM;;;IAAzF,eAAwC;IAAxC,6DAAwC;;;;IAC7H,AAAtB,gCAAsB,YAAO;IAAA,yBAAS;IAAA,iBAAQ;IAAA,kCAAyG;IAAnC,4OAAS,YAAK,uBAAgB,CAAC,KAAC;IAAG,AAAzG,iBAAyG,EAAM;;;IAAzE,eAA+B;IAA/B,oDAA+B;;;;IA/JjK,AADF,AADF,AAFF,yCAAuE,eAEF,eACvC,eACL;IACjB,yBAAuF;IAErF,AADF,+BAAoB,cAC6B;IAAA,YAAwB;IAAA,iBAAK;IAC5E,gCAA+B;IAAA,YAAiD;IAClF,AADkF,iBAAM,EAClF;IACN,oCAAuI;IAAvF,yNAAS,wBAAiB,KAAC;IACzE,yBAAyC;IAC3C,iBAAS;IACT,yIAAkG;IAGpG,iBAAM;IACN,iCAA0B;IACxB,2HAAsB;IAatB,2HAAoB;IA+BpB,2HAAsC;IAItC,2HAAoC;IAqBpC,0HAAsC;IA+C1C,AADE,iBAAM,EACF;IAIJ,AADF,iCAAqB,gBACO;IAAA,0BAAgF;IAAA,2BAAI;IAAA,8BAAa;IAAK,AAAL,iBAAK,EAAM;IAE9G,AAAtB,AADF,iCAA0B,gBACF,aAAO;IAAA,oDAAmC;IAAA,iBAAQ;IAAA,mCAA6F;IAAtC,8NAAS,eAAQ,uBAAgB,CAAC,KAAC;IAAG,AAA7F,iBAA6F,EAAM;IACrJ,AAAtB,iCAAsB,aAAO;IAAA,mDAAkC;IAAA,iBAAQ;IAAA,mCAAmK;IAA3C,8NAAS,oBAAa,uBAAgB,CAAC,KAAC;IAE3O,AADE,AAD4O,AAAnK,iBAAmK,EAAM,EAC5O,EACF;IAIJ,AADF,iCAAqB,gBACO;IAAA,yBAAmF;IAAA,2BAAI;IAAA,+BAAc;IAAK,AAAL,iBAAK,EAAM;IAElH,AAAtB,AADF,iCAA0B,gBACF,aAAO;IAAA,qBAAI;IAAA,iBAAQ;IAAA,kCAA2C;IAAA,aAAmB;IAAO,AAAP,iBAAO,EAAM;IACpH,0HAAgC;IAKpC,AADE,iBAAM,EACF;IAIJ,AADF,iCAAqB,gBACO;IAAA,0BAA0E;IAAA,2BAAI;IAAA,2BAAU;IAAK,AAAL,iBAAK,EAAM;IAErG,AAAtB,AADF,iCAA0B,gBACF,aAAO;IAAA,yBAAQ;IAAA,iBAAQ;IAAA,oCAAuG;IAA5C,iOAAU,sBAAe,uBAAgB,CAAC,KAAC;IAAC,oCAAiC;IAAA,iCAAgB;IAAA,iBAAS;IAAA,oCAAsB;IAAA,sBAAK;IAAA,iBAAS;IAAA,oCAAwB;IAAA,wBAAO;IAAkB,AAAT,AAAT,iBAAS,EAAS,EAAM;IACzS,sIAAsD;IACtD,sIAA2C;IACrB,AAAtB,iCAAsB,aAAO;IAAA,wCAAuB;IAAA,iBAAQ;IAAA,mCAA0I;IAAzC,8NAAS,kBAAW,uBAAgB,CAAC,KAAC;IAIzM,AADE,AADA,AADE,AADwM,AAA1I,iBAA0I,EAAM,EACxM,EACF,EACA,EACQ;;;IAxKsC,AAAf,AAA1B,8CAAyB,eAAe,eAAe;IAK9C,eAA6B;IAA7B,kDAA6B;;IAEI,eAAwB;IAAxB,+CAAwB;IACxC,eAAiD;IAAjD,6FAAiD;IAKlF,eAEC;IAFD,2IAEC;IAGD,eAYC;IAZD,iDAYC;IACD,cA8BC;IA9BD,+CA8BC;IACD,cAGC;IAHD,iEAGC;IACD,cAoBC;IApBD,+DAoBC;IACD,cA6CC;IA7CD,iEA6CC;IAQ2G,gBAAkB;IAAlB,uCAAkB;IACW,eAAqD;IAArD,0EAAqD;IAQ1G,gBAAmB;IAAnB,0CAAmB;IACvG,cAGC;IAHD,2DAGC;IAQqE,gBAAiC;IAAjC,sDAAiC;IACvG,eAAkP;IAAlP,iFAAkP;IAClP,cAA2M;IAA3M,sEAA2M;IAC7F,eAA8C;IAA9C,mEAA8C;;;;IA3PlK,AADF,+BAAqB,oBACyH;IAAlD,qNAAW,4CAAqC,KAAC;IAMjI,AADF,AADF,AADF,AAFF,yCAAkF,eAEvD,eACC,eACO,gBAC6B;IAAA,6BAAa;IAAA,iBAAO;IAC5E,mCAAuF;IAAtB,yMAAS,kBAAW,KAAC;IAAC,wBAAoC;IAAC,wBAAM;IAAA,iBAAS;IAC3I,oCAAmF;IAApB,0MAAS,gBAAS,KAAC;IAAC,yBAAmC;IAAC,8BAAY;IACrI,AADqI,iBAAS,EACxI;IAGF,AADF,AADF,iCAA8B,gBACE,mBACmE;IAAnE,0MAAS,gBAAS,KAAC;IAAgD,0BAAiC;IAAA,iBAAS;IACzI,kCAAwE;IAA5C,wMAAS,kBAAW,KAAC;IAAuB,aAAkC;IAAA,iBAAO;IACjH,oCAA6F;IAAjE,0MAAS,eAAQ,KAAC;IAA+C,wBAAgC;IAC/H,AAD+H,iBAAS,EAClI;IACN,oCAAwK;IAArG,0MAAS,wBAAiB,KAAC;IAC5F,0BAAuC;IACzC,iBAAS;IACT,kCAA8C;IAAA,0BAAwC;IAAC,aAAmD;IAE9I,AADE,AAD4I,iBAAO,EAC7I,EACF;IAGR,AADF,iCAA2D,gBAIL;;IAM9C,AADF,AAJF,iCAG6B,YACrB,mBACuG;IACzG,6BAAmE;IACrE,iBAAS;IACT,oCAAkH;IAChH,6BAAmE;IAEvE,AADE,iBAAS,EACJ;IACP,8HAKC;IACH,iBAAM;IACN,0HAsBC;IAEL,AADE,iBAAM,EACF;;IAIF,AADF,AADF,iCAA0B,gBACJ,YACZ;IAAA,0BAAsB;IAAC,wBAAM;IAAA,iBAAO;IAC1C,6BAAM;IAAA,0BAAuB;IAAC,yBAAO;IAAA,iBAAO;IAC5C,6BAAM;IAAA,0BAAsB;IAAC,2BAAS;IAAA,iBAAO;IAC7C,6BAAM;IAAA,0BAAyB;IAAC,wBAAM;IAAA,iBAAO;IAC7C,6BAAM;IAAA,0BAAuB;IAAC,2BAAS;IAAA,iBAAO;IAC9C,6BAAM;IAAA,0BAAyB;IAAC,uBAAK;IAI7C,AADE,AADE,AADE,AADuC,iBAAO,EACxC,EACF,EACF,EACQ;IAElB,kIAA6B;IA4K/B,AADE,iBAAW,EACP;;;IAlQyE,cAAgB;IAAhB,8BAAgB;IACxE,cAAmD;IAAC,AAApD,+EAAmD,eAAe;IAWvB,gBAA6B;IAA7B,kDAA6B;IACL,eAAkC;IAAlC,yEAAkC;IAC3D,cAA6B;IAA7B,gDAA6B;IAElD,eAAsC;IAAtC,sDAAsC;IAA6B,6FAAwE;IAGhF,eAAmD;IAAnD,gGAAmD;IAM3I,eAA0B;IAE1B,AADA,AADA,6CAA0B,gCACC,gDACmB;IAG5C,cAAsB;;IAUzB,eAKC;IALD,2BAKC;IAEH,eAsBC;IAtBD,2BAsBC;IAiBX,gBA0KG;IA1KH,wDA0KG;;;;IAhpBP,+BAAsE;IACpE,qGAA0B;IAS1B,oCAA8H;IAAzC,oMAAW,mCAA4B,KAAC;IAC3H,iHAA2B;IA6DrB,AADF,AADF,AADF,AADE,AAFF,yCAAmF,cAElB,cAChC,cACM,cACP,WACpB;IAAA,0BAAS;IAAA,iBAAO;IAAC,yBAAkE;IACzF,6BAAM;IAAA,aAAsC;IAAA,iBAAO;IAAC,yBAAkE;IACtH,+BAAQ;IAAA,aAA4B;IACtC,AADsC,iBAAS,EACzC;IAEJ,AADF,gCAA0B,UACpB;IAAA,aAA4B;IAAA,iBAAK;IACrC,4FAAwB;IAO5B,AADE,iBAAM,EACF;IAIJ,AADF,gCAAwB,kBACmJ;IAA1H,yLAAS,uBAAgB,KAAC;IACvE,yBAAuG;IACvG,aACF;IAAA,iBAAS;IACT,mCAAyI;IAA1B,yLAAS,sBAAe,KAAC;IACtI,yBAAgC;IAAC,wBACnC;IAAA,iBAAS;IACT,mCAA4H;IAAjB,yLAAS,aAAM,KAAC;IACzH,yBAAuC;IAAC,uBAC1C;IAAA,iBAAS;IACT,mCAA0H;IAArB,yLAAS,iBAAU,KAAC;IACvH,yBAAwC;IAAC,2BAC3C;IAAA,iBAAS;IACT,mCAA2H;IAAlB,yLAAS,cAAO,KAAC;IACxH,yBAAgC;IAAC,wBACnC;IAAA,iBAAS;IACT,mCAAkE;IAAnB,yLAAS,eAAQ,KAAC;IAC/D,yBAA+C;IAAC,wBAClD;IAAA,iBAAS;IACT,wGAAa;IAEjB,AADE,iBAAM,EACF;IAGN,0GAA6B;IA6R7B,yGAAmB;IAyQvB,AADE,AADE,AADE,iBAAM,EACQ,EACP,EACP;;;IAvpBiB,8DAA8C;IACnE,cAOC;IAPD,oDAOC;IAEmE,cAAgB;IAAhB,8BAAgB;IAClF,cAqDC;IArDD,qDAqDC;IAEc,cAAoD;IAAC,AAArD,gFAAoD,eAAe;IAOtE,eAAsC;IAAtC,oEAAsC;IACpC,eAA4B;IAA5B,2FAA4B;IAGhC,eAA4B;IAA5B,2FAA4B;IAChC,cAKC;IALD,mDAKC;IAMuE,eAA8F;IAA9F,mHAA8F;IAClJ,cAAyC;IAAC,AAA1C,yDAAyC,sCAAqC;IAClG,cACF;IADE,kFACF;IACgF,cAA8B;IAA9B,mDAA8B;IAG/B,eAA2B;IAA3B,uDAA2B;IAGvB,eAAiB;IAAjB,sCAAiB;IAGtB,eAA0B;IAA1B,sDAA0B;IAMxG,eAA0H;IAA1H,wCAA0H;IAK9H,cA0RC;IA1RD,wDA0RC;IAGD,cAqQH;IArQG,8CAqQH;;;;IAQD,+CAQ2B;IAAzB,AADA,AADA,2MAAS,4BAAqB,KAAC,gNACb,qCAA8B,KAAC,0LACvC,oBAAa,KAAC;IAC1B,iBAAqB;;;IAJnB,AADA,AADA,AADA,AADA,sCAAiB,6BACI,mCACM,yCACM,uDACc;;AAjuBzD,MAAM,MAAM,GAAG,GAAG,CAAC;AACnB,MAAM,MAAM,GAAG,EAAE,CAAC;AAClB,MAAM,OAAO,GAAG,EAAE,CAAC;AACnB,MAAM,OAAO,GAAG,EAAE,CAAC;AACnB,MAAM,KAAK,GAAG,EAAE,CAAC;AACjB,MAAM,KAAK,GAAG,EAAE,CAAC;AAEjB,MAAM,YAAY,GAA4B,CAAC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;AACpH,MAAM,UAAU,GAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;AACnJ,MAAM,aAAa,GAAkB,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;AACtE,MAAM,iBAAiB,GAAmD,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAEjH,MAAM,YAAY,GAA0C;IAC1D,MAAM,EAAE,mBAAmB;IAC3B,KAAK,EAAE,oCAAoC;IAC3C,cAAc,EAAE,iCAAiC;IACjD,SAAS,EAAE,2BAA2B;IACtC,eAAe,EAAE,6BAA6B;CAC/C,CAAC;AAEF,MAAM,UAAU,GAAoC;IAClD,MAAM,EAAE,wBAAwB;IAChC,MAAM,EAAE,uBAAuB;IAC/B,WAAW,EAAE,4BAA4B;IACzC,MAAM,EAAE,yBAAyB;IACjC,GAAG,EAAE,0BAA0B;IAC/B,SAAS,EAAE,2BAA2B;IACtC,aAAa,EAAE,iCAAiC;IAChD,YAAY,EAAE,mBAAmB;IACjC,YAAY,EAAE,iBAAiB;CAChC,CAAC;AAEF,MAAM,2BAA2B,GAC/B,iGAAiG;IACjG,uGAAuG,CAAC;AAwsB1G,MAAM,OAAO,oBAAoB;IACtB,MAAM,CAA0B;IAChC,QAAQ,GAA6B,IAAI,CAAC;IAC1C,WAAW,GAAoB,IAAI,CAAC;IAE7C,2CAA2C;IAC3C,IAAa,WAAW,CAAC,KAAsB;QAC7C,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IACD,2CAA2C;IAC3C,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAES,QAAQ,GAAG,IAAI,YAAY,EAAU,CAAC;IAEhD;;;;;;OAMG;IACO,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IACzB,QAAQ,GAAG,IAAI,YAAY,EAAc,CAAC;IAEpD;;;;;;OAMG;IACO,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAE3B,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAChC,aAAa,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAC9C,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAE/C,kBAAkB,GAAG,KAAK,CAAC;IAElC,kDAAkD;IAClD,IAAW,kBAAkB;QAC3B,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IACD,kDAAkD;IAClD,IAAW,kBAAkB,CAAC,KAAK;QACjC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;IAClC,CAAC;IACM,cAAc,GAAG,EAAE,CAAC;IAE3B,8CAA8C;IAC9C,IAAW,cAAc;QACvB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IACD,8CAA8C;IAC9C,IAAW,cAAc,CAAC,KAAK;QAC7B,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;IAC9B,CAAC;IACM,gBAAgB,GAAG,EAAE,CAAC;IAE7B,gDAAgD;IAChD,IAAW,gBAAgB;QACzB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IACD,gDAAgD;IAChD,IAAW,gBAAgB,CAAC,KAAK;QAC/B,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAChC,CAAC;IACM,oBAAoB,GAAG,KAAK,CAAC;IAEpC,oDAAoD;IACpD,IAAW,oBAAoB;QAC7B,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACnC,CAAC;IACD,oDAAoD;IACpD,IAAW,oBAAoB,CAAC,KAAK;QACnC,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;IACpC,CAAC;IACM,aAAa,GAAG,EAAE,CAAC;IAE1B,6CAA6C;IAC7C,IAAW,aAAa;QACtB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IACD,6CAA6C;IAC7C,IAAW,aAAa,CAAC,KAAK;QAC5B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;IAC7B,CAAC;IACM,gBAAgB,GAAG,EAAE,CAAC;IAE7B,gDAAgD;IAChD,IAAW,gBAAgB;QACzB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IACD,gDAAgD;IAChD,IAAW,gBAAgB,CAAC,KAAK;QAC/B,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAChC,CAAC;IAEe,aAAa,GAAG,2BAA2B,CAAC;IAE5D,6CAA6C;IAC7C,IAAW,aAAa;QACtB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IACe,WAAW,GAAG,YAAY,CAAC;IAE3C,2CAA2C;IAC3C,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IACe,SAAS,GAAG,UAAU,CAAC;IAEvC,yCAAyC;IACzC,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IACe,YAAY,GAAG,aAAa,CAAC;IAE7C,4CAA4C;IAC5C,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IACe,gBAAgB,GAAG,iBAAiB,CAAC;IAErD,gDAAgD;IAChD,IAAW,gBAAgB;QACzB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAEM,SAAS,GAAiC,EAAE,CAAC;IAEpD,yCAAyC;IACzC,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IACD,yCAAyC;IACzC,IAAW,SAAS,CAAC,KAAmC;QACtD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IACM,kBAAkB,GAAG,EAAE,CAAC;IAE/B,kDAAkD;IAClD,IAAW,kBAAkB;QAC3B,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IACD,kDAAkD;IAClD,IAAW,kBAAkB,CAAC,KAAK;QACjC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;IAClC,CAAC;IAEM,UAAU,GAAG,KAAK,CAAC;IAE1B,0CAA0C;IAC1C,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IACD,0CAA0C;IAC1C,IAAW,UAAU,CAAC,KAAK;QACzB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;IACM,mBAAmB,GAAsC,IAAI,CAAC;IAErE,mDAAmD;IACnD,IAAW,mBAAmB;QAC5B,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IACD,mDAAmD;IACnD,IAAW,mBAAmB,CAAC,KAAwC;QACrE,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;IACnC,CAAC;IACM,wBAAwB,CAAU,CAAE,yHAAyH;IAEpJ,QAAQ,GAA+B,QAAQ,CAAC;IAEhE,wCAAwC;IACxC,IAAoB,QAAQ,CAAC,KAAiC;QAC5D,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACxB,CAAC;IACD,wCAAwC;IACxC,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IACM,WAAW,GAAG,EAAE,CAAC;IAExB,2CAA2C;IAC3C,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IACD,2CAA2C;IAC3C,IAAW,WAAW,CAAC,KAAK;QAC1B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IACM,YAAY,GAAG,KAAK,CAAC;IAE5B,4CAA4C;IAC5C,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IACD,4CAA4C;IAC5C,IAAW,YAAY,CAAC,KAAK;QAC3B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;IAEe,MAAM,GAAG,MAAM,CAAC;IAChB,MAAM,GAAG,MAAM,CAAC;IACzB,IAAI,GAAG,IAAI,CAAC;IACZ,SAAS,GAAG,CAAC,CAAC;IAErB,yCAAyC;IACzC,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IACD,yCAAyC;IACzC,IAAW,SAAS,CAAC,KAAK;QACxB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IAEM,UAAU,CAAC,MAAe;QAC/B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,wBAAwB,GAAG,MAAM,CAAC;QACvC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;IAED,0CAA0C;IACnC,UAAU,CAAC,MAAe;QAC/B,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAEM,aAAa;QAClB,IAAI,CAAC,IAAI,CAAC,gBAAgB;YAAE,OAAO;QACnC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACjD,IAAI,CAAC,wBAAwB,GAAG,SAAS,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;IAED,6CAA6C;IACtC,aAAa;QAClB,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;IAC9B,CAAC;IAEM,WAAW;QAChB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,wBAAwB,GAAG,SAAS,CAAC;IAC5C,CAAC;IAED,2CAA2C;IACpC,WAAW;QAChB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,QAAoC;QAC7D,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,IAAI,SAAS,EAAE,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC;QAC1F,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;QACvC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,6CAA6C;IACtC,KAAK,CAAC,aAAa,CAAC,QAAoC;QAC7D,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAEM,KAAK,CAAC,sBAAsB,CAAC,QAAoC;QACtE,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,IAAI,SAAS,EAAE,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC;QAC1F,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;QACvC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACjC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,sDAAsD;IAC/C,KAAK,CAAC,sBAAsB,CAAC,QAAoC;QACtE,OAAO,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED,sEAAsE;IAC/D,WAAW,GAAoB,EAAE,CAAC;IAEzC,2CAA2C;IAC3C,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IACD,2CAA2C;IAC3C,IAAW,WAAW,CAAC,KAAsB;QAC3C,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IACM,SAAS,GAAkB,EAAE,CAAC;IAErC,yCAAyC;IACzC,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IACD,yCAAyC;IACzC,IAAW,SAAS,CAAC,KAAoB;QACvC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IACM,kBAAkB,GAAG,EAAE,CAAC;IAE/B,kDAAkD;IAClD,IAAW,kBAAkB;QAC3B,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IACD,kDAAkD;IAClD,IAAW,kBAAkB,CAAC,KAAK;QACjC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;IAClC,CAAC;IACM,eAAe,GAAgB,gBAAgB,CAAC;IAEvD,+CAA+C;IAC/C,IAAW,eAAe;QACxB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IACD,+CAA+C;IAC/C,IAAW,eAAe,CAAC,KAAkB;QAC3C,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;IAC/B,CAAC;IACM,eAAe,GAAG,EAAE,CAAC;IAE5B,+CAA+C;IAC/C,IAAW,eAAe;QACxB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IACD,+CAA+C;IAC/C,IAAW,eAAe,CAAC,KAAK;QAC9B,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;IAC/B,CAAC;IACM,eAAe,GAAG,IAAI,CAAC;IAE9B,+CAA+C;IAC/C,IAAW,eAAe;QACxB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IACD,+CAA+C;IAC/C,IAAW,eAAe,CAAC,KAAK;QAC9B,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;IAC/B,CAAC;IACM,WAAW,GAAiB,EAAE,UAAU,EAAE,EAAE,EAAE,+BAA+B,EAAE,2BAA2B,EAAE,CAAC;IAEpH,2CAA2C;IAC3C,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IACD,2CAA2C;IAC3C,IAAW,WAAW,CAAC,KAAmB;QACxC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IACM,QAAQ,GAAiB,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAEjD,wCAAwC;IACxC,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IACD,wCAAwC;IACxC,IAAW,QAAQ,CAAC,KAAmB;QACrC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACxB,CAAC;IACM,cAAc,GAAuB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,QAAQ,EAAE,GAAG,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC;IAEzH,8CAA8C;IAC9C,IAAW,cAAc;QACvB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IACD,8CAA8C;IAC9C,IAAW,cAAc,CAAC,KAAyB;QACjD,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;IAC9B,CAAC;IAEM,KAAK,GAAc,EAAE,CAAC;IAE7B,qCAAqC;IACrC,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IACD,qCAAqC;IACrC,IAAW,KAAK,CAAC,KAAgB;QAC/B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IACM,KAAK,GAAc,EAAE,CAAC;IAE7B,qCAAqC;IACrC,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IACD,qCAAqC;IACrC,IAAW,KAAK,CAAC,KAAgB;QAC/B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IACM,UAAU,GAAG,EAAE,CAAC;IAEvB,0CAA0C;IAC1C,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IACD,0CAA0C;IAC1C,IAAW,UAAU,CAAC,KAAK;QACzB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;IACM,OAAO,GAAG,GAAG,CAAC;IAErB,uCAAuC;IACvC,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IACD,uCAAuC;IACvC,IAAW,OAAO,CAAC,KAAK;QACtB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACvB,CAAC;IACM,OAAO,GAAG,GAAG,CAAC;IAErB,uCAAuC;IACvC,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IACD,uCAAuC;IACvC,IAAW,OAAO,CAAC,KAAK;QACtB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACvB,CAAC;IACM,KAAK,GAAG,KAAK,CAAC;IAErB,qCAAqC;IACrC,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IACD,qCAAqC;IACrC,IAAW,KAAK,CAAC,KAAK;QACpB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IACM,IAAI,GAAG,KAAK,CAAC;IAEpB,oCAAoC;IACpC,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IACD,oCAAoC;IACpC,IAAW,IAAI,CAAC,KAAK;QACnB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;IACpB,CAAC;IAEO,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;IACtC,OAAO,GAAG,CAAC,CAAC;IAEb,WAAW,CAAC,QAAwB;QACzC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAED,QAAQ;QACN,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,sCAAsC,CAAC,CAAC;QACzF,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACjC,IAAI,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ,IAAI,MAAM,CAAC,cAAc,IAAI,EAAE,IAAI,MAAM,CAAC,cAAc,IAAI,EAAE,EAAE,CAAC;oBAC5G,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;oBAC5C,IAAI,CAAC,gBAAgB,GAAG,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC;gBACpD,CAAC;gBACD,IAAI,OAAO,MAAM,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;oBACnD,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;gBACtD,CAAC;gBACD,IAAI,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,IAAI,EAAE,IAAI,MAAM,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;oBACzG,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;oBAC1C,IAAI,CAAC,gBAAgB,GAAG,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC;gBACnD,CAAC;gBACD,IAAI,OAAO,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE,CAAC;oBACrD,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;gBAC1D,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;QACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAEM,cAAc,CAAC,KAAgC;QACpD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC/G,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAED,8CAA8C;IACvC,cAAc,CAAC,KAAgC;QACpD,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAEM,aAAa;QAClB,IAAI,CAAC,kBAAkB,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC;QACnD,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC1B,CAAC;IAED,6CAA6C;IACtC,aAAa;QAClB,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;IAC9B,CAAC;IAEM,uBAAuB,CAAC,KAAgC;QAC7D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC/G,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAED,uDAAuD;IAChD,uBAAuB,CAAC,KAAgC;QAC7D,OAAO,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAEM,eAAe;QACpB,IAAI,CAAC,oBAAoB,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC;QACvD,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC1B,CAAC;IAED,+CAA+C;IACxC,eAAe;QACpB,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;IAChC,CAAC;IAEO,eAAe;QACrB,MAAM,KAAK,GAAG;YACZ,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;SAChD,CAAC;QACF,cAAc,CAAC,QAAQ,CAAC,mBAAmB,CAAC,sCAAsC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7G,CAAC;IAEM,eAAe,CAAC,OAAe;QACpC,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC1C,IAAI,CAAC,CAAC;gBAAE,OAAO;YACf,MAAM,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;YAC/C,IAAI,CAAC,MAAM;gBAAE,OAAO;YACpB,MAAM,EAAE,GAAG,YAAY,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACxD,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,yBAAyB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACpI,CAAC;IACH,CAAC;IAED,+CAA+C;IACxC,eAAe,CAAC,OAAe;QACpC,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAEM,gBAAgB,CAAC,OAAgB;QACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC1C,IAAI,CAAC,CAAC;gBAAE,OAAO;YACf,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,YAAY,IAAI,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,OAAO;gBACnB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;gBAC3D,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,IAAI,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;YACnG,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC;gBACtD,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,EAAE,GAAG,YAAY,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;oBACzD,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;oBACpE,OAAO;gBACT,CAAC;YACH,CAAC;YACD,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,iCAAiC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5I,CAAC;IACH,CAAC;IAED,gDAAgD;IACzC,gBAAgB,CAAC,OAAgB;QACtC,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAEM,iBAAiB;QACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5C,CAAC;aAAM,IAAI,IAAI,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC;YAC7G,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;IACH,CAAC;IAED,iDAAiD;IAC1C,iBAAiB;QACtB,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAClC,CAAC;IAED,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,QAAQ,KAAK,OAAO,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC;IAC9D,CAAC;IAED,2CAA2C;IAC3C,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAEM,cAAc;QACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IACxD,CAAC;IAED,8CAA8C;IACvC,cAAc;QACnB,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;IAC/B,CAAC;IAEM,MAAM;QACX,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IAClF,CAAC;IAED,sCAAsC;IAC/B,MAAM;QACX,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IAClF,CAAC;IAED,uCAAuC;IAChC,OAAO;QACZ,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IAEM,SAAS;QACd,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,yCAAyC;IAClC,SAAS;QACd,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;IAC1B,CAAC;IAEM,QAAQ,CAAC,CAAQ;QACtB,OAAQ,CAAC,CAAC,MAAqE,CAAC,KAAK,CAAC;IACxF,CAAC;IAED,wCAAwC;IACjC,QAAQ,CAAC,CAAQ;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAEM,YAAY,CAAC,IAAa;QAC/B,OAAO,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,EAAE,CAAC;IACtE,CAAC;IAED,4CAA4C;IACrC,YAAY,CAAC,IAAa;QAC/B,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAEM,SAAS,CAAC,CAAS;QACxB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;IACxB,CAAC;IAED,yCAAyC;IAClC,SAAS,CAAC,CAAS;QACxB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAEM,aAAa,CAAC,EAAS;QAC5B,IAAI,CAAC,WAAW,GAAG,CAAE,EAAE,CAAC,MAA2B,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAClF,CAAC;IAED,6CAA6C;IACtC,aAAa,CAAC,EAAS;QAC5B,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,IAAW,iBAAiB;QAC1B,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACzC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACnE,MAAM,WAAW,GAAG,CAAC,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC7E,MAAM,WAAW,GAAG,CAAC,CAAC,cAAc,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC/E,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW;oBAAE,OAAO,KAAK,CAAC;YAC/D,CAAC;YACD,IAAI,IAAI,CAAC,YAAY,KAAK,WAAW;gBAAE,OAAO,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC;YACvE,IAAI,IAAI,CAAC,YAAY,KAAK,OAAO;gBAAE,OAAO,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC;YAC/D,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM;gBAAE,OAAO,CAAC,CAAC,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;YACxG,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAED,iDAAiD;IACjD,IAAW,iBAAiB;QAC1B,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAEM,cAAc,CAAC,CAA8B;QAClD,IAAI,CAAC,CAAC;YAAE,OAAO,UAAU,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,kBAAkB,CAAC;QACnI,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,yBAAyB,CAAC;QACtG,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,8CAA8C;IACvC,cAAc,CAAC,CAA8B;QAClD,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IAEM,gBAAgB,CAAC,CAA8B;QACpD,IAAI,CAAC,CAAC;YAAE,OAAO,QAAQ,CAAC;QACxB,OAAO,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC;IAChE,CAAC;IAED,gDAAgD;IACzC,gBAAgB,CAAC,CAA8B;QACpD,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,IAAW,cAAc;QACvB,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM;YAAE,OAAO,EAAE,CAAC;QAChE,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC7F,CAAC;IAED,8CAA8C;IAC9C,IAAW,cAAc;QACvB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,IAAW,cAAc;QACvB,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAC7F,CAAC;IAED,8CAA8C;IAC9C,IAAW,cAAc;QACvB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAEM,sBAAsB,GAAkB,IAAI,CAAC;IAEpD,sDAAsD;IACtD,IAAW,sBAAsB;QAC/B,OAAO,IAAI,CAAC,sBAAsB,CAAC;IACrC,CAAC;IACD,sDAAsD;IACtD,IAAW,sBAAsB,CAAC,KAAoB;QACpD,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;IACtC,CAAC;IAED,IAAW,cAAc;QACvB,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAC7F,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,8CAA8C;IAC9C,IAAW,cAAc;QACvB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAEM,kBAAkB,CAAC,EAAU;QAClC,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC1B,CAAC;IAED,kDAAkD;IAC3C,kBAAkB,CAAC,EAAU;QAClC,OAAO,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC;IAEM,qBAAqB,CAAC,CAA8B;QACzD,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM;YAAE,OAAO,IAAI,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAChF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACrC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,qDAAqD;IAC9C,qBAAqB,CAAC,CAA8B;QACzD,OAAO,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IAEM,UAAU,CAAC,EAAU;QAC1B,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACtB,CAAC;IAED,0CAA0C;IACnC,UAAU,CAAC,EAAU;QAC1B,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IAEM,cAAc,CAAC,IAAiB;QACrC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,QAAQ,CAAC;YACd,KAAK,aAAa;gBAChB,OAAO,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;YAC5B,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1C;gBACE,OAAO,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAED,8CAA8C;IACvC,cAAc,CAAC,IAAiB;QACrC,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAEM,aAAa,CAAC,IAAiB;QACpC,OAAO,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,6CAA6C;IACtC,aAAa,CAAC,IAAiB;QACpC,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAEM,aAAa,CAAC,CAAkB;QACrC,IAAI,CAAC,CAAC,CAAC,cAAc;YAAE,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAChE,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;YAClG,IAAI,EAAE,CAAC,GAAG,IAAI,IAAI;gBAAE,OAAO,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,IAAI,EAAE,CAAC,EAAE,IAAI,IAAI;gBAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI;gBAAE,OAAO,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,IAAI,EAAE,CAAC,QAAQ,IAAI,IAAI;gBAAE,OAAO,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;YACjF,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED,6CAA6C;IACtC,aAAa,CAAC,CAAkB;QACrC,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED,IAAW,SAAS;QAClB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,WAAW,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC;QAChG,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,WAAW,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,SAAS,CAAC;QAC9F,OAAO,wBAAwB,CAAC;IAClC,CAAC;IAED,yCAAyC;IACzC,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,IAAW,qBAAqB;QAC9B,OAAO,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,0BAA0B,CAAC;IACxF,CAAC;IAED,qDAAqD;IACrD,IAAW,qBAAqB;QAC9B,OAAO,IAAI,CAAC,qBAAqB,CAAC;IACpC,CAAC;IAEM,cAAc,CAAC,EAAU;QAC9B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QACnC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QAED,mDAAmD;QACnD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAU,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;YAC1C,CAAC,CAAE,UAA8B;YACjC,CAAC,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ;gBAC9C,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAG,UAAoC,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;gBACjF,CAAC,CAAC,EAAE,CAAC;QAEP,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAU,CAAC,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QACpE,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,SAAS,GAAG,QAAyB,CAAC;QAC7C,CAAC;aAAM,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,IAAI,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAE,QAAiC,CAAC,KAAK,CAAC,EAAE,CAAC;YACtI,IAAI,CAAC,SAAS,GAAI,QAAqC,CAAC,KAAK,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACtB,CAAC;QAED,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC;QACjD,IAAI,CAAC,eAAe,GAAI,CAAC,CAAC,WAA2B,IAAI,gBAAgB,CAAC;QAC1E,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,eAAe,IAAI,IAAI,CAAC;QACjD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAe,CAAC,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,+BAA+B,EAAE,2BAA2B,EAAE,CAAC,CAAC;QAC9I,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAe,CAAC,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3E,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAqB,CAAC,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,kBAAkB,EAAE,QAAQ,EAAE,GAAG,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC,CAAC;QACzJ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QACrC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC;IAC5C,CAAC;IAED,8CAA8C;IACvC,cAAc,CAAC,EAAU;QAC9B,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,IAAW,gBAAgB;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC/E,CAAC;IAED,gDAAgD;IAChD,IAAW,gBAAgB;QACzB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAEM,kBAAkB,CAAC,CAA6B;QACrD,OAAO,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACnD,CAAC;IAED,kDAAkD;IAC3C,kBAAkB,CAAC,CAA6B;QACrD,OAAO,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IAEO,KAAK,CAAI,GAA8B,EAAE,QAAW;QAC1D,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACvC,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAM,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAEO,SAAS;QACf,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,mDAAmD;IAE3C,OAAO;QACb,MAAM,KAAK,GAAc,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAc,EAAE,CAAC;QAE5B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC;YACT,EAAE,EAAE,UAAU;YACd,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,gBAAgB;YACvB,IAAI,EAAE,kBAAkB;YACxB,GAAG,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,IAAI,OAAO;YAC7C,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;YACJ,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,KAAK;YACb,IAAI,EAAE;gBACJ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,IAAI,OAAO,EAAE;gBAC5D,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,EAAE;aAC9F;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;QAChD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;YACjC,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC;YACvB,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC;YAC1C,IAAI,EAAE,CAAC,GAAG;gBAAE,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC;YACzD,IAAI,EAAE,CAAC,KAAK;gBAAE,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAClC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;gBACtC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBACvB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;oBACzC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACxB,CAAC;qBAAM,CAAC;oBACN,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;oBAC1D,IAAI,UAAU,EAAE,CAAC;wBACf,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;wBAC9C,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACxC,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAClE,MAAM,cAAc,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACtD,OAAO,CAAC,YAAY,IAAI,CAAC,cAAc,CAAC;QAC1C,CAAC,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9D,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;gBAC5B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;oBACtB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtC,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACpE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC3C,CAAC;QACD,8EAA8E;QAC9E,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QAE/C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAEO,UAAU,CAAC,EAAiB,EAAE,CAAS;QAC7C,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC3C,IAAI,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;QACrB,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC;YAC7C,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YACvC,KAAK,GAAG,MAAM,EAAE,WAAW,IAAI,MAAM,EAAE,IAAI,CAAC;QAC9C,CAAC;QACD,KAAK,GAAG,KAAK,IAAI,EAAE,CAAC,GAAG,IAAI,QAAQ,CAAC;QAEpC,MAAM,IAAI,GAA+B,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QACrE,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;QACxC,CAAC;QACD,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,KAAK;YACX,KAAK;YACL,IAAI,EAAE,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,sBAAsB;YACrD,GAAG,EAAE,EAAE,CAAC,IAAI;YACZ,IAAI;YACJ,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;YACJ,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,IAAI;SACb,CAAC;IACJ,CAAC;IAEO,QAAQ,CAAC,IAAiB;QAChC,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM;YAChD,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI;YAC9B,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,qBAAqB;YACpD,GAAG,EAAE,IAAI,CAAC,IAAI;YACd,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACzB,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;YACJ,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI;SACb,CAAC;IACJ,CAAC;IAEO,QAAQ,CAAC,IAAiB;QAChC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC;oBACtC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;oBACzB,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC;gBAC9E,OAAO,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,IAAI,QAAQ,EAAE,CAAC,CAAC;YACpD,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC7F,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC;oBACtC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;oBACzB,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC;gBAC9E,OAAO,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,IAAI,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;YACnF,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACxD,KAAK,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1F,KAAK,WAAW,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChG,KAAK,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;YAC3E,KAAK,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;YACjE,KAAK,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YAC7G,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAEO,UAAU;QAChB,OAAO;YACL,EAAE,EAAE,UAAU;YACd,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,WAAW,IAAI,CAAC,kBAAkB,IAAI,GAAG,EAAE;YAClD,IAAI,EAAE,sBAAsB;YAC5B,GAAG,EAAE,IAAI,CAAC,eAAe;YACzB,IAAI,EAAE;gBACJ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,CAAC,kBAAkB,IAAI,GAAG,EAAE;gBACpD,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE;aACvC;YACD,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;YACJ,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI;SACb,CAAC;IACJ,CAAC;IAEO,QAAQ;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,WAAW,CAAC;QAC7E,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAA0B,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QACzE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnF,OAAO;YACL,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,IAAI;YACX,IAAI,EAAE,oBAAoB;YAC1B,GAAG,EAAE,WAAW;YAChB,IAAI;YACJ,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;YACJ,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI;SACb,CAAC;IACJ,CAAC;IAEO,SAAS;QACf,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACtD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1B,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,sBAAsB;IAEf,UAAU,CAAC,EAAU;QAC1B,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IACvB,CAAC;IAED,0CAA0C;IACnC,UAAU,CAAC,EAAU;QAC1B,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IAED,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACrL,CAAC;IAED,4CAA4C;IAC5C,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,IAAW,mBAAmB;QAC5B,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpF,CAAC;IAED,mDAAmD;IACnD,IAAW,mBAAmB;QAC5B,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IACD,IAAW,cAAc;QACvB,MAAM,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACrD,CAAC;IAED,8CAA8C;IAC9C,IAAW,cAAc;QACvB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IACD,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;IACtE,CAAC;IAED,4CAA4C;IAC5C,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IACD,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;IAChE,CAAC;IAED,0CAA0C;IAC1C,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IACD,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,MAAM,EAAE,UAAU,IAAI,EAAE,CAAC;IACvC,CAAC;IAED,0CAA0C;IAC1C,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,2BAA2B;IAEpB,aAAa,CAAC,IAAY,IAAU,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAAC,CAAC,CAAC,IAAI,GAAG,IAA6B,CAAC;QAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IAAC,CAAC,CAAC,CAAC;IAEhJ,6CAA6C;IACtC,aAAa,CAAC,IAAY;QAC/B,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IACM,YAAY,CAAC,GAAW,IAAU,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC;QAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IAAC,CAAC,CAAC,CAAC;IAEnH,4CAA4C;IACrC,YAAY,CAAC,GAAW;QAC7B,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IACM,cAAc,CAAC,KAAa,IAAU,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAAC,CAAC,CAAC,KAAK,GAAG,KAAK,IAAI,SAAS,CAAC;QAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IAAC,CAAC,CAAC,CAAC;IAExI,8CAA8C;IACvC,cAAc,CAAC,KAAa;QACjC,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,yBAAyB;IAEzB,IAAW,WAAW;QACpB,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,EAAE,CAAC;YAC3D,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,2CAA2C;IAC3C,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IACM,UAAU,CAAC,IAAY;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,EAAE,CAAC;YAC3D,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACjE,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAED,0CAA0C;IACnC,UAAU,CAAC,IAAY;QAC5B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IACM,SAAS,CAAC,KAAa;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,YAAyD,CAAC;QACzE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,yCAAyC;IAClC,SAAS,CAAC,KAAa;QAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACM,UAAU,CAAC,KAAa,EAAE,KAAa;QAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,YAAyD,CAAC;QACzE,IAAI,CAAC,EAAE,CAAC;YAAC,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;YAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAAC,CAAC;IAChD,CAAC;IAED,0CAA0C;IACnC,UAAU,CAAC,KAAa,EAAE,KAAa;QAC5C,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IACM,UAAU,CAAC,KAAa,EAAE,KAAa;QAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,YAAyD,CAAC;QACzE,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAAC,CAAC;IAChE,CAAC;IAED,0CAA0C;IACnC,UAAU,CAAC,KAAa,EAAE,KAAa;QAC5C,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IACM,YAAY,CAAC,KAAa,IAAU,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAAC,CAAC,CAAC,KAAK,GAAG,KAAK,IAAI,SAAS,CAAC;QAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IAAC,CAAC,CAAC,CAAC;IAEpI,4CAA4C;IACrC,YAAY,CAAC,KAAa;QAC/B,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAEM,WAAW,CAAC,IAAY;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;QACtE,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAuB,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAClG,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED,2CAA2C;IACpC,WAAW,CAAC,IAAY;QAC7B,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAEM,QAAQ,CAAC,MAAc;QAC5B,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC;IAED,wCAAwC;IACjC,QAAQ,CAAC,MAAc;QAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IACM,WAAW,CAAC,MAAc;QAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;QAC5B,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;QAC9B,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;QAChD,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YAC5C,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,4BAA4B,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YAC3F,OAAO;QACT,CAAC;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED,2CAA2C;IACpC,WAAW,CAAC,MAAc;QAC/B,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IACO,YAAY,CAAC,IAAY,EAAE,MAAc;QAC/C,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;QACrB,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;YACxB,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACjB,SAAS;YACX,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,uCAAuC;IAEhC,iBAAiB,CAAC,CAAS,IAAU,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAE5F,iDAAiD;IAC1C,iBAAiB,CAAC,CAAS;QAChC,OAAO,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IACM,cAAc,CAAC,CAAS,IAAU,IAAI,CAAC,eAAe,GAAG,CAAgB,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAErG,8CAA8C;IACvC,cAAc,CAAC,CAAS;QAC7B,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IACM,YAAY,CAAC,EAAU,IAAU,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAEtF,4CAA4C;IACrC,YAAY,CAAC,EAAU;QAC5B,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IACM,cAAc,CAAC,CAAS,IAAU,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAEtF,8CAA8C;IACvC,cAAc,CAAC,CAAS;QAC7B,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IAED,iDAAiD;IAEjD,IAAW,QAAQ,KAAa,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEhF,wCAAwC;IACxC,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IACM,OAAO,CAAC,IAAY,IAAU,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;IAE5G,uCAAuC;IAChC,OAAO,CAAC,IAAY;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IACM,YAAY,CAAC,CAAS,IAAU,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAAC,IAAI,CAAC,WAAW,CAAC,+BAA+B,GAAG,CAAC,CAAC;QAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IAAC,CAAC,CAAC,CAAC;IAEhK,4CAA4C;IACrC,YAAY,CAAC,CAAS;QAC3B,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD;;;OAGG;IACI,eAAe;QACpB,IAAI,CAAC,QAAQ,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACjC,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IACM,cAAc,CAAC,CAAS,IAAU,IAAI,CAAC,cAAc,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,CAAmC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;IAE9J,8CAA8C;IACvC,cAAc,CAAC,CAAS;QAC7B,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IACM,WAAW,CAAC,CAAS,IAAU,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,CAAC,CAAC;QAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IAAC,CAAC,CAAC,CAAC;IAE3I,2CAA2C;IACpC,WAAW,CAAC,CAAS;QAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IACM,IAAI,CAAC,CAAS,IAAU,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAAC,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC;QAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IAAC,CAAC,CAAC,CAAC;IAE7H,oCAAoC;IAC7B,IAAI,CAAC,CAAS;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IACM,UAAU,CAAC,CAAS,IAAU,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAAC,IAAI,CAAC,cAAc,CAAC,qBAAqB,GAAG,CAAC,CAAC;QAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IAAC,CAAC,CAAC,CAAC;IAEvJ,0CAA0C;IACnC,UAAU,CAAC,CAAS;QACzB,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED,+BAA+B;IAExB,SAAS;QACd,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;IACzD,CAAC;IAED,yCAAyC;IAClC,SAAS;QACd,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;IAC1B,CAAC;IACM,OAAO;QACZ,MAAM,EAAE,GAAG,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IACvB,CAAC;IAED,uCAAuC;IAChC,OAAO;QACZ,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IACM,cAAc;QACnB,MAAM,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACpC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACZ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YAChE,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC;YAC1C,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;QAC/B,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;YAChE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC/B,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;oBAChC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;YACD,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,8CAA8C;IACvC,cAAc;QACnB,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;IAC/B,CAAC;IAEO,WAAW,CAAC,IAAqB,EAAE,EAAU,EAAE,KAAc,EAAE,MAAiB;QACtF,MAAM,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QACtD,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YAC/D,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;YAChF,KAAK,aAAa,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YACzE,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;YAC9D,KAAK,KAAK,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACjE,KAAK,WAAW,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;YACtG,KAAK,aAAa,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,kBAAkB,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YACjG,KAAK,YAAY,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC;YACjH,KAAK,YAAY,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC;QAC1J,CAAC;IACH,CAAC;IAED,oCAAoC;IAE7B,KAAK,CAAC,IAAI;QACf,MAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAChC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC;YACH,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACpD,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAC3D,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC;YAC3C,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC;YACrC,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC;YACrC,CAAC,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC;YACjD,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAClD,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/C,CAAC,CAAC,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC3D,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YAC1B,IAAI,EAAE,EAAE,CAAC;gBACP,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;gBACnB,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC,IAAI,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YACrF,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,gBAAgB,CAAC,CAAC,YAAY,EAAE,eAAe,IAAI,eAAe,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACnI,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;YAClB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAEM,QAAQ;QACb,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,kBAAkB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACvG,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,wCAAwC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACzG,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,MAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAChC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAClC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC,IAAI,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QACnF,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,IAAI,mCAAmC,EAAE,CAAC;YACrD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,IAAI,SAAS,EAAE,CAAC,CAAC;YACrI,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBACpC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,yCAAyC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9F,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG,OAAO,iBAAiB,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;gBACrI,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,IAAI,SAAS,EAAE,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC;YAC5F,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,MAAM,CAAC,YAAY,IAAI,kBAAkB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACxG,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,mBAAmB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC9H,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;YAClB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAEM,MAAM;QACX,MAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAChC,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACvC,OAAO;QACT,CAAC;QACD,MAAM,QAAQ,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,IAAI,sBAAsB,QAAQ,mFAAmF,CAAC,CAAC;IACrK,CAAC;IAED,sCAAsC;IAC/B,MAAM;QACX,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;IAEM,WAAW,CAAC,MAAc;QAC/B,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,WAAW,CAAC,CAAC,OAAO,WAAW,CAAC;YACrC,KAAK,WAAW,CAAC,CAAC,OAAO,WAAW,CAAC;YACrC,OAAO,CAAC,CAAC,OAAO,OAAO,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,2CAA2C;IACpC,WAAW,CAAC,MAAc;QAC/B,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAEM,aAAa,CAAC,IAAc;QACjC,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,KAAK,CAAC,CAAC,OAAO,QAAQ,CAAC;YAC5B,KAAK,MAAM,CAAC,CAAC,OAAO,cAAc,CAAC;YACnC,KAAK,KAAK,CAAC,CAAC,OAAO,WAAW,CAAC;YAC/B,KAAK,QAAQ,CAAC,CAAC,OAAO,QAAQ,CAAC;YAC/B,KAAK,MAAM,CAAC,CAAC,OAAO,WAAW,CAAC;YAChC,KAAK,QAAQ,CAAC,CAAC,OAAO,cAAc,CAAC;QACvC,CAAC;IACH,CAAC;IAED,6CAA6C;IACtC,aAAa,CAAC,IAAc;QACjC,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,iCAAiC;IAEzB,WAAW;QACjB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC7B,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAC;QAC5C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACxB,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC1C,MAAM,YAAY,GAAG,CAAC,EAAU,EAAE,IAAiB,EAAU,EAAE;YAC7D,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACpB,OAAO,OAAO,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;YAC1B,CAAC;YACD,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACjB,OAAO,CAAC,CAAC;YACX,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YACpC,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7C,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACnB,OAAO,CAAC,CAAC;QACX,CAAC,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAChC,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;QAC5D,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,IAAI,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,CAAC,EAAE,KAAK,UAAU,EAAE,CAAC;gBAC7C,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,eAAe,GAAG,CAAC,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,eAAe,GAAG,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAAqB,CAAC;QAC5C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAChC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACZ,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACrB,CAAC;QAED,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,EAAE;YACjC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC/B,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,MAAM,eAAe,GAAG,KAAK,GAAG,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;QAExF,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,EAAE;YACjC,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;YAC5F,4EAA4E;YAC5E,MAAM,SAAS,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,eAAe,GAAG,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACjG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;gBAC5B,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;gBACvC,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;QACnF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IAChD,CAAC;IAEM,QAAQ,CAAC,IAAa;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC;QAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;QAC/B,qEAAqE;QACrE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QACpB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;QAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAClD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;IAC3E,CAAC;IAED,wCAAwC;IACjC,QAAQ,CAAC,IAAa;QAC3B,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;8GAprDU,oBAAoB;6DAApB,oBAAoB;YA/rB7B,8BAAoE;YAqBhE,AApBF,uFAA8B,kEAoBrB;YA2pBT,qGAAkB;YAYpB,iBAAM;;YA3rBJ,cA6qBC;YA7qBD,oDA6qBC;YAED,eAWC;YAXD,yCAWC;4BA/rBK,YAAY,cAAE,iBAAiB,EAAE,yBAAyB,EAAE,kBAAkB;;iFAmsB7E,oBAAoB;cAtsBhC,SAAS;6BACI,IAAI,YACN,cAAc,WACf,CAAC,YAAY,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,kBAAkB,CAAC,iBAC1E,iBAAiB,CAAC,IAAI,YAE3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8rBT;;kBAGA,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBAGL,KAAK;;kBAQL,MAAM;;kBASN,MAAM;;kBACN,MAAM;;kBASN,MAAM;;kBA6IN,KAAK;;kBAGL,KAAK;;kFAjLK,oBAAoB","sourcesContent":["import { ChangeDetectorRef, Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewEncapsulation, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MJButtonDirective } from '@memberjunction/ng-ui-components';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { CompositeKey, IMetadataProvider, Metadata, UserInfo } from '@memberjunction/core';\nimport { MJMLTrainingPipelineEntity, MJMLModelEntity, PredictiveStudioTrainModelOperation, UserInfoEngine } from '@memberjunction/core-entities';\nimport { NavigationService } from '@memberjunction/ng-shared';\nimport { AngularSplitModule } from 'angular-split';\nimport { PSPipelineWizardComponent } from './ps-pipeline-wizard.component';\nimport {\n DOMINANCE_THRESHOLD_DEFAULT,\n parseDenyList,\n type SourceBinding,\n type FeatureStepGraph,\n type FeatureStep,\n type FeatureStepKind,\n type AsOfStrategy,\n type LeakageGuard,\n type ValidationStrategy,\n type ProblemType,\n} from '@memberjunction/predictive-studio-core';\nimport { PSPanelKey } from '../predictive-studio.types';\nimport { PredictiveStudioEngine } from '../engine/predictive-studio.engine';\n\ntype NodeType = 'src' | 'feat' | 'emb' | 'target' | 'algo' | 'output';\n\ninterface DagNode {\n id: string;\n type: NodeType;\n title: string;\n icon: string;\n tag?: string;\n rows: { k: string; v: string }[];\n x: number;\n y: number;\n hasIn: boolean;\n hasOut: boolean;\n}\n\ninterface DagEdge {\n from: string;\n to: string;\n}\n\nconst NODE_W = 230;\nconst NODE_H = 96;\nconst COL_GAP = 96;\nconst ROW_GAP = 28;\nconst PAD_X = 40;\nconst PAD_Y = 40;\n\nconst SOURCE_KINDS: SourceBinding['Kind'][] = ['Entity', 'Query', 'ExternalEntity', 'VectorSet', 'FeaturePipeline'];\nconst STEP_KINDS: FeatureStepKind[] = ['select', 'impute', 'standardize', 'onehot', 'bin', 'embedding', 'llm-derived', 'flow-agent', 'vision-llm'];\nconst PROBLEM_TYPES: ProblemType[] = ['classification', 'regression'];\nconst IMPUTE_STRATEGIES: Array<'mean' | 'median' | 'mode' | 'constant'> = ['mean', 'median', 'mode', 'constant'];\n\nconst SOURCE_ICONS: Record<SourceBinding['Kind'], string> = {\n Entity: 'fa-solid fa-table',\n Query: 'fa-solid fa-magnifying-glass-chart',\n ExternalEntity: 'fa-solid fa-arrows-turn-to-dots',\n VectorSet: 'fa-solid fa-vector-square',\n FeaturePipeline: 'fa-solid fa-diagram-project',\n};\n\nconst STEP_ICONS: Record<FeatureStepKind, string> = {\n select: 'fa-solid fa-list-check',\n impute: 'fa-solid fa-fill-drip',\n standardize: 'fa-solid fa-ruler-combined',\n onehot: 'fa-solid fa-table-cells',\n bin: 'fa-solid fa-chart-simple',\n embedding: 'fa-solid fa-vector-square',\n 'llm-derived': 'fa-solid fa-wand-magic-sparkles',\n 'flow-agent': 'fa-solid fa-robot',\n 'vision-llm': 'fa-solid fa-eye',\n};\n\nconst PS_PIPELINES_STARTER_PROMPT =\n 'Help me build a training pipeline. I will tell you what I want to predict and on which entity; ' +\n 'you assemble the features (guarding against leakage), pick an algorithm, and train a versioned model.';\n\n@Component({\n standalone: true,\n selector: 'ps-pipelines',\n imports: [CommonModule, MJButtonDirective, PSPipelineWizardComponent, AngularSplitModule],\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['../predictive-studio.shared.css', './ps-pipelines.component.css'],\n template: `\n <div class=\"ps-panel ps-pipelines\" data-testid=\"ps-pipelines-panel\">\n @if (pipelines.length === 0) {\n <div class=\"ps-empty\" data-testid=\"ps-pipelines-empty\">\n <span class=\"ps-empty-ico\"><i class=\"fa-solid fa-diagram-project\"></i></span>\n <h3>No training pipelines yet</h3>\n <p>\n A training pipeline assembles features from your data, picks an algorithm, and trains a\n versioned model. You can build one step-by-step with the manual wizard or ask the Model\n Development Agent to design one for you.\n </p>\n <div class=\"empty-actions\" style=\"display: flex; gap: 8px; margin-top: 12px;\">\n <button mjButton variant=\"primary\" size=\"sm\" data-testid=\"ps-pipelines-new-btn-empty\"\n (click)=\"openWizard()\">\n <i class=\"fa-solid fa-plus\"></i> New Pipeline\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-pipelines-ask-agent\"\n (click)=\"askAgent.emit(starterPrompt)\">\n <i class=\"fa-solid fa-robot\"></i> Ask the agent\n </button>\n </div>\n </div>\n } @else {\n <div class=\"pl-layout\" [class.catalog-collapsed]=\"isCatalogCollapsed\">\n @if (isCatalogCollapsed) {\n <div class=\"pl-collapsed-strip\" role=\"region\" aria-label=\"Pipelines catalog (collapsed)\">\n <button class=\"pl-rail-collapse\" type=\"button\" (click)=\"toggleCatalog()\" aria-label=\"Expand pipelines catalog\" title=\"Expand catalog\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </button>\n <div class=\"pl-collapsed-strip-label\"><i class=\"fa-solid fa-diagram-project\"></i></div>\n </div>\n }\n\n <as-split direction=\"horizontal\" class=\"pl-splitter\" unit=\"percent\" [gutterSize]=\"6\" (dragEnd)=\"onSplitDragEnd($event.sizes)\">\n @if (!isCatalogCollapsed) {\n <as-split-area [size]=\"catalogSizePct\" [minSize]=\"18\" [maxSize]=\"50\">\n <!-- Left Column: Master Pipeline Catalog -->\n <div class=\"pl-catalog\" data-testid=\"ps-pipelines-catalog\">\n <div class=\"pl-catalog-header\">\n <div class=\"pl-catalog-title-row\">\n <h2>Pipelines ({{ filteredPipelines.length }})</h2>\n <div style=\"display:flex;gap:6px;align-items:center\">\n <button mjButton variant=\"primary\" size=\"sm\" data-testid=\"ps-pipelines-new\" (click)=\"openWizard()\">\n <i class=\"fa-solid fa-plus\"></i> New\n </button>\n <button class=\"pl-collapse-btn\" type=\"button\" (click)=\"toggleCatalog()\" title=\"Collapse catalog\" aria-label=\"Collapse catalog\">\n <i class=\"fa-solid fa-chevron-left\"></i>\n </button>\n </div>\n </div>\n <div class=\"pl-search-box\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n <input type=\"text\" [value]=\"searchQuery\" (input)=\"onSearchInput($event)\" placeholder=\"Filter pipelines...\" />\n </div>\n <div class=\"pl-filter-chips\">\n <button class=\"pl-filter-chip\" [class.active]=\"activeFilter === 'all'\" (click)=\"setFilter('all')\">All</button>\n <button class=\"pl-filter-chip\" [class.active]=\"activeFilter === 'published'\" (click)=\"setFilter('published')\">Published</button>\n <button class=\"pl-filter-chip\" [class.active]=\"activeFilter === 'draft'\" (click)=\"setFilter('draft')\">Draft</button>\n <button class=\"pl-filter-chip\" [class.active]=\"activeFilter === 'core'\" (click)=\"setFilter('core')\">MJ Core</button>\n </div>\n </div>\n\n <!-- Scrollable Catalog Cards List (preserves data-testid=\"ps-pipelines-picker\" and \"ps-pipelines-pill\") -->\n <div class=\"pl-picker\" data-testid=\"ps-pipelines-picker\">\n @for (p of filteredPipelines; track p.ID) {\n <button class=\"pl-pill pipeline-card\" [class.on]=\"isSelectedPipeline(p)\"\n data-testid=\"ps-pipelines-pill\" (click)=\"selectPipeline(p.ID)\" [title]=\"p.Name\">\n <div class=\"pl-card-top\">\n <div class=\"pl-card-name\">{{ p.Name }}</div>\n <span class=\"ps-badge\" [class]=\"statusClass(p.Status)\">{{ p.Status }}</span>\n </div>\n <div class=\"pl-card-meta\">\n <span class=\"pl-entity-tag\">{{ targetEntityName(p) }}</span>\n <span>•</span>\n <span class=\"pl-target-tag\">{{ p.TargetVariable || 'Target' }}</span>\n </div>\n <div class=\"pl-card-meta\" style=\"justify-content: space-between; margin-top: 2px;\">\n <span>{{ p.ProblemType }}</span>\n @if (bestMetricForPipeline(p); as bm) {\n <span class=\"pl-metric-badge\"><i class=\"fa-solid fa-trophy\" style=\"color:#eab308\"></i> {{ bm }}</span>\n }\n </div>\n </button>\n }\n </div>\n </div>\n </as-split-area>\n }\n\n <as-split-area [size]=\"isCatalogCollapsed ? 100 : workspaceSizePct\" [minSize]=\"40\">\n <!-- Right Column: Human-Centric Workspace (Stages View Default + DAG View Toggle) -->\n <div class=\"pl-workspace\" data-testid=\"ps-pipelines-workspace\">\n <div class=\"pl-workspace-header\">\n <div class=\"pl-workspace-title-area\">\n <div class=\"pl-breadcrumbs\">\n <span>Pipelines</span> <i class=\"fa-solid fa-chevron-right\" style=\"font-size: 10px;\"></i>\n <span>{{ pipelineDomain(selectedPipeline) }}</span> <i class=\"fa-solid fa-chevron-right\" style=\"font-size: 10px;\"></i>\n <strong>{{ selectedPipeline?.Name }}</strong>\n </div>\n <div class=\"pl-title-row\">\n <h1>{{ selectedPipeline?.Name }}</h1>\n @if (selectedPipeline) {\n <span class=\"ps-badge\" [class]=\"statusClass(selectedPipeline.Status)\">{{ selectedPipeline.Status }}</span>\n @if (bestMetricForPipeline(selectedPipeline); as bm) {\n <span class=\"pl-metric-badge\"><i class=\"fa-solid fa-trophy\" style=\"color:#eab308\"></i> {{ bm }}</span>\n }\n }\n </div>\n </div>\n\n <!-- Action Toolbar -->\n <div class=\"pl-toolbar\">\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"toggleViewMode()\" [title]=\"isGraphView ? 'Switch to 5-Stage Progressive Flow' : 'Switch to Pipeline Graph View'\">\n <i class=\"fa-solid\" [class.fa-diagram-project]=\"!isGraphView\" [class.fa-layer-group]=\"isGraphView\"></i>\n {{ isGraphView ? 'Stages View' : 'Graph View' }}\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-pipelines-clone\" [disabled]=\"!selectedPipeline\" (click)=\"cloneSelected()\">\n <i class=\"fa-solid fa-copy\"></i> Clone\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-pipelines-save\" [disabled]=\"!dirty || busy\" (click)=\"save()\">\n <i class=\"fa-solid fa-floppy-disk\"></i> Save\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-pipelines-validate\" [disabled]=\"busy\" (click)=\"validate()\">\n <i class=\"fa-solid fa-circle-check\"></i> Validate\n </button>\n <button mjButton variant=\"primary\" size=\"sm\" data-testid=\"ps-pipelines-train\" [disabled]=\"busy || dirty\" (click)=\"train()\">\n <i class=\"fa-solid fa-play\"></i> Train\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"refine()\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Agent\n </button>\n @if (dirty) { <span class=\"ps-tag amber\" data-testid=\"ps-pipelines-dirty\"><i class=\"fa-solid fa-pen\"></i> Unsaved</span> }\n </div>\n </div>\n\n <!-- Stages View (Human-Readable Progressive Stages) -->\n @if (viewMode === 'stages') {\n <div class=\"pl-stages-body\">\n <!-- STAGE 1: Target Definition & Decision Boundary -->\n <div class=\"pl-stage-card\">\n <div class=\"pl-stage-header\">\n <div class=\"pl-stage-title-left\">\n <span class=\"pl-stage-num\">1</span>\n <div>\n <h3>Target Definition & Temporal Decision Boundary</h3>\n <span class=\"pl-stage-subtitle\">Defines the training unit entity, target variable, problem type, and point-in-time cutoff.</span>\n </div>\n </div>\n </div>\n\n <div class=\"pl-grid-4\">\n <div class=\"pl-metric-box\">\n <label>Target Entity</label>\n <div class=\"val\"><i class=\"fa-solid fa-table\" style=\"color:var(--mj-brand-primary)\"></i> {{ targetEntityName(selectedPipeline) }}</div>\n <div class=\"sub\">Primary training unit</div>\n </div>\n <div class=\"pl-metric-box\">\n <label>Target Variable</label>\n <div class=\"val\"><i class=\"fa-solid fa-bullseye\" style=\"color:var(--mj-status-warning)\"></i> {{ editTargetVariable || 'Not set' }}</div>\n <div class=\"sub\">{{ editProblemType }} outcome</div>\n </div>\n <div class=\"pl-metric-box\">\n <label>Problem Type</label>\n <div class=\"val\"><i class=\"fa-solid fa-chart-pie\" style=\"color:var(--mj-brand-primary)\"></i> {{ editProblemType }}</div>\n <div class=\"sub\">Optimization discipline</div>\n </div>\n <div class=\"pl-metric-box\" style=\"border-left: 3px solid var(--mj-brand-primary);\">\n <label>As-Of Temporal Anchor</label>\n <div class=\"val\"><i class=\"fa-solid fa-clock-rotate-left\" style=\"color:var(--mj-brand-primary)\"></i> {{ asOfLabel }}</div>\n <div class=\"sub\">Temporal cutoff to prevent leakage</div>\n </div>\n </div>\n </div>\n\n <!-- STAGE 2: Feature Architecture & Relational Sources -->\n <div class=\"pl-stage-card\">\n <div class=\"pl-stage-header\">\n <div class=\"pl-stage-title-left\">\n <span class=\"pl-stage-num\">2</span>\n <div>\n <h3>Feature Architecture & Relational Data Sources</h3>\n <span class=\"pl-stage-subtitle\">Combines core entity attributes with linked relational features across the database.</span>\n </div>\n </div>\n <div style=\"display:flex; gap:6px;\">\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-pipelines-add-source\" (click)=\"addSource()\"><i class=\"fa-solid fa-plus\"></i> Add Source</button>\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-pipelines-add-step\" (click)=\"addStep()\"><i class=\"fa-solid fa-sliders\"></i> Add Step</button>\n </div>\n </div>\n\n <div class=\"pl-grid-3\">\n <!-- Feature Group: Sources -->\n <div class=\"pl-feature-group\">\n <div class=\"pl-fg-head\">\n <span><i class=\"fa-solid fa-database\"></i> Feed-In Sources ({{ editSources.length }})</span>\n </div>\n <div class=\"pl-fg-body\">\n @for (s of editSources; track $index) {\n <div class=\"pl-feature-row\">\n <span class=\"pl-feature-name\">{{ s.Ref || 'Unnamed source' }}</span>\n <span class=\"ps-tag\">{{ s.Kind }}</span>\n </div>\n }\n </div>\n </div>\n\n <!-- Feature Group: Feature Steps -->\n <div class=\"pl-feature-group\">\n <div class=\"pl-fg-head\">\n <span><i class=\"fa-solid fa-sliders\"></i> Feature Transforms ({{ editSteps.length }})</span>\n </div>\n <div class=\"pl-fg-body\">\n @for (st of editSteps; track st.Id) {\n <div class=\"pl-feature-card\" data-testid=\"ps-pipelines-step-card\" (click)=\"selectStep(st.Id)\">\n <div class=\"pl-feature-card-header\">\n <span class=\"pl-feature-name\">{{ st.Label || st.Kind }}</span>\n <span class=\"ps-tag\">{{ st.Kind }}</span>\n </div>\n @if (getStepColumns(st); as cols) {\n @if (cols.length > 0) {\n <div class=\"pl-col-chips\">\n @for (col of cols; track col) {\n <span class=\"pl-col-chip\">{{ col }}</span>\n }\n </div>\n }\n }\n @if (getStepInputs(st); as inputs) {\n @if (inputs.length > 0) {\n <div class=\"pl-step-inputs\">\n <i class=\"fa-solid fa-arrow-right-to-bracket\"></i>\n <span>From: {{ inputs.join(', ') }}</span>\n </div>\n }\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Feature Group: Algorithm Selection -->\n <div class=\"pl-feature-group\">\n <div class=\"pl-fg-head\">\n <span><i class=\"fa-solid fa-shapes\"></i> Selected Algorithm</span>\n </div>\n <div class=\"pl-fg-body\">\n <div class=\"pl-feature-row\">\n <span class=\"pl-feature-name\">{{ selectedAlgorithmName }}</span>\n <span class=\"ps-tag primary\">Active</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Leakage Guard Bar -->\n <div class=\"pl-leakage-box\">\n <i class=\"fa-solid fa-shield-halved\"></i>\n <div style=\"flex:1;\">\n <div style=\"font-size:13px; font-weight:700; color:var(--mj-text-primary);\">Leakage Guard Active</div>\n <div style=\"font-size:12px; color:var(--mj-text-secondary); margin-top:2px;\">\n Deny-listed columns are excluded prior to matrix assembly. Dominance threshold: <strong>{{ editLeakage.SingleFeatureDominanceThreshold }}</strong>\n </div>\n <div style=\"margin-top:6px;\">\n @if (editLeakage.DenyFields.length === 0) {\n <span style=\"font-size:12px; color:var(--mj-text-muted);\">No deny-list columns configured.</span>\n } @else {\n @for (col of editLeakage.DenyFields; track col) {\n <span class=\"pl-deny-chip\">{{ col }}</span>\n }\n }\n </div>\n </div>\n </div>\n </div>\n\n <!-- STAGE 3: Preprocessing & Data Hygiene -->\n <div class=\"pl-stage-card\">\n <div class=\"pl-stage-header\">\n <div class=\"pl-stage-title-left\">\n <span class=\"pl-stage-num\">3</span>\n <div>\n <h3>Fitted Preprocessing & Validation Discipline</h3>\n <span class=\"pl-stage-subtitle\">Parameters fitted once on training folds and frozen with the model artifact for inference anti-skew.</span>\n </div>\n </div>\n </div>\n\n <div class=\"pl-grid-4\">\n <div class=\"pl-metric-box\">\n <label>Validation Strategy</label>\n <div class=\"val\">{{ editValidation.Strategy }}</div>\n <div class=\"sub\">Cross-validation split</div>\n </div>\n <div class=\"pl-metric-box\">\n <label>Locked Holdout</label>\n <div class=\"val\">{{ (editValidation.LockedHoldoutFraction * 100).toFixed(0) }}%</div>\n <div class=\"sub\">Honest benchmark score</div>\n </div>\n <div class=\"pl-metric-box\">\n <label>Folds / Split</label>\n <div class=\"val\">{{ editValidation.Strategy === 'kfold' ? (editValidation.K || 5) + ' Folds' : ((editValidation.TestSize || 0.2) * 100).toFixed(0) + '% Test' }}</div>\n <div class=\"sub\">Training evaluation</div>\n </div>\n <div class=\"pl-metric-box\">\n <label>Anti-Skew Guarantee</label>\n <div class=\"val\"><i class=\"fa-solid fa-lock\" style=\"color:var(--mj-status-success)\"></i> Enforced</div>\n <div class=\"sub\">Frozen params travel with model</div>\n </div>\n </div>\n </div>\n\n <!-- STAGE 4: Multi-Algorithm Tournament & Leaderboard -->\n <div class=\"pl-stage-card\">\n <div class=\"pl-stage-header\">\n <div class=\"pl-stage-title-left\">\n <span class=\"pl-stage-num\">4</span>\n <div>\n <h3>Multi-Algorithm Tournament Leaderboard</h3>\n <span class=\"pl-stage-subtitle\">Models trained and scored on locked holdout data for this pipeline.</span>\n </div>\n </div>\n </div>\n\n @if (pipelineModels.length === 0) {\n <div style=\"padding: 16px; text-align: center; color: var(--mj-text-muted); font-size: 13px;\">\n <i class=\"fa-solid fa-flask\" style=\"font-size: 24px; margin-bottom: 8px; display: block; opacity: 0.5;\"></i>\n No models trained yet for this pipeline. Click <strong>Train</strong> to execute the first training run.\n </div>\n } @else {\n <table class=\"pl-table\">\n <thead>\n <tr>\n <th>Version</th>\n <th>Algorithm</th>\n <th>Holdout Score</th>\n <th>Status</th>\n <th>Trained At</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (m of pipelineModels; track m.ID) {\n <tr [class.winner-row]=\"m.Status === 'Published'\" class=\"pl-model-row\" (click)=\"openModelRecord(m.ID)\" style=\"cursor:pointer;\" title=\"Open model record in Explorer\">\n <td>\n <div style=\"display:flex;align-items:center;gap:6px\">\n <a class=\"pl-model-link\" href=\"javascript:void(0)\" (click)=\"$event.stopPropagation(); openModelRecord(m.ID)\">\n <strong>v{{ m.Version }}</strong>\n </a>\n @if (m.Status === 'Published') {\n <span class=\"ps-tag success\"><i class=\"fa-solid fa-trophy\"></i> Winner</span>\n }\n </div>\n </td>\n <td>{{ m.Algorithm || 'Algorithm' }}</td>\n <td><strong>{{ formatHoldout(m) }}</strong></td>\n <td><span class=\"ps-badge\" [class]=\"statusClass(m.Status)\">{{ m.Status }}</span></td>\n <td>{{ m.TrainedAt | date:'short' }}</td>\n <td style=\"text-align:right\">\n <button type=\"button\" class=\"pl-action-icon-btn\" (click)=\"$event.stopPropagation(); openModelRecord(m.ID)\" title=\"Open model record in Explorer\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n\n <!-- STAGE 5: Production Serving & Deep Link -->\n <div class=\"pl-stage-card\">\n <div class=\"pl-stage-header\">\n <div class=\"pl-stage-title-left\">\n <span class=\"pl-stage-num\">5</span>\n <div>\n <h3>Production Serving & Model Registry</h3>\n <span class=\"pl-stage-subtitle\">Active inference wiring and model registry status.</span>\n </div>\n </div>\n <div style=\"display:flex;gap:8px;align-items:center;\">\n @if (publishedModel; as pub) {\n <button mjButton variant=\"secondary\" size=\"sm\" type=\"button\"\n (click)=\"openModelRecord(pub.ID)\"\n title=\"Open model record in Explorer\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i> Open Model Record\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" type=\"button\"\n (click)=\"viewTrainingRuns(pub.ID)\"\n title=\"View training runs for this model\">\n <i class=\"fa-solid fa-flask\"></i> View Training Runs\n </button>\n }\n </div>\n </div>\n\n <div class=\"pl-serving-box\">\n <div class=\"pl-metric-box\">\n <label>Active Serving Model</label>\n <div class=\"val\">\n @if (publishedModel; as pub) {\n <span>v{{ pub.Version }} ({{ pub.Algorithm || 'Model' }}) • ID: {{ pub.ID.slice(0, 8) }}…</span>\n } @else {\n <span style=\"color:var(--mj-text-muted);\">No published model serving live predictions yet.</span>\n }\n </div>\n <div class=\"sub\">Model: {{ publishedModel?.Status || 'None' }} • Pipeline: {{ selectedPipeline?.Status }}</div>\n </div>\n <div class=\"pl-metric-box\" style=\"background:var(--mj-brand-primary-subtle); border-color:rgba(0,118,182,0.2);\">\n <label>Inference Readiness</label>\n <div class=\"val\" style=\"color:var(--mj-brand-primary)\">\n <i class=\"fa-solid fa-circle-check\"></i> Ready\n </div>\n <div class=\"sub\">Batch & on-demand scoring enabled</div>\n </div>\n </div>\n </div>\n\n </div>\n }\n\n <!-- Graph Canvas & Inspector -->\n @if (isGraphView) {\n <div class=\"builder\">\n <as-split direction=\"horizontal\" class=\"builder-splitter\" unit=\"percent\" [gutterSize]=\"6\" (dragEnd)=\"onInspectorSplitDragEnd($event.sizes)\">\n <as-split-area [size]=\"isInspectorCollapsed ? 100 : canvasSizePct\" [minSize]=\"40\">\n <!-- Canvas Wrap -->\n <div class=\"canvas-wrap\">\n <div class=\"canvas-bar\">\n <div class=\"canvas-bar-left\">\n <span class=\"ps-small ps-muted\" style=\"font-weight:600\">Add to Graph:</span>\n <button class=\"ps-pchip s\" data-testid=\"ps-pipelines-add-source\" (click)=\"addSource()\"><i class=\"fa-solid fa-database\"></i> Source</button>\n <button class=\"ps-pchip f\" data-testid=\"ps-pipelines-add-step\" (click)=\"addStep()\"><i class=\"fa-solid fa-sliders\"></i> Feature step</button>\n </div>\n <div class=\"canvas-bar-right\">\n <div class=\"ps-zoom-controls\">\n <button class=\"ps-icon-btn\" (click)=\"zoomOut()\" [disabled]=\"zoomLevel <= 0.5\" title=\"Zoom Out\"><i class=\"fa-solid fa-minus\"></i></button>\n <span class=\"ps-zoom-label\" (click)=\"resetZoom()\" title=\"Reset to 100%\">{{ Math.round(zoomLevel * 100) }}%</span>\n <button class=\"ps-icon-btn\" (click)=\"zoomIn()\" [disabled]=\"zoomLevel >= 2.0\" title=\"Zoom In\"><i class=\"fa-solid fa-plus\"></i></button>\n </div>\n <button class=\"ps-icon-btn\" [class.active]=\"!isInspectorCollapsed\" (click)=\"toggleInspector()\" [title]=\"isInspectorCollapsed ? 'Open Inspector' : 'Collapse Inspector'\">\n <i class=\"fa-solid fa-circle-info\"></i>\n </button>\n <span class=\"ps-small ps-muted ps-node-count\"><i class=\"fa-solid fa-circle-nodes\"></i> {{ nodes.length }} nodes · {{ edges.length }} edges</span>\n </div>\n </div>\n\n <div class=\"ps-flow big\" data-testid=\"ps-pipelines-canvas\">\n <div class=\"ps-graph-viewport\"\n [style.width.px]=\"canvasW\"\n [style.height.px]=\"canvasH\"\n [style.transform]=\"'scale(' + zoomLevel + ')'\">\n <svg class=\"ps-graph-edges\"\n data-testid=\"ps-pipelines-edges\"\n [attr.width]=\"canvasW\"\n [attr.height]=\"canvasH\">\n <defs>\n <marker id=\"ps-arrow\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto\">\n <path d=\"M 0 1.5 L 8 5 L 0 8.5 z\" fill=\"var(--mj-border-strong)\" />\n </marker>\n <marker id=\"ps-arrow-active\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto\">\n <path d=\"M 0 1.5 L 8 5 L 0 8.5 z\" fill=\"var(--mj-brand-primary)\" />\n </marker>\n </defs>\n @for (edge of edges; track edge.from + '->' + edge.to) {\n <path class=\"ps-edge-path\"\n [class.active]=\"isEdgeActive(edge)\"\n [attr.d]=\"edgePath(edge)\"\n [attr.marker-end]=\"isEdgeActive(edge) ? 'url(#ps-arrow-active)' : 'url(#ps-arrow)'\"></path>\n }\n </svg>\n @for (node of nodes; track node.id) {\n <div class=\"ps-node\" data-testid=\"ps-pipelines-node\" [attr.data-node-id]=\"node.id\"\n [ngClass]=\"node.type\" [class.selected]=\"node.id === selectedId\"\n [style.left.px]=\"node.x\" [style.top.px]=\"node.y\"\n [style.width.px]=\"NODE_W\"\n (click)=\"selectNode(node.id)\">\n <div class=\"nh\">\n <i class=\"tile\" [ngClass]=\"node.icon\"></i>\n <span class=\"ps-node-title\" [title]=\"node.title\">{{ node.title }}</span>\n @if (node.tag) { <span class=\"ps-tag\">{{ node.tag }}</span> }\n </div>\n <div class=\"nb\">\n @for (row of node.rows; track row.k) {\n <div class=\"nb-row\">\n <span class=\"k\">{{ row.k }}</span>\n <span class=\"v\" [title]=\"row.v\">{{ row.v }}</span>\n </div>\n }\n </div>\n @if (node.hasIn) { <span class=\"port in\"></span> }\n @if (node.hasOut) { <span class=\"port out\"></span> }\n </div>\n }\n </div>\n </div>\n\n <div class=\"flow-toolbar\">\n <div class=\"legend\">\n <span><i class=\"sw src\"></i> Source</span>\n <span><i class=\"sw feat\"></i> Feature</span>\n <span><i class=\"sw emb\"></i> Embedding</span>\n <span><i class=\"sw target\"></i> Target</span>\n <span><i class=\"sw algo\"></i> Algorithm</span>\n <span><i class=\"sw output\"></i> Model</span>\n </div>\n </div>\n </div>\n </as-split-area>\n\n @if (!isInspectorCollapsed) {\n <as-split-area [size]=\"inspectorSizePct\" [minSize]=\"20\" [maxSize]=\"55\">\n <!-- Inspector -->\n <div class=\"ps-col inspector\" data-testid=\"ps-pipelines-inspector\">\n <div class=\"ps-card insp\">\n <div class=\"ihead\">\n <i class=\"tile\" [ngClass]=\"selectedNode.icon\" [attr.data-type]=\"selectedNode.type\"></i>\n <div style=\"flex:1\">\n <h3 data-testid=\"ps-pipelines-inspector-title\">{{ selectedNode.title }}</h3>\n <div class=\"ps-small ps-muted\">{{ nodeTypeLabel(selectedNode.type) }} · selected</div>\n </div>\n <button class=\"insp-collapse-btn\" type=\"button\" (click)=\"toggleInspector()\" title=\"Collapse inspector\" aria-label=\"Collapse inspector\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </button>\n @if (selectedNode.type === 'src' || selectedNode.type === 'feat' || selectedNode.type === 'emb') {\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-pipelines-delete\" (click)=\"deleteSelected()\"><i class=\"fa-solid fa-trash\"></i></button>\n }\n </div>\n <div class=\"ps-card-body\">\n @if (selectedSource) {\n <div class=\"ps-field\"><label>Kind</label>\n <select class=\"mj-input\" [value]=\"selectedSource.Kind\" (change)=\"setSourceKind(inputVal($event))\">\n @for (k of sourceKinds; track k) { <option [value]=\"k\">{{ k }}</option> }\n </select>\n </div>\n <div class=\"ps-field\"><label>Reference (entity / query / id)</label>\n <input class=\"mj-input\" type=\"text\" [value]=\"selectedSource.Ref\" (input)=\"setSourceRef(inputVal($event))\" />\n </div>\n <div class=\"ps-field\"><label>Alias (optional)</label>\n <input class=\"mj-input\" type=\"text\" [value]=\"selectedSource.Alias || ''\" (input)=\"setSourceAlias(inputVal($event))\" />\n </div>\n }\n @if (selectedStep) {\n <div class=\"ps-field\"><label>Kind</label>\n <select class=\"mj-input\" [value]=\"selectedStep.Kind\" (change)=\"setStepKind(inputVal($event))\">\n @for (k of stepKinds; track k) { <option [value]=\"k\">{{ k }}</option> }\n </select>\n </div>\n <div class=\"ps-field\"><label>Label</label>\n <input class=\"mj-input\" type=\"text\" [value]=\"selectedStep.Label || ''\" (input)=\"setStepLabel(inputVal($event))\" />\n </div>\n @switch (selectedStep.Kind) {\n @case ('select') { <div class=\"ps-field\"><label>Columns (comma-separated)</label><input class=\"mj-input\" type=\"text\" [value]=\"columnsText\" (input)=\"setColumns(inputVal($event))\" /></div> }\n @case ('standardize') { <div class=\"ps-field\"><label>Columns (comma-separated)</label><input class=\"mj-input\" type=\"text\" [value]=\"columnsText\" (input)=\"setColumns(inputVal($event))\" /></div> }\n @case ('impute') {\n <div class=\"ps-field\"><label>Column</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('Column')\" (input)=\"setStepStr('Column', inputVal($event))\" /></div>\n <div class=\"ps-field\"><label>Strategy</label><select class=\"mj-input\" [value]=\"stepField('Strategy')\" (change)=\"setStepStr('Strategy', inputVal($event))\">@for (s of imputeStrategies; track s) { <option [value]=\"s\">{{ s }}</option> }</select></div>\n }\n @case ('onehot') { <div class=\"ps-field\"><label>Column</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('Column')\" (input)=\"setStepStr('Column', inputVal($event))\" /></div> }\n @case ('bin') {\n <div class=\"ps-field\"><label>Column</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('Column')\" (input)=\"setStepStr('Column', inputVal($event))\" /></div>\n <div class=\"ps-field\"><label>Bins</label><input class=\"mj-input\" type=\"number\" [value]=\"stepField('Bins')\" (input)=\"setStepNum('Bins', inputVal($event))\" /></div>\n }\n @case ('embedding') {\n <div class=\"ps-field\"><label>Entity</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('Entity')\" (input)=\"setStepStr('Entity', inputVal($event))\" /></div>\n <div class=\"ps-field\"><label>Embedding model ref</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('EmbeddingModelRef')\" (input)=\"setStepStr('EmbeddingModelRef', inputVal($event))\" /></div>\n <div class=\"ps-field\"><label>Dimensions</label><input class=\"mj-input\" type=\"number\" [value]=\"stepField('Dims')\" (input)=\"setStepNum('Dims', inputVal($event))\" /></div>\n }\n @case ('llm-derived') { <div class=\"ps-field\"><label>Feature Pipeline ref</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('FeaturePipelineRef')\" (input)=\"setStepStr('FeaturePipelineRef', inputVal($event))\" /></div> }\n @case ('flow-agent') { <div class=\"ps-field\"><label>Flow Agent ref</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('FlowAgentRef')\" (input)=\"setStepStr('FlowAgentRef', inputVal($event))\" /></div> }\n @case ('vision-llm') { <div class=\"ps-field\"><label>Image column</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('ImageColumn')\" (input)=\"setStepStr('ImageColumn', inputVal($event))\" /></div> }\n }\n }\n @if (selectedNode.type === 'target') {\n <div class=\"ps-field\"><label>Target variable</label><input class=\"mj-input\" type=\"text\" [value]=\"editTargetVariable\" (input)=\"setTargetVariable(inputVal($event))\" /></div>\n <div class=\"ps-field\"><label>Problem type</label><select class=\"mj-input\" [value]=\"editProblemType\" (change)=\"setProblemType(inputVal($event))\">@for (pt of problemTypes; track pt) { <option [value]=\"pt\">{{ pt }}</option> }</select></div>\n }\n @if (selectedNode.type === 'algo') {\n <div class=\"ps-field\"><label>Algorithm</label><select class=\"mj-input\" [value]=\"editAlgorithmId\" (change)=\"setAlgorithm(inputVal($event))\">@for (a of algorithms; track a.ID) { <option [value]=\"a.ID\">{{ a.Name }}</option> }</select></div>\n <div class=\"ps-field\"><label>Hyperparameters (JSON)</label><textarea class=\"mj-textarea\" rows=\"4\" [value]=\"editHyperparams\" (input)=\"setHyperparams(inputVal($event))\"></textarea></div>\n @if (publishedModel; as pub) {\n <div style=\"margin-top:12px;padding:10px;border-radius:var(--mj-radius-sm);background:var(--mj-bg-surface-sunken);border:1px solid var(--mj-border-default);\">\n <div class=\"ps-small ps-muted\" style=\"margin-bottom:6px;\">Current Serving Winner</div>\n <div style=\"display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;\">\n <span style=\"font-size:var(--mj-text-xs);font-weight:600;\">v{{ pub.Version }} ({{ pub.Algorithm || 'Model' }})</span>\n <span class=\"ps-tag success\"><i class=\"fa-solid fa-trophy\"></i> Active</span>\n </div>\n <div style=\"display:flex;gap:6px;\">\n <button mjButton variant=\"secondary\" size=\"sm\" type=\"button\" (click)=\"openModelRecord(pub.ID)\" style=\"flex:1;justify-content:center;\" title=\"Open model record in Explorer\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i> Model\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" type=\"button\" (click)=\"viewTrainingRuns(pub.ID)\" style=\"flex:1;justify-content:center;\" title=\"View training runs\">\n <i class=\"fa-solid fa-flask\"></i> Runs\n </button>\n </div>\n </div>\n }\n }\n @if (selectedNode.type === 'output') {\n @if (pipelineModels.length === 0) {\n <div class=\"ps-small ps-muted\">The trained model artifact. Run <strong>Train</strong> to produce a new versioned model from this pipeline.</div>\n } @else {\n <div style=\"display:flex;flex-direction:column;gap:12px;\">\n @if (pipelineModels.length > 1) {\n <div class=\"ps-field\">\n <label>Model Version</label>\n <select class=\"mj-input\" [value]=\"inspectedModel?.ID\" (change)=\"selectModelVersion(inputVal($event))\">\n @for (m of pipelineModels; track m.ID) {\n <option [value]=\"m.ID\">v{{ m.Version }} · {{ m.Algorithm || 'Algorithm' }} ({{ m.Status }})</option>\n }\n </select>\n </div>\n }\n @if (inspectedModel; as mdl) {\n <div style=\"border:1px solid var(--mj-border-default);border-radius:var(--mj-radius-md);padding:12px;background:var(--mj-bg-surface-sunken);display:flex;flex-direction:column;gap:8px;\">\n <div style=\"display:flex;justify-content:space-between;align-items:center;\">\n <div style=\"display:flex;align-items:center;gap:6px;\">\n <strong>v{{ mdl.Version }}</strong>\n @if (mdl.Status === 'Published') {\n <span class=\"ps-tag success\"><i class=\"fa-solid fa-trophy\"></i> Winner</span>\n }\n <span class=\"ps-badge\" [class]=\"statusClass(mdl.Status)\">{{ mdl.Status }}</span>\n </div>\n <span class=\"ps-mono ps-small ps-muted\" [title]=\"mdl.ID\">{{ mdl.ID.slice(0, 8) }}…</span>\n </div>\n <div style=\"font-size:var(--mj-text-xs);color:var(--mj-text-secondary);\">\n Algorithm: <strong>{{ mdl.Algorithm || selectedAlgorithmName }}</strong>\n </div>\n <div style=\"font-size:var(--mj-text-xs);color:var(--mj-text-secondary);\">\n Holdout Score: <strong>{{ formatHoldout(mdl) }}</strong>\n </div>\n <div style=\"display:flex;flex-direction:column;gap:6px;margin-top:4px;\">\n <button mjButton variant=\"primary\" size=\"sm\" type=\"button\" (click)=\"openModelRecord(mdl.ID)\" style=\"width:100%;justify-content:center;\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i> Open Model Details\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" type=\"button\" (click)=\"viewTrainingRuns(mdl.ID)\" style=\"width:100%;justify-content:center;\">\n <i class=\"fa-solid fa-flask\"></i> View Training Runs\n </button>\n </div>\n </div>\n }\n </div>\n }\n }\n </div>\n </div>\n\n <!-- Leakage guard (editable) -->\n <div class=\"ps-card\">\n <div class=\"ps-card-head\"><i class=\"fa-solid fa-shield-halved\" style=\"color:var(--mj-status-warning)\"></i><h3>Leakage guard</h3></div>\n <div class=\"ps-card-body\">\n <div class=\"ps-field\"><label>Deny-list columns (comma-separated)</label><input class=\"mj-input\" type=\"text\" [value]=\"denyText\" (input)=\"setDeny(inputVal($event))\" /></div>\n <div class=\"ps-field\"><label>Single-feature dominance threshold</label><input class=\"mj-input\" type=\"number\" step=\"0.05\" min=\"0\" max=\"1\" [value]=\"editLeakage.SingleFeatureDominanceThreshold\" (input)=\"setThreshold(inputVal($event))\" /></div>\n </div>\n </div>\n\n <!-- As-of strategy (editable) -->\n <div class=\"ps-card\">\n <div class=\"ps-card-head\"><i class=\"fa-solid fa-clock-rotate-left\" style=\"color:var(--mj-brand-primary)\"></i><h3>As-of strategy</h3></div>\n <div class=\"ps-card-body\">\n <div class=\"ps-field\"><label>Mode</label><span data-testid=\"ps-pipelines-asof-mode\">{{ editAsOf.Mode }}</span></div>\n @if (EditAsOf.Mode !== 'none') {\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-pipelines-asof-reset\" [disabled]=\"Busy\" (click)=\"ResetAsOfToNone()\">Reset to none</button>\n <p class=\"ps-muted\">Training refuses this setting: it reads every feature as it stands today, so a cutoff has no effect. Reset to none, then save, to train this pipeline.</p>\n }\n </div>\n </div>\n\n <!-- Validation (editable) -->\n <div class=\"ps-card\">\n <div class=\"ps-card-head\"><i class=\"fa-solid fa-scissors\" style=\"color:var(--mj-brand-primary)\"></i><h3>Validation</h3></div>\n <div class=\"ps-card-body\">\n <div class=\"ps-field\"><label>Strategy</label><select class=\"mj-input\" [value]=\"editValidation.Strategy\" (change)=\"setValStrategy(inputVal($event))\"><option value=\"train_test_split\">train_test_split</option><option value=\"kfold\">kfold</option><option value=\"holdout\">holdout</option></select></div>\n @if (editValidation.Strategy === 'train_test_split') { <div class=\"ps-field\"><label>Test size</label><input class=\"mj-input\" type=\"number\" step=\"0.05\" [value]=\"editValidation.TestSize ?? 0.2\" (input)=\"setTestSize(inputVal($event))\" /></div> }\n @if (editValidation.Strategy === 'kfold') { <div class=\"ps-field\"><label>Folds (k)</label><input class=\"mj-input\" type=\"number\" [value]=\"editValidation.K ?? 5\" (input)=\"setK(inputVal($event))\" /></div> }\n <div class=\"ps-field\"><label>Locked holdout fraction</label><input class=\"mj-input\" type=\"number\" step=\"0.05\" [value]=\"editValidation.LockedHoldoutFraction\" (input)=\"setHoldout(inputVal($event))\" /></div>\n </div>\n </div>\n </div>\n </as-split-area>\n }\n </as-split>\n </div>\n }\n </div>\n </as-split-area>\n </as-split>\n </div>\n }\n\n @if (showWizard) {\n <ps-pipeline-wizard\n [engine]=\"engine\"\n [provider]=\"provider\"\n [currentUser]=\"currentUser\"\n [cloneFrom]=\"wizardClonePipeline\"\n [initialAlgorithmId]=\"initialWizardAlgorithmId\"\n (saved)=\"onWizardSaved($event)\"\n (trainRequested)=\"onWizardTrainRequested($event)\"\n (closed)=\"closeWizard()\">\n </ps-pipeline-wizard>\n }\n </div>\n `,\n})\nexport class PSPipelinesComponent implements OnInit, OnChanges {\n @Input() engine!: PredictiveStudioEngine;\n @Input() provider: IMetadataProvider | null = null;\n @Input() CurrentUser: UserInfo | null = null;\n\n /** @deprecated Use {@link CurrentUser}. */\n @Input() set currentUser(value: UserInfo | null) {\n this.CurrentUser = value;\n }\n /** @deprecated Use {@link CurrentUser}. */\n get currentUser(): UserInfo | null {\n return this.CurrentUser;\n }\n\n @Output() AskAgent = new EventEmitter<string>();\n\n /**\n * @deprecated Use {@link AskAgent}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (askAgent) keeps working. Must stay AFTER AskAgent: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() askAgent = this.AskAgent;\n @Output() Navigate = new EventEmitter<PSPanelKey>();\n\n /**\n * @deprecated Use {@link Navigate}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (navigate) keeps working. Must stay AFTER Navigate: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() navigate = this.Navigate;\n\n private cdr = inject(ChangeDetectorRef);\n private notifications = inject(MJNotificationService);\n private navigationService = inject(NavigationService);\n\n public IsCatalogCollapsed = false;\n\n /** @deprecated Use {@link IsCatalogCollapsed}. */\n public get isCatalogCollapsed() {\n return this.IsCatalogCollapsed;\n }\n /** @deprecated Use {@link IsCatalogCollapsed}. */\n public set isCatalogCollapsed(value) {\n this.IsCatalogCollapsed = value;\n }\n public CatalogSizePct = 28;\n\n /** @deprecated Use {@link CatalogSizePct}. */\n public get catalogSizePct() {\n return this.CatalogSizePct;\n }\n /** @deprecated Use {@link CatalogSizePct}. */\n public set catalogSizePct(value) {\n this.CatalogSizePct = value;\n }\n public WorkspaceSizePct = 72;\n\n /** @deprecated Use {@link WorkspaceSizePct}. */\n public get workspaceSizePct() {\n return this.WorkspaceSizePct;\n }\n /** @deprecated Use {@link WorkspaceSizePct}. */\n public set workspaceSizePct(value) {\n this.WorkspaceSizePct = value;\n }\n public IsInspectorCollapsed = false;\n\n /** @deprecated Use {@link IsInspectorCollapsed}. */\n public get isInspectorCollapsed() {\n return this.IsInspectorCollapsed;\n }\n /** @deprecated Use {@link IsInspectorCollapsed}. */\n public set isInspectorCollapsed(value) {\n this.IsInspectorCollapsed = value;\n }\n public CanvasSizePct = 72;\n\n /** @deprecated Use {@link CanvasSizePct}. */\n public get canvasSizePct() {\n return this.CanvasSizePct;\n }\n /** @deprecated Use {@link CanvasSizePct}. */\n public set canvasSizePct(value) {\n this.CanvasSizePct = value;\n }\n public InspectorSizePct = 28;\n\n /** @deprecated Use {@link InspectorSizePct}. */\n public get inspectorSizePct() {\n return this.InspectorSizePct;\n }\n /** @deprecated Use {@link InspectorSizePct}. */\n public set inspectorSizePct(value) {\n this.InspectorSizePct = value;\n }\n\n public readonly StarterPrompt = PS_PIPELINES_STARTER_PROMPT;\n\n /** @deprecated Use {@link StarterPrompt}. */\n public get starterPrompt() {\n return this.StarterPrompt;\n }\n public readonly SourceKinds = SOURCE_KINDS;\n\n /** @deprecated Use {@link SourceKinds}. */\n public get sourceKinds() {\n return this.SourceKinds;\n }\n public readonly StepKinds = STEP_KINDS;\n\n /** @deprecated Use {@link StepKinds}. */\n public get stepKinds() {\n return this.StepKinds;\n }\n public readonly ProblemTypes = PROBLEM_TYPES;\n\n /** @deprecated Use {@link ProblemTypes}. */\n public get problemTypes() {\n return this.ProblemTypes;\n }\n public readonly ImputeStrategies = IMPUTE_STRATEGIES;\n\n /** @deprecated Use {@link ImputeStrategies}. */\n public get imputeStrategies() {\n return this.ImputeStrategies;\n }\n\n public Pipelines: MJMLTrainingPipelineEntity[] = [];\n\n /** @deprecated Use {@link Pipelines}. */\n public get pipelines(): MJMLTrainingPipelineEntity[] {\n return this.Pipelines;\n }\n /** @deprecated Use {@link Pipelines}. */\n public set pipelines(value: MJMLTrainingPipelineEntity[]) {\n this.Pipelines = value;\n }\n public SelectedPipelineId = '';\n\n /** @deprecated Use {@link SelectedPipelineId}. */\n public get selectedPipelineId() {\n return this.SelectedPipelineId;\n }\n /** @deprecated Use {@link SelectedPipelineId}. */\n public set selectedPipelineId(value) {\n this.SelectedPipelineId = value;\n }\n\n public ShowWizard = false;\n\n /** @deprecated Use {@link ShowWizard}. */\n public get showWizard() {\n return this.ShowWizard;\n }\n /** @deprecated Use {@link ShowWizard}. */\n public set showWizard(value) {\n this.ShowWizard = value;\n }\n public WizardClonePipeline: MJMLTrainingPipelineEntity | null = null;\n\n /** @deprecated Use {@link WizardClonePipeline}. */\n public get wizardClonePipeline(): MJMLTrainingPipelineEntity | null {\n return this.WizardClonePipeline;\n }\n /** @deprecated Use {@link WizardClonePipeline}. */\n public set wizardClonePipeline(value: MJMLTrainingPipelineEntity | null) {\n this.WizardClonePipeline = value;\n }\n public initialWizardAlgorithmId?: string; // case-violation-ok-legacy-back-compat: an accessor cannot be optional, so a stub would turn this into a required member\n\n @Input() public ViewMode: 'stages' | 'graph' | 'dag' = 'stages';\n\n /** @deprecated Use {@link ViewMode}. */\n @Input() public set viewMode(value: 'stages' | 'graph' | 'dag') {\n this.ViewMode = value;\n }\n /** @deprecated Use {@link ViewMode}. */\n public get viewMode(): 'stages' | 'graph' | 'dag' {\n return this.ViewMode;\n }\n public SearchQuery = '';\n\n /** @deprecated Use {@link SearchQuery}. */\n public get searchQuery() {\n return this.SearchQuery;\n }\n /** @deprecated Use {@link SearchQuery}. */\n public set searchQuery(value) {\n this.SearchQuery = value;\n }\n public ActiveFilter = 'all';\n\n /** @deprecated Use {@link ActiveFilter}. */\n public get activeFilter() {\n return this.ActiveFilter;\n }\n /** @deprecated Use {@link ActiveFilter}. */\n public set activeFilter(value) {\n this.ActiveFilter = value;\n }\n\n public readonly NODE_W = NODE_W;\n public readonly NODE_H = NODE_H;\n public Math = Math;\n public ZoomLevel = 1;\n\n /** @deprecated Use {@link ZoomLevel}. */\n public get zoomLevel() {\n return this.ZoomLevel;\n }\n /** @deprecated Use {@link ZoomLevel}. */\n public set zoomLevel(value) {\n this.ZoomLevel = value;\n }\n\n public OpenWizard(algoId?: string): void {\n this.WizardClonePipeline = null;\n this.initialWizardAlgorithmId = algoId;\n this.ShowWizard = true;\n }\n\n /** @deprecated Use {@link OpenWizard}. */\n public openWizard(algoId?: string): void {\n return this.OpenWizard(algoId);\n }\n\n public CloneSelected(): void {\n if (!this.SelectedPipeline) return;\n this.WizardClonePipeline = this.SelectedPipeline;\n this.initialWizardAlgorithmId = undefined;\n this.ShowWizard = true;\n }\n\n /** @deprecated Use {@link CloneSelected}. */\n public cloneSelected(): void {\n return this.CloneSelected();\n }\n\n public CloseWizard(): void {\n this.ShowWizard = false;\n this.WizardClonePipeline = null;\n this.initialWizardAlgorithmId = undefined;\n }\n\n /** @deprecated Use {@link CloseWizard}. */\n public closeWizard(): void {\n return this.CloseWizard();\n }\n\n public async OnWizardSaved(pipeline: MJMLTrainingPipelineEntity): Promise<void> {\n this.CloseWizard();\n await this.engine.Config(true, this.CurrentUser ?? undefined, this.provider ?? undefined);\n this.Pipelines = this.engine.Pipelines;\n this.SelectPipeline(pipeline.ID);\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link OnWizardSaved}. */\n public async onWizardSaved(pipeline: MJMLTrainingPipelineEntity): Promise<void> {\n return this.OnWizardSaved(pipeline);\n }\n\n public async OnWizardTrainRequested(pipeline: MJMLTrainingPipelineEntity): Promise<void> {\n this.CloseWizard();\n await this.engine.Config(true, this.CurrentUser ?? undefined, this.provider ?? undefined);\n this.Pipelines = this.engine.Pipelines;\n this.SelectPipeline(pipeline.ID);\n await this.train();\n }\n\n /** @deprecated Use {@link OnWizardTrainRequested}. */\n public async onWizardTrainRequested(pipeline: MJMLTrainingPipelineEntity): Promise<void> {\n return this.OnWizardTrainRequested(pipeline);\n }\n\n // Editable spec state (the source of truth; nodes/edges are derived).\n public EditSources: SourceBinding[] = [];\n\n /** @deprecated Use {@link EditSources}. */\n public get editSources(): SourceBinding[] {\n return this.EditSources;\n }\n /** @deprecated Use {@link EditSources}. */\n public set editSources(value: SourceBinding[]) {\n this.EditSources = value;\n }\n public EditSteps: FeatureStep[] = [];\n\n /** @deprecated Use {@link EditSteps}. */\n public get editSteps(): FeatureStep[] {\n return this.EditSteps;\n }\n /** @deprecated Use {@link EditSteps}. */\n public set editSteps(value: FeatureStep[]) {\n this.EditSteps = value;\n }\n public EditTargetVariable = '';\n\n /** @deprecated Use {@link EditTargetVariable}. */\n public get editTargetVariable() {\n return this.EditTargetVariable;\n }\n /** @deprecated Use {@link EditTargetVariable}. */\n public set editTargetVariable(value) {\n this.EditTargetVariable = value;\n }\n public EditProblemType: ProblemType = 'classification';\n\n /** @deprecated Use {@link EditProblemType}. */\n public get editProblemType(): ProblemType {\n return this.EditProblemType;\n }\n /** @deprecated Use {@link EditProblemType}. */\n public set editProblemType(value: ProblemType) {\n this.EditProblemType = value;\n }\n public EditAlgorithmId = '';\n\n /** @deprecated Use {@link EditAlgorithmId}. */\n public get editAlgorithmId() {\n return this.EditAlgorithmId;\n }\n /** @deprecated Use {@link EditAlgorithmId}. */\n public set editAlgorithmId(value) {\n this.EditAlgorithmId = value;\n }\n public EditHyperparams = '{}';\n\n /** @deprecated Use {@link EditHyperparams}. */\n public get editHyperparams() {\n return this.EditHyperparams;\n }\n /** @deprecated Use {@link EditHyperparams}. */\n public set editHyperparams(value) {\n this.EditHyperparams = value;\n }\n public EditLeakage: LeakageGuard = { DenyFields: [], SingleFeatureDominanceThreshold: DOMINANCE_THRESHOLD_DEFAULT };\n\n /** @deprecated Use {@link EditLeakage}. */\n public get editLeakage(): LeakageGuard {\n return this.EditLeakage;\n }\n /** @deprecated Use {@link EditLeakage}. */\n public set editLeakage(value: LeakageGuard) {\n this.EditLeakage = value;\n }\n public EditAsOf: AsOfStrategy = { Mode: 'none' };\n\n /** @deprecated Use {@link EditAsOf}. */\n public get editAsOf(): AsOfStrategy {\n return this.EditAsOf;\n }\n /** @deprecated Use {@link EditAsOf}. */\n public set editAsOf(value: AsOfStrategy) {\n this.EditAsOf = value;\n }\n public EditValidation: ValidationStrategy = { Strategy: 'train_test_split', TestSize: 0.2, LockedHoldoutFraction: 0.15 };\n\n /** @deprecated Use {@link EditValidation}. */\n public get editValidation(): ValidationStrategy {\n return this.EditValidation;\n }\n /** @deprecated Use {@link EditValidation}. */\n public set editValidation(value: ValidationStrategy) {\n this.EditValidation = value;\n }\n\n public Nodes: DagNode[] = [];\n\n /** @deprecated Use {@link Nodes}. */\n public get nodes(): DagNode[] {\n return this.Nodes;\n }\n /** @deprecated Use {@link Nodes}. */\n public set nodes(value: DagNode[]) {\n this.Nodes = value;\n }\n public Edges: DagEdge[] = [];\n\n /** @deprecated Use {@link Edges}. */\n public get edges(): DagEdge[] {\n return this.Edges;\n }\n /** @deprecated Use {@link Edges}. */\n public set edges(value: DagEdge[]) {\n this.Edges = value;\n }\n public SelectedId = '';\n\n /** @deprecated Use {@link SelectedId}. */\n public get selectedId() {\n return this.SelectedId;\n }\n /** @deprecated Use {@link SelectedId}. */\n public set selectedId(value) {\n this.SelectedId = value;\n }\n public CanvasW = 800;\n\n /** @deprecated Use {@link CanvasW}. */\n public get canvasW() {\n return this.CanvasW;\n }\n /** @deprecated Use {@link CanvasW}. */\n public set canvasW(value) {\n this.CanvasW = value;\n }\n public CanvasH = 460;\n\n /** @deprecated Use {@link CanvasH}. */\n public get canvasH() {\n return this.CanvasH;\n }\n /** @deprecated Use {@link CanvasH}. */\n public set canvasH(value) {\n this.CanvasH = value;\n }\n public Dirty = false;\n\n /** @deprecated Use {@link Dirty}. */\n public get dirty() {\n return this.Dirty;\n }\n /** @deprecated Use {@link Dirty}. */\n public set dirty(value) {\n this.Dirty = value;\n }\n public Busy = false;\n\n /** @deprecated Use {@link Busy}. */\n public get busy() {\n return this.Busy;\n }\n /** @deprecated Use {@link Busy}. */\n public set busy(value) {\n this.Busy = value;\n }\n\n private nodeById = new Map<string, DagNode>();\n private stepSeq = 0;\n\n public ngOnChanges(_changes?: SimpleChanges): void {\n this.RefreshFromEngine();\n }\n\n ngOnInit(): void {\n const saved = UserInfoEngine.Instance.GetSetting('mj.predictiveStudio.pipelines.layout');\n if (saved) {\n try {\n const parsed = JSON.parse(saved);\n if (typeof parsed.catalogSizePct === 'number' && parsed.catalogSizePct >= 15 && parsed.catalogSizePct <= 60) {\n this.CatalogSizePct = parsed.catalogSizePct;\n this.WorkspaceSizePct = 100 - this.CatalogSizePct;\n }\n if (typeof parsed.isCatalogCollapsed === 'boolean') {\n this.IsCatalogCollapsed = parsed.isCatalogCollapsed;\n }\n if (typeof parsed.canvasSizePct === 'number' && parsed.canvasSizePct >= 40 && parsed.canvasSizePct <= 85) {\n this.CanvasSizePct = parsed.canvasSizePct;\n this.InspectorSizePct = 100 - this.CanvasSizePct;\n }\n if (typeof parsed.isInspectorCollapsed === 'boolean') {\n this.IsInspectorCollapsed = parsed.isInspectorCollapsed;\n }\n } catch {}\n }\n this.RefreshFromEngine();\n }\n\n public OnSplitDragEnd(sizes: readonly (number | '*')[]): void {\n if (Array.isArray(sizes) && sizes.length === 2 && typeof sizes[0] === 'number' && typeof sizes[1] === 'number') {\n this.CatalogSizePct = Math.round(sizes[0]);\n this.WorkspaceSizePct = Math.round(sizes[1]);\n this.saveLayoutPrefs();\n }\n }\n\n /** @deprecated Use {@link OnSplitDragEnd}. */\n public onSplitDragEnd(sizes: readonly (number | '*')[]): void {\n return this.OnSplitDragEnd(sizes);\n }\n\n public ToggleCatalog(): void {\n this.IsCatalogCollapsed = !this.IsCatalogCollapsed;\n this.saveLayoutPrefs();\n this.cdr.markForCheck();\n }\n\n /** @deprecated Use {@link ToggleCatalog}. */\n public toggleCatalog(): void {\n return this.ToggleCatalog();\n }\n\n public OnInspectorSplitDragEnd(sizes: readonly (number | '*')[]): void {\n if (Array.isArray(sizes) && sizes.length === 2 && typeof sizes[0] === 'number' && typeof sizes[1] === 'number') {\n this.CanvasSizePct = Math.round(sizes[0]);\n this.InspectorSizePct = Math.round(sizes[1]);\n this.saveLayoutPrefs();\n }\n }\n\n /** @deprecated Use {@link OnInspectorSplitDragEnd}. */\n public onInspectorSplitDragEnd(sizes: readonly (number | '*')[]): void {\n return this.OnInspectorSplitDragEnd(sizes);\n }\n\n public ToggleInspector(): void {\n this.IsInspectorCollapsed = !this.IsInspectorCollapsed;\n this.saveLayoutPrefs();\n this.cdr.markForCheck();\n }\n\n /** @deprecated Use {@link ToggleInspector}. */\n public toggleInspector(): void {\n return this.ToggleInspector();\n }\n\n private saveLayoutPrefs(): void {\n const prefs = {\n catalogSizePct: this.CatalogSizePct,\n isCatalogCollapsed: this.IsCatalogCollapsed,\n canvasSizePct: this.CanvasSizePct,\n inspectorSizePct: this.InspectorSizePct,\n isInspectorCollapsed: this.IsInspectorCollapsed,\n };\n UserInfoEngine.Instance.SetSettingDebounced('mj.predictiveStudio.pipelines.layout', JSON.stringify(prefs));\n }\n\n public OpenModelRecord(modelId: string): void {\n if (!modelId) return;\n try {\n const p = this.provider ?? new Metadata();\n if (!p) return;\n const entity = p.EntityByName('MJ: ML Models');\n if (!entity) return;\n const ck = CompositeKey.FromURLSegment(entity, modelId);\n this.navigationService.OpenEntityRecord('MJ: ML Models', ck);\n } catch (err) {\n this.notifications.CreateSimpleNotification(`Could not open model: ${err instanceof Error ? err.message : String(err)}`, 'error');\n }\n }\n\n /** @deprecated Use {@link OpenModelRecord}. */\n public openModelRecord(modelId: string): void {\n return this.OpenModelRecord(modelId);\n }\n\n public ViewTrainingRuns(modelId?: string): void {\n if (this.Navigate.observed) {\n this.Navigate.emit('experiments');\n return;\n }\n try {\n const p = this.provider ?? new Metadata();\n if (!p) return;\n const runs = this.engine?.TrainingRuns ?? [];\n const match = modelId\n ? runs.find((r) => UUIDsEqual(r.ResultingModelID, modelId))\n : runs.find((r) => this.SelectedPipelineId && UUIDsEqual(r.PipelineID, this.SelectedPipelineId));\n if (match) {\n const entity = p.EntityByName('MJ: ML Training Runs');\n if (entity) {\n const ck = CompositeKey.FromURLSegment(entity, match.ID);\n this.navigationService.OpenEntityRecord('MJ: ML Training Runs', ck);\n return;\n }\n }\n this.navigationService.OpenNavItemByName('Experiments');\n } catch (err) {\n this.notifications.CreateSimpleNotification(`Could not open training runs: ${err instanceof Error ? err.message : String(err)}`, 'error');\n }\n }\n\n /** @deprecated Use {@link ViewTrainingRuns}. */\n public viewTrainingRuns(modelId?: string): void {\n return this.ViewTrainingRuns(modelId);\n }\n\n public RefreshFromEngine(): void {\n this.Pipelines = this.engine?.Pipelines ?? [];\n if (!this.SelectedPipelineId && this.Pipelines.length > 0) {\n this.SelectPipeline(this.Pipelines[0].ID);\n } else if (this.SelectedPipelineId && !this.Pipelines.some((p) => UUIDsEqual(p.ID, this.SelectedPipelineId))) {\n if (this.Pipelines.length > 0) {\n this.SelectPipeline(this.Pipelines[0].ID);\n }\n }\n }\n\n /** @deprecated Use {@link RefreshFromEngine}. */\n public refreshFromEngine(): void {\n return this.RefreshFromEngine();\n }\n\n public get IsGraphView(): boolean {\n return this.ViewMode === 'graph' || this.ViewMode === 'dag';\n }\n\n /** @deprecated Use {@link IsGraphView}. */\n public get isGraphView(): boolean {\n return this.IsGraphView;\n }\n\n public ToggleViewMode(): void {\n this.ViewMode = this.IsGraphView ? 'stages' : 'graph';\n }\n\n /** @deprecated Use {@link ToggleViewMode}. */\n public toggleViewMode(): void {\n return this.ToggleViewMode();\n }\n\n public ZoomIn(): void {\n this.ZoomLevel = Math.min(2.0, Math.round((this.ZoomLevel + 0.15) * 100) / 100);\n }\n\n /** @deprecated Use {@link ZoomIn}. */\n public zoomIn(): void {\n return this.ZoomIn();\n }\n\n public ZoomOut(): void {\n this.ZoomLevel = Math.max(0.5, Math.round((this.ZoomLevel - 0.15) * 100) / 100);\n }\n\n /** @deprecated Use {@link ZoomOut}. */\n public zoomOut(): void {\n return this.ZoomOut();\n }\n\n public ResetZoom(): void {\n this.ZoomLevel = 1;\n }\n\n /** @deprecated Use {@link ResetZoom}. */\n public resetZoom(): void {\n return this.ResetZoom();\n }\n\n public InputVal(e: Event): string {\n return (e.target as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement).value;\n }\n\n /** @deprecated Use {@link InputVal}. */\n public inputVal(e: Event): string {\n return this.InputVal(e);\n }\n\n public IsEdgeActive(edge: DagEdge): boolean {\n return this.SelectedId === edge.from || this.SelectedId === edge.to;\n }\n\n /** @deprecated Use {@link IsEdgeActive}. */\n public isEdgeActive(edge: DagEdge): boolean {\n return this.IsEdgeActive(edge);\n }\n\n public SetFilter(f: string): void {\n this.ActiveFilter = f;\n }\n\n /** @deprecated Use {@link SetFilter}. */\n public setFilter(f: string): void {\n return this.SetFilter(f);\n }\n\n public OnSearchInput(ev: Event): void {\n this.SearchQuery = ((ev.target as HTMLInputElement)?.value ?? '').toLowerCase();\n }\n\n /** @deprecated Use {@link OnSearchInput}. */\n public onSearchInput(ev: Event): void {\n return this.OnSearchInput(ev);\n }\n\n public get FilteredPipelines(): MJMLTrainingPipelineEntity[] {\n return (this.Pipelines ?? []).filter((p) => {\n if (this.SearchQuery) {\n const nameMatch = p.Name?.toLowerCase().includes(this.SearchQuery);\n const entityMatch = p.TargetEntity?.toLowerCase().includes(this.SearchQuery);\n const targetMatch = p.TargetVariable?.toLowerCase().includes(this.SearchQuery);\n if (!nameMatch && !entityMatch && !targetMatch) return false;\n }\n if (this.ActiveFilter === 'published') return p.Status === 'Published';\n if (this.ActiveFilter === 'draft') return p.Status === 'Draft';\n if (this.ActiveFilter === 'core') return p.TargetEntity?.includes('AI') || p.Name?.includes('AI Agent');\n return true;\n });\n }\n\n /** @deprecated Use {@link FilteredPipelines}. */\n public get filteredPipelines(): MJMLTrainingPipelineEntity[] {\n return this.FilteredPipelines;\n }\n\n public PipelineDomain(p?: MJMLTrainingPipelineEntity): string {\n if (!p) return 'Platform';\n const n = (p.Name || '') + (p.TargetEntity || '');\n if (n.includes('MoreCheese') || n.includes('Membership') || n.includes('Event') || n.includes('Course')) return 'More Cheese Club';\n if (n.includes('AI') || n.includes('Prompt') || n.includes('Agent')) return 'MemberJunction Platform';\n return 'BizApps';\n }\n\n /** @deprecated Use {@link PipelineDomain}. */\n public pipelineDomain(p?: MJMLTrainingPipelineEntity): string {\n return this.PipelineDomain(p);\n }\n\n public TargetEntityName(p?: MJMLTrainingPipelineEntity): string {\n if (!p) return 'Entity';\n return p.TargetEntity || this.EditSources[0]?.Ref || 'Entity';\n }\n\n /** @deprecated Use {@link TargetEntityName}. */\n public targetEntityName(p?: MJMLTrainingPipelineEntity): string {\n return this.TargetEntityName(p);\n }\n\n public get PipelineModels(): MJMLModelEntity[] {\n if (!this.SelectedPipelineId || !this.engine?.Models) return [];\n return this.engine.Models.filter((m) => UUIDsEqual(m.PipelineID, this.SelectedPipelineId));\n }\n\n /** @deprecated Use {@link PipelineModels}. */\n public get pipelineModels(): MJMLModelEntity[] {\n return this.PipelineModels;\n }\n\n public get PublishedModel(): MJMLModelEntity | undefined {\n return this.PipelineModels.find((m) => m.Status === 'Published') ?? this.PipelineModels[0];\n }\n\n /** @deprecated Use {@link PublishedModel}. */\n public get publishedModel(): MJMLModelEntity | undefined {\n return this.PublishedModel;\n }\n\n public SelectedModelVersionId: string | null = null;\n\n /** @deprecated Use {@link SelectedModelVersionId}. */\n public get selectedModelVersionId(): string | null {\n return this.SelectedModelVersionId;\n }\n /** @deprecated Use {@link SelectedModelVersionId}. */\n public set selectedModelVersionId(value: string | null) {\n this.SelectedModelVersionId = value;\n }\n\n public get InspectedModel(): MJMLModelEntity | undefined {\n if (this.SelectedModelVersionId) {\n const found = this.PipelineModels.find((m) => UUIDsEqual(m.ID, this.SelectedModelVersionId));\n if (found) return found;\n }\n return this.PublishedModel;\n }\n\n /** @deprecated Use {@link InspectedModel}. */\n public get inspectedModel(): MJMLModelEntity | undefined {\n return this.InspectedModel;\n }\n\n public SelectModelVersion(id: string): void {\n this.SelectedModelVersionId = id;\n this.cdr.markForCheck();\n }\n\n /** @deprecated Use {@link SelectModelVersion}. */\n public selectModelVersion(id: string): void {\n return this.SelectModelVersion(id);\n }\n\n public BestMetricForPipeline(p?: MJMLTrainingPipelineEntity): string | null {\n if (!p || !this.engine?.Models) return null;\n const models = this.engine.Models.filter((m) => UUIDsEqual(m.PipelineID, p.ID));\n if (models.length === 0) return null;\n const best = models.find((m) => m.Status === 'Published') ?? models[0];\n return this.FormatHoldout(best);\n }\n\n /** @deprecated Use {@link BestMetricForPipeline}. */\n public bestMetricForPipeline(p?: MJMLTrainingPipelineEntity): string | null {\n return this.BestMetricForPipeline(p);\n }\n\n public SelectStep(id: string): void {\n this.SelectNode(id);\n }\n\n /** @deprecated Use {@link SelectStep}. */\n public selectStep(id: string): void {\n return this.SelectStep(id);\n }\n\n public GetStepColumns(step: FeatureStep): string[] {\n switch (step.Kind) {\n case 'select':\n case 'standardize':\n return step.Columns ?? [];\n case 'impute':\n case 'onehot':\n case 'bin':\n return step.Column ? [step.Column] : [];\n default:\n return [];\n }\n }\n\n /** @deprecated Use {@link GetStepColumns}. */\n public getStepColumns(step: FeatureStep): string[] {\n return this.GetStepColumns(step);\n }\n\n public GetStepInputs(step: FeatureStep): string[] {\n return step.Inputs ?? [];\n }\n\n /** @deprecated Use {@link GetStepInputs}. */\n public getStepInputs(step: FeatureStep): string[] {\n return this.GetStepInputs(step);\n }\n\n public FormatHoldout(m: MJMLModelEntity): string {\n if (!m.HoldoutMetrics) return m.Metrics ? 'Trained' : 'Pending';\n try {\n const hm = typeof m.HoldoutMetrics === 'string' ? JSON.parse(m.HoldoutMetrics) : m.HoldoutMetrics;\n if (hm.auc != null) return `AUC ${(Number(hm.auc)).toFixed(3)}`;\n if (hm.r2 != null) return `R² ${(Number(hm.r2)).toFixed(3)}`;\n if (hm.rmse != null) return `RMSE ${(Number(hm.rmse)).toFixed(2)}`;\n if (hm.accuracy != null) return `Acc ${(Number(hm.accuracy) * 100).toFixed(1)}%`;\n return 'Scored';\n } catch {\n return 'Scored';\n }\n }\n\n /** @deprecated Use {@link FormatHoldout}. */\n public formatHoldout(m: MJMLModelEntity): string {\n return this.FormatHoldout(m);\n }\n\n public get AsOfLabel(): string {\n if (this.EditAsOf.Mode === 'column') return `Column: ${this.EditAsOf.Column || 'DecisionDate'}`;\n if (this.EditAsOf.Mode === 'offset') return `Offset: ${this.EditAsOf.OffsetDays || 0}d prior`;\n return 'None (Static snapshot)';\n }\n\n /** @deprecated Use {@link AsOfLabel}. */\n public get asOfLabel(): string {\n return this.AsOfLabel;\n }\n\n public get SelectedAlgorithmName(): string {\n return this.engine?.AlgorithmName(this.EditAlgorithmId) || 'Auto-select (Tournament)';\n }\n\n /** @deprecated Use {@link SelectedAlgorithmName}. */\n public get selectedAlgorithmName(): string {\n return this.SelectedAlgorithmName;\n }\n\n public SelectPipeline(id: string): void {\n this.SelectedPipelineId = id;\n this.SelectedModelVersionId = null;\n const p = this.Pipelines.find((x) => UUIDsEqual(x.ID, id));\n if (!p) {\n return;\n }\n\n // Defensive parsing against non-array JSON schemas\n const rawSources = this.parse<unknown>(p.SourceBindings, []);\n this.EditSources = Array.isArray(rawSources)\n ? (rawSources as SourceBinding[])\n : rawSources && typeof rawSources === 'object'\n ? [{ Kind: 'Entity', Ref: (rawSources as { EntityID?: string }).EntityID || '' }]\n : [];\n\n const rawSteps = this.parse<unknown>(p.FeatureSteps, { Steps: [] });\n if (Array.isArray(rawSteps)) {\n this.EditSteps = rawSteps as FeatureStep[];\n } else if (rawSteps && typeof rawSteps === 'object' && 'Steps' in rawSteps && Array.isArray((rawSteps as { Steps: unknown[] }).Steps)) {\n this.EditSteps = (rawSteps as { Steps: FeatureStep[] }).Steps;\n } else {\n this.EditSteps = [];\n }\n\n this.EditTargetVariable = p.TargetVariable ?? '';\n this.EditProblemType = (p.ProblemType as ProblemType) ?? 'classification';\n this.EditAlgorithmId = p.AlgorithmID ?? '';\n this.EditHyperparams = p.Hyperparameters ?? '{}';\n this.EditLeakage = this.parse<LeakageGuard>(p.LeakageGuard, { DenyFields: [], SingleFeatureDominanceThreshold: DOMINANCE_THRESHOLD_DEFAULT });\n this.EditAsOf = this.parse<AsOfStrategy>(p.AsOfStrategy, { Mode: 'none' });\n this.EditValidation = this.parse<ValidationStrategy>(p.ValidationStrategy, { Strategy: 'train_test_split', TestSize: 0.2, LockedHoldoutFraction: 0.15 });\n this.stepSeq = this.EditSteps.length;\n this.Dirty = false;\n this.rebuild();\n this.SelectedId = this.Nodes[0]?.id ?? '';\n }\n\n /** @deprecated Use {@link SelectPipeline}. */\n public selectPipeline(id: string): void {\n return this.SelectPipeline(id);\n }\n\n public get SelectedPipeline(): MJMLTrainingPipelineEntity | undefined {\n return this.Pipelines.find((p) => UUIDsEqual(p.ID, this.SelectedPipelineId));\n }\n\n /** @deprecated Use {@link SelectedPipeline}. */\n public get selectedPipeline(): MJMLTrainingPipelineEntity | undefined {\n return this.SelectedPipeline;\n }\n\n public IsSelectedPipeline(p: MJMLTrainingPipelineEntity): boolean {\n return UUIDsEqual(p.ID, this.SelectedPipelineId);\n }\n\n /** @deprecated Use {@link IsSelectedPipeline}. */\n public isSelectedPipeline(p: MJMLTrainingPipelineEntity): boolean {\n return this.IsSelectedPipeline(p);\n }\n\n private parse<T>(raw: string | null | undefined, fallback: T): T {\n if (!raw) {\n return fallback;\n }\n try {\n const value: unknown = JSON.parse(raw);\n return (value ?? fallback) as T;\n } catch {\n return fallback;\n }\n }\n\n private markDirty(): void {\n this.Dirty = true;\n this.rebuild();\n }\n\n // ---- derive nodes/edges from editable state ----\n\n private rebuild(): void {\n const nodes: DagNode[] = [];\n const edges: DagEdge[] = [];\n\n this.EditSources.forEach((sb, i) => nodes.push(this.sourceNode(sb, i)));\n this.EditSteps.forEach((step) => nodes.push(this.stepNode(step)));\n nodes.push(this.targetNode());\n nodes.push(this.algoNode());\n nodes.push({\n id: '__output',\n type: 'output',\n title: 'Model Artifact',\n icon: 'fa-solid fa-cube',\n tag: this.SelectedPipeline?.Status ?? 'Draft',\n x: 0,\n y: 0,\n hasIn: true,\n hasOut: false,\n rows: [\n { k: 'status', v: this.SelectedPipeline?.Status ?? 'Draft' },\n { k: 'serving', v: this.SelectedPipeline?.Status === 'Published' ? 'Active' : 'Not Serving' }\n ]\n });\n\n const stepIds = new Set(this.EditSteps.map((s) => s.Id));\n const sourceKeyToId = new Map<string, string>();\n this.EditSources.forEach((sb, i) => {\n const sid = `src:${i}`;\n sourceKeyToId.set(sid.toLowerCase(), sid);\n if (sb.Ref) sourceKeyToId.set(sb.Ref.toLowerCase(), sid);\n if (sb.Alias) sourceKeyToId.set(sb.Alias.toLowerCase(), sid);\n });\n\n const stepSourcesConnected = new Set<string>();\n const referenced = new Set<string>();\n for (const step of this.EditSteps) {\n for (const input of step.Inputs ?? []) {\n if (stepIds.has(input)) {\n edges.push({ from: input, to: step.Id });\n referenced.add(input);\n } else {\n const matchedSrc = sourceKeyToId.get(input.toLowerCase());\n if (matchedSrc) {\n edges.push({ from: matchedSrc, to: step.Id });\n stepSourcesConnected.add(step.Id);\n }\n }\n }\n }\n const roots = this.EditSteps.filter((s) => {\n const hasStepInput = (s.Inputs ?? []).some((i) => stepIds.has(i));\n const hasSourceInput = stepSourcesConnected.has(s.Id);\n return !hasStepInput && !hasSourceInput;\n });\n const sourceIds = this.EditSources.map((_s, i) => `src:${i}`);\n if (this.EditSteps.length > 0) {\n for (const sid of sourceIds) {\n for (const r of roots) {\n edges.push({ from: sid, to: r.Id });\n }\n }\n } else {\n for (const sid of sourceIds) {\n edges.push({ from: sid, to: '__algo' });\n }\n }\n for (const t of this.EditSteps.filter((s) => !referenced.has(s.Id))) {\n edges.push({ from: t.Id, to: '__algo' });\n }\n // Connect source to target so target sits cleanly in the feature/target layer\n if (sourceIds.length > 0) {\n edges.push({ from: sourceIds[0], to: '__target' });\n }\n edges.push({ from: '__target', to: '__algo' });\n edges.push({ from: '__algo', to: '__output' });\n\n this.Nodes = nodes;\n this.Edges = edges;\n this.markPorts();\n this.layoutGraph();\n }\n\n private sourceNode(sb: SourceBinding, i: number): DagNode {\n const md = this.provider ?? new Metadata();\n let title = sb.Alias;\n if (!title && sb.Kind === 'Entity' && sb.Ref) {\n const entity = md.EntityByName(sb.Ref);\n title = entity?.DisplayName || entity?.Name;\n }\n title = title || sb.Ref || 'source';\n\n const rows: { k: string; v: string }[] = [{ k: 'kind', v: sb.Kind }];\n if (sb.Alias) {\n rows.push({ k: 'alias', v: sb.Alias });\n }\n if (sb.Kind === 'Entity' && title !== sb.Ref) {\n rows.push({ k: 'entity', v: sb.Ref });\n }\n return {\n id: `src:${i}`,\n type: 'src',\n title,\n icon: SOURCE_ICONS[sb.Kind] ?? 'fa-solid fa-database',\n tag: sb.Kind,\n rows,\n x: 0,\n y: 0,\n hasIn: false,\n hasOut: true\n };\n }\n\n private stepNode(step: FeatureStep): DagNode {\n return {\n id: step.Id,\n type: step.Kind === 'embedding' ? 'emb' : 'feat',\n title: step.Label || step.Kind,\n icon: STEP_ICONS[step.Kind] ?? 'fa-solid fa-sliders',\n tag: step.Kind,\n rows: this.stepRows(step),\n x: 0,\n y: 0,\n hasIn: true,\n hasOut: true\n };\n }\n\n private stepRows(step: FeatureStep): { k: string; v: string }[] {\n switch (step.Kind) {\n case 'select': {\n const preview = step.Columns.length <= 3\n ? step.Columns.join(', ')\n : `${step.Columns.slice(0, 2).join(', ')} +${step.Columns.length - 2} more`;\n return [{ k: 'columns', v: preview || '0 cols' }];\n }\n case 'impute': return [{ k: 'column', v: step.Column }, { k: 'strategy', v: step.Strategy }];\n case 'standardize': {\n const preview = step.Columns.length <= 3\n ? step.Columns.join(', ')\n : `${step.Columns.slice(0, 2).join(', ')} +${step.Columns.length - 2} more`;\n return [{ k: 'columns', v: preview || '0 cols' }, { k: 'scaler', v: 'z-score' }];\n }\n case 'onehot': return [{ k: 'column', v: step.Column }];\n case 'bin': return [{ k: 'column', v: step.Column }, { k: 'bins', v: String(step.Bins) }];\n case 'embedding': return [{ k: 'entity', v: step.Entity }, { k: 'dims', v: String(step.Dims) }];\n case 'llm-derived': return [{ k: 'pipeline', v: step.FeaturePipelineRef }];\n case 'flow-agent': return [{ k: 'agent', v: step.FlowAgentRef }];\n case 'vision-llm': return [{ k: 'image', v: step.ImageColumn }, { k: 'output', v: step.Output.FeatureName }];\n default: return [];\n }\n }\n\n private targetNode(): DagNode {\n return {\n id: '__target',\n type: 'target',\n title: `Target: ${this.EditTargetVariable || '—'}`,\n icon: 'fa-solid fa-bullseye',\n tag: this.EditProblemType,\n rows: [\n { k: 'variable', v: this.EditTargetVariable || '—' },\n { k: 'type', v: this.EditProblemType }\n ],\n x: 0,\n y: 0,\n hasIn: true,\n hasOut: true\n };\n }\n\n private algoNode(): DagNode {\n const name = this.engine?.AlgorithmName(this.EditAlgorithmId) || 'Algorithm';\n const rows = [{ k: 'algorithm', v: name }];\n const hp = this.parse<Record<string, unknown>>(this.EditHyperparams, {});\n Object.entries(hp).slice(0, 1).forEach(([k, v]) => rows.push({ k, v: String(v) }));\n return {\n id: '__algo',\n type: 'algo',\n title: name,\n icon: 'fa-solid fa-shapes',\n tag: 'Algorithm',\n rows,\n x: 0,\n y: 0,\n hasIn: true,\n hasOut: true\n };\n }\n\n private markPorts(): void {\n const hasIn = new Set(this.Edges.map((e) => e.to));\n const hasOut = new Set(this.Edges.map((e) => e.from));\n for (const n of this.Nodes) {\n n.hasIn = hasIn.has(n.id);\n n.hasOut = hasOut.has(n.id);\n }\n }\n\n // ---- selection ----\n\n public SelectNode(id: string): void {\n this.SelectedId = id;\n }\n\n /** @deprecated Use {@link SelectNode}. */\n public selectNode(id: string): void {\n return this.SelectNode(id);\n }\n\n public get SelectedNode(): DagNode {\n return this.nodeById.get(this.SelectedId) ?? this.Nodes[0] ?? { id: '', type: 'feat', title: '—', icon: 'fa-solid fa-sliders', rows: [], x: 0, y: 0, hasIn: false, hasOut: false };\n }\n\n /** @deprecated Use {@link SelectedNode}. */\n public get selectedNode(): DagNode {\n return this.SelectedNode;\n }\n\n public get SelectedSourceIndex(): number {\n return this.SelectedId.startsWith('src:') ? Number(this.SelectedId.slice(4)) : -1;\n }\n\n /** @deprecated Use {@link SelectedSourceIndex}. */\n public get selectedSourceIndex(): number {\n return this.SelectedSourceIndex;\n }\n public get SelectedSource(): SourceBinding | null {\n const i = this.SelectedSourceIndex;\n return i >= 0 ? this.EditSources[i] ?? null : null;\n }\n\n /** @deprecated Use {@link SelectedSource}. */\n public get selectedSource(): SourceBinding | null {\n return this.SelectedSource;\n }\n public get SelectedStep(): FeatureStep | null {\n return this.EditSteps.find((s) => s.Id === this.SelectedId) ?? null;\n }\n\n /** @deprecated Use {@link SelectedStep}. */\n public get selectedStep(): FeatureStep | null {\n return this.SelectedStep;\n }\n public get OtherSteps(): FeatureStep[] {\n return this.EditSteps.filter((s) => s.Id !== this.SelectedId);\n }\n\n /** @deprecated Use {@link OtherSteps}. */\n public get otherSteps(): FeatureStep[] {\n return this.OtherSteps;\n }\n public get Algorithms() {\n return this.engine?.Algorithms ?? [];\n }\n\n /** @deprecated Use {@link Algorithms}. */\n public get algorithms() {\n return this.Algorithms;\n }\n\n // ---- source editing ----\n\n public SetSourceKind(kind: string): void { const s = this.SelectedSource; if (s) { s.Kind = kind as SourceBinding['Kind']; this.markDirty(); } }\n\n /** @deprecated Use {@link SetSourceKind}. */\n public setSourceKind(kind: string): void {\n return this.SetSourceKind(kind);\n }\n public SetSourceRef(ref: string): void { const s = this.SelectedSource; if (s) { s.Ref = ref; this.markDirty(); } }\n\n /** @deprecated Use {@link SetSourceRef}. */\n public setSourceRef(ref: string): void {\n return this.SetSourceRef(ref);\n }\n public SetSourceAlias(alias: string): void { const s = this.SelectedSource; if (s) { s.Alias = alias || undefined; this.markDirty(); } }\n\n /** @deprecated Use {@link SetSourceAlias}. */\n public setSourceAlias(alias: string): void {\n return this.SetSourceAlias(alias);\n }\n\n // ---- step editing ----\n\n public get ColumnsText(): string {\n const s = this.SelectedStep;\n if (s && (s.Kind === 'select' || s.Kind === 'standardize')) {\n return s.Columns.join(', ');\n }\n return '';\n }\n\n /** @deprecated Use {@link ColumnsText}. */\n public get columnsText(): string {\n return this.ColumnsText;\n }\n public SetColumns(text: string): void {\n const s = this.SelectedStep;\n if (s && (s.Kind === 'select' || s.Kind === 'standardize')) {\n s.Columns = text.split(',').map((c) => c.trim()).filter(Boolean);\n this.markDirty();\n }\n }\n\n /** @deprecated Use {@link SetColumns}. */\n public setColumns(text: string): void {\n return this.SetColumns(text);\n }\n public StepField(field: string): string {\n const s = this.SelectedStep as unknown as Record<string, unknown> | null;\n const v = s?.[field];\n return v == null ? '' : String(v);\n }\n\n /** @deprecated Use {@link StepField}. */\n public stepField(field: string): string {\n return this.StepField(field);\n }\n public SetStepStr(field: string, value: string): void {\n const s = this.SelectedStep as unknown as Record<string, unknown> | null;\n if (s) { s[field] = value; this.markDirty(); }\n }\n\n /** @deprecated Use {@link SetStepStr}. */\n public setStepStr(field: string, value: string): void {\n return this.SetStepStr(field, value);\n }\n public SetStepNum(field: string, value: string): void {\n const s = this.SelectedStep as unknown as Record<string, unknown> | null;\n const n = Number(value);\n if (s && !Number.isNaN(n)) { s[field] = n; this.markDirty(); }\n }\n\n /** @deprecated Use {@link SetStepNum}. */\n public setStepNum(field: string, value: string): void {\n return this.SetStepNum(field, value);\n }\n public SetStepLabel(label: string): void { const s = this.SelectedStep; if (s) { s.Label = label || undefined; this.markDirty(); } }\n\n /** @deprecated Use {@link SetStepLabel}. */\n public setStepLabel(label: string): void {\n return this.SetStepLabel(label);\n }\n\n public SetStepKind(kind: string): void {\n const idx = this.EditSteps.findIndex((s) => s.Id === this.SelectedId);\n if (idx < 0) {\n return;\n }\n const prev = this.EditSteps[idx];\n this.EditSteps[idx] = this.defaultStep(kind as FeatureStepKind, prev.Id, prev.Label, prev.Inputs);\n this.markDirty();\n }\n\n /** @deprecated Use {@link SetStepKind}. */\n public setStepKind(kind: string): void {\n return this.SetStepKind(kind);\n }\n\n public HasInput(stepId: string): boolean {\n return (this.SelectedStep?.Inputs ?? []).includes(stepId);\n }\n\n /** @deprecated Use {@link HasInput}. */\n public hasInput(stepId: string): boolean {\n return this.HasInput(stepId);\n }\n public ToggleInput(stepId: string): void {\n const s = this.SelectedStep;\n if (!s) {\n return;\n }\n const inputs = s.Inputs ?? [];\n if (inputs.includes(stepId)) {\n s.Inputs = inputs.filter((i) => i !== stepId);\n } else if (!this.createsCycle(stepId, s.Id)) {\n s.Inputs = [...inputs, stepId];\n } else {\n this.notifications.CreateSimpleNotification('That would create a cycle.', 'warning', 2500);\n return;\n }\n this.markDirty();\n }\n\n /** @deprecated Use {@link ToggleInput}. */\n public toggleInput(stepId: string): void {\n return this.ToggleInput(stepId);\n }\n private createsCycle(from: string, target: string): boolean {\n const byId = new Map(this.EditSteps.map((s) => [s.Id, s]));\n const seen = new Set<string>();\n const stack = [from];\n while (stack.length) {\n const id = stack.pop()!;\n if (id === target) {\n return true;\n }\n if (seen.has(id)) {\n continue;\n }\n seen.add(id);\n stack.push(...(byId.get(id)?.Inputs ?? []));\n }\n return false;\n }\n\n // ---- target / algorithm editing ----\n\n public SetTargetVariable(v: string): void { this.EditTargetVariable = v; this.markDirty(); }\n\n /** @deprecated Use {@link SetTargetVariable}. */\n public setTargetVariable(v: string): void {\n return this.SetTargetVariable(v);\n }\n public SetProblemType(v: string): void { this.EditProblemType = v as ProblemType; this.markDirty(); }\n\n /** @deprecated Use {@link SetProblemType}. */\n public setProblemType(v: string): void {\n return this.SetProblemType(v);\n }\n public SetAlgorithm(id: string): void { this.EditAlgorithmId = id; this.markDirty(); }\n\n /** @deprecated Use {@link SetAlgorithm}. */\n public setAlgorithm(id: string): void {\n return this.SetAlgorithm(id);\n }\n public SetHyperparams(v: string): void { this.EditHyperparams = v; this.markDirty(); }\n\n /** @deprecated Use {@link SetHyperparams}. */\n public setHyperparams(v: string): void {\n return this.SetHyperparams(v);\n }\n\n // ---- leakage / as-of / validation editing ----\n\n public get DenyText(): string { return this.EditLeakage.DenyFields.join(', '); }\n\n /** @deprecated Use {@link DenyText}. */\n public get denyText(): string {\n return this.DenyText;\n }\n public SetDeny(text: string): void { this.EditLeakage.DenyFields = parseDenyList(text); this.Dirty = true; }\n\n /** @deprecated Use {@link SetDeny}. */\n public setDeny(text: string): void {\n return this.SetDeny(text);\n }\n public SetThreshold(v: string): void { const n = Number(v); if (!Number.isNaN(n)) { this.EditLeakage.SingleFeatureDominanceThreshold = n; this.Dirty = true; } }\n\n /** @deprecated Use {@link SetThreshold}. */\n public setThreshold(v: string): void {\n return this.SetThreshold(v);\n }\n /**\n * Resets a stored as-of cutoff to `none` (training refuses any other mode) as an unsaved edit. It does not save: the\n * user saves with the pipeline's other edits, so a reset never commits half-finished changes.\n */\n public ResetAsOfToNone(): void {\n this.EditAsOf = { Mode: 'none' };\n this.markDirty();\n }\n public SetValStrategy(v: string): void { this.EditValidation = { ...this.EditValidation, Strategy: v as ValidationStrategy['Strategy'] }; this.Dirty = true; }\n\n /** @deprecated Use {@link SetValStrategy}. */\n public setValStrategy(v: string): void {\n return this.SetValStrategy(v);\n }\n public SetTestSize(v: string): void { const n = Number(v); if (!Number.isNaN(n)) { this.EditValidation.TestSize = n; this.Dirty = true; } }\n\n /** @deprecated Use {@link SetTestSize}. */\n public setTestSize(v: string): void {\n return this.SetTestSize(v);\n }\n public SetK(v: string): void { const n = Number(v); if (!Number.isNaN(n)) { this.EditValidation.K = n; this.Dirty = true; } }\n\n /** @deprecated Use {@link SetK}. */\n public setK(v: string): void {\n return this.SetK(v);\n }\n public SetHoldout(v: string): void { const n = Number(v); if (!Number.isNaN(n)) { this.EditValidation.LockedHoldoutFraction = n; this.Dirty = true; } }\n\n /** @deprecated Use {@link SetHoldout}. */\n public setHoldout(v: string): void {\n return this.SetHoldout(v);\n }\n\n // ---- add / delete nodes ----\n\n public AddSource(): void {\n this.EditSources = [...this.EditSources, { Kind: 'Entity', Ref: '' }];\n this.markDirty();\n this.SelectedId = `src:${this.EditSources.length - 1}`;\n }\n\n /** @deprecated Use {@link AddSource}. */\n public addSource(): void {\n return this.AddSource();\n }\n public AddStep(): void {\n const id = `step_${++this.stepSeq}`;\n this.EditSteps = [...this.EditSteps, this.defaultStep('select', id)];\n this.markDirty();\n this.SelectedId = id;\n }\n\n /** @deprecated Use {@link AddStep}. */\n public addStep(): void {\n return this.AddStep();\n }\n public DeleteSelected(): void {\n const si = this.SelectedSourceIndex;\n if (si >= 0) {\n this.EditSources = this.EditSources.filter((_s, i) => i !== si);\n this.markDirty();\n this.SelectedId = this.Nodes[0]?.id ?? '';\n return;\n }\n const step = this.SelectedStep;\n if (step) {\n this.EditSteps = this.EditSteps.filter((s) => s.Id !== step.Id);\n for (const s of this.EditSteps) {\n if (s.Inputs?.includes(step.Id)) {\n s.Inputs = s.Inputs.filter((i) => i !== step.Id);\n }\n }\n this.markDirty();\n this.SelectedId = this.Nodes[0]?.id ?? '';\n }\n }\n\n /** @deprecated Use {@link DeleteSelected}. */\n public deleteSelected(): void {\n return this.DeleteSelected();\n }\n\n private defaultStep(kind: FeatureStepKind, id: string, label?: string, inputs?: string[]): FeatureStep {\n const base = { Id: id, Label: label, Inputs: inputs };\n switch (kind) {\n case 'select': return { ...base, Kind: 'select', Columns: [] };\n case 'impute': return { ...base, Kind: 'impute', Column: '', Strategy: 'mean' };\n case 'standardize': return { ...base, Kind: 'standardize', Columns: [] };\n case 'onehot': return { ...base, Kind: 'onehot', Column: '' };\n case 'bin': return { ...base, Kind: 'bin', Column: '', Bins: 5 };\n case 'embedding': return { ...base, Kind: 'embedding', Entity: '', EmbeddingModelRef: '', Dims: 384 };\n case 'llm-derived': return { ...base, Kind: 'llm-derived', FeaturePipelineRef: '', Columns: [] };\n case 'flow-agent': return { ...base, Kind: 'flow-agent', FlowAgentRef: '', InputMapping: {}, OutputMapping: {} };\n case 'vision-llm': return { ...base, Kind: 'vision-llm', ImageColumn: '', Prompt: { InlinePrompt: '' }, Output: { FeatureName: '', Kind: 'category' } };\n }\n }\n\n // ---- save / validate / train ----\n\n public async save(): Promise<void> {\n const p = this.SelectedPipeline;\n if (!p || this.Busy) {\n return;\n }\n this.Busy = true;\n try {\n p.SourceBindings = JSON.stringify(this.EditSources);\n p.FeatureSteps = JSON.stringify({ Steps: this.EditSteps });\n p.TargetVariable = this.EditTargetVariable;\n p.ProblemType = this.EditProblemType;\n p.AlgorithmID = this.EditAlgorithmId;\n p.Hyperparameters = this.EditHyperparams || null;\n p.LeakageGuard = JSON.stringify(this.EditLeakage);\n p.AsOfStrategy = JSON.stringify(this.EditAsOf);\n p.ValidationStrategy = JSON.stringify(this.EditValidation);\n const ok = await p.Save();\n if (ok) {\n this.Dirty = false;\n this.notifications.CreateSimpleNotification(`Saved \"${p.Name}\".`, 'success', 3000);\n } else {\n this.notifications.CreateSimpleNotification(`Save failed: ${p.LatestResult?.CompleteMessage ?? 'unknown error'}`, 'error', 5000);\n }\n } finally {\n this.Busy = false;\n this.cdr.detectChanges();\n }\n }\n\n public validate(): void {\n const issues: string[] = [];\n if (this.EditSources.length === 0) {\n issues.push('at least one source');\n }\n if (!this.EditTargetVariable) {\n issues.push('a target variable');\n }\n if (!this.EditAlgorithmId) {\n issues.push('an algorithm');\n }\n try {\n JSON.parse(this.EditHyperparams || '{}');\n } catch {\n issues.push('valid hyperparameters JSON');\n }\n if (issues.length > 0) {\n this.notifications.CreateSimpleNotification(`Pipeline needs ${issues.join(', ')}.`, 'warning', 4500);\n } else {\n this.notifications.CreateSimpleNotification('Pipeline looks valid — ready to train.', 'success', 3000);\n }\n }\n\n public async train(): Promise<void> {\n const p = this.SelectedPipeline;\n if (!p || this.Busy || this.Dirty) {\n return;\n }\n this.Busy = true;\n this.notifications.CreateSimpleNotification(`Training \"${p.Name}\"…`, 'info', 2500);\n try {\n const op = new PredictiveStudioTrainModelOperation();\n const result = await op.Execute({ pipelineId: p.ID }, { provider: this.provider ?? undefined, user: this.CurrentUser ?? undefined });\n if (result.Success && result.Output) {\n const flagged = result.Output.leakageFlagged ? ' (leakage flag raised — needs sign-off)' : '';\n this.notifications.CreateSimpleNotification(`Trained ${p.Name} v${result.Output.version}${flagged}. See Registry.`, 'success', 5000);\n await this.engine.Config(true, this.CurrentUser ?? undefined, this.provider ?? undefined);\n } else {\n this.notifications.CreateSimpleNotification(result.ErrorMessage || 'Training failed.', 'error', 6000);\n }\n } catch (e) {\n this.notifications.CreateSimpleNotification(`Training error: ${e instanceof Error ? e.message : String(e)}`, 'error', 6000);\n } finally {\n this.Busy = false;\n this.cdr.detectChanges();\n }\n }\n\n public Refine(): void {\n const p = this.SelectedPipeline;\n if (!p) {\n this.AskAgent.emit(this.StarterPrompt);\n return;\n }\n const predicts = p.TargetVariable ? ` (predicts ${p.TargetVariable})` : '';\n this.AskAgent.emit(`Help me refine the \"${p.Name}\" training pipeline${predicts}. Suggest improvements to the features or algorithm to raise holdout performance.`);\n }\n\n /** @deprecated Use {@link Refine}. */\n public refine(): void {\n return this.Refine();\n }\n\n public StatusClass(status: string): string {\n switch (status) {\n case 'Published': return 'published';\n case 'Validated': return 'validated';\n default: return 'draft';\n }\n }\n\n /** @deprecated Use {@link StatusClass}. */\n public statusClass(status: string): string {\n return this.StatusClass(status);\n }\n\n public NodeTypeLabel(type: NodeType): string {\n switch (type) {\n case 'src': return 'Source';\n case 'feat': return 'Feature Step';\n case 'emb': return 'Embedding';\n case 'target': return 'Target';\n case 'algo': return 'Algorithm';\n case 'output': return 'Output Model';\n }\n }\n\n /** @deprecated Use {@link NodeTypeLabel}. */\n public nodeTypeLabel(type: NodeType): string {\n return this.NodeTypeLabel(type);\n }\n\n // ---- Graph layered layout ----\n\n private layoutGraph(): void {\n this.nodeById.clear();\n for (const n of this.Nodes) {\n this.nodeById.set(n.id, n);\n }\n const inEdges = new Map<string, string[]>();\n for (const n of this.Nodes) {\n inEdges.set(n.id, []);\n }\n for (const e of this.Edges) {\n inEdges.get(e.to)?.push(e.from);\n }\n const layerOf = new Map<string, number>();\n const computeLayer = (id: string, path: Set<string>): number => {\n if (layerOf.has(id)) {\n return layerOf.get(id)!;\n }\n if (path.has(id)) {\n return 0;\n }\n path.add(id);\n const preds = inEdges.get(id) ?? [];\n let l = 0;\n for (const p of preds) {\n l = Math.max(l, computeLayer(p, path) + 1);\n }\n path.delete(id);\n layerOf.set(id, l);\n return l;\n };\n for (const n of this.Nodes) {\n computeLayer(n.id, new Set());\n }\n\n const algoNode = this.Nodes.find((n) => n.id === '__algo');\n const outNode = this.Nodes.find((n) => n.id === '__output');\n let maxFeatureLayer = 0;\n for (const n of this.Nodes) {\n if (n.id !== '__algo' && n.id !== '__output') {\n maxFeatureLayer = Math.max(maxFeatureLayer, layerOf.get(n.id) ?? 0);\n }\n }\n if (algoNode) {\n layerOf.set('__algo', maxFeatureLayer + 1);\n }\n if (outNode) {\n layerOf.set('__output', maxFeatureLayer + 2);\n }\n\n const layers = new Map<number, DagNode[]>();\n for (const n of this.Nodes) {\n const l = layerOf.get(n.id) ?? 0;\n const arr = layers.get(l) ?? [];\n arr.push(n);\n layers.set(l, arr);\n }\n\n let maxCol = 0;\n let maxRow = 0;\n layers.forEach((nodesInCol, col) => {\n maxCol = Math.max(maxCol, col);\n maxRow = Math.max(maxRow, nodesInCol.length);\n });\n\n const maxCanvasHeight = PAD_Y * 2 + maxRow * NODE_H + Math.max(0, maxRow - 1) * ROW_GAP;\n\n layers.forEach((nodesInCol, col) => {\n const colHeight = nodesInCol.length * NODE_H + Math.max(0, nodesInCol.length - 1) * ROW_GAP;\n // Vertically center this column relative to the tallest column in the graph\n const colStartY = PAD_Y + Math.max(0, Math.floor((maxCanvasHeight - PAD_Y * 2 - colHeight) / 2));\n nodesInCol.forEach((n, row) => {\n n.x = PAD_X + col * (NODE_W + COL_GAP);\n n.y = colStartY + row * (NODE_H + ROW_GAP);\n });\n });\n\n this.CanvasW = Math.max(920, PAD_X * 2 + (maxCol + 1) * NODE_W + maxCol * COL_GAP);\n this.CanvasH = Math.max(540, maxCanvasHeight);\n }\n\n public EdgePath(edge: DagEdge): string {\n const from = this.nodeById.get(edge.from);\n const to = this.nodeById.get(edge.to);\n if (!from || !to) {\n return '';\n }\n const x1 = from.x + NODE_W;\n const y1 = from.y + NODE_H / 2;\n // Account for port diameter / marker-end: end 2px before port center\n const x2 = to.x - 2;\n const y2 = to.y + NODE_H / 2;\n const dx = Math.max(36, Math.abs(x2 - x1) * 0.45);\n return `M ${x1} ${y1} C ${x1 + dx} ${y1}, ${x2 - dx} ${y2}, ${x2} ${y2}`;\n }\n\n /** @deprecated Use {@link EdgePath}. */\n public edgePath(edge: DagEdge): string {\n return this.EdgePath(edge);\n }\n}\n"]}
|