@discordeno/rest 19.0.0-next.85ea2d9 → 19.0.0-next.87f62d2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +15 -1
  2. package/dist/cjs/index.cjs +25 -0
  3. package/dist/cjs/invalidBucket.cjs +86 -0
  4. package/dist/cjs/manager.cjs +1445 -0
  5. package/dist/cjs/queue.cjs +165 -0
  6. package/dist/cjs/routes.cjs +550 -0
  7. package/dist/cjs/types.cjs +6 -0
  8. package/dist/cjs/typings/routes.cjs +6 -0
  9. package/dist/esm/index.js +8 -0
  10. package/dist/esm/invalidBucket.js +82 -0
  11. package/dist/esm/manager.js +1403 -0
  12. package/dist/esm/queue.js +155 -0
  13. package/dist/esm/routes.js +540 -0
  14. package/dist/esm/types.js +3 -0
  15. package/dist/esm/typings/routes.js +3 -0
  16. package/dist/types/index.d.ts.map +1 -0
  17. package/dist/{invalidBucket.d.ts → types/invalidBucket.d.ts} +5 -0
  18. package/dist/types/invalidBucket.d.ts.map +1 -0
  19. package/dist/types/manager.d.ts.map +1 -0
  20. package/dist/{queue.d.ts → types/queue.d.ts} +12 -1
  21. package/dist/types/queue.d.ts.map +1 -0
  22. package/dist/types/routes.d.ts.map +1 -0
  23. package/dist/{types.d.ts → types/types.d.ts} +449 -110
  24. package/dist/types/types.d.ts.map +1 -0
  25. package/dist/{typings → types/typings}/routes.d.ts +46 -5
  26. package/dist/types/typings/routes.d.ts.map +1 -0
  27. package/package.json +32 -28
  28. package/dist/index.d.ts.map +0 -1
  29. package/dist/index.js +0 -8
  30. package/dist/index.js.map +0 -1
  31. package/dist/invalidBucket.d.ts.map +0 -1
  32. package/dist/invalidBucket.js +0 -82
  33. package/dist/invalidBucket.js.map +0 -1
  34. package/dist/manager.d.ts.map +0 -1
  35. package/dist/manager.js +0 -1102
  36. package/dist/manager.js.map +0 -1
  37. package/dist/queue.d.ts.map +0 -1
  38. package/dist/queue.js +0 -153
  39. package/dist/queue.js.map +0 -1
  40. package/dist/routes.d.ts.map +0 -1
  41. package/dist/routes.js +0 -487
  42. package/dist/routes.js.map +0 -1
  43. package/dist/types.d.ts.map +0 -1
  44. package/dist/types.js +0 -3
  45. package/dist/types.js.map +0 -1
  46. package/dist/typings/routes.d.ts.map +0 -1
  47. package/dist/typings/routes.js +0 -3
  48. package/dist/typings/routes.js.map +0 -1
  49. /package/dist/{index.d.ts → types/index.d.ts} +0 -0
  50. /package/dist/{manager.d.ts → types/manager.d.ts} +0 -0
  51. /package/dist/{routes.d.ts → types/routes.d.ts} +0 -0
@@ -0,0 +1,540 @@
1
+ import { isGetMessagesAfter, isGetMessagesAround, isGetMessagesBefore, isGetMessagesLimit } from '@discordeno/utils';
2
+ export function createRoutes() {
3
+ return {
4
+ webhooks: {
5
+ id: (webhookId)=>{
6
+ return `/webhooks/${webhookId}`;
7
+ },
8
+ message: (webhookId, token, messageId, options)=>{
9
+ let url = `/webhooks/${webhookId}/${token}/messages/${messageId}?`;
10
+ if (options) {
11
+ if (options.threadId) url += `thread_id=${options.threadId}`;
12
+ }
13
+ return url;
14
+ },
15
+ original: (webhookId, token, options)=>{
16
+ let url = `/webhooks/${webhookId}/${token}/messages/@original?`;
17
+ if (options) {
18
+ if (options.threadId) url += `thread_id=${options.threadId}`;
19
+ }
20
+ return url;
21
+ },
22
+ webhook: (webhookId, token, options)=>{
23
+ let url = `/webhooks/${webhookId}/${token}?`;
24
+ if (options) {
25
+ if (options?.wait !== undefined) url += `wait=${options.wait.toString()}`;
26
+ if (options.threadId) url += `thread_id=${options.threadId}`;
27
+ }
28
+ return url;
29
+ }
30
+ },
31
+ // Channel Endpoints
32
+ channels: {
33
+ bulk: (channelId)=>{
34
+ return `/channels/${channelId}/messages/bulk-delete`;
35
+ },
36
+ dm: ()=>{
37
+ return '/users/@me/channels';
38
+ },
39
+ dmRecipient: (channelId, userId)=>{
40
+ return `/channels/${channelId}/recipients/${userId}`;
41
+ },
42
+ pin: (channelId, messageId)=>{
43
+ return `/channels/${channelId}/pins/${messageId}`;
44
+ },
45
+ pins: (channelId)=>{
46
+ return `/channels/${channelId}/pins`;
47
+ },
48
+ reactions: {
49
+ bot: (channelId, messageId, emoji)=>{
50
+ return `/channels/${channelId}/messages/${messageId}/reactions/${encodeURIComponent(emoji)}/@me`;
51
+ },
52
+ user: (channelId, messageId, emoji, userId)=>{
53
+ return `/channels/${channelId}/messages/${messageId}/reactions/${encodeURIComponent(emoji)}/${userId}`;
54
+ },
55
+ all: (channelId, messageId)=>{
56
+ return `/channels/${channelId}/messages/${messageId}/reactions`;
57
+ },
58
+ emoji: (channelId, messageId, emoji, options)=>{
59
+ let url = `/channels/${channelId}/messages/${messageId}/reactions/${encodeURIComponent(emoji)}?`;
60
+ if (options) {
61
+ if (options.type) url += `type=${options.type}`;
62
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
63
+ if (options.after) url += `&after=${options.after}`;
64
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
65
+ if (options.limit) url += `&limit=${options.limit}`;
66
+ }
67
+ return url;
68
+ },
69
+ message: (channelId, messageId, emoji, options)=>{
70
+ let url = `/channels/${channelId}/messages/${messageId}/reactions/${encodeURIComponent(emoji)}?`;
71
+ if (options) {
72
+ if (options.after) url += `after=${options.after}`;
73
+ if (options.limit) url += `&limit=${options.limit}`;
74
+ }
75
+ return url;
76
+ }
77
+ },
78
+ webhooks: (channelId)=>{
79
+ return `/channels/${channelId}/webhooks`;
80
+ },
81
+ channel: (channelId)=>{
82
+ return `/channels/${channelId}`;
83
+ },
84
+ follow: (channelId)=>{
85
+ return `/channels/${channelId}/followers`;
86
+ },
87
+ forum: (channelId)=>{
88
+ return `/channels/${channelId}/threads`;
89
+ },
90
+ invites: (channelId)=>{
91
+ return `/channels/${channelId}/invites`;
92
+ },
93
+ message: (channelId, messageId)=>{
94
+ return `/channels/${channelId}/messages/${messageId}`;
95
+ },
96
+ messages: (channelId, options)=>{
97
+ let url = `/channels/${channelId}/messages?`;
98
+ if (options) {
99
+ if (isGetMessagesAfter(options) && options.after) {
100
+ url += `after=${options.after}`;
101
+ }
102
+ if (isGetMessagesBefore(options) && options.before) {
103
+ url += `&before=${options.before}`;
104
+ }
105
+ if (isGetMessagesAround(options) && options.around) {
106
+ url += `&around=${options.around}`;
107
+ }
108
+ if (isGetMessagesLimit(options) && options.limit) {
109
+ url += `&limit=${options.limit}`;
110
+ }
111
+ }
112
+ return url;
113
+ },
114
+ overwrite: (channelId, overwriteId)=>{
115
+ return `/channels/${channelId}/permissions/${overwriteId}`;
116
+ },
117
+ crosspost: (channelId, messageId)=>{
118
+ return `/channels/${channelId}/messages/${messageId}/crosspost`;
119
+ },
120
+ stages: ()=>{
121
+ return '/stage-instances';
122
+ },
123
+ stage: (channelId)=>{
124
+ return `/stage-instances/${channelId}`;
125
+ },
126
+ // Thread Endpoints
127
+ threads: {
128
+ message: (channelId, messageId)=>{
129
+ return `/channels/${channelId}/messages/${messageId}/threads`;
130
+ },
131
+ all: (channelId)=>{
132
+ return `/channels/${channelId}/threads`;
133
+ },
134
+ active: (guildId)=>{
135
+ return `/guilds/${guildId}/threads/active`;
136
+ },
137
+ members: (channelId)=>{
138
+ return `/channels/${channelId}/thread-members`;
139
+ },
140
+ me: (channelId)=>{
141
+ return `/channels/${channelId}/thread-members/@me`;
142
+ },
143
+ user: (channelId, userId)=>{
144
+ return `/channels/${channelId}/thread-members/${userId}`;
145
+ },
146
+ archived: (channelId)=>{
147
+ return `/channels/${channelId}/threads/archived`;
148
+ },
149
+ public: (channelId, options)=>{
150
+ let url = `/channels/${channelId}/threads/archived/public?`;
151
+ if (options) {
152
+ if (options.before) {
153
+ url += `before=${new Date(options.before).toISOString()}`;
154
+ }
155
+ if (options.limit) url += `&limit=${options.limit}`;
156
+ }
157
+ return url;
158
+ },
159
+ private: (channelId, options)=>{
160
+ let url = `/channels/${channelId}/threads/archived/private?`;
161
+ if (options) {
162
+ if (options.before) {
163
+ url += `before=${new Date(options.before).toISOString()}`;
164
+ }
165
+ if (options.limit) url += `&limit=${options.limit}`;
166
+ }
167
+ return url;
168
+ },
169
+ joined: (channelId, options)=>{
170
+ let url = `/channels/${channelId}/users/@me/threads/archived/private?`;
171
+ if (options) {
172
+ if (options.before) {
173
+ url += `before=${new Date(options.before).toISOString()}`;
174
+ }
175
+ if (options.limit) url += `&limit=${options.limit}`;
176
+ }
177
+ return url;
178
+ }
179
+ },
180
+ typing: (channelId)=>{
181
+ return `/channels/${channelId}/typing`;
182
+ },
183
+ polls: {
184
+ votes: (channelId, messageId, answerId, options)=>{
185
+ let url = `/channels/${channelId}/polls/${messageId}/answers/${answerId}?`;
186
+ if (options) {
187
+ if (options.after) url += `after=${options.after}`;
188
+ if (options.limit) url += `&limit=${options.limit}`;
189
+ }
190
+ return url;
191
+ },
192
+ expire: (channelId, messageId)=>{
193
+ return `/channels/${channelId}/polls/${messageId}/expire`;
194
+ }
195
+ }
196
+ },
197
+ // Guild Endpoints
198
+ guilds: {
199
+ all: ()=>{
200
+ return '/guilds';
201
+ },
202
+ userGuilds: (options)=>{
203
+ let url = '/users/@me/guilds?';
204
+ if (options) {
205
+ if (options.after) url += `after=${options.after}`;
206
+ if (options.before) url += `&before=${options.before}`;
207
+ if (options.limit) url += `&limit=${options.limit}`;
208
+ if (options.withCounts) url += `&with_counts=${options.withCounts}`;
209
+ }
210
+ return url;
211
+ },
212
+ auditlogs: (guildId, options)=>{
213
+ let url = `/guilds/${guildId}/audit-logs?`;
214
+ if (options) {
215
+ if (options.actionType) url += `action_type=${options.actionType}`;
216
+ if (options.before) url += `&before=${options.before}`;
217
+ if (options.after) url += `&after=${options.after}`;
218
+ if (options.limit) url += `&limit=${options.limit}`;
219
+ if (options.userId) url += `&user_id=${options.userId}`;
220
+ }
221
+ return url;
222
+ },
223
+ automod: {
224
+ rule: (guildId, ruleId)=>{
225
+ return `/guilds/${guildId}/auto-moderation/rules/${ruleId}`;
226
+ },
227
+ rules: (guildId)=>{
228
+ return `/guilds/${guildId}/auto-moderation/rules`;
229
+ }
230
+ },
231
+ channels: (guildId)=>{
232
+ return `/guilds/${guildId}/channels`;
233
+ },
234
+ emoji: (guildId, emojiId)=>{
235
+ return `/guilds/${guildId}/emojis/${emojiId}`;
236
+ },
237
+ emojis: (guildId)=>{
238
+ return `/guilds/${guildId}/emojis`;
239
+ },
240
+ events: {
241
+ events: (guildId, withUserCount)=>{
242
+ let url = `/guilds/${guildId}/scheduled-events?`;
243
+ if (withUserCount !== undefined) {
244
+ url += `with_user_count=${withUserCount.toString()}`;
245
+ }
246
+ return url;
247
+ },
248
+ event: (guildId, eventId, withUserCount)=>{
249
+ let url = `/guilds/${guildId}/scheduled-events/${eventId}`;
250
+ if (withUserCount !== undefined) {
251
+ url += `with_user_count=${withUserCount.toString()}`;
252
+ }
253
+ return url;
254
+ },
255
+ users: (guildId, eventId, options)=>{
256
+ let url = `/guilds/${guildId}/scheduled-events/${eventId}/users?`;
257
+ if (options) {
258
+ if (options.limit !== undefined) url += `limit=${options.limit}`;
259
+ if (options.withMember !== undefined) {
260
+ url += `&with_member=${options.withMember.toString()}`;
261
+ }
262
+ if (options.after !== undefined) url += `&after=${options.after}`;
263
+ if (options.before !== undefined) url += `&before=${options.before}`;
264
+ }
265
+ return url;
266
+ }
267
+ },
268
+ guild (guildId, withCounts) {
269
+ let url = `/guilds/${guildId}?`;
270
+ if (withCounts !== undefined) {
271
+ url += `with_counts=${withCounts.toString()}`;
272
+ }
273
+ return url;
274
+ },
275
+ integration (guildId, integrationId) {
276
+ return `/guilds/${guildId}/integrations/${integrationId}`;
277
+ },
278
+ integrations: (guildId)=>{
279
+ return `/guilds/${guildId}/integrations?include_applications=true`;
280
+ },
281
+ invite (inviteCode, options) {
282
+ let url = `/invites/${inviteCode}?`;
283
+ if (options) {
284
+ if (options.withCounts !== undefined) {
285
+ url += `with_counts=${options.withCounts.toString()}`;
286
+ }
287
+ if (options.withExpiration !== undefined) {
288
+ url += `&with_expiration=${options.withExpiration.toString()}`;
289
+ }
290
+ if (options.scheduledEventId) {
291
+ url += `&guild_scheduled_event_id=${options.scheduledEventId}`;
292
+ }
293
+ }
294
+ return url;
295
+ },
296
+ invites: (guildId)=>{
297
+ return `/guilds/${guildId}/invites`;
298
+ },
299
+ leave: (guildId)=>{
300
+ return `/users/@me/guilds/${guildId}`;
301
+ },
302
+ members: {
303
+ ban: (guildId, userId)=>{
304
+ return `/guilds/${guildId}/bans/${userId}`;
305
+ },
306
+ bans: (guildId, options)=>{
307
+ let url = `/guilds/${guildId}/bans?`;
308
+ if (options) {
309
+ if (options.limit) url += `limit=${options.limit}`;
310
+ if (options.after) url += `&after=${options.after}`;
311
+ if (options.before) url += `&before=${options.before}`;
312
+ }
313
+ return url;
314
+ },
315
+ bulkBan: (guildId)=>{
316
+ return `/guilds/${guildId}/bulk-ban`;
317
+ },
318
+ bot: (guildId)=>{
319
+ return `/guilds/${guildId}/members/@me`;
320
+ },
321
+ member: (guildId, userId)=>{
322
+ return `/guilds/${guildId}/members/${userId}`;
323
+ },
324
+ currentMember: (guildId)=>{
325
+ return `/users/@me/guilds/${guildId}/member`;
326
+ },
327
+ members: (guildId, options)=>{
328
+ let url = `/guilds/${guildId}/members?`;
329
+ if (options !== undefined) {
330
+ if (options.limit) url += `limit=${options.limit}`;
331
+ if (options.after) url += `&after=${options.after}`;
332
+ }
333
+ return url;
334
+ },
335
+ search: (guildId, query, options)=>{
336
+ let url = `/guilds/${guildId}/members/search?query=${encodeURIComponent(query)}`;
337
+ if (options) {
338
+ if (options.limit !== undefined) url += `&limit=${options.limit}`;
339
+ }
340
+ return url;
341
+ },
342
+ prune: (guildId, options)=>{
343
+ let url = `/guilds/${guildId}/prune?`;
344
+ if (options) {
345
+ if (options.days) url += `days=${options.days}`;
346
+ if (Array.isArray(options.includeRoles)) {
347
+ url += `&include_roles=${options.includeRoles.join(',')}`;
348
+ } else if (options.includeRoles) {
349
+ url += `&include_roles=${options.includeRoles}`;
350
+ }
351
+ }
352
+ return url;
353
+ }
354
+ },
355
+ mfa: (guildId)=>`/guilds/${guildId}/mfa`,
356
+ preview: (guildId)=>{
357
+ return `/guilds/${guildId}/preview`;
358
+ },
359
+ prune: (guildId, options)=>{
360
+ let url = `/guilds/${guildId}/prune?`;
361
+ if (options) {
362
+ if (options.days) url += `days=${options.days}`;
363
+ if (Array.isArray(options.includeRoles)) {
364
+ url += `&include_roles=${options.includeRoles.join(',')}`;
365
+ } else if (options.includeRoles) {
366
+ url += `&include_roles=${options.includeRoles}`;
367
+ }
368
+ }
369
+ return url;
370
+ },
371
+ roles: {
372
+ one: (guildId, roleId)=>{
373
+ return `/guilds/${guildId}/roles/${roleId}`;
374
+ },
375
+ all: (guildId)=>{
376
+ return `/guilds/${guildId}/roles`;
377
+ },
378
+ member: (guildId, memberId, roleId)=>{
379
+ return `/guilds/${guildId}/members/${memberId}/roles/${roleId}`;
380
+ }
381
+ },
382
+ stickers: (guildId)=>{
383
+ return `/guilds/${guildId}/stickers`;
384
+ },
385
+ sticker: (guildId, stickerId)=>{
386
+ return `/guilds/${guildId}/stickers/${stickerId}`;
387
+ },
388
+ voice: (guildId, userId)=>{
389
+ return `/guilds/${guildId}/voice-states/${userId ?? '@me'}`;
390
+ },
391
+ templates: {
392
+ code: (code)=>{
393
+ return `/guilds/templates/${code}`;
394
+ },
395
+ guild: (guildId, code)=>{
396
+ return `/guilds/${guildId}/templates/${code}`;
397
+ },
398
+ all: (guildId)=>{
399
+ return `/guilds/${guildId}/templates`;
400
+ }
401
+ },
402
+ vanity: (guildId)=>{
403
+ return `/guilds/${guildId}/vanity-url`;
404
+ },
405
+ regions: (guildId)=>{
406
+ return `/guilds/${guildId}/regions`;
407
+ },
408
+ webhooks: (guildId)=>{
409
+ return `/guilds/${guildId}/webhooks`;
410
+ },
411
+ welcome: (guildId)=>{
412
+ return `/guilds/${guildId}/welcome-screen`;
413
+ },
414
+ widget: (guildId)=>{
415
+ return `/guilds/${guildId}/widget`;
416
+ },
417
+ widgetJson: (guildId)=>{
418
+ return `/guilds/${guildId}/widget.json`;
419
+ },
420
+ onboarding: (guildId)=>{
421
+ return `/guilds/${guildId}/onboarding`;
422
+ }
423
+ },
424
+ sticker: (stickerId)=>{
425
+ return `/stickers/${stickerId}`;
426
+ },
427
+ regions: ()=>{
428
+ return '/voice/regions';
429
+ },
430
+ // Interaction Endpoints
431
+ interactions: {
432
+ commands: {
433
+ // Application Endpoints
434
+ commands: (applicationId)=>{
435
+ return `/applications/${applicationId}/commands`;
436
+ },
437
+ guilds: {
438
+ all (applicationId, guildId) {
439
+ return `/applications/${applicationId}/guilds/${guildId}/commands`;
440
+ },
441
+ one (applicationId, guildId, commandId, withLocalizations) {
442
+ let url = `/applications/${applicationId}/guilds/${guildId}/commands/${commandId}?`;
443
+ if (withLocalizations !== undefined) {
444
+ url += `with_localizations=${withLocalizations.toString()}`;
445
+ }
446
+ return url;
447
+ }
448
+ },
449
+ permissions: (applicationId, guildId)=>{
450
+ return `/applications/${applicationId}/guilds/${guildId}/commands/permissions`;
451
+ },
452
+ permission: (applicationId, guildId, commandId)=>{
453
+ return `/applications/${applicationId}/guilds/${guildId}/commands/${commandId}/permissions`;
454
+ },
455
+ command: (applicationId, commandId, withLocalizations)=>{
456
+ let url = `/applications/${applicationId}/commands/${commandId}?`;
457
+ if (withLocalizations !== undefined) {
458
+ url += `withLocalizations=${withLocalizations.toString()}`;
459
+ }
460
+ return url;
461
+ }
462
+ },
463
+ responses: {
464
+ // Interaction Endpoints
465
+ callback: (interactionId, token)=>{
466
+ return `/interactions/${interactionId}/${token}/callback`;
467
+ },
468
+ original: (interactionId, token)=>{
469
+ return `/webhooks/${interactionId}/${token}/messages/@original`;
470
+ },
471
+ message: (applicationId, token, messageId)=>{
472
+ return `/webhooks/${applicationId}/${token}/messages/${messageId}`;
473
+ }
474
+ }
475
+ },
476
+ // OAuth2 endpoints
477
+ oauth2: {
478
+ tokenExchange: ()=>{
479
+ return '/oauth2/token';
480
+ },
481
+ tokenRevoke: ()=>{
482
+ return '/oauth2/token/revoke';
483
+ },
484
+ currentAuthorization: ()=>{
485
+ return '/oauth2/@me';
486
+ },
487
+ application: ()=>{
488
+ return '/oauth2/applications/@me';
489
+ },
490
+ connections: ()=>{
491
+ return '/users/@me/connections';
492
+ },
493
+ roleConnections: (applicationId)=>{
494
+ return `/users/@me/applications/${applicationId}/role-connection`;
495
+ }
496
+ },
497
+ monetization: {
498
+ entitlements: (applicationId, options)=>{
499
+ let url = `/applications/${applicationId}/entitlements?`;
500
+ if (options) {
501
+ if (options.after) url += `after=${options.after}`;
502
+ if (options.before) url += `&before=${options.before}`;
503
+ if (options.excludeEnded) url += `&exclude_ended=${options.excludeEnded}`;
504
+ if (options.guildId) url += `&guild_id=${options.guildId}`;
505
+ if (options.limit) url += `&limit=${options.limit}`;
506
+ if (options.skuIds) url += `&sku_ids=${options.skuIds.join(',')}`;
507
+ if (options.userId) url += `&user_id=${options.userId}`;
508
+ }
509
+ return url;
510
+ },
511
+ entitlement: (applicationId, entitlementId)=>{
512
+ return `/applications/${applicationId}/entitlements/${entitlementId}`;
513
+ },
514
+ consumeEntitlement: (applicationId, entitlementId)=>{
515
+ return `/applications/${applicationId}/entitlements/${entitlementId}/consume`;
516
+ },
517
+ skus: (applicationId)=>{
518
+ return `/applications/${applicationId}/skus`;
519
+ }
520
+ },
521
+ // User endpoints
522
+ user (userId) {
523
+ return `/users/${userId}`;
524
+ },
525
+ application () {
526
+ return '/applications/@me';
527
+ },
528
+ currentUser () {
529
+ return '/users/@me';
530
+ },
531
+ gatewayBot () {
532
+ return '/gateway/bot';
533
+ },
534
+ stickerPacks () {
535
+ return '/sticker-packs';
536
+ }
537
+ };
538
+ }
539
+
540
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yb3V0ZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBHZXRNZXNzYWdlc09wdGlvbnMsIEdldFNjaGVkdWxlZEV2ZW50VXNlcnMgfSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7IGlzR2V0TWVzc2FnZXNBZnRlciwgaXNHZXRNZXNzYWdlc0Fyb3VuZCwgaXNHZXRNZXNzYWdlc0JlZm9yZSwgaXNHZXRNZXNzYWdlc0xpbWl0IH0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnXG5pbXBvcnQgdHlwZSB7IFJlc3RSb3V0ZXMgfSBmcm9tICcuL3R5cGluZ3Mvcm91dGVzLmpzJ1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUm91dGVzKCk6IFJlc3RSb3V0ZXMge1xuICByZXR1cm4ge1xuICAgIHdlYmhvb2tzOiB7XG4gICAgICBpZDogKHdlYmhvb2tJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC93ZWJob29rcy8ke3dlYmhvb2tJZH1gXG4gICAgICB9LFxuICAgICAgbWVzc2FnZTogKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICBsZXQgdXJsID0gYC93ZWJob29rcy8ke3dlYmhvb2tJZH0vJHt0b2tlbn0vbWVzc2FnZXMvJHttZXNzYWdlSWR9P2BcblxuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgIGlmIChvcHRpb25zLnRocmVhZElkKSB1cmwgKz0gYHRocmVhZF9pZD0ke29wdGlvbnMudGhyZWFkSWR9YFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfSxcbiAgICAgIG9yaWdpbmFsOiAod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykgPT4ge1xuICAgICAgICBsZXQgdXJsID0gYC93ZWJob29rcy8ke3dlYmhvb2tJZH0vJHt0b2tlbn0vbWVzc2FnZXMvQG9yaWdpbmFsP2BcblxuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgIGlmIChvcHRpb25zLnRocmVhZElkKSB1cmwgKz0gYHRocmVhZF9pZD0ke29wdGlvbnMudGhyZWFkSWR9YFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfSxcbiAgICAgIHdlYmhvb2s6ICh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSA9PiB7XG4gICAgICAgIGxldCB1cmwgPSBgL3dlYmhvb2tzLyR7d2ViaG9va0lkfS8ke3Rva2VufT9gXG5cbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucz8ud2FpdCAhPT0gdW5kZWZpbmVkKSB1cmwgKz0gYHdhaXQ9JHtvcHRpb25zLndhaXQudG9TdHJpbmcoKX1gXG4gICAgICAgICAgaWYgKG9wdGlvbnMudGhyZWFkSWQpIHVybCArPSBgdGhyZWFkX2lkPSR7b3B0aW9ucy50aHJlYWRJZH1gXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXJsXG4gICAgICB9LFxuICAgIH0sXG5cbiAgICAvLyBDaGFubmVsIEVuZHBvaW50c1xuICAgIGNoYW5uZWxzOiB7XG4gICAgICBidWxrOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9tZXNzYWdlcy9idWxrLWRlbGV0ZWBcbiAgICAgIH0sXG4gICAgICBkbTogKCkgPT4ge1xuICAgICAgICByZXR1cm4gJy91c2Vycy9AbWUvY2hhbm5lbHMnXG4gICAgICB9LFxuICAgICAgZG1SZWNpcGllbnQ6IChjaGFubmVsSWQsIHVzZXJJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vcmVjaXBpZW50cy8ke3VzZXJJZH1gXG4gICAgICB9LFxuICAgICAgcGluOiAoY2hhbm5lbElkLCBtZXNzYWdlSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3BpbnMvJHttZXNzYWdlSWR9YFxuICAgICAgfSxcbiAgICAgIHBpbnM6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3BpbnNgXG4gICAgICB9LFxuICAgICAgcmVhY3Rpb25zOiB7XG4gICAgICAgIGJvdDogKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBlbW9qaSkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9tZXNzYWdlcy8ke21lc3NhZ2VJZH0vcmVhY3Rpb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGVtb2ppKX0vQG1lYFxuICAgICAgICB9LFxuICAgICAgICB1c2VyOiAoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGVtb2ppLCB1c2VySWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vbWVzc2FnZXMvJHttZXNzYWdlSWR9L3JlYWN0aW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChlbW9qaSl9LyR7dXNlcklkfWBcbiAgICAgICAgfSxcbiAgICAgICAgYWxsOiAoY2hhbm5lbElkLCBtZXNzYWdlSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vbWVzc2FnZXMvJHttZXNzYWdlSWR9L3JlYWN0aW9uc2BcbiAgICAgICAgfSxcbiAgICAgICAgZW1vamk6IChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgZW1vamksIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICBsZXQgdXJsID0gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vbWVzc2FnZXMvJHttZXNzYWdlSWR9L3JlYWN0aW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChlbW9qaSl9P2BcblxuICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy50eXBlKSB1cmwgKz0gYHR5cGU9JHtvcHRpb25zLnR5cGV9YFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXIpIHVybCArPSBgJmFmdGVyPSR7b3B0aW9ucy5hZnRlcn1gXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCkgdXJsICs9IGAmbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgIH0sXG4gICAgICAgIG1lc3NhZ2U6IChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgZW1vamksIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICBsZXQgdXJsID0gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vbWVzc2FnZXMvJHttZXNzYWdlSWR9L3JlYWN0aW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChlbW9qaSl9P2BcblxuICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5hZnRlcikgdXJsICs9IGBhZnRlcj0ke29wdGlvbnMuYWZ0ZXJ9YFxuICAgICAgICAgICAgaWYgKG9wdGlvbnMubGltaXQpIHVybCArPSBgJmxpbWl0PSR7b3B0aW9ucy5saW1pdH1gXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHdlYmhvb2tzOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS93ZWJob29rc2BcbiAgICAgIH0sXG5cbiAgICAgIGNoYW5uZWw6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9YFxuICAgICAgfSxcblxuICAgICAgZm9sbG93OiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9mb2xsb3dlcnNgXG4gICAgICB9LFxuXG4gICAgICBmb3J1bTogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vdGhyZWFkc2BcbiAgICAgIH0sXG5cbiAgICAgIGludml0ZXM6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L2ludml0ZXNgXG4gICAgICB9LFxuXG4gICAgICBtZXNzYWdlOiAoY2hhbm5lbElkLCBtZXNzYWdlSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L21lc3NhZ2VzLyR7bWVzc2FnZUlkfWBcbiAgICAgIH0sXG5cbiAgICAgIG1lc3NhZ2VzOiAoY2hhbm5lbElkLCBvcHRpb25zPzogR2V0TWVzc2FnZXNPcHRpb25zKSA9PiB7XG4gICAgICAgIGxldCB1cmwgPSBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9tZXNzYWdlcz9gXG5cbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAoaXNHZXRNZXNzYWdlc0FmdGVyKG9wdGlvbnMpICYmIG9wdGlvbnMuYWZ0ZXIpIHtcbiAgICAgICAgICAgIHVybCArPSBgYWZ0ZXI9JHtvcHRpb25zLmFmdGVyfWBcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzR2V0TWVzc2FnZXNCZWZvcmUob3B0aW9ucykgJiYgb3B0aW9ucy5iZWZvcmUpIHtcbiAgICAgICAgICAgIHVybCArPSBgJmJlZm9yZT0ke29wdGlvbnMuYmVmb3JlfWBcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzR2V0TWVzc2FnZXNBcm91bmQob3B0aW9ucykgJiYgb3B0aW9ucy5hcm91bmQpIHtcbiAgICAgICAgICAgIHVybCArPSBgJmFyb3VuZD0ke29wdGlvbnMuYXJvdW5kfWBcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzR2V0TWVzc2FnZXNMaW1pdChvcHRpb25zKSAmJiBvcHRpb25zLmxpbWl0KSB7XG4gICAgICAgICAgICB1cmwgKz0gYCZsaW1pdD0ke29wdGlvbnMubGltaXR9YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cmxcbiAgICAgIH0sXG5cbiAgICAgIG92ZXJ3cml0ZTogKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3Blcm1pc3Npb25zLyR7b3ZlcndyaXRlSWR9YFxuICAgICAgfSxcblxuICAgICAgY3Jvc3Nwb3N0OiAoY2hhbm5lbElkLCBtZXNzYWdlSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L21lc3NhZ2VzLyR7bWVzc2FnZUlkfS9jcm9zc3Bvc3RgXG4gICAgICB9LFxuXG4gICAgICBzdGFnZXM6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuICcvc3RhZ2UtaW5zdGFuY2VzJ1xuICAgICAgfSxcblxuICAgICAgc3RhZ2U6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvc3RhZ2UtaW5zdGFuY2VzLyR7Y2hhbm5lbElkfWBcbiAgICAgIH0sXG5cbiAgICAgIC8vIFRocmVhZCBFbmRwb2ludHNcbiAgICAgIHRocmVhZHM6IHtcbiAgICAgICAgbWVzc2FnZTogKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L21lc3NhZ2VzLyR7bWVzc2FnZUlkfS90aHJlYWRzYFxuICAgICAgICB9LFxuICAgICAgICBhbGw6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vdGhyZWFkc2BcbiAgICAgICAgfSxcbiAgICAgICAgYWN0aXZlOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L3RocmVhZHMvYWN0aXZlYFxuICAgICAgICB9LFxuICAgICAgICBtZW1iZXJzOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3RocmVhZC1tZW1iZXJzYFxuICAgICAgICB9LFxuICAgICAgICBtZTogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS90aHJlYWQtbWVtYmVycy9AbWVgXG4gICAgICAgIH0sXG4gICAgICAgIHVzZXI6IChjaGFubmVsSWQsIHVzZXJJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS90aHJlYWQtbWVtYmVycy8ke3VzZXJJZH1gXG4gICAgICAgIH0sXG4gICAgICAgIGFyY2hpdmVkOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3RocmVhZHMvYXJjaGl2ZWRgXG4gICAgICAgIH0sXG4gICAgICAgIHB1YmxpYzogKGNoYW5uZWxJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgIGxldCB1cmwgPSBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS90aHJlYWRzL2FyY2hpdmVkL3B1YmxpYz9gXG5cbiAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYmVmb3JlKSB7XG4gICAgICAgICAgICAgIHVybCArPSBgYmVmb3JlPSR7bmV3IERhdGUob3B0aW9ucy5iZWZvcmUpLnRvSVNPU3RyaW5nKCl9YFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMubGltaXQpIHVybCArPSBgJmxpbWl0PSR7b3B0aW9ucy5saW1pdH1gXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICB9LFxuICAgICAgICBwcml2YXRlOiAoY2hhbm5lbElkLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3RocmVhZHMvYXJjaGl2ZWQvcHJpdmF0ZT9gXG5cbiAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYmVmb3JlKSB7XG4gICAgICAgICAgICAgIHVybCArPSBgYmVmb3JlPSR7bmV3IERhdGUob3B0aW9ucy5iZWZvcmUpLnRvSVNPU3RyaW5nKCl9YFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMubGltaXQpIHVybCArPSBgJmxpbWl0PSR7b3B0aW9ucy5saW1pdH1gXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICB9LFxuICAgICAgICBqb2luZWQ6IChjaGFubmVsSWQsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICBsZXQgdXJsID0gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vdXNlcnMvQG1lL3RocmVhZHMvYXJjaGl2ZWQvcHJpdmF0ZT9gXG5cbiAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYmVmb3JlKSB7XG4gICAgICAgICAgICAgIHVybCArPSBgYmVmb3JlPSR7bmV3IERhdGUob3B0aW9ucy5iZWZvcmUpLnRvSVNPU3RyaW5nKCl9YFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMubGltaXQpIHVybCArPSBgJmxpbWl0PSR7b3B0aW9ucy5saW1pdH1gXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICB9LFxuICAgICAgfSxcblxuICAgICAgdHlwaW5nOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS90eXBpbmdgXG4gICAgICB9LFxuXG4gICAgICBwb2xsczoge1xuICAgICAgICB2b3RlczogKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBhbnN3ZXJJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgIGxldCB1cmwgPSBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9wb2xscy8ke21lc3NhZ2VJZH0vYW5zd2Vycy8ke2Fuc3dlcklkfT9gXG5cbiAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXIpIHVybCArPSBgYWZ0ZXI9JHtvcHRpb25zLmFmdGVyfWBcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0KSB1cmwgKz0gYCZsaW1pdD0ke29wdGlvbnMubGltaXR9YFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgfSxcbiAgICAgICAgZXhwaXJlOiAoY2hhbm5lbElkLCBtZXNzYWdlSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vcG9sbHMvJHttZXNzYWdlSWR9L2V4cGlyZWBcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIC8vIEd1aWxkIEVuZHBvaW50c1xuICAgIGd1aWxkczoge1xuICAgICAgYWxsOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiAnL2d1aWxkcydcbiAgICAgIH0sXG4gICAgICB1c2VyR3VpbGRzOiAob3B0aW9ucykgPT4ge1xuICAgICAgICBsZXQgdXJsID0gJy91c2Vycy9AbWUvZ3VpbGRzPydcblxuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgIGlmIChvcHRpb25zLmFmdGVyKSB1cmwgKz0gYGFmdGVyPSR7b3B0aW9ucy5hZnRlcn1gXG4gICAgICAgICAgaWYgKG9wdGlvbnMuYmVmb3JlKSB1cmwgKz0gYCZiZWZvcmU9JHtvcHRpb25zLmJlZm9yZX1gXG4gICAgICAgICAgaWYgKG9wdGlvbnMubGltaXQpIHVybCArPSBgJmxpbWl0PSR7b3B0aW9ucy5saW1pdH1gXG4gICAgICAgICAgaWYgKG9wdGlvbnMud2l0aENvdW50cykgdXJsICs9IGAmd2l0aF9jb3VudHM9JHtvcHRpb25zLndpdGhDb3VudHN9YFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfSxcbiAgICAgIGF1ZGl0bG9nczogKGd1aWxkSWQsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgbGV0IHVybCA9IGAvZ3VpbGRzLyR7Z3VpbGRJZH0vYXVkaXQtbG9ncz9gXG5cbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5hY3Rpb25UeXBlKSB1cmwgKz0gYGFjdGlvbl90eXBlPSR7b3B0aW9ucy5hY3Rpb25UeXBlfWBcbiAgICAgICAgICBpZiAob3B0aW9ucy5iZWZvcmUpIHVybCArPSBgJmJlZm9yZT0ke29wdGlvbnMuYmVmb3JlfWBcbiAgICAgICAgICBpZiAob3B0aW9ucy5hZnRlcikgdXJsICs9IGAmYWZ0ZXI9JHtvcHRpb25zLmFmdGVyfWBcbiAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCkgdXJsICs9IGAmbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICBpZiAob3B0aW9ucy51c2VySWQpIHVybCArPSBgJnVzZXJfaWQ9JHtvcHRpb25zLnVzZXJJZH1gXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXJsXG4gICAgICB9LFxuICAgICAgYXV0b21vZDoge1xuICAgICAgICBydWxlOiAoZ3VpbGRJZCwgcnVsZUlkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vYXV0by1tb2RlcmF0aW9uL3J1bGVzLyR7cnVsZUlkfWBcbiAgICAgICAgfSxcbiAgICAgICAgcnVsZXM6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vYXV0by1tb2RlcmF0aW9uL3J1bGVzYFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGNoYW5uZWxzOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9jaGFubmVsc2BcbiAgICAgIH0sXG4gICAgICBlbW9qaTogKGd1aWxkSWQsIGVtb2ppSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vZW1vamlzLyR7ZW1vamlJZH1gXG4gICAgICB9LFxuICAgICAgZW1vamlzOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9lbW9qaXNgXG4gICAgICB9LFxuICAgICAgZXZlbnRzOiB7XG4gICAgICAgIGV2ZW50czogKGd1aWxkSWQsIHdpdGhVc2VyQ291bnQ/OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvZ3VpbGRzLyR7Z3VpbGRJZH0vc2NoZWR1bGVkLWV2ZW50cz9gXG5cbiAgICAgICAgICBpZiAod2l0aFVzZXJDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB1cmwgKz0gYHdpdGhfdXNlcl9jb3VudD0ke3dpdGhVc2VyQ291bnQudG9TdHJpbmcoKX1gXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgfSxcbiAgICAgICAgZXZlbnQ6IChndWlsZElkLCBldmVudElkLCB3aXRoVXNlckNvdW50PzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIGxldCB1cmwgPSBgL2d1aWxkcy8ke2d1aWxkSWR9L3NjaGVkdWxlZC1ldmVudHMvJHtldmVudElkfWBcblxuICAgICAgICAgIGlmICh3aXRoVXNlckNvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHVybCArPSBgd2l0aF91c2VyX2NvdW50PSR7d2l0aFVzZXJDb3VudC50b1N0cmluZygpfWBcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgIH0sXG4gICAgICAgIHVzZXJzOiAoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucz86IEdldFNjaGVkdWxlZEV2ZW50VXNlcnMpID0+IHtcbiAgICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtndWlsZElkfS9zY2hlZHVsZWQtZXZlbnRzLyR7ZXZlbnRJZH0vdXNlcnM/YFxuXG4gICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0ICE9PSB1bmRlZmluZWQpIHVybCArPSBgbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICAgIGlmIChvcHRpb25zLndpdGhNZW1iZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB1cmwgKz0gYCZ3aXRoX21lbWJlcj0ke29wdGlvbnMud2l0aE1lbWJlci50b1N0cmluZygpfWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zLmFmdGVyICE9PSB1bmRlZmluZWQpIHVybCArPSBgJmFmdGVyPSR7b3B0aW9ucy5hZnRlcn1gXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5iZWZvcmUgIT09IHVuZGVmaW5lZCkgdXJsICs9IGAmYmVmb3JlPSR7b3B0aW9ucy5iZWZvcmV9YFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBndWlsZChndWlsZElkLCB3aXRoQ291bnRzKSB7XG4gICAgICAgIGxldCB1cmwgPSBgL2d1aWxkcy8ke2d1aWxkSWR9P2BcblxuICAgICAgICBpZiAod2l0aENvdW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdXJsICs9IGB3aXRoX2NvdW50cz0ke3dpdGhDb3VudHMudG9TdHJpbmcoKX1gXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXJsXG4gICAgICB9LFxuICAgICAgaW50ZWdyYXRpb24oZ3VpbGRJZCwgaW50ZWdyYXRpb25JZCkge1xuICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9pbnRlZ3JhdGlvbnMvJHtpbnRlZ3JhdGlvbklkfWBcbiAgICAgIH0sXG4gICAgICBpbnRlZ3JhdGlvbnM6IChndWlsZElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L2ludGVncmF0aW9ucz9pbmNsdWRlX2FwcGxpY2F0aW9ucz10cnVlYFxuICAgICAgfSxcbiAgICAgIGludml0ZShpbnZpdGVDb2RlLCBvcHRpb25zKSB7XG4gICAgICAgIGxldCB1cmwgPSBgL2ludml0ZXMvJHtpbnZpdGVDb2RlfT9gXG5cbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy53aXRoQ291bnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHVybCArPSBgd2l0aF9jb3VudHM9JHtvcHRpb25zLndpdGhDb3VudHMudG9TdHJpbmcoKX1gXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRpb25zLndpdGhFeHBpcmF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHVybCArPSBgJndpdGhfZXhwaXJhdGlvbj0ke29wdGlvbnMud2l0aEV4cGlyYXRpb24udG9TdHJpbmcoKX1gXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRpb25zLnNjaGVkdWxlZEV2ZW50SWQpIHtcbiAgICAgICAgICAgIHVybCArPSBgJmd1aWxkX3NjaGVkdWxlZF9ldmVudF9pZD0ke29wdGlvbnMuc2NoZWR1bGVkRXZlbnRJZH1gXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfSxcbiAgICAgIGludml0ZXM6IChndWlsZElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L2ludml0ZXNgXG4gICAgICB9LFxuICAgICAgbGVhdmU6IChndWlsZElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL3VzZXJzL0BtZS9ndWlsZHMvJHtndWlsZElkfWBcbiAgICAgIH0sXG4gICAgICBtZW1iZXJzOiB7XG4gICAgICAgIGJhbjogKGd1aWxkSWQsIHVzZXJJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L2JhbnMvJHt1c2VySWR9YFxuICAgICAgICB9LFxuICAgICAgICBiYW5zOiAoZ3VpbGRJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgIGxldCB1cmwgPSBgL2d1aWxkcy8ke2d1aWxkSWR9L2JhbnM/YFxuXG4gICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0KSB1cmwgKz0gYGxpbWl0PSR7b3B0aW9ucy5saW1pdH1gXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5hZnRlcikgdXJsICs9IGAmYWZ0ZXI9JHtvcHRpb25zLmFmdGVyfWBcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmJlZm9yZSkgdXJsICs9IGAmYmVmb3JlPSR7b3B0aW9ucy5iZWZvcmV9YFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgfSxcbiAgICAgICAgYnVsa0JhbjogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9idWxrLWJhbmBcbiAgICAgICAgfSxcbiAgICAgICAgYm90OiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L21lbWJlcnMvQG1lYFxuICAgICAgICB9LFxuICAgICAgICBtZW1iZXI6IChndWlsZElkLCB1c2VySWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9tZW1iZXJzLyR7dXNlcklkfWBcbiAgICAgICAgfSxcbiAgICAgICAgY3VycmVudE1lbWJlcjogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC91c2Vycy9AbWUvZ3VpbGRzLyR7Z3VpbGRJZH0vbWVtYmVyYFxuICAgICAgICB9LFxuICAgICAgICBtZW1iZXJzOiAoZ3VpbGRJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgIGxldCB1cmwgPSBgL2d1aWxkcy8ke2d1aWxkSWR9L21lbWJlcnM/YFxuXG4gICAgICAgICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMubGltaXQpIHVybCArPSBgbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmFmdGVyKSB1cmwgKz0gYCZhZnRlcj0ke29wdGlvbnMuYWZ0ZXJ9YFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgfSxcbiAgICAgICAgc2VhcmNoOiAoZ3VpbGRJZCwgcXVlcnksIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtndWlsZElkfS9tZW1iZXJzL3NlYXJjaD9xdWVyeT0ke2VuY29kZVVSSUNvbXBvbmVudChxdWVyeSl9YFxuXG4gICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0ICE9PSB1bmRlZmluZWQpIHVybCArPSBgJmxpbWl0PSR7b3B0aW9ucy5saW1pdH1gXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICB9LFxuICAgICAgICBwcnVuZTogKGd1aWxkSWQsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtndWlsZElkfS9wcnVuZT9gXG5cbiAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGF5cykgdXJsICs9IGBkYXlzPSR7b3B0aW9ucy5kYXlzfWBcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMuaW5jbHVkZVJvbGVzKSkge1xuICAgICAgICAgICAgICB1cmwgKz0gYCZpbmNsdWRlX3JvbGVzPSR7b3B0aW9ucy5pbmNsdWRlUm9sZXMuam9pbignLCcpfWBcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5pbmNsdWRlUm9sZXMpIHtcbiAgICAgICAgICAgICAgdXJsICs9IGAmaW5jbHVkZV9yb2xlcz0ke29wdGlvbnMuaW5jbHVkZVJvbGVzfWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgbWZhOiAoZ3VpbGRJZCkgPT4gYC9ndWlsZHMvJHtndWlsZElkfS9tZmFgLFxuICAgICAgcHJldmlldzogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vcHJldmlld2BcbiAgICAgIH0sXG4gICAgICBwcnVuZTogKGd1aWxkSWQsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgbGV0IHVybCA9IGAvZ3VpbGRzLyR7Z3VpbGRJZH0vcHJ1bmU/YFxuXG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMuZGF5cykgdXJsICs9IGBkYXlzPSR7b3B0aW9ucy5kYXlzfWBcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLmluY2x1ZGVSb2xlcykpIHtcbiAgICAgICAgICAgIHVybCArPSBgJmluY2x1ZGVfcm9sZXM9JHtvcHRpb25zLmluY2x1ZGVSb2xlcy5qb2luKCcsJyl9YFxuICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5pbmNsdWRlUm9sZXMpIHtcbiAgICAgICAgICAgIHVybCArPSBgJmluY2x1ZGVfcm9sZXM9JHtvcHRpb25zLmluY2x1ZGVSb2xlc31gXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfSxcbiAgICAgIHJvbGVzOiB7XG4gICAgICAgIG9uZTogKGd1aWxkSWQsIHJvbGVJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L3JvbGVzLyR7cm9sZUlkfWBcbiAgICAgICAgfSxcbiAgICAgICAgYWxsOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L3JvbGVzYFxuICAgICAgICB9LFxuICAgICAgICBtZW1iZXI6IChndWlsZElkLCBtZW1iZXJJZCwgcm9sZUlkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vbWVtYmVycy8ke21lbWJlcklkfS9yb2xlcy8ke3JvbGVJZH1gXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgc3RpY2tlcnM6IChndWlsZElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L3N0aWNrZXJzYFxuICAgICAgfSxcbiAgICAgIHN0aWNrZXI6IChndWlsZElkLCBzdGlja2VySWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vc3RpY2tlcnMvJHtzdGlja2VySWR9YFxuICAgICAgfSxcbiAgICAgIHZvaWNlOiAoZ3VpbGRJZCwgdXNlcklkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L3ZvaWNlLXN0YXRlcy8ke3VzZXJJZCA/PyAnQG1lJ31gXG4gICAgICB9LFxuICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgIGNvZGU6IChjb2RlKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzL3RlbXBsYXRlcy8ke2NvZGV9YFxuICAgICAgICB9LFxuICAgICAgICBndWlsZDogKGd1aWxkSWQsIGNvZGUpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS90ZW1wbGF0ZXMvJHtjb2RlfWBcbiAgICAgICAgfSxcbiAgICAgICAgYWxsOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L3RlbXBsYXRlc2BcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB2YW5pdHk6IChndWlsZElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L3Zhbml0eS11cmxgXG4gICAgICB9LFxuICAgICAgcmVnaW9uczogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vcmVnaW9uc2BcbiAgICAgIH0sXG4gICAgICB3ZWJob29rczogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vd2ViaG9va3NgXG4gICAgICB9LFxuICAgICAgd2VsY29tZTogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vd2VsY29tZS1zY3JlZW5gXG4gICAgICB9LFxuICAgICAgd2lkZ2V0OiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS93aWRnZXRgXG4gICAgICB9LFxuICAgICAgd2lkZ2V0SnNvbjogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vd2lkZ2V0Lmpzb25gXG4gICAgICB9LFxuICAgICAgb25ib2FyZGluZzogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vb25ib2FyZGluZ2BcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIHN0aWNrZXI6IChzdGlja2VySWQpID0+IHtcbiAgICAgIHJldHVybiBgL3N0aWNrZXJzLyR7c3RpY2tlcklkfWBcbiAgICB9LFxuXG4gICAgcmVnaW9uczogKCkgPT4ge1xuICAgICAgcmV0dXJuICcvdm9pY2UvcmVnaW9ucydcbiAgICB9LFxuXG4gICAgLy8gSW50ZXJhY3Rpb24gRW5kcG9pbnRzXG4gICAgaW50ZXJhY3Rpb25zOiB7XG4gICAgICBjb21tYW5kczoge1xuICAgICAgICAvLyBBcHBsaWNhdGlvbiBFbmRwb2ludHNcbiAgICAgICAgY29tbWFuZHM6IChhcHBsaWNhdGlvbklkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvYXBwbGljYXRpb25zLyR7YXBwbGljYXRpb25JZH0vY29tbWFuZHNgXG4gICAgICAgIH0sXG5cbiAgICAgICAgZ3VpbGRzOiB7XG4gICAgICAgICAgYWxsKGFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpIHtcbiAgICAgICAgICAgIHJldHVybiBgL2FwcGxpY2F0aW9ucy8ke2FwcGxpY2F0aW9uSWR9L2d1aWxkcy8ke2d1aWxkSWR9L2NvbW1hbmRzYFxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBvbmUoYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkLCB3aXRoTG9jYWxpemF0aW9ucykge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvYXBwbGljYXRpb25zLyR7YXBwbGljYXRpb25JZH0vZ3VpbGRzLyR7Z3VpbGRJZH0vY29tbWFuZHMvJHtjb21tYW5kSWR9P2BcblxuICAgICAgICAgICAgaWYgKHdpdGhMb2NhbGl6YXRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdXJsICs9IGB3aXRoX2xvY2FsaXphdGlvbnM9JHt3aXRoTG9jYWxpemF0aW9ucy50b1N0cmluZygpfWBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHBlcm1pc3Npb25zOiAoYXBwbGljYXRpb25JZCwgZ3VpbGRJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2FwcGxpY2F0aW9ucy8ke2FwcGxpY2F0aW9uSWR9L2d1aWxkcy8ke2d1aWxkSWR9L2NvbW1hbmRzL3Blcm1pc3Npb25zYFxuICAgICAgICB9LFxuICAgICAgICBwZXJtaXNzaW9uOiAoYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvYXBwbGljYXRpb25zLyR7YXBwbGljYXRpb25JZH0vZ3VpbGRzLyR7Z3VpbGRJZH0vY29tbWFuZHMvJHtjb21tYW5kSWR9L3Blcm1pc3Npb25zYFxuICAgICAgICB9LFxuICAgICAgICBjb21tYW5kOiAoYXBwbGljYXRpb25JZCwgY29tbWFuZElkLCB3aXRoTG9jYWxpemF0aW9ucykgPT4ge1xuICAgICAgICAgIGxldCB1cmwgPSBgL2FwcGxpY2F0aW9ucy8ke2FwcGxpY2F0aW9uSWR9L2NvbW1hbmRzLyR7Y29tbWFuZElkfT9gXG5cbiAgICAgICAgICBpZiAod2l0aExvY2FsaXphdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdXJsICs9IGB3aXRoTG9jYWxpemF0aW9ucz0ke3dpdGhMb2NhbGl6YXRpb25zLnRvU3RyaW5nKCl9YFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgfSxcbiAgICAgIH0sXG5cbiAgICAgIHJlc3BvbnNlczoge1xuICAgICAgICAvLyBJbnRlcmFjdGlvbiBFbmRwb2ludHNcbiAgICAgICAgY2FsbGJhY2s6IChpbnRlcmFjdGlvbklkLCB0b2tlbikgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2ludGVyYWN0aW9ucy8ke2ludGVyYWN0aW9uSWR9LyR7dG9rZW59L2NhbGxiYWNrYFxuICAgICAgICB9LFxuICAgICAgICBvcmlnaW5hbDogKGludGVyYWN0aW9uSWQsIHRva2VuKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvd2ViaG9va3MvJHtpbnRlcmFjdGlvbklkfS8ke3Rva2VufS9tZXNzYWdlcy9Ab3JpZ2luYWxgXG4gICAgICAgIH0sXG4gICAgICAgIG1lc3NhZ2U6IChhcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvd2ViaG9va3MvJHthcHBsaWNhdGlvbklkfS8ke3Rva2VufS9tZXNzYWdlcy8ke21lc3NhZ2VJZH1gXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG5cbiAgICAvLyBPQXV0aDIgZW5kcG9pbnRzXG4gICAgb2F1dGgyOiB7XG4gICAgICB0b2tlbkV4Y2hhbmdlOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiAnL29hdXRoMi90b2tlbidcbiAgICAgIH0sXG4gICAgICB0b2tlblJldm9rZTogKCkgPT4ge1xuICAgICAgICByZXR1cm4gJy9vYXV0aDIvdG9rZW4vcmV2b2tlJ1xuICAgICAgfSxcbiAgICAgIGN1cnJlbnRBdXRob3JpemF0aW9uOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiAnL29hdXRoMi9AbWUnXG4gICAgICB9LFxuICAgICAgYXBwbGljYXRpb246ICgpID0+IHtcbiAgICAgICAgcmV0dXJuICcvb2F1dGgyL2FwcGxpY2F0aW9ucy9AbWUnXG4gICAgICB9LFxuICAgICAgY29ubmVjdGlvbnM6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuICcvdXNlcnMvQG1lL2Nvbm5lY3Rpb25zJ1xuICAgICAgfSxcbiAgICAgIHJvbGVDb25uZWN0aW9uczogKGFwcGxpY2F0aW9uSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvdXNlcnMvQG1lL2FwcGxpY2F0aW9ucy8ke2FwcGxpY2F0aW9uSWR9L3JvbGUtY29ubmVjdGlvbmBcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIG1vbmV0aXphdGlvbjoge1xuICAgICAgZW50aXRsZW1lbnRzOiAoYXBwbGljYXRpb25JZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICBsZXQgdXJsID0gYC9hcHBsaWNhdGlvbnMvJHthcHBsaWNhdGlvbklkfS9lbnRpdGxlbWVudHM/YFxuXG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXIpIHVybCArPSBgYWZ0ZXI9JHtvcHRpb25zLmFmdGVyfWBcbiAgICAgICAgICBpZiAob3B0aW9ucy5iZWZvcmUpIHVybCArPSBgJmJlZm9yZT0ke29wdGlvbnMuYmVmb3JlfWBcbiAgICAgICAgICBpZiAob3B0aW9ucy5leGNsdWRlRW5kZWQpIHVybCArPSBgJmV4Y2x1ZGVfZW5kZWQ9JHtvcHRpb25zLmV4Y2x1ZGVFbmRlZH1gXG4gICAgICAgICAgaWYgKG9wdGlvbnMuZ3VpbGRJZCkgdXJsICs9IGAmZ3VpbGRfaWQ9JHtvcHRpb25zLmd1aWxkSWR9YFxuICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0KSB1cmwgKz0gYCZsaW1pdD0ke29wdGlvbnMubGltaXR9YFxuICAgICAgICAgIGlmIChvcHRpb25zLnNrdUlkcykgdXJsICs9IGAmc2t1X2lkcz0ke29wdGlvbnMuc2t1SWRzLmpvaW4oJywnKX1gXG4gICAgICAgICAgaWYgKG9wdGlvbnMudXNlcklkKSB1cmwgKz0gYCZ1c2VyX2lkPSR7b3B0aW9ucy51c2VySWR9YFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfSxcbiAgICAgIGVudGl0bGVtZW50OiAoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9hcHBsaWNhdGlvbnMvJHthcHBsaWNhdGlvbklkfS9lbnRpdGxlbWVudHMvJHtlbnRpdGxlbWVudElkfWBcbiAgICAgIH0sXG4gICAgICBjb25zdW1lRW50aXRsZW1lbnQ6IChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2FwcGxpY2F0aW9ucy8ke2FwcGxpY2F0aW9uSWR9L2VudGl0bGVtZW50cy8ke2VudGl0bGVtZW50SWR9L2NvbnN1bWVgXG4gICAgICB9LFxuXG4gICAgICBza3VzOiAoYXBwbGljYXRpb25JZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9hcHBsaWNhdGlvbnMvJHthcHBsaWNhdGlvbklkfS9za3VzYFxuICAgICAgfSxcbiAgICB9LFxuXG4gICAgLy8gVXNlciBlbmRwb2ludHNcbiAgICB1c2VyKHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGAvdXNlcnMvJHt1c2VySWR9YFxuICAgIH0sXG5cbiAgICBhcHBsaWNhdGlvbigpIHtcbiAgICAgIHJldHVybiAnL2FwcGxpY2F0aW9ucy9AbWUnXG4gICAgfSxcblxuICAgIGN1cnJlbnRVc2VyKCkge1xuICAgICAgcmV0dXJuICcvdXNlcnMvQG1lJ1xuICAgIH0sXG5cbiAgICBnYXRld2F5Qm90KCkge1xuICAgICAgcmV0dXJuICcvZ2F0ZXdheS9ib3QnXG4gICAgfSxcblxuICAgIHN0aWNrZXJQYWNrcygpIHtcbiAgICAgIHJldHVybiAnL3N0aWNrZXItcGFja3MnXG4gICAgfSxcbiAgfVxufVxuIl0sIm5hbWVzIjpbImlzR2V0TWVzc2FnZXNBZnRlciIsImlzR2V0TWVzc2FnZXNBcm91bmQiLCJpc0dldE1lc3NhZ2VzQmVmb3JlIiwiaXNHZXRNZXNzYWdlc0xpbWl0IiwiY3JlYXRlUm91dGVzIiwid2ViaG9va3MiLCJpZCIsIndlYmhvb2tJZCIsIm1lc3NhZ2UiLCJ0b2tlbiIsIm1lc3NhZ2VJZCIsIm9wdGlvbnMiLCJ1cmwiLCJ0aHJlYWRJZCIsIm9yaWdpbmFsIiwid2ViaG9vayIsIndhaXQiLCJ1bmRlZmluZWQiLCJ0b1N0cmluZyIsImNoYW5uZWxzIiwiYnVsayIsImNoYW5uZWxJZCIsImRtIiwiZG1SZWNpcGllbnQiLCJ1c2VySWQiLCJwaW4iLCJwaW5zIiwicmVhY3Rpb25zIiwiYm90IiwiZW1vamkiLCJlbmNvZGVVUklDb21wb25lbnQiLCJ1c2VyIiwiYWxsIiwidHlwZSIsImFmdGVyIiwibGltaXQiLCJjaGFubmVsIiwiZm9sbG93IiwiZm9ydW0iLCJpbnZpdGVzIiwibWVzc2FnZXMiLCJiZWZvcmUiLCJhcm91bmQiLCJvdmVyd3JpdGUiLCJvdmVyd3JpdGVJZCIsImNyb3NzcG9zdCIsInN0YWdlcyIsInN0YWdlIiwidGhyZWFkcyIsImFjdGl2ZSIsImd1aWxkSWQiLCJtZW1iZXJzIiwibWUiLCJhcmNoaXZlZCIsInB1YmxpYyIsIkRhdGUiLCJ0b0lTT1N0cmluZyIsInByaXZhdGUiLCJqb2luZWQiLCJ0eXBpbmciLCJwb2xscyIsInZvdGVzIiwiYW5zd2VySWQiLCJleHBpcmUiLCJndWlsZHMiLCJ1c2VyR3VpbGRzIiwid2l0aENvdW50cyIsImF1ZGl0bG9ncyIsImFjdGlvblR5cGUiLCJhdXRvbW9kIiwicnVsZSIsInJ1bGVJZCIsInJ1bGVzIiwiZW1vamlJZCIsImVtb2ppcyIsImV2ZW50cyIsIndpdGhVc2VyQ291bnQiLCJldmVudCIsImV2ZW50SWQiLCJ1c2VycyIsIndpdGhNZW1iZXIiLCJndWlsZCIsImludGVncmF0aW9uIiwiaW50ZWdyYXRpb25JZCIsImludGVncmF0aW9ucyIsImludml0ZSIsImludml0ZUNvZGUiLCJ3aXRoRXhwaXJhdGlvbiIsInNjaGVkdWxlZEV2ZW50SWQiLCJsZWF2ZSIsImJhbiIsImJhbnMiLCJidWxrQmFuIiwibWVtYmVyIiwiY3VycmVudE1lbWJlciIsInNlYXJjaCIsInF1ZXJ5IiwicHJ1bmUiLCJkYXlzIiwiQXJyYXkiLCJpc0FycmF5IiwiaW5jbHVkZVJvbGVzIiwiam9pbiIsIm1mYSIsInByZXZpZXciLCJyb2xlcyIsIm9uZSIsInJvbGVJZCIsIm1lbWJlcklkIiwic3RpY2tlcnMiLCJzdGlja2VyIiwic3RpY2tlcklkIiwidm9pY2UiLCJ0ZW1wbGF0ZXMiLCJjb2RlIiwidmFuaXR5IiwicmVnaW9ucyIsIndlbGNvbWUiLCJ3aWRnZXQiLCJ3aWRnZXRKc29uIiwib25ib2FyZGluZyIsImludGVyYWN0aW9ucyIsImNvbW1hbmRzIiwiYXBwbGljYXRpb25JZCIsImNvbW1hbmRJZCIsIndpdGhMb2NhbGl6YXRpb25zIiwicGVybWlzc2lvbnMiLCJwZXJtaXNzaW9uIiwiY29tbWFuZCIsInJlc3BvbnNlcyIsImNhbGxiYWNrIiwiaW50ZXJhY3Rpb25JZCIsIm9hdXRoMiIsInRva2VuRXhjaGFuZ2UiLCJ0b2tlblJldm9rZSIsImN1cnJlbnRBdXRob3JpemF0aW9uIiwiYXBwbGljYXRpb24iLCJjb25uZWN0aW9ucyIsInJvbGVDb25uZWN0aW9ucyIsIm1vbmV0aXphdGlvbiIsImVudGl0bGVtZW50cyIsImV4Y2x1ZGVFbmRlZCIsInNrdUlkcyIsImVudGl0bGVtZW50IiwiZW50aXRsZW1lbnRJZCIsImNvbnN1bWVFbnRpdGxlbWVudCIsInNrdXMiLCJjdXJyZW50VXNlciIsImdhdGV3YXlCb3QiLCJzdGlja2VyUGFja3MiXSwibWFwcGluZ3MiOiJBQUNBLFNBQVNBLGtCQUFrQixFQUFFQyxtQkFBbUIsRUFBRUMsbUJBQW1CLEVBQUVDLGtCQUFrQixRQUFRLG9CQUFtQjtBQUdwSCxPQUFPLFNBQVNDO0lBQ2Qs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