myanmar-nrc-validator 1.0.12 โ 1.0.14
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 +82 -12
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/utils/parser.d.ts +5 -0
- package/dist/utils/parser.d.ts.map +1 -1
- package/dist/utils/parser.js +15 -0
- package/dist/utils/parser.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,17 +3,19 @@
|
|
|
3
3
|
|
|
4
4
|
# myanmar-nrc-validator ๐ฒ๐ฒ
|
|
5
5
|
|
|
6
|
-
A
|
|
6
|
+
A comprehensive, robust, and zero-dependency (except Zod) TypeScript/JavaScript library for validating, parsing, formatting, and handling Myanmar National Registration Card (NRC) numbers, state regions, and citizen types. Supports both English and Myanmar text formats, along with a powerful CLI tool.
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
## Features โจ
|
|
11
11
|
|
|
12
|
-
* **Validation**: Accurately validates Myanmar NRC numbers
|
|
13
|
-
* **Parsing**: Extracts structured data (State, Township, Citizen Type, and Numbers) from NRC strings.
|
|
14
|
-
* **Formatting**:
|
|
12
|
+
* **Validation**: Accurately validates complete Myanmar NRC numbers, state codes, and township codes.
|
|
13
|
+
* **Parsing**: Extracts structured data (State Number, Township Code, Citizen Type, and ID Numbers) from NRC strings.
|
|
14
|
+
* **Formatting**: Seamlessly converts NRC strings between Myanmar script and English format (`en` / `mm`).
|
|
15
|
+
* **Citizen Types & Regions**: Built-in utilities to retrieve Myanmar states, townships, and citizen types (`getStates`, `getStateTownships`, `getCitizenTypes`, etc.).
|
|
16
|
+
* **Composition**: Easily construct/compose valid NRC strings using `composeNRC`.
|
|
15
17
|
* **Zod Integration**: Provides built-in Zod schemas for form validation (e.g., in Express, NestJS, or React forms).
|
|
16
|
-
* **CLI Support**: Quickly check NRC numbers straight from your terminal
|
|
18
|
+
* **CLI Support**: Quickly check and parse NRC numbers straight from your terminal using `npx myanmar-nrc-validator` or `npx nrc`.
|
|
17
19
|
|
|
18
20
|
---
|
|
19
21
|
|
|
@@ -30,7 +32,7 @@ npm install myanmar-nrc-validator
|
|
|
30
32
|
|
|
31
33
|
## CLI Usage ๐ป
|
|
32
34
|
|
|
33
|
-
You can test or
|
|
35
|
+
You can test, validate, or parse NRC numbers directly from your terminal using `npx`:
|
|
34
36
|
|
|
35
37
|
```bash
|
|
36
38
|
npx myanmar-nrc-validator "12/UKAMA(N)123456"
|
|
@@ -39,7 +41,7 @@ npx myanmar-nrc-validator "12/UKAMA(N)123456"
|
|
|
39
41
|
|
|
40
42
|
|
|
41
43
|
```bash
|
|
42
|
-
npx
|
|
44
|
+
npx nrc "แแ/แฅแแ(แแญแฏแแบ)แแแแแ
แ"
|
|
43
45
|
|
|
44
46
|
```
|
|
45
47
|
|
|
@@ -60,12 +62,12 @@ console.log(validateNRC("99/XYZ(N)123456")); // false (Invalid state/township)
|
|
|
60
62
|
|
|
61
63
|
```
|
|
62
64
|
|
|
63
|
-
### 2. Parse NRC (`parseNRC`)
|
|
65
|
+
### 2. Parse NRC & Get Citizen Type (`parseNRC`, `getCitizenType`)
|
|
64
66
|
|
|
65
|
-
Extracts detailed information from an NRC string.
|
|
67
|
+
Extracts detailed information and citizen types from an NRC string.
|
|
66
68
|
|
|
67
69
|
```typescript
|
|
68
|
-
import { parseNRC } from "myanmar-nrc-validator";
|
|
70
|
+
import { parseNRC, getCitizenType } from "myanmar-nrc-validator";
|
|
69
71
|
|
|
70
72
|
const result = parseNRC("แแ/แฅแแ(แแญแฏแแบ)แแแแแ
แ");
|
|
71
73
|
console.log(result);
|
|
@@ -79,6 +81,9 @@ Output:
|
|
|
79
81
|
}
|
|
80
82
|
*/
|
|
81
83
|
|
|
84
|
+
const citizenType = getCitizenType("12/UKAMA(N)123456");
|
|
85
|
+
console.log(citizenType); // แแญแฏแแบ (or N based on input)
|
|
86
|
+
|
|
82
87
|
```
|
|
83
88
|
|
|
84
89
|
### 3. Format NRC (`formatNRC`)
|
|
@@ -98,7 +103,68 @@ console.log(formatNRC("12/UKAMA(N)123456", "mm"));
|
|
|
98
103
|
|
|
99
104
|
```
|
|
100
105
|
|
|
101
|
-
### 4.
|
|
106
|
+
### 4. Regions and Citizen Types Helpers (`getStates`, `getStateTownships`, `getCitizenTypes`)
|
|
107
|
+
|
|
108
|
+
Quickly access states, corresponding townships, and valid citizen categories.
|
|
109
|
+
|
|
110
|
+
```typescript
|
|
111
|
+
import { getStates, getStateTownships, getCitizenTypes } from "myanmar-nrc-validator";
|
|
112
|
+
|
|
113
|
+
// Get all 14 states & regions
|
|
114
|
+
console.log(getStates());
|
|
115
|
+
|
|
116
|
+
// Get townships for a specific state (e.g., Yangon -> "12")
|
|
117
|
+
console.log(getStateTownships("12"));
|
|
118
|
+
|
|
119
|
+
// Get all available citizen types (แแญแฏแแบ, แงแแทแบ, แแผแฏ, etc.)
|
|
120
|
+
console.log(getCitizenTypes());
|
|
121
|
+
|
|
122
|
+
### Get Citizen Type(s) (`getCitizenType`)
|
|
123
|
+
This function is polymorphic (flexible):
|
|
124
|
+
- Pass an NRC string to extract its specific citizen type.
|
|
125
|
+
- Call it **without arguments** to get the full list of all available citizen types.
|
|
126
|
+
|
|
127
|
+
```typescript
|
|
128
|
+
import { getCitizenType } from "myanmar-nrc-validator";
|
|
129
|
+
|
|
130
|
+
// 1. Extract citizen type from an NRC string
|
|
131
|
+
const citizenType = getCitizenType("12/UKAMA(N)123456");
|
|
132
|
+
console.log(citizenType); // แแญแฏแแบ (or N)
|
|
133
|
+
|
|
134
|
+
// 2. Get all available citizen types (get all)
|
|
135
|
+
const allCitizenTypes = getCitizenType();
|
|
136
|
+
console.log(allCitizenTypes);
|
|
137
|
+
/*
|
|
138
|
+
Output:
|
|
139
|
+
[
|
|
140
|
+
{ code: "N", en: "Citizen", mm: "แแญแฏแแบ" },
|
|
141
|
+
{ code: "E", en: "Associate Citizen", mm: "แงแแทแบ" },
|
|
142
|
+
{ code: "P", en: "Naturalized Citizen", mm: "แแผแฏ" },
|
|
143
|
+
...
|
|
144
|
+
]
|
|
145
|
+
*/
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### 5. Compose NRC (`composeNRC`)
|
|
150
|
+
|
|
151
|
+
Build an NRC string programmatically from parts.
|
|
152
|
+
|
|
153
|
+
```typescript
|
|
154
|
+
import { composeNRC } from "myanmar-nrc-validator";
|
|
155
|
+
|
|
156
|
+
const nrc = composeNRC({
|
|
157
|
+
stateNumber: "12",
|
|
158
|
+
townshipCode: "แฅแแ",
|
|
159
|
+
citizenType: "แแญแฏแแบ",
|
|
160
|
+
number: "123456",
|
|
161
|
+
format: "mm"
|
|
162
|
+
});
|
|
163
|
+
console.log(nrc); // แแ/แฅแแ(แแญแฏแแบ)แแแแแ
แ
|
|
164
|
+
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### 6. Zod Schema Validation (`nrcStringSchema`)
|
|
102
168
|
|
|
103
169
|
Useful for API validation (e.g., with Zod, NestJS, Express, or React Hook Form).
|
|
104
170
|
|
|
@@ -119,4 +185,8 @@ if (validationResult.success) {
|
|
|
119
185
|
|
|
120
186
|
## License ๐
|
|
121
187
|
|
|
122
|
-
[MIT](https://www.google.com/search?q=LICENSE) ยฉ Aung Phyo Khant
|
|
188
|
+
[MIT](https://www.google.com/search?q=LICENSE) ยฉ Aung Phyo Khant
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
แแฎ `README.md` แแญแฏแแบแแฑแธแแญแฏ แแแทแบ project แแฒแ README.md แแฒแแพแฌ แแฐแธแแแทแบแแญแฏแแบแแญแฏแท แแแซแแผแฎ แแแบแแปแฌแ แกแฌแธแแฏแถแธแกแแแบแแผแฑแแฝแฌแธแแซแแผแฎแแฑแฌแบ!
|
package/dist/index.d.ts
CHANGED
|
@@ -6,8 +6,13 @@ export declare const CITIZENSHIP_TYPES: Record<string, {
|
|
|
6
6
|
en: string;
|
|
7
7
|
mm: string;
|
|
8
8
|
}>;
|
|
9
|
+
export declare function getCitizenTypes(): {
|
|
10
|
+
code: string;
|
|
11
|
+
en: string;
|
|
12
|
+
mm: string;
|
|
13
|
+
}[];
|
|
9
14
|
export { validateNRC, isValidTownship } from "./utils/validator.js";
|
|
10
|
-
export { parseNRC } from "./utils/parser.js";
|
|
15
|
+
export { parseNRC, getCitizenType } from "./utils/parser.js";
|
|
11
16
|
export type { ParsedNRC } from "./utils/parser.js";
|
|
12
17
|
export { composeNRC } from "./utils/composer.js";
|
|
13
18
|
export type { ComposeOptions, CitizenType } from "./utils/composer.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,EAAiB,MAAM,CAC/C,MAAM,EACN;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAC3B,CAAC;AACF,eAAO,MAAM,iBAAiB,EAAkC,MAAM,CACpE,MAAM,EACN;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAC3B,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,EAAiB,MAAM,CAC/C,MAAM,EACN;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAC3B,CAAC;AACF,eAAO,MAAM,iBAAiB,EAAkC,MAAM,CACpE,MAAM,EACN;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAC3B,CAAC;AAEF,wBAAgB,eAAe;;;;IAM9B;AAED,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC7D,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,8 +2,15 @@ import statesData from "./data/states.json" with { type: "json" };
|
|
|
2
2
|
import citizenTypesData from "./data/citizen-types.json" with { type: "json" };
|
|
3
3
|
export const STATE_REGIONS = statesData;
|
|
4
4
|
export const CITIZENSHIP_TYPES = citizenTypesData;
|
|
5
|
+
export function getCitizenTypes() {
|
|
6
|
+
return Object.entries(CITIZENSHIP_TYPES).map(([code, info]) => ({
|
|
7
|
+
code,
|
|
8
|
+
en: info.en,
|
|
9
|
+
mm: info.mm,
|
|
10
|
+
}));
|
|
11
|
+
}
|
|
5
12
|
export { validateNRC, isValidTownship } from "./utils/validator.js";
|
|
6
|
-
export { parseNRC } from "./utils/parser.js";
|
|
13
|
+
export { parseNRC, getCitizenType } from "./utils/parser.js";
|
|
7
14
|
export { composeNRC } from "./utils/composer.js";
|
|
8
15
|
export { getStates, getStateTownships } from "./utils/regions.js";
|
|
9
16
|
export { formatNRC } from "./utils/formatter.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,oBAAoB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAClE,OAAO,gBAAgB,MAAM,2BAA2B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAE/E,MAAM,CAAC,MAAM,aAAa,GAAG,UAG5B,CAAC;AACF,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAGhC,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,oBAAoB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAClE,OAAO,gBAAgB,MAAM,2BAA2B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAE/E,MAAM,CAAC,MAAM,aAAa,GAAG,UAG5B,CAAC;AACF,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAGhC,CAAC;AAEF,MAAM,UAAU,eAAe;IAC7B,OAAO,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9D,IAAI;QACJ,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,EAAE,EAAE,IAAI,CAAC,EAAE;KACZ,CAAC,CAAC,CAAC;AACN,CAAC;AAED,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE7D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/utils/parser.d.ts
CHANGED
|
@@ -8,4 +8,9 @@ export interface ParsedNRC {
|
|
|
8
8
|
raw: string;
|
|
9
9
|
}
|
|
10
10
|
export declare function parseNRC(nrcString: string): ParsedNRC | null;
|
|
11
|
+
export declare function getCitizenType(nrcString?: string): string | null | Array<{
|
|
12
|
+
code: string;
|
|
13
|
+
en: string;
|
|
14
|
+
mm: string;
|
|
15
|
+
}>;
|
|
11
16
|
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/utils/parser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/utils/parser.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAuC5D;AAED,wBAAgB,cAAc,CAC5B,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAgBjE"}
|
package/dist/utils/parser.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import statesData from "../data/states.json" with { type: "json" };
|
|
2
2
|
import { validateNRC, isValidTownship, normalizeDigits } from "./validator.js";
|
|
3
|
+
import citizenTypesData from "../data/citizen-types.json" with { type: "json" };
|
|
3
4
|
const STATE_REGIONS = statesData;
|
|
4
5
|
export function parseNRC(nrcString) {
|
|
5
6
|
if (!nrcString || typeof nrcString !== "string") {
|
|
@@ -32,4 +33,18 @@ export function parseNRC(nrcString) {
|
|
|
32
33
|
raw: nrcString.trim(),
|
|
33
34
|
};
|
|
34
35
|
}
|
|
36
|
+
export function getCitizenType(nrcString) {
|
|
37
|
+
if (!nrcString || typeof nrcString !== "string" || nrcString.trim() === "") {
|
|
38
|
+
return Object.entries(citizenTypesData).map(([code, info]) => ({
|
|
39
|
+
code,
|
|
40
|
+
en: info.en,
|
|
41
|
+
mm: info.mm,
|
|
42
|
+
}));
|
|
43
|
+
}
|
|
44
|
+
const match = nrcString.match(/\(([^)]+)\)/);
|
|
45
|
+
if (match && match[1]) {
|
|
46
|
+
return match[1].trim();
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
35
50
|
//# sourceMappingURL=parser.js.map
|
package/dist/utils/parser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/utils/parser.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,qBAAqB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/utils/parser.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,qBAAqB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,gBAAgB,MAAM,4BAA4B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAEhF,MAAM,aAAa,GAAG,UAAwD,CAAC;AAY/E,MAAM,UAAU,QAAQ,CAAC,SAAiB;IACxC,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,eAAe,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAErD,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GACT,iEAAiE,CAAC;IACpE,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEtC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,SAAS,GAAW,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACxC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAExB,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAEjE,OAAO;QACL,SAAS;QACT,WAAW,EAAE,SAAS,CAAC,EAAE;QACzB,WAAW,EAAE,SAAS,CAAC,EAAE;QACzB,QAAQ;QACR,IAAI;QACJ,MAAM;QACN,GAAG,EAAE,SAAS,CAAC,IAAI,EAAE;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,SAAkB;IAElB,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3E,OAAO,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,GAAG,CACzC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAgB,EAAE,EAAE,CAAC,CAAC;YAChC,IAAI;YACJ,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,EAAE,EAAE,IAAI,CAAC,EAAE;SACZ,CAAC,CACH,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC7C,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|