form-aurora-stefanini 0.1.10 → 0.1.13

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 (53) hide show
  1. package/README.md +133 -133
  2. package/bundles/form-aurora-stefanini.umd.js +1078 -954
  3. package/bundles/form-aurora-stefanini.umd.js.map +1 -1
  4. package/bundles/form-aurora-stefanini.umd.min.js +2 -2
  5. package/bundles/form-aurora-stefanini.umd.min.js.map +1 -1
  6. package/esm2015/form-aurora-stefanini.js +4 -4
  7. package/esm2015/lib/Components/from-aurora/form-aurora.component.js +685 -685
  8. package/esm2015/lib/Models/company-parameters.js +7 -7
  9. package/esm2015/lib/Models/company.js +1 -1
  10. package/esm2015/lib/Models/fill.js +3 -3
  11. package/esm2015/lib/Models/state.js +1 -1
  12. package/esm2015/lib/Models/step.js +1 -1
  13. package/esm2015/lib/Models/stepMethod.js +3 -3
  14. package/esm2015/lib/form-aurora.module.js +22 -22
  15. package/esm2015/lib/services/TemplateService.js +85 -85
  16. package/esm2015/lib/services/data.service.js +90 -82
  17. package/esm2015/lib/utils/Offusqued.js +120 -0
  18. package/esm2015/lib/utils/regex.js +52 -52
  19. package/esm2015/public-api.js +10 -10
  20. package/esm5/form-aurora-stefanini.js +4 -4
  21. package/esm5/lib/Components/from-aurora/form-aurora.component.js +732 -732
  22. package/esm5/lib/Models/company-parameters.js +19 -19
  23. package/esm5/lib/Models/company.js +1 -1
  24. package/esm5/lib/Models/fill.js +7 -7
  25. package/esm5/lib/Models/state.js +1 -1
  26. package/esm5/lib/Models/step.js +1 -1
  27. package/esm5/lib/Models/stepMethod.js +7 -7
  28. package/esm5/lib/form-aurora.module.js +25 -25
  29. package/esm5/lib/services/TemplateService.js +97 -97
  30. package/esm5/lib/services/data.service.js +93 -85
  31. package/esm5/lib/utils/Offusqued.js +121 -0
  32. package/esm5/lib/utils/regex.js +52 -52
  33. package/esm5/public-api.js +10 -10
  34. package/fesm2015/form-aurora-stefanini.js +1013 -890
  35. package/fesm2015/form-aurora-stefanini.js.map +1 -1
  36. package/fesm5/form-aurora-stefanini.js +1082 -958
  37. package/fesm5/form-aurora-stefanini.js.map +1 -1
  38. package/form-aurora-stefanini.d.ts +4 -4
  39. package/form-aurora-stefanini.metadata.json +1 -1
  40. package/lib/Components/from-aurora/form-aurora.component.d.ts +108 -108
  41. package/lib/Models/company-parameters.d.ts +14 -14
  42. package/lib/Models/company.d.ts +22 -22
  43. package/lib/Models/fill.d.ts +6 -6
  44. package/lib/Models/state.d.ts +5 -5
  45. package/lib/Models/step.d.ts +14 -14
  46. package/lib/Models/stepMethod.d.ts +8 -8
  47. package/lib/form-aurora.module.d.ts +2 -2
  48. package/lib/services/TemplateService.d.ts +8 -8
  49. package/lib/services/data.service.d.ts +35 -35
  50. package/lib/utils/Offusqued.d.ts +7 -0
  51. package/lib/utils/regex.d.ts +51 -51
  52. package/package.json +1 -1
  53. package/public-api.d.ts +6 -6
@@ -1,732 +1,732 @@
1
- import * as tslib_1 from "tslib";
2
- import { Component, Injectable, Input, ViewChild, Output, EventEmitter } from '@angular/core';
3
- import { FormGroup, FormControl, Validators } from '@angular/forms';
4
- import { HttpClient } from '@angular/common/http';
5
- // import moment from 'moment';
6
- import { NgbDateAdapter, NgbDateParserFormatter, NgbDatepickerI18n } from '@ng-bootstrap/ng-bootstrap';
7
- import * as moment_ from 'moment';
8
- import { regexType } from '../../utils/regex';
9
- import { CommonDataService } from '../../services/data.service';
10
- var moment = moment_;
11
- /**
12
- * This Service handles how the date is represented in scripts i.e. ngModel.
13
- */
14
- var CustomAdapter = /** @class */ (function (_super) {
15
- tslib_1.__extends(CustomAdapter, _super);
16
- function CustomAdapter() {
17
- var _this = _super !== null && _super.apply(this, arguments) || this;
18
- _this.DELIMITER = '/';
19
- return _this;
20
- }
21
- CustomAdapter.prototype.fromModel = function (value) {
22
- if (value) {
23
- var date = value.split(this.DELIMITER);
24
- return {
25
- day: parseInt(date[0], 10),
26
- month: parseInt(date[1], 10),
27
- year: parseInt(date[2], 10)
28
- };
29
- }
30
- return null;
31
- };
32
- CustomAdapter.prototype.toModel = function (date) {
33
- return date ? (date.day < 10 ? 0 + date.day : date.day) + this.DELIMITER + (date.month < 10 ? 0 + date.month : date.month) + this.DELIMITER + date.year : '';
34
- };
35
- CustomAdapter = tslib_1.__decorate([
36
- Injectable()
37
- ], CustomAdapter);
38
- return CustomAdapter;
39
- }(NgbDateAdapter));
40
- export { CustomAdapter };
41
- /**
42
- * This Service handles how the date is rendered and parsed from keyboard i.e. in the bound input field.
43
- */
44
- var CustomDateParserFormatter = /** @class */ (function (_super) {
45
- tslib_1.__extends(CustomDateParserFormatter, _super);
46
- function CustomDateParserFormatter() {
47
- var _this = _super !== null && _super.apply(this, arguments) || this;
48
- _this.DELIMITER = '/';
49
- return _this;
50
- }
51
- CustomDateParserFormatter.prototype.parse = function (value) {
52
- if (value) {
53
- var date = value.split(this.DELIMITER);
54
- return {
55
- day: parseInt(date[0], 10),
56
- month: parseInt(date[1], 10),
57
- year: parseInt(date[2], 10)
58
- };
59
- }
60
- return null;
61
- };
62
- CustomDateParserFormatter.prototype.format = function (date) {
63
- return date ? (date.day < 10 ? '0' + date.day : date.day) + this.DELIMITER + (date.month < 10 ? '0' + date.month : date.month) + this.DELIMITER + date.year : '';
64
- };
65
- CustomDateParserFormatter = tslib_1.__decorate([
66
- Injectable()
67
- ], CustomDateParserFormatter);
68
- return CustomDateParserFormatter;
69
- }(NgbDateParserFormatter));
70
- export { CustomDateParserFormatter };
71
- var I18N_VALUES = {
72
- 'es': {
73
- weekdays: ['Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa', 'Do'],
74
- months: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'],
75
- weekLabel: 'sem'
76
- }
77
- // other languages you would support
78
- };
79
- var I18n = /** @class */ (function () {
80
- function I18n() {
81
- this.language = 'es';
82
- }
83
- I18n = tslib_1.__decorate([
84
- Injectable()
85
- ], I18n);
86
- return I18n;
87
- }());
88
- export { I18n };
89
- // Define custom service providing the months and weekdays translations
90
- var CustomDatepickerI18n = /** @class */ (function (_super) {
91
- tslib_1.__extends(CustomDatepickerI18n, _super);
92
- function CustomDatepickerI18n(_i18n) {
93
- var _this = _super.call(this) || this;
94
- _this._i18n = _i18n;
95
- return _this;
96
- }
97
- CustomDatepickerI18n.prototype.getWeekdayLabel = function (weekday) {
98
- return I18N_VALUES[this._i18n.language].weekdays[weekday - 1];
99
- };
100
- CustomDatepickerI18n.prototype.getWeekLabel = function () {
101
- return I18N_VALUES[this._i18n.language].weekLabel;
102
- };
103
- CustomDatepickerI18n.prototype.getMonthShortName = function (month) {
104
- return I18N_VALUES[this._i18n.language].months[month - 1];
105
- };
106
- CustomDatepickerI18n.prototype.getMonthFullName = function (month) {
107
- return this.getMonthShortName(month);
108
- };
109
- CustomDatepickerI18n.prototype.getDayAriaLabel = function (date) {
110
- return date.day + "-" + date.month + "-" + date.year;
111
- };
112
- CustomDatepickerI18n.prototype.getWeekdayShortName = function (weekday) {
113
- return I18N_VALUES[this._i18n.language].weekdays[weekday - 1];
114
- };
115
- ;
116
- CustomDatepickerI18n.ctorParameters = function () { return [
117
- { type: I18n }
118
- ]; };
119
- CustomDatepickerI18n = tslib_1.__decorate([
120
- Injectable()
121
- ], CustomDatepickerI18n);
122
- return CustomDatepickerI18n;
123
- }(NgbDatepickerI18n));
124
- export { CustomDatepickerI18n };
125
- var FormAuroraComponent = /** @class */ (function () {
126
- function FormAuroraComponent(data, http) {
127
- this.data = data;
128
- this.http = http;
129
- this.response = new EventEmitter();
130
- this.summit = new EventEmitter();
131
- this.viewAuthData = new EventEmitter();
132
- this.tipodocNumDoc = false;
133
- this.countSubmit = 0;
134
- this.watchValid = false;
135
- this.watchRequired = false;
136
- this.captchaValid = false;
137
- this.today = moment(new Date());
138
- this.maxYear = this.today.year();
139
- this.minYear = this.today.year() - 82;
140
- this.minDate = this.minYear.toString() + '-' + this.today.month().toString().padStart(2, '0') + '-' + this.today.date().toString().padStart(2, '0'); // {year: this.minYear, month: this.today.month(), day: this.today.date()};
141
- this.maxDate = this.maxYear.toString() + '-' + (this.today.month() + 1).toString().padStart(2, '0') + '-' + this.today.date().toString().padStart(2, '0'); // {year: this.maxYear, month: this.today.month() + 1, day: this.today.date()};
142
- this.recharge = false;
143
- this.indicativo = "57";
144
- this.defaultDocType = "Cédula de ciudadanía";
145
- this.patternNotValidDcto = false;
146
- this.patternNotValidCel = false;
147
- this.range = new FormGroup({
148
- start: new FormControl(),
149
- end: new FormControl(),
150
- });
151
- }
152
- FormAuroraComponent.prototype.ngOnInit = function () {
153
- var _this = this;
154
- this.minDate = new Date(this.minDate).toISOString().split('T')[0];
155
- setTimeout(function () {
156
- _this.startComponent();
157
- }, 2000);
158
- };
159
- FormAuroraComponent.prototype.startComponent = function () {
160
- var e_1, _a;
161
- var _this = this;
162
- //ordena los campos
163
- if (this.dataForm != null && this.dataForm.formQuestions != undefined) {
164
- //Same row fields
165
- this.tipodocNumDoc = (this.dataForm.formQuestions.some(function (question) { return question.question.value === "tipoDoc"; }) && this.dataForm.formQuestions.some(function (question) { return question.question.value === "numeroDoc"; })) ? true : false;
166
- this.dataForm.formQuestions = this.dataForm.formQuestions.sort(function (a, b) {
167
- return a.order - b.order;
168
- });
169
- var existcaptcha = this.dataForm.formQuestions.filter(function (item) { return item.question.questionType.id == 6; });
170
- if (existcaptcha.length == 0) {
171
- this.captchaValid = true;
172
- }
173
- var _loop_1 = function (item) {
174
- if (item.question.maxlength == null || item.question.maxlength == undefined || item.question.maxlength == 0) {
175
- item.question.maxlength = 524288; //defaultvalue
176
- }
177
- if (item.question.minLength == null || item.question.minLength == undefined) {
178
- item.question.minLength = 0;
179
- }
180
- this_1.dataReloadForm.forEach(function (element) {
181
- _this.filldata = element;
182
- if ((item.question.questionType.id === 2 || item.question.questionType.id === 1 ||
183
- item.question.questionType.id === 3) && (_this.filldata.data !== null &&
184
- _this.filldata.data !== undefined) && item.question.id === _this.filldata.id) {
185
- item.question.registred = _this.filldata.data;
186
- }
187
- });
188
- if (item.question.registred == null || item.question.minLength == undefined) {
189
- item.question.registred = '';
190
- }
191
- };
192
- var this_1 = this;
193
- try {
194
- for (var _b = tslib_1.__values(this.dataForm.formQuestions), _c = _b.next(); !_c.done; _c = _b.next()) {
195
- var item = _c.value;
196
- _loop_1(item);
197
- }
198
- }
199
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
200
- finally {
201
- try {
202
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
203
- }
204
- finally { if (e_1) throw e_1.error; }
205
- }
206
- }
207
- };
208
- FormAuroraComponent.prototype.resolvedCaptcha = function (captchaResponse) {
209
- this.captchaValid = true;
210
- if (!this.formDynamic.form.value.captcha) {
211
- this.formDynamic.controls.captcha.setValue(captchaResponse);
212
- this.formDynamic.form.value.captcha = captchaResponse;
213
- document.getElementById("btnIng").style.opacity = !this.formDynamic.valid ? "0.65" : "1";
214
- }
215
- };
216
- //Forms
217
- //Metodo para evitar el render de los items del for
218
- FormAuroraComponent.prototype.trackByIndex = function (index, obj) {
219
- return index;
220
- };
221
- FormAuroraComponent.prototype.onChangeValidPatter = function (event, question) {
222
- var _this = this;
223
- if (question.pattern != undefined) {
224
- var valid = true;
225
- var keyvalid = [8, 32, 37, 38, 39, 40, 46, 9];
226
- //diferente de Backpsace
227
- //se deja catch por error no controlable en otro tiempo de ejecucion
228
- try {
229
- if (!keyvalid.includes(event.keyCode)) {
230
- var regex = new RegExp(question.pattern);
231
- valid = regex.test(event.key);
232
- }
233
- }
234
- catch (error) { }
235
- return valid;
236
- }
237
- if (question.questionType !== undefined) {
238
- if (question.questionType.description === 'Number') {
239
- if (question.value === 'numeroDoc') {
240
- this.validateNumeroDocumento(this.formDynamic.controls["numeroDoc"].value.toString());
241
- }
242
- else if (question.value === 'celular') {
243
- this.validateCelular(this.formDynamic.controls["celular"].value.toString());
244
- }
245
- }
246
- }
247
- document.getElementById("char" + question.value).setAttribute("hidden", "true");
248
- //if temporal mientras se migran todos los tipos de campos al foreach
249
- if (question.questionType.id != 11 && question.questionType.id != 7) {
250
- if (this.validMinLength(this.formDynamic, question)) {
251
- document.getElementById(question.value).style.borderColor = "#FF0000";
252
- document.getElementById("ml" + question.value).removeAttribute("hidden");
253
- }
254
- else {
255
- document.getElementById(question.value).style.borderColor = "#E4E4E4";
256
- document.getElementById("ml" + question.value).setAttribute("hidden", "true");
257
- }
258
- if (this.validMaxLength(this.formDynamic, question)) {
259
- document.getElementById(question.value).style.borderColor = "#FF0000";
260
- document.getElementById("mxl" + question.value).removeAttribute("hidden");
261
- }
262
- else {
263
- document.getElementById(question.value).style.borderColor = "#E4E4E4";
264
- document.getElementById("mxl" + question.value).setAttribute("hidden", "true");
265
- }
266
- }
267
- this.dataForm.formQuestions.forEach(function (formQuestion) {
268
- switch (formQuestion.question.questionType.id) {
269
- //se valida campo de tipo calendario
270
- case 7:
271
- if (question.questionType.id == 7)
272
- _this.calendarRulesValidate(formQuestion);
273
- break;
274
- //se valida campo de tipo email
275
- case 11:
276
- if (question.questionType.id == 11)
277
- _this.emailRulesValidate(formQuestion);
278
- break;
279
- }
280
- });
281
- document.getElementById("btnIng").style.opacity = !this.formDynamic.valid ? "0.65" : "1";
282
- };
283
- FormAuroraComponent.prototype.validOnlyText = function (event) {
284
- var regex = /^[a-zA-Z\u00C0-\u017F]+$/g;
285
- if (event.charCode == 32) {
286
- return true;
287
- }
288
- var valid = regex.test(event.key);
289
- return valid;
290
- };
291
- FormAuroraComponent.prototype.validDate = function (event) {
292
- /*let pattern = /(?:0[1-9]|[12][0-9]|3[01])\/(?:0[1-9]|1[0-2])\/(?:19|20)[0-9]{2}/;
293
- const regex = new RegExp(pattern);
294
- valid = regex.test(event.key);
295
- */
296
- var matches = String(event.key).match(regexType.date.exp);
297
- var valid = true;
298
- if (matches === null)
299
- valid = false;
300
- // alert(valid);
301
- return valid;
302
- };
303
- FormAuroraComponent.prototype.onChangeValidDate = function (event) {
304
- //let pattern = /(?:0[1-9]|1[0-2])\/(?:0[1-9]|[12][0-9]|3[01])\/(?:19|20)[0-9]{2}/;
305
- var dateN = /[0-9]|\//;
306
- var valid = true;
307
- var regex = new RegExp(dateN);
308
- valid = regex.test(event.key);
309
- return valid;
310
- };
311
- FormAuroraComponent.prototype.rediretoutside = function (event, question) {
312
- //se deja catch por error no controlable en otro tiempo de ejecucion
313
- try {
314
- event.preventDefault();
315
- window.open(question.value, "_blank");
316
- }
317
- catch (error) { }
318
- };
319
- /**
320
- * Dispatch submit event for validations exists
321
- * @param change
322
- */
323
- FormAuroraComponent.prototype.ngOnChanges = function (change) {
324
- this.countSubmit++;
325
- };
326
- //onSubmit(form: NgForm) {
327
- FormAuroraComponent.prototype.onSubmit = function () {
328
- var _this = this;
329
- var form = this.formDynamic;
330
- this.watchValid = true;
331
- this.watchRequired = true;
332
- if (form.valid) {
333
- if (!this.validRulesFields(form.controls["numeroDoc"].value.toString(), form.controls["celular"].value.toString(), form.controls["email"].value))
334
- return false;
335
- }
336
- if (this.validMinlenghtAllQuestions(form.value) && this.validMaxLengthAllQuestions(form.value) && form.valid) {
337
- if (this.dataForm.urlSend != "" && this.captchaValid) {
338
- this.http.post(this.dataForm.urlSend, form.value).subscribe(function (resp) { return _this.response.emit(resp); });
339
- }
340
- else if (form.valid && this.captchaValid) {
341
- this.summit.emit(form.value);
342
- }
343
- }
344
- };
345
- FormAuroraComponent.prototype.findParamBoolean = function (params, idParam) {
346
- var showDescriptionParam = params.find(function (x) { return x.id == idParam; });
347
- return showDescriptionParam != null && showDescriptionParam.value == "true";
348
- };
349
- FormAuroraComponent.prototype.validRulesFields = function (numeroDoc, numeroCel, email) {
350
- var _this = this;
351
- // Validaciones para celular en caso de indicativo en Colombia
352
- var cel = document.getElementById("charcelular");
353
- var doc = document.getElementById("charnumeroDoc");
354
- var valOk = true;
355
- if (this.indicativo == "+57" || this.indicativo == "57") {
356
- var stringOrdenado = this.orderString(numeroDoc);
357
- if (this.nameCompany.toUpperCase() !== 'CLARO') { //claro acepta nro consecutivos
358
- if (numeroDoc == stringOrdenado) {
359
- doc.style.borderColor = "#FF0000";
360
- doc.removeAttribute("hidden");
361
- doc.textContent = "El numero documento No debe contener caracteres consecutivos";
362
- valOk = false;
363
- //this.msgErrorCampo = "El numero documento No debe contener caracteres consecutivos";
364
- //return false;
365
- }
366
- }
367
- if (numeroCel.substring(0, 1) != "3") {
368
- cel.style.borderColor = "#FF0000";
369
- cel.removeAttribute("hidden");
370
- cel.textContent = "El primer carácter del celular debe ser 3";
371
- valOk = false;
372
- //this.msgErrorCampo = "El primer carácter del celular debe ser 3";
373
- //return false;
374
- }
375
- /*
376
- if (parseInt(numeroCel.substring(0, 3)) > 350) {
377
- cel.style.borderColor = "#FF0000";
378
- cel.removeAttribute("hidden");
379
- cel.textContent = "El prefijo del celular no debe ser mayor a 350";
380
- valOk = false;
381
- //this.msgErrorCampo = "El prefijo del celular no debe ser mayor a 350";
382
- //return false;
383
- }
384
- */
385
- //En caso de que el número se repita, ejemplo 33333333
386
- var listnumber = numeroDoc.substring(0, 1);
387
- for (var index = 1; index < numeroDoc.length; index++) {
388
- listnumber = listnumber + numeroDoc.substring(0, 1);
389
- }
390
- if (numeroDoc == listnumber) {
391
- doc.style.borderColor = "#FF0000";
392
- doc.removeAttribute("hidden");
393
- doc.textContent = "Caracteres numéricos no se pueden repetirse de manera continua ";
394
- valOk = false;
395
- //this.msgErrorCampo = "Caracteres numéricos no se pueden repetirse de manera continua ";
396
- //return false;
397
- }
398
- if (!this.validateNumeroDocumento(numeroDoc)) {
399
- return false;
400
- }
401
- if (!this.validateCelular(numeroCel)) {
402
- return false;
403
- }
404
- // En caso de que el número se repita, ejemplo 33333333
405
- var arrayPhoneRepeat = Array.from(String(numeroCel), Number);
406
- var arrayPhoneOutRepeat = tslib_1.__spread(new Set(arrayPhoneRepeat));
407
- if (arrayPhoneOutRepeat.length == 1) {
408
- cel.style.borderColor = "#FF0000";
409
- cel.removeAttribute("hidden");
410
- cel.textContent = "El número que ingresa no es valido";
411
- valOk = false;
412
- //this.msgErrorCampo = "El número que ingresa no es valido";
413
- //return false;
414
- }
415
- }
416
- else if (this.indicativo == "+593" || this.indicativo == "593") {
417
- if (numeroCel.substring(0, 1) != "9") {
418
- cel.style.borderColor = "#FF0000";
419
- cel.removeAttribute("hidden");
420
- cel.textContent = "El primer carácter del celular debe ser 9";
421
- valOk = false;
422
- //this.msgErrorCampo = "El primer carácter del celular debe ser 9";
423
- //return false;
424
- }
425
- }
426
- //se validan los campos por tipo de campo y no por value
427
- this.dataForm.formQuestions.forEach(function (formQuestion) {
428
- switch (formQuestion.question.questionType.id) {
429
- //se valida campo de tipo email
430
- case 11:
431
- valOk = _this.emailRulesValidate(formQuestion);
432
- break;
433
- }
434
- });
435
- return valOk;
436
- };
437
- FormAuroraComponent.prototype.orderString = function (value) {
438
- var arrayNumber = [];
439
- for (var index = 0; index < value.length; index++) {
440
- arrayNumber.push(parseInt(value.substring(index, index + 1)));
441
- }
442
- //ordena el array
443
- arrayNumber.sort(function (a, b) {
444
- return a - b;
445
- });
446
- var numberOrder = "";
447
- numberOrder = arrayNumber[0];
448
- for (var index = 1; index < arrayNumber.length; index++) {
449
- numberOrder = numberOrder + (arrayNumber[0] + index).toString();
450
- }
451
- return numberOrder;
452
- };
453
- FormAuroraComponent.prototype.validMinlenghtAllQuestions = function (form) {
454
- var e_2, _a;
455
- try {
456
- for (var _b = tslib_1.__values(this.dataForm.formQuestions), _c = _b.next(); !_c.done; _c = _b.next()) {
457
- var item = _c.value;
458
- if (item.question.questionType.id == 1 || item.question.questionType.id == 2) {
459
- var minLength = parseInt(item.question.minLength);
460
- var formValueLength = parseInt(form[item.question.value].toString().length);
461
- if (minLength > 0 && formValueLength != minLength && formValueLength < minLength)
462
- return false;
463
- }
464
- }
465
- }
466
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
467
- finally {
468
- try {
469
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
470
- }
471
- finally { if (e_2) throw e_2.error; }
472
- }
473
- return true;
474
- };
475
- FormAuroraComponent.prototype.validMaxLengthAllQuestions = function (form) {
476
- var e_3, _a;
477
- try {
478
- for (var _b = tslib_1.__values(this.dataForm.formQuestions), _c = _b.next(); !_c.done; _c = _b.next()) {
479
- var item = _c.value;
480
- if (item.question.questionType.id == 1 || item.question.questionType.id == 2) {
481
- var maxLength = parseInt(item.question.maxLength);
482
- var formValueLength = parseInt(form[item.question.value].toString().length);
483
- if (maxLength > 0 && formValueLength != maxLength && formValueLength > maxLength)
484
- return false;
485
- }
486
- }
487
- }
488
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
489
- finally {
490
- try {
491
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
492
- }
493
- finally { if (e_3) throw e_3.error; }
494
- }
495
- return true;
496
- };
497
- FormAuroraComponent.prototype.validRequired = function (form, question) {
498
- //se deja catch por error no controlable en otro tiempo de ejecucion
499
- try {
500
- if (question != undefined && question.value != undefined) {
501
- if (form.controls[question.value] != undefined &&
502
- form.controls[question.value].errors != null &&
503
- form.controls[question.value].errors.required) {
504
- return true;
505
- }
506
- }
507
- }
508
- catch (error) { }
509
- return false;
510
- };
511
- FormAuroraComponent.prototype.validMinLength = function (form, question) {
512
- //se deja catch por error no controlable en otro tiempo de ejecucion
513
- try {
514
- if (question != undefined && question.value != undefined) {
515
- if (question.minLength > form.controls[question.value].value.toLocaleString().length && question.minLength > 0) {
516
- return true;
517
- }
518
- }
519
- }
520
- catch (error) { }
521
- return false;
522
- };
523
- FormAuroraComponent.prototype.validMaxLength = function (form, question) {
524
- //se deja catch por error no controlable en otro tiempo de ejecucion
525
- try {
526
- if (question != undefined && question.value != undefined) {
527
- if (question.maxLength > 0) {
528
- if (question.maxLength + 1 <= form.controls[question.value].value.toString().replace(/\./g, '').length) {
529
- if (!this.formDynamic.controls[question.value].hasError('errorMaxLength')) {
530
- this.formDynamic.controls[question.value].setErrors({ 'errorMaxLength': true });
531
- }
532
- return true;
533
- }
534
- }
535
- }
536
- }
537
- catch (error) { }
538
- return false;
539
- };
540
- FormAuroraComponent.prototype.tycSelection = function (event) {
541
- this.viewAuthData.emit(event);
542
- };
543
- FormAuroraComponent.prototype.openLabelUrl = function (event, question) {
544
- event.preventDefault();
545
- var tyc = document.getElementById("check" + question.id);
546
- tyc.style.color = "#A3AD32";
547
- window.open(question.urllabel, "_blank");
548
- };
549
- FormAuroraComponent.prototype.cancellKeypress = function () {
550
- return false;
551
- };
552
- FormAuroraComponent.prototype.emailRulesValidate = function (formQuestion) {
553
- var valOk = true;
554
- try {
555
- var hasError = false;
556
- document.getElementById(formQuestion.question.id).setAttribute("hidden", "true");
557
- var eml = document.getElementById(formQuestion.question.id);
558
- var email = formQuestion.question.registred;
559
- if (!hasError) {
560
- if (formQuestion.question.required && (email == "" || email == undefined || email == null)) {
561
- eml.style.borderColor = "#FF0000";
562
- eml.textContent = "El correco eléctronico es requerido";
563
- eml.removeAttribute("hidden");
564
- valOk = false;
565
- hasError = true;
566
- }
567
- }
568
- if (!hasError) {
569
- if (this.validMinLength(undefined, formQuestion.question)) {
570
- eml.style.borderColor = "#FF0000";
571
- eml.textContent = "Debe ser mínimo de " + formQuestion.question.minLength + " caracteres";
572
- document.getElementById(formQuestion.question.id).removeAttribute("hidden");
573
- valOk = false;
574
- hasError = true;
575
- }
576
- }
577
- if (!hasError) {
578
- if (this.validMaxLength(undefined, formQuestion.question)) {
579
- eml.style.borderColor = "#FF0000";
580
- eml.textContent = "Debe ser maximo de " + formQuestion.question.maxLength + " caracteres";
581
- document.getElementById(formQuestion.question.id).removeAttribute("hidden");
582
- valOk = false;
583
- hasError = true;
584
- }
585
- }
586
- if (!hasError) {
587
- var matches = String(email).match(regexType.email.exp);
588
- if (matches == null) {
589
- eml.style.borderColor = "#FF0000";
590
- eml.textContent = "Tu email es invalido";
591
- eml.removeAttribute("hidden");
592
- valOk = false;
593
- hasError = true;
594
- }
595
- }
596
- }
597
- catch (error) {
598
- }
599
- return valOk;
600
- };
601
- FormAuroraComponent.prototype.calendarRulesValidate = function (formQuestion) {
602
- var hasError = false;
603
- try {
604
- document.getElementById(formQuestion.question.id).setAttribute("hidden", "true");
605
- var ecalendar = document.getElementById(formQuestion.question.id);
606
- //se valida que no sea null si es requerido
607
- var date = formQuestion.question.registred;
608
- if (formQuestion.question.required && (date == "" || date == undefined || date == null)) {
609
- ecalendar.style.borderColor = "#FF0000";
610
- ecalendar.textContent = "La fecha es requerida";
611
- ecalendar.removeAttribute("hidden");
612
- }
613
- }
614
- catch (error) {
615
- }
616
- };
617
- FormAuroraComponent.prototype.validateNotSpace = function (event) {
618
- if (event.charCode == 32) {
619
- return false;
620
- }
621
- else {
622
- return true;
623
- }
624
- };
625
- FormAuroraComponent.prototype.validateNumeroDocumento = function (numeroDoc) {
626
- if (!numeroDoc.match("^[0-9]*$")) {
627
- this.formDynamic.controls["numeroDoc"].setValidators([Validators.pattern('^[0-9]*$')]);
628
- this.formDynamic.controls["numeroDoc"].markAsDirty();
629
- this.formDynamic.controls["numeroDoc"].updateValueAndValidity();
630
- this.formDynamic.controls["numeroDoc"].markAsTouched();
631
- this.patternNotValidDcto = true;
632
- return false;
633
- }
634
- this.patternNotValidDcto = false;
635
- return true;
636
- };
637
- FormAuroraComponent.prototype.validateCelular = function (numeroCel) {
638
- if (!numeroCel.match("^[0-9]*$")) {
639
- this.formDynamic.controls["celular"].setValidators([Validators.pattern('^[0-9]*$')]);
640
- this.formDynamic.controls["celular"].markAsDirty();
641
- this.formDynamic.controls["celular"].updateValueAndValidity();
642
- this.formDynamic.controls["celular"].markAsTouched();
643
- this.patternNotValidCel = true;
644
- return false;
645
- }
646
- this.patternNotValidCel = false;
647
- return true;
648
- };
649
- FormAuroraComponent.prototype.onkeypress = function (event) {
650
- return (event.charCode == 0) ? null : event.charCode >= 48 && event.charCode <= 57;
651
- };
652
- FormAuroraComponent.prototype.onChangeStep = function (step, nextStep, value) {
653
- if (nextStep && nextStep.stepOrder != 1) {
654
- this.resetField(step);
655
- nextStep.viewData = [];
656
- nextStep.viewData = nextStep.stepData.filter(function (x) { return x.relationalIds.includes(Number(value)); });
657
- }
658
- };
659
- FormAuroraComponent.prototype.resetField = function (stepIn) {
660
- this.steps.forEach(function (step) {
661
- if (step.stepOrder > stepIn.stepOrder) {
662
- step.viewData = undefined;
663
- step.value = undefined;
664
- }
665
- });
666
- };
667
- FormAuroraComponent.ctorParameters = function () { return [
668
- { type: CommonDataService },
669
- { type: HttpClient }
670
- ]; };
671
- tslib_1.__decorate([
672
- Input()
673
- ], FormAuroraComponent.prototype, "dataClassCss", void 0);
674
- tslib_1.__decorate([
675
- Input()
676
- ], FormAuroraComponent.prototype, "dataForm", void 0);
677
- tslib_1.__decorate([
678
- Input()
679
- ], FormAuroraComponent.prototype, "clickSubmit", void 0);
680
- tslib_1.__decorate([
681
- Input()
682
- ], FormAuroraComponent.prototype, "dataReloadForm", void 0);
683
- tslib_1.__decorate([
684
- Input()
685
- ], FormAuroraComponent.prototype, "welcomeTitle", void 0);
686
- tslib_1.__decorate([
687
- Input()
688
- ], FormAuroraComponent.prototype, "welcomeDescription", void 0);
689
- tslib_1.__decorate([
690
- Input()
691
- ], FormAuroraComponent.prototype, "urlPdf", void 0);
692
- tslib_1.__decorate([
693
- Input()
694
- ], FormAuroraComponent.prototype, "nameCompany", void 0);
695
- tslib_1.__decorate([
696
- Input()
697
- ], FormAuroraComponent.prototype, "schedule", void 0);
698
- tslib_1.__decorate([
699
- Input()
700
- ], FormAuroraComponent.prototype, "isSimpleFlow", void 0);
701
- tslib_1.__decorate([
702
- Input()
703
- ], FormAuroraComponent.prototype, "steps", void 0);
704
- tslib_1.__decorate([
705
- ViewChild('formDynamic', { static: true })
706
- ], FormAuroraComponent.prototype, "formDynamic", void 0);
707
- tslib_1.__decorate([
708
- Output()
709
- ], FormAuroraComponent.prototype, "response", void 0);
710
- tslib_1.__decorate([
711
- Output()
712
- ], FormAuroraComponent.prototype, "summit", void 0);
713
- tslib_1.__decorate([
714
- Output()
715
- ], FormAuroraComponent.prototype, "viewAuthData", void 0);
716
- FormAuroraComponent = tslib_1.__decorate([
717
- Component({
718
- selector: 'lib-FormAurora',
719
- template: "<div class=\"card\">\r\n <span class=\"text-center mt-2 d-none d-sm-block\" *ngIf=\"!isSimpleFlow\">\r\n <img style=\"width: 115px; height:96px;\" [class]=\"dataClassCss.logo\" id=\"logo\">\r\n </span>\r\n <div class=\"text-center mt-2 d-none d-sm-block\" *ngIf=\"isSimpleFlow\" style=\"margin-top: 4%!important;\">\r\n </div>\r\n <div class=\"card-body pt-0\">\r\n <ng-container *ngIf=\"schedule\">\r\n <h4 class=\"card-title text-center mb-0\" [class]=\"dataClassCss.bienvenida2\" style=\"color: #EE7E0E;\">\r\n Horarios de atenci\u00F3n\r\n </h4>\r\n <small class=\"text-center d-block\">{{schedule}}</small>\r\n </ng-container>\r\n <form #formDynamic=\"ngForm\">\r\n <div *ngFor=\"let control of dataForm?.formQuestions; let index = index; trackBy: trackByIndex\">\r\n <div\r\n *ngIf=\"(index > 0 && (dataForm.formQuestions[index - 1].question.questionType.id == 3 && dataForm.formQuestions[index].question.questionType.id == 2)) || (index < dataForm.formQuestions.length && dataForm.formQuestions[index].question.questionType.id == 3 && dataForm.formQuestions[index + 1].question.questionType.id == 2); else switchTemp\">\r\n <div class=\"row\"\r\n *ngIf=\"(index > 0 && (dataForm.formQuestions[index - 1].question.questionType.id == 3 && dataForm.formQuestions[index].question.questionType.id == 2))\">\r\n <div class=\"col-lg-6 col-xs-12\">\r\n <div [class]=\"dataClassCss.cl12\">\r\n <label for=\"{{dataForm.formQuestions[index - 1].question.value}}\" class=\"col-sm-12\"\r\n style=\"display: block; text-align: left;\">\r\n <span class=\"h6 small bg-white text-muted\">{{dataForm.formQuestions[index -\r\n 1].question.label}}</span>\r\n </label>\r\n <div class=\"selectContainer\">\r\n <select [name]=\"dataForm.formQuestions[index - 1].question.value\"\r\n [required]=\"dataForm.formQuestions[index - 1].question.required\"\r\n [class]=\"dataClassCss.formcontrol\"\r\n id=\"{{dataForm.formQuestions[index - 1].question.value}}\"\r\n style=\"margin-top: -1rem !important;\"\r\n [(ngModel)]=\"defaultDocType !== '' ? defaultDocType : dataForm.formQuestions[index - 1].question.registred\">\r\n <option value=\"\" selected disabled hidden>Selecciona</option>\r\n <ng-container\r\n *ngFor=\"let item of dataForm.formQuestions[index - 1].question.questionAnswers\">\r\n <option *ngIf=\"item.answer.state.id == 1\" [value]=\"item.answer.value\">\r\n {{ item.answer.field }}\r\n </option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n <div style=\"margin-left: 15px;\"\r\n *ngIf=\"dataForm.formQuestions[index].question.questionType.id != 5 && dataForm.formQuestions[index].question.questionType.id != 6\">\r\n <span class=\"error\" [id]=\"'char'+dataForm.formQuestions[index-1].question.value\"\r\n hidden></span>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6 col-xs-12\">\r\n <div [class]=\"dataClassCss.cl12\">\r\n <label for=\"{{dataForm.formQuestions[index].question.value}}\"\r\n class=\"col-sm-12 p-sm-0 px-sm-1\" style=\"display: block; text-align: left;\">\r\n <span\r\n class=\"h6 small bg-white text-muted pt-1 pl-2 pr-2\">{{dataForm.formQuestions[index].question.label}}</span>\r\n </label>\r\n <input type=\"text\" pattern=\"\\d*\" inputmode=\"numeric\"\r\n id=\"{{dataForm.formQuestions[index].question.value}}\"\r\n style=\"margin-top: -1rem !important;\"\r\n [name]=\"dataForm.formQuestions[index].question.value\" placeholder=\"Escribe\"\r\n [required]=\"dataForm.formQuestions[index].question.required\"\r\n (change)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\r\n (blur)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\r\n (keyup)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\r\n onkeypress=\"onkeypress($event)\" onkeyup=\"(this.value=(value.replace(/[.]*/g,'')))\"\r\n maxlength=\"dataForm.formQuestions[index].question.maxLength\"\r\n [minLength]=\"dataForm.formQuestions[index].question.minLength\"\r\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\"\r\n [class]=\"dataClassCss.formcontrol\" />\r\n\r\n </div>\r\n\r\n <div style=\"margin-left: 15px;\"\r\n *ngIf=\"dataForm.formQuestions[index].question.questionType.id != 5 && dataForm.formQuestions[index].question.questionType.id != 6\">\r\n <span class=\"error\" [id]=\"'rq'+dataForm.formQuestions[index].question.value\"\r\n *ngIf=\"validRequired(formDynamic,dataForm.formQuestions[index].question) && watchValid\">\r\n Este campo es obligatorio</span>\r\n <span class=\"error\" [id]=\"'ml'+dataForm.formQuestions[index].question.value\" hidden>\r\n Debe ser m\u00EDnimo de\r\n {{ dataForm.formQuestions[index].question.minLength }} caracteres</span>\r\n <span class=\"error\" [id]=\"'mxl'+dataForm.formQuestions[index].question.value\" hidden>\r\n Debe ser maximo de\r\n {{ dataForm.formQuestions[index].question.maxLength }} caracteres</span>\r\n <span class=\"error\" [id]=\"'char'+dataForm.formQuestions[index].question.value\"\r\n hidden></span>\r\n <span *ngIf=\"patternNotValidDcto === true\" class=\"error\">Formato no valido</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #switchTemp>\r\n <div [ngSwitch]=\"dataForm.formQuestions[index].question.questionType.id\">\r\n <div *ngSwitchCase=\"1\">\r\n <div [class]=\"dataClassCss.cl12\">\r\n <label for=\"{{dataForm.formQuestions[index].question.value}}\" class=\"col-sm-12\"\r\n style=\"display: block; text-align: left; \">\r\n <span\r\n class=\"h6 small bg-white text-muted pt-1 pl-2 pr-2\">{{dataForm.formQuestions[index].question.label}}</span>\r\n </label>\r\n <input type=\"text\" id=\"{{dataForm.formQuestions[index].question.value}}\"\r\n [class]=\"dataClassCss.formcontrol\" placeholder=\"Escribe\"\r\n [required]=\"dataForm.formQuestions[index].question.required\"\r\n [maxlength]=\"dataForm.formQuestions[index].question.maxLength\"\r\n [name]=\"dataForm.formQuestions[index].question.value\"\r\n (keydown)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\r\n (change)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\r\n (blur)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\r\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\"\r\n style=\"margin-top: -1rem !important;\" />\r\n </div>\r\n </div>\r\n <div *ngSwitchCase=\"2\">\r\n\r\n <div [class]=\"dataClassCss.cl12\">\r\n <label for=\"{{dataForm.formQuestions[index].question.value}}\" class=\"col-sm-12\"\r\n style=\"display: block; text-align: left;\">\r\n <span\r\n class=\"h6 small bg-white text-muted pt-1 pl-2 pr-2\">{{dataForm.formQuestions[index].question.label}}</span>\r\n </label>\r\n <input type=\"text\" pattern=\"\\d*\" inputmode=\"numeric\"\r\n id=\"{{dataForm.formQuestions[index].question.value}}\"\r\n style=\"margin-top: -1rem !important;\"\r\n [name]=\"dataForm.formQuestions[index].question.value\" placeholder=\"Escribe\"\r\n [required]=\"dataForm.formQuestions[index].question.required\"\r\n (keydown)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\r\n (change)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\r\n (blur)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\r\n onkeypress=\"onkeypress($event)\" onkeyup=\"(this.value=(value.replace(/[.]*/g,'')))\"\r\n maxlength=\"dataForm.formQuestions[index].question.maxLength\"\r\n [minLength]=\"dataForm.formQuestions[index].question.minLength\"\r\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\"\r\n [class]=\"dataClassCss.formcontrol\" />\r\n <span *ngIf=\"patternNotValidCel === true\" class=\"error\">Formato no valido</span>\r\n </div>\r\n\r\n </div>\r\n <div *ngSwitchCase=\"3\">\r\n <div [class]=\"dataClassCss.cl12\">\r\n <label for=\"{{dataForm.formQuestions[index].question.value}}\" class=\"col-sm-12\"\r\n style=\"display: block; text-align: left;\">\r\n <span\r\n class=\"h6 small bg-white text-muted\">{{dataForm.formQuestions[index].question.label}}</span>\r\n </label>\r\n <select [name]=\"dataForm.formQuestions[index].question.value\"\r\n [required]=\"dataForm.formQuestions[index].question.required\"\r\n [class]=\"dataClassCss.formcontrol\"\r\n id=\"{{dataForm.formQuestions[index].question.value}}\"\r\n style=\"margin-top: -1rem !important;\"\r\n [(ngModel)]=\"defaultDocType !== '' ? defaultDocType : dataForm.formQuestions[index].question.registred\">\r\n <option value=\"\" selected disabled hidden>Selecciona</option>\r\n <ng-container\r\n *ngFor=\"let item of dataForm.formQuestions[index].question.questionAnswers\">\r\n <option *ngIf=\"item.answer.state.id == 1\" [value]=\"item.answer.value\">\r\n {{ item.answer.field }}\r\n </option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n <div *ngSwitchCase=\"4\">\r\n <select class=\"{{ dataClassCss.formcontrol }} select-checkbox\"\r\n style=\"overflow: hidden; border-style: hidden;\"\r\n [style.height.px]=\"dataForm.formQuestions[index].question.questionAnswers.length * 24\"\r\n [name]=\"dataForm.formQuestions[index].question.value\"\r\n [required]=\"dataForm.formQuestions[index].question.required\" ngModel multiple>\r\n <option (mousemove)=\"$event.preventDefault()\"\r\n *ngFor=\"let item of dataForm.formQuestions[index].question.questionAnswers\"\r\n [value]=\"item.answer.value\">\r\n {{ item.answer.field }}\r\n </option>\r\n </select>\r\n </div>\r\n <div *ngSwitchCase=\"5\">\r\n <a (click)=\"rediretoutside($event,dataForm.formQuestions[index].question)\" href=\"\">\r\n <span>{{ dataForm.formQuestions[index].question.label }}</span>\r\n </a>\r\n </div>\r\n <div *ngSwitchCase=\"6\">\r\n <div [class]=\"dataClassCss.cl12\" [id]=\"'reCaptcha'\">\r\n <div class=\"cnt-captcha\">\r\n <re-captcha (resolved)=\"resolvedCaptcha($event)\"\r\n siteKey=\"6Lf9DcQfAAAAAI6HCNB5OyKUpOPpfl5ocoBJcigZ\"></re-captcha>\r\n <input hidden type=\"text\" [name]=\"dataForm.formQuestions[index].question.value\"\r\n [required]=\"dataForm.formQuestions[index].question.required\"\r\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\">\r\n </div>\r\n <span class=\"error\" *ngIf=\"watchValid && !captchaValid\" style=\"margin-top: 0;\">\r\n Debe resolver la captcha para continuar\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngSwitchCase=\"7\">\r\n <div [class]=\"dataClassCss.cl12\">\r\n <label for=\"{{dataForm.formQuestions[index].question.value}}\" class=\"col-sm-12\"\r\n style=\"display: block; text-align: left; margin-bottom: 0 ;\">\r\n <span\r\n class=\"h6 small bg-white text-muted pt-1 pl-2 pr-2\">{{dataForm.formQuestions[index].question.label}}</span>\r\n </label>\r\n <input placeholder=\"dd/mm/aaaa\" style=\"margin-top: -0.4rem !important;\"\r\n [required]=\"dataForm.formQuestions[index].question.required\"\r\n [name]=\"dataForm.formQuestions[index].question.value\" type=\"date\" min=\"{{minDate}}\"\r\n max=\"{{maxDate}}\" [maxlength]=\"10\" (paste)=\"false\"\r\n id=\"{{dataForm.formQuestions[index].question.value}}\"\r\n [class]=\"dataClassCss.txtCalendar\"\r\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\"\r\n (keydown)=\"cancellKeypress()\"\r\n (change)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\r\n (blur)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\">\r\n\r\n <button class=\"btn\" id=\"{{dataForm.formQuestions[index].question.value}}\" type=\"button\"\r\n style=\"width: 46px;\r\n top: 12px;\r\n color: white;\r\n right: 15px;\r\n position: absolute;\r\n background: #D25D42;\r\n pointer-events: none;\">\r\n <i class=\"fa fa-calendar\"></i>\r\n </button>\r\n\r\n </div>\r\n </div>\r\n <div *ngSwitchCase=\"8\">\r\n <div [class]=\"dataClassCss.cl12\" style=\"text-align: left; margin-bottom: 10px;\">\r\n <input\r\n style=\"width: 4% !important; height: auto !important; display: inline !important;\"\r\n type=\"checkbox\" [name]=\"dataForm.formQuestions[index].question.value\"\r\n [required]=\"dataForm.formQuestions[index].question.required\"\r\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\"\r\n [class]=\"dataClassCss.formcontrol\">\r\n <a target=\"_blank\" style=\"text-decoration: underline;color:blue;cursor: pointer;\"\r\n id=\"txtPoliticas\" (click)=\"tycSelection($event)\">\r\n {{dataForm.formQuestions[index].question.label}}\r\n </a>\r\n </div>\r\n </div>\r\n <div *ngSwitchCase=\"9\">\r\n <div [class]=\"dataClassCss.cl12\">\r\n <label for=\"{{dataForm.formQuestions[index].question.value}}\" class=\"col-sm-12\"\r\n style=\"display: block; text-align: left; \">\r\n <span\r\n class=\"h6 small bg-white text-muted pt-1 pl-2 pr-2\">{{dataForm.formQuestions[index].question.label}}</span>\r\n </label>\r\n <input type=\"text\" id=\"{{dataForm.formQuestions[index].question.value}}\"\r\n [class]=\"dataClassCss.formcontrol\" placeholder=\"Escribe\"\r\n [required]=\"dataForm.formQuestions[index].question.required\"\r\n [maxlength]=\"dataForm.formQuestions[index].question.maxLength\"\r\n [name]=\"dataForm.formQuestions[index].question.value\"\r\n (keydown)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\r\n (change)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\r\n (blur)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\r\n (keypress)=\"validOnlyText($event)\"\r\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\"\r\n style=\"margin-top: -1rem !important;\" />\r\n </div>\r\n </div>\r\n <div *ngSwitchCase=\"10\">\r\n <div [class]=\"dataClassCss.cl12\" style=\"text-align: left; margin-bottom: 10px;\">\r\n <input\r\n style=\"width: 4% !important; height: auto !important; display: inline !important;\"\r\n type=\"checkbox\" [name]=\"dataForm.formQuestions[index].question.value\"\r\n [required]=\"dataForm.formQuestions[index].question.required\"\r\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\">\r\n <a target=\"_blank\" style=\"text-decoration: underline;color:blue;cursor: pointer;\"\r\n id=\"check{{dataForm.formQuestions[index].question.id}}\"\r\n (click)=\"openLabelUrl($event,dataForm.formQuestions[index].question)\">\r\n {{dataForm.formQuestions[index].question.label}}\r\n </a>\r\n </div>\r\n </div>\r\n <div *ngSwitchCase=\"11\">\r\n <div [class]=\"dataClassCss.cl12\">\r\n <label for=\"{{dataForm.formQuestions[index].question.value}}\" class=\"col-sm-12\"\r\n style=\"display: block; text-align: left; \">\r\n <span\r\n class=\"h6 small bg-white text-muted pt-1 pl-2 pr-2\">{{dataForm.formQuestions[index].question.label}}</span>\r\n </label>\r\n <input type=\"text\" id=\"{{dataForm.formQuestions[index].question.value}}\"\r\n [class]=\"dataClassCss.formcontrol\" placeholder=\"Escribe\"\r\n [required]=\"dataForm.formQuestions[index].question.required\"\r\n [maxlength]=\"dataForm.formQuestions[index].question.maxLength\"\r\n [name]=\"dataForm.formQuestions[index].question.value\"\r\n (keydown)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\r\n (change)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\r\n (blur)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\r\n (keypress)=\"validateNotSpace($event)\"\r\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\"\r\n style=\"margin-top: -1rem !important;\" />\r\n </div>\r\n </div>\r\n <div *ngSwitchDefault>Tipo de control no detectado</div>\r\n <div style=\"margin-left: 15px;\"\r\n *ngIf=\"dataForm.formQuestions[index].question.questionType.id != 5 && dataForm.formQuestions[index].question.questionType.id != 6\">\r\n <span class=\"error\" [id]=\"'rq'+dataForm.formQuestions[index].question.value\"\r\n *ngIf=\"validRequired(formDynamic,dataForm.formQuestions[index].question) && watchValid\">\r\n Este campo es obligatorio</span>\r\n <span class=\"error\" [id]=\"'ml'+dataForm.formQuestions[index].question.value\" hidden>\r\n Debe ser m\u00EDnimo de\r\n {{ dataForm.formQuestions[index].question.minLength }} caracteres</span>\r\n <span class=\"error\" [id]=\"'mxl'+dataForm.formQuestions[index].question.value\" hidden>\r\n Debe ser maximo de\r\n {{ dataForm.formQuestions[index].question.maxLength }} caracteres</span>\r\n <span class=\"error\" [id]=\"'char'+dataForm.formQuestions[index].question.value\"\r\n hidden></span>\r\n <span class=\"error\" [id]=\"dataForm.formQuestions[index].question.id\" hidden></span>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <section *ngIf=\"isSimpleFlow\">\r\n <div *ngFor=\"let step of steps let index = index;\">\r\n <div [class]=\"dataClassCss.cl12\" *ngIf=\"step.viewData\">\r\n <label for=\"{{step.id}}\" class=\"col-sm-12\" style=\"display: block; text-align: left;\">\r\n <span class=\"h6 small bg-white text-muted\">{{step.step}}</span>\r\n </label>\r\n <select [name]=\"step.step\" [required]=\"true\" [class]=\"dataClassCss.formcontrol\"\r\n id=\"{{step.step}}\" style=\"margin-top: -1rem !important;\" [(ngModel)]=\"step.value\"\r\n (ngModelChange)=\"onChangeStep(step,steps[index+1],$event)\">\r\n <option value=\"\" selected disabled hidden>Selecciona</option>\r\n <ng-container *ngFor=\"let subitem of step.viewData\">\r\n <option [value]=\"subitem.id\">\r\n {{ subitem.description }}\r\n </option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n </section>\r\n <div class=\"mt-3 text-center\">\r\n <button type=\"button\" [class]=\"dataClassCss.btn\" (click)=\"onSubmit()\" [disabled]=\"!formDynamic.valid\"\r\n id=\"btnIng\">Ingresar</button>\r\n </div>\r\n </form>\r\n </div>\r\n</div>",
720
- providers: [
721
- { provide: NgbDateAdapter, useClass: CustomAdapter },
722
- { provide: NgbDateParserFormatter, useClass: CustomDateParserFormatter },
723
- { provide: NgbDatepickerI18n, useClass: CustomDatepickerI18n },
724
- I18n
725
- ],
726
- styles: ["form{font-size:12px;overflow-y:scroll;overflow-x:hidden}form input,form select{border:1px solid #e4e4e4;height:40px;margin-bottom:5px}.selectContainer select{-webkit-appearance:none;-moz-appearance:none;appearance:none}.selectContainer::after{content:\"\\025be\";display:table-cell;text-align:center;padding-top:7px;width:30px;height:30px;position:absolute;top:14px;right:20px;pointer-events:none}form .error{color:red;font-size:12px;text-align:left;margin:-15px 0 15px;padding:0;width:90%}.error:after{content:\" \";display:block}.card{width:90%;margin:2% auto;border-radius:12px}@media (max-width:412px){.card{width:100%}.cnt-captcha{transform:scale(.77)}}@media (max-width:575.98px){.card{width:100%}.cnt-captcha{transform:scale(.77)}}@media (max-width:880.98px){.cnt-captcha{transform:scale(.82)}}input[type=date]::-webkit-calendar-picker-indicator{background:0 0;bottom:0;color:transparent;cursor:pointer;height:auto;left:0;position:absolute;right:0;top:0;width:auto}::-webkit-scrollbar{width:5px}::-webkit-scrollbar-track{background:#f5f5f5}::-webkit-scrollbar-thumb{background:#e0e0e0}::-webkit-scrollbar-thumb:hover{background:#bdbdbd}"]
727
- })
728
- ], FormAuroraComponent);
729
- return FormAuroraComponent;
730
- }());
731
- export { FormAuroraComponent };
732
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1hdXJvcmEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vZm9ybS1hdXJvcmEtc3RlZmFuaW5pLyIsInNvdXJjZXMiOlsibGliL0NvbXBvbmVudHMvZnJvbS1hdXJvcmEvZm9ybS1hdXJvcmEuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixLQUFLLEVBSUwsU0FBUyxFQUdULE1BQU0sRUFDTixZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQWdCLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVsRCwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxzQkFBc0IsRUFBaUIsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0SCxPQUFPLEtBQUssT0FBTyxNQUFNLFFBQVEsQ0FBQztBQUVsQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsSUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBRXZCOztHQUVHO0FBRUg7SUFBbUMseUNBQXNCO0lBRHpEO1FBQUEscUVBb0JDO1FBakJVLGVBQVMsR0FBRyxHQUFHLENBQUM7O0lBaUIzQixDQUFDO0lBZkMsaUNBQVMsR0FBVCxVQUFVLEtBQW9CO1FBQzVCLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDekMsT0FBTztnQkFDTCxHQUFHLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzFCLEtBQUssRUFB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QUFFO2dCQUNULEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFO2dCQUNwRCxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxRQUFRLEVBQUUseUJBQXlCLEVBQUU7Z0JBQ3hFLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxvQkFBb0IsRUFBRTtnQkFDOUQsSUFBSTthQUNMOztTQUNGLENBQUM7T0FDVyxtQkFBbUIsQ0FrakIvQjtJQUFELDBCQUFDO0NBQUEsQUFsakJELElBa2pCQztTQWxqQlksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgSW5qZWN0YWJsZSxcclxuICBJbnB1dCxcclxuICBFbGVtZW50UmVmLFxyXG4gIE9uSW5pdCxcclxuICBSZW5kZXJlcjIsXHJcbiAgVmlld0NoaWxkLFxyXG4gIE9uQ2hhbmdlcyxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXJcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCwgTmdGb3JtLCBGb3JtLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5cclxuLy8gaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBOZ2JEYXRlQWRhcHRlciwgTmdiRGF0ZVBhcnNlckZvcm1hdHRlciwgTmdiRGF0ZVN0cnVjdCwgTmdiRGF0ZXBpY2tlckkxOG4gfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCAqIGFzIG1vbWVudF8gZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgRmlsbCB9IGZyb20gJy4uLy4uL01vZGVscy9maWxsJztcclxuaW1wb3J0IHsgcmVnZXhUeXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvcmVnZXgnO1xyXG5pbXBvcnQgeyBDb21wYW55IH0gZnJvbSAnLi4vLi4vTW9kZWxzL2NvbXBhbnknO1xyXG5pbXBvcnQgeyBTdGVwIH0gZnJvbSAnLi4vLi4vTW9kZWxzL3N0ZXAnO1xyXG5pbXBvcnQgeyBDb21tb25EYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGEuc2VydmljZSc7XHJcbmNvbnN0IG1vbWVudCA9IG1vbWVudF87XHJcblxyXG4vKipcclxuICogVGhpcyBTZXJ2aWNlIGhhbmRsZXMgaG93IHRoZSBkYXRlIGlzIHJlcHJlc2VudGVkIGluIHNjcmlwdHMgaS5lLiBuZ01vZGVsLlxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQ3VzdG9tQWRhcHRlciBleHRlbmRzIE5nYkRhdGVBZGFwdGVyPHN0cmluZz4ge1xyXG5cclxuICByZWFkb25seSBERUxJTUlURVIgPSAnLyc7XHJcblxyXG4gIGZyb21Nb2RlbCh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IE5nYkRhdGVTdHJ1Y3QgfCBudWxsIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICBjb25zdCBkYXRlID0gdmFsdWUuc3BsaXQodGhpcy5ERUxJTUlURVIpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGRheTogcGFyc2VJbnQoZGF0ZVswXSwgMTApLFxyXG4gICAgICAgIG1vbnRoOiBwYXJzZUludChkYXRlWzFdLCAxMCksXHJcbiAgICAgICAgeWVhcjogcGFyc2VJbnQoZGF0ZVsyXSwgMTApXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHRvTW9kZWwoZGF0ZTogTmdiRGF0ZVN0cnVjdCB8IG51bGwpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIHJldHVybiBkYXRlID8gKGRhdGUuZGF5IDwgMTAgPyAwICsgZGF0ZS5kYXkgOiBkYXRlLmRheSkgKyB0aGlzLkRFTElNSVRFUiArIChkYXRlLm1vbnRoIDwgMTAgPyAwICsgZGF0ZS5tb250aCA6IGRhdGUubW9udGgpICsgdGhpcy5ERUxJTUlURVIgKyBkYXRlLnllYXIgOiAnJztcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUaGlzIFNlcnZpY2UgaGFuZGxlcyBob3cgdGhlIGRhdGUgaXMgcmVuZGVyZWQgYW5kIHBhcnNlZCBmcm9tIGtleWJvYXJkIGkuZS4gaW4gdGhlIGJvdW5kIGlucHV0IGZpZWxkLlxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQ3VzdG9tRGF0ZVBhcnNlckZvcm1hdHRlciBleHRlbmRzIE5nYkRhdGVQYXJzZXJGb3JtYXR0ZXIge1xyXG5cclxuICByZWFkb25seSBERUxJTUlURVIgPSAnLyc7XHJcblxyXG4gIHBhcnNlKHZhbHVlOiBzdHJpbmcpOiBOZ2JEYXRlU3RydWN0IHwgbnVsbCB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgY29uc3QgZGF0ZSA9IHZhbHVlLnNwbGl0KHRoaXMuREVMSU1JVEVSKTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBkYXk6IHBhcnNlSW50KGRhdGVbMF0sIDEwKSxcclxuICAgICAgICBtb250aDogcGFyc2VJbnQoZGF0ZVsxXSwgMTApLFxyXG4gICAgICAgIHllYXI6IHBhcnNlSW50KGRhdGVbMl0sIDEwKVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBmb3JtYXQoZGF0ZTogTmdiRGF0ZVN0cnVjdCB8IG51bGwpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGRhdGUgPyAoZGF0ZS5kYXkgPCAxMCA/ICcwJyArIGRhdGUuZGF5IDogZGF0ZS5kYXkpICsgdGhpcy5ERUxJTUlURVIgKyAoZGF0ZS5tb250aCA8IDEwID8gJzAnICsgZGF0ZS5tb250aCA6IGRhdGUubW9udGgpICsgdGhpcy5ERUxJTUlURVIgKyBkYXRlLnllYXIgOiAnJztcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IEkxOE5fVkFMVUVTID0ge1xyXG4gICdlcyc6IHtcclxuICAgIHdlZWtkYXlzOiBbJ0x1JywgJ01hJywgJ01pJywgJ0p1JywgJ1ZpJywgJ1NhJywgJ0RvJ10sXHJcbiAgICBtb250aHM6IFsnRW5lJywgJ0ZlYicsICdNYXInLCAnQWJyJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0FnbycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEaWMnXSxcclxuICAgIHdlZWtMYWJlbDogJ3NlbSdcclxuICB9XHJcbiAgLy8gb3RoZXIgbGFuZ3VhZ2VzIHlvdSB3b3VsZCBzdXBwb3J0XHJcbn07XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBJMThuIHtcclxuICBsYW5ndWFnZSA9ICdlcyc7XHJcbn1cclxuXHJcbi8vIERlZmluZSBjdXN0b20gc2VydmljZSBwcm92aWRpbmcgdGhlIG1vbnRocyBhbmQgd2Vla2RheXMgdHJhbnNsYXRpb25zXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEN1c3RvbURhdGVwaWNrZXJJMThuIGV4dGVuZHMgTmdiRGF0ZXBpY2tlckkxOG4ge1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2kxOG46IEkxOG4pIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBnZXRXZWVrZGF5TGFiZWwod2Vla2RheTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBJMThOX1ZBTFVFU1t0aGlzLl9pMThuLmxhbmd1YWdlXS53ZWVrZGF5c1t3ZWVrZGF5IC0gMV07XHJcbiAgfVxyXG5cclxuICBnZXRXZWVrTGFiZWwoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBJMThOX1ZBTFVFU1t0aGlzLl9pMThuLmxhbmd1YWdlXS53ZWVrTGFiZWw7XHJcbiAgfVxyXG5cclxuICBnZXRNb250aFNob3J0TmFtZShtb250aDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBJMThOX1ZBTFVFU1t0aGlzLl9pMThuLmxhbmd1YWdlXS5tb250aHNbbW9udGggLSAxXTtcclxuICB9XHJcblxyXG4gIGdldE1vbnRoRnVsbE5hbWUobW9udGg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRNb250aFNob3J0TmFtZShtb250aCk7XHJcbiAgfVxyXG5cclxuICBnZXREYXlBcmlhTGFiZWwoZGF0ZTogTmdiRGF0ZVN0cnVjdCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7ZGF0ZS5kYXl9LSR7ZGF0ZS5tb250aH0tJHtkYXRlLnllYXJ9YDtcclxuICB9XHJcblxyXG4gIGdldFdlZWtkYXlTaG9ydE5hbWUod2Vla2RheTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBJMThOX1ZBTFVFU1t0aGlzLl9pMThuLmxhbmd1YWdlXS53ZWVrZGF5c1t3ZWVrZGF5IC0gMV07XHJcbiAgfTtcclxufVxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLUZvcm1BdXJvcmEnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLWF1cm9yYS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS1hdXJvcmEuY29tcG9uZW50LmNzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgeyBwcm92aWRlOiBOZ2JEYXRlQWRhcHRlciwgdXNlQ2xhc3M6IEN1c3RvbUFkYXB0ZXIgfSxcclxuICAgIHsgcHJvdmlkZTogTmdiRGF0ZVBhcnNlckZvcm1hdHRlciwgdXNlQ2xhc3M6IEN1c3RvbURhdGVQYXJzZXJGb3JtYXR0ZXIgfSxcclxuICAgIHsgcHJvdmlkZTogTmdiRGF0ZXBpY2tlckkxOG4sIHVzZUNsYXNzOiBDdXN0b21EYXRlcGlja2VySTE4biB9LFxyXG4gICAgSTE4blxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1BdXJvcmFDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIEBJbnB1dCgpIGRhdGFDbGFzc0NzczogYW55O1xyXG4gIEBJbnB1dCgpIGRhdGFGb3JtOiBhbnk7XHJcbiAgQElucHV0KCkgY2xpY2tTdWJtaXQ6IGFueTtcclxuICBASW5wdXQoKSBkYXRhUmVsb2FkRm9ybTogYW55O1xyXG4gIEBJbnB1dCgpIHdlbGNvbWVUaXRsZTogYW55O1xyXG4gIEBJbnB1dCgpIHdlbGNvbWVEZXNjcmlwdGlvbjogYW55O1xyXG4gIEBJbnB1dCgpIHVybFBkZjogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG5hbWVDb21wYW55OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc2NoZWR1bGU6IHN0cmluZztcclxuICBASW5wdXQoKSBpc1NpbXBsZUZsb3c6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc3RlcHM6IFN0ZXBbXTtcclxuICBAVmlld0NoaWxkKCdmb3JtRHluYW1pYycsIHsgc3RhdGljOiB0cnVlIH0pIGZvcm1EeW5hbWljOiBOZ0Zvcm07XHJcbiAgQE91dHB1dCgpIHJlc3BvbnNlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHN1bW1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSB2aWV3QXV0aERhdGEgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICB0aXBvZG9jTnVtRG9jOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY291bnRTdWJtaXQgPSAwO1xyXG4gIHdhdGNoVmFsaWQgPSBmYWxzZTtcclxuICB3YXRjaFJlcXVpcmVkID0gZmFsc2U7XHJcbiAgY2FwdGNoYVZhbGlkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdG9kYXkgPSBtb21lbnQobmV3IERhdGUoKSk7XHJcbiAgbWF4WWVhciA9IHRoaXMudG9kYXkueWVhcigpO1xyXG4gIG1pblllYXIgPSB0aGlzLnRvZGF5LnllYXIoKSAtIDgyO1xyXG4gIG1pbkRhdGUgPSB0aGlzLm1pblllYXIudG9TdHJpbmcoKSArICctJyArIHRoaXMudG9kYXkubW9udGgoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJykgKyAnLScgKyB0aGlzLnRvZGF5LmRhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7Ly8ge3llYXI6IHRoaXMubWluWWVhciwgbW9udGg6IHRoaXMudG9kYXkubW9udGgoKSwgZGF5OiB0aGlzLnRvZGF5LmRhdGUoKX07XHJcbiAgbWF4RGF0ZSA9IHRoaXMubWF4WWVhci50b1N0cmluZygpICsgJy0nICsgKHRoaXMudG9kYXkubW9udGgoKSArIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSArICctJyArIHRoaXMudG9kYXkuZGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTsvLyB7eWVhcjogdGhpcy5tYXhZZWFyLCBtb250aDogdGhpcy50b2RheS5tb250aCgpICsgMSwgZGF5OiB0aGlzLnRvZGF5LmRhdGUoKX07XHJcbiAgcmVjaGFyZ2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpbmRpY2F0aXZvOiBzdHJpbmcgPSBcIjU3XCI7XHJcbiAgZmlsbGRhdGE6IEZpbGw7XHJcbiAgZGVmYXVsdERvY1R5cGU6IHN0cmluZyA9IFwiQ8OpZHVsYSBkZSBjaXVkYWRhbsOtYVwiO1xyXG4gIHBhdHRlcm5Ob3RWYWxpZERjdG86IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwYXR0ZXJuTm90VmFsaWRDZWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGF0YTogQ29tbW9uRGF0YVNlcnZpY2UsIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5taW5EYXRlID0gbmV3IERhdGUodGhpcy5taW5EYXRlKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF1cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnN0YXJ0Q29tcG9uZW50KCk7XHJcbiAgICB9LCAyMDAwKTtcclxuICB9XHJcblxyXG5cclxuICBzdGFydENvbXBvbmVudCgpIHtcclxuICAgIC8vb3JkZW5hIGxvcyBjYW1wb3NcclxuICAgIGlmICh0aGlzLmRhdGFGb3JtICE9IG51bGwgJiYgdGhpcy5kYXRhRm9ybS5mb3JtUXVlc3Rpb25zICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAvL1NhbWUgcm93IGZpZWxkc1xyXG4gICAgICB0aGlzLnRpcG9kb2NOdW1Eb2MgPSAodGhpcy5kYXRhRm9ybS5mb3JtUXVlc3Rpb25zLnNvbWUocXVlc3Rpb24gPT4gcXVlc3Rpb24ucXVlc3Rpb24udmFsdWUgPT09IFwidGlwb0RvY1wiKSAmJiB0aGlzLmRhdGFGb3JtLmZvcm1RdWVzdGlvbnMuc29tZShxdWVzdGlvbiA9PiBxdWVzdGlvbi5xdWVzdGlvbi52YWx1ZSA9PT0gXCJudW1lcm9Eb2NcIikpID8gdHJ1ZSA6IGZhbHNlO1xyXG5cclxuICAgICAgdGhpcy5kYXRhRm9ybS5mb3JtUXVlc3Rpb25zID0gdGhpcy5kYXRhRm9ybS5mb3JtUXVlc3Rpb25zLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICByZXR1cm4gYS5vcmRlciAtIGIub3JkZXI7XHJcbiAgICAgIH0pO1xyXG4gICAgICBsZXQgZXhpc3RjYXB0Y2hhID0gdGhpcy5kYXRhRm9ybS5mb3JtUXVlc3Rpb25zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5xdWVzdGlvbi5xdWVzdGlvblR5cGUuaWQgPT0gNik7XHJcblxyXG4gICAgICBpZiAoZXhpc3RjYXB0Y2hhLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgdGhpcy5jYXB0Y2hhVmFsaWQgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5kYXRhRm9ybS5mb3JtUXVlc3Rpb25zKSB7XHJcbiAgICAgICAgaWYgKGl0ZW0ucXVlc3Rpb24ubWF4bGVuZ3RoID09IG51bGwgfHwgaXRlbS5xdWVzdGlvbi5tYXhsZW5ndGggPT0gdW5kZWZpbmVkIHx8IGl0ZW0ucXVlc3Rpb24ubWF4bGVuZ3RoID09IDApIHtcclxuICAgICAgICAgIGl0ZW0ucXVlc3Rpb24ubWF4bGVuZ3RoID0gNTI0Mjg4OyAvL2RlZmF1bHR2YWx1ZVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGl0ZW0ucXVlc3Rpb24ubWluTGVuZ3RoID09IG51bGwgfHwgaXRlbS5xdWVzdGlvbi5taW5MZW5ndGggPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBpdGVtLnF1ZXN0aW9uLm1pbkxlbmd0aCA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRhdGFSZWxvYWRGb3JtLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZpbGxkYXRhID0gZWxlbWVudDtcclxuXHJcbiAgICAgICAgICBpZiAoKGl0ZW0ucXVlc3Rpb24ucXVlc3Rpb25UeXBlLmlkID09PSAyIHx8IGl0ZW0ucXVlc3Rpb24ucXVlc3Rpb25UeXBlLmlkID09PSAxIHx8XHJcbiAgICAgICAgICAgIGl0ZW0ucXVlc3Rpb24ucXVlc3Rpb25UeXBlLmlkID09PSAzKSAmJiAodGhpcy5maWxsZGF0YS5kYXRhICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5maWxsZGF0YS5kYXRhICE9PSB1bmRlZmluZWQpICYmIGl0ZW0ucXVlc3Rpb24uaWQgPT09IHRoaXMuZmlsbGRhdGEuaWQpIHtcclxuICAgICAgICAgICAgaXRlbS5xdWVzdGlvbi5yZWdpc3RyZWQgPSB0aGlzLmZpbGxkYXRhLmRhdGE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChpdGVtLnF1ZXN0aW9uLnJlZ2lzdHJlZCA9PSBudWxsIHx8IGl0ZW0ucXVlc3Rpb24ubWluTGVuZ3RoID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgaXRlbS5xdWVzdGlvbi5yZWdpc3RyZWQgPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJhbmdlID0gbmV3IEZvcm1Hcm91cCh7XHJcbiAgICBzdGFydDogbmV3IEZvcm1Db250cm9sKCksXHJcbiAgICBlbmQ6IG5ldyBGb3JtQ29udHJvbCgpLFxyXG4gIH0pO1xyXG5cclxuICByZXNvbHZlZENhcHRjaGEoY2FwdGNoYVJlc3BvbnNlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuY2FwdGNoYVZhbGlkID0gdHJ1ZVxyXG4gICAgaWYgKCF0aGlzLmZvcm1EeW5hbWljLmZvcm0udmFsdWUuY2FwdGNoYSkge1xyXG4gICAgICB0aGlzLmZvcm1EeW5hbWljLmNvbnRyb2xzLmNhcHRjaGEuc2V0VmFsdWUoY2FwdGNoYVJlc3BvbnNlKVxyXG4gICAgICB0aGlzLmZvcm1EeW5hbWljLmZvcm0udmFsdWUuY2FwdGNoYSA9IGNhcHRjaGFSZXNwb25zZVxyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJ0bkluZ1wiKS5zdHlsZS5vcGFjaXR5ID0gIXRoaXMuZm9ybUR5bmFtaWMudmFsaWQgPyBcIjAuNjVcIiA6IFwiMVwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9Gb3Jtc1xyXG4gIC8vTWV0b2RvIHBhcmEgZXZpdGFyIGVsIHJlbmRlciBkZSBsb3MgaXRlbXMgZGVsIGZvclxyXG4gIHB1YmxpYyB0cmFja0J5SW5kZXgoaW5kZXg6IG51bWJlciwgb2JqOiBhbnkpOiBhbnkge1xyXG4gICAgcmV0dXJuIGluZGV4O1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VWYWxpZFBhdHRlcihldmVudCwgcXVlc3Rpb24pIHtcclxuICAgIGlmIChxdWVzdGlvbi5wYXR0ZXJuICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBsZXQgdmFsaWQgPSB0cnVlO1xyXG4gICAgICBsZXQga2V5dmFsaWQgPSBbOCwgMzIsIDM3LCAzOCwgMzksIDQwLCA0NiwgOV07XHJcbiAgICAgIC8vZGlmZXJlbnRlIGRlIEJhY2twc2FjZVxyXG4gICAgICAvL3NlIGRlamEgY2F0Y2ggcG9yIGVycm9yIG5vIGNvbnRyb2xhYmxlIGVuIG90cm8gdGllbXBvIGRlIGVqZWN1Y2lvblxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlmICgha2V5dmFsaWQuaW5jbHVkZXMoZXZlbnQua2V5Q29kZSkpIHtcclxuICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChxdWVzdGlvbi5wYXR0ZXJuKTtcclxuICAgICAgICAgIHZhbGlkID0gcmVnZXgudGVzdChldmVudC5rZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHsgfVxyXG5cclxuICAgICAgcmV0dXJuIHZhbGlkO1xyXG4gICAgfVxyXG4gICAgaWYgKHF1ZXN0aW9uLnF1ZXN0aW9uVHlwZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmIChxdWVzdGlvbi5xdWVzdGlvblR5cGUuZGVzY3JpcHRpb24gPT09ICdOdW1iZXInKSB7XHJcbiAgICAgICAgaWYgKHF1ZXN0aW9uLnZhbHVlID09PSAnbnVtZXJvRG9jJykge1xyXG4gICAgICAgICAgdGhpcy52YWxpZGF0ZU51bWVyb0RvY3VtZW50byh0aGlzLmZvcm1EeW5hbWljLmNvbnRyb2xzW1wibnVtZXJvRG9jXCJdLnZhbHVlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocXVlc3Rpb24udmFsdWUgPT09ICdjZWx1bGFyJykge1xyXG4gICAgICAgICAgdGhpcy52YWxpZGF0ZUNlbHVsYXIodGhpcy5mb3JtRHluYW1pYy5jb250cm9sc1tcImNlbHVsYXJcIl0udmFsdWUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjaGFyXCIgKyBxdWVzdGlvbi52YWx1ZSkuc2V0QXR0cmlidXRlKFwiaGlkZGVuXCIsIFwidHJ1ZVwiKTtcclxuXHJcbiAgICAvL2lmIHRlbXBvcmFsIG1pZW50cmFzIHNlIG1pZ3JhbiB0b2RvcyBsb3MgdGlwb3MgZGUgY2FtcG9zIGFsIGZvcmVhY2hcclxuICAgIGlmIChxdWVzdGlvbi5xdWVzdGlvblR5cGUuaWQgIT0gMTEgJiYgcXVlc3Rpb24ucXVlc3Rpb25UeXBlLmlkICE9IDcpIHtcclxuICAgICAgaWYgKHRoaXMudmFsaWRNaW5MZW5ndGgodGhpcy5mb3JtRHluYW1pYywgcXVlc3Rpb24pKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocXVlc3Rpb24udmFsdWUpLnN0eWxlLmJvcmRlckNvbG9yID0gXCIjRkYwMDAwXCI7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtbFwiICsgcXVlc3Rpb24udmFsdWUpLnJlbW92ZUF0dHJpYnV0ZShcImhpZGRlblwiKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChxdWVzdGlvbi52YWx1ZSkuc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiNFNEU0RTRcIjtcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1sXCIgKyBxdWVzdGlvbi52YWx1ZSkuc2V0QXR0cmlidXRlKFwiaGlkZGVuXCIsIFwidHJ1ZVwiKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy52YWxpZE1heExlbmd0aCh0aGlzLmZvcm1EeW5hbWljLCBxdWVzdGlvbikpIHtcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChxdWVzdGlvbi52YWx1ZSkuc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiNGRjAwMDBcIjtcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm14bFwiICsgcXVlc3Rpb24udmFsdWUpLnJlbW92ZUF0dHJpYnV0ZShcImhpZGRlblwiKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChxdWVzdGlvbi52YWx1ZSkuc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiNFNEU0RTRcIjtcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm14bFwiICsgcXVlc3Rpb24udmFsdWUpLnNldEF0dHJpYnV0ZShcImhpZGRlblwiLCBcInRydWVcIik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5kYXRhRm9ybS5mb3JtUXVlc3Rpb25zLmZvckVhY2goZm9ybVF1ZXN0aW9uID0+IHtcclxuICAgICAgc3dpdGNoIChmb3JtUXVlc3Rpb24ucXVlc3Rpb24ucXVlc3Rpb25UeXBlLmlkKSB7XHJcbiAgICAgICAgLy9zZSB2YWxpZGEgIGNhbXBvIGRlIHRpcG8gY2FsZW5kYXJpb1xyXG4gICAgICAgIGNhc2UgNzpcclxuICAgICAgICAgIGlmIChxdWVzdGlvbi5xdWVzdGlvblR5cGUuaWQgPT0gNylcclxuICAgICAgICAgICAgdGhpcy5jYWxlbmRhclJ1bGVzVmFsaWRhdGUoZm9ybVF1ZXN0aW9uKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vc2UgdmFsaWRhICBjYW1wbyBkZSB0aXBvIGVtYWlsXHJcbiAgICAgICAgY2FzZSAxMTpcclxuICAgICAgICAgIGlmIChxdWVzdGlvbi5xdWVzdGlvblR5cGUuaWQgPT0gMTEpXHJcbiAgICAgICAgICAgIHRoaXMuZW1haWxSdWxlc1ZhbGlkYXRlKGZvcm1RdWVzdGlvbik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJidG5JbmdcIikuc3R5bGUub3BhY2l0eSA9ICF0aGlzLmZvcm1EeW5hbWljLnZhbGlkID8gXCIwLjY1XCIgOiBcIjFcIjtcclxuICB9XHJcblxyXG4gIHZhbGlkT25seVRleHQoZXZlbnQpIHtcclxuICAgIGxldCByZWdleCA9IC9eW2EtekEtWlxcdTAwQzAtXFx1MDE3Rl0rJC9nO1xyXG4gICAgaWYgKGV2ZW50LmNoYXJDb2RlID09IDMyKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgbGV0IHZhbGlkID0gcmVnZXgudGVzdChldmVudC5rZXkpO1xyXG5cclxuICAgIHJldHVybiB2YWxpZDtcclxuICB9XHJcblxyXG4gIHZhbGlkRGF0ZShldmVudCkge1xyXG4gICAgLypsZXQgcGF0dGVybiA9IC8oPzowWzEtOV18WzEyXVswLTldfDNbMDFdKVxcLyg/OjBbMS05XXwxWzAtMl0pXFwvKD86MTl8MjApWzAtOV17Mn0vO1xyXG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHBhdHRlcm4pO1xyXG4gICAgdmFsaWQgPSByZWdleC50ZXN0KGV2ZW50LmtleSk7XHJcbiAgICAqL1xyXG4gICAgY29uc3QgbWF0Y2hlcyA9IFN0cmluZyhldmVudC5rZXkpLm1hdGNoKHJlZ2V4VHlwZS5kYXRlLmV4cCk7XHJcbiAgICBsZXQgdmFsaWQgPSB0cnVlXHJcbiAgICBpZiAobWF0Y2hlcyA9PT0gbnVsbClcclxuICAgICAgdmFsaWQgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBhbGVydCh2YWxpZCk7XHJcblxyXG4gICAgcmV0dXJuIHZhbGlkO1xyXG5cclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlVmFsaWREYXRlKGV2ZW50KSB7XHJcblxyXG4gICAgLy9sZXQgcGF0dGVybiA9IC8oPzowWzEtOV18MVswLTJdKVxcLyg/OjBbMS05XXxbMTJdWzAtOV18M1swMV0pXFwvKD86MTl8MjApWzAtOV17Mn0vO1xyXG4gICAgbGV0IGRhdGVOID0gL1swLTldfFxcLy9cclxuICAgIGxldCB2YWxpZCA9IHRydWVcclxuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChkYXRlTik7XHJcbiAgICB2YWxpZCA9IHJlZ2V4LnRlc3QoZXZlbnQua2V5KTtcclxuICAgIHJldHVybiB2YWxpZDtcclxuXHJcbiAgfVxyXG5cclxuICByZWRpcmV0b3V0c2lkZShldmVudCwgcXVlc3Rpb24pIHtcclxuICAgIC8vc2UgZGVqYSBjYXRjaCBwb3IgZXJyb3Igbm8gY29udHJvbGFibGUgZW4gb3RybyB0aWVtcG8gZGUgZWplY3VjaW9uXHJcbiAgICB0cnkge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB3aW5kb3cub3BlbihxdWVzdGlvbi52YWx1ZSwgXCJfYmxhbmtcIik7XHJcbiAgICB9IGNhdGNoIChlcnJvcikgeyB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaXNwYXRjaCBzdWJtaXQgZXZlbnQgZm9yIHZhbGlkYXRpb25zIGV4aXN0c1xyXG4gICAqIEBwYXJhbSBjaGFuZ2UgXHJcbiAgICovXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICB0aGlzLmNvdW50U3VibWl0KytcclxuICB9XHJcbiAgLy9vblN1Ym1pdChmb3JtOiBOZ0Zvcm0pIHtcclxuICBvblN1Ym1pdCgpIHtcclxuICAgIGxldCBmb3JtID0gdGhpcy5mb3JtRHluYW1pYztcclxuICAgIHRoaXMud2F0Y2hWYWxpZCA9IHRydWU7XHJcbiAgICB0aGlzLndhdGNoUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgIGlmIChmb3JtLnZhbGlkKSB7XHJcbiAgICAgIGlmICghdGhpcy52YWxpZFJ1bGVzRmllbGRzKGZvcm0uY29udHJvbHNbXCJudW1lcm9Eb2NcIl0udmFsdWUudG9TdHJpbmcoKSwgZm9ybS5jb250cm9sc1tcImNlbHVsYXJcIl0udmFsdWUudG9TdHJpbmcoKSwgZm9ybS5jb250cm9sc1tcImVtYWlsXCJdLnZhbHVlKSlcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudmFsaWRNaW5sZW5naHRBbGxRdWVzdGlvbnMoZm9ybS52YWx1ZSkgJiYgdGhpcy52YWxpZE1heExlbmd0aEFsbFF1ZXN0aW9ucyhmb3JtLnZhbHVlKSAmJiBmb3JtLnZhbGlkKSB7XHJcbiAgICAgIGlmICh0aGlzLmRhdGFGb3JtLnVybFNlbmQgIT0gXCJcIiAmJiB0aGlzLmNhcHRjaGFWYWxpZCkge1xyXG4gICAgICAgIHRoaXMuaHR0cC5wb3N0PGFueT4odGhpcy5kYXRhRm9ybS51cmxTZW5kLCBmb3JtLnZhbHVlKS5zdWJzY3JpYmUoKHJlc3ApID0+IHRoaXMucmVzcG9uc2UuZW1pdChyZXNwKSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZm9ybS52YWxpZCAmJiB0aGlzLmNhcHRjaGFWYWxpZCkge1xyXG4gICAgICAgIHRoaXMuc3VtbWl0LmVtaXQoZm9ybS52YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZFBhcmFtQm9vbGVhbihwYXJhbXM6IGFueSwgaWRQYXJhbTogbnVtYmVyKSB7XHJcbiAgICBsZXQgc2hvd0Rlc2NyaXB0aW9uUGFyYW0gPSBwYXJhbXMuZmluZCgoeCkgPT4geC5pZCA9PSBpZFBhcmFtKTtcclxuICAgIHJldHVybiBzaG93RGVzY3JpcHRpb25QYXJhbSAhPSBudWxsICYmIHNob3dEZXNjcmlwdGlvblBhcmFtLnZhbHVlID09IFwidHJ1ZVwiO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRSdWxlc0ZpZWxkcyhudW1lcm9Eb2M6IFN0cmluZywgbnVtZXJvQ2VsOiBTdHJpbmcsIGVtYWlsOiBTdHJpbmcpOiBib29sZWFuIHtcclxuICAgIC8vIFZhbGlkYWNpb25lcyBwYXJhIGNlbHVsYXIgZW4gY2FzbyBkZSBpbmRpY2F0aXZvIGVuIENvbG9tYmlhXHJcbiAgICBsZXQgY2VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjaGFyY2VsdWxhclwiKTtcclxuICAgIGxldCBkb2MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNoYXJudW1lcm9Eb2NcIik7XHJcbiAgICBsZXQgdmFsT2sgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMuaW5kaWNhdGl2byA9PSBcIis1N1wiIHx8IHRoaXMuaW5kaWNhdGl2byA9PSBcIjU3XCIpIHtcclxuICAgICAgbGV0IHN0cmluZ09yZGVuYWRvID0gdGhpcy5vcmRlclN0cmluZyhudW1lcm9Eb2MpO1xyXG4gICAgICBpZiAodGhpcy5uYW1lQ29tcGFueS50b1VwcGVyQ2FzZSgpICE9PSAnQ0xBUk8nKSB7Ly9jbGFybyBhY2VwdGEgbnJvIGNvbnNlY3V0aXZvc1xyXG4gICAgICAgIGlmIChudW1lcm9Eb2MgPT0gc3RyaW5nT3JkZW5hZG8pIHtcclxuICAgICAgICAgIGRvYy5zdHlsZS5ib3JkZXJDb2xvciA9IFwiI0ZGMDAwMFwiO1xyXG4gICAgICAgICAgZG9jLnJlbW92ZUF0dHJpYnV0ZShcImhpZGRlblwiKTtcclxuICAgICAgICAgIGRvYy50ZXh0Q29udGVudCA9IFwiRWwgbnVtZXJvIGRvY3VtZW50byBObyBkZWJlIGNvbnRlbmVyIGNhcmFjdGVyZXMgY29uc2VjdXRpdm9zXCI7XHJcbiAgICAgICAgICB2YWxPayA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIC8vdGhpcy5tc2dFcnJvckNhbXBvID0gXCJFbCBudW1lcm8gZG9jdW1lbnRvIE5vIGRlYmUgY29udGVuZXIgY2FyYWN0ZXJlcyBjb25zZWN1dGl2b3NcIjtcclxuICAgICAgICAgIC8vcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAobnVtZXJvQ2VsLnN1YnN0cmluZygwLCAxKSAhPSBcIjNcIikge1xyXG4gICAgICAgIGNlbC5zdHlsZS5ib3JkZXJDb2xvciA9IFwiI0ZGMDAwMFwiO1xyXG4gICAgICAgIGNlbC5yZW1vdmVBdHRyaWJ1dGUoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgY2VsLnRleHRDb250ZW50ID0gXCJFbCBwcmltZXIgY2Fyw6FjdGVyIGRlbCBjZWx1bGFyIGRlYmUgc2VyIDNcIjtcclxuICAgICAgICB2YWxPayA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvL3RoaXMubXNnRXJyb3JDYW1wbyA9IFwiRWwgcHJpbWVyIGNhcsOhY3RlciBkZWwgY2VsdWxhciBkZWJlIHNlciAzXCI7XHJcbiAgICAgICAgLy9yZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgLypcclxuICAgICAgaWYgKHBhcnNlSW50KG51bWVyb0NlbC5zdWJzdHJpbmcoMCwgMykpID4gMzUwKSB7XHJcbiAgICAgICAgY2VsLnN0eWxlLmJvcmRlckNvbG9yID0gXCIjRkYwMDAwXCI7XHJcbiAgICAgICAgY2VsLnJlbW92ZUF0dHJpYnV0ZShcImhpZGRlblwiKTtcclxuICAgICAgICBjZWwudGV4dENvbnRlbnQgPSBcIkVsIHByZWZpam8gZGVsIGNlbHVsYXIgbm8gZGViZSBzZXIgbWF5b3IgYSAzNTBcIjtcclxuICAgICAgICB2YWxPayA9IGZhbHNlO1xyXG4gICAgICAgIC8vdGhpcy5tc2dFcnJvckNhbXBvID0gXCJFbCBwcmVmaWpvIGRlbCBjZWx1bGFyIG5vIGRlYmUgc2VyIG1heW9yIGEgMzUwXCI7XHJcbiAgICAgICAgLy9yZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgKi9cclxuICAgICAgLy9FbiBjYXNvIGRlIHF1ZSBlbCBuw7ptZXJvIHNlIHJlcGl0YSwgZWplbXBsbyAzMzMzMzMzM1xyXG4gICAgICBsZXQgbGlzdG51bWJlciA9IG51bWVyb0RvYy5zdWJzdHJpbmcoMCwgMSk7XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBudW1lcm9Eb2MubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgbGlzdG51bWJlciA9IGxpc3RudW1iZXIgKyBudW1lcm9Eb2Muc3Vic3RyaW5nKDAsIDEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAobnVtZXJvRG9jID09IGxpc3RudW1iZXIpIHtcclxuICAgICAgICBkb2Muc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiNGRjAwMDBcIjtcclxuICAgICAgICBkb2MucmVtb3ZlQXR0cmlidXRlKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgIGRvYy50ZXh0Q29udGVudCA9IFwiQ2FyYWN0ZXJlcyBudW3DqXJpY29zIG5vIHNlIHB1ZWRlbiByZXBldGlyc2UgZGUgbWFuZXJhIGNvbnRpbnVhIFwiO1xyXG4gICAgICAgIHZhbE9rID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vdGhpcy5tc2dFcnJvckNhbXBvID0gXCJDYXJhY3RlcmVzIG51bcOpcmljb3Mgbm8gc2UgcHVlZGVuIHJlcGV0aXJzZSBkZSBtYW5lcmEgY29udGludWEgXCI7XHJcbiAgICAgICAgLy9yZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlTnVtZXJvRG9jdW1lbnRvKG51bWVyb0RvYykpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlQ2VsdWxhcihudW1lcm9DZWwpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG5cclxuICAgICAgLy8gRW4gY2FzbyBkZSBxdWUgZWwgbsO6bWVybyBzZSByZXBpdGEsIGVqZW1wbG8gMzMzMzMzMzNcclxuICAgICAgbGV0IGFycmF5UGhvbmVSZXBlYXQgPSBBcnJheS5mcm9tKFN0cmluZyhudW1lcm9DZWwpLCBOdW1iZXIpO1xyXG4gICAgICBsZXQgYXJyYXlQaG9uZU91dFJlcGVhdCA9IFsuLi5uZXcgU2V0KGFycmF5UGhvbmVSZXBlYXQpXTtcclxuICAgICAgaWYgKGFycmF5UGhvbmVPdXRSZXBlYXQubGVuZ3RoID09IDEpIHtcclxuICAgICAgICBjZWwuc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiNGRjAwMDBcIjtcclxuICAgICAgICBjZWwucmVtb3ZlQXR0cmlidXRlKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgIGNlbC50ZXh0Q29udGVudCA9IFwiRWwgbsO6bWVybyBxdWUgaW5ncmVzYSBubyBlcyB2YWxpZG9cIjtcclxuICAgICAgICB2YWxPayA9IGZhbHNlO1xyXG4gICAgICAgIC8vdGhpcy5tc2dFcnJvckNhbXBvID0gXCJFbCBuw7ptZXJvIHF1ZSBpbmdyZXNhIG5vIGVzIHZhbGlkb1wiO1xyXG4gICAgICAgIC8vcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaW5kaWNhdGl2byA9PSBcIis1OTNcIiB8fCB0aGlzLmluZGljYXRpdm8gPT0gXCI1OTNcIikge1xyXG4gICAgICBpZiAobnVtZXJvQ2VsLnN1YnN0cmluZygwLCAxKSAhPSBcIjlcIikge1xyXG4gICAgICAgIGNlbC5zdHlsZS5ib3JkZXJDb2xvciA9IFwiI0ZGMDAwMFwiO1xyXG4gICAgICAgIGNlbC5yZW1vdmVBdHRyaWJ1dGUoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgY2VsLnRleHRDb250ZW50ID0gXCJFbCBwcmltZXIgY2Fyw6FjdGVyIGRlbCBjZWx1bGFyIGRlYmUgc2VyIDlcIjtcclxuICAgICAgICB2YWxPayA9IGZhbHNlO1xyXG4gICAgICAgIC8vdGhpcy5tc2dFcnJvckNhbXBvID0gXCJFbCBwcmltZXIgY2Fyw6FjdGVyIGRlbCBjZWx1bGFyIGRlYmUgc2VyIDlcIjtcclxuICAgICAgICAvL3JldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy9zZSB2YWxpZGFuIGxvcyBjYW1wb3MgcG9yIHRpcG8gZGUgY2FtcG8geSBubyBwb3IgdmFsdWVcclxuICAgIHRoaXMuZGF0YUZvcm0uZm9ybVF1ZXN0aW9ucy5mb3JFYWNoKGZvcm1RdWVzdGlvbiA9PiB7XHJcbiAgICAgIHN3aXRjaCAoZm9ybVF1ZXN0aW9uLnF1ZXN0aW9uLnF1ZXN0aW9uVHlwZS5pZCkge1xyXG4gICAgICAgIC8vc2UgdmFsaWRhICBjYW1wbyBkZSB0aXBvIGVtYWlsXHJcbiAgICAgICAgY2FzZSAxMTpcclxuICAgICAgICAgIHZhbE9rID0gdGhpcy5lbWFpbFJ1bGVzVmFsaWRhdGUoZm9ybVF1ZXN0aW9uKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gdmFsT2s7XHJcbiAgfVxyXG5cclxuICBvcmRlclN0cmluZyh2YWx1ZTogU3RyaW5nKSB7XHJcbiAgICBsZXQgYXJyYXlOdW1iZXIgPSBbXTtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB2YWx1ZS5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgYXJyYXlOdW1iZXIucHVzaChwYXJzZUludCh2YWx1ZS5zdWJzdHJpbmcoaW5kZXgsIGluZGV4ICsgMSkpKTtcclxuICAgIH1cclxuICAgIC8vb3JkZW5hIGVsIGFycmF5XHJcbiAgICBhcnJheU51bWJlci5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICAgIHJldHVybiBhIC0gYjtcclxuICAgIH0pO1xyXG4gICAgbGV0IG51bWJlck9yZGVyID0gXCJcIjtcclxuICAgIG51bWJlck9yZGVyID0gYXJyYXlOdW1iZXJbMF07XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgYXJyYXlOdW1iZXIubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIG51bWJlck9yZGVyID0gbnVtYmVyT3JkZXIgKyAoYXJyYXlOdW1iZXJbMF0gKyBpbmRleCkudG9TdHJpbmcoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudW1iZXJPcmRlcjtcclxuICB9XHJcblxyXG4gIHZhbGlkTWlubGVuZ2h0QWxsUXVlc3Rpb25zKGZvcm06IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuZGF0YUZvcm0uZm9ybVF1ZXN0aW9ucykge1xyXG4gICAgICBpZiAoaXRlbS5xdWVzdGlvbi5xdWVzdGlvblR5cGUuaWQgPT0gMSB8fCBpdGVtLnF1ZXN0aW9uLnF1ZXN0aW9uVHlwZS5pZCA9PSAyKSB7XHJcbiAgICAgICAgbGV0IG1pbkxlbmd0aCA9IHBhcnNlSW50KGl0ZW0ucXVlc3Rpb24ubWluTGVuZ3RoKTtcclxuICAgICAgICBsZXQgZm9ybVZhbHVlTGVuZ3RoID0gcGFyc2VJbnQoZm9ybVtpdGVtLnF1ZXN0aW9uLnZhbHVlXS50b1N0cmluZygpLmxlbmd0aCk7XHJcbiAgICAgICAgaWYgKG1pbkxlbmd0aCA+IDAgJiYgZm9ybVZhbHVlTGVuZ3RoICE9IG1pbkxlbmd0aCAmJiBmb3JtVmFsdWVMZW5ndGggPCBtaW5MZW5ndGgpIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICB2YWxpZE1heExlbmd0aEFsbFF1ZXN0aW9ucyhmb3JtOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmRhdGFGb3JtLmZvcm1RdWVzdGlvbnMpIHtcclxuICAgICAgaWYgKGl0ZW0ucXVlc3Rpb24ucXVlc3Rpb25UeXBlLmlkID09IDEgfHwgaXRlbS5xdWVzdGlvbi5xdWVzdGlvblR5cGUuaWQgPT0gMikge1xyXG4gICAgICAgIGxldCBtYXhMZW5ndGggPSBwYXJzZUludChpdGVtLnF1ZXN0aW9uLm1heExlbmd0aCk7XHJcbiAgICAgICAgbGV0IGZvcm1WYWx1ZUxlbmd0aCA9IHBhcnNlSW50KGZvcm1baXRlbS5xdWVzdGlvbi52YWx1ZV0udG9TdHJpbmcoKS5sZW5ndGgpO1xyXG4gICAgICAgIGlmIChtYXhMZW5ndGggPiAwICYmIGZvcm1WYWx1ZUxlbmd0aCAhPSBtYXhMZW5ndGggJiYgZm9ybVZhbHVlTGVuZ3RoID4gbWF4TGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRSZXF1aXJlZChmb3JtOiBOZ0Zvcm0sIHF1ZXN0aW9uKTogQm9vbGVhbiB7XHJcbiAgICAvL3NlIGRlamEgY2F0Y2ggcG9yIGVycm9yIG5vIGNvbnRyb2xhYmxlIGVuIG90cm8gdGllbXBvIGRlIGVqZWN1Y2lvblxyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHF1ZXN0aW9uICE9IHVuZGVmaW5lZCAmJiBxdWVzdGlvbi52YWx1ZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBmb3JtLmNvbnRyb2xzW3F1ZXN0aW9uLnZhbHVlXSAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgIGZvcm0uY29udHJvbHNbcXVlc3Rpb24udmFsdWVdLmVycm9ycyAhPSBudWxsICYmXHJcbiAgICAgICAgICBmb3JtLmNvbnRyb2xzW3F1ZXN0aW9uLnZhbHVlXS5lcnJvcnMucmVxdWlyZWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRNaW5MZW5ndGgoZm9ybTogTmdGb3JtLCBxdWVzdGlvbik6IEJvb2xlYW4ge1xyXG4gICAgLy9zZSBkZWphIGNhdGNoIHBvciBlcnJvciBubyBjb250cm9sYWJsZSBlbiBvdHJvIHRpZW1wbyBkZSBlamVjdWNpb25cclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChxdWVzdGlvbiAhPSB1bmRlZmluZWQgJiYgcXVlc3Rpb24udmFsdWUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKHF1ZXN0aW9uLm1pbkxlbmd0aCA+IGZvcm0uY29udHJvbHNbcXVlc3Rpb24udmFsdWVdLnZhbHVlLnRvTG9jYWxlU3RyaW5nKCkubGVuZ3RoICYmIHF1ZXN0aW9uLm1pbkxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRNYXhMZW5ndGgoZm9ybTogTmdGb3JtLCBxdWVzdGlvbik6IEJvb2xlYW4ge1xyXG4gICAgLy9zZSBkZWphIGNhdGNoIHBvciBlcnJvciBubyBjb250cm9sYWJsZSBlbiBvdHJvIHRpZW1wbyBkZSBlamVjdWNpb25cclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChxdWVzdGlvbiAhPSB1bmRlZmluZWQgJiYgcXVlc3Rpb24udmFsdWUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKHF1ZXN0aW9uLm1heExlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGlmIChxdWVzdGlvbi5tYXhMZW5ndGggKyAxIDw9IGZvcm0uY29udHJvbHNbcXVlc3Rpb24udmFsdWVdLnZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgvXFwuL2csICcnKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmZvcm1EeW5hbWljLmNvbnRyb2xzW3F1ZXN0aW9uLnZhbHVlXS5oYXNFcnJvcignZXJyb3JNYXhMZW5ndGgnKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybUR5bmFtaWMuY29udHJvbHNbcXVlc3Rpb24udmFsdWVdLnNldEVycm9ycyh7ICdlcnJvck1heExlbmd0aCc6IHRydWUgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7IH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHR5Y1NlbGVjdGlvbihldmVudCkge1xyXG4gICAgdGhpcy52aWV3QXV0aERhdGEuZW1pdChldmVudCk7XHJcbiAgfVxyXG5cclxuICBvcGVuTGFiZWxVcmwoZXZlbnQsIHF1ZXN0aW9uKSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICBsZXQgdHljID0gPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjaGVja1wiICsgcXVlc3Rpb24uaWQpO1xyXG4gICAgdHljLnN0eWxlLmNvbG9yID0gXCIjQTNBRDMyXCI7XHJcbiAgICB3aW5kb3cub3BlbihxdWVzdGlvbi51cmxsYWJlbCwgXCJfYmxhbmtcIik7XHJcbiAgfVxyXG5cclxuICBjYW5jZWxsS2V5cHJlc3MoKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGVtYWlsUnVsZXNWYWxpZGF0ZShmb3JtUXVlc3Rpb24pIHtcclxuICAgIGxldCB2YWxPayA9IHRydWU7XHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgaGFzRXJyb3IgPSBmYWxzZTtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZm9ybVF1ZXN0aW9uLnF1ZXN0aW9uLmlkKS5zZXRBdHRyaWJ1dGUoXCJoaWRkZW5cIiwgXCJ0cnVlXCIpO1xyXG4gICAgICBsZXQgZW1sID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZm9ybVF1ZXN0aW9uLnF1ZXN0aW9uLmlkKTtcclxuICAgICAgbGV0IGVtYWlsID0gZm9ybVF1ZXN0aW9uLnF1ZXN0aW9uLnJlZ2lzdHJlZDtcclxuICAgICAgaWYgKCFoYXNFcnJvcikge1xyXG4gICAgICAgIGlmIChmb3JtUXVlc3Rpb24ucXVlc3Rpb24ucmVxdWlyZWQgJiYgKGVtYWlsID09IFwiXCIgfHwgZW1haWwgPT0gdW5kZWZpbmVkIHx8IGVtYWlsID09IG51bGwpKSB7XHJcbiAgICAgICAgICBlbWwuc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiNGRjAwMDBcIjtcclxuICAgICAgICAgIGVtbC50ZXh0Q29udGVudCA9IFwiRWwgY29ycmVjbyBlbMOpY3Ryb25pY28gZXMgcmVxdWVyaWRvXCI7XHJcbiAgICAgICAgICBlbWwucmVtb3ZlQXR0cmlidXRlKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgdmFsT2sgPSBmYWxzZTtcclxuICAgICAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFoYXNFcnJvcikge1xyXG4gICAgICAgIGlmICh0aGlzLnZhbGlkTWluTGVuZ3RoKHVuZGVmaW5lZCwgZm9ybVF1ZXN0aW9uLnF1ZXN0aW9uKSkge1xyXG4gICAgICAgICAgZW1sLnN0eWxlLmJvcmRlckNvbG9yID0gXCIjRkYwMDAwXCI7XHJcbiAgICAgICAgICBlbWwudGV4dENvbnRlbnQgPSBcIkRlYmUgc2VyIG3DrW5pbW8gZGUgXCIgKyBmb3JtUXVlc3Rpb24ucXVlc3Rpb24ubWluTGVuZ3RoICsgXCIgY2FyYWN0ZXJlc1wiO1xyXG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZm9ybVF1ZXN0aW9uLnF1ZXN0aW9uLmlkKS5yZW1vdmVBdHRyaWJ1dGUoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgICB2YWxPayA9IGZhbHNlO1xyXG4gICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoIWhhc0Vycm9yKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsaWRNYXhMZW5ndGgodW5kZWZpbmVkLCBmb3JtUXVlc3Rpb24ucXVlc3Rpb24pKSB7XHJcbiAgICAgICAgICBlbWwuc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiNGRjAwMDBcIjtcclxuICAgICAgICAgIGVtbC50ZXh0Q29udGVudCA9IFwiRGViZSBzZXIgbWF4aW1vIGRlIFwiICsgZm9ybVF1ZXN0aW9uLnF1ZXN0aW9uLm1heExlbmd0aCArIFwiIGNhcmFjdGVyZXNcIjtcclxuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZvcm1RdWVzdGlvbi5xdWVzdGlvbi5pZCkucmVtb3ZlQXR0cmlidXRlKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgdmFsT2sgPSBmYWxzZTtcclxuICAgICAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFoYXNFcnJvcikge1xyXG5cclxuICAgICAgICBjb25zdCBtYXRjaGVzID0gU3RyaW5nKGVtYWlsKS5tYXRjaChyZWdleFR5cGUuZW1haWwuZXhwKTtcclxuICAgICAgICBpZiAobWF0Y2hlcyA9PSBudWxsKSB7XHJcbiAgICAgICAgICBlbWwuc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiNGRjAwMDBcIjtcclxuICAgICAgICAgIGVtbC50ZXh0Q29udGVudCA9IFwiVHUgZW1haWwgZXMgaW52YWxpZG9cIjtcclxuICAgICAgICAgIGVtbC5yZW1vdmVBdHRyaWJ1dGUoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgICB2YWxPayA9IGZhbHNlO1xyXG4gICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcblxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbE9rO1xyXG4gIH1cclxuXHJcbiAgY2FsZW5kYXJSdWxlc1ZhbGlkYXRlKGZvcm1RdWVzdGlvbikge1xyXG4gICAgbGV0IGhhc0Vycm9yID0gZmFsc2U7XHJcbiAgICB0cnkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmb3JtUXVlc3Rpb24ucXVlc3Rpb24uaWQpLnNldEF0dHJpYnV0ZShcImhpZGRlblwiLCBcInRydWVcIik7XHJcbiAgICAgIGxldCBlY2FsZW5kYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmb3JtUXVlc3Rpb24ucXVlc3Rpb24uaWQpO1xyXG4gICAgICAvL3NlIHZhbGlkYSBxdWUgbm8gc2VhIG51bGwgc2kgZXMgcmVxdWVyaWRvXHJcbiAgICAgIGxldCBkYXRlID0gZm9ybVF1ZXN0aW9uLnF1ZXN0aW9uLnJlZ2lzdHJlZDtcclxuICAgICAgaWYgKGZvcm1RdWVzdGlvbi5xdWVzdGlvbi5yZXF1aXJlZCAmJiAoZGF0ZSA9PSBcIlwiIHx8IGRhdGUgPT0gdW5kZWZpbmVkIHx8IGRhdGUgPT0gbnVsbCkpIHtcclxuICAgICAgICBlY2FsZW5kYXIuc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiNGRjAwMDBcIjtcclxuICAgICAgICBlY2FsZW5kYXIudGV4dENvbnRlbnQgPSBcIkxhIGZlY2hhIGVzIHJlcXVlcmlkYVwiO1xyXG4gICAgICAgIGVjYWxlbmRhci5yZW1vdmVBdHRyaWJ1dGUoXCJoaWRkZW5cIik7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVOb3RTcGFjZShldmVudCkge1xyXG4gICAgaWYgKGV2ZW50LmNoYXJDb2RlID09IDMyKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuICB2YWxpZGF0ZU51bWVyb0RvY3VtZW50byhudW1lcm9Eb2M6IFN0cmluZykge1xyXG4gICAgaWYgKCFudW1lcm9Eb2MubWF0Y2goXCJeWzAtOV0qJFwiKSkge1xyXG4gICAgICB0aGlzLmZvcm1EeW5hbWljLmNvbnRyb2xzW1wibnVtZXJvRG9jXCJdLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucGF0dGVybignXlswLTldKiQnKV0pO1xyXG4gICAgICB0aGlzLmZvcm1EeW5hbWljLmNvbnRyb2xzW1wibnVtZXJvRG9jXCJdLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgIHRoaXMuZm9ybUR5bmFtaWMuY29udHJvbHNbXCJudW1lcm9Eb2NcIl0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICB0aGlzLmZvcm1EeW5hbWljLmNvbnRyb2xzW1wibnVtZXJvRG9jXCJdLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgdGhpcy5wYXR0ZXJuTm90VmFsaWREY3RvID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wYXR0ZXJuTm90VmFsaWREY3RvID0gZmFsc2U7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcbiAgdmFsaWRhdGVDZWx1bGFyKG51bWVyb0NlbDogU3RyaW5nKSB7XHJcbiAgICBpZiAoIW51bWVyb0NlbC5tYXRjaChcIl5bMC05XSokXCIpKSB7XHJcbiAgICAgIHRoaXMuZm9ybUR5bmFtaWMuY29udHJvbHNbXCJjZWx1bGFyXCJdLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucGF0dGVybignXlswLTldKiQnKV0pO1xyXG4gICAgICB0aGlzLmZvcm1EeW5hbWljLmNvbnRyb2xzW1wiY2VsdWxhclwiXS5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICB0aGlzLmZvcm1EeW5hbWljLmNvbnRyb2xzW1wiY2VsdWxhclwiXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgIHRoaXMuZm9ybUR5bmFtaWMuY29udHJvbHNbXCJjZWx1bGFyXCJdLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgdGhpcy5wYXR0ZXJuTm90VmFsaWRDZWwgPSB0cnVlO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLnBhdHRlcm5Ob3RWYWxpZENlbCA9IGZhbHNlO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBvbmtleXByZXNzKGV2ZW50KSB7XHJcbiAgICByZXR1cm4gKGV2ZW50LmNoYXJDb2RlID09IDApID8gbnVsbCA6IGV2ZW50LmNoYXJDb2RlID49IDQ4ICYmIGV2ZW50LmNoYXJDb2RlIDw9IDU3XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZVN0ZXAoc3RlcDogU3RlcCwgbmV4dFN0ZXA6IFN0ZXAsIHZhbHVlKSB7XHJcbiAgICBpZiAobmV4dFN0ZXAgJiYgbmV4dFN0ZXAuc3RlcE9yZGVyICE9IDEpIHtcclxuICAgICAgdGhpcy5yZXNldEZpZWxkKHN0ZXApO1xyXG4gICAgICBuZXh0U3RlcC52aWV3RGF0YSA9IFtdO1xyXG4gICAgICBuZXh0U3RlcC52aWV3RGF0YSA9IG5leHRTdGVwLnN0ZXBEYXRhLmZpbHRlcih4ID0+IHgucmVsYXRpb25hbElkcy5pbmNsdWRlcyhOdW1iZXIodmFsdWUpKSk7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuICByZXNldEZpZWxkKHN0ZXBJbjogU3RlcCkge1xyXG4gICAgdGhpcy5zdGVwcy5mb3JFYWNoKHN0ZXAgPT4ge1xyXG4gICAgICBpZiAoc3RlcC5zdGVwT3JkZXIgPiBzdGVwSW4uc3RlcE9yZGVyKSB7XHJcbiAgICAgICAgc3RlcC52aWV3RGF0YSA9IHVuZGVmaW5lZDtcclxuICAgICAgICBzdGVwLnZhbHVlID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
1
+ import * as tslib_1 from "tslib";
2
+ import { Component, Injectable, Input, ViewChild, Output, EventEmitter } from '@angular/core';
3
+ import { FormGroup, FormControl, Validators } from '@angular/forms';
4
+ import { HttpClient } from '@angular/common/http';
5
+ // import moment from 'moment';
6
+ import { NgbDateAdapter, NgbDateParserFormatter, NgbDatepickerI18n } from '@ng-bootstrap/ng-bootstrap';
7
+ import * as moment_ from 'moment';
8
+ import { regexType } from '../../utils/regex';
9
+ import { CommonDataService } from '../../services/data.service';
10
+ var moment = moment_;
11
+ /**
12
+ * This Service handles how the date is represented in scripts i.e. ngModel.
13
+ */
14
+ var CustomAdapter = /** @class */ (function (_super) {
15
+ tslib_1.__extends(CustomAdapter, _super);
16
+ function CustomAdapter() {
17
+ var _this = _super !== null && _super.apply(this, arguments) || this;
18
+ _this.DELIMITER = '/';
19
+ return _this;
20
+ }
21
+ CustomAdapter.prototype.fromModel = function (value) {
22
+ if (value) {
23
+ var date = value.split(this.DELIMITER);
24
+ return {
25
+ day: parseInt(date[0], 10),
26
+ month: parseInt(date[1], 10),
27
+ year: parseInt(date[2], 10)
28
+ };
29
+ }
30
+ return null;
31
+ };
32
+ CustomAdapter.prototype.toModel = function (date) {
33
+ return date ? (date.day < 10 ? 0 + date.day : date.day) + this.DELIMITER + (date.month < 10 ? 0 + date.month : date.month) + this.DELIMITER + date.year : '';
34
+ };
35
+ CustomAdapter = tslib_1.__decorate([
36
+ Injectable()
37
+ ], CustomAdapter);
38
+ return CustomAdapter;
39
+ }(NgbDateAdapter));
40
+ export { CustomAdapter };
41
+ /**
42
+ * This Service handles how the date is rendered and parsed from keyboard i.e. in the bound input field.
43
+ */
44
+ var CustomDateParserFormatter = /** @class */ (function (_super) {
45
+ tslib_1.__extends(CustomDateParserFormatter, _super);
46
+ function CustomDateParserFormatter() {
47
+ var _this = _super !== null && _super.apply(this, arguments) || this;
48
+ _this.DELIMITER = '/';
49
+ return _this;
50
+ }
51
+ CustomDateParserFormatter.prototype.parse = function (value) {
52
+ if (value) {
53
+ var date = value.split(this.DELIMITER);
54
+ return {
55
+ day: parseInt(date[0], 10),
56
+ month: parseInt(date[1], 10),
57
+ year: parseInt(date[2], 10)
58
+ };
59
+ }
60
+ return null;
61
+ };
62
+ CustomDateParserFormatter.prototype.format = function (date) {
63
+ return date ? (date.day < 10 ? '0' + date.day : date.day) + this.DELIMITER + (date.month < 10 ? '0' + date.month : date.month) + this.DELIMITER + date.year : '';
64
+ };
65
+ CustomDateParserFormatter = tslib_1.__decorate([
66
+ Injectable()
67
+ ], CustomDateParserFormatter);
68
+ return CustomDateParserFormatter;
69
+ }(NgbDateParserFormatter));
70
+ export { CustomDateParserFormatter };
71
+ var I18N_VALUES = {
72
+ 'es': {
73
+ weekdays: ['Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa', 'Do'],
74
+ months: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'],
75
+ weekLabel: 'sem'
76
+ }
77
+ // other languages you would support
78
+ };
79
+ var I18n = /** @class */ (function () {
80
+ function I18n() {
81
+ this.language = 'es';
82
+ }
83
+ I18n = tslib_1.__decorate([
84
+ Injectable()
85
+ ], I18n);
86
+ return I18n;
87
+ }());
88
+ export { I18n };
89
+ // Define custom service providing the months and weekdays translations
90
+ var CustomDatepickerI18n = /** @class */ (function (_super) {
91
+ tslib_1.__extends(CustomDatepickerI18n, _super);
92
+ function CustomDatepickerI18n(_i18n) {
93
+ var _this = _super.call(this) || this;
94
+ _this._i18n = _i18n;
95
+ return _this;
96
+ }
97
+ CustomDatepickerI18n.prototype.getWeekdayLabel = function (weekday) {
98
+ return I18N_VALUES[this._i18n.language].weekdays[weekday - 1];
99
+ };
100
+ CustomDatepickerI18n.prototype.getWeekLabel = function () {
101
+ return I18N_VALUES[this._i18n.language].weekLabel;
102
+ };
103
+ CustomDatepickerI18n.prototype.getMonthShortName = function (month) {
104
+ return I18N_VALUES[this._i18n.language].months[month - 1];
105
+ };
106
+ CustomDatepickerI18n.prototype.getMonthFullName = function (month) {
107
+ return this.getMonthShortName(month);
108
+ };
109
+ CustomDatepickerI18n.prototype.getDayAriaLabel = function (date) {
110
+ return date.day + "-" + date.month + "-" + date.year;
111
+ };
112
+ CustomDatepickerI18n.prototype.getWeekdayShortName = function (weekday) {
113
+ return I18N_VALUES[this._i18n.language].weekdays[weekday - 1];
114
+ };
115
+ ;
116
+ CustomDatepickerI18n.ctorParameters = function () { return [
117
+ { type: I18n }
118
+ ]; };
119
+ CustomDatepickerI18n = tslib_1.__decorate([
120
+ Injectable()
121
+ ], CustomDatepickerI18n);
122
+ return CustomDatepickerI18n;
123
+ }(NgbDatepickerI18n));
124
+ export { CustomDatepickerI18n };
125
+ var FormAuroraComponent = /** @class */ (function () {
126
+ function FormAuroraComponent(data, http) {
127
+ this.data = data;
128
+ this.http = http;
129
+ this.response = new EventEmitter();
130
+ this.summit = new EventEmitter();
131
+ this.viewAuthData = new EventEmitter();
132
+ this.tipodocNumDoc = false;
133
+ this.countSubmit = 0;
134
+ this.watchValid = false;
135
+ this.watchRequired = false;
136
+ this.captchaValid = false;
137
+ this.today = moment(new Date());
138
+ this.maxYear = this.today.year();
139
+ this.minYear = this.today.year() - 82;
140
+ this.minDate = this.minYear.toString() + '-' + this.today.month().toString().padStart(2, '0') + '-' + this.today.date().toString().padStart(2, '0'); // {year: this.minYear, month: this.today.month(), day: this.today.date()};
141
+ this.maxDate = this.maxYear.toString() + '-' + (this.today.month() + 1).toString().padStart(2, '0') + '-' + this.today.date().toString().padStart(2, '0'); // {year: this.maxYear, month: this.today.month() + 1, day: this.today.date()};
142
+ this.recharge = false;
143
+ this.indicativo = "57";
144
+ this.defaultDocType = "Cédula de ciudadanía";
145
+ this.patternNotValidDcto = false;
146
+ this.patternNotValidCel = false;
147
+ this.range = new FormGroup({
148
+ start: new FormControl(),
149
+ end: new FormControl(),
150
+ });
151
+ }
152
+ FormAuroraComponent.prototype.ngOnInit = function () {
153
+ var _this = this;
154
+ this.minDate = new Date(this.minDate).toISOString().split('T')[0];
155
+ setTimeout(function () {
156
+ _this.startComponent();
157
+ }, 2000);
158
+ };
159
+ FormAuroraComponent.prototype.startComponent = function () {
160
+ var e_1, _a;
161
+ var _this = this;
162
+ //ordena los campos
163
+ if (this.dataForm != null && this.dataForm.formQuestions != undefined) {
164
+ //Same row fields
165
+ this.tipodocNumDoc = (this.dataForm.formQuestions.some(function (question) { return question.question.value === "tipoDoc"; }) && this.dataForm.formQuestions.some(function (question) { return question.question.value === "numeroDoc"; })) ? true : false;
166
+ this.dataForm.formQuestions = this.dataForm.formQuestions.sort(function (a, b) {
167
+ return a.order - b.order;
168
+ });
169
+ var existcaptcha = this.dataForm.formQuestions.filter(function (item) { return item.question.questionType.id == 6; });
170
+ if (existcaptcha.length == 0) {
171
+ this.captchaValid = true;
172
+ }
173
+ var _loop_1 = function (item) {
174
+ if (item.question.maxlength == null || item.question.maxlength == undefined || item.question.maxlength == 0) {
175
+ item.question.maxlength = 524288; //defaultvalue
176
+ }
177
+ if (item.question.minLength == null || item.question.minLength == undefined) {
178
+ item.question.minLength = 0;
179
+ }
180
+ this_1.dataReloadForm.forEach(function (element) {
181
+ _this.filldata = element;
182
+ if ((item.question.questionType.id === 2 || item.question.questionType.id === 1 ||
183
+ item.question.questionType.id === 3) && (_this.filldata.data !== null &&
184
+ _this.filldata.data !== undefined) && item.question.id === _this.filldata.id) {
185
+ item.question.registred = _this.filldata.data;
186
+ }
187
+ });
188
+ if (item.question.registred == null || item.question.minLength == undefined) {
189
+ item.question.registred = '';
190
+ }
191
+ };
192
+ var this_1 = this;
193
+ try {
194
+ for (var _b = tslib_1.__values(this.dataForm.formQuestions), _c = _b.next(); !_c.done; _c = _b.next()) {
195
+ var item = _c.value;
196
+ _loop_1(item);
197
+ }
198
+ }
199
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
200
+ finally {
201
+ try {
202
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
203
+ }
204
+ finally { if (e_1) throw e_1.error; }
205
+ }
206
+ }
207
+ };
208
+ FormAuroraComponent.prototype.resolvedCaptcha = function (captchaResponse) {
209
+ this.captchaValid = true;
210
+ if (!this.formDynamic.form.value.captcha) {
211
+ this.formDynamic.controls.captcha.setValue(captchaResponse);
212
+ this.formDynamic.form.value.captcha = captchaResponse;
213
+ document.getElementById("btnIng").style.opacity = !this.formDynamic.valid ? "0.65" : "1";
214
+ }
215
+ };
216
+ //Forms
217
+ //Metodo para evitar el render de los items del for
218
+ FormAuroraComponent.prototype.trackByIndex = function (index, obj) {
219
+ return index;
220
+ };
221
+ FormAuroraComponent.prototype.onChangeValidPatter = function (event, question) {
222
+ var _this = this;
223
+ if (question.pattern != undefined) {
224
+ var valid = true;
225
+ var keyvalid = [8, 32, 37, 38, 39, 40, 46, 9];
226
+ //diferente de Backpsace
227
+ //se deja catch por error no controlable en otro tiempo de ejecucion
228
+ try {
229
+ if (!keyvalid.includes(event.keyCode)) {
230
+ var regex = new RegExp(question.pattern);
231
+ valid = regex.test(event.key);
232
+ }
233
+ }
234
+ catch (error) { }
235
+ return valid;
236
+ }
237
+ if (question.questionType !== undefined) {
238
+ if (question.questionType.description === 'Number') {
239
+ if (question.value === 'numeroDoc') {
240
+ this.validateNumeroDocumento(this.formDynamic.controls["numeroDoc"].value.toString());
241
+ }
242
+ else if (question.value === 'celular') {
243
+ this.validateCelular(this.formDynamic.controls["celular"].value.toString());
244
+ }
245
+ }
246
+ }
247
+ document.getElementById("char" + question.value).setAttribute("hidden", "true");
248
+ //if temporal mientras se migran todos los tipos de campos al foreach
249
+ if (question.questionType.id != 11 && question.questionType.id != 7) {
250
+ if (this.validMinLength(this.formDynamic, question)) {
251
+ document.getElementById(question.value).style.borderColor = "#FF0000";
252
+ document.getElementById("ml" + question.value).removeAttribute("hidden");
253
+ }
254
+ else {
255
+ document.getElementById(question.value).style.borderColor = "#E4E4E4";
256
+ document.getElementById("ml" + question.value).setAttribute("hidden", "true");
257
+ }
258
+ if (this.validMaxLength(this.formDynamic, question)) {
259
+ document.getElementById(question.value).style.borderColor = "#FF0000";
260
+ document.getElementById("mxl" + question.value).removeAttribute("hidden");
261
+ }
262
+ else {
263
+ document.getElementById(question.value).style.borderColor = "#E4E4E4";
264
+ document.getElementById("mxl" + question.value).setAttribute("hidden", "true");
265
+ }
266
+ }
267
+ this.dataForm.formQuestions.forEach(function (formQuestion) {
268
+ switch (formQuestion.question.questionType.id) {
269
+ //se valida campo de tipo calendario
270
+ case 7:
271
+ if (question.questionType.id == 7)
272
+ _this.calendarRulesValidate(formQuestion);
273
+ break;
274
+ //se valida campo de tipo email
275
+ case 11:
276
+ if (question.questionType.id == 11)
277
+ _this.emailRulesValidate(formQuestion);
278
+ break;
279
+ }
280
+ });
281
+ document.getElementById("btnIng").style.opacity = !this.formDynamic.valid ? "0.65" : "1";
282
+ };
283
+ FormAuroraComponent.prototype.validOnlyText = function (event) {
284
+ var regex = /^[a-zA-Z\u00C0-\u017F]+$/g;
285
+ if (event.charCode == 32) {
286
+ return true;
287
+ }
288
+ var valid = regex.test(event.key);
289
+ return valid;
290
+ };
291
+ FormAuroraComponent.prototype.validDate = function (event) {
292
+ /*let pattern = /(?:0[1-9]|[12][0-9]|3[01])\/(?:0[1-9]|1[0-2])\/(?:19|20)[0-9]{2}/;
293
+ const regex = new RegExp(pattern);
294
+ valid = regex.test(event.key);
295
+ */
296
+ var matches = String(event.key).match(regexType.date.exp);
297
+ var valid = true;
298
+ if (matches === null)
299
+ valid = false;
300
+ // alert(valid);
301
+ return valid;
302
+ };
303
+ FormAuroraComponent.prototype.onChangeValidDate = function (event) {
304
+ //let pattern = /(?:0[1-9]|1[0-2])\/(?:0[1-9]|[12][0-9]|3[01])\/(?:19|20)[0-9]{2}/;
305
+ var dateN = /[0-9]|\//;
306
+ var valid = true;
307
+ var regex = new RegExp(dateN);
308
+ valid = regex.test(event.key);
309
+ return valid;
310
+ };
311
+ FormAuroraComponent.prototype.rediretoutside = function (event, question) {
312
+ //se deja catch por error no controlable en otro tiempo de ejecucion
313
+ try {
314
+ event.preventDefault();
315
+ window.open(question.value, "_blank");
316
+ }
317
+ catch (error) { }
318
+ };
319
+ /**
320
+ * Dispatch submit event for validations exists
321
+ * @param change
322
+ */
323
+ FormAuroraComponent.prototype.ngOnChanges = function (change) {
324
+ this.countSubmit++;
325
+ };
326
+ //onSubmit(form: NgForm) {
327
+ FormAuroraComponent.prototype.onSubmit = function () {
328
+ var _this = this;
329
+ var form = this.formDynamic;
330
+ this.watchValid = true;
331
+ this.watchRequired = true;
332
+ if (form.valid) {
333
+ if (!this.validRulesFields(form.controls["numeroDoc"].value.toString(), form.controls["celular"].value.toString(), form.controls["email"].value))
334
+ return false;
335
+ }
336
+ if (this.validMinlenghtAllQuestions(form.value) && this.validMaxLengthAllQuestions(form.value) && form.valid) {
337
+ if (this.dataForm.urlSend != "" && this.captchaValid) {
338
+ this.http.post(this.dataForm.urlSend, form.value).subscribe(function (resp) { return _this.response.emit(resp); });
339
+ }
340
+ else if (form.valid && this.captchaValid) {
341
+ this.summit.emit(form.value);
342
+ }
343
+ }
344
+ };
345
+ FormAuroraComponent.prototype.findParamBoolean = function (params, idParam) {
346
+ var showDescriptionParam = params.find(function (x) { return x.id == idParam; });
347
+ return showDescriptionParam != null && showDescriptionParam.value == "true";
348
+ };
349
+ FormAuroraComponent.prototype.validRulesFields = function (numeroDoc, numeroCel, email) {
350
+ var _this = this;
351
+ // Validaciones para celular en caso de indicativo en Colombia
352
+ var cel = document.getElementById("charcelular");
353
+ var doc = document.getElementById("charnumeroDoc");
354
+ var valOk = true;
355
+ if (this.indicativo == "+57" || this.indicativo == "57") {
356
+ var stringOrdenado = this.orderString(numeroDoc);
357
+ if (this.nameCompany.toUpperCase() !== 'CLARO') { //claro acepta nro consecutivos
358
+ if (numeroDoc == stringOrdenado) {
359
+ doc.style.borderColor = "#FF0000";
360
+ doc.removeAttribute("hidden");
361
+ doc.textContent = "El numero documento No debe contener caracteres consecutivos";
362
+ valOk = false;
363
+ //this.msgErrorCampo = "El numero documento No debe contener caracteres consecutivos";
364
+ //return false;
365
+ }
366
+ }
367
+ if (numeroCel.substring(0, 1) != "3") {
368
+ cel.style.borderColor = "#FF0000";
369
+ cel.removeAttribute("hidden");
370
+ cel.textContent = "El primer carácter del celular debe ser 3";
371
+ valOk = false;
372
+ //this.msgErrorCampo = "El primer carácter del celular debe ser 3";
373
+ //return false;
374
+ }
375
+ /*
376
+ if (parseInt(numeroCel.substring(0, 3)) > 350) {
377
+ cel.style.borderColor = "#FF0000";
378
+ cel.removeAttribute("hidden");
379
+ cel.textContent = "El prefijo del celular no debe ser mayor a 350";
380
+ valOk = false;
381
+ //this.msgErrorCampo = "El prefijo del celular no debe ser mayor a 350";
382
+ //return false;
383
+ }
384
+ */
385
+ //En caso de que el número se repita, ejemplo 33333333
386
+ var listnumber = numeroDoc.substring(0, 1);
387
+ for (var index = 1; index < numeroDoc.length; index++) {
388
+ listnumber = listnumber + numeroDoc.substring(0, 1);
389
+ }
390
+ if (numeroDoc == listnumber) {
391
+ doc.style.borderColor = "#FF0000";
392
+ doc.removeAttribute("hidden");
393
+ doc.textContent = "Caracteres numéricos no se pueden repetirse de manera continua ";
394
+ valOk = false;
395
+ //this.msgErrorCampo = "Caracteres numéricos no se pueden repetirse de manera continua ";
396
+ //return false;
397
+ }
398
+ if (!this.validateNumeroDocumento(numeroDoc)) {
399
+ return false;
400
+ }
401
+ if (!this.validateCelular(numeroCel)) {
402
+ return false;
403
+ }
404
+ // En caso de que el número se repita, ejemplo 33333333
405
+ var arrayPhoneRepeat = Array.from(String(numeroCel), Number);
406
+ var arrayPhoneOutRepeat = tslib_1.__spread(new Set(arrayPhoneRepeat));
407
+ if (arrayPhoneOutRepeat.length == 1) {
408
+ cel.style.borderColor = "#FF0000";
409
+ cel.removeAttribute("hidden");
410
+ cel.textContent = "El número que ingresa no es valido";
411
+ valOk = false;
412
+ //this.msgErrorCampo = "El número que ingresa no es valido";
413
+ //return false;
414
+ }
415
+ }
416
+ else if (this.indicativo == "+593" || this.indicativo == "593") {
417
+ if (numeroCel.substring(0, 1) != "9") {
418
+ cel.style.borderColor = "#FF0000";
419
+ cel.removeAttribute("hidden");
420
+ cel.textContent = "El primer carácter del celular debe ser 9";
421
+ valOk = false;
422
+ //this.msgErrorCampo = "El primer carácter del celular debe ser 9";
423
+ //return false;
424
+ }
425
+ }
426
+ //se validan los campos por tipo de campo y no por value
427
+ this.dataForm.formQuestions.forEach(function (formQuestion) {
428
+ switch (formQuestion.question.questionType.id) {
429
+ //se valida campo de tipo email
430
+ case 11:
431
+ valOk = _this.emailRulesValidate(formQuestion);
432
+ break;
433
+ }
434
+ });
435
+ return valOk;
436
+ };
437
+ FormAuroraComponent.prototype.orderString = function (value) {
438
+ var arrayNumber = [];
439
+ for (var index = 0; index < value.length; index++) {
440
+ arrayNumber.push(parseInt(value.substring(index, index + 1)));
441
+ }
442
+ //ordena el array
443
+ arrayNumber.sort(function (a, b) {
444
+ return a - b;
445
+ });
446
+ var numberOrder = "";
447
+ numberOrder = arrayNumber[0];
448
+ for (var index = 1; index < arrayNumber.length; index++) {
449
+ numberOrder = numberOrder + (arrayNumber[0] + index).toString();
450
+ }
451
+ return numberOrder;
452
+ };
453
+ FormAuroraComponent.prototype.validMinlenghtAllQuestions = function (form) {
454
+ var e_2, _a;
455
+ try {
456
+ for (var _b = tslib_1.__values(this.dataForm.formQuestions), _c = _b.next(); !_c.done; _c = _b.next()) {
457
+ var item = _c.value;
458
+ if (item.question.questionType.id == 1 || item.question.questionType.id == 2) {
459
+ var minLength = parseInt(item.question.minLength);
460
+ var formValueLength = parseInt(form[item.question.value].toString().length);
461
+ if (minLength > 0 && formValueLength != minLength && formValueLength < minLength)
462
+ return false;
463
+ }
464
+ }
465
+ }
466
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
467
+ finally {
468
+ try {
469
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
470
+ }
471
+ finally { if (e_2) throw e_2.error; }
472
+ }
473
+ return true;
474
+ };
475
+ FormAuroraComponent.prototype.validMaxLengthAllQuestions = function (form) {
476
+ var e_3, _a;
477
+ try {
478
+ for (var _b = tslib_1.__values(this.dataForm.formQuestions), _c = _b.next(); !_c.done; _c = _b.next()) {
479
+ var item = _c.value;
480
+ if (item.question.questionType.id == 1 || item.question.questionType.id == 2) {
481
+ var maxLength = parseInt(item.question.maxLength);
482
+ var formValueLength = parseInt(form[item.question.value].toString().length);
483
+ if (maxLength > 0 && formValueLength != maxLength && formValueLength > maxLength)
484
+ return false;
485
+ }
486
+ }
487
+ }
488
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
489
+ finally {
490
+ try {
491
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
492
+ }
493
+ finally { if (e_3) throw e_3.error; }
494
+ }
495
+ return true;
496
+ };
497
+ FormAuroraComponent.prototype.validRequired = function (form, question) {
498
+ //se deja catch por error no controlable en otro tiempo de ejecucion
499
+ try {
500
+ if (question != undefined && question.value != undefined) {
501
+ if (form.controls[question.value] != undefined &&
502
+ form.controls[question.value].errors != null &&
503
+ form.controls[question.value].errors.required) {
504
+ return true;
505
+ }
506
+ }
507
+ }
508
+ catch (error) { }
509
+ return false;
510
+ };
511
+ FormAuroraComponent.prototype.validMinLength = function (form, question) {
512
+ //se deja catch por error no controlable en otro tiempo de ejecucion
513
+ try {
514
+ if (question != undefined && question.value != undefined) {
515
+ if (question.minLength > form.controls[question.value].value.toLocaleString().length && question.minLength > 0) {
516
+ return true;
517
+ }
518
+ }
519
+ }
520
+ catch (error) { }
521
+ return false;
522
+ };
523
+ FormAuroraComponent.prototype.validMaxLength = function (form, question) {
524
+ //se deja catch por error no controlable en otro tiempo de ejecucion
525
+ try {
526
+ if (question != undefined && question.value != undefined) {
527
+ if (question.maxLength > 0) {
528
+ if (question.maxLength + 1 <= form.controls[question.value].value.toString().replace(/\./g, '').length) {
529
+ if (!this.formDynamic.controls[question.value].hasError('errorMaxLength')) {
530
+ this.formDynamic.controls[question.value].setErrors({ 'errorMaxLength': true });
531
+ }
532
+ return true;
533
+ }
534
+ }
535
+ }
536
+ }
537
+ catch (error) { }
538
+ return false;
539
+ };
540
+ FormAuroraComponent.prototype.tycSelection = function (event) {
541
+ this.viewAuthData.emit(event);
542
+ };
543
+ FormAuroraComponent.prototype.openLabelUrl = function (event, question) {
544
+ event.preventDefault();
545
+ var tyc = document.getElementById("check" + question.id);
546
+ tyc.style.color = "#A3AD32";
547
+ window.open(question.urllabel, "_blank");
548
+ };
549
+ FormAuroraComponent.prototype.cancellKeypress = function () {
550
+ return false;
551
+ };
552
+ FormAuroraComponent.prototype.emailRulesValidate = function (formQuestion) {
553
+ var valOk = true;
554
+ try {
555
+ var hasError = false;
556
+ document.getElementById(formQuestion.question.id).setAttribute("hidden", "true");
557
+ var eml = document.getElementById(formQuestion.question.id);
558
+ var email = formQuestion.question.registred;
559
+ if (!hasError) {
560
+ if (formQuestion.question.required && (email == "" || email == undefined || email == null)) {
561
+ eml.style.borderColor = "#FF0000";
562
+ eml.textContent = "El correco eléctronico es requerido";
563
+ eml.removeAttribute("hidden");
564
+ valOk = false;
565
+ hasError = true;
566
+ }
567
+ }
568
+ if (!hasError) {
569
+ if (this.validMinLength(undefined, formQuestion.question)) {
570
+ eml.style.borderColor = "#FF0000";
571
+ eml.textContent = "Debe ser mínimo de " + formQuestion.question.minLength + " caracteres";
572
+ document.getElementById(formQuestion.question.id).removeAttribute("hidden");
573
+ valOk = false;
574
+ hasError = true;
575
+ }
576
+ }
577
+ if (!hasError) {
578
+ if (this.validMaxLength(undefined, formQuestion.question)) {
579
+ eml.style.borderColor = "#FF0000";
580
+ eml.textContent = "Debe ser maximo de " + formQuestion.question.maxLength + " caracteres";
581
+ document.getElementById(formQuestion.question.id).removeAttribute("hidden");
582
+ valOk = false;
583
+ hasError = true;
584
+ }
585
+ }
586
+ if (!hasError) {
587
+ var matches = String(email).match(regexType.email.exp);
588
+ if (matches == null) {
589
+ eml.style.borderColor = "#FF0000";
590
+ eml.textContent = "Tu email es invalido";
591
+ eml.removeAttribute("hidden");
592
+ valOk = false;
593
+ hasError = true;
594
+ }
595
+ }
596
+ }
597
+ catch (error) {
598
+ }
599
+ return valOk;
600
+ };
601
+ FormAuroraComponent.prototype.calendarRulesValidate = function (formQuestion) {
602
+ var hasError = false;
603
+ try {
604
+ document.getElementById(formQuestion.question.id).setAttribute("hidden", "true");
605
+ var ecalendar = document.getElementById(formQuestion.question.id);
606
+ //se valida que no sea null si es requerido
607
+ var date = formQuestion.question.registred;
608
+ if (formQuestion.question.required && (date == "" || date == undefined || date == null)) {
609
+ ecalendar.style.borderColor = "#FF0000";
610
+ ecalendar.textContent = "La fecha es requerida";
611
+ ecalendar.removeAttribute("hidden");
612
+ }
613
+ }
614
+ catch (error) {
615
+ }
616
+ };
617
+ FormAuroraComponent.prototype.validateNotSpace = function (event) {
618
+ if (event.charCode == 32) {
619
+ return false;
620
+ }
621
+ else {
622
+ return true;
623
+ }
624
+ };
625
+ FormAuroraComponent.prototype.validateNumeroDocumento = function (numeroDoc) {
626
+ if (!numeroDoc.match("^[0-9]*$")) {
627
+ this.formDynamic.controls["numeroDoc"].setValidators([Validators.pattern('^[0-9]*$')]);
628
+ this.formDynamic.controls["numeroDoc"].markAsDirty();
629
+ this.formDynamic.controls["numeroDoc"].updateValueAndValidity();
630
+ this.formDynamic.controls["numeroDoc"].markAsTouched();
631
+ this.patternNotValidDcto = true;
632
+ return false;
633
+ }
634
+ this.patternNotValidDcto = false;
635
+ return true;
636
+ };
637
+ FormAuroraComponent.prototype.validateCelular = function (numeroCel) {
638
+ if (!numeroCel.match("^[0-9]*$")) {
639
+ this.formDynamic.controls["celular"].setValidators([Validators.pattern('^[0-9]*$')]);
640
+ this.formDynamic.controls["celular"].markAsDirty();
641
+ this.formDynamic.controls["celular"].updateValueAndValidity();
642
+ this.formDynamic.controls["celular"].markAsTouched();
643
+ this.patternNotValidCel = true;
644
+ return false;
645
+ }
646
+ this.patternNotValidCel = false;
647
+ return true;
648
+ };
649
+ FormAuroraComponent.prototype.onkeypress = function (event) {
650
+ return (event.charCode == 0) ? null : event.charCode >= 48 && event.charCode <= 57;
651
+ };
652
+ FormAuroraComponent.prototype.onChangeStep = function (step, nextStep, value) {
653
+ if (nextStep && nextStep.stepOrder != 1) {
654
+ this.resetField(step);
655
+ nextStep.viewData = [];
656
+ nextStep.viewData = nextStep.stepData.filter(function (x) { return x.relationalIds.includes(Number(value)); });
657
+ }
658
+ };
659
+ FormAuroraComponent.prototype.resetField = function (stepIn) {
660
+ this.steps.forEach(function (step) {
661
+ if (step.stepOrder > stepIn.stepOrder) {
662
+ step.viewData = undefined;
663
+ step.value = undefined;
664
+ }
665
+ });
666
+ };
667
+ FormAuroraComponent.ctorParameters = function () { return [
668
+ { type: CommonDataService },
669
+ { type: HttpClient }
670
+ ]; };
671
+ tslib_1.__decorate([
672
+ Input()
673
+ ], FormAuroraComponent.prototype, "dataClassCss", void 0);
674
+ tslib_1.__decorate([
675
+ Input()
676
+ ], FormAuroraComponent.prototype, "dataForm", void 0);
677
+ tslib_1.__decorate([
678
+ Input()
679
+ ], FormAuroraComponent.prototype, "clickSubmit", void 0);
680
+ tslib_1.__decorate([
681
+ Input()
682
+ ], FormAuroraComponent.prototype, "dataReloadForm", void 0);
683
+ tslib_1.__decorate([
684
+ Input()
685
+ ], FormAuroraComponent.prototype, "welcomeTitle", void 0);
686
+ tslib_1.__decorate([
687
+ Input()
688
+ ], FormAuroraComponent.prototype, "welcomeDescription", void 0);
689
+ tslib_1.__decorate([
690
+ Input()
691
+ ], FormAuroraComponent.prototype, "urlPdf", void 0);
692
+ tslib_1.__decorate([
693
+ Input()
694
+ ], FormAuroraComponent.prototype, "nameCompany", void 0);
695
+ tslib_1.__decorate([
696
+ Input()
697
+ ], FormAuroraComponent.prototype, "schedule", void 0);
698
+ tslib_1.__decorate([
699
+ Input()
700
+ ], FormAuroraComponent.prototype, "isSimpleFlow", void 0);
701
+ tslib_1.__decorate([
702
+ Input()
703
+ ], FormAuroraComponent.prototype, "steps", void 0);
704
+ tslib_1.__decorate([
705
+ ViewChild('formDynamic', { static: true })
706
+ ], FormAuroraComponent.prototype, "formDynamic", void 0);
707
+ tslib_1.__decorate([
708
+ Output()
709
+ ], FormAuroraComponent.prototype, "response", void 0);
710
+ tslib_1.__decorate([
711
+ Output()
712
+ ], FormAuroraComponent.prototype, "summit", void 0);
713
+ tslib_1.__decorate([
714
+ Output()
715
+ ], FormAuroraComponent.prototype, "viewAuthData", void 0);
716
+ FormAuroraComponent = tslib_1.__decorate([
717
+ Component({
718
+ selector: 'lib-FormAurora',
719
+ template: "<div class=\"card\">\n <span class=\"text-center mt-2 d-none d-sm-block\" *ngIf=\"!isSimpleFlow\">\n <img style=\"width: 115px; height:96px;\" [class]=\"dataClassCss.logo\" id=\"logo\">\n </span>\n <div class=\"text-center mt-2 d-none d-sm-block\" *ngIf=\"isSimpleFlow\" style=\"margin-top: 4%!important;\">\n </div>\n <div class=\"card-body pt-0\">\n <ng-container *ngIf=\"schedule\">\n <h4 class=\"card-title text-center mb-0\" [class]=\"dataClassCss.bienvenida2\" style=\"color: #EE7E0E;\">\n Horarios de atenci\u00F3n\n </h4>\n <small class=\"text-center d-block\">{{schedule}}</small>\n </ng-container>\n <form #formDynamic=\"ngForm\">\n <div *ngFor=\"let control of dataForm?.formQuestions; let index = index; trackBy: trackByIndex\">\n <div\n *ngIf=\"(index > 0 && (dataForm.formQuestions[index - 1].question.questionType.id == 3 && dataForm.formQuestions[index].question.questionType.id == 2)) || (index < dataForm.formQuestions.length && dataForm.formQuestions[index].question.questionType.id == 3 && dataForm.formQuestions[index + 1].question.questionType.id == 2); else switchTemp\">\n <div class=\"row\"\n *ngIf=\"(index > 0 && (dataForm.formQuestions[index - 1].question.questionType.id == 3 && dataForm.formQuestions[index].question.questionType.id == 2))\">\n <div class=\"col-lg-6 col-xs-12\">\n <div [class]=\"dataClassCss.cl12\">\n <label for=\"{{dataForm.formQuestions[index - 1].question.value}}\" class=\"col-sm-12\"\n style=\"display: block; text-align: left;\">\n <span class=\"h6 small bg-white text-muted\">{{dataForm.formQuestions[index -\n 1].question.label}}</span>\n </label>\n <div class=\"selectContainer\">\n <select [name]=\"dataForm.formQuestions[index - 1].question.value\"\n [required]=\"dataForm.formQuestions[index - 1].question.required\"\n [class]=\"dataClassCss.formcontrol\"\n id=\"{{dataForm.formQuestions[index - 1].question.value}}\"\n style=\"margin-top: -1rem !important;\"\n [(ngModel)]=\"defaultDocType !== '' ? defaultDocType : dataForm.formQuestions[index - 1].question.registred\">\n <option value=\"\" selected disabled hidden>Selecciona</option>\n <ng-container\n *ngFor=\"let item of dataForm.formQuestions[index - 1].question.questionAnswers\">\n <option *ngIf=\"item.answer.state.id == 1\" [value]=\"item.answer.value\">\n {{ item.answer.field }}\n </option>\n </ng-container>\n </select>\n </div>\n </div>\n <div style=\"margin-left: 15px;\"\n *ngIf=\"dataForm.formQuestions[index].question.questionType.id != 5 && dataForm.formQuestions[index].question.questionType.id != 6\">\n <span class=\"error\" [id]=\"'char'+dataForm.formQuestions[index-1].question.value\"\n hidden></span>\n </div>\n </div>\n <div class=\"col-lg-6 col-xs-12\">\n <div [class]=\"dataClassCss.cl12\">\n <label for=\"{{dataForm.formQuestions[index].question.value}}\"\n class=\"col-sm-12 p-sm-0 px-sm-1\" style=\"display: block; text-align: left;\">\n <span\n class=\"h6 small bg-white text-muted pt-1 pl-2 pr-2\">{{dataForm.formQuestions[index].question.label}}</span>\n </label>\n <input type=\"text\" pattern=\"\\d*\" inputmode=\"numeric\"\n id=\"{{dataForm.formQuestions[index].question.value}}\"\n style=\"margin-top: -1rem !important;\"\n [name]=\"dataForm.formQuestions[index].question.value\" placeholder=\"Escribe\"\n [required]=\"dataForm.formQuestions[index].question.required\"\n (change)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (blur)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (keyup)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n onkeypress=\"onkeypress($event)\" onkeyup=\"(this.value=(value.replace(/[.]*/g,'')))\"\n maxlength=\"dataForm.formQuestions[index].question.maxLength\"\n [minLength]=\"dataForm.formQuestions[index].question.minLength\"\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\"\n [class]=\"dataClassCss.formcontrol\" />\n\n </div>\n\n <div style=\"margin-left: 15px;\"\n *ngIf=\"dataForm.formQuestions[index].question.questionType.id != 5 && dataForm.formQuestions[index].question.questionType.id != 6\">\n <span class=\"error\" [id]=\"'rq'+dataForm.formQuestions[index].question.value\"\n *ngIf=\"validRequired(formDynamic,dataForm.formQuestions[index].question) && watchValid\">\n Este campo es obligatorio</span>\n <span class=\"error\" [id]=\"'ml'+dataForm.formQuestions[index].question.value\" hidden>\n Debe ser m\u00EDnimo de\n {{ dataForm.formQuestions[index].question.minLength }} caracteres</span>\n <span class=\"error\" [id]=\"'mxl'+dataForm.formQuestions[index].question.value\" hidden>\n Debe ser maximo de\n {{ dataForm.formQuestions[index].question.maxLength }} caracteres</span>\n <span class=\"error\" [id]=\"'char'+dataForm.formQuestions[index].question.value\"\n hidden></span>\n <span *ngIf=\"patternNotValidDcto === true\" class=\"error\">Formato no valido</span>\n </div>\n </div>\n </div>\n </div>\n\n <ng-template #switchTemp>\n <div [ngSwitch]=\"dataForm.formQuestions[index].question.questionType.id\">\n <div *ngSwitchCase=\"1\">\n <div [class]=\"dataClassCss.cl12\">\n <label for=\"{{dataForm.formQuestions[index].question.value}}\" class=\"col-sm-12\"\n style=\"display: block; text-align: left; \">\n <span\n class=\"h6 small bg-white text-muted pt-1 pl-2 pr-2\">{{dataForm.formQuestions[index].question.label}}</span>\n </label>\n <input type=\"text\" id=\"{{dataForm.formQuestions[index].question.value}}\"\n [class]=\"dataClassCss.formcontrol\" placeholder=\"Escribe\"\n [required]=\"dataForm.formQuestions[index].question.required\"\n [maxlength]=\"dataForm.formQuestions[index].question.maxLength\"\n [name]=\"dataForm.formQuestions[index].question.value\"\n (keydown)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (change)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (blur)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\"\n style=\"margin-top: -1rem !important;\" />\n </div>\n </div>\n <div *ngSwitchCase=\"2\">\n\n <div [class]=\"dataClassCss.cl12\">\n <label for=\"{{dataForm.formQuestions[index].question.value}}\" class=\"col-sm-12\"\n style=\"display: block; text-align: left;\">\n <span\n class=\"h6 small bg-white text-muted pt-1 pl-2 pr-2\">{{dataForm.formQuestions[index].question.label}}</span>\n </label>\n <input type=\"text\" pattern=\"\\d*\" inputmode=\"numeric\"\n id=\"{{dataForm.formQuestions[index].question.value}}\"\n style=\"margin-top: -1rem !important;\"\n [name]=\"dataForm.formQuestions[index].question.value\" placeholder=\"Escribe\"\n [required]=\"dataForm.formQuestions[index].question.required\"\n (keydown)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (change)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (blur)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n onkeypress=\"onkeypress($event)\" onkeyup=\"(this.value=(value.replace(/[.]*/g,'')))\"\n maxlength=\"dataForm.formQuestions[index].question.maxLength\"\n [minLength]=\"dataForm.formQuestions[index].question.minLength\"\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\"\n [class]=\"dataClassCss.formcontrol\" />\n <span *ngIf=\"patternNotValidCel === true\" class=\"error\">Formato no valido</span>\n </div>\n\n </div>\n <div *ngSwitchCase=\"3\">\n <div [class]=\"dataClassCss.cl12\">\n <label for=\"{{dataForm.formQuestions[index].question.value}}\" class=\"col-sm-12\"\n style=\"display: block; text-align: left;\">\n <span\n class=\"h6 small bg-white text-muted\">{{dataForm.formQuestions[index].question.label}}</span>\n </label>\n <select [name]=\"dataForm.formQuestions[index].question.value\"\n [required]=\"dataForm.formQuestions[index].question.required\"\n [class]=\"dataClassCss.formcontrol\"\n id=\"{{dataForm.formQuestions[index].question.value}}\"\n style=\"margin-top: -1rem !important;\"\n [(ngModel)]=\"defaultDocType !== '' ? defaultDocType : dataForm.formQuestions[index].question.registred\">\n <option value=\"\" selected disabled hidden>Selecciona</option>\n <ng-container\n *ngFor=\"let item of dataForm.formQuestions[index].question.questionAnswers\">\n <option *ngIf=\"item.answer.state.id == 1\" [value]=\"item.answer.value\">\n {{ item.answer.field }}\n </option>\n </ng-container>\n </select>\n </div>\n </div>\n <div *ngSwitchCase=\"4\">\n <select class=\"{{ dataClassCss.formcontrol }} select-checkbox\"\n style=\"overflow: hidden; border-style: hidden;\"\n [style.height.px]=\"dataForm.formQuestions[index].question.questionAnswers.length * 24\"\n [name]=\"dataForm.formQuestions[index].question.value\"\n [required]=\"dataForm.formQuestions[index].question.required\" ngModel multiple>\n <option (mousemove)=\"$event.preventDefault()\"\n *ngFor=\"let item of dataForm.formQuestions[index].question.questionAnswers\"\n [value]=\"item.answer.value\">\n {{ item.answer.field }}\n </option>\n </select>\n </div>\n <div *ngSwitchCase=\"5\">\n <a (click)=\"rediretoutside($event,dataForm.formQuestions[index].question)\" href=\"\">\n <span>{{ dataForm.formQuestions[index].question.label }}</span>\n </a>\n </div>\n <div *ngSwitchCase=\"6\">\n <div [class]=\"dataClassCss.cl12\" [id]=\"'reCaptcha'\">\n <div class=\"cnt-captcha\">\n <re-captcha (resolved)=\"resolvedCaptcha($event)\"\n siteKey=\"6Lf9DcQfAAAAAI6HCNB5OyKUpOPpfl5ocoBJcigZ\"></re-captcha>\n <input hidden type=\"text\" [name]=\"dataForm.formQuestions[index].question.value\"\n [required]=\"dataForm.formQuestions[index].question.required\"\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\">\n </div>\n <span class=\"error\" *ngIf=\"watchValid && !captchaValid\" style=\"margin-top: 0;\">\n Debe resolver la captcha para continuar\n </span>\n </div>\n </div>\n <div *ngSwitchCase=\"7\">\n <div [class]=\"dataClassCss.cl12\">\n <label for=\"{{dataForm.formQuestions[index].question.value}}\" class=\"col-sm-12\"\n style=\"display: block; text-align: left; margin-bottom: 0 ;\">\n <span\n class=\"h6 small bg-white text-muted pt-1 pl-2 pr-2\">{{dataForm.formQuestions[index].question.label}}</span>\n </label>\n <input placeholder=\"dd/mm/aaaa\" style=\"margin-top: -0.4rem !important;\"\n [required]=\"dataForm.formQuestions[index].question.required\"\n [name]=\"dataForm.formQuestions[index].question.value\" type=\"date\" min=\"{{minDate}}\"\n max=\"{{maxDate}}\" [maxlength]=\"10\" (paste)=\"false\"\n id=\"{{dataForm.formQuestions[index].question.value}}\"\n [class]=\"dataClassCss.txtCalendar\"\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\"\n (keydown)=\"cancellKeypress()\"\n (change)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (blur)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\">\n\n <button class=\"btn\" id=\"{{dataForm.formQuestions[index].question.value}}\" type=\"button\"\n style=\"width: 46px;\n top: 12px;\n color: white;\n right: 15px;\n position: absolute;\n background: #D25D42;\n pointer-events: none;\">\n <i class=\"fa fa-calendar\"></i>\n </button>\n\n </div>\n </div>\n <div *ngSwitchCase=\"8\">\n <div [class]=\"dataClassCss.cl12\" style=\"text-align: left; margin-bottom: 10px;\">\n <input\n style=\"width: 4% !important; height: auto !important; display: inline !important;\"\n type=\"checkbox\" [name]=\"dataForm.formQuestions[index].question.value\"\n [required]=\"dataForm.formQuestions[index].question.required\"\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\"\n [class]=\"dataClassCss.formcontrol\">\n <a target=\"_blank\" style=\"text-decoration: underline;color:blue;cursor: pointer;\"\n id=\"txtPoliticas\" (click)=\"tycSelection($event)\">\n {{dataForm.formQuestions[index].question.label}}\n </a>\n </div>\n </div>\n <div *ngSwitchCase=\"9\">\n <div [class]=\"dataClassCss.cl12\">\n <label for=\"{{dataForm.formQuestions[index].question.value}}\" class=\"col-sm-12\"\n style=\"display: block; text-align: left; \">\n <span\n class=\"h6 small bg-white text-muted pt-1 pl-2 pr-2\">{{dataForm.formQuestions[index].question.label}}</span>\n </label>\n <input type=\"text\" id=\"{{dataForm.formQuestions[index].question.value}}\"\n [class]=\"dataClassCss.formcontrol\" placeholder=\"Escribe\"\n [required]=\"dataForm.formQuestions[index].question.required\"\n [maxlength]=\"dataForm.formQuestions[index].question.maxLength\"\n [name]=\"dataForm.formQuestions[index].question.value\"\n (keydown)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (change)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (blur)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (keypress)=\"validOnlyText($event)\"\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\"\n style=\"margin-top: -1rem !important;\" />\n </div>\n </div>\n <div *ngSwitchCase=\"10\">\n <div [class]=\"dataClassCss.cl12\" style=\"text-align: left; margin-bottom: 10px;\">\n <input\n style=\"width: 4% !important; height: auto !important; display: inline !important;\"\n type=\"checkbox\" [name]=\"dataForm.formQuestions[index].question.value\"\n [required]=\"dataForm.formQuestions[index].question.required\"\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\">\n <a target=\"_blank\" style=\"text-decoration: underline;color:blue;cursor: pointer;\"\n id=\"check{{dataForm.formQuestions[index].question.id}}\"\n (click)=\"openLabelUrl($event,dataForm.formQuestions[index].question)\">\n {{dataForm.formQuestions[index].question.label}}\n </a>\n </div>\n </div>\n <div *ngSwitchCase=\"11\">\n <div [class]=\"dataClassCss.cl12\">\n <label for=\"{{dataForm.formQuestions[index].question.value}}\" class=\"col-sm-12\"\n style=\"display: block; text-align: left; \">\n <span\n class=\"h6 small bg-white text-muted pt-1 pl-2 pr-2\">{{dataForm.formQuestions[index].question.label}}</span>\n </label>\n <input type=\"text\" id=\"{{dataForm.formQuestions[index].question.value}}\"\n [class]=\"dataClassCss.formcontrol\" placeholder=\"Escribe\"\n [required]=\"dataForm.formQuestions[index].question.required\"\n [maxlength]=\"dataForm.formQuestions[index].question.maxLength\"\n [name]=\"dataForm.formQuestions[index].question.value\"\n (keydown)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (change)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (blur)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (keypress)=\"validateNotSpace($event)\"\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\"\n style=\"margin-top: -1rem !important;\" />\n </div>\n </div>\n <div *ngSwitchDefault>Tipo de control no detectado</div>\n <div style=\"margin-left: 15px;\"\n *ngIf=\"dataForm.formQuestions[index].question.questionType.id != 5 && dataForm.formQuestions[index].question.questionType.id != 6\">\n <span class=\"error\" [id]=\"'rq'+dataForm.formQuestions[index].question.value\"\n *ngIf=\"validRequired(formDynamic,dataForm.formQuestions[index].question) && watchValid\">\n Este campo es obligatorio</span>\n <span class=\"error\" [id]=\"'ml'+dataForm.formQuestions[index].question.value\" hidden>\n Debe ser m\u00EDnimo de\n {{ dataForm.formQuestions[index].question.minLength }} caracteres</span>\n <span class=\"error\" [id]=\"'mxl'+dataForm.formQuestions[index].question.value\" hidden>\n Debe ser maximo de\n {{ dataForm.formQuestions[index].question.maxLength }} caracteres</span>\n <span class=\"error\" [id]=\"'char'+dataForm.formQuestions[index].question.value\"\n hidden></span>\n <span class=\"error\" [id]=\"dataForm.formQuestions[index].question.id\" hidden></span>\n </div>\n </div>\n </ng-template>\n </div>\n <section *ngIf=\"isSimpleFlow\">\n <div *ngFor=\"let step of steps let index = index;\">\n <div [class]=\"dataClassCss.cl12\" *ngIf=\"step.viewData\">\n <label for=\"{{step.id}}\" class=\"col-sm-12\" style=\"display: block; text-align: left;\">\n <span class=\"h6 small bg-white text-muted\">{{step.step}}</span>\n </label>\n <select [name]=\"step.step\" [required]=\"true\" [class]=\"dataClassCss.formcontrol\"\n id=\"{{step.step}}\" style=\"margin-top: -1rem !important;\" [(ngModel)]=\"step.value\"\n (ngModelChange)=\"onChangeStep(step,steps[index+1],$event)\">\n <option value=\"\" selected disabled hidden>Selecciona</option>\n <ng-container *ngFor=\"let subitem of step.viewData\">\n <option [value]=\"subitem.id\">\n {{ subitem.description }}\n </option>\n </ng-container>\n </select>\n </div>\n </div>\n </section>\n <div class=\"mt-3 text-center\">\n <button type=\"button\" [class]=\"dataClassCss.btn\" (click)=\"onSubmit()\" [disabled]=\"!formDynamic.valid\"\n id=\"btnIng\">Ingresar</button>\n </div>\n </form>\n </div>\n</div>",
720
+ providers: [
721
+ { provide: NgbDateAdapter, useClass: CustomAdapter },
722
+ { provide: NgbDateParserFormatter, useClass: CustomDateParserFormatter },
723
+ { provide: NgbDatepickerI18n, useClass: CustomDatepickerI18n },
724
+ I18n
725
+ ],
726
+ styles: ["form{font-size:12px;overflow-y:scroll;overflow-x:hidden}form input,form select{border:1px solid #e4e4e4;height:40px;margin-bottom:5px}.selectContainer select{-webkit-appearance:none;-moz-appearance:none;appearance:none}.selectContainer::after{content:\"\\025be\";display:table-cell;text-align:center;padding-top:7px;width:30px;height:30px;position:absolute;top:14px;right:20px;pointer-events:none}form .error{color:red;font-size:12px;text-align:left;margin:-15px 0 15px;padding:0;width:90%}.error:after{content:\" \";display:block}.card{width:90%;margin:2% auto;border-radius:12px}@media (max-width:412px){.card{width:100%}.cnt-captcha{transform:scale(.77)}}@media (max-width:575.98px){.card{width:100%}.cnt-captcha{transform:scale(.77)}}@media (max-width:880.98px){.cnt-captcha{transform:scale(.82)}}input[type=date]::-webkit-calendar-picker-indicator{background:0 0;bottom:0;color:transparent;cursor:pointer;height:auto;left:0;position:absolute;right:0;top:0;width:auto}::-webkit-scrollbar{width:5px}::-webkit-scrollbar-track{background:#f5f5f5}::-webkit-scrollbar-thumb{background:#e0e0e0}::-webkit-scrollbar-thumb:hover{background:#bdbdbd}"]
727
+ })
728
+ ], FormAuroraComponent);
729
+ return FormAuroraComponent;
730
+ }());
731
+ export { FormAuroraComponent };
732
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1hdXJvcmEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vZm9ybS1hdXJvcmEtc3RlZmFuaW5pLyIsInNvdXJjZXMiOlsibGliL0NvbXBvbmVudHMvZnJvbS1hdXJvcmEvZm9ybS1hdXJvcmEuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixLQUFLLEVBSUwsU0FBUyxFQUdULE1BQU0sRUFDTixZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQWdCLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVsRCwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxzQkFBc0IsRUFBaUIsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0SCxPQUFPLEtBQUssT0FBTyxNQUFNLFFBQVEsQ0FBQztBQUVsQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsSUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBRXZCOztHQUVHO0FBRUg7SUFBbUMseUNBQXNCO0lBRHpEO1FBQUEscUVBb0JDO1FBakJVLGVBQVMsR0FBRyxHQUFHLENBQUM7O0lBaUIzQixDQUFDO0lBZkMsaUNBQVMsR0FBVCxVQUFVLEtBQW9CO1FBQzVCLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDekMsT0FBTztnQkFDTCxHQUFHLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzFCLEtBQUssRUFB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QUFFO2dCQUNULEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFO2dCQUNwRCxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxRQUFRLEVBQUUseUJBQXlCLEVBQUU7Z0JBQ3hFLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxvQkFBb0IsRUFBRTtnQkFDOUQsSUFBSTthQUNMOztTQUNGLENBQUM7T0FDVyxtQkFBbUIsQ0FrakIvQjtJQUFELDBCQUFDO0NBQUEsQUFsakJELElBa2pCQztTQWxqQlksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbmplY3RhYmxlLFxuICBJbnB1dCxcbiAgRWxlbWVudFJlZixcbiAgT25Jbml0LFxuICBSZW5kZXJlcjIsXG4gIFZpZXdDaGlsZCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wsIE5nRm9ybSwgRm9ybSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbi8vIGltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IE5nYkRhdGVBZGFwdGVyLCBOZ2JEYXRlUGFyc2VyRm9ybWF0dGVyLCBOZ2JEYXRlU3RydWN0LCBOZ2JEYXRlcGlja2VySTE4biB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCAqIGFzIG1vbWVudF8gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IEZpbGwgfSBmcm9tICcuLi8uLi9Nb2RlbHMvZmlsbCc7XG5pbXBvcnQgeyByZWdleFR5cGUgfSBmcm9tICcuLi8uLi91dGlscy9yZWdleCc7XG5pbXBvcnQgeyBDb21wYW55IH0gZnJvbSAnLi4vLi4vTW9kZWxzL2NvbXBhbnknO1xuaW1wb3J0IHsgU3RlcCB9IGZyb20gJy4uLy4uL01vZGVscy9zdGVwJztcbmltcG9ydCB7IENvbW1vbkRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS5zZXJ2aWNlJztcbmNvbnN0IG1vbWVudCA9IG1vbWVudF87XG5cbi8qKlxuICogVGhpcyBTZXJ2aWNlIGhhbmRsZXMgaG93IHRoZSBkYXRlIGlzIHJlcHJlc2VudGVkIGluIHNjcmlwdHMgaS5lLiBuZ01vZGVsLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ3VzdG9tQWRhcHRlciBleHRlbmRzIE5nYkRhdGVBZGFwdGVyPHN0cmluZz4ge1xuXG4gIHJlYWRvbmx5IERFTElNSVRFUiA9ICcvJztcblxuICBmcm9tTW9kZWwodmFsdWU6IHN0cmluZyB8IG51bGwpOiBOZ2JEYXRlU3RydWN0IHwgbnVsbCB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zdCBkYXRlID0gdmFsdWUuc3BsaXQodGhpcy5ERUxJTUlURVIpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF5OiBwYXJzZUludChkYXRlWzBdLCAxMCksXG4gICAgICAgIG1vbnRoOiBwYXJzZUludChkYXRlWzFdLCAxMCksXG4gICAgICAgIHllYXI6IHBhcnNlSW50KGRhdGVbMl0sIDEwKVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0b01vZGVsKGRhdGU6IE5nYkRhdGVTdHJ1Y3QgfCBudWxsKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIGRhdGUgPyAoZGF0ZS5kYXkgPCAxMCA/IDAgKyBkYXRlLmRheSA6IGRhdGUuZGF5KSArIHRoaXMuREVMSU1JVEVSICsgKGRhdGUubW9udGggPCAxMCA/IDAgKyBkYXRlLm1vbnRoIDogZGF0ZS5tb250aCkgKyB0aGlzLkRFTElNSVRFUiArIGRhdGUueWVhciA6ICcnO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBTZXJ2aWNlIGhhbmRsZXMgaG93IHRoZSBkYXRlIGlzIHJlbmRlcmVkIGFuZCBwYXJzZWQgZnJvbSBrZXlib2FyZCBpLmUuIGluIHRoZSBib3VuZCBpbnB1dCBmaWVsZC5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEN1c3RvbURhdGVQYXJzZXJGb3JtYXR0ZXIgZXh0ZW5kcyBOZ2JEYXRlUGFyc2VyRm9ybWF0dGVyIHtcblxuICByZWFkb25seSBERUxJTUlURVIgPSAnLyc7XG5cbiAgcGFyc2UodmFsdWU6IHN0cmluZyk6IE5nYkRhdGVTdHJ1Y3QgfCBudWxsIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGNvbnN0IGRhdGUgPSB2YWx1ZS5zcGxpdCh0aGlzLkRFTElNSVRFUik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXk6IHBhcnNlSW50KGRhdGVbMF0sIDEwKSxcbiAgICAgICAgbW9udGg6IHBhcnNlSW50KGRhdGVbMV0sIDEwKSxcbiAgICAgICAgeWVhcjogcGFyc2VJbnQoZGF0ZVsyXSwgMTApXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZvcm1hdChkYXRlOiBOZ2JEYXRlU3RydWN0IHwgbnVsbCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRhdGUgPyAoZGF0ZS5kYXkgPCAxMCA/ICcwJyArIGRhdGUuZGF5IDogZGF0ZS5kYXkpICsgdGhpcy5ERUxJTUlURVIgKyAoZGF0ZS5tb250aCA8IDEwID8gJzAnICsgZGF0ZS5tb250aCA6IGRhdGUubW9udGgpICsgdGhpcy5ERUxJTUlURVIgKyBkYXRlLnllYXIgOiAnJztcbiAgfVxufVxuXG5jb25zdCBJMThOX1ZBTFVFUyA9IHtcbiAgJ2VzJzoge1xuICAgIHdlZWtkYXlzOiBbJ0x1JywgJ01hJywgJ01pJywgJ0p1JywgJ1ZpJywgJ1NhJywgJ0RvJ10sXG4gICAgbW9udGhzOiBbJ0VuZScsICdGZWInLCAnTWFyJywgJ0FicicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBZ28nLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGljJ10sXG4gICAgd2Vla0xhYmVsOiAnc2VtJ1xuICB9XG4gIC8vIG90aGVyIGxhbmd1YWdlcyB5b3Ugd291bGQgc3VwcG9ydFxufTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEkxOG4ge1xuICBsYW5ndWFnZSA9ICdlcyc7XG59XG5cbi8vIERlZmluZSBjdXN0b20gc2VydmljZSBwcm92aWRpbmcgdGhlIG1vbnRocyBhbmQgd2Vla2RheXMgdHJhbnNsYXRpb25zXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ3VzdG9tRGF0ZXBpY2tlckkxOG4gZXh0ZW5kcyBOZ2JEYXRlcGlja2VySTE4biB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2kxOG46IEkxOG4pIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgZ2V0V2Vla2RheUxhYmVsKHdlZWtkYXk6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIEkxOE5fVkFMVUVTW3RoaXMuX2kxOG4ubGFuZ3VhZ2VdLndlZWtkYXlzW3dlZWtkYXkgLSAxXTtcbiAgfVxuXG4gIGdldFdlZWtMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBJMThOX1ZBTFVFU1t0aGlzLl9pMThuLmxhbmd1YWdlXS53ZWVrTGFiZWw7XG4gIH1cblxuICBnZXRNb250aFNob3J0TmFtZShtb250aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSTE4Tl9WQUxVRVNbdGhpcy5faTE4bi5sYW5ndWFnZV0ubW9udGhzW21vbnRoIC0gMV07XG4gIH1cblxuICBnZXRNb250aEZ1bGxOYW1lKG1vbnRoOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldE1vbnRoU2hvcnROYW1lKG1vbnRoKTtcbiAgfVxuXG4gIGdldERheUFyaWFMYWJlbChkYXRlOiBOZ2JEYXRlU3RydWN0KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7ZGF0ZS5kYXl9LSR7ZGF0ZS5tb250aH0tJHtkYXRlLnllYXJ9YDtcbiAgfVxuXG4gIGdldFdlZWtkYXlTaG9ydE5hbWUod2Vla2RheTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSTE4Tl9WQUxVRVNbdGhpcy5faTE4bi5sYW5ndWFnZV0ud2Vla2RheXNbd2Vla2RheSAtIDFdO1xuICB9O1xufVxuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1Gb3JtQXVyb3JhJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tYXVyb3JhLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS1hdXJvcmEuY29tcG9uZW50LmNzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7IHByb3ZpZGU6IE5nYkRhdGVBZGFwdGVyLCB1c2VDbGFzczogQ3VzdG9tQWRhcHRlciB9LFxuICAgIHsgcHJvdmlkZTogTmdiRGF0ZVBhcnNlckZvcm1hdHRlciwgdXNlQ2xhc3M6IEN1c3RvbURhdGVQYXJzZXJGb3JtYXR0ZXIgfSxcbiAgICB7IHByb3ZpZGU6IE5nYkRhdGVwaWNrZXJJMThuLCB1c2VDbGFzczogQ3VzdG9tRGF0ZXBpY2tlckkxOG4gfSxcbiAgICBJMThuXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRm9ybUF1cm9yYUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcblxuICBASW5wdXQoKSBkYXRhQ2xhc3NDc3M6IGFueTtcbiAgQElucHV0KCkgZGF0YUZvcm06IGFueTtcbiAgQElucHV0KCkgY2xpY2tTdWJtaXQ6IGFueTtcbiAgQElucHV0KCkgZGF0YVJlbG9hZEZvcm06IGFueTtcbiAgQElucHV0KCkgd2VsY29tZVRpdGxlOiBhbnk7XG4gIEBJbnB1dCgpIHdlbGNvbWVEZXNjcmlwdGlvbjogYW55O1xuICBASW5wdXQoKSB1cmxQZGY6IHN0cmluZztcbiAgQElucHV0KCkgbmFtZUNvbXBhbnk6IHN0cmluZztcbiAgQElucHV0KCkgc2NoZWR1bGU6IHN0cmluZztcbiAgQElucHV0KCkgaXNTaW1wbGVGbG93OiBib29sZWFuO1xuICBASW5wdXQoKSBzdGVwczogU3RlcFtdO1xuICBAVmlld0NoaWxkKCdmb3JtRHluYW1pYycsIHsgc3RhdGljOiB0cnVlIH0pIGZvcm1EeW5hbWljOiBOZ0Zvcm07XG4gIEBPdXRwdXQoKSByZXNwb25zZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgc3VtbWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSB2aWV3QXV0aERhdGEgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgdGlwb2RvY051bURvYzogYm9vbGVhbiA9IGZhbHNlO1xuICBjb3VudFN1Ym1pdCA9IDA7XG4gIHdhdGNoVmFsaWQgPSBmYWxzZTtcbiAgd2F0Y2hSZXF1aXJlZCA9IGZhbHNlO1xuICBjYXB0Y2hhVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdG9kYXkgPSBtb21lbnQobmV3IERhdGUoKSk7XG4gIG1heFllYXIgPSB0aGlzLnRvZGF5LnllYXIoKTtcbiAgbWluWWVhciA9IHRoaXMudG9kYXkueWVhcigpIC0gODI7XG4gIG1pbkRhdGUgPSB0aGlzLm1pblllYXIudG9TdHJpbmcoKSArICctJyArIHRoaXMudG9kYXkubW9udGgoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJykgKyAnLScgKyB0aGlzLnRvZGF5LmRhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7Ly8ge3llYXI6IHRoaXMubWluWWVhciwgbW9udGg6IHRoaXMudG9kYXkubW9udGgoKSwgZGF5OiB0aGlzLnRvZGF5LmRhdGUoKX07XG4gIG1heERhdGUgPSB0aGlzLm1heFllYXIudG9TdHJpbmcoKSArICctJyArICh0aGlzLnRvZGF5Lm1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJykgKyAnLScgKyB0aGlzLnRvZGF5LmRhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7Ly8ge3llYXI6IHRoaXMubWF4WWVhciwgbW9udGg6IHRoaXMudG9kYXkubW9udGgoKSArIDEsIGRheTogdGhpcy50b2RheS5kYXRlKCl9O1xuICByZWNoYXJnZTogYm9vbGVhbiA9IGZhbHNlO1xuICBpbmRpY2F0aXZvOiBzdHJpbmcgPSBcIjU3XCI7XG4gIGZpbGxkYXRhOiBGaWxsO1xuICBkZWZhdWx0RG9jVHlwZTogc3RyaW5nID0gXCJDw6lkdWxhIGRlIGNpdWRhZGFuw61hXCI7XG4gIHBhdHRlcm5Ob3RWYWxpZERjdG86IGJvb2xlYW4gPSBmYWxzZTtcbiAgcGF0dGVybk5vdFZhbGlkQ2VsOiBib29sZWFuID0gZmFsc2U7XG5cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGE6IENvbW1vbkRhdGFTZXJ2aWNlLCBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubWluRGF0ZSA9IG5ldyBEYXRlKHRoaXMubWluRGF0ZSkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnN0YXJ0Q29tcG9uZW50KCk7XG4gICAgfSwgMjAwMCk7XG4gIH1cblxuXG4gIHN0YXJ0Q29tcG9uZW50KCkge1xuICAgIC8vb3JkZW5hIGxvcyBjYW1wb3NcbiAgICBpZiAodGhpcy5kYXRhRm9ybSAhPSBudWxsICYmIHRoaXMuZGF0YUZvcm0uZm9ybVF1ZXN0aW9ucyAhPSB1bmRlZmluZWQpIHtcbiAgICAgIC8vU2FtZSByb3cgZmllbGRzXG4gICAgICB0aGlzLnRpcG9kb2NOdW1Eb2MgPSAodGhpcy5kYXRhRm9ybS5mb3JtUXVlc3Rpb25zLnNvbWUocXVlc3Rpb24gPT4gcXVlc3Rpb24ucXVlc3Rpb24udmFsdWUgPT09IFwidGlwb0RvY1wiKSAmJiB0aGlzLmRhdGFGb3JtLmZvcm1RdWVzdGlvbnMuc29tZShxdWVzdGlvbiA9PiBxdWVzdGlvbi5xdWVzdGlvbi52YWx1ZSA9PT0gXCJudW1lcm9Eb2NcIikpID8gdHJ1ZSA6IGZhbHNlO1xuXG4gICAgICB0aGlzLmRhdGFGb3JtLmZvcm1RdWVzdGlvbnMgPSB0aGlzLmRhdGFGb3JtLmZvcm1RdWVzdGlvbnMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICByZXR1cm4gYS5vcmRlciAtIGIub3JkZXI7XG4gICAgICB9KTtcbiAgICAgIGxldCBleGlzdGNhcHRjaGEgPSB0aGlzLmRhdGFGb3JtLmZvcm1RdWVzdGlvbnMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnF1ZXN0aW9uLnF1ZXN0aW9uVHlwZS5pZCA9PSA2KTtcblxuICAgICAgaWYgKGV4aXN0Y2FwdGNoYS5sZW5ndGggPT0gMCkge1xuICAgICAgICB0aGlzLmNhcHRjaGFWYWxpZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmRhdGFGb3JtLmZvcm1RdWVzdGlvbnMpIHtcbiAgICAgICAgaWYgKGl0ZW0ucXVlc3Rpb24ubWF4bGVuZ3RoID09IG51bGwgfHwgaXRlbS5xdWVzdGlvbi5tYXhsZW5ndGggPT0gdW5kZWZpbmVkIHx8IGl0ZW0ucXVlc3Rpb24ubWF4bGVuZ3RoID09IDApIHtcbiAgICAgICAgICBpdGVtLnF1ZXN0aW9uLm1heGxlbmd0aCA9IDUyNDI4ODsgLy9kZWZhdWx0dmFsdWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpdGVtLnF1ZXN0aW9uLm1pbkxlbmd0aCA9PSBudWxsIHx8IGl0ZW0ucXVlc3Rpb24ubWluTGVuZ3RoID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGl0ZW0ucXVlc3Rpb24ubWluTGVuZ3RoID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGF0YVJlbG9hZEZvcm0uZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICB0aGlzLmZpbGxkYXRhID0gZWxlbWVudDtcblxuICAgICAgICAgIGlmICgoaXRlbS5xdWVzdGlvbi5xdWVzdGlvblR5cGUuaWQgPT09IDIgfHwgaXRlbS5xdWVzdGlvbi5xdWVzdGlvblR5cGUuaWQgPT09IDEgfHxcbiAgICAgICAgICAgIGl0ZW0ucXVlc3Rpb24ucXVlc3Rpb25UeXBlLmlkID09PSAzKSAmJiAodGhpcy5maWxsZGF0YS5kYXRhICE9PSBudWxsICYmXG4gICAgICAgICAgICAgIHRoaXMuZmlsbGRhdGEuZGF0YSAhPT0gdW5kZWZpbmVkKSAmJiBpdGVtLnF1ZXN0aW9uLmlkID09PSB0aGlzLmZpbGxkYXRhLmlkKSB7XG4gICAgICAgICAgICBpdGVtLnF1ZXN0aW9uLnJlZ2lzdHJlZCA9IHRoaXMuZmlsbGRhdGEuZGF0YTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChpdGVtLnF1ZXN0aW9uLnJlZ2lzdHJlZCA9PSBudWxsIHx8IGl0ZW0ucXVlc3Rpb24ubWluTGVuZ3RoID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGl0ZW0ucXVlc3Rpb24ucmVnaXN0cmVkID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByYW5nZSA9IG5ldyBGb3JtR3JvdXAoe1xuICAgIHN0YXJ0OiBuZXcgRm9ybUNvbnRyb2woKSxcbiAgICBlbmQ6IG5ldyBGb3JtQ29udHJvbCgpLFxuICB9KTtcblxuICByZXNvbHZlZENhcHRjaGEoY2FwdGNoYVJlc3BvbnNlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmNhcHRjaGFWYWxpZCA9IHRydWVcbiAgICBpZiAoIXRoaXMuZm9ybUR5bmFtaWMuZm9ybS52YWx1ZS5jYXB0Y2hhKSB7XG4gICAgICB0aGlzLmZvcm1EeW5hbWljLmNvbnRyb2xzLmNhcHRjaGEuc2V0VmFsdWUoY2FwdGNoYVJlc3BvbnNlKVxuICAgICAgdGhpcy5mb3JtRHluYW1pYy5mb3JtLnZhbHVlLmNhcHRjaGEgPSBjYXB0Y2hhUmVzcG9uc2VcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYnRuSW5nXCIpLnN0eWxlLm9wYWNpdHkgPSAhdGhpcy5mb3JtRHluYW1pYy52YWxpZCA/IFwiMC42NVwiIDogXCIxXCI7XG4gICAgfVxuICB9XG5cbiAgLy9Gb3Jtc1xuICAvL01ldG9kbyBwYXJhIGV2aXRhciBlbCByZW5kZXIgZGUgbG9zIGl0ZW1zIGRlbCBmb3JcbiAgcHVibGljIHRyYWNrQnlJbmRleChpbmRleDogbnVtYmVyLCBvYmo6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgb25DaGFuZ2VWYWxpZFBhdHRlcihldmVudCwgcXVlc3Rpb24pIHtcbiAgICBpZiAocXVlc3Rpb24ucGF0dGVybiAhPSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgICBsZXQga2V5dmFsaWQgPSBbOCwgMzIsIDM3LCAzOCwgMzksIDQwLCA0NiwgOV07XG4gICAgICAvL2RpZmVyZW50ZSBkZSBCYWNrcHNhY2VcbiAgICAgIC8vc2UgZGVqYSBjYXRjaCBwb3IgZXJyb3Igbm8gY29udHJvbGFibGUgZW4gb3RybyB0aWVtcG8gZGUgZWplY3VjaW9uXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIWtleXZhbGlkLmluY2x1ZGVzKGV2ZW50LmtleUNvZGUpKSB7XG4gICAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHF1ZXN0aW9uLnBhdHRlcm4pO1xuICAgICAgICAgIHZhbGlkID0gcmVnZXgudGVzdChldmVudC5rZXkpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikgeyB9XG5cbiAgICAgIHJldHVybiB2YWxpZDtcbiAgICB9XG4gICAgaWYgKHF1ZXN0aW9uLnF1ZXN0aW9uVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAocXVlc3Rpb24ucXVlc3Rpb25UeXBlLmRlc2NyaXB0aW9uID09PSAnTnVtYmVyJykge1xuICAgICAgICBpZiAocXVlc3Rpb24udmFsdWUgPT09ICdudW1lcm9Eb2MnKSB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0ZU51bWVyb0RvY3VtZW50byh0aGlzLmZvcm1EeW5hbWljLmNvbnRyb2xzW1wibnVtZXJvRG9jXCJdLnZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHF1ZXN0aW9uLnZhbHVlID09PSAnY2VsdWxhcicpIHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlQ2VsdWxhcih0aGlzLmZvcm1EeW5hbWljLmNvbnRyb2xzW1wiY2VsdWxhclwiXS52YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuXG4gICAgICB9XG4gICAgfVxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY2hhclwiICsgcXVlc3Rpb24udmFsdWUpLnNldEF0dHJpYnV0ZShcImhpZGRlblwiLCBcInRydWVcIik7XG5cbiAgICAvL2lmIHRlbXBvcmFsIG1pZW50cmFzIHNlIG1pZ3JhbiB0b2RvcyBsb3MgdGlwb3MgZGUgY2FtcG9zIGFsIGZvcmVhY2hcbiAgICBpZiAocXVlc3Rpb24ucXVlc3Rpb25UeXBlLmlkICE9IDExICYmIHF1ZXN0aW9uLnF1ZXN0aW9uVHlwZS5pZCAhPSA3KSB7XG4gICAgICBpZiAodGhpcy52YWxpZE1pbkxlbmd0aCh0aGlzLmZvcm1EeW5hbWljLCBxdWVzdGlvbikpIHtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocXVlc3Rpb24udmFsdWUpLnN0eWxlLmJvcmRlckNvbG9yID0gXCIjRkYwMDAwXCI7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWxcIiArIHF1ZXN0aW9uLnZhbHVlKS5yZW1vdmVBdHRyaWJ1dGUoXCJoaWRkZW5cIik7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocXVlc3Rpb24udmFsdWUpLnN0eWxlLmJvcmRlckNvbG9yID0gXCIjRTRFNEU0XCI7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWxcIiArIHF1ZXN0aW9uLnZhbHVlKS5zZXRBdHRyaWJ1dGUoXCJoaWRkZW5cIiwgXCJ0cnVlXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudmFsaWRNYXhMZW5ndGgodGhpcy5mb3JtRHluYW1pYywgcXVlc3Rpb24pKSB7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHF1ZXN0aW9uLnZhbHVlKS5zdHlsZS5ib3JkZXJDb2xvciA9IFwiI0ZGMDAwMFwiO1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm14bFwiICsgcXVlc3Rpb24udmFsdWUpLnJlbW92ZUF0dHJpYnV0ZShcImhpZGRlblwiKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChxdWVzdGlvbi52YWx1ZSkuc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiNFNEU0RTRcIjtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJteGxcIiArIHF1ZXN0aW9uLnZhbHVlKS5zZXRBdHRyaWJ1dGUoXCJoaWRkZW5cIiwgXCJ0cnVlXCIpO1xuICAgICAgfVxuICAgIH1cblxuXG4gICAgdGhpcy5kYXRhRm9ybS5mb3JtUXVlc3Rpb25zLmZvckVhY2goZm9ybVF1ZXN0aW9uID0+IHtcbiAgICAgIHN3aXRjaCAoZm9ybVF1ZXN0aW9uLnF1ZXN0aW9uLnF1ZXN0aW9uVHlwZS5pZCkge1xuICAgICAgICAvL3NlIHZhbGlkYSAgY2FtcG8gZGUgdGlwbyBjYWxlbmRhcmlvXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBpZiAocXVlc3Rpb24ucXVlc3Rpb25UeXBlLmlkID09IDcpXG4gICAgICAgICAgICB0aGlzLmNhbGVuZGFyUnVsZXNWYWxpZGF0ZShmb3JtUXVlc3Rpb24pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAvL3NlIHZhbGlkYSAgY2FtcG8gZGUgdGlwbyBlbWFpbFxuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIGlmIChxdWVzdGlvbi5xdWVzdGlvblR5cGUuaWQgPT0gMTEpXG4gICAgICAgICAgICB0aGlzLmVtYWlsUnVsZXNWYWxpZGF0ZShmb3JtUXVlc3Rpb24pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJidG5JbmdcIikuc3R5bGUub3BhY2l0eSA9ICF0aGlzLmZvcm1EeW5hbWljLnZhbGlkID8gXCIwLjY1XCIgOiBcIjFcIjtcbiAgfVxuXG4gIHZhbGlkT25seVRleHQoZXZlbnQpIHtcbiAgICBsZXQgcmVnZXggPSAvXlthLXpBLVpcXHUwMEMwLVxcdTAxN0ZdKyQvZztcbiAgICBpZiAoZXZlbnQuY2hhckNvZGUgPT0gMzIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBsZXQgdmFsaWQgPSByZWdleC50ZXN0KGV2ZW50LmtleSk7XG5cbiAgICByZXR1cm4gdmFsaWQ7XG4gIH1cblxuICB2YWxpZERhdGUoZXZlbnQpIHtcbiAgICAvKmxldCBwYXR0ZXJuID0gLyg/OjBbMS05XXxbMTJdWzAtOV18M1swMV0pXFwvKD86MFsxLTldfDFbMC0yXSlcXC8oPzoxOXwyMClbMC05XXsyfS87XG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHBhdHRlcm4pO1xuICAgIHZhbGlkID0gcmVnZXgudGVzdChldmVudC5rZXkpO1xuICAgICovXG4gICAgY29uc3QgbWF0Y2hlcyA9IFN0cmluZyhldmVudC5rZXkpLm1hdGNoKHJlZ2V4VHlwZS5kYXRlLmV4cCk7XG4gICAgbGV0IHZhbGlkID0gdHJ1ZVxuICAgIGlmIChtYXRjaGVzID09PSBudWxsKVxuICAgICAgdmFsaWQgPSBmYWxzZTtcblxuICAgIC8vIGFsZXJ0KHZhbGlkKTtcblxuICAgIHJldHVybiB2YWxpZDtcblxuICB9XG5cbiAgb25DaGFuZ2VWYWxpZERhdGUoZXZlbnQpIHtcblxuICAgIC8vbGV0IHBhdHRlcm4gPSAvKD86MFsxLTldfDFbMC0yXSlcXC8oPzowWzEtOV18WzEyXVswLTldfDNbMDFdKVxcLyg/OjE5fDIwKVswLTldezJ9LztcbiAgICBsZXQgZGF0ZU4gPSAvWzAtOV18XFwvL1xuICAgIGxldCB2YWxpZCA9IHRydWVcbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoZGF0ZU4pO1xuICAgIHZhbGlkID0gcmVnZXgudGVzdChldmVudC5rZXkpO1xuICAgIHJldHVybiB2YWxpZDtcblxuICB9XG5cbiAgcmVkaXJldG91dHNpZGUoZXZlbnQsIHF1ZXN0aW9uKSB7XG4gICAgLy9zZSBkZWphIGNhdGNoIHBvciBlcnJvciBubyBjb250cm9sYWJsZSBlbiBvdHJvIHRpZW1wbyBkZSBlamVjdWNpb25cbiAgICB0cnkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHdpbmRvdy5vcGVuKHF1ZXN0aW9uLnZhbHVlLCBcIl9ibGFua1wiKTtcbiAgICB9IGNhdGNoIChlcnJvcikgeyB9XG4gIH1cblxuICAvKipcbiAgICogRGlzcGF0Y2ggc3VibWl0IGV2ZW50IGZvciB2YWxpZGF0aW9ucyBleGlzdHNcbiAgICogQHBhcmFtIGNoYW5nZSBcbiAgICovXG4gIG5nT25DaGFuZ2VzKGNoYW5nZTogU2ltcGxlQ2hhbmdlcykge1xuICAgIHRoaXMuY291bnRTdWJtaXQrK1xuICB9XG4gIC8vb25TdWJtaXQoZm9ybTogTmdGb3JtKSB7XG4gIG9uU3VibWl0KCkge1xuICAgIGxldCBmb3JtID0gdGhpcy5mb3JtRHluYW1pYztcbiAgICB0aGlzLndhdGNoVmFsaWQgPSB0cnVlO1xuICAgIHRoaXMud2F0Y2hSZXF1aXJlZCA9IHRydWU7XG5cbiAgICBpZiAoZm9ybS52YWxpZCkge1xuICAgICAgaWYgKCF0aGlzLnZhbGlkUnVsZXNGaWVsZHMoZm9ybS5jb250cm9sc1tcIm51bWVyb0RvY1wiXS52YWx1ZS50b1N0cmluZygpLCBmb3JtLmNvbnRyb2xzW1wiY2VsdWxhclwiXS52YWx1ZS50b1N0cmluZygpLCBmb3JtLmNvbnRyb2xzW1wiZW1haWxcIl0udmFsdWUpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmFsaWRNaW5sZW5naHRBbGxRdWVzdGlvbnMoZm9ybS52YWx1ZSkgJiYgdGhpcy52YWxpZE1heExlbmd0aEFsbFF1ZXN0aW9ucyhmb3JtLnZhbHVlKSAmJiBmb3JtLnZhbGlkKSB7XG4gICAgICBpZiAodGhpcy5kYXRhRm9ybS51cmxTZW5kICE9IFwiXCIgJiYgdGhpcy5jYXB0Y2hhVmFsaWQpIHtcbiAgICAgICAgdGhpcy5odHRwLnBvc3Q8YW55Pih0aGlzLmRhdGFGb3JtLnVybFNlbmQsIGZvcm0udmFsdWUpLnN1YnNjcmliZSgocmVzcCkgPT4gdGhpcy5yZXNwb25zZS5lbWl0KHJlc3ApKTtcbiAgICAgIH0gZWxzZSBpZiAoZm9ybS52YWxpZCAmJiB0aGlzLmNhcHRjaGFWYWxpZCkge1xuICAgICAgICB0aGlzLnN1bW1pdC5lbWl0KGZvcm0udmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmluZFBhcmFtQm9vbGVhbihwYXJhbXM6IGFueSwgaWRQYXJhbTogbnVtYmVyKSB7XG4gICAgbGV0IHNob3dEZXNjcmlwdGlvblBhcmFtID0gcGFyYW1zLmZpbmQoKHgpID0+IHguaWQgPT0gaWRQYXJhbSk7XG4gICAgcmV0dXJuIHNob3dEZXNjcmlwdGlvblBhcmFtICE9IG51bGwgJiYgc2hvd0Rlc2NyaXB0aW9uUGFyYW0udmFsdWUgPT0gXCJ0cnVlXCI7XG4gIH1cblxuICB2YWxpZFJ1bGVzRmllbGRzKG51bWVyb0RvYzogU3RyaW5nLCBudW1lcm9DZWw6IFN0cmluZywgZW1haWw6IFN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIFZhbGlkYWNpb25lcyBwYXJhIGNlbHVsYXIgZW4gY2FzbyBkZSBpbmRpY2F0aXZvIGVuIENvbG9tYmlhXG4gICAgbGV0IGNlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY2hhcmNlbHVsYXJcIik7XG4gICAgbGV0IGRvYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY2hhcm51bWVyb0RvY1wiKTtcbiAgICBsZXQgdmFsT2sgPSB0cnVlO1xuICAgIGlmICh0aGlzLmluZGljYXRpdm8gPT0gXCIrNTdcIiB8fCB0aGlzLmluZGljYXRpdm8gPT0gXCI1N1wiKSB7XG4gICAgICBsZXQgc3RyaW5nT3JkZW5hZG8gPSB0aGlzLm9yZGVyU3RyaW5nKG51bWVyb0RvYyk7XG4gICAgICBpZiAodGhpcy5uYW1lQ29tcGFueS50b1VwcGVyQ2FzZSgpICE9PSAnQ0xBUk8nKSB7Ly9jbGFybyBhY2VwdGEgbnJvIGNvbnNlY3V0aXZvc1xuICAgICAgICBpZiAobnVtZXJvRG9jID09IHN0cmluZ09yZGVuYWRvKSB7XG4gICAgICAgICAgZG9jLnN0eWxlLmJvcmRlckNvbG9yID0gXCIjRkYwMDAwXCI7XG4gICAgICAgICAgZG9jLnJlbW92ZUF0dHJpYnV0ZShcImhpZGRlblwiKTtcbiAgICAgICAgICBkb2MudGV4dENvbnRlbnQgPSBcIkVsIG51bWVybyBkb2N1bWVudG8gTm8gZGViZSBjb250ZW5lciBjYXJhY3RlcmVzIGNvbnNlY3V0aXZvc1wiO1xuICAgICAgICAgIHZhbE9rID0gZmFsc2U7XG5cbiAgICAgICAgICAvL3RoaXMubXNnRXJyb3JDYW1wbyA9IFwiRWwgbnVtZXJvIGRvY3VtZW50byBObyBkZWJlIGNvbnRlbmVyIGNhcmFjdGVyZXMgY29uc2VjdXRpdm9zXCI7XG4gICAgICAgICAgLy9yZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChudW1lcm9DZWwuc3Vic3RyaW5nKDAsIDEpICE9IFwiM1wiKSB7XG4gICAgICAgIGNlbC5zdHlsZS5ib3JkZXJDb2xvciA9IFwiI0ZGMDAwMFwiO1xuICAgICAgICBjZWwucmVtb3ZlQXR0cmlidXRlKFwiaGlkZGVuXCIpO1xuICAgICAgICBjZWwudGV4dENvbnRlbnQgPSBcIkVsIHByaW1lciBjYXLDoWN0ZXIgZGVsIGNlbHVsYXIgZGViZSBzZXIgM1wiO1xuICAgICAgICB2YWxPayA9IGZhbHNlO1xuXG4gICAgICAgIC8vdGhpcy5tc2dFcnJvckNhbXBvID0gXCJFbCBwcmltZXIgY2Fyw6FjdGVyIGRlbCBjZWx1bGFyIGRlYmUgc2VyIDNcIjtcbiAgICAgICAgLy9yZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvKlxuICAgICAgaWYgKHBhcnNlSW50KG51bWVyb0NlbC5zdWJzdHJpbmcoMCwgMykpID4gMzUwKSB7XG4gICAgICAgIGNlbC5zdHlsZS5ib3JkZXJDb2xvciA9IFwiI0ZGMDAwMFwiO1xuICAgICAgICBjZWwucmVtb3ZlQXR0cmlidXRlKFwiaGlkZGVuXCIpO1xuICAgICAgICBjZWwudGV4dENvbnRlbnQgPSBcIkVsIHByZWZpam8gZGVsIGNlbHVsYXIgbm8gZGViZSBzZXIgbWF5b3IgYSAzNTBcIjtcbiAgICAgICAgdmFsT2sgPSBmYWxzZTtcbiAgICAgICAgLy90aGlzLm1zZ0Vycm9yQ2FtcG8gPSBcIkVsIHByZWZpam8gZGVsIGNlbHVsYXIgbm8gZGViZSBzZXIgbWF5b3IgYSAzNTBcIjtcbiAgICAgICAgLy9yZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAqL1xuICAgICAgLy9FbiBjYXNvIGRlIHF1ZSBlbCBuw7ptZXJvIHNlIHJlcGl0YSwgZWplbXBsbyAzMzMzMzMzM1xuICAgICAgbGV0IGxpc3RudW1iZXIgPSBudW1lcm9Eb2Muc3Vic3RyaW5nKDAsIDEpO1xuICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IG51bWVyb0RvYy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgbGlzdG51bWJlciA9IGxpc3RudW1iZXIgKyBudW1lcm9Eb2Muc3Vic3RyaW5nKDAsIDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAobnVtZXJvRG9jID09IGxpc3RudW1iZXIpIHtcbiAgICAgICAgZG9jLnN0eWxlLmJvcmRlckNvbG9yID0gXCIjRkYwMDAwXCI7XG4gICAgICAgIGRvYy5yZW1vdmVBdHRyaWJ1dGUoXCJoaWRkZW5cIik7XG4gICAgICAgIGRvYy50ZXh0Q29udGVudCA9IFwiQ2FyYWN0ZXJlcyBudW3DqXJpY29zIG5vIHNlIHB1ZWRlbiByZXBldGlyc2UgZGUgbWFuZXJhIGNvbnRpbnVhIFwiO1xuICAgICAgICB2YWxPayA9IGZhbHNlO1xuXG4gICAgICAgIC8vdGhpcy5tc2dFcnJvckNhbXBvID0gXCJDYXJhY3RlcmVzIG51bcOpcmljb3Mgbm8gc2UgcHVlZGVuIHJlcGV0aXJzZSBkZSBtYW5lcmEgY29udGludWEgXCI7XG4gICAgICAgIC8vcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlTnVtZXJvRG9jdW1lbnRvKG51bWVyb0RvYykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlQ2VsdWxhcihudW1lcm9DZWwpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuXG4gICAgICAvLyBFbiBjYXNvIGRlIHF1ZSBlbCBuw7ptZXJvIHNlIHJlcGl0YSwgZWplbXBsbyAzMzMzMzMzM1xuICAgICAgbGV0IGFycmF5UGhvbmVSZXBlYXQgPSBBcnJheS5mcm9tKFN0cmluZyhudW1lcm9DZWwpLCBOdW1iZXIpO1xuICAgICAgbGV0IGFycmF5UGhvbmVPdXRSZXBlYXQgPSBbLi4ubmV3IFNldChhcnJheVBob25lUmVwZWF0KV07XG4gICAgICBpZiAoYXJyYXlQaG9uZU91dFJlcGVhdC5sZW5ndGggPT0gMSkge1xuICAgICAgICBjZWwuc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiNGRjAwMDBcIjtcbiAgICAgICAgY2VsLnJlbW92ZUF0dHJpYnV0ZShcImhpZGRlblwiKTtcbiAgICAgICAgY2VsLnRleHRDb250ZW50ID0gXCJFbCBuw7ptZXJvIHF1ZSBpbmdyZXNhIG5vIGVzIHZhbGlkb1wiO1xuICAgICAgICB2YWxPayA9IGZhbHNlO1xuICAgICAgICAvL3RoaXMubXNnRXJyb3JDYW1wbyA9IFwiRWwgbsO6bWVybyBxdWUgaW5ncmVzYSBubyBlcyB2YWxpZG9cIjtcbiAgICAgICAgLy9yZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmluZGljYXRpdm8gPT0gXCIrNTkzXCIgfHwgdGhpcy5pbmRpY2F0aXZvID09IFwiNTkzXCIpIHtcbiAgICAgIGlmIChudW1lcm9DZWwuc3Vic3RyaW5nKDAsIDEpICE9IFwiOVwiKSB7XG4gICAgICAgIGNlbC5zdHlsZS5ib3JkZXJDb2xvciA9IFwiI0ZGMDAwMFwiO1xuICAgICAgICBjZWwucmVtb3ZlQXR0cmlidXRlKFwiaGlkZGVuXCIpO1xuICAgICAgICBjZWwudGV4dENvbnRlbnQgPSBcIkVsIHByaW1lciBjYXLDoWN0ZXIgZGVsIGNlbHVsYXIgZGViZSBzZXIgOVwiO1xuICAgICAgICB2YWxPayA9IGZhbHNlO1xuICAgICAgICAvL3RoaXMubXNnRXJyb3JDYW1wbyA9IFwiRWwgcHJpbWVyIGNhcsOhY3RlciBkZWwgY2VsdWxhciBkZWJlIHNlciA5XCI7XG4gICAgICAgIC8vcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvL3NlIHZhbGlkYW4gbG9zIGNhbXBvcyBwb3IgdGlwbyBkZSBjYW1wbyB5IG5vIHBvciB2YWx1ZVxuICAgIHRoaXMuZGF0YUZvcm0uZm9ybVF1ZXN0aW9ucy5mb3JFYWNoKGZvcm1RdWVzdGlvbiA9PiB7XG4gICAgICBzd2l0Y2ggKGZvcm1RdWVzdGlvbi5xdWVzdGlvbi5xdWVzdGlvblR5cGUuaWQpIHtcbiAgICAgICAgLy9zZSB2YWxpZGEgIGNhbXBvIGRlIHRpcG8gZW1haWxcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICB2YWxPayA9IHRoaXMuZW1haWxSdWxlc1ZhbGlkYXRlKGZvcm1RdWVzdGlvbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdmFsT2s7XG4gIH1cblxuICBvcmRlclN0cmluZyh2YWx1ZTogU3RyaW5nKSB7XG4gICAgbGV0IGFycmF5TnVtYmVyID0gW107XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHZhbHVlLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgYXJyYXlOdW1iZXIucHVzaChwYXJzZUludCh2YWx1ZS5zdWJzdHJpbmcoaW5kZXgsIGluZGV4ICsgMSkpKTtcbiAgICB9XG4gICAgLy9vcmRlbmEgZWwgYXJyYXlcbiAgICBhcnJheU51bWJlci5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYSAtIGI7XG4gICAgfSk7XG4gICAgbGV0IG51bWJlck9yZGVyID0gXCJcIjtcbiAgICBudW1iZXJPcmRlciA9IGFycmF5TnVtYmVyWzBdO1xuICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBhcnJheU51bWJlci5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIG51bWJlck9yZGVyID0gbnVtYmVyT3JkZXIgKyAoYXJyYXlOdW1iZXJbMF0gKyBpbmRleCkudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bWJlck9yZGVyO1xuICB9XG5cbiAgdmFsaWRNaW5sZW5naHRBbGxRdWVzdGlvbnMoZm9ybTogYW55KTogYm9vbGVhbiB7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuZGF0YUZvcm0uZm9ybVF1ZXN0aW9ucykge1xuICAgICAgaWYgKGl0ZW0ucXVlc3Rpb24ucXVlc3Rpb25UeXBlLmlkID09IDEgfHwgaXRlbS5xdWVzdGlvbi5xdWVzdGlvblR5cGUuaWQgPT0gMikge1xuICAgICAgICBsZXQgbWluTGVuZ3RoID0gcGFyc2VJbnQoaXRlbS5xdWVzdGlvbi5taW5MZW5ndGgpO1xuICAgICAgICBsZXQgZm9ybVZhbHVlTGVuZ3RoID0gcGFyc2VJbnQoZm9ybVtpdGVtLnF1ZXN0aW9uLnZhbHVlXS50b1N0cmluZygpLmxlbmd0aCk7XG4gICAgICAgIGlmIChtaW5MZW5ndGggPiAwICYmIGZvcm1WYWx1ZUxlbmd0aCAhPSBtaW5MZW5ndGggJiYgZm9ybVZhbHVlTGVuZ3RoIDwgbWluTGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdmFsaWRNYXhMZW5ndGhBbGxRdWVzdGlvbnMoZm9ybTogYW55KTogYm9vbGVhbiB7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuZGF0YUZvcm0uZm9ybVF1ZXN0aW9ucykge1xuICAgICAgaWYgKGl0ZW0ucXVlc3Rpb24ucXVlc3Rpb25UeXBlLmlkID09IDEgfHwgaXRlbS5xdWVzdGlvbi5xdWVzdGlvblR5cGUuaWQgPT0gMikge1xuICAgICAgICBsZXQgbWF4TGVuZ3RoID0gcGFyc2VJbnQoaXRlbS5xdWVzdGlvbi5tYXhMZW5ndGgpO1xuICAgICAgICBsZXQgZm9ybVZhbHVlTGVuZ3RoID0gcGFyc2VJbnQoZm9ybVtpdGVtLnF1ZXN0aW9uLnZhbHVlXS50b1N0cmluZygpLmxlbmd0aCk7XG4gICAgICAgIGlmIChtYXhMZW5ndGggPiAwICYmIGZvcm1WYWx1ZUxlbmd0aCAhPSBtYXhMZW5ndGggJiYgZm9ybVZhbHVlTGVuZ3RoID4gbWF4TGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdmFsaWRSZXF1aXJlZChmb3JtOiBOZ0Zvcm0sIHF1ZXN0aW9uKTogQm9vbGVhbiB7XG4gICAgLy9zZSBkZWphIGNhdGNoIHBvciBlcnJvciBubyBjb250cm9sYWJsZSBlbiBvdHJvIHRpZW1wbyBkZSBlamVjdWNpb25cbiAgICB0cnkge1xuICAgICAgaWYgKHF1ZXN0aW9uICE9IHVuZGVmaW5lZCAmJiBxdWVzdGlvbi52YWx1ZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZvcm0uY29udHJvbHNbcXVlc3Rpb24udmFsdWVdICE9IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGZvcm0uY29udHJvbHNbcXVlc3Rpb24udmFsdWVdLmVycm9ycyAhPSBudWxsICYmXG4gICAgICAgICAgZm9ybS5jb250cm9sc1txdWVzdGlvbi52YWx1ZV0uZXJyb3JzLnJlcXVpcmVkXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhbGlkTWluTGVuZ3RoKGZvcm06IE5nRm9ybSwgcXVlc3Rpb24pOiBCb29sZWFuIHtcbiAgICAvL3NlIGRlamEgY2F0Y2ggcG9yIGVycm9yIG5vIGNvbnRyb2xhYmxlIGVuIG90cm8gdGllbXBvIGRlIGVqZWN1Y2lvblxuICAgIHRyeSB7XG4gICAgICBpZiAocXVlc3Rpb24gIT0gdW5kZWZpbmVkICYmIHF1ZXN0aW9uLnZhbHVlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAocXVlc3Rpb24ubWluTGVuZ3RoID4gZm9ybS5jb250cm9sc1txdWVzdGlvbi52YWx1ZV0udmFsdWUudG9Mb2NhbGVTdHJpbmcoKS5sZW5ndGggJiYgcXVlc3Rpb24ubWluTGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhbGlkTWF4TGVuZ3RoKGZvcm06IE5nRm9ybSwgcXVlc3Rpb24pOiBCb29sZWFuIHtcbiAgICAvL3NlIGRlamEgY2F0Y2ggcG9yIGVycm9yIG5vIGNvbnRyb2xhYmxlIGVuIG90cm8gdGllbXBvIGRlIGVqZWN1Y2lvblxuICAgIHRyeSB7XG4gICAgICBpZiAocXVlc3Rpb24gIT0gdW5kZWZpbmVkICYmIHF1ZXN0aW9uLnZhbHVlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAocXVlc3Rpb24ubWF4TGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlmIChxdWVzdGlvbi5tYXhMZW5ndGggKyAxIDw9IGZvcm0uY29udHJvbHNbcXVlc3Rpb24udmFsdWVdLnZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgvXFwuL2csICcnKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5mb3JtRHluYW1pYy5jb250cm9sc1txdWVzdGlvbi52YWx1ZV0uaGFzRXJyb3IoJ2Vycm9yTWF4TGVuZ3RoJykpIHtcbiAgICAgICAgICAgICAgdGhpcy5mb3JtRHluYW1pYy5jb250cm9sc1txdWVzdGlvbi52YWx1ZV0uc2V0RXJyb3JzKHsgJ2Vycm9yTWF4TGVuZ3RoJzogdHJ1ZSB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHR5Y1NlbGVjdGlvbihldmVudCkge1xuICAgIHRoaXMudmlld0F1dGhEYXRhLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb3BlbkxhYmVsVXJsKGV2ZW50LCBxdWVzdGlvbikge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICBsZXQgdHljID0gPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjaGVja1wiICsgcXVlc3Rpb24uaWQpO1xuICAgIHR5Yy5zdHlsZS5jb2xvciA9IFwiI0EzQUQzMlwiO1xuICAgIHdpbmRvdy5vcGVuKHF1ZXN0aW9uLnVybGxhYmVsLCBcIl9ibGFua1wiKTtcbiAgfVxuXG4gIGNhbmNlbGxLZXlwcmVzcygpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZW1haWxSdWxlc1ZhbGlkYXRlKGZvcm1RdWVzdGlvbikge1xuICAgIGxldCB2YWxPayA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBoYXNFcnJvciA9IGZhbHNlO1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZm9ybVF1ZXN0aW9uLnF1ZXN0aW9uLmlkKS5zZXRBdHRyaWJ1dGUoXCJoaWRkZW5cIiwgXCJ0cnVlXCIpO1xuICAgICAgbGV0IGVtbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZvcm1RdWVzdGlvbi5xdWVzdGlvbi5pZCk7XG4gICAgICBsZXQgZW1haWwgPSBmb3JtUXVlc3Rpb24ucXVlc3Rpb24ucmVnaXN0cmVkO1xuICAgICAgaWYgKCFoYXNFcnJvcikge1xuICAgICAgICBpZiAoZm9ybVF1ZXN0aW9uLnF1ZXN0aW9uLnJlcXVpcmVkICYmIChlbWFpbCA9PSBcIlwiIHx8IGVtYWlsID09IHVuZGVmaW5lZCB8fCBlbWFpbCA9PSBudWxsKSkge1xuICAgICAgICAgIGVtbC5zdHlsZS5ib3JkZXJDb2xvciA9IFwiI0ZGMDAwMFwiO1xuICAgICAgICAgIGVtbC50ZXh0Q29udGVudCA9IFwiRWwgY29ycmVjbyBlbMOpY3Ryb25pY28gZXMgcmVxdWVyaWRvXCI7XG4gICAgICAgICAgZW1sLnJlbW92ZUF0dHJpYnV0ZShcImhpZGRlblwiKTtcbiAgICAgICAgICB2YWxPayA9IGZhbHNlO1xuICAgICAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFoYXNFcnJvcikge1xuICAgICAgICBpZiAodGhpcy52YWxpZE1pbkxlbmd0aCh1bmRlZmluZWQsIGZvcm1RdWVzdGlvbi5xdWVzdGlvbikpIHtcbiAgICAgICAgICBlbWwuc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiNGRjAwMDBcIjtcbiAgICAgICAgICBlbWwudGV4dENvbnRlbnQgPSBcIkRlYmUgc2VyIG3DrW5pbW8gZGUgXCIgKyBmb3JtUXVlc3Rpb24ucXVlc3Rpb24ubWluTGVuZ3RoICsgXCIgY2FyYWN0ZXJlc1wiO1xuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZvcm1RdWVzdGlvbi5xdWVzdGlvbi5pZCkucmVtb3ZlQXR0cmlidXRlKFwiaGlkZGVuXCIpO1xuICAgICAgICAgIHZhbE9rID0gZmFsc2U7XG4gICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWhhc0Vycm9yKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbGlkTWF4TGVuZ3RoKHVuZGVmaW5lZCwgZm9ybVF1ZXN0aW9uLnF1ZXN0aW9uKSkge1xuICAgICAgICAgIGVtbC5zdHlsZS5ib3JkZXJDb2xvciA9IFwiI0ZGMDAwMFwiO1xuICAgICAgICAgIGVtbC50ZXh0Q29udGVudCA9IFwiRGViZSBzZXIgbWF4aW1vIGRlIFwiICsgZm9ybVF1ZXN0aW9uLnF1ZXN0aW9uLm1heExlbmd0aCArIFwiIGNhcmFjdGVyZXNcIjtcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmb3JtUXVlc3Rpb24ucXVlc3Rpb24uaWQpLnJlbW92ZUF0dHJpYnV0ZShcImhpZGRlblwiKTtcbiAgICAgICAgICB2YWxPayA9IGZhbHNlO1xuICAgICAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFoYXNFcnJvcikge1xuXG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBTdHJpbmcoZW1haWwpLm1hdGNoKHJlZ2V4VHlwZS5lbWFpbC5leHApO1xuICAgICAgICBpZiAobWF0Y2hlcyA9PSBudWxsKSB7XG4gICAgICAgICAgZW1sLnN0eWxlLmJvcmRlckNvbG9yID0gXCIjRkYwMDAwXCI7XG4gICAgICAgICAgZW1sLnRleHRDb250ZW50ID0gXCJUdSBlbWFpbCBlcyBpbnZhbGlkb1wiO1xuICAgICAgICAgIGVtbC5yZW1vdmVBdHRyaWJ1dGUoXCJoaWRkZW5cIik7XG4gICAgICAgICAgdmFsT2sgPSBmYWxzZTtcbiAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG5cbiAgICB9XG4gICAgcmV0dXJuIHZhbE9rO1xuICB9XG5cbiAgY2FsZW5kYXJSdWxlc1ZhbGlkYXRlKGZvcm1RdWVzdGlvbikge1xuICAgIGxldCBoYXNFcnJvciA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmb3JtUXVlc3Rpb24ucXVlc3Rpb24uaWQpLnNldEF0dHJpYnV0ZShcImhpZGRlblwiLCBcInRydWVcIik7XG4gICAgICBsZXQgZWNhbGVuZGFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZm9ybVF1ZXN0aW9uLnF1ZXN0aW9uLmlkKTtcbiAgICAgIC8vc2UgdmFsaWRhIHF1ZSBubyBzZWEgbnVsbCBzaSBlcyByZXF1ZXJpZG9cbiAgICAgIGxldCBkYXRlID0gZm9ybVF1ZXN0aW9uLnF1ZXN0aW9uLnJlZ2lzdHJlZDtcbiAgICAgIGlmIChmb3JtUXVlc3Rpb24ucXVlc3Rpb24ucmVxdWlyZWQgJiYgKGRhdGUgPT0gXCJcIiB8fCBkYXRlID09IHVuZGVmaW5lZCB8fCBkYXRlID09IG51bGwpKSB7XG4gICAgICAgIGVjYWxlbmRhci5zdHlsZS5ib3JkZXJDb2xvciA9IFwiI0ZGMDAwMFwiO1xuICAgICAgICBlY2FsZW5kYXIudGV4dENvbnRlbnQgPSBcIkxhIGZlY2hhIGVzIHJlcXVlcmlkYVwiO1xuICAgICAgICBlY2FsZW5kYXIucmVtb3ZlQXR0cmlidXRlKFwiaGlkZGVuXCIpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG5cbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZU5vdFNwYWNlKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmNoYXJDb2RlID09IDMyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICB2YWxpZGF0ZU51bWVyb0RvY3VtZW50byhudW1lcm9Eb2M6IFN0cmluZykge1xuICAgIGlmICghbnVtZXJvRG9jLm1hdGNoKFwiXlswLTldKiRcIikpIHtcbiAgICAgIHRoaXMuZm9ybUR5bmFtaWMuY29udHJvbHNbXCJudW1lcm9Eb2NcIl0uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5wYXR0ZXJuKCdeWzAtOV0qJCcpXSk7XG4gICAgICB0aGlzLmZvcm1EeW5hbWljLmNvbnRyb2xzW1wibnVtZXJvRG9jXCJdLm1hcmtBc0RpcnR5KCk7XG4gICAgICB0aGlzLmZvcm1EeW5hbWljLmNvbnRyb2xzW1wibnVtZXJvRG9jXCJdLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgIHRoaXMuZm9ybUR5bmFtaWMuY29udHJvbHNbXCJudW1lcm9Eb2NcIl0ubWFya0FzVG91Y2hlZCgpO1xuICAgICAgdGhpcy5wYXR0ZXJuTm90VmFsaWREY3RvID0gdHJ1ZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5wYXR0ZXJuTm90VmFsaWREY3RvID0gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFsaWRhdGVDZWx1bGFyKG51bWVyb0NlbDogU3RyaW5nKSB7XG4gICAgaWYgKCFudW1lcm9DZWwubWF0Y2goXCJeWzAtOV0qJFwiKSkge1xuICAgICAgdGhpcy5mb3JtRHluYW1pYy5jb250cm9sc1tcImNlbHVsYXJcIl0uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5wYXR0ZXJuKCdeWzAtOV0qJCcpXSk7XG4gICAgICB0aGlzLmZvcm1EeW5hbWljLmNvbnRyb2xzW1wiY2VsdWxhclwiXS5tYXJrQXNEaXJ0eSgpO1xuICAgICAgdGhpcy5mb3JtRHluYW1pYy5jb250cm9sc1tcImNlbHVsYXJcIl0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgdGhpcy5mb3JtRHluYW1pYy5jb250cm9sc1tcImNlbHVsYXJcIl0ubWFya0FzVG91Y2hlZCgpO1xuICAgICAgdGhpcy5wYXR0ZXJuTm90VmFsaWRDZWwgPSB0cnVlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLnBhdHRlcm5Ob3RWYWxpZENlbCA9IGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgb25rZXlwcmVzcyhldmVudCkge1xuICAgIHJldHVybiAoZXZlbnQuY2hhckNvZGUgPT0gMCkgPyBudWxsIDogZXZlbnQuY2hhckNvZGUgPj0gNDggJiYgZXZlbnQuY2hhckNvZGUgPD0gNTdcbiAgfVxuXG4gIG9uQ2hhbmdlU3RlcChzdGVwOiBTdGVwLCBuZXh0U3RlcDogU3RlcCwgdmFsdWUpIHtcbiAgICBpZiAobmV4dFN0ZXAgJiYgbmV4dFN0ZXAuc3RlcE9yZGVyICE9IDEpIHtcbiAgICAgIHRoaXMucmVzZXRGaWVsZChzdGVwKTtcbiAgICAgIG5leHRTdGVwLnZpZXdEYXRhID0gW107XG4gICAgICBuZXh0U3RlcC52aWV3RGF0YSA9IG5leHRTdGVwLnN0ZXBEYXRhLmZpbHRlcih4ID0+IHgucmVsYXRpb25hbElkcy5pbmNsdWRlcyhOdW1iZXIodmFsdWUpKSk7XG5cbiAgICB9XG4gIH1cbiAgcmVzZXRGaWVsZChzdGVwSW46IFN0ZXApIHtcbiAgICB0aGlzLnN0ZXBzLmZvckVhY2goc3RlcCA9PiB7XG4gICAgICBpZiAoc3RlcC5zdGVwT3JkZXIgPiBzdGVwSW4uc3RlcE9yZGVyKSB7XG4gICAgICAgIHN0ZXAudmlld0RhdGEgPSB1bmRlZmluZWQ7XG4gICAgICAgIHN0ZXAudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==