master-control 0.2.5 → 0.2.6

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.
@@ -0,0 +1,601 @@
1
+ import { GoogleMapsModule } from '@angular/google-maps';
2
+ import { Component, Input, ViewChild, input } from '@angular/core';
3
+ import * as questionsResponse from './questions.json';
4
+ import { CommonModule } from '@angular/common';
5
+ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
6
+ import { TextboxComponent } from '../textbox/textbox.component';
7
+ import { RadioComponent } from '../radio/radio.component';
8
+ import { CheckboxComponent } from '../checkbox/checkbox.component';
9
+ import { SelectComponent } from '../select/select.component';
10
+ import { DobComponent } from '../dob/dob.component';
11
+ import { UploadComponent } from '../upload/upload.component';
12
+ import { MultipleSelectComponent } from '../multiple-select/multiple-select.component';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "@angular/common";
15
+ import * as i2 from "@angular/forms";
16
+ import * as i3 from "@angular/google-maps";
17
+ export class MedialQuestionsComponent {
18
+ ngZone;
19
+ medialQuestionResponse = questionsResponse;
20
+ addressInput;
21
+ autocomplete;
22
+ field = input.required();
23
+ questionList = [];
24
+ currentCoordinates = {};
25
+ personUwResponseObj = [];
26
+ center = { lat: 40.73061, lng: -73.935242 };
27
+ latitude;
28
+ longitude;
29
+ zoom;
30
+ marker = {};
31
+ personUwAnswers = {
32
+ medicalQuestionsHeightUnit: 'FEET',
33
+ };
34
+ medQuestionObj = {};
35
+ listOfDomainValuesForCheckBox = [];
36
+ medicalQuestionsFeetList = [];
37
+ medicalQuestionsInchesList = [];
38
+ questionHeader = ['eia details', 'abha details', 'pep details'];
39
+ medicalQuestionsHeightUnitTypes = [
40
+ {
41
+ label: 'Cm',
42
+ value: 'CM'
43
+ },
44
+ {
45
+ label: 'Feet',
46
+ value: 'FEET'
47
+ }
48
+ ];
49
+ showDropdown = false;
50
+ addressSuggestions = [];
51
+ hoveredIndex = -1;
52
+ searchTimeout;
53
+ constructor(ngZone) {
54
+ this.ngZone = ngZone;
55
+ console.log('medialQuestionResponseeeeee', this.medialQuestionResponse);
56
+ }
57
+ ngOnInit() {
58
+ if ('geolocation' in navigator) {
59
+ navigator.geolocation.getCurrentPosition((position) => {
60
+ this.latitude = position.coords.latitude;
61
+ this.longitude = position.coords.longitude;
62
+ this.zoom = 15;
63
+ this.currentCoordinates = {
64
+ lat: this.latitude,
65
+ lng: this.longitude,
66
+ };
67
+ this.center = { ...this.currentCoordinates };
68
+ });
69
+ }
70
+ this.preparePersonUwQuestionsObj();
71
+ }
72
+ ngAfterViewInit() {
73
+ this.initializeAutocomplete();
74
+ }
75
+ initializeAutocomplete() {
76
+ this.autocomplete = new google.maps.places.Autocomplete(this.addressInput?.nativeElement, {
77
+ types: ['address'],
78
+ componentRestrictions: { country: 'IN' },
79
+ fields: ['place_id', 'geometry', 'name', 'formatted_address']
80
+ });
81
+ this.autocomplete.addListener('place_changed', () => {
82
+ this.ngZone.run(() => {
83
+ this.onPlaceSelected();
84
+ });
85
+ });
86
+ }
87
+ onPlaceSelected() {
88
+ const place = this.autocomplete.getPlace();
89
+ if (!place.geometry || !place.geometry.location) {
90
+ console.log('No details available for input: ', place.name);
91
+ return;
92
+ }
93
+ const location = place.geometry.location;
94
+ this.center = {
95
+ lat: location.lat(),
96
+ lng: location.lng()
97
+ };
98
+ this.currentCoordinates = this.center;
99
+ if (place.geometry.viewport) {
100
+ this.zoom = 15;
101
+ }
102
+ else {
103
+ this.zoom = 13;
104
+ }
105
+ console.log('Selected place:', {
106
+ name: place.name,
107
+ address: place.formatted_address,
108
+ coordinates: this.center
109
+ });
110
+ this.storeSelectedAddress(place);
111
+ }
112
+ storeSelectedAddress(place) {
113
+ const addressData = {
114
+ placeId: place.place_id,
115
+ name: place.name,
116
+ formattedAddress: place.formatted_address,
117
+ coordinates: this.center
118
+ };
119
+ }
120
+ searchAddress(address) {
121
+ const geocoder = new google.maps.Geocoder();
122
+ geocoder.geocode({ address: address }, (results, status) => {
123
+ if (status === 'OK' && results && results[0]) {
124
+ const location = results[0].geometry.location;
125
+ this.ngZone.run(() => {
126
+ this.center = {
127
+ lat: location.lat(),
128
+ lng: location.lng()
129
+ };
130
+ this.currentCoordinates = this.center;
131
+ this.zoom = 15;
132
+ });
133
+ }
134
+ else {
135
+ console.log('Geocode was not successful for the following reason: ' + status);
136
+ }
137
+ });
138
+ }
139
+ onAddressInputKeyup(event) {
140
+ const query = event.target.value;
141
+ // Clear previous timeout
142
+ if (this.searchTimeout) {
143
+ clearTimeout(this.searchTimeout);
144
+ }
145
+ // Handle arrow key navigation
146
+ if (event.key === 'ArrowDown') {
147
+ this.hoveredIndex = Math.min(this.hoveredIndex + 1, this.addressSuggestions.length - 1);
148
+ return;
149
+ }
150
+ else if (event.key === 'ArrowUp') {
151
+ this.hoveredIndex = Math.max(this.hoveredIndex - 1, -1);
152
+ return;
153
+ }
154
+ else if (event.key === 'Enter') {
155
+ if (this.hoveredIndex >= 0 && this.addressSuggestions[this.hoveredIndex]) {
156
+ this.selectAddress(this.addressSuggestions[this.hoveredIndex]);
157
+ }
158
+ return;
159
+ }
160
+ else if (event.key === 'Escape') {
161
+ this.showDropdown = false;
162
+ return;
163
+ }
164
+ if (query.length < 2) {
165
+ this.addressSuggestions = [];
166
+ this.showDropdown = false;
167
+ return;
168
+ }
169
+ this.searchTimeout = setTimeout(() => {
170
+ this.searchAddresses(query);
171
+ }, 300);
172
+ }
173
+ searchAddresses(query) {
174
+ // Replace this with your actual address search API call
175
+ // For example, using Google Places API:
176
+ const service = new google.maps.places.AutocompleteService();
177
+ service.getPlacePredictions({
178
+ input: query,
179
+ types: ['address']
180
+ }, (predictions, status) => {
181
+ if (status === google.maps.places.PlacesServiceStatus.OK && predictions) {
182
+ this.addressSuggestions = predictions.map(prediction => ({
183
+ place_id: prediction.place_id,
184
+ main_text: prediction.structured_formatting.main_text,
185
+ secondary_text: prediction.structured_formatting.secondary_text,
186
+ description: prediction.description
187
+ }));
188
+ this.showDropdown = true;
189
+ this.hoveredIndex = -1;
190
+ }
191
+ else {
192
+ this.addressSuggestions = [];
193
+ this.showDropdown = false;
194
+ }
195
+ });
196
+ }
197
+ selectAddress(suggestion) {
198
+ const addressInput = document.querySelector('#addressInput');
199
+ if (addressInput) {
200
+ addressInput.value = suggestion.description;
201
+ }
202
+ const service = new google.maps.places.PlacesService(document.createElement('div'));
203
+ service.getDetails({
204
+ placeId: suggestion.place_id,
205
+ fields: ['geometry', 'formatted_address']
206
+ }, (place, status) => {
207
+ if (status === google.maps.places.PlacesServiceStatus.OK && place) {
208
+ const lat = place.geometry?.location?.lat();
209
+ const lng = place.geometry?.location?.lng();
210
+ if (lat !== undefined && lng !== undefined) {
211
+ this.longitude = lng;
212
+ this.latitude = lat;
213
+ this.center = { lat, lng };
214
+ this.currentCoordinates = this.center;
215
+ }
216
+ }
217
+ });
218
+ this.showDropdown = false;
219
+ this.addressSuggestions = [];
220
+ }
221
+ onInputBlur() {
222
+ setTimeout(() => {
223
+ this.showDropdown = false;
224
+ }, 200);
225
+ }
226
+ preparePersonUwQuestionsObj() {
227
+ this.questionList = [];
228
+ let data = questionsResponse;
229
+ this.listOfDomainValuesForCheckBox = [];
230
+ if (!this.checkIfValueIsEmpty(data['questionsResponse'])) {
231
+ let personUwIdArray = [];
232
+ data['questionsResponse'].forEach((singleQuestionObj) => {
233
+ personUwIdArray.push(singleQuestionObj['personUWId']);
234
+ });
235
+ if (!this.checkIfValueIsEmpty(data) && !this.checkIfValueIsEmpty(data['questionsResponse'])) {
236
+ if (!this.checkIfValueIsEmpty(data['questionsResponse'])) {
237
+ let distinctSteps = [];
238
+ data['questionsResponse'].forEach((singlePersonObject) => {
239
+ if (!this.checkIfValueIsEmpty(singlePersonObject['questionList'])) {
240
+ singlePersonObject['questionList'].forEach((singleQuestion) => {
241
+ singleQuestion['domainValues'] = data['domainValues'][singleQuestion['domainName']];
242
+ singleQuestion['field'] = this.getField(singleQuestion);
243
+ if (singleQuestion['cammundaQuestionCode'] === 'PAN') {
244
+ singleQuestion['validations'] = '{"Type":"AlphaNumeric","MinValue":"10","MaxValue":"10","regexPattern":"/^([a-zA-Z]){5}([0-9]){4}([a-zA-Z]){1}?$/"}';
245
+ }
246
+ // if (singleQuestion['cammundaQuestionCode'] === 'FtcaCntcDetls') {
247
+ // singleQuestion['validations'] = '{"customValidation":[{"country":"IN","MinValue":"10","MaxValue":"10","regexPattern":"((^[6-9]){1}([0-9]){9}$)"},{"country":"OTHER","MinValue":"5","MaxValue":"14"}]}';
248
+ // }
249
+ if (singleQuestion['questionType'] === 'CHECKBOX' &&
250
+ !this.checkIfValueIsEmpty(singleQuestion['questionRelation'])) {
251
+ singleQuestion['questionRelation'].forEach((singleQuestionRelationObj) => {
252
+ let nextQuestionObject = singlePersonObject['questionList'].filter((object) => object['questionId'] === singleQuestionRelationObj['nextQuestionId']);
253
+ if (nextQuestionObject.length > 0) {
254
+ nextQuestionObject[0]['answeredValue'] = singleQuestionRelationObj['parentQuestionValue'];
255
+ }
256
+ });
257
+ }
258
+ if (singleQuestion['questionType'] === 'CHECKBOX') {
259
+ if (!this.checkIfValueIsEmpty(singleQuestion['domainName']) && !this.checkIfValueIsEmpty(data['domainValues'][singleQuestion['domainName']])) {
260
+ data['domainValues'][singleQuestion['domainName']].forEach((singleDomainValue) => {
261
+ if (!this.checkIfValueIsEmpty(singleDomainValue['domainInternalValue'])) {
262
+ this.listOfDomainValuesForCheckBox.push(singleDomainValue['domainInternalValue']);
263
+ }
264
+ });
265
+ }
266
+ }
267
+ if (!distinctSteps.includes(singleQuestion['step'])) {
268
+ distinctSteps.push(singleQuestion['step']);
269
+ }
270
+ singleQuestion['isMedicalSubQuestion'] = false;
271
+ });
272
+ singlePersonObject['questionList'].forEach((question) => {
273
+ question['isShowQuestionInUI'] = false;
274
+ if (question['questionType'] === 'IMAGE TEXT') {
275
+ question['questionText'] = question['questionText'].replaceAll('\\n', '<br>');
276
+ }
277
+ if (question['cammundaQuestionCode'] === 'QHTF') {
278
+ this.medicalQuestionsFeetList = question['domainValues'];
279
+ this.medQuestionObj['QHTF'] = question;
280
+ this.medQuestionObj['QHTF']['field']['isShowLabel'] = false;
281
+ }
282
+ if (question['cammundaQuestionCode'] === 'QHTI') {
283
+ this.medicalQuestionsInchesList = question['domainValues'];
284
+ this.medQuestionObj['QHTI'] = question;
285
+ this.medQuestionObj['QHTI']['field']['isShowLabel'] = false;
286
+ }
287
+ if (question['questionType'] === 'DECLARATION') {
288
+ if (question['cammundaQuestionCode'] === 'recvSftCopy') {
289
+ // this.personUwAnswers[singlePersonObject['role']][] = false;
290
+ question['domainValues'] = [];
291
+ question['domainValues'].push({
292
+ domainInternalValue: question['questionId'],
293
+ domainUiValue: 'N'
294
+ });
295
+ }
296
+ question['domainValues'] = [];
297
+ question['domainValues'].push({
298
+ domainInternalValue: question['questionId'],
299
+ domainUiValue: 'Y'
300
+ });
301
+ }
302
+ if (question['cammundaQuestionCode'] === 'hardCopyLang') {
303
+ question['questionType'] = 'HARD COPY';
304
+ }
305
+ });
306
+ singlePersonObject['questionList'].sort((a, b) => a['step'] - b['step'] || a['displayOrder'] - b['displayOrder']);
307
+ }
308
+ let questionsListForLA = [];
309
+ distinctSteps.forEach((steps) => {
310
+ let filteredObj = singlePersonObject['questionList'].filter((singleQuestion) => singleQuestion['step'] === steps);
311
+ let obj = {
312
+ step: steps,
313
+ personUWId: singlePersonObject['personUWId'].toString(),
314
+ questions: !this.checkIfValueIsEmpty(filteredObj) ? filteredObj : [],
315
+ sectionName: !this.checkIfValueIsEmpty(filteredObj) ? filteredObj[0]['title'] : '',
316
+ isMedicalSubQuestion: false,
317
+ showSection: true
318
+ };
319
+ if (!this.checkIfValueIsEmpty(filteredObj)) {
320
+ // Hard Copy and Map question
321
+ let filteredHardCopyQuestion = filteredObj.filter((singleQuestion) => singleQuestion['cammundaQuestionCode'] === 'recvSftCopy');
322
+ if (!this.checkIfValueIsEmpty(filteredHardCopyQuestion)) {
323
+ obj['questions'].push({
324
+ questionType: "MAP",
325
+ isShowQuestionInUI: true,
326
+ parentQuestionRelation: {
327
+ parentQuestionId: filteredHardCopyQuestion[0]['questionId'],
328
+ parentQuestionAnswer: 'Y'
329
+ }
330
+ });
331
+ }
332
+ // if NRI then passport upload is required
333
+ let filteredNationalityQuestion = filteredObj.filter((singleQuestion) => singleQuestion['cammundaQuestionCode'] === 'Nationality');
334
+ if (!this.checkIfValueIsEmpty(filteredNationalityQuestion)) {
335
+ singlePersonObject['questionList'].push({
336
+ questionType: "PASSPORT_UPLOAD",
337
+ optionalQuestion: 'N',
338
+ questionText: 'Passport Details ',
339
+ isShowQuestionInUI: true,
340
+ parentQuestionRelation: {
341
+ parentQuestionId: filteredNationalityQuestion[0]['questionId'],
342
+ parentQuestionAnswer: 'forgnNational'
343
+ }
344
+ });
345
+ obj['questions'].push({
346
+ questionType: "PASSPORT_UPLOAD",
347
+ optionalQuestion: 'N',
348
+ questionText: 'Passport Details ',
349
+ isShowQuestionInUI: true,
350
+ parentQuestionRelation: {
351
+ parentQuestionId: filteredNationalityQuestion[0]['questionId'],
352
+ parentQuestionAnswer: 'forgnNational'
353
+ }
354
+ });
355
+ }
356
+ }
357
+ questionsListForLA.push(obj);
358
+ });
359
+ // let lifeAssuredObjectIndexInMaster: any = this.questionList.findIndex((singleObj: any) => singleObj['role'] === singlePersonObject['role']);
360
+ // if (lifeAssuredObjectIndexInMaster !== this.numberMinusOne) {
361
+ this.questionList = questionsListForLA;
362
+ // }
363
+ });
364
+ this.personUwResponseObj = data['questionsResponse'];
365
+ }
366
+ }
367
+ }
368
+ this.removeSubQuestionValues();
369
+ this.medQuestionObj['heightObjectTypes'] = {
370
+ "controlStyle": {},
371
+ "fieldName": null,
372
+ "label": "feet / inches",
373
+ "placeHolder": "",
374
+ "metaId": "",
375
+ "isVisible": true,
376
+ "isDisable": false,
377
+ "validators": {
378
+ "isRequired": false,
379
+ "requiredMessage": "This field cannot be empty",
380
+ "minLength": null,
381
+ "minLengthMessage": null,
382
+ "maxLength": 150,
383
+ "maxLengthMessage": null,
384
+ "pattern": null,
385
+ "patternMessage": ""
386
+ },
387
+ "options": [
388
+ {
389
+ "label": "Cm",
390
+ "value": "CM"
391
+ },
392
+ {
393
+ "label": "Feet",
394
+ "value": "FEET"
395
+ }
396
+ ],
397
+ "cssClass": null,
398
+ "value": null,
399
+ "style": null,
400
+ "imageUrl": null,
401
+ "configData": {},
402
+ "metaDataObj": null,
403
+ "isShowLabel": false,
404
+ "isMasterControl": false,
405
+ "controlType": "select"
406
+ };
407
+ }
408
+ checkIfValueIsEmpty(value) {
409
+ if (typeof value === 'string') {
410
+ value = value.trim();
411
+ }
412
+ return (value === undefined ||
413
+ value === null ||
414
+ value === '' ||
415
+ (value instanceof Array && value.length === 0) ||
416
+ JSON.stringify(value) === '{}');
417
+ }
418
+ getTitleCase(header) {
419
+ if (header) {
420
+ if (this.questionHeader.includes(header.toLocaleLowerCase())) {
421
+ let val = header.split(' ');
422
+ return (val[0].toUpperCase() + ' ' + this.toTitleCase(val[1]));
423
+ }
424
+ else {
425
+ if (header.toUpperCase() === 'FATCA DETAILS') {
426
+ return header;
427
+ }
428
+ return this.toTitleCase(header);
429
+ }
430
+ }
431
+ }
432
+ toTitleCase(value) {
433
+ if (!this.checkIfValueIsEmpty(value)) {
434
+ return value.toString().replace(/\w\S*/g, (txt) => txt[0].toUpperCase() + txt.substr(1).toLowerCase());
435
+ }
436
+ }
437
+ getField(questionObj) {
438
+ let optionsObj = [];
439
+ if (questionObj['domainValues']) {
440
+ questionObj['domainValues'].forEach((singleOptionValue) => {
441
+ optionsObj.push({
442
+ label: singleOptionValue['domainUiValue'],
443
+ value: singleOptionValue['domainInternalValue'],
444
+ });
445
+ });
446
+ }
447
+ return {
448
+ configData: this.field()?.configData,
449
+ controlStyle: this.field()?.controlStyle,
450
+ controlType: questionObj['questionType'] === 'FREE TEXT' ? 'text' : (questionObj['questionType'] === 'RADIO BUTTON' || questionObj['questionType'] === 'ADDMORE') ? 'radio' : (questionObj['questionType'] === 'CHECKBOX' || questionObj['questionType'] === 'DECLARATION') ? 'checkbox' : questionObj['questionType'] === 'CALENDAR' ? 'date' : questionObj['questionType'] === 'DROPDOWN' ? 'select' : questionObj['questionType'] === 'DOCUPLOAD' ? 'file' : '',
451
+ fieldName: questionObj['cammundaQuestionCode'],
452
+ isDisable: false,
453
+ label: questionObj['questionText'],
454
+ placeHolder: questionObj['questionText'],
455
+ validators: {
456
+ isRequired: questionObj['optionalQuestion'] === 'N' ? true : false,
457
+ },
458
+ isVisible: true,
459
+ options: optionsObj,
460
+ isShowLabel: true,
461
+ };
462
+ }
463
+ removeSubQuestionValues(question) {
464
+ if (!this.checkIfValueIsEmpty(this.questionList)) {
465
+ this.questionList.forEach((singleSection) => {
466
+ if (!this.checkIfValueIsEmpty(singleSection['questions'])) {
467
+ singleSection['questions'].forEach((singleQuestion) => {
468
+ if (!this.showQuestion(singleQuestion)) {
469
+ singleQuestion['isShowQuestionInUI'] = false;
470
+ // if (singleQuestion['questionType'] === 'CHECKBOX' && !this.checkIfValueIsEmpty(singleQuestion['domainValues'])) {
471
+ // singleQuestion['domainValues'].forEach((domainValueObj: any) => {
472
+ // if (!this.checkIfValueIsEmpty(this.personUwAnswers[domainValueObj['domainInternalValue']])) {
473
+ // delete this.personUwAnswers[domainValueObj['domainInternalValue']];
474
+ // }
475
+ // });
476
+ // }
477
+ // if (singleQuestion['questionType'] !== 'CHECKBOX') {
478
+ if (!this.checkIfValueIsEmpty(this.personUwAnswers[singleQuestion['questionId']])) {
479
+ delete this.personUwAnswers[singleQuestion['questionId']];
480
+ }
481
+ // }
482
+ }
483
+ else {
484
+ singleQuestion['isShowQuestionInUI'] = true;
485
+ }
486
+ if (singleQuestion['questionType'] === 'CHECKBOX') {
487
+ if (!this.checkIfValueIsEmpty(singleQuestion['domainValues'])) {
488
+ let isNoneInDomainValues = singleQuestion['domainValues'].filter((singleObj) => singleObj['domainUiValue'].toUpperCase() === 'NONE');
489
+ singleQuestion['domainValues'].forEach((singleDomainValue) => {
490
+ if (!this.checkIfValueIsEmpty(isNoneInDomainValues) && !this.checkIfValueIsEmpty(this.personUwAnswers[isNoneInDomainValues[0]['domainInternalValue']]) && this.personUwAnswers[isNoneInDomainValues[0]['domainInternalValue']]) {
491
+ // none is selected
492
+ singleQuestion['domainValues'].forEach((singleDomainValue) => {
493
+ // remove all selected checkbox questions
494
+ if (singleDomainValue.domainUiValue.toUpperCase() !== 'NONE') {
495
+ singleDomainValue.isDisabled = true;
496
+ delete this.personUwAnswers[singleDomainValue['domainInternalValue']];
497
+ }
498
+ });
499
+ }
500
+ else {
501
+ singleDomainValue.isDisabled = false;
502
+ }
503
+ });
504
+ }
505
+ }
506
+ });
507
+ }
508
+ // let isSectionExistsInBlockedList: any = this.isBlockedQuestionsList.filter((singleBlockedObj: any) => singleBlockedObj['sectionTitle'].trim() === singleSection['sectionName'].trim());
509
+ // singleSection['showSection'] = !this.checkIfValueIsEmpty(singleSection['questions'].filter((singleQuestion: any) => singleQuestion['isShowQuestionInUI']))
510
+ // if (!this.checkIfValueIsEmpty(isSectionExistsInBlockedList)) {
511
+ // if (isSectionExistsInBlockedList[0].isBlockedForCustomerFlow && !this.loadingAgentportal) {
512
+ // singleSection['showSection'] = false;
513
+ // let filteredIndex: any = this.personUwResponseObj['questionsResponse'].findIndex((singlePersonObj: any) => singlePersonObj['role'] === singlePersonObj['role']);
514
+ // singleSection['questions'].forEach((singleQuestionObjInSection: any) => {
515
+ // let filteredQuestion: any = this.personUwResponseObj['questionsResponse'][filteredIndex]['questionList'].filter((singleQuestion: any) => singleQuestion['questionId'] === singleQuestionObjInSection['questionId']);
516
+ // if (!this.checkIfValueIsEmpty(filteredQuestion)) {
517
+ // filteredQuestion[0]['isShowQuestionInUI'] = singleSection['showSection'];
518
+ // }
519
+ // });
520
+ // }
521
+ // if ((isSectionExistsInBlockedList[0].isBlockedForAgentFlow || sessionStorage.getItem('agentChannel') === 'D20' || sessionStorage.getItem('agentChannel') === 'D05' || sessionStorage.getItem('agentChannel') === 'D06') && this.loadingAgentportal) {
522
+ // singleSection['showSection'] = false;
523
+ // let filteredIndex: any = this.personUwResponseObj['questionsResponse'].findIndex((singlePersonObj: any) => singlePersonObj['role'] === singlePersonObj['role']);
524
+ // singleSection['questions'].forEach((singleQuestionObjInSection: any) => {
525
+ // let filteredQuestion: any = this.personUwResponseObj['questionsResponse'][filteredIndex]['questionList'].filter((singleQuestion: any) => singleQuestion['questionId'] === singleQuestionObjInSection['questionId']);
526
+ // if (!this.checkIfValueIsEmpty(filteredQuestion)) {
527
+ // filteredQuestion[0]['isShowQuestionInUI'] = singleSection['showSection'];
528
+ // }
529
+ // });
530
+ // }
531
+ // }
532
+ let hiddenQuestions = this.questionList.filter((singleSectionObj) => !singleSectionObj['showSection']);
533
+ if (this.checkIfValueIsEmpty(hiddenQuestions)) {
534
+ hiddenQuestions.forEach((singleSection) => {
535
+ singleSection['questions'].forEach((singleQuestionObjInSection) => {
536
+ singleQuestionObjInSection['isShowQuestionInUI'] = false;
537
+ // let filteredQuestion: any = this.personUwResponseObj['questionsResponse'][0]['questionList'].filter((singleQuestion: any) => singleQuestion['questionId'] === singleQuestionObjInSection['questionId']);
538
+ // if (!this.checkIfValueIsEmpty(filteredQuestion)) {
539
+ // filteredQuestion[0]['isShowQuestionInUI'] = false;
540
+ // }
541
+ });
542
+ });
543
+ }
544
+ });
545
+ }
546
+ this.questionList.sort((a, b) => a['step'] - b['step']);
547
+ console.log('questions list', this.questionList);
548
+ console.log('questions answers', this.personUwAnswers);
549
+ }
550
+ showQuestion(currentQuestion) {
551
+ let showQuestion = false;
552
+ let subQuestions = [];
553
+ // let currentSectionIndex: any = questionsResponse['questionsResponse'].findIndex((singlePersonObj: any) => singlePersonObj['role'] === personRole)
554
+ // let role = this.personUwResponseObj['questionsResponse'][currentSectionIndex]['role']
555
+ this.personUwResponseObj[0].questionList.forEach((singleQuestion) => {
556
+ let isSubQuestionObject = [];
557
+ if (!this.checkIfValueIsEmpty(singleQuestion['questionRelation'])) {
558
+ isSubQuestionObject = singleQuestion['questionRelation'].filter((questionRelationObj) => questionRelationObj['nextQuestionId'] === currentQuestion['questionId']);
559
+ }
560
+ if (isSubQuestionObject.length > 0) {
561
+ subQuestions.push(singleQuestion);
562
+ isSubQuestionObject.forEach((singleSubQuestion) => {
563
+ if ((singleQuestion['questionType'] !== 'CHECKBOX' &&
564
+ (singleSubQuestion['parentQuestionValue'].toString()[0] !== '!' &&
565
+ this.personUwAnswers[singleQuestion['questionId']] ===
566
+ singleSubQuestion['parentQuestionValue'])) ||
567
+ (singleSubQuestion['parentQuestionValue'].toString()[0] === '!' &&
568
+ !this.checkIfValueIsEmpty(this.personUwAnswers[singleQuestion['questionId']]) &&
569
+ this.personUwAnswers[singleQuestion['questionId']] !==
570
+ singleSubQuestion['parentQuestionValue'].toString().split('!')[1]) ||
571
+ (singleQuestion['questionType'] === 'CHECKBOX' && !this.checkIfValueIsEmpty(this.personUwAnswers[singleQuestion['questionId']]) &&
572
+ this.personUwAnswers[singleQuestion['questionId']].filter((singleObj) => singleObj['value'] === singleSubQuestion['parentQuestionValue']).length > 0)) {
573
+ showQuestion = true;
574
+ }
575
+ });
576
+ }
577
+ });
578
+ if (this.checkIfValueIsEmpty(subQuestions) && this.checkIfValueIsEmpty(currentQuestion['parentQuestionRelation'])) {
579
+ showQuestion = true;
580
+ }
581
+ if (!this.checkIfValueIsEmpty(currentQuestion['parentQuestionRelation']) && !this.checkIfValueIsEmpty(currentQuestion['parentQuestionRelation']['parentQuestionId']) && !this.checkIfValueIsEmpty(this.personUwAnswers[currentQuestion['parentQuestionRelation']['parentQuestionId']]) && this.personUwAnswers[currentQuestion['parentQuestionRelation']['parentQuestionId']] === currentQuestion['parentQuestionRelation']['parentQuestionAnswer']) {
582
+ showQuestion = true;
583
+ }
584
+ if (currentQuestion['questionType'] === 'NODISPLAY') {
585
+ showQuestion = false;
586
+ }
587
+ return showQuestion;
588
+ }
589
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MedialQuestionsComponent, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
590
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: MedialQuestionsComponent, isStandalone: true, selector: "lib-medial-questions", inputs: { medialQuestionResponse: { classPropertyName: "medialQuestionResponse", publicName: "medialQuestionResponse", isSignal: false, isRequired: false, transformFunction: null }, field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null } }, viewQueries: [{ propertyName: "addressInput", first: true, predicate: ["addressInput"], descendants: true }], ngImport: i0, template: "\r\n<div *ngFor=\"let section of questionList\">\r\n <div\r\n *ngIf=\"\r\n !checkIfValueIsEmpty(section['questions']) &&\r\n section['showSection']\r\n \"\r\n class=\"card p-3 my-2\"\r\n id=\"personUwMedicalQuestions\"\r\n >\r\n <h6 class=\"page-title\">\r\n {{ getTitleCase(section[\"sectionName\"]) }}\r\n </h6>\r\n <div *ngFor=\"let questions of section['questions']\">\r\n <!-- <div *ngIf=\"questions['questionType'] === 'IMAGE TEXT'\">\r\n <img [src]=\"questions['sampleS3Link']\" class=\"d-block mx-auto\" [alt]=\"questions['title']\">\r\n <h3 [innerHTML]=\"questions['questionText']\"></h3>\r\n </div> -->\r\n\r\n <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'FREE TEXT' &&\r\n questions['cammundaQuestionCode'] !== 'QHT' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <label class=\"card-topic d-block\"\r\n >{{ questions[\"questionText\"] }}\r\n <span\r\n *ngIf=\"\r\n questions.optionalQuestion === 'N'\r\n \"\r\n style=\"color: #ee0000\"\r\n >&#42;</span\r\n >\r\n </label>\r\n <div class=\"col-5 px-0\">\r\n <lib-textbox [(ngModel)]=\"personUwAnswers[questions.questionId]\" [field]=\"questions['field']\" />\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'HEIGHTINPUT' &&\r\n questions['cammundaQuestionCode'] === 'QHTF' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <label class=\"card-topic d-block\"\r\n >Height\r\n <span\r\n style=\"color: #ee0000\"\r\n >&#42;</span\r\n >\r\n </label>\r\n <div\r\n class=\"col-auto px-0 my-0 py-0 heightinput\"\r\n\r\n >\r\n <div\r\n class=\"col-7 py-0 heightInputs\"\r\n style=\"transform: translate(6px, 3px);\"\r\n *ngIf=\"\r\n personUwAnswers['medicalQuestionsHeightUnit'] === 'CM'\r\n \"\r\n >\r\n <lib-textbox [field]=\"questions['field']\" />\r\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionsHeightUnit']\" [field]=\"medQuestionObj['heightObjectTypes']\" />\r\n </div>\r\n <div\r\n class=\"py-0\"\r\n style=\"display: flex;\"\r\n *ngIf=\"\r\n personUwAnswers[\r\n 'medicalQuestionsHeightUnit'\r\n ] === 'FEET'\r\n \"\r\n >\r\n <div class=\"col-auto py-0 heightInputs px-1\">\r\n <lib-select [field]=\"medQuestionObj['QHTF']['field']\" />\r\n </div>\r\n <div class=\"col-auto py-0 heightInputs px-1\">\r\n <lib-select [field]=\"medQuestionObj['QHTI']['field']\" />\r\n </div>\r\n <div\r\n class=\"col-auto py-0 heightInputs px-1\"\r\n >\r\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionsHeightUnit']\" [field]=\"medQuestionObj['heightObjectTypes']\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"row mt-0 pt-0\"\r\n *ngIf=\"\r\n questions['questionType'] === 'MAP' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n\r\n\r\n <div class=\"map-container\">\r\n <div class=\"address-search-container mb-3\">\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-6\">\r\n <label class=\"form-label\">Longitude</label>\r\n <input \r\n type=\"number\" \r\n class=\"form-control\"\r\n [(ngModel)]=\"longitude\"\r\n placeholder=\"Enter longitude\"\r\n step=\"any\"\r\n readonly\r\n >\r\n </div>\r\n <div class=\"col-6\">\r\n <label class=\"form-label\">Latitude</label>\r\n <input \r\n type=\"number\" \r\n class=\"form-control\"\r\n [(ngModel)]=\"latitude\"\r\n placeholder=\"Enter latitude\"\r\n step=\"any\"\r\n readonly\r\n >\r\n </div>\r\n </div>\r\n\r\n <input \r\n #addressInput \r\n type=\"text\" \r\n class=\"form-control\"\r\n placeholder=\"Search for address\"\r\n (keyup)=\"onAddressInputKeyup($event)\"\r\n (focus)=\"showDropdown = true\"\r\n (blur)=\"onInputBlur()\"\r\n autocomplete=\"off\"\r\n >\r\n <div \r\n *ngIf=\"showDropdown && addressSuggestions.length > 0\" \r\n class=\"autocomplete-dropdown position-absolute w-100 mt-1\"\r\n style=\"z-index: 1000; max-height: 200px; overflow-y: auto; background: white; border: 1px solid #ccc; border-radius: 4px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);\"\r\n >\r\n <div \r\n *ngFor=\"let suggestion of addressSuggestions; let i = index\"\r\n class=\"dropdown-item p-2\"\r\n style=\"cursor: pointer; border-bottom: 1px solid #eee;\"\r\n (mousedown)=\"selectAddress(suggestion)\"\r\n (mouseenter)=\"hoveredIndex = i\"\r\n [class.bg-light]=\"hoveredIndex === i\"\r\n >\r\n <div class=\"fw-bold\">{{ suggestion.main_text }}</div>\r\n <small class=\"text-muted\">{{ suggestion.secondary_text }}</small>\r\n </div>\r\n </div>\r\n <small class=\"text-muted\">Start typing to search for addresses</small>\r\n </div>\r\n <google-map [center]=\"center\" [zoom]=\"zoom\">\r\n <map-marker [position]=\"currentCoordinates\"></map-marker>\r\n </google-map>\r\n </div>\r\n </div>\r\n\r\n\r\n <div\r\n class=\"\"\r\n *ngIf=\"\r\n (questions['questionType'] === 'RADIO BUTTON' ||\r\n questions['questionType'] === 'ADDMORE') &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-radio [(ngModel)]=\"personUwAnswers[questions.questionId]\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"questions['field']\" />\r\n </div>\r\n\r\n <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'CHECKBOX' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-multiple-select [(ngModel)]=\"personUwAnswers[questions.questionId]\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"questions['field']\" />\r\n </div>\r\n\r\n <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'DECLARATION' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-checkbox [(ngModel)]=\"personUwAnswers[questions.questionId]\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"questions['field']\" />\r\n </div>\r\n\r\n <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'DROPDOWN' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-select [(ngModel)]=\"personUwAnswers[questions.questionId]\" [field]=\"questions['field']\" />\r\n </div>\r\n\r\n <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'CALENDAR' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-dob [(ngModel)]=\"personUwAnswers[questions.questionId]\" [field]=\"questions['field']\" />\r\n </div>\r\n\r\n <!-- <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'HEIGHTINPUT' &&\r\n questions['cammundaQuestionCode'] === 'QHTF' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n </div> -->\r\n <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'DOCUPLOAD' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-upload [field]=\"questions['field']\" />\r\n </div>\r\n\r\n\r\n <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'PASSPORT_UPLOAD' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <!-- pending -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n", styles: [".map-container{width:100%;position:relative}.address-search-container{position:relative}.address-search-container input{width:100%;padding:10px;border:1px solid #ddd;border-radius:4px;box-sizing:border-box}.address-search-container input:focus{outline:none;border-color:#4285f4;box-shadow:0 0 0 2px #4285f433}.pac-container{z-index:10000!important;border-radius:4px;border:1px solid #ddd;box-shadow:0 2px 6px #0000004d}.pac-item{padding:10px;border-bottom:1px solid #eee;cursor:pointer}.pac-item:hover{background-color:#f5f5f5}.selected-address{padding:8px;background-color:#f8f9fa;border-radius:4px;border-left:3px solid #28a745}.map-container ::ng-deep google-map>div{height:400px!important;width:auto!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: TextboxComponent, selector: "lib-textbox", inputs: ["field", "reactiveFormControlobject"] }, { kind: "component", type: RadioComponent, selector: "lib-radio", inputs: ["field"] }, { kind: "component", type: CheckboxComponent, selector: "lib-checkbox", inputs: ["field"] }, { kind: "component", type: SelectComponent, selector: "lib-select", inputs: ["field", "reactiveFormControlobject"] }, { kind: "component", type: DobComponent, selector: "lib-dob", inputs: ["field", "reactiveFormControlobject"] }, { kind: "component", type: UploadComponent, selector: "lib-upload", inputs: ["field"] }, { kind: "component", type: MultipleSelectComponent, selector: "lib-multiple-select", inputs: ["field", "reactiveFormControlobject"] }, { kind: "ngmodule", type: GoogleMapsModule }, { kind: "component", type: i3.GoogleMap, selector: "google-map", inputs: ["height", "width", "mapId", "mapTypeId", "center", "zoom", "options"], outputs: ["mapInitialized", "authFailure", "boundsChanged", "centerChanged", "mapClick", "mapDblclick", "mapDrag", "mapDragend", "mapDragstart", "headingChanged", "idle", "maptypeidChanged", "mapMousemove", "mapMouseout", "mapMouseover", "projectionChanged", "mapRightclick", "tilesloaded", "tiltChanged", "zoomChanged"], exportAs: ["googleMap"] }, { kind: "directive", type: i3.MapMarker, selector: "map-marker", inputs: ["title", "position", "label", "clickable", "options", "icon", "visible"], outputs: ["animationChanged", "mapClick", "clickableChanged", "cursorChanged", "mapDblclick", "mapDrag", "mapDragend", "draggableChanged", "mapDragstart", "flatChanged", "iconChanged", "mapMousedown", "mapMouseout", "mapMouseover", "mapMouseup", "positionChanged", "mapRightclick", "shapeChanged", "titleChanged", "visibleChanged", "zindexChanged", "markerInitialized"], exportAs: ["mapMarker"] }] });
591
+ }
592
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MedialQuestionsComponent, decorators: [{
593
+ type: Component,
594
+ args: [{ selector: 'lib-medial-questions', standalone: true, imports: [CommonModule, FormsModule, ReactiveFormsModule, TextboxComponent, RadioComponent, CheckboxComponent, SelectComponent, DobComponent, UploadComponent, MultipleSelectComponent, GoogleMapsModule], template: "\r\n<div *ngFor=\"let section of questionList\">\r\n <div\r\n *ngIf=\"\r\n !checkIfValueIsEmpty(section['questions']) &&\r\n section['showSection']\r\n \"\r\n class=\"card p-3 my-2\"\r\n id=\"personUwMedicalQuestions\"\r\n >\r\n <h6 class=\"page-title\">\r\n {{ getTitleCase(section[\"sectionName\"]) }}\r\n </h6>\r\n <div *ngFor=\"let questions of section['questions']\">\r\n <!-- <div *ngIf=\"questions['questionType'] === 'IMAGE TEXT'\">\r\n <img [src]=\"questions['sampleS3Link']\" class=\"d-block mx-auto\" [alt]=\"questions['title']\">\r\n <h3 [innerHTML]=\"questions['questionText']\"></h3>\r\n </div> -->\r\n\r\n <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'FREE TEXT' &&\r\n questions['cammundaQuestionCode'] !== 'QHT' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <label class=\"card-topic d-block\"\r\n >{{ questions[\"questionText\"] }}\r\n <span\r\n *ngIf=\"\r\n questions.optionalQuestion === 'N'\r\n \"\r\n style=\"color: #ee0000\"\r\n >&#42;</span\r\n >\r\n </label>\r\n <div class=\"col-5 px-0\">\r\n <lib-textbox [(ngModel)]=\"personUwAnswers[questions.questionId]\" [field]=\"questions['field']\" />\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'HEIGHTINPUT' &&\r\n questions['cammundaQuestionCode'] === 'QHTF' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <label class=\"card-topic d-block\"\r\n >Height\r\n <span\r\n style=\"color: #ee0000\"\r\n >&#42;</span\r\n >\r\n </label>\r\n <div\r\n class=\"col-auto px-0 my-0 py-0 heightinput\"\r\n\r\n >\r\n <div\r\n class=\"col-7 py-0 heightInputs\"\r\n style=\"transform: translate(6px, 3px);\"\r\n *ngIf=\"\r\n personUwAnswers['medicalQuestionsHeightUnit'] === 'CM'\r\n \"\r\n >\r\n <lib-textbox [field]=\"questions['field']\" />\r\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionsHeightUnit']\" [field]=\"medQuestionObj['heightObjectTypes']\" />\r\n </div>\r\n <div\r\n class=\"py-0\"\r\n style=\"display: flex;\"\r\n *ngIf=\"\r\n personUwAnswers[\r\n 'medicalQuestionsHeightUnit'\r\n ] === 'FEET'\r\n \"\r\n >\r\n <div class=\"col-auto py-0 heightInputs px-1\">\r\n <lib-select [field]=\"medQuestionObj['QHTF']['field']\" />\r\n </div>\r\n <div class=\"col-auto py-0 heightInputs px-1\">\r\n <lib-select [field]=\"medQuestionObj['QHTI']['field']\" />\r\n </div>\r\n <div\r\n class=\"col-auto py-0 heightInputs px-1\"\r\n >\r\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionsHeightUnit']\" [field]=\"medQuestionObj['heightObjectTypes']\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"row mt-0 pt-0\"\r\n *ngIf=\"\r\n questions['questionType'] === 'MAP' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n\r\n\r\n <div class=\"map-container\">\r\n <div class=\"address-search-container mb-3\">\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-6\">\r\n <label class=\"form-label\">Longitude</label>\r\n <input \r\n type=\"number\" \r\n class=\"form-control\"\r\n [(ngModel)]=\"longitude\"\r\n placeholder=\"Enter longitude\"\r\n step=\"any\"\r\n readonly\r\n >\r\n </div>\r\n <div class=\"col-6\">\r\n <label class=\"form-label\">Latitude</label>\r\n <input \r\n type=\"number\" \r\n class=\"form-control\"\r\n [(ngModel)]=\"latitude\"\r\n placeholder=\"Enter latitude\"\r\n step=\"any\"\r\n readonly\r\n >\r\n </div>\r\n </div>\r\n\r\n <input \r\n #addressInput \r\n type=\"text\" \r\n class=\"form-control\"\r\n placeholder=\"Search for address\"\r\n (keyup)=\"onAddressInputKeyup($event)\"\r\n (focus)=\"showDropdown = true\"\r\n (blur)=\"onInputBlur()\"\r\n autocomplete=\"off\"\r\n >\r\n <div \r\n *ngIf=\"showDropdown && addressSuggestions.length > 0\" \r\n class=\"autocomplete-dropdown position-absolute w-100 mt-1\"\r\n style=\"z-index: 1000; max-height: 200px; overflow-y: auto; background: white; border: 1px solid #ccc; border-radius: 4px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);\"\r\n >\r\n <div \r\n *ngFor=\"let suggestion of addressSuggestions; let i = index\"\r\n class=\"dropdown-item p-2\"\r\n style=\"cursor: pointer; border-bottom: 1px solid #eee;\"\r\n (mousedown)=\"selectAddress(suggestion)\"\r\n (mouseenter)=\"hoveredIndex = i\"\r\n [class.bg-light]=\"hoveredIndex === i\"\r\n >\r\n <div class=\"fw-bold\">{{ suggestion.main_text }}</div>\r\n <small class=\"text-muted\">{{ suggestion.secondary_text }}</small>\r\n </div>\r\n </div>\r\n <small class=\"text-muted\">Start typing to search for addresses</small>\r\n </div>\r\n <google-map [center]=\"center\" [zoom]=\"zoom\">\r\n <map-marker [position]=\"currentCoordinates\"></map-marker>\r\n </google-map>\r\n </div>\r\n </div>\r\n\r\n\r\n <div\r\n class=\"\"\r\n *ngIf=\"\r\n (questions['questionType'] === 'RADIO BUTTON' ||\r\n questions['questionType'] === 'ADDMORE') &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-radio [(ngModel)]=\"personUwAnswers[questions.questionId]\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"questions['field']\" />\r\n </div>\r\n\r\n <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'CHECKBOX' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-multiple-select [(ngModel)]=\"personUwAnswers[questions.questionId]\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"questions['field']\" />\r\n </div>\r\n\r\n <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'DECLARATION' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-checkbox [(ngModel)]=\"personUwAnswers[questions.questionId]\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"questions['field']\" />\r\n </div>\r\n\r\n <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'DROPDOWN' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-select [(ngModel)]=\"personUwAnswers[questions.questionId]\" [field]=\"questions['field']\" />\r\n </div>\r\n\r\n <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'CALENDAR' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-dob [(ngModel)]=\"personUwAnswers[questions.questionId]\" [field]=\"questions['field']\" />\r\n </div>\r\n\r\n <!-- <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'HEIGHTINPUT' &&\r\n questions['cammundaQuestionCode'] === 'QHTF' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n </div> -->\r\n <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'DOCUPLOAD' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <lib-upload [field]=\"questions['field']\" />\r\n </div>\r\n\r\n\r\n <div\r\n class=\"\"\r\n *ngIf=\"\r\n questions['questionType'] === 'PASSPORT_UPLOAD' &&\r\n questions['isShowQuestionInUI']\r\n \"\r\n >\r\n <!-- pending -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n", styles: [".map-container{width:100%;position:relative}.address-search-container{position:relative}.address-search-container input{width:100%;padding:10px;border:1px solid #ddd;border-radius:4px;box-sizing:border-box}.address-search-container input:focus{outline:none;border-color:#4285f4;box-shadow:0 0 0 2px #4285f433}.pac-container{z-index:10000!important;border-radius:4px;border:1px solid #ddd;box-shadow:0 2px 6px #0000004d}.pac-item{padding:10px;border-bottom:1px solid #eee;cursor:pointer}.pac-item:hover{background-color:#f5f5f5}.selected-address{padding:8px;background-color:#f8f9fa;border-radius:4px;border-left:3px solid #28a745}.map-container ::ng-deep google-map>div{height:400px!important;width:auto!important}\n"] }]
595
+ }], ctorParameters: () => [{ type: i0.NgZone }], propDecorators: { medialQuestionResponse: [{
596
+ type: Input
597
+ }], addressInput: [{
598
+ type: ViewChild,
599
+ args: ['addressInput']
600
+ }] } });
601
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL21lZGlhbC1xdWVzdGlvbnMvbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL21lZGlhbC1xdWVzdGlvbnMvbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBVSxTQUFTLEVBQXlCLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RyxPQUFPLEtBQUssaUJBQWlCLE1BQU0sa0JBQWtCLENBQUE7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOENBQThDLENBQUM7Ozs7O0FBU3ZGLE1BQU0sT0FBTyx3QkFBd0I7SUFxQ2Y7SUFwQ1gsc0JB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Ozs0RkFJN0wsd0JBQXdCO2tCQVBwQyxTQUFTOytCQUNFLHNCQUFzQixjQUNwQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSx1QkFBdUIsRUFBRSxnQkFBZ0IsQ0FBQzsyRUFLaE0sc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNxQixZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHb29nbGVNYXBzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZ29vZ2xlLW1hcHMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCwgTmdab25lLCBBZnRlclZpZXdJbml0LCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgKiBhcyBxdWVzdGlvbnNSZXNwb25zZSBmcm9tICcuL3F1ZXN0aW9ucy5qc29uJ1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVGV4dGJveENvbXBvbmVudCB9IGZyb20gJy4uL3RleHRib3gvdGV4dGJveC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSYWRpb0NvbXBvbmVudCB9IGZyb20gJy4uL3JhZGlvL3JhZGlvLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vc2VsZWN0L3NlbGVjdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEb2JDb21wb25lbnQgfSBmcm9tICcuLi9kb2IvZG9iLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFVwbG9hZENvbXBvbmVudCB9IGZyb20gJy4uL3VwbG9hZC91cGxvYWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTXVsdGlwbGVTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi9tdWx0aXBsZS1zZWxlY3QvbXVsdGlwbGUtc2VsZWN0LmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1tZWRpYWwtcXVlc3Rpb25zJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBUZXh0Ym94Q29tcG9uZW50LCBSYWRpb0NvbXBvbmVudCwgQ2hlY2tib3hDb21wb25lbnQsIFNlbGVjdENvbXBvbmVudCwgRG9iQ29tcG9uZW50LCBVcGxvYWRDb21wb25lbnQsIE11bHRpcGxlU2VsZWN0Q29tcG9uZW50LCBHb29nbGVNYXBzTW9kdWxlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL21lZGlhbC1xdWVzdGlvbnMuY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIE1lZGlhbFF1ZXN0aW9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCAsIEFmdGVyVmlld0luaXR7XHJcbiAgQElucHV0KCkgbWVkaWFsUXVlc3Rpb25SZXNwb25zZTogYW55ID0gcXVlc3Rpb25zUmVzcG9uc2U7XHJcbiAgQFZpZXdDaGlsZCgnYWRkcmVzc0lucHV0JykgYWRkcmVzc0lucHV0ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcclxuICBwcml2YXRlIGF1dG9jb21wbGV0ZSE6IGdvb2dsZS5tYXBzLnBsYWNlcy5BdXRvY29tcGxldGU7XHJcbiAgZmllbGQgOiBhbnkgPSBpbnB1dC5yZXF1aXJlZDxhbnk+KCk7XHJcbiAgcXVlc3Rpb25MaXN0IDogYW55ID0gW107XHJcbiAgY3VycmVudENvb3JkaW5hdGVzIDogYW55ID0ge307XHJcbiAgcGVyc29uVXdSZXNwb25zZU9iaiA6IGFueSA9IFtdO1xyXG4gIGNlbnRlcjogZ29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbCA9IHsgbGF0OiA0MC43MzA2MSwgbG5nOiAtNzMuOTM1MjQyIH07XHJcbiAgbGF0aXR1ZGU6IGFueTtcclxuICBsb25naXR1ZGU6IGFueTtcclxuICB6b29tOmFueTtcclxuICBtYXJrZXIgOiBhbnkgPSB7fVxyXG5cclxuICBwZXJzb25Vd0Fuc3dlcnMgOiBhbnkgPSB7XHJcbiAgICBtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdDogJ0ZFRVQnLFxyXG4gIH07XHJcbiAgbWVkUXVlc3Rpb25PYmogOiBhbnkgPSB7fTtcclxuICBsaXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveCA6IGFueSA9IFtdO1xyXG4gIG1lZGljYWxRdWVzdGlvbnNGZWV0TGlzdCA6IGFueSA9IFtdO1xyXG4gIG1lZGljYWxRdWVzdGlvbnNJbmNoZXNMaXN0IDogYW55ID0gW107XHJcbiAgcXVlc3Rpb25IZWFkZXI6IGFueSA9IFsnZWlhIGRldGFpbHMnLCAnYWJoYSBkZXRhaWxzJywgJ3BlcCBkZXRhaWxzJ107XHJcbiAgbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXRUeXBlczogYW55ID0gW1xyXG4gICAge1xyXG4gICAgICBsYWJlbDogJ0NtJyxcclxuICAgICAgdmFsdWU6ICdDTSdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOiAnRmVldCcsXHJcbiAgICAgIHZhbHVlOiAnRkVFVCdcclxuICAgIH1cclxuICBdXHJcbiAgc2hvd0Ryb3Bkb3duID0gZmFsc2U7XHJcbmFkZHJlc3NTdWdnZXN0aW9uczogYW55W10gPSBbXTtcclxuaG92ZXJlZEluZGV4ID0gLTE7XHJcbnNlYXJjaFRpbWVvdXQ6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoIHB1YmxpYyBuZ1pvbmU6IE5nWm9uZSkge1xyXG4gICAgY29uc29sZS5sb2coJ21lZGlhbFF1ZXN0aW9uUmVzcG9uc2VlZWVlZScsIHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICgnZ2VvbG9jYXRpb24nIGluIG5hdmlnYXRvcikge1xyXG4gICAgICAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbigocG9zaXRpb24pID0+IHtcclxuICAgICAgICAgdGhpcy5sYXRpdHVkZSA9IHBvc2l0aW9uLmNvb3Jkcy5sYXRpdHVkZTtcclxuICAgICAgICAgdGhpcy5sb25naXR1ZGUgPSBwb3NpdGlvbi5jb29yZHMubG9uZ2l0dWRlO1xyXG4gICAgICAgICB0aGlzLnpvb20gPSAxNTtcclxuICAgICAgICAgdGhpcy5jdXJyZW50Q29vcmRpbmF0ZXMgPSB7XHJcbiAgICAgICAgICBsYXQgOiB0aGlzLmxhdGl0dWRlLFxyXG4gICAgICAgICAgbG5nIDogdGhpcy5sb25naXR1ZGUsXHJcbiAgICAgICAgIH1cclxuICAgICAgICAgdGhpcy5jZW50ZXIgPSB7Li4udGhpcy5jdXJyZW50Q29vcmRpbmF0ZXN9O1xyXG4gICAgICAgfSk7XHJcbiAgICAgfVxyXG4gICAgdGhpcy5wcmVwYXJlUGVyc29uVXdRdWVzdGlvbnNPYmooKTtcclxuXHJcblxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0aWFsaXplQXV0b2NvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICAgcHJpdmF0ZSBpbml0aWFsaXplQXV0b2NvbXBsZXRlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5hdXRvY29tcGxldGUgPSBuZXcgZ29vZ2xlLm1hcHMucGxhY2VzLkF1dG9jb21wbGV0ZShcclxuICAgICAgdGhpcy5hZGRyZXNzSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgIHtcclxuICAgICAgICB0eXBlczogWydhZGRyZXNzJ10sXHJcbiAgICAgICAgY29tcG9uZW50UmVzdHJpY3Rpb25zOiB7IGNvdW50cnk6ICdJTicgfSxcclxuICAgICAgICBmaWVsZHM6IFsncGxhY2VfaWQnLCAnZ2VvbWV0cnknLCAnbmFtZScsICdmb3JtYXR0ZWRfYWRkcmVzcyddXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5hdXRvY29tcGxldGUuYWRkTGlzdGVuZXIoJ3BsYWNlX2NoYW5nZWQnLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vblBsYWNlU2VsZWN0ZWQoKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gICBwcml2YXRlIG9uUGxhY2VTZWxlY3RlZCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHBsYWNlID0gdGhpcy5hdXRvY29tcGxldGUuZ2V0UGxhY2UoKTtcclxuXHJcbiAgICBpZiAoIXBsYWNlLmdlb21ldHJ5IHx8ICFwbGFjZS5nZW9tZXRyeS5sb2NhdGlvbikge1xyXG4gICAgICBjb25zb2xlLmxvZygnTm8gZGV0YWlscyBhdmFpbGFibGUgZm9yIGlucHV0OiAnLCBwbGFjZS5uYW1lKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxvY2F0aW9uID0gcGxhY2UuZ2VvbWV0cnkubG9jYXRpb247XHJcbiAgICB0aGlzLmNlbnRlciA9IHtcclxuICAgICAgbGF0OiBsb2NhdGlvbi5sYXQoKSxcclxuICAgICAgbG5nOiBsb2NhdGlvbi5sbmcoKVxyXG4gICAgfTtcclxuICAgIHRoaXMuY3VycmVudENvb3JkaW5hdGVzID0gdGhpcy5jZW50ZXI7XHJcblxyXG4gICAgaWYgKHBsYWNlLmdlb21ldHJ5LnZpZXdwb3J0KSB7XHJcbiAgICAgIHRoaXMuem9vbSA9IDE1O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy56b29tID0gMTM7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc29sZS5sb2coJ1NlbGVjdGVkIHBsYWNlOicsIHtcclxuICAgICAgbmFtZTogcGxhY2UubmFtZSxcclxuICAgICAgYWRkcmVzczogcGxhY2UuZm9ybWF0dGVkX2FkZHJlc3MsXHJcbiAgICAgIGNvb3JkaW5hdGVzOiB0aGlzLmNlbnRlclxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zdG9yZVNlbGVjdGVkQWRkcmVzcyhwbGFjZSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBzdG9yZVNlbGVjdGVkQWRkcmVzcyhwbGFjZTogZ29vZ2xlLm1hcHMucGxhY2VzLlBsYWNlUmVzdWx0KTogdm9pZCB7XHJcbiAgICBjb25zdCBhZGRyZXNzRGF0YSA9IHtcclxuICAgICAgcGxhY2VJZDogcGxhY2UucGxhY2VfaWQsXHJcbiAgICAgIG5hbWU6IHBsYWNlLm5hbWUsXHJcbiAgICAgIGZvcm1hdHRlZEFkZHJlc3M6IHBsYWNlLmZvcm1hdHRlZF9hZGRyZXNzLFxyXG4gICAgICBjb29yZGluYXRlczogdGhpcy5jZW50ZXJcclxuICAgIH07XHJcblxyXG4gIH1cclxuXHJcbiAgIHNlYXJjaEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBnZW9jb2RlciA9IG5ldyBnb29nbGUubWFwcy5HZW9jb2RlcigpO1xyXG5cclxuICAgIGdlb2NvZGVyLmdlb2NvZGUoeyBhZGRyZXNzOiBhZGRyZXNzIH0sIChyZXN1bHRzLCBzdGF0dXMpID0+IHtcclxuICAgICAgaWYgKHN0YXR1cyA9PT0gJ09LJyAmJiByZXN1bHRzICYmIHJlc3VsdHNbMF0pIHtcclxuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHJlc3VsdHNbMF0uZ2VvbWV0cnkubG9jYXRpb247XHJcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuY2VudGVyID0ge1xyXG4gICAgICAgICAgICBsYXQ6IGxvY2F0aW9uLmxhdCgpLFxyXG4gICAgICAgICAgICBsbmc6IGxvY2F0aW9uLmxuZygpXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Q29vcmRpbmF0ZXMgPSB0aGlzLmNlbnRlcjtcclxuICAgICAgICAgIHRoaXMuem9vbSA9IDE1O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdHZW9jb2RlIHdhcyBub3Qgc3VjY2Vzc2Z1bCBmb3IgdGhlIGZvbGxvd2luZyByZWFzb246ICcgKyBzdGF0dXMpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uQWRkcmVzc0lucHV0S2V5dXAoZXZlbnQ6IGFueSkge1xyXG4gIGNvbnN0IHF1ZXJ5ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG5cclxuICAvLyBDbGVhciBwcmV2aW91cyB0aW1lb3V0XHJcbiAgaWYgKHRoaXMuc2VhcmNoVGltZW91dCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuc2VhcmNoVGltZW91dCk7XHJcbiAgfVxyXG5cclxuICAvLyBIYW5kbGUgYXJyb3cga2V5IG5hdmlnYXRpb25cclxuICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xyXG4gICAgdGhpcy5ob3ZlcmVkSW5kZXggPSBNYXRoLm1pbih0aGlzLmhvdmVyZWRJbmRleCArIDEsIHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zLmxlbmd0aCAtIDEpO1xyXG4gICAgcmV0dXJuO1xyXG4gIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcclxuICAgIHRoaXMuaG92ZXJlZEluZGV4ID0gTWF0aC5tYXgodGhpcy5ob3ZlcmVkSW5kZXggLSAxLCAtMSk7XHJcbiAgICByZXR1cm47XHJcbiAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcclxuICAgIGlmICh0aGlzLmhvdmVyZWRJbmRleCA+PSAwICYmIHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zW3RoaXMuaG92ZXJlZEluZGV4XSkge1xyXG4gICAgICB0aGlzLnNlbGVjdEFkZHJlc3ModGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnNbdGhpcy5ob3ZlcmVkSW5kZXhdKTtcclxuICAgIH1cclxuICAgIHJldHVybjtcclxuICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcclxuICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gZmFsc2U7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBpZiAocXVlcnkubGVuZ3RoIDwgMikge1xyXG4gICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnMgPSBbXTtcclxuICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gZmFsc2U7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICB0aGlzLnNlYXJjaFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIHRoaXMuc2VhcmNoQWRkcmVzc2VzKHF1ZXJ5KTtcclxuICB9LCAzMDApO1xyXG59XHJcblxyXG5zZWFyY2hBZGRyZXNzZXMocXVlcnk6IHN0cmluZykge1xyXG4gIC8vIFJlcGxhY2UgdGhpcyB3aXRoIHlvdXIgYWN0dWFsIGFkZHJlc3Mgc2VhcmNoIEFQSSBjYWxsXHJcbiAgLy8gRm9yIGV4YW1wbGUsIHVzaW5nIEdvb2dsZSBQbGFjZXMgQVBJOlxyXG5cclxuICBjb25zdCBzZXJ2aWNlID0gbmV3IGdvb2dsZS5tYXBzLnBsYWNlcy5BdXRvY29tcGxldGVTZXJ2aWNlKCk7XHJcbiAgc2VydmljZS5nZXRQbGFjZVByZWRpY3Rpb25zKFxyXG4gICAge1xyXG4gICAgICBpbnB1dDogcXVlcnksXHJcbiAgICAgIHR5cGVzOiBbJ2FkZHJlc3MnXVxyXG4gICAgfSxcclxuICAgIChwcmVkaWN0aW9ucywgc3RhdHVzKSA9PiB7XHJcbiAgICAgIGlmIChzdGF0dXMgPT09IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZXNTZXJ2aWNlU3RhdHVzLk9LICYmIHByZWRpY3Rpb25zKSB7XHJcbiAgICAgICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnMgPSBwcmVkaWN0aW9ucy5tYXAocHJlZGljdGlvbiA9PiAoe1xyXG4gICAgICAgICAgcGxhY2VfaWQ6IHByZWRpY3Rpb24ucGxhY2VfaWQsXHJcbiAgICAgICAgICBtYWluX3RleHQ6IHByZWRpY3Rpb24uc3RydWN0dXJlZF9mb3JtYXR0aW5nLm1haW5fdGV4dCxcclxuICAgICAgICAgIHNlY29uZGFyeV90ZXh0OiBwcmVkaWN0aW9uLnN0cnVjdHVyZWRfZm9ybWF0dGluZy5zZWNvbmRhcnlfdGV4dCxcclxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBwcmVkaWN0aW9uLmRlc2NyaXB0aW9uXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmhvdmVyZWRJbmRleCA9IC0xO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zID0gW107XHJcbiAgICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICk7XHJcbn1cclxuXHJcbnNlbGVjdEFkZHJlc3Moc3VnZ2VzdGlvbjogYW55KSB7XHJcbiAgY29uc3QgYWRkcmVzc0lucHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2FkZHJlc3NJbnB1dCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgaWYgKGFkZHJlc3NJbnB1dCkge1xyXG4gICAgYWRkcmVzc0lucHV0LnZhbHVlID0gc3VnZ2VzdGlvbi5kZXNjcmlwdGlvbjtcclxuICB9XHJcblxyXG4gIGNvbnN0IHNlcnZpY2UgPSBuZXcgZ29vZ2xlLm1hcHMucGxhY2VzLlBsYWNlc1NlcnZpY2UoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xyXG4gIHNlcnZpY2UuZ2V0RGV0YWlscyhcclxuICAgIHtcclxuICAgICAgcGxhY2VJZDogc3VnZ2VzdGlvbi5wbGFjZV9pZCxcclxuICAgICAgZmllbGRzOiBbJ2dlb21ldHJ5JywgJ2Zvcm1hdHRlZF9hZGRyZXNzJ11cclxuICAgIH0sXHJcbiAgICAocGxhY2UsIHN0YXR1cykgPT4ge1xyXG4gICAgICBpZiAoc3RhdHVzID09PSBnb29nbGUubWFwcy5wbGFjZXMuUGxhY2VzU2VydmljZVN0YXR1cy5PSyAmJiBwbGFjZSkge1xyXG4gICAgICAgIGNvbnN0IGxhdCA9IHBsYWNlLmdlb21ldHJ5Py5sb2NhdGlvbj8ubGF0KCk7XHJcbiAgICAgICAgY29uc3QgbG5nID0gcGxhY2UuZ2VvbWV0cnk/LmxvY2F0aW9uPy5sbmcoKTtcclxuXHJcbiAgICAgICAgaWYgKGxhdCAhPT0gdW5kZWZpbmVkICYmIGxuZyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICB0aGlzLmxvbmdpdHVkZSA9IGxuZztcclxuICAgICAgICAgIHRoaXMubGF0aXR1ZGUgPSBsYXQ7XHJcblxyXG4gICAgICAgICAgdGhpcy5jZW50ZXIgPSB7IGxhdCwgbG5nIH07XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRDb29yZGluYXRlcyA9IHRoaXMuY2VudGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICk7XHJcblxyXG4gIHRoaXMuc2hvd0Ryb3Bkb3duID0gZmFsc2U7XHJcbiAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnMgPSBbXTtcclxufVxyXG5cclxub25JbnB1dEJsdXIoKSB7XHJcbiAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICB0aGlzLnNob3dEcm9wZG93biA9IGZhbHNlO1xyXG4gIH0sIDIwMCk7XHJcbn1cclxuXHJcbiAgcHJlcGFyZVBlcnNvblV3UXVlc3Rpb25zT2JqKCkge1xyXG4gICAgdGhpcy5xdWVzdGlvbkxpc3QgPSBbXTtcclxuICAgIGxldCBkYXRhIDogYW55ID0gcXVlc3Rpb25zUmVzcG9uc2U7XHJcbiAgICB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94ID0gW107XHJcblxyXG5cclxuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGRhdGFbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10pKSB7XHJcbiAgICAgIGxldCBwZXJzb25Vd0lkQXJyYXk6IGFueSA9IFtdO1xyXG4gICAgICBkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqOiBhbnkpID0+IHtcclxuICAgICAgICBwZXJzb25Vd0lkQXJyYXkucHVzaChzaW5nbGVRdWVzdGlvbk9ialsncGVyc29uVVdJZCddKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShkYXRhKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGRhdGFbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10pKSB7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGRhdGFbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10pKSB7XHJcbiAgICAgICAgICBsZXQgZGlzdGluY3RTdGVwczogYW55ID0gW107XHJcbiAgICAgICAgICBkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddLmZvckVhY2goKHNpbmdsZVBlcnNvbk9iamVjdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVBlcnNvbk9iamVjdFsncXVlc3Rpb25MaXN0J10pKSB7XHJcbiAgICAgICAgICAgICAgc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10gPSBkYXRhWydkb21haW5WYWx1ZXMnXVtzaW5nbGVRdWVzdGlvblsnZG9tYWluTmFtZSddXTtcclxuXHJcbiAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZmllbGQnXSA9IHRoaXMuZ2V0RmllbGQoc2luZ2xlUXVlc3Rpb24pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1BBTicpIHtcclxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3ZhbGlkYXRpb25zJ10gPSAne1wiVHlwZVwiOlwiQWxwaGFOdW1lcmljXCIsXCJNaW5WYWx1ZVwiOlwiMTBcIixcIk1heFZhbHVlXCI6XCIxMFwiLFwicmVnZXhQYXR0ZXJuXCI6XCIvXihbYS16QS1aXSl7NX0oWzAtOV0pezR9KFthLXpBLVpdKXsxfT8kL1wifSc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBpZiAoc2luZ2xlUXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdGdGNhQ250Y0RldGxzJykge1xyXG4gICAgICAgICAgICAgICAgLy8gICBzaW5nbGVRdWVzdGlvblsndmFsaWRhdGlvbnMnXSA9ICd7XCJjdXN0b21WYWxpZGF0aW9uXCI6W3tcImNvdW50cnlcIjpcIklOXCIsXCJNaW5WYWx1ZVwiOlwiMTBcIixcIk1heFZhbHVlXCI6XCIxMFwiLFwicmVnZXhQYXR0ZXJuXCI6XCIoKF5bNi05XSl7MX0oWzAtOV0pezl9JClcIn0se1wiY291bnRyeVwiOlwiT1RIRVJcIixcIk1pblZhbHVlXCI6XCI1XCIsXCJNYXhWYWx1ZVwiOlwiMTRcIn1dfSc7XHJcbiAgICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJlxyXG4gICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10pXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dFF1ZXN0aW9uT2JqZWN0OiBhbnkgPSBzaW5nbGVQZXJzb25PYmplY3RbJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgIChvYmplY3Q6IGFueSkgPT4gb2JqZWN0WydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmpbJ25leHRRdWVzdGlvbklkJ11cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0UXVlc3Rpb25PYmplY3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgbmV4dFF1ZXN0aW9uT2JqZWN0WzBdWydhbnN3ZXJlZFZhbHVlJ10gPSBzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqWydwYXJlbnRRdWVzdGlvblZhbHVlJ107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydkb21haW5OYW1lJ10pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZGF0YVsnZG9tYWluVmFsdWVzJ11bc2luZ2xlUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXV0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVsnZG9tYWluVmFsdWVzJ11bc2luZ2xlUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXV0uZm9yRWFjaCgoc2luZ2xlRG9tYWluVmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveC5wdXNoKHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ10pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFkaXN0aW5jdFN0ZXBzLmluY2x1ZGVzKHNpbmdsZVF1ZXN0aW9uWydzdGVwJ10pKSB7XHJcbiAgICAgICAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMucHVzaChzaW5nbGVRdWVzdGlvblsnc3RlcCddKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICBzaW5nbGVQZXJzb25PYmplY3RbJ3F1ZXN0aW9uTGlzdCddLmZvckVhY2goKHF1ZXN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0lNQUdFIFRFWFQnKSB7XHJcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydxdWVzdGlvblRleHQnXSA9IHF1ZXN0aW9uWydxdWVzdGlvblRleHQnXS5yZXBsYWNlQWxsKCdcXFxcbicsICc8YnI+Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpY2FsUXVlc3Rpb25zRmVldExpc3QgPSBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ107XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVEYnXSA9IHF1ZXN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFRGJ11bJ2ZpZWxkJ11bJ2lzU2hvd0xhYmVsJ10gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRJJykge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZGljYWxRdWVzdGlvbnNJbmNoZXNMaXN0ID0gcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddXHJcbiAgICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFRJJ10gPSBxdWVzdGlvbjtcclxuICAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVEknXVsnZmllbGQnXVsnaXNTaG93TGFiZWwnXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdERUNMQVJBVElPTicpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ3JlY3ZTZnRDb3B5Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9iamVjdFsncm9sZSddXVtdID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgZG9tYWluSW50ZXJuYWxWYWx1ZTogcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgICAgICAgIGRvbWFpblVpVmFsdWU6ICdOJ1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ10ucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9tYWluSW50ZXJuYWxWYWx1ZTogcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgICAgICBkb21haW5VaVZhbHVlOiAnWSdcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnaGFyZENvcHlMYW5nJykge1xyXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPSAnSEFSRCBDT1BZJztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICBzaW5nbGVQZXJzb25PYmplY3RbJ3F1ZXN0aW9uTGlzdCddLnNvcnQoXHJcbiAgICAgICAgICAgICAgICAoYTogYW55LCBiOiBhbnkpID0+IGFbJ3N0ZXAnXSAtIGJbJ3N0ZXAnXSB8fCBhWydkaXNwbGF5T3JkZXInXSAtIGJbJ2Rpc3BsYXlPcmRlciddXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgIGxldCBxdWVzdGlvbnNMaXN0Rm9yTEE6IGFueSA9IFtdO1xyXG4gICAgICAgICAgICBkaXN0aW5jdFN0ZXBzLmZvckVhY2goKHN0ZXBzOiBhbnkpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkT2JqOiBhbnkgPSBzaW5nbGVQZXJzb25PYmplY3RbJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ3N0ZXAnXSA9PT0gc3RlcHMpO1xyXG4gICAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHtcclxuICAgICAgICAgICAgICAgIHN0ZXA6IHN0ZXBzLFxyXG4gICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlUGVyc29uT2JqZWN0WydwZXJzb25VV0lkJ10udG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uczogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iaikgPyBmaWx0ZXJlZE9iaiA6IFtdLFxyXG4gICAgICAgICAgICAgICAgc2VjdGlvbk5hbWU6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRPYmopID8gZmlsdGVyZWRPYmpbMF1bJ3RpdGxlJ10gOiAnJyxcclxuICAgICAgICAgICAgICAgIGlzTWVkaWNhbFN1YlF1ZXN0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHNob3dTZWN0aW9uOiB0cnVlXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iaikpIHtcclxuICAgICAgICAgICAgICAgIC8vIEhhcmQgQ29weSBhbmQgTWFwIHF1ZXN0aW9uXHJcbiAgICAgICAgICAgICAgICBsZXQgZmlsdGVyZWRIYXJkQ29weVF1ZXN0aW9uOiBhbnkgPSBmaWx0ZXJlZE9iai5maWx0ZXIoKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAncmVjdlNmdENvcHknKTtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkSGFyZENvcHlRdWVzdGlvbikpIHtcclxuICAgICAgICAgICAgICAgICAgb2JqWydxdWVzdGlvbnMnXS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblR5cGU6IFwiTUFQXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNTaG93UXVlc3Rpb25JblVJOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uUmVsYXRpb246IHtcclxuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uSWQ6IGZpbHRlcmVkSGFyZENvcHlRdWVzdGlvblswXVsncXVlc3Rpb25JZCddLFxyXG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25BbnN3ZXI6ICdZJ1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpZiBOUkkgdGhlbiBwYXNzcG9ydCB1cGxvYWQgaXMgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZE5hdGlvbmFsaXR5UXVlc3Rpb246IGFueSA9IGZpbHRlcmVkT2JqLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdOYXRpb25hbGl0eScpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWROYXRpb25hbGl0eVF1ZXN0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgICBzaW5nbGVQZXJzb25PYmplY3RbJ3F1ZXN0aW9uTGlzdCddLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uVHlwZTogXCJQQVNTUE9SVF9VUExPQURcIixcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25hbFF1ZXN0aW9uOiAnTicsXHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25UZXh0OiAnUGFzc3BvcnQgRGV0YWlscyAnLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzU2hvd1F1ZXN0aW9uSW5VSTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvblJlbGF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbklkOiBmaWx0ZXJlZE5hdGlvbmFsaXR5UXVlc3Rpb25bMF1bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uQW5zd2VyOiAnZm9yZ25OYXRpb25hbCdcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICBvYmpbJ3F1ZXN0aW9ucyddLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uVHlwZTogXCJQQVNTUE9SVF9VUExPQURcIixcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25hbFF1ZXN0aW9uOiAnTicsXHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25UZXh0OiAnUGFzc3BvcnQgRGV0YWlscyAnLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzU2hvd1F1ZXN0aW9uSW5VSTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvblJlbGF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbklkOiBmaWx0ZXJlZE5hdGlvbmFsaXR5UXVlc3Rpb25bMF1bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uQW5zd2VyOiAnZm9yZ25OYXRpb25hbCdcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBxdWVzdGlvbnNMaXN0Rm9yTEEucHVzaChvYmopO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy8gbGV0IGxpZmVBc3N1cmVkT2JqZWN0SW5kZXhJbk1hc3RlcjogYW55ID0gdGhpcy5xdWVzdGlvbkxpc3QuZmluZEluZGV4KChzaW5nbGVPYmo6IGFueSkgPT4gc2luZ2xlT2JqWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvbk9iamVjdFsncm9sZSddKTtcclxuICAgICAgICAgICAgLy8gaWYgKGxpZmVBc3N1cmVkT2JqZWN0SW5kZXhJbk1hc3RlciAhPT0gdGhpcy5udW1iZXJNaW51c09uZSkge1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uTGlzdCA9IHF1ZXN0aW9uc0xpc3RGb3JMQTtcclxuICAgICAgICAgICAgLy8gfVxyXG5cclxuXHJcblxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmogPSBkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XHJcblxyXG4gICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnaGVpZ2h0T2JqZWN0VHlwZXMnXSA9IHtcclxuICAgICAgXCJjb250cm9sU3R5bGVcIjoge30sXHJcbiAgICAgIFwiZmllbGROYW1lXCI6IG51bGwsXHJcbiAgICAgIFwibGFiZWxcIjogXCJmZWV0IC8gaW5jaGVzXCIsXHJcbiAgICAgIFwicGxhY2VIb2xkZXJcIjogXCJcIixcclxuICAgICAgXCJtZXRhSWRcIjogXCJcIixcclxuICAgICAgXCJpc1Zpc2libGVcIjogdHJ1ZSxcclxuICAgICAgXCJpc0Rpc2FibGVcIjogZmFsc2UsXHJcbiAgICAgIFwidmFsaWRhdG9yc1wiOiB7XHJcbiAgICAgICAgXCJpc1JlcXVpcmVkXCI6IGZhbHNlLFxyXG4gICAgICAgIFwicmVxdWlyZWRNZXNzYWdlXCI6IFwiVGhpcyBmaWVsZCBjYW5ub3QgYmUgZW1wdHlcIixcclxuICAgICAgICBcIm1pbkxlbmd0aFwiOiBudWxsLFxyXG4gICAgICAgIFwibWluTGVuZ3RoTWVzc2FnZVwiOiBudWxsLFxyXG4gICAgICAgIFwibWF4TGVuZ3RoXCI6IDE1MCxcclxuICAgICAgICBcIm1heExlbmd0aE1lc3NhZ2VcIjogbnVsbCxcclxuICAgICAgICBcInBhdHRlcm5cIjogbnVsbCxcclxuICAgICAgICBcInBhdHRlcm5NZXNzYWdlXCI6IFwiXCJcclxuICAgICAgfSxcclxuICAgICAgXCJvcHRpb25zXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcImxhYmVsXCI6IFwiQ21cIixcclxuICAgICAgICAgIFwidmFsdWVcIjogXCJDTVwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcImxhYmVsXCI6IFwiRmVldFwiLFxyXG4gICAgICAgICAgXCJ2YWx1ZVwiOiBcIkZFRVRcIlxyXG4gICAgICAgIH1cclxuICAgICAgXSxcclxuICAgICAgXCJjc3NDbGFzc1wiOiBudWxsLFxyXG4gICAgICBcInZhbHVlXCI6IG51bGwsXHJcbiAgICAgIFwic3R5bGVcIjogbnVsbCxcclxuICAgICAgXCJpbWFnZVVybFwiOiBudWxsLFxyXG4gICAgICBcImNvbmZpZ0RhdGFcIjoge30sXHJcbiAgICAgIFwibWV0YURhdGFPYmpcIjogbnVsbCxcclxuICAgICAgXCJpc1Nob3dMYWJlbFwiOiBmYWxzZSxcclxuICAgICAgXCJpc01hc3RlckNvbnRyb2xcIjogZmFsc2UsXHJcbiAgICAgIFwiY29udHJvbFR5cGVcIjogXCJzZWxlY3RcIlxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGNoZWNrSWZWYWx1ZUlzRW1wdHkodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgdmFsdWUgPSB2YWx1ZS50cmltKCk7XHJcblxyXG4gICAgfVxyXG4gICAgcmV0dXJuIChcclxuICAgICAgdmFsdWUgPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICB2YWx1ZSA9PT0gbnVsbCB8fFxyXG4gICAgICB2YWx1ZSA9PT0gJycgfHxcclxuICAgICAgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSB8fFxyXG4gICAgICBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgPT09ICd7fSdcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRUaXRsZUNhc2UoaGVhZGVyOiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKGhlYWRlcikge1xyXG4gICAgICBpZiAodGhpcy5xdWVzdGlvbkhlYWRlci5pbmNsdWRlcyhoZWFkZXIudG9Mb2NhbGVMb3dlckNhc2UoKSkpIHtcclxuICAgICAgICBsZXQgdmFsID0gaGVhZGVyLnNwbGl0KCcgJyk7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIHZhbFswXS50b1VwcGVyQ2FzZSgpICsgJyAnICsgdGhpcy50b1RpdGxlQ2FzZSh2YWxbMV0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZihoZWFkZXIudG9VcHBlckNhc2UoKSA9PT0gJ0ZBVENBIERFVEFJTFMnKXtcclxuICAgICAgICAgIHJldHVybiBoZWFkZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnRvVGl0bGVDYXNlKGhlYWRlcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvVGl0bGVDYXNlKHZhbHVlOiBhbnkpIHtcclxuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKFxyXG4gICAgICAgIC9cXHdcXFMqL2csXHJcbiAgICAgICAgKHR4dDogYW55KSA9PiB0eHRbMF0udG9VcHBlckNhc2UoKSArIHR4dC5zdWJzdHIoMSkudG9Mb3dlckNhc2UoKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0RmllbGQocXVlc3Rpb25PYmogOiBhbnkpIHtcclxuICAgIGxldCBvcHRpb25zT2JqIDogYW55ID0gW107XHJcbiAgICBpZihxdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pIHtcclxuICAgICAgcXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddLmZvckVhY2goKHNpbmdsZU9wdGlvblZhbHVlIDogYW55KSA9PiB7XHJcbiAgICAgICAgb3B0aW9uc09iai5wdXNoKHtcclxuICAgICAgICAgIGxhYmVsIDogc2luZ2xlT3B0aW9uVmFsdWVbJ2RvbWFpblVpVmFsdWUnXSxcclxuICAgICAgICAgIHZhbHVlIDogc2luZ2xlT3B0aW9uVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXSxcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBjb25maWdEYXRhIDogdGhpcy5maWVsZCgpPy5jb25maWdEYXRhLFxyXG4gICAgICBjb250cm9sU3R5bGU6IHRoaXMuZmllbGQoKT8uY29udHJvbFN0eWxlLFxyXG4gICAgICBjb250cm9sVHlwZTogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnRlJFRSBURVhUJyA/ICd0ZXh0JyA6ICAocXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnUkFESU8gQlVUVE9OJyB8fCBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdBRERNT1JFJyk/ICdyYWRpbycgOiAocXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnIHx8IHF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0RFQ0xBUkFUSU9OJykgPyAnY2hlY2tib3gnIDogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInID8gJ2RhdGUnIDogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnRFJPUERPV04nID8gJ3NlbGVjdCcgOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdET0NVUExPQUQnID8gJ2ZpbGUnIDogJycsXHJcbiAgICAgIGZpZWxkTmFtZSA6IHF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddLFxyXG4gICAgICBpc0Rpc2FibGUgOiBmYWxzZSxcclxuICAgICAgbGFiZWwgOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UZXh0J10sXHJcbiAgICAgIHBsYWNlSG9sZGVyIDogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVGV4dCddLFxyXG4gICAgICB2YWxpZGF0b3JzIDoge1xyXG4gICAgICAgIGlzUmVxdWlyZWQgOiBxdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddID09PSAnTicgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICAgIGlzVmlzaWJsZSA6IHRydWUsXHJcbiAgICAgIG9wdGlvbnMgOiBvcHRpb25zT2JqLFxyXG4gICAgICBpc1Nob3dMYWJlbCA6IHRydWUsXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVTdWJRdWVzdGlvblZhbHVlcyhxdWVzdGlvbj86IGFueSkge1xyXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5xdWVzdGlvbkxpc3QpKSB7XHJcbiAgICAgIHRoaXMucXVlc3Rpb25MaXN0LmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddKSkge1xyXG4gICAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hvd1F1ZXN0aW9uKHNpbmdsZVF1ZXN0aW9uKSkge1xyXG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIC8vIGlmIChzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10pKSB7XHJcbiAgICAgICAgICAgICAgLy8gICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaCgoZG9tYWluVmFsdWVPYmo6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIC8vICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tkb21haW5WYWx1ZU9ialsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkpIHtcclxuICAgICAgICAgICAgICAvLyAgICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbZG9tYWluVmFsdWVPYmpbJ2RvbWFpbkludGVybmFsVmFsdWUnXV07XHJcbiAgICAgICAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAgICAgICAvLyAgIH0pO1xyXG4gICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAvLyBpZiAoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddICE9PSAnQ0hFQ0tCT1gnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSkpIHtcclxuICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGlzTm9uZUluRG9tYWluVmFsdWVzOiBhbnkgPSBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZmlsdGVyKChzaW5nbGVPYmo6IGFueSkgPT4gc2luZ2xlT2JqWydkb21haW5VaVZhbHVlJ10udG9VcHBlckNhc2UoKSA9PT0gJ05PTkUnKTtcclxuICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKChzaW5nbGVEb21haW5WYWx1ZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGlzTm9uZUluRG9tYWluVmFsdWVzKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW2lzTm9uZUluRG9tYWluVmFsdWVzWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSAmJiB0aGlzLnBlcnNvblV3QW5zd2Vyc1tpc05vbmVJbkRvbWFpblZhbHVlc1swXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIG5vbmUgaXMgc2VsZWN0ZWRcclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaCgoc2luZ2xlRG9tYWluVmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGFsbCBzZWxlY3RlZCBjaGVja2JveCBxdWVzdGlvbnNcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChzaW5nbGVEb21haW5WYWx1ZS5kb21haW5VaVZhbHVlLnRvVXBwZXJDYXNlKCkgIT09ICdOT05FJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZS5pc0Rpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlLmlzRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gbGV0IGlzU2VjdGlvbkV4aXN0c0luQmxvY2tlZExpc3Q6IGFueSA9IHRoaXMuaXNCbG9ja2VkUXVlc3Rpb25zTGlzdC5maWx0ZXIoKHNpbmdsZUJsb2NrZWRPYmo6IGFueSkgPT4gc2luZ2xlQmxvY2tlZE9ialsnc2VjdGlvblRpdGxlJ10udHJpbSgpID09PSBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRyaW0oKSk7XHJcbiAgICAgICAgLy8gc2luZ2xlU2VjdGlvblsnc2hvd1NlY3Rpb24nXSA9ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10pKVxyXG4gICAgICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGlzU2VjdGlvbkV4aXN0c0luQmxvY2tlZExpc3QpKSB7XHJcbiAgICAgICAgLy8gICBpZiAoaXNTZWN0aW9uRXhpc3RzSW5CbG9ja2VkTGlzdFswXS5pc0Jsb2NrZWRGb3JDdXN0b21lckZsb3cgJiYgIXRoaXMubG9hZGluZ0FnZW50cG9ydGFsKSB7XHJcbiAgICAgICAgLy8gICAgIHNpbmdsZVNlY3Rpb25bJ3Nob3dTZWN0aW9uJ10gPSBmYWxzZTtcclxuICAgICAgICAvLyAgICAgbGV0IGZpbHRlcmVkSW5kZXg6IGFueSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXS5maW5kSW5kZXgoKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pO1xyXG4gICAgICAgIC8vICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gICAgICAgbGV0IGZpbHRlcmVkUXVlc3Rpb246IGFueSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtmaWx0ZXJlZEluZGV4XVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PSBzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvblsncXVlc3Rpb25JZCddKTtcclxuICAgICAgICAvLyAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uKSkge1xyXG4gICAgICAgIC8vICAgICAgICAgZmlsdGVyZWRRdWVzdGlvblswXVsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBzaW5nbGVTZWN0aW9uWydzaG93U2VjdGlvbiddO1xyXG4gICAgICAgIC8vICAgICAgIH1cclxuICAgICAgICAvLyAgICAgfSk7XHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy8gICBpZiAoKGlzU2VjdGlvbkV4aXN0c0luQmxvY2tlZExpc3RbMF0uaXNCbG9ja2VkRm9yQWdlbnRGbG93IHx8IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2FnZW50Q2hhbm5lbCcpID09PSAnRDIwJyB8fCBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdhZ2VudENoYW5uZWwnKSA9PT0gJ0QwNScgfHwgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnYWdlbnRDaGFubmVsJykgPT09ICdEMDYnKSAmJiB0aGlzLmxvYWRpbmdBZ2VudHBvcnRhbCkge1xyXG4gICAgICAgIC8vICAgICBzaW5nbGVTZWN0aW9uWydzaG93U2VjdGlvbiddID0gZmFsc2U7XHJcbiAgICAgICAgLy8gICAgIGxldCBmaWx0ZXJlZEluZGV4OiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZmluZEluZGV4KChzaW5nbGVQZXJzb25PYmo6IGFueSkgPT4gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKTtcclxuICAgICAgICAvLyAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgIC8vICAgICAgIGxldCBmaWx0ZXJlZFF1ZXN0aW9uOiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bZmlsdGVyZWRJbmRleF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT0gc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb25bJ3F1ZXN0aW9uSWQnXSk7XHJcbiAgICAgICAgLy8gICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvbikpIHtcclxuICAgICAgICAvLyAgICAgICAgIGZpbHRlcmVkUXVlc3Rpb25bMF1bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gc2luZ2xlU2VjdGlvblsnc2hvd1NlY3Rpb24nXTtcclxuICAgICAgICAvLyAgICAgICB9XHJcbiAgICAgICAgLy8gICAgIH0pO1xyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vIH1cclxuICAgICAgICBsZXQgaGlkZGVuUXVlc3Rpb25zOiBhbnkgPSB0aGlzLnF1ZXN0aW9uTGlzdC5maWx0ZXIoKHNpbmdsZVNlY3Rpb25PYmo6IGFueSkgPT4gIXNpbmdsZVNlY3Rpb25PYmpbJ3Nob3dTZWN0aW9uJ10pO1xyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGlkZGVuUXVlc3Rpb25zKSkge1xyXG4gICAgICAgICAgaGlkZGVuUXVlc3Rpb25zLmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgLy8gbGV0IGZpbHRlcmVkUXVlc3Rpb246IGFueSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PSBzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvblsncXVlc3Rpb25JZCddKTtcclxuICAgICAgICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uKSkge1xyXG4gICAgICAgICAgICAgIC8vICAgZmlsdGVyZWRRdWVzdGlvblswXVsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnF1ZXN0aW9uTGlzdC5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4gYVsnc3RlcCddIC0gYlsnc3RlcCddKTtcclxuXHJcbiAgICBjb25zb2xlLmxvZygncXVlc3Rpb25zIGxpc3QnLCB0aGlzLnF1ZXN0aW9uTGlzdCk7XHJcbiAgICBjb25zb2xlLmxvZygncXVlc3Rpb25zIGFuc3dlcnMnLCB0aGlzLnBlcnNvblV3QW5zd2Vycyk7XHJcblxyXG4gIH1cclxuXHJcbiAgc2hvd1F1ZXN0aW9uKGN1cnJlbnRRdWVzdGlvbjogYW55KSB7XHJcbiAgICBsZXQgc2hvd1F1ZXN0aW9uOiBhbnkgPSBmYWxzZTtcclxuICAgIGxldCBzdWJRdWVzdGlvbnM6IGFueSA9IFtdO1xyXG4gICAgLy8gbGV0IGN1cnJlbnRTZWN0aW9uSW5kZXg6IGFueSA9IHF1ZXN0aW9uc1Jlc3BvbnNlWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSBwZXJzb25Sb2xlKVxyXG4gICAgLy8gbGV0IHJvbGUgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bY3VycmVudFNlY3Rpb25JbmRleF1bJ3JvbGUnXVxyXG5cclxuICAgIHRoaXMucGVyc29uVXdSZXNwb25zZU9ialswXS5xdWVzdGlvbkxpc3QuZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4ge1xyXG4gICAgICBsZXQgaXNTdWJRdWVzdGlvbk9iamVjdDogYW55ID0gW107XHJcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10pKSB7XHJcbiAgICAgICAgaXNTdWJRdWVzdGlvbk9iamVjdCA9IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10uZmlsdGVyKFxyXG4gICAgICAgICAgKHF1ZXN0aW9uUmVsYXRpb25PYmo6IGFueSkgPT4gcXVlc3Rpb25SZWxhdGlvbk9ialsnbmV4dFF1ZXN0aW9uSWQnXSA9PT0gY3VycmVudFF1ZXN0aW9uWydxdWVzdGlvbklkJ11cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpc1N1YlF1ZXN0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICBzdWJRdWVzdGlvbnMucHVzaChzaW5nbGVRdWVzdGlvbik7XHJcbiAgICAgICAgaXNTdWJRdWVzdGlvbk9iamVjdC5mb3JFYWNoKChzaW5nbGVTdWJRdWVzdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcclxuICAgICAgICAgICAgICAoc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXS50b1N0cmluZygpWzBdICE9PSAnIScgJiZcclxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dID09PVxyXG4gICAgICAgICAgICAgICAgc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXSkpIHx8XHJcbiAgICAgICAgICAgIChzaW5nbGVTdWJRdWVzdGlvblsncGFyZW50UXVlc3Rpb25WYWx1ZSddLnRvU3RyaW5nKClbMF0gPT09ICchJyAmJlxyXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0pICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0gIT09XHJcbiAgICAgICAgICAgICAgc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXS50b1N0cmluZygpLnNwbGl0KCchJylbXHJcbiAgICAgICAgICAgICAgMVxyXG4gICAgICAgICAgICAgIF0pIHx8XHJcbiAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSkgJiZcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXS5maWx0ZXIoKHNpbmdsZU9iaiA6IGFueSkgPT4gc2luZ2xlT2JqWyd2YWx1ZSddID09PSBzaW5nbGVTdWJRdWVzdGlvblsncGFyZW50UXVlc3Rpb25WYWx1ZSddKS5sZW5ndGggPiAwIClcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBzaG93UXVlc3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHN1YlF1ZXN0aW9ucykgJiYgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddKSkge1xyXG4gICAgICBzaG93UXVlc3Rpb24gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoY3VycmVudFF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblJlbGF0aW9uJ10pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoY3VycmVudFF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblJlbGF0aW9uJ11bJ3BhcmVudFF1ZXN0aW9uSWQnXSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tjdXJyZW50UXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uUmVsYXRpb24nXVsncGFyZW50UXVlc3Rpb25JZCddXSkgJiYgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbY3VycmVudFF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblJlbGF0aW9uJ11bJ3BhcmVudFF1ZXN0aW9uSWQnXV0gPT09IGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddWydwYXJlbnRRdWVzdGlvbkFuc3dlciddKSB7XHJcbiAgICAgIHNob3dRdWVzdGlvbiA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoY3VycmVudFF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ05PRElTUExBWScpIHtcclxuICAgICAgc2hvd1F1ZXN0aW9uID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2hvd1F1ZXN0aW9uO1xyXG4gIH1cclxufVxyXG4iLCJcclxuPGRpdiAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiBxdWVzdGlvbkxpc3RcIj5cclxuICAgIDxkaXZcclxuICAgICAgKm5nSWY9XCJcclxuICAgICAgICAhY2hlY2tJZlZhbHVlSXNFbXB0eShzZWN0aW9uWydxdWVzdGlvbnMnXSkgJiZcclxuICAgICAgICBzZWN0aW9uWydzaG93U2VjdGlvbiddXHJcbiAgICAgIFwiXHJcbiAgICAgIGNsYXNzPVwiY2FyZCBwLTMgbXktMlwiXHJcbiAgICAgIGlkPVwicGVyc29uVXdNZWRpY2FsUXVlc3Rpb25zXCJcclxuICAgID5cclxuICAgICAgPGg2IGNsYXNzPVwicGFnZS10aXRsZVwiPlxyXG4gICAgICAgIHt7IGdldFRpdGxlQ2FzZShzZWN0aW9uW1wic2VjdGlvbk5hbWVcIl0pIH19XHJcbiAgICAgIDwvaDY+XHJcbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHF1ZXN0aW9ucyBvZiBzZWN0aW9uWydxdWVzdGlvbnMnXVwiPlxyXG4gICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cInF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdJTUFHRSBURVhUJ1wiPlxyXG4gICAgICAgICAgPGltZyBbc3JjXT1cInF1ZXN0aW9uc1snc2FtcGxlUzNMaW5rJ11cIiBjbGFzcz1cImQtYmxvY2sgbXgtYXV0b1wiIFthbHRdPVwicXVlc3Rpb25zWyd0aXRsZSddXCI+XHJcbiAgICAgICAgICA8aDMgW2lubmVySFRNTF09XCJxdWVzdGlvbnNbJ3F1ZXN0aW9uVGV4dCddXCI+PC9oMz5cclxuICAgICAgICA8L2Rpdj4gLS0+XHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiXCJcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdGUkVFIFRFWFQnICYmXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVCcgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjYXJkLXRvcGljIGQtYmxvY2tcIlxyXG4gICAgICAgICAgICA+e3sgcXVlc3Rpb25zW1wicXVlc3Rpb25UZXh0XCJdIH19XHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgIHF1ZXN0aW9ucy5vcHRpb25hbFF1ZXN0aW9uID09PSAnTidcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgIHN0eWxlPVwiY29sb3I6ICNlZTAwMDBcIlxyXG4gICAgICAgICAgICAgID4mIzQyOzwvc3BhblxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHB4LTBcIj5cclxuICAgICAgICAgICAgPGxpYi10ZXh0Ym94IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiXCJcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdIRUlHSFRJTlBVVCcgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjYXJkLXRvcGljIGQtYmxvY2tcIlxyXG4gICAgICAgICAgICA+SGVpZ2h0XHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgc3R5bGU9XCJjb2xvcjogI2VlMDAwMFwiXHJcbiAgICAgICAgICAgICAgPiYjNDI7PC9zcGFuXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiY29sLWF1dG8gcHgtMCBteS0wIHB5LTAgaGVpZ2h0aW5wdXRcIlxyXG5cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiY29sLTcgcHktMCBoZWlnaHRJbnB1dHNcIlxyXG4gICAgICAgICAgICAgIHN0eWxlPVwidHJhbnNmb3JtOiB0cmFuc2xhdGUoNnB4LCAzcHgpO1wiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgIHBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0NNJ1xyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8bGliLXRleHRib3ggW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiICAgLz5cclxuICAgICAgICAgICAgICA8bGliLXNlbGVjdCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXVwiIFtmaWVsZF09XCJtZWRRdWVzdGlvbk9ialsnaGVpZ2h0T2JqZWN0VHlwZXMnXVwiIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJweS0wXCJcclxuICAgICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IGZsZXg7XCJcclxuICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgcGVyc29uVXdBbnN3ZXJzW1xyXG4gICAgICAgICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXHJcbiAgICAgICAgICAgICAgICBdID09PSAnRkVFVCdcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvIHB5LTAgaGVpZ2h0SW5wdXRzIHB4LTFcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItc2VsZWN0IFtmaWVsZF09XCJtZWRRdWVzdGlvbk9ialsnUUhURiddWydmaWVsZCddXCIgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gcHktMCBoZWlnaHRJbnB1dHMgcHgtMVwiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1zZWxlY3QgW2ZpZWxkXT1cIm1lZFF1ZXN0aW9uT2JqWydRSFRJJ11bJ2ZpZWxkJ11cIiAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLWF1dG8gcHktMCBoZWlnaHRJbnB1dHMgcHgtMVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J11cIiBbZmllbGRdPVwibWVkUXVlc3Rpb25PYmpbJ2hlaWdodE9iamVjdFR5cGVzJ11cIiAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwicm93IG10LTAgcHQtMFwiXHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnTUFQJyAmJlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuXHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1hcC1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZHJlc3Mtc2VhcmNoLWNvbnRhaW5lciBtYi0zXCI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtYi0zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj5Mb25naXR1ZGU8L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIiBcclxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwibG9uZ2l0dWRlXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgbG9uZ2l0dWRlXCJcclxuICAgICAgICAgIHN0ZXA9XCJhbnlcIlxyXG4gICAgICAgICAgcmVhZG9ubHlcclxuICAgICAgICA+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+TGF0aXR1ZGU8L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIiBcclxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwibGF0aXR1ZGVcIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciBsYXRpdHVkZVwiXHJcbiAgICAgICAgICBzdGVwPVwiYW55XCJcclxuICAgICAgICAgIHJlYWRvbmx5XHJcbiAgICAgICAgPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGlucHV0IFxyXG4gICAgICAgICNhZGRyZXNzSW5wdXQgXHJcbiAgICAgICAgdHlwZT1cInRleHRcIiBcclxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggZm9yIGFkZHJlc3NcIlxyXG4gICAgICAgIChrZXl1cCk9XCJvbkFkZHJlc3NJbnB1dEtleXVwKCRldmVudClcIlxyXG4gICAgICAgIChmb2N1cyk9XCJzaG93RHJvcGRvd24gPSB0cnVlXCJcclxuICAgICAgICAoYmx1cik9XCJvbklucHV0Qmx1cigpXCJcclxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICA+XHJcbiAgICAgIDxkaXYgXHJcbiAgICAqbmdJZj1cInNob3dEcm9wZG93biAmJiBhZGRyZXNzU3VnZ2VzdGlvbnMubGVuZ3RoID4gMFwiIFxyXG4gICAgY2xhc3M9XCJhdXRvY29tcGxldGUtZHJvcGRvd24gcG9zaXRpb24tYWJzb2x1dGUgdy0xMDAgbXQtMVwiXHJcbiAgICBzdHlsZT1cInotaW5kZXg6IDEwMDA7IG1heC1oZWlnaHQ6IDIwMHB4OyBvdmVyZmxvdy15OiBhdXRvOyBiYWNrZ3JvdW5kOiB3aGl0ZTsgYm9yZGVyOiAxcHggc29saWQgI2NjYzsgYm9yZGVyLXJhZGl1czogNHB4OyBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLDAsMCwwLjEpO1wiXHJcbiAgPlxyXG4gICAgPGRpdiBcclxuICAgICAgKm5nRm9yPVwibGV0IHN1Z2dlc3Rpb24gb2YgYWRkcmVzc1N1Z2dlc3Rpb25zOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIHAtMlwiXHJcbiAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTtcIlxyXG4gICAgICAobW91c2Vkb3duKT1cInNlbGVjdEFkZHJlc3Moc3VnZ2VzdGlvbilcIlxyXG4gICAgICAobW91c2VlbnRlcik9XCJob3ZlcmVkSW5kZXggPSBpXCJcclxuICAgICAgW2NsYXNzLmJnLWxpZ2h0XT1cImhvdmVyZWRJbmRleCA9PT0gaVwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCI+e3sgc3VnZ2VzdGlvbi5tYWluX3RleHQgfX08L2Rpdj5cclxuICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZFwiPnt7IHN1Z2dlc3Rpb24uc2Vjb25kYXJ5X3RleHQgfX08L3NtYWxsPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWRcIj5TdGFydCB0eXBpbmcgdG8gc2VhcmNoIGZvciBhZGRyZXNzZXM8L3NtYWxsPlxyXG4gICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxnb29nbGUtbWFwIFtjZW50ZXJdPVwiY2VudGVyXCIgW3pvb21dPVwiem9vbVwiPlxyXG4gICAgICAgICAgICAgIDxtYXAtbWFya2VyIFtwb3NpdGlvbl09XCJjdXJyZW50Q29vcmRpbmF0ZXNcIj48L21hcC1tYXJrZXI+XHJcbiAgICAgICAgICAgIDwvZ29vZ2xlLW1hcD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJcIlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgKHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdSQURJTyBCVVRUT04nIHx8XHJcbiAgICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0FERE1PUkUnKSAmJlxyXG4gICAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGxpYi1yYWRpbyBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1txdWVzdGlvbnMucXVlc3Rpb25JZF1cIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiXCJcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bGliLW11bHRpcGxlLXNlbGVjdCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1txdWVzdGlvbnMucXVlc3Rpb25JZF1cIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiXCJcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdERUNMQVJBVElPTicgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bGliLWNoZWNrYm94IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIChuZ01vZGVsQ2hhbmdlKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIiBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCIgLz5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJcIlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0RST1BET1dOJyAmJlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxsaWItc2VsZWN0IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cIlwiXHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInICYmXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGxpYi1kb2IgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCIgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJcIlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0hFSUdIVElOUFVUJyAmJlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJyAmJlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJcIlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0RPQ1VQTE9BRCcgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bGliLXVwbG9hZCBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCIgLz5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiXCJcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdQQVNTUE9SVF9VUExPQUQnICYmXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwhLS0gcGVuZGluZyAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuIl19