@ieeesa-npm/groups 0.15.17 → 0.15.19

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 (29) hide show
  1. package/esm2022/lib/assets/constants.json +27 -1
  2. package/esm2022/lib/components/add-user-roster/add-user-roster.component.mjs +8 -10
  3. package/esm2022/lib/components/create-group/create-group.component.mjs +2 -2
  4. package/esm2022/lib/components/edit-user-roles/edit-user-roles.component.mjs +7 -55
  5. package/esm2022/lib/components/interest-form/interest-form.component.mjs +3 -3
  6. package/esm2022/lib/components/interest-form-management/interest-form-management.component.mjs +3 -3
  7. package/esm2022/lib/components/interest-responses/interest-responses.component.mjs +119 -0
  8. package/esm2022/lib/components/interested-rosters/interested-rosters.component.mjs +370 -15
  9. package/esm2022/lib/components/roster-import-history/roster-import-history.component.mjs +106 -8
  10. package/esm2022/lib/components/view-roster/view-roster.component.mjs +2 -2
  11. package/esm2022/lib/groups.component.mjs +58 -9
  12. package/esm2022/lib/models/interest-response.model.mjs +18 -0
  13. package/esm2022/lib/models/roster-import.model.mjs +1 -1
  14. package/esm2022/lib/services/groups.service.mjs +91 -7
  15. package/esm2022/public-api.mjs +3 -1
  16. package/fesm2022/ieeesa-npm-groups.mjs +821 -212
  17. package/fesm2022/ieeesa-npm-groups.mjs.map +1 -1
  18. package/lib/components/edit-user-roles/edit-user-roles.component.d.ts +0 -10
  19. package/lib/components/interest-responses/interest-responses.component.d.ts +80 -0
  20. package/lib/components/interested-rosters/interested-rosters.component.d.ts +143 -9
  21. package/lib/components/roster-import-history/roster-import-history.component.d.ts +42 -4
  22. package/lib/groups.component.d.ts +9 -4
  23. package/lib/models/interest-response.model.d.ts +209 -0
  24. package/lib/models/roster-import.model.d.ts +12 -0
  25. package/lib/services/groups.service.d.ts +66 -10
  26. package/package.json +1 -1
  27. package/public-api.d.ts +2 -0
  28. package/esm2022/lib/assets/country-calling-codes.mjs +0 -83
  29. package/lib/assets/country-calling-codes.d.ts +0 -14
@@ -1,6 +1,7 @@
1
1
  import { Component, Input, ViewEncapsulation, } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { HttpErrorResponse } from '@angular/common/http';
4
+ import { DateTime } from 'luxon';
4
5
  import { Subject, takeUntil } from 'rxjs';
5
6
  import { DataTableComponent, TableColumnType, } from '@ieeesa-npm/presentation';
6
7
  import * as constants from '../../assets/constants.json';
@@ -20,10 +21,11 @@ import * as i4 from "@angular/common";
20
21
  * Data comes from the real BE endpoint via {@link RosterImportApiService}:
21
22
  * `GET /v1/groups/roster/import/history/{groupId}`. The response is a list of
22
23
  * `RosterImportJob` whose JSON view exposes `fileName`, `successRows`,
23
- * `failedRows`, `status` and ids — but NOT `createdOn` / `createdBy` (both are
24
- * `@JsonIgnore` on the BE entity). So the "Timestamp" and "Person Imported"
25
- * columns render a placeholder until the BE exposes those fields. "Target
26
- * Group" uses the current group's name (history is scoped to one group).
24
+ * `failedRows`, `status` and ids. The "Timestamp" and "Person Imported" columns
25
+ * map to `createdOn` / `createdBy`; these are currently `@JsonIgnore` on the BE
26
+ * entity, so until the BE exposes them the columns show a placeholder, and they
27
+ * populate automatically once the response carries the fields. "Target Group"
28
+ * uses the current group's name (history is scoped to one group).
27
29
  *
28
30
  * @export
29
31
  * @class RosterImportHistoryComponent
@@ -131,14 +133,110 @@ export class RosterImportHistoryComponent {
131
133
  */
132
134
  mapJobToRow(job) {
133
135
  return {
134
- timestamp: this.placeholder,
135
- personImported: this.placeholder,
136
+ // createdOn / createdBy are populated only once the BE exposes them
137
+ // (currently @JsonIgnore). Until then they are undefined and the
138
+ // placeholder is shown.
139
+ timestamp: job?.createdOn
140
+ ? this.formatTimestamp(job.createdOn)
141
+ : this.placeholder,
142
+ personImported: job?.createdBy ?? this.placeholder,
136
143
  fileName: job?.fileName ?? this.placeholder,
137
144
  addedRows: job?.successRows ?? 0,
138
145
  errors: job?.failedRows ?? 0,
139
146
  targetGroup: this.groupName || this.placeholder,
140
147
  };
141
148
  }
149
+ /**
150
+ * Formats the BE `createdOn` timestamp for display, converting from UTC to the
151
+ * browser's local timezone.
152
+ *
153
+ * The API sends a UTC wall-clock string in `dd/MM/yyyy HH:mm:ss` with NO zone
154
+ * marker, so it must be parsed EXPLICITLY as UTC (otherwise luxon/JS would
155
+ * assume local time and shift it incorrectly), then rendered in the system
156
+ * (browser) zone via toLocal(). Uses luxon per the project's date standards
157
+ * (moment is legacy — not used for new code).
158
+ * @param {string} value - The raw UTC createdOn value from the BE.
159
+ * @return {string} the localized display string, or the placeholder when
160
+ * blank/invalid.
161
+ * @memberof RosterImportHistoryComponent
162
+ */
163
+ formatTimestamp(value) {
164
+ if (!value) {
165
+ return this.placeholder;
166
+ }
167
+ const parsed = this.parseUtcTimestamp(value);
168
+ if (!parsed || !parsed.isValid) {
169
+ return this.placeholder;
170
+ }
171
+ // toLocal() shifts to the browser's zone; format to match the Figma:
172
+ // "20 Aug 2026 · 3:55 PM" (no seconds, 12-hour time with AM/PM).
173
+ return parsed.toLocal().toFormat("dd LLL yyyy '·' h:mm a");
174
+ }
175
+ /**
176
+ * Parses a BE timestamp string into a luxon {@link DateTime}, tolerant of the
177
+ * several shapes the backend may send so the UI renders correctly regardless
178
+ * of which format is used.
179
+ *
180
+ * The agreed/expected BE format is a UTC wall-clock string `dd/MM/yyyy HH:mm:ss`
181
+ * with NO zone marker; it is tried FIRST and parsed explicitly in UTC. If the
182
+ * BE instead sends a different shape, these fallbacks are tried in order:
183
+ * 1. `dd/MM/yyyy HH:mm:ss` (UTC) — the expected/agreed format
184
+ * 2. ISO-8601 (e.g. 2026-10-09T14:23:05Z or with offset) — zone from the string,
185
+ * or assumed UTC when the string carries none
186
+ * 3. SQL datetime `yyyy-MM-dd HH:mm:ss` (UTC)
187
+ * 4. `dd/MM/yyyy HH:mm` (UTC, no seconds)
188
+ * 5. RFC-2822 / HTTP date
189
+ * 6. native JS Date (last resort) — assumed UTC
190
+ * The first format that yields a valid DateTime wins. Returns null when none
191
+ * parse.
192
+ * @param {string} value - The raw timestamp string from the BE.
193
+ * @return {(DateTime | null)}
194
+ * @memberof RosterImportHistoryComponent
195
+ */
196
+ parseUtcTimestamp(value) {
197
+ const raw = value.trim();
198
+ const utc = { zone: 'utc' };
199
+ // 1. Expected/agreed format first.
200
+ let parsed = DateTime.fromFormat(raw, 'dd/MM/yyyy HH:mm:ss', utc);
201
+ if (parsed.isValid) {
202
+ return parsed;
203
+ }
204
+ // 2. ISO-8601. setZone keeps an explicit offset/Z; a zoneless ISO string is
205
+ // interpreted as UTC (matches the "wall-clock is UTC" contract).
206
+ parsed = DateTime.fromISO(raw, { setZone: true });
207
+ if (parsed.isValid) {
208
+ // When the ISO string had no zone, luxon used the system zone; re-interpret
209
+ // as UTC so a zoneless value is still treated as UTC.
210
+ return /[zZ]|[+-]\d{2}:?\d{2}$/.test(raw)
211
+ ? parsed
212
+ : DateTime.fromISO(raw, utc);
213
+ }
214
+ // 3. SQL datetime.
215
+ parsed = DateTime.fromFormat(raw, 'yyyy-MM-dd HH:mm:ss', utc);
216
+ if (parsed.isValid) {
217
+ return parsed;
218
+ }
219
+ // 4. Day/month/year without seconds.
220
+ parsed = DateTime.fromFormat(raw, 'dd/MM/yyyy HH:mm', utc);
221
+ if (parsed.isValid) {
222
+ return parsed;
223
+ }
224
+ // 5. RFC-2822 / HTTP date (both carry their own zone).
225
+ parsed = DateTime.fromRFC2822(raw);
226
+ if (parsed.isValid) {
227
+ return parsed;
228
+ }
229
+ parsed = DateTime.fromHTTP(raw);
230
+ if (parsed.isValid) {
231
+ return parsed;
232
+ }
233
+ // 6. Last resort: native Date, treated as UTC.
234
+ const jsDate = new Date(raw);
235
+ if (!isNaN(jsDate.getTime())) {
236
+ return DateTime.fromJSDate(jsDate, utc);
237
+ }
238
+ return null;
239
+ }
142
240
  /**
143
241
  * Maps a failed history request to a user-facing inline error message.
144
242
  * A 403 gets the permission-specific message; other errors get the generic
@@ -221,7 +319,7 @@ export class RosterImportHistoryComponent {
221
319
  ];
222
320
  }
223
321
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RosterImportHistoryComponent, deps: [{ token: i1.RosterImportApiService }, { token: i2.GroupsService }, { token: i0.ChangeDetectorRef }, { token: i3.GlobalErrorHandlerService }], target: i0.ɵɵFactoryTarget.Component }); }
224
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: RosterImportHistoryComponent, isStandalone: true, selector: "ieeesa-roster-import-history", inputs: { componentData: "componentData" }, ngImport: i0, template: "<div class=\"ieeesa-roster-import-history\">\r\n <!-- The \"\u2190 Back to Rosters / View History\" title row + X close are rendered\r\n by the shared ModalComponent above this. -->\r\n\r\n <!-- Group name heading (Figma: bold group name above the table). -->\r\n <p class=\"ieeesa-roster-import-history__group-name\">\r\n {{ groupName }}\r\n </p>\r\n\r\n <!-- \"Imported Files\" section title. -->\r\n <p class=\"ieeesa-roster-import-history__section-title\">\r\n {{ screenTexts?.importedFilesTitle ?? 'Imported Files' }}\r\n </p>\r\n\r\n <!-- Loading state -->\r\n <p\r\n *ngIf=\"isLoading\"\r\n class=\"ieeesa-roster-import-history__status\"\r\n role=\"status\"\r\n >\r\n {{ screenTexts?.loadingMessage ?? 'Loading import history...' }}\r\n </p>\r\n\r\n <!-- Error state -->\r\n <div\r\n *ngIf=\"!isLoading && errorMessage\"\r\n class=\"ieeesa-roster-import-history__error\"\r\n role=\"alert\"\r\n >\r\n {{ errorMessage }}\r\n </div>\r\n\r\n <!-- Imported Files table (read-only). Shown once loaded without error. -->\r\n <ieeesa-data-table\r\n *ngIf=\"!isLoading && !errorMessage\"\r\n class=\"ieeesa-roster-import-history__table\"\r\n [tableDataInfo]=\"tableData\"\r\n [columnSchemaInfo]=\"columnSchema\"\r\n [tableActions]=\"tableActions\"\r\n [isCellTextOverflowEllipsis]=\"true\"\r\n [className]=\"'ieeesa-roster-import-history-table'\"\r\n ></ieeesa-data-table>\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}.mat-mdc-dialog-content:has(>.ieeesa-roster-import-history),.mdc-dialog__content:has(>.ieeesa-roster-import-history),.mat-mdc-dialog-content:has(.ieeesa-roster-import-history),.mdc-dialog__content:has(.ieeesa-roster-import-history){max-height:none!important;min-height:320px!important;height:auto!important;overflow:visible!important}.ieeesa-modal-dialog.ieeesa-roster-import-history-dialog{width:1100px!important;max-width:calc(100vw - 32px)!important}.ieeesa-modal-dialog.ieeesa-roster-import-history-dialog .ieeesa-modal{box-shadow:0 4px 24px #00000080!important}.ieeesa-modal-dialog.ieeesa-roster-import-history-dialog .mat-mdc-dialog-content,.ieeesa-modal-dialog.ieeesa-roster-import-history-dialog [mat-dialog-content],.ieeesa-modal-dialog.ieeesa-roster-import-history-dialog .mdc-dialog__content,.ieeesa-modal-dialog.ieeesa-roster-import-history-dialog .mat-mdc-dialog-container .mdc-dialog__content,.ieeesa-modal-dialog.ieeesa-roster-import-history-dialog .mat-mdc-dialog-surface,.ieeesa-modal-dialog.ieeesa-roster-import-history-dialog .mdc-dialog__surface,.ieeesa-modal-dialog.ieeesa-roster-import-history-dialog .ieeesa-modal,.ieeesa-modal-dialog.ieeesa-roster-import-history-dialog .ieeesa-modal>.ieeesa-label-lg-16{max-height:none!important;overflow:visible!important}.ieeesa-modal-dialog.ieeesa-roster-import-history-dialog .ieeesa-modal-title{border-bottom:1px solid #e5e7eb;padding-bottom:16px;margin-bottom:16px!important;display:flex;align-items:center;gap:4px}.ieeesa-modal-dialog.ieeesa-roster-import-history-dialog .mat-mdc-dialog-content{min-height:0!important;padding:0!important}.ieeesa-roster-import-history{display:flex;flex-direction:column;gap:12px}.ieeesa-roster-import-history__group-name{margin:0;font-family:Calibri Bold,sans-serif;font-size:18px;font-weight:700;line-height:1.3;color:#1f2937}.ieeesa-roster-import-history__section-title{margin:0 -1.5em;padding:12px 1.5em;background-color:#f3f4f6;font-family:Calibri Bold,sans-serif;font-size:16px;font-weight:700;line-height:1.3;color:#1f2937}.ieeesa-roster-import-history__table{display:block}.ieeesa-roster-import-history__table .ieeesa-data-table__content{height:auto;max-height:none;overflow:visible}.ieeesa-roster-import-history__status{margin:8px 0;font-family:Calibri Regular,sans-serif;font-size:14px;color:#6f7782}.ieeesa-roster-import-history__error{margin:8px 0;padding:12px 16px;border-radius:6px;background-color:#fdecec;border:1px solid #f5c2c2;font-family:Calibri Regular,sans-serif;font-size:14px;color:#b3261e}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: DataTableComponent, selector: "ieeesa-data-table", inputs: ["tableDataInfo", "nestedTableDataInfo", "columnSchemaInfo", "nestedTableColumnSchemaInfo", "tableActions", "hasNestedTable", "tableColumnActions", "tableColumnActionMenuSize", "tableRowActions", "nestedTableRowActions", "caption", "viewAll", "paginatorConfig", "nestedPaginatorConfig", "legends", "pageIndex", "pageSize", "searchPlaceHolderText", "rowEditButton", "rowDeleteButton", "tableEditButton", "tableDeleteButton", "rowExpandButton", "rowCollapseButton", "isNestedTableHeaderNeeded", "addButton", "defaultColumnSortDirection", "defaultSortedColumn", "isClearSortNeeded", "filters", "selectedFilterOptions", "appliedFilterOptions", "searchType", "className", "searchSupportMessage", "inbuiltSortingNeeded", "isCellTextOverflowEllipsis", "isTableHeaderNeeded", "tableColumnsHeaderText", "verticalColumnHeaderNumber", "scrollbarSupportMessage", "isScrollSupportMessageNeeded", "isStickyHeaderNeeded", "customStickyHeaderNeeded", "headerElementClassName", "minCharToSearch", "searchResultMessage", "rowMenuActionIcon", "canDisableCheckbox", "isEllipsisRequiredForLink"], outputs: ["rowSelected", "selectedRowToEdit", "selectedRowToDelete", "selectedRowsToDelete", "rowLink", "addRow", "columnDataOnRowLinkClick", "menuActionClick", "selectActionMenu", "paginationChange", "selectedFilter", "removeFilteredOption", "filteredOptions", "searchedValue", "sortChange", "selectedRowsInfo", "rowExpansionClick", "tableColumnMenuActionClick", "tableColumnMenuToggleButton", "rowSlideToggle"] }], encapsulation: i0.ViewEncapsulation.None }); }
322
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: RosterImportHistoryComponent, isStandalone: true, selector: "ieeesa-roster-import-history", inputs: { componentData: "componentData" }, ngImport: i0, template: "<div class=\"ieeesa-roster-import-history\">\r\n <!-- The \"\u2190 Back to Rosters / View History\" title row + X close are rendered\r\n by the shared ModalComponent above this. -->\r\n\r\n <!-- Group name heading (Figma: bold group name above the table). -->\r\n <p class=\"ieeesa-roster-import-history__group-name\">\r\n {{ groupName }}\r\n </p>\r\n\r\n <!-- \"Imported Files\" section title. -->\r\n <p class=\"ieeesa-roster-import-history__section-title\">\r\n {{ screenTexts?.importedFilesTitle ?? 'Imported Files' }}\r\n </p>\r\n\r\n <!-- Loading state -->\r\n <p\r\n *ngIf=\"isLoading\"\r\n class=\"ieeesa-roster-import-history__status\"\r\n role=\"status\"\r\n >\r\n {{ screenTexts?.loadingMessage ?? 'Loading import history...' }}\r\n </p>\r\n\r\n <!-- Error state -->\r\n <div\r\n *ngIf=\"!isLoading && errorMessage\"\r\n class=\"ieeesa-roster-import-history__error\"\r\n role=\"alert\"\r\n >\r\n {{ errorMessage }}\r\n </div>\r\n\r\n <!-- Imported Files table (read-only). Shown once loaded without error. -->\r\n <ieeesa-data-table\r\n *ngIf=\"!isLoading && !errorMessage\"\r\n class=\"ieeesa-roster-import-history__table\"\r\n [tableDataInfo]=\"tableData\"\r\n [columnSchemaInfo]=\"columnSchema\"\r\n [tableActions]=\"tableActions\"\r\n [isCellTextOverflowEllipsis]=\"true\"\r\n [className]=\"'ieeesa-roster-import-history-table'\"\r\n ></ieeesa-data-table>\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}.mat-mdc-dialog-content:has(>.ieeesa-roster-import-history),.mdc-dialog__content:has(>.ieeesa-roster-import-history),.mat-mdc-dialog-content:has(.ieeesa-roster-import-history),.mdc-dialog__content:has(.ieeesa-roster-import-history){max-height:none!important;min-height:320px!important;height:auto!important;overflow:visible!important}.ieeesa-modal-dialog.ieeesa-roster-import-history-dialog{width:1100px!important;max-width:calc(100vw - 32px)!important}.ieeesa-modal-dialog.ieeesa-roster-import-history-dialog .ieeesa-modal{box-shadow:0 4px 24px #00000080!important}.ieeesa-modal-dialog.ieeesa-roster-import-history-dialog .mat-mdc-dialog-content,.ieeesa-modal-dialog.ieeesa-roster-import-history-dialog [mat-dialog-content],.ieeesa-modal-dialog.ieeesa-roster-import-history-dialog .mdc-dialog__content,.ieeesa-modal-dialog.ieeesa-roster-import-history-dialog .mat-mdc-dialog-container .mdc-dialog__content,.ieeesa-modal-dialog.ieeesa-roster-import-history-dialog .mat-mdc-dialog-surface,.ieeesa-modal-dialog.ieeesa-roster-import-history-dialog .mdc-dialog__surface,.ieeesa-modal-dialog.ieeesa-roster-import-history-dialog .ieeesa-modal,.ieeesa-modal-dialog.ieeesa-roster-import-history-dialog .ieeesa-modal>.ieeesa-label-lg-16{max-height:none!important;overflow:visible!important}.ieeesa-modal-dialog.ieeesa-roster-import-history-dialog .ieeesa-modal-title{border-bottom:1px solid #e5e7eb;padding-bottom:16px;margin-bottom:16px!important;display:flex;align-items:center;gap:4px}.ieeesa-modal-dialog.ieeesa-roster-import-history-dialog .mat-mdc-dialog-content{min-height:0!important;padding:0!important}.ieeesa-roster-import-history{display:flex;flex-direction:column;gap:12px}.ieeesa-roster-import-history__group-name{margin:0;font-family:Calibri Bold,sans-serif;font-size:18px;font-weight:700;line-height:1.3;color:#1f2937}.ieeesa-roster-import-history__section-title{margin:0 -1.5em;padding:12px 1.5em;background-color:#f3f4f6;font-family:Calibri Bold,sans-serif;font-size:16px;font-weight:700;line-height:1.3;color:#1f2937}.ieeesa-roster-import-history__table{display:block}.ieeesa-roster-import-history__table .ieeesa-data-table__content{height:auto;max-height:none;overflow:visible}.ieeesa-roster-import-history__status{margin:8px 0;font-family:Calibri Regular,sans-serif;font-size:14px;color:#6f7782}.ieeesa-roster-import-history__error{margin:8px 0;padding:12px 16px;border-radius:6px;background-color:#fdecec;border:1px solid #f5c2c2;font-family:Calibri Regular,sans-serif;font-size:14px;color:#b3261e}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: DataTableComponent, selector: "ieeesa-data-table", inputs: ["tableDataInfo", "nestedTableDataInfo", "columnSchemaInfo", "nestedTableColumnSchemaInfo", "tableActions", "hasNestedTable", "tableColumnActions", "tableColumnActionMenuSize", "tableRowActions", "nestedTableRowActions", "caption", "viewAll", "paginatorConfig", "nestedPaginatorConfig", "legends", "pageIndex", "pageSize", "searchPlaceHolderText", "rowEditButton", "rowDeleteButton", "tableEditButton", "tableDeleteButton", "rowExpandButton", "rowCollapseButton", "isNestedTableHeaderNeeded", "addButton", "defaultColumnSortDirection", "defaultSortedColumn", "isClearSortNeeded", "filters", "selectedFilterOptions", "appliedFilterOptions", "searchType", "className", "searchSupportMessage", "inbuiltSortingNeeded", "isCellTextOverflowEllipsis", "isTableHeaderNeeded", "tableColumnsHeaderText", "verticalColumnHeaderNumber", "scrollbarSupportMessage", "isScrollSupportMessageNeeded", "isStickyHeaderNeeded", "customStickyHeaderNeeded", "headerElementClassName", "minCharToSearch", "searchResultMessage", "rowMenuActionIcon", "canDisableCheckbox", "isEllipsisRequiredForLink"], outputs: ["rowSelected", "selectedRowToEdit", "selectedRowToDelete", "selectedRowsToDelete", "rowLink", "addRow", "columnDataOnRowLinkClick", "menuActionClick", "selectActionMenu", "paginationChange", "selectedFilter", "removeFilteredOption", "filteredOptions", "searchedValue", "sortChange", "selectedRowsInfo", "rowExpansionClick", "tableColumnMenuActionClick", "tableColumnMenuToggleButton", "rowSlideToggle", "rowDropdownChange"] }], encapsulation: i0.ViewEncapsulation.None }); }
225
323
  }
226
324
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RosterImportHistoryComponent, decorators: [{
227
325
  type: Component,
@@ -229,4 +327,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
229
327
  }], ctorParameters: function () { return [{ type: i1.RosterImportApiService }, { type: i2.GroupsService }, { type: i0.ChangeDetectorRef }, { type: i3.GlobalErrorHandlerService }]; }, propDecorators: { componentData: [{
230
328
  type: Input
231
329
  }] } });
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9zdGVyLWltcG9ydC1oaXN0b3J5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyb3Vwcy9zcmMvbGliL2NvbXBvbmVudHMvcm9zdGVyLWltcG9ydC1oaXN0b3J5L3Jvc3Rlci1pbXBvcnQtaGlzdG9yeS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL3Jvc3Rlci1pbXBvcnQtaGlzdG9yeS9yb3N0ZXItaW1wb3J0LWhpc3RvcnkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxLQUFLLEVBR0wsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQ0wsa0JBQWtCLEVBR2xCLGVBQWUsR0FDaEIsTUFBTSwwQkFBMEIsQ0FBQztBQUtsQyxPQUFPLEtBQUssU0FBUyxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7QUFZekQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQVNILE1BQU0sT0FBTyw0QkFBNEI7SUFvQ3ZDO0lBQ0UsMENBQTBDO0lBQ2xDLHNCQUE4QztJQUN0RCwwQ0FBMEM7SUFDbEMsWUFBMkI7SUFDbkMsMENBQTBDO0lBQ2xDLEdBQXNCO0lBQzlCLDBDQUEwQztJQUNsQyx5QkFBb0Q7UUFOcEQsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUU5QyxpQkFBWSxHQUFaLFlBQVksQ0FBZTtRQUUzQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUV0Qiw4QkFBeUIsR0FBekIs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UTtnQkFDbkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLElBQUksUUFBUTtnQkFDcEMsVUFBVSxFQUFFLGVBQWUsQ0FBQyxJQUFJO2dCQUNoQyw4REFBOEQ7Z0JBQzlELFFBQVEsRUFBRSxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFO2FBQ2hEO1lBQ0Q7Z0JBQ0UsRUFBRSxFQUFFLENBQUM7Z0JBQ0wsU0FBUyxFQUFFLGFBQWE7Z0JBQ3hCLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxJQUFJLGNBQWM7Z0JBQy9DLFVBQVUsRUFBRSxlQUFlLENBQUMsSUFBSTtnQkFDaEMsOERBQThEO2dCQUM5RCxRQUFRLEVBQUUsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRTthQUNyRDtTQUNGLENBQUM7SUFDSixDQUFDOytHQXBOVSw0QkFBNEI7bUdBQTVCLDRCQUE0QixvSUM1RHpDLHE3Q0EyQ0EsNnZXRFlZLFlBQVksbUlBQUUsa0JBQWtCOzs0RkFLL0IsNEJBQTRCO2tCQVJ4QyxTQUFTOytCQUNFLDhCQUE4QixjQUM1QixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsa0JBQWtCLENBQUMsaUJBRzVCLGlCQUFpQixDQUFDLElBQUk7aU5BSzVCLGFBQWE7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgRGF0YVRhYmxlQ29tcG9uZW50LFxyXG4gIFRhYmxlQWN0aW9ucyxcclxuICBUYWJsZUNvbHVtblNjaGVtYSxcclxuICBUYWJsZUNvbHVtblR5cGUsXHJcbn0gZnJvbSAnQGllZWVzYS1ucG0vcHJlc2VudGF0aW9uJztcclxuaW1wb3J0IHsgR2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZSB9IGZyb20gJ0BpZWVlc2EtbnBtL3V0aWxpdHknO1xyXG5pbXBvcnQgeyBSb3N0ZXJJbXBvcnRKb2IgfSBmcm9tICcuLi8uLi9tb2RlbHMvcm9zdGVyLWltcG9ydC5tb2RlbCc7XHJcbmltcG9ydCB7IFJvc3RlckltcG9ydEFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yb3N0ZXItaW1wb3J0LWFwaS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR3JvdXBzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dyb3Vwcy5zZXJ2aWNlJztcclxuaW1wb3J0ICogYXMgY29uc3RhbnRzIGZyb20gJy4uLy4uL2Fzc2V0cy9jb25zdGFudHMuanNvbic7XHJcblxyXG4vKiogQSBzaW5nbGUgcm93IHNob3duIGluIHRoZSBcIkltcG9ydGVkIEZpbGVzXCIgdGFibGUuICovXHJcbmludGVyZmFjZSBSb3N0ZXJJbXBvcnRIaXN0b3J5Um93IHtcclxuICB0aW1lc3RhbXA6IHN0cmluZztcclxuICBwZXJzb25JbXBvcnRlZDogc3RyaW5nO1xyXG4gIGZpbGVOYW1lOiBzdHJpbmc7XHJcbiAgYWRkZWRSb3dzOiBudW1iZXIgfCBzdHJpbmc7XHJcbiAgZXJyb3JzOiBudW1iZXIgfCBzdHJpbmc7XHJcbiAgdGFyZ2V0R3JvdXA6IHN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiAqIFJvc3RlciBpbXBvcnQtaGlzdG9yeSAoXCJWaWV3IEhpc3RvcnlcIikgZGlhbG9nIGJvZHkuXHJcbiAqXHJcbiAqIFJlbmRlcmVkIGluc2lkZSB0aGUgc2hhcmVkIE1vZGFsQ29tcG9uZW50ICh3aGljaCBzdXBwbGllcyB0aGVcclxuICogXCLihpAgQmFjayB0byBSb3N0ZXJzIC8gVmlldyBIaXN0b3J5XCIgYnJlYWRjcnVtYiB0aXRsZSByb3cgKyBYIGNsb3NlKS4gU2hvd3MgdGhlXHJcbiAqIHNlbGVjdGVkIGdyb3VwJ3MgbmFtZSBhbmQgYW4gXCJJbXBvcnRlZCBGaWxlc1wiIHRhYmxlIGxpc3RpbmcgcHJpb3Igcm9zdGVyXHJcbiAqIGltcG9ydHMuXHJcbiAqXHJcbiAqIERhdGEgY29tZXMgZnJvbSB0aGUgcmVhbCBCRSBlbmRwb2ludCB2aWEge0BsaW5rIFJvc3RlckltcG9ydEFwaVNlcnZpY2V9OlxyXG4gKiBgR0VUIC92MS9ncm91cHMvcm9zdGVyL2ltcG9ydC9oaXN0b3J5L3tncm91cElkfWAuIFRoZSByZXNwb25zZSBpcyBhIGxpc3Qgb2ZcclxuICogYFJvc3RlckltcG9ydEpvYmAgd2hvc2UgSlNPTiB2aWV3IGV4cG9zZXMgYGZpbGVOYW1lYCwgYHN1Y2Nlc3NSb3dzYCxcclxuICogYGZhaWxlZFJvd3NgLCBgc3RhdHVzYCBhbmQgaWRzIOKAlCBidXQgTk9UIGBjcmVhdGVkT25gIC8gYGNyZWF0ZWRCeWAgKGJvdGggYXJlXHJcbiAqIGBASnNvbklnbm9yZWAgb24gdGhlIEJFIGVudGl0eSkuIFNvIHRoZSBcIlRpbWVzdGFtcFwiIGFuZCBcIlBlcnNvbiBJbXBvcnRlZFwiXHJcbiAqIGNvbHVtbnMgcmVuZGVyIGEgcGxhY2Vob2xkZXIgdW50aWwgdGhlIEJFIGV4cG9zZXMgdGhvc2UgZmllbGRzLiBcIlRhcmdldFxyXG4gKiBHcm91cFwiIHVzZXMgdGhlIGN1cnJlbnQgZ3JvdXAncyBuYW1lIChoaXN0b3J5IGlzIHNjb3BlZCB0byBvbmUgZ3JvdXApLlxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBSb3N0ZXJJbXBvcnRIaXN0b3J5Q29tcG9uZW50XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2llZWVzYS1yb3N0ZXItaW1wb3J0LWhpc3RvcnknLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRGF0YVRhYmxlQ29tcG9uZW50XSxcclxuICB0ZW1wbGF0ZVVybDogJy4vcm9zdGVyLWltcG9ydC1oaXN0b3J5LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yb3N0ZXItaW1wb3J0LWhpc3RvcnkuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUm9zdGVySW1wb3J0SGlzdG9yeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAvKiogQ2FycmllcyB0aGUgeyBncm91cElkLCBncm91cE5hbWUgfSBwYXlsb2FkIGZyb20gdGhlIG9wZW5pbmcgZGlhbG9nLiAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgQElucHV0KCkgY29tcG9uZW50RGF0YTogYW55O1xyXG5cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGNvbnN0YW50czogYW55ID0gY29uc3RhbnRzO1xyXG4gIHNjcmVlblRleHRzID0gdGhpcy5jb25zdGFudHM/LnJvc3RlckltcG9ydEhpc3Rvcnk7XHJcblxyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG5cclxuICAvKiogVGFibGUgY29sdW1uIGRlZmluaXRpb25zIGZvciB0aGUgXCJJbXBvcnRlZCBGaWxlc1wiIHRhYmxlLiAqL1xyXG4gIGNvbHVtblNjaGVtYTogVGFibGVDb2x1bW5TY2hlbWFbXSA9IFtdO1xyXG5cclxuICAvKiogSW1wb3J0LWhpc3Rvcnkgcm93cyBtYXBwZWQgZm9yIHRoZSB0YWJsZS4gKi9cclxuICB0YWJsZURhdGE6IFJvc3RlckltcG9ydEhpc3RvcnlSb3dbXSA9IFtdO1xyXG5cclxuICAvKiogVHJ1ZSB3aGlsZSB0aGUgaGlzdG9yeSByZXF1ZXN0IGlzIGluIGZsaWdodC4gKi9cclxuICBpc0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgLyoqIElubGluZSBlcnJvciBtZXNzYWdlIHdoZW4gdGhlIGhpc3RvcnkgcmVxdWVzdCBmYWlscy4gKi9cclxuICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAvKiogUmVhZC1vbmx5IHRhYmxlIOKAlCBubyBzZWFyY2ggLyBmaWx0ZXIgLyBhZGQgLyBlZGl0IC8gZGVsZXRlIGFjdGlvbnMuICovXHJcbiAgdGFibGVBY3Rpb25zOiBUYWJsZUFjdGlvbnMgPSB7XHJcbiAgICBpc1NlYXJjaE5lZWRlZDogZmFsc2UsXHJcbiAgICBpc0ZpbHRlck5lZWRlZDogZmFsc2UsXHJcbiAgICBpc0FkZE5lZWRlZDogZmFsc2UsXHJcbiAgICBpc0VkaXROZWVkZWQ6IGZhbHNlLFxyXG4gICAgaXNEZWxldGVOZWVkZWQ6IGZhbHNlLFxyXG4gIH07XHJcblxyXG4gIC8qKiBQbGFjZWhvbGRlciBzaG93biBmb3IgZmllbGRzIHRoZSBCRSBkb2VzIG5vdCByZXR1cm4gKHRpbWVzdGFtcCAvIHBlcnNvbikuICovXHJcbiAgcHJpdmF0ZSByZWFkb25seSBwbGFjZWhvbGRlciA9XHJcbiAgICB0aGlzLnNjcmVlblRleHRzPy5lbXB0eUZpZWxkUGxhY2Vob2xkZXIgPz8gJ+KAlCc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIHJvc3RlckltcG9ydEFwaVNlcnZpY2U6IFJvc3RlckltcG9ydEFwaVNlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgZ3JvdXBTZXJ2aWNlOiBHcm91cHNTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgZ2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZTogR2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgLyoqIFRoZSBncm91cCBuYW1lIHNob3duIGFzIHRoZSBoZWFkaW5nIGFib3ZlIHRoZSBJbXBvcnRlZCBGaWxlcyB0YWJsZS4gKi9cclxuICBnZXQgZ3JvdXBOYW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmNvbXBvbmVudERhdGE/Lmdyb3VwTmFtZSA/P1xyXG4gICAgICB0aGlzLmdyb3VwU2VydmljZT8uZ2V0U2VsZWN0ZWRHcm91cEluZm8oKT8uZ3JvdXBOYW1lID8/XHJcbiAgICAgICcnXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRoZSBncm91cCBpZCB3aG9zZSBoaXN0b3J5IGlzIGZldGNoZWQuICovXHJcbiAgcHJpdmF0ZSBnZXQgZ3JvdXBJZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5jb21wb25lbnREYXRhPy5ncm91cElkID8/XHJcbiAgICAgICh0aGlzLmdyb3VwU2VydmljZT8uZ2V0U2VsZWN0ZWRHcm91cEluZm8oKT8uZ3JvdXBJZCBhcyBzdHJpbmcpID8/XHJcbiAgICAgICcnXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQnVpbGRzIHRoZSB0YWJsZSBzY2hlbWEgYW5kIGxvYWRzIHRoZSBpbXBvcnQgaGlzdG9yeSBmcm9tIHRoZSBCRS5cclxuICAgKiBAbWVtYmVyb2YgUm9zdGVySW1wb3J0SGlzdG9yeUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5idWlsZENvbHVtblNjaGVtYSgpO1xyXG4gICAgdGhpcy5yb3N0ZXJJbXBvcnRBcGlTZXJ2aWNlLnNldEFwaUJhc2VVcmwodGhpcy5ncm91cFNlcnZpY2U/LmFwaUJhc2VVcmwpO1xyXG4gICAgdGhpcy5sb2FkSW1wb3J0SGlzdG9yeSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYW5zIHVwIHN1YnNjcmlwdGlvbnMgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZC5cclxuICAgKiBAbWVtYmVyb2YgUm9zdGVySW1wb3J0SGlzdG9yeUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyB0aGUgaW1wb3J0IGhpc3RvcnkgZm9yIHRoZSBjdXJyZW50IGdyb3VwIGFuZCBtYXBzIGl0IHRvIHRhYmxlIHJvd3MuXHJcbiAgICogQG1lbWJlcm9mIFJvc3RlckltcG9ydEhpc3RvcnlDb21wb25lbnRcclxuICAgKi9cclxuICBsb2FkSW1wb3J0SGlzdG9yeSgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5ncm91cElkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gbnVsbDtcclxuICAgIHRoaXMucm9zdGVySW1wb3J0QXBpU2VydmljZVxyXG4gICAgICAuZ2V0SW1wb3J0SGlzdG9yeSh0aGlzLmdyb3VwSWQpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGpvYnM6IFJvc3RlckltcG9ydEpvYltdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IChqb2JzID8/IFtdKS5tYXAoKGpvYikgPT4gdGhpcy5tYXBKb2JUb1Jvdyhqb2IpKTtcclxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWFwcyBhIEJFIGltcG9ydCBqb2IgdG8gYSB0YWJsZSByb3cuIFRpbWVzdGFtcCBhbmQgUGVyc29uIEltcG9ydGVkIGFyZSBub3RcclxuICAgKiBwcmVzZW50IGluIHRoZSByZXNwb25zZSAoQkUgYEBKc29uSWdub3JlYCksIHNvIHRoZXkgcmVuZGVyIGEgcGxhY2Vob2xkZXIuXHJcbiAgICogVGFyZ2V0IEdyb3VwIHVzZXMgdGhlIGN1cnJlbnQgZ3JvdXAncyBuYW1lIChoaXN0b3J5IGlzIHBlci1ncm91cCkuXHJcbiAgICogQHBhcmFtIHtSb3N0ZXJJbXBvcnRKb2J9IGpvYiAtIFRoZSBCRSBpbXBvcnQgam9iLlxyXG4gICAqIEByZXR1cm4ge1Jvc3RlckltcG9ydEhpc3RvcnlSb3d9XHJcbiAgICogQG1lbWJlcm9mIFJvc3RlckltcG9ydEhpc3RvcnlDb21wb25lbnRcclxuICAgKi9cclxuICBwcml2YXRlIG1hcEpvYlRvUm93KGpvYjogUm9zdGVySW1wb3J0Sm9iKTogUm9zdGVySW1wb3J0SGlzdG9yeVJvdyB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0aW1lc3RhbXA6IHRoaXMucGxhY2Vob2xkZXIsXHJcbiAgICAgIHBlcnNvbkltcG9ydGVkOiB0aGlzLnBsYWNlaG9sZGVyLFxyXG4gICAgICBmaWxlTmFtZTogam9iPy5maWxlTmFtZSA/PyB0aGlzLnBsYWNlaG9sZGVyLFxyXG4gICAgICBhZGRlZFJvd3M6IGpvYj8uc3VjY2Vzc1Jvd3MgPz8gMCxcclxuICAgICAgZXJyb3JzOiBqb2I/LmZhaWxlZFJvd3MgPz8gMCxcclxuICAgICAgdGFyZ2V0R3JvdXA6IHRoaXMuZ3JvdXBOYW1lIHx8IHRoaXMucGxhY2Vob2xkZXIsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWFwcyBhIGZhaWxlZCBoaXN0b3J5IHJlcXVlc3QgdG8gYSB1c2VyLWZhY2luZyBpbmxpbmUgZXJyb3IgbWVzc2FnZS5cclxuICAgKiBBIDQwMyBnZXRzIHRoZSBwZXJtaXNzaW9uLXNwZWNpZmljIG1lc3NhZ2U7IG90aGVyIGVycm9ycyBnZXQgdGhlIGdlbmVyaWNcclxuICAgKiBvbmUgYW5kIGFyZSBmb3J3YXJkZWQgdG8gdGhlIGdsb2JhbCBoYW5kbGVyIGZvciBsb2dnaW5nL2ludGVyY2VwdG9ycy5cclxuICAgKiBAcGFyYW0geyp9IGVycm9yIC0gVGhlIEh0dHBFcnJvclJlc3BvbnNlLlxyXG4gICAqIEBtZW1iZXJvZiBSb3N0ZXJJbXBvcnRIaXN0b3J5Q29tcG9uZW50XHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMudGFibGVEYXRhID0gW107XHJcbiAgICBjb25zdCBzdGF0dXMgPSBlcnJvcj8uc3RhdHVzID8/IGVycm9yPy5lcnJvcj8uc3RhdHVzO1xyXG4gICAgaWYgKHN0YXR1cyA9PT0gNDAzKSB7XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID1cclxuICAgICAgICB0aGlzLnNjcmVlblRleHRzPy5mb3JiaWRkZW5NZXNzYWdlID8/XHJcbiAgICAgICAgJ1lvdSBkbyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHZpZXcgdGhlIGltcG9ydCBoaXN0b3J5IGZvciB0aGlzIGdyb3VwLic7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZXJyb3JNZXNzYWdlID1cclxuICAgICAgdGhpcy5zY3JlZW5UZXh0cz8uZXJyb3JNZXNzYWdlID8/XHJcbiAgICAgICdVbmFibGUgdG8gbG9hZCBpbXBvcnQgaGlzdG9yeS4gUGxlYXNlIHRyeSBhZ2Fpbi4nO1xyXG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcclxuICAgICAgdGhpcy5nbG9iYWxFcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluZXMgdGhlIFwiSW1wb3J0ZWQgRmlsZXNcIiB0YWJsZSBjb2x1bW5zLlxyXG4gICAqIEBtZW1iZXJvZiBSb3N0ZXJJbXBvcnRIaXN0b3J5Q29tcG9uZW50XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBidWlsZENvbHVtblNjaGVtYSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLnNjcmVlblRleHRzPy50YWJsZUNvbHVtbnM7XHJcbiAgICB0aGlzLmNvbHVtblNjaGVtYSA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGlkOiAxLFxyXG4gICAgICAgIGNvbHVtbkRlZjogJ3RpbWVzdGFtcCcsXHJcbiAgICAgICAgaGVhZGluZzogY29sdW1ucz8udGltZXN0YW1wID8/ICdUaW1lc3RhbXAnLFxyXG4gICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5URVhULFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgY2VsbERhdGE6IChlbGVtZW50OiBhbnkpID0+IGAke2VsZW1lbnQudGltZXN0YW1wfWAsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBpZDogMixcclxuICAgICAgICBjb2x1bW5EZWY6ICdwZXJzb25JbXBvcnRlZCcsXHJcbiAgICAgICAgaGVhZGluZzogY29sdW1ucz8ucGVyc29uSW1wb3J0ZWQgPz8gJ1BlcnNvbiBJbXBvcnRlZCcsXHJcbiAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlRFWFQsXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICBjZWxsRGF0YTogKGVsZW1lbnQ6IGFueSkgPT4gYCR7ZWxlbWVudC5wZXJzb25JbXBvcnRlZH1gLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaWQ6IDMsXHJcbiAgICAgICAgY29sdW1uRGVmOiAnZmlsZU5hbWUnLFxyXG4gICAgICAgIGhlYWRpbmc6IGNvbHVtbnM/LmZpbGVOYW1lID8/ICdGaWxlIE5hbWUnLFxyXG4gICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5URVhULFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgY2VsbERhdGE6IChlbGVtZW50OiBhbnkpID0+IGAke2VsZW1lbnQuZmlsZU5hbWV9YCxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGlkOiA0LFxyXG4gICAgICAgIGNvbHVtbkRlZjogJ2FkZGVkUm93cycsXHJcbiAgICAgICAgaGVhZGluZzogY29sdW1ucz8uYWRkZWRSb3dzID8/ICdBZGRlZCBSb3dzJyxcclxuICAgICAgICBjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGUuVEVYVCxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGNlbGxEYXRhOiAoZWxlbWVudDogYW55KSA9PiBgJHtlbGVtZW50LmFkZGVkUm93c31gLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaWQ6IDUsXHJcbiAgICAgICAgY29sdW1uRGVmOiAnZXJyb3JzJyxcclxuICAgICAgICBoZWFkaW5nOiBjb2x1bW5zPy5lcnJvcnMgPz8gJ0Vycm9ycycsXHJcbiAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlRFWFQsXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICBjZWxsRGF0YTogKGVsZW1lbnQ6IGFueSkgPT4gYCR7ZWxlbWVudC5lcnJvcnN9YCxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGlkOiA2LFxyXG4gICAgICAgIGNvbHVtbkRlZjogJ3RhcmdldEdyb3VwJyxcclxuICAgICAgICBoZWFkaW5nOiBjb2x1bW5zPy50YXJnZXRHcm91cCA/PyAnVGFyZ2V0IEdyb3VwJyxcclxuICAgICAgICBjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGUuVEVYVCxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGNlbGxEYXRhOiAoZWxlbWVudDogYW55KSA9PiBgJHtlbGVtZW50LnRhcmdldEdyb3VwfWAsXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiaWVlZXNhLXJvc3Rlci1pbXBvcnQtaGlzdG9yeVwiPlxyXG4gIDwhLS0gVGhlIFwi4oaQIEJhY2sgdG8gUm9zdGVycyAvIFZpZXcgSGlzdG9yeVwiIHRpdGxlIHJvdyArIFggY2xvc2UgYXJlIHJlbmRlcmVkXHJcbiAgICAgICBieSB0aGUgc2hhcmVkIE1vZGFsQ29tcG9uZW50IGFib3ZlIHRoaXMuIC0tPlxyXG5cclxuICA8IS0tIEdyb3VwIG5hbWUgaGVhZGluZyAoRmlnbWE6IGJvbGQgZ3JvdXAgbmFtZSBhYm92ZSB0aGUgdGFibGUpLiAtLT5cclxuICA8cCBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0LWhpc3RvcnlfX2dyb3VwLW5hbWVcIj5cclxuICAgIHt7IGdyb3VwTmFtZSB9fVxyXG4gIDwvcD5cclxuXHJcbiAgPCEtLSBcIkltcG9ydGVkIEZpbGVzXCIgc2VjdGlvbiB0aXRsZS4gLS0+XHJcbiAgPHAgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydC1oaXN0b3J5X19zZWN0aW9uLXRpdGxlXCI+XHJcbiAgICB7eyBzY3JlZW5UZXh0cz8uaW1wb3J0ZWRGaWxlc1RpdGxlID8/ICdJbXBvcnRlZCBGaWxlcycgfX1cclxuICA8L3A+XHJcblxyXG4gIDwhLS0gTG9hZGluZyBzdGF0ZSAtLT5cclxuICA8cFxyXG4gICAgKm5nSWY9XCJpc0xvYWRpbmdcIlxyXG4gICAgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydC1oaXN0b3J5X19zdGF0dXNcIlxyXG4gICAgcm9sZT1cInN0YXR1c1wiXHJcbiAgPlxyXG4gICAge3sgc2NyZWVuVGV4dHM/LmxvYWRpbmdNZXNzYWdlID8/ICdMb2FkaW5nIGltcG9ydCBoaXN0b3J5Li4uJyB9fVxyXG4gIDwvcD5cclxuXHJcbiAgPCEtLSBFcnJvciBzdGF0ZSAtLT5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cIiFpc0xvYWRpbmcgJiYgZXJyb3JNZXNzYWdlXCJcclxuICAgIGNsYXNzPVwiaWVlZXNhLXJvc3Rlci1pbXBvcnQtaGlzdG9yeV9fZXJyb3JcIlxyXG4gICAgcm9sZT1cImFsZXJ0XCJcclxuICA+XHJcbiAgICB7eyBlcnJvck1lc3NhZ2UgfX1cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBJbXBvcnRlZCBGaWxlcyB0YWJsZSAocmVhZC1vbmx5KS4gU2hvd24gb25jZSBsb2FkZWQgd2l0aG91dCBlcnJvci4gLS0+XHJcbiAgPGllZWVzYS1kYXRhLXRhYmxlXHJcbiAgICAqbmdJZj1cIiFpc0xvYWRpbmcgJiYgIWVycm9yTWVzc2FnZVwiXHJcbiAgICBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0LWhpc3RvcnlfX3RhYmxlXCJcclxuICAgIFt0YWJsZURhdGFJbmZvXT1cInRhYmxlRGF0YVwiXHJcbiAgICBbY29sdW1uU2NoZW1hSW5mb109XCJjb2x1bW5TY2hlbWFcIlxyXG4gICAgW3RhYmxlQWN0aW9uc109XCJ0YWJsZUFjdGlvbnNcIlxyXG4gICAgW2lzQ2VsbFRleHRPdmVyZmxvd0VsbGlwc2lzXT1cInRydWVcIlxyXG4gICAgW2NsYXNzTmFtZV09XCInaWVlZXNhLXJvc3Rlci1pbXBvcnQtaGlzdG9yeS10YWJsZSdcIlxyXG4gID48L2llZWVzYS1kYXRhLXRhYmxlPlxyXG48L2Rpdj5cclxuIl19
330
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9zdGVyLWltcG9ydC1oaXN0b3J5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyb3Vwcy9zcmMvbGliL2NvbXBvbmVudHMvcm9zdGVyLWltcG9ydC1oaXN0b3J5L3Jvc3Rlci1pbXBvcnQtaGlzdG9yeS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL3Jvc3Rlci1pbXBvcnQtaGlzdG9yeS9yb3N0ZXItaW1wb3J0LWhpc3RvcnkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxLQUFLLEVBR0wsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFDTCxrQkFBa0IsRUFHbEIsZUFBZSxHQUNoQixNQUFNLDBCQUEwQixDQUFDO0FBS2xDLE9BQU8sS0FBSyxTQUFTLE1BQU0sNkJBQTZCLENBQUM7Ozs7OztBQVl6RDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQVNILE1BQU0sT0FBTyw0QkFBNEI7SUFvQ3ZDO0lBQ0UsMENBQTBDO0lBQ2xDLHNCQUE4QztJQUN0RCwwQ0FBMEM7SUFDbEMsWUFBMkI7SUFDbkMsMENBQTBDO0lBQ2xDLEdBQXNCO0lBQzlCLDBDQUEwQztJQUNsQyx5QkFBb0Q7UUFOcEQsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUU5QyxpQkFBWSxHQUFaLFlBQVksQ0FBZTtRQUUz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O2FBQ25EO1lBQ0Q7Z0JBQ0UsRUFBRSxFQUFFLENBQUM7Z0JBQ0wsU0FBUyxFQUFFLFFBQVE7Z0JBQ25CLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxJQUFJLFFBQVE7Z0JBQ3BDLFVBQVUsRUFBRSxlQUFlLENBQUMsSUFBSTtnQkFDaEMsOERBQThEO2dCQUM5RCxRQUFRLEVBQUUsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRTthQUNoRDtZQUNEO2dCQUNFLEVBQUUsRUFBRSxDQUFDO2dCQUNMLFNBQVMsRUFBRSxhQUFhO2dCQUN4QixPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsSUFBSSxjQUFjO2dCQUMvQyxVQUFVLEVBQUUsZUFBZSxDQUFDLElBQUk7Z0JBQ2hDLDhEQUE4RDtnQkFDOUQsUUFBUSxFQUFFLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUU7YUFDckQ7U0FDRixDQUFDO0lBQ0osQ0FBQzsrR0E3VFUsNEJBQTRCO21HQUE1Qiw0QkFBNEIsb0lDOUR6QyxxN0NBMkNBLDZ2V0RjWSxZQUFZLG1JQUFFLGtCQUFrQjs7NEZBSy9CLDRCQUE0QjtrQkFSeEMsU0FBUzsrQkFDRSw4QkFBOEIsY0FDNUIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGtCQUFrQixDQUFDLGlCQUc1QixpQkFBaUIsQ0FBQyxJQUFJO2lOQUs1QixhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSAnbHV4b24nO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICBEYXRhVGFibGVDb21wb25lbnQsXHJcbiAgVGFibGVBY3Rpb25zLFxyXG4gIFRhYmxlQ29sdW1uU2NoZW1hLFxyXG4gIFRhYmxlQ29sdW1uVHlwZSxcclxufSBmcm9tICdAaWVlZXNhLW5wbS9wcmVzZW50YXRpb24nO1xyXG5pbXBvcnQgeyBHbG9iYWxFcnJvckhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnQGllZWVzYS1ucG0vdXRpbGl0eSc7XHJcbmltcG9ydCB7IFJvc3RlckltcG9ydEpvYiB9IGZyb20gJy4uLy4uL21vZGVscy9yb3N0ZXItaW1wb3J0Lm1vZGVsJztcclxuaW1wb3J0IHsgUm9zdGVySW1wb3J0QXBpU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jvc3Rlci1pbXBvcnQtYXBpLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHcm91cHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZ3JvdXBzLnNlcnZpY2UnO1xyXG5pbXBvcnQgKiBhcyBjb25zdGFudHMgZnJvbSAnLi4vLi4vYXNzZXRzL2NvbnN0YW50cy5qc29uJztcclxuXHJcbi8qKiBBIHNpbmdsZSByb3cgc2hvd24gaW4gdGhlIFwiSW1wb3J0ZWQgRmlsZXNcIiB0YWJsZS4gKi9cclxuaW50ZXJmYWNlIFJvc3RlckltcG9ydEhpc3RvcnlSb3cge1xyXG4gIHRpbWVzdGFtcDogc3RyaW5nO1xyXG4gIHBlcnNvbkltcG9ydGVkOiBzdHJpbmc7XHJcbiAgZmlsZU5hbWU6IHN0cmluZztcclxuICBhZGRlZFJvd3M6IG51bWJlciB8IHN0cmluZztcclxuICBlcnJvcnM6IG51bWJlciB8IHN0cmluZztcclxuICB0YXJnZXRHcm91cDogc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogUm9zdGVyIGltcG9ydC1oaXN0b3J5IChcIlZpZXcgSGlzdG9yeVwiKSBkaWFsb2cgYm9keS5cclxuICpcclxuICogUmVuZGVyZWQgaW5zaWRlIHRoZSBzaGFyZWQgTW9kYWxDb21wb25lbnQgKHdoaWNoIHN1cHBsaWVzIHRoZVxyXG4gKiBcIuKGkCBCYWNrIHRvIFJvc3RlcnMgLyBWaWV3IEhpc3RvcnlcIiBicmVhZGNydW1iIHRpdGxlIHJvdyArIFggY2xvc2UpLiBTaG93cyB0aGVcclxuICogc2VsZWN0ZWQgZ3JvdXAncyBuYW1lIGFuZCBhbiBcIkltcG9ydGVkIEZpbGVzXCIgdGFibGUgbGlzdGluZyBwcmlvciByb3N0ZXJcclxuICogaW1wb3J0cy5cclxuICpcclxuICogRGF0YSBjb21lcyBmcm9tIHRoZSByZWFsIEJFIGVuZHBvaW50IHZpYSB7QGxpbmsgUm9zdGVySW1wb3J0QXBpU2VydmljZX06XHJcbiAqIGBHRVQgL3YxL2dyb3Vwcy9yb3N0ZXIvaW1wb3J0L2hpc3Rvcnkve2dyb3VwSWR9YC4gVGhlIHJlc3BvbnNlIGlzIGEgbGlzdCBvZlxyXG4gKiBgUm9zdGVySW1wb3J0Sm9iYCB3aG9zZSBKU09OIHZpZXcgZXhwb3NlcyBgZmlsZU5hbWVgLCBgc3VjY2Vzc1Jvd3NgLFxyXG4gKiBgZmFpbGVkUm93c2AsIGBzdGF0dXNgIGFuZCBpZHMuIFRoZSBcIlRpbWVzdGFtcFwiIGFuZCBcIlBlcnNvbiBJbXBvcnRlZFwiIGNvbHVtbnNcclxuICogbWFwIHRvIGBjcmVhdGVkT25gIC8gYGNyZWF0ZWRCeWA7IHRoZXNlIGFyZSBjdXJyZW50bHkgYEBKc29uSWdub3JlYCBvbiB0aGUgQkVcclxuICogZW50aXR5LCBzbyB1bnRpbCB0aGUgQkUgZXhwb3NlcyB0aGVtIHRoZSBjb2x1bW5zIHNob3cgYSBwbGFjZWhvbGRlciwgYW5kIHRoZXlcclxuICogcG9wdWxhdGUgYXV0b21hdGljYWxseSBvbmNlIHRoZSByZXNwb25zZSBjYXJyaWVzIHRoZSBmaWVsZHMuIFwiVGFyZ2V0IEdyb3VwXCJcclxuICogdXNlcyB0aGUgY3VycmVudCBncm91cCdzIG5hbWUgKGhpc3RvcnkgaXMgc2NvcGVkIHRvIG9uZSBncm91cCkuXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQGNsYXNzIFJvc3RlckltcG9ydEhpc3RvcnlDb21wb25lbnRcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWVlZXNhLXJvc3Rlci1pbXBvcnQtaGlzdG9yeScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBEYXRhVGFibGVDb21wb25lbnRdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yb3N0ZXItaW1wb3J0LWhpc3RvcnkuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3Jvc3Rlci1pbXBvcnQtaGlzdG9yeS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSb3N0ZXJJbXBvcnRIaXN0b3J5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIC8qKiBDYXJyaWVzIHRoZSB7IGdyb3VwSWQsIGdyb3VwTmFtZSB9IHBheWxvYWQgZnJvbSB0aGUgb3BlbmluZyBkaWFsb2cuICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBASW5wdXQoKSBjb21wb25lbnREYXRhOiBhbnk7XHJcblxyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgY29uc3RhbnRzOiBhbnkgPSBjb25zdGFudHM7XHJcbiAgc2NyZWVuVGV4dHMgPSB0aGlzLmNvbnN0YW50cz8ucm9zdGVySW1wb3J0SGlzdG9yeTtcclxuXHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcblxyXG4gIC8qKiBUYWJsZSBjb2x1bW4gZGVmaW5pdGlvbnMgZm9yIHRoZSBcIkltcG9ydGVkIEZpbGVzXCIgdGFibGUuICovXHJcbiAgY29sdW1uU2NoZW1hOiBUYWJsZUNvbHVtblNjaGVtYVtdID0gW107XHJcblxyXG4gIC8qKiBJbXBvcnQtaGlzdG9yeSByb3dzIG1hcHBlZCBmb3IgdGhlIHRhYmxlLiAqL1xyXG4gIHRhYmxlRGF0YTogUm9zdGVySW1wb3J0SGlzdG9yeVJvd1tdID0gW107XHJcblxyXG4gIC8qKiBUcnVlIHdoaWxlIHRoZSBoaXN0b3J5IHJlcXVlc3QgaXMgaW4gZmxpZ2h0LiAqL1xyXG4gIGlzTG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAvKiogSW5saW5lIGVycm9yIG1lc3NhZ2Ugd2hlbiB0aGUgaGlzdG9yeSByZXF1ZXN0IGZhaWxzLiAqL1xyXG4gIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8qKiBSZWFkLW9ubHkgdGFibGUg4oCUIG5vIHNlYXJjaCAvIGZpbHRlciAvIGFkZCAvIGVkaXQgLyBkZWxldGUgYWN0aW9ucy4gKi9cclxuICB0YWJsZUFjdGlvbnM6IFRhYmxlQWN0aW9ucyA9IHtcclxuICAgIGlzU2VhcmNoTmVlZGVkOiBmYWxzZSxcclxuICAgIGlzRmlsdGVyTmVlZGVkOiBmYWxzZSxcclxuICAgIGlzQWRkTmVlZGVkOiBmYWxzZSxcclxuICAgIGlzRWRpdE5lZWRlZDogZmFsc2UsXHJcbiAgICBpc0RlbGV0ZU5lZWRlZDogZmFsc2UsXHJcbiAgfTtcclxuXHJcbiAgLyoqIFBsYWNlaG9sZGVyIHNob3duIGZvciBmaWVsZHMgdGhlIEJFIGRvZXMgbm90IHJldHVybiAodGltZXN0YW1wIC8gcGVyc29uKS4gKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IHBsYWNlaG9sZGVyID1cclxuICAgIHRoaXMuc2NyZWVuVGV4dHM/LmVtcHR5RmllbGRQbGFjZWhvbGRlciA/PyAn4oCUJztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgcm9zdGVySW1wb3J0QXBpU2VydmljZTogUm9zdGVySW1wb3J0QXBpU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBncm91cFNlcnZpY2U6IEdyb3Vwc1NlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBnbG9iYWxFcnJvckhhbmRsZXJTZXJ2aWNlOiBHbG9iYWxFcnJvckhhbmRsZXJTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICAvKiogVGhlIGdyb3VwIG5hbWUgc2hvd24gYXMgdGhlIGhlYWRpbmcgYWJvdmUgdGhlIEltcG9ydGVkIEZpbGVzIHRhYmxlLiAqL1xyXG4gIGdldCBncm91cE5hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuY29tcG9uZW50RGF0YT8uZ3JvdXBOYW1lID8/XHJcbiAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlPy5nZXRTZWxlY3RlZEdyb3VwSW5mbygpPy5ncm91cE5hbWUgPz9cclxuICAgICAgJydcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKiogVGhlIGdyb3VwIGlkIHdob3NlIGhpc3RvcnkgaXMgZmV0Y2hlZC4gKi9cclxuICBwcml2YXRlIGdldCBncm91cElkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmNvbXBvbmVudERhdGE/Lmdyb3VwSWQgPz9cclxuICAgICAgKHRoaXMuZ3JvdXBTZXJ2aWNlPy5nZXRTZWxlY3RlZEdyb3VwSW5mbygpPy5ncm91cElkIGFzIHN0cmluZykgPz9cclxuICAgICAgJydcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBCdWlsZHMgdGhlIHRhYmxlIHNjaGVtYSBhbmQgbG9hZHMgdGhlIGltcG9ydCBoaXN0b3J5IGZyb20gdGhlIEJFLlxyXG4gICAqIEBtZW1iZXJvZiBSb3N0ZXJJbXBvcnRIaXN0b3J5Q29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmJ1aWxkQ29sdW1uU2NoZW1hKCk7XHJcbiAgICB0aGlzLnJvc3RlckltcG9ydEFwaVNlcnZpY2Uuc2V0QXBpQmFzZVVybCh0aGlzLmdyb3VwU2VydmljZT8uYXBpQmFzZVVybCk7XHJcbiAgICB0aGlzLmxvYWRJbXBvcnRIaXN0b3J5KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhbnMgdXAgc3Vic2NyaXB0aW9ucyB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkLlxyXG4gICAqIEBtZW1iZXJvZiBSb3N0ZXJJbXBvcnRIaXN0b3J5Q29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIHRoZSBpbXBvcnQgaGlzdG9yeSBmb3IgdGhlIGN1cnJlbnQgZ3JvdXAgYW5kIG1hcHMgaXQgdG8gdGFibGUgcm93cy5cclxuICAgKiBAbWVtYmVyb2YgUm9zdGVySW1wb3J0SGlzdG9yeUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGxvYWRJbXBvcnRIaXN0b3J5KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmdyb3VwSWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBudWxsO1xyXG4gICAgdGhpcy5yb3N0ZXJJbXBvcnRBcGlTZXJ2aWNlXHJcbiAgICAgIC5nZXRJbXBvcnRIaXN0b3J5KHRoaXMuZ3JvdXBJZClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoam9iczogUm9zdGVySW1wb3J0Sm9iW10pID0+IHtcclxuICAgICAgICAgIHRoaXMudGFibGVEYXRhID0gKGpvYnMgPz8gW10pLm1hcCgoam9iKSA9PiB0aGlzLm1hcEpvYlRvUm93KGpvYikpO1xyXG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNYXBzIGEgQkUgaW1wb3J0IGpvYiB0byBhIHRhYmxlIHJvdy4gVGltZXN0YW1wIGFuZCBQZXJzb24gSW1wb3J0ZWQgYXJlIG5vdFxyXG4gICAqIHByZXNlbnQgaW4gdGhlIHJlc3BvbnNlIChCRSBgQEpzb25JZ25vcmVgKSwgc28gdGhleSByZW5kZXIgYSBwbGFjZWhvbGRlci5cclxuICAgKiBUYXJnZXQgR3JvdXAgdXNlcyB0aGUgY3VycmVudCBncm91cCdzIG5hbWUgKGhpc3RvcnkgaXMgcGVyLWdyb3VwKS5cclxuICAgKiBAcGFyYW0ge1Jvc3RlckltcG9ydEpvYn0gam9iIC0gVGhlIEJFIGltcG9ydCBqb2IuXHJcbiAgICogQHJldHVybiB7Um9zdGVySW1wb3J0SGlzdG9yeVJvd31cclxuICAgKiBAbWVtYmVyb2YgUm9zdGVySW1wb3J0SGlzdG9yeUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgbWFwSm9iVG9Sb3coam9iOiBSb3N0ZXJJbXBvcnRKb2IpOiBSb3N0ZXJJbXBvcnRIaXN0b3J5Um93IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC8vIGNyZWF0ZWRPbiAvIGNyZWF0ZWRCeSBhcmUgcG9wdWxhdGVkIG9ubHkgb25jZSB0aGUgQkUgZXhwb3NlcyB0aGVtXHJcbiAgICAgIC8vIChjdXJyZW50bHkgQEpzb25JZ25vcmUpLiBVbnRpbCB0aGVuIHRoZXkgYXJlIHVuZGVmaW5lZCBhbmQgdGhlXHJcbiAgICAgIC8vIHBsYWNlaG9sZGVyIGlzIHNob3duLlxyXG4gICAgICB0aW1lc3RhbXA6IGpvYj8uY3JlYXRlZE9uXHJcbiAgICAgICAgPyB0aGlzLmZvcm1hdFRpbWVzdGFtcChqb2IuY3JlYXRlZE9uKVxyXG4gICAgICAgIDogdGhpcy5wbGFjZWhvbGRlcixcclxuICAgICAgcGVyc29uSW1wb3J0ZWQ6IGpvYj8uY3JlYXRlZEJ5ID8/IHRoaXMucGxhY2Vob2xkZXIsXHJcbiAgICAgIGZpbGVOYW1lOiBqb2I/LmZpbGVOYW1lID8/IHRoaXMucGxhY2Vob2xkZXIsXHJcbiAgICAgIGFkZGVkUm93czogam9iPy5zdWNjZXNzUm93cyA/PyAwLFxyXG4gICAgICBlcnJvcnM6IGpvYj8uZmFpbGVkUm93cyA/PyAwLFxyXG4gICAgICB0YXJnZXRHcm91cDogdGhpcy5ncm91cE5hbWUgfHwgdGhpcy5wbGFjZWhvbGRlcixcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JtYXRzIHRoZSBCRSBgY3JlYXRlZE9uYCB0aW1lc3RhbXAgZm9yIGRpc3BsYXksIGNvbnZlcnRpbmcgZnJvbSBVVEMgdG8gdGhlXHJcbiAgICogYnJvd3NlcidzIGxvY2FsIHRpbWV6b25lLlxyXG4gICAqXHJcbiAgICogVGhlIEFQSSBzZW5kcyBhIFVUQyB3YWxsLWNsb2NrIHN0cmluZyBpbiBgZGQvTU0veXl5eSBISDptbTpzc2Agd2l0aCBOTyB6b25lXHJcbiAgICogbWFya2VyLCBzbyBpdCBtdXN0IGJlIHBhcnNlZCBFWFBMSUNJVExZIGFzIFVUQyAob3RoZXJ3aXNlIGx1eG9uL0pTIHdvdWxkXHJcbiAgICogYXNzdW1lIGxvY2FsIHRpbWUgYW5kIHNoaWZ0IGl0IGluY29ycmVjdGx5KSwgdGhlbiByZW5kZXJlZCBpbiB0aGUgc3lzdGVtXHJcbiAgICogKGJyb3dzZXIpIHpvbmUgdmlhIHRvTG9jYWwoKS4gVXNlcyBsdXhvbiBwZXIgdGhlIHByb2plY3QncyBkYXRlIHN0YW5kYXJkc1xyXG4gICAqIChtb21lbnQgaXMgbGVnYWN5IOKAlCBub3QgdXNlZCBmb3IgbmV3IGNvZGUpLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIFRoZSByYXcgVVRDIGNyZWF0ZWRPbiB2YWx1ZSBmcm9tIHRoZSBCRS5cclxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBsb2NhbGl6ZWQgZGlzcGxheSBzdHJpbmcsIG9yIHRoZSBwbGFjZWhvbGRlciB3aGVuXHJcbiAgICogYmxhbmsvaW52YWxpZC5cclxuICAgKiBAbWVtYmVyb2YgUm9zdGVySW1wb3J0SGlzdG9yeUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZm9ybWF0VGltZXN0YW1wKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wbGFjZWhvbGRlcjtcclxuICAgIH1cclxuICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMucGFyc2VVdGNUaW1lc3RhbXAodmFsdWUpO1xyXG4gICAgaWYgKCFwYXJzZWQgfHwgIXBhcnNlZC5pc1ZhbGlkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnBsYWNlaG9sZGVyO1xyXG4gICAgfVxyXG4gICAgLy8gdG9Mb2NhbCgpIHNoaWZ0cyB0byB0aGUgYnJvd3NlcidzIHpvbmU7IGZvcm1hdCB0byBtYXRjaCB0aGUgRmlnbWE6XHJcbiAgICAvLyBcIjIwIEF1ZyAyMDI2IMK3IDM6NTUgUE1cIiAobm8gc2Vjb25kcywgMTItaG91ciB0aW1lIHdpdGggQU0vUE0pLlxyXG4gICAgcmV0dXJuIHBhcnNlZC50b0xvY2FsKCkudG9Gb3JtYXQoXCJkZCBMTEwgeXl5eSAnwrcnIGg6bW0gYVwiKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhcnNlcyBhIEJFIHRpbWVzdGFtcCBzdHJpbmcgaW50byBhIGx1eG9uIHtAbGluayBEYXRlVGltZX0sIHRvbGVyYW50IG9mIHRoZVxyXG4gICAqIHNldmVyYWwgc2hhcGVzIHRoZSBiYWNrZW5kIG1heSBzZW5kIHNvIHRoZSBVSSByZW5kZXJzIGNvcnJlY3RseSByZWdhcmRsZXNzXHJcbiAgICogb2Ygd2hpY2ggZm9ybWF0IGlzIHVzZWQuXHJcbiAgICpcclxuICAgKiBUaGUgYWdyZWVkL2V4cGVjdGVkIEJFIGZvcm1hdCBpcyBhIFVUQyB3YWxsLWNsb2NrIHN0cmluZyBgZGQvTU0veXl5eSBISDptbTpzc2BcclxuICAgKiB3aXRoIE5PIHpvbmUgbWFya2VyOyBpdCBpcyB0cmllZCBGSVJTVCBhbmQgcGFyc2VkIGV4cGxpY2l0bHkgaW4gVVRDLiBJZiB0aGVcclxuICAgKiBCRSBpbnN0ZWFkIHNlbmRzIGEgZGlmZmVyZW50IHNoYXBlLCB0aGVzZSBmYWxsYmFja3MgYXJlIHRyaWVkIGluIG9yZGVyOlxyXG4gICAqICAxLiBgZGQvTU0veXl5eSBISDptbTpzc2AgKFVUQykgICAgICAgIOKAlCB0aGUgZXhwZWN0ZWQvYWdyZWVkIGZvcm1hdFxyXG4gICAqICAyLiBJU08tODYwMSAoZS5nLiAyMDI2LTEwLTA5VDE0OjIzOjA1WiBvciB3aXRoIG9mZnNldCkg4oCUIHpvbmUgZnJvbSB0aGUgc3RyaW5nLFxyXG4gICAqICAgICBvciBhc3N1bWVkIFVUQyB3aGVuIHRoZSBzdHJpbmcgY2FycmllcyBub25lXHJcbiAgICogIDMuIFNRTCBkYXRldGltZSBgeXl5eS1NTS1kZCBISDptbTpzc2AgKFVUQylcclxuICAgKiAgNC4gYGRkL01NL3l5eXkgSEg6bW1gIChVVEMsIG5vIHNlY29uZHMpXHJcbiAgICogIDUuIFJGQy0yODIyIC8gSFRUUCBkYXRlXHJcbiAgICogIDYuIG5hdGl2ZSBKUyBEYXRlIChsYXN0IHJlc29ydCkg4oCUIGFzc3VtZWQgVVRDXHJcbiAgICogVGhlIGZpcnN0IGZvcm1hdCB0aGF0IHlpZWxkcyBhIHZhbGlkIERhdGVUaW1lIHdpbnMuIFJldHVybnMgbnVsbCB3aGVuIG5vbmVcclxuICAgKiBwYXJzZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgLSBUaGUgcmF3IHRpbWVzdGFtcCBzdHJpbmcgZnJvbSB0aGUgQkUuXHJcbiAgICogQHJldHVybiB7KERhdGVUaW1lIHwgbnVsbCl9XHJcbiAgICogQG1lbWJlcm9mIFJvc3RlckltcG9ydEhpc3RvcnlDb21wb25lbnRcclxuICAgKi9cclxuICBwcml2YXRlIHBhcnNlVXRjVGltZXN0YW1wKHZhbHVlOiBzdHJpbmcpOiBEYXRlVGltZSB8IG51bGwge1xyXG4gICAgY29uc3QgcmF3ID0gdmFsdWUudHJpbSgpO1xyXG4gICAgY29uc3QgdXRjID0geyB6b25lOiAndXRjJyB9O1xyXG5cclxuICAgIC8vIDEuIEV4cGVjdGVkL2FncmVlZCBmb3JtYXQgZmlyc3QuXHJcbiAgICBsZXQgcGFyc2VkID0gRGF0ZVRpbWUuZnJvbUZvcm1hdChyYXcsICdkZC9NTS95eXl5IEhIOm1tOnNzJywgdXRjKTtcclxuICAgIGlmIChwYXJzZWQuaXNWYWxpZCkge1xyXG4gICAgICByZXR1cm4gcGFyc2VkO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIDIuIElTTy04NjAxLiBzZXRab25lIGtlZXBzIGFuIGV4cGxpY2l0IG9mZnNldC9aOyBhIHpvbmVsZXNzIElTTyBzdHJpbmcgaXNcclxuICAgIC8vIGludGVycHJldGVkIGFzIFVUQyAobWF0Y2hlcyB0aGUgXCJ3YWxsLWNsb2NrIGlzIFVUQ1wiIGNvbnRyYWN0KS5cclxuICAgIHBhcnNlZCA9IERhdGVUaW1lLmZyb21JU08ocmF3LCB7IHNldFpvbmU6IHRydWUgfSk7XHJcbiAgICBpZiAocGFyc2VkLmlzVmFsaWQpIHtcclxuICAgICAgLy8gV2hlbiB0aGUgSVNPIHN0cmluZyBoYWQgbm8gem9uZSwgbHV4b24gdXNlZCB0aGUgc3lzdGVtIHpvbmU7IHJlLWludGVycHJldFxyXG4gICAgICAvLyBhcyBVVEMgc28gYSB6b25lbGVzcyB2YWx1ZSBpcyBzdGlsbCB0cmVhdGVkIGFzIFVUQy5cclxuICAgICAgcmV0dXJuIC9belpdfFsrLV1cXGR7Mn06P1xcZHsyfSQvLnRlc3QocmF3KVxyXG4gICAgICAgID8gcGFyc2VkXHJcbiAgICAgICAgOiBEYXRlVGltZS5mcm9tSVNPKHJhdywgdXRjKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAzLiBTUUwgZGF0ZXRpbWUuXHJcbiAgICBwYXJzZWQgPSBEYXRlVGltZS5mcm9tRm9ybWF0KHJhdywgJ3l5eXktTU0tZGQgSEg6bW06c3MnLCB1dGMpO1xyXG4gICAgaWYgKHBhcnNlZC5pc1ZhbGlkKSB7XHJcbiAgICAgIHJldHVybiBwYXJzZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gNC4gRGF5L21vbnRoL3llYXIgd2l0aG91dCBzZWNvbmRzLlxyXG4gICAgcGFyc2VkID0gRGF0ZVRpbWUuZnJvbUZvcm1hdChyYXcsICdkZC9NTS95eXl5IEhIOm1tJywgdXRjKTtcclxuICAgIGlmIChwYXJzZWQuaXNWYWxpZCkge1xyXG4gICAgICByZXR1cm4gcGFyc2VkO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIDUuIFJGQy0yODIyIC8gSFRUUCBkYXRlIChib3RoIGNhcnJ5IHRoZWlyIG93biB6b25lKS5cclxuICAgIHBhcnNlZCA9IERhdGVUaW1lLmZyb21SRkMyODIyKHJhdyk7XHJcbiAgICBpZiAocGFyc2VkLmlzVmFsaWQpIHtcclxuICAgICAgcmV0dXJuIHBhcnNlZDtcclxuICAgIH1cclxuICAgIHBhcnNlZCA9IERhdGVUaW1lLmZyb21IVFRQKHJhdyk7XHJcbiAgICBpZiAocGFyc2VkLmlzVmFsaWQpIHtcclxuICAgICAgcmV0dXJuIHBhcnNlZDtcclxuICAgIH1cclxuXHJcbiAgICAvLyA2LiBMYXN0IHJlc29ydDogbmF0aXZlIERhdGUsIHRyZWF0ZWQgYXMgVVRDLlxyXG4gICAgY29uc3QganNEYXRlID0gbmV3IERhdGUocmF3KTtcclxuICAgIGlmICghaXNOYU4oanNEYXRlLmdldFRpbWUoKSkpIHtcclxuICAgICAgcmV0dXJuIERhdGVUaW1lLmZyb21KU0RhdGUoanNEYXRlLCB1dGMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWFwcyBhIGZhaWxlZCBoaXN0b3J5IHJlcXVlc3QgdG8gYSB1c2VyLWZhY2luZyBpbmxpbmUgZXJyb3IgbWVzc2FnZS5cclxuICAgKiBBIDQwMyBnZXRzIHRoZSBwZXJtaXNzaW9uLXNwZWNpZmljIG1lc3NhZ2U7IG90aGVyIGVycm9ycyBnZXQgdGhlIGdlbmVyaWNcclxuICAgKiBvbmUgYW5kIGFyZSBmb3J3YXJkZWQgdG8gdGhlIGdsb2JhbCBoYW5kbGVyIGZvciBsb2dnaW5nL2ludGVyY2VwdG9ycy5cclxuICAgKiBAcGFyYW0geyp9IGVycm9yIC0gVGhlIEh0dHBFcnJvclJlc3BvbnNlLlxyXG4gICAqIEBtZW1iZXJvZiBSb3N0ZXJJbXBvcnRIaXN0b3J5Q29tcG9uZW50XHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMudGFibGVEYXRhID0gW107XHJcbiAgICBjb25zdCBzdGF0dXMgPSBlcnJvcj8uc3RhdHVzID8/IGVycm9yPy5lcnJvcj8uc3RhdHVzO1xyXG4gICAgaWYgKHN0YXR1cyA9PT0gNDAzKSB7XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID1cclxuICAgICAgICB0aGlzLnNjcmVlblRleHRzPy5mb3JiaWRkZW5NZXNzYWdlID8/XHJcbiAgICAgICAgJ1lvdSBkbyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHZpZXcgdGhlIGltcG9ydCBoaXN0b3J5IGZvciB0aGlzIGdyb3VwLic7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZXJyb3JNZXNzYWdlID1cclxuICAgICAgdGhpcy5zY3JlZW5UZXh0cz8uZXJyb3JNZXNzYWdlID8/XHJcbiAgICAgICdVbmFibGUgdG8gbG9hZCBpbXBvcnQgaGlzdG9yeS4gUGxlYXNlIHRyeSBhZ2Fpbi4nO1xyXG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcclxuICAgICAgdGhpcy5nbG9iYWxFcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluZXMgdGhlIFwiSW1wb3J0ZWQgRmlsZXNcIiB0YWJsZSBjb2x1bW5zLlxyXG4gICAqIEBtZW1iZXJvZiBSb3N0ZXJJbXBvcnRIaXN0b3J5Q29tcG9uZW50XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBidWlsZENvbHVtblNjaGVtYSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLnNjcmVlblRleHRzPy50YWJsZUNvbHVtbnM7XHJcbiAgICB0aGlzLmNvbHVtblNjaGVtYSA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGlkOiAxLFxyXG4gICAgICAgIGNvbHVtbkRlZjogJ3RpbWVzdGFtcCcsXHJcbiAgICAgICAgaGVhZGluZzogY29sdW1ucz8udGltZXN0YW1wID8/ICdUaW1lc3RhbXAnLFxyXG4gICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5URVhULFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgY2VsbERhdGE6IChlbGVtZW50OiBhbnkpID0+IGAke2VsZW1lbnQudGltZXN0YW1wfWAsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBpZDogMixcclxuICAgICAgICBjb2x1bW5EZWY6ICdwZXJzb25JbXBvcnRlZCcsXHJcbiAgICAgICAgaGVhZGluZzogY29sdW1ucz8ucGVyc29uSW1wb3J0ZWQgPz8gJ1BlcnNvbiBJbXBvcnRlZCcsXHJcbiAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlRFWFQsXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICBjZWxsRGF0YTogKGVsZW1lbnQ6IGFueSkgPT4gYCR7ZWxlbWVudC5wZXJzb25JbXBvcnRlZH1gLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaWQ6IDMsXHJcbiAgICAgICAgY29sdW1uRGVmOiAnZmlsZU5hbWUnLFxyXG4gICAgICAgIGhlYWRpbmc6IGNvbHVtbnM/LmZpbGVOYW1lID8/ICdGaWxlIE5hbWUnLFxyXG4gICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5URVhULFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgY2VsbERhdGE6IChlbGVtZW50OiBhbnkpID0+IGAke2VsZW1lbnQuZmlsZU5hbWV9YCxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGlkOiA0LFxyXG4gICAgICAgIGNvbHVtbkRlZjogJ2FkZGVkUm93cycsXHJcbiAgICAgICAgaGVhZGluZzogY29sdW1ucz8uYWRkZWRSb3dzID8/ICdBZGRlZCBSb3dzJyxcclxuICAgICAgICBjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGUuVEVYVCxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGNlbGxEYXRhOiAoZWxlbWVudDogYW55KSA9PiBgJHtlbGVtZW50LmFkZGVkUm93c31gLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaWQ6IDUsXHJcbiAgICAgICAgY29sdW1uRGVmOiAnZXJyb3JzJyxcclxuICAgICAgICBoZWFkaW5nOiBjb2x1bW5zPy5lcnJvcnMgPz8gJ0Vycm9ycycsXHJcbiAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlRFWFQsXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICBjZWxsRGF0YTogKGVsZW1lbnQ6IGFueSkgPT4gYCR7ZWxlbWVudC5lcnJvcnN9YCxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGlkOiA2LFxyXG4gICAgICAgIGNvbHVtbkRlZjogJ3RhcmdldEdyb3VwJyxcclxuICAgICAgICBoZWFkaW5nOiBjb2x1bW5zPy50YXJnZXRHcm91cCA/PyAnVGFyZ2V0IEdyb3VwJyxcclxuICAgICAgICBjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGUuVEVYVCxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGNlbGxEYXRhOiAoZWxlbWVudDogYW55KSA9PiBgJHtlbGVtZW50LnRhcmdldEdyb3VwfWAsXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiaWVlZXNhLXJvc3Rlci1pbXBvcnQtaGlzdG9yeVwiPlxyXG4gIDwhLS0gVGhlIFwi4oaQIEJhY2sgdG8gUm9zdGVycyAvIFZpZXcgSGlzdG9yeVwiIHRpdGxlIHJvdyArIFggY2xvc2UgYXJlIHJlbmRlcmVkXHJcbiAgICAgICBieSB0aGUgc2hhcmVkIE1vZGFsQ29tcG9uZW50IGFib3ZlIHRoaXMuIC0tPlxyXG5cclxuICA8IS0tIEdyb3VwIG5hbWUgaGVhZGluZyAoRmlnbWE6IGJvbGQgZ3JvdXAgbmFtZSBhYm92ZSB0aGUgdGFibGUpLiAtLT5cclxuICA8cCBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0LWhpc3RvcnlfX2dyb3VwLW5hbWVcIj5cclxuICAgIHt7IGdyb3VwTmFtZSB9fVxyXG4gIDwvcD5cclxuXHJcbiAgPCEtLSBcIkltcG9ydGVkIEZpbGVzXCIgc2VjdGlvbiB0aXRsZS4gLS0+XHJcbiAgPHAgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydC1oaXN0b3J5X19zZWN0aW9uLXRpdGxlXCI+XHJcbiAgICB7eyBzY3JlZW5UZXh0cz8uaW1wb3J0ZWRGaWxlc1RpdGxlID8/ICdJbXBvcnRlZCBGaWxlcycgfX1cclxuICA8L3A+XHJcblxyXG4gIDwhLS0gTG9hZGluZyBzdGF0ZSAtLT5cclxuICA8cFxyXG4gICAgKm5nSWY9XCJpc0xvYWRpbmdcIlxyXG4gICAgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydC1oaXN0b3J5X19zdGF0dXNcIlxyXG4gICAgcm9sZT1cInN0YXR1c1wiXHJcbiAgPlxyXG4gICAge3sgc2NyZWVuVGV4dHM/LmxvYWRpbmdNZXNzYWdlID8/ICdMb2FkaW5nIGltcG9ydCBoaXN0b3J5Li4uJyB9fVxyXG4gIDwvcD5cclxuXHJcbiAgPCEtLSBFcnJvciBzdGF0ZSAtLT5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cIiFpc0xvYWRpbmcgJiYgZXJyb3JNZXNzYWdlXCJcclxuICAgIGNsYXNzPVwiaWVlZXNhLXJvc3Rlci1pbXBvcnQtaGlzdG9yeV9fZXJyb3JcIlxyXG4gICAgcm9sZT1cImFsZXJ0XCJcclxuICA+XHJcbiAgICB7eyBlcnJvck1lc3NhZ2UgfX1cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBJbXBvcnRlZCBGaWxlcyB0YWJsZSAocmVhZC1vbmx5KS4gU2hvd24gb25jZSBsb2FkZWQgd2l0aG91dCBlcnJvci4gLS0+XHJcbiAgPGllZWVzYS1kYXRhLXRhYmxlXHJcbiAgICAqbmdJZj1cIiFpc0xvYWRpbmcgJiYgIWVycm9yTWVzc2FnZVwiXHJcbiAgICBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0LWhpc3RvcnlfX3RhYmxlXCJcclxuICAgIFt0YWJsZURhdGFJbmZvXT1cInRhYmxlRGF0YVwiXHJcbiAgICBbY29sdW1uU2NoZW1hSW5mb109XCJjb2x1bW5TY2hlbWFcIlxyXG4gICAgW3RhYmxlQWN0aW9uc109XCJ0YWJsZUFjdGlvbnNcIlxyXG4gICAgW2lzQ2VsbFRleHRPdmVyZmxvd0VsbGlwc2lzXT1cInRydWVcIlxyXG4gICAgW2NsYXNzTmFtZV09XCInaWVlZXNhLXJvc3Rlci1pbXBvcnQtaGlzdG9yeS10YWJsZSdcIlxyXG4gID48L2llZWVzYS1kYXRhLXRhYmxlPlxyXG48L2Rpdj5cclxuIl19