@myclub_se/data-access 3.7.10 → 3.7.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/api-models/api-invoice/api-payment-attempt-create.mjs +1 -8
- package/esm2022/lib/authentication/authentication.interceptor.mjs +6 -8
- package/esm2022/lib/authentication/authentication.service.mjs +8 -11
- package/esm2022/lib/authentication/guards/authenticated.guard.mjs +4 -6
- package/esm2022/lib/authentication/guards/handle-grant-token.guard.mjs +4 -7
- package/esm2022/lib/data-access.module.mjs +6 -6
- package/esm2022/lib/maintenance/maintenance.interceptor.mjs +4 -5
- package/esm2022/lib/models/activity-extra-member.mjs +1 -8
- package/esm2022/lib/models/activity-invite.mjs +1 -23
- package/esm2022/lib/models/activity-location-group.mjs +1 -7
- package/esm2022/lib/models/activity-location-part.mjs +1 -3
- package/esm2022/lib/models/activity-location-tag.mjs +1 -6
- package/esm2022/lib/models/activity-location.mjs +1 -11
- package/esm2022/lib/models/activity-participant.mjs +1 -8
- package/esm2022/lib/models/activity-question-connection.mjs +1 -8
- package/esm2022/lib/models/activity-question-response.mjs +1 -3
- package/esm2022/lib/models/activity-question.mjs +1 -8
- package/esm2022/lib/models/activity-rule-relation.mjs +1 -9
- package/esm2022/lib/models/activity-rule.mjs +1 -8
- package/esm2022/lib/models/activity-settings.mjs +1 -18
- package/esm2022/lib/models/activity-type.mjs +1 -9
- package/esm2022/lib/models/activity-waiting-list-entry.mjs +1 -16
- package/esm2022/lib/models/activity.mjs +1 -82
- package/esm2022/lib/models/app-settings.mjs +1 -5
- package/esm2022/lib/models/auth/auth-member.mjs +3 -7
- package/esm2022/lib/models/auth/auth-section.mjs +1 -6
- package/esm2022/lib/models/auth/auth-team-section.mjs +1 -3
- package/esm2022/lib/models/auth/auth-team.mjs +1 -6
- package/esm2022/lib/models/auth/auth.mjs +1 -17
- package/esm2022/lib/models/authentication.mjs +1 -3
- package/esm2022/lib/models/bookable-item.mjs +1 -11
- package/esm2022/lib/models/bookable-part.mjs +1 -3
- package/esm2022/lib/models/bookable-tag.mjs +1 -6
- package/esm2022/lib/models/booking-calendar-application-time.mjs +1 -33
- package/esm2022/lib/models/booking-calendar-slot-session.mjs +1 -35
- package/esm2022/lib/models/booking-calendar-slot-validate-copy-result.mjs +1 -5
- package/esm2022/lib/models/booking-calendar-slot.mjs +1 -26
- package/esm2022/lib/models/booking-calendar.mjs +1 -33
- package/esm2022/lib/models/booking-settings.mjs +1 -8
- package/esm2022/lib/models/booking-slot-filter.mjs +1 -12
- package/esm2022/lib/models/calendar-event.mjs +1 -16
- package/esm2022/lib/models/calendar.mjs +1 -6
- package/esm2022/lib/models/card/card-deal.mjs +1 -6
- package/esm2022/lib/models/card/card-logo-urls.mjs +1 -9
- package/esm2022/lib/models/card/card-logo.mjs +1 -4
- package/esm2022/lib/models/card/card-member-ticket.mjs +1 -7
- package/esm2022/lib/models/card/card-theme.mjs +1 -6
- package/esm2022/lib/models/card/card-ticket-location.mjs +1 -5
- package/esm2022/lib/models/card/card-ticket.mjs +1 -17
- package/esm2022/lib/models/card/card.mjs +1 -9
- package/esm2022/lib/models/card/home-team.mjs +1 -4
- package/esm2022/lib/models/card/member-card.mjs +1 -11
- package/esm2022/lib/models/card/search-member-card.mjs +1 -5
- package/esm2022/lib/models/card/selected-field.mjs +1 -3
- package/esm2022/lib/models/club-image.mjs +1 -14
- package/esm2022/lib/models/club-section.mjs +1 -3
- package/esm2022/lib/models/club.mjs +1 -3
- package/esm2022/lib/models/collection.mjs +1 -5
- package/esm2022/lib/models/contact.mjs +1 -19
- package/esm2022/lib/models/databank-category.mjs +1 -7
- package/esm2022/lib/models/databank-item.mjs +1 -7
- package/esm2022/lib/models/directory.mjs +1 -10
- package/esm2022/lib/models/email.mjs +1 -4
- package/esm2022/lib/models/event.mjs +1 -28
- package/esm2022/lib/models/external-link.mjs +1 -3
- package/esm2022/lib/models/feature-flags.mjs +1 -14
- package/esm2022/lib/models/file-object.mjs +1 -10
- package/esm2022/lib/models/general-image.mjs +1 -4
- package/esm2022/lib/models/group-role.mjs +1 -7
- package/esm2022/lib/models/guest.mjs +1 -5
- package/esm2022/lib/models/image-urls.mjs +1 -6
- package/esm2022/lib/models/invoice/member-fee.mjs +1 -6
- package/esm2022/lib/models/invoice/member-invoice-row.mjs +1 -14
- package/esm2022/lib/models/invoice/member-invoice.mjs +1 -24
- package/esm2022/lib/models/invoice/payment-attempt.mjs +1 -10
- package/esm2022/lib/models/invoice/payment-order-row.mjs +1 -3
- package/esm2022/lib/models/invoice/payment-order.mjs +1 -18
- package/esm2022/lib/models/invoice/payment-types/credit-card.mjs +1 -12
- package/esm2022/lib/models/invoice/payment-types/giro.mjs +1 -7
- package/esm2022/lib/models/invoice/payment-types/swish.mjs +1 -14
- package/esm2022/lib/models/invoice/payment-types/zimpler.mjs +1 -8
- package/esm2022/lib/models/invoice/search-member-invoice.mjs +1 -10
- package/esm2022/lib/models/invoice/swish-qr-code.mjs +1 -2
- package/esm2022/lib/models/invoice/unpaid-member-invoice.mjs +1 -5
- package/esm2022/lib/models/leader-activity.mjs +1 -12
- package/esm2022/lib/models/member/member-attribute.mjs +1 -12
- package/esm2022/lib/models/member/member-contact.mjs +1 -6
- package/esm2022/lib/models/member/member-function.mjs +1 -6
- package/esm2022/lib/models/member/member-validation-settings.mjs +1 -9
- package/esm2022/lib/models/member/member.mjs +1 -27
- package/esm2022/lib/models/member/other-member-field.mjs +1 -4
- package/esm2022/lib/models/member/other-member.mjs +1 -9
- package/esm2022/lib/models/member/search-member.mjs +1 -17
- package/esm2022/lib/models/member-activity-invite.mjs +1 -12
- package/esm2022/lib/models/member-public-form-field-option.mjs +1 -5
- package/esm2022/lib/models/member-public-form-field.mjs +1 -12
- package/esm2022/lib/models/member-public-form.mjs +1 -26
- package/esm2022/lib/models/member-team-through.mjs +1 -10
- package/esm2022/lib/models/member-team.mjs +1 -10
- package/esm2022/lib/models/member-type.mjs +1 -4
- package/esm2022/lib/models/mypages-menu-item.mjs +1 -4
- package/esm2022/lib/models/news.mjs +1 -20
- package/esm2022/lib/models/open-activity.mjs +3 -79
- package/esm2022/lib/models/optional-fee.mjs +2 -7
- package/esm2022/lib/models/overbooked-bookable-item.mjs +1 -6
- package/esm2022/lib/models/overbooked-location.mjs +1 -6
- package/esm2022/lib/models/partner.mjs +1 -5
- package/esm2022/lib/models/public-authentication.mjs +1 -3
- package/esm2022/lib/models/registration-qr-code.mjs +1 -8
- package/esm2022/lib/models/retrieve-2fa.mjs +1 -3
- package/esm2022/lib/models/saved-search.mjs +1 -3
- package/esm2022/lib/models/search-attribute.mjs +1 -5
- package/esm2022/lib/models/search-club.mjs +1 -10
- package/esm2022/lib/models/search-team.mjs +1 -9
- package/esm2022/lib/models/section.mjs +1 -3
- package/esm2022/lib/models/swish-incident.mjs +1 -11
- package/esm2022/lib/models/token.mjs +1 -4
- package/esm2022/lib/models/user-notification.mjs +1 -9
- package/esm2022/lib/models/user.mjs +1 -13
- package/esm2022/lib/services/activity.service.mjs +4 -7
- package/esm2022/lib/services/api.service.mjs +4 -6
- package/esm2022/lib/services/auth.service.mjs +4 -5
- package/esm2022/lib/services/bookable.service.mjs +4 -5
- package/esm2022/lib/services/booking-calendar.service.mjs +22 -6
- package/esm2022/lib/services/club.service.mjs +4 -5
- package/esm2022/lib/services/constant.service.mjs +4 -5
- package/esm2022/lib/services/databank.service.mjs +4 -5
- package/esm2022/lib/services/email.service.mjs +4 -5
- package/esm2022/lib/services/external-link.service.mjs +4 -5
- package/esm2022/lib/services/feature-flags.service.mjs +4 -5
- package/esm2022/lib/services/file.service.mjs +4 -5
- package/esm2022/lib/services/invoice/invoice.service.mjs +4 -5
- package/esm2022/lib/services/invoice/payment-attempt.service.mjs +4 -5
- package/esm2022/lib/services/invoice/payment-order.service.mjs +4 -5
- package/esm2022/lib/services/leader-notification.service.mjs +4 -5
- package/esm2022/lib/services/maintenance-mode.service.mjs +8 -7
- package/esm2022/lib/services/member-card.service.mjs +4 -5
- package/esm2022/lib/services/member-fee.service.mjs +4 -5
- package/esm2022/lib/services/member-public-form.service.mjs +4 -5
- package/esm2022/lib/services/member.service.mjs +4 -5
- package/esm2022/lib/services/news.service.mjs +4 -5
- package/esm2022/lib/services/registration-qr-code.service.mjs +4 -5
- package/esm2022/lib/services/saved-search.service.mjs +4 -5
- package/esm2022/lib/services/section.service.mjs +4 -5
- package/esm2022/lib/services/storage.service.mjs +5 -6
- package/esm2022/lib/services/swish-incident.service.mjs +4 -5
- package/esm2022/lib/services/team.service.mjs +4 -5
- package/esm2022/lib/services/token.service.mjs +4 -5
- package/esm2022/lib/services/user-notification.service.mjs +4 -5
- package/esm2022/lib/services/user.service.mjs +4 -5
- package/esm2022/lib/store/actions/booking.actions.mjs +7 -1
- package/esm2022/lib/store/effects/activity.effects.mjs +358 -355
- package/esm2022/lib/store/effects/auth.effects.mjs +121 -119
- package/esm2022/lib/store/effects/booking.effects.mjs +139 -134
- package/esm2022/lib/store/effects/calendar.effects.mjs +61 -59
- package/esm2022/lib/store/effects/club-info.effects.mjs +17 -15
- package/esm2022/lib/store/effects/constant.effects.mjs +78 -76
- package/esm2022/lib/store/effects/databank.effects.mjs +23 -21
- package/esm2022/lib/store/effects/email.effects.mjs +16 -14
- package/esm2022/lib/store/effects/external-link.effects.mjs +11 -9
- package/esm2022/lib/store/effects/file.effects.mjs +92 -90
- package/esm2022/lib/store/effects/invoice.effects.mjs +176 -174
- package/esm2022/lib/store/effects/member-card.effects.mjs +73 -71
- package/esm2022/lib/store/effects/member-fee.effects.mjs +9 -7
- package/esm2022/lib/store/effects/member.effects.mjs +41 -39
- package/esm2022/lib/store/effects/mixins/extra-members-mixin.mjs +4 -2
- package/esm2022/lib/store/effects/news.effects.mjs +47 -45
- package/esm2022/lib/store/effects/public-form.effects.mjs +24 -22
- package/esm2022/lib/store/effects/registration-qr-code.effects.mjs +14 -12
- package/esm2022/lib/store/effects/saved-search.effects.mjs +9 -7
- package/esm2022/lib/store/effects/swish-incidents.effects.mjs +11 -9
- package/esm2022/lib/store/effects/team.effects.mjs +82 -79
- package/esm2022/lib/store/effects/token.effects.mjs +93 -91
- package/esm2022/lib/store/effects/user.effects.mjs +35 -35
- package/fesm2022/myclub_se-data-access.mjs +1771 -2857
- package/fesm2022/myclub_se-data-access.mjs.map +1 -1
- package/lib/services/booking-calendar.service.d.ts +3 -0
- package/lib/store/actions/booking.actions.d.ts +24 -0
- package/lib/store/effects/booking.effects.d.ts +5 -0
- package/package.json +1 -1
|
@@ -5,138 +5,140 @@ import { clearAuthenticationAction, clearAuthenticationSuccessAction, clearCurre
|
|
|
5
5
|
import { exhaustMap, forkJoin, mergeMap, of, switchMap } from 'rxjs';
|
|
6
6
|
import { catchError, map } from 'rxjs/operators';
|
|
7
7
|
import { HttpErrorResponse } from '@angular/common/http';
|
|
8
|
-
import { AuthenticationService } from '../../authentication';
|
|
8
|
+
import { AuthenticationService } from '../../authentication/authentication.service';
|
|
9
9
|
import * as i0 from "@angular/core";
|
|
10
10
|
export class AuthEffects {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
clearStoreAction(),
|
|
25
|
-
clearAuthenticationSuccessAction()
|
|
26
|
-
];
|
|
27
|
-
})))));
|
|
28
|
-
clearCurrent$ = createEffect(() => this.actions$
|
|
29
|
-
.pipe(ofType(clearCurrentAuthAction), exhaustMap(() => this.storageService.removeAsObservable(STORAGE_SELECTED_AUTH)
|
|
30
|
-
.pipe(map(() => clearCurrentAuthSuccessAction())))));
|
|
31
|
-
getCurrent$ = createEffect(() => this.actions$
|
|
32
|
-
.pipe(ofType(getCurrentAuthAction), exhaustMap(() => this.storageService.getAsObservable(STORAGE_SELECTED_AUTH)
|
|
33
|
-
.pipe(map((auth) => {
|
|
34
|
-
if (auth === undefined) {
|
|
35
|
-
return getCurrentAuthSuccessAction({ payload: null });
|
|
36
|
-
}
|
|
37
|
-
return getCurrentAuthSuccessAction({ payload: auth });
|
|
38
|
-
})))));
|
|
39
|
-
listAuth$ = createEffect(() => this.actions$
|
|
40
|
-
.pipe(ofType(listAuthAction), switchMap(({ payload }) => this.authService.getAuths(payload)
|
|
41
|
-
.pipe(map((auths) => listAuthSuccessAction({ payload: auths.toArray() })), catchError((error) => of(listAuthFailureAction({ payload: error })))))));
|
|
42
|
-
listAuthTeams$ = createEffect(() => this.actions$
|
|
43
|
-
.pipe(ofType(listAuthTeamsAction), mergeMap(({ payload }) => {
|
|
44
|
-
if (payload.clubAdmin) {
|
|
45
|
-
return this.teamService.getClubTeams(payload.id)
|
|
46
|
-
.pipe(map((searchTeams) => {
|
|
47
|
-
const auth = {
|
|
48
|
-
...payload,
|
|
49
|
-
teams: searchTeams.toArray()
|
|
50
|
-
.sort((a, b) => a.name.localeCompare(b.name))
|
|
51
|
-
};
|
|
52
|
-
return listAuthTeamsSuccessAction({ payload: auth });
|
|
53
|
-
}), catchError((error) => of(listAuthTeamsFailureAction({ payload: error }))));
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
const sectionsTeams$ = payload.sections.map((section) => this.teamService.getSectionTeams(section.id));
|
|
57
|
-
return forkJoin(sectionsTeams$).pipe(map((results) => {
|
|
58
|
-
const sectionTeams = results
|
|
59
|
-
.flatMap((result) => result.toArray());
|
|
60
|
-
// Union the fetched section teams with any teams already on the auth (e.g. a team the
|
|
61
|
-
// user admins outside the sections they administer), keyed by id. Fetched SearchTeams
|
|
62
|
-
// win on duplicates so the richer section_name is kept.
|
|
63
|
-
const teamsById = new Map();
|
|
64
|
-
[...payload.teams, ...sectionTeams].forEach((team) => teamsById.set(team.id, team));
|
|
65
|
-
const mergedTeams = [...teamsById.values()].sort((a, b) => a.name.localeCompare(b.name));
|
|
66
|
-
const auth = {
|
|
67
|
-
...payload,
|
|
68
|
-
// teams is typed as AuthTeam[] | SearchTeam[]; the merged list may mix both shapes,
|
|
69
|
-
// which consumers already handle (they read id/name/section_name | section?.name).
|
|
70
|
-
teams: mergedTeams,
|
|
71
|
-
};
|
|
72
|
-
return listAuthTeamsSuccessAction({ payload: auth });
|
|
73
|
-
}), catchError((error) => of(listAuthTeamsFailureAction({ payload: error }))));
|
|
74
|
-
}
|
|
75
|
-
})));
|
|
76
|
-
refresh$ = createEffect(() => this.actions$
|
|
77
|
-
.pipe(ofType(refreshAuthsAction), exhaustMap(() => this.authService.updateMembers()
|
|
78
|
-
.pipe(mergeMap((success) => {
|
|
79
|
-
if (success) {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.actions$ = inject(Actions);
|
|
13
|
+
this.authenticationService = inject(AuthenticationService);
|
|
14
|
+
this.authService = inject(AuthService);
|
|
15
|
+
this.storageService = inject(StorageService);
|
|
16
|
+
this.teamService = inject(TeamService);
|
|
17
|
+
this.clearAuthentication$ = createEffect(() => this.actions$
|
|
18
|
+
.pipe(ofType(clearAuthenticationAction), exhaustMap(() => forkJoin({
|
|
19
|
+
tokenRemoval: this.storageService.removeAsObservable(STORAGE_TOKEN),
|
|
20
|
+
selectedAuthRemoval: this.storageService.removeAsObservable(STORAGE_SELECTED_AUTH),
|
|
21
|
+
selectedMembersRemoval: this.storageService.removeAsObservable(STORAGE_SELECTED_MEMBERS),
|
|
22
|
+
}).pipe(mergeMap(() => {
|
|
23
|
+
this.authenticationService.clearAuthentication();
|
|
80
24
|
return [
|
|
81
|
-
|
|
82
|
-
|
|
25
|
+
clearStoreAction(),
|
|
26
|
+
clearAuthenticationSuccessAction()
|
|
83
27
|
];
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
.
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
28
|
+
})))));
|
|
29
|
+
this.clearCurrent$ = createEffect(() => this.actions$
|
|
30
|
+
.pipe(ofType(clearCurrentAuthAction), exhaustMap(() => this.storageService.removeAsObservable(STORAGE_SELECTED_AUTH)
|
|
31
|
+
.pipe(map(() => clearCurrentAuthSuccessAction())))));
|
|
32
|
+
this.getCurrent$ = createEffect(() => this.actions$
|
|
33
|
+
.pipe(ofType(getCurrentAuthAction), exhaustMap(() => this.storageService.getAsObservable(STORAGE_SELECTED_AUTH)
|
|
34
|
+
.pipe(map((auth) => {
|
|
35
|
+
if (auth === undefined) {
|
|
36
|
+
return getCurrentAuthSuccessAction({ payload: null });
|
|
37
|
+
}
|
|
38
|
+
return getCurrentAuthSuccessAction({ payload: auth });
|
|
39
|
+
})))));
|
|
40
|
+
this.listAuth$ = createEffect(() => this.actions$
|
|
41
|
+
.pipe(ofType(listAuthAction), switchMap(({ payload }) => this.authService.getAuths(payload)
|
|
42
|
+
.pipe(map((auths) => listAuthSuccessAction({ payload: auths.toArray() })), catchError((error) => of(listAuthFailureAction({ payload: error })))))));
|
|
43
|
+
this.listAuthTeams$ = createEffect(() => this.actions$
|
|
44
|
+
.pipe(ofType(listAuthTeamsAction), mergeMap(({ payload }) => {
|
|
45
|
+
if (payload.clubAdmin) {
|
|
46
|
+
return this.teamService.getClubTeams(payload.id)
|
|
47
|
+
.pipe(map((searchTeams) => {
|
|
48
|
+
const auth = {
|
|
49
|
+
...payload,
|
|
50
|
+
teams: searchTeams.toArray()
|
|
51
|
+
.sort((a, b) => a.name.localeCompare(b.name))
|
|
52
|
+
};
|
|
53
|
+
return listAuthTeamsSuccessAction({ payload: auth });
|
|
54
|
+
}), catchError((error) => of(listAuthTeamsFailureAction({ payload: error }))));
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
const sectionsTeams$ = payload.sections.map((section) => this.teamService.getSectionTeams(section.id));
|
|
58
|
+
return forkJoin(sectionsTeams$).pipe(map((results) => {
|
|
59
|
+
const sectionTeams = results
|
|
60
|
+
.flatMap((result) => result.toArray());
|
|
61
|
+
// Union the fetched section teams with any teams already on the auth (e.g. a team the
|
|
62
|
+
// user admins outside the sections they administer), keyed by id. Fetched SearchTeams
|
|
63
|
+
// win on duplicates so the richer section_name is kept.
|
|
64
|
+
const teamsById = new Map();
|
|
65
|
+
[...payload.teams, ...sectionTeams].forEach((team) => teamsById.set(team.id, team));
|
|
66
|
+
const mergedTeams = [...teamsById.values()].sort((a, b) => a.name.localeCompare(b.name));
|
|
67
|
+
const auth = {
|
|
68
|
+
...payload,
|
|
69
|
+
// teams is typed as AuthTeam[] | SearchTeam[]; the merged list may mix both shapes,
|
|
70
|
+
// which consumers already handle (they read id/name/section_name | section?.name).
|
|
71
|
+
teams: mergedTeams,
|
|
72
|
+
};
|
|
73
|
+
return listAuthTeamsSuccessAction({ payload: auth });
|
|
74
|
+
}), catchError((error) => of(listAuthTeamsFailureAction({ payload: error }))));
|
|
75
|
+
}
|
|
76
|
+
})));
|
|
77
|
+
this.refresh$ = createEffect(() => this.actions$
|
|
78
|
+
.pipe(ofType(refreshAuthsAction), exhaustMap(() => this.authService.updateMembers()
|
|
79
|
+
.pipe(mergeMap((success) => {
|
|
80
|
+
if (success) {
|
|
109
81
|
return [
|
|
110
|
-
|
|
82
|
+
refreshAuthsSuccessAction(),
|
|
83
|
+
listAuthAction()
|
|
111
84
|
];
|
|
112
85
|
}
|
|
113
86
|
else {
|
|
87
|
+
return of(refreshAuthsFailureAction());
|
|
88
|
+
}
|
|
89
|
+
}), catchError(() => of(refreshAuthsFailureAction()))))));
|
|
90
|
+
this.removeMember$ = createEffect(() => this.actions$
|
|
91
|
+
.pipe(ofType(removeMemberAuthAction), exhaustMap(({ payload }) => this.authService.removeMemberAuth(payload.authId, payload.memberId)
|
|
92
|
+
.pipe(map((value) => value ? removeMemberAuthSuccessAction() : removeMemberAuthFailureAction()), catchError(() => of(removeMemberAuthFailureAction()))))));
|
|
93
|
+
this.removeTeam$ = createEffect(() => this.actions$
|
|
94
|
+
.pipe(ofType(removeTeamAuthAction), exhaustMap(({ payload }) => this.authService.removeTeamAuth(payload.authId, payload.teamId)
|
|
95
|
+
.pipe(map((value) => value ? removeTeamAuthSuccessAction() : removeTeamAuthFailureAction()), catchError(() => of(removeMemberAuthFailureAction()))))));
|
|
96
|
+
this.setCurrent$ = createEffect(() => this.actions$
|
|
97
|
+
.pipe(ofType(setCurrentAuthAction), exhaustMap(({ payload }) => this.storageService.getAsObservable(STORAGE_SELECTED_AUTH)
|
|
98
|
+
.pipe(mergeMap((oldAuth) => {
|
|
99
|
+
return this.storageService.setAsObservable(STORAGE_SELECTED_AUTH, payload)
|
|
100
|
+
.pipe(mergeMap((newAuth) => {
|
|
101
|
+
// Same context only when both are member contexts (a team pick always has
|
|
102
|
+
// members: [], so an empty-length match must not count — it made every
|
|
103
|
+
// team→team switch within a club skip the store clear and leak the previous
|
|
104
|
+
// team's data, e.g. leader notifications) or both point at the same team.
|
|
105
|
+
const sameMemberContext = !!(newAuth.members && newAuth.members.length > 0 &&
|
|
106
|
+
newAuth.members.length === oldAuth?.members?.length);
|
|
107
|
+
const sameTeamContext = !!(newAuth.teams && newAuth.teams.length > 0 &&
|
|
108
|
+
oldAuth?.teams?.length === newAuth.teams.length && newAuth.teams[0].id === oldAuth.teams[0].id);
|
|
109
|
+
if (oldAuth && newAuth.id === oldAuth.id && (sameMemberContext || sameTeamContext)) {
|
|
110
|
+
return [
|
|
111
|
+
getCurrentAuthSuccessAction({ payload: newAuth })
|
|
112
|
+
];
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
return [
|
|
116
|
+
getCurrentAuthSuccessAction({ payload: newAuth }),
|
|
117
|
+
clearStoreAction()
|
|
118
|
+
];
|
|
119
|
+
}
|
|
120
|
+
}));
|
|
121
|
+
})))));
|
|
122
|
+
this.unblockMember$ = createEffect(() => this.actions$
|
|
123
|
+
.pipe(ofType(unblockMemberAuthAction), exhaustMap(({ payload }) => this.authService.unblockMember(payload.userId, payload.clubId, payload.memberId)
|
|
124
|
+
.pipe(mergeMap((success) => {
|
|
125
|
+
if (success) {
|
|
114
126
|
return [
|
|
115
|
-
|
|
116
|
-
|
|
127
|
+
unblockMemberAuthSuccessAction(),
|
|
128
|
+
refreshAuthsAction()
|
|
117
129
|
];
|
|
118
130
|
}
|
|
119
|
-
}));
|
|
120
|
-
})))));
|
|
121
|
-
unblockMember$ = createEffect(() => this.actions$
|
|
122
|
-
.pipe(ofType(unblockMemberAuthAction), exhaustMap(({ payload }) => this.authService.unblockMember(payload.userId, payload.clubId, payload.memberId)
|
|
123
|
-
.pipe(mergeMap((success) => {
|
|
124
|
-
if (success) {
|
|
125
131
|
return [
|
|
126
|
-
|
|
127
|
-
|
|
132
|
+
unblockMemberAuthFailureAction({
|
|
133
|
+
payload: new HttpErrorResponse({ status: 400 })
|
|
134
|
+
})
|
|
128
135
|
];
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
})
|
|
134
|
-
];
|
|
135
|
-
}), catchError((err) => of(unblockMemberAuthFailureAction({ payload: err })))))));
|
|
136
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AuthEffects, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
137
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AuthEffects });
|
|
136
|
+
}), catchError((err) => of(unblockMemberAuthFailureAction({ payload: err })))))));
|
|
137
|
+
}
|
|
138
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AuthEffects, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
139
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AuthEffects }); }
|
|
138
140
|
}
|
|
139
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
141
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AuthEffects, decorators: [{
|
|
140
142
|
type: Injectable
|
|
141
143
|
}] });
|
|
142
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5lZmZlY3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1hY2Nlc3Mvc3JjL2xpYi9zdG9yZS9lZmZlY3RzL2F1dGguZWZmZWN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUNMLFdBQVcsRUFDWCxxQkFBcUIsRUFDckIsd0JBQXdCLEVBQ3hCLGFBQWEsRUFDYixjQUFjLEVBQ2QsV0FBVyxFQUNaLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUNMLHlCQUF5QixFQUN6QixnQ0FBZ0MsRUFDaEMsc0JBQXNCLEVBQ3RCLDZCQUE2QixFQUM3QixnQkFBZ0IsRUFDaEIsb0JBQW9CLEVBQ3BCLDJCQUEyQixFQUMzQixjQUFjLEVBQ2QscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsMEJBQTBCLEVBQzFCLDBCQUEwQixFQUMxQixrQkFBa0IsRUFDbEIseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6QixzQkFBc0IsRUFDdEIsNkJBQTZCLEVBQzdCLDZCQUE2QixFQUM3QixvQkFBb0IsRUFDcEIsMkJBQTJCLEVBQzNCLDJCQUEyQixFQUMzQixvQkFBb0IsRUFDcEIsdUJBQXVCLEVBQ3ZCLDhCQUE4QixFQUM5Qiw4QkFBOEIsRUFDL0IsTUFBTSxZQUFZLENBQUM7QUFDcEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakYsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsaUJBQWlC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QyxNQUFNLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQztTQUN0SyxJQUFJLENBQ0gsUUFBUSxDQUFDLENBQUMsT0FBZ0IsRUFBRSxFQUFFO1FBQzVCLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixPQUFPO2dCQUNMLDhCQUE4QixFQUFFO2dCQUNoQyxrQkFBa0IsRUFBRTthQUNyQixDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU87WUFDTCw4QkFBOEIsQ0FBQztnQkFDL0IsT0FBTyxFQUFFLElBQUksaUJBQWlCLENBQUMsRUFBQyxNQUFNLEVBQUUsR0FBRyxFQUFDLENBQUM7YUFDOUMsQ0FBQztTQUFDLENBQUM7SUFDTixDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxHQUFzQixFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsOEJBQThCLENBQUMsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQzNGLENBQ0YsQ0FDRixDQUNGLENBQUE7dUdBOU5VLFdBQVc7MkdBQVgsV0FBVzs7MkZBQVgsV0FBVztrQkFEdkIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9ucywgY3JlYXRlRWZmZWN0LCBvZlR5cGUgfSBmcm9tICdAbmdyeC9lZmZlY3RzJztcbmltcG9ydCB7XG4gIEF1dGhTZXJ2aWNlLFxuICBTVE9SQUdFX1NFTEVDVEVEX0FVVEgsXG4gIFNUT1JBR0VfU0VMRUNURURfTUVNQkVSUyxcbiAgU1RPUkFHRV9UT0tFTixcbiAgU3RvcmFnZVNlcnZpY2UsXG4gIFRlYW1TZXJ2aWNlXG59IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7XG4gIGNsZWFyQXV0aGVudGljYXRpb25BY3Rpb24sXG4gIGNsZWFyQXV0aGVudGljYXRpb25TdWNjZXNzQWN0aW9uLFxuICBjbGVhckN1cnJlbnRBdXRoQWN0aW9uLFxuICBjbGVhckN1cnJlbnRBdXRoU3VjY2Vzc0FjdGlvbixcbiAgY2xlYXJTdG9yZUFjdGlvbixcbiAgZ2V0Q3VycmVudEF1dGhBY3Rpb24sXG4gIGdldEN1cnJlbnRBdXRoU3VjY2Vzc0FjdGlvbixcbiAgbGlzdEF1dGhBY3Rpb24sXG4gIGxpc3RBdXRoRmFpbHVyZUFjdGlvbixcbiAgbGlzdEF1dGhTdWNjZXNzQWN0aW9uLFxuICBsaXN0QXV0aFRlYW1zQWN0aW9uLFxuICBsaXN0QXV0aFRlYW1zRmFpbHVyZUFjdGlvbixcbiAgbGlzdEF1dGhUZWFtc1N1Y2Nlc3NBY3Rpb24sXG4gIHJlZnJlc2hBdXRoc0FjdGlvbixcbiAgcmVmcmVzaEF1dGhzRmFpbHVyZUFjdGlvbixcbiAgcmVmcmVzaEF1dGhzU3VjY2Vzc0FjdGlvbixcbiAgcmVtb3ZlTWVtYmVyQXV0aEFjdGlvbixcbiAgcmVtb3ZlTWVtYmVyQXV0aEZhaWx1cmVBY3Rpb24sXG4gIHJlbW92ZU1lbWJlckF1dGhTdWNjZXNzQWN0aW9uLFxuICByZW1vdmVUZWFtQXV0aEFjdGlvbixcbiAgcmVtb3ZlVGVhbUF1dGhGYWlsdXJlQWN0aW9uLFxuICByZW1vdmVUZWFtQXV0aFN1Y2Nlc3NBY3Rpb24sXG4gIHNldEN1cnJlbnRBdXRoQWN0aW9uLFxuICB1bmJsb2NrTWVtYmVyQXV0aEFjdGlvbixcbiAgdW5ibG9ja01lbWJlckF1dGhGYWlsdXJlQWN0aW9uLFxuICB1bmJsb2NrTWVtYmVyQXV0aFN1Y2Nlc3NBY3Rpb25cbn0gZnJvbSAnLi4vYWN0aW9ucyc7XG5pbXBvcnQgeyBleGhhdXN0TWFwLCBmb3JrSm9pbiwgbWVyZ2VNYXAsIE9ic2VydmFibGUsIG9mLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQXV0aCwgQXV0aFRlYW0sIENvbGxlY3Rpb24sIFNlYXJjaFRlYW0gfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHsgUmVtb3ZlTWVtYmVyQXV0aEludGVyZmFjZSwgUmVtb3ZlVGVhbUF1dGhJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2F1dGhlbnRpY2F0aW9uJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEF1dGhFZmZlY3RzIHtcbiAgcHJpdmF0ZSBhY3Rpb25zJCA9IGluamVjdChBY3Rpb25zKTtcbiAgcHJpdmF0ZSBhdXRoZW50aWNhdGlvblNlcnZpY2UgPSBpbmplY3QoQXV0aGVudGljYXRpb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBhdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSk7XG4gIHByaXZhdGUgc3RvcmFnZVNlcnZpY2UgPSBpbmplY3QoU3RvcmFnZVNlcnZpY2UpO1xuICBwcml2YXRlIHRlYW1TZXJ2aWNlID0gaW5qZWN0KFRlYW1TZXJ2aWNlKTtcblxuICBjbGVhckF1dGhlbnRpY2F0aW9uJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoY2xlYXJBdXRoZW50aWNhdGlvbkFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCgpID0+XG4gICAgICAgIGZvcmtKb2luKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRva2VuUmVtb3ZhbDogdGhpcy5zdG9yYWdlU2VydmljZS5yZW1vdmVBc09ic2VydmFibGUoU1RPUkFHRV9UT0tFTiksXG4gICAgICAgICAgICBzZWxlY3RlZEF1dGhSZW1vdmFsOiB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnJlbW92ZUFzT2JzZXJ2YWJsZShTVE9SQUdFX1NFTEVDVEVEX0FVVEgpLFxuICAgICAgICAgICAgc2VsZWN0ZWRNZW1iZXJzUmVtb3ZhbDogdGhpcy5zdG9yYWdlU2VydmljZS5yZW1vdmVBc09ic2VydmFibGUoU1RPUkFHRV9TRUxFQ1RFRF9NRU1CRVJTKSxcbiAgICAgICAgICB9XG4gICAgICAgICkucGlwZShcbiAgICAgICAgICBtZXJnZU1hcCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS5jbGVhckF1dGhlbnRpY2F0aW9uKCk7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICBjbGVhclN0b3JlQWN0aW9uKCksXG4gICAgICAgICAgICAgIGNsZWFyQXV0aGVudGljYXRpb25TdWNjZXNzQWN0aW9uKClcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGNsZWFyQ3VycmVudCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGNsZWFyQ3VycmVudEF1dGhBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoKSA9PiB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnJlbW92ZUFzT2JzZXJ2YWJsZShTVE9SQUdFX1NFTEVDVEVEX0FVVEgpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgoKSA9PiBjbGVhckN1cnJlbnRBdXRoU3VjY2Vzc0FjdGlvbigpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGdldEN1cnJlbnQkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShnZXRDdXJyZW50QXV0aEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCgpID0+IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0QXNPYnNlcnZhYmxlKFNUT1JBR0VfU0VMRUNURURfQVVUSClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChhdXRoOiBBdXRoIHwgbnVsbCB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICAgICAgaWYgKGF1dGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0Q3VycmVudEF1dGhTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBudWxsfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q3VycmVudEF1dGhTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBhdXRofSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBsaXN0QXV0aCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGxpc3RBdXRoQWN0aW9uKSxcbiAgICAgIHN3aXRjaE1hcCgoe3BheWxvYWR9KSA9PiB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhzKHBheWxvYWQpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgoYXV0aHM6IENvbGxlY3Rpb248QXV0aD4pID0+IGxpc3RBdXRoU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogYXV0aHMudG9BcnJheSgpfSkpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YobGlzdEF1dGhGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBsaXN0QXV0aFRlYW1zJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUobGlzdEF1dGhUZWFtc0FjdGlvbiksXG4gICAgICBtZXJnZU1hcCgoe3BheWxvYWR9KSA9PiB7XG4gICAgICAgIGlmIChwYXlsb2FkLmNsdWJBZG1pbikge1xuICAgICAgICAgIHJldHVybiB0aGlzLnRlYW1TZXJ2aWNlLmdldENsdWJUZWFtcyhwYXlsb2FkLmlkKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIG1hcCgoc2VhcmNoVGVhbXM6IENvbGxlY3Rpb248U2VhcmNoVGVhbT4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhdXRoID0ge1xuICAgICAgICAgICAgICAgICAgLi4ucGF5bG9hZCxcbiAgICAgICAgICAgICAgICAgIHRlYW1zOiBzZWFyY2hUZWFtcy50b0FycmF5KClcbiAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGE6IFNlYXJjaFRlYW0sIGI6IFNlYXJjaFRlYW0pID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBsaXN0QXV0aFRlYW1zU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogYXV0aH0pO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihsaXN0QXV0aFRlYW1zRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHNlY3Rpb25zVGVhbXMkOiBBcnJheTxPYnNlcnZhYmxlPENvbGxlY3Rpb248U2VhcmNoVGVhbT4+PiA9IHBheWxvYWQuc2VjdGlvbnMubWFwKChzZWN0aW9uKSA9PlxuICAgICAgICAgICAgdGhpcy50ZWFtU2VydmljZS5nZXRTZWN0aW9uVGVhbXMoc2VjdGlvbi5pZClcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIGZvcmtKb2luKHNlY3Rpb25zVGVhbXMkKS5waXBlKFxuICAgICAgICAgICAgbWFwKChyZXN1bHRzOiBBcnJheTxDb2xsZWN0aW9uPFNlYXJjaFRlYW0+PikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBzZWN0aW9uVGVhbXM6IEFycmF5PFNlYXJjaFRlYW0+ID0gcmVzdWx0c1xuICAgICAgICAgICAgICAgIC5mbGF0TWFwKChyZXN1bHQ6IENvbGxlY3Rpb248U2VhcmNoVGVhbT4pID0+IHJlc3VsdC50b0FycmF5KCkpO1xuICAgICAgICAgICAgICAvLyBVbmlvbiB0aGUgZmV0Y2hlZCBzZWN0aW9uIHRlYW1zIHdpdGggYW55IHRlYW1zIGFscmVhZHkgb24gdGhlIGF1dGggKGUuZy4gYSB0ZWFtIHRoZVxuICAgICAgICAgICAgICAvLyB1c2VyIGFkbWlucyBvdXRzaWRlIHRoZSBzZWN0aW9ucyB0aGV5IGFkbWluaXN0ZXIpLCBrZXllZCBieSBpZC4gRmV0Y2hlZCBTZWFyY2hUZWFtc1xuICAgICAgICAgICAgICAvLyB3aW4gb24gZHVwbGljYXRlcyBzbyB0aGUgcmljaGVyIHNlY3Rpb25fbmFtZSBpcyBrZXB0LlxuICAgICAgICAgICAgICBjb25zdCB0ZWFtc0J5SWQgPSBuZXcgTWFwPHN0cmluZywgQXV0aFRlYW0gfCBTZWFyY2hUZWFtPigpO1xuICAgICAgICAgICAgICBbLi4ucGF5bG9hZC50ZWFtcywgLi4uc2VjdGlvblRlYW1zXS5mb3JFYWNoKCh0ZWFtKSA9PiB0ZWFtc0J5SWQuc2V0KHRlYW0uaWQsIHRlYW0pKTtcbiAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkVGVhbXMgPSBbLi4udGVhbXNCeUlkLnZhbHVlcygpXS5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgICAgICAgICAgICAgY29uc3QgYXV0aCA9IHtcbiAgICAgICAgICAgICAgICAuLi5wYXlsb2FkLFxuICAgICAgICAgICAgICAgIC8vIHRlYW1zIGlzIHR5cGVkIGFzIEF1dGhUZWFtW10gfCBTZWFyY2hUZWFtW107IHRoZSBtZXJnZWQgbGlzdCBtYXkgbWl4IGJvdGggc2hhcGVzLFxuICAgICAgICAgICAgICAgIC8vIHdoaWNoIGNvbnN1bWVycyBhbHJlYWR5IGhhbmRsZSAodGhleSByZWFkIGlkL25hbWUvc2VjdGlvbl9uYW1lIHwgc2VjdGlvbj8ubmFtZSkuXG4gICAgICAgICAgICAgICAgdGVhbXM6IG1lcmdlZFRlYW1zIGFzIFNlYXJjaFRlYW1bXSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgcmV0dXJuIGxpc3RBdXRoVGVhbXNTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBhdXRofSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YobGlzdEF1dGhUZWFtc0ZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKVxuICApO1xuXG4gIHJlZnJlc2gkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZWZyZXNoQXV0aHNBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoKSA9PiB0aGlzLmF1dGhTZXJ2aWNlLnVwZGF0ZU1lbWJlcnMoKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtZXJnZU1hcCgoc3VjY2VzczogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICByZWZyZXNoQXV0aHNTdWNjZXNzQWN0aW9uKCksXG4gICAgICAgICAgICAgICAgbGlzdEF1dGhBY3Rpb24oKVxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKHJlZnJlc2hBdXRoc0ZhaWx1cmVBY3Rpb24oKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZihyZWZyZXNoQXV0aHNGYWlsdXJlQWN0aW9uKCkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlbW92ZU1lbWJlciQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJlbW92ZU1lbWJlckF1dGhBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogUmVtb3ZlTWVtYmVyQXV0aEludGVyZmFjZVxuICAgICAgICB9KSA9PiB0aGlzLmF1dGhTZXJ2aWNlLnJlbW92ZU1lbWJlckF1dGgocGF5bG9hZC5hdXRoSWQsIHBheWxvYWQubWVtYmVySWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHZhbHVlOiBib29sZWFuKSA9PiB2YWx1ZSA/IHJlbW92ZU1lbWJlckF1dGhTdWNjZXNzQWN0aW9uKCkgOiByZW1vdmVNZW1iZXJBdXRoRmFpbHVyZUFjdGlvbigpKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YocmVtb3ZlTWVtYmVyQXV0aEZhaWx1cmVBY3Rpb24oKSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZW1vdmVUZWFtJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmVtb3ZlVGVhbUF1dGhBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogUmVtb3ZlVGVhbUF1dGhJbnRlcmZhY2VcbiAgICAgICAgfSkgPT4gdGhpcy5hdXRoU2VydmljZS5yZW1vdmVUZWFtQXV0aChwYXlsb2FkLmF1dGhJZCwgcGF5bG9hZC50ZWFtSWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHZhbHVlOiBib29sZWFuKSA9PiB2YWx1ZSA/IHJlbW92ZVRlYW1BdXRoU3VjY2Vzc0FjdGlvbigpIDogcmVtb3ZlVGVhbUF1dGhGYWlsdXJlQWN0aW9uKCkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZihyZW1vdmVNZW1iZXJBdXRoRmFpbHVyZUFjdGlvbigpKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHNldEN1cnJlbnQkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShzZXRDdXJyZW50QXV0aEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHsgcGF5bG9hZDogQXV0aCB9KSA9PiB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldEFzT2JzZXJ2YWJsZShTVE9SQUdFX1NFTEVDVEVEX0FVVEgpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1lcmdlTWFwKChvbGRBdXRoOiBBdXRoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yYWdlU2VydmljZS5zZXRBc09ic2VydmFibGUoU1RPUkFHRV9TRUxFQ1RFRF9BVVRILCBwYXlsb2FkKVxuICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgobmV3QXV0aDogQXV0aCkgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gU2FtZSBjb250ZXh0IG9ubHkgd2hlbiBib3RoIGFyZSBtZW1iZXIgY29udGV4dHMgKGEgdGVhbSBwaWNrIGFsd2F5cyBoYXNcbiAgICAgICAgICAgICAgICAgIC8vIG1lbWJlcnM6IFtdLCBzbyBhbiBlbXB0eS1sZW5ndGggbWF0Y2ggbXVzdCBub3QgY291bnQg4oCUIGl0IG1hZGUgZXZlcnlcbiAgICAgICAgICAgICAgICAgIC8vIHRlYW3ihpJ0ZWFtIHN3aXRjaCB3aXRoaW4gYSBjbHViIHNraXAgdGhlIHN0b3JlIGNsZWFyIGFuZCBsZWFrIHRoZSBwcmV2aW91c1xuICAgICAgICAgICAgICAgICAgLy8gdGVhbSdzIGRhdGEsIGUuZy4gbGVhZGVyIG5vdGlmaWNhdGlvbnMpIG9yIGJvdGggcG9pbnQgYXQgdGhlIHNhbWUgdGVhbS5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNhbWVNZW1iZXJDb250ZXh0ID0gISEobmV3QXV0aC5tZW1iZXJzICYmIG5ld0F1dGgubWVtYmVycy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIG5ld0F1dGgubWVtYmVycy5sZW5ndGggPT09IG9sZEF1dGg/Lm1lbWJlcnM/Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzYW1lVGVhbUNvbnRleHQgPSAhIShuZXdBdXRoLnRlYW1zICYmIG5ld0F1dGgudGVhbXMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICBvbGRBdXRoPy50ZWFtcz8ubGVuZ3RoID09PSBuZXdBdXRoLnRlYW1zLmxlbmd0aCAmJiBuZXdBdXRoLnRlYW1zWzBdLmlkID09PSBvbGRBdXRoLnRlYW1zWzBdLmlkKTtcbiAgICAgICAgICAgICAgICAgIGlmIChvbGRBdXRoICYmIG5ld0F1dGguaWQgPT09IG9sZEF1dGguaWQgJiYgKHNhbWVNZW1iZXJDb250ZXh0IHx8IHNhbWVUZWFtQ29udGV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICBnZXRDdXJyZW50QXV0aFN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IG5ld0F1dGh9KVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgIGdldEN1cnJlbnRBdXRoU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogbmV3QXV0aH0pLFxuICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3RvcmVBY3Rpb24oKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgdW5ibG9ja01lbWJlciQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHVuYmxvY2tNZW1iZXJBdXRoQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge3BheWxvYWQ6IHt1c2VySWQ6IHN0cmluZywgY2x1YklkOiBzdHJpbmcsIG1lbWJlcklkOiBzdHJpbmd9fSkgPT4gdGhpcy5hdXRoU2VydmljZS51bmJsb2NrTWVtYmVyKHBheWxvYWQudXNlcklkLCBwYXlsb2FkLmNsdWJJZCwgcGF5bG9hZC5tZW1iZXJJZClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWVyZ2VNYXAoKHN1Y2Nlc3M6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgdW5ibG9ja01lbWJlckF1dGhTdWNjZXNzQWN0aW9uKCksXG4gICAgICAgICAgICAgICAgcmVmcmVzaEF1dGhzQWN0aW9uKClcbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgIHVuYmxvY2tNZW1iZXJBdXRoRmFpbHVyZUFjdGlvbih7XG4gICAgICAgICAgICAgIHBheWxvYWQ6IG5ldyBIdHRwRXJyb3JSZXNwb25zZSh7c3RhdHVzOiA0MDB9KVxuICAgICAgICAgICAgfSldO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHVuYmxvY2tNZW1iZXJBdXRoRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyfSkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG4iXX0=
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5lZmZlY3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1hY2Nlc3Mvc3JjL2xpYi9zdG9yZS9lZmZlY3RzL2F1dGguZWZmZWN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUNMLFdBQVcsRUFDWCxxQkFBcUIsRUFDckIsd0JBQXdCLEVBQ3hCLGFBQWEsRUFDYixjQUFjLEVBQ2QsV0FBVyxFQUNaLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUNMLHlCQUF5QixFQUN6QixnQ0FBZ0MsRUFDaEMsc0JBQXNCLEVBQ3RCLDZCQUE2QixFQUM3QixnQkFBZ0IsRUFDaEIsb0JBQW9CLEVBQ3BCLDJCQUEyQixFQUMzQixjQUFjLEVBQ2QscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsMEJBQTBCLEVBQzFCLDBCQUEwQixFQUMxQixrQkFBa0IsRUFDbEIseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6QixzQkFBc0IsRUFDdEIsNkJBQTZCLEVBQzdCLDZCQUE2QixFQUM3QixvQkFBb0IsRUFDcEIsMkJBQTJCLEVBQzNCLDJCQUEyQixFQUMzQixvQkFBb0IsRUFDcEIsdUJBQXVCLEVBQ3ZCLDhCQUE4QixFQUM5Qiw4QkFBOEIsRUFDL0IsTUFBTSxZQUFZLENBQUM7QUFDcEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakYsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsaUJBQWlC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LGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQzthQUN0SyxJQUFJLENBQ0gsUUFBUSxDQUFDLENBQUMsT0FBZ0IsRUFBRSxFQUFFO1lBQzVCLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osT0FBTztvQkFDTCw4QkFBOEIsRUFBRTtvQkFDaEMsa0JBQWtCLEVBQUU7aUJBQ3JCLENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTztnQkFDTCw4QkFBOEIsQ0FBQztvQkFDL0IsT0FBTyxFQUFFLElBQUksaUJBQWlCLENBQUMsRUFBQyxNQUFNLEVBQUUsR0FBRyxFQUFDLENBQUM7aUJBQzlDLENBQUM7YUFBQyxDQUFDO1FBQ04sQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLENBQUMsR0FBc0IsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLDhCQUE4QixDQUFDLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUMzRixDQUNGLENBQ0YsQ0FDRixDQUFBO0tBQ0Y7K0dBL05ZLFdBQVc7bUhBQVgsV0FBVzs7NEZBQVgsV0FBVztrQkFEdkIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9ucywgY3JlYXRlRWZmZWN0LCBvZlR5cGUgfSBmcm9tICdAbmdyeC9lZmZlY3RzJztcbmltcG9ydCB7XG4gIEF1dGhTZXJ2aWNlLFxuICBTVE9SQUdFX1NFTEVDVEVEX0FVVEgsXG4gIFNUT1JBR0VfU0VMRUNURURfTUVNQkVSUyxcbiAgU1RPUkFHRV9UT0tFTixcbiAgU3RvcmFnZVNlcnZpY2UsXG4gIFRlYW1TZXJ2aWNlXG59IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7XG4gIGNsZWFyQXV0aGVudGljYXRpb25BY3Rpb24sXG4gIGNsZWFyQXV0aGVudGljYXRpb25TdWNjZXNzQWN0aW9uLFxuICBjbGVhckN1cnJlbnRBdXRoQWN0aW9uLFxuICBjbGVhckN1cnJlbnRBdXRoU3VjY2Vzc0FjdGlvbixcbiAgY2xlYXJTdG9yZUFjdGlvbixcbiAgZ2V0Q3VycmVudEF1dGhBY3Rpb24sXG4gIGdldEN1cnJlbnRBdXRoU3VjY2Vzc0FjdGlvbixcbiAgbGlzdEF1dGhBY3Rpb24sXG4gIGxpc3RBdXRoRmFpbHVyZUFjdGlvbixcbiAgbGlzdEF1dGhTdWNjZXNzQWN0aW9uLFxuICBsaXN0QXV0aFRlYW1zQWN0aW9uLFxuICBsaXN0QXV0aFRlYW1zRmFpbHVyZUFjdGlvbixcbiAgbGlzdEF1dGhUZWFtc1N1Y2Nlc3NBY3Rpb24sXG4gIHJlZnJlc2hBdXRoc0FjdGlvbixcbiAgcmVmcmVzaEF1dGhzRmFpbHVyZUFjdGlvbixcbiAgcmVmcmVzaEF1dGhzU3VjY2Vzc0FjdGlvbixcbiAgcmVtb3ZlTWVtYmVyQXV0aEFjdGlvbixcbiAgcmVtb3ZlTWVtYmVyQXV0aEZhaWx1cmVBY3Rpb24sXG4gIHJlbW92ZU1lbWJlckF1dGhTdWNjZXNzQWN0aW9uLFxuICByZW1vdmVUZWFtQXV0aEFjdGlvbixcbiAgcmVtb3ZlVGVhbUF1dGhGYWlsdXJlQWN0aW9uLFxuICByZW1vdmVUZWFtQXV0aFN1Y2Nlc3NBY3Rpb24sXG4gIHNldEN1cnJlbnRBdXRoQWN0aW9uLFxuICB1bmJsb2NrTWVtYmVyQXV0aEFjdGlvbixcbiAgdW5ibG9ja01lbWJlckF1dGhGYWlsdXJlQWN0aW9uLFxuICB1bmJsb2NrTWVtYmVyQXV0aFN1Y2Nlc3NBY3Rpb25cbn0gZnJvbSAnLi4vYWN0aW9ucyc7XG5pbXBvcnQgeyBleGhhdXN0TWFwLCBmb3JrSm9pbiwgbWVyZ2VNYXAsIE9ic2VydmFibGUsIG9mLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQXV0aCwgQXV0aFRlYW0sIENvbGxlY3Rpb24sIFNlYXJjaFRlYW0gfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHsgUmVtb3ZlTWVtYmVyQXV0aEludGVyZmFjZSwgUmVtb3ZlVGVhbUF1dGhJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2F1dGhlbnRpY2F0aW9uL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQXV0aEVmZmVjdHMge1xuICBwcml2YXRlIGFjdGlvbnMkID0gaW5qZWN0KEFjdGlvbnMpO1xuICBwcml2YXRlIGF1dGhlbnRpY2F0aW9uU2VydmljZSA9IGluamVjdChBdXRoZW50aWNhdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIGF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZSA9IGluamVjdChTdG9yYWdlU2VydmljZSk7XG4gIHByaXZhdGUgdGVhbVNlcnZpY2UgPSBpbmplY3QoVGVhbVNlcnZpY2UpO1xuXG4gIGNsZWFyQXV0aGVudGljYXRpb24kID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShjbGVhckF1dGhlbnRpY2F0aW9uQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKCkgPT5cbiAgICAgICAgZm9ya0pvaW4oXG4gICAgICAgICAge1xuICAgICAgICAgICAgdG9rZW5SZW1vdmFsOiB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnJlbW92ZUFzT2JzZXJ2YWJsZShTVE9SQUdFX1RPS0VOKSxcbiAgICAgICAgICAgIHNlbGVjdGVkQXV0aFJlbW92YWw6IHRoaXMuc3RvcmFnZVNlcnZpY2UucmVtb3ZlQXNPYnNlcnZhYmxlKFNUT1JBR0VfU0VMRUNURURfQVVUSCksXG4gICAgICAgICAgICBzZWxlY3RlZE1lbWJlcnNSZW1vdmFsOiB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnJlbW92ZUFzT2JzZXJ2YWJsZShTVE9SQUdFX1NFTEVDVEVEX01FTUJFUlMpLFxuICAgICAgICAgIH1cbiAgICAgICAgKS5waXBlKFxuICAgICAgICAgIG1lcmdlTWFwKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLmNsZWFyQXV0aGVudGljYXRpb24oKTtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgIGNsZWFyU3RvcmVBY3Rpb24oKSxcbiAgICAgICAgICAgICAgY2xlYXJBdXRoZW50aWNhdGlvblN1Y2Nlc3NBY3Rpb24oKVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgY2xlYXJDdXJyZW50JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoY2xlYXJDdXJyZW50QXV0aEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCgpID0+IHRoaXMuc3RvcmFnZVNlcnZpY2UucmVtb3ZlQXNPYnNlcnZhYmxlKFNUT1JBR0VfU0VMRUNURURfQVVUSClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKCgpID0+IGNsZWFyQ3VycmVudEF1dGhTdWNjZXNzQWN0aW9uKCkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgZ2V0Q3VycmVudCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGdldEN1cnJlbnRBdXRoQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKCkgPT4gdGhpcy5zdG9yYWdlU2VydmljZS5nZXRBc09ic2VydmFibGUoU1RPUkFHRV9TRUxFQ1RFRF9BVVRIKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKGF1dGg6IEF1dGggfCBudWxsIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXV0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRDdXJyZW50QXV0aFN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IG51bGx9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBnZXRDdXJyZW50QXV0aFN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGF1dGh9KTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGxpc3RBdXRoJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUobGlzdEF1dGhBY3Rpb24pLFxuICAgICAgc3dpdGNoTWFwKCh7cGF5bG9hZH0pID0+IHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aHMocGF5bG9hZClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChhdXRoczogQ29sbGVjdGlvbjxBdXRoPikgPT4gbGlzdEF1dGhTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBhdXRocy50b0FycmF5KCl9KSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihsaXN0QXV0aEZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGxpc3RBdXRoVGVhbXMkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShsaXN0QXV0aFRlYW1zQWN0aW9uKSxcbiAgICAgIG1lcmdlTWFwKCh7cGF5bG9hZH0pID0+IHtcbiAgICAgICAgaWYgKHBheWxvYWQuY2x1YkFkbWluKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMudGVhbVNlcnZpY2UuZ2V0Q2x1YlRlYW1zKHBheWxvYWQuaWQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgbWFwKChzZWFyY2hUZWFtczogQ29sbGVjdGlvbjxTZWFyY2hUZWFtPikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF1dGggPSB7XG4gICAgICAgICAgICAgICAgICAuLi5wYXlsb2FkLFxuICAgICAgICAgICAgICAgICAgdGVhbXM6IHNlYXJjaFRlYW1zLnRvQXJyYXkoKVxuICAgICAgICAgICAgICAgICAgICAuc29ydCgoYTogU2VhcmNoVGVhbSwgYjogU2VhcmNoVGVhbSkgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSlcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpc3RBdXRoVGVhbXNTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBhdXRofSk7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGxpc3RBdXRoVGVhbXNGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc2VjdGlvbnNUZWFtcyQ6IEFycmF5PE9ic2VydmFibGU8Q29sbGVjdGlvbjxTZWFyY2hUZWFtPj4+ID0gcGF5bG9hZC5zZWN0aW9ucy5tYXAoKHNlY3Rpb24pID0+XG4gICAgICAgICAgICB0aGlzLnRlYW1TZXJ2aWNlLmdldFNlY3Rpb25UZWFtcyhzZWN0aW9uLmlkKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICByZXR1cm4gZm9ya0pvaW4oc2VjdGlvbnNUZWFtcyQpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHJlc3VsdHM6IEFycmF5PENvbGxlY3Rpb248U2VhcmNoVGVhbT4+KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25UZWFtczogQXJyYXk8U2VhcmNoVGVhbT4gPSByZXN1bHRzXG4gICAgICAgICAgICAgICAgLmZsYXRNYXAoKHJlc3VsdDogQ29sbGVjdGlvbjxTZWFyY2hUZWFtPikgPT4gcmVzdWx0LnRvQXJyYXkoKSk7XG4gICAgICAgICAgICAgIC8vIFVuaW9uIHRoZSBmZXRjaGVkIHNlY3Rpb24gdGVhbXMgd2l0aCBhbnkgdGVhbXMgYWxyZWFkeSBvbiB0aGUgYXV0aCAoZS5nLiBhIHRlYW0gdGhlXG4gICAgICAgICAgICAgIC8vIHVzZXIgYWRtaW5zIG91dHNpZGUgdGhlIHNlY3Rpb25zIHRoZXkgYWRtaW5pc3RlciksIGtleWVkIGJ5IGlkLiBGZXRjaGVkIFNlYXJjaFRlYW1zXG4gICAgICAgICAgICAgIC8vIHdpbiBvbiBkdXBsaWNhdGVzIHNvIHRoZSByaWNoZXIgc2VjdGlvbl9uYW1lIGlzIGtlcHQuXG4gICAgICAgICAgICAgIGNvbnN0IHRlYW1zQnlJZCA9IG5ldyBNYXA8c3RyaW5nLCBBdXRoVGVhbSB8IFNlYXJjaFRlYW0+KCk7XG4gICAgICAgICAgICAgIFsuLi5wYXlsb2FkLnRlYW1zLCAuLi5zZWN0aW9uVGVhbXNdLmZvckVhY2goKHRlYW0pID0+IHRlYW1zQnlJZC5zZXQodGVhbS5pZCwgdGVhbSkpO1xuICAgICAgICAgICAgICBjb25zdCBtZXJnZWRUZWFtcyA9IFsuLi50ZWFtc0J5SWQudmFsdWVzKCldLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuICAgICAgICAgICAgICBjb25zdCBhdXRoID0ge1xuICAgICAgICAgICAgICAgIC4uLnBheWxvYWQsXG4gICAgICAgICAgICAgICAgLy8gdGVhbXMgaXMgdHlwZWQgYXMgQXV0aFRlYW1bXSB8IFNlYXJjaFRlYW1bXTsgdGhlIG1lcmdlZCBsaXN0IG1heSBtaXggYm90aCBzaGFwZXMsXG4gICAgICAgICAgICAgICAgLy8gd2hpY2ggY29uc3VtZXJzIGFscmVhZHkgaGFuZGxlICh0aGV5IHJlYWQgaWQvbmFtZS9zZWN0aW9uX25hbWUgfCBzZWN0aW9uPy5uYW1lKS5cbiAgICAgICAgICAgICAgICB0ZWFtczogbWVyZ2VkVGVhbXMgYXMgU2VhcmNoVGVhbVtdLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICByZXR1cm4gbGlzdEF1dGhUZWFtc1N1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGF1dGh9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihsaXN0QXV0aFRlYW1zRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApXG4gICk7XG5cbiAgcmVmcmVzaCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJlZnJlc2hBdXRoc0FjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCgpID0+IHRoaXMuYXV0aFNlcnZpY2UudXBkYXRlTWVtYmVycygpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1lcmdlTWFwKChzdWNjZXNzOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIHJlZnJlc2hBdXRoc1N1Y2Nlc3NBY3Rpb24oKSxcbiAgICAgICAgICAgICAgICBsaXN0QXV0aEFjdGlvbigpXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gb2YocmVmcmVzaEF1dGhzRmFpbHVyZUFjdGlvbigpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IG9mKHJlZnJlc2hBdXRoc0ZhaWx1cmVBY3Rpb24oKSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmVtb3ZlTWVtYmVyJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmVtb3ZlTWVtYmVyQXV0aEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiBSZW1vdmVNZW1iZXJBdXRoSW50ZXJmYWNlXG4gICAgICAgIH0pID0+IHRoaXMuYXV0aFNlcnZpY2UucmVtb3ZlTWVtYmVyQXV0aChwYXlsb2FkLmF1dGhJZCwgcGF5bG9hZC5tZW1iZXJJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgodmFsdWU6IGJvb2xlYW4pID0+IHZhbHVlID8gcmVtb3ZlTWVtYmVyQXV0aFN1Y2Nlc3NBY3Rpb24oKSA6IHJlbW92ZU1lbWJlckF1dGhGYWlsdXJlQWN0aW9uKCkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZihyZW1vdmVNZW1iZXJBdXRoRmFpbHVyZUFjdGlvbigpKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlbW92ZVRlYW0kID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZW1vdmVUZWFtQXV0aEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiBSZW1vdmVUZWFtQXV0aEludGVyZmFjZVxuICAgICAgICB9KSA9PiB0aGlzLmF1dGhTZXJ2aWNlLnJlbW92ZVRlYW1BdXRoKHBheWxvYWQuYXV0aElkLCBwYXlsb2FkLnRlYW1JZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgodmFsdWU6IGJvb2xlYW4pID0+IHZhbHVlID8gcmVtb3ZlVGVhbUF1dGhTdWNjZXNzQWN0aW9uKCkgOiByZW1vdmVUZWFtQXV0aEZhaWx1cmVBY3Rpb24oKSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IG9mKHJlbW92ZU1lbWJlckF1dGhGYWlsdXJlQWN0aW9uKCkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgc2V0Q3VycmVudCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHNldEN1cnJlbnRBdXRoQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfTogeyBwYXlsb2FkOiBBdXRoIH0pID0+IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0QXNPYnNlcnZhYmxlKFNUT1JBR0VfU0VMRUNURURfQVVUSClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWVyZ2VNYXAoKG9sZEF1dGg6IEF1dGgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldEFzT2JzZXJ2YWJsZShTVE9SQUdFX1NFTEVDVEVEX0FVVEgsIHBheWxvYWQpXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKChuZXdBdXRoOiBBdXRoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAvLyBTYW1lIGNvbnRleHQgb25seSB3aGVuIGJvdGggYXJlIG1lbWJlciBjb250ZXh0cyAoYSB0ZWFtIHBpY2sgYWx3YXlzIGhhc1xuICAgICAgICAgICAgICAgICAgLy8gbWVtYmVyczogW10sIHNvIGFuIGVtcHR5LWxlbmd0aCBtYXRjaCBtdXN0IG5vdCBjb3VudCDigJQgaXQgbWFkZSBldmVyeVxuICAgICAgICAgICAgICAgICAgLy8gdGVhbeKGknRlYW0gc3dpdGNoIHdpdGhpbiBhIGNsdWIgc2tpcCB0aGUgc3RvcmUgY2xlYXIgYW5kIGxlYWsgdGhlIHByZXZpb3VzXG4gICAgICAgICAgICAgICAgICAvLyB0ZWFtJ3MgZGF0YSwgZS5nLiBsZWFkZXIgbm90aWZpY2F0aW9ucykgb3IgYm90aCBwb2ludCBhdCB0aGUgc2FtZSB0ZWFtLlxuICAgICAgICAgICAgICAgICAgY29uc3Qgc2FtZU1lbWJlckNvbnRleHQgPSAhIShuZXdBdXRoLm1lbWJlcnMgJiYgbmV3QXV0aC5tZW1iZXJzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgbmV3QXV0aC5tZW1iZXJzLmxlbmd0aCA9PT0gb2xkQXV0aD8ubWVtYmVycz8ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNhbWVUZWFtQ29udGV4dCA9ICEhKG5ld0F1dGgudGVhbXMgJiYgbmV3QXV0aC50ZWFtcy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIG9sZEF1dGg/LnRlYW1zPy5sZW5ndGggPT09IG5ld0F1dGgudGVhbXMubGVuZ3RoICYmIG5ld0F1dGgudGVhbXNbMF0uaWQgPT09IG9sZEF1dGgudGVhbXNbMF0uaWQpO1xuICAgICAgICAgICAgICAgICAgaWYgKG9sZEF1dGggJiYgbmV3QXV0aC5pZCA9PT0gb2xkQXV0aC5pZCAmJiAoc2FtZU1lbWJlckNvbnRleHQgfHwgc2FtZVRlYW1Db250ZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgIGdldEN1cnJlbnRBdXRoU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogbmV3QXV0aH0pXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgZ2V0Q3VycmVudEF1dGhTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBuZXdBdXRofSksXG4gICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdG9yZUFjdGlvbigpXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICB1bmJsb2NrTWVtYmVyJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUodW5ibG9ja01lbWJlckF1dGhBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7cGF5bG9hZDoge3VzZXJJZDogc3RyaW5nLCBjbHViSWQ6IHN0cmluZywgbWVtYmVySWQ6IHN0cmluZ319KSA9PiB0aGlzLmF1dGhTZXJ2aWNlLnVuYmxvY2tNZW1iZXIocGF5bG9hZC51c2VySWQsIHBheWxvYWQuY2x1YklkLCBwYXlsb2FkLm1lbWJlcklkKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtZXJnZU1hcCgoc3VjY2VzczogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICB1bmJsb2NrTWVtYmVyQXV0aFN1Y2Nlc3NBY3Rpb24oKSxcbiAgICAgICAgICAgICAgICByZWZyZXNoQXV0aHNBY3Rpb24oKVxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgdW5ibG9ja01lbWJlckF1dGhGYWlsdXJlQWN0aW9uKHtcbiAgICAgICAgICAgICAgcGF5bG9hZDogbmV3IEh0dHBFcnJvclJlc3BvbnNlKHtzdGF0dXM6IDQwMH0pXG4gICAgICAgICAgICB9KV07XG4gICAgICAgICAgfSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YodW5ibG9ja01lbWJlckF1dGhGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJ9KSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cbiJdfQ==
|