@ieeesa-npm/dashboard 0.0.0-stage → 0.0.2

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 (73) hide show
  1. package/README.md +75 -3
  2. package/esm2022/ieeesa-npm-dashboard.mjs +5 -0
  3. package/esm2022/lib/assets/constants.json +158 -0
  4. package/esm2022/lib/assets/dashboard-mock.mjs +221 -0
  5. package/esm2022/lib/assets/dashboard-route-paths.mock.mjs +14 -0
  6. package/esm2022/lib/assets/dashboard-user-permissions.mock.mjs +23 -0
  7. package/esm2022/lib/assets/date-formats.mjs +28 -0
  8. package/esm2022/lib/components/event-group-card/event-group-card.component.mjs +414 -0
  9. package/esm2022/lib/components/meeting-attendance-row/meeting-attendance-row.component.mjs +182 -0
  10. package/esm2022/lib/components/member-level-badge/member-level-badge.component.mjs +79 -0
  11. package/esm2022/lib/components/upcoming-meetings-events/upcoming-meetings-events.component.mjs +261 -0
  12. package/esm2022/lib/components/welcome-header/dashboard-welcome-header.component.mjs +151 -0
  13. package/esm2022/lib/components/your-groups/your-groups.component.mjs +243 -0
  14. package/esm2022/lib/dashboard.component.mjs +417 -0
  15. package/esm2022/lib/dashboard.module.mjs +16 -0
  16. package/esm2022/lib/dashboard.routes.mjs +7 -0
  17. package/esm2022/lib/models/attendance-action-permissions.model.mjs +2 -0
  18. package/esm2022/lib/models/attendance-state.model.mjs +7 -0
  19. package/esm2022/lib/models/dashboard-list-response.model.mjs +2 -0
  20. package/esm2022/lib/models/dashboard-route-config.model.mjs +2 -0
  21. package/esm2022/lib/models/dashboard-section-state.model.mjs +9 -0
  22. package/esm2022/lib/models/dashboard-user-info.model.mjs +2 -0
  23. package/esm2022/lib/models/event-meeting-list-item.model.mjs +2 -0
  24. package/esm2022/lib/models/event-meeting-list-payload.model.mjs +8 -0
  25. package/esm2022/lib/models/group-row.model.mjs +2 -0
  26. package/esm2022/lib/models/meeting-row.model.mjs +2 -0
  27. package/esm2022/lib/models/my-groups-view.model.mjs +2 -0
  28. package/esm2022/lib/models/page-change.model.mjs +2 -0
  29. package/esm2022/lib/models/upcoming-event.model.mjs +13 -0
  30. package/esm2022/lib/services/attendance-reducers.mjs +54 -0
  31. package/esm2022/lib/services/dashboard.service.mjs +402 -0
  32. package/esm2022/lib/services/user-permissions.service.mjs +50 -0
  33. package/esm2022/lib/utils/attendance-action.util.mjs +53 -0
  34. package/esm2022/lib/utils/date-format.util.mjs +110 -0
  35. package/esm2022/lib/utils/event-meeting-mapper.util.mjs +96 -0
  36. package/esm2022/public-api.mjs +36 -0
  37. package/fesm2022/ieeesa-npm-dashboard.mjs +2981 -0
  38. package/fesm2022/ieeesa-npm-dashboard.mjs.map +1 -0
  39. package/index.d.ts +5 -0
  40. package/lib/assets/dashboard-mock.d.ts +31 -0
  41. package/lib/assets/dashboard-route-paths.mock.d.ts +2 -0
  42. package/lib/assets/dashboard-user-permissions.mock.d.ts +2 -0
  43. package/lib/assets/date-formats.d.ts +27 -0
  44. package/lib/components/event-group-card/event-group-card.component.d.ts +268 -0
  45. package/lib/components/meeting-attendance-row/meeting-attendance-row.component.d.ts +115 -0
  46. package/lib/components/member-level-badge/member-level-badge.component.d.ts +177 -0
  47. package/lib/components/upcoming-meetings-events/upcoming-meetings-events.component.d.ts +175 -0
  48. package/lib/components/welcome-header/dashboard-welcome-header.component.d.ts +98 -0
  49. package/lib/components/your-groups/your-groups.component.d.ts +159 -0
  50. package/lib/dashboard.component.d.ts +414 -0
  51. package/lib/dashboard.module.d.ts +7 -0
  52. package/lib/dashboard.routes.d.ts +2 -0
  53. package/lib/models/attendance-action-permissions.model.d.ts +4 -0
  54. package/lib/models/attendance-state.model.d.ts +4 -0
  55. package/lib/models/dashboard-list-response.model.d.ts +5 -0
  56. package/lib/models/dashboard-route-config.model.d.ts +7 -0
  57. package/lib/models/dashboard-section-state.model.d.ts +6 -0
  58. package/lib/models/dashboard-user-info.model.d.ts +5 -0
  59. package/lib/models/event-meeting-list-item.model.d.ts +107 -0
  60. package/lib/models/event-meeting-list-payload.model.d.ts +40 -0
  61. package/lib/models/group-row.model.d.ts +33 -0
  62. package/lib/models/meeting-row.model.d.ts +28 -0
  63. package/lib/models/my-groups-view.model.d.ts +56 -0
  64. package/lib/models/page-change.model.d.ts +4 -0
  65. package/lib/models/upcoming-event.model.d.ts +51 -0
  66. package/lib/services/attendance-reducers.d.ts +43 -0
  67. package/lib/services/dashboard.service.d.ts +202 -0
  68. package/lib/services/user-permissions.service.d.ts +31 -0
  69. package/lib/utils/attendance-action.util.d.ts +38 -0
  70. package/lib/utils/date-format.util.d.ts +60 -0
  71. package/lib/utils/event-meeting-mapper.util.d.ts +50 -0
  72. package/package.json +30 -3
  73. package/public-api.d.ts +26 -0
@@ -0,0 +1,261 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, EventEmitter, Input, Output, ViewEncapsulation, } from '@angular/core';
3
+ import { MatPaginatorModule, } from '@angular/material/paginator';
4
+ import { LoaderComponent } from '@ieeesa-npm/presentation';
5
+ import { DashboardSectionState } from '../../models/dashboard-section-state.model';
6
+ import { EventGroupCardComponent } from '../event-group-card/event-group-card.component';
7
+ import * as screenTexts from '../../assets/constants.json';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/common";
10
+ import * as i2 from "@angular/material/paginator";
11
+ /**
12
+ * Upcoming_Meetings_Events renders the "Upcoming Meetings & Events" dashboard
13
+ * section: a section title and "View All" link, a collapse/expand toggle that
14
+ * starts expanded, and one {@link EventGroupCardComponent} per upcoming event.
15
+ *
16
+ * The section is driven by its `sectionState` input: it shows the Loader while
17
+ * `LOADING`, the event-group cards while `LOADED`, the empty-state message while
18
+ * `EMPTY`, and the error message while `ERROR` — the four regions are mutually
19
+ * exclusive (Req 13.1, 13.2, 13.3, 13.5). The component is purely
20
+ * presentational: "View All" emits `viewAll` (Req 5.1, 5.2), the collapse toggle
21
+ * flips `isExpanded` and the card-list visibility while exposing
22
+ * `[attr.aria-expanded]` (Req 5.3, 5.4, 14.3), and each card is rendered via
23
+ * `*ngFor` with {@link trackByEventId} to preserve input order (Req 5.5, 5.6,
24
+ * 14.4). Card outputs (`viewEvent`/`openMeeting`/`logAttendance`/`leaveMeeting`)
25
+ * are bubbled upward unchanged, and each card's `pageChange` is mapped to
26
+ * `meetingPageChange` tagged with the originating event id (Req 6.9).
27
+ * @export
28
+ * @class UpcomingMeetingsEventsComponent
29
+ */
30
+ export class UpcomingMeetingsEventsComponent {
31
+ constructor() {
32
+ /** User-facing strings sourced from `constants.json`. */
33
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
34
+ this.constants = screenTexts;
35
+ /** Enum reference for template comparisons against `sectionState`. */
36
+ this.sectionStates = DashboardSectionState;
37
+ /** The upcoming events rendered as event-group cards (Req 5.5, 5.6). */
38
+ this.events = [];
39
+ /** The load/empty/error status driving the section's mutually exclusive regions. */
40
+ this.sectionState = DashboardSectionState.LOADING;
41
+ /** Host permissions gating the per-row log-attendance / leave-meeting buttons. */
42
+ this.permissions = {
43
+ canLogAttendance: false,
44
+ canLeaveMeeting: false,
45
+ };
46
+ /** Map of meeting id to current attendance state, passed down to each card. */
47
+ this.attendanceStates = {};
48
+ /** Set of meeting ids with an attendance action awaiting resolution. */
49
+ this.inFlightMeetingIds = new Set();
50
+ /** Whether the host has determined the viewport is at/below the mobile breakpoint. */
51
+ this.isMobileView = false;
52
+ /** Emits when the "View All" link is activated (Req 5.2). */
53
+ this.viewAll = new EventEmitter();
54
+ /** Bubbles the event id when a card's "View Event" button is activated (Req 6.4). */
55
+ this.viewEvent = new EventEmitter();
56
+ /** Bubbles the meeting id when a card's meeting-name link is activated (Req 7.4). */
57
+ this.openMeeting = new EventEmitter();
58
+ /** Bubbles the meeting id when a card requests logging attendance (Req 7.7). */
59
+ this.logAttendance = new EventEmitter();
60
+ /** Bubbles the meeting id when a card requests leaving the meeting (Req 7.8). */
61
+ this.leaveMeeting = new EventEmitter();
62
+ /** Emits the requested page tagged with its event id when a card paginates (Req 6.9). */
63
+ this.meetingPageChange = new EventEmitter();
64
+ /** Emits the event id + one-based page to lazily load an event's child meetings. */
65
+ this.loadEventMeetings = new EventEmitter();
66
+ /** Whether the section's card list is currently expanded; starts collapsed. */
67
+ this.isExpanded = false;
68
+ /** Section-level page size — 5 events/meetings per page per the design. */
69
+ this.sectionPageSize = 5;
70
+ /** The current zero-based page index of the section list. */
71
+ this.sectionPageIndex = 0;
72
+ /**
73
+ * Emits the new expanded state whenever the user toggles the section, so a
74
+ * two-way `[(expanded)]` binding keeps the host's flag in sync (otherwise a
75
+ * host-opened section the user then collapses leaves the host flag stale,
76
+ * making a repeat "Jump to" a no-op).
77
+ * @memberof UpcomingMeetingsEventsComponent
78
+ */
79
+ this.expandedChange = new EventEmitter();
80
+ }
81
+ /** The total number of events/meetings in the section (paginator length). */
82
+ get totalItems() {
83
+ return this.events?.length ?? 0;
84
+ }
85
+ /**
86
+ * The slice of events/meetings for the current section page (5 per page),
87
+ * used by the card `*ngFor`.
88
+ * @return {UpcomingEvent[]} The events on the current page.
89
+ * @memberof UpcomingMeetingsEventsComponent
90
+ */
91
+ get pagedEvents() {
92
+ const start = this.sectionPageIndex * this.sectionPageSize;
93
+ return (this.events ?? []).slice(start, start + this.sectionPageSize);
94
+ }
95
+ /** The one-based index of the first item shown on the current page. */
96
+ get sectionRangeStart() {
97
+ return this.totalItems === 0
98
+ ? 0
99
+ : this.sectionPageIndex * this.sectionPageSize + 1;
100
+ }
101
+ /** The one-based index of the last item shown on the current page. */
102
+ get sectionRangeEnd() {
103
+ return Math.min((this.sectionPageIndex + 1) * this.sectionPageSize, this.totalItems);
104
+ }
105
+ /**
106
+ * The section paginator range label (e.g. "1-5 of 20 Meetings & Events")
107
+ * built from the `constants.json` template.
108
+ * @return {string} The formatted range label.
109
+ * @memberof UpcomingMeetingsEventsComponent
110
+ */
111
+ get sectionRangeLabel() {
112
+ const template = this.constants?.upcomingSection?.paginator?.rangeTemplate ??
113
+ '{start}-{end} of {total} Meetings & Events';
114
+ return template
115
+ .replace('{start}', `${this.sectionRangeStart}`)
116
+ .replace('{end}', `${this.sectionRangeEnd}`)
117
+ .replace('{total}', `${this.totalItems}`);
118
+ }
119
+ /**
120
+ * Handles the section paginator change, updating the current section page.
121
+ * @param {PageEvent} event - The Material paginator page event.
122
+ * @return {void}
123
+ * @memberof UpcomingMeetingsEventsComponent
124
+ */
125
+ onSectionPageChange(event) {
126
+ this.sectionPageIndex = event.pageIndex;
127
+ }
128
+ /**
129
+ * Allows the host/container to open or close the section (e.g. a "Jump to"
130
+ * shortcut opens it). Writing the input mirrors the value onto the internal
131
+ * expand state while leaving the user's own toggle free to change it after.
132
+ * @memberof UpcomingMeetingsEventsComponent
133
+ */
134
+ set expanded(value) {
135
+ this.isExpanded = !!value;
136
+ }
137
+ get expanded() {
138
+ return this.isExpanded;
139
+ }
140
+ /**
141
+ * `trackBy` for the event-group-card `*ngFor`, keyed by the stable event id so
142
+ * Angular renders exactly one card per event in input order (Req 5.5, 5.6, 14.4).
143
+ * @param {number} index - The iteration index (fallback key).
144
+ * @param {UpcomingEvent} event - The event for this card.
145
+ * @return {string} The stable track key (event id).
146
+ * @memberof UpcomingMeetingsEventsComponent
147
+ */
148
+ trackByEventId(index, event) {
149
+ return event?.eventId ?? `${index}`;
150
+ }
151
+ /**
152
+ * Toggles the section's expanded/collapsed state, inverting the card-list
153
+ * visibility and the exposed `aria-expanded` value (Req 5.4, 14.3).
154
+ * @memberof UpcomingMeetingsEventsComponent
155
+ */
156
+ onToggleExpanded() {
157
+ this.isExpanded = !this.isExpanded;
158
+ this.expandedChange.emit(this.isExpanded);
159
+ }
160
+ /**
161
+ * Handles the "View All" link, emitting the `viewAll` intent to the host (Req 5.2).
162
+ * @memberof UpcomingMeetingsEventsComponent
163
+ */
164
+ onViewAll() {
165
+ this.viewAll.emit();
166
+ }
167
+ /**
168
+ * Bubbles a card's "View Event" activation upward (Req 6.4).
169
+ * @param {string} eventId - The event id emitted by the card.
170
+ * @memberof UpcomingMeetingsEventsComponent
171
+ */
172
+ onViewEvent(eventId) {
173
+ this.viewEvent.emit(eventId);
174
+ }
175
+ /**
176
+ * Bubbles a card's meeting-name link activation upward (Req 7.4).
177
+ * @param {string} meetingId - The meeting id emitted by the card.
178
+ * @memberof UpcomingMeetingsEventsComponent
179
+ */
180
+ onOpenMeeting(meetingId) {
181
+ this.openMeeting.emit(meetingId);
182
+ }
183
+ /**
184
+ * Bubbles a card's log-attendance request upward (Req 7.7).
185
+ * @param {string} meetingId - The meeting id emitted by the card.
186
+ * @memberof UpcomingMeetingsEventsComponent
187
+ */
188
+ onLogAttendance(meetingId) {
189
+ this.logAttendance.emit(meetingId);
190
+ }
191
+ /**
192
+ * Bubbles a card's leave-meeting request upward (Req 7.8).
193
+ * @param {string} meetingId - The meeting id emitted by the card.
194
+ * @memberof UpcomingMeetingsEventsComponent
195
+ */
196
+ onLeaveMeeting(meetingId) {
197
+ this.leaveMeeting.emit(meetingId);
198
+ }
199
+ /**
200
+ * Maps a card's `pageChange` into a `meetingPageChange` tagged with the
201
+ * originating event id so the host can page the correct event (Req 6.9).
202
+ * @param {string} eventId - The id of the event whose card paginated.
203
+ * @param {PageChange} page - The requested page from the card paginator.
204
+ * @memberof UpcomingMeetingsEventsComponent
205
+ */
206
+ onMeetingPageChange(eventId, page) {
207
+ this.meetingPageChange.emit({ eventId, ...page });
208
+ }
209
+ /**
210
+ * Bubbles a card's lazy child-meeting load request upward, tagged with the
211
+ * originating event id so the container can fetch that event's meetings.
212
+ * @param {string} eventId - The event whose meetings to load.
213
+ * @param {number} page - The one-based page requested by the card.
214
+ * @memberof UpcomingMeetingsEventsComponent
215
+ */
216
+ onLoadEventMeetings(eventId, page) {
217
+ this.loadEventMeetings.emit({ eventId, page });
218
+ }
219
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UpcomingMeetingsEventsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
220
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: UpcomingMeetingsEventsComponent, isStandalone: true, selector: "ieeesa-upcoming-meetings-events", inputs: { events: "events", sectionState: "sectionState", permissions: "permissions", attendanceStates: "attendanceStates", inFlightMeetingIds: "inFlightMeetingIds", isMobileView: "isMobileView", expanded: "expanded" }, outputs: { viewAll: "viewAll", viewEvent: "viewEvent", openMeeting: "openMeeting", logAttendance: "logAttendance", leaveMeeting: "leaveMeeting", meetingPageChange: "meetingPageChange", loadEventMeetings: "loadEventMeetings", expandedChange: "expandedChange" }, ngImport: i0, template: "<section\r\n class=\"ieeesa-upcoming-meetings-events\"\r\n [class.ieeesa-upcoming-meetings-events--mobile]=\"isMobileView\"\r\n>\r\n <header class=\"ieeesa-upcoming-meetings-events__header\">\r\n <!-- Section title (Req 5.1). -->\r\n <div class=\"ieeesa-upcoming-meetings-events__heading\">\r\n <h2 class=\"ieeesa-upcoming-meetings-events__title\">\r\n {{ constants.upcomingSection.title }}\r\n </h2>\r\n </div>\r\n\r\n <!-- View All link + Expand/Collapse toggle (Req 5.1, 5.2, 5.3, 5.4, 14.3). -->\r\n <div class=\"ieeesa-upcoming-meetings-events__actions\">\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-upcoming-meetings-events__view-all\"\r\n [attr.aria-label]=\"constants.upcomingSection.ariaLabel.viewAll\"\r\n (click)=\"onViewAll()\"\r\n >\r\n {{ constants.upcomingSection.viewAllLabel }}\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-upcoming-meetings-events__toggle\"\r\n [attr.aria-expanded]=\"isExpanded\"\r\n [attr.aria-label]=\"constants.upcomingSection.ariaLabel.toggle\"\r\n (click)=\"onToggleExpanded()\"\r\n >\r\n <span>{{ isExpanded ? constants.upcomingSection.collapseLabel : constants.upcomingSection.expandLabel }}</span>\r\n <i\r\n class=\"fa-solid\"\r\n [ngClass]=\"isExpanded ? 'fa-chevron-up' : 'fa-chevron-down'\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </button>\r\n </div>\r\n </header>\r\n\r\n <!-- Card list, shown only while expanded (Req 5.4). -->\r\n <div *ngIf=\"isExpanded\" class=\"ieeesa-upcoming-meetings-events__body\">\r\n <!-- Loader region (Req 13.1). -->\r\n <div\r\n *ngIf=\"sectionState === sectionStates.LOADING\"\r\n class=\"ieeesa-upcoming-meetings-events__loader\"\r\n >\r\n <ieeesa-loader></ieeesa-loader>\r\n </div>\r\n\r\n <!-- Content region: one card per event preserving input order (Req 5.5, 5.6, 13.2). -->\r\n <div\r\n *ngIf=\"sectionState === sectionStates.LOADED\"\r\n class=\"ieeesa-upcoming-meetings-events__cards\"\r\n >\r\n <ieeesa-event-group-card\r\n *ngFor=\"let event of pagedEvents; trackBy: trackByEventId\"\r\n [event]=\"event\"\r\n [permissions]=\"permissions\"\r\n [attendanceStates]=\"attendanceStates\"\r\n [inFlightMeetingIds]=\"inFlightMeetingIds\"\r\n [isMobileView]=\"isMobileView\"\r\n (viewEvent)=\"onViewEvent($event)\"\r\n (openMeeting)=\"onOpenMeeting($event)\"\r\n (logAttendance)=\"onLogAttendance($event)\"\r\n (leaveMeeting)=\"onLeaveMeeting($event)\"\r\n (pageChange)=\"onMeetingPageChange(event.eventId, $event)\"\r\n (loadMeetings)=\"onLoadEventMeetings(event.eventId, $event)\"\r\n ></ieeesa-event-group-card>\r\n\r\n <!-- Section-level paginator: 5 events/meetings per page (Req 3.x, design). -->\r\n <div\r\n *ngIf=\"totalItems > sectionPageSize\"\r\n class=\"ieeesa-upcoming-meetings-events__paginator\"\r\n >\r\n <span class=\"ieeesa-upcoming-meetings-events__paginator-range\">\r\n {{ sectionRangeLabel }}\r\n </span>\r\n <mat-paginator\r\n class=\"ieeesa-upcoming-meetings-events__paginator-control\"\r\n [pageIndex]=\"sectionPageIndex\"\r\n [pageSize]=\"sectionPageSize\"\r\n [length]=\"totalItems\"\r\n [hidePageSize]=\"true\"\r\n (page)=\"onSectionPageChange($event)\"\r\n ></mat-paginator>\r\n </div>\r\n </div>\r\n\r\n <!-- Empty-state region (Req 13.3). -->\r\n <p\r\n *ngIf=\"sectionState === sectionStates.EMPTY\"\r\n class=\"ieeesa-upcoming-meetings-events__empty\"\r\n >\r\n {{ constants.upcomingSection.emptyMessage }}\r\n </p>\r\n\r\n <!-- Error region (Req 13.5). -->\r\n <p\r\n *ngIf=\"sectionState === sectionStates.ERROR\"\r\n class=\"ieeesa-upcoming-meetings-events__error\"\r\n role=\"alert\"\r\n >\r\n {{ constants.upcomingSection.errorMessage }}\r\n </p>\r\n </div>\r\n</section>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.ieeesa-upcoming-meetings-events{display:flex;flex-direction:column;gap:16px;background-color:#fff;border-radius:12px;box-shadow:0 1px 2px #0003;border:1px solid #e2e8f0;padding:20px 24px}.ieeesa-upcoming-meetings-events__header{display:flex;align-items:center;justify-content:space-between;gap:16px}.ieeesa-upcoming-meetings-events__heading{display:flex;min-width:0}.ieeesa-upcoming-meetings-events__title{margin:0;font-family:Calibri Bold;font-weight:700;font-size:18px;color:#0f172a}.ieeesa-upcoming-meetings-events__actions{display:flex;align-items:center;gap:16px}.ieeesa-upcoming-meetings-events__view-all{flex-shrink:0;background:none;border:none;padding:0;cursor:pointer;font-family:Calibri Bold;font-weight:700;font-size:18px;color:#00629b}.ieeesa-upcoming-meetings-events__view-all:hover{text-decoration:underline}.ieeesa-upcoming-meetings-events__toggle{display:inline-flex;align-items:center;gap:8px;padding:6px 14px;border:1px solid #dbe2eb;border-radius:8px;background-color:#fff;cursor:pointer;font-family:Calibri Bold;font-weight:700;font-size:18px;color:#00629b}.ieeesa-upcoming-meetings-events__toggle:hover{border-color:#00629b}.ieeesa-upcoming-meetings-events__toggle i{font-size:.75rem}.ieeesa-upcoming-meetings-events__body{display:flex;flex-direction:column}.ieeesa-upcoming-meetings-events__loader{display:flex;align-items:center;justify-content:center;padding:24px}.ieeesa-upcoming-meetings-events__cards{display:flex;flex-direction:column;gap:16px}.ieeesa-upcoming-meetings-events__paginator{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:12px;padding-top:8px}.ieeesa-upcoming-meetings-events__paginator-range{font-size:.8125rem;color:#939094}.ieeesa-upcoming-meetings-events__empty,.ieeesa-upcoming-meetings-events__error{margin:0;padding:16px;font-size:.875rem;color:#939094}.ieeesa-upcoming-meetings-events__error{color:#ba0c2f}.ieeesa-upcoming-meetings-events--mobile .ieeesa-upcoming-meetings-events__header{flex-wrap:wrap}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i2.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: LoaderComponent, selector: "ieeesa-loader", inputs: ["diameter"] }, { kind: "component", type: EventGroupCardComponent, selector: "ieeesa-event-group-card", inputs: ["event", "permissions", "attendanceStates", "inFlightMeetingIds", "isMobileView"], outputs: ["viewEvent", "openMeeting", "logAttendance", "leaveMeeting", "pageChange", "loadMeetings"] }], encapsulation: i0.ViewEncapsulation.None }); }
221
+ }
222
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UpcomingMeetingsEventsComponent, decorators: [{
223
+ type: Component,
224
+ args: [{ selector: 'ieeesa-upcoming-meetings-events', standalone: true, imports: [
225
+ CommonModule,
226
+ MatPaginatorModule,
227
+ LoaderComponent,
228
+ EventGroupCardComponent,
229
+ ], encapsulation: ViewEncapsulation.None, template: "<section\r\n class=\"ieeesa-upcoming-meetings-events\"\r\n [class.ieeesa-upcoming-meetings-events--mobile]=\"isMobileView\"\r\n>\r\n <header class=\"ieeesa-upcoming-meetings-events__header\">\r\n <!-- Section title (Req 5.1). -->\r\n <div class=\"ieeesa-upcoming-meetings-events__heading\">\r\n <h2 class=\"ieeesa-upcoming-meetings-events__title\">\r\n {{ constants.upcomingSection.title }}\r\n </h2>\r\n </div>\r\n\r\n <!-- View All link + Expand/Collapse toggle (Req 5.1, 5.2, 5.3, 5.4, 14.3). -->\r\n <div class=\"ieeesa-upcoming-meetings-events__actions\">\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-upcoming-meetings-events__view-all\"\r\n [attr.aria-label]=\"constants.upcomingSection.ariaLabel.viewAll\"\r\n (click)=\"onViewAll()\"\r\n >\r\n {{ constants.upcomingSection.viewAllLabel }}\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-upcoming-meetings-events__toggle\"\r\n [attr.aria-expanded]=\"isExpanded\"\r\n [attr.aria-label]=\"constants.upcomingSection.ariaLabel.toggle\"\r\n (click)=\"onToggleExpanded()\"\r\n >\r\n <span>{{ isExpanded ? constants.upcomingSection.collapseLabel : constants.upcomingSection.expandLabel }}</span>\r\n <i\r\n class=\"fa-solid\"\r\n [ngClass]=\"isExpanded ? 'fa-chevron-up' : 'fa-chevron-down'\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </button>\r\n </div>\r\n </header>\r\n\r\n <!-- Card list, shown only while expanded (Req 5.4). -->\r\n <div *ngIf=\"isExpanded\" class=\"ieeesa-upcoming-meetings-events__body\">\r\n <!-- Loader region (Req 13.1). -->\r\n <div\r\n *ngIf=\"sectionState === sectionStates.LOADING\"\r\n class=\"ieeesa-upcoming-meetings-events__loader\"\r\n >\r\n <ieeesa-loader></ieeesa-loader>\r\n </div>\r\n\r\n <!-- Content region: one card per event preserving input order (Req 5.5, 5.6, 13.2). -->\r\n <div\r\n *ngIf=\"sectionState === sectionStates.LOADED\"\r\n class=\"ieeesa-upcoming-meetings-events__cards\"\r\n >\r\n <ieeesa-event-group-card\r\n *ngFor=\"let event of pagedEvents; trackBy: trackByEventId\"\r\n [event]=\"event\"\r\n [permissions]=\"permissions\"\r\n [attendanceStates]=\"attendanceStates\"\r\n [inFlightMeetingIds]=\"inFlightMeetingIds\"\r\n [isMobileView]=\"isMobileView\"\r\n (viewEvent)=\"onViewEvent($event)\"\r\n (openMeeting)=\"onOpenMeeting($event)\"\r\n (logAttendance)=\"onLogAttendance($event)\"\r\n (leaveMeeting)=\"onLeaveMeeting($event)\"\r\n (pageChange)=\"onMeetingPageChange(event.eventId, $event)\"\r\n (loadMeetings)=\"onLoadEventMeetings(event.eventId, $event)\"\r\n ></ieeesa-event-group-card>\r\n\r\n <!-- Section-level paginator: 5 events/meetings per page (Req 3.x, design). -->\r\n <div\r\n *ngIf=\"totalItems > sectionPageSize\"\r\n class=\"ieeesa-upcoming-meetings-events__paginator\"\r\n >\r\n <span class=\"ieeesa-upcoming-meetings-events__paginator-range\">\r\n {{ sectionRangeLabel }}\r\n </span>\r\n <mat-paginator\r\n class=\"ieeesa-upcoming-meetings-events__paginator-control\"\r\n [pageIndex]=\"sectionPageIndex\"\r\n [pageSize]=\"sectionPageSize\"\r\n [length]=\"totalItems\"\r\n [hidePageSize]=\"true\"\r\n (page)=\"onSectionPageChange($event)\"\r\n ></mat-paginator>\r\n </div>\r\n </div>\r\n\r\n <!-- Empty-state region (Req 13.3). -->\r\n <p\r\n *ngIf=\"sectionState === sectionStates.EMPTY\"\r\n class=\"ieeesa-upcoming-meetings-events__empty\"\r\n >\r\n {{ constants.upcomingSection.emptyMessage }}\r\n </p>\r\n\r\n <!-- Error region (Req 13.5). -->\r\n <p\r\n *ngIf=\"sectionState === sectionStates.ERROR\"\r\n class=\"ieeesa-upcoming-meetings-events__error\"\r\n role=\"alert\"\r\n >\r\n {{ constants.upcomingSection.errorMessage }}\r\n </p>\r\n </div>\r\n</section>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.ieeesa-upcoming-meetings-events{display:flex;flex-direction:column;gap:16px;background-color:#fff;border-radius:12px;box-shadow:0 1px 2px #0003;border:1px solid #e2e8f0;padding:20px 24px}.ieeesa-upcoming-meetings-events__header{display:flex;align-items:center;justify-content:space-between;gap:16px}.ieeesa-upcoming-meetings-events__heading{display:flex;min-width:0}.ieeesa-upcoming-meetings-events__title{margin:0;font-family:Calibri Bold;font-weight:700;font-size:18px;color:#0f172a}.ieeesa-upcoming-meetings-events__actions{display:flex;align-items:center;gap:16px}.ieeesa-upcoming-meetings-events__view-all{flex-shrink:0;background:none;border:none;padding:0;cursor:pointer;font-family:Calibri Bold;font-weight:700;font-size:18px;color:#00629b}.ieeesa-upcoming-meetings-events__view-all:hover{text-decoration:underline}.ieeesa-upcoming-meetings-events__toggle{display:inline-flex;align-items:center;gap:8px;padding:6px 14px;border:1px solid #dbe2eb;border-radius:8px;background-color:#fff;cursor:pointer;font-family:Calibri Bold;font-weight:700;font-size:18px;color:#00629b}.ieeesa-upcoming-meetings-events__toggle:hover{border-color:#00629b}.ieeesa-upcoming-meetings-events__toggle i{font-size:.75rem}.ieeesa-upcoming-meetings-events__body{display:flex;flex-direction:column}.ieeesa-upcoming-meetings-events__loader{display:flex;align-items:center;justify-content:center;padding:24px}.ieeesa-upcoming-meetings-events__cards{display:flex;flex-direction:column;gap:16px}.ieeesa-upcoming-meetings-events__paginator{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:12px;padding-top:8px}.ieeesa-upcoming-meetings-events__paginator-range{font-size:.8125rem;color:#939094}.ieeesa-upcoming-meetings-events__empty,.ieeesa-upcoming-meetings-events__error{margin:0;padding:16px;font-size:.875rem;color:#939094}.ieeesa-upcoming-meetings-events__error{color:#ba0c2f}.ieeesa-upcoming-meetings-events--mobile .ieeesa-upcoming-meetings-events__header{flex-wrap:wrap}\n"] }]
230
+ }], propDecorators: { events: [{
231
+ type: Input
232
+ }], sectionState: [{
233
+ type: Input
234
+ }], permissions: [{
235
+ type: Input
236
+ }], attendanceStates: [{
237
+ type: Input
238
+ }], inFlightMeetingIds: [{
239
+ type: Input
240
+ }], isMobileView: [{
241
+ type: Input
242
+ }], viewAll: [{
243
+ type: Output
244
+ }], viewEvent: [{
245
+ type: Output
246
+ }], openMeeting: [{
247
+ type: Output
248
+ }], logAttendance: [{
249
+ type: Output
250
+ }], leaveMeeting: [{
251
+ type: Output
252
+ }], meetingPageChange: [{
253
+ type: Output
254
+ }], loadEventMeetings: [{
255
+ type: Output
256
+ }], expanded: [{
257
+ type: Input
258
+ }], expandedChange: [{
259
+ type: Output
260
+ }] } });
261
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBjb21pbmctbWVldGluZ3MtZXZlbnRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rhc2hib2FyZC9zcmMvbGliL2NvbXBvbmVudHMvdXBjb21pbmctbWVldGluZ3MtZXZlbnRzL3VwY29taW5nLW1lZXRpbmdzLWV2ZW50cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXNoYm9hcmQvc3JjL2xpYi9jb21wb25lbnRzL3VwY29taW5nLW1lZXRpbmdzLWV2ZW50cy91cGNvbWluZy1tZWV0aW5ncy1ldmVudHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxrQkFBa0IsR0FFbkIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHM0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFHbkYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxLQUFLLFdBQVcsTUFBTSw2QkFBNkIsQ0FBQzs7OztBQUUzRDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBZUgsTUFBTSxPQUFPLCtCQUErQjtJQWQ1QztRQWVFLHlEQUF5RDtRQUN6RCw4REFBOEQ7UUFDOUQsY0FBUyxHQUFRLFdBQVcsQ0FBQztRQUU3QixzRUFBc0U7UUFDN0Qsa0JBQWEsR0FBRyxxQkFBcUIsQ0FBQztRQUUvQyx3RUFBd0U7UUFDL0QsV0FBTSxHQUFvQixFQUFFLENBQUM7UUFFdEMsb0ZB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ci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIE1hdFBhZ2luYXRvck1vZHVsZSxcclxuICBQYWdlRXZlbnQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnQGllZWVzYS1ucG0vcHJlc2VudGF0aW9uJztcclxuaW1wb3J0IHsgQXR0ZW5kYW5jZUFjdGlvblBlcm1pc3Npb25zIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2F0dGVuZGFuY2UtYWN0aW9uLXBlcm1pc3Npb25zLm1vZGVsJztcclxuaW1wb3J0IHsgQXR0ZW5kYW5jZVN0YXRlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2F0dGVuZGFuY2Utc3RhdGUubW9kZWwnO1xyXG5pbXBvcnQgeyBEYXNoYm9hcmRTZWN0aW9uU3RhdGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZGFzaGJvYXJkLXNlY3Rpb24tc3RhdGUubW9kZWwnO1xyXG5pbXBvcnQgeyBQYWdlQ2hhbmdlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3BhZ2UtY2hhbmdlLm1vZGVsJztcclxuaW1wb3J0IHsgVXBjb21pbmdFdmVudCB9IGZyb20gJy4uLy4uL21vZGVscy91cGNvbWluZy1ldmVudC5tb2RlbCc7XHJcbmltcG9ydCB7IEV2ZW50R3JvdXBDYXJkQ29tcG9uZW50IH0gZnJvbSAnLi4vZXZlbnQtZ3JvdXAtY2FyZC9ldmVudC1ncm91cC1jYXJkLmNvbXBvbmVudCc7XHJcbmltcG9ydCAqIGFzIHNjcmVlblRleHRzIGZyb20gJy4uLy4uL2Fzc2V0cy9jb25zdGFudHMuanNvbic7XHJcblxyXG4vKipcclxuICogVXBjb21pbmdfTWVldGluZ3NfRXZlbnRzIHJlbmRlcnMgdGhlIFwiVXBjb21pbmcgTWVldGluZ3MgJiBFdmVudHNcIiBkYXNoYm9hcmRcclxuICogc2VjdGlvbjogYSBzZWN0aW9uIHRpdGxlIGFuZCBcIlZpZXcgQWxsXCIgbGluaywgYSBjb2xsYXBzZS9leHBhbmQgdG9nZ2xlIHRoYXRcclxuICogc3RhcnRzIGV4cGFuZGVkLCBhbmQgb25lIHtAbGluayBFdmVudEdyb3VwQ2FyZENvbXBvbmVudH0gcGVyIHVwY29taW5nIGV2ZW50LlxyXG4gKlxyXG4gKiBUaGUgc2VjdGlvbiBpcyBkcml2ZW4gYnkgaXRzIGBzZWN0aW9uU3RhdGVgIGlucHV0OiBpdCBzaG93cyB0aGUgTG9hZGVyIHdoaWxlXHJcbiAqIGBMT0FESU5HYCwgdGhlIGV2ZW50LWdyb3VwIGNhcmRzIHdoaWxlIGBMT0FERURgLCB0aGUgZW1wdHktc3RhdGUgbWVzc2FnZSB3aGlsZVxyXG4gKiBgRU1QVFlgLCBhbmQgdGhlIGVycm9yIG1lc3NhZ2Ugd2hpbGUgYEVSUk9SYCDigJQgdGhlIGZvdXIgcmVnaW9ucyBhcmUgbXV0dWFsbHlcclxuICogZXhjbHVzaXZlIChSZXEgMTMuMSwgMTMuMiwgMTMuMywgMTMuNSkuIFRoZSBjb21wb25lbnQgaXMgcHVyZWx5XHJcbiAqIHByZXNlbnRhdGlvbmFsOiBcIlZpZXcgQWxsXCIgZW1pdHMgYHZpZXdBbGxgIChSZXEgNS4xLCA1LjIpLCB0aGUgY29sbGFwc2UgdG9nZ2xlXHJcbiAqIGZsaXBzIGBpc0V4cGFuZGVkYCBhbmQgdGhlIGNhcmQtbGlzdCB2aXNpYmlsaXR5IHdoaWxlIGV4cG9zaW5nXHJcbiAqIGBbYXR0ci5hcmlhLWV4cGFuZGVkXWAgKFJlcSA1LjMsIDUuNCwgMTQuMyksIGFuZCBlYWNoIGNhcmQgaXMgcmVuZGVyZWQgdmlhXHJcbiAqIGAqbmdGb3JgIHdpdGgge0BsaW5rIHRyYWNrQnlFdmVudElkfSB0byBwcmVzZXJ2ZSBpbnB1dCBvcmRlciAoUmVxIDUuNSwgNS42LFxyXG4gKiAxNC40KS4gQ2FyZCBvdXRwdXRzIChgdmlld0V2ZW50YC9gb3Blbk1lZXRpbmdgL2Bsb2dBdHRlbmRhbmNlYC9gbGVhdmVNZWV0aW5nYClcclxuICogYXJlIGJ1YmJsZWQgdXB3YXJkIHVuY2hhbmdlZCwgYW5kIGVhY2ggY2FyZCdzIGBwYWdlQ2hhbmdlYCBpcyBtYXBwZWQgdG9cclxuICogYG1lZXRpbmdQYWdlQ2hhbmdlYCB0YWdnZWQgd2l0aCB0aGUgb3JpZ2luYXRpbmcgZXZlbnQgaWQgKFJlcSA2LjkpLlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBVcGNvbWluZ01lZXRpbmdzRXZlbnRzQ29tcG9uZW50XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxyXG4gIHNlbGVjdG9yOiAnaWVlZXNhLXVwY29taW5nLW1lZXRpbmdzLWV2ZW50cycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBNYXRQYWdpbmF0b3JNb2R1bGUsXHJcbiAgICBMb2FkZXJDb21wb25lbnQsXHJcbiAgICBFdmVudEdyb3VwQ2FyZENvbXBvbmVudCxcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91cGNvbWluZy1tZWV0aW5ncy1ldmVudHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3VwY29taW5nLW1lZXRpbmdzLWV2ZW50cy5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVcGNvbWluZ01lZXRpbmdzRXZlbnRzQ29tcG9uZW50IHtcclxuICAvKiogVXNlci1mYWNpbmcgc3RyaW5ncyBzb3VyY2VkIGZyb20gYGNvbnN0YW50cy5qc29uYC4gKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGNvbnN0YW50czogYW55ID0gc2NyZWVuVGV4dHM7XHJcblxyXG4gIC8qKiBFbnVtIHJlZmVyZW5jZSBmb3IgdGVtcGxhdGUgY29tcGFyaXNvbnMgYWdhaW5zdCBgc2VjdGlvblN0YXRlYC4gKi9cclxuICByZWFkb25seSBzZWN0aW9uU3RhdGVzID0gRGFzaGJvYXJkU2VjdGlvblN0YXRlO1xyXG5cclxuICAvKiogVGhlIHVwY29taW5nIGV2ZW50cyByZW5kZXJlZCBhcyBldmVudC1ncm91cCBjYXJkcyAoUmVxIDUuNSwgNS42KS4gKi9cclxuICBASW5wdXQoKSBldmVudHM6IFVwY29taW5nRXZlbnRbXSA9IFtdO1xyXG5cclxuICAvKiogVGhlIGxvYWQvZW1wdHkvZXJyb3Igc3RhdHVzIGRyaXZpbmcgdGhlIHNlY3Rpb24ncyBtdXR1YWxseSBleGNsdXNpdmUgcmVnaW9ucy4gKi9cclxuICBASW5wdXQoKSBzZWN0aW9uU3RhdGU6IERhc2hib2FyZFNlY3Rpb25TdGF0ZSA9IERhc2hib2FyZFNlY3Rpb25TdGF0ZS5MT0FESU5HO1xyXG5cclxuICAvKiogSG9zdCBwZXJtaXNzaW9ucyBnYXRpbmcgdGhlIHBlci1yb3cgbG9nLWF0dGVuZGFuY2UgLyBsZWF2ZS1tZWV0aW5nIGJ1dHRvbnMuICovXHJcbiAgQElucHV0KCkgcGVybWlzc2lvbnM6IEF0dGVuZGFuY2VBY3Rpb25QZXJtaXNzaW9ucyA9IHtcclxuICAgIGNhbkxvZ0F0dGVuZGFuY2U6IGZhbHNlLFxyXG4gICAgY2FuTGVhdmVNZWV0aW5nOiBmYWxzZSxcclxuICB9O1xyXG5cclxuICAvKiogTWFwIG9mIG1lZXRpbmcgaWQgdG8gY3VycmVudCBhdHRlbmRhbmNlIHN0YXRlLCBwYXNzZWQgZG93biB0byBlYWNoIGNhcmQuICovXHJcbiAgQElucHV0KCkgYXR0ZW5kYW5jZVN0YXRlczogUmVjb3JkPHN0cmluZywgQXR0ZW5kYW5jZVN0YXRlPiA9IHt9O1xyXG5cclxuICAvKiogU2V0IG9mIG1lZXRpbmcgaWRzIHdpdGggYW4gYXR0ZW5kYW5jZSBhY3Rpb24gYXdhaXRpbmcgcmVzb2x1dGlvbi4gKi9cclxuICBASW5wdXQoKSBpbkZsaWdodE1lZXRpbmdJZHM6IFJlYWRvbmx5U2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuXHJcbiAgLyoqIFdoZXRoZXIgdGhlIGhvc3QgaGFzIGRldGVybWluZWQgdGhlIHZpZXdwb3J0IGlzIGF0L2JlbG93IHRoZSBtb2JpbGUgYnJlYWtwb2ludC4gKi9cclxuICBASW5wdXQoKSBpc01vYmlsZVZpZXcgPSBmYWxzZTtcclxuXHJcbiAgLyoqIEVtaXRzIHdoZW4gdGhlIFwiVmlldyBBbGxcIiBsaW5rIGlzIGFjdGl2YXRlZCAoUmVxIDUuMikuICovXHJcbiAgQE91dHB1dCgpIHZpZXdBbGwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIC8qKiBCdWJibGVzIHRoZSBldmVudCBpZCB3aGVuIGEgY2FyZCdzIFwiVmlldyBFdmVudFwiIGJ1dHRvbiBpcyBhY3RpdmF0ZWQgKFJlcSA2LjQpLiAqL1xyXG4gIEBPdXRwdXQoKSB2aWV3RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgLyoqIEJ1YmJsZXMgdGhlIG1lZXRpbmcgaWQgd2hlbiBhIGNhcmQncyBtZWV0aW5nLW5hbWUgbGluayBpcyBhY3RpdmF0ZWQgKFJlcSA3LjQpLiAqL1xyXG4gIEBPdXRwdXQoKSBvcGVuTWVldGluZyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuICAvKiogQnViYmxlcyB0aGUgbWVldGluZyBpZCB3aGVuIGEgY2FyZCByZXF1ZXN0cyBsb2dnaW5nIGF0dGVuZGFuY2UgKFJlcSA3LjcpLiAqL1xyXG4gIEBPdXRwdXQoKSBsb2dBdHRlbmRhbmNlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gIC8qKiBCdWJibGVzIHRoZSBtZWV0aW5nIGlkIHdoZW4gYSBjYXJkIHJlcXVlc3RzIGxlYXZpbmcgdGhlIG1lZXRpbmcgKFJlcSA3LjgpLiAqL1xyXG4gIEBPdXRwdXQoKSBsZWF2ZU1lZXRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgLyoqIEVtaXRzIHRoZSByZXF1ZXN0ZWQgcGFnZSB0YWdnZWQgd2l0aCBpdHMgZXZlbnQgaWQgd2hlbiBhIGNhcmQgcGFnaW5hdGVzIChSZXEgNi45KS4gKi9cclxuICBAT3V0cHV0KCkgbWVldGluZ1BhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgZXZlbnRJZDogc3RyaW5nIH0gJiBQYWdlQ2hhbmdlPigpO1xyXG5cclxuICAvKiogRW1pdHMgdGhlIGV2ZW50IGlkICsgb25lLWJhc2VkIHBhZ2UgdG8gbGF6aWx5IGxvYWQgYW4gZXZlbnQncyBjaGlsZCBtZWV0aW5ncy4gKi9cclxuICBAT3V0cHV0KCkgbG9hZEV2ZW50TWVldGluZ3MgPSBuZXcgRXZlbnRFbWl0dGVyPHsgZXZlbnRJZDogc3RyaW5nOyBwYWdlOiBudW1iZXIgfT4oKTtcclxuXHJcbiAgLyoqIFdoZXRoZXIgdGhlIHNlY3Rpb24ncyBjYXJkIGxpc3QgaXMgY3VycmVudGx5IGV4cGFuZGVkOyBzdGFydHMgY29sbGFwc2VkLiAqL1xyXG4gIGlzRXhwYW5kZWQgPSBmYWxzZTtcclxuXHJcbiAgLyoqIFNlY3Rpb24tbGV2ZWwgcGFnZSBzaXplIOKAlCA1IGV2ZW50cy9tZWV0aW5ncyBwZXIgcGFnZSBwZXIgdGhlIGRlc2lnbi4gKi9cclxuICByZWFkb25seSBzZWN0aW9uUGFnZVNpemUgPSA1O1xyXG5cclxuICAvKiogVGhlIGN1cnJlbnQgemVyby1iYXNlZCBwYWdlIGluZGV4IG9mIHRoZSBzZWN0aW9uIGxpc3QuICovXHJcbiAgc2VjdGlvblBhZ2VJbmRleCA9IDA7XHJcblxyXG4gIC8qKiBUaGUgdG90YWwgbnVtYmVyIG9mIGV2ZW50cy9tZWV0aW5ncyBpbiB0aGUgc2VjdGlvbiAocGFnaW5hdG9yIGxlbmd0aCkuICovXHJcbiAgZ2V0IHRvdGFsSXRlbXMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmV2ZW50cz8ubGVuZ3RoID8/IDA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgc2xpY2Ugb2YgZXZlbnRzL21lZXRpbmdzIGZvciB0aGUgY3VycmVudCBzZWN0aW9uIHBhZ2UgKDUgcGVyIHBhZ2UpLFxyXG4gICAqIHVzZWQgYnkgdGhlIGNhcmQgYCpuZ0ZvcmAuXHJcbiAgICogQHJldHVybiB7VXBjb21pbmdFdmVudFtdfSBUaGUgZXZlbnRzIG9uIHRoZSBjdXJyZW50IHBhZ2UuXHJcbiAgICogQG1lbWJlcm9mIFVwY29taW5nTWVldGluZ3NFdmVudHNDb21wb25lbnRcclxuICAgKi9cclxuICBnZXQgcGFnZWRFdmVudHMoKTogVXBjb21pbmdFdmVudFtdIHtcclxuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5zZWN0aW9uUGFnZUluZGV4ICogdGhpcy5zZWN0aW9uUGFnZVNpemU7XHJcbiAgICByZXR1cm4gKHRoaXMuZXZlbnRzID8/IFtdKS5zbGljZShzdGFydCwgc3RhcnQgKyB0aGlzLnNlY3Rpb25QYWdlU2l6ZSk7XHJcbiAgfVxyXG5cclxuICAvKiogVGhlIG9uZS1iYXNlZCBpbmRleCBvZiB0aGUgZmlyc3QgaXRlbSBzaG93biBvbiB0aGUgY3VycmVudCBwYWdlLiAqL1xyXG4gIGdldCBzZWN0aW9uUmFuZ2VTdGFydCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudG90YWxJdGVtcyA9PT0gMFxyXG4gICAgICA/IDBcclxuICAgICAgOiB0aGlzLnNlY3Rpb25QYWdlSW5kZXggKiB0aGlzLnNlY3Rpb25QYWdlU2l6ZSArIDE7XHJcbiAgfVxyXG5cclxuICAvKiogVGhlIG9uZS1iYXNlZCBpbmRleCBvZiB0aGUgbGFzdCBpdGVtIHNob3duIG9uIHRoZSBjdXJyZW50IHBhZ2UuICovXHJcbiAgZ2V0IHNlY3Rpb25SYW5nZUVuZCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIE1hdGgubWluKFxyXG4gICAgICAodGhpcy5zZWN0aW9uUGFnZUluZGV4ICsgMSkgKiB0aGlzLnNlY3Rpb25QYWdlU2l6ZSxcclxuICAgICAgdGhpcy50b3RhbEl0ZW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIHNlY3Rpb24gcGFnaW5hdG9yIHJhbmdlIGxhYmVsIChlLmcuIFwiMS01IG9mIDIwIE1lZXRpbmdzICYgRXZlbnRzXCIpXHJcbiAgICogYnVpbHQgZnJvbSB0aGUgYGNvbnN0YW50cy5qc29uYCB0ZW1wbGF0ZS5cclxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgcmFuZ2UgbGFiZWwuXHJcbiAgICogQG1lbWJlcm9mIFVwY29taW5nTWVldGluZ3NFdmVudHNDb21wb25lbnRcclxuICAgKi9cclxuICBnZXQgc2VjdGlvblJhbmdlTGFiZWwoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHRlbXBsYXRlID1cclxuICAgICAgdGhpcy5jb25zdGFudHM/LnVwY29taW5nU2VjdGlvbj8ucGFnaW5hdG9yPy5yYW5nZVRlbXBsYXRlID8/XHJcbiAgICAgICd7c3RhcnR9LXtlbmR9IG9mIHt0b3RhbH0gTWVldGluZ3MgJiBFdmVudHMnO1xyXG4gICAgcmV0dXJuIHRlbXBsYXRlXHJcbiAgICAgIC5yZXBsYWNlKCd7c3RhcnR9JywgYCR7dGhpcy5zZWN0aW9uUmFuZ2VTdGFydH1gKVxyXG4gICAgICAucmVwbGFjZSgne2VuZH0nLCBgJHt0aGlzLnNlY3Rpb25SYW5nZUVuZH1gKVxyXG4gICAgICAucmVwbGFjZSgne3RvdGFsfScsIGAke3RoaXMudG90YWxJdGVtc31gKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgdGhlIHNlY3Rpb24gcGFnaW5hdG9yIGNoYW5nZSwgdXBkYXRpbmcgdGhlIGN1cnJlbnQgc2VjdGlvbiBwYWdlLlxyXG4gICAqIEBwYXJhbSB7UGFnZUV2ZW50fSBldmVudCAtIFRoZSBNYXRlcmlhbCBwYWdpbmF0b3IgcGFnZSBldmVudC5cclxuICAgKiBAcmV0dXJuIHt2b2lkfVxyXG4gICAqIEBtZW1iZXJvZiBVcGNvbWluZ01lZXRpbmdzRXZlbnRzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25TZWN0aW9uUGFnZUNoYW5nZShldmVudDogUGFnZUV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLnNlY3Rpb25QYWdlSW5kZXggPSBldmVudC5wYWdlSW5kZXg7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbGxvd3MgdGhlIGhvc3QvY29udGFpbmVyIHRvIG9wZW4gb3IgY2xvc2UgdGhlIHNlY3Rpb24gKGUuZy4gYSBcIkp1bXAgdG9cIlxyXG4gICAqIHNob3J0Y3V0IG9wZW5zIGl0KS4gV3JpdGluZyB0aGUgaW5wdXQgbWlycm9ycyB0aGUgdmFsdWUgb250byB0aGUgaW50ZXJuYWxcclxuICAgKiBleHBhbmQgc3RhdGUgd2hpbGUgbGVhdmluZyB0aGUgdXNlcidzIG93biB0b2dnbGUgZnJlZSB0byBjaGFuZ2UgaXQgYWZ0ZXIuXHJcbiAgICogQG1lbWJlcm9mIFVwY29taW5nTWVldGluZ3NFdmVudHNDb21wb25lbnRcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBleHBhbmRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc0V4cGFuZGVkID0gISF2YWx1ZTtcclxuICB9XHJcbiAgZ2V0IGV4cGFuZGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNFeHBhbmRlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXRzIHRoZSBuZXcgZXhwYW5kZWQgc3RhdGUgd2hlbmV2ZXIgdGhlIHVzZXIgdG9nZ2xlcyB0aGUgc2VjdGlvbiwgc28gYVxyXG4gICAqIHR3by13YXkgYFsoZXhwYW5kZWQpXWAgYmluZGluZyBrZWVwcyB0aGUgaG9zdCdzIGZsYWcgaW4gc3luYyAob3RoZXJ3aXNlIGFcclxuICAgKiBob3N0LW9wZW5lZCBzZWN0aW9uIHRoZSB1c2VyIHRoZW4gY29sbGFwc2VzIGxlYXZlcyB0aGUgaG9zdCBmbGFnIHN0YWxlLFxyXG4gICAqIG1ha2luZyBhIHJlcGVhdCBcIkp1bXAgdG9cIiBhIG5vLW9wKS5cclxuICAgKiBAbWVtYmVyb2YgVXBjb21pbmdNZWV0aW5nc0V2ZW50c0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBleHBhbmRlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogYHRyYWNrQnlgIGZvciB0aGUgZXZlbnQtZ3JvdXAtY2FyZCBgKm5nRm9yYCwga2V5ZWQgYnkgdGhlIHN0YWJsZSBldmVudCBpZCBzb1xyXG4gICAqIEFuZ3VsYXIgcmVuZGVycyBleGFjdGx5IG9uZSBjYXJkIHBlciBldmVudCBpbiBpbnB1dCBvcmRlciAoUmVxIDUuNSwgNS42LCAxNC40KS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBUaGUgaXRlcmF0aW9uIGluZGV4IChmYWxsYmFjayBrZXkpLlxyXG4gICAqIEBwYXJhbSB7VXBjb21pbmdFdmVudH0gZXZlbnQgLSBUaGUgZXZlbnQgZm9yIHRoaXMgY2FyZC5cclxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdGFibGUgdHJhY2sga2V5IChldmVudCBpZCkuXHJcbiAgICogQG1lbWJlcm9mIFVwY29taW5nTWVldGluZ3NFdmVudHNDb21wb25lbnRcclxuICAgKi9cclxuICB0cmFja0J5RXZlbnRJZChpbmRleDogbnVtYmVyLCBldmVudDogVXBjb21pbmdFdmVudCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gZXZlbnQ/LmV2ZW50SWQgPz8gYCR7aW5kZXh9YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRvZ2dsZXMgdGhlIHNlY3Rpb24ncyBleHBhbmRlZC9jb2xsYXBzZWQgc3RhdGUsIGludmVydGluZyB0aGUgY2FyZC1saXN0XHJcbiAgICogdmlzaWJpbGl0eSBhbmQgdGhlIGV4cG9zZWQgYGFyaWEtZXhwYW5kZWRgIHZhbHVlIChSZXEgNS40LCAxNC4zKS5cclxuICAgKiBAbWVtYmVyb2YgVXBjb21pbmdNZWV0aW5nc0V2ZW50c0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uVG9nZ2xlRXhwYW5kZWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzRXhwYW5kZWQgPSAhdGhpcy5pc0V4cGFuZGVkO1xyXG4gICAgdGhpcy5leHBhbmRlZENoYW5nZS5lbWl0KHRoaXMuaXNFeHBhbmRlZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIHRoZSBcIlZpZXcgQWxsXCIgbGluaywgZW1pdHRpbmcgdGhlIGB2aWV3QWxsYCBpbnRlbnQgdG8gdGhlIGhvc3QgKFJlcSA1LjIpLlxyXG4gICAqIEBtZW1iZXJvZiBVcGNvbWluZ01lZXRpbmdzRXZlbnRzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25WaWV3QWxsKCk6IHZvaWQge1xyXG4gICAgdGhpcy52aWV3QWxsLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEJ1YmJsZXMgYSBjYXJkJ3MgXCJWaWV3IEV2ZW50XCIgYWN0aXZhdGlvbiB1cHdhcmQgKFJlcSA2LjQpLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudElkIC0gVGhlIGV2ZW50IGlkIGVtaXR0ZWQgYnkgdGhlIGNhcmQuXHJcbiAgICogQG1lbWJlcm9mIFVwY29taW5nTWVldGluZ3NFdmVudHNDb21wb25lbnRcclxuICAgKi9cclxuICBvblZpZXdFdmVudChldmVudElkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMudmlld0V2ZW50LmVtaXQoZXZlbnRJZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBCdWJibGVzIGEgY2FyZCdzIG1lZXRpbmctbmFtZSBsaW5rIGFjdGl2YXRpb24gdXB3YXJkIChSZXEgNy40KS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVldGluZ0lkIC0gVGhlIG1lZXRpbmcgaWQgZW1pdHRlZCBieSB0aGUgY2FyZC5cclxuICAgKiBAbWVtYmVyb2YgVXBjb21pbmdNZWV0aW5nc0V2ZW50c0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uT3Blbk1lZXRpbmcobWVldGluZ0lkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMub3Blbk1lZXRpbmcuZW1pdChtZWV0aW5nSWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQnViYmxlcyBhIGNhcmQncyBsb2ctYXR0ZW5kYW5jZSByZXF1ZXN0IHVwd2FyZCAoUmVxIDcuNykuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lZXRpbmdJZCAtIFRoZSBtZWV0aW5nIGlkIGVtaXR0ZWQgYnkgdGhlIGNhcmQuXHJcbiAgICogQG1lbWJlcm9mIFVwY29taW5nTWVldGluZ3NFdmVudHNDb21wb25lbnRcclxuICAgKi9cclxuICBvbkxvZ0F0dGVuZGFuY2UobWVldGluZ0lkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMubG9nQXR0ZW5kYW5jZS5lbWl0KG1lZXRpbmdJZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBCdWJibGVzIGEgY2FyZCdzIGxlYXZlLW1lZXRpbmcgcmVxdWVzdCB1cHdhcmQgKFJlcSA3LjgpLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZWV0aW5nSWQgLSBUaGUgbWVldGluZyBpZCBlbWl0dGVkIGJ5IHRoZSBjYXJkLlxyXG4gICAqIEBtZW1iZXJvZiBVcGNvbWluZ01lZXRpbmdzRXZlbnRzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25MZWF2ZU1lZXRpbmcobWVldGluZ0lkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMubGVhdmVNZWV0aW5nLmVtaXQobWVldGluZ0lkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1hcHMgYSBjYXJkJ3MgYHBhZ2VDaGFuZ2VgIGludG8gYSBgbWVldGluZ1BhZ2VDaGFuZ2VgIHRhZ2dlZCB3aXRoIHRoZVxyXG4gICAqIG9yaWdpbmF0aW5nIGV2ZW50IGlkIHNvIHRoZSBob3N0IGNhbiBwYWdlIHRoZSBjb3JyZWN0IGV2ZW50IChSZXEgNi45KS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRJZCAtIFRoZSBpZCBvZiB0aGUgZXZlbnQgd2hvc2UgY2FyZCBwYWdpbmF0ZWQuXHJcbiAgICogQHBhcmFtIHtQYWdlQ2hhbmdlfSBwYWdlIC0gVGhlIHJlcXVlc3RlZCBwYWdlIGZyb20gdGhlIGNhcmQgcGFnaW5hdG9yLlxyXG4gICAqIEBtZW1iZXJvZiBVcGNvbWluZ01lZXRpbmdzRXZlbnRzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25NZWV0aW5nUGFnZUNoYW5nZShldmVudElkOiBzdHJpbmcsIHBhZ2U6IFBhZ2VDaGFuZ2UpOiB2b2lkIHtcclxuICAgIHRoaXMubWVldGluZ1BhZ2VDaGFuZ2UuZW1pdCh7IGV2ZW50SWQsIC4uLnBhZ2UgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBCdWJibGVzIGEgY2FyZCdzIGxhenkgY2hpbGQtbWVldGluZyBsb2FkIHJlcXVlc3QgdXB3YXJkLCB0YWdnZWQgd2l0aCB0aGVcclxuICAgKiBvcmlnaW5hdGluZyBldmVudCBpZCBzbyB0aGUgY29udGFpbmVyIGNhbiBmZXRjaCB0aGF0IGV2ZW50J3MgbWVldGluZ3MuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50SWQgLSBUaGUgZXZlbnQgd2hvc2UgbWVldGluZ3MgdG8gbG9hZC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gcGFnZSAtIFRoZSBvbmUtYmFzZWQgcGFnZSByZXF1ZXN0ZWQgYnkgdGhlIGNhcmQuXHJcbiAgICogQG1lbWJlcm9mIFVwY29taW5nTWVldGluZ3NFdmVudHNDb21wb25lbnRcclxuICAgKi9cclxuICBvbkxvYWRFdmVudE1lZXRpbmdzKGV2ZW50SWQ6IHN0cmluZywgcGFnZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmxvYWRFdmVudE1lZXRpbmdzLmVtaXQoeyBldmVudElkLCBwYWdlIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8c2VjdGlvblxyXG4gIGNsYXNzPVwiaWVlZXNhLXVwY29taW5nLW1lZXRpbmdzLWV2ZW50c1wiXHJcbiAgW2NsYXNzLmllZWVzYS11cGNvbWluZy1tZWV0aW5ncy1ldmVudHMtLW1vYmlsZV09XCJpc01vYmlsZVZpZXdcIlxyXG4+XHJcbiAgPGhlYWRlciBjbGFzcz1cImllZWVzYS11cGNvbWluZy1tZWV0aW5ncy1ldmVudHNfX2hlYWRlclwiPlxyXG4gICAgPCEtLSBTZWN0aW9uIHRpdGxlIChSZXEgNS4xKS4gLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaWVlZXNhLXVwY29taW5nLW1lZXRpbmdzLWV2ZW50c19faGVhZGluZ1wiPlxyXG4gICAgICA8aDIgY2xhc3M9XCJpZWVlc2EtdXBjb21pbmctbWVldGluZ3MtZXZlbnRzX190aXRsZVwiPlxyXG4gICAgICAgIHt7IGNvbnN0YW50cy51cGNvbWluZ1NlY3Rpb24udGl0bGUgfX1cclxuICAgICAgPC9oMj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gVmlldyBBbGwgbGluayArIEV4cGFuZC9Db2xsYXBzZSB0b2dnbGUgKFJlcSA1LjEsIDUuMiwgNS4zLCA1LjQsIDE0LjMpLiAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJpZWVlc2EtdXBjb21pbmctbWVldGluZ3MtZXZlbnRzX19hY3Rpb25zXCI+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBjbGFzcz1cImllZWVzYS11cGNvbWluZy1tZWV0aW5ncy1ldmVudHNfX3ZpZXctYWxsXCJcclxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImNvbnN0YW50cy51cGNvbWluZ1NlY3Rpb24uYXJpYUxhYmVsLnZpZXdBbGxcIlxyXG4gICAgICAgIChjbGljayk9XCJvblZpZXdBbGwoKVwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBjb25zdGFudHMudXBjb21pbmdTZWN0aW9uLnZpZXdBbGxMYWJlbCB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBjbGFzcz1cImllZWVzYS11cGNvbWluZy1tZWV0aW5ncy1ldmVudHNfX3RvZ2dsZVwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc0V4cGFuZGVkXCJcclxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImNvbnN0YW50cy51cGNvbWluZ1NlY3Rpb24uYXJpYUxhYmVsLnRvZ2dsZVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uVG9nZ2xlRXhwYW5kZWQoKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8c3Bhbj57eyBpc0V4cGFuZGVkID8gY29uc3RhbnRzLnVwY29taW5nU2VjdGlvbi5jb2xsYXBzZUxhYmVsIDogY29uc3RhbnRzLnVwY29taW5nU2VjdGlvbi5leHBhbmRMYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICA8aVxyXG4gICAgICAgICAgY2xhc3M9XCJmYS1zb2xpZFwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJpc0V4cGFuZGVkID8gJ2ZhLWNoZXZyb24tdXAnIDogJ2ZhLWNoZXZyb24tZG93bidcIlxyXG4gICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgICA+PC9pPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvaGVhZGVyPlxyXG5cclxuICA8IS0tIENhcmQgbGlzdCwgc2hvd24gb25seSB3aGlsZSBleHBhbmRlZCAoUmVxIDUuNCkuIC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJpc0V4cGFuZGVkXCIgY2xhc3M9XCJpZWVlc2EtdXBjb21pbmctbWVldGluZ3MtZXZlbnRzX19ib2R5XCI+XHJcbiAgICA8IS0tIExvYWRlciByZWdpb24gKFJlcSAxMy4xKS4gLS0+XHJcbiAgICA8ZGl2XHJcbiAgICAgICpuZ0lmPVwic2VjdGlvblN0YXRlID09PSBzZWN0aW9uU3RhdGVzLkxPQURJTkdcIlxyXG4gICAgICBjbGFzcz1cImllZWVzYS11cGNvbWluZy1tZWV0aW5ncy1ldmVudHNfX2xvYWRlclwiXHJcbiAgICA+XHJcbiAgICAgIDxpZWVlc2EtbG9hZGVyPjwvaWVlZXNhLWxvYWRlcj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gQ29udGVudCByZWdpb246IG9uZSBjYXJkIHBlciBldmVudCBwcmVzZXJ2aW5nIGlucHV0IG9yZGVyIChSZXEgNS41LCA1LjYsIDEzLjIpLiAtLT5cclxuICAgIDxkaXZcclxuICAgICAgKm5nSWY9XCJzZWN0aW9uU3RhdGUgPT09IHNlY3Rpb25TdGF0ZXMuTE9BREVEXCJcclxuICAgICAgY2xhc3M9XCJpZWVlc2EtdXBjb21pbmctbWVldGluZ3MtZXZlbnRzX19jYXJkc1wiXHJcbiAgICA+XHJcbiAgICAgIDxpZWVlc2EtZXZlbnQtZ3JvdXAtY2FyZFxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBldmVudCBvZiBwYWdlZEV2ZW50czsgdHJhY2tCeTogdHJhY2tCeUV2ZW50SWRcIlxyXG4gICAgICAgIFtldmVudF09XCJldmVudFwiXHJcbiAgICAgICAgW3Blcm1pc3Npb25zXT1cInBlcm1pc3Npb25zXCJcclxuICAgICAgICBbYXR0ZW5kYW5jZVN0YXRlc109XCJhdHRlbmRhbmNlU3RhdGVzXCJcclxuICAgICAgICBbaW5GbGlnaHRNZWV0aW5nSWRzXT1cImluRmxpZ2h0TWVldGluZ0lkc1wiXHJcbiAgICAgICAgW2lzTW9iaWxlVmlld109XCJpc01vYmlsZVZpZXdcIlxyXG4gICAgICAgICh2aWV3RXZlbnQpPVwib25WaWV3RXZlbnQoJGV2ZW50KVwiXHJcbiAgICAgICAgKG9wZW5NZWV0aW5nKT1cIm9uT3Blbk1lZXRpbmcoJGV2ZW50KVwiXHJcbiAgICAgICAgKGxvZ0F0dGVuZGFuY2UpPVwib25Mb2dBdHRlbmRhbmNlKCRldmVudClcIlxyXG4gICAgICAgIChsZWF2ZU1lZXRpbmcpPVwib25MZWF2ZU1lZXRpbmcoJGV2ZW50KVwiXHJcbiAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25NZWV0aW5nUGFnZUNoYW5nZShldmVudC5ldmVudElkLCAkZXZlbnQpXCJcclxuICAgICAgICAobG9hZE1lZXRpbmdzKT1cIm9uTG9hZEV2ZW50TWVldGluZ3MoZXZlbnQuZXZlbnRJZCwgJGV2ZW50KVwiXHJcbiAgICAgID48L2llZWVzYS1ldmVudC1ncm91cC1jYXJkPlxyXG5cclxuICAgICAgPCEtLSBTZWN0aW9uLWxldmVsIHBhZ2luYXRvcjogNSBldmVudHMvbWVldGluZ3MgcGVyIHBhZ2UgKFJlcSAzLngsIGRlc2lnbikuIC0tPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgKm5nSWY9XCJ0b3RhbEl0ZW1zID4gc2VjdGlvblBhZ2VTaXplXCJcclxuICAgICAgICBjbGFzcz1cImllZWVzYS11cGNvbWluZy1tZWV0aW5ncy1ldmVudHNfX3BhZ2luYXRvclwiXHJcbiAgICAgID5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImllZWVzYS11cGNvbWluZy1tZWV0aW5ncy1ldmVudHNfX3BhZ2luYXRvci1yYW5nZVwiPlxyXG4gICAgICAgICAge3sgc2VjdGlvblJhbmdlTGFiZWwgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPG1hdC1wYWdpbmF0b3JcclxuICAgICAgICAgIGNsYXNzPVwiaWVlZXNhLXVwY29taW5nLW1lZXRpbmdzLWV2ZW50c19fcGFnaW5hdG9yLWNvbnRyb2xcIlxyXG4gICAgICAgICAgW3BhZ2VJbmRleF09XCJzZWN0aW9uUGFnZUluZGV4XCJcclxuICAgICAgICAgIFtwYWdlU2l6ZV09XCJzZWN0aW9uUGFnZVNpemVcIlxyXG4gICAgICAgICAgW2xlbmd0aF09XCJ0b3RhbEl0ZW1zXCJcclxuICAgICAgICAgIFtoaWRlUGFnZVNpemVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAocGFnZSk9XCJvblNlY3Rpb25QYWdlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgID48L21hdC1wYWdpbmF0b3I+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBFbXB0eS1zdGF0ZSByZWdpb24gKFJlcSAxMy4zKS4gLS0+XHJcbiAgICA8cFxyXG4gICAgICAqbmdJZj1cInNlY3Rpb25TdGF0ZSA9PT0gc2VjdGlvblN0YXRlcy5FTVBUWVwiXHJcbiAgICAgIGNsYXNzPVwiaWVlZXNhLXVwY29taW5nLW1lZXRpbmdzLWV2ZW50c19fZW1wdHlcIlxyXG4gICAgPlxyXG4gICAgICB7eyBjb25zdGFudHMudXBjb21pbmdTZWN0aW9uLmVtcHR5TWVzc2FnZSB9fVxyXG4gICAgPC9wPlxyXG5cclxuICAgIDwhLS0gRXJyb3IgcmVnaW9uIChSZXEgMTMuNSkuIC0tPlxyXG4gICAgPHBcclxuICAgICAgKm5nSWY9XCJzZWN0aW9uU3RhdGUgPT09IHNlY3Rpb25TdGF0ZXMuRVJST1JcIlxyXG4gICAgICBjbGFzcz1cImllZWVzYS11cGNvbWluZy1tZWV0aW5ncy1ldmVudHNfX2Vycm9yXCJcclxuICAgICAgcm9sZT1cImFsZXJ0XCJcclxuICAgID5cclxuICAgICAge3sgY29uc3RhbnRzLnVwY29taW5nU2VjdGlvbi5lcnJvck1lc3NhZ2UgfX1cclxuICAgIDwvcD5cclxuICA8L2Rpdj5cclxuPC9zZWN0aW9uPlxyXG4iXX0=
@@ -0,0 +1,151 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, EventEmitter, Input, Output, ViewEncapsulation, } from '@angular/core';
3
+ import * as constants from '../../assets/constants.json';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ /**
7
+ * Identifies which dashboard section a "Jump to" shortcut targets, emitted via
8
+ * {@link DashboardWelcomeHeaderComponent.shortcutSelected} for the host/container
9
+ * to scroll to or navigate.
10
+ */
11
+ // eslint-disable-next-line no-unused-vars
12
+ export var DashboardJumpTarget;
13
+ (function (DashboardJumpTarget) {
14
+ // eslint-disable-next-line no-unused-vars
15
+ DashboardJumpTarget["MEETINGS"] = "MEETINGS";
16
+ // eslint-disable-next-line no-unused-vars
17
+ DashboardJumpTarget["GROUPS"] = "GROUPS";
18
+ })(DashboardJumpTarget || (DashboardJumpTarget = {}));
19
+ /**
20
+ * Welcome_Header renders the personalized greeting and the "Jump to" shortcut
21
+ * control at the top of the dashboard.
22
+ *
23
+ * The greeting is composed from the greeting label in `constants.json` and the
24
+ * supplied `userName`, falling back to the configured fallback greeting when the
25
+ * name is empty or undefined. The "Jump to" control shows one circular icon per
26
+ * dashboard section (Upcoming Meetings & Events, Your Groups); hovering or
27
+ * focusing an icon expands it into a pill with the section label and a count
28
+ * badge (the counts are supplied by the host via `meetingsCount` /
29
+ * `groupsCount`). Activating a shortcut emits {@link shortcutSelected} with the
30
+ * target section for the host to act on. Purely presentational — no API work.
31
+ * @export
32
+ * @class DashboardWelcomeHeaderComponent
33
+ */
34
+ export class DashboardWelcomeHeaderComponent {
35
+ constructor() {
36
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
37
+ this.constants = constants;
38
+ /** User-facing strings sourced from `constants.json`. */
39
+ this.texts = this.constants?.welcomeHeader;
40
+ /** Enum reference for template comparisons. */
41
+ this.jumpTarget = DashboardJumpTarget;
42
+ this.userNameValue = '';
43
+ this.meetingsCountValue = 0;
44
+ this.groupsCountValue = 0;
45
+ /** Emits the selected "Jump to" target for the host to act on. */
46
+ this.shortcutSelected = new EventEmitter();
47
+ /** The jump shortcuts rendered in the control, rebuilt when counts change. */
48
+ this.shortcuts = this.buildShortcutList();
49
+ }
50
+ /**
51
+ * The signed-in user's display name. Drives the personalized greeting; when
52
+ * empty or undefined the greeting falls back to the configured fallback text.
53
+ * @memberof DashboardWelcomeHeaderComponent
54
+ */
55
+ set userName(value) {
56
+ this.userNameValue = value ?? '';
57
+ }
58
+ get userName() {
59
+ return this.userNameValue;
60
+ }
61
+ /** Count shown in the Upcoming Meetings & Events shortcut badge. */
62
+ set meetingsCount(value) {
63
+ this.meetingsCountValue = value ?? 0;
64
+ this.buildShortcuts();
65
+ }
66
+ get meetingsCount() {
67
+ return this.meetingsCountValue;
68
+ }
69
+ /** Count shown in the Your Groups shortcut badge. */
70
+ set groupsCount(value) {
71
+ this.groupsCountValue = value ?? 0;
72
+ this.buildShortcuts();
73
+ }
74
+ get groupsCount() {
75
+ return this.groupsCountValue;
76
+ }
77
+ /**
78
+ * The personalized greeting: the greeting label plus the user's name when
79
+ * present, otherwise the configured fallback greeting.
80
+ * @readonly
81
+ * @memberof DashboardWelcomeHeaderComponent
82
+ */
83
+ get greeting() {
84
+ const name = this.userName?.trim();
85
+ return name
86
+ ? `${this.texts?.greeting}${name}!`
87
+ : `${this.texts?.fallbackGreeting}!`;
88
+ }
89
+ /**
90
+ * Emits the chosen shortcut's target for the host to scroll/navigate to.
91
+ * @param {DashboardJumpTarget} target - The selected section.
92
+ * @memberof DashboardWelcomeHeaderComponent
93
+ */
94
+ onShortcutClick(target) {
95
+ this.shortcutSelected.emit(target);
96
+ }
97
+ /**
98
+ * TrackBy for the shortcut list.
99
+ * @param {number} _index
100
+ * @param {JumpShortcut} shortcut
101
+ * @return {string}
102
+ * @memberof DashboardWelcomeHeaderComponent
103
+ */
104
+ trackByTarget(_index, shortcut) {
105
+ return shortcut.target;
106
+ }
107
+ /** Rebuilds the shortcut list so the template reflects the latest counts. */
108
+ buildShortcuts() {
109
+ this.shortcuts = this.buildShortcutList();
110
+ }
111
+ /**
112
+ * Builds the shortcut view models from `constants.json` and the current
113
+ * counts.
114
+ * @return {JumpShortcut[]}
115
+ * @memberof DashboardWelcomeHeaderComponent
116
+ */
117
+ buildShortcutList() {
118
+ const shortcutTexts = this.constants?.welcomeHeader?.shortcuts;
119
+ return [
120
+ {
121
+ target: DashboardJumpTarget.MEETINGS,
122
+ label: shortcutTexts?.meetings?.label,
123
+ iconUrl: shortcutTexts?.meetings?.iconUrl,
124
+ ariaLabel: shortcutTexts?.meetings?.ariaLabel,
125
+ count: this.meetingsCountValue,
126
+ },
127
+ {
128
+ target: DashboardJumpTarget.GROUPS,
129
+ label: shortcutTexts?.groups?.label,
130
+ iconUrl: shortcutTexts?.groups?.iconUrl,
131
+ ariaLabel: shortcutTexts?.groups?.ariaLabel,
132
+ count: this.groupsCountValue,
133
+ },
134
+ ];
135
+ }
136
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DashboardWelcomeHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
137
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DashboardWelcomeHeaderComponent, isStandalone: true, selector: "ieeesa-dashboard-welcome-header", inputs: { userName: "userName", meetingsCount: "meetingsCount", groupsCount: "groupsCount" }, outputs: { shortcutSelected: "shortcutSelected" }, ngImport: i0, template: "<div class=\"ieeesa-dashboard-welcome-header\">\r\n <!-- Greeting + helper line -->\r\n <div class=\"ieeesa-dashboard-welcome-header__intro\">\r\n <h1 class=\"ieeesa-dashboard-welcome-header__greeting m-0\">\r\n {{ greeting }}\r\n </h1>\r\n <p class=\"ieeesa-dashboard-welcome-header__helper-text m-0\">\r\n {{ texts?.helperText }}\r\n </p>\r\n </div>\r\n\r\n <!-- \"Jump to\" shortcuts: each icon expands on hover/focus into a pill with\r\n the section label and its count badge. -->\r\n <div class=\"ieeesa-dashboard-welcome-header__jump-to\">\r\n <span class=\"ieeesa-dashboard-welcome-header__jump-to-label\">\r\n {{ texts?.jumpToLabel }}\r\n </span>\r\n\r\n <button\r\n *ngFor=\"let shortcut of shortcuts; trackBy: trackByTarget\"\r\n type=\"button\"\r\n class=\"ieeesa-dashboard-welcome-header__shortcut\"\r\n [attr.aria-label]=\"shortcut.ariaLabel + ' (' + shortcut.count + ')'\"\r\n (click)=\"onShortcutClick(shortcut.target)\"\r\n >\r\n <img\r\n class=\"ieeesa-dashboard-welcome-header__shortcut-icon\"\r\n [src]=\"shortcut.iconUrl\"\r\n alt=\"\"\r\n aria-hidden=\"true\"\r\n />\r\n <span class=\"ieeesa-dashboard-welcome-header__shortcut-label\">\r\n {{ shortcut.label }}\r\n </span>\r\n <span class=\"ieeesa-dashboard-welcome-header__shortcut-count\">\r\n {{ shortcut.count }}\r\n </span>\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.ieeesa-dashboard-welcome-header{display:flex;align-items:center;justify-content:flex-start;gap:10%;flex-wrap:wrap}.ieeesa-dashboard-welcome-header__intro{display:flex;flex-direction:column;gap:4px}.ieeesa-dashboard-welcome-header__greeting{font-family:Calibri Bold;font-weight:700;font-style:normal;font-size:18px;line-height:27px;letter-spacing:0px;color:#111}.ieeesa-dashboard-welcome-header__helper-text{font-family:Calibri Regular;font-weight:400;font-style:normal;font-size:12px;line-height:16.5px;letter-spacing:0px;color:#6a7282}.ieeesa-dashboard-welcome-header__jump-to{display:inline-flex;align-items:center;gap:20px;min-width:228px;width:-moz-fit-content;width:fit-content;height:60px;padding-left:18px;padding-right:18px;background-color:#fff;border-radius:10px;box-shadow:0 1px 2px #0003}.ieeesa-dashboard-welcome-header__jump-to-label{font-family:Calibri Bold;font-weight:700;font-size:.8125rem;letter-spacing:.03125em;text-transform:uppercase;color:#333436;white-space:nowrap}.ieeesa-dashboard-welcome-header__shortcut{display:inline-flex;align-items:center;justify-content:center;gap:0;width:40px;height:40px;padding:0;border:1.5px solid #D1D5DC;border-radius:20px;background-color:#fff;color:#00629b;cursor:pointer;overflow:hidden;will-change:width,padding;transition:width .32s cubic-bezier(.22,1,.36,1),padding .32s cubic-bezier(.22,1,.36,1),gap .32s cubic-bezier(.22,1,.36,1),background-color .25s ease,border-color .25s ease,box-shadow .25s ease}.ieeesa-dashboard-welcome-header__shortcut:hover,.ieeesa-dashboard-welcome-header__shortcut:focus-visible{width:auto;gap:8px;padding:0 14px;border-color:#00629b;background-color:#eaf3f9;box-shadow:0 1px 2px #0003;outline:none}.ieeesa-dashboard-welcome-header__shortcut-icon{flex:0 0 auto;width:20px;height:20px;display:block}.ieeesa-dashboard-welcome-header__shortcut-label{max-width:0;opacity:0;overflow:hidden;white-space:nowrap;font-family:Calibri Bold;font-weight:700;font-size:.875rem;color:#333436;transition:max-width .32s cubic-bezier(.22,1,.36,1),opacity .18s ease}.ieeesa-dashboard-welcome-header__shortcut-count{display:inline-flex;align-items:center;justify-content:center;max-width:0;padding:0;opacity:0;overflow:hidden;border-radius:12px;background-color:#eaf3f9;color:#00629b;font-family:Calibri Bold;font-weight:700;font-size:.75rem;white-space:nowrap;transition:max-width .32s cubic-bezier(.22,1,.36,1),opacity .18s ease,padding .2s ease}.ieeesa-dashboard-welcome-header__shortcut:hover .ieeesa-dashboard-welcome-header__shortcut-label,.ieeesa-dashboard-welcome-header__shortcut:focus-visible .ieeesa-dashboard-welcome-header__shortcut-label{max-width:240px;opacity:1;transition:max-width .32s cubic-bezier(.22,1,.36,1),opacity .22s ease .1s}.ieeesa-dashboard-welcome-header__shortcut:hover .ieeesa-dashboard-welcome-header__shortcut-count,.ieeesa-dashboard-welcome-header__shortcut:focus-visible .ieeesa-dashboard-welcome-header__shortcut-count{max-width:48px;padding:2px 10px;opacity:1;transition:max-width .32s cubic-bezier(.22,1,.36,1),opacity .22s ease .14s,padding .2s ease}@media (max-width: 767px){.ieeesa-dashboard-welcome-header{align-items:flex-start}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], encapsulation: i0.ViewEncapsulation.None }); }
138
+ }
139
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DashboardWelcomeHeaderComponent, decorators: [{
140
+ type: Component,
141
+ args: [{ selector: 'ieeesa-dashboard-welcome-header', standalone: true, imports: [CommonModule], encapsulation: ViewEncapsulation.None, template: "<div class=\"ieeesa-dashboard-welcome-header\">\r\n <!-- Greeting + helper line -->\r\n <div class=\"ieeesa-dashboard-welcome-header__intro\">\r\n <h1 class=\"ieeesa-dashboard-welcome-header__greeting m-0\">\r\n {{ greeting }}\r\n </h1>\r\n <p class=\"ieeesa-dashboard-welcome-header__helper-text m-0\">\r\n {{ texts?.helperText }}\r\n </p>\r\n </div>\r\n\r\n <!-- \"Jump to\" shortcuts: each icon expands on hover/focus into a pill with\r\n the section label and its count badge. -->\r\n <div class=\"ieeesa-dashboard-welcome-header__jump-to\">\r\n <span class=\"ieeesa-dashboard-welcome-header__jump-to-label\">\r\n {{ texts?.jumpToLabel }}\r\n </span>\r\n\r\n <button\r\n *ngFor=\"let shortcut of shortcuts; trackBy: trackByTarget\"\r\n type=\"button\"\r\n class=\"ieeesa-dashboard-welcome-header__shortcut\"\r\n [attr.aria-label]=\"shortcut.ariaLabel + ' (' + shortcut.count + ')'\"\r\n (click)=\"onShortcutClick(shortcut.target)\"\r\n >\r\n <img\r\n class=\"ieeesa-dashboard-welcome-header__shortcut-icon\"\r\n [src]=\"shortcut.iconUrl\"\r\n alt=\"\"\r\n aria-hidden=\"true\"\r\n />\r\n <span class=\"ieeesa-dashboard-welcome-header__shortcut-label\">\r\n {{ shortcut.label }}\r\n </span>\r\n <span class=\"ieeesa-dashboard-welcome-header__shortcut-count\">\r\n {{ shortcut.count }}\r\n </span>\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.ieeesa-dashboard-welcome-header{display:flex;align-items:center;justify-content:flex-start;gap:10%;flex-wrap:wrap}.ieeesa-dashboard-welcome-header__intro{display:flex;flex-direction:column;gap:4px}.ieeesa-dashboard-welcome-header__greeting{font-family:Calibri Bold;font-weight:700;font-style:normal;font-size:18px;line-height:27px;letter-spacing:0px;color:#111}.ieeesa-dashboard-welcome-header__helper-text{font-family:Calibri Regular;font-weight:400;font-style:normal;font-size:12px;line-height:16.5px;letter-spacing:0px;color:#6a7282}.ieeesa-dashboard-welcome-header__jump-to{display:inline-flex;align-items:center;gap:20px;min-width:228px;width:-moz-fit-content;width:fit-content;height:60px;padding-left:18px;padding-right:18px;background-color:#fff;border-radius:10px;box-shadow:0 1px 2px #0003}.ieeesa-dashboard-welcome-header__jump-to-label{font-family:Calibri Bold;font-weight:700;font-size:.8125rem;letter-spacing:.03125em;text-transform:uppercase;color:#333436;white-space:nowrap}.ieeesa-dashboard-welcome-header__shortcut{display:inline-flex;align-items:center;justify-content:center;gap:0;width:40px;height:40px;padding:0;border:1.5px solid #D1D5DC;border-radius:20px;background-color:#fff;color:#00629b;cursor:pointer;overflow:hidden;will-change:width,padding;transition:width .32s cubic-bezier(.22,1,.36,1),padding .32s cubic-bezier(.22,1,.36,1),gap .32s cubic-bezier(.22,1,.36,1),background-color .25s ease,border-color .25s ease,box-shadow .25s ease}.ieeesa-dashboard-welcome-header__shortcut:hover,.ieeesa-dashboard-welcome-header__shortcut:focus-visible{width:auto;gap:8px;padding:0 14px;border-color:#00629b;background-color:#eaf3f9;box-shadow:0 1px 2px #0003;outline:none}.ieeesa-dashboard-welcome-header__shortcut-icon{flex:0 0 auto;width:20px;height:20px;display:block}.ieeesa-dashboard-welcome-header__shortcut-label{max-width:0;opacity:0;overflow:hidden;white-space:nowrap;font-family:Calibri Bold;font-weight:700;font-size:.875rem;color:#333436;transition:max-width .32s cubic-bezier(.22,1,.36,1),opacity .18s ease}.ieeesa-dashboard-welcome-header__shortcut-count{display:inline-flex;align-items:center;justify-content:center;max-width:0;padding:0;opacity:0;overflow:hidden;border-radius:12px;background-color:#eaf3f9;color:#00629b;font-family:Calibri Bold;font-weight:700;font-size:.75rem;white-space:nowrap;transition:max-width .32s cubic-bezier(.22,1,.36,1),opacity .18s ease,padding .2s ease}.ieeesa-dashboard-welcome-header__shortcut:hover .ieeesa-dashboard-welcome-header__shortcut-label,.ieeesa-dashboard-welcome-header__shortcut:focus-visible .ieeesa-dashboard-welcome-header__shortcut-label{max-width:240px;opacity:1;transition:max-width .32s cubic-bezier(.22,1,.36,1),opacity .22s ease .1s}.ieeesa-dashboard-welcome-header__shortcut:hover .ieeesa-dashboard-welcome-header__shortcut-count,.ieeesa-dashboard-welcome-header__shortcut:focus-visible .ieeesa-dashboard-welcome-header__shortcut-count{max-width:48px;padding:2px 10px;opacity:1;transition:max-width .32s cubic-bezier(.22,1,.36,1),opacity .22s ease .14s,padding .2s ease}@media (max-width: 767px){.ieeesa-dashboard-welcome-header{align-items:flex-start}}\n"] }]
142
+ }], propDecorators: { userName: [{
143
+ type: Input
144
+ }], meetingsCount: [{
145
+ type: Input
146
+ }], groupsCount: [{
147
+ type: Input
148
+ }], shortcutSelected: [{
149
+ type: Output
150
+ }] } });
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLXdlbGNvbWUtaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rhc2hib2FyZC9zcmMvbGliL2NvbXBvbmVudHMvd2VsY29tZS1oZWFkZXIvZGFzaGJvYXJkLXdlbGNvbWUtaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rhc2hib2FyZC9zcmMvbGliL2NvbXBvbmVudHMvd2VsY29tZS1oZWFkZXIvZGFzaGJvYXJkLXdlbGNvbWUtaGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssU0FBUyxNQUFNLDZCQUE2QixDQUFDOzs7QUFFekQ7Ozs7R0FJRztBQUNILDBDQUEwQztBQUMxQyxNQUFNLENBQU4sSUFBWSxtQkFLWDtBQUxELFdBQVksbUJBQW1CO0lBQzdCLDBDQUEwQztJQUMxQyw0Q0FBcUIsQ0FBQTtJQUNyQiwwQ0FBMEM7SUFDMUMsd0NBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUxXLG1CQUFtQixLQUFuQixtQkFBbUIsUUFLOUI7QUFlRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQVVILE1BQU0sT0FBTywrQkFBK0I7SUFUNUM7UUFVRSw4REFBOEQ7UUFDN0MsY0FBUyxHQUFRLFNBQVMsQ0FBQztRQUM1Qyx5REFBeUQ7UUFDaEQsVUFBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDO1FBRS9DLCtDQUErQztRQUN0QyxlQUFVLEdBQUcsbUJBQW1CLENBQUM7UUFFbEMsa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFjbkIsdUJB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RUUsaUNBQWlDLGNBQy9CLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyxpQkFHUixpQkFBaUIsQ0FBQyxJQUFJOzhCQWtCakMsUUFBUTtzQkFEWCxLQUFLO2dCQVdGLGFBQWE7c0JBRGhCLEtBQUs7Z0JBWUYsV0FBVztzQkFEZCxLQUFLO2dCQVVJLGdCQUFnQjtzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCAqIGFzIGNvbnN0YW50cyBmcm9tICcuLi8uLi9hc3NldHMvY29uc3RhbnRzLmpzb24nO1xyXG5cclxuLyoqXHJcbiAqIElkZW50aWZpZXMgd2hpY2ggZGFzaGJvYXJkIHNlY3Rpb24gYSBcIkp1bXAgdG9cIiBzaG9ydGN1dCB0YXJnZXRzLCBlbWl0dGVkIHZpYVxyXG4gKiB7QGxpbmsgRGFzaGJvYXJkV2VsY29tZUhlYWRlckNvbXBvbmVudC5zaG9ydGN1dFNlbGVjdGVkfSBmb3IgdGhlIGhvc3QvY29udGFpbmVyXHJcbiAqIHRvIHNjcm9sbCB0byBvciBuYXZpZ2F0ZS5cclxuICovXHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG5leHBvcnQgZW51bSBEYXNoYm9hcmRKdW1wVGFyZ2V0IHtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICBNRUVUSU5HUyA9ICdNRUVUSU5HUycsXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgR1JPVVBTID0gJ0dST1VQUycsXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIHNpbmdsZSBcIkp1bXAgdG9cIiBzaG9ydGN1dCByZW5kZXJlZCBpbiB0aGUgd2VsY29tZSBoZWFkZXI6IGEgY2lyY3VsYXIgaWNvblxyXG4gKiB0aGF0IGV4cGFuZHMgb24gaG92ZXIvZm9jdXMgaW50byBhIHBpbGwgc2hvd2luZyB0aGUgc2VjdGlvbiBsYWJlbCBhbmQgaXRzXHJcbiAqIGNvdW50IGJhZGdlLlxyXG4gKi9cclxuaW50ZXJmYWNlIEp1bXBTaG9ydGN1dCB7XHJcbiAgdGFyZ2V0OiBEYXNoYm9hcmRKdW1wVGFyZ2V0O1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgaWNvblVybDogc3RyaW5nO1xyXG4gIGFyaWFMYWJlbDogc3RyaW5nO1xyXG4gIGNvdW50OiBudW1iZXI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBXZWxjb21lX0hlYWRlciByZW5kZXJzIHRoZSBwZXJzb25hbGl6ZWQgZ3JlZXRpbmcgYW5kIHRoZSBcIkp1bXAgdG9cIiBzaG9ydGN1dFxyXG4gKiBjb250cm9sIGF0IHRoZSB0b3Agb2YgdGhlIGRhc2hib2FyZC5cclxuICpcclxuICogVGhlIGdyZWV0aW5nIGlzIGNvbXBvc2VkIGZyb20gdGhlIGdyZWV0aW5nIGxhYmVsIGluIGBjb25zdGFudHMuanNvbmAgYW5kIHRoZVxyXG4gKiBzdXBwbGllZCBgdXNlck5hbWVgLCBmYWxsaW5nIGJhY2sgdG8gdGhlIGNvbmZpZ3VyZWQgZmFsbGJhY2sgZ3JlZXRpbmcgd2hlbiB0aGVcclxuICogbmFtZSBpcyBlbXB0eSBvciB1bmRlZmluZWQuIFRoZSBcIkp1bXAgdG9cIiBjb250cm9sIHNob3dzIG9uZSBjaXJjdWxhciBpY29uIHBlclxyXG4gKiBkYXNoYm9hcmQgc2VjdGlvbiAoVXBjb21pbmcgTWVldGluZ3MgJiBFdmVudHMsIFlvdXIgR3JvdXBzKTsgaG92ZXJpbmcgb3JcclxuICogZm9jdXNpbmcgYW4gaWNvbiBleHBhbmRzIGl0IGludG8gYSBwaWxsIHdpdGggdGhlIHNlY3Rpb24gbGFiZWwgYW5kIGEgY291bnRcclxuICogYmFkZ2UgKHRoZSBjb3VudHMgYXJlIHN1cHBsaWVkIGJ5IHRoZSBob3N0IHZpYSBgbWVldGluZ3NDb3VudGAgL1xyXG4gKiBgZ3JvdXBzQ291bnRgKS4gQWN0aXZhdGluZyBhIHNob3J0Y3V0IGVtaXRzIHtAbGluayBzaG9ydGN1dFNlbGVjdGVkfSB3aXRoIHRoZVxyXG4gKiB0YXJnZXQgc2VjdGlvbiBmb3IgdGhlIGhvc3QgdG8gYWN0IG9uLiBQdXJlbHkgcHJlc2VudGF0aW9uYWwg4oCUIG5vIEFQSSB3b3JrLlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBEYXNoYm9hcmRXZWxjb21lSGVhZGVyQ29tcG9uZW50XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxyXG4gIHNlbGVjdG9yOiAnaWVlZXNhLWRhc2hib2FyZC13ZWxjb21lLWhlYWRlcicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGFzaGJvYXJkLXdlbGNvbWUtaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kYXNoYm9hcmQtd2VsY29tZS1oZWFkZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGFzaGJvYXJkV2VsY29tZUhlYWRlckNvbXBvbmVudCB7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBwcml2YXRlIHJlYWRvbmx5IGNvbnN0YW50czogYW55ID0gY29uc3RhbnRzO1xyXG4gIC8qKiBVc2VyLWZhY2luZyBzdHJpbmdzIHNvdXJjZWQgZnJvbSBgY29uc3RhbnRzLmpzb25gLiAqL1xyXG4gIHJlYWRvbmx5IHRleHRzID0gdGhpcy5jb25zdGFudHM/LndlbGNvbWVIZWFkZXI7XHJcblxyXG4gIC8qKiBFbnVtIHJlZmVyZW5jZSBmb3IgdGVtcGxhdGUgY29tcGFyaXNvbnMuICovXHJcbiAgcmVhZG9ubHkganVtcFRhcmdldCA9IERhc2hib2FyZEp1bXBUYXJnZXQ7XHJcblxyXG4gIHByaXZhdGUgdXNlck5hbWVWYWx1ZSA9ICcnO1xyXG4gIC8qKlxyXG4gICAqIFRoZSBzaWduZWQtaW4gdXNlcidzIGRpc3BsYXkgbmFtZS4gRHJpdmVzIHRoZSBwZXJzb25hbGl6ZWQgZ3JlZXRpbmc7IHdoZW5cclxuICAgKiBlbXB0eSBvciB1bmRlZmluZWQgdGhlIGdyZWV0aW5nIGZhbGxzIGJhY2sgdG8gdGhlIGNvbmZpZ3VyZWQgZmFsbGJhY2sgdGV4dC5cclxuICAgKiBAbWVtYmVyb2YgRGFzaGJvYXJkV2VsY29tZUhlYWRlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHVzZXJOYW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMudXNlck5hbWVWYWx1ZSA9IHZhbHVlID8/ICcnO1xyXG4gIH1cclxuICBnZXQgdXNlck5hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnVzZXJOYW1lVmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1lZXRpbmdzQ291bnRWYWx1ZSA9IDA7XHJcbiAgLyoqIENvdW50IHNob3duIGluIHRoZSBVcGNvbWluZyBNZWV0aW5ncyAmIEV2ZW50cyBzaG9ydGN1dCBiYWRnZS4gKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBtZWV0aW5nc0NvdW50KHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMubWVldGluZ3NDb3VudFZhbHVlID0gdmFsdWUgPz8gMDtcclxuICAgIHRoaXMuYnVpbGRTaG9ydGN1dHMoKTtcclxuICB9XHJcbiAgZ2V0IG1lZXRpbmdzQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLm1lZXRpbmdzQ291bnRWYWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ3JvdXBzQ291bnRWYWx1ZSA9IDA7XHJcbiAgLyoqIENvdW50IHNob3duIGluIHRoZSBZb3VyIEdyb3VwcyBzaG9ydGN1dCBiYWRnZS4gKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBncm91cHNDb3VudCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmdyb3Vwc0NvdW50VmFsdWUgPSB2YWx1ZSA/PyAwO1xyXG4gICAgdGhpcy5idWlsZFNob3J0Y3V0cygpO1xyXG4gIH1cclxuICBnZXQgZ3JvdXBzQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmdyb3Vwc0NvdW50VmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKiogRW1pdHMgdGhlIHNlbGVjdGVkIFwiSnVtcCB0b1wiIHRhcmdldCBmb3IgdGhlIGhvc3QgdG8gYWN0IG9uLiAqL1xyXG4gIEBPdXRwdXQoKSBzaG9ydGN1dFNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxEYXNoYm9hcmRKdW1wVGFyZ2V0PigpO1xyXG5cclxuICAvKiogVGhlIGp1bXAgc2hvcnRjdXRzIHJlbmRlcmVkIGluIHRoZSBjb250cm9sLCByZWJ1aWx0IHdoZW4gY291bnRzIGNoYW5nZS4gKi9cclxuICBzaG9ydGN1dHM6IEp1bXBTaG9ydGN1dFtdID0gdGhpcy5idWlsZFNob3J0Y3V0TGlzdCgpO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgcGVyc29uYWxpemVkIGdyZWV0aW5nOiB0aGUgZ3JlZXRpbmcgbGFiZWwgcGx1cyB0aGUgdXNlcidzIG5hbWUgd2hlblxyXG4gICAqIHByZXNlbnQsIG90aGVyd2lzZSB0aGUgY29uZmlndXJlZCBmYWxsYmFjayBncmVldGluZy5cclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAbWVtYmVyb2YgRGFzaGJvYXJkV2VsY29tZUhlYWRlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldCBncmVldGluZygpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbmFtZSA9IHRoaXMudXNlck5hbWU/LnRyaW0oKTtcclxuICAgIHJldHVybiBuYW1lXHJcbiAgICAgID8gYCR7dGhpcy50ZXh0cz8uZ3JlZXRpbmd9JHtuYW1lfSFgXHJcbiAgICAgIDogYCR7dGhpcy50ZXh0cz8uZmFsbGJhY2tHcmVldGluZ30hYDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXRzIHRoZSBjaG9zZW4gc2hvcnRjdXQncyB0YXJnZXQgZm9yIHRoZSBob3N0IHRvIHNjcm9sbC9uYXZpZ2F0ZSB0by5cclxuICAgKiBAcGFyYW0ge0Rhc2hib2FyZEp1bXBUYXJnZXR9IHRhcmdldCAtIFRoZSBzZWxlY3RlZCBzZWN0aW9uLlxyXG4gICAqIEBtZW1iZXJvZiBEYXNoYm9hcmRXZWxjb21lSGVhZGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25TaG9ydGN1dENsaWNrKHRhcmdldDogRGFzaGJvYXJkSnVtcFRhcmdldCk6IHZvaWQge1xyXG4gICAgdGhpcy5zaG9ydGN1dFNlbGVjdGVkLmVtaXQodGFyZ2V0KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyYWNrQnkgZm9yIHRoZSBzaG9ydGN1dCBsaXN0LlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBfaW5kZXhcclxuICAgKiBAcGFyYW0ge0p1bXBTaG9ydGN1dH0gc2hvcnRjdXRcclxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XHJcbiAgICogQG1lbWJlcm9mIERhc2hib2FyZFdlbGNvbWVIZWFkZXJDb21wb25lbnRcclxuICAgKi9cclxuICB0cmFja0J5VGFyZ2V0KF9pbmRleDogbnVtYmVyLCBzaG9ydGN1dDogSnVtcFNob3J0Y3V0KTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzaG9ydGN1dC50YXJnZXQ7XHJcbiAgfVxyXG5cclxuICAvKiogUmVidWlsZHMgdGhlIHNob3J0Y3V0IGxpc3Qgc28gdGhlIHRlbXBsYXRlIHJlZmxlY3RzIHRoZSBsYXRlc3QgY291bnRzLiAqL1xyXG4gIHByaXZhdGUgYnVpbGRTaG9ydGN1dHMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3J0Y3V0cyA9IHRoaXMuYnVpbGRTaG9ydGN1dExpc3QoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEJ1aWxkcyB0aGUgc2hvcnRjdXQgdmlldyBtb2RlbHMgZnJvbSBgY29uc3RhbnRzLmpzb25gIGFuZCB0aGUgY3VycmVudFxyXG4gICAqIGNvdW50cy5cclxuICAgKiBAcmV0dXJuIHtKdW1wU2hvcnRjdXRbXX1cclxuICAgKiBAbWVtYmVyb2YgRGFzaGJvYXJkV2VsY29tZUhlYWRlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgYnVpbGRTaG9ydGN1dExpc3QoKTogSnVtcFNob3J0Y3V0W10ge1xyXG4gICAgY29uc3Qgc2hvcnRjdXRUZXh0cyA9IHRoaXMuY29uc3RhbnRzPy53ZWxjb21lSGVhZGVyPy5zaG9ydGN1dHM7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAgdGFyZ2V0OiBEYXNoYm9hcmRKdW1wVGFyZ2V0Lk1FRVRJTkdTLFxyXG4gICAgICAgIGxhYmVsOiBzaG9ydGN1dFRleHRzPy5tZWV0aW5ncz8ubGFiZWwsXHJcbiAgICAgICAgaWNvblVybDogc2hvcnRjdXRUZXh0cz8ubWVldGluZ3M/Lmljb25VcmwsXHJcbiAgICAgICAgYXJpYUxhYmVsOiBzaG9ydGN1dFRleHRzPy5tZWV0aW5ncz8uYXJpYUxhYmVsLFxyXG4gICAgICAgIGNvdW50OiB0aGlzLm1lZXRpbmdzQ291bnRWYWx1ZSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRhcmdldDogRGFzaGJvYXJkSnVtcFRhcmdldC5HUk9VUFMsXHJcbiAgICAgICAgbGFiZWw6IHNob3J0Y3V0VGV4dHM/Lmdyb3Vwcz8ubGFiZWwsXHJcbiAgICAgICAgaWNvblVybDogc2hvcnRjdXRUZXh0cz8uZ3JvdXBzPy5pY29uVXJsLFxyXG4gICAgICAgIGFyaWFMYWJlbDogc2hvcnRjdXRUZXh0cz8uZ3JvdXBzPy5hcmlhTGFiZWwsXHJcbiAgICAgICAgY291bnQ6IHRoaXMuZ3JvdXBzQ291bnRWYWx1ZSxcclxuICAgICAgfSxcclxuICAgIF07XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJpZWVlc2EtZGFzaGJvYXJkLXdlbGNvbWUtaGVhZGVyXCI+XHJcbiAgPCEtLSBHcmVldGluZyArIGhlbHBlciBsaW5lIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJpZWVlc2EtZGFzaGJvYXJkLXdlbGNvbWUtaGVhZGVyX19pbnRyb1wiPlxyXG4gICAgPGgxIGNsYXNzPVwiaWVlZXNhLWRhc2hib2FyZC13ZWxjb21lLWhlYWRlcl9fZ3JlZXRpbmcgbS0wXCI+XHJcbiAgICAgIHt7IGdyZWV0aW5nIH19XHJcbiAgICA8L2gxPlxyXG4gICAgPHAgY2xhc3M9XCJpZWVlc2EtZGFzaGJvYXJkLXdlbGNvbWUtaGVhZGVyX19oZWxwZXItdGV4dCBtLTBcIj5cclxuICAgICAge3sgdGV4dHM/LmhlbHBlclRleHQgfX1cclxuICAgIDwvcD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBcIkp1bXAgdG9cIiBzaG9ydGN1dHM6IGVhY2ggaWNvbiBleHBhbmRzIG9uIGhvdmVyL2ZvY3VzIGludG8gYSBwaWxsIHdpdGhcclxuICAgICAgIHRoZSBzZWN0aW9uIGxhYmVsIGFuZCBpdHMgY291bnQgYmFkZ2UuIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJpZWVlc2EtZGFzaGJvYXJkLXdlbGNvbWUtaGVhZGVyX19qdW1wLXRvXCI+XHJcbiAgICA8c3BhbiBjbGFzcz1cImllZWVzYS1kYXNoYm9hcmQtd2VsY29tZS1oZWFkZXJfX2p1bXAtdG8tbGFiZWxcIj5cclxuICAgICAge3sgdGV4dHM/Lmp1bXBUb0xhYmVsIH19XHJcbiAgICA8L3NwYW4+XHJcblxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAqbmdGb3I9XCJsZXQgc2hvcnRjdXQgb2Ygc2hvcnRjdXRzOyB0cmFja0J5OiB0cmFja0J5VGFyZ2V0XCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGNsYXNzPVwiaWVlZXNhLWRhc2hib2FyZC13ZWxjb21lLWhlYWRlcl9fc2hvcnRjdXRcIlxyXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInNob3J0Y3V0LmFyaWFMYWJlbCArICcgKCcgKyBzaG9ydGN1dC5jb3VudCArICcpJ1wiXHJcbiAgICAgIChjbGljayk9XCJvblNob3J0Y3V0Q2xpY2soc2hvcnRjdXQudGFyZ2V0KVwiXHJcbiAgICA+XHJcbiAgICAgIDxpbWdcclxuICAgICAgICBjbGFzcz1cImllZWVzYS1kYXNoYm9hcmQtd2VsY29tZS1oZWFkZXJfX3Nob3J0Y3V0LWljb25cIlxyXG4gICAgICAgIFtzcmNdPVwic2hvcnRjdXQuaWNvblVybFwiXHJcbiAgICAgICAgYWx0PVwiXCJcclxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICAvPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImllZWVzYS1kYXNoYm9hcmQtd2VsY29tZS1oZWFkZXJfX3Nob3J0Y3V0LWxhYmVsXCI+XHJcbiAgICAgICAge3sgc2hvcnRjdXQubGFiZWwgfX1cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImllZWVzYS1kYXNoYm9hcmQtd2VsY29tZS1oZWFkZXJfX3Nob3J0Y3V0LWNvdW50XCI+XHJcbiAgICAgICAge3sgc2hvcnRjdXQuY291bnQgfX1cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=