eslint-plugin-formatjs 4.10.5 → 4.11.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/package.json +7 -7
- package/rules/blocklist-elements.js +1 -1
- package/rules/enforce-id.js +1 -1
- package/rules/enforce-placeholders.js +2 -4
- package/rules/enforce-plural-rules.js +1 -1
- package/rules/no-complex-selectors.js +1 -1
- package/rules/no-emoji.js +1 -1
- package/rules/no-literal-string-in-jsx.js +4 -4
- package/rules/no-multiple-plurals.js +1 -1
- package/rules/no-offset.js +1 -1
- package/rules/prefer-pound-in-plural.js +1 -1
- package/util.d.ts +2 -2
- package/index.d.ts.map +0 -1
- package/rules/blocklist-elements.d.ts.map +0 -1
- package/rules/enforce-default-message.d.ts.map +0 -1
- package/rules/enforce-description.d.ts.map +0 -1
- package/rules/enforce-id.d.ts.map +0 -1
- package/rules/enforce-placeholders.d.ts.map +0 -1
- package/rules/enforce-plural-rules.d.ts.map +0 -1
- package/rules/no-camel-case.d.ts.map +0 -1
- package/rules/no-complex-selectors.d.ts.map +0 -1
- package/rules/no-emoji.d.ts.map +0 -1
- package/rules/no-id.d.ts.map +0 -1
- package/rules/no-invalid-icu.d.ts.map +0 -1
- package/rules/no-literal-string-in-jsx.d.ts.map +0 -1
- package/rules/no-multiple-plurals.d.ts.map +0 -1
- package/rules/no-multiple-whitespaces.d.ts.map +0 -1
- package/rules/no-offset.d.ts.map +0 -1
- package/rules/no-useless-message.d.ts.map +0 -1
- package/rules/prefer-formatted-message.d.ts.map +0 -1
- package/rules/prefer-pound-in-plural.d.ts.map +0 -1
- package/util.d.ts.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eslint-plugin-formatjs",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.11.1",
|
|
4
4
|
"description": "ESLint plugin for formatjs",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"repository": {
|
|
@@ -20,17 +20,17 @@
|
|
|
20
20
|
},
|
|
21
21
|
"homepage": "https://github.com/formatjs/formatjs#readme",
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@formatjs/icu-messageformat-parser": "2.6.2",
|
|
24
|
-
"@formatjs/ts-transformer": "3.13.5",
|
|
25
23
|
"@types/eslint": "7 || 8",
|
|
26
24
|
"@types/picomatch": "^2.3.0",
|
|
27
|
-
"@typescript-eslint/
|
|
25
|
+
"@typescript-eslint/utils": "^6.5.0",
|
|
28
26
|
"emoji-regex": "^10.2.1",
|
|
29
27
|
"magic-string": "^0.30.0",
|
|
30
28
|
"picomatch": "^2.3.1",
|
|
31
|
-
"tslib": "2.6.
|
|
32
|
-
"typescript": "
|
|
33
|
-
"unicode-emoji-utils": "^1.1.1"
|
|
29
|
+
"tslib": "2.6.2",
|
|
30
|
+
"typescript": "5",
|
|
31
|
+
"unicode-emoji-utils": "^1.1.1",
|
|
32
|
+
"@formatjs/icu-messageformat-parser": "2.7.1",
|
|
33
|
+
"@formatjs/ts-transformer": "3.13.7"
|
|
34
34
|
},
|
|
35
35
|
"peerDependencies": {
|
|
36
36
|
"eslint": "7 || 8"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const util_1 = require("../util");
|
|
4
3
|
const icu_messageformat_parser_1 = require("@formatjs/icu-messageformat-parser");
|
|
4
|
+
const util_1 = require("../util");
|
|
5
5
|
class BlacklistElement extends Error {
|
|
6
6
|
constructor(type) {
|
|
7
7
|
super();
|
package/rules/enforce-id.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const util_1 = require("../util");
|
|
4
3
|
const ts_transformer_1 = require("@formatjs/ts-transformer");
|
|
4
|
+
const util_1 = require("../util");
|
|
5
5
|
function checkNode(context, node, { idInterpolationPattern, idWhitelistRegexps }) {
|
|
6
6
|
const msgs = (0, util_1.extractMessages)(node, (0, util_1.getSettings)(context));
|
|
7
7
|
for (const [{ message: { defaultMessage, description, id }, idPropNode, descriptionNode, messagePropNode, },] of msgs) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const util_1 = require("../util");
|
|
4
3
|
const icu_messageformat_parser_1 = require("@formatjs/icu-messageformat-parser");
|
|
4
|
+
const util_1 = require("../util");
|
|
5
5
|
function collectPlaceholderNames(ast) {
|
|
6
6
|
const placeholderNames = new Set();
|
|
7
7
|
_traverse(ast);
|
|
@@ -53,9 +53,7 @@ function checkNode(context, node) {
|
|
|
53
53
|
const literalElementByLiteralKey = new Map();
|
|
54
54
|
if (values) {
|
|
55
55
|
for (const prop of values.properties) {
|
|
56
|
-
if (
|
|
57
|
-
!prop.computed &&
|
|
58
|
-
prop.key.type !== 'PrivateIdentifier') {
|
|
56
|
+
if (prop.type === 'Property' && !prop.computed) {
|
|
59
57
|
const name = prop.key.type === 'Identifier'
|
|
60
58
|
? prop.key.name
|
|
61
59
|
: String(prop.key.value);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const util_1 = require("../util");
|
|
4
3
|
const icu_messageformat_parser_1 = require("@formatjs/icu-messageformat-parser");
|
|
4
|
+
const util_1 = require("../util");
|
|
5
5
|
class PluralRulesEnforcement extends Error {
|
|
6
6
|
constructor(message) {
|
|
7
7
|
super();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const util_1 = require("../util");
|
|
4
3
|
const icu_messageformat_parser_1 = require("@formatjs/icu-messageformat-parser");
|
|
4
|
+
const util_1 = require("../util");
|
|
5
5
|
function calculateComplexity(ast) {
|
|
6
6
|
// Dynamic programming: define a complexity function f, where:
|
|
7
7
|
// f(plural | select) = sum(f(option) for each option) * f(next element),
|
package/rules/no-emoji.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const util_1 = require("../util");
|
|
4
3
|
const unicode_emoji_utils_1 = require("unicode-emoji-utils");
|
|
4
|
+
const util_1 = require("../util");
|
|
5
5
|
function checkNode(context, node) {
|
|
6
6
|
const msgs = (0, util_1.extractMessages)(node, (0, util_1.getSettings)(context));
|
|
7
7
|
let allowedEmojis = [];
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
|
+
const utils_1 = require("@typescript-eslint/utils");
|
|
4
5
|
const picomatch_1 = tslib_1.__importDefault(require("picomatch"));
|
|
5
|
-
const typescript_estree_1 = require("@typescript-eslint/typescript-estree");
|
|
6
6
|
const propMatcherSchema = {
|
|
7
7
|
type: 'array',
|
|
8
8
|
items: {
|
|
@@ -18,11 +18,11 @@ const defaultPropIncludePattern = [
|
|
|
18
18
|
const defaultPropExcludePattern = [];
|
|
19
19
|
function stringifyJsxTagName(tagName) {
|
|
20
20
|
switch (tagName.type) {
|
|
21
|
-
case
|
|
21
|
+
case utils_1.TSESTree.AST_NODE_TYPES.JSXIdentifier:
|
|
22
22
|
return tagName.name;
|
|
23
|
-
case
|
|
23
|
+
case utils_1.TSESTree.AST_NODE_TYPES.JSXMemberExpression:
|
|
24
24
|
return `${stringifyJsxTagName(tagName.object)}.${tagName.property.name}`;
|
|
25
|
-
case
|
|
25
|
+
case utils_1.TSESTree.AST_NODE_TYPES.JSXNamespacedName:
|
|
26
26
|
return `${tagName.namespace.name}:${tagName.name.name}`;
|
|
27
27
|
}
|
|
28
28
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const util_1 = require("../util");
|
|
4
3
|
const icu_messageformat_parser_1 = require("@formatjs/icu-messageformat-parser");
|
|
4
|
+
const util_1 = require("../util");
|
|
5
5
|
class MultiplePlurals extends Error {
|
|
6
6
|
constructor() {
|
|
7
7
|
super(...arguments);
|
package/rules/no-offset.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const util_1 = require("../util");
|
|
4
3
|
const icu_messageformat_parser_1 = require("@formatjs/icu-messageformat-parser");
|
|
4
|
+
const util_1 = require("../util");
|
|
5
5
|
class NoOffsetError extends Error {
|
|
6
6
|
constructor() {
|
|
7
7
|
super(...arguments);
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
4
|
const icu_messageformat_parser_1 = require("@formatjs/icu-messageformat-parser");
|
|
5
|
-
const util_1 = require("../util");
|
|
6
5
|
const magic_string_1 = tslib_1.__importDefault(require("magic-string"));
|
|
6
|
+
const util_1 = require("../util");
|
|
7
7
|
function verifyAst(context, messageNode, ast) {
|
|
8
8
|
const patches = [];
|
|
9
9
|
_verifyAst(ast);
|
package/util.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Rule } from 'eslint';
|
|
2
|
-
import { TSESTree } from '@typescript-eslint/typescript-estree';
|
|
3
1
|
import { MessageFormatElement } from '@formatjs/icu-messageformat-parser';
|
|
2
|
+
import { TSESTree } from '@typescript-eslint/utils';
|
|
3
|
+
import { Rule } from 'eslint';
|
|
4
4
|
export interface MessageDescriptor {
|
|
5
5
|
id?: string;
|
|
6
6
|
defaultMessage?: string;
|
package/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAmBA,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;CAqBX,CAAA;AAED,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"blocklist-elements.d.ts","sourceRoot":"","sources":["../rules/blocklist-elements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAA;AAmH3B,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,UAyChB,CAAA;AAED,eAAe,IAAI,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"enforce-default-message.d.ts","sourceRoot":"","sources":["../rules/enforce-default-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAA;AAiC3B,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,UAmChB,CAAA;AAED,eAAe,IAAI,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"enforce-description.d.ts","sourceRoot":"","sources":["../rules/enforce-description.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAA;;AAgC3B,wBAmCoB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"enforce-id.d.ts","sourceRoot":"","sources":["../rules/enforce-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAA;;AA0G3B,wBAgEoB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"enforce-placeholders.d.ts","sourceRoot":"","sources":["../rules/enforce-placeholders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAA;AAoI3B,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,UA4ChB,CAAA;AAED,eAAe,IAAI,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"enforce-plural-rules.d.ts","sourceRoot":"","sources":["../rules/enforce-plural-rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAA;AAqF3B,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,UA8ChB,CAAA;AAED,eAAe,IAAI,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"no-camel-case.d.ts","sourceRoot":"","sources":["../rules/no-camel-case.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAA;AAgE3B,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,UA8BhB,CAAA;AAED,eAAe,IAAI,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"no-complex-selectors.d.ts","sourceRoot":"","sources":["../rules/no-complex-selectors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAA;AAgH3B,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,UAiDhB,CAAA;AAED,eAAe,IAAI,CAAA"}
|
package/rules/no-emoji.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"no-emoji.d.ts","sourceRoot":"","sources":["../rules/no-emoji.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAA;AA+E3B,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,UA0ChB,CAAA;AAED,eAAe,IAAI,CAAA"}
|
package/rules/no-id.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"no-id.d.ts","sourceRoot":"","sources":["../rules/no-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAa,MAAM,QAAQ,CAAA;;AAgCvC,wBA8BoB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"no-invalid-icu.d.ts","sourceRoot":"","sources":["../rules/no-invalid-icu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAA;AAqC3B,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,UA6BhB,CAAA;AAED,eAAe,IAAI,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"no-literal-string-in-jsx.d.ts","sourceRoot":"","sources":["../rules/no-literal-string-in-jsx.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAA;AAqDhC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,UA0KhB,CAAA;AAED,eAAe,IAAI,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"no-multiple-plurals.d.ts","sourceRoot":"","sources":["../rules/no-multiple-plurals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAA;AAwD3B,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,UA8BhB,CAAA;AAED,eAAe,IAAI,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"no-multiple-whitespaces.d.ts","sourceRoot":"","sources":["../rules/no-multiple-whitespaces.ts"],"names":[],"mappings":"AAOA,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAA;AAiI3B,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,UAkChB,CAAA;AAED,eAAe,IAAI,CAAA"}
|
package/rules/no-offset.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"no-offset.d.ts","sourceRoot":"","sources":["../rules/no-offset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAA;AAuD3B,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,UA8BhB,CAAA;AAED,eAAe,IAAI,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"no-useless-message.d.ts","sourceRoot":"","sources":["../rules/no-useless-message.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAA;AAmE3B,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,UA6BhB,CAAA;AAED,eAAe,IAAI,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prefer-formatted-message.d.ts","sourceRoot":"","sources":["../rules/prefer-formatted-message.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAA;AAIhC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,UAiChB,CAAA;AAED,eAAe,IAAI,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prefer-pound-in-plural.d.ts","sourceRoot":"","sources":["../rules/prefer-pound-in-plural.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAA;AA6MhC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,UAmChB,CAAA;AAED,eAAe,IAAI,CAAA"}
|
package/util.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAA;AAC3B,OAAO,EAAC,QAAQ,EAAC,MAAM,sCAAsC,CAAA;AAC7D,OAAO,EAAC,oBAAoB,EAAC,MAAM,oCAAoC,CAAA;AAEvE,MAAM,WAAW,iBAAiB;IAChC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAC9B;AAMD,MAAM,WAAW,QAAQ;IACvB,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAA;IAClC,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAA;IACnC,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AACD,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,iBAAiB,CAAA;IAC1B,WAAW,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IACzE,eAAe,CAAC,EAAE,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAA;IAC3D,eAAe,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IAC7E,WAAW,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IACzE,UAAU,CAAC,EAAE,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAA;CACvD;AAED,wBAAgB,WAAW,CAAC,EAAC,QAAQ,EAAC,EAAE,IAAI,CAAC,WAAW,GAAG,QAAQ,CAElE;AA8BD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,QAAQ,CAAC,IAAI,GAClB,IAAI,IAAI,QAAQ,CAAC,cAAc,CAWjC;AAqBD,wBAAgB,wBAAwB,CACtC,IAAI,CAAC,EAAE,QAAQ,CAAC,UAAU,GACzB,yBAAyB,GAAG,SAAS,CA8CvC;AA8GD,wBAAgB,eAAe,CAC7B,IAAI,EAAE,QAAQ,CAAC,IAAI,EACnB,EACE,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,GACxB,GAAE,QAAa,GACf,KAAK,CAAC,CAAC,yBAAyB,EAAE,QAAQ,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC,CAiDrE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,WAAW,EAAE,QAAQ,CAAC,IAAI,EAC1B,GAAG,EAAE,oBAAoB,EAAE,EAC3B,OAAO,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,oBAAoB,EAAE,KAAK,MAAM,GACvE,MAAM,GAAG,IAAI,CAwBf"}
|