ngx-scandoc 0.0.1 → 1.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 (85) hide show
  1. package/core/app.worker.d.ts +1 -0
  2. package/core/components/base.component.d.ts +6 -0
  3. package/core/components/camera-switch/camera-switch.component.d.ts +11 -0
  4. package/core/components/components.module.d.ts +15 -0
  5. package/core/components/scan/scan.component.d.ts +120 -0
  6. package/core/components/scan-results/scan-results.component.d.ts +20 -0
  7. package/core/components/webcam/domain/webcam-image.d.ts +35 -0
  8. package/core/components/webcam/domain/webcam-init-error.d.ts +4 -0
  9. package/core/components/webcam/domain/webcam-mirror-properties.d.ts +3 -0
  10. package/core/components/webcam/util/webcam.util.d.ts +8 -0
  11. package/core/components/webcam/webcam/webcam.component.d.ts +205 -0
  12. package/core/components/webcam/webcam.module.d.ts +9 -0
  13. package/core/interfaces/config.d.ts +16 -0
  14. package/core/pipes/pipes.module.d.ts +7 -0
  15. package/core/pipes/safeResourceUrl.pipe.d.ts +10 -0
  16. package/core/shared/material.module.d.ts +28 -0
  17. package/dialogs/components/blank/blank.component.d.ts +16 -0
  18. package/dialogs/components/confirm/confirm.component.d.ts +30 -0
  19. package/dialogs/components/loading/loading.component.d.ts +5 -0
  20. package/dialogs/components/scan-profile/scan-profile.component.d.ts +18 -0
  21. package/dialogs/components/scan-selfie/scan-selfie.component.d.ts +83 -0
  22. package/dialogs/components/turn-document/turn-document.component.d.ts +12 -0
  23. package/dialogs/dialogs.core.provider.d.ts +18 -0
  24. package/dialogs/dialogs.module.d.ts +21 -0
  25. package/esm2020/core/app.worker.mjs +236 -0
  26. package/esm2020/core/components/base.component.mjs +15 -0
  27. package/esm2020/core/components/camera-switch/camera-switch.component.mjs +22 -0
  28. package/esm2020/core/components/components.module.mjs +46 -0
  29. package/esm2020/core/components/scan/scan.component.mjs +587 -0
  30. package/esm2020/core/components/scan-results/scan-results.component.mjs +38 -0
  31. package/esm2020/core/components/webcam/domain/webcam-image.mjs +58 -0
  32. package/esm2020/core/components/webcam/domain/webcam-init-error.mjs +3 -0
  33. package/esm2020/core/components/webcam/domain/webcam-mirror-properties.mjs +3 -0
  34. package/esm2020/core/components/webcam/util/webcam.util.mjs +48 -0
  35. package/esm2020/core/components/webcam/webcam/webcam.component.mjs +867 -0
  36. package/esm2020/core/components/webcam/webcam.module.mjs +22 -0
  37. package/esm2020/core/interfaces/config.mjs +2 -0
  38. package/esm2020/core/pipes/pipes.module.mjs +19 -0
  39. package/esm2020/core/pipes/safeResourceUrl.pipe.mjs +20 -0
  40. package/esm2020/core/shared/material.module.mjs +162 -0
  41. package/esm2020/dialogs/components/blank/blank.component.mjs +46 -0
  42. package/esm2020/dialogs/components/confirm/confirm.component.mjs +53 -0
  43. package/esm2020/dialogs/components/loading/loading.component.mjs +12 -0
  44. package/esm2020/dialogs/components/scan-profile/scan-profile.component.mjs +48 -0
  45. package/esm2020/dialogs/components/scan-selfie/scan-selfie.component.mjs +392 -0
  46. package/esm2020/dialogs/components/turn-document/turn-document.component.mjs +32 -0
  47. package/esm2020/dialogs/dialogs.core.provider.mjs +109 -0
  48. package/esm2020/dialogs/dialogs.module.mjs +89 -0
  49. package/esm2020/forms/form.module.mjs +87 -0
  50. package/esm2020/forms/types/avatar.type.mjs +53 -0
  51. package/esm2020/forms/types/profile.image.type.mjs +54 -0
  52. package/esm2020/forms/types/title.type.mjs +60 -0
  53. package/esm2020/lib/ngx-scandoc.module.mjs +28 -11
  54. package/esm2020/providers/auth.provider.mjs +58 -0
  55. package/esm2020/providers/camera.provider.mjs +40 -0
  56. package/esm2020/providers/interceptor.provider.mjs +61 -0
  57. package/esm2020/providers/layout.provider.mjs +28 -0
  58. package/esm2020/providers/scan.form.mjs +386 -0
  59. package/esm2020/providers/scan.provider.mjs +488 -0
  60. package/esm2020/providers/translation.provider.mjs +50 -0
  61. package/esm2020/providers/webrtc.provider.mjs +58 -0
  62. package/esm2020/public-api.mjs +24 -4
  63. package/fesm2015/ngx-scandoc.mjs +4190 -31
  64. package/fesm2015/ngx-scandoc.mjs.map +1 -1
  65. package/fesm2020/ngx-scandoc.mjs +4166 -31
  66. package/fesm2020/ngx-scandoc.mjs.map +1 -1
  67. package/forms/form.module.d.ts +18 -0
  68. package/forms/types/avatar.type.d.ts +14 -0
  69. package/forms/types/profile.image.type.d.ts +14 -0
  70. package/forms/types/title.type.d.ts +12 -0
  71. package/lib/ngx-scandoc.module.d.ts +6 -2
  72. package/package.json +6 -2
  73. package/providers/auth.provider.d.ts +21 -0
  74. package/providers/camera.provider.d.ts +17 -0
  75. package/providers/interceptor.provider.d.ts +13 -0
  76. package/providers/layout.provider.d.ts +11 -0
  77. package/providers/scan.form.d.ts +13 -0
  78. package/providers/scan.provider.d.ts +237 -0
  79. package/providers/translation.provider.d.ts +9 -0
  80. package/providers/webrtc.provider.d.ts +11 -0
  81. package/public-api.d.ts +23 -3
  82. package/esm2020/lib/ngx-scandoc.component.mjs +0 -22
  83. package/esm2020/lib/ngx-scandoc.service.mjs +0 -14
  84. package/lib/ngx-scandoc.component.d.ts +0 -8
  85. package/lib/ngx-scandoc.service.d.ts +0 -6
@@ -0,0 +1,488 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { Observable } from 'rxjs';
3
+ import { map } from 'rxjs/operators';
4
+ import moment from 'moment';
5
+ import { HttpHeaders } from '@angular/common/http';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/common/http";
8
+ export class ScanProvider {
9
+ constructor(http, config) {
10
+ this.http = http;
11
+ this.config = config;
12
+ this.enableVerification = true;
13
+ this.canStoreImages = true;
14
+ }
15
+ genderList() {
16
+ return {
17
+ M: 'MALE',
18
+ 'M/M': 'MALE',
19
+ F: 'FEMALE',
20
+ 'F/F': 'FEMALE',
21
+ };
22
+ }
23
+ stateless(DocumentFaceImage, LiveFaceImage) {
24
+ const data = {
25
+ AcceptTermsAndConditions: true,
26
+ DataFields: {
27
+ DocumentFaceImageType: 'base64',
28
+ DocumentFaceImage,
29
+ LiveFaceImageType: 'base64',
30
+ LiveFaceImage,
31
+ },
32
+ };
33
+ const $request = this.http.post(this.config.stateLessPath, data);
34
+ return $request;
35
+ }
36
+ sendLog(data) {
37
+ const { TransactionID } = data.Response;
38
+ const $request = this.http.post(this.config.errorLoggingPath, data, {
39
+ headers: new HttpHeaders({
40
+ TransactionID,
41
+ }),
42
+ });
43
+ return $request;
44
+ }
45
+ burst(Images) {
46
+ const data = {
47
+ AcceptTermsAndConditions: true,
48
+ DataFields: {
49
+ Images,
50
+ },
51
+ };
52
+ const $request = this.http.post(this.config.validationPath, data);
53
+ return $request;
54
+ }
55
+ countries() {
56
+ return this.http.get('/assets/data/countries.json').pipe(map((data) => {
57
+ return data.data.map((c) => {
58
+ return { label: c.short.en, value: c.cca2 };
59
+ });
60
+ }));
61
+ }
62
+ countryList() {
63
+ return {
64
+ AFG: 'AF',
65
+ ALB: 'AL',
66
+ DZA: 'DZ',
67
+ ASM: 'AS',
68
+ AND: 'AD',
69
+ AGO: 'AO',
70
+ AIA: 'AI',
71
+ ATG: 'AG',
72
+ ARG: 'AR',
73
+ ARM: 'AM',
74
+ ABW: 'AW',
75
+ AUS: 'AU',
76
+ AUT: 'AT',
77
+ AZE: 'AZ',
78
+ BHS: 'BS',
79
+ BHR: 'BH',
80
+ BGD: 'BD',
81
+ BRB: 'BB',
82
+ BLR: 'BY',
83
+ BEL: 'BE',
84
+ BLZ: 'BZ',
85
+ BEN: 'BJ',
86
+ BMU: 'BM',
87
+ BTN: 'BT',
88
+ BOL: 'BO',
89
+ BIH: 'BA',
90
+ BWA: 'BW',
91
+ BRA: 'BR',
92
+ VGB: 'VG',
93
+ BRN: 'BN',
94
+ BGR: 'BG',
95
+ BFA: 'BF',
96
+ BDI: 'BI',
97
+ KHM: 'KH',
98
+ CMR: 'CM',
99
+ CAN: 'CA',
100
+ CPV: 'CV',
101
+ CAF: 'CF',
102
+ TCD: 'TD',
103
+ CHL: 'CL',
104
+ CHN: 'CN',
105
+ HKG: 'HK',
106
+ MAC: 'MO',
107
+ COL: 'CO',
108
+ COM: 'KM',
109
+ COG: 'CG',
110
+ CRI: 'CR',
111
+ CIV: 'CI',
112
+ HRV: 'HR',
113
+ CUB: 'CU',
114
+ CYP: 'CY',
115
+ CZE: 'CZ',
116
+ DNK: 'DK',
117
+ DJI: 'DJ',
118
+ DMA: 'DM',
119
+ DOM: 'DO',
120
+ ECU: 'EC',
121
+ EGY: 'EG',
122
+ SLV: 'SV',
123
+ GNQ: 'GQ',
124
+ ERI: 'ER',
125
+ EST: 'EE',
126
+ ETH: 'ET',
127
+ FRO: 'FO',
128
+ FJI: 'FJ',
129
+ FIN: 'FI',
130
+ FRA: 'FR',
131
+ GUF: 'GF',
132
+ PYF: 'PF',
133
+ GAB: 'GA',
134
+ GMB: 'GM',
135
+ GEO: 'GE',
136
+ DEU: 'DE',
137
+ GHA: 'GH',
138
+ GRC: 'GR',
139
+ GRL: 'GL',
140
+ GRD: 'GD',
141
+ GLP: 'GP',
142
+ GUM: 'GU',
143
+ GTM: 'GT',
144
+ GNB: 'GW',
145
+ HTI: 'HT',
146
+ HND: 'HN',
147
+ ISL: 'IS',
148
+ IDN: 'ID',
149
+ IRQ: 'IQ',
150
+ ITA: 'IT',
151
+ JPN: 'JP',
152
+ JOR: 'JO',
153
+ KAZ: 'KZ',
154
+ KEN: 'KE',
155
+ KIR: 'KI',
156
+ PRK: 'KP',
157
+ KOR: 'KR',
158
+ KWT: 'KW',
159
+ KGZ: 'KG',
160
+ LAO: 'LA',
161
+ LVA: 'LV',
162
+ LBN: 'LB',
163
+ LSO: 'LS',
164
+ LBR: 'LR',
165
+ LBY: 'LY',
166
+ LIE: 'LI',
167
+ LTU: 'LT',
168
+ LUX: 'LU',
169
+ MDG: 'MG',
170
+ MWI: 'MW',
171
+ MYS: 'MY',
172
+ MDV: 'MV',
173
+ MLI: 'ML',
174
+ MLT: 'MT',
175
+ MHL: 'MH',
176
+ MTQ: 'MQ',
177
+ MRT: 'MR',
178
+ MUS: 'MU',
179
+ MEX: 'MX',
180
+ FSM: 'FM',
181
+ MDA: 'MD',
182
+ MCO: 'MC',
183
+ MNG: 'MN',
184
+ MNE: 'ME',
185
+ MSR: 'MS',
186
+ MAR: 'MA',
187
+ MOZ: 'MZ',
188
+ MMR: 'MM',
189
+ NAM: 'NA',
190
+ NRU: 'NR',
191
+ NPL: 'NP',
192
+ NLD: 'NL',
193
+ ANT: 'AN',
194
+ NCL: 'NC',
195
+ NZL: 'NZ',
196
+ NIC: 'NI',
197
+ NER: 'NE',
198
+ NGA: 'NG',
199
+ MNP: 'MP',
200
+ NOR: 'NO',
201
+ OMN: 'OM',
202
+ PAK: 'PK',
203
+ PLW: 'PW',
204
+ PSE: 'PS',
205
+ PAN: 'PA',
206
+ PNG: 'PG',
207
+ PRY: 'PY',
208
+ PER: 'PE',
209
+ PHL: 'PH',
210
+ PCN: 'PN',
211
+ POL: 'PL',
212
+ PRT: 'PT',
213
+ PRI: 'PR',
214
+ QAT: 'QA',
215
+ REU: 'RE',
216
+ ROU: 'RO',
217
+ RUS: 'RU',
218
+ RWA: 'RW',
219
+ KNA: 'KN',
220
+ LCA: 'LC',
221
+ VCT: 'VC',
222
+ WSM: 'WS',
223
+ SMR: 'SM',
224
+ STP: 'ST',
225
+ SAU: 'SA',
226
+ SEN: 'SN',
227
+ SRB: 'RS',
228
+ SYC: 'SC',
229
+ SLE: 'SL',
230
+ SGP: 'SG',
231
+ SVK: 'SK',
232
+ SVN: 'SI',
233
+ SLB: 'SB',
234
+ SOM: 'SO',
235
+ ZAF: 'ZA',
236
+ ESP: 'ES',
237
+ LKA: 'LK',
238
+ SDN: 'SD',
239
+ SUR: 'SR',
240
+ SWZ: 'SZ',
241
+ SWE: 'SE',
242
+ CHE: 'CH',
243
+ SYR: 'SY',
244
+ TJK: 'TJ',
245
+ TZA: 'TZ',
246
+ THA: 'TH',
247
+ TLS: 'TL',
248
+ TGO: 'TG',
249
+ TON: 'TO',
250
+ TTO: 'TT',
251
+ TUN: 'TN',
252
+ TUR: 'TR',
253
+ TKM: 'TM',
254
+ TUV: 'TV',
255
+ UGA: 'UG',
256
+ UKR: 'UA',
257
+ ARE: 'AE',
258
+ GBR: 'GB',
259
+ USA: 'US',
260
+ URY: 'UY',
261
+ UZB: 'UZ',
262
+ VUT: 'VU',
263
+ VEN: 'VE',
264
+ VNM: 'VN',
265
+ VIR: 'VI',
266
+ YEM: 'YE',
267
+ ZMB: 'ZM',
268
+ ZWE: 'ZW',
269
+ };
270
+ }
271
+ get fields() {
272
+ return [
273
+ {
274
+ key: 'Birth Date',
275
+ form: 'birthDate',
276
+ type: 'date',
277
+ main: false,
278
+ blastKey: 'BirthDate',
279
+ },
280
+ {
281
+ key: 'Given Name',
282
+ form: 'firstName',
283
+ ucFirst: true,
284
+ type: 'string',
285
+ main: true,
286
+ blastKey: 'Name',
287
+ },
288
+ {
289
+ key: 'Surname',
290
+ form: 'lastName',
291
+ ucFirst: true,
292
+ type: 'string',
293
+ main: true,
294
+ blastKey: 'Surname',
295
+ },
296
+ {
297
+ key: 'Sex',
298
+ form: 'gender',
299
+ type: 'gender',
300
+ main: false,
301
+ blastKey: 'Gender',
302
+ },
303
+ {
304
+ key: 'Document Class Name',
305
+ type: 'string',
306
+ form: 'documentType',
307
+ main: false,
308
+ blastKey: 'docType',
309
+ },
310
+ {
311
+ key: 'Document Number',
312
+ type: 'string',
313
+ form: 'documentNumber',
314
+ main: false,
315
+ blastKey: 'DocumentNumber',
316
+ },
317
+ {
318
+ key: 'Issuing State Code',
319
+ type: 'country',
320
+ form: 'issueStateCode',
321
+ blastKey: 'CountryOfIssue',
322
+ main: false,
323
+ },
324
+ {
325
+ key: 'Expiration Date',
326
+ type: 'date',
327
+ form: 'expirationDate',
328
+ blastKey: 'ExpiryDate',
329
+ main: false,
330
+ },
331
+ {
332
+ key: 'Issue Date',
333
+ type: 'date',
334
+ form: 'issueDate',
335
+ blastKey: 'IssuedDate',
336
+ main: false,
337
+ },
338
+ {
339
+ key: 'Birth Place',
340
+ type: 'string',
341
+ form: 'birthPlace',
342
+ blastKey: 'PlaceOfBirth',
343
+ main: false,
344
+ },
345
+ {
346
+ key: 'Issuing Authority',
347
+ type: 'string',
348
+ form: 'issuingPlace',
349
+ blastKey: 'IssuingAuthority',
350
+ main: false,
351
+ },
352
+ {
353
+ key: 'Nationality Code',
354
+ type: 'country',
355
+ form: 'nationality',
356
+ main: false,
357
+ blastKey: 'Nationality',
358
+ },
359
+ {
360
+ key: 'street1',
361
+ type: 'string',
362
+ form: 'street1',
363
+ main: false,
364
+ blastKey: 'AddressStreet',
365
+ },
366
+ {
367
+ key: 'city',
368
+ type: 'string',
369
+ form: 'city',
370
+ main: false,
371
+ blastKey: 'AddressCity',
372
+ },
373
+ {
374
+ key: 'country',
375
+ type: 'country',
376
+ form: 'country',
377
+ main: false,
378
+ blastKey: 'Country',
379
+ },
380
+ {
381
+ key: 'zip',
382
+ type: 'string',
383
+ form: 'zip',
384
+ main: false,
385
+ blastKey: 'AddressZip',
386
+ },
387
+ ];
388
+ }
389
+ parseBlast(results) {
390
+ const countries = this.countryList();
391
+ const genders = this.genderList();
392
+ const data = this.fields;
393
+ const validatedAddressFields = [
394
+ 'AddressCity',
395
+ 'AddressZip',
396
+ 'AddressCounty',
397
+ 'AddressStreet',
398
+ ].filter((key) => results[key].Validated);
399
+ // if no address is validated
400
+ if (validatedAddressFields.length === 0) {
401
+ if (results.Address.Validated) {
402
+ results.AddressStreet = results.Address;
403
+ }
404
+ }
405
+ const out = data.map((itm) => {
406
+ const res = results[itm.blastKey];
407
+ if (res) {
408
+ const value = res.RecommendedValue || '';
409
+ switch (itm.type) {
410
+ case 'string':
411
+ itm.value = value;
412
+ if (itm.ucFirst) {
413
+ const name = value.toLowerCase();
414
+ itm.value = name.charAt(0).toUpperCase() + name.slice(1);
415
+ }
416
+ break;
417
+ case 'date':
418
+ itm.value = value ? moment(value, 'DD.MM.YYYY').toDate() : null;
419
+ // if (value.indexOf('/Date') >= 0) {
420
+ // console.log(value);
421
+ // const timestamp = value.replace(/\D/gm, '');
422
+ // //itm.value = moment.unix(timestamp / 1000).toDate();
423
+ // itm.value = moment(
424
+ // timestamp - moment(timestamp, 'x').utcOffset() * 60 * 1000,
425
+ // 'x',
426
+ // ).toDate();
427
+ // }
428
+ break;
429
+ case 'country':
430
+ itm.value = countries[value] || null;
431
+ break;
432
+ case 'gender':
433
+ itm.value = genders[value] || null;
434
+ }
435
+ }
436
+ return itm;
437
+ });
438
+ const model = {};
439
+ out.forEach((element) => {
440
+ console.log(element);
441
+ model[element.form] = element.value;
442
+ });
443
+ model.documentType = results.Metadata.DocumentType;
444
+ console.log(model);
445
+ return {
446
+ fields: out,
447
+ model,
448
+ };
449
+ }
450
+ blastPost(data) {
451
+ // const $request = this.api.http.get('/assets/json/blastscan.json');
452
+ const $request = this.http.post(this.config.extractionPath, data);
453
+ return $request.pipe(map((m) => {
454
+ if (m.Metadata && m.Metadata.length > 0) {
455
+ const metadata = m.Metadata[0];
456
+ m.Data.Country = {
457
+ RecommendedValue: metadata.Country,
458
+ };
459
+ m.Data.Metadata = metadata;
460
+ }
461
+ return m;
462
+ }));
463
+ }
464
+ blobToDataUrl(file) {
465
+ return Observable.create((obs) => {
466
+ const reader = new FileReader();
467
+ reader.onerror = (err) => obs.error(err);
468
+ reader.onabort = (err) => obs.error(err);
469
+ reader.onload = () => {
470
+ obs.next(reader.result);
471
+ };
472
+ reader.onloadend = () => obs.complete();
473
+ return reader.readAsDataURL(file);
474
+ });
475
+ }
476
+ }
477
+ ScanProvider.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScanProvider, deps: [{ token: i1.HttpClient }, { token: 'config' }], target: i0.ɵɵFactoryTarget.Injectable });
478
+ ScanProvider.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScanProvider, providedIn: 'root' });
479
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScanProvider, decorators: [{
480
+ type: Injectable,
481
+ args: [{
482
+ providedIn: 'root',
483
+ }]
484
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: undefined, decorators: [{
485
+ type: Inject,
486
+ args: ['config']
487
+ }] }]; } });
488
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nhbi5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zY2FuZG9jL3NyYy9wcm92aWRlcnMvc2Nhbi5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsVUFBVSxFQUFNLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxHQUFHLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFjLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7QUFRL0QsTUFBTSxPQUFPLFlBQVk7SUFJdkIsWUFDVSxJQUFnQixFQUVDLE1BQWtCO1FBRm5DLFNBQUksR0FBSixJQUFJLENBQVk7UUFFQyxXQUFNLEdBQU4sTUFBTSxDQUFZO1FBTDdDLHVCQUFrQixHQUFHLElBQUksQ0FBQztRQUMxQixtQkFBYyxHQUFHLElBQUksQ0FBQztJQUtuQixDQUFDO0lBQ0osVUFBVTtRQUNSLE9BQU87WUFDTCxDQUFDLEVBQUUsTUFBTTtZQUNULEtBQUssRUFBRSxNQUFNO1lBQ2IsQ0FBQyxFQUFFLFFBQVE7WUFDWCxLQUFLLEVBQUUsUUFBUTtTQUNoQixDQUFDO0lBQ0osQ0FBQztJQUVELFNBQVMsQ0FBQyxpQkFBc0IsRUFBRSxhQUFrQjtRQUNsRCxNQUFNLElBQUksR0FBRztZQUNYLHdCQUF3QixFQUFFLElBQUk7WUFDOUIsVUFBVSxFQUFFO2dCQUNWLHFCQUFxQixFQUFFLFFBQVE7Z0JBQy9CLGlCQUFpQjtnQkFDakIsaUJBQWlCLEVBQUUsUUFBUTtnQkFDM0IsYUFBYTthQUNkO1NBQ0YsQ0FBQztRQUNGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxPQUFPLENBQUMsSUFBUztRQUNmLE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFO1lBQ2xFLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBQztnQkFDdkIsYUFBYTthQUNkLENBQUM7U0FDSCxDQUFDLENBQUM7UUFDSCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQWdCO1FBQ3BCLE1BQU0sSUFBSSxHQUFHO1lBQ1gsd0JBQXdCLEVBQUUsSUFBSTtZQUM5QixVQUFVLEVBQUU7Z0JBQ1YsTUFBTTthQUNQO1NBQ0YsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xFLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLElBQUksQ0FDdEQsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7WUFDaEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO2dCQUM5QixPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDOUMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUNELFdBQVc7UUFDVCxPQUFPO1lBQ0wsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FB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LEVBQUUsTUFBTTtpQkFDbkI7OzBCQVFJLE1BQU07MkJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IFNjYW5Db25maWcgfSBmcm9tICcuLi9jb3JlL2ludGVyZmFjZXMvY29uZmlnJztcblxuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTY2FuUHJvdmlkZXIge1xuXG4gIGVuYWJsZVZlcmlmaWNhdGlvbiA9IHRydWU7XG4gIGNhblN0b3JlSW1hZ2VzID0gdHJ1ZTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuXG4gICAgQEluamVjdCgnY29uZmlnJykgcHVibGljIGNvbmZpZzogU2NhbkNvbmZpZ1xuICApIHt9XG4gIGdlbmRlckxpc3QoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIE06ICdNQUxFJyxcbiAgICAgICdNL00nOiAnTUFMRScsXG4gICAgICBGOiAnRkVNQUxFJyxcbiAgICAgICdGL0YnOiAnRkVNQUxFJyxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGVsZXNzKERvY3VtZW50RmFjZUltYWdlOiBhbnksIExpdmVGYWNlSW1hZ2U6IGFueSkge1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBBY2NlcHRUZXJtc0FuZENvbmRpdGlvbnM6IHRydWUsXG4gICAgICBEYXRhRmllbGRzOiB7XG4gICAgICAgIERvY3VtZW50RmFjZUltYWdlVHlwZTogJ2Jhc2U2NCcsXG4gICAgICAgIERvY3VtZW50RmFjZUltYWdlLFxuICAgICAgICBMaXZlRmFjZUltYWdlVHlwZTogJ2Jhc2U2NCcsXG4gICAgICAgIExpdmVGYWNlSW1hZ2UsXG4gICAgICB9LFxuICAgIH07XG4gICAgY29uc3QgJHJlcXVlc3QgPSB0aGlzLmh0dHAucG9zdCh0aGlzLmNvbmZpZy5zdGF0ZUxlc3NQYXRoLCBkYXRhKTtcbiAgICByZXR1cm4gJHJlcXVlc3Q7XG4gIH1cblxuICBzZW5kTG9nKGRhdGE6IGFueSkge1xuICAgIGNvbnN0IHsgVHJhbnNhY3Rpb25JRCB9ID0gZGF0YS5SZXNwb25zZTtcbiAgICBjb25zdCAkcmVxdWVzdCA9IHRoaXMuaHR0cC5wb3N0KHRoaXMuY29uZmlnLmVycm9yTG9nZ2luZ1BhdGgsIGRhdGEsIHtcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgIFRyYW5zYWN0aW9uSUQsXG4gICAgICB9KSxcbiAgICB9KTtcbiAgICByZXR1cm4gJHJlcXVlc3Q7XG4gIH1cblxuICBidXJzdChJbWFnZXM6IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIEFjY2VwdFRlcm1zQW5kQ29uZGl0aW9uczogdHJ1ZSxcbiAgICAgIERhdGFGaWVsZHM6IHtcbiAgICAgICAgSW1hZ2VzLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgJHJlcXVlc3QgPSB0aGlzLmh0dHAucG9zdCh0aGlzLmNvbmZpZy52YWxpZGF0aW9uUGF0aCwgZGF0YSk7XG4gICAgcmV0dXJuICRyZXF1ZXN0O1xuICB9XG5cbiAgY291bnRyaWVzKCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KCcvYXNzZXRzL2RhdGEvY291bnRyaWVzLmpzb24nKS5waXBlKFxuICAgICAgbWFwKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIGRhdGEuZGF0YS5tYXAoKGM6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiB7IGxhYmVsOiBjLnNob3J0LmVuLCB2YWx1ZTogYy5jY2EyIH07XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICApO1xuICB9XG4gIGNvdW50cnlMaXN0KCkge1xuICAgIHJldHVybiB7XG4gICAgICBBRkc6ICdBRicsXG4gICAgICBBTEI6ICdBTCcsXG4gICAgICBEWkE6ICdEWicsXG4gICAgICBBU006ICdBUycsXG4gICAgICBBTkQ6ICdBRCcsXG4gICAgICBBR086ICdBTycsXG4gICAgICBBSUE6ICdBSScsXG4gICAgICBBVEc6ICdBRycsXG4gICAgICBBUkc6ICdBUicsXG4gICAgICBBUk06ICdBTScsXG4gICAgICBBQlc6ICdBVycsXG4gICAgICBBVVM6ICdBVScsXG4gICAgICBBVVQ6ICdBVCcsXG4gICAgICBBWkU6ICdBWicsXG4gICAgICBCSFM6ICdCUycsXG4gICAgICBCSFI6ICdCSCcsXG4gICAgICBCR0Q6ICdCRCcsXG4gICAgICBCUkI6ICdCQicsXG4gICAgICBCTFI6ICdCWScsXG4gICAgICBCRUw6ICdCRScsXG4gICAgICBCTFo6ICdCWicsXG4gICAgICBCRU46ICdCSicsXG4gICAgICBCTVU6ICdCTScsXG4gICAgICBCVE46ICdCVCcsXG4gICAgICBCT0w6ICdCTycsXG4gICAgICBCSUg6ICdCQScsXG4gICAgICBCV0E6ICdCVycsXG4gICAgICBCUkE6ICdCUicsXG4gICAgICBWR0I6ICdWRycsXG4gICAgICBCUk46ICdCTicsXG4gICAgICBCR1I6ICdCRycsXG4gICAgICBCRkE6ICdCRicsXG4gICAgICBCREk6ICdCSScsXG4gICAgICBLSE06ICdLSCcsXG4gICAgICBDTVI6ICdDTScsXG4gICAgICBDQU46ICdDQScsXG4gICAgICBDUFY6ICdDVicsXG4gICAgICBDQUY6ICdDRicsXG4gICAgICBUQ0Q6ICdURCcsXG4gICAgICBDSEw6ICdDTCcsXG4gICAgICBDSE46ICdDTicsXG4gICAgICBIS0c6ICdISycsXG4gICAgICBNQUM6ICdNTycsXG4gICAgICBDT0w6ICdDTycsXG4gICAgICBDT006ICdLTScsXG4gICAgICBDT0c6ICdDRycsXG4gICAgICBDUkk6ICdDUicsXG4gICAgICBDSVY6ICdDSScsXG4gICAgICBIUlY6ICdIUicsXG4gICAgICBDVUI6ICdDVScsXG4gICAgICBDWVA6ICdDWScsXG4gICAgICBDWkU6ICdDWicsXG4gICAgICBETks6ICdESycsXG4gICAgICBESkk6ICdESicsXG4gICAgICBETUE6ICdETScsXG4gICAgICBET006ICdETycsXG4gICAgICBFQ1U6ICdFQycsXG4gICAgICBFR1k6ICdFRycsXG4gICAgICBTTFY6ICdTVicsXG4gICAgICBHTlE6ICdHUScsXG4gICAgICBFUkk6ICdFUicsXG4gICAgICBFU1Q6ICdFRScsXG4gICAgICBFVEg6ICdFVCcsXG4gICAgICBGUk86ICdGTycsXG4gICAgICBGSkk6ICdGSicsXG4gICAgICBGSU46ICdGSScsXG4gICAgICBGUkE6ICdGUicsXG4gICAgICBHVUY6ICdHRicsXG4gICAgICBQWUY6ICdQRicsXG4gICAgICBHQUI6ICdHQScsXG4gICAgICBHTUI6ICdHTScsXG4gICAgICBHRU86ICdHRScsXG4gICAgICBERVU6ICdERScsXG4gICAgICBHSEE6ICdHSCcsXG4gICAgICBHUkM6ICdHUicsXG4gICAgICBHUkw6ICdHTCcsXG4gICAgICBHUkQ6ICdHRCcsXG4gICAgICBHTFA6ICdHUCcsXG4gICAgICBHVU06ICdHVScsXG4gICAgICBHVE06ICdHVCcsXG4gICAgICBHTkI6ICdHVycsXG4gICAgICBIVEk6ICdIVCcsXG4gICAgICBITkQ6ICdITicsXG4gICAgICBJU0w6ICdJUycsXG4gICAgICBJRE46ICdJRCcsXG4gICAgICBJUlE6ICdJUScsXG4gICAgICBJVEE6ICdJVCcsXG4gICAgICBKUE46ICdKUCcsXG4gICAgICBKT1I6ICdKTycsXG4gICAgICBLQVo6ICdLWicsXG4gICAgICBLRU46ICdLRScsXG4gICAgICBLSVI6ICdLSScsXG4gICAgICBQUks6ICdLUCcsXG4gICAgICBLT1I6ICdLUicsXG4gICAgICBLV1Q6ICdLVycsXG4gICAgICBLR1o6ICdLRycsXG4gICAgICBMQU86ICdMQScsXG4gICAgICBMVkE6ICdMVicsXG4gICAgICBMQk46ICdMQicsXG4gICAgICBMU086ICdMUycsXG4gICAgICBMQlI6ICdMUicsXG4gICAgICBMQlk6ICdMWScsXG4gICAgICBMSUU6ICdMSScsXG4gICAgICBMVFU6ICdMVCcsXG4gICAgICBMVVg6ICdMVScsXG4gICAgICBNREc6ICdNRycsXG4gICAgICBNV0k6ICdNVycsXG4gICAgICBNWVM6ICdNWScsXG4gICAgICBNRFY6ICdNVicsXG4gICAgICBNTEk6ICdNTCcsXG4gICAgICBNTFQ6ICdNVCcsXG4gICAgICBNSEw6ICdNSCcsXG4gICAgICBNVFE6ICdNUScsXG4gICAgICBNUlQ6ICdNUicsXG4gICAgICBNVVM6ICdNVScsXG4gICAgICBNRVg6ICdNWCcsXG4gICAgICBGU006ICdGTScsXG4gICAgICBNREE6ICdNRCcsXG4gICAgICBNQ086ICdNQycsXG4gICAgICBNTkc6ICdNTicsXG4gICAgICBNTkU6ICdNRScsXG4gICAgICBNU1I6ICdNUycsXG4gICAgICBNQVI6ICdNQScsXG4gICAgICBNT1o6ICdNWicsXG4gICAgICBNTVI6ICdNTScsXG4gICAgICBOQU06ICdOQScsXG4gICAgICBOUlU6ICdOUicsXG4gICAgICBOUEw6ICdOUCcsXG4gICAgICBOTEQ6ICdOTCcsXG4gICAgICBBTlQ6ICdBTicsXG4gICAgICBOQ0w6ICdOQycsXG4gICAgICBOWkw6ICdOWicsXG4gICAgICBOSUM6ICdOSScsXG4gICAgICBORVI6ICdORScsXG4gICAgICBOR0E6ICdORycsXG4gICAgICBNTlA6ICdNUCcsXG4gICAgICBOT1I6ICdOTycsXG4gICAgICBPTU46ICdPTScsXG4gICAgICBQQUs6ICdQSycsXG4gICAgICBQTFc6ICdQVycsXG4gICAgICBQU0U6ICdQUycsXG4gICAgICBQQU46ICdQQScsXG4gICAgICBQTkc6ICdQRycsXG4gICAgICBQUlk6ICdQWScsXG4gICAgICBQRVI6ICdQRScsXG4gICAgICBQSEw6ICdQSCcsXG4gICAgICBQQ046ICdQTicsXG4gICAgICBQT0w6ICdQTCcsXG4gICAgICBQUlQ6ICdQVCcsXG4gICAgICBQUkk6ICdQUicsXG4gICAgICBRQVQ6ICdRQScsXG4gICAgICBSRVU6ICdSRScsXG4gICAgICBST1U6ICdSTycsXG4gICAgICBSVVM6ICdSVScsXG4gICAgICBSV0E6ICdSVycsXG4gICAgICBLTkE6ICdLTicsXG4gICAgICBMQ0E6ICdMQycsXG4gICAgICBWQ1Q6ICdWQycsXG4gICAgICBXU006ICdXUycsXG4gICAgICBTTVI6ICdTTScsXG4gICAgICBTVFA6ICdTVCcsXG4gICAgICBTQVU6ICdTQScsXG4gICAgICBTRU46ICdTTicsXG4gICAgICBTUkI6ICdSUycsXG4gICAgICBTWUM6ICdTQycsXG4gICAgICBTTEU6ICdTTCcsXG4gICAgICBTR1A6ICdTRycsXG4gICAgICBTVks6ICdTSycsXG4gICAgICBTVk46ICdTSScsXG4gICAgICBTTEI6ICdTQicsXG4gICAgICBTT006ICdTTycsXG4gICAgICBaQUY6ICdaQScsXG4gICAgICBFU1A6ICdFUycsXG4gICAgICBMS0E6ICdMSycsXG4gICAgICBTRE46ICdTRCcsXG4gICAgICBTVVI6ICdTUicsXG4gICAgICBTV1o6ICdTWicsXG4gICAgICBTV0U6ICdTRScsXG4gICAgICBDSEU6ICdDSCcsXG4gICAgICBTWVI6ICdTWScsXG4gICAgICBUSks6ICdUSicsXG4gICAgICBUWkE6ICdUWicsXG4gICAgICBUSEE6ICdUSCcsXG4gICAgICBUTFM6ICdUTCcsXG4gICAgICBUR086ICdURycsXG4gICAgICBUT046ICdUTycsXG4gICAgICBUVE86ICdUVCcsXG4gICAgICBUVU46ICdUTicsXG4gICAgICBUVVI6ICdUUicsXG4gICAgICBUS006ICdUTScsXG4gICAgICBUVVY6ICdUVicsXG4gICAgICBVR0E6ICdVRycsXG4gICAgICBVS1I6ICdVQScsXG4gICAgICBBUkU6ICdBRScsXG4gICAgICBHQlI6ICdHQicsXG4gICAgICBVU0E6ICdVUycsXG4gICAgICBVUlk6ICdVWScsXG4gICAgICBVWkI6ICdVWicsXG4gICAgICBWVVQ6ICdWVScsXG4gICAgICBWRU46ICdWRScsXG4gICAgICBWTk06ICdWTicsXG4gICAgICBWSVI6ICdWSScsXG4gICAgICBZRU06ICdZRScsXG4gICAgICBaTUI6ICdaTScsXG4gICAgICBaV0U6ICdaVycsXG4gICAgfTtcbiAgfVxuXG4gIGdldCBmaWVsZHMoKTogYW55IHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBrZXk6ICdCaXJ0aCBEYXRlJyxcbiAgICAgICAgZm9ybTogJ2JpcnRoRGF0ZScsXG4gICAgICAgIHR5cGU6ICdkYXRlJyxcbiAgICAgICAgbWFpbjogZmFsc2UsXG4gICAgICAgIGJsYXN0S2V5OiAnQmlydGhEYXRlJyxcbiAgICAgIH0sXG5cbiAgICAgIHtcbiAgICAgICAga2V5OiAnR2l2ZW4gTmFtZScsXG4gICAgICAgIGZvcm06ICdmaXJzdE5hbWUnLFxuICAgICAgICB1Y0ZpcnN0OiB0cnVlLFxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgbWFpbjogdHJ1ZSxcbiAgICAgICAgYmxhc3RLZXk6ICdOYW1lJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ1N1cm5hbWUnLFxuICAgICAgICBmb3JtOiAnbGFzdE5hbWUnLFxuICAgICAgICB1Y0ZpcnN0OiB0cnVlLFxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgbWFpbjogdHJ1ZSxcbiAgICAgICAgYmxhc3RLZXk6ICdTdXJuYW1lJyxcbiAgICAgIH0sXG5cbiAgICAgIHtcbiAgICAgICAga2V5OiAnU2V4JyxcbiAgICAgICAgZm9ybTogJ2dlbmRlcicsXG4gICAgICAgIHR5cGU6ICdnZW5kZXInLFxuICAgICAgICBtYWluOiBmYWxzZSxcbiAgICAgICAgYmxhc3RLZXk6ICdHZW5kZXInLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnRG9jdW1lbnQgQ2xhc3MgTmFtZScsXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBmb3JtOiAnZG9jdW1lbnRUeXBlJyxcbiAgICAgICAgbWFpbjogZmFsc2UsXG4gICAgICAgIGJsYXN0S2V5OiAnZG9jVHlwZScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdEb2N1bWVudCBOdW1iZXInLFxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZm9ybTogJ2RvY3VtZW50TnVtYmVyJyxcbiAgICAgICAgbWFpbjogZmFsc2UsXG4gICAgICAgIGJsYXN0S2V5OiAnRG9jdW1lbnROdW1iZXInLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnSXNzdWluZyBTdGF0ZSBDb2RlJyxcbiAgICAgICAgdHlwZTogJ2NvdW50cnknLFxuICAgICAgICBmb3JtOiAnaXNzdWVTdGF0ZUNvZGUnLFxuICAgICAgICBibGFzdEtleTogJ0NvdW50cnlPZklzc3VlJyxcbiAgICAgICAgbWFpbjogZmFsc2UsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdFeHBpcmF0aW9uIERhdGUnLFxuICAgICAgICB0eXBlOiAnZGF0ZScsXG4gICAgICAgIGZvcm06ICdleHBpcmF0aW9uRGF0ZScsXG4gICAgICAgIGJsYXN0S2V5OiAnRXhwaXJ5RGF0ZScsXG4gICAgICAgIG1haW46IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnSXNzdWUgRGF0ZScsXG4gICAgICAgIHR5cGU6ICdkYXRlJyxcbiAgICAgICAgZm9ybTogJ2lzc3VlRGF0ZScsXG4gICAgICAgIGJsYXN0S2V5OiAnSXNzdWVkRGF0ZScsXG4gICAgICAgIG1haW46IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnQmlydGggUGxhY2UnLFxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZm9ybTogJ2JpcnRoUGxhY2UnLFxuICAgICAgICBibGFzdEtleTogJ1BsYWNlT2ZCaXJ0aCcsXG4gICAgICAgIG1haW46IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnSXNzdWluZyBBdXRob3JpdHknLFxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZm9ybTogJ2lzc3VpbmdQbGFjZScsXG4gICAgICAgIGJsYXN0S2V5OiAnSXNzdWluZ0F1dGhvcml0eScsXG4gICAgICAgIG1haW46IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnTmF0aW9uYWxpdHkgQ29kZScsXG4gICAgICAgIHR5cGU6ICdjb3VudHJ5JyxcbiAgICAgICAgZm9ybTogJ25hdGlvbmFsaXR5JyxcbiAgICAgICAgbWFpbjogZmFsc2UsXG4gICAgICAgIGJsYXN0S2V5OiAnTmF0aW9uYWxpdHknLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnc3RyZWV0MScsXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBmb3JtOiAnc3RyZWV0MScsXG4gICAgICAgIG1haW46IGZhbHNlLFxuICAgICAgICBibGFzdEtleTogJ0FkZHJlc3NTdHJlZXQnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnY2l0eScsXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBmb3JtOiAnY2l0eScsXG4gICAgICAgIG1haW46IGZhbHNlLFxuICAgICAgICBibGFzdEtleTogJ0FkZHJlc3NDaXR5JyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ2NvdW50cnknLFxuICAgICAgICB0eXBlOiAnY291bnRyeScsXG4gICAgICAgIGZvcm06ICdjb3VudHJ5JyxcbiAgICAgICAgbWFpbjogZmFsc2UsXG4gICAgICAgIGJsYXN0S2V5OiAnQ291bnRyeScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICd6aXAnLFxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZm9ybTogJ3ppcCcsXG4gICAgICAgIG1haW46IGZhbHNlLFxuICAgICAgICBibGFzdEtleTogJ0FkZHJlc3NaaXAnLFxuICAgICAgfSxcbiAgICBdO1xuICB9XG4gIHBhcnNlQmxhc3QocmVzdWx0czogYW55KSB7XG4gICAgY29uc3QgY291bnRyaWVzOiBhbnkgPSB0aGlzLmNvdW50cnlMaXN0KCk7XG4gICAgY29uc3QgZ2VuZGVyczogYW55ID0gdGhpcy5nZW5kZXJMaXN0KCk7XG4gICAgY29uc3QgZGF0YTogYW55ID0gdGhpcy5maWVsZHM7XG5cbiAgICBjb25zdCB2YWxpZGF0ZWRBZGRyZXNzRmllbGRzID0gW1xuICAgICAgJ0FkZHJlc3NDaXR5JyxcbiAgICAgICdBZGRyZXNzWmlwJyxcbiAgICAgICdBZGRyZXNzQ291bnR5JyxcbiAgICAgICdBZGRyZXNzU3RyZWV0JyxcbiAgICBdLmZpbHRlcigoa2V5KSA9PiByZXN1bHRzW2tleV0uVmFsaWRhdGVkKTtcblxuICAgIC8vIGlmIG5vIGFkZHJlc3MgaXMgdmFsaWRhdGVkXG4gICAgaWYgKHZhbGlkYXRlZEFkZHJlc3NGaWVsZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBpZiAocmVzdWx0cy5BZGRyZXNzLlZhbGlkYXRlZCkge1xuICAgICAgICByZXN1bHRzLkFkZHJlc3NTdHJlZXQgPSByZXN1bHRzLkFkZHJlc3M7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0ID0gZGF0YS5tYXAoKGl0bTogYW55KSA9PiB7XG4gICAgICBjb25zdCByZXMgPSByZXN1bHRzW2l0bS5ibGFzdEtleV07XG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcmVzLlJlY29tbWVuZGVkVmFsdWUgfHwgJyc7XG5cbiAgICAgICAgc3dpdGNoIChpdG0udHlwZSkge1xuICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICBpdG0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIGlmIChpdG0udWNGaXJzdCkge1xuICAgICAgICAgICAgICBjb25zdCBuYW1lID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgaXRtLnZhbHVlID0gbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgIGl0bS52YWx1ZSA9IHZhbHVlID8gbW9tZW50KHZhbHVlLCAnREQuTU0uWVlZWScpLnRvRGF0ZSgpIDogbnVsbDtcbiAgICAgICAgICAgIC8vIGlmICh2YWx1ZS5pbmRleE9mKCcvRGF0ZScpID49IDApIHtcbiAgICAgICAgICAgIC8vICAgY29uc29sZS5sb2codmFsdWUpO1xuICAgICAgICAgICAgLy8gICBjb25zdCB0aW1lc3RhbXAgPSB2YWx1ZS5yZXBsYWNlKC9cXEQvZ20sICcnKTtcbiAgICAgICAgICAgIC8vICAgLy9pdG0udmFsdWUgPSBtb21lbnQudW5peCh0aW1lc3RhbXAgLyAxMDAwKS50b0RhdGUoKTtcbiAgICAgICAgICAgIC8vICAgaXRtLnZhbHVlID0gbW9tZW50KFxuICAgICAgICAgICAgLy8gICAgIHRpbWVzdGFtcCAtIG1vbWVudCh0aW1lc3RhbXAsICd4JykudXRjT2Zmc2V0KCkgKiA2MCAqIDEwMDAsXG4gICAgICAgICAgICAvLyAgICAgJ3gnLFxuICAgICAgICAgICAgLy8gICApLnRvRGF0ZSgpO1xuICAgICAgICAgICAgLy8gfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdjb3VudHJ5JzpcbiAgICAgICAgICAgIGl0bS52YWx1ZSA9IGNvdW50cmllc1t2YWx1ZV0gfHwgbnVsbDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2dlbmRlcic6XG4gICAgICAgICAgICBpdG0udmFsdWUgPSBnZW5kZXJzW3ZhbHVlXSB8fCBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaXRtO1xuICAgIH0pO1xuXG4gICAgY29uc3QgbW9kZWw6IGFueSA9IHt9O1xuXG4gICAgb3V0LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgY29uc29sZS5sb2coZWxlbWVudCk7XG4gICAgICBtb2RlbFtlbGVtZW50LmZvcm1dID0gZWxlbWVudC52YWx1ZTtcbiAgICB9KTtcblxuICAgIG1vZGVsLmRvY3VtZW50VHlwZSA9IHJlc3VsdHMuTWV0YWRhdGEuRG9jdW1lbnRUeXBlO1xuXG4gICAgY29uc29sZS5sb2cobW9kZWwpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZpZWxkczogb3V0LFxuICAgICAgbW9kZWwsXG4gICAgfTtcbiAgfVxuXG4gIGJsYXN0UG9zdChkYXRhOiBhbnkpIHtcbiAgICAvLyBjb25zdCAkcmVxdWVzdCA9IHRoaXMuYXBpLmh0dHAuZ2V0KCcvYXNzZXRzL2pzb24vYmxhc3RzY2FuLmpzb24nKTtcblxuICAgIGNvbnN0ICRyZXF1ZXN0ID0gdGhpcy5odHRwLnBvc3QodGhpcy5jb25maWcuZXh0cmFjdGlvblBhdGgsIGRhdGEpO1xuXG4gICAgcmV0dXJuICRyZXF1ZXN0LnBpcGUoXG4gICAgICBtYXAoKG06IGFueSkgPT4ge1xuICAgICAgICBpZiAobS5NZXRhZGF0YSAmJiBtLk1ldGFkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBtZXRhZGF0YSA9IG0uTWV0YWRhdGFbMF07XG4gICAgICAgICAgbS5EYXRhLkNvdW50cnkgPSB7XG4gICAgICAgICAgICBSZWNvbW1lbmRlZFZhbHVlOiBtZXRhZGF0YS5Db3VudHJ5LFxuICAgICAgICAgIH07XG4gICAgICAgICAgbS5EYXRhLk1ldGFkYXRhID0gbWV0YWRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG07XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBibG9iVG9EYXRhVXJsKGZpbGU6IGFueSk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIE9ic2VydmFibGUuY3JlYXRlKChvYnM6IGFueSkgPT4ge1xuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgIHJlYWRlci5vbmVycm9yID0gKGVycikgPT4gb2JzLmVycm9yKGVycik7XG4gICAgICByZWFkZXIub25hYm9ydCA9IChlcnIpID0+IG9icy5lcnJvcihlcnIpO1xuICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgb2JzLm5leHQocmVhZGVyLnJlc3VsdCk7XG4gICAgICB9O1xuICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9ICgpID0+IG9icy5jb21wbGV0ZSgpO1xuICAgICAgcmV0dXJuIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,50 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@ngx-translate/core";
4
+ export class TranslationProvider {
5
+ constructor(translate) {
6
+ this.translate = translate;
7
+ }
8
+ forms(item, namespace = null) {
9
+ if (item.fieldGroup) {
10
+ item.fieldGroup = item.fieldGroup.map((field) => this.forms(field));
11
+ }
12
+ const prefix = namespace ? namespace + '.' : '';
13
+ if (item.templateOptions &&
14
+ (item.templateOptions.label ||
15
+ item.templateOptions.placeholder ||
16
+ item.templateOptions.options)) {
17
+ if (!item.expressionProperties) {
18
+ item.expressionProperties = {};
19
+ }
20
+ if (item.templateOptions.label) {
21
+ item.expressionProperties['templateOptions.label'] =
22
+ this.translate.stream(prefix + item.templateOptions.label);
23
+ }
24
+ if (item.templateOptions.placeholder) {
25
+ item.expressionProperties['templateOptions.placeholder'] =
26
+ this.translate.stream(prefix + item.templateOptions.placeholder);
27
+ }
28
+ if (Array.isArray(item.templateOptions.options)) {
29
+ item.expressionProperties['templateOptions.options'] =
30
+ item.templateOptions.options.map((m) => {
31
+ // console.log(m);
32
+ if (m.label) {
33
+ m.label = this.translate.instant(prefix + m.label);
34
+ }
35
+ return m;
36
+ });
37
+ }
38
+ }
39
+ return item;
40
+ }
41
+ }
42
+ TranslationProvider.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TranslationProvider, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });
43
+ TranslationProvider.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TranslationProvider, providedIn: 'root' });
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TranslationProvider, decorators: [{
45
+ type: Injectable,
46
+ args: [{
47
+ providedIn: 'root',
48
+ }]
49
+ }], ctorParameters: function () { return [{ type: i1.TranslateService }]; } });
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24ucHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2NhbmRvYy9zcmMvcHJvdmlkZXJzL3RyYW5zbGF0aW9uLnByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVSxVQUFVLEVBQTRCLE1BQU0sZUFBZSxDQUFDOzs7QUFTN0UsTUFBTSxPQUFPLG1CQUFtQjtJQUM5QixZQUFtQixTQUEyQjtRQUEzQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtJQUFHLENBQUM7SUFFbEQsS0FBSyxDQUFDLElBQVMsRUFBRSxTQUFTLEdBQUcsSUFBSTtRQUMvQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ3pFO1FBRUQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFaEQsSUFDRSxJQUFJLENBQUMsZUFBZTtZQUNwQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSztnQkFDekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXO2dCQUNoQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxFQUMvQjtZQUNBLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7YUFDaEM7WUFDRCxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFO2dCQUM5QixJQUFJLENBQUMsb0JBQW9CLENBQUMsdUJBQXVCLENBQUM7b0JBQ2hELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzlEO1lBQ0QsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRTtnQkFDcEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLDZCQUE2QixDQUFDO29CQUN0RCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNwRTtZQUNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUMvQyxJQUFJLENBQUMsb0JBQW9CLENBQUMseUJBQXlCLENBQUM7b0JBQ2xELElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUssRUFBRSxFQUFFO3dCQUN6QyxrQkFBa0I7d0JBQ2xCLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRTs0QkFDWCxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7eUJBQ3BEO3dCQUNELE9BQU8sQ0FBQyxDQUFDO29CQUNYLENBQUMsQ0FBQyxDQUFDO2FBQ047U0FDRjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7Z0hBeENVLG1CQUFtQjtvSEFBbkIsbUJBQW1CLGNBRmxCLE1BQU07MkZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IHN3aXRjaE1hcCwgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFRyYW5zbGF0aW9uUHJvdmlkZXIge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7fVxuXG4gIGZvcm1zKGl0ZW06IGFueSwgbmFtZXNwYWNlID0gbnVsbCkge1xuICAgIGlmIChpdGVtLmZpZWxkR3JvdXApIHtcbiAgICAgIGl0ZW0uZmllbGRHcm91cCA9IGl0ZW0uZmllbGRHcm91cC5tYXAoKGZpZWxkOmFueSkgPT4gdGhpcy5mb3JtcyhmaWVsZCkpO1xuICAgIH1cblxuICAgIGNvbnN0IHByZWZpeCA9IG5hbWVzcGFjZSA/IG5hbWVzcGFjZSArICcuJyA6ICcnO1xuXG4gICAgaWYgKFxuICAgICAgaXRlbS50ZW1wbGF0ZU9wdGlvbnMgJiZcbiAgICAgIChpdGVtLnRlbXBsYXRlT3B0aW9ucy5sYWJlbCB8fFxuICAgICAgICBpdGVtLnRlbXBsYXRlT3B0aW9ucy5wbGFjZWhvbGRlciB8fFxuICAgICAgICBpdGVtLnRlbXBsYXRlT3B0aW9ucy5vcHRpb25zKVxuICAgICkge1xuICAgICAgaWYgKCFpdGVtLmV4cHJlc3Npb25Qcm9wZXJ0aWVzKSB7XG4gICAgICAgIGl0ZW0uZXhwcmVzc2lvblByb3BlcnRpZXMgPSB7fTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtLnRlbXBsYXRlT3B0aW9ucy5sYWJlbCkge1xuICAgICAgICBpdGVtLmV4cHJlc3Npb25Qcm9wZXJ0aWVzWyd0ZW1wbGF0ZU9wdGlvbnMubGFiZWwnXSA9XG4gICAgICAgICAgdGhpcy50cmFuc2xhdGUuc3RyZWFtKHByZWZpeCArIGl0ZW0udGVtcGxhdGVPcHRpb25zLmxhYmVsKTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtLnRlbXBsYXRlT3B0aW9ucy5wbGFjZWhvbGRlcikge1xuICAgICAgICBpdGVtLmV4cHJlc3Npb25Qcm9wZXJ0aWVzWyd0ZW1wbGF0ZU9wdGlvbnMucGxhY2Vob2xkZXInXSA9XG4gICAgICAgICAgdGhpcy50cmFuc2xhdGUuc3RyZWFtKHByZWZpeCArIGl0ZW0udGVtcGxhdGVPcHRpb25zLnBsYWNlaG9sZGVyKTtcbiAgICAgIH1cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW0udGVtcGxhdGVPcHRpb25zLm9wdGlvbnMpKSB7XG4gICAgICAgIGl0ZW0uZXhwcmVzc2lvblByb3BlcnRpZXNbJ3RlbXBsYXRlT3B0aW9ucy5vcHRpb25zJ10gPVxuICAgICAgICAgIGl0ZW0udGVtcGxhdGVPcHRpb25zLm9wdGlvbnMubWFwKChtOmFueSkgPT4ge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cobSk7XG4gICAgICAgICAgICBpZiAobS5sYWJlbCkge1xuICAgICAgICAgICAgICBtLmxhYmVsID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChwcmVmaXggKyBtLmxhYmVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpdGVtO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,58 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { webSocket } from 'rxjs/webSocket';
3
+ import * as i0 from "@angular/core";
4
+ export class webRtcProvider {
5
+ constructor() {
6
+ this.pc = new RTCPeerConnection();
7
+ }
8
+ connect(id = 1) {
9
+ this.subject = webSocket('wss://localhost:3000?id=' + id);
10
+ }
11
+ setup() {
12
+ this.connect(1);
13
+ // try {
14
+ // this.pc = new RTCPeerConnection({
15
+ // iceServers: [
16
+ // { urls: 'stun:stun.services.mozilla.com' },
17
+ // { urls: 'stun:stun.l.google.com:19302' },
18
+ // ],
19
+ // });
20
+ // } catch (error) {
21
+ // console.log(error);
22
+ // this.pc = new RTCPeerConnection({
23
+ // iceServers: [
24
+ // { urls: 'stun:stun.services.mozilla.com' },
25
+ // { urls: 'stun:stun.l.google.com:19302' },
26
+ // ],
27
+ // });
28
+ // }
29
+ // this.pc.onicecandidate = (event) => {
30
+ // event.candidate
31
+ // ? this.sendMessage({ ice: event.candidate })
32
+ // : console.log('Sent All Ice');
33
+ // };
34
+ // if (this.pc) {
35
+ // from(this.pc.createOffer())
36
+ // .pipe(switchMap((offer) => from(this.pc.setLocalDescription(offer))))
37
+ // .subscribe((data: any) => {
38
+ // this.sendMessage({
39
+ // type: 'offer',
40
+ // sdp: this.pc.localDescription,
41
+ // });
42
+ // });
43
+ // }
44
+ }
45
+ sendMessage(data) {
46
+ console.log(data);
47
+ this.subject.next(JSON.stringify(data));
48
+ }
49
+ }
50
+ webRtcProvider.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: webRtcProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
51
+ webRtcProvider.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: webRtcProvider, providedIn: 'root' });
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: webRtcProvider, decorators: [{
53
+ type: Injectable,
54
+ args: [{
55
+ providedIn: 'root',
56
+ }]
57
+ }], ctorParameters: function () { return []; } });
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2VicnRjLnByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNjYW5kb2Mvc3JjL3Byb3ZpZGVycy93ZWJydGMucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBTTNDLE1BQU0sT0FBTyxjQUFjO0lBR3pCO1FBRkEsT0FBRSxHQUFzQixJQUFJLGlCQUFpQixFQUFFLENBQUM7SUFFakMsQ0FBQztJQUVoQixPQUFPLENBQUMsRUFBRSxHQUFHLENBQUM7UUFDWixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQywwQkFBMEIsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsS0FBSztRQUVILElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFFZixRQUFRO1FBQ1Isc0NBQXNDO1FBQ3RDLG9CQUFvQjtRQUNwQixvREFBb0Q7UUFDcEQsa0RBQWtEO1FBQ2xELFNBQVM7UUFDVCxRQUFRO1FBQ1Isb0JBQW9CO1FBQ3BCLHdCQUF3QjtRQUN4QixzQ0FBc0M7UUFDdEMsb0JBQW9CO1FBQ3BCLG9EQUFvRDtRQUNwRCxrREFBa0Q7UUFDbEQsU0FBUztRQUNULFFBQVE7UUFDUixJQUFJO1FBRUosd0NBQXdDO1FBQ3hDLG9CQUFvQjtRQUNwQixtREFBbUQ7UUFDbkQscUNBQXFDO1FBQ3JDLEtBQUs7UUFFTCxpQkFBaUI7UUFDakIsZ0NBQWdDO1FBQ2hDLDRFQUE0RTtRQUM1RSxrQ0FBa0M7UUFDbEMsMkJBQTJCO1FBQzNCLHlCQUF5QjtRQUN6Qix5Q0FBeUM7UUFDekMsWUFBWTtRQUNaLFVBQVU7UUFDVixJQUFJO0lBQ04sQ0FBQztJQUNELFdBQVcsQ0FBQyxJQUFTO1FBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7OzJHQWxEVSxjQUFjOytHQUFkLGNBQWMsY0FGYixNQUFNOzJGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgd2ViU29ja2V0IH0gZnJvbSAncnhqcy93ZWJTb2NrZXQnO1xuaW1wb3J0IHsgZnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3Mgd2ViUnRjUHJvdmlkZXIge1xuICBwYzogUlRDUGVlckNvbm5lY3Rpb24gPSBuZXcgUlRDUGVlckNvbm5lY3Rpb24oKTtcbiAgc3ViamVjdDogYW55O1xuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgY29ubmVjdChpZCA9IDEpIHtcbiAgICB0aGlzLnN1YmplY3QgPSB3ZWJTb2NrZXQoJ3dzczovL2xvY2FsaG9zdDozMDAwP2lkPScgKyBpZCk7XG4gIH1cblxuICBzZXR1cCgpIHtcblxuICAgIHRoaXMuY29ubmVjdCgxKVxuXG4gICAgLy8gdHJ5IHtcbiAgICAvLyAgIHRoaXMucGMgPSBuZXcgUlRDUGVlckNvbm5lY3Rpb24oe1xuICAgIC8vICAgICBpY2VTZXJ2ZXJzOiBbXG4gICAgLy8gICAgICAgeyB1cmxzOiAnc3R1bjpzdHVuLnNlcnZpY2VzLm1vemlsbGEuY29tJyB9LFxuICAgIC8vICAgICAgIHsgdXJsczogJ3N0dW46c3R1bi5sLmdvb2dsZS5jb206MTkzMDInIH0sXG4gICAgLy8gICAgIF0sXG4gICAgLy8gICB9KTtcbiAgICAvLyB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgIC8vICAgdGhpcy5wYyA9IG5ldyBSVENQZWVyQ29ubmVjdGlvbih7XG4gICAgLy8gICAgIGljZVNlcnZlcnM6IFtcbiAgICAvLyAgICAgICB7IHVybHM6ICdzdHVuOnN0dW4uc2VydmljZXMubW96aWxsYS5jb20nIH0sXG4gICAgLy8gICAgICAgeyB1cmxzOiAnc3R1bjpzdHVuLmwuZ29vZ2xlLmNvbToxOTMwMicgfSxcbiAgICAvLyAgICAgXSxcbiAgICAvLyAgIH0pO1xuICAgIC8vIH1cblxuICAgIC8vIHRoaXMucGMub25pY2VjYW5kaWRhdGUgPSAoZXZlbnQpID0+IHtcbiAgICAvLyAgIGV2ZW50LmNhbmRpZGF0ZVxuICAgIC8vICAgICA/IHRoaXMuc2VuZE1lc3NhZ2UoeyBpY2U6IGV2ZW50LmNhbmRpZGF0ZSB9KVxuICAgIC8vICAgICA6IGNvbnNvbGUubG9nKCdTZW50IEFsbCBJY2UnKTtcbiAgICAvLyB9O1xuXG4gICAgLy8gaWYgKHRoaXMucGMpIHtcbiAgICAvLyAgIGZyb20odGhpcy5wYy5jcmVhdGVPZmZlcigpKVxuICAgIC8vICAgICAucGlwZShzd2l0Y2hNYXAoKG9mZmVyKSA9PiBmcm9tKHRoaXMucGMuc2V0TG9jYWxEZXNjcmlwdGlvbihvZmZlcikpKSlcbiAgICAvLyAgICAgLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgLy8gICAgICAgdGhpcy5zZW5kTWVzc2FnZSh7XG4gICAgLy8gICAgICAgICB0eXBlOiAnb2ZmZXInLFxuICAgIC8vICAgICAgICAgc2RwOiB0aGlzLnBjLmxvY2FsRGVzY3JpcHRpb24sXG4gICAgLy8gICAgICAgfSk7XG4gICAgLy8gICAgIH0pO1xuICAgIC8vIH1cbiAgfVxuICBzZW5kTWVzc2FnZShkYXRhOiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICB0aGlzLnN1YmplY3QubmV4dChKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gIH1cbn1cbiJdfQ==