@prisma-psm/pg 1.0.5 → 1.0.7

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.
Files changed (64) hide show
  1. package/.idea/vcs.xml +1 -0
  2. package/package.json +1 -1
  3. package/src/index.js +15 -6
  4. package/src/index.ts +22 -10
  5. package/src/migration/index.d.ts +2 -1
  6. package/src/migration/index.d.ts.map +1 -1
  7. package/src/migration/index.js +39 -0
  8. package/src/migration/index.js.map +1 -1
  9. package/src/migration/index.ts +43 -1
  10. package/src/parser/backup/engine.d.ts +4 -1
  11. package/src/parser/backup/engine.d.ts.map +1 -1
  12. package/src/parser/backup/engine.js +53 -33
  13. package/src/parser/backup/engine.js.map +1 -1
  14. package/src/parser/backup/engine.ts +58 -33
  15. package/src/parser/backup/index.d.ts +4 -1
  16. package/src/parser/backup/index.d.ts.map +1 -1
  17. package/src/parser/def.d.ts +5 -3
  18. package/src/parser/def.d.ts.map +1 -1
  19. package/src/parser/def.ts +9 -2
  20. package/src/parser/modelParser.d.ts +4 -1
  21. package/src/parser/modelParser.d.ts.map +1 -1
  22. package/src/parser/notice.js +1 -1
  23. package/src/parser/notice.ts +2 -2
  24. package/src/parser/parser.d.ts +6 -1
  25. package/src/parser/parser.d.ts.map +1 -1
  26. package/src/parser/parser.js +16 -16
  27. package/src/parser/parser.js.map +1 -1
  28. package/src/parser/parser.ts +31 -18
  29. package/src/parser/schama.d.ts +3 -0
  30. package/src/parser/schama.d.ts.map +1 -0
  31. package/src/parser/schama.js +16 -0
  32. package/src/parser/schama.js.map +1 -0
  33. package/src/parser/schama.ts +14 -0
  34. package/src/parser/sql.d.ts +4 -1
  35. package/src/parser/sql.d.ts.map +1 -1
  36. package/src/parser/sql.js +47 -20
  37. package/src/parser/sql.js.map +1 -1
  38. package/src/parser/sql.ts +33 -22
  39. package/src/parser/sys.d.ts.map +1 -1
  40. package/src/parser/sys.js +2 -6
  41. package/src/parser/sys.js.map +1 -1
  42. package/src/parser/sys.ts +3 -5
  43. package/src/parser/table/engine.js +2 -2
  44. package/src/parser/table/engine.ts +3 -3
  45. package/src/sql/catalog-maps.d.ts +1 -0
  46. package/src/sql/catalog-maps.d.ts.map +1 -0
  47. package/src/sql/catalog-maps.js +283 -0
  48. package/src/sql/catalog-maps.js.map +1 -0
  49. package/src/sql/catalog-maps.ts +281 -0
  50. package/src/sql/sql-builder.d.ts +1 -0
  51. package/src/sql/sql-builder.d.ts.map +1 -0
  52. package/src/sql/sql-builder.js +256 -0
  53. package/src/sql/sql-builder.js.map +1 -0
  54. package/src/sql/sql-builder.ts +254 -0
  55. package/src/utils/escape.d.ts +5 -1
  56. package/src/utils/escape.d.ts.map +1 -1
  57. package/src/utils/escape.js +328 -4
  58. package/src/utils/escape.js.map +1 -1
  59. package/src/utils/escape.ts +331 -4
  60. package/src/utils/script-util.d.ts +26 -0
  61. package/src/utils/script-util.d.ts.map +1 -0
  62. package/src/utils/script-util.js +95 -0
  63. package/src/utils/script-util.js.map +1 -0
  64. package/src/utils/script-util.ts +105 -0
@@ -0,0 +1,281 @@
1
+ // export const PGDataTypeMapCheck = {
2
+ // number(arg) {
3
+ // let number = Number(arg);
4
+ // return Number.isFinite(number) && !Number.isNaN(number);
5
+ // },
6
+ // string(arg) {
7
+ // return typeof arg === 'string';
8
+ // },
9
+ // boolean(arg) {
10
+ // return typeof arg === 'boolean';
11
+ // },
12
+ // Buffer(arg) {
13
+ // return Buffer.isBuffer(arg);
14
+ // },
15
+ // Date(arg) {
16
+ // return arg instanceof Date;
17
+ // },
18
+ // "any"( ) {
19
+ // return true;
20
+ // },
21
+ // "any[]"( arg ) {
22
+ // return Array.isArray(arg);
23
+ // },
24
+ // void( arg ) {
25
+ // return arg === undefined || arg === null;
26
+ // }
27
+ // };
28
+ //
29
+ // export const PGDataTypeMap = {
30
+ // bigint: "number",
31
+ // bigserial: "number",
32
+ // bit: "string",
33
+ // "bit varying": "string",
34
+ // boolean: "boolean",
35
+ // bool: "boolean",
36
+ // box: "string",
37
+ // bytea: "Buffer",
38
+ // '"char"': "string",
39
+ // "char": "string",
40
+ // character: "string",
41
+ // bpchar: "string",
42
+ // "character varying": "string",
43
+ // cid: "string",
44
+ // cidr: "string",
45
+ // circle: "string",
46
+ // date: "Date",
47
+ // "double precision": "number",
48
+ // inet: "string",
49
+ // integer: "number",
50
+ // int8: "number",
51
+ // interval: "string",
52
+ // json: "any",
53
+ // jsonb: "any",
54
+ // line: "string",
55
+ // lseg: "string",
56
+ // macaddr: "string",
57
+ // money: "number",
58
+ // numeric: "number",
59
+ // oid: "number",
60
+ // path: "string",
61
+ // pg_lsn: "string",
62
+ // point: "string",
63
+ // polygon: "string",
64
+ // real: "number",
65
+ // record: "any",
66
+ // regtype: "string",
67
+ // smallint: "number",
68
+ // int2: "number",
69
+ // smallserial: "number",
70
+ // serial: "number",
71
+ // int4: "number",
72
+ // float8: "number",
73
+ // text: "string",
74
+ // varchar: "string",
75
+ // time: "string",
76
+ // regprocedure: "string",
77
+ // regproc: "string",
78
+ // trigger: "void",
79
+ // internal: "void",
80
+ // anyelement: "any",
81
+ // regclass: "string",
82
+ // anyarray: "any[]",
83
+ // timestamp: "Date",
84
+ // "timestamptz": "Date",
85
+ // "timestamp with time zone": "Date",
86
+ // "timestamp without time zone": "Date",
87
+ // tid: "string",
88
+ // tsquery: "string",
89
+ // tsvector: "string",
90
+ // txid_snapshot: "string",
91
+ // uuid: "string",
92
+ // xid: "string",
93
+ // void: "void",
94
+ // xml: "string",
95
+ // name: "string",
96
+ // regdictionary: "string",
97
+ // aclitem: "string",
98
+ // pg_node_tree: "pg_node_tree"
99
+ // };
100
+ //
101
+ // export type PGDataType = {
102
+ // bigint: number;
103
+ // bigserial: number;
104
+ // bit: string;
105
+ // "bit varying": string;
106
+ // boolean: boolean;
107
+ // bool: boolean;
108
+ // box: string;
109
+ // bytea: Buffer;
110
+ // '"char"': string;
111
+ // "char": string;
112
+ // character: string;
113
+ // bpchar: string;
114
+ // "character varying": string;
115
+ // cid: string;
116
+ // cidr: string;
117
+ // circle: string;
118
+ // date: Date;
119
+ // "double precision": number;
120
+ // inet: string;
121
+ // integer: number;
122
+ // int8: number;
123
+ // interval: string;
124
+ // json: any;
125
+ // jsonb: any;
126
+ // line: string;
127
+ // lseg: string;
128
+ // macaddr: string;
129
+ // money: number;
130
+ // numeric: number;
131
+ // oid: number;
132
+ // path: string;
133
+ // pg_lsn: string;
134
+ // point: string;
135
+ // polygon: string;
136
+ // real: number;
137
+ // record: any; // Adicionado
138
+ // regtype: string; // Adicionado
139
+ // smallint: number;
140
+ // int2: number;
141
+ // smallserial: number;
142
+ // serial: number;
143
+ // int4: number;
144
+ // float8: number;
145
+ // text: string;
146
+ // varchar: string;
147
+ // time: string;
148
+ // regproc: string;
149
+ // regprocedure: string;
150
+ // trigger: void;
151
+ // internal: void;
152
+ // anyelement: any;
153
+ // regclass: string;
154
+ // anyarray: any[];
155
+ // timestamp: Date;
156
+ // "timestamptz": Date;
157
+ // "timestamp with time zone": Date;
158
+ // "timestamp without time zone": Date;
159
+ // tid: string;
160
+ // tsquery: string;
161
+ // tsvector: string;
162
+ // txid_snapshot: string;
163
+ // uuid: string;
164
+ // xid: string;
165
+ // void: void;
166
+ // xml: string;
167
+ // name:string
168
+ // regdictionary:string
169
+ // aclitem:string
170
+ // pg_node_tree:string
171
+ // };
172
+ //
173
+ // export default PGDataType;
174
+ //
175
+ // export type CatalogTypesMap< T extends keyof PGDataType> = PGDataType[T];
176
+ //
177
+ //
178
+ // export type FunctionOf< F extends FunctionOf<F> > = {
179
+ // [ schema in keyof F ]:F[schema]
180
+ // }
181
+ //
182
+ //
183
+ // export type TableOf<T extends TableOf< T>> = {
184
+ // [ schema in keyof T ]:T[schema]
185
+ // }
186
+ //
187
+ // export type ViewOf<V extends ViewOf<V>> = {
188
+ // [ schema in keyof V ]:V[schema]
189
+ // }
190
+ //
191
+ // export type RelationOf< R extends &RelationOf< R> > = {
192
+ // [ schema in keyof R ]:R[schema]
193
+ // }
194
+ //
195
+ // export type MaterializesOf< R extends &RelationOf< R> > = {
196
+ // [ schema in keyof R ]:R[schema]
197
+ // }
198
+ //
199
+ // export type CompositeTypeOf< CT extends CompositeTypeOf<CT> > = {
200
+ // [ schema in keyof CT ]:CT[schema]
201
+ // }
202
+ //
203
+ // export type EnumOf<E extends EnumOf< E> > = {
204
+ // [ schema in keyof E ]:E[ schema ]
205
+ // }
206
+ //
207
+ // export type CatalogOf<R extends CatalogOf<R>> = {
208
+ //
209
+ // schemas?:(R["schemas"][number])[],
210
+ // types?: { [S in keyof R["types"]]:R["types"][S] },
211
+ //
212
+ // functions?: {
213
+ // [S in (keyof R["functions"])]:{
214
+ // [K in keyof R["functions"][S]]:R["functions"][S][K]
215
+ // }
216
+ // }, functionsRefs?: {
217
+ // [K in keyof R["functionsRefs"]]:R["functionsRefs"][K]
218
+ // },
219
+ //
220
+ // functionsProps?: {
221
+ // [S in (keyof R["functionsProps"])]:{
222
+ // [K in keyof R["functionsProps"][S]]:R["functionsProps"][S][K]
223
+ // }
224
+ // }, functionsPropsRefs?: {
225
+ // [K in keyof R["functionsPropsRefs"]]:{
226
+ // args:R["functionsPropsRefs"][K]["args"]
227
+ // options:R["functionsPropsRefs"][K]["options"]
228
+ // returns:R["functionsPropsRefs"][K]["returns"]
229
+ // returnsType:R["functionsPropsRefs"][K]["returnsType"]
230
+ // }
231
+ // },
232
+ //
233
+ // tables?: {
234
+ // [S in (keyof R["tables"])]:{
235
+ // [K in keyof R["tables"][S]]:R["tables"][S][K]
236
+ // }
237
+ // },
238
+ // tablesRefs?: {
239
+ // [K in keyof R["tablesRefs"]]:R["tablesRefs"][K]
240
+ // },
241
+ //
242
+ // views?: {
243
+ // [S in (keyof R["views"])]:{
244
+ // [K in keyof R["views"][S]]:R["views"][S][K]
245
+ // }
246
+ // }, viewsRefs?: {
247
+ // [S in (keyof R["viewsRefs"])]:R["viewsRefs"][S]
248
+ // },
249
+ //
250
+ // materializes?: {
251
+ // [S in (keyof R["materializes"])]:{
252
+ // [K in keyof R["materializes"][S]]:R["materializes"][S][K]
253
+ // }
254
+ // }, materializesRefs?: {
255
+ // [S in (keyof R["materializesRefs"])]:R["materializesRefs"][S]
256
+ // },
257
+ //
258
+ // relations?: {
259
+ // [S in (keyof R["relations"])]:{
260
+ // [K in keyof R["relations"][S]]:R["relations"][S][K]
261
+ // }
262
+ // }, relationsRefs?: {
263
+ // [S in (keyof R["relationsRefs"])]:R["relationsRefs"][S]
264
+ // },
265
+ //
266
+ // composites?: {
267
+ // [S in (keyof R["composites"])]:{
268
+ // [K in keyof R["composites"][S]]:R["composites"][S][K]
269
+ // }
270
+ // }, compositesRefs?: {
271
+ // [S in (keyof R["compositesRefs"])]:R["compositesRefs"][ S ]
272
+ // },
273
+ //
274
+ // enums?: {
275
+ // [S in (keyof R["enums"])]:{
276
+ // [K in keyof R["enums"][S]]:R["enums"][S][K]
277
+ // }
278
+ // }, enumsRefs?: {
279
+ // [S in (keyof R["enumsRefs"])]:R["enumsRefs"][ S ]
280
+ // }
281
+ // }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=sql-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-builder.d.ts","sourceRoot":"","sources":["sql-builder.ts"],"names":[],"mappings":""}
@@ -0,0 +1,256 @@
1
+ "use strict";
2
+ // import {Escape, lit, oid, SQL} from "../utils/escape";
3
+ // import {ScriptLine, scriptUtil} from "../utils/script-util";
4
+ // import {QueryBuilderResult} from "@prisma-psm/core";
5
+ //
6
+ // export function literalEscape ( value:any){
7
+ // let textValue;
8
+ // if( value === null || value === undefined) textValue = "null";
9
+ // else if( typeof value === "string") textValue = lit( value );
10
+ // else if( typeof value === "number") textValue = value;
11
+ // else if( typeof value === "boolean") textValue = value;
12
+ // else if( typeof value === "object") textValue = lit( JSON.stringify( value ));
13
+ // return textValue;
14
+ // }
15
+ //
16
+ //
17
+ //
18
+ // export type PreparedQuery = {
19
+ // query:string,
20
+ // values:any[],
21
+ // line:ScriptLine
22
+ // }
23
+ //
24
+ // const CHECK = Symbol("check" );
25
+ //
26
+ //
27
+ // export class PostgresQueryBuilderResult implements QueryBuilderResult{
28
+ // escaped:any[];
29
+ // piece:boolean
30
+ // template:string[];
31
+ // private _query:string;
32
+ // public line:ScriptLine;
33
+ //
34
+ // constructor(template:TemplateStringsArray|string|string[], escaped:any[], line:ScriptLine ) {
35
+ // if( !line || !line?.filename ) throw new Error( `Script line is not declared` );
36
+ // if( line.filename.startsWith("node:internal")){
37
+ // throw new Error( `Invalid script line is internal capture`);
38
+ // }
39
+ //
40
+ // if( !escaped ) escaped = [];
41
+ // if( !template ) template = [];
42
+ // this.template = [];
43
+ // this.escaped = [];
44
+ //
45
+ // let hasTemplate = !!template?.length;
46
+ // let hasValue = !!escaped?.length;
47
+ // let hasCheck = !!arguments[2] || arguments[2] === CHECK;
48
+ // if( !hasTemplate && !hasCheck ) throw new Error( "Invalid Builder" );
49
+ //
50
+ //
51
+ // if( typeof template === "string" ){
52
+ // this._query = template;
53
+ // } else {
54
+ // this.template.push( ...template);
55
+ // }
56
+ // this.escaped.push( ...escaped );
57
+ // this.line = line;
58
+ // }
59
+ //
60
+ // get builderParts(){
61
+ // if( this.pieces.length+1 !== this.template.length ) throw new Error( "Inconsistency template builder" );
62
+ //
63
+ // let list:any[] = [];
64
+ // this.template.forEach( (value, index) => {
65
+ // list.push( value );
66
+ // if( index < this.pieces.length ) list.push( this.pieces[ index ]);
67
+ // });
68
+ // return list;
69
+ // }
70
+ //
71
+ //
72
+ // parameterizedQuery():PreparedQuery{
73
+ // if( !!this._query ){
74
+ // let values = this.values.map( value => {
75
+ // if( value instanceof Escape ) return value.value;
76
+ // else return value;
77
+ // })
78
+ // return {
79
+ // query: this._query,
80
+ // values: values,
81
+ // line: this.line
82
+ // };
83
+ // } else {
84
+ // let argIndex = 1;
85
+ // let queryParts = this.builderParts.map( (value, index) => {
86
+ // if( (index %2) === 0 ){
87
+ // return value;
88
+ // }
89
+ //
90
+ // if( value instanceof Escape && value.mode === "type" && value.asArray){
91
+ // return '$'+(argIndex++)+"::"+value.type+"[]";
92
+ // } else if( value instanceof Escape && value.mode === "type" ){
93
+ // return '$'+(argIndex++)+"::"+value.type;
94
+ // }
95
+ //
96
+ // if( value instanceof Escape && value.mode === "identifier" ){
97
+ // return oid( value.value );
98
+ // }
99
+ //
100
+ // if( value === null || value === undefined){
101
+ // return "null";
102
+ // } else {
103
+ // return '$'+(argIndex++);
104
+ // }
105
+ // });
106
+ //
107
+ // let values = this.values.filter( value => {
108
+ // if( value instanceof Escape && value.mode === "identifier" ) return;
109
+ // else return value !== null && value !== undefined;
110
+ // }).map( value => {
111
+ // if( value instanceof Escape ) {
112
+ // if( value.value === null || value.value === undefined ) return null;
113
+ // if( value.type === "jsonb" && typeof value.value === "object" ) return JSON.stringify( value.value );
114
+ // if( value.type === "json" && typeof value.value === "object" ) return JSON.stringify( value.value );
115
+ // return value.value;
116
+ // }
117
+ // else return value;
118
+ // })
119
+ //
120
+ // return {
121
+ // query: queryParts.join(""),
122
+ // values: values,
123
+ // line: this.line
124
+ // }
125
+ // }
126
+ // }
127
+ //
128
+ // add( sqlPart:string, sqlValue:any ){
129
+ // this.template.push( sqlPart );
130
+ // this.values.push( sqlValue );
131
+ // }
132
+ // noParameterizedQuery():PreparedQuery{
133
+ // if( !!this._query ){
134
+ // return {
135
+ // line: this.line,
136
+ // query: this._query,
137
+ // values: null
138
+ // };
139
+ // } else {
140
+ // let queryParts = this.builderParts.map( (value, index) => {
141
+ // let _scape;
142
+ // if ((index % 2) === 0) {
143
+ // return value;
144
+ //
145
+ // }else if( value instanceof Escape && value.mode === "literal") {
146
+ // return lit( value.value?.toString?.()||null )
147
+ // } else if( value instanceof Escape && (value.mode === "unsafe" || value.mode === "keyword")){
148
+ // _scape = value.value;
149
+ // } else if( value instanceof Escape && value.mode === "type" ){
150
+ // let preEscape = value.literal();
151
+ // let textValue = literalEscape( preEscape );
152
+ // // let textValue = value.literal();
153
+ // let _as = "";
154
+ // if( value.type && value.type.length && value.asArray ) _as = `::${value.type}[]`;
155
+ // else if( value.type && value.type.length ) _as = `::${value.type}`;
156
+ // _scape = textValue+_as;
157
+ // } else if( value instanceof Escape && value.mode === "identifier" ){
158
+ // _scape= oid( value.value );
159
+ // } else {
160
+ // _scape = literalEscape( value )
161
+ // }return _scape;
162
+ // });
163
+ //
164
+ // let str = queryParts.join("");
165
+ // return {
166
+ // query: str,
167
+ // values: null,
168
+ // line: this.line
169
+ // }
170
+ // }
171
+ // }
172
+ //
173
+ //
174
+ // push( ...builders:QueryBuilderResult[] ){
175
+ // let _push = ( outsideBuilder:QueryBuilderResult)=>{
176
+ // let checkOutsideBuilder = this.checkSupportedJoin( outsideBuilder );
177
+ // if( !checkOutsideBuilder ) throw new Error( "Unsupported outside builder" );
178
+ // let checkSelfBuilder = this.checkSupportedJoin( this );
179
+ // if( !checkSelfBuilder ) {
180
+ // throw new Error("Current builder no support join");
181
+ // }
182
+ //
183
+ // if( !checkSelfBuilder.hasTemplate ) {
184
+ // this.template = [];
185
+ // if( checkSelfBuilder.hasQuery ){
186
+ // this.template.push( this._query );
187
+ // this._query = null;
188
+ // }
189
+ // }
190
+ //
191
+ // let selfTemplate = this.template;
192
+ // let outsideTemplate = outsideBuilder.template;
193
+ // if( !checkOutsideBuilder.hasTemplate ){
194
+ // outsideTemplate = [ outsideBuilder._query ];
195
+ // }
196
+ //
197
+ // outsideTemplate.forEach((element, elementIndex) => {
198
+ // if(selfTemplate.length > 0 && elementIndex===0 ){
199
+ // let lastElementResult = selfTemplate[selfTemplate.length - 1];
200
+ // lastElementResult = lastElementResult.trimEnd();
201
+ // if( lastElementResult[lastElementResult.length-1] !== ";" && !outsideBuilder.piece ) lastElementResult+= ";"
202
+ // selfTemplate[selfTemplate.length - 1] = lastElementResult+ "\n\n"+ element.trimStart();
203
+ // return
204
+ // }
205
+ // selfTemplate.push( element );
206
+ //
207
+ // });
208
+ // this.values.push( ... outsideBuilder.values );
209
+ // }
210
+ // builders.forEach( value => _push( value ) );
211
+ // }
212
+ //
213
+ // private checkSupportedJoin( builder:PostgresQueryBuilderResult ){
214
+ // let hasTemplate = !!builder.template && !!builder.template.length;
215
+ // let hasQuery = !!builder._query && !!builder._query.length;
216
+ // let hasValues = !!builder.values && !!builder.values.length && builder.values.length > 0
217
+ // if( !hasTemplate && hasValues ) return false;
218
+ // return { hasTemplate, hasQuery, hasValues };
219
+ //
220
+ // }
221
+ // }
222
+ // export function sql( sqlTemplate:TemplateStringsArray, ...values:any[]):QueryBuilderResult{
223
+ // let line = scriptUtil.lineOf( 1 );
224
+ // return new PostgresQueryBuilderResult(sqlTemplate, values.map(value => {
225
+ // if (value instanceof Escape) return value
226
+ // else return SQL.any(value)
227
+ // }), line);
228
+ // }
229
+ //
230
+ //
231
+ // sql.joins = ( ...builders:QueryBuilderResult[] )=>{
232
+ // let builder = builders.shift();
233
+ // if( !!builder && builders.length ) builder.push( ...builders );
234
+ // return builder;
235
+ // }
236
+ //
237
+ // sql.join = ( builders:QueryBuilderResult[] )=>{
238
+ // return sql.joins( ...(builders||[]) );
239
+ // }
240
+ //
241
+ // export function noAutoEscapeSql( sqlTemplate:TemplateStringsArray, ...values):PostgresQueryBuilderResult{
242
+ // let line = scriptUtil.lineOf( 1 );
243
+ // return new PostgresQueryBuilderResult( sqlTemplate, values, line );
244
+ // }
245
+ //
246
+ // export function queryJoin( ...prepared:QueryBuilderResult[] ):PostgresQueryBuilderResult {
247
+ // if( !prepared || !prepared.length ) throw new Error( "Query join is empty!");
248
+ // let superList = prepared;
249
+ // // @ts-ignore
250
+ // let joins = new QueryBuilderResult(undefined,undefined, prepared[ 0 ].line );
251
+ // superList.forEach( builder => {
252
+ // joins.push( builder );
253
+ // });
254
+ // return joins;
255
+ // }
256
+ //# sourceMappingURL=sql-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-builder.js","sourceRoot":"","sources":["sql-builder.ts"],"names":[],"mappings":"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"}