@glowgreen/gg-questionnaire-v2 0.0.82 → 0.0.84

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 (61) hide show
  1. package/bundles/glowgreen-gg-questionnaire-v2.umd.js +306 -1240
  2. package/bundles/glowgreen-gg-questionnaire-v2.umd.js.map +1 -1
  3. package/bundles/glowgreen-gg-questionnaire-v2.umd.min.js +15 -1
  4. package/bundles/glowgreen-gg-questionnaire-v2.umd.min.js.map +1 -1
  5. package/esm2015/glowgreen-gg-questionnaire-v2.js +2 -8
  6. package/esm2015/lib/enums/condition-relationship.enum.js +6 -11
  7. package/esm2015/lib/enums/condition-type.enum.js +10 -15
  8. package/esm2015/lib/enums/input-type.enum.js +15 -20
  9. package/esm2015/lib/enums/question-type.enum.js +15 -20
  10. package/esm2015/lib/enums/repeater-question-type.enum.js +7 -12
  11. package/esm2015/lib/enums/validation-type.enum.js +10 -15
  12. package/esm2015/lib/gg-questionnaire-v2.module.js +17 -13
  13. package/esm2015/lib/interfaces/attachment.js +1 -15
  14. package/esm2015/lib/interfaces/checklist-item.js +1 -15
  15. package/esm2015/lib/interfaces/condition-group.js +1 -15
  16. package/esm2015/lib/interfaces/condition.js +1 -17
  17. package/esm2015/lib/interfaces/question.js +1 -59
  18. package/esm2015/lib/interfaces/questionnaire-options.js +1 -21
  19. package/esm2015/lib/interfaces/questionnaire.js +1 -15
  20. package/esm2015/lib/interfaces/repeater-question.js +1 -33
  21. package/esm2015/lib/interfaces/section.js +1 -19
  22. package/esm2015/lib/interfaces/select-option.js +1 -19
  23. package/esm2015/lib/interfaces/validator.js +1 -15
  24. package/esm2015/lib/services/filter.service.js +45 -124
  25. package/esm2015/lib/services/form-constructor.service.js +30 -113
  26. package/esm2015/lib/services/questionnaire.service.js +97 -377
  27. package/esm2015/public_api.js +1 -5
  28. package/esm5/glowgreen-gg-questionnaire-v2.js +2 -8
  29. package/esm5/lib/enums/condition-relationship.enum.js +6 -11
  30. package/esm5/lib/enums/condition-type.enum.js +10 -15
  31. package/esm5/lib/enums/input-type.enum.js +15 -20
  32. package/esm5/lib/enums/question-type.enum.js +15 -20
  33. package/esm5/lib/enums/repeater-question-type.enum.js +7 -12
  34. package/esm5/lib/enums/validation-type.enum.js +10 -15
  35. package/esm5/lib/gg-questionnaire-v2.module.js +27 -27
  36. package/esm5/lib/interfaces/attachment.js +1 -15
  37. package/esm5/lib/interfaces/checklist-item.js +1 -15
  38. package/esm5/lib/interfaces/condition-group.js +1 -15
  39. package/esm5/lib/interfaces/condition.js +1 -17
  40. package/esm5/lib/interfaces/question.js +1 -59
  41. package/esm5/lib/interfaces/questionnaire-options.js +1 -21
  42. package/esm5/lib/interfaces/questionnaire.js +1 -15
  43. package/esm5/lib/interfaces/repeater-question.js +1 -33
  44. package/esm5/lib/interfaces/section.js +1 -19
  45. package/esm5/lib/interfaces/select-option.js +1 -19
  46. package/esm5/lib/interfaces/validator.js +1 -15
  47. package/esm5/lib/services/filter.service.js +47 -264
  48. package/esm5/lib/services/form-constructor.service.js +35 -247
  49. package/esm5/lib/services/questionnaire.service.js +105 -608
  50. package/esm5/public_api.js +1 -5
  51. package/fesm2015/glowgreen-gg-questionnaire-v2.js +245 -712
  52. package/fesm2015/glowgreen-gg-questionnaire-v2.js.map +1 -1
  53. package/fesm5/glowgreen-gg-questionnaire-v2.js +243 -1204
  54. package/fesm5/glowgreen-gg-questionnaire-v2.js.map +1 -1
  55. package/glowgreen-gg-questionnaire-v2.d.ts +1 -2
  56. package/lib/gg-questionnaire-v2.module.d.ts +5 -1
  57. package/lib/services/filter.service.d.ts +3 -0
  58. package/lib/services/form-constructor.service.d.ts +3 -0
  59. package/lib/services/questionnaire.service.d.ts +12 -9
  60. package/package.json +5 -3
  61. package/glowgreen-gg-questionnaire-v2.metadata.json +0 -1
@@ -1,8 +1,4 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
- */
5
- import * as tslib_1 from "tslib";
1
+ import { __values } from "tslib";
6
2
  import { Injectable } from '@angular/core';
7
3
  import { FormBuilder, Validators } from '@angular/forms';
8
4
  import { QuestionType } from '../enums/question-type.enum';
@@ -23,62 +19,23 @@ var FormConstructorService = /** @class */ (function () {
23
19
  * @returns A filted form group.
24
20
  * @author Will Poulson
25
21
  */
26
- /**
27
- * Constructs a form group based on the questionnaire data.
28
- * This form group has been filtered down based on the conditions of the sections and questions.
29
- * @author Will Poulson
30
- * @param {?} questionnaire The questionnaire data to build the form group on.
31
- * @param {?} currentQuestionnaire
32
- * @param {?} currentQuestionnaireForm
33
- * @param {?=} additionalData
34
- * @param {?=} skipFilter
35
- * @return {?} A filted form group.
36
- */
37
- FormConstructorService.prototype.generateFormsForQuestionnaire = /**
38
- * Constructs a form group based on the questionnaire data.
39
- * This form group has been filtered down based on the conditions of the sections and questions.
40
- * @author Will Poulson
41
- * @param {?} questionnaire The questionnaire data to build the form group on.
42
- * @param {?} currentQuestionnaire
43
- * @param {?} currentQuestionnaireForm
44
- * @param {?=} additionalData
45
- * @param {?=} skipFilter
46
- * @return {?} A filted form group.
47
- */
48
- function (questionnaire, currentQuestionnaire, currentQuestionnaireForm, additionalData, skipFilter) {
49
- /** @type {?} */
22
+ FormConstructorService.prototype.generateFormsForQuestionnaire = function (questionnaire, currentQuestionnaire, currentQuestionnaireForm, additionalData, skipFilter) {
50
23
  var sections = skipFilter ?
51
24
  questionnaire.sections :
52
25
  this.filterService.filterSections(questionnaire.sections, currentQuestionnaireForm, additionalData);
53
- /** @type {?} */
54
26
  var noChange = currentQuestionnaireForm && (sections === currentQuestionnaire.sections);
55
27
  if (noChange && !skipFilter) {
56
28
  return null;
57
29
  }
58
- /** @type {?} */
59
30
  var questionnaireForms = this.generateFormsForSections(sections, currentQuestionnaireForm);
60
31
  return { sections: sections, forms: questionnaireForms };
61
32
  };
62
- /**
63
- * @private
64
- * @param {?} sections
65
- * @param {?} currentQuestionnaireForm
66
- * @return {?}
67
- */
68
- FormConstructorService.prototype.generateFormsForSections = /**
69
- * @private
70
- * @param {?} sections
71
- * @param {?} currentQuestionnaireForm
72
- * @return {?}
73
- */
74
- function (sections, currentQuestionnaireForm) {
33
+ FormConstructorService.prototype.generateFormsForSections = function (sections, currentQuestionnaireForm) {
75
34
  var e_1, _a;
76
- /** @type {?} */
77
35
  var questionnaireForms = this.fb.group({});
78
36
  try {
79
- for (var sections_1 = tslib_1.__values(sections), sections_1_1 = sections_1.next(); !sections_1_1.done; sections_1_1 = sections_1.next()) {
37
+ for (var sections_1 = __values(sections), sections_1_1 = sections_1.next(); !sections_1_1.done; sections_1_1 = sections_1.next()) {
80
38
  var section = sections_1_1.value;
81
- /** @type {?} */
82
39
  var sectionForms = this.generateFormsForSection(section, currentQuestionnaireForm);
83
40
  questionnaireForms.addControl(section.name, sectionForms);
84
41
  }
@@ -99,35 +56,15 @@ var FormConstructorService = /** @class */ (function () {
99
56
  * @returns A filtered form group.
100
57
  * @author Will Poulson
101
58
  */
102
- /**
103
- * Constructs a form group based on the section data.
104
- * This form group has been filtered down based on the conditions of the questions.
105
- * @author Will Poulson
106
- * @private
107
- * @param {?} section The section data to build the form group on.
108
- * @param {?} currentQuestionnaireForm
109
- * @return {?} A filtered form group.
110
- */
111
- FormConstructorService.prototype.generateFormsForSection = /**
112
- * Constructs a form group based on the section data.
113
- * This form group has been filtered down based on the conditions of the questions.
114
- * @author Will Poulson
115
- * @private
116
- * @param {?} section The section data to build the form group on.
117
- * @param {?} currentQuestionnaireForm
118
- * @return {?} A filtered form group.
119
- */
120
- function (section, currentQuestionnaireForm) {
59
+ FormConstructorService.prototype.generateFormsForSection = function (section, currentQuestionnaireForm) {
121
60
  var e_2, _a;
122
- /** @type {?} */
123
61
  var sectionForms = this.fb.group({});
124
62
  try {
125
- for (var _b = tslib_1.__values(section.questions), _c = _b.next(); !_c.done; _c = _b.next()) {
63
+ for (var _b = __values(section.questions), _c = _b.next(); !_c.done; _c = _b.next()) {
126
64
  var question = _c.value;
127
65
  if (question.type === QuestionType.Info) {
128
66
  continue;
129
67
  }
130
- /** @type {?} */
131
68
  var questionControl = this.generateControlForQuestion(question, section, currentQuestionnaireForm);
132
69
  sectionForms.addControl(question.name, questionControl);
133
70
  }
@@ -147,65 +84,30 @@ var FormConstructorService = /** @class */ (function () {
147
84
  * @returns An abstract control.
148
85
  * @author Will Poulson
149
86
  */
150
- /**
151
- * Constructs an astract form control based on the question data.
152
- * @author Will Poulson
153
- * @private
154
- * @param {?} question The question data to build the abstract control on.
155
- * @param {?} section
156
- * @param {?} currentQuestionnaireForm
157
- * @return {?} An abstract control.
158
- */
159
- FormConstructorService.prototype.generateControlForQuestion = /**
160
- * Constructs an astract form control based on the question data.
161
- * @author Will Poulson
162
- * @private
163
- * @param {?} question The question data to build the abstract control on.
164
- * @param {?} section
165
- * @param {?} currentQuestionnaireForm
166
- * @return {?} An abstract control.
167
- */
168
- function (question, section, currentQuestionnaireForm) {
87
+ FormConstructorService.prototype.generateControlForQuestion = function (question, section, currentQuestionnaireForm) {
169
88
  var e_3, _a;
170
- /** @type {?} */
171
89
  var convertedValidators = this.convertValidators(question.validators);
172
- /** @type {?} */
173
90
  var defaultValue = question.defaultValue ? question.defaultValue : null;
174
91
  switch (question.type) {
175
92
  case QuestionType.Repeater:
176
- /** @type {?} */
177
93
  var newArray = this.fb.array([], convertedValidators);
178
- /** @type {?} */
179
- var currentArray = currentQuestionnaireForm ? ((/** @type {?} */ (currentQuestionnaireForm.get([section.name, question.name])))) : false;
94
+ var currentArray = currentQuestionnaireForm ? currentQuestionnaireForm.get([section.name, question.name]) : false;
180
95
  if (currentArray && question.filteredRepeaterQuestions) {
181
96
  var _loop_1 = function (control) {
182
97
  var e_4, _a, e_5, _b;
183
- /** @type {?} */
184
98
  var index = currentArray.controls.indexOf(control);
185
99
  if (index === -1) {
186
100
  return "continue";
187
101
  }
188
- /** @type {?} */
189
102
  var filteredQuestions = question.filteredRepeaterQuestions[index];
190
103
  if (!filteredQuestions) {
191
104
  return "continue";
192
105
  }
193
- /** @type {?} */
194
- var filteredQuestionNames = filteredQuestions.map((/**
195
- * @param {?} x
196
- * @return {?}
197
- */
198
- function (x) { return x.name; }));
199
- /** @type {?} */
200
- var filteredOutQuestions = question.repeaterQuestions.filter((/**
201
- * @param {?} x
202
- * @return {?}
203
- */
204
- function (x) { return !filteredQuestionNames.includes(x.name); }));
106
+ var filteredQuestionNames = filteredQuestions.map(function (x) { return x.name; });
107
+ var filteredOutQuestions = question.repeaterQuestions.filter(function (x) { return !filteredQuestionNames.includes(x.name); });
205
108
  try {
206
- for (var filteredOutQuestions_1 = (e_4 = void 0, tslib_1.__values(filteredOutQuestions)), filteredOutQuestions_1_1 = filteredOutQuestions_1.next(); !filteredOutQuestions_1_1.done; filteredOutQuestions_1_1 = filteredOutQuestions_1.next()) {
109
+ for (var filteredOutQuestions_1 = (e_4 = void 0, __values(filteredOutQuestions)), filteredOutQuestions_1_1 = filteredOutQuestions_1.next(); !filteredOutQuestions_1_1.done; filteredOutQuestions_1_1 = filteredOutQuestions_1.next()) {
207
110
  var filteredOutQuestion = filteredOutQuestions_1_1.value;
208
- /** @type {?} */
209
111
  var childControl = control.get(filteredOutQuestion.name);
210
112
  childControl.setValidators([]);
211
113
  childControl.updateValueAndValidity({ onlySelf: true, emitEvent: false });
@@ -219,15 +121,13 @@ var FormConstructorService = /** @class */ (function () {
219
121
  finally { if (e_4) throw e_4.error; }
220
122
  }
221
123
  try {
222
- for (var filteredQuestions_1 = (e_5 = void 0, tslib_1.__values(filteredQuestions)), filteredQuestions_1_1 = filteredQuestions_1.next(); !filteredQuestions_1_1.done; filteredQuestions_1_1 = filteredQuestions_1.next()) {
124
+ for (var filteredQuestions_1 = (e_5 = void 0, __values(filteredQuestions)), filteredQuestions_1_1 = filteredQuestions_1.next(); !filteredQuestions_1_1.done; filteredQuestions_1_1 = filteredQuestions_1.next()) {
223
125
  var filteredQuestion = filteredQuestions_1_1.value;
224
- /** @type {?} */
225
126
  var childControl = control.get(filteredQuestion.name);
226
127
  if (childControl.value) {
227
128
  // If there's a value just skip it, no need to redo the validators each time.
228
129
  continue;
229
130
  }
230
- /** @type {?} */
231
131
  var convertedValidators_1 = this_1.convertValidators(filteredQuestion.validators);
232
132
  childControl.setValidators(convertedValidators_1);
233
133
  childControl.updateValueAndValidity({ onlySelf: true, emitEvent: false });
@@ -243,7 +143,7 @@ var FormConstructorService = /** @class */ (function () {
243
143
  };
244
144
  var this_1 = this;
245
145
  try {
246
- for (var _b = tslib_1.__values(currentArray.controls), _c = _b.next(); !_c.done; _c = _b.next()) {
146
+ for (var _b = __values(currentArray.controls), _c = _b.next(); !_c.done; _c = _b.next()) {
247
147
  var control = _c.value;
248
148
  _loop_1(control);
249
149
  }
@@ -271,33 +171,15 @@ var FormConstructorService = /** @class */ (function () {
271
171
  * @returns A form group.
272
172
  * @author Will Poulson
273
173
  */
274
- /**
275
- * Generates the form group for a checklist question.
276
- * @author Will Poulson
277
- * @private
278
- * @param {?} question The question. Must be of type checklist or else null is returned.
279
- * @param {?} convertedValidators
280
- * @return {?} A form group.
281
- */
282
- FormConstructorService.prototype.generateGroupForChecklist = /**
283
- * Generates the form group for a checklist question.
284
- * @author Will Poulson
285
- * @private
286
- * @param {?} question The question. Must be of type checklist or else null is returned.
287
- * @param {?} convertedValidators
288
- * @return {?} A form group.
289
- */
290
- function (question, convertedValidators) {
174
+ FormConstructorService.prototype.generateGroupForChecklist = function (question, convertedValidators) {
291
175
  var e_6, _a;
292
176
  if (question.type !== QuestionType.Checklist || question.checklistItems.length === 0) {
293
177
  return null;
294
178
  }
295
- /** @type {?} */
296
179
  var checklistForms = this.fb.group({});
297
180
  try {
298
- for (var _b = tslib_1.__values(question.checklistItems), _c = _b.next(); !_c.done; _c = _b.next()) {
181
+ for (var _b = __values(question.checklistItems), _c = _b.next(); !_c.done; _c = _b.next()) {
299
182
  var checklistItem = _c.value;
300
- /** @type {?} */
301
183
  var checklistItemControl = this.fb.control(null, convertedValidators);
302
184
  checklistForms.addControl(checklistItem.name, checklistItemControl);
303
185
  }
@@ -317,32 +199,16 @@ var FormConstructorService = /** @class */ (function () {
317
199
  * @returns A form group.
318
200
  * @author Will Poulson
319
201
  */
320
- /**
321
- * Generates the form template for a repeater question.
322
- * @author Will Poulson
323
- * @param {?} question The question. Must be of type repeater or else null is returned.
324
- * @param {?=} index
325
- * @return {?} A form group.
326
- */
327
- FormConstructorService.prototype.generateFormsForRepeater = /**
328
- * Generates the form template for a repeater question.
329
- * @author Will Poulson
330
- * @param {?} question The question. Must be of type repeater or else null is returned.
331
- * @param {?=} index
332
- * @return {?} A form group.
333
- */
334
- function (question, index) {
202
+ FormConstructorService.prototype.generateFormsForRepeater = function (question, index) {
335
203
  var e_7, _a;
336
204
  if (question.type !== QuestionType.Repeater || question.repeaterQuestions.length === 0) {
337
205
  console.log('Question isnt a repeater or has no questions, returning null');
338
206
  return null;
339
207
  }
340
- /** @type {?} */
341
208
  var repeaterForms = this.fb.group({});
342
209
  try {
343
- for (var _b = tslib_1.__values(question.repeaterQuestions), _c = _b.next(); !_c.done; _c = _b.next()) {
210
+ for (var _b = __values(question.repeaterQuestions), _c = _b.next(); !_c.done; _c = _b.next()) {
344
211
  var repeaterQuestion = _c.value;
345
- /** @type {?} */
346
212
  var repeaterQuestionControl = this.generateControlForRepeaterQuestion(repeaterQuestion);
347
213
  repeaterForms.addControl(repeaterQuestion.name, repeaterQuestionControl);
348
214
  }
@@ -362,22 +228,7 @@ var FormConstructorService = /** @class */ (function () {
362
228
  * @returns An abstract control.
363
229
  * @author Will Poulson
364
230
  */
365
- /**
366
- * Generates a control for a repeaters question.
367
- * @author Will Poulson
368
- * @private
369
- * @param {?} repeaterQuestion A repeater question.
370
- * @return {?} An abstract control.
371
- */
372
- FormConstructorService.prototype.generateControlForRepeaterQuestion = /**
373
- * Generates a control for a repeaters question.
374
- * @author Will Poulson
375
- * @private
376
- * @param {?} repeaterQuestion A repeater question.
377
- * @return {?} An abstract control.
378
- */
379
- function (repeaterQuestion) {
380
- /** @type {?} */
231
+ FormConstructorService.prototype.generateControlForRepeaterQuestion = function (repeaterQuestion) {
381
232
  var convertedValidators = this.convertValidators(repeaterQuestion.validators);
382
233
  return this.fb.control(null, { validators: convertedValidators, updateOn: repeaterQuestion.type === 'select' ? 'change' : 'blur' });
383
234
  };
@@ -387,31 +238,15 @@ var FormConstructorService = /** @class */ (function () {
387
238
  * @returns A convered array of form validators.
388
239
  * @author Will Poulson
389
240
  */
390
- /**
391
- * Converts an array of validators into form validators.
392
- * @author Will Poulson
393
- * @private
394
- * @param {?} validators The uncoverted array of validators.
395
- * @return {?} A convered array of form validators.
396
- */
397
- FormConstructorService.prototype.convertValidators = /**
398
- * Converts an array of validators into form validators.
399
- * @author Will Poulson
400
- * @private
401
- * @param {?} validators The uncoverted array of validators.
402
- * @return {?} A convered array of form validators.
403
- */
404
- function (validators) {
241
+ FormConstructorService.prototype.convertValidators = function (validators) {
405
242
  var e_8, _a;
406
243
  if (!validators || validators.length === 0) {
407
244
  return [];
408
245
  }
409
- /** @type {?} */
410
246
  var convertedValidators = [];
411
247
  try {
412
- for (var validators_1 = tslib_1.__values(validators), validators_1_1 = validators_1.next(); !validators_1_1.done; validators_1_1 = validators_1.next()) {
248
+ for (var validators_1 = __values(validators), validators_1_1 = validators_1.next(); !validators_1_1.done; validators_1_1 = validators_1.next()) {
413
249
  var validator = validators_1_1.value;
414
- /** @type {?} */
415
250
  var convertedValidator = this.convertValidator(validator);
416
251
  if (convertedValidator) {
417
252
  convertedValidators.push(convertedValidator);
@@ -433,21 +268,7 @@ var FormConstructorService = /** @class */ (function () {
433
268
  * @returns A converted form validator.
434
269
  * @author Will Poulson
435
270
  */
436
- /**
437
- * Converts a single validator into a form validator.
438
- * @author Will Poulson
439
- * @private
440
- * @param {?} validator The unconverted validator.
441
- * @return {?} A converted form validator.
442
- */
443
- FormConstructorService.prototype.convertValidator = /**
444
- * Converts a single validator into a form validator.
445
- * @author Will Poulson
446
- * @private
447
- * @param {?} validator The unconverted validator.
448
- * @return {?} A converted form validator.
449
- */
450
- function (validator) {
271
+ FormConstructorService.prototype.convertValidator = function (validator) {
451
272
  switch (validator.type) {
452
273
  case ValidationType.Required:
453
274
  return Validators.required;
@@ -460,48 +281,30 @@ var FormConstructorService = /** @class */ (function () {
460
281
  * @param savedState The saved state to load.
461
282
  * @param sections The sections already generated by the form constructor.
462
283
  */
463
- /**
464
- * Constructs the forms for repeaters from saved state.
465
- * @param {?} savedState The saved state to load.
466
- * @param {?} sections The sections already generated by the form constructor.
467
- * @param {?} currentQuestionnaireForm
468
- * @return {?}
469
- */
470
- FormConstructorService.prototype.constructRepeaterFromsFromState = /**
471
- * Constructs the forms for repeaters from saved state.
472
- * @param {?} savedState The saved state to load.
473
- * @param {?} sections The sections already generated by the form constructor.
474
- * @param {?} currentQuestionnaireForm
475
- * @return {?}
476
- */
477
- function (savedState, sections, currentQuestionnaireForm) {
284
+ FormConstructorService.prototype.constructRepeaterFromsFromState = function (savedState, sections, currentQuestionnaireForm) {
478
285
  var e_9, _a, e_10, _b, e_11, _c;
479
286
  try {
480
- for (var sections_2 = tslib_1.__values(sections), sections_2_1 = sections_2.next(); !sections_2_1.done; sections_2_1 = sections_2.next()) {
287
+ for (var sections_2 = __values(sections), sections_2_1 = sections_2.next(); !sections_2_1.done; sections_2_1 = sections_2.next()) {
481
288
  var section = sections_2_1.value;
482
289
  try {
483
- for (var _d = (e_10 = void 0, tslib_1.__values(section.questions)), _e = _d.next(); !_e.done; _e = _d.next()) {
290
+ for (var _d = (e_10 = void 0, __values(section.questions)), _e = _d.next(); !_e.done; _e = _d.next()) {
484
291
  var question = _e.value;
485
292
  if (question.type !== QuestionType.Repeater) {
486
293
  continue;
487
294
  }
488
- /** @type {?} */
489
295
  var repeaterArray = savedState[section.name][question.name];
490
296
  if (!repeaterArray || repeaterArray.length === 0) {
491
297
  continue;
492
298
  }
493
- /** @type {?} */
494
- var repeaterFormArray = (/** @type {?} */ (currentQuestionnaireForm.get([section.name, question.name])));
299
+ var repeaterFormArray = currentQuestionnaireForm.get([section.name, question.name]);
495
300
  if (repeaterFormArray.controls.length === repeaterArray.length) {
496
301
  continue;
497
302
  }
498
303
  try {
499
304
  // For each item that used to be there push a new empty template there to be populated.
500
- for (var repeaterArray_1 = (e_11 = void 0, tslib_1.__values(repeaterArray)), repeaterArray_1_1 = repeaterArray_1.next(); !repeaterArray_1_1.done; repeaterArray_1_1 = repeaterArray_1.next()) {
305
+ for (var repeaterArray_1 = (e_11 = void 0, __values(repeaterArray)), repeaterArray_1_1 = repeaterArray_1.next(); !repeaterArray_1_1.done; repeaterArray_1_1 = repeaterArray_1.next()) {
501
306
  var repeaterItem = repeaterArray_1_1.value;
502
- /** @type {?} */
503
307
  var index = repeaterArray.indexOf(repeaterItem);
504
- /** @type {?} */
505
308
  var repeaterItemTemplate = this.generateFormsForRepeater(question, index);
506
309
  repeaterFormArray.push(repeaterItemTemplate);
507
310
  }
@@ -532,30 +335,15 @@ var FormConstructorService = /** @class */ (function () {
532
335
  finally { if (e_9) throw e_9.error; }
533
336
  }
534
337
  };
535
- FormConstructorService.decorators = [
536
- { type: Injectable, args: [{
537
- providedIn: 'root'
538
- },] }
539
- ];
540
- /** @nocollapse */
541
- FormConstructorService.ctorParameters = function () { return [
542
- { type: FormBuilder },
543
- { type: FilterService }
544
- ]; };
545
- /** @nocollapse */ FormConstructorService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function FormConstructorService_Factory() { return new FormConstructorService(i0.ɵɵinject(i1.FormBuilder), i0.ɵɵinject(i2.FilterService)); }, token: FormConstructorService, providedIn: "root" });
338
+ FormConstructorService.ɵfac = function FormConstructorService_Factory(t) { return new (t || FormConstructorService)(i0.ɵɵinject(i1.FormBuilder), i0.ɵɵinject(i2.FilterService)); };
339
+ FormConstructorService.ɵprov = i0.ɵɵdefineInjectable({ token: FormConstructorService, factory: FormConstructorService.ɵfac, providedIn: 'root' });
546
340
  return FormConstructorService;
547
341
  }());
548
342
  export { FormConstructorService };
549
- if (false) {
550
- /**
551
- * @type {?}
552
- * @private
553
- */
554
- FormConstructorService.prototype.fb;
555
- /**
556
- * @type {?}
557
- * @private
558
- */
559
- FormConstructorService.prototype.filterService;
560
- }
561
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jb25zdHJ1Y3Rvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGdsb3dncmVlbi9nZy1xdWVzdGlvbm5haXJlLXYyLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2Zvcm0tY29uc3RydWN0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBd0QsVUFBVSxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFJMUgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7QUFLL0Q7SUFLRSxnQ0FDVSxFQUFlLEVBQ2YsYUFBNEI7UUFENUIsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLGtCQUFhLEdBQWIsYUFBYSxDQUFlO0lBQ2xDLENBQUM7SUFFTDs7Ozs7O09BTUc7Ozs7Ozs7Ozs7OztJQUNJLDhEQUE2Qjs7Ozs7Ozs7Ozs7SUFBcEMsVUFDRSxhQUE0QixFQUM1QixvQkFBbUMsRUFDbkMsd0JBQW1DLEVBQ25DLGNBQXVCLEVBQ3ZCLFVBQW9COztZQUVkLFFBQVEsR0FBRyxVQUFVLENBQUMsQ0FBQztZQUMzQixhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSx3QkFBd0IsRUFBRSxjQUFjLENBQUM7O1lBRS9GLFFBQVEsR0FBRyx3QkFBd0IsSUFBSSxDQUFDLFFBQVEsS0FBSyxvQkFBb0IsQ0FBQyxRQUFRLENBQUM7UUFFekYsSUFBSSxRQUFRLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDM0IsT0FBTyxJQUFJLENBQUM7U0FDYjs7WUFFSyxrQkFB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QyxTQUFTO3lCQUNWOzs0QkFFSyxhQUFhLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO3dCQUM3RCxJQUFJLENBQUMsYUFBYSxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFOzRCQUNoRCxTQUFTO3lCQUNWOzs0QkFFSyxpQkFBaUIsR0FBRyxtQkFBQSx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFhO3dCQUVsRyxJQUFJLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssYUFBYSxDQUFDLE1BQU0sRUFBRTs0QkFDOUQsU0FBUzt5QkFDVjs7NEJBRUQsdUZBQXVGOzRCQUN2RixLQUEyQixJQUFBLGtDQUFBLGlCQUFBLGFBQWEsQ0FBQSxDQUFBLDRDQUFBLHVFQUFFO2dDQUFyQyxJQUFNLFlBQVksMEJBQUE7O29DQUNmLEtBQUssR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQzs7b0NBQzNDLG9CQUFvQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDO2dDQUMzRSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQzs2QkFDOUM7Ozs7Ozs7OztxQkFDRjs7Ozs7Ozs7O2FBQ0Y7Ozs7Ozs7OztJQUNILENBQUM7O2dCQXpQRixVQUFVLFNBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzs7O2dCQWRRLFdBQVc7Z0JBS1gsYUFBYTs7O2lDQU50QjtDQXVRQyxBQTFQRCxJQTBQQztTQXZQWSxzQkFBc0I7Ozs7OztJQUcvQixvQ0FBdUI7Ozs7O0lBQ3ZCLCtDQUFvQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1Db250cm9sLCBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRvckZuLCBWYWxpZGF0b3JzLCBGb3JtQXJyYXkgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTZWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zZWN0aW9uJztcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9xdWVzdGlvbic7XG5pbXBvcnQgeyBRdWVzdGlvbm5haXJlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9xdWVzdGlvbm5haXJlJztcbmltcG9ydCB7IFF1ZXN0aW9uVHlwZSB9IGZyb20gJy4uL2VudW1zL3F1ZXN0aW9uLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9maWx0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBWYWxpZGF0b3IgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3ZhbGlkYXRvcic7XG5pbXBvcnQgeyBWYWxpZGF0aW9uVHlwZSB9IGZyb20gJy4uL2VudW1zL3ZhbGlkYXRpb24tdHlwZS5lbnVtJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFJlcGVhdGVyUXVlc3Rpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcGVhdGVyLXF1ZXN0aW9uJztcbmltcG9ydCB7IENoZWNrbGlzdEl0ZW0gfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoZWNrbGlzdC1pdGVtJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRm9ybUNvbnN0cnVjdG9yU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBmaWx0ZXJTZXJ2aWNlOiBGaWx0ZXJTZXJ2aWNlXG4gICkgeyB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYSBmb3JtIGdyb3VwIGJhc2VkIG9uIHRoZSBxdWVzdGlvbm5haXJlIGRhdGEuXG4gICAqIFRoaXMgZm9ybSBncm91cCBoYXMgYmVlbiBmaWx0ZXJlZCBkb3duIGJhc2VkIG9uIHRoZSBjb25kaXRpb25zIG9mIHRoZSBzZWN0aW9ucyBhbmQgcXVlc3Rpb25zLlxuICAgKiBAcGFyYW0gcXVlc3Rpb25uYWlyZSBUaGUgcXVlc3Rpb25uYWlyZSBkYXRhIHRvIGJ1aWxkIHRoZSBmb3JtIGdyb3VwIG9uLlxuICAgKiBAcmV0dXJucyBBIGZpbHRlZCBmb3JtIGdyb3VwLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIGdlbmVyYXRlRm9ybXNGb3JRdWVzdGlvbm5haXJlKFxuICAgIHF1ZXN0aW9ubmFpcmU6IFF1ZXN0aW9ubmFpcmUsXG4gICAgY3VycmVudFF1ZXN0aW9ubmFpcmU6IFF1ZXN0aW9ubmFpcmUsXG4gICAgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtOiBGb3JtR3JvdXAsXG4gICAgYWRkaXRpb25hbERhdGE/OiBPYmplY3QsXG4gICAgc2tpcEZpbHRlcj86IGJvb2xlYW5cbiAgKToge3NlY3Rpb25zOiBBcnJheTxTZWN0aW9uPjsgZm9ybXM6IEZvcm1Hcm91cH0ge1xuICAgIGNvbnN0IHNlY3Rpb25zID0gc2tpcEZpbHRlciA/XG4gICAgICBxdWVzdGlvbm5haXJlLnNlY3Rpb25zIDpcbiAgICAgIHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXJTZWN0aW9ucyhxdWVzdGlvbm5haXJlLnNlY3Rpb25zLCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0sIGFkZGl0aW9uYWxEYXRhKTtcblxuICAgIGNvbnN0IG5vQ2hhbmdlID0gY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtICYmIChzZWN0aW9ucyA9PT0gY3VycmVudFF1ZXN0aW9ubmFpcmUuc2VjdGlvbnMpO1xuXG4gICAgaWYgKG5vQ2hhbmdlICYmICFza2lwRmlsdGVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBxdWVzdGlvbm5haXJlRm9ybXMgPSB0aGlzLmdlbmVyYXRlRm9ybXNGb3JTZWN0aW9ucyhzZWN0aW9ucywgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtKTtcbiAgICByZXR1cm4ge3NlY3Rpb25zOiBzZWN0aW9ucywgZm9ybXM6IHF1ZXN0aW9ubmFpcmVGb3Jtc307XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlRm9ybXNGb3JTZWN0aW9ucyhzZWN0aW9uczogQXJyYXk8U2VjdGlvbj4sIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybTogRm9ybUdyb3VwKSB7XG4gICAgY29uc3QgcXVlc3Rpb25uYWlyZUZvcm1zOiBGb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHt9KTtcbiAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHtcbiAgICAgIGNvbnN0IHNlY3Rpb25Gb3JtcyA9IHRoaXMuZ2VuZXJhdGVGb3Jtc0ZvclNlY3Rpb24oc2VjdGlvbiwgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtKTtcbiAgICAgIHF1ZXN0aW9ubmFpcmVGb3Jtcy5hZGRDb250cm9sKHNlY3Rpb24ubmFtZSwgc2VjdGlvbkZvcm1zKTtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXN0aW9ubmFpcmVGb3JtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgZm9ybSBncm91cCBiYXNlZCBvbiB0aGUgc2VjdGlvbiBkYXRhLlxuICAgKiBUaGlzIGZvcm0gZ3JvdXAgaGFzIGJlZW4gZmlsdGVyZWQgZG93biBiYXNlZCBvbiB0aGUgY29uZGl0aW9ucyBvZiB0aGUgcXVlc3Rpb25zLlxuICAgKiBAcGFyYW0gc2VjdGlvbiBUaGUgc2VjdGlvbiBkYXRhIHRvIGJ1aWxkIHRoZSBmb3JtIGdyb3VwIG9uLlxuICAgKiBAcmV0dXJucyBBIGZpbHRlcmVkIGZvcm0gZ3JvdXAuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwcml2YXRlIGdlbmVyYXRlRm9ybXNGb3JTZWN0aW9uKHNlY3Rpb246IFNlY3Rpb24sIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybTogRm9ybUdyb3VwKTogRm9ybUdyb3VwIHtcbiAgICBjb25zdCBzZWN0aW9uRm9ybXM6IEZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe30pO1xuICAgIGZvciAoY29uc3QgcXVlc3Rpb24gb2Ygc2VjdGlvbi5xdWVzdGlvbnMpIHtcbiAgICAgIGlmIChxdWVzdGlvbi50eXBlID09PSBRdWVzdGlvblR5cGUuSW5mbykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcXVlc3Rpb25Db250cm9sID0gdGhpcy5nZW5lcmF0ZUNvbnRyb2xGb3JRdWVzdGlvbihxdWVzdGlvbiwgc2VjdGlvbiwgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtKTtcbiAgICAgIHNlY3Rpb25Gb3Jtcy5hZGRDb250cm9sKHF1ZXN0aW9uLm5hbWUsIHF1ZXN0aW9uQ29udHJvbCk7XG4gICAgfVxuICAgIHJldHVybiBzZWN0aW9uRm9ybXM7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhbiBhc3RyYWN0IGZvcm0gY29udHJvbCBiYXNlZCBvbiB0aGUgcXVlc3Rpb24gZGF0YS5cbiAgICogQHBhcmFtIHF1ZXN0aW9uIFRoZSBxdWVzdGlvbiBkYXRhIHRvIGJ1aWxkIHRoZSBhYnN0cmFjdCBjb250cm9sIG9uLlxuICAgKiBAcmV0dXJucyBBbiBhYnN0cmFjdCBjb250cm9sLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZUNvbnRyb2xGb3JRdWVzdGlvbihxdWVzdGlvbjogUXVlc3Rpb24sIHNlY3Rpb246IFNlY3Rpb24sIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybTogRm9ybUdyb3VwKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICBjb25zdCBjb252ZXJ0ZWRWYWxpZGF0b3JzID0gdGhpcy5jb252ZXJ0VmFsaWRhdG9ycyhxdWVzdGlvbi52YWxpZGF0b3JzKTtcbiAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBxdWVzdGlvbi5kZWZhdWx0VmFsdWUgPyBxdWVzdGlvbi5kZWZhdWx0VmFsdWUgOiBudWxsO1xuICAgIHN3aXRjaCAocXVlc3Rpb24udHlwZSkge1xuICAgICAgY2FzZSBRdWVzdGlvblR5cGUuUmVwZWF0ZXI6XG4gICAgICAgIGNvbnN0IG5ld0FycmF5ID0gdGhpcy5mYi5hcnJheShbXSwgY29udmVydGVkVmFsaWRhdG9ycyk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRBcnJheSA9IGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSA/IChjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0uZ2V0KFtzZWN0aW9uLm5hbWUsIHF1ZXN0aW9uLm5hbWVdKSBhcyBGb3JtQXJyYXkpIDogZmFsc2U7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRBcnJheSAmJiBxdWVzdGlvbi5maWx0ZXJlZFJlcGVhdGVyUXVlc3Rpb25zKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjb250cm9sIG9mIGN1cnJlbnRBcnJheS5jb250cm9scykge1xuXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGN1cnJlbnRBcnJheS5jb250cm9scy5pbmRleE9mKGNvbnRyb2wpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFF1ZXN0aW9ucyA9IHF1ZXN0aW9uLmZpbHRlcmVkUmVwZWF0ZXJRdWVzdGlvbnNbaW5kZXhdO1xuXG4gICAgICAgICAgICBpZiAoIWZpbHRlcmVkUXVlc3Rpb25zKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFF1ZXN0aW9uTmFtZXMgPSBmaWx0ZXJlZFF1ZXN0aW9ucy5tYXAoeCA9PiB4Lm5hbWUpO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRPdXRRdWVzdGlvbnMgPSBxdWVzdGlvbi5yZXBlYXRlclF1ZXN0aW9ucy5maWx0ZXIoeCA9PiAhZmlsdGVyZWRRdWVzdGlvbk5hbWVzLmluY2x1ZGVzKHgubmFtZSkpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpbHRlcmVkT3V0UXVlc3Rpb24gb2YgZmlsdGVyZWRPdXRRdWVzdGlvbnMpIHtcbiAgICAgICAgICAgICAgY29uc3QgY2hpbGRDb250cm9sID0gY29udHJvbC5nZXQoZmlsdGVyZWRPdXRRdWVzdGlvbi5uYW1lKTtcbiAgICAgICAgICAgICAgY2hpbGRDb250cm9sLnNldFZhbGlkYXRvcnMoW10pO1xuICAgICAgICAgICAgICBjaGlsZENvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBmaWx0ZXJlZFF1ZXN0aW9uIG9mIGZpbHRlcmVkUXVlc3Rpb25zKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNoaWxkQ29udHJvbCA9IGNvbnRyb2wuZ2V0KGZpbHRlcmVkUXVlc3Rpb24ubmFtZSk7XG5cbiAgICAgICAgICAgICAgaWYgKGNoaWxkQ29udHJvbC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYSB2YWx1ZSBqdXN0IHNraXAgaXQsIG5vIG5lZWQgdG8gcmVkbyB0aGUgdmFsaWRhdG9ycyBlYWNoIHRpbWUuXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBjb252ZXJ0ZWRWYWxpZGF0b3JzID0gdGhpcy5jb252ZXJ0VmFsaWRhdG9ycyhmaWx0ZXJlZFF1ZXN0aW9uLnZhbGlkYXRvcnMpO1xuICAgICAgICAgICAgICBjaGlsZENvbnRyb2wuc2V0VmFsaWRhdG9ycyhjb252ZXJ0ZWRWYWxpZGF0b3JzKTtcbiAgICAgICAgICAgICAgY2hpbGRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnRBcnJheSA/IGN1cnJlbnRBcnJheSA6IG5ld0FycmF5O1xuICAgICAgY2FzZSBRdWVzdGlvblR5cGUuQ2hlY2tsaXN0OlxuICAgICAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZUdyb3VwRm9yQ2hlY2tsaXN0KHF1ZXN0aW9uLCBjb252ZXJ0ZWRWYWxpZGF0b3JzKTtcbiAgICAgIGNhc2UgUXVlc3Rpb25UeXBlLlNsaWRlcjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZmIuY29udHJvbChkZWZhdWx0VmFsdWUsIHsgdmFsaWRhdG9yczogY29udmVydGVkVmFsaWRhdG9ycyB9KTsgLy8gUmVtb3ZlIHVwZGF0ZSBvbiBibHVyIGZvciBzbGlkZXJzLlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRoaXMuZmIuY29udHJvbChkZWZhdWx0VmFsdWUsIHsgdmFsaWRhdG9yczogY29udmVydGVkVmFsaWRhdG9ycywgdXBkYXRlT246ICdibHVyJyB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIHRoZSBmb3JtIGdyb3VwIGZvciBhIGNoZWNrbGlzdCBxdWVzdGlvbi5cbiAgICogQHBhcmFtIHF1ZXN0aW9uIFRoZSBxdWVzdGlvbi4gTXVzdCBiZSBvZiB0eXBlIGNoZWNrbGlzdCBvciBlbHNlIG51bGwgaXMgcmV0dXJuZWQuXG4gICAqIEByZXR1cm5zIEEgZm9ybSBncm91cC5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVHcm91cEZvckNoZWNrbGlzdChxdWVzdGlvbjogUXVlc3Rpb24sIGNvbnZlcnRlZFZhbGlkYXRvcnMpIHtcbiAgICBpZiAocXVlc3Rpb24udHlwZSAhPT0gUXVlc3Rpb25UeXBlLkNoZWNrbGlzdCB8fCBxdWVzdGlvbi5jaGVja2xpc3RJdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGNoZWNrbGlzdEZvcm1zOiBGb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHt9KTtcbiAgICBmb3IgKGNvbnN0IGNoZWNrbGlzdEl0ZW0gb2YgcXVlc3Rpb24uY2hlY2tsaXN0SXRlbXMpIHtcbiAgICAgIGNvbnN0IGNoZWNrbGlzdEl0ZW1Db250cm9sID0gdGhpcy5mYi5jb250cm9sKG51bGwsIGNvbnZlcnRlZFZhbGlkYXRvcnMpO1xuICAgICAgY2hlY2tsaXN0Rm9ybXMuYWRkQ29udHJvbChjaGVja2xpc3RJdGVtLm5hbWUsIGNoZWNrbGlzdEl0ZW1Db250cm9sKTtcbiAgICB9XG4gICAgcmV0dXJuIGNoZWNrbGlzdEZvcm1zO1xuICB9XG5cblxuICAvKipcbiAgICogR2VuZXJhdGVzIHRoZSBmb3JtIHRlbXBsYXRlIGZvciBhIHJlcGVhdGVyIHF1ZXN0aW9uLlxuICAgKiBAcGFyYW0gcXVlc3Rpb24gVGhlIHF1ZXN0aW9uLiBNdXN0IGJlIG9mIHR5cGUgcmVwZWF0ZXIgb3IgZWxzZSBudWxsIGlzIHJldHVybmVkLlxuICAgKiBAcmV0dXJucyBBIGZvcm0gZ3JvdXAuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwdWJsaWMgZ2VuZXJhdGVGb3Jtc0ZvclJlcGVhdGVyKHF1ZXN0aW9uOiBRdWVzdGlvbiwgaW5kZXg/OiBhbnkpOiBGb3JtR3JvdXAge1xuICAgIGlmIChxdWVzdGlvbi50eXBlICE9PSBRdWVzdGlvblR5cGUuUmVwZWF0ZXIgfHwgcXVlc3Rpb24ucmVwZWF0ZXJRdWVzdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLmxvZygnUXVlc3Rpb24gaXNudCBhIHJlcGVhdGVyIG9yIGhhcyBubyBxdWVzdGlvbnMsIHJldHVybmluZyBudWxsJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByZXBlYXRlckZvcm1zOiBGb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHt9KTtcblxuICAgIGZvciAoY29uc3QgcmVwZWF0ZXJRdWVzdGlvbiBvZiBxdWVzdGlvbi5yZXBlYXRlclF1ZXN0aW9ucykge1xuICAgICAgY29uc3QgcmVwZWF0ZXJRdWVzdGlvbkNvbnRyb2wgPSB0aGlzLmdlbmVyYXRlQ29udHJvbEZvclJlcGVhdGVyUXVlc3Rpb24ocmVwZWF0ZXJRdWVzdGlvbik7XG4gICAgICByZXBlYXRlckZvcm1zLmFkZENvbnRyb2wocmVwZWF0ZXJRdWVzdGlvbi5uYW1lLCByZXBlYXRlclF1ZXN0aW9uQ29udHJvbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcGVhdGVyRm9ybXM7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgY29udHJvbCBmb3IgYSByZXBlYXRlcnMgcXVlc3Rpb24uXG4gICAqIEBwYXJhbSByZXBlYXRlclF1ZXN0aW9uIEEgcmVwZWF0ZXIgcXVlc3Rpb24uXG4gICAqIEByZXR1cm5zIEFuIGFic3RyYWN0IGNvbnRyb2wuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwcml2YXRlIGdlbmVyYXRlQ29udHJvbEZvclJlcGVhdGVyUXVlc3Rpb24ocmVwZWF0ZXJRdWVzdGlvbjogUmVwZWF0ZXJRdWVzdGlvbik6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgY29uc3QgY29udmVydGVkVmFsaWRhdG9ycyA9IHRoaXMuY29udmVydFZhbGlkYXRvcnMocmVwZWF0ZXJRdWVzdGlvbi52YWxpZGF0b3JzKTtcbiAgICByZXR1cm4gdGhpcy5mYi5jb250cm9sKG51bGwsIHsgdmFsaWRhdG9yczogY29udmVydGVkVmFsaWRhdG9ycywgdXBkYXRlT246IHJlcGVhdGVyUXVlc3Rpb24udHlwZSA9PT0gJ3NlbGVjdCcgPyAnY2hhbmdlJyA6ICdibHVyJyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhbiBhcnJheSBvZiB2YWxpZGF0b3JzIGludG8gZm9ybSB2YWxpZGF0b3JzLlxuICAgKiBAcGFyYW0gdmFsaWRhdG9ycyBUaGUgdW5jb3ZlcnRlZCBhcnJheSBvZiB2YWxpZGF0b3JzLlxuICAgKiBAcmV0dXJucyBBIGNvbnZlcmVkIGFycmF5IG9mIGZvcm0gdmFsaWRhdG9ycy5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHByaXZhdGUgY29udmVydFZhbGlkYXRvcnModmFsaWRhdG9yczogQXJyYXk8VmFsaWRhdG9yPik6IEFycmF5PFZhbGlkYXRvckZuPiB7XG4gICAgaWYgKCF2YWxpZGF0b3JzIHx8IHZhbGlkYXRvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGNvbnZlcnRlZFZhbGlkYXRvcnM6IEFycmF5PFZhbGlkYXRvckZuPiA9IFtdO1xuICAgIGZvciAoY29uc3QgdmFsaWRhdG9yIG9mIHZhbGlkYXRvcnMpIHtcbiAgICAgIGNvbnN0IGNvbnZlcnRlZFZhbGlkYXRvciA9IHRoaXMuY29udmVydFZhbGlkYXRvcih2YWxpZGF0b3IpO1xuICAgICAgaWYgKGNvbnZlcnRlZFZhbGlkYXRvcikge1xuICAgICAgICBjb252ZXJ0ZWRWYWxpZGF0b3JzLnB1c2goY29udmVydGVkVmFsaWRhdG9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbnZlcnRlZFZhbGlkYXRvcnM7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBzaW5nbGUgdmFsaWRhdG9yIGludG8gYSBmb3JtIHZhbGlkYXRvci5cbiAgICogQHBhcmFtIHZhbGlkYXRvciBUaGUgdW5jb252ZXJ0ZWQgdmFsaWRhdG9yLlxuICAgKiBAcmV0dXJucyBBIGNvbnZlcnRlZCBmb3JtIHZhbGlkYXRvci5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHByaXZhdGUgY29udmVydFZhbGlkYXRvcih2YWxpZGF0b3I6IFZhbGlkYXRvcik6IFZhbGlkYXRvckZuIHwgbnVsbCB7XG4gICAgc3dpdGNoICh2YWxpZGF0b3IudHlwZSkge1xuICAgICAgY2FzZSBWYWxpZGF0aW9uVHlwZS5SZXF1aXJlZDpcbiAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMucmVxdWlyZWQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgZm9ybXMgZm9yIHJlcGVhdGVycyBmcm9tIHNhdmVkIHN0YXRlLlxuICAgKiBAcGFyYW0gc2F2ZWRTdGF0ZSBUaGUgc2F2ZWQgc3RhdGUgdG8gbG9hZC5cbiAgICogQHBhcmFtIHNlY3Rpb25zIFRoZSBzZWN0aW9ucyBhbHJlYWR5IGdlbmVyYXRlZCBieSB0aGUgZm9ybSBjb25zdHJ1Y3Rvci5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RSZXBlYXRlckZyb21zRnJvbVN0YXRlKHNhdmVkU3RhdGU6IGFueSwgc2VjdGlvbnM6IEFycmF5PFNlY3Rpb24+LCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm06IEZvcm1Hcm91cCkge1xuICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykge1xuICAgICAgZm9yIChjb25zdCBxdWVzdGlvbiBvZiBzZWN0aW9uLnF1ZXN0aW9ucykge1xuICAgICAgICBpZiAocXVlc3Rpb24udHlwZSAhPT0gUXVlc3Rpb25UeXBlLlJlcGVhdGVyKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXBlYXRlckFycmF5ID0gc2F2ZWRTdGF0ZVtzZWN0aW9uLm5hbWVdW3F1ZXN0aW9uLm5hbWVdO1xuICAgICAgICBpZiAoIXJlcGVhdGVyQXJyYXkgfHwgcmVwZWF0ZXJBcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlcGVhdGVyRm9ybUFycmF5ID0gY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLmdldChbc2VjdGlvbi5uYW1lLCBxdWVzdGlvbi5uYW1lXSkgYXMgRm9ybUFycmF5O1xuXG4gICAgICAgIGlmIChyZXBlYXRlckZvcm1BcnJheS5jb250cm9scy5sZW5ndGggPT09IHJlcGVhdGVyQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGb3IgZWFjaCBpdGVtIHRoYXQgdXNlZCB0byBiZSB0aGVyZSBwdXNoIGEgbmV3IGVtcHR5IHRlbXBsYXRlIHRoZXJlIHRvIGJlIHBvcHVsYXRlZC5cbiAgICAgICAgZm9yIChjb25zdCByZXBlYXRlckl0ZW0gb2YgcmVwZWF0ZXJBcnJheSkge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gcmVwZWF0ZXJBcnJheS5pbmRleE9mKHJlcGVhdGVySXRlbSk7XG4gICAgICAgICAgY29uc3QgcmVwZWF0ZXJJdGVtVGVtcGxhdGUgPSB0aGlzLmdlbmVyYXRlRm9ybXNGb3JSZXBlYXRlcihxdWVzdGlvbiwgaW5kZXgpO1xuICAgICAgICAgIHJlcGVhdGVyRm9ybUFycmF5LnB1c2gocmVwZWF0ZXJJdGVtVGVtcGxhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
343
+ /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(FormConstructorService, [{
344
+ type: Injectable,
345
+ args: [{
346
+ providedIn: 'root'
347
+ }]
348
+ }], function () { return [{ type: i1.FormBuilder }, { type: i2.FilterService }]; }, null); })();
349
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jb25zdHJ1Y3Rvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGdsb3dncmVlbi9nZy1xdWVzdGlvbm5haXJlLXYyLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2Zvcm0tY29uc3RydWN0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUF3RCxVQUFVLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUkxSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWpELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7OztBQUsvRDtJQUtFLGdDQUNVLEVBQWUsRUFDZixhQUE0QjtRQUQ1QixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2Ysa0JBQWEsR0FBYixhQUFhLENBQWU7SUFDbEMsQ0FBQztJQUVMOzs7Ozs7T0FNRztJQUNJLDhEQUE2QixHQUFwQyxVQUNFLGFBQTRCLEVBQzVCLG9CQUFtQyxFQUNuQyx3QkFBbUMsRUFDbkMsY0FBdUIsRUFDdkIsVUFBb0I7UUFFcEIsSUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLENBQUM7WUFDM0IsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsd0JBQXdCLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFFdEcsSUFBTSxRQUFRLEdBQUcsd0JBQXdCLElBQUksQ0FBQyxRQUFRLEtBQUssb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFMUYsSUFBSSxRQUFRLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDM0IsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELElBQU0sa0JBQWtC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ZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCwgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycywgRm9ybUFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2VjdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VjdGlvbic7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvcXVlc3Rpb24nO1xuaW1wb3J0IHsgUXVlc3Rpb25uYWlyZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvcXVlc3Rpb25uYWlyZSc7XG5pbXBvcnQgeyBRdWVzdGlvblR5cGUgfSBmcm9tICcuLi9lbnVtcy9xdWVzdGlvbi10eXBlLmVudW0nO1xuaW1wb3J0IHsgRmlsdGVyU2VydmljZSB9IGZyb20gJy4vZmlsdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVmFsaWRhdG9yIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy92YWxpZGF0b3InO1xuaW1wb3J0IHsgVmFsaWRhdGlvblR5cGUgfSBmcm9tICcuLi9lbnVtcy92YWxpZGF0aW9uLXR5cGUuZW51bSc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBSZXBlYXRlclF1ZXN0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBlYXRlci1xdWVzdGlvbic7XG5pbXBvcnQgeyBDaGVja2xpc3RJdGVtIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jaGVja2xpc3QtaXRlbSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1Db25zdHJ1Y3RvclNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgZmlsdGVyU2VydmljZTogRmlsdGVyU2VydmljZVxuICApIHsgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgZm9ybSBncm91cCBiYXNlZCBvbiB0aGUgcXVlc3Rpb25uYWlyZSBkYXRhLlxuICAgKiBUaGlzIGZvcm0gZ3JvdXAgaGFzIGJlZW4gZmlsdGVyZWQgZG93biBiYXNlZCBvbiB0aGUgY29uZGl0aW9ucyBvZiB0aGUgc2VjdGlvbnMgYW5kIHF1ZXN0aW9ucy5cbiAgICogQHBhcmFtIHF1ZXN0aW9ubmFpcmUgVGhlIHF1ZXN0aW9ubmFpcmUgZGF0YSB0byBidWlsZCB0aGUgZm9ybSBncm91cCBvbi5cbiAgICogQHJldHVybnMgQSBmaWx0ZWQgZm9ybSBncm91cC5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBnZW5lcmF0ZUZvcm1zRm9yUXVlc3Rpb25uYWlyZShcbiAgICBxdWVzdGlvbm5haXJlOiBRdWVzdGlvbm5haXJlLFxuICAgIGN1cnJlbnRRdWVzdGlvbm5haXJlOiBRdWVzdGlvbm5haXJlLFxuICAgIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybTogRm9ybUdyb3VwLFxuICAgIGFkZGl0aW9uYWxEYXRhPzogT2JqZWN0LFxuICAgIHNraXBGaWx0ZXI/OiBib29sZWFuXG4gICk6IHtzZWN0aW9uczogQXJyYXk8U2VjdGlvbj47IGZvcm1zOiBGb3JtR3JvdXB9IHtcbiAgICBjb25zdCBzZWN0aW9ucyA9IHNraXBGaWx0ZXIgP1xuICAgICAgcXVlc3Rpb25uYWlyZS5zZWN0aW9ucyA6XG4gICAgICB0aGlzLmZpbHRlclNlcnZpY2UuZmlsdGVyU2VjdGlvbnMocXVlc3Rpb25uYWlyZS5zZWN0aW9ucywgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLCBhZGRpdGlvbmFsRGF0YSk7XG5cbiAgICBjb25zdCBub0NoYW5nZSA9IGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSAmJiAoc2VjdGlvbnMgPT09IGN1cnJlbnRRdWVzdGlvbm5haXJlLnNlY3Rpb25zKTtcblxuICAgIGlmIChub0NoYW5nZSAmJiAhc2tpcEZpbHRlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlc3Rpb25uYWlyZUZvcm1zID0gdGhpcy5nZW5lcmF0ZUZvcm1zRm9yU2VjdGlvbnMoc2VjdGlvbnMsIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSk7XG4gICAgcmV0dXJuIHtzZWN0aW9uczogc2VjdGlvbnMsIGZvcm1zOiBxdWVzdGlvbm5haXJlRm9ybXN9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUZvcm1zRm9yU2VjdGlvbnMoc2VjdGlvbnM6IEFycmF5PFNlY3Rpb24+LCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm06IEZvcm1Hcm91cCkge1xuICAgIGNvbnN0IHF1ZXN0aW9ubmFpcmVGb3JtczogRm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XG4gICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHNlY3Rpb25zKSB7XG4gICAgICBjb25zdCBzZWN0aW9uRm9ybXMgPSB0aGlzLmdlbmVyYXRlRm9ybXNGb3JTZWN0aW9uKHNlY3Rpb24sIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSk7XG4gICAgICBxdWVzdGlvbm5haXJlRm9ybXMuYWRkQ29udHJvbChzZWN0aW9uLm5hbWUsIHNlY3Rpb25Gb3Jtcyk7XG4gICAgfVxuICAgIHJldHVybiBxdWVzdGlvbm5haXJlRm9ybXM7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIGZvcm0gZ3JvdXAgYmFzZWQgb24gdGhlIHNlY3Rpb24gZGF0YS5cbiAgICogVGhpcyBmb3JtIGdyb3VwIGhhcyBiZWVuIGZpbHRlcmVkIGRvd24gYmFzZWQgb24gdGhlIGNvbmRpdGlvbnMgb2YgdGhlIHF1ZXN0aW9ucy5cbiAgICogQHBhcmFtIHNlY3Rpb24gVGhlIHNlY3Rpb24gZGF0YSB0byBidWlsZCB0aGUgZm9ybSBncm91cCBvbi5cbiAgICogQHJldHVybnMgQSBmaWx0ZXJlZCBmb3JtIGdyb3VwLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZUZvcm1zRm9yU2VjdGlvbihzZWN0aW9uOiBTZWN0aW9uLCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm06IEZvcm1Hcm91cCk6IEZvcm1Hcm91cCB7XG4gICAgY29uc3Qgc2VjdGlvbkZvcm1zOiBGb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHt9KTtcbiAgICBmb3IgKGNvbnN0IHF1ZXN0aW9uIG9mIHNlY3Rpb24ucXVlc3Rpb25zKSB7XG4gICAgICBpZiAocXVlc3Rpb24udHlwZSA9PT0gUXVlc3Rpb25UeXBlLkluZm8pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHF1ZXN0aW9uQ29udHJvbCA9IHRoaXMuZ2VuZXJhdGVDb250cm9sRm9yUXVlc3Rpb24ocXVlc3Rpb24sIHNlY3Rpb24sIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSk7XG4gICAgICBzZWN0aW9uRm9ybXMuYWRkQ29udHJvbChxdWVzdGlvbi5uYW1lLCBxdWVzdGlvbkNvbnRyb2wpO1xuICAgIH1cbiAgICByZXR1cm4gc2VjdGlvbkZvcm1zO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYW4gYXN0cmFjdCBmb3JtIGNvbnRyb2wgYmFzZWQgb24gdGhlIHF1ZXN0aW9uIGRhdGEuXG4gICAqIEBwYXJhbSBxdWVzdGlvbiBUaGUgcXVlc3Rpb24gZGF0YSB0byBidWlsZCB0aGUgYWJzdHJhY3QgY29udHJvbCBvbi5cbiAgICogQHJldHVybnMgQW4gYWJzdHJhY3QgY29udHJvbC5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVDb250cm9sRm9yUXVlc3Rpb24ocXVlc3Rpb246IFF1ZXN0aW9uLCBzZWN0aW9uOiBTZWN0aW9uLCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm06IEZvcm1Hcm91cCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgY29uc3QgY29udmVydGVkVmFsaWRhdG9ycyA9IHRoaXMuY29udmVydFZhbGlkYXRvcnMocXVlc3Rpb24udmFsaWRhdG9ycyk7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gcXVlc3Rpb24uZGVmYXVsdFZhbHVlID8gcXVlc3Rpb24uZGVmYXVsdFZhbHVlIDogbnVsbDtcbiAgICBzd2l0Y2ggKHF1ZXN0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgUXVlc3Rpb25UeXBlLlJlcGVhdGVyOlxuICAgICAgICBjb25zdCBuZXdBcnJheSA9IHRoaXMuZmIuYXJyYXkoW10sIGNvbnZlcnRlZFZhbGlkYXRvcnMpO1xuICAgICAgICBjb25zdCBjdXJyZW50QXJyYXkgPSBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0gPyAoY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLmdldChbc2VjdGlvbi5uYW1lLCBxdWVzdGlvbi5uYW1lXSkgYXMgRm9ybUFycmF5KSA6IGZhbHNlO1xuXG4gICAgICAgIGlmIChjdXJyZW50QXJyYXkgJiYgcXVlc3Rpb24uZmlsdGVyZWRSZXBlYXRlclF1ZXN0aW9ucykge1xuICAgICAgICAgIGZvciAoY29uc3QgY29udHJvbCBvZiBjdXJyZW50QXJyYXkuY29udHJvbHMpIHtcblxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjdXJyZW50QXJyYXkuY29udHJvbHMuaW5kZXhPZihjb250cm9sKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRRdWVzdGlvbnMgPSBxdWVzdGlvbi5maWx0ZXJlZFJlcGVhdGVyUXVlc3Rpb25zW2luZGV4XTtcblxuICAgICAgICAgICAgaWYgKCFmaWx0ZXJlZFF1ZXN0aW9ucykge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRRdWVzdGlvbk5hbWVzID0gZmlsdGVyZWRRdWVzdGlvbnMubWFwKHggPT4geC5uYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkT3V0UXVlc3Rpb25zID0gcXVlc3Rpb24ucmVwZWF0ZXJRdWVzdGlvbnMuZmlsdGVyKHggPT4gIWZpbHRlcmVkUXVlc3Rpb25OYW1lcy5pbmNsdWRlcyh4Lm5hbWUpKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBmaWx0ZXJlZE91dFF1ZXN0aW9uIG9mIGZpbHRlcmVkT3V0UXVlc3Rpb25zKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNoaWxkQ29udHJvbCA9IGNvbnRyb2wuZ2V0KGZpbHRlcmVkT3V0UXVlc3Rpb24ubmFtZSk7XG4gICAgICAgICAgICAgIGNoaWxkQ29udHJvbC5zZXRWYWxpZGF0b3JzKFtdKTtcbiAgICAgICAgICAgICAgY2hpbGRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZmlsdGVyZWRRdWVzdGlvbiBvZiBmaWx0ZXJlZFF1ZXN0aW9ucykge1xuICAgICAgICAgICAgICBjb25zdCBjaGlsZENvbnRyb2wgPSBjb250cm9sLmdldChmaWx0ZXJlZFF1ZXN0aW9uLm5hbWUpO1xuXG4gICAgICAgICAgICAgIGlmIChjaGlsZENvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGEgdmFsdWUganVzdCBza2lwIGl0LCBubyBuZWVkIHRvIHJlZG8gdGhlIHZhbGlkYXRvcnMgZWFjaCB0aW1lLlxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgY29udmVydGVkVmFsaWRhdG9ycyA9IHRoaXMuY29udmVydFZhbGlkYXRvcnMoZmlsdGVyZWRRdWVzdGlvbi52YWxpZGF0b3JzKTtcbiAgICAgICAgICAgICAgY2hpbGRDb250cm9sLnNldFZhbGlkYXRvcnMoY29udmVydGVkVmFsaWRhdG9ycyk7XG4gICAgICAgICAgICAgIGNoaWxkQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjdXJyZW50QXJyYXkgPyBjdXJyZW50QXJyYXkgOiBuZXdBcnJheTtcbiAgICAgIGNhc2UgUXVlc3Rpb25UeXBlLkNoZWNrbGlzdDpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVHcm91cEZvckNoZWNrbGlzdChxdWVzdGlvbiwgY29udmVydGVkVmFsaWRhdG9ycyk7XG4gICAgICBjYXNlIFF1ZXN0aW9uVHlwZS5TbGlkZXI6XG4gICAgICAgIHJldHVybiB0aGlzLmZiLmNvbnRyb2woZGVmYXVsdFZhbHVlLCB7IHZhbGlkYXRvcnM6IGNvbnZlcnRlZFZhbGlkYXRvcnMgfSk7IC8vIFJlbW92ZSB1cGRhdGUgb24gYmx1ciBmb3Igc2xpZGVycy5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aGlzLmZiLmNvbnRyb2woZGVmYXVsdFZhbHVlLCB7IHZhbGlkYXRvcnM6IGNvbnZlcnRlZFZhbGlkYXRvcnMsIHVwZGF0ZU9uOiAnYmx1cicgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyB0aGUgZm9ybSBncm91cCBmb3IgYSBjaGVja2xpc3QgcXVlc3Rpb24uXG4gICAqIEBwYXJhbSBxdWVzdGlvbiBUaGUgcXVlc3Rpb24uIE11c3QgYmUgb2YgdHlwZSBjaGVja2xpc3Qgb3IgZWxzZSBudWxsIGlzIHJldHVybmVkLlxuICAgKiBAcmV0dXJucyBBIGZvcm0gZ3JvdXAuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwcml2YXRlIGdlbmVyYXRlR3JvdXBGb3JDaGVja2xpc3QocXVlc3Rpb246IFF1ZXN0aW9uLCBjb252ZXJ0ZWRWYWxpZGF0b3JzKSB7XG4gICAgaWYgKHF1ZXN0aW9uLnR5cGUgIT09IFF1ZXN0aW9uVHlwZS5DaGVja2xpc3QgfHwgcXVlc3Rpb24uY2hlY2tsaXN0SXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjaGVja2xpc3RGb3JtczogRm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XG4gICAgZm9yIChjb25zdCBjaGVja2xpc3RJdGVtIG9mIHF1ZXN0aW9uLmNoZWNrbGlzdEl0ZW1zKSB7XG4gICAgICBjb25zdCBjaGVja2xpc3RJdGVtQ29udHJvbCA9IHRoaXMuZmIuY29udHJvbChudWxsLCBjb252ZXJ0ZWRWYWxpZGF0b3JzKTtcbiAgICAgIGNoZWNrbGlzdEZvcm1zLmFkZENvbnRyb2woY2hlY2tsaXN0SXRlbS5uYW1lLCBjaGVja2xpc3RJdGVtQ29udHJvbCk7XG4gICAgfVxuICAgIHJldHVybiBjaGVja2xpc3RGb3JtcztcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyB0aGUgZm9ybSB0ZW1wbGF0ZSBmb3IgYSByZXBlYXRlciBxdWVzdGlvbi5cbiAgICogQHBhcmFtIHF1ZXN0aW9uIFRoZSBxdWVzdGlvbi4gTXVzdCBiZSBvZiB0eXBlIHJlcGVhdGVyIG9yIGVsc2UgbnVsbCBpcyByZXR1cm5lZC5cbiAgICogQHJldHVybnMgQSBmb3JtIGdyb3VwLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIGdlbmVyYXRlRm9ybXNGb3JSZXBlYXRlcihxdWVzdGlvbjogUXVlc3Rpb24sIGluZGV4PzogYW55KTogRm9ybUdyb3VwIHtcbiAgICBpZiAocXVlc3Rpb24udHlwZSAhPT0gUXVlc3Rpb25UeXBlLlJlcGVhdGVyIHx8IHF1ZXN0aW9uLnJlcGVhdGVyUXVlc3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS5sb2coJ1F1ZXN0aW9uIGlzbnQgYSByZXBlYXRlciBvciBoYXMgbm8gcXVlc3Rpb25zLCByZXR1cm5pbmcgbnVsbCcpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVwZWF0ZXJGb3JtczogRm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XG5cbiAgICBmb3IgKGNvbnN0IHJlcGVhdGVyUXVlc3Rpb24gb2YgcXVlc3Rpb24ucmVwZWF0ZXJRdWVzdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlcGVhdGVyUXVlc3Rpb25Db250cm9sID0gdGhpcy5nZW5lcmF0ZUNvbnRyb2xGb3JSZXBlYXRlclF1ZXN0aW9uKHJlcGVhdGVyUXVlc3Rpb24pO1xuICAgICAgcmVwZWF0ZXJGb3Jtcy5hZGRDb250cm9sKHJlcGVhdGVyUXVlc3Rpb24ubmFtZSwgcmVwZWF0ZXJRdWVzdGlvbkNvbnRyb2wpO1xuICAgIH1cblxuICAgIHJldHVybiByZXBlYXRlckZvcm1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIGNvbnRyb2wgZm9yIGEgcmVwZWF0ZXJzIHF1ZXN0aW9uLlxuICAgKiBAcGFyYW0gcmVwZWF0ZXJRdWVzdGlvbiBBIHJlcGVhdGVyIHF1ZXN0aW9uLlxuICAgKiBAcmV0dXJucyBBbiBhYnN0cmFjdCBjb250cm9sLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZUNvbnRyb2xGb3JSZXBlYXRlclF1ZXN0aW9uKHJlcGVhdGVyUXVlc3Rpb246IFJlcGVhdGVyUXVlc3Rpb24pOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIGNvbnN0IGNvbnZlcnRlZFZhbGlkYXRvcnMgPSB0aGlzLmNvbnZlcnRWYWxpZGF0b3JzKHJlcGVhdGVyUXVlc3Rpb24udmFsaWRhdG9ycyk7XG4gICAgcmV0dXJuIHRoaXMuZmIuY29udHJvbChudWxsLCB7IHZhbGlkYXRvcnM6IGNvbnZlcnRlZFZhbGlkYXRvcnMsIHVwZGF0ZU9uOiByZXBlYXRlclF1ZXN0aW9uLnR5cGUgPT09ICdzZWxlY3QnID8gJ2NoYW5nZScgOiAnYmx1cicgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYW4gYXJyYXkgb2YgdmFsaWRhdG9ycyBpbnRvIGZvcm0gdmFsaWRhdG9ycy5cbiAgICogQHBhcmFtIHZhbGlkYXRvcnMgVGhlIHVuY292ZXJ0ZWQgYXJyYXkgb2YgdmFsaWRhdG9ycy5cbiAgICogQHJldHVybnMgQSBjb252ZXJlZCBhcnJheSBvZiBmb3JtIHZhbGlkYXRvcnMuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRWYWxpZGF0b3JzKHZhbGlkYXRvcnM6IEFycmF5PFZhbGlkYXRvcj4pOiBBcnJheTxWYWxpZGF0b3JGbj4ge1xuICAgIGlmICghdmFsaWRhdG9ycyB8fCB2YWxpZGF0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBjb252ZXJ0ZWRWYWxpZGF0b3JzOiBBcnJheTxWYWxpZGF0b3JGbj4gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHZhbGlkYXRvciBvZiB2YWxpZGF0b3JzKSB7XG4gICAgICBjb25zdCBjb252ZXJ0ZWRWYWxpZGF0b3IgPSB0aGlzLmNvbnZlcnRWYWxpZGF0b3IodmFsaWRhdG9yKTtcbiAgICAgIGlmIChjb252ZXJ0ZWRWYWxpZGF0b3IpIHtcbiAgICAgICAgY29udmVydGVkVmFsaWRhdG9ycy5wdXNoKGNvbnZlcnRlZFZhbGlkYXRvcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb252ZXJ0ZWRWYWxpZGF0b3JzO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgc2luZ2xlIHZhbGlkYXRvciBpbnRvIGEgZm9ybSB2YWxpZGF0b3IuXG4gICAqIEBwYXJhbSB2YWxpZGF0b3IgVGhlIHVuY29udmVydGVkIHZhbGlkYXRvci5cbiAgICogQHJldHVybnMgQSBjb252ZXJ0ZWQgZm9ybSB2YWxpZGF0b3IuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRWYWxpZGF0b3IodmFsaWRhdG9yOiBWYWxpZGF0b3IpOiBWYWxpZGF0b3JGbiB8IG51bGwge1xuICAgIHN3aXRjaCAodmFsaWRhdG9yLnR5cGUpIHtcbiAgICAgIGNhc2UgVmFsaWRhdGlvblR5cGUuUmVxdWlyZWQ6XG4gICAgICAgIHJldHVybiBWYWxpZGF0b3JzLnJlcXVpcmVkO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgdGhlIGZvcm1zIGZvciByZXBlYXRlcnMgZnJvbSBzYXZlZCBzdGF0ZS5cbiAgICogQHBhcmFtIHNhdmVkU3RhdGUgVGhlIHNhdmVkIHN0YXRlIHRvIGxvYWQuXG4gICAqIEBwYXJhbSBzZWN0aW9ucyBUaGUgc2VjdGlvbnMgYWxyZWFkeSBnZW5lcmF0ZWQgYnkgdGhlIGZvcm0gY29uc3RydWN0b3IuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0UmVwZWF0ZXJGcm9tc0Zyb21TdGF0ZShzYXZlZFN0YXRlOiBhbnksIHNlY3Rpb25zOiBBcnJheTxTZWN0aW9uPiwgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtOiBGb3JtR3JvdXApIHtcbiAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHtcbiAgICAgIGZvciAoY29uc3QgcXVlc3Rpb24gb2Ygc2VjdGlvbi5xdWVzdGlvbnMpIHtcbiAgICAgICAgaWYgKHF1ZXN0aW9uLnR5cGUgIT09IFF1ZXN0aW9uVHlwZS5SZXBlYXRlcikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVwZWF0ZXJBcnJheSA9IHNhdmVkU3RhdGVbc2VjdGlvbi5uYW1lXVtxdWVzdGlvbi5uYW1lXTtcbiAgICAgICAgaWYgKCFyZXBlYXRlckFycmF5IHx8IHJlcGVhdGVyQXJyYXkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXBlYXRlckZvcm1BcnJheSA9IGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybS5nZXQoW3NlY3Rpb24ubmFtZSwgcXVlc3Rpb24ubmFtZV0pIGFzIEZvcm1BcnJheTtcblxuICAgICAgICBpZiAocmVwZWF0ZXJGb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoID09PSByZXBlYXRlckFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRm9yIGVhY2ggaXRlbSB0aGF0IHVzZWQgdG8gYmUgdGhlcmUgcHVzaCBhIG5ldyBlbXB0eSB0ZW1wbGF0ZSB0aGVyZSB0byBiZSBwb3B1bGF0ZWQuXG4gICAgICAgIGZvciAoY29uc3QgcmVwZWF0ZXJJdGVtIG9mIHJlcGVhdGVyQXJyYXkpIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHJlcGVhdGVyQXJyYXkuaW5kZXhPZihyZXBlYXRlckl0ZW0pO1xuICAgICAgICAgIGNvbnN0IHJlcGVhdGVySXRlbVRlbXBsYXRlID0gdGhpcy5nZW5lcmF0ZUZvcm1zRm9yUmVwZWF0ZXIocXVlc3Rpb24sIGluZGV4KTtcbiAgICAgICAgICByZXBlYXRlckZvcm1BcnJheS5wdXNoKHJlcGVhdGVySXRlbVRlbXBsYXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19