jconsumer-shared 0.0.2 → 0.0.3
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.
- package/esm2022/lib/account-service.mjs +21 -0
- package/esm2022/lib/auth-service.mjs +155 -0
- package/esm2022/lib/calendar/date-time/datetime-processor.service.mjs +448 -0
- package/esm2022/lib/common.service.mjs +38 -0
- package/esm2022/lib/error-message.service.mjs +22 -0
- package/esm2022/lib/file-service.mjs +229 -0
- package/esm2022/lib/group-storage.service.mjs +66 -0
- package/esm2022/lib/i8n.module.mjs +43 -0
- package/esm2022/lib/local-storage.service.mjs +77 -0
- package/esm2022/lib/phone-input/phone-input.component.mjs +127 -0
- package/esm2022/lib/phone-input/phone-input.module.mjs +24 -0
- package/esm2022/lib/pipes/autolink/autolink.pipe.mjs +22 -0
- package/esm2022/lib/pipes/capitalize/capitalize.module.mjs +20 -0
- package/esm2022/lib/pipes/capitalize/capitalize.pipe.mjs +18 -0
- package/esm2022/lib/pipes/filter/filter.pipe.mjs +24 -0
- package/esm2022/lib/pipes/limit-to/limitTo.pipe.mjs +18 -0
- package/esm2022/lib/pipes/safe-html/safehtml.module.mjs +20 -0
- package/esm2022/lib/pipes/safe-html/safehtml.pipe.mjs +19 -0
- package/esm2022/lib/project-messages.mjs +146 -0
- package/esm2022/lib/questionaire/edit/questionnaire.component.mjs +1422 -0
- package/esm2022/lib/questionaire/edit/questionnaire.module.mjs +77 -0
- package/esm2022/lib/questionaire/questionaire-service.mjs +92 -0
- package/esm2022/lib/session-storage.service.mjs +57 -0
- package/esm2022/lib/shared.service.mjs +24 -2
- package/esm2022/lib/showuploadfile/showuploadfile.component.mjs +61 -0
- package/esm2022/lib/showuploadfile/showuploadfile.module.mjs +28 -0
- package/esm2022/lib/spinner/loading-spinner.component.mjs +22 -0
- package/esm2022/lib/spinner/loading-spinner.module.mjs +28 -0
- package/esm2022/lib/storage.service.mjs +75 -0
- package/esm2022/lib/word-processor.service.mjs +181 -0
- package/esm2022/public-api.mjs +27 -1
- package/fesm2022/jconsumer-shared.mjs +3522 -26
- package/fesm2022/jconsumer-shared.mjs.map +1 -1
- package/jconsumer-shared-0.0.3.tgz +0 -0
- package/lib/account-service.d.ts +9 -0
- package/lib/auth-service.d.ts +43 -0
- package/lib/calendar/date-time/datetime-processor.service.d.ts +120 -0
- package/lib/common.service.d.ts +9 -0
- package/lib/error-message.service.d.ts +5 -0
- package/lib/file-service.d.ts +26 -0
- package/lib/group-storage.service.d.ts +14 -0
- package/lib/i8n.module.d.ts +12 -0
- package/lib/local-storage.service.d.ts +34 -0
- package/lib/phone-input/phone-input.component.d.ts +25 -0
- package/lib/phone-input/phone-input.module.d.ts +9 -0
- package/lib/pipes/autolink/autolink.pipe.d.ts +7 -0
- package/lib/pipes/capitalize/capitalize.module.d.ts +8 -0
- package/lib/pipes/capitalize/capitalize.pipe.d.ts +7 -0
- package/lib/pipes/filter/filter.pipe.d.ts +7 -0
- package/lib/pipes/limit-to/limitTo.pipe.d.ts +7 -0
- package/lib/pipes/safe-html/safehtml.module.d.ts +8 -0
- package/lib/pipes/safe-html/safehtml.pipe.d.ts +10 -0
- package/lib/project-messages.d.ts +1 -0
- package/lib/questionaire/edit/questionnaire.component.d.ts +151 -0
- package/lib/questionaire/edit/questionnaire.module.d.ts +19 -0
- package/lib/questionaire/questionaire-service.d.ts +28 -0
- package/lib/session-storage.service.d.ts +26 -0
- package/lib/shared.service.d.ts +12 -3
- package/lib/showuploadfile/showuploadfile.component.d.ts +21 -0
- package/lib/showuploadfile/showuploadfile.module.d.ts +9 -0
- package/lib/spinner/loading-spinner.component.d.ts +11 -0
- package/lib/spinner/loading-spinner.module.d.ts +9 -0
- package/lib/storage.service.d.ts +16 -0
- package/lib/word-processor.service.d.ts +80 -0
- package/package.json +1 -1
- package/public-api.d.ts +26 -0
- package/jconsumer-shared-0.0.2.tgz +0 -0
|
@@ -0,0 +1,1422 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import { ButtonsStrategy, ButtonType, Image } from '@ks89/angular-modal-gallery';
|
|
3
|
+
import { ShowuploadfileComponent } from '../../showuploadfile/showuploadfile.component';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/router";
|
|
6
|
+
import * as i2 from "../../word-processor.service";
|
|
7
|
+
import * as i3 from "../../local-storage.service";
|
|
8
|
+
import * as i4 from "../../calendar/date-time/datetime-processor.service";
|
|
9
|
+
import * as i5 from "@angular/material/dialog";
|
|
10
|
+
import * as i6 from "../../file-service";
|
|
11
|
+
import * as i7 from "../../common.service";
|
|
12
|
+
import * as i8 from "../questionaire-service";
|
|
13
|
+
import * as i9 from "../../error-message.service";
|
|
14
|
+
import * as i10 from "../../toast.service";
|
|
15
|
+
import * as i11 from "@ks89/angular-modal-gallery";
|
|
16
|
+
import * as i12 from "@angular/common";
|
|
17
|
+
import * as i13 from "@angular/forms";
|
|
18
|
+
import * as i14 from "../../spinner/loading-spinner.component";
|
|
19
|
+
import * as i15 from "@angular/material/datepicker";
|
|
20
|
+
import * as i16 from "@angular/material/core";
|
|
21
|
+
import * as i17 from "@angular/material/form-field";
|
|
22
|
+
import * as i18 from "@angular/material/select";
|
|
23
|
+
import * as i19 from "../../pipes/capitalize/capitalize.pipe";
|
|
24
|
+
import * as i20 from "../../pipes/safe-html/safehtml.pipe";
|
|
25
|
+
export class QuestionnaireComponent {
|
|
26
|
+
activated_route;
|
|
27
|
+
wordProcessor;
|
|
28
|
+
lStorageService;
|
|
29
|
+
dateProcessor;
|
|
30
|
+
dialog;
|
|
31
|
+
fileService;
|
|
32
|
+
commonService;
|
|
33
|
+
questionaireService;
|
|
34
|
+
errorService;
|
|
35
|
+
toastService;
|
|
36
|
+
modalGalleryService;
|
|
37
|
+
location;
|
|
38
|
+
questionnaireList;
|
|
39
|
+
source;
|
|
40
|
+
accountId;
|
|
41
|
+
questionAnswers;
|
|
42
|
+
customerDetails;
|
|
43
|
+
uuid;
|
|
44
|
+
type;
|
|
45
|
+
waitlistStatus;
|
|
46
|
+
orderStatus;
|
|
47
|
+
donationDetails;
|
|
48
|
+
service;
|
|
49
|
+
mode; // Added by mani to check the file upload
|
|
50
|
+
fileChanged = new EventEmitter();
|
|
51
|
+
returnAnswers = new EventEmitter();
|
|
52
|
+
tempType;
|
|
53
|
+
bookingType;
|
|
54
|
+
answers = {};
|
|
55
|
+
showDataGrid = {};
|
|
56
|
+
selectedMessage = [];
|
|
57
|
+
apiError = [];
|
|
58
|
+
params;
|
|
59
|
+
fileuploadpreAnswers = {};
|
|
60
|
+
loading = false;
|
|
61
|
+
buttonDisable = false;
|
|
62
|
+
questions = [];
|
|
63
|
+
selectedDocs = [];
|
|
64
|
+
documentsToUpload = [];
|
|
65
|
+
subscription;
|
|
66
|
+
uploadFilesTemp = [];
|
|
67
|
+
filestoUpload = [];
|
|
68
|
+
changeHappened = false;
|
|
69
|
+
uploadedFiles = [];
|
|
70
|
+
uploadedImages = [];
|
|
71
|
+
bookingDetails = [];
|
|
72
|
+
file2;
|
|
73
|
+
customButtonsFontAwesomeConfig = {
|
|
74
|
+
visible: true,
|
|
75
|
+
strategy: ButtonsStrategy.CUSTOM,
|
|
76
|
+
buttons: [
|
|
77
|
+
{
|
|
78
|
+
className: 'fa fa-download',
|
|
79
|
+
type: ButtonType.DOWNLOAD,
|
|
80
|
+
ariaLabel: 'custom close aria label',
|
|
81
|
+
title: 'Download',
|
|
82
|
+
fontSize: '20px'
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
className: 'inside close-image',
|
|
86
|
+
type: ButtonType.CLOSE,
|
|
87
|
+
ariaLabel: 'custom close aria label',
|
|
88
|
+
title: 'Close',
|
|
89
|
+
fontSize: '20px'
|
|
90
|
+
}
|
|
91
|
+
]
|
|
92
|
+
};
|
|
93
|
+
image_list_popup;
|
|
94
|
+
questionnaire_heading = '';
|
|
95
|
+
customer_label = '';
|
|
96
|
+
editQuestionnaire = false;
|
|
97
|
+
audioVideoFiles = [];
|
|
98
|
+
groupedQnr = [];
|
|
99
|
+
dataGridColumns = {};
|
|
100
|
+
dataGridColumnsAnswerList = [];
|
|
101
|
+
updatedGridIndex = {};
|
|
102
|
+
newTimeDateFormat = '';
|
|
103
|
+
qnrStatus = '';
|
|
104
|
+
comments = {};
|
|
105
|
+
tday = new Date();
|
|
106
|
+
minday = new Date(1900, 0, 1);
|
|
107
|
+
dataGridListColumns = {};
|
|
108
|
+
showqnr;
|
|
109
|
+
item;
|
|
110
|
+
showItem = false;
|
|
111
|
+
totalPrice;
|
|
112
|
+
itemLength;
|
|
113
|
+
itemArray = [];
|
|
114
|
+
dataGridList = [];
|
|
115
|
+
id = 0;
|
|
116
|
+
post_Data;
|
|
117
|
+
dgList;
|
|
118
|
+
sequenceId;
|
|
119
|
+
finalObjectList = [];
|
|
120
|
+
showservice = false;
|
|
121
|
+
quesStore;
|
|
122
|
+
allList = '';
|
|
123
|
+
popSearches;
|
|
124
|
+
serviceTotalPrice = 0;
|
|
125
|
+
editableItem;
|
|
126
|
+
constructor(activated_route, wordProcessor, lStorageService, dateProcessor, dialog, fileService, commonService, questionaireService, errorService, toastService, modalGalleryService, location) {
|
|
127
|
+
this.activated_route = activated_route;
|
|
128
|
+
this.wordProcessor = wordProcessor;
|
|
129
|
+
this.lStorageService = lStorageService;
|
|
130
|
+
this.dateProcessor = dateProcessor;
|
|
131
|
+
this.dialog = dialog;
|
|
132
|
+
this.fileService = fileService;
|
|
133
|
+
this.commonService = commonService;
|
|
134
|
+
this.questionaireService = questionaireService;
|
|
135
|
+
this.errorService = errorService;
|
|
136
|
+
this.toastService = toastService;
|
|
137
|
+
this.modalGalleryService = modalGalleryService;
|
|
138
|
+
this.location = location;
|
|
139
|
+
this.activated_route.queryParams.subscribe(qparams => {
|
|
140
|
+
this.params = qparams;
|
|
141
|
+
if (this.params.type) {
|
|
142
|
+
this.source = this.params.type;
|
|
143
|
+
console.log(this.source);
|
|
144
|
+
}
|
|
145
|
+
if (this.params.providerId) {
|
|
146
|
+
this.accountId = this.params.providerId;
|
|
147
|
+
}
|
|
148
|
+
if (this.params.uuid) {
|
|
149
|
+
this.uuid = this.params.uuid;
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
this.subscription = this.questionaireService.getMessage().subscribe(message => {
|
|
153
|
+
switch (message.type) {
|
|
154
|
+
case 'qnrValidateError':
|
|
155
|
+
this.setValidateError(message.value);
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
ngOnDestroy() {
|
|
161
|
+
if (this.subscription) {
|
|
162
|
+
this.subscription.unsubscribe();
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
ngOnChanges() {
|
|
166
|
+
if (this.questionAnswers && this.questionAnswers.filestoUpload && this.source === 'proLead') {
|
|
167
|
+
this.filestoUpload = this.questionAnswers.filestoUpload;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
ngOnInit() {
|
|
171
|
+
console.log("Service Details:", this.questionnaireList);
|
|
172
|
+
console.log("Service Details:", this.service);
|
|
173
|
+
if (this.lStorageService.getitemfromLocalStorage('itemArray')) {
|
|
174
|
+
this.itemArray = this.lStorageService.getitemfromLocalStorage('itemArray');
|
|
175
|
+
if (this.itemArray) {
|
|
176
|
+
this.showItem = true;
|
|
177
|
+
console.log("this.itemArray", this.itemArray);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
this.customer_label = this.wordProcessor.getTerminologyTerm('customer');
|
|
181
|
+
if (this.questionnaireList) {
|
|
182
|
+
console.log(this.source);
|
|
183
|
+
if (this.source === 'customer-create' || this.source === 'onetime') {
|
|
184
|
+
if (this.questionnaireList.labels && this.questionnaireList.labels.length > 0) {
|
|
185
|
+
this.questions = this.questionnaireList.labels[0].questions;
|
|
186
|
+
this.groupQuestionsBySection();
|
|
187
|
+
// this.getAnswers(this.questions, 'get');
|
|
188
|
+
}
|
|
189
|
+
if (this.customerDetails && this.customerDetails[0] && this.customerDetails[0].questionnaire && this.customerDetails[0].questionnaire.questionAnswers) {
|
|
190
|
+
this.getAnswers(this.customerDetails[0].questionnaire.questionAnswers, 'get');
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
else if (this.source === 'qnrDetails') {
|
|
194
|
+
this.questions = this.questionnaireList.questions;
|
|
195
|
+
this.groupQuestionsBySection();
|
|
196
|
+
}
|
|
197
|
+
else if (this.source === 'serviceOptionAppt') {
|
|
198
|
+
this.showservice = true;
|
|
199
|
+
this.questions = this.questionnaireList.labels;
|
|
200
|
+
this.groupQuestionsBySection();
|
|
201
|
+
}
|
|
202
|
+
else if (this.source === 'qnrpaper') {
|
|
203
|
+
this.questions = this.questionnaireList[0].labels;
|
|
204
|
+
this.groupQuestionsBySection();
|
|
205
|
+
}
|
|
206
|
+
else if (!this.uuid && this.questionnaireList.labels) {
|
|
207
|
+
this.questions = this.questionnaireList.labels;
|
|
208
|
+
this.groupQuestionsBySection();
|
|
209
|
+
}
|
|
210
|
+
else if (this.source === 'qnrView' && this.questionnaireList.labels) {
|
|
211
|
+
this.questions = this.questionnaireList.labels;
|
|
212
|
+
this.groupQuestionsBySection();
|
|
213
|
+
}
|
|
214
|
+
else if (this.source === 'condumerOrder' && this.questionnaireList.labels) {
|
|
215
|
+
this.questions = this.questionnaireList.labels;
|
|
216
|
+
this.groupQuestionsBySection();
|
|
217
|
+
}
|
|
218
|
+
else if (this.source === 'ivr' && this.questionnaireList && this.questionnaireList[0].labels) {
|
|
219
|
+
this.questions = this.questionnaireList[0].labels;
|
|
220
|
+
console.log("Questions:", this.questions);
|
|
221
|
+
this.groupQuestionsBySection();
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
if (this.source === 'customer-details' && this.customerDetails[0] && this.customerDetails[0].questionnaire) {
|
|
225
|
+
this.questionnaireList = this.customerDetails[0].questionnaire;
|
|
226
|
+
this.questions = this.customerDetails[0].questionnaire.questionAnswers;
|
|
227
|
+
this.groupQuestionsBySection();
|
|
228
|
+
this.getAnswers(this.questions, 'get');
|
|
229
|
+
}
|
|
230
|
+
if (this.questionAnswers) {
|
|
231
|
+
if (this.questionAnswers.files) {
|
|
232
|
+
this.selectedMessage = this.questionAnswers.files;
|
|
233
|
+
}
|
|
234
|
+
if (this.questionAnswers.audioVideo) {
|
|
235
|
+
this.audioVideoFiles = this.questionAnswers.audioVideo;
|
|
236
|
+
}
|
|
237
|
+
if (this.questionAnswers.filestoUpload) {
|
|
238
|
+
this.filestoUpload = this.questionAnswers.filestoUpload;
|
|
239
|
+
}
|
|
240
|
+
if (this.questionAnswers.dataGridColumnsAnswerList) {
|
|
241
|
+
this.dataGridColumnsAnswerList = this.questionAnswers.dataGridColumnsAnswerList;
|
|
242
|
+
}
|
|
243
|
+
if (this.questionAnswers.comments) {
|
|
244
|
+
this.comments = this.questionAnswers.comments;
|
|
245
|
+
}
|
|
246
|
+
if (this.questionAnswers.answers) {
|
|
247
|
+
this.getAnswers(this.questionAnswers.answers.answerLine, 'init');
|
|
248
|
+
}
|
|
249
|
+
if (this.source == 'ivr') {
|
|
250
|
+
this.getAnswers(this.questionAnswers, 'get');
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
if (this.donationDetails && this.donationDetails.questionnaire) {
|
|
254
|
+
this.questionnaireList = this.donationDetails.questionnaire;
|
|
255
|
+
this.questions = this.questionnaireList.questionAnswers;
|
|
256
|
+
this.groupQuestionsBySection();
|
|
257
|
+
if (this.questions && this.questions.length > 0) {
|
|
258
|
+
this.getAnswers(this.questions, 'get');
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
if (this.uuid) {
|
|
262
|
+
if (this.questionnaireList.questionAnswers) {
|
|
263
|
+
this.questions = this.questionnaireList.questionAnswers;
|
|
264
|
+
this.qnrStatus = 'submitted';
|
|
265
|
+
this.groupQuestionsBySection();
|
|
266
|
+
}
|
|
267
|
+
else if (this.questionnaireList.labels) {
|
|
268
|
+
this.questions = this.questionnaireList.labels;
|
|
269
|
+
this.qnrStatus = 'released';
|
|
270
|
+
this.groupQuestionsBySection();
|
|
271
|
+
}
|
|
272
|
+
else if (this.questionnaireList[0] && this.questionnaireList[0].labels) {
|
|
273
|
+
this.questions = this.questionnaireList[0].labels;
|
|
274
|
+
this.qnrStatus = 'released';
|
|
275
|
+
this.groupQuestionsBySection();
|
|
276
|
+
}
|
|
277
|
+
if (this.questions && this.questions.length > 0) {
|
|
278
|
+
this.getAnswers(this.questions, 'get');
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
this.disableField();
|
|
282
|
+
}
|
|
283
|
+
//disable field
|
|
284
|
+
disableField() {
|
|
285
|
+
if (this.tempType && (this.tempType === 'Loan Sanction' || this.tempType === 'Rejected')) {
|
|
286
|
+
this.buttonDisable = true;
|
|
287
|
+
// this.disableInput();
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
// *.component.ts
|
|
291
|
+
asIsOrder(a, b) {
|
|
292
|
+
return 1;
|
|
293
|
+
}
|
|
294
|
+
groupQuestionsBySection() {
|
|
295
|
+
if (this.source === 'customer-create' || this.source === 'qnrDetails' || this.source === 'onetime') {
|
|
296
|
+
this.groupedQnr = this.commonService.groupBy(this.questions, 'sectionName');
|
|
297
|
+
}
|
|
298
|
+
else if (this.source === 'proLead') {
|
|
299
|
+
this.groupedQnr = this.questions.reduce(function (rv, x) {
|
|
300
|
+
(rv[x.question['sequnceId']] = rv[x.question['sequnceId']] || []).push(x);
|
|
301
|
+
return rv;
|
|
302
|
+
}, {});
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
this.groupedQnr = this.questions.reduce(function (rv, x) {
|
|
306
|
+
(rv[x.question['sectionOrder']] = rv[x.question['sectionOrder']] || []).push(x);
|
|
307
|
+
return rv;
|
|
308
|
+
}, {});
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
setValidateError(errors) {
|
|
312
|
+
this.apiError = [];
|
|
313
|
+
if (errors.length > 0) {
|
|
314
|
+
for (let error of errors) {
|
|
315
|
+
this.apiError[error.questionField] = [];
|
|
316
|
+
this.apiError[error.questionField].push(error.error);
|
|
317
|
+
}
|
|
318
|
+
this.buttonDisable = false;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
getAnswers(answerData, type) {
|
|
322
|
+
this.answers = new Object();
|
|
323
|
+
this.dataGridColumns = {};
|
|
324
|
+
if (type === 'get') {
|
|
325
|
+
this.selectedMessage = [];
|
|
326
|
+
this.uploadedImages = [];
|
|
327
|
+
this.uploadedFiles = [];
|
|
328
|
+
for (let answ of answerData) {
|
|
329
|
+
if (answ.answerLine) {
|
|
330
|
+
if (answ.question.fieldDataType === 'fileUpload') {
|
|
331
|
+
if (this.source === 'proLead') {
|
|
332
|
+
if (answ.answerLine.answer[answ.question.fieldDataType] && answ.answerLine.answer[answ.question.fieldDataType].length > 0) {
|
|
333
|
+
for (let i = 0; i < answ.answerLine.answer[answ.question.fieldDataType].length; i++) {
|
|
334
|
+
answ.answerLine.answer[answ.question.fieldDataType][i].action = 'add';
|
|
335
|
+
answ.answerLine.answer[answ.question.fieldDataType][i].status = 'COMPLETE';
|
|
336
|
+
answ.answerLine.answer[answ.question.fieldDataType][i].s3path = answ.answerLine.answer[answ.question.fieldDataType][i].s3path;
|
|
337
|
+
answ.answerLine.answer[answ.question.fieldDataType][i].uid = answ.answerLine.answer[answ.question.fieldDataType][i].uid;
|
|
338
|
+
answ.answerLine.answer[answ.question.fieldDataType][i].driveId = answ.answerLine.answer[answ.question.fieldDataType][i].driveId;
|
|
339
|
+
answ.answerLine.answer[answ.question.fieldDataType][i].url = answ.answerLine.answer[answ.question.fieldDataType][i].keyName;
|
|
340
|
+
}
|
|
341
|
+
this.answers[answ.answerLine.labelName] = answ.answerLine.answer[answ.question.fieldDataType];
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
if (answ.answerLine.answer && answ.answerLine.answer[answ.question.fieldDataType] && answ.answerLine.answer[answ.question.fieldDataType].length > 0) {
|
|
345
|
+
for (let i = 0; i < answ.answerLine.answer[answ.question.fieldDataType].length; i++) {
|
|
346
|
+
if (type === 'get') {
|
|
347
|
+
this.uploadedImages.push(answ.answerLine.answer[answ.question.fieldDataType][i]);
|
|
348
|
+
if (!this.uploadedFiles[answ.answerLine.labelName]) {
|
|
349
|
+
this.uploadedFiles[answ.answerLine.labelName] = {};
|
|
350
|
+
}
|
|
351
|
+
if (!this.uploadedFiles[answ.answerLine.labelName][answ.answerLine.answer[answ.question.fieldDataType][i].caption]) {
|
|
352
|
+
this.uploadedFiles[answ.answerLine.labelName][answ.answerLine.answer[answ.question.fieldDataType][i].caption] = {};
|
|
353
|
+
}
|
|
354
|
+
this.comments[answ.answerLine.labelName + '=' + answ.answerLine.answer[answ.question.fieldDataType][i].caption] = answ.answerLine.answer[answ.question.fieldDataType][i].comments;
|
|
355
|
+
this.uploadedFiles[answ.answerLine.labelName][answ.answerLine.answer[answ.question.fieldDataType][i].caption] = answ.answerLine.answer[answ.question.fieldDataType][i];
|
|
356
|
+
}
|
|
357
|
+
else {
|
|
358
|
+
this.selectedMessage.push(answ.answerLine.answer[answ.question.fieldDataType][i]);
|
|
359
|
+
if (!this.filestoUpload[answ.answerLine.labelName]) {
|
|
360
|
+
this.filestoUpload[answ.answerLine.labelName] = {};
|
|
361
|
+
}
|
|
362
|
+
if (!this.filestoUpload[answ.answerLine.labelName][answ.answerLine.answer[answ.question.fieldDataType][i].caption]) {
|
|
363
|
+
this.filestoUpload[answ.answerLine.labelName][answ.answerLine.answer[answ.question.fieldDataType][i].caption] = {};
|
|
364
|
+
}
|
|
365
|
+
this.filestoUpload[answ.answerLine.labelName][answ.answerLine.answer[answ.question.fieldDataType][i].caption] = answ.answerLine.answer[answ.question.fieldDataType][i];
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
else if (answ.question.fieldDataType === 'dataGrid') {
|
|
371
|
+
for (let row of answ.answerLine.answer[answ.question.fieldDataType]) {
|
|
372
|
+
let columns = [];
|
|
373
|
+
for (let i = 0; i < row.dataGridColumn.length; i++) {
|
|
374
|
+
columns[i + 1] = row.dataGridColumn[i].column[Object.keys(row.dataGridColumn[i].column)[0]];
|
|
375
|
+
}
|
|
376
|
+
if (!this.dataGridColumnsAnswerList[answ.answerLine.labelName]) {
|
|
377
|
+
this.dataGridColumnsAnswerList[answ.answerLine.labelName] = [];
|
|
378
|
+
}
|
|
379
|
+
this.dataGridColumnsAnswerList[answ.answerLine.labelName].push(columns);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
else {
|
|
383
|
+
this.answers[answ.answerLine.labelName] = answ.answerLine.answer[answ.question.fieldDataType];
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
else {
|
|
389
|
+
for (let answ of answerData) {
|
|
390
|
+
if (answ.answer[Object.keys(answ.answer)[0]]) {
|
|
391
|
+
this.answers[answ.labelName] = answ.answer[Object.keys(answ.answer)[0]];
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
if (type === 'get') {
|
|
396
|
+
Object.keys(this.uploadedFiles).forEach(key => {
|
|
397
|
+
this.uploadFilesTemp[key] = [];
|
|
398
|
+
Object.keys(this.uploadedFiles[key]).forEach(key1 => {
|
|
399
|
+
if (this.uploadedFiles[key][key1]) {
|
|
400
|
+
if (!this.uploadFilesTemp[key]) {
|
|
401
|
+
this.uploadFilesTemp[key] = [];
|
|
402
|
+
}
|
|
403
|
+
const type = this.uploadedFiles[key][key1].type.split('/');
|
|
404
|
+
if (type[0] !== 'audio' && type[0] !== 'video' || ((type[0] === 'audio' || type[0] === 'video') && this.uploadedFiles[key][key1].status === 'COMPLETE')) {
|
|
405
|
+
this.uploadFilesTemp[key].push(key1);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
});
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
else {
|
|
412
|
+
Object.keys(this.filestoUpload).forEach(key => {
|
|
413
|
+
Object.keys(this.filestoUpload[key]).forEach(key1 => {
|
|
414
|
+
if (this.filestoUpload[key][key1]) {
|
|
415
|
+
if (!this.uploadFilesTemp[key]) {
|
|
416
|
+
this.uploadFilesTemp[key] = [];
|
|
417
|
+
}
|
|
418
|
+
this.uploadFilesTemp[key].push(key1);
|
|
419
|
+
}
|
|
420
|
+
});
|
|
421
|
+
});
|
|
422
|
+
}
|
|
423
|
+
this.onSubmit('init');
|
|
424
|
+
}
|
|
425
|
+
filesSelected(event, question, document) {
|
|
426
|
+
const input = event.target.files;
|
|
427
|
+
if (input) {
|
|
428
|
+
for (const file of input) {
|
|
429
|
+
const fileInput = {
|
|
430
|
+
caption: document,
|
|
431
|
+
file: file,
|
|
432
|
+
labelName: question.labelName
|
|
433
|
+
};
|
|
434
|
+
this.fileChanged.emit(fileInput);
|
|
435
|
+
let type = file.type.split('/');
|
|
436
|
+
this.apiError[question.labelName] = [];
|
|
437
|
+
if (!this.filestoUpload[question.labelName]) {
|
|
438
|
+
this.filestoUpload[question.labelName] = {};
|
|
439
|
+
}
|
|
440
|
+
if (!this.filestoUpload[question.labelName][document]) {
|
|
441
|
+
this.filestoUpload[question.labelName][document] = {};
|
|
442
|
+
}
|
|
443
|
+
if (this.filestoUpload[question.labelName] && this.filestoUpload[question.labelName][document]) {
|
|
444
|
+
let index;
|
|
445
|
+
if (type[0] === 'application' || type[0] === 'image') {
|
|
446
|
+
index = this.selectedMessage.indexOf(this.filestoUpload[question.labelName][document]);
|
|
447
|
+
}
|
|
448
|
+
else {
|
|
449
|
+
index = this.audioVideoFiles.indexOf(this.filestoUpload[question.labelName][document]);
|
|
450
|
+
}
|
|
451
|
+
if (index !== -1) {
|
|
452
|
+
if (type[0] === 'application' || type[0] === 'image') {
|
|
453
|
+
this.selectedMessage.splice(index, 1);
|
|
454
|
+
}
|
|
455
|
+
else {
|
|
456
|
+
this.audioVideoFiles.splice(index, 1);
|
|
457
|
+
}
|
|
458
|
+
delete this.filestoUpload[question.labelName][document];
|
|
459
|
+
delete this.answers[question.labelName][index];
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
this.filestoUpload[question.labelName][document] = file;
|
|
463
|
+
if (type[0] === 'application' || type[0] === 'image') {
|
|
464
|
+
this.selectedMessage.push(file);
|
|
465
|
+
const indx = this.selectedMessage.indexOf(file);
|
|
466
|
+
if (indx !== -1) {
|
|
467
|
+
const reader = new FileReader();
|
|
468
|
+
reader.onload = (e) => {
|
|
469
|
+
this.selectedMessage[indx]['path'] = e.target['result'];
|
|
470
|
+
};
|
|
471
|
+
reader.readAsDataURL(file);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
else {
|
|
475
|
+
this.audioVideoFiles.push(file);
|
|
476
|
+
const indx = this.audioVideoFiles.indexOf(file);
|
|
477
|
+
if (indx !== -1) {
|
|
478
|
+
const reader = new FileReader();
|
|
479
|
+
reader.onload = (e) => {
|
|
480
|
+
this.audioVideoFiles[indx]['path'] = e.target['result'];
|
|
481
|
+
};
|
|
482
|
+
reader.readAsDataURL(file);
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
if (this.file2 && this.file2.nativeElement.value) {
|
|
487
|
+
this.file2.nativeElement.value = '';
|
|
488
|
+
}
|
|
489
|
+
this.onSubmit('inputChange');
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
changeImageSelected(question, document) {
|
|
493
|
+
if (this.filestoUpload[question.labelName] && this.filestoUpload[question.labelName][document]) {
|
|
494
|
+
let type = this.filestoUpload[question.labelName][document].type.split('/');
|
|
495
|
+
type = type[0];
|
|
496
|
+
let index;
|
|
497
|
+
if (type === 'application' || type === 'image') {
|
|
498
|
+
index = this.selectedMessage.indexOf(this.filestoUpload[question.labelName][document]);
|
|
499
|
+
}
|
|
500
|
+
else {
|
|
501
|
+
index = this.audioVideoFiles.indexOf(this.filestoUpload[question.labelName][document]);
|
|
502
|
+
}
|
|
503
|
+
if (index !== -1) {
|
|
504
|
+
if (type === 'application' || type === 'image') {
|
|
505
|
+
this.selectedMessage.splice(index, 1);
|
|
506
|
+
}
|
|
507
|
+
else {
|
|
508
|
+
this.audioVideoFiles.splice(index, 1);
|
|
509
|
+
}
|
|
510
|
+
delete this.filestoUpload[question.labelName][document];
|
|
511
|
+
this.comments[question.labelName + '=' + document] = '';
|
|
512
|
+
if (this.answers[question.labelName] && this.answers[question.labelName].length > 0) {
|
|
513
|
+
const filteredAnswer = this.answers[question.labelName].filter((answer) => answer.caption === document);
|
|
514
|
+
if (filteredAnswer[0]) {
|
|
515
|
+
const index = this.answers[question.labelName].indexOf(filteredAnswer[0]);
|
|
516
|
+
if (index !== -1) {
|
|
517
|
+
this.answers[question.labelName].splice(index, 1);
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
if (Object.keys(this.filestoUpload[question.labelName]).length === 0) {
|
|
523
|
+
delete this.filestoUpload[question.labelName];
|
|
524
|
+
}
|
|
525
|
+
if (this.answers[question.labelName] && this.answers[question.labelName].length === 0) {
|
|
526
|
+
delete this.answers[question.labelName];
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
else if (this.uploadedFiles[question.labelName] && this.uploadedFiles[question.labelName][document]) {
|
|
530
|
+
const index = this.uploadedImages.indexOf(this.uploadedFiles[question.labelName][document]);
|
|
531
|
+
if (index !== -1) {
|
|
532
|
+
this.uploadedFiles[question.labelName][document] = 'remove';
|
|
533
|
+
this.comments[question.labelName + '=' + document] = '';
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
this.onSubmit('inputChange');
|
|
537
|
+
}
|
|
538
|
+
isNumeric(evt) {
|
|
539
|
+
return this.commonService.isNumeric(evt);
|
|
540
|
+
}
|
|
541
|
+
onSubmit(keytype) {
|
|
542
|
+
Object.keys(this.filestoUpload).forEach(key => {
|
|
543
|
+
if (!this.answers[key]) {
|
|
544
|
+
this.answers[key] = [];
|
|
545
|
+
}
|
|
546
|
+
if (Object.keys(this.filestoUpload[key]).length > 0) {
|
|
547
|
+
Object.keys(this.filestoUpload[key]).forEach(key1 => {
|
|
548
|
+
if (this.filestoUpload[key][key1]) {
|
|
549
|
+
let type = this.filestoUpload[key][key1].type.split('/');
|
|
550
|
+
type = type[0];
|
|
551
|
+
let indx;
|
|
552
|
+
if (type === 'application' || type === 'image') {
|
|
553
|
+
indx = this.selectedMessage.indexOf(this.filestoUpload[key][key1]);
|
|
554
|
+
}
|
|
555
|
+
else {
|
|
556
|
+
indx = this.audioVideoFiles.indexOf(this.filestoUpload[key][key1]);
|
|
557
|
+
}
|
|
558
|
+
if (indx !== -1) {
|
|
559
|
+
let status = 'add';
|
|
560
|
+
if (this.uploadedFiles[key] && this.uploadedFiles[key][key1]) {
|
|
561
|
+
status = 'update';
|
|
562
|
+
}
|
|
563
|
+
if (this.answers[key] && this.answers[key].length > 0) {
|
|
564
|
+
const filteredAnswer = this.answers[key].filter((answer) => answer.caption === key1);
|
|
565
|
+
if (filteredAnswer[0]) {
|
|
566
|
+
const index = this.answers[key].indexOf(filteredAnswer[0]);
|
|
567
|
+
if (index !== -1) {
|
|
568
|
+
this.answers[key].splice(index, 1);
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
let type = this.filestoUpload[key][key1].type.split('/');
|
|
573
|
+
type = type[0];
|
|
574
|
+
if (type === 'application' || type === 'image') {
|
|
575
|
+
this.answers[key].push({ caption: key1, action: status, mimeType: this.filestoUpload[key][key1].type, url: this.filestoUpload[key][key1].name, size: this.filestoUpload[key][key1].size, comments: this.comments[key + '=' + key1], driveId: this.filestoUpload[key][key1].driveId, uid: this.filestoUpload[key][key1].uid, status: 'COMPLETE' });
|
|
576
|
+
}
|
|
577
|
+
else {
|
|
578
|
+
this.answers[key].push({ caption: key1, action: status, mimeType: this.filestoUpload[key][key1].type, url: this.filestoUpload[key][key1].name, size: this.filestoUpload[key][key1].size, comments: this.comments[key + '=' + key1], driveId: this.filestoUpload[key][key1].driveId, uid: this.filestoUpload[key][key1].uid, status: 'COMPLETE' });
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
else {
|
|
583
|
+
if (this.answers[key] && this.answers[key].length > 0) {
|
|
584
|
+
const filteredAnswer = this.answers[key].filter((answer) => answer.caption === key1);
|
|
585
|
+
if (filteredAnswer[0]) {
|
|
586
|
+
const index = this.answers[key].indexOf(filteredAnswer[0]);
|
|
587
|
+
if (index !== -1) {
|
|
588
|
+
this.answers[key].splice(index, 1);
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
});
|
|
594
|
+
}
|
|
595
|
+
else {
|
|
596
|
+
delete this.answers[key];
|
|
597
|
+
}
|
|
598
|
+
if (this.answers[key] && this.answers[key].length === 0) {
|
|
599
|
+
delete this.answers[key];
|
|
600
|
+
}
|
|
601
|
+
});
|
|
602
|
+
Object.keys(this.uploadedFiles).forEach(key => {
|
|
603
|
+
if (!this.answers[key]) {
|
|
604
|
+
this.answers[key] = [];
|
|
605
|
+
}
|
|
606
|
+
if (this.uploadedFiles[key] && Object.keys(this.uploadedFiles[key]).length > 0) {
|
|
607
|
+
Object.keys(this.uploadedFiles[key]).forEach(key1 => {
|
|
608
|
+
if ((!this.filestoUpload[key] || (this.filestoUpload[key] && !this.filestoUpload[key][key1])) && this.uploadedFiles[key][key1] && this.uploadedFiles[key][key1] === 'remove') {
|
|
609
|
+
if (this.answers[key] && this.answers[key].length > 0) {
|
|
610
|
+
const filteredAnswer = this.answers[key].filter((answer) => answer.caption === key1);
|
|
611
|
+
if (filteredAnswer[0]) {
|
|
612
|
+
const index = this.answers[key].indexOf(filteredAnswer[0]);
|
|
613
|
+
if (index !== -1) {
|
|
614
|
+
this.answers[key].splice(index, 1);
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
this.answers[key].push({ caption: key1, action: 'remove' });
|
|
619
|
+
}
|
|
620
|
+
});
|
|
621
|
+
if (this.answers[key].length === 0) {
|
|
622
|
+
delete this.answers[key];
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
});
|
|
626
|
+
let data = [];
|
|
627
|
+
Object.keys(this.dataGridColumnsAnswerList).forEach(key => {
|
|
628
|
+
let newFiled = {};
|
|
629
|
+
let question = this.questions.filter((quest) => this.getQuestion(quest).labelName === key);
|
|
630
|
+
question = question[0].question;
|
|
631
|
+
for (let gridAnswer of this.dataGridColumnsAnswerList[key]) {
|
|
632
|
+
let columnData = [];
|
|
633
|
+
Object.keys(gridAnswer).forEach(key1 => {
|
|
634
|
+
let newType = {};
|
|
635
|
+
const columnDetails = question.dataGridProperties.dataGridColumns.filter((clmn) => clmn.order === JSON.parse(key1));
|
|
636
|
+
if (columnDetails[0]) {
|
|
637
|
+
const columnType = columnDetails[0].dataType;
|
|
638
|
+
newType[columnType] = gridAnswer[key1];
|
|
639
|
+
columnData.push({
|
|
640
|
+
columnId: columnDetails[0].columnId,
|
|
641
|
+
column: newType
|
|
642
|
+
});
|
|
643
|
+
}
|
|
644
|
+
});
|
|
645
|
+
let newMap = {};
|
|
646
|
+
newMap['dataGridColumn'] = columnData;
|
|
647
|
+
if (!newFiled[question.fieldDataType]) {
|
|
648
|
+
newFiled[question.fieldDataType] = [];
|
|
649
|
+
}
|
|
650
|
+
newFiled[question.fieldDataType].push(newMap);
|
|
651
|
+
}
|
|
652
|
+
data.push({
|
|
653
|
+
'labelName': key,
|
|
654
|
+
'answer': newFiled
|
|
655
|
+
});
|
|
656
|
+
});
|
|
657
|
+
Object.keys(this.answers).forEach(key => {
|
|
658
|
+
this.apiError[key] = [];
|
|
659
|
+
let newMap = {};
|
|
660
|
+
let question = this.questions.filter((quest) => this.getQuestion(quest).labelName === key);
|
|
661
|
+
if (this.source === 'customer-create' || this.source === 'qnrDetails' || this.source === 'onetime') {
|
|
662
|
+
question = question[0];
|
|
663
|
+
}
|
|
664
|
+
else {
|
|
665
|
+
question = question[0].question;
|
|
666
|
+
}
|
|
667
|
+
if (this.answers[key] || question.fieldDataType === 'bool') {
|
|
668
|
+
let answer = this.answers[key];
|
|
669
|
+
if (question.fieldDataType === 'date') {
|
|
670
|
+
answer = this.dateProcessor.transformToYMDFormat(answer);
|
|
671
|
+
}
|
|
672
|
+
newMap[question.fieldDataType] = answer;
|
|
673
|
+
data.push({
|
|
674
|
+
'labelName': key,
|
|
675
|
+
'answer': newMap
|
|
676
|
+
});
|
|
677
|
+
}
|
|
678
|
+
else {
|
|
679
|
+
// newMap = '';
|
|
680
|
+
// data.push({
|
|
681
|
+
// 'labelName': key,
|
|
682
|
+
// });
|
|
683
|
+
}
|
|
684
|
+
});
|
|
685
|
+
let postData;
|
|
686
|
+
if (this.source === 'qnrpaper') {
|
|
687
|
+
postData = {
|
|
688
|
+
'questionnaireId': (this.questionnaireList[0].id) ? this.questionnaireList[0].id : this.questionnaireList[0].questionnaireId,
|
|
689
|
+
'answerLine': data
|
|
690
|
+
};
|
|
691
|
+
}
|
|
692
|
+
else if (keytype === 'serviceOption') {
|
|
693
|
+
postData = {
|
|
694
|
+
'questionnaireId': (this.questionnaireList.id) ? this.questionnaireList.id : this.questionnaireList[0].questionnaireId,
|
|
695
|
+
'answerLine': this.finalObjectList
|
|
696
|
+
};
|
|
697
|
+
}
|
|
698
|
+
else if (this.source === 'ivr' && this.params.customId) {
|
|
699
|
+
console.log('fffffffffffffffffffff', this.questionnaireList);
|
|
700
|
+
postData = {
|
|
701
|
+
'questionnaireId': (this.questionnaireList[0].id) ? this.questionnaireList[0].id : this.questionnaireList[0].questionnaireId,
|
|
702
|
+
'answerLine': data
|
|
703
|
+
};
|
|
704
|
+
}
|
|
705
|
+
else {
|
|
706
|
+
console.log('questionnaireList', this.questionnaireList);
|
|
707
|
+
postData = {
|
|
708
|
+
'questionnaireId': (this.questionnaireList.id) ? this.questionnaireList.id : this.questionnaireList.questionnaireId,
|
|
709
|
+
'answerLine': data
|
|
710
|
+
};
|
|
711
|
+
}
|
|
712
|
+
const passData = { 'answers': postData, 'files': this.selectedMessage, 'audioVideo': this.audioVideoFiles, 'filestoUpload': this.filestoUpload, 'dataGridColumnsAnswerList': this.dataGridColumnsAnswerList, 'comments': this.comments };
|
|
713
|
+
if (keytype === 'inputChange') {
|
|
714
|
+
this.changeHappened = true;
|
|
715
|
+
}
|
|
716
|
+
if (keytype === 'submit') {
|
|
717
|
+
if (this.changeHappened) {
|
|
718
|
+
this.submitQuestionnaire(passData);
|
|
719
|
+
}
|
|
720
|
+
else {
|
|
721
|
+
if (!this.type) {
|
|
722
|
+
this.location.back();
|
|
723
|
+
}
|
|
724
|
+
else {
|
|
725
|
+
if (this.type === 'qnr-link') {
|
|
726
|
+
this.returnAnswers.emit('nochange');
|
|
727
|
+
}
|
|
728
|
+
else {
|
|
729
|
+
this.editQnr();
|
|
730
|
+
}
|
|
731
|
+
}
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
else {
|
|
735
|
+
this.returnAnswers.emit(passData);
|
|
736
|
+
}
|
|
737
|
+
}
|
|
738
|
+
getDate(date) {
|
|
739
|
+
return new Date(date);
|
|
740
|
+
}
|
|
741
|
+
listChange(ev, value, question, column) {
|
|
742
|
+
if (question.fieldDataType !== 'dataGrid') {
|
|
743
|
+
if (ev.target.checked) {
|
|
744
|
+
if (!this.answers[question.labelName]) {
|
|
745
|
+
this.answers[question.labelName] = [];
|
|
746
|
+
}
|
|
747
|
+
if (question.listPropertie && question.listPropertie.maxAnswers && question.listPropertie.maxAnswers > 1) {
|
|
748
|
+
this.answers[question.labelName].push(value);
|
|
749
|
+
}
|
|
750
|
+
else {
|
|
751
|
+
this.answers[question.labelName][0] = value;
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
else {
|
|
755
|
+
const indx = this.answers[question.labelName].indexOf(value);
|
|
756
|
+
this.answers[question.labelName].splice(indx, 1);
|
|
757
|
+
}
|
|
758
|
+
if (this.answers[question.labelName].length === 0) {
|
|
759
|
+
this.answers[question.labelName] = '';
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
else {
|
|
763
|
+
if (ev.target.checked) {
|
|
764
|
+
if (!this.dataGridColumns[question.labelName + '=' + column.order]) {
|
|
765
|
+
this.dataGridColumns[question.labelName + '=' + column.order] = [];
|
|
766
|
+
}
|
|
767
|
+
this.dataGridColumns[question.labelName + '=' + column.order].push(value);
|
|
768
|
+
}
|
|
769
|
+
else {
|
|
770
|
+
const indx = this.dataGridColumns[question.labelName + '=' + column.order].indexOf(value);
|
|
771
|
+
this.dataGridColumns[question.labelName + '=' + column.order].splice(indx, 1);
|
|
772
|
+
}
|
|
773
|
+
}
|
|
774
|
+
this.onSubmit('inputChange');
|
|
775
|
+
}
|
|
776
|
+
isChecked(value, question, column) {
|
|
777
|
+
if (question.fieldDataType !== 'dataGrid') {
|
|
778
|
+
if (this.answers[question.labelName]) {
|
|
779
|
+
const indx = this.answers[question.labelName].indexOf(value);
|
|
780
|
+
if (indx !== -1) {
|
|
781
|
+
return true;
|
|
782
|
+
}
|
|
783
|
+
else {
|
|
784
|
+
return false;
|
|
785
|
+
}
|
|
786
|
+
}
|
|
787
|
+
else {
|
|
788
|
+
return false;
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
else {
|
|
792
|
+
if (this.dataGridColumns[question.labelName + '=' + column.order]) {
|
|
793
|
+
const indx = this.dataGridColumns[question.labelName + '=' + column.order].indexOf(value);
|
|
794
|
+
if (indx !== -1) {
|
|
795
|
+
return true;
|
|
796
|
+
}
|
|
797
|
+
else {
|
|
798
|
+
return false;
|
|
799
|
+
}
|
|
800
|
+
}
|
|
801
|
+
else {
|
|
802
|
+
return false;
|
|
803
|
+
}
|
|
804
|
+
}
|
|
805
|
+
}
|
|
806
|
+
booleanChange(ev, value, question, column) {
|
|
807
|
+
if (question.fieldDataType !== 'dataGrid') {
|
|
808
|
+
if (ev.target.checked) {
|
|
809
|
+
if (!this.answers[question.labelName]) {
|
|
810
|
+
this.answers[question.labelName] = {};
|
|
811
|
+
}
|
|
812
|
+
this.answers[question.labelName] = (value.toLowerCase() === 'yes') ? true : false;
|
|
813
|
+
}
|
|
814
|
+
}
|
|
815
|
+
else {
|
|
816
|
+
if (ev.target.checked) {
|
|
817
|
+
this.dataGridColumns[question.labelName + '=' + column.order] = (value === 'yes') ? true : false;
|
|
818
|
+
}
|
|
819
|
+
}
|
|
820
|
+
this.onSubmit('inputChange');
|
|
821
|
+
}
|
|
822
|
+
isBooleanChecked(value, question, column) {
|
|
823
|
+
value = (value.toLowerCase() === 'yes') ? true : false;
|
|
824
|
+
if (question.fieldDataType !== 'dataGrid') {
|
|
825
|
+
if (this.answers[question.labelName] !== '' && typeof this.answers[question.labelName] === 'string') {
|
|
826
|
+
this.answers[question.labelName] = JSON.parse(this.answers[question.labelName]);
|
|
827
|
+
}
|
|
828
|
+
if (this.answers[question.labelName] === value) {
|
|
829
|
+
return true;
|
|
830
|
+
}
|
|
831
|
+
else {
|
|
832
|
+
return false;
|
|
833
|
+
}
|
|
834
|
+
}
|
|
835
|
+
else {
|
|
836
|
+
if (this.dataGridColumns[question.labelName + '=' + column.order] !== '' && typeof this.dataGridColumns[question.labelName + '=' + column.order] === 'string') {
|
|
837
|
+
this.dataGridColumns[question.labelName + '=' + column.order] = JSON.parse(this.dataGridColumns[question.labelName + '=' + column.order]);
|
|
838
|
+
}
|
|
839
|
+
if (this.dataGridColumns[question.labelName + '=' + column.order] === value) {
|
|
840
|
+
return true;
|
|
841
|
+
}
|
|
842
|
+
else {
|
|
843
|
+
return false;
|
|
844
|
+
}
|
|
845
|
+
}
|
|
846
|
+
}
|
|
847
|
+
submitQuestionnaire(passData) {
|
|
848
|
+
console.log('fdff', passData);
|
|
849
|
+
const dataToSend = new FormData();
|
|
850
|
+
const blobpost_Data = new Blob([JSON.stringify(passData.answers)], { type: 'application/json' });
|
|
851
|
+
dataToSend.append('question', blobpost_Data);
|
|
852
|
+
this.buttonDisable = true;
|
|
853
|
+
}
|
|
854
|
+
uploadAudioVideo(data, type) {
|
|
855
|
+
if (data.urls && data.urls.length > 0) {
|
|
856
|
+
let postData = {
|
|
857
|
+
urls: []
|
|
858
|
+
};
|
|
859
|
+
for (const url of data.urls) {
|
|
860
|
+
const file = this.filestoUpload[url.labelName][url.document];
|
|
861
|
+
this.questionaireService.videoaudioS3Upload(file, url.url)
|
|
862
|
+
.subscribe(() => {
|
|
863
|
+
postData['urls'].push({ uid: url.uid, labelName: url.labelName });
|
|
864
|
+
if (data.urls.length === postData['urls'].length) {
|
|
865
|
+
if (type === 'consCheckin') {
|
|
866
|
+
this.questionaireService.consumerWaitlistQnrUploadStatusUpdate(this.uuid, this.accountId, postData)
|
|
867
|
+
.subscribe((data) => {
|
|
868
|
+
this.successGoback();
|
|
869
|
+
}, error => {
|
|
870
|
+
let errorObj = this.errorService.getApiError(error);
|
|
871
|
+
this.toastService.showError(this.wordProcessor.getProjectErrorMesssages(errorObj));
|
|
872
|
+
this.buttonDisable = false;
|
|
873
|
+
});
|
|
874
|
+
}
|
|
875
|
+
else if (type === 'consAppt') {
|
|
876
|
+
this.questionaireService.consumerApptQnrUploadStatusUpdate(this.uuid, this.accountId, postData)
|
|
877
|
+
.subscribe((data) => {
|
|
878
|
+
this.successGoback();
|
|
879
|
+
}, error => {
|
|
880
|
+
let errorObj = this.errorService.getApiError(error);
|
|
881
|
+
this.toastService.showError(this.wordProcessor.getProjectErrorMesssages(errorObj));
|
|
882
|
+
this.buttonDisable = false;
|
|
883
|
+
});
|
|
884
|
+
}
|
|
885
|
+
else if (type === 'consOrder' || type === 'paper') {
|
|
886
|
+
this.questionaireService.consumerOrderQnrUploadStatusUpdate(this.uuid, this.accountId, postData)
|
|
887
|
+
.subscribe((data) => {
|
|
888
|
+
this.successGoback();
|
|
889
|
+
}, error => {
|
|
890
|
+
this.toastService.showError(this.wordProcessor.getProjectErrorMesssages(error));
|
|
891
|
+
this.buttonDisable = false;
|
|
892
|
+
});
|
|
893
|
+
}
|
|
894
|
+
else if (type === 'consDonationDetails') {
|
|
895
|
+
this.questionaireService.consumerDonationQnrUploadStatusUpdate(this.uuid, this.accountId, postData)
|
|
896
|
+
.subscribe(() => {
|
|
897
|
+
this.successGoback();
|
|
898
|
+
}, (error) => {
|
|
899
|
+
let errorObj = this.errorService.getApiError(error);
|
|
900
|
+
this.toastService.showError(this.wordProcessor.getProjectErrorMesssages(errorObj));
|
|
901
|
+
this.buttonDisable = false;
|
|
902
|
+
});
|
|
903
|
+
}
|
|
904
|
+
}
|
|
905
|
+
}, (error) => {
|
|
906
|
+
let errorObj = this.errorService.getApiError(error);
|
|
907
|
+
this.toastService.showError(this.wordProcessor.getProjectErrorMesssages(errorObj));
|
|
908
|
+
this.buttonDisable = false;
|
|
909
|
+
});
|
|
910
|
+
}
|
|
911
|
+
}
|
|
912
|
+
else {
|
|
913
|
+
this.successGoback();
|
|
914
|
+
}
|
|
915
|
+
}
|
|
916
|
+
goBack() {
|
|
917
|
+
this.location.back();
|
|
918
|
+
}
|
|
919
|
+
getQuestion(question) {
|
|
920
|
+
if (this.source === 'customer-create' || this.source === 'qnrDetails' || this.source === 'onetime' || this.source === 'serviceOptionAppt') {
|
|
921
|
+
return question;
|
|
922
|
+
}
|
|
923
|
+
else {
|
|
924
|
+
return question.question;
|
|
925
|
+
}
|
|
926
|
+
}
|
|
927
|
+
validateQuestionnaire(src) {
|
|
928
|
+
if (!this.questionAnswers) {
|
|
929
|
+
this.questionAnswers = {
|
|
930
|
+
answers: {
|
|
931
|
+
answerLine: [],
|
|
932
|
+
questionnaireId: (this.questionnaireList.id) ? this.questionnaireList.id : this.questionnaireList.questionnaireId,
|
|
933
|
+
}
|
|
934
|
+
};
|
|
935
|
+
}
|
|
936
|
+
}
|
|
937
|
+
getImg(question, document) {
|
|
938
|
+
if (this.filestoUpload[question.labelName] && this.filestoUpload[question.labelName][document]) {
|
|
939
|
+
let type = this.filestoUpload[question.labelName][document].type.split('/');
|
|
940
|
+
let file;
|
|
941
|
+
if (type[0] === 'video' || type[0] === 'audio') {
|
|
942
|
+
file = this.audioVideoFiles;
|
|
943
|
+
}
|
|
944
|
+
else {
|
|
945
|
+
file = this.selectedMessage;
|
|
946
|
+
}
|
|
947
|
+
const indx = file.indexOf(this.filestoUpload[question.labelName][document]);
|
|
948
|
+
if (indx !== -1) {
|
|
949
|
+
let path = this.fileService.getImage(null, this.filestoUpload[question.labelName][document]);
|
|
950
|
+
if (path && path !== null) {
|
|
951
|
+
return path;
|
|
952
|
+
}
|
|
953
|
+
path = file[indx].path;
|
|
954
|
+
return path;
|
|
955
|
+
}
|
|
956
|
+
}
|
|
957
|
+
else if (this.uploadedFiles[question.labelName] && this.uploadedFiles[question.labelName][document]) {
|
|
958
|
+
const indx = this.uploadedImages.indexOf(this.uploadedFiles[question.labelName][document]);
|
|
959
|
+
if (indx !== -1) {
|
|
960
|
+
let path = this.fileService.getImage(null, this.uploadedImages[indx]);
|
|
961
|
+
if (path && path !== null) {
|
|
962
|
+
return path;
|
|
963
|
+
}
|
|
964
|
+
path = this.uploadedImages[indx].s3path;
|
|
965
|
+
return path;
|
|
966
|
+
}
|
|
967
|
+
}
|
|
968
|
+
}
|
|
969
|
+
onButtonBeforeHook(event) {
|
|
970
|
+
if (!event || !event.button) {
|
|
971
|
+
return;
|
|
972
|
+
}
|
|
973
|
+
if (event.button.type === ButtonType.DOWNLOAD) {
|
|
974
|
+
}
|
|
975
|
+
}
|
|
976
|
+
openAttachmentGallery(question, document) {
|
|
977
|
+
this.image_list_popup = [];
|
|
978
|
+
let count = 0;
|
|
979
|
+
let imagePath;
|
|
980
|
+
let caption = '';
|
|
981
|
+
if (this.filestoUpload[question.labelName] && this.filestoUpload[question.labelName][document]) {
|
|
982
|
+
let type = this.filestoUpload[question.labelName][document].type.split('/');
|
|
983
|
+
if (type[0] === 'video' || type[0] === 'audio') {
|
|
984
|
+
const indx = this.audioVideoFiles.indexOf(this.filestoUpload[question.labelName][document]);
|
|
985
|
+
this.showAudioVideoFile(this.audioVideoFiles[indx]);
|
|
986
|
+
}
|
|
987
|
+
else {
|
|
988
|
+
const indx = this.selectedMessage.indexOf(this.filestoUpload[question.labelName][document]);
|
|
989
|
+
if (indx !== -1) {
|
|
990
|
+
if (type[1] === 'pdf' || type[1] === 'docx' || type[1] === 'txt' || type[1] === 'doc') {
|
|
991
|
+
if (this.selectedMessage[indx].s3path) {
|
|
992
|
+
window.open(this.selectedMessage[indx].s3path, '_blank');
|
|
993
|
+
}
|
|
994
|
+
else {
|
|
995
|
+
window.open(this.selectedMessage[indx].path, '_blank');
|
|
996
|
+
}
|
|
997
|
+
}
|
|
998
|
+
else {
|
|
999
|
+
imagePath = this.uploadedImages[indx].path;
|
|
1000
|
+
caption = this.comments[question.labelName + '=' + document];
|
|
1001
|
+
}
|
|
1002
|
+
}
|
|
1003
|
+
}
|
|
1004
|
+
}
|
|
1005
|
+
else if (this.uploadedFiles[question.labelName] && this.uploadedFiles[question.labelName][document]) {
|
|
1006
|
+
const indx = this.uploadedImages.indexOf(this.uploadedFiles[question.labelName][document]);
|
|
1007
|
+
let type = this.uploadedFiles[question.labelName][document].type.split('/');
|
|
1008
|
+
let ext = type[1];
|
|
1009
|
+
type = type[0];
|
|
1010
|
+
if (indx !== -1) {
|
|
1011
|
+
if (type === 'video' || type === 'audio') {
|
|
1012
|
+
this.showAudioVideoFile(this.uploadedImages[indx]);
|
|
1013
|
+
}
|
|
1014
|
+
else if (ext === 'pdf' || ext === 'docx' || ext === 'txt' || ext === 'doc' || ext === 'vnd.openxmlformats-officedocument.spreadsheetml.sheet') {
|
|
1015
|
+
window.open(this.uploadedFiles[question.labelName][document].s3path, '_blank');
|
|
1016
|
+
}
|
|
1017
|
+
else {
|
|
1018
|
+
// console.log('typetxt2',this.uploadedImages[indx]);
|
|
1019
|
+
if (this.uploadedImages && this.uploadedImages[indx] && this.uploadedImages[indx]['keyName'] &&
|
|
1020
|
+
this.uploadedImages[indx]['keyName'].includes('docx')) {
|
|
1021
|
+
window.open(this.uploadedFiles[question.labelName][document].s3path, '_blank');
|
|
1022
|
+
}
|
|
1023
|
+
else {
|
|
1024
|
+
imagePath = this.uploadedImages[indx].s3path;
|
|
1025
|
+
caption = this.uploadedImages[indx].comments;
|
|
1026
|
+
}
|
|
1027
|
+
}
|
|
1028
|
+
}
|
|
1029
|
+
}
|
|
1030
|
+
if (imagePath) {
|
|
1031
|
+
const imgobj = new Image(count, {
|
|
1032
|
+
img: imagePath,
|
|
1033
|
+
description: caption
|
|
1034
|
+
});
|
|
1035
|
+
this.image_list_popup.push(imgobj);
|
|
1036
|
+
count++;
|
|
1037
|
+
}
|
|
1038
|
+
if (count > 0) {
|
|
1039
|
+
setTimeout(() => {
|
|
1040
|
+
this.openImageModalRow(this.image_list_popup[0]);
|
|
1041
|
+
}, 200);
|
|
1042
|
+
}
|
|
1043
|
+
}
|
|
1044
|
+
openImageModalRow(image) {
|
|
1045
|
+
const index = this.getCurrentIndexCustomLayout(image, this.image_list_popup);
|
|
1046
|
+
this.openModal(1, index, this.customButtonsFontAwesomeConfig);
|
|
1047
|
+
}
|
|
1048
|
+
getCurrentIndexCustomLayout(image, images) {
|
|
1049
|
+
return image ? images.indexOf(image) : -1;
|
|
1050
|
+
}
|
|
1051
|
+
openModal(id, imageIndex, buttonsConfig) {
|
|
1052
|
+
const dialogRef = this.modalGalleryService.open({
|
|
1053
|
+
id: id,
|
|
1054
|
+
images: this.image_list_popup,
|
|
1055
|
+
currentImage: this.image_list_popup[imageIndex],
|
|
1056
|
+
libConfig: {
|
|
1057
|
+
buttonsConfig: buttonsConfig,
|
|
1058
|
+
currentImageConfig: {
|
|
1059
|
+
downloadable: true
|
|
1060
|
+
}
|
|
1061
|
+
}
|
|
1062
|
+
});
|
|
1063
|
+
}
|
|
1064
|
+
showAudioVideoFile(file) {
|
|
1065
|
+
const fileviewdialogRef = this.dialog.open(ShowuploadfileComponent, {
|
|
1066
|
+
width: '50%',
|
|
1067
|
+
panelClass: ['popup-class', 'commonpopupmainclass', 'uploadfilecomponentclass'],
|
|
1068
|
+
disableClose: true,
|
|
1069
|
+
data: {
|
|
1070
|
+
file: file,
|
|
1071
|
+
source: 'qnr'
|
|
1072
|
+
}
|
|
1073
|
+
});
|
|
1074
|
+
fileviewdialogRef.afterClosed().subscribe(result => {
|
|
1075
|
+
});
|
|
1076
|
+
}
|
|
1077
|
+
editQnr() {
|
|
1078
|
+
this.editQuestionnaire = !this.editQuestionnaire;
|
|
1079
|
+
}
|
|
1080
|
+
getDocuments(question) {
|
|
1081
|
+
if (question.filePropertie.maxNoOfFile > 1 && question.filePropertie.minNoOfFile !== question.filePropertie.maxNoOfFile) {
|
|
1082
|
+
return this.uploadFilesTemp[question.labelName];
|
|
1083
|
+
}
|
|
1084
|
+
else {
|
|
1085
|
+
return question.filePropertie.allowedDocuments;
|
|
1086
|
+
}
|
|
1087
|
+
}
|
|
1088
|
+
showProviderText(question) {
|
|
1089
|
+
if (question.whoCanAnswer && question.whoCanAnswer === 'PROVIDER_ONLY') {
|
|
1090
|
+
return true;
|
|
1091
|
+
}
|
|
1092
|
+
return false;
|
|
1093
|
+
}
|
|
1094
|
+
successGoback() {
|
|
1095
|
+
this.buttonDisable = false;
|
|
1096
|
+
if (!this.type) {
|
|
1097
|
+
this.location.back();
|
|
1098
|
+
}
|
|
1099
|
+
else {
|
|
1100
|
+
this.filestoUpload = [];
|
|
1101
|
+
this.editQnr();
|
|
1102
|
+
this.returnAnswers.emit('reload');
|
|
1103
|
+
if (this.type !== 'qnr-link') {
|
|
1104
|
+
this.toastService.showSuccess('Updated Successfully');
|
|
1105
|
+
}
|
|
1106
|
+
}
|
|
1107
|
+
}
|
|
1108
|
+
showDataGridAddSection(question, value) {
|
|
1109
|
+
this.showDataGrid[question.labelName] = value;
|
|
1110
|
+
this.updatedGridIndex[question.labelName] = null;
|
|
1111
|
+
}
|
|
1112
|
+
showDataGridAddSectionn(question, value) {
|
|
1113
|
+
this.quesStore = question;
|
|
1114
|
+
this.lStorageService.setitemonLocalStorage('quesStore', this.quesStore);
|
|
1115
|
+
this.showDataGrid[question.labelName] = value;
|
|
1116
|
+
this.updatedGridIndex[question.labelName] = null;
|
|
1117
|
+
this.qnrPopup(question, true);
|
|
1118
|
+
}
|
|
1119
|
+
saveDataGridColumn(question) {
|
|
1120
|
+
let columns = [];
|
|
1121
|
+
for (let column of question.dataGridProperties.dataGridColumns) {
|
|
1122
|
+
if (this.dataGridColumns[question.labelName + '=' + column.order] || column.dataType === 'bool') {
|
|
1123
|
+
columns[column.order] = this.dataGridColumns[question.labelName + '=' + column.order];
|
|
1124
|
+
}
|
|
1125
|
+
else {
|
|
1126
|
+
if (column.dataType === 'list' || column.dataType === 'fileUpload') {
|
|
1127
|
+
columns[column.order] = [];
|
|
1128
|
+
}
|
|
1129
|
+
else {
|
|
1130
|
+
columns[column.order] = '';
|
|
1131
|
+
}
|
|
1132
|
+
}
|
|
1133
|
+
}
|
|
1134
|
+
if (!this.dataGridColumnsAnswerList[question.labelName]) {
|
|
1135
|
+
this.dataGridColumnsAnswerList[question.labelName] = [];
|
|
1136
|
+
}
|
|
1137
|
+
if (this.updatedGridIndex[question.labelName] !== null) {
|
|
1138
|
+
this.dataGridColumnsAnswerList[question.labelName][this.updatedGridIndex[question.labelName]] = columns;
|
|
1139
|
+
}
|
|
1140
|
+
else {
|
|
1141
|
+
this.dataGridColumnsAnswerList[question.labelName].push(columns);
|
|
1142
|
+
}
|
|
1143
|
+
this.cancelAddorUpdate(question);
|
|
1144
|
+
this.onSubmit('inputChange');
|
|
1145
|
+
}
|
|
1146
|
+
editDataGrid(question, column) {
|
|
1147
|
+
const index = this.dataGridColumnsAnswerList[question.labelName].indexOf(column);
|
|
1148
|
+
Object.keys(column).forEach(key => {
|
|
1149
|
+
this.dataGridColumns[question.labelName + '=' + key] = column[key];
|
|
1150
|
+
});
|
|
1151
|
+
this.updatedGridIndex[question.labelName] = index;
|
|
1152
|
+
this.showDataGrid[question.labelName] = true;
|
|
1153
|
+
}
|
|
1154
|
+
deleteDataGrid(question, column) {
|
|
1155
|
+
const index = this.dataGridColumnsAnswerList[question.labelName].indexOf(column);
|
|
1156
|
+
this.dataGridColumnsAnswerList[question.labelName].splice(index, 1);
|
|
1157
|
+
this.onSubmit('inputChange');
|
|
1158
|
+
}
|
|
1159
|
+
cancelAddorUpdate(question) {
|
|
1160
|
+
this.showDataGrid[question.labelName] = false;
|
|
1161
|
+
this.updatedGridIndex[question.labelName] = null;
|
|
1162
|
+
for (let column of question.dataGridProperties.dataGridColumns) {
|
|
1163
|
+
this.dataGridColumns[question.labelName + '=' + column.order] = '';
|
|
1164
|
+
}
|
|
1165
|
+
}
|
|
1166
|
+
getColumnType(columns, column) {
|
|
1167
|
+
const columnDetails = columns.filter((clmn) => clmn.order === JSON.parse(column));
|
|
1168
|
+
if (columnDetails[0]) {
|
|
1169
|
+
return columnDetails[0].dataType;
|
|
1170
|
+
}
|
|
1171
|
+
}
|
|
1172
|
+
getSectionCount() {
|
|
1173
|
+
return Object.keys(this.groupedQnr).length;
|
|
1174
|
+
}
|
|
1175
|
+
getBoolValue(value) {
|
|
1176
|
+
value = (value !== '' && typeof value === 'string') ? JSON.parse(value) : value;
|
|
1177
|
+
if (value === true) {
|
|
1178
|
+
return 'Yes';
|
|
1179
|
+
}
|
|
1180
|
+
return 'No';
|
|
1181
|
+
}
|
|
1182
|
+
getMaxdate(data) {
|
|
1183
|
+
let date;
|
|
1184
|
+
if (this.getQuestion(data).dateProperties && this.getQuestion(data).dateProperties.endDate) {
|
|
1185
|
+
const dt = this.reverse(this.getQuestion(data).dateProperties.endDate);
|
|
1186
|
+
date = new Date(dt);
|
|
1187
|
+
}
|
|
1188
|
+
else {
|
|
1189
|
+
date = this.tday;
|
|
1190
|
+
}
|
|
1191
|
+
return date;
|
|
1192
|
+
}
|
|
1193
|
+
getMindate(data) {
|
|
1194
|
+
let date;
|
|
1195
|
+
if (this.getQuestion(data).dateProperties && this.getQuestion(data).dateProperties.startDate) {
|
|
1196
|
+
const dt = this.reverse(this.getQuestion(data).dateProperties.startDate);
|
|
1197
|
+
date = new Date(dt);
|
|
1198
|
+
}
|
|
1199
|
+
else {
|
|
1200
|
+
date = this.minday;
|
|
1201
|
+
}
|
|
1202
|
+
return date;
|
|
1203
|
+
}
|
|
1204
|
+
reverse(s) {
|
|
1205
|
+
return s.split("-").reverse().join("-");
|
|
1206
|
+
}
|
|
1207
|
+
qnrPopup(question, value) {
|
|
1208
|
+
// if (value === 'edit') {
|
|
1209
|
+
// this.quesStore = this.lStorageService.getitemfromLocalStorage('quesStore');
|
|
1210
|
+
// this.showqnr = true;
|
|
1211
|
+
// this.editableItem = question;
|
|
1212
|
+
// console.log(JSON.stringify(this.quesStore))
|
|
1213
|
+
// const removeitemdialogRef = this.dialog.open(QnrDialogComponent, {
|
|
1214
|
+
// width: '50%',
|
|
1215
|
+
// panelClass: ['popup-class', 'commonpopupmainclass', 'confirmationmainclass'],
|
|
1216
|
+
// disableClose: true,
|
|
1217
|
+
// data: {
|
|
1218
|
+
// data: this.quesStore,
|
|
1219
|
+
// qnr_type: 'service_option',
|
|
1220
|
+
// view: 'qnrView',
|
|
1221
|
+
// isEdit: 'edit',
|
|
1222
|
+
// editableItem: this.editableItem,
|
|
1223
|
+
// servDetails: this.service
|
|
1224
|
+
// }
|
|
1225
|
+
// });
|
|
1226
|
+
// removeitemdialogRef.afterClosed().subscribe(result => {
|
|
1227
|
+
// if (result) {
|
|
1228
|
+
// console.log("result.data.answerLine", result.data.answerLine)
|
|
1229
|
+
// this.dataGridList = result.data.answerLine;
|
|
1230
|
+
// this.post_Data = result.data;
|
|
1231
|
+
// this.showItem = true;
|
|
1232
|
+
// this.item = result.data.answerLine[0].answer.dataGridList[0].dataGridListColumn[0].column.list[0];
|
|
1233
|
+
// if (result.data.totalPrice) {
|
|
1234
|
+
// this.totalPrice = result.data.totalPrice
|
|
1235
|
+
// }
|
|
1236
|
+
// let index1 = this.itemArray.findIndex(x => x.id === this.editableItem.id)
|
|
1237
|
+
// if (index1 > -1) {
|
|
1238
|
+
// this.itemArray.splice(index1, 1);
|
|
1239
|
+
// }
|
|
1240
|
+
// let dummyArray = { id: this.id, sequenceId: this.sequenceId, item: this.item, price: this.totalPrice, columnItem: this.dataGridList }
|
|
1241
|
+
// this.itemArray.push(dummyArray)
|
|
1242
|
+
// if (this.itemArray) {
|
|
1243
|
+
// this.lStorageService.setitemonLocalStorage('itemArray', this.itemArray);
|
|
1244
|
+
// }
|
|
1245
|
+
// this.serviceTotalPrice = 0;
|
|
1246
|
+
// this.itemArray.forEach((item: any) => {
|
|
1247
|
+
// this.serviceTotalPrice = this.serviceTotalPrice + item.price;
|
|
1248
|
+
// this.lStorageService.setitemonLocalStorage('serviceTotalPrice', this.serviceTotalPrice);
|
|
1249
|
+
// });
|
|
1250
|
+
// this.id = this.id + 1
|
|
1251
|
+
// let obj = { sequenceId: this.sequenceId, dgList: this.post_Data.answerLine };
|
|
1252
|
+
// this.finalObjectList.push(obj);
|
|
1253
|
+
// this.onSubmit('serviceOption')
|
|
1254
|
+
// }
|
|
1255
|
+
// });
|
|
1256
|
+
// }
|
|
1257
|
+
// else {
|
|
1258
|
+
// this.showqnr = true;
|
|
1259
|
+
// console.log("this.sequenceId", question)
|
|
1260
|
+
// this.sequenceId = question.sequnceId;
|
|
1261
|
+
// const removeitemdialogRef = this.dialog.open(QnrDialogComponent, {
|
|
1262
|
+
// width: '50%',
|
|
1263
|
+
// panelClass: ['popup-class', 'commonpopupmainclass', 'confirmationmainclass'],
|
|
1264
|
+
// disableClose: true,
|
|
1265
|
+
// data: {
|
|
1266
|
+
// data: question,
|
|
1267
|
+
// qnr_type: 'service_option',
|
|
1268
|
+
// view: 'qnrView',
|
|
1269
|
+
// isEdit: 'add',
|
|
1270
|
+
// servDetails: this.service
|
|
1271
|
+
// }
|
|
1272
|
+
// });
|
|
1273
|
+
// removeitemdialogRef.afterClosed().subscribe(result => {
|
|
1274
|
+
// if (result) {
|
|
1275
|
+
// this.dataGridList = result.data.answerLine;
|
|
1276
|
+
// this.post_Data = result.data;
|
|
1277
|
+
// this.showItem = true;
|
|
1278
|
+
// this.item = result.data.answerLine[0].answer.dataGridList[0].dataGridListColumn[0].column.list[0];
|
|
1279
|
+
// if (result.data.totalPrice) {
|
|
1280
|
+
// this.totalPrice = result.data.totalPrice
|
|
1281
|
+
// }
|
|
1282
|
+
// let dummyArray = { id: this.id, sequenceId: this.sequenceId, item: this.item, price: this.totalPrice, columnItem: this.dataGridList }
|
|
1283
|
+
// this.itemArray.push(dummyArray)
|
|
1284
|
+
// if (this.itemArray) {
|
|
1285
|
+
// this.lStorageService.setitemonLocalStorage('itemArray', this.itemArray);
|
|
1286
|
+
// }
|
|
1287
|
+
// this.serviceTotalPrice = 0;
|
|
1288
|
+
// this.itemArray.forEach((item: any) => {
|
|
1289
|
+
// let quantity = item.columnItem[0].answer.dataGridList[0].dataGridListColumn[0].quantity;
|
|
1290
|
+
// this.serviceTotalPrice = (this.serviceTotalPrice + item.price) * quantity;
|
|
1291
|
+
// this.lStorageService.setitemonLocalStorage('serviceTotalPrice', this.serviceTotalPrice);
|
|
1292
|
+
// });
|
|
1293
|
+
// this.id = this.id + 1
|
|
1294
|
+
// let obj = { sequenceId: this.sequenceId, dgList: this.post_Data.answerLine };
|
|
1295
|
+
// this.finalObjectList.push(obj);
|
|
1296
|
+
// this.onSubmit('serviceOption')
|
|
1297
|
+
// }
|
|
1298
|
+
// });
|
|
1299
|
+
// }
|
|
1300
|
+
}
|
|
1301
|
+
increment(item) {
|
|
1302
|
+
// const removeitemdialogRef = this.dialog.open(QnrDialogComponent, {
|
|
1303
|
+
// width: '100%',
|
|
1304
|
+
// panelClass: ['popup-class', 'commonpopupmainclass', 'confirmationmainclass'],
|
|
1305
|
+
// disableClose: true,
|
|
1306
|
+
// data: {
|
|
1307
|
+
// item: item,
|
|
1308
|
+
// data: this.questionnaireList,
|
|
1309
|
+
// view: 'qnrrepeatView',
|
|
1310
|
+
// servDetails: this.service
|
|
1311
|
+
// }
|
|
1312
|
+
// });
|
|
1313
|
+
// removeitemdialogRef.afterClosed().subscribe(result => {
|
|
1314
|
+
// if (result) {
|
|
1315
|
+
// if (result === 'addNew') {
|
|
1316
|
+
// this.quesStore = this.lStorageService.getitemfromLocalStorage('quesStore');
|
|
1317
|
+
// this.qnrPopup(this.quesStore, true)
|
|
1318
|
+
// } else {
|
|
1319
|
+
// if (!this.sequenceId) {
|
|
1320
|
+
// this.sequenceId = item.sequenceId
|
|
1321
|
+
// }
|
|
1322
|
+
// let dummyArray = { id: this.id, sequenceId: this.sequenceId, item: result.repeatItem.item, price: result.repeatItem.price, columnItem: result.repeatItem.columnItem }
|
|
1323
|
+
// let items = dummyArray.columnItem[0].answer.dataGridList[0].dataGridListColumn;
|
|
1324
|
+
// for (let i = 0; i < items.length; i++) {
|
|
1325
|
+
// items[i].quantity = items[i].quantity + 1;
|
|
1326
|
+
// }
|
|
1327
|
+
// if (this.itemArray) {
|
|
1328
|
+
// this.lStorageService.setitemonLocalStorage('itemArray', this.itemArray);
|
|
1329
|
+
// }
|
|
1330
|
+
// console.log("This.ItemArray", this.itemArray)
|
|
1331
|
+
// this.serviceTotalPrice = 0;
|
|
1332
|
+
// this.itemArray.forEach((item: any) => {
|
|
1333
|
+
// let quantity = item.columnItem[0].answer.dataGridList[0].dataGridListColumn[0].quantity;
|
|
1334
|
+
// console.log("quantity", quantity)
|
|
1335
|
+
// this.serviceTotalPrice += item.price * quantity;
|
|
1336
|
+
// });
|
|
1337
|
+
// console.log("serviceTotalPrice", this.serviceTotalPrice)
|
|
1338
|
+
// this.lStorageService.setitemonLocalStorage('serviceTotalPrice', this.serviceTotalPrice);
|
|
1339
|
+
// this.id = this.id + 1
|
|
1340
|
+
// let obj = { sequenceId: this.sequenceId, dgList: result.repeatItem.columnItem };
|
|
1341
|
+
// this.finalObjectList.push(obj);
|
|
1342
|
+
// this.onSubmit('serviceOption')
|
|
1343
|
+
// }
|
|
1344
|
+
// }
|
|
1345
|
+
// });
|
|
1346
|
+
}
|
|
1347
|
+
getItemQuantity(item) {
|
|
1348
|
+
let quantity = item.columnItem[0].answer.dataGridList[0].dataGridListColumn[0].quantity;
|
|
1349
|
+
return quantity;
|
|
1350
|
+
// console.log("item", item)
|
|
1351
|
+
}
|
|
1352
|
+
decrement(removingItem) {
|
|
1353
|
+
let index = this.itemArray.findIndex((x) => x.id === removingItem.id);
|
|
1354
|
+
if (index > -1) {
|
|
1355
|
+
console.log("this.itemArray[index]", this.itemArray[index]);
|
|
1356
|
+
if (this.getItemQuantity(this.itemArray[index]) == 1) {
|
|
1357
|
+
this.itemArray.splice(index, 1); // 2nd parameter means remove one item only
|
|
1358
|
+
}
|
|
1359
|
+
else {
|
|
1360
|
+
let items = this.itemArray[index].columnItem[0].answer.dataGridList[0].dataGridListColumn;
|
|
1361
|
+
for (let i = 0; i < items.length; i++) {
|
|
1362
|
+
items[i].quantity = items[i].quantity - 1;
|
|
1363
|
+
}
|
|
1364
|
+
}
|
|
1365
|
+
if (this.itemArray) {
|
|
1366
|
+
this.lStorageService.setitemonLocalStorage('itemArray', this.itemArray);
|
|
1367
|
+
}
|
|
1368
|
+
this.serviceTotalPrice = 0;
|
|
1369
|
+
this.itemArray.forEach((item) => {
|
|
1370
|
+
this.serviceTotalPrice = this.serviceTotalPrice + item.price;
|
|
1371
|
+
});
|
|
1372
|
+
this.lStorageService.setitemonLocalStorage('serviceTotalPrice', this.serviceTotalPrice);
|
|
1373
|
+
this.finalObjectList.splice(index, 1);
|
|
1374
|
+
}
|
|
1375
|
+
this.onSubmit('serviceOption');
|
|
1376
|
+
}
|
|
1377
|
+
disableInput() {
|
|
1378
|
+
return false;
|
|
1379
|
+
}
|
|
1380
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: QuestionnaireComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.WordProcessor }, { token: i3.LocalStorageService }, { token: i4.DateTimeProcessor }, { token: i5.MatDialog }, { token: i6.FileService }, { token: i7.CommonService }, { token: i8.QuestionaireService }, { token: i9.ErrorMessagingService }, { token: i10.ToastService }, { token: i11.ModalGalleryService }, { token: i12.Location }], target: i0.ɵɵFactoryTarget.Component });
|
|
1381
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: QuestionnaireComponent, selector: "app-questionnaire", inputs: { questionnaireList: "questionnaireList", source: "source", accountId: "accountId", questionAnswers: "questionAnswers", customerDetails: "customerDetails", uuid: "uuid", type: "type", waitlistStatus: "waitlistStatus", orderStatus: "orderStatus", donationDetails: "donationDetails", service: "service", mode: "mode", tempType: "tempType", bookingType: "bookingType" }, outputs: { fileChanged: "fileChanged", returnAnswers: "returnAnswers" }, viewQueries: [{ propertyName: "file2", first: true, predicate: ["logofile1"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<section class=\"cons-inbox no-padding-small\" *ngIf=\"!showservice\">\r\n <div class=\"container consumer-dashhome no-padding no-padding-small\" *ngIf=\"!type && source!='proLead'\">\r\n <div class=\"card title-gb rounded-0\" *ngIf=\"uuid\">\r\n <h5 class=\"mgn-up-10 bold\">{{questionnaire_heading | capitalizeFirst}} <a class=\"pull-left mgn-rt-20 back-btn\"\r\n (click)=\"goBack()\"><i class=\"fa fa-arrow-left\"></i></a></h5>\r\n </div>\r\n </div>\r\n <app-common-innerloading-spinner *ngIf=\"loading\"></app-common-innerloading-spinner>\r\n <div class=\"d-flex flex-column-fluid pull-right mgn-rt-10 mgn-bt-20\"\r\n *ngIf=\"type !== 'qnrLinkProvider' && !buttonDisable && waitlistStatus\">\r\n <button class=\"normal-btn edit\" mat-flat-button (click)=\"editQnr()\">Edit</button>\r\n </div>\r\n <div class=\"d-flex flex-column-fluid width-100\" [class.qnrDisableState]=\"disableInput()\"\r\n [class.no-padding]=\"uuid && (source === 'consCheckin' || source === 'consAppt' || source === 'consOrder' || source === 'paper' || source === 'consDonationDetails' || source === 'ivr')\">\r\n <div class=\"col-xl-12 force_center\" [class.no-padding]=\"uuid\" [class.no-padding-small]=\"source && source=='ivr'\">\r\n <div class=\"\">\r\n <div class=\"qnrsec\" *ngFor=\"let qnr of groupedQnr | keyvalue: asIsOrder\"\r\n [class.section-shadow]=\"getSectionCount() > 1\" [class.no-padding-small]=\"source && source=='ivr'\">\r\n <!-- {{qnr | json}} -->\r\n <!-- <div class=\"qnr-section\" *ngIf=\"getSectionCount() > 1\">{{qnr.key}}</div> -->\r\n <div class=\"form-group card mgn-0\" *ngFor=\"let question of qnr.value\">\r\n <!-- <div class=\"qnr-section\" *ngIf=\"getSectionCount() > 1\">{{getQuestion(question).sectionName}}</div> -->\r\n <label class=\"col-12 quest\">{{getQuestion(question).label}}\r\n <i class=\"fa fa-plus-circle pull-right\" aria-hidden=\"true\"\r\n [class.addicon]=\"!buttonDisable && !disableInput()\"\r\n *ngIf=\"getQuestion(question).fieldDataType === 'dataGrid' && !showDataGrid[getQuestion(question).labelName]\"\r\n (click)=\"!buttonDisable && !disableInput() && showDataGridAddSection(getQuestion(question), true)\"></i>\r\n <div class=\"pro-only\" *ngIf=\"showProviderText(getQuestion(question))\">For Providers</div>\r\n <span class=\"red\" *ngIf=\"getQuestion(question).mandatory\">*</span>\r\n <div class=\"form-level-settings\" *ngIf=\"getQuestion(question).hint\"\r\n [innerHTML]=\"getQuestion(question).hint | safeHtml\">\r\n </div>\r\n </label>\r\n <!-- for file upload -->\r\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'fileUpload'\">\r\n <mat-select multiple #deptsel [disabled]=\"buttonDisable || disableInput()\"\r\n *ngIf=\"getQuestion(question).filePropertie.maxNoOfFile > 1 && getQuestion(question).filePropertie.minNoOfFile !== getQuestion(question).filePropertie.maxNoOfFile\"\r\n [(ngModel)]=\"uploadFilesTemp[getQuestion(question).labelName]\" class=\"select-box\" placeholder=\"Select\">\r\n <mat-option *ngFor=\"let document of getQuestion(question).filePropertie.allowedDocuments\"\r\n [value]=\"document\" (click)=\"changeImageSelected(getQuestion(question), document)\">\r\n {{document}}</mat-option>\r\n </mat-select>\r\n <div class=\"col-lg-12 col-12 col-md-12 col-sm-12 no-padding mgn-up-20\"\r\n *ngIf=\"getDocuments(getQuestion(question)) && getDocuments(getQuestion(question)).length > 0\">\r\n <div class=\"dropzone dropzone-default dropzone-primary dz-clickable\"\r\n [class.single-file]=\"getQuestion(question).filePropertie.allowedDocuments.length==1\"\r\n style=\"cursor: auto;\">\r\n <ng-container *ngFor=\"let doc of getDocuments(getQuestion(question))\">\r\n <div class=\"dz-preview dz-processing dz-image-preview dz-error dz-complete\"\r\n *ngIf=\"getImg(getQuestion(question), doc)\">\r\n <div class=\"docname\" *ngIf=\"getQuestion(question).filePropertie.allowedDocuments.length > 1\">\r\n {{doc}}</div>\r\n <div class=\"dzimage pointer-cursor\" (click)=\"openAttachmentGallery(getQuestion(question), doc)\">\r\n <img alt=\"\" class=\"img_fit\" [src]=\"getImg(getQuestion(question), doc)\">\r\n </div>\r\n <input [disabled]=\"buttonDisable || disableInput()\" (blur)=\"onSubmit('inputChange');\"\r\n [(ngModel)]=\"comments[getQuestion(question).labelName + '=' + doc]\">\r\n <div class=\"gal_action\" *ngIf=\"!buttonDisable && !disableInput() && mode!=='read'\"\r\n (click)=\"changeImageSelected(getQuestion(question), doc)\">\r\n <i class=\"fa fa-times-circle\" aria-hidden=\"true\"></i>\r\n </div>\r\n </div>\r\n <div class=\"dz-preview dz-processing dz-image-preview dz-error dz-complete\"\r\n (click)=\"logofile1.click()\" *ngIf=\"!getImg(getQuestion(question), doc)\">\r\n <div class=\"docname\" *ngIf=\"getQuestion(question).filePropertie.allowedDocuments.length > 1\">\r\n {{doc}}</div>\r\n <div class=\"dz-image pointer-cursor\">\r\n </div>\r\n <input #logofile1 type=\"file\" accept=\"/*;capture=camera\" style=\"display:none;\"\r\n [disabled]=\"buttonDisable || disableInput()\"\r\n (change)=\"filesSelected($event, getQuestion(question), doc)\">\r\n <div class=\"dz-error-mark\">\r\n <a class=\"btn btn-icon btn-light-success btn-circle mr-2\"><i\r\n class=\"text-dark-50 flaticon-upload\"></i></a>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for checkbox -->\r\n <div class=\"col-12\"\r\n *ngIf=\"getQuestion(question).fieldDataType === 'list' && getQuestion(question).listPropertie.maxAnswers > 1\">\r\n <div class=\"checkbox-list\">\r\n <label class=\"checkbox\" *ngFor=\"let value of getQuestion(question).labelValues\">\r\n <input type=\"checkbox\" [checked]=\"isChecked(value, getQuestion(question))\"\r\n (change)=\"listChange($event, value, getQuestion(question))\"\r\n [disabled]=\"buttonDisable || disableInput()\">\r\n <span></span>\r\n {{value}}\r\n </label>\r\n </div>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for radio -->\r\n <div class=\"col-12\"\r\n *ngIf=\"getQuestion(question).fieldDataType === 'list' && getQuestion(question).listPropertie.maxAnswers === 1\">\r\n <div class=\"radio-list\">\r\n <label class=\"radio\" *ngFor=\"let value of getQuestion(question).labelValues\">\r\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\r\n [checked]=\"isChecked(value, getQuestion(question))\"\r\n (change)=\"listChange($event, value, getQuestion(question))\">\r\n <span></span>\r\n {{value}}\r\n </label>\r\n </div>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for toggel boolean -->\r\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'bool'\">\r\n <div class=\"radio-list\">\r\n <label class=\"radio\" *ngFor=\"let value of getQuestion(question).labelValues\">\r\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\r\n [checked]=\"isBooleanChecked(value, getQuestion(question))\"\r\n (change)=\"booleanChange($event, value, getQuestion(question))\">\r\n <span></span>\r\n {{value}}\r\n </label>\r\n </div>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for Text -->\r\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'plainText'\">\r\n <input *ngIf=\"getQuestion(question).plainTextPropertie.maxNoOfLetter<=100\"\r\n [(ngModel)]=\"answers[getQuestion(question).labelName]\" (input)=\"onSubmit('inputChange');\" \r\n [minlength]=\"getQuestion(question).plainTextPropertie.minNoOfLetter\"\r\n [maxlength]=\"getQuestion(question).plainTextPropertie.maxNoOfLetter\"\r\n class=\"form-control1 form-control-solid\" type=\"text\" [disabled]=\"buttonDisable || disableInput()\">\r\n <!-- [disabled]=\"buttonDisable || disableInput()\" -->\r\n <textarea rows=\"3\" *ngIf=\"getQuestion(question).plainTextPropertie.maxNoOfLetter>100\"\r\n [(ngModel)]=\"answers[getQuestion(question).labelName]\" (input)=\"onSubmit('inputChange');\"\r\n [minlength]=\"getQuestion(question).plainTextPropertie.minNoOfLetter\"\r\n [maxlength]=\"getQuestion(question).plainTextPropertie.maxNoOfLetter\" [disabled]=\"buttonDisable || disableInput()\"\r\n class=\"form-control2 form-control-solid\"></textarea>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for Number -->\r\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'number'\">\r\n <input [(ngModel)]=\"answers[getQuestion(question).labelName]\" (input)=\"onSubmit('inputChange');\"\r\n [min]=\"getQuestion(question).numberPropertie.start\" [max]=\"getQuestion(question).numberPropertie.end\"\r\n [disabled]=\"buttonDisable || disableInput()\" class=\"form-control1 form-control-solid\" type=\"number\"\r\n (keypress)=\"isNumeric($event)\">\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for Date -->\r\n <div class=\"col-12 disp-flex\" *ngIf=\"getQuestion(question).fieldDataType === 'date'\">\r\n <input class=\"form-control1\" [matDatepicker]=\"picker\" [max]=\"getMaxdate(question)\"\r\n [min]=\"getMindate(question)\" [(ngModel)]=\"answers[getQuestion(question).labelName]\"\r\n (dateChange)=\"onSubmit('inputChange')\" [disabled]=\"buttonDisable || disableInput()\"\r\n (click)=\"picker.open()\">\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker [disabled]=\"buttonDisable || disableInput()\"></mat-datepicker>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for Datagrid -->\r\n <div class=\"table-responsive1\"\r\n *ngIf=\"getQuestion(question).fieldDataType === 'dataGrid' && dataGridColumnsAnswerList[getQuestion(question).labelName] && dataGridColumnsAnswerList[getQuestion(question).labelName].length > 0\">\r\n <table class=\"table table-head-custom table-head-bg table-borderless table-vertical-center\">\r\n <thead>\r\n <th *ngFor=\"let column of getQuestion(question).dataGridProperties.dataGridColumns\">\r\n {{column.columnId}}</th>\r\n <th *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\r\n </th>\r\n <th *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\r\n </th>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let column of dataGridColumnsAnswerList[getQuestion(question).labelName];let i =index\">\r\n <td *ngFor=\"let data of column | keyvalue\">\r\n <div\r\n *ngIf=\"getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) === 'date'\">\r\n {{data.value | date : newTimeDateFormat}}\r\n </div>\r\n <div\r\n *ngIf=\"getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) === 'bool'\">\r\n {{getBoolValue(data.value)}}\r\n </div>\r\n <div\r\n *ngIf=\"getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) !== 'date' && getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) !== 'bool'\">\r\n {{data.value}}\r\n </div>\r\n </td>\r\n <td *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\r\n <i class=\"fa fa-pen\" (click)=\"editDataGrid(getQuestion(question), column)\"></i>\r\n </td>\r\n <td *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\r\n <i class=\"fa fa-trash\" (click)=\"deleteDataGrid(getQuestion(question), column)\"></i>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"gridSection\" *ngIf=\"showDataGrid[getQuestion(question).labelName]\">\r\n <div class=\"gridColumn\" *ngFor=\"let column of getQuestion(question).dataGridProperties.dataGridColumns\">\r\n <label>{{column.label}}\r\n <span class=\"red\" *ngIf=\"column.mandatory\">*</span>\r\n </label>\r\n <!-- for checkbox -->\r\n <div class=\"col-12\" *ngIf=\"column.dataType === 'list'\">\r\n <div class=\"checkbox-list\">\r\n <label class=\"checkbox\" *ngFor=\"let value of column.listPropertie.values\">\r\n <input type=\"checkbox\" [checked]=\"isChecked(value, getQuestion(question), column)\"\r\n (change)=\"listChange($event, value, getQuestion(question), column)\"\r\n [disabled]=\"buttonDisable || disableInput()\">\r\n <span></span>\r\n {{value}}\r\n </label>\r\n </div>\r\n </div>\r\n <!-- for toggel boolean -->\r\n <div class=\"col-12\" *ngIf=\"column.dataType === 'bool'\">\r\n <div class=\"radio-list\">\r\n <label class=\"radio\">\r\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\r\n [checked]=\"isBooleanChecked('yes', getQuestion(question), column)\"\r\n (change)=\"booleanChange($event, 'yes', getQuestion(question), column)\">\r\n <span></span>\r\n Yes\r\n </label>\r\n <label class=\"radio\">\r\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\r\n [checked]=\"isBooleanChecked('no', getQuestion(question), column)\"\r\n (change)=\"booleanChange($event, 'no', getQuestion(question), column)\">\r\n <span></span>\r\n No\r\n </label>\r\n </div>\r\n </div>\r\n <!-- for Text -->\r\n <div class=\"col-12\" *ngIf=\"column.dataType === 'plainText'\">\r\n <input [(ngModel)]=\"dataGridColumns[getQuestion(question).labelName + '=' + column.order]\"\r\n [disabled]=\"buttonDisable || disableInput()\" class=\"form-control1 form-control-solid\" type=\"text\">\r\n </div>\r\n <!-- for Number -->\r\n <div class=\"col-12\" *ngIf=\"column.dataType === 'number'\">\r\n <input [(ngModel)]=\"dataGridColumns[getQuestion(question).labelName + '=' + column.order]\"\r\n [disabled]=\"buttonDisable || disableInput()\" [min]=\"column.numberPropertie.start\"\r\n [max]=\"column.numberPropertie.end\" class=\"form-control1 form-control-solid\" type=\"number\">\r\n </div>\r\n <!-- for Date -->\r\n <div class=\"col-12 disp-flex\" *ngIf=\"column.dataType === 'date'\">\r\n <input class=\"form-control1\" [matDatepicker]=\"picker\" [max]=\"getMaxdate(question)\"\r\n [min]=\"getMindate(question)\"\r\n [(ngModel)]=\"dataGridColumns[getQuestion(question).labelName + '=' + column.order]\"\r\n [disabled]=\"buttonDisable || disableInput()\" (click)=\"picker.open()\">\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker [disabled]=\"buttonDisable || disableInput()\">\r\n </mat-datepicker>\r\n </div>\r\n </div>\r\n <div class=\"act-btns\">\r\n <button type=\"button\" class=\"btn btn-light-primary font-weight-bold\"\r\n (click)=\"cancelAddorUpdate(getQuestion(question))\">\r\n Cancel\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary font-weight-bold\"\r\n (click)=\"saveDataGridColumn(getQuestion(question))\">Add</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 col-12 col-sm-12 col-lg-12 no-padding submit-pad\"\r\n *ngIf=\"type !== 'qnrLinkProvider' && source!=='proLead' && (uuid || source === 'customer-details' || source === 'proDonation') && !disableInput()\">\r\n <button class=\"normal-btn\" mat-flat-button [class.spinner]=\"buttonDisable\"\r\n [class.spinner-darker-success]=\"buttonDisable\" [class.spinner-center]=\"buttonDisable\"\r\n (click)=\"!buttonDisable && onSubmit('submit')\" [disabled]=\"buttonDisable\"\r\n [class.disabled]=\"buttonDisable\">{{(type == 'qnr-link') ? 'Submit' : 'Update'}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n<ks-modal-gallery [id]=\"0\" *ngIf=\"image_list_popup && image_list_popup.length>0\" [modalImages]=\"image_list_popup\"\r\n [plainGalleryConfig]=\"customPlainGalleryRowConfig\" [buttonsConfig]=\"customButtonsFontAwesomeConfig\"\r\n (buttonBeforeHook)=\"onButtonBeforeHook($event)\"></ks-modal-gallery>\r\n<section class=\"cons-inbox no-padding-small\" *ngIf=\"showservice\">\r\n <div class=\"container consumer-dashhome no-padding no-padding-small\" *ngIf=\"!type\">\r\n <div class=\"card title-gb rounded-0\" *ngIf=\"uuid\">\r\n <h5 class=\"mgn-up-10 bold\">{{questionnaire_heading | capitalizeFirst}} <a class=\"pull-left mgn-rt-20 back-btn\"\r\n (click)=\"goBack()\"><i class=\"fa fa-arrow-left\"></i></a></h5>\r\n </div>\r\n </div>\r\n <app-common-innerloading-spinner *ngIf=\"loading\"></app-common-innerloading-spinner>\r\n <div class=\"d-flex flex-column-fluid pull-right mgn-rt-10 mgn-bt-20\"\r\n *ngIf=\"type !== 'qnrLinkProvider' && !buttonDisable && waitlistStatus\">\r\n <button class=\"normal-btn edit\" mat-flat-button (click)=\"editQnr()\">Edit</button>\r\n </div>\r\n <div class=\"d-flex flex-column-fluid width-100\" [class.qnrDisableState]=\"disableInput()\"\r\n [class.no-padding]=\"uuid && (source === 'consCheckin' || source === 'consAppt' || source === 'consDonationDetails' )\">\r\n <div class=\"col-xl-12 force_center no-padding\" [class.no-padding]=\"uuid\"\r\n [class.no-padding-small]=\"source && source=='ivr'\">\r\n <div class=\"\">\r\n <div class=\"\" *ngFor=\"let qnr of groupedQnr | keyvalue\" [class.section-shadow]=\"getSectionCount() > 1\">\r\n <!-- <div class=\"qnr-section\" *ngIf=\"getSectionCount() > 1\">{{qnr.key}}</div> -->\r\n <div *ngIf=\"itemArray.length == 0 \">\r\n <div class=\"form-group mgn-0 border-dashed text-center\" *ngFor=\"let question of qnr.value\">\r\n <div class=\"qnr-section\" *ngIf=\"getSectionCount() > 1\">\r\n {{getQuestion(question).question.sectionName}}</div>\r\n <label class=\"col-12 quest pointer-cursor\"\r\n (click)=\"showDataGridAddSectionn(getQuestion(question).question, true)\">\r\n <!-- {{getQuestion(question).question.label}} -->\r\n <!-- <div class=\"pull-right btn btn-primary font-weight-bold\"\r\n (click)=\"showDataGridAddSectionn(getQuestion(question).question, true)\"><i\r\n class=\"fa fa-plus add-plus\"></i>Add Item\r\n </div> -->\r\n <div>\r\n <img src=\"./assets/images/service-options.svg\" alt=\"Service Options\" class=\"img-fluid pb-0\"\r\n width=\"300\" height=\"300\">\r\n </div>\r\n <div class=\"pro-only\" *ngIf=\"showProviderText(getQuestion(question).question)\">For Providers</div>\r\n <span class=\"red\" *ngIf=\"getQuestion(question).question.mandatory\">*</span>\r\n <!-- <div class=\"form-level-settings\" *ngIf=\"getQuestion(question).question.hint\">\r\n {{getQuestion(question).question.hint}}\r\n </div> -->\r\n <div>\r\n <span class=\"text-primary font-weight-bold\">Please Choose your Pet</span>\r\n </div>\r\n <div class=\"mt-3\">\r\n <span class=\"btn btn-light font-weight-bold\">Continue</span>\r\n </div>\r\n </label>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n </div>\r\n <!-- {{itemArray | json}} -->\r\n <div class=\"col-md-12 col-12 col-sm-12 mgn-bt-12 no-padding\" *ngIf=\"showItem\">\r\n\r\n\r\n <div>\r\n <div class=\"card-border\" *ngFor=\" let items of itemArray\">\r\n\r\n <div class=\"d-flex justify-content-between\">\r\n <div>\r\n <div class=\"text-capitalize\">\r\n <div class=\"\">\r\n <span class=\"text-primary\">\r\n {{items.item}}<br>\r\n </span>\r\n <!-- <span class=\"disp-none-small\"> - </span>\r\n <span class=\"disp-none-large\"><br></span> -->\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"d-flex border-apply px-0\">\r\n <div (click)=\"decrement(items);\" class=\"pointer-cursor quantity quantity-1\">\r\n <span class=\"p-10\">-</span>\r\n </div>\r\n <div class=\"mx-2 pointer-cursor\"><span class=\"quantity\"\r\n *ngIf=\"items && items.columnItem && items.columnItem[0] && items.columnItem[0].answer && items.columnItem[0].answer.dataGridList && items.columnItem[0].answer.dataGridList[0] && items.columnItem[0].answer.dataGridList[0].dataGridListColumn && items.columnItem[0].answer.dataGridList[0].dataGridListColumn[0] && items.columnItem[0].answer.dataGridList[0].dataGridListColumn[0].quantity\">\r\n {{items.columnItem[0].answer.dataGridList[0].dataGridListColumn[0].quantity}}</span>\r\n </div>\r\n <div (click)=\"increment(items);\" class=\"pointer-cursor quantity quantity-1\">\r\n <span class=\"p-10\">+</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div>\r\n <span class=\"text-primary\"><span><i class=\"fa fa-inr\"></i>\r\n {{items.price * getItemQuantity(items)}}/-\r\n </span>\r\n </span>\r\n </div>\r\n <!-- <div (click)=\"qnrPopup(items, 'edit');\">\r\n <span class=\"text-link font-weight-bold\"><span>\r\n Edit*\r\n </span>\r\n </span>\r\n </div> -->\r\n </div>\r\n\r\n <div class=\"clearfix\"></div>\r\n <div *ngIf=\"showItem &&itemArray.length > 0\">\r\n <div *ngFor=\"let qnr of groupedQnr | keyvalue\" [class.section-shadow]=\"getSectionCount() > 1\">\r\n <div *ngFor=\"let question of qnr.value\">\r\n <label class=\"col-12 quest pointer-cursor\"\r\n (click)=\"showDataGridAddSectionn(getQuestion(question).question, true)\">\r\n <span class=\"btn btn-light font-weight-bold\"><i class=\"fa fa-plus text-white\"></i>Add</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n</section>\r\n\r\n<!-- <ks-modal-gallery [id]=\"0\" *ngIf=\"image_list_popup && image_list_popup.length>0\" [modalImages]=\"image_list_popup\"\r\n [plainGalleryConfig]=\"customPlainGalleryRowConfig\" [buttonsConfig]=\"customButtonsFontAwesomeConfig\"\r\n (buttonBeforeHook)=\"onButtonBeforeHook($event)\"></ks-modal-gallery> -->", styles: [".dropzone{min-height:auto!important}.question-box{margin-top:10px}.btn-light{background-color:#1e4079!important;padding:5px 25px!important;color:#fff!important}.quest-outer{padding:10px}.error-msg{color:red}.upload-btn{background:#fff;border:1px solid;font-size:small}.card-border{box-shadow:0 0 5px 5px #f0f0f0!important;padding:10px 30px!important;margin:20px 10px!important;cursor:pointer!important;border-radius:10px!important}.border-apply{border:2px solid #1e4079!important;border-radius:20px!important}.quantity{font-size:20px!important;font-weight:700!important}.quantity-1:hover{background-color:#1e4079!important;color:#fff!important;font-weight:700!important;border-radius:50%!important;padding:-2px 12px!important}::ng-deep .mat-checkbox-layout{font-weight:400!important}.force_center{margin-left:auto;margin-right:auto}.input-group-text{display:-webkit-box;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.65rem 1rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#3f4254;text-align:center;white-space:nowrap;background-color:#f3f6f9!important;border:1px solid #E4E6EF!important;border-radius:.42rem;border-top-left-radius:0;border-bottom-left-radius:0;cursor:pointer}.w_100{width:100%}.img_fit{width:120px;height:120px}.dropzone .dropzone-default{border:1px dashed #EBEDF3!important}.select-box{padding:10px!important;border:1px solid #E4E6EF!important;border-radius:.42rem!important}.normal-btn{padding:5px 20px;border:none!important}.edit{padding:3px 25px;border-radius:20px!important}.mgn-0{margin-left:0!important;margin-right:0!important;margin-bottom:10px!important}.quest{font-size:1.1rem!important}.mt-3 a:hover{text-decoration:underline!important}.dzimage,.dz-image{border:1px dashed #ccc}.gal_action{position:absolute;top:20px;right:-10px;background:#00000080;width:20px;height:20px;text-align:center;border-radius:50%;cursor:pointer}.single-file{padding:0!important;text-align:initial!important;border:none!important}.single-file .dz-preview{position:relative!important;display:inline-block!important;vertical-align:top!important;margin:16px!important;min-height:100px!important}.single-file .gal_action{top:-5px!important}.pro-only{float:right;color:red;font-size:.8rem}.qnrDisableState .card,.qnrDisableState .dropzone-default,.qnrDisableState .dz-image-preview{background:#eeeeee9e!important}.qnr-section{font-weight:700;padding-bottom:10px;text-transform:uppercase}.section-shadow{margin:20px 10px;padding:20px!important;box-shadow:0 0 10px #0000001f!important}.gridSection .gridColumn{padding:15px}.gridSection .gridColumn label{padding:0 12.5px!important;font-weight:400!important;color:#3f4254!important;font-size:.9rem!important}.gridSection .act-btns .btn{padding:5px 10px!important;margin:5px!important}.gridSection .act-btns{padding:0 20px}.fa-plus-circle{font-size:1.5rem!important}.addicon{color:#1e4079!important;cursor:pointer}.fa-trash,.fa-pen{color:#000!important;font-size:1rem!important}.dz-preview input{width:121px!important;border:1px solid #ccc}.submit-pad{padding:0 10px 20px!important}.form-group.card{border:1px solid #dadce063!important;border-radius:8px!important;padding:5px!important}.docname{width:120px;margin-bottom:5px;text-overflow:ellipsis!important;overflow:hidden!important;white-space:nowrap!important}@media (max-width: 750px){.normal-btn{padding:3px 10px;border:none!important}.edit{padding:2px 12px;border-radius:10px!important}}.col-xl-12,.col-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;width:100%;padding-right:12.5px;padding-left:12.5px}@media (min-width: 1200px){.col-xl-12{flex:0 0 100%;max-width:100%}}.qnrsec{padding:10px}.p-10{padding:8px!important}.form-control1{display:block!important;width:100%!important;height:calc(1.5em + 1.3rem + 2px)!important;padding:.65rem 1rem!important;font-size:1rem!important;font-weight:400!important;line-height:1.5!important;color:#3f4254!important;background-color:#fff!important;background-clip:padding-box!important;border:1px solid #E4E6EF!important;border-radius:.42rem!important;box-shadow:none!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out!important}.form-control2{display:block!important;width:100%!important;padding:.65rem 1rem!important;font-size:1rem!important;font-weight:400!important;line-height:1.5!important;color:#3f4254!important;background-color:#fff!important;background-clip:padding-box!important;border:1px solid #E4E6EF!important;border-radius:.42rem!important;box-shadow:none!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out!important}.form-group label{font-size:1rem;font-weight:400;color:#3f4254}label{display:inline-block;margin-bottom:.5rem}.col-12{flex:0 0 100%;max-width:100%}.radio-list .radio span{margin-right:.75rem}.radio>span{background-color:#ebedf3;border:1px solid transparent}.radio>span{height:18px;width:18px}.radio>span{border-radius:50%;background-color:none;display:flex;align-items:center;justify-content:center;flex-shrink:0}.radio-list .radio{margin-bottom:1rem}.radio{display:flex;align-items:center;position:relative;text-align:left;cursor:pointer;font-size:1rem;transition:all .3s ease;margin:0}.radio>input{position:absolute;z-index:-1;opacity:0}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid #EBEDF3;border-radius:.42rem}.radio-list .radio:last-child{margin-bottom:0}@media (min-width: 992px){.col-lg-12{flex:0 0 100%;max-width:100%}}.dropzone.dropzone-default .dz-preview .dz-image{border-radius:.42rem}.btn.btn-icon i{padding:0;margin:0}.btn i{font-size:1.3rem;padding-right:.35rem;vertical-align:middle;line-height:1;display:inline-flex}.btn i{transition:color .15s ease,background-color .15s ease,border-color .15s ease,box-shadow .15s ease}.text-dark-50{color:#7e8299!important}.btn.btn-icon.btn-circle{border-radius:50%}.btn.btn-light-success{color:#1bc5bd;background-color:#c9f7f5;border-color:transparent}.btn.btn-icon{display:inline-flex;align-items:center;justify-content:center;padding:0;height:calc(1.5em + 1.3rem + 2px);width:calc(1.5em + 1.3rem + 2px)}.btn{display:inline-block;font-weight:400;color:#3f4254;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.65rem 1rem;font-size:1rem;line-height:1.5;border-radius:.42rem;transition:color .3s ease-in-out,background-color .3s ease-in-out,border-color .3s ease-in-out,box-shadow .3s ease-in-out}.radio>input:checked~span{background-color:#1e4079}.radio>input:checked~span:after{background-color:#fff;border-color:#fff}.radio>input:checked~span:after{display:block}.radio>span:after{width:6px;height:6px}.radio>span:after{content:\"\";border-radius:100%!important}i{font-size:1.25rem;color:#b5b5c3}.dropzone{min-height:auto}.btn.btn-light-primary{background-color:#f9e2a7;border-color:transparent}.checkbox-lis .checkbox span{margin-right:.75rem}.checkbox>span{background-color:#ebedf3;border:1px solid transparent}.checkbox>span{height:18px;width:18px}.checkbox>span{background-color:none;display:flex;align-items:center;justify-content:center;flex-shrink:0;border-radius:.42rem}.checkbox>span:after{width:5px;height:10px}.checkbox>span:after{content:\"\";border-color:transparent;border-style:solid;border-width:0 2px 2px 0!important;transform:rotate(45deg);margin-top:-2px}.checkbox-list{display:flex;flex-direction:column}.checkbox>input{position:absolute;z-index:-1;opacity:0}.checkbox>input:checked~span{background-color:#1e4079}.checkbox>input:checked~span:after{border-color:#fff}.checkbox{display:flex;align-items:center;position:relative;text-align:left;cursor:pointer;font-size:1rem;transition:all .3s ease;margin:0}.add-plus{color:#fff!important}.border-dashed{padding:10px!important}.add-plus-black{color:#000!important}.plus-black .fa .fa-plus{color:#000!important;font-size:12px!important}.checkbox-list .checkbox{margin-bottom:1rem}.checkbox-list .checkbox span{margin-right:.75rem}.checkbox-list .checkbox:last-child{margin-bottom:0}.btn.btn-primary{color:#fff;background-color:#1e4079;border-color:#1e4079}.font-weight-bold{font-weight:500!important}button{font-family:inherit}.form-control1:focus{color:#3f4254!important;background-color:#fff!important;border-color:#69b3ff!important;outline:0!important}.table.table-head-bg thead th:first-child{border-radius:.42rem}.table.table-head-bg thead tr,.table.table-head-bg thead th{background-color:#f3f6f9;border-bottom:0;letter-spacing:1px}.table.table-head-custom thead tr,.table.table-head-custom thead th{font-weight:600;color:#b5b5c3!important;font-size:.9rem;text-transform:uppercase}.table thead th{font-weight:600;font-size:1rem;border-bottom-width:1px;padding-top:1rem;padding-bottom:1rem}.table th,.table td{padding:.75rem}.table.table-head-bg thead tr:last-child,.table.table-head-bg thead th:last-child{border-top-right-radius:.42rem;border-bottom-right-radius:.42rem}.table-responsive1{display:block;width:100%;overflow-x:auto}.text-white{color:#fff!important;font-size:15px!important}.details{border:2px solid #1e4079!important;border-radius:10px!important;max-width:13%}.text-primary{color:#1e4079!important}.text-link{color:#1a6888}@media (min-width: 300px) and (max-width: 750px){.item{font-size:10px!important}.item_price{font-size:9px!important}.details{border:2px solid #1e4079!important;border-radius:10px!important;max-width:23%}}@media (max-width: 450px){.item{font-size:10px!important}.item_price{font-size:9px!important}}@media (min-width: 600px) and (max-width: 992px){.items{font-size:18px!important}.item_prices{font-size:16px!important}}@media (max-width: 450px){.incre{border:2px solid blue!important;border-radius:100px!important;max-width:20.66667%!important}}.font-weight-bold{font-weight:700!important}@media (max-width: 750px){.incre{max-width:20.66667%!important}}.incre{border:2px solid blue!important;border-radius:100px!important;max-width:10.66667%}@media (max-width: 893px){.disp-none-small{display:none!important}}@media (min-width: 800px){.disp-none-large{display:none!important}}.fa-inr{font-size:15px!important;color:#1e4079!important}.text-primary{font-weight:700!important}.flaticon-upload:before{content:\"\\f11d\"}[class*=\" flaticon-\"]:before{font-family:Flaticon;font-style:normal;font-weight:400;font-feature-settings:normal;font-variant:normal;line-height:1;text-decoration:inherit;text-rendering:optimizeLegibility;text-transform:none;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-smoothing:antialiased}.dropzone{position:relative!important;display:inline-block!important;vertical-align:top!important;min-height:100px!important}.dz-image{border-radius:20px;overflow:hidden;width:120px;height:120px;position:relative;display:block;z-index:10}.dz-image{border:1px dashed #ccc}.dropzone .dz-preview .dz-success-mark,.dropzone .dz-preview .dz-error-mark{pointer-events:none;z-index:500;position:absolute;display:block;top:50%;left:50%;margin-left:-27px;margin-top:-27px}\n"], dependencies: [{ kind: "directive", type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i13.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: i13.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i13.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i13.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i13.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i13.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i13.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i13.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i14.LoadingSpinnerComponent, selector: "app-common-innerloading-spinner", inputs: ["spinnerParams"] }, { kind: "component", type: i15.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i15.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i15.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i16.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i17.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i18.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "pipe", type: i12.DatePipe, name: "date" }, { kind: "pipe", type: i12.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i19.CapitalizeFirstPipe, name: "capitalizeFirst" }, { kind: "pipe", type: i20.SafeHtmlPipe, name: "safeHtml" }] });
|
|
1382
|
+
}
|
|
1383
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: QuestionnaireComponent, decorators: [{
|
|
1384
|
+
type: Component,
|
|
1385
|
+
args: [{ selector: 'app-questionnaire', template: "<section class=\"cons-inbox no-padding-small\" *ngIf=\"!showservice\">\r\n <div class=\"container consumer-dashhome no-padding no-padding-small\" *ngIf=\"!type && source!='proLead'\">\r\n <div class=\"card title-gb rounded-0\" *ngIf=\"uuid\">\r\n <h5 class=\"mgn-up-10 bold\">{{questionnaire_heading | capitalizeFirst}} <a class=\"pull-left mgn-rt-20 back-btn\"\r\n (click)=\"goBack()\"><i class=\"fa fa-arrow-left\"></i></a></h5>\r\n </div>\r\n </div>\r\n <app-common-innerloading-spinner *ngIf=\"loading\"></app-common-innerloading-spinner>\r\n <div class=\"d-flex flex-column-fluid pull-right mgn-rt-10 mgn-bt-20\"\r\n *ngIf=\"type !== 'qnrLinkProvider' && !buttonDisable && waitlistStatus\">\r\n <button class=\"normal-btn edit\" mat-flat-button (click)=\"editQnr()\">Edit</button>\r\n </div>\r\n <div class=\"d-flex flex-column-fluid width-100\" [class.qnrDisableState]=\"disableInput()\"\r\n [class.no-padding]=\"uuid && (source === 'consCheckin' || source === 'consAppt' || source === 'consOrder' || source === 'paper' || source === 'consDonationDetails' || source === 'ivr')\">\r\n <div class=\"col-xl-12 force_center\" [class.no-padding]=\"uuid\" [class.no-padding-small]=\"source && source=='ivr'\">\r\n <div class=\"\">\r\n <div class=\"qnrsec\" *ngFor=\"let qnr of groupedQnr | keyvalue: asIsOrder\"\r\n [class.section-shadow]=\"getSectionCount() > 1\" [class.no-padding-small]=\"source && source=='ivr'\">\r\n <!-- {{qnr | json}} -->\r\n <!-- <div class=\"qnr-section\" *ngIf=\"getSectionCount() > 1\">{{qnr.key}}</div> -->\r\n <div class=\"form-group card mgn-0\" *ngFor=\"let question of qnr.value\">\r\n <!-- <div class=\"qnr-section\" *ngIf=\"getSectionCount() > 1\">{{getQuestion(question).sectionName}}</div> -->\r\n <label class=\"col-12 quest\">{{getQuestion(question).label}}\r\n <i class=\"fa fa-plus-circle pull-right\" aria-hidden=\"true\"\r\n [class.addicon]=\"!buttonDisable && !disableInput()\"\r\n *ngIf=\"getQuestion(question).fieldDataType === 'dataGrid' && !showDataGrid[getQuestion(question).labelName]\"\r\n (click)=\"!buttonDisable && !disableInput() && showDataGridAddSection(getQuestion(question), true)\"></i>\r\n <div class=\"pro-only\" *ngIf=\"showProviderText(getQuestion(question))\">For Providers</div>\r\n <span class=\"red\" *ngIf=\"getQuestion(question).mandatory\">*</span>\r\n <div class=\"form-level-settings\" *ngIf=\"getQuestion(question).hint\"\r\n [innerHTML]=\"getQuestion(question).hint | safeHtml\">\r\n </div>\r\n </label>\r\n <!-- for file upload -->\r\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'fileUpload'\">\r\n <mat-select multiple #deptsel [disabled]=\"buttonDisable || disableInput()\"\r\n *ngIf=\"getQuestion(question).filePropertie.maxNoOfFile > 1 && getQuestion(question).filePropertie.minNoOfFile !== getQuestion(question).filePropertie.maxNoOfFile\"\r\n [(ngModel)]=\"uploadFilesTemp[getQuestion(question).labelName]\" class=\"select-box\" placeholder=\"Select\">\r\n <mat-option *ngFor=\"let document of getQuestion(question).filePropertie.allowedDocuments\"\r\n [value]=\"document\" (click)=\"changeImageSelected(getQuestion(question), document)\">\r\n {{document}}</mat-option>\r\n </mat-select>\r\n <div class=\"col-lg-12 col-12 col-md-12 col-sm-12 no-padding mgn-up-20\"\r\n *ngIf=\"getDocuments(getQuestion(question)) && getDocuments(getQuestion(question)).length > 0\">\r\n <div class=\"dropzone dropzone-default dropzone-primary dz-clickable\"\r\n [class.single-file]=\"getQuestion(question).filePropertie.allowedDocuments.length==1\"\r\n style=\"cursor: auto;\">\r\n <ng-container *ngFor=\"let doc of getDocuments(getQuestion(question))\">\r\n <div class=\"dz-preview dz-processing dz-image-preview dz-error dz-complete\"\r\n *ngIf=\"getImg(getQuestion(question), doc)\">\r\n <div class=\"docname\" *ngIf=\"getQuestion(question).filePropertie.allowedDocuments.length > 1\">\r\n {{doc}}</div>\r\n <div class=\"dzimage pointer-cursor\" (click)=\"openAttachmentGallery(getQuestion(question), doc)\">\r\n <img alt=\"\" class=\"img_fit\" [src]=\"getImg(getQuestion(question), doc)\">\r\n </div>\r\n <input [disabled]=\"buttonDisable || disableInput()\" (blur)=\"onSubmit('inputChange');\"\r\n [(ngModel)]=\"comments[getQuestion(question).labelName + '=' + doc]\">\r\n <div class=\"gal_action\" *ngIf=\"!buttonDisable && !disableInput() && mode!=='read'\"\r\n (click)=\"changeImageSelected(getQuestion(question), doc)\">\r\n <i class=\"fa fa-times-circle\" aria-hidden=\"true\"></i>\r\n </div>\r\n </div>\r\n <div class=\"dz-preview dz-processing dz-image-preview dz-error dz-complete\"\r\n (click)=\"logofile1.click()\" *ngIf=\"!getImg(getQuestion(question), doc)\">\r\n <div class=\"docname\" *ngIf=\"getQuestion(question).filePropertie.allowedDocuments.length > 1\">\r\n {{doc}}</div>\r\n <div class=\"dz-image pointer-cursor\">\r\n </div>\r\n <input #logofile1 type=\"file\" accept=\"/*;capture=camera\" style=\"display:none;\"\r\n [disabled]=\"buttonDisable || disableInput()\"\r\n (change)=\"filesSelected($event, getQuestion(question), doc)\">\r\n <div class=\"dz-error-mark\">\r\n <a class=\"btn btn-icon btn-light-success btn-circle mr-2\"><i\r\n class=\"text-dark-50 flaticon-upload\"></i></a>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for checkbox -->\r\n <div class=\"col-12\"\r\n *ngIf=\"getQuestion(question).fieldDataType === 'list' && getQuestion(question).listPropertie.maxAnswers > 1\">\r\n <div class=\"checkbox-list\">\r\n <label class=\"checkbox\" *ngFor=\"let value of getQuestion(question).labelValues\">\r\n <input type=\"checkbox\" [checked]=\"isChecked(value, getQuestion(question))\"\r\n (change)=\"listChange($event, value, getQuestion(question))\"\r\n [disabled]=\"buttonDisable || disableInput()\">\r\n <span></span>\r\n {{value}}\r\n </label>\r\n </div>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for radio -->\r\n <div class=\"col-12\"\r\n *ngIf=\"getQuestion(question).fieldDataType === 'list' && getQuestion(question).listPropertie.maxAnswers === 1\">\r\n <div class=\"radio-list\">\r\n <label class=\"radio\" *ngFor=\"let value of getQuestion(question).labelValues\">\r\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\r\n [checked]=\"isChecked(value, getQuestion(question))\"\r\n (change)=\"listChange($event, value, getQuestion(question))\">\r\n <span></span>\r\n {{value}}\r\n </label>\r\n </div>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for toggel boolean -->\r\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'bool'\">\r\n <div class=\"radio-list\">\r\n <label class=\"radio\" *ngFor=\"let value of getQuestion(question).labelValues\">\r\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\r\n [checked]=\"isBooleanChecked(value, getQuestion(question))\"\r\n (change)=\"booleanChange($event, value, getQuestion(question))\">\r\n <span></span>\r\n {{value}}\r\n </label>\r\n </div>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for Text -->\r\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'plainText'\">\r\n <input *ngIf=\"getQuestion(question).plainTextPropertie.maxNoOfLetter<=100\"\r\n [(ngModel)]=\"answers[getQuestion(question).labelName]\" (input)=\"onSubmit('inputChange');\" \r\n [minlength]=\"getQuestion(question).plainTextPropertie.minNoOfLetter\"\r\n [maxlength]=\"getQuestion(question).plainTextPropertie.maxNoOfLetter\"\r\n class=\"form-control1 form-control-solid\" type=\"text\" [disabled]=\"buttonDisable || disableInput()\">\r\n <!-- [disabled]=\"buttonDisable || disableInput()\" -->\r\n <textarea rows=\"3\" *ngIf=\"getQuestion(question).plainTextPropertie.maxNoOfLetter>100\"\r\n [(ngModel)]=\"answers[getQuestion(question).labelName]\" (input)=\"onSubmit('inputChange');\"\r\n [minlength]=\"getQuestion(question).plainTextPropertie.minNoOfLetter\"\r\n [maxlength]=\"getQuestion(question).plainTextPropertie.maxNoOfLetter\" [disabled]=\"buttonDisable || disableInput()\"\r\n class=\"form-control2 form-control-solid\"></textarea>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for Number -->\r\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'number'\">\r\n <input [(ngModel)]=\"answers[getQuestion(question).labelName]\" (input)=\"onSubmit('inputChange');\"\r\n [min]=\"getQuestion(question).numberPropertie.start\" [max]=\"getQuestion(question).numberPropertie.end\"\r\n [disabled]=\"buttonDisable || disableInput()\" class=\"form-control1 form-control-solid\" type=\"number\"\r\n (keypress)=\"isNumeric($event)\">\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for Date -->\r\n <div class=\"col-12 disp-flex\" *ngIf=\"getQuestion(question).fieldDataType === 'date'\">\r\n <input class=\"form-control1\" [matDatepicker]=\"picker\" [max]=\"getMaxdate(question)\"\r\n [min]=\"getMindate(question)\" [(ngModel)]=\"answers[getQuestion(question).labelName]\"\r\n (dateChange)=\"onSubmit('inputChange')\" [disabled]=\"buttonDisable || disableInput()\"\r\n (click)=\"picker.open()\">\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker [disabled]=\"buttonDisable || disableInput()\"></mat-datepicker>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for Datagrid -->\r\n <div class=\"table-responsive1\"\r\n *ngIf=\"getQuestion(question).fieldDataType === 'dataGrid' && dataGridColumnsAnswerList[getQuestion(question).labelName] && dataGridColumnsAnswerList[getQuestion(question).labelName].length > 0\">\r\n <table class=\"table table-head-custom table-head-bg table-borderless table-vertical-center\">\r\n <thead>\r\n <th *ngFor=\"let column of getQuestion(question).dataGridProperties.dataGridColumns\">\r\n {{column.columnId}}</th>\r\n <th *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\r\n </th>\r\n <th *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\r\n </th>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let column of dataGridColumnsAnswerList[getQuestion(question).labelName];let i =index\">\r\n <td *ngFor=\"let data of column | keyvalue\">\r\n <div\r\n *ngIf=\"getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) === 'date'\">\r\n {{data.value | date : newTimeDateFormat}}\r\n </div>\r\n <div\r\n *ngIf=\"getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) === 'bool'\">\r\n {{getBoolValue(data.value)}}\r\n </div>\r\n <div\r\n *ngIf=\"getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) !== 'date' && getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) !== 'bool'\">\r\n {{data.value}}\r\n </div>\r\n </td>\r\n <td *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\r\n <i class=\"fa fa-pen\" (click)=\"editDataGrid(getQuestion(question), column)\"></i>\r\n </td>\r\n <td *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\r\n <i class=\"fa fa-trash\" (click)=\"deleteDataGrid(getQuestion(question), column)\"></i>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"gridSection\" *ngIf=\"showDataGrid[getQuestion(question).labelName]\">\r\n <div class=\"gridColumn\" *ngFor=\"let column of getQuestion(question).dataGridProperties.dataGridColumns\">\r\n <label>{{column.label}}\r\n <span class=\"red\" *ngIf=\"column.mandatory\">*</span>\r\n </label>\r\n <!-- for checkbox -->\r\n <div class=\"col-12\" *ngIf=\"column.dataType === 'list'\">\r\n <div class=\"checkbox-list\">\r\n <label class=\"checkbox\" *ngFor=\"let value of column.listPropertie.values\">\r\n <input type=\"checkbox\" [checked]=\"isChecked(value, getQuestion(question), column)\"\r\n (change)=\"listChange($event, value, getQuestion(question), column)\"\r\n [disabled]=\"buttonDisable || disableInput()\">\r\n <span></span>\r\n {{value}}\r\n </label>\r\n </div>\r\n </div>\r\n <!-- for toggel boolean -->\r\n <div class=\"col-12\" *ngIf=\"column.dataType === 'bool'\">\r\n <div class=\"radio-list\">\r\n <label class=\"radio\">\r\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\r\n [checked]=\"isBooleanChecked('yes', getQuestion(question), column)\"\r\n (change)=\"booleanChange($event, 'yes', getQuestion(question), column)\">\r\n <span></span>\r\n Yes\r\n </label>\r\n <label class=\"radio\">\r\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\r\n [checked]=\"isBooleanChecked('no', getQuestion(question), column)\"\r\n (change)=\"booleanChange($event, 'no', getQuestion(question), column)\">\r\n <span></span>\r\n No\r\n </label>\r\n </div>\r\n </div>\r\n <!-- for Text -->\r\n <div class=\"col-12\" *ngIf=\"column.dataType === 'plainText'\">\r\n <input [(ngModel)]=\"dataGridColumns[getQuestion(question).labelName + '=' + column.order]\"\r\n [disabled]=\"buttonDisable || disableInput()\" class=\"form-control1 form-control-solid\" type=\"text\">\r\n </div>\r\n <!-- for Number -->\r\n <div class=\"col-12\" *ngIf=\"column.dataType === 'number'\">\r\n <input [(ngModel)]=\"dataGridColumns[getQuestion(question).labelName + '=' + column.order]\"\r\n [disabled]=\"buttonDisable || disableInput()\" [min]=\"column.numberPropertie.start\"\r\n [max]=\"column.numberPropertie.end\" class=\"form-control1 form-control-solid\" type=\"number\">\r\n </div>\r\n <!-- for Date -->\r\n <div class=\"col-12 disp-flex\" *ngIf=\"column.dataType === 'date'\">\r\n <input class=\"form-control1\" [matDatepicker]=\"picker\" [max]=\"getMaxdate(question)\"\r\n [min]=\"getMindate(question)\"\r\n [(ngModel)]=\"dataGridColumns[getQuestion(question).labelName + '=' + column.order]\"\r\n [disabled]=\"buttonDisable || disableInput()\" (click)=\"picker.open()\">\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker [disabled]=\"buttonDisable || disableInput()\">\r\n </mat-datepicker>\r\n </div>\r\n </div>\r\n <div class=\"act-btns\">\r\n <button type=\"button\" class=\"btn btn-light-primary font-weight-bold\"\r\n (click)=\"cancelAddorUpdate(getQuestion(question))\">\r\n Cancel\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary font-weight-bold\"\r\n (click)=\"saveDataGridColumn(getQuestion(question))\">Add</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 col-12 col-sm-12 col-lg-12 no-padding submit-pad\"\r\n *ngIf=\"type !== 'qnrLinkProvider' && source!=='proLead' && (uuid || source === 'customer-details' || source === 'proDonation') && !disableInput()\">\r\n <button class=\"normal-btn\" mat-flat-button [class.spinner]=\"buttonDisable\"\r\n [class.spinner-darker-success]=\"buttonDisable\" [class.spinner-center]=\"buttonDisable\"\r\n (click)=\"!buttonDisable && onSubmit('submit')\" [disabled]=\"buttonDisable\"\r\n [class.disabled]=\"buttonDisable\">{{(type == 'qnr-link') ? 'Submit' : 'Update'}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n<ks-modal-gallery [id]=\"0\" *ngIf=\"image_list_popup && image_list_popup.length>0\" [modalImages]=\"image_list_popup\"\r\n [plainGalleryConfig]=\"customPlainGalleryRowConfig\" [buttonsConfig]=\"customButtonsFontAwesomeConfig\"\r\n (buttonBeforeHook)=\"onButtonBeforeHook($event)\"></ks-modal-gallery>\r\n<section class=\"cons-inbox no-padding-small\" *ngIf=\"showservice\">\r\n <div class=\"container consumer-dashhome no-padding no-padding-small\" *ngIf=\"!type\">\r\n <div class=\"card title-gb rounded-0\" *ngIf=\"uuid\">\r\n <h5 class=\"mgn-up-10 bold\">{{questionnaire_heading | capitalizeFirst}} <a class=\"pull-left mgn-rt-20 back-btn\"\r\n (click)=\"goBack()\"><i class=\"fa fa-arrow-left\"></i></a></h5>\r\n </div>\r\n </div>\r\n <app-common-innerloading-spinner *ngIf=\"loading\"></app-common-innerloading-spinner>\r\n <div class=\"d-flex flex-column-fluid pull-right mgn-rt-10 mgn-bt-20\"\r\n *ngIf=\"type !== 'qnrLinkProvider' && !buttonDisable && waitlistStatus\">\r\n <button class=\"normal-btn edit\" mat-flat-button (click)=\"editQnr()\">Edit</button>\r\n </div>\r\n <div class=\"d-flex flex-column-fluid width-100\" [class.qnrDisableState]=\"disableInput()\"\r\n [class.no-padding]=\"uuid && (source === 'consCheckin' || source === 'consAppt' || source === 'consDonationDetails' )\">\r\n <div class=\"col-xl-12 force_center no-padding\" [class.no-padding]=\"uuid\"\r\n [class.no-padding-small]=\"source && source=='ivr'\">\r\n <div class=\"\">\r\n <div class=\"\" *ngFor=\"let qnr of groupedQnr | keyvalue\" [class.section-shadow]=\"getSectionCount() > 1\">\r\n <!-- <div class=\"qnr-section\" *ngIf=\"getSectionCount() > 1\">{{qnr.key}}</div> -->\r\n <div *ngIf=\"itemArray.length == 0 \">\r\n <div class=\"form-group mgn-0 border-dashed text-center\" *ngFor=\"let question of qnr.value\">\r\n <div class=\"qnr-section\" *ngIf=\"getSectionCount() > 1\">\r\n {{getQuestion(question).question.sectionName}}</div>\r\n <label class=\"col-12 quest pointer-cursor\"\r\n (click)=\"showDataGridAddSectionn(getQuestion(question).question, true)\">\r\n <!-- {{getQuestion(question).question.label}} -->\r\n <!-- <div class=\"pull-right btn btn-primary font-weight-bold\"\r\n (click)=\"showDataGridAddSectionn(getQuestion(question).question, true)\"><i\r\n class=\"fa fa-plus add-plus\"></i>Add Item\r\n </div> -->\r\n <div>\r\n <img src=\"./assets/images/service-options.svg\" alt=\"Service Options\" class=\"img-fluid pb-0\"\r\n width=\"300\" height=\"300\">\r\n </div>\r\n <div class=\"pro-only\" *ngIf=\"showProviderText(getQuestion(question).question)\">For Providers</div>\r\n <span class=\"red\" *ngIf=\"getQuestion(question).question.mandatory\">*</span>\r\n <!-- <div class=\"form-level-settings\" *ngIf=\"getQuestion(question).question.hint\">\r\n {{getQuestion(question).question.hint}}\r\n </div> -->\r\n <div>\r\n <span class=\"text-primary font-weight-bold\">Please Choose your Pet</span>\r\n </div>\r\n <div class=\"mt-3\">\r\n <span class=\"btn btn-light font-weight-bold\">Continue</span>\r\n </div>\r\n </label>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n </div>\r\n <!-- {{itemArray | json}} -->\r\n <div class=\"col-md-12 col-12 col-sm-12 mgn-bt-12 no-padding\" *ngIf=\"showItem\">\r\n\r\n\r\n <div>\r\n <div class=\"card-border\" *ngFor=\" let items of itemArray\">\r\n\r\n <div class=\"d-flex justify-content-between\">\r\n <div>\r\n <div class=\"text-capitalize\">\r\n <div class=\"\">\r\n <span class=\"text-primary\">\r\n {{items.item}}<br>\r\n </span>\r\n <!-- <span class=\"disp-none-small\"> - </span>\r\n <span class=\"disp-none-large\"><br></span> -->\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"d-flex border-apply px-0\">\r\n <div (click)=\"decrement(items);\" class=\"pointer-cursor quantity quantity-1\">\r\n <span class=\"p-10\">-</span>\r\n </div>\r\n <div class=\"mx-2 pointer-cursor\"><span class=\"quantity\"\r\n *ngIf=\"items && items.columnItem && items.columnItem[0] && items.columnItem[0].answer && items.columnItem[0].answer.dataGridList && items.columnItem[0].answer.dataGridList[0] && items.columnItem[0].answer.dataGridList[0].dataGridListColumn && items.columnItem[0].answer.dataGridList[0].dataGridListColumn[0] && items.columnItem[0].answer.dataGridList[0].dataGridListColumn[0].quantity\">\r\n {{items.columnItem[0].answer.dataGridList[0].dataGridListColumn[0].quantity}}</span>\r\n </div>\r\n <div (click)=\"increment(items);\" class=\"pointer-cursor quantity quantity-1\">\r\n <span class=\"p-10\">+</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div>\r\n <span class=\"text-primary\"><span><i class=\"fa fa-inr\"></i>\r\n {{items.price * getItemQuantity(items)}}/-\r\n </span>\r\n </span>\r\n </div>\r\n <!-- <div (click)=\"qnrPopup(items, 'edit');\">\r\n <span class=\"text-link font-weight-bold\"><span>\r\n Edit*\r\n </span>\r\n </span>\r\n </div> -->\r\n </div>\r\n\r\n <div class=\"clearfix\"></div>\r\n <div *ngIf=\"showItem &&itemArray.length > 0\">\r\n <div *ngFor=\"let qnr of groupedQnr | keyvalue\" [class.section-shadow]=\"getSectionCount() > 1\">\r\n <div *ngFor=\"let question of qnr.value\">\r\n <label class=\"col-12 quest pointer-cursor\"\r\n (click)=\"showDataGridAddSectionn(getQuestion(question).question, true)\">\r\n <span class=\"btn btn-light font-weight-bold\"><i class=\"fa fa-plus text-white\"></i>Add</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n</section>\r\n\r\n<!-- <ks-modal-gallery [id]=\"0\" *ngIf=\"image_list_popup && image_list_popup.length>0\" [modalImages]=\"image_list_popup\"\r\n [plainGalleryConfig]=\"customPlainGalleryRowConfig\" [buttonsConfig]=\"customButtonsFontAwesomeConfig\"\r\n (buttonBeforeHook)=\"onButtonBeforeHook($event)\"></ks-modal-gallery> -->", styles: [".dropzone{min-height:auto!important}.question-box{margin-top:10px}.btn-light{background-color:#1e4079!important;padding:5px 25px!important;color:#fff!important}.quest-outer{padding:10px}.error-msg{color:red}.upload-btn{background:#fff;border:1px solid;font-size:small}.card-border{box-shadow:0 0 5px 5px #f0f0f0!important;padding:10px 30px!important;margin:20px 10px!important;cursor:pointer!important;border-radius:10px!important}.border-apply{border:2px solid #1e4079!important;border-radius:20px!important}.quantity{font-size:20px!important;font-weight:700!important}.quantity-1:hover{background-color:#1e4079!important;color:#fff!important;font-weight:700!important;border-radius:50%!important;padding:-2px 12px!important}::ng-deep .mat-checkbox-layout{font-weight:400!important}.force_center{margin-left:auto;margin-right:auto}.input-group-text{display:-webkit-box;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.65rem 1rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#3f4254;text-align:center;white-space:nowrap;background-color:#f3f6f9!important;border:1px solid #E4E6EF!important;border-radius:.42rem;border-top-left-radius:0;border-bottom-left-radius:0;cursor:pointer}.w_100{width:100%}.img_fit{width:120px;height:120px}.dropzone .dropzone-default{border:1px dashed #EBEDF3!important}.select-box{padding:10px!important;border:1px solid #E4E6EF!important;border-radius:.42rem!important}.normal-btn{padding:5px 20px;border:none!important}.edit{padding:3px 25px;border-radius:20px!important}.mgn-0{margin-left:0!important;margin-right:0!important;margin-bottom:10px!important}.quest{font-size:1.1rem!important}.mt-3 a:hover{text-decoration:underline!important}.dzimage,.dz-image{border:1px dashed #ccc}.gal_action{position:absolute;top:20px;right:-10px;background:#00000080;width:20px;height:20px;text-align:center;border-radius:50%;cursor:pointer}.single-file{padding:0!important;text-align:initial!important;border:none!important}.single-file .dz-preview{position:relative!important;display:inline-block!important;vertical-align:top!important;margin:16px!important;min-height:100px!important}.single-file .gal_action{top:-5px!important}.pro-only{float:right;color:red;font-size:.8rem}.qnrDisableState .card,.qnrDisableState .dropzone-default,.qnrDisableState .dz-image-preview{background:#eeeeee9e!important}.qnr-section{font-weight:700;padding-bottom:10px;text-transform:uppercase}.section-shadow{margin:20px 10px;padding:20px!important;box-shadow:0 0 10px #0000001f!important}.gridSection .gridColumn{padding:15px}.gridSection .gridColumn label{padding:0 12.5px!important;font-weight:400!important;color:#3f4254!important;font-size:.9rem!important}.gridSection .act-btns .btn{padding:5px 10px!important;margin:5px!important}.gridSection .act-btns{padding:0 20px}.fa-plus-circle{font-size:1.5rem!important}.addicon{color:#1e4079!important;cursor:pointer}.fa-trash,.fa-pen{color:#000!important;font-size:1rem!important}.dz-preview input{width:121px!important;border:1px solid #ccc}.submit-pad{padding:0 10px 20px!important}.form-group.card{border:1px solid #dadce063!important;border-radius:8px!important;padding:5px!important}.docname{width:120px;margin-bottom:5px;text-overflow:ellipsis!important;overflow:hidden!important;white-space:nowrap!important}@media (max-width: 750px){.normal-btn{padding:3px 10px;border:none!important}.edit{padding:2px 12px;border-radius:10px!important}}.col-xl-12,.col-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;width:100%;padding-right:12.5px;padding-left:12.5px}@media (min-width: 1200px){.col-xl-12{flex:0 0 100%;max-width:100%}}.qnrsec{padding:10px}.p-10{padding:8px!important}.form-control1{display:block!important;width:100%!important;height:calc(1.5em + 1.3rem + 2px)!important;padding:.65rem 1rem!important;font-size:1rem!important;font-weight:400!important;line-height:1.5!important;color:#3f4254!important;background-color:#fff!important;background-clip:padding-box!important;border:1px solid #E4E6EF!important;border-radius:.42rem!important;box-shadow:none!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out!important}.form-control2{display:block!important;width:100%!important;padding:.65rem 1rem!important;font-size:1rem!important;font-weight:400!important;line-height:1.5!important;color:#3f4254!important;background-color:#fff!important;background-clip:padding-box!important;border:1px solid #E4E6EF!important;border-radius:.42rem!important;box-shadow:none!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out!important}.form-group label{font-size:1rem;font-weight:400;color:#3f4254}label{display:inline-block;margin-bottom:.5rem}.col-12{flex:0 0 100%;max-width:100%}.radio-list .radio span{margin-right:.75rem}.radio>span{background-color:#ebedf3;border:1px solid transparent}.radio>span{height:18px;width:18px}.radio>span{border-radius:50%;background-color:none;display:flex;align-items:center;justify-content:center;flex-shrink:0}.radio-list .radio{margin-bottom:1rem}.radio{display:flex;align-items:center;position:relative;text-align:left;cursor:pointer;font-size:1rem;transition:all .3s ease;margin:0}.radio>input{position:absolute;z-index:-1;opacity:0}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid #EBEDF3;border-radius:.42rem}.radio-list .radio:last-child{margin-bottom:0}@media (min-width: 992px){.col-lg-12{flex:0 0 100%;max-width:100%}}.dropzone.dropzone-default .dz-preview .dz-image{border-radius:.42rem}.btn.btn-icon i{padding:0;margin:0}.btn i{font-size:1.3rem;padding-right:.35rem;vertical-align:middle;line-height:1;display:inline-flex}.btn i{transition:color .15s ease,background-color .15s ease,border-color .15s ease,box-shadow .15s ease}.text-dark-50{color:#7e8299!important}.btn.btn-icon.btn-circle{border-radius:50%}.btn.btn-light-success{color:#1bc5bd;background-color:#c9f7f5;border-color:transparent}.btn.btn-icon{display:inline-flex;align-items:center;justify-content:center;padding:0;height:calc(1.5em + 1.3rem + 2px);width:calc(1.5em + 1.3rem + 2px)}.btn{display:inline-block;font-weight:400;color:#3f4254;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.65rem 1rem;font-size:1rem;line-height:1.5;border-radius:.42rem;transition:color .3s ease-in-out,background-color .3s ease-in-out,border-color .3s ease-in-out,box-shadow .3s ease-in-out}.radio>input:checked~span{background-color:#1e4079}.radio>input:checked~span:after{background-color:#fff;border-color:#fff}.radio>input:checked~span:after{display:block}.radio>span:after{width:6px;height:6px}.radio>span:after{content:\"\";border-radius:100%!important}i{font-size:1.25rem;color:#b5b5c3}.dropzone{min-height:auto}.btn.btn-light-primary{background-color:#f9e2a7;border-color:transparent}.checkbox-lis .checkbox span{margin-right:.75rem}.checkbox>span{background-color:#ebedf3;border:1px solid transparent}.checkbox>span{height:18px;width:18px}.checkbox>span{background-color:none;display:flex;align-items:center;justify-content:center;flex-shrink:0;border-radius:.42rem}.checkbox>span:after{width:5px;height:10px}.checkbox>span:after{content:\"\";border-color:transparent;border-style:solid;border-width:0 2px 2px 0!important;transform:rotate(45deg);margin-top:-2px}.checkbox-list{display:flex;flex-direction:column}.checkbox>input{position:absolute;z-index:-1;opacity:0}.checkbox>input:checked~span{background-color:#1e4079}.checkbox>input:checked~span:after{border-color:#fff}.checkbox{display:flex;align-items:center;position:relative;text-align:left;cursor:pointer;font-size:1rem;transition:all .3s ease;margin:0}.add-plus{color:#fff!important}.border-dashed{padding:10px!important}.add-plus-black{color:#000!important}.plus-black .fa .fa-plus{color:#000!important;font-size:12px!important}.checkbox-list .checkbox{margin-bottom:1rem}.checkbox-list .checkbox span{margin-right:.75rem}.checkbox-list .checkbox:last-child{margin-bottom:0}.btn.btn-primary{color:#fff;background-color:#1e4079;border-color:#1e4079}.font-weight-bold{font-weight:500!important}button{font-family:inherit}.form-control1:focus{color:#3f4254!important;background-color:#fff!important;border-color:#69b3ff!important;outline:0!important}.table.table-head-bg thead th:first-child{border-radius:.42rem}.table.table-head-bg thead tr,.table.table-head-bg thead th{background-color:#f3f6f9;border-bottom:0;letter-spacing:1px}.table.table-head-custom thead tr,.table.table-head-custom thead th{font-weight:600;color:#b5b5c3!important;font-size:.9rem;text-transform:uppercase}.table thead th{font-weight:600;font-size:1rem;border-bottom-width:1px;padding-top:1rem;padding-bottom:1rem}.table th,.table td{padding:.75rem}.table.table-head-bg thead tr:last-child,.table.table-head-bg thead th:last-child{border-top-right-radius:.42rem;border-bottom-right-radius:.42rem}.table-responsive1{display:block;width:100%;overflow-x:auto}.text-white{color:#fff!important;font-size:15px!important}.details{border:2px solid #1e4079!important;border-radius:10px!important;max-width:13%}.text-primary{color:#1e4079!important}.text-link{color:#1a6888}@media (min-width: 300px) and (max-width: 750px){.item{font-size:10px!important}.item_price{font-size:9px!important}.details{border:2px solid #1e4079!important;border-radius:10px!important;max-width:23%}}@media (max-width: 450px){.item{font-size:10px!important}.item_price{font-size:9px!important}}@media (min-width: 600px) and (max-width: 992px){.items{font-size:18px!important}.item_prices{font-size:16px!important}}@media (max-width: 450px){.incre{border:2px solid blue!important;border-radius:100px!important;max-width:20.66667%!important}}.font-weight-bold{font-weight:700!important}@media (max-width: 750px){.incre{max-width:20.66667%!important}}.incre{border:2px solid blue!important;border-radius:100px!important;max-width:10.66667%}@media (max-width: 893px){.disp-none-small{display:none!important}}@media (min-width: 800px){.disp-none-large{display:none!important}}.fa-inr{font-size:15px!important;color:#1e4079!important}.text-primary{font-weight:700!important}.flaticon-upload:before{content:\"\\f11d\"}[class*=\" flaticon-\"]:before{font-family:Flaticon;font-style:normal;font-weight:400;font-feature-settings:normal;font-variant:normal;line-height:1;text-decoration:inherit;text-rendering:optimizeLegibility;text-transform:none;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-smoothing:antialiased}.dropzone{position:relative!important;display:inline-block!important;vertical-align:top!important;min-height:100px!important}.dz-image{border-radius:20px;overflow:hidden;width:120px;height:120px;position:relative;display:block;z-index:10}.dz-image{border:1px dashed #ccc}.dropzone .dz-preview .dz-success-mark,.dropzone .dz-preview .dz-error-mark{pointer-events:none;z-index:500;position:absolute;display:block;top:50%;left:50%;margin-left:-27px;margin-top:-27px}\n"] }]
|
|
1386
|
+
}], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.WordProcessor }, { type: i3.LocalStorageService }, { type: i4.DateTimeProcessor }, { type: i5.MatDialog }, { type: i6.FileService }, { type: i7.CommonService }, { type: i8.QuestionaireService }, { type: i9.ErrorMessagingService }, { type: i10.ToastService }, { type: i11.ModalGalleryService }, { type: i12.Location }], propDecorators: { questionnaireList: [{
|
|
1387
|
+
type: Input
|
|
1388
|
+
}], source: [{
|
|
1389
|
+
type: Input
|
|
1390
|
+
}], accountId: [{
|
|
1391
|
+
type: Input
|
|
1392
|
+
}], questionAnswers: [{
|
|
1393
|
+
type: Input
|
|
1394
|
+
}], customerDetails: [{
|
|
1395
|
+
type: Input
|
|
1396
|
+
}], uuid: [{
|
|
1397
|
+
type: Input
|
|
1398
|
+
}], type: [{
|
|
1399
|
+
type: Input
|
|
1400
|
+
}], waitlistStatus: [{
|
|
1401
|
+
type: Input
|
|
1402
|
+
}], orderStatus: [{
|
|
1403
|
+
type: Input
|
|
1404
|
+
}], donationDetails: [{
|
|
1405
|
+
type: Input
|
|
1406
|
+
}], service: [{
|
|
1407
|
+
type: Input
|
|
1408
|
+
}], mode: [{
|
|
1409
|
+
type: Input
|
|
1410
|
+
}], fileChanged: [{
|
|
1411
|
+
type: Output
|
|
1412
|
+
}], returnAnswers: [{
|
|
1413
|
+
type: Output
|
|
1414
|
+
}], tempType: [{
|
|
1415
|
+
type: Input
|
|
1416
|
+
}], bookingType: [{
|
|
1417
|
+
type: Input
|
|
1418
|
+
}], file2: [{
|
|
1419
|
+
type: ViewChild,
|
|
1420
|
+
args: ['logofile1']
|
|
1421
|
+
}] } });
|
|
1422
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25uYWlyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9qY29uc3VtZXItc2hhcmVkL3NyYy9saWIvcXVlc3Rpb25haXJlL2VkaXQvcXVlc3Rpb25uYWlyZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9qY29uc3VtZXItc2hhcmVkL3NyYy9saWIvcXVlc3Rpb25haXJlL2VkaXQvcXVlc3Rpb25uYWlyZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakgsT0FBTyxFQUFpQixlQUFlLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBeUYsTUFBTSw2QkFBNkIsQ0FBQztBQVF2TCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVN4RixNQUFNLE9BQU8sc0JBQXNCO0lBMEZ2QjtJQUNBO0lBQ0E7SUFDQTtJQUNEO0lBQ0M7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFwR0QsaUJBQWlCLENBQU07SUFDdkIsTUFBTSxDQUFNO0lBQ1osU0FBUyxDQUFNO0lBQ2YsZUFBZSxDQUFNO0lBQ3JCLGVBQWUsQ0FBTTtJQUNyQixJQUFJLENBQU07SUFDVixJQUFJLENBQU07SUFDVixjQUFjLENBQU07SUFDcEIsV0FBVyxDQUFNO0lBQ2pCLGVBQWUsQ0FBTTtJQUNyQixPQUFPLENBQU07SUFDYixJQUFJLENBQU0sQ0FBQyx5Q0FBeUM7SUFDbkQsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDdEMsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDekMsUUFBUSxDQUFNO0lBQ2QsV0FBVyxDQUFNO0lBQzFCLE9BQU8sR0FBUSxFQUFFLENBQUM7SUFDbEIsWUFBWSxHQUFRLEVBQUUsQ0FBQztJQUN2QixlQUFlLEdBQVEsRUFBRSxDQUFDO0lBQzFCLFFBQVEsR0FBUSxFQUFFLENBQUM7SUFDbkIsTUFBTSxDQUFNO0lBQ1osb0JBQW9CLEdBQVEsRUFBRSxDQUFDO0lBQy9CLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDaEIsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUN0QixTQUFTLEdBQVEsRUFBRSxDQUFDO0lBQ3BCLFlBQVksR0FBUSxFQUFFLENBQUM7SUFDdkIsaUJBQWlCLEdBQVEsRUFBRSxDQUFDO0lBQzVCLFlBQVksQ0FBZTtJQUMzQixlQUFlLEdBQVEsRUFBRSxDQUFDO0lBQzFCLGFBQWEsR0FBUSxFQUFFLENBQUM7SUFDeEIsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUN2QixhQUFhLEdBQVEsRUFBRSxDQUFDO0lBQ3hCLGNBQWMsR0FBUSxFQUFFLENBQUM7SUFDekIsY0FBYyxHQUFRLEVBQUUsQ0FBQztJQUNELEtBQUssQ0FBYztJQUMzQyw4QkFBOEIsR0FBa0I7UUFDOUMsT0FBTyxFQUFFLElBQUk7UUFDYixRQUFRLEVBQUUsZUFBZSxDQUFDLE1BQU07UUFDaEMsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsU0FBUyxFQUFFLGdCQUFnQjtnQkFDM0IsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRO2dCQUN6QixTQUFTLEVBQUUseUJBQXlCO2dCQUNwQyxLQUFLLEVBQUUsVUFBVTtnQkFDakIsUUFBUSxFQUFFLE1BQU07YUFDakI7WUFDRDtnQkFDRSxTQUFTLEVBQUUsb0JBQW9CO2dCQUMvQixJQUFJLEVBQUUsVUFBVSxDQUFDLEtBQUs7Z0JBQ3RCLFNBQVMsRUFBRSx5QkFBeUI7Z0JBQ3BDLEtBQUssRUFBRSxPQUFPO2dCQUNkLFFBQVEsRUFBRSxNQUFNO2FBQ2pCO1NBQ0Y7S0FDRixDQUFDO0lBQ0YsZ0JBQWdCLENBQVc7SUFDM0IscUJBQXFCLEdBQUcsRUFBRSxDQUFDO0lBQzNCLGNBQWMsR0FBRyxFQUFFLENBQUM7SUFDcEIsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBQzFCLGVBQWUsR0FBUSxFQUFFLENBQUM7SUFDMUIsVUFBVSxHQUFRLEVBQUUsQ0FBQztJQUNyQixlQUFlLEdBQVEsRUFBRSxDQUFDO0lBQzFCLHlCQUF5QixHQUFRLEVBQUUsQ0FBQztJQUNwQyxnQkFBZ0IsR0FBUSxFQUFFLENBQUM7SUFDM0IsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDZixRQUFRLEdBQVEsRUFBRSxDQUFDO0lBQ25CLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ2xCLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlCLG1CQUFtQixHQUFRLEVBQUUsQ0FBQztJQUM5QixPQUFPLENBQVc7SUFDbEIsSUFBSSxDQUFNO0lBQ1YsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixVQUFVLENBQU07SUFDaEIsVUFBVSxDQUFNO0lBQ2hCLFNBQVMsR0FBUSxFQUFFLENBQUM7SUFDcEIsWUFBWSxHQUFRLEVBQUUsQ0FBQztJQUN2QixFQUFFLEdBQVcsQ0FBQyxDQUFDO0lBQ2YsU0FBUyxDQUFNO0lBQ2YsTUFBTSxDQUFNO0lBQ1osVUFBVSxDQUFNO0lBQ2hCLGVBQWUsR0FBUSxFQUFFLENBQUM7SUFDMUIsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUNwQixTQUFTLENBQU07SUFDZixPQUFPLEdBQVcsRUFBRSxDQUFDO0lBQ3JCLFdBQVcsQ0FBTTtJQUNqQixpQkFBaUIsR0FBVyxDQUFDLENBQUM7SUFDOUIsWUFBWSxDQUFNO0lBQ2xCLFlBQ1UsZUFBK0IsRUFDL0IsYUFBNEIsRUFDNUIsZUFBb0MsRUFDcEMsYUFBZ0MsRUFDakMsTUFBaUIsRUFDaEIsV0FBd0IsRUFDeEIsYUFBNEIsRUFDNUIsbUJBQXdDLEVBQ3hDLFlBQW1DLEVBQ25DLFlBQTBCLEVBQzFCLG1CQUF3QyxFQUN4QyxRQUFrQjtRQVhsQixvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFDL0Isa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsb0JBQWUsR0FBZixlQUFlLENBQXFCO1FBQ3BDLGtCQUFhLEdBQWIsYUFBYSxDQUFtQjtRQUNqQyxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2hCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsaUJBQVksR0FBWixZQUFZLENBQXVCO1FBQ25DLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUMxQixJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDbkQsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7WUFDdEIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUMvQixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUMxQixDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO1lBQzFDLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDL0IsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzVFLFFBQVEsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNyQixLQUFLLGtCQUFrQjtvQkFDckIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDckMsTUFBTTtZQUNWLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsQyxDQUFDO0lBQ0gsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM1RixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDO1FBQzFELENBQUM7SUFFSCxDQUFDO0lBQ0QsUUFBUTtRQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDeEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDOUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzNFLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7WUFDL0MsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFeEUsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUN4QixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssaUJBQWlCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDbkUsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUM5RSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO29CQUM1RCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztvQkFDL0IsMENBQTBDO2dCQUM1QyxDQUFDO2dCQUNELElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUN0SixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDaEYsQ0FBQztZQUNILENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFlBQVksRUFBRSxDQUFDO2dCQUN4QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUM7Z0JBQ2xELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ2pDLENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLG1CQUFtQixFQUFFLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2dCQUN4QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUM7Z0JBQy9DLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ2pDLENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7Z0JBQ2xELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ2pDLENBQUM7aUJBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN2RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUM7Z0JBQy9DLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ2pDLENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3RFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztnQkFDL0MsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDakMsQ0FBQztpQkFDSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssZUFBZSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDMUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDO2dCQUMvQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUNqQyxDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDL0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO2dCQUNsRCxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ2pDLENBQUM7UUFFSCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLGtCQUFrQixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMzRyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7WUFDL0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUM7WUFDdkUsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUM7WUFDcEQsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQztZQUN6RCxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN2QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDO1lBQzFELENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMseUJBQXlCLEVBQUUsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMseUJBQXlCLENBQUM7WUFDbEYsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQztZQUNoRCxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNuRSxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDL0MsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMvRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUM7WUFDNUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDO1lBQ3hELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQy9CLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3pDLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDO2dCQUN4RCxJQUFJLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDakMsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDekMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDO2dCQUMvQyxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDakMsQ0FBQztpQkFDSSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3ZFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFDbEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUM7Z0JBQzVCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ2pDLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN6QyxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQTtJQUNyQixDQUFDO0lBRUQsZUFBZTtJQUNmLFlBQVk7UUFDVixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLGVBQWUsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDekYsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDMUIsdUJBQXVCO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBQ0QsaUJBQWlCO0lBQ2pCLFNBQVMsQ0FBQyxDQUFNLEVBQUUsQ0FBTTtRQUN0QixPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFDRCx1QkFBdUI7UUFDckIsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLGlCQUFpQixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssWUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDbkcsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzlFLENBQUM7YUFDSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQU8sRUFBRSxDQUFNO2dCQUMvRCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFFLE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ1QsQ0FBQzthQUNJLENBQUM7WUFDSixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBTyxFQUFFLENBQU07Z0JBQy9ELENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEYsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDVCxDQUFDO0lBQ0gsQ0FBQztJQUNELGdCQUFnQixDQUFDLE1BQVc7UUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3RCLEtBQUssSUFBSSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2RCxDQUFDO1lBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFDRCxVQUFVLENBQUMsVUFBZSxFQUFFLElBQVU7UUFDcEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1lBQ3hCLEtBQUssSUFBSSxJQUFJLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBRTVCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUNwQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxLQUFLLFlBQVksRUFBRSxDQUFDO3dCQUVqRCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7NEJBQzlCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQ0FDMUgsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7b0NBQ3BGLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztvQ0FDdEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDO29DQUMzRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztvQ0FDOUgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7b0NBQ3hILElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO29DQUNoSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQ0FDOUgsQ0FBQztnQ0FDRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQzs0QkFDaEcsQ0FBQzt3QkFDSCxDQUFDO3dCQUVELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQzs0QkFDcEosS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0NBQ3BGLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO29DQUNuQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0NBQ2pGLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQzt3Q0FDbkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQ0FDckQsQ0FBQztvQ0FDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzt3Q0FDbkgsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO29DQUNySCxDQUFDO29DQUNELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7b0NBQ2xMLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0NBR3pLLENBQUM7cUNBQU0sQ0FBQztvQ0FDTixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0NBQ2xGLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQzt3Q0FDbkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQ0FDckQsQ0FBQztvQ0FDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzt3Q0FDbkgsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO29DQUNySCxDQUFDO29DQUNELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0NBRXpLLENBQUM7NEJBQ0gsQ0FBQzt3QkFDSCxDQUFDO29CQUNILENBQUM7eUJBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsS0FBSyxVQUFVLEVBQUUsQ0FBQzt3QkFDdEQsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7NEJBQ3BFLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQzs0QkFDakIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0NBQ25ELE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQzlGLENBQUM7NEJBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0NBQy9ELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQzs0QkFDakUsQ0FBQzs0QkFDRCxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQzFFLENBQUM7b0JBQ0gsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUNoRyxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixLQUFLLElBQUksSUFBSSxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUM1QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUM3QyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFFLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDNUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDbEQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7NEJBQy9CLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO3dCQUNqQyxDQUFDO3dCQUNELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFFM0QsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxPQUFPLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxFQUFFLENBQUM7NEJBQ3hKLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUN2QyxDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM1QyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ2xELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO3dCQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDOzRCQUMvQixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDakMsQ0FBQzt3QkFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdkMsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUNELGFBQWEsQ0FBQyxLQUFVLEVBQUUsUUFBYSxFQUFFLFFBQWE7UUFDcEQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDakMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ3pCLE1BQU0sU0FBUyxHQUFHO29CQUNoQixPQUFPLEVBQUUsUUFBUTtvQkFDakIsSUFBSSxFQUFFLElBQUk7b0JBQ1YsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTO2lCQUM5QixDQUFBO2dCQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztvQkFDNUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUM5QyxDQUFDO2dCQUNELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO29CQUN0RCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ3hELENBQUM7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO29CQUMvRixJQUFJLEtBQUssQ0FBQztvQkFDVixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxhQUFhLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLE9BQU8sRUFBRSxDQUFDO3dCQUNyRCxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztvQkFDekYsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUN6RixDQUFDO29CQUNELElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ2pCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLGFBQWEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssT0FBTyxFQUFFLENBQUM7NEJBQ3JELElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDeEMsQ0FBQzs2QkFBTSxDQUFDOzRCQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDeEMsQ0FBQzt3QkFDRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUN4RCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNqRCxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUN4RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxhQUFhLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLE9BQU8sRUFBRSxDQUFDO29CQUNyRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDaEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2hELElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ2hCLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7d0JBQ2hDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFNLEVBQUUsRUFBRTs0QkFDekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUMxRCxDQUFDLENBQUM7d0JBQ0YsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDN0IsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2hDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNoRCxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUNoQixNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO3dCQUNoQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUU7NEJBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDMUQsQ0FBQyxDQUFDO3dCQUNGLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzdCLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDdEMsQ0FBQztZQUNELElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFDRCxtQkFBbUIsQ0FBQyxRQUFhLEVBQUUsUUFBYTtRQUM5QyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDL0YsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1RSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2YsSUFBSSxLQUFLLENBQUM7WUFDVixJQUFJLElBQUksS0FBSyxhQUFhLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUMvQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUN6RixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDekYsQ0FBQztZQUNELElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pCLElBQUksSUFBSSxLQUFLLGFBQWEsSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7b0JBQy9DLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDeEMsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDeEMsQ0FBQztnQkFDRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN4RCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDeEQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3BGLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQztvQkFDN0csSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDdEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUMxRSxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDOzRCQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNwRCxDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3JFLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDaEQsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN0RixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzFDLENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ3RHLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDNUYsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO2dCQUM1RCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMxRCxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUNELFNBQVMsQ0FBQyxHQUFRO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUNELFFBQVEsQ0FBQyxPQUFhO1FBRXBCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN6QixDQUFDO1lBQ0QsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDbEQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQ2xDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDekQsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDZixJQUFJLElBQUksQ0FBQzt3QkFDVCxJQUFJLElBQUksS0FBSyxhQUFhLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDOzRCQUMvQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUNyRSxDQUFDOzZCQUFNLENBQUM7NEJBQ04sSUFBSSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDckUsQ0FBQzt3QkFDRCxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDOzRCQUNoQixJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7NEJBQ25CLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0NBQzdELE1BQU0sR0FBRyxRQUFRLENBQUM7NEJBQ3BCLENBQUM7NEJBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dDQUN0RCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsQ0FBQztnQ0FDMUYsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQ0FDdEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0NBQzNELElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7d0NBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztvQ0FDckMsQ0FBQztnQ0FDSCxDQUFDOzRCQUNILENBQUM7NEJBQ0QsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUN6RCxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUNmLElBQUksSUFBSSxLQUFLLGFBQWEsSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7Z0NBQy9DLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQzs0QkFDcFYsQ0FBQztpQ0FBTSxDQUFDO2dDQUNOLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsYUFBYSxD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QVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQnV0dG9uc0NvbmZpZywgQnV0dG9uc1N0cmF0ZWd5LCBCdXR0b25UeXBlLCBJbWFnZSwgQnV0dG9uRXZlbnQsIE1vZGFsR2FsbGVyeVJlZiwgTW9kYWxMaWJDb25maWcsIE1vZGFsR2FsbGVyeUNvbmZpZywgTW9kYWxHYWxsZXJ5U2VydmljZSB9IGZyb20gJ0Brczg5L2FuZ3VsYXItbW9kYWwtZ2FsbGVyeSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBRdWVzdGlvbmFpcmVTZXJ2aWNlIH0gZnJvbSAnLi4vcXVlc3Rpb25haXJlLXNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmlsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9maWxlLXNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tbW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi90b2FzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2hvd3VwbG9hZGZpbGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaG93dXBsb2FkZmlsZS9zaG93dXBsb2FkZmlsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEYXRlVGltZVByb2Nlc3NvciB9IGZyb20gJy4uLy4uL2NhbGVuZGFyL2RhdGUtdGltZS9kYXRldGltZS1wcm9jZXNzb3Iuc2VydmljZSc7XHJcbmltcG9ydCB7IEVycm9yTWVzc2FnaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL2Vycm9yLW1lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFdvcmRQcm9jZXNzb3IgfSBmcm9tICcuLi8uLi93b3JkLXByb2Nlc3Nvci5zZXJ2aWNlJztcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtcXVlc3Rpb25uYWlyZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3F1ZXN0aW9ubmFpcmUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3F1ZXN0aW9ubmFpcmUuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbm5haXJlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIHF1ZXN0aW9ubmFpcmVMaXN0OiBhbnk7XHJcbiAgQElucHV0KCkgc291cmNlOiBhbnk7XHJcbiAgQElucHV0KCkgYWNjb3VudElkOiBhbnk7XHJcbiAgQElucHV0KCkgcXVlc3Rpb25BbnN3ZXJzOiBhbnk7XHJcbiAgQElucHV0KCkgY3VzdG9tZXJEZXRhaWxzOiBhbnk7XHJcbiAgQElucHV0KCkgdXVpZDogYW55O1xyXG4gIEBJbnB1dCgpIHR5cGU6IGFueTtcclxuICBASW5wdXQoKSB3YWl0bGlzdFN0YXR1czogYW55O1xyXG4gIEBJbnB1dCgpIG9yZGVyU3RhdHVzOiBhbnk7XHJcbiAgQElucHV0KCkgZG9uYXRpb25EZXRhaWxzOiBhbnk7XHJcbiAgQElucHV0KCkgc2VydmljZTogYW55O1xyXG4gIEBJbnB1dCgpIG1vZGU6IGFueTsgLy8gQWRkZWQgYnkgbWFuaSB0byBjaGVjayB0aGUgZmlsZSB1cGxvYWRcclxuICBAT3V0cHV0KCkgZmlsZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgcmV0dXJuQW5zd2VycyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBJbnB1dCgpIHRlbXBUeXBlOiBhbnk7XHJcbiAgQElucHV0KCkgYm9va2luZ1R5cGU6IGFueTtcclxuICBhbnN3ZXJzOiBhbnkgPSB7fTtcclxuICBzaG93RGF0YUdyaWQ6IGFueSA9IHt9O1xyXG4gIHNlbGVjdGVkTWVzc2FnZTogYW55ID0gW107XHJcbiAgYXBpRXJyb3I6IGFueSA9IFtdO1xyXG4gIHBhcmFtczogYW55O1xyXG4gIGZpbGV1cGxvYWRwcmVBbnN3ZXJzOiBhbnkgPSB7fTtcclxuICBsb2FkaW5nID0gZmFsc2U7XHJcbiAgYnV0dG9uRGlzYWJsZSA9IGZhbHNlO1xyXG4gIHF1ZXN0aW9uczogYW55ID0gW107XHJcbiAgc2VsZWN0ZWREb2NzOiBhbnkgPSBbXTtcclxuICBkb2N1bWVudHNUb1VwbG9hZDogYW55ID0gW107XHJcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgdXBsb2FkRmlsZXNUZW1wOiBhbnkgPSBbXTtcclxuICBmaWxlc3RvVXBsb2FkOiBhbnkgPSBbXTtcclxuICBjaGFuZ2VIYXBwZW5lZCA9IGZhbHNlO1xyXG4gIHVwbG9hZGVkRmlsZXM6IGFueSA9IFtdO1xyXG4gIHVwbG9hZGVkSW1hZ2VzOiBhbnkgPSBbXTtcclxuICBib29raW5nRGV0YWlsczogYW55ID0gW107XHJcbiAgQFZpZXdDaGlsZCgnbG9nb2ZpbGUxJykgZmlsZTIhOiBFbGVtZW50UmVmO1xyXG4gIGN1c3RvbUJ1dHRvbnNGb250QXdlc29tZUNvbmZpZzogQnV0dG9uc0NvbmZpZyA9IHtcclxuICAgIHZpc2libGU6IHRydWUsXHJcbiAgICBzdHJhdGVneTogQnV0dG9uc1N0cmF0ZWd5LkNVU1RPTSxcclxuICAgIGJ1dHRvbnM6IFtcclxuICAgICAge1xyXG4gICAgICAgIGNsYXNzTmFtZTogJ2ZhIGZhLWRvd25sb2FkJyxcclxuICAgICAgICB0eXBlOiBCdXR0b25UeXBlLkRPV05MT0FELFxyXG4gICAgICAgIGFyaWFMYWJlbDogJ2N1c3RvbSBjbG9zZSBhcmlhIGxhYmVsJyxcclxuICAgICAgICB0aXRsZTogJ0Rvd25sb2FkJyxcclxuICAgICAgICBmb250U2l6ZTogJzIwcHgnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBjbGFzc05hbWU6ICdpbnNpZGUgY2xvc2UtaW1hZ2UnLFxyXG4gICAgICAgIHR5cGU6IEJ1dHRvblR5cGUuQ0xPU0UsXHJcbiAgICAgICAgYXJpYUxhYmVsOiAnY3VzdG9tIGNsb3NlIGFyaWEgbGFiZWwnLFxyXG4gICAgICAgIHRpdGxlOiAnQ2xvc2UnLFxyXG4gICAgICAgIGZvbnRTaXplOiAnMjBweCdcclxuICAgICAgfVxyXG4gICAgXVxyXG4gIH07XHJcbiAgaW1hZ2VfbGlzdF9wb3B1cCE6IEltYWdlW107XHJcbiAgcXVlc3Rpb25uYWlyZV9oZWFkaW5nID0gJyc7XHJcbiAgY3VzdG9tZXJfbGFiZWwgPSAnJztcclxuICBlZGl0UXVlc3Rpb25uYWlyZSA9IGZhbHNlO1xyXG4gIGF1ZGlvVmlkZW9GaWxlczogYW55ID0gW107XHJcbiAgZ3JvdXBlZFFucjogYW55ID0gW107XHJcbiAgZGF0YUdyaWRDb2x1bW5zOiBhbnkgPSB7fTtcclxuICBkYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0OiBhbnkgPSBbXTtcclxuICB1cGRhdGVkR3JpZEluZGV4OiBhbnkgPSB7fTtcclxuICBuZXdUaW1lRGF0ZUZvcm1hdCA9ICcnO1xyXG4gIHFuclN0YXR1cyA9ICcnO1xyXG4gIGNvbW1lbnRzOiBhbnkgPSB7fTtcclxuICB0ZGF5ID0gbmV3IERhdGUoKTtcclxuICBtaW5kYXkgPSBuZXcgRGF0ZSgxOTAwLCAwLCAxKTtcclxuICBkYXRhR3JpZExpc3RDb2x1bW5zOiBhbnkgPSB7fTtcclxuICBzaG93cW5yITogYm9vbGVhbjtcclxuICBpdGVtOiBhbnk7XHJcbiAgc2hvd0l0ZW0gPSBmYWxzZTtcclxuICB0b3RhbFByaWNlOiBhbnk7XHJcbiAgaXRlbUxlbmd0aDogYW55O1xyXG4gIGl0ZW1BcnJheTogYW55ID0gW107XHJcbiAgZGF0YUdyaWRMaXN0OiBhbnkgPSBbXTtcclxuICBpZDogbnVtYmVyID0gMDtcclxuICBwb3N0X0RhdGE6IGFueTtcclxuICBkZ0xpc3Q6IGFueTtcclxuICBzZXF1ZW5jZUlkOiBhbnk7XHJcbiAgZmluYWxPYmplY3RMaXN0OiBhbnkgPSBbXTtcclxuICBzaG93c2VydmljZSA9IGZhbHNlO1xyXG4gIHF1ZXNTdG9yZTogYW55O1xyXG4gIGFsbExpc3Q6IHN0cmluZyA9ICcnO1xyXG4gIHBvcFNlYXJjaGVzOiBhbnk7XHJcbiAgc2VydmljZVRvdGFsUHJpY2U6IG51bWJlciA9IDA7XHJcbiAgZWRpdGFibGVJdGVtOiBhbnk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGFjdGl2YXRlZF9yb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHdvcmRQcm9jZXNzb3I6IFdvcmRQcm9jZXNzb3IsXHJcbiAgICBwcml2YXRlIGxTdG9yYWdlU2VydmljZTogTG9jYWxTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgZGF0ZVByb2Nlc3NvcjogRGF0ZVRpbWVQcm9jZXNzb3IsXHJcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIGZpbGVTZXJ2aWNlOiBGaWxlU2VydmljZSxcclxuICAgIHByaXZhdGUgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgcXVlc3Rpb25haXJlU2VydmljZTogUXVlc3Rpb25haXJlU2VydmljZSxcclxuICAgIHByaXZhdGUgZXJyb3JTZXJ2aWNlOiBFcnJvck1lc3NhZ2luZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtb2RhbEdhbGxlcnlTZXJ2aWNlOiBNb2RhbEdhbGxlcnlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24pIHtcclxuICAgIHRoaXMuYWN0aXZhdGVkX3JvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShxcGFyYW1zID0+IHtcclxuICAgICAgdGhpcy5wYXJhbXMgPSBxcGFyYW1zO1xyXG4gICAgICBpZiAodGhpcy5wYXJhbXMudHlwZSkge1xyXG4gICAgICAgIHRoaXMuc291cmNlID0gdGhpcy5wYXJhbXMudHlwZTtcclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnNvdXJjZSlcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5wYXJhbXMucHJvdmlkZXJJZCkge1xyXG4gICAgICAgIHRoaXMuYWNjb3VudElkID0gdGhpcy5wYXJhbXMucHJvdmlkZXJJZDtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5wYXJhbXMudXVpZCkge1xyXG4gICAgICAgIHRoaXMudXVpZCA9IHRoaXMucGFyYW1zLnV1aWQ7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLnF1ZXN0aW9uYWlyZVNlcnZpY2UuZ2V0TWVzc2FnZSgpLnN1YnNjcmliZShtZXNzYWdlID0+IHtcclxuICAgICAgc3dpdGNoIChtZXNzYWdlLnR5cGUpIHtcclxuICAgICAgICBjYXNlICdxbnJWYWxpZGF0ZUVycm9yJzpcclxuICAgICAgICAgIHRoaXMuc2V0VmFsaWRhdGVFcnJvcihtZXNzYWdlLnZhbHVlKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcbiAgbmdPbkNoYW5nZXMoKSB7XHJcbiAgICBpZiAodGhpcy5xdWVzdGlvbkFuc3dlcnMgJiYgdGhpcy5xdWVzdGlvbkFuc3dlcnMuZmlsZXN0b1VwbG9hZCAmJiB0aGlzLnNvdXJjZSA9PT0gJ3Byb0xlYWQnKSB7XHJcbiAgICAgIHRoaXMuZmlsZXN0b1VwbG9hZCA9IHRoaXMucXVlc3Rpb25BbnN3ZXJzLmZpbGVzdG9VcGxvYWQ7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKFwiU2VydmljZSBEZXRhaWxzOlwiLCB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0KTtcclxuICAgIGNvbnNvbGUubG9nKFwiU2VydmljZSBEZXRhaWxzOlwiLCB0aGlzLnNlcnZpY2UpO1xyXG4gICAgaWYgKHRoaXMubFN0b3JhZ2VTZXJ2aWNlLmdldGl0ZW1mcm9tTG9jYWxTdG9yYWdlKCdpdGVtQXJyYXknKSkge1xyXG4gICAgICB0aGlzLml0ZW1BcnJheSA9IHRoaXMubFN0b3JhZ2VTZXJ2aWNlLmdldGl0ZW1mcm9tTG9jYWxTdG9yYWdlKCdpdGVtQXJyYXknKTtcclxuICAgICAgaWYgKHRoaXMuaXRlbUFycmF5KSB7XHJcbiAgICAgICAgdGhpcy5zaG93SXRlbSA9IHRydWU7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJ0aGlzLml0ZW1BcnJheVwiLCB0aGlzLml0ZW1BcnJheSlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY3VzdG9tZXJfbGFiZWwgPSB0aGlzLndvcmRQcm9jZXNzb3IuZ2V0VGVybWlub2xvZ3lUZXJtKCdjdXN0b21lcicpO1xyXG5cclxuICAgIGlmICh0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0KSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuc291cmNlKVxyXG4gICAgICBpZiAodGhpcy5zb3VyY2UgPT09ICdjdXN0b21lci1jcmVhdGUnIHx8IHRoaXMuc291cmNlID09PSAnb25ldGltZScpIHtcclxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbm5haXJlTGlzdC5sYWJlbHMgJiYgdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5sYWJlbHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmxhYmVsc1swXS5xdWVzdGlvbnM7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwUXVlc3Rpb25zQnlTZWN0aW9uKCk7XHJcbiAgICAgICAgICAvLyB0aGlzLmdldEFuc3dlcnModGhpcy5xdWVzdGlvbnMsICdnZXQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tZXJEZXRhaWxzICYmIHRoaXMuY3VzdG9tZXJEZXRhaWxzWzBdICYmIHRoaXMuY3VzdG9tZXJEZXRhaWxzWzBdLnF1ZXN0aW9ubmFpcmUgJiYgdGhpcy5jdXN0b21lckRldGFpbHNbMF0ucXVlc3Rpb25uYWlyZS5xdWVzdGlvbkFuc3dlcnMpIHtcclxuICAgICAgICAgIHRoaXMuZ2V0QW5zd2Vycyh0aGlzLmN1c3RvbWVyRGV0YWlsc1swXS5xdWVzdGlvbm5haXJlLnF1ZXN0aW9uQW5zd2VycywgJ2dldCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNvdXJjZSA9PT0gJ3FuckRldGFpbHMnKSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LnF1ZXN0aW9ucztcclxuICAgICAgICB0aGlzLmdyb3VwUXVlc3Rpb25zQnlTZWN0aW9uKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zb3VyY2UgPT09ICdzZXJ2aWNlT3B0aW9uQXBwdCcpIHtcclxuICAgICAgICB0aGlzLnNob3dzZXJ2aWNlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25uYWlyZUxpc3QubGFiZWxzO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNvdXJjZSA9PT0gJ3FucnBhcGVyJykge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbm5haXJlTGlzdFswXS5sYWJlbHM7XHJcbiAgICAgICAgdGhpcy5ncm91cFF1ZXN0aW9uc0J5U2VjdGlvbigpO1xyXG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLnV1aWQgJiYgdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5sYWJlbHMpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25uYWlyZUxpc3QubGFiZWxzO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNvdXJjZSA9PT0gJ3FuclZpZXcnICYmIHRoaXMucXVlc3Rpb25uYWlyZUxpc3QubGFiZWxzKSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmxhYmVscztcclxuICAgICAgICB0aGlzLmdyb3VwUXVlc3Rpb25zQnlTZWN0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5zb3VyY2UgPT09ICdjb25kdW1lck9yZGVyJyAmJiB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmxhYmVscykge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5sYWJlbHM7XHJcbiAgICAgICAgdGhpcy5ncm91cFF1ZXN0aW9uc0J5U2VjdGlvbigpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc291cmNlID09PSAnaXZyJyAmJiB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0ICYmIHRoaXMucXVlc3Rpb25uYWlyZUxpc3RbMF0ubGFiZWxzKSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0WzBdLmxhYmVscztcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlF1ZXN0aW9uczpcIiwgdGhpcy5xdWVzdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNvdXJjZSA9PT0gJ2N1c3RvbWVyLWRldGFpbHMnICYmIHRoaXMuY3VzdG9tZXJEZXRhaWxzWzBdICYmIHRoaXMuY3VzdG9tZXJEZXRhaWxzWzBdLnF1ZXN0aW9ubmFpcmUpIHtcclxuICAgICAgdGhpcy5xdWVzdGlvbm5haXJlTGlzdCA9IHRoaXMuY3VzdG9tZXJEZXRhaWxzWzBdLnF1ZXN0aW9ubmFpcmU7XHJcbiAgICAgIHRoaXMucXVlc3Rpb25zID0gdGhpcy5jdXN0b21lckRldGFpbHNbMF0ucXVlc3Rpb25uYWlyZS5xdWVzdGlvbkFuc3dlcnM7XHJcbiAgICAgIHRoaXMuZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKTtcclxuICAgICAgdGhpcy5nZXRBbnN3ZXJzKHRoaXMucXVlc3Rpb25zLCAnZ2V0Jyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5xdWVzdGlvbkFuc3dlcnMpIHtcclxuICAgICAgaWYgKHRoaXMucXVlc3Rpb25BbnN3ZXJzLmZpbGVzKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1lc3NhZ2UgPSB0aGlzLnF1ZXN0aW9uQW5zd2Vycy5maWxlcztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5xdWVzdGlvbkFuc3dlcnMuYXVkaW9WaWRlbykge1xyXG4gICAgICAgIHRoaXMuYXVkaW9WaWRlb0ZpbGVzID0gdGhpcy5xdWVzdGlvbkFuc3dlcnMuYXVkaW9WaWRlbztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5xdWVzdGlvbkFuc3dlcnMuZmlsZXN0b1VwbG9hZCkge1xyXG4gICAgICAgIHRoaXMuZmlsZXN0b1VwbG9hZCA9IHRoaXMucXVlc3Rpb25BbnN3ZXJzLmZpbGVzdG9VcGxvYWQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMucXVlc3Rpb25BbnN3ZXJzLmRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3QpIHtcclxuICAgICAgICB0aGlzLmRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3QgPSB0aGlzLnF1ZXN0aW9uQW5zd2Vycy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0O1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uQW5zd2Vycy5jb21tZW50cykge1xyXG4gICAgICAgIHRoaXMuY29tbWVudHMgPSB0aGlzLnF1ZXN0aW9uQW5zd2Vycy5jb21tZW50cztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5xdWVzdGlvbkFuc3dlcnMuYW5zd2Vycykge1xyXG4gICAgICAgIHRoaXMuZ2V0QW5zd2Vycyh0aGlzLnF1ZXN0aW9uQW5zd2Vycy5hbnN3ZXJzLmFuc3dlckxpbmUsICdpbml0Jyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuc291cmNlID09ICdpdnInKSB7XHJcbiAgICAgICAgdGhpcy5nZXRBbnN3ZXJzKHRoaXMucXVlc3Rpb25BbnN3ZXJzLCAnZ2V0Jyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRvbmF0aW9uRGV0YWlscyAmJiB0aGlzLmRvbmF0aW9uRGV0YWlscy5xdWVzdGlvbm5haXJlKSB7XHJcbiAgICAgIHRoaXMucXVlc3Rpb25uYWlyZUxpc3QgPSB0aGlzLmRvbmF0aW9uRGV0YWlscy5xdWVzdGlvbm5haXJlO1xyXG4gICAgICB0aGlzLnF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25uYWlyZUxpc3QucXVlc3Rpb25BbnN3ZXJzO1xyXG4gICAgICB0aGlzLmdyb3VwUXVlc3Rpb25zQnlTZWN0aW9uKCk7XHJcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9ucyAmJiB0aGlzLnF1ZXN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5nZXRBbnN3ZXJzKHRoaXMucXVlc3Rpb25zLCAnZ2V0Jyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy51dWlkKSB7XHJcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LnF1ZXN0aW9uQW5zd2Vycykge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5xdWVzdGlvbkFuc3dlcnM7XHJcbiAgICAgICAgdGhpcy5xbnJTdGF0dXMgPSAnc3VibWl0dGVkJztcclxuICAgICAgICB0aGlzLmdyb3VwUXVlc3Rpb25zQnlTZWN0aW9uKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5xdWVzdGlvbm5haXJlTGlzdC5sYWJlbHMpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25uYWlyZUxpc3QubGFiZWxzO1xyXG4gICAgICAgIHRoaXMucW5yU3RhdHVzID0gJ3JlbGVhc2VkJztcclxuICAgICAgICB0aGlzLmdyb3VwUXVlc3Rpb25zQnlTZWN0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5xdWVzdGlvbm5haXJlTGlzdFswXSAmJiB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0WzBdLmxhYmVscykge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbm5haXJlTGlzdFswXS5sYWJlbHM7XHJcbiAgICAgICAgdGhpcy5xbnJTdGF0dXMgPSAncmVsZWFzZWQnO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5xdWVzdGlvbnMgJiYgdGhpcy5xdWVzdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuZ2V0QW5zd2Vycyh0aGlzLnF1ZXN0aW9ucywgJ2dldCcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kaXNhYmxlRmllbGQoKVxyXG4gIH1cclxuXHJcbiAgLy9kaXNhYmxlIGZpZWxkXHJcbiAgZGlzYWJsZUZpZWxkKCkge1xyXG4gICAgaWYgKHRoaXMudGVtcFR5cGUgJiYgKHRoaXMudGVtcFR5cGUgPT09ICdMb2FuIFNhbmN0aW9uJyB8fCB0aGlzLnRlbXBUeXBlID09PSAnUmVqZWN0ZWQnKSkge1xyXG4gICAgICB0aGlzLmJ1dHRvbkRpc2FibGUgPSB0cnVlO1xyXG4gICAgICAvLyB0aGlzLmRpc2FibGVJbnB1dCgpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyAqLmNvbXBvbmVudC50c1xyXG4gIGFzSXNPcmRlcihhOiBhbnksIGI6IGFueSkge1xyXG4gICAgcmV0dXJuIDE7XHJcbiAgfVxyXG4gIGdyb3VwUXVlc3Rpb25zQnlTZWN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuc291cmNlID09PSAnY3VzdG9tZXItY3JlYXRlJyB8fCB0aGlzLnNvdXJjZSA9PT0gJ3FuckRldGFpbHMnIHx8IHRoaXMuc291cmNlID09PSAnb25ldGltZScpIHtcclxuICAgICAgdGhpcy5ncm91cGVkUW5yID0gdGhpcy5jb21tb25TZXJ2aWNlLmdyb3VwQnkodGhpcy5xdWVzdGlvbnMsICdzZWN0aW9uTmFtZScpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5zb3VyY2UgPT09ICdwcm9MZWFkJykge1xyXG4gICAgICB0aGlzLmdyb3VwZWRRbnIgPSB0aGlzLnF1ZXN0aW9ucy5yZWR1Y2UoZnVuY3Rpb24gKHJ2OiBhbnksIHg6IGFueSkge1xyXG4gICAgICAgIChydlt4LnF1ZXN0aW9uWydzZXF1bmNlSWQnXV0gPSBydlt4LnF1ZXN0aW9uWydzZXF1bmNlSWQnXV0gfHwgW10pLnB1c2goeCk7XHJcbiAgICAgICAgcmV0dXJuIHJ2O1xyXG4gICAgICB9LCB7fSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5ncm91cGVkUW5yID0gdGhpcy5xdWVzdGlvbnMucmVkdWNlKGZ1bmN0aW9uIChydjogYW55LCB4OiBhbnkpIHtcclxuICAgICAgICAocnZbeC5xdWVzdGlvblsnc2VjdGlvbk9yZGVyJ11dID0gcnZbeC5xdWVzdGlvblsnc2VjdGlvbk9yZGVyJ11dIHx8IFtdKS5wdXNoKHgpO1xyXG4gICAgICAgIHJldHVybiBydjtcclxuICAgICAgfSwge30pO1xyXG4gICAgfVxyXG4gIH1cclxuICBzZXRWYWxpZGF0ZUVycm9yKGVycm9yczogYW55KSB7XHJcbiAgICB0aGlzLmFwaUVycm9yID0gW107XHJcbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICAgICAgZm9yIChsZXQgZXJyb3Igb2YgZXJyb3JzKSB7XHJcbiAgICAgICAgdGhpcy5hcGlFcnJvcltlcnJvci5xdWVzdGlvbkZpZWxkXSA9IFtdO1xyXG4gICAgICAgIHRoaXMuYXBpRXJyb3JbZXJyb3IucXVlc3Rpb25GaWVsZF0ucHVzaChlcnJvci5lcnJvcik7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5idXR0b25EaXNhYmxlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldEFuc3dlcnMoYW5zd2VyRGF0YTogYW55LCB0eXBlPzogYW55KSB7XHJcbiAgICB0aGlzLmFuc3dlcnMgPSBuZXcgT2JqZWN0KCk7XHJcbiAgICB0aGlzLmRhdGFHcmlkQ29sdW1ucyA9IHt9O1xyXG4gICAgaWYgKHR5cGUgPT09ICdnZXQnKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRNZXNzYWdlID0gW107XHJcbiAgICAgIHRoaXMudXBsb2FkZWRJbWFnZXMgPSBbXTtcclxuICAgICAgdGhpcy51cGxvYWRlZEZpbGVzID0gW107XHJcbiAgICAgIGZvciAobGV0IGFuc3cgb2YgYW5zd2VyRGF0YSkge1xyXG5cclxuICAgICAgICBpZiAoYW5zdy5hbnN3ZXJMaW5lKSB7XHJcbiAgICAgICAgICBpZiAoYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlID09PSAnZmlsZVVwbG9hZCcpIHtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZSA9PT0gJ3Byb0xlYWQnKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXSAmJiBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV0ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLmFjdGlvbiA9ICdhZGQnO1xyXG4gICAgICAgICAgICAgICAgICBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0uc3RhdHVzID0gJ0NPTVBMRVRFJztcclxuICAgICAgICAgICAgICAgICAgYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLnMzcGF0aCA9IGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS5zM3BhdGg7XHJcbiAgICAgICAgICAgICAgICAgIGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS51aWQgPSBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0udWlkO1xyXG4gICAgICAgICAgICAgICAgICBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0uZHJpdmVJZCA9IGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS5kcml2ZUlkO1xyXG4gICAgICAgICAgICAgICAgICBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0udXJsID0gYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLmtleU5hbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuc3dlcnNbYW5zdy5hbnN3ZXJMaW5lLmxhYmVsTmFtZV0gPSBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoYW5zdy5hbnN3ZXJMaW5lLmFuc3dlciAmJiBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV0gJiYgYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdnZXQnKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkZWRJbWFnZXMucHVzaChhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0pO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoIXRoaXMudXBsb2FkZWRGaWxlc1thbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlc1thbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmICghdGhpcy51cGxvYWRlZEZpbGVzW2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWVdW2Fuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS5jYXB0aW9uXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlc1thbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXVthbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0uY2FwdGlvbl0gPSB7fTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbW1lbnRzW2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWUgKyAnPScgKyBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0uY2FwdGlvbl0gPSBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0uY29tbWVudHM7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlc1thbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXVthbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0uY2FwdGlvbl0gPSBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV07XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZXNzYWdlLnB1c2goYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZpbGVzdG9VcGxvYWRbYW5zdy5hbnN3ZXJMaW5lLmxhYmVsTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVzdG9VcGxvYWRbYW5zdy5hbnN3ZXJMaW5lLmxhYmVsTmFtZV0gPSB7fTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZmlsZXN0b1VwbG9hZFthbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXVthbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0uY2FwdGlvbl0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVzdG9VcGxvYWRbYW5zdy5hbnN3ZXJMaW5lLmxhYmVsTmFtZV1bYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLmNhcHRpb25dID0ge307XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5maWxlc3RvVXBsb2FkW2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWVdW2Fuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS5jYXB0aW9uXSA9IGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXTtcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGFuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZSA9PT0gJ2RhdGFHcmlkJykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCByb3cgb2YgYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGNvbHVtbnMgPSBbXTtcclxuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvdy5kYXRhR3JpZENvbHVtbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29sdW1uc1tpICsgMV0gPSByb3cuZGF0YUdyaWRDb2x1bW5baV0uY29sdW1uW09iamVjdC5rZXlzKHJvdy5kYXRhR3JpZENvbHVtbltpXS5jb2x1bW4pWzBdXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3RbYW5zdy5hbnN3ZXJMaW5lLmxhYmVsTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdFthbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXSA9IFtdO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLmRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3RbYW5zdy5hbnN3ZXJMaW5lLmxhYmVsTmFtZV0ucHVzaChjb2x1bW5zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5hbnN3ZXJzW2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWVdID0gYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZm9yIChsZXQgYW5zdyBvZiBhbnN3ZXJEYXRhKSB7XHJcbiAgICAgICAgaWYgKGFuc3cuYW5zd2VyW09iamVjdC5rZXlzKGFuc3cuYW5zd2VyKVswXV0pIHtcclxuICAgICAgICAgIHRoaXMuYW5zd2Vyc1thbnN3LmxhYmVsTmFtZV0gPSBhbnN3LmFuc3dlcltPYmplY3Qua2V5cyhhbnN3LmFuc3dlcilbMF1dO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHR5cGUgPT09ICdnZXQnKSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMudXBsb2FkZWRGaWxlcykuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgIHRoaXMudXBsb2FkRmlsZXNUZW1wW2tleV0gPSBbXTtcclxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnVwbG9hZGVkRmlsZXNba2V5XSkuZm9yRWFjaChrZXkxID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLnVwbG9hZGVkRmlsZXNba2V5XVtrZXkxXSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMudXBsb2FkRmlsZXNUZW1wW2tleV0pIHtcclxuICAgICAgICAgICAgICB0aGlzLnVwbG9hZEZpbGVzVGVtcFtrZXldID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgdHlwZSA9IHRoaXMudXBsb2FkZWRGaWxlc1trZXldW2tleTFdLnR5cGUuc3BsaXQoJy8nKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlWzBdICE9PSAnYXVkaW8nICYmIHR5cGVbMF0gIT09ICd2aWRlbycgfHwgKCh0eXBlWzBdID09PSAnYXVkaW8nIHx8IHR5cGVbMF0gPT09ICd2aWRlbycpICYmIHRoaXMudXBsb2FkZWRGaWxlc1trZXldW2tleTFdLnN0YXR1cyA9PT0gJ0NPTVBMRVRFJykpIHtcclxuICAgICAgICAgICAgICB0aGlzLnVwbG9hZEZpbGVzVGVtcFtrZXldLnB1c2goa2V5MSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmZpbGVzdG9VcGxvYWQpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmZpbGVzdG9VcGxvYWRba2V5XSkuZm9yRWFjaChrZXkxID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMudXBsb2FkRmlsZXNUZW1wW2tleV0pIHtcclxuICAgICAgICAgICAgICB0aGlzLnVwbG9hZEZpbGVzVGVtcFtrZXldID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlc1RlbXBba2V5XS5wdXNoKGtleTEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMub25TdWJtaXQoJ2luaXQnKTtcclxuICB9XHJcbiAgZmlsZXNTZWxlY3RlZChldmVudDogYW55LCBxdWVzdGlvbjogYW55LCBkb2N1bWVudDogYW55KSB7XHJcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldC5maWxlcztcclxuICAgIGlmIChpbnB1dCkge1xyXG4gICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgaW5wdXQpIHtcclxuICAgICAgICBjb25zdCBmaWxlSW5wdXQgPSB7XHJcbiAgICAgICAgICBjYXB0aW9uOiBkb2N1bWVudCxcclxuICAgICAgICAgIGZpbGU6IGZpbGUsXHJcbiAgICAgICAgICBsYWJlbE5hbWU6IHF1ZXN0aW9uLmxhYmVsTmFtZVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZpbGVDaGFuZ2VkLmVtaXQoZmlsZUlucHV0KTtcclxuICAgICAgICBsZXQgdHlwZSA9IGZpbGUudHlwZS5zcGxpdCgnLycpO1xyXG5cclxuICAgICAgICB0aGlzLmFwaUVycm9yW3F1ZXN0aW9uLmxhYmVsTmFtZV0gPSBbXTtcclxuICAgICAgICBpZiAoIXRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSkge1xyXG4gICAgICAgICAgdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXSAmJiB0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pIHtcclxuICAgICAgICAgIGxldCBpbmRleDtcclxuICAgICAgICAgIGlmICh0eXBlWzBdID09PSAnYXBwbGljYXRpb24nIHx8IHR5cGVbMF0gPT09ICdpbWFnZScpIHtcclxuICAgICAgICAgICAgaW5kZXggPSB0aGlzLnNlbGVjdGVkTWVzc2FnZS5pbmRleE9mKHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpbmRleCA9IHRoaXMuYXVkaW9WaWRlb0ZpbGVzLmluZGV4T2YodGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVbMF0gPT09ICdhcHBsaWNhdGlvbicgfHwgdHlwZVswXSA9PT0gJ2ltYWdlJykge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZXNzYWdlLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hdWRpb1ZpZGVvRmlsZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdO1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV1baW5kZXhdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0gPSBmaWxlO1xyXG4gICAgICAgIGlmICh0eXBlWzBdID09PSAnYXBwbGljYXRpb24nIHx8IHR5cGVbMF0gPT09ICdpbWFnZScpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZXNzYWdlLnB1c2goZmlsZSk7XHJcbiAgICAgICAgICBjb25zdCBpbmR4ID0gdGhpcy5zZWxlY3RlZE1lc3NhZ2UuaW5kZXhPZihmaWxlKTtcclxuICAgICAgICAgIGlmIChpbmR4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZXNzYWdlW2luZHhdWydwYXRoJ10gPSBlLnRhcmdldFsncmVzdWx0J107XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmF1ZGlvVmlkZW9GaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgY29uc3QgaW5keCA9IHRoaXMuYXVkaW9WaWRlb0ZpbGVzLmluZGV4T2YoZmlsZSk7XHJcbiAgICAgICAgICBpZiAoaW5keCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmF1ZGlvVmlkZW9GaWxlc1tpbmR4XVsncGF0aCddID0gZS50YXJnZXRbJ3Jlc3VsdCddO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZmlsZTIgJiYgdGhpcy5maWxlMi5uYXRpdmVFbGVtZW50LnZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5maWxlMi5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5vblN1Ym1pdCgnaW5wdXRDaGFuZ2UnKTtcclxuICAgIH1cclxuICB9XHJcbiAgY2hhbmdlSW1hZ2VTZWxlY3RlZChxdWVzdGlvbjogYW55LCBkb2N1bWVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV0gJiYgdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKSB7XHJcbiAgICAgIGxldCB0eXBlID0gdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdLnR5cGUuc3BsaXQoJy8nKTtcclxuICAgICAgdHlwZSA9IHR5cGVbMF07XHJcbiAgICAgIGxldCBpbmRleDtcclxuICAgICAgaWYgKHR5cGUgPT09ICdhcHBsaWNhdGlvbicgfHwgdHlwZSA9PT0gJ2ltYWdlJykge1xyXG4gICAgICAgIGluZGV4ID0gdGhpcy5zZWxlY3RlZE1lc3NhZ2UuaW5kZXhPZih0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGluZGV4ID0gdGhpcy5hdWRpb1ZpZGVvRmlsZXMuaW5kZXhPZih0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICBpZiAodHlwZSA9PT0gJ2FwcGxpY2F0aW9uJyB8fCB0eXBlID09PSAnaW1hZ2UnKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVzc2FnZS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmF1ZGlvVmlkZW9GaWxlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZWxldGUgdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdO1xyXG4gICAgICAgIHRoaXMuY29tbWVudHNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgZG9jdW1lbnRdID0gJyc7XHJcbiAgICAgICAgaWYgKHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdICYmIHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkQW5zd2VyID0gdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0uZmlsdGVyKChhbnN3ZXI6IGFueSkgPT4gYW5zd2VyLmNhcHRpb24gPT09IGRvY3VtZW50KTtcclxuICAgICAgICAgIGlmIChmaWx0ZXJlZEFuc3dlclswXSkge1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdLmluZGV4T2YoZmlsdGVyZWRBbnN3ZXJbMF0pO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0uc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV0pLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0gJiYgdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMudXBsb2FkZWRGaWxlc1txdWVzdGlvbi5sYWJlbE5hbWVdICYmIHRoaXMudXBsb2FkZWRGaWxlc1txdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSkge1xyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMudXBsb2FkZWRJbWFnZXMuaW5kZXhPZih0aGlzLnVwbG9hZGVkRmlsZXNbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pO1xyXG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVzW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdID0gJ3JlbW92ZSc7XHJcbiAgICAgICAgdGhpcy5jb21tZW50c1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBkb2N1bWVudF0gPSAnJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5vblN1Ym1pdCgnaW5wdXRDaGFuZ2UnKTtcclxuICB9XHJcbiAgaXNOdW1lcmljKGV2dDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21tb25TZXJ2aWNlLmlzTnVtZXJpYyhldnQpO1xyXG4gIH1cclxuICBvblN1Ym1pdChrZXl0eXBlPzogYW55KSB7XHJcblxyXG4gICAgT2JqZWN0LmtleXModGhpcy5maWxlc3RvVXBsb2FkKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5hbnN3ZXJzW2tleV0pIHtcclxuICAgICAgICB0aGlzLmFuc3dlcnNba2V5XSA9IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmZpbGVzdG9VcGxvYWRba2V5XSkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldKS5mb3JFYWNoKGtleTEgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdKSB7XHJcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy5maWxlc3RvVXBsb2FkW2tleV1ba2V5MV0udHlwZS5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICB0eXBlID0gdHlwZVswXTtcclxuICAgICAgICAgICAgbGV0IGluZHg7XHJcbiAgICAgICAgICAgIGlmICh0eXBlID09PSAnYXBwbGljYXRpb24nIHx8IHR5cGUgPT09ICdpbWFnZScpIHtcclxuICAgICAgICAgICAgICBpbmR4ID0gdGhpcy5zZWxlY3RlZE1lc3NhZ2UuaW5kZXhPZih0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaW5keCA9IHRoaXMuYXVkaW9WaWRlb0ZpbGVzLmluZGV4T2YodGhpcy5maWxlc3RvVXBsb2FkW2tleV1ba2V5MV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpbmR4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgIGxldCBzdGF0dXMgPSAnYWRkJztcclxuICAgICAgICAgICAgICBpZiAodGhpcy51cGxvYWRlZEZpbGVzW2tleV0gJiYgdGhpcy51cGxvYWRlZEZpbGVzW2tleV1ba2V5MV0pIHtcclxuICAgICAgICAgICAgICAgIHN0YXR1cyA9ICd1cGRhdGUnO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAodGhpcy5hbnN3ZXJzW2tleV0gJiYgdGhpcy5hbnN3ZXJzW2tleV0ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRBbnN3ZXIgPSB0aGlzLmFuc3dlcnNba2V5XS5maWx0ZXIoKGFuc3dlcjogYW55KSA9PiBhbnN3ZXIuY2FwdGlvbiA9PT0ga2V5MSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRBbnN3ZXJbMF0pIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmFuc3dlcnNba2V5XS5pbmRleE9mKGZpbHRlcmVkQW5zd2VyWzBdKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYW5zd2Vyc1trZXldLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbGV0IHR5cGUgPSB0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXS50eXBlLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgICAgdHlwZSA9IHR5cGVbMF07XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdhcHBsaWNhdGlvbicgfHwgdHlwZSA9PT0gJ2ltYWdlJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbnN3ZXJzW2tleV0ucHVzaCh7IGNhcHRpb246IGtleTEsIGFjdGlvbjogc3RhdHVzLCBtaW1lVHlwZTogdGhpcy5maWxlc3RvVXBsb2FkW2tleV1ba2V5MV0udHlwZSwgdXJsOiB0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXS5uYW1lLCBzaXplOiB0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXS5zaXplLCBjb21tZW50czogdGhpcy5jb21tZW50c1trZXkgKyAnPScgKyBrZXkxXSwgZHJpdmVJZDogdGhpcy5maWxlc3RvVXBsb2FkW2tleV1ba2V5MV0uZHJpdmVJZCwgdWlkOiB0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXS51aWQsIHN0YXR1czogJ0NPTVBMRVRFJyB9KTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbnN3ZXJzW2tleV0ucHVzaCh7IGNhcHRpb246IGtleTEsIGFjdGlvbjogc3RhdHVzLCBtaW1lVHlwZTogdGhpcy5maWxlc3RvVXBsb2FkW2tleV1ba2V5MV0udHlwZSwgdXJsOiB0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXS5uYW1lLCBzaXplOiB0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXS5zaXplLCBjb21tZW50czogdGhpcy5jb21tZW50c1trZXkgKyAnPScgKyBrZXkxXSwgZHJpdmVJZDogdGhpcy5maWxlc3RvVXBsb2FkW2tleV1ba2V5MV0uZHJpdmVJZCwgdWlkOiB0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXS51aWQsIHN0YXR1czogJ0NPTVBMRVRFJyB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFuc3dlcnNba2V5XSAmJiB0aGlzLmFuc3dlcnNba2V5XS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRBbnN3ZXIgPSB0aGlzLmFuc3dlcnNba2V5XS5maWx0ZXIoKGFuc3dlcjogYW55KSA9PiBhbnN3ZXIuY2FwdGlvbiA9PT0ga2V5MSk7XHJcbiAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkQW5zd2VyWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuYW5zd2Vyc1trZXldLmluZGV4T2YoZmlsdGVyZWRBbnN3ZXJbMF0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmFuc3dlcnNba2V5XS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmFuc3dlcnNba2V5XTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5hbnN3ZXJzW2tleV0gJiYgdGhpcy5hbnN3ZXJzW2tleV0ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuYW5zd2Vyc1trZXldO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLnVwbG9hZGVkRmlsZXMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmFuc3dlcnNba2V5XSkge1xyXG4gICAgICAgIHRoaXMuYW5zd2Vyc1trZXldID0gW107XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMudXBsb2FkZWRGaWxlc1trZXldICYmIE9iamVjdC5rZXlzKHRoaXMudXBsb2FkZWRGaWxlc1trZXldKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy51cGxvYWRlZEZpbGVzW2tleV0pLmZvckVhY2goa2V5MSA9PiB7XHJcbiAgICAgICAgICBpZiAoKCF0aGlzLmZpbGVzdG9VcGxvYWRba2V5XSB8fCAodGhpcy5maWxlc3RvVXBsb2FkW2tleV0gJiYgIXRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdKSkgJiYgdGhpcy51cGxvYWRlZEZpbGVzW2tleV1ba2V5MV0gJiYgdGhpcy51cGxvYWRlZEZpbGVzW2tleV1ba2V5MV0gPT09ICdyZW1vdmUnKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFuc3dlcnNba2V5XSAmJiB0aGlzLmFuc3dlcnNba2V5XS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRBbnN3ZXIgPSB0aGlzLmFuc3dlcnNba2V5XS5maWx0ZXIoKGFuc3dlcjogYW55KSA9PiBhbnN3ZXIuY2FwdGlvbiA9PT0ga2V5MSk7XHJcbiAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkQW5zd2VyWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuYW5zd2Vyc1trZXldLmluZGV4T2YoZmlsdGVyZWRBbnN3ZXJbMF0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmFuc3dlcnNba2V5XS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmFuc3dlcnNba2V5XS5wdXNoKHsgY2FwdGlvbjoga2V5MSwgYWN0aW9uOiAncmVtb3ZlJyB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAodGhpcy5hbnN3ZXJzW2tleV0ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICBkZWxldGUgdGhpcy5hbnN3ZXJzW2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgZGF0YTogYW55ID0gW107XHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLmRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3QpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgbGV0IG5ld0ZpbGVkOiBhbnkgPSB7fTtcclxuICAgICAgbGV0IHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbnMuZmlsdGVyKChxdWVzdDogYW55KSA9PiB0aGlzLmdldFF1ZXN0aW9uKHF1ZXN0KS5sYWJlbE5hbWUgPT09IGtleSk7XHJcbiAgICAgIHF1ZXN0aW9uID0gcXVlc3Rpb25bMF0ucXVlc3Rpb247XHJcbiAgICAgIGZvciAobGV0IGdyaWRBbnN3ZXIgb2YgdGhpcy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0W2tleV0pIHtcclxuICAgICAgICBsZXQgY29sdW1uRGF0YTogYW55ID0gW107XHJcbiAgICAgICAgT2JqZWN0LmtleXMoZ3JpZEFuc3dlcikuZm9yRWFjaChrZXkxID0+IHtcclxuICAgICAgICAgIGxldCBuZXdUeXBlOiBhbnkgPSB7fTtcclxuICAgICAgICAgIGNvbnN0IGNvbHVtbkRldGFpbHMgPSBxdWVzdGlvbi5kYXRhR3JpZFByb3BlcnRpZXMuZGF0YUdyaWRDb2x1bW5zLmZpbHRlcigoY2xtbjogYW55KSA9PiBjbG1uLm9yZGVyID09PSBKU09OLnBhcnNlKGtleTEpKTtcclxuICAgICAgICAgIGlmIChjb2x1bW5EZXRhaWxzWzBdKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtblR5cGUgPSBjb2x1bW5EZXRhaWxzWzBdLmRhdGFUeXBlO1xyXG4gICAgICAgICAgICBuZXdUeXBlW2NvbHVtblR5cGVdID0gZ3JpZEFuc3dlcltrZXkxXTtcclxuICAgICAgICAgICAgY29sdW1uRGF0YS5wdXNoKHtcclxuICAgICAgICAgICAgICBjb2x1bW5JZDogY29sdW1uRGV0YWlsc1swXS5jb2x1bW5JZCxcclxuICAgICAgICAgICAgICBjb2x1bW46IG5ld1R5cGVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbGV0IG5ld01hcDogYW55ID0ge307XHJcbiAgICAgICAgbmV3TWFwWydkYXRhR3JpZENvbHVtbiddID0gY29sdW1uRGF0YTtcclxuICAgICAgICBpZiAoIW5ld0ZpbGVkW3F1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdKSB7XHJcbiAgICAgICAgICBuZXdGaWxlZFtxdWVzdGlvbi5maWVsZERhdGFUeXBlXSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBuZXdGaWxlZFtxdWVzdGlvbi5maWVsZERhdGFUeXBlXS5wdXNoKG5ld01hcCk7XHJcbiAgICAgIH1cclxuICAgICAgZGF0YS5wdXNoKHtcclxuICAgICAgICAnbGFiZWxOYW1lJzoga2V5LFxyXG4gICAgICAgICdhbnN3ZXInOiBuZXdGaWxlZFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIE9iamVjdC5rZXlzKHRoaXMuYW5zd2VycykuZm9yRWFjaChrZXkgPT4ge1xyXG5cclxuICAgICAgdGhpcy5hcGlFcnJvcltrZXldID0gW107XHJcbiAgICAgIGxldCBuZXdNYXA6IGFueSA9IHt9O1xyXG4gICAgICBsZXQgcXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9ucy5maWx0ZXIoKHF1ZXN0OiBhbnkpID0+IHRoaXMuZ2V0UXVlc3Rpb24ocXVlc3QpLmxhYmVsTmFtZSA9PT0ga2V5KTtcclxuICAgICAgaWYgKHRoaXMuc291cmNlID09PSAnY3VzdG9tZXItY3JlYXRlJyB8fCB0aGlzLnNvdXJjZSA9PT0gJ3FuckRldGFpbHMnIHx8IHRoaXMuc291cmNlID09PSAnb25ldGltZScpIHtcclxuICAgICAgICBxdWVzdGlvbiA9IHF1ZXN0aW9uWzBdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHF1ZXN0aW9uID0gcXVlc3Rpb25bMF0ucXVlc3Rpb247XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuYW5zd2Vyc1trZXldIHx8IHF1ZXN0aW9uLmZpZWxkRGF0YVR5cGUgPT09ICdib29sJykge1xyXG4gICAgICAgIGxldCBhbnN3ZXIgPSB0aGlzLmFuc3dlcnNba2V5XTtcclxuICAgICAgICBpZiAocXVlc3Rpb24uZmllbGREYXRhVHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgICAgICBhbnN3ZXIgPSB0aGlzLmRhdGVQcm9jZXNzb3IudHJhbnNmb3JtVG9ZTURGb3JtYXQoYW5zd2VyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbmV3TWFwW3F1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdID0gYW5zd2VyO1xyXG4gICAgICAgIGRhdGEucHVzaCh7XHJcbiAgICAgICAgICAnbGFiZWxOYW1lJzoga2V5LFxyXG4gICAgICAgICAgJ2Fuc3dlcic6IG5ld01hcFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIG5ld01hcCA9ICcnO1xyXG4gICAgICAgIC8vIGRhdGEucHVzaCh7XHJcbiAgICAgICAgLy8gJ2xhYmVsTmFtZSc6IGtleSxcclxuICAgICAgICAvLyB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBsZXQgcG9zdERhdGE7XHJcbiAgICBpZiAodGhpcy5zb3VyY2UgPT09ICdxbnJwYXBlcicpIHtcclxuICAgICAgcG9zdERhdGEgPSB7XHJcbiAgICAgICAgJ3F1ZXN0aW9ubmFpcmVJZCc6ICh0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0WzBdLmlkKSA/IHRoaXMucXVlc3Rpb25uYWlyZUxpc3RbMF0uaWQgOiB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0WzBdLnF1ZXN0aW9ubmFpcmVJZCxcclxuICAgICAgICAnYW5zd2VyTGluZSc6IGRhdGFcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoa2V5dHlwZSA9PT0gJ3NlcnZpY2VPcHRpb24nKSB7XHJcbiAgICAgIHBvc3REYXRhID0ge1xyXG4gICAgICAgICdxdWVzdGlvbm5haXJlSWQnOiAodGhpcy5xdWVzdGlvbm5haXJlTGlzdC5pZCkgPyB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmlkIDogdGhpcy5xdWVzdGlvbm5haXJlTGlzdFswXS5xdWVzdGlvbm5haXJlSWQsXHJcbiAgICAgICAgJ2Fuc3dlckxpbmUnOiB0aGlzLmZpbmFsT2JqZWN0TGlzdFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLnNvdXJjZSA9PT0gJ2l2cicgJiYgdGhpcy5wYXJhbXMuY3VzdG9tSWQpIHtcclxuICAgICAgY29uc29sZS5sb2coJ2ZmZmZmZmZmZmZmZmZmZmZmZmZmZicsIHRoaXMucXVlc3Rpb25uYWlyZUxpc3QpXHJcbiAgICAgIHBvc3REYXRhID0ge1xyXG4gICAgICAgICdxdWVzdGlvbm5haXJlSWQnOiAodGhpcy5xdWVzdGlvbm5haXJlTGlzdFswXS5pZCkgPyB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0WzBdLmlkIDogdGhpcy5xdWVzdGlvbm5haXJlTGlzdFswXS5xdWVzdGlvbm5haXJlSWQsXHJcbiAgICAgICAgJ2Fuc3dlckxpbmUnOiBkYXRhXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZygncXVlc3Rpb25uYWlyZUxpc3QnLCB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0KVxyXG4gICAgICBwb3N0RGF0YSA9IHtcclxuICAgICAgICAncXVlc3Rpb25uYWlyZUlkJzogKHRoaXMucXVlc3Rpb25uYWlyZUxpc3QuaWQpID8gdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5pZCA6IHRoaXMucXVlc3Rpb25uYWlyZUxpc3QucXVlc3Rpb25uYWlyZUlkLFxyXG4gICAgICAgICdhbnN3ZXJMaW5lJzogZGF0YVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBwYXNzRGF0YSA9IHsgJ2Fuc3dlcnMnOiBwb3N0RGF0YSwgJ2ZpbGVzJzogdGhpcy5zZWxlY3RlZE1lc3NhZ2UsICdhdWRpb1ZpZGVvJzogdGhpcy5hdWRpb1ZpZGVvRmlsZXMsICdmaWxlc3RvVXBsb2FkJzogdGhpcy5maWxlc3RvVXBsb2FkLCAnZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdCc6IHRoaXMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdCwgJ2NvbW1lbnRzJzogdGhpcy5jb21tZW50cyB9O1xyXG4gICAgaWYgKGtleXR5cGUgPT09ICdpbnB1dENoYW5nZScpIHtcclxuICAgICAgdGhpcy5jaGFuZ2VIYXBwZW5lZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoa2V5dHlwZSA9PT0gJ3N1Ym1pdCcpIHtcclxuICAgICAgaWYgKHRoaXMuY2hhbmdlSGFwcGVuZWQpIHtcclxuICAgICAgICB0aGlzLnN1Ym1pdFF1ZXN0aW9ubmFpcmUocGFzc0RhdGEpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICghdGhpcy50eXBlKSB7XHJcbiAgICAgICAgICB0aGlzLmxvY2F0aW9uLmJhY2soKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ3Fuci1saW5rJykge1xyXG4gICAgICAgICAgICB0aGlzLnJldHVybkFuc3dlcnMuZW1pdCgnbm9jaGFuZ2UnKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWRpdFFucigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIHRoaXMucmV0dXJuQW5zd2Vycy5lbWl0KHBhc3NEYXRhKTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0RGF0ZShkYXRlOiBhbnkpIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlKTtcclxuICB9XHJcbiAgbGlzdENoYW5nZShldjogYW55LCB2YWx1ZTogYW55LCBxdWVzdGlvbjogYW55LCBjb2x1bW4/OiBhbnkpIHtcclxuICAgIGlmIChxdWVzdGlvbi5maWVsZERhdGFUeXBlICE9PSAnZGF0YUdyaWQnKSB7XHJcbiAgICAgIGlmIChldi50YXJnZXQuY2hlY2tlZCkge1xyXG4gICAgICAgIGlmICghdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0pIHtcclxuICAgICAgICAgIHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChxdWVzdGlvbi5saXN0UHJvcGVydGllICYmIHF1ZXN0aW9uLmxpc3RQcm9wZXJ0aWUubWF4QW5zd2VycyAmJiBxdWVzdGlvbi5saXN0UHJvcGVydGllLm1heEFuc3dlcnMgPiAxKSB7XHJcbiAgICAgICAgICB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXS5wdXNoKHZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV1bMF0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgaW5keCA9IHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdLmluZGV4T2YodmFsdWUpO1xyXG4gICAgICAgIHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdLnNwbGljZShpbmR4LCAxKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0gPSAnJztcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGV2LnRhcmdldC5jaGVja2VkKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRhdGFHcmlkQ29sdW1uc1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdKSB7XHJcbiAgICAgICAgICB0aGlzLmRhdGFHcmlkQ29sdW1uc1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl0ucHVzaCh2YWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgaW5keCA9IHRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl0uaW5kZXhPZih2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXS5zcGxpY2UoaW5keCwgMSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMub25TdWJtaXQoJ2lucHV0Q2hhbmdlJyk7XHJcbiAgfVxyXG4gIGlzQ2hlY2tlZCh2YWx1ZTogYW55LCBxdWVzdGlvbjogYW55LCBjb2x1bW4/OiBhbnkpIHtcclxuICAgIGlmIChxdWVzdGlvbi5maWVsZERhdGFUeXBlICE9PSAnZGF0YUdyaWQnKSB7XHJcbiAgICAgIGlmICh0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXSkge1xyXG4gICAgICAgIGNvbnN0IGluZHggPSB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXS5pbmRleE9mKHZhbHVlKTtcclxuICAgICAgICBpZiAoaW5keCAhPT0gLTEpIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl0pIHtcclxuICAgICAgICBjb25zdCBpbmR4ID0gdGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXS5pbmRleE9mKHZhbHVlKTtcclxuICAgICAgICBpZiAoaW5keCAhPT0gLTEpIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBib29sZWFuQ2hhbmdlKGV2OiBhbnksIHZhbHVlOiBhbnksIHF1ZXN0aW9uOiBhbnksIGNvbHVtbj86IGFueSkge1xyXG4gICAgaWYgKHF1ZXN0aW9uLmZpZWxkRGF0YVR5cGUgIT09ICdkYXRhR3JpZCcpIHtcclxuICAgICAgaWYgKGV2LnRhcmdldC5jaGVja2VkKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXSkge1xyXG4gICAgICAgICAgdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0gPSAodmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gJ3llcycpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoZXYudGFyZ2V0LmNoZWNrZWQpIHtcclxuICAgICAgICB0aGlzLmRhdGFHcmlkQ29sdW1uc1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdID0gKHZhbHVlID09PSAneWVzJykgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMub25TdWJtaXQoJ2lucHV0Q2hhbmdlJyk7XHJcbiAgfVxyXG4gIGlzQm9vbGVhbkNoZWNrZWQodmFsdWU6IGFueSwgcXVlc3Rpb246IGFueSwgY29sdW1uPzogYW55KSB7XHJcbiAgICB2YWx1ZSA9ICh2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSAneWVzJykgPyB0cnVlIDogZmFsc2U7XHJcbiAgICBpZiAocXVlc3Rpb24uZmllbGREYXRhVHlwZSAhPT0gJ2RhdGFHcmlkJykge1xyXG4gICAgICBpZiAodGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0gIT09ICcnICYmIHR5cGVvZiB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXSA9IEpTT04ucGFyc2UodGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0pXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdID09PSB2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl0gIT09ICcnICYmIHR5cGVvZiB0aGlzLmRhdGFHcmlkQ29sdW1uc1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl0gPSBKU09OLnBhcnNlKHRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl0pXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl0gPT09IHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHN1Ym1pdFF1ZXN0aW9ubmFpcmUocGFzc0RhdGE6IGFueSkge1xyXG4gICAgY29uc29sZS5sb2coJ2ZkZmYnLCBwYXNzRGF0YSlcclxuICAgIGNvbnN0IGRhdGFUb1NlbmQ6IEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICBjb25zdCBibG9icG9zdF9EYXRhID0gbmV3IEJsb2IoW0pTT04uc3RyaW5naWZ5KHBhc3NEYXRhLmFuc3dlcnMpXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vanNvbicgfSk7XHJcbiAgICBkYXRhVG9TZW5kLmFwcGVuZCgncXVlc3Rpb24nLCBibG9icG9zdF9EYXRhKTtcclxuICAgIHRoaXMuYnV0dG9uRGlzYWJsZSA9IHRydWU7XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIHVwbG9hZEF1ZGlvVmlkZW8oZGF0YTogYW55LCB0eXBlOiBhbnkpIHtcclxuICAgIGlmIChkYXRhLnVybHMgJiYgZGF0YS51cmxzLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IHBvc3REYXRhOiBhbnkgPSB7XHJcbiAgICAgICAgdXJsczogW11cclxuICAgICAgfTtcclxuICAgICAgZm9yIChjb25zdCB1cmwgb2YgZGF0YS51cmxzKSB7XHJcbiAgICAgICAgY29uc3QgZmlsZSA9IHRoaXMuZmlsZXN0b1VwbG9hZFt1cmwubGFiZWxOYW1lXVt1cmwuZG9jdW1lbnRdO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25haXJlU2VydmljZS52aWRlb2F1ZGlvUzNVcGxvYWQoZmlsZSwgdXJsLnVybClcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICBwb3N0RGF0YVsndXJscyddLnB1c2goeyB1aWQ6IHVybC51aWQsIGxhYmVsTmFtZTogdXJsLmxhYmVsTmFtZSB9KTtcclxuICAgICAgICAgICAgaWYgKGRhdGEudXJscy5sZW5ndGggPT09IHBvc3REYXRhWyd1cmxzJ10ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdjb25zQ2hlY2tpbicpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25haXJlU2VydmljZS5jb25zdW1lcldhaXRsaXN0UW5yVXBsb2FkU3RhdHVzVXBkYXRlKHRoaXMudXVpZCwgdGhpcy5hY2NvdW50SWQsIHBvc3REYXRhKVxyXG4gICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzR29iYWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGVycm9yT2JqID0gdGhpcy5lcnJvclNlcnZpY2UuZ2V0QXBpRXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvd0Vycm9yKHRoaXMud29yZFByb2Nlc3Nvci5nZXRQcm9qZWN0RXJyb3JNZXNzc2FnZXMoZXJyb3JPYmopKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9uRGlzYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2NvbnNBcHB0Jykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbmFpcmVTZXJ2aWNlLmNvbnN1bWVyQXBwdFFuclVwbG9hZFN0YXR1c1VwZGF0ZSh0aGlzLnV1aWQsIHRoaXMuYWNjb3VudElkLCBwb3N0RGF0YSlcclxuICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VjY2Vzc0dvYmFjaygpO1xyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgIGxldCBlcnJvck9iaiA9IHRoaXMuZXJyb3JTZXJ2aWNlLmdldEFwaUVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3dFcnJvcih0aGlzLndvcmRQcm9jZXNzb3IuZ2V0UHJvamVjdEVycm9yTWVzc3NhZ2VzKGVycm9yT2JqKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbkRpc2FibGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdjb25zT3JkZXInIHx8IHR5cGUgPT09ICdwYXBlcicpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25haXJlU2VydmljZS5jb25zdW1lck9yZGVyUW5yVXBsb2FkU3RhdHVzVXBkYXRlKHRoaXMudXVpZCwgdGhpcy5hY2NvdW50SWQsIHBvc3REYXRhKVxyXG4gICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzR29iYWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvd0Vycm9yKHRoaXMud29yZFByb2Nlc3Nvci5nZXRQcm9qZWN0RXJyb3JNZXNzc2FnZXMoZXJyb3IpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9uRGlzYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2NvbnNEb25hdGlvbkRldGFpbHMnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uYWlyZVNlcnZpY2UuY29uc3VtZXJEb25hdGlvblFuclVwbG9hZFN0YXR1c1VwZGF0ZSh0aGlzLnV1aWQsIHRoaXMuYWNjb3VudElkLCBwb3N0RGF0YSlcclxuICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzR29iYWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgIH0sIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGVycm9yT2JqID0gdGhpcy5lcnJvclNlcnZpY2UuZ2V0QXBpRXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3dFcnJvcih0aGlzLndvcmRQcm9jZXNzb3IuZ2V0UHJvamVjdEVycm9yTWVzc3NhZ2VzKGVycm9yT2JqKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idXR0b25EaXNhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSwgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgbGV0IGVycm9yT2JqID0gdGhpcy5lcnJvclNlcnZpY2UuZ2V0QXBpRXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93RXJyb3IodGhpcy53b3JkUHJvY2Vzc29yLmdldFByb2plY3RFcnJvck1lc3NzYWdlcyhlcnJvck9iaikpO1xyXG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkRpc2FibGUgPSBmYWxzZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnN1Y2Nlc3NHb2JhY2soKTtcclxuICAgIH1cclxuICB9XHJcbiAgZ29CYWNrKCkge1xyXG4gICAgdGhpcy5sb2NhdGlvbi5iYWNrKCk7XHJcbiAgfVxyXG4gIGdldFF1ZXN0aW9uKHF1ZXN0aW9uOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLnNvdXJjZSA9PT0gJ2N1c3RvbWVyLWNyZWF0ZScgfHwgdGhpcy5zb3VyY2UgPT09ICdxbnJEZXRhaWxzJyB8fCB0aGlzLnNvdXJjZSA9PT0gJ29uZXRpbWUnIHx8IHRoaXMuc291cmNlID09PSAnc2VydmljZU9wdGlvbkFwcHQnKSB7XHJcbiAgICAgIHJldHVybiBxdWVzdGlvbjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBxdWVzdGlvbi5xdWVzdGlvbjtcclxuICAgIH1cclxuICB9XHJcbiAgdmFsaWRhdGVRdWVzdGlvbm5haXJlKHNyYz86IGFueSkge1xyXG4gICAgaWYgKCF0aGlzLnF1ZXN0aW9uQW5zd2Vycykge1xyXG4gICAgICB0aGlzLnF1ZXN0aW9uQW5zd2VycyA9IHtcclxuICAgICAgICBhbnN3ZXJzOiB7XHJcbiAgICAgICAgICBhbnN3ZXJMaW5lOiBbXSxcclxuICAgICAgICAgIHF1ZXN0aW9ubmFpcmVJZDogKHRoaXMucXVlc3Rpb25uYWlyZUxpc3QuaWQpID8gdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5pZCA6IHRoaXMucXVlc3Rpb25uYWlyZUxpc3QucXVlc3Rpb25uYWlyZUlkLFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0SW1nKHF1ZXN0aW9uOiBhbnksIGRvY3VtZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXSAmJiB0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pIHtcclxuICAgICAgbGV0IHR5cGUgPSB0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0udHlwZS5zcGxpdCgnLycpO1xyXG4gICAgICBsZXQgZmlsZTtcclxuICAgICAgaWYgKHR5cGVbMF0gPT09ICd2aWRlbycgfHwgdHlwZVswXSA9PT0gJ2F1ZGlvJykge1xyXG4gICAgICAgIGZpbGUgPSB0aGlzLmF1ZGlvVmlkZW9GaWxlcztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmaWxlID0gdGhpcy5zZWxlY3RlZE1lc3NhZ2U7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgaW5keCA9IGZpbGUuaW5kZXhPZih0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pO1xyXG4gICAgICBpZiAoaW5keCAhPT0gLTEpIHtcclxuICAgICAgICBsZXQgcGF0aCA9IHRoaXMuZmlsZVNlcnZpY2UuZ2V0SW1hZ2UobnVsbCwgdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKTtcclxuXHJcbiAgICAgICAgaWYgKHBhdGggJiYgcGF0aCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgcmV0dXJuIHBhdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBhdGggPSBmaWxlW2luZHhdLnBhdGg7XHJcbiAgICAgICAgcmV0dXJuIHBhdGg7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy51cGxvYWRlZEZpbGVzW3F1ZXN0aW9uLmxhYmVsTmFtZV0gJiYgdGhpcy51cGxvYWRlZEZpbGVzW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKSB7XHJcbiAgICAgIGNvbnN0IGluZHggPSB0aGlzLnVwbG9hZGVkSW1hZ2VzLmluZGV4T2YodGhpcy51cGxvYWRlZEZpbGVzW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKTtcclxuICAgICAgaWYgKGluZHggIT09IC0xKSB7XHJcbiAgICAgICAgbGV0IHBhdGggPSB0aGlzLmZpbGVTZXJ2aWNlLmdldEltYWdlKG51bGwsIHRoaXMudXBsb2FkZWRJbWFnZXNbaW5keF0pO1xyXG4gICAgICAgIGlmIChwYXRoICYmIHBhdGggIT09IG51bGwpIHtcclxuICAgICAgICAgIHJldHVybiBwYXRoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwYXRoID0gdGhpcy51cGxvYWRlZEltYWdlc1tpbmR4XS5zM3BhdGg7XHJcbiAgICAgICAgcmV0dXJuIHBhdGg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgb25CdXR0b25CZWZvcmVIb29rKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LmJ1dHRvbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoZXZlbnQuYnV0dG9uLnR5cGUgPT09IEJ1dHRvblR5cGUuRE9XTkxPQUQpIHtcclxuICAgIH1cclxuICB9XHJcbiAgb3BlbkF0dGFjaG1lbnRHYWxsZXJ5KHF1ZXN0aW9uOiBhbnksIGRvY3VtZW50OiBhbnkpIHtcclxuICAgIHRoaXMuaW1hZ2VfbGlzdF9wb3B1cCA9IFtdO1xyXG4gICAgbGV0IGNvdW50ID0gMDtcclxuICAgIGxldCBpbWFnZVBhdGg7XHJcbiAgICBsZXQgY2FwdGlvbiA9ICcnO1xyXG4gICAgaWYgKHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdICYmIHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSkge1xyXG4gICAgICBsZXQgdHlwZSA9IHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XS50eXBlLnNwbGl0KCcvJyk7XHJcbiAgICAgIGlmICh0eXBlWzBdID09PSAndmlkZW8nIHx8IHR5cGVbMF0gPT09ICdhdWRpbycpIHtcclxuICAgICAgICBjb25zdCBpbmR4ID0gdGhpcy5hdWRpb1ZpZGVvRmlsZXMuaW5kZXhPZih0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pO1xyXG4gICAgICAgIHRoaXMuc2hvd0F1ZGlvVmlkZW9GaWxlKHRoaXMuYXVkaW9WaWRlb0ZpbGVzW2luZHhdKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBpbmR4ID0gdGhpcy5zZWxlY3RlZE1lc3NhZ2UuaW5kZXhPZih0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pO1xyXG4gICAgICAgIGlmIChpbmR4ICE9PSAtMSkge1xyXG4gICAgICAgICAgaWYgKHR5cGVbMV0gPT09ICdwZGYnIHx8IHR5cGVbMV0gPT09ICdkb2N4JyB8fCB0eXBlWzFdID09PSAndHh0JyB8fCB0eXBlWzFdID09PSAnZG9jJykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1lc3NhZ2VbaW5keF0uczNwYXRoKSB7XHJcbiAgICAgICAgICAgICAgd2luZG93Lm9wZW4odGhpcy5zZWxlY3RlZE1lc3NhZ2VbaW5keF0uczNwYXRoLCAnX2JsYW5rJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgd2luZG93Lm9wZW4odGhpcy5zZWxlY3RlZE1lc3NhZ2VbaW5keF0ucGF0aCwgJ19ibGFuaycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpbWFnZVBhdGggPSB0aGlzLnVwbG9hZGVkSW1hZ2VzW2luZHhdLnBhdGg7XHJcbiAgICAgICAgICAgIGNhcHRpb24gPSB0aGlzLmNvbW1lbnRzW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGRvY3VtZW50XTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy51cGxvYWRlZEZpbGVzW3F1ZXN0aW9uLmxhYmVsTmFtZV0gJiYgdGhpcy51cGxvYWRlZEZpbGVzW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKSB7XHJcbiAgICAgIGNvbnN0IGluZHggPSB0aGlzLnVwbG9hZGVkSW1hZ2VzLmluZGV4T2YodGhpcy51cGxvYWRlZEZpbGVzW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKTtcclxuICAgICAgbGV0IHR5cGUgPSB0aGlzLnVwbG9hZGVkRmlsZXNbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0udHlwZS5zcGxpdCgnLycpO1xyXG4gICAgICBsZXQgZXh0ID0gdHlwZVsxXTtcclxuICAgICAgdHlwZSA9IHR5cGVbMF07XHJcbiAgICAgIGlmIChpbmR4ICE9PSAtMSkge1xyXG4gICAgICAgIGlmICh0eXBlID09PSAndmlkZW8nIHx8IHR5cGUgPT09ICdhdWRpbycpIHtcclxuICAgICAgICAgIHRoaXMuc2hvd0F1ZGlvVmlkZW9GaWxlKHRoaXMudXBsb2FkZWRJbWFnZXNbaW5keF0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXh0ID09PSAncGRmJyB8fCBleHQgPT09ICdkb2N4JyB8fCBleHQgPT09ICd0eHQnIHx8IGV4dCA9PT0gJ2RvYycgfHwgZXh0ID09PSAndm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnKSB7XHJcbiAgICAgICAgICB3aW5kb3cub3Blbih0aGlzLnVwbG9hZGVkRmlsZXNbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0uczNwYXRoLCAnX2JsYW5rJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd0eXBldHh0MicsdGhpcy51cGxvYWRlZEltYWdlc1tpbmR4XSk7XHJcbiAgICAgICAgICBpZiAodGhpcy51cGxvYWRlZEltYWdlcyAmJiB0aGlzLnVwbG9hZGVkSW1hZ2VzW2luZHhdICYmIHRoaXMudXBsb2FkZWRJbWFnZXNbaW5keF1bJ2tleU5hbWUnXSAmJlxyXG4gICAgICAgICAgICB0aGlzLnVwbG9hZGVkSW1hZ2VzW2luZHhdWydrZXlOYW1lJ10uaW5jbHVkZXMoJ2RvY3gnKSkge1xyXG4gICAgICAgICAgICB3aW5kb3cub3Blbih0aGlzLnVwbG9hZGVkRmlsZXNbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0uczNwYXRoLCAnX2JsYW5rJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaW1hZ2VQYXRoID0gdGhpcy51cGxvYWRlZEltYWdlc1tpbmR4XS5zM3BhdGg7XHJcbiAgICAgICAgICAgIGNhcHRpb24gPSB0aGlzLnVwbG9hZGVkSW1hZ2VzW2luZHhdLmNvbW1lbnRzO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChpbWFnZVBhdGgpIHtcclxuXHJcbiAgICAgIGNvbnN0IGltZ29iaiA9IG5ldyBJbWFnZShcclxuICAgICAgICBjb3VudCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpbWc6IGltYWdlUGF0aCxcclxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBjYXB0aW9uXHJcbiAgICAgICAgfSxcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5pbWFnZV9saXN0X3BvcHVwLnB1c2goaW1nb2JqKTtcclxuICAgICAgY291bnQrKztcclxuICAgIH1cclxuICAgIGlmIChjb3VudCA+IDApIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vcGVuSW1hZ2VNb2RhbFJvdyh0aGlzLmltYWdlX2xpc3RfcG9wdXBbMF0pO1xyXG4gICAgICB9LCAyMDApO1xyXG4gICAgfVxyXG4gIH1cclxuICBvcGVuSW1hZ2VNb2RhbFJvdyhpbWFnZTogSW1hZ2UpIHtcclxuICAgIGNvbnN0IGluZGV4OiBudW1iZXIgPSB0aGlzLmdldEN1cnJlbnRJbmRleEN1c3RvbUxheW91dChpbWFnZSwgdGhpcy5pbWFnZV9saXN0X3BvcHVwKTtcclxuICAgIHRoaXMub3Blbk1vZGFsKDEsIGluZGV4LCB0aGlzLmN1c3RvbUJ1dHRvbnNGb250QXdlc29tZUNvbmZpZyk7XHJcbiAgfVxyXG4gIHByaXZhdGUgZ2V0Q3VycmVudEluZGV4Q3VzdG9tTGF5b3V0KGltYWdlOiBJbWFnZSwgaW1hZ2VzOiBJbWFnZVtdKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBpbWFnZSA/IGltYWdlcy5pbmRleE9mKGltYWdlKSA6IC0xO1xyXG4gIH1cclxuICBvcGVuTW9kYWwoaWQ6IG51bWJlciwgaW1hZ2VJbmRleDogbnVtYmVyLCBidXR0b25zQ29uZmlnOiBCdXR0b25zQ29uZmlnKTogdm9pZCB7XHJcbiAgICBjb25zdCBkaWFsb2dSZWY6IE1vZGFsR2FsbGVyeVJlZiA9IHRoaXMubW9kYWxHYWxsZXJ5U2VydmljZS5vcGVuKHtcclxuICAgICAgaWQ6IGlkLFxyXG4gICAgICBpbWFnZXM6IHRoaXMuaW1hZ2VfbGlzdF9wb3B1cCxcclxuICAgICAgY3VycmVudEltYWdlOiB0aGlzLmltYWdlX2xpc3RfcG9wdXBbaW1hZ2VJbmRleF0sXHJcbiAgICAgIGxpYkNvbmZpZzoge1xyXG4gICAgICAgIGJ1dHRvbnNDb25maWc6IGJ1dHRvbnNDb25maWcsXHJcbiAgICAgICAgY3VycmVudEltYWdlQ29uZmlnOiB7XHJcbiAgICAgICAgICBkb3dubG9hZGFibGU6IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIH0gYXMgTW9kYWxMaWJDb25maWdcclxuICAgIH0gYXMgTW9kYWxHYWxsZXJ5Q29uZmlnKSBhcyBNb2RhbEdhbGxlcnlSZWY7XHJcbiAgfVxyXG4gIHNob3dBdWRpb1ZpZGVvRmlsZShmaWxlOiBhbnkpIHtcclxuICAgIGNvbnN0IGZpbGV2aWV3ZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihTaG93dXBsb2FkZmlsZUNvbXBvbmVudCwge1xyXG4gICAgICB3aWR0aDogJzUwJScsXHJcbiAgICAgIHBhbmVsQ2xhc3M6IFsncG9wdXAtY2xhc3MnLCAnY29tbW9ucG9wdXBtYWluY2xhc3MnLCAndXBsb2FkZmlsZWNvbXBvbmVudGNsYXNzJ10sXHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIGZpbGU6IGZpbGUsXHJcbiAgICAgICAgc291cmNlOiAncW5yJ1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGZpbGV2aWV3ZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgZWRpdFFucigpIHtcclxuICAgIHRoaXMuZWRpdFF1ZXN0aW9ubmFpcmUgPSAhdGhpcy5lZGl0UXVlc3Rpb25uYWlyZTtcclxuICB9XHJcbiAgZ2V0RG9jdW1lbnRzKHF1ZXN0aW9uOiBhbnkpIHtcclxuICAgIGlmIChxdWVzdGlvbi5maWxlUHJvcGVydGllLm1heE5vT2ZGaWxlID4gMSAmJiBxdWVzdGlvbi5maWxlUHJvcGVydGllLm1pbk5vT2ZGaWxlICE9PSBxdWVzdGlvbi5maWxlUHJvcGVydGllLm1heE5vT2ZGaWxlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnVwbG9hZEZpbGVzVGVtcFtxdWVzdGlvbi5sYWJlbE5hbWVdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHF1ZXN0aW9uLmZpbGVQcm9wZXJ0aWUuYWxsb3dlZERvY3VtZW50cztcclxuICAgIH1cclxuICB9XHJcbiAgc2hvd1Byb3ZpZGVyVGV4dChxdWVzdGlvbjogYW55KSB7XHJcbiAgICBpZiAocXVlc3Rpb24ud2hvQ2FuQW5zd2VyICYmIHF1ZXN0aW9uLndob0NhbkFuc3dlciA9PT0gJ1BST1ZJREVSX09OTFknKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBzdWNjZXNzR29iYWNrKCkge1xyXG4gICAgdGhpcy5idXR0b25EaXNhYmxlID0gZmFsc2U7XHJcbiAgICBpZiAoIXRoaXMudHlwZSkge1xyXG4gICAgICB0aGlzLmxvY2F0aW9uLmJhY2soKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmlsZXN0b1VwbG9hZCA9IFtdO1xyXG4gICAgICB0aGlzLmVkaXRRbnIoKTtcclxuICAgICAgdGhpcy5yZXR1cm5BbnN3ZXJzLmVtaXQoJ3JlbG9hZCcpO1xyXG4gICAgICBpZiAodGhpcy50eXBlICE9PSAncW5yLWxpbmsnKSB7XHJcbiAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ1VwZGF0ZWQgU3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgc2hvd0RhdGFHcmlkQWRkU2VjdGlvbihxdWVzdGlvbjogYW55LCB2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLnNob3dEYXRhR3JpZFtxdWVzdGlvbi5sYWJlbE5hbWVdID0gdmFsdWU7XHJcbiAgICB0aGlzLnVwZGF0ZWRHcmlkSW5kZXhbcXVlc3Rpb24ubGFiZWxOYW1lXSA9IG51bGw7XHJcbiAgfVxyXG4gIHNob3dEYXRhR3JpZEFkZFNlY3Rpb25uKHF1ZXN0aW9uOiBhbnksIHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMucXVlc1N0b3JlID0gcXVlc3Rpb247XHJcbiAgICB0aGlzLmxTdG9yYWdlU2VydmljZS5zZXRpdGVtb25Mb2NhbFN0b3JhZ2UoJ3F1ZXNTdG9yZScsIHRoaXMucXVlc1N0b3JlKTtcclxuICAgIHRoaXMuc2hvd0RhdGFHcmlkW3F1ZXN0aW9uLmxhYmVsTmFtZV0gPSB2YWx1ZTtcclxuICAgIHRoaXMudXBkYXRlZEdyaWRJbmRleFtxdWVzdGlvbi5sYWJlbE5hbWVdID0gbnVsbDtcclxuICAgIHRoaXMucW5yUG9wdXAocXVlc3Rpb24sIHRydWUpXHJcbiAgfVxyXG4gIHNhdmVEYXRhR3JpZENvbHVtbihxdWVzdGlvbjogYW55KSB7XHJcbiAgICBsZXQgY29sdW1ucyA9IFtdO1xyXG4gICAgZm9yIChsZXQgY29sdW1uIG9mIHF1ZXN0aW9uLmRhdGFHcmlkUHJvcGVydGllcy5kYXRhR3JpZENvbHVtbnMpIHtcclxuICAgICAgaWYgKHRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl0gfHwgY29sdW1uLmRhdGFUeXBlID09PSAnYm9vbCcpIHtcclxuICAgICAgICBjb2x1bW5zW2NvbHVtbi5vcmRlcl0gPSB0aGlzLmRhdGFHcmlkQ29sdW1uc1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChjb2x1bW4uZGF0YVR5cGUgPT09ICdsaXN0JyB8fCBjb2x1bW4uZGF0YVR5cGUgPT09ICdmaWxlVXBsb2FkJykge1xyXG4gICAgICAgICAgY29sdW1uc1tjb2x1bW4ub3JkZXJdID0gW107XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbHVtbnNbY29sdW1uLm9yZGVyXSA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3RbcXVlc3Rpb24ubGFiZWxOYW1lXSkge1xyXG4gICAgICB0aGlzLmRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3RbcXVlc3Rpb24ubGFiZWxOYW1lXSA9IFtdO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudXBkYXRlZEdyaWRJbmRleFtxdWVzdGlvbi5sYWJlbE5hbWVdICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdFtxdWVzdGlvbi5sYWJlbE5hbWVdW3RoaXMudXBkYXRlZEdyaWRJbmRleFtxdWVzdGlvbi5sYWJlbE5hbWVdXSA9IGNvbHVtbnM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3RbcXVlc3Rpb24ubGFiZWxOYW1lXS5wdXNoKGNvbHVtbnMpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jYW5jZWxBZGRvclVwZGF0ZShxdWVzdGlvbik7XHJcbiAgICB0aGlzLm9uU3VibWl0KCdpbnB1dENoYW5nZScpO1xyXG4gIH1cclxuICBlZGl0RGF0YUdyaWQocXVlc3Rpb246IGFueSwgY29sdW1uOiBhbnkpIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0W3F1ZXN0aW9uLmxhYmVsTmFtZV0uaW5kZXhPZihjb2x1bW4pO1xyXG4gICAgT2JqZWN0LmtleXMoY29sdW1uKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGtleV0gPSBjb2x1bW5ba2V5XTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy51cGRhdGVkR3JpZEluZGV4W3F1ZXN0aW9uLmxhYmVsTmFtZV0gPSBpbmRleDtcclxuICAgIHRoaXMuc2hvd0RhdGFHcmlkW3F1ZXN0aW9uLmxhYmVsTmFtZV0gPSB0cnVlO1xyXG4gIH1cclxuICBkZWxldGVEYXRhR3JpZChxdWVzdGlvbjogYW55LCBjb2x1bW46IGFueSkge1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3RbcXVlc3Rpb24ubGFiZWxOYW1lXS5pbmRleE9mKGNvbHVtbik7XHJcbiAgICB0aGlzLmRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3RbcXVlc3Rpb24ubGFiZWxOYW1lXS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgdGhpcy5vblN1Ym1pdCgnaW5wdXRDaGFuZ2UnKTtcclxuICB9XHJcbiAgY2FuY2VsQWRkb3JVcGRhdGUocXVlc3Rpb246IGFueSkge1xyXG4gICAgdGhpcy5zaG93RGF0YUdyaWRbcXVlc3Rpb24ubGFiZWxOYW1lXSA9IGZhbHNlO1xyXG4gICAgdGhpcy51cGRhdGVkR3JpZEluZGV4W3F1ZXN0aW9uLmxhYmVsTmFtZV0gPSBudWxsO1xyXG4gICAgZm9yIChsZXQgY29sdW1uIG9mIHF1ZXN0aW9uLmRhdGFHcmlkUHJvcGVydGllcy5kYXRhR3JpZENvbHVtbnMpIHtcclxuICAgICAgdGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXSA9ICcnO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXRDb2x1bW5UeXBlKGNvbHVtbnM6IGFueSwgY29sdW1uOiBhbnkpIHtcclxuICAgIGNvbnN0IGNvbHVtbkRldGFpbHMgPSBjb2x1bW5zLmZpbHRlcigoY2xtbjogYW55KSA9PiBjbG1uLm9yZGVyID09PSBKU09OLnBhcnNlKGNvbHVtbikpO1xyXG4gICAgaWYgKGNvbHVtbkRldGFpbHNbMF0pIHtcclxuICAgICAgcmV0dXJuIGNvbHVtbkRldGFpbHNbMF0uZGF0YVR5cGU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldFNlY3Rpb25Db3VudCgpIHtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmdyb3VwZWRRbnIpLmxlbmd0aDtcclxuICB9XHJcbiAgZ2V0Qm9vbFZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgIHZhbHVlID0gKHZhbHVlICE9PSAnJyAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSA/IEpTT04ucGFyc2UodmFsdWUpIDogdmFsdWU7XHJcbiAgICBpZiAodmFsdWUgPT09IHRydWUpIHtcclxuICAgICAgcmV0dXJuICdZZXMnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICdObyc7XHJcbiAgfVxyXG4gIGdldE1heGRhdGUoZGF0YTogYW55KSB7XHJcbiAgICBsZXQgZGF0ZTtcclxuICAgIGlmICh0aGlzLmdldFF1ZXN0aW9uKGRhdGEpLmRhdGVQcm9wZXJ0aWVzICYmIHRoaXMuZ2V0UXVlc3Rpb24oZGF0YSkuZGF0ZVByb3BlcnRpZXMuZW5kRGF0ZSkge1xyXG4gICAgICBjb25zdCBkdCA9IHRoaXMucmV2ZXJzZSh0aGlzLmdldFF1ZXN0aW9uKGRhdGEpLmRhdGVQcm9wZXJ0aWVzLmVuZERhdGUpO1xyXG4gICAgICBkYXRlID0gbmV3IERhdGUoZHQpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkYXRlID0gdGhpcy50ZGF5O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGU7XHJcbiAgfVxyXG4gIGdldE1pbmRhdGUoZGF0YTogYW55KSB7XHJcbiAgICBsZXQgZGF0ZTtcclxuICAgIGlmICh0aGlzLmdldFF1ZXN0aW9uKGRhdGEpLmRhdGVQcm9wZXJ0aWVzICYmIHRoaXMuZ2V0UXVlc3Rpb24oZGF0YSkuZGF0ZVByb3BlcnRpZXMuc3RhcnREYXRlKSB7XHJcbiAgICAgIGNvbnN0IGR0ID0gdGhpcy5yZXZlcnNlKHRoaXMuZ2V0UXVlc3Rpb24oZGF0YSkuZGF0ZVByb3BlcnRpZXMuc3RhcnREYXRlKTtcclxuICAgICAgZGF0ZSA9IG5ldyBEYXRlKGR0KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGF0ZSA9IHRoaXMubWluZGF5O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkYXRlO1xyXG4gIH1cclxuICByZXZlcnNlKHM6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHMuc3BsaXQoXCItXCIpLnJldmVyc2UoKS5qb2luKFwiLVwiKTtcclxuICB9XHJcbiAgcW5yUG9wdXAocXVlc3Rpb246IGFueSwgdmFsdWU6IGFueSkge1xyXG4gICAgLy8gaWYgKHZhbHVlID09PSAnZWRpdCcpIHtcclxuICAgIC8vICAgdGhpcy5xdWVzU3RvcmUgPSB0aGlzLmxTdG9yYWdlU2VydmljZS5nZXRpdGVtZnJvbUxvY2FsU3RvcmFnZSgncXVlc1N0b3JlJyk7XHJcbiAgICAvLyAgIHRoaXMuc2hvd3FuciA9IHRydWU7XHJcbiAgICAvLyAgIHRoaXMuZWRpdGFibGVJdGVtID0gcXVlc3Rpb247XHJcbiAgICAvLyAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHRoaXMucXVlc1N0b3JlKSlcclxuICAgIC8vICAgY29uc3QgcmVtb3ZlaXRlbWRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oUW5yRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAvLyAgICAgd2lkdGg6ICc1MCUnLFxyXG4gICAgLy8gICAgIHBhbmVsQ2xhc3M6IFsncG9wdXAtY2xhc3MnLCAnY29tbW9ucG9wdXBtYWluY2xhc3MnLCAnY29uZmlybWF0aW9ubWFpbmNsYXNzJ10sXHJcbiAgICAvLyAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgLy8gICAgIGRhdGE6IHtcclxuICAgIC8vICAgICAgIGRhdGE6IHRoaXMucXVlc1N0b3JlLFxyXG4gICAgLy8gICAgICAgcW5yX3R5cGU6ICdzZXJ2aWNlX29wdGlvbicsXHJcbiAgICAvLyAgICAgICB2aWV3OiAncW5yVmlldycsXHJcbiAgICAvLyAgICAgICBpc0VkaXQ6ICdlZGl0JyxcclxuICAgIC8vICAgICAgIGVkaXRhYmxlSXRlbTogdGhpcy5lZGl0YWJsZUl0ZW0sXHJcbiAgICAvLyAgICAgICBzZXJ2RGV0YWlsczogdGhpcy5zZXJ2aWNlXHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9KTtcclxuICAgIC8vICAgcmVtb3ZlaXRlbWRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgLy8gICAgIGlmIChyZXN1bHQpIHtcclxuICAgIC8vICAgICAgIGNvbnNvbGUubG9nKFwicmVzdWx0LmRhdGEuYW5zd2VyTGluZVwiLCByZXN1bHQuZGF0YS5hbnN3ZXJMaW5lKVxyXG4gICAgLy8gICAgICAgdGhpcy5kYXRhR3JpZExpc3QgPSByZXN1bHQuZGF0YS5hbnN3ZXJMaW5lO1xyXG4gICAgLy8gICAgICAgdGhpcy5wb3N0X0RhdGEgPSByZXN1bHQuZGF0YTtcclxuICAgIC8vICAgICAgIHRoaXMuc2hvd0l0ZW0gPSB0cnVlO1xyXG4gICAgLy8gICAgICAgdGhpcy5pdGVtID0gcmVzdWx0LmRhdGEuYW5zd2VyTGluZVswXS5hbnN3ZXIuZGF0YUdyaWRMaXN0WzBdLmRhdGFHcmlkTGlzdENvbHVtblswXS5jb2x1bW4ubGlzdFswXTtcclxuICAgIC8vICAgICAgIGlmIChyZXN1bHQuZGF0YS50b3RhbFByaWNlKSB7XHJcbiAgICAvLyAgICAgICAgIHRoaXMudG90YWxQcmljZSA9IHJlc3VsdC5kYXRhLnRvdGFsUHJpY2VcclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICAgIGxldCBpbmRleDEgPSB0aGlzLml0ZW1BcnJheS5maW5kSW5kZXgoeCA9PiB4LmlkID09PSB0aGlzLmVkaXRhYmxlSXRlbS5pZClcclxuICAgIC8vICAgICAgIGlmIChpbmRleDEgPiAtMSkge1xyXG4gICAgLy8gICAgICAgICB0aGlzLml0ZW1BcnJheS5zcGxpY2UoaW5kZXgxLCAxKTtcclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICAgIGxldCBkdW1teUFycmF5ID0geyBpZDogdGhpcy5pZCwgc2VxdWVuY2VJZDogdGhpcy5zZXF1ZW5jZUlkLCBpdGVtOiB0aGlzLml0ZW0sIHByaWNlOiB0aGlzLnRvdGFsUHJpY2UsIGNvbHVtbkl0ZW06IHRoaXMuZGF0YUdyaWRMaXN0IH1cclxuICAgIC8vICAgICAgIHRoaXMuaXRlbUFycmF5LnB1c2goZHVtbXlBcnJheSlcclxuICAgIC8vICAgICAgIGlmICh0aGlzLml0ZW1BcnJheSkge1xyXG4gICAgLy8gICAgICAgICB0aGlzLmxTdG9yYWdlU2VydmljZS5zZXRpdGVtb25Mb2NhbFN0b3JhZ2UoJ2l0ZW1BcnJheScsIHRoaXMuaXRlbUFycmF5KTtcclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICAgIHRoaXMuc2VydmljZVRvdGFsUHJpY2UgPSAwO1xyXG4gICAgLy8gICAgICAgdGhpcy5pdGVtQXJyYXkuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAvLyAgICAgICAgIHRoaXMuc2VydmljZVRvdGFsUHJpY2UgPSB0aGlzLnNlcnZpY2VUb3RhbFByaWNlICsgaXRlbS5wcmljZTtcclxuICAgIC8vICAgICAgICAgdGhpcy5sU3RvcmFnZVNlcnZpY2Uuc2V0aXRlbW9uTG9jYWxTdG9yYWdlKCdzZXJ2aWNlVG90YWxQcmljZScsIHRoaXMuc2VydmljZVRvdGFsUHJpY2UpO1xyXG4gICAgLy8gICAgICAgfSk7XHJcbiAgICAvLyAgICAgICB0aGlzLmlkID0gdGhpcy5pZCArIDFcclxuICAgIC8vICAgICAgIGxldCBvYmogPSB7IHNlcXVlbmNlSWQ6IHRoaXMuc2VxdWVuY2VJZCwgZGdMaXN0OiB0aGlzLnBvc3RfRGF0YS5hbnN3ZXJMaW5lIH07XHJcbiAgICAvLyAgICAgICB0aGlzLmZpbmFsT2JqZWN0TGlzdC5wdXNoKG9iaik7XHJcbiAgICAvLyAgICAgICB0aGlzLm9uU3VibWl0KCdzZXJ2aWNlT3B0aW9uJylcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gZWxzZSB7XHJcbiAgICAvLyAgIHRoaXMuc2hvd3FuciA9IHRydWU7XHJcbiAgICAvLyAgIGNvbnNvbGUubG9nKFwidGhpcy5zZXF1ZW5jZUlkXCIsIHF1ZXN0aW9uKVxyXG4gICAgLy8gICB0aGlzLnNlcXVlbmNlSWQgPSBxdWVzdGlvbi5zZXF1bmNlSWQ7XHJcbiAgICAvLyAgIGNvbnN0IHJlbW92ZWl0ZW1kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFFuckRpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgLy8gICAgIHdpZHRoOiAnNTAlJyxcclxuICAgIC8vICAgICBwYW5lbENsYXNzOiBbJ3BvcHVwLWNsYXNzJywgJ2NvbW1vbnBvcHVwbWFpbmNsYXNzJywgJ2NvbmZpcm1hdGlvbm1haW5jbGFzcyddLFxyXG4gICAgLy8gICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgIC8vICAgICBkYXRhOiB7XHJcbiAgICAvLyAgICAgICBkYXRhOiBxdWVzdGlvbixcclxuICAgIC8vICAgICAgIHFucl90eXBlOiAnc2VydmljZV9vcHRpb24nLFxyXG4gICAgLy8gICAgICAgdmlldzogJ3FuclZpZXcnLFxyXG4gICAgLy8gICAgICAgaXNFZGl0OiAnYWRkJyxcclxuICAgIC8vICAgICAgIHNlcnZEZXRhaWxzOiB0aGlzLnNlcnZpY2VcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gICByZW1vdmVpdGVtZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAvLyAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgLy8gICAgICAgdGhpcy5kYXRhR3JpZExpc3QgPSByZXN1bHQuZGF0YS5hbnN3ZXJMaW5lO1xyXG4gICAgLy8gICAgICAgdGhpcy5wb3N0X0RhdGEgPSByZXN1bHQuZGF0YTtcclxuICAgIC8vICAgICAgIHRoaXMuc2hvd0l0ZW0gPSB0cnVlO1xyXG4gICAgLy8gICAgICAgdGhpcy5pdGVtID0gcmVzdWx0LmRhdGEuYW5zd2VyTGluZVswXS5hbnN3ZXIuZGF0YUdyaWRMaXN0WzBdLmRhdGFHcmlkTGlzdENvbHVtblswXS5jb2x1bW4ubGlzdFswXTtcclxuXHJcbiAgICAvLyAgICAgICBpZiAocmVzdWx0LmRhdGEudG90YWxQcmljZSkge1xyXG4gICAgLy8gICAgICAgICB0aGlzLnRvdGFsUHJpY2UgPSByZXN1bHQuZGF0YS50b3RhbFByaWNlXHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgICBsZXQgZHVtbXlBcnJheSA9IHsgaWQ6IHRoaXMuaWQsIHNlcXVlbmNlSWQ6IHRoaXMuc2VxdWVuY2VJZCwgaXRlbTogdGhpcy5pdGVtLCBwcmljZTogdGhpcy50b3RhbFByaWNlLCBjb2x1bW5JdGVtOiB0aGlzLmRhdGFHcmlkTGlzdCB9XHJcbiAgICAvLyAgICAgICB0aGlzLml0ZW1BcnJheS5wdXNoKGR1bW15QXJyYXkpXHJcblxyXG4gICAgLy8gICAgICAgaWYgKHRoaXMuaXRlbUFycmF5KSB7XHJcbiAgICAvLyAgICAgICAgIHRoaXMubFN0b3JhZ2VTZXJ2aWNlLnNldGl0ZW1vbkxvY2FsU3RvcmFnZSgnaXRlbUFycmF5JywgdGhpcy5pdGVtQXJyYXkpO1xyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgICAgdGhpcy5zZXJ2aWNlVG90YWxQcmljZSA9IDA7XHJcbiAgICAvLyAgICAgICB0aGlzLml0ZW1BcnJheS5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgIC8vICAgICAgICAgbGV0IHF1YW50aXR5ID0gaXRlbS5jb2x1bW5JdGVtWzBdLmFuc3dlci5kYXRhR3JpZExpc3RbMF0uZGF0YUdyaWRMaXN0Q29sdW1uWzBdLnF1YW50aXR5O1xyXG4gICAgLy8gICAgICAgICB0aGlzLnNlcnZpY2VUb3RhbFByaWNlID0gKHRoaXMuc2VydmljZVRvdGFsUHJpY2UgKyBpdGVtLnByaWNlKSAqIHF1YW50aXR5O1xyXG4gICAgLy8gICAgICAgICB0aGlzLmxTdG9yYWdlU2VydmljZS5zZXRpdGVtb25Mb2NhbFN0b3JhZ2UoJ3NlcnZpY2VUb3RhbFByaWNlJywgdGhpcy5zZXJ2aWNlVG90YWxQcmljZSk7XHJcbiAgICAvLyAgICAgICB9KTtcclxuICAgIC8vICAgICAgIHRoaXMuaWQgPSB0aGlzLmlkICsgMVxyXG4gICAgLy8gICAgICAgbGV0IG9iaiA9IHsgc2VxdWVuY2VJZDogdGhpcy5zZXF1ZW5jZUlkLCBkZ0xpc3Q6IHRoaXMucG9zdF9EYXRhLmFuc3dlckxpbmUgfTtcclxuICAgIC8vICAgICAgIHRoaXMuZmluYWxPYmplY3RMaXN0LnB1c2gob2JqKTtcclxuICAgIC8vICAgICAgIHRoaXMub25TdWJtaXQoJ3NlcnZpY2VPcHRpb24nKVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfSk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG4gIGluY3JlbWVudChpdGVtOiBhbnkpIHtcclxuICAgIC8vIGNvbnN0IHJlbW92ZWl0ZW1kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFFuckRpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgLy8gICB3aWR0aDogJzEwMCUnLFxyXG4gICAgLy8gICBwYW5lbENsYXNzOiBbJ3BvcHVwLWNsYXNzJywgJ2NvbW1vbnBvcHVwbWFpbmNsYXNzJywgJ2NvbmZpcm1hdGlvbm1haW5jbGFzcyddLFxyXG4gICAgLy8gICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAvLyAgIGRhdGE6IHtcclxuICAgIC8vICAgICBpdGVtOiBpdGVtLFxyXG4gICAgLy8gICAgIGRhdGE6IHRoaXMucXVlc3Rpb25uYWlyZUxpc3QsXHJcbiAgICAvLyAgICAgdmlldzogJ3FucnJlcGVhdFZpZXcnLFxyXG4gICAgLy8gICAgIHNlcnZEZXRhaWxzOiB0aGlzLnNlcnZpY2VcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSk7XHJcbiAgICAvLyByZW1vdmVpdGVtZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAvLyAgIGlmIChyZXN1bHQpIHtcclxuICAgIC8vICAgICBpZiAocmVzdWx0ID09PSAnYWRkTmV3Jykge1xyXG4gICAgLy8gICAgICAgdGhpcy5xdWVzU3RvcmUgPSB0aGlzLmxTdG9yYWdlU2VydmljZS5nZXRpdGVtZnJvbUxvY2FsU3RvcmFnZSgncXVlc1N0b3JlJyk7XHJcbiAgICAvLyAgICAgICB0aGlzLnFuclBvcHVwKHRoaXMucXVlc1N0b3JlLCB0cnVlKVxyXG4gICAgLy8gICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICBpZiAoIXRoaXMuc2VxdWVuY2VJZCkge1xyXG4gICAgLy8gICAgICAgICB0aGlzLnNlcXVlbmNlSWQgPSBpdGVtLnNlcXVlbmNlSWRcclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICAgIGxldCBkdW1teUFycmF5ID0geyBpZDogdGhpcy5pZCwgc2VxdWVuY2VJZDogdGhpcy5zZXF1ZW5jZUlkLCBpdGVtOiByZXN1bHQucmVwZWF0SXRlbS5pdGVtLCBwcmljZTogcmVzdWx0LnJlcGVhdEl0ZW0ucHJpY2UsIGNvbHVtbkl0ZW06IHJlc3VsdC5yZXBlYXRJdGVtLmNvbHVtbkl0ZW0gfVxyXG4gICAgLy8gICAgICAgbGV0IGl0ZW1zID0gZHVtbXlBcnJheS5jb2x1bW5JdGVtWzBdLmFuc3dlci5kYXRhR3JpZExpc3RbMF0uZGF0YUdyaWRMaXN0Q29sdW1uO1xyXG4gICAgLy8gICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgLy8gICAgICAgICBpdGVtc1tpXS5xdWFudGl0eSA9IGl0ZW1zW2ldLnF1YW50aXR5ICsgMTtcclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICAgIGlmICh0aGlzLml0ZW1BcnJheSkge1xyXG4gICAgLy8gICAgICAgICB0aGlzLmxTdG9yYWdlU2VydmljZS5zZXRpdGVtb25Mb2NhbFN0b3JhZ2UoJ2l0ZW1BcnJheScsIHRoaXMuaXRlbUFycmF5KTtcclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICAgIGNvbnNvbGUubG9nKFwiVGhpcy5JdGVtQXJyYXlcIiwgdGhpcy5pdGVtQXJyYXkpXHJcbiAgICAvLyAgICAgICB0aGlzLnNlcnZpY2VUb3RhbFByaWNlID0gMDtcclxuICAgIC8vICAgICAgIHRoaXMuaXRlbUFycmF5LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgLy8gICAgICAgICBsZXQgcXVhbnRpdHkgPSBpdGVtLmNvbHVtbkl0ZW1bMF0uYW5zd2VyLmRhdGFHcmlkTGlzdFswXS5kYXRhR3JpZExpc3RDb2x1bW5bMF0ucXVhbnRpdHk7XHJcbiAgICAvLyAgICAgICAgIGNvbnNvbGUubG9nKFwicXVhbnRpdHlcIiwgcXVhbnRpdHkpXHJcbiAgICAvLyAgICAgICAgIHRoaXMuc2VydmljZVRvdGFsUHJpY2UgKz0gaXRlbS5wcmljZSAqIHF1YW50aXR5O1xyXG4gICAgLy8gICAgICAgfSk7XHJcbiAgICAvLyAgICAgICBjb25zb2xlLmxvZyhcInNlcnZpY2VUb3RhbFByaWNlXCIsIHRoaXMuc2VydmljZVRvdGFsUHJpY2UpXHJcbiAgICAvLyAgICAgICB0aGlzLmxTdG9yYWdlU2VydmljZS5zZXRpdGVtb25Mb2NhbFN0b3JhZ2UoJ3NlcnZpY2VUb3RhbFByaWNlJywgdGhpcy5zZXJ2aWNlVG90YWxQcmljZSk7XHJcbiAgICAvLyAgICAgICB0aGlzLmlkID0gdGhpcy5pZCArIDFcclxuICAgIC8vICAgICAgIGxldCBvYmogPSB7IHNlcXVlbmNlSWQ6IHRoaXMuc2VxdWVuY2VJZCwgZGdMaXN0OiByZXN1bHQucmVwZWF0SXRlbS5jb2x1bW5JdGVtIH07XHJcbiAgICAvLyAgICAgICB0aGlzLmZpbmFsT2JqZWN0TGlzdC5wdXNoKG9iaik7XHJcbiAgICAvLyAgICAgICB0aGlzLm9uU3VibWl0KCdzZXJ2aWNlT3B0aW9uJylcclxuICAgIC8vICAgICB9XHJcblxyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9KTtcclxuICB9XHJcbiAgZ2V0SXRlbVF1YW50aXR5KGl0ZW06IGFueSkge1xyXG4gICAgbGV0IHF1YW50aXR5ID0gaXRlbS5jb2x1bW5JdGVtWzBdLmFuc3dlci5kYXRhR3JpZExpc3RbMF0uZGF0YUdyaWRMaXN0Q29sdW1uWzBdLnF1YW50aXR5O1xyXG4gICAgcmV0dXJuIHF1YW50aXR5XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcIml0ZW1cIiwgaXRlbSlcclxuICB9XHJcbiAgZGVjcmVtZW50KHJlbW92aW5nSXRlbTogYW55KSB7XHJcbiAgICBsZXQgaW5kZXggPSB0aGlzLml0ZW1BcnJheS5maW5kSW5kZXgoKHg6IGFueSkgPT4geC5pZCA9PT0gcmVtb3ZpbmdJdGVtLmlkKVxyXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgY29uc29sZS5sb2coXCJ0aGlzLml0ZW1BcnJheVtpbmRleF1cIiwgdGhpcy5pdGVtQXJyYXlbaW5kZXhdKVxyXG4gICAgICBpZiAodGhpcy5nZXRJdGVtUXVhbnRpdHkodGhpcy5pdGVtQXJyYXlbaW5kZXhdKSA9PSAxKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtQXJyYXkuc3BsaWNlKGluZGV4LCAxKTsgLy8gMm5kIHBhcmFtZXRlciBtZWFucyByZW1vdmUgb25lIGl0ZW0gb25seVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuaXRlbUFycmF5W2luZGV4XS5jb2x1bW5JdGVtWzBdLmFuc3dlci5kYXRhR3JpZExpc3RbMF0uZGF0YUdyaWRMaXN0Q29sdW1uO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGl0ZW1zW2ldLnF1YW50aXR5ID0gaXRlbXNbaV0ucXVhbnRpdHkgLSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pdGVtQXJyYXkpIHtcclxuICAgICAgICB0aGlzLmxTdG9yYWdlU2VydmljZS5zZXRpdGVtb25Mb2NhbFN0b3JhZ2UoJ2l0ZW1BcnJheScsIHRoaXMuaXRlbUFycmF5KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNlcnZpY2VUb3RhbFByaWNlID0gMDtcclxuICAgICAgdGhpcy5pdGVtQXJyYXkuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlVG90YWxQcmljZSA9IHRoaXMuc2VydmljZVRvdGFsUHJpY2UgKyBpdGVtLnByaWNlO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5sU3RvcmFnZVNlcnZpY2Uuc2V0aXRlbW9uTG9jYWxTdG9yYWdlKCdzZXJ2aWNlVG90YWxQcmljZScsIHRoaXMuc2VydmljZVRvdGFsUHJpY2UpO1xyXG4gICAgICB0aGlzLmZpbmFsT2JqZWN0TGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vblN1Ym1pdCgnc2VydmljZU9wdGlvbicpXHJcbiAgfVxyXG4gIGRpc2FibGVJbnB1dCgpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiPHNlY3Rpb24gY2xhc3M9XCJjb25zLWluYm94IG5vLXBhZGRpbmctc21hbGxcIiAqbmdJZj1cIiFzaG93c2VydmljZVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjb250YWluZXIgY29uc3VtZXItZGFzaGhvbWUgbm8tcGFkZGluZyBuby1wYWRkaW5nLXNtYWxsXCIgKm5nSWY9XCIhdHlwZSAmJiBzb3VyY2UhPSdwcm9MZWFkJ1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQgdGl0bGUtZ2Igcm91bmRlZC0wXCIgKm5nSWY9XCJ1dWlkXCI+XHJcbiAgICAgIDxoNSBjbGFzcz1cIm1nbi11cC0xMCBib2xkXCI+e3txdWVzdGlvbm5haXJlX2hlYWRpbmcgfCBjYXBpdGFsaXplRmlyc3R9fSA8YSBjbGFzcz1cInB1bGwtbGVmdCBtZ24tcnQtMjAgYmFjay1idG5cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImdvQmFjaygpXCI+PGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1sZWZ0XCI+PC9pPjwvYT48L2g1PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGFwcC1jb21tb24taW5uZXJsb2FkaW5nLXNwaW5uZXIgKm5nSWY9XCJsb2FkaW5nXCI+PC9hcHAtY29tbW9uLWlubmVybG9hZGluZy1zcGlubmVyPlxyXG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4tZmx1aWQgcHVsbC1yaWdodCBtZ24tcnQtMTAgbWduLWJ0LTIwXCJcclxuICAgICpuZ0lmPVwidHlwZSAhPT0gJ3FuckxpbmtQcm92aWRlcicgJiYgIWJ1dHRvbkRpc2FibGUgJiYgd2FpdGxpc3RTdGF0dXNcIj5cclxuICAgIDxidXR0b24gY2xhc3M9XCJub3JtYWwtYnRuIGVkaXRcIiBtYXQtZmxhdC1idXR0b24gKGNsaWNrKT1cImVkaXRRbnIoKVwiPkVkaXQ8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uLWZsdWlkIHdpZHRoLTEwMFwiIFtjbGFzcy5xbnJEaXNhYmxlU3RhdGVdPVwiZGlzYWJsZUlucHV0KClcIlxyXG4gICAgW2NsYXNzLm5vLXBhZGRpbmddPVwidXVpZCAmJiAoc291cmNlID09PSAnY29uc0NoZWNraW4nIHx8IHNvdXJjZSA9PT0gJ2NvbnNBcHB0JyB8fCBzb3VyY2UgPT09ICdjb25zT3JkZXInIHx8IHNvdXJjZSA9PT0gJ3BhcGVyJyB8fCBzb3VyY2UgPT09ICdjb25zRG9uYXRpb25EZXRhaWxzJyB8fCBzb3VyY2UgPT09ICdpdnInKVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC14bC0xMiBmb3JjZV9jZW50ZXJcIiBbY2xhc3Mubm8tcGFkZGluZ109XCJ1dWlkXCIgW2NsYXNzLm5vLXBhZGRpbmctc21hbGxdPVwic291cmNlICYmIHNvdXJjZT09J2l2cidcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJxbnJzZWNcIiAqbmdGb3I9XCJsZXQgcW5yIG9mIGdyb3VwZWRRbnIgfCBrZXl2YWx1ZTogYXNJc09yZGVyXCJcclxuICAgICAgICAgIFtjbGFzcy5zZWN0aW9uLXNoYWRvd109XCJnZXRTZWN0aW9uQ291bnQoKSA+IDFcIiBbY2xhc3Mubm8tcGFkZGluZy1zbWFsbF09XCJzb3VyY2UgJiYgc291cmNlPT0naXZyJ1wiPlxyXG4gICAgICAgICAgPCEtLSB7e3FuciB8IGpzb259fSAtLT5cclxuICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInFuci1zZWN0aW9uXCIgKm5nSWY9XCJnZXRTZWN0aW9uQ291bnQoKSA+IDFcIj57e3Fuci5rZXl9fTwvZGl2PiAtLT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGNhcmQgbWduLTBcIiAqbmdGb3I9XCJsZXQgcXVlc3Rpb24gb2YgcW5yLnZhbHVlXCI+XHJcbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInFuci1zZWN0aW9uXCIgKm5nSWY9XCJnZXRTZWN0aW9uQ291bnQoKSA+IDFcIj57e2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5zZWN0aW9uTmFtZX19PC9kaXY+IC0tPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtMTIgcXVlc3RcIj57e2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbH19XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wbHVzLWNpcmNsZSBwdWxsLXJpZ2h0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy5hZGRpY29uXT1cIiFidXR0b25EaXNhYmxlICYmICFkaXNhYmxlSW5wdXQoKVwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWVsZERhdGFUeXBlID09PSAnZGF0YUdyaWQnICYmICFzaG93RGF0YUdyaWRbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIiFidXR0b25EaXNhYmxlICYmICFkaXNhYmxlSW5wdXQoKSAmJiBzaG93RGF0YUdyaWRBZGRTZWN0aW9uKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSwgdHJ1ZSlcIj48L2k+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByby1vbmx5XCIgKm5nSWY9XCJzaG93UHJvdmlkZXJUZXh0KGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSlcIj5Gb3IgUHJvdmlkZXJzPC9kaXY+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWRcIiAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5tYW5kYXRvcnlcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWxldmVsLXNldHRpbmdzXCIgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikuaGludFwiXHJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5oaW50IHwgc2FmZUh0bWxcIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPCEtLSBmb3IgZmlsZSB1cGxvYWQgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWVsZERhdGFUeXBlID09PSAnZmlsZVVwbG9hZCdcIj5cclxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBtdWx0aXBsZSAjZGVwdHNlbCBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWxlUHJvcGVydGllLm1heE5vT2ZGaWxlID4gMSAmJiBnZXRRdWVzdGlvbihxdWVzdGlvbikuZmlsZVByb3BlcnRpZS5taW5Ob09mRmlsZSAhPT0gZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmZpbGVQcm9wZXJ0aWUubWF4Tm9PZkZpbGVcIlxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ1cGxvYWRGaWxlc1RlbXBbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIiBjbGFzcz1cInNlbGVjdC1ib3hcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGRvY3VtZW50IG9mIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWxlUHJvcGVydGllLmFsbG93ZWREb2N1bWVudHNcIlxyXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZG9jdW1lbnRcIiAoY2xpY2spPVwiY2hhbmdlSW1hZ2VTZWxlY3RlZChnZXRRdWVzdGlvbihxdWVzdGlvbiksIGRvY3VtZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICB7e2RvY3VtZW50fX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTIgY29sLTEyIGNvbC1tZC0xMiBjb2wtc20tMTIgbm8tcGFkZGluZyBtZ24tdXAtMjBcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJnZXREb2N1bWVudHMoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pKSAmJiBnZXREb2N1bWVudHMoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pKS5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcHpvbmUgZHJvcHpvbmUtZGVmYXVsdCBkcm9wem9uZS1wcmltYXJ5IGR6LWNsaWNrYWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5zaW5nbGUtZmlsZV09XCJnZXRRdWVzdGlvbihxdWVzdGlvbikuZmlsZVByb3BlcnRpZS5hbGxvd2VkRG9jdW1lbnRzLmxlbmd0aD09MVwiXHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBhdXRvO1wiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkb2Mgb2YgZ2V0RG9jdW1lbnRzKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHotcHJldmlldyBkei1wcm9jZXNzaW5nIGR6LWltYWdlLXByZXZpZXcgZHotZXJyb3IgZHotY29tcGxldGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRJbWcoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCBkb2MpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG9jbmFtZVwiICpuZ0lmPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmZpbGVQcm9wZXJ0aWUuYWxsb3dlZERvY3VtZW50cy5sZW5ndGggPiAxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ZG9jfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkemltYWdlIHBvaW50ZXItY3Vyc29yXCIgKGNsaWNrKT1cIm9wZW5BdHRhY2htZW50R2FsbGVyeShnZXRRdWVzdGlvbihxdWVzdGlvbiksIGRvYylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBhbHQ9XCJcIiBjbGFzcz1cImltZ19maXRcIiBbc3JjXT1cImdldEltZyhnZXRRdWVzdGlvbihxdWVzdGlvbiksIGRvYylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCIgKGJsdXIpPVwib25TdWJtaXQoJ2lucHV0Q2hhbmdlJyk7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb21tZW50c1tnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lICsgJz0nICsgZG9jXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdhbF9hY3Rpb25cIiAqbmdJZj1cIiFidXR0b25EaXNhYmxlICYmICFkaXNhYmxlSW5wdXQoKSAmJiBtb2RlIT09J3JlYWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZUltYWdlU2VsZWN0ZWQoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCBkb2MpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR6LXByZXZpZXcgZHotcHJvY2Vzc2luZyBkei1pbWFnZS1wcmV2aWV3IGR6LWVycm9yIGR6LWNvbXBsZXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJsb2dvZmlsZTEuY2xpY2soKVwiICpuZ0lmPVwiIWdldEltZyhnZXRRdWVzdGlvbihxdWVzdGlvbiksIGRvYylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb2NuYW1lXCIgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikuZmlsZVByb3BlcnRpZS5hbGxvd2VkRG9jdW1lbnRzLmxlbmd0aCA+IDFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tkb2N9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR6LWltYWdlIHBvaW50ZXItY3Vyc29yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAjbG9nb2ZpbGUxIHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwiLyo7Y2FwdHVyZT1jYW1lcmFcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiZmlsZXNTZWxlY3RlZCgkZXZlbnQsIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSwgZG9jKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR6LWVycm9yLW1hcmtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJidG4gYnRuLWljb24gYnRuLWxpZ2h0LXN1Y2Nlc3MgYnRuLWNpcmNsZSBtci0yXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1kYXJrLTUwIGZsYXRpY29uLXVwbG9hZFwiPjwvaT48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiB0ZXh0LWRhbmdlclwiICpuZ0lmPVwiYXBpRXJyb3JbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIj5cclxuICAgICAgICAgICAgICAgIHt7YXBpRXJyb3JbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV19fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBmb3IgY2hlY2tib3ggLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmZpZWxkRGF0YVR5cGUgPT09ICdsaXN0JyAmJiBnZXRRdWVzdGlvbihxdWVzdGlvbikubGlzdFByb3BlcnRpZS5tYXhBbnN3ZXJzID4gMVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveC1saXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjaGVja2JveFwiICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxWYWx1ZXNcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cImlzQ2hlY2tlZCh2YWx1ZSwgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJsaXN0Q2hhbmdlKCRldmVudCwgdmFsdWUsIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAge3t2YWx1ZX19XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHRleHQtZGFuZ2VyXCIgKm5nSWY9XCJhcGlFcnJvcltnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiPlxyXG4gICAgICAgICAgICAgICAge3thcGlFcnJvcltnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXX19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIGZvciByYWRpbyAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikuZmllbGREYXRhVHlwZSA9PT0gJ2xpc3QnICYmIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5saXN0UHJvcGVydGllLm1heEFuc3dlcnMgPT09IDFcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmFkaW8tbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwicmFkaW9cIiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsVmFsdWVzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNDaGVja2VkKHZhbHVlLCBnZXRRdWVzdGlvbihxdWVzdGlvbikpXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImxpc3RDaGFuZ2UoJGV2ZW50LCB2YWx1ZSwgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIHt7dmFsdWV9fVxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiB0ZXh0LWRhbmdlclwiICpuZ0lmPVwiYXBpRXJyb3JbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIj5cclxuICAgICAgICAgICAgICAgIHt7YXBpRXJyb3JbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV19fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBmb3IgdG9nZ2VsIGJvb2xlYW4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWVsZERhdGFUeXBlID09PSAnYm9vbCdcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmFkaW8tbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwicmFkaW9cIiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsVmFsdWVzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNCb29sZWFuQ2hlY2tlZCh2YWx1ZSwgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJib29sZWFuQ2hhbmdlKCRldmVudCwgdmFsdWUsIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSlcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICB7e3ZhbHVlfX1cclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgdGV4dC1kYW5nZXJcIiAqbmdJZj1cImFwaUVycm9yW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdXCI+XHJcbiAgICAgICAgICAgICAgICB7e2FwaUVycm9yW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gZm9yIFRleHQgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWVsZERhdGFUeXBlID09PSAncGxhaW5UZXh0J1wiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5wbGFpblRleHRQcm9wZXJ0aWUubWF4Tm9PZkxldHRlcjw9MTAwXCJcclxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJhbnN3ZXJzW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdXCIgKGlucHV0KT1cIm9uU3VibWl0KCdpbnB1dENoYW5nZScpO1wiICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIFttaW5sZW5ndGhdPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLnBsYWluVGV4dFByb3BlcnRpZS5taW5Ob09mTGV0dGVyXCJcclxuICAgICAgICAgICAgICAgICAgW21heGxlbmd0aF09XCJnZXRRdWVzdGlvbihxdWVzdGlvbikucGxhaW5UZXh0UHJvcGVydGllLm1heE5vT2ZMZXR0ZXJcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbDEgZm9ybS1jb250cm9sLXNvbGlkXCIgdHlwZT1cInRleHRcIiBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCIgLS0+XHJcbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgcm93cz1cIjNcIiAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5wbGFpblRleHRQcm9wZXJ0aWUubWF4Tm9PZkxldHRlcj4xMDBcIlxyXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImFuc3dlcnNbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIiAoaW5wdXQpPVwib25TdWJtaXQoJ2lucHV0Q2hhbmdlJyk7XCJcclxuICAgICAgICAgICAgICAgICAgW21pbmxlbmd0aF09XCJnZXRRdWVzdGlvbihxdWVzdGlvbikucGxhaW5UZXh0UHJvcGVydGllLm1pbk5vT2ZMZXR0ZXJcIlxyXG4gICAgICAgICAgICAgICAgICBbbWF4bGVuZ3RoXT1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5wbGFpblRleHRQcm9wZXJ0aWUubWF4Tm9PZkxldHRlclwiIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wyIGZvcm0tY29udHJvbC1zb2xpZFwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgdGV4dC1kYW5nZXJcIiAqbmdJZj1cImFwaUVycm9yW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdXCI+XHJcbiAgICAgICAgICAgICAgICB7e2FwaUVycm9yW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gZm9yIE51bWJlciAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiICpuZ0lmPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmZpZWxkRGF0YVR5cGUgPT09ICdudW1iZXInXCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwiYW5zd2Vyc1tnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiIChpbnB1dCk9XCJvblN1Ym1pdCgnaW5wdXRDaGFuZ2UnKTtcIlxyXG4gICAgICAgICAgICAgICAgW21pbl09XCJnZXRRdWVzdGlvbihxdWVzdGlvbikubnVtYmVyUHJvcGVydGllLnN0YXJ0XCIgW21heF09XCJnZXRRdWVzdGlvbihxdWVzdGlvbikubnVtYmVyUHJvcGVydGllLmVuZFwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiIGNsYXNzPVwiZm9ybS1jb250cm9sMSBmb3JtLWNvbnRyb2wtc29saWRcIiB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJpc051bWVyaWMoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHRleHQtZGFuZ2VyXCIgKm5nSWY9XCJhcGlFcnJvcltnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiPlxyXG4gICAgICAgICAgICAgICAge3thcGlFcnJvcltnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXX19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIGZvciBEYXRlIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGRpc3AtZmxleFwiICpuZ0lmPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmZpZWxkRGF0YVR5cGUgPT09ICdkYXRlJ1wiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbDFcIiBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIiBbbWF4XT1cImdldE1heGRhdGUocXVlc3Rpb24pXCJcclxuICAgICAgICAgICAgICAgIFttaW5dPVwiZ2V0TWluZGF0ZShxdWVzdGlvbilcIiBbKG5nTW9kZWwpXT1cImFuc3dlcnNbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIlxyXG4gICAgICAgICAgICAgICAgKGRhdGVDaGFuZ2UpPVwib25TdWJtaXQoJ2lucHV0Q2hhbmdlJylcIiBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicGlja2VyLm9wZW4oKVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwicGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXIgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIj48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHRleHQtZGFuZ2VyXCIgKm5nSWY9XCJhcGlFcnJvcltnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiPlxyXG4gICAgICAgICAgICAgICAge3thcGlFcnJvcltnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXX19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIGZvciBEYXRhZ3JpZCAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmUxXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWVsZERhdGFUeXBlID09PSAnZGF0YUdyaWQnICYmIGRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3RbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV0gJiYgZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdFtnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXS5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtaGVhZC1jdXN0b20gdGFibGUtaGVhZC1iZyB0YWJsZS1ib3JkZXJsZXNzIHRhYmxlLXZlcnRpY2FsLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBnZXRRdWVzdGlvbihxdWVzdGlvbikuZGF0YUdyaWRQcm9wZXJ0aWVzLmRhdGFHcmlkQ29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7Y29sdW1uLmNvbHVtbklkfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCIhYnV0dG9uRGlzYWJsZSAmJiAhZGlzYWJsZUlucHV0KCkgJiYgIXNob3dEYXRhR3JpZFtnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCIhYnV0dG9uRGlzYWJsZSAmJiAhZGlzYWJsZUlucHV0KCkgJiYgIXNob3dEYXRhR3JpZFtnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdFtnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXTtsZXQgaSA9aW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGRhdGEgb2YgY29sdW1uIHwga2V5dmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRDb2x1bW5UeXBlKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5kYXRhR3JpZFByb3BlcnRpZXMuZGF0YUdyaWRDb2x1bW5zLCBkYXRhLmtleSkgPT09ICdkYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2RhdGEudmFsdWUgfCBkYXRlIDogbmV3VGltZURhdGVGb3JtYXR9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0Q29sdW1uVHlwZShnZXRRdWVzdGlvbihxdWVzdGlvbikuZGF0YUdyaWRQcm9wZXJ0aWVzLmRhdGFHcmlkQ29sdW1ucywgZGF0YS5rZXkpID09PSAnYm9vbCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tnZXRCb29sVmFsdWUoZGF0YS52YWx1ZSl9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0Q29sdW1uVHlwZShnZXRRdWVzdGlvbihxdWVzdGlvbikuZGF0YUdyaWRQcm9wZXJ0aWVzLmRhdGFHcmlkQ29sdW1ucywgZGF0YS5rZXkpICE9PSAnZGF0ZScgJiYgZ2V0Q29sdW1uVHlwZShnZXRRdWVzdGlvbihxdWVzdGlvbikuZGF0YUdyaWRQcm9wZXJ0aWVzLmRhdGFHcmlkQ29sdW1ucywgZGF0YS5rZXkpICE9PSAnYm9vbCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tkYXRhLnZhbHVlfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwiIWJ1dHRvbkRpc2FibGUgJiYgIWRpc2FibGVJbnB1dCgpICYmICFzaG93RGF0YUdyaWRbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGVuXCIgKGNsaWNrKT1cImVkaXREYXRhR3JpZChnZXRRdWVzdGlvbihxdWVzdGlvbiksIGNvbHVtbilcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCIhYnV0dG9uRGlzYWJsZSAmJiAhZGlzYWJsZUlucHV0KCkgJiYgIXNob3dEYXRhR3JpZFtnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10cmFzaFwiIChjbGljayk9XCJkZWxldGVEYXRhR3JpZChnZXRRdWVzdGlvbihxdWVzdGlvbiksIGNvbHVtbilcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkU2VjdGlvblwiICpuZ0lmPVwic2hvd0RhdGFHcmlkW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRDb2x1bW5cIiAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5kYXRhR3JpZFByb3BlcnRpZXMuZGF0YUdyaWRDb2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWw+e3tjb2x1bW4ubGFiZWx9fVxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlZFwiICpuZ0lmPVwiY29sdW1uLm1hbmRhdG9yeVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBmb3IgY2hlY2tib3ggLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICdsaXN0J1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3gtbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNoZWNrYm94XCIgKm5nRm9yPVwibGV0IHZhbHVlIG9mIGNvbHVtbi5saXN0UHJvcGVydGllLnZhbHVlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cImlzQ2hlY2tlZCh2YWx1ZSwgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCBjb2x1bW4pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJsaXN0Q2hhbmdlKCRldmVudCwgdmFsdWUsIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSwgY29sdW1uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7e3ZhbHVlfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSBmb3IgdG9nZ2VsIGJvb2xlYW4gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICdib29sJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmFkaW8tbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInJhZGlvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0Jvb2xlYW5DaGVja2VkKCd5ZXMnLCBnZXRRdWVzdGlvbihxdWVzdGlvbiksIGNvbHVtbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImJvb2xlYW5DaGFuZ2UoJGV2ZW50LCAneWVzJywgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCBjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICBZZXNcclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInJhZGlvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0Jvb2xlYW5DaGVja2VkKCdubycsIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSwgY29sdW1uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiYm9vbGVhbkNoYW5nZSgkZXZlbnQsICdubycsIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSwgY29sdW1uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgTm9cclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSBmb3IgVGV4dCAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiAqbmdJZj1cImNvbHVtbi5kYXRhVHlwZSA9PT0gJ3BsYWluVGV4dCdcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwiZGF0YUdyaWRDb2x1bW5zW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiIGNsYXNzPVwiZm9ybS1jb250cm9sMSBmb3JtLWNvbnRyb2wtc29saWRcIiB0eXBlPVwidGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIGZvciBOdW1iZXIgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICdudW1iZXInXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cImRhdGFHcmlkQ29sdW1uc1tnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIiBbbWluXT1cImNvbHVtbi5udW1iZXJQcm9wZXJ0aWUuc3RhcnRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFttYXhdPVwiY29sdW1uLm51bWJlclByb3BlcnRpZS5lbmRcIiBjbGFzcz1cImZvcm0tY29udHJvbDEgZm9ybS1jb250cm9sLXNvbGlkXCIgdHlwZT1cIm51bWJlclwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIGZvciBEYXRlIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkaXNwLWZsZXhcIiAqbmdJZj1cImNvbHVtbi5kYXRhVHlwZSA9PT0gJ2RhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbDFcIiBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIiBbbWF4XT1cImdldE1heGRhdGUocXVlc3Rpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICBbbWluXT1cImdldE1pbmRhdGUocXVlc3Rpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRhdGFHcmlkQ29sdW1uc1tnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIiAoY2xpY2spPVwicGlja2VyLm9wZW4oKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cInBpY2tlclwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI3BpY2tlciBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdC1idG5zXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHQtcHJpbWFyeSBmb250LXdlaWdodC1ib2xkXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbEFkZG9yVXBkYXRlKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSlcIj5cclxuICAgICAgICAgICAgICAgICAgQ2FuY2VsXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGZvbnQtd2VpZ2h0LWJvbGRcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZURhdGFHcmlkQ29sdW1uKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSlcIj5BZGQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgY29sLTEyIGNvbC1zbS0xMiBjb2wtbGctMTIgbm8tcGFkZGluZyBzdWJtaXQtcGFkXCJcclxuICAgICAgICAqbmdJZj1cInR5cGUgIT09ICdxbnJMaW5rUHJvdmlkZXInICYmIHNvdXJjZSE9PSdwcm9MZWFkJyAmJiAodXVpZCB8fCBzb3VyY2UgPT09ICdjdXN0b21lci1kZXRhaWxzJyB8fCBzb3VyY2UgPT09ICdwcm9Eb25hdGlvbicpICYmICFkaXNhYmxlSW5wdXQoKVwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJub3JtYWwtYnRuXCIgbWF0LWZsYXQtYnV0dG9uIFtjbGFzcy5zcGlubmVyXT1cImJ1dHRvbkRpc2FibGVcIlxyXG4gICAgICAgICAgW2NsYXNzLnNwaW5uZXItZGFya2VyLXN1Y2Nlc3NdPVwiYnV0dG9uRGlzYWJsZVwiIFtjbGFzcy5zcGlubmVyLWNlbnRlcl09XCJidXR0b25EaXNhYmxlXCJcclxuICAgICAgICAgIChjbGljayk9XCIhYnV0dG9uRGlzYWJsZSAmJiBvblN1Ym1pdCgnc3VibWl0JylcIiBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZVwiXHJcbiAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZVwiPnt7KHR5cGUgPT0gJ3Fuci1saW5rJykgPyAnU3VibWl0JyA6ICdVcGRhdGUnfX08L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9zZWN0aW9uPlxyXG48a3MtbW9kYWwtZ2FsbGVyeSBbaWRdPVwiMFwiICpuZ0lmPVwiaW1hZ2VfbGlzdF9wb3B1cCAmJiBpbWFnZV9saXN0X3BvcHVwLmxlbmd0aD4wXCIgW21vZGFsSW1hZ2VzXT1cImltYWdlX2xpc3RfcG9wdXBcIlxyXG4gIFtwbGFpbkdhbGxlcnlDb25maWddPVwiY3VzdG9tUGxhaW5HYWxsZXJ5Um93Q29uZmlnXCIgW2J1dHRvbnNDb25maWddPVwiY3VzdG9tQnV0dG9uc0ZvbnRBd2Vzb21lQ29uZmlnXCJcclxuICAoYnV0dG9uQmVmb3JlSG9vayk9XCJvbkJ1dHRvbkJlZm9yZUhvb2soJGV2ZW50KVwiPjwva3MtbW9kYWwtZ2FsbGVyeT5cclxuPHNlY3Rpb24gY2xhc3M9XCJjb25zLWluYm94IG5vLXBhZGRpbmctc21hbGxcIiAqbmdJZj1cInNob3dzZXJ2aWNlXCI+XHJcbiAgPGRpdiBjbGFzcz1cImNvbnRhaW5lciBjb25zdW1lci1kYXNoaG9tZSBuby1wYWRkaW5nIG5vLXBhZGRpbmctc21hbGxcIiAqbmdJZj1cIiF0eXBlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZCB0aXRsZS1nYiByb3VuZGVkLTBcIiAqbmdJZj1cInV1aWRcIj5cclxuICAgICAgPGg1IGNsYXNzPVwibWduLXVwLTEwIGJvbGRcIj57e3F1ZXN0aW9ubmFpcmVfaGVhZGluZyB8IGNhcGl0YWxpemVGaXJzdH19IDxhIGNsYXNzPVwicHVsbC1sZWZ0IG1nbi1ydC0yMCBiYWNrLWJ0blwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiZ29CYWNrKClcIj48aSBjbGFzcz1cImZhIGZhLWFycm93LWxlZnRcIj48L2k+PC9hPjwvaDU+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8YXBwLWNvbW1vbi1pbm5lcmxvYWRpbmctc3Bpbm5lciAqbmdJZj1cImxvYWRpbmdcIj48L2FwcC1jb21tb24taW5uZXJsb2FkaW5nLXNwaW5uZXI+XHJcbiAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbi1mbHVpZCBwdWxsLXJpZ2h0IG1nbi1ydC0xMCBtZ24tYnQtMjBcIlxyXG4gICAgKm5nSWY9XCJ0eXBlICE9PSAncW5yTGlua1Byb3ZpZGVyJyAmJiAhYnV0dG9uRGlzYWJsZSAmJiB3YWl0bGlzdFN0YXR1c1wiPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cIm5vcm1hbC1idG4gZWRpdFwiIG1hdC1mbGF0LWJ1dHRvbiAoY2xpY2spPVwiZWRpdFFucigpXCI+RWRpdDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4tZmx1aWQgd2lkdGgtMTAwXCIgW2NsYXNzLnFuckRpc2FibGVTdGF0ZV09XCJkaXNhYmxlSW5wdXQoKVwiXHJcbiAgICBbY2xhc3Mubm8tcGFkZGluZ109XCJ1dWlkICYmIChzb3VyY2UgPT09ICdjb25zQ2hlY2tpbicgfHwgc291cmNlID09PSAnY29uc0FwcHQnIHx8IHNvdXJjZSA9PT0gJ2NvbnNEb25hdGlvbkRldGFpbHMnIClcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wteGwtMTIgZm9yY2VfY2VudGVyIG5vLXBhZGRpbmdcIiBbY2xhc3Mubm8tcGFkZGluZ109XCJ1dWlkXCJcclxuICAgICAgW2NsYXNzLm5vLXBhZGRpbmctc21hbGxdPVwic291cmNlICYmIHNvdXJjZT09J2l2cidcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJcIiAqbmdGb3I9XCJsZXQgcW5yIG9mIGdyb3VwZWRRbnIgfCBrZXl2YWx1ZVwiIFtjbGFzcy5zZWN0aW9uLXNoYWRvd109XCJnZXRTZWN0aW9uQ291bnQoKSA+IDFcIj5cclxuICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInFuci1zZWN0aW9uXCIgKm5nSWY9XCJnZXRTZWN0aW9uQ291bnQoKSA+IDFcIj57e3Fuci5rZXl9fTwvZGl2PiAtLT5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtQXJyYXkubGVuZ3RoID09IDAgXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1nbi0wIGJvcmRlci1kYXNoZWQgdGV4dC1jZW50ZXJcIiAqbmdGb3I9XCJsZXQgcXVlc3Rpb24gb2YgcW5yLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInFuci1zZWN0aW9uXCIgKm5nSWY9XCJnZXRTZWN0aW9uQ291bnQoKSA+IDFcIj5cclxuICAgICAgICAgICAgICAgIHt7Z2V0UXVlc3Rpb24ocXVlc3Rpb24pLnF1ZXN0aW9uLnNlY3Rpb25OYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtMTIgcXVlc3QgcG9pbnRlci1jdXJzb3JcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dEYXRhR3JpZEFkZFNlY3Rpb25uKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5xdWVzdGlvbiwgdHJ1ZSlcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3tnZXRRdWVzdGlvbihxdWVzdGlvbikucXVlc3Rpb24ubGFiZWx9fSAtLT5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInB1bGwtcmlnaHQgYnRuIGJ0bi1wcmltYXJ5IGZvbnQtd2VpZ2h0LWJvbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RGF0YUdyaWRBZGRTZWN0aW9ubihnZXRRdWVzdGlvbihxdWVzdGlvbikucXVlc3Rpb24sIHRydWUpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgZmEtcGx1cyBhZGQtcGx1c1wiPjwvaT5BZGQgSXRlbVxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIi4vYXNzZXRzL2ltYWdlcy9zZXJ2aWNlLW9wdGlvbnMuc3ZnXCIgYWx0PVwiU2VydmljZSBPcHRpb25zXCIgY2xhc3M9XCJpbWctZmx1aWQgcGItMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIzMDBcIiBoZWlnaHQ9XCIzMDBcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByby1vbmx5XCIgKm5nSWY9XCJzaG93UHJvdmlkZXJUZXh0KGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5xdWVzdGlvbilcIj5Gb3IgUHJvdmlkZXJzPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlZFwiICpuZ0lmPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLnF1ZXN0aW9uLm1hbmRhdG9yeVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJmb3JtLWxldmVsLXNldHRpbmdzXCIgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikucXVlc3Rpb24uaGludFwiPlxyXG4gICAgICAgICAgICAgICAgICB7e2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5xdWVzdGlvbi5oaW50fX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1wcmltYXJ5IGZvbnQtd2VpZ2h0LWJvbGRcIj5QbGVhc2UgQ2hvb3NlIHlvdXIgUGV0PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ0biBidG4tbGlnaHQgZm9udC13ZWlnaHQtYm9sZFwiPkNvbnRpbnVlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIHt7aXRlbUFycmF5IHwganNvbn19IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgY29sLTEyIGNvbC1zbS0xMiBtZ24tYnQtMTIgbm8tcGFkZGluZ1wiICpuZ0lmPVwic2hvd0l0ZW1cIj5cclxuXHJcblxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9yZGVyXCIgKm5nRm9yPVwiIGxldCBpdGVtcyBvZiBpdGVtQXJyYXlcIj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2FwaXRhbGl6ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1wcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbXMuaXRlbX19PGJyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cImRpc3Atbm9uZS1zbWFsbFwiPiZuYnNwOy0mbmJzcDs8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRpc3Atbm9uZS1sYXJnZVwiPjxicj48L3NwYW4+IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGJvcmRlci1hcHBseSBweC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImRlY3JlbWVudChpdGVtcyk7XCIgY2xhc3M9XCJwb2ludGVyLWN1cnNvciBxdWFudGl0eSBxdWFudGl0eS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLTEwXCI+LTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0yIHBvaW50ZXItY3Vyc29yXCI+PHNwYW4gY2xhc3M9XCJxdWFudGl0eVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW1zICYmIGl0ZW1zLmNvbHVtbkl0ZW0gJiYgaXRlbXMuY29sdW1uSXRlbVswXSAmJiBpdGVtcy5jb2x1bW5JdGVtWzBdLmFuc3dlciAmJiBpdGVtcy5jb2x1bW5JdGVtWzBdLmFuc3dlci5kYXRhR3JpZExpc3QgJiYgaXRlbXMuY29sdW1uSXRlbVswXS5hbnN3ZXIuZGF0YUdyaWRMaXN0WzBdICYmIGl0ZW1zLmNvbHVtbkl0ZW1bMF0uYW5zd2VyLmRhdGFHcmlkTGlzdFswXS5kYXRhR3JpZExpc3RDb2x1bW4gJiYgaXRlbXMuY29sdW1uSXRlbVswXS5hbnN3ZXIuZGF0YUdyaWRMaXN0WzBdLmRhdGFHcmlkTGlzdENvbHVtblswXSAmJiBpdGVtcy5jb2x1bW5JdGVtWzBdLmFuc3dlci5kYXRhR3JpZExpc3RbMF0uZGF0YUdyaWRMaXN0Q29sdW1uWzBdLnF1YW50aXR5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW1zLmNvbHVtbkl0ZW1bMF0uYW5zd2VyLmRhdGFHcmlkTGlzdFswXS5kYXRhR3JpZExpc3RDb2x1bW5bMF0ucXVhbnRpdHl9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImluY3JlbWVudChpdGVtcyk7XCIgY2xhc3M9XCJwb2ludGVyLWN1cnNvciBxdWFudGl0eSBxdWFudGl0eS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLTEwXCI+Kzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXByaW1hcnlcIj48c3Bhbj48aSBjbGFzcz1cImZhIGZhLWluclwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICB7e2l0ZW1zLnByaWNlICogZ2V0SXRlbVF1YW50aXR5KGl0ZW1zKX19Ly1cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwhLS0gPGRpdiAoY2xpY2spPVwicW5yUG9wdXAoaXRlbXMsICdlZGl0Jyk7XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGluayBmb250LXdlaWdodC1ib2xkXCI+PHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgRWRpdCpcclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xlYXJmaXhcIj48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dJdGVtICYmaXRlbUFycmF5Lmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBxbnIgb2YgZ3JvdXBlZFFuciB8IGtleXZhbHVlXCIgW2NsYXNzLnNlY3Rpb24tc2hhZG93XT1cImdldFNlY3Rpb25Db3VudCgpID4gMVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcXVlc3Rpb24gb2YgcW5yLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC0xMiBxdWVzdCBwb2ludGVyLWN1cnNvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dEYXRhR3JpZEFkZFNlY3Rpb25uKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5xdWVzdGlvbiwgdHJ1ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ0biBidG4tbGlnaHQgZm9udC13ZWlnaHQtYm9sZFwiPjxpIGNsYXNzPVwiZmEgZmEtcGx1cyB0ZXh0LXdoaXRlXCI+PC9pPkFkZDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgPC9kaXY+XHJcblxyXG48L3NlY3Rpb24+XHJcblxyXG48IS0tIDxrcy1tb2RhbC1nYWxsZXJ5IFtpZF09XCIwXCIgKm5nSWY9XCJpbWFnZV9saXN0X3BvcHVwICYmIGltYWdlX2xpc3RfcG9wdXAubGVuZ3RoPjBcIiBbbW9kYWxJbWFnZXNdPVwiaW1hZ2VfbGlzdF9wb3B1cFwiXHJcbiAgW3BsYWluR2FsbGVyeUNvbmZpZ109XCJjdXN0b21QbGFpbkdhbGxlcnlSb3dDb25maWdcIiBbYnV0dG9uc0NvbmZpZ109XCJjdXN0b21CdXR0b25zRm9udEF3ZXNvbWVDb25maWdcIlxyXG4gIChidXR0b25CZWZvcmVIb29rKT1cIm9uQnV0dG9uQmVmb3JlSG9vaygkZXZlbnQpXCI+PC9rcy1tb2RhbC1nYWxsZXJ5PiAtLT4iXX0=
|