@mtgame/core 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/api/feedback-api.d.ts +9 -0
  2. package/api/file-api.d.ts +13 -0
  3. package/api/league-news-api.d.ts +13 -0
  4. package/api/public-api.d.ts +6 -0
  5. package/api/team-api.d.ts +66 -0
  6. package/api/team-event-api.d.ts +16 -0
  7. package/api/user-api.d.ts +51 -0
  8. package/bundles/mtgame-core.umd.js +1790 -538
  9. package/bundles/mtgame-core.umd.js.map +1 -1
  10. package/bundles/mtgame-core.umd.min.js +2 -2
  11. package/bundles/mtgame-core.umd.min.js.map +1 -1
  12. package/esm2015/api/feedback-api.js +32 -0
  13. package/esm2015/api/file-api.js +46 -0
  14. package/esm2015/api/league-news-api.js +59 -0
  15. package/esm2015/api/public-api.js +7 -1
  16. package/esm2015/api/team-api.js +394 -0
  17. package/esm2015/api/team-event-api.js +81 -0
  18. package/esm2015/api/user-api.js +284 -0
  19. package/esm2015/models/basketball-game-config.js +5 -4
  20. package/esm2015/models/feedback.js +32 -0
  21. package/esm2015/models/league-news.js +39 -0
  22. package/esm2015/models/public-api.js +7 -1
  23. package/esm2015/models/team-access.js +45 -0
  24. package/esm2015/models/team-permission.js +38 -0
  25. package/esm2015/models/tournament-event.js +11 -4
  26. package/esm2015/models/tournament.js +2 -1
  27. package/esm2015/models/user-access.js +25 -0
  28. package/esm2015/models/user-permission.js +38 -0
  29. package/esm2015/services/centrifugo.service.js +1 -2
  30. package/esm5/api/feedback-api.js +35 -0
  31. package/esm5/api/file-api.js +64 -0
  32. package/esm5/api/league-news-api.js +68 -0
  33. package/esm5/api/public-api.js +7 -1
  34. package/esm5/api/team-api.js +486 -0
  35. package/esm5/api/team-event-api.js +96 -0
  36. package/esm5/api/user-api.js +350 -0
  37. package/esm5/models/basketball-game-config.js +5 -4
  38. package/esm5/models/feedback.js +35 -0
  39. package/esm5/models/league-news.js +44 -0
  40. package/esm5/models/public-api.js +7 -1
  41. package/esm5/models/team-access.js +50 -0
  42. package/esm5/models/team-permission.js +43 -0
  43. package/esm5/models/tournament-event.js +11 -4
  44. package/esm5/models/tournament.js +2 -1
  45. package/esm5/models/user-access.js +30 -0
  46. package/esm5/models/user-permission.js +43 -0
  47. package/esm5/services/centrifugo.service.js +1 -2
  48. package/fesm2015/mtgame-core.js +1200 -191
  49. package/fesm2015/mtgame-core.js.map +1 -1
  50. package/fesm5/mtgame-core.js +1780 -540
  51. package/fesm5/mtgame-core.js.map +1 -1
  52. package/localization/overtime-types.d.ts +2 -2
  53. package/models/basketball-game-config.d.ts +4 -3
  54. package/models/feedback.d.ts +9 -0
  55. package/models/league-news.d.ts +16 -0
  56. package/models/public-api.d.ts +6 -0
  57. package/models/team-access.d.ts +27 -0
  58. package/models/team-permission.d.ts +15 -0
  59. package/models/tournament-event.d.ts +5 -2
  60. package/models/tournament.d.ts +1 -0
  61. package/models/user-access.d.ts +10 -0
  62. package/models/user-permission.d.ts +16 -0
  63. package/mtgame-core.metadata.json +1 -1
  64. package/package.json +1 -1
@@ -0,0 +1,394 @@
1
+ import { __awaiter, __decorate } from "tslib";
2
+ import { Injectable } from '@angular/core';
3
+ import { HttpClient, HttpParams, HttpResponse } from '@angular/common/http';
4
+ import { Team } from '../models/team';
5
+ import { map } from 'rxjs/operators';
6
+ import { TeamUser, TeamUserRole } from '../models/team-user';
7
+ import { User } from '../models/user';
8
+ import { TeamInvite } from '../models/team-invite';
9
+ import { TeamInviteExternal } from '../models/team-invite-external';
10
+ import { Poll } from '../models/poll';
11
+ import { VolleyballStatistic } from '../models/volleyball-statistic';
12
+ import { Game } from '../models/game';
13
+ import { TeamEvent } from '../models/team-event';
14
+ import { Tournament } from '../models/tournament';
15
+ import { TournamentTeam } from '../models/tournament-team';
16
+ import { TournamentInvite } from '../models/tournament-invite';
17
+ import { BasketballStatistic } from '../models/basketball-statistic';
18
+ import { TeamPermission } from '../models/team-permission';
19
+ import { TeamAccess } from '../models/team-access';
20
+ import { ConfigService } from '../services/config.service';
21
+ import * as i0 from "@angular/core";
22
+ import * as i1 from "@angular/common/http";
23
+ import * as i2 from "../services/config.service";
24
+ let TeamApi = class TeamApi {
25
+ constructor(httpClient, configService) {
26
+ this.httpClient = httpClient;
27
+ this.configService = configService;
28
+ }
29
+ search(query, sportId) {
30
+ return __awaiter(this, void 0, void 0, function* () {
31
+ let params = (new HttpParams()).set('search', query);
32
+ if (sportId) {
33
+ params = params.set('sport', sportId.toString());
34
+ }
35
+ return this.httpClient
36
+ .get(`${this.configService.get('apiUrl')}/api/v1/team/`, { params })
37
+ .pipe(map(data => Team.toFront(data)))
38
+ .toPromise();
39
+ });
40
+ }
41
+ create(team) {
42
+ return __awaiter(this, void 0, void 0, function* () {
43
+ return this.httpClient
44
+ .post(`${this.configService.get('apiUrl')}/api/v1/team/`, Team.toBack(team))
45
+ .pipe(map(data => Team.toFront(data)))
46
+ .toPromise();
47
+ });
48
+ }
49
+ getById(teamId) {
50
+ return __awaiter(this, void 0, void 0, function* () {
51
+ return this.httpClient
52
+ .get(`${this.configService.get('apiUrl')}/api/v1/team/${teamId}/`)
53
+ .pipe(map(data => Team.toFront(data)))
54
+ .toPromise();
55
+ });
56
+ }
57
+ getTeamAccess(teamId) {
58
+ return __awaiter(this, void 0, void 0, function* () {
59
+ return this.httpClient
60
+ .get(`${this.configService.get('apiUrl')}/api/v1/team/${teamId}/access/`)
61
+ .pipe(map(data => TeamAccess.toFront(data)))
62
+ .toPromise();
63
+ });
64
+ }
65
+ update(teamId, values) {
66
+ return __awaiter(this, void 0, void 0, function* () {
67
+ return this.httpClient
68
+ .patch(`${this.configService.get('apiUrl')}/api/v1/team/${teamId}/`, Team.toBack(values))
69
+ .pipe(map(data => Team.toFront(data)))
70
+ .toPromise();
71
+ });
72
+ }
73
+ delete(team) {
74
+ return __awaiter(this, void 0, void 0, function* () {
75
+ return this.httpClient
76
+ .delete(`${this.configService.get('apiUrl')}/api/v1/team/${team.id}/`)
77
+ .toPromise();
78
+ });
79
+ }
80
+ getPermission(teamId) {
81
+ return __awaiter(this, void 0, void 0, function* () {
82
+ return this.httpClient
83
+ .get(`${this.configService.get('apiUrl')}/api/v1/team/${teamId}/permission/`)
84
+ .pipe(map(data => TeamPermission.toFront(data)))
85
+ .toPromise();
86
+ });
87
+ }
88
+ updatePermission(teamId, permission) {
89
+ return __awaiter(this, void 0, void 0, function* () {
90
+ return this.httpClient
91
+ .patch(`${this.configService.get('apiUrl')}/api/v1/team/${teamId}/permission/`, TeamPermission.toBack(permission))
92
+ .pipe(map(data => TeamPermission.toFront(data)))
93
+ .toPromise();
94
+ });
95
+ }
96
+ getUsers(teamId, tournamentId) {
97
+ return __awaiter(this, void 0, void 0, function* () {
98
+ let params = new HttpParams();
99
+ if (tournamentId) {
100
+ params = params.set('tournament_id', tournamentId.toString());
101
+ }
102
+ return this.httpClient
103
+ .get(`${this.configService.get('apiUrl')}/api/v1/team/${teamId}/users/`, { params })
104
+ .pipe(map(data => TeamUser.toFront(data)))
105
+ .toPromise();
106
+ });
107
+ }
108
+ updateUserRole(teamId, teamUserId, role) {
109
+ return __awaiter(this, void 0, void 0, function* () {
110
+ return this.httpClient
111
+ .patch(`${this.configService.get('apiUrl')}/api/v1/team/${teamId}/users/${teamUserId}/role/`, { role: TeamUserRole[role] })
112
+ .pipe(map(data => TeamUser.toFront(data)))
113
+ .toPromise();
114
+ });
115
+ }
116
+ updateUserNumber(teamId, teamUserId, gameNumber) {
117
+ return __awaiter(this, void 0, void 0, function* () {
118
+ return this.httpClient
119
+ .patch(`${this.configService.get('apiUrl')}/api/v1/team/${teamId}/users/${teamUserId}/number/`, { number: gameNumber.toString() })
120
+ .pipe(map(data => TeamUser.toFront(data)))
121
+ .toPromise();
122
+ });
123
+ }
124
+ deleteUser(teamUser) {
125
+ return __awaiter(this, void 0, void 0, function* () {
126
+ return this.httpClient
127
+ .delete(`${this.configService.get('apiUrl')}/api/v1/team/${teamUser.teamId}/users/${teamUser.id}/`)
128
+ .toPromise();
129
+ });
130
+ }
131
+ changeOwner(teamId, user) {
132
+ return __awaiter(this, void 0, void 0, function* () {
133
+ return this.httpClient
134
+ .post(`${this.configService.get('apiUrl')}/api/v1/team/${teamId}/owner/`, { id: user.id })
135
+ .pipe(map(data => Team.toFront(data)))
136
+ .toPromise();
137
+ });
138
+ }
139
+ getInvites(teamId) {
140
+ return __awaiter(this, void 0, void 0, function* () {
141
+ return this.httpClient
142
+ .get(`${this.configService.get('apiUrl')}/api/v1/team/${teamId}/invites/`)
143
+ .pipe(map(data => TeamInvite.toFront(data)))
144
+ .toPromise();
145
+ });
146
+ }
147
+ sendInvite(teamId, user) {
148
+ return __awaiter(this, void 0, void 0, function* () {
149
+ return this.httpClient
150
+ .post(`${this.configService.get('apiUrl')}/api/v1/team/${teamId}/invites/`, { user })
151
+ .pipe(map(data => TeamInvite.toFront(data)))
152
+ .toPromise();
153
+ });
154
+ }
155
+ acceptInvite(invite) {
156
+ return __awaiter(this, void 0, void 0, function* () {
157
+ return this.httpClient
158
+ .post(`${this.configService.get('apiUrl')}/api/v1/team_invite/${invite.id}/accept/`, {})
159
+ .pipe(map(data => TeamInvite.toFront(data)))
160
+ .toPromise();
161
+ });
162
+ }
163
+ declineInvite(invite) {
164
+ return __awaiter(this, void 0, void 0, function* () {
165
+ return this.httpClient
166
+ .post(`${this.configService.get('apiUrl')}/api/v1/team_invite/${invite.id}/decline/`, {})
167
+ .pipe(map(data => TeamInvite.toFront(data)))
168
+ .toPromise();
169
+ });
170
+ }
171
+ resendInvite(invite) {
172
+ return __awaiter(this, void 0, void 0, function* () {
173
+ return this.httpClient
174
+ .post(`${this.configService.get('apiUrl')}/api/v1/team_invite/${invite.id}/resend/`, {})
175
+ .pipe(map(data => TeamInvite.toFront(data)))
176
+ .toPromise();
177
+ });
178
+ }
179
+ getInvitesExternal(teamId) {
180
+ return __awaiter(this, void 0, void 0, function* () {
181
+ return this.httpClient
182
+ .get(`${this.configService.get('apiUrl')}/api/v1/team/${teamId}/invites_external/`)
183
+ .pipe(map(data => TeamInviteExternal.toFront(data)))
184
+ .toPromise();
185
+ });
186
+ }
187
+ sendInviteExternal(teamId, invite) {
188
+ return __awaiter(this, void 0, void 0, function* () {
189
+ return this.httpClient
190
+ .post(`${this.configService.get('apiUrl')}/api/v1/team/${teamId}/invites_external/`, TeamInviteExternal.toBack(invite))
191
+ .pipe(map(data => TeamInviteExternal.toFront(data)))
192
+ .toPromise();
193
+ });
194
+ }
195
+ deleteInviteExternal(invite) {
196
+ return __awaiter(this, void 0, void 0, function* () {
197
+ return this.httpClient
198
+ .delete(`${this.configService.get('apiUrl')}/api/v1/invites_external/${invite.id}/`)
199
+ .toPromise();
200
+ });
201
+ }
202
+ resendInviteExternal(invite) {
203
+ return __awaiter(this, void 0, void 0, function* () {
204
+ return this.httpClient
205
+ .post(`${this.configService.get('apiUrl')}/api/v1/invites_external/${invite.id}/resend/`, {})
206
+ .pipe(map(data => TeamInviteExternal.toFront(data)))
207
+ .toPromise();
208
+ });
209
+ }
210
+ getPolls(teamId, archive = false) {
211
+ return __awaiter(this, void 0, void 0, function* () {
212
+ return this.httpClient
213
+ .get(`${this.configService.get('apiUrl')}/api/v1/team/${teamId}/polls/${archive ? '?archive=1' : ''}`)
214
+ .pipe(map(data => Poll.toFront(data)))
215
+ .toPromise();
216
+ });
217
+ }
218
+ createPoll(teamId, poll) {
219
+ return __awaiter(this, void 0, void 0, function* () {
220
+ return this.httpClient
221
+ .post(`${this.configService.get('apiUrl')}/api/v1/team/${teamId}/polls/`, Poll.toBack(poll))
222
+ .pipe(map(data => Poll.toFront(data)))
223
+ .toPromise();
224
+ });
225
+ }
226
+ getUsersStatistic(teamId) {
227
+ return __awaiter(this, void 0, void 0, function* () {
228
+ return this.httpClient
229
+ .get(`${this.configService.get('apiUrl')}/api/v1/team/${teamId}/statistics/`)
230
+ .pipe(map(data => BasketballStatistic.toFront(data)))
231
+ .toPromise();
232
+ });
233
+ }
234
+ getVolleyballStatistic(teamId) {
235
+ return __awaiter(this, void 0, void 0, function* () {
236
+ return this.httpClient
237
+ .get(`${this.configService.get('apiUrl')}/api/v1/team/${teamId}/volleyball_statistics/`)
238
+ .pipe(map(data => VolleyballStatistic.toFront(data)))
239
+ .toPromise();
240
+ });
241
+ }
242
+ joinTeam(teamId) {
243
+ return __awaiter(this, void 0, void 0, function* () {
244
+ return this.httpClient
245
+ .post(`${this.configService.get('apiUrl')}/api/v1/team/${teamId}/join/`, {})
246
+ .pipe(map(data => TeamInvite.toFront(data)))
247
+ .toPromise();
248
+ });
249
+ }
250
+ leaveTeam(teamId) {
251
+ return __awaiter(this, void 0, void 0, function* () {
252
+ return this.httpClient
253
+ .post(`${this.configService.get('apiUrl')}/api/v1/team/${teamId}/leave/`, {})
254
+ .toPromise();
255
+ });
256
+ }
257
+ getGames(teamId, archive = false) {
258
+ return __awaiter(this, void 0, void 0, function* () {
259
+ return this.httpClient
260
+ .get(`${this.configService.get('apiUrl')}/api/v1/team/${teamId}/games/${archive ? '?archive=1' : ''}`)
261
+ .pipe(map(data => Game.toFront(data)))
262
+ .toPromise();
263
+ });
264
+ }
265
+ createGame(teamId, game) {
266
+ return __awaiter(this, void 0, void 0, function* () {
267
+ return this.httpClient
268
+ .post(`${this.configService.get('apiUrl')}/api/v1/team/${teamId}/games/`, Game.toBack(game))
269
+ .pipe(map(data => Game.toFront(data)))
270
+ .toPromise();
271
+ });
272
+ }
273
+ getTeamEvents(teamId) {
274
+ return __awaiter(this, void 0, void 0, function* () {
275
+ return this.httpClient
276
+ .get(`${this.configService.get('apiUrl')}/api/v1/team/${teamId}/events/`)
277
+ .pipe(map(data => TeamEvent.toFront(data)))
278
+ .toPromise();
279
+ });
280
+ }
281
+ createTeamEvent(teamId, teamEvent) {
282
+ return __awaiter(this, void 0, void 0, function* () {
283
+ return this.httpClient
284
+ .post(`${this.configService.get('apiUrl')}/api/v1/team/${teamId}/events/`, TeamEvent.toBack(teamEvent))
285
+ .pipe(map(data => TeamEvent.toFront(data)))
286
+ .toPromise();
287
+ });
288
+ }
289
+ getTournaments(teamId) {
290
+ return __awaiter(this, void 0, void 0, function* () {
291
+ return this.httpClient
292
+ .get(`${this.configService.get('apiUrl')}/api/v1/team/${teamId}/tournaments/`)
293
+ .pipe(map(data => Tournament.toFront(data)))
294
+ .toPromise();
295
+ });
296
+ }
297
+ getTournamentTeams(teamId) {
298
+ return __awaiter(this, void 0, void 0, function* () {
299
+ return this.httpClient
300
+ .get(`${this.configService.get('apiUrl')}/api/v1/team/${teamId}/tournament_teams/`)
301
+ .pipe(map(data => TournamentTeam.toFront(data)))
302
+ .toPromise();
303
+ });
304
+ }
305
+ getTournamentInvites(teamId) {
306
+ return __awaiter(this, void 0, void 0, function* () {
307
+ return this.httpClient
308
+ .get(`${this.configService.get('apiUrl')}/api/v1/team/${teamId}/tournament_invites/`)
309
+ .pipe(map(data => TournamentInvite.toFront(data)))
310
+ .toPromise();
311
+ });
312
+ }
313
+ getTournamentGames(teamId, tournamentId, page, size) {
314
+ return __awaiter(this, void 0, void 0, function* () {
315
+ let params = new HttpParams().set('page', page.toString());
316
+ if (size) {
317
+ params = params.set('size', size.toString());
318
+ }
319
+ return this.httpClient
320
+ .get(`${this.configService.get('apiUrl')}/api/v1/team/${teamId}/tournaments/${tournamentId}/games/`, { params, observe: 'response' })
321
+ .pipe(map((response) => {
322
+ return {
323
+ total: +response.headers.get('X-Page-Count'),
324
+ data: Game.toFront(response.body)
325
+ };
326
+ }))
327
+ .toPromise();
328
+ });
329
+ }
330
+ acceptTournamentInvite(inviteId) {
331
+ return __awaiter(this, void 0, void 0, function* () {
332
+ return this.httpClient
333
+ .post(`${this.configService.get('apiUrl')}/api/v1/tournament_invite/${inviteId}/accept/`, {})
334
+ .pipe(map(data => TournamentInvite.toFront(data)))
335
+ .toPromise();
336
+ });
337
+ }
338
+ declineTournamentInvite(inviteId) {
339
+ return __awaiter(this, void 0, void 0, function* () {
340
+ return this.httpClient
341
+ .post(`${this.configService.get('apiUrl')}/api/v1/tournament_invite/${inviteId}/decline/`, {})
342
+ .pipe(map(data => TournamentInvite.toFront(data)))
343
+ .toPromise();
344
+ });
345
+ }
346
+ registerLazyUser(teamId, userData) {
347
+ return __awaiter(this, void 0, void 0, function* () {
348
+ return this.httpClient
349
+ .post(`${this.configService.get('apiUrl')}/api/v1/team/${teamId}/lazy_user/`, { user: User.toBack(userData) })
350
+ .pipe(map(data => TeamUser.toFront(data)))
351
+ .toPromise();
352
+ });
353
+ }
354
+ getLazyUser(teamUserId) {
355
+ return __awaiter(this, void 0, void 0, function* () {
356
+ return this.httpClient
357
+ .get(`${this.configService.get('apiUrl')}/api/v1/lazy_user/${teamUserId}/`)
358
+ .pipe(map(data => TeamUser.toFront(data)))
359
+ .toPromise();
360
+ });
361
+ }
362
+ updateLazyUser(teamUserId, userData) {
363
+ return __awaiter(this, void 0, void 0, function* () {
364
+ return this.httpClient
365
+ .patch(`${this.configService.get('apiUrl')}/api/v1/lazy_user/${teamUserId}/`, { user: User.toBack(userData) })
366
+ .pipe(map(data => TeamUser.toFront(data)))
367
+ .toPromise();
368
+ });
369
+ }
370
+ deleteLazyUser(teamUserId) {
371
+ return __awaiter(this, void 0, void 0, function* () {
372
+ return this.httpClient
373
+ .delete(`${this.configService.get('apiUrl')}/api/v1/lazy_user/${teamUserId}/`)
374
+ .toPromise();
375
+ });
376
+ }
377
+ resendLazyUserEmail(teamUserId) {
378
+ return __awaiter(this, void 0, void 0, function* () {
379
+ return this.httpClient
380
+ .post(`${this.configService.get('apiUrl')}/api/v1/lazy_user/${teamUserId}/resend_email/`, {})
381
+ .toPromise();
382
+ });
383
+ }
384
+ };
385
+ TeamApi.ctorParameters = () => [
386
+ { type: HttpClient },
387
+ { type: ConfigService }
388
+ ];
389
+ TeamApi.ɵprov = i0.ɵɵdefineInjectable({ factory: function TeamApi_Factory() { return new TeamApi(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i2.ConfigService)); }, token: TeamApi, providedIn: "root" });
390
+ TeamApi = __decorate([
391
+ Injectable({ providedIn: 'root' })
392
+ ], TeamApi);
393
+ export { TeamApi };
394
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVhbS1hcGkuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbXRnYW1lL2NvcmUvIiwic291cmNlcyI6WyJhcGkvdGVhbS1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxF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QUMsQ0FBQztHQUNwQixPQUFPLENBNlRuQjtTQTdUWSxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cFBhcmFtcywgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgVGVhbSB9IGZyb20gJy4uL21vZGVscy90ZWFtJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRlYW1Vc2VyLCBUZWFtVXNlclJvbGUgfSBmcm9tICcuLi9tb2RlbHMvdGVhbS11c2VyJztcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi9tb2RlbHMvdXNlcic7XG5pbXBvcnQgeyBUZWFtSW52aXRlIH0gZnJvbSAnLi4vbW9kZWxzL3RlYW0taW52aXRlJztcbmltcG9ydCB7IFRlYW1JbnZpdGVFeHRlcm5hbCB9IGZyb20gJy4uL21vZGVscy90ZWFtLWludml0ZS1leHRlcm5hbCc7XG5pbXBvcnQgeyBQb2xsIH0gZnJvbSAnLi4vbW9kZWxzL3BvbGwnO1xuaW1wb3J0IHsgVm9sbGV5YmFsbFN0YXRpc3RpYyB9IGZyb20gJy4uL21vZGVscy92b2xsZXliYWxsLXN0YXRpc3RpYyc7XG5pbXBvcnQgeyBHYW1lIH0gZnJvbSAnLi4vbW9kZWxzL2dhbWUnO1xuaW1wb3J0IHsgVGVhbUV2ZW50IH0gZnJvbSAnLi4vbW9kZWxzL3RlYW0tZXZlbnQnO1xuaW1wb3J0IHsgVG91cm5hbWVudCB9IGZyb20gJy4uL21vZGVscy90b3VybmFtZW50JztcbmltcG9ydCB7IFRvdXJuYW1lbnRUZWFtIH0gZnJvbSAnLi4vbW9kZWxzL3RvdXJuYW1lbnQtdGVhbSc7XG5pbXBvcnQgeyBUb3VybmFtZW50SW52aXRlIH0gZnJvbSAnLi4vbW9kZWxzL3RvdXJuYW1lbnQtaW52aXRlJztcbmltcG9ydCB7IFBhZ2luYXRlZFJlc3BvbnNlIH0gZnJvbSAnLi9wYWdpbmF0ZWQtcmVzcG9uc2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IEJhc2tldGJhbGxTdGF0aXN0aWMgfSBmcm9tICcuLi9tb2RlbHMvYmFza2V0YmFsbC1zdGF0aXN0aWMnO1xuaW1wb3J0IHsgVGVhbVBlcm1pc3Npb24gfSBmcm9tICcuLi9tb2RlbHMvdGVhbS1wZXJtaXNzaW9uJztcbmltcG9ydCB7IFRlYW1BY2Nlc3MgfSBmcm9tICcuLi9tb2RlbHMvdGVhbS1hY2Nlc3MnO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbmZpZy5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgVGVhbUFwaSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICkge31cblxuICBhc3luYyBzZWFyY2gocXVlcnk6IHN0cmluZywgc3BvcnRJZD86IG51bWJlcik6IFByb21pc2U8VGVhbVtdPiB7XG4gICAgbGV0IHBhcmFtcyA9IChuZXcgSHR0cFBhcmFtcygpKS5zZXQoJ3NlYXJjaCcsIHF1ZXJ5KTtcbiAgICBpZiAoc3BvcnRJZCkge1xuICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgnc3BvcnQnLCBzcG9ydElkLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAuZ2V0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdGVhbS9gLCB7cGFyYW1zfSlcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IFRlYW0udG9Gcm9udChkYXRhKSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBjcmVhdGUodGVhbTogVGVhbSk6IFByb21pc2U8VGVhbT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5wb3N0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdGVhbS9gLCBUZWFtLnRvQmFjayh0ZWFtKSlcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IFRlYW0udG9Gcm9udChkYXRhKSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBnZXRCeUlkKHRlYW1JZDogbnVtYmVyKTogUHJvbWlzZTxUZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLmdldChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3RlYW0vJHt0ZWFtSWR9L2ApXG4gICAgICAucGlwZShtYXAoZGF0YSA9PiBUZWFtLnRvRnJvbnQoZGF0YSkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0VGVhbUFjY2Vzcyh0ZWFtSWQ6IG51bWJlcik6IFByb21pc2U8VGVhbUFjY2Vzcz4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5nZXQoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90ZWFtLyR7dGVhbUlkfS9hY2Nlc3MvYClcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IFRlYW1BY2Nlc3MudG9Gcm9udChkYXRhKSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyB1cGRhdGUodGVhbUlkOiBudW1iZXIsIHZhbHVlczogYW55KTogUHJvbWlzZTxUZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLnBhdGNoKGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdGVhbS8ke3RlYW1JZH0vYCwgVGVhbS50b0JhY2sodmFsdWVzKSlcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IFRlYW0udG9Gcm9udChkYXRhKSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBkZWxldGUodGVhbTogVGVhbSk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLmRlbGV0ZShgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3RlYW0vJHt0ZWFtLmlkfS9gKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0UGVybWlzc2lvbih0ZWFtSWQ6IG51bWJlcik6IFByb21pc2U8VGVhbVBlcm1pc3Npb24+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAuZ2V0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdGVhbS8ke3RlYW1JZH0vcGVybWlzc2lvbi9gKVxuICAgICAgLnBpcGUobWFwKGRhdGEgPT4gVGVhbVBlcm1pc3Npb24udG9Gcm9udChkYXRhKSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVQZXJtaXNzaW9uKHRlYW1JZDogbnVtYmVyLCBwZXJtaXNzaW9uOiBUZWFtUGVybWlzc2lvbik6IFByb21pc2U8VGVhbVBlcm1pc3Npb24+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAucGF0Y2goYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90ZWFtLyR7dGVhbUlkfS9wZXJtaXNzaW9uL2AsIFRlYW1QZXJtaXNzaW9uLnRvQmFjayhwZXJtaXNzaW9uKSlcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IFRlYW1QZXJtaXNzaW9uLnRvRnJvbnQoZGF0YSkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0VXNlcnModGVhbUlkOiBudW1iZXIsIHRvdXJuYW1lbnRJZD86IG51bWJlcik6IFByb21pc2U8VGVhbVVzZXJbXT4ge1xuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGlmICh0b3VybmFtZW50SWQpIHtcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ3RvdXJuYW1lbnRfaWQnLCB0b3VybmFtZW50SWQudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5nZXQoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90ZWFtLyR7dGVhbUlkfS91c2Vycy9gLCB7cGFyYW1zfSlcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IFRlYW1Vc2VyLnRvRnJvbnQoZGF0YSkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlVXNlclJvbGUodGVhbUlkOiBudW1iZXIsIHRlYW1Vc2VySWQ6IG51bWJlciwgcm9sZTogVGVhbVVzZXJSb2xlKTogUHJvbWlzZTxUZWFtVXNlcj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5wYXRjaChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3RlYW0vJHt0ZWFtSWR9L3VzZXJzLyR7dGVhbVVzZXJJZH0vcm9sZS9gLCB7cm9sZTogVGVhbVVzZXJSb2xlW3JvbGVdfSlcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IFRlYW1Vc2VyLnRvRnJvbnQoZGF0YSkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlVXNlck51bWJlcih0ZWFtSWQ6IG51bWJlciwgdGVhbVVzZXJJZDogbnVtYmVyLCBnYW1lTnVtYmVyOiBudW1iZXIpOiBQcm9taXNlPFRlYW1Vc2VyPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLnBhdGNoKGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdGVhbS8ke3RlYW1JZH0vdXNlcnMvJHt0ZWFtVXNlcklkfS9udW1iZXIvYCwge251bWJlcjogZ2FtZU51bWJlci50b1N0cmluZygpfSlcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IFRlYW1Vc2VyLnRvRnJvbnQoZGF0YSkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlVXNlcih0ZWFtVXNlcjogVGVhbVVzZXIpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5kZWxldGUoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90ZWFtLyR7dGVhbVVzZXIudGVhbUlkfS91c2Vycy8ke3RlYW1Vc2VyLmlkfS9gKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgY2hhbmdlT3duZXIodGVhbUlkOiBudW1iZXIsIHVzZXI6IFVzZXIpOiBQcm9taXNlPFRlYW0+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAucG9zdChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3RlYW0vJHt0ZWFtSWR9L293bmVyL2AsIHtpZDogdXNlci5pZH0pXG4gICAgICAucGlwZShtYXAoZGF0YSA9PiBUZWFtLnRvRnJvbnQoZGF0YSkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0SW52aXRlcyh0ZWFtSWQ6IG51bWJlcik6IFByb21pc2U8VGVhbUludml0ZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLmdldChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3RlYW0vJHt0ZWFtSWR9L2ludml0ZXMvYClcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IFRlYW1JbnZpdGUudG9Gcm9udChkYXRhKSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBzZW5kSW52aXRlKHRlYW1JZDogbnVtYmVyLCB1c2VyOiBVc2VyKTogUHJvbWlzZTxUZWFtSW52aXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLnBvc3QoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90ZWFtLyR7dGVhbUlkfS9pbnZpdGVzL2AsIHt1c2VyfSlcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IFRlYW1JbnZpdGUudG9Gcm9udChkYXRhKSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBhY2NlcHRJbnZpdGUoaW52aXRlOiBUZWFtSW52aXRlKTogUHJvbWlzZTxUZWFtSW52aXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLnBvc3QoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90ZWFtX2ludml0ZS8ke2ludml0ZS5pZH0vYWNjZXB0L2AsIHt9KVxuICAgICAgLnBpcGUobWFwKGRhdGEgPT4gVGVhbUludml0ZS50b0Zyb250KGRhdGEpKSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGRlY2xpbmVJbnZpdGUoaW52aXRlOiBUZWFtSW52aXRlKTogUHJvbWlzZTxUZWFtSW52aXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLnBvc3QoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90ZWFtX2ludml0ZS8ke2ludml0ZS5pZH0vZGVjbGluZS9gLCB7fSlcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IFRlYW1JbnZpdGUudG9Gcm9udChkYXRhKSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyByZXNlbmRJbnZpdGUoaW52aXRlOiBUZWFtSW52aXRlKTogUHJvbWlzZTxUZWFtSW52aXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLnBvc3QoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90ZWFtX2ludml0ZS8ke2ludml0ZS5pZH0vcmVzZW5kL2AsIHt9KVxuICAgICAgLnBpcGUobWFwKGRhdGEgPT4gVGVhbUludml0ZS50b0Zyb250KGRhdGEpKSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGdldEludml0ZXNFeHRlcm5hbCh0ZWFtSWQ6IG51bWJlcik6IFByb21pc2U8VGVhbUludml0ZUV4dGVybmFsW10+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAuZ2V0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdGVhbS8ke3RlYW1JZH0vaW52aXRlc19leHRlcm5hbC9gKVxuICAgICAgLnBpcGUobWFwKGRhdGEgPT4gVGVhbUludml0ZUV4dGVybmFsLnRvRnJvbnQoZGF0YSkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgc2VuZEludml0ZUV4dGVybmFsKHRlYW1JZDogbnVtYmVyLCBpbnZpdGU6IFRlYW1JbnZpdGVFeHRlcm5hbCk6IFByb21pc2U8VGVhbUludml0ZUV4dGVybmFsPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLnBvc3QoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90ZWFtLyR7dGVhbUlkfS9pbnZpdGVzX2V4dGVybmFsL2AsIFRlYW1JbnZpdGVFeHRlcm5hbC50b0JhY2soaW52aXRlKSlcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IFRlYW1JbnZpdGVFeHRlcm5hbC50b0Zyb250KGRhdGEpKSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUludml0ZUV4dGVybmFsKGludml0ZTogVGVhbUludml0ZUV4dGVybmFsKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAuZGVsZXRlKGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvaW52aXRlc19leHRlcm5hbC8ke2ludml0ZS5pZH0vYClcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIHJlc2VuZEludml0ZUV4dGVybmFsKGludml0ZTogVGVhbUludml0ZUV4dGVybmFsKTogUHJvbWlzZTxUZWFtSW52aXRlRXh0ZXJuYWw+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAucG9zdChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL2ludml0ZXNfZXh0ZXJuYWwvJHtpbnZpdGUuaWR9L3Jlc2VuZC9gLCB7fSlcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IFRlYW1JbnZpdGVFeHRlcm5hbC50b0Zyb250KGRhdGEpKSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGdldFBvbGxzKHRlYW1JZDogbnVtYmVyLCBhcmNoaXZlOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPFBvbGxbXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5nZXQoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90ZWFtLyR7dGVhbUlkfS9wb2xscy8ke2FyY2hpdmUgPyAnP2FyY2hpdmU9MScgOiAnJ31gKVxuICAgICAgLnBpcGUobWFwKGRhdGEgPT4gUG9sbC50b0Zyb250KGRhdGEpKSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVBvbGwodGVhbUlkOiBudW1iZXIsIHBvbGw6IFBvbGwpOiBQcm9taXNlPFBvbGw+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAucG9zdChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3RlYW0vJHt0ZWFtSWR9L3BvbGxzL2AsIFBvbGwudG9CYWNrKHBvbGwpKVxuICAgICAgLnBpcGUobWFwKGRhdGEgPT4gUG9sbC50b0Zyb250KGRhdGEpKSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGdldFVzZXJzU3RhdGlzdGljKHRlYW1JZDogbnVtYmVyKTogUHJvbWlzZTxCYXNrZXRiYWxsU3RhdGlzdGljW10+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAuZ2V0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdGVhbS8ke3RlYW1JZH0vc3RhdGlzdGljcy9gKVxuICAgICAgLnBpcGUobWFwKGRhdGEgPT4gQmFza2V0YmFsbFN0YXRpc3RpYy50b0Zyb250KGRhdGEpKSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGdldFZvbGxleWJhbGxTdGF0aXN0aWModGVhbUlkOiBudW1iZXIpOiBQcm9taXNlPFZvbGxleWJhbGxTdGF0aXN0aWNbXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5nZXQoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90ZWFtLyR7dGVhbUlkfS92b2xsZXliYWxsX3N0YXRpc3RpY3MvYClcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IFZvbGxleWJhbGxTdGF0aXN0aWMudG9Gcm9udChkYXRhKSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBqb2luVGVhbSh0ZWFtSWQ6IG51bWJlcik6IFByb21pc2U8VGVhbUludml0ZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5wb3N0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdGVhbS8ke3RlYW1JZH0vam9pbi9gLCB7fSlcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IFRlYW1JbnZpdGUudG9Gcm9udChkYXRhKSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBsZWF2ZVRlYW0odGVhbUlkOiBudW1iZXIpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5wb3N0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdGVhbS8ke3RlYW1JZH0vbGVhdmUvYCwge30pXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBnZXRHYW1lcyh0ZWFtSWQ6IG51bWJlciwgYXJjaGl2ZSA9IGZhbHNlKTogUHJvbWlzZTxHYW1lW10+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAuZ2V0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdGVhbS8ke3RlYW1JZH0vZ2FtZXMvJHthcmNoaXZlID8gJz9hcmNoaXZlPTEnIDogJyd9YClcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IEdhbWUudG9Gcm9udChkYXRhKSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVHYW1lKHRlYW1JZDogbnVtYmVyLCBnYW1lOiBHYW1lKTogUHJvbWlzZTxHYW1lPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLnBvc3QoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90ZWFtLyR7dGVhbUlkfS9nYW1lcy9gLCBHYW1lLnRvQmFjayhnYW1lKSlcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IEdhbWUudG9Gcm9udChkYXRhKSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBnZXRUZWFtRXZlbnRzKHRlYW1JZDogbnVtYmVyKTogUHJvbWlzZTxUZWFtRXZlbnRbXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5nZXQoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90ZWFtLyR7dGVhbUlkfS9ldmVudHMvYClcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IFRlYW1FdmVudC50b0Zyb250KGRhdGEpKSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVRlYW1FdmVudCh0ZWFtSWQ6IG51bWJlciwgdGVhbUV2ZW50OiBUZWFtRXZlbnQpOiBQcm9taXNlPFRlYW1FdmVudD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5wb3N0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdGVhbS8ke3RlYW1JZH0vZXZlbnRzL2AsIFRlYW1FdmVudC50b0JhY2sodGVhbUV2ZW50KSlcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IFRlYW1FdmVudC50b0Zyb250KGRhdGEpKSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGdldFRvdXJuYW1lbnRzKHRlYW1JZDogbnVtYmVyKTogUHJvbWlzZTxUb3VybmFtZW50W10+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAuZ2V0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdGVhbS8ke3RlYW1JZH0vdG91cm5hbWVudHMvYClcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IFRvdXJuYW1lbnQudG9Gcm9udChkYXRhKSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBnZXRUb3VybmFtZW50VGVhbXModGVhbUlkOiBudW1iZXIpOiBQcm9taXNlPFRvdXJuYW1lbnRUZWFtW10+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAuZ2V0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdGVhbS8ke3RlYW1JZH0vdG91cm5hbWVudF90ZWFtcy9gKVxuICAgICAgLnBpcGUobWFwKGRhdGEgPT4gVG91cm5hbWVudFRlYW0udG9Gcm9udChkYXRhKSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBnZXRUb3VybmFtZW50SW52aXRlcyh0ZWFtSWQ6IG51bWJlcik6IFByb21pc2U8VG91cm5hbWVudEludml0ZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLmdldChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3RlYW0vJHt0ZWFtSWR9L3RvdXJuYW1lbnRfaW52aXRlcy9gKVxuICAgICAgLnBpcGUobWFwKGRhdGEgPT4gVG91cm5hbWVudEludml0ZS50b0Zyb250KGRhdGEpKSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGdldFRvdXJuYW1lbnRHYW1lcyh0ZWFtSWQ6IG51bWJlciwgdG91cm5hbWVudElkOiBudW1iZXIsIHBhZ2U6IG51bWJlciwgc2l6ZT86IG51bWJlcik6IFByb21pc2U8UGFnaW5hdGVkUmVzcG9uc2U8R2FtZVtdPj4ge1xuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpLnNldCgncGFnZScsIHBhZ2UudG9TdHJpbmcoKSk7XG4gICAgaWYgKHNpemUpIHtcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ3NpemUnLCBzaXplLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAuZ2V0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdGVhbS8ke3RlYW1JZH0vdG91cm5hbWVudHMvJHt0b3VybmFtZW50SWR9L2dhbWVzL2AsIHtwYXJhbXMsIG9ic2VydmU6ICdyZXNwb25zZSd9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogSHR0cFJlc3BvbnNlPGFueT4pID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0b3RhbDogK3Jlc3BvbnNlLmhlYWRlcnMuZ2V0KCdYLVBhZ2UtQ291bnQnKSxcbiAgICAgICAgICBkYXRhOiBHYW1lLnRvRnJvbnQocmVzcG9uc2UuYm9keSlcbiAgICAgICAgfTtcbiAgICAgIH0pKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgYWNjZXB0VG91cm5hbWVudEludml0ZShpbnZpdGVJZDogbnVtYmVyKTogUHJvbWlzZTxUb3VybmFtZW50SW52aXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLnBvc3QoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90b3VybmFtZW50X2ludml0ZS8ke2ludml0ZUlkfS9hY2NlcHQvYCwge30pXG4gICAgICAucGlwZShtYXAoZGF0YSA9PiBUb3VybmFtZW50SW52aXRlLnRvRnJvbnQoZGF0YSkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgZGVjbGluZVRvdXJuYW1lbnRJbnZpdGUoaW52aXRlSWQ6IG51bWJlcik6IFByb21pc2U8VG91cm5hbWVudEludml0ZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5wb3N0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdG91cm5hbWVudF9pbnZpdGUvJHtpbnZpdGVJZH0vZGVjbGluZS9gLCB7fSlcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IFRvdXJuYW1lbnRJbnZpdGUudG9Gcm9udChkYXRhKSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyByZWdpc3RlckxhenlVc2VyKHRlYW1JZDogbnVtYmVyLCB1c2VyRGF0YTogVXNlcik6IFByb21pc2U8VGVhbVVzZXI+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAucG9zdChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3RlYW0vJHt0ZWFtSWR9L2xhenlfdXNlci9gLCAge3VzZXI6IFVzZXIudG9CYWNrKHVzZXJEYXRhKX0pXG4gICAgICAucGlwZShtYXAoZGF0YSA9PiBUZWFtVXNlci50b0Zyb250KGRhdGEpKSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGdldExhenlVc2VyKHRlYW1Vc2VySWQ6IG51bWJlcik6IFByb21pc2U8VGVhbVVzZXI+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAuZ2V0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvbGF6eV91c2VyLyR7dGVhbVVzZXJJZH0vYClcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IFRlYW1Vc2VyLnRvRnJvbnQoZGF0YSkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlTGF6eVVzZXIodGVhbVVzZXJJZDogbnVtYmVyLCB1c2VyRGF0YTogVXNlcik6IFByb21pc2U8VGVhbVVzZXI+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAucGF0Y2goYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS9sYXp5X3VzZXIvJHt0ZWFtVXNlcklkfS9gLCB7dXNlcjogVXNlci50b0JhY2sodXNlckRhdGEpfSlcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IFRlYW1Vc2VyLnRvRnJvbnQoZGF0YSkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlTGF6eVVzZXIodGVhbVVzZXJJZDogbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAuZGVsZXRlKGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvbGF6eV91c2VyLyR7dGVhbVVzZXJJZH0vYClcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIHJlc2VuZExhenlVc2VyRW1haWwodGVhbVVzZXJJZDogbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAucG9zdChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL2xhenlfdXNlci8ke3RlYW1Vc2VySWR9L3Jlc2VuZF9lbWFpbC9gLCB7fSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,81 @@
1
+ import { __awaiter, __decorate } from "tslib";
2
+ import { Injectable } from '@angular/core';
3
+ import { HttpClient } from '@angular/common/http';
4
+ import { map } from 'rxjs/operators';
5
+ import { TeamEvent } from '../models/team-event';
6
+ import { TeamEventInvite } from '../models/team-event-invite';
7
+ import { ConfigService } from '../services/config.service';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/common/http";
10
+ import * as i2 from "../services/config.service";
11
+ let TeamEventApi = class TeamEventApi {
12
+ constructor(httpClient, configService) {
13
+ this.httpClient = httpClient;
14
+ this.configService = configService;
15
+ }
16
+ getTeamEvent(teamEventId) {
17
+ return __awaiter(this, void 0, void 0, function* () {
18
+ return this.httpClient
19
+ .get(`${this.configService.get('apiUrl')}/api/v1/team_event/${teamEventId}/`)
20
+ .pipe(map(data => TeamEvent.toFront(data)))
21
+ .toPromise();
22
+ });
23
+ }
24
+ updateTeamEvent(teamEvent) {
25
+ return __awaiter(this, void 0, void 0, function* () {
26
+ return this.httpClient
27
+ .patch(`${this.configService.get('apiUrl')}/api/v1/team_event/${teamEvent.id}/`, TeamEvent.toBack(teamEvent))
28
+ .pipe(map(data => TeamEvent.toFront(data)))
29
+ .toPromise();
30
+ });
31
+ }
32
+ deleteTeamEvent(teamEventId) {
33
+ return __awaiter(this, void 0, void 0, function* () {
34
+ return this.httpClient
35
+ .delete(`${this.configService.get('apiUrl')}/api/v1/team_event/${teamEventId}/`)
36
+ .toPromise();
37
+ });
38
+ }
39
+ getTeamEventInvites(teamEventId) {
40
+ return __awaiter(this, void 0, void 0, function* () {
41
+ return this.httpClient
42
+ .get(`${this.configService.get('apiUrl')}/api/v1/team_event/${teamEventId}/invites/`)
43
+ .pipe(map(data => TeamEventInvite.toFront(data)))
44
+ .toPromise();
45
+ });
46
+ }
47
+ createTeamEventInvite(teamEventId, teamUserId) {
48
+ return __awaiter(this, void 0, void 0, function* () {
49
+ return this.httpClient
50
+ .post(`${this.configService.get('apiUrl')}/api/v1/team_event/${teamEventId}/invites/`, { team_user_id: teamUserId })
51
+ .pipe(map(data => TeamEventInvite.toFront(data)))
52
+ .toPromise();
53
+ });
54
+ }
55
+ acceptTeamEventInvite(teamEventInvite) {
56
+ return __awaiter(this, void 0, void 0, function* () {
57
+ return this.httpClient
58
+ .post(`${this.configService.get('apiUrl')}/api/v1/team_event_invite/${teamEventInvite.id}/accept/`, {})
59
+ .pipe(map(data => TeamEventInvite.toFront(data)))
60
+ .toPromise();
61
+ });
62
+ }
63
+ declineTeamEventInvite(teamEventInvite) {
64
+ return __awaiter(this, void 0, void 0, function* () {
65
+ return this.httpClient
66
+ .post(`${this.configService.get('apiUrl')}/api/v1/team_event_invite/${teamEventInvite.id}/decline/`, {})
67
+ .pipe(map(data => TeamEventInvite.toFront(data)))
68
+ .toPromise();
69
+ });
70
+ }
71
+ };
72
+ TeamEventApi.ctorParameters = () => [
73
+ { type: HttpClient },
74
+ { type: ConfigService }
75
+ ];
76
+ TeamEventApi.ɵprov = i0.ɵɵdefineInjectable({ factory: function TeamEventApi_Factory() { return new TeamEventApi(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i2.ConfigService)); }, token: TeamEventApi, providedIn: "root" });
77
+ TeamEventApi = __decorate([
78
+ Injectable({ providedIn: 'root' })
79
+ ], TeamEventApi);
80
+ export { TeamEventApi };
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVhbS1ldmVudC1hcGkuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbXRnYW1lL2NvcmUvIiwic291cmNlcyI6WyJhcGkvdGVhbS1ldmVudC1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7OztBQUczRCxJQUFhLFlBQVksR0FBekIsTUFBYSxZQUFZO0lBQ3ZCLFlBQ1UsVUFBc0IsRUFDdEIsYUFBNEI7UUFENUIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtJQUNuQyxDQUFDO0lBRUUsWUFBWSxDQUFDLFdBQW1COztZQUNwQyxPQUFPLElBQUksQ0FBQyxVQUFVO2lCQUNuQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLFdBQVcsR0FBRyxDQUFDO2lCQUM1RSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2lCQUMxQyxTQUFTLEVBQUUsQ0FBQztRQUNqQixDQUFDO0tBQUE7SUFFSyxlQUFlLENBQUMsU0FBb0I7O1lBQ3hDLE9BQU8sSUFBSSxDQUFDLFVBQVU7aUJBQ25CLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsU0FBUyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQzVHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7aUJBQzFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLENBQUM7S0FBQTtJQUVLLGVBQWUsQ0FBQyxXQUFtQjs7WUFDdkMsT0FBTyxJQUFJLENBQUMsVUFBVTtpQkFDbkIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLHNCQUFzQixXQUFXLEdBQUcsQ0FBQztpQkFDL0UsU0FBUyxFQUFFLENBQUM7UUFDakIsQ0FBQztLQUFBO0lBRUssbUJBQW1CLENBQUMsV0FBbUI7O1lBQzNDLE9BQU8sSUFBSSxDQUFDLFVBQVU7aUJBQ25CLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsV0FBVyxXQUFXLENBQUM7aUJBQ3BGLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7aUJBQ2hELFNBQVMsRUFBRSxDQUFDO1FBQ2pCLENBQUM7S0FBQTtJQUVLLHFCQUFxQixDQUFDLFdBQW1CLEVBQUUsVUFBa0I7O1lBQ2pFLE9BQU8sSUFBSSxDQUFDLFVBQVU7aUJBQ25CLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsV0FBVyxXQUFXLEVBQUUsRUFBQyxZQUFZLEVBQUUsVUFBVSxFQUFDLENBQUM7aUJBQ2pILElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7aUJBQ2hELFNBQVMsRUFBRSxDQUFDO1FBQ2pCLENBQUM7S0FBQTtJQUVLLHFCQUFxQixDQUFDLGVBQWdDOztZQUMxRCxPQUFPLElBQUksQ0FBQyxVQUFVO2lCQUNuQixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsNkJBQTZCLGVBQWUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUM7aUJBQ3RHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7aUJBQ2hELFNBQVMsRUFBRSxDQUFDO1FBQ2pCLENBQUM7S0FBQTtJQUVLLHNCQUFzQixDQUFDLGVBQWdDOztZQUMzRCxPQUFPLElBQUksQ0FBQyxVQUFVO2lCQUNuQixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsNkJBQTZCLGVBQWUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUM7aUJBQ3ZHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7aUJBQ2hELFNBQVMsRUFBRSxDQUFDO1FBQ2pCLENBQUM7S0FBQTtDQUNGLENBQUE7O1lBbkR1QixVQUFVO1lBQ1AsYUFBYTs7O0FBSDNCLFlBQVk7SUFEeEIsVUFBVSxDQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyxDQUFDO0dBQ3BCLFlBQVksQ0FxRHhCO1NBckRZLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVGVhbUV2ZW50IH0gZnJvbSAnLi4vbW9kZWxzL3RlYW0tZXZlbnQnO1xuaW1wb3J0IHsgVGVhbUV2ZW50SW52aXRlIH0gZnJvbSAnLi4vbW9kZWxzL3RlYW0tZXZlbnQtaW52aXRlJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb25maWcuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIFRlYW1FdmVudEFwaSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICkge31cblxuICBhc3luYyBnZXRUZWFtRXZlbnQodGVhbUV2ZW50SWQ6IG51bWJlcik6IFByb21pc2U8VGVhbUV2ZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLmdldChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3RlYW1fZXZlbnQvJHt0ZWFtRXZlbnRJZH0vYClcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IFRlYW1FdmVudC50b0Zyb250KGRhdGEpKSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVRlYW1FdmVudCh0ZWFtRXZlbnQ6IFRlYW1FdmVudCk6IFByb21pc2U8VGVhbUV2ZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLnBhdGNoKGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdGVhbV9ldmVudC8ke3RlYW1FdmVudC5pZH0vYCwgVGVhbUV2ZW50LnRvQmFjayh0ZWFtRXZlbnQpKVxuICAgICAgLnBpcGUobWFwKGRhdGEgPT4gVGVhbUV2ZW50LnRvRnJvbnQoZGF0YSkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlVGVhbUV2ZW50KHRlYW1FdmVudElkOiBudW1iZXIpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5kZWxldGUoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90ZWFtX2V2ZW50LyR7dGVhbUV2ZW50SWR9L2ApXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBnZXRUZWFtRXZlbnRJbnZpdGVzKHRlYW1FdmVudElkOiBudW1iZXIpOiBQcm9taXNlPFRlYW1FdmVudEludml0ZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLmdldChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3RlYW1fZXZlbnQvJHt0ZWFtRXZlbnRJZH0vaW52aXRlcy9gKVxuICAgICAgLnBpcGUobWFwKGRhdGEgPT4gVGVhbUV2ZW50SW52aXRlLnRvRnJvbnQoZGF0YSkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlVGVhbUV2ZW50SW52aXRlKHRlYW1FdmVudElkOiBudW1iZXIsIHRlYW1Vc2VySWQ6IG51bWJlcik6IFByb21pc2U8VGVhbUV2ZW50SW52aXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLnBvc3QoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90ZWFtX2V2ZW50LyR7dGVhbUV2ZW50SWR9L2ludml0ZXMvYCwge3RlYW1fdXNlcl9pZDogdGVhbVVzZXJJZH0pXG4gICAgICAucGlwZShtYXAoZGF0YSA9PiBUZWFtRXZlbnRJbnZpdGUudG9Gcm9udChkYXRhKSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBhY2NlcHRUZWFtRXZlbnRJbnZpdGUodGVhbUV2ZW50SW52aXRlOiBUZWFtRXZlbnRJbnZpdGUpOiBQcm9taXNlPFRlYW1FdmVudEludml0ZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5wb3N0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdGVhbV9ldmVudF9pbnZpdGUvJHt0ZWFtRXZlbnRJbnZpdGUuaWR9L2FjY2VwdC9gLCB7fSlcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IFRlYW1FdmVudEludml0ZS50b0Zyb250KGRhdGEpKSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGRlY2xpbmVUZWFtRXZlbnRJbnZpdGUodGVhbUV2ZW50SW52aXRlOiBUZWFtRXZlbnRJbnZpdGUpOiBQcm9taXNlPFRlYW1FdmVudEludml0ZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5wb3N0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdGVhbV9ldmVudF9pbnZpdGUvJHt0ZWFtRXZlbnRJbnZpdGUuaWR9L2RlY2xpbmUvYCwge30pXG4gICAgICAucGlwZShtYXAoZGF0YSA9PiBUZWFtRXZlbnRJbnZpdGUudG9Gcm9udChkYXRhKSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cbn1cbiJdfQ==