active-connect-ng2 0.2.49 → 0.3.0
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/fesm2022/active-connect-ng2.mjs +1186 -0
- package/fesm2022/active-connect-ng2.mjs.map +1 -0
- package/package.json +11 -17
- package/types/active-connect-ng2.d.ts +254 -0
- package/esm2020/active-connect-ng2.mjs +0 -5
- package/esm2020/lib/active-connect-ng2.module.mjs +0 -42
- package/esm2020/lib/websocket/client.mjs +0 -442
- package/esm2020/lib/websocket/decorators/function.mjs +0 -40
- package/esm2020/lib/websocket/decorators/websocket/handle.mjs +0 -9
- package/esm2020/lib/websocket/decorators/websocket/on-reconnect.mjs +0 -6
- package/esm2020/lib/websocket/decorators/websocket/on-success.mjs +0 -8
- package/esm2020/lib/websocket/decorators/websocket/outbound.mjs +0 -213
- package/esm2020/lib/websocket/decorators/websocket/route.mjs +0 -31
- package/esm2020/lib/websocket/decorators/websocket/shared.mjs +0 -10
- package/esm2020/lib/websocket/decorators/websocket/websocket-route-service.mjs +0 -2
- package/esm2020/lib/websocket/index.mjs +0 -11
- package/esm2020/lib/websocket/json/json-parser.mjs +0 -23
- package/esm2020/lib/websocket/lifecycle/loading-status.mjs +0 -31
- package/esm2020/lib/websocket/objects/outbound-object.mjs +0 -410
- package/esm2020/public-api.mjs +0 -7
- package/fesm2015/active-connect-ng2.mjs +0 -1285
- package/fesm2015/active-connect-ng2.mjs.map +0 -1
- package/fesm2020/active-connect-ng2.mjs +0 -1267
- package/fesm2020/active-connect-ng2.mjs.map +0 -1
- package/index.d.ts +0 -5
- package/lib/active-connect-ng2.module.d.ts +0 -7
- package/lib/websocket/client.d.ts +0 -65
- package/lib/websocket/decorators/function.d.ts +0 -30
- package/lib/websocket/decorators/websocket/handle.d.ts +0 -1
- package/lib/websocket/decorators/websocket/on-reconnect.d.ts +0 -1
- package/lib/websocket/decorators/websocket/on-success.d.ts +0 -1
- package/lib/websocket/decorators/websocket/outbound.d.ts +0 -1
- package/lib/websocket/decorators/websocket/route.d.ts +0 -1
- package/lib/websocket/decorators/websocket/shared.d.ts +0 -4
- package/lib/websocket/decorators/websocket/websocket-route-service.d.ts +0 -5
- package/lib/websocket/index.d.ts +0 -10
- package/lib/websocket/json/json-parser.d.ts +0 -5
- package/lib/websocket/lifecycle/loading-status.d.ts +0 -9
- package/lib/websocket/objects/outbound-object.d.ts +0 -50
- package/public-api.d.ts +0 -3
|
@@ -1,410 +0,0 @@
|
|
|
1
|
-
import { Observable } from 'rxjs';
|
|
2
|
-
import { WebsocketClient } from '../client';
|
|
3
|
-
export class OutboundObject {
|
|
4
|
-
constructor(client, method, lazyLoaded, cached, initialLoadingCount, sortBy) {
|
|
5
|
-
this.client = client;
|
|
6
|
-
this.method = method;
|
|
7
|
-
this.lazyLoaded = lazyLoaded;
|
|
8
|
-
this.cached = cached;
|
|
9
|
-
this.initialLoadingCount = initialLoadingCount;
|
|
10
|
-
this.sortBy = sortBy;
|
|
11
|
-
this.dataMap = new Map();
|
|
12
|
-
this.data = undefined;
|
|
13
|
-
this.requested = false;
|
|
14
|
-
this._loading = false;
|
|
15
|
-
this._length = undefined;
|
|
16
|
-
this.requestedId = null;
|
|
17
|
-
this.requestedIdConnectionId = null;
|
|
18
|
-
this.loadedObservable = null;
|
|
19
|
-
this.loadedId = null;
|
|
20
|
-
this.loadedIdData = null;
|
|
21
|
-
this.loadedIdChanged = null;
|
|
22
|
-
this.requestedGroupId = null;
|
|
23
|
-
this.requestedGroupIdConnectionId = null;
|
|
24
|
-
this.loadedGroupObservable = null;
|
|
25
|
-
this.loadedGroupId = null;
|
|
26
|
-
this.loadedGroupData = null;
|
|
27
|
-
this.loadedGroupChanged = null;
|
|
28
|
-
this.target.loading = new Map();
|
|
29
|
-
if (this.client.dbService) {
|
|
30
|
-
try {
|
|
31
|
-
this.client.dbService
|
|
32
|
-
.getByKey('outbound', method)
|
|
33
|
-
.subscribe((result) => {
|
|
34
|
-
if (result) {
|
|
35
|
-
this.previouslyCachedCount = result.data?.length || null;
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
catch (e) {
|
|
40
|
-
console.error('ActiveConnect: Unable to read cached data');
|
|
41
|
-
console.error(e);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
const _this = this;
|
|
45
|
-
WebsocketClient.expectOutbound(method, function setOutbound(data, specificHash, insertedOrGroupData, updatedOrGroupId, deleted, length, _client) {
|
|
46
|
-
if (!cached) {
|
|
47
|
-
if (_client.dbService) {
|
|
48
|
-
try {
|
|
49
|
-
_client.dbService
|
|
50
|
-
.deleteByKey('outbound', method)
|
|
51
|
-
.subscribe(() => { });
|
|
52
|
-
}
|
|
53
|
-
catch (e) {
|
|
54
|
-
console.error('ActiveConnect: Unable to delete cached data');
|
|
55
|
-
console.error(e);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
if (data == 'cache_restore') {
|
|
60
|
-
if (_client.dbService) {
|
|
61
|
-
try {
|
|
62
|
-
_client.dbService
|
|
63
|
-
.getByKey('outbound', method)
|
|
64
|
-
.subscribe((result) => {
|
|
65
|
-
_this.setData(result.data);
|
|
66
|
-
if (result.length)
|
|
67
|
-
_this._length = result.length;
|
|
68
|
-
_this.loading = false;
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
catch (e) {
|
|
72
|
-
console.error('ActiveConnect: Unable to restore cached data');
|
|
73
|
-
console.error(e);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
console.error('ActiveConnect: Caching / restore not possible as the indexedDB is not accessible');
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
else if (data == 'cache_delete') {
|
|
81
|
-
if (_client.dbService) {
|
|
82
|
-
try {
|
|
83
|
-
_client.dbService
|
|
84
|
-
.deleteByKey('outbound', method)
|
|
85
|
-
.subscribe(() => { });
|
|
86
|
-
}
|
|
87
|
-
catch (e) {
|
|
88
|
-
console.error('ActiveConnect: Unable to delete cached data');
|
|
89
|
-
console.error(e);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
console.error('ActiveConnect: Caching / restore not possible as the indexedDB is not accessible');
|
|
94
|
-
}
|
|
95
|
-
_this.loading = false;
|
|
96
|
-
_this.requested = false;
|
|
97
|
-
}
|
|
98
|
-
else if (data == 'data_delete') {
|
|
99
|
-
_this.data = undefined;
|
|
100
|
-
_this.dataMap = new Map();
|
|
101
|
-
_this.requested = false;
|
|
102
|
-
_this.loadedGroupData = null;
|
|
103
|
-
_this.loadedGroupId = null;
|
|
104
|
-
_this._length = undefined;
|
|
105
|
-
_this.loading = false;
|
|
106
|
-
}
|
|
107
|
-
else if (data == 'data_group') {
|
|
108
|
-
if (_this.requestedGroupId ==
|
|
109
|
-
(updatedOrGroupId ? updatedOrGroupId[0] : 0)) {
|
|
110
|
-
_this.loadedGroupData = insertedOrGroupData;
|
|
111
|
-
_this.loadedGroupId = updatedOrGroupId ? updatedOrGroupId[0] : 0;
|
|
112
|
-
_this.requestedGroupIdConnectionId = _this.target.___connectionId;
|
|
113
|
-
_this.loadedGroupChanged?.next(insertedOrGroupData);
|
|
114
|
-
_this.loading = false;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
else if (data == 'data_id') {
|
|
118
|
-
if (_this.requestedId == (updatedOrGroupId ? updatedOrGroupId[0] : 0)) {
|
|
119
|
-
_this.loadedIdData =
|
|
120
|
-
(insertedOrGroupData?.length || 0) > 0
|
|
121
|
-
? insertedOrGroupData[0]
|
|
122
|
-
: null;
|
|
123
|
-
_this.loadedId = updatedOrGroupId ? updatedOrGroupId[0] : 0;
|
|
124
|
-
_this.requestedIdConnectionId = _this.target.___connectionId;
|
|
125
|
-
_this.loadedIdChanged?.next(_this.loadedIdData);
|
|
126
|
-
_this.loading = false;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
else if (data == 'data_diff') {
|
|
130
|
-
insertedOrGroupData?.forEach((e) => {
|
|
131
|
-
_this.dataMap.set(e.id, e);
|
|
132
|
-
if (e.id == _this.loadedId) {
|
|
133
|
-
_this.loadedIdChanged?.next(e);
|
|
134
|
-
}
|
|
135
|
-
});
|
|
136
|
-
updatedOrGroupId?.forEach((e) => {
|
|
137
|
-
_this.dataMap.set(e.id, e);
|
|
138
|
-
if (e.id == _this.loadedId) {
|
|
139
|
-
_this.loadedIdChanged?.next(e);
|
|
140
|
-
}
|
|
141
|
-
});
|
|
142
|
-
deleted?.forEach((e) => {
|
|
143
|
-
_this.dataMap.delete(e.id);
|
|
144
|
-
if (e.id == _this.loadedId) {
|
|
145
|
-
_this.loadedIdChanged?.next(null);
|
|
146
|
-
}
|
|
147
|
-
});
|
|
148
|
-
_this.data = Array.from(_this.dataMap.values());
|
|
149
|
-
if (_this.data && _this.sortBy)
|
|
150
|
-
_this.data = _this.data.sort(_this.sortBy);
|
|
151
|
-
_this.loading = false;
|
|
152
|
-
if (cached && specificHash) {
|
|
153
|
-
if (_client.dbService) {
|
|
154
|
-
try {
|
|
155
|
-
if (_this.data && _this.data?.length > 0) {
|
|
156
|
-
_client.dbService
|
|
157
|
-
.update('outbound', {
|
|
158
|
-
method,
|
|
159
|
-
data: _this.data,
|
|
160
|
-
specificHash,
|
|
161
|
-
length
|
|
162
|
-
})
|
|
163
|
-
.subscribe(() => { });
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
_client.dbService
|
|
167
|
-
.deleteByKey('outbound', method)
|
|
168
|
-
.subscribe(() => { });
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
catch (e) {
|
|
172
|
-
console.error('ActiveConnect: Unable to update cached data.');
|
|
173
|
-
console.error(e);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
else {
|
|
177
|
-
console.error('ActiveConnect: Caching not possible as the indexedDB has not been initialized');
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
else {
|
|
182
|
-
_this.setData(data);
|
|
183
|
-
if (_this.loadedId) {
|
|
184
|
-
const loadedValue = _this.dataMap.get(_this.loadedId);
|
|
185
|
-
if (loadedValue) {
|
|
186
|
-
_this.loadedIdData = loadedValue;
|
|
187
|
-
_this.loadedIdChanged?.next(_this.loadedIdData);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
_this.loading = false;
|
|
191
|
-
if (cached && specificHash) {
|
|
192
|
-
if (_client.dbService) {
|
|
193
|
-
try {
|
|
194
|
-
if (data && data?.length > 0) {
|
|
195
|
-
_client.dbService
|
|
196
|
-
.update('outbound', {
|
|
197
|
-
method,
|
|
198
|
-
data,
|
|
199
|
-
specificHash,
|
|
200
|
-
length
|
|
201
|
-
})
|
|
202
|
-
.subscribe(() => { });
|
|
203
|
-
}
|
|
204
|
-
else {
|
|
205
|
-
_client.dbService
|
|
206
|
-
.deleteByKey('outbound', method)
|
|
207
|
-
.subscribe(() => { });
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
catch (e) {
|
|
211
|
-
console.error('ActiveConnect: Unable to update cached data.');
|
|
212
|
-
console.error(e);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
else {
|
|
216
|
-
console.error('ActiveConnect: Caching not possible as the indexedDB has not been initialized');
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
if (length)
|
|
221
|
-
_this._length = length;
|
|
222
|
-
});
|
|
223
|
-
WebsocketClient.addResetRequestingStateCallback(() => {
|
|
224
|
-
this.afterServerReconnected();
|
|
225
|
-
});
|
|
226
|
-
}
|
|
227
|
-
get target() {
|
|
228
|
-
return this.client.__proto__;
|
|
229
|
-
}
|
|
230
|
-
get(id) {
|
|
231
|
-
if (this.requestedId == id &&
|
|
232
|
-
this.target.___connectionId == this.requestedIdConnectionId &&
|
|
233
|
-
this.loadedObservable &&
|
|
234
|
-
this.loadedIdData) {
|
|
235
|
-
if (this.loadedIdData)
|
|
236
|
-
setTimeout(() => {
|
|
237
|
-
if (this.loadedIdData)
|
|
238
|
-
this.loadedIdChanged?.next(this.loadedIdData);
|
|
239
|
-
}, 50);
|
|
240
|
-
return this.loadedObservable;
|
|
241
|
-
}
|
|
242
|
-
let observablePromise;
|
|
243
|
-
if (this.requestedId != id ||
|
|
244
|
-
this.target.___connectionId != this.requestedIdConnectionId ||
|
|
245
|
-
!this.loadedObservable) {
|
|
246
|
-
observablePromise = new Promise((resolve) => {
|
|
247
|
-
this.loadedObservable = new Observable((observer) => {
|
|
248
|
-
this.loadedIdChanged = observer;
|
|
249
|
-
resolve();
|
|
250
|
-
});
|
|
251
|
-
});
|
|
252
|
-
}
|
|
253
|
-
Promise.all([observablePromise]).then(() => {
|
|
254
|
-
new Promise(async (resolve) => {
|
|
255
|
-
if (!this.requested && this.lazyLoaded) {
|
|
256
|
-
this.load().then();
|
|
257
|
-
}
|
|
258
|
-
if (this.data) {
|
|
259
|
-
const res = this.dataMap.get(id);
|
|
260
|
-
if (res) {
|
|
261
|
-
this.loadedIdChanged?.next(res);
|
|
262
|
-
resolve();
|
|
263
|
-
return;
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
if (this.loadedId == id) {
|
|
267
|
-
this.loadedIdChanged?.next(this.loadedIdData);
|
|
268
|
-
}
|
|
269
|
-
else {
|
|
270
|
-
await this.requestById(id);
|
|
271
|
-
}
|
|
272
|
-
resolve();
|
|
273
|
-
}).then();
|
|
274
|
-
});
|
|
275
|
-
return this.loadedObservable;
|
|
276
|
-
}
|
|
277
|
-
getForGroup(groupId) {
|
|
278
|
-
if (this.requestedGroupId == groupId &&
|
|
279
|
-
this.target.___connectionId == this.requestedGroupIdConnectionId &&
|
|
280
|
-
this.loadedGroupObservable &&
|
|
281
|
-
this.loadedGroupData) {
|
|
282
|
-
setTimeout(() => {
|
|
283
|
-
if (this.loadedGroupData)
|
|
284
|
-
this.loadedGroupChanged?.next(this.loadedGroupData);
|
|
285
|
-
}, 50);
|
|
286
|
-
return this.loadedGroupObservable;
|
|
287
|
-
}
|
|
288
|
-
let observablePromise;
|
|
289
|
-
if (this.requestedGroupId != groupId ||
|
|
290
|
-
this.target.___connectionId != this.requestedGroupIdConnectionId ||
|
|
291
|
-
!this.loadedGroupObservable) {
|
|
292
|
-
observablePromise = new Promise((resolve) => {
|
|
293
|
-
this.loadedGroupObservable = new Observable((observer) => {
|
|
294
|
-
this.loadedGroupChanged = observer;
|
|
295
|
-
resolve();
|
|
296
|
-
});
|
|
297
|
-
});
|
|
298
|
-
}
|
|
299
|
-
Promise.all([observablePromise]).then(() => {
|
|
300
|
-
new Promise(async (resolve) => {
|
|
301
|
-
if (!this.requested && this.lazyLoaded) {
|
|
302
|
-
this.load().then();
|
|
303
|
-
}
|
|
304
|
-
if (this.loadedGroupId == groupId && this.loadedGroupData) {
|
|
305
|
-
this.loadedGroupChanged?.next(this.loadedGroupData);
|
|
306
|
-
}
|
|
307
|
-
else {
|
|
308
|
-
await this.requestForGroup(groupId);
|
|
309
|
-
}
|
|
310
|
-
resolve();
|
|
311
|
-
}).then();
|
|
312
|
-
});
|
|
313
|
-
return this.loadedGroupObservable;
|
|
314
|
-
}
|
|
315
|
-
get all() {
|
|
316
|
-
if (!this.requested && this.lazyLoaded) {
|
|
317
|
-
this.load().then();
|
|
318
|
-
}
|
|
319
|
-
return this.data;
|
|
320
|
-
}
|
|
321
|
-
async load(count) {
|
|
322
|
-
if (this.lazyLoaded) {
|
|
323
|
-
const hasBeenRequestedBefore = this.requested;
|
|
324
|
-
this._loading = true;
|
|
325
|
-
if (!this.requested) {
|
|
326
|
-
this.loading = true;
|
|
327
|
-
}
|
|
328
|
-
this.requested = true;
|
|
329
|
-
await this.client.send('request.' + this.method, {
|
|
330
|
-
count: hasBeenRequestedBefore
|
|
331
|
-
? this.data
|
|
332
|
-
? count || this.initialLoadingCount
|
|
333
|
-
? (count || this.initialLoadingCount) +
|
|
334
|
-
this.loadedLength
|
|
335
|
-
: undefined
|
|
336
|
-
: undefined
|
|
337
|
-
: this.previouslyCachedCount || this.initialLoadingCount,
|
|
338
|
-
loaded: this.loadedLength
|
|
339
|
-
});
|
|
340
|
-
}
|
|
341
|
-
else {
|
|
342
|
-
throw Error('Active-Connect: Cannot run loading request as this outbound is not lazy-loaded.');
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
set loading(value) {
|
|
346
|
-
this._loading = value;
|
|
347
|
-
this.target.loading.set(this.method, value);
|
|
348
|
-
}
|
|
349
|
-
get loading() {
|
|
350
|
-
return this._loading;
|
|
351
|
-
}
|
|
352
|
-
get loadedLength() {
|
|
353
|
-
return this.data?.length || 0;
|
|
354
|
-
}
|
|
355
|
-
get length() {
|
|
356
|
-
return this._length;
|
|
357
|
-
}
|
|
358
|
-
requestById(id) {
|
|
359
|
-
this.loading = true;
|
|
360
|
-
this.requestedId = id;
|
|
361
|
-
return this.client.send('request.' + this.method, { id });
|
|
362
|
-
}
|
|
363
|
-
requestForGroup(groupId) {
|
|
364
|
-
this.loading = true;
|
|
365
|
-
this.requestedGroupId = groupId;
|
|
366
|
-
return this.client.send('request.' + this.method, { groupId });
|
|
367
|
-
}
|
|
368
|
-
setData(data) {
|
|
369
|
-
this.data = data;
|
|
370
|
-
if (this.data && this.sortBy)
|
|
371
|
-
this.data = this.data.sort(this.sortBy);
|
|
372
|
-
this._length = data.length;
|
|
373
|
-
this.dataMap = new Map();
|
|
374
|
-
this.data.forEach((d) => {
|
|
375
|
-
this.dataMap.set(d.id, d);
|
|
376
|
-
});
|
|
377
|
-
}
|
|
378
|
-
get isEmpty() {
|
|
379
|
-
return this.data == undefined;
|
|
380
|
-
}
|
|
381
|
-
/**
|
|
382
|
-
* The contained data can be modified within the callback method
|
|
383
|
-
*/
|
|
384
|
-
update(callback) {
|
|
385
|
-
if (this.data) {
|
|
386
|
-
const updateLengthVariable = this.data.length == this._length;
|
|
387
|
-
const length = this.length;
|
|
388
|
-
callback(this.data);
|
|
389
|
-
this.setData(this.data);
|
|
390
|
-
if (!updateLengthVariable) {
|
|
391
|
-
this._length = length;
|
|
392
|
-
}
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
afterServerReconnected() {
|
|
396
|
-
if (this.requested && this.lazyLoaded) {
|
|
397
|
-
this.requested = false;
|
|
398
|
-
this.load(this.loadedLength).then();
|
|
399
|
-
}
|
|
400
|
-
if (this.loadedId) {
|
|
401
|
-
this.loadedIdData = null;
|
|
402
|
-
this.get(this.loadedId);
|
|
403
|
-
}
|
|
404
|
-
if (this.loadedGroupId) {
|
|
405
|
-
this.loadedGroupData = null;
|
|
406
|
-
this.getForGroup(this.loadedGroupId);
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0Ym91bmQtb2JqZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWN0aXZlLWNvbm5lY3QtbmcyL3NyYy9saWIvd2Vic29ja2V0L29iamVjdHMvb3V0Ym91bmQtb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVksTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQU01QyxNQUFNLE9BQU8sY0FBYztJQUV6QixZQUNVLE1BQXVCLEVBQ3ZCLE1BQWMsRUFDZCxVQUFvQixFQUNaLE1BQWdCLEVBQ3hCLG1CQUE0QixFQUM1QixNQUErQjtRQUwvQixXQUFNLEdBQU4sTUFBTSxDQUFpQjtRQUN2QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZUFBVSxHQUFWLFVBQVUsQ0FBVTtRQUNaLFdBQU0sR0FBTixNQUFNLENBQVU7UUFDeEIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFTO1FBQzVCLFdBQU0sR0FBTixNQUFNLENBQXlCO1FBc05qQyxZQUFPLEdBQXNDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdkQsU0FBSSxHQUFvQixTQUFTLENBQUM7UUEyR2xDLGNBQVMsR0FBWSxLQUFLLENBQUM7UUEyQjNCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFXakIsWUFBTyxHQUF1QixTQUFTLENBQUM7UUFLeEMsZ0JBQVcsR0FBa0IsSUFBSSxDQUFDO1FBQ2xDLDRCQUF1QixHQUFrQixJQUFJLENBQUM7UUFDOUMscUJBQWdCLEdBQXlCLElBQUksQ0FBQztRQUM5QyxhQUFRLEdBQWtCLElBQUksQ0FBQztRQUMvQixpQkFBWSxHQUFhLElBQUksQ0FBQztRQUM5QixvQkFBZSxHQUF1QixJQUFJLENBQUM7UUFPM0MscUJBQWdCLEdBQWtCLElBQUksQ0FBQztRQUN2QyxpQ0FBNEIsR0FBa0IsSUFBSSxDQUFDO1FBQ25E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Q0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDdEM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBPYnNlcnZlciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBXZWJzb2NrZXRDbGllbnQgfSBmcm9tICcuLi9jbGllbnQnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJZE9iamVjdCB7XHJcbiAgaWQ6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBPdXRib3VuZE9iamVjdDxUIGV4dGVuZHMgSWRPYmplY3Q+IHtcclxuICBwcml2YXRlIHByZXZpb3VzbHlDYWNoZWRDb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjbGllbnQ6IFdlYnNvY2tldENsaWVudCxcclxuICAgIHByaXZhdGUgbWV0aG9kOiBzdHJpbmcsXHJcbiAgICBwcml2YXRlIGxhenlMb2FkZWQ/OiBib29sZWFuLFxyXG4gICAgcHVibGljIHJlYWRvbmx5IGNhY2hlZD86IGJvb2xlYW4sXHJcbiAgICBwcml2YXRlIGluaXRpYWxMb2FkaW5nQ291bnQ/OiBudW1iZXIsXHJcbiAgICBwcml2YXRlIHNvcnRCeT86IChhOiBULCBiOiBUKSA9PiBudW1iZXJcclxuICApIHtcclxuICAgIHRoaXMudGFyZ2V0LmxvYWRpbmcgPSBuZXcgTWFwPHN0cmluZywgYm9vbGVhbj4oKTtcclxuXHJcbiAgICBpZiAodGhpcy5jbGllbnQuZGJTZXJ2aWNlKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5jbGllbnQuZGJTZXJ2aWNlXHJcbiAgICAgICAgICAuZ2V0QnlLZXkoJ291dGJvdW5kJywgbWV0aG9kKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgIHRoaXMucHJldmlvdXNseUNhY2hlZENvdW50ID0gcmVzdWx0LmRhdGE/Lmxlbmd0aCB8fCBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FjdGl2ZUNvbm5lY3Q6IFVuYWJsZSB0byByZWFkIGNhY2hlZCBkYXRhJyk7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgIFdlYnNvY2tldENsaWVudC5leHBlY3RPdXRib3VuZChcclxuICAgICAgbWV0aG9kLFxyXG4gICAgICBmdW5jdGlvbiBzZXRPdXRib3VuZChcclxuICAgICAgICBkYXRhOiBhbnksXHJcbiAgICAgICAgc3BlY2lmaWNIYXNoOiBudW1iZXIgfCBudWxsLFxyXG4gICAgICAgIGluc2VydGVkT3JHcm91cERhdGE6IGFueVtdIHwgbnVsbCxcclxuICAgICAgICB1cGRhdGVkT3JHcm91cElkOiBhbnlbXSB8IG51bGwsXHJcbiAgICAgICAgZGVsZXRlZDogYW55W10gfCBudWxsLFxyXG4gICAgICAgIGxlbmd0aDogbnVtYmVyIHwgbnVsbCxcclxuICAgICAgICBfY2xpZW50OiBXZWJzb2NrZXRDbGllbnRcclxuICAgICAgKSB7XHJcbiAgICAgICAgaWYgKCFjYWNoZWQpIHtcclxuICAgICAgICAgIGlmIChfY2xpZW50LmRiU2VydmljZSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgIF9jbGllbnQuZGJTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAuZGVsZXRlQnlLZXkoJ291dGJvdW5kJywgbWV0aG9kKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7fSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBY3RpdmVDb25uZWN0OiBVbmFibGUgdG8gZGVsZXRlIGNhY2hlZCBkYXRhJyk7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGRhdGEgPT0gJ2NhY2hlX3Jlc3RvcmUnKSB7XHJcbiAgICAgICAgICBpZiAoX2NsaWVudC5kYlNlcnZpY2UpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICBfY2xpZW50LmRiU2VydmljZVxyXG4gICAgICAgICAgICAgICAgLmdldEJ5S2V5KCdvdXRib3VuZCcsIG1ldGhvZClcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIF90aGlzLnNldERhdGEocmVzdWx0LmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCkgX3RoaXMuX2xlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgIF90aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQWN0aXZlQ29ubmVjdDogVW5hYmxlIHRvIHJlc3RvcmUgY2FjaGVkIGRhdGEnKTtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgICdBY3RpdmVDb25uZWN0OiBDYWNoaW5nIC8gcmVzdG9yZSBub3QgcG9zc2libGUgYXMgdGhlIGluZGV4ZWREQiBpcyBub3QgYWNjZXNzaWJsZSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgPT0gJ2NhY2hlX2RlbGV0ZScpIHtcclxuICAgICAgICAgIGlmIChfY2xpZW50LmRiU2VydmljZSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgIF9jbGllbnQuZGJTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAuZGVsZXRlQnlLZXkoJ291dGJvdW5kJywgbWV0aG9kKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7fSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBY3RpdmVDb25uZWN0OiBVbmFibGUgdG8gZGVsZXRlIGNhY2hlZCBkYXRhJyk7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgICAgICAnQWN0aXZlQ29ubmVjdDogQ2FjaGluZyAvIHJlc3RvcmUgbm90IHBvc3NpYmxlIGFzIHRoZSBpbmRleGVkREIgaXMgbm90IGFjY2Vzc2libGUnXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBfdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBfdGhpcy5yZXF1ZXN0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgPT0gJ2RhdGFfZGVsZXRlJykge1xyXG4gICAgICAgICAgX3RoaXMuZGF0YSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIF90aGlzLmRhdGFNYXAgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgICBfdGhpcy5yZXF1ZXN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIF90aGlzLmxvYWRlZEdyb3VwRGF0YSA9IG51bGw7XHJcbiAgICAgICAgICBfdGhpcy5sb2FkZWRHcm91cElkID0gbnVsbDtcclxuICAgICAgICAgIF90aGlzLl9sZW5ndGggPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICBfdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhID09ICdkYXRhX2dyb3VwJykge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBfdGhpcy5yZXF1ZXN0ZWRHcm91cElkID09XHJcbiAgICAgICAgICAgICh1cGRhdGVkT3JHcm91cElkID8gdXBkYXRlZE9yR3JvdXBJZFswXSA6IDApXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgX3RoaXMubG9hZGVkR3JvdXBEYXRhID0gaW5zZXJ0ZWRPckdyb3VwRGF0YTtcclxuICAgICAgICAgICAgX3RoaXMubG9hZGVkR3JvdXBJZCA9IHVwZGF0ZWRPckdyb3VwSWQgPyB1cGRhdGVkT3JHcm91cElkWzBdIDogMDtcclxuICAgICAgICAgICAgX3RoaXMucmVxdWVzdGVkR3JvdXBJZENvbm5lY3Rpb25JZCA9IF90aGlzLnRhcmdldC5fX19jb25uZWN0aW9uSWQ7XHJcbiAgICAgICAgICAgIF90aGlzLmxvYWRlZEdyb3VwQ2hhbmdlZD8ubmV4dChpbnNlcnRlZE9yR3JvdXBEYXRhIGFzIFRbXSk7XHJcbiAgICAgICAgICAgIF90aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgPT0gJ2RhdGFfaWQnKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIF90aGlzLnJlcXVlc3RlZElkID09ICh1cGRhdGVkT3JHcm91cElkID8gdXBkYXRlZE9yR3JvdXBJZFswXSA6IDApXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgX3RoaXMubG9hZGVkSWREYXRhID1cclxuICAgICAgICAgICAgICAoaW5zZXJ0ZWRPckdyb3VwRGF0YT8ubGVuZ3RoIHx8IDApID4gMFxyXG4gICAgICAgICAgICAgICAgPyAoaW5zZXJ0ZWRPckdyb3VwRGF0YSBhcyBhbnlbXSlbMF1cclxuICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICAgICAgX3RoaXMubG9hZGVkSWQgPSB1cGRhdGVkT3JHcm91cElkID8gdXBkYXRlZE9yR3JvdXBJZFswXSA6IDA7XHJcbiAgICAgICAgICAgIF90aGlzLnJlcXVlc3RlZElkQ29ubmVjdGlvbklkID0gX3RoaXMudGFyZ2V0Ll9fX2Nvbm5lY3Rpb25JZDtcclxuICAgICAgICAgICAgX3RoaXMubG9hZGVkSWRDaGFuZ2VkPy5uZXh0KF90aGlzLmxvYWRlZElkRGF0YSBhcyBUKTtcclxuICAgICAgICAgICAgX3RoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PSAnZGF0YV9kaWZmJykge1xyXG4gICAgICAgICAgaW5zZXJ0ZWRPckdyb3VwRGF0YT8uZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICBfdGhpcy5kYXRhTWFwLnNldChlLmlkLCBlKTtcclxuICAgICAgICAgICAgaWYgKGUuaWQgPT0gX3RoaXMubG9hZGVkSWQpIHtcclxuICAgICAgICAgICAgICBfdGhpcy5sb2FkZWRJZENoYW5nZWQ/Lm5leHQoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdXBkYXRlZE9yR3JvdXBJZD8uZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICBfdGhpcy5kYXRhTWFwLnNldChlLmlkLCBlKTtcclxuICAgICAgICAgICAgaWYgKGUuaWQgPT0gX3RoaXMubG9hZGVkSWQpIHtcclxuICAgICAgICAgICAgICBfdGhpcy5sb2FkZWRJZENoYW5nZWQ/Lm5leHQoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgZGVsZXRlZD8uZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICBfdGhpcy5kYXRhTWFwLmRlbGV0ZShlLmlkKTtcclxuICAgICAgICAgICAgaWYgKGUuaWQgPT0gX3RoaXMubG9hZGVkSWQpIHtcclxuICAgICAgICAgICAgICBfdGhpcy5sb2FkZWRJZENoYW5nZWQ/Lm5leHQobnVsbCBhcyBhbnkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIF90aGlzLmRhdGEgPSBBcnJheS5mcm9tKF90aGlzLmRhdGFNYXAudmFsdWVzKCkpO1xyXG4gICAgICAgICAgaWYgKF90aGlzLmRhdGEgJiYgX3RoaXMuc29ydEJ5KVxyXG4gICAgICAgICAgICBfdGhpcy5kYXRhID0gX3RoaXMuZGF0YS5zb3J0KF90aGlzLnNvcnRCeSk7XHJcbiAgICAgICAgICBfdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgaWYgKGNhY2hlZCAmJiBzcGVjaWZpY0hhc2gpIHtcclxuICAgICAgICAgICAgaWYgKF9jbGllbnQuZGJTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChfdGhpcy5kYXRhICYmIF90aGlzLmRhdGE/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgX2NsaWVudC5kYlNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAudXBkYXRlKCdvdXRib3VuZCcsIHtcclxuICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCxcclxuICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IF90aGlzLmRhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY0hhc2gsXHJcbiAgICAgICAgICAgICAgICAgICAgICBsZW5ndGhcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge30pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgX2NsaWVudC5kYlNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAuZGVsZXRlQnlLZXkoJ291dGJvdW5kJywgbWV0aG9kKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge30pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FjdGl2ZUNvbm5lY3Q6IFVuYWJsZSB0byB1cGRhdGUgY2FjaGVkIGRhdGEuJyk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgICAgJ0FjdGl2ZUNvbm5lY3Q6IENhY2hpbmcgbm90IHBvc3NpYmxlIGFzIHRoZSBpbmRleGVkREIgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkJ1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgX3RoaXMuc2V0RGF0YShkYXRhKTtcclxuICAgICAgICAgIGlmIChfdGhpcy5sb2FkZWRJZCkge1xyXG4gICAgICAgICAgICBjb25zdCBsb2FkZWRWYWx1ZSA9IF90aGlzLmRhdGFNYXAuZ2V0KF90aGlzLmxvYWRlZElkKTtcclxuICAgICAgICAgICAgaWYgKGxvYWRlZFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgX3RoaXMubG9hZGVkSWREYXRhID0gbG9hZGVkVmFsdWU7XHJcbiAgICAgICAgICAgICAgX3RoaXMubG9hZGVkSWRDaGFuZ2VkPy5uZXh0KF90aGlzLmxvYWRlZElkRGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIF90aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChjYWNoZWQgJiYgc3BlY2lmaWNIYXNoKSB7XHJcbiAgICAgICAgICAgIGlmIChfY2xpZW50LmRiU2VydmljZSkge1xyXG4gICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIF9jbGllbnQuZGJTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAgICAgLnVwZGF0ZSgnb3V0Ym91bmQnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWNIYXNoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHt9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIF9jbGllbnQuZGJTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAgICAgLmRlbGV0ZUJ5S2V5KCdvdXRib3VuZCcsIG1ldGhvZClcclxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHt9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBY3RpdmVDb25uZWN0OiBVbmFibGUgdG8gdXBkYXRlIGNhY2hlZCBkYXRhLicpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgICAgICAgICdBY3RpdmVDb25uZWN0OiBDYWNoaW5nIG5vdCBwb3NzaWJsZSBhcyB0aGUgaW5kZXhlZERCIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCdcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsZW5ndGgpIF90aGlzLl9sZW5ndGggPSBsZW5ndGg7XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgV2Vic29ja2V0Q2xpZW50LmFkZFJlc2V0UmVxdWVzdGluZ1N0YXRlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICB0aGlzLmFmdGVyU2VydmVyUmVjb25uZWN0ZWQoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRhcmdldCgpOiBhbnkge1xyXG4gICAgcmV0dXJuICh0aGlzLmNsaWVudCBhcyBhbnkpLl9fcHJvdG9fXztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGF0YU1hcDogTWFwPG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIFQ+ID0gbmV3IE1hcCgpO1xyXG4gIHByaXZhdGUgZGF0YTogVFtdIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cclxuICBwdWJsaWMgZ2V0KGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5yZXF1ZXN0ZWRJZCA9PSBpZCAmJlxyXG4gICAgICB0aGlzLnRhcmdldC5fX19jb25uZWN0aW9uSWQgPT0gdGhpcy5yZXF1ZXN0ZWRJZENvbm5lY3Rpb25JZCAmJlxyXG4gICAgICB0aGlzLmxvYWRlZE9ic2VydmFibGUgJiZcclxuICAgICAgdGhpcy5sb2FkZWRJZERhdGFcclxuICAgICkge1xyXG4gICAgICBpZiAodGhpcy5sb2FkZWRJZERhdGEpXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5sb2FkZWRJZERhdGEpIHRoaXMubG9hZGVkSWRDaGFuZ2VkPy5uZXh0KHRoaXMubG9hZGVkSWREYXRhKTtcclxuICAgICAgICB9LCA1MCk7XHJcbiAgICAgIHJldHVybiB0aGlzLmxvYWRlZE9ic2VydmFibGU7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG9ic2VydmFibGVQcm9taXNlOiBQcm9taXNlPGFueT4gfCB1bmRlZmluZWQ7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMucmVxdWVzdGVkSWQgIT0gaWQgfHxcclxuICAgICAgdGhpcy50YXJnZXQuX19fY29ubmVjdGlvbklkICE9IHRoaXMucmVxdWVzdGVkSWRDb25uZWN0aW9uSWQgfHxcclxuICAgICAgIXRoaXMubG9hZGVkT2JzZXJ2YWJsZVxyXG4gICAgKSB7XHJcbiAgICAgIG9ic2VydmFibGVQcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRlZE9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZTxUPigob2JzZXJ2ZXI6IE9ic2VydmVyPFQ+KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlZElkQ2hhbmdlZCA9IG9ic2VydmVyO1xyXG4gICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBQcm9taXNlLmFsbChbb2JzZXJ2YWJsZVByb21pc2VdKS50aGVuKCgpID0+IHtcclxuICAgICAgbmV3IFByb21pc2U8dm9pZD4oYXN5bmMgKHJlc29sdmUpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMucmVxdWVzdGVkICYmIHRoaXMubGF6eUxvYWRlZCkge1xyXG4gICAgICAgICAgdGhpcy5sb2FkKCkudGhlbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5kYXRhKSB7XHJcbiAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLmRhdGFNYXAuZ2V0KGlkKTtcclxuICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkZWRJZENoYW5nZWQ/Lm5leHQocmVzKTtcclxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmxvYWRlZElkID09IGlkKSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlZElkQ2hhbmdlZD8ubmV4dCh0aGlzLmxvYWRlZElkRGF0YSBhcyBUKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0QnlJZChpZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgfSkudGhlbigpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5sb2FkZWRPYnNlcnZhYmxlIGFzIE9ic2VydmFibGU8VD47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Rm9yR3JvdXAoZ3JvdXBJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxUW10+IHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5yZXF1ZXN0ZWRHcm91cElkID09IGdyb3VwSWQgJiZcclxuICAgICAgdGhpcy50YXJnZXQuX19fY29ubmVjdGlvbklkID09IHRoaXMucmVxdWVzdGVkR3JvdXBJZENvbm5lY3Rpb25JZCAmJlxyXG4gICAgICB0aGlzLmxvYWRlZEdyb3VwT2JzZXJ2YWJsZSAmJlxyXG4gICAgICB0aGlzLmxvYWRlZEdyb3VwRGF0YVxyXG4gICAgKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmxvYWRlZEdyb3VwRGF0YSlcclxuICAgICAgICAgIHRoaXMubG9hZGVkR3JvdXBDaGFuZ2VkPy5uZXh0KHRoaXMubG9hZGVkR3JvdXBEYXRhKTtcclxuICAgICAgfSwgNTApO1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2FkZWRHcm91cE9ic2VydmFibGU7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG9ic2VydmFibGVQcm9taXNlOiBQcm9taXNlPGFueT4gfCB1bmRlZmluZWQ7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMucmVxdWVzdGVkR3JvdXBJZCAhPSBncm91cElkIHx8XHJcbiAgICAgIHRoaXMudGFyZ2V0Ll9fX2Nvbm5lY3Rpb25JZCAhPSB0aGlzLnJlcXVlc3RlZEdyb3VwSWRDb25uZWN0aW9uSWQgfHxcclxuICAgICAgIXRoaXMubG9hZGVkR3JvdXBPYnNlcnZhYmxlXHJcbiAgICApIHtcclxuICAgICAgb2JzZXJ2YWJsZVByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGVkR3JvdXBPYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGU8VFtdPihcclxuICAgICAgICAgIChvYnNlcnZlcjogT2JzZXJ2ZXI8VFtdPikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRlZEdyb3VwQ2hhbmdlZCA9IG9ic2VydmVyO1xyXG4gICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgUHJvbWlzZS5hbGwoW29ic2VydmFibGVQcm9taXNlXSkudGhlbigoKSA9PiB7XHJcbiAgICAgIG5ldyBQcm9taXNlPHZvaWQ+KGFzeW5jIChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlcXVlc3RlZCAmJiB0aGlzLmxhenlMb2FkZWQpIHtcclxuICAgICAgICAgIHRoaXMubG9hZCgpLnRoZW4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubG9hZGVkR3JvdXBJZCA9PSBncm91cElkICYmIHRoaXMubG9hZGVkR3JvdXBEYXRhKSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlZEdyb3VwQ2hhbmdlZD8ubmV4dCh0aGlzLmxvYWRlZEdyb3VwRGF0YSBhcyBUW10pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnJlcXVlc3RGb3JHcm91cChncm91cElkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICB9KS50aGVuKCk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0aGlzLmxvYWRlZEdyb3VwT2JzZXJ2YWJsZSBhcyBPYnNlcnZhYmxlPFRbXT47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFsbCgpOiBUW10gfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKCF0aGlzLnJlcXVlc3RlZCAmJiB0aGlzLmxhenlMb2FkZWQpIHtcclxuICAgICAgdGhpcy5sb2FkKCkudGhlbigpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVxdWVzdGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGFzeW5jIGxvYWQoY291bnQ/OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLmxhenlMb2FkZWQpIHtcclxuICAgICAgY29uc3QgaGFzQmVlblJlcXVlc3RlZEJlZm9yZSA9IHRoaXMucmVxdWVzdGVkO1xyXG4gICAgICB0aGlzLl9sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgaWYgKCF0aGlzLnJlcXVlc3RlZCkge1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZXF1ZXN0ZWQgPSB0cnVlO1xyXG4gICAgICBhd2FpdCB0aGlzLmNsaWVudC5zZW5kKCdyZXF1ZXN0LicgKyB0aGlzLm1ldGhvZCwge1xyXG4gICAgICAgIGNvdW50OiBoYXNCZWVuUmVxdWVzdGVkQmVmb3JlXHJcbiAgICAgICAgICA/IHRoaXMuZGF0YVxyXG4gICAgICAgICAgICA/IGNvdW50IHx8IHRoaXMuaW5pdGlhbExvYWRpbmdDb3VudFxyXG4gICAgICAgICAgICAgID8gKGNvdW50IHx8ICh0aGlzLmluaXRpYWxMb2FkaW5nQ291bnQgYXMgbnVtYmVyKSkgK1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkZWRMZW5ndGhcclxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxyXG4gICAgICAgICAgOiB0aGlzLnByZXZpb3VzbHlDYWNoZWRDb3VudCB8fCAodGhpcy5pbml0aWFsTG9hZGluZ0NvdW50IGFzIG51bWJlciksXHJcbiAgICAgICAgbG9hZGVkOiB0aGlzLmxvYWRlZExlbmd0aFxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IEVycm9yKFxyXG4gICAgICAgICdBY3RpdmUtQ29ubmVjdDogQ2Fubm90IHJ1biBsb2FkaW5nIHJlcXVlc3QgYXMgdGhpcyBvdXRib3VuZCBpcyBub3QgbGF6eS1sb2FkZWQuJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbG9hZGluZyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgc2V0IGxvYWRpbmcodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2xvYWRpbmcgPSB2YWx1ZTtcclxuICAgIHRoaXMudGFyZ2V0LmxvYWRpbmcuc2V0KHRoaXMubWV0aG9kLCB2YWx1ZSk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgbG9hZGluZygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9sb2FkaW5nO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGxvYWRlZExlbmd0aCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YT8ubGVuZ3RoIHx8IDA7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2xlbmd0aDogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG4gIHB1YmxpYyBnZXQgbGVuZ3RoKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXF1ZXN0ZWRJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSByZXF1ZXN0ZWRJZENvbm5lY3Rpb25JZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBsb2FkZWRPYnNlcnZhYmxlOiBPYnNlcnZhYmxlPFQ+IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBsb2FkZWRJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBsb2FkZWRJZERhdGE6IFQgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGxvYWRlZElkQ2hhbmdlZDogT2JzZXJ2ZXI8VD4gfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIHJlcXVlc3RCeUlkKGlkOiBudW1iZXIpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMucmVxdWVzdGVkSWQgPSBpZDtcclxuICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kKCdyZXF1ZXN0LicgKyB0aGlzLm1ldGhvZCwgeyBpZCB9KSBhcyBQcm9taXNlPGFueT47XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlcXVlc3RlZEdyb3VwSWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgcmVxdWVzdGVkR3JvdXBJZENvbm5lY3Rpb25JZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBsb2FkZWRHcm91cE9ic2VydmFibGU6IE9ic2VydmFibGU8VFtdPiB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgbG9hZGVkR3JvdXBJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBsb2FkZWRHcm91cERhdGE6IFRbXSB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgbG9hZGVkR3JvdXBDaGFuZ2VkOiBPYnNlcnZlcjxUW10+IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSByZXF1ZXN0Rm9yR3JvdXAoZ3JvdXBJZDogbnVtYmVyKTogUHJvbWlzZTxUW10+IHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnJlcXVlc3RlZEdyb3VwSWQgPSBncm91cElkO1xyXG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmQoJ3JlcXVlc3QuJyArIHRoaXMubWV0aG9kLCB7IGdyb3VwSWQgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldERhdGEoZGF0YTogVFtdIHwgeyBhZGRlZDogVFtdIHwgdW5kZWZpbmVkOyBsZW5ndGg6IG51bWJlciB9KSB7XHJcbiAgICB0aGlzLmRhdGEgPSBkYXRhIGFzIFRbXTtcclxuICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5zb3J0QnkpIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5zb3J0KHRoaXMuc29ydEJ5KTtcclxuICAgIHRoaXMuX2xlbmd0aCA9IGRhdGEubGVuZ3RoO1xyXG4gICAgdGhpcy5kYXRhTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgdGhpcy5kYXRhLmZvckVhY2goKGQpID0+IHtcclxuICAgICAgdGhpcy5kYXRhTWFwLnNldChkLmlkLCBkKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzRW1wdHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhID09IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBjb250YWluZWQgZGF0YSBjYW4gYmUgbW9kaWZpZWQgd2l0aGluIHRoZSBjYWxsYmFjayBtZXRob2RcclxuICAgKi9cclxuICBwdWJsaWMgdXBkYXRlKGNhbGxiYWNrOiAoZGF0YTogVFtdKSA9PiB2b2lkKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhKSB7XHJcbiAgICAgIGNvbnN0IHVwZGF0ZUxlbmd0aFZhcmlhYmxlID0gdGhpcy5kYXRhLmxlbmd0aCA9PSB0aGlzLl9sZW5ndGg7XHJcbiAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICBjYWxsYmFjayh0aGlzLmRhdGEpO1xyXG4gICAgICB0aGlzLnNldERhdGEodGhpcy5kYXRhKTtcclxuICAgICAgaWYgKCF1cGRhdGVMZW5ndGhWYXJpYWJsZSkge1xyXG4gICAgICAgIHRoaXMuX2xlbmd0aCA9IGxlbmd0aDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZnRlclNlcnZlclJlY29ubmVjdGVkKCkge1xyXG4gICAgaWYgKHRoaXMucmVxdWVzdGVkICYmIHRoaXMubGF6eUxvYWRlZCkge1xyXG4gICAgICB0aGlzLnJlcXVlc3RlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmxvYWQodGhpcy5sb2FkZWRMZW5ndGgpLnRoZW4oKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmxvYWRlZElkKSB7XHJcbiAgICAgIHRoaXMubG9hZGVkSWREYXRhID0gbnVsbDtcclxuICAgICAgdGhpcy5nZXQodGhpcy5sb2FkZWRJZCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5sb2FkZWRHcm91cElkKSB7XHJcbiAgICAgIHRoaXMubG9hZGVkR3JvdXBEYXRhID0gbnVsbDtcclxuICAgICAgdGhpcy5nZXRGb3JHcm91cCh0aGlzLmxvYWRlZEdyb3VwSWQpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
package/esm2020/public-api.mjs
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Public API Surface of active-connect-ng2
|
|
3
|
-
*/
|
|
4
|
-
export * from './lib/active-connect-ng2.module';
|
|
5
|
-
export * from './lib/websocket';
|
|
6
|
-
export { NgxIndexedDBService } from 'ngx-indexed-db';
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2FjdGl2ZS1jb25uZWN0LW5nMi9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBhY3RpdmUtY29ubmVjdC1uZzJcclxuICovXHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9hY3RpdmUtY29ubmVjdC1uZzIubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvd2Vic29ja2V0JztcclxuZXhwb3J0IHsgTmd4SW5kZXhlZERCU2VydmljZSB9IGZyb20gJ25neC1pbmRleGVkLWRiJztcclxuIl19
|