agentlang 0.5.4 → 0.5.5
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 +29 -5
- package/out/language/parser.d.ts +2 -1
- package/out/language/parser.d.ts.map +1 -1
- package/out/language/parser.js +64 -18
- package/out/language/parser.js.map +1 -1
- package/out/runtime/defs.d.ts +3 -0
- package/out/runtime/defs.d.ts.map +1 -1
- package/out/runtime/defs.js +9 -0
- package/out/runtime/defs.js.map +1 -1
- package/out/runtime/exec-graph.d.ts.map +1 -1
- package/out/runtime/exec-graph.js +87 -37
- package/out/runtime/exec-graph.js.map +1 -1
- package/out/runtime/interpreter.d.ts +16 -0
- package/out/runtime/interpreter.d.ts.map +1 -1
- package/out/runtime/interpreter.js +163 -37
- package/out/runtime/interpreter.js.map +1 -1
- package/out/runtime/loader.d.ts.map +1 -1
- package/out/runtime/loader.js +11 -9
- package/out/runtime/loader.js.map +1 -1
- package/out/runtime/module.d.ts +3 -0
- package/out/runtime/module.d.ts.map +1 -1
- package/out/runtime/module.js +9 -0
- package/out/runtime/module.js.map +1 -1
- package/out/runtime/modules/ai.d.ts.map +1 -1
- package/out/runtime/modules/ai.js +28 -4
- package/out/runtime/modules/ai.js.map +1 -1
- package/out/runtime/modules/core.d.ts +5 -0
- package/out/runtime/modules/core.d.ts.map +1 -1
- package/out/runtime/modules/core.js +97 -0
- package/out/runtime/modules/core.js.map +1 -1
- package/out/runtime/monitor.d.ts +70 -0
- package/out/runtime/monitor.d.ts.map +1 -0
- package/out/runtime/monitor.js +330 -0
- package/out/runtime/monitor.js.map +1 -0
- package/out/runtime/state.d.ts +16 -0
- package/out/runtime/state.d.ts.map +1 -1
- package/out/runtime/state.js +16 -0
- package/out/runtime/state.js.map +1 -1
- package/out/runtime/util.d.ts +2 -0
- package/out/runtime/util.d.ts.map +1 -1
- package/out/runtime/util.js +10 -0
- package/out/runtime/util.js.map +1 -1
- package/out/utils/fs-utils.d.ts +1 -0
- package/out/utils/fs-utils.d.ts.map +1 -1
- package/out/utils/fs-utils.js +11 -1
- package/out/utils/fs-utils.js.map +1 -1
- package/package.json +185 -186
- package/src/language/parser.ts +68 -25
- package/src/runtime/defs.ts +12 -0
- package/src/runtime/exec-graph.ts +97 -36
- package/src/runtime/interpreter.ts +175 -40
- package/src/runtime/loader.ts +11 -8
- package/src/runtime/module.ts +12 -0
- package/src/runtime/modules/ai.ts +29 -6
- package/src/runtime/modules/core.ts +108 -0
- package/src/runtime/monitor.ts +369 -0
- package/src/runtime/state.ts +19 -0
- package/src/runtime/util.ts +12 -0
- package/src/utils/fs-utils.ts +11 -1
- package/out/setupClassic.d.ts +0 -98
- package/out/setupClassic.d.ts.map +0 -1
- package/out/setupClassic.js +0 -38
- package/out/setupClassic.js.map +0 -1
- package/out/setupCommon.d.ts +0 -2
- package/out/setupCommon.d.ts.map +0 -1
- package/out/setupCommon.js +0 -33
- package/out/setupCommon.js.map +0 -1
- package/out/setupExtended.d.ts +0 -40
- package/out/setupExtended.d.ts.map +0 -1
- package/out/setupExtended.js +0 -67
- package/out/setupExtended.js.map +0 -1
package/out/setupClassic.d.ts
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
export declare const setupConfigClassic: () => {
|
|
2
|
-
$type: string;
|
|
3
|
-
editorAppConfig: {
|
|
4
|
-
codeResources: {
|
|
5
|
-
modified: {
|
|
6
|
-
uri: string;
|
|
7
|
-
text: string;
|
|
8
|
-
};
|
|
9
|
-
};
|
|
10
|
-
useDiffEditor: boolean;
|
|
11
|
-
languageDef: {
|
|
12
|
-
languageExtensionConfig: {
|
|
13
|
-
id: string;
|
|
14
|
-
};
|
|
15
|
-
monarchLanguage: {
|
|
16
|
-
keywords: string[];
|
|
17
|
-
operators: string[];
|
|
18
|
-
symbols: RegExp;
|
|
19
|
-
tokenizer: {
|
|
20
|
-
initial: ({
|
|
21
|
-
regex: RegExp;
|
|
22
|
-
action: {
|
|
23
|
-
cases: {
|
|
24
|
-
'@keywords': {
|
|
25
|
-
token: string;
|
|
26
|
-
};
|
|
27
|
-
'@default': {
|
|
28
|
-
token: string;
|
|
29
|
-
};
|
|
30
|
-
'@operators'?: undefined;
|
|
31
|
-
};
|
|
32
|
-
token?: undefined;
|
|
33
|
-
};
|
|
34
|
-
include?: undefined;
|
|
35
|
-
} | {
|
|
36
|
-
regex: RegExp;
|
|
37
|
-
action: {
|
|
38
|
-
token: string;
|
|
39
|
-
cases?: undefined;
|
|
40
|
-
};
|
|
41
|
-
include?: undefined;
|
|
42
|
-
} | {
|
|
43
|
-
include: string;
|
|
44
|
-
regex?: undefined;
|
|
45
|
-
action?: undefined;
|
|
46
|
-
} | {
|
|
47
|
-
regex: RegExp;
|
|
48
|
-
action: {
|
|
49
|
-
cases: {
|
|
50
|
-
'@operators': {
|
|
51
|
-
token: string;
|
|
52
|
-
};
|
|
53
|
-
'@default': {
|
|
54
|
-
token: string;
|
|
55
|
-
};
|
|
56
|
-
'@keywords'?: undefined;
|
|
57
|
-
};
|
|
58
|
-
token?: undefined;
|
|
59
|
-
};
|
|
60
|
-
include?: undefined;
|
|
61
|
-
})[];
|
|
62
|
-
whitespace: ({
|
|
63
|
-
regex: RegExp;
|
|
64
|
-
action: {
|
|
65
|
-
token: string;
|
|
66
|
-
next?: undefined;
|
|
67
|
-
};
|
|
68
|
-
} | {
|
|
69
|
-
regex: RegExp;
|
|
70
|
-
action: {
|
|
71
|
-
token: string;
|
|
72
|
-
next: string;
|
|
73
|
-
};
|
|
74
|
-
})[];
|
|
75
|
-
comment: ({
|
|
76
|
-
regex: RegExp;
|
|
77
|
-
action: {
|
|
78
|
-
token: string;
|
|
79
|
-
next?: undefined;
|
|
80
|
-
};
|
|
81
|
-
} | {
|
|
82
|
-
regex: RegExp;
|
|
83
|
-
action: {
|
|
84
|
-
token: string;
|
|
85
|
-
next: string;
|
|
86
|
-
};
|
|
87
|
-
})[];
|
|
88
|
-
};
|
|
89
|
-
};
|
|
90
|
-
};
|
|
91
|
-
editorOptions: {
|
|
92
|
-
'semanticHighlighting.enabled': boolean;
|
|
93
|
-
theme: string;
|
|
94
|
-
};
|
|
95
|
-
};
|
|
96
|
-
};
|
|
97
|
-
export declare const executeClassic: (htmlElement: HTMLElement) => Promise<void>;
|
|
98
|
-
//# sourceMappingURL=setupClassic.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"setupClassic.d.ts","sourceRoot":"","sources":["../src/setupClassic.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqB9B,CAAC;AAEF,eAAO,MAAM,cAAc,GAAU,aAAa,WAAW,kBAgB5D,CAAC"}
|
package/out/setupClassic.js
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { MonacoEditorLanguageClientWrapper } from 'monaco-editor-wrapper';
|
|
2
|
-
import monarchSyntax from './syntaxes/agentlang.monarch.js';
|
|
3
|
-
export const setupConfigClassic = () => {
|
|
4
|
-
return {
|
|
5
|
-
$type: 'classic',
|
|
6
|
-
editorAppConfig: {
|
|
7
|
-
codeResources: {
|
|
8
|
-
modified: {
|
|
9
|
-
uri: '/workspace/example.al',
|
|
10
|
-
text: `// Agentlang is running in the web!`,
|
|
11
|
-
},
|
|
12
|
-
},
|
|
13
|
-
useDiffEditor: false,
|
|
14
|
-
languageDef: {
|
|
15
|
-
languageExtensionConfig: { id: 'agentlang' },
|
|
16
|
-
monarchLanguage: monarchSyntax,
|
|
17
|
-
},
|
|
18
|
-
editorOptions: {
|
|
19
|
-
'semanticHighlighting.enabled': true,
|
|
20
|
-
theme: 'vs-dark',
|
|
21
|
-
},
|
|
22
|
-
},
|
|
23
|
-
};
|
|
24
|
-
};
|
|
25
|
-
export const executeClassic = async (htmlElement) => {
|
|
26
|
-
try {
|
|
27
|
-
const config = setupConfigClassic();
|
|
28
|
-
const wrapper = new MonacoEditorLanguageClientWrapper();
|
|
29
|
-
// Add the HTML container to the config
|
|
30
|
-
const wrapperConfig = Object.assign(Object.assign({}, config), { htmlContainer: htmlElement });
|
|
31
|
-
// Initialize and start the wrapper
|
|
32
|
-
await wrapper.initAndStart(wrapperConfig);
|
|
33
|
-
}
|
|
34
|
-
catch (error) {
|
|
35
|
-
console.error('Error initializing monaco editor:', error);
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
//# sourceMappingURL=setupClassic.js.map
|
package/out/setupClassic.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"setupClassic.js","sourceRoot":"","sources":["../src/setupClassic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iCAAiC,EAAsB,MAAM,uBAAuB,CAAC;AAC9F,OAAO,aAAa,MAAM,iCAAiC,CAAC;AAE5D,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,EAAE;IACrC,OAAO;QACL,KAAK,EAAE,SAAS;QAChB,eAAe,EAAE;YACf,aAAa,EAAE;gBACb,QAAQ,EAAE;oBACR,GAAG,EAAE,uBAAuB;oBAC5B,IAAI,EAAE,qCAAqC;iBAC5C;aACF;YACD,aAAa,EAAE,KAAK;YACpB,WAAW,EAAE;gBACX,uBAAuB,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE;gBAC5C,eAAe,EAAE,aAAa;aAC/B;YACD,aAAa,EAAE;gBACb,8BAA8B,EAAE,IAAI;gBACpC,KAAK,EAAE,SAAS;aACjB;SACF;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,WAAwB,EAAE,EAAE;IAC/D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,iCAAiC,EAAE,CAAC;QAExD,uCAAuC;QACvC,MAAM,aAAa,GAAG,gCACjB,MAAM,KACT,aAAa,EAAE,WAAW,GACV,CAAC;QAEnB,mCAAmC;QACnC,MAAM,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC,CAAC"}
|
package/out/setupCommon.d.ts
DELETED
package/out/setupCommon.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"setupCommon.d.ts","sourceRoot":"","sources":["../src/setupCommon.ts"],"names":[],"mappings":""}
|
package/out/setupCommon.js
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
// This file is kept for reference but is not used directly anymore
|
|
2
|
-
// The monaco-editor-wrapper API has changed significantly in v6+
|
|
3
|
-
export {};
|
|
4
|
-
// These functions are kept for reference but not used directly anymore
|
|
5
|
-
/*
|
|
6
|
-
export const defineUserServices = () => {
|
|
7
|
-
return {
|
|
8
|
-
userServices: {
|
|
9
|
-
// This API has changed in the latest version
|
|
10
|
-
},
|
|
11
|
-
debugLogging: true,
|
|
12
|
-
};
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
export const configureMonacoWorkers = () => {
|
|
16
|
-
// This function is kept for compatibility, but implementation has changed
|
|
17
|
-
// Use configureDefaultWorkerFactory from monaco-editor-wrapper/workers/workerLoaders in newer code
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
export const configureWorker = () => {
|
|
21
|
-
// vite does not extract the worker properly if it is URL is a variable
|
|
22
|
-
const lsWorker = new Worker(new URL('./language/main-browser', import.meta.url), {
|
|
23
|
-
type: 'module',
|
|
24
|
-
name: 'Agentlang Language Server',
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
return {
|
|
28
|
-
type: 'WorkerDirect',
|
|
29
|
-
worker: lsWorker,
|
|
30
|
-
};
|
|
31
|
-
};
|
|
32
|
-
*/
|
|
33
|
-
//# sourceMappingURL=setupCommon.js.map
|
package/out/setupCommon.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"setupCommon.js","sourceRoot":"","sources":["../src/setupCommon.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,iEAAiE;;AAEjE,uEAAuE;AAEvE;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2BE"}
|
package/out/setupExtended.d.ts
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
export declare const setupConfigExtended: () => {
|
|
2
|
-
$type: string;
|
|
3
|
-
editorAppConfig: {
|
|
4
|
-
codeResources: {
|
|
5
|
-
modified: {
|
|
6
|
-
uri: string;
|
|
7
|
-
text: string;
|
|
8
|
-
};
|
|
9
|
-
};
|
|
10
|
-
useDiffEditor: boolean;
|
|
11
|
-
extensions: {
|
|
12
|
-
config: {
|
|
13
|
-
name: string;
|
|
14
|
-
publisher: string;
|
|
15
|
-
version: string;
|
|
16
|
-
engines: {
|
|
17
|
-
vscode: string;
|
|
18
|
-
};
|
|
19
|
-
contributes: {
|
|
20
|
-
languages: {
|
|
21
|
-
id: string;
|
|
22
|
-
extensions: string[];
|
|
23
|
-
configuration: string;
|
|
24
|
-
}[];
|
|
25
|
-
grammars: {
|
|
26
|
-
language: string;
|
|
27
|
-
scopeName: string;
|
|
28
|
-
path: string;
|
|
29
|
-
}[];
|
|
30
|
-
};
|
|
31
|
-
};
|
|
32
|
-
filesOrContents: Map<any, any>;
|
|
33
|
-
}[];
|
|
34
|
-
userConfiguration: {
|
|
35
|
-
json: string;
|
|
36
|
-
};
|
|
37
|
-
};
|
|
38
|
-
};
|
|
39
|
-
export declare const executeExtended: (htmlElement: HTMLElement) => Promise<void>;
|
|
40
|
-
//# sourceMappingURL=setupExtended.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"setupExtended.d.ts","sourceRoot":"","sources":["../src/setupExtended.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0D/B,CAAC;AAEF,eAAO,MAAM,eAAe,GAAU,aAAa,WAAW,kBAgB7D,CAAC"}
|
package/out/setupExtended.js
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { MonacoEditorLanguageClientWrapper } from 'monaco-editor-wrapper';
|
|
2
|
-
export const setupConfigExtended = () => {
|
|
3
|
-
const extensionFilesOrContents = new Map();
|
|
4
|
-
extensionFilesOrContents.set('/language-configuration.json', new URL('../language-configuration.json', import.meta.url));
|
|
5
|
-
extensionFilesOrContents.set('/agentlang-grammar.json', new URL('../syntaxes/agentlang.tmLanguage.json', import.meta.url));
|
|
6
|
-
return {
|
|
7
|
-
$type: 'extended',
|
|
8
|
-
editorAppConfig: {
|
|
9
|
-
codeResources: {
|
|
10
|
-
modified: {
|
|
11
|
-
uri: '/workspace/example.al',
|
|
12
|
-
text: `// Agentlang is running in the web!`,
|
|
13
|
-
},
|
|
14
|
-
},
|
|
15
|
-
useDiffEditor: false,
|
|
16
|
-
extensions: [
|
|
17
|
-
{
|
|
18
|
-
config: {
|
|
19
|
-
name: 'agentlang-web',
|
|
20
|
-
publisher: 'generator-langium',
|
|
21
|
-
version: '1.0.0',
|
|
22
|
-
engines: {
|
|
23
|
-
vscode: '*',
|
|
24
|
-
},
|
|
25
|
-
contributes: {
|
|
26
|
-
languages: [
|
|
27
|
-
{
|
|
28
|
-
id: 'agentlang',
|
|
29
|
-
extensions: ['.agentlang'],
|
|
30
|
-
configuration: './language-configuration.json',
|
|
31
|
-
},
|
|
32
|
-
],
|
|
33
|
-
grammars: [
|
|
34
|
-
{
|
|
35
|
-
language: 'agentlang',
|
|
36
|
-
scopeName: 'source.agentlang',
|
|
37
|
-
path: './agentlang-grammar.json',
|
|
38
|
-
},
|
|
39
|
-
],
|
|
40
|
-
},
|
|
41
|
-
},
|
|
42
|
-
filesOrContents: extensionFilesOrContents,
|
|
43
|
-
},
|
|
44
|
-
],
|
|
45
|
-
userConfiguration: {
|
|
46
|
-
json: JSON.stringify({
|
|
47
|
-
'workbench.colorTheme': 'Default Dark Modern',
|
|
48
|
-
'editor.semanticHighlighting.enabled': true,
|
|
49
|
-
}),
|
|
50
|
-
},
|
|
51
|
-
},
|
|
52
|
-
};
|
|
53
|
-
};
|
|
54
|
-
export const executeExtended = async (htmlElement) => {
|
|
55
|
-
try {
|
|
56
|
-
const config = setupConfigExtended();
|
|
57
|
-
const wrapper = new MonacoEditorLanguageClientWrapper();
|
|
58
|
-
// Add the HTML container to the config
|
|
59
|
-
const wrapperConfig = Object.assign(Object.assign({}, config), { htmlContainer: htmlElement });
|
|
60
|
-
// Initialize and start the wrapper
|
|
61
|
-
await wrapper.initAndStart(wrapperConfig);
|
|
62
|
-
}
|
|
63
|
-
catch (error) {
|
|
64
|
-
console.error('Error initializing monaco editor:', error);
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
//# sourceMappingURL=setupExtended.js.map
|
package/out/setupExtended.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"setupExtended.js","sourceRoot":"","sources":["../src/setupExtended.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iCAAiC,EAAsB,MAAM,uBAAuB,CAAC;AAE9F,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,EAAE;IACtC,MAAM,wBAAwB,GAAG,IAAI,GAAG,EAAE,CAAC;IAC3C,wBAAwB,CAAC,GAAG,CAC1B,8BAA8B,EAC9B,IAAI,GAAG,CAAC,gCAAgC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAC3D,CAAC;IACF,wBAAwB,CAAC,GAAG,CAC1B,yBAAyB,EACzB,IAAI,GAAG,CAAC,uCAAuC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAClE,CAAC;IAEF,OAAO;QACL,KAAK,EAAE,UAAU;QACjB,eAAe,EAAE;YACf,aAAa,EAAE;gBACb,QAAQ,EAAE;oBACR,GAAG,EAAE,uBAAuB;oBAC5B,IAAI,EAAE,qCAAqC;iBAC5C;aACF;YACD,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE;gBACV;oBACE,MAAM,EAAE;wBACN,IAAI,EAAE,eAAe;wBACrB,SAAS,EAAE,mBAAmB;wBAC9B,OAAO,EAAE,OAAO;wBAChB,OAAO,EAAE;4BACP,MAAM,EAAE,GAAG;yBACZ;wBACD,WAAW,EAAE;4BACX,SAAS,EAAE;gCACT;oCACE,EAAE,EAAE,WAAW;oCACf,UAAU,EAAE,CAAC,YAAY,CAAC;oCAC1B,aAAa,EAAE,+BAA+B;iCAC/C;6BACF;4BACD,QAAQ,EAAE;gCACR;oCACE,QAAQ,EAAE,WAAW;oCACrB,SAAS,EAAE,kBAAkB;oCAC7B,IAAI,EAAE,0BAA0B;iCACjC;6BACF;yBACF;qBACF;oBACD,eAAe,EAAE,wBAAwB;iBAC1C;aACF;YACD,iBAAiB,EAAE;gBACjB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,sBAAsB,EAAE,qBAAqB;oBAC7C,qCAAqC,EAAE,IAAI;iBAC5C,CAAC;aACH;SACF;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,WAAwB,EAAE,EAAE;IAChE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,iCAAiC,EAAE,CAAC;QAExD,uCAAuC;QACvC,MAAM,aAAa,GAAG,gCACjB,MAAM,KACT,aAAa,EAAE,WAAW,GACV,CAAC;QAEnB,mCAAmC;QACnC,MAAM,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC,CAAC"}
|