@james_jayaraj/test-npm 1.5.1 → 1.5.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.
Files changed (52) hide show
  1. package/_hola-rx.styles.scss +2653 -2653
  2. package/{fesm2020 → fesm2022}/james_jayaraj-test-npm.mjs +8323 -8223
  3. package/fesm2022/james_jayaraj-test-npm.mjs.map +1 -0
  4. package/index.d.ts +5 -5
  5. package/lib/alert-popup/alert-popup.component.d.ts +17 -17
  6. package/lib/brand-include/available-formulations/available-formulations.component.d.ts +33 -33
  7. package/lib/brand-include/brand-include.component.d.ts +15 -15
  8. package/lib/cease-popup/cease-popup.component.d.ts +30 -30
  9. package/lib/close-popup/close-popup.component.d.ts +20 -20
  10. package/lib/confirm-patient-contact-details/confirm-patient-contact-details.component.d.ts +26 -26
  11. package/lib/environments/config.d.ts +315 -315
  12. package/lib/environments/environment.d.ts +4 -4
  13. package/lib/hola-rx.component.d.ts +38 -38
  14. package/lib/hola-rx.module.d.ts +23 -23
  15. package/lib/hola-rx.service.d.ts +6 -6
  16. package/lib/is-authority/is-authority.component.d.ts +14 -14
  17. package/lib/password/password.component.d.ts +20 -20
  18. package/lib/real-time-prescription-monitoring/real-time-prescription-monitoring.component.d.ts +14 -14
  19. package/lib/referral-rx/referral-rx.component.d.ts +23 -23
  20. package/lib/reissue-popup/reissue-popup.component.d.ts +26 -26
  21. package/lib/rx/rx.component.d.ts +256 -256
  22. package/lib/services/api.service.d.ts +17 -17
  23. package/lib/services/common.d.ts +152 -152
  24. package/lib/splashscreen/splashscreen.component.d.ts +9 -9
  25. package/package.json +3 -11
  26. package/public-api.d.ts +3 -3
  27. package/styles/style.css +8 -8
  28. package/esm2020/james_jayaraj-test-npm.mjs +0 -5
  29. package/esm2020/lib/alert-popup/alert-popup.component.mjs +0 -51
  30. package/esm2020/lib/brand-include/available-formulations/available-formulations.component.mjs +0 -258
  31. package/esm2020/lib/brand-include/brand-include.component.mjs +0 -43
  32. package/esm2020/lib/cease-popup/cease-popup.component.mjs +0 -125
  33. package/esm2020/lib/close-popup/close-popup.component.mjs +0 -102
  34. package/esm2020/lib/confirm-patient-contact-details/confirm-patient-contact-details.component.mjs +0 -141
  35. package/esm2020/lib/environments/config.mjs +0 -246
  36. package/esm2020/lib/environments/environment.mjs +0 -5
  37. package/esm2020/lib/hola-rx.component.mjs +0 -904
  38. package/esm2020/lib/hola-rx.module.mjs +0 -67
  39. package/esm2020/lib/hola-rx.service.mjs +0 -14
  40. package/esm2020/lib/is-authority/is-authority.component.mjs +0 -46
  41. package/esm2020/lib/password/password.component.mjs +0 -101
  42. package/esm2020/lib/real-time-prescription-monitoring/real-time-prescription-monitoring.component.mjs +0 -32
  43. package/esm2020/lib/referral-rx/referral-rx.component.mjs +0 -147
  44. package/esm2020/lib/reissue-popup/reissue-popup.component.mjs +0 -182
  45. package/esm2020/lib/rx/rx.component.mjs +0 -5029
  46. package/esm2020/lib/services/api.service.mjs +0 -111
  47. package/esm2020/lib/services/common.mjs +0 -759
  48. package/esm2020/lib/splashscreen/splashscreen.component.mjs +0 -16
  49. package/esm2020/public-api.mjs +0 -7
  50. package/fesm2015/james_jayaraj-test-npm.mjs +0 -8298
  51. package/fesm2015/james_jayaraj-test-npm.mjs.map +0 -1
  52. package/fesm2020/james_jayaraj-test-npm.mjs.map +0 -1
@@ -1,904 +0,0 @@
1
- import { Component, ViewChild } from '@angular/core';
2
- import { switchMap } from 'rxjs/operators';
3
- import { of, catchError } from 'rxjs';
4
- import { config, errorconfig } from './environments/config';
5
- import { environment } from './environments/environment';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "./services/common";
8
- import * as i2 from "./services/api.service";
9
- export class HolaRx {
10
- constructor(commonservice, commonLoaderServices, apiservice, Changedetect) {
11
- this.commonservice = commonservice;
12
- this.commonLoaderServices = commonLoaderServices;
13
- this.apiservice = apiservice;
14
- this.Changedetect = Changedetect;
15
- this.message = "";
16
- this.temprxid = "";
17
- this.tempreferralid = "";
18
- this.spinnerflag = false;
19
- this.authenticateBlock = false;
20
- this.setLoginterval();
21
- }
22
- ngOnInit() {
23
- }
24
- setLoginterval() {
25
- setInterval(() => {
26
- if (this.commonservice.logvalue != undefined && this.commonservice.logvalue != null && this.commonservice.logvalue != "") {
27
- this.apiservice.Post(this.commonservice.logvalue, config.CREATE_LOG_EXCEPTION).subscribe(res => {
28
- //console.log(res);
29
- this.commonservice.logvalue = null;
30
- }, err => {
31
- //console.log(err);
32
- });
33
- }
34
- }, 50000);
35
- }
36
- init(clientid, clientsecret, sandbox, flag) {
37
- try {
38
- if (!this.spinnerflag) {
39
- this.commonservice.logtransaction = "Init Authentication";
40
- this.commonservice.logidentifier = "clientid";
41
- this.commonservice.logidentifierType = "clientid";
42
- }
43
- var data = {
44
- clientId: clientid,
45
- clientSecret: clientsecret
46
- };
47
- this.commonservice.sandbox = sandbox;
48
- if (!sandbox) {
49
- environment.apiEndpoint = config.LIVE_URL;
50
- }
51
- else {
52
- environment.apiEndpoint = config.STAGING_URL;
53
- }
54
- if (!this.IsNullOrEmpty(data.clientId) && !this.IsNullOrEmpty(data.clientSecret)) {
55
- if (!this.spinnerflag && this.commonLoaderServices.rxInitLoaderHiddden)
56
- this.commonLoaderServices.addLoaderElement(true);
57
- this.authenticateBlock = true;
58
- this.Changedetect.detectChanges();
59
- return this.apiservice.Post(data, "authenticate").pipe(switchMap((res) => {
60
- try {
61
- if (res.response_code == 0) {
62
- localStorage.setItem('rxCredentials', JSON.stringify(data));
63
- localStorage.setItem('tokenExpiry', JSON.stringify(res.expiresin));
64
- this.authenticateBlock = false;
65
- this.commonservice.HolaRxToken = res.auth.access_token;
66
- if (!this.spinnerflag && this.commonLoaderServices.rxInitLoaderHiddden) {
67
- this.setTimer();
68
- }
69
- if (flag == 1) {
70
- if (this.commonLoaderServices.rxInitLoaderHiddden)
71
- this.commonLoaderServices.addLoaderElement(false);
72
- this.Changedetect.detectChanges();
73
- return this.openNewRx(this.tempRxDetails);
74
- }
75
- else if (flag == 2) {
76
- if (this.commonLoaderServices.rxInitLoaderHiddden)
77
- this.commonLoaderServices.addLoaderElement(false);
78
- this.Changedetect.detectChanges();
79
- return this.openEditRx(this.tempRxDetails);
80
- }
81
- else if (flag == 3) {
82
- if (this.commonLoaderServices.rxInitLoaderHiddden)
83
- this.commonLoaderServices.addLoaderElement(false);
84
- this.Changedetect.detectChanges();
85
- return this.openReferral(this.tempRxDetails);
86
- }
87
- else if (flag == 4) {
88
- if (this.commonLoaderServices.rxInitLoaderHiddden)
89
- this.commonLoaderServices.addLoaderElement(false);
90
- this.Changedetect.detectChanges();
91
- return this.downloadRx(this.temprxid);
92
- }
93
- else if (flag == 5) {
94
- if (this.commonLoaderServices.rxInitLoaderHiddden)
95
- this.commonLoaderServices.addLoaderElement(false);
96
- this.Changedetect.detectChanges();
97
- return this.downloadReferral(this.tempreferralid);
98
- }
99
- if (!res.flag) {
100
- this.commonLoaderServices.addLoaderElement(false);
101
- this.Changedetect.detectChanges();
102
- this.commonservice.setlogvalue(true, res.response_message, res.response_message, "HolaRx", "init");
103
- if (!this.spinnerflag && this.commonLoaderServices.rxInitLoaderHiddden)
104
- this.commonservice.toastopen(res.response_message, "error", res.error_code);
105
- return this.errorResponse(res.error_code, res.response_message);
106
- }
107
- if (!this.spinnerflag && this.commonLoaderServices.rxInitLoaderHiddden)
108
- this.commonLoaderServices.addLoaderElement(false);
109
- this.Changedetect.detectChanges();
110
- return this.errorResponse("", res.response_message, true);
111
- }
112
- else {
113
- this.authenticateBlock = false;
114
- this.commonLoaderServices.addLoaderElement(false);
115
- this.Changedetect.detectChanges();
116
- this.commonservice.setlogvalue(true, res.response_message, res.response_message, "HolaRx", "init");
117
- if (!this.spinnerflag && this.commonLoaderServices.rxInitLoaderHiddden)
118
- this.commonservice.toastopen(res.response_message, "error", res.error_code);
119
- return this.errorResponse(res.error_code, res.response_message);
120
- }
121
- }
122
- catch (ex) {
123
- this.authenticateBlock = false;
124
- this.commonLoaderServices.addLoaderElement(false);
125
- this.Changedetect.detectChanges();
126
- this.commonservice.setlogvalue(true, ex.message, ex.stack, "HolaRx", "init");
127
- return this.errorResponse(errorconfig.error_64.code, errorconfig.error_64.message);
128
- }
129
- }), catchError((error) => {
130
- this.authenticateBlock = false;
131
- this.commonLoaderServices.addLoaderElement(false);
132
- this.Changedetect.detectChanges();
133
- if (!this.spinnerflag && this.commonLoaderServices.rxInitLoaderHiddden)
134
- this.commonservice.toastopen(errorconfig.error_65.message + error, "error", errorconfig.error_65.code);
135
- this.commonservice.setlogvalue(true, error.message, error.stack, "HolaRx", "init");
136
- return this.errorResponse(errorconfig.error_65.code, errorconfig.error_65.message + error);
137
- }));
138
- }
139
- else {
140
- this.authenticateBlock = false;
141
- this.commonLoaderServices.addLoaderElement(false);
142
- this.Changedetect.detectChanges();
143
- if (!this.spinnerflag && this.commonLoaderServices.rxInitLoaderHiddden)
144
- this.commonservice.toastopen(errorconfig.error_1.message, "error", errorconfig.error_1.code);
145
- this.commonservice.setlogvalue(true, errorconfig.error_1.message, errorconfig.error_1.message, "HolaRx", "init");
146
- return this.errorResponse(errorconfig.error_1.code, errorconfig.error_1.message);
147
- }
148
- }
149
- catch (ex) {
150
- this.authenticateBlock = false;
151
- this.commonLoaderServices.addLoaderElement(false);
152
- this.Changedetect.detectChanges();
153
- this.commonservice.setlogvalue(true, ex.message, ex.stack, "HolaRx", "init");
154
- return this.errorResponse(errorconfig.error_64.code, errorconfig.error_64.message);
155
- }
156
- }
157
- setTimer() {
158
- try {
159
- setInterval(() => {
160
- var data = JSON.parse(localStorage.getItem('rxCredentials'));
161
- var expiry = JSON.parse(localStorage.getItem('tokenExpiry'));
162
- if (data != null && !this.IsNullOrEmpty(data.clientId) && !this.IsNullOrEmpty(data.clientSecret) && !this.IsNullOrEmpty(expiry) && window.navigator.onLine && !this.authenticateBlock && (new Date(new Date(expiry).setMinutes(new Date(expiry).getMinutes() - 1)) <= new Date() || this.apiservice.unAuthorizedFlag)) {
163
- this.apiservice.unAuthorizedFlag = false;
164
- this.spinnerflag = true;
165
- this.init(data.clientId, data.clientSecret, this.commonservice.sandbox).subscribe(res => {
166
- //console.log(res);
167
- }, err => {
168
- this.commonservice.setlogvalue(true, err.message, err.stack, "HolaRx", "setTimer");
169
- });
170
- }
171
- }, 1000);
172
- }
173
- catch (ex) {
174
- this.commonservice.setlogvalue(true, ex.message, ex.stack, "HolaRx", "setTimer");
175
- }
176
- }
177
- openNewRx(RxDetails) {
178
- this.commonLoaderServices.rxInitLoaderHiddden = false;
179
- this.commonservice.logtransaction = "New Rx";
180
- this.commonservice.logidentifier = !this.IsNullOrEmpty(RxDetails) ? !this.IsNullOrEmpty(RxDetails.practitioner) ? !this.IsNullOrEmpty(RxDetails.practitioner.email) ? RxDetails.practitioner.email : "" : "" : "";
181
- this.commonservice.logidentifierType = "practitioner email";
182
- try {
183
- RxDetails.type = "1";
184
- RxDetails.clientId = this.commonservice.getCredetial();
185
- this.tempRxDetails = RxDetails;
186
- this.auditlog(JSON.stringify(RxDetails), config.CREATE_CONSULTATION);
187
- if (!this.IsNullOrEmpty(this.commonservice.HolaRxToken)) {
188
- if (!this.IsNullOrEmpty(RxDetails.appointmentid)) {
189
- this.appointmentValidation(RxDetails, 1);
190
- }
191
- else {
192
- this.validation(RxDetails, 1);
193
- }
194
- if (this.message != "") {
195
- this.commonLoaderServices.addLoaderElement(false);
196
- this.Changedetect.detectChanges();
197
- var res = this.commonservice.closeErrorResponse;
198
- this.commonservice.toastopen(this.message, "error", "", 7000);
199
- this.message = "";
200
- this.commonservice.closeErrorResponse = null;
201
- console.log(res);
202
- return of(res);
203
- }
204
- this.commonLoaderServices.addLoaderElement(true);
205
- this.Changedetect.detectChanges();
206
- return this.apiservice.Post(RxDetails, config.CREATE_CONSULTATION).pipe(switchMap((res) => {
207
- try {
208
- this.tempRxDetails = null;
209
- this.commonLoaderServices.addLoaderElement(false);
210
- this.Changedetect.detectChanges();
211
- if (this.IsNullOrEmpty(res)) {
212
- this.commonservice.setlogvalue(false, "", "", "HolaRx", "openNewRx", RxDetails);
213
- this.commonservice.toastopen(errorconfig.error_64.message, 'error', errorconfig.error_64.code);
214
- return this.errorResponse(errorconfig.error_64.code, errorconfig.error_64.message);
215
- }
216
- if (res.response_code == 0) {
217
- this.commonservice.consultationId = RxDetails.consultationid;
218
- this.commonservice.physicianDetails = res.physicianDetails;
219
- this.commonservice.patientDetails = res.patientDetails;
220
- this.commonservice.facilityDetails = res.facilityDetails;
221
- this.commonservice.vendorPatientId = res.vendorPatientId;
222
- this.commonservice.vendorFacilityId = res.vendorFacilityId;
223
- this.commonservice.vendorPhysicianId = res.vendorPhysicianId;
224
- this.commonservice.visitId = res.visitId;
225
- this.commonservice.createPatientResponse = res;
226
- this.commonservice.editPrescription = false;
227
- this.commonservice.pharmacyEmail = !this.IsNullOrEmpty(res.pharmacyEmail) ? res.pharmacyEmail : "";
228
- this.commonservice.isScriptToPharmacy = (!this.IsNullOrEmpty(res.isScriptToPharmacy) && res.isScriptToPharmacy) != 0 ? res.isScriptToPharmacy : 0;
229
- this.commonservice.isMedicineRestrict = !this.commonservice.IsNullOrEmpty(res.isRestrictedMedicine) ? res.isRestrictedMedicine : false;
230
- this.commonservice.enablePaperScript = res.isEnableScript;
231
- this.commonservice.enableSendPaperScriptInMail = res.isEnableScriptMail;
232
- this.commonservice.enableSendEScriptInMail = res.isEnableEscriptMail;
233
- this.commonservice.enableEScript = res.isEnableEscript;
234
- if (!this.IsNullOrEmpty(this.commonservice.physicianDetails) && !this.IsNullOrEmpty(this.commonservice.physicianDetails.ePrescriptionAllowed) && this.commonservice.physicianDetails.ePrescriptionAllowed == 0)
235
- this.HIvalidation(res);
236
- return this.commonservice.openRxWidget(this.content);
237
- }
238
- else {
239
- this.commonservice.setlogvalue(false, res.response_message, res.response_message, "HolaRx", "openNewRx", RxDetails);
240
- this.commonservice.toastopen(res.response_message, "error", res.error_code);
241
- return this.errorResponse(res.error_code, res.response_message);
242
- }
243
- }
244
- catch (ex) {
245
- this.commonLoaderServices.addLoaderElement(false);
246
- this.Changedetect.detectChanges();
247
- this.commonservice.setlogvalue(false, ex.message, ex.stack, "HolaRx", "openNewRx", RxDetails);
248
- return this.errorResponse(res.error_code, res.response_message);
249
- }
250
- }), catchError((error) => {
251
- this.commonLoaderServices.addLoaderElement(false);
252
- this.Changedetect.detectChanges();
253
- this.commonservice.toastopen(errorconfig.error_65.message + error, "error", errorconfig.error_65.code);
254
- this.commonservice.setlogvalue(false, error.message, error.stack, "HolaRx", "openNewRx", RxDetails);
255
- return this.errorResponse(errorconfig.error_65.code, errorconfig.error_65.message + error);
256
- }));
257
- }
258
- else {
259
- var data = JSON.parse(localStorage.getItem('rxCredentials'));
260
- if (data != null && !this.IsNullOrEmpty(data.clientId) && !this.IsNullOrEmpty(data.clientSecret) && this.IsNullOrEmpty(this.commonservice.HolaRxToken)) {
261
- this.commonLoaderServices.addLoaderElement(true);
262
- this.Changedetect.detectChanges();
263
- return this.init(data.clientId, data.clientSecret, this.commonservice.sandbox, 1);
264
- }
265
- this.commonLoaderServices.addLoaderElement(false);
266
- this.Changedetect.detectChanges();
267
- this.commonservice.setlogvalue(false, errorconfig.error_1.message, errorconfig.error_1.message, "HolaRx", "openNewRx", RxDetails);
268
- return this.errorResponse(errorconfig.error_1.code, errorconfig.error_1.message);
269
- }
270
- }
271
- catch (ex) {
272
- this.commonLoaderServices.addLoaderElement(false);
273
- this.Changedetect.detectChanges();
274
- this.commonservice.setlogvalue(false, ex.message, ex.stack, "HolaRx", "openNewRx", RxDetails);
275
- return this.errorResponse(errorconfig.error_64.code, errorconfig.error_64.message);
276
- }
277
- }
278
- openEditRx(RxDetails) {
279
- this.commonLoaderServices.rxInitLoaderHiddden = false;
280
- this.commonservice.logtransaction = "Edit Rx";
281
- this.commonservice.logidentifier = !this.IsNullOrEmpty(RxDetails) ? !this.IsNullOrEmpty(RxDetails.practitioner) ? !this.IsNullOrEmpty(RxDetails.practitioner.email) ? RxDetails.practitioner.email : "" : "" : "";
282
- this.commonservice.logidentifierType = "practitioner email";
283
- try {
284
- RxDetails.type = "1";
285
- RxDetails.clientId = this.commonservice.getCredetial();
286
- this.tempRxDetails = RxDetails;
287
- this.auditlog(JSON.stringify(RxDetails), config.CREATE_CONSULTATION);
288
- if (!this.IsNullOrEmpty(this.commonservice.HolaRxToken)) {
289
- if (!this.IsNullOrEmpty(RxDetails.appointmentid)) {
290
- this.appointmentValidation(RxDetails, 2);
291
- }
292
- else {
293
- this.validation(RxDetails, 2);
294
- }
295
- if (this.message != "") {
296
- this.commonLoaderServices.addLoaderElement(false);
297
- this.Changedetect.detectChanges();
298
- var res = this.commonservice.closeErrorResponse;
299
- this.commonservice.toastopen(this.message, "error", "", 7000);
300
- this.message = "";
301
- this.commonservice.closeErrorResponse = null;
302
- console.log(res);
303
- return of(res);
304
- }
305
- this.commonLoaderServices.addLoaderElement(true);
306
- this.Changedetect.detectChanges();
307
- return this.apiservice.Post(RxDetails, config.CREATE_CONSULTATION).pipe(switchMap((res) => {
308
- try {
309
- this.tempRxDetails = null;
310
- this.commonLoaderServices.addLoaderElement(false);
311
- this.Changedetect.detectChanges();
312
- if (this.IsNullOrEmpty(res)) {
313
- this.commonservice.setlogvalue(false, "", "", "HolaRx", "openEditRx", RxDetails);
314
- this.commonservice.toastopen(errorconfig.error_64.message, 'error', errorconfig.error_64.code);
315
- return this.errorResponse(errorconfig.error_64.code, errorconfig.error_64.message);
316
- }
317
- if (res.response_code == 0) {
318
- this.commonservice.physicianDetails = res.physicianDetails;
319
- this.commonservice.patientDetails = res.patientDetails;
320
- this.commonservice.facilityDetails = res.facilityDetails;
321
- this.commonservice.vendorPatientId = res.vendorPatientId;
322
- this.commonservice.vendorFacilityId = res.vendorFacilityId;
323
- this.commonservice.vendorPhysicianId = res.vendorPhysicianId;
324
- this.commonservice.visitId = res.visitId;
325
- this.commonservice.isMedicineRestrict = !this.commonservice.IsNullOrEmpty(res.isRestrictedMedicine) ? res.isRestrictedMedicine : false;
326
- this.commonservice.pharmacyEmail = !this.IsNullOrEmpty(res.pharmacyEmail) ? res.pharmacyEmail : "";
327
- this.commonservice.isScriptToPharmacy = (!this.IsNullOrEmpty(res.isScriptToPharmacy) && res.isScriptToPharmacy) != 0 ? res.isScriptToPharmacy : 0;
328
- if (RxDetails.rxid != null && RxDetails.rxid != "" && RxDetails.rxid != undefined) {
329
- if (res.rxDetails != null && res.rxDetails != "" && res.rxDetails != undefined) {
330
- this.commonservice.editPrescription = true;
331
- this.commonservice.rxDetails = res.rxDetails;
332
- this.commonservice.rxid = res.rxDetails.rxId;
333
- }
334
- else {
335
- this.commonservice.setlogvalue(false, errorconfig.error_46.message, errorconfig.error_46.message, "HolaRx", "openEditRx", RxDetails);
336
- this.commonservice.toastopen(errorconfig.error_46.message, "error", errorconfig.error_46.code);
337
- return this.errorResponse(errorconfig.error_46.code, errorconfig.error_46.message);
338
- }
339
- }
340
- this.commonservice.createPatientResponse = res;
341
- this.commonservice.enablePaperScript = res.isEnableScript;
342
- this.commonservice.enableSendPaperScriptInMail = res.isEnableScriptMail;
343
- this.commonservice.enableSendEScriptInMail = res.isEnableEscriptMail;
344
- this.commonservice.enableEScript = res.isEnableEscript;
345
- if (!this.IsNullOrEmpty(this.commonservice.physicianDetails) && !this.IsNullOrEmpty(this.commonservice.physicianDetails.ePrescriptionAllowed) && this.commonservice.physicianDetails.ePrescriptionAllowed == 0)
346
- this.HIvalidation(res);
347
- return this.commonservice.openRxWidget(this.content);
348
- }
349
- else {
350
- this.commonservice.setlogvalue(false, res.response_message, res.response_message, "HolaRx", "openEditRx", RxDetails);
351
- this.commonservice.toastopen(res.response_message, "error", res.error_code);
352
- return this.errorResponse(res.error_code, res.response_message);
353
- }
354
- }
355
- catch (ex) {
356
- this.commonLoaderServices.addLoaderElement(false);
357
- this.Changedetect.detectChanges();
358
- this.commonservice.setlogvalue(false, ex.message, ex.stack, "HolaRx", "openEditRx", RxDetails);
359
- return this.errorResponse(res.error_code, res.response_message);
360
- }
361
- }), catchError((error) => {
362
- this.commonLoaderServices.addLoaderElement(false);
363
- this.Changedetect.detectChanges();
364
- this.commonservice.toastopen(errorconfig.error_65.message + error, "error", errorconfig.error_65.code);
365
- this.commonservice.setlogvalue(false, error.message, error.stack, "HolaRx", "openEditRx", RxDetails);
366
- return this.errorResponse(errorconfig.error_65.code, errorconfig.error_65.message + error);
367
- }));
368
- }
369
- else {
370
- var data = JSON.parse(localStorage.getItem('rxCredentials'));
371
- if (data != null && !this.IsNullOrEmpty(data.clientId) && !this.IsNullOrEmpty(data.clientSecret) && this.IsNullOrEmpty(this.commonservice.HolaRxToken)) {
372
- this.commonLoaderServices.addLoaderElement(true);
373
- this.Changedetect.detectChanges();
374
- return this.init(data.clientId, data.clientSecret, this.commonservice.sandbox, 2);
375
- }
376
- this.commonLoaderServices.addLoaderElement(false);
377
- this.Changedetect.detectChanges();
378
- this.commonservice.setlogvalue(false, errorconfig.error_1.message, errorconfig.error_1.message, "HolaRx", "openEditRx", RxDetails);
379
- return this.errorResponse(errorconfig.error_1.code, errorconfig.error_1.message);
380
- }
381
- }
382
- catch (ex) {
383
- this.commonLoaderServices.addLoaderElement(false);
384
- this.Changedetect.detectChanges();
385
- this.commonservice.setlogvalue(false, ex.message, ex.stack, "HolaRx", "openEditRx", RxDetails);
386
- return this.errorResponse(errorconfig.error_64.code, errorconfig.error_64.message);
387
- }
388
- }
389
- openReferral(RxDetails) {
390
- this.commonLoaderServices.rxInitLoaderHiddden = false;
391
- this.commonservice.logtransaction = "Send Referral";
392
- this.commonservice.logidentifier = !this.IsNullOrEmpty(RxDetails) ? !this.IsNullOrEmpty(RxDetails.practitioner) ? !this.IsNullOrEmpty(RxDetails.practitioner.email) ? RxDetails.practitioner.email : "" : "" : "";
393
- this.commonservice.logidentifierType = "practitioner email";
394
- try {
395
- RxDetails.type = "2";
396
- RxDetails.clientId = this.commonservice.getCredetial();
397
- this.tempRxDetails = RxDetails;
398
- this.auditlog(JSON.stringify(RxDetails), config.CREATE_CONSULTATION);
399
- if (!this.IsNullOrEmpty(this.commonservice.HolaRxToken)) {
400
- this.validation(RxDetails, 3);
401
- if (this.message != "") {
402
- this.commonLoaderServices.addLoaderElement(false);
403
- this.Changedetect.detectChanges();
404
- var res = this.commonservice.closeErrorResponse;
405
- this.commonservice.setlogvalue(false, this.message, this.message, "HolaRx", "openReferral", RxDetails);
406
- this.commonservice.toastopen(this.message, "error", "", 7000);
407
- this.message = "";
408
- this.commonservice.closeErrorResponse = null;
409
- console.log(res);
410
- return of(res);
411
- }
412
- this.commonLoaderServices.addLoaderElement(true);
413
- this.Changedetect.detectChanges();
414
- return this.apiservice.Post(RxDetails, config.CREATE_CONSULTATION).pipe(switchMap((res) => {
415
- try {
416
- this.commonLoaderServices.addLoaderElement(false);
417
- this.Changedetect.detectChanges();
418
- if (this.IsNullOrEmpty(res)) {
419
- this.commonservice.setlogvalue(false, "", "", "HolaRx", "openReferral", RxDetails);
420
- this.commonservice.toastopen(errorconfig.error_64.message, 'error', errorconfig.error_64.code);
421
- return this.errorResponse(errorconfig.error_64.code, errorconfig.error_64.message);
422
- }
423
- if (res.response_code == 0) {
424
- this.commonservice.physicianDetails = res.physicianDetails;
425
- this.commonservice.patientDetails = res.patientDetails;
426
- this.commonservice.facilityDetails = res.facilityDetails;
427
- this.commonservice.vendorPatientId = res.vendorPatientId;
428
- this.commonservice.vendorFacilityId = res.vendorFacilityId;
429
- this.commonservice.vendorPhysicianId = res.vendorPhysicianId;
430
- this.commonservice.visitId = res.visitId;
431
- this.commonservice.isMedicineRestrict = !this.commonservice.IsNullOrEmpty(res.isRestrictedMedicine) ? res.isRestrictedMedicine : false;
432
- this.commonservice.pharmacyEmail = !this.IsNullOrEmpty(res.pharmacyEmail) ? res.pharmacyEmail : "";
433
- this.commonservice.isScriptToPharmacy = (!this.IsNullOrEmpty(res.isScriptToPharmacy) && res.isScriptToPharmacy) != 0 ? res.isScriptToPharmacy : 0;
434
- return this.commonservice.Pathology(this.content);
435
- }
436
- else {
437
- this.commonservice.setlogvalue(false, res.response_message, res.response_message, "HolaRx", "openReferral", RxDetails);
438
- this.commonservice.toastopen(res.response_message, "error", res.error_code);
439
- return this.errorResponse(res.error_code, res.response_message);
440
- }
441
- }
442
- catch (ex) {
443
- this.commonLoaderServices.addLoaderElement(false);
444
- this.Changedetect.detectChanges();
445
- this.commonservice.setlogvalue(false, ex.message, ex.stack, "HolaRx", "openReferral", RxDetails);
446
- return this.errorResponse(res.error_code, res.response_message);
447
- }
448
- }), catchError((error) => {
449
- this.commonLoaderServices.addLoaderElement(false);
450
- this.Changedetect.detectChanges();
451
- this.commonservice.toastopen(errorconfig.error_65.message + error, "error", errorconfig.error_65.code);
452
- this.commonservice.setlogvalue(false, this.message, error.stack, "HolaRx", "openReferral", RxDetails);
453
- return this.errorResponse(errorconfig.error_65.code, errorconfig.error_65.message + error);
454
- }));
455
- }
456
- else {
457
- var data = JSON.parse(localStorage.getItem('rxCredentials'));
458
- if (data != null && !this.IsNullOrEmpty(data.clientId) && !this.IsNullOrEmpty(data.clientSecret) && this.IsNullOrEmpty(this.commonservice.HolaRxToken)) {
459
- this.commonLoaderServices.addLoaderElement(true);
460
- this.Changedetect.detectChanges();
461
- return this.init(data.clientId, data.clientSecret, this.commonservice.sandbox, 3);
462
- }
463
- this.commonLoaderServices.addLoaderElement(false);
464
- this.Changedetect.detectChanges();
465
- this.commonservice.setlogvalue(false, errorconfig.error_1.message, errorconfig.error_1.message, "HolaRx", "openReferral", RxDetails);
466
- return this.errorResponse(errorconfig.error_1.code, errorconfig.error_1.message);
467
- }
468
- }
469
- catch (ex) {
470
- this.commonLoaderServices.addLoaderElement(false);
471
- this.Changedetect.detectChanges();
472
- this.commonservice.setlogvalue(false, ex.message, ex.stack, "HolaRx", "openReferral", RxDetails);
473
- return this.errorResponse(errorconfig.error_64.code, errorconfig.error_64.message);
474
- }
475
- }
476
- downloadRx(RxID) {
477
- this.commonLoaderServices.rxInitLoaderHiddden = false;
478
- this.commonservice.logtransaction = "Download Rx";
479
- this.commonservice.logidentifier = RxID;
480
- this.commonservice.logidentifierType = "rxid";
481
- var payload = {};
482
- try {
483
- this.temprxid = RxID;
484
- var clientId = this.commonservice.getCredetial();
485
- payload = {
486
- request_type: "parameter",
487
- rxid: RxID,
488
- type: "0",
489
- clientId: clientId
490
- };
491
- this.auditlog(JSON.stringify(payload), config.PHYSICIAN.RX_PRINT + RxID + "&type=0&clientId=" + clientId);
492
- if (!this.IsNullOrEmpty(this.commonservice.HolaRxToken)) {
493
- if (this.IsNullOrEmpty(RxID)) {
494
- this.commonservice.toastopen(errorconfig.error_46.message, "error", errorconfig.error_46.code);
495
- return this.errorResponse(errorconfig.error_46.code, errorconfig.error_46.message);
496
- }
497
- this.commonLoaderServices.addLoaderElement(true);
498
- this.Changedetect.detectChanges();
499
- return this.apiservice.Get(config.PHYSICIAN.RX_PRINT + RxID + "&type=0&clientId=" + clientId).pipe(switchMap((response) => {
500
- try {
501
- if (this.IsNullOrEmpty(response)) {
502
- this.commonservice.setlogvalue(false, "", "", "HolaRx", "downloadRx", payload);
503
- this.commonLoaderServices.addLoaderElement(false);
504
- this.Changedetect.detectChanges();
505
- this.commonservice.toastopen(errorconfig.error_64.message, 'error', errorconfig.error_64.code);
506
- return this.errorResponse(errorconfig.error_64.code, errorconfig.error_64.message);
507
- }
508
- if (response.response_code == 0) {
509
- this.commonDownload(response);
510
- return this.errorResponse("", response.response_message, true);
511
- }
512
- else {
513
- this.commonLoaderServices.addLoaderElement(false);
514
- this.Changedetect.detectChanges();
515
- this.commonservice.setlogvalue(false, response.response_message, response.response_message, "HolaRx", "downloadRx", payload);
516
- this.commonservice.toastopen(response.response_message, 'error', response.error_code);
517
- return this.errorResponse(response.error_code, response.response_message);
518
- }
519
- }
520
- catch (ex) {
521
- this.commonLoaderServices.addLoaderElement(false);
522
- this.Changedetect.detectChanges();
523
- this.commonservice.setlogvalue(false, ex.message, ex.stack, "HolaRx", "downloadRx", payload);
524
- return this.errorResponse(response.error_code, response.response_message);
525
- }
526
- }), catchError((error) => {
527
- this.commonLoaderServices.addLoaderElement(false);
528
- this.Changedetect.detectChanges();
529
- this.commonservice.toastopen(errorconfig.error_65.message + error, "error", errorconfig.error_65.code);
530
- this.commonservice.setlogvalue(false, error.message, error.stack, "HolaRx", "downloadRx", payload);
531
- return this.errorResponse(errorconfig.error_65.code, errorconfig.error_65.message + error);
532
- }));
533
- }
534
- else {
535
- var data = JSON.parse(localStorage.getItem('rxCredentials'));
536
- if (data != null && !this.IsNullOrEmpty(data.clientId) && !this.IsNullOrEmpty(data.clientSecret) && this.IsNullOrEmpty(this.commonservice.HolaRxToken)) {
537
- this.commonLoaderServices.addLoaderElement(true);
538
- this.Changedetect.detectChanges();
539
- return this.init(data.clientId, data.clientSecret, this.commonservice.sandbox, 4);
540
- }
541
- this.commonLoaderServices.addLoaderElement(false);
542
- this.Changedetect.detectChanges();
543
- this.commonservice.setlogvalue(false, errorconfig.error_1.message, errorconfig.error_1.message, "HolaRx", "downloadRx", payload);
544
- return this.errorResponse(errorconfig.error_1.code, errorconfig.error_1.message);
545
- }
546
- }
547
- catch (ex) {
548
- this.commonLoaderServices.addLoaderElement(false);
549
- this.Changedetect.detectChanges();
550
- this.commonservice.setlogvalue(false, ex.message, ex.stack, "HolaRx", "downloadRx", payload);
551
- return this.errorResponse(errorconfig.error_64.code, errorconfig.error_64.message);
552
- }
553
- }
554
- downloadReferral(ReferralID) {
555
- this.commonLoaderServices.rxInitLoaderHiddden = false;
556
- this.commonservice.logtransaction = "Download Referral";
557
- this.commonservice.logidentifier = ReferralID;
558
- this.commonservice.logidentifierType = "referral id";
559
- var payload = {};
560
- try {
561
- this.tempreferralid = ReferralID;
562
- payload = {
563
- request_type: "parameter",
564
- referralId: ReferralID
565
- };
566
- this.auditlog(JSON.stringify(payload), config.PHYSICIAN.REFERRAL_PRINT + ReferralID);
567
- if (!this.IsNullOrEmpty(this.commonservice.HolaRxToken)) {
568
- if (this.IsNullOrEmpty(ReferralID)) {
569
- this.commonservice.toastopen(errorconfig.error_43.message, "error", errorconfig.error_43.code);
570
- return this.errorResponse(errorconfig.error_43.code, errorconfig.error_43.message);
571
- }
572
- this.commonLoaderServices.addLoaderElement(true);
573
- this.Changedetect.detectChanges();
574
- return this.apiservice.Get(config.PHYSICIAN.REFERRAL_PRINT + ReferralID).pipe(switchMap((response) => {
575
- try {
576
- if (this.IsNullOrEmpty(response)) {
577
- this.commonLoaderServices.addLoaderElement(false);
578
- this.Changedetect.detectChanges();
579
- this.commonservice.setlogvalue(false, "", "", "HolaRx", "downloadReferral", payload);
580
- this.commonservice.toastopen(errorconfig.error_64.message, 'error', errorconfig.error_64.code);
581
- return this.errorResponse(errorconfig.error_64.code, errorconfig.error_64.message);
582
- }
583
- if (response.response_code == 0) {
584
- this.commonDownload(response);
585
- return this.errorResponse("", response.response_message, true);
586
- }
587
- else {
588
- this.commonLoaderServices.addLoaderElement(false);
589
- this.Changedetect.detectChanges();
590
- this.commonservice.setlogvalue(false, response.response_message, response.response_message, "HolaRx", "downloadReferral", payload);
591
- this.commonservice.toastopen(response.response_message, 'error', response.error_code);
592
- return this.errorResponse(response.error_code, response.response_message);
593
- }
594
- }
595
- catch (ex) {
596
- this.commonLoaderServices.addLoaderElement(false);
597
- this.Changedetect.detectChanges();
598
- this.commonservice.setlogvalue(false, ex.message, ex.stack, "HolaRx", "downloadReferral", payload);
599
- return this.errorResponse(response.error_code, response.response_message);
600
- }
601
- }), catchError((error) => {
602
- this.commonLoaderServices.addLoaderElement(false);
603
- this.Changedetect.detectChanges();
604
- this.commonservice.toastopen(errorconfig.error_65.message + error, "error", errorconfig.error_65.code);
605
- this.commonservice.setlogvalue(false, error.message, error.stack, "HolaRx", "downloadReferral", payload);
606
- return this.errorResponse(errorconfig.error_65.code, errorconfig.error_65.message + error);
607
- }));
608
- }
609
- else {
610
- var data = JSON.parse(localStorage.getItem('rxCredentials'));
611
- if (data != null && !this.IsNullOrEmpty(data.clientId) && !this.IsNullOrEmpty(data.clientSecret) && this.IsNullOrEmpty(this.commonservice.HolaRxToken)) {
612
- this.commonLoaderServices.addLoaderElement(true);
613
- this.Changedetect.detectChanges();
614
- return this.init(data.clientId, data.clientSecret, this.commonservice.sandbox, 5);
615
- }
616
- this.commonLoaderServices.addLoaderElement(false);
617
- this.Changedetect.detectChanges();
618
- this.commonservice.setlogvalue(false, errorconfig.error_1.message, errorconfig.error_1.message, "HolaRx", "downloadReferral", payload);
619
- return this.errorResponse(errorconfig.error_1.code, errorconfig.error_1.message);
620
- }
621
- }
622
- catch (ex) {
623
- this.commonLoaderServices.addLoaderElement(false);
624
- this.Changedetect.detectChanges();
625
- this.commonservice.setlogvalue(false, ex.message, ex.stack, "HolaRx", "downloadReferral", payload);
626
- return this.errorResponse(errorconfig.error_64.code, errorconfig.error_64.message);
627
- }
628
- }
629
- commonDownload(response) {
630
- try {
631
- const a = document.createElement('a');
632
- a.setAttribute('style', 'display:none;');
633
- document.body.appendChild(a);
634
- a.download = response.fileName;
635
- a.href = "data:application/pdf;charset=utf-8;base64," + response.file;
636
- a.click();
637
- document.body.removeChild(a);
638
- this.commonLoaderServices.addLoaderElement(false);
639
- this.Changedetect.detectChanges();
640
- this.commonservice.toastopen(response.response_message, 'success');
641
- }
642
- catch (ex) {
643
- this.commonservice.setlogvalue(false, ex.message, ex.stack, "HolaRx", "commonDownload");
644
- }
645
- }
646
- appointmentValidation(RxDetails, flag) {
647
- try {
648
- if (this.IsNullOrEmpty(RxDetails.facilityid)) {
649
- this.validationtoast(errorconfig.error_4.message, errorconfig.error_4.code);
650
- }
651
- if (flag == 2) {
652
- if (this.IsNullOrEmpty(RxDetails.rxid)) {
653
- this.validationtoast(errorconfig.error_46.message, errorconfig.error_46.code);
654
- }
655
- }
656
- }
657
- catch (ex) {
658
- this.commonservice.setlogvalue(false, ex.message, ex.stack, "HolaRx", "validation");
659
- }
660
- }
661
- validation(RxDetails, flag) {
662
- try {
663
- if (!this.IsNullOrEmpty(RxDetails)) {
664
- if (this.IsNullOrEmpty(RxDetails.consultationid)) {
665
- this.validationtoast(errorconfig.error_2.message, errorconfig.error_2.code);
666
- }
667
- if (this.IsNullOrEmpty(RxDetails.practiceid) && this.IsNullOrEmpty(RxDetails.practice)) {
668
- this.validationtoast(errorconfig.error_3.message, errorconfig.error_3.code);
669
- }
670
- if (this.IsNullOrEmpty(RxDetails.practitionerid) && this.IsNullOrEmpty(RxDetails.practitioner)) {
671
- this.validationtoast(errorconfig.error_13.message, errorconfig.error_13.code);
672
- }
673
- if (this.IsNullOrEmpty(RxDetails.patientid) && this.IsNullOrEmpty(RxDetails.patient)) {
674
- this.validationtoast(errorconfig.error_29.message, errorconfig.error_29.code);
675
- }
676
- if (flag == 2) {
677
- if (this.IsNullOrEmpty(RxDetails.rxid)) {
678
- this.validationtoast(errorconfig.error_46.message, errorconfig.error_46.code);
679
- }
680
- }
681
- if (flag == 1) {
682
- if (!this.IsNullOrEmpty(RxDetails.rxid)) {
683
- RxDetails.rxid = "";
684
- }
685
- }
686
- if (!this.IsNullOrEmpty(RxDetails.practice)) {
687
- if (this.IsNullOrEmpty(RxDetails.practice.id))
688
- this.validationtoast(errorconfig.error_4.message, errorconfig.error_4.code);
689
- if (this.IsNullOrEmpty(RxDetails.practice.name))
690
- this.validationtoast(errorconfig.error_5.message, errorconfig.error_5.code);
691
- if (this.IsNullOrEmpty(RxDetails.practice.email))
692
- this.validationtoast(errorconfig.error_6.message, errorconfig.error_6.code);
693
- if (this.IsNullOrEmpty(RxDetails.practice.phone))
694
- this.validationtoast(errorconfig.error_7.message, errorconfig.error_7.code);
695
- if (this.IsNullOrEmpty(RxDetails.practice.address))
696
- RxDetails.practice.address = {};
697
- if (this.IsNullOrEmpty(RxDetails.practice.address?.addressline1))
698
- this.validationtoast(errorconfig.error_71.message, errorconfig.error_71.code);
699
- if (this.IsNullOrEmpty(RxDetails.practice.address?.addressline2))
700
- RxDetails.practice.address.addressline2 = "";
701
- if (this.IsNullOrEmpty(RxDetails.practice.address?.suburb))
702
- this.validationtoast(errorconfig.error_10.message, errorconfig.error_10.code);
703
- if (this.IsNullOrEmpty(RxDetails.practice.address?.postcode))
704
- this.validationtoast(errorconfig.error_11.message, errorconfig.error_11.code);
705
- if (this.IsNullOrEmpty(RxDetails.practice.address?.state))
706
- this.validationtoast(errorconfig.error_12.message, errorconfig.error_12.code);
707
- if (this.IsNullOrEmpty(RxDetails.practice.hpio)) {
708
- RxDetails.practice.hpio = 0;
709
- }
710
- }
711
- if (!this.IsNullOrEmpty(RxDetails.practitioner)) {
712
- if (this.IsNullOrEmpty(RxDetails.practitioner.id))
713
- this.validationtoast(errorconfig.error_14.message, errorconfig.error_14.code);
714
- if (this.IsNullOrEmpty(RxDetails.practitioner.firstname))
715
- this.validationtoast(errorconfig.error_15.message, errorconfig.error_15.code);
716
- if (this.IsNullOrEmpty(RxDetails.practitioner.lastname))
717
- this.validationtoast(errorconfig.error_16.message, errorconfig.error_16.code);
718
- if (this.IsNullOrEmpty(RxDetails.practitioner.gender))
719
- this.validationtoast(errorconfig.error_17.message, errorconfig.error_17.code);
720
- if (this.IsNullOrEmpty(RxDetails.practitioner.dob))
721
- this.validationtoast(errorconfig.error_18.message, errorconfig.error_18.code);
722
- if (this.IsNullOrEmpty(RxDetails.practitioner.email))
723
- this.validationtoast(errorconfig.error_19.message, errorconfig.error_19.code);
724
- if (this.IsNullOrEmpty(RxDetails.practitioner.mobile_phone))
725
- this.validationtoast(errorconfig.error_20.message, errorconfig.error_20.code);
726
- if (this.IsNullOrEmpty(RxDetails.practitioner.address))
727
- RxDetails.practitioner.address = {};
728
- if (this.IsNullOrEmpty(RxDetails.practitioner.address?.addressline1))
729
- this.validationtoast(errorconfig.error_72.message, errorconfig.error_72.code);
730
- if (this.IsNullOrEmpty(RxDetails.practitioner.address?.addressline2))
731
- RxDetails.practitioner.address.addressline2 = "";
732
- if (this.IsNullOrEmpty(RxDetails.practitioner.address?.suburb))
733
- this.validationtoast(errorconfig.error_23.message, errorconfig.error_23.code);
734
- if (this.IsNullOrEmpty(RxDetails.practitioner.address?.postcode))
735
- this.validationtoast(errorconfig.error_24.message, errorconfig.error_24.code);
736
- if (this.IsNullOrEmpty(RxDetails.practitioner.address?.state))
737
- this.validationtoast(errorconfig.error_25.message, errorconfig.error_25.code);
738
- if (flag == 3) {
739
- if (this.IsNullOrEmpty(RxDetails.practitioner.providernumber))
740
- this.validationtoast(errorconfig.error_27.message, errorconfig.error_27.code);
741
- if (this.IsNullOrEmpty(RxDetails.practitioner.signature_image))
742
- this.validationtoast(errorconfig.error_28.message, errorconfig.error_28.code);
743
- }
744
- if (this.IsNullOrEmpty(RxDetails.practitioner.hpii)) {
745
- RxDetails.practitioner.hpii = 0;
746
- }
747
- }
748
- if (!this.IsNullOrEmpty(RxDetails.patient)) {
749
- if (this.IsNullOrEmpty(RxDetails.patient.id))
750
- this.validationtoast(errorconfig.error_30.message, errorconfig.error_30.code);
751
- if (this.IsNullOrEmpty(RxDetails.patient.firstname))
752
- this.validationtoast(errorconfig.error_31.message, errorconfig.error_31.code);
753
- if (this.IsNullOrEmpty(RxDetails.patient.lastname))
754
- this.validationtoast(errorconfig.error_32.message, errorconfig.error_32.code);
755
- if (this.IsNullOrEmpty(RxDetails.patient.gender))
756
- this.validationtoast(errorconfig.error_33.message, errorconfig.error_33.code);
757
- if (this.IsNullOrEmpty(RxDetails.patient.dob))
758
- this.validationtoast(errorconfig.error_34.message, errorconfig.error_34.code);
759
- if (this.IsNullOrEmpty(RxDetails.patient.email))
760
- this.validationtoast(errorconfig.error_35.message, errorconfig.error_35.code);
761
- if (this.IsNullOrEmpty(RxDetails.patient.mobile_phone))
762
- this.validationtoast(errorconfig.error_36.message, errorconfig.error_36.code);
763
- if (this.IsNullOrEmpty(RxDetails.patient.timezone))
764
- this.validationtoast(errorconfig.error_37.message, errorconfig.error_37.code);
765
- if (this.IsNullOrEmpty(RxDetails.patient.address))
766
- RxDetails.patient.address = {};
767
- if (this.IsNullOrEmpty(RxDetails.patient.address?.addressline1))
768
- this.validationtoast(errorconfig.error_67.message, errorconfig.error_67.code);
769
- if (this.IsNullOrEmpty(RxDetails.patient.address?.addressline2))
770
- RxDetails.patient.address.addressline2 = "";
771
- if (this.IsNullOrEmpty(RxDetails.patient.address?.suburb))
772
- this.validationtoast(errorconfig.error_40.message, errorconfig.error_40.code);
773
- if (this.IsNullOrEmpty(RxDetails.patient.address?.postcode))
774
- this.validationtoast(errorconfig.error_41.message, errorconfig.error_41.code);
775
- if (this.IsNullOrEmpty(RxDetails.patient.address?.state))
776
- this.validationtoast(errorconfig.error_42.message, errorconfig.error_42.code);
777
- if (this.IsNullOrEmpty(RxDetails.patient.medicare)) {
778
- RxDetails.patient.medicare = {};
779
- }
780
- if (this.IsNullOrEmpty(RxDetails.patient.medicare?.number)) {
781
- RxDetails.patient.medicare.number = "";
782
- }
783
- if (this.IsNullOrEmpty(RxDetails.patient.medicare?.reference)) {
784
- RxDetails.patient.medicare.reference = "";
785
- }
786
- if (this.IsNullOrEmpty(RxDetails.patient.medicare?.expiry)) {
787
- RxDetails.patient.medicare.expiry = "";
788
- }
789
- if (this.IsNullOrEmpty(RxDetails.patient.ihi)) {
790
- RxDetails.patient.ihi = 0;
791
- }
792
- }
793
- }
794
- else {
795
- this.validationtoast(errorconfig.error_64.message, errorconfig.error_64.code);
796
- }
797
- }
798
- catch (ex) {
799
- this.commonservice.setlogvalue(false, ex.message, ex.stack, "HolaRx", "validation");
800
- }
801
- }
802
- HIvalidation(value) {
803
- try {
804
- var warning_msg = '';
805
- if (!value.is_hpio_valid) {
806
- warning_msg = value.hpio_response_msg;
807
- }
808
- if (!value.is_hpii_valid) {
809
- warning_msg += warning_msg == '' ? value.hpi_response_msg : "<br>" + value.hpi_response_msg;
810
- }
811
- if (!value.is_ihi_valid) {
812
- warning_msg += warning_msg == '' ? value.ihi_response_msg : "<br>" + value.ihi_response_msg;
813
- }
814
- if (!this.IsNullOrEmpty(warning_msg)) {
815
- this.commonservice.toastopen(warning_msg, "warning");
816
- }
817
- else if (!this.IsNullOrEmpty(value.ihi_response_msg)) {
818
- this.commonservice.toastopen(value.ihi_response_msg, "success");
819
- }
820
- }
821
- catch (ex) {
822
- this.commonservice.setlogvalue(false, ex.message, ex.stack, "HolaRx", "HIvalidation");
823
- }
824
- }
825
- IsNullOrEmpty(value) {
826
- try {
827
- if (value === undefined || value === null || String(value).trim() === "") {
828
- return true;
829
- }
830
- return false;
831
- }
832
- catch (ex) {
833
- this.commonservice.setlogvalue(false, ex.message, ex.stack, "HolaRx", "IsNullOrEmpty");
834
- return false;
835
- }
836
- }
837
- validationtoast(error_message, error_code) {
838
- try {
839
- this.commonservice.errorResponse(error_code, error_message);
840
- if (this.message == "") {
841
- this.message = error_code + ": " + error_message;
842
- }
843
- else {
844
- this.message += "<br>" + error_code + ": " + error_message;
845
- }
846
- }
847
- catch (ex) {
848
- this.commonservice.setlogvalue(false, ex.message, ex.stack, "HolaRx", "validationtoast");
849
- }
850
- }
851
- errorResponse(error_code, error_message, successflag = false) {
852
- try {
853
- var response = {
854
- status: successflag == true ? "success" : "error",
855
- response: {
856
- response_code: successflag == true ? error_code : "",
857
- response_message: successflag == true ? error_message : ""
858
- },
859
- error: {
860
- error_code: successflag == false ? error_code : "",
861
- error_message: successflag == false ? error_message : ""
862
- }
863
- };
864
- console.log(response);
865
- return of(response);
866
- }
867
- catch (ex) {
868
- this.commonservice.setlogvalue(false, ex.message, ex.stack, "HolaRx", "errorResponse");
869
- return of(null);
870
- }
871
- }
872
- auditlog(value, api) {
873
- try {
874
- var data = {
875
- identifierValue: this.commonservice.logidentifier,
876
- identifierType: this.commonservice.logidentifierType,
877
- requestPayload: value,
878
- responseCode: "",
879
- responsePayload: "",
880
- createdBy: "UI-Rx",
881
- api: api,
882
- requestUrl: window.origin
883
- };
884
- this.apiservice.Post(data, config.AUDIT_LOG).subscribe((res) => {
885
- //console.log(res);
886
- }, err => {
887
- this.commonservice.setlogvalue(false, err.message, err.stack, "HolaRx", "auditlog");
888
- });
889
- }
890
- catch (ex) {
891
- this.commonservice.setlogvalue(false, ex.message, ex.stack, "HolaRx", "auditlog");
892
- }
893
- }
894
- }
895
- HolaRx.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HolaRx, deps: [{ token: i1.CommonServices }, { token: i1.CommonLoaderServices }, { token: i2.ApiService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
896
- HolaRx.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HolaRx, selector: "hola-rx", viewQueries: [{ propertyName: "content", first: true, predicate: ["rxwidgets"], descendants: true, static: true }], ngImport: i0, template: "<!-- <ul class=\"notifications\" ></ul>\r\n<div [class]=\"{'loader_visible':commonLoaderServices.fullScreenLoader,'loader_hidden':!commonLoaderServices.fullScreenLoader}\"\r\n class=\"splash\">\r\n <div class=\"pause\">\r\n <div style=\"text-align: center;\"> <img class=\"spinner-img\"\r\n src=\"https://passets.hola.health/rx-widgets/rx-hola-health-spinner.png\" alt=\"hola_health\">\r\n </div>\r\n <div class=\"spinner\">Loading...</div>\r\n </div>\r\n</div> -->\r\n\r\n<ng-template #rxwidgets>\r\n</ng-template>", styles: [""] });
897
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HolaRx, decorators: [{
898
- type: Component,
899
- args: [{ selector: 'hola-rx', template: "<!-- <ul class=\"notifications\" ></ul>\r\n<div [class]=\"{'loader_visible':commonLoaderServices.fullScreenLoader,'loader_hidden':!commonLoaderServices.fullScreenLoader}\"\r\n class=\"splash\">\r\n <div class=\"pause\">\r\n <div style=\"text-align: center;\"> <img class=\"spinner-img\"\r\n src=\"https://passets.hola.health/rx-widgets/rx-hola-health-spinner.png\" alt=\"hola_health\">\r\n </div>\r\n <div class=\"spinner\">Loading...</div>\r\n </div>\r\n</div> -->\r\n\r\n<ng-template #rxwidgets>\r\n</ng-template>" }]
900
- }], ctorParameters: function () { return [{ type: i1.CommonServices }, { type: i1.CommonLoaderServices }, { type: i2.ApiService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { content: [{
901
- type: ViewChild,
902
- args: ["rxwidgets", { static: true }]
903
- }] } });
904
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9sYS1yeC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ob2xhLXJ4L3NyYy9saWIvaG9sYS1yeC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ob2xhLXJ4L3NyYy9saWIvaG9sYS1yeC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBdUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzdGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7OztBQU16RCxNQUFNLE9BQU8sTUFBTTtJQVFqQixZQUFvQixhQUE2QixFQUFTLG9CQUEwQyxFQUFVLFVBQXNCLEVBQVUsWUFBK0I7UUFBekosa0JBQWEsR0FBYixhQUFhLENBQWdCO1FBQVMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUFVLGVBQVUsR0FBVixVQUFVLENBQVk7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBbUI7UUFOckssWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQUNwQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFHOUIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQUMsQ0FBQztJQUM1QixRQUFRO0lBRVIsQ0FBQztJQUVPLGNBQWM7UUFDcEIsV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUNmLElBQUksSUFBSSxDQUFDLGFBQWEs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QUksQ0FBQyxvQkFBb0IsQ0FBQyxtQkFBbUI7b0NBQy9DLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQ0FDcEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQ0FDbEMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzs2QkFDM0M7aUNBQ0ksSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFFO2dDQUNsQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxtQkFBbUI7b0NBQy9DLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQ0FDcEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQ0FDbEMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzs2QkFDNUM7aUNBQ0ksSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFFO2dDQUNsQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxtQkFBbUI7b0NBQy9DLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQ0FDcEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQ0FDbEMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzs2QkFDOUM7aUNBQ0ksSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFFO2dDQUNsQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxtQkFBbUI7b0NBQy9DLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQ0FDcEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQ0FDbEMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzs2QkFDdkM7aUNBQ0ksSUFB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Q0QsT0FBTyxFQUFPLEVBQUU7WUFDZCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztTQUNuRjtJQUNILENBQUM7O21HQXgxQlUsTUFBTTt1RkFBTixNQUFNLG1LQ1puQixrakJBWWM7MkZEQUQsTUFBTTtrQkFMbEIsU0FBUzsrQkFDRSxTQUFTO2lNQVd1QixPQUFPO3NCQUFoRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQXBpU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvYXBpLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlcywgQ29tbW9uTG9hZGVyU2VydmljZXMgfSBmcm9tICcuL3NlcnZpY2VzL2NvbW1vbic7XHJcbmltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY29uZmlnLCBlcnJvcmNvbmZpZyB9IGZyb20gJy4vZW52aXJvbm1lbnRzL2NvbmZpZyc7XHJcbmltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2hvbGEtcngnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9ob2xhLXJ4LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9ob2xhLXJ4LmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSG9sYVJ4IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBwcml2YXRlIHRlbXBSeERldGFpbHM6IGFueTtcclxuICBwcml2YXRlIG1lc3NhZ2UgPSBcIlwiO1xyXG4gIHByaXZhdGUgdGVtcHJ4aWQgPSBcIlwiO1xyXG4gIHByaXZhdGUgdGVtcHJlZmVycmFsaWQgPSBcIlwiO1xyXG4gIHByaXZhdGUgc3Bpbm5lcmZsYWcgPSBmYWxzZTtcclxuICBwcml2YXRlIGF1dGhlbnRpY2F0ZUJsb2NrID0gZmFsc2U7XHJcbiAgQFZpZXdDaGlsZChcInJ4d2lkZ2V0c1wiLCB7IHN0YXRpYzogdHJ1ZSB9KSBjb250ZW50ITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbW1vbnNlcnZpY2U6IENvbW1vblNlcnZpY2VzLCBwdWJsaWMgY29tbW9uTG9hZGVyU2VydmljZXM6IENvbW1vbkxvYWRlclNlcnZpY2VzLCBwcml2YXRlIGFwaXNlcnZpY2U6IEFwaVNlcnZpY2UsIHByaXZhdGUgQ2hhbmdlZGV0ZWN0OiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICkgeyB0aGlzLnNldExvZ2ludGVydmFsKCk7IH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldExvZ2ludGVydmFsKCkge1xyXG4gICAgc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5jb21tb25zZXJ2aWNlLmxvZ3ZhbHVlICE9IHVuZGVmaW5lZCAmJiB0aGlzLmNvbW1vbnNlcnZpY2UubG9ndmFsdWUgIT0gbnVsbCAmJiB0aGlzLmNvbW1vbnNlcnZpY2UubG9ndmFsdWUgIT0gXCJcIikge1xyXG4gICAgICAgIHRoaXMuYXBpc2VydmljZS5Qb3N0KHRoaXMuY29tbW9uc2VydmljZS5sb2d2YWx1ZSwgY29uZmlnLkNSRUFURV9MT0dfRVhDRVBUSU9OKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgIC8vY29uc29sZS5sb2cocmVzKTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS5sb2d2YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgfSwgZXJyID0+IHtcclxuICAgICAgICAgIC8vY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9LCA1MDAwMCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgaW5pdChjbGllbnRpZDogc3RyaW5nLCBjbGllbnRzZWNyZXQ6IHN0cmluZywgc2FuZGJveDogYm9vbGVhbiwgZmxhZz86IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoIXRoaXMuc3Bpbm5lcmZsYWcpIHtcclxuICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2UubG9ndHJhbnNhY3Rpb24gPSBcIkluaXQgQXV0aGVudGljYXRpb25cIjtcclxuICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2UubG9naWRlbnRpZmllciA9IFwiY2xpZW50aWRcIlxyXG4gICAgICAgIHRoaXMuY29tbW9uc2VydmljZS5sb2dpZGVudGlmaWVyVHlwZSA9IFwiY2xpZW50aWRcIjtcclxuICAgICAgfVxyXG4gICAgICB2YXIgZGF0YSA9IHtcclxuICAgICAgICBjbGllbnRJZDogY2xpZW50aWQsXHJcbiAgICAgICAgY2xpZW50U2VjcmV0OiBjbGllbnRzZWNyZXRcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNvbW1vbnNlcnZpY2Uuc2FuZGJveCA9IHNhbmRib3g7XHJcbiAgICAgIGlmICghc2FuZGJveCkge1xyXG4gICAgICAgIGVudmlyb25tZW50LmFwaUVuZHBvaW50ID0gY29uZmlnLkxJVkVfVVJMO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGVudmlyb25tZW50LmFwaUVuZHBvaW50ID0gY29uZmlnLlNUQUdJTkdfVVJMO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5Jc051bGxPckVtcHR5KGRhdGEuY2xpZW50SWQpICYmICF0aGlzLklzTnVsbE9yRW1wdHkoZGF0YS5jbGllbnRTZWNyZXQpKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNwaW5uZXJmbGFnICYmIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMucnhJbml0TG9hZGVySGlkZGRlbilcclxuICAgICAgICAgIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMuYWRkTG9hZGVyRWxlbWVudCh0cnVlKTtcclxuICAgICAgICB0aGlzLmF1dGhlbnRpY2F0ZUJsb2NrID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLkNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpc2VydmljZS5Qb3N0KGRhdGEsIFwiYXV0aGVudGljYXRlXCIpLnBpcGUoXHJcbiAgICAgICAgICBzd2l0Y2hNYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlcy5yZXNwb25zZV9jb2RlID09IDApIHtcclxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdyeENyZWRlbnRpYWxzJywgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3Rva2VuRXhwaXJ5JywgSlNPTi5zdHJpbmdpZnkocmVzLmV4cGlyZXNpbikpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdXRoZW50aWNhdGVCbG9jayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLkhvbGFSeFRva2VuID0gcmVzLmF1dGguYWNjZXNzX3Rva2VuO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNwaW5uZXJmbGFnICYmIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMucnhJbml0TG9hZGVySGlkZGRlbikge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNldFRpbWVyKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZmxhZyA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbW1vbkxvYWRlclNlcnZpY2VzLnJ4SW5pdExvYWRlckhpZGRkZW4pXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25Mb2FkZXJTZXJ2aWNlcy5hZGRMb2FkZXJFbGVtZW50KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5DaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuTmV3UngodGhpcy50ZW1wUnhEZXRhaWxzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZsYWcgPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb21tb25Mb2FkZXJTZXJ2aWNlcy5yeEluaXRMb2FkZXJIaWRkZGVuKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMuYWRkTG9hZGVyRWxlbWVudChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuQ2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlbkVkaXRSeCh0aGlzLnRlbXBSeERldGFpbHMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZmxhZyA9PSAzKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbW1vbkxvYWRlclNlcnZpY2VzLnJ4SW5pdExvYWRlckhpZGRkZW4pXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25Mb2FkZXJTZXJ2aWNlcy5hZGRMb2FkZXJFbGVtZW50KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5DaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuUmVmZXJyYWwodGhpcy50ZW1wUnhEZXRhaWxzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZsYWcgPT0gNCkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb21tb25Mb2FkZXJTZXJ2aWNlcy5yeEluaXRMb2FkZXJIaWRkZGVuKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMuYWRkTG9hZGVyRWxlbWVudChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuQ2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG93bmxvYWRSeCh0aGlzLnRlbXByeGlkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZsYWcgPT0gNSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb21tb25Mb2FkZXJTZXJ2aWNlcy5yeEluaXRMb2FkZXJIaWRkZGVuKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMuYWRkTG9hZGVyRWxlbWVudChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuQ2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG93bmxvYWRSZWZlcnJhbCh0aGlzLnRlbXByZWZlcnJhbGlkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghcmVzLmZsYWcpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25Mb2FkZXJTZXJ2aWNlcy5hZGRMb2FkZXJFbGVtZW50KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5DaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2Uuc2V0bG9ndmFsdWUodHJ1ZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCBcIkhvbGFSeFwiLCBcImluaXRcIik7XHJcbiAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zcGlubmVyZmxhZyAmJiB0aGlzLmNvbW1vbkxvYWRlclNlcnZpY2VzLnJ4SW5pdExvYWRlckhpZGRkZW4pXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnRvYXN0b3BlbihyZXMucmVzcG9uc2VfbWVzc2FnZSwgXCJlcnJvclwiLCByZXMuZXJyb3JfY29kZSk7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yUmVzcG9uc2UocmVzLmVycm9yX2NvZGUsIHJlcy5yZXNwb25zZV9tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zcGlubmVyZmxhZyAmJiB0aGlzLmNvbW1vbkxvYWRlclNlcnZpY2VzLnJ4SW5pdExvYWRlckhpZGRkZW4pXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMuYWRkTG9hZGVyRWxlbWVudChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvclJlc3BvbnNlKFwiXCIsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCB0cnVlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF1dGhlbnRpY2F0ZUJsb2NrID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbkxvYWRlclNlcnZpY2VzLmFkZExvYWRlckVsZW1lbnQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5DaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnNldGxvZ3ZhbHVlKHRydWUsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCByZXMucmVzcG9uc2VfbWVzc2FnZSwgXCJIb2xhUnhcIiwgXCJpbml0XCIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNwaW5uZXJmbGFnICYmIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMucnhJbml0TG9hZGVySGlkZGRlbilcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnRvYXN0b3BlbihyZXMucmVzcG9uc2VfbWVzc2FnZSwgXCJlcnJvclwiLCByZXMuZXJyb3JfY29kZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvclJlc3BvbnNlKHJlcy5lcnJvcl9jb2RlLCByZXMucmVzcG9uc2VfbWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hdXRoZW50aWNhdGVCbG9jayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMuYWRkTG9hZGVyRWxlbWVudChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5DaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS5zZXRsb2d2YWx1ZSh0cnVlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJIb2xhUnhcIiwgXCJpbml0XCIpO1xyXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhlbnRpY2F0ZUJsb2NrID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMuYWRkTG9hZGVyRWxlbWVudChmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuQ2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnNwaW5uZXJmbGFnICYmIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMucnhJbml0TG9hZGVySGlkZGRlbilcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2UudG9hc3RvcGVuKGVycm9yY29uZmlnLmVycm9yXzY1Lm1lc3NhZ2UgKyBlcnJvciwgXCJlcnJvclwiLCBlcnJvcmNvbmZpZy5lcnJvcl82NS5jb2RlKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnNldGxvZ3ZhbHVlKHRydWUsIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrLCBcIkhvbGFSeFwiLCBcImluaXRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjUubWVzc2FnZSArIGVycm9yKTtcclxuXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5hdXRoZW50aWNhdGVCbG9jayA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMuYWRkTG9hZGVyRWxlbWVudChmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5DaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIGlmICghdGhpcy5zcGlubmVyZmxhZyAmJiB0aGlzLmNvbW1vbkxvYWRlclNlcnZpY2VzLnJ4SW5pdExvYWRlckhpZGRkZW4pXHJcbiAgICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2UudG9hc3RvcGVuKGVycm9yY29uZmlnLmVycm9yXzEubWVzc2FnZSwgXCJlcnJvclwiLCBlcnJvcmNvbmZpZy5lcnJvcl8xLmNvZGUpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uc2VydmljZS5zZXRsb2d2YWx1ZSh0cnVlLCBlcnJvcmNvbmZpZy5lcnJvcl8xLm1lc3NhZ2UsIGVycm9yY29uZmlnLmVycm9yXzEubWVzc2FnZSwgXCJIb2xhUnhcIiwgXCJpbml0XCIpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfMS5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl8xLm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmF1dGhlbnRpY2F0ZUJsb2NrID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMuYWRkTG9hZGVyRWxlbWVudChmYWxzZSk7XHJcbiAgICAgIHRoaXMuQ2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnNldGxvZ3ZhbHVlKHRydWUsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIkhvbGFSeFwiLCBcImluaXRcIik7XHJcbiAgICAgIHJldHVybiB0aGlzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFRpbWVyKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgIHZhciBkYXRhID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncnhDcmVkZW50aWFscycpIGFzIGFueSk7XHJcbiAgICAgICAgdmFyIGV4cGlyeSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Rva2VuRXhwaXJ5JykgYXMgYW55KTtcclxuICAgICAgICBpZiAoZGF0YSAhPSBudWxsICYmICF0aGlzLklzTnVsbE9yRW1wdHkoZGF0YS5jbGllbnRJZCkgJiYgIXRoaXMuSXNOdWxsT3JFbXB0eShkYXRhLmNsaWVudFNlY3JldCkgJiYgIXRoaXMuSXNOdWxsT3JFbXB0eShleHBpcnkpICYmIHdpbmRvdy5uYXZpZ2F0b3Iub25MaW5lICYmICF0aGlzLmF1dGhlbnRpY2F0ZUJsb2NrICYmIChuZXcgRGF0ZShuZXcgRGF0ZShleHBpcnkpLnNldE1pbnV0ZXMobmV3IERhdGUoZXhwaXJ5KS5nZXRNaW51dGVzKCkgLSAxKSkgPD0gbmV3IERhdGUoKSB8fCB0aGlzLmFwaXNlcnZpY2UudW5BdXRob3JpemVkRmxhZykpIHtcclxuICAgICAgICAgIHRoaXMuYXBpc2VydmljZS51bkF1dGhvcml6ZWRGbGFnID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJmbGFnID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuaW5pdChkYXRhLmNsaWVudElkLCBkYXRhLmNsaWVudFNlY3JldCwgdGhpcy5jb21tb25zZXJ2aWNlLnNhbmRib3gpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKHJlcyk7XHJcbiAgICAgICAgICB9LCBlcnIgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2Uuc2V0bG9ndmFsdWUodHJ1ZSwgZXJyLm1lc3NhZ2UsIGVyci5zdGFjaywgXCJIb2xhUnhcIiwgXCJzZXRUaW1lclwiKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgMTAwMCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vbnNlcnZpY2Uuc2V0bG9ndmFsdWUodHJ1ZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiSG9sYVJ4XCIsIFwic2V0VGltZXJcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVuTmV3UngoUnhEZXRhaWxzOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgdGhpcy5jb21tb25Mb2FkZXJTZXJ2aWNlcy5yeEluaXRMb2FkZXJIaWRkZGVuID0gZmFsc2U7XHJcbiAgICB0aGlzLmNvbW1vbnNlcnZpY2UubG9ndHJhbnNhY3Rpb24gPSBcIk5ldyBSeFwiO1xyXG4gICAgdGhpcy5jb21tb25zZXJ2aWNlLmxvZ2lkZW50aWZpZXIgPSAhdGhpcy5Jc051bGxPckVtcHR5KFJ4RGV0YWlscykgPyAhdGhpcy5Jc051bGxPckVtcHR5KFJ4RGV0YWlscy5wcmFjdGl0aW9uZXIpID8gIXRoaXMuSXNOdWxsT3JFbXB0eShSeERldGFpbHMucHJhY3RpdGlvbmVyLmVtYWlsKSA/IFJ4RGV0YWlscy5wcmFjdGl0aW9uZXIuZW1haWwgOiBcIlwiIDogXCJcIiA6IFwiXCI7XHJcbiAgICB0aGlzLmNvbW1vbnNlcnZpY2UubG9naWRlbnRpZmllclR5cGUgPSBcInByYWN0aXRpb25lciBlbWFpbFwiO1xyXG4gICAgdHJ5IHtcclxuICAgICAgUnhEZXRhaWxzLnR5cGUgPSBcIjFcIjtcclxuICAgICAgUnhEZXRhaWxzLmNsaWVudElkID0gdGhpcy5jb21tb25zZXJ2aWNlLmdldENyZWRldGlhbCgpO1xyXG4gICAgICB0aGlzLnRlbXBSeERldGFpbHMgPSBSeERldGFpbHM7XHJcbiAgICAgIHRoaXMuYXVkaXRsb2coSlNPTi5zdHJpbmdpZnkoUnhEZXRhaWxzKSwgY29uZmlnLkNSRUFURV9DT05TVUxUQVRJT04pO1xyXG4gICAgICBpZiAoIXRoaXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vbnNlcnZpY2UuSG9sYVJ4VG9rZW4pKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLklzTnVsbE9yRW1wdHkoUnhEZXRhaWxzLmFwcG9pbnRtZW50aWQpKSB7XHJcbiAgICAgICAgICB0aGlzLmFwcG9pbnRtZW50VmFsaWRhdGlvbihSeERldGFpbHMsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbihSeERldGFpbHMsIDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMubWVzc2FnZSAhPSBcIlwiKSB7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vbkxvYWRlclNlcnZpY2VzLmFkZExvYWRlckVsZW1lbnQoZmFsc2UpOyB0aGlzLkNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB2YXIgcmVzID0gdGhpcy5jb21tb25zZXJ2aWNlLmNsb3NlRXJyb3JSZXNwb25zZTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS50b2FzdG9wZW4odGhpcy5tZXNzYWdlLCBcImVycm9yXCIsIFwiXCIsIDcwMDApO1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlID0gXCJcIjtcclxuICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS5jbG9zZUVycm9yUmVzcG9uc2UgPSBudWxsO1xyXG4gICAgICAgICAgY29uc29sZS5sb2cocmVzKTtcclxuICAgICAgICAgIHJldHVybiBvZihyZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbW1vbkxvYWRlclNlcnZpY2VzLmFkZExvYWRlckVsZW1lbnQodHJ1ZSk7IHRoaXMuQ2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5hcGlzZXJ2aWNlLlBvc3QoUnhEZXRhaWxzLCBjb25maWcuQ1JFQVRFX0NPTlNVTFRBVElPTikucGlwZShcclxuICAgICAgICAgIHN3aXRjaE1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICB0aGlzLnRlbXBSeERldGFpbHMgPSBudWxsO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMuYWRkTG9hZGVyRWxlbWVudChmYWxzZSk7IHRoaXMuQ2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5Jc051bGxPckVtcHR5KHJlcykpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS5zZXRsb2d2YWx1ZShmYWxzZSwgXCJcIiwgXCJcIiwgXCJIb2xhUnhcIiwgXCJvcGVuTmV3UnhcIiwgUnhEZXRhaWxzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzY0LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzY0Lm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAocmVzLnJlc3BvbnNlX2NvZGUgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLmNvbnN1bHRhdGlvbklkID0gUnhEZXRhaWxzLmNvbnN1bHRhdGlvbmlkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnBoeXNpY2lhbkRldGFpbHMgPSByZXMucGh5c2ljaWFuRGV0YWlscztcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS5wYXRpZW50RGV0YWlscyA9IHJlcy5wYXRpZW50RGV0YWlscztcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS5mYWNpbGl0eURldGFpbHMgPSByZXMuZmFjaWxpdHlEZXRhaWxzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnZlbmRvclBhdGllbnRJZCA9IHJlcy52ZW5kb3JQYXRpZW50SWQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2UudmVuZG9yRmFjaWxpdHlJZCA9IHJlcy52ZW5kb3JGYWNpbGl0eUlkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnZlbmRvclBoeXNpY2lhbklkID0gcmVzLnZlbmRvclBoeXNpY2lhbklkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnZpc2l0SWQgPSByZXMudmlzaXRJZDtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS5jcmVhdGVQYXRpZW50UmVzcG9uc2UgPSByZXM7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2UuZWRpdFByZXNjcmlwdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnBoYXJtYWN5RW1haWwgPSAhdGhpcy5Jc051bGxPckVtcHR5KHJlcy5waGFybWFjeUVtYWlsKSA/IHJlcy5waGFybWFjeUVtYWlsIDogXCJcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS5pc1NjcmlwdFRvUGhhcm1hY3kgPSAoIXRoaXMuSXNOdWxsT3JFbXB0eShyZXMuaXNTY3JpcHRUb1BoYXJtYWN5KSAmJiByZXMuaXNTY3JpcHRUb1BoYXJtYWN5KSAhPSAwID8gcmVzLmlzU2NyaXB0VG9QaGFybWFjeSA6IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2UuaXNNZWRpY2luZVJlc3RyaWN0ID0gIXRoaXMuY29tbW9uc2VydmljZS5Jc051bGxPckVtcHR5KHJlcy5pc1Jlc3RyaWN0ZWRNZWRpY2luZSkgPyByZXMuaXNSZXN0cmljdGVkTWVkaWNpbmUgOiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS5lbmFibGVQYXBlclNjcmlwdCA9IHJlcy5pc0VuYWJsZVNjcmlwdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS5lbmFibGVTZW5kUGFwZXJTY3JpcHRJbk1haWwgPSByZXMuaXNFbmFibGVTY3JpcHRNYWlsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLmVuYWJsZVNlbmRFU2NyaXB0SW5NYWlsID0gcmVzLmlzRW5hYmxlRXNjcmlwdE1haWw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2UuZW5hYmxlRVNjcmlwdCA9IHJlcy5pc0VuYWJsZUVzY3JpcHQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vbnNlcnZpY2UucGh5c2ljaWFuRGV0YWlscykgJiYgIXRoaXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vbnNlcnZpY2UucGh5c2ljaWFuRGV0YWlscy5lUHJlc2NyaXB0aW9uQWxsb3dlZCkgJiYgdGhpcy5jb21tb25zZXJ2aWNlLnBoeXNpY2lhbkRldGFpbHMuZVByZXNjcmlwdGlvbkFsbG93ZWQgPT0gMClcclxuICAgICAgICAgICAgICAgICAgdGhpcy5ISXZhbGlkYXRpb24ocmVzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbW1vbnNlcnZpY2Uub3BlblJ4V2lkZ2V0KHRoaXMuY29udGVudCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnNldGxvZ3ZhbHVlKGZhbHNlLCByZXMucmVzcG9uc2VfbWVzc2FnZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIFwiSG9sYVJ4XCIsIFwib3Blbk5ld1J4XCIsIFJ4RGV0YWlscyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2UudG9hc3RvcGVuKHJlcy5yZXNwb25zZV9tZXNzYWdlLCBcImVycm9yXCIsIHJlcy5lcnJvcl9jb2RlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yUmVzcG9uc2UocmVzLmVycm9yX2NvZGUsIHJlcy5yZXNwb25zZV9tZXNzYWdlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vbkxvYWRlclNlcnZpY2VzLmFkZExvYWRlckVsZW1lbnQoZmFsc2UpOyB0aGlzLkNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJIb2xhUnhcIiwgXCJvcGVuTmV3UnhcIiwgUnhEZXRhaWxzKTtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvclJlc3BvbnNlKHJlcy5lcnJvcl9jb2RlLCByZXMucmVzcG9uc2VfbWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pLCBjYXRjaEVycm9yKChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMuYWRkTG9hZGVyRWxlbWVudChmYWxzZSk7IHRoaXMuQ2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IsIFwiZXJyb3JcIiwgZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS5zZXRsb2d2YWx1ZShmYWxzZSwgZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2ssIFwiSG9sYVJ4XCIsIFwib3Blbk5ld1J4XCIsIFJ4RGV0YWlscyk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjUubWVzc2FnZSArIGVycm9yKTtcclxuICAgICAgICAgIH0pKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3J4Q3JlZGVudGlhbHMnKSBhcyBhbnkpO1xyXG4gICAgICAgIGlmIChkYXRhICE9IG51bGwgJiYgIXRoaXMuSXNOdWxsT3JFbXB0eShkYXRhLmNsaWVudElkKSAmJiAhdGhpcy5Jc051bGxPckVtcHR5KGRhdGEuY2xpZW50U2VjcmV0KSAmJiB0aGlzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25zZXJ2aWNlLkhvbGFSeFRva2VuKSkge1xyXG4gICAgICAgICAgdGhpcy5jb21tb25Mb2FkZXJTZXJ2aWNlcy5hZGRMb2FkZXJFbGVtZW50KHRydWUpOyB0aGlzLkNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbml0KGRhdGEuY2xpZW50SWQsIGRhdGEuY2xpZW50U2VjcmV0LCB0aGlzLmNvbW1vbnNlcnZpY2Uuc2FuZGJveCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMuYWRkTG9hZGVyRWxlbWVudChmYWxzZSk7IHRoaXMuQ2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2Uuc2V0bG9ndmFsdWUoZmFsc2UsIGVycm9yY29uZmlnLmVycm9yXzEubWVzc2FnZSwgZXJyb3Jjb25maWcuZXJyb3JfMS5tZXNzYWdlLCBcIkhvbGFSeFwiLCBcIm9wZW5OZXdSeFwiLCBSeERldGFpbHMpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfMS5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl8xLm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vbkxvYWRlclNlcnZpY2VzLmFkZExvYWRlckVsZW1lbnQoZmFsc2UpOyB0aGlzLkNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuY29tbW9uc2VydmljZS5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiSG9sYVJ4XCIsIFwib3Blbk5ld1J4XCIsIFJ4RGV0YWlscyk7XHJcbiAgICAgIHJldHVybiB0aGlzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVuRWRpdFJ4KFJ4RGV0YWlsczogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMucnhJbml0TG9hZGVySGlkZGRlbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5jb21tb25zZXJ2aWNlLmxvZ3RyYW5zYWN0aW9uID0gXCJFZGl0IFJ4XCI7XHJcbiAgICB0aGlzLmNvbW1vbnNlcnZpY2UubG9naWRlbnRpZmllciA9ICF0aGlzLklzTnVsbE9yRW1wdHkoUnhEZXRhaWxzKSA/ICF0aGlzLklzTnVsbE9yRW1wdHkoUnhEZXRhaWxzLnByYWN0aXRpb25lcikgPyAhdGhpcy5Jc051bGxPckVtcHR5KFJ4RGV0YWlscy5wcmFjdGl0aW9uZXIuZW1haWwpID8gUnhEZXRhaWxzLnByYWN0aXRpb25lci5lbWFpbCA6IFwiXCIgOiBcIlwiIDogXCJcIjtcclxuICAgIHRoaXMuY29tbW9uc2VydmljZS5sb2dpZGVudGlmaWVyVHlwZSA9IFwicHJhY3RpdGlvbmVyIGVtYWlsXCI7XHJcbiAgICB0cnkge1xyXG4gICAgICBSeERldGFpbHMudHlwZSA9IFwiMVwiO1xyXG4gICAgICBSeERldGFpbHMuY2xpZW50SWQgPSB0aGlzLmNvbW1vbnNlcnZpY2UuZ2V0Q3JlZGV0aWFsKCk7XHJcbiAgICAgIHRoaXMudGVtcFJ4RGV0YWlscyA9IFJ4RGV0YWlscztcclxuICAgICAgdGhpcy5hdWRpdGxvZyhKU09OLnN0cmluZ2lmeShSeERldGFpbHMpLCBjb25maWcuQ1JFQVRFX0NPTlNVTFRBVElPTik7XHJcbiAgICAgIGlmICghdGhpcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uc2VydmljZS5Ib2xhUnhUb2tlbikpIHtcclxuICAgICAgICBpZiAoIXRoaXMuSXNOdWxsT3JFbXB0eShSeERldGFpbHMuYXBwb2ludG1lbnRpZCkpIHtcclxuICAgICAgICAgIHRoaXMuYXBwb2ludG1lbnRWYWxpZGF0aW9uKFJ4RGV0YWlscywgMik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uKFJ4RGV0YWlscywgMik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm1lc3NhZ2UgIT0gXCJcIikge1xyXG4gICAgICAgICAgdGhpcy5jb21tb25Mb2FkZXJTZXJ2aWNlcy5hZGRMb2FkZXJFbGVtZW50KGZhbHNlKTsgdGhpcy5DaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgdmFyIHJlcyA9IHRoaXMuY29tbW9uc2VydmljZS5jbG9zZUVycm9yUmVzcG9uc2U7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2UudG9hc3RvcGVuKHRoaXMubWVzc2FnZSwgXCJlcnJvclwiLCBcIlwiLCA3MDAwKTtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZSA9IFwiXCI7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2UuY2xvc2VFcnJvclJlc3BvbnNlID0gbnVsbDtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHJlcyk7XHJcbiAgICAgICAgICByZXR1cm4gb2YocmVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb21tb25Mb2FkZXJTZXJ2aWNlcy5hZGRMb2FkZXJFbGVtZW50KHRydWUpOyB0aGlzLkNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpc2VydmljZS5Qb3N0KFJ4RGV0YWlscywgY29uZmlnLkNSRUFURV9DT05TVUxUQVRJT04pLnBpcGUoXHJcbiAgICAgICAgICBzd2l0Y2hNYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50ZW1wUnhEZXRhaWxzID0gbnVsbDtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vbkxvYWRlclNlcnZpY2VzLmFkZExvYWRlckVsZW1lbnQoZmFsc2UpOyB0aGlzLkNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuSXNOdWxsT3JFbXB0eShyZXMpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2Uuc2V0bG9ndmFsdWUoZmFsc2UsIFwiXCIsIFwiXCIsIFwiSG9sYVJ4XCIsIFwib3BlbkVkaXRSeFwiLCBSeERldGFpbHMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NC5tZXNzYWdlLCAnZXJyb3InLCBlcnJvcmNvbmZpZy5lcnJvcl82NC5jb2RlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChyZXMucmVzcG9uc2VfY29kZSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2UucGh5c2ljaWFuRGV0YWlscyA9IHJlcy5waHlzaWNpYW5EZXRhaWxzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnBhdGllbnREZXRhaWxzID0gcmVzLnBhdGllbnREZXRhaWxzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLmZhY2lsaXR5RGV0YWlscyA9IHJlcy5mYWNpbGl0eURldGFpbHM7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2UudmVuZG9yUGF0aWVudElkID0gcmVzLnZlbmRvclBhdGllbnRJZDtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS52ZW5kb3JGYWNpbGl0eUlkID0gcmVzLnZlbmRvckZhY2lsaXR5SWQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2UudmVuZG9yUGh5c2ljaWFuSWQgPSByZXMudmVuZG9yUGh5c2ljaWFuSWQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2UudmlzaXRJZCA9IHJlcy52aXNpdElkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLmlzTWVkaWNpbmVSZXN0cmljdCA9ICF0aGlzLmNvbW1vbnNlcnZpY2UuSXNOdWxsT3JFbXB0eShyZXMuaXNSZXN0cmljdGVkTWVkaWNpbmUpID8gcmVzLmlzUmVzdHJpY3RlZE1lZGljaW5lIDogZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2UucGhhcm1hY3lFbWFpbCA9ICF0aGlzLklzTnVsbE9yRW1wdHkocmVzLnBoYXJtYWN5RW1haWwpID8gcmVzLnBoYXJtYWN5RW1haWwgOiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLmlzU2NyaXB0VG9QaGFybWFjeSA9ICghdGhpcy5Jc051bGxPckVtcHR5KHJlcy5pc1NjcmlwdFRvUGhhcm1hY3kpICYmIHJlcy5pc1NjcmlwdFRvUGhhcm1hY3kpICE9IDAgPyByZXMuaXNTY3JpcHRUb1BoYXJtYWN5IDogMDtcclxuICAgICAgICAgICAgICAgIGlmIChSeERldGFpbHMucnhpZCAhPSBudWxsICYmIFJ4RGV0YWlscy5yeGlkICE9IFwiXCIgJiYgUnhEZXRhaWxzLnJ4aWQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChyZXMucnhEZXRhaWxzICE9IG51bGwgJiYgcmVzLnJ4RGV0YWlscyAhPSBcIlwiICYmIHJlcy5yeERldGFpbHMgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLmVkaXRQcmVzY3JpcHRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS5yeERldGFpbHMgPSByZXMucnhEZXRhaWxzO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS5yeGlkID0gcmVzLnJ4RGV0YWlscy5yeElkO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS5zZXRsb2d2YWx1ZShmYWxzZSwgZXJyb3Jjb25maWcuZXJyb3JfNDYubWVzc2FnZSwgZXJyb3Jjb25maWcuZXJyb3JfNDYubWVzc2FnZSwgXCJIb2xhUnhcIiwgXCJvcGVuRWRpdFJ4XCIsIFJ4RGV0YWlscyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl80Ni5tZXNzYWdlLCBcImVycm9yXCIsIGVycm9yY29uZmlnLmVycm9yXzQ2LmNvZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNDYuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNDYubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS5jcmVhdGVQYXRpZW50UmVzcG9uc2UgPSByZXM7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2UuZW5hYmxlUGFwZXJTY3JpcHQgPSByZXMuaXNFbmFibGVTY3JpcHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2UuZW5hYmxlU2VuZFBhcGVyU2NyaXB0SW5NYWlsID0gcmVzLmlzRW5hYmxlU2NyaXB0TWFpbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS5lbmFibGVTZW5kRVNjcmlwdEluTWFpbCA9IHJlcy5pc0VuYWJsZUVzY3JpcHRNYWlsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLmVuYWJsZUVTY3JpcHQgPSByZXMuaXNFbmFibGVFc2NyaXB0O1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25zZXJ2aWNlLnBoeXNpY2lhbkRldGFpbHMpICYmICF0aGlzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25zZXJ2aWNlLnBoeXNpY2lhbkRldGFpbHMuZVByZXNjcmlwdGlvbkFsbG93ZWQpICYmIHRoaXMuY29tbW9uc2VydmljZS5waHlzaWNpYW5EZXRhaWxzLmVQcmVzY3JpcHRpb25BbGxvd2VkID09IDApXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuSEl2YWxpZGF0aW9uKHJlcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb21tb25zZXJ2aWNlLm9wZW5SeFdpZGdldCh0aGlzLmNvbnRlbnQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS5zZXRsb2d2YWx1ZShmYWxzZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCBcIkhvbGFSeFwiLCBcIm9wZW5FZGl0UnhcIiwgUnhEZXRhaWxzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS50b2FzdG9wZW4ocmVzLnJlc3BvbnNlX21lc3NhZ2UsIFwiZXJyb3JcIiwgcmVzLmVycm9yX2NvZGUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JSZXNwb25zZShyZXMuZXJyb3JfY29kZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMuYWRkTG9hZGVyRWxlbWVudChmYWxzZSk7IHRoaXMuQ2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2Uuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIkhvbGFSeFwiLCBcIm9wZW5FZGl0UnhcIiwgUnhEZXRhaWxzKTtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvclJlc3BvbnNlKHJlcy5lcnJvcl9jb2RlLCByZXMucmVzcG9uc2VfbWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pLCBjYXRjaEVycm9yKChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMuYWRkTG9hZGVyRWxlbWVudChmYWxzZSk7IHRoaXMuQ2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IsIFwiZXJyb3JcIiwgZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS5zZXRsb2d2YWx1ZShmYWxzZSwgZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2ssIFwiSG9sYVJ4XCIsIFwib3BlbkVkaXRSeFwiLCBSeERldGFpbHMpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzY1LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzY1Lm1lc3NhZ2UgKyBlcnJvcik7XHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdmFyIGRhdGEgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdyeENyZWRlbnRpYWxzJykgYXMgYW55KTtcclxuICAgICAgICBpZiAoZGF0YSAhPSBudWxsICYmICF0aGlzLklzTnVsbE9yRW1wdHkoZGF0YS5jbGllbnRJZCkgJiYgIXRoaXMuSXNOdWxsT3JFbXB0eShkYXRhLmNsaWVudFNlY3JldCkgJiYgdGhpcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uc2VydmljZS5Ib2xhUnhUb2tlbikpIHtcclxuICAgICAgICAgIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMuYWRkTG9hZGVyRWxlbWVudCh0cnVlKTsgdGhpcy5DaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5pdChkYXRhLmNsaWVudElkLCBkYXRhLmNsaWVudFNlY3JldCwgdGhpcy5jb21tb25zZXJ2aWNlLnNhbmRib3gsIDIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbW1vbkxvYWRlclNlcnZpY2VzLmFkZExvYWRlckVsZW1lbnQoZmFsc2UpOyB0aGlzLkNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnNldGxvZ3ZhbHVlKGZhbHNlLCBlcnJvcmNvbmZpZy5lcnJvcl8xLm1lc3NhZ2UsIGVycm9yY29uZmlnLmVycm9yXzEubWVzc2FnZSwgXCJIb2xhUnhcIiwgXCJvcGVuRWRpdFJ4XCIsIFJ4RGV0YWlscyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl8xLmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzEubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMuYWRkTG9hZGVyRWxlbWVudChmYWxzZSk7IHRoaXMuQ2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJIb2xhUnhcIiwgXCJvcGVuRWRpdFJ4XCIsIFJ4RGV0YWlscyk7XHJcbiAgICAgIHJldHVybiB0aGlzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVuUmVmZXJyYWwoUnhEZXRhaWxzOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgdGhpcy5jb21tb25Mb2FkZXJTZXJ2aWNlcy5yeEluaXRMb2FkZXJIaWRkZGVuID0gZmFsc2U7XHJcbiAgICB0aGlzLmNvbW1vbnNlcnZpY2UubG9ndHJhbnNhY3Rpb24gPSBcIlNlbmQgUmVmZXJyYWxcIjtcclxuICAgIHRoaXMuY29tbW9uc2VydmljZS5sb2dpZGVudGlmaWVyID0gIXRoaXMuSXNOdWxsT3JFbXB0eShSeERldGFpbHMpID8gIXRoaXMuSXNOdWxsT3JFbXB0eShSeERldGFpbHMucHJhY3RpdGlvbmVyKSA/ICF0aGlzLklzTnVsbE9yRW1wdHkoUnhEZXRhaWxzLnByYWN0aXRpb25lci5lbWFpbCkgPyBSeERldGFpbHMucHJhY3RpdGlvbmVyLmVtYWlsIDogXCJcIiA6IFwiXCIgOiBcIlwiO1xyXG4gICAgdGhpcy5jb21tb25zZXJ2aWNlLmxvZ2lkZW50aWZpZXJUeXBlID0gXCJwcmFjdGl0aW9uZXIgZW1haWxcIjtcclxuICAgIHRyeSB7XHJcbiAgICAgIFJ4RGV0YWlscy50eXBlID0gXCIyXCI7XHJcbiAgICAgIFJ4RGV0YWlscy5jbGllbnRJZCA9IHRoaXMuY29tbW9uc2VydmljZS5nZXRDcmVkZXRpYWwoKTtcclxuICAgICAgdGhpcy50ZW1wUnhEZXRhaWxzID0gUnhEZXRhaWxzO1xyXG4gICAgICB0aGlzLmF1ZGl0bG9nKEpTT04uc3RyaW5naWZ5KFJ4RGV0YWlscyksIGNvbmZpZy5DUkVBVEVfQ09OU1VMVEFUSU9OKTtcclxuICAgICAgaWYgKCF0aGlzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25zZXJ2aWNlLkhvbGFSeFRva2VuKSkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbihSeERldGFpbHMsIDMpO1xyXG4gICAgICAgIGlmICh0aGlzLm1lc3NhZ2UgIT0gXCJcIikge1xyXG4gICAgICAgICAgdGhpcy5jb21tb25Mb2FkZXJTZXJ2aWNlcy5hZGRMb2FkZXJFbGVtZW50KGZhbHNlKTsgdGhpcy5DaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgdmFyIHJlcyA9IHRoaXMuY29tbW9uc2VydmljZS5jbG9zZUVycm9yUmVzcG9uc2U7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2Uuc2V0bG9ndmFsdWUoZmFsc2UsIHRoaXMubWVzc2FnZSwgdGhpcy5tZXNzYWdlLCBcIkhvbGFSeFwiLCBcIm9wZW5SZWZlcnJhbFwiLCBSeERldGFpbHMpO1xyXG4gICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnRvYXN0b3Blbih0aGlzLm1lc3NhZ2UsIFwiZXJyb3JcIiwgXCJcIiwgNzAwMCk7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBcIlwiO1xyXG4gICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLmNsb3NlRXJyb3JSZXNwb25zZSA9IG51bGw7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhyZXMpO1xyXG4gICAgICAgICAgcmV0dXJuIG9mKHJlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMuYWRkTG9hZGVyRWxlbWVudCh0cnVlKTsgdGhpcy5DaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFwaXNlcnZpY2UuUG9zdChSeERldGFpbHMsIGNvbmZpZy5DUkVBVEVfQ09OU1VMVEFUSU9OKS5waXBlKFxyXG4gICAgICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMuYWRkTG9hZGVyRWxlbWVudChmYWxzZSk7IHRoaXMuQ2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5Jc051bGxPckVtcHR5KHJlcykpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS5zZXRsb2d2YWx1ZShmYWxzZSwgXCJcIiwgXCJcIiwgXCJIb2xhUnhcIiwgXCJvcGVuUmVmZXJyYWxcIiwgUnhEZXRhaWxzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzY0LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzY0Lm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAocmVzLnJlc3BvbnNlX2NvZGUgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnBoeXNpY2lhbkRldGFpbHMgPSByZXMucGh5c2ljaWFuRGV0YWlscztcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS5wYXRpZW50RGV0YWlscyA9IHJlcy5wYXRpZW50RGV0YWlscztcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS5mYWNpbGl0eURldGFpbHMgPSByZXMuZmFjaWxpdHlEZXRhaWxzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnZlbmRvclBhdGllbnRJZCA9IHJlcy52ZW5kb3JQYXRpZW50SWQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2UudmVuZG9yRmFjaWxpdHlJZCA9IHJlcy52ZW5kb3JGYWNpbGl0eUlkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnZlbmRvclBoeXNpY2lhbklkID0gcmVzLnZlbmRvclBoeXNpY2lhbklkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnZpc2l0SWQgPSByZXMudmlzaXRJZDtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS5pc01lZGljaW5lUmVzdHJpY3QgPSAhdGhpcy5jb21tb25zZXJ2aWNlLklzTnVsbE9yRW1wdHkocmVzLmlzUmVzdHJpY3RlZE1lZGljaW5lKSA/IHJlcy5pc1Jlc3RyaWN0ZWRNZWRpY2luZSA6IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnBoYXJtYWN5RW1haWwgPSAhdGhpcy5Jc051bGxPckVtcHR5KHJlcy5waGFybWFjeUVtYWlsKSA/IHJlcy5waGFybWFjeUVtYWlsIDogXCJcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS5pc1NjcmlwdFRvUGhhcm1hY3kgPSAoIXRoaXMuSXNOdWxsT3JFbXB0eShyZXMuaXNTY3JpcHRUb1BoYXJtYWN5KSAmJiByZXMuaXNTY3JpcHRUb1BoYXJtYWN5KSAhPSAwID8gcmVzLmlzU2NyaXB0VG9QaGFybWFjeSA6IDA7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb21tb25zZXJ2aWNlLlBhdGhvbG9neSh0aGlzLmNvbnRlbnQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS5zZXRsb2d2YWx1ZShmYWxzZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCBcIkhvbGFSeFwiLCBcIm9wZW5SZWZlcnJhbFwiLCBSeERldGFpbHMpOyB0aGlzLmNvbW1vbnNlcnZpY2UudG9hc3RvcGVuKHJlcy5yZXNwb25zZV9tZXNzYWdlLCBcImVycm9yXCIsIHJlcy5lcnJvcl9jb2RlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yUmVzcG9uc2UocmVzLmVycm9yX2NvZGUsIHJlcy5yZXNwb25zZV9tZXNzYWdlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vbkxvYWRlclNlcnZpY2VzLmFkZExvYWRlckVsZW1lbnQoZmFsc2UpOyB0aGlzLkNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJIb2xhUnhcIiwgXCJvcGVuUmVmZXJyYWxcIiwgUnhEZXRhaWxzKTtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvclJlc3BvbnNlKHJlcy5lcnJvcl9jb2RlLCByZXMucmVzcG9uc2VfbWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pLCBjYXRjaEVycm9yKChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMuYWRkTG9hZGVyRWxlbWVudChmYWxzZSk7IHRoaXMuQ2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IsIFwiZXJyb3JcIiwgZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS5zZXRsb2d2YWx1ZShmYWxzZSwgdGhpcy5tZXNzYWdlLCBlcnJvci5zdGFjaywgXCJIb2xhUnhcIiwgXCJvcGVuUmVmZXJyYWxcIiwgUnhEZXRhaWxzKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82NS5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IpO1xyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHZhciBkYXRhID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncnhDcmVkZW50aWFscycpIGFzIGFueSk7XHJcbiAgICAgICAgaWYgKGRhdGEgIT0gbnVsbCAmJiAhdGhpcy5Jc051bGxPckVtcHR5KGRhdGEuY2xpZW50SWQpICYmICF0aGlzLklzTnVsbE9yRW1wdHkoZGF0YS5jbGllbnRTZWNyZXQpICYmIHRoaXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vbnNlcnZpY2UuSG9sYVJ4VG9rZW4pKSB7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vbkxvYWRlclNlcnZpY2VzLmFkZExvYWRlckVsZW1lbnQodHJ1ZSk7IHRoaXMuQ2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmluaXQoZGF0YS5jbGllbnRJZCwgZGF0YS5jbGllbnRTZWNyZXQsIHRoaXMuY29tbW9uc2VydmljZS5zYW5kYm94LCAzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb21tb25Mb2FkZXJTZXJ2aWNlcy5hZGRMb2FkZXJFbGVtZW50KGZhbHNlKTsgdGhpcy5DaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uc2VydmljZS5zZXRsb2d2YWx1ZShmYWxzZSwgZXJyb3Jjb25maWcuZXJyb3JfMS5tZXNzYWdlLCBlcnJvcmNvbmZpZy5lcnJvcl8xLm1lc3NhZ2UsIFwiSG9sYVJ4XCIsIFwib3BlblJlZmVycmFsXCIsIFJ4RGV0YWlscyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl8xLmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzEubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMuYWRkTG9hZGVyRWxlbWVudChmYWxzZSk7IHRoaXMuQ2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJIb2xhUnhcIiwgXCJvcGVuUmVmZXJyYWxcIiwgUnhEZXRhaWxzKTtcclxuICAgICAgcmV0dXJuIHRoaXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82NC5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82NC5tZXNzYWdlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRvd25sb2FkUngoUnhJRDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMucnhJbml0TG9hZGVySGlkZGRlbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5jb21tb25zZXJ2aWNlLmxvZ3RyYW5zYWN0aW9uID0gXCJEb3dubG9hZCBSeFwiO1xyXG4gICAgdGhpcy5jb21tb25zZXJ2aWNlLmxvZ2lkZW50aWZpZXIgPSBSeElEO1xyXG4gICAgdGhpcy5jb21tb25zZXJ2aWNlLmxvZ2lkZW50aWZpZXJUeXBlID0gXCJyeGlkXCI7XHJcbiAgICB2YXIgcGF5bG9hZCA9IHt9O1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy50ZW1wcnhpZCA9IFJ4SUQ7XHJcbiAgICAgIHZhciBjbGllbnRJZCA9IHRoaXMuY29tbW9uc2VydmljZS5nZXRDcmVkZXRpYWwoKTtcclxuICAgICAgcGF5bG9hZCA9IHtcclxuICAgICAgICByZXF1ZXN0X3R5cGU6IFwicGFyYW1ldGVyXCIsXHJcbiAgICAgICAgcnhpZDogUnhJRCxcclxuICAgICAgICB0eXBlOiBcIjBcIixcclxuICAgICAgICBjbGllbnRJZDogY2xpZW50SWRcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5hdWRpdGxvZyhKU09OLnN0cmluZ2lmeShwYXlsb2FkKSwgY29uZmlnLlBIWVNJQ0lBTi5SWF9QUklOVCArIFJ4SUQgKyBcIiZ0eXBlPTAmY2xpZW50SWQ9XCIgKyBjbGllbnRJZCk7XHJcbiAgICAgIGlmICghdGhpcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uc2VydmljZS5Ib2xhUnhUb2tlbikpIHtcclxuICAgICAgICBpZiAodGhpcy5Jc051bGxPckVtcHR5KFJ4SUQpKSB7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2UudG9hc3RvcGVuKGVycm9yY29uZmlnLmVycm9yXzQ2Lm1lc3NhZ2UsIFwiZXJyb3JcIiwgZXJyb3Jjb25maWcuZXJyb3JfNDYuY29kZSk7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzQ2LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzQ2Lm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbW1vbkxvYWRlclNlcnZpY2VzLmFkZExvYWRlckVsZW1lbnQodHJ1ZSk7IHRoaXMuQ2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5hcGlzZXJ2aWNlLkdldChjb25maWcuUEhZU0lDSUFOLlJYX1BSSU5UICsgUnhJRCArIFwiJnR5cGU9MCZjbGllbnRJZD1cIiArIGNsaWVudElkKS5waXBlKFxyXG4gICAgICAgICAgc3dpdGNoTWFwKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuSXNOdWxsT3JFbXB0eShyZXNwb25zZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS5zZXRsb2d2YWx1ZShmYWxzZSwgXCJcIiwgXCJcIiwgXCJIb2xhUnhcIiwgXCJkb3dubG9hZFJ4XCIsIHBheWxvYWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25Mb2FkZXJTZXJ2aWNlcy5hZGRMb2FkZXJFbGVtZW50KGZhbHNlKTsgdGhpcy5DaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NC5tZXNzYWdlLCAnZXJyb3InLCBlcnJvcmNvbmZpZy5lcnJvcl82NC5jb2RlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChyZXNwb25zZS5yZXNwb25zZV9jb2RlID09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uRG93bmxvYWQocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JSZXNwb25zZShcIlwiLCByZXNwb25zZS5yZXNwb25zZV9tZXNzYWdlLCB0cnVlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbkxvYWRlclNlcnZpY2VzLmFkZExvYWRlckVsZW1lbnQoZmFsc2UpOyB0aGlzLkNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2Uuc2V0bG9ndmFsdWUoZmFsc2UsIHJlc3BvbnNlLnJlc3BvbnNlX21lc3NhZ2UsIHJlc3BvbnNlLnJlc3BvbnNlX21lc3NhZ2UsIFwiSG9sYVJ4XCIsIFwiZG93bmxvYWRSeFwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS50b2FzdG9wZW4ocmVzcG9uc2UucmVzcG9uc2VfbWVzc2FnZSwgJ2Vycm9yJywgcmVzcG9uc2UuZXJyb3JfY29kZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvclJlc3BvbnNlKHJlc3BvbnNlLmVycm9yX2NvZGUsIHJlc3BvbnNlLnJlc3BvbnNlX21lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMuYWRkTG9hZGVyRWxlbWVudChmYWxzZSk7IHRoaXMuQ2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2Uuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIkhvbGFSeFwiLCBcImRvd25sb2FkUnhcIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JSZXNwb25zZShyZXNwb25zZS5lcnJvcl9jb2RlLCByZXNwb25zZS5yZXNwb25zZV9tZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSksIGNhdGNoRXJyb3IoKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25Mb2FkZXJTZXJ2aWNlcy5hZGRMb2FkZXJFbGVtZW50KGZhbHNlKTsgdGhpcy5DaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2UudG9hc3RvcGVuKGVycm9yY29uZmlnLmVycm9yXzY1Lm1lc3NhZ2UgKyBlcnJvciwgXCJlcnJvclwiLCBlcnJvcmNvbmZpZy5lcnJvcl82NS5jb2RlKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnNldGxvZ3ZhbHVlKGZhbHNlLCBlcnJvci5tZXNzYWdlLCBlcnJvci5zdGFjaywgXCJIb2xhUnhcIiwgXCJkb3dubG9hZFJ4XCIsIHBheWxvYWQpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzY1LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzY1Lm1lc3NhZ2UgKyBlcnJvcik7XHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdmFyIGRhdGEgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdyeENyZWRlbnRpYWxzJykgYXMgYW55KTtcclxuICAgICAgICBpZiAoZGF0YSAhPSBudWxsICYmICF0aGlzLklzTnVsbE9yRW1wdHkoZGF0YS5jbGllbnRJZCkgJiYgIXRoaXMuSXNOdWxsT3JFbXB0eShkYXRhLmNsaWVudFNlY3JldCkgJiYgdGhpcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uc2VydmljZS5Ib2xhUnhUb2tlbikpIHtcclxuICAgICAgICAgIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMuYWRkTG9hZGVyRWxlbWVudCh0cnVlKTsgdGhpcy5DaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5pdChkYXRhLmNsaWVudElkLCBkYXRhLmNsaWVudFNlY3JldCwgdGhpcy5jb21tb25zZXJ2aWNlLnNhbmRib3gsIDQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbW1vbkxvYWRlclNlcnZpY2VzLmFkZExvYWRlckVsZW1lbnQoZmFsc2UpOyB0aGlzLkNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnNldGxvZ3ZhbHVlKGZhbHNlLCBlcnJvcmNvbmZpZy5lcnJvcl8xLm1lc3NhZ2UsIGVycm9yY29uZmlnLmVycm9yXzEubWVzc2FnZSwgXCJIb2xhUnhcIiwgXCJkb3dubG9hZFJ4XCIsIHBheWxvYWQpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfMS5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl8xLm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vbkxvYWRlclNlcnZpY2VzLmFkZExvYWRlckVsZW1lbnQoZmFsc2UpOyB0aGlzLkNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuY29tbW9uc2VydmljZS5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiSG9sYVJ4XCIsIFwiZG93bmxvYWRSeFwiLCBwYXlsb2FkKTtcclxuICAgICAgcmV0dXJuIHRoaXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82NC5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82NC5tZXNzYWdlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRvd25sb2FkUmVmZXJyYWwoUmVmZXJyYWxJRDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMucnhJbml0TG9hZGVySGlkZGRlbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5jb21tb25zZXJ2aWNlLmxvZ3RyYW5zYWN0aW9uID0gXCJEb3dubG9hZCBSZWZlcnJhbFwiO1xyXG4gICAgdGhpcy5jb21tb25zZXJ2aWNlLmxvZ2lkZW50aWZpZXIgPSBSZWZlcnJhbElEO1xyXG4gICAgdGhpcy5jb21tb25zZXJ2aWNlLmxvZ2lkZW50aWZpZXJUeXBlID0gXCJyZWZlcnJhbCBpZFwiO1xyXG4gICAgdmFyIHBheWxvYWQgPSB7fTtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMudGVtcHJlZmVycmFsaWQgPSBSZWZlcnJhbElEO1xyXG4gICAgICBwYXlsb2FkID0ge1xyXG4gICAgICAgIHJlcXVlc3RfdHlwZTogXCJwYXJhbWV0ZXJcIixcclxuICAgICAgICByZWZlcnJhbElkOiBSZWZlcnJhbElEXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5hdWRpdGxvZyhKU09OLnN0cmluZ2lmeShwYXlsb2FkKSwgY29uZmlnLlBIWVNJQ0lBTi5SRUZFUlJBTF9QUklOVCArIFJlZmVycmFsSUQpO1xyXG4gICAgICBpZiAoIXRoaXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vbnNlcnZpY2UuSG9sYVJ4VG9rZW4pKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuSXNOdWxsT3JFbXB0eShSZWZlcnJhbElEKSkge1xyXG4gICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl80My5tZXNzYWdlLCBcImVycm9yXCIsIGVycm9yY29uZmlnLmVycm9yXzQzLmNvZGUpO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl80My5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl80My5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb21tb25Mb2FkZXJTZXJ2aWNlcy5hZGRMb2FkZXJFbGVtZW50KHRydWUpOyB0aGlzLkNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpc2VydmljZS5HZXQoY29uZmlnLlBIWVNJQ0lBTi5SRUZFUlJBTF9QUklOVCArIFJlZmVycmFsSUQpLnBpcGUoXHJcbiAgICAgICAgICBzd2l0Y2hNYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5Jc051bGxPckVtcHR5KHJlc3BvbnNlKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25Mb2FkZXJTZXJ2aWNlcy5hZGRMb2FkZXJFbGVtZW50KGZhbHNlKTsgdGhpcy5DaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnNldGxvZ3ZhbHVlKGZhbHNlLCBcIlwiLCBcIlwiLCBcIkhvbGFSeFwiLCBcImRvd25sb2FkUmVmZXJyYWxcIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2UudG9hc3RvcGVuKGVycm9yY29uZmlnLmVycm9yXzY0Lm1lc3NhZ2UsICdlcnJvcicsIGVycm9yY29uZmlnLmVycm9yXzY0LmNvZGUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82NC5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82NC5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnJlc3BvbnNlX2NvZGUgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25Eb3dubG9hZChyZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvclJlc3BvbnNlKFwiXCIsIHJlc3BvbnNlLnJlc3BvbnNlX21lc3NhZ2UsIHRydWUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMuYWRkTG9hZGVyRWxlbWVudChmYWxzZSk7IHRoaXMuQ2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS5zZXRsb2d2YWx1ZShmYWxzZSwgcmVzcG9uc2UucmVzcG9uc2VfbWVzc2FnZSwgcmVzcG9uc2UucmVzcG9uc2VfbWVzc2FnZSwgXCJIb2xhUnhcIiwgXCJkb3dubG9hZFJlZmVycmFsXCIsIHBheWxvYWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnRvYXN0b3BlbihyZXNwb25zZS5yZXNwb25zZV9tZXNzYWdlLCAnZXJyb3InLCByZXNwb25zZS5lcnJvcl9jb2RlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yUmVzcG9uc2UocmVzcG9uc2UuZXJyb3JfY29kZSwgcmVzcG9uc2UucmVzcG9uc2VfbWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25Mb2FkZXJTZXJ2aWNlcy5hZGRMb2FkZXJFbGVtZW50KGZhbHNlKTsgdGhpcy5DaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiSG9sYVJ4XCIsIFwiZG93bmxvYWRSZWZlcnJhbFwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvclJlc3BvbnNlKHJlc3BvbnNlLmVycm9yX2NvZGUsIHJlc3BvbnNlLnJlc3BvbnNlX21lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KSwgY2F0Y2hFcnJvcigoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vbkxvYWRlclNlcnZpY2VzLmFkZExvYWRlckVsZW1lbnQoZmFsc2UpOyB0aGlzLkNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uc2VydmljZS50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNjUubWVzc2FnZSArIGVycm9yLCBcImVycm9yXCIsIGVycm9yY29uZmlnLmVycm9yXzY1LmNvZGUpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2Uuc2V0bG9ndmFsdWUoZmFsc2UsIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrLCBcIkhvbGFSeFwiLCBcImRvd25sb2FkUmVmZXJyYWxcIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjUubWVzc2FnZSArIGVycm9yKTtcclxuICAgICAgICAgIH0pKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3J4Q3JlZGVudGlhbHMnKSBhcyBhbnkpO1xyXG4gICAgICAgIGlmIChkYXRhICE9IG51bGwgJiYgIXRoaXMuSXNOdWxsT3JFbXB0eShkYXRhLmNsaWVudElkKSAmJiAhdGhpcy5Jc051bGxPckVtcHR5KGRhdGEuY2xpZW50U2VjcmV0KSAmJiB0aGlzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25zZXJ2aWNlLkhvbGFSeFRva2VuKSkge1xyXG4gICAgICAgICAgdGhpcy5jb21tb25Mb2FkZXJTZXJ2aWNlcy5hZGRMb2FkZXJFbGVtZW50KHRydWUpOyB0aGlzLkNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbml0KGRhdGEuY2xpZW50SWQsIGRhdGEuY2xpZW50U2VjcmV0LCB0aGlzLmNvbW1vbnNlcnZpY2Uuc2FuZGJveCwgNSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMuYWRkTG9hZGVyRWxlbWVudChmYWxzZSk7IHRoaXMuQ2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2Uuc2V0bG9ndmFsdWUoZmFsc2UsIGVycm9yY29uZmlnLmVycm9yXzEubWVzc2FnZSwgZXJyb3Jjb25maWcuZXJyb3JfMS5tZXNzYWdlLCBcIkhvbGFSeFwiLCBcImRvd25sb2FkUmVmZXJyYWxcIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl8xLmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzEubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMuYWRkTG9hZGVyRWxlbWVudChmYWxzZSk7IHRoaXMuQ2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJIb2xhUnhcIiwgXCJkb3dubG9hZFJlZmVycmFsXCIsIHBheWxvYWQpO1xyXG4gICAgICByZXR1cm4gdGhpcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzY0LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzY0Lm1lc3NhZ2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21tb25Eb3dubG9hZChyZXNwb25zZTogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICBhLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnZGlzcGxheTpub25lOycpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpO1xyXG4gICAgICBhLmRvd25sb2FkID0gcmVzcG9uc2UuZmlsZU5hbWU7XHJcbiAgICAgIGEuaHJlZiA9IFwiZGF0YTphcHBsaWNhdGlvbi9wZGY7Y2hhcnNldD11dGYtODtiYXNlNjQsXCIgKyByZXNwb25zZS5maWxlO1xyXG4gICAgICBhLmNsaWNrKCk7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSk7XHJcbiAgICAgIHRoaXMuY29tbW9uTG9hZGVyU2VydmljZXMuYWRkTG9hZGVyRWxlbWVudChmYWxzZSk7IHRoaXMuQ2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnRvYXN0b3BlbihyZXNwb25zZS5yZXNwb25zZV9tZXNzYWdlLCAnc3VjY2VzcycpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJIb2xhUnhcIiwgXCJjb21tb25Eb3dubG9hZFwiKTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBhcHBvaW50bWVudFZhbGlkYXRpb24oUnhEZXRhaWxzOiBhbnksIGZsYWc6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMuSXNOdWxsT3JFbXB0eShSeERldGFpbHMuZmFjaWxpdHlpZCkpIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb250b2FzdChlcnJvcmNvbmZpZy5lcnJvcl80Lm1lc3NhZ2UsIGVycm9yY29uZmlnLmVycm9yXzQuY29kZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGZsYWcgPT0gMikge1xyXG4gICAgICAgICAgaWYgKHRoaXMuSXNOdWxsT3JFbXB0eShSeERldGFpbHMucnhpZCkpIHtcclxuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9udG9hc3QoZXJyb3Jjb25maWcuZXJyb3JfNDYubWVzc2FnZSwgZXJyb3Jjb25maWcuZXJyb3JfNDYuY29kZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25zZXJ2aWNlLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJIb2xhUnhcIiwgXCJ2YWxpZGF0aW9uXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIHZhbGlkYXRpb24oUnhEZXRhaWxzOiBhbnksIGZsYWc6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKCF0aGlzLklzTnVsbE9yRW1wdHkoUnhEZXRhaWxzKSkge1xyXG4gICAgICAgIGlmICh0aGlzLklzTnVsbE9yRW1wdHkoUnhEZXRhaWxzLmNvbnN1bHRhdGlvbmlkKSkge1xyXG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9udG9hc3QoZXJyb3Jjb25maWcuZXJyb3JfMi5tZXNzYWdlLCBlcnJvcmNvbmZpZy5lcnJvcl8yLmNvZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5Jc051bGxPckVtcHR5KFJ4RGV0YWlscy5wcmFjdGljZWlkKSAmJiB0aGlzLklzTnVsbE9yRW1wdHkoUnhEZXRhaWxzLnByYWN0aWNlKSkge1xyXG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9udG9hc3QoZXJyb3Jjb25maWcuZXJyb3JfMy5tZXNzYWdlLCBlcnJvcmNvbmZpZy5lcnJvcl8zLmNvZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5Jc051bGxPckVtcHR5KFJ4RGV0YWlscy5wcmFjdGl0aW9uZXJpZCkgJiYgdGhpcy5Jc051bGxPckVtcHR5KFJ4RGV0YWlscy5wcmFjdGl0aW9uZXIpKSB7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb250b2FzdChlcnJvcmNvbmZpZy5lcnJvcl8xMy5tZXNzYWdlLCBlcnJvcmNvbmZpZy5lcnJvcl8xMy5jb2RlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuSXNOdWxsT3JFbXB0eShSeERldGFpbHMucGF0aWVudGlkKSAmJiB0aGlzLklzTnVsbE9yRW1wdHkoUnhEZXRhaWxzLnBhdGllbnQpKSB7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb250b2FzdChlcnJvcmNvbmZpZy5lcnJvcl8yOS5tZXNzYWdlLCBlcnJvcmNvbmZpZy5lcnJvcl8yOS5jb2RlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZsYWcgPT0gMikge1xyXG4gICAgICAgICAgaWYgKHRoaXMuSXNOdWxsT3JFbXB0eShSeERldGFpbHMucnhpZCkpIHtcclxuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9udG9hc3QoZXJyb3Jjb25maWcuZXJyb3JfNDYubWVzc2FnZSwgZXJyb3Jjb25maWcuZXJyb3JfNDYuY29kZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmbGFnID09IDEpIHtcclxuICAgICAgICAgIGlmICghdGhpcy5Jc051bGxPckVtcHR5KFJ4RGV0YWlscy5yeGlkKSkge1xyXG4gICAgICAgICAgICBSeERldGFpbHMucnhpZCA9IFwiXCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5Jc051bGxPckVtcHR5KFJ4RGV0YWlscy5wcmFjdGljZSkpIHtcclxuICAgICAgICAgIGlmICh0aGlzLklzTnVsbE9yRW1wdHkoUnhEZXRhaWxzLnByYWN0aWNlLmlkKSlcclxuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9udG9hc3QoZXJyb3Jjb25maWcuZXJyb3JfNC5tZXNzYWdlLCBlcnJvcmNvbmZpZy5lcnJvcl80LmNvZGUpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuSXNOdWxsT3JFbXB0eShSeERldGFpbHMucHJhY3RpY2UubmFtZSkpXHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbnRvYXN0KGVycm9yY29uZmlnLmVycm9yXzUubWVzc2FnZSwgZXJyb3Jjb25maWcuZXJyb3JfNS5jb2RlKTtcclxuICAgICAgICAgIGlmICh0aGlzLklzTnVsbE9yRW1wdHkoUnhEZXRhaWxzLnByYWN0aWNlLmVtYWlsKSlcclxuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9udG9hc3QoZXJyb3Jjb25maWcuZXJyb3JfNi5tZXNzYWdlLCBlcnJvcmNvbmZpZy5lcnJvcl82LmNvZGUpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuSXNOdWxsT3JFbXB0eShSeERldGFpbHMucHJhY3RpY2UucGhvbmUpKVxyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb250b2FzdChlcnJvcmNvbmZpZy5lcnJvcl83Lm1lc3NhZ2UsIGVycm9yY29uZmlnLmVycm9yXzcuY29kZSk7XHJcbiAgICAgICAgICBpZiAodGhpcy5Jc051bGxPckVtcHR5KFJ4RGV0YWlscy5wcmFjdGljZS5hZGRyZXNzKSlcclxuICAgICAgICAgICAgUnhEZXRhaWxzLnByYWN0aWNlLmFkZHJlc3MgPSB7fTtcclxuICAgICAgICAgIGlmICh0aGlzLklzTnVsbE9yRW1wdHkoUnhEZXRhaWxzLnByYWN0aWNlLmFkZHJlc3M/LmFkZHJlc3NsaW5lMSkpXHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbnRvYXN0KGVycm9yY29uZmlnLmVycm9yXzcxLm1lc3NhZ2UsIGVycm9yY29uZmlnLmVycm9yXzcxLmNvZGUpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuSXNOdWxsT3JFbXB0eShSeERldGFpbHMucHJhY3RpY2UuYWRkcmVzcz8uYWRkcmVzc2xpbmUyKSlcclxuICAgICAgICAgICAgUnhEZXRhaWxzLnByYWN0aWNlLmFkZHJlc3MuYWRkcmVzc2xpbmUyID0gXCJcIjtcclxuICAgICAgICAgIGlmICh0aGlzLklzTnVsbE9yRW1wdHkoUnhEZXRhaWxzLnByYWN0aWNlLmFkZHJlc3M/LnN1YnVyYikpXHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbnRvYXN0KGVycm9yY29uZmlnLmVycm9yXzEwLm1lc3NhZ2UsIGVycm9yY29uZmlnLmVycm9yXzEwLmNvZGUpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuSXNOdWxsT3JFbXB0eShSeERldGFpbHMucHJhY3RpY2UuYWRkcmVzcz8ucG9zdGNvZGUpKVxyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb250b2FzdChlcnJvcmNvbmZpZy5lcnJvcl8xMS5tZXNzYWdlLCBlcnJvcmNvbmZpZy5lcnJvcl8xMS5jb2RlKTtcclxuICAgICAgICAgIGlmICh0aGlzLklzTnVsbE9yRW1wdHkoUnhEZXRhaWxzLnByYWN0aWNlLmFkZHJlc3M/LnN0YXRlKSlcclxuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9udG9hc3QoZXJyb3Jjb25maWcuZXJyb3JfMTIubWVzc2FnZSwgZXJyb3Jjb25maWcuZXJyb3JfMTIuY29kZSk7XHJcbiAgICAgICAgICBpZiAodGhpcy5Jc051bGxPckVtcHR5KFJ4RGV0YWlscy5wcmFjdGljZS5ocGlvKSkgeyBSeERldGFpbHMucHJhY3RpY2UuaHBpbyA9IDA7IH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLklzTnVsbE9yRW1wdHkoUnhEZXRhaWxzLnByYWN0aXRpb25lcikpIHtcclxuICAgICAgICAgIGlmICh0aGlzLklzTnVsbE9yRW1wdHkoUnhEZXRhaWxzLnByYWN0aXRpb25lci5pZCkpXHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbnRvYXN0KGVycm9yY29uZmlnLmVycm9yXzE0Lm1lc3NhZ2UsIGVycm9yY29uZmlnLmVycm9yXzE0LmNvZGUpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuSXNOdWxsT3JFbXB0eShSeERldGFpbHMucHJhY3RpdGlvbmVyLmZpcnN0bmFtZSkpXHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbnRvYXN0KGVycm9yY29uZmlnLmVycm9yXzE1Lm1lc3NhZ2UsIGVycm9yY29uZmlnLmVycm9yXzE1LmNvZGUpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuSXNOdWxsT3JFbXB0eShSeERldGFpbHMucHJhY3RpdGlvbmVyLmxhc3RuYW1lKSlcclxuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9udG9hc3QoZXJyb3Jjb25maWcuZXJyb3JfMTYubWVzc2FnZSwgZXJyb3Jjb25maWcuZXJyb3JfMTYuY29kZSk7XHJcbiAgICAgICAgICBpZiAodGhpcy5Jc051bGxPckVtcHR5KFJ4RGV0YWlscy5wcmFjdGl0aW9uZXIuZ2VuZGVyKSlcclxuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9udG9hc3QoZXJyb3Jjb25maWcuZXJyb3JfMTcubWVzc2FnZSwgZXJyb3Jjb25maWcuZXJyb3JfMTcuY29kZSk7XHJcbiAgICAgICAgICBpZiAodGhpcy5Jc051bGxPckVtcHR5KFJ4RGV0YWlscy5wcmFjdGl0aW9uZXIuZG9iKSlcclxuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9udG9hc3QoZXJyb3Jjb25maWcuZXJyb3JfMTgubWVzc2FnZSwgZXJyb3Jjb25maWcuZXJyb3JfMTguY29kZSk7XHJcbiAgICAgICAgICBpZiAodGhpcy5Jc051bGxPckVtcHR5KFJ4RGV0YWlscy5wcmFjdGl0aW9uZXIuZW1haWwpKVxyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb250b2FzdChlcnJvcmNvbmZpZy5lcnJvcl8xOS5tZXNzYWdlLCBlcnJvcmNvbmZpZy5lcnJvcl8xOS5jb2RlKTtcclxuICAgICAgICAgIGlmICh0aGlzLklzTnVsbE9yRW1wdHkoUnhEZXRhaWxzLnByYWN0aXRpb25lci5tb2JpbGVfcGhvbmUpKVxyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb250b2FzdChlcnJvcmNvbmZpZy5lcnJvcl8yMC5tZXNzYWdlLCBlcnJvcmNvbmZpZy5lcnJvcl8yMC5jb2RlKTtcclxuICAgICAgICAgIGlmICh0aGlzLklzTnVsbE9yRW1wdHkoUnhEZXRhaWxzLnByYWN0aXRpb25lci5hZGRyZXNzKSlcclxuICAgICAgICAgICAgUnhEZXRhaWxzLnByYWN0aXRpb25lci5hZGRyZXNzID0ge307XHJcbiAgICAgICAgICBpZiAodGhpcy5Jc051bGxPckVtcHR5KFJ4RGV0YWlscy5wcmFjdGl0aW9uZXIuYWRkcmVzcz8uYWRkcmVzc2xpbmUxKSlcclxuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9udG9hc3QoZXJyb3Jjb25maWcuZXJyb3JfNzIubWVzc2FnZSwgZXJyb3Jjb25maWcuZXJyb3JfNzIuY29kZSk7XHJcbiAgICAgICAgICBpZiAodGhpcy5Jc051bGxPckVtcHR5KFJ4RGV0YWlscy5wcmFjdGl0aW9uZXIuYWRkcmVzcz8uYWRkcmVzc2xpbmUyKSlcclxuICAgICAgICAgICAgUnhEZXRhaWxzLnByYWN0aXRpb25lci5hZGRyZXNzLmFkZHJlc3NsaW5lMiA9IFwiXCI7XHJcbiAgICAgICAgICBpZiAodGhpcy5Jc051bGxPckVtcHR5KFJ4RGV0YWlscy5wcmFjdGl0aW9uZXIuYWRkcmVzcz8uc3VidXJiKSlcclxuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9udG9hc3QoZXJyb3Jjb25maWcuZXJyb3JfMjMubWVzc2FnZSwgZXJyb3Jjb25maWcuZXJyb3JfMjMuY29kZSk7XHJcbiAgICAgICAgICBpZiAodGhpcy5Jc051bGxPckVtcHR5KFJ4RGV0YWlscy5wcmFjdGl0aW9uZXIuYWRkcmVzcz8ucG9zdGNvZGUpKVxyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb250b2FzdChlcnJvcmNvbmZpZy5lcnJvcl8yNC5tZXNzYWdlLCBlcnJvcmNvbmZpZy5lcnJvcl8yNC5jb2RlKTtcclxuICAgICAgICAgIGlmICh0aGlzLklzTnVsbE9yRW1wdHkoUnhEZXRhaWxzLnByYWN0aXRpb25lci5hZGRyZXNzPy5zdGF0ZSkpXHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbnRvYXN0KGVycm9yY29uZmlnLmVycm9yXzI1Lm1lc3NhZ2UsIGVycm9yY29uZmlnLmVycm9yXzI1LmNvZGUpO1xyXG4gICAgICAgICAgaWYgKGZsYWcgPT0gMykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5Jc051bGxPckVtcHR5KFJ4RGV0YWlscy5wcmFjdGl0aW9uZXIucHJvdmlkZXJudW1iZXIpKVxyXG4gICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbnRvYXN0KGVycm9yY29uZmlnLmVycm9yXzI3Lm1lc3NhZ2UsIGVycm9yY29uZmlnLmVycm9yXzI3LmNvZGUpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5Jc051bGxPckVtcHR5KFJ4RGV0YWlscy5wcmFjdGl0aW9uZXIuc2lnbmF0dXJlX2ltYWdlKSlcclxuICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb250b2FzdChlcnJvcmNvbmZpZy5lcnJvcl8yOC5tZXNzYWdlLCBlcnJvcmNvbmZpZy5lcnJvcl8yOC5jb2RlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLklzTnVsbE9yRW1wdHkoUnhEZXRhaWxzLnByYWN0aXRpb25lci5ocGlpKSkgeyBSeERldGFpbHMucHJhY3RpdGlvbmVyLmhwaWkgPSAwOyB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5Jc051bGxPckVtcHR5KFJ4RGV0YWlscy5wYXRpZW50KSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuSXNOdWxsT3JFbXB0eShSeERldGFpbHMucGF0aWVudC5pZCkpXHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbnRvYXN0KGVycm9yY29uZmlnLmVycm9yXzMwLm1lc3NhZ2UsIGVycm9yY29uZmlnLmVycm9yXzMwLmNvZGUpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuSXNOdWxsT3JFbXB0eShSeERldGFpbHMucGF0aWVudC5maXJzdG5hbWUpKVxyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb250b2FzdChlcnJvcmNvbmZpZy5lcnJvcl8zMS5tZXNzYWdlLCBlcnJvcmNvbmZpZy5lcnJvcl8zMS5jb2RlKTtcclxuICAgICAgICAgIGlmICh0aGlzLklzTnVsbE9yRW1wdHkoUnhEZXRhaWxzLnBhdGllbnQubGFzdG5hbWUpKVxyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb250b2FzdChlcnJvcmNvbmZpZy5lcnJvcl8zMi5tZXNzYWdlLCBlcnJvcmNvbmZpZy5lcnJvcl8zMi5jb2RlKTtcclxuICAgICAgICAgIGlmICh0aGlzLklzTnVsbE9yRW1wdHkoUnhEZXRhaWxzLnBhdGllbnQuZ2VuZGVyKSlcclxuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9udG9hc3QoZXJyb3Jjb25maWcuZXJyb3JfMzMubWVzc2FnZSwgZXJyb3Jjb25maWcuZXJyb3JfMzMuY29kZSk7XHJcbiAgICAgICAgICBpZiAodGhpcy5Jc051bGxPckVtcHR5KFJ4RGV0YWlscy5wYXRpZW50LmRvYikpXHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbnRvYXN0KGVycm9yY29uZmlnLmVycm9yXzM0Lm1lc3NhZ2UsIGVycm9yY29uZmlnLmVycm9yXzM0LmNvZGUpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuSXNOdWxsT3JFbXB0eShSeERldGFpbHMucGF0aWVudC5lbWFpbCkpXHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbnRvYXN0KGVycm9yY29uZmlnLmVycm9yXzM1Lm1lc3NhZ2UsIGVycm9yY29uZmlnLmVycm9yXzM1LmNvZGUpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuSXNOdWxsT3JFbXB0eShSeERldGFpbHMucGF0aWVudC5tb2JpbGVfcGhvbmUpKVxyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb250b2FzdChlcnJvcmNvbmZpZy5lcnJvcl8zNi5tZXNzYWdlLCBlcnJvcmNvbmZpZy5lcnJvcl8zNi5jb2RlKTtcclxuICAgICAgICAgIGlmICh0aGlzLklzTnVsbE9yRW1wdHkoUnhEZXRhaWxzLnBhdGllbnQudGltZXpvbmUpKVxyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb250b2FzdChlcnJvcmNvbmZpZy5lcnJvcl8zNy5tZXNzYWdlLCBlcnJvcmNvbmZpZy5lcnJvcl8zNy5jb2RlKTtcclxuICAgICAgICAgIGlmICh0aGlzLklzTnVsbE9yRW1wdHkoUnhEZXRhaWxzLnBhdGllbnQuYWRkcmVzcykpXHJcbiAgICAgICAgICAgIFJ4RGV0YWlscy5wYXRpZW50LmFkZHJlc3MgPSB7fTtcclxuICAgICAgICAgIGlmICh0aGlzLklzTnVsbE9yRW1wdHkoUnhEZXRhaWxzLnBhdGllbnQuYWRkcmVzcz8uYWRkcmVzc2xpbmUxKSlcclxuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9udG9hc3QoZXJyb3Jjb25maWcuZXJyb3JfNjcubWVzc2FnZSwgZXJyb3Jjb25maWcuZXJyb3JfNjcuY29kZSk7XHJcbiAgICAgICAgICBpZiAodGhpcy5Jc051bGxPckVtcHR5KFJ4RGV0YWlscy5wYXRpZW50LmFkZHJlc3M/LmFkZHJlc3NsaW5lMikpXHJcbiAgICAgICAgICAgIFJ4RGV0YWlscy5wYXRpZW50LmFkZHJlc3MuYWRkcmVzc2xpbmUyID0gXCJcIjtcclxuICAgICAgICAgIGlmICh0aGlzLklzTnVsbE9yRW1wdHkoUnhEZXRhaWxzLnBhdGllbnQuYWRkcmVzcz8uc3VidXJiKSlcclxuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9udG9hc3QoZXJyb3Jjb25maWcuZXJyb3JfNDAubWVzc2FnZSwgZXJyb3Jjb25maWcuZXJyb3JfNDAuY29kZSk7XHJcbiAgICAgICAgICBpZiAodGhpcy5Jc051bGxPckVtcHR5KFJ4RGV0YWlscy5wYXRpZW50LmFkZHJlc3M/LnBvc3Rjb2RlKSlcclxuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9udG9hc3QoZXJyb3Jjb25maWcuZXJyb3JfNDEubWVzc2FnZSwgZXJyb3Jjb25maWcuZXJyb3JfNDEuY29kZSk7XHJcbiAgICAgICAgICBpZiAodGhpcy5Jc051bGxPckVtcHR5KFJ4RGV0YWlscy5wYXRpZW50LmFkZHJlc3M/LnN0YXRlKSlcclxuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9udG9hc3QoZXJyb3Jjb25maWcuZXJyb3JfNDIubWVzc2FnZSwgZXJyb3Jjb25maWcuZXJyb3JfNDIuY29kZSk7XHJcbiAgICAgICAgICBpZiAodGhpcy5Jc051bGxPckVtcHR5KFJ4RGV0YWlscy5wYXRpZW50Lm1lZGljYXJlKSkge1xyXG4gICAgICAgICAgICBSeERldGFpbHMucGF0aWVudC5tZWRpY2FyZSA9IHt9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMuSXNOdWxsT3JFbXB0eShSeERldGFpbHMucGF0aWVudC5tZWRpY2FyZT8ubnVtYmVyKSkge1xyXG4gICAgICAgICAgICBSeERldGFpbHMucGF0aWVudC5tZWRpY2FyZS5udW1iZXIgPSBcIlwiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMuSXNOdWxsT3JFbXB0eShSeERldGFpbHMucGF0aWVudC5tZWRpY2FyZT8ucmVmZXJlbmNlKSkge1xyXG4gICAgICAgICAgICBSeERldGFpbHMucGF0aWVudC5tZWRpY2FyZS5yZWZlcmVuY2UgPSBcIlwiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMuSXNOdWxsT3JFbXB0eShSeERldGFpbHMucGF0aWVudC5tZWRpY2FyZT8uZXhwaXJ5KSkge1xyXG4gICAgICAgICAgICBSeERldGFpbHMucGF0aWVudC5tZWRpY2FyZS5leHBpcnkgPSBcIlwiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMuSXNOdWxsT3JFbXB0eShSeERldGFpbHMucGF0aWVudC5paGkpKSB7IFJ4RGV0YWlscy5wYXRpZW50LmloaSA9IDA7IH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9udG9hc3QoZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSwgZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uc2VydmljZS5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiSG9sYVJ4XCIsIFwidmFsaWRhdGlvblwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgSEl2YWxpZGF0aW9uKHZhbHVlOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHZhciB3YXJuaW5nX21zZyA9ICcnO1xyXG4gICAgICBpZiAoIXZhbHVlLmlzX2hwaW9fdmFsaWQpIHtcclxuICAgICAgICB3YXJuaW5nX21zZyA9IHZhbHVlLmhwaW9fcmVzcG9uc2VfbXNnO1xyXG4gICAgICB9IGlmICghdmFsdWUuaXNfaHBpaV92YWxpZCkge1xyXG4gICAgICAgIHdhcm5pbmdfbXNnICs9IHdhcm5pbmdfbXNnID09ICcnID8gdmFsdWUuaHBpX3Jlc3BvbnNlX21zZyA6IFwiPGJyPlwiICsgdmFsdWUuaHBpX3Jlc3BvbnNlX21zZztcclxuICAgICAgfSBpZiAoIXZhbHVlLmlzX2loaV92YWxpZCkge1xyXG4gICAgICAgIHdhcm5pbmdfbXNnICs9IHdhcm5pbmdfbXNnID09ICcnID8gdmFsdWUuaWhpX3Jlc3BvbnNlX21zZyA6IFwiPGJyPlwiICsgdmFsdWUuaWhpX3Jlc3BvbnNlX21zZztcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuSXNOdWxsT3JFbXB0eSh3YXJuaW5nX21zZykpIHtcclxuICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2UudG9hc3RvcGVuKHdhcm5pbmdfbXNnLCBcIndhcm5pbmdcIik7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoIXRoaXMuSXNOdWxsT3JFbXB0eSh2YWx1ZS5paGlfcmVzcG9uc2VfbXNnKSkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uc2VydmljZS50b2FzdG9wZW4odmFsdWUuaWhpX3Jlc3BvbnNlX21zZywgXCJzdWNjZXNzXCIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vbnNlcnZpY2Uuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIkhvbGFSeFwiLCBcIkhJdmFsaWRhdGlvblwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgSXNOdWxsT3JFbXB0eSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCBTdHJpbmcodmFsdWUpLnRyaW0oKSA9PT0gXCJcIikge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uc2VydmljZS5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiSG9sYVJ4XCIsIFwiSXNOdWxsT3JFbXB0eVwiKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0aW9udG9hc3QoZXJyb3JfbWVzc2FnZTogYW55LCBlcnJvcl9jb2RlPzogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmNvbW1vbnNlcnZpY2UuZXJyb3JSZXNwb25zZShlcnJvcl9jb2RlLCBlcnJvcl9tZXNzYWdlKTtcclxuICAgICAgaWYgKHRoaXMubWVzc2FnZSA9PSBcIlwiKSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gZXJyb3JfY29kZSArIFwiOiBcIiArIGVycm9yX21lc3NhZ2U7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlICs9IFwiPGJyPlwiICsgZXJyb3JfY29kZSArIFwiOiBcIiArIGVycm9yX21lc3NhZ2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uc2VydmljZS5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiSG9sYVJ4XCIsIFwidmFsaWRhdGlvbnRvYXN0XCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlcnJvclJlc3BvbnNlKGVycm9yX2NvZGU6IGFueSwgZXJyb3JfbWVzc2FnZTogYW55LCBzdWNjZXNzZmxhZzogYm9vbGVhbiA9IGZhbHNlKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHZhciByZXNwb25zZTogYW55ID0ge1xyXG4gICAgICAgIHN0YXR1czogc3VjY2Vzc2ZsYWcgPT0gdHJ1ZSA/IFwic3VjY2Vzc1wiIDogXCJlcnJvclwiLFxyXG4gICAgICAgIHJlc3BvbnNlOiB7XHJcbiAgICAgICAgICByZXNwb25zZV9jb2RlOiBzdWNjZXNzZmxhZyA9PSB0cnVlID8gZXJyb3JfY29kZSA6IFwiXCIsXHJcbiAgICAgICAgICByZXNwb25zZV9tZXNzYWdlOiBzdWNjZXNzZmxhZyA9PSB0cnVlID8gZXJyb3JfbWVzc2FnZSA6IFwiXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiB7XHJcbiAgICAgICAgICBlcnJvcl9jb2RlOiBzdWNjZXNzZmxhZyA9PSBmYWxzZSA/IGVycm9yX2NvZGUgOiBcIlwiLFxyXG4gICAgICAgICAgZXJyb3JfbWVzc2FnZTogc3VjY2Vzc2ZsYWcgPT0gZmFsc2UgPyBlcnJvcl9tZXNzYWdlIDogXCJcIlxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBvZihyZXNwb25zZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vbnNlcnZpY2Uuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIkhvbGFSeFwiLCBcImVycm9yUmVzcG9uc2VcIik7XHJcbiAgICAgIHJldHVybiBvZihudWxsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXVkaXRsb2codmFsdWU6IGFueSwgYXBpOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHZhciBkYXRhID0ge1xyXG4gICAgICAgIGlkZW50aWZpZXJWYWx1ZTogdGhpcy5jb21tb25zZXJ2aWNlLmxvZ2lkZW50aWZpZXIsXHJcbiAgICAgICAgaWRlbnRpZmllclR5cGU6IHRoaXMuY29tbW9uc2VydmljZS5sb2dpZGVudGlmaWVyVHlwZSxcclxuICAgICAgICByZXF1ZXN0UGF5bG9hZDogdmFsdWUsXHJcbiAgICAgICAgcmVzcG9uc2VDb2RlOiBcIlwiLFxyXG4gICAgICAgIHJlc3BvbnNlUGF5bG9hZDogXCJcIixcclxuICAgICAgICBjcmVhdGVkQnk6IFwiVUktUnhcIixcclxuICAgICAgICBhcGk6IGFwaSxcclxuICAgICAgICByZXF1ZXN0VXJsOiB3aW5kb3cub3JpZ2luXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5hcGlzZXJ2aWNlLlBvc3QoZGF0YSwgY29uZmlnLkFVRElUX0xPRykuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIC8vY29uc29sZS5sb2cocmVzKTtcclxuICAgICAgfSwgZXJyID0+IHtcclxuICAgICAgICB0aGlzLmNvbW1vbnNlcnZpY2Uuc2V0bG9ndmFsdWUoZmFsc2UsIGVyci5tZXNzYWdlLCBlcnIuc3RhY2ssIFwiSG9sYVJ4XCIsIFwiYXVkaXRsb2dcIik7XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vbnNlcnZpY2Uuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIkhvbGFSeFwiLCBcImF1ZGl0bG9nXCIpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8IS0tIDx1bCBjbGFzcz1cIm5vdGlmaWNhdGlvbnNcIiA+PC91bD5cclxuPGRpdiBbY2xhc3NdPVwieydsb2FkZXJfdmlzaWJsZSc6Y29tbW9uTG9hZGVyU2VydmljZXMuZnVsbFNjcmVlbkxvYWRlciwnbG9hZGVyX2hpZGRlbic6IWNvbW1vbkxvYWRlclNlcnZpY2VzLmZ1bGxTY3JlZW5Mb2FkZXJ9XCJcclxuICAgIGNsYXNzPVwic3BsYXNoXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicGF1c2VcIj5cclxuICAgICAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO1wiPiA8aW1nIGNsYXNzPVwic3Bpbm5lci1pbWdcIlxyXG4gICAgICAgICAgICAgICAgc3JjPVwiaHR0cHM6Ly9wYXNzZXRzLmhvbGEuaGVhbHRoL3J4LXdpZGdldHMvcngtaG9sYS1oZWFsdGgtc3Bpbm5lci5wbmdcIiBhbHQ9XCJob2xhX2hlYWx0aFwiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyXCI+TG9hZGluZy4uLjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiAtLT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjcnh3aWRnZXRzPlxyXG48L25nLXRlbXBsYXRlPiJdfQ==