@rfprodz/client-util-eliza 1.2.20 → 1.2.23

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 (26) hide show
  1. package/esm2022/lib/eliza.module.mjs +20 -0
  2. package/esm2022/lib/services/eliza/eliza.service.mjs +442 -0
  3. package/{fesm2020 → fesm2022}/rfprodz-client-util-eliza.mjs +7 -7
  4. package/{fesm2020 → fesm2022}/rfprodz-client-util-eliza.mjs.map +1 -1
  5. package/package.json +6 -12
  6. package/esm2020/lib/eliza.module.mjs +0 -19
  7. package/esm2020/lib/services/eliza/eliza.service.mjs +0 -441
  8. package/fesm2015/rfprodz-client-util-eliza.mjs +0 -1571
  9. package/fesm2015/rfprodz-client-util-eliza.mjs.map +0 -1
  10. /package/{esm2020 → esm2022}/index.mjs +0 -0
  11. /package/{esm2020 → esm2022}/lib/config/data.config.mjs +0 -0
  12. /package/{esm2020 → esm2022}/lib/config/eliza.config.mjs +0 -0
  13. /package/{esm2020 → esm2022}/lib/config/finals.config.mjs +0 -0
  14. /package/{esm2020 → esm2022}/lib/config/index.mjs +0 -0
  15. /package/{esm2020 → esm2022}/lib/config/initials.config.mjs +0 -0
  16. /package/{esm2020 → esm2022}/lib/config/keywords.config.mjs +0 -0
  17. /package/{esm2020 → esm2022}/lib/config/post-transforms.config.mjs +0 -0
  18. /package/{esm2020 → esm2022}/lib/config/posts.config.mjs +0 -0
  19. /package/{esm2020 → esm2022}/lib/config/pres.config.mjs +0 -0
  20. /package/{esm2020 → esm2022}/lib/config/quits.config.mjs +0 -0
  21. /package/{esm2020 → esm2022}/lib/config/synonyms.config.mjs +0 -0
  22. /package/{esm2020 → esm2022}/lib/interfaces/chat.interface.mjs +0 -0
  23. /package/{esm2020 → esm2022}/lib/interfaces/eliza.interface.mjs +0 -0
  24. /package/{esm2020 → esm2022}/lib/interfaces/index.mjs +0 -0
  25. /package/{esm2020 → esm2022}/lib/services/index.mjs +0 -0
  26. /package/{esm2020 → esm2022}/rfprodz-client-util-eliza.mjs +0 -0
@@ -0,0 +1,20 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { elizaData, elizaDataProvider } from './config/data.config';
3
+ import * as i0 from "@angular/core";
4
+ class AppElizaModule {
5
+ static forRoot(data = elizaData) {
6
+ return {
7
+ ngModule: AppElizaModule,
8
+ providers: [elizaDataProvider(data)],
9
+ };
10
+ }
11
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AppElizaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
12
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.1", ngImport: i0, type: AppElizaModule }); }
13
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AppElizaModule }); }
14
+ }
15
+ export { AppElizaModule };
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AppElizaModule, decorators: [{
17
+ type: NgModule,
18
+ args: [{}]
19
+ }] });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxpemEubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jbGllbnQtdXRpbC1lbGl6YS9zcmMvbGliL2VsaXphLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBR3BFLE1BQ2EsY0FBYztJQUNsQixNQUFNLENBQUMsT0FBTyxDQUFDLE9BQW1CLFNBQVM7UUFDaEQsT0FBTztZQUNMLFFBQVEsRUFBRSxjQUFjO1lBQ3hCLFNBQVMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3JDLENBQUM7SUFDSixDQUFDO2lJQU5VLGNBQWM7a0lBQWQsY0FBYztrSUFBZCxjQUFjOztTQUFkLGNBQWM7MkZBQWQsY0FBYztrQkFEMUIsUUFBUTttQkFBQyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgZWxpemFEYXRhLCBlbGl6YURhdGFQcm92aWRlciB9IGZyb20gJy4vY29uZmlnL2RhdGEuY29uZmlnJztcbmltcG9ydCB7IElFbGl6YURhdGEgfSBmcm9tICcuL2ludGVyZmFjZXMvZWxpemEuaW50ZXJmYWNlJztcblxuQE5nTW9kdWxlKHt9KVxuZXhwb3J0IGNsYXNzIEFwcEVsaXphTW9kdWxlIHtcbiAgcHVibGljIHN0YXRpYyBmb3JSb290KGRhdGE6IElFbGl6YURhdGEgPSBlbGl6YURhdGEpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEFwcEVsaXphTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBBcHBFbGl6YU1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW2VsaXphRGF0YVByb3ZpZGVyKGRhdGEpXSxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -0,0 +1,442 @@
1
+ /**
2
+ * elizabot.js v.1.1 - ELIZA JS library (N.Landsteiner 2005)
3
+ * Eliza is a mock Rogerian psychotherapist.
4
+ * Original program by Joseph Weizenbaum in MAD-SLIP for "Project MAC" at MIT.
5
+ * cf: Weizenbaum, Joseph "ELIZA - A Computer Program For the Study of Natural Language Communication Between Man and Machine"
6
+ * in: Communications of the ACM; Volume 9 , Issue 1 (January 1966): p 36-45.
7
+ * JavaScript implementation by Norbert Landsteiner 2005; <http://www.masserk.at>
8
+ *
9
+ * `ElizaBot' is also a general chatbot engine that can be supplied with any rule set.
10
+ * (for required data structures cf. "elizadata.js" and/or see the documentation.)
11
+ * data is parsed and transformed for internal use at the creation time of the first instance of the `ElizaBot' constructor.
12
+ *
13
+ * JavaScript source: https://github.com/natelewis/eliza-as-promised
14
+ */
15
+ import { Inject, Injectable } from '@angular/core';
16
+ import { BehaviorSubject } from 'rxjs';
17
+ import { ELIZA_DATA } from '../../config/data.config';
18
+ import { elizaInitialConfig } from '../../config/eliza.config';
19
+ import { elizaFinalDefault } from '../../config/finals.config';
20
+ import { elizaInitialDefault } from '../../config/initials.config';
21
+ import * as i0 from "@angular/core";
22
+ class AppElizaService {
23
+ constructor(elizaData) {
24
+ this.elizaData = elizaData;
25
+ /**
26
+ * Eliza configuration.
27
+ */
28
+ this.configSubject = new BehaviorSubject({ ...elizaInitialConfig });
29
+ /**
30
+ * Publicly readable Eliza configuration.
31
+ */
32
+ this.config$ = this.configSubject.asObservable();
33
+ this.mem = [];
34
+ this.lastChoice = [];
35
+ this.postExp = new RegExp('');
36
+ this.preExp = new RegExp('');
37
+ this.pres = {};
38
+ this.posts = {};
39
+ /**
40
+ * Conversation messages.
41
+ */
42
+ this.messagesSubject = new BehaviorSubject([]);
43
+ /**
44
+ * Publicly readable conversation messages.
45
+ */
46
+ this.messages$ = this.messagesSubject.asObservable();
47
+ this.setup(elizaData);
48
+ }
49
+ /**
50
+ * Adds next chat message.
51
+ * @param message chat message
52
+ */
53
+ nextMessage(message) {
54
+ this.messagesSubject.next([...this.messagesSubject.value, message]);
55
+ }
56
+ /**
57
+ * Modifies Eliza configuration.
58
+ * @param config Eliza config
59
+ */
60
+ nextConfig(config) {
61
+ this.configSubject.next({ ...this.configSubject.value, ...config });
62
+ }
63
+ /**
64
+ * Sets up Eliza.
65
+ * @param data Eliza data
66
+ * @param reinitialize indicates that Eliza should be initialized again, even if it's data has already been initialized
67
+ */
68
+ setup(data, reinitialize = false) {
69
+ if (typeof this.data === 'undefined' || reinitialize) {
70
+ this.init(data);
71
+ }
72
+ this.reset();
73
+ }
74
+ /**
75
+ * Resets Eliza.
76
+ */
77
+ reset() {
78
+ const data = this.data;
79
+ if (typeof data === 'undefined') {
80
+ throw new Error('Initialize Eliza first.');
81
+ }
82
+ this.mem = [];
83
+ this.lastChoice = [];
84
+ for (let k = 0; k < data.keywords.length; k += 1) {
85
+ this.lastChoice[k] = [];
86
+ const rules = data.keywords[k].rules;
87
+ for (let i = 0; i < rules.length; i += 1) {
88
+ this.lastChoice[k][i] = -1;
89
+ }
90
+ }
91
+ this.messagesSubject.next([{ bot: true, text: this.getInitial(data) }]);
92
+ }
93
+ // eslint-disable-next-line max-lines-per-function, complexity -- TODO refactor
94
+ init(data) {
95
+ this.data = { ...data };
96
+ // Parse data and convert it from canonical form to internal use.
97
+ // Produce a list of synonyms.
98
+ const synPatterns = {};
99
+ for (const item in this.data.synonyms) {
100
+ if (item) {
101
+ synPatterns[item] = `(${item}|${this.data.synonyms[item].join('|')})`;
102
+ }
103
+ }
104
+ // Check keywords.
105
+ if (data.keywords.length === 0) {
106
+ throw Error('Eliza does not have any configured keywords.');
107
+ }
108
+ // First, convert rules to regexps.
109
+ // Expand synonyms and insert asterisk expressions for backtracking.
110
+ const sre = /@(\S+)/;
111
+ const are = /(\S)\s*\*\s*(\S)/;
112
+ const are1 = /^\s*\*\s*(\S)/;
113
+ const are2 = /(\S)\s*\*\s*$/;
114
+ const are3 = /^\s*\*\s*$/;
115
+ const wsre = /\s+/g;
116
+ for (let i = 0; i < this.data.keywords.length; i += 1) {
117
+ const rules = this.data.keywords[i].rules;
118
+ for (let j = 0; j < rules.length; j += 1) {
119
+ const rule = rules[j];
120
+ // Check mem flag and store it as decomp's element 2.
121
+ if (rule.pattern.charAt(0) === '$') {
122
+ let ofs = 1;
123
+ while (rule.pattern.charAt(ofs) === ' ') {
124
+ ofs += 1;
125
+ }
126
+ rule.pattern = rule.pattern.substring(ofs);
127
+ rule.memory = true;
128
+ }
129
+ else {
130
+ rule.memory = false;
131
+ }
132
+ let match = rule.pattern.match(sre);
133
+ while (match !== null) {
134
+ const sp = synPatterns[match[1]] ? synPatterns[match[1]] : match[1];
135
+ rule.pattern = rule.pattern.substring(0, match.index ?? 0) + sp + rule.pattern.substring((match.index ?? 0) + match[0].length);
136
+ match = rule.pattern.match(sre);
137
+ }
138
+ // Expand asterisk expressions.
139
+ if (are3.test(rule.pattern)) {
140
+ rule.pattern = '\\s*(.*)\\s*';
141
+ }
142
+ else {
143
+ match = rule.pattern.match(are);
144
+ if (match !== null) {
145
+ let leftPart = '';
146
+ let rightPart = rule.pattern;
147
+ while (match !== null) {
148
+ leftPart += rightPart.substring(0, (match.index ?? 0) + 1);
149
+ if (match[1] !== ')') {
150
+ leftPart += '\\b';
151
+ }
152
+ leftPart += '\\s*(.*)\\s*';
153
+ if (match[2] !== '(' && match[2] !== '\\') {
154
+ leftPart += '\\b';
155
+ }
156
+ leftPart += match[2];
157
+ rightPart = rightPart.substring((match.index ?? 0) + match[0].length);
158
+ match = rightPart.match(are);
159
+ }
160
+ rule.pattern = leftPart + rightPart;
161
+ }
162
+ match = rule.pattern.match(are1);
163
+ if (match !== null) {
164
+ let leftPart = '\\s*(.*)\\s*';
165
+ if (match[1] !== ')' && match[1] !== '\\') {
166
+ leftPart += '\\b';
167
+ }
168
+ rule.pattern = leftPart + rule.pattern.substring((match.index ?? 0) - 1 + match[0].length);
169
+ }
170
+ match = rule.pattern.match(are2);
171
+ if (match !== null) {
172
+ let leftPart = rule.pattern.substring(0, (match.index ?? 0) + 1);
173
+ if (match[1] !== '(') {
174
+ leftPart += '\\b';
175
+ }
176
+ rule.pattern = leftPart + '\\s*(.*)\\s*';
177
+ }
178
+ }
179
+ // Expand whitespaces.
180
+ rule.pattern = rule.pattern.replace(wsre, '\\s+');
181
+ wsre.lastIndex = 0;
182
+ }
183
+ }
184
+ // Sort keywords by rank (highest first).
185
+ this.data.keywords.sort(this.sortKeywords);
186
+ // Compose regexps and refs for pres and posts.
187
+ this.composeRegExpsAndPresAndPosts(this.data);
188
+ }
189
+ /**
190
+ * Composes regexps and refs for pres and posts.
191
+ * @param data Eliza data
192
+ */
193
+ composeRegExpsAndPresAndPosts(data) {
194
+ this.pres = {};
195
+ this.posts = {};
196
+ if (data.pres.length === 0) {
197
+ throw Error('Eliza does not have any configured pre expressions.');
198
+ }
199
+ else {
200
+ const a = [];
201
+ for (let i = 0; i < data.pres.length; i += 2) {
202
+ a.push(data.pres[i]);
203
+ this.pres[data.pres[i]] = data.pres[i + 1];
204
+ }
205
+ this.preExp = new RegExp('\\b(' + a.join('|') + ')\\b');
206
+ }
207
+ if (data.posts.length === 0) {
208
+ throw Error('Eliza does not have any configured post expressions.');
209
+ }
210
+ else {
211
+ const a = [];
212
+ for (let i = 0; i < data.posts.length; i += 2) {
213
+ a.push(data.posts[i]);
214
+ this.posts[data.posts[i]] = data.posts[i + 1];
215
+ }
216
+ this.postExp = new RegExp('\\b(' + a.join('|') + ')\\b');
217
+ }
218
+ }
219
+ // eslint-disable-next-line max-lines-per-function, complexity -- TODO refactor
220
+ execRule(data, k, sentence) {
221
+ const config = this.configSubject.value;
222
+ const rules = data.keywords[k].rules;
223
+ const paramRegExp = /\(([0-9]+)\)/;
224
+ for (let i = 0; i < rules.length; i += 1) {
225
+ const match = sentence.match(rules[i].pattern);
226
+ if (match !== null) {
227
+ const options = rules[i].options;
228
+ const memory = rules[i].memory;
229
+ let optionIndex = config.noRandom ? 0 : Math.floor(Math.random() * options.length);
230
+ if ((config.noRandom && this.lastChoice[k][i] > optionIndex) || this.lastChoice[k][i] === optionIndex) {
231
+ this.lastChoice[k][i] += 1;
232
+ optionIndex = this.lastChoice[k][i];
233
+ if (optionIndex >= options.length) {
234
+ optionIndex = 0;
235
+ this.lastChoice[k][i] = -1;
236
+ }
237
+ }
238
+ else {
239
+ this.lastChoice[k][i] = optionIndex;
240
+ }
241
+ let reply = options[optionIndex];
242
+ if (config.debug) {
243
+ const debugLog = `match:\nkey: ${data.keywords[k].key}\nrank: ${data.keywords[k].rank}\ndecomp: ${rules[i].pattern}\nreasmb: ${reply}\nmemory: ${memory}`;
244
+ // eslint-disable-next-line no-console -- debug output
245
+ console.warn('debugLog', debugLog);
246
+ }
247
+ if (reply.search('^goto ') === 0) {
248
+ const key = reply.substring(5);
249
+ const ki = this.getRuleIndexByKey(data, key);
250
+ if (ki >= 0) {
251
+ return this.execRule(data, ki, sentence);
252
+ }
253
+ }
254
+ // Substitute positional params.
255
+ let paramRegExpMatch = reply.match(paramRegExp);
256
+ if (paramRegExpMatch) {
257
+ let leftPart = '';
258
+ let rightPart = reply;
259
+ while (paramRegExpMatch !== null) {
260
+ let param = match[parseInt(paramRegExpMatch[1], 10)];
261
+ // Postprocess param.
262
+ let postExpMatch = param.match(this.postExp);
263
+ if (postExpMatch !== null) {
264
+ let leftPart2 = '';
265
+ let rightPart2 = param;
266
+ while (postExpMatch !== null) {
267
+ leftPart2 += rightPart2.substring(0, postExpMatch.index ?? 0) + this.posts[postExpMatch[1]];
268
+ rightPart2 = rightPart2.substring((postExpMatch.index ?? 0) + postExpMatch[0].length);
269
+ postExpMatch = rightPart2.match(this.postExp);
270
+ }
271
+ param = leftPart2 + rightPart2;
272
+ }
273
+ leftPart += rightPart.substring(0, paramRegExpMatch.index) + param;
274
+ rightPart = rightPart.substring((paramRegExpMatch.index ?? 0) + paramRegExpMatch[0].length);
275
+ paramRegExpMatch = rightPart.match(paramRegExp);
276
+ }
277
+ reply = leftPart + rightPart;
278
+ }
279
+ const transformedReply = this.postTransform(data, reply);
280
+ if (memory) {
281
+ this.memSave(transformedReply);
282
+ }
283
+ else {
284
+ return transformedReply;
285
+ }
286
+ }
287
+ }
288
+ return '';
289
+ }
290
+ // eslint-disable-next-line complexity -- TODO refactor
291
+ transformUserQuery(data, input) {
292
+ let reply = '';
293
+ // Unify text string and split text in part sentences and loop through them.
294
+ const parts = this.splitUserQueryIntoParts(input);
295
+ for (let i = 0; i < parts.length; i += 1) {
296
+ let part = parts[i];
297
+ if (part !== '') {
298
+ // Check for quit expressions.
299
+ for (let q = 0; q < data.quits.length; q += 1) {
300
+ if (data.quits[q] === part) {
301
+ return { reply: this.getFinal(data), final: true };
302
+ }
303
+ }
304
+ let match = part.match(this.preExp);
305
+ if (match !== null) {
306
+ let leftPart = '';
307
+ let rightPart = part;
308
+ while (match !== null) {
309
+ leftPart += rightPart.substring(0, match.index ?? 0) + this.pres[match[1]];
310
+ rightPart = rightPart.substring((match.index ?? 0) + match[0].length);
311
+ match = rightPart.match(this.preExp);
312
+ }
313
+ part = leftPart + rightPart;
314
+ }
315
+ // Loop trough keywords.
316
+ for (let k = 0; k < data.keywords.length; k += 1) {
317
+ if (part.search(new RegExp('\\b' + data.keywords[k].key + '\\b', 'i')) >= 0) {
318
+ reply = this.execRule(data, k, part);
319
+ }
320
+ if (reply !== '') {
321
+ return { reply, final: false };
322
+ }
323
+ }
324
+ }
325
+ }
326
+ // Nothing matched, try mem.
327
+ reply = this.memGet();
328
+ // If nothing in mem, try xnone.
329
+ if (reply === '') {
330
+ const k = this.getRuleIndexByKey(data, 'xnone');
331
+ reply = k >= 0 ? this.execRule(data, k, ' ') : reply;
332
+ }
333
+ return { reply: reply !== '' ? reply : 'I am at a loss for words.', final: false };
334
+ }
335
+ /**
336
+ * Unify text string, split text into partial sentences to be able to loop through them.
337
+ * @param input user query
338
+ * @returns split user query
339
+ */
340
+ splitUserQueryIntoParts(input) {
341
+ const parts = input
342
+ .toLowerCase()
343
+ .replace(/@#\$%\^&\*\(\)_\+=~`\{\[\}\]\|:;<>\/\\\t/g, ' ')
344
+ .replace(/\s+-+\s+/g, '.')
345
+ .replace(/\s*[,.?!;]+\s*/g, '.')
346
+ .replace(/\s*\bbut\b\s*/g, '.')
347
+ .replace(/\s{2,}/g, ' ')
348
+ .split('.');
349
+ return parts;
350
+ }
351
+ sortKeywords(a, b) {
352
+ if (a.rank > b.rank) {
353
+ return -1;
354
+ }
355
+ else if (a.rank < b.rank) {
356
+ return 1;
357
+ }
358
+ else if (a.index > b.index) {
359
+ return 1;
360
+ }
361
+ else if (a.index < b.index) {
362
+ return -1;
363
+ }
364
+ return 0;
365
+ }
366
+ postTransform(data, input) {
367
+ // final cleanings
368
+ let result = input.replace(/\s{2,}/g, ' ').replace(/\s+\./g, '.');
369
+ if (data.postTransforms.length > 0) {
370
+ for (let i = 0; i < data.postTransforms.length; i += 1) {
371
+ const postTransform = data.postTransforms[i];
372
+ result = result.replace(postTransform.searchValue, postTransform.replaceValue);
373
+ data.postTransforms[i].searchValue.lastIndex = 0;
374
+ }
375
+ }
376
+ if (this.configSubject.value.capitalizeFirstLetter) {
377
+ const match = result.match(/^([a-z])/);
378
+ if (match) {
379
+ result = match[0].toUpperCase() + result.substring(1);
380
+ }
381
+ }
382
+ return result;
383
+ }
384
+ getRuleIndexByKey(data, key) {
385
+ for (let k = 0; k < data.keywords.length; k += 1) {
386
+ if (data.keywords[k].key === key) {
387
+ return k;
388
+ }
389
+ }
390
+ return -1;
391
+ }
392
+ memSave(input) {
393
+ this.mem.push(input);
394
+ if (this.mem.length > this.configSubject.value.memSize) {
395
+ this.mem.shift();
396
+ }
397
+ }
398
+ memGet() {
399
+ if (this.mem.length > 0) {
400
+ if (this.configSubject.value.noRandom) {
401
+ return this.mem.shift() ?? '';
402
+ }
403
+ const n = Math.floor(Math.random() * this.mem.length);
404
+ const reply = this.mem[n];
405
+ for (let i = n + 1; i < this.mem.length; i += 1) {
406
+ this.mem[i - 1] = this.mem[i];
407
+ }
408
+ this.mem.length -= 1;
409
+ return reply;
410
+ }
411
+ return '';
412
+ }
413
+ getFinal(data) {
414
+ return data.finals.length === 0 ? elizaFinalDefault : data.finals[Math.floor(Math.random() * data.finals.length)];
415
+ }
416
+ getInitial(data) {
417
+ return data.initials.length === 0 ? elizaInitialDefault : data.initials[Math.floor(Math.random() * data.initials.length)];
418
+ }
419
+ getResponse(statement) {
420
+ const data = this.data;
421
+ if (typeof data === 'undefined') {
422
+ throw new Error('Initialize Eliza first.');
423
+ }
424
+ return new Promise(resolve => {
425
+ const elizaReply = this.transformUserQuery(data, statement);
426
+ resolve(elizaReply);
427
+ });
428
+ }
429
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AppElizaService, deps: [{ token: ELIZA_DATA }], target: i0.ɵɵFactoryTarget.Injectable }); }
430
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AppElizaService, providedIn: 'root' }); }
431
+ }
432
+ export { AppElizaService };
433
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AppElizaService, decorators: [{
434
+ type: Injectable,
435
+ args: [{
436
+ providedIn: 'root',
437
+ }]
438
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
439
+ type: Inject,
440
+ args: [ELIZA_DATA]
441
+ }] }]; } });
442
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxpemEuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2xpZW50LXV0aWwtZWxpemEvc3JjL2xpYi9zZXJ2aWNlcy9lbGl6YS9lbGl6YS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXZDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7QUFJbkUsTUFHYSxlQUFlO0lBbUMxQixZQUFnRCxTQUFxQjtRQUFyQixjQUFTLEdBQVQsU0FBUyxDQUFZO1FBbENyRTs7V0FFRztRQUNjLGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQWUsRUFBRSxHQUFHLGtCQUFrQixFQUFFLENBQUMsQ0FBQztRQUU5Rjs7V0FFRztRQUNhLFlBQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBSXBELFFBQUcsR0FBYSxFQUFFLENBQUM7UUFFbkIsZUFBVSxHQUFlLEVBQUUsQ0FBQztRQUU1QixZQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFekIsV0FBTSxHQUFHLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXhCLFNBQUksR0FBMkIsRUFBRSxDQUFDO1FBRWxDLFVBQUssR0FBMkIsRUFBRSxDQUFDO1FBRTNDOztXQUVHO1FBQ2Msb0JBQWUsR0FBRyxJQUFJLGVB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QyxxREFBcUQsQ0FBQyxDQUFDO1NBQ3BFO2FBQU07WUFDTCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDYixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDNUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQzVDO1lBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztTQUN6RDtRQUNELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzNCLE1BQU0sS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7U0FDckU7YUFBTTtZQUNMLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNiLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUM3QyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDL0M7WUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLE1BQU0s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Q0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDNUgsQ0FBQztJQUVNLFdBQVcsQ0FBQyxTQUFpQjtRQUNsQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLElBQUksT0FBTyxJQUFJLEtBQUssV0FBVyxFQUFFO1lBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztTQUM1QztRQUNELE9BQU8sSUFBSSxPQUFPLENBQWlCLE9BQU8sQ0FBQyxFQUFFO1lBQzNDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDNUQsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztpSUF6YVUsZUFBZSxrQkFtQ04sVUFBVTtxSUFuQ25CLGVBQWUsY0FGZCxNQUFNOztTQUVQLGVBQWU7MkZBQWYsZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQW9DYyxNQUFNOzJCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGVsaXphYm90LmpzIHYuMS4xIC0gRUxJWkEgSlMgbGlicmFyeSAoTi5MYW5kc3RlaW5lciAyMDA1KVxuICogRWxpemEgaXMgYSBtb2NrIFJvZ2VyaWFuIHBzeWNob3RoZXJhcGlzdC5cbiAqIE9yaWdpbmFsIHByb2dyYW0gYnkgSm9zZXBoIFdlaXplbmJhdW0gaW4gTUFELVNMSVAgZm9yIFwiUHJvamVjdCBNQUNcIiBhdCBNSVQuXG4gKiBjZjogV2VpemVuYmF1bSwgSm9zZXBoIFwiRUxJWkEgLSBBIENvbXB1dGVyIFByb2dyYW0gRm9yIHRoZSBTdHVkeSBvZiBOYXR1cmFsIExhbmd1YWdlIENvbW11bmljYXRpb24gQmV0d2VlbiBNYW4gYW5kIE1hY2hpbmVcIlxuICogaW46IENvbW11bmljYXRpb25zIG9mIHRoZSBBQ007IFZvbHVtZSA5ICwgSXNzdWUgMSAoSmFudWFyeSAxOTY2KTogcCAzNi00NS5cbiAqIEphdmFTY3JpcHQgaW1wbGVtZW50YXRpb24gYnkgTm9yYmVydCBMYW5kc3RlaW5lciAyMDA1OyA8aHR0cDovL3d3dy5tYXNzZXJrLmF0PlxuICpcbiAqIGBFbGl6YUJvdCcgaXMgYWxzbyBhIGdlbmVyYWwgY2hhdGJvdCBlbmdpbmUgdGhhdCBjYW4gYmUgc3VwcGxpZWQgd2l0aCBhbnkgcnVsZSBzZXQuXG4gKiAoZm9yIHJlcXVpcmVkIGRhdGEgc3RydWN0dXJlcyBjZi4gXCJlbGl6YWRhdGEuanNcIiBhbmQvb3Igc2VlIHRoZSBkb2N1bWVudGF0aW9uLilcbiAqIGRhdGEgaXMgcGFyc2VkIGFuZCB0cmFuc2Zvcm1lZCBmb3IgaW50ZXJuYWwgdXNlIGF0IHRoZSBjcmVhdGlvbiB0aW1lIG9mIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiB0aGUgYEVsaXphQm90JyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBKYXZhU2NyaXB0IHNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL25hdGVsZXdpcy9lbGl6YS1hcy1wcm9taXNlZFxuICovXG5cbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEVMSVpBX0RBVEEgfSBmcm9tICcuLi8uLi9jb25maWcvZGF0YS5jb25maWcnO1xuaW1wb3J0IHsgZWxpemFJbml0aWFsQ29uZmlnIH0gZnJvbSAnLi4vLi4vY29uZmlnL2VsaXphLmNvbmZpZyc7XG5pbXBvcnQgeyBlbGl6YUZpbmFsRGVmYXVsdCB9IGZyb20gJy4uLy4uL2NvbmZpZy9maW5hbHMuY29uZmlnJztcbmltcG9ydCB7IGVsaXphSW5pdGlhbERlZmF1bHQgfSBmcm9tICcuLi8uLi9jb25maWcvaW5pdGlhbHMuY29uZmlnJztcbmltcG9ydCB7IElDaGF0TWVzc2FnZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY2hhdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUVsaXphQ29uZmlnLCBJRWxpemFEYXRhLCBJRWxpemFLZXl3b3JkLCBJRWxpemFSZXNwb25zZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZWxpemEuaW50ZXJmYWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFwcEVsaXphU2VydmljZSB7XG4gIC8qKlxuICAgKiBFbGl6YSBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJRWxpemFDb25maWc+KHsgLi4uZWxpemFJbml0aWFsQ29uZmlnIH0pO1xuXG4gIC8qKlxuICAgKiBQdWJsaWNseSByZWFkYWJsZSBFbGl6YSBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbmZpZyQgPSB0aGlzLmNvbmZpZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBkYXRhPzogSUVsaXphRGF0YTtcblxuICBwcml2YXRlIG1lbTogc3RyaW5nW10gPSBbXTtcblxuICBwcml2YXRlIGxhc3RDaG9pY2U6IG51bWJlcltdW10gPSBbXTtcblxuICBwcml2YXRlIHBvc3RFeHAgPSBuZXcgUmVnRXhwKCcnKTtcblxuICBwcml2YXRlIHByZUV4cCA9IG5ldyBSZWdFeHAoJycpO1xuXG4gIHByaXZhdGUgcHJlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIHByaXZhdGUgcG9zdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAvKipcbiAgICogQ29udmVyc2F0aW9uIG1lc3NhZ2VzLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElDaGF0TWVzc2FnZVtdPihbXSk7XG5cbiAgLyoqXG4gICAqIFB1YmxpY2x5IHJlYWRhYmxlIGNvbnZlcnNhdGlvbiBtZXNzYWdlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtZXNzYWdlcyQgPSB0aGlzLm1lc3NhZ2VzU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KEVMSVpBX0RBVEEpIHB1YmxpYyByZWFkb25seSBlbGl6YURhdGE6IElFbGl6YURhdGEpIHtcbiAgICB0aGlzLnNldHVwKGVsaXphRGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBuZXh0IGNoYXQgbWVzc2FnZS5cbiAgICogQHBhcmFtIG1lc3NhZ2UgY2hhdCBtZXNzYWdlXG4gICAqL1xuICBwdWJsaWMgbmV4dE1lc3NhZ2UobWVzc2FnZTogSUNoYXRNZXNzYWdlKTogdm9pZCB7XG4gICAgdGhpcy5tZXNzYWdlc1N1YmplY3QubmV4dChbLi4udGhpcy5tZXNzYWdlc1N1YmplY3QudmFsdWUsIG1lc3NhZ2VdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb2RpZmllcyBFbGl6YSBjb25maWd1cmF0aW9uLlxuICAgKiBAcGFyYW0gY29uZmlnIEVsaXphIGNvbmZpZ1xuICAgKi9cbiAgcHVibGljIG5leHRDb25maWcoY29uZmlnOiBQYXJ0aWFsPElFbGl6YUNvbmZpZz4pOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ1N1YmplY3QubmV4dCh7IC4uLnRoaXMuY29uZmlnU3ViamVjdC52YWx1ZSwgLi4uY29uZmlnIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgRWxpemEuXG4gICAqIEBwYXJhbSBkYXRhIEVsaXphIGRhdGFcbiAgICogQHBhcmFtIHJlaW5pdGlhbGl6ZSBpbmRpY2F0ZXMgdGhhdCBFbGl6YSBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYWdhaW4sIGV2ZW4gaWYgaXQncyBkYXRhIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWRcbiAgICovXG4gIHB1YmxpYyBzZXR1cChkYXRhOiBJRWxpemFEYXRhLCByZWluaXRpYWxpemUgPSBmYWxzZSk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgdGhpcy5kYXRhID09PSAndW5kZWZpbmVkJyB8fCByZWluaXRpYWxpemUpIHtcbiAgICAgIHRoaXMuaW5pdChkYXRhKTtcbiAgICB9XG4gICAgdGhpcy5yZXNldCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyBFbGl6YS5cbiAgICovXG4gIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhO1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW5pdGlhbGl6ZSBFbGl6YSBmaXJzdC4nKTtcbiAgICB9XG4gICAgdGhpcy5tZW0gPSBbXTtcbiAgICB0aGlzLmxhc3RDaG9pY2UgPSBbXTtcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IGRhdGEua2V5d29yZHMubGVuZ3RoOyBrICs9IDEpIHtcbiAgICAgIHRoaXMubGFzdENob2ljZVtrXSA9IFtdO1xuICAgICAgY29uc3QgcnVsZXMgPSBkYXRhLmtleXdvcmRzW2tdLnJ1bGVzO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICB0aGlzLmxhc3RDaG9pY2Vba11baV0gPSAtMTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5tZXNzYWdlc1N1YmplY3QubmV4dChbeyBib3Q6IHRydWUsIHRleHQ6IHRoaXMuZ2V0SW5pdGlhbChkYXRhKSB9XSk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxpbmVzLXBlci1mdW5jdGlvbiwgY29tcGxleGl0eSAtLSBUT0RPIHJlZmFjdG9yXG4gIHByaXZhdGUgaW5pdChkYXRhOiBJRWxpemFEYXRhKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhID0geyAuLi5kYXRhIH07XG4gICAgLy8gUGFyc2UgZGF0YSBhbmQgY29udmVydCBpdCBmcm9tIGNhbm9uaWNhbCBmb3JtIHRvIGludGVybmFsIHVzZS5cbiAgICAvLyBQcm9kdWNlIGEgbGlzdCBvZiBzeW5vbnltcy5cbiAgICBjb25zdCBzeW5QYXR0ZXJuczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGZvciAoY29uc3QgaXRlbSBpbiB0aGlzLmRhdGEuc3lub255bXMpIHtcbiAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgIHN5blBhdHRlcm5zW2l0ZW1dID0gYCgke2l0ZW19fCR7dGhpcy5kYXRhLnN5bm9ueW1zW2l0ZW1dLmpvaW4oJ3wnKX0pYDtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gQ2hlY2sga2V5d29yZHMuXG4gICAgaWYgKGRhdGEua2V5d29yZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBFcnJvcignRWxpemEgZG9lcyBub3QgaGF2ZSBhbnkgY29uZmlndXJlZCBrZXl3b3Jkcy4nKTtcbiAgICB9XG4gICAgLy8gRmlyc3QsIGNvbnZlcnQgcnVsZXMgdG8gcmVnZXhwcy5cbiAgICAvLyBFeHBhbmQgc3lub255bXMgYW5kIGluc2VydCBhc3RlcmlzayBleHByZXNzaW9ucyBmb3IgYmFja3RyYWNraW5nLlxuICAgIGNvbnN0IHNyZSA9IC9AKFxcUyspLztcbiAgICBjb25zdCBhcmUgPSAvKFxcUylcXHMqXFwqXFxzKihcXFMpLztcbiAgICBjb25zdCBhcmUxID0gL15cXHMqXFwqXFxzKihcXFMpLztcbiAgICBjb25zdCBhcmUyID0gLyhcXFMpXFxzKlxcKlxccyokLztcbiAgICBjb25zdCBhcmUzID0gL15cXHMqXFwqXFxzKiQvO1xuICAgIGNvbnN0IHdzcmUgPSAvXFxzKy9nO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kYXRhLmtleXdvcmRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBjb25zdCBydWxlcyA9IHRoaXMuZGF0YS5rZXl3b3Jkc1tpXS5ydWxlcztcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcnVsZXMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgY29uc3QgcnVsZSA9IHJ1bGVzW2pdO1xuICAgICAgICAvLyBDaGVjayBtZW0gZmxhZyBhbmQgc3RvcmUgaXQgYXMgZGVjb21wJ3MgZWxlbWVudCAyLlxuICAgICAgICBpZiAocnVsZS5wYXR0ZXJuLmNoYXJBdCgwKSA9PT0gJyQnKSB7XG4gICAgICAgICAgbGV0IG9mcyA9IDE7XG4gICAgICAgICAgd2hpbGUgKHJ1bGUucGF0dGVybi5jaGFyQXQob2ZzKSA9PT0gJyAnKSB7XG4gICAgICAgICAgICBvZnMgKz0gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcnVsZS5wYXR0ZXJuID0gcnVsZS5wYXR0ZXJuLnN1YnN0cmluZyhvZnMpO1xuICAgICAgICAgIHJ1bGUubWVtb3J5ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBydWxlLm1lbW9yeSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBtYXRjaCA9IHJ1bGUucGF0dGVybi5tYXRjaChzcmUpO1xuICAgICAgICB3aGlsZSAobWF0Y2ggIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCBzcCA9IHN5blBhdHRlcm5zW21hdGNoWzFdXSA/IHN5blBhdHRlcm5zW21hdGNoWzFdXSA6IG1hdGNoWzFdO1xuICAgICAgICAgIHJ1bGUucGF0dGVybiA9IHJ1bGUucGF0dGVybi5zdWJzdHJpbmcoMCwgbWF0Y2guaW5kZXggPz8gMCkgKyBzcCArIHJ1bGUucGF0dGVybi5zdWJzdHJpbmcoKG1hdGNoLmluZGV4ID8/IDApICsgbWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgICBtYXRjaCA9IHJ1bGUucGF0dGVybi5tYXRjaChzcmUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEV4cGFuZCBhc3RlcmlzayBleHByZXNzaW9ucy5cbiAgICAgICAgaWYgKGFyZTMudGVzdChydWxlLnBhdHRlcm4pKSB7XG4gICAgICAgICAgcnVsZS5wYXR0ZXJuID0gJ1xcXFxzKiguKilcXFxccyonO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1hdGNoID0gcnVsZS5wYXR0ZXJuLm1hdGNoKGFyZSk7XG4gICAgICAgICAgaWYgKG1hdGNoICE9PSBudWxsKSB7XG4gICAgICAgICAgICBsZXQgbGVmdFBhcnQgPSAnJztcbiAgICAgICAgICAgIGxldCByaWdodFBhcnQgPSBydWxlLnBhdHRlcm47XG4gICAgICAgICAgICB3aGlsZSAobWF0Y2ggIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgbGVmdFBhcnQgKz0gcmlnaHRQYXJ0LnN1YnN0cmluZygwLCAobWF0Y2guaW5kZXggPz8gMCkgKyAxKTtcbiAgICAgICAgICAgICAgaWYgKG1hdGNoWzFdICE9PSAnKScpIHtcbiAgICAgICAgICAgICAgICBsZWZ0UGFydCArPSAnXFxcXGInO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGxlZnRQYXJ0ICs9ICdcXFxccyooLiopXFxcXHMqJztcbiAgICAgICAgICAgICAgaWYgKG1hdGNoWzJdICE9PSAnKCcgJiYgbWF0Y2hbMl0gIT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgIGxlZnRQYXJ0ICs9ICdcXFxcYic7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbGVmdFBhcnQgKz0gbWF0Y2hbMl07XG4gICAgICAgICAgICAgIHJpZ2h0UGFydCA9IHJpZ2h0UGFydC5zdWJzdHJpbmcoKG1hdGNoLmluZGV4ID8/IDApICsgbWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgbWF0Y2ggPSByaWdodFBhcnQubWF0Y2goYXJlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJ1bGUucGF0dGVybiA9IGxlZnRQYXJ0ICsgcmlnaHRQYXJ0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBtYXRjaCA9IHJ1bGUucGF0dGVybi5tYXRjaChhcmUxKTtcbiAgICAgICAgICBpZiAobWF0Y2ggIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxldCBsZWZ0UGFydCA9ICdcXFxccyooLiopXFxcXHMqJztcbiAgICAgICAgICAgIGlmIChtYXRjaFsxXSAhPT0gJyknICYmIG1hdGNoWzFdICE9PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgbGVmdFBhcnQgKz0gJ1xcXFxiJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJ1bGUucGF0dGVybiA9IGxlZnRQYXJ0ICsgcnVsZS5wYXR0ZXJuLnN1YnN0cmluZygobWF0Y2guaW5kZXggPz8gMCkgLSAxICsgbWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbWF0Y2ggPSBydWxlLnBhdHRlcm4ubWF0Y2goYXJlMik7XG4gICAgICAgICAgaWYgKG1hdGNoICE9PSBudWxsKSB7XG4gICAgICAgICAgICBsZXQgbGVmdFBhcnQgPSBydWxlLnBhdHRlcm4uc3Vic3RyaW5nKDAsIChtYXRjaC5pbmRleCA/PyAwKSArIDEpO1xuICAgICAgICAgICAgaWYgKG1hdGNoWzFdICE9PSAnKCcpIHtcbiAgICAgICAgICAgICAgbGVmdFBhcnQgKz0gJ1xcXFxiJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJ1bGUucGF0dGVybiA9IGxlZnRQYXJ0ICsgJ1xcXFxzKiguKilcXFxccyonO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBFeHBhbmQgd2hpdGVzcGFjZXMuXG4gICAgICAgIHJ1bGUucGF0dGVybiA9IHJ1bGUucGF0dGVybi5yZXBsYWNlKHdzcmUsICdcXFxccysnKTtcbiAgICAgICAgd3NyZS5sYXN0SW5kZXggPSAwO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBTb3J0IGtleXdvcmRzIGJ5IHJhbmsgKGhpZ2hlc3QgZmlyc3QpLlxuICAgIHRoaXMuZGF0YS5rZXl3b3Jkcy5zb3J0KHRoaXMuc29ydEtleXdvcmRzKTtcbiAgICAvLyBDb21wb3NlIHJlZ2V4cHMgYW5kIHJlZnMgZm9yIHByZXMgYW5kIHBvc3RzLlxuICAgIHRoaXMuY29tcG9zZVJlZ0V4cHNBbmRQcmVzQW5kUG9zdHModGhpcy5kYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wb3NlcyByZWdleHBzIGFuZCByZWZzIGZvciBwcmVzIGFuZCBwb3N0cy5cbiAgICogQHBhcmFtIGRhdGEgRWxpemEgZGF0YVxuICAgKi9cbiAgcHJpdmF0ZSBjb21wb3NlUmVnRXhwc0FuZFByZXNBbmRQb3N0cyhkYXRhOiBJRWxpemFEYXRhKTogdm9pZCB7XG4gICAgdGhpcy5wcmVzID0ge307XG4gICAgdGhpcy5wb3N0cyA9IHt9O1xuICAgIGlmIChkYXRhLnByZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBFcnJvcignRWxpemEgZG9lcyBub3QgaGF2ZSBhbnkgY29uZmlndXJlZCBwcmUgZXhwcmVzc2lvbnMuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGEgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5wcmVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIGEucHVzaChkYXRhLnByZXNbaV0pO1xuICAgICAgICB0aGlzLnByZXNbZGF0YS5wcmVzW2ldXSA9IGRhdGEucHJlc1tpICsgMV07XG4gICAgICB9XG4gICAgICB0aGlzLnByZUV4cCA9IG5ldyBSZWdFeHAoJ1xcXFxiKCcgKyBhLmpvaW4oJ3wnKSArICcpXFxcXGInKTtcbiAgICB9XG4gICAgaWYgKGRhdGEucG9zdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBFcnJvcignRWxpemEgZG9lcyBub3QgaGF2ZSBhbnkgY29uZmlndXJlZCBwb3N0IGV4cHJlc3Npb25zLicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBhID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEucG9zdHMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgYS5wdXNoKGRhdGEucG9zdHNbaV0pO1xuICAgICAgICB0aGlzLnBvc3RzW2RhdGEucG9zdHNbaV1dID0gZGF0YS5wb3N0c1tpICsgMV07XG4gICAgICB9XG4gICAgICB0aGlzLnBvc3RFeHAgPSBuZXcgUmVnRXhwKCdcXFxcYignICsgYS5qb2luKCd8JykgKyAnKVxcXFxiJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1saW5lcy1wZXItZnVuY3Rpb24sIGNvbXBsZXhpdHkgLS0gVE9ETyByZWZhY3RvclxuICBwcml2YXRlIGV4ZWNSdWxlKGRhdGE6IElFbGl6YURhdGEsIGs6IG51bWJlciwgc2VudGVuY2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWdTdWJqZWN0LnZhbHVlO1xuICAgIGNvbnN0IHJ1bGVzID0gZGF0YS5rZXl3b3Jkc1trXS5ydWxlcztcbiAgICBjb25zdCBwYXJhbVJlZ0V4cCA9IC9cXCgoWzAtOV0rKVxcKS87XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBzZW50ZW5jZS5tYXRjaChydWxlc1tpXS5wYXR0ZXJuKTtcbiAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gcnVsZXNbaV0ub3B0aW9ucztcbiAgICAgICAgY29uc3QgbWVtb3J5ID0gcnVsZXNbaV0ubWVtb3J5O1xuICAgICAgICBsZXQgb3B0aW9uSW5kZXggPSBjb25maWcubm9SYW5kb20gPyAwIDogTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogb3B0aW9ucy5sZW5ndGgpO1xuICAgICAgICBpZiAoKGNvbmZpZy5ub1JhbmRvbSAmJiB0aGlzLmxhc3RDaG9pY2Vba11baV0gPiBvcHRpb25JbmRleCkgfHwgdGhpcy5sYXN0Q2hvaWNlW2tdW2ldID09PSBvcHRpb25JbmRleCkge1xuICAgICAgICAgIHRoaXMubGFzdENob2ljZVtrXVtpXSArPSAxO1xuICAgICAgICAgIG9wdGlvbkluZGV4ID0gdGhpcy5sYXN0Q2hvaWNlW2tdW2ldO1xuICAgICAgICAgIGlmIChvcHRpb25JbmRleCA+PSBvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgb3B0aW9uSW5kZXggPSAwO1xuICAgICAgICAgICAgdGhpcy5sYXN0Q2hvaWNlW2tdW2ldID0gLTE7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubGFzdENob2ljZVtrXVtpXSA9IG9wdGlvbkluZGV4O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXBseSA9IG9wdGlvbnNbb3B0aW9uSW5kZXhdO1xuICAgICAgICBpZiAoY29uZmlnLmRlYnVnKSB7XG4gICAgICAgICAgY29uc3QgZGVidWdMb2cgPSBgbWF0Y2g6XFxua2V5OiAke2RhdGEua2V5d29yZHNba10ua2V5fVxcbnJhbms6ICR7ZGF0YS5rZXl3b3Jkc1trXS5yYW5rfVxcbmRlY29tcDogJHtydWxlc1tpXS5wYXR0ZXJufVxcbnJlYXNtYjogJHtyZXBseX1cXG5tZW1vcnk6ICR7bWVtb3J5fWA7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGUgLS0gZGVidWcgb3V0cHV0XG4gICAgICAgICAgY29uc29sZS53YXJuKCdkZWJ1Z0xvZycsIGRlYnVnTG9nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVwbHkuc2VhcmNoKCdeZ290byAnKSA9PT0gMCkge1xuICAgICAgICAgIGNvbnN0IGtleSA9IHJlcGx5LnN1YnN0cmluZyg1KTtcbiAgICAgICAgICBjb25zdCBraSA9IHRoaXMuZ2V0UnVsZUluZGV4QnlLZXkoZGF0YSwga2V5KTtcbiAgICAgICAgICBpZiAoa2kgPj0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhlY1J1bGUoZGF0YSwga2ksIHNlbnRlbmNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gU3Vic3RpdHV0ZSBwb3NpdGlvbmFsIHBhcmFtcy5cbiAgICAgICAgbGV0IHBhcmFtUmVnRXhwTWF0Y2ggPSByZXBseS5tYXRjaChwYXJhbVJlZ0V4cCk7XG4gICAgICAgIGlmIChwYXJhbVJlZ0V4cE1hdGNoKSB7XG4gICAgICAgICAgbGV0IGxlZnRQYXJ0ID0gJyc7XG4gICAgICAgICAgbGV0IHJpZ2h0UGFydCA9IHJlcGx5O1xuICAgICAgICAgIHdoaWxlIChwYXJhbVJlZ0V4cE1hdGNoICE9PSBudWxsKSB7XG4gICAgICAgICAgICBsZXQgcGFyYW0gPSBtYXRjaFtwYXJzZUludChwYXJhbVJlZ0V4cE1hdGNoWzFdLCAxMCldO1xuICAgICAgICAgICAgLy8gUG9zdHByb2Nlc3MgcGFyYW0uXG4gICAgICAgICAgICBsZXQgcG9zdEV4cE1hdGNoID0gcGFyYW0ubWF0Y2godGhpcy5wb3N0RXhwKTtcbiAgICAgICAgICAgIGlmIChwb3N0RXhwTWF0Y2ggIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgbGV0IGxlZnRQYXJ0MiA9ICcnO1xuICAgICAgICAgICAgICBsZXQgcmlnaHRQYXJ0MiA9IHBhcmFtO1xuICAgICAgICAgICAgICB3aGlsZSAocG9zdEV4cE1hdGNoICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbGVmdFBhcnQyICs9IHJpZ2h0UGFydDIuc3Vic3RyaW5nKDAsIHBvc3RFeHBNYXRjaC5pbmRleCA/PyAwKSArIHRoaXMucG9zdHNbcG9zdEV4cE1hdGNoWzFdXTtcbiAgICAgICAgICAgICAgICByaWdodFBhcnQyID0gcmlnaHRQYXJ0Mi5zdWJzdHJpbmcoKHBvc3RFeHBNYXRjaC5pbmRleCA/PyAwKSArIHBvc3RFeHBNYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHBvc3RFeHBNYXRjaCA9IHJpZ2h0UGFydDIubWF0Y2godGhpcy5wb3N0RXhwKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBwYXJhbSA9IGxlZnRQYXJ0MiArIHJpZ2h0UGFydDI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZWZ0UGFydCArPSByaWdodFBhcnQuc3Vic3RyaW5nKDAsIHBhcmFtUmVnRXhwTWF0Y2guaW5kZXgpICsgcGFyYW07XG4gICAgICAgICAgICByaWdodFBhcnQgPSByaWdodFBhcnQuc3Vic3RyaW5nKChwYXJhbVJlZ0V4cE1hdGNoLmluZGV4ID8/IDApICsgcGFyYW1SZWdFeHBNYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICAgICAgcGFyYW1SZWdFeHBNYXRjaCA9IHJpZ2h0UGFydC5tYXRjaChwYXJhbVJlZ0V4cCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlcGx5ID0gbGVmdFBhcnQgKyByaWdodFBhcnQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRSZXBseSA9IHRoaXMucG9zdFRyYW5zZm9ybShkYXRhLCByZXBseSk7XG4gICAgICAgIGlmIChtZW1vcnkpIHtcbiAgICAgICAgICB0aGlzLm1lbVNhdmUodHJhbnNmb3JtZWRSZXBseSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkUmVwbHk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHkgLS0gVE9ETyByZWZhY3RvclxuICBwcml2YXRlIHRyYW5zZm9ybVVzZXJRdWVyeShkYXRhOiBJRWxpemFEYXRhLCBpbnB1dDogc3RyaW5nKTogSUVsaXphUmVzcG9uc2Uge1xuICAgIGxldCByZXBseSA9ICcnO1xuICAgIC8vIFVuaWZ5IHRleHQgc3RyaW5nIGFuZCBzcGxpdCB0ZXh0IGluIHBhcnQgc2VudGVuY2VzIGFuZCBsb29wIHRocm91Z2ggdGhlbS5cbiAgICBjb25zdCBwYXJ0cyA9IHRoaXMuc3BsaXRVc2VyUXVlcnlJbnRvUGFydHMoaW5wdXQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGxldCBwYXJ0ID0gcGFydHNbaV07XG4gICAgICBpZiAocGFydCAhPT0gJycpIHtcbiAgICAgICAgLy8gQ2hlY2sgZm9yIHF1aXQgZXhwcmVzc2lvbnMuXG4gICAgICAgIGZvciAobGV0IHEgPSAwOyBxIDwgZGF0YS5xdWl0cy5sZW5ndGg7IHEgKz0gMSkge1xuICAgICAgICAgIGlmIChkYXRhLnF1aXRzW3FdID09PSBwYXJ0KSB7XG4gICAgICAgICAgICByZXR1cm4geyByZXBseTogdGhpcy5nZXRGaW5hbChkYXRhKSwgZmluYWw6IHRydWUgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1hdGNoID0gcGFydC5tYXRjaCh0aGlzLnByZUV4cCk7XG4gICAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCkge1xuICAgICAgICAgIGxldCBsZWZ0UGFydCA9ICcnO1xuICAgICAgICAgIGxldCByaWdodFBhcnQgPSBwYXJ0O1xuICAgICAgICAgIHdoaWxlIChtYXRjaCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbGVmdFBhcnQgKz0gcmlnaHRQYXJ0LnN1YnN0cmluZygwLCBtYXRjaC5pbmRleCA/PyAwKSArIHRoaXMucHJlc1ttYXRjaFsxXV07XG4gICAgICAgICAgICByaWdodFBhcnQgPSByaWdodFBhcnQuc3Vic3RyaW5nKChtYXRjaC5pbmRleCA/PyAwKSArIG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICBtYXRjaCA9IHJpZ2h0UGFydC5tYXRjaCh0aGlzLnByZUV4cCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhcnQgPSBsZWZ0UGFydCArIHJpZ2h0UGFydDtcbiAgICAgICAgfVxuICAgICAgICAvLyBMb29wIHRyb3VnaCBrZXl3b3Jkcy5cbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBkYXRhLmtleXdvcmRzLmxlbmd0aDsgayArPSAxKSB7XG4gICAgICAgICAgaWYgKHBhcnQuc2VhcmNoKG5ldyBSZWdFeHAoJ1xcXFxiJyArIGRhdGEua2V5d29yZHNba10ua2V5ICsgJ1xcXFxiJywgJ2knKSkgPj0gMCkge1xuICAgICAgICAgICAgcmVwbHkgPSB0aGlzLmV4ZWNSdWxlKGRhdGEsIGssIHBhcnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVwbHkgIT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4geyByZXBseSwgZmluYWw6IGZhbHNlIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIE5vdGhpbmcgbWF0Y2hlZCwgdHJ5IG1lbS5cbiAgICByZXBseSA9IHRoaXMubWVtR2V0KCk7XG4gICAgLy8gSWYgbm90aGluZyBpbiBtZW0sIHRyeSB4bm9uZS5cbiAgICBpZiAocmVwbHkgPT09ICcnKSB7XG4gICAgICBjb25zdCBrID0gdGhpcy5nZXRSdWxlSW5kZXhCeUtleShkYXRhLCAneG5vbmUnKTtcbiAgICAgIHJlcGx5ID0gayA+PSAwID8gdGhpcy5leGVjUnVsZShkYXRhLCBrLCAnICcpIDogcmVwbHk7XG4gICAgfVxuICAgIHJldHVybiB7IHJlcGx5OiByZXBseSAhPT0gJycgPyByZXBseSA6ICdJIGFtIGF0IGEgbG9zcyBmb3Igd29yZHMuJywgZmluYWw6IGZhbHNlIH07XG4gIH1cblxuICAvKipcbiAgICogVW5pZnkgdGV4dCBzdHJpbmcsIHNwbGl0IHRleHQgaW50byBwYXJ0aWFsIHNlbnRlbmNlcyB0byBiZSBhYmxlIHRvIGxvb3AgdGhyb3VnaCB0aGVtLlxuICAgKiBAcGFyYW0gaW5wdXQgdXNlciBxdWVyeVxuICAgKiBAcmV0dXJucyBzcGxpdCB1c2VyIHF1ZXJ5XG4gICAqL1xuICBwcml2YXRlIHNwbGl0VXNlclF1ZXJ5SW50b1BhcnRzKGlucHV0OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcGFydHMgPSBpbnB1dFxuICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgIC5yZXBsYWNlKC9AI1xcJCVcXF4mXFwqXFwoXFwpX1xcKz1+YFxce1xcW1xcfVxcXVxcfDo7PD5cXC9cXFxcXFx0L2csICcgJylcbiAgICAgIC5yZXBsYWNlKC9cXHMrLStcXHMrL2csICcuJylcbiAgICAgIC5yZXBsYWNlKC9cXHMqWywuPyE7XStcXHMqL2csICcuJylcbiAgICAgIC5yZXBsYWNlKC9cXHMqXFxiYnV0XFxiXFxzKi9nLCAnLicpXG4gICAgICAucmVwbGFjZSgvXFxzezIsfS9nLCAnICcpXG4gICAgICAuc3BsaXQoJy4nKTtcbiAgICByZXR1cm4gcGFydHM7XG4gIH1cblxuICBwcml2YXRlIHNvcnRLZXl3b3JkcyhhOiBJRWxpemFLZXl3b3JkLCBiOiBJRWxpemFLZXl3b3JkKSB7XG4gICAgaWYgKGEucmFuayA+IGIucmFuaykge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH0gZWxzZSBpZiAoYS5yYW5rIDwgYi5yYW5rKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKGEuaW5kZXggPiBiLmluZGV4KSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKGEuaW5kZXggPCBiLmluZGV4KSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBwb3N0VHJhbnNmb3JtKGRhdGE6IElFbGl6YURhdGEsIGlucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIGZpbmFsIGNsZWFuaW5nc1xuICAgIGxldCByZXN1bHQgPSBpbnB1dC5yZXBsYWNlKC9cXHN7Mix9L2csICcgJykucmVwbGFjZSgvXFxzK1xcLi9nLCAnLicpO1xuICAgIGlmIChkYXRhLnBvc3RUcmFuc2Zvcm1zLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5wb3N0VHJhbnNmb3Jtcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBjb25zdCBwb3N0VHJhbnNmb3JtID0gZGF0YS5wb3N0VHJhbnNmb3Jtc1tpXTtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UocG9zdFRyYW5zZm9ybS5zZWFyY2hWYWx1ZSwgcG9zdFRyYW5zZm9ybS5yZXBsYWNlVmFsdWUpO1xuICAgICAgICBkYXRhLnBvc3RUcmFuc2Zvcm1zW2ldLnNlYXJjaFZhbHVlLmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbmZpZ1N1YmplY3QudmFsdWUuY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IHJlc3VsdC5tYXRjaCgvXihbYS16XSkvKTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICByZXN1bHQgPSBtYXRjaFswXS50b1VwcGVyQ2FzZSgpICsgcmVzdWx0LnN1YnN0cmluZygxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UnVsZUluZGV4QnlLZXkoZGF0YTogSUVsaXphRGF0YSwga2V5OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgZGF0YS5rZXl3b3Jkcy5sZW5ndGg7IGsgKz0gMSkge1xuICAgICAgaWYgKGRhdGEua2V5d29yZHNba10ua2V5ID09PSBrZXkpIHtcbiAgICAgICAgcmV0dXJuIGs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIHByaXZhdGUgbWVtU2F2ZShpbnB1dDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5tZW0ucHVzaChpbnB1dCk7XG4gICAgaWYgKHRoaXMubWVtLmxlbmd0aCA+IHRoaXMuY29uZmlnU3ViamVjdC52YWx1ZS5tZW1TaXplKSB7XG4gICAgICB0aGlzLm1lbS5zaGlmdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWVtR2V0KCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMubWVtLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZ1N1YmplY3QudmFsdWUubm9SYW5kb20pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWVtLnNoaWZ0KCkgPz8gJyc7XG4gICAgICB9XG4gICAgICBjb25zdCBuID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGhpcy5tZW0ubGVuZ3RoKTtcbiAgICAgIGNvbnN0IHJlcGx5ID0gdGhpcy5tZW1bbl07XG4gICAgICBmb3IgKGxldCBpID0gbiArIDE7IGkgPCB0aGlzLm1lbS5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICB0aGlzLm1lbVtpIC0gMV0gPSB0aGlzLm1lbVtpXTtcbiAgICAgIH1cbiAgICAgIHRoaXMubWVtLmxlbmd0aCAtPSAxO1xuICAgICAgcmV0dXJuIHJlcGx5O1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBwcml2YXRlIGdldEZpbmFsKGRhdGE6IElFbGl6YURhdGEpOiBzdHJpbmcge1xuICAgIHJldHVybiBkYXRhLmZpbmFscy5sZW5ndGggPT09IDAgPyBlbGl6YUZpbmFsRGVmYXVsdCA6IGRhdGEuZmluYWxzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGRhdGEuZmluYWxzLmxlbmd0aCldO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbml0aWFsKGRhdGE6IElFbGl6YURhdGEpOiBzdHJpbmcge1xuICAgIHJldHVybiBkYXRhLmluaXRpYWxzLmxlbmd0aCA9PT0gMCA/IGVsaXphSW5pdGlhbERlZmF1bHQgOiBkYXRhLmluaXRpYWxzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGRhdGEuaW5pdGlhbHMubGVuZ3RoKV07XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVzcG9uc2Uoc3RhdGVtZW50OiBzdHJpbmcpOiBQcm9taXNlPElFbGl6YVJlc3BvbnNlPiB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luaXRpYWxpemUgRWxpemEgZmlyc3QuJyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxJRWxpemFSZXNwb25zZT4ocmVzb2x2ZSA9PiB7XG4gICAgICBjb25zdCBlbGl6YVJlcGx5ID0gdGhpcy50cmFuc2Zvcm1Vc2VyUXVlcnkoZGF0YSwgc3RhdGVtZW50KTtcbiAgICAgIHJlc29sdmUoZWxpemFSZXBseSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1107,11 +1107,11 @@ class AppElizaModule {
1107
1107
  providers: [elizaDataProvider(data)],
1108
1108
  };
1109
1109
  }
1110
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AppElizaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1111
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.1", ngImport: i0, type: AppElizaModule }); }
1112
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AppElizaModule }); }
1110
1113
  }
1111
- /** @nocollapse */ AppElizaModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: AppElizaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1112
- /** @nocollapse */ AppElizaModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.7", ngImport: i0, type: AppElizaModule });
1113
- /** @nocollapse */ AppElizaModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: AppElizaModule });
1114
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: AppElizaModule, decorators: [{
1114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AppElizaModule, decorators: [{
1115
1115
  type: NgModule,
1116
1116
  args: [{}]
1117
1117
  }] });
@@ -1544,10 +1544,10 @@ class AppElizaService {
1544
1544
  resolve(elizaReply);
1545
1545
  });
1546
1546
  }
1547
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AppElizaService, deps: [{ token: ELIZA_DATA }], target: i0.ɵɵFactoryTarget.Injectable }); }
1548
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AppElizaService, providedIn: 'root' }); }
1547
1549
  }
1548
- /** @nocollapse */ AppElizaService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: AppElizaService, deps: [{ token: ELIZA_DATA }], target: i0.ɵɵFactoryTarget.Injectable });
1549
- /** @nocollapse */ AppElizaService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: AppElizaService, providedIn: 'root' });
1550
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: AppElizaService, decorators: [{
1550
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AppElizaService, decorators: [{
1551
1551
  type: Injectable,
1552
1552
  args: [{
1553
1553
  providedIn: 'root',