@esfaenza/extensions 15.2.46 → 16.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/{esm2020 → esm2022}/esfaenza-extensions.mjs +4 -4
  2. package/esm2022/lib/models/CallResult.mjs +24 -0
  3. package/esm2022/lib/models/CsvHeaders.mjs +26 -0
  4. package/{esm2020 → esm2022}/lib/models/ExportConsts.mjs +31 -31
  5. package/esm2022/lib/models/ExtensionsModuleConfig.mjs +10 -0
  6. package/esm2022/lib/models/GenericItem.mjs +10 -0
  7. package/{esm2020 → esm2022}/lib/models/InboundMessageTypes.mjs +6 -6
  8. package/esm2022/lib/models/InterComMessage.mjs +16 -0
  9. package/{esm2020 → esm2022}/lib/models/TypeCode.mjs +24 -24
  10. package/{esm2020 → esm2022}/lib/modules/extensions.module.mjs +32 -32
  11. package/esm2022/lib/pipes/loc_date.pipe.mjs +38 -0
  12. package/esm2022/lib/services/extensions.base.mjs +30 -0
  13. package/esm2022/lib/services/extensions.clipboard.service.mjs +221 -0
  14. package/esm2022/lib/services/extensions.dates.service.mjs +244 -0
  15. package/esm2022/lib/services/extensions.embedding.service.mjs +213 -0
  16. package/esm2022/lib/services/extensions.exports.service.mjs +617 -0
  17. package/esm2022/lib/services/extensions.hashing.service.mjs +308 -0
  18. package/esm2022/lib/services/extensions.intercom.service.mjs +52 -0
  19. package/esm2022/lib/services/extensions.messages.service.mjs +450 -0
  20. package/esm2022/lib/services/extensions.utilities.service.mjs +250 -0
  21. package/{esm2020 → esm2022}/lib/tokens.mjs +11 -11
  22. package/{esm2020 → esm2022}/public-api.mjs +21 -21
  23. package/{fesm2020 → fesm2022}/esfaenza-extensions.mjs +2509 -2441
  24. package/{fesm2020 → fesm2022}/esfaenza-extensions.mjs.map +1 -1
  25. package/index.d.ts +5 -5
  26. package/lib/models/CallResult.d.ts +23 -23
  27. package/lib/models/CsvHeaders.d.ts +25 -25
  28. package/lib/models/ExportConsts.d.ts +31 -31
  29. package/lib/models/ExtensionsModuleConfig.d.ts +9 -9
  30. package/lib/models/GenericItem.d.ts +9 -9
  31. package/lib/models/InboundMessageTypes.d.ts +5 -5
  32. package/lib/models/InterComMessage.d.ts +12 -12
  33. package/lib/models/TypeCode.d.ts +23 -23
  34. package/lib/modules/extensions.module.d.ts +11 -11
  35. package/lib/pipes/loc_date.pipe.d.ts +24 -24
  36. package/lib/services/extensions.base.d.ts +22 -22
  37. package/lib/services/extensions.clipboard.service.d.ts +54 -54
  38. package/lib/services/extensions.dates.service.d.ts +99 -99
  39. package/lib/services/extensions.embedding.service.d.ts +28 -28
  40. package/lib/services/extensions.exports.service.d.ts +234 -234
  41. package/lib/services/extensions.hashing.service.d.ts +121 -121
  42. package/lib/services/extensions.intercom.service.d.ts +28 -28
  43. package/lib/services/extensions.messages.service.d.ts +195 -195
  44. package/lib/services/extensions.utilities.service.d.ts +107 -107
  45. package/lib/tokens.d.ts +11 -11
  46. package/package.json +13 -19
  47. package/public-api.d.ts +18 -18
  48. package/esm2020/lib/models/CallResult.mjs +0 -6
  49. package/esm2020/lib/models/CsvHeaders.mjs +0 -6
  50. package/esm2020/lib/models/ExtensionsModuleConfig.mjs +0 -4
  51. package/esm2020/lib/models/GenericItem.mjs +0 -6
  52. package/esm2020/lib/models/InterComMessage.mjs +0 -14
  53. package/esm2020/lib/pipes/loc_date.pipe.mjs +0 -37
  54. package/esm2020/lib/services/extensions.base.mjs +0 -29
  55. package/esm2020/lib/services/extensions.clipboard.service.mjs +0 -219
  56. package/esm2020/lib/services/extensions.dates.service.mjs +0 -242
  57. package/esm2020/lib/services/extensions.embedding.service.mjs +0 -208
  58. package/esm2020/lib/services/extensions.exports.service.mjs +0 -615
  59. package/esm2020/lib/services/extensions.hashing.service.mjs +0 -310
  60. package/esm2020/lib/services/extensions.intercom.service.mjs +0 -54
  61. package/esm2020/lib/services/extensions.messages.service.mjs +0 -433
  62. package/esm2020/lib/services/extensions.utilities.service.mjs +0 -252
  63. package/fesm2015/esfaenza-extensions.mjs +0 -2513
  64. package/fesm2015/esfaenza-extensions.mjs.map +0 -1
@@ -1,310 +0,0 @@
1
- // Angular
2
- import { Injectable } from "@angular/core";
3
- import * as i0 from "@angular/core";
4
- /**
5
- * Service che fornisce alcuni semplici funzioni di Hashing / GUID / ecc...
6
- */
7
- export class HashingService {
8
- constructor() {
9
- /**
10
- * Blacklist dei tipi da ignorare quando si effettua l'hashing degli oggetti
11
- */
12
- this.objBlacklist = {
13
- "NgForm": true, "ElementRef": true, "ExtensionsService": true, "ToastrService": true, "LocaleService": true, "AppState": true, "Router": true,
14
- "ActivatedRoute": true, "HTTPService": true, "Location": true, "CanvasComponent": true, "ModalDirective": true, "ChangeDetectorRef": true,
15
- "DateService": true, "EventEmitter": true, "ViewRef_": true, "Subscriber": true, "ItemLocalization": true
16
- };
17
- /**
18
- * Array dei possibili valori di un simbolo esadecimale
19
- */
20
- this.hex_chr = '0123456789abcdef'.split('');
21
- }
22
- /**
23
- * Generazione di un GUID pseudo-univoco
24
- *
25
- * @returns {string} il GUID generato
26
- */
27
- getGUID() {
28
- return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, c => {
29
- var r = Math.random() * 16 | 0, v = c == "x" ? r : (r & 0x3 | 0x8);
30
- return v.toString(16);
31
- });
32
- }
33
- /**
34
- * Calcolo dell'hash su un oggetto
35
- *
36
- * @param {any} o Oggetto di cui calcolare l'hash
37
- * @param {number} level Livello di ricorsione nel caso venga effettuato l'hash di un oggetto che contiene altri oggetti
38
- * @param {boolean} navigateFullDepth Indica se navigare l'oggetto per l'intera lunghezza. In caso contrario si ferma al secondo livello
39
- *
40
- * @returns {string} Hash generato per l'oggetto in questione
41
- */
42
- hashObject(o, level = 0, navigateFullDepth = false, precise = false) {
43
- var strDef = this.stringify(o, level, navigateFullDepth);
44
- var hash = precise ? this.md5(strDef) : this.simpleHash(strDef);
45
- return hash;
46
- }
47
- /**
48
- * Hash più semplice e più veloce dell'md5, ma meno sicuro
49
- *
50
- * Vedi https://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript
51
- *
52
- * @param {string} str Stringa di cui calcolare l'hash
53
- */
54
- simpleHash(str, seed = 0) {
55
- let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed;
56
- for (let i = 0, ch; i < str.length; i++) {
57
- ch = str.charCodeAt(i);
58
- h1 = Math.imul(h1 ^ ch, 2654435761);
59
- h2 = Math.imul(h2 ^ ch, 1597334677);
60
- }
61
- h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ Math.imul(h2 ^ (h2 >>> 13), 3266489909);
62
- h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ Math.imul(h1 ^ (h1 >>> 13), 3266489909);
63
- return (4294967296 * (2097151 & h2) + (h1 >>> 0)).toString();
64
- }
65
- /**
66
- * Genera una stringa che identifica univocamente l'oggetto in questione
67
- *
68
- * @param {any} o Oggetto di cui calcolare la stringa univoca
69
- * @param {number} level Livello di ricorsione nel caso venga effettuato l'hash di un oggetto che contiene altri oggetti
70
- * @param {boolean} navigateFullDepth Indica se navigare l'oggetto per l'intera lunghezza. In caso contrario si ferma al secondo livello
71
- */
72
- stringify(o, level, navigateFullDepth) {
73
- var i, r;
74
- if (o === null)
75
- return "n";
76
- if (o === true)
77
- return "t";
78
- if (o === false)
79
- return "f";
80
- if (o instanceof Date)
81
- return 'd:' + o.valueOf().toString();
82
- i = typeof o;
83
- if (i === "string")
84
- return "s:" + o;
85
- if (i === "number")
86
- return "n:" + o;
87
- if (o instanceof Function)
88
- return "m:" + o.toString();
89
- if (o instanceof Array) {
90
- r = [];
91
- for (i = 0; i < o.length; i++) {
92
- let res = this.stringify(o[i], level, navigateFullDepth);
93
- if (res)
94
- r.push(res);
95
- }
96
- return r.length > 0 ? "a:" + r.join(";") : "";
97
- }
98
- r = [];
99
- //Se è oggetto, escludo tutti quelli di sistema/inutili
100
- if (o) {
101
- var name = o.__proto__.constructor.name;
102
- if (!this.objBlacklist[name]) {
103
- for (i in o) {
104
- if (o.hasOwnProperty(i) && (level <= 2 || navigateFullDepth)) {
105
- let res = this.stringify(o[i], level + 1, navigateFullDepth);
106
- if (res)
107
- r.push(i + ":" + res);
108
- }
109
- }
110
- }
111
- }
112
- return r.length > 0 ? "o:" + r.join(";") : "";
113
- }
114
- /**
115
- * Data una stringa restituisce l'md5
116
- *
117
- * @param {string} s Stringa di cui calcolare l'md5
118
- * @returns {string} md5 della stringa **s**
119
- */
120
- md5(s) {
121
- return this.hex(this.md51(s));
122
- }
123
- /**
124
- * @ignore
125
- *
126
- * Metodo di utilità per il calcolo dell'md5
127
- */
128
- md5cycle(x, k) {
129
- var a = x[0], b = x[1], c = x[2], d = x[3];
130
- a = this.ff(a, b, c, d, k[0], 7, -680876936);
131
- d = this.ff(d, a, b, c, k[1], 12, -389564586);
132
- c = this.ff(c, d, a, b, k[2], 17, 606105819);
133
- b = this.ff(b, c, d, a, k[3], 22, -1044525330);
134
- a = this.ff(a, b, c, d, k[4], 7, -176418897);
135
- d = this.ff(d, a, b, c, k[5], 12, 1200080426);
136
- c = this.ff(c, d, a, b, k[6], 17, -1473231341);
137
- b = this.ff(b, c, d, a, k[7], 22, -45705983);
138
- a = this.ff(a, b, c, d, k[8], 7, 1770035416);
139
- d = this.ff(d, a, b, c, k[9], 12, -1958414417);
140
- c = this.ff(c, d, a, b, k[10], 17, -42063);
141
- b = this.ff(b, c, d, a, k[11], 22, -1990404162);
142
- a = this.ff(a, b, c, d, k[12], 7, 1804603682);
143
- d = this.ff(d, a, b, c, k[13], 12, -40341101);
144
- c = this.ff(c, d, a, b, k[14], 17, -1502002290);
145
- b = this.ff(b, c, d, a, k[15], 22, 1236535329);
146
- a = this.gg(a, b, c, d, k[1], 5, -165796510);
147
- d = this.gg(d, a, b, c, k[6], 9, -1069501632);
148
- c = this.gg(c, d, a, b, k[11], 14, 643717713);
149
- b = this.gg(b, c, d, a, k[0], 20, -373897302);
150
- a = this.gg(a, b, c, d, k[5], 5, -701558691);
151
- d = this.gg(d, a, b, c, k[10], 9, 38016083);
152
- c = this.gg(c, d, a, b, k[15], 14, -660478335);
153
- b = this.gg(b, c, d, a, k[4], 20, -405537848);
154
- a = this.gg(a, b, c, d, k[9], 5, 568446438);
155
- d = this.gg(d, a, b, c, k[14], 9, -1019803690);
156
- c = this.gg(c, d, a, b, k[3], 14, -187363961);
157
- b = this.gg(b, c, d, a, k[8], 20, 1163531501);
158
- a = this.gg(a, b, c, d, k[13], 5, -1444681467);
159
- d = this.gg(d, a, b, c, k[2], 9, -51403784);
160
- c = this.gg(c, d, a, b, k[7], 14, 1735328473);
161
- b = this.gg(b, c, d, a, k[12], 20, -1926607734);
162
- a = this.hh(a, b, c, d, k[5], 4, -378558);
163
- d = this.hh(d, a, b, c, k[8], 11, -2022574463);
164
- c = this.hh(c, d, a, b, k[11], 16, 1839030562);
165
- b = this.hh(b, c, d, a, k[14], 23, -35309556);
166
- a = this.hh(a, b, c, d, k[1], 4, -1530992060);
167
- d = this.hh(d, a, b, c, k[4], 11, 1272893353);
168
- c = this.hh(c, d, a, b, k[7], 16, -155497632);
169
- b = this.hh(b, c, d, a, k[10], 23, -1094730640);
170
- a = this.hh(a, b, c, d, k[13], 4, 681279174);
171
- d = this.hh(d, a, b, c, k[0], 11, -358537222);
172
- c = this.hh(c, d, a, b, k[3], 16, -722521979);
173
- b = this.hh(b, c, d, a, k[6], 23, 76029189);
174
- a = this.hh(a, b, c, d, k[9], 4, -640364487);
175
- d = this.hh(d, a, b, c, k[12], 11, -421815835);
176
- c = this.hh(c, d, a, b, k[15], 16, 530742520);
177
- b = this.hh(b, c, d, a, k[2], 23, -995338651);
178
- a = this.ii(a, b, c, d, k[0], 6, -198630844);
179
- d = this.ii(d, a, b, c, k[7], 10, 1126891415);
180
- c = this.ii(c, d, a, b, k[14], 15, -1416354905);
181
- b = this.ii(b, c, d, a, k[5], 21, -57434055);
182
- a = this.ii(a, b, c, d, k[12], 6, 1700485571);
183
- d = this.ii(d, a, b, c, k[3], 10, -1894986606);
184
- c = this.ii(c, d, a, b, k[10], 15, -1051523);
185
- b = this.ii(b, c, d, a, k[1], 21, -2054922799);
186
- a = this.ii(a, b, c, d, k[8], 6, 1873313359);
187
- d = this.ii(d, a, b, c, k[15], 10, -30611744);
188
- c = this.ii(c, d, a, b, k[6], 15, -1560198380);
189
- b = this.ii(b, c, d, a, k[13], 21, 1309151649);
190
- a = this.ii(a, b, c, d, k[4], 6, -145523070);
191
- d = this.ii(d, a, b, c, k[11], 10, -1120210379);
192
- c = this.ii(c, d, a, b, k[2], 15, 718787259);
193
- b = this.ii(b, c, d, a, k[9], 21, -343485551);
194
- x[0] = this.add32(a, x[0]);
195
- x[1] = this.add32(b, x[1]);
196
- x[2] = this.add32(c, x[2]);
197
- x[3] = this.add32(d, x[3]);
198
- }
199
- /**
200
- * @ignore
201
- *
202
- * Metodo di utilità per il calcolo dell'md5
203
- */
204
- cmn(q, a, b, x, s, t) {
205
- a = this.add32(this.add32(a, q), this.add32(x, t));
206
- return this.add32((a << s) | (a >>> (32 - s)), b);
207
- }
208
- /**
209
- * @ignore
210
- *
211
- * Metodo di utilità per il calcolo dell'md5
212
- */
213
- ff(a, b, c, d, x, s, t) {
214
- return this.cmn((b & c) | ((~b) & d), a, b, x, s, t);
215
- }
216
- /**
217
- * @ignore
218
- *
219
- * Metodo di utilità per il calcolo dell'md5
220
- */
221
- gg(a, b, c, d, x, s, t) {
222
- return this.cmn((b & d) | (c & (~d)), a, b, x, s, t);
223
- }
224
- /**
225
- * @ignore
226
- *
227
- * Metodo di utilità per il calcolo dell'md5
228
- */
229
- hh(a, b, c, d, x, s, t) {
230
- return this.cmn(b ^ c ^ d, a, b, x, s, t);
231
- }
232
- /**
233
- * @ignore
234
- *
235
- * Metodo di utilità per il calcolo dell'md5
236
- */
237
- ii(a, b, c, d, x, s, t) {
238
- return this.cmn(c ^ (b | (~d)), a, b, x, s, t);
239
- }
240
- /**
241
- * @ignore
242
- *
243
- * Metodo di utilità per il calcolo dell'md5
244
- */
245
- md51(s) {
246
- var n = s.length, state = [1732584193, -271733879, -1732584194, 271733878], i;
247
- for (i = 64; i <= s.length; i += 64)
248
- this.md5cycle(state, this.md5blk(s.substring(i - 64, i)));
249
- s = s.substring(i - 64);
250
- var tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
251
- for (i = 0; i < s.length; i++)
252
- tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3);
253
- tail[i >> 2] |= 0x80 << ((i % 4) << 3);
254
- if (i > 55) {
255
- this.md5cycle(state, tail);
256
- for (i = 0; i < 16; i++)
257
- tail[i] = 0;
258
- }
259
- tail[14] = n * 8;
260
- this.md5cycle(state, tail);
261
- return state;
262
- }
263
- /**
264
- * @ignore
265
- *
266
- * Metodo di utilità per il calcolo dell'md5
267
- */
268
- md5blk(s) {
269
- var md5blks = [], i;
270
- for (i = 0; i < 64; i += 4)
271
- md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);
272
- return md5blks;
273
- }
274
- /**
275
- * @ignore
276
- *
277
- * Metodo di utilità per il calcolo dell'md5
278
- */
279
- rhex(n) {
280
- var s = '', j = 0;
281
- for (; j < 4; j++)
282
- s += this.hex_chr[(n >> (j * 8 + 4)) & 0x0F] + this.hex_chr[(n >> (j * 8)) & 0x0F];
283
- return s;
284
- }
285
- /**
286
- * @ignore
287
- *
288
- * Metodo di utilità per il calcolo dell'md5
289
- */
290
- hex(x) {
291
- for (var i = 0; i < x.length; i++)
292
- x[i] = this.rhex(x[i]);
293
- return x.join('');
294
- }
295
- /**
296
- * @ignore
297
- *
298
- * Metodo di utilità per il calcolo dell'md5
299
- */
300
- add32(a, b) {
301
- return (a + b) & 0xFFFFFFFF;
302
- }
303
- }
304
- HashingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: HashingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
305
- HashingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: HashingService, providedIn: "root" });
306
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: HashingService, decorators: [{
307
- type: Injectable,
308
- args: [{ providedIn: "root" }]
309
- }] });
310
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5zaW9ucy5oYXNoaW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9leHRlbnNpb25zL3NyYy9saWIvc2VydmljZXMvZXh0ZW5zaW9ucy5oYXNoaW5nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTNDOztHQUVHO0FBRUgsTUFBTSxPQUFPLGNBQWM7SUFEM0I7UUFpREk7O1dBRUc7UUFDSyxpQkFBWSxHQUFHO1lBQ25CLFFBQVEsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUk7WUFDN0ksZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLElBQUk7WUFDekksYUFBYSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxJQUFJO1NBQzVHLENBQUM7UUE0TkY7O1dBRUc7UUFDSyxZQUFPLEdBQWEsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBaUM1RDtJQXJURzs7OztPQUlHO0lBQ0ksT0FBTztRQUNWLE9BQU8sc0NBQXNDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRTtZQUMvRCxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENB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RUFBRSxTQUFTLENBQUMsQ0FBQztRQUM3QyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9DLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDOUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzdDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0MsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hELENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzlDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoRCxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUUvQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDOUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzVDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0MsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM1QyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9DLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDOUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzlDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFaEQsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9DLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQy9DLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM5QyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEQsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDN0MsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzVDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM5QyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTlDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDOUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoRCxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzlDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0MsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9DLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzdDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMvQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEQsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDN0MsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU5QyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3hCLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUMxQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDMUIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUMxQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLElBQUksQ0FBQyxDQUFTO1FBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUU5RSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUU7WUFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTlELENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN4QixJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVELEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7WUFDekIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDUixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMzQixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUU7Z0JBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN4QztRQUNELElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNCLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssTUFBTSxDQUFDLENBQUM7UUFDWixJQUFJLE9BQU8sR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ3RCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMvSCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBT0Q7Ozs7T0FJRztJQUNLLElBQUksQ0FBQyxDQUFDO1FBQ1YsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUNiLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUN2RixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssR0FBRyxDQUFDLENBQUM7UUFDVCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7WUFDN0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2QsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUM7SUFDaEMsQ0FBQzs7MkdBdFRRLGNBQWM7K0dBQWQsY0FBYyxjQURGLE1BQU07MkZBQ2xCLGNBQWM7a0JBRDFCLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8qKlxyXG4gKiBTZXJ2aWNlIGNoZSBmb3JuaXNjZSBhbGN1bmkgc2VtcGxpY2kgZnVuemlvbmkgZGkgSGFzaGluZyAvIEdVSUQgLyBlY2MuLi5cclxuICovXHJcbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiBcInJvb3RcIn0pXHJcbmV4cG9ydCBjbGFzcyBIYXNoaW5nU2VydmljZSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF6aW9uZSBkaSB1biBHVUlEIHBzZXVkby11bml2b2NvXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IGlsIEdVSUQgZ2VuZXJhdG9cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEdVSUQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJ4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHhcIi5yZXBsYWNlKC9beHldL2csIGMgPT4ge1xyXG4gICAgICAgICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkgKiAxNiB8IDAsIHYgPSBjID09IFwieFwiID8gciA6IChyICYgMHgzIHwgMHg4KTtcclxuICAgICAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY29sbyBkZWxsJ2hhc2ggc3UgdW4gb2dnZXR0b1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gbyBPZ2dldHRvIGRpIGN1aSBjYWxjb2xhcmUgbCdoYXNoXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGV2ZWwgTGl2ZWxsbyBkaSByaWNvcnNpb25lIG5lbCBjYXNvIHZlbmdhIGVmZmV0dHVhdG8gbCdoYXNoIGRpIHVuIG9nZ2V0dG8gY2hlIGNvbnRpZW5lIGFsdHJpIG9nZ2V0dGlcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gbmF2aWdhdGVGdWxsRGVwdGggSW5kaWNhIHNlIG5hdmlnYXJlIGwnb2dnZXR0byBwZXIgbCdpbnRlcmEgbHVuZ2hlenphLiBJbiBjYXNvIGNvbnRyYXJpbyBzaSBmZXJtYSBhbCBzZWNvbmRvIGxpdmVsbG9cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge3N0cmluZ30gSGFzaCBnZW5lcmF0byBwZXIgbCdvZ2dldHRvIGluIHF1ZXN0aW9uZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaGFzaE9iamVjdChvOiBhbnksIGxldmVsOiBudW1iZXIgPSAwLCBuYXZpZ2F0ZUZ1bGxEZXB0aDogYm9vbGVhbiA9IGZhbHNlLCBwcmVjaXNlOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xyXG4gICAgICAgIHZhciBzdHJEZWYgPSB0aGlzLnN0cmluZ2lmeShvLCBsZXZlbCwgbmF2aWdhdGVGdWxsRGVwdGgpO1xyXG4gICAgICAgIHZhciBoYXNoOiBzdHJpbmcgPSBwcmVjaXNlID8gdGhpcy5tZDUoc3RyRGVmKSA6IHRoaXMuc2ltcGxlSGFzaChzdHJEZWYpO1xyXG4gICAgICAgIHJldHVybiBoYXNoO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFzaCBwacO5IHNlbXBsaWNlIGUgcGnDuSB2ZWxvY2UgZGVsbCdtZDUsIG1hIG1lbm8gc2ljdXJvXHJcbiAgICAgKiBcclxuICAgICAqIFZlZGkgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzYxNjQ2MS9nZW5lcmF0ZS1hLWhhc2gtZnJvbS1zdHJpbmctaW4tamF2YXNjcmlwdFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgU3RyaW5nYSBkaSBjdWkgY2FsY29sYXJlIGwnaGFzaFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHNpbXBsZUhhc2goc3RyOiBzdHJpbmcsIHNlZWQgPSAwKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgaDEgPSAweGRlYWRiZWVmIF4gc2VlZCwgaDIgPSAweDQxYzZjZTU3IF4gc2VlZDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgY2g7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY2ggPSBzdHIuY2hhckNvZGVBdChpKTtcclxuICAgICAgICAgICAgaDEgPSBNYXRoLmltdWwoaDEgXiBjaCwgMjY1NDQzNTc2MSk7XHJcbiAgICAgICAgICAgIGgyID0gTWF0aC5pbXVsKGgyIF4gY2gsIDE1OTczMzQ2NzcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoMSA9IE1hdGguaW11bChoMSBeIChoMT4+PjE2KSwgMjI0NjgyMjUwNykgXiBNYXRoLmltdWwoaDIgXiAoaDI+Pj4xMyksIDMyNjY0ODk5MDkpO1xyXG4gICAgICAgIGgyID0gTWF0aC5pbXVsKGgyIF4gKGgyPj4+MTYpLCAyMjQ2ODIyNTA3KSBeIE1hdGguaW11bChoMSBeIChoMT4+PjEzKSwgMzI2NjQ4OTkwOSk7XHJcbiAgICAgICAgcmV0dXJuICg0Mjk0OTY3Mjk2ICogKDIwOTcxNTEgJiBoMikgKyAoaDE+Pj4wKSkudG9TdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEJsYWNrbGlzdCBkZWkgdGlwaSBkYSBpZ25vcmFyZSBxdWFuZG8gc2kgZWZmZXR0dWEgbCdoYXNoaW5nIGRlZ2xpIG9nZ2V0dGlcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBvYmpCbGFja2xpc3QgPSB7XHJcbiAgICAgICAgXCJOZ0Zvcm1cIjogdHJ1ZSwgXCJFbGVtZW50UmVmXCI6IHRydWUsIFwiRXh0ZW5zaW9uc1NlcnZpY2VcIjogdHJ1ZSwgXCJUb2FzdHJTZXJ2aWNlXCI6IHRydWUsIFwiTG9jYWxlU2VydmljZVwiOiB0cnVlLCBcIkFwcFN0YXRlXCI6IHRydWUsIFwiUm91dGVyXCI6IHRydWUsXHJcbiAgICAgICAgXCJBY3RpdmF0ZWRSb3V0ZVwiOiB0cnVlLCBcIkhUVFBTZXJ2aWNlXCI6IHRydWUsIFwiTG9jYXRpb25cIjogdHJ1ZSwgXCJDYW52YXNDb21wb25lbnRcIjogdHJ1ZSwgXCJNb2RhbERpcmVjdGl2ZVwiOiB0cnVlLCBcIkNoYW5nZURldGVjdG9yUmVmXCI6IHRydWUsXHJcbiAgICAgICAgXCJEYXRlU2VydmljZVwiOiB0cnVlLCBcIkV2ZW50RW1pdHRlclwiOiB0cnVlLCBcIlZpZXdSZWZfXCI6IHRydWUsIFwiU3Vic2NyaWJlclwiOiB0cnVlLCBcIkl0ZW1Mb2NhbGl6YXRpb25cIjogdHJ1ZVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYSB1bmEgc3RyaW5nYSBjaGUgaWRlbnRpZmljYSB1bml2b2NhbWVudGUgbCdvZ2dldHRvIGluIHF1ZXN0aW9uZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gbyBPZ2dldHRvIGRpIGN1aSBjYWxjb2xhcmUgbGEgc3RyaW5nYSB1bml2b2NhXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGV2ZWwgTGl2ZWxsbyBkaSByaWNvcnNpb25lIG5lbCBjYXNvIHZlbmdhIGVmZmV0dHVhdG8gbCdoYXNoIGRpIHVuIG9nZ2V0dG8gY2hlIGNvbnRpZW5lIGFsdHJpIG9nZ2V0dGlcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gbmF2aWdhdGVGdWxsRGVwdGggSW5kaWNhIHNlIG5hdmlnYXJlIGwnb2dnZXR0byBwZXIgbCdpbnRlcmEgbHVuZ2hlenphLiBJbiBjYXNvIGNvbnRyYXJpbyBzaSBmZXJtYSBhbCBzZWNvbmRvIGxpdmVsbG9cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzdHJpbmdpZnkobzogYW55LCBsZXZlbDogbnVtYmVyLCBuYXZpZ2F0ZUZ1bGxEZXB0aDogYm9vbGVhbikge1xyXG4gICAgICAgIHZhciBpOiBhbnksIHI6IGFueTtcclxuICAgICAgICBpZiAobyA9PT0gbnVsbCkgcmV0dXJuIFwiblwiO1xyXG4gICAgICAgIGlmIChvID09PSB0cnVlKSByZXR1cm4gXCJ0XCI7XHJcbiAgICAgICAgaWYgKG8gPT09IGZhbHNlKSByZXR1cm4gXCJmXCI7XHJcbiAgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gJ2Q6Jysgby52YWx1ZU9mKCkudG9TdHJpbmcoKTtcclxuICAgICAgICBpID0gdHlwZW9mIG87XHJcbiAgICAgICAgaWYgKGkgPT09IFwic3RyaW5nXCIpIHJldHVybiBcInM6XCIgKyBvO1xyXG4gICAgICAgIGlmIChpID09PSBcIm51bWJlclwiKSByZXR1cm4gXCJuOlwiICsgbztcclxuICAgICAgICBpZiAobyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSByZXR1cm4gXCJtOlwiICsgby50b1N0cmluZygpO1xyXG4gICAgICAgIGlmIChvIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgciA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgby5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlcyA9IHRoaXMuc3RyaW5naWZ5KG9baV0sIGxldmVsLCBuYXZpZ2F0ZUZ1bGxEZXB0aCk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzKSByLnB1c2gocmVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gci5sZW5ndGggPiAwID8gXCJhOlwiICsgci5qb2luKFwiO1wiKSA6IFwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHIgPSBbXTtcclxuXHJcbiAgICAgICAgLy9TZSDDqCBvZ2dldHRvLCBlc2NsdWRvIHR1dHRpIHF1ZWxsaSBkaSBzaXN0ZW1hL2ludXRpbGlcclxuICAgICAgICBpZiAobykge1xyXG4gICAgICAgICAgICB2YXIgbmFtZSA9IG8uX19wcm90b19fLmNvbnN0cnVjdG9yLm5hbWU7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMub2JqQmxhY2tsaXN0W25hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGkgaW4gbykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvLmhhc093blByb3BlcnR5KGkpICYmIChsZXZlbCA8PSAyIHx8IG5hdmlnYXRlRnVsbERlcHRoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzID0gdGhpcy5zdHJpbmdpZnkob1tpXSwgbGV2ZWwgKyAxLCBuYXZpZ2F0ZUZ1bGxEZXB0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXMpIHIucHVzaChpICsgXCI6XCIgKyByZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gci5sZW5ndGggPiAwID8gXCJvOlwiICsgci5qb2luKFwiO1wiKSA6IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEYXRhIHVuYSBzdHJpbmdhIHJlc3RpdHVpc2NlIGwnbWQ1XHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzIFN0cmluZ2EgZGkgY3VpIGNhbGNvbGFyZSBsJ21kNVxyXG4gICAgICogQHJldHVybnMge3N0cmluZ30gbWQ1IGRlbGxhIHN0cmluZ2EgKipzKipcclxuICAgICAqL1xyXG4gICAgcHVibGljIG1kNShzOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmhleCh0aGlzLm1kNTEocykpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICogXHJcbiAgICAgKiBNZXRvZG8gZGkgdXRpbGl0w6AgcGVyIGlsIGNhbGNvbG8gZGVsbCdtZDVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBtZDVjeWNsZSh4LCBrKSB7XHJcbiAgICAgICAgdmFyIGEgPSB4WzBdLCBiID0geFsxXSwgYyA9IHhbMl0sIGQgPSB4WzNdO1xyXG5cclxuICAgICAgICBhID0gdGhpcy5mZihhLCBiLCBjLCBkLCBrWzBdLCA3LCAtNjgwODc2OTM2KTtcclxuICAgICAgICBkID0gdGhpcy5mZihkLCBhLCBiLCBjLCBrWzFdLCAxMiwgLTM4OTU2NDU4Nik7XHJcbiAgICAgICAgYyA9IHRoaXMuZmYoYywgZCwgYSwgYiwga1syXSwgMTcsIDYwNjEwNTgxOSk7XHJcbiAgICAgICAgYiA9IHRoaXMuZmYoYiwgYywgZCwgYSwga1szXSwgMjIsIC0xMDQ0NTI1MzMwKTtcclxuICAgICAgICBhID0gdGhpcy5mZihhLCBiLCBjLCBkLCBrWzRdLCA3LCAtMTc2NDE4ODk3KTtcclxuICAgICAgICBkID0gdGhpcy5mZihkLCBhLCBiLCBjLCBrWzVdLCAxMiwgMTIwMDA4MDQyNik7XHJcbiAgICAgICAgYyA9IHRoaXMuZmYoYywgZCwgYSwgYiwga1s2XSwgMTcsIC0xNDczMjMxMzQxKTtcclxuICAgICAgICBiID0gdGhpcy5mZihiLCBjLCBkLCBhLCBrWzddLCAyMiwgLTQ1NzA1OTgzKTtcclxuICAgICAgICBhID0gdGhpcy5mZihhLCBiLCBjLCBkLCBrWzhdLCA3LCAxNzcwMDM1NDE2KTtcclxuICAgICAgICBkID0gdGhpcy5mZihkLCBhLCBiLCBjLCBrWzldLCAxMiwgLTE5NTg0MTQ0MTcpO1xyXG4gICAgICAgIGMgPSB0aGlzLmZmKGMsIGQsIGEsIGIsIGtbMTBdLCAxNywgLTQyMDYzKTtcclxuICAgICAgICBiID0gdGhpcy5mZihiLCBjLCBkLCBhLCBrWzExXSwgMjIsIC0xOTkwNDA0MTYyKTtcclxuICAgICAgICBhID0gdGhpcy5mZihhLCBiLCBjLCBkLCBrWzEyXSwgNywgMTgwNDYwMzY4Mik7XHJcbiAgICAgICAgZCA9IHRoaXMuZmYoZCwgYSwgYiwgYywga1sxM10sIDEyLCAtNDAzNDExMDEpO1xyXG4gICAgICAgIGMgPSB0aGlzLmZmKGMsIGQsIGEsIGIsIGtbMTRdLCAxNywgLTE1MDIwMDIyOTApO1xyXG4gICAgICAgIGIgPSB0aGlzLmZmKGIsIGMsIGQsIGEsIGtbMTVdLCAyMiwgMTIzNjUzNTMyOSk7XHJcblxyXG4gICAgICAgIGEgPSB0aGlzLmdnKGEsIGIsIGMsIGQsIGtbMV0sIDUsIC0xNjU3OTY1MTApO1xyXG4gICAgICAgIGQgPSB0aGlzLmdnKGQsIGEsIGIsIGMsIGtbNl0sIDksIC0xMDY5NTAxNjMyKTtcclxuICAgICAgICBjID0gdGhpcy5nZyhjLCBkLCBhLCBiLCBrWzExXSwgMTQsIDY0MzcxNzcxMyk7XHJcbiAgICAgICAgYiA9IHRoaXMuZ2coYiwgYywgZCwgYSwga1swXSwgMjAsIC0zNzM4OTczMDIpO1xyXG4gICAgICAgIGEgPSB0aGlzLmdnKGEsIGIsIGMsIGQsIGtbNV0sIDUsIC03MDE1NTg2OTEpO1xyXG4gICAgICAgIGQgPSB0aGlzLmdnKGQsIGEsIGIsIGMsIGtbMTBdLCA5LCAzODAxNjA4Myk7XHJcbiAgICAgICAgYyA9IHRoaXMuZ2coYywgZCwgYSwgYiwga1sxNV0sIDE0LCAtNjYwNDc4MzM1KTtcclxuICAgICAgICBiID0gdGhpcy5nZyhiLCBjLCBkLCBhLCBrWzRdLCAyMCwgLTQwNTUzNzg0OCk7XHJcbiAgICAgICAgYSA9IHRoaXMuZ2coYSwgYiwgYywgZCwga1s5XSwgNSwgNTY4NDQ2NDM4KTtcclxuICAgICAgICBkID0gdGhpcy5nZyhkLCBhLCBiLCBjLCBrWzE0XSwgOSwgLTEwMTk4MDM2OTApO1xyXG4gICAgICAgIGMgPSB0aGlzLmdnKGMsIGQsIGEsIGIsIGtbM10sIDE0LCAtMTg3MzYzOTYxKTtcclxuICAgICAgICBiID0gdGhpcy5nZyhiLCBjLCBkLCBhLCBrWzhdLCAyMCwgMTE2MzUzMTUwMSk7XHJcbiAgICAgICAgYSA9IHRoaXMuZ2coYSwgYiwgYywgZCwga1sxM10sIDUsIC0xNDQ0NjgxNDY3KTtcclxuICAgICAgICBkID0gdGhpcy5nZyhkLCBhLCBiLCBjLCBrWzJdLCA5LCAtNTE0MDM3ODQpO1xyXG4gICAgICAgIGMgPSB0aGlzLmdnKGMsIGQsIGEsIGIsIGtbN10sIDE0LCAxNzM1MzI4NDczKTtcclxuICAgICAgICBiID0gdGhpcy5nZyhiLCBjLCBkLCBhLCBrWzEyXSwgMjAsIC0xOTI2NjA3NzM0KTtcclxuXHJcbiAgICAgICAgYSA9IHRoaXMuaGgoYSwgYiwgYywgZCwga1s1XSwgNCwgLTM3ODU1OCk7XHJcbiAgICAgICAgZCA9IHRoaXMuaGgoZCwgYSwgYiwgYywga1s4XSwgMTEsIC0yMDIyNTc0NDYzKTtcclxuICAgICAgICBjID0gdGhpcy5oaChjLCBkLCBhLCBiLCBrWzExXSwgMTYsIDE4MzkwMzA1NjIpO1xyXG4gICAgICAgIGIgPSB0aGlzLmhoKGIsIGMsIGQsIGEsIGtbMTRdLCAyMywgLTM1MzA5NTU2KTtcclxuICAgICAgICBhID0gdGhpcy5oaChhLCBiLCBjLCBkLCBrWzFdLCA0LCAtMTUzMDk5MjA2MCk7XHJcbiAgICAgICAgZCA9IHRoaXMuaGgoZCwgYSwgYiwgYywga1s0XSwgMTEsIDEyNzI4OTMzNTMpO1xyXG4gICAgICAgIGMgPSB0aGlzLmhoKGMsIGQsIGEsIGIsIGtbN10sIDE2LCAtMTU1NDk3NjMyKTtcclxuICAgICAgICBiID0gdGhpcy5oaChiLCBjLCBkLCBhLCBrWzEwXSwgMjMsIC0xMDk0NzMwNjQwKTtcclxuICAgICAgICBhID0gdGhpcy5oaChhLCBiLCBjLCBkLCBrWzEzXSwgNCwgNjgxMjc5MTc0KTtcclxuICAgICAgICBkID0gdGhpcy5oaChkLCBhLCBiLCBjLCBrWzBdLCAxMSwgLTM1ODUzNzIyMik7XHJcbiAgICAgICAgYyA9IHRoaXMuaGgoYywgZCwgYSwgYiwga1szXSwgMTYsIC03MjI1MjE5NzkpO1xyXG4gICAgICAgIGIgPSB0aGlzLmhoKGIsIGMsIGQsIGEsIGtbNl0sIDIzLCA3NjAyOTE4OSk7XHJcbiAgICAgICAgYSA9IHRoaXMuaGgoYSwgYiwgYywgZCwga1s5XSwgNCwgLTY0MDM2NDQ4Nyk7XHJcbiAgICAgICAgZCA9IHRoaXMuaGgoZCwgYSwgYiwgYywga1sxMl0sIDExLCAtNDIxODE1ODM1KTtcclxuICAgICAgICBjID0gdGhpcy5oaChjLCBkLCBhLCBiLCBrWzE1XSwgMTYsIDUzMDc0MjUyMCk7XHJcbiAgICAgICAgYiA9IHRoaXMuaGgoYiwgYywgZCwgYSwga1syXSwgMjMsIC05OTUzMzg2NTEpO1xyXG5cclxuICAgICAgICBhID0gdGhpcy5paShhLCBiLCBjLCBkLCBrWzBdLCA2LCAtMTk4NjMwODQ0KTtcclxuICAgICAgICBkID0gdGhpcy5paShkLCBhLCBiLCBjLCBrWzddLCAxMCwgMTEyNjg5MTQxNSk7XHJcbiAgICAgICAgYyA9IHRoaXMuaWkoYywgZCwgYSwgYiwga1sxNF0sIDE1LCAtMTQxNjM1NDkwNSk7XHJcbiAgICAgICAgYiA9IHRoaXMuaWkoYiwgYywgZCwgYSwga1s1XSwgMjEsIC01NzQzNDA1NSk7XHJcbiAgICAgICAgYSA9IHRoaXMuaWkoYSwgYiwgYywgZCwga1sxMl0sIDYsIDE3MDA0ODU1NzEpO1xyXG4gICAgICAgIGQgPSB0aGlzLmlpKGQsIGEsIGIsIGMsIGtbM10sIDEwLCAtMTg5NDk4NjYwNik7XHJcbiAgICAgICAgYyA9IHRoaXMuaWkoYywgZCwgYSwgYiwga1sxMF0sIDE1LCAtMTA1MTUyMyk7XHJcbiAgICAgICAgYiA9IHRoaXMuaWkoYiwgYywgZCwgYSwga1sxXSwgMjEsIC0yMDU0OTIyNzk5KTtcclxuICAgICAgICBhID0gdGhpcy5paShhLCBiLCBjLCBkLCBrWzhdLCA2LCAxODczMzEzMzU5KTtcclxuICAgICAgICBkID0gdGhpcy5paShkLCBhLCBiLCBjLCBrWzE1XSwgMTAsIC0zMDYxMTc0NCk7XHJcbiAgICAgICAgYyA9IHRoaXMuaWkoYywgZCwgYSwgYiwga1s2XSwgMTUsIC0xNTYwMTk4MzgwKTtcclxuICAgICAgICBiID0gdGhpcy5paShiLCBjLCBkLCBhLCBrWzEzXSwgMjEsIDEzMDkxNTE2NDkpO1xyXG4gICAgICAgIGEgPSB0aGlzLmlpKGEsIGIsIGMsIGQsIGtbNF0sIDYsIC0xNDU1MjMwNzApO1xyXG4gICAgICAgIGQgPSB0aGlzLmlpKGQsIGEsIGIsIGMsIGtbMTFdLCAxMCwgLTExMjAyMTAzNzkpO1xyXG4gICAgICAgIGMgPSB0aGlzLmlpKGMsIGQsIGEsIGIsIGtbMl0sIDE1LCA3MTg3ODcyNTkpO1xyXG4gICAgICAgIGIgPSB0aGlzLmlpKGIsIGMsIGQsIGEsIGtbOV0sIDIxLCAtMzQzNDg1NTUxKTtcclxuXHJcbiAgICAgICAgeFswXSA9IHRoaXMuYWRkMzIoYSwgeFswXSk7XHJcbiAgICAgICAgeFsxXSA9IHRoaXMuYWRkMzIoYiwgeFsxXSk7XHJcbiAgICAgICAgeFsyXSA9IHRoaXMuYWRkMzIoYywgeFsyXSk7XHJcbiAgICAgICAgeFszXSA9IHRoaXMuYWRkMzIoZCwgeFszXSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKiBcclxuICAgICAqIE1ldG9kbyBkaSB1dGlsaXTDoCBwZXIgaWwgY2FsY29sbyBkZWxsJ21kNVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNtbihxLCBhLCBiLCB4LCBzLCB0KSB7XHJcbiAgICAgICAgYSA9IHRoaXMuYWRkMzIodGhpcy5hZGQzMihhLCBxKSwgdGhpcy5hZGQzMih4LCB0KSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkMzIoKGEgPDwgcykgfCAoYSA+Pj4gKDMyIC0gcykpLCBiKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqIFxyXG4gICAgICogTWV0b2RvIGRpIHV0aWxpdMOgIHBlciBpbCBjYWxjb2xvIGRlbGwnbWQ1XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZmYoYSwgYiwgYywgZCwgeCwgcywgdCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNtbigoYiAmIGMpIHwgKCh+YikgJiBkKSwgYSwgYiwgeCwgcywgdCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKiBcclxuICAgICAqIE1ldG9kbyBkaSB1dGlsaXTDoCBwZXIgaWwgY2FsY29sbyBkZWxsJ21kNVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdnKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jbW4oKGIgJiBkKSB8IChjICYgKH5kKSksIGEsIGIsIHgsIHMsIHQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICogXHJcbiAgICAgKiBNZXRvZG8gZGkgdXRpbGl0w6AgcGVyIGlsIGNhbGNvbG8gZGVsbCdtZDVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBoaChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY21uKGIgXiBjIF4gZCwgYSwgYiwgeCwgcywgdCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKiBcclxuICAgICAqIE1ldG9kbyBkaSB1dGlsaXTDoCBwZXIgaWwgY2FsY29sbyBkZWxsJ21kNVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGlpKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jbW4oYyBeIChiIHwgKH5kKSksIGEsIGIsIHgsIHMsIHQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICogXHJcbiAgICAgKiBNZXRvZG8gZGkgdXRpbGl0w6AgcGVyIGlsIGNhbGNvbG8gZGVsbCdtZDVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBtZDUxKHM6IHN0cmluZykge1xyXG4gICAgICAgIHZhciBuID0gcy5sZW5ndGgsIHN0YXRlID0gWzE3MzI1ODQxOTMsIC0yNzE3MzM4NzksIC0xNzMyNTg0MTk0LCAyNzE3MzM4NzhdLCBpO1xyXG5cclxuICAgICAgICBmb3IgKGkgPSA2NDsgaSA8PSBzLmxlbmd0aDsgaSArPSA2NClcclxuICAgICAgICAgICAgdGhpcy5tZDVjeWNsZShzdGF0ZSwgdGhpcy5tZDVibGsocy5zdWJzdHJpbmcoaSAtIDY0LCBpKSkpO1xyXG5cclxuICAgICAgICBzID0gcy5zdWJzdHJpbmcoaSAtIDY0KTtcclxuICAgICAgICB2YXIgdGFpbCA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXTtcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgdGFpbFtpID4+IDJdIHw9IHMuY2hhckNvZGVBdChpKSA8PCAoKGkgJSA0KSA8PCAzKTtcclxuICAgICAgICB0YWlsW2kgPj4gMl0gfD0gMHg4MCA8PCAoKGkgJSA0KSA8PCAzKTtcclxuICAgICAgICBpZiAoaSA+IDU1KSB7XHJcbiAgICAgICAgICAgIHRoaXMubWQ1Y3ljbGUoc3RhdGUsIHRhaWwpO1xyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgdGFpbFtpXSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRhaWxbMTRdID0gbiAqIDg7XHJcbiAgICAgICAgdGhpcy5tZDVjeWNsZShzdGF0ZSwgdGFpbCk7XHJcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICogXHJcbiAgICAgKiBNZXRvZG8gZGkgdXRpbGl0w6AgcGVyIGlsIGNhbGNvbG8gZGVsbCdtZDVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBtZDVibGsocykge1xyXG4gICAgICAgIHZhciBtZDVibGtzID0gW10sIGk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDY0OyBpICs9IDQpXHJcbiAgICAgICAgICAgIG1kNWJsa3NbaSA+PiAyXSA9IHMuY2hhckNvZGVBdChpKSArIChzLmNoYXJDb2RlQXQoaSArIDEpIDw8IDgpICsgKHMuY2hhckNvZGVBdChpICsgMikgPDwgMTYpICsgKHMuY2hhckNvZGVBdChpICsgMykgPDwgMjQpO1xyXG4gICAgICAgIHJldHVybiBtZDVibGtzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXJyYXkgZGVpIHBvc3NpYmlsaSB2YWxvcmkgZGkgdW4gc2ltYm9sbyBlc2FkZWNpbWFsZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGhleF9jaHI6IHN0cmluZ1tdID0gJzAxMjM0NTY3ODlhYmNkZWYnLnNwbGl0KCcnKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqIFxyXG4gICAgICogTWV0b2RvIGRpIHV0aWxpdMOgIHBlciBpbCBjYWxjb2xvIGRlbGwnbWQ1XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmhleChuKSB7XHJcbiAgICAgICAgdmFyIHMgPSAnJywgaiA9IDA7XHJcbiAgICAgICAgZm9yICg7IGogPCA0OyBqKyspXHJcbiAgICAgICAgICAgIHMgKz0gdGhpcy5oZXhfY2hyWyhuID4+IChqICogOCArIDQpKSAmIDB4MEZdICsgdGhpcy5oZXhfY2hyWyhuID4+IChqICogOCkpICYgMHgwRl07XHJcbiAgICAgICAgcmV0dXJuIHM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKiBcclxuICAgICAqIE1ldG9kbyBkaSB1dGlsaXTDoCBwZXIgaWwgY2FsY29sbyBkZWxsJ21kNVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGhleCh4KSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICB4W2ldID0gdGhpcy5yaGV4KHhbaV0pO1xyXG4gICAgICAgIHJldHVybiB4LmpvaW4oJycpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICogXHJcbiAgICAgKiBNZXRvZG8gZGkgdXRpbGl0w6AgcGVyIGlsIGNhbGNvbG8gZGVsbCdtZDVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBhZGQzMihhLCBiKSB7XHJcbiAgICAgICAgcmV0dXJuIChhICsgYikgJiAweEZGRkZGRkZGO1xyXG4gICAgfVxyXG59Il19
@@ -1,54 +0,0 @@
1
- // Angular
2
- import { Injectable } from "@angular/core";
3
- // Librerie
4
- import { Subject } from "rxjs";
5
- // Modelli
6
- import { InterComMessage } from "../models/InterComMessage";
7
- import * as i0 from "@angular/core";
8
- /** Service che si occupa di gestire la comunicazione fra i moduli interni ed esterni dell'applicativo */
9
- export class InterComService {
10
- constructor() {
11
- /** Messaggi in uscita, uno per ogni recipient registratosi dall'entrypoint **register** */
12
- this.outbounds = {};
13
- /** Messaggi in entrata, unico per applicazione principale */
14
- this.inbounds = new Subject();
15
- }
16
- /**
17
- * Metodo che permette di inviare un messaggio dall'applicazione ad un modulo esterno o viceversa
18
- *
19
- * @param {any} messageType Tipologia di messaggio. Sarà di tipo **InboundMessageTypes** per tutti i messaggi inbound, dinamico per tutti i mesaggi outbound (il tipo dipenderà dagli enum dei messaggi dei moduli esterni)
20
- * @param {any} message Messaggio da inviare che può essere un dto in casi complessi ma dovrà essere gestito a dovere lato implementativo
21
- * @param {string} recipient Destinatario del messaggio. Per i messaggi inbound dev'essere lasciato vuoto, per i messaggi outbound sarà valorizzato alla chiave del modulo a cui si vuole inviare il messaggio
22
- */
23
- send(messageType, message, recipient) {
24
- let msg = new InterComMessage(messageType, message);
25
- // Se non c'è un recipient significa che è un modulo esterno che invia messaggi al modulo main (quindi messaggio in entrata - inbound)
26
- // Altrimenti significa che è il modulo main ad inviare messaggi ai moduli esterni (messaggio in uscita - outbound)
27
- if (!recipient) {
28
- this.inbounds.next(msg);
29
- }
30
- else {
31
- if (!this.outbounds[recipient])
32
- console.warn("@esfaenza/extensions - InterComService: Impossibile inviare il messaggio al recipient " + recipient + " assicurarsi che il modulo sia caricato e che effettui la chiamata al metodo 'regisster'");
33
- else
34
- this.outbounds[recipient].next(msg);
35
- }
36
- }
37
- /**
38
- * Permette di registrare un modulo esterno alla lista dei moduli in listening sulla coda di messaggi
39
- *
40
- * @param {string} key Chiave del modulo da registrare. Tutti i messaggi inbound saranno inviati dall'applicazione principale su questa chiave
41
- */
42
- register(key) {
43
- if (this.outbounds[key])
44
- throw "@esfaenza/extensions - InterComService: Impossibile registrare più volte lo stesso modulo";
45
- this.outbounds[key] = new Subject();
46
- }
47
- }
48
- InterComService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: InterComService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
49
- InterComService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: InterComService, providedIn: "root" });
50
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: InterComService, decorators: [{
51
- type: Injectable,
52
- args: [{ providedIn: "root" }]
53
- }] });
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5zaW9ucy5pbnRlcmNvbS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXh0ZW5zaW9ucy9zcmMvbGliL3NlcnZpY2VzL2V4dGVuc2lvbnMuaW50ZXJjb20uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxXQUFXO0FBQ1gsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixVQUFVO0FBQ1YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDOztBQUU1RCx5R0FBeUc7QUFFekcsTUFBTSxPQUFPLGVBQWU7SUFENUI7UUFHSSwyRkFBMkY7UUFDcEYsY0FBUyxHQUErQyxFQUFFLENBQUM7UUFDbEUsNkRBQTZEO1FBQ3RELGFBQVEsR0FBNkIsSUFBSSxPQUFPLEVBQW1CLENBQUM7S0FtQzlFO0lBakNHOzs7Ozs7T0FNRztJQUNJLElBQUksQ0FBQyxXQUFnQixFQUFFLE9BQVksRUFBRSxTQUFrQjtRQUMxRCxJQUFJLEdBQUcsR0FBRyxJQUFJLGVBQWUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFcEQsc0lBQXNJO1FBQ3RJLG1IQUFtSDtRQUNuSCxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ1osSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDM0I7YUFDSTtZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztnQkFDMUIsT0FBTyxDQUFDLElBQUksQ0FBQyx3RkFBd0YsR0FBRyxTQUFTLEdBQUcsMEZBQTBGLENBQUMsQ0FBQzs7Z0JBRWhOLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1NBQzFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxRQUFRLENBQUMsR0FBVztRQUN2QixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO1lBQ25CLE1BQU0sMkZBQTJGLENBQUM7UUFDdEcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLE9BQU8sRUFBbUIsQ0FBQztJQUN6RCxDQUFDOzs0R0F2Q1EsZUFBZTtnSEFBZixlQUFlLGNBREgsTUFBTTsyRkFDbEIsZUFBZTtrQkFEM0IsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLy8gTGlicmVyaWVcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcblxyXG4vLyBNb2RlbGxpXHJcbmltcG9ydCB7IEludGVyQ29tTWVzc2FnZSB9IGZyb20gXCIuLi9tb2RlbHMvSW50ZXJDb21NZXNzYWdlXCI7XHJcblxyXG4vKiogU2VydmljZSBjaGUgc2kgb2NjdXBhIGRpIGdlc3RpcmUgbGEgY29tdW5pY2F6aW9uZSBmcmEgaSBtb2R1bGkgaW50ZXJuaSBlZCBlc3Rlcm5pIGRlbGwnYXBwbGljYXRpdm8gKi9cclxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46IFwicm9vdFwifSlcclxuZXhwb3J0IGNsYXNzIEludGVyQ29tU2VydmljZSB7XHJcblxyXG4gICAgLyoqIE1lc3NhZ2dpIGluIHVzY2l0YSwgdW5vIHBlciBvZ25pIHJlY2lwaWVudCByZWdpc3RyYXRvc2kgZGFsbCdlbnRyeXBvaW50ICoqcmVnaXN0ZXIqKiAqL1xyXG4gICAgcHVibGljIG91dGJvdW5kczogeyBbaWQ6IHN0cmluZ106IFN1YmplY3Q8SW50ZXJDb21NZXNzYWdlPiB9ID0ge307XHJcbiAgICAvKiogTWVzc2FnZ2kgaW4gZW50cmF0YSwgdW5pY28gcGVyIGFwcGxpY2F6aW9uZSBwcmluY2lwYWxlICovXHJcbiAgICBwdWJsaWMgaW5ib3VuZHM6IFN1YmplY3Q8SW50ZXJDb21NZXNzYWdlPiA9IG5ldyBTdWJqZWN0PEludGVyQ29tTWVzc2FnZT4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldG9kbyBjaGUgcGVybWV0dGUgZGkgaW52aWFyZSB1biBtZXNzYWdnaW8gZGFsbCdhcHBsaWNhemlvbmUgYWQgdW4gbW9kdWxvIGVzdGVybm8gbyB2aWNldmVyc2FcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IG1lc3NhZ2VUeXBlIFRpcG9sb2dpYSBkaSBtZXNzYWdnaW8uIFNhcsOgIGRpIHRpcG8gKipJbmJvdW5kTWVzc2FnZVR5cGVzKiogcGVyIHR1dHRpIGkgbWVzc2FnZ2kgaW5ib3VuZCwgZGluYW1pY28gcGVyIHR1dHRpIGkgbWVzYWdnaSBvdXRib3VuZCAoaWwgdGlwbyBkaXBlbmRlcsOgIGRhZ2xpIGVudW0gZGVpIG1lc3NhZ2dpIGRlaSBtb2R1bGkgZXN0ZXJuaSlcclxuICAgICAqIEBwYXJhbSB7YW55fSBtZXNzYWdlIE1lc3NhZ2dpbyBkYSBpbnZpYXJlIGNoZSBwdcOyIGVzc2VyZSB1biBkdG8gaW4gY2FzaSBjb21wbGVzc2kgbWEgZG92csOgIGVzc2VyZSBnZXN0aXRvIGEgZG92ZXJlIGxhdG8gaW1wbGVtZW50YXRpdm9cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWNpcGllbnQgRGVzdGluYXRhcmlvIGRlbCBtZXNzYWdnaW8uIFBlciBpIG1lc3NhZ2dpIGluYm91bmQgZGV2J2Vzc2VyZSBsYXNjaWF0byB2dW90bywgcGVyIGkgbWVzc2FnZ2kgb3V0Ym91bmQgc2Fyw6AgdmFsb3JpenphdG8gYWxsYSBjaGlhdmUgZGVsIG1vZHVsbyBhIGN1aSBzaSB2dW9sZSBpbnZpYXJlIGlsIG1lc3NhZ2dpb1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2VuZChtZXNzYWdlVHlwZTogYW55LCBtZXNzYWdlOiBhbnksIHJlY2lwaWVudD86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGxldCBtc2cgPSBuZXcgSW50ZXJDb21NZXNzYWdlKG1lc3NhZ2VUeXBlLCBtZXNzYWdlKTtcclxuXHJcbiAgICAgICAgLy8gU2Ugbm9uIGMnw6ggdW4gcmVjaXBpZW50IHNpZ25pZmljYSBjaGUgw6ggdW4gbW9kdWxvIGVzdGVybm8gY2hlIGludmlhIG1lc3NhZ2dpIGFsIG1vZHVsbyBtYWluIChxdWluZGkgbWVzc2FnZ2lvIGluIGVudHJhdGEgLSBpbmJvdW5kKVxyXG4gICAgICAgIC8vIEFsdHJpbWVudGkgc2lnbmlmaWNhIGNoZSDDqCBpbCBtb2R1bG8gbWFpbiBhZCBpbnZpYXJlIG1lc3NhZ2dpIGFpIG1vZHVsaSBlc3Rlcm5pIChtZXNzYWdnaW8gaW4gdXNjaXRhIC0gb3V0Ym91bmQpXHJcbiAgICAgICAgaWYgKCFyZWNpcGllbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5pbmJvdW5kcy5uZXh0KG1zZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMub3V0Ym91bmRzW3JlY2lwaWVudF0pXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJAZXNmYWVuemEvZXh0ZW5zaW9ucyAtIEludGVyQ29tU2VydmljZTogSW1wb3NzaWJpbGUgaW52aWFyZSBpbCBtZXNzYWdnaW8gYWwgcmVjaXBpZW50IFwiICsgcmVjaXBpZW50ICsgXCIgYXNzaWN1cmFyc2kgY2hlIGlsIG1vZHVsbyBzaWEgY2FyaWNhdG8gZSBjaGUgZWZmZXR0dWkgbGEgY2hpYW1hdGEgYWwgbWV0b2RvICdyZWdpc3N0ZXInXCIpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLm91dGJvdW5kc1tyZWNpcGllbnRdLm5leHQobXNnKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcm1ldHRlIGRpIHJlZ2lzdHJhcmUgdW4gbW9kdWxvIGVzdGVybm8gYWxsYSBsaXN0YSBkZWkgbW9kdWxpIGluIGxpc3RlbmluZyBzdWxsYSBjb2RhIGRpIG1lc3NhZ2dpXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgQ2hpYXZlIGRlbCBtb2R1bG8gZGEgcmVnaXN0cmFyZS4gVHV0dGkgaSBtZXNzYWdnaSBpbmJvdW5kIHNhcmFubm8gaW52aWF0aSBkYWxsJ2FwcGxpY2F6aW9uZSBwcmluY2lwYWxlIHN1IHF1ZXN0YSBjaGlhdmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlZ2lzdGVyKGtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMub3V0Ym91bmRzW2tleV0pXHJcbiAgICAgICAgICAgIHRocm93IFwiQGVzZmFlbnphL2V4dGVuc2lvbnMgLSBJbnRlckNvbVNlcnZpY2U6IEltcG9zc2liaWxlIHJlZ2lzdHJhcmUgcGnDuSB2b2x0ZSBsbyBzdGVzc28gbW9kdWxvXCI7XHJcbiAgICAgICAgdGhpcy5vdXRib3VuZHNba2V5XSA9IG5ldyBTdWJqZWN0PEludGVyQ29tTWVzc2FnZT4oKTtcclxuICAgIH1cclxufSJdfQ==