@shaxpir/squilt 1.0.0 → 1.1.0

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 (68) hide show
  1. package/README.md +289 -1
  2. package/dist/ast/AlterTableQuery.d.ts +32 -0
  3. package/dist/ast/AlterTableQuery.js +60 -0
  4. package/dist/ast/BetweenExpression.d.ts +10 -0
  5. package/dist/ast/BetweenExpression.js +18 -0
  6. package/dist/ast/CastExpression.d.ts +13 -0
  7. package/dist/ast/CastExpression.js +25 -0
  8. package/dist/ast/CollateExpression.d.ts +18 -0
  9. package/dist/ast/CollateExpression.js +30 -0
  10. package/dist/ast/CreateIndexQuery.d.ts +25 -0
  11. package/dist/ast/CreateIndexQuery.js +64 -0
  12. package/dist/ast/CreateTableQuery.d.ts +57 -0
  13. package/dist/ast/CreateTableQuery.js +79 -0
  14. package/dist/ast/CreateViewQuery.d.ts +34 -0
  15. package/dist/ast/CreateViewQuery.js +61 -0
  16. package/dist/ast/CreateVirtualTableQuery.d.ts +32 -0
  17. package/dist/ast/CreateVirtualTableQuery.js +74 -0
  18. package/dist/ast/DeleteQuery.d.ts +17 -0
  19. package/dist/ast/DeleteQuery.js +43 -0
  20. package/dist/ast/DropIndexQuery.d.ts +14 -0
  21. package/dist/ast/DropIndexQuery.js +35 -0
  22. package/dist/ast/DropTableQuery.d.ts +14 -0
  23. package/dist/ast/DropTableQuery.js +35 -0
  24. package/dist/ast/DropViewQuery.d.ts +11 -0
  25. package/dist/ast/DropViewQuery.js +24 -0
  26. package/dist/ast/FunctionExpression.d.ts +21 -0
  27. package/dist/ast/FunctionExpression.js +40 -1
  28. package/dist/ast/FunctionName.d.ts +1 -1
  29. package/dist/ast/FunctionName.js +1 -1
  30. package/dist/ast/InsertQuery.d.ts +24 -1
  31. package/dist/ast/InsertQuery.js +49 -1
  32. package/dist/ast/Operator.d.ts +2 -0
  33. package/dist/ast/Operator.js +3 -1
  34. package/dist/ast/SelectQuery.d.ts +4 -0
  35. package/dist/ast/SelectQuery.js +11 -1
  36. package/dist/ast/SubqueryExpression.d.ts +18 -0
  37. package/dist/ast/SubqueryExpression.js +27 -0
  38. package/dist/ast/UpdateQuery.d.ts +24 -0
  39. package/dist/ast/UpdateQuery.js +51 -0
  40. package/dist/ast/WindowExpression.d.ts +51 -0
  41. package/dist/ast/WindowExpression.js +61 -0
  42. package/dist/ast/WindowSpecification.d.ts +46 -0
  43. package/dist/ast/WindowSpecification.js +60 -0
  44. package/dist/builder/QueryBuilder.d.ts +20 -0
  45. package/dist/builder/QueryBuilder.js +41 -1
  46. package/dist/builder/Shorthand.d.ts +51 -0
  47. package/dist/builder/Shorthand.js +125 -1
  48. package/dist/index.d.ts +17 -1
  49. package/dist/index.js +59 -3
  50. package/dist/renderer/CompactQueryRenderer.d.ts +34 -2
  51. package/dist/renderer/CompactQueryRenderer.js +272 -2
  52. package/dist/renderer/IndentedQueryRenderer.d.ts +34 -2
  53. package/dist/renderer/IndentedQueryRenderer.js +289 -3
  54. package/dist/renderer/QueryRenderer.d.ts +11 -1
  55. package/dist/renderer/QueryRenderer.js +1 -1
  56. package/dist/validate/CommonQueryValidator.d.ts +31 -1
  57. package/dist/validate/CommonQueryValidator.js +253 -4
  58. package/dist/validate/QueryValidator.d.ts +10 -1
  59. package/dist/validate/QueryValidator.js +1 -1
  60. package/dist/validate/SQLiteQueryValidator.d.ts +16 -1
  61. package/dist/validate/SQLiteQueryValidator.js +32 -3
  62. package/dist/visitor/ParamCollector.d.ts +30 -0
  63. package/dist/visitor/ParamCollector.js +109 -2
  64. package/dist/visitor/QueryIdentityTransformer.d.ts +30 -0
  65. package/dist/visitor/QueryIdentityTransformer.js +217 -2
  66. package/dist/visitor/SqlTreeNodeVisitor.d.ts +30 -0
  67. package/dist/visitor/SqlTreeNodeVisitor.js +1 -1
  68. package/package.json +4 -1
@@ -2,15 +2,31 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.QueryIdentityTransformer = void 0;
4
4
  const Alias_1 = require("../ast/Alias");
5
+ const AlterTableQuery_1 = require("../ast/AlterTableQuery");
6
+ const BetweenExpression_1 = require("../ast/BetweenExpression");
5
7
  const BinaryExpression_1 = require("../ast/BinaryExpression");
6
8
  const CaseExpression_1 = require("../ast/CaseExpression");
9
+ const CastExpression_1 = require("../ast/CastExpression");
10
+ const CollateExpression_1 = require("../ast/CollateExpression");
11
+ const SubqueryExpression_1 = require("../ast/SubqueryExpression");
12
+ const WindowExpression_1 = require("../ast/WindowExpression");
13
+ const WindowSpecification_1 = require("../ast/WindowSpecification");
7
14
  const Column_1 = require("../ast/Column");
8
15
  const Concat_1 = require("../ast/Concat");
16
+ const CreateIndexQuery_1 = require("../ast/CreateIndexQuery");
17
+ const CreateTableQuery_1 = require("../ast/CreateTableQuery");
18
+ const CreateVirtualTableQuery_1 = require("../ast/CreateVirtualTableQuery");
19
+ const CreateViewQuery_1 = require("../ast/CreateViewQuery");
20
+ const DeleteQuery_1 = require("../ast/DeleteQuery");
21
+ const DropIndexQuery_1 = require("../ast/DropIndexQuery");
22
+ const DropTableQuery_1 = require("../ast/DropTableQuery");
23
+ const DropViewQuery_1 = require("../ast/DropViewQuery");
9
24
  const ExistsExpression_1 = require("../ast/ExistsExpression");
10
25
  const From_1 = require("../ast/From");
11
26
  const FunctionExpression_1 = require("../ast/FunctionExpression");
12
27
  const InExpression_1 = require("../ast/InExpression");
13
28
  const InsertQuery_1 = require("../ast/InsertQuery");
29
+ const UpdateQuery_1 = require("../ast/UpdateQuery");
14
30
  const Join_1 = require("../ast/Join");
15
31
  const Literals_1 = require("../ast/Literals");
16
32
  const OrderBy_1 = require("../ast/OrderBy");
@@ -69,6 +85,8 @@ class QueryIdentityTransformer {
69
85
  if (node['_having'])
70
86
  newQuery['_having'] = this.expectSingle(node['_having'].accept(this), 'HAVING');
71
87
  newQuery['_union'] = this.flatList(node['_union'].map(u => u.accept(this)));
88
+ newQuery['_intersect'] = this.flatList(node['_intersect'].map(i => i.accept(this)));
89
+ newQuery['_except'] = this.flatList(node['_except'].map(e => e.accept(this)));
72
90
  newQuery['_orderBy'] = this.flatList(node['_orderBy'].map(o => o.accept(this)));
73
91
  newQuery['_offset'] = node['_offset'];
74
92
  newQuery['_limit'] = node['_limit'];
@@ -78,7 +96,181 @@ class QueryIdentityTransformer {
78
96
  const newQuery = new InsertQuery_1.InsertQuery(node['_tableName']);
79
97
  newQuery['_orReplace'] = node['_orReplace'];
80
98
  newQuery['_columns'] = [...node['_columns']]; // Strings, reuse
81
- newQuery['_values'] = this.flatList(node['_values'].map(v => v.accept(this)));
99
+ if (node['_fromSelect']) {
100
+ newQuery['_fromSelect'] = this.expectSingle(node['_fromSelect'].accept(this), 'fromSelect');
101
+ }
102
+ else {
103
+ newQuery['_values'] = this.flatList(node['_values'].map(v => v.accept(this)));
104
+ }
105
+ // Transform ON CONFLICT clause
106
+ newQuery['_onConflictColumns'] = [...node['_onConflictColumns']];
107
+ newQuery['_doNothing'] = node['_doNothing'];
108
+ newQuery['_doUpdateSets'] = node['_doUpdateSets'].map(s => ({
109
+ column: s.column,
110
+ value: this.expectSingle(s.value.accept(this), 'DO UPDATE value')
111
+ }));
112
+ if (node['_onConflictWhere']) {
113
+ newQuery['_onConflictWhere'] = this.expectSingle(node['_onConflictWhere'].accept(this), 'ON CONFLICT WHERE');
114
+ }
115
+ newQuery['_returning'] = this.flatList(node['_returning'].map(r => r.accept(this)));
116
+ return newQuery;
117
+ }
118
+ visitDeleteQuery(node) {
119
+ const newQuery = new DeleteQuery_1.DeleteQuery(node['_tableName']);
120
+ if (node['_where']) {
121
+ newQuery['_where'] = this.expectSingle(node['_where'].accept(this), 'WHERE');
122
+ }
123
+ newQuery['_returning'] = this.flatList(node['_returning'].map(r => r.accept(this)));
124
+ return newQuery;
125
+ }
126
+ visitUpdateQuery(node) {
127
+ const newQuery = new UpdateQuery_1.UpdateQuery(node['_tableName']);
128
+ node['_set'].forEach(s => {
129
+ newQuery.set(s.column, this.expectSingle(s.value.accept(this), 'SET value'));
130
+ });
131
+ if (node['_where']) {
132
+ newQuery['_where'] = this.expectSingle(node['_where'].accept(this), 'WHERE');
133
+ }
134
+ newQuery['_returning'] = this.flatList(node['_returning'].map(r => r.accept(this)));
135
+ return newQuery;
136
+ }
137
+ visitDropTableQuery(node) {
138
+ const newQuery = new DropTableQuery_1.DropTableQuery(node.tableName);
139
+ if (node.hasIfExists) {
140
+ newQuery.ifExists();
141
+ }
142
+ return newQuery;
143
+ }
144
+ visitDropIndexQuery(node) {
145
+ const newQuery = new DropIndexQuery_1.DropIndexQuery(node.indexName);
146
+ if (node.hasIfExists) {
147
+ newQuery.ifExists();
148
+ }
149
+ return newQuery;
150
+ }
151
+ visitDropViewQuery(node) {
152
+ const newQuery = new DropViewQuery_1.DropViewQuery(node.viewName);
153
+ if (node.hasIfExists) {
154
+ newQuery.ifExists();
155
+ }
156
+ return newQuery;
157
+ }
158
+ visitCreateViewQuery(node) {
159
+ const newQuery = new CreateViewQuery_1.CreateViewQuery(node.viewName);
160
+ if (node.columns.length > 0) {
161
+ newQuery.withColumns(...node.columns);
162
+ }
163
+ if (node.isTemporary) {
164
+ newQuery.temporary();
165
+ }
166
+ if (node.hasIfNotExists) {
167
+ newQuery.ifNotExists();
168
+ }
169
+ if (node.selectQuery) {
170
+ newQuery.as(this.expectSingle(node.selectQuery.accept(this), 'SELECT'));
171
+ }
172
+ return newQuery;
173
+ }
174
+ visitCreateIndexQuery(node) {
175
+ const newQuery = new CreateIndexQuery_1.CreateIndexQuery(node.indexName);
176
+ newQuery.on(node.tableName, [...node.columns]);
177
+ if (node.isUnique) {
178
+ newQuery.unique();
179
+ }
180
+ if (node.hasIfNotExists) {
181
+ newQuery.ifNotExists();
182
+ }
183
+ if (node.whereExpression) {
184
+ newQuery.where(this.expectSingle(node.whereExpression.accept(this), 'WHERE'));
185
+ }
186
+ return newQuery;
187
+ }
188
+ visitAlterTableQuery(node) {
189
+ const newQuery = new AlterTableQuery_1.AlterTableQuery(node.tableName);
190
+ const op = node.operation;
191
+ if (op) {
192
+ switch (op.type) {
193
+ case 'ADD_COLUMN':
194
+ const newConstraints = { ...op.column.constraints };
195
+ if (op.column.constraints.check) {
196
+ newConstraints.check = this.expectSingle(op.column.constraints.check.accept(this), 'check constraint');
197
+ }
198
+ newQuery.addColumn(op.column.name, op.column.type, newConstraints);
199
+ break;
200
+ case 'RENAME_COLUMN':
201
+ newQuery.renameColumn(op.oldName, op.newName);
202
+ break;
203
+ case 'DROP_COLUMN':
204
+ newQuery.dropColumn(op.columnName);
205
+ break;
206
+ case 'RENAME_TABLE':
207
+ newQuery.renameTo(op.newTableName);
208
+ break;
209
+ }
210
+ }
211
+ return newQuery;
212
+ }
213
+ visitCreateTableQuery(node) {
214
+ const newQuery = new CreateTableQuery_1.CreateTableQuery(node.tableName);
215
+ // Copy columns with transformed check constraints
216
+ for (const col of node.columns) {
217
+ const newConstraints = { ...col.constraints };
218
+ if (col.constraints.check) {
219
+ newConstraints.check = this.expectSingle(col.constraints.check.accept(this), 'check constraint');
220
+ }
221
+ newQuery.column(col.name, col.type, newConstraints);
222
+ }
223
+ // Copy table constraints with transformed check expressions
224
+ for (const constraint of node.tableConstraints) {
225
+ switch (constraint.type) {
226
+ case 'PRIMARY KEY':
227
+ newQuery.primaryKey(...constraint.columns);
228
+ break;
229
+ case 'UNIQUE':
230
+ newQuery.unique(...constraint.columns);
231
+ break;
232
+ case 'FOREIGN KEY':
233
+ newQuery.foreignKey(constraint.columns, constraint.references);
234
+ break;
235
+ case 'CHECK':
236
+ const checkExpr = this.expectSingle(constraint.check.accept(this), 'table check constraint');
237
+ newQuery.check(checkExpr, constraint.name);
238
+ break;
239
+ }
240
+ }
241
+ if (node.hasIfNotExists) {
242
+ newQuery.ifNotExists();
243
+ }
244
+ if (node.hasWithoutRowid) {
245
+ newQuery.withoutRowid();
246
+ }
247
+ if (node.isStrict) {
248
+ newQuery.strict();
249
+ }
250
+ return newQuery;
251
+ }
252
+ visitCreateVirtualTableQuery(node) {
253
+ const newQuery = new CreateVirtualTableQuery_1.CreateVirtualTableQuery(node.tableName, node.module);
254
+ // Copy columns
255
+ for (const col of node.columns) {
256
+ newQuery.column(col);
257
+ }
258
+ // Copy options
259
+ if (node.options.tokenize) {
260
+ newQuery.tokenize(node.options.tokenize);
261
+ }
262
+ if (node.options.content) {
263
+ newQuery.content(node.options.content);
264
+ }
265
+ if (node.options.contentRowid) {
266
+ newQuery.contentRowid(node.options.contentRowid);
267
+ }
268
+ if (node.options.prefix) {
269
+ newQuery.prefix(node.options.prefix);
270
+ }
271
+ if (node.hasIfNotExists) {
272
+ newQuery.ifNotExists();
273
+ }
82
274
  return newQuery;
83
275
  }
84
276
  visitTableFrom(node) {
@@ -110,6 +302,9 @@ class QueryIdentityTransformer {
110
302
  visitBinaryExpression(node) {
111
303
  return new BinaryExpression_1.BinaryExpression(this.expectSingle(node.left.accept(this), 'left'), node.operator, this.expectSingle(node.right.accept(this), 'right'));
112
304
  }
305
+ visitBetweenExpression(node) {
306
+ return new BetweenExpression_1.BetweenExpression(this.expectSingle(node.operand.accept(this), 'operand'), this.expectSingle(node.low.accept(this), 'low'), this.expectSingle(node.high.accept(this), 'high'), node.not);
307
+ }
113
308
  visitUnaryExpression(node) {
114
309
  return new UnaryExpression_1.UnaryExpression(node.operator, this.expectSingle(node.operand.accept(this), 'operand'));
115
310
  }
@@ -168,6 +363,26 @@ class QueryIdentityTransformer {
168
363
  visitExistsExpression(node) {
169
364
  return new ExistsExpression_1.ExistsExpression(this.expectSingle(node.subquery.accept(this), 'subquery'));
170
365
  }
366
+ visitCastExpression(node) {
367
+ return new CastExpression_1.CastExpression(this.expectSingle(node.expression.accept(this), 'cast expression'), node.targetType);
368
+ }
369
+ visitCollateExpression(node) {
370
+ return new CollateExpression_1.CollateExpression(this.expectSingle(node.expression.accept(this), 'collate expression'), node.collation);
371
+ }
372
+ visitSubqueryExpression(node) {
373
+ return new SubqueryExpression_1.SubqueryExpression(this.expectSingle(node.subquery.accept(this), 'subquery'));
374
+ }
375
+ visitWindowExpression(node) {
376
+ const newFn = this.expectSingle(node.function.accept(this), 'window function');
377
+ const newWindowSpec = new WindowSpecification_1.WindowSpecification();
378
+ if (node.windowSpec.partitionByColumns.length > 0) {
379
+ newWindowSpec.setPartitionBy(this.flatList(node.windowSpec.partitionByColumns.map(c => c.accept(this))));
380
+ }
381
+ if (node.windowSpec.orderByColumns.length > 0) {
382
+ newWindowSpec.setOrderBy(this.flatList(node.windowSpec.orderByColumns.map(o => o.accept(this))));
383
+ }
384
+ return new WindowExpression_1.WindowExpression(newFn, newWindowSpec);
385
+ }
171
386
  }
172
387
  exports.QueryIdentityTransformer = QueryIdentityTransformer;
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUXVlcnlJZGVudGl0eVRyYW5zZm9ybWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Zpc2l0b3IvUXVlcnlJZGVudGl0eVRyYW5zZm9ybWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHdDQUFxQztBQUNyQyw4REFBMkQ7QUFDM0QsMERBQWlFO0FBQ2pFLDBDQUFtRDtBQUNuRCwwQ0FBdUM7QUFDdkMsOERBQTJEO0FBQzNELHNDQUFvRjtBQUNwRixrRUFBK0Q7QUFFL0Qsc0RBQW1EO0FBQ25ELG9EQUFpRDtBQUNqRCxzQ0FBNkM7QUFDN0MsOENBQW1GO0FBRW5GLDRDQUEyRDtBQUMzRCxvREFBaUQ7QUFDakQsNERBQXlEO0FBQ3pELHNDQUFtQztBQUduQyxNQUFhLHdCQUF3QjtJQUM1QixTQUFTLENBQUMsSUFBaUI7UUFDaEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7UUFDL0UsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFUyxZQUFZLENBQXdCLE1BQW1DLEVBQUUsUUFBZ0I7UUFDakcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM3RSxDQUFDO1FBQ0QsT0FBTyxNQUFXLENBQUM7SUFDckIsQ0FBQztJQUVTLFFBQVEsQ0FBQyxPQUF3QztRQUN6RCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FB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QyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxVQUFVLENBQWdCLENBQUMsQ0FBQztJQUN4RyxDQUFDO0NBQ0Y7QUEzS0QsNERBMktDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWxpYXNhYmxlLCBBbGlhc2FibGVFeHByZXNzaW9uLCBFeHByZXNzaW9uLCBTcWxUcmVlTm9kZSB9IGZyb20gXCIuLi9hc3QvQWJzdHJhY3Rpb25zXCI7XG5pbXBvcnQgeyBBbGlhcyB9IGZyb20gXCIuLi9hc3QvQWxpYXNcIjtcbmltcG9ydCB7IEJpbmFyeUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0JpbmFyeUV4cHJlc3Npb25cIjtcbmltcG9ydCB7IENhc2VFeHByZXNzaW9uLCBDYXNlSXRlbSB9IGZyb20gXCIuLi9hc3QvQ2FzZUV4cHJlc3Npb25cIjtcbmltcG9ydCB7IENvbHVtbiwgQ29sdW1uTGlrZSB9IGZyb20gXCIuLi9hc3QvQ29sdW1uXCI7XG5pbXBvcnQgeyBDb25jYXQgfSBmcm9tIFwiLi4vYXN0L0NvbmNhdFwiO1xuaW1wb3J0IHsgRXhpc3RzRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvRXhpc3RzRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgRnJvbSwgRnJvbUxpa2UsIEpzb25FYWNoRnJvbSwgU3VicXVlcnlGcm9tLCBUYWJsZUZyb20gfSBmcm9tIFwiLi4vYXN0L0Zyb21cIjtcbmltcG9ydCB7IEZ1bmN0aW9uRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvRnVuY3Rpb25FeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBGdW5jdGlvbk5hbWUgfSBmcm9tIFwiLi4vYXN0L0Z1bmN0aW9uTmFtZVwiO1xuaW1wb3J0IHsgSW5FeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9JbkV4cHJlc3Npb25cIjtcbmltcG9ydCB7IEluc2VydFF1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9JbnNlcnRRdWVyeVwiO1xuaW1wb3J0IHsgSm9pbiwgSm9pblR5cGUgfSBmcm9tIFwiLi4vYXN0L0pvaW5cIjtcbmltcG9ydCB7IE51bGxMaXRlcmFsLCBOdW1iZXJMaXRlcmFsLCBQYXJhbSwgU3RyaW5nTGl0ZXJhbCB9IGZyb20gXCIuLi9hc3QvTGl0ZXJhbHNcIjtcbmltcG9ydCB7IE9wZXJhdG9yIH0gZnJvbSBcIi4uL2FzdC9PcGVyYXRvclwiO1xuaW1wb3J0IHsgT3JkZXJCeSwgT3JkZXJCeURpcmVjdGlvbiB9IGZyb20gXCIuLi9hc3QvT3JkZXJCeVwiO1xuaW1wb3J0IHsgU2VsZWN0UXVlcnkgfSBmcm9tIFwiLi4vYXN0L1NlbGVjdFF1ZXJ5XCI7XG5pbXBvcnQgeyBVbmFyeUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L1VuYXJ5RXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgV2l0aCB9IGZyb20gXCIuLi9hc3QvV2l0aFwiO1xuaW1wb3J0IHsgU3FsVHJlZU5vZGVUcmFuc2Zvcm1lciB9IGZyb20gXCIuL1NxbFRyZWVOb2RlVHJhbnNmb3JtZXJcIjtcblxuZXhwb3J0IGNsYXNzIFF1ZXJ5SWRlbnRpdHlUcmFuc2Zvcm1lciBpbXBsZW1lbnRzIFNxbFRyZWVOb2RlVHJhbnNmb3JtZXIge1xuICBwdWJsaWMgdHJhbnNmb3JtKG5vZGU6IFNxbFRyZWVOb2RlKTogU3FsVHJlZU5vZGUge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5vZGUuYWNjZXB0KHRoaXMpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVG9wLWxldmVsIHRyYW5zZm9ybWF0aW9uIG11c3QgcmV0dXJuIGEgc2luZ2xlIFNxbFRyZWVOb2RlJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZXhwZWN0U2luZ2xlPFQgZXh0ZW5kcyBTcWxUcmVlTm9kZT4ocmVzdWx0OiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10sIHR5cGVOYW1lOiBzdHJpbmcpOiBUIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgYXJyYXkgaW4gc2luZ2xlLW5vZGUgY29udGV4dCBmb3IgJHt0eXBlTmFtZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdCBhcyBUO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZsYXRMaXN0KHJlc3VsdHM6IChTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10pW10pOiBTcWxUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gcmVzdWx0cy5mbGF0TWFwKHIgPT4gQXJyYXkuaXNBcnJheShyKSA/IHIgOiBbcl0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZsYXRMaXN0MkQocmVzdWx0czogKFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSlbXVtdKTogU3FsVHJlZU5vZGVbXVtdIHtcbiAgICByZXR1cm4gcmVzdWx0cy5tYXAoc2V0ID0+IHRoaXMuZmxhdExpc3Qoc2V0KSk7XG4gIH1cblxuICB2aXNpdFNlbGVjdFF1ZXJ5KG5vZGU6IFNlbGVjdFF1ZXJ5KTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICBjb25zdCBuZXdRdWVyeSA9IG5ldyBTZWxlY3RRdWVyeSgpO1xuICAgIG5ld1F1ZXJ5WydfZGlzdGluY3QnXSA9IG5vZGVbJ19kaXN0aW5jdCddO1xuICAgIG5ld1F1ZXJ5Wydfd2l0aCddID0gdGhpcy5mbGF0TGlzdChub2RlWydfd2l0aCddLm1hcCh3ID0+IHcuYWNjZXB0KHRoaXMpKSkgYXMgV2l0aFtdO1xuICAgIG5ld1F1ZXJ5WydfZnJvbXNBbmRKb2lucyddID0gbm9kZVsnX2Zyb21zQW5kSm9pbnMnXS5tYXAoZmogPT4ge1xuICAgICAgaWYgKGZqICYmIHR5cGVvZiBmaiA9PT0gJ29iamVjdCcgJiYgJ3JlZmVyZW50JyBpbiBmaiAmJiAnYWxpYXMnIGluIGZqKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWxpYXModGhpcy5leHBlY3RTaW5nbGUoZmoucmVmZXJlbnQuYWNjZXB0KHRoaXMpLCAncmVmZXJlbnQnKSBhcyBGcm9tLCBmai5hbGlhcyk7XG4gICAgICB9IGVsc2UgaWYgKGZqICYmIHR5cGVvZiBmaiA9PT0gJ29iamVjdCcgJiYgJ2FjY2VwdCcgaW4gZmopIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwZWN0U2luZ2xlKChmaiBhcyBhbnkpLmFjY2VwdCh0aGlzKSwgJ2Zyb20vam9pbicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZyb20vam9pbiBvYmplY3QnKTtcbiAgICAgIH1cbiAgICB9KSBhcyAoRnJvbUxpa2UgfCBKb2luKVtdO1xuICAgIG5ld1F1ZXJ5WydfY29sdW1ucyddID0gbm9kZVsnX2NvbHVtbnMnXS5tYXAoYyA9PiB7XG4gICAgICBpZiAoYyAmJiB0eXBlb2YgYyA9PT0gJ29iamVjdCcgJiYgJ3JlZmVyZW50JyBpbiBjICYmICdhbGlhcycgaW4gYykge1xuICAgICAgICByZXR1cm4gbmV3IEFsaWFzKHRoaXMuZXhwZWN0U2luZ2xlKGMucmVmZXJlbnQuYWNjZXB0KHRoaXMpLCAncmVmZXJlbnQnKSBhcyBBbGlhc2FibGVFeHByZXNzaW9uLCBjLmFsaWFzKTtcbiAgICAgIH0gZWxzZSBpZiAoYyAmJiB0eXBlb2YgYyA9PT0gJ29iamVjdCcgJiYgJ2FjY2VwdCcgaW4gYykge1xuICAgICAgICByZXR1cm4gdGhpcy5leHBlY3RTaW5nbGUoKGMgYXMgYW55KS5hY2NlcHQodGhpcyksICdjb2x1bW4nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2x1bW4gb2JqZWN0Jyk7XG4gICAgICB9XG4gICAgfSkgYXMgQ29sdW1uTGlrZVtdO1xuICAgIGlmIChub2RlWydfd2hlcmUnXSkgbmV3UXVlcnlbJ193aGVyZSddID0gdGhpcy5leHBlY3RTaW5nbGUobm9kZVsnX3doZXJlJ10uYWNjZXB0KHRoaXMpLCAnV0hFUkUnKSBhcyBFeHByZXNzaW9uO1xuICAgIG5ld1F1ZXJ5WydfZ3JvdXBCeSddID0gdGhpcy5mbGF0TGlzdChub2RlWydfZ3JvdXBCeSddLm1hcChnID0+IGcuYWNjZXB0KHRoaXMpKSkgYXMgQ29sdW1uW107XG4gICAgaWYgKG5vZGVbJ19oYXZpbmcnXSkgbmV3UXVlcnlbJ19oYXZpbmcnXSA9IHRoaXMuZXhwZWN0U2luZ2xlKG5vZGVbJ19oYXZpbmcnXS5hY2NlcHQodGhpcyksICdIQVZJTkcnKSBhcyBFeHByZXNzaW9uO1xuICAgIG5ld1F1ZXJ5WydfdW5pb24nXSA9IHRoaXMuZmxhdExpc3Qobm9kZVsnX3VuaW9uJ10ubWFwKHUgPT4gdS5hY2NlcHQodGhpcykpKSBhcyBTZWxlY3RRdWVyeVtdO1xuICAgIG5ld1F1ZXJ5Wydfb3JkZXJCeSddID0gdGhpcy5mbGF0TGlzdChub2RlWydfb3JkZXJCeSddLm1hcChvID0+IG8uYWNjZXB0KHRoaXMpKSkgYXMgT3JkZXJCeVtdO1xuICAgIG5ld1F1ZXJ5Wydfb2Zmc2V0J10gPSBub2RlWydfb2Zmc2V0J107XG4gICAgbmV3UXVlcnlbJ19saW1pdCddID0gbm9kZVsnX2xpbWl0J107XG4gICAgcmV0dXJuIG5ld1F1ZXJ5O1xuICB9XG5cbiAgdmlzaXRJbnNlcnRRdWVyeShub2RlOiBJbnNlcnRRdWVyeSk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgY29uc3QgbmV3UXVlcnkgPSBuZXcgSW5zZXJ0UXVlcnkobm9kZVsnX3RhYmxlTmFtZSddKTtcbiAgICBuZXdRdWVyeVsnX29yUmVwbGFjZSddID0gbm9kZVsnX29yUmVwbGFjZSddO1xuICAgIG5ld1F1ZXJ5WydfY29sdW1ucyddID0gWy4uLm5vZGVbJ19jb2x1bW5zJ11dOyAvLyBTdHJpbmdzLCByZXVzZVxuICAgIG5ld1F1ZXJ5WydfdmFsdWVzJ10gPSB0aGlzLmZsYXRMaXN0KG5vZGVbJ192YWx1ZXMnXS5tYXAodiA9PiB2LmFjY2VwdCh0aGlzKSkpIGFzIEV4cHJlc3Npb25bXTtcbiAgICByZXR1cm4gbmV3UXVlcnk7XG4gIH1cblxuICB2aXNpdFRhYmxlRnJvbShub2RlOiBUYWJsZUZyb20pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgVGFibGVGcm9tKG5vZGUudGFibGVOYW1lKTtcbiAgfVxuXG4gIHZpc2l0U3VicXVlcnlGcm9tKG5vZGU6IFN1YnF1ZXJ5RnJvbSk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIG5ldyBTdWJxdWVyeUZyb20odGhpcy5leHBlY3RTaW5nbGUobm9kZS5zdWJxdWVyeS5hY2NlcHQodGhpcyksICdzdWJxdWVyeScpIGFzIFNlbGVjdFF1ZXJ5KTtcbiAgfVxuXG4gIHZpc2l0SnNvbkVhY2hGcm9tKG5vZGU6IEpzb25FYWNoRnJvbSk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgY29uc3QgbmV3SnNvbkV4cHIgPSB0aGlzLmV4cGVjdFNpbmdsZShub2RlLmpzb25FeHByZXNzaW9uLmFjY2VwdCh0aGlzKSwgJ2pzb25FeHByZXNzaW9uJykgYXMgRXhwcmVzc2lvbjtcbiAgICBjb25zdCBuZXdKc29uUGF0aCA9IG5vZGUuanNvblBhdGggPyB0aGlzLmV4cGVjdFNpbmdsZShub2RlLmpzb25QYXRoLmFjY2VwdCh0aGlzKSwgJ2pzb25QYXRoJykgYXMgRXhwcmVzc2lvbiA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbmV3IEpzb25FYWNoRnJvbShuZXdKc29uRXhwciwgbmV3SnNvblBhdGgpO1xuICB9XG5cbiAgdmlzaXRDb2x1bW4obm9kZTogQ29sdW1uKTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gbmV3IENvbHVtbihub2RlLmhhc1RhYmxlTmFtZSgpID8gbm9kZS50YWJsZU5hbWUhIDogbm9kZS5jb2x1bW5OYW1lLCBub2RlLmhhc1RhYmxlTmFtZSgpID8gbm9kZS5jb2x1bW5OYW1lIDogdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHZpc2l0QWxpYXM8VCBleHRlbmRzIEFsaWFzYWJsZT4obm9kZTogQWxpYXM8VD4pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgQWxpYXModGhpcy5leHBlY3RTaW5nbGUobm9kZS5yZWZlcmVudC5hY2NlcHQodGhpcyksICdyZWZlcmVudCcpIGFzIFQsIG5vZGUuYWxpYXMpO1xuICB9XG5cbiAgdmlzaXRKb2luQ2xhdXNlKG5vZGU6IEpvaW4pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgSm9pbihub2RlLnR5cGUsIG5vZGUudGFibGVOYW1lLCBub2RlLmFsaWFzLCB0aGlzLmV4cGVjdFNpbmdsZShub2RlLm9uLmFjY2VwdCh0aGlzKSwgJ29uJykgYXMgRXhwcmVzc2lvbik7XG4gIH1cblxuICB2aXNpdE9yZGVyQnkobm9kZTogT3JkZXJCeSk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIG5ldyBPcmRlckJ5KHRoaXMuZXhwZWN0U2luZ2xlKG5vZGUuY29sdW1uLmFjY2VwdCh0aGlzKSwgJ2NvbHVtbicpIGFzIEV4cHJlc3Npb24sIG5vZGUuZGlyZWN0aW9uKTtcbiAgfVxuXG4gIHZpc2l0V2l0aENsYXVzZShub2RlOiBXaXRoKTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gbmV3IFdpdGgobm9kZS5uYW1lLCB0aGlzLmV4cGVjdFNpbmdsZShub2RlLnF1ZXJ5LmFjY2VwdCh0aGlzKSwgJ3F1ZXJ5JykgYXMgU2VsZWN0UXVlcnkpO1xuICB9XG5cbiAgdmlzaXRCaW5hcnlFeHByZXNzaW9uKG5vZGU6IEJpbmFyeUV4cHJlc3Npb24pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgQmluYXJ5RXhwcmVzc2lvbihcbiAgICAgIHRoaXMuZXhwZWN0U2luZ2xlKG5vZGUubGVmdC5hY2NlcHQodGhpcyksICdsZWZ0JykgYXMgRXhwcmVzc2lvbixcbiAgICAgIG5vZGUub3BlcmF0b3IsXG4gICAgICB0aGlzLmV4cGVjdFNpbmdsZShub2RlLnJpZ2h0LmFjY2VwdCh0aGlzKSwgJ3JpZ2h0JykgYXMgRXhwcmVzc2lvblxuICAgICk7XG4gIH1cblxuICB2aXNpdFVuYXJ5RXhwcmVzc2lvbihub2RlOiBVbmFyeUV4cHJlc3Npb24pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgVW5hcnlFeHByZXNzaW9uKG5vZGUub3BlcmF0b3IsIHRoaXMuZXhwZWN0U2luZ2xlKG5vZGUub3BlcmFuZC5hY2NlcHQodGhpcyksICdvcGVyYW5kJykgYXMgRXhwcmVzc2lvbik7XG4gIH1cblxuICB2aXNpdEluRXhwcmVzc2lvbihub2RlOiBJbkV4cHJlc3Npb24pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIGNvbnN0IG5ld0xlZnQgPSB0aGlzLmZsYXRMaXN0KG5vZGUubGVmdC5tYXAobCA9PiBsLmFjY2VwdCh0aGlzKSkpIGFzIEV4cHJlc3Npb25bXTtcbiAgICBsZXQgbmV3VmFsdWVzOiBFeHByZXNzaW9uW11bXSB8IFNlbGVjdFF1ZXJ5O1xuICAgIGlmIChub2RlLnZhbHVlcyBpbnN0YW5jZW9mIFNlbGVjdFF1ZXJ5KSB7XG4gICAgICBuZXdWYWx1ZXMgPSB0aGlzLmV4cGVjdFNpbmdsZShub2RlLnZhbHVlcy5hY2NlcHQodGhpcyksICd2YWx1ZXMgc3VicXVlcnknKSBhcyBTZWxlY3RRdWVyeTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbmV3U2V0czogRXhwcmVzc2lvbltdW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3Qgc2V0IG9mIG5vZGUudmFsdWVzKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkU2V0UGFydHM6IChFeHByZXNzaW9uIHwgRXhwcmVzc2lvbltdKVtdID0gc2V0Lm1hcCh2ID0+IHYuYWNjZXB0KHRoaXMpKTtcbiAgICAgICAgaWYgKHNldC5sZW5ndGggPiAxICYmIHRyYW5zZm9ybWVkU2V0UGFydHMuc29tZShBcnJheS5pc0FycmF5KSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXJyYXkgcmVwbGFjZW1lbnQgbm90IGFsbG93ZWQgaW4gbXVsdGktY29sdW1uIHR1cGxlIHBvc2l0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNldC5sZW5ndGggPT09IDEgJiYgQXJyYXkuaXNBcnJheSh0cmFuc2Zvcm1lZFNldFBhcnRzWzBdKSkge1xuICAgICAgICAgIC8vIFNpbmdsZS1jb2x1bW4gc3BsaWNlOiBhZGQgYXMgc2VwYXJhdGUgc2V0c1xuICAgICAgICAgIHRyYW5zZm9ybWVkU2V0UGFydHNbMF0uZm9yRWFjaChyID0+IG5ld1NldHMucHVzaChbcl0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBOb3JtYWwgb3IgbXVsdGktY29sdW1uIChubyBhcnJheXMpXG4gICAgICAgICAgbmV3U2V0cy5wdXNoKHRyYW5zZm9ybWVkU2V0UGFydHMgYXMgRXhwcmVzc2lvbltdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmV3VmFsdWVzID0gbmV3U2V0cztcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBJbkV4cHJlc3Npb24obmV3TGVmdCwgbmV3VmFsdWVzLCBub2RlLm5vdCk7XG4gIH1cblxuICB2aXNpdENvbmNhdChub2RlOiBDb25jYXQpOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgQ29uY2F0KC4uLih0aGlzLmZsYXRMaXN0KG5vZGUuZXhwcmVzc2lvbnMubWFwKGUgPT4gZS5hY2NlcHQodGhpcykpKSBhcyBFeHByZXNzaW9uW10pKTtcbiAgfVxuXG4gIHZpc2l0Q2FzZUV4cHJlc3Npb24obm9kZTogQ2FzZUV4cHJlc3Npb24pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIGNvbnN0IG5ld0Nhc2VzOiBDYXNlSXRlbVtdID0gbm9kZS5jYXNlcy5tYXAoYyA9PiAoe1xuICAgICAgd2hlbjogdGhpcy5leHBlY3RTaW5nbGUoYy53aGVuLmFjY2VwdCh0aGlzKSwgJ3doZW4nKSBhcyBFeHByZXNzaW9uLFxuICAgICAgdGhlbjogdGhpcy5leHBlY3RTaW5nbGUoYy50aGVuLmFjY2VwdCh0aGlzKSwgJ3RoZW4nKSBhcyBFeHByZXNzaW9uXG4gICAgfSkpO1xuICAgIGNvbnN0IG5ld0Vsc2UgPSBub2RlLmVsc2UgPyB0aGlzLmV4cGVjdFNpbmdsZShub2RlLmVsc2UuYWNjZXB0KHRoaXMpLCAnZWxzZScpIGFzIEV4cHJlc3Npb24gOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIG5ldyBDYXNlRXhwcmVzc2lvbihuZXdDYXNlcywgbmV3RWxzZSk7XG4gIH1cblxuICB2aXNpdEZ1bmN0aW9uRXhwcmVzc2lvbihub2RlOiBGdW5jdGlvbkV4cHJlc3Npb24pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb25FeHByZXNzaW9uKG5vZGUubmFtZSBhcyBGdW5jdGlvbk5hbWUsIHRoaXMuZmxhdExpc3Qobm9kZS5hcmdzLm1hcChhID0+IGEuYWNjZXB0KHRoaXMpKSkgYXMgRXhwcmVzc2lvbltdKTtcbiAgfVxuXG4gIHZpc2l0UGFyYW1FeHByZXNzaW9uKG5vZGU6IFBhcmFtKTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gbmV3IFBhcmFtKG5vZGUucGFyYW1OYW1lKTtcbiAgfVxuXG4gIHZpc2l0U3RyaW5nTGl0ZXJhbChub2RlOiBTdHJpbmdMaXRlcmFsKTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gbmV3IFN0cmluZ0xpdGVyYWwobm9kZS52YWx1ZSk7XG4gIH1cblxuICB2aXNpdE51bWJlckxpdGVyYWwobm9kZTogTnVtYmVyTGl0ZXJhbCk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIG5ldyBOdW1iZXJMaXRlcmFsKG5vZGUudmFsdWUpO1xuICB9XG5cbiAgdmlzaXROdWxsTGl0ZXJhbChub2RlOiBOdWxsTGl0ZXJhbCk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIE51bGxMaXRlcmFsLklOU1RBTkNFO1xuICB9XG5cbiAgdmlzaXRFeGlzdHNFeHByZXNzaW9uKG5vZGU6IEV4aXN0c0V4cHJlc3Npb24pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgRXhpc3RzRXhwcmVzc2lvbih0aGlzLmV4cGVjdFNpbmdsZShub2RlLnN1YnF1ZXJ5LmFjY2VwdCh0aGlzKSwgJ3N1YnF1ZXJ5JykgYXMgU2VsZWN0UXVlcnkpO1xuICB9XG59XG4iXX0=
388
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUXVlcnlJZGVudGl0eVRyYW5zZm9ybWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Zpc2l0b3IvUXVlcnlJZGVudGl0eVRyYW5zZm9ybWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHdDQUFxQztBQUNyQyw0REFBeUQ7QUFDekQsZ0VBQTZEO0FBQzdELDhEQUEyRDtBQUMzRCwwREFBaUU7QUFDakUsMERBQXVEO0FBQ3ZELGdFQUE2RDtBQUM3RCxrRUFBK0Q7QUFDL0QsOERBQTJEO0FBQzNELG9FQUFpRTtBQUNqRSwwQ0FBbUQ7QUFDbkQsMENBQXVDO0FBQ3ZDLDhEQUEyRDtBQUMzRCw4REFBOEY7QUFDOUYsNEVBQXlFO0FBQ3pFLDREQUF5RDtBQUN6RCxvREFBaUQ7QUFDakQsMERBQXVEO0FBQ3ZELDBEQUF1RDtBQUN2RCx3REFBcUQ7QUFDckQsOERBQTJEO0FBQzNELHNDQUFvRjtBQUNwRixrRUFBK0Q7QUFFL0Qsc0RBQW1EO0FBQ25ELG9EQUFrRTtBQUNsRSxvREFBNEQ7QUFDNUQsc0NBQTZDO0FBQzdDLDhDQUFtRjtBQUVuRiw0Q0FBMkQ7QUFDM0Qsb0RBQWlEO0FBQ2pELDREQUF5RDtBQUN6RCxzQ0FBbUM7QUFHbkMsTUFBYSx3QkFBd0I7SUFDNUIsU0FBUyxDQUFDLElBQWlCO1FBQ2hDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1FBQy9FLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRVMsWUFBWSxDQUF3QixNQUFtQyxFQUFFLFFBQWdCO1FBQ2pHLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSxL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QUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxpQkFBaUIsQ0FBdUIsQ0FBQztRQUVyRyxNQUFNLGFBQWEsR0FBRyxJQUFJLHlDQUFtQixFQUFFLENBQUM7UUFDaEQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsRCxhQUFhLENBQUMsY0FBYyxDQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFpQixDQUMzRixDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzlDLGFBQWEsQ0FBQyxVQUFVLENBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFjLENBQ3BGLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxJQUFJLG1DQUFnQixDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNwRCxDQUFDO0NBQ0Y7QUFqYUQsNERBaWFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWxpYXNhYmxlLCBBbGlhc2FibGVFeHByZXNzaW9uLCBFeHByZXNzaW9uLCBTcWxUcmVlTm9kZSB9IGZyb20gXCIuLi9hc3QvQWJzdHJhY3Rpb25zXCI7XG5pbXBvcnQgeyBBbGlhcyB9IGZyb20gXCIuLi9hc3QvQWxpYXNcIjtcbmltcG9ydCB7IEFsdGVyVGFibGVRdWVyeSB9IGZyb20gXCIuLi9hc3QvQWx0ZXJUYWJsZVF1ZXJ5XCI7XG5pbXBvcnQgeyBCZXR3ZWVuRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvQmV0d2VlbkV4cHJlc3Npb25cIjtcbmltcG9ydCB7IEJpbmFyeUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0JpbmFyeUV4cHJlc3Npb25cIjtcbmltcG9ydCB7IENhc2VFeHByZXNzaW9uLCBDYXNlSXRlbSB9IGZyb20gXCIuLi9hc3QvQ2FzZUV4cHJlc3Npb25cIjtcbmltcG9ydCB7IENhc3RFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9DYXN0RXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgQ29sbGF0ZUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0NvbGxhdGVFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBTdWJxdWVyeUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L1N1YnF1ZXJ5RXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgV2luZG93RXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvV2luZG93RXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgV2luZG93U3BlY2lmaWNhdGlvbiB9IGZyb20gXCIuLi9hc3QvV2luZG93U3BlY2lmaWNhdGlvblwiO1xuaW1wb3J0IHsgQ29sdW1uLCBDb2x1bW5MaWtlIH0gZnJvbSBcIi4uL2FzdC9Db2x1bW5cIjtcbmltcG9ydCB7IENvbmNhdCB9IGZyb20gXCIuLi9hc3QvQ29uY2F0XCI7XG5pbXBvcnQgeyBDcmVhdGVJbmRleFF1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9DcmVhdGVJbmRleFF1ZXJ5XCI7XG5pbXBvcnQgeyBDcmVhdGVUYWJsZVF1ZXJ5LCBDb2x1bW5EZWZpbml0aW9uLCBUYWJsZUNvbnN0cmFpbnQgfSBmcm9tIFwiLi4vYXN0L0NyZWF0ZVRhYmxlUXVlcnlcIjtcbmltcG9ydCB7IENyZWF0ZVZpcnR1YWxUYWJsZVF1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9DcmVhdGVWaXJ0dWFsVGFibGVRdWVyeVwiO1xuaW1wb3J0IHsgQ3JlYXRlVmlld1F1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9DcmVhdGVWaWV3UXVlcnlcIjtcbmltcG9ydCB7IERlbGV0ZVF1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9EZWxldGVRdWVyeVwiO1xuaW1wb3J0IHsgRHJvcEluZGV4UXVlcnkgfSBmcm9tIFwiLi4vYXN0L0Ryb3BJbmRleFF1ZXJ5XCI7XG5pbXBvcnQgeyBEcm9wVGFibGVRdWVyeSB9IGZyb20gXCIuLi9hc3QvRHJvcFRhYmxlUXVlcnlcIjtcbmltcG9ydCB7IERyb3BWaWV3UXVlcnkgfSBmcm9tIFwiLi4vYXN0L0Ryb3BWaWV3UXVlcnlcIjtcbmltcG9ydCB7IEV4aXN0c0V4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0V4aXN0c0V4cHJlc3Npb25cIjtcbmltcG9ydCB7IEZyb20sIEZyb21MaWtlLCBKc29uRWFjaEZyb20sIFN1YnF1ZXJ5RnJvbSwgVGFibGVGcm9tIH0gZnJvbSBcIi4uL2FzdC9Gcm9tXCI7XG5pbXBvcnQgeyBGdW5jdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0Z1bmN0aW9uRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgRnVuY3Rpb25OYW1lIH0gZnJvbSBcIi4uL2FzdC9GdW5jdGlvbk5hbWVcIjtcbmltcG9ydCB7IEluRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvSW5FeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBJbnNlcnRRdWVyeSwgVXBzZXJ0U2V0Q2xhdXNlIH0gZnJvbSBcIi4uL2FzdC9JbnNlcnRRdWVyeVwiO1xuaW1wb3J0IHsgVXBkYXRlUXVlcnksIFNldENsYXVzZSB9IGZyb20gXCIuLi9hc3QvVXBkYXRlUXVlcnlcIjtcbmltcG9ydCB7IEpvaW4sIEpvaW5UeXBlIH0gZnJvbSBcIi4uL2FzdC9Kb2luXCI7XG5pbXBvcnQgeyBOdWxsTGl0ZXJhbCwgTnVtYmVyTGl0ZXJhbCwgUGFyYW0sIFN0cmluZ0xpdGVyYWwgfSBmcm9tIFwiLi4vYXN0L0xpdGVyYWxzXCI7XG5pbXBvcnQgeyBPcGVyYXRvciB9IGZyb20gXCIuLi9hc3QvT3BlcmF0b3JcIjtcbmltcG9ydCB7IE9yZGVyQnksIE9yZGVyQnlEaXJlY3Rpb24gfSBmcm9tIFwiLi4vYXN0L09yZGVyQnlcIjtcbmltcG9ydCB7IFNlbGVjdFF1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9TZWxlY3RRdWVyeVwiO1xuaW1wb3J0IHsgVW5hcnlFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9VbmFyeUV4cHJlc3Npb25cIjtcbmltcG9ydCB7IFdpdGggfSBmcm9tIFwiLi4vYXN0L1dpdGhcIjtcbmltcG9ydCB7IFNxbFRyZWVOb2RlVHJhbnNmb3JtZXIgfSBmcm9tIFwiLi9TcWxUcmVlTm9kZVRyYW5zZm9ybWVyXCI7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeUlkZW50aXR5VHJhbnNmb3JtZXIgaW1wbGVtZW50cyBTcWxUcmVlTm9kZVRyYW5zZm9ybWVyIHtcbiAgcHVibGljIHRyYW5zZm9ybShub2RlOiBTcWxUcmVlTm9kZSk6IFNxbFRyZWVOb2RlIHtcbiAgICBjb25zdCByZXN1bHQgPSBub2RlLmFjY2VwdCh0aGlzKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvcC1sZXZlbCB0cmFuc2Zvcm1hdGlvbiBtdXN0IHJldHVybiBhIHNpbmdsZSBTcWxUcmVlTm9kZScpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJvdGVjdGVkIGV4cGVjdFNpbmdsZTxUIGV4dGVuZHMgU3FsVHJlZU5vZGU+KHJlc3VsdDogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdLCB0eXBlTmFtZTogc3RyaW5nKTogVCB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGFycmF5IGluIHNpbmdsZS1ub2RlIGNvbnRleHQgZm9yICR7dHlwZU5hbWV9YCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQgYXMgVDtcbiAgfVxuXG4gIHByb3RlY3RlZCBmbGF0TGlzdChyZXN1bHRzOiAoU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdKVtdKTogU3FsVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIHJlc3VsdHMuZmxhdE1hcChyID0+IEFycmF5LmlzQXJyYXkocikgPyByIDogW3JdKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBmbGF0TGlzdDJEKHJlc3VsdHM6IChTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10pW11bXSk6IFNxbFRyZWVOb2RlW11bXSB7XG4gICAgcmV0dXJuIHJlc3VsdHMubWFwKHNldCA9PiB0aGlzLmZsYXRMaXN0KHNldCkpO1xuICB9XG5cbiAgdmlzaXRTZWxlY3RRdWVyeShub2RlOiBTZWxlY3RRdWVyeSk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgY29uc3QgbmV3UXVlcnkgPSBuZXcgU2VsZWN0UXVlcnkoKTtcbiAgICBuZXdRdWVyeVsnX2Rpc3RpbmN0J10gPSBub2RlWydfZGlzdGluY3QnXTtcbiAgICBuZXdRdWVyeVsnX3dpdGgnXSA9IHRoaXMuZmxhdExpc3Qobm9kZVsnX3dpdGgnXS5tYXAodyA9PiB3LmFjY2VwdCh0aGlzKSkpIGFzIFdpdGhbXTtcbiAgICBuZXdRdWVyeVsnX2Zyb21zQW5kSm9pbnMnXSA9IG5vZGVbJ19mcm9tc0FuZEpvaW5zJ10ubWFwKGZqID0+IHtcbiAgICAgIGlmIChmaiAmJiB0eXBlb2YgZmogPT09ICdvYmplY3QnICYmICdyZWZlcmVudCcgaW4gZmogJiYgJ2FsaWFzJyBpbiBmaikge1xuICAgICAgICByZXR1cm4gbmV3IEFsaWFzKHRoaXMuZXhwZWN0U2luZ2xlKGZqLnJlZmVyZW50LmFjY2VwdCh0aGlzKSwgJ3JlZmVyZW50JykgYXMgRnJvbSwgZmouYWxpYXMpO1xuICAgICAgfSBlbHNlIGlmIChmaiAmJiB0eXBlb2YgZmogPT09ICdvYmplY3QnICYmICdhY2NlcHQnIGluIGZqKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4cGVjdFNpbmdsZSgoZmogYXMgYW55KS5hY2NlcHQodGhpcyksICdmcm9tL2pvaW4nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmcm9tL2pvaW4gb2JqZWN0Jyk7XG4gICAgICB9XG4gICAgfSkgYXMgKEZyb21MaWtlIHwgSm9pbilbXTtcbiAgICBuZXdRdWVyeVsnX2NvbHVtbnMnXSA9IG5vZGVbJ19jb2x1bW5zJ10ubWFwKGMgPT4ge1xuICAgICAgaWYgKGMgJiYgdHlwZW9mIGMgPT09ICdvYmplY3QnICYmICdyZWZlcmVudCcgaW4gYyAmJiAnYWxpYXMnIGluIGMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbGlhcyh0aGlzLmV4cGVjdFNpbmdsZShjLnJlZmVyZW50LmFjY2VwdCh0aGlzKSwgJ3JlZmVyZW50JykgYXMgQWxpYXNhYmxlRXhwcmVzc2lvbiwgYy5hbGlhcyk7XG4gICAgICB9IGVsc2UgaWYgKGMgJiYgdHlwZW9mIGMgPT09ICdvYmplY3QnICYmICdhY2NlcHQnIGluIGMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwZWN0U2luZ2xlKChjIGFzIGFueSkuYWNjZXB0KHRoaXMpLCAnY29sdW1uJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29sdW1uIG9iamVjdCcpO1xuICAgICAgfVxuICAgIH0pIGFzIENvbHVtbkxpa2VbXTtcbiAgICBpZiAobm9kZVsnX3doZXJlJ10pIG5ld1F1ZXJ5Wydfd2hlcmUnXSA9IHRoaXMuZXhwZWN0U2luZ2xlKG5vZGVbJ193aGVyZSddLmFjY2VwdCh0aGlzKSwgJ1dIRVJFJykgYXMgRXhwcmVzc2lvbjtcbiAgICBuZXdRdWVyeVsnX2dyb3VwQnknXSA9IHRoaXMuZmxhdExpc3Qobm9kZVsnX2dyb3VwQnknXS5tYXAoZyA9PiBnLmFjY2VwdCh0aGlzKSkpIGFzIENvbHVtbltdO1xuICAgIGlmIChub2RlWydfaGF2aW5nJ10pIG5ld1F1ZXJ5WydfaGF2aW5nJ10gPSB0aGlzLmV4cGVjdFNpbmdsZShub2RlWydfaGF2aW5nJ10uYWNjZXB0KHRoaXMpLCAnSEFWSU5HJykgYXMgRXhwcmVzc2lvbjtcbiAgICBuZXdRdWVyeVsnX3VuaW9uJ10gPSB0aGlzLmZsYXRMaXN0KG5vZGVbJ191bmlvbiddLm1hcCh1ID0+IHUuYWNjZXB0KHRoaXMpKSkgYXMgU2VsZWN0UXVlcnlbXTtcbiAgICBuZXdRdWVyeVsnX2ludGVyc2VjdCddID0gdGhpcy5mbGF0TGlzdChub2RlWydfaW50ZXJzZWN0J10ubWFwKGkgPT4gaS5hY2NlcHQodGhpcykpKSBhcyBTZWxlY3RRdWVyeVtdO1xuICAgIG5ld1F1ZXJ5WydfZXhjZXB0J10gPSB0aGlzLmZsYXRMaXN0KG5vZGVbJ19leGNlcHQnXS5tYXAoZSA9PiBlLmFjY2VwdCh0aGlzKSkpIGFzIFNlbGVjdFF1ZXJ5W107XG4gICAgbmV3UXVlcnlbJ19vcmRlckJ5J10gPSB0aGlzLmZsYXRMaXN0KG5vZGVbJ19vcmRlckJ5J10ubWFwKG8gPT4gby5hY2NlcHQodGhpcykpKSBhcyBPcmRlckJ5W107XG4gICAgbmV3UXVlcnlbJ19vZmZzZXQnXSA9IG5vZGVbJ19vZmZzZXQnXTtcbiAgICBuZXdRdWVyeVsnX2xpbWl0J10gPSBub2RlWydfbGltaXQnXTtcbiAgICByZXR1cm4gbmV3UXVlcnk7XG4gIH1cblxuICB2aXNpdEluc2VydFF1ZXJ5KG5vZGU6IEluc2VydFF1ZXJ5KTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICBjb25zdCBuZXdRdWVyeSA9IG5ldyBJbnNlcnRRdWVyeShub2RlWydfdGFibGVOYW1lJ10pO1xuICAgIG5ld1F1ZXJ5Wydfb3JSZXBsYWNlJ10gPSBub2RlWydfb3JSZXBsYWNlJ107XG4gICAgbmV3UXVlcnlbJ19jb2x1bW5zJ10gPSBbLi4ubm9kZVsnX2NvbHVtbnMnXV07IC8vIFN0cmluZ3MsIHJldXNlXG4gICAgaWYgKG5vZGVbJ19mcm9tU2VsZWN0J10pIHtcbiAgICAgIG5ld1F1ZXJ5WydfZnJvbVNlbGVjdCddID0gdGhpcy5leHBlY3RTaW5nbGUobm9kZVsnX2Zyb21TZWxlY3QnXS5hY2NlcHQodGhpcyksICdmcm9tU2VsZWN0JykgYXMgU2VsZWN0UXVlcnk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1F1ZXJ5WydfdmFsdWVzJ10gPSB0aGlzLmZsYXRMaXN0KG5vZGVbJ192YWx1ZXMnXS5tYXAodiA9PiB2LmFjY2VwdCh0aGlzKSkpIGFzIEV4cHJlc3Npb25bXTtcbiAgICB9XG4gICAgLy8gVHJhbnNmb3JtIE9OIENPTkZMSUNUIGNsYXVzZVxuICAgIG5ld1F1ZXJ5Wydfb25Db25mbGljdENvbHVtbnMnXSA9IFsuLi5ub2RlWydfb25Db25mbGljdENvbHVtbnMnXV07XG4gICAgbmV3UXVlcnlbJ19kb05vdGhpbmcnXSA9IG5vZGVbJ19kb05vdGhpbmcnXTtcbiAgICBuZXdRdWVyeVsnX2RvVXBkYXRlU2V0cyddID0gbm9kZVsnX2RvVXBkYXRlU2V0cyddLm1hcChzID0+ICh7XG4gICAgICBjb2x1bW46IHMuY29sdW1uLFxuICAgICAgdmFsdWU6IHRoaXMuZXhwZWN0U2luZ2xlKHMudmFsdWUuYWNjZXB0KHRoaXMpLCAnRE8gVVBEQVRFIHZhbHVlJykgYXMgRXhwcmVzc2lvblxuICAgIH0pKSBhcyBVcHNlcnRTZXRDbGF1c2VbXTtcbiAgICBpZiAobm9kZVsnX29uQ29uZmxpY3RXaGVyZSddKSB7XG4gICAgICBuZXdRdWVyeVsnX29uQ29uZmxpY3RXaGVyZSddID0gdGhpcy5leHBlY3RTaW5nbGUobm9kZVsnX29uQ29uZmxpY3RXaGVyZSddLmFjY2VwdCh0aGlzKSwgJ09OIENPTkZMSUNUIFdIRVJFJykgYXMgRXhwcmVzc2lvbjtcbiAgICB9XG4gICAgbmV3UXVlcnlbJ19yZXR1cm5pbmcnXSA9IHRoaXMuZmxhdExpc3Qobm9kZVsnX3JldHVybmluZyddLm1hcChyID0+IHIuYWNjZXB0KHRoaXMpKSkgYXMgQWxpYXNhYmxlRXhwcmVzc2lvbltdO1xuICAgIHJldHVybiBuZXdRdWVyeTtcbiAgfVxuXG4gIHZpc2l0RGVsZXRlUXVlcnkobm9kZTogRGVsZXRlUXVlcnkpOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIGNvbnN0IG5ld1F1ZXJ5ID0gbmV3IERlbGV0ZVF1ZXJ5KG5vZGVbJ190YWJsZU5hbWUnXSk7XG4gICAgaWYgKG5vZGVbJ193aGVyZSddKSB7XG4gICAgICBuZXdRdWVyeVsnX3doZXJlJ10gPSB0aGlzLmV4cGVjdFNpbmdsZShub2RlWydfd2hlcmUnXS5hY2NlcHQodGhpcyksICdXSEVSRScpIGFzIEV4cHJlc3Npb247XG4gICAgfVxuICAgIG5ld1F1ZXJ5WydfcmV0dXJuaW5nJ10gPSB0aGlzLmZsYXRMaXN0KG5vZGVbJ19yZXR1cm5pbmcnXS5tYXAociA9PiByLmFjY2VwdCh0aGlzKSkpIGFzIEFsaWFzYWJsZUV4cHJlc3Npb25bXTtcbiAgICByZXR1cm4gbmV3UXVlcnk7XG4gIH1cblxuICB2aXNpdFVwZGF0ZVF1ZXJ5KG5vZGU6IFVwZGF0ZVF1ZXJ5KTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICBjb25zdCBuZXdRdWVyeSA9IG5ldyBVcGRhdGVRdWVyeShub2RlWydfdGFibGVOYW1lJ10pO1xuICAgIG5vZGVbJ19zZXQnXS5mb3JFYWNoKHMgPT4ge1xuICAgICAgbmV3UXVlcnkuc2V0KHMuY29sdW1uLCB0aGlzLmV4cGVjdFNpbmdsZShzLnZhbHVlLmFjY2VwdCh0aGlzKSwgJ1NFVCB2YWx1ZScpIGFzIEV4cHJlc3Npb24pO1xuICAgIH0pO1xuICAgIGlmIChub2RlWydfd2hlcmUnXSkge1xuICAgICAgbmV3UXVlcnlbJ193aGVyZSddID0gdGhpcy5leHBlY3RTaW5nbGUobm9kZVsnX3doZXJlJ10uYWNjZXB0KHRoaXMpLCAnV0hFUkUnKSBhcyBFeHByZXNzaW9uO1xuICAgIH1cbiAgICBuZXdRdWVyeVsnX3JldHVybmluZyddID0gdGhpcy5mbGF0TGlzdChub2RlWydfcmV0dXJuaW5nJ10ubWFwKHIgPT4gci5hY2NlcHQodGhpcykpKSBhcyBBbGlhc2FibGVFeHByZXNzaW9uW107XG4gICAgcmV0dXJuIG5ld1F1ZXJ5O1xuICB9XG5cbiAgdmlzaXREcm9wVGFibGVRdWVyeShub2RlOiBEcm9wVGFibGVRdWVyeSk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgY29uc3QgbmV3UXVlcnkgPSBuZXcgRHJvcFRhYmxlUXVlcnkobm9kZS50YWJsZU5hbWUpO1xuICAgIGlmIChub2RlLmhhc0lmRXhpc3RzKSB7XG4gICAgICBuZXdRdWVyeS5pZkV4aXN0cygpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3UXVlcnk7XG4gIH1cblxuICB2aXNpdERyb3BJbmRleFF1ZXJ5KG5vZGU6IERyb3BJbmRleFF1ZXJ5KTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICBjb25zdCBuZXdRdWVyeSA9IG5ldyBEcm9wSW5kZXhRdWVyeShub2RlLmluZGV4TmFtZSk7XG4gICAgaWYgKG5vZGUuaGFzSWZFeGlzdHMpIHtcbiAgICAgIG5ld1F1ZXJ5LmlmRXhpc3RzKCk7XG4gICAgfVxuICAgIHJldHVybiBuZXdRdWVyeTtcbiAgfVxuXG4gIHZpc2l0RHJvcFZpZXdRdWVyeShub2RlOiBEcm9wVmlld1F1ZXJ5KTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICBjb25zdCBuZXdRdWVyeSA9IG5ldyBEcm9wVmlld1F1ZXJ5KG5vZGUudmlld05hbWUpO1xuICAgIGlmIChub2RlLmhhc0lmRXhpc3RzKSB7XG4gICAgICBuZXdRdWVyeS5pZkV4aXN0cygpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3UXVlcnk7XG4gIH1cblxuICB2aXNpdENyZWF0ZVZpZXdRdWVyeShub2RlOiBDcmVhdGVWaWV3UXVlcnkpOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIGNvbnN0IG5ld1F1ZXJ5ID0gbmV3IENyZWF0ZVZpZXdRdWVyeShub2RlLnZpZXdOYW1lKTtcblxuICAgIGlmIChub2RlLmNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgbmV3UXVlcnkud2l0aENvbHVtbnMoLi4ubm9kZS5jb2x1bW5zKTtcbiAgICB9XG4gICAgaWYgKG5vZGUuaXNUZW1wb3JhcnkpIHtcbiAgICAgIG5ld1F1ZXJ5LnRlbXBvcmFyeSgpO1xuICAgIH1cbiAgICBpZiAobm9kZS5oYXNJZk5vdEV4aXN0cykge1xuICAgICAgbmV3UXVlcnkuaWZOb3RFeGlzdHMoKTtcbiAgICB9XG4gICAgaWYgKG5vZGUuc2VsZWN0UXVlcnkpIHtcbiAgICAgIG5ld1F1ZXJ5LmFzKHRoaXMuZXhwZWN0U2luZ2xlKG5vZGUuc2VsZWN0UXVlcnkuYWNjZXB0KHRoaXMpLCAnU0VMRUNUJykgYXMgU2VsZWN0UXVlcnkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdRdWVyeTtcbiAgfVxuXG4gIHZpc2l0Q3JlYXRlSW5kZXhRdWVyeShub2RlOiBDcmVhdGVJbmRleFF1ZXJ5KTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICBjb25zdCBuZXdRdWVyeSA9IG5ldyBDcmVhdGVJbmRleFF1ZXJ5KG5vZGUuaW5kZXhOYW1lKTtcbiAgICBuZXdRdWVyeS5vbihub2RlLnRhYmxlTmFtZSwgWy4uLm5vZGUuY29sdW1uc10pO1xuXG4gICAgaWYgKG5vZGUuaXNVbmlxdWUpIHtcbiAgICAgIG5ld1F1ZXJ5LnVuaXF1ZSgpO1xuICAgIH1cbiAgICBpZiAobm9kZS5oYXNJZk5vdEV4aXN0cykge1xuICAgICAgbmV3UXVlcnkuaWZOb3RFeGlzdHMoKTtcbiAgICB9XG4gICAgaWYgKG5vZGUud2hlcmVFeHByZXNzaW9uKSB7XG4gICAgICBuZXdRdWVyeS53aGVyZSh0aGlzLmV4cGVjdFNpbmdsZShub2RlLndoZXJlRXhwcmVzc2lvbi5hY2NlcHQodGhpcyksICdXSEVSRScpIGFzIEV4cHJlc3Npb24pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdRdWVyeTtcbiAgfVxuXG4gIHZpc2l0QWx0ZXJUYWJsZVF1ZXJ5KG5vZGU6IEFsdGVyVGFibGVRdWVyeSk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgY29uc3QgbmV3UXVlcnkgPSBuZXcgQWx0ZXJUYWJsZVF1ZXJ5KG5vZGUudGFibGVOYW1lKTtcbiAgICBjb25zdCBvcCA9IG5vZGUub3BlcmF0aW9uO1xuXG4gICAgaWYgKG9wKSB7XG4gICAgICBzd2l0Y2ggKG9wLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnQUREX0NPTFVNTic6XG4gICAgICAgICAgY29uc3QgbmV3Q29uc3RyYWludHMgPSB7IC4uLm9wLmNvbHVtbi5jb25zdHJhaW50cyB9O1xuICAgICAgICAgIGlmIChvcC5jb2x1bW4uY29uc3RyYWludHMuY2hlY2spIHtcbiAgICAgICAgICAgIG5ld0NvbnN0cmFpbnRzLmNoZWNrID0gdGhpcy5leHBlY3RTaW5nbGUob3AuY29sdW1uLmNvbnN0cmFpbnRzLmNoZWNrLmFjY2VwdCh0aGlzKSwgJ2NoZWNrIGNvbnN0cmFpbnQnKSBhcyBFeHByZXNzaW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgICBuZXdRdWVyeS5hZGRDb2x1bW4ob3AuY29sdW1uLm5hbWUsIG9wLmNvbHVtbi50eXBlLCBuZXdDb25zdHJhaW50cyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1JFTkFNRV9DT0xVTU4nOlxuICAgICAgICAgIG5ld1F1ZXJ5LnJlbmFtZUNvbHVtbihvcC5vbGROYW1lLCBvcC5uZXdOYW1lKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnRFJPUF9DT0xVTU4nOlxuICAgICAgICAgIG5ld1F1ZXJ5LmRyb3BDb2x1bW4ob3AuY29sdW1uTmFtZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1JFTkFNRV9UQUJMRSc6XG4gICAgICAgICAgbmV3UXVlcnkucmVuYW1lVG8ob3AubmV3VGFibGVOYW1lKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3UXVlcnk7XG4gIH1cblxuICB2aXNpdENyZWF0ZVRhYmxlUXVlcnkobm9kZTogQ3JlYXRlVGFibGVRdWVyeSk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgY29uc3QgbmV3UXVlcnkgPSBuZXcgQ3JlYXRlVGFibGVRdWVyeShub2RlLnRhYmxlTmFtZSk7XG5cbiAgICAvLyBDb3B5IGNvbHVtbnMgd2l0aCB0cmFuc2Zvcm1lZCBjaGVjayBjb25zdHJhaW50c1xuICAgIGZvciAoY29uc3QgY29sIG9mIG5vZGUuY29sdW1ucykge1xuICAgICAgY29uc3QgbmV3Q29uc3RyYWludHMgPSB7IC4uLmNvbC5jb25zdHJhaW50cyB9O1xuICAgICAgaWYgKGNvbC5jb25zdHJhaW50cy5jaGVjaykge1xuICAgICAgICBuZXdDb25zdHJhaW50cy5jaGVjayA9IHRoaXMuZXhwZWN0U2luZ2xlKGNvbC5jb25zdHJhaW50cy5jaGVjay5hY2NlcHQodGhpcyksICdjaGVjayBjb25zdHJhaW50JykgYXMgRXhwcmVzc2lvbjtcbiAgICAgIH1cbiAgICAgIG5ld1F1ZXJ5LmNvbHVtbihjb2wubmFtZSwgY29sLnR5cGUsIG5ld0NvbnN0cmFpbnRzKTtcbiAgICB9XG5cbiAgICAvLyBDb3B5IHRhYmxlIGNvbnN0cmFpbnRzIHdpdGggdHJhbnNmb3JtZWQgY2hlY2sgZXhwcmVzc2lvbnNcbiAgICBmb3IgKGNvbnN0IGNvbnN0cmFpbnQgb2Ygbm9kZS50YWJsZUNvbnN0cmFpbnRzKSB7XG4gICAgICBzd2l0Y2ggKGNvbnN0cmFpbnQudHlwZSkge1xuICAgICAgICBjYXNlICdQUklNQVJZIEtFWSc6XG4gICAgICAgICAgbmV3UXVlcnkucHJpbWFyeUtleSguLi5jb25zdHJhaW50LmNvbHVtbnMhKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnVU5JUVVFJzpcbiAgICAgICAgICBuZXdRdWVyeS51bmlxdWUoLi4uY29uc3RyYWludC5jb2x1bW5zISk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0ZPUkVJR04gS0VZJzpcbiAgICAgICAgICBuZXdRdWVyeS5mb3JlaWduS2V5KGNvbnN0cmFpbnQuY29sdW1ucyEsIGNvbnN0cmFpbnQucmVmZXJlbmNlcyEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdDSEVDSyc6XG4gICAgICAgICAgY29uc3QgY2hlY2tFeHByID0gdGhpcy5leHBlY3RTaW5nbGUoY29uc3RyYWludC5jaGVjayEuYWNjZXB0KHRoaXMpLCAndGFibGUgY2hlY2sgY29uc3RyYWludCcpIGFzIEV4cHJlc3Npb247XG4gICAgICAgICAgbmV3UXVlcnkuY2hlY2soY2hlY2tFeHByLCBjb25zdHJhaW50Lm5hbWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChub2RlLmhhc0lmTm90RXhpc3RzKSB7XG4gICAgICBuZXdRdWVyeS5pZk5vdEV4aXN0cygpO1xuICAgIH1cbiAgICBpZiAobm9kZS5oYXNXaXRob3V0Um93aWQpIHtcbiAgICAgIG5ld1F1ZXJ5LndpdGhvdXRSb3dpZCgpO1xuICAgIH1cbiAgICBpZiAobm9kZS5pc1N0cmljdCkge1xuICAgICAgbmV3UXVlcnkuc3RyaWN0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld1F1ZXJ5O1xuICB9XG5cbiAgdmlzaXRDcmVhdGVWaXJ0dWFsVGFibGVRdWVyeShub2RlOiBDcmVhdGVWaXJ0dWFsVGFibGVRdWVyeSk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgY29uc3QgbmV3UXVlcnkgPSBuZXcgQ3JlYXRlVmlydHVhbFRhYmxlUXVlcnkobm9kZS50YWJsZU5hbWUsIG5vZGUubW9kdWxlKTtcblxuICAgIC8vIENvcHkgY29sdW1uc1xuICAgIGZvciAoY29uc3QgY29sIG9mIG5vZGUuY29sdW1ucykge1xuICAgICAgbmV3UXVlcnkuY29sdW1uKGNvbCk7XG4gICAgfVxuXG4gICAgLy8gQ29weSBvcHRpb25zXG4gICAgaWYgKG5vZGUub3B0aW9ucy50b2tlbml6ZSkge1xuICAgICAgbmV3UXVlcnkudG9rZW5pemUobm9kZS5vcHRpb25zLnRva2VuaXplKTtcbiAgICB9XG4gICAgaWYgKG5vZGUub3B0aW9ucy5jb250ZW50KSB7XG4gICAgICBuZXdRdWVyeS5jb250ZW50KG5vZGUub3B0aW9ucy5jb250ZW50KTtcbiAgICB9XG4gICAgaWYgKG5vZGUub3B0aW9ucy5jb250ZW50Um93aWQpIHtcbiAgICAgIG5ld1F1ZXJ5LmNvbnRlbnRSb3dpZChub2RlLm9wdGlvbnMuY29udGVudFJvd2lkKTtcbiAgICB9XG4gICAgaWYgKG5vZGUub3B0aW9ucy5wcmVmaXgpIHtcbiAgICAgIG5ld1F1ZXJ5LnByZWZpeChub2RlLm9wdGlvbnMucHJlZml4KTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5oYXNJZk5vdEV4aXN0cykge1xuICAgICAgbmV3UXVlcnkuaWZOb3RFeGlzdHMoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3UXVlcnk7XG4gIH1cblxuICB2aXNpdFRhYmxlRnJvbShub2RlOiBUYWJsZUZyb20pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgVGFibGVGcm9tKG5vZGUudGFibGVOYW1lKTtcbiAgfVxuXG4gIHZpc2l0U3VicXVlcnlGcm9tKG5vZGU6IFN1YnF1ZXJ5RnJvbSk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIG5ldyBTdWJxdWVyeUZyb20odGhpcy5leHBlY3RTaW5nbGUobm9kZS5zdWJxdWVyeS5hY2NlcHQodGhpcyksICdzdWJxdWVyeScpIGFzIFNlbGVjdFF1ZXJ5KTtcbiAgfVxuXG4gIHZpc2l0SnNvbkVhY2hGcm9tKG5vZGU6IEpzb25FYWNoRnJvbSk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgY29uc3QgbmV3SnNvbkV4cHIgPSB0aGlzLmV4cGVjdFNpbmdsZShub2RlLmpzb25FeHByZXNzaW9uLmFjY2VwdCh0aGlzKSwgJ2pzb25FeHByZXNzaW9uJykgYXMgRXhwcmVzc2lvbjtcbiAgICBjb25zdCBuZXdKc29uUGF0aCA9IG5vZGUuanNvblBhdGggPyB0aGlzLmV4cGVjdFNpbmdsZShub2RlLmpzb25QYXRoLmFjY2VwdCh0aGlzKSwgJ2pzb25QYXRoJykgYXMgRXhwcmVzc2lvbiA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbmV3IEpzb25FYWNoRnJvbShuZXdKc29uRXhwciwgbmV3SnNvblBhdGgpO1xuICB9XG5cbiAgdmlzaXRDb2x1bW4obm9kZTogQ29sdW1uKTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gbmV3IENvbHVtbihub2RlLmhhc1RhYmxlTmFtZSgpID8gbm9kZS50YWJsZU5hbWUhIDogbm9kZS5jb2x1bW5OYW1lLCBub2RlLmhhc1RhYmxlTmFtZSgpID8gbm9kZS5jb2x1bW5OYW1lIDogdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHZpc2l0QWxpYXM8VCBleHRlbmRzIEFsaWFzYWJsZT4obm9kZTogQWxpYXM8VD4pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgQWxpYXModGhpcy5leHBlY3RTaW5nbGUobm9kZS5yZWZlcmVudC5hY2NlcHQodGhpcyksICdyZWZlcmVudCcpIGFzIFQsIG5vZGUuYWxpYXMpO1xuICB9XG5cbiAgdmlzaXRKb2luQ2xhdXNlKG5vZGU6IEpvaW4pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgSm9pbihub2RlLnR5cGUsIG5vZGUudGFibGVOYW1lLCBub2RlLmFsaWFzLCB0aGlzLmV4cGVjdFNpbmdsZShub2RlLm9uLmFjY2VwdCh0aGlzKSwgJ29uJykgYXMgRXhwcmVzc2lvbik7XG4gIH1cblxuICB2aXNpdE9yZGVyQnkobm9kZTogT3JkZXJCeSk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIG5ldyBPcmRlckJ5KHRoaXMuZXhwZWN0U2luZ2xlKG5vZGUuY29sdW1uLmFjY2VwdCh0aGlzKSwgJ2NvbHVtbicpIGFzIEV4cHJlc3Npb24sIG5vZGUuZGlyZWN0aW9uKTtcbiAgfVxuXG4gIHZpc2l0V2l0aENsYXVzZShub2RlOiBXaXRoKTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gbmV3IFdpdGgobm9kZS5uYW1lLCB0aGlzLmV4cGVjdFNpbmdsZShub2RlLnF1ZXJ5LmFjY2VwdCh0aGlzKSwgJ3F1ZXJ5JykgYXMgU2VsZWN0UXVlcnkpO1xuICB9XG5cbiAgdmlzaXRCaW5hcnlFeHByZXNzaW9uKG5vZGU6IEJpbmFyeUV4cHJlc3Npb24pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgQmluYXJ5RXhwcmVzc2lvbihcbiAgICAgIHRoaXMuZXhwZWN0U2luZ2xlKG5vZGUubGVmdC5hY2NlcHQodGhpcyksICdsZWZ0JykgYXMgRXhwcmVzc2lvbixcbiAgICAgIG5vZGUub3BlcmF0b3IsXG4gICAgICB0aGlzLmV4cGVjdFNpbmdsZShub2RlLnJpZ2h0LmFjY2VwdCh0aGlzKSwgJ3JpZ2h0JykgYXMgRXhwcmVzc2lvblxuICAgICk7XG4gIH1cblxuICB2aXNpdEJldHdlZW5FeHByZXNzaW9uKG5vZGU6IEJldHdlZW5FeHByZXNzaW9uKTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gbmV3IEJldHdlZW5FeHByZXNzaW9uKFxuICAgICAgdGhpcy5leHBlY3RTaW5nbGUobm9kZS5vcGVyYW5kLmFjY2VwdCh0aGlzKSwgJ29wZXJhbmQnKSBhcyBFeHByZXNzaW9uLFxuICAgICAgdGhpcy5leHBlY3RTaW5nbGUobm9kZS5sb3cuYWNjZXB0KHRoaXMpLCAnbG93JykgYXMgRXhwcmVzc2lvbixcbiAgICAgIHRoaXMuZXhwZWN0U2luZ2xlKG5vZGUuaGlnaC5hY2NlcHQodGhpcyksICdoaWdoJykgYXMgRXhwcmVzc2lvbixcbiAgICAgIG5vZGUubm90XG4gICAgKTtcbiAgfVxuXG4gIHZpc2l0VW5hcnlFeHByZXNzaW9uKG5vZGU6IFVuYXJ5RXhwcmVzc2lvbik6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIG5ldyBVbmFyeUV4cHJlc3Npb24obm9kZS5vcGVyYXRvciwgdGhpcy5leHBlY3RTaW5nbGUobm9kZS5vcGVyYW5kLmFjY2VwdCh0aGlzKSwgJ29wZXJhbmQnKSBhcyBFeHByZXNzaW9uKTtcbiAgfVxuXG4gIHZpc2l0SW5FeHByZXNzaW9uKG5vZGU6IEluRXhwcmVzc2lvbik6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgY29uc3QgbmV3TGVmdCA9IHRoaXMuZmxhdExpc3Qobm9kZS5sZWZ0Lm1hcChsID0+IGwuYWNjZXB0KHRoaXMpKSkgYXMgRXhwcmVzc2lvbltdO1xuICAgIGxldCBuZXdWYWx1ZXM6IEV4cHJlc3Npb25bXVtdIHwgU2VsZWN0UXVlcnk7XG4gICAgaWYgKG5vZGUudmFsdWVzIGluc3RhbmNlb2YgU2VsZWN0UXVlcnkpIHtcbiAgICAgIG5ld1ZhbHVlcyA9IHRoaXMuZXhwZWN0U2luZ2xlKG5vZGUudmFsdWVzLmFjY2VwdCh0aGlzKSwgJ3ZhbHVlcyBzdWJxdWVyeScpIGFzIFNlbGVjdFF1ZXJ5O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuZXdTZXRzOiBFeHByZXNzaW9uW11bXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBzZXQgb2Ygbm9kZS52YWx1ZXMpIHtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRTZXRQYXJ0czogKEV4cHJlc3Npb24gfCBFeHByZXNzaW9uW10pW10gPSBzZXQubWFwKHYgPT4gdi5hY2NlcHQodGhpcykpO1xuICAgICAgICBpZiAoc2V0Lmxlbmd0aCA+IDEgJiYgdHJhbnNmb3JtZWRTZXRQYXJ0cy5zb21lKEFycmF5LmlzQXJyYXkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcnJheSByZXBsYWNlbWVudCBub3QgYWxsb3dlZCBpbiBtdWx0aS1jb2x1bW4gdHVwbGUgcG9zaXRpb24nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2V0Lmxlbmd0aCA9PT0gMSAmJiBBcnJheS5pc0FycmF5KHRyYW5zZm9ybWVkU2V0UGFydHNbMF0pKSB7XG4gICAgICAgICAgLy8gU2luZ2xlLWNvbHVtbiBzcGxpY2U6IGFkZCBhcyBzZXBhcmF0ZSBzZXRzXG4gICAgICAgICAgdHJhbnNmb3JtZWRTZXRQYXJ0c1swXS5mb3JFYWNoKHIgPT4gbmV3U2V0cy5wdXNoKFtyXSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE5vcm1hbCBvciBtdWx0aS1jb2x1bW4gKG5vIGFycmF5cylcbiAgICAgICAgICBuZXdTZXRzLnB1c2godHJhbnNmb3JtZWRTZXRQYXJ0cyBhcyBFeHByZXNzaW9uW10pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXdWYWx1ZXMgPSBuZXdTZXRzO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEluRXhwcmVzc2lvbihuZXdMZWZ0LCBuZXdWYWx1ZXMsIG5vZGUubm90KTtcbiAgfVxuXG4gIHZpc2l0Q29uY2F0KG5vZGU6IENvbmNhdCk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIG5ldyBDb25jYXQoLi4uKHRoaXMuZmxhdExpc3Qobm9kZS5leHByZXNzaW9ucy5tYXAoZSA9PiBlLmFjY2VwdCh0aGlzKSkpIGFzIEV4cHJlc3Npb25bXSkpO1xuICB9XG5cbiAgdmlzaXRDYXNlRXhwcmVzc2lvbihub2RlOiBDYXNlRXhwcmVzc2lvbik6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgY29uc3QgbmV3Q2FzZXM6IENhc2VJdGVtW10gPSBub2RlLmNhc2VzLm1hcChjID0+ICh7XG4gICAgICB3aGVuOiB0aGlzLmV4cGVjdFNpbmdsZShjLndoZW4uYWNjZXB0KHRoaXMpLCAnd2hlbicpIGFzIEV4cHJlc3Npb24sXG4gICAgICB0aGVuOiB0aGlzLmV4cGVjdFNpbmdsZShjLnRoZW4uYWNjZXB0KHRoaXMpLCAndGhlbicpIGFzIEV4cHJlc3Npb25cbiAgICB9KSk7XG4gICAgY29uc3QgbmV3RWxzZSA9IG5vZGUuZWxzZSA/IHRoaXMuZXhwZWN0U2luZ2xlKG5vZGUuZWxzZS5hY2NlcHQodGhpcyksICdlbHNlJykgYXMgRXhwcmVzc2lvbiA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbmV3IENhc2VFeHByZXNzaW9uKG5ld0Nhc2VzLCBuZXdFbHNlKTtcbiAgfVxuXG4gIHZpc2l0RnVuY3Rpb25FeHByZXNzaW9uKG5vZGU6IEZ1bmN0aW9uRXhwcmVzc2lvbik6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbkV4cHJlc3Npb24obm9kZS5uYW1lIGFzIEZ1bmN0aW9uTmFtZSwgdGhpcy5mbGF0TGlzdChub2RlLmFyZ3MubWFwKGEgPT4gYS5hY2NlcHQodGhpcykpKSBhcyBFeHByZXNzaW9uW10pO1xuICB9XG5cbiAgdmlzaXRQYXJhbUV4cHJlc3Npb24obm9kZTogUGFyYW0pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgUGFyYW0obm9kZS5wYXJhbU5hbWUpO1xuICB9XG5cbiAgdmlzaXRTdHJpbmdMaXRlcmFsKG5vZGU6IFN0cmluZ0xpdGVyYWwpOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgU3RyaW5nTGl0ZXJhbChub2RlLnZhbHVlKTtcbiAgfVxuXG4gIHZpc2l0TnVtYmVyTGl0ZXJhbChub2RlOiBOdW1iZXJMaXRlcmFsKTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gbmV3IE51bWJlckxpdGVyYWwobm9kZS52YWx1ZSk7XG4gIH1cblxuICB2aXNpdE51bGxMaXRlcmFsKG5vZGU6IE51bGxMaXRlcmFsKTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gTnVsbExpdGVyYWwuSU5TVEFOQ0U7XG4gIH1cblxuICB2aXNpdEV4aXN0c0V4cHJlc3Npb24obm9kZTogRXhpc3RzRXhwcmVzc2lvbik6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIG5ldyBFeGlzdHNFeHByZXNzaW9uKHRoaXMuZXhwZWN0U2luZ2xlKG5vZGUuc3VicXVlcnkuYWNjZXB0KHRoaXMpLCAnc3VicXVlcnknKSBhcyBTZWxlY3RRdWVyeSk7XG4gIH1cblxuICB2aXNpdENhc3RFeHByZXNzaW9uKG5vZGU6IENhc3RFeHByZXNzaW9uKTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gbmV3IENhc3RFeHByZXNzaW9uKFxuICAgICAgdGhpcy5leHBlY3RTaW5nbGUobm9kZS5leHByZXNzaW9uLmFjY2VwdCh0aGlzKSwgJ2Nhc3QgZXhwcmVzc2lvbicpIGFzIEV4cHJlc3Npb24sXG4gICAgICBub2RlLnRhcmdldFR5cGVcbiAgICApO1xuICB9XG5cbiAgdmlzaXRDb2xsYXRlRXhwcmVzc2lvbihub2RlOiBDb2xsYXRlRXhwcmVzc2lvbik6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIG5ldyBDb2xsYXRlRXhwcmVzc2lvbihcbiAgICAgIHRoaXMuZXhwZWN0U2luZ2xlKG5vZGUuZXhwcmVzc2lvbi5hY2NlcHQodGhpcyksICdjb2xsYXRlIGV4cHJlc3Npb24nKSBhcyBFeHByZXNzaW9uLFxuICAgICAgbm9kZS5jb2xsYXRpb25cbiAgICApO1xuICB9XG5cbiAgdmlzaXRTdWJxdWVyeUV4cHJlc3Npb24obm9kZTogU3VicXVlcnlFeHByZXNzaW9uKTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gbmV3IFN1YnF1ZXJ5RXhwcmVzc2lvbihcbiAgICAgIHRoaXMuZXhwZWN0U2luZ2xlKG5vZGUuc3VicXVlcnkuYWNjZXB0KHRoaXMpLCAnc3VicXVlcnknKSBhcyBTZWxlY3RRdWVyeVxuICAgICk7XG4gIH1cblxuICB2aXNpdFdpbmRvd0V4cHJlc3Npb24obm9kZTogV2luZG93RXhwcmVzc2lvbik6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgY29uc3QgbmV3Rm4gPSB0aGlzLmV4cGVjdFNpbmdsZShub2RlLmZ1bmN0aW9uLmFjY2VwdCh0aGlzKSwgJ3dpbmRvdyBmdW5jdGlvbicpIGFzIEZ1bmN0aW9uRXhwcmVzc2lvbjtcblxuICAgIGNvbnN0IG5ld1dpbmRvd1NwZWMgPSBuZXcgV2luZG93U3BlY2lmaWNhdGlvbigpO1xuICAgIGlmIChub2RlLndpbmRvd1NwZWMucGFydGl0aW9uQnlDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIG5ld1dpbmRvd1NwZWMuc2V0UGFydGl0aW9uQnkoXG4gICAgICAgIHRoaXMuZmxhdExpc3Qobm9kZS53aW5kb3dTcGVjLnBhcnRpdGlvbkJ5Q29sdW1ucy5tYXAoYyA9PiBjLmFjY2VwdCh0aGlzKSkpIGFzIEV4cHJlc3Npb25bXVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG5vZGUud2luZG93U3BlYy5vcmRlckJ5Q29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICBuZXdXaW5kb3dTcGVjLnNldE9yZGVyQnkoXG4gICAgICAgIHRoaXMuZmxhdExpc3Qobm9kZS53aW5kb3dTcGVjLm9yZGVyQnlDb2x1bW5zLm1hcChvID0+IG8uYWNjZXB0KHRoaXMpKSkgYXMgT3JkZXJCeVtdXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgV2luZG93RXhwcmVzc2lvbihuZXdGbiwgbmV3V2luZG93U3BlYyk7XG4gIH1cbn1cbiJdfQ==
@@ -1,13 +1,28 @@
1
1
  import { Alias } from "../ast/Alias";
2
+ import { AlterTableQuery } from "../ast/AlterTableQuery";
3
+ import { BetweenExpression } from "../ast/BetweenExpression";
2
4
  import { BinaryExpression } from "../ast/BinaryExpression";
3
5
  import { CaseExpression } from "../ast/CaseExpression";
6
+ import { CastExpression } from "../ast/CastExpression";
7
+ import { CollateExpression } from "../ast/CollateExpression";
8
+ import { SubqueryExpression } from "../ast/SubqueryExpression";
9
+ import { WindowExpression } from "../ast/WindowExpression";
4
10
  import { Column, ColumnLike } from "../ast/Column";
5
11
  import { Concat } from "../ast/Concat";
12
+ import { CreateIndexQuery } from "../ast/CreateIndexQuery";
13
+ import { CreateTableQuery } from "../ast/CreateTableQuery";
14
+ import { CreateVirtualTableQuery } from "../ast/CreateVirtualTableQuery";
15
+ import { CreateViewQuery } from "../ast/CreateViewQuery";
16
+ import { DeleteQuery } from "../ast/DeleteQuery";
17
+ import { DropIndexQuery } from "../ast/DropIndexQuery";
18
+ import { DropTableQuery } from "../ast/DropTableQuery";
19
+ import { DropViewQuery } from "../ast/DropViewQuery";
6
20
  import { ExistsExpression } from "../ast/ExistsExpression";
7
21
  import { FromLike, JsonEachFrom, SubqueryFrom, TableFrom } from "../ast/From";
8
22
  import { FunctionExpression } from "../ast/FunctionExpression";
9
23
  import { InExpression } from "../ast/InExpression";
10
24
  import { InsertQuery } from "../ast/InsertQuery";
25
+ import { UpdateQuery } from "../ast/UpdateQuery";
11
26
  import { Join } from "../ast/Join";
12
27
  import { NullLiteral, NumberLiteral, Param, StringLiteral } from "../ast/Literals";
13
28
  import { OrderBy } from "../ast/OrderBy";
@@ -17,6 +32,16 @@ import { With } from "../ast/With";
17
32
  export interface SqlTreeNodeVisitor<T> {
18
33
  visitSelectQuery(node: SelectQuery): T;
19
34
  visitInsertQuery(node: InsertQuery): T;
35
+ visitDeleteQuery(node: DeleteQuery): T;
36
+ visitUpdateQuery(node: UpdateQuery): T;
37
+ visitCreateTableQuery(node: CreateTableQuery): T;
38
+ visitCreateVirtualTableQuery(node: CreateVirtualTableQuery): T;
39
+ visitCreateIndexQuery(node: CreateIndexQuery): T;
40
+ visitCreateViewQuery(node: CreateViewQuery): T;
41
+ visitAlterTableQuery(node: AlterTableQuery): T;
42
+ visitDropTableQuery(node: DropTableQuery): T;
43
+ visitDropIndexQuery(node: DropIndexQuery): T;
44
+ visitDropViewQuery(node: DropViewQuery): T;
20
45
  visitTableFrom(node: TableFrom): T;
21
46
  visitSubqueryFrom(node: SubqueryFrom): T;
22
47
  visitJsonEachFrom(node: JsonEachFrom): T;
@@ -26,10 +51,15 @@ export interface SqlTreeNodeVisitor<T> {
26
51
  visitColumn(node: Column): T;
27
52
  visitAlias(node: Alias<any>): T;
28
53
  visitBinaryExpression(node: BinaryExpression): T;
54
+ visitBetweenExpression(node: BetweenExpression): T;
29
55
  visitUnaryExpression(node: UnaryExpression): T;
30
56
  visitInExpression(node: InExpression): T;
31
57
  visitConcat(node: Concat): T;
32
58
  visitCaseExpression(node: CaseExpression): T;
59
+ visitCastExpression(node: CastExpression): T;
60
+ visitCollateExpression(node: CollateExpression): T;
61
+ visitSubqueryExpression(node: SubqueryExpression): T;
62
+ visitWindowExpression(node: WindowExpression): T;
33
63
  visitFunctionExpression(node: FunctionExpression): T;
34
64
  visitParamExpression(node: Param): T;
35
65
  visitStringLiteral(node: StringLiteral): T;
@@ -44,4 +44,4 @@ class ColumnLikeVisitorAcceptor {
44
44
  }
45
45
  }
46
46
  exports.ColumnLikeVisitorAcceptor = ColumnLikeVisitorAcceptor;
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3FsVHJlZU5vZGVWaXNpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Zpc2l0b3IvU3FsVHJlZU5vZGVWaXNpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNEQUEwRDtBQUMxRCx3Q0FBcUM7QUFHckMsMENBQW1EO0FBR25ELHNDQUE4RTtBQUk5RSxzQ0FBbUM7QUFDbkMsOENBQXNHO0FBOEJ0RyxNQUFhLDhCQUE4QjtJQUNsQyxNQUFNLENBQUMsT0FBOEIsRUFBRSxDQUFnQjtRQUM1RCxJQUFJLENBQUMsWUFBWSxXQUFJO1lBQ2pCLENBQUMsWUFBWSxnQkFBUztZQUN0QixDQUFDLFlBQVksbUJBQVk7WUFDekIsQ0FBQyxZQUFZLG1CQUFZO1lBQ3pCLENBQUMsWUFBWSxhQUFLLEVBQ3BCLENBQUM7WUFDRCxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0IsQ0FBQzthQUFNLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxVQUFVLElBQUksQ0FBQyxJQUFJLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN6RSxNQUFNLEtBQUssR0FBRyxJQUFJLGFBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0IsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBaEJELHdFQWdCQztBQUVELE1BQWEseUJBQXlCO0lBQzdCLE1BQU0sQ0FBQyxPQUE4QixFQUFFLENBQWE7UUFDekQsSUFDRSxDQUFDLFlBQVksZUFBTTtZQUNuQixDQUFDLFlBQVksNEJBQWlCO1lBQzlCLENBQUMsWUFBWSxrQ0FBbUI7WUFDaEMsQ0FBQyxZQUFZLGFBQUssRUFDbEIsQ0FBQztZQUNELE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQixDQUFDO2FBQU0sSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLFVBQVUsSUFBSSxDQUFDLElBQUksT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3pFLE1BQU0sS0FBSyxHQUFHLElBQUksYUFBSyxDQUFFLENBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFoQkQsOERBZ0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWxpYXNhYmxlRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvQWJzdHJhY3Rpb25zXCI7XG5pbXBvcnQgeyBBbGlhcyB9IGZyb20gXCIuLi9hc3QvQWxpYXNcIjtcbmltcG9ydCB7IEJpbmFyeUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0JpbmFyeUV4cHJlc3Npb25cIjtcbmltcG9ydCB7IENhc2VFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9DYXNlRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgQ29sdW1uLCBDb2x1bW5MaWtlIH0gZnJvbSBcIi4uL2FzdC9Db2x1bW5cIjtcbmltcG9ydCB7IENvbmNhdCB9IGZyb20gXCIuLi9hc3QvQ29uY2F0XCI7XG5pbXBvcnQgeyBFeGlzdHNFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9FeGlzdHNFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBGcm9tTGlrZSwgSnNvbkVhY2hGcm9tLCBTdWJxdWVyeUZyb20sIFRhYmxlRnJvbSB9IGZyb20gXCIuLi9hc3QvRnJvbVwiO1xuaW1wb3J0IHsgRnVuY3Rpb25FeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9GdW5jdGlvbkV4cHJlc3Npb25cIjtcbmltcG9ydCB7IEluRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvSW5FeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBJbnNlcnRRdWVyeSB9IGZyb20gXCIuLi9hc3QvSW5zZXJ0UXVlcnlcIjtcbmltcG9ydCB7IEpvaW4gfSBmcm9tIFwiLi4vYXN0L0pvaW5cIjtcbmltcG9ydCB7IExpdGVyYWxFeHByZXNzaW9uLCBOdWxsTGl0ZXJhbCwgTnVtYmVyTGl0ZXJhbCwgUGFyYW0sIFN0cmluZ0xpdGVyYWwgfSBmcm9tIFwiLi4vYXN0L0xpdGVyYWxzXCI7XG5pbXBvcnQgeyBPcmRlckJ5IH0gZnJvbSBcIi4uL2FzdC9PcmRlckJ5XCI7XG5pbXBvcnQgeyBTZWxlY3RRdWVyeSB9IGZyb20gXCIuLi9hc3QvU2VsZWN0UXVlcnlcIjtcbmltcG9ydCB7IFVuYXJ5RXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvVW5hcnlFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBXaXRoIH0gZnJvbSBcIi4uL2FzdC9XaXRoXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3FsVHJlZU5vZGVWaXNpdG9yPFQ+IHtcbiAgdmlzaXRTZWxlY3RRdWVyeShub2RlOiBTZWxlY3RRdWVyeSk6IFQ7XG4gIHZpc2l0SW5zZXJ0UXVlcnkobm9kZTogSW5zZXJ0UXVlcnkpOiBUO1xuICB2aXNpdFRhYmxlRnJvbShub2RlOiBUYWJsZUZyb20pOiBUO1xuICB2aXNpdFN1YnF1ZXJ5RnJvbShub2RlOiBTdWJxdWVyeUZyb20pOiBUO1xuICB2aXNpdEpzb25FYWNoRnJvbShub2RlOiBKc29uRWFjaEZyb20pOiBUO1xuICB2aXNpdEpvaW5DbGF1c2Uobm9kZTogSm9pbik6IFQ7XG4gIHZpc2l0T3JkZXJCeShub2RlOiBPcmRlckJ5KTogVDtcbiAgdmlzaXRXaXRoQ2xhdXNlKG5vZGU6IFdpdGgpOiBUO1xuICB2aXNpdENvbHVtbihub2RlOiBDb2x1bW4pOiBUO1xuICB2aXNpdEFsaWFzKG5vZGU6IEFsaWFzPGFueT4pOiBUO1xuICB2aXNpdEJpbmFyeUV4cHJlc3Npb24obm9kZTogQmluYXJ5RXhwcmVzc2lvbik6IFQ7XG4gIHZpc2l0VW5hcnlFeHByZXNzaW9uKG5vZGU6IFVuYXJ5RXhwcmVzc2lvbik6IFQ7XG4gIHZpc2l0SW5FeHByZXNzaW9uKG5vZGU6IEluRXhwcmVzc2lvbik6IFQ7XG4gIHZpc2l0Q29uY2F0KG5vZGU6IENvbmNhdCk6IFQ7XG4gIHZpc2l0Q2FzZUV4cHJlc3Npb24obm9kZTogQ2FzZUV4cHJlc3Npb24pOiBUO1xuICB2aXNpdEZ1bmN0aW9uRXhwcmVzc2lvbihub2RlOiBGdW5jdGlvbkV4cHJlc3Npb24pOiBUO1xuICB2aXNpdFBhcmFtRXhwcmVzc2lvbihub2RlOiBQYXJhbSk6IFQ7XG4gIHZpc2l0U3RyaW5nTGl0ZXJhbChub2RlOiBTdHJpbmdMaXRlcmFsKTogVDtcbiAgdmlzaXROdW1iZXJMaXRlcmFsKG5vZGU6IE51bWJlckxpdGVyYWwpOiBUO1xuICB2aXNpdE51bGxMaXRlcmFsKG5vZGU6IE51bGxMaXRlcmFsKTogVDtcbiAgdmlzaXRFeGlzdHNFeHByZXNzaW9uKG5vZGU6IEV4aXN0c0V4cHJlc3Npb24pOiBUO1xufVxuXG5leHBvcnQgY2xhc3MgRnJvbUxpa2VBbmRKb2luVmlzaXRvckFjY2VwdG9yPFQ+IHtcbiAgcHVibGljIGFjY2VwdCh2aXNpdG9yOiBTcWxUcmVlTm9kZVZpc2l0b3I8VD4sIGY6IEZyb21MaWtlfEpvaW4pOiBUIHtcbiAgICBpZiAoZiBpbnN0YW5jZW9mIEpvaW4gfHxcbiAgICAgICAgZiBpbnN0YW5jZW9mIFRhYmxlRnJvbSB8fFxuICAgICAgICBmIGluc3RhbmNlb2YgU3VicXVlcnlGcm9tIHx8XG4gICAgICAgIGYgaW5zdGFuY2VvZiBKc29uRWFjaEZyb20gfHxcbiAgICAgICAgZiBpbnN0YW5jZW9mIEFsaWFzXG4gICAgKSB7XG4gICAgICByZXR1cm4gZi5hY2NlcHQodmlzaXRvcik7XG4gICAgfSBlbHNlIGlmIChmICYmIHR5cGVvZiBmID09PSAnb2JqZWN0JyAmJiAncmVmZXJlbnQnIGluIGYgJiYgJ2FsaWFzJyBpbiBmKSB7XG4gICAgICBjb25zdCBhbGlhcyA9IG5ldyBBbGlhcyhmLnJlZmVyZW50LCBmLmFsaWFzKTtcbiAgICAgIHJldHVybiBhbGlhcy5hY2NlcHQodmlzaXRvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBGUk9NIGNsYXVzZTogJyArIEpTT04uc3RyaW5naWZ5KGYpKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbHVtbkxpa2VWaXNpdG9yQWNjZXB0b3I8VD4ge1xuICBwdWJsaWMgYWNjZXB0KHZpc2l0b3I6IFNxbFRyZWVOb2RlVmlzaXRvcjxUPiwgYzogQ29sdW1uTGlrZSk6IFQge1xuICAgIGlmIChcbiAgICAgIGMgaW5zdGFuY2VvZiBDb2x1bW4gfHxcbiAgICAgIGMgaW5zdGFuY2VvZiBMaXRlcmFsRXhwcmVzc2lvbiB8fFxuICAgICAgYyBpbnN0YW5jZW9mIEFsaWFzYWJsZUV4cHJlc3Npb24gfHxcbiAgICAgIGMgaW5zdGFuY2VvZiBBbGlhc1xuICAgICkge1xuICAgICAgcmV0dXJuIGMuYWNjZXB0KHZpc2l0b3IpO1xuICAgIH0gZWxzZSBpZiAoYyAmJiB0eXBlb2YgYyA9PT0gJ29iamVjdCcgJiYgJ3JlZmVyZW50JyBpbiBjICYmICdhbGlhcycgaW4gYykge1xuICAgICAgY29uc3QgYWxpYXMgPSBuZXcgQWxpYXMoKGMgYXMgYW55KS5yZWZlcmVudCwgYy5hbGlhcyk7XG4gICAgICByZXR1cm4gYWxpYXMuYWNjZXB0KHZpc2l0b3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgQ09MVU1OIGNsYXVzZTogJyArIEpTT04uc3RyaW5naWZ5KGMpKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3FsVHJlZU5vZGVWaXNpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Zpc2l0b3IvU3FsVHJlZU5vZGVWaXNpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNEQUEwRDtBQUMxRCx3Q0FBcUM7QUFTckMsMENBQW1EO0FBV25ELHNDQUE4RTtBQUs5RSxzQ0FBbUM7QUFDbkMsOENBQXNHO0FBNkN0RyxNQUFhLDhCQUE4QjtJQUNsQyxNQUFNLENBQUMsT0FBOEIsRUFBRSxDQUFnQjtRQUM1RCxJQUFJLENBQUMsWUFBWSxXQUFJO1lBQ2pCLENBQUMsWUFBWSxnQkFBUztZQUN0QixDQUFDLFlBQVksbUJBQVk7WUFDekIsQ0FBQyxZQUFZLG1CQUFZO1lBQ3pCLENBQUMsWUFBWSxhQUFLLEVBQ3BCLENBQUM7WUFDRCxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0IsQ0FBQzthQUFNLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxVQUFVLElBQUksQ0FBQyxJQUFJLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN6RSxNQUFNLEtBQUssR0FBRyxJQUFJLGFBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0IsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBaEJELHdFQWdCQztBQUVELE1BQWEseUJBQXlCO0lBQzdCLE1BQU0sQ0FBQyxPQUE4QixFQUFFLENBQWE7UUFDekQsSUFDRSxDQUFDLFlBQVksZUFBTTtZQUNuQixDQUFDLFlBQVksNEJBQWlCO1lBQzlCLENBQUMsWUFBWSxrQ0FBbUI7WUFDaEMsQ0FBQyxZQUFZLGFBQUssRUFDbEIsQ0FBQztZQUNELE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQixDQUFDO2FBQU0sSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLFVBQVUsSUFBSSxDQUFDLElBQUksT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3pFLE1BQU0sS0FBSyxHQUFHLElBQUksYUFBSyxDQUFFLENBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFoQkQsOERBZ0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWxpYXNhYmxlRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvQWJzdHJhY3Rpb25zXCI7XG5pbXBvcnQgeyBBbGlhcyB9IGZyb20gXCIuLi9hc3QvQWxpYXNcIjtcbmltcG9ydCB7IEFsdGVyVGFibGVRdWVyeSB9IGZyb20gXCIuLi9hc3QvQWx0ZXJUYWJsZVF1ZXJ5XCI7XG5pbXBvcnQgeyBCZXR3ZWVuRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvQmV0d2VlbkV4cHJlc3Npb25cIjtcbmltcG9ydCB7IEJpbmFyeUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0JpbmFyeUV4cHJlc3Npb25cIjtcbmltcG9ydCB7IENhc2VFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9DYXNlRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgQ2FzdEV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0Nhc3RFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBDb2xsYXRlRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvQ29sbGF0ZUV4cHJlc3Npb25cIjtcbmltcG9ydCB7IFN1YnF1ZXJ5RXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvU3VicXVlcnlFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBXaW5kb3dFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9XaW5kb3dFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBDb2x1bW4sIENvbHVtbkxpa2UgfSBmcm9tIFwiLi4vYXN0L0NvbHVtblwiO1xuaW1wb3J0IHsgQ29uY2F0IH0gZnJvbSBcIi4uL2FzdC9Db25jYXRcIjtcbmltcG9ydCB7IENyZWF0ZUluZGV4UXVlcnkgfSBmcm9tIFwiLi4vYXN0L0NyZWF0ZUluZGV4UXVlcnlcIjtcbmltcG9ydCB7IENyZWF0ZVRhYmxlUXVlcnkgfSBmcm9tIFwiLi4vYXN0L0NyZWF0ZVRhYmxlUXVlcnlcIjtcbmltcG9ydCB7IENyZWF0ZVZpcnR1YWxUYWJsZVF1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9DcmVhdGVWaXJ0dWFsVGFibGVRdWVyeVwiO1xuaW1wb3J0IHsgQ3JlYXRlVmlld1F1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9DcmVhdGVWaWV3UXVlcnlcIjtcbmltcG9ydCB7IERlbGV0ZVF1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9EZWxldGVRdWVyeVwiO1xuaW1wb3J0IHsgRHJvcEluZGV4UXVlcnkgfSBmcm9tIFwiLi4vYXN0L0Ryb3BJbmRleFF1ZXJ5XCI7XG5pbXBvcnQgeyBEcm9wVGFibGVRdWVyeSB9IGZyb20gXCIuLi9hc3QvRHJvcFRhYmxlUXVlcnlcIjtcbmltcG9ydCB7IERyb3BWaWV3UXVlcnkgfSBmcm9tIFwiLi4vYXN0L0Ryb3BWaWV3UXVlcnlcIjtcbmltcG9ydCB7IEV4aXN0c0V4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0V4aXN0c0V4cHJlc3Npb25cIjtcbmltcG9ydCB7IEZyb21MaWtlLCBKc29uRWFjaEZyb20sIFN1YnF1ZXJ5RnJvbSwgVGFibGVGcm9tIH0gZnJvbSBcIi4uL2FzdC9Gcm9tXCI7XG5pbXBvcnQgeyBGdW5jdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0Z1bmN0aW9uRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgSW5FeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9JbkV4cHJlc3Npb25cIjtcbmltcG9ydCB7IEluc2VydFF1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9JbnNlcnRRdWVyeVwiO1xuaW1wb3J0IHsgVXBkYXRlUXVlcnkgfSBmcm9tIFwiLi4vYXN0L1VwZGF0ZVF1ZXJ5XCI7XG5pbXBvcnQgeyBKb2luIH0gZnJvbSBcIi4uL2FzdC9Kb2luXCI7XG5pbXBvcnQgeyBMaXRlcmFsRXhwcmVzc2lvbiwgTnVsbExpdGVyYWwsIE51bWJlckxpdGVyYWwsIFBhcmFtLCBTdHJpbmdMaXRlcmFsIH0gZnJvbSBcIi4uL2FzdC9MaXRlcmFsc1wiO1xuaW1wb3J0IHsgT3JkZXJCeSB9IGZyb20gXCIuLi9hc3QvT3JkZXJCeVwiO1xuaW1wb3J0IHsgU2VsZWN0UXVlcnkgfSBmcm9tIFwiLi4vYXN0L1NlbGVjdFF1ZXJ5XCI7XG5pbXBvcnQgeyBVbmFyeUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L1VuYXJ5RXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgV2l0aCB9IGZyb20gXCIuLi9hc3QvV2l0aFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNxbFRyZWVOb2RlVmlzaXRvcjxUPiB7XG4gIHZpc2l0U2VsZWN0UXVlcnkobm9kZTogU2VsZWN0UXVlcnkpOiBUO1xuICB2aXNpdEluc2VydFF1ZXJ5KG5vZGU6IEluc2VydFF1ZXJ5KTogVDtcbiAgdmlzaXREZWxldGVRdWVyeShub2RlOiBEZWxldGVRdWVyeSk6IFQ7XG4gIHZpc2l0VXBkYXRlUXVlcnkobm9kZTogVXBkYXRlUXVlcnkpOiBUO1xuICB2aXNpdENyZWF0ZVRhYmxlUXVlcnkobm9kZTogQ3JlYXRlVGFibGVRdWVyeSk6IFQ7XG4gIHZpc2l0Q3JlYXRlVmlydHVhbFRhYmxlUXVlcnkobm9kZTogQ3JlYXRlVmlydHVhbFRhYmxlUXVlcnkpOiBUO1xuICB2aXNpdENyZWF0ZUluZGV4UXVlcnkobm9kZTogQ3JlYXRlSW5kZXhRdWVyeSk6IFQ7XG4gIHZpc2l0Q3JlYXRlVmlld1F1ZXJ5KG5vZGU6IENyZWF0ZVZpZXdRdWVyeSk6IFQ7XG4gIHZpc2l0QWx0ZXJUYWJsZVF1ZXJ5KG5vZGU6IEFsdGVyVGFibGVRdWVyeSk6IFQ7XG4gIHZpc2l0RHJvcFRhYmxlUXVlcnkobm9kZTogRHJvcFRhYmxlUXVlcnkpOiBUO1xuICB2aXNpdERyb3BJbmRleFF1ZXJ5KG5vZGU6IERyb3BJbmRleFF1ZXJ5KTogVDtcbiAgdmlzaXREcm9wVmlld1F1ZXJ5KG5vZGU6IERyb3BWaWV3UXVlcnkpOiBUO1xuICB2aXNpdFRhYmxlRnJvbShub2RlOiBUYWJsZUZyb20pOiBUO1xuICB2aXNpdFN1YnF1ZXJ5RnJvbShub2RlOiBTdWJxdWVyeUZyb20pOiBUO1xuICB2aXNpdEpzb25FYWNoRnJvbShub2RlOiBKc29uRWFjaEZyb20pOiBUO1xuICB2aXNpdEpvaW5DbGF1c2Uobm9kZTogSm9pbik6IFQ7XG4gIHZpc2l0T3JkZXJCeShub2RlOiBPcmRlckJ5KTogVDtcbiAgdmlzaXRXaXRoQ2xhdXNlKG5vZGU6IFdpdGgpOiBUO1xuICB2aXNpdENvbHVtbihub2RlOiBDb2x1bW4pOiBUO1xuICB2aXNpdEFsaWFzKG5vZGU6IEFsaWFzPGFueT4pOiBUO1xuICB2aXNpdEJpbmFyeUV4cHJlc3Npb24obm9kZTogQmluYXJ5RXhwcmVzc2lvbik6IFQ7XG4gIHZpc2l0QmV0d2VlbkV4cHJlc3Npb24obm9kZTogQmV0d2VlbkV4cHJlc3Npb24pOiBUO1xuICB2aXNpdFVuYXJ5RXhwcmVzc2lvbihub2RlOiBVbmFyeUV4cHJlc3Npb24pOiBUO1xuICB2aXNpdEluRXhwcmVzc2lvbihub2RlOiBJbkV4cHJlc3Npb24pOiBUO1xuICB2aXNpdENvbmNhdChub2RlOiBDb25jYXQpOiBUO1xuICB2aXNpdENhc2VFeHByZXNzaW9uKG5vZGU6IENhc2VFeHByZXNzaW9uKTogVDtcbiAgdmlzaXRDYXN0RXhwcmVzc2lvbihub2RlOiBDYXN0RXhwcmVzc2lvbik6IFQ7XG4gIHZpc2l0Q29sbGF0ZUV4cHJlc3Npb24obm9kZTogQ29sbGF0ZUV4cHJlc3Npb24pOiBUO1xuICB2aXNpdFN1YnF1ZXJ5RXhwcmVzc2lvbihub2RlOiBTdWJxdWVyeUV4cHJlc3Npb24pOiBUO1xuICB2aXNpdFdpbmRvd0V4cHJlc3Npb24obm9kZTogV2luZG93RXhwcmVzc2lvbik6IFQ7XG4gIHZpc2l0RnVuY3Rpb25FeHByZXNzaW9uKG5vZGU6IEZ1bmN0aW9uRXhwcmVzc2lvbik6IFQ7XG4gIHZpc2l0UGFyYW1FeHByZXNzaW9uKG5vZGU6IFBhcmFtKTogVDtcbiAgdmlzaXRTdHJpbmdMaXRlcmFsKG5vZGU6IFN0cmluZ0xpdGVyYWwpOiBUO1xuICB2aXNpdE51bWJlckxpdGVyYWwobm9kZTogTnVtYmVyTGl0ZXJhbCk6IFQ7XG4gIHZpc2l0TnVsbExpdGVyYWwobm9kZTogTnVsbExpdGVyYWwpOiBUO1xuICB2aXNpdEV4aXN0c0V4cHJlc3Npb24obm9kZTogRXhpc3RzRXhwcmVzc2lvbik6IFQ7XG59XG5cbmV4cG9ydCBjbGFzcyBGcm9tTGlrZUFuZEpvaW5WaXNpdG9yQWNjZXB0b3I8VD4ge1xuICBwdWJsaWMgYWNjZXB0KHZpc2l0b3I6IFNxbFRyZWVOb2RlVmlzaXRvcjxUPiwgZjogRnJvbUxpa2V8Sm9pbik6IFQge1xuICAgIGlmIChmIGluc3RhbmNlb2YgSm9pbiB8fFxuICAgICAgICBmIGluc3RhbmNlb2YgVGFibGVGcm9tIHx8XG4gICAgICAgIGYgaW5zdGFuY2VvZiBTdWJxdWVyeUZyb20gfHxcbiAgICAgICAgZiBpbnN0YW5jZW9mIEpzb25FYWNoRnJvbSB8fFxuICAgICAgICBmIGluc3RhbmNlb2YgQWxpYXNcbiAgICApIHtcbiAgICAgIHJldHVybiBmLmFjY2VwdCh2aXNpdG9yKTtcbiAgICB9IGVsc2UgaWYgKGYgJiYgdHlwZW9mIGYgPT09ICdvYmplY3QnICYmICdyZWZlcmVudCcgaW4gZiAmJiAnYWxpYXMnIGluIGYpIHtcbiAgICAgIGNvbnN0IGFsaWFzID0gbmV3IEFsaWFzKGYucmVmZXJlbnQsIGYuYWxpYXMpO1xuICAgICAgcmV0dXJuIGFsaWFzLmFjY2VwdCh2aXNpdG9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEZST00gY2xhdXNlOiAnICsgSlNPTi5zdHJpbmdpZnkoZikpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29sdW1uTGlrZVZpc2l0b3JBY2NlcHRvcjxUPiB7XG4gIHB1YmxpYyBhY2NlcHQodmlzaXRvcjogU3FsVHJlZU5vZGVWaXNpdG9yPFQ+LCBjOiBDb2x1bW5MaWtlKTogVCB7XG4gICAgaWYgKFxuICAgICAgYyBpbnN0YW5jZW9mIENvbHVtbiB8fFxuICAgICAgYyBpbnN0YW5jZW9mIExpdGVyYWxFeHByZXNzaW9uIHx8XG4gICAgICBjIGluc3RhbmNlb2YgQWxpYXNhYmxlRXhwcmVzc2lvbiB8fFxuICAgICAgYyBpbnN0YW5jZW9mIEFsaWFzXG4gICAgKSB7XG4gICAgICByZXR1cm4gYy5hY2NlcHQodmlzaXRvcik7XG4gICAgfSBlbHNlIGlmIChjICYmIHR5cGVvZiBjID09PSAnb2JqZWN0JyAmJiAncmVmZXJlbnQnIGluIGMgJiYgJ2FsaWFzJyBpbiBjKSB7XG4gICAgICBjb25zdCBhbGlhcyA9IG5ldyBBbGlhcygoYyBhcyBhbnkpLnJlZmVyZW50LCBjLmFsaWFzKTtcbiAgICAgIHJldHVybiBhbGlhcy5hY2NlcHQodmlzaXRvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBDT0xVTU4gY2xhdXNlOiAnICsgSlNPTi5zdHJpbmdpZnkoYykpO1xuICAgIH1cbiAgfVxufVxuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shaxpir/squilt",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "A lightweight, zero-dependency TypeScript library for building SQL queries through a fluent AST API",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -32,5 +32,8 @@
32
32
  "jest": "^29.7.0",
33
33
  "ts-jest": "^29.2.5",
34
34
  "typescript": "^5.7.2"
35
+ },
36
+ "dependencies": {
37
+ "@shaxpir/squilt": "^1.0.0"
35
38
  }
36
39
  }