css-variable-lsp 1.0.18 → 1.0.20-beta.1

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/AGENTS.md CHANGED
@@ -1,139 +0,0 @@
1
- ## Issue Tracking with bd (beads)
2
-
3
- **IMPORTANT**: This project uses **bd (beads)** for ALL issue tracking. Do NOT use markdown TODOs, task lists, or other tracking methods.
4
-
5
- ### Why bd?
6
-
7
- - Dependency-aware: Track blockers and relationships between issues
8
- - Git-friendly: Auto-syncs to JSONL for version control
9
- - Agent-optimized: JSON output, ready work detection, discovered-from links
10
- - Prevents duplicate tracking systems and confusion
11
-
12
- ### Quick Start
13
-
14
- **Check for ready work:**
15
-
16
- ```bash
17
- bd ready --json
18
- ```
19
-
20
- **Create new issues:**
21
-
22
- ```bash
23
- bd create "Issue title" -t bug|feature|task -p 0-4 --json
24
- bd create "Issue title" -p 1 --deps discovered-from:bd-123 --json
25
- ```
26
-
27
- **Claim and update:**
28
-
29
- ```bash
30
- bd update bd-42 --status in_progress --json
31
- bd update bd-42 --priority 1 --json
32
- ```
33
-
34
- **Complete work:**
35
-
36
- ```bash
37
- bd close bd-42 --reason "Completed" --json
38
- ```
39
-
40
- ### Issue Types
41
-
42
- - `bug` - Something broken
43
- - `feature` - New functionality
44
- - `task` - Work item (tests, docs, refactoring)
45
- - `epic` - Large feature with subtasks
46
- - `chore` - Maintenance (dependencies, tooling)
47
-
48
- ### Priorities
49
-
50
- - `0` - Critical (security, data loss, broken builds)
51
- - `1` - High (major features, important bugs)
52
- - `2` - Medium (default, nice-to-have)
53
- - `3` - Low (polish, optimization)
54
- - `4` - Backlog (future ideas)
55
-
56
- ### Workflow for AI Agents
57
-
58
- 1. **Check ready work**: `bd ready` shows unblocked issues
59
- 2. **Claim your task**: `bd update <id> --status in_progress`
60
- 3. **Work on it**: Implement, test, document
61
- 4. **Discover new work?** Create linked issue:
62
- - `bd create "Found bug" -p 1 --deps discovered-from:<parent-id>`
63
- 5. **Complete**: `bd close <id> --reason "Done"`
64
- 6. **Commit together**: Always commit the `.beads/issues.jsonl` file together with the code changes so issue state stays in sync with code state
65
-
66
- ### Auto-Sync
67
-
68
- bd automatically syncs with git:
69
-
70
- - Exports to `.beads/issues.jsonl` after changes (5s debounce)
71
- - Imports from JSONL when newer (e.g., after `git pull`)
72
- - No manual export/import needed!
73
-
74
- ### MCP Server (Recommended)
75
-
76
- If using Claude or MCP-compatible clients, install the beads MCP server:
77
-
78
- ```bash
79
- pip install beads-mcp
80
- ```
81
-
82
- Add to MCP config (e.g., `~/.config/claude/config.json`):
83
-
84
- ```json
85
- {
86
- "beads": {
87
- "command": "beads-mcp",
88
- "args": []
89
- }
90
- }
91
- ```
92
-
93
- Then use `mcp__beads__*` functions instead of CLI commands.
94
-
95
- ### Managing AI-Generated Planning Documents
96
-
97
- AI assistants often create planning and design documents during development:
98
-
99
- - PLAN.md, IMPLEMENTATION.md, ARCHITECTURE.md
100
- - DESIGN.md, CODEBASE_SUMMARY.md, INTEGRATION_PLAN.md
101
- - TESTING_GUIDE.md, TECHNICAL_DESIGN.md, and similar files
102
-
103
- **Best Practice: Use a dedicated directory for these ephemeral files**
104
-
105
- **Recommended approach:**
106
-
107
- - Create a `history/` directory in the project root
108
- - Store ALL AI-generated planning/design docs in `history/`
109
- - Keep the repository root clean and focused on permanent project files
110
- - Only access `history/` when explicitly asked to review past planning
111
-
112
- **Example .gitignore entry (optional):**
113
-
114
- ```
115
- # AI planning documents (ephemeral)
116
- history/
117
- ```
118
-
119
- **Benefits:**
120
-
121
- - ✅ Clean repository root
122
- - ✅ Clear separation between ephemeral and permanent documentation
123
- - ✅ Easy to exclude from version control if desired
124
- - ✅ Preserves planning history for archeological research
125
- - ✅ Reduces noise when browsing the project
126
-
127
- ### Important Rules
128
-
129
- - ✅ Use bd for ALL task tracking
130
- - ✅ Always use `--json` flag for programmatic use
131
- - ✅ Link discovered work with `discovered-from` dependencies
132
- - ✅ Check `bd ready` before asking "what should I work on?"
133
- - ✅ Store AI planning docs in `history/` directory
134
- - ❌ Do NOT create markdown TODO lists
135
- - ❌ Do NOT use external issue trackers
136
- - ❌ Do NOT duplicate tracking systems
137
- - ❌ Do NOT clutter repo root with planning documents
138
-
139
- For more details, see README.md and QUICKSTART.md.
package/README.md CHANGED
@@ -48,6 +48,7 @@ This is a standalone LSP server. Configure it in any LSP client.
48
48
  Command-line flags:
49
49
 
50
50
  - `--no-color-preview`
51
+ - `--no-color-replacement-diagnostics` (disable "replace literal with CSS variable" suggestions)
51
52
  - `--color-only-variables` (show colors only on `var(--...)` usages)
52
53
  - `--lookup-files "<glob>,<glob>"` (comma-separated list of glob patterns)
53
54
  - `--lookup-file "<glob>"` (repeatable)
@@ -59,6 +60,10 @@ Command-line flags:
59
60
 
60
61
  Environment variables:
61
62
 
63
+ - `CSS_LSP_COLOR_REPLACEMENT_DIAGNOSTICS=0` (disable "replace literal with CSS variable" suggestions)
64
+
65
+ Environment variables:
66
+
62
67
  - `CSS_LSP_COLOR_ONLY_VARIABLES=1` (same as `--color-only-variables`)
63
68
  - `CSS_LSP_LOOKUP_FILES` (comma-separated glob patterns; ignored if CLI lookup flags are provided)
64
69
  - `CSS_LSP_IGNORE_GLOBS` (comma-separated glob patterns; ignored if CLI ignore flags are provided)
@@ -0,0 +1,96 @@
1
+ # Deep Research: Full SCSS/Sass Support for CSS Variable LSP
2
+
3
+ Last updated: 2026-01-21
4
+
5
+ ## Executive summary
6
+
7
+ - Full SCSS/Sass semantics require a real Sass compiler (Dart Sass). Parser-only libraries can accept syntax but cannot evaluate variables, mixins, @use/@forward modules, interpolation, or control flow.
8
+ - In Node.js, the practical compiler choices are `sass` (Dart Sass compiled to JavaScript) and `sass-embedded` (embedded Dart executable with the same JS API, usually faster but platform-limited).
9
+ - Sass module features (`@use`, `@forward`, and built-in `sass:` modules) are only supported by Dart Sass, not LibSass.
10
+
11
+ ## What "full support" means
12
+
13
+ A "full" SCSS/Sass implementation must evaluate:
14
+
15
+ - `$` variables, mixins, functions, and control flow (`@if`, `@for`, `@each`, `@while`).
16
+ - Interpolation in selectors, property names, and values.
17
+ - Module system semantics for `@use` and `@forward` (including namespaces and configuration).
18
+ - Built-in modules such as `sass:color`, `sass:math`, etc.
19
+ - Both syntaxes: SCSS (`.scss`) and indented Sass (`.sass`).
20
+
21
+ These features are not recoverable with syntax-only parsing; they require compilation.
22
+
23
+ ## Library landscape
24
+
25
+ ### 1) Compiler-backed (full semantics)
26
+
27
+ #### Dart Sass via the JS API
28
+
29
+ - The `sass` npm package is Dart Sass compiled to JavaScript. It includes the CLI and exposes the JavaScript API (`compile`, `compileString`, and async variants).
30
+ - The `sass-embedded` package wraps the embedded Dart Sass executable using the Embedded Sass protocol. It exposes the same JS API and is typically faster, but only on platforms where the embedded Dart binary is available.
31
+ - Dart Sass itself can be started in embedded mode via `sass --embedded`, but the npm build of Dart Sass does not provide the `--embedded` flag.
32
+
33
+ #### JS API surface that matters for an LSP
34
+
35
+ Key API parts for integration:
36
+
37
+ - `compile` / `compileString` and their async equivalents.
38
+ - Options that affect source mapping (`sourceMap`, `sourceMapIncludeSources`).
39
+ - Resolution controls (`loadPaths`) and custom `importers` (for `@use`/`@import`).
40
+ - `FileImporter` lets the compiler resolve partials and extensions (e.g., `_name.scss`, `.sass`, `.scss`) without manual logic.
41
+ - The legacy JS API (`render`, `renderSync`) is deprecated and scheduled for removal in Dart Sass 2.0.0.
42
+
43
+ ### 2) Parser-only (syntax-level, not semantic)
44
+
45
+ - `postcss-scss` parses SCSS syntax but does not compile; it represents mixins and variables as custom at-rules/properties rather than evaluating them.
46
+ - `gonzales-pe` provides an AST for SCSS/Sass/LESS syntax but does not evaluate Sass semantics.
47
+ - Tree-sitter provides incremental parsing and syntax trees; grammars exist for SCSS, but they do not execute Sass logic.
48
+
49
+ ## Implications for CSS Variable LSP
50
+
51
+ ### Option A: Compile SCSS/Sass to CSS (recommended for "full support")
52
+
53
+ Pipeline:
54
+
55
+ 1. On `.scss`/`.sass` file change, compile with `sass` or `sass-embedded`.
56
+ 2. Feed resulting CSS into the existing CSS custom property extractor.
57
+ 3. Use source maps to map CSS locations back to original SCSS/Sass documents.
58
+ 4. Use custom importers to align `@use`/`@import` resolution with the workspace layout.
59
+ 5. Track dependencies so changes in partials or shared modules trigger recompilation of dependents.
60
+ 6. Surface Sass compiler errors as diagnostics and avoid indexing stale outputs.
61
+
62
+ Notes:
63
+
64
+ - `sass-embedded` is usually faster and keeps the main thread more responsive, but it adds a native dependency and is limited by platform support. A practical approach is to prefer `sass-embedded` and fall back to `sass` when not available.
65
+ - Source maps are essential for precise diagnostics, hover, and definitions. Without them, results will point to generated CSS instead of the original SCSS/Sass.
66
+
67
+ ### Option B: Syntax-only parsing to tolerate SCSS/Sass syntax
68
+
69
+ You can swap the parser to `postcss-scss` or gonzales-pe to prevent parse failures and still extract literal `--custom-prop` declarations, but this cannot provide accurate semantics when Sass generates custom properties dynamically (mixins, interpolation, control flow). This is "best-effort" only.
70
+
71
+ ### Mixed approach
72
+
73
+ A hybrid strategy is to run a fast syntax-only parse for responsiveness, then refine results after a background Sass compilation finishes. This can reduce editor latency while still delivering correct results once compilation completes.
74
+
75
+ ## Recommendation
76
+
77
+ If the goal is truly "full SCSS/Sass support", integrate Dart Sass compilation. Use `sass-embedded` for performance where available, fall back to `sass` otherwise, and rely on source maps plus custom importers to map results back to source files. Parser-only libraries can improve tolerance for incomplete edits, but they cannot replace a compiler for correctness.
78
+
79
+ ## Sources
80
+
81
+ - https://sass-lang.com/documentation/js-api/
82
+ - https://sass-lang.com/documentation/js-api/functions/compile/
83
+ - https://sass-lang.com/documentation/js-api/interfaces/options/
84
+ - https://sass-lang.com/documentation/js-api/interfaces/importer/
85
+ - https://sass-lang.com/documentation/js-api/interfaces/fileimporter/
86
+ - https://sass-lang.com/documentation/at-rules/use/
87
+ - https://sass-lang.com/documentation/at-rules/forward/
88
+ - https://sass-lang.com/documentation/modules/
89
+ - https://sass-lang.com/documentation/breaking-changes/legacy-js-api/
90
+ - https://github.com/sass/embedded-host-node
91
+ - https://github.com/sass/dart-sass
92
+ - https://github.com/postcss/postcss-scss
93
+ - https://www.npmjs.com/package/gonzales-pe
94
+ - https://github.com/tree-sitter/tree-sitter
95
+ - https://www.npmjs.com/package/tree-sitter
96
+ - https://docs.rs/tree-sitter-scss
@@ -5,6 +5,8 @@ exports.formatColor = formatColor;
5
5
  exports.formatColorAsHex = formatColorAsHex;
6
6
  exports.formatColorAsRgb = formatColorAsRgb;
7
7
  exports.formatColorAsHsl = formatColorAsHsl;
8
+ exports.getNormalizedColorKey = getNormalizedColorKey;
9
+ exports.colorsEqual = colorsEqual;
8
10
  /**
9
11
  * Parse a CSS color string into an LSP Color object.
10
12
  * Supports hex, rgb, rgba, hsl, hsla. Named colors are optional.
@@ -146,31 +148,71 @@ function parseHex(hex) {
146
148
  return { red: r, green: g, blue: b, alpha: a };
147
149
  }
148
150
  function parseRgb(value) {
149
- const match = value.match(/rgba?\(([\d\s\.]+),?\s*([\d\s\.]+),?\s*([\d\s\.]+)(?:,?\s*\/?,?\s*([\d\s\.]+))?\)/);
150
- if (!match)
151
+ const start = value.indexOf("(");
152
+ const end = value.lastIndexOf(")");
153
+ if (start === -1 || end === -1 || end <= start) {
154
+ return null;
155
+ }
156
+ const inner = value.slice(start + 1, end).trim();
157
+ const [rgbPart, alphaPart] = splitAlphaPart(inner);
158
+ const parts = rgbPart.split(/[\s,]+/).filter(Boolean);
159
+ if (parts.length !== 3 && parts.length !== 4) {
160
+ return null;
161
+ }
162
+ const r = parseFloat(parts[0]) / 255;
163
+ const g = parseFloat(parts[1]) / 255;
164
+ const b = parseFloat(parts[2]) / 255;
165
+ const a = alphaPart
166
+ ? parseAlpha(alphaPart)
167
+ : parts.length === 4
168
+ ? parseAlpha(parts[3])
169
+ : 1;
170
+ if ([r, g, b, a].some((component) => Number.isNaN(component))) {
151
171
  return null;
152
- const r = parseFloat(match[1]) / 255;
153
- const g = parseFloat(match[2]) / 255;
154
- const b = parseFloat(match[3]) / 255;
155
- let a = 1;
156
- if (match[4]) {
157
- a = parseFloat(match[4]);
158
172
  }
159
173
  return { red: r, green: g, blue: b, alpha: a };
160
174
  }
161
175
  function parseHsl(value) {
162
- const match = value.match(/hsla?\(([\d\s\.]+)(?:deg)?,?\s*([\d\s\.]+)%?,?\s*([\d\s\.]+)%?(?:,?\s*\/?,?\s*([\d\s\.]+))?\)/);
163
- if (!match)
176
+ const start = value.indexOf("(");
177
+ const end = value.lastIndexOf(")");
178
+ if (start === -1 || end === -1 || end <= start) {
179
+ return null;
180
+ }
181
+ const inner = value.slice(start + 1, end).trim();
182
+ const [hslPart, alphaPart] = splitAlphaPart(inner);
183
+ const parts = hslPart.split(/[\s,]+/).filter(Boolean);
184
+ if (parts.length !== 3 && parts.length !== 4) {
185
+ return null;
186
+ }
187
+ const h = parseFloat(parts[0]) / 360;
188
+ const s = parseFloat(parts[1]) / 100;
189
+ const l = parseFloat(parts[2]) / 100;
190
+ const a = alphaPart
191
+ ? parseAlpha(alphaPart)
192
+ : parts.length === 4
193
+ ? parseAlpha(parts[3])
194
+ : 1;
195
+ if ([h, s, l, a].some((component) => Number.isNaN(component))) {
164
196
  return null;
165
- const h = parseFloat(match[1]) / 360;
166
- const s = parseFloat(match[2]) / 100;
167
- const l = parseFloat(match[3]) / 100;
168
- let a = 1;
169
- if (match[4]) {
170
- a = parseFloat(match[4]);
171
197
  }
172
198
  return hslToRgb(h, s, l, a);
173
199
  }
200
+ function splitAlphaPart(value) {
201
+ const slashIndex = value.indexOf("/");
202
+ if (slashIndex === -1) {
203
+ return [value.trim(), null];
204
+ }
205
+ return [
206
+ value.slice(0, slashIndex).trim(),
207
+ value.slice(slashIndex + 1).trim(),
208
+ ];
209
+ }
210
+ function parseAlpha(value) {
211
+ if (value.endsWith("%")) {
212
+ return parseFloat(value) / 100;
213
+ }
214
+ return parseFloat(value);
215
+ }
174
216
  function hslToRgb(h, s, l, a) {
175
217
  let r, g, b;
176
218
  if (s === 0) {
@@ -198,6 +240,12 @@ function hslToRgb(h, s, l, a) {
198
240
  }
199
241
  return { red: r, green: g, blue: b, alpha: a };
200
242
  }
243
+ function getNormalizedColorKey(color) {
244
+ return formatColorAsHex(color).toLowerCase();
245
+ }
246
+ function colorsEqual(a, b) {
247
+ return getNormalizedColorKey(a) === getNormalizedColorKey(b);
248
+ }
201
249
  function parseNamedColor(name) {
202
250
  const colors = {
203
251
  black: "#000000",
@@ -1 +1 @@
1
- {"version":3,"file":"colorService.js","sourceRoot":"","sources":["../src/colorService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"colorService.js","sourceRoot":"","sources":["../src/colorService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.COLOR_REPLACEMENT_DIAGNOSTIC_CODE = void 0;
4
+ exports.collectColorReplacementDiagnostics = collectColorReplacementDiagnostics;
5
+ exports.getColorReplacementCompletionItems = getColorReplacementCompletionItems;
6
+ exports.getColorReplacementCodeActions = getColorReplacementCodeActions;
7
+ const node_1 = require("vscode-languageserver/node");
8
+ exports.COLOR_REPLACEMENT_DIAGNOSTIC_CODE = "replace-with-css-variable";
9
+ function collectColorReplacementDiagnostics(document, cssVariableManager, logger) {
10
+ try {
11
+ return cssVariableManager
12
+ .getDocumentColorLiterals(document.uri)
13
+ .flatMap((literal) => {
14
+ if (literal.variableName) {
15
+ return [];
16
+ }
17
+ const matches = getMatchingVariables(literal, cssVariableManager);
18
+ if (matches.length === 0) {
19
+ return [];
20
+ }
21
+ const variableNames = matches.map((match) => match.name);
22
+ const message = variableNames.length === 1
23
+ ? `Literal color can be replaced with matching CSS variable '${variableNames[0]}'`
24
+ : `Literal color can be replaced with matching CSS variables: ${variableNames.map((n) => `'${n}'`).join(", ")}`;
25
+ return [
26
+ {
27
+ severity: node_1.DiagnosticSeverity.Information,
28
+ range: literal.range,
29
+ message,
30
+ source: "css-variable-lsp",
31
+ code: exports.COLOR_REPLACEMENT_DIAGNOSTIC_CODE,
32
+ data: {
33
+ kind: exports.COLOR_REPLACEMENT_DIAGNOSTIC_CODE,
34
+ variableNames,
35
+ },
36
+ },
37
+ ];
38
+ });
39
+ }
40
+ catch (error) {
41
+ logger.error("collectColorReplacementDiagnostics", { error });
42
+ return [];
43
+ }
44
+ }
45
+ function getColorReplacementCompletionItems(document, position, cssVariableManager, displayOptions, logger) {
46
+ try {
47
+ const literal = findColorLiteralAtPosition(document, position, cssVariableManager);
48
+ if (!literal) {
49
+ return [];
50
+ }
51
+ return getMatchingVariables(literal, cssVariableManager).map((match) => createColorReplacementCompletionItem(document, literal.range, match, displayOptions));
52
+ }
53
+ catch (error) {
54
+ logger.error("getColorReplacementCompletionItems", { error });
55
+ return [];
56
+ }
57
+ }
58
+ function getColorReplacementCodeActions(document, diagnostics, logger) {
59
+ try {
60
+ const actions = [];
61
+ for (const diagnostic of diagnostics) {
62
+ if (diagnostic.code !== exports.COLOR_REPLACEMENT_DIAGNOSTIC_CODE) {
63
+ continue;
64
+ }
65
+ const data = diagnostic.data;
66
+ if (!isValidDiagnosticData(data)) {
67
+ logger.error("getColorReplacementCodeActions", { diagnostic: diagnostic.data });
68
+ continue;
69
+ }
70
+ const variableNames = data.variableNames;
71
+ for (const variableName of variableNames) {
72
+ actions.push({
73
+ title: `Replace with var(${variableName})`,
74
+ kind: node_1.CodeActionKind.QuickFix,
75
+ diagnostics: [diagnostic],
76
+ edit: {
77
+ changes: {
78
+ [document.uri]: [
79
+ node_1.TextEdit.replace(diagnostic.range, `var(${variableName})`),
80
+ ],
81
+ },
82
+ },
83
+ });
84
+ }
85
+ }
86
+ return actions;
87
+ }
88
+ catch (error) {
89
+ logger.error("getColorReplacementCodeActions", { error });
90
+ return [];
91
+ }
92
+ }
93
+ function findColorLiteralAtPosition(document, position, cssVariableManager) {
94
+ const offset = document.offsetAt(position);
95
+ const targetLine = position.line;
96
+ const lineLiterals = cssVariableManager.getDocumentColorLiteralsByLine(document.uri, targetLine);
97
+ for (const literal of lineLiterals) {
98
+ const start = document.offsetAt(literal.range.start);
99
+ const end = document.offsetAt(literal.range.end);
100
+ if (!isRangeValid(literal.range) || start > end) {
101
+ continue;
102
+ }
103
+ if (offset >= start && offset <= end) {
104
+ return literal;
105
+ }
106
+ }
107
+ return null;
108
+ }
109
+ function isValidDiagnosticData(data) {
110
+ if (typeof data !== "object" || data === null) {
111
+ return false;
112
+ }
113
+ const obj = data;
114
+ return (obj.kind === exports.COLOR_REPLACEMENT_DIAGNOSTIC_CODE &&
115
+ Array.isArray(obj.variableNames) &&
116
+ obj.variableNames.every((v) => typeof v === "string"));
117
+ }
118
+ function isRangeValid(range) {
119
+ if (range.start.line < 0 || range.start.character < 0) {
120
+ return false;
121
+ }
122
+ if (range.end.line < 0 || range.end.character < 0) {
123
+ return false;
124
+ }
125
+ if (range.start.line > range.end.line) {
126
+ return false;
127
+ }
128
+ if (range.start.line === range.end.line && range.start.character > range.end.character) {
129
+ return false;
130
+ }
131
+ return true;
132
+ }
133
+ function getMatchingVariables(literal, cssVariableManager) {
134
+ return cssVariableManager.getVariablesByColor(literal.color, {
135
+ excludeName: literal.variableName,
136
+ });
137
+ }
138
+ function createColorReplacementCompletionItem(document, range, match, displayOptions) {
139
+ return {
140
+ label: `var(${match.name})`,
141
+ kind: node_1.CompletionItemKind.Variable,
142
+ detail: match.value,
143
+ documentation: `Defined in ${displayOptions.formatLocation(match.uri)}`,
144
+ textEdit: node_1.TextEdit.replace(range, `var(${match.name})`),
145
+ filterText: `var(${match.name})`,
146
+ sortText: match.name,
147
+ };
148
+ }
149
+ //# sourceMappingURL=colorVariableFeature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colorVariableFeature.js","sourceRoot":"","sources":["../src/colorVariableFeature.ts"],"names":[],"mappings":"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"}