jconsumer-shared 0.0.3 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/account-service.mjs +158 -9
- package/esm2022/lib/auth-service.mjs +12 -4
- package/esm2022/lib/booking-service.mjs +480 -0
- package/esm2022/lib/calendar/date-time/datetime-processor.service.mjs +4 -4
- package/esm2022/lib/common.service.mjs +157 -7
- package/esm2022/lib/confirm/confirm-box.component.mjs +159 -0
- package/esm2022/lib/confirm/confirm-box.module.mjs +62 -0
- package/esm2022/lib/consumer-service.mjs +780 -0
- package/esm2022/lib/currency-service.mjs +12 -0
- package/esm2022/lib/environment.service.mjs +23 -0
- package/esm2022/lib/error-message.module.mjs +23 -0
- package/esm2022/lib/file-service.mjs +25 -19
- package/esm2022/lib/form-message/field-error-display/field-error-display.component.mjs +21 -0
- package/esm2022/lib/form-message/form-message-display.module.mjs +35 -0
- package/esm2022/lib/form-message/form-message-display.service.mjs +44 -0
- package/esm2022/lib/form-message/form-success-display/form-success-display.component.mjs +18 -0
- package/esm2022/lib/group-storage.service.mjs +4 -4
- package/esm2022/lib/i8n.module.mjs +5 -5
- package/esm2022/lib/injector-resolver.mjs +28 -0
- package/esm2022/lib/local-storage.service.mjs +4 -4
- package/esm2022/lib/media-service.mjs +49 -0
- package/esm2022/lib/order.service.mjs +19 -4
- package/esm2022/lib/payment/modes/payment-modes.component.mjs +35 -0
- package/esm2022/lib/payment/modes/payment-modes.module.mjs +24 -0
- package/esm2022/lib/payment/payment.module.mjs +26 -0
- package/esm2022/lib/paytm.service.mjs +131 -0
- package/esm2022/lib/phone-input/phone-input.component.mjs +50 -46
- package/esm2022/lib/phone-input/phone-input.module.mjs +5 -5
- package/esm2022/lib/pipes/autolink/autolink.module.mjs +20 -0
- package/esm2022/lib/pipes/autolink/autolink.pipe.mjs +4 -4
- package/esm2022/lib/pipes/capitalize/capitalize.module.mjs +5 -5
- package/esm2022/lib/pipes/capitalize/capitalize.pipe.mjs +4 -4
- package/esm2022/lib/pipes/date-format/date-format.module.mjs +19 -0
- package/esm2022/lib/pipes/date-format/date-format.pipe.mjs +42 -0
- package/esm2022/lib/pipes/filter/filter.pipe.mjs +4 -4
- package/esm2022/lib/pipes/limit-to/limitTo.pipe.mjs +4 -4
- package/esm2022/lib/pipes/safe-html/safehtml.module.mjs +5 -5
- package/esm2022/lib/pipes/safe-html/safehtml.pipe.mjs +4 -4
- package/esm2022/lib/project-constants.mjs +310 -0
- package/esm2022/lib/questionaire/edit/questionnaire.component.mjs +53 -63
- package/esm2022/lib/questionaire/edit/questionnaire.module.mjs +16 -15
- package/esm2022/lib/questionaire/questionaire-service.mjs +4 -4
- package/esm2022/lib/razorpay.service.mjs +157 -0
- package/esm2022/lib/request-dialog/request-dialog.component.mjs +29 -0
- package/esm2022/lib/request-dialog/request-dialog.module.mjs +24 -0
- package/esm2022/lib/service-meta.mjs +4 -4
- package/esm2022/lib/session-storage.service.mjs +4 -4
- package/esm2022/lib/shared-account.guard.mjs +41 -0
- package/esm2022/lib/shared-account.resolver.mjs +22 -0
- package/esm2022/lib/shared.service.mjs +88 -13
- package/esm2022/lib/showuploadfile/showuploadfile.component.mjs +5 -5
- package/esm2022/lib/showuploadfile/showuploadfile.module.mjs +5 -5
- package/esm2022/lib/skeleton/skeleton-loading.component.mjs +4 -4
- package/esm2022/lib/skeleton/skeleton-loading.module.mjs +5 -5
- package/esm2022/lib/spinner/loading-spinner.component.mjs +4 -4
- package/esm2022/lib/spinner/loading-spinner.module.mjs +5 -5
- package/esm2022/lib/storage.service.mjs +4 -4
- package/esm2022/lib/subscription.service.mjs +4 -4
- package/esm2022/lib/theme.service.mjs +30 -0
- package/esm2022/lib/timezone-converter.mjs +49 -0
- package/esm2022/lib/toast.service.mjs +5 -5
- package/esm2022/lib/twilio-service.mjs +466 -0
- package/esm2022/lib/word-processor.service.mjs +4 -4
- package/esm2022/public-api.mjs +32 -1
- package/fesm2022/jconsumer-shared.mjs +3981 -541
- package/fesm2022/jconsumer-shared.mjs.map +1 -1
- package/jconsumer-shared-1.0.1.tgz +0 -0
- package/lib/account-service.d.ts +41 -2
- package/lib/auth-service.d.ts +1 -0
- package/lib/booking-service.d.ts +101 -0
- package/lib/common.service.d.ts +12 -1
- package/lib/confirm/confirm-box.component.d.ts +43 -0
- package/lib/confirm/confirm-box.module.d.ts +16 -0
- package/lib/consumer-service.d.ts +178 -0
- package/lib/currency-service.d.ts +4 -0
- package/lib/environment.service.d.ts +9 -0
- package/lib/error-message.module.d.ts +7 -0
- package/lib/file-service.d.ts +5 -2
- package/lib/form-message/field-error-display/field-error-display.component.d.ts +8 -0
- package/lib/form-message/form-message-display.module.d.ts +10 -0
- package/lib/form-message/form-message-display.service.d.ts +13 -0
- package/lib/form-message/form-success-display/form-success-display.component.d.ts +7 -0
- package/lib/injector-resolver.d.ts +2 -0
- package/lib/media-service.d.ts +9 -0
- package/lib/order.service.d.ts +4 -0
- package/lib/payment/modes/payment-modes.component.d.ts +15 -0
- package/lib/payment/modes/payment-modes.module.d.ts +9 -0
- package/lib/payment/payment.module.d.ts +7 -0
- package/lib/paytm.service.d.ts +13 -0
- package/lib/phone-input/phone-input.component.d.ts +5 -3
- package/lib/pipes/autolink/autolink.module.d.ts +8 -0
- package/lib/pipes/date-format/date-format.module.d.ts +8 -0
- package/lib/pipes/date-format/date-format.pipe.d.ts +12 -0
- package/lib/project-constants.d.ts +227 -0
- package/lib/questionaire/edit/questionnaire.component.d.ts +8 -9
- package/lib/questionaire/edit/questionnaire.module.d.ts +9 -8
- package/lib/razorpay.service.d.ts +26 -0
- package/lib/request-dialog/request-dialog.component.d.ts +11 -0
- package/lib/request-dialog/request-dialog.module.d.ts +9 -0
- package/lib/shared-account.guard.d.ts +11 -0
- package/lib/shared-account.resolver.d.ts +10 -0
- package/lib/shared.service.d.ts +31 -4
- package/lib/theme.service.d.ts +10 -0
- package/lib/timezone-converter.d.ts +8 -0
- package/lib/twilio-service.d.ts +60 -0
- package/package.json +1 -1
- package/public-api.d.ts +31 -0
- package/jconsumer-shared-0.0.3.tgz +0 -0
|
@@ -0,0 +1,780 @@
|
|
|
1
|
+
import { Injectable } from "@angular/core";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "./service-meta";
|
|
4
|
+
export class ConsumerService {
|
|
5
|
+
servicemeta;
|
|
6
|
+
orderdata;
|
|
7
|
+
constructor(servicemeta) {
|
|
8
|
+
this.servicemeta = servicemeta;
|
|
9
|
+
}
|
|
10
|
+
setOrderDetails(data) {
|
|
11
|
+
this.orderdata = data;
|
|
12
|
+
console.log(this.orderdata);
|
|
13
|
+
}
|
|
14
|
+
getOrderDetails() {
|
|
15
|
+
return this.orderdata;
|
|
16
|
+
}
|
|
17
|
+
getProviderConsumer() {
|
|
18
|
+
return this.servicemeta.httpGet('spconsumer');
|
|
19
|
+
}
|
|
20
|
+
updateSPConsumer(post_data) {
|
|
21
|
+
return this.servicemeta.httpPut('spconsumer', post_data);
|
|
22
|
+
}
|
|
23
|
+
getFavProvider() {
|
|
24
|
+
return this.servicemeta.httpGet('consumer/providers');
|
|
25
|
+
}
|
|
26
|
+
removeProviderfromFavourite(accountid) {
|
|
27
|
+
const url = 'consumer/providers/' + accountid;
|
|
28
|
+
return this.servicemeta.httpDelete(url);
|
|
29
|
+
}
|
|
30
|
+
doDeleteFavProvider(fav, cthis) {
|
|
31
|
+
return new Promise((resolve, reject) => {
|
|
32
|
+
this.deleteFavProvider(fav.id)
|
|
33
|
+
.then(data => {
|
|
34
|
+
resolve(data);
|
|
35
|
+
}, error => {
|
|
36
|
+
reject(error);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
deleteFavProvider(id) {
|
|
41
|
+
return new Promise((resolve, reject) => {
|
|
42
|
+
this.removeProviderfromFavourite(id)
|
|
43
|
+
.subscribe(data => {
|
|
44
|
+
resolve('reloadlist');
|
|
45
|
+
}, error => {
|
|
46
|
+
reject(error);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
addProvidertoFavourite(accountid) {
|
|
51
|
+
const url = 'consumer/providers/' + accountid;
|
|
52
|
+
return this.servicemeta.httpPost(url);
|
|
53
|
+
}
|
|
54
|
+
changePasswordProfile(data, origin) {
|
|
55
|
+
const url = origin + '/login/chpwd';
|
|
56
|
+
return this.servicemeta.httpPut(url, data);
|
|
57
|
+
}
|
|
58
|
+
consumertelegramChat(countryCode, loginId) {
|
|
59
|
+
const url = 'chatbot/telegram/consumer/chatId/' + countryCode + '/' + loginId;
|
|
60
|
+
return this.servicemeta.httpGet(url);
|
|
61
|
+
}
|
|
62
|
+
getConsumerRateService(params, type) {
|
|
63
|
+
let path;
|
|
64
|
+
if (type === 'checkin') {
|
|
65
|
+
path = 'consumer/waitlist/rating';
|
|
66
|
+
}
|
|
67
|
+
else if (type === 'appointment') {
|
|
68
|
+
path = 'consumer/appointment/rating';
|
|
69
|
+
}
|
|
70
|
+
else if (type === 'order') {
|
|
71
|
+
path = 'consumer/orders/rating';
|
|
72
|
+
}
|
|
73
|
+
return this.servicemeta.httpGet(path, null, params);
|
|
74
|
+
}
|
|
75
|
+
updateConsumerRateService(params, data, type) {
|
|
76
|
+
let path;
|
|
77
|
+
if (type === 'checkin') {
|
|
78
|
+
path = 'consumer/waitlist/rating';
|
|
79
|
+
}
|
|
80
|
+
else if (type === 'appointment') {
|
|
81
|
+
path = 'consumer/appointment/rating';
|
|
82
|
+
}
|
|
83
|
+
else if (type === 'order') {
|
|
84
|
+
path = 'consumer/orders/rating';
|
|
85
|
+
}
|
|
86
|
+
return this.servicemeta.httpPut(path, data, null, params);
|
|
87
|
+
}
|
|
88
|
+
postConsumerRateService(params, data, type) {
|
|
89
|
+
let path;
|
|
90
|
+
if (type === 'checkin') {
|
|
91
|
+
path = 'consumer/waitlist/rating';
|
|
92
|
+
}
|
|
93
|
+
else if (type === 'appointment') {
|
|
94
|
+
path = 'consumer/appointment/rating';
|
|
95
|
+
}
|
|
96
|
+
else if (type === 'order') {
|
|
97
|
+
path = 'consumer/orders/rating';
|
|
98
|
+
}
|
|
99
|
+
return this.servicemeta.httpPost(path, data, null, params);
|
|
100
|
+
}
|
|
101
|
+
//Waitlist Urls
|
|
102
|
+
getWaitlist(params) {
|
|
103
|
+
return this.servicemeta.httpGet('consumer/waitlist', null, params);
|
|
104
|
+
}
|
|
105
|
+
getWaitlistFuture(params) {
|
|
106
|
+
return this.servicemeta.httpGet('consumer/waitlist/future', null, params);
|
|
107
|
+
}
|
|
108
|
+
addConsumerWaitlistAttachment(accountid, uuid, body) {
|
|
109
|
+
const url = 'consumer/waitlist/' + uuid + '/attachment' + '?account=' + accountid;
|
|
110
|
+
;
|
|
111
|
+
return this.servicemeta.httpPost(url, body);
|
|
112
|
+
}
|
|
113
|
+
addWaitlistAttachment(accountid, uuid, body) {
|
|
114
|
+
const url = '/consumer/waitlist/share/attachments/' + uuid + '?account=' + accountid;
|
|
115
|
+
;
|
|
116
|
+
return this.servicemeta.httpPost(url, body);
|
|
117
|
+
}
|
|
118
|
+
getConsumerWaitlistAttachmentsByUuid(uuid, accountid) {
|
|
119
|
+
const url = 'consumer/waitlist/attachment/' + uuid + '?account=' + accountid;
|
|
120
|
+
return this.servicemeta.httpGet(url);
|
|
121
|
+
}
|
|
122
|
+
getWaitlistToday() {
|
|
123
|
+
const path = 'consumer/waitlist/today';
|
|
124
|
+
return this.servicemeta.httpGet(path);
|
|
125
|
+
}
|
|
126
|
+
//Appointment Urls
|
|
127
|
+
getAppointmentFuture(params) {
|
|
128
|
+
return this.servicemeta.httpGet('consumer/appointment/future', null, params);
|
|
129
|
+
}
|
|
130
|
+
getApptlist(params) {
|
|
131
|
+
return this.servicemeta.httpGet('consumer/appointment', null, params);
|
|
132
|
+
}
|
|
133
|
+
getAppointmentToday(params) {
|
|
134
|
+
return this.servicemeta.httpGet('consumer/appointment/today', null, params);
|
|
135
|
+
}
|
|
136
|
+
addConsumerAppointmentAttachment(accountid, uuid, body) {
|
|
137
|
+
const url = 'consumer/appointment/' + uuid + '/attachment' + '?account=' + accountid;
|
|
138
|
+
;
|
|
139
|
+
return this.servicemeta.httpPost(url, body);
|
|
140
|
+
}
|
|
141
|
+
addAppointmentAttachment(accountid, uuid, body) {
|
|
142
|
+
const url = 'consumer/appointment/share/attachments/' + uuid + '?account=' + accountid;
|
|
143
|
+
;
|
|
144
|
+
return this.servicemeta.httpPost(url, body);
|
|
145
|
+
}
|
|
146
|
+
getConsumerAppointmentAttachmentsByUuid(uuid, accountid) {
|
|
147
|
+
const url = 'consumer/appointment/attachment/' + uuid + '?account=' + accountid;
|
|
148
|
+
return this.servicemeta.httpGet(url);
|
|
149
|
+
}
|
|
150
|
+
//Order Urls
|
|
151
|
+
getConsumerFutOrders() {
|
|
152
|
+
const url = 'consumer/orders/future';
|
|
153
|
+
return this.servicemeta.httpGet(url);
|
|
154
|
+
}
|
|
155
|
+
getConsumerOrders(params) {
|
|
156
|
+
return this.servicemeta.httpGet('consumer/orders', null, params);
|
|
157
|
+
}
|
|
158
|
+
//Donation Urls
|
|
159
|
+
getConsumerDonations(params = null) {
|
|
160
|
+
const url = 'consumer/donation';
|
|
161
|
+
return this.servicemeta.httpGet(url, null, params);
|
|
162
|
+
}
|
|
163
|
+
getConsumerWaitlistMeetingDetails(uuid, mode, accountId) {
|
|
164
|
+
const url = 'consumer/waitlist/' + uuid + '/meetingDetails/' + mode + '?account=' + accountId;
|
|
165
|
+
return this.servicemeta.httpGet(url);
|
|
166
|
+
}
|
|
167
|
+
getConsumerApptMeetingDetails(uuid, mode, accountId) {
|
|
168
|
+
const url = 'consumer/appointment/' + uuid + '/meetingDetails/' + mode + '?account=' + accountId;
|
|
169
|
+
return this.servicemeta.httpGet(url);
|
|
170
|
+
}
|
|
171
|
+
getProfile(consumerId) {
|
|
172
|
+
const promise = new Promise((resolve, reject) => {
|
|
173
|
+
this.getMyProfile(consumerId).subscribe(data => {
|
|
174
|
+
resolve(data);
|
|
175
|
+
}, error => {
|
|
176
|
+
reject(error);
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
return promise;
|
|
180
|
+
}
|
|
181
|
+
getTelegramstat() {
|
|
182
|
+
const url = 'consumer/telegram/settings';
|
|
183
|
+
return this.servicemeta.httpGet(url);
|
|
184
|
+
}
|
|
185
|
+
enableTelegramNoti(status) {
|
|
186
|
+
const url = 'consumer/telegram/settings/' + status;
|
|
187
|
+
return this.servicemeta.httpPut(url);
|
|
188
|
+
}
|
|
189
|
+
getMyProfile(id) {
|
|
190
|
+
let path = 'consumer/' + id;
|
|
191
|
+
return this.servicemeta.httpGet(path);
|
|
192
|
+
}
|
|
193
|
+
updateProfile(data, origin) {
|
|
194
|
+
return this.servicemeta.httpPatch(origin, data);
|
|
195
|
+
}
|
|
196
|
+
updateSPConsumerProfile(data, origin) {
|
|
197
|
+
return this.servicemeta.httpPut(origin, data);
|
|
198
|
+
}
|
|
199
|
+
addMembers(data) {
|
|
200
|
+
return this.servicemeta.httpPost('consumer/family/member', data);
|
|
201
|
+
}
|
|
202
|
+
editMember(data) {
|
|
203
|
+
return this.servicemeta.httpPut('consumer/family/member', data);
|
|
204
|
+
}
|
|
205
|
+
getConsumerPayments(filter) {
|
|
206
|
+
const url = 'consumer/payment';
|
|
207
|
+
return this.servicemeta.httpGet(url, null, filter);
|
|
208
|
+
}
|
|
209
|
+
getOrderByConsumerUUID(uuid, accountid) {
|
|
210
|
+
const url = 'consumer/orders/' + uuid + '?account=' + accountid;
|
|
211
|
+
return this.servicemeta.httpGet(url);
|
|
212
|
+
}
|
|
213
|
+
getCheckinByConsumerUUID(uuid, accountid) {
|
|
214
|
+
console.log("UUID:", uuid);
|
|
215
|
+
const url = 'consumer/waitlist/' + uuid + '?account=' + accountid;
|
|
216
|
+
return this.servicemeta.httpGet(url);
|
|
217
|
+
}
|
|
218
|
+
getAppointmentByConsumerUUID(uuid, accountid) {
|
|
219
|
+
const url = 'consumer/appointment/' + uuid + '?account=' + accountid;
|
|
220
|
+
return this.servicemeta.httpGet(url);
|
|
221
|
+
}
|
|
222
|
+
getConsumerDonationByUid(uid) {
|
|
223
|
+
const url = 'consumer/donation/' + uid;
|
|
224
|
+
return this.servicemeta.httpGet(url);
|
|
225
|
+
}
|
|
226
|
+
getConsumerPaymentById(id) {
|
|
227
|
+
const url = 'consumer/payment/' + id;
|
|
228
|
+
return this.servicemeta.httpGet(url);
|
|
229
|
+
}
|
|
230
|
+
getMembers(providerCustomerID) {
|
|
231
|
+
const url = 'consumer/family/member/' + providerCustomerID;
|
|
232
|
+
return this.servicemeta.httpGet(url);
|
|
233
|
+
}
|
|
234
|
+
deleteMember(memberId, parentID) {
|
|
235
|
+
const path = 'consumer/family/member/' + memberId + '/' + parentID;
|
|
236
|
+
return this.servicemeta.httpDelete(path);
|
|
237
|
+
}
|
|
238
|
+
getWaitlistHistory(params = {}) {
|
|
239
|
+
return this.servicemeta.httpGet('consumer/waitlist/history', null, params);
|
|
240
|
+
// set no_redirect_path in interceptor to avoid redirect on 401
|
|
241
|
+
}
|
|
242
|
+
getHistoryWaitlistCount(params = {}) {
|
|
243
|
+
return this.servicemeta.httpGet('consumer/waitlist/history/count', null, params);
|
|
244
|
+
}
|
|
245
|
+
getWaitlistBill(params, uuid) {
|
|
246
|
+
const path = 'consumer/bill/' + uuid;
|
|
247
|
+
return this.servicemeta.httpGet(path, null, params);
|
|
248
|
+
}
|
|
249
|
+
getPaymentDetail(params, uuid) {
|
|
250
|
+
const url = 'consumer/payment/details/' + uuid;
|
|
251
|
+
return this.servicemeta.httpGet(url, null, params);
|
|
252
|
+
}
|
|
253
|
+
getAppointmentHistory(params) {
|
|
254
|
+
return this.servicemeta.httpGet('consumer/appointment/history', null, params);
|
|
255
|
+
}
|
|
256
|
+
getAppointmentHistoryCount() {
|
|
257
|
+
return this.servicemeta.httpGet('consumer/appointment/history/count');
|
|
258
|
+
}
|
|
259
|
+
getOrderHistory(params) {
|
|
260
|
+
const url = 'consumer/orders/history';
|
|
261
|
+
return this.servicemeta.httpGet(url, null, params);
|
|
262
|
+
}
|
|
263
|
+
getPaymentModesofProvider(provid, serviceId, purpose) {
|
|
264
|
+
const url = 'consumer/payment/modes/service/' + provid + '/' + serviceId + '/' + purpose;
|
|
265
|
+
return this.servicemeta.httpGet(url);
|
|
266
|
+
}
|
|
267
|
+
consumerPayment(data) {
|
|
268
|
+
const url = 'consumer/payment';
|
|
269
|
+
return this.servicemeta.httpPost(url, data);
|
|
270
|
+
}
|
|
271
|
+
consumerPayment_invocie(data) {
|
|
272
|
+
const url = 'consumer/jp/finance/pay';
|
|
273
|
+
return this.servicemeta.httpPost(url, data);
|
|
274
|
+
}
|
|
275
|
+
applyCoupon(jCouponCode, checkinId, accountid) {
|
|
276
|
+
const url = 'consumer/jaldee/coupons/' + jCouponCode + '/' + checkinId + '?account=' + accountid;
|
|
277
|
+
return this.servicemeta.httpPost(url);
|
|
278
|
+
}
|
|
279
|
+
getConsumerCommunications(provider_id) {
|
|
280
|
+
const url = 'consumer/communications?account=' + provider_id;
|
|
281
|
+
return this.servicemeta.httpGet(url);
|
|
282
|
+
}
|
|
283
|
+
getWtlistHistory(uuid, accountid) {
|
|
284
|
+
const path = 'consumer/waitlist/states/' + uuid + '?account=' + accountid;
|
|
285
|
+
return this.servicemeta.httpGet(path);
|
|
286
|
+
}
|
|
287
|
+
getWaitlistQuestionnaireByUid(uid, accountId) {
|
|
288
|
+
const url = 'consumer/waitlist/questionnaire/' + uid + '?account=' + accountId;
|
|
289
|
+
return this.servicemeta.httpGet(url);
|
|
290
|
+
}
|
|
291
|
+
getApptHistory(uuid, accountid) {
|
|
292
|
+
const path = 'consumer/appointment/state/' + uuid + '?account=' + accountid;
|
|
293
|
+
return this.servicemeta.httpGet(path);
|
|
294
|
+
}
|
|
295
|
+
getApptQuestionnaireByUid(uid, accountId) {
|
|
296
|
+
const url = 'consumer/appointment/questionnaire/' + uid + '?account=' + accountId;
|
|
297
|
+
return this.servicemeta.httpGet(url);
|
|
298
|
+
}
|
|
299
|
+
getAppointmentDetail(uuid, params) {
|
|
300
|
+
const path = 'consumer/appointment/' + uuid;
|
|
301
|
+
return this.servicemeta.httpGet(path, null, params);
|
|
302
|
+
}
|
|
303
|
+
getJaldeeCashandJcredit() {
|
|
304
|
+
const url = 'consumer/wallet/redeem/eligible/amt';
|
|
305
|
+
return this.servicemeta.httpGet(url);
|
|
306
|
+
}
|
|
307
|
+
getRemainingPrepaymentAmount(jcash, jcredit, advanceamount) {
|
|
308
|
+
const url = 'consumer/wallet/redeem/remaining/amt' + '?useJcash=' + jcash + '&useJcredit=' + jcredit + '&advancePayAmount=' + advanceamount;
|
|
309
|
+
return this.servicemeta.httpGet(url);
|
|
310
|
+
}
|
|
311
|
+
PayByJaldeewallet(postData) {
|
|
312
|
+
return this.servicemeta.httpPost('consumer/payment/wallet', postData);
|
|
313
|
+
}
|
|
314
|
+
getWaitlistDetail(uuid, params) {
|
|
315
|
+
const path = 'consumer/waitlist/' + uuid;
|
|
316
|
+
return this.servicemeta.httpGet(path, null, params);
|
|
317
|
+
}
|
|
318
|
+
generateDonationLink(accountid, data) {
|
|
319
|
+
const url = 'consumer/payment/generate/paylink?account=' + accountid;
|
|
320
|
+
return this.servicemeta.httpPost(url, data);
|
|
321
|
+
}
|
|
322
|
+
addCustomerDonation(postData, accountid) {
|
|
323
|
+
return this.servicemeta.httpPost('consumer/donation?account=' + accountid, postData);
|
|
324
|
+
}
|
|
325
|
+
getDonationLinkUuid(uuid) {
|
|
326
|
+
const url = 'consumer/payment/paylink/donation/' + uuid;
|
|
327
|
+
return this.servicemeta.httpGet(url);
|
|
328
|
+
}
|
|
329
|
+
addConsumerWaitlistNote(accountid, uuid, body) {
|
|
330
|
+
const url = 'consumer/waitlist/communication/' + uuid + '?account=' + accountid;
|
|
331
|
+
return this.servicemeta.httpPost(url, body);
|
|
332
|
+
}
|
|
333
|
+
getDonationQuestionnaire(serviceId, account_id) {
|
|
334
|
+
const url = 'consumer/questionnaire/donation/' + serviceId + '?account=' + account_id;
|
|
335
|
+
return this.servicemeta.httpGet(url);
|
|
336
|
+
}
|
|
337
|
+
submitDonationQuestionnaire(uuid, body, account_id) {
|
|
338
|
+
const url = 'consumer/donation/questionnaire/submit/' + uuid + '?account=' + account_id;
|
|
339
|
+
return this.servicemeta.httpPost(url, body);
|
|
340
|
+
}
|
|
341
|
+
consumerDonationQnrUploadStatusUpdate(uid, account, data) {
|
|
342
|
+
const url = 'consumer/donation/questionnaire/upload/status/' + uid + '?account=' + account;
|
|
343
|
+
return this.servicemeta.httpPut(url, data);
|
|
344
|
+
}
|
|
345
|
+
validateConsumerQuestionnaire(body, accountId) {
|
|
346
|
+
const url = 'consumer/questionnaire/validate' + '?account=' + accountId;
|
|
347
|
+
return this.servicemeta.httpPut(url, body);
|
|
348
|
+
}
|
|
349
|
+
validateConsumerOneTimeQuestionnaire(body, accountId, providerConsumerId) {
|
|
350
|
+
const url = 'consumer/questionnaire/validate/onetimequestionnaire/' + providerConsumerId + '?account=' + accountId;
|
|
351
|
+
return this.servicemeta.httpPost(url, body);
|
|
352
|
+
}
|
|
353
|
+
getProviderCustomerOnetimeInfo(providerConsumerID, accountId) {
|
|
354
|
+
const url = 'consumer/providerCustomer/' + providerConsumerID + "?account=" + accountId;
|
|
355
|
+
return this.servicemeta.httpGet(url);
|
|
356
|
+
}
|
|
357
|
+
submitCustomerOnetimeInfo(body, userId, accountId) {
|
|
358
|
+
const url = 'consumer/questionnaire/' + userId + '?account=' + accountId;
|
|
359
|
+
return this.servicemeta.httpPost(url, body);
|
|
360
|
+
}
|
|
361
|
+
submitConsumerApptServiceOption(body, uuid, account) {
|
|
362
|
+
const url = 'consumer/appointment/serviceoption/' + uuid + '?account=' + account;
|
|
363
|
+
return this.servicemeta.httpPost(url, body);
|
|
364
|
+
}
|
|
365
|
+
rescheduleConsumerApptmnt(accountid, postData) {
|
|
366
|
+
return this.servicemeta.httpPut('consumer/appointment/reschedule?account=' + accountid, postData);
|
|
367
|
+
}
|
|
368
|
+
addCustomerAppointment(accountid, postData) {
|
|
369
|
+
return this.servicemeta.httpPost('consumer/appointment/add?account=' + accountid, postData);
|
|
370
|
+
}
|
|
371
|
+
getConvenientFeeOfProvider(provid, data) {
|
|
372
|
+
const url = 'consumer/payment/modes/convenienceFee/' + provid;
|
|
373
|
+
return this.servicemeta.httpPut(url, data);
|
|
374
|
+
}
|
|
375
|
+
addApptAdvancePayment(param, body) {
|
|
376
|
+
const url = 'consumer/appointment/advancePayment';
|
|
377
|
+
return this.servicemeta.httpPut(url, body, null, param);
|
|
378
|
+
}
|
|
379
|
+
getConsumerQuestionnaire(serviceId, consumerId, accountId) {
|
|
380
|
+
const url = 'consumer/questionnaire/service/' + serviceId + '/consumer/' + consumerId + '?account=' + accountId;
|
|
381
|
+
return this.servicemeta.httpGet(url);
|
|
382
|
+
}
|
|
383
|
+
getServiceoptionsAppt(servid, account) {
|
|
384
|
+
const url = 'consumer/questionnaire/serviceoptions/' + servid + '/0?account=' + account;
|
|
385
|
+
return this.servicemeta.httpGet(url);
|
|
386
|
+
}
|
|
387
|
+
getAppointmentReschedulePricelist(serviceid) {
|
|
388
|
+
const url = 'consumer/appointment/schedule/' + serviceid + '/pricelist';
|
|
389
|
+
return this.servicemeta.httpGet(url);
|
|
390
|
+
}
|
|
391
|
+
getSlotsByLocationServiceandDate(locid, servid, pdate, accountid) {
|
|
392
|
+
const url = 'consumer/appointment/schedule/date/' + pdate + '/location/' + locid + '/service/' + servid + '?account=' + accountid;
|
|
393
|
+
return this.servicemeta.httpGet(url);
|
|
394
|
+
}
|
|
395
|
+
getAvailableDatessByLocationService(locid, servid, accountid) {
|
|
396
|
+
const url = 'consumer/appointment/availability/location/' + locid + '/service/' + servid + '?account=' + accountid;
|
|
397
|
+
return this.servicemeta.httpGet(url);
|
|
398
|
+
}
|
|
399
|
+
getServicesforAppontmntByLocationId(locid) {
|
|
400
|
+
if (locid) {
|
|
401
|
+
const url = 'consumer/appointment/service/' + locid;
|
|
402
|
+
return this.servicemeta.httpGet(url);
|
|
403
|
+
}
|
|
404
|
+
return null;
|
|
405
|
+
}
|
|
406
|
+
rescheduleConsumerWaitlist(accountid, postData) {
|
|
407
|
+
return this.servicemeta.httpPut('consumer/waitlist/reschedule?account=' + accountid, postData);
|
|
408
|
+
}
|
|
409
|
+
getQueuesbyLocationandServiceIdAvailableDates(locid, servid, accountid) {
|
|
410
|
+
const url = 'consumer/waitlist/queues/available/' + locid + '/' + servid + '?account=' + accountid;
|
|
411
|
+
return this.servicemeta.httpGet(url);
|
|
412
|
+
}
|
|
413
|
+
addCheckin(accountid, postData) {
|
|
414
|
+
return this.servicemeta.httpPost('consumer/waitlist/add?account=' + accountid, postData);
|
|
415
|
+
}
|
|
416
|
+
submitConsumerWaitlistServiceOption(body, uuid, account) {
|
|
417
|
+
const url = 'consumer/waitlist/serviceoption/' + uuid + '/?account=' + account;
|
|
418
|
+
return this.servicemeta.httpPost(url, body);
|
|
419
|
+
}
|
|
420
|
+
getPartysizeDetails(domain, subdomain) {
|
|
421
|
+
const url = 'ynwConf/settings/' + domain + '/' + subdomain;
|
|
422
|
+
return this.servicemeta.httpGet(url);
|
|
423
|
+
}
|
|
424
|
+
addWaitlistAdvancePayment(param, body) {
|
|
425
|
+
const url = 'consumer/waitlist/advancePayment';
|
|
426
|
+
return this.servicemeta.httpPut(url, body, null, param);
|
|
427
|
+
}
|
|
428
|
+
getServiceoptionsWaitlist(servid, account) {
|
|
429
|
+
const url = 'consumer/questionnaire/serviceoptions/' + servid + '/0?account=' + account;
|
|
430
|
+
return this.servicemeta.httpGet(url);
|
|
431
|
+
}
|
|
432
|
+
getQueuesbyLocationandServiceId(locid, servid, pdate, accountid) {
|
|
433
|
+
const dd = (pdate !== undefined) ? '/' + pdate + '?account=' + accountid : '';
|
|
434
|
+
const url = 'consumer/waitlist/queues/' + locid + '/' + servid + dd;
|
|
435
|
+
return this.servicemeta.httpGet(url);
|
|
436
|
+
}
|
|
437
|
+
getServicesByLocationId(locid) {
|
|
438
|
+
const url = 'consumer/waitlist/services/' + locid;
|
|
439
|
+
return this.servicemeta.httpGet(url);
|
|
440
|
+
}
|
|
441
|
+
getOrderQuestionnaireByUid(uid, accountId) {
|
|
442
|
+
const url = 'consumer/orders/questionnaire/' + uid + '?account=' + accountId;
|
|
443
|
+
return this.servicemeta.httpGet(url);
|
|
444
|
+
}
|
|
445
|
+
getStoreContact(accountid) {
|
|
446
|
+
return this.servicemeta.httpGet('consumer/orders/settings/store/contact/info/' + accountid);
|
|
447
|
+
}
|
|
448
|
+
getConsumerCatalogs(accountid) {
|
|
449
|
+
const url = 'consumer/orders/catalogs/' + accountid;
|
|
450
|
+
return this.servicemeta.httpGet(url);
|
|
451
|
+
}
|
|
452
|
+
getAvailableDatesForHome(catalogid, accountid) {
|
|
453
|
+
return this.servicemeta.httpGet('consumer/orders/catalogs/delivery/dates/' + catalogid + '?account=' + accountid);
|
|
454
|
+
}
|
|
455
|
+
getAvailableDatesForPickup(catalogid, accountid) {
|
|
456
|
+
return this.servicemeta.httpGet('consumer/orders/catalogs/pickUp/dates/' + catalogid + '?account=' + accountid);
|
|
457
|
+
}
|
|
458
|
+
updateConsumeraddress(data) {
|
|
459
|
+
const url = 'consumer/deliveryAddress';
|
|
460
|
+
return this.servicemeta.httpPut(url, data);
|
|
461
|
+
}
|
|
462
|
+
CreateConsumerOrder(accountid, postData) {
|
|
463
|
+
return this.servicemeta.httpPost('consumer/orders?account=' + accountid, postData);
|
|
464
|
+
}
|
|
465
|
+
CreateConsumerEmail(uuid, accountid, post_Data) {
|
|
466
|
+
return this.servicemeta.httpPut('consumer/orders/' + uuid + '/email?account=' + accountid, post_Data);
|
|
467
|
+
}
|
|
468
|
+
getConsumerOrderQuestionnaire(catelogId, accountId) {
|
|
469
|
+
const url = 'consumer/questionnaire/order/' + catelogId + '?account=' + accountId;
|
|
470
|
+
return this.servicemeta.httpGet(url);
|
|
471
|
+
}
|
|
472
|
+
getConsumeraddress() {
|
|
473
|
+
const url = 'consumer/deliveryAddress';
|
|
474
|
+
return this.servicemeta.httpGet(url);
|
|
475
|
+
}
|
|
476
|
+
getCartdetails(accountid, data) {
|
|
477
|
+
const url = 'consumer/orders/amount?account=' + accountid;
|
|
478
|
+
return this.servicemeta.httpPut(url, data);
|
|
479
|
+
}
|
|
480
|
+
getUserApptTime(prov_arr) {
|
|
481
|
+
if (prov_arr.length > 0) {
|
|
482
|
+
const path = 'consumer/appointment/schedule/nextAvailableSchedule/' + prov_arr.join(',');
|
|
483
|
+
const encodedPath = encodeURI(path);
|
|
484
|
+
return this.servicemeta.httpGet(encodedPath);
|
|
485
|
+
}
|
|
486
|
+
return null;
|
|
487
|
+
}
|
|
488
|
+
// getUserEstimatedWaitingTime(prov_arr) {
|
|
489
|
+
// let str = '';
|
|
490
|
+
// for (let i = 0; i < prov_arr.length; i++) {
|
|
491
|
+
// if (str !== '') {
|
|
492
|
+
// str += '%2C'; // comma
|
|
493
|
+
// }
|
|
494
|
+
// str += prov_arr[i];
|
|
495
|
+
// }
|
|
496
|
+
// if (str === '') {
|
|
497
|
+
// return null;
|
|
498
|
+
// }
|
|
499
|
+
// const path = 'provider/waitlist/queues/providerWaitingTime/' + str;
|
|
500
|
+
// return this.servicemeta.httpGet(path);
|
|
501
|
+
// }
|
|
502
|
+
// updateAnalytics(body) {
|
|
503
|
+
// const url = 'provider/analytics/update';
|
|
504
|
+
// return this.servicemeta.httpPost(url, body);
|
|
505
|
+
// }
|
|
506
|
+
// getSearchCatalogItem(account: any, tempName: any, name: any) {
|
|
507
|
+
// const url = projectConstants.SAPATH + 'searchdetails/' + account + '/Item/search?' + tempName + '=' + name + '*';
|
|
508
|
+
// return this.servicemeta.httpGet(url);
|
|
509
|
+
// }
|
|
510
|
+
getOrderSettings(accountid) {
|
|
511
|
+
const url = 'consumer/orders/settings' + '?account=' + accountid;
|
|
512
|
+
return this.servicemeta.httpGet(url);
|
|
513
|
+
}
|
|
514
|
+
addConsumertoProviderNote(message, filter) {
|
|
515
|
+
const url = 'consumer/message/communications';
|
|
516
|
+
return this.servicemeta.httpPost(url, message, null, filter);
|
|
517
|
+
}
|
|
518
|
+
telegramChat(countryCode, phNumber) {
|
|
519
|
+
if (countryCode === '') {
|
|
520
|
+
const url = 'chatbot/telegram/provider/chatId/91/' + phNumber;
|
|
521
|
+
return this.servicemeta.httpGet(url);
|
|
522
|
+
}
|
|
523
|
+
else {
|
|
524
|
+
const url = 'chatbot/telegram/provider/chatId/' + countryCode + '/' + phNumber;
|
|
525
|
+
return this.servicemeta.httpGet(url);
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
// addProviderAppointmentNote(uuid, body) {
|
|
529
|
+
// const url = 'provider/appointment/communicate/' + uuid;
|
|
530
|
+
// return this.servicemeta.httpPost(url, body);
|
|
531
|
+
// }
|
|
532
|
+
// addProviderOrderNote(uuid, body) {
|
|
533
|
+
// const url = 'provider/orders/communicate/' + uuid;
|
|
534
|
+
// return this.servicemeta.httpPost(url, body);
|
|
535
|
+
// }
|
|
536
|
+
// addProviderDonationNote(uuid, body) {
|
|
537
|
+
// const url = 'provider/donation/communicate/' + uuid;
|
|
538
|
+
// return this.servicemeta.httpPost(url, body);
|
|
539
|
+
// }
|
|
540
|
+
// addProviderWaitlistNote(uuid, body) {
|
|
541
|
+
// const url = 'provider/waitlist/communicate/' + uuid;
|
|
542
|
+
// return this.servicemeta.httpPost(url, body);
|
|
543
|
+
// }
|
|
544
|
+
getMembership(accountId) {
|
|
545
|
+
const url = 'consumer/membership/services?account=' + accountId;
|
|
546
|
+
return this.servicemeta.httpGet(url);
|
|
547
|
+
}
|
|
548
|
+
addConsumerAppointmentNote(accountid, uuid, body) {
|
|
549
|
+
const url = 'consumer/appointment/communicate/message/' + uuid + '?account=' + accountid;
|
|
550
|
+
return this.servicemeta.httpPost(url, body);
|
|
551
|
+
}
|
|
552
|
+
addConsumerOrderNote(accountid, uuid, body) {
|
|
553
|
+
const url = 'consumer/order/communicate/' + uuid + '?account=' + accountid;
|
|
554
|
+
return this.servicemeta.httpPost(url, body);
|
|
555
|
+
}
|
|
556
|
+
addConsumerOrderNotecomm(accountid, uuid, body) {
|
|
557
|
+
const url = 'consumer/orders/communicate/message/' + uuid + '?account=' + accountid;
|
|
558
|
+
return this.servicemeta.httpPost(url, body);
|
|
559
|
+
}
|
|
560
|
+
addConsumerDonationNote(accountid, uuid, body) {
|
|
561
|
+
const url = 'consumer/donation/communicate/' + uuid + '?account=' + accountid;
|
|
562
|
+
return this.servicemeta.httpPost(url, body);
|
|
563
|
+
}
|
|
564
|
+
deactiveAccount(user) {
|
|
565
|
+
const url = user + '/login/deActivate';
|
|
566
|
+
return this.servicemeta.httpDelete(url);
|
|
567
|
+
}
|
|
568
|
+
getCatalogById(catalogs, catalogId) {
|
|
569
|
+
console.log("CAtalogs:", catalogs);
|
|
570
|
+
console.log("ID:", catalogId);
|
|
571
|
+
let catalogArray = catalogs.filter(catalog => catalog.id == catalogId);
|
|
572
|
+
console.log("CatalogArray", catalogArray);
|
|
573
|
+
if (catalogArray.length > 0) {
|
|
574
|
+
return catalogArray[0];
|
|
575
|
+
}
|
|
576
|
+
return null;
|
|
577
|
+
}
|
|
578
|
+
getCatalogItemById(catalog, catalogItemId) {
|
|
579
|
+
let catalogItemArray = catalog.catalogItem.filter(catalogItem => catalogItem.id == catalogItemId);
|
|
580
|
+
if (catalogItemArray.length > 0) {
|
|
581
|
+
return catalogItemArray[0];
|
|
582
|
+
}
|
|
583
|
+
return null;
|
|
584
|
+
}
|
|
585
|
+
/**
|
|
586
|
+
*
|
|
587
|
+
* @param orders
|
|
588
|
+
* @param item
|
|
589
|
+
* @returns
|
|
590
|
+
*/
|
|
591
|
+
getItemQty(orders, itemId) {
|
|
592
|
+
const orderList = orders;
|
|
593
|
+
console.log("Cart Items:", orderList);
|
|
594
|
+
let qty = 0;
|
|
595
|
+
if (orderList !== null && orderList.filter(i => i.id == itemId)) {
|
|
596
|
+
qty = orderList.filter(i => i.id == itemId).length;
|
|
597
|
+
}
|
|
598
|
+
return qty;
|
|
599
|
+
}
|
|
600
|
+
getApptRequestList(accountId) {
|
|
601
|
+
return this.servicemeta.httpGet('consumer/appointment/service/request?account-eq=' + accountId);
|
|
602
|
+
}
|
|
603
|
+
postAppointmentRequest(accountid, postData) {
|
|
604
|
+
return this.servicemeta.httpPost('consumer/appointment/service/request?account=' + accountid, postData);
|
|
605
|
+
}
|
|
606
|
+
getPrescriptions() {
|
|
607
|
+
const url = 'spconsumer/medicalrecord/prescription';
|
|
608
|
+
return this.servicemeta.httpGet(url);
|
|
609
|
+
}
|
|
610
|
+
submitItemOptions(itemId, orderId, accountId, postData) {
|
|
611
|
+
return this.servicemeta.httpPost('consumer/orders/item/serviceoption/' + itemId + '/' + orderId + '?account=' + accountId, postData);
|
|
612
|
+
}
|
|
613
|
+
getServiceoptionsOrder(itemId, account) {
|
|
614
|
+
const url = 'consumer/questionnaire/serviceoptions/order/item/' + itemId + '?account=' + account;
|
|
615
|
+
return this.servicemeta.httpGet(url);
|
|
616
|
+
}
|
|
617
|
+
removeProfilePhoto(consumerId, body) {
|
|
618
|
+
const path = 'spconsumer/remove/profilePhoto/' + consumerId;
|
|
619
|
+
return this.servicemeta.httpDelete(path, body);
|
|
620
|
+
}
|
|
621
|
+
addProfilePhoto(customerId, post_data) {
|
|
622
|
+
const url = 'spconsumer/upload/profilePhoto/' + customerId;
|
|
623
|
+
return this.servicemeta.httpPost(url, post_data);
|
|
624
|
+
}
|
|
625
|
+
getDocument() {
|
|
626
|
+
const url = 'spconsumer/medicalrecord/prescription';
|
|
627
|
+
return this.servicemeta.httpGet(url);
|
|
628
|
+
}
|
|
629
|
+
getItemsListWithItemOptions(catalogId, account) {
|
|
630
|
+
const url = 'consumer/questionnaire/serviceoption/order/catalog/item/' + catalogId + '/ONLINE?account=' + account;
|
|
631
|
+
return this.servicemeta.httpGet(url);
|
|
632
|
+
}
|
|
633
|
+
videoaudioS3Upload(url, file) {
|
|
634
|
+
console.log("VideoAudio Upload", url);
|
|
635
|
+
return this.servicemeta.httpPut(url, file);
|
|
636
|
+
}
|
|
637
|
+
getApptCoupons(servId, locId) {
|
|
638
|
+
const url = 'consumer/appointment/service/' + servId + '/location/' + locId + '/coupons';
|
|
639
|
+
return this.servicemeta.httpGet(url);
|
|
640
|
+
}
|
|
641
|
+
getCheckinCoupons(servId, locId) {
|
|
642
|
+
const url = 'consumer/waitlist/service/' + servId + '/location/' + locId + '/coupons';
|
|
643
|
+
return this.servicemeta.httpGet(url);
|
|
644
|
+
}
|
|
645
|
+
getCheckinbyEncId(encId) {
|
|
646
|
+
const url = 'consumer/waitlist/enc/' + encId;
|
|
647
|
+
return this.servicemeta.httpGet(url);
|
|
648
|
+
}
|
|
649
|
+
getApptbyEncId(encId) {
|
|
650
|
+
const url = 'consumer/appointment/enc/' + encId;
|
|
651
|
+
return this.servicemeta.httpGet(url);
|
|
652
|
+
}
|
|
653
|
+
getOrderbyEncId(encId) {
|
|
654
|
+
const url = 'consumer/orders/enc/' + encId;
|
|
655
|
+
return this.servicemeta.httpGet(url);
|
|
656
|
+
}
|
|
657
|
+
getSorderbyEncId(encId) {
|
|
658
|
+
const url = 'consumer/sorder/encId/' + encId;
|
|
659
|
+
return this.servicemeta.httpGet(url);
|
|
660
|
+
}
|
|
661
|
+
getIvrQuestionnaireByUid(uid, accountId) {
|
|
662
|
+
const url = 'consumer/ivr/questionnaire/' + uid + '?account=' + accountId;
|
|
663
|
+
return this.servicemeta.httpGet(url);
|
|
664
|
+
}
|
|
665
|
+
getivrByConsumerUUID(uuid, accountid) {
|
|
666
|
+
const url = 'consumer/ivr/' + uuid + '?account=' + accountid;
|
|
667
|
+
return this.servicemeta.httpGet(url);
|
|
668
|
+
}
|
|
669
|
+
// getAppointmentById(appmntId) {
|
|
670
|
+
// const url = 'provider/appointment/' + appmntId;
|
|
671
|
+
// return this.servicemeta.httpGet(url);
|
|
672
|
+
// }
|
|
673
|
+
// getProviderOrderDetailById(uuid) {
|
|
674
|
+
// const url = 'provider/orders/' + uuid;
|
|
675
|
+
// return this.servicemeta.httpGet(url);
|
|
676
|
+
// }
|
|
677
|
+
// getProviderWaitlistDetailById(uuid) {
|
|
678
|
+
// const url = 'provider/waitlist/' + uuid;
|
|
679
|
+
// return this.servicemeta.httpGet(url);
|
|
680
|
+
// }
|
|
681
|
+
Paymentlinkcheck(uuid) {
|
|
682
|
+
const url = 'consumer/payment/pay/' + uuid;
|
|
683
|
+
return this.servicemeta.httpGet(url);
|
|
684
|
+
}
|
|
685
|
+
getIdTerminologies(domain, subDomain) {
|
|
686
|
+
const url = 'ynwConf/terminologies/' + domain + '/' + subDomain;
|
|
687
|
+
return this.servicemeta.httpGet(url);
|
|
688
|
+
}
|
|
689
|
+
// linkPayment(data) {
|
|
690
|
+
// const url = 'provider/payment/paylink/order/create';
|
|
691
|
+
// return this.servicemeta.httpPost(url, data);
|
|
692
|
+
// }
|
|
693
|
+
linkPayment_invoic(data) {
|
|
694
|
+
const url = 'consumer/jp/finance/pay';
|
|
695
|
+
return this.servicemeta.httpPost(url, data);
|
|
696
|
+
}
|
|
697
|
+
linkSoPayment_invoic(data) {
|
|
698
|
+
const url = 'consumer/so/pay';
|
|
699
|
+
return this.servicemeta.httpPost(url, data);
|
|
700
|
+
}
|
|
701
|
+
getInvoiceDetailsById(accId, uuid) {
|
|
702
|
+
const url = 'consumer/jp/finance/invoice/' + accId + '/' + uuid;
|
|
703
|
+
return this.servicemeta.httpGet(url);
|
|
704
|
+
}
|
|
705
|
+
getSoInvoiceDetailsById(accId, uuid) {
|
|
706
|
+
const url = 'consumer/so/invoice/' + accId + '/' + uuid;
|
|
707
|
+
return this.servicemeta.httpGet(url);
|
|
708
|
+
}
|
|
709
|
+
uploadFilesToS3(data, accountId) {
|
|
710
|
+
const url = 'consumer/fileShare/upload' + '?account=' + accountId;
|
|
711
|
+
return this.servicemeta.httpPost(url, data);
|
|
712
|
+
}
|
|
713
|
+
videoaudioS3UploadStatusUpdate(status, id, accountId) {
|
|
714
|
+
const url = 'consumer/fileShare/upload/' + status + '/' + id + '?account=' + accountId;
|
|
715
|
+
return this.servicemeta.httpPut(url, null);
|
|
716
|
+
}
|
|
717
|
+
getApptBill(uuid) {
|
|
718
|
+
const url = 'consumer/appointment/' + uuid + '/' + 'billdetails';
|
|
719
|
+
return this.servicemeta.httpGet(url);
|
|
720
|
+
}
|
|
721
|
+
getWaitBill(uuid) {
|
|
722
|
+
const url = 'consumer/waitlist/' + uuid + '/' + 'billdetails';
|
|
723
|
+
return this.servicemeta.httpGet(url);
|
|
724
|
+
}
|
|
725
|
+
getInvoiceDetailsByuuid(uuid) {
|
|
726
|
+
const url = 'consumer/jp/finance/invoice/ynwuid' + '/' + uuid;
|
|
727
|
+
return this.servicemeta.httpGet(url);
|
|
728
|
+
}
|
|
729
|
+
getInvoice(accountId, invoiceUid) {
|
|
730
|
+
const url = 'consumer/jp/finance/invoice' + '/' + accountId + '/' + invoiceUid;
|
|
731
|
+
return this.servicemeta.httpGet(url);
|
|
732
|
+
}
|
|
733
|
+
getConsentForm(id) {
|
|
734
|
+
const url = 'consumer/consentform/' + id;
|
|
735
|
+
return this.servicemeta.httpGet(url, null);
|
|
736
|
+
}
|
|
737
|
+
getconsentFormQuestionaire(uuid) {
|
|
738
|
+
const url = 'consumer/consentform/questionnaire/' + uuid;
|
|
739
|
+
return this.servicemeta.httpGet(url);
|
|
740
|
+
}
|
|
741
|
+
submitQuestionnaire(body, uuid) {
|
|
742
|
+
const url = 'consumer/consentform/questionnaire/submit/' + uuid;
|
|
743
|
+
return this.servicemeta.httpPost(url, body);
|
|
744
|
+
}
|
|
745
|
+
verifySign(uuid, body) {
|
|
746
|
+
const url = 'consumer/consentform/verifysign/' + uuid;
|
|
747
|
+
return this.servicemeta.httpPatch(url, body);
|
|
748
|
+
}
|
|
749
|
+
verifyQnr(uuid) {
|
|
750
|
+
const url = 'consumer/consentform/verifyStatus/' + uuid;
|
|
751
|
+
return this.servicemeta.httpGet(url);
|
|
752
|
+
}
|
|
753
|
+
isProviderReady(post_data) {
|
|
754
|
+
return this.servicemeta.httpPut('consumer/appointment/videocall/ready', post_data);
|
|
755
|
+
}
|
|
756
|
+
updateAnalytics(body) {
|
|
757
|
+
const url = 'consumer/analytics/update';
|
|
758
|
+
return this.servicemeta.httpPost(url, body);
|
|
759
|
+
}
|
|
760
|
+
getUsersByLocation(locationId, uniqueId, listOfUrls) {
|
|
761
|
+
let path = 'provider/account/settings/location/' + locationId + '/' + uniqueId + '/' + listOfUrls;
|
|
762
|
+
return this.servicemeta.httpGet(path);
|
|
763
|
+
}
|
|
764
|
+
getInbox(usertype) {
|
|
765
|
+
return this.servicemeta.httpGet(usertype + '/communications');
|
|
766
|
+
}
|
|
767
|
+
readProviderMessages(providerId, messageIds, accountId) {
|
|
768
|
+
const url = 'consumer/communications/readMessages/' + providerId + '/' + messageIds + '?account=' + accountId;
|
|
769
|
+
return this.servicemeta.httpPut(url);
|
|
770
|
+
}
|
|
771
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ConsumerService, deps: [{ token: i1.ServiceMeta }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
772
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ConsumerService, providedIn: 'root' });
|
|
773
|
+
}
|
|
774
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ConsumerService, decorators: [{
|
|
775
|
+
type: Injectable,
|
|
776
|
+
args: [{
|
|
777
|
+
providedIn: 'root'
|
|
778
|
+
}]
|
|
779
|
+
}], ctorParameters: () => [{ type: i1.ServiceMeta }] });
|
|
780
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3VtZXItc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2pjb25zdW1lci1zaGFyZWQvc3JjL2xpYi9jb25zdW1lci1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQU8zQyxNQUFNLE9BQU8sZUFBZTtJQUdaO0lBRlosU0FBUyxDQUFNO0lBQ2YsWUFDWSxXQUF3QjtRQUF4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtJQUNoQyxDQUFDO0lBQ0wsZUFBZSxDQUFDLElBQUk7UUFDaEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUNELGVBQWU7UUFDWCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUNELG1CQUFtQjtRQUNmLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNELGdCQUFnQixDQUFDLFNBQWM7UUFDM0IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUNELGNBQWM7UUFDVixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUNELDJCQUEyQixDQUFDLFNBQVM7UUFDakMsTUFBTSxHQUFHLEdBQUcscUJBQXFCLEdBQUcsU0FBUyxDQUFDO1FBQzlDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUNELG1CQUFtQixDQUFDLEdBQUcsRUFBRSxLQUFNO1FBQzNCLE9BQU8sSUFB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LG9CQUFvQixDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUztRQUNsRCxNQUFNLEdBQUcsR0FBRyx1Q0FBdUMsR0FBRyxVQUFVLEdBQUcsR0FBRyxHQUFHLFVBQVUsR0FBRyxXQUFXLEdBQUcsU0FBUyxDQUFDO1FBQzlHLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekMsQ0FBQzt3R0Fod0JRLGVBQWU7NEdBQWYsZUFBZSxjQUhaLE1BQU07OzRGQUdULGVBQWU7a0JBSjNCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VNZXRhIH0gZnJvbSBcIi4vc2VydmljZS1tZXRhXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBDb25zdW1lclNlcnZpY2Uge1xyXG4gICAgb3JkZXJkYXRhOiBhbnk7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHNlcnZpY2VtZXRhOiBTZXJ2aWNlTWV0YVxyXG4gICAgKSB7IH1cclxuICAgIHNldE9yZGVyRGV0YWlscyhkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5vcmRlcmRhdGEgPSBkYXRhO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMub3JkZXJkYXRhKTtcclxuICAgIH1cclxuICAgIGdldE9yZGVyRGV0YWlscygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcmRlcmRhdGE7XHJcbiAgICB9XHJcbiAgICBnZXRQcm92aWRlckNvbnN1bWVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQoJ3NwY29uc3VtZXInKTtcclxuICAgIH1cclxuICAgIHVwZGF0ZVNQQ29uc3VtZXIocG9zdF9kYXRhOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwUHV0KCdzcGNvbnN1bWVyJywgcG9zdF9kYXRhKTtcclxuICAgIH1cclxuICAgIGdldEZhdlByb3ZpZGVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQoJ2NvbnN1bWVyL3Byb3ZpZGVycycpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlUHJvdmlkZXJmcm9tRmF2b3VyaXRlKGFjY291bnRpZCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdjb25zdW1lci9wcm92aWRlcnMvJyArIGFjY291bnRpZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwRGVsZXRlKHVybCk7XHJcbiAgICB9XHJcbiAgICBkb0RlbGV0ZUZhdlByb3ZpZGVyKGZhdiwgY3RoaXM/KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kZWxldGVGYXZQcm92aWRlcihmYXYuaWQpXHJcbiAgICAgICAgICAgICAgICAudGhlbihcclxuICAgICAgICAgICAgICAgICAgICBkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZGVsZXRlRmF2UHJvdmlkZXIoaWQpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZVByb3ZpZGVyZnJvbUZhdm91cml0ZShpZClcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoJ3JlbG9hZGxpc3QnKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgYWRkUHJvdmlkZXJ0b0Zhdm91cml0ZShhY2NvdW50aWQpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvcHJvdmlkZXJzLycgKyBhY2NvdW50aWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cFBvc3QodXJsKTtcclxuICAgIH1cclxuICAgIGNoYW5nZVBhc3N3b3JkUHJvZmlsZShkYXRhLCBvcmlnaW4/KSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gb3JpZ2luICsgJy9sb2dpbi9jaHB3ZCc7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cFB1dCh1cmwsIGRhdGEpO1xyXG4gICAgfVxyXG4gICAgY29uc3VtZXJ0ZWxlZ3JhbUNoYXQoY291bnRyeUNvZGUsIGxvZ2luSWQpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY2hhdGJvdC90ZWxlZ3JhbS9jb25zdW1lci9jaGF0SWQvJyArIGNvdW50cnlDb2RlICsgJy8nICsgbG9naW5JZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KHVybCk7XHJcbiAgICB9XHJcbiAgICBnZXRDb25zdW1lclJhdGVTZXJ2aWNlKHBhcmFtcywgdHlwZSkge1xyXG4gICAgICAgIGxldCBwYXRoO1xyXG4gICAgICAgIGlmICh0eXBlID09PSAnY2hlY2tpbicpIHtcclxuICAgICAgICAgICAgcGF0aCA9ICdjb25zdW1lci93YWl0bGlzdC9yYXRpbmcnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2FwcG9pbnRtZW50Jykge1xyXG4gICAgICAgICAgICBwYXRoID0gJ2NvbnN1bWVyL2FwcG9pbnRtZW50L3JhdGluZyc7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnb3JkZXInKSB7XHJcbiAgICAgICAgICAgIHBhdGggPSAnY29uc3VtZXIvb3JkZXJzL3JhdGluZyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQocGF0aCwgbnVsbCwgcGFyYW1zKTtcclxuICAgIH1cclxuICAgIHVwZGF0ZUNvbnN1bWVyUmF0ZVNlcnZpY2UocGFyYW1zLCBkYXRhLCB0eXBlKSB7XHJcbiAgICAgICAgbGV0IHBhdGg7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09ICdjaGVja2luJykge1xyXG4gICAgICAgICAgICBwYXRoID0gJ2NvbnN1bWVyL3dhaXRsaXN0L3JhdGluZyc7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnYXBwb2ludG1lbnQnKSB7XHJcbiAgICAgICAgICAgIHBhdGggPSAnY29uc3VtZXIvYXBwb2ludG1lbnQvcmF0aW5nJztcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvcmRlcicpIHtcclxuICAgICAgICAgICAgcGF0aCA9ICdjb25zdW1lci9vcmRlcnMvcmF0aW5nJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cFB1dChwYXRoLCBkYXRhLCBudWxsLCBwYXJhbXMpO1xyXG4gICAgfVxyXG4gICAgcG9zdENvbnN1bWVyUmF0ZVNlcnZpY2UocGFyYW1zLCBkYXRhLCB0eXBlKSB7XHJcbiAgICAgICAgbGV0IHBhdGg7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09ICdjaGVja2luJykge1xyXG4gICAgICAgICAgICBwYXRoID0gJ2NvbnN1bWVyL3dhaXRsaXN0L3JhdGluZyc7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnYXBwb2ludG1lbnQnKSB7XHJcbiAgICAgICAgICAgIHBhdGggPSAnY29uc3VtZXIvYXBwb2ludG1lbnQvcmF0aW5nJztcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvcmRlcicpIHtcclxuICAgICAgICAgICAgcGF0aCA9ICdjb25zdW1lci9vcmRlcnMvcmF0aW5nJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cFBvc3QocGF0aCwgZGF0YSwgbnVsbCwgcGFyYW1zKTtcclxuICAgIH1cclxuICAgIC8vV2FpdGxpc3QgVXJsc1xyXG4gICAgZ2V0V2FpdGxpc3QocGFyYW1zKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldCgnY29uc3VtZXIvd2FpdGxpc3QnLCBudWxsLCBwYXJhbXMpO1xyXG4gICAgfVxyXG4gICAgZ2V0V2FpdGxpc3RGdXR1cmUocGFyYW1zPykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQoJ2NvbnN1bWVyL3dhaXRsaXN0L2Z1dHVyZScsIG51bGwsIHBhcmFtcyk7XHJcbiAgICB9XHJcbiAgICBhZGRDb25zdW1lcldhaXRsaXN0QXR0YWNobWVudChhY2NvdW50aWQsIHV1aWQsIGJvZHkpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvd2FpdGxpc3QvJyArIHV1aWQgKyAnL2F0dGFjaG1lbnQnICsgJz9hY2NvdW50PScgKyBhY2NvdW50aWQ7O1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBQb3N0KHVybCwgYm9keSk7XHJcbiAgICB9XHJcbiAgICBhZGRXYWl0bGlzdEF0dGFjaG1lbnQoYWNjb3VudGlkLCB1dWlkLCBib2R5KSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJy9jb25zdW1lci93YWl0bGlzdC9zaGFyZS9hdHRhY2htZW50cy8nICsgdXVpZCArICc/YWNjb3VudD0nICsgYWNjb3VudGlkOztcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwUG9zdCh1cmwsIGJvZHkpO1xyXG4gICAgfVxyXG4gICAgZ2V0Q29uc3VtZXJXYWl0bGlzdEF0dGFjaG1lbnRzQnlVdWlkKHV1aWQsIGFjY291bnRpZCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdjb25zdW1lci93YWl0bGlzdC9hdHRhY2htZW50LycgKyB1dWlkICsgJz9hY2NvdW50PScgKyBhY2NvdW50aWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldCh1cmwpO1xyXG4gICAgfVxyXG4gICAgZ2V0V2FpdGxpc3RUb2RheSgpIHtcclxuICAgICAgICBjb25zdCBwYXRoID0gJ2NvbnN1bWVyL3dhaXRsaXN0L3RvZGF5JztcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KHBhdGgpO1xyXG4gICAgfVxyXG4gICAgLy9BcHBvaW50bWVudCBVcmxzXHJcbiAgICBnZXRBcHBvaW50bWVudEZ1dHVyZShwYXJhbXM/KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldCgnY29uc3VtZXIvYXBwb2ludG1lbnQvZnV0dXJlJywgbnVsbCwgcGFyYW1zKTtcclxuICAgIH1cclxuICAgIGdldEFwcHRsaXN0KHBhcmFtcykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQoJ2NvbnN1bWVyL2FwcG9pbnRtZW50JywgbnVsbCwgcGFyYW1zKTtcclxuICAgIH1cclxuICAgIGdldEFwcG9pbnRtZW50VG9kYXkocGFyYW1zPykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQoJ2NvbnN1bWVyL2FwcG9pbnRtZW50L3RvZGF5JywgbnVsbCwgcGFyYW1zKTtcclxuICAgIH1cclxuICAgIGFkZENvbnN1bWVyQXBwb2ludG1lbnRBdHRhY2htZW50KGFjY291bnRpZCwgdXVpZCwgYm9keSkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdjb25zdW1lci9hcHBvaW50bWVudC8nICsgdXVpZCArICcvYXR0YWNobWVudCcgKyAnP2FjY291bnQ9JyArIGFjY291bnRpZDs7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cFBvc3QodXJsLCBib2R5KTtcclxuICAgIH1cclxuICAgIGFkZEFwcG9pbnRtZW50QXR0YWNobWVudChhY2NvdW50aWQsIHV1aWQsIGJvZHkpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvYXBwb2ludG1lbnQvc2hhcmUvYXR0YWNobWVudHMvJyArIHV1aWQgKyAnP2FjY291bnQ9JyArIGFjY291bnRpZDs7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cFBvc3QodXJsLCBib2R5KTtcclxuICAgIH1cclxuICAgIGdldENvbnN1bWVyQXBwb2ludG1lbnRBdHRhY2htZW50c0J5VXVpZCh1dWlkLCBhY2NvdW50aWQpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvYXBwb2ludG1lbnQvYXR0YWNobWVudC8nICsgdXVpZCArICc/YWNjb3VudD0nICsgYWNjb3VudGlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQodXJsKTtcclxuICAgIH1cclxuICAgIC8vT3JkZXIgVXJsc1xyXG4gICAgZ2V0Q29uc3VtZXJGdXRPcmRlcnMoKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL29yZGVycy9mdXR1cmUnO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQodXJsKTtcclxuICAgIH1cclxuICAgIGdldENvbnN1bWVyT3JkZXJzKHBhcmFtcykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQoJ2NvbnN1bWVyL29yZGVycycsIG51bGwsIHBhcmFtcyk7XHJcbiAgICB9XHJcbiAgICAvL0RvbmF0aW9uIFVybHNcclxuICAgIGdldENvbnN1bWVyRG9uYXRpb25zKHBhcmFtcyA9IG51bGwpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvZG9uYXRpb24nO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQodXJsLCBudWxsLCBwYXJhbXMpO1xyXG4gICAgfVxyXG4gICAgZ2V0Q29uc3VtZXJXYWl0bGlzdE1lZXRpbmdEZXRhaWxzKHV1aWQsIG1vZGUsIGFjY291bnRJZCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdjb25zdW1lci93YWl0bGlzdC8nICsgdXVpZCArICcvbWVldGluZ0RldGFpbHMvJyArIG1vZGUgKyAnP2FjY291bnQ9JyArIGFjY291bnRJZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KHVybCk7XHJcbiAgICB9XHJcbiAgICBnZXRDb25zdW1lckFwcHRNZWV0aW5nRGV0YWlscyh1dWlkLCBtb2RlLCBhY2NvdW50SWQpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvYXBwb2ludG1lbnQvJyArIHV1aWQgKyAnL21lZXRpbmdEZXRhaWxzLycgKyBtb2RlICsgJz9hY2NvdW50PScgKyBhY2NvdW50SWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldCh1cmwpO1xyXG4gICAgfVxyXG4gICAgZ2V0UHJvZmlsZShjb25zdW1lcklkKSB7XHJcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5nZXRNeVByb2ZpbGUoY29uc3VtZXJJZCkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBwcm9taXNlO1xyXG4gICAgfVxyXG4gICAgZ2V0VGVsZWdyYW1zdGF0KCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdjb25zdW1lci90ZWxlZ3JhbS9zZXR0aW5ncyc7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldCh1cmwpO1xyXG4gICAgfVxyXG4gICAgZW5hYmxlVGVsZWdyYW1Ob3RpKHN0YXR1cykge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdjb25zdW1lci90ZWxlZ3JhbS9zZXR0aW5ncy8nICsgc3RhdHVzO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBQdXQodXJsKTtcclxuICAgIH1cclxuICAgIGdldE15UHJvZmlsZShpZCkge1xyXG4gICAgICAgIGxldCBwYXRoID0gJ2NvbnN1bWVyLycgKyBpZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KHBhdGgpO1xyXG4gICAgfVxyXG4gICAgdXBkYXRlUHJvZmlsZShkYXRhLCBvcmlnaW4pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwUGF0Y2gob3JpZ2luLCBkYXRhKTtcclxuICAgIH1cclxuICAgIHVwZGF0ZVNQQ29uc3VtZXJQcm9maWxlKGRhdGEsIG9yaWdpbikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBQdXQob3JpZ2luLCBkYXRhKTtcclxuICAgIH1cclxuICAgIGFkZE1lbWJlcnMoZGF0YSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBQb3N0KCdjb25zdW1lci9mYW1pbHkvbWVtYmVyJywgZGF0YSk7XHJcbiAgICB9XHJcbiAgICBlZGl0TWVtYmVyKGRhdGEpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwUHV0KCdjb25zdW1lci9mYW1pbHkvbWVtYmVyJywgZGF0YSk7XHJcbiAgICB9XHJcbiAgICBnZXRDb25zdW1lclBheW1lbnRzKGZpbHRlcj8pIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvcGF5bWVudCc7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldCh1cmwsIG51bGwsIGZpbHRlcik7XHJcbiAgICB9XHJcbiAgICBnZXRPcmRlckJ5Q29uc3VtZXJVVUlEKHV1aWQsIGFjY291bnRpZCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdjb25zdW1lci9vcmRlcnMvJyArIHV1aWQgKyAnP2FjY291bnQ9JyArIGFjY291bnRpZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KHVybCk7XHJcbiAgICB9XHJcbiAgICBnZXRDaGVja2luQnlDb25zdW1lclVVSUQodXVpZCwgYWNjb3VudGlkKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJVVUlEOlwiLCB1dWlkKTtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvd2FpdGxpc3QvJyArIHV1aWQgKyAnP2FjY291bnQ9JyArIGFjY291bnRpZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KHVybCk7XHJcbiAgICB9XHJcbiAgICBnZXRBcHBvaW50bWVudEJ5Q29uc3VtZXJVVUlEKHV1aWQsIGFjY291bnRpZCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdjb25zdW1lci9hcHBvaW50bWVudC8nICsgdXVpZCArICc/YWNjb3VudD0nICsgYWNjb3VudGlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQodXJsKTtcclxuICAgIH1cclxuICAgIGdldENvbnN1bWVyRG9uYXRpb25CeVVpZCh1aWQpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvZG9uYXRpb24vJyArIHVpZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KHVybCk7XHJcbiAgICB9XHJcbiAgICBnZXRDb25zdW1lclBheW1lbnRCeUlkKGlkKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL3BheW1lbnQvJyArIGlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQodXJsKTtcclxuICAgIH1cclxuICAgIGdldE1lbWJlcnMocHJvdmlkZXJDdXN0b21lcklEKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL2ZhbWlseS9tZW1iZXIvJyArIHByb3ZpZGVyQ3VzdG9tZXJJRDtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KHVybCk7XHJcbiAgICB9XHJcbiAgICBkZWxldGVNZW1iZXIobWVtYmVySWQsIHBhcmVudElEKSB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9ICdjb25zdW1lci9mYW1pbHkvbWVtYmVyLycgKyBtZW1iZXJJZCArICcvJyArIHBhcmVudElEO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBEZWxldGUocGF0aCk7XHJcbiAgICB9XHJcbiAgICBnZXRXYWl0bGlzdEhpc3RvcnkocGFyYW1zID0ge30pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KCdjb25zdW1lci93YWl0bGlzdC9oaXN0b3J5JywgbnVsbCwgcGFyYW1zKTtcclxuICAgICAgICAvLyBzZXQgbm9fcmVkaXJlY3RfcGF0aCBpbiBpbnRlcmNlcHRvciB0byBhdm9pZCByZWRpcmVjdCBvbiA0MDFcclxuICAgIH1cclxuICAgIGdldEhpc3RvcnlXYWl0bGlzdENvdW50KHBhcmFtcyA9IHt9KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldCgnY29uc3VtZXIvd2FpdGxpc3QvaGlzdG9yeS9jb3VudCcsIG51bGwsIHBhcmFtcyk7XHJcbiAgICB9XHJcbiAgICBnZXRXYWl0bGlzdEJpbGwocGFyYW1zLCB1dWlkKSB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9ICdjb25zdW1lci9iaWxsLycgKyB1dWlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQocGF0aCwgbnVsbCwgcGFyYW1zKTtcclxuICAgIH1cclxuICAgIGdldFBheW1lbnREZXRhaWwocGFyYW1zLCB1dWlkKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL3BheW1lbnQvZGV0YWlscy8nICsgdXVpZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KHVybCwgbnVsbCwgcGFyYW1zKTtcclxuICAgIH1cclxuICAgIGdldEFwcG9pbnRtZW50SGlzdG9yeShwYXJhbXM/KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldCgnY29uc3VtZXIvYXBwb2ludG1lbnQvaGlzdG9yeScsIG51bGwsIHBhcmFtcyk7XHJcbiAgICB9XHJcbiAgICBnZXRBcHBvaW50bWVudEhpc3RvcnlDb3VudCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KCdjb25zdW1lci9hcHBvaW50bWVudC9oaXN0b3J5L2NvdW50Jyk7XHJcbiAgICB9XHJcbiAgICBnZXRPcmRlckhpc3RvcnkocGFyYW1zPykge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdjb25zdW1lci9vcmRlcnMvaGlzdG9yeSc7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldCh1cmwsIG51bGwsIHBhcmFtcyk7XHJcbiAgICB9XHJcbiAgICBnZXRQYXltZW50TW9kZXNvZlByb3ZpZGVyKHByb3ZpZCwgc2VydmljZUlkLCBwdXJwb3NlPykge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdjb25zdW1lci9wYXltZW50L21vZGVzL3NlcnZpY2UvJyArIHByb3ZpZCArICcvJyArIHNlcnZpY2VJZCArICcvJyArIHB1cnBvc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldCh1cmwpO1xyXG4gICAgfVxyXG4gICAgY29uc3VtZXJQYXltZW50KGRhdGEpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvcGF5bWVudCc7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cFBvc3QodXJsLCBkYXRhKTtcclxuICAgIH1cclxuICAgIGNvbnN1bWVyUGF5bWVudF9pbnZvY2llKGRhdGEpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvanAvZmluYW5jZS9wYXknO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBQb3N0KHVybCwgZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXBwbHlDb3Vwb24oakNvdXBvbkNvZGUsIGNoZWNraW5JZCwgYWNjb3VudGlkKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL2phbGRlZS9jb3Vwb25zLycgKyBqQ291cG9uQ29kZSArICcvJyArIGNoZWNraW5JZCArICc/YWNjb3VudD0nICsgYWNjb3VudGlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBQb3N0KHVybCk7XHJcbiAgICB9XHJcbiAgICBnZXRDb25zdW1lckNvbW11bmljYXRpb25zKHByb3ZpZGVyX2lkKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL2NvbW11bmljYXRpb25zP2FjY291bnQ9JyArIHByb3ZpZGVyX2lkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQodXJsKTtcclxuICAgIH1cclxuICAgIGdldFd0bGlzdEhpc3RvcnkodXVpZCwgYWNjb3VudGlkKSB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9ICdjb25zdW1lci93YWl0bGlzdC9zdGF0ZXMvJyArIHV1aWQgKyAnP2FjY291bnQ9JyArIGFjY291bnRpZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KHBhdGgpO1xyXG4gICAgfVxyXG4gICAgZ2V0V2FpdGxpc3RRdWVzdGlvbm5haXJlQnlVaWQodWlkLCBhY2NvdW50SWQpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvd2FpdGxpc3QvcXVlc3Rpb25uYWlyZS8nICsgdWlkICsgJz9hY2NvdW50PScgKyBhY2NvdW50SWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldCh1cmwpO1xyXG4gICAgfVxyXG4gICAgZ2V0QXBwdEhpc3RvcnkodXVpZCwgYWNjb3VudGlkKSB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9ICdjb25zdW1lci9hcHBvaW50bWVudC9zdGF0ZS8nICsgdXVpZCArICc/YWNjb3VudD0nICsgYWNjb3VudGlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQocGF0aCk7XHJcbiAgICB9XHJcbiAgICBnZXRBcHB0UXVlc3Rpb25uYWlyZUJ5VWlkKHVpZCwgYWNjb3VudElkKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL2FwcG9pbnRtZW50L3F1ZXN0aW9ubmFpcmUvJyArIHVpZCArICc/YWNjb3VudD0nICsgYWNjb3VudElkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQodXJsKTtcclxuICAgIH1cclxuICAgIGdldEFwcG9pbnRtZW50RGV0YWlsKHV1aWQsIHBhcmFtcykge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSAnY29uc3VtZXIvYXBwb2ludG1lbnQvJyArIHV1aWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldChwYXRoLCBudWxsLCBwYXJhbXMpO1xyXG4gICAgfVxyXG4gICAgZ2V0SmFsZGVlQ2FzaGFuZEpjcmVkaXQoKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL3dhbGxldC9yZWRlZW0vZWxpZ2libGUvYW10JztcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KHVybCk7XHJcbiAgICB9XHJcbiAgICBnZXRSZW1haW5pbmdQcmVwYXltZW50QW1vdW50KGpjYXNoPywgamNyZWRpdD8sIGFkdmFuY2VhbW91bnQ/KSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL3dhbGxldC9yZWRlZW0vcmVtYWluaW5nL2FtdCcgKyAnP3VzZUpjYXNoPScgKyBqY2FzaCArICcmdXNlSmNyZWRpdD0nICsgamNyZWRpdCArICcmYWR2YW5jZVBheUFtb3VudD0nICsgYWR2YW5jZWFtb3VudDtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KHVybCk7XHJcbiAgICB9XHJcbiAgICBQYXlCeUphbGRlZXdhbGxldChwb3N0RGF0YSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBQb3N0KCdjb25zdW1lci9wYXltZW50L3dhbGxldCcsIHBvc3REYXRhKTtcclxuICAgIH1cclxuICAgIGdldFdhaXRsaXN0RGV0YWlsKHV1aWQsIHBhcmFtcykge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSAnY29uc3VtZXIvd2FpdGxpc3QvJyArIHV1aWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldChwYXRoLCBudWxsLCBwYXJhbXMpO1xyXG4gICAgfVxyXG4gICAgZ2VuZXJhdGVEb25hdGlvbkxpbmsoYWNjb3VudGlkLCBkYXRhKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL3BheW1lbnQvZ2VuZXJhdGUvcGF5bGluaz9hY2NvdW50PScgKyBhY2NvdW50aWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cFBvc3QodXJsLCBkYXRhKTtcclxuICAgIH1cclxuICAgIGFkZEN1c3RvbWVyRG9uYXRpb24ocG9zdERhdGEsIGFjY291bnRpZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBQb3N0KCdjb25zdW1lci9kb25hdGlvbj9hY2NvdW50PScgKyBhY2NvdW50aWQsIHBvc3REYXRhKTtcclxuICAgIH1cclxuICAgIGdldERvbmF0aW9uTGlua1V1aWQodXVpZCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdjb25zdW1lci9wYXltZW50L3BheWxpbmsvZG9uYXRpb24vJyArIHV1aWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldCh1cmwpO1xyXG4gICAgfVxyXG4gICAgYWRkQ29uc3VtZXJXYWl0bGlzdE5vdGUoYWNjb3VudGlkLCB1dWlkLCBib2R5KSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL3dhaXRsaXN0L2NvbW11bmljYXRpb24vJyArIHV1aWQgKyAnP2FjY291bnQ9JyArIGFjY291bnRpZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwUG9zdCh1cmwsIGJvZHkpO1xyXG4gICAgfVxyXG4gICAgZ2V0RG9uYXRpb25RdWVzdGlvbm5haXJlKHNlcnZpY2VJZCwgYWNjb3VudF9pZCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdjb25zdW1lci9xdWVzdGlvbm5haXJlL2RvbmF0aW9uLycgKyBzZXJ2aWNlSWQgKyAnP2FjY291bnQ9JyArIGFjY291bnRfaWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldCh1cmwpO1xyXG4gICAgfVxyXG4gICAgc3VibWl0RG9uYXRpb25RdWVzdGlvbm5haXJlKHV1aWQsIGJvZHksIGFjY291bnRfaWQpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvZG9uYXRpb24vcXVlc3Rpb25uYWlyZS9zdWJtaXQvJyArIHV1aWQgKyAnP2FjY291bnQ9JyArIGFjY291bnRfaWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cFBvc3QodXJsLCBib2R5KTtcclxuICAgIH1cclxuICAgIGNvbnN1bWVyRG9uYXRpb25RbnJVcGxvYWRTdGF0dXNVcGRhdGUodWlkLCBhY2NvdW50LCBkYXRhKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL2RvbmF0aW9uL3F1ZXN0aW9ubmFpcmUvdXBsb2FkL3N0YXR1cy8nICsgdWlkICsgJz9hY2NvdW50PScgKyBhY2NvdW50O1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBQdXQodXJsLCBkYXRhKTtcclxuICAgIH1cclxuICAgIHZhbGlkYXRlQ29uc3VtZXJRdWVzdGlvbm5haXJlKGJvZHksIGFjY291bnRJZCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdjb25zdW1lci9xdWVzdGlvbm5haXJlL3ZhbGlkYXRlJyArICc/YWNjb3VudD0nICsgYWNjb3VudElkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBQdXQodXJsLCBib2R5KTtcclxuICAgIH1cclxuICAgIHZhbGlkYXRlQ29uc3VtZXJPbmVUaW1lUXVlc3Rpb25uYWlyZShib2R5LCBhY2NvdW50SWQsIHByb3ZpZGVyQ29uc3VtZXJJZCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdjb25zdW1lci9xdWVzdGlvbm5haXJlL3ZhbGlkYXRlL29uZXRpbWVxdWVzdGlvbm5haXJlLycgKyBwcm92aWRlckNvbnN1bWVySWQgKyAnP2FjY291bnQ9JyArIGFjY291bnRJZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwUG9zdCh1cmwsIGJvZHkpO1xyXG4gICAgfVxyXG4gICAgZ2V0UHJvdmlkZXJDdXN0b21lck9uZXRpbWVJbmZvKHByb3ZpZGVyQ29uc3VtZXJJRCwgYWNjb3VudElkKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL3Byb3ZpZGVyQ3VzdG9tZXIvJyArIHByb3ZpZGVyQ29uc3VtZXJJRCArIFwiP2FjY291bnQ9XCIgKyBhY2NvdW50SWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldCh1cmwpO1xyXG4gICAgfVxyXG4gICAgc3VibWl0Q3VzdG9tZXJPbmV0aW1lSW5mbyhib2R5LCB1c2VySWQsIGFjY291bnRJZCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdjb25zdW1lci9xdWVzdGlvbm5haXJlLycgKyB1c2VySWQgKyAnP2FjY291bnQ9JyArIGFjY291bnRJZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwUG9zdCh1cmwsIGJvZHkpO1xyXG4gICAgfVxyXG4gICAgc3VibWl0Q29uc3VtZXJBcHB0U2VydmljZU9wdGlvbihib2R5LCB1dWlkLCBhY2NvdW50KSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL2FwcG9pbnRtZW50L3NlcnZpY2VvcHRpb24vJyArIHV1aWQgKyAnP2FjY291bnQ9JyArIGFjY291bnQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cFBvc3QodXJsLCBib2R5KTtcclxuICAgIH1cclxuICAgIHJlc2NoZWR1bGVDb25zdW1lckFwcHRtbnQoYWNjb3VudGlkLCBwb3N0RGF0YSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBQdXQoJ2NvbnN1bWVyL2FwcG9pbnRtZW50L3Jlc2NoZWR1bGU/YWNjb3VudD0nICsgYWNjb3VudGlkLCBwb3N0RGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQ3VzdG9tZXJBcHBvaW50bWVudChhY2NvdW50aWQsIHBvc3REYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cFBvc3QoJ2NvbnN1bWVyL2FwcG9pbnRtZW50L2FkZD9hY2NvdW50PScgKyBhY2NvdW50aWQsIHBvc3REYXRhKTtcclxuICAgIH1cclxuICAgIGdldENvbnZlbmllbnRGZWVPZlByb3ZpZGVyKHByb3ZpZCwgZGF0YT8pIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvcGF5bWVudC9tb2Rlcy9jb252ZW5pZW5jZUZlZS8nICsgcHJvdmlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBQdXQodXJsLCBkYXRhKTtcclxuICAgIH1cclxuICAgIGFkZEFwcHRBZHZhbmNlUGF5bWVudChwYXJhbSwgYm9keSkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdjb25zdW1lci9hcHBvaW50bWVudC9hZHZhbmNlUGF5bWVudCc7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cFB1dCh1cmwsIGJvZHksIG51bGwsIHBhcmFtKTtcclxuICAgIH1cclxuICAgIGdldENvbnN1bWVyUXVlc3Rpb25uYWlyZShzZXJ2aWNlSWQsIGNvbnN1bWVySWQsIGFjY291bnRJZCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdjb25zdW1lci9xdWVzdGlvbm5haXJlL3NlcnZpY2UvJyArIHNlcnZpY2VJZCArICcvY29uc3VtZXIvJyArIGNvbnN1bWVySWQgKyAnP2FjY291bnQ9JyArIGFjY291bnRJZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KHVybCk7XHJcbiAgICB9XHJcbiAgICBnZXRTZXJ2aWNlb3B0aW9uc0FwcHQoc2VydmlkLCBhY2NvdW50KSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL3F1ZXN0aW9ubmFpcmUvc2VydmljZW9wdGlvbnMvJyArIHNlcnZpZCArICcvMD9hY2NvdW50PScgKyBhY2NvdW50O1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQodXJsKTtcclxuICAgIH1cclxuICAgIGdldEFwcG9pbnRtZW50UmVzY2hlZHVsZVByaWNlbGlzdChzZXJ2aWNlaWQpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvYXBwb2ludG1lbnQvc2NoZWR1bGUvJyArIHNlcnZpY2VpZCArICcvcHJpY2VsaXN0JztcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KHVybCk7XHJcbiAgICB9XHJcbiAgICBnZXRTbG90c0J5TG9jYXRpb25TZXJ2aWNlYW5kRGF0ZShsb2NpZCwgc2VydmlkLCBwZGF0ZSwgYWNjb3VudGlkKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL2FwcG9pbnRtZW50L3NjaGVkdWxlL2RhdGUvJyArIHBkYXRlICsgJy9sb2NhdGlvbi8nICsgbG9jaWQgKyAnL3NlcnZpY2UvJyArIHNlcnZpZCArICc/YWNjb3VudD0nICsgYWNjb3VudGlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQodXJsKTtcclxuICAgIH1cclxuICAgIGdldEF2YWlsYWJsZURhdGVzc0J5TG9jYXRpb25TZXJ2aWNlKGxvY2lkLCBzZXJ2aWQsIGFjY291bnRpZD8pIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvYXBwb2ludG1lbnQvYXZhaWxhYmlsaXR5L2xvY2F0aW9uLycgKyBsb2NpZCArICcvc2VydmljZS8nICsgc2VydmlkICsgJz9hY2NvdW50PScgKyBhY2NvdW50aWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldCh1cmwpO1xyXG4gICAgfVxyXG4gICAgZ2V0U2VydmljZXNmb3JBcHBvbnRtbnRCeUxvY2F0aW9uSWQobG9jaWQpIHtcclxuICAgICAgICBpZiAobG9jaWQpIHtcclxuICAgICAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL2FwcG9pbnRtZW50L3NlcnZpY2UvJyArIGxvY2lkO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KHVybCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmVzY2hlZHVsZUNvbnN1bWVyV2FpdGxpc3QoYWNjb3VudGlkLCBwb3N0RGF0YSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBQdXQoJ2NvbnN1bWVyL3dhaXRsaXN0L3Jlc2NoZWR1bGU/YWNjb3VudD0nICsgYWNjb3VudGlkLCBwb3N0RGF0YSk7XHJcbiAgICB9XHJcbiAgICBnZXRRdWV1ZXNieUxvY2F0aW9uYW5kU2VydmljZUlkQXZhaWxhYmxlRGF0ZXMobG9jaWQsIHNlcnZpZCwgYWNjb3VudGlkKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL3dhaXRsaXN0L3F1ZXVlcy9hdmFpbGFibGUvJyArIGxvY2lkICsgJy8nICsgc2VydmlkICsgJz9hY2NvdW50PScgKyBhY2NvdW50aWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldCh1cmwpO1xyXG4gICAgfVxyXG4gICAgYWRkQ2hlY2tpbihhY2NvdW50aWQsIHBvc3REYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cFBvc3QoJ2NvbnN1bWVyL3dhaXRsaXN0L2FkZD9hY2NvdW50PScgKyBhY2NvdW50aWQsIHBvc3REYXRhKTtcclxuICAgIH1cclxuICAgIHN1Ym1pdENvbnN1bWVyV2FpdGxpc3RTZXJ2aWNlT3B0aW9uKGJvZHksIHV1aWQsIGFjY291bnQpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvd2FpdGxpc3Qvc2VydmljZW9wdGlvbi8nICsgdXVpZCArICcvP2FjY291bnQ9JyArIGFjY291bnQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cFBvc3QodXJsLCBib2R5KTtcclxuICAgIH1cclxuICAgIGdldFBhcnR5c2l6ZURldGFpbHMoZG9tYWluLCBzdWJkb21haW4pIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAneW53Q29uZi9zZXR0aW5ncy8nICsgZG9tYWluICsgJy8nICsgc3ViZG9tYWluO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQodXJsKTtcclxuICAgIH1cclxuICAgIGFkZFdhaXRsaXN0QWR2YW5jZVBheW1lbnQocGFyYW0sIGJvZHkpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvd2FpdGxpc3QvYWR2YW5jZVBheW1lbnQnO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBQdXQodXJsLCBib2R5LCBudWxsLCBwYXJhbSk7XHJcbiAgICB9XHJcbiAgICBnZXRTZXJ2aWNlb3B0aW9uc1dhaXRsaXN0KHNlcnZpZCwgYWNjb3VudCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdjb25zdW1lci9xdWVzdGlvbm5haXJlL3NlcnZpY2VvcHRpb25zLycgKyBzZXJ2aWQgKyAnLzA/YWNjb3VudD0nICsgYWNjb3VudDtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KHVybCk7XHJcbiAgICB9XHJcbiAgICBnZXRRdWV1ZXNieUxvY2F0aW9uYW5kU2VydmljZUlkKGxvY2lkLCBzZXJ2aWQsIHBkYXRlPywgYWNjb3VudGlkPykge1xyXG4gICAgICAgIGNvbnN0IGRkID0gKHBkYXRlICE9PSB1bmRlZmluZWQpID8gJy8nICsgcGRhdGUgKyAnP2FjY291bnQ9JyArIGFjY291bnRpZCA6ICcnO1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdjb25zdW1lci93YWl0bGlzdC9xdWV1ZXMvJyArIGxvY2lkICsgJy8nICsgc2VydmlkICsgZGQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldCh1cmwpO1xyXG4gICAgfVxyXG4gICAgZ2V0U2VydmljZXNCeUxvY2F0aW9uSWQobG9jaWQpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvd2FpdGxpc3Qvc2VydmljZXMvJyArIGxvY2lkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQodXJsKTtcclxuICAgIH1cclxuICAgIGdldE9yZGVyUXVlc3Rpb25uYWlyZUJ5VWlkKHVpZCwgYWNjb3VudElkKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL29yZGVycy9xdWVzdGlvbm5haXJlLycgKyB1aWQgKyAnP2FjY291bnQ9JyArIGFjY291bnRJZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KHVybCk7XHJcbiAgICB9XHJcbiAgICBnZXRTdG9yZUNvbnRhY3QoYWNjb3VudGlkPykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQoJ2NvbnN1bWVyL29yZGVycy9zZXR0aW5ncy9zdG9yZS9jb250YWN0L2luZm8vJyArIGFjY291bnRpZCk7XHJcbiAgICB9XHJcbiAgICBnZXRDb25zdW1lckNhdGFsb2dzKGFjY291bnRpZCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdjb25zdW1lci9vcmRlcnMvY2F0YWxvZ3MvJyArIGFjY291bnRpZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KHVybCk7XHJcbiAgICB9XHJcbiAgICBnZXRBdmFpbGFibGVEYXRlc0ZvckhvbWUoY2F0YWxvZ2lkLCBhY2NvdW50aWQ/KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldCgnY29uc3VtZXIvb3JkZXJzL2NhdGFsb2dzL2RlbGl2ZXJ5L2RhdGVzLycgKyBjYXRhbG9naWQgKyAnP2FjY291bnQ9JyArIGFjY291bnRpZCk7XHJcbiAgICB9XHJcbiAgICBnZXRBdmFpbGFibGVEYXRlc0ZvclBpY2t1cChjYXRhbG9naWQsIGFjY291bnRpZD8pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KCdjb25zdW1lci9vcmRlcnMvY2F0YWxvZ3MvcGlja1VwL2RhdGVzLycgKyBjYXRhbG9naWQgKyAnP2FjY291bnQ9JyArIGFjY291bnRpZCk7XHJcbiAgICB9XHJcbiAgICB1cGRhdGVDb25zdW1lcmFkZHJlc3MoZGF0YSkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdjb25zdW1lci9kZWxpdmVyeUFkZHJlc3MnO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBQdXQodXJsLCBkYXRhKTtcclxuICAgIH1cclxuICAgIENyZWF0ZUNvbnN1bWVyT3JkZXIoYWNjb3VudGlkLCBwb3N0RGF0YSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBQb3N0KCdjb25zdW1lci9vcmRlcnM/YWNjb3VudD0nICsgYWNjb3VudGlkLCBwb3N0RGF0YSk7XHJcbiAgICB9XHJcbiAgICBDcmVhdGVDb25zdW1lckVtYWlsKHV1aWQsIGFjY291bnRpZCwgcG9zdF9EYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cFB1dCgnY29uc3VtZXIvb3JkZXJzLycgKyB1dWlkICsgJy9lbWFpbD9hY2NvdW50PScgKyBhY2NvdW50aWQsIHBvc3RfRGF0YSk7XHJcbiAgICB9XHJcbiAgICBnZXRDb25zdW1lck9yZGVyUXVlc3Rpb25uYWlyZShjYXRlbG9nSWQsIGFjY291bnRJZCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdjb25zdW1lci9xdWVzdGlvbm5haXJlL29yZGVyLycgKyBjYXRlbG9nSWQgKyAnP2FjY291bnQ9JyArIGFjY291bnRJZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KHVybCk7XHJcbiAgICB9XHJcbiAgICBnZXRDb25zdW1lcmFkZHJlc3MoKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL2RlbGl2ZXJ5QWRkcmVzcyc7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldCh1cmwpO1xyXG4gICAgfVxyXG4gICAgZ2V0Q2FydGRldGFpbHMoYWNjb3VudGlkLCBkYXRhKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL29yZGVycy9hbW91bnQ/YWNjb3VudD0nICsgYWNjb3VudGlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBQdXQodXJsLCBkYXRhKTtcclxuICAgIH1cclxuICAgIGdldFVzZXJBcHB0VGltZShwcm92X2Fycikge1xyXG4gICAgICAgIGlmIChwcm92X2Fyci5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSAnY29uc3VtZXIvYXBwb2ludG1lbnQvc2NoZWR1bGUvbmV4dEF2YWlsYWJsZVNjaGVkdWxlLycgKyBwcm92X2Fyci5qb2luKCcsJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWRQYXRoID0gZW5jb2RlVVJJKHBhdGgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KGVuY29kZWRQYXRoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICAvLyBnZXRVc2VyRXN0aW1hdGVkV2FpdGluZ1RpbWUocHJvdl9hcnIpIHtcclxuICAgIC8vICAgICBsZXQgc3RyID0gJyc7XHJcbiAgICAvLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm92X2Fyci5sZW5ndGg7IGkrKykge1xyXG4gICAgLy8gICAgICAgICBpZiAoc3RyICE9PSAnJykge1xyXG4gICAgLy8gICAgICAgICAgICAgc3RyICs9ICclMkMnOyAvLyBjb21tYVxyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgIHN0ciArPSBwcm92X2FycltpXTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgaWYgKHN0ciA9PT0gJycpIHtcclxuICAgIC8vICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAvLyAgICAgfVxyXG5cclxuICAgIC8vICAgICBjb25zdCBwYXRoID0gJ3Byb3ZpZGVyL3dhaXRsaXN0L3F1ZXVlcy9wcm92aWRlcldhaXRpbmdUaW1lLycgKyBzdHI7XHJcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldChwYXRoKTtcclxuICAgIC8vIH1cclxuICAgIC8vIHVwZGF0ZUFuYWx5dGljcyhib2R5KSB7XHJcbiAgICAvLyAgICAgY29uc3QgdXJsID0gJ3Byb3ZpZGVyL2FuYWx5dGljcy91cGRhdGUnO1xyXG4gICAgLy8gICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBQb3N0KHVybCwgYm9keSk7XHJcbiAgICAvLyB9XHJcbiAgICAvLyBnZXRTZWFyY2hDYXRhbG9nSXRlbShhY2NvdW50OiBhbnksIHRlbXBOYW1lOiBhbnksIG5hbWU6IGFueSkge1xyXG4gICAgLy8gICAgIGNvbnN0IHVybCA9IHByb2plY3RDb25zdGFudHMuU0FQQVRIICsgJ3NlYXJjaGRldGFpbHMvJyArIGFjY291bnQgKyAnL0l0ZW0vc2VhcmNoPycgKyB0ZW1wTmFtZSArICc9JyArIG5hbWUgKyAnKic7XHJcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldCh1cmwpO1xyXG4gICAgLy8gfVxyXG4gICAgZ2V0T3JkZXJTZXR0aW5ncyhhY2NvdW50aWQpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvb3JkZXJzL3NldHRpbmdzJyArICc/YWNjb3VudD0nICsgYWNjb3VudGlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQodXJsKTtcclxuICAgIH1cclxuICAgIGFkZENvbnN1bWVydG9Qcm92aWRlck5vdGUobWVzc2FnZSwgZmlsdGVyKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL21lc3NhZ2UvY29tbXVuaWNhdGlvbnMnO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBQb3N0KHVybCwgbWVzc2FnZSwgbnVsbCwgZmlsdGVyKTtcclxuICAgIH1cclxuICAgIHRlbGVncmFtQ2hhdChjb3VudHJ5Q29kZSwgcGhOdW1iZXIpIHtcclxuICAgICAgICBpZiAoY291bnRyeUNvZGUgPT09ICcnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVybCA9ICdjaGF0Ym90L3RlbGVncmFtL3Byb3ZpZGVyL2NoYXRJZC85MS8nICsgcGhOdW1iZXI7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQodXJsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVybCA9ICdjaGF0Ym90L3RlbGVncmFtL3Byb3ZpZGVyL2NoYXRJZC8nICsgY291bnRyeUNvZGUgKyAnLycgKyBwaE51bWJlcjtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldCh1cmwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGFkZFByb3ZpZGVyQXBwb2ludG1lbnROb3RlKHV1aWQsIGJvZHkpIHtcclxuICAgIC8vICAgICBjb25zdCB1cmwgPSAncHJvdmlkZXIvYXBwb2ludG1lbnQvY29tbXVuaWNhdGUvJyArIHV1aWQ7XHJcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cFBvc3QodXJsLCBib2R5KTtcclxuICAgIC8vIH1cclxuICAgIC8vIGFkZFByb3ZpZGVyT3JkZXJOb3RlKHV1aWQsIGJvZHkpIHtcclxuICAgIC8vICAgICBjb25zdCB1cmwgPSAncHJvdmlkZXIvb3JkZXJzL2NvbW11bmljYXRlLycgKyB1dWlkO1xyXG4gICAgLy8gICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBQb3N0KHVybCwgYm9keSk7XHJcbiAgICAvLyB9XHJcbiAgICAvLyBhZGRQcm92aWRlckRvbmF0aW9uTm90ZSh1dWlkLCBib2R5KSB7XHJcbiAgICAvLyAgICAgY29uc3QgdXJsID0gJ3Byb3ZpZGVyL2RvbmF0aW9uL2NvbW11bmljYXRlLycgKyB1dWlkO1xyXG4gICAgLy8gICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBQb3N0KHVybCwgYm9keSk7XHJcbiAgICAvLyB9XHJcbiAgICAvLyBhZGRQcm92aWRlcldhaXRsaXN0Tm90ZSh1dWlkLCBib2R5KSB7XHJcbiAgICAvLyAgICAgY29uc3QgdXJsID0gJ3Byb3ZpZGVyL3dhaXRsaXN0L2NvbW11bmljYXRlLycgKyB1dWlkO1xyXG4gICAgLy8gICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBQb3N0KHVybCwgYm9keSk7XHJcbiAgICAvLyB9XHJcbiAgICBnZXRNZW1iZXJzaGlwKGFjY291bnRJZCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdjb25zdW1lci9tZW1iZXJzaGlwL3NlcnZpY2VzP2FjY291bnQ9JyArIGFjY291bnRJZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KHVybCk7XHJcbiAgICB9XHJcbiAgICBhZGRDb25zdW1lckFwcG9pbnRtZW50Tm90ZShhY2NvdW50aWQsIHV1aWQsIGJvZHkpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvYXBwb2ludG1lbnQvY29tbXVuaWNhdGUvbWVzc2FnZS8nICsgdXVpZCArICc/YWNjb3VudD0nICsgYWNjb3VudGlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBQb3N0KHVybCwgYm9keSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQ29uc3VtZXJPcmRlck5vdGUoYWNjb3VudGlkLCB1dWlkLCBib2R5KSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL29yZGVyL2NvbW11bmljYXRlLycgKyB1dWlkICsgJz9hY2NvdW50PScgKyBhY2NvdW50aWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cFBvc3QodXJsLCBib2R5KTtcclxuICAgIH1cclxuICAgIGFkZENvbnN1bWVyT3JkZXJOb3RlY29tbShhY2NvdW50aWQsIHV1aWQsIGJvZHkpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvb3JkZXJzL2NvbW11bmljYXRlL21lc3NhZ2UvJyArIHV1aWQgKyAnP2FjY291bnQ9JyArIGFjY291bnRpZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwUG9zdCh1cmwsIGJvZHkpO1xyXG4gICAgfVxyXG4gICAgYWRkQ29uc3VtZXJEb25hdGlvbk5vdGUoYWNjb3VudGlkLCB1dWlkLCBib2R5KSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL2RvbmF0aW9uL2NvbW11bmljYXRlLycgKyB1dWlkICsgJz9hY2NvdW50PScgKyBhY2NvdW50aWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cFBvc3QodXJsLCBib2R5KTtcclxuICAgIH1cclxuICAgIGRlYWN0aXZlQWNjb3VudCh1c2VyOiBhbnkpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSB1c2VyICsgJy9sb2dpbi9kZUFjdGl2YXRlJztcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwRGVsZXRlKHVybCk7XHJcbiAgICB9XHJcbiAgICBnZXRDYXRhbG9nQnlJZChjYXRhbG9ncywgY2F0YWxvZ0lkKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJDQXRhbG9nczpcIiwgY2F0YWxvZ3MpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiSUQ6XCIsIGNhdGFsb2dJZCk7XHJcbiAgICAgICAgbGV0IGNhdGFsb2dBcnJheSA9IGNhdGFsb2dzLmZpbHRlcihjYXRhbG9nID0+IGNhdGFsb2cuaWQgPT0gY2F0YWxvZ0lkKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkNhdGFsb2dBcnJheVwiLCBjYXRhbG9nQXJyYXkpO1xyXG4gICAgICAgIGlmIChjYXRhbG9nQXJyYXkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gY2F0YWxvZ0FycmF5WzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGdldENhdGFsb2dJdGVtQnlJZChjYXRhbG9nLCBjYXRhbG9nSXRlbUlkKSB7XHJcbiAgICAgICAgbGV0IGNhdGFsb2dJdGVtQXJyYXkgPSBjYXRhbG9nLmNhdGFsb2dJdGVtLmZpbHRlcihjYXRhbG9nSXRlbSA9PiBjYXRhbG9nSXRlbS5pZCA9PSBjYXRhbG9nSXRlbUlkKTtcclxuICAgICAgICBpZiAoY2F0YWxvZ0l0ZW1BcnJheS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjYXRhbG9nSXRlbUFycmF5WzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIG9yZGVycyBcclxuICAgICAqIEBwYXJhbSBpdGVtIFxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIGdldEl0ZW1RdHkob3JkZXJzLCBpdGVtSWQpIHtcclxuICAgICAgICBjb25zdCBvcmRlckxpc3QgPSBvcmRlcnM7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJDYXJ0IEl0ZW1zOlwiLCBvcmRlckxpc3QpO1xyXG4gICAgICAgIGxldCBxdHkgPSAwO1xyXG4gICAgICAgIGlmIChvcmRlckxpc3QgIT09IG51bGwgJiYgb3JkZXJMaXN0LmZpbHRlcihpID0+IGkuaWQgPT0gaXRlbUlkKSkge1xyXG4gICAgICAgICAgICBxdHkgPSBvcmRlckxpc3QuZmlsdGVyKGkgPT4gaS5pZCA9PSBpdGVtSWQpLmxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHF0eTtcclxuICAgIH1cclxuICAgIGdldEFwcHRSZXF1ZXN0TGlzdChhY2NvdW50SWQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KCdjb25zdW1lci9hcHBvaW50bWVudC9zZXJ2aWNlL3JlcXVlc3Q/YWNjb3VudC1lcT0nICsgYWNjb3VudElkKTtcclxuICAgIH1cclxuICAgIHBvc3RBcHBvaW50bWVudFJlcXVlc3QoYWNjb3VudGlkLCBwb3N0RGF0YSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBQb3N0KCdjb25zdW1lci9hcHBvaW50bWVudC9zZXJ2aWNlL3JlcXVlc3Q/YWNjb3VudD0nICsgYWNjb3VudGlkLCBwb3N0RGF0YSk7XHJcbiAgICB9XHJcbiAgICBnZXRQcmVzY3JpcHRpb25zKCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdzcGNvbnN1bWVyL21lZGljYWxyZWNvcmQvcHJlc2NyaXB0aW9uJztcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KHVybCk7XHJcbiAgICB9XHJcbiAgICBzdWJtaXRJdGVtT3B0aW9ucyhpdGVtSWQsIG9yZGVySWQsIGFjY291bnRJZCwgcG9zdERhdGEpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwUG9zdCgnY29uc3VtZXIvb3JkZXJzL2l0ZW0vc2VydmljZW9wdGlvbi8nICsgaXRlbUlkICsgJy8nICsgb3JkZXJJZCArICc/YWNjb3VudD0nICsgYWNjb3VudElkLCBwb3N0RGF0YSk7XHJcbiAgICB9XHJcbiAgICBnZXRTZXJ2aWNlb3B0aW9uc09yZGVyKGl0ZW1JZCwgYWNjb3VudCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdjb25zdW1lci9xdWVzdGlvbm5haXJlL3NlcnZpY2VvcHRpb25zL29yZGVyL2l0ZW0vJyArIGl0ZW1JZCArICc/YWNjb3VudD0nICsgYWNjb3VudDtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KHVybCk7XHJcbiAgICB9XHJcbiAgICByZW1vdmVQcm9maWxlUGhvdG8oY29uc3VtZXJJZCwgYm9keSkge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSAnc3Bjb25zdW1lci9yZW1vdmUvcHJvZmlsZVBob3RvLycgKyBjb25zdW1lcklkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBEZWxldGUocGF0aCwgYm9keSk7XHJcbiAgICB9XHJcbiAgICBhZGRQcm9maWxlUGhvdG8oY3VzdG9tZXJJZDogbnVtYmVyLCBwb3N0X2RhdGE6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdzcGNvbnN1bWVyL3VwbG9hZC9wcm9maWxlUGhvdG8vJyArIGN1c3RvbWVySWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cFBvc3QodXJsLCBwb3N0X2RhdGEpO1xyXG4gICAgfVxyXG4gICAgZ2V0RG9jdW1lbnQoKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ3NwY29uc3VtZXIvbWVkaWNhbHJlY29yZC9wcmVzY3JpcHRpb24nO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQodXJsKTtcclxuICAgIH1cclxuICAgIGdldEl0ZW1zTGlzdFdpdGhJdGVtT3B0aW9ucyhjYXRhbG9nSWQsIGFjY291bnQpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvcXVlc3Rpb25uYWlyZS9zZXJ2aWNlb3B0aW9uL29yZGVyL2NhdGFsb2cvaXRlbS8nICsgY2F0YWxvZ0lkICsgJy9PTkxJTkU/YWNjb3VudD0nICsgYWNjb3VudDtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KHVybCk7XHJcbiAgICB9XHJcbiAgICB2aWRlb2F1ZGlvUzNVcGxvYWQodXJsLCBmaWxlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJWaWRlb0F1ZGlvIFVwbG9hZFwiLCB1cmwpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBQdXQodXJsLCBmaWxlKTtcclxuICAgIH1cclxuICAgIGdldEFwcHRDb3Vwb25zKHNlcnZJZCwgbG9jSWQpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvYXBwb2ludG1lbnQvc2VydmljZS8nICsgc2VydklkICsgJy9sb2NhdGlvbi8nICsgbG9jSWQgKyAnL2NvdXBvbnMnO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQodXJsKTtcclxuICAgIH1cclxuICAgIGdldENoZWNraW5Db3Vwb25zKHNlcnZJZCwgbG9jSWQpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvd2FpdGxpc3Qvc2VydmljZS8nICsgc2VydklkICsgJy9sb2NhdGlvbi8nICsgbG9jSWQgKyAnL2NvdXBvbnMnO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQodXJsKTtcclxuICAgIH1cclxuICAgIGdldENoZWNraW5ieUVuY0lkKGVuY0lkKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL3dhaXRsaXN0L2VuYy8nICsgZW5jSWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldCh1cmwpO1xyXG4gICAgfVxyXG4gICAgZ2V0QXBwdGJ5RW5jSWQoZW5jSWQpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvYXBwb2ludG1lbnQvZW5jLycgKyBlbmNJZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KHVybCk7XHJcbiAgICB9XHJcbiAgICBnZXRPcmRlcmJ5RW5jSWQoZW5jSWQpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvb3JkZXJzL2VuYy8nICsgZW5jSWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldCh1cmwpO1xyXG4gICAgfVxyXG4gICAgZ2V0U29yZGVyYnlFbmNJZChlbmNJZCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdjb25zdW1lci9zb3JkZXIvZW5jSWQvJyArIGVuY0lkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQodXJsKTtcclxuICAgIH1cclxuICAgIGdldEl2clF1ZXN0aW9ubmFpcmVCeVVpZCh1aWQsIGFjY291bnRJZCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdjb25zdW1lci9pdnIvcXVlc3Rpb25uYWlyZS8nICsgdWlkICsgJz9hY2NvdW50PScgKyBhY2NvdW50SWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldCh1cmwpO1xyXG4gICAgfVxyXG4gICAgZ2V0aXZyQnlDb25zdW1lclVVSUQodXVpZCwgYWNjb3VudGlkKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL2l2ci8nICsgdXVpZCArICc/YWNjb3VudD0nICsgYWNjb3VudGlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQodXJsKTtcclxuICAgIH1cclxuICAgIC8vIGdldEFwcG9pbnRtZW50QnlJZChhcHBtbnRJZCkge1xyXG4gICAgLy8gICAgIGNvbnN0IHVybCA9ICdwcm92aWRlci9hcHBvaW50bWVudC8nICsgYXBwbW50SWQ7XHJcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldCh1cmwpO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gZ2V0UHJvdmlkZXJPcmRlckRldGFpbEJ5SWQodXVpZCkge1xyXG4gICAgLy8gICAgIGNvbnN0IHVybCA9ICdwcm92aWRlci9vcmRlcnMvJyArIHV1aWQ7XHJcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldCh1cmwpO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gZ2V0UHJvdmlkZXJXYWl0bGlzdERldGFpbEJ5SWQodXVpZCkge1xyXG4gICAgLy8gICAgIGNvbnN0IHVybCA9ICdwcm92aWRlci93YWl0bGlzdC8nICsgdXVpZDtcclxuICAgIC8vICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KHVybCk7XHJcbiAgICAvLyB9XHJcbiAgICBQYXltZW50bGlua2NoZWNrKHV1aWQpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvcGF5bWVudC9wYXkvJyArIHV1aWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldCh1cmwpO1xyXG4gICAgfVxyXG4gICAgZ2V0SWRUZXJtaW5vbG9naWVzKGRvbWFpbiwgc3ViRG9tYWluKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ3lud0NvbmYvdGVybWlub2xvZ2llcy8nICsgZG9tYWluICsgJy8nICsgc3ViRG9tYWluO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQodXJsKTtcclxuICAgIH1cclxuICAgIC8vIGxpbmtQYXltZW50KGRhdGEpIHtcclxuICAgIC8vICAgICBjb25zdCB1cmwgPSAncHJvdmlkZXIvcGF5bWVudC9wYXlsaW5rL29yZGVyL2NyZWF0ZSc7XHJcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cFBvc3QodXJsLCBkYXRhKTtcclxuICAgIC8vIH1cclxuICAgIGxpbmtQYXltZW50X2ludm9pYyhkYXRhKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL2pwL2ZpbmFuY2UvcGF5JztcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwUG9zdCh1cmwsIGRhdGEpO1xyXG4gICAgfVxyXG4gICAgbGlua1NvUGF5bWVudF9pbnZvaWMoZGF0YSkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdjb25zdW1lci9zby9wYXknO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBQb3N0KHVybCwgZGF0YSk7XHJcbiAgICB9XHJcbiAgICBnZXRJbnZvaWNlRGV0YWlsc0J5SWQoYWNjSWQsIHV1aWQpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvanAvZmluYW5jZS9pbnZvaWNlLycgKyBhY2NJZCArICcvJyArIHV1aWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldCh1cmwpO1xyXG4gICAgfVxyXG4gICAgZ2V0U29JbnZvaWNlRGV0YWlsc0J5SWQoYWNjSWQsIHV1aWQpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvc28vaW52b2ljZS8nICsgYWNjSWQgKyAnLycgKyB1dWlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQodXJsKTtcclxuICAgIH1cclxuICAgIHVwbG9hZEZpbGVzVG9TMyhkYXRhLCBhY2NvdW50SWQpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvZmlsZVNoYXJlL3VwbG9hZCcgKyAnP2FjY291bnQ9JyArIGFjY291bnRJZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwUG9zdCh1cmwsIGRhdGEpO1xyXG4gICAgfVxyXG4gICAgdmlkZW9hdWRpb1MzVXBsb2FkU3RhdHVzVXBkYXRlKHN0YXR1cywgaWQsIGFjY291bnRJZCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdjb25zdW1lci9maWxlU2hhcmUvdXBsb2FkLycgKyBzdGF0dXMgKyAnLycgKyBpZCArICc/YWNjb3VudD0nICsgYWNjb3VudElkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBQdXQodXJsLCBudWxsKTtcclxuICAgIH1cclxuICAgIGdldEFwcHRCaWxsKHV1aWQpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvYXBwb2ludG1lbnQvJyArIHV1aWQgKyAnLycgKyAnYmlsbGRldGFpbHMnO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQodXJsKTtcclxuICAgIH1cclxuICAgIGdldFdhaXRCaWxsKHV1aWQpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvd2FpdGxpc3QvJyArIHV1aWQgKyAnLycgKyAnYmlsbGRldGFpbHMnO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQodXJsKTtcclxuICAgIH1cclxuICAgIGdldEludm9pY2VEZXRhaWxzQnl1dWlkKHV1aWQpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvanAvZmluYW5jZS9pbnZvaWNlL3lud3VpZCcgKyAnLycgKyB1dWlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQodXJsKTtcclxuICAgIH1cclxuICAgIGdldEludm9pY2UoYWNjb3VudElkLCBpbnZvaWNlVWlkKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL2pwL2ZpbmFuY2UvaW52b2ljZScgKyAnLycgKyBhY2NvdW50SWQgKyAnLycgKyBpbnZvaWNlVWlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQodXJsKTtcclxuICAgIH1cclxuICAgIGdldENvbnNlbnRGb3JtKGlkKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL2NvbnNlbnRmb3JtLycgKyBpZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KHVybCwgbnVsbCk7XHJcbiAgICB9XHJcbiAgICBnZXRjb25zZW50Rm9ybVF1ZXN0aW9uYWlyZSh1dWlkKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL2NvbnNlbnRmb3JtL3F1ZXN0aW9ubmFpcmUvJyArIHV1aWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldCh1cmwpO1xyXG4gICAgfVxyXG4gICAgc3VibWl0UXVlc3Rpb25uYWlyZShib2R5LCB1dWlkKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL2NvbnNlbnRmb3JtL3F1ZXN0aW9ubmFpcmUvc3VibWl0LycgKyB1dWlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBQb3N0KHVybCwgYm9keSk7XHJcbiAgICB9XHJcbiAgICB2ZXJpZnlTaWduKHV1aWQsIGJvZHkpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvY29uc2VudGZvcm0vdmVyaWZ5c2lnbi8nICsgdXVpZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwUGF0Y2godXJsLCBib2R5KTtcclxuICAgIH1cclxuICAgIHZlcmlmeVFucih1dWlkKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL2NvbnNlbnRmb3JtL3ZlcmlmeVN0YXR1cy8nICsgdXVpZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlbWV0YS5odHRwR2V0KHVybCk7XHJcbiAgICB9XHJcbiAgICBpc1Byb3ZpZGVyUmVhZHkocG9zdF9kYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cFB1dCgnY29uc3VtZXIvYXBwb2ludG1lbnQvdmlkZW9jYWxsL3JlYWR5JywgcG9zdF9kYXRhKTtcclxuICAgIH1cclxuICAgIHVwZGF0ZUFuYWx5dGljcyhib2R5KSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL2FuYWx5dGljcy91cGRhdGUnO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBQb3N0KHVybCwgYm9keSk7XHJcbiAgICB9XHJcbiAgICBnZXRVc2Vyc0J5TG9jYXRpb24obG9jYXRpb25JZCwgdW5pcXVlSWQsIGxpc3RPZlVybHMpIHtcclxuICAgICAgICBsZXQgcGF0aCA9ICdwcm92aWRlci9hY2NvdW50L3NldHRpbmdzL2xvY2F0aW9uLycgKyBsb2NhdGlvbklkICsgJy8nICsgdW5pcXVlSWQgKyAnLycgKyBsaXN0T2ZVcmxzO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQocGF0aCk7XHJcbiAgICB9XHJcbiAgICBnZXRJbmJveCh1c2VydHlwZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBHZXQodXNlcnR5cGUgKyAnL2NvbW11bmljYXRpb25zJyk7XHJcbiAgICB9XHJcbiAgICByZWFkUHJvdmlkZXJNZXNzYWdlcyhwcm92aWRlcklkLCBtZXNzYWdlSWRzLCBhY2NvdW50SWQpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvY29tbXVuaWNhdGlvbnMvcmVhZE1lc3NhZ2VzLycgKyBwcm92aWRlcklkICsgJy8nICsgbWVzc2FnZUlkcyArICc/YWNjb3VudD0nICsgYWNjb3VudElkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VtZXRhLmh0dHBQdXQodXJsKTtcclxuICAgIH1cclxufSJdfQ==
|