@discordeno/rest 22.0.1-next.ea88819 → 22.0.1-next.eb4cdaa

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/dist/routes.js CHANGED
@@ -1,24 +1,30 @@
1
1
  import { isGetMessagesAfter, isGetMessagesAround, isGetMessagesBefore, isGetMessagesLimit } from '@discordeno/utils';
2
- export function createRoutes() {
2
+ /**
3
+ * Creates the available discord API routes
4
+ *
5
+ * @param disableURIEncode Don't encode strings, except where required - Danger: disabling URI encoding may lead to path traversal if unsafe strings are used
6
+ * @returns The available discord API routes
7
+ */ export function createRoutes(disableURIEncode = false) {
8
+ const encode = disableURIEncode ? (x)=>x.toString() : encodeComponent;
3
9
  return {
4
10
  webhooks: {
5
11
  id: (webhookId)=>{
6
- return `/webhooks/${webhookId}`;
12
+ return `/webhooks/${encode(webhookId)}`;
7
13
  },
8
14
  message: (webhookId, token, messageId, options)=>{
9
- let url = `/webhooks/${webhookId}/${token}/messages/${messageId}?`;
15
+ let url = `/webhooks/${encode(webhookId)}/${encode(token)}/messages/${encode(messageId)}?`;
10
16
  if (options) {
11
- if (options.threadId) url += `thread_id=${options.threadId}`;
12
- if (options.withComponents) url += `&with_components=${options.withComponents}`;
17
+ if (options.threadId) url += `thread_id=${encode(options.threadId)}`;
18
+ if (options.withComponents) url += `&with_components=${encode(options.withComponents)}`;
13
19
  }
14
20
  return url;
15
21
  },
16
22
  webhook: (webhookId, token, options)=>{
17
- let url = `/webhooks/${webhookId}/${token}?`;
23
+ let url = `/webhooks/${encode(webhookId)}/${encode(token)}?`;
18
24
  if (options) {
19
- if (options?.wait !== undefined) url += `wait=${options.wait.toString()}`;
20
- if (options.threadId) url += `&thread_id=${options.threadId}`;
21
- if (options.withComponents) url += `&with_components=${options.withComponents}`;
25
+ if (options?.wait !== undefined) url += `wait=${encode(options.wait)}`;
26
+ if (options.threadId) url += `&thread_id=${encode(options.threadId)}`;
27
+ if (options.withComponents) url += `&with_components=${encode(options.withComponents)}`;
22
28
  }
23
29
  return url;
24
30
  }
@@ -26,190 +32,192 @@ export function createRoutes() {
26
32
  // Channel Endpoints
27
33
  channels: {
28
34
  bulk: (channelId)=>{
29
- return `/channels/${channelId}/messages/bulk-delete`;
35
+ return `/channels/${encode(channelId)}/messages/bulk-delete`;
30
36
  },
31
37
  dm: ()=>{
32
38
  return '/users/@me/channels';
33
39
  },
34
40
  dmRecipient: (channelId, userId)=>{
35
- return `/channels/${channelId}/recipients/${userId}`;
41
+ return `/channels/${encode(channelId)}/recipients/${encode(userId)}`;
36
42
  },
37
43
  pin: (channelId, messageId)=>{
38
- return `/channels/${channelId}/pins/${messageId}`;
44
+ return `/channels/${encode(channelId)}/pins/${encode(messageId)}`;
39
45
  },
40
46
  pins: (channelId)=>{
41
- return `/channels/${channelId}/pins`;
47
+ return `/channels/${encode(channelId)}/pins`;
42
48
  },
43
49
  messagePins: (channelId, options)=>{
44
- let url = `/channels/${channelId}/messages/pins?`;
50
+ let url = `/channels/${encode(channelId)}/messages/pins?`;
45
51
  if (options) {
46
- if (options.before) url += `before=${options.before}`;
47
- if (options.limit) url += `&limit=${options.limit}`;
52
+ if (options.before) url += `before=${encode(options.before)}`;
53
+ if (options.limit) url += `&limit=${encode(options.limit)}`;
48
54
  }
49
55
  return url;
50
56
  },
51
57
  messagePin: (channelId, messageId)=>{
52
- return `/channels/${channelId}/messages/pins/${messageId}`;
58
+ return `/channels/${encode(channelId)}/messages/pins/${encode(messageId)}`;
53
59
  },
54
60
  reactions: {
55
61
  bot: (channelId, messageId, emoji)=>{
56
- return `/channels/${channelId}/messages/${messageId}/reactions/${encodeURIComponent(emoji)}/@me`;
62
+ return `/channels/${encode(channelId)}/messages/${encode(messageId)}/reactions/${encodeURIComponent(emoji)}/@me`;
57
63
  },
58
64
  user: (channelId, messageId, emoji, userId)=>{
59
- return `/channels/${channelId}/messages/${messageId}/reactions/${encodeURIComponent(emoji)}/${userId}`;
65
+ return `/channels/${encode(channelId)}/messages/${encode(messageId)}/reactions/${encodeURIComponent(emoji)}/${encode(userId)}`;
60
66
  },
61
67
  all: (channelId, messageId)=>{
62
- return `/channels/${channelId}/messages/${messageId}/reactions`;
68
+ return `/channels/${encode(channelId)}/messages/${encode(messageId)}/reactions`;
63
69
  },
64
70
  emoji: (channelId, messageId, emoji, options)=>{
65
- let url = `/channels/${channelId}/messages/${messageId}/reactions/${encodeURIComponent(emoji)}?`;
71
+ let url = `/channels/${encode(channelId)}/messages/${encode(messageId)}/reactions/${encodeURIComponent(emoji)}?`;
66
72
  if (options) {
67
- if (options.type) url += `type=${options.type}`;
68
- // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
69
- if (options.after) url += `&after=${options.after}`;
70
- // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
71
- if (options.limit) url += `&limit=${options.limit}`;
73
+ if (options.type) url += `type=${encode(options.type)}`;
74
+ if (options.after) url += `&after=${encode(options.after)}`;
75
+ if (options.limit) url += `&limit=${encode(options.limit)}`;
72
76
  }
73
77
  return url;
74
78
  },
75
79
  message: (channelId, messageId, emoji, options)=>{
76
- let url = `/channels/${channelId}/messages/${messageId}/reactions/${encodeURIComponent(emoji)}?`;
80
+ let url = `/channels/${encode(channelId)}/messages/${encode(messageId)}/reactions/${encodeURIComponent(emoji)}?`;
77
81
  if (options) {
78
- if (options.after) url += `after=${options.after}`;
79
- if (options.limit) url += `&limit=${options.limit}`;
82
+ if (options.type) url += `type=${encode(options.type)}`;
83
+ if (options.after) url += `after=${encode(options.after)}`;
84
+ if (options.limit) url += `&limit=${encode(options.limit)}`;
80
85
  }
81
86
  return url;
82
87
  }
83
88
  },
84
89
  webhooks: (channelId)=>{
85
- return `/channels/${channelId}/webhooks`;
90
+ return `/channels/${encode(channelId)}/webhooks`;
86
91
  },
87
92
  channel: (channelId)=>{
88
- return `/channels/${channelId}`;
93
+ return `/channels/${encode(channelId)}`;
89
94
  },
90
95
  follow: (channelId)=>{
91
- return `/channels/${channelId}/followers`;
96
+ return `/channels/${encode(channelId)}/followers`;
92
97
  },
93
98
  forum: (channelId)=>{
94
- return `/channels/${channelId}/threads`;
99
+ return `/channels/${encode(channelId)}/threads`;
95
100
  },
96
101
  invites: (channelId)=>{
97
- return `/channels/${channelId}/invites`;
102
+ return `/channels/${encode(channelId)}/invites`;
98
103
  },
99
104
  message: (channelId, messageId)=>{
100
- return `/channels/${channelId}/messages/${messageId}`;
105
+ return `/channels/${encode(channelId)}/messages/${encode(messageId)}`;
101
106
  },
102
107
  messages: (channelId, options)=>{
103
- let url = `/channels/${channelId}/messages?`;
108
+ let url = `/channels/${encode(channelId)}/messages?`;
104
109
  if (options) {
105
110
  if (isGetMessagesAfter(options) && options.after) {
106
- url += `after=${options.after}`;
111
+ url += `after=${encode(options.after)}`;
107
112
  }
108
113
  if (isGetMessagesBefore(options) && options.before) {
109
- url += `&before=${options.before}`;
114
+ url += `&before=${encode(options.before)}`;
110
115
  }
111
116
  if (isGetMessagesAround(options) && options.around) {
112
- url += `&around=${options.around}`;
117
+ url += `&around=${encode(options.around)}`;
113
118
  }
114
119
  if (isGetMessagesLimit(options) && options.limit) {
115
- url += `&limit=${options.limit}`;
120
+ url += `&limit=${encode(options.limit)}`;
116
121
  }
117
122
  }
118
123
  return url;
119
124
  },
120
125
  overwrite: (channelId, overwriteId)=>{
121
- return `/channels/${channelId}/permissions/${overwriteId}`;
126
+ return `/channels/${encode(channelId)}/permissions/${encode(overwriteId)}`;
122
127
  },
123
128
  crosspost: (channelId, messageId)=>{
124
- return `/channels/${channelId}/messages/${messageId}/crosspost`;
129
+ return `/channels/${encode(channelId)}/messages/${encode(messageId)}/crosspost`;
125
130
  },
126
131
  stages: ()=>{
127
132
  return '/stage-instances';
128
133
  },
129
134
  stage: (channelId)=>{
130
- return `/stage-instances/${channelId}`;
135
+ return `/stage-instances/${encode(channelId)}`;
131
136
  },
132
137
  // Thread Endpoints
133
138
  threads: {
134
139
  message: (channelId, messageId)=>{
135
- return `/channels/${channelId}/messages/${messageId}/threads`;
140
+ return `/channels/${encode(channelId)}/messages/${encode(messageId)}/threads`;
136
141
  },
137
142
  all: (channelId)=>{
138
- return `/channels/${channelId}/threads`;
143
+ return `/channels/${encode(channelId)}/threads`;
139
144
  },
140
145
  active: (guildId)=>{
141
- return `/guilds/${guildId}/threads/active`;
146
+ return `/guilds/${encode(guildId)}/threads/active`;
142
147
  },
143
148
  members: (channelId, options)=>{
144
- let url = `/channels/${channelId}/thread-members?`;
149
+ let url = `/channels/${encode(channelId)}/thread-members?`;
145
150
  if (options) {
146
- if (options.withMember) url += `with_member=${options.withMember}`;
147
- if (options.limit) url += `&limit=${options.limit}`;
148
- if (options.after) url += `&after=${options.after}`;
151
+ if (options.withMember) url += `with_member=${encode(options.withMember)}`;
152
+ if (options.limit) url += `&limit=${encode(options.limit)}`;
153
+ if (options.after) url += `&after=${encode(options.after)}`;
149
154
  }
150
155
  return url;
151
156
  },
152
157
  me: (channelId)=>{
153
- return `/channels/${channelId}/thread-members/@me`;
158
+ return `/channels/${encode(channelId)}/thread-members/@me`;
154
159
  },
155
160
  getUser (channelId, userId, options) {
156
- let url = `/channels/${channelId}/thread-members/${userId}?`;
161
+ let url = `/channels/${encode(channelId)}/thread-members/${encode(userId)}?`;
157
162
  if (options) {
158
- if (options.withMember) url += `with_member=${options.withMember}`;
163
+ if (options.withMember) url += `with_member=${encode(options.withMember)}`;
159
164
  }
160
165
  return url;
161
166
  },
162
167
  user: (channelId, userId)=>{
163
- return `/channels/${channelId}/thread-members/${userId}`;
168
+ return `/channels/${encode(channelId)}/thread-members/${encode(userId)}`;
164
169
  },
165
170
  archived: (channelId)=>{
166
- return `/channels/${channelId}/threads/archived`;
171
+ return `/channels/${encode(channelId)}/threads/archived`;
167
172
  },
168
173
  public: (channelId, options)=>{
169
- let url = `/channels/${channelId}/threads/archived/public?`;
174
+ let url = `/channels/${encode(channelId)}/threads/archived/public?`;
170
175
  if (options) {
171
176
  if (options.before) {
172
- url += `before=${new Date(options.before).toISOString()}`;
177
+ const iso = new Date(options.before).toISOString();
178
+ url += `before=${encode(iso)}`;
173
179
  }
174
- if (options.limit) url += `&limit=${options.limit}`;
180
+ if (options.limit) url += `&limit=${encode(options.limit)}`;
175
181
  }
176
182
  return url;
177
183
  },
178
184
  private: (channelId, options)=>{
179
- let url = `/channels/${channelId}/threads/archived/private?`;
185
+ let url = `/channels/${encode(channelId)}/threads/archived/private?`;
180
186
  if (options) {
181
187
  if (options.before) {
182
- url += `before=${new Date(options.before).toISOString()}`;
188
+ const iso = new Date(options.before).toISOString();
189
+ url += `before=${encode(iso)}`;
183
190
  }
184
- if (options.limit) url += `&limit=${options.limit}`;
191
+ if (options.limit) url += `&limit=${encode(options.limit)}`;
185
192
  }
186
193
  return url;
187
194
  },
188
195
  joined: (channelId, options)=>{
189
- let url = `/channels/${channelId}/users/@me/threads/archived/private?`;
196
+ let url = `/channels/${encode(channelId)}/users/@me/threads/archived/private?`;
190
197
  if (options) {
191
198
  if (options.before) {
192
- url += `before=${new Date(options.before).toISOString()}`;
199
+ const iso = new Date(options.before).toISOString();
200
+ url += `before=${encode(iso)}`;
193
201
  }
194
- if (options.limit) url += `&limit=${options.limit}`;
202
+ if (options.limit) url += `&limit=${encode(options.limit)}`;
195
203
  }
196
204
  return url;
197
205
  }
198
206
  },
199
207
  typing: (channelId)=>{
200
- return `/channels/${channelId}/typing`;
208
+ return `/channels/${encode(channelId)}/typing`;
201
209
  },
202
210
  polls: {
203
211
  votes: (channelId, messageId, answerId, options)=>{
204
- let url = `/channels/${channelId}/polls/${messageId}/answers/${answerId}?`;
212
+ let url = `/channels/${encode(channelId)}/polls/${encode(messageId)}/answers/${encode(answerId)}?`;
205
213
  if (options) {
206
- if (options.after) url += `after=${options.after}`;
207
- if (options.limit) url += `&limit=${options.limit}`;
214
+ if (options.after) url += `after=${encode(options.after)}`;
215
+ if (options.limit) url += `&limit=${encode(options.limit)}`;
208
216
  }
209
217
  return url;
210
218
  },
211
219
  expire: (channelId, messageId)=>{
212
- return `/channels/${channelId}/polls/${messageId}/expire`;
220
+ return `/channels/${encode(channelId)}/polls/${encode(messageId)}/expire`;
213
221
  }
214
222
  }
215
223
  },
@@ -221,226 +229,235 @@ export function createRoutes() {
221
229
  userGuilds: (options)=>{
222
230
  let url = '/users/@me/guilds?';
223
231
  if (options) {
224
- if (options.after) url += `after=${options.after}`;
225
- if (options.before) url += `&before=${options.before}`;
226
- if (options.limit) url += `&limit=${options.limit}`;
227
- if (options.withCounts) url += `&with_counts=${options.withCounts}`;
232
+ if (options.after) url += `after=${encode(options.after)}`;
233
+ if (options.before) url += `&before=${encode(options.before)}`;
234
+ if (options.limit) url += `&limit=${encode(options.limit)}`;
235
+ if (options.withCounts) url += `&with_counts=${encode(options.withCounts)}`;
228
236
  }
229
237
  return url;
230
238
  },
231
239
  auditlogs: (guildId, options)=>{
232
- let url = `/guilds/${guildId}/audit-logs?`;
240
+ let url = `/guilds/${encode(guildId)}/audit-logs?`;
233
241
  if (options) {
234
- if (options.actionType) url += `action_type=${options.actionType}`;
235
- if (options.before) url += `&before=${options.before}`;
236
- if (options.after) url += `&after=${options.after}`;
237
- if (options.limit) url += `&limit=${options.limit}`;
238
- if (options.userId) url += `&user_id=${options.userId}`;
242
+ if (options.actionType) url += `action_type=${encode(options.actionType)}`;
243
+ if (options.before) url += `&before=${encode(options.before)}`;
244
+ if (options.after) url += `&after=${encode(options.after)}`;
245
+ if (options.limit) url += `&limit=${encode(options.limit)}`;
246
+ if (options.userId) url += `&user_id=${encode(options.userId)}`;
239
247
  }
240
248
  return url;
241
249
  },
242
250
  automod: {
243
251
  rule: (guildId, ruleId)=>{
244
- return `/guilds/${guildId}/auto-moderation/rules/${ruleId}`;
252
+ return `/guilds/${encode(guildId)}/auto-moderation/rules/${encode(ruleId)}`;
245
253
  },
246
254
  rules: (guildId)=>{
247
- return `/guilds/${guildId}/auto-moderation/rules`;
255
+ return `/guilds/${encode(guildId)}/auto-moderation/rules`;
248
256
  }
249
257
  },
250
258
  channels: (guildId)=>{
251
- return `/guilds/${guildId}/channels`;
259
+ return `/guilds/${encode(guildId)}/channels`;
252
260
  },
253
261
  emoji: (guildId, emojiId)=>{
254
- return `/guilds/${guildId}/emojis/${emojiId}`;
262
+ return `/guilds/${encode(guildId)}/emojis/${encode(emojiId)}`;
255
263
  },
256
264
  emojis: (guildId)=>{
257
- return `/guilds/${guildId}/emojis`;
265
+ return `/guilds/${encode(guildId)}/emojis`;
258
266
  },
259
267
  events: {
260
268
  events: (guildId, withUserCount)=>{
261
- let url = `/guilds/${guildId}/scheduled-events?`;
269
+ let url = `/guilds/${encode(guildId)}/scheduled-events?`;
262
270
  if (withUserCount !== undefined) {
263
- url += `with_user_count=${withUserCount.toString()}`;
271
+ url += `with_user_count=${encode(withUserCount)}`;
264
272
  }
265
273
  return url;
266
274
  },
267
275
  event: (guildId, eventId, withUserCount)=>{
268
- let url = `/guilds/${guildId}/scheduled-events/${eventId}`;
276
+ let url = `/guilds/${encode(guildId)}/scheduled-events/${encode(eventId)}`;
269
277
  if (withUserCount !== undefined) {
270
- url += `with_user_count=${withUserCount.toString()}`;
278
+ url += `with_user_count=${encode(withUserCount)}`;
271
279
  }
272
280
  return url;
273
281
  },
274
282
  users: (guildId, eventId, options)=>{
275
- let url = `/guilds/${guildId}/scheduled-events/${eventId}/users?`;
283
+ let url = `/guilds/${encode(guildId)}/scheduled-events/${encode(eventId)}/users?`;
276
284
  if (options) {
277
- if (options.limit !== undefined) url += `limit=${options.limit}`;
285
+ if (options.limit !== undefined) url += `limit=${encode(options.limit)}`;
278
286
  if (options.withMember !== undefined) {
279
- url += `&with_member=${options.withMember.toString()}`;
287
+ url += `&with_member=${encode(options.withMember)}`;
280
288
  }
281
- if (options.after !== undefined) url += `&after=${options.after}`;
282
- if (options.before !== undefined) url += `&before=${options.before}`;
289
+ if (options.after !== undefined) url += `&after=${encode(options.after)}`;
290
+ if (options.before !== undefined) url += `&before=${encode(options.before)}`;
283
291
  }
284
292
  return url;
285
293
  }
286
294
  },
287
295
  guild (guildId, withCounts) {
288
- let url = `/guilds/${guildId}?`;
296
+ let url = `/guilds/${encode(guildId)}?`;
289
297
  if (withCounts !== undefined) {
290
- url += `with_counts=${withCounts.toString()}`;
298
+ url += `with_counts=${encode(withCounts)}`;
291
299
  }
292
300
  return url;
293
301
  },
294
302
  integration (guildId, integrationId) {
295
- return `/guilds/${guildId}/integrations/${integrationId}`;
303
+ return `/guilds/${encode(guildId)}/integrations/${encode(integrationId)}`;
296
304
  },
297
305
  integrations: (guildId)=>{
298
- return `/guilds/${guildId}/integrations?include_applications=true`;
306
+ return `/guilds/${encode(guildId)}/integrations?include_applications=true`;
299
307
  },
300
308
  invite (inviteCode, options) {
301
- let url = `/invites/${inviteCode}?`;
309
+ let url = `/invites/${encode(inviteCode)}?`;
302
310
  if (options) {
303
311
  if (options.withCounts !== undefined) {
304
- url += `with_counts=${options.withCounts.toString()}`;
312
+ url += `with_counts=${encode(options.withCounts)}`;
305
313
  }
306
314
  if (options.scheduledEventId) {
307
- url += `&guild_scheduled_event_id=${options.scheduledEventId}`;
315
+ url += `&guild_scheduled_event_id=${encode(options.scheduledEventId)}`;
308
316
  }
309
317
  }
310
318
  return url;
311
319
  },
320
+ inviteTargetUsers (inviteCode) {
321
+ return `/invites/${encode(inviteCode)}/target-users`;
322
+ },
323
+ inviteTargetUsersJobStatus (inviteCode) {
324
+ return `/invites/${encode(inviteCode)}/target-users/job-status`;
325
+ },
312
326
  invites: (guildId)=>{
313
- return `/guilds/${guildId}/invites`;
327
+ return `/guilds/${encode(guildId)}/invites`;
314
328
  },
315
329
  leave: (guildId)=>{
316
- return `/users/@me/guilds/${guildId}`;
330
+ return `/users/@me/guilds/${encode(guildId)}`;
317
331
  },
318
332
  members: {
319
333
  ban: (guildId, userId)=>{
320
- return `/guilds/${guildId}/bans/${userId}`;
334
+ return `/guilds/${encode(guildId)}/bans/${encode(userId)}`;
321
335
  },
322
336
  bans: (guildId, options)=>{
323
- let url = `/guilds/${guildId}/bans?`;
337
+ let url = `/guilds/${encode(guildId)}/bans?`;
324
338
  if (options) {
325
- if (options.limit) url += `limit=${options.limit}`;
326
- if (options.after) url += `&after=${options.after}`;
327
- if (options.before) url += `&before=${options.before}`;
339
+ if (options.limit) url += `limit=${encode(options.limit)}`;
340
+ if (options.after) url += `&after=${encode(options.after)}`;
341
+ if (options.before) url += `&before=${encode(options.before)}`;
328
342
  }
329
343
  return url;
330
344
  },
331
345
  bulkBan: (guildId)=>{
332
- return `/guilds/${guildId}/bulk-ban`;
346
+ return `/guilds/${encode(guildId)}/bulk-ban`;
333
347
  },
334
348
  bot: (guildId)=>{
335
- return `/guilds/${guildId}/members/@me`;
349
+ return `/guilds/${encode(guildId)}/members/@me`;
336
350
  },
337
351
  member: (guildId, userId)=>{
338
- return `/guilds/${guildId}/members/${userId}`;
352
+ return `/guilds/${encode(guildId)}/members/${encode(userId)}`;
339
353
  },
340
354
  currentMember: (guildId)=>{
341
- return `/users/@me/guilds/${guildId}/member`;
355
+ return `/users/@me/guilds/${encode(guildId)}/member`;
342
356
  },
343
357
  members: (guildId, options)=>{
344
- let url = `/guilds/${guildId}/members?`;
358
+ let url = `/guilds/${encode(guildId)}/members?`;
345
359
  if (options !== undefined) {
346
- if (options.limit) url += `limit=${options.limit}`;
347
- if (options.after) url += `&after=${options.after}`;
360
+ if (options.limit) url += `limit=${encode(options.limit)}`;
361
+ if (options.after) url += `&after=${encode(options.after)}`;
348
362
  }
349
363
  return url;
350
364
  },
351
365
  search: (guildId, query, options)=>{
352
- let url = `/guilds/${guildId}/members/search?query=${encodeURIComponent(query)}`;
366
+ let url = `/guilds/${encode(guildId)}/members/search?query=${encode(query)}`;
353
367
  if (options) {
354
- if (options.limit !== undefined) url += `&limit=${options.limit}`;
368
+ if (options.limit !== undefined) url += `&limit=${encode(options.limit)}`;
355
369
  }
356
370
  return url;
357
371
  },
358
372
  prune: (guildId, options)=>{
359
- let url = `/guilds/${guildId}/prune?`;
373
+ let url = `/guilds/${encode(guildId)}/prune?`;
360
374
  if (options) {
361
- if (options.days) url += `days=${options.days}`;
375
+ if (options.days) url += `days=${encode(options.days)}`;
362
376
  if (Array.isArray(options.includeRoles)) {
363
- url += `&include_roles=${options.includeRoles.join(',')}`;
377
+ url += `&include_roles=${encode(options.includeRoles.join(','))}`;
364
378
  } else if (options.includeRoles) {
365
- url += `&include_roles=${options.includeRoles}`;
379
+ url += `&include_roles=${encode(options.includeRoles)}`;
366
380
  }
367
381
  }
368
382
  return url;
369
383
  }
370
384
  },
371
385
  preview: (guildId)=>{
372
- return `/guilds/${guildId}/preview`;
386
+ return `/guilds/${encode(guildId)}/preview`;
373
387
  },
374
388
  prune: (guildId, options)=>{
375
- let url = `/guilds/${guildId}/prune?`;
389
+ let url = `/guilds/${encode(guildId)}/prune?`;
376
390
  if (options) {
377
- if (options.days) url += `days=${options.days}`;
391
+ if (options.days) url += `days=${encode(options.days)}`;
378
392
  if (Array.isArray(options.includeRoles)) {
379
- url += `&include_roles=${options.includeRoles.join(',')}`;
393
+ url += `&include_roles=${encode(options.includeRoles.join(','))}`;
380
394
  } else if (options.includeRoles) {
381
- url += `&include_roles=${options.includeRoles}`;
395
+ url += `&include_roles=${encode(options.includeRoles)}`;
382
396
  }
383
397
  }
384
398
  return url;
385
399
  },
386
400
  roles: {
387
401
  one: (guildId, roleId)=>{
388
- return `/guilds/${guildId}/roles/${roleId}`;
402
+ return `/guilds/${encode(guildId)}/roles/${encode(roleId)}`;
389
403
  },
390
404
  all: (guildId)=>{
391
- return `/guilds/${guildId}/roles`;
405
+ return `/guilds/${encode(guildId)}/roles`;
392
406
  },
393
407
  member: (guildId, memberId, roleId)=>{
394
- return `/guilds/${guildId}/members/${memberId}/roles/${roleId}`;
408
+ return `/guilds/${encode(guildId)}/members/${encode(memberId)}/roles/${encode(roleId)}`;
409
+ },
410
+ memberCounts: (guildId)=>{
411
+ return `/guilds/${guildId}/roles/member-counts`;
395
412
  }
396
413
  },
397
414
  stickers: (guildId)=>{
398
- return `/guilds/${guildId}/stickers`;
415
+ return `/guilds/${encode(guildId)}/stickers`;
399
416
  },
400
417
  sticker: (guildId, stickerId)=>{
401
- return `/guilds/${guildId}/stickers/${stickerId}`;
418
+ return `/guilds/${encode(guildId)}/stickers/${encode(stickerId)}`;
402
419
  },
403
420
  voice: (guildId, userId)=>{
404
- return `/guilds/${guildId}/voice-states/${userId ?? '@me'}`;
421
+ return `/guilds/${encode(guildId)}/voice-states/${encode(userId ?? '@me')}`;
405
422
  },
406
423
  templates: {
407
424
  code: (code)=>{
408
- return `/guilds/templates/${code}`;
425
+ return `/guilds/templates/${encode(code)}`;
409
426
  },
410
427
  guild: (guildId, code)=>{
411
- return `/guilds/${guildId}/templates/${code}`;
428
+ return `/guilds/${encode(guildId)}/templates/${encode(code)}`;
412
429
  },
413
430
  all: (guildId)=>{
414
- return `/guilds/${guildId}/templates`;
431
+ return `/guilds/${encode(guildId)}/templates`;
415
432
  }
416
433
  },
417
434
  vanity: (guildId)=>{
418
- return `/guilds/${guildId}/vanity-url`;
435
+ return `/guilds/${encode(guildId)}/vanity-url`;
419
436
  },
420
437
  regions: (guildId)=>{
421
- return `/guilds/${guildId}/regions`;
438
+ return `/guilds/${encode(guildId)}/regions`;
422
439
  },
423
440
  webhooks: (guildId)=>{
424
- return `/guilds/${guildId}/webhooks`;
441
+ return `/guilds/${encode(guildId)}/webhooks`;
425
442
  },
426
443
  welcome: (guildId)=>{
427
- return `/guilds/${guildId}/welcome-screen`;
444
+ return `/guilds/${encode(guildId)}/welcome-screen`;
428
445
  },
429
446
  widget: (guildId)=>{
430
- return `/guilds/${guildId}/widget`;
447
+ return `/guilds/${encode(guildId)}/widget`;
431
448
  },
432
449
  widgetJson: (guildId)=>{
433
- return `/guilds/${guildId}/widget.json`;
450
+ return `/guilds/${encode(guildId)}/widget.json`;
434
451
  },
435
452
  onboarding: (guildId)=>{
436
- return `/guilds/${guildId}/onboarding`;
453
+ return `/guilds/${encode(guildId)}/onboarding`;
437
454
  },
438
455
  incidentActions: (guildId)=>{
439
- return `/guilds/${guildId}/incident-actions`;
456
+ return `/guilds/${encode(guildId)}/incident-actions`;
440
457
  }
441
458
  },
442
459
  sticker: (stickerId)=>{
443
- return `/stickers/${stickerId}`;
460
+ return `/stickers/${encode(stickerId)}`;
444
461
  },
445
462
  regions: ()=>{
446
463
  return '/voice/regions';
@@ -450,34 +467,34 @@ export function createRoutes() {
450
467
  commands: {
451
468
  // Application Endpoints
452
469
  commands: (applicationId, withLocalizations)=>{
453
- let url = `/applications/${applicationId}/commands?`;
470
+ let url = `/applications/${encode(applicationId)}/commands?`;
454
471
  if (withLocalizations !== undefined) {
455
- url += `with_localizations=${withLocalizations.toString()}`;
472
+ url += `with_localizations=${encode(withLocalizations)}`;
456
473
  }
457
474
  return url;
458
475
  },
459
476
  guilds: {
460
477
  all (applicationId, guildId, withLocalizations) {
461
- let url = `/applications/${applicationId}/guilds/${guildId}/commands?`;
478
+ let url = `/applications/${encode(applicationId)}/guilds/${encode(guildId)}/commands?`;
462
479
  if (withLocalizations !== undefined) {
463
- url += `with_localizations=${withLocalizations.toString()}`;
480
+ url += `with_localizations=${encode(withLocalizations)}`;
464
481
  }
465
482
  return url;
466
483
  },
467
484
  one (applicationId, guildId, commandId) {
468
- return `/applications/${applicationId}/guilds/${guildId}/commands/${commandId}`;
485
+ return `/applications/${encode(applicationId)}/guilds/${encode(guildId)}/commands/${encode(commandId)}`;
469
486
  }
470
487
  },
471
488
  permissions: (applicationId, guildId)=>{
472
- return `/applications/${applicationId}/guilds/${guildId}/commands/permissions`;
489
+ return `/applications/${encode(applicationId)}/guilds/${encode(guildId)}/commands/permissions`;
473
490
  },
474
491
  permission: (applicationId, guildId, commandId)=>{
475
- return `/applications/${applicationId}/guilds/${guildId}/commands/${commandId}/permissions`;
492
+ return `/applications/${encode(applicationId)}/guilds/${encode(guildId)}/commands/${encode(commandId)}/permissions`;
476
493
  },
477
494
  command: (applicationId, commandId, withLocalizations)=>{
478
- let url = `/applications/${applicationId}/commands/${commandId}?`;
495
+ let url = `/applications/${encode(applicationId)}/commands/${encode(commandId)}?`;
479
496
  if (withLocalizations !== undefined) {
480
- url += `withLocalizations=${withLocalizations.toString()}`;
497
+ url += `withLocalizations=${encode(withLocalizations)}`;
481
498
  }
482
499
  return url;
483
500
  }
@@ -485,13 +502,13 @@ export function createRoutes() {
485
502
  responses: {
486
503
  // Interaction Endpoints
487
504
  callback: (interactionId, token, options)=>{
488
- return `/interactions/${interactionId}/${token}/callback?with_response=${!!options?.withResponse}`;
505
+ return `/interactions/${encode(interactionId)}/${encode(token)}/callback?with_response=${encode(!!options?.withResponse)}`;
489
506
  },
490
507
  original: (interactionId, token)=>{
491
- return `/webhooks/${interactionId}/${token}/messages/@original`;
508
+ return `/webhooks/${encode(interactionId)}/${encode(token)}/messages/@original`;
492
509
  },
493
510
  message: (applicationId, token, messageId)=>{
494
- return `/webhooks/${applicationId}/${token}/messages/${messageId}`;
511
+ return `/webhooks/${encode(applicationId)}/${encode(token)}/messages/${encode(messageId)}`;
495
512
  }
496
513
  }
497
514
  },
@@ -513,58 +530,58 @@ export function createRoutes() {
513
530
  return '/users/@me/connections';
514
531
  },
515
532
  roleConnections: (applicationId)=>{
516
- return `/users/@me/applications/${applicationId}/role-connection`;
533
+ return `/users/@me/applications/${encode(applicationId)}/role-connection`;
517
534
  }
518
535
  },
519
536
  monetization: {
520
537
  entitlements: (applicationId, options)=>{
521
- let url = `/applications/${applicationId}/entitlements?`;
538
+ let url = `/applications/${encode(applicationId)}/entitlements?`;
522
539
  if (options) {
523
- if (options.after) url += `after=${options.after}`;
524
- if (options.before) url += `&before=${options.before}`;
525
- if (options.excludeEnded) url += `&exclude_ended=${options.excludeEnded}`;
526
- if (options.guildId) url += `&guild_id=${options.guildId}`;
527
- if (options.limit) url += `&limit=${options.limit}`;
528
- if (options.skuIds) url += `&sku_ids=${options.skuIds.join(',')}`;
529
- if (options.userId) url += `&user_id=${options.userId}`;
540
+ if (options.after) url += `after=${encode(options.after)}`;
541
+ if (options.before) url += `&before=${encode(options.before)}`;
542
+ if (options.excludeEnded) url += `&exclude_ended=${encode(options.excludeEnded)}`;
543
+ if (options.guildId) url += `&guild_id=${encode(options.guildId)}`;
544
+ if (options.limit) url += `&limit=${encode(options.limit)}`;
545
+ if (options.skuIds) url += `&sku_ids=${encode(options.skuIds.join(','))}`;
546
+ if (options.userId) url += `&user_id=${encode(options.userId)}`;
530
547
  }
531
548
  return url;
532
549
  },
533
550
  entitlement: (applicationId, entitlementId)=>{
534
- return `/applications/${applicationId}/entitlements/${entitlementId}`;
551
+ return `/applications/${encode(applicationId)}/entitlements/${encode(entitlementId)}`;
535
552
  },
536
553
  consumeEntitlement: (applicationId, entitlementId)=>{
537
- return `/applications/${applicationId}/entitlements/${entitlementId}/consume`;
554
+ return `/applications/${encode(applicationId)}/entitlements/${encode(entitlementId)}/consume`;
538
555
  },
539
556
  skus: (applicationId)=>{
540
- return `/applications/${applicationId}/skus`;
557
+ return `/applications/${encode(applicationId)}/skus`;
541
558
  },
542
559
  subscription: (skuId, subscriptionId)=>{
543
- return `/skus/${skuId}/subscriptions/${subscriptionId}`;
560
+ return `/skus/${encode(skuId)}/subscriptions/${encode(subscriptionId)}`;
544
561
  },
545
562
  subscriptions: (skuId, options)=>{
546
- let url = `/skus/${skuId}/subscriptions?`;
563
+ let url = `/skus/${encode(skuId)}/subscriptions?`;
547
564
  if (options) {
548
- if (options.after) url += `after=${options.after}`;
549
- if (options.before) url += `&before=${options.before}`;
550
- if (options.userId) url += `&user_id=${options.userId}`;
551
- if (options.limit) url += `&limit=${options.limit}`;
565
+ if (options.after) url += `after=${encode(options.after)}`;
566
+ if (options.before) url += `&before=${encode(options.before)}`;
567
+ if (options.userId) url += `&user_id=${encode(options.userId)}`;
568
+ if (options.limit) url += `&limit=${encode(options.limit)}`;
552
569
  }
553
570
  return url;
554
571
  }
555
572
  },
556
573
  soundboard: {
557
574
  sendSound: (channelId)=>{
558
- return `/channels/${channelId}`;
575
+ return `/channels/${encode(channelId)}`;
559
576
  },
560
577
  listDefault: ()=>{
561
578
  return `/soundboard-default-sounds`;
562
579
  },
563
580
  guildSounds: (guildId)=>{
564
- return `/guilds/${guildId}/soundboard-sounds`;
581
+ return `/guilds/${encode(guildId)}/soundboard-sounds`;
565
582
  },
566
583
  guildSound: (guildId, soundId)=>{
567
- return `/guilds/${guildId}/soundboard-sounds/${soundId}`;
584
+ return `/guilds/${encode(guildId)}/soundboard-sounds/${encode(soundId)}`;
568
585
  }
569
586
  },
570
587
  lobby: {
@@ -572,36 +589,55 @@ export function createRoutes() {
572
589
  return '/lobbies';
573
590
  },
574
591
  lobby: (lobbyId)=>{
575
- return `/lobbies/${lobbyId}`;
592
+ return `/lobbies/${encode(lobbyId)}`;
576
593
  },
577
594
  member: (lobbyId, userId)=>{
578
- return `/lobbies/${lobbyId}/members/${userId}`;
595
+ return `/lobbies/${encode(lobbyId)}/members/${encode(userId)}`;
579
596
  },
580
597
  leave: (lobbyId)=>{
581
- return `/lobbies/${lobbyId}/members/@me`;
598
+ return `/lobbies/${encode(lobbyId)}/members/@me`;
582
599
  },
583
600
  link: (lobbyId)=>{
584
- return `/lobbies/${lobbyId}/channel-linking`;
601
+ return `/lobbies/${encode(lobbyId)}/channel-linking`;
602
+ },
603
+ membersBulk: (lobbyId)=>{
604
+ return `/lobbies/${encode(lobbyId)}/members/bulk`;
605
+ },
606
+ moderationMetadata: (lobbyId, messageId)=>{
607
+ return `/lobbies/${encode(lobbyId)}/messages/${encode(messageId)}/moderation-metadata`;
608
+ },
609
+ messages: (lobbyId, options)=>{
610
+ let url = `/lobbies/${encode(lobbyId)}/messages?`;
611
+ if (options) {
612
+ if (options.limit) url += `limit=${encode(options.limit)}`;
613
+ }
614
+ return url;
615
+ },
616
+ inviteSelf: (lobbyId)=>{
617
+ return `/lobbies/${encode(lobbyId)}/members/@me/invites`;
618
+ },
619
+ inviteUser: (lobbyId, userId)=>{
620
+ return `/lobbies/${encode(lobbyId)}/members/${encode(userId)}/invites`;
585
621
  }
586
622
  },
587
623
  applicationEmoji (applicationId, emojiId) {
588
- return `/applications/${applicationId}/emojis/${emojiId}`;
624
+ return `/applications/${encode(applicationId)}/emojis/${encode(emojiId)}`;
589
625
  },
590
626
  applicationEmojis (applicationId) {
591
- return `/applications/${applicationId}/emojis`;
627
+ return `/applications/${encode(applicationId)}/emojis`;
592
628
  },
593
629
  applicationRoleConnectionMetadata (applicationId) {
594
- return `/applications/${applicationId}/role-connections/metadata`;
630
+ return `/applications/${encode(applicationId)}/role-connections/metadata`;
595
631
  },
596
632
  // User endpoints
597
633
  user (userId) {
598
- return `/users/${userId}`;
634
+ return `/users/${encode(userId)}`;
599
635
  },
600
636
  application () {
601
637
  return '/applications/@me';
602
638
  },
603
639
  applicationActivityInstance (applicationId, instanceId) {
604
- return `/applications/${applicationId}/activity-instances/${instanceId}`;
640
+ return `/applications/${encode(applicationId)}/activity-instances/${encode(instanceId)}`;
605
641
  },
606
642
  currentUser () {
607
643
  return '/users/@me';
@@ -610,12 +646,17 @@ export function createRoutes() {
610
646
  return '/gateway/bot';
611
647
  },
612
648
  stickerPack (stickerPackId) {
613
- return `/sticker-packs/${stickerPackId}`;
649
+ return `/sticker-packs/${encode(stickerPackId)}`;
614
650
  },
615
651
  stickerPacks () {
616
652
  return '/sticker-packs';
617
653
  }
618
654
  };
619
655
  }
656
+ function encodeComponent(uriComponent) {
657
+ if (typeof uriComponent !== 'string') return uriComponent.toString();
658
+ if (/^\d+$/.test(uriComponent)) return uriComponent;
659
+ return encodeURIComponent(uriComponent);
660
+ }
620
661
 
621
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yb3V0ZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBHZXRNZXNzYWdlc09wdGlvbnMsIEdldFNjaGVkdWxlZEV2ZW50VXNlcnMgfSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7IGlzR2V0TWVzc2FnZXNBZnRlciwgaXNHZXRNZXNzYWdlc0Fyb3VuZCwgaXNHZXRNZXNzYWdlc0JlZm9yZSwgaXNHZXRNZXNzYWdlc0xpbWl0IH0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnXG5pbXBvcnQgdHlwZSB7IFJlc3RSb3V0ZXMgfSBmcm9tICcuL3R5cGluZ3Mvcm91dGVzLmpzJ1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUm91dGVzKCk6IFJlc3RSb3V0ZXMge1xuICByZXR1cm4ge1xuICAgIHdlYmhvb2tzOiB7XG4gICAgICBpZDogKHdlYmhvb2tJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC93ZWJob29rcy8ke3dlYmhvb2tJZH1gXG4gICAgICB9LFxuICAgICAgbWVzc2FnZTogKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICBsZXQgdXJsID0gYC93ZWJob29rcy8ke3dlYmhvb2tJZH0vJHt0b2tlbn0vbWVzc2FnZXMvJHttZXNzYWdlSWR9P2BcblxuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgIGlmIChvcHRpb25zLnRocmVhZElkKSB1cmwgKz0gYHRocmVhZF9pZD0ke29wdGlvbnMudGhyZWFkSWR9YFxuICAgICAgICAgIGlmIChvcHRpb25zLndpdGhDb21wb25lbnRzKSB1cmwgKz0gYCZ3aXRoX2NvbXBvbmVudHM9JHtvcHRpb25zLndpdGhDb21wb25lbnRzfWBcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cmxcbiAgICAgIH0sXG4gICAgICB3ZWJob29rOiAod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykgPT4ge1xuICAgICAgICBsZXQgdXJsID0gYC93ZWJob29rcy8ke3dlYmhvb2tJZH0vJHt0b2tlbn0/YFxuXG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnM/LndhaXQgIT09IHVuZGVmaW5lZCkgdXJsICs9IGB3YWl0PSR7b3B0aW9ucy53YWl0LnRvU3RyaW5nKCl9YFxuICAgICAgICAgIGlmIChvcHRpb25zLnRocmVhZElkKSB1cmwgKz0gYCZ0aHJlYWRfaWQ9JHtvcHRpb25zLnRocmVhZElkfWBcbiAgICAgICAgICBpZiAob3B0aW9ucy53aXRoQ29tcG9uZW50cykgdXJsICs9IGAmd2l0aF9jb21wb25lbnRzPSR7b3B0aW9ucy53aXRoQ29tcG9uZW50c31gXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXJsXG4gICAgICB9LFxuICAgIH0sXG5cbiAgICAvLyBDaGFubmVsIEVuZHBvaW50c1xuICAgIGNoYW5uZWxzOiB7XG4gICAgICBidWxrOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9tZXNzYWdlcy9idWxrLWRlbGV0ZWBcbiAgICAgIH0sXG4gICAgICBkbTogKCkgPT4ge1xuICAgICAgICByZXR1cm4gJy91c2Vycy9AbWUvY2hhbm5lbHMnXG4gICAgICB9LFxuICAgICAgZG1SZWNpcGllbnQ6IChjaGFubmVsSWQsIHVzZXJJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vcmVjaXBpZW50cy8ke3VzZXJJZH1gXG4gICAgICB9LFxuICAgICAgcGluOiAoY2hhbm5lbElkLCBtZXNzYWdlSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3BpbnMvJHttZXNzYWdlSWR9YFxuICAgICAgfSxcbiAgICAgIHBpbnM6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3BpbnNgXG4gICAgICB9LFxuICAgICAgbWVzc2FnZVBpbnM6IChjaGFubmVsSWQsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgbGV0IHVybCA9IGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L21lc3NhZ2VzL3BpbnM/YFxuXG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMuYmVmb3JlKSB1cmwgKz0gYGJlZm9yZT0ke29wdGlvbnMuYmVmb3JlfWBcbiAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCkgdXJsICs9IGAmbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cmxcbiAgICAgIH0sXG4gICAgICBtZXNzYWdlUGluOiAoY2hhbm5lbElkLCBtZXNzYWdlSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L21lc3NhZ2VzL3BpbnMvJHttZXNzYWdlSWR9YFxuICAgICAgfSxcbiAgICAgIHJlYWN0aW9uczoge1xuICAgICAgICBib3Q6IChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgZW1vamkpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vbWVzc2FnZXMvJHttZXNzYWdlSWR9L3JlYWN0aW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChlbW9qaSl9L0BtZWBcbiAgICAgICAgfSxcbiAgICAgICAgdXNlcjogKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBlbW9qaSwgdXNlcklkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L21lc3NhZ2VzLyR7bWVzc2FnZUlkfS9yZWFjdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoZW1vamkpfS8ke3VzZXJJZH1gXG4gICAgICAgIH0sXG4gICAgICAgIGFsbDogKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L21lc3NhZ2VzLyR7bWVzc2FnZUlkfS9yZWFjdGlvbnNgXG4gICAgICAgIH0sXG4gICAgICAgIGVtb2ppOiAoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGVtb2ppLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L21lc3NhZ2VzLyR7bWVzc2FnZUlkfS9yZWFjdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoZW1vamkpfT9gXG5cbiAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMudHlwZSkgdXJsICs9IGB0eXBlPSR7b3B0aW9ucy50eXBlfWBcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmFmdGVyKSB1cmwgKz0gYCZhZnRlcj0ke29wdGlvbnMuYWZ0ZXJ9YFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMubGltaXQpIHVybCArPSBgJmxpbWl0PSR7b3B0aW9ucy5saW1pdH1gXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICB9LFxuICAgICAgICBtZXNzYWdlOiAoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGVtb2ppLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L21lc3NhZ2VzLyR7bWVzc2FnZUlkfS9yZWFjdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoZW1vamkpfT9gXG5cbiAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXIpIHVybCArPSBgYWZ0ZXI9JHtvcHRpb25zLmFmdGVyfWBcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0KSB1cmwgKz0gYCZsaW1pdD0ke29wdGlvbnMubGltaXR9YFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB3ZWJob29rczogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vd2ViaG9va3NgXG4gICAgICB9LFxuXG4gICAgICBjaGFubmVsOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfWBcbiAgICAgIH0sXG5cbiAgICAgIGZvbGxvdzogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vZm9sbG93ZXJzYFxuICAgICAgfSxcblxuICAgICAgZm9ydW06IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3RocmVhZHNgXG4gICAgICB9LFxuXG4gICAgICBpbnZpdGVzOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9pbnZpdGVzYFxuICAgICAgfSxcblxuICAgICAgbWVzc2FnZTogKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9tZXNzYWdlcy8ke21lc3NhZ2VJZH1gXG4gICAgICB9LFxuXG4gICAgICBtZXNzYWdlczogKGNoYW5uZWxJZCwgb3B0aW9ucz86IEdldE1lc3NhZ2VzT3B0aW9ucykgPT4ge1xuICAgICAgICBsZXQgdXJsID0gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vbWVzc2FnZXM/YFxuXG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKGlzR2V0TWVzc2FnZXNBZnRlcihvcHRpb25zKSAmJiBvcHRpb25zLmFmdGVyKSB7XG4gICAgICAgICAgICB1cmwgKz0gYGFmdGVyPSR7b3B0aW9ucy5hZnRlcn1gXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc0dldE1lc3NhZ2VzQmVmb3JlKG9wdGlvbnMpICYmIG9wdGlvbnMuYmVmb3JlKSB7XG4gICAgICAgICAgICB1cmwgKz0gYCZiZWZvcmU9JHtvcHRpb25zLmJlZm9yZX1gXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc0dldE1lc3NhZ2VzQXJvdW5kKG9wdGlvbnMpICYmIG9wdGlvbnMuYXJvdW5kKSB7XG4gICAgICAgICAgICB1cmwgKz0gYCZhcm91bmQ9JHtvcHRpb25zLmFyb3VuZH1gXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc0dldE1lc3NhZ2VzTGltaXQob3B0aW9ucykgJiYgb3B0aW9ucy5saW1pdCkge1xuICAgICAgICAgICAgdXJsICs9IGAmbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXJsXG4gICAgICB9LFxuXG4gICAgICBvdmVyd3JpdGU6IChjaGFubmVsSWQsIG92ZXJ3cml0ZUlkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9wZXJtaXNzaW9ucy8ke292ZXJ3cml0ZUlkfWBcbiAgICAgIH0sXG5cbiAgICAgIGNyb3NzcG9zdDogKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9tZXNzYWdlcy8ke21lc3NhZ2VJZH0vY3Jvc3Nwb3N0YFxuICAgICAgfSxcblxuICAgICAgc3RhZ2VzOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiAnL3N0YWdlLWluc3RhbmNlcydcbiAgICAgIH0sXG5cbiAgICAgIHN0YWdlOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL3N0YWdlLWluc3RhbmNlcy8ke2NoYW5uZWxJZH1gXG4gICAgICB9LFxuXG4gICAgICAvLyBUaHJlYWQgRW5kcG9pbnRzXG4gICAgICB0aHJlYWRzOiB7XG4gICAgICAgIG1lc3NhZ2U6IChjaGFubmVsSWQsIG1lc3NhZ2VJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9tZXNzYWdlcy8ke21lc3NhZ2VJZH0vdGhyZWFkc2BcbiAgICAgICAgfSxcbiAgICAgICAgYWxsOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3RocmVhZHNgXG4gICAgICAgIH0sXG4gICAgICAgIGFjdGl2ZTogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS90aHJlYWRzL2FjdGl2ZWBcbiAgICAgICAgfSxcbiAgICAgICAgbWVtYmVyczogKGNoYW5uZWxJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgIGxldCB1cmwgPSBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS90aHJlYWQtbWVtYmVycz9gXG5cbiAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMud2l0aE1lbWJlcikgdXJsICs9IGB3aXRoX21lbWJlcj0ke29wdGlvbnMud2l0aE1lbWJlcn1gXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCkgdXJsICs9IGAmbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmFmdGVyKSB1cmwgKz0gYCZhZnRlcj0ke29wdGlvbnMuYWZ0ZXJ9YFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgfSxcbiAgICAgICAgbWU6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vdGhyZWFkLW1lbWJlcnMvQG1lYFxuICAgICAgICB9LFxuICAgICAgICBnZXRVc2VyKGNoYW5uZWxJZCwgdXNlcklkLCBvcHRpb25zKSB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3RocmVhZC1tZW1iZXJzLyR7dXNlcklkfT9gXG5cbiAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMud2l0aE1lbWJlcikgdXJsICs9IGB3aXRoX21lbWJlcj0ke29wdGlvbnMud2l0aE1lbWJlcn1gXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICB9LFxuICAgICAgICB1c2VyOiAoY2hhbm5lbElkLCB1c2VySWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vdGhyZWFkLW1lbWJlcnMvJHt1c2VySWR9YFxuICAgICAgICB9LFxuICAgICAgICBhcmNoaXZlZDogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS90aHJlYWRzL2FyY2hpdmVkYFxuICAgICAgICB9LFxuICAgICAgICBwdWJsaWM6IChjaGFubmVsSWQsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICBsZXQgdXJsID0gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vdGhyZWFkcy9hcmNoaXZlZC9wdWJsaWM/YFxuXG4gICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmJlZm9yZSkge1xuICAgICAgICAgICAgICB1cmwgKz0gYGJlZm9yZT0ke25ldyBEYXRlKG9wdGlvbnMuYmVmb3JlKS50b0lTT1N0cmluZygpfWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0KSB1cmwgKz0gYCZsaW1pdD0ke29wdGlvbnMubGltaXR9YFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgfSxcbiAgICAgICAgcHJpdmF0ZTogKGNoYW5uZWxJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgIGxldCB1cmwgPSBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS90aHJlYWRzL2FyY2hpdmVkL3ByaXZhdGU/YFxuXG4gICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmJlZm9yZSkge1xuICAgICAgICAgICAgICB1cmwgKz0gYGJlZm9yZT0ke25ldyBEYXRlKG9wdGlvbnMuYmVmb3JlKS50b0lTT1N0cmluZygpfWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0KSB1cmwgKz0gYCZsaW1pdD0ke29wdGlvbnMubGltaXR9YFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgfSxcbiAgICAgICAgam9pbmVkOiAoY2hhbm5lbElkLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3VzZXJzL0BtZS90aHJlYWRzL2FyY2hpdmVkL3ByaXZhdGU/YFxuXG4gICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmJlZm9yZSkge1xuICAgICAgICAgICAgICB1cmwgKz0gYGJlZm9yZT0ke25ldyBEYXRlKG9wdGlvbnMuYmVmb3JlKS50b0lTT1N0cmluZygpfWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0KSB1cmwgKz0gYCZsaW1pdD0ke29wdGlvbnMubGltaXR9YFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgfSxcbiAgICAgIH0sXG5cbiAgICAgIHR5cGluZzogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vdHlwaW5nYFxuICAgICAgfSxcblxuICAgICAgcG9sbHM6IHtcbiAgICAgICAgdm90ZXM6IChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYW5zd2VySWQsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICBsZXQgdXJsID0gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vcG9sbHMvJHttZXNzYWdlSWR9L2Fuc3dlcnMvJHthbnN3ZXJJZH0/YFxuXG4gICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmFmdGVyKSB1cmwgKz0gYGFmdGVyPSR7b3B0aW9ucy5hZnRlcn1gXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCkgdXJsICs9IGAmbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgIH0sXG4gICAgICAgIGV4cGlyZTogKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3BvbGxzLyR7bWVzc2FnZUlkfS9leHBpcmVgXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG5cbiAgICAvLyBHdWlsZCBFbmRwb2ludHNcbiAgICBndWlsZHM6IHtcbiAgICAgIGFsbDogKCkgPT4ge1xuICAgICAgICByZXR1cm4gJy9ndWlsZHMnXG4gICAgICB9LFxuICAgICAgdXNlckd1aWxkczogKG9wdGlvbnMpID0+IHtcbiAgICAgICAgbGV0IHVybCA9ICcvdXNlcnMvQG1lL2d1aWxkcz8nXG5cbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5hZnRlcikgdXJsICs9IGBhZnRlcj0ke29wdGlvbnMuYWZ0ZXJ9YFxuICAgICAgICAgIGlmIChvcHRpb25zLmJlZm9yZSkgdXJsICs9IGAmYmVmb3JlPSR7b3B0aW9ucy5iZWZvcmV9YFxuICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0KSB1cmwgKz0gYCZsaW1pdD0ke29wdGlvbnMubGltaXR9YFxuICAgICAgICAgIGlmIChvcHRpb25zLndpdGhDb3VudHMpIHVybCArPSBgJndpdGhfY291bnRzPSR7b3B0aW9ucy53aXRoQ291bnRzfWBcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cmxcbiAgICAgIH0sXG4gICAgICBhdWRpdGxvZ3M6IChndWlsZElkLCBvcHRpb25zKSA9PiB7XG4gICAgICAgIGxldCB1cmwgPSBgL2d1aWxkcy8ke2d1aWxkSWR9L2F1ZGl0LWxvZ3M/YFxuXG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMuYWN0aW9uVHlwZSkgdXJsICs9IGBhY3Rpb25fdHlwZT0ke29wdGlvbnMuYWN0aW9uVHlwZX1gXG4gICAgICAgICAgaWYgKG9wdGlvbnMuYmVmb3JlKSB1cmwgKz0gYCZiZWZvcmU9JHtvcHRpb25zLmJlZm9yZX1gXG4gICAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXIpIHVybCArPSBgJmFmdGVyPSR7b3B0aW9ucy5hZnRlcn1gXG4gICAgICAgICAgaWYgKG9wdGlvbnMubGltaXQpIHVybCArPSBgJmxpbWl0PSR7b3B0aW9ucy5saW1pdH1gXG4gICAgICAgICAgaWYgKG9wdGlvbnMudXNlcklkKSB1cmwgKz0gYCZ1c2VyX2lkPSR7b3B0aW9ucy51c2VySWR9YFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfSxcbiAgICAgIGF1dG9tb2Q6IHtcbiAgICAgICAgcnVsZTogKGd1aWxkSWQsIHJ1bGVJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L2F1dG8tbW9kZXJhdGlvbi9ydWxlcy8ke3J1bGVJZH1gXG4gICAgICAgIH0sXG4gICAgICAgIHJ1bGVzOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L2F1dG8tbW9kZXJhdGlvbi9ydWxlc2BcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBjaGFubmVsczogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vY2hhbm5lbHNgXG4gICAgICB9LFxuICAgICAgZW1vamk6IChndWlsZElkLCBlbW9qaUlkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L2Vtb2ppcy8ke2Vtb2ppSWR9YFxuICAgICAgfSxcbiAgICAgIGVtb2ppczogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vZW1vamlzYFxuICAgICAgfSxcbiAgICAgIGV2ZW50czoge1xuICAgICAgICBldmVudHM6IChndWlsZElkLCB3aXRoVXNlckNvdW50PzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIGxldCB1cmwgPSBgL2d1aWxkcy8ke2d1aWxkSWR9L3NjaGVkdWxlZC1ldmVudHM/YFxuXG4gICAgICAgICAgaWYgKHdpdGhVc2VyQ291bnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdXJsICs9IGB3aXRoX3VzZXJfY291bnQ9JHt3aXRoVXNlckNvdW50LnRvU3RyaW5nKCl9YFxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgIH0sXG4gICAgICAgIGV2ZW50OiAoZ3VpbGRJZCwgZXZlbnRJZCwgd2l0aFVzZXJDb3VudD86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtndWlsZElkfS9zY2hlZHVsZWQtZXZlbnRzLyR7ZXZlbnRJZH1gXG5cbiAgICAgICAgICBpZiAod2l0aFVzZXJDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB1cmwgKz0gYHdpdGhfdXNlcl9jb3VudD0ke3dpdGhVc2VyQ291bnQudG9TdHJpbmcoKX1gXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICB9LFxuICAgICAgICB1c2VyczogKGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnM/OiBHZXRTY2hlZHVsZWRFdmVudFVzZXJzKSA9PiB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvZ3VpbGRzLyR7Z3VpbGRJZH0vc2NoZWR1bGVkLWV2ZW50cy8ke2V2ZW50SWR9L3VzZXJzP2BcblxuICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCAhPT0gdW5kZWZpbmVkKSB1cmwgKz0gYGxpbWl0PSR7b3B0aW9ucy5saW1pdH1gXG4gICAgICAgICAgICBpZiAob3B0aW9ucy53aXRoTWVtYmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdXJsICs9IGAmd2l0aF9tZW1iZXI9JHtvcHRpb25zLndpdGhNZW1iZXIudG9TdHJpbmcoKX1gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5hZnRlciAhPT0gdW5kZWZpbmVkKSB1cmwgKz0gYCZhZnRlcj0ke29wdGlvbnMuYWZ0ZXJ9YFxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYmVmb3JlICE9PSB1bmRlZmluZWQpIHVybCArPSBgJmJlZm9yZT0ke29wdGlvbnMuYmVmb3JlfWBcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgZ3VpbGQoZ3VpbGRJZCwgd2l0aENvdW50cykge1xuICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtndWlsZElkfT9gXG5cbiAgICAgICAgaWYgKHdpdGhDb3VudHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHVybCArPSBgd2l0aF9jb3VudHM9JHt3aXRoQ291bnRzLnRvU3RyaW5nKCl9YFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfSxcbiAgICAgIGludGVncmF0aW9uKGd1aWxkSWQsIGludGVncmF0aW9uSWQpIHtcbiAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vaW50ZWdyYXRpb25zLyR7aW50ZWdyYXRpb25JZH1gXG4gICAgICB9LFxuICAgICAgaW50ZWdyYXRpb25zOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9pbnRlZ3JhdGlvbnM/aW5jbHVkZV9hcHBsaWNhdGlvbnM9dHJ1ZWBcbiAgICAgIH0sXG4gICAgICBpbnZpdGUoaW52aXRlQ29kZSwgb3B0aW9ucykge1xuICAgICAgICBsZXQgdXJsID0gYC9pbnZpdGVzLyR7aW52aXRlQ29kZX0/YFxuXG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMud2l0aENvdW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB1cmwgKz0gYHdpdGhfY291bnRzPSR7b3B0aW9ucy53aXRoQ291bnRzLnRvU3RyaW5nKCl9YFxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob3B0aW9ucy5zY2hlZHVsZWRFdmVudElkKSB7XG4gICAgICAgICAgICB1cmwgKz0gYCZndWlsZF9zY2hlZHVsZWRfZXZlbnRfaWQ9JHtvcHRpb25zLnNjaGVkdWxlZEV2ZW50SWR9YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cmxcbiAgICAgIH0sXG4gICAgICBpbnZpdGVzOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9pbnZpdGVzYFxuICAgICAgfSxcbiAgICAgIGxlYXZlOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC91c2Vycy9AbWUvZ3VpbGRzLyR7Z3VpbGRJZH1gXG4gICAgICB9LFxuICAgICAgbWVtYmVyczoge1xuICAgICAgICBiYW46IChndWlsZElkLCB1c2VySWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9iYW5zLyR7dXNlcklkfWBcbiAgICAgICAgfSxcbiAgICAgICAgYmFuczogKGd1aWxkSWQsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtndWlsZElkfS9iYW5zP2BcblxuICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCkgdXJsICs9IGBsaW1pdD0ke29wdGlvbnMubGltaXR9YFxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXIpIHVybCArPSBgJmFmdGVyPSR7b3B0aW9ucy5hZnRlcn1gXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5iZWZvcmUpIHVybCArPSBgJmJlZm9yZT0ke29wdGlvbnMuYmVmb3JlfWBcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgIH0sXG4gICAgICAgIGJ1bGtCYW46IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vYnVsay1iYW5gXG4gICAgICAgIH0sXG4gICAgICAgIGJvdDogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9tZW1iZXJzL0BtZWBcbiAgICAgICAgfSxcbiAgICAgICAgbWVtYmVyOiAoZ3VpbGRJZCwgdXNlcklkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vbWVtYmVycy8ke3VzZXJJZH1gXG4gICAgICAgIH0sXG4gICAgICAgIGN1cnJlbnRNZW1iZXI6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvdXNlcnMvQG1lL2d1aWxkcy8ke2d1aWxkSWR9L21lbWJlcmBcbiAgICAgICAgfSxcbiAgICAgICAgbWVtYmVyczogKGd1aWxkSWQsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtndWlsZElkfS9tZW1iZXJzP2BcblxuICAgICAgICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0KSB1cmwgKz0gYGxpbWl0PSR7b3B0aW9ucy5saW1pdH1gXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5hZnRlcikgdXJsICs9IGAmYWZ0ZXI9JHtvcHRpb25zLmFmdGVyfWBcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgIH0sXG4gICAgICAgIHNlYXJjaDogKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvZ3VpbGRzLyR7Z3VpbGRJZH0vbWVtYmVycy9zZWFyY2g/cXVlcnk9JHtlbmNvZGVVUklDb21wb25lbnQocXVlcnkpfWBcblxuICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCAhPT0gdW5kZWZpbmVkKSB1cmwgKz0gYCZsaW1pdD0ke29wdGlvbnMubGltaXR9YFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgfSxcbiAgICAgICAgcHJ1bmU6IChndWlsZElkLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvZ3VpbGRzLyR7Z3VpbGRJZH0vcHJ1bmU/YFxuXG4gICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmRheXMpIHVybCArPSBgZGF5cz0ke29wdGlvbnMuZGF5c31gXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLmluY2x1ZGVSb2xlcykpIHtcbiAgICAgICAgICAgICAgdXJsICs9IGAmaW5jbHVkZV9yb2xlcz0ke29wdGlvbnMuaW5jbHVkZVJvbGVzLmpvaW4oJywnKX1gXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaW5jbHVkZVJvbGVzKSB7XG4gICAgICAgICAgICAgIHVybCArPSBgJmluY2x1ZGVfcm9sZXM9JHtvcHRpb25zLmluY2x1ZGVSb2xlc31gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHByZXZpZXc6IChndWlsZElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L3ByZXZpZXdgXG4gICAgICB9LFxuICAgICAgcHJ1bmU6IChndWlsZElkLCBvcHRpb25zKSA9PiB7XG4gICAgICAgIGxldCB1cmwgPSBgL2d1aWxkcy8ke2d1aWxkSWR9L3BydW5lP2BcblxuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgIGlmIChvcHRpb25zLmRheXMpIHVybCArPSBgZGF5cz0ke29wdGlvbnMuZGF5c31gXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy5pbmNsdWRlUm9sZXMpKSB7XG4gICAgICAgICAgICB1cmwgKz0gYCZpbmNsdWRlX3JvbGVzPSR7b3B0aW9ucy5pbmNsdWRlUm9sZXMuam9pbignLCcpfWBcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaW5jbHVkZVJvbGVzKSB7XG4gICAgICAgICAgICB1cmwgKz0gYCZpbmNsdWRlX3JvbGVzPSR7b3B0aW9ucy5pbmNsdWRlUm9sZXN9YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cmxcbiAgICAgIH0sXG4gICAgICByb2xlczoge1xuICAgICAgICBvbmU6IChndWlsZElkLCByb2xlSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9yb2xlcy8ke3JvbGVJZH1gXG4gICAgICAgIH0sXG4gICAgICAgIGFsbDogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9yb2xlc2BcbiAgICAgICAgfSxcbiAgICAgICAgbWVtYmVyOiAoZ3VpbGRJZCwgbWVtYmVySWQsIHJvbGVJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L21lbWJlcnMvJHttZW1iZXJJZH0vcm9sZXMvJHtyb2xlSWR9YFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHN0aWNrZXJzOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9zdGlja2Vyc2BcbiAgICAgIH0sXG4gICAgICBzdGlja2VyOiAoZ3VpbGRJZCwgc3RpY2tlcklkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L3N0aWNrZXJzLyR7c3RpY2tlcklkfWBcbiAgICAgIH0sXG4gICAgICB2b2ljZTogKGd1aWxkSWQsIHVzZXJJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS92b2ljZS1zdGF0ZXMvJHt1c2VySWQgPz8gJ0BtZSd9YFxuICAgICAgfSxcbiAgICAgIHRlbXBsYXRlczoge1xuICAgICAgICBjb2RlOiAoY29kZSkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2d1aWxkcy90ZW1wbGF0ZXMvJHtjb2RlfWBcbiAgICAgICAgfSxcbiAgICAgICAgZ3VpbGQ6IChndWlsZElkLCBjb2RlKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vdGVtcGxhdGVzLyR7Y29kZX1gXG4gICAgICAgIH0sXG4gICAgICAgIGFsbDogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS90ZW1wbGF0ZXNgXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdmFuaXR5OiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS92YW5pdHktdXJsYFxuICAgICAgfSxcbiAgICAgIHJlZ2lvbnM6IChndWlsZElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L3JlZ2lvbnNgXG4gICAgICB9LFxuICAgICAgd2ViaG9va3M6IChndWlsZElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L3dlYmhvb2tzYFxuICAgICAgfSxcbiAgICAgIHdlbGNvbWU6IChndWlsZElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L3dlbGNvbWUtc2NyZWVuYFxuICAgICAgfSxcbiAgICAgIHdpZGdldDogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vd2lkZ2V0YFxuICAgICAgfSxcbiAgICAgIHdpZGdldEpzb246IChndWlsZElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L3dpZGdldC5qc29uYFxuICAgICAgfSxcbiAgICAgIG9uYm9hcmRpbmc6IChndWlsZElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L29uYm9hcmRpbmdgXG4gICAgICB9LFxuICAgICAgaW5jaWRlbnRBY3Rpb25zOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9pbmNpZGVudC1hY3Rpb25zYFxuICAgICAgfSxcbiAgICB9LFxuXG4gICAgc3RpY2tlcjogKHN0aWNrZXJJZCkgPT4ge1xuICAgICAgcmV0dXJuIGAvc3RpY2tlcnMvJHtzdGlja2VySWR9YFxuICAgIH0sXG5cbiAgICByZWdpb25zOiAoKSA9PiB7XG4gICAgICByZXR1cm4gJy92b2ljZS9yZWdpb25zJ1xuICAgIH0sXG5cbiAgICAvLyBJbnRlcmFjdGlvbiBFbmRwb2ludHNcbiAgICBpbnRlcmFjdGlvbnM6IHtcbiAgICAgIGNvbW1hbmRzOiB7XG4gICAgICAgIC8vIEFwcGxpY2F0aW9uIEVuZHBvaW50c1xuICAgICAgICBjb21tYW5kczogKGFwcGxpY2F0aW9uSWQsIHdpdGhMb2NhbGl6YXRpb25zKSA9PiB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvYXBwbGljYXRpb25zLyR7YXBwbGljYXRpb25JZH0vY29tbWFuZHM/YFxuXG4gICAgICAgICAgaWYgKHdpdGhMb2NhbGl6YXRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHVybCArPSBgd2l0aF9sb2NhbGl6YXRpb25zPSR7d2l0aExvY2FsaXphdGlvbnMudG9TdHJpbmcoKX1gXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICB9LFxuXG4gICAgICAgIGd1aWxkczoge1xuICAgICAgICAgIGFsbChhcHBsaWNhdGlvbklkLCBndWlsZElkLCB3aXRoTG9jYWxpemF0aW9ucykge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvYXBwbGljYXRpb25zLyR7YXBwbGljYXRpb25JZH0vZ3VpbGRzLyR7Z3VpbGRJZH0vY29tbWFuZHM/YFxuXG4gICAgICAgICAgICBpZiAod2l0aExvY2FsaXphdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB1cmwgKz0gYHdpdGhfbG9jYWxpemF0aW9ucz0ke3dpdGhMb2NhbGl6YXRpb25zLnRvU3RyaW5nKCl9YFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIG9uZShhcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpIHtcbiAgICAgICAgICAgIHJldHVybiBgL2FwcGxpY2F0aW9ucy8ke2FwcGxpY2F0aW9uSWR9L2d1aWxkcy8ke2d1aWxkSWR9L2NvbW1hbmRzLyR7Y29tbWFuZElkfWBcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBwZXJtaXNzaW9uczogKGFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9hcHBsaWNhdGlvbnMvJHthcHBsaWNhdGlvbklkfS9ndWlsZHMvJHtndWlsZElkfS9jb21tYW5kcy9wZXJtaXNzaW9uc2BcbiAgICAgICAgfSxcbiAgICAgICAgcGVybWlzc2lvbjogKGFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2FwcGxpY2F0aW9ucy8ke2FwcGxpY2F0aW9uSWR9L2d1aWxkcy8ke2d1aWxkSWR9L2NvbW1hbmRzLyR7Y29tbWFuZElkfS9wZXJtaXNzaW9uc2BcbiAgICAgICAgfSxcbiAgICAgICAgY29tbWFuZDogKGFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCwgd2l0aExvY2FsaXphdGlvbnMpID0+IHtcbiAgICAgICAgICBsZXQgdXJsID0gYC9hcHBsaWNhdGlvbnMvJHthcHBsaWNhdGlvbklkfS9jb21tYW5kcy8ke2NvbW1hbmRJZH0/YFxuXG4gICAgICAgICAgaWYgKHdpdGhMb2NhbGl6YXRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHVybCArPSBgd2l0aExvY2FsaXphdGlvbnM9JHt3aXRoTG9jYWxpemF0aW9ucy50b1N0cmluZygpfWBcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgIH0sXG4gICAgICB9LFxuXG4gICAgICByZXNwb25zZXM6IHtcbiAgICAgICAgLy8gSW50ZXJhY3Rpb24gRW5kcG9pbnRzXG4gICAgICAgIGNhbGxiYWNrOiAoaW50ZXJhY3Rpb25JZCwgdG9rZW4sIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9pbnRlcmFjdGlvbnMvJHtpbnRlcmFjdGlvbklkfS8ke3Rva2VufS9jYWxsYmFjaz93aXRoX3Jlc3BvbnNlPSR7ISFvcHRpb25zPy53aXRoUmVzcG9uc2V9YFxuICAgICAgICB9LFxuICAgICAgICBvcmlnaW5hbDogKGludGVyYWN0aW9uSWQsIHRva2VuKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvd2ViaG9va3MvJHtpbnRlcmFjdGlvbklkfS8ke3Rva2VufS9tZXNzYWdlcy9Ab3JpZ2luYWxgXG4gICAgICAgIH0sXG4gICAgICAgIG1lc3NhZ2U6IChhcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvd2ViaG9va3MvJHthcHBsaWNhdGlvbklkfS8ke3Rva2VufS9tZXNzYWdlcy8ke21lc3NhZ2VJZH1gXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG5cbiAgICAvLyBPQXV0aDIgZW5kcG9pbnRzXG4gICAgb2F1dGgyOiB7XG4gICAgICB0b2tlbkV4Y2hhbmdlOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiAnL29hdXRoMi90b2tlbidcbiAgICAgIH0sXG4gICAgICB0b2tlblJldm9rZTogKCkgPT4ge1xuICAgICAgICByZXR1cm4gJy9vYXV0aDIvdG9rZW4vcmV2b2tlJ1xuICAgICAgfSxcbiAgICAgIGN1cnJlbnRBdXRob3JpemF0aW9uOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiAnL29hdXRoMi9AbWUnXG4gICAgICB9LFxuICAgICAgYXBwbGljYXRpb246ICgpID0+IHtcbiAgICAgICAgcmV0dXJuICcvb2F1dGgyL2FwcGxpY2F0aW9ucy9AbWUnXG4gICAgICB9LFxuICAgICAgY29ubmVjdGlvbnM6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuICcvdXNlcnMvQG1lL2Nvbm5lY3Rpb25zJ1xuICAgICAgfSxcbiAgICAgIHJvbGVDb25uZWN0aW9uczogKGFwcGxpY2F0aW9uSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvdXNlcnMvQG1lL2FwcGxpY2F0aW9ucy8ke2FwcGxpY2F0aW9uSWR9L3JvbGUtY29ubmVjdGlvbmBcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIG1vbmV0aXphdGlvbjoge1xuICAgICAgZW50aXRsZW1lbnRzOiAoYXBwbGljYXRpb25JZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICBsZXQgdXJsID0gYC9hcHBsaWNhdGlvbnMvJHthcHBsaWNhdGlvbklkfS9lbnRpdGxlbWVudHM/YFxuXG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXIpIHVybCArPSBgYWZ0ZXI9JHtvcHRpb25zLmFmdGVyfWBcbiAgICAgICAgICBpZiAob3B0aW9ucy5iZWZvcmUpIHVybCArPSBgJmJlZm9yZT0ke29wdGlvbnMuYmVmb3JlfWBcbiAgICAgICAgICBpZiAob3B0aW9ucy5leGNsdWRlRW5kZWQpIHVybCArPSBgJmV4Y2x1ZGVfZW5kZWQ9JHtvcHRpb25zLmV4Y2x1ZGVFbmRlZH1gXG4gICAgICAgICAgaWYgKG9wdGlvbnMuZ3VpbGRJZCkgdXJsICs9IGAmZ3VpbGRfaWQ9JHtvcHRpb25zLmd1aWxkSWR9YFxuICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0KSB1cmwgKz0gYCZsaW1pdD0ke29wdGlvbnMubGltaXR9YFxuICAgICAgICAgIGlmIChvcHRpb25zLnNrdUlkcykgdXJsICs9IGAmc2t1X2lkcz0ke29wdGlvbnMuc2t1SWRzLmpvaW4oJywnKX1gXG4gICAgICAgICAgaWYgKG9wdGlvbnMudXNlcklkKSB1cmwgKz0gYCZ1c2VyX2lkPSR7b3B0aW9ucy51c2VySWR9YFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfSxcbiAgICAgIGVudGl0bGVtZW50OiAoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9hcHBsaWNhdGlvbnMvJHthcHBsaWNhdGlvbklkfS9lbnRpdGxlbWVudHMvJHtlbnRpdGxlbWVudElkfWBcbiAgICAgIH0sXG4gICAgICBjb25zdW1lRW50aXRsZW1lbnQ6IChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2FwcGxpY2F0aW9ucy8ke2FwcGxpY2F0aW9uSWR9L2VudGl0bGVtZW50cy8ke2VudGl0bGVtZW50SWR9L2NvbnN1bWVgXG4gICAgICB9LFxuXG4gICAgICBza3VzOiAoYXBwbGljYXRpb25JZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9hcHBsaWNhdGlvbnMvJHthcHBsaWNhdGlvbklkfS9za3VzYFxuICAgICAgfSxcblxuICAgICAgc3Vic2NyaXB0aW9uOiAoc2t1SWQsIHN1YnNjcmlwdGlvbklkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL3NrdXMvJHtza3VJZH0vc3Vic2NyaXB0aW9ucy8ke3N1YnNjcmlwdGlvbklkfWBcbiAgICAgIH0sXG5cbiAgICAgIHN1YnNjcmlwdGlvbnM6IChza3VJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICBsZXQgdXJsID0gYC9za3VzLyR7c2t1SWR9L3N1YnNjcmlwdGlvbnM/YFxuXG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXIpIHVybCArPSBgYWZ0ZXI9JHtvcHRpb25zLmFmdGVyfWBcbiAgICAgICAgICBpZiAob3B0aW9ucy5iZWZvcmUpIHVybCArPSBgJmJlZm9yZT0ke29wdGlvbnMuYmVmb3JlfWBcbiAgICAgICAgICBpZiAob3B0aW9ucy51c2VySWQpIHVybCArPSBgJnVzZXJfaWQ9JHtvcHRpb25zLnVzZXJJZH1gXG4gICAgICAgICAgaWYgKG9wdGlvbnMubGltaXQpIHVybCArPSBgJmxpbWl0PSR7b3B0aW9ucy5saW1pdH1gXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXJsXG4gICAgICB9LFxuICAgIH0sXG5cbiAgICBzb3VuZGJvYXJkOiB7XG4gICAgICBzZW5kU291bmQ6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9YFxuICAgICAgfSxcbiAgICAgIGxpc3REZWZhdWx0OiAoKSA9PiB7XG4gICAgICAgIHJldHVybiBgL3NvdW5kYm9hcmQtZGVmYXVsdC1zb3VuZHNgXG4gICAgICB9LFxuICAgICAgZ3VpbGRTb3VuZHM6IChndWlsZElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L3NvdW5kYm9hcmQtc291bmRzYFxuICAgICAgfSxcbiAgICAgIGd1aWxkU291bmQ6IChndWlsZElkLCBzb3VuZElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L3NvdW5kYm9hcmQtc291bmRzLyR7c291bmRJZH1gXG4gICAgICB9LFxuICAgIH0sXG5cbiAgICBsb2JieToge1xuICAgICAgY3JlYXRlOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiAnL2xvYmJpZXMnXG4gICAgICB9LFxuXG4gICAgICBsb2JieTogKGxvYmJ5SWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvbG9iYmllcy8ke2xvYmJ5SWR9YFxuICAgICAgfSxcblxuICAgICAgbWVtYmVyOiAobG9iYnlJZCwgdXNlcklkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2xvYmJpZXMvJHtsb2JieUlkfS9tZW1iZXJzLyR7dXNlcklkfWBcbiAgICAgIH0sXG5cbiAgICAgIGxlYXZlOiAobG9iYnlJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9sb2JiaWVzLyR7bG9iYnlJZH0vbWVtYmVycy9AbWVgXG4gICAgICB9LFxuXG4gICAgICBsaW5rOiAobG9iYnlJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9sb2JiaWVzLyR7bG9iYnlJZH0vY2hhbm5lbC1saW5raW5nYFxuICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXBwbGljYXRpb25FbW9qaShhcHBsaWNhdGlvbklkLCBlbW9qaUlkKSB7XG4gICAgICByZXR1cm4gYC9hcHBsaWNhdGlvbnMvJHthcHBsaWNhdGlvbklkfS9lbW9qaXMvJHtlbW9qaUlkfWBcbiAgICB9LFxuXG4gICAgYXBwbGljYXRpb25FbW9qaXMoYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGAvYXBwbGljYXRpb25zLyR7YXBwbGljYXRpb25JZH0vZW1vamlzYFxuICAgIH0sXG5cbiAgICBhcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGEoYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGAvYXBwbGljYXRpb25zLyR7YXBwbGljYXRpb25JZH0vcm9sZS1jb25uZWN0aW9ucy9tZXRhZGF0YWBcbiAgICB9LFxuXG4gICAgLy8gVXNlciBlbmRwb2ludHNcbiAgICB1c2VyKHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGAvdXNlcnMvJHt1c2VySWR9YFxuICAgIH0sXG5cbiAgICBhcHBsaWNhdGlvbigpIHtcbiAgICAgIHJldHVybiAnL2FwcGxpY2F0aW9ucy9AbWUnXG4gICAgfSxcblxuICAgIGFwcGxpY2F0aW9uQWN0aXZpdHlJbnN0YW5jZShhcHBsaWNhdGlvbklkLCBpbnN0YW5jZUlkKSB7XG4gICAgICByZXR1cm4gYC9hcHBsaWNhdGlvbnMvJHthcHBsaWNhdGlvbklkfS9hY3Rpdml0eS1pbnN0YW5jZXMvJHtpbnN0YW5jZUlkfWBcbiAgICB9LFxuXG4gICAgY3VycmVudFVzZXIoKSB7XG4gICAgICByZXR1cm4gJy91c2Vycy9AbWUnXG4gICAgfSxcblxuICAgIGdhdGV3YXlCb3QoKSB7XG4gICAgICByZXR1cm4gJy9nYXRld2F5L2JvdCdcbiAgICB9LFxuXG4gICAgc3RpY2tlclBhY2soc3RpY2tlclBhY2tJZCkge1xuICAgICAgcmV0dXJuIGAvc3RpY2tlci1wYWNrcy8ke3N0aWNrZXJQYWNrSWR9YFxuICAgIH0sXG5cbiAgICBzdGlja2VyUGFja3MoKSB7XG4gICAgICByZXR1cm4gJy9zdGlja2VyLXBhY2tzJ1xuICAgIH0sXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJpc0dldE1lc3NhZ2VzQWZ0ZXIiLCJpc0dldE1lc3NhZ2VzQXJvdW5kIiwiaXNHZXRNZXNzYWdlc0JlZm9yZSIsImlzR2V0TWVzc2FnZXNMaW1pdCIsImNyZWF0ZVJvdXRlcyIsIndlYmhvb2tzIiwiaWQiLCJ3ZWJob29rSWQiLCJtZXNzYWdlIiwidG9rZW4iLCJtZXNzYWdlSWQiLCJvcHRpb25zIiwidXJsIiwidGhyZWFkSWQiLCJ3aXRoQ29tcG9uZW50cyIsIndlYmhvb2siLCJ3YWl0IiwidW5kZWZpbmVkIiwidG9TdHJpbmciLCJjaGFubmVscyIsImJ1bGsiLCJjaGFubmVsSWQiLCJkbSIsImRtUmVjaXBpZW50IiwidXNlcklkIiwicGluIiwicGlucyIsIm1lc3NhZ2VQaW5zIiwiYmVmb3JlIiwibGltaXQiLCJtZXNzYWdlUGluIiwicmVhY3Rpb25zIiwiYm90IiwiZW1vamkiLCJlbmNvZGVVUklDb21wb25lbnQiLCJ1c2VyIiwiYWxsIiwidHlwZSIsImFmdGVyIiwiY2hhbm5lbCIsImZvbGxvdyIsImZvcnVtIiwiaW52aXRlcyIsIm1lc3NhZ2VzIiwiYXJvdW5kIiwib3ZlcndyaXRlIiwib3ZlcndyaXRlSWQiLCJjcm9zc3Bvc3QiLCJzdGFnZXMiLCJzdGFnZSIsInRocmVhZHMiLCJhY3RpdmUiLCJndWlsZElkIiwibWVtYmVycyIsIndpdGhNZW1iZXIiLCJtZSIsImdldFVzZXIiLCJhcmNoaXZlZCIsInB1YmxpYyIsIkRhdGUiLCJ0b0lTT1N0cmluZyIsInByaXZhdGUiLCJqb2luZWQiLCJ0eXBpbmciLCJwb2xscyIsInZvdGVzIiwiYW5zd2VySWQiLCJleHBpcmUiLCJndWlsZHMiLCJ1c2VyR3VpbGRzIiwid2l0aENvdW50cyIsImF1ZGl0bG9ncyIsImFjdGlvblR5cGUiLCJhdXRvbW9kIiwicnVsZSIsInJ1bGVJZCIsInJ1bGVzIiwiZW1vamlJZCIsImVtb2ppcyIsImV2ZW50cyIsIndpdGhVc2VyQ291bnQiLCJldmVudCIsImV2ZW50SWQiLCJ1c2VycyIsImd1aWxkIiwiaW50ZWdyYXRpb24iLCJpbnRlZ3JhdGlvbklkIiwiaW50ZWdyYXRpb25zIiwiaW52aXRlIiwiaW52aXRlQ29kZSIsInNjaGVkdWxlZEV2ZW50SWQiLCJsZWF2ZSIsImJhbiIsImJhbnMiLCJidWxrQmFuIiwibWVtYmVyIiwiY3VycmVudE1lbWJlciIsInNlYXJjaCIsInF1ZXJ5IiwicHJ1bmUiLCJkYXlzIiwiQXJyYXkiLCJpc0FycmF5IiwiaW5jbHVkZVJvbGVzIiwiam9pbiIsInByZXZpZXciLCJyb2xlcyIsIm9uZSIsInJvbGVJZCIsIm1lbWJlcklkIiwic3RpY2tlcnMiLCJzdGlja2VyIiwic3RpY2tlcklkIiwidm9pY2UiLCJ0ZW1wbGF0ZXMiLCJjb2RlIiwidmFuaXR5IiwicmVnaW9ucyIsIndlbGNvbWUiLCJ3aWRnZXQiLCJ3aWRnZXRKc29uIiwib25ib2FyZGluZyIsImluY2lkZW50QWN0aW9ucyIsImludGVyYWN0aW9ucyIsImNvbW1hbmRzIiwiYXBwbGljYXRpb25JZCIsIndpdGhMb2NhbGl6YXRpb25zIiwiY29tbWFuZElkIiwicGVybWlzc2lvbnMiLCJwZXJtaXNzaW9uIiwiY29tbWFuZCIsInJlc3BvbnNlcyIsImNhbGxiYWNrIiwiaW50ZXJhY3Rpb25JZCIsIndpdGhSZXNwb25zZSIsIm9yaWdpbmFsIiwib2F1dGgyIiwidG9rZW5FeGNoYW5nZSIsInRva2VuUmV2b2tlIiwiY3VycmVudEF1dGhvcml6YXRpb24iLCJhcHBsaWNhdGlvbiIsImNvbm5lY3Rpb25zIiwicm9sZUNvbm5lY3Rpb25zIiwibW9uZXRpemF0aW9uIiwiZW50aXRsZW1lbnRzIiwiZXhjbHVkZUVuZGVkIiwic2t1SWRzIiwiZW50aXRsZW1lbnQiLCJlbnRpdGxlbWVudElkIiwiY29uc3VtZUVudGl0bGVtZW50Iiwic2t1cyIsInN1YnNjcmlwdGlvbiIsInNrdUlkIiwic3Vic2NyaXB0aW9uSWQiLCJzdWJzY3JpcHRpb25zIiwic291bmRib2FyZCIsInNlbmRTb3VuZCIsImxpc3REZWZhdWx0IiwiZ3VpbGRTb3VuZHMiLCJndWlsZFNvdW5kIiwic291bmRJZCIsImxvYmJ5IiwiY3JlYXRlIiwibG9iYnlJZCIsImxpbmsiLCJhcHBsaWNhdGlvbkVtb2ppIiwiYXBwbGljYXRpb25FbW9qaXMiLCJhcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGEiLCJhcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UiLCJpbnN0YW5jZUlkIiwiY3VycmVudFVzZXIiLCJnYXRld2F5Qm90Iiwic3RpY2tlclBhY2siLCJzdGlja2VyUGFja0lkIiwic3RpY2tlclBhY2tzIl0sIm1hcHBpbmdzIjoiQUFDQSxTQUFTQSxrQkFBa0IsRUFBRUMsbUJBQW1CLEVBQUVDLG1CQUFtQixFQUFFQyxrQkFBa0IsUUFBUSxvQkFBbUI7QUFHcEgsT0FBTyxTQUFTQztJQUNkLE9BQU87UUFDTEMsVUFBVTtZQUNSQyxJQUFJLENBQUNDO2dCQUNILE9BQU8sQ0FBQyxVQUFVLEVBQUVBLFdBQVc7WUFDakM7WUFDQUMsU0FBUyxDQUFDRCxXQUFXRSxPQUFPQyxXQUFXQztnQkFDckMsSUFBSUMsTUFBTSxDQUFDLFVBQVUsRUFBRUws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
662
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yb3V0ZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBHZXRNZXNzYWdlc09wdGlvbnMsIEdldFNjaGVkdWxlZEV2ZW50VXNlcnMgfSBmcm9tICdAZGlzY29yZGVuby90eXBlcyc7XG5pbXBvcnQgeyBpc0dldE1lc3NhZ2VzQWZ0ZXIsIGlzR2V0TWVzc2FnZXNBcm91bmQsIGlzR2V0TWVzc2FnZXNCZWZvcmUsIGlzR2V0TWVzc2FnZXNMaW1pdCB9IGZyb20gJ0BkaXNjb3JkZW5vL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgUmVzdFJvdXRlcyB9IGZyb20gJy4vdHlwaW5ncy9yb3V0ZXMuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGF2YWlsYWJsZSBkaXNjb3JkIEFQSSByb3V0ZXNcbiAqXG4gKiBAcGFyYW0gZGlzYWJsZVVSSUVuY29kZSBEb24ndCBlbmNvZGUgc3RyaW5ncywgZXhjZXB0IHdoZXJlIHJlcXVpcmVkIC0gRGFuZ2VyOiBkaXNhYmxpbmcgVVJJIGVuY29kaW5nIG1heSBsZWFkIHRvIHBhdGggdHJhdmVyc2FsIGlmIHVuc2FmZSBzdHJpbmdzIGFyZSB1c2VkXG4gKiBAcmV0dXJucyBUaGUgYXZhaWxhYmxlIGRpc2NvcmQgQVBJIHJvdXRlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUm91dGVzKGRpc2FibGVVUklFbmNvZGU6IGJvb2xlYW4gPSBmYWxzZSk6IFJlc3RSb3V0ZXMge1xuICBjb25zdCBlbmNvZGU6IHR5cGVvZiBlbmNvZGVDb21wb25lbnQgPSBkaXNhYmxlVVJJRW5jb2RlID8gKHgpID0+IHgudG9TdHJpbmcoKSA6IGVuY29kZUNvbXBvbmVudDtcblxuICByZXR1cm4ge1xuICAgIHdlYmhvb2tzOiB7XG4gICAgICBpZDogKHdlYmhvb2tJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC93ZWJob29rcy8ke2VuY29kZSh3ZWJob29rSWQpfWA7XG4gICAgICB9LFxuICAgICAgbWVzc2FnZTogKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICBsZXQgdXJsID0gYC93ZWJob29rcy8ke2VuY29kZSh3ZWJob29rSWQpfS8ke2VuY29kZSh0b2tlbil9L21lc3NhZ2VzLyR7ZW5jb2RlKG1lc3NhZ2VJZCl9P2A7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy50aHJlYWRJZCkgdXJsICs9IGB0aHJlYWRfaWQ9JHtlbmNvZGUob3B0aW9ucy50aHJlYWRJZCl9YDtcbiAgICAgICAgICBpZiAob3B0aW9ucy53aXRoQ29tcG9uZW50cykgdXJsICs9IGAmd2l0aF9jb21wb25lbnRzPSR7ZW5jb2RlKG9wdGlvbnMud2l0aENvbXBvbmVudHMpfWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXJsO1xuICAgICAgfSxcbiAgICAgIHdlYmhvb2s6ICh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSA9PiB7XG4gICAgICAgIGxldCB1cmwgPSBgL3dlYmhvb2tzLyR7ZW5jb2RlKHdlYmhvb2tJZCl9LyR7ZW5jb2RlKHRva2VuKX0/YDtcblxuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgIGlmIChvcHRpb25zPy53YWl0ICE9PSB1bmRlZmluZWQpIHVybCArPSBgd2FpdD0ke2VuY29kZShvcHRpb25zLndhaXQpfWA7XG4gICAgICAgICAgaWYgKG9wdGlvbnMudGhyZWFkSWQpIHVybCArPSBgJnRocmVhZF9pZD0ke2VuY29kZShvcHRpb25zLnRocmVhZElkKX1gO1xuICAgICAgICAgIGlmIChvcHRpb25zLndpdGhDb21wb25lbnRzKSB1cmwgKz0gYCZ3aXRoX2NvbXBvbmVudHM9JHtlbmNvZGUob3B0aW9ucy53aXRoQ29tcG9uZW50cyl9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cmw7XG4gICAgICB9LFxuICAgIH0sXG5cbiAgICAvLyBDaGFubmVsIEVuZHBvaW50c1xuICAgIGNoYW5uZWxzOiB7XG4gICAgICBidWxrOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7ZW5jb2RlKGNoYW5uZWxJZCl9L21lc3NhZ2VzL2J1bGstZGVsZXRlYDtcbiAgICAgIH0sXG4gICAgICBkbTogKCkgPT4ge1xuICAgICAgICByZXR1cm4gJy91c2Vycy9AbWUvY2hhbm5lbHMnO1xuICAgICAgfSxcbiAgICAgIGRtUmVjaXBpZW50OiAoY2hhbm5lbElkLCB1c2VySWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtlbmNvZGUoY2hhbm5lbElkKX0vcmVjaXBpZW50cy8ke2VuY29kZSh1c2VySWQpfWA7XG4gICAgICB9LFxuICAgICAgcGluOiAoY2hhbm5lbElkLCBtZXNzYWdlSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtlbmNvZGUoY2hhbm5lbElkKX0vcGlucy8ke2VuY29kZShtZXNzYWdlSWQpfWA7XG4gICAgICB9LFxuICAgICAgcGluczogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2VuY29kZShjaGFubmVsSWQpfS9waW5zYDtcbiAgICAgIH0sXG4gICAgICBtZXNzYWdlUGluczogKGNoYW5uZWxJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICBsZXQgdXJsID0gYC9jaGFubmVscy8ke2VuY29kZShjaGFubmVsSWQpfS9tZXNzYWdlcy9waW5zP2A7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5iZWZvcmUpIHVybCArPSBgYmVmb3JlPSR7ZW5jb2RlKG9wdGlvbnMuYmVmb3JlKX1gO1xuICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0KSB1cmwgKz0gYCZsaW1pdD0ke2VuY29kZShvcHRpb25zLmxpbWl0KX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICAgIH0sXG4gICAgICBtZXNzYWdlUGluOiAoY2hhbm5lbElkLCBtZXNzYWdlSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtlbmNvZGUoY2hhbm5lbElkKX0vbWVzc2FnZXMvcGlucy8ke2VuY29kZShtZXNzYWdlSWQpfWA7XG4gICAgICB9LFxuICAgICAgcmVhY3Rpb25zOiB7XG4gICAgICAgIGJvdDogKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBlbW9qaSkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7ZW5jb2RlKGNoYW5uZWxJZCl9L21lc3NhZ2VzLyR7ZW5jb2RlKG1lc3NhZ2VJZCl9L3JlYWN0aW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChlbW9qaSl9L0BtZWA7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZXI6IChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgZW1vamksIHVzZXJJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7ZW5jb2RlKGNoYW5uZWxJZCl9L21lc3NhZ2VzLyR7ZW5jb2RlKG1lc3NhZ2VJZCl9L3JlYWN0aW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChlbW9qaSl9LyR7ZW5jb2RlKHVzZXJJZCl9YDtcbiAgICAgICAgfSxcbiAgICAgICAgYWxsOiAoY2hhbm5lbElkLCBtZXNzYWdlSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2VuY29kZShjaGFubmVsSWQpfS9tZXNzYWdlcy8ke2VuY29kZShtZXNzYWdlSWQpfS9yZWFjdGlvbnNgO1xuICAgICAgICB9LFxuICAgICAgICBlbW9qaTogKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBlbW9qaSwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgIGxldCB1cmwgPSBgL2NoYW5uZWxzLyR7ZW5jb2RlKGNoYW5uZWxJZCl9L21lc3NhZ2VzLyR7ZW5jb2RlKG1lc3NhZ2VJZCl9L3JlYWN0aW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChlbW9qaSl9P2A7XG5cbiAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMudHlwZSkgdXJsICs9IGB0eXBlPSR7ZW5jb2RlKG9wdGlvbnMudHlwZSl9YDtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmFmdGVyKSB1cmwgKz0gYCZhZnRlcj0ke2VuY29kZShvcHRpb25zLmFmdGVyKX1gO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMubGltaXQpIHVybCArPSBgJmxpbWl0PSR7ZW5jb2RlKG9wdGlvbnMubGltaXQpfWA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybDtcbiAgICAgICAgfSxcbiAgICAgICAgbWVzc2FnZTogKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBlbW9qaSwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgIGxldCB1cmwgPSBgL2NoYW5uZWxzLyR7ZW5jb2RlKGNoYW5uZWxJZCl9L21lc3NhZ2VzLyR7ZW5jb2RlKG1lc3NhZ2VJZCl9L3JlYWN0aW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChlbW9qaSl9P2A7XG5cbiAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMudHlwZSkgdXJsICs9IGB0eXBlPSR7ZW5jb2RlKG9wdGlvbnMudHlwZSl9YDtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmFmdGVyKSB1cmwgKz0gYGFmdGVyPSR7ZW5jb2RlKG9wdGlvbnMuYWZ0ZXIpfWA7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCkgdXJsICs9IGAmbGltaXQ9JHtlbmNvZGUob3B0aW9ucy5saW1pdCl9YDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdXJsO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHdlYmhvb2tzOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7ZW5jb2RlKGNoYW5uZWxJZCl9L3dlYmhvb2tzYDtcbiAgICAgIH0sXG5cbiAgICAgIGNoYW5uZWw6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtlbmNvZGUoY2hhbm5lbElkKX1gO1xuICAgICAgfSxcblxuICAgICAgZm9sbG93OiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7ZW5jb2RlKGNoYW5uZWxJZCl9L2ZvbGxvd2Vyc2A7XG4gICAgICB9LFxuXG4gICAgICBmb3J1bTogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2VuY29kZShjaGFubmVsSWQpfS90aHJlYWRzYDtcbiAgICAgIH0sXG5cbiAgICAgIGludml0ZXM6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtlbmNvZGUoY2hhbm5lbElkKX0vaW52aXRlc2A7XG4gICAgICB9LFxuXG4gICAgICBtZXNzYWdlOiAoY2hhbm5lbElkLCBtZXNzYWdlSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtlbmNvZGUoY2hhbm5lbElkKX0vbWVzc2FnZXMvJHtlbmNvZGUobWVzc2FnZUlkKX1gO1xuICAgICAgfSxcblxuICAgICAgbWVzc2FnZXM6IChjaGFubmVsSWQsIG9wdGlvbnM/OiBHZXRNZXNzYWdlc09wdGlvbnMpID0+IHtcbiAgICAgICAgbGV0IHVybCA9IGAvY2hhbm5lbHMvJHtlbmNvZGUoY2hhbm5lbElkKX0vbWVzc2FnZXM/YDtcblxuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgIGlmIChpc0dldE1lc3NhZ2VzQWZ0ZXIob3B0aW9ucykgJiYgb3B0aW9ucy5hZnRlcikge1xuICAgICAgICAgICAgdXJsICs9IGBhZnRlcj0ke2VuY29kZShvcHRpb25zLmFmdGVyKX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNHZXRNZXNzYWdlc0JlZm9yZShvcHRpb25zKSAmJiBvcHRpb25zLmJlZm9yZSkge1xuICAgICAgICAgICAgdXJsICs9IGAmYmVmb3JlPSR7ZW5jb2RlKG9wdGlvbnMuYmVmb3JlKX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNHZXRNZXNzYWdlc0Fyb3VuZChvcHRpb25zKSAmJiBvcHRpb25zLmFyb3VuZCkge1xuICAgICAgICAgICAgdXJsICs9IGAmYXJvdW5kPSR7ZW5jb2RlKG9wdGlvbnMuYXJvdW5kKX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNHZXRNZXNzYWdlc0xpbWl0KG9wdGlvbnMpICYmIG9wdGlvbnMubGltaXQpIHtcbiAgICAgICAgICAgIHVybCArPSBgJmxpbWl0PSR7ZW5jb2RlKG9wdGlvbnMubGltaXQpfWA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICAgIH0sXG5cbiAgICAgIG92ZXJ3cml0ZTogKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtlbmNvZGUoY2hhbm5lbElkKX0vcGVybWlzc2lvbnMvJHtlbmNvZGUob3ZlcndyaXRlSWQpfWA7XG4gICAgICB9LFxuXG4gICAgICBjcm9zc3Bvc3Q6IChjaGFubmVsSWQsIG1lc3NhZ2VJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2VuY29kZShjaGFubmVsSWQpfS9tZXNzYWdlcy8ke2VuY29kZShtZXNzYWdlSWQpfS9jcm9zc3Bvc3RgO1xuICAgICAgfSxcblxuICAgICAgc3RhZ2VzOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiAnL3N0YWdlLWluc3RhbmNlcyc7XG4gICAgICB9LFxuXG4gICAgICBzdGFnZTogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9zdGFnZS1pbnN0YW5jZXMvJHtlbmNvZGUoY2hhbm5lbElkKX1gO1xuICAgICAgfSxcblxuICAgICAgLy8gVGhyZWFkIEVuZHBvaW50c1xuICAgICAgdGhyZWFkczoge1xuICAgICAgICBtZXNzYWdlOiAoY2hhbm5lbElkLCBtZXNzYWdlSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2VuY29kZShjaGFubmVsSWQpfS9tZXNzYWdlcy8ke2VuY29kZShtZXNzYWdlSWQpfS90aHJlYWRzYDtcbiAgICAgICAgfSxcbiAgICAgICAgYWxsOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtlbmNvZGUoY2hhbm5lbElkKX0vdGhyZWFkc2A7XG4gICAgICAgIH0sXG4gICAgICAgIGFjdGl2ZTogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtlbmNvZGUoZ3VpbGRJZCl9L3RocmVhZHMvYWN0aXZlYDtcbiAgICAgICAgfSxcbiAgICAgICAgbWVtYmVyczogKGNoYW5uZWxJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgIGxldCB1cmwgPSBgL2NoYW5uZWxzLyR7ZW5jb2RlKGNoYW5uZWxJZCl9L3RocmVhZC1tZW1iZXJzP2A7XG5cbiAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMud2l0aE1lbWJlcikgdXJsICs9IGB3aXRoX21lbWJlcj0ke2VuY29kZShvcHRpb25zLndpdGhNZW1iZXIpfWA7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCkgdXJsICs9IGAmbGltaXQ9JHtlbmNvZGUob3B0aW9ucy5saW1pdCl9YDtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmFmdGVyKSB1cmwgKz0gYCZhZnRlcj0ke2VuY29kZShvcHRpb25zLmFmdGVyKX1gO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB1cmw7XG4gICAgICAgIH0sXG4gICAgICAgIG1lOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtlbmNvZGUoY2hhbm5lbElkKX0vdGhyZWFkLW1lbWJlcnMvQG1lYDtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0VXNlcihjaGFubmVsSWQsIHVzZXJJZCwgb3B0aW9ucykge1xuICAgICAgICAgIGxldCB1cmwgPSBgL2NoYW5uZWxzLyR7ZW5jb2RlKGNoYW5uZWxJZCl9L3RocmVhZC1tZW1iZXJzLyR7ZW5jb2RlKHVzZXJJZCl9P2A7XG5cbiAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMud2l0aE1lbWJlcikgdXJsICs9IGB3aXRoX21lbWJlcj0ke2VuY29kZShvcHRpb25zLndpdGhNZW1iZXIpfWA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybDtcbiAgICAgICAgfSxcbiAgICAgICAgdXNlcjogKGNoYW5uZWxJZCwgdXNlcklkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtlbmNvZGUoY2hhbm5lbElkKX0vdGhyZWFkLW1lbWJlcnMvJHtlbmNvZGUodXNlcklkKX1gO1xuICAgICAgICB9LFxuICAgICAgICBhcmNoaXZlZDogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7ZW5jb2RlKGNoYW5uZWxJZCl9L3RocmVhZHMvYXJjaGl2ZWRgO1xuICAgICAgICB9LFxuICAgICAgICBwdWJsaWM6IChjaGFubmVsSWQsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICBsZXQgdXJsID0gYC9jaGFubmVscy8ke2VuY29kZShjaGFubmVsSWQpfS90aHJlYWRzL2FyY2hpdmVkL3B1YmxpYz9gO1xuXG4gICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmJlZm9yZSkge1xuICAgICAgICAgICAgICBjb25zdCBpc28gPSBuZXcgRGF0ZShvcHRpb25zLmJlZm9yZSkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgICAgdXJsICs9IGBiZWZvcmU9JHtlbmNvZGUoaXNvKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMubGltaXQpIHVybCArPSBgJmxpbWl0PSR7ZW5jb2RlKG9wdGlvbnMubGltaXQpfWA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybDtcbiAgICAgICAgfSxcbiAgICAgICAgcHJpdmF0ZTogKGNoYW5uZWxJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgIGxldCB1cmwgPSBgL2NoYW5uZWxzLyR7ZW5jb2RlKGNoYW5uZWxJZCl9L3RocmVhZHMvYXJjaGl2ZWQvcHJpdmF0ZT9gO1xuXG4gICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmJlZm9yZSkge1xuICAgICAgICAgICAgICBjb25zdCBpc28gPSBuZXcgRGF0ZShvcHRpb25zLmJlZm9yZSkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgICAgdXJsICs9IGBiZWZvcmU9JHtlbmNvZGUoaXNvKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMubGltaXQpIHVybCArPSBgJmxpbWl0PSR7ZW5jb2RlKG9wdGlvbnMubGltaXQpfWA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybDtcbiAgICAgICAgfSxcbiAgICAgICAgam9pbmVkOiAoY2hhbm5lbElkLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvY2hhbm5lbHMvJHtlbmNvZGUoY2hhbm5lbElkKX0vdXNlcnMvQG1lL3RocmVhZHMvYXJjaGl2ZWQvcHJpdmF0ZT9gO1xuXG4gICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmJlZm9yZSkge1xuICAgICAgICAgICAgICBjb25zdCBpc28gPSBuZXcgRGF0ZShvcHRpb25zLmJlZm9yZSkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgICAgdXJsICs9IGBiZWZvcmU9JHtlbmNvZGUoaXNvKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMubGltaXQpIHVybCArPSBgJmxpbWl0PSR7ZW5jb2RlKG9wdGlvbnMubGltaXQpfWA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybDtcbiAgICAgICAgfSxcbiAgICAgIH0sXG5cbiAgICAgIHR5cGluZzogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2VuY29kZShjaGFubmVsSWQpfS90eXBpbmdgO1xuICAgICAgfSxcblxuICAgICAgcG9sbHM6IHtcbiAgICAgICAgdm90ZXM6IChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYW5zd2VySWQsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICBsZXQgdXJsID0gYC9jaGFubmVscy8ke2VuY29kZShjaGFubmVsSWQpfS9wb2xscy8ke2VuY29kZShtZXNzYWdlSWQpfS9hbnN3ZXJzLyR7ZW5jb2RlKGFuc3dlcklkKX0/YDtcblxuICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5hZnRlcikgdXJsICs9IGBhZnRlcj0ke2VuY29kZShvcHRpb25zLmFmdGVyKX1gO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMubGltaXQpIHVybCArPSBgJmxpbWl0PSR7ZW5jb2RlKG9wdGlvbnMubGltaXQpfWA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybDtcbiAgICAgICAgfSxcbiAgICAgICAgZXhwaXJlOiAoY2hhbm5lbElkLCBtZXNzYWdlSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2VuY29kZShjaGFubmVsSWQpfS9wb2xscy8ke2VuY29kZShtZXNzYWdlSWQpfS9leHBpcmVgO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuXG4gICAgLy8gR3VpbGQgRW5kcG9pbnRzXG4gICAgZ3VpbGRzOiB7XG4gICAgICBhbGw6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuICcvZ3VpbGRzJztcbiAgICAgIH0sXG4gICAgICB1c2VyR3VpbGRzOiAob3B0aW9ucykgPT4ge1xuICAgICAgICBsZXQgdXJsID0gJy91c2Vycy9AbWUvZ3VpbGRzPyc7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5hZnRlcikgdXJsICs9IGBhZnRlcj0ke2VuY29kZShvcHRpb25zLmFmdGVyKX1gO1xuICAgICAgICAgIGlmIChvcHRpb25zLmJlZm9yZSkgdXJsICs9IGAmYmVmb3JlPSR7ZW5jb2RlKG9wdGlvbnMuYmVmb3JlKX1gO1xuICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0KSB1cmwgKz0gYCZsaW1pdD0ke2VuY29kZShvcHRpb25zLmxpbWl0KX1gO1xuICAgICAgICAgIGlmIChvcHRpb25zLndpdGhDb3VudHMpIHVybCArPSBgJndpdGhfY291bnRzPSR7ZW5jb2RlKG9wdGlvbnMud2l0aENvdW50cyl9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cmw7XG4gICAgICB9LFxuICAgICAgYXVkaXRsb2dzOiAoZ3VpbGRJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtlbmNvZGUoZ3VpbGRJZCl9L2F1ZGl0LWxvZ3M/YDtcblxuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgIGlmIChvcHRpb25zLmFjdGlvblR5cGUpIHVybCArPSBgYWN0aW9uX3R5cGU9JHtlbmNvZGUob3B0aW9ucy5hY3Rpb25UeXBlKX1gO1xuICAgICAgICAgIGlmIChvcHRpb25zLmJlZm9yZSkgdXJsICs9IGAmYmVmb3JlPSR7ZW5jb2RlKG9wdGlvbnMuYmVmb3JlKX1gO1xuICAgICAgICAgIGlmIChvcHRpb25zLmFmdGVyKSB1cmwgKz0gYCZhZnRlcj0ke2VuY29kZShvcHRpb25zLmFmdGVyKX1gO1xuICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0KSB1cmwgKz0gYCZsaW1pdD0ke2VuY29kZShvcHRpb25zLmxpbWl0KX1gO1xuICAgICAgICAgIGlmIChvcHRpb25zLnVzZXJJZCkgdXJsICs9IGAmdXNlcl9pZD0ke2VuY29kZShvcHRpb25zLnVzZXJJZCl9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cmw7XG4gICAgICB9LFxuICAgICAgYXV0b21vZDoge1xuICAgICAgICBydWxlOiAoZ3VpbGRJZCwgcnVsZUlkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7ZW5jb2RlKGd1aWxkSWQpfS9hdXRvLW1vZGVyYXRpb24vcnVsZXMvJHtlbmNvZGUocnVsZUlkKX1gO1xuICAgICAgICB9LFxuICAgICAgICBydWxlczogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtlbmNvZGUoZ3VpbGRJZCl9L2F1dG8tbW9kZXJhdGlvbi9ydWxlc2A7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgY2hhbm5lbHM6IChndWlsZElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2VuY29kZShndWlsZElkKX0vY2hhbm5lbHNgO1xuICAgICAgfSxcbiAgICAgIGVtb2ppOiAoZ3VpbGRJZCwgZW1vamlJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtlbmNvZGUoZ3VpbGRJZCl9L2Vtb2ppcy8ke2VuY29kZShlbW9qaUlkKX1gO1xuICAgICAgfSxcbiAgICAgIGVtb2ppczogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7ZW5jb2RlKGd1aWxkSWQpfS9lbW9qaXNgO1xuICAgICAgfSxcbiAgICAgIGV2ZW50czoge1xuICAgICAgICBldmVudHM6IChndWlsZElkLCB3aXRoVXNlckNvdW50PzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIGxldCB1cmwgPSBgL2d1aWxkcy8ke2VuY29kZShndWlsZElkKX0vc2NoZWR1bGVkLWV2ZW50cz9gO1xuXG4gICAgICAgICAgaWYgKHdpdGhVc2VyQ291bnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdXJsICs9IGB3aXRoX3VzZXJfY291bnQ9JHtlbmNvZGUod2l0aFVzZXJDb3VudCl9YDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHVybDtcbiAgICAgICAgfSxcbiAgICAgICAgZXZlbnQ6IChndWlsZElkLCBldmVudElkLCB3aXRoVXNlckNvdW50PzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIGxldCB1cmwgPSBgL2d1aWxkcy8ke2VuY29kZShndWlsZElkKX0vc2NoZWR1bGVkLWV2ZW50cy8ke2VuY29kZShldmVudElkKX1gO1xuXG4gICAgICAgICAgaWYgKHdpdGhVc2VyQ291bnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdXJsICs9IGB3aXRoX3VzZXJfY291bnQ9JHtlbmNvZGUod2l0aFVzZXJDb3VudCl9YDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdXJsO1xuICAgICAgICB9LFxuICAgICAgICB1c2VyczogKGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnM/OiBHZXRTY2hlZHVsZWRFdmVudFVzZXJzKSA9PiB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvZ3VpbGRzLyR7ZW5jb2RlKGd1aWxkSWQpfS9zY2hlZHVsZWQtZXZlbnRzLyR7ZW5jb2RlKGV2ZW50SWQpfS91c2Vycz9gO1xuXG4gICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0ICE9PSB1bmRlZmluZWQpIHVybCArPSBgbGltaXQ9JHtlbmNvZGUob3B0aW9ucy5saW1pdCl9YDtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLndpdGhNZW1iZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB1cmwgKz0gYCZ3aXRoX21lbWJlcj0ke2VuY29kZShvcHRpb25zLndpdGhNZW1iZXIpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5hZnRlciAhPT0gdW5kZWZpbmVkKSB1cmwgKz0gYCZhZnRlcj0ke2VuY29kZShvcHRpb25zLmFmdGVyKX1gO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYmVmb3JlICE9PSB1bmRlZmluZWQpIHVybCArPSBgJmJlZm9yZT0ke2VuY29kZShvcHRpb25zLmJlZm9yZSl9YDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdXJsO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGd1aWxkKGd1aWxkSWQsIHdpdGhDb3VudHMpIHtcbiAgICAgICAgbGV0IHVybCA9IGAvZ3VpbGRzLyR7ZW5jb2RlKGd1aWxkSWQpfT9gO1xuXG4gICAgICAgIGlmICh3aXRoQ291bnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB1cmwgKz0gYHdpdGhfY291bnRzPSR7ZW5jb2RlKHdpdGhDb3VudHMpfWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXJsO1xuICAgICAgfSxcbiAgICAgIGludGVncmF0aW9uKGd1aWxkSWQsIGludGVncmF0aW9uSWQpIHtcbiAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7ZW5jb2RlKGd1aWxkSWQpfS9pbnRlZ3JhdGlvbnMvJHtlbmNvZGUoaW50ZWdyYXRpb25JZCl9YDtcbiAgICAgIH0sXG4gICAgICBpbnRlZ3JhdGlvbnM6IChndWlsZElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2VuY29kZShndWlsZElkKX0vaW50ZWdyYXRpb25zP2luY2x1ZGVfYXBwbGljYXRpb25zPXRydWVgO1xuICAgICAgfSxcbiAgICAgIGludml0ZShpbnZpdGVDb2RlLCBvcHRpb25zKSB7XG4gICAgICAgIGxldCB1cmwgPSBgL2ludml0ZXMvJHtlbmNvZGUoaW52aXRlQ29kZSl9P2A7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy53aXRoQ291bnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHVybCArPSBgd2l0aF9jb3VudHM9JHtlbmNvZGUob3B0aW9ucy53aXRoQ291bnRzKX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob3B0aW9ucy5zY2hlZHVsZWRFdmVudElkKSB7XG4gICAgICAgICAgICB1cmwgKz0gYCZndWlsZF9zY2hlZHVsZWRfZXZlbnRfaWQ9JHtlbmNvZGUob3B0aW9ucy5zY2hlZHVsZWRFdmVudElkKX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cmw7XG4gICAgICB9LFxuICAgICAgaW52aXRlVGFyZ2V0VXNlcnMoaW52aXRlQ29kZSkge1xuICAgICAgICByZXR1cm4gYC9pbnZpdGVzLyR7ZW5jb2RlKGludml0ZUNvZGUpfS90YXJnZXQtdXNlcnNgO1xuICAgICAgfSxcbiAgICAgIGludml0ZVRhcmdldFVzZXJzSm9iU3RhdHVzKGludml0ZUNvZGUpIHtcbiAgICAgICAgcmV0dXJuIGAvaW52aXRlcy8ke2VuY29kZShpbnZpdGVDb2RlKX0vdGFyZ2V0LXVzZXJzL2pvYi1zdGF0dXNgO1xuICAgICAgfSxcbiAgICAgIGludml0ZXM6IChndWlsZElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2VuY29kZShndWlsZElkKX0vaW52aXRlc2A7XG4gICAgICB9LFxuICAgICAgbGVhdmU6IChndWlsZElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL3VzZXJzL0BtZS9ndWlsZHMvJHtlbmNvZGUoZ3VpbGRJZCl9YDtcbiAgICAgIH0sXG4gICAgICBtZW1iZXJzOiB7XG4gICAgICAgIGJhbjogKGd1aWxkSWQsIHVzZXJJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2VuY29kZShndWlsZElkKX0vYmFucy8ke2VuY29kZSh1c2VySWQpfWA7XG4gICAgICAgIH0sXG4gICAgICAgIGJhbnM6IChndWlsZElkLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvZ3VpbGRzLyR7ZW5jb2RlKGd1aWxkSWQpfS9iYW5zP2A7XG5cbiAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMubGltaXQpIHVybCArPSBgbGltaXQ9JHtlbmNvZGUob3B0aW9ucy5saW1pdCl9YDtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmFmdGVyKSB1cmwgKz0gYCZhZnRlcj0ke2VuY29kZShvcHRpb25zLmFmdGVyKX1gO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYmVmb3JlKSB1cmwgKz0gYCZiZWZvcmU9JHtlbmNvZGUob3B0aW9ucy5iZWZvcmUpfWA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybDtcbiAgICAgICAgfSxcbiAgICAgICAgYnVsa0JhbjogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtlbmNvZGUoZ3VpbGRJZCl9L2J1bGstYmFuYDtcbiAgICAgICAgfSxcbiAgICAgICAgYm90OiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2VuY29kZShndWlsZElkKX0vbWVtYmVycy9AbWVgO1xuICAgICAgICB9LFxuICAgICAgICBtZW1iZXI6IChndWlsZElkLCB1c2VySWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtlbmNvZGUoZ3VpbGRJZCl9L21lbWJlcnMvJHtlbmNvZGUodXNlcklkKX1gO1xuICAgICAgICB9LFxuICAgICAgICBjdXJyZW50TWVtYmVyOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL3VzZXJzL0BtZS9ndWlsZHMvJHtlbmNvZGUoZ3VpbGRJZCl9L21lbWJlcmA7XG4gICAgICAgIH0sXG4gICAgICAgIG1lbWJlcnM6IChndWlsZElkLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvZ3VpbGRzLyR7ZW5jb2RlKGd1aWxkSWQpfS9tZW1iZXJzP2A7XG5cbiAgICAgICAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCkgdXJsICs9IGBsaW1pdD0ke2VuY29kZShvcHRpb25zLmxpbWl0KX1gO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXIpIHVybCArPSBgJmFmdGVyPSR7ZW5jb2RlKG9wdGlvbnMuYWZ0ZXIpfWA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybDtcbiAgICAgICAgfSxcbiAgICAgICAgc2VhcmNoOiAoZ3VpbGRJZCwgcXVlcnksIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtlbmNvZGUoZ3VpbGRJZCl9L21lbWJlcnMvc2VhcmNoP3F1ZXJ5PSR7ZW5jb2RlKHF1ZXJ5KX1gO1xuXG4gICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0ICE9PSB1bmRlZmluZWQpIHVybCArPSBgJmxpbWl0PSR7ZW5jb2RlKG9wdGlvbnMubGltaXQpfWA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybDtcbiAgICAgICAgfSxcbiAgICAgICAgcHJ1bmU6IChndWlsZElkLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvZ3VpbGRzLyR7ZW5jb2RlKGd1aWxkSWQpfS9wcnVuZT9gO1xuXG4gICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmRheXMpIHVybCArPSBgZGF5cz0ke2VuY29kZShvcHRpb25zLmRheXMpfWA7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLmluY2x1ZGVSb2xlcykpIHtcbiAgICAgICAgICAgICAgdXJsICs9IGAmaW5jbHVkZV9yb2xlcz0ke2VuY29kZShvcHRpb25zLmluY2x1ZGVSb2xlcy5qb2luKCcsJykpfWA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaW5jbHVkZVJvbGVzKSB7XG4gICAgICAgICAgICAgIHVybCArPSBgJmluY2x1ZGVfcm9sZXM9JHtlbmNvZGUob3B0aW9ucy5pbmNsdWRlUm9sZXMpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybDtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBwcmV2aWV3OiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtlbmNvZGUoZ3VpbGRJZCl9L3ByZXZpZXdgO1xuICAgICAgfSxcbiAgICAgIHBydW5lOiAoZ3VpbGRJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtlbmNvZGUoZ3VpbGRJZCl9L3BydW5lP2A7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5kYXlzKSB1cmwgKz0gYGRheXM9JHtlbmNvZGUob3B0aW9ucy5kYXlzKX1gO1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMuaW5jbHVkZVJvbGVzKSkge1xuICAgICAgICAgICAgdXJsICs9IGAmaW5jbHVkZV9yb2xlcz0ke2VuY29kZShvcHRpb25zLmluY2x1ZGVSb2xlcy5qb2luKCcsJykpfWA7XG4gICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmluY2x1ZGVSb2xlcykge1xuICAgICAgICAgICAgdXJsICs9IGAmaW5jbHVkZV9yb2xlcz0ke2VuY29kZShvcHRpb25zLmluY2x1ZGVSb2xlcyl9YDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXJsO1xuICAgICAgfSxcbiAgICAgIHJvbGVzOiB7XG4gICAgICAgIG9uZTogKGd1aWxkSWQsIHJvbGVJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2VuY29kZShndWlsZElkKX0vcm9sZXMvJHtlbmNvZGUocm9sZUlkKX1gO1xuICAgICAgICB9LFxuICAgICAgICBhbGw6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7ZW5jb2RlKGd1aWxkSWQpfS9yb2xlc2A7XG4gICAgICAgIH0sXG4gICAgICAgIG1lbWJlcjogKGd1aWxkSWQsIG1lbWJlcklkLCByb2xlSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtlbmNvZGUoZ3VpbGRJZCl9L21lbWJlcnMvJHtlbmNvZGUobWVtYmVySWQpfS9yb2xlcy8ke2VuY29kZShyb2xlSWQpfWA7XG4gICAgICAgIH0sXG4gICAgICAgIG1lbWJlckNvdW50czogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9yb2xlcy9tZW1iZXItY291bnRzYDtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBzdGlja2VyczogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7ZW5jb2RlKGd1aWxkSWQpfS9zdGlja2Vyc2A7XG4gICAgICB9LFxuICAgICAgc3RpY2tlcjogKGd1aWxkSWQsIHN0aWNrZXJJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtlbmNvZGUoZ3VpbGRJZCl9L3N0aWNrZXJzLyR7ZW5jb2RlKHN0aWNrZXJJZCl9YDtcbiAgICAgIH0sXG4gICAgICB2b2ljZTogKGd1aWxkSWQsIHVzZXJJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtlbmNvZGUoZ3VpbGRJZCl9L3ZvaWNlLXN0YXRlcy8ke2VuY29kZSh1c2VySWQgPz8gJ0BtZScpfWA7XG4gICAgICB9LFxuICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgIGNvZGU6IChjb2RlKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzL3RlbXBsYXRlcy8ke2VuY29kZShjb2RlKX1gO1xuICAgICAgICB9LFxuICAgICAgICBndWlsZDogKGd1aWxkSWQsIGNvZGUpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtlbmNvZGUoZ3VpbGRJZCl9L3RlbXBsYXRlcy8ke2VuY29kZShjb2RlKX1gO1xuICAgICAgICB9LFxuICAgICAgICBhbGw6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7ZW5jb2RlKGd1aWxkSWQpfS90ZW1wbGF0ZXNgO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHZhbml0eTogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7ZW5jb2RlKGd1aWxkSWQpfS92YW5pdHktdXJsYDtcbiAgICAgIH0sXG4gICAgICByZWdpb25zOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtlbmNvZGUoZ3VpbGRJZCl9L3JlZ2lvbnNgO1xuICAgICAgfSxcbiAgICAgIHdlYmhvb2tzOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtlbmNvZGUoZ3VpbGRJZCl9L3dlYmhvb2tzYDtcbiAgICAgIH0sXG4gICAgICB3ZWxjb21lOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtlbmNvZGUoZ3VpbGRJZCl9L3dlbGNvbWUtc2NyZWVuYDtcbiAgICAgIH0sXG4gICAgICB3aWRnZXQ6IChndWlsZElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2VuY29kZShndWlsZElkKX0vd2lkZ2V0YDtcbiAgICAgIH0sXG4gICAgICB3aWRnZXRKc29uOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtlbmNvZGUoZ3VpbGRJZCl9L3dpZGdldC5qc29uYDtcbiAgICAgIH0sXG4gICAgICBvbmJvYXJkaW5nOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtlbmNvZGUoZ3VpbGRJZCl9L29uYm9hcmRpbmdgO1xuICAgICAgfSxcbiAgICAgIGluY2lkZW50QWN0aW9uczogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7ZW5jb2RlKGd1aWxkSWQpfS9pbmNpZGVudC1hY3Rpb25zYDtcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIHN0aWNrZXI6IChzdGlja2VySWQpID0+IHtcbiAgICAgIHJldHVybiBgL3N0aWNrZXJzLyR7ZW5jb2RlKHN0aWNrZXJJZCl9YDtcbiAgICB9LFxuXG4gICAgcmVnaW9uczogKCkgPT4ge1xuICAgICAgcmV0dXJuICcvdm9pY2UvcmVnaW9ucyc7XG4gICAgfSxcblxuICAgIC8vIEludGVyYWN0aW9uIEVuZHBvaW50c1xuICAgIGludGVyYWN0aW9uczoge1xuICAgICAgY29tbWFuZHM6IHtcbiAgICAgICAgLy8gQXBwbGljYXRpb24gRW5kcG9pbnRzXG4gICAgICAgIGNvbW1hbmRzOiAoYXBwbGljYXRpb25JZCwgd2l0aExvY2FsaXphdGlvbnMpID0+IHtcbiAgICAgICAgICBsZXQgdXJsID0gYC9hcHBsaWNhdGlvbnMvJHtlbmNvZGUoYXBwbGljYXRpb25JZCl9L2NvbW1hbmRzP2A7XG5cbiAgICAgICAgICBpZiAod2l0aExvY2FsaXphdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdXJsICs9IGB3aXRoX2xvY2FsaXphdGlvbnM9JHtlbmNvZGUod2l0aExvY2FsaXphdGlvbnMpfWA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybDtcbiAgICAgICAgfSxcblxuICAgICAgICBndWlsZHM6IHtcbiAgICAgICAgICBhbGwoYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgd2l0aExvY2FsaXphdGlvbnMpIHtcbiAgICAgICAgICAgIGxldCB1cmwgPSBgL2FwcGxpY2F0aW9ucy8ke2VuY29kZShhcHBsaWNhdGlvbklkKX0vZ3VpbGRzLyR7ZW5jb2RlKGd1aWxkSWQpfS9jb21tYW5kcz9gO1xuXG4gICAgICAgICAgICBpZiAod2l0aExvY2FsaXphdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB1cmwgKz0gYHdpdGhfbG9jYWxpemF0aW9ucz0ke2VuY29kZSh3aXRoTG9jYWxpemF0aW9ucyl9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVybDtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgb25lKGFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCkge1xuICAgICAgICAgICAgcmV0dXJuIGAvYXBwbGljYXRpb25zLyR7ZW5jb2RlKGFwcGxpY2F0aW9uSWQpfS9ndWlsZHMvJHtlbmNvZGUoZ3VpbGRJZCl9L2NvbW1hbmRzLyR7ZW5jb2RlKGNvbW1hbmRJZCl9YDtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBwZXJtaXNzaW9uczogKGFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9hcHBsaWNhdGlvbnMvJHtlbmNvZGUoYXBwbGljYXRpb25JZCl9L2d1aWxkcy8ke2VuY29kZShndWlsZElkKX0vY29tbWFuZHMvcGVybWlzc2lvbnNgO1xuICAgICAgICB9LFxuICAgICAgICBwZXJtaXNzaW9uOiAoYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvYXBwbGljYXRpb25zLyR7ZW5jb2RlKGFwcGxpY2F0aW9uSWQpfS9ndWlsZHMvJHtlbmNvZGUoZ3VpbGRJZCl9L2NvbW1hbmRzLyR7ZW5jb2RlKGNvbW1hbmRJZCl9L3Blcm1pc3Npb25zYDtcbiAgICAgICAgfSxcbiAgICAgICAgY29tbWFuZDogKGFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCwgd2l0aExvY2FsaXphdGlvbnMpID0+IHtcbiAgICAgICAgICBsZXQgdXJsID0gYC9hcHBsaWNhdGlvbnMvJHtlbmNvZGUoYXBwbGljYXRpb25JZCl9L2NvbW1hbmRzLyR7ZW5jb2RlKGNvbW1hbmRJZCl9P2A7XG5cbiAgICAgICAgICBpZiAod2l0aExvY2FsaXphdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdXJsICs9IGB3aXRoTG9jYWxpemF0aW9ucz0ke2VuY29kZSh3aXRoTG9jYWxpemF0aW9ucyl9YDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdXJsO1xuICAgICAgICB9LFxuICAgICAgfSxcblxuICAgICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIC8vIEludGVyYWN0aW9uIEVuZHBvaW50c1xuICAgICAgICBjYWxsYmFjazogKGludGVyYWN0aW9uSWQsIHRva2VuLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvaW50ZXJhY3Rpb25zLyR7ZW5jb2RlKGludGVyYWN0aW9uSWQpfS8ke2VuY29kZSh0b2tlbil9L2NhbGxiYWNrP3dpdGhfcmVzcG9uc2U9JHtlbmNvZGUoISFvcHRpb25zPy53aXRoUmVzcG9uc2UpfWA7XG4gICAgICAgIH0sXG4gICAgICAgIG9yaWdpbmFsOiAoaW50ZXJhY3Rpb25JZCwgdG9rZW4pID0+IHtcbiAgICAgICAgICByZXR1cm4gYC93ZWJob29rcy8ke2VuY29kZShpbnRlcmFjdGlvbklkKX0vJHtlbmNvZGUodG9rZW4pfS9tZXNzYWdlcy9Ab3JpZ2luYWxgO1xuICAgICAgICB9LFxuICAgICAgICBtZXNzYWdlOiAoYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL3dlYmhvb2tzLyR7ZW5jb2RlKGFwcGxpY2F0aW9uSWQpfS8ke2VuY29kZSh0b2tlbil9L21lc3NhZ2VzLyR7ZW5jb2RlKG1lc3NhZ2VJZCl9YDtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIC8vIE9BdXRoMiBlbmRwb2ludHNcbiAgICBvYXV0aDI6IHtcbiAgICAgIHRva2VuRXhjaGFuZ2U6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuICcvb2F1dGgyL3Rva2VuJztcbiAgICAgIH0sXG4gICAgICB0b2tlblJldm9rZTogKCkgPT4ge1xuICAgICAgICByZXR1cm4gJy9vYXV0aDIvdG9rZW4vcmV2b2tlJztcbiAgICAgIH0sXG4gICAgICBjdXJyZW50QXV0aG9yaXphdGlvbjogKCkgPT4ge1xuICAgICAgICByZXR1cm4gJy9vYXV0aDIvQG1lJztcbiAgICAgIH0sXG4gICAgICBhcHBsaWNhdGlvbjogKCkgPT4ge1xuICAgICAgICByZXR1cm4gJy9vYXV0aDIvYXBwbGljYXRpb25zL0BtZSc7XG4gICAgICB9LFxuICAgICAgY29ubmVjdGlvbnM6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuICcvdXNlcnMvQG1lL2Nvbm5lY3Rpb25zJztcbiAgICAgIH0sXG4gICAgICByb2xlQ29ubmVjdGlvbnM6IChhcHBsaWNhdGlvbklkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL3VzZXJzL0BtZS9hcHBsaWNhdGlvbnMvJHtlbmNvZGUoYXBwbGljYXRpb25JZCl9L3JvbGUtY29ubmVjdGlvbmA7XG4gICAgICB9LFxuICAgIH0sXG5cbiAgICBtb25ldGl6YXRpb246IHtcbiAgICAgIGVudGl0bGVtZW50czogKGFwcGxpY2F0aW9uSWQsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgbGV0IHVybCA9IGAvYXBwbGljYXRpb25zLyR7ZW5jb2RlKGFwcGxpY2F0aW9uSWQpfS9lbnRpdGxlbWVudHM/YDtcblxuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgIGlmIChvcHRpb25zLmFmdGVyKSB1cmwgKz0gYGFmdGVyPSR7ZW5jb2RlKG9wdGlvbnMuYWZ0ZXIpfWA7XG4gICAgICAgICAgaWYgKG9wdGlvbnMuYmVmb3JlKSB1cmwgKz0gYCZiZWZvcmU9JHtlbmNvZGUob3B0aW9ucy5iZWZvcmUpfWA7XG4gICAgICAgICAgaWYgKG9wdGlvbnMuZXhjbHVkZUVuZGVkKSB1cmwgKz0gYCZleGNsdWRlX2VuZGVkPSR7ZW5jb2RlKG9wdGlvbnMuZXhjbHVkZUVuZGVkKX1gO1xuICAgICAgICAgIGlmIChvcHRpb25zLmd1aWxkSWQpIHVybCArPSBgJmd1aWxkX2lkPSR7ZW5jb2RlKG9wdGlvbnMuZ3VpbGRJZCl9YDtcbiAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCkgdXJsICs9IGAmbGltaXQ9JHtlbmNvZGUob3B0aW9ucy5saW1pdCl9YDtcbiAgICAgICAgICBpZiAob3B0aW9ucy5za3VJZHMpIHVybCArPSBgJnNrdV9pZHM9JHtlbmNvZGUob3B0aW9ucy5za3VJZHMuam9pbignLCcpKX1gO1xuICAgICAgICAgIGlmIChvcHRpb25zLnVzZXJJZCkgdXJsICs9IGAmdXNlcl9pZD0ke2VuY29kZShvcHRpb25zLnVzZXJJZCl9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cmw7XG4gICAgICB9LFxuICAgICAgZW50aXRsZW1lbnQ6IChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2FwcGxpY2F0aW9ucy8ke2VuY29kZShhcHBsaWNhdGlvbklkKX0vZW50aXRsZW1lbnRzLyR7ZW5jb2RlKGVudGl0bGVtZW50SWQpfWA7XG4gICAgICB9LFxuICAgICAgY29uc3VtZUVudGl0bGVtZW50OiAoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9hcHBsaWNhdGlvbnMvJHtlbmNvZGUoYXBwbGljYXRpb25JZCl9L2VudGl0bGVtZW50cy8ke2VuY29kZShlbnRpdGxlbWVudElkKX0vY29uc3VtZWA7XG4gICAgICB9LFxuXG4gICAgICBza3VzOiAoYXBwbGljYXRpb25JZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9hcHBsaWNhdGlvbnMvJHtlbmNvZGUoYXBwbGljYXRpb25JZCl9L3NrdXNgO1xuICAgICAgfSxcblxuICAgICAgc3Vic2NyaXB0aW9uOiAoc2t1SWQsIHN1YnNjcmlwdGlvbklkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL3NrdXMvJHtlbmNvZGUoc2t1SWQpfS9zdWJzY3JpcHRpb25zLyR7ZW5jb2RlKHN1YnNjcmlwdGlvbklkKX1gO1xuICAgICAgfSxcblxuICAgICAgc3Vic2NyaXB0aW9uczogKHNrdUlkLCBvcHRpb25zKSA9PiB7XG4gICAgICAgIGxldCB1cmwgPSBgL3NrdXMvJHtlbmNvZGUoc2t1SWQpfS9zdWJzY3JpcHRpb25zP2A7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5hZnRlcikgdXJsICs9IGBhZnRlcj0ke2VuY29kZShvcHRpb25zLmFmdGVyKX1gO1xuICAgICAgICAgIGlmIChvcHRpb25zLmJlZm9yZSkgdXJsICs9IGAmYmVmb3JlPSR7ZW5jb2RlKG9wdGlvbnMuYmVmb3JlKX1gO1xuICAgICAgICAgIGlmIChvcHRpb25zLnVzZXJJZCkgdXJsICs9IGAmdXNlcl9pZD0ke2VuY29kZShvcHRpb25zLnVzZXJJZCl9YDtcbiAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCkgdXJsICs9IGAmbGltaXQ9JHtlbmNvZGUob3B0aW9ucy5saW1pdCl9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cmw7XG4gICAgICB9LFxuICAgIH0sXG5cbiAgICBzb3VuZGJvYXJkOiB7XG4gICAgICBzZW5kU291bmQ6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtlbmNvZGUoY2hhbm5lbElkKX1gO1xuICAgICAgfSxcbiAgICAgIGxpc3REZWZhdWx0OiAoKSA9PiB7XG4gICAgICAgIHJldHVybiBgL3NvdW5kYm9hcmQtZGVmYXVsdC1zb3VuZHNgO1xuICAgICAgfSxcbiAgICAgIGd1aWxkU291bmRzOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtlbmNvZGUoZ3VpbGRJZCl9L3NvdW5kYm9hcmQtc291bmRzYDtcbiAgICAgIH0sXG4gICAgICBndWlsZFNvdW5kOiAoZ3VpbGRJZCwgc291bmRJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtlbmNvZGUoZ3VpbGRJZCl9L3NvdW5kYm9hcmQtc291bmRzLyR7ZW5jb2RlKHNvdW5kSWQpfWA7XG4gICAgICB9LFxuICAgIH0sXG5cbiAgICBsb2JieToge1xuICAgICAgY3JlYXRlOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiAnL2xvYmJpZXMnO1xuICAgICAgfSxcblxuICAgICAgbG9iYnk6IChsb2JieUlkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2xvYmJpZXMvJHtlbmNvZGUobG9iYnlJZCl9YDtcbiAgICAgIH0sXG5cbiAgICAgIG1lbWJlcjogKGxvYmJ5SWQsIHVzZXJJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9sb2JiaWVzLyR7ZW5jb2RlKGxvYmJ5SWQpfS9tZW1iZXJzLyR7ZW5jb2RlKHVzZXJJZCl9YDtcbiAgICAgIH0sXG5cbiAgICAgIGxlYXZlOiAobG9iYnlJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9sb2JiaWVzLyR7ZW5jb2RlKGxvYmJ5SWQpfS9tZW1iZXJzL0BtZWA7XG4gICAgICB9LFxuXG4gICAgICBsaW5rOiAobG9iYnlJZCkgPT4ge1xuICAgICAgICByZXR1cm4gYC9sb2JiaWVzLyR7ZW5jb2RlKGxvYmJ5SWQpfS9jaGFubmVsLWxpbmtpbmdgO1xuICAgICAgfSxcblxuICAgICAgbWVtYmVyc0J1bGs6IChsb2JieUlkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2xvYmJpZXMvJHtlbmNvZGUobG9iYnlJZCl9L21lbWJlcnMvYnVsa2A7XG4gICAgICB9LFxuXG4gICAgICBtb2RlcmF0aW9uTWV0YWRhdGE6IChsb2JieUlkLCBtZXNzYWdlSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvbG9iYmllcy8ke2VuY29kZShsb2JieUlkKX0vbWVzc2FnZXMvJHtlbmNvZGUobWVzc2FnZUlkKX0vbW9kZXJhdGlvbi1tZXRhZGF0YWA7XG4gICAgICB9LFxuXG4gICAgICBtZXNzYWdlczogKGxvYmJ5SWQsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgbGV0IHVybCA9IGAvbG9iYmllcy8ke2VuY29kZShsb2JieUlkKX0vbWVzc2FnZXM/YDtcblxuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0KSB1cmwgKz0gYGxpbWl0PSR7ZW5jb2RlKG9wdGlvbnMubGltaXQpfWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXJsO1xuICAgICAgfSxcblxuICAgICAgaW52aXRlU2VsZjogKGxvYmJ5SWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvbG9iYmllcy8ke2VuY29kZShsb2JieUlkKX0vbWVtYmVycy9AbWUvaW52aXRlc2A7XG4gICAgICB9LFxuXG4gICAgICBpbnZpdGVVc2VyOiAobG9iYnlJZCwgdXNlcklkKSA9PiB7XG4gICAgICAgIHJldHVybiBgL2xvYmJpZXMvJHtlbmNvZGUobG9iYnlJZCl9L21lbWJlcnMvJHtlbmNvZGUodXNlcklkKX0vaW52aXRlc2A7XG4gICAgICB9LFxuICAgIH0sXG5cbiAgICBhcHBsaWNhdGlvbkVtb2ppKGFwcGxpY2F0aW9uSWQsIGVtb2ppSWQpIHtcbiAgICAgIHJldHVybiBgL2FwcGxpY2F0aW9ucy8ke2VuY29kZShhcHBsaWNhdGlvbklkKX0vZW1vamlzLyR7ZW5jb2RlKGVtb2ppSWQpfWA7XG4gICAgfSxcblxuICAgIGFwcGxpY2F0aW9uRW1vamlzKGFwcGxpY2F0aW9uSWQpIHtcbiAgICAgIHJldHVybiBgL2FwcGxpY2F0aW9ucy8ke2VuY29kZShhcHBsaWNhdGlvbklkKX0vZW1vamlzYDtcbiAgICB9LFxuXG4gICAgYXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhKGFwcGxpY2F0aW9uSWQpIHtcbiAgICAgIHJldHVybiBgL2FwcGxpY2F0aW9ucy8ke2VuY29kZShhcHBsaWNhdGlvbklkKX0vcm9sZS1jb25uZWN0aW9ucy9tZXRhZGF0YWA7XG4gICAgfSxcblxuICAgIC8vIFVzZXIgZW5kcG9pbnRzXG4gICAgdXNlcih1c2VySWQpIHtcbiAgICAgIHJldHVybiBgL3VzZXJzLyR7ZW5jb2RlKHVzZXJJZCl9YDtcbiAgICB9LFxuXG4gICAgYXBwbGljYXRpb24oKSB7XG4gICAgICByZXR1cm4gJy9hcHBsaWNhdGlvbnMvQG1lJztcbiAgICB9LFxuXG4gICAgYXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlKGFwcGxpY2F0aW9uSWQsIGluc3RhbmNlSWQpIHtcbiAgICAgIHJldHVybiBgL2FwcGxpY2F0aW9ucy8ke2VuY29kZShhcHBsaWNhdGlvbklkKX0vYWN0aXZpdHktaW5zdGFuY2VzLyR7ZW5jb2RlKGluc3RhbmNlSWQpfWA7XG4gICAgfSxcblxuICAgIGN1cnJlbnRVc2VyKCkge1xuICAgICAgcmV0dXJuICcvdXNlcnMvQG1lJztcbiAgICB9LFxuXG4gICAgZ2F0ZXdheUJvdCgpIHtcbiAgICAgIHJldHVybiAnL2dhdGV3YXkvYm90JztcbiAgICB9LFxuXG4gICAgc3RpY2tlclBhY2soc3RpY2tlclBhY2tJZCkge1xuICAgICAgcmV0dXJuIGAvc3RpY2tlci1wYWNrcy8ke2VuY29kZShzdGlja2VyUGFja0lkKX1gO1xuICAgIH0sXG5cbiAgICBzdGlja2VyUGFja3MoKSB7XG4gICAgICByZXR1cm4gJy9zdGlja2VyLXBhY2tzJztcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBlbmNvZGVDb21wb25lbnQodXJpQ29tcG9uZW50OiBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQgfCBib29sZWFuKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB1cmlDb21wb25lbnQgIT09ICdzdHJpbmcnKSByZXR1cm4gdXJpQ29tcG9uZW50LnRvU3RyaW5nKCk7XG4gIGlmICgvXlxcZCskLy50ZXN0KHVyaUNvbXBvbmVudCkpIHJldHVybiB1cmlDb21wb25lbnQ7XG5cbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh1cmlDb21wb25lbnQpO1xufVxuIl0sIm5hbWVzIjpbImlzR2V0TWVzc2FnZXNBZnRlciIsImlzR2V0TWVzc2FnZXNBcm91bmQiLCJpc0dldE1lc3NhZ2VzQmVmb3JlIiwiaXNHZXRNZXNzYWdlc0xpbWl0IiwiY3JlYXRlUm91dGVzIiwiZGlzYWJsZVVSSUVuY29kZSIsImVuY29kZSIsIngiLCJ0b1N0cmluZyIsImVuY29kZUNvbXBvbmVudCIsIndlYmhvb2tzIiwiaWQiLCJ3ZWJob29rSWQiLCJtZXNzYWdlIiwidG9rZW4iLCJtZXNzYWdlSWQiLCJvcHRpb25zIiwidXJsIiwidGhyZWFkSWQiLCJ3aXRoQ29tcG9uZW50cyIsIndlYmhvb2siLCJ3YWl0IiwidW5kZWZpbmVkIiwiY2hhbm5lbHMiLCJidWxrIiwiY2hhbm5lbElkIiwiZG0iLCJkbVJlY2lwaWVudCIsInVzZXJJZCIsInBpbiIsInBpbnMiLCJtZXNzYWdlUGlucyIsImJlZm9yZSIsImxpbWl0IiwibWVzc2FnZVBpbiIsInJlYWN0aW9ucyIsImJvdCIsImVtb2ppIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwidXNlciIsImFsbCIsInR5cGUiLCJhZnRlciIsImNoYW5uZWwiLCJmb2xsb3ciLCJmb3J1bSIsImludml0ZXMiLCJtZXNzYWdlcyIsImFyb3VuZCIsIm92ZXJ3cml0ZSIsIm92ZXJ3cml0ZUlkIiwiY3Jvc3Nwb3N0Iiwic3RhZ2VzIiwic3RhZ2UiLCJ0aHJlYWRzIiwiYWN0aXZlIiwiZ3VpbGRJZCIsIm1lbWJlcnMiLCJ3aXRoTWVtYmVyIiwibWUiLCJnZXRVc2VyIiwiYXJjaGl2ZWQiLCJwdWJsaWMiLCJpc28iLCJEYXRlIiwidG9JU09TdHJpbmciLCJwcml2YXRlIiwiam9pbmVkIiwidHlwaW5nIiwicG9sbHMiLCJ2b3RlcyIsImFuc3dlcklkIiwiZXhwaXJlIiwiZ3VpbGRzIiwidXNlckd1aWxkcyIsIndpdGhDb3VudHMiLCJhdWRpdGxvZ3MiLCJhY3Rpb25UeXBlIiwiYXV0b21vZCIsInJ1bGUiLCJydWxlSWQiLCJydWxlcyIsImVtb2ppSWQiLCJlbW9qaXMiLCJldmVudHMiLCJ3aXRoVXNlckNvdW50IiwiZXZlbnQiLCJldmVudElkIiwidXNlcnMiLCJndWlsZCIsImludGVncmF0aW9uIiwiaW50ZWdyYXRpb25JZCIsImludGVncmF0aW9ucyIsImludml0ZSIsImludml0ZUNvZGUiLCJzY2hlZHVsZWRFdmVudElkIiwiaW52aXRlVGFyZ2V0VXNlcnMiLCJpbnZpdGVUYXJnZXRVc2Vyc0pvYlN0YXR1cyIsImxlYXZlIiwiYmFuIiwiYmFucyIsImJ1bGtCYW4iLCJtZW1iZXIiLCJjdXJyZW50TWVtYmVyIiwic2VhcmNoIiwicXVlcnkiLCJwcnVuZSIsImRheXMiLCJBcnJheSIsImlzQXJyYXkiLCJpbmNsdWRlUm9sZXMiLCJqb2luIiwicHJldmlldyIsInJvbGVzIiwib25lIiwicm9sZUlkIiwibWVtYmVySWQiLCJtZW1iZXJDb3VudHMiLCJzdGlja2VycyIsInN0aWNrZXIiLCJzdGlja2VySWQiLCJ2b2ljZSIsInRlbXBsYXRlcyIsImNvZGUiLCJ2YW5pdHkiLCJyZWdpb25zIiwid2VsY29tZSIsIndpZGdldCIsIndpZGdldEpzb24iLCJvbmJvYXJkaW5nIiwiaW5jaWRlbnRBY3Rpb25zIiwiaW50ZXJhY3Rpb25zIiwiY29tbWFuZHMiLCJhcHBsaWNhdGlvbklkIiwid2l0aExvY2FsaXphdGlvbnMiLCJjb21tYW5kSWQiLCJwZXJtaXNzaW9ucyIsInBlcm1pc3Npb24iLCJjb21tYW5kIiwicmVzcG9uc2VzIiwiY2FsbGJhY2siLCJpbnRlcmFjdGlvbklkIiwid2l0aFJlc3BvbnNlIiwib3JpZ2luYWwiLCJvYXV0aDIiLCJ0b2tlbkV4Y2hhbmdlIiwidG9rZW5SZXZva2UiLCJjdXJyZW50QXV0aG9yaXphdGlvbiIsImFwcGxpY2F0aW9uIiwiY29ubmVjdGlvbnMiLCJyb2xlQ29ubmVjdGlvbnMiLCJtb25ldGl6YXRpb24iLCJlbnRpdGxlbWVudHMiLCJleGNsdWRlRW5kZWQiLCJza3VJZHMiLCJlbnRpdGxlbWVudCIsImVudGl0bGVtZW50SWQiLCJjb25zdW1lRW50aXRsZW1lbnQiLCJza3VzIiwic3Vic2NyaXB0aW9uIiwic2t1SWQiLCJzdWJzY3JpcHRpb25JZCIsInN1YnNjcmlwdGlvbnMiLCJzb3VuZGJvYXJkIiwic2VuZFNvdW5kIiwibGlzdERlZmF1bHQiLCJndWlsZFNvdW5kcyIsImd1aWxkU291bmQiLCJzb3VuZElkIiwibG9iYnkiLCJjcmVhdGUiLCJsb2JieUlkIiwibGluayIsIm1lbWJlcnNCdWxrIiwibW9kZXJhdGlvbk1ldGFkYXRhIiwiaW52aXRlU2VsZiIsImludml0ZVVzZXIiLCJhcHBsaWNhdGlvbkVtb2ppIiwiYXBwbGljYXRpb25FbW9qaXMiLCJhcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGEiLCJhcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UiLCJpbnN0YW5jZUlkIiwiY3VycmVudFVzZXIiLCJnYXRld2F5Qm90Iiwic3RpY2tlclBhY2siLCJzdGlja2VyUGFja0lkIiwic3RpY2tlclBhY2tzIiwidXJpQ29tcG9uZW50IiwidGVzdCJdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBU0Esa0JBQWtCLEVBQUVDLG1CQUFtQixFQUFFQyxtQkFBbUIsRUFBRUMsa0JBQWtCLFFBQVEsb0JBQW9CO0FBR3JIOzs7OztDQUtDLEdBQ0QsT0FBTyxTQUFTQyxhQUFhQyxtQkFBNEIsS0FBSztJQUM1RCxNQUFNQyxTQUFpQ0QsbUJBQW1CLENBQUNFLElBQU1BLEVBQUVDLFFBQVEsS0FBS0M7SUFFaEYsT0FBTztRQUNMQyxVQUFVO1lBQ1JDLElBQUksQ0FBQ0M7Z0JBQ0gsT0FBTyxDQUFDLFVBQVUsRUFBRU4sT0FBT00sWUFBWTtZQUN6QztZQUNBQyxTQUFTLENBQUNELFdBQVdFLE9BQU9DLFdBQVdDO2dCQUNyQyxJQUFJQyxNQUFNLENBQUMsVUFBVSxFQUFFWCxPQUFPTSxXQUFXLENBQUMsRUFBRU4sT0FBT1EsT0FBTyxVQUFVLEVBQUVSLE9BQU9TLFdBQVcsQ0FBQyxDQUFDO2dCQUUxRixJQUFJQyxTQUFTO29CQUNYLElBQUlBLFFBQVFFLFFBQVEsRUFBRUQsT0FBTyxDQUFDLFVBQVUsRUFBRVgsT0FBT1UsUUFBUUUsUUFBUSxHQUFHO29CQUNwRSxJQUFJRixRQUFRRyxjQUFjLEVBQUVGLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRVgsT0FBT1UsUUFBUUcsY0FBYyxHQUFHO2dCQUN6RjtnQkFFQSxPQUFPRjtZQUNUO1lBQ0FHLFNBQVMsQ0FBQ1IsV0FBV0UsT0FBT0U7Z0JBQzFCLElBQUlDLE1BQU0sQ0FBQyxVQUFVLEVBQUVYLE9BQU9NLFdBQVcsQ0FBQyxFQUFFTixPQUFPUSxPQUFPLENBQUMsQ0FBQztnQkFFNUQsSUFBSUUsU0FBUztvQkFDWCxJQUFJQSxTQUFTSyxTQUFTQyxXQUFXTCxPQUFPLENBQUMsS0FBSyxFQUFF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