tango-app-ui-analyse-trax 4.0.44 → 4.0.45

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 (19) hide show
  1. package/esm2022/lib/components/audit-v2/configure/audit-v2-configure.component.mjs +3 -3
  2. package/esm2022/lib/components/audit-v2/dashboard/audit-v2-dashboard.component.mjs +26 -4
  3. package/esm2022/lib/components/audit-v2/detail/audit-v2-detail.component.mjs +9 -3
  4. package/esm2022/lib/components/audit-v2/flags/audit-v2-flags.component.mjs +4 -5
  5. package/esm2022/lib/components/audit-v2/flags/flag-detail/audit-v2-flag-detail.component.mjs +3 -6
  6. package/esm2022/lib/components/audit-v2/gallery/audit-v2-gallery.component.mjs +17 -3
  7. package/esm2022/lib/components/audit-v2/manage/audit-v2-manage.component.mjs +3 -3
  8. package/esm2022/lib/components/audit-v2/schedule/audit-v2-schedule-editor.component.mjs +5 -5
  9. package/fesm2022/{tango-app-ui-analyse-trax-audit-v2.module-CDqx9ARW.mjs → tango-app-ui-analyse-trax-audit-v2.module-ByfsYp5i.mjs} +64 -26
  10. package/fesm2022/tango-app-ui-analyse-trax-audit-v2.module-ByfsYp5i.mjs.map +1 -0
  11. package/fesm2022/{tango-app-ui-analyse-trax-tango-app-ui-analyse-trax-A_TSuMI_.mjs → tango-app-ui-analyse-trax-tango-app-ui-analyse-trax-D4J7rG9i.mjs} +2 -2
  12. package/fesm2022/{tango-app-ui-analyse-trax-tango-app-ui-analyse-trax-A_TSuMI_.mjs.map → tango-app-ui-analyse-trax-tango-app-ui-analyse-trax-D4J7rG9i.mjs.map} +1 -1
  13. package/fesm2022/tango-app-ui-analyse-trax.mjs +1 -1
  14. package/lib/components/audit-v2/dashboard/audit-v2-dashboard.component.d.ts +6 -0
  15. package/lib/components/audit-v2/detail/audit-v2-detail.component.d.ts +3 -3
  16. package/lib/components/audit-v2/flags/audit-v2-flags.component.d.ts +2 -1
  17. package/lib/components/audit-v2/gallery/audit-v2-gallery.component.d.ts +5 -0
  18. package/package.json +1 -1
  19. package/fesm2022/tango-app-ui-analyse-trax-audit-v2.module-CDqx9ARW.mjs.map +0 -1
@@ -896,13 +896,13 @@ export class AuditV2ConfigureComponent {
896
896
  return data;
897
897
  }
898
898
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuditV2ConfigureComponent, deps: [{ token: i1.TraxService }, { token: i2.GlobalStateService }, { token: i3.ActivatedRoute }, { token: i3.Router }, { token: i4.ToastService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
899
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AuditV2ConfigureComponent, selector: "lib-audit-v2-configure", host: { listeners: { "document:keydown.escape": "onEscape()" } }, ngImport: i0, template: "<div class=\"av2-page audit-configure\">\r\n\r\n <!-- Breadcrumb -->\r\n <div class=\"cf-crumb\">\r\n <a routerLink=\"/manage/trax/audit-v2/manage\">Manage Audit</a> \u203A Configure\r\n </div>\r\n\r\n <!-- Title + actions -->\r\n <div class=\"cf-header\">\r\n <div class=\"cf-header-text\">\r\n <span class=\"av2-sk av2-sk--title cf-sk-title\" *ngIf=\"loading\"></span>\r\n <div class=\"cf-title\" *ngIf=\"!loading\">{{ auditName || 'Audit' }}</div>\r\n <input type=\"text\" class=\"cf-desc\" placeholder=\"Enter Audit Description\" [(ngModel)]=\"description\">\r\n </div>\r\n <div class=\"av2-grow\"></div>\r\n <button type=\"button\" class=\"av2-btn av2-btn--primary cf-publish\" [disabled]=\"!canSave\" [title]=\"saveBlockedReason || publishBlockedReason\" (click)=\"publish()\">\r\n {{ saving ? 'Saving\u2026' : (published ? 'Save & Publish' : 'Publish') }}\r\n </button>\r\n <button type=\"button\" class=\"av2-btn av2-btn--ghost cf-draft\" [disabled]=\"!canSave\" [title]=\"saveBlockedReason\" (click)=\"saveDraft()\">Save as Draft</button>\r\n </div>\r\n\r\n <div class=\"cf-error cf-error--page\" *ngIf=\"loadError\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n {{ loadError }}\r\n </div>\r\n\r\n <!-- Chip picker: chips + input + suggestion list (one template, used for every user list) -->\r\n <ng-template #chipPicker let-list=\"list\" let-large=\"large\">\r\n <div class=\"cf-chipbox\" [class.cf-chipbox--lg]=\"large\" [class.is-open]=\"openChips === list\" (click)=\"focusChips(list, $event)\">\r\n <span class=\"cf-chip\" [class.cf-chip--lg]=\"large\" *ngFor=\"let u of chipsOf(list); let i = index\" [title]=\"u.e\">\r\n <span [class]=\"large ? 'cf-chip-tag' : 'cf-chip-ini'\">{{ u.i }}</span>{{ u.n }}\r\n <a class=\"cf-chip-x\" (click)=\"removeChip(list, i); $event.stopPropagation()\">\r\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\"><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line></svg>\r\n </a>\r\n </span>\r\n <input type=\"text\" class=\"cf-chip-input\" [class.cf-chip-input--lg]=\"large\" placeholder=\"Add user...\"\r\n [ngModel]=\"draftOf(list)\" (ngModelChange)=\"setDraft(list, $event)\" (focus)=\"focusChips(list, $event)\" (keyup.enter)=\"addChip(list)\">\r\n <div class=\"cf-suggest\" *ngIf=\"openChips === list\">\r\n <div class=\"cf-suggest-item\" *ngFor=\"let u of suggestions(list)\" (click)=\"addSuggestion(list, u, $event)\">\r\n <span class=\"cf-chip-ini\">{{ u.i }}</span>\r\n <span class=\"cf-suggest-name\">{{ u.n }}</span>\r\n <span class=\"cf-suggest-mail\">{{ u.e }}</span>\r\n </div>\r\n <div class=\"cf-suggest-empty\" *ngIf=\"!suggestions(list).length\">\r\n {{ users.length ? 'No matching user' : 'No users for this client' }}\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Dropdown: styled like the prototype instead of the browser's native select -->\r\n <ng-template #dropdown let-key=\"key\" let-options=\"options\">\r\n <span class=\"cf-select\" [class.is-open]=\"openSelect === key\">\r\n <button type=\"button\" class=\"cf-select-btn\" (click)=\"toggleSelect(key, $event)\">\r\n {{ selectLabel(key, options) }}\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"6 9 12 15 18 9\"></polyline></svg>\r\n </button>\r\n <div class=\"cf-select-menu\" *ngIf=\"openSelect === key\">\r\n <div class=\"cf-select-item\" *ngFor=\"let o of options\" [class.is-on]=\"isPicked(key, o)\"\r\n (click)=\"pick(key, o, $event)\">{{ o.label }}</div>\r\n </div>\r\n </span>\r\n </ng-template>\r\n\r\n <div class=\"cf-body\" *ngIf=\"!loadError\">\r\n <!-- Section tree -->\r\n <aside class=\"cf-left\">\r\n <lib-audit-v2-shimmer *ngIf=\"loading\" [rows]=\"3\"></lib-audit-v2-shimmer>\r\n\r\n <ng-container *ngIf=\"!loading\">\r\n <div class=\"cf-left-title\">{{ auditName || 'Audit' }}</div>\r\n\r\n <div class=\"cf-hint\" *ngIf=\"!sections.length\">No questions yet</div>\r\n <ng-container *ngFor=\"let s of sections\">\r\n <div class=\"cf-section\" [class.is-open]=\"s.open\" (click)=\"toggleSection(s)\">\r\n {{ s.label }}\r\n <span class=\"cf-rule\"></span>\r\n <span class=\"cf-chev\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" [class.rotate]=\"!s.open\">\r\n <polyline points=\"6 9 12 15 18 9\"></polyline>\r\n </svg>\r\n </span>\r\n </div>\r\n <div class=\"cf-items\" *ngIf=\"s.open && s.items.length\">\r\n <div *ngFor=\"let it of s.items\">{{ it }}</div>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"cf-schedule-title\">Schedule</div>\r\n <div class=\"cf-schedule\">\r\n <div>\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"2\"></rect>\r\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"></line>\r\n <line x1=\"8\" y1=\"3\" x2=\"8\" y2=\"6\"></line>\r\n <line x1=\"16\" y1=\"3\" x2=\"16\" y2=\"6\"></line>\r\n </svg>\r\n {{ schedule }}\r\n </div>\r\n <div>\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"12\" cy=\"12\" r=\"9\"></circle>\r\n <polyline points=\"12 7 12 12 15.5 14\"></polyline>\r\n </svg>\r\n {{ scheduleWindow }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </aside>\r\n\r\n <!-- Configuration -->\r\n <div class=\"cf-right\">\r\n\r\n <section class=\"cf-card\" *ngIf=\"loading\">\r\n <lib-audit-v2-shimmer [rows]=\"4\"></lib-audit-v2-shimmer>\r\n </section>\r\n\r\n <ng-container *ngIf=\"!loading\">\r\n\r\n <!-- ===== Advance Configuration ===== -->\r\n <section class=\"cf-card\">\r\n <div class=\"cf-block-head\">\r\n <span class=\"cf-block-title\">Advance Configuration</span>\r\n <span class=\"cf-rule\"></span>\r\n <span class=\"cf-chev\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"6 9 12 15 18 9\"></polyline></svg>\r\n </span>\r\n </div>\r\n\r\n <!-- Audit Owner -->\r\n <div>\r\n <div class=\"cf-label\">Audit Owner</div>\r\n <div class=\"cf-hint\">Owners get access to manage the audit</div>\r\n </div>\r\n <div class=\"cf-row\">\r\n <span class=\"cf-field\">Can be managed by</span>\r\n <ng-container *ngTemplateOutlet=\"chipPicker; context: { list: 'owners', large: false }\"></ng-container>\r\n </div>\r\n\r\n <!-- Approver -->\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Approver</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"approverOn\" (click)=\"toggleApprover()\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--tight\">By enabling, the users will be able to approve the audit</div>\r\n <div class=\"cf-row\" *ngIf=\"approverOn\">\r\n <span class=\"cf-field\">To be approved by</span>\r\n <ng-container *ngTemplateOutlet=\"chipPicker; context: { list: 'approvers', large: false }\"></ng-container>\r\n </div>\r\n <div class=\"cf-error\" *ngIf=\"approverError\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n {{ approverError }}\r\n </div>\r\n <div class=\"cf-info cf-info--wrap\" *ngIf=\"!approverOn && approvers.length\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line></svg>\r\n Approver is off, so the {{ approvers.length }} approver{{ approvers.length === 1 ? '' : 's' }} added will be removed when you save. Turn Approver back on to keep {{ approvers.length === 1 ? 'it' : 'them' }}.\r\n </div>\r\n <div class=\"cf-info cf-info--wrap\" *ngIf=\"!approverOn && !approvers.length\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line></svg>\r\n Approver is off, so submitted audits are not sent for approval. Turn it on to add approvers or to send flags and reports to them.\r\n </div>\r\n\r\n <!-- Reminder -->\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Reminder</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"reminderOn\" (click)=\"toggleReminder()\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--tight\">By enabling, the users will be reminded in the selected interval</div>\r\n <div class=\"cf-inner\" *ngIf=\"reminderOn\">\r\n <div class=\"cf-inline\">\r\n Notify user before\r\n <span class=\"cf-reminder\" *ngFor=\"let m of reminders; let i = index\">\r\n <lib-audit-v2-select class=\"cf-reminder-select\" [value]=\"m\" [options]=\"reminderOpts[i] || []\" [searchable]=\"false\"\r\n [ariaLabel]=\"'Reminder ' + (i + 1) + ' in minutes'\" (changed)=\"setReminder(i, $event.target.value)\"></lib-audit-v2-select>\r\n <a class=\"cf-chip-x\" *ngIf=\"reminders.length > 1\" title=\"Remove reminder\" (click)=\"removeReminder(i)\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\"><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line></svg>\r\n </a>\r\n </span>\r\n <button type=\"button\" class=\"cf-icon-btn\" *ngIf=\"reminders.length < maxReminders\" title=\"Add reminder\" (click)=\"addReminder()\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"></line><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line></svg>\r\n </button>\r\n </div>\r\n <div class=\"cf-info\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line></svg>\r\n Send alerts {{ reminderSummary }} mins before the audit end time\r\n </div>\r\n </div>\r\n\r\n <!-- Notify Flags -->\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Notify Flags</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"notifyFlagsOn\" (click)=\"toggleNotifyFlags()\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--tight\">By enabling, all flags will be sent as an email</div>\r\n <ng-container *ngIf=\"notifyFlagsOn\">\r\n <div class=\"cf-checks\">\r\n <span class=\"cf-checks-label\">Send To</span>\r\n <label class=\"cf-check\" [class.is-blocked]=\"!hasApprovers && !notifySendApprover\" (click)=\"toggleSendApprover('notifySendApprover')\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"notifySendApprover\">\r\n <svg *ngIf=\"notifySendApprover\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Approver\r\n </label>\r\n <label class=\"cf-check\" (click)=\"notifySendCustom = !notifySendCustom\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"notifySendCustom\">\r\n <svg *ngIf=\"notifySendCustom\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Custom\r\n </label>\r\n </div>\r\n <ng-container *ngIf=\"notifySendCustom\">\r\n <ng-container *ngTemplateOutlet=\"chipPicker; context: { list: 'notifyUsers', large: false }\"></ng-container>\r\n </ng-container>\r\n <div class=\"cf-error\" *ngIf=\"notifyFlagsError\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n {{ notifyFlagsError }}\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Notify on Recurring Flags -->\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Notify on Recurring Flags</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"recurringFlagsOn\" (click)=\"toggleRecurringFlags()\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--tight\">When enabled, emails are sent for recurring flags based on the configured threshold</div>\r\n\r\n <div class=\"cf-inner\" *ngIf=\"recurringFlagsOn\">\r\n <div class=\"cf-inline\">\r\n Send Email if the same question is flagged\r\n <ng-container *ngTemplateOutlet=\"dropdown; context: { key: 'recurringThreshold', options: thresholdOpts }\"></ng-container>\r\n times by the same store\r\n </div>\r\n <div class=\"cf-info\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line></svg>\r\n Once the threshold is reached and an email is sent, the flag count resets to zero\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"recurringFlagsOn\">\r\n <div class=\"cf-checks\">\r\n <span class=\"cf-checks-label\">Send To</span>\r\n <label class=\"cf-check\" [class.is-blocked]=\"!hasApprovers && !recurringSendApprover\" (click)=\"toggleSendApprover('recurringSendApprover')\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"recurringSendApprover\">\r\n <svg *ngIf=\"recurringSendApprover\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Approver\r\n </label>\r\n <label class=\"cf-check\" (click)=\"toggleRecurringCustom()\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"recurringSendCustom\">\r\n <svg *ngIf=\"recurringSendCustom\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Custom\r\n </label>\r\n <label class=\"cf-check\" (click)=\"recurringSameAsNotify = !recurringSameAsNotify\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"recurringSameAsNotify\">\r\n <svg *ngIf=\"recurringSameAsNotify\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Use same users from Notify Flags\r\n </label>\r\n </div>\r\n <ng-container *ngIf=\"recurringSendCustom\">\r\n <ng-container *ngTemplateOutlet=\"chipPicker; context: { list: 'recurringUsers', large: false }\"></ng-container>\r\n </ng-container>\r\n <div class=\"cf-info\" *ngIf=\"recurringSameAsNotify\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line></svg>\r\n {{ notifyRecipientsLabel }}\r\n </div>\r\n <div class=\"cf-error\" *ngIf=\"recurringFlagsError\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n {{ recurringFlagsError }}\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Daily report -->\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Enable - Daily Report</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"dailyReportOn\" (click)=\"toggleDailyReport()\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--tight\">By Enabling, compliance score will be sent as an email to the above users</div>\r\n <ng-container *ngIf=\"dailyReportOn\">\r\n <div class=\"cf-checks\">\r\n <span class=\"cf-checks-label\">Send To</span>\r\n <label class=\"cf-check\" [class.is-blocked]=\"!hasApprovers && !dailySendApprover\" (click)=\"toggleSendApprover('dailySendApprover')\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"dailySendApprover\">\r\n <svg *ngIf=\"dailySendApprover\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Approver\r\n </label>\r\n <label class=\"cf-check\" (click)=\"dailySendCustom = !dailySendCustom\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"dailySendCustom\">\r\n <svg *ngIf=\"dailySendCustom\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Custom\r\n </label>\r\n </div>\r\n <ng-container *ngIf=\"dailySendCustom\">\r\n <ng-container *ngTemplateOutlet=\"chipPicker; context: { list: 'dailyUsers', large: false }\"></ng-container>\r\n </ng-container>\r\n <label class=\"cf-check\" (click)=\"sharePostApproval = !sharePostApproval\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"sharePostApproval\">\r\n <svg *ngIf=\"sharePostApproval\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Share Report Post Approval\r\n </label>\r\n <div class=\"cf-error\" *ngIf=\"dailyReportError\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n {{ dailyReportError }}\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Export submission: Tango users only, as the v1 Configure (its stored value is kept for everyone else). -->\r\n <div class=\"cf-grid2\" *ngIf=\"access.isTango\">\r\n <div class=\"cf-stack cf-stack--tight\">\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Export Submission</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"exportSubmissionOn\" (click)=\"exportSubmissionOn = !exportSubmissionOn\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint\">Enable this to allow audit submitters to download their submission as a PDF file</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Redo validity -->\r\n <div class=\"cf-grid2\">\r\n <div class=\"cf-stack\">\r\n <div class=\"cf-label\">Redo Validity</div>\r\n <div class=\"cf-inline\">\r\n Redo valid for\r\n <ng-container *ngTemplateOutlet=\"dropdown; context: { key: 'redoValidFor', options: redoDayOpts }\"></ng-container>\r\n Day from Redo creation\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Auto create task -->\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Auto Create Task for Flags</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"autoCreateTaskOn\" (click)=\"autoCreateTaskOn = !autoCreateTaskOn\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--tight\">By enabling, a task is automatically created for every flagged question in the audit</div>\r\n\r\n <!-- Who gets the task and how long it stays open (as the Checklist Configure page) -->\r\n <div class=\"cf-autotask\" *ngIf=\"autoCreateTaskOn\">\r\n <div class=\"cf-autotask-title\">Task Assignee</div>\r\n <div class=\"cf-hint cf-hint--tight\">Choose who the flagged task is assigned to</div>\r\n <div class=\"cf-autotask-choices\">\r\n <button type=\"button\" class=\"cf-choice\" [class.is-on]=\"taskAssignee === 'submitter'\" (click)=\"taskAssignee = 'submitter'\">\r\n <span class=\"cf-radio\" [class.is-on]=\"taskAssignee === 'submitter'\"><span></span></span>\r\n <span class=\"cf-choice-text\">\r\n <span class=\"cf-choice-title\">Audit Submitter</span>\r\n <span class=\"cf-choice-sub\">Task is assigned to the user who filled the audit</span>\r\n </span>\r\n </button>\r\n <button type=\"button\" class=\"cf-choice\" [class.is-on]=\"taskAssignee === 'store'\" (click)=\"taskAssignee = 'store'\">\r\n <span class=\"cf-radio\" [class.is-on]=\"taskAssignee === 'store'\"><span></span></span>\r\n <span class=\"cf-choice-text\">\r\n <span class=\"cf-choice-title\">Store User</span>\r\n <span class=\"cf-choice-sub\">Task is assigned to the user mapped to the flagged store</span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"cf-autotask-title\">Task Validity</div>\r\n <div class=\"cf-autotask-validity\">\r\n <span>Task valid for</span>\r\n <lib-audit-v2-select class=\"cf-validity-select\" [(ngModel)]=\"taskValidity\" [options]=\"taskValidityOptions\"\r\n [searchable]=\"false\" ariaLabel=\"Task validity in days\"></lib-audit-v2-select>\r\n <span>days from task creation</span>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <!-- ===== Audit Configuration ===== -->\r\n <div class=\"cf-divider-head\">\r\n <span class=\"cf-block-title\">Audit Configuration</span>\r\n <span class=\"cf-rule\"></span>\r\n </div>\r\n\r\n <section class=\"cf-card cf-card--lg\">\r\n <div class=\"cf-block-title\">Submission &amp; Visibility</div>\r\n\r\n <!-- cf-box--open: the dispute-window and response-delay menus must not be clipped by the box -->\r\n <div class=\"cf-box cf-box--open\">\r\n <div class=\"cf-box-row\">\r\n <button type=\"button\" class=\"cf-switch cf-switch--top\" [class.is-on]=\"showResponseInApp\"\r\n (click)=\"showResponseInApp = !showResponseInApp\"><span></span></button>\r\n <div class=\"cf-stack cf-stack--xs\">\r\n <div class=\"cf-label\">Show Response in Mobile App</div>\r\n <div class=\"cf-hint\">By enabling this option, store users can view the audit response in the Mobile App.</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"cf-box-sub\" *ngIf=\"showResponseInApp\">\r\n <div class=\"cf-stack cf-stack--xs\">\r\n <div class=\"cf-label-sm\">Response Visibility</div>\r\n <div class=\"cf-hint\">Choose when the response becomes visible to store users</div>\r\n </div>\r\n\r\n <div class=\"cf-options\">\r\n <div class=\"cf-option\" [class.is-on]=\"responseVisibility === 'pre'\" (click)=\"responseVisibility = 'pre'\">\r\n <span class=\"cf-radio\" [class.is-on]=\"responseVisibility === 'pre'\"></span>\r\n <div class=\"cf-stack cf-stack--sm\">\r\n <div class=\"cf-label-sm\">Pre-approval</div>\r\n <div class=\"cf-hint\">The audit response will be visible to store users before it is approved.</div>\r\n <div class=\"cf-inline cf-inline--top\">\r\n Show response\r\n <ng-container *ngTemplateOutlet=\"dropdown; context: { key: 'respDelay', options: respDelayOpts }\"></ng-container>\r\n after submission\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"cf-option\" [class.is-on]=\"responseVisibility === 'post'\" (click)=\"responseVisibility = 'post'\">\r\n <span class=\"cf-radio\" [class.is-on]=\"responseVisibility === 'post'\"></span>\r\n <div class=\"cf-stack cf-stack--sm\">\r\n <div class=\"cf-label-sm\" [class.cf-muted]=\"responseVisibility !== 'post'\">Post-approval</div>\r\n <div class=\"cf-hint\">Once the response is approved, it will automatically be displayed in the Mobile App. Store users cannot raise a dispute.</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"cf-box-sep\">\r\n <ng-container *ngIf=\"responseVisibility === 'pre'\">\r\n <div class=\"cf-box-row cf-box-row--flush\">\r\n <button type=\"button\" class=\"cf-switch cf-switch--top\" [class.is-on]=\"disputeOn\" (click)=\"disputeOn = !disputeOn\"><span></span></button>\r\n <div class=\"cf-stack cf-stack--xs\">\r\n <div class=\"cf-label-sm\">Dispute Configuration</div>\r\n <div class=\"cf-hint cf-hint--wrap\">When enabled, the store team can raise a dispute against the auditor's submission once the response becomes visible to them.</div>\r\n </div>\r\n </div>\r\n <div class=\"cf-box cf-box--nested\" *ngIf=\"disputeOn\">\r\n <div class=\"cf-inline\">\r\n Dispute window\r\n <ng-container *ngTemplateOutlet=\"dropdown; context: { key: 'disputeWindow', options: dispWindowOpts }\"></ng-container>\r\n from when the response becomes visible\r\n </div>\r\n <div class=\"cf-info cf-info--wrap\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line></svg>\r\n Disputes raised inside this window go to the approver. Approved disputes revise the answer and the compliance score.\r\n </div>\r\n <div class=\"cf-error\" *ngIf=\"!hasApprovers\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n No approver is set, so no one can review disputes. Turn on Approver and add an approver.\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"responseVisibility === 'post'\">\r\n <div class=\"cf-stack cf-stack--sm\">\r\n <div class=\"cf-label-sm cf-muted\">Dispute Configuration</div>\r\n <div class=\"cf-info cf-info--wrap\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line></svg>\r\n Disputes are not available when responses are shown post-approval.\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Pre-submission access -->\r\n <div class=\"cf-box cf-box--pad\">\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Pre-Submission Access</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"preSubmissionAccessOn\" (click)=\"preSubmissionAccessOn = !preSubmissionAccessOn\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--wrap\">Users added here can view Open and In Progress audits until submission. The Schedule Info tab is also visible only to these users.</div>\r\n <ng-container *ngIf=\"preSubmissionAccessOn\">\r\n <div class=\"cf-row cf-row--top\">\r\n <span class=\"cf-field\">Visible to</span>\r\n <ng-container *ngTemplateOutlet=\"chipPicker; context: { list: 'preSubmissionUsers', large: false }\"></ng-container>\r\n </div>\r\n <div class=\"cf-error cf-error--indent\" *ngIf=\"preSubmissionEmpty\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n Add at least one user\r\n </div>\r\n </ng-container>\r\n </div>\r\n </section>\r\n\r\n <!-- ===== Scoring ===== -->\r\n <section class=\"cf-card cf-card--lg\">\r\n <div class=\"cf-block-title\">Scoring</div>\r\n <div class=\"cf-box cf-box--pad\">\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Pass/Fail Score Setup</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"passFailOn\" (click)=\"passFailOn = !passFailOn\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--wrap\">Set the compliance score an audit must reach to be marked {{ passLabel }}. Anything below it is marked {{ failLabel }}.</div>\r\n <div class=\"cf-row cf-row--wrap cf-row--top\" *ngIf=\"passFailOn\">\r\n <span class=\"cf-field\">Minimum score to {{ passLabel }}</span>\r\n <label class=\"cf-num\">\r\n <input type=\"number\" min=\"1\" max=\"100\" [(ngModel)]=\"passThreshold\">\r\n <span>%</span>\r\n </label>\r\n <span class=\"cf-pill cf-pill--pass\">{{ passLabel }} \u2265 {{ passThreshold }}%</span>\r\n <span class=\"cf-pill cf-pill--fail\">{{ failLabel }} &lt; {{ passThreshold }}%</span>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <!-- ===== Approver Controls ===== -->\r\n <section class=\"cf-card cf-card--lg\">\r\n <div class=\"cf-block-title\">Approver Controls</div>\r\n <div class=\"cf-stack\">\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Edit Submitted Audit</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"editSubmittedOn\" (click)=\"toggleEditSubmitted()\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--tight\">Allow Approvers to edit submitted Audit</div>\r\n <ng-container *ngIf=\"editSubmittedOn\">\r\n <ng-container *ngTemplateOutlet=\"chipPicker; context: { list: 'editUsers', large: true }\"></ng-container>\r\n <div class=\"cf-error\" *ngIf=\"editSubmittedError\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n {{ editSubmittedError }}\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"cf-grid2\">\r\n <div class=\"cf-stack\">\r\n <div class=\"cf-label\">Redo Extension</div>\r\n <div class=\"cf-inline\">\r\n Extend redo up to\r\n <ng-container *ngTemplateOutlet=\"dropdown; context: { key: 'redoExtension', options: redoExtensionOpts }\"></ng-container>\r\n Days till approval\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <!-- ===== User Verification ===== -->\r\n <section class=\"cf-card\">\r\n <div class=\"cf-block-title\">User Verification Configuration</div>\r\n <div class=\"cf-box cf-box--row\">\r\n <button type=\"button\" class=\"cf-switch cf-switch--top\" [class.is-on]=\"requirePhoto\" (click)=\"requirePhoto = !requirePhoto\"><span></span></button>\r\n <div class=\"cf-stack cf-stack--xs\">\r\n <div class=\"cf-label\">Require Photo Capture</div>\r\n <div class=\"cf-hint\">By enabling, users must capture their photo to complete submission</div>\r\n </div>\r\n </div>\r\n <div class=\"cf-box cf-box--row\">\r\n <button type=\"button\" class=\"cf-switch cf-switch--top\" [class.is-on]=\"requireAcknowledgment\" (click)=\"requireAcknowledgment = !requireAcknowledgment\"><span></span></button>\r\n <div class=\"cf-stack cf-stack--xs\">\r\n <div class=\"cf-label\">Require User Acknowledgment</div>\r\n <div class=\"cf-hint\">By enabling, users must type their name as acknowledgment to complete submission</div>\r\n </div>\r\n </div>\r\n </section>\r\n </ng-container>\r\n\r\n </div>\r\n </div>\r\n\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.av2-page{display:flex;flex-direction:column;gap:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;color:#101828;-webkit-font-smoothing:antialiased}.av2-page *,.av2-page *:before,.av2-page *:after{box-sizing:border-box}.av2-card{background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #f1f1f4,0 3px 4px #00000008;padding:20px 24px;display:flex;flex-direction:column;gap:20px}.av2-card--log{padding:20px 24px 24px;gap:18px}.av2-card--table{padding:20px 24px 24px;gap:16px}.av2-card-head{display:flex;align-items:flex-start;gap:16px;flex-wrap:wrap}.av2-card-head--center{align-items:center;gap:12px}.av2-title-block{display:flex;flex-direction:column;gap:4px;flex:1;min-width:220px}.av2-card-title{font-size:20px;line-height:30px;font-weight:600;color:#101828;display:flex;align-items:center;gap:10px}.av2-card-title--grow{flex:1;min-width:180px}.av2-card-sub{font-size:14px;line-height:20px;color:#667085}.av2-grow{flex:1}.av2-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}.av2-grid-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:20px}.av2-grid-4{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px}.av2-stat-card{background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #f1f1f4,0 3px 4px #00000008;padding:10px}.av2-stat{padding:8px 16px;border-radius:6px;border-bottom:2px solid #EAECF0;background:radial-gradient(206.89% 107.47% at 16.16% 32.77%,#fff6,#45bbfe33),#f2f4f7;box-shadow:0 4px 10px #0000000d;display:flex;align-items:center;gap:20px}.av2-stat-value{font-size:30px;line-height:38px;font-weight:600;color:#101828}.av2-stat-label{font-size:14px;line-height:20px;font-weight:500;color:#344054}.av2-kpi{background:#fff;border-radius:10px;box-shadow:inset 0 0 0 1px #eaecf0,0 1px 2px #1018280d;display:flex;flex-direction:column;overflow:hidden}.av2-kpi.is-primary{box-shadow:inset 0 0 0 1px #99dbff,0 1px 2px #1018280d}.av2-kpi.is-primary .av2-kpi-head{background:#eaf8ff}.av2-kpi-head{padding:14px 18px;background:#f9fafb;font-size:16px;line-height:24px;font-weight:500;color:#101828}.av2-kpi-body{padding:16px 18px 18px;display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}.av2-kpi-value{font-size:20px;line-height:30px;font-weight:700;color:#101828}.av2-kpi-delta{display:flex;align-items:center;gap:4px;font-size:12px;color:#039855}.av2-kpi-delta.is-down{color:#d92d20}.av2-kpi-note{font-size:12px;color:#667085}.av2-ocard{padding:8px;border-radius:12px;border:1px solid #D0D5DD;background:#fff;display:flex;flex-direction:column;min-width:0;height:100%}.av2-ocard-head{min-height:70px;padding:10px 14px;border-radius:6px;border-bottom:2px solid #EAECF0;background:radial-gradient(206.89% 107.47% at 16.16% 32.77%,#fff6,#45bbfe33),#f2f4f7;box-shadow:0 4px 10px #0000000d;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;gap:2px;min-width:0}.av2-ocard-head--row{flex-direction:row;align-items:center;justify-content:flex-start;gap:12px}.av2-ocard-count{font-size:30px;line-height:38px;font-weight:600;color:#101828;white-space:nowrap}.av2-ocard-text{font-size:14px;line-height:20px;font-weight:500;color:#344054}.av2-ocard-body{flex:1;padding:12px 14px;display:flex;gap:16px;min-width:0}.av2-ocard-cell{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.av2-ocard-cell--center{align-items:center;text-align:center}.av2-ocard-sub{margin:4px 0;font-size:20px;line-height:30px;font-weight:700;color:#101828}.av2-ocard-note{font-size:14px;line-height:20px;font-weight:400;color:#667085}.av2-ocard-delta{margin-top:6px;display:inline-flex;align-items:center;gap:6px;font-size:12px;line-height:18px;font-weight:400;color:#1d2939}.av2-ocard-delta b{font-weight:600;color:#667085}.av2-ocard-delta svg{flex-shrink:0;color:#039855}.av2-ocard-delta.is-down svg{color:#d92d20}.av2-search{position:relative;display:flex;align-items:center;gap:8px;height:44px;padding:0 12px;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;color:#98a2b3;font-size:14px;flex-shrink:0}.av2-search svg{flex-shrink:0}.av2-search input{flex:1;min-width:0;height:100%;border:0;outline:0;padding:0;background:transparent;font:inherit;font-size:14px;font-weight:500;color:#101828}.av2-search input::placeholder{color:#98a2b3}.av2-search:focus-within{box-shadow:inset 0 0 0 1px #66c8ff,0 0 0 4px #eaf8ff}.av2-search--sm{width:300px}.av2-search--md{width:320px}.av2-search--lg{width:340px}.av2-select{height:44px;padding:0 36px 0 12px;border:0;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;font:inherit;font-size:14px;font-weight:500;color:#344054;cursor:pointer;appearance:none;-webkit-appearance:none;background-image:url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23344054' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>\");background-repeat:no-repeat;background-position:right 12px center;flex-shrink:0}.av2-select:focus{outline:0;box-shadow:inset 0 0 0 1px #66c8ff,0 0 0 4px #eaf8ff}.av2-select--sm{width:180px}.av2-chip{display:flex;align-items:center;gap:8px;height:44px;padding:0 12px;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;font-size:14px;color:#344054;white-space:nowrap;flex-shrink:0}.av2-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:44px;padding:0 16px;border:0;border-radius:8px;font-family:inherit;font-size:14px;line-height:20px;font-weight:600;cursor:pointer;white-space:nowrap;flex-shrink:0;transition:background-color .15s cubic-bezier(.4,0,.2,1)}.av2-btn svg{flex-shrink:0}.av2-btn:disabled{opacity:.55;cursor:not-allowed}.av2-btn--ghost{background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;color:#344054;font-weight:500}.av2-btn--ghost:hover:not(:disabled){background:#f9fafb}.av2-btn--primary{background:#00a3ff;color:#fff;font-size:16px;line-height:24px}.av2-btn--primary:hover:not(:disabled){background:#009bf3}.av2-btn--sm{height:36px;padding:0 14px;font-size:13px}.av2-btn--wide{padding:0 18px}.av2-tabs{display:flex;align-items:center;gap:6px}.av2-tab{height:44px;padding:0 26px;border:0;border-radius:6px;background:transparent;display:inline-flex;align-items:center;justify-content:center;font-family:inherit;font-size:16px;font-weight:500;color:#475467;cursor:pointer}.av2-tab.is-active{background:#eaf8ff;color:#009bf3;font-weight:500}.av2-badge{display:inline-flex;align-items:center;height:22px;padding:2px 8px;border-radius:16px;background:#eaf8ff;color:#009bf3;font-size:12px;font-weight:500;line-height:18px;white-space:nowrap}.av2-badge--count{height:22px;padding:0 8px}.av2-badge--success{background:#ecfdf3;color:#027a48}.av2-badge--error{background:#fef3f2;color:#b42318}.av2-badge--warning{background:#fffaeb;color:#b54708}.av2-badge--gray{background:#f2f4f7;color:#344054}.av2-badge--purple{background:#f9f5ff;color:#5925dc}.av2-link{color:#00a3ff;font-size:14px;font-weight:500;text-decoration:underline;cursor:pointer}.av2-link:hover{color:#009bf3;text-decoration:underline}.av2-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.av2-muted{color:#667085}.av2-dim{color:#475467}.av2-faint{color:#98a2b3}table tbody td.av2-dim{color:#475467}table tbody td.av2-faint{color:#98a2b3}.av2-table-wrap{overflow-x:auto}.av2-table{width:100%;border-collapse:separate;border-spacing:0;margin:0}.av2-table thead th{background:#f9fafb;padding:12px;font-size:12px;line-height:18px;font-weight:500;color:#667085;text-align:left;text-transform:none;letter-spacing:0;border:0;white-space:nowrap}.av2-table thead th:first-child{border-radius:8px 0 0}.av2-table thead th:last-child{border-radius:0 8px 0 0}.av2-table tbody td{padding:16px 12px;border:0;border-bottom:1px solid #F2F4F7;font-size:14px;line-height:20px;font-weight:500;color:#101828;vertical-align:middle}.av2-table .av2-th-sort{display:inline-flex;align-items:center;gap:4px}.av2-table .av2-cell-icon{display:flex;align-items:center;gap:8px;min-width:0}.av2-table .av2-cell-icon svg{flex-shrink:0}.av2-table .av2-cell-icon span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av2-table .av2-cell-stack{display:flex;flex-direction:column;gap:2px}.av2-table .av2-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av2-sortable{cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap}.av2-table--lined thead th{background:transparent;border-bottom:1px solid #EAECF0;border-radius:0!important}.av2-empty{display:flex;flex-direction:column;align-items:center;gap:12px;padding:24px 16px 32px;text-align:center}.av2-empty-img{display:block;width:160px;height:120px}.av2-empty-text{display:flex;flex-direction:column;gap:4px;align-items:center}.av2-empty-title{font-size:16px;line-height:24px;font-weight:600;color:#101828}.av2-empty-sub{max-width:480px;font-size:14px;line-height:20px;color:#667085;text-wrap:pretty}.av2-col-head{border-radius:8px;background:#f9fafb;padding:14px 16px;font-size:12px;line-height:20px;font-weight:500;color:#344054;display:flex;align-items:center;gap:8px}.av2-avatar{width:32px;height:32px;flex-shrink:0;border-radius:9999px;background:#eaf8ff;color:#009bf3;display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:700}.av2-bar{flex:1;height:5px;border-radius:9999px;background:#f2f4f7;overflow:hidden;display:block;min-width:60px}.av2-bar span{display:block;height:5px;border-radius:9999px;background:#00a3ff}@keyframes av2-shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.av2-sk{display:block;width:100%;max-width:100%;height:12px;border-radius:4px;flex-shrink:0;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%;animation:av2-shimmer 3s linear infinite}.av2-sk--value{width:72px;height:28px;border-radius:6px}.av2-sk--title{width:220px;height:18px}.av2-sk--note{width:60%}.av2-sk--block{border-radius:8px}@media (prefers-reduced-motion: reduce){.av2-sk{animation:none}}.cf-crumb{font-size:13px;line-height:20px;color:#667085}.cf-crumb a{font-weight:600;color:#00a3ff}.cf-header{background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #f1f1f4,0 3px 4px #00000008;padding:16px 20px;display:flex;align-items:center;gap:12px}.cf-header-text{display:flex;flex-direction:column;gap:4px;min-width:0}.cf-title{font-size:16px;line-height:24px;font-weight:600;color:#101828}.cf-sk-title{margin:3px 0}.cf-desc{border:none;outline:none;padding:0;background:transparent;font-family:inherit;font-size:13px;line-height:18px;color:#344054;min-width:320px}.cf-desc::placeholder{color:#98a2b3}.cf-publish{padding:0 20px;box-shadow:0 1px 2px #1018280d}.cf-draft{padding:0 18px;box-shadow:inset 0 0 0 1px #d0d5dd,0 1px 2px #1018280d}.cf-body{display:flex;gap:16px;align-items:flex-start}.cf-left{width:300px;flex-shrink:0;background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #f1f1f4,0 3px 4px #00000008;padding:16px;display:flex;flex-direction:column;gap:10px;position:sticky;top:calc(var(--bs-app-header-height, 0px) + 16px);max-height:calc(100vh - var(--bs-app-header-height, 0px) - 32px);overflow-y:auto;scrollbar-width:thin}.cf-left-title{font-size:14px;line-height:20px;font-weight:600;color:#101828}.cf-section{display:flex;align-items:center;gap:8px;padding:2px 0;font-size:13px;font-weight:500;color:#344054;cursor:pointer;white-space:nowrap}.cf-section.is-open{color:#1d2939}.cf-rule{flex:1;border-top:1px solid #EAECF0}.cf-chev{display:flex;color:#98a2b3}.cf-chev svg{transition:transform .15s cubic-bezier(.4,0,.2,1)}.cf-chev .rotate{transform:rotate(-90deg)}.cf-items{display:flex;flex-direction:column;gap:8px;padding-left:12px;font-size:13px;color:#475467}.cf-schedule-title{font-size:14px;font-weight:600;color:#101828;margin-top:6px}.cf-schedule{display:flex;flex-direction:column;gap:6px;font-size:13px;color:#475467}.cf-schedule>div{display:flex;align-items:center;gap:6px}.cf-right{flex:1;min-width:0;display:flex;flex-direction:column;gap:16px}.cf-card{background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #f1f1f4,0 3px 4px #00000008;padding:20px;display:flex;flex-direction:column;gap:14px}.cf-card--lg{border-radius:8px}.cf-block-head{display:flex;align-items:center;gap:12px}.cf-block-title{font-size:15px;font-weight:600;color:#101828}.cf-divider-head{display:flex;align-items:center;gap:10px;margin-top:4px}.cf-label{font-size:14px;font-weight:600;color:#101828}.cf-label-sm{font-size:13px;font-weight:600;color:#101828}.cf-muted{color:#667085}.cf-hint{font-size:12px;line-height:18px;color:#667085}.cf-hint--tight{margin-top:-8px}.cf-hint--wrap{max-width:640px;text-wrap:pretty}.cf-field{font-size:13px;font-weight:500;color:#344054;min-width:150px;flex-shrink:0}.cf-row{display:flex;align-items:center;gap:12px}.cf-row--top{margin-top:6px}.cf-row--wrap{flex-wrap:wrap}.cf-stack{display:flex;flex-direction:column;gap:8px}.cf-stack--tight,.cf-stack--sm{gap:4px}.cf-stack--xs{gap:2px}.cf-grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px}.cf-toggle-row{display:flex;align-items:center;gap:10px}.cf-switch{width:36px;height:20px;padding:2px;border:none;border-radius:9999px;background:#eaecf0;display:flex;align-items:center;justify-content:flex-start;flex-shrink:0;cursor:pointer;transition:background .15s cubic-bezier(.4,0,.2,1)}.cf-switch>span{width:16px;height:16px;border-radius:9999px;background:#fff;box-shadow:0 1px 2px #1018280d}.cf-switch.is-on{background:#00a3ff;justify-content:flex-end}.cf-switch--top{margin-top:2px}.cf-chipbox{flex:1;min-width:0;display:flex;flex-wrap:wrap;gap:6px;border-radius:8px;box-shadow:inset 0 0 0 1px #d0d5dd;padding:8px 10px}.cf-chipbox--lg{gap:8px;padding:10px 12px}.cf-chip{display:flex;align-items:center;gap:6px;background:#f9fafb;box-shadow:inset 0 0 0 1px #eaecf0;border-radius:9999px;padding:3px 8px;font-size:12px;color:#344054;white-space:nowrap;flex-shrink:0;max-width:100%}.cf-chip--lg{gap:8px;background:#fff;padding:5px 11px;font-size:13px;color:#1d2939}.cf-chip-ini{color:#00a3ff;font-weight:600;font-size:11px}.cf-chip-tag{display:inline-flex;align-items:center;justify-content:center;padding:1px 5px;border-radius:6px;background:#eaf8ff;color:#00a3ff;font-weight:700;font-size:11px;letter-spacing:.02em}.cf-chip-x{display:flex;cursor:pointer;color:#98a2b3}.cf-chip-x:hover{color:#344054}.cf-chip-input{flex:1;min-width:100px;border:none;outline:none;background:transparent;font-family:inherit;font-size:12px;color:#101828}.cf-chip-input::placeholder{color:#98a2b3}.cf-chip-input--lg{min-width:120px;font-size:13px}.cf-inner{border-radius:8px;box-shadow:inset 0 0 0 1px #eaecf0;padding:14px 16px;display:flex;flex-direction:column;gap:8px}.cf-inline{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:13px;color:#344054}.cf-inline--top{margin-top:2px}.cf-mini{height:32px;padding:0 28px 0 10px;border:none;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;font-family:inherit;font-size:13px;font-weight:600;color:#101828;cursor:pointer;appearance:none;-webkit-appearance:none;background-image:url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%23667085' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>\");background-repeat:no-repeat;background-position:right 8px center;outline:none}.cf-info{display:flex;align-items:center;gap:6px;font-size:12px;line-height:18px;color:#667085}.cf-info svg{flex-shrink:0}.cf-info--wrap{align-items:flex-start;max-width:560px;text-wrap:pretty}.cf-info--wrap svg{margin-top:3px}.cf-checks{display:flex;align-items:center;gap:16px;flex-wrap:wrap;font-size:13px;color:#344054}.cf-checks-label{font-weight:500}.cf-check{display:flex;align-items:center;gap:6px;margin:0;font-size:13px;color:#344054;cursor:pointer;-webkit-user-select:none;user-select:none}.cf-check-box{width:16px;height:16px;border-radius:4px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;display:flex;align-items:center;justify-content:center;color:#fff;flex-shrink:0}.cf-check-box.is-on{background:#00a3ff;box-shadow:none}.cf-box{border-radius:8px;box-shadow:inset 0 0 0 1px #eaecf0;overflow:hidden;display:flex;flex-direction:column}.cf-box--pad{padding:14px 16px;gap:6px;overflow:visible}.cf-box--row{padding:14px 16px;flex-direction:row;align-items:flex-start;gap:12px}.cf-box--nested{background:#fff;padding:12px 14px;gap:8px;margin-left:46px;overflow:visible}.cf-box--open{overflow:visible}.cf-box--open>.cf-box-sub:last-child{border-radius:0 0 8px 8px}.cf-box-row{padding:14px 16px;display:flex;align-items:flex-start;gap:12px}.cf-box-row--flush{padding:0;gap:10px}.cf-box-sub{border-top:1px solid #EAECF0;background:#f9fafb;padding:16px 16px 18px 64px;display:flex;flex-direction:column;gap:12px}.cf-options{display:flex;flex-direction:column;gap:10px}.cf-option{background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #eaecf0;padding:12px 14px;display:flex;align-items:flex-start;gap:10px;cursor:pointer}.cf-option.is-on{box-shadow:inset 0 0 0 1.5px #00a3ff}.cf-radio{width:16px;height:16px;border-radius:9999px;box-shadow:inset 0 0 0 1px #d0d5dd;background:#fff;flex-shrink:0;margin-top:2px}.cf-radio.is-on{box-shadow:inset 0 0 0 5px #00a3ff}.cf-box-sep{display:flex;flex-direction:column;gap:12px;padding-top:14px;border-top:1px solid #EAECF0}.cf-num{display:flex;align-items:center;gap:8px;height:36px;padding:0 6px 0 12px;border-radius:8px;box-shadow:inset 0 0 0 1px #d0d5dd;margin:0}.cf-num input{width:52px;border:none;outline:none;background:transparent;font-family:inherit;font-size:14px;font-weight:600;color:#101828}.cf-num span{font-size:13px;color:#667085;padding-right:6px}.cf-pill{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;border-radius:9999px;padding:4px 12px}.cf-pill--pass{background:#ecfdf3;color:#027a48}.cf-pill--fail{background:#fef3f2;color:#d92d20}.cf-error{display:flex;gap:6px;font-size:12px;font-weight:500;color:#d92d20;align-items:flex-start;line-height:18px;max-width:640px}.cf-error svg{flex-shrink:0;margin-top:3px}.cf-error--indent{margin-left:162px}.cf-check.is-blocked{color:#98a2b3;cursor:not-allowed}.cf-select{position:relative;display:inline-block;vertical-align:middle}.cf-select-btn{display:inline-flex;align-items:center;gap:8px;height:32px;padding:0 10px 0 12px;border:none;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;font-family:inherit;font-size:13px;font-weight:600;color:#101828;cursor:pointer;white-space:nowrap}.cf-select-btn svg{color:#667085;transition:transform .15s ease}.is-open .cf-select-btn{box-shadow:0 0 0 2px #99dbff,inset 0 0 0 1px #d0d5dd}.is-open .cf-select-btn svg{transform:rotate(180deg)}.cf-select-menu{position:absolute;top:calc(100% + 4px);left:0;z-index:30;min-width:100%;padding:4px;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #eaecf0,0 8px 24px #1018281f}.cf-select-item{padding:8px 12px;border-radius:6px;font-size:13px;color:#344054;white-space:nowrap;cursor:pointer}.cf-select-item:hover{background:#f9fafb}.cf-select-item.is-on{background:#eaf8ff;color:#009bf3;font-weight:600}.cf-chipbox{position:relative}.cf-chipbox.is-open{box-shadow:0 0 0 2px #99dbff,inset 0 0 0 1px #d0d5dd}.cf-suggest{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:30;max-height:260px;overflow-y:auto;padding:4px;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #eaecf0,0 8px 24px #1018281f}.cf-suggest-item{display:flex;align-items:center;gap:8px;padding:6px 10px;border-radius:6px;cursor:pointer}.cf-suggest-item:hover{background:#f9fafb}.cf-suggest-name{font-size:13px;color:#101828}.cf-suggest-mail{font-size:12px;color:#667085;margin-left:auto}.cf-suggest-empty{padding:8px 10px;font-size:12px;color:#667085}.cf-error--page{margin:0 0 12px}.cf-autotask{margin-top:12px;padding:14px 16px;border-radius:10px;background:#f9fafb;box-shadow:inset 0 0 0 1px #eaecf0;display:flex;flex-direction:column;gap:8px}.cf-autotask-title{font-size:14px;font-weight:600;color:#1d2939}.cf-autotask-title:not(:first-child){margin-top:6px}.cf-autotask-choices{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}@media (max-width: 720px){.cf-autotask-choices{grid-template-columns:1fr}}.cf-choice{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border:0;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;font:inherit;text-align:left;cursor:pointer}.cf-choice.is-on{background:#f5faff;box-shadow:inset 0 0 0 1px #66c8ff}.cf-radio{width:18px;height:18px;flex-shrink:0;margin-top:1px;border-radius:9999px;box-shadow:inset 0 0 0 1px #d0d5dd;display:flex;align-items:center;justify-content:center}.cf-radio span{width:8px;height:8px;border-radius:9999px;background:transparent}.cf-radio.is-on{box-shadow:inset 0 0 0 1px #1570ef}.cf-radio.is-on span{background:#1570ef}.cf-choice-text{display:flex;flex-direction:column;gap:2px;min-width:0}.cf-choice-title{font-size:14px;font-weight:600;color:#101828}.cf-choice-sub{font-size:12px;color:#667085}.cf-autotask-validity{display:flex;align-items:center;flex-wrap:wrap;gap:10px;font-size:13px;color:#344054}.cf-validity-select{width:96px}.cf-reminder{display:inline-flex;align-items:center;gap:6px}.cf-reminder-select{width:120px}.cf-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:none;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;color:#344054;cursor:pointer}.cf-icon-btn:hover{background:#f9fafb}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i6.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.AuditV2ShimmerComponent, selector: "lib-audit-v2-shimmer", inputs: ["rows"] }, { kind: "component", type: i8.AuditV2SelectComponent, selector: "lib-audit-v2-select", inputs: ["options", "placeholder", "searchable", "ariaLabel", "disabled", "value"], outputs: ["changed"] }] });
899
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AuditV2ConfigureComponent, selector: "lib-audit-v2-configure", host: { listeners: { "document:keydown.escape": "onEscape()" } }, ngImport: i0, template: "<div class=\"av2-page audit-configure\">\r\n\r\n <!-- Breadcrumb -->\r\n <div class=\"cf-crumb\">\r\n <a routerLink=\"/manage/trax/audit-v2/manage\">Manage Audit</a> \u203A Configure\r\n </div>\r\n\r\n <!-- Title + actions -->\r\n <div class=\"cf-header\">\r\n <div class=\"cf-header-text\">\r\n <span class=\"av2-sk av2-sk--title cf-sk-title\" *ngIf=\"loading\"></span>\r\n <div class=\"cf-title\" *ngIf=\"!loading\">{{ auditName || 'Audit' }}</div>\r\n <input type=\"text\" class=\"cf-desc\" placeholder=\"Enter Audit Description\" [(ngModel)]=\"description\">\r\n </div>\r\n <div class=\"av2-grow\"></div>\r\n <button type=\"button\" class=\"av2-btn av2-btn--primary cf-publish\" [disabled]=\"!canSave\" [title]=\"saveBlockedReason || publishBlockedReason\" (click)=\"publish()\">\r\n {{ saving ? 'Saving\u2026' : (published ? 'Save & Publish' : 'Publish') }}\r\n </button>\r\n <button type=\"button\" class=\"av2-btn av2-btn--ghost cf-draft\" [disabled]=\"!canSave\" [title]=\"saveBlockedReason\" (click)=\"saveDraft()\">Save as Draft</button>\r\n </div>\r\n\r\n <div class=\"cf-error cf-error--page\" *ngIf=\"loadError\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n {{ loadError }}\r\n </div>\r\n\r\n <!-- Chip picker: chips + input + suggestion list (one template, used for every user list) -->\r\n <ng-template #chipPicker let-list=\"list\" let-large=\"large\">\r\n <div class=\"cf-chipbox\" [class.cf-chipbox--lg]=\"large\" [class.is-open]=\"openChips === list\" (click)=\"focusChips(list, $event)\">\r\n <span class=\"cf-chip\" [class.cf-chip--lg]=\"large\" *ngFor=\"let u of chipsOf(list); let i = index\" [title]=\"u.e\">\r\n <span [class]=\"large ? 'cf-chip-tag' : 'cf-chip-ini'\">{{ u.i }}</span>{{ u.n }}\r\n <a class=\"cf-chip-x\" (click)=\"removeChip(list, i); $event.stopPropagation()\">\r\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\"><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line></svg>\r\n </a>\r\n </span>\r\n <input type=\"text\" class=\"cf-chip-input\" [class.cf-chip-input--lg]=\"large\" placeholder=\"Add user...\"\r\n [ngModel]=\"draftOf(list)\" (ngModelChange)=\"setDraft(list, $event)\" (focus)=\"focusChips(list, $event)\" (keyup.enter)=\"addChip(list)\">\r\n <div class=\"cf-suggest\" *ngIf=\"openChips === list\">\r\n <div class=\"cf-suggest-item\" *ngFor=\"let u of suggestions(list)\" (click)=\"addSuggestion(list, u, $event)\">\r\n <span class=\"cf-chip-ini\">{{ u.i }}</span>\r\n <span class=\"cf-suggest-name\">{{ u.n }}</span>\r\n <span class=\"cf-suggest-mail\">{{ u.e }}</span>\r\n </div>\r\n <div class=\"cf-suggest-empty\" *ngIf=\"!suggestions(list).length\">\r\n {{ users.length ? 'No matching user' : 'No users for this client' }}\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Dropdown: styled like the prototype instead of the browser's native select -->\r\n <ng-template #dropdown let-key=\"key\" let-options=\"options\">\r\n <span class=\"cf-select\" [class.is-open]=\"openSelect === key\">\r\n <button type=\"button\" class=\"cf-select-btn\" (click)=\"toggleSelect(key, $event)\">\r\n {{ selectLabel(key, options) }}\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"6 9 12 15 18 9\"></polyline></svg>\r\n </button>\r\n <div class=\"cf-select-menu\" *ngIf=\"openSelect === key\">\r\n <div class=\"cf-select-item\" *ngFor=\"let o of options\" [class.is-on]=\"isPicked(key, o)\"\r\n (click)=\"pick(key, o, $event)\">{{ o.label }}</div>\r\n </div>\r\n </span>\r\n </ng-template>\r\n\r\n <div class=\"cf-body\" *ngIf=\"!loadError\">\r\n <!-- Section tree -->\r\n <aside class=\"cf-left\">\r\n <lib-audit-v2-shimmer *ngIf=\"loading\" [rows]=\"3\"></lib-audit-v2-shimmer>\r\n\r\n <ng-container *ngIf=\"!loading\">\r\n <div class=\"cf-left-title\">{{ auditName || 'Audit' }}</div>\r\n\r\n <div class=\"cf-hint\" *ngIf=\"!sections.length\">No questions yet</div>\r\n <ng-container *ngFor=\"let s of sections\">\r\n <div class=\"cf-section\" [class.is-open]=\"s.open\" (click)=\"toggleSection(s)\">\r\n {{ s.label }}\r\n <span class=\"cf-rule\"></span>\r\n <span class=\"cf-chev\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" [class.rotate]=\"!s.open\">\r\n <polyline points=\"6 9 12 15 18 9\"></polyline>\r\n </svg>\r\n </span>\r\n </div>\r\n <div class=\"cf-items\" *ngIf=\"s.open && s.items.length\">\r\n <div *ngFor=\"let it of s.items\">{{ it }}</div>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"cf-schedule-title\">Schedule</div>\r\n <div class=\"cf-schedule\">\r\n <div>\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"2\"></rect>\r\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"></line>\r\n <line x1=\"8\" y1=\"3\" x2=\"8\" y2=\"6\"></line>\r\n <line x1=\"16\" y1=\"3\" x2=\"16\" y2=\"6\"></line>\r\n </svg>\r\n {{ schedule }}\r\n </div>\r\n <div>\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"12\" cy=\"12\" r=\"9\"></circle>\r\n <polyline points=\"12 7 12 12 15.5 14\"></polyline>\r\n </svg>\r\n {{ scheduleWindow }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </aside>\r\n\r\n <!-- Configuration -->\r\n <div class=\"cf-right\">\r\n\r\n <section class=\"cf-card\" *ngIf=\"loading\">\r\n <lib-audit-v2-shimmer [rows]=\"4\"></lib-audit-v2-shimmer>\r\n </section>\r\n\r\n <ng-container *ngIf=\"!loading\">\r\n\r\n <!-- ===== Advance Configuration ===== -->\r\n <section class=\"cf-card\">\r\n <div class=\"cf-block-head\">\r\n <span class=\"cf-block-title\">Advance Configuration</span>\r\n <span class=\"cf-rule\"></span>\r\n <span class=\"cf-chev\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"6 9 12 15 18 9\"></polyline></svg>\r\n </span>\r\n </div>\r\n\r\n <!-- Audit Owner -->\r\n <div>\r\n <div class=\"cf-label\">Audit Owner</div>\r\n <div class=\"cf-hint\">Owners get access to manage the audit</div>\r\n </div>\r\n <div class=\"cf-row\">\r\n <span class=\"cf-field\">Can be managed by</span>\r\n <ng-container *ngTemplateOutlet=\"chipPicker; context: { list: 'owners', large: false }\"></ng-container>\r\n </div>\r\n\r\n <!-- Approver -->\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Approver</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"approverOn\" (click)=\"toggleApprover()\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--tight\">By enabling, the users will be able to approve the audit</div>\r\n <div class=\"cf-row\" *ngIf=\"approverOn\">\r\n <span class=\"cf-field\">To be approved by</span>\r\n <ng-container *ngTemplateOutlet=\"chipPicker; context: { list: 'approvers', large: false }\"></ng-container>\r\n </div>\r\n <div class=\"cf-error\" *ngIf=\"approverError\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n {{ approverError }}\r\n </div>\r\n <div class=\"cf-info cf-info--wrap\" *ngIf=\"!approverOn && approvers.length\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line></svg>\r\n Approver is off, so the {{ approvers.length }} approver{{ approvers.length === 1 ? '' : 's' }} added will be removed when you save. Turn Approver back on to keep {{ approvers.length === 1 ? 'it' : 'them' }}.\r\n </div>\r\n <div class=\"cf-info cf-info--wrap\" *ngIf=\"!approverOn && !approvers.length\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line></svg>\r\n Approver is off, so submitted audits are not sent for approval. Turn it on to add approvers or to send flags and reports to them.\r\n </div>\r\n\r\n <!-- Reminder -->\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Reminder</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"reminderOn\" (click)=\"toggleReminder()\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--tight\">By enabling, the users will be reminded in the selected interval</div>\r\n <div class=\"cf-inner\" *ngIf=\"reminderOn\">\r\n <div class=\"cf-inline\">\r\n Notify user before\r\n <span class=\"cf-reminder\" *ngFor=\"let m of reminders; let i = index\">\r\n <lib-audit-v2-select class=\"cf-reminder-select\" [value]=\"m\" [options]=\"reminderOpts[i] || []\" [searchable]=\"false\"\r\n [ariaLabel]=\"'Reminder ' + (i + 1) + ' in minutes'\" (changed)=\"setReminder(i, $event.target.value)\"></lib-audit-v2-select>\r\n <a class=\"cf-chip-x\" *ngIf=\"reminders.length > 1\" title=\"Remove reminder\" (click)=\"removeReminder(i)\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\"><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line></svg>\r\n </a>\r\n </span>\r\n <button type=\"button\" class=\"cf-icon-btn\" *ngIf=\"reminders.length < maxReminders\" title=\"Add reminder\" (click)=\"addReminder()\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"></line><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line></svg>\r\n </button>\r\n </div>\r\n <div class=\"cf-info\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line></svg>\r\n Send alerts {{ reminderSummary }} mins before the audit end time\r\n </div>\r\n </div>\r\n\r\n <!-- Notify Flags -->\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Notify Flags</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"notifyFlagsOn\" (click)=\"toggleNotifyFlags()\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--tight\">By enabling, all flags will be sent as an email</div>\r\n <ng-container *ngIf=\"notifyFlagsOn\">\r\n <div class=\"cf-checks\">\r\n <span class=\"cf-checks-label\">Send To</span>\r\n <label class=\"cf-check\" [class.is-blocked]=\"!hasApprovers && !notifySendApprover\" (click)=\"toggleSendApprover('notifySendApprover')\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"notifySendApprover\">\r\n <svg *ngIf=\"notifySendApprover\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Approver\r\n </label>\r\n <label class=\"cf-check\" (click)=\"notifySendCustom = !notifySendCustom\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"notifySendCustom\">\r\n <svg *ngIf=\"notifySendCustom\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Custom\r\n </label>\r\n </div>\r\n <ng-container *ngIf=\"notifySendCustom\">\r\n <ng-container *ngTemplateOutlet=\"chipPicker; context: { list: 'notifyUsers', large: false }\"></ng-container>\r\n </ng-container>\r\n <div class=\"cf-error\" *ngIf=\"notifyFlagsError\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n {{ notifyFlagsError }}\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Notify on Recurring Flags -->\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Notify on Recurring Flags</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"recurringFlagsOn\" (click)=\"toggleRecurringFlags()\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--tight\">When enabled, emails are sent for recurring flags based on the configured threshold</div>\r\n\r\n <div class=\"cf-inner\" *ngIf=\"recurringFlagsOn\">\r\n <div class=\"cf-inline\">\r\n Send Email if the same question is flagged\r\n <ng-container *ngTemplateOutlet=\"dropdown; context: { key: 'recurringThreshold', options: thresholdOpts }\"></ng-container>\r\n times by the same store\r\n </div>\r\n <div class=\"cf-info\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line></svg>\r\n Once the threshold is reached and an email is sent, the flag count resets to zero\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"recurringFlagsOn\">\r\n <div class=\"cf-checks\">\r\n <span class=\"cf-checks-label\">Send To</span>\r\n <label class=\"cf-check\" [class.is-blocked]=\"!hasApprovers && !recurringSendApprover\" (click)=\"toggleSendApprover('recurringSendApprover')\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"recurringSendApprover\">\r\n <svg *ngIf=\"recurringSendApprover\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Approver\r\n </label>\r\n <label class=\"cf-check\" (click)=\"toggleRecurringCustom()\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"recurringSendCustom\">\r\n <svg *ngIf=\"recurringSendCustom\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Custom\r\n </label>\r\n <label class=\"cf-check\" (click)=\"recurringSameAsNotify = !recurringSameAsNotify\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"recurringSameAsNotify\">\r\n <svg *ngIf=\"recurringSameAsNotify\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Use same users from Notify Flags\r\n </label>\r\n </div>\r\n <ng-container *ngIf=\"recurringSendCustom\">\r\n <ng-container *ngTemplateOutlet=\"chipPicker; context: { list: 'recurringUsers', large: false }\"></ng-container>\r\n </ng-container>\r\n <div class=\"cf-info\" *ngIf=\"recurringSameAsNotify\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line></svg>\r\n {{ notifyRecipientsLabel }}\r\n </div>\r\n <div class=\"cf-error\" *ngIf=\"recurringFlagsError\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n {{ recurringFlagsError }}\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Daily report -->\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Enable - Daily Report</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"dailyReportOn\" (click)=\"toggleDailyReport()\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--tight\">By Enabling, compliance score will be sent as an email to the above users</div>\r\n <ng-container *ngIf=\"dailyReportOn\">\r\n <div class=\"cf-checks\">\r\n <span class=\"cf-checks-label\">Send To</span>\r\n <label class=\"cf-check\" [class.is-blocked]=\"!hasApprovers && !dailySendApprover\" (click)=\"toggleSendApprover('dailySendApprover')\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"dailySendApprover\">\r\n <svg *ngIf=\"dailySendApprover\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Approver\r\n </label>\r\n <label class=\"cf-check\" (click)=\"dailySendCustom = !dailySendCustom\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"dailySendCustom\">\r\n <svg *ngIf=\"dailySendCustom\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Custom\r\n </label>\r\n </div>\r\n <ng-container *ngIf=\"dailySendCustom\">\r\n <ng-container *ngTemplateOutlet=\"chipPicker; context: { list: 'dailyUsers', large: false }\"></ng-container>\r\n </ng-container>\r\n <label class=\"cf-check\" (click)=\"sharePostApproval = !sharePostApproval\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"sharePostApproval\">\r\n <svg *ngIf=\"sharePostApproval\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Share Report Post Approval\r\n </label>\r\n <div class=\"cf-error\" *ngIf=\"dailyReportError\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n {{ dailyReportError }}\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Export submission: Tango users only, as the v1 Configure (its stored value is kept for everyone else). -->\r\n <div class=\"cf-grid2\" *ngIf=\"access.isTango\">\r\n <div class=\"cf-stack cf-stack--tight\">\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Export Submission</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"exportSubmissionOn\" (click)=\"exportSubmissionOn = !exportSubmissionOn\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint\">Enable this to allow audit submitters to download their submission as a PDF file</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Redo validity -->\r\n <div class=\"cf-grid2\">\r\n <div class=\"cf-stack\">\r\n <div class=\"cf-label\">Redo Validity</div>\r\n <div class=\"cf-inline\">\r\n Redo valid for\r\n <ng-container *ngTemplateOutlet=\"dropdown; context: { key: 'redoValidFor', options: redoDayOpts }\"></ng-container>\r\n Day from Redo creation\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Auto create task -->\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Auto Create Task for Flags</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"autoCreateTaskOn\" (click)=\"autoCreateTaskOn = !autoCreateTaskOn\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--tight\">By enabling, a task is automatically created for every flagged question in the audit</div>\r\n\r\n <!-- Who gets the task and how long it stays open (as the Checklist Configure page) -->\r\n <div class=\"cf-autotask\" *ngIf=\"autoCreateTaskOn\">\r\n <div class=\"cf-autotask-title\">Task Assignee</div>\r\n <div class=\"cf-hint cf-hint--tight\">Choose who the flagged task is assigned to</div>\r\n <div class=\"cf-autotask-choices\">\r\n <button type=\"button\" class=\"cf-choice\" [class.is-on]=\"taskAssignee === 'submitter'\" (click)=\"taskAssignee = 'submitter'\">\r\n <span class=\"cf-radio\" [class.is-on]=\"taskAssignee === 'submitter'\"><span></span></span>\r\n <span class=\"cf-choice-text\">\r\n <span class=\"cf-choice-title\">Audit Submitter</span>\r\n <span class=\"cf-choice-sub\">Task is assigned to the user who filled the audit</span>\r\n </span>\r\n </button>\r\n <button type=\"button\" class=\"cf-choice\" [class.is-on]=\"taskAssignee === 'store'\" (click)=\"taskAssignee = 'store'\">\r\n <span class=\"cf-radio\" [class.is-on]=\"taskAssignee === 'store'\"><span></span></span>\r\n <span class=\"cf-choice-text\">\r\n <span class=\"cf-choice-title\">Store User</span>\r\n <span class=\"cf-choice-sub\">Task is assigned to the user mapped to the flagged store</span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"cf-autotask-title\">Task Validity</div>\r\n <div class=\"cf-autotask-validity\">\r\n <span>Task valid for</span>\r\n <lib-audit-v2-select class=\"cf-validity-select\" [(ngModel)]=\"taskValidity\" [options]=\"taskValidityOptions\"\r\n [searchable]=\"false\" ariaLabel=\"Task validity in days\"></lib-audit-v2-select>\r\n <span>days from task creation</span>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <!-- ===== Audit Configuration ===== -->\r\n <div class=\"cf-divider-head\">\r\n <span class=\"cf-block-title\">Audit Configuration</span>\r\n <span class=\"cf-rule\"></span>\r\n </div>\r\n\r\n <section class=\"cf-card cf-card--lg\">\r\n <div class=\"cf-block-title\">Submission &amp; Visibility</div>\r\n\r\n <!-- cf-box--open: the dispute-window and response-delay menus must not be clipped by the box -->\r\n <div class=\"cf-box cf-box--open\">\r\n <div class=\"cf-box-row\">\r\n <button type=\"button\" class=\"cf-switch cf-switch--top\" [class.is-on]=\"showResponseInApp\"\r\n (click)=\"showResponseInApp = !showResponseInApp\"><span></span></button>\r\n <div class=\"cf-stack cf-stack--xs\">\r\n <div class=\"cf-label\">Show Response in Mobile App</div>\r\n <div class=\"cf-hint\">By enabling this option, store users can view the audit response in the Mobile App.</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"cf-box-sub\" *ngIf=\"showResponseInApp\">\r\n <div class=\"cf-stack cf-stack--xs\">\r\n <div class=\"cf-label-sm\">Response Visibility</div>\r\n <div class=\"cf-hint\">Choose when the response becomes visible to store users</div>\r\n </div>\r\n\r\n <div class=\"cf-options\">\r\n <div class=\"cf-option\" [class.is-on]=\"responseVisibility === 'pre'\" (click)=\"responseVisibility = 'pre'\">\r\n <span class=\"cf-radio\" [class.is-on]=\"responseVisibility === 'pre'\"><span></span></span>\r\n <div class=\"cf-stack cf-stack--sm\">\r\n <div class=\"cf-label-sm\">Pre-approval</div>\r\n <div class=\"cf-hint\">The audit response will be visible to store users before it is approved.</div>\r\n <div class=\"cf-inline cf-inline--top\">\r\n Show response\r\n <ng-container *ngTemplateOutlet=\"dropdown; context: { key: 'respDelay', options: respDelayOpts }\"></ng-container>\r\n after submission\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"cf-option\" [class.is-on]=\"responseVisibility === 'post'\" (click)=\"responseVisibility = 'post'\">\r\n <span class=\"cf-radio\" [class.is-on]=\"responseVisibility === 'post'\"><span></span></span>\r\n <div class=\"cf-stack cf-stack--sm\">\r\n <div class=\"cf-label-sm\" [class.cf-muted]=\"responseVisibility !== 'post'\">Post-approval</div>\r\n <div class=\"cf-hint\">Once the response is approved, it will automatically be displayed in the Mobile App. Store users cannot raise a dispute.</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"cf-box-sep\">\r\n <ng-container *ngIf=\"responseVisibility === 'pre'\">\r\n <div class=\"cf-box-row cf-box-row--flush\">\r\n <button type=\"button\" class=\"cf-switch cf-switch--top\" [class.is-on]=\"disputeOn\" (click)=\"disputeOn = !disputeOn\"><span></span></button>\r\n <div class=\"cf-stack cf-stack--xs\">\r\n <div class=\"cf-label-sm\">Dispute Configuration</div>\r\n <div class=\"cf-hint cf-hint--wrap\">When enabled, the store team can raise a dispute against the auditor's submission once the response becomes visible to them.</div>\r\n </div>\r\n </div>\r\n <div class=\"cf-box cf-box--nested\" *ngIf=\"disputeOn\">\r\n <div class=\"cf-inline\">\r\n Dispute window\r\n <ng-container *ngTemplateOutlet=\"dropdown; context: { key: 'disputeWindow', options: dispWindowOpts }\"></ng-container>\r\n from when the response becomes visible\r\n </div>\r\n <div class=\"cf-info cf-info--wrap\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line></svg>\r\n Disputes raised inside this window go to the approver. Approved disputes revise the answer and the compliance score.\r\n </div>\r\n <div class=\"cf-error\" *ngIf=\"!hasApprovers\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n No approver is set, so no one can review disputes. Turn on Approver and add an approver.\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"responseVisibility === 'post'\">\r\n <div class=\"cf-stack cf-stack--sm\">\r\n <div class=\"cf-label-sm cf-muted\">Dispute Configuration</div>\r\n <div class=\"cf-info cf-info--wrap\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line></svg>\r\n Disputes are not available when responses are shown post-approval.\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Pre-submission access -->\r\n <div class=\"cf-box cf-box--pad\">\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Pre-Submission Access</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"preSubmissionAccessOn\" (click)=\"preSubmissionAccessOn = !preSubmissionAccessOn\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--wrap\">Users added here can view Open and In Progress audits until submission. The Schedule Info tab is also visible only to these users.</div>\r\n <ng-container *ngIf=\"preSubmissionAccessOn\">\r\n <div class=\"cf-row cf-row--top\">\r\n <span class=\"cf-field\">Visible to</span>\r\n <ng-container *ngTemplateOutlet=\"chipPicker; context: { list: 'preSubmissionUsers', large: false }\"></ng-container>\r\n </div>\r\n <div class=\"cf-error cf-error--indent\" *ngIf=\"preSubmissionEmpty\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n Add at least one user\r\n </div>\r\n </ng-container>\r\n </div>\r\n </section>\r\n\r\n <!-- ===== Scoring ===== -->\r\n <section class=\"cf-card cf-card--lg\">\r\n <div class=\"cf-block-title\">Scoring</div>\r\n <div class=\"cf-box cf-box--pad\">\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Pass/Fail Score Setup</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"passFailOn\" (click)=\"passFailOn = !passFailOn\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--wrap\">Set the compliance score an audit must reach to be marked {{ passLabel }}. Anything below it is marked {{ failLabel }}.</div>\r\n <div class=\"cf-row cf-row--wrap cf-row--top\" *ngIf=\"passFailOn\">\r\n <span class=\"cf-field\">Minimum score to {{ passLabel }}</span>\r\n <label class=\"cf-num\">\r\n <input type=\"number\" min=\"1\" max=\"100\" [(ngModel)]=\"passThreshold\">\r\n <span>%</span>\r\n </label>\r\n <span class=\"cf-pill cf-pill--pass\">{{ passLabel }} \u2265 {{ passThreshold }}%</span>\r\n <span class=\"cf-pill cf-pill--fail\">{{ failLabel }} &lt; {{ passThreshold }}%</span>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <!-- ===== Approver Controls ===== -->\r\n <section class=\"cf-card cf-card--lg\">\r\n <div class=\"cf-block-title\">Approver Controls</div>\r\n <div class=\"cf-stack\">\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Edit Submitted Audit</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"editSubmittedOn\" (click)=\"toggleEditSubmitted()\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--tight\">Allow Approvers to edit submitted Audit</div>\r\n <ng-container *ngIf=\"editSubmittedOn\">\r\n <ng-container *ngTemplateOutlet=\"chipPicker; context: { list: 'editUsers', large: true }\"></ng-container>\r\n <div class=\"cf-error\" *ngIf=\"editSubmittedError\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n {{ editSubmittedError }}\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"cf-grid2\">\r\n <div class=\"cf-stack\">\r\n <div class=\"cf-label\">Redo Extension</div>\r\n <div class=\"cf-inline\">\r\n Extend redo up to\r\n <ng-container *ngTemplateOutlet=\"dropdown; context: { key: 'redoExtension', options: redoExtensionOpts }\"></ng-container>\r\n Days till approval\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <!-- ===== User Verification ===== -->\r\n <section class=\"cf-card\">\r\n <div class=\"cf-block-title\">User Verification Configuration</div>\r\n <div class=\"cf-box cf-box--row\">\r\n <button type=\"button\" class=\"cf-switch cf-switch--top\" [class.is-on]=\"requirePhoto\" (click)=\"requirePhoto = !requirePhoto\"><span></span></button>\r\n <div class=\"cf-stack cf-stack--xs\">\r\n <div class=\"cf-label\">Require Photo Capture</div>\r\n <div class=\"cf-hint\">By enabling, users must capture their photo to complete submission</div>\r\n </div>\r\n </div>\r\n <div class=\"cf-box cf-box--row\">\r\n <button type=\"button\" class=\"cf-switch cf-switch--top\" [class.is-on]=\"requireAcknowledgment\" (click)=\"requireAcknowledgment = !requireAcknowledgment\"><span></span></button>\r\n <div class=\"cf-stack cf-stack--xs\">\r\n <div class=\"cf-label\">Require User Acknowledgment</div>\r\n <div class=\"cf-hint\">By enabling, users must type their name as acknowledgment to complete submission</div>\r\n </div>\r\n </div>\r\n </section>\r\n </ng-container>\r\n\r\n </div>\r\n </div>\r\n\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.av2-page{display:flex;flex-direction:column;gap:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;color:#101828;-webkit-font-smoothing:antialiased}.av2-page *,.av2-page *:before,.av2-page *:after{box-sizing:border-box}.av2-card{background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #f1f1f4,0 3px 4px #00000008;padding:20px 24px;display:flex;flex-direction:column;gap:20px}.av2-card--log{padding:20px 24px 24px;gap:18px}.av2-card--table{padding:20px 24px 24px;gap:16px}.av2-card-head{display:flex;align-items:flex-start;gap:16px;flex-wrap:wrap}.av2-card-head--center{align-items:center;gap:12px}.av2-title-block{display:flex;flex-direction:column;gap:4px;flex:1;min-width:220px}.av2-card-title{font-size:20px;line-height:30px;font-weight:600;color:#101828;display:flex;align-items:center;gap:10px}.av2-card-title--grow{flex:1;min-width:180px}.av2-card-sub{font-size:14px;line-height:20px;color:#667085}.av2-grow{flex:1}.av2-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}.av2-grid-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:20px}.av2-grid-4{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px}.av2-stat-card{background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #f1f1f4,0 3px 4px #00000008;padding:10px}.av2-stat{padding:8px 16px;border-radius:6px;border-bottom:2px solid #EAECF0;background:radial-gradient(206.89% 107.47% at 16.16% 32.77%,#fff6,#45bbfe33),#f2f4f7;box-shadow:0 4px 10px #0000000d;display:flex;align-items:center;gap:20px}.av2-stat-value{font-size:30px;line-height:38px;font-weight:600;color:#101828}.av2-stat-label{font-size:14px;line-height:20px;font-weight:500;color:#344054}.av2-kpi{background:#fff;border-radius:10px;box-shadow:inset 0 0 0 1px #eaecf0,0 1px 2px #1018280d;display:flex;flex-direction:column;overflow:hidden}.av2-kpi.is-primary{box-shadow:inset 0 0 0 1px #99dbff,0 1px 2px #1018280d}.av2-kpi.is-primary .av2-kpi-head{background:#eaf8ff}.av2-kpi-head{padding:14px 18px;background:#f9fafb;font-size:16px;line-height:24px;font-weight:500;color:#101828}.av2-kpi-body{padding:16px 18px 18px;display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}.av2-kpi-value{font-size:20px;line-height:30px;font-weight:700;color:#101828}.av2-kpi-delta{display:flex;align-items:center;gap:4px;font-size:12px;color:#039855}.av2-kpi-delta.is-down{color:#d92d20}.av2-kpi-note{font-size:12px;color:#667085}.av2-ocard{padding:8px;border-radius:12px;border:1px solid #D0D5DD;background:#fff;display:flex;flex-direction:column;min-width:0;height:100%}.av2-ocard-head{min-height:70px;padding:10px 14px;border-radius:6px;border-bottom:2px solid #EAECF0;background:radial-gradient(206.89% 107.47% at 16.16% 32.77%,#fff6,#45bbfe33),#f2f4f7;box-shadow:0 4px 10px #0000000d;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;gap:2px;min-width:0}.av2-ocard-head--row{flex-direction:row;align-items:center;justify-content:flex-start;gap:12px}.av2-ocard-count{font-size:30px;line-height:38px;font-weight:600;color:#101828;white-space:nowrap}.av2-ocard-text{font-size:14px;line-height:20px;font-weight:500;color:#344054}.av2-ocard-body{flex:1;padding:12px 14px;display:flex;gap:16px;min-width:0}.av2-ocard-cell{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.av2-ocard-cell--center{align-items:center;text-align:center}.av2-ocard-sub{margin:4px 0;font-size:20px;line-height:30px;font-weight:700;color:#101828}.av2-ocard-note{font-size:14px;line-height:20px;font-weight:400;color:#667085}.av2-ocard-delta{margin-top:6px;display:inline-flex;align-items:center;gap:6px;font-size:12px;line-height:18px;font-weight:400;color:#1d2939}.av2-ocard-delta b{font-weight:600;color:#667085}.av2-ocard-delta svg{flex-shrink:0;color:#039855}.av2-ocard-delta.is-down svg{color:#d92d20}.av2-search{position:relative;display:flex;align-items:center;gap:8px;height:44px;padding:0 12px;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;color:#98a2b3;font-size:14px;flex-shrink:0}.av2-search svg{flex-shrink:0}.av2-search input{flex:1;min-width:0;height:100%;border:0;outline:0;padding:0;background:transparent;font:inherit;font-size:14px;font-weight:500;color:#101828}.av2-search input::placeholder{color:#98a2b3}.av2-search:focus-within{box-shadow:inset 0 0 0 1px #66c8ff,0 0 0 4px #eaf8ff}.av2-search--sm{width:300px}.av2-search--md{width:320px}.av2-search--lg{width:340px}.av2-select{height:44px;padding:0 36px 0 12px;border:0;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;font:inherit;font-size:14px;font-weight:500;color:#344054;cursor:pointer;appearance:none;-webkit-appearance:none;background-image:url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23344054' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>\");background-repeat:no-repeat;background-position:right 12px center;flex-shrink:0}.av2-select:focus{outline:0;box-shadow:inset 0 0 0 1px #66c8ff,0 0 0 4px #eaf8ff}.av2-select--sm{width:180px}.av2-chip{display:flex;align-items:center;gap:8px;height:44px;padding:0 12px;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;font-size:14px;color:#344054;white-space:nowrap;flex-shrink:0}.av2-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:44px;padding:0 16px;border:0;border-radius:8px;font-family:inherit;font-size:14px;line-height:20px;font-weight:600;cursor:pointer;white-space:nowrap;flex-shrink:0;transition:background-color .15s cubic-bezier(.4,0,.2,1)}.av2-btn svg{flex-shrink:0}.av2-btn:disabled{opacity:.55;cursor:not-allowed}.av2-btn--ghost{background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;color:#344054;font-weight:500}.av2-btn--ghost:hover:not(:disabled){background:#f9fafb}.av2-btn--primary{background:#00a3ff;color:#fff;font-size:16px;line-height:24px}.av2-btn--primary:hover:not(:disabled){background:#009bf3}.av2-btn--sm{height:36px;padding:0 14px;font-size:13px}.av2-btn--wide{padding:0 18px}.av2-tabs{display:flex;align-items:center;gap:6px}.av2-tab{height:44px;padding:0 26px;border:0;border-radius:6px;background:transparent;display:inline-flex;align-items:center;justify-content:center;font-family:inherit;font-size:16px;font-weight:500;color:#475467;cursor:pointer}.av2-tab.is-active{background:#eaf8ff;color:#009bf3;font-weight:500}.av2-badge{display:inline-flex;align-items:center;height:22px;padding:2px 8px;border-radius:16px;background:#eaf8ff;color:#009bf3;font-size:12px;font-weight:500;line-height:18px;white-space:nowrap}.av2-badge--count{height:22px;padding:0 8px}.av2-badge--success{background:#ecfdf3;color:#027a48}.av2-badge--error{background:#fef3f2;color:#b42318}.av2-badge--warning{background:#fffaeb;color:#b54708}.av2-badge--gray{background:#f2f4f7;color:#344054}.av2-badge--purple{background:#f9f5ff;color:#5925dc}.av2-link{color:#00a3ff;font-size:14px;font-weight:500;text-decoration:underline;cursor:pointer}.av2-link:hover{color:#009bf3;text-decoration:underline}.av2-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.av2-muted{color:#667085}.av2-dim{color:#475467}.av2-faint{color:#98a2b3}table tbody td.av2-dim{color:#475467}table tbody td.av2-faint{color:#98a2b3}.av2-table-wrap{overflow-x:auto}.av2-table{width:100%;border-collapse:separate;border-spacing:0;margin:0}.av2-table thead th{background:#f9fafb;padding:12px;font-size:12px;line-height:18px;font-weight:500;color:#667085;text-align:left;text-transform:none;letter-spacing:0;border:0;white-space:nowrap}.av2-table thead th:first-child{border-radius:8px 0 0}.av2-table thead th:last-child{border-radius:0 8px 0 0}.av2-table tbody td{padding:16px 12px;border:0;border-bottom:1px solid #F2F4F7;font-size:14px;line-height:20px;font-weight:500;color:#101828;vertical-align:middle}.av2-table .av2-th-sort{display:inline-flex;align-items:center;gap:4px}.av2-table .av2-cell-icon{display:flex;align-items:center;gap:8px;min-width:0}.av2-table .av2-cell-icon svg{flex-shrink:0}.av2-table .av2-cell-icon span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av2-table .av2-cell-stack{display:flex;flex-direction:column;gap:2px}.av2-table .av2-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av2-sortable{cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap}.av2-table--lined thead th{background:transparent;border-bottom:1px solid #EAECF0;border-radius:0!important}.av2-empty{display:flex;flex-direction:column;align-items:center;gap:12px;padding:24px 16px 32px;text-align:center}.av2-empty-img{display:block;width:160px;height:120px}.av2-empty-text{display:flex;flex-direction:column;gap:4px;align-items:center}.av2-empty-title{font-size:16px;line-height:24px;font-weight:600;color:#101828}.av2-empty-sub{max-width:480px;font-size:14px;line-height:20px;color:#667085;text-wrap:pretty}.av2-col-head{border-radius:8px;background:#f9fafb;padding:14px 16px;font-size:12px;line-height:20px;font-weight:500;color:#344054;display:flex;align-items:center;gap:8px}.av2-avatar{width:32px;height:32px;flex-shrink:0;border-radius:9999px;background:#eaf8ff;color:#009bf3;display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:700}.av2-bar{flex:1;height:5px;border-radius:9999px;background:#f2f4f7;overflow:hidden;display:block;min-width:60px}.av2-bar span{display:block;height:5px;border-radius:9999px;background:#00a3ff}@keyframes av2-shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.av2-sk{display:block;width:100%;max-width:100%;height:12px;border-radius:4px;flex-shrink:0;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%;animation:av2-shimmer 3s linear infinite}.av2-sk--value{width:72px;height:28px;border-radius:6px}.av2-sk--title{width:220px;height:18px}.av2-sk--note{width:60%}.av2-sk--block{border-radius:8px}@media (prefers-reduced-motion: reduce){.av2-sk{animation:none}}.cf-crumb{font-size:13px;line-height:20px;color:#667085}.cf-crumb a{font-weight:600;color:#00a3ff}.cf-header{background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #f1f1f4,0 3px 4px #00000008;padding:16px 20px;display:flex;align-items:center;gap:12px}.cf-header-text{display:flex;flex-direction:column;gap:4px;min-width:0}.cf-title{font-size:16px;line-height:24px;font-weight:600;color:#101828}.cf-sk-title{margin:3px 0}.cf-desc{border:none;outline:none;padding:0;background:transparent;font-family:inherit;font-size:13px;line-height:18px;color:#344054;min-width:320px}.cf-desc::placeholder{color:#98a2b3}.cf-publish{padding:0 20px;box-shadow:0 1px 2px #1018280d}.cf-draft{padding:0 18px;box-shadow:inset 0 0 0 1px #d0d5dd,0 1px 2px #1018280d}.cf-body{display:flex;gap:16px;align-items:flex-start}.cf-left{width:300px;flex-shrink:0;background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #f1f1f4,0 3px 4px #00000008;padding:16px;display:flex;flex-direction:column;gap:10px;position:sticky;top:calc(var(--bs-app-header-height, 0px) + 16px);max-height:calc(100vh - var(--bs-app-header-height, 0px) - 32px);overflow-y:auto;scrollbar-width:thin}.cf-left-title{font-size:14px;line-height:20px;font-weight:600;color:#101828}.cf-section{display:flex;align-items:center;gap:8px;padding:2px 0;font-size:13px;font-weight:500;color:#344054;cursor:pointer;white-space:nowrap}.cf-section.is-open{color:#1d2939}.cf-rule{flex:1;border-top:1px solid #EAECF0}.cf-chev{display:flex;color:#98a2b3}.cf-chev svg{transition:transform .15s cubic-bezier(.4,0,.2,1)}.cf-chev .rotate{transform:rotate(-90deg)}.cf-items{display:flex;flex-direction:column;gap:8px;padding-left:12px;font-size:13px;color:#475467}.cf-schedule-title{font-size:14px;font-weight:600;color:#101828;margin-top:6px}.cf-schedule{display:flex;flex-direction:column;gap:6px;font-size:13px;color:#475467}.cf-schedule>div{display:flex;align-items:center;gap:6px}.cf-right{flex:1;min-width:0;display:flex;flex-direction:column;gap:16px}.cf-card{background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #f1f1f4,0 3px 4px #00000008;padding:20px;display:flex;flex-direction:column;gap:14px}.cf-card--lg{border-radius:8px}.cf-block-head{display:flex;align-items:center;gap:12px}.cf-block-title{font-size:15px;font-weight:600;color:#101828}.cf-divider-head{display:flex;align-items:center;gap:10px;margin-top:4px}.cf-label{font-size:14px;font-weight:600;color:#101828}.cf-label-sm{font-size:13px;font-weight:600;color:#101828}.cf-muted{color:#667085}.cf-hint{font-size:12px;line-height:18px;color:#667085}.cf-hint--tight{margin-top:-8px}.cf-hint--wrap{max-width:640px;text-wrap:pretty}.cf-field{font-size:13px;font-weight:500;color:#344054;min-width:150px;flex-shrink:0}.cf-row{display:flex;align-items:center;gap:12px}.cf-row--top{margin-top:6px}.cf-row--wrap{flex-wrap:wrap}.cf-stack{display:flex;flex-direction:column;gap:8px}.cf-stack--tight,.cf-stack--sm{gap:4px}.cf-stack--xs{gap:2px}.cf-grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px}.cf-toggle-row{display:flex;align-items:center;gap:10px}.cf-switch{width:36px;height:20px;padding:2px;border:none;border-radius:9999px;background:#eaecf0;display:flex;align-items:center;justify-content:flex-start;flex-shrink:0;cursor:pointer;transition:background .15s cubic-bezier(.4,0,.2,1)}.cf-switch>span{width:16px;height:16px;border-radius:9999px;background:#fff;box-shadow:0 1px 2px #1018280d}.cf-switch.is-on{background:#00a3ff;justify-content:flex-end}.cf-switch--top{margin-top:2px}.cf-chipbox{flex:1;min-width:0;display:flex;flex-wrap:wrap;gap:6px;border-radius:8px;box-shadow:inset 0 0 0 1px #d0d5dd;padding:8px 10px}.cf-chipbox--lg{gap:8px;padding:10px 12px}.cf-chip{display:flex;align-items:center;gap:6px;background:#f9fafb;box-shadow:inset 0 0 0 1px #eaecf0;border-radius:9999px;padding:3px 8px;font-size:12px;color:#344054;white-space:nowrap;flex-shrink:0;max-width:100%}.cf-chip--lg{gap:8px;background:#fff;padding:5px 11px;font-size:13px;color:#1d2939}.cf-chip-ini{color:#00a3ff;font-weight:600;font-size:11px}.cf-chip-tag{display:inline-flex;align-items:center;justify-content:center;padding:1px 5px;border-radius:6px;background:#eaf8ff;color:#00a3ff;font-weight:700;font-size:11px;letter-spacing:.02em}.cf-chip-x{display:flex;cursor:pointer;color:#98a2b3}.cf-chip-x:hover{color:#344054}.cf-chip-input{flex:1;min-width:100px;border:none;outline:none;background:transparent;font-family:inherit;font-size:12px;color:#101828}.cf-chip-input::placeholder{color:#98a2b3}.cf-chip-input--lg{min-width:120px;font-size:13px}.cf-inner{border-radius:8px;box-shadow:inset 0 0 0 1px #eaecf0;padding:14px 16px;display:flex;flex-direction:column;gap:8px}.cf-inline{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:13px;color:#344054}.cf-inline--top{margin-top:2px}.cf-mini{height:32px;padding:0 28px 0 10px;border:none;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;font-family:inherit;font-size:13px;font-weight:600;color:#101828;cursor:pointer;appearance:none;-webkit-appearance:none;background-image:url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%23667085' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>\");background-repeat:no-repeat;background-position:right 8px center;outline:none}.cf-info{display:flex;align-items:center;gap:6px;font-size:12px;line-height:18px;color:#667085}.cf-info svg{flex-shrink:0}.cf-info--wrap{align-items:flex-start;max-width:560px;text-wrap:pretty}.cf-info--wrap svg{margin-top:3px}.cf-checks{display:flex;align-items:center;gap:16px;flex-wrap:wrap;font-size:13px;color:#344054}.cf-checks-label{font-weight:500}.cf-check{display:flex;align-items:center;gap:6px;margin:0;font-size:13px;color:#344054;cursor:pointer;-webkit-user-select:none;user-select:none}.cf-check-box{width:16px;height:16px;border-radius:4px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;display:flex;align-items:center;justify-content:center;color:#fff;flex-shrink:0}.cf-check-box.is-on{background:#00a3ff;box-shadow:none}.cf-box{border-radius:8px;box-shadow:inset 0 0 0 1px #eaecf0;overflow:hidden;display:flex;flex-direction:column}.cf-box--pad{padding:14px 16px;gap:6px;overflow:visible}.cf-box--row{padding:14px 16px;flex-direction:row;align-items:flex-start;gap:12px}.cf-box--nested{background:#fff;padding:12px 14px;gap:8px;margin-left:46px;overflow:visible}.cf-box--open{overflow:visible}.cf-box--open>.cf-box-sub:last-child{border-radius:0 0 8px 8px}.cf-box-row{padding:14px 16px;display:flex;align-items:flex-start;gap:12px}.cf-box-row--flush{padding:0;gap:10px}.cf-box-sub{border-top:1px solid #EAECF0;background:#f9fafb;padding:16px 16px 18px 64px;display:flex;flex-direction:column;gap:12px}.cf-options{display:flex;flex-direction:column;gap:10px}.cf-option{background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #eaecf0;padding:12px 14px;display:flex;align-items:flex-start;gap:10px;cursor:pointer}.cf-option.is-on{box-shadow:inset 0 0 0 1.5px #00a3ff}.cf-box-sep{display:flex;flex-direction:column;gap:12px;padding-top:14px;border-top:1px solid #EAECF0}.cf-num{display:flex;align-items:center;gap:8px;height:36px;padding:0 6px 0 12px;border-radius:8px;box-shadow:inset 0 0 0 1px #d0d5dd;margin:0}.cf-num input{width:52px;border:none;outline:none;background:transparent;font-family:inherit;font-size:14px;font-weight:600;color:#101828}.cf-num span{font-size:13px;color:#667085;padding-right:6px}.cf-pill{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;border-radius:9999px;padding:4px 12px}.cf-pill--pass{background:#ecfdf3;color:#027a48}.cf-pill--fail{background:#fef3f2;color:#d92d20}.cf-error{display:flex;gap:6px;font-size:12px;font-weight:500;color:#d92d20;align-items:flex-start;line-height:18px;max-width:640px}.cf-error svg{flex-shrink:0;margin-top:3px}.cf-error--indent{margin-left:162px}.cf-check.is-blocked{color:#98a2b3;cursor:not-allowed}.cf-select{position:relative;display:inline-block;vertical-align:middle}.cf-select-btn{display:inline-flex;align-items:center;gap:8px;height:32px;padding:0 10px 0 12px;border:none;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;font-family:inherit;font-size:13px;font-weight:600;color:#101828;cursor:pointer;white-space:nowrap}.cf-select-btn svg{color:#667085;transition:transform .15s ease}.is-open .cf-select-btn{box-shadow:0 0 0 2px #99dbff,inset 0 0 0 1px #d0d5dd}.is-open .cf-select-btn svg{transform:rotate(180deg)}.cf-select-menu{position:absolute;top:calc(100% + 4px);left:0;z-index:30;min-width:100%;padding:4px;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #eaecf0,0 8px 24px #1018281f}.cf-select-item{padding:8px 12px;border-radius:6px;font-size:13px;color:#344054;white-space:nowrap;cursor:pointer}.cf-select-item:hover{background:#f9fafb}.cf-select-item.is-on{background:#eaf8ff;color:#009bf3;font-weight:600}.cf-chipbox{position:relative}.cf-chipbox.is-open{box-shadow:0 0 0 2px #99dbff,inset 0 0 0 1px #d0d5dd}.cf-suggest{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:30;max-height:260px;overflow-y:auto;padding:4px;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #eaecf0,0 8px 24px #1018281f}.cf-suggest-item{display:flex;align-items:center;gap:8px;padding:6px 10px;border-radius:6px;cursor:pointer}.cf-suggest-item:hover{background:#f9fafb}.cf-suggest-name{font-size:13px;color:#101828}.cf-suggest-mail{font-size:12px;color:#667085;margin-left:auto}.cf-suggest-empty{padding:8px 10px;font-size:12px;color:#667085}.cf-error--page{margin:0 0 12px}.cf-autotask{margin-top:12px;padding:14px 16px;border-radius:10px;background:#f9fafb;box-shadow:inset 0 0 0 1px #eaecf0;display:flex;flex-direction:column;gap:8px}.cf-autotask-title{font-size:14px;font-weight:600;color:#1d2939}.cf-autotask-title:not(:first-child){margin-top:6px}.cf-autotask-choices{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}@media (max-width: 720px){.cf-autotask-choices{grid-template-columns:1fr}}.cf-choice{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border:0;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;font:inherit;text-align:left;cursor:pointer}.cf-choice.is-on{background:#f5faff;box-shadow:inset 0 0 0 1px #66c8ff}.cf-radio{width:18px;height:18px;flex-shrink:0;margin-top:1px;border-radius:9999px;box-shadow:inset 0 0 0 1px #d0d5dd;display:flex;align-items:center;justify-content:center}.cf-radio span{width:8px;height:8px;border-radius:9999px;background:transparent}.cf-radio.is-on{box-shadow:inset 0 0 0 1px #1570ef}.cf-radio.is-on span{background:#1570ef}.cf-choice-text{display:flex;flex-direction:column;gap:2px;min-width:0}.cf-choice-title{font-size:14px;font-weight:600;color:#101828}.cf-choice-sub{font-size:12px;color:#667085}.cf-autotask-validity{display:flex;align-items:center;flex-wrap:wrap;gap:10px;font-size:13px;color:#344054}.cf-validity-select{width:96px}.cf-reminder{display:inline-flex;align-items:center;gap:6px}.cf-reminder-select{width:120px}.cf-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:none;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;color:#344054;cursor:pointer}.cf-icon-btn:hover{background:#f9fafb}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i6.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.AuditV2ShimmerComponent, selector: "lib-audit-v2-shimmer", inputs: ["rows"] }, { kind: "component", type: i8.AuditV2SelectComponent, selector: "lib-audit-v2-select", inputs: ["options", "placeholder", "searchable", "ariaLabel", "disabled", "value"], outputs: ["changed"] }] });
900
900
  }
901
901
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuditV2ConfigureComponent, decorators: [{
902
902
  type: Component,
903
- args: [{ selector: 'lib-audit-v2-configure', template: "<div class=\"av2-page audit-configure\">\r\n\r\n <!-- Breadcrumb -->\r\n <div class=\"cf-crumb\">\r\n <a routerLink=\"/manage/trax/audit-v2/manage\">Manage Audit</a> \u203A Configure\r\n </div>\r\n\r\n <!-- Title + actions -->\r\n <div class=\"cf-header\">\r\n <div class=\"cf-header-text\">\r\n <span class=\"av2-sk av2-sk--title cf-sk-title\" *ngIf=\"loading\"></span>\r\n <div class=\"cf-title\" *ngIf=\"!loading\">{{ auditName || 'Audit' }}</div>\r\n <input type=\"text\" class=\"cf-desc\" placeholder=\"Enter Audit Description\" [(ngModel)]=\"description\">\r\n </div>\r\n <div class=\"av2-grow\"></div>\r\n <button type=\"button\" class=\"av2-btn av2-btn--primary cf-publish\" [disabled]=\"!canSave\" [title]=\"saveBlockedReason || publishBlockedReason\" (click)=\"publish()\">\r\n {{ saving ? 'Saving\u2026' : (published ? 'Save & Publish' : 'Publish') }}\r\n </button>\r\n <button type=\"button\" class=\"av2-btn av2-btn--ghost cf-draft\" [disabled]=\"!canSave\" [title]=\"saveBlockedReason\" (click)=\"saveDraft()\">Save as Draft</button>\r\n </div>\r\n\r\n <div class=\"cf-error cf-error--page\" *ngIf=\"loadError\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n {{ loadError }}\r\n </div>\r\n\r\n <!-- Chip picker: chips + input + suggestion list (one template, used for every user list) -->\r\n <ng-template #chipPicker let-list=\"list\" let-large=\"large\">\r\n <div class=\"cf-chipbox\" [class.cf-chipbox--lg]=\"large\" [class.is-open]=\"openChips === list\" (click)=\"focusChips(list, $event)\">\r\n <span class=\"cf-chip\" [class.cf-chip--lg]=\"large\" *ngFor=\"let u of chipsOf(list); let i = index\" [title]=\"u.e\">\r\n <span [class]=\"large ? 'cf-chip-tag' : 'cf-chip-ini'\">{{ u.i }}</span>{{ u.n }}\r\n <a class=\"cf-chip-x\" (click)=\"removeChip(list, i); $event.stopPropagation()\">\r\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\"><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line></svg>\r\n </a>\r\n </span>\r\n <input type=\"text\" class=\"cf-chip-input\" [class.cf-chip-input--lg]=\"large\" placeholder=\"Add user...\"\r\n [ngModel]=\"draftOf(list)\" (ngModelChange)=\"setDraft(list, $event)\" (focus)=\"focusChips(list, $event)\" (keyup.enter)=\"addChip(list)\">\r\n <div class=\"cf-suggest\" *ngIf=\"openChips === list\">\r\n <div class=\"cf-suggest-item\" *ngFor=\"let u of suggestions(list)\" (click)=\"addSuggestion(list, u, $event)\">\r\n <span class=\"cf-chip-ini\">{{ u.i }}</span>\r\n <span class=\"cf-suggest-name\">{{ u.n }}</span>\r\n <span class=\"cf-suggest-mail\">{{ u.e }}</span>\r\n </div>\r\n <div class=\"cf-suggest-empty\" *ngIf=\"!suggestions(list).length\">\r\n {{ users.length ? 'No matching user' : 'No users for this client' }}\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Dropdown: styled like the prototype instead of the browser's native select -->\r\n <ng-template #dropdown let-key=\"key\" let-options=\"options\">\r\n <span class=\"cf-select\" [class.is-open]=\"openSelect === key\">\r\n <button type=\"button\" class=\"cf-select-btn\" (click)=\"toggleSelect(key, $event)\">\r\n {{ selectLabel(key, options) }}\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"6 9 12 15 18 9\"></polyline></svg>\r\n </button>\r\n <div class=\"cf-select-menu\" *ngIf=\"openSelect === key\">\r\n <div class=\"cf-select-item\" *ngFor=\"let o of options\" [class.is-on]=\"isPicked(key, o)\"\r\n (click)=\"pick(key, o, $event)\">{{ o.label }}</div>\r\n </div>\r\n </span>\r\n </ng-template>\r\n\r\n <div class=\"cf-body\" *ngIf=\"!loadError\">\r\n <!-- Section tree -->\r\n <aside class=\"cf-left\">\r\n <lib-audit-v2-shimmer *ngIf=\"loading\" [rows]=\"3\"></lib-audit-v2-shimmer>\r\n\r\n <ng-container *ngIf=\"!loading\">\r\n <div class=\"cf-left-title\">{{ auditName || 'Audit' }}</div>\r\n\r\n <div class=\"cf-hint\" *ngIf=\"!sections.length\">No questions yet</div>\r\n <ng-container *ngFor=\"let s of sections\">\r\n <div class=\"cf-section\" [class.is-open]=\"s.open\" (click)=\"toggleSection(s)\">\r\n {{ s.label }}\r\n <span class=\"cf-rule\"></span>\r\n <span class=\"cf-chev\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" [class.rotate]=\"!s.open\">\r\n <polyline points=\"6 9 12 15 18 9\"></polyline>\r\n </svg>\r\n </span>\r\n </div>\r\n <div class=\"cf-items\" *ngIf=\"s.open && s.items.length\">\r\n <div *ngFor=\"let it of s.items\">{{ it }}</div>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"cf-schedule-title\">Schedule</div>\r\n <div class=\"cf-schedule\">\r\n <div>\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"2\"></rect>\r\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"></line>\r\n <line x1=\"8\" y1=\"3\" x2=\"8\" y2=\"6\"></line>\r\n <line x1=\"16\" y1=\"3\" x2=\"16\" y2=\"6\"></line>\r\n </svg>\r\n {{ schedule }}\r\n </div>\r\n <div>\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"12\" cy=\"12\" r=\"9\"></circle>\r\n <polyline points=\"12 7 12 12 15.5 14\"></polyline>\r\n </svg>\r\n {{ scheduleWindow }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </aside>\r\n\r\n <!-- Configuration -->\r\n <div class=\"cf-right\">\r\n\r\n <section class=\"cf-card\" *ngIf=\"loading\">\r\n <lib-audit-v2-shimmer [rows]=\"4\"></lib-audit-v2-shimmer>\r\n </section>\r\n\r\n <ng-container *ngIf=\"!loading\">\r\n\r\n <!-- ===== Advance Configuration ===== -->\r\n <section class=\"cf-card\">\r\n <div class=\"cf-block-head\">\r\n <span class=\"cf-block-title\">Advance Configuration</span>\r\n <span class=\"cf-rule\"></span>\r\n <span class=\"cf-chev\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"6 9 12 15 18 9\"></polyline></svg>\r\n </span>\r\n </div>\r\n\r\n <!-- Audit Owner -->\r\n <div>\r\n <div class=\"cf-label\">Audit Owner</div>\r\n <div class=\"cf-hint\">Owners get access to manage the audit</div>\r\n </div>\r\n <div class=\"cf-row\">\r\n <span class=\"cf-field\">Can be managed by</span>\r\n <ng-container *ngTemplateOutlet=\"chipPicker; context: { list: 'owners', large: false }\"></ng-container>\r\n </div>\r\n\r\n <!-- Approver -->\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Approver</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"approverOn\" (click)=\"toggleApprover()\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--tight\">By enabling, the users will be able to approve the audit</div>\r\n <div class=\"cf-row\" *ngIf=\"approverOn\">\r\n <span class=\"cf-field\">To be approved by</span>\r\n <ng-container *ngTemplateOutlet=\"chipPicker; context: { list: 'approvers', large: false }\"></ng-container>\r\n </div>\r\n <div class=\"cf-error\" *ngIf=\"approverError\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n {{ approverError }}\r\n </div>\r\n <div class=\"cf-info cf-info--wrap\" *ngIf=\"!approverOn && approvers.length\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line></svg>\r\n Approver is off, so the {{ approvers.length }} approver{{ approvers.length === 1 ? '' : 's' }} added will be removed when you save. Turn Approver back on to keep {{ approvers.length === 1 ? 'it' : 'them' }}.\r\n </div>\r\n <div class=\"cf-info cf-info--wrap\" *ngIf=\"!approverOn && !approvers.length\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line></svg>\r\n Approver is off, so submitted audits are not sent for approval. Turn it on to add approvers or to send flags and reports to them.\r\n </div>\r\n\r\n <!-- Reminder -->\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Reminder</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"reminderOn\" (click)=\"toggleReminder()\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--tight\">By enabling, the users will be reminded in the selected interval</div>\r\n <div class=\"cf-inner\" *ngIf=\"reminderOn\">\r\n <div class=\"cf-inline\">\r\n Notify user before\r\n <span class=\"cf-reminder\" *ngFor=\"let m of reminders; let i = index\">\r\n <lib-audit-v2-select class=\"cf-reminder-select\" [value]=\"m\" [options]=\"reminderOpts[i] || []\" [searchable]=\"false\"\r\n [ariaLabel]=\"'Reminder ' + (i + 1) + ' in minutes'\" (changed)=\"setReminder(i, $event.target.value)\"></lib-audit-v2-select>\r\n <a class=\"cf-chip-x\" *ngIf=\"reminders.length > 1\" title=\"Remove reminder\" (click)=\"removeReminder(i)\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\"><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line></svg>\r\n </a>\r\n </span>\r\n <button type=\"button\" class=\"cf-icon-btn\" *ngIf=\"reminders.length < maxReminders\" title=\"Add reminder\" (click)=\"addReminder()\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"></line><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line></svg>\r\n </button>\r\n </div>\r\n <div class=\"cf-info\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line></svg>\r\n Send alerts {{ reminderSummary }} mins before the audit end time\r\n </div>\r\n </div>\r\n\r\n <!-- Notify Flags -->\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Notify Flags</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"notifyFlagsOn\" (click)=\"toggleNotifyFlags()\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--tight\">By enabling, all flags will be sent as an email</div>\r\n <ng-container *ngIf=\"notifyFlagsOn\">\r\n <div class=\"cf-checks\">\r\n <span class=\"cf-checks-label\">Send To</span>\r\n <label class=\"cf-check\" [class.is-blocked]=\"!hasApprovers && !notifySendApprover\" (click)=\"toggleSendApprover('notifySendApprover')\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"notifySendApprover\">\r\n <svg *ngIf=\"notifySendApprover\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Approver\r\n </label>\r\n <label class=\"cf-check\" (click)=\"notifySendCustom = !notifySendCustom\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"notifySendCustom\">\r\n <svg *ngIf=\"notifySendCustom\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Custom\r\n </label>\r\n </div>\r\n <ng-container *ngIf=\"notifySendCustom\">\r\n <ng-container *ngTemplateOutlet=\"chipPicker; context: { list: 'notifyUsers', large: false }\"></ng-container>\r\n </ng-container>\r\n <div class=\"cf-error\" *ngIf=\"notifyFlagsError\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n {{ notifyFlagsError }}\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Notify on Recurring Flags -->\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Notify on Recurring Flags</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"recurringFlagsOn\" (click)=\"toggleRecurringFlags()\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--tight\">When enabled, emails are sent for recurring flags based on the configured threshold</div>\r\n\r\n <div class=\"cf-inner\" *ngIf=\"recurringFlagsOn\">\r\n <div class=\"cf-inline\">\r\n Send Email if the same question is flagged\r\n <ng-container *ngTemplateOutlet=\"dropdown; context: { key: 'recurringThreshold', options: thresholdOpts }\"></ng-container>\r\n times by the same store\r\n </div>\r\n <div class=\"cf-info\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line></svg>\r\n Once the threshold is reached and an email is sent, the flag count resets to zero\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"recurringFlagsOn\">\r\n <div class=\"cf-checks\">\r\n <span class=\"cf-checks-label\">Send To</span>\r\n <label class=\"cf-check\" [class.is-blocked]=\"!hasApprovers && !recurringSendApprover\" (click)=\"toggleSendApprover('recurringSendApprover')\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"recurringSendApprover\">\r\n <svg *ngIf=\"recurringSendApprover\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Approver\r\n </label>\r\n <label class=\"cf-check\" (click)=\"toggleRecurringCustom()\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"recurringSendCustom\">\r\n <svg *ngIf=\"recurringSendCustom\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Custom\r\n </label>\r\n <label class=\"cf-check\" (click)=\"recurringSameAsNotify = !recurringSameAsNotify\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"recurringSameAsNotify\">\r\n <svg *ngIf=\"recurringSameAsNotify\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Use same users from Notify Flags\r\n </label>\r\n </div>\r\n <ng-container *ngIf=\"recurringSendCustom\">\r\n <ng-container *ngTemplateOutlet=\"chipPicker; context: { list: 'recurringUsers', large: false }\"></ng-container>\r\n </ng-container>\r\n <div class=\"cf-info\" *ngIf=\"recurringSameAsNotify\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line></svg>\r\n {{ notifyRecipientsLabel }}\r\n </div>\r\n <div class=\"cf-error\" *ngIf=\"recurringFlagsError\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n {{ recurringFlagsError }}\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Daily report -->\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Enable - Daily Report</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"dailyReportOn\" (click)=\"toggleDailyReport()\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--tight\">By Enabling, compliance score will be sent as an email to the above users</div>\r\n <ng-container *ngIf=\"dailyReportOn\">\r\n <div class=\"cf-checks\">\r\n <span class=\"cf-checks-label\">Send To</span>\r\n <label class=\"cf-check\" [class.is-blocked]=\"!hasApprovers && !dailySendApprover\" (click)=\"toggleSendApprover('dailySendApprover')\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"dailySendApprover\">\r\n <svg *ngIf=\"dailySendApprover\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Approver\r\n </label>\r\n <label class=\"cf-check\" (click)=\"dailySendCustom = !dailySendCustom\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"dailySendCustom\">\r\n <svg *ngIf=\"dailySendCustom\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Custom\r\n </label>\r\n </div>\r\n <ng-container *ngIf=\"dailySendCustom\">\r\n <ng-container *ngTemplateOutlet=\"chipPicker; context: { list: 'dailyUsers', large: false }\"></ng-container>\r\n </ng-container>\r\n <label class=\"cf-check\" (click)=\"sharePostApproval = !sharePostApproval\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"sharePostApproval\">\r\n <svg *ngIf=\"sharePostApproval\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Share Report Post Approval\r\n </label>\r\n <div class=\"cf-error\" *ngIf=\"dailyReportError\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n {{ dailyReportError }}\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Export submission: Tango users only, as the v1 Configure (its stored value is kept for everyone else). -->\r\n <div class=\"cf-grid2\" *ngIf=\"access.isTango\">\r\n <div class=\"cf-stack cf-stack--tight\">\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Export Submission</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"exportSubmissionOn\" (click)=\"exportSubmissionOn = !exportSubmissionOn\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint\">Enable this to allow audit submitters to download their submission as a PDF file</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Redo validity -->\r\n <div class=\"cf-grid2\">\r\n <div class=\"cf-stack\">\r\n <div class=\"cf-label\">Redo Validity</div>\r\n <div class=\"cf-inline\">\r\n Redo valid for\r\n <ng-container *ngTemplateOutlet=\"dropdown; context: { key: 'redoValidFor', options: redoDayOpts }\"></ng-container>\r\n Day from Redo creation\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Auto create task -->\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Auto Create Task for Flags</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"autoCreateTaskOn\" (click)=\"autoCreateTaskOn = !autoCreateTaskOn\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--tight\">By enabling, a task is automatically created for every flagged question in the audit</div>\r\n\r\n <!-- Who gets the task and how long it stays open (as the Checklist Configure page) -->\r\n <div class=\"cf-autotask\" *ngIf=\"autoCreateTaskOn\">\r\n <div class=\"cf-autotask-title\">Task Assignee</div>\r\n <div class=\"cf-hint cf-hint--tight\">Choose who the flagged task is assigned to</div>\r\n <div class=\"cf-autotask-choices\">\r\n <button type=\"button\" class=\"cf-choice\" [class.is-on]=\"taskAssignee === 'submitter'\" (click)=\"taskAssignee = 'submitter'\">\r\n <span class=\"cf-radio\" [class.is-on]=\"taskAssignee === 'submitter'\"><span></span></span>\r\n <span class=\"cf-choice-text\">\r\n <span class=\"cf-choice-title\">Audit Submitter</span>\r\n <span class=\"cf-choice-sub\">Task is assigned to the user who filled the audit</span>\r\n </span>\r\n </button>\r\n <button type=\"button\" class=\"cf-choice\" [class.is-on]=\"taskAssignee === 'store'\" (click)=\"taskAssignee = 'store'\">\r\n <span class=\"cf-radio\" [class.is-on]=\"taskAssignee === 'store'\"><span></span></span>\r\n <span class=\"cf-choice-text\">\r\n <span class=\"cf-choice-title\">Store User</span>\r\n <span class=\"cf-choice-sub\">Task is assigned to the user mapped to the flagged store</span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"cf-autotask-title\">Task Validity</div>\r\n <div class=\"cf-autotask-validity\">\r\n <span>Task valid for</span>\r\n <lib-audit-v2-select class=\"cf-validity-select\" [(ngModel)]=\"taskValidity\" [options]=\"taskValidityOptions\"\r\n [searchable]=\"false\" ariaLabel=\"Task validity in days\"></lib-audit-v2-select>\r\n <span>days from task creation</span>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <!-- ===== Audit Configuration ===== -->\r\n <div class=\"cf-divider-head\">\r\n <span class=\"cf-block-title\">Audit Configuration</span>\r\n <span class=\"cf-rule\"></span>\r\n </div>\r\n\r\n <section class=\"cf-card cf-card--lg\">\r\n <div class=\"cf-block-title\">Submission &amp; Visibility</div>\r\n\r\n <!-- cf-box--open: the dispute-window and response-delay menus must not be clipped by the box -->\r\n <div class=\"cf-box cf-box--open\">\r\n <div class=\"cf-box-row\">\r\n <button type=\"button\" class=\"cf-switch cf-switch--top\" [class.is-on]=\"showResponseInApp\"\r\n (click)=\"showResponseInApp = !showResponseInApp\"><span></span></button>\r\n <div class=\"cf-stack cf-stack--xs\">\r\n <div class=\"cf-label\">Show Response in Mobile App</div>\r\n <div class=\"cf-hint\">By enabling this option, store users can view the audit response in the Mobile App.</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"cf-box-sub\" *ngIf=\"showResponseInApp\">\r\n <div class=\"cf-stack cf-stack--xs\">\r\n <div class=\"cf-label-sm\">Response Visibility</div>\r\n <div class=\"cf-hint\">Choose when the response becomes visible to store users</div>\r\n </div>\r\n\r\n <div class=\"cf-options\">\r\n <div class=\"cf-option\" [class.is-on]=\"responseVisibility === 'pre'\" (click)=\"responseVisibility = 'pre'\">\r\n <span class=\"cf-radio\" [class.is-on]=\"responseVisibility === 'pre'\"></span>\r\n <div class=\"cf-stack cf-stack--sm\">\r\n <div class=\"cf-label-sm\">Pre-approval</div>\r\n <div class=\"cf-hint\">The audit response will be visible to store users before it is approved.</div>\r\n <div class=\"cf-inline cf-inline--top\">\r\n Show response\r\n <ng-container *ngTemplateOutlet=\"dropdown; context: { key: 'respDelay', options: respDelayOpts }\"></ng-container>\r\n after submission\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"cf-option\" [class.is-on]=\"responseVisibility === 'post'\" (click)=\"responseVisibility = 'post'\">\r\n <span class=\"cf-radio\" [class.is-on]=\"responseVisibility === 'post'\"></span>\r\n <div class=\"cf-stack cf-stack--sm\">\r\n <div class=\"cf-label-sm\" [class.cf-muted]=\"responseVisibility !== 'post'\">Post-approval</div>\r\n <div class=\"cf-hint\">Once the response is approved, it will automatically be displayed in the Mobile App. Store users cannot raise a dispute.</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"cf-box-sep\">\r\n <ng-container *ngIf=\"responseVisibility === 'pre'\">\r\n <div class=\"cf-box-row cf-box-row--flush\">\r\n <button type=\"button\" class=\"cf-switch cf-switch--top\" [class.is-on]=\"disputeOn\" (click)=\"disputeOn = !disputeOn\"><span></span></button>\r\n <div class=\"cf-stack cf-stack--xs\">\r\n <div class=\"cf-label-sm\">Dispute Configuration</div>\r\n <div class=\"cf-hint cf-hint--wrap\">When enabled, the store team can raise a dispute against the auditor's submission once the response becomes visible to them.</div>\r\n </div>\r\n </div>\r\n <div class=\"cf-box cf-box--nested\" *ngIf=\"disputeOn\">\r\n <div class=\"cf-inline\">\r\n Dispute window\r\n <ng-container *ngTemplateOutlet=\"dropdown; context: { key: 'disputeWindow', options: dispWindowOpts }\"></ng-container>\r\n from when the response becomes visible\r\n </div>\r\n <div class=\"cf-info cf-info--wrap\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line></svg>\r\n Disputes raised inside this window go to the approver. Approved disputes revise the answer and the compliance score.\r\n </div>\r\n <div class=\"cf-error\" *ngIf=\"!hasApprovers\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n No approver is set, so no one can review disputes. Turn on Approver and add an approver.\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"responseVisibility === 'post'\">\r\n <div class=\"cf-stack cf-stack--sm\">\r\n <div class=\"cf-label-sm cf-muted\">Dispute Configuration</div>\r\n <div class=\"cf-info cf-info--wrap\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line></svg>\r\n Disputes are not available when responses are shown post-approval.\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Pre-submission access -->\r\n <div class=\"cf-box cf-box--pad\">\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Pre-Submission Access</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"preSubmissionAccessOn\" (click)=\"preSubmissionAccessOn = !preSubmissionAccessOn\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--wrap\">Users added here can view Open and In Progress audits until submission. The Schedule Info tab is also visible only to these users.</div>\r\n <ng-container *ngIf=\"preSubmissionAccessOn\">\r\n <div class=\"cf-row cf-row--top\">\r\n <span class=\"cf-field\">Visible to</span>\r\n <ng-container *ngTemplateOutlet=\"chipPicker; context: { list: 'preSubmissionUsers', large: false }\"></ng-container>\r\n </div>\r\n <div class=\"cf-error cf-error--indent\" *ngIf=\"preSubmissionEmpty\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n Add at least one user\r\n </div>\r\n </ng-container>\r\n </div>\r\n </section>\r\n\r\n <!-- ===== Scoring ===== -->\r\n <section class=\"cf-card cf-card--lg\">\r\n <div class=\"cf-block-title\">Scoring</div>\r\n <div class=\"cf-box cf-box--pad\">\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Pass/Fail Score Setup</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"passFailOn\" (click)=\"passFailOn = !passFailOn\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--wrap\">Set the compliance score an audit must reach to be marked {{ passLabel }}. Anything below it is marked {{ failLabel }}.</div>\r\n <div class=\"cf-row cf-row--wrap cf-row--top\" *ngIf=\"passFailOn\">\r\n <span class=\"cf-field\">Minimum score to {{ passLabel }}</span>\r\n <label class=\"cf-num\">\r\n <input type=\"number\" min=\"1\" max=\"100\" [(ngModel)]=\"passThreshold\">\r\n <span>%</span>\r\n </label>\r\n <span class=\"cf-pill cf-pill--pass\">{{ passLabel }} \u2265 {{ passThreshold }}%</span>\r\n <span class=\"cf-pill cf-pill--fail\">{{ failLabel }} &lt; {{ passThreshold }}%</span>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <!-- ===== Approver Controls ===== -->\r\n <section class=\"cf-card cf-card--lg\">\r\n <div class=\"cf-block-title\">Approver Controls</div>\r\n <div class=\"cf-stack\">\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Edit Submitted Audit</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"editSubmittedOn\" (click)=\"toggleEditSubmitted()\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--tight\">Allow Approvers to edit submitted Audit</div>\r\n <ng-container *ngIf=\"editSubmittedOn\">\r\n <ng-container *ngTemplateOutlet=\"chipPicker; context: { list: 'editUsers', large: true }\"></ng-container>\r\n <div class=\"cf-error\" *ngIf=\"editSubmittedError\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n {{ editSubmittedError }}\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"cf-grid2\">\r\n <div class=\"cf-stack\">\r\n <div class=\"cf-label\">Redo Extension</div>\r\n <div class=\"cf-inline\">\r\n Extend redo up to\r\n <ng-container *ngTemplateOutlet=\"dropdown; context: { key: 'redoExtension', options: redoExtensionOpts }\"></ng-container>\r\n Days till approval\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <!-- ===== User Verification ===== -->\r\n <section class=\"cf-card\">\r\n <div class=\"cf-block-title\">User Verification Configuration</div>\r\n <div class=\"cf-box cf-box--row\">\r\n <button type=\"button\" class=\"cf-switch cf-switch--top\" [class.is-on]=\"requirePhoto\" (click)=\"requirePhoto = !requirePhoto\"><span></span></button>\r\n <div class=\"cf-stack cf-stack--xs\">\r\n <div class=\"cf-label\">Require Photo Capture</div>\r\n <div class=\"cf-hint\">By enabling, users must capture their photo to complete submission</div>\r\n </div>\r\n </div>\r\n <div class=\"cf-box cf-box--row\">\r\n <button type=\"button\" class=\"cf-switch cf-switch--top\" [class.is-on]=\"requireAcknowledgment\" (click)=\"requireAcknowledgment = !requireAcknowledgment\"><span></span></button>\r\n <div class=\"cf-stack cf-stack--xs\">\r\n <div class=\"cf-label\">Require User Acknowledgment</div>\r\n <div class=\"cf-hint\">By enabling, users must type their name as acknowledgment to complete submission</div>\r\n </div>\r\n </div>\r\n </section>\r\n </ng-container>\r\n\r\n </div>\r\n </div>\r\n\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.av2-page{display:flex;flex-direction:column;gap:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;color:#101828;-webkit-font-smoothing:antialiased}.av2-page *,.av2-page *:before,.av2-page *:after{box-sizing:border-box}.av2-card{background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #f1f1f4,0 3px 4px #00000008;padding:20px 24px;display:flex;flex-direction:column;gap:20px}.av2-card--log{padding:20px 24px 24px;gap:18px}.av2-card--table{padding:20px 24px 24px;gap:16px}.av2-card-head{display:flex;align-items:flex-start;gap:16px;flex-wrap:wrap}.av2-card-head--center{align-items:center;gap:12px}.av2-title-block{display:flex;flex-direction:column;gap:4px;flex:1;min-width:220px}.av2-card-title{font-size:20px;line-height:30px;font-weight:600;color:#101828;display:flex;align-items:center;gap:10px}.av2-card-title--grow{flex:1;min-width:180px}.av2-card-sub{font-size:14px;line-height:20px;color:#667085}.av2-grow{flex:1}.av2-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}.av2-grid-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:20px}.av2-grid-4{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px}.av2-stat-card{background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #f1f1f4,0 3px 4px #00000008;padding:10px}.av2-stat{padding:8px 16px;border-radius:6px;border-bottom:2px solid #EAECF0;background:radial-gradient(206.89% 107.47% at 16.16% 32.77%,#fff6,#45bbfe33),#f2f4f7;box-shadow:0 4px 10px #0000000d;display:flex;align-items:center;gap:20px}.av2-stat-value{font-size:30px;line-height:38px;font-weight:600;color:#101828}.av2-stat-label{font-size:14px;line-height:20px;font-weight:500;color:#344054}.av2-kpi{background:#fff;border-radius:10px;box-shadow:inset 0 0 0 1px #eaecf0,0 1px 2px #1018280d;display:flex;flex-direction:column;overflow:hidden}.av2-kpi.is-primary{box-shadow:inset 0 0 0 1px #99dbff,0 1px 2px #1018280d}.av2-kpi.is-primary .av2-kpi-head{background:#eaf8ff}.av2-kpi-head{padding:14px 18px;background:#f9fafb;font-size:16px;line-height:24px;font-weight:500;color:#101828}.av2-kpi-body{padding:16px 18px 18px;display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}.av2-kpi-value{font-size:20px;line-height:30px;font-weight:700;color:#101828}.av2-kpi-delta{display:flex;align-items:center;gap:4px;font-size:12px;color:#039855}.av2-kpi-delta.is-down{color:#d92d20}.av2-kpi-note{font-size:12px;color:#667085}.av2-ocard{padding:8px;border-radius:12px;border:1px solid #D0D5DD;background:#fff;display:flex;flex-direction:column;min-width:0;height:100%}.av2-ocard-head{min-height:70px;padding:10px 14px;border-radius:6px;border-bottom:2px solid #EAECF0;background:radial-gradient(206.89% 107.47% at 16.16% 32.77%,#fff6,#45bbfe33),#f2f4f7;box-shadow:0 4px 10px #0000000d;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;gap:2px;min-width:0}.av2-ocard-head--row{flex-direction:row;align-items:center;justify-content:flex-start;gap:12px}.av2-ocard-count{font-size:30px;line-height:38px;font-weight:600;color:#101828;white-space:nowrap}.av2-ocard-text{font-size:14px;line-height:20px;font-weight:500;color:#344054}.av2-ocard-body{flex:1;padding:12px 14px;display:flex;gap:16px;min-width:0}.av2-ocard-cell{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.av2-ocard-cell--center{align-items:center;text-align:center}.av2-ocard-sub{margin:4px 0;font-size:20px;line-height:30px;font-weight:700;color:#101828}.av2-ocard-note{font-size:14px;line-height:20px;font-weight:400;color:#667085}.av2-ocard-delta{margin-top:6px;display:inline-flex;align-items:center;gap:6px;font-size:12px;line-height:18px;font-weight:400;color:#1d2939}.av2-ocard-delta b{font-weight:600;color:#667085}.av2-ocard-delta svg{flex-shrink:0;color:#039855}.av2-ocard-delta.is-down svg{color:#d92d20}.av2-search{position:relative;display:flex;align-items:center;gap:8px;height:44px;padding:0 12px;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;color:#98a2b3;font-size:14px;flex-shrink:0}.av2-search svg{flex-shrink:0}.av2-search input{flex:1;min-width:0;height:100%;border:0;outline:0;padding:0;background:transparent;font:inherit;font-size:14px;font-weight:500;color:#101828}.av2-search input::placeholder{color:#98a2b3}.av2-search:focus-within{box-shadow:inset 0 0 0 1px #66c8ff,0 0 0 4px #eaf8ff}.av2-search--sm{width:300px}.av2-search--md{width:320px}.av2-search--lg{width:340px}.av2-select{height:44px;padding:0 36px 0 12px;border:0;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;font:inherit;font-size:14px;font-weight:500;color:#344054;cursor:pointer;appearance:none;-webkit-appearance:none;background-image:url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23344054' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>\");background-repeat:no-repeat;background-position:right 12px center;flex-shrink:0}.av2-select:focus{outline:0;box-shadow:inset 0 0 0 1px #66c8ff,0 0 0 4px #eaf8ff}.av2-select--sm{width:180px}.av2-chip{display:flex;align-items:center;gap:8px;height:44px;padding:0 12px;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;font-size:14px;color:#344054;white-space:nowrap;flex-shrink:0}.av2-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:44px;padding:0 16px;border:0;border-radius:8px;font-family:inherit;font-size:14px;line-height:20px;font-weight:600;cursor:pointer;white-space:nowrap;flex-shrink:0;transition:background-color .15s cubic-bezier(.4,0,.2,1)}.av2-btn svg{flex-shrink:0}.av2-btn:disabled{opacity:.55;cursor:not-allowed}.av2-btn--ghost{background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;color:#344054;font-weight:500}.av2-btn--ghost:hover:not(:disabled){background:#f9fafb}.av2-btn--primary{background:#00a3ff;color:#fff;font-size:16px;line-height:24px}.av2-btn--primary:hover:not(:disabled){background:#009bf3}.av2-btn--sm{height:36px;padding:0 14px;font-size:13px}.av2-btn--wide{padding:0 18px}.av2-tabs{display:flex;align-items:center;gap:6px}.av2-tab{height:44px;padding:0 26px;border:0;border-radius:6px;background:transparent;display:inline-flex;align-items:center;justify-content:center;font-family:inherit;font-size:16px;font-weight:500;color:#475467;cursor:pointer}.av2-tab.is-active{background:#eaf8ff;color:#009bf3;font-weight:500}.av2-badge{display:inline-flex;align-items:center;height:22px;padding:2px 8px;border-radius:16px;background:#eaf8ff;color:#009bf3;font-size:12px;font-weight:500;line-height:18px;white-space:nowrap}.av2-badge--count{height:22px;padding:0 8px}.av2-badge--success{background:#ecfdf3;color:#027a48}.av2-badge--error{background:#fef3f2;color:#b42318}.av2-badge--warning{background:#fffaeb;color:#b54708}.av2-badge--gray{background:#f2f4f7;color:#344054}.av2-badge--purple{background:#f9f5ff;color:#5925dc}.av2-link{color:#00a3ff;font-size:14px;font-weight:500;text-decoration:underline;cursor:pointer}.av2-link:hover{color:#009bf3;text-decoration:underline}.av2-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.av2-muted{color:#667085}.av2-dim{color:#475467}.av2-faint{color:#98a2b3}table tbody td.av2-dim{color:#475467}table tbody td.av2-faint{color:#98a2b3}.av2-table-wrap{overflow-x:auto}.av2-table{width:100%;border-collapse:separate;border-spacing:0;margin:0}.av2-table thead th{background:#f9fafb;padding:12px;font-size:12px;line-height:18px;font-weight:500;color:#667085;text-align:left;text-transform:none;letter-spacing:0;border:0;white-space:nowrap}.av2-table thead th:first-child{border-radius:8px 0 0}.av2-table thead th:last-child{border-radius:0 8px 0 0}.av2-table tbody td{padding:16px 12px;border:0;border-bottom:1px solid #F2F4F7;font-size:14px;line-height:20px;font-weight:500;color:#101828;vertical-align:middle}.av2-table .av2-th-sort{display:inline-flex;align-items:center;gap:4px}.av2-table .av2-cell-icon{display:flex;align-items:center;gap:8px;min-width:0}.av2-table .av2-cell-icon svg{flex-shrink:0}.av2-table .av2-cell-icon span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av2-table .av2-cell-stack{display:flex;flex-direction:column;gap:2px}.av2-table .av2-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av2-sortable{cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap}.av2-table--lined thead th{background:transparent;border-bottom:1px solid #EAECF0;border-radius:0!important}.av2-empty{display:flex;flex-direction:column;align-items:center;gap:12px;padding:24px 16px 32px;text-align:center}.av2-empty-img{display:block;width:160px;height:120px}.av2-empty-text{display:flex;flex-direction:column;gap:4px;align-items:center}.av2-empty-title{font-size:16px;line-height:24px;font-weight:600;color:#101828}.av2-empty-sub{max-width:480px;font-size:14px;line-height:20px;color:#667085;text-wrap:pretty}.av2-col-head{border-radius:8px;background:#f9fafb;padding:14px 16px;font-size:12px;line-height:20px;font-weight:500;color:#344054;display:flex;align-items:center;gap:8px}.av2-avatar{width:32px;height:32px;flex-shrink:0;border-radius:9999px;background:#eaf8ff;color:#009bf3;display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:700}.av2-bar{flex:1;height:5px;border-radius:9999px;background:#f2f4f7;overflow:hidden;display:block;min-width:60px}.av2-bar span{display:block;height:5px;border-radius:9999px;background:#00a3ff}@keyframes av2-shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.av2-sk{display:block;width:100%;max-width:100%;height:12px;border-radius:4px;flex-shrink:0;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%;animation:av2-shimmer 3s linear infinite}.av2-sk--value{width:72px;height:28px;border-radius:6px}.av2-sk--title{width:220px;height:18px}.av2-sk--note{width:60%}.av2-sk--block{border-radius:8px}@media (prefers-reduced-motion: reduce){.av2-sk{animation:none}}.cf-crumb{font-size:13px;line-height:20px;color:#667085}.cf-crumb a{font-weight:600;color:#00a3ff}.cf-header{background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #f1f1f4,0 3px 4px #00000008;padding:16px 20px;display:flex;align-items:center;gap:12px}.cf-header-text{display:flex;flex-direction:column;gap:4px;min-width:0}.cf-title{font-size:16px;line-height:24px;font-weight:600;color:#101828}.cf-sk-title{margin:3px 0}.cf-desc{border:none;outline:none;padding:0;background:transparent;font-family:inherit;font-size:13px;line-height:18px;color:#344054;min-width:320px}.cf-desc::placeholder{color:#98a2b3}.cf-publish{padding:0 20px;box-shadow:0 1px 2px #1018280d}.cf-draft{padding:0 18px;box-shadow:inset 0 0 0 1px #d0d5dd,0 1px 2px #1018280d}.cf-body{display:flex;gap:16px;align-items:flex-start}.cf-left{width:300px;flex-shrink:0;background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #f1f1f4,0 3px 4px #00000008;padding:16px;display:flex;flex-direction:column;gap:10px;position:sticky;top:calc(var(--bs-app-header-height, 0px) + 16px);max-height:calc(100vh - var(--bs-app-header-height, 0px) - 32px);overflow-y:auto;scrollbar-width:thin}.cf-left-title{font-size:14px;line-height:20px;font-weight:600;color:#101828}.cf-section{display:flex;align-items:center;gap:8px;padding:2px 0;font-size:13px;font-weight:500;color:#344054;cursor:pointer;white-space:nowrap}.cf-section.is-open{color:#1d2939}.cf-rule{flex:1;border-top:1px solid #EAECF0}.cf-chev{display:flex;color:#98a2b3}.cf-chev svg{transition:transform .15s cubic-bezier(.4,0,.2,1)}.cf-chev .rotate{transform:rotate(-90deg)}.cf-items{display:flex;flex-direction:column;gap:8px;padding-left:12px;font-size:13px;color:#475467}.cf-schedule-title{font-size:14px;font-weight:600;color:#101828;margin-top:6px}.cf-schedule{display:flex;flex-direction:column;gap:6px;font-size:13px;color:#475467}.cf-schedule>div{display:flex;align-items:center;gap:6px}.cf-right{flex:1;min-width:0;display:flex;flex-direction:column;gap:16px}.cf-card{background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #f1f1f4,0 3px 4px #00000008;padding:20px;display:flex;flex-direction:column;gap:14px}.cf-card--lg{border-radius:8px}.cf-block-head{display:flex;align-items:center;gap:12px}.cf-block-title{font-size:15px;font-weight:600;color:#101828}.cf-divider-head{display:flex;align-items:center;gap:10px;margin-top:4px}.cf-label{font-size:14px;font-weight:600;color:#101828}.cf-label-sm{font-size:13px;font-weight:600;color:#101828}.cf-muted{color:#667085}.cf-hint{font-size:12px;line-height:18px;color:#667085}.cf-hint--tight{margin-top:-8px}.cf-hint--wrap{max-width:640px;text-wrap:pretty}.cf-field{font-size:13px;font-weight:500;color:#344054;min-width:150px;flex-shrink:0}.cf-row{display:flex;align-items:center;gap:12px}.cf-row--top{margin-top:6px}.cf-row--wrap{flex-wrap:wrap}.cf-stack{display:flex;flex-direction:column;gap:8px}.cf-stack--tight,.cf-stack--sm{gap:4px}.cf-stack--xs{gap:2px}.cf-grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px}.cf-toggle-row{display:flex;align-items:center;gap:10px}.cf-switch{width:36px;height:20px;padding:2px;border:none;border-radius:9999px;background:#eaecf0;display:flex;align-items:center;justify-content:flex-start;flex-shrink:0;cursor:pointer;transition:background .15s cubic-bezier(.4,0,.2,1)}.cf-switch>span{width:16px;height:16px;border-radius:9999px;background:#fff;box-shadow:0 1px 2px #1018280d}.cf-switch.is-on{background:#00a3ff;justify-content:flex-end}.cf-switch--top{margin-top:2px}.cf-chipbox{flex:1;min-width:0;display:flex;flex-wrap:wrap;gap:6px;border-radius:8px;box-shadow:inset 0 0 0 1px #d0d5dd;padding:8px 10px}.cf-chipbox--lg{gap:8px;padding:10px 12px}.cf-chip{display:flex;align-items:center;gap:6px;background:#f9fafb;box-shadow:inset 0 0 0 1px #eaecf0;border-radius:9999px;padding:3px 8px;font-size:12px;color:#344054;white-space:nowrap;flex-shrink:0;max-width:100%}.cf-chip--lg{gap:8px;background:#fff;padding:5px 11px;font-size:13px;color:#1d2939}.cf-chip-ini{color:#00a3ff;font-weight:600;font-size:11px}.cf-chip-tag{display:inline-flex;align-items:center;justify-content:center;padding:1px 5px;border-radius:6px;background:#eaf8ff;color:#00a3ff;font-weight:700;font-size:11px;letter-spacing:.02em}.cf-chip-x{display:flex;cursor:pointer;color:#98a2b3}.cf-chip-x:hover{color:#344054}.cf-chip-input{flex:1;min-width:100px;border:none;outline:none;background:transparent;font-family:inherit;font-size:12px;color:#101828}.cf-chip-input::placeholder{color:#98a2b3}.cf-chip-input--lg{min-width:120px;font-size:13px}.cf-inner{border-radius:8px;box-shadow:inset 0 0 0 1px #eaecf0;padding:14px 16px;display:flex;flex-direction:column;gap:8px}.cf-inline{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:13px;color:#344054}.cf-inline--top{margin-top:2px}.cf-mini{height:32px;padding:0 28px 0 10px;border:none;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;font-family:inherit;font-size:13px;font-weight:600;color:#101828;cursor:pointer;appearance:none;-webkit-appearance:none;background-image:url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%23667085' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>\");background-repeat:no-repeat;background-position:right 8px center;outline:none}.cf-info{display:flex;align-items:center;gap:6px;font-size:12px;line-height:18px;color:#667085}.cf-info svg{flex-shrink:0}.cf-info--wrap{align-items:flex-start;max-width:560px;text-wrap:pretty}.cf-info--wrap svg{margin-top:3px}.cf-checks{display:flex;align-items:center;gap:16px;flex-wrap:wrap;font-size:13px;color:#344054}.cf-checks-label{font-weight:500}.cf-check{display:flex;align-items:center;gap:6px;margin:0;font-size:13px;color:#344054;cursor:pointer;-webkit-user-select:none;user-select:none}.cf-check-box{width:16px;height:16px;border-radius:4px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;display:flex;align-items:center;justify-content:center;color:#fff;flex-shrink:0}.cf-check-box.is-on{background:#00a3ff;box-shadow:none}.cf-box{border-radius:8px;box-shadow:inset 0 0 0 1px #eaecf0;overflow:hidden;display:flex;flex-direction:column}.cf-box--pad{padding:14px 16px;gap:6px;overflow:visible}.cf-box--row{padding:14px 16px;flex-direction:row;align-items:flex-start;gap:12px}.cf-box--nested{background:#fff;padding:12px 14px;gap:8px;margin-left:46px;overflow:visible}.cf-box--open{overflow:visible}.cf-box--open>.cf-box-sub:last-child{border-radius:0 0 8px 8px}.cf-box-row{padding:14px 16px;display:flex;align-items:flex-start;gap:12px}.cf-box-row--flush{padding:0;gap:10px}.cf-box-sub{border-top:1px solid #EAECF0;background:#f9fafb;padding:16px 16px 18px 64px;display:flex;flex-direction:column;gap:12px}.cf-options{display:flex;flex-direction:column;gap:10px}.cf-option{background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #eaecf0;padding:12px 14px;display:flex;align-items:flex-start;gap:10px;cursor:pointer}.cf-option.is-on{box-shadow:inset 0 0 0 1.5px #00a3ff}.cf-radio{width:16px;height:16px;border-radius:9999px;box-shadow:inset 0 0 0 1px #d0d5dd;background:#fff;flex-shrink:0;margin-top:2px}.cf-radio.is-on{box-shadow:inset 0 0 0 5px #00a3ff}.cf-box-sep{display:flex;flex-direction:column;gap:12px;padding-top:14px;border-top:1px solid #EAECF0}.cf-num{display:flex;align-items:center;gap:8px;height:36px;padding:0 6px 0 12px;border-radius:8px;box-shadow:inset 0 0 0 1px #d0d5dd;margin:0}.cf-num input{width:52px;border:none;outline:none;background:transparent;font-family:inherit;font-size:14px;font-weight:600;color:#101828}.cf-num span{font-size:13px;color:#667085;padding-right:6px}.cf-pill{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;border-radius:9999px;padding:4px 12px}.cf-pill--pass{background:#ecfdf3;color:#027a48}.cf-pill--fail{background:#fef3f2;color:#d92d20}.cf-error{display:flex;gap:6px;font-size:12px;font-weight:500;color:#d92d20;align-items:flex-start;line-height:18px;max-width:640px}.cf-error svg{flex-shrink:0;margin-top:3px}.cf-error--indent{margin-left:162px}.cf-check.is-blocked{color:#98a2b3;cursor:not-allowed}.cf-select{position:relative;display:inline-block;vertical-align:middle}.cf-select-btn{display:inline-flex;align-items:center;gap:8px;height:32px;padding:0 10px 0 12px;border:none;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;font-family:inherit;font-size:13px;font-weight:600;color:#101828;cursor:pointer;white-space:nowrap}.cf-select-btn svg{color:#667085;transition:transform .15s ease}.is-open .cf-select-btn{box-shadow:0 0 0 2px #99dbff,inset 0 0 0 1px #d0d5dd}.is-open .cf-select-btn svg{transform:rotate(180deg)}.cf-select-menu{position:absolute;top:calc(100% + 4px);left:0;z-index:30;min-width:100%;padding:4px;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #eaecf0,0 8px 24px #1018281f}.cf-select-item{padding:8px 12px;border-radius:6px;font-size:13px;color:#344054;white-space:nowrap;cursor:pointer}.cf-select-item:hover{background:#f9fafb}.cf-select-item.is-on{background:#eaf8ff;color:#009bf3;font-weight:600}.cf-chipbox{position:relative}.cf-chipbox.is-open{box-shadow:0 0 0 2px #99dbff,inset 0 0 0 1px #d0d5dd}.cf-suggest{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:30;max-height:260px;overflow-y:auto;padding:4px;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #eaecf0,0 8px 24px #1018281f}.cf-suggest-item{display:flex;align-items:center;gap:8px;padding:6px 10px;border-radius:6px;cursor:pointer}.cf-suggest-item:hover{background:#f9fafb}.cf-suggest-name{font-size:13px;color:#101828}.cf-suggest-mail{font-size:12px;color:#667085;margin-left:auto}.cf-suggest-empty{padding:8px 10px;font-size:12px;color:#667085}.cf-error--page{margin:0 0 12px}.cf-autotask{margin-top:12px;padding:14px 16px;border-radius:10px;background:#f9fafb;box-shadow:inset 0 0 0 1px #eaecf0;display:flex;flex-direction:column;gap:8px}.cf-autotask-title{font-size:14px;font-weight:600;color:#1d2939}.cf-autotask-title:not(:first-child){margin-top:6px}.cf-autotask-choices{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}@media (max-width: 720px){.cf-autotask-choices{grid-template-columns:1fr}}.cf-choice{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border:0;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;font:inherit;text-align:left;cursor:pointer}.cf-choice.is-on{background:#f5faff;box-shadow:inset 0 0 0 1px #66c8ff}.cf-radio{width:18px;height:18px;flex-shrink:0;margin-top:1px;border-radius:9999px;box-shadow:inset 0 0 0 1px #d0d5dd;display:flex;align-items:center;justify-content:center}.cf-radio span{width:8px;height:8px;border-radius:9999px;background:transparent}.cf-radio.is-on{box-shadow:inset 0 0 0 1px #1570ef}.cf-radio.is-on span{background:#1570ef}.cf-choice-text{display:flex;flex-direction:column;gap:2px;min-width:0}.cf-choice-title{font-size:14px;font-weight:600;color:#101828}.cf-choice-sub{font-size:12px;color:#667085}.cf-autotask-validity{display:flex;align-items:center;flex-wrap:wrap;gap:10px;font-size:13px;color:#344054}.cf-validity-select{width:96px}.cf-reminder{display:inline-flex;align-items:center;gap:6px}.cf-reminder-select{width:120px}.cf-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:none;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;color:#344054;cursor:pointer}.cf-icon-btn:hover{background:#f9fafb}\n"] }]
903
+ args: [{ selector: 'lib-audit-v2-configure', template: "<div class=\"av2-page audit-configure\">\r\n\r\n <!-- Breadcrumb -->\r\n <div class=\"cf-crumb\">\r\n <a routerLink=\"/manage/trax/audit-v2/manage\">Manage Audit</a> \u203A Configure\r\n </div>\r\n\r\n <!-- Title + actions -->\r\n <div class=\"cf-header\">\r\n <div class=\"cf-header-text\">\r\n <span class=\"av2-sk av2-sk--title cf-sk-title\" *ngIf=\"loading\"></span>\r\n <div class=\"cf-title\" *ngIf=\"!loading\">{{ auditName || 'Audit' }}</div>\r\n <input type=\"text\" class=\"cf-desc\" placeholder=\"Enter Audit Description\" [(ngModel)]=\"description\">\r\n </div>\r\n <div class=\"av2-grow\"></div>\r\n <button type=\"button\" class=\"av2-btn av2-btn--primary cf-publish\" [disabled]=\"!canSave\" [title]=\"saveBlockedReason || publishBlockedReason\" (click)=\"publish()\">\r\n {{ saving ? 'Saving\u2026' : (published ? 'Save & Publish' : 'Publish') }}\r\n </button>\r\n <button type=\"button\" class=\"av2-btn av2-btn--ghost cf-draft\" [disabled]=\"!canSave\" [title]=\"saveBlockedReason\" (click)=\"saveDraft()\">Save as Draft</button>\r\n </div>\r\n\r\n <div class=\"cf-error cf-error--page\" *ngIf=\"loadError\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n {{ loadError }}\r\n </div>\r\n\r\n <!-- Chip picker: chips + input + suggestion list (one template, used for every user list) -->\r\n <ng-template #chipPicker let-list=\"list\" let-large=\"large\">\r\n <div class=\"cf-chipbox\" [class.cf-chipbox--lg]=\"large\" [class.is-open]=\"openChips === list\" (click)=\"focusChips(list, $event)\">\r\n <span class=\"cf-chip\" [class.cf-chip--lg]=\"large\" *ngFor=\"let u of chipsOf(list); let i = index\" [title]=\"u.e\">\r\n <span [class]=\"large ? 'cf-chip-tag' : 'cf-chip-ini'\">{{ u.i }}</span>{{ u.n }}\r\n <a class=\"cf-chip-x\" (click)=\"removeChip(list, i); $event.stopPropagation()\">\r\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\"><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line></svg>\r\n </a>\r\n </span>\r\n <input type=\"text\" class=\"cf-chip-input\" [class.cf-chip-input--lg]=\"large\" placeholder=\"Add user...\"\r\n [ngModel]=\"draftOf(list)\" (ngModelChange)=\"setDraft(list, $event)\" (focus)=\"focusChips(list, $event)\" (keyup.enter)=\"addChip(list)\">\r\n <div class=\"cf-suggest\" *ngIf=\"openChips === list\">\r\n <div class=\"cf-suggest-item\" *ngFor=\"let u of suggestions(list)\" (click)=\"addSuggestion(list, u, $event)\">\r\n <span class=\"cf-chip-ini\">{{ u.i }}</span>\r\n <span class=\"cf-suggest-name\">{{ u.n }}</span>\r\n <span class=\"cf-suggest-mail\">{{ u.e }}</span>\r\n </div>\r\n <div class=\"cf-suggest-empty\" *ngIf=\"!suggestions(list).length\">\r\n {{ users.length ? 'No matching user' : 'No users for this client' }}\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Dropdown: styled like the prototype instead of the browser's native select -->\r\n <ng-template #dropdown let-key=\"key\" let-options=\"options\">\r\n <span class=\"cf-select\" [class.is-open]=\"openSelect === key\">\r\n <button type=\"button\" class=\"cf-select-btn\" (click)=\"toggleSelect(key, $event)\">\r\n {{ selectLabel(key, options) }}\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"6 9 12 15 18 9\"></polyline></svg>\r\n </button>\r\n <div class=\"cf-select-menu\" *ngIf=\"openSelect === key\">\r\n <div class=\"cf-select-item\" *ngFor=\"let o of options\" [class.is-on]=\"isPicked(key, o)\"\r\n (click)=\"pick(key, o, $event)\">{{ o.label }}</div>\r\n </div>\r\n </span>\r\n </ng-template>\r\n\r\n <div class=\"cf-body\" *ngIf=\"!loadError\">\r\n <!-- Section tree -->\r\n <aside class=\"cf-left\">\r\n <lib-audit-v2-shimmer *ngIf=\"loading\" [rows]=\"3\"></lib-audit-v2-shimmer>\r\n\r\n <ng-container *ngIf=\"!loading\">\r\n <div class=\"cf-left-title\">{{ auditName || 'Audit' }}</div>\r\n\r\n <div class=\"cf-hint\" *ngIf=\"!sections.length\">No questions yet</div>\r\n <ng-container *ngFor=\"let s of sections\">\r\n <div class=\"cf-section\" [class.is-open]=\"s.open\" (click)=\"toggleSection(s)\">\r\n {{ s.label }}\r\n <span class=\"cf-rule\"></span>\r\n <span class=\"cf-chev\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" [class.rotate]=\"!s.open\">\r\n <polyline points=\"6 9 12 15 18 9\"></polyline>\r\n </svg>\r\n </span>\r\n </div>\r\n <div class=\"cf-items\" *ngIf=\"s.open && s.items.length\">\r\n <div *ngFor=\"let it of s.items\">{{ it }}</div>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"cf-schedule-title\">Schedule</div>\r\n <div class=\"cf-schedule\">\r\n <div>\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"2\"></rect>\r\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"></line>\r\n <line x1=\"8\" y1=\"3\" x2=\"8\" y2=\"6\"></line>\r\n <line x1=\"16\" y1=\"3\" x2=\"16\" y2=\"6\"></line>\r\n </svg>\r\n {{ schedule }}\r\n </div>\r\n <div>\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"12\" cy=\"12\" r=\"9\"></circle>\r\n <polyline points=\"12 7 12 12 15.5 14\"></polyline>\r\n </svg>\r\n {{ scheduleWindow }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </aside>\r\n\r\n <!-- Configuration -->\r\n <div class=\"cf-right\">\r\n\r\n <section class=\"cf-card\" *ngIf=\"loading\">\r\n <lib-audit-v2-shimmer [rows]=\"4\"></lib-audit-v2-shimmer>\r\n </section>\r\n\r\n <ng-container *ngIf=\"!loading\">\r\n\r\n <!-- ===== Advance Configuration ===== -->\r\n <section class=\"cf-card\">\r\n <div class=\"cf-block-head\">\r\n <span class=\"cf-block-title\">Advance Configuration</span>\r\n <span class=\"cf-rule\"></span>\r\n <span class=\"cf-chev\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"6 9 12 15 18 9\"></polyline></svg>\r\n </span>\r\n </div>\r\n\r\n <!-- Audit Owner -->\r\n <div>\r\n <div class=\"cf-label\">Audit Owner</div>\r\n <div class=\"cf-hint\">Owners get access to manage the audit</div>\r\n </div>\r\n <div class=\"cf-row\">\r\n <span class=\"cf-field\">Can be managed by</span>\r\n <ng-container *ngTemplateOutlet=\"chipPicker; context: { list: 'owners', large: false }\"></ng-container>\r\n </div>\r\n\r\n <!-- Approver -->\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Approver</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"approverOn\" (click)=\"toggleApprover()\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--tight\">By enabling, the users will be able to approve the audit</div>\r\n <div class=\"cf-row\" *ngIf=\"approverOn\">\r\n <span class=\"cf-field\">To be approved by</span>\r\n <ng-container *ngTemplateOutlet=\"chipPicker; context: { list: 'approvers', large: false }\"></ng-container>\r\n </div>\r\n <div class=\"cf-error\" *ngIf=\"approverError\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n {{ approverError }}\r\n </div>\r\n <div class=\"cf-info cf-info--wrap\" *ngIf=\"!approverOn && approvers.length\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line></svg>\r\n Approver is off, so the {{ approvers.length }} approver{{ approvers.length === 1 ? '' : 's' }} added will be removed when you save. Turn Approver back on to keep {{ approvers.length === 1 ? 'it' : 'them' }}.\r\n </div>\r\n <div class=\"cf-info cf-info--wrap\" *ngIf=\"!approverOn && !approvers.length\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line></svg>\r\n Approver is off, so submitted audits are not sent for approval. Turn it on to add approvers or to send flags and reports to them.\r\n </div>\r\n\r\n <!-- Reminder -->\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Reminder</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"reminderOn\" (click)=\"toggleReminder()\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--tight\">By enabling, the users will be reminded in the selected interval</div>\r\n <div class=\"cf-inner\" *ngIf=\"reminderOn\">\r\n <div class=\"cf-inline\">\r\n Notify user before\r\n <span class=\"cf-reminder\" *ngFor=\"let m of reminders; let i = index\">\r\n <lib-audit-v2-select class=\"cf-reminder-select\" [value]=\"m\" [options]=\"reminderOpts[i] || []\" [searchable]=\"false\"\r\n [ariaLabel]=\"'Reminder ' + (i + 1) + ' in minutes'\" (changed)=\"setReminder(i, $event.target.value)\"></lib-audit-v2-select>\r\n <a class=\"cf-chip-x\" *ngIf=\"reminders.length > 1\" title=\"Remove reminder\" (click)=\"removeReminder(i)\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\r\n stroke-linecap=\"round\"><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line></svg>\r\n </a>\r\n </span>\r\n <button type=\"button\" class=\"cf-icon-btn\" *ngIf=\"reminders.length < maxReminders\" title=\"Add reminder\" (click)=\"addReminder()\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"></line><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line></svg>\r\n </button>\r\n </div>\r\n <div class=\"cf-info\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line></svg>\r\n Send alerts {{ reminderSummary }} mins before the audit end time\r\n </div>\r\n </div>\r\n\r\n <!-- Notify Flags -->\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Notify Flags</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"notifyFlagsOn\" (click)=\"toggleNotifyFlags()\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--tight\">By enabling, all flags will be sent as an email</div>\r\n <ng-container *ngIf=\"notifyFlagsOn\">\r\n <div class=\"cf-checks\">\r\n <span class=\"cf-checks-label\">Send To</span>\r\n <label class=\"cf-check\" [class.is-blocked]=\"!hasApprovers && !notifySendApprover\" (click)=\"toggleSendApprover('notifySendApprover')\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"notifySendApprover\">\r\n <svg *ngIf=\"notifySendApprover\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Approver\r\n </label>\r\n <label class=\"cf-check\" (click)=\"notifySendCustom = !notifySendCustom\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"notifySendCustom\">\r\n <svg *ngIf=\"notifySendCustom\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Custom\r\n </label>\r\n </div>\r\n <ng-container *ngIf=\"notifySendCustom\">\r\n <ng-container *ngTemplateOutlet=\"chipPicker; context: { list: 'notifyUsers', large: false }\"></ng-container>\r\n </ng-container>\r\n <div class=\"cf-error\" *ngIf=\"notifyFlagsError\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n {{ notifyFlagsError }}\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Notify on Recurring Flags -->\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Notify on Recurring Flags</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"recurringFlagsOn\" (click)=\"toggleRecurringFlags()\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--tight\">When enabled, emails are sent for recurring flags based on the configured threshold</div>\r\n\r\n <div class=\"cf-inner\" *ngIf=\"recurringFlagsOn\">\r\n <div class=\"cf-inline\">\r\n Send Email if the same question is flagged\r\n <ng-container *ngTemplateOutlet=\"dropdown; context: { key: 'recurringThreshold', options: thresholdOpts }\"></ng-container>\r\n times by the same store\r\n </div>\r\n <div class=\"cf-info\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line></svg>\r\n Once the threshold is reached and an email is sent, the flag count resets to zero\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"recurringFlagsOn\">\r\n <div class=\"cf-checks\">\r\n <span class=\"cf-checks-label\">Send To</span>\r\n <label class=\"cf-check\" [class.is-blocked]=\"!hasApprovers && !recurringSendApprover\" (click)=\"toggleSendApprover('recurringSendApprover')\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"recurringSendApprover\">\r\n <svg *ngIf=\"recurringSendApprover\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Approver\r\n </label>\r\n <label class=\"cf-check\" (click)=\"toggleRecurringCustom()\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"recurringSendCustom\">\r\n <svg *ngIf=\"recurringSendCustom\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Custom\r\n </label>\r\n <label class=\"cf-check\" (click)=\"recurringSameAsNotify = !recurringSameAsNotify\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"recurringSameAsNotify\">\r\n <svg *ngIf=\"recurringSameAsNotify\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Use same users from Notify Flags\r\n </label>\r\n </div>\r\n <ng-container *ngIf=\"recurringSendCustom\">\r\n <ng-container *ngTemplateOutlet=\"chipPicker; context: { list: 'recurringUsers', large: false }\"></ng-container>\r\n </ng-container>\r\n <div class=\"cf-info\" *ngIf=\"recurringSameAsNotify\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line></svg>\r\n {{ notifyRecipientsLabel }}\r\n </div>\r\n <div class=\"cf-error\" *ngIf=\"recurringFlagsError\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n {{ recurringFlagsError }}\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Daily report -->\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Enable - Daily Report</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"dailyReportOn\" (click)=\"toggleDailyReport()\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--tight\">By Enabling, compliance score will be sent as an email to the above users</div>\r\n <ng-container *ngIf=\"dailyReportOn\">\r\n <div class=\"cf-checks\">\r\n <span class=\"cf-checks-label\">Send To</span>\r\n <label class=\"cf-check\" [class.is-blocked]=\"!hasApprovers && !dailySendApprover\" (click)=\"toggleSendApprover('dailySendApprover')\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"dailySendApprover\">\r\n <svg *ngIf=\"dailySendApprover\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Approver\r\n </label>\r\n <label class=\"cf-check\" (click)=\"dailySendCustom = !dailySendCustom\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"dailySendCustom\">\r\n <svg *ngIf=\"dailySendCustom\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Custom\r\n </label>\r\n </div>\r\n <ng-container *ngIf=\"dailySendCustom\">\r\n <ng-container *ngTemplateOutlet=\"chipPicker; context: { list: 'dailyUsers', large: false }\"></ng-container>\r\n </ng-container>\r\n <label class=\"cf-check\" (click)=\"sharePostApproval = !sharePostApproval\">\r\n <span class=\"cf-check-box\" [class.is-on]=\"sharePostApproval\">\r\n <svg *ngIf=\"sharePostApproval\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>\r\n </span>Share Report Post Approval\r\n </label>\r\n <div class=\"cf-error\" *ngIf=\"dailyReportError\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n {{ dailyReportError }}\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Export submission: Tango users only, as the v1 Configure (its stored value is kept for everyone else). -->\r\n <div class=\"cf-grid2\" *ngIf=\"access.isTango\">\r\n <div class=\"cf-stack cf-stack--tight\">\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Export Submission</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"exportSubmissionOn\" (click)=\"exportSubmissionOn = !exportSubmissionOn\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint\">Enable this to allow audit submitters to download their submission as a PDF file</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Redo validity -->\r\n <div class=\"cf-grid2\">\r\n <div class=\"cf-stack\">\r\n <div class=\"cf-label\">Redo Validity</div>\r\n <div class=\"cf-inline\">\r\n Redo valid for\r\n <ng-container *ngTemplateOutlet=\"dropdown; context: { key: 'redoValidFor', options: redoDayOpts }\"></ng-container>\r\n Day from Redo creation\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Auto create task -->\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Auto Create Task for Flags</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"autoCreateTaskOn\" (click)=\"autoCreateTaskOn = !autoCreateTaskOn\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--tight\">By enabling, a task is automatically created for every flagged question in the audit</div>\r\n\r\n <!-- Who gets the task and how long it stays open (as the Checklist Configure page) -->\r\n <div class=\"cf-autotask\" *ngIf=\"autoCreateTaskOn\">\r\n <div class=\"cf-autotask-title\">Task Assignee</div>\r\n <div class=\"cf-hint cf-hint--tight\">Choose who the flagged task is assigned to</div>\r\n <div class=\"cf-autotask-choices\">\r\n <button type=\"button\" class=\"cf-choice\" [class.is-on]=\"taskAssignee === 'submitter'\" (click)=\"taskAssignee = 'submitter'\">\r\n <span class=\"cf-radio\" [class.is-on]=\"taskAssignee === 'submitter'\"><span></span></span>\r\n <span class=\"cf-choice-text\">\r\n <span class=\"cf-choice-title\">Audit Submitter</span>\r\n <span class=\"cf-choice-sub\">Task is assigned to the user who filled the audit</span>\r\n </span>\r\n </button>\r\n <button type=\"button\" class=\"cf-choice\" [class.is-on]=\"taskAssignee === 'store'\" (click)=\"taskAssignee = 'store'\">\r\n <span class=\"cf-radio\" [class.is-on]=\"taskAssignee === 'store'\"><span></span></span>\r\n <span class=\"cf-choice-text\">\r\n <span class=\"cf-choice-title\">Store User</span>\r\n <span class=\"cf-choice-sub\">Task is assigned to the user mapped to the flagged store</span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"cf-autotask-title\">Task Validity</div>\r\n <div class=\"cf-autotask-validity\">\r\n <span>Task valid for</span>\r\n <lib-audit-v2-select class=\"cf-validity-select\" [(ngModel)]=\"taskValidity\" [options]=\"taskValidityOptions\"\r\n [searchable]=\"false\" ariaLabel=\"Task validity in days\"></lib-audit-v2-select>\r\n <span>days from task creation</span>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <!-- ===== Audit Configuration ===== -->\r\n <div class=\"cf-divider-head\">\r\n <span class=\"cf-block-title\">Audit Configuration</span>\r\n <span class=\"cf-rule\"></span>\r\n </div>\r\n\r\n <section class=\"cf-card cf-card--lg\">\r\n <div class=\"cf-block-title\">Submission &amp; Visibility</div>\r\n\r\n <!-- cf-box--open: the dispute-window and response-delay menus must not be clipped by the box -->\r\n <div class=\"cf-box cf-box--open\">\r\n <div class=\"cf-box-row\">\r\n <button type=\"button\" class=\"cf-switch cf-switch--top\" [class.is-on]=\"showResponseInApp\"\r\n (click)=\"showResponseInApp = !showResponseInApp\"><span></span></button>\r\n <div class=\"cf-stack cf-stack--xs\">\r\n <div class=\"cf-label\">Show Response in Mobile App</div>\r\n <div class=\"cf-hint\">By enabling this option, store users can view the audit response in the Mobile App.</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"cf-box-sub\" *ngIf=\"showResponseInApp\">\r\n <div class=\"cf-stack cf-stack--xs\">\r\n <div class=\"cf-label-sm\">Response Visibility</div>\r\n <div class=\"cf-hint\">Choose when the response becomes visible to store users</div>\r\n </div>\r\n\r\n <div class=\"cf-options\">\r\n <div class=\"cf-option\" [class.is-on]=\"responseVisibility === 'pre'\" (click)=\"responseVisibility = 'pre'\">\r\n <span class=\"cf-radio\" [class.is-on]=\"responseVisibility === 'pre'\"><span></span></span>\r\n <div class=\"cf-stack cf-stack--sm\">\r\n <div class=\"cf-label-sm\">Pre-approval</div>\r\n <div class=\"cf-hint\">The audit response will be visible to store users before it is approved.</div>\r\n <div class=\"cf-inline cf-inline--top\">\r\n Show response\r\n <ng-container *ngTemplateOutlet=\"dropdown; context: { key: 'respDelay', options: respDelayOpts }\"></ng-container>\r\n after submission\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"cf-option\" [class.is-on]=\"responseVisibility === 'post'\" (click)=\"responseVisibility = 'post'\">\r\n <span class=\"cf-radio\" [class.is-on]=\"responseVisibility === 'post'\"><span></span></span>\r\n <div class=\"cf-stack cf-stack--sm\">\r\n <div class=\"cf-label-sm\" [class.cf-muted]=\"responseVisibility !== 'post'\">Post-approval</div>\r\n <div class=\"cf-hint\">Once the response is approved, it will automatically be displayed in the Mobile App. Store users cannot raise a dispute.</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"cf-box-sep\">\r\n <ng-container *ngIf=\"responseVisibility === 'pre'\">\r\n <div class=\"cf-box-row cf-box-row--flush\">\r\n <button type=\"button\" class=\"cf-switch cf-switch--top\" [class.is-on]=\"disputeOn\" (click)=\"disputeOn = !disputeOn\"><span></span></button>\r\n <div class=\"cf-stack cf-stack--xs\">\r\n <div class=\"cf-label-sm\">Dispute Configuration</div>\r\n <div class=\"cf-hint cf-hint--wrap\">When enabled, the store team can raise a dispute against the auditor's submission once the response becomes visible to them.</div>\r\n </div>\r\n </div>\r\n <div class=\"cf-box cf-box--nested\" *ngIf=\"disputeOn\">\r\n <div class=\"cf-inline\">\r\n Dispute window\r\n <ng-container *ngTemplateOutlet=\"dropdown; context: { key: 'disputeWindow', options: dispWindowOpts }\"></ng-container>\r\n from when the response becomes visible\r\n </div>\r\n <div class=\"cf-info cf-info--wrap\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line></svg>\r\n Disputes raised inside this window go to the approver. Approved disputes revise the answer and the compliance score.\r\n </div>\r\n <div class=\"cf-error\" *ngIf=\"!hasApprovers\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n No approver is set, so no one can review disputes. Turn on Approver and add an approver.\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"responseVisibility === 'post'\">\r\n <div class=\"cf-stack cf-stack--sm\">\r\n <div class=\"cf-label-sm cf-muted\">Dispute Configuration</div>\r\n <div class=\"cf-info cf-info--wrap\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line></svg>\r\n Disputes are not available when responses are shown post-approval.\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Pre-submission access -->\r\n <div class=\"cf-box cf-box--pad\">\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Pre-Submission Access</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"preSubmissionAccessOn\" (click)=\"preSubmissionAccessOn = !preSubmissionAccessOn\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--wrap\">Users added here can view Open and In Progress audits until submission. The Schedule Info tab is also visible only to these users.</div>\r\n <ng-container *ngIf=\"preSubmissionAccessOn\">\r\n <div class=\"cf-row cf-row--top\">\r\n <span class=\"cf-field\">Visible to</span>\r\n <ng-container *ngTemplateOutlet=\"chipPicker; context: { list: 'preSubmissionUsers', large: false }\"></ng-container>\r\n </div>\r\n <div class=\"cf-error cf-error--indent\" *ngIf=\"preSubmissionEmpty\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n Add at least one user\r\n </div>\r\n </ng-container>\r\n </div>\r\n </section>\r\n\r\n <!-- ===== Scoring ===== -->\r\n <section class=\"cf-card cf-card--lg\">\r\n <div class=\"cf-block-title\">Scoring</div>\r\n <div class=\"cf-box cf-box--pad\">\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Pass/Fail Score Setup</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"passFailOn\" (click)=\"passFailOn = !passFailOn\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--wrap\">Set the compliance score an audit must reach to be marked {{ passLabel }}. Anything below it is marked {{ failLabel }}.</div>\r\n <div class=\"cf-row cf-row--wrap cf-row--top\" *ngIf=\"passFailOn\">\r\n <span class=\"cf-field\">Minimum score to {{ passLabel }}</span>\r\n <label class=\"cf-num\">\r\n <input type=\"number\" min=\"1\" max=\"100\" [(ngModel)]=\"passThreshold\">\r\n <span>%</span>\r\n </label>\r\n <span class=\"cf-pill cf-pill--pass\">{{ passLabel }} \u2265 {{ passThreshold }}%</span>\r\n <span class=\"cf-pill cf-pill--fail\">{{ failLabel }} &lt; {{ passThreshold }}%</span>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <!-- ===== Approver Controls ===== -->\r\n <section class=\"cf-card cf-card--lg\">\r\n <div class=\"cf-block-title\">Approver Controls</div>\r\n <div class=\"cf-stack\">\r\n <div class=\"cf-toggle-row\">\r\n <span class=\"cf-label\">Edit Submitted Audit</span>\r\n <button type=\"button\" class=\"cf-switch\" [class.is-on]=\"editSubmittedOn\" (click)=\"toggleEditSubmitted()\"><span></span></button>\r\n </div>\r\n <div class=\"cf-hint cf-hint--tight\">Allow Approvers to edit submitted Audit</div>\r\n <ng-container *ngIf=\"editSubmittedOn\">\r\n <ng-container *ngTemplateOutlet=\"chipPicker; context: { list: 'editUsers', large: true }\"></ng-container>\r\n <div class=\"cf-error\" *ngIf=\"editSubmittedError\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>\r\n {{ editSubmittedError }}\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"cf-grid2\">\r\n <div class=\"cf-stack\">\r\n <div class=\"cf-label\">Redo Extension</div>\r\n <div class=\"cf-inline\">\r\n Extend redo up to\r\n <ng-container *ngTemplateOutlet=\"dropdown; context: { key: 'redoExtension', options: redoExtensionOpts }\"></ng-container>\r\n Days till approval\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <!-- ===== User Verification ===== -->\r\n <section class=\"cf-card\">\r\n <div class=\"cf-block-title\">User Verification Configuration</div>\r\n <div class=\"cf-box cf-box--row\">\r\n <button type=\"button\" class=\"cf-switch cf-switch--top\" [class.is-on]=\"requirePhoto\" (click)=\"requirePhoto = !requirePhoto\"><span></span></button>\r\n <div class=\"cf-stack cf-stack--xs\">\r\n <div class=\"cf-label\">Require Photo Capture</div>\r\n <div class=\"cf-hint\">By enabling, users must capture their photo to complete submission</div>\r\n </div>\r\n </div>\r\n <div class=\"cf-box cf-box--row\">\r\n <button type=\"button\" class=\"cf-switch cf-switch--top\" [class.is-on]=\"requireAcknowledgment\" (click)=\"requireAcknowledgment = !requireAcknowledgment\"><span></span></button>\r\n <div class=\"cf-stack cf-stack--xs\">\r\n <div class=\"cf-label\">Require User Acknowledgment</div>\r\n <div class=\"cf-hint\">By enabling, users must type their name as acknowledgment to complete submission</div>\r\n </div>\r\n </div>\r\n </section>\r\n </ng-container>\r\n\r\n </div>\r\n </div>\r\n\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.av2-page{display:flex;flex-direction:column;gap:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;color:#101828;-webkit-font-smoothing:antialiased}.av2-page *,.av2-page *:before,.av2-page *:after{box-sizing:border-box}.av2-card{background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #f1f1f4,0 3px 4px #00000008;padding:20px 24px;display:flex;flex-direction:column;gap:20px}.av2-card--log{padding:20px 24px 24px;gap:18px}.av2-card--table{padding:20px 24px 24px;gap:16px}.av2-card-head{display:flex;align-items:flex-start;gap:16px;flex-wrap:wrap}.av2-card-head--center{align-items:center;gap:12px}.av2-title-block{display:flex;flex-direction:column;gap:4px;flex:1;min-width:220px}.av2-card-title{font-size:20px;line-height:30px;font-weight:600;color:#101828;display:flex;align-items:center;gap:10px}.av2-card-title--grow{flex:1;min-width:180px}.av2-card-sub{font-size:14px;line-height:20px;color:#667085}.av2-grow{flex:1}.av2-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}.av2-grid-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:20px}.av2-grid-4{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px}.av2-stat-card{background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #f1f1f4,0 3px 4px #00000008;padding:10px}.av2-stat{padding:8px 16px;border-radius:6px;border-bottom:2px solid #EAECF0;background:radial-gradient(206.89% 107.47% at 16.16% 32.77%,#fff6,#45bbfe33),#f2f4f7;box-shadow:0 4px 10px #0000000d;display:flex;align-items:center;gap:20px}.av2-stat-value{font-size:30px;line-height:38px;font-weight:600;color:#101828}.av2-stat-label{font-size:14px;line-height:20px;font-weight:500;color:#344054}.av2-kpi{background:#fff;border-radius:10px;box-shadow:inset 0 0 0 1px #eaecf0,0 1px 2px #1018280d;display:flex;flex-direction:column;overflow:hidden}.av2-kpi.is-primary{box-shadow:inset 0 0 0 1px #99dbff,0 1px 2px #1018280d}.av2-kpi.is-primary .av2-kpi-head{background:#eaf8ff}.av2-kpi-head{padding:14px 18px;background:#f9fafb;font-size:16px;line-height:24px;font-weight:500;color:#101828}.av2-kpi-body{padding:16px 18px 18px;display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}.av2-kpi-value{font-size:20px;line-height:30px;font-weight:700;color:#101828}.av2-kpi-delta{display:flex;align-items:center;gap:4px;font-size:12px;color:#039855}.av2-kpi-delta.is-down{color:#d92d20}.av2-kpi-note{font-size:12px;color:#667085}.av2-ocard{padding:8px;border-radius:12px;border:1px solid #D0D5DD;background:#fff;display:flex;flex-direction:column;min-width:0;height:100%}.av2-ocard-head{min-height:70px;padding:10px 14px;border-radius:6px;border-bottom:2px solid #EAECF0;background:radial-gradient(206.89% 107.47% at 16.16% 32.77%,#fff6,#45bbfe33),#f2f4f7;box-shadow:0 4px 10px #0000000d;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;gap:2px;min-width:0}.av2-ocard-head--row{flex-direction:row;align-items:center;justify-content:flex-start;gap:12px}.av2-ocard-count{font-size:30px;line-height:38px;font-weight:600;color:#101828;white-space:nowrap}.av2-ocard-text{font-size:14px;line-height:20px;font-weight:500;color:#344054}.av2-ocard-body{flex:1;padding:12px 14px;display:flex;gap:16px;min-width:0}.av2-ocard-cell{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.av2-ocard-cell--center{align-items:center;text-align:center}.av2-ocard-sub{margin:4px 0;font-size:20px;line-height:30px;font-weight:700;color:#101828}.av2-ocard-note{font-size:14px;line-height:20px;font-weight:400;color:#667085}.av2-ocard-delta{margin-top:6px;display:inline-flex;align-items:center;gap:6px;font-size:12px;line-height:18px;font-weight:400;color:#1d2939}.av2-ocard-delta b{font-weight:600;color:#667085}.av2-ocard-delta svg{flex-shrink:0;color:#039855}.av2-ocard-delta.is-down svg{color:#d92d20}.av2-search{position:relative;display:flex;align-items:center;gap:8px;height:44px;padding:0 12px;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;color:#98a2b3;font-size:14px;flex-shrink:0}.av2-search svg{flex-shrink:0}.av2-search input{flex:1;min-width:0;height:100%;border:0;outline:0;padding:0;background:transparent;font:inherit;font-size:14px;font-weight:500;color:#101828}.av2-search input::placeholder{color:#98a2b3}.av2-search:focus-within{box-shadow:inset 0 0 0 1px #66c8ff,0 0 0 4px #eaf8ff}.av2-search--sm{width:300px}.av2-search--md{width:320px}.av2-search--lg{width:340px}.av2-select{height:44px;padding:0 36px 0 12px;border:0;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;font:inherit;font-size:14px;font-weight:500;color:#344054;cursor:pointer;appearance:none;-webkit-appearance:none;background-image:url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23344054' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>\");background-repeat:no-repeat;background-position:right 12px center;flex-shrink:0}.av2-select:focus{outline:0;box-shadow:inset 0 0 0 1px #66c8ff,0 0 0 4px #eaf8ff}.av2-select--sm{width:180px}.av2-chip{display:flex;align-items:center;gap:8px;height:44px;padding:0 12px;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;font-size:14px;color:#344054;white-space:nowrap;flex-shrink:0}.av2-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:44px;padding:0 16px;border:0;border-radius:8px;font-family:inherit;font-size:14px;line-height:20px;font-weight:600;cursor:pointer;white-space:nowrap;flex-shrink:0;transition:background-color .15s cubic-bezier(.4,0,.2,1)}.av2-btn svg{flex-shrink:0}.av2-btn:disabled{opacity:.55;cursor:not-allowed}.av2-btn--ghost{background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;color:#344054;font-weight:500}.av2-btn--ghost:hover:not(:disabled){background:#f9fafb}.av2-btn--primary{background:#00a3ff;color:#fff;font-size:16px;line-height:24px}.av2-btn--primary:hover:not(:disabled){background:#009bf3}.av2-btn--sm{height:36px;padding:0 14px;font-size:13px}.av2-btn--wide{padding:0 18px}.av2-tabs{display:flex;align-items:center;gap:6px}.av2-tab{height:44px;padding:0 26px;border:0;border-radius:6px;background:transparent;display:inline-flex;align-items:center;justify-content:center;font-family:inherit;font-size:16px;font-weight:500;color:#475467;cursor:pointer}.av2-tab.is-active{background:#eaf8ff;color:#009bf3;font-weight:500}.av2-badge{display:inline-flex;align-items:center;height:22px;padding:2px 8px;border-radius:16px;background:#eaf8ff;color:#009bf3;font-size:12px;font-weight:500;line-height:18px;white-space:nowrap}.av2-badge--count{height:22px;padding:0 8px}.av2-badge--success{background:#ecfdf3;color:#027a48}.av2-badge--error{background:#fef3f2;color:#b42318}.av2-badge--warning{background:#fffaeb;color:#b54708}.av2-badge--gray{background:#f2f4f7;color:#344054}.av2-badge--purple{background:#f9f5ff;color:#5925dc}.av2-link{color:#00a3ff;font-size:14px;font-weight:500;text-decoration:underline;cursor:pointer}.av2-link:hover{color:#009bf3;text-decoration:underline}.av2-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.av2-muted{color:#667085}.av2-dim{color:#475467}.av2-faint{color:#98a2b3}table tbody td.av2-dim{color:#475467}table tbody td.av2-faint{color:#98a2b3}.av2-table-wrap{overflow-x:auto}.av2-table{width:100%;border-collapse:separate;border-spacing:0;margin:0}.av2-table thead th{background:#f9fafb;padding:12px;font-size:12px;line-height:18px;font-weight:500;color:#667085;text-align:left;text-transform:none;letter-spacing:0;border:0;white-space:nowrap}.av2-table thead th:first-child{border-radius:8px 0 0}.av2-table thead th:last-child{border-radius:0 8px 0 0}.av2-table tbody td{padding:16px 12px;border:0;border-bottom:1px solid #F2F4F7;font-size:14px;line-height:20px;font-weight:500;color:#101828;vertical-align:middle}.av2-table .av2-th-sort{display:inline-flex;align-items:center;gap:4px}.av2-table .av2-cell-icon{display:flex;align-items:center;gap:8px;min-width:0}.av2-table .av2-cell-icon svg{flex-shrink:0}.av2-table .av2-cell-icon span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av2-table .av2-cell-stack{display:flex;flex-direction:column;gap:2px}.av2-table .av2-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av2-sortable{cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap}.av2-table--lined thead th{background:transparent;border-bottom:1px solid #EAECF0;border-radius:0!important}.av2-empty{display:flex;flex-direction:column;align-items:center;gap:12px;padding:24px 16px 32px;text-align:center}.av2-empty-img{display:block;width:160px;height:120px}.av2-empty-text{display:flex;flex-direction:column;gap:4px;align-items:center}.av2-empty-title{font-size:16px;line-height:24px;font-weight:600;color:#101828}.av2-empty-sub{max-width:480px;font-size:14px;line-height:20px;color:#667085;text-wrap:pretty}.av2-col-head{border-radius:8px;background:#f9fafb;padding:14px 16px;font-size:12px;line-height:20px;font-weight:500;color:#344054;display:flex;align-items:center;gap:8px}.av2-avatar{width:32px;height:32px;flex-shrink:0;border-radius:9999px;background:#eaf8ff;color:#009bf3;display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:700}.av2-bar{flex:1;height:5px;border-radius:9999px;background:#f2f4f7;overflow:hidden;display:block;min-width:60px}.av2-bar span{display:block;height:5px;border-radius:9999px;background:#00a3ff}@keyframes av2-shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.av2-sk{display:block;width:100%;max-width:100%;height:12px;border-radius:4px;flex-shrink:0;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%;animation:av2-shimmer 3s linear infinite}.av2-sk--value{width:72px;height:28px;border-radius:6px}.av2-sk--title{width:220px;height:18px}.av2-sk--note{width:60%}.av2-sk--block{border-radius:8px}@media (prefers-reduced-motion: reduce){.av2-sk{animation:none}}.cf-crumb{font-size:13px;line-height:20px;color:#667085}.cf-crumb a{font-weight:600;color:#00a3ff}.cf-header{background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #f1f1f4,0 3px 4px #00000008;padding:16px 20px;display:flex;align-items:center;gap:12px}.cf-header-text{display:flex;flex-direction:column;gap:4px;min-width:0}.cf-title{font-size:16px;line-height:24px;font-weight:600;color:#101828}.cf-sk-title{margin:3px 0}.cf-desc{border:none;outline:none;padding:0;background:transparent;font-family:inherit;font-size:13px;line-height:18px;color:#344054;min-width:320px}.cf-desc::placeholder{color:#98a2b3}.cf-publish{padding:0 20px;box-shadow:0 1px 2px #1018280d}.cf-draft{padding:0 18px;box-shadow:inset 0 0 0 1px #d0d5dd,0 1px 2px #1018280d}.cf-body{display:flex;gap:16px;align-items:flex-start}.cf-left{width:300px;flex-shrink:0;background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #f1f1f4,0 3px 4px #00000008;padding:16px;display:flex;flex-direction:column;gap:10px;position:sticky;top:calc(var(--bs-app-header-height, 0px) + 16px);max-height:calc(100vh - var(--bs-app-header-height, 0px) - 32px);overflow-y:auto;scrollbar-width:thin}.cf-left-title{font-size:14px;line-height:20px;font-weight:600;color:#101828}.cf-section{display:flex;align-items:center;gap:8px;padding:2px 0;font-size:13px;font-weight:500;color:#344054;cursor:pointer;white-space:nowrap}.cf-section.is-open{color:#1d2939}.cf-rule{flex:1;border-top:1px solid #EAECF0}.cf-chev{display:flex;color:#98a2b3}.cf-chev svg{transition:transform .15s cubic-bezier(.4,0,.2,1)}.cf-chev .rotate{transform:rotate(-90deg)}.cf-items{display:flex;flex-direction:column;gap:8px;padding-left:12px;font-size:13px;color:#475467}.cf-schedule-title{font-size:14px;font-weight:600;color:#101828;margin-top:6px}.cf-schedule{display:flex;flex-direction:column;gap:6px;font-size:13px;color:#475467}.cf-schedule>div{display:flex;align-items:center;gap:6px}.cf-right{flex:1;min-width:0;display:flex;flex-direction:column;gap:16px}.cf-card{background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #f1f1f4,0 3px 4px #00000008;padding:20px;display:flex;flex-direction:column;gap:14px}.cf-card--lg{border-radius:8px}.cf-block-head{display:flex;align-items:center;gap:12px}.cf-block-title{font-size:15px;font-weight:600;color:#101828}.cf-divider-head{display:flex;align-items:center;gap:10px;margin-top:4px}.cf-label{font-size:14px;font-weight:600;color:#101828}.cf-label-sm{font-size:13px;font-weight:600;color:#101828}.cf-muted{color:#667085}.cf-hint{font-size:12px;line-height:18px;color:#667085}.cf-hint--tight{margin-top:-8px}.cf-hint--wrap{max-width:640px;text-wrap:pretty}.cf-field{font-size:13px;font-weight:500;color:#344054;min-width:150px;flex-shrink:0}.cf-row{display:flex;align-items:center;gap:12px}.cf-row--top{margin-top:6px}.cf-row--wrap{flex-wrap:wrap}.cf-stack{display:flex;flex-direction:column;gap:8px}.cf-stack--tight,.cf-stack--sm{gap:4px}.cf-stack--xs{gap:2px}.cf-grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px}.cf-toggle-row{display:flex;align-items:center;gap:10px}.cf-switch{width:36px;height:20px;padding:2px;border:none;border-radius:9999px;background:#eaecf0;display:flex;align-items:center;justify-content:flex-start;flex-shrink:0;cursor:pointer;transition:background .15s cubic-bezier(.4,0,.2,1)}.cf-switch>span{width:16px;height:16px;border-radius:9999px;background:#fff;box-shadow:0 1px 2px #1018280d}.cf-switch.is-on{background:#00a3ff;justify-content:flex-end}.cf-switch--top{margin-top:2px}.cf-chipbox{flex:1;min-width:0;display:flex;flex-wrap:wrap;gap:6px;border-radius:8px;box-shadow:inset 0 0 0 1px #d0d5dd;padding:8px 10px}.cf-chipbox--lg{gap:8px;padding:10px 12px}.cf-chip{display:flex;align-items:center;gap:6px;background:#f9fafb;box-shadow:inset 0 0 0 1px #eaecf0;border-radius:9999px;padding:3px 8px;font-size:12px;color:#344054;white-space:nowrap;flex-shrink:0;max-width:100%}.cf-chip--lg{gap:8px;background:#fff;padding:5px 11px;font-size:13px;color:#1d2939}.cf-chip-ini{color:#00a3ff;font-weight:600;font-size:11px}.cf-chip-tag{display:inline-flex;align-items:center;justify-content:center;padding:1px 5px;border-radius:6px;background:#eaf8ff;color:#00a3ff;font-weight:700;font-size:11px;letter-spacing:.02em}.cf-chip-x{display:flex;cursor:pointer;color:#98a2b3}.cf-chip-x:hover{color:#344054}.cf-chip-input{flex:1;min-width:100px;border:none;outline:none;background:transparent;font-family:inherit;font-size:12px;color:#101828}.cf-chip-input::placeholder{color:#98a2b3}.cf-chip-input--lg{min-width:120px;font-size:13px}.cf-inner{border-radius:8px;box-shadow:inset 0 0 0 1px #eaecf0;padding:14px 16px;display:flex;flex-direction:column;gap:8px}.cf-inline{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:13px;color:#344054}.cf-inline--top{margin-top:2px}.cf-mini{height:32px;padding:0 28px 0 10px;border:none;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;font-family:inherit;font-size:13px;font-weight:600;color:#101828;cursor:pointer;appearance:none;-webkit-appearance:none;background-image:url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%23667085' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>\");background-repeat:no-repeat;background-position:right 8px center;outline:none}.cf-info{display:flex;align-items:center;gap:6px;font-size:12px;line-height:18px;color:#667085}.cf-info svg{flex-shrink:0}.cf-info--wrap{align-items:flex-start;max-width:560px;text-wrap:pretty}.cf-info--wrap svg{margin-top:3px}.cf-checks{display:flex;align-items:center;gap:16px;flex-wrap:wrap;font-size:13px;color:#344054}.cf-checks-label{font-weight:500}.cf-check{display:flex;align-items:center;gap:6px;margin:0;font-size:13px;color:#344054;cursor:pointer;-webkit-user-select:none;user-select:none}.cf-check-box{width:16px;height:16px;border-radius:4px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;display:flex;align-items:center;justify-content:center;color:#fff;flex-shrink:0}.cf-check-box.is-on{background:#00a3ff;box-shadow:none}.cf-box{border-radius:8px;box-shadow:inset 0 0 0 1px #eaecf0;overflow:hidden;display:flex;flex-direction:column}.cf-box--pad{padding:14px 16px;gap:6px;overflow:visible}.cf-box--row{padding:14px 16px;flex-direction:row;align-items:flex-start;gap:12px}.cf-box--nested{background:#fff;padding:12px 14px;gap:8px;margin-left:46px;overflow:visible}.cf-box--open{overflow:visible}.cf-box--open>.cf-box-sub:last-child{border-radius:0 0 8px 8px}.cf-box-row{padding:14px 16px;display:flex;align-items:flex-start;gap:12px}.cf-box-row--flush{padding:0;gap:10px}.cf-box-sub{border-top:1px solid #EAECF0;background:#f9fafb;padding:16px 16px 18px 64px;display:flex;flex-direction:column;gap:12px}.cf-options{display:flex;flex-direction:column;gap:10px}.cf-option{background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #eaecf0;padding:12px 14px;display:flex;align-items:flex-start;gap:10px;cursor:pointer}.cf-option.is-on{box-shadow:inset 0 0 0 1.5px #00a3ff}.cf-box-sep{display:flex;flex-direction:column;gap:12px;padding-top:14px;border-top:1px solid #EAECF0}.cf-num{display:flex;align-items:center;gap:8px;height:36px;padding:0 6px 0 12px;border-radius:8px;box-shadow:inset 0 0 0 1px #d0d5dd;margin:0}.cf-num input{width:52px;border:none;outline:none;background:transparent;font-family:inherit;font-size:14px;font-weight:600;color:#101828}.cf-num span{font-size:13px;color:#667085;padding-right:6px}.cf-pill{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;border-radius:9999px;padding:4px 12px}.cf-pill--pass{background:#ecfdf3;color:#027a48}.cf-pill--fail{background:#fef3f2;color:#d92d20}.cf-error{display:flex;gap:6px;font-size:12px;font-weight:500;color:#d92d20;align-items:flex-start;line-height:18px;max-width:640px}.cf-error svg{flex-shrink:0;margin-top:3px}.cf-error--indent{margin-left:162px}.cf-check.is-blocked{color:#98a2b3;cursor:not-allowed}.cf-select{position:relative;display:inline-block;vertical-align:middle}.cf-select-btn{display:inline-flex;align-items:center;gap:8px;height:32px;padding:0 10px 0 12px;border:none;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;font-family:inherit;font-size:13px;font-weight:600;color:#101828;cursor:pointer;white-space:nowrap}.cf-select-btn svg{color:#667085;transition:transform .15s ease}.is-open .cf-select-btn{box-shadow:0 0 0 2px #99dbff,inset 0 0 0 1px #d0d5dd}.is-open .cf-select-btn svg{transform:rotate(180deg)}.cf-select-menu{position:absolute;top:calc(100% + 4px);left:0;z-index:30;min-width:100%;padding:4px;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #eaecf0,0 8px 24px #1018281f}.cf-select-item{padding:8px 12px;border-radius:6px;font-size:13px;color:#344054;white-space:nowrap;cursor:pointer}.cf-select-item:hover{background:#f9fafb}.cf-select-item.is-on{background:#eaf8ff;color:#009bf3;font-weight:600}.cf-chipbox{position:relative}.cf-chipbox.is-open{box-shadow:0 0 0 2px #99dbff,inset 0 0 0 1px #d0d5dd}.cf-suggest{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:30;max-height:260px;overflow-y:auto;padding:4px;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #eaecf0,0 8px 24px #1018281f}.cf-suggest-item{display:flex;align-items:center;gap:8px;padding:6px 10px;border-radius:6px;cursor:pointer}.cf-suggest-item:hover{background:#f9fafb}.cf-suggest-name{font-size:13px;color:#101828}.cf-suggest-mail{font-size:12px;color:#667085;margin-left:auto}.cf-suggest-empty{padding:8px 10px;font-size:12px;color:#667085}.cf-error--page{margin:0 0 12px}.cf-autotask{margin-top:12px;padding:14px 16px;border-radius:10px;background:#f9fafb;box-shadow:inset 0 0 0 1px #eaecf0;display:flex;flex-direction:column;gap:8px}.cf-autotask-title{font-size:14px;font-weight:600;color:#1d2939}.cf-autotask-title:not(:first-child){margin-top:6px}.cf-autotask-choices{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}@media (max-width: 720px){.cf-autotask-choices{grid-template-columns:1fr}}.cf-choice{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border:0;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;font:inherit;text-align:left;cursor:pointer}.cf-choice.is-on{background:#f5faff;box-shadow:inset 0 0 0 1px #66c8ff}.cf-radio{width:18px;height:18px;flex-shrink:0;margin-top:1px;border-radius:9999px;box-shadow:inset 0 0 0 1px #d0d5dd;display:flex;align-items:center;justify-content:center}.cf-radio span{width:8px;height:8px;border-radius:9999px;background:transparent}.cf-radio.is-on{box-shadow:inset 0 0 0 1px #1570ef}.cf-radio.is-on span{background:#1570ef}.cf-choice-text{display:flex;flex-direction:column;gap:2px;min-width:0}.cf-choice-title{font-size:14px;font-weight:600;color:#101828}.cf-choice-sub{font-size:12px;color:#667085}.cf-autotask-validity{display:flex;align-items:center;flex-wrap:wrap;gap:10px;font-size:13px;color:#344054}.cf-validity-select{width:96px}.cf-reminder{display:inline-flex;align-items:center;gap:6px}.cf-reminder-select{width:120px}.cf-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:none;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;color:#344054;cursor:pointer}.cf-icon-btn:hover{background:#f9fafb}\n"] }]
904
904
  }], ctorParameters: () => [{ type: i1.TraxService }, { type: i2.GlobalStateService }, { type: i3.ActivatedRoute }, { type: i3.Router }, { type: i4.ToastService }, { type: i0.ChangeDetectorRef }], propDecorators: { onEscape: [{
905
905
  type: HostListener,
906
906
  args: ['document:keydown.escape']
907
907
  }] } });
908
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtdjItY29uZmlndXJlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLWFuYWx5c2UtdHJheC9zcmMvbGliL2NvbXBvbmVudHMvYXVkaXQtdjIvY29uZmlndXJlL2F1ZGl0LXYyLWNvbmZpZ3VyZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2F1ZGl0LXYyL2NvbmZpZ3VyZS9hdWRpdC12Mi1jb25maWd1cmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUU5RixPQUFPLEVBQWMsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHakQsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sR0FBRyxNQUFNLGtCQUFrQixDQUFDO0FBQ25DLE9BQU8sUUFBUSxNQUFNLHVCQUF1QixDQUFDO0FBRTdDLE9BQU8sRUFBZSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7OztBQUc5RCxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFzQnZCLDBHQUEwRztBQUMxRyxNQUFNLGdCQUFnQixHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzlDLGlFQUFpRTtBQUNqRSxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFL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ekJVLHlCQUF5Qjs0RkFBekIseUJBQXlCLGdJQzVEdEMsMmlxQ0E0akJBOzs0RkRoZ0JhLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSx3QkFBd0I7OE5BMElsQyxRQUFRO3NCQURQLFlBQVk7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgZm9ya0pvaW4sIG9mLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktc2hhcmVkJztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XHJcbmltcG9ydCB1dGMgZnJvbSAnZGF5anMvcGx1Z2luL3V0Yyc7XHJcbmltcG9ydCB0aW1lem9uZSBmcm9tICdkYXlqcy9wbHVnaW4vdGltZXpvbmUnO1xyXG5pbXBvcnQgeyBUcmF4U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RyYXguc2VydmljZSc7XHJcbmltcG9ydCB7IEF1ZGl0QWNjZXNzLCBhdWRpdEFjY2VzcyB9IGZyb20gJy4uL2F1ZGl0LXYyLWFjY2Vzcyc7XHJcbmltcG9ydCB7IEF1ZGl0U2VsZWN0T3B0aW9uIH0gZnJvbSAnLi4vc2VsZWN0L2F1ZGl0LXYyLXNlbGVjdC5jb21wb25lbnQnO1xyXG5cclxuZGF5anMuZXh0ZW5kKHV0Yyk7XHJcbmRheWpzLmV4dGVuZCh0aW1lem9uZSk7XHJcblxyXG4vKiogQSB1c2VyIGNoaXA6IGluaXRpYWxzLCBkaXNwbGF5IG5hbWUsIGVtYWlsLiBTdG9yZWQgb24gdGhlIGNoZWNrbGlzdCBhcyB7IG5hbWUsIHZhbHVlIH0uICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2hpcFVzZXIge1xyXG4gIGk6IHN0cmluZztcclxuICBuOiBzdHJpbmc7XHJcbiAgZTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZ1NlY3Rpb24ge1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgaXRlbXM6IHN0cmluZ1tdO1xyXG4gIG9wZW46IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0T3B0aW9uIHtcclxuICB2YWx1ZTogbnVtYmVyO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbn1cclxuXHJcbnR5cGUgQ2hpcExpc3QgPSAnb3duZXJzJyB8ICdhcHByb3ZlcnMnIHwgJ25vdGlmeVVzZXJzJyB8ICdyZWN1cnJpbmdVc2VycycgfCAnZGFpbHlVc2VycycgfCAncHJlU3VibWlzc2lvblVzZXJzJyB8ICdlZGl0VXNlcnMnO1xyXG5cclxuLyoqIFJlbWluZGVyIGludGVydmFscyBvZmZlcmVkLCBpbiBtaW51dGVzIGJlZm9yZSB0aGUgYXVkaXQgZW5kIHRpbWUgKGFzIHRoZSBDaGVja2xpc3QgQ29uZmlndXJlIHBhZ2UpLiAqL1xyXG5jb25zdCBSRU1JTkRFUl9NSU5VVEVTID0gWzMwLCA0NSwgNjAsIDc1LCA5MF07XHJcbi8qKiBUaGUgQ2hlY2tsaXN0IENvbmZpZ3VyZSBwYWdlIGFsbG93cyB1cCB0byB0aHJlZSByZW1pbmRlcnMuICovXHJcbmNvbnN0IE1BWF9SRU1JTkRFUlMgPSAzO1xyXG50eXBlIFNlbGVjdEtleSA9ICdyZWN1cnJpbmdUaHJlc2hvbGQnIHwgJ3JlZG9WYWxpZEZvcicgfCAncmVzcERlbGF5JyB8ICdkaXNwdXRlV2luZG93JyB8ICdyZWRvRXh0ZW5zaW9uJztcclxuLyoqIFwiU2VuZCBUbyA+IEFwcHJvdmVyXCIgdGlja3MgdGhhdCBuZWVkIGF0IGxlYXN0IG9uZSBhcHByb3ZlciB0byBzZW5kIHRvLiAqL1xyXG50eXBlIFNlbmRBcHByb3ZlcktleSA9ICdub3RpZnlTZW5kQXBwcm92ZXInIHwgJ3JlY3VycmluZ1NlbmRBcHByb3ZlcicgfCAnZGFpbHlTZW5kQXBwcm92ZXInO1xyXG5cclxuLyoqXHJcbiAqIE1hbmFnZSAtPiBDb25maWd1cmUgZm9yIG9uZSBhdWRpdCAoYD9jaGVja2xpc3RJZD1gKS5cclxuICpcclxuICogVGhlIGF1ZGl0IGlzIGEgY2hlY2tsaXN0LCBzbyB0aGlzIHBhZ2UgcmVhZHMgYW5kIHdyaXRlcyB0aGUgU0FNRSBmaWVsZHMgdGhlIENoZWNrbGlzdFxyXG4gKiBDb25maWd1cmUgcGFnZSB1c2VzIChHRVQgL3RyYXgvZ2V0Q29uZmlnRGV0YWlscywgUE9TVCAvdHJheC9jaGVja2xpc3RDb25maWd1cmV2MSk6XHJcbiAqIG93bmVyLCBhcHByb3ZlciwgcmVtYWluZGVyLCBub3RpZnlGbGFncywgcmVjdXJyaW5nRmxhZywgYXV0b0VtYWlsLCBleHBvcnQsIHJlZG9WYWxpZGl0eSxcclxuICogcmVkb0V4dGVuc2lvbiwgYXV0b0NyZWF0ZVRhc2ssIHVzZXJWZXJpZmljYXRpb24sIHNob3dBcHByb3ZlZFJlc3BvbnNlLCByZXNwb25zZVZpc2liaWxpdHkoK0hvdXJzKSxcclxuICogc2hhcmVSZXBvcnRQb3N0QXBwcm92YWwsIGNoZWNrTGlzdERlc2NyaXB0aW9uLiBBdWRpdC1vbmx5IHNldHRpbmdzIHRoYXQgdGhlIGNoZWNrbGlzdCBzY2hlbWFcclxuICogaGFzIG5vIGZpZWxkIGZvciAocGFzcyBtYXJrLCBkaXNwdXRlIHdpbmRvdywgcHJlLXN1Ym1pc3Npb24gYWNjZXNzLCBlZGl0LXN1Ym1pc3Npb24gdXNlcnMpXHJcbiAqIGFyZSBrZXB0IG9uIGF1ZGl0Y29uZmlnIHZpYSBQT1NUIC90cmF4L2F1ZGl0L2NvbmZpZy9zYXZlLlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItYXVkaXQtdjItY29uZmlndXJlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXVkaXQtdjItY29uZmlndXJlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vYXVkaXQtdjItY29uZmlndXJlLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXVkaXRWMkNvbmZpZ3VyZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBjaGVja2xpc3RJZCA9ICcnO1xyXG4gIGF1ZGl0TmFtZSA9ICcnO1xyXG4gIGRlc2NyaXB0aW9uID0gJyc7XHJcbiAgcHVibGlzaGVkID0gZmFsc2U7XHJcbiAgc2NoZWR1bGUgPSAn4oCUJztcclxuICBzY2hlZHVsZVdpbmRvdyA9ICfigJQnO1xyXG4gIHNlY3Rpb25zOiBDb25maWdTZWN0aW9uW10gPSBbXTtcclxuXHJcbiAgLy8gLS0tLSBjaGVja2xpc3QgZmllbGRzIChzYXZlZCBvbiBjaGVja2xpc3Rjb25maWcpIC0tLS1cclxuICBvd25lcnM6IENoaXBVc2VyW10gPSBbXTtcclxuICBhcHByb3Zlck9uID0gZmFsc2U7XHJcbiAgYXBwcm92ZXJzOiBDaGlwVXNlcltdID0gW107XHJcbiAgLyoqIFRoZSBjbGllbnQncyBzdXBlcmFkbWluIChmcm9tIHRoZSB1c2VyIGxpc3QpLCB0aGUgdjEgZGVmYXVsdCBhcHByb3ZlciBmb3IgVGFuZ28gdXNlcnMgYW5kIHJvbGUgJ3VzZXInLiAqL1xyXG4gIHByaXZhdGUgc3VwZXJBZG1pbjogQ2hpcFVzZXIgfCBudWxsID0gbnVsbDtcclxuICByZW1pbmRlck9uID0gZmFsc2U7XHJcbiAgLyoqIGNoZWNrbGlzdC5yZW1haW5kZXI6IG1pbnV0ZXMgYmVmb3JlIHRoZSBlbmQgdGltZSBhdCB3aGljaCB0aGUgYXVkaXRvciBnZXRzIGEgcHVzaCByZW1pbmRlci4gKi9cclxuICByZW1pbmRlcnM6IG51bWJlcltdID0gW107XHJcbiAgLyoqIE9wdGlvbnMgcGVyIHJlbWluZGVyIHJvdzogZXZlcnkgaW50ZXJ2YWwgbm90IGFscmVhZHkgdXNlZCBieSBhbm90aGVyIHJvdy4gKi9cclxuICByZW1pbmRlck9wdHM6IEF1ZGl0U2VsZWN0T3B0aW9uW11bXSA9IFtdO1xyXG4gIHJlYWRvbmx5IG1heFJlbWluZGVycyA9IE1BWF9SRU1JTkRFUlM7XHJcbiAgLy8gTm90aWZ5IEZsYWdzIChjaGVja2xpc3Qubm90aWZ5RmxhZ3MpOiB3aG8gZ2V0cyB0aGUgZmxhZyBlbWFpbHMuXHJcbiAgbm90aWZ5RmxhZ3NPbiA9IGZhbHNlO1xyXG4gIG5vdGlmeVNlbmRBcHByb3ZlciA9IHRydWU7XHJcbiAgbm90aWZ5U2VuZEN1c3RvbSA9IGZhbHNlO1xyXG4gIG5vdGlmeVVzZXJzOiBDaGlwVXNlcltdID0gW107XHJcbiAgLy8gTm90aWZ5IG9uIFJlY3VycmluZyBGbGFncyAoY2hlY2tsaXN0LnJlY3VycmluZ0ZsYWcpOiB0aHJlc2hvbGQgKyBpdHMgb3duIHJlY2lwaWVudHMuXHJcbiAgcmVjdXJyaW5nRmxhZ3NPbiA9IGZhbHNlO1xyXG4gIHJlY3VycmluZ1RocmVzaG9sZCA9IDM7XHJcbiAgcmVjdXJyaW5nU2VuZEFwcHJvdmVyID0gdHJ1ZTtcclxuICByZWN1cnJpbmdTZW5kQ3VzdG9tID0gZmFsc2U7XHJcbiAgLyoqIFN0b3JlZCBhcyBub3RpZnlUeXBlICdzYW1lQXNOb3RpZnknOiB0aGUgc2VydmVyIG1haWxzIHdob2V2ZXIgTm90aWZ5IEZsYWdzIG1haWxzIGF0IHNlbmQgdGltZS4gKi9cclxuICByZWN1cnJpbmdTYW1lQXNOb3RpZnkgPSBmYWxzZTtcclxuICByZWN1cnJpbmdVc2VyczogQ2hpcFVzZXJbXSA9IFtdO1xyXG4gIGRhaWx5UmVwb3J0T24gPSBmYWxzZTtcclxuICBkYWlseVNlbmRBcHByb3ZlciA9IHRydWU7XHJcbiAgZGFpbHlTZW5kQ3VzdG9tID0gZmFsc2U7XHJcbiAgZGFpbHlVc2VyczogQ2hpcFVzZXJbXSA9IFtdO1xyXG4gIHNoYXJlUG9zdEFwcHJvdmFsID0gZmFsc2U7XHJcbiAgZXhwb3J0U3VibWlzc2lvbk9uID0gZmFsc2U7XHJcbiAgcmVkb1ZhbGlkRm9yID0gNztcclxuICBhdXRvQ3JlYXRlVGFza09uID0gZmFsc2U7XHJcbiAgLyoqIEF1dG8tdGFzayBzZXR0aW5ncyAoYXMgdGhlIENoZWNrbGlzdCBDb25maWd1cmUgcGFnZSk6IHdobyBnZXRzIHRoZSB0YXNrIGFuZCBmb3IgaG93IG1hbnkgZGF5cy4gKi9cclxuICB0YXNrQXNzaWduZWU6ICdzdWJtaXR0ZXInIHwgJ3N0b3JlJyA9ICdzdWJtaXR0ZXInO1xyXG4gIHRhc2tWYWxpZGl0eSA9IDEwO1xyXG4gIHJlYWRvbmx5IHRhc2tWYWxpZGl0eU9wdGlvbnMgPSBbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDE1LCAyMCwgMjUsIDMwXS5tYXAoZCA9PiAoeyB2YWx1ZTogZCwgbGFiZWw6IFN0cmluZyhkKSB9KSk7XHJcbiAgc2hvd1Jlc3BvbnNlSW5BcHAgPSB0cnVlO1xyXG4gIHJlc3BvbnNlVmlzaWJpbGl0eTogJ3ByZScgfCAncG9zdCcgPSAncG9zdCc7XHJcbiAgcmVzcERlbGF5ID0gMjtcclxuICByZXF1aXJlUGhvdG8gPSBmYWxzZTtcclxuICByZXF1aXJlQWNrbm93bGVkZ21lbnQgPSBmYWxzZTtcclxuICByZWRvRXh0ZW5zaW9uID0gMTtcclxuXHJcbiAgLy8gLS0tLSBhdWRpdC1vbmx5IGZpZWxkcyAoc2F2ZWQgb24gYXVkaXRjb25maWcpIC0tLS1cclxuICBwYXNzRmFpbE9uID0gdHJ1ZTtcclxuICBwYXNzVGhyZXNob2xkID0gNzU7XHJcbiAgZGlzcHV0ZU9uID0gdHJ1ZTtcclxuICBkaXNwdXRlV2luZG93ID0gNDg7XHJcbiAgcHJlU3VibWlzc2lvbkFjY2Vzc09uID0gZmFsc2U7XHJcbiAgcHJlU3VibWlzc2lvblVzZXJzOiBDaGlwVXNlcltdID0gW107XHJcbiAgZWRpdFN1Ym1pdHRlZE9uID0gZmFsc2U7XHJcbiAgZWRpdFVzZXJzOiBDaGlwVXNlcltdID0gW107XHJcblxyXG4gIHBhc3NMYWJlbCA9ICdQYXNzJztcclxuICBmYWlsTGFiZWwgPSAnRmFpbCc7XHJcblxyXG4gIC8qKiBDbGllbnQgdXNlcnMgb2ZmZXJlZCBieSB0aGUgY2hpcCBwaWNrZXJzLiAqL1xyXG4gIHVzZXJzOiBDaGlwVXNlcltdID0gW107XHJcbiAgZHJhZnRzOiBSZWNvcmQ8Q2hpcExpc3QsIHN0cmluZz4gPSB7IG93bmVyczogJycsIGFwcHJvdmVyczogJycsIG5vdGlmeVVzZXJzOiAnJywgcmVjdXJyaW5nVXNlcnM6ICcnLCBkYWlseVVzZXJzOiAnJywgcHJlU3VibWlzc2lvblVzZXJzOiAnJywgZWRpdFVzZXJzOiAnJyB9O1xyXG4gIC8qKiBXaGljaCBjaGlwIGJveCBpcyBzaG93aW5nIHN1Z2dlc3Rpb25zLCBhbmQgd2hpY2ggZHJvcGRvd24gaXMgb3Blbi4gKi9cclxuICBvcGVuQ2hpcHM6IENoaXBMaXN0IHwgbnVsbCA9IG51bGw7XHJcbiAgb3BlblNlbGVjdDogU2VsZWN0S2V5IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8qKiBTdG9yZXMgLyB1c2VycyBhbHJlYWR5IGFzc2lnbmVkIHRvIHRoZSBjaGVja2xpc3QuIEF1ZGl0cyBnZXQgdGhlbSBmcm9tIGEgc2NoZWR1bGVcclxuICAgKiAgKE1hbmFnZSDigLogU2NoZWR1bGUgSW5mbyksIHNvIHRoaXMgcGFnZSBvbmx5IHJlYWRzIHRoZSBjb3VudC4gKi9cclxuICBhc3NpZ25lZENvdW50ID0gMDtcclxuICAvKiogUHVibGlzaCB3aXRoIG5vdGhpbmcgYXNzaWduZWQgc2F2ZXMgZmlyc3QsIHRoZW4gb3BlbnMgQ3JlYXRlIHNjaGVkdWxlIGZvciB0aGlzIGF1ZGl0LiAqL1xyXG4gIHByaXZhdGUgc2NoZWR1bGVBZnRlclNhdmUgPSBmYWxzZTtcclxuICAvKiogUHVibGlzaCBzdGF0ZSBiZWZvcmUgdGhlIGN1cnJlbnQgc2F2ZSwgc28gdGhlIHRvYXN0IGNhbiBzYXkgXCJwdWJsaXNoZWRcIiB2cyBcInNhdmVkIGFuZCBwdWJsaXNoZWRcIi4gKi9cclxuICBwcml2YXRlIHdhc1B1Ymxpc2hlZCA9IGZhbHNlO1xyXG5cclxuICByZWFkb25seSB0aHJlc2hvbGRPcHRzOiBTZWxlY3RPcHRpb25bXSA9IFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMF0ubWFwKG4gPT4gKHsgdmFsdWU6IG4sIGxhYmVsOiBTdHJpbmcobikgfSkpO1xyXG4gIHJlYWRvbmx5IHJlZG9EYXlPcHRzOiBTZWxlY3RPcHRpb25bXSA9IFsxLCAyLCAzLCA0LCA1LCA2LCA3LCAxMCwgMTQsIDIxLCAzMF0ubWFwKG4gPT4gKHsgdmFsdWU6IG4sIGxhYmVsOiBTdHJpbmcobikgfSkpO1xyXG4gIHJlYWRvbmx5IHJlc3BEZWxheU9wdHM6IFNlbGVjdE9wdGlvbltdID0gWzAsIDIsIDYsIDEyLCAyNCwgNDhdLm1hcChuID0+ICh7IHZhbHVlOiBuLCBsYWJlbDogbiA9PT0gMCA/ICdJbW1lZGlhdGVseScgOiBuICsgJyBob3VycycgfSkpO1xyXG4gIHJlYWRvbmx5IGRpc3BXaW5kb3dPcHRzOiBTZWxlY3RPcHRpb25bXSA9IFs2LCAxMiwgMjQsIDQ4LCA3MiwgMTY4XS5tYXAobiA9PiAoeyB2YWx1ZTogbiwgbGFiZWw6IG4gPT09IDE2OCA/ICc3IGRheXMnIDogbiArICcgaG91cnMnIH0pKTtcclxuICByZWFkb25seSByZWRvRXh0ZW5zaW9uT3B0czogU2VsZWN0T3B0aW9uW10gPSBbMSwgMiwgMywgNCwgNSwgNiwgN10ubWFwKG4gPT4gKHsgdmFsdWU6IG4sIGxhYmVsOiBTdHJpbmcobikgfSkpO1xyXG5cclxuICAvKiogU3RhcnRzIHRydWUgc28gdGhlIHNldHRpbmdzIHNoaW1tZXIgaW5zdGVhZCBvZiBzaG93aW5nIGRlZmF1bHRzIHRoYXQgdGhlbiBqdW1wLiAqL1xyXG4gIGxvYWRpbmcgPSB0cnVlO1xyXG4gIHNhdmluZyA9IGZhbHNlO1xyXG4gIGxvYWRFcnJvciA9ICcnO1xyXG4gIC8qKiAvYXVkaXQvY29uZmlnL2dldCBmYWlsZWQ6IHNhdmluZyBub3cgd291bGQgb3ZlcndyaXRlIHRoZSBzdG9yZWQgcGFzcyBtYXJrIC8gYWNjZXNzIHNldHRpbmdzIHdpdGggZGVmYXVsdHMuICovXHJcbiAgYXVkaXRTZXR0aW5nc0xvYWRGYWlsZWQgPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBjbGllbnRJZCA9ICcnO1xyXG4gIC8qKiBUaGUgZ2V0Q29uZmlnRGV0YWlscyBwYXlsb2FkLCBzZW50IGJhY2sgd2hvbGUgb24gc2F2ZSAoYXMgdGhlIENoZWNrbGlzdCBDb25maWd1cmUgcGFnZSBkb2VzKS4gKi9cclxuICBwcml2YXRlIGNvbmZpZ0RhdGE6IGFueSA9IG51bGw7XHJcbiAgLyoqIFB1Ymxpc2ggLyBTYXZlIG5lZWQgdGhlIENoZWNrbGlzdCBlZGl0IHBlcm1pc3Npb24gKHRoZSBzYXZlIEFQSXMgY2hlY2sgaXQgdG9vKS4gKi9cclxuICBhY2Nlc3M6IEF1ZGl0QWNjZXNzID0geyBjYW5BZGQ6IGZhbHNlLCBjYW5FZGl0OiBmYWxzZSB9O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdHJheFNlcnZpY2U6IFRyYXhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSB0b2FzdDogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGF1ZGl0QWNjZXNzKHRoaXMuZ3MpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoYWNjZXNzID0+IHtcclxuICAgICAgdGhpcy5hY2Nlc3MgPSBhY2Nlc3M7XHJcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIHRoaXMub25PdXRzaWRlLCB0cnVlKTtcclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCB0aGlzLm9uT3V0c2lkZSwgdHJ1ZSk7XHJcbiAgICB0aGlzLmNoZWNrbGlzdElkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldCgnY2hlY2tsaXN0SWQnKSB8fCAnJztcclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgIGlmICghZGF0YT8uY2xpZW50IHx8IGRhdGEuY2xpZW50ID09PSB0aGlzLmNsaWVudElkKSB7IHJldHVybjsgfVxyXG4gICAgICB0aGlzLmNsaWVudElkID0gZGF0YS5jbGllbnQ7XHJcbiAgICAgIHRoaXMubG9hZCgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgdGhpcy5vbk91dHNpZGUsIHRydWUpO1xyXG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIHRoaXMub25PdXRzaWRlLCB0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEVzY2FwZSBjbG9zZXMgdGhlIG9wZW4gZHJvcGRvd24gLyBzdWdnZXN0aW9uIGxpc3QuICovXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUnKVxyXG4gIG9uRXNjYXBlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5vcGVuU2VsZWN0ID0gbnVsbDtcclxuICAgIHRoaXMub3BlbkNoaXBzID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgcHJlc3Mgb3IgZm9jdXMgb3V0c2lkZSB0aGUgb3BlbiBkcm9wZG93biAvIHN1Z2dlc3Rpb24gbGlzdCBjbG9zZXMgaXQuIExpc3RlbmVkIHRvIGluIHRoZVxyXG4gICAqIGNhcHR1cmUgcGhhc2UsIHNvIG5vIGVsZW1lbnQgdGhhdCBzdG9wcyBjbGljayBwcm9wYWdhdGlvbiBjYW4ga2VlcCBpdCBvcGVuLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgb25PdXRzaWRlID0gKGV2ZW50OiBFdmVudCk6IHZvaWQgPT4ge1xyXG4gICAgaWYgKCF0aGlzLm9wZW5TZWxlY3QgJiYgIXRoaXMub3BlbkNoaXBzKSB7IHJldHVybjsgfVxyXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcclxuICAgIGNvbnN0IGluc2lkZSA9IHRhcmdldCAmJiB0eXBlb2YgdGFyZ2V0LmNsb3Nlc3QgPT09ICdmdW5jdGlvbicgJiYgdGFyZ2V0LmNsb3Nlc3QoJy5jZi1zZWxlY3QuaXMtb3BlbiwgLmNmLWNoaXBib3guaXMtb3BlbicpO1xyXG4gICAgaWYgKGluc2lkZSkgeyByZXR1cm47IH1cclxuICAgIHRoaXMub3BlblNlbGVjdCA9IG51bGw7XHJcbiAgICB0aGlzLm9wZW5DaGlwcyA9IG51bGw7XHJcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICB9O1xyXG5cclxuICAvLyAtLS0tIGxvYWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHByaXZhdGUgbG9hZCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5jaGVja2xpc3RJZCkge1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5sb2FkRXJyb3IgPSAnTm8gYXVkaXQgc2VsZWN0ZWQuIE9wZW4gQ29uZmlndXJlIGZyb20gdGhlIE1hbmFnZSBwYWdlLic7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmxvYWRFcnJvciA9ICcnO1xyXG4gICAgdGhpcy5hdWRpdFNldHRpbmdzTG9hZEZhaWxlZCA9IGZhbHNlO1xyXG4gICAgLy8gQSBmYWlsZWQgY2FsbCByZXNvbHZlcyB0byB7IGZhaWxlZDogZXJyb3IgfSBzbyBlYWNoIHBhcnQgY2FuIHNheSB3aGF0IHdlbnQgd3JvbmcuXHJcbiAgICBjb25zdCBzYWZlID0gKG86IGFueSkgPT4gby5waXBlKGNhdGNoRXJyb3IoKGU6IGFueSkgPT4gb2YoeyBmYWlsZWQ6IGUgfSkpKTtcclxuICAgIGZvcmtKb2luKHtcclxuICAgICAgZGV0YWlsczogc2FmZSh0aGlzLnRyYXhTZXJ2aWNlLmF1ZGl0R2V0Q29uZmlnKHsgY2hlY2tMaXN0SWQ6IHRoaXMuY2hlY2tsaXN0SWQsIGNsaWVudElkOiB0aGlzLmNsaWVudElkIH0pKSxcclxuICAgICAgYXVkaXQ6IHNhZmUodGhpcy50cmF4U2VydmljZS5hdWRpdENvbmZpZ0dldCh7IGNsaWVudElkOiB0aGlzLmNsaWVudElkLCBjaGVja2xpc3RJZDogdGhpcy5jaGVja2xpc3RJZCB9KSksXHJcbiAgICAgIHVzZXJzOiBzYWZlKHRoaXMudHJheFNlcnZpY2UuZ2V0Q2xpZW50VXNlcih0aGlzLmNsaWVudElkKSksXHJcbiAgICAgIGxhYmVsczogc2FmZSh0aGlzLnRyYXhTZXJ2aWNlLmF1ZGl0U2V0dGluZ3NHZXQodGhpcy5jbGllbnRJZCkpXHJcbiAgICB9KS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh7IGRldGFpbHMsIGF1ZGl0LCB1c2VycywgbGFiZWxzIH06IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBjbGllbnRVc2VyczogYW55W10gPSB1c2Vycz8uY29kZSA9PT0gMjAwID8gdXNlcnMuZGF0YSB8fCBbXSA6IFtdO1xyXG4gICAgICAvLyBUaGUgY2xpZW50J3Mgc3VwZXJhZG1pbjogdGhlIGRlZmF1bHQgYXBwcm92ZXIgZm9yIFRhbmdvIHVzZXJzIGFuZCByb2xlICd1c2VyJyAodjEgQ29uZmlndXJlKS5cclxuICAgICAgY29uc3Qgc3VwZXJBZG1pbiA9IGNsaWVudFVzZXJzLmZpbmQoKHU6IGFueSkgPT4gdT8ucm9sZSA9PT0gJ3N1cGVyYWRtaW4nICYmIHU/LmVtYWlsKTtcclxuICAgICAgdGhpcy5zdXBlckFkbWluID0gc3VwZXJBZG1pbiA/IHRoaXMuY2hpcChzdXBlckFkbWluLnVzZXJOYW1lLCBzdXBlckFkbWluLmVtYWlsKSA6IG51bGw7XHJcbiAgICAgIHRoaXMudXNlcnMgPSBjbGllbnRVc2Vyc1xyXG4gICAgICAgIC5tYXAoKHU6IGFueSkgPT4gdGhpcy5jaGlwKHUudXNlck5hbWUsIHUuZW1haWwpKVxyXG4gICAgICAgIC5maWx0ZXIoKHU6IENoaXBVc2VyKSA9PiB1LmUpO1xyXG4gICAgICB0aGlzLnBhc3NMYWJlbCA9IGxhYmVscz8uZGF0YT8ucGFzc0xhYmVsIHx8ICdQYXNzJztcclxuICAgICAgdGhpcy5mYWlsTGFiZWwgPSBsYWJlbHM/LmRhdGE/LmZhaWxMYWJlbCB8fCAnRmFpbCc7XHJcblxyXG4gICAgICBjb25zdCBkID0gZGV0YWlscz8uY29kZSA9PT0gMjAwID8gZGV0YWlscy5kYXRhPy5jaGVja0xpc3REZXRhaWxzIDogbnVsbDtcclxuICAgICAgaWYgKCFkKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgLy8gVGhlIEFQSSBhbnN3ZXJzIDIwNCAobm8gYm9keSkgd2hlbiB0aGUgYXVkaXQgZG9lcyBub3QgZXhpc3Qgb3IgYmVsb25ncyB0byBhbm90aGVyIGNsaWVudC5cclxuICAgICAgICB0aGlzLmxvYWRFcnJvciA9IGRldGFpbHM/LmZhaWxlZFxyXG4gICAgICAgICAgPyB0aGlzLmFwaUVycm9yKGRldGFpbHMuZmFpbGVkLCAnQ291bGQgbm90IGxvYWQgdGhpcyBhdWRpdC4gUmVsb2FkIHRoZSBwYWdlIHRvIHRyeSBhZ2Fpbi4nLCBmYWxzZSlcclxuICAgICAgICAgIDogJ1RoaXMgYXVkaXQgd2FzIG5vdCBmb3VuZC4gSXQgbWF5IGhhdmUgYmVlbiBkZWxldGVkLiBPcGVuIENvbmZpZ3VyZSBhZ2FpbiBmcm9tIHRoZSBNYW5hZ2UgcGFnZS4nO1xyXG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNvbmZpZ0RhdGEgPSBkZXRhaWxzLmRhdGE7XHJcbiAgICAgIHRoaXMuYXBwbHlDaGVja2xpc3QoZCk7XHJcbiAgICAgIHRoaXMuYXBwbHlBc3NpZ25tZW50KGQpO1xyXG4gICAgICB0aGlzLmF1ZGl0U2V0dGluZ3NMb2FkRmFpbGVkID0gYXVkaXQ/LmNvZGUgIT09IDIwMDtcclxuICAgICAgdGhpcy5hcHBseUF1ZGl0KHRoaXMuYXVkaXRTZXR0aW5nc0xvYWRGYWlsZWQgPyBudWxsIDogYXVkaXQuZGF0YT8uY29uZmlnKTtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIGlmICh0aGlzLmF1ZGl0U2V0dGluZ3NMb2FkRmFpbGVkKSB7XHJcbiAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdDb3VsZCBub3QgbG9hZCB0aGUgc2NvcmluZywgZGlzcHV0ZSBhbmQgYWNjZXNzIHNldHRpbmdzIG9mIHRoaXMgYXVkaXQuIFJlbG9hZCB0aGUgcGFnZSBiZWZvcmUgc2F2aW5nLCBzbyB0aGV5IGFyZSBub3QgcmVzZXQuJyk7XHJcbiAgICAgIH0gZWxzZSBpZiAodXNlcnM/LmZhaWxlZCkge1xyXG4gICAgICAgIHRoaXMudG9hc3QuZ2V0V2FybmluZ1RvYXN0KCdDb3VsZCBub3QgbG9hZCB0aGUgdXNlcnMgb2YgdGhpcyBjbGllbnQsIHNvIHRoZSB1c2VyIHBpY2tlcnMgaGF2ZSBubyBzdWdnZXN0aW9ucy4gWW91IGNhbiBzdGlsbCBhZGQgYSB1c2VyIGJ5IHR5cGluZyB0aGVpciBmdWxsIGVtYWlsLicpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKiogZ2V0Q29uZmlnRGV0YWlscyBsaXN0cyB0aGUgYXNzaWdubWVudCBhcyB7IGlkLCB0eXBlIH0gcGFpcnMgKHN0b3JlcyAvIGNsdXN0ZXJzIG9yIHVzZXJzIC8gdGVhbXMpLiAqL1xyXG4gIHByaXZhdGUgYXBwbHlBc3NpZ25tZW50KGQ6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgY291bnQgPSAobGlzdDogYW55KSA9PiAoQXJyYXkuaXNBcnJheShsaXN0KSA/IGxpc3QubGVuZ3RoIDogMCk7XHJcbiAgICB0aGlzLmFzc2lnbmVkQ291bnQgPSBjb3VudChkLnNpbmdsZUFzc2lnbikgKyBjb3VudChkLmdyb3VwQXNzaWduKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlDaGVja2xpc3QoZDogYW55KTogdm9pZCB7XHJcbiAgICAvLyBOZXZlciBjb25maWd1cmVkIHlldDogbm8gc2NoZWR1bGUgd2luZG93IGhhcyBiZWVuIHNhdmVkIChjaGVja2VkIGJlZm9yZSB0aGUgZGVmYXVsdHMgYmVsb3cgZmlsbCBpdCkuXHJcbiAgICBjb25zdCBmaXJzdENvbmZpZ3VyZSA9ICFkLnNjaGVkdWxlU3RhcnRUaW1lO1xyXG4gICAgLy8gQSBuZXcgYXVkaXQgaGFzIG5vIHNjaGVkdWxlIHdpbmRvdywgYW5kIGNoZWNrbGlzdENvbmZpZ3VyZXYxIGNhbm5vdCBzdG9yZSBhbiBlbXB0eSBvbmU7XHJcbiAgICAvLyBzYW1lIGRlZmF1bHRzIHRoZSBDaGVja2xpc3QgQ29uZmlndXJlIHBhZ2UgYXBwbGllcyBvbiBsb2FkLlxyXG4gICAgaWYgKCFkLnNjaGVkdWxlU3RhcnRUaW1lKSB7IGQuc2NoZWR1bGVTdGFydFRpbWUgPSAnMTA6MDAgQU0nOyB9XHJcbiAgICBpZiAoIWQuc2NoZWR1bGVFbmRUaW1lKSB7IGQuc2NoZWR1bGVFbmRUaW1lID0gJzEwOjAwIFBNJzsgfVxyXG4gICAgdGhpcy5hdWRpdE5hbWUgPSBkLmNoZWNrTGlzdE5hbWUgfHwgJ+KAlCc7XHJcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gZC5jaGVja0xpc3REZXNjcmlwdGlvbiB8fCAnJztcclxuICAgIHRoaXMucHVibGlzaGVkID0gISFkLnB1Ymxpc2g7XHJcbiAgICB0aGlzLnNjaGVkdWxlID0gZC5zY2hlZHVsZVJlcGVhdGVkVHlwZSB8fCBkLnNjaGVkdWxlID8gdGhpcy50aXRsZUNhc2UoZC5zY2hlZHVsZVJlcGVhdGVkVHlwZSB8fCBkLnNjaGVkdWxlKSA6ICfigJQnO1xyXG4gICAgdGhpcy5zY2hlZHVsZVdpbmRvdyA9IGQuc2NoZWR1bGVTdGFydFRpbWUgJiYgZC5zY2hlZHVsZUVuZFRpbWUgPyBkLnNjaGVkdWxlU3RhcnRUaW1lICsgJyB0byAnICsgZC5zY2hlZHVsZUVuZFRpbWUgOiAn4oCUJztcclxuICAgIHRoaXMuc2VjdGlvbnMgPSAoZC5zZWN0aW9ucyB8fCBbXSkubWFwKChzZWM6IGFueSwgaTogbnVtYmVyKSA9PiAoe1xyXG4gICAgICBsYWJlbDogc2VjLm5hbWUgfHwgJ1NlY3Rpb24gJyArIChpICsgMSksXHJcbiAgICAgIGl0ZW1zOiAoc2VjLnF1ZXN0aW9ucyB8fCBbXSkubWFwKChxOiBhbnkpID0+IHE/LnFuYW1lIHx8IFN0cmluZyhxKSksXHJcbiAgICAgIG9wZW46IGkgPT09IDBcclxuICAgIH0pKTtcclxuXHJcbiAgICB0aGlzLm93bmVycyA9IHRoaXMuY2hpcHMoZC5vd25lcik7XHJcbiAgICAvLyBObyBvd25lciB5ZXQgKGF1ZGl0cyBjcmVhdGVkIGJlZm9yZSB0aGUgY3JlYXRvciB3YXMgc3RvcmVkIGFzIG9uZSk6IHRoZSBsb2dnZWQtaW4gdXNlciwgc2F2ZWQgd2l0aCB0aGUgcGFnZS5cclxuICAgIGlmICghdGhpcy5vd25lcnMubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IG1lID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlci1pbmZvJykgfHwgJ3t9Jyk7XHJcbiAgICAgIGlmIChtZT8uZW1haWwpIHsgdGhpcy5vd25lcnMgPSBbdGhpcy5jaGlwKG1lLnVzZXJOYW1lLCBtZS5lbWFpbCldOyB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmFwcHJvdmVycyA9IHRoaXMuY2hpcHMoZC5hcHByb3Zlcik7XHJcbiAgICAvLyB2MSBDb25maWd1cmUgZGVmYXVsdCBhcHByb3Zlciwgb24gdGhlIGZpcnN0IENvbmZpZ3VyZSBvbmx5IChsYXRlciBhbiBlbXB0eSBsaXN0IG1lYW5zIEFwcHJvdmVyIHdhcyB0dXJuZWRcclxuICAgIC8vIG9mZiBvbiBwdXJwb3NlKTogVGFuZ28gdXNlcnMgYW5kIGNsaWVudCB1c2VycyB3aXRoIHJvbGUgJ3VzZXInIGdldCB0aGUgY2xpZW50J3Mgc3VwZXJhZG1pbiwgb3RoZXJzIHRoZW1zZWx2ZXMuXHJcbiAgICBpZiAoZmlyc3RDb25maWd1cmUgJiYgIXRoaXMuYXBwcm92ZXJzLmxlbmd0aCkge1xyXG4gICAgICBjb25zdCBtZSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXItaW5mbycpIHx8ICd7fScpO1xyXG4gICAgICBjb25zdCB0b1N1cGVyQWRtaW4gPSBtZT8udXNlclR5cGUgPT09ICd0YW5nbycgfHwgKG1lPy51c2VyVHlwZSA9PT0gJ2NsaWVudCcgJiYgbWU/LnJvbGUgPT09ICd1c2VyJyk7XHJcbiAgICAgIGNvbnN0IGZhbGxiYWNrID0gdG9TdXBlckFkbWluID8gdGhpcy5zdXBlckFkbWluIDogKG1lPy5lbWFpbCA/IHRoaXMuY2hpcChtZS51c2VyTmFtZSwgbWUuZW1haWwpIDogbnVsbCk7XHJcbiAgICAgIGlmIChmYWxsYmFjaykgeyB0aGlzLmFwcHJvdmVycyA9IFtmYWxsYmFja107IH1cclxuICAgIH1cclxuICAgIHRoaXMuYXBwcm92ZXJPbiA9IHRoaXMuYXBwcm92ZXJzLmxlbmd0aCA+IDA7XHJcbiAgICAvLyBTdG9yZWQgYXMgbWludXRlcyAobnVtYmVycyk7IGtlZXAgdGhlIGtub3duIGludGVydmFscywgdW5pcXVlLCBhdCBtb3N0IHRocmVlLlxyXG4gICAgY29uc3Qgc3RvcmVkOiBudW1iZXJbXSA9IChBcnJheS5pc0FycmF5KGQucmVtYWluZGVyKSA/IGQucmVtYWluZGVyIDogW10pLm1hcCgobTogYW55KSA9PiBOdW1iZXIobSkpO1xyXG4gICAgdGhpcy5yZW1pbmRlcnMgPSBzdG9yZWQuZmlsdGVyKChtLCBpKSA9PiBSRU1JTkRFUl9NSU5VVEVTLmluY2x1ZGVzKG0pICYmIHN0b3JlZC5pbmRleE9mKG0pID09PSBpKS5zbGljZSgwLCBNQVhfUkVNSU5ERVJTKTtcclxuICAgIHRoaXMucmVtaW5kZXJPbiA9IHRoaXMucmVtaW5kZXJzLmxlbmd0aCA+IDA7XHJcbiAgICB0aGlzLnJlZnJlc2hSZW1pbmRlck9wdHMoKTtcclxuXHJcbiAgICBjb25zdCBuZiA9IGQubm90aWZ5RmxhZ3MgfHwge307XHJcbiAgICBjb25zdCBuZlR5cGVzOiBzdHJpbmdbXSA9IEFycmF5LmlzQXJyYXkobmYubm90aWZ5VHlwZSkgPyBuZi5ub3RpZnlUeXBlIDogW107XHJcbiAgICB0aGlzLm5vdGlmeUZsYWdzT24gPSBuZlR5cGVzLmxlbmd0aCA+IDA7XHJcbiAgICB0aGlzLm5vdGlmeVNlbmRBcHByb3ZlciA9IG5mVHlwZXMuaW5jbHVkZXMoJ2FwcHJvdmVyJykgfHwgIXRoaXMubm90aWZ5RmxhZ3NPbjtcclxuICAgIHRoaXMubm90aWZ5U2VuZEN1c3RvbSA9IG5mVHlwZXMuaW5jbHVkZXMoJ2N1c3RvbScpO1xyXG4gICAgdGhpcy5ub3RpZnlVc2VycyA9IHRoaXMuY2hpcHMobmYudXNlcnMpO1xyXG5cclxuICAgIGNvbnN0IHJmID0gZC5yZWN1cnJpbmdGbGFnIHx8IHt9O1xyXG4gICAgY29uc3QgcmZUeXBlczogc3RyaW5nW10gPSBBcnJheS5pc0FycmF5KHJmLm5vdGlmeVR5cGUpID8gcmYubm90aWZ5VHlwZSA6IFtdO1xyXG4gICAgdGhpcy5yZWN1cnJpbmdGbGFnc09uID0gcmZUeXBlcy5sZW5ndGggPiAwO1xyXG4gICAgdGhpcy5yZWN1cnJpbmdTZW5kQXBwcm92ZXIgPSByZlR5cGVzLmluY2x1ZGVzKCdhcHByb3ZlcicpIHx8ICF0aGlzLnJlY3VycmluZ0ZsYWdzT247XHJcbiAgICB0aGlzLnJlY3VycmluZ1NlbmRDdXN0b20gPSByZlR5cGVzLmluY2x1ZGVzKCdjdXN0b20nKTtcclxuICAgIHRoaXMucmVjdXJyaW5nU2FtZUFzTm90aWZ5ID0gcmZUeXBlcy5pbmNsdWRlcygnc2FtZUFzTm90aWZ5Jyk7XHJcbiAgICB0aGlzLnJlY3VycmluZ1VzZXJzID0gdGhpcy5jaGlwcyhyZi51c2Vycyk7XHJcbiAgICB0aGlzLnJlY3VycmluZ1RocmVzaG9sZCA9IE51bWJlcihyZi50aHJlc2hvbGQpIHx8IDM7XHJcblxyXG4gICAgY29uc3QgYWUgPSBkLmF1dG9FbWFpbCB8fCB7fTtcclxuICAgIGNvbnN0IGFlVHlwZXM6IHN0cmluZ1tdID0gQXJyYXkuaXNBcnJheShhZS50eXBlKSA/IGFlLnR5cGUgOiBbXTtcclxuICAgIHRoaXMuZGFpbHlSZXBvcnRPbiA9IGFlVHlwZXMubGVuZ3RoID4gMDtcclxuICAgIHRoaXMuZGFpbHlTZW5kQXBwcm92ZXIgPSBhZVR5cGVzLmluY2x1ZGVzKCdhcHByb3ZlcicpIHx8ICF0aGlzLmRhaWx5UmVwb3J0T247XHJcbiAgICB0aGlzLmRhaWx5U2VuZEN1c3RvbSA9IGFlVHlwZXMuaW5jbHVkZXMoJ2N1c3RvbScpO1xyXG4gICAgdGhpcy5kYWlseVVzZXJzID0gdGhpcy5jaGlwcyhhZS51c2Vycyk7XHJcbiAgICB0aGlzLnNoYXJlUG9zdEFwcHJvdmFsID0gISFkLnNoYXJlUmVwb3J0UG9zdEFwcHJvdmFsO1xyXG5cclxuICAgIHRoaXMuZXhwb3J0U3VibWlzc2lvbk9uID0gISFkLmV4cG9ydDtcclxuICAgIHRoaXMucmVkb1ZhbGlkRm9yID0gTnVtYmVyKGQucmVkb1ZhbGlkaXR5KSB8fCA3O1xyXG4gICAgdGhpcy5hdXRvQ3JlYXRlVGFza09uID0gISFkLmF1dG9DcmVhdGVUYXNrO1xyXG4gICAgLy8gRGVmYXVsdHMgbGlrZSB0aGUgQ2hlY2tsaXN0IENvbmZpZ3VyZSBwYWdlOyB3aXRob3V0IGFuIGFzc2lnbmVlIHRoZSBhcHByb3ZhbCByYWlzZXMgbm8gdGFzay5cclxuICAgIHRoaXMudGFza0Fzc2lnbmVlID0gZC50YXNrQXNzaWduZWUgPT09ICdzdG9yZScgfHwgZC50YXNrQXNzaWduZWUgPT09ICdzdG9yZXVzZXInID8gJ3N0b3JlJyA6ICdzdWJtaXR0ZXInO1xyXG4gICAgdGhpcy50YXNrVmFsaWRpdHkgPSBOdW1iZXIoZC50YXNrVmFsaWRpdHkpIHx8IDEwO1xyXG4gICAgdGhpcy5zaG93UmVzcG9uc2VJbkFwcCA9IGQuc2hvd0FwcHJvdmVkUmVzcG9uc2UgIT09IGZhbHNlO1xyXG4gICAgdGhpcy5yZXNwb25zZVZpc2liaWxpdHkgPSBkLnJlc3BvbnNlVmlzaWJpbGl0eSA9PT0gJ3ByZUFwcHJvdmFsJyA/ICdwcmUnIDogJ3Bvc3QnO1xyXG4gICAgdGhpcy5yZXNwRGVsYXkgPSBkLnJlc3BvbnNlVmlzaWJpbGl0eUhvdXJzID8/IDI7XHJcbiAgICB0aGlzLnJlcXVpcmVQaG90byA9ICEhZC51c2VyVmVyaWZpY2F0aW9uPy5yZXF1aXJlUGhvdG9DYXB0dXJlO1xyXG4gICAgdGhpcy5yZXF1aXJlQWNrbm93bGVkZ21lbnQgPSAhIWQudXNlclZlcmlmaWNhdGlvbj8ucmVxdWlyZVVzZXJBY2tub3dsZWRnbWVudDtcclxuICAgIHRoaXMucmVkb0V4dGVuc2lvbiA9IE51bWJlcihkLnJlZG9FeHRlbnNpb24pIHx8IDE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5QXVkaXQoY2ZnOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IHMgPSBjZmc/LnNldHRpbmdzIHx8IHt9O1xyXG4gICAgdGhpcy5wYXNzVGhyZXNob2xkID0gTnVtYmVyKGNmZz8ucGFzc01hcmspIHx8IDc1O1xyXG4gICAgdGhpcy5wYXNzRmFpbE9uID0gcy5wYXNzRmFpbE9uICE9PSBmYWxzZTtcclxuICAgIHRoaXMuZGlzcHV0ZU9uID0gcy5kaXNwdXRlT24gIT09IGZhbHNlO1xyXG4gICAgdGhpcy5kaXNwdXRlV2luZG93ID0gTnVtYmVyKHMuZGlzcHV0ZVdpbmRvdykgfHwgNDg7XHJcbiAgICB0aGlzLnByZVN1Ym1pc3Npb25BY2Nlc3NPbiA9ICEhcy5wcmVTdWJtaXNzaW9uQWNjZXNzT247XHJcbiAgICB0aGlzLnByZVN1Ym1pc3Npb25Vc2VycyA9IHRoaXMuY2hpcHMocy5wcmVTdWJtaXNzaW9uVXNlcnMpO1xyXG4gICAgdGhpcy5lZGl0U3VibWl0dGVkT24gPSAhIXMuZWRpdFN1Ym1pdHRlZE9uO1xyXG4gICAgdGhpcy5lZGl0VXNlcnMgPSB0aGlzLmNoaXBzKHMuZWRpdFVzZXJzKTtcclxuICB9XHJcblxyXG4gIC8qKiBBY2NlcHRzIGJvdGggdGhlIGNoZWNrbGlzdCBzaGFwZSB7IG5hbWUsIHZhbHVlIH0gYW5kIHRoZSBhdWRpdCBzaGFwZSB7IG4sIGUgfS4gKi9cclxuICBwcml2YXRlIGNoaXBzKGxpc3Q6IGFueSk6IENoaXBVc2VyW10ge1xyXG4gICAgcmV0dXJuIChBcnJheS5pc0FycmF5KGxpc3QpID8gbGlzdCA6IFtdKVxyXG4gICAgICAubWFwKCh1OiBhbnkpID0+IHRoaXMuY2hpcCh1Py5uYW1lID8/IHU/Lm4sIHU/LnZhbHVlID8/IHU/LmUgPz8gdT8uZW1haWwpKVxyXG4gICAgICAuZmlsdGVyKCh1OiBDaGlwVXNlcikgPT4gdS5lIHx8IHUubik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoaXAobmFtZTogc3RyaW5nLCBlbWFpbDogc3RyaW5nKTogQ2hpcFVzZXIge1xyXG4gICAgY29uc3QgbiA9IFN0cmluZyhuYW1lIHx8IGVtYWlsIHx8ICcnKS50cmltKCk7XHJcbiAgICBjb25zdCBwYXJ0cyA9IG4uc3BsaXQoL1xccysvKTtcclxuICAgIGNvbnN0IGkgPSAoKHBhcnRzWzBdPy5bMF0gfHwgJycpICsgKHBhcnRzWzFdPy5bMF0gfHwgcGFydHNbMF0/LlsxXSB8fCAnJykpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICByZXR1cm4geyBpLCBuLCBlOiBTdHJpbmcoZW1haWwgfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRpdGxlQ2FzZSh2OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHYgPyB2LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdi5zbGljZSgxKSA6IHY7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVTZWN0aW9uKHNlY3Rpb246IENvbmZpZ1NlY3Rpb24pOiB2b2lkIHtcclxuICAgIHNlY3Rpb24ub3BlbiA9ICFzZWN0aW9uLm9wZW47XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tIHJlbWluZGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAvKiogVHVybmluZyBSZW1pbmRlciBvbiBzdGFydHMgd2l0aCBvbmUgMzAtbWludXRlIHJlbWluZGVyLCBhcyB0aGUgQ2hlY2tsaXN0IENvbmZpZ3VyZSBwYWdlIGRvZXMuICovXHJcbiAgdG9nZ2xlUmVtaW5kZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlbWluZGVyT24gPSAhdGhpcy5yZW1pbmRlck9uO1xyXG4gICAgaWYgKHRoaXMucmVtaW5kZXJPbiAmJiAhdGhpcy5yZW1pbmRlcnMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMucmVtaW5kZXJzID0gW1JFTUlOREVSX01JTlVURVNbMF1dO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZWZyZXNoUmVtaW5kZXJPcHRzKCk7XHJcbiAgfVxyXG5cclxuICBzZXRSZW1pbmRlcihpbmRleDogbnVtYmVyLCB2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBtaW51dGVzID0gTnVtYmVyKHZhbHVlKTtcclxuICAgIGlmICghUkVNSU5ERVJfTUlOVVRFUy5pbmNsdWRlcyhtaW51dGVzKSkgeyByZXR1cm47IH1cclxuICAgIHRoaXMucmVtaW5kZXJzID0gdGhpcy5yZW1pbmRlcnMubWFwKChtLCBpKSA9PiAoaSA9PT0gaW5kZXggPyBtaW51dGVzIDogbSkpO1xyXG4gICAgdGhpcy5yZWZyZXNoUmVtaW5kZXJPcHRzKCk7XHJcbiAgfVxyXG5cclxuICAvKiogQWRkcyB0aGUgZmlyc3QgaW50ZXJ2YWwgbm90IHVzZWQgeWV0LiAqL1xyXG4gIGFkZFJlbWluZGVyKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbmV4dCA9IFJFTUlOREVSX01JTlVURVMuZmluZChtID0+ICF0aGlzLnJlbWluZGVycy5pbmNsdWRlcyhtKSk7XHJcbiAgICBpZiAobmV4dCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMucmVtaW5kZXJzLmxlbmd0aCA+PSBNQVhfUkVNSU5ERVJTKSB7IHJldHVybjsgfVxyXG4gICAgdGhpcy5yZW1pbmRlcnMgPSBbLi4udGhpcy5yZW1pbmRlcnMsIG5leHRdO1xyXG4gICAgdGhpcy5yZWZyZXNoUmVtaW5kZXJPcHRzKCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVSZW1pbmRlcihpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5yZW1pbmRlcnMubGVuZ3RoIDw9IDEpIHsgcmV0dXJuOyB9XHJcbiAgICB0aGlzLnJlbWluZGVycyA9IHRoaXMucmVtaW5kZXJzLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpO1xyXG4gICAgdGhpcy5yZWZyZXNoUmVtaW5kZXJPcHRzKCk7XHJcbiAgfVxyXG5cclxuICAvKiogXCIzMCwgNDUgYW5kIDYwIG1pbnNcIiBmb3IgdGhlIHN1bW1hcnkgbGluZS4gKi9cclxuICBnZXQgcmVtaW5kZXJTdW1tYXJ5KCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBsaXN0ID0gWy4uLnRoaXMucmVtaW5kZXJzXS5zb3J0KChhLCBiKSA9PiBhIC0gYikubWFwKFN0cmluZyk7XHJcbiAgICByZXR1cm4gbGlzdC5sZW5ndGggPiAxID8gbGlzdC5zbGljZSgwLCAtMSkuam9pbignLCAnKSArICcgYW5kICcgKyBsaXN0W2xpc3QubGVuZ3RoIC0gMV0gOiAobGlzdFswXSB8fCAnJyk7XHJcbiAgfVxyXG5cclxuICAvKiogRWFjaCByb3cgb2ZmZXJzIGl0cyBvd24gdmFsdWUgcGx1cyBldmVyeSBpbnRlcnZhbCBubyBvdGhlciByb3cgdXNlcyAocmVidWlsdCBvbmx5IG9uIGNoYW5nZSkuICovXHJcbiAgcHJpdmF0ZSByZWZyZXNoUmVtaW5kZXJPcHRzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZW1pbmRlck9wdHMgPSB0aGlzLnJlbWluZGVycy5tYXAoKG93biwgaW5kZXgpID0+IFJFTUlOREVSX01JTlVURVNcclxuICAgICAgLmZpbHRlcihtID0+IG0gPT09IG93biB8fCAhdGhpcy5yZW1pbmRlcnMuc29tZSgob3RoZXIsIGkpID0+IGkgIT09IGluZGV4ICYmIG90aGVyID09PSBtKSlcclxuICAgICAgLm1hcChtID0+ICh7IHZhbHVlOiBtLCBsYWJlbDogbSArICcgbWlucycgfSkpKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0gYXBwcm92ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qKiBBcHByb3ZlciBpcyBvbiBhbmQgaGFzIGF0IGxlYXN0IG9uZSB1c2VyOiB0aGUgb25seSBzdGF0ZSBpbiB3aGljaCBhbnl0aGluZyBjYW4gZ28gXCJ0byB0aGUgYXBwcm92ZXJcIi4gKi9cclxuICBnZXQgaGFzQXBwcm92ZXJzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYXBwcm92ZXJPbiAmJiB0aGlzLmFwcHJvdmVycy5sZW5ndGggPiAwO1xyXG4gIH1cclxuXHJcbiAgLyoqIFdoeSBcImFwcHJvdmVyXCIgY2Fubm90IGJlIHVzZWQgcmlnaHQgbm93ICgnJyB3aGVuIGl0IGNhbikuICovXHJcbiAgcHJpdmF0ZSBnZXQgYXBwcm92ZXJNaXNzaW5nVGV4dCgpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLmFwcHJvdmVyT24pIHsgcmV0dXJuICdBcHByb3ZlciBpcyB0dXJuZWQgb2ZmLiBUdXJuIG9uIEFwcHJvdmVyIGFuZCBhZGQgYXQgbGVhc3Qgb25lIGFwcHJvdmVyIGZpcnN0Lic7IH1cclxuICAgIGlmICghdGhpcy5hcHByb3ZlcnMubGVuZ3RoKSB7IHJldHVybiAnTm8gYXBwcm92ZXIgaGFzIGJlZW4gYWRkZWQgeWV0LiBBZGQgYXQgbGVhc3Qgb25lIGFwcHJvdmVyIHVuZGVyIEFwcHJvdmVyIGZpcnN0Lic7IH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIC8qKiBTaG93biB1bmRlciB0aGUgYXBwcm92ZXIgcGlja2VyIHdoaWxlIGl0IGlzIG9uIGJ1dCBlbXB0eSAoU2F2ZSBhcyBEcmFmdCBzdGlsbCB3b3JrczsgUHVibGlzaCBkb2VzIG5vdCkuICovXHJcbiAgZ2V0IGFwcHJvdmVyRXJyb3IoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmFwcHJvdmVyT24gJiYgIXRoaXMuYXBwcm92ZXJzLmxlbmd0aCA/ICdBZGQgYXQgbGVhc3Qgb25lIGFwcHJvdmVyLCBvciB0dXJuIEFwcHJvdmVyIG9mZiB0byBwdWJsaXNoIHdpdGhvdXQgYXBwcm92YWwuJyA6ICcnO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRoZSBwYXJ0cyBvZiB0aGUgcGFnZSB0aGF0IHNlbmQgdG8gLyByZWx5IG9uIHRoZSBhcHByb3ZlcnMgYW5kIGFyZSBzd2l0Y2hlZCBvbiBub3cuICovXHJcbiAgcHJpdmF0ZSBnZXQgYXBwcm92ZXJEZXBlbmRlbnRzKCk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IGxpc3Q6IHN0cmluZ1tdID0gW107XHJcbiAgICBpZiAodGhpcy5ub3RpZnlGbGFnc09uICYmIHRoaXMubm90aWZ5U2VuZEFwcHJvdmVyKSB7IGxpc3QucHVzaCgnTm90aWZ5IEZsYWdzJyk7IH1cclxuICAgIGlmICh0aGlzLnJlY3VycmluZ0ZsYWdzT24gJiYgdGhpcy5yZWN1cnJpbmdTZW5kQXBwcm92ZXIpIHsgbGlzdC5wdXNoKCdOb3RpZnkgb24gUmVjdXJyaW5nIEZsYWdzJyk7IH1cclxuICAgIGlmICh0aGlzLmRhaWx5UmVwb3J0T24gJiYgdGhpcy5kYWlseVNlbmRBcHByb3ZlcikgeyBsaXN0LnB1c2goJ0RhaWx5IFJlcG9ydCcpOyB9XHJcbiAgICBpZiAodGhpcy5lZGl0U3VibWl0dGVkT24pIHsgbGlzdC5wdXNoKCdFZGl0IFN1Ym1pdHRlZCBBdWRpdCcpOyB9XHJcbiAgICByZXR1cm4gbGlzdDtcclxuICB9XHJcblxyXG4gIC8qKiBUdXJuaW5nIEFwcHJvdmVyIG9mZiB3YXJucyBhYm91dCBldmVyeSBzZXR0aW5nIHRoYXQgc3RpbGwgc2VuZHMgdG8gLyByZWxpZXMgb24gdGhlIGFwcHJvdmVycy4gKi9cclxuICB0b2dnbGVBcHByb3ZlcigpOiB2b2lkIHtcclxuICAgIHRoaXMuYXBwcm92ZXJPbiA9ICF0aGlzLmFwcHJvdmVyT247XHJcbiAgICBjb25zdCBkZXBlbmRlbnRzID0gdGhpcy5hcHByb3ZlckRlcGVuZGVudHM7XHJcbiAgICBpZiAoIXRoaXMuYXBwcm92ZXJPbiAmJiBkZXBlbmRlbnRzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnRvYXN0LmdldFdhcm5pbmdUb2FzdCgnQXBwcm92ZXIgaXMgdHVybmVkIG9mZiwgYnV0ICcgKyBkZXBlbmRlbnRzLmpvaW4oJywgJykgKyAnIHN0aWxsIHVzZSB0aGUgYXBwcm92ZXJzLiBUdXJuIEFwcHJvdmVyIGJhY2sgb24gb3IgY2hhbmdlIHRob3NlIHNldHRpbmdzIGJlZm9yZSBzYXZpbmcuJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogU2VuZCBUbyA+IEFwcHJvdmVyIGNhbiBvbmx5IGJlIHRpY2tlZCB3aGVuIHRoZXJlIGlzIGFuIGFwcHJvdmVyIHRvIHNlbmQgdG8uICovXHJcbiAgdG9nZ2xlU2VuZEFwcHJvdmVyKGtleTogU2VuZEFwcHJvdmVyS2V5KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXNba2V5XSAmJiAhdGhpcy5oYXNBcHByb3ZlcnMpIHtcclxuICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KHRoaXMuYXBwcm92ZXJNaXNzaW5nVGV4dCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXNba2V5XSA9ICF0aGlzW2tleV07XHJcbiAgfVxyXG5cclxuICAvKiogU3dpdGNoaW5nIGEgZmxhZyAvIHJlcG9ydCBlbWFpbCBvbiB0aWNrcyBBcHByb3ZlciBvbmx5IHdoZW4gdGhlcmUgaXMgYW4gYXBwcm92ZXIgdG8gc2VuZCB0by4gKi9cclxuICB0b2dnbGVOb3RpZnlGbGFncygpOiB2b2lkIHtcclxuICAgIHRoaXMubm90aWZ5RmxhZ3NPbiA9ICF0aGlzLm5vdGlmeUZsYWdzT247XHJcbiAgICBpZiAodGhpcy5ub3RpZnlGbGFnc09uICYmICF0aGlzLmhhc0FwcHJvdmVycykgeyB0aGlzLm5vdGlmeVNlbmRBcHByb3ZlciA9IGZhbHNlOyB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVSZWN1cnJpbmdGbGFncygpOiB2b2lkIHtcclxuICAgIHRoaXMucmVjdXJyaW5nRmxhZ3NPbiA9ICF0aGlzLnJlY3VycmluZ0ZsYWdzT247XHJcbiAgICBpZiAodGhpcy5yZWN1cnJpbmdGbGFnc09uICYmICF0aGlzLmhhc0FwcHJvdmVycykgeyB0aGlzLnJlY3VycmluZ1NlbmRBcHByb3ZlciA9IGZhbHNlOyB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVEYWlseVJlcG9ydCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGFpbHlSZXBvcnRPbiA9ICF0aGlzLmRhaWx5UmVwb3J0T247XHJcbiAgICBpZiAodGhpcy5kYWlseVJlcG9ydE9uICYmICF0aGlzLmhhc0FwcHJvdmVycykgeyB0aGlzLmRhaWx5U2VuZEFwcHJvdmVyID0gZmFsc2U7IH1cclxuICB9XHJcblxyXG4gIC8qKiBFZGl0IFN1Ym1pdHRlZCBBdWRpdCBsZXRzIGFwcHJvdmVycyBjaGFuZ2Ugc3VibWlzc2lvbnMgYmVmb3JlIGFwcHJvdmluZywgc28gaXQgbmVlZHMgYXBwcm92ZXJzLiAqL1xyXG4gIHRvZ2dsZUVkaXRTdWJtaXR0ZWQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZWRpdFN1Ym1pdHRlZE9uICYmICF0aGlzLmhhc0FwcHJvdmVycykge1xyXG4gICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ0VkaXQgU3VibWl0dGVkIEF1ZGl0IGlzIGZvciBhcHByb3ZlcnMuICcgKyB0aGlzLmFwcHJvdmVyTWlzc2luZ1RleHQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmVkaXRTdWJtaXR0ZWRPbiA9ICF0aGlzLmVkaXRTdWJtaXR0ZWRPbjtcclxuICB9XHJcblxyXG4gIGdldCBlZGl0U3VibWl0dGVkRXJyb3IoKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5lZGl0U3VibWl0dGVkT24pIHsgcmV0dXJuICcnOyB9XHJcbiAgICBpZiAoIXRoaXMuaGFzQXBwcm92ZXJzKSB7IHJldHVybiAnRWRpdCBTdWJtaXR0ZWQgQXVkaXQgaXMgZm9yIGFwcHJvdmVycy4gJyArIHRoaXMuYXBwcm92ZXJNaXNzaW5nVGV4dCArICcgT3IgdHVybiBFZGl0IFN1Ym1pdHRlZCBBdWRpdCBvZmYuJzsgfVxyXG4gICAgaWYgKCF0aGlzLmVkaXRVc2Vycy5sZW5ndGgpIHsgcmV0dXJuICdBZGQgYXQgbGVhc3Qgb25lIHVzZXIgd2hvIGNhbiBlZGl0IHN1Ym1pdHRlZCBhdWRpdHMnOyB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tIG5vdGlmeSAvIHJlY3VycmluZyBmbGFnIHJlY2lwaWVudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qKlxyXG4gICAqIFRpY2tpbmcgQ3VzdG9tIHVuZGVyIFJlY3VycmluZyBGbGFncyBzdGFydHMgaXRzIHVzZXIgbGlzdCBmcm9tIHRoZSBOb3RpZnkgRmxhZ3MgY3VzdG9tIHVzZXJzLFxyXG4gICAqIHNvIHRoZSBzYW1lIHBlb3BsZSBhcmUgdXNlZCBieSBkZWZhdWx0OyB0aGUgbGlzdCBzdGF5cyBlZGl0YWJsZS5cclxuICAgKi9cclxuICB0b2dnbGVSZWN1cnJpbmdDdXN0b20oKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlY3VycmluZ1NlbmRDdXN0b20gPSAhdGhpcy5yZWN1cnJpbmdTZW5kQ3VzdG9tO1xyXG4gICAgaWYgKHRoaXMucmVjdXJyaW5nU2VuZEN1c3RvbSAmJiAhdGhpcy5yZWN1cnJpbmdVc2Vycy5sZW5ndGggJiYgdGhpcy5ub3RpZnlGbGFnc09uICYmIHRoaXMubm90aWZ5U2VuZEN1c3RvbSkge1xyXG4gICAgICB0aGlzLnJlY3VycmluZ1VzZXJzID0gWy4uLnRoaXMubm90aWZ5VXNlcnNdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIFdobyBcIlVzZSBzYW1lIHVzZXJzIGZyb20gTm90aWZ5IEZsYWdzXCIgcmVzb2x2ZXMgdG8gKHNob3duIHJlYWQtb25seSB1bmRlciB0aGUgb3B0aW9uKS4gKi9cclxuICBnZXQgbm90aWZ5UmVjaXBpZW50c0xhYmVsKCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRoaXMubm90aWZ5RmxhZ3NPbikgeyByZXR1cm4gJ05vdGlmeSBGbGFncyBpcyBvZmYsIHNvIG5vIG9uZSBpcyBhZGRlZCBmcm9tIGl0JzsgfVxyXG4gICAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XHJcbiAgICBpZiAodGhpcy5ub3RpZnlTZW5kQXBwcm92ZXIpIHsgcGFydHMucHVzaCh0aGlzLmFwcHJvdmVycy5sZW5ndGggPyAndGhlIGFwcHJvdmVycycgOiAndGhlIGFwcHJvdmVycyAobm9uZSBzZXQpJyk7IH1cclxuICAgIGlmICh0aGlzLm5vdGlmeVNlbmRDdXN0b20gJiYgdGhpcy5ub3RpZnlVc2Vycy5sZW5ndGgpIHsgcGFydHMucHVzaCh0aGlzLm5vdGlmeVVzZXJzLm1hcCh1ID0+IHUubikuam9pbignLCAnKSk7IH1cclxuICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPyAnQWxzbyBzZW5kcyB0byAnICsgcGFydHMuam9pbignIGFuZCAnKSA6ICdOb3RpZnkgRmxhZ3MgaGFzIG5vIHJlY2lwaWVudHMgeWV0JztcclxuICB9XHJcblxyXG4gIGdldCBub3RpZnlGbGFnc0Vycm9yKCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRoaXMubm90aWZ5RmxhZ3NPbikgeyByZXR1cm4gJyc7IH1cclxuICAgIGlmICghdGhpcy5ub3RpZnlTZW5kQXBwcm92ZXIgJiYgIXRoaXMubm90aWZ5U2VuZEN1c3RvbSkgeyByZXR1cm4gJ0Nob29zZSB3aG8gcmVjZWl2ZXMgdGhlIGZsYWcgZW1haWxzJzsgfVxyXG4gICAgaWYgKHRoaXMubm90aWZ5U2VuZEFwcHJvdmVyICYmICF0aGlzLmhhc0FwcHJvdmVycykgeyByZXR1cm4gJ05vdGlmeSBGbGFncyBzZW5kcyB0byB0aGUgYXBwcm92ZXIuICcgKyB0aGlzLmFwcHJvdmVyTWlzc2luZ1RleHQgKyAnIE9yIHVudGljayBBcHByb3ZlciBoZXJlLic7IH1cclxuICAgIGlmICh0aGlzLm5vdGlmeVNlbmRDdXN0b20gJiYgIXRoaXMubm90aWZ5VXNlcnMubGVuZ3RoKSB7IHJldHVybiAnQWRkIGF0IGxlYXN0IG9uZSBjdXN0b20gdXNlciBmb3IgTm90aWZ5IEZsYWdzJzsgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHJlY3VycmluZ0ZsYWdzRXJyb3IoKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5yZWN1cnJpbmdGbGFnc09uKSB7IHJldHVybiAnJzsgfVxyXG4gICAgaWYgKCF0aGlzLnJlY3VycmluZ1NlbmRBcHByb3ZlciAmJiAhdGhpcy5yZWN1cnJpbmdTZW5kQ3VzdG9tICYmICF0aGlzLnJlY3VycmluZ1NhbWVBc05vdGlmeSkgeyByZXR1cm4gJ0Nob29zZSB3aG8gcmVjZWl2ZXMgdGhlIHJlY3VycmluZyBmbGFnIGVtYWlscyc7IH1cclxuICAgIGlmICh0aGlzLnJlY3VycmluZ1NlbmRBcHByb3ZlciAmJiAhdGhpcy5oYXNBcHByb3ZlcnMpIHsgcmV0dXJuICdSZWN1cnJpbmcgRmxhZ3Mgc2VuZHMgdG8gdGhlIGFwcHJvdmVyLiAnICsgdGhpcy5hcHByb3Zlck1pc3NpbmdUZXh0ICsgJyBPciB1bnRpY2sgQXBwcm92ZXIgaGVyZS4nOyB9XHJcbiAgICBpZiAodGhpcy5yZWN1cnJpbmdTZW5kQ3VzdG9tICYmICF0aGlzLnJlY3VycmluZ1VzZXJzLmxlbmd0aCkgeyByZXR1cm4gJ0FkZCBhdCBsZWFzdCBvbmUgY3VzdG9tIHVzZXIgZm9yIFJlY3VycmluZyBGbGFncyc7IH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIGdldCBkYWlseVJlcG9ydEVycm9yKCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRoaXMuZGFpbHlSZXBvcnRPbikgeyByZXR1cm4gJyc7IH1cclxuICAgIGlmICghdGhpcy5kYWlseVNlbmRBcHByb3ZlciAmJiAhdGhpcy5kYWlseVNlbmRDdXN0b20pIHsgcmV0dXJuICdDaG9vc2Ugd2hvIHJlY2VpdmVzIHRoZSBkYWlseSByZXBvcnQnOyB9XHJcbiAgICBpZiAodGhpcy5kYWlseVNlbmRBcHByb3ZlciAmJiAhdGhpcy5oYXNBcHByb3ZlcnMpIHsgcmV0dXJuICdUaGUgZGFpbHkgcmVwb3J0IGlzIHNlbnQgdG8gdGhlIGFwcHJvdmVyLiAnICsgdGhpcy5hcHByb3Zlck1pc3NpbmdUZXh0ICsgJyBPciB1bnRpY2sgQXBwcm92ZXIgaGVyZS4nOyB9XHJcbiAgICBpZiAodGhpcy5kYWlseVNlbmRDdXN0b20gJiYgIXRoaXMuZGFpbHlVc2Vycy5sZW5ndGgpIHsgcmV0dXJuICdBZGQgYXQgbGVhc3Qgb25lIGN1c3RvbSB1c2VyIGZvciB0aGUgZGFpbHkgcmVwb3J0JzsgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLSBkcm9wZG93bnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdG9nZ2xlU2VsZWN0KGtleTogU2VsZWN0S2V5LCBldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5vcGVuU2VsZWN0ID0gdGhpcy5vcGVuU2VsZWN0ID09PSBrZXkgPyBudWxsIDoga2V5O1xyXG4gICAgdGhpcy5vcGVuQ2hpcHMgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgcGljayhrZXk6IFNlbGVjdEtleSwgb3B0aW9uOiBTZWxlY3RPcHRpb24sIGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzW2tleV0gPSBvcHRpb24udmFsdWU7XHJcbiAgICB0aGlzLm9wZW5TZWxlY3QgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0TGFiZWwoa2V5OiBTZWxlY3RLZXksIG9wdGlvbnM6IFNlbGVjdE9wdGlvbltdKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHZhbHVlID0gdGhpc1trZXldO1xyXG4gICAgcmV0dXJuIG9wdGlvbnMuZmluZChvID0+IG8udmFsdWUgPT09IHZhbHVlKT8ubGFiZWwgPz8gU3RyaW5nKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGlzUGlja2VkKGtleTogU2VsZWN0S2V5LCBvcHRpb246IFNlbGVjdE9wdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXNba2V5XSA9PT0gb3B0aW9uLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8gVHlwZWQgYWNjZXNzb3JzIGZvciB0aGUgc2hhcmVkIHRlbXBsYXRlcyAodGhlaXIgY29udGV4dCB2YXJpYWJsZXMgYXJlIHVudHlwZWQsIGFuZCB0aGVcclxuICAvLyByb290IGFwcCdzIHN0cmljdCB0ZW1wbGF0ZSBjaGVjayByZWplY3RzIGB0aGlzW2xpc3RdYCAvIGBkcmFmdHNbbGlzdF1gKS5cclxuICBjaGlwc09mKGxpc3Q6IENoaXBMaXN0KTogQ2hpcFVzZXJbXSB7XHJcbiAgICByZXR1cm4gdGhpc1tsaXN0XTtcclxuICB9XHJcblxyXG4gIGRyYWZ0T2YobGlzdDogQ2hpcExpc3QpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZHJhZnRzW2xpc3RdO1xyXG4gIH1cclxuXHJcbiAgc2V0RHJhZnQobGlzdDogQ2hpcExpc3QsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuZHJhZnRzW2xpc3RdID0gdmFsdWUgPz8gJyc7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tIGNoaXAgcGlja2VycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qKiBDbGllbnQgdXNlcnMgbWF0Y2hpbmcgdGhlIHR5cGVkIHRleHQsIG1pbnVzIHRoZSBvbmVzIGFscmVhZHkgaW4gdGhlIGxpc3QuICovXHJcbiAgc3VnZ2VzdGlvbnMobGlzdDogQ2hpcExpc3QpOiBDaGlwVXNlcltdIHtcclxuICAgIGNvbnN0IHEgPSB0aGlzLmRyYWZ0c1tsaXN0XS50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgIGNvbnN0IGNob3NlbiA9IG5ldyBTZXQodGhpc1tsaXN0XS5tYXAodSA9PiB1LmUpKTtcclxuICAgIHJldHVybiB0aGlzLnVzZXJzXHJcbiAgICAgIC5maWx0ZXIodSA9PiAhY2hvc2VuLmhhcyh1LmUpICYmICghcSB8fCB1Lm4udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxKSB8fCB1LmUuaW5jbHVkZXMocSkpKVxyXG4gICAgICAuc2xpY2UoMCwgOCk7XHJcbiAgfVxyXG5cclxuICBmb2N1c0NoaXBzKGxpc3Q6IENoaXBMaXN0LCBldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5vcGVuQ2hpcHMgPSBsaXN0O1xyXG4gICAgdGhpcy5vcGVuU2VsZWN0ID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKiBBcHByb3ZlcnMgY2FuIG9ubHkgYmUgYWRkZWQgd2hpbGUgQXBwcm92ZXIgaXMgb24gKHRoZSBwaWNrZXIgaXMgaGlkZGVuIG90aGVyd2lzZTsgdGhpcyBndWFyZHMgaXQpLiAqL1xyXG4gIHByaXZhdGUgYXBwcm92ZXJMaXN0TG9ja2VkKGxpc3Q6IENoaXBMaXN0KTogYm9vbGVhbiB7XHJcbiAgICBpZiAobGlzdCAhPT0gJ2FwcHJvdmVycycgfHwgdGhpcy5hcHByb3Zlck9uKSB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdBcHByb3ZlciBpcyB0dXJuZWQgb2ZmLiBUdXJuIG9uIEFwcHJvdmVyIHRvIGFkZCBhcHByb3ZlcnMuJyk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGFkZFN1Z2dlc3Rpb24obGlzdDogQ2hpcExpc3QsIHVzZXI6IENoaXBVc2VyLCBldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgaWYgKHRoaXMuYXBwcm92ZXJMaXN0TG9ja2VkKGxpc3QpKSB7IHJldHVybjsgfVxyXG4gICAgaWYgKCF0aGlzW2xpc3RdLnNvbWUodSA9PiB1LmUgPT09IHVzZXIuZSkpIHtcclxuICAgICAgdGhpc1tsaXN0XSA9IFsuLi50aGlzW2xpc3RdLCB1c2VyXTtcclxuICAgIH1cclxuICAgIHRoaXMuZHJhZnRzW2xpc3RdID0gJyc7XHJcbiAgICB0aGlzLm9wZW5DaGlwcyA9IG51bGw7XHJcbiAgfVxyXG5cclxuICAvKiogRW50ZXIgdGFrZXMgdGhlIGZpcnN0IHN1Z2dlc3Rpb247IGFuIGV4YWN0IGVtYWlsIHdvcmtzIGV2ZW4gZm9yIGEgdXNlciBub3QgaW4gdGhlIGxpc3QuICovXHJcbiAgYWRkQ2hpcChsaXN0OiBDaGlwTGlzdCk6IHZvaWQge1xyXG4gICAgY29uc3QgcSA9IHRoaXMuZHJhZnRzW2xpc3RdLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgaWYgKCFxIHx8IHRoaXMuYXBwcm92ZXJMaXN0TG9ja2VkKGxpc3QpKSB7IHJldHVybjsgfVxyXG4gICAgY29uc3QgdHlwZWQgPSB0aGlzLmVzYyh0aGlzLmRyYWZ0c1tsaXN0XS50cmltKCkpO1xyXG4gICAgY29uc3QgaXNFbWFpbCA9IC9eW15cXHNAXStAW15cXHNAXStcXC5bXlxcc0BdKyQvLnRlc3QocSk7XHJcbiAgICBjb25zdCBtYXRjaCA9IHRoaXMuc3VnZ2VzdGlvbnMobGlzdClbMF0gfHwgKGlzRW1haWwgPyB0aGlzLmNoaXAocSwgcSkgOiBudWxsKTtcclxuICAgIGlmICghbWF0Y2gpIHtcclxuICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KHEuaW5jbHVkZXMoJ0AnKVxyXG4gICAgICAgID8gJ1wiJyArIHR5cGVkICsgJ1wiIGlzIG5vdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MuJ1xyXG4gICAgICAgIDogJ05vIHVzZXIgbWF0Y2hlcyBcIicgKyB0eXBlZCArICdcIi4gUGljayBhIHVzZXIgZnJvbSB0aGUgbGlzdCBvciB0eXBlIHRoZWlyIGZ1bGwgZW1haWwuJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzW2xpc3RdLnNvbWUodSA9PiB1LmUgPT09IG1hdGNoLmUpKSB7XHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCh0aGlzLmVzYyhtYXRjaC5uIHx8IG1hdGNoLmUpICsgJyBpcyBhbHJlYWR5IGFkZGVkLicpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzW2xpc3RdID0gWy4uLnRoaXNbbGlzdF0sIG1hdGNoXTtcclxuICAgIHRoaXMuZHJhZnRzW2xpc3RdID0gJyc7XHJcbiAgICB0aGlzLm9wZW5DaGlwcyA9IG51bGw7XHJcbiAgfVxyXG5cclxuICByZW1vdmVDaGlwKGxpc3Q6IENoaXBMaXN0LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzW2xpc3RdID0gdGhpc1tsaXN0XS5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGluZGV4KTtcclxuICB9XHJcblxyXG4gIC8qKiBXaGF0IHRoZSBjaGVja2xpc3Qga2VlcHMgYXMgYXNzaWduZWRVc2VycywgZXhhY3RseSBhcyB0aGUgQ2hlY2tsaXN0IENvbmZpZ3VyZSBwYWdlIHNlbmRzIGl0LiAqL1xyXG4gIHByaXZhdGUgYXNzaWduZWRVc2VycygpOiB7IGlkOiBzdHJpbmc7IHR5cGU6IHN0cmluZyB9W10ge1xyXG4gICAgY29uc3QgZCA9IHRoaXMuY29uZmlnRGF0YT8uY2hlY2tMaXN0RGV0YWlscyB8fCB7fTtcclxuICAgIHJldHVybiBbLi4uKGQuc2luZ2xlQXNzaWduIHx8IFtdKSwgLi4uKGQuZ3JvdXBBc3NpZ24gfHwgW10pXTtcclxuICB9XHJcblxyXG4gIGdldCBwcmVTdWJtaXNzaW9uRW1wdHkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5wcmVTdWJtaXNzaW9uQWNjZXNzT24gJiYgdGhpcy5wcmVTdWJtaXNzaW9uVXNlcnMubGVuZ3RoID09PSAwO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRpc3B1dGVBdmFpbGFibGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXNwb25zZVZpc2liaWxpdHkgPT09ICdwcmUnICYmIHRoaXMuZGlzcHV0ZU9uO1xyXG4gIH1cclxuXHJcbiAgLyoqIFdoeSBQdWJsaXNoIC8gU2F2ZSBhcmUgZGlzYWJsZWQgKGJ1dHRvbiB0aXRsZSksICcnIHdoZW4gdGhleSBhcmUgbm90LiAqL1xyXG4gIGdldCBzYXZlQmxvY2tlZFJlYXNvbigpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLmFjY2Vzcy5jYW5FZGl0KSB7IHJldHVybiAnWW91IGRvIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gY2hhbmdlIGF1ZGl0cyc7IH1cclxuICAgIGlmICh0aGlzLmF1ZGl0U2V0dGluZ3NMb2FkRmFpbGVkKSB7IHJldHVybiAnVGhlIHNjb3JpbmcgYW5kIGFjY2VzcyBzZXR0aW5ncyBjb3VsZCBub3QgYmUgbG9hZGVkLiBSZWxvYWQgdGhlIHBhZ2UgYmVmb3JlIHNhdmluZy4nOyB9XHJcbiAgICBpZiAodGhpcy5wYXNzRmFpbE9uICYmICh0aGlzLnBhc3NUaHJlc2hvbGQgPCAxIHx8IHRoaXMucGFzc1RocmVzaG9sZCA+IDEwMCkpIHsgcmV0dXJuICdQYXNzIG1hcmsgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDEwMCc7IH1cclxuICAgIGlmICh0aGlzLnByZVN1Ym1pc3Npb25FbXB0eSkgeyByZXR1cm4gJ0FkZCBhdCBsZWFzdCBvbmUgdXNlciBmb3IgcHJlLXN1Ym1pc3Npb24gYWNjZXNzJzsgfVxyXG4gICAgcmV0dXJuIHRoaXMuZWRpdFN1Ym1pdHRlZEVycm9yIHx8IHRoaXMubm90aWZ5RmxhZ3NFcnJvciB8fCB0aGlzLnJlY3VycmluZ0ZsYWdzRXJyb3IgfHwgdGhpcy5kYWlseVJlcG9ydEVycm9yO1xyXG4gIH1cclxuXHJcbiAgLyoqIFdoeSBQdWJsaXNoIHdvdWxkIGJlIHJlZnVzZWQgKCcnIHdoZW4gaXQgd291bGQgbm90KTsgY2hlY2tlZCBvbiBjbGljayBzbyB0aGUgdG9hc3QgY2FuIHNheSBzby4gKi9cclxuICBnZXQgcHVibGlzaEJsb2NrZWRSZWFzb24oKTogc3RyaW5nIHtcclxuICAgIC8vIEFwcHJvdmVycyBhcmUgbmVlZGVkIG9ubHkgd2hpbGUgQXBwcm92ZXIgaXMgb247IHdpdGggaXQgb2ZmIHRoZSBhdWRpdCBwdWJsaXNoZXMgd2l0aG91dCBhcHByb3ZhbC5cclxuICAgIGlmICh0aGlzLmFwcHJvdmVyT24gJiYgIXRoaXMuYXBwcm92ZXJzLmxlbmd0aCkgeyByZXR1cm4gJ0FwcHJvdmVyIGlzIHR1cm5lZCBvbi4gQWRkIGF0IGxlYXN0IG9uZSBhcHByb3Zlciwgb3IgdHVybiBBcHByb3ZlciBvZmYuJzsgfVxyXG4gICAgaWYgKCF0aGlzLnNlY3Rpb25zLnNvbWUocyA9PiBzLml0ZW1zLmxlbmd0aCkpIHsgcmV0dXJuICdUaGlzIGF1ZGl0IGhhcyBubyBxdWVzdGlvbnMuIEFkZCBhdCBsZWFzdCBvbmUgcXVlc3Rpb24gYmVmb3JlIHB1Ymxpc2hpbmcuJzsgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhblNhdmUoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5zYXZpbmcgfHwgdGhpcy5sb2FkaW5nIHx8ICF0aGlzLmNoZWNrbGlzdElkIHx8ICF0aGlzLmNvbmZpZ0RhdGEpIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICByZXR1cm4gIXRoaXMuc2F2ZUJsb2NrZWRSZWFzb247XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tIHNhdmUgLyBwdWJsaXNoIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNhdmVEcmFmdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2F2ZShmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaXNoKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmNhblNhdmUpIHsgcmV0dXJuOyB9XHJcbiAgICBjb25zdCBibG9ja2VkID0gdGhpcy5wdWJsaXNoQmxvY2tlZFJlYXNvbjtcclxuICAgIGlmIChibG9ja2VkKSB7XHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChibG9ja2VkKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmFzc2lnbmVkQ291bnQpIHtcclxuICAgICAgLy8gU3RvcmVzIGFuZCBhdWRpdG9ycyBjb21lIGZyb20gc2NoZWR1bGUgcm93czsgcHVibGlzaGluZyB0aGUgc2NoZWR1bGUgcHVibGlzaGVzIHRoZSBhdWRpdC5cclxuICAgICAgdGhpcy5zY2hlZHVsZUFmdGVyU2F2ZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2F2ZShmYWxzZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc2F2ZSh0cnVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2F2ZShwdWJsaXNoOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuY2FuU2F2ZSkgeyB0aGlzLnNjaGVkdWxlQWZ0ZXJTYXZlID0gZmFsc2U7IHJldHVybjsgfVxyXG4gICAgdGhpcy53YXNQdWJsaXNoZWQgPSB0aGlzLnB1Ymxpc2hlZDtcclxuICAgIHRoaXMuc2F2aW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuc2F2ZUNoZWNrbGlzdChwdWJsaXNoKTtcclxuICB9XHJcblxyXG4gIC8qKiBcInB1Ymxpc2ggU3RvcmUgQXVkaXRcIiAvIFwic2F2ZSBTdG9yZSBBdWRpdFwiLCBmb3IgdGhlIGVycm9yIHRvYXN0cy4gKi9cclxuICBwcml2YXRlIGFjdGlvblRleHQocHVibGlzaDogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gKHB1Ymxpc2ggPyAncHVibGlzaCAnIDogJ3NhdmUgJykgKyB0aGlzLmVzYyh0aGlzLmF1ZGl0TmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKiogQSBzYXZlIHN0ZXAgZmFpbGVkOiBzdG9wLCBhbmQgZG8gbm90IG9wZW4gQ3JlYXRlIHNjaGVkdWxlIG9uIHRoZSBuZXh0IHBsYWluIHNhdmUuICovXHJcbiAgcHJpdmF0ZSBmYWlsU2F2ZShtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLnNjaGVkdWxlQWZ0ZXJTYXZlID0gZmFsc2U7XHJcbiAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QobWVzc2FnZSk7XHJcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBjaGVja2xpc3QgcGFydCAoY2hlY2tsaXN0Q29uZmlndXJldjE6IG5vdGlmaWNhdGlvbnMsIGFwcHJvdmVycywgcHVibGlzaCkgYW5kIHRoZSBhdWRpdC1vbmx5IHNldHRpbmdzXHJcbiAgICogKGNvbmZpZy9zYXZlOiBzY29yaW5nLCBkaXNwdXRlLCBhY2Nlc3MpIGRvIG5vdCBkZXBlbmQgb24gZWFjaCBvdGhlciwgc28gYm90aCBhcmUgc2VudCBhdCBvbmNlIGluc3RlYWQgb2Ygb25lXHJcbiAgICogYWZ0ZXIgdGhlIG90aGVyIChRQTogc2F2ZSAvIHB1Ymxpc2ggdG9vayBsb25nKS4gT3V0Y29tZXMgYXJlIHJlcG9ydGVkIGFzIGJlZm9yZTogdGhlIGNoZWNrbGlzdCBwYXJ0IGZpcnN0LlxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2F2ZUNoZWNrbGlzdChwdWJsaXNoOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBjb25zdCBmYWxsYmFjayA9ICdDb3VsZCBub3QgJyArIHRoaXMuYWN0aW9uVGV4dChwdWJsaXNoKSArICcuIFBsZWFzZSB0cnkgYWdhaW4uJztcclxuICAgIGNvbnN0IHNldHRsZSA9IChjYWxsOiBPYnNlcnZhYmxlPGFueT4pID0+IGNhbGwucGlwZShtYXAoKHJlczogYW55KSA9PiAoeyByZXMsIGVycjogbnVsbCB9KSksIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiBvZih7IHJlczogbnVsbCwgZXJyIH0pKSk7XHJcbiAgICBmb3JrSm9pbihbXHJcbiAgICAgIHNldHRsZSh0aGlzLnRyYXhTZXJ2aWNlLmF1ZGl0Q29uZmlnVXBkYXRlKHRoaXMuY2hlY2tsaXN0UGF5bG9hZChwdWJsaXNoKSkpLFxyXG4gICAgICBzZXR0bGUodGhpcy50cmF4U2VydmljZS5hdWRpdENvbmZpZ1NhdmUodGhpcy5leHRyYXNQYXlsb2FkKCkpKVxyXG4gICAgXSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoW21haW4sIGV4dHJhc10pID0+IHtcclxuICAgICAgaWYgKG1haW4uZXJyKSB7XHJcbiAgICAgICAgdGhpcy5mYWlsU2F2ZSh0aGlzLmFwaUVycm9yKG1haW4uZXJyLCBmYWxsYmFjaywgdHJ1ZSwgJ0NvdWxkIG5vdCAnICsgdGhpcy5hY3Rpb25UZXh0KHB1Ymxpc2gpICsgJzogJykpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAobWFpbi5yZXM/LmNvZGUgIT09IDIwMCkge1xyXG4gICAgICAgIC8vIDIwNCAobm8gYm9keSkgPSB0aGUgYXVkaXQgbm8gbG9uZ2VyIGV4aXN0cyBmb3IgdGhpcyBjbGllbnQuXHJcbiAgICAgICAgdGhpcy5mYWlsU2F2ZShtYWluLnJlcyA/IGZhbGxiYWNrIDogJ0NvdWxkIG5vdCAnICsgdGhpcy5hY3Rpb25UZXh0KHB1Ymxpc2gpICsgJzogdGhlIGF1ZGl0IHdhcyBub3QgZm91bmQuIEl0IG1heSBoYXZlIGJlZW4gZGVsZXRlZC4nKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHB1Ymxpc2gpIHsgdGhpcy5wdWJsaXNoZWQgPSB0cnVlOyB9XHJcbiAgICAgIGlmIChleHRyYXMuZXJyIHx8IGV4dHJhcy5yZXM/LmNvZGUgIT09IDIwMCkge1xyXG4gICAgICAgIGNvbnN0IHJlYXNvbiA9IGV4dHJhcy5lcnIgPyB0aGlzLmFwaUVycm9yKGV4dHJhcy5lcnIsICcnLCB0cnVlKSA6ICcnO1xyXG4gICAgICAgIHRoaXMuZmFpbFNhdmUoKHB1Ymxpc2ggPyB0aGlzLmVzYyh0aGlzLmF1ZGl0TmFtZSkgKyAnIHdhcyBwdWJsaXNoZWQnIDogJ1RoZSBub3RpZmljYXRpb24gYW5kIGFwcHJvdmVyIHNldHRpbmdzIHdlcmUgc2F2ZWQnKVxyXG4gICAgICAgICAgKyAnLCBidXQgdGhlIHNjb3JpbmcsIGRpc3B1dGUgYW5kIGFjY2VzcyBzZXR0aW5ncyB3ZXJlIG5vdCcgKyAocmVhc29uID8gJyAoJyArIHJlYXNvbiArICcpJyA6ICcnKSArICcuIFNhdmUgYWdhaW4gdG8ga2VlcCB0aGVtLicpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZpbmlzaFNhdmUocHVibGlzaCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKiBUaGUgYXVkaXQtb25seSBzZXR0aW5ncyBzYXZlZCBieSBjb25maWcvc2F2ZS4gKi9cclxuICBwcml2YXRlIGV4dHJhc1BheWxvYWQoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XHJcbiAgICBjb25zdCB0b1N0b3JlZCA9IChsaXN0OiBDaGlwVXNlcltdKSA9PiBsaXN0Lm1hcCh1ID0+ICh7IG46IHUubiwgZTogdS5lIH0pKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGNsaWVudElkOiB0aGlzLmNsaWVudElkLFxyXG4gICAgICBjaGVja2xpc3RJZDogdGhpcy5jaGVja2xpc3RJZCxcclxuICAgICAgcGFzc01hcms6IHRoaXMucGFzc0ZhaWxPbiA/IE51bWJlcih0aGlzLnBhc3NUaHJlc2hvbGQpIDogNzUsXHJcbiAgICAgIHNldHRpbmdzOiB7XHJcbiAgICAgICAgcGFzc0ZhaWxPbjogdGhpcy5wYXNzRmFpbE9uLFxyXG4gICAgICAgIGRpc3B1dGVPbjogdGhpcy5kaXNwdXRlT24sXHJcbiAgICAgICAgZGlzcHV0ZVdpbmRvdzogdGhpcy5kaXNwdXRlV2luZG93LFxyXG4gICAgICAgIHByZVN1Ym1pc3Npb25BY2Nlc3NPbjogdGhpcy5wcmVTdWJtaXNzaW9uQWNjZXNzT24sXHJcbiAgICAgICAgcHJlU3VibWlzc2lvblVzZXJzOiB0b1N0b3JlZCh0aGlzLnByZVN1Ym1pc3Npb25Vc2VycyksXHJcbiAgICAgICAgZWRpdFN1Ym1pdHRlZE9uOiB0aGlzLmVkaXRTdWJtaXR0ZWRPbixcclxuICAgICAgICBlZGl0VXNlcnM6IHRvU3RvcmVkKHRoaXMuZWRpdFVzZXJzKVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5pc2hTYXZlKHB1Ymxpc2g6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XHJcbiAgICBjb25zdCBuYW1lID0gdGhpcy5lc2ModGhpcy5hdWRpdE5hbWUpO1xyXG4gICAgaWYgKHRoaXMuc2NoZWR1bGVBZnRlclNhdmUpIHtcclxuICAgICAgdGhpcy5zY2hlZHVsZUFmdGVyU2F2ZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnRvYXN0LmdldFN1Y2Nlc3NUb2FzdChuYW1lICsgKHRoaXMucHVibGlzaGVkID8gJyBzYXZlZC4nIDogJyBzYXZlZCBhcyBkcmFmdC4nKSArICcgSXQgaGFzIG5vIHN0b3JlcyB5ZXQ6IGFkZCBzY2hlZHVsZSByb3dzLCB0aGVuIHB1Ymxpc2ggdGhlIHNjaGVkdWxlIHRvIHB1Ymxpc2ggdGhlIGF1ZGl0LicpO1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9tYW5hZ2UvdHJheC9hdWRpdC12Mi9tYW5hZ2UnXSwgeyBxdWVyeVBhcmFtczogeyB0YWI6ICdzY2hlZHVsZScsIHNjaGVkdWxlOiAnY3JlYXRlJywgYXVkaXQ6IHRoaXMuY2hlY2tsaXN0SWQgfSB9KTtcclxuICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChwdWJsaXNoKSB7XHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0U3VjY2Vzc1RvYXN0KHRoaXMud2FzUHVibGlzaGVkID8gJ0NoYW5nZXMgdG8gJyArIG5hbWUgKyAnIHNhdmVkIGFuZCBwdWJsaXNoZWQuJyA6IG5hbWUgKyAnIGhhcyBiZWVuIHB1Ymxpc2hlZC4nKTtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbWFuYWdlL3RyYXgvYXVkaXQtdjIvbWFuYWdlJ10pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gQSBkcmFmdCBzYXZlIG5ldmVyIHVucHVibGlzaGVzICh0aGUgQVBJIGtlZXBzIHRoZSBwdWJsaXNoIHN0YXRlKSwgc28gZG8gbm90IGNhbGwgYSBsaXZlIGF1ZGl0IGEgZHJhZnQuXHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0U3VjY2Vzc1RvYXN0KHRoaXMucHVibGlzaGVkID8gJ0NoYW5nZXMgdG8gJyArIG5hbWUgKyAnIHNhdmVkLiBUaGUgYXVkaXQgc3RheXMgcHVibGlzaGVkLicgOiBuYW1lICsgJyBzYXZlZCBhcyBkcmFmdC4nKTtcclxuICAgICAgLy8gUmVsb2FkIHNvIHRoZSBwYWdlIHNob3dzIGV4YWN0bHkgd2hhdCB0aGUgc2VydmVyIGtlcHQuXHJcbiAgICAgIHRoaXMubG9hZCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgbWVzc2FnZSB0byBzaG93IGZvciBhIGZhaWxlZCBjYWxsOiB0aGUgQVBJJ3Mgb3duIHRleHQgZm9yIGEgNHh4IChwcm9kdWN0aW9uIHNlbmRzIGl0IGFzXHJcbiAgICogYGVycm9yYCAodGV4dCBvciB7IG1lc3NhZ2UgfSksIHRoZSBsb2NhbCBkZXYgaGVscGVyIGFzIGBlcnJvcmAgdGV4dCBwbHVzIGBkZXRhaWxzYCksIGVsc2UgYGZhbGxiYWNrYC5cclxuICAgKiA1eHggYm9kaWVzIGNhcnJ5IHJhdyBleGNlcHRpb25zLCBzbyB0aGV5IGdldCB0aGUgZmFsbGJhY2suIGBwcmVmaXhgIGlzIHB1dCBiZWZvcmUgYW4gQVBJIHRleHQuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhcGlFcnJvcihlOiBhbnksIGZhbGxiYWNrOiBzdHJpbmcsIGVzY2FwZSA9IHRydWUsIHByZWZpeCA9ICcnKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHN0YXR1cyA9IE51bWJlcihlPy5zdGF0dXMpIHx8IDA7XHJcbiAgICBpZiAoc3RhdHVzID09PSA0MDMpIHsgcmV0dXJuICdZb3UgZG8gbm90IGhhdmUgcGVybWlzc2lvbiB0byB2aWV3IG9yIGNoYW5nZSB0aGlzIGF1ZGl0Lic7IH1cclxuICAgIGlmIChzdGF0dXMgPT09IDApIHsgcmV0dXJuIGZhbGxiYWNrID8gJ0NvdWxkIG5vdCByZWFjaCB0aGUgc2VydmVyLiBDaGVjayB5b3VyIGNvbm5lY3Rpb24gYW5kIHRyeSBhZ2Fpbi4nIDogJyc7IH1cclxuICAgIGlmIChzdGF0dXMgPj0gNTAwKSB7IHJldHVybiBmYWxsYmFjazsgfVxyXG4gICAgY29uc3QgYm9keSA9IGU/LmVycm9yO1xyXG4gICAgY29uc3QgZXJyID0gYm9keT8uZXJyb3I7XHJcbiAgICBjb25zdCByYXcgPSAodHlwZW9mIGVyciA9PT0gJ3N0cmluZycgPyBlcnIgOiBlcnI/Lm1lc3NhZ2UpIHx8IGJvZHk/LmRldGFpbHM/Lm1lc3NhZ2UgfHwgYm9keT8ubWVzc2FnZSB8fCAnJztcclxuICAgIGNvbnN0IHRleHQgPSBTdHJpbmcocmF3KS50cmltKCk7XHJcbiAgICBpZiAoIXRleHQpIHsgcmV0dXJuIGZhbGxiYWNrOyB9XHJcbiAgICByZXR1cm4gcHJlZml4ICsgKGVzY2FwZSA/IHRoaXMuZXNjKHRleHQpIDogdGV4dCk7XHJcbiAgfVxyXG5cclxuICAvKiogVG9hc3RzIHJlbmRlciB0aGVpciBtZXNzYWdlIGFzIEhUTUwsIHNvIG5hbWVzLCB0eXBlZCB0ZXh0IGFuZCBBUEkgbWVzc2FnZXMgYXJlIGVzY2FwZWQuICovXHJcbiAgcHJpdmF0ZSBlc2ModmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyAnJic6ICcmYW1wOycsICc8JzogJyZsdDsnLCAnPic6ICcmZ3Q7JywgJ1wiJzogJyZxdW90OycsICdcXCcnOiAnJiMzOTsnIH07XHJcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlID8/ICcnKS5yZXBsYWNlKC9bJjw+XCInXS9nLCBjID0+IG1hcFtjXSk7XHJcbiAgfVxyXG5cclxuICAvKiogVGhlIGdldENvbmZpZ0RldGFpbHMgcGF5bG9hZCB3aXRoIHRoaXMgcGFnZSdzIGZpZWxkcyB3cml0dGVuIGJhY2ssIGluIHRoZSBjaGVja2xpc3QncyBvd24gc2hhcGUuICovXHJcbiAgcHJpdmF0ZSBjaGVja2xpc3RQYXlsb2FkKHB1Ymxpc2g6IGJvb2xlYW4pOiBhbnkge1xyXG4gICAgY29uc3QgdG9TdG9yZWQgPSAobGlzdDogQ2hpcFVzZXJbXSkgPT4gbGlzdC5tYXAodSA9PiAoeyBuYW1lOiB1Lm4sIHZhbHVlOiB1LmUgfSkpO1xyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuY29uZmlnRGF0YTtcclxuICAgIGNvbnN0IGQgPSBkYXRhLmNoZWNrTGlzdERldGFpbHM7XHJcblxyXG4gICAgZC5jaGVja0xpc3REZXNjcmlwdGlvbiA9IHRoaXMuZGVzY3JpcHRpb24udHJpbSgpO1xyXG4gICAgZC5vd25lciA9IHRvU3RvcmVkKHRoaXMub3duZXJzKTtcclxuICAgIGQuYXBwcm92ZXIgPSB0aGlzLmFwcHJvdmVyT24gPyB0b1N0b3JlZCh0aGlzLmFwcHJvdmVycykgOiBbXTtcclxuICAgIC8vIE1pbnV0ZXMgYmVmb3JlIHRoZSBhdWRpdCBlbmQgdGltZSwgYXMgdGhlIENoZWNrbGlzdCBDb25maWd1cmUgcGFnZSBzdG9yZXMgdGhlbS5cclxuICAgIGQucmVtYWluZGVyID0gdGhpcy5yZW1pbmRlck9uID8gWy4uLnRoaXMucmVtaW5kZXJzXSA6IFtdO1xyXG5cclxuICAgIGNvbnN0IG5mVHlwZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBpZiAodGhpcy5ub3RpZnlGbGFnc09uICYmIHRoaXMubm90aWZ5U2VuZEFwcHJvdmVyKSB7IG5mVHlwZXMucHVzaCgnYXBwcm92ZXInKTsgfVxyXG4gICAgaWYgKHRoaXMubm90aWZ5RmxhZ3NPbiAmJiB0aGlzLm5vdGlmeVNlbmRDdXN0b20pIHsgbmZUeXBlcy5wdXNoKCdjdXN0b20nKTsgfVxyXG4gICAgZC5ub3RpZnlGbGFncyA9IHsgbm90aWZ5VHlwZTogbmZUeXBlcywgdXNlcnM6IHRoaXMubm90aWZ5RmxhZ3NPbiAmJiB0aGlzLm5vdGlmeVNlbmRDdXN0b20gPyB0b1N0b3JlZCh0aGlzLm5vdGlmeVVzZXJzKSA6IFtdIH07XHJcblxyXG4gICAgY29uc3QgcmZUeXBlczogc3RyaW5nW10gPSBbXTtcclxuICAgIGlmICh0aGlzLnJlY3VycmluZ0ZsYWdzT24gJiYgdGhpcy5yZWN1cnJpbmdTZW5kQXBwcm92ZXIpIHsgcmZUeXBlcy5wdXNoKCdhcHByb3ZlcicpOyB9XHJcbiAgICBpZiAodGhpcy5yZWN1cnJpbmdGbGFnc09uICYmIHRoaXMucmVjdXJyaW5nU2VuZEN1c3RvbSkgeyByZlR5cGVzLnB1c2goJ2N1c3RvbScpOyB9XHJcbiAgICAvLyBUaGUgc2VydmVyIHJlc29sdmVzICdzYW1lQXNOb3RpZnknIHRvIHRoZSBOb3RpZnkgRmxhZ3MgcmVjaXBpZW50cyB3aGVuIGl0IHNlbmRzIHRoZSBlbWFpbC5cclxuICAgIGlmICh0aGlzLnJlY3VycmluZ0ZsYWdzT24gJiYgdGhpcy5yZWN1cnJpbmdTYW1lQXNOb3RpZnkpIHsgcmZUeXBlcy5wdXNoKCdzYW1lQXNOb3RpZnknKTsgfVxyXG4gICAgY29uc3QgcmZVc2VycyA9IHRoaXMucmVjdXJyaW5nRmxhZ3NPbiAmJiB0aGlzLnJlY3VycmluZ1NlbmRDdXN0b20gPyB0b1N0b3JlZCh0aGlzLnJlY3VycmluZ1VzZXJzKSA6IFtdO1xyXG4gICAgZC5yZWN1cnJpbmdGbGFnID0geyBub3RpZnlUeXBlOiByZlR5cGVzLCB1c2VyczogcmZVc2VycywgdGhyZXNob2xkOiB0aGlzLnJlY3VycmluZ0ZsYWdzT24gPyB0aGlzLnJlY3VycmluZ1RocmVzaG9sZCA6IDAgfTtcclxuXHJcbiAgICBjb25zdCBhZVR5cGVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgaWYgKHRoaXMuZGFpbHlSZXBvcnRPbiAmJiB0aGlzLmRhaWx5U2VuZEFwcHJvdmVyKSB7IGFlVHlwZXMucHVzaCgnYXBwcm92ZXInKTsgfVxyXG4gICAgaWYgKHRoaXMuZGFpbHlSZXBvcnRPbiAmJiB0aGlzLmRhaWx5U2VuZEN1c3RvbSkgeyBhZVR5cGVzLnB1c2goJ2N1c3RvbScpOyB9XHJcbiAgICBkLmF1dG9FbWFpbCA9IHsgdHlwZTogYWVUeXBlcywgdXNlcnM6IHRoaXMuZGFpbHlTZW5kQ3VzdG9tID8gdG9TdG9yZWQodGhpcy5kYWlseVVzZXJzKSA6IFtdIH07XHJcbiAgICBkLnNoYXJlUmVwb3J0UG9zdEFwcHJvdmFsID0gdGhpcy5kYWlseVJlcG9ydE9uICYmIHRoaXMuc2hhcmVQb3N0QXBwcm92YWw7XHJcblxyXG4gICAgZC5leHBvcnQgPSB0aGlzLmV4cG9ydFN1Ym1pc3Npb25PbjtcclxuICAgIGQucmVkb1ZhbGlkaXR5ID0gdGhpcy5yZWRvVmFsaWRGb3I7XHJcbiAgICBkLmF1dG9DcmVhdGVUYXNrID0gdGhpcy5hdXRvQ3JlYXRlVGFza09uO1xyXG4gICAgZC50YXNrQXNzaWduZWUgPSB0aGlzLnRhc2tBc3NpZ25lZTtcclxuICAgIGQudGFza1ZhbGlkaXR5ID0gTnVtYmVyKHRoaXMudGFza1ZhbGlkaXR5KSB8fCAxMDtcclxuICAgIGQuc2hvd0FwcHJvdmVkUmVzcG9uc2UgPSB0aGlzLnNob3dSZXNwb25zZUluQXBwO1xyXG4gICAgZC5yZXNwb25zZVZpc2liaWxpdHkgPSB0aGlzLnJlc3BvbnNlVmlzaWJpbGl0eSA9PT0gJ3ByZScgPyAncHJlQXBwcm92YWwnIDogJ3Bvc3RBcHByb3ZhbCc7XHJcbiAgICBkLnJlc3BvbnNlVmlzaWJpbGl0eUhvdXJzID0gdGhpcy5yZXNwRGVsYXk7XHJcbiAgICBkLnVzZXJWZXJpZmljYXRpb24gPSB7IHJlcXVpcmVQaG90b0NhcHR1cmU6IHRoaXMucmVxdWlyZVBob3RvLCByZXF1aXJlVXNlckFja25vd2xlZGdtZW50OiB0aGlzLnJlcXVpcmVBY2tub3dsZWRnbWVudCB9O1xyXG4gICAgZC5yZWRvRXh0ZW5zaW9uID0gdGhpcy5yZWRvRXh0ZW5zaW9uO1xyXG5cclxuICAgIC8vIFdoYXQgdGhlIENoZWNrbGlzdCBDb25maWd1cmUgcGFnZSBzZW5kczogZXZlcnlvbmUgY3VycmVudGx5IGFzc2lnbmVkLCBhbmQgdGhlIHB1Ymxpc2ggc3RhdGUuXHJcbiAgICBkLmFzc2lnbmVkVXNlcnMgPSB0aGlzLmFzc2lnbmVkVXNlcnMoKTtcclxuICAgIGQuc3RvcmVDb3VudCA9IGQuYXNzaWduZWRVc2Vycy5sZW5ndGg7XHJcbiAgICBpZiAoIWQuY292ZXJhZ2UpIHsgZC5jb3ZlcmFnZSA9ICdzdG9yZSc7IH1cclxuICAgIGQucHVibGlzaCA9IHB1Ymxpc2ggPyB0cnVlIDogISFkLnB1Ymxpc2g7XHJcblxyXG4gICAgZGF0YS5jbGllbnRJZCA9IHRoaXMuY2xpZW50SWQ7XHJcbiAgICBkYXRhLnN1Ym1pdFR5cGUgPSBwdWJsaXNoID8gJ3B1Ymxpc2gnIDogJ3NhdmUnO1xyXG4gICAgZGF0YS5zaG93RWRpdCA9IGZhbHNlO1xyXG4gICAgZGF0YS51cGRhdGVDb25maWd1cmUgPSBmYWxzZTtcclxuICAgIGRhdGEudGltZVpvbmUgPSBkYXlqcy50ei5ndWVzcygpO1xyXG4gICAgLy8gQXNzaWdubWVudCBkaWZmIGZvciB0aGUgYWN0aXZpdHkgbG9nOyB0aGlzIHBhZ2UgbmV2ZXIgY2hhbmdlcyBhc3NpZ25tZW50cy5cclxuICAgIGRhdGEuYWRkZWQgPSBbXTtcclxuICAgIGRhdGEucmVtb3ZlZCA9IHsgdXNlcjogW10sIHN0b3JlOiBbXSB9O1xyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJhdjItcGFnZSBhdWRpdC1jb25maWd1cmVcIj5cclxuXHJcbiAgPCEtLSBCcmVhZGNydW1iIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJjZi1jcnVtYlwiPlxyXG4gICAgPGEgcm91dGVyTGluaz1cIi9tYW5hZ2UvdHJheC9hdWRpdC12Mi9tYW5hZ2VcIj5NYW5hZ2UgQXVkaXQ8L2E+IOKAuiBDb25maWd1cmVcclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBUaXRsZSArIGFjdGlvbnMgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImNmLWhlYWRlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNmLWhlYWRlci10ZXh0XCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiYXYyLXNrIGF2Mi1zay0tdGl0bGUgY2Ytc2stdGl0bGVcIiAqbmdJZj1cImxvYWRpbmdcIj48L3NwYW4+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjZi10aXRsZVwiICpuZ0lmPVwiIWxvYWRpbmdcIj57eyBhdWRpdE5hbWUgfHwgJ0F1ZGl0JyB9fTwvZGl2PlxyXG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImNmLWRlc2NcIiBwbGFjZWhvbGRlcj1cIkVudGVyIEF1ZGl0IERlc2NyaXB0aW9uXCIgWyhuZ01vZGVsKV09XCJkZXNjcmlwdGlvblwiPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYXYyLWdyb3dcIj48L2Rpdj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYXYyLWJ0biBhdjItYnRuLS1wcmltYXJ5IGNmLXB1Ymxpc2hcIiBbZGlzYWJsZWRdPVwiIWNhblNhdmVcIiBbdGl0bGVdPVwic2F2ZUJsb2NrZWRSZWFzb24gfHwgcHVibGlzaEJsb2NrZWRSZWFzb25cIiAoY2xpY2spPVwicHVibGlzaCgpXCI+XHJcbiAgICAgIHt7IHNhdmluZyA/ICdTYXZpbmfigKYnIDogKHB1Ymxpc2hlZCA/ICdTYXZlICYgUHVibGlzaCcgOiAnUHVibGlzaCcpIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYXYyLWJ0biBhdjItYnRuLS1naG9zdCBjZi1kcmFmdFwiIFtkaXNhYmxlZF09XCIhY2FuU2F2ZVwiIFt0aXRsZV09XCJzYXZlQmxvY2tlZFJlYXNvblwiIChjbGljayk9XCJzYXZlRHJhZnQoKVwiPlNhdmUgYXMgRHJhZnQ8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImNmLWVycm9yIGNmLWVycm9yLS1wYWdlXCIgKm5nSWY9XCJsb2FkRXJyb3JcIj5cclxuICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMTBcIj48L2NpcmNsZT48bGluZSB4MT1cIjEyXCIgeTE9XCI4XCIgeDI9XCIxMlwiIHkyPVwiMTJcIj48L2xpbmU+PGxpbmUgeDE9XCIxMlwiIHkxPVwiMTZcIiB4Mj1cIjEyLjAxXCIgeTI9XCIxNlwiPjwvbGluZT48L3N2Zz5cclxuICAgIHt7IGxvYWRFcnJvciB9fVxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIENoaXAgcGlja2VyOiBjaGlwcyArIGlucHV0ICsgc3VnZ2VzdGlvbiBsaXN0IChvbmUgdGVtcGxhdGUsIHVzZWQgZm9yIGV2ZXJ5IHVzZXIgbGlzdCkgLS0+XHJcbiAgPG5nLXRlbXBsYXRlICNjaGlwUGlja2VyIGxldC1saXN0PVwibGlzdFwiIGxldC1sYXJnZT1cImxhcmdlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2YtY2hpcGJveFwiIFtjbGFzcy5jZi1jaGlwYm94LS1sZ109XCJsYXJnZVwiIFtjbGFzcy5pcy1vcGVuXT1cIm9wZW5DaGlwcyA9PT0gbGlzdFwiIChjbGljayk9XCJmb2N1c0NoaXBzKGxpc3QsICRldmVudClcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJjZi1jaGlwXCIgW2NsYXNzLmNmLWNoaXAtLWxnXT1cImxhcmdlXCIgKm5nRm9yPVwibGV0IHUgb2YgY2hpcHNPZihsaXN0KTsgbGV0IGkgPSBpbmRleFwiIFt0aXRsZV09XCJ1LmVcIj5cclxuICAgICAgICA8c3BhbiBbY2xhc3NdPVwibGFyZ2UgPyAnY2YtY2hpcC10YWcnIDogJ2NmLWNoaXAtaW5pJ1wiPnt7IHUuaSB9fTwvc3Bhbj57eyB1Lm4gfX1cclxuICAgICAgICA8YSBjbGFzcz1cImNmLWNoaXAteFwiIChjbGljayk9XCJyZW1vdmVDaGlwKGxpc3QsIGkpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMi41XCJcclxuICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiPjxsaW5lIHgxPVwiNlwiIHkxPVwiNlwiIHgyPVwiMThcIiB5Mj1cIjE4XCI+PC9saW5lPjxsaW5lIHgxPVwiMThcIiB5MT1cIjZcIiB4Mj1cIjZcIiB5Mj1cIjE4XCI+PC9saW5lPjwvc3ZnPlxyXG4gICAgICAgIDwvYT5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImNmLWNoaXAtaW5wdXRcIiBbY2xhc3MuY2YtY2hpcC1pbnB1dC0tbGddPVwibGFyZ2VcIiBwbGFjZWhvbGRlcj1cIkFkZCB1c2VyLi4uXCJcclxuICAgICAgICBbbmdNb2RlbF09XCJkcmFmdE9mKGxpc3QpXCIgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RHJhZnQobGlzdCwgJGV2ZW50KVwiIChmb2N1cyk9XCJmb2N1c0NoaXBzKGxpc3QsICRldmVudClcIiAoa2V5dXAuZW50ZXIpPVwiYWRkQ2hpcChsaXN0KVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2Ytc3VnZ2VzdFwiICpuZ0lmPVwib3BlbkNoaXBzID09PSBsaXN0XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNmLXN1Z2dlc3QtaXRlbVwiICpuZ0Zvcj1cImxldCB1IG9mIHN1Z2dlc3Rpb25zKGxpc3QpXCIgKGNsaWNrKT1cImFkZFN1Z2dlc3Rpb24obGlzdCwgdSwgJGV2ZW50KVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1jaGlwLWluaVwiPnt7IHUuaSB9fTwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2Ytc3VnZ2VzdC1uYW1lXCI+e3sgdS5uIH19PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1zdWdnZXN0LW1haWxcIj57eyB1LmUgfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNmLXN1Z2dlc3QtZW1wdHlcIiAqbmdJZj1cIiFzdWdnZXN0aW9ucyhsaXN0KS5sZW5ndGhcIj5cclxuICAgICAgICAgIHt7IHVzZXJzLmxlbmd0aCA/ICdObyBtYXRjaGluZyB1c2VyJyA6ICdObyB1c2VycyBmb3IgdGhpcyBjbGllbnQnIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPCEtLSBEcm9wZG93bjogc3R5bGVkIGxpa2UgdGhlIHByb3RvdHlwZSBpbnN0ZWFkIG9mIHRoZSBicm93c2VyJ3MgbmF0aXZlIHNlbGVjdCAtLT5cclxuICA8bmctdGVtcGxhdGUgI2Ryb3Bkb3duIGxldC1rZXk9XCJrZXlcIiBsZXQtb3B0aW9ucz1cIm9wdGlvbnNcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY2Ytc2VsZWN0XCIgW2NsYXNzLmlzLW9wZW5dPVwib3BlblNlbGVjdCA9PT0ga2V5XCI+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2Ytc2VsZWN0LWJ0blwiIChjbGljayk9XCJ0b2dnbGVTZWxlY3Qoa2V5LCAkZXZlbnQpXCI+XHJcbiAgICAgICAge3sgc2VsZWN0TGFiZWwoa2V5LCBvcHRpb25zKSB9fVxyXG4gICAgICAgIDxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48cG9seWxpbmUgcG9pbnRzPVwiNiA5IDEyIDE1IDE4IDlcIj48L3BvbHlsaW5lPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNmLXNlbGVjdC1tZW51XCIgKm5nSWY9XCJvcGVuU2VsZWN0ID09PSBrZXlcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2Ytc2VsZWN0LWl0ZW1cIiAqbmdGb3I9XCJsZXQgbyBvZiBvcHRpb25zXCIgW2NsYXNzLmlzLW9uXT1cImlzUGlja2VkKGtleSwgbylcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInBpY2soa2V5LCBvLCAkZXZlbnQpXCI+e3sgby5sYWJlbCB9fTwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvc3Bhbj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiY2YtYm9keVwiICpuZ0lmPVwiIWxvYWRFcnJvclwiPlxyXG4gICAgPCEtLSBTZWN0aW9uIHRyZWUgLS0+XHJcbiAgICA8YXNpZGUgY2xhc3M9XCJjZi1sZWZ0XCI+XHJcbiAgICAgIDxsaWItYXVkaXQtdjItc2hpbW1lciAqbmdJZj1cImxvYWRpbmdcIiBbcm93c109XCIzXCI+PC9saWItYXVkaXQtdjItc2hpbW1lcj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZ1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2YtbGVmdC10aXRsZVwiPnt7IGF1ZGl0TmFtZSB8fCAnQXVkaXQnIH19PC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2YtaGludFwiICpuZ0lmPVwiIXNlY3Rpb25zLmxlbmd0aFwiPk5vIHF1ZXN0aW9ucyB5ZXQ8L2Rpdj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcyBvZiBzZWN0aW9uc1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZi1zZWN0aW9uXCIgW2NsYXNzLmlzLW9wZW5dPVwicy5vcGVuXCIgKGNsaWNrKT1cInRvZ2dsZVNlY3Rpb24ocylcIj5cclxuICAgICAgICAgIHt7IHMubGFiZWwgfX1cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2YtcnVsZVwiPjwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2YtY2hldlwiPlxyXG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIFtjbGFzcy5yb3RhdGVdPVwiIXMub3BlblwiPlxyXG4gICAgICAgICAgICAgIDxwb2x5bGluZSBwb2ludHM9XCI2IDkgMTIgMTUgMTggOVwiPjwvcG9seWxpbmU+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZi1pdGVtc1wiICpuZ0lmPVwicy5vcGVuICYmIHMuaXRlbXMubGVuZ3RoXCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdCBvZiBzLml0ZW1zXCI+e3sgaXQgfX08L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2Ytc2NoZWR1bGUtdGl0bGVcIj5TY2hlZHVsZTwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2Ytc2NoZWR1bGVcIj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjhcIlxyXG4gICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj5cclxuICAgICAgICAgICAgPHJlY3QgeD1cIjNcIiB5PVwiNVwiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxNlwiIHJ4PVwiMlwiPjwvcmVjdD5cclxuICAgICAgICAgICAgPGxpbmUgeDE9XCIzXCIgeTE9XCIxMFwiIHgyPVwiMjFcIiB5Mj1cIjEwXCI+PC9saW5lPlxyXG4gICAgICAgICAgICA8bGluZSB4MT1cIjhcIiB5MT1cIjNcIiB4Mj1cIjhcIiB5Mj1cIjZcIj48L2xpbmU+XHJcbiAgICAgICAgICAgIDxsaW5lIHgxPVwiMTZcIiB5MT1cIjNcIiB4Mj1cIjE2XCIgeTI9XCI2XCI+PC9saW5lPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICB7eyBzY2hlZHVsZSB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuOFwiXHJcbiAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPlxyXG4gICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjlcIj48L2NpcmNsZT5cclxuICAgICAgICAgICAgPHBvbHlsaW5lIHBvaW50cz1cIjEyIDcgMTIgMTIgMTUuNSAxNFwiPjwvcG9seWxpbmU+XHJcbiAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgIHt7IHNjaGVkdWxlV2luZG93IH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvYXNpZGU+XHJcblxyXG4gICAgPCEtLSBDb25maWd1cmF0aW9uIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNmLXJpZ2h0XCI+XHJcblxyXG4gICAgICA8c2VjdGlvbiBjbGFzcz1cImNmLWNhcmRcIiAqbmdJZj1cImxvYWRpbmdcIj5cclxuICAgICAgICA8bGliLWF1ZGl0LXYyLXNoaW1tZXIgW3Jvd3NdPVwiNFwiPjwvbGliLWF1ZGl0LXYyLXNoaW1tZXI+XHJcbiAgICAgIDwvc2VjdGlvbj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZ1wiPlxyXG5cclxuICAgICAgPCEtLSA9PT09PSBBZHZhbmNlIENvbmZpZ3VyYXRpb24gPT09PT0gLS0+XHJcbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2YtY2FyZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZi1ibG9jay1oZWFkXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNmLWJsb2NrLXRpdGxlXCI+QWR2YW5jZSBDb25maWd1cmF0aW9uPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1ydWxlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1jaGV2XCI+XHJcbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PHBvbHlsaW5lIHBvaW50cz1cIjYgOSAxMiAxNSAxOCA5XCI+PC9wb2x5bGluZT48L3N2Zz5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBBdWRpdCBPd25lciAtLT5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWxhYmVsXCI+QXVkaXQgT3duZXI8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1oaW50XCI+T3duZXJzIGdldCBhY2Nlc3MgdG8gbWFuYWdlIHRoZSBhdWRpdDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZi1yb3dcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2YtZmllbGRcIj5DYW4gYmUgbWFuYWdlZCBieTwvc3Bhbj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjaGlwUGlja2VyOyBjb250ZXh0OiB7IGxpc3Q6ICdvd25lcnMnLCBsYXJnZTogZmFsc2UgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIEFwcHJvdmVyIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZi10b2dnbGUtcm93XCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNmLWxhYmVsXCI+QXBwcm92ZXI8L3NwYW4+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNmLXN3aXRjaFwiIFtjbGFzcy5pcy1vbl09XCJhcHByb3Zlck9uXCIgKGNsaWNrKT1cInRvZ2dsZUFwcHJvdmVyKClcIj48c3Bhbj48L3NwYW4+PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNmLWhpbnQgY2YtaGludC0tdGlnaHRcIj5CeSBlbmFibGluZywgdGhlIHVzZXJzIHdpbGwgYmUgYWJsZSB0byBhcHByb3ZlIHRoZSBhdWRpdDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZi1yb3dcIiAqbmdJZj1cImFwcHJvdmVyT25cIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2YtZmllbGRcIj5UbyBiZSBhcHByb3ZlZCBieTwvc3Bhbj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjaGlwUGlja2VyOyBjb250ZXh0OiB7IGxpc3Q6ICdhcHByb3ZlcnMnLCBsYXJnZTogZmFsc2UgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZi1lcnJvclwiICpuZ0lmPVwiYXBwcm92ZXJFcnJvclwiPlxyXG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIxMlwiIHI9XCIxMFwiPjwvY2lyY2xlPjxsaW5lIHgxPVwiMTJcIiB5MT1cIjhcIiB4Mj1cIjEyXCIgeTI9XCIxMlwiPjwvbGluZT48bGluZSB4MT1cIjEyXCIgeTE9XCIxNlwiIHgyPVwiMTIuMDFcIiB5Mj1cIjE2XCI+PC9saW5lPjwvc3ZnPlxyXG4gICAgICAgICAge3sgYXBwcm92ZXJFcnJvciB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZi1pbmZvIGNmLWluZm8tLXdyYXBcIiAqbmdJZj1cIiFhcHByb3Zlck9uICYmIGFwcHJvdmVycy5sZW5ndGhcIj5cclxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMTBcIj48L2NpcmNsZT48bGluZSB4MT1cIjEyXCIgeTE9XCIxNlwiIHgyPVwiMTJcIiB5Mj1cIjEyXCI+PC9saW5lPjxsaW5lIHgxPVwiMTJcIiB5MT1cIjhcIiB4Mj1cIjEyLjAxXCIgeTI9XCI4XCI+PC9saW5lPjwvc3ZnPlxyXG4gICAgICAgICAgQXBwcm92ZXIgaXMgb2ZmLCBzbyB0aGUge3sgYXBwcm92ZXJzLmxlbmd0aCB9fSBhcHByb3Zlcnt7IGFwcHJvdmVycy5sZW5ndGggPT09IDEgPyAnJyA6ICdzJyB9fSBhZGRlZCB3aWxsIGJlIHJlbW92ZWQgd2hlbiB5b3Ugc2F2ZS4gVHVybiBBcHByb3ZlciBiYWNrIG9uIHRvIGtlZXAge3sgYXBwcm92ZXJzLmxlbmd0aCA9PT0gMSA/ICdpdCcgOiAndGhlbScgfX0uXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNmLWluZm8gY2YtaW5mby0td3JhcFwiICpuZ0lmPVwiIWFwcHJvdmVyT24gJiYgIWFwcHJvdmVycy5sZW5ndGhcIj5cclxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMTBcIj48L2NpcmNsZT48bGluZSB4MT1cIjEyXCIgeTE9XCIxNlwiIHgyPVwiMTJcIiB5Mj1cIjEyXCI+PC9saW5lPjxsaW5lIHgxPVwiMTJcIiB5MT1cIjhcIiB4Mj1cIjEyLjAxXCIgeTI9XCI4XCI+PC9saW5lPjwvc3ZnPlxyXG4gICAgICAgICAgQXBwcm92ZXIgaXMgb2ZmLCBzbyBzdWJtaXR0ZWQgYXVkaXRzIGFyZSBub3Qgc2VudCBmb3IgYXBwcm92YWwuIFR1cm4gaXQgb24gdG8gYWRkIGFwcHJvdmVycyBvciB0byBzZW5kIGZsYWdzIGFuZCByZXBvcnRzIHRvIHRoZW0uXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gUmVtaW5kZXIgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNmLXRvZ2dsZS1yb3dcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2YtbGFiZWxcIj5SZW1pbmRlcjwvc3Bhbj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2Ytc3dpdGNoXCIgW2NsYXNzLmlzLW9uXT1cInJlbWluZGVyT25cIiAoY2xpY2spPVwidG9nZ2xlUmVtaW5kZXIoKVwiPjxzcGFuPjwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtaGludCBjZi1oaW50LS10aWdodFwiPkJ5IGVuYWJsaW5nLCB0aGUgdXNlcnMgd2lsbCBiZSByZW1pbmRlZCBpbiB0aGUgc2VsZWN0ZWQgaW50ZXJ2YWw8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtaW5uZXJcIiAqbmdJZj1cInJlbWluZGVyT25cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1pbmxpbmVcIj5cclxuICAgICAgICAgICAgTm90aWZ5IHVzZXIgYmVmb3JlXHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2YtcmVtaW5kZXJcIiAqbmdGb3I9XCJsZXQgbSBvZiByZW1pbmRlcnM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICA8bGliLWF1ZGl0LXYyLXNlbGVjdCBjbGFzcz1cImNmLXJlbWluZGVyLXNlbGVjdFwiIFt2YWx1ZV09XCJtXCIgW29wdGlvbnNdPVwicmVtaW5kZXJPcHRzW2ldIHx8IFtdXCIgW3NlYXJjaGFibGVdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgW2FyaWFMYWJlbF09XCInUmVtaW5kZXIgJyArIChpICsgMSkgKyAnIGluIG1pbnV0ZXMnXCIgKGNoYW5nZWQpPVwic2V0UmVtaW5kZXIoaSwgJGV2ZW50LnRhcmdldC52YWx1ZSlcIj48L2xpYi1hdWRpdC12Mi1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjZi1jaGlwLXhcIiAqbmdJZj1cInJlbWluZGVycy5sZW5ndGggPiAxXCIgdGl0bGU9XCJSZW1vdmUgcmVtaW5kZXJcIiAoY2xpY2spPVwicmVtb3ZlUmVtaW5kZXIoaSlcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMi41XCJcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiPjxsaW5lIHgxPVwiNlwiIHkxPVwiNlwiIHgyPVwiMThcIiB5Mj1cIjE4XCI+PC9saW5lPjxsaW5lIHgxPVwiMThcIiB5MT1cIjZcIiB4Mj1cIjZcIiB5Mj1cIjE4XCI+PC9saW5lPjwvc3ZnPlxyXG4gICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNmLWljb24tYnRuXCIgKm5nSWY9XCJyZW1pbmRlcnMubGVuZ3RoIDwgbWF4UmVtaW5kZXJzXCIgdGl0bGU9XCJBZGQgcmVtaW5kZXJcIiAoY2xpY2spPVwiYWRkUmVtaW5kZXIoKVwiPlxyXG4gICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48bGluZSB4MT1cIjEyXCIgeTE9XCI1XCIgeDI9XCIxMlwiIHkyPVwiMTlcIj48L2xpbmU+PGxpbmUgeDE9XCI1XCIgeTE9XCIxMlwiIHgyPVwiMTlcIiB5Mj1cIjEyXCI+PC9saW5lPjwvc3ZnPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWluZm9cIj5cclxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjEwXCI+PC9jaXJjbGU+PGxpbmUgeDE9XCIxMlwiIHkxPVwiMTZcIiB4Mj1cIjEyXCIgeTI9XCIxMlwiPjwvbGluZT48bGluZSB4MT1cIjEyXCIgeTE9XCI4XCIgeDI9XCIxMi4wMVwiIHkyPVwiOFwiPjwvbGluZT48L3N2Zz5cclxuICAgICAgICAgICAgU2VuZCBhbGVydHMge3sgcmVtaW5kZXJTdW1tYXJ5IH19IG1pbnMgYmVmb3JlIHRoZSBhdWRpdCBlbmQgdGltZVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gTm90aWZ5IEZsYWdzIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZi10b2dnbGUtcm93XCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNmLWxhYmVsXCI+Tm90aWZ5IEZsYWdzPC9zcGFuPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjZi1zd2l0Y2hcIiBbY2xhc3MuaXMtb25dPVwibm90aWZ5RmxhZ3NPblwiIChjbGljayk9XCJ0b2dnbGVOb3RpZnlGbGFncygpXCI+PHNwYW4+PC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZi1oaW50IGNmLWhpbnQtLXRpZ2h0XCI+QnkgZW5hYmxpbmcsIGFsbCBmbGFncyB3aWxsIGJlIHNlbnQgYXMgYW4gZW1haWw8L2Rpdj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm90aWZ5RmxhZ3NPblwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWNoZWNrc1wiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNmLWNoZWNrcy1sYWJlbFwiPlNlbmQgVG88L3NwYW4+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNmLWNoZWNrXCIgW2NsYXNzLmlzLWJsb2NrZWRdPVwiIWhhc0FwcHJvdmVycyAmJiAhbm90aWZ5U2VuZEFwcHJvdmVyXCIgKGNsaWNrKT1cInRvZ2dsZVNlbmRBcHByb3Zlcignbm90aWZ5U2VuZEFwcHJvdmVyJylcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNmLWNoZWNrLWJveFwiIFtjbGFzcy5pcy1vbl09XCJub3RpZnlTZW5kQXBwcm92ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJub3RpZnlTZW5kQXBwcm92ZXJcIiB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTBcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PHBvbHlsaW5lIHBvaW50cz1cIjIwIDYgOSAxNyA0IDEyXCI+PC9wb2x5bGluZT48L3N2Zz5cclxuICAgICAgICAgICAgICA8L3NwYW4+QXBwcm92ZXJcclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2YtY2hlY2tcIiAoY2xpY2spPVwibm90aWZ5U2VuZEN1c3RvbSA9ICFub3RpZnlTZW5kQ3VzdG9tXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1jaGVjay1ib3hcIiBbY2xhc3MuaXMtb25dPVwibm90aWZ5U2VuZEN1c3RvbVwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIm5vdGlmeVNlbmRDdXN0b21cIiB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTBcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PHBvbHlsaW5lIHBvaW50cz1cIjIwIDYgOSAxNyA0IDEyXCI+PC9wb2x5bGluZT48L3N2Zz5cclxuICAgICAgICAgICAgICA8L3NwYW4+Q3VzdG9tXHJcbiAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub3RpZnlTZW5kQ3VzdG9tXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjaGlwUGlja2VyOyBjb250ZXh0OiB7IGxpc3Q6ICdub3RpZnlVc2VycycsIGxhcmdlOiBmYWxzZSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1lcnJvclwiICpuZ0lmPVwibm90aWZ5RmxhZ3NFcnJvclwiPlxyXG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMTBcIj48L2NpcmNsZT48bGluZSB4MT1cIjEyXCIgeTE9XCI4XCIgeDI9XCIxMlwiIHkyPVwiMTJcIj48L2xpbmU+PGxpbmUgeDE9XCIxMlwiIHkxPVwiMTZcIiB4Mj1cIjEyLjAxXCIgeTI9XCIxNlwiPjwvbGluZT48L3N2Zz5cclxuICAgICAgICAgICAge3sgbm90aWZ5RmxhZ3NFcnJvciB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwhLS0gTm90aWZ5IG9uIFJlY3VycmluZyBGbGFncyAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtdG9nZ2xlLXJvd1wiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1sYWJlbFwiPk5vdGlmeSBvbiBSZWN1cnJpbmcgRmxhZ3M8L3NwYW4+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNmLXN3aXRjaFwiIFtjbGFzcy5pcy1vbl09XCJyZWN1cnJpbmdGbGFnc09uXCIgKGNsaWNrKT1cInRvZ2dsZVJlY3VycmluZ0ZsYWdzKClcIj48c3Bhbj48L3NwYW4+PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNmLWhpbnQgY2YtaGludC0tdGlnaHRcIj5XaGVuIGVuYWJsZWQsIGVtYWlscyBhcmUgc2VudCBmb3IgcmVjdXJyaW5nIGZsYWdzIGJhc2VkIG9uIHRoZSBjb25maWd1cmVkIHRocmVzaG9sZDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtaW5uZXJcIiAqbmdJZj1cInJlY3VycmluZ0ZsYWdzT25cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1pbmxpbmVcIj5cclxuICAgICAgICAgICAgU2VuZCBFbWFpbCBpZiB0aGUgc2FtZSBxdWVzdGlvbiBpcyBmbGFnZ2VkXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93bjsgY29udGV4dDogeyBrZXk6ICdyZWN1cnJpbmdUaHJlc2hvbGQnLCBvcHRpb25zOiB0aHJlc2hvbGRPcHRzIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgdGltZXMgYnkgdGhlIHNhbWUgc3RvcmVcclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWluZm9cIj5cclxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjEwXCI+PC9jaXJjbGU+PGxpbmUgeDE9XCIxMlwiIHkxPVwiMTZcIiB4Mj1cIjEyXCIgeTI9XCIxMlwiPjwvbGluZT48bGluZSB4MT1cIjEyXCIgeTE9XCI4XCIgeDI9XCIxMi4wMVwiIHkyPVwiOFwiPjwvbGluZT48L3N2Zz5cclxuICAgICAgICAgICAgT25jZSB0aGUgdGhyZXNob2xkIGlzIHJlYWNoZWQgYW5kIGFuIGVtYWlsIGlzIHNlbnQsIHRoZSBmbGFnIGNvdW50IHJlc2V0cyB0byB6ZXJvXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVjdXJyaW5nRmxhZ3NPblwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWNoZWNrc1wiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNmLWNoZWNrcy1sYWJlbFwiPlNlbmQgVG88L3NwYW4+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNmLWNoZWNrXCIgW2NsYXNzLmlzLWJsb2NrZWRdPVwiIWhhc0FwcHJvdmVycyAmJiAhcmVjdXJyaW5nU2VuZEFwcHJvdmVyXCIgKGNsaWNrKT1cInRvZ2dsZVNlbmRBcHByb3ZlcigncmVjdXJyaW5nU2VuZEFwcHJvdmVyJylcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNmLWNoZWNrLWJveFwiIFtjbGFzcy5pcy1vbl09XCJyZWN1cnJpbmdTZW5kQXBwcm92ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJyZWN1cnJpbmdTZW5kQXBwcm92ZXJcIiB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTBcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PHBvbHlsaW5lIHBvaW50cz1cIjIwIDYgOSAxNyA0IDEyXCI+PC9wb2x5bGluZT48L3N2Zz5cclxuICAgICAgICAgICAgICA8L3NwYW4+QXBwcm92ZXJcclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2YtY2hlY2tcIiAoY2xpY2spPVwidG9nZ2xlUmVjdXJyaW5nQ3VzdG9tKClcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNmLWNoZWNrLWJveFwiIFtjbGFzcy5pcy1vbl09XCJyZWN1cnJpbmdTZW5kQ3VzdG9tXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwicmVjdXJyaW5nU2VuZEN1c3RvbVwiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48cG9seWxpbmUgcG9pbnRzPVwiMjAgNiA5IDE3IDQgMTJcIj48L3BvbHlsaW5lPjwvc3ZnPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5DdXN0b21cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2YtY2hlY2tcIiAoY2xpY2spPVwicmVjdXJyaW5nU2FtZUFzTm90aWZ5ID0gIXJlY3VycmluZ1NhbWVBc05vdGlmeVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2YtY2hlY2stYm94XCIgW2NsYXNzLmlzLW9uXT1cInJlY3VycmluZ1NhbWVBc05vdGlmeVwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cInJlY3VycmluZ1NhbWVBc05vdGlmeVwiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48cG9seWxpbmUgcG9pbnRzPVwiMjAgNiA5IDE3IDQgMTJcIj48L3BvbHlsaW5lPjwvc3ZnPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5Vc2Ugc2FtZSB1c2VycyBmcm9tIE5vdGlmeSBGbGFnc1xyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVjdXJyaW5nU2VuZEN1c3RvbVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2hpcFBpY2tlcjsgY29udGV4dDogeyBsaXN0OiAncmVjdXJyaW5nVXNlcnMnLCBsYXJnZTogZmFsc2UgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtaW5mb1wiICpuZ0lmPVwicmVjdXJyaW5nU2FtZUFzTm90aWZ5XCI+XHJcbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIxMlwiIHI9XCIxMFwiPjwvY2lyY2xlPjxsaW5lIHgxPVwiMTJcIiB5MT1cIjE2XCIgeDI9XCIxMlwiIHkyPVwiMTJcIj48L2xpbmU+PGxpbmUgeDE9XCIxMlwiIHkxPVwiOFwiIHgyPVwiMTIuMDFcIiB5Mj1cIjhcIj48L2xpbmU+PC9zdmc+XHJcbiAgICAgICAgICAgIHt7IG5vdGlmeVJlY2lwaWVudHNMYWJlbCB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtZXJyb3JcIiAqbmdJZj1cInJlY3VycmluZ0ZsYWdzRXJyb3JcIj5cclxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjEwXCI+PC9jaXJjbGU+PGxpbmUgeDE9XCIxMlwiIHkxPVwiOFwiIHgyPVwiMTJcIiB5Mj1cIjEyXCI+PC9saW5lPjxsaW5lIHgxPVwiMTJcIiB5MT1cIjE2XCIgeDI9XCIxMi4wMVwiIHkyPVwiMTZcIj48L2xpbmU+PC9zdmc+XHJcbiAgICAgICAgICAgIHt7IHJlY3VycmluZ0ZsYWdzRXJyb3IgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8IS0tIERhaWx5IHJlcG9ydCAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtdG9nZ2xlLXJvd1wiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1sYWJlbFwiPkVuYWJsZSAtIERhaWx5IFJlcG9ydDwvc3Bhbj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2Ytc3dpdGNoXCIgW2NsYXNzLmlzLW9uXT1cImRhaWx5UmVwb3J0T25cIiAoY2xpY2spPVwidG9nZ2xlRGFpbHlSZXBvcnQoKVwiPjxzcGFuPjwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtaGludCBjZi1oaW50LS10aWdodFwiPkJ5IEVuYWJsaW5nLCBjb21wbGlhbmNlIHNjb3JlIHdpbGwgYmUgc2VudCBhcyBhbiBlbWFpbCB0byB0aGUgYWJvdmUgdXNlcnM8L2Rpdj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGFpbHlSZXBvcnRPblwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWNoZWNrc1wiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNmLWNoZWNrcy1sYWJlbFwiPlNlbmQgVG88L3NwYW4+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNmLWNoZWNrXCIgW2NsYXNzLmlzLWJsb2NrZWRdPVwiIWhhc0FwcHJvdmVycyAmJiAhZGFpbHlTZW5kQXBwcm92ZXJcIiAoY2xpY2spPVwidG9nZ2xlU2VuZEFwcHJvdmVyKCdkYWlseVNlbmRBcHByb3ZlcicpXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1jaGVjay1ib3hcIiBbY2xhc3MuaXMtb25dPVwiZGFpbHlTZW5kQXBwcm92ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJkYWlseVNlbmRBcHByb3ZlclwiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48cG9seWxpbmUgcG9pbnRzPVwiMjAgNiA5IDE3IDQgMTJcIj48L3BvbHlsaW5lPjwvc3ZnPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5BcHByb3ZlclxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjZi1jaGVja1wiIChjbGljayk9XCJkYWlseVNlbmRDdXN0b20gPSAhZGFpbHlTZW5kQ3VzdG9tXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1jaGVjay1ib3hcIiBbY2xhc3MuaXMtb25dPVwiZGFpbHlTZW5kQ3VzdG9tXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiZGFpbHlTZW5kQ3VzdG9tXCIgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjxwb2x5bGluZSBwb2ludHM9XCIyMCA2IDkgMTcgNCAxMlwiPjwvcG9seWxpbmU+PC9zdmc+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPkN1c3RvbVxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGFpbHlTZW5kQ3VzdG9tXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjaGlwUGlja2VyOyBjb250ZXh0OiB7IGxpc3Q6ICdkYWlseVVzZXJzJywgbGFyZ2U6IGZhbHNlIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2YtY2hlY2tcIiAoY2xpY2spPVwic2hhcmVQb3N0QXBwcm92YWwgPSAhc2hhcmVQb3N0QXBwcm92YWxcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1jaGVjay1ib3hcIiBbY2xhc3MuaXMtb25dPVwic2hhcmVQb3N0QXBwcm92YWxcIj5cclxuICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwic2hhcmVQb3N0QXBwcm92YWxcIiB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTBcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjxwb2x5bGluZSBwb2ludHM9XCIyMCA2IDkgMTcgNCAxMlwiPjwvcG9seWxpbmU+PC9zdmc+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5TaGFyZSBSZXBvcnQgUG9zdCBBcHByb3ZhbFxyXG4gICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1lcnJvclwiICpuZ0lmPVwiZGFpbHlSZXBvcnRFcnJvclwiPlxyXG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMTBcIj48L2NpcmNsZT48bGluZSB4MT1cIjEyXCIgeTE9XCI4XCIgeDI9XCIxMlwiIHkyPVwiMTJcIj48L2xpbmU+PGxpbmUgeDE9XCIxMlwiIHkxPVwiMTZcIiB4Mj1cIjEyLjAxXCIgeTI9XCIxNlwiPjwvbGluZT48L3N2Zz5cclxuICAgICAgICAgICAge3sgZGFpbHlSZXBvcnRFcnJvciB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwhLS0gRXhwb3J0IHN1Ym1pc3Npb246IFRhbmdvIHVzZXJzIG9ubHksIGFzIHRoZSB2MSBDb25maWd1cmUgKGl0cyBzdG9yZWQgdmFsdWUgaXMga2VwdCBmb3IgZXZlcnlvbmUgZWxzZSkuIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZi1ncmlkMlwiICpuZ0lmPVwiYWNjZXNzLmlzVGFuZ29cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1zdGFjayBjZi1zdGFjay0tdGlnaHRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNmLXRvZ2dsZS1yb3dcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNmLWxhYmVsXCI+RXhwb3J0IFN1Ym1pc3Npb248L3NwYW4+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjZi1zd2l0Y2hcIiBbY2xhc3MuaXMtb25dPVwiZXhwb3J0U3VibWlzc2lvbk9uXCIgKGNsaWNrKT1cImV4cG9ydFN1Ym1pc3Npb25PbiA9ICFleHBvcnRTdWJtaXNzaW9uT25cIj48c3Bhbj48L3NwYW4+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtaGludFwiPkVuYWJsZSB0aGlzIHRvIGFsbG93IGF1ZGl0IHN1Ym1pdHRlcnMgdG8gZG93bmxvYWQgdGhlaXIgc3VibWlzc2lvbiBhcyBhIFBERiBmaWxlPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBSZWRvIHZhbGlkaXR5IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZi1ncmlkMlwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNmLXN0YWNrXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1sYWJlbFwiPlJlZG8gVmFsaWRpdHk8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWlubGluZVwiPlxyXG4gICAgICAgICAgICAgIFJlZG8gdmFsaWQgZm9yXHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duOyBjb250ZXh0OiB7IGtleTogJ3JlZG9WYWxpZEZvcicsIG9wdGlvbnM6IHJlZG9EYXlPcHRzIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICBEYXkgZnJvbSBSZWRvIGNyZWF0aW9uXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gQXV0byBjcmVhdGUgdGFzayAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtdG9nZ2xlLXJvd1wiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1sYWJlbFwiPkF1dG8gQ3JlYXRlIFRhc2sgZm9yIEZsYWdzPC9zcGFuPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjZi1zd2l0Y2hcIiBbY2xhc3MuaXMtb25dPVwiYXV0b0NyZWF0ZVRhc2tPblwiIChjbGljayk9XCJhdXRvQ3JlYXRlVGFza09uID0gIWF1dG9DcmVhdGVUYXNrT25cIj48c3Bhbj48L3NwYW4+PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNmLWhpbnQgY2YtaGludC0tdGlnaHRcIj5CeSBlbmFibGluZywgYSB0YXNrIGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBmb3IgZXZlcnkgZmxhZ2dlZCBxdWVzdGlvbiBpbiB0aGUgYXVkaXQ8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBXaG8gZ2V0cyB0aGUgdGFzayBhbmQgaG93IGxvbmcgaXQgc3RheXMgb3BlbiAoYXMgdGhlIENoZWNrbGlzdCBDb25maWd1cmUgcGFnZSkgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNmLWF1dG90YXNrXCIgKm5nSWY9XCJhdXRvQ3JlYXRlVGFza09uXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtYXV0b3Rhc2stdGl0bGVcIj5UYXNrIEFzc2lnbmVlPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtaGludCBjZi1oaW50LS10aWdodFwiPkNob29zZSB3aG8gdGhlIGZsYWdnZWQgdGFzayBpcyBhc3NpZ25lZCB0bzwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWF1dG90YXNrLWNob2ljZXNcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjZi1jaG9pY2VcIiBbY2xhc3MuaXMtb25dPVwidGFza0Fzc2lnbmVlID09PSAnc3VibWl0dGVyJ1wiIChjbGljayk9XCJ0YXNrQXNzaWduZWUgPSAnc3VibWl0dGVyJ1wiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2YtcmFkaW9cIiBbY2xhc3MuaXMtb25dPVwidGFza0Fzc2lnbmVlID09PSAnc3VibWl0dGVyJ1wiPjxzcGFuPjwvc3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1jaG9pY2UtdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1jaG9pY2UtdGl0bGVcIj5BdWRpdCBTdWJtaXR0ZXI8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNmLWNob2ljZS1zdWJcIj5UYXNrIGlzIGFzc2lnbmVkIHRvIHRoZSB1c2VyIHdobyBmaWxsZWQgdGhlIGF1ZGl0PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2YtY2hvaWNlXCIgW2NsYXNzLmlzLW9uXT1cInRhc2tBc3NpZ25lZSA9PT0gJ3N0b3JlJ1wiIChjbGljayk9XCJ0YXNrQXNzaWduZWUgPSAnc3RvcmUnXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1yYWRpb1wiIFtjbGFzcy5pcy1vbl09XCJ0YXNrQXNzaWduZWUgPT09ICdzdG9yZSdcIj48c3Bhbj48L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2YtY2hvaWNlLXRleHRcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2YtY2hvaWNlLXRpdGxlXCI+U3RvcmUgVXNlcjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2YtY2hvaWNlLXN1YlwiPlRhc2sgaXMgYXNzaWduZWQgdG8gdGhlIHVzZXIgbWFwcGVkIHRvIHRoZSBmbGFnZ2VkIHN0b3JlPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1hdXRvdGFzay10aXRsZVwiPlRhc2sgVmFsaWRpdHk8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1hdXRvdGFzay12YWxpZGl0eVwiPlxyXG4gICAgICAgICAgICA8c3Bhbj5UYXNrIHZhbGlkIGZvcjwvc3Bhbj5cclxuICAgICAgICAgICAgPGxpYi1hdWRpdC12Mi1zZWxlY3QgY2xhc3M9XCJjZi12YWxpZGl0eS1zZWxlY3RcIiBbKG5nTW9kZWwpXT1cInRhc2tWYWxpZGl0eVwiIFtvcHRpb25zXT1cInRhc2tWYWxpZGl0eU9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgIFtzZWFyY2hhYmxlXT1cImZhbHNlXCIgYXJpYUxhYmVsPVwiVGFzayB2YWxpZGl0eSBpbiBkYXlzXCI+PC9saWItYXVkaXQtdjItc2VsZWN0PlxyXG4gICAgICAgICAgICA8c3Bhbj5kYXlzIGZyb20gdGFzayBjcmVhdGlvbjwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L3NlY3Rpb24+XHJcblxyXG4gICAgICA8IS0tID09PT09IEF1ZGl0IENvbmZpZ3VyYXRpb24gPT09PT0gLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjZi1kaXZpZGVyLWhlYWRcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImNmLWJsb2NrLXRpdGxlXCI+QXVkaXQgQ29uZmlndXJhdGlvbjwvc3Bhbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImNmLXJ1bGVcIj48L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjZi1jYXJkIGNmLWNhcmQtLWxnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNmLWJsb2NrLXRpdGxlXCI+U3VibWlzc2lvbiAmYW1wOyBWaXNpYmlsaXR5PC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gY2YtYm94LS1vcGVuOiB0aGUgZGlzcHV0ZS13aW5kb3cgYW5kIHJlc3BvbnNlLWRlbGF5IG1lbnVzIG11c3Qgbm90IGJlIGNsaXBwZWQgYnkgdGhlIGJveCAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtYm94IGNmLWJveC0tb3BlblwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWJveC1yb3dcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjZi1zd2l0Y2ggY2Ytc3dpdGNoLS10b3BcIiBbY2xhc3MuaXMtb25dPVwic2hvd1Jlc3BvbnNlSW5BcHBcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJzaG93UmVzcG9uc2VJbkFwcCA9ICFzaG93UmVzcG9uc2VJbkFwcFwiPjxzcGFuPjwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNmLXN0YWNrIGNmLXN0YWNrLS14c1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1sYWJlbFwiPlNob3cgUmVzcG9uc2UgaW4gTW9iaWxlIEFwcDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1oaW50XCI+QnkgZW5hYmxpbmcgdGhpcyBvcHRpb24sIHN0b3JlIHVzZXJzIGNhbiB2aWV3IHRoZSBhdWRpdCByZXNwb25zZSBpbiB0aGUgTW9iaWxlIEFwcC48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtYm94LXN1YlwiICpuZ0lmPVwic2hvd1Jlc3BvbnNlSW5BcHBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNmLXN0YWNrIGNmLXN0YWNrLS14c1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1sYWJlbC1zbVwiPlJlc3BvbnNlIFZpc2liaWxpdHk8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtaGludFwiPkNob29zZSB3aGVuIHRoZSByZXNwb25zZSBiZWNvbWVzIHZpc2libGUgdG8gc3RvcmUgdXNlcnM8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2Ytb3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1vcHRpb25cIiBbY2xhc3MuaXMtb25dPVwicmVzcG9uc2VWaXNpYmlsaXR5ID09PSAncHJlJ1wiIChjbGljayk9XCJyZXNwb25zZVZpc2liaWxpdHkgPSAncHJlJ1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1yYWRpb1wiIFtjbGFzcy5pcy1vbl09XCJyZXNwb25zZVZpc2liaWxpdHkgPT09ICdwcmUnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNmLXN0YWNrIGNmLXN0YWNrLS1zbVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtbGFiZWwtc21cIj5QcmUtYXBwcm92YWw8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWhpbnRcIj5UaGUgYXVkaXQgcmVzcG9uc2Ugd2lsbCBiZSB2aXNpYmxlIHRvIHN0b3JlIHVzZXJzIGJlZm9yZSBpdCBpcyBhcHByb3ZlZC48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWlubGluZSBjZi1pbmxpbmUtLXRvcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFNob3cgcmVzcG9uc2VcclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZHJvcGRvd247IGNvbnRleHQ6IHsga2V5OiAncmVzcERlbGF5Jywgb3B0aW9uczogcmVzcERlbGF5T3B0cyB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgc3VibWlzc2lvblxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1vcHRpb25cIiBbY2xhc3MuaXMtb25dPVwicmVzcG9uc2VWaXNpYmlsaXR5ID09PSAncG9zdCdcIiAoY2xpY2spPVwicmVzcG9uc2VWaXNpYmlsaXR5ID0gJ3Bvc3QnXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNmLXJhZGlvXCIgW2NsYXNzLmlzLW9uXT1cInJlc3BvbnNlVmlzaWJpbGl0eSA9PT0gJ3Bvc3QnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNmLXN0YWNrIGNmLXN0YWNrLS1zbVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtbGFiZWwtc21cIiBbY2xhc3MuY2YtbXV0ZWRdPVwicmVzcG9uc2VWaXNpYmlsaXR5ICE9PSAncG9zdCdcIj5Qb3N0LWFwcHJvdmFsPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1oaW50XCI+T25jZSB0aGUgcmVzcG9uc2UgaXMgYXBwcm92ZWQsIGl0IHdpbGwgYXV0b21hdGljYWxseSBiZSBkaXNwbGF5ZWQgaW4gdGhlIE1vYmlsZSBBcHAuIFN0b3JlIHVzZXJzIGNhbm5vdCByYWlzZSBhIGRpc3B1dGUuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtYm94LXNlcFwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyZXNwb25zZVZpc2liaWxpdHkgPT09ICdwcmUnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtYm94LXJvdyBjZi1ib3gtcm93LS1mbHVzaFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNmLXN3aXRjaCBjZi1zd2l0Y2gtLXRvcFwiIFtjbGFzcy5pcy1vbl09XCJkaXNwdXRlT25cIiAoY2xpY2spPVwiZGlzcHV0ZU9uID0gIWRpc3B1dGVPblwiPjxzcGFuPjwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNmLXN0YWNrIGNmLXN0YWNrLS14c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1sYWJlbC1zbVwiPkRpc3B1dGUgQ29uZmlndXJhdGlvbjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1oaW50IGNmLWhpbnQtLXdyYXBcIj5XaGVuIGVuYWJsZWQsIHRoZSBzdG9yZSB0ZWFtIGNhbiByYWlzZSBhIGRpc3B1dGUgYWdhaW5zdCB0aGUgYXVkaXRvcidzIHN1Ym1pc3Npb24gb25jZSB0aGUgcmVzcG9uc2UgYmVjb21lcyB2aXNpYmxlIHRvIHRoZW0uPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtYm94IGNmLWJveC0tbmVzdGVkXCIgKm5nSWY9XCJkaXNwdXRlT25cIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWlubGluZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIERpc3B1dGUgd2luZG93XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duOyBjb250ZXh0OiB7IGtleTogJ2Rpc3B1dGVXaW5kb3cnLCBvcHRpb25zOiBkaXNwV2luZG93T3B0cyB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSB3aGVuIHRoZSByZXNwb25zZSBiZWNvbWVzIHZpc2libGVcclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1pbmZvIGNmLWluZm8tLXdyYXBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIxMlwiIHI9XCIxMFwiPjwvY2lyY2xlPjxsaW5lIHgxPVwiMTJcIiB5MT1cIjE2XCIgeDI9XCIxMlwiIHkyPVwiMTJcIj48L2xpbmU+PGxpbmUgeDE9XCIxMlwiIHkxPVwiOFwiIHgyPVwiMTIuMDFcIiB5Mj1cIjhcIj48L2xpbmU+PC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgRGlzcHV0ZXMgcmFpc2VkIGluc2lkZSB0aGlzIHdpbmRvdyBnbyB0byB0aGUgYXBwcm92ZXIuIEFwcHJvdmVkIGRpc3B1dGVzIHJldmlzZSB0aGUgYW5zd2VyIGFuZCB0aGUgY29tcGxpYW5jZSBzY29yZS5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1lcnJvclwiICpuZ0lmPVwiIWhhc0FwcHJvdmVyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjEwXCI+PC9jaXJjbGU+PGxpbmUgeDE9XCIxMlwiIHkxPVwiOFwiIHgyPVwiMTJcIiB5Mj1cIjEyXCI+PC9saW5lPjxsaW5lIHgxPVwiMTJcIiB5MT1cIjE2XCIgeDI9XCIxMi4wMVwiIHkyPVwiMTZcIj48L2xpbmU+PC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgTm8gYXBwcm92ZXIgaXMgc2V0LCBzbyBubyBvbmUgY2FuIHJldmlldyBkaXNwdXRlcy4gVHVybiBvbiBBcHByb3ZlciBhbmQgYWRkIGFuIGFwcHJvdmVyLlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyZXNwb25zZVZpc2liaWxpdHkgPT09ICdwb3N0J1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNmLXN0YWNrIGNmLXN0YWNrLS1zbVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtbGFiZWwtc20gY2YtbXV0ZWRcIj5EaXNwdXRlIENvbmZpZ3VyYXRpb248L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWluZm8gY2YtaW5mby0td3JhcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjEwXCI+PC9jaXJjbGU+PGxpbmUgeDE9XCIxMlwiIHkxPVwiMTZcIiB4Mj1cIjEyXCIgeTI9XCIxMlwiPjwvbGluZT48bGluZSB4MT1cIjEyXCIgeTE9XCI4XCIgeDI9XCIxMi4wMVwiIHkyPVwiOFwiPjwvbGluZT48L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICBEaXNwdXRlcyBhcmUgbm90IGF2YWlsYWJsZSB3aGVuIHJlc3BvbnNlcyBhcmUgc2hvd24gcG9zdC1hcHByb3ZhbC5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBQcmUtc3VibWlzc2lvbiBhY2Nlc3MgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNmLWJveCBjZi1ib3gtLXBhZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNmLXRvZ2dsZS1yb3dcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1sYWJlbFwiPlByZS1TdWJtaXNzaW9uIEFjY2Vzczwvc3Bhbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjZi1zd2l0Y2hcIiBbY2xhc3MuaXMtb25dPVwicHJlU3VibWlzc2lvbkFjY2Vzc09uXCIgKGNsaWNrKT1cInByZVN1Ym1pc3Npb25BY2Nlc3NPbiA9ICFwcmVTdWJtaXNzaW9uQWNjZXNzT25cIj48c3Bhbj48L3NwYW4+PC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1oaW50IGNmLWhpbnQtLXdyYXBcIj5Vc2VycyBhZGRlZCBoZXJlIGNhbiB2aWV3IE9wZW4gYW5kIEluIFByb2dyZXNzIGF1ZGl0cyB1bnRpbCBzdWJtaXNzaW9uLiBUaGUgU2NoZWR1bGUgSW5mbyB0YWIgaXMgYWxzbyB2aXNpYmxlIG9ubHkgdG8gdGhlc2UgdXNlcnMuPC9kaXY+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJlU3VibWlzc2lvbkFjY2Vzc09uXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1yb3cgY2Ytcm93LS10b3BcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNmLWZpZWxkXCI+VmlzaWJsZSB0bzwvc3Bhbj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2hpcFBpY2tlcjsgY29udGV4dDogeyBsaXN0OiAncHJlU3VibWlzc2lvblVzZXJzJywgbGFyZ2U6IGZhbHNlIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1lcnJvciBjZi1lcnJvci0taW5kZW50XCIgKm5nSWY9XCJwcmVTdWJtaXNzaW9uRW1wdHlcIj5cclxuICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIxMlwiIHI9XCIxMFwiPjwvY2lyY2xlPjxsaW5lIHgxPVwiMTJcIiB5MT1cIjhcIiB4Mj1cIjEyXCIgeTI9XCIxMlwiPjwvbGluZT48bGluZSB4MT1cIjEyXCIgeTE9XCIxNlwiIHgyPVwiMTIuMDFcIiB5Mj1cIjE2XCI+PC9saW5lPjwvc3ZnPlxyXG4gICAgICAgICAgICAgIEFkZCBhdCBsZWFzdCBvbmUgdXNlclxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L3NlY3Rpb24+XHJcblxyXG4gICAgICA8IS0tID09PT09IFNjb3JpbmcgPT09PT0gLS0+XHJcbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2YtY2FyZCBjZi1jYXJkLS1sZ1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZi1ibG9jay10aXRsZVwiPlNjb3Jpbmc8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtYm94IGNmLWJveC0tcGFkXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtdG9nZ2xlLXJvd1wiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNmLWxhYmVsXCI+UGFzcy9GYWlsIFNjb3JlIFNldHVwPC9zcGFuPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNmLXN3aXRjaFwiIFtjbGFzcy5pcy1vbl09XCJwYXNzRmFpbE9uXCIgKGNsaWNrKT1cInBhc3NGYWlsT24gPSAhcGFzc0ZhaWxPblwiPjxzcGFuPjwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWhpbnQgY2YtaGludC0td3JhcFwiPlNldCB0aGUgY29tcGxpYW5jZSBzY29yZSBhbiBhdWRpdCBtdXN0IHJlYWNoIHRvIGJlIG1hcmtlZCB7eyBwYXNzTGFiZWwgfX0uIEFueXRoaW5nIGJlbG93IGl0IGlzIG1hcmtlZCB7eyBmYWlsTGFiZWwgfX0uPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2Ytcm93IGNmLXJvdy0td3JhcCBjZi1yb3ctLXRvcFwiICpuZ0lmPVwicGFzc0ZhaWxPblwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNmLWZpZWxkXCI+TWluaW11bSBzY29yZSB0byB7eyBwYXNzTGFiZWwgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNmLW51bVwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgbWluPVwiMVwiIG1heD1cIjEwMFwiIFsobmdNb2RlbCldPVwicGFzc1RocmVzaG9sZFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuPiU8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2YtcGlsbCBjZi1waWxsLS1wYXNzXCI+e3sgcGFzc0xhYmVsIH19IOKJpSB7eyBwYXNzVGhyZXNob2xkIH19JTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1waWxsIGNmLXBpbGwtLWZhaWxcIj57eyBmYWlsTGFiZWwgfX0gJmx0OyB7eyBwYXNzVGhyZXNob2xkIH19JTwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L3NlY3Rpb24+XHJcblxyXG4gICAgICA8IS0tID09PT09IEFwcHJvdmVyIENvbnRyb2xzID09PT09IC0tPlxyXG4gICAgICA8c2VjdGlvbiBjbGFzcz1cImNmLWNhcmQgY2YtY2FyZC0tbGdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtYmxvY2stdGl0bGVcIj5BcHByb3ZlciBDb250cm9sczwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZi1zdGFja1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNmLXRvZ2dsZS1yb3dcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1sYWJlbFwiPkVkaXQgU3VibWl0dGVkIEF1ZGl0PC9zcGFuPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNmLXN3aXRjaFwiIFtjbGFzcy5pcy1vbl09XCJlZGl0U3VibWl0dGVkT25cIiAoY2xpY2spPVwidG9nZ2xlRWRpdFN1Ym1pdHRlZCgpXCI+PHNwYW4+PC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtaGludCBjZi1oaW50LS10aWdodFwiPkFsbG93IEFwcHJvdmVycyB0byBlZGl0IHN1Ym1pdHRlZCBBdWRpdDwvZGl2PlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXRTdWJtaXR0ZWRPblwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2hpcFBpY2tlcjsgY29udGV4dDogeyBsaXN0OiAnZWRpdFVzZXJzJywgbGFyZ2U6IHRydWUgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtZXJyb3JcIiAqbmdJZj1cImVkaXRTdWJtaXR0ZWRFcnJvclwiPlxyXG4gICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjEwXCI+PC9jaXJjbGU+PGxpbmUgeDE9XCIxMlwiIHkxPVwiOFwiIHgyPVwiMTJcIiB5Mj1cIjEyXCI+PC9saW5lPjxsaW5lIHgxPVwiMTJcIiB5MT1cIjE2XCIgeDI9XCIxMi4wMVwiIHkyPVwiMTZcIj48L2xpbmU+PC9zdmc+XHJcbiAgICAgICAgICAgICAge3sgZWRpdFN1Ym1pdHRlZEVycm9yIH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNmLWdyaWQyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2Ytc3RhY2tcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWxhYmVsXCI+UmVkbyBFeHRlbnNpb248L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWlubGluZVwiPlxyXG4gICAgICAgICAgICAgIEV4dGVuZCByZWRvIHVwIHRvXHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duOyBjb250ZXh0OiB7IGtleTogJ3JlZG9FeHRlbnNpb24nLCBvcHRpb25zOiByZWRvRXh0ZW5zaW9uT3B0cyB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgRGF5cyB0aWxsIGFwcHJvdmFsXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvc2VjdGlvbj5cclxuXHJcbiAgICAgIDwhLS0gPT09PT0gVXNlciBWZXJpZmljYXRpb24gPT09PT0gLS0+XHJcbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2YtY2FyZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZi1ibG9jay10aXRsZVwiPlVzZXIgVmVyaWZpY2F0aW9uIENvbmZpZ3VyYXRpb248L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtYm94IGNmLWJveC0tcm93XCI+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNmLXN3aXRjaCBjZi1zd2l0Y2gtLXRvcFwiIFtjbGFzcy5pcy1vbl09XCJyZXF1aXJlUGhvdG9cIiAoY2xpY2spPVwicmVxdWlyZVBob3RvID0gIXJlcXVpcmVQaG90b1wiPjxzcGFuPjwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1zdGFjayBjZi1zdGFjay0teHNcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWxhYmVsXCI+UmVxdWlyZSBQaG90byBDYXB0dXJlPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1oaW50XCI+QnkgZW5hYmxpbmcsIHVzZXJzIG11c3QgY2FwdHVyZSB0aGVpciBwaG90byB0byBjb21wbGV0ZSBzdWJtaXNzaW9uPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtYm94IGNmLWJveC0tcm93XCI+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNmLXN3aXRjaCBjZi1zd2l0Y2gtLXRvcFwiIFtjbGFzcy5pcy1vbl09XCJyZXF1aXJlQWNrbm93bGVkZ21lbnRcIiAoY2xpY2spPVwicmVxdWlyZUFja25vd2xlZGdtZW50ID0gIXJlcXVpcmVBY2tub3dsZWRnbWVudFwiPjxzcGFuPjwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1zdGFjayBjZi1zdGFjay0teHNcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWxhYmVsXCI+UmVxdWlyZSBVc2VyIEFja25vd2xlZGdtZW50PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1oaW50XCI+QnkgZW5hYmxpbmcsIHVzZXJzIG11c3QgdHlwZSB0aGVpciBuYW1lIGFzIGFja25vd2xlZGdtZW50IHRvIGNvbXBsZXRlIHN1Ym1pc3Npb248L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L3NlY3Rpb24+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuPC9kaXY+XHJcbiJdfQ==
908
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtdjItY29uZmlndXJlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLWFuYWx5c2UtdHJheC9zcmMvbGliL2NvbXBvbmVudHMvYXVkaXQtdjIvY29uZmlndXJlL2F1ZGl0LXYyLWNvbmZpZ3VyZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2F1ZGl0LXYyL2NvbmZpZ3VyZS9hdWRpdC12Mi1jb25maWd1cmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUU5RixPQUFPLEVBQWMsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHakQsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sR0FBRyxNQUFNLGtCQUFrQixDQUFDO0FBQ25DLE9BQU8sUUFBUSxNQUFNLHVCQUF1QixDQUFDO0FBRTdDLE9BQU8sRUFBZSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7OztBQUc5RCxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFzQnZCLDBHQUEwRztBQUMxRyxNQUFNLGdCQUFnQixHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzlDLGlFQUFpRTtBQUNqRSxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFL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ekJVLHlCQUF5Qjs0RkFBekIseUJBQXlCLGdJQzVEdEMscWtxQ0E0akJBOzs0RkRoZ0JhLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSx3QkFBd0I7OE5BMElsQyxRQUFRO3NCQURQLFlBQVk7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgZm9ya0pvaW4sIG9mLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktc2hhcmVkJztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XHJcbmltcG9ydCB1dGMgZnJvbSAnZGF5anMvcGx1Z2luL3V0Yyc7XHJcbmltcG9ydCB0aW1lem9uZSBmcm9tICdkYXlqcy9wbHVnaW4vdGltZXpvbmUnO1xyXG5pbXBvcnQgeyBUcmF4U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RyYXguc2VydmljZSc7XHJcbmltcG9ydCB7IEF1ZGl0QWNjZXNzLCBhdWRpdEFjY2VzcyB9IGZyb20gJy4uL2F1ZGl0LXYyLWFjY2Vzcyc7XHJcbmltcG9ydCB7IEF1ZGl0U2VsZWN0T3B0aW9uIH0gZnJvbSAnLi4vc2VsZWN0L2F1ZGl0LXYyLXNlbGVjdC5jb21wb25lbnQnO1xyXG5cclxuZGF5anMuZXh0ZW5kKHV0Yyk7XHJcbmRheWpzLmV4dGVuZCh0aW1lem9uZSk7XHJcblxyXG4vKiogQSB1c2VyIGNoaXA6IGluaXRpYWxzLCBkaXNwbGF5IG5hbWUsIGVtYWlsLiBTdG9yZWQgb24gdGhlIGNoZWNrbGlzdCBhcyB7IG5hbWUsIHZhbHVlIH0uICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2hpcFVzZXIge1xyXG4gIGk6IHN0cmluZztcclxuICBuOiBzdHJpbmc7XHJcbiAgZTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZ1NlY3Rpb24ge1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgaXRlbXM6IHN0cmluZ1tdO1xyXG4gIG9wZW46IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0T3B0aW9uIHtcclxuICB2YWx1ZTogbnVtYmVyO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbn1cclxuXHJcbnR5cGUgQ2hpcExpc3QgPSAnb3duZXJzJyB8ICdhcHByb3ZlcnMnIHwgJ25vdGlmeVVzZXJzJyB8ICdyZWN1cnJpbmdVc2VycycgfCAnZGFpbHlVc2VycycgfCAncHJlU3VibWlzc2lvblVzZXJzJyB8ICdlZGl0VXNlcnMnO1xyXG5cclxuLyoqIFJlbWluZGVyIGludGVydmFscyBvZmZlcmVkLCBpbiBtaW51dGVzIGJlZm9yZSB0aGUgYXVkaXQgZW5kIHRpbWUgKGFzIHRoZSBDaGVja2xpc3QgQ29uZmlndXJlIHBhZ2UpLiAqL1xyXG5jb25zdCBSRU1JTkRFUl9NSU5VVEVTID0gWzMwLCA0NSwgNjAsIDc1LCA5MF07XHJcbi8qKiBUaGUgQ2hlY2tsaXN0IENvbmZpZ3VyZSBwYWdlIGFsbG93cyB1cCB0byB0aHJlZSByZW1pbmRlcnMuICovXHJcbmNvbnN0IE1BWF9SRU1JTkRFUlMgPSAzO1xyXG50eXBlIFNlbGVjdEtleSA9ICdyZWN1cnJpbmdUaHJlc2hvbGQnIHwgJ3JlZG9WYWxpZEZvcicgfCAncmVzcERlbGF5JyB8ICdkaXNwdXRlV2luZG93JyB8ICdyZWRvRXh0ZW5zaW9uJztcclxuLyoqIFwiU2VuZCBUbyA+IEFwcHJvdmVyXCIgdGlja3MgdGhhdCBuZWVkIGF0IGxlYXN0IG9uZSBhcHByb3ZlciB0byBzZW5kIHRvLiAqL1xyXG50eXBlIFNlbmRBcHByb3ZlcktleSA9ICdub3RpZnlTZW5kQXBwcm92ZXInIHwgJ3JlY3VycmluZ1NlbmRBcHByb3ZlcicgfCAnZGFpbHlTZW5kQXBwcm92ZXInO1xyXG5cclxuLyoqXHJcbiAqIE1hbmFnZSAtPiBDb25maWd1cmUgZm9yIG9uZSBhdWRpdCAoYD9jaGVja2xpc3RJZD1gKS5cclxuICpcclxuICogVGhlIGF1ZGl0IGlzIGEgY2hlY2tsaXN0LCBzbyB0aGlzIHBhZ2UgcmVhZHMgYW5kIHdyaXRlcyB0aGUgU0FNRSBmaWVsZHMgdGhlIENoZWNrbGlzdFxyXG4gKiBDb25maWd1cmUgcGFnZSB1c2VzIChHRVQgL3RyYXgvZ2V0Q29uZmlnRGV0YWlscywgUE9TVCAvdHJheC9jaGVja2xpc3RDb25maWd1cmV2MSk6XHJcbiAqIG93bmVyLCBhcHByb3ZlciwgcmVtYWluZGVyLCBub3RpZnlGbGFncywgcmVjdXJyaW5nRmxhZywgYXV0b0VtYWlsLCBleHBvcnQsIHJlZG9WYWxpZGl0eSxcclxuICogcmVkb0V4dGVuc2lvbiwgYXV0b0NyZWF0ZVRhc2ssIHVzZXJWZXJpZmljYXRpb24sIHNob3dBcHByb3ZlZFJlc3BvbnNlLCByZXNwb25zZVZpc2liaWxpdHkoK0hvdXJzKSxcclxuICogc2hhcmVSZXBvcnRQb3N0QXBwcm92YWwsIGNoZWNrTGlzdERlc2NyaXB0aW9uLiBBdWRpdC1vbmx5IHNldHRpbmdzIHRoYXQgdGhlIGNoZWNrbGlzdCBzY2hlbWFcclxuICogaGFzIG5vIGZpZWxkIGZvciAocGFzcyBtYXJrLCBkaXNwdXRlIHdpbmRvdywgcHJlLXN1Ym1pc3Npb24gYWNjZXNzLCBlZGl0LXN1Ym1pc3Npb24gdXNlcnMpXHJcbiAqIGFyZSBrZXB0IG9uIGF1ZGl0Y29uZmlnIHZpYSBQT1NUIC90cmF4L2F1ZGl0L2NvbmZpZy9zYXZlLlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItYXVkaXQtdjItY29uZmlndXJlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXVkaXQtdjItY29uZmlndXJlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vYXVkaXQtdjItY29uZmlndXJlLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXVkaXRWMkNvbmZpZ3VyZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBjaGVja2xpc3RJZCA9ICcnO1xyXG4gIGF1ZGl0TmFtZSA9ICcnO1xyXG4gIGRlc2NyaXB0aW9uID0gJyc7XHJcbiAgcHVibGlzaGVkID0gZmFsc2U7XHJcbiAgc2NoZWR1bGUgPSAn4oCUJztcclxuICBzY2hlZHVsZVdpbmRvdyA9ICfigJQnO1xyXG4gIHNlY3Rpb25zOiBDb25maWdTZWN0aW9uW10gPSBbXTtcclxuXHJcbiAgLy8gLS0tLSBjaGVja2xpc3QgZmllbGRzIChzYXZlZCBvbiBjaGVja2xpc3Rjb25maWcpIC0tLS1cclxuICBvd25lcnM6IENoaXBVc2VyW10gPSBbXTtcclxuICBhcHByb3Zlck9uID0gZmFsc2U7XHJcbiAgYXBwcm92ZXJzOiBDaGlwVXNlcltdID0gW107XHJcbiAgLyoqIFRoZSBjbGllbnQncyBzdXBlcmFkbWluIChmcm9tIHRoZSB1c2VyIGxpc3QpLCB0aGUgdjEgZGVmYXVsdCBhcHByb3ZlciBmb3IgVGFuZ28gdXNlcnMgYW5kIHJvbGUgJ3VzZXInLiAqL1xyXG4gIHByaXZhdGUgc3VwZXJBZG1pbjogQ2hpcFVzZXIgfCBudWxsID0gbnVsbDtcclxuICByZW1pbmRlck9uID0gZmFsc2U7XHJcbiAgLyoqIGNoZWNrbGlzdC5yZW1haW5kZXI6IG1pbnV0ZXMgYmVmb3JlIHRoZSBlbmQgdGltZSBhdCB3aGljaCB0aGUgYXVkaXRvciBnZXRzIGEgcHVzaCByZW1pbmRlci4gKi9cclxuICByZW1pbmRlcnM6IG51bWJlcltdID0gW107XHJcbiAgLyoqIE9wdGlvbnMgcGVyIHJlbWluZGVyIHJvdzogZXZlcnkgaW50ZXJ2YWwgbm90IGFscmVhZHkgdXNlZCBieSBhbm90aGVyIHJvdy4gKi9cclxuICByZW1pbmRlck9wdHM6IEF1ZGl0U2VsZWN0T3B0aW9uW11bXSA9IFtdO1xyXG4gIHJlYWRvbmx5IG1heFJlbWluZGVycyA9IE1BWF9SRU1JTkRFUlM7XHJcbiAgLy8gTm90aWZ5IEZsYWdzIChjaGVja2xpc3Qubm90aWZ5RmxhZ3MpOiB3aG8gZ2V0cyB0aGUgZmxhZyBlbWFpbHMuXHJcbiAgbm90aWZ5RmxhZ3NPbiA9IGZhbHNlO1xyXG4gIG5vdGlmeVNlbmRBcHByb3ZlciA9IHRydWU7XHJcbiAgbm90aWZ5U2VuZEN1c3RvbSA9IGZhbHNlO1xyXG4gIG5vdGlmeVVzZXJzOiBDaGlwVXNlcltdID0gW107XHJcbiAgLy8gTm90aWZ5IG9uIFJlY3VycmluZyBGbGFncyAoY2hlY2tsaXN0LnJlY3VycmluZ0ZsYWcpOiB0aHJlc2hvbGQgKyBpdHMgb3duIHJlY2lwaWVudHMuXHJcbiAgcmVjdXJyaW5nRmxhZ3NPbiA9IGZhbHNlO1xyXG4gIHJlY3VycmluZ1RocmVzaG9sZCA9IDM7XHJcbiAgcmVjdXJyaW5nU2VuZEFwcHJvdmVyID0gdHJ1ZTtcclxuICByZWN1cnJpbmdTZW5kQ3VzdG9tID0gZmFsc2U7XHJcbiAgLyoqIFN0b3JlZCBhcyBub3RpZnlUeXBlICdzYW1lQXNOb3RpZnknOiB0aGUgc2VydmVyIG1haWxzIHdob2V2ZXIgTm90aWZ5IEZsYWdzIG1haWxzIGF0IHNlbmQgdGltZS4gKi9cclxuICByZWN1cnJpbmdTYW1lQXNOb3RpZnkgPSBmYWxzZTtcclxuICByZWN1cnJpbmdVc2VyczogQ2hpcFVzZXJbXSA9IFtdO1xyXG4gIGRhaWx5UmVwb3J0T24gPSBmYWxzZTtcclxuICBkYWlseVNlbmRBcHByb3ZlciA9IHRydWU7XHJcbiAgZGFpbHlTZW5kQ3VzdG9tID0gZmFsc2U7XHJcbiAgZGFpbHlVc2VyczogQ2hpcFVzZXJbXSA9IFtdO1xyXG4gIHNoYXJlUG9zdEFwcHJvdmFsID0gZmFsc2U7XHJcbiAgZXhwb3J0U3VibWlzc2lvbk9uID0gZmFsc2U7XHJcbiAgcmVkb1ZhbGlkRm9yID0gNztcclxuICBhdXRvQ3JlYXRlVGFza09uID0gZmFsc2U7XHJcbiAgLyoqIEF1dG8tdGFzayBzZXR0aW5ncyAoYXMgdGhlIENoZWNrbGlzdCBDb25maWd1cmUgcGFnZSk6IHdobyBnZXRzIHRoZSB0YXNrIGFuZCBmb3IgaG93IG1hbnkgZGF5cy4gKi9cclxuICB0YXNrQXNzaWduZWU6ICdzdWJtaXR0ZXInIHwgJ3N0b3JlJyA9ICdzdWJtaXR0ZXInO1xyXG4gIHRhc2tWYWxpZGl0eSA9IDEwO1xyXG4gIHJlYWRvbmx5IHRhc2tWYWxpZGl0eU9wdGlvbnMgPSBbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDE1LCAyMCwgMjUsIDMwXS5tYXAoZCA9PiAoeyB2YWx1ZTogZCwgbGFiZWw6IFN0cmluZyhkKSB9KSk7XHJcbiAgc2hvd1Jlc3BvbnNlSW5BcHAgPSB0cnVlO1xyXG4gIHJlc3BvbnNlVmlzaWJpbGl0eTogJ3ByZScgfCAncG9zdCcgPSAncG9zdCc7XHJcbiAgcmVzcERlbGF5ID0gMjtcclxuICByZXF1aXJlUGhvdG8gPSBmYWxzZTtcclxuICByZXF1aXJlQWNrbm93bGVkZ21lbnQgPSBmYWxzZTtcclxuICByZWRvRXh0ZW5zaW9uID0gMTtcclxuXHJcbiAgLy8gLS0tLSBhdWRpdC1vbmx5IGZpZWxkcyAoc2F2ZWQgb24gYXVkaXRjb25maWcpIC0tLS1cclxuICBwYXNzRmFpbE9uID0gdHJ1ZTtcclxuICBwYXNzVGhyZXNob2xkID0gNzU7XHJcbiAgZGlzcHV0ZU9uID0gdHJ1ZTtcclxuICBkaXNwdXRlV2luZG93ID0gNDg7XHJcbiAgcHJlU3VibWlzc2lvbkFjY2Vzc09uID0gZmFsc2U7XHJcbiAgcHJlU3VibWlzc2lvblVzZXJzOiBDaGlwVXNlcltdID0gW107XHJcbiAgZWRpdFN1Ym1pdHRlZE9uID0gZmFsc2U7XHJcbiAgZWRpdFVzZXJzOiBDaGlwVXNlcltdID0gW107XHJcblxyXG4gIHBhc3NMYWJlbCA9ICdQYXNzJztcclxuICBmYWlsTGFiZWwgPSAnRmFpbCc7XHJcblxyXG4gIC8qKiBDbGllbnQgdXNlcnMgb2ZmZXJlZCBieSB0aGUgY2hpcCBwaWNrZXJzLiAqL1xyXG4gIHVzZXJzOiBDaGlwVXNlcltdID0gW107XHJcbiAgZHJhZnRzOiBSZWNvcmQ8Q2hpcExpc3QsIHN0cmluZz4gPSB7IG93bmVyczogJycsIGFwcHJvdmVyczogJycsIG5vdGlmeVVzZXJzOiAnJywgcmVjdXJyaW5nVXNlcnM6ICcnLCBkYWlseVVzZXJzOiAnJywgcHJlU3VibWlzc2lvblVzZXJzOiAnJywgZWRpdFVzZXJzOiAnJyB9O1xyXG4gIC8qKiBXaGljaCBjaGlwIGJveCBpcyBzaG93aW5nIHN1Z2dlc3Rpb25zLCBhbmQgd2hpY2ggZHJvcGRvd24gaXMgb3Blbi4gKi9cclxuICBvcGVuQ2hpcHM6IENoaXBMaXN0IHwgbnVsbCA9IG51bGw7XHJcbiAgb3BlblNlbGVjdDogU2VsZWN0S2V5IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8qKiBTdG9yZXMgLyB1c2VycyBhbHJlYWR5IGFzc2lnbmVkIHRvIHRoZSBjaGVja2xpc3QuIEF1ZGl0cyBnZXQgdGhlbSBmcm9tIGEgc2NoZWR1bGVcclxuICAgKiAgKE1hbmFnZSDigLogU2NoZWR1bGUgSW5mbyksIHNvIHRoaXMgcGFnZSBvbmx5IHJlYWRzIHRoZSBjb3VudC4gKi9cclxuICBhc3NpZ25lZENvdW50ID0gMDtcclxuICAvKiogUHVibGlzaCB3aXRoIG5vdGhpbmcgYXNzaWduZWQgc2F2ZXMgZmlyc3QsIHRoZW4gb3BlbnMgQ3JlYXRlIHNjaGVkdWxlIGZvciB0aGlzIGF1ZGl0LiAqL1xyXG4gIHByaXZhdGUgc2NoZWR1bGVBZnRlclNhdmUgPSBmYWxzZTtcclxuICAvKiogUHVibGlzaCBzdGF0ZSBiZWZvcmUgdGhlIGN1cnJlbnQgc2F2ZSwgc28gdGhlIHRvYXN0IGNhbiBzYXkgXCJwdWJsaXNoZWRcIiB2cyBcInNhdmVkIGFuZCBwdWJsaXNoZWRcIi4gKi9cclxuICBwcml2YXRlIHdhc1B1Ymxpc2hlZCA9IGZhbHNlO1xyXG5cclxuICByZWFkb25seSB0aHJlc2hvbGRPcHRzOiBTZWxlY3RPcHRpb25bXSA9IFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMF0ubWFwKG4gPT4gKHsgdmFsdWU6IG4sIGxhYmVsOiBTdHJpbmcobikgfSkpO1xyXG4gIHJlYWRvbmx5IHJlZG9EYXlPcHRzOiBTZWxlY3RPcHRpb25bXSA9IFsxLCAyLCAzLCA0LCA1LCA2LCA3LCAxMCwgMTQsIDIxLCAzMF0ubWFwKG4gPT4gKHsgdmFsdWU6IG4sIGxhYmVsOiBTdHJpbmcobikgfSkpO1xyXG4gIHJlYWRvbmx5IHJlc3BEZWxheU9wdHM6IFNlbGVjdE9wdGlvbltdID0gWzAsIDIsIDYsIDEyLCAyNCwgNDhdLm1hcChuID0+ICh7IHZhbHVlOiBuLCBsYWJlbDogbiA9PT0gMCA/ICdJbW1lZGlhdGVseScgOiBuICsgJyBob3VycycgfSkpO1xyXG4gIHJlYWRvbmx5IGRpc3BXaW5kb3dPcHRzOiBTZWxlY3RPcHRpb25bXSA9IFs2LCAxMiwgMjQsIDQ4LCA3MiwgMTY4XS5tYXAobiA9PiAoeyB2YWx1ZTogbiwgbGFiZWw6IG4gPT09IDE2OCA/ICc3IGRheXMnIDogbiArICcgaG91cnMnIH0pKTtcclxuICByZWFkb25seSByZWRvRXh0ZW5zaW9uT3B0czogU2VsZWN0T3B0aW9uW10gPSBbMSwgMiwgMywgNCwgNSwgNiwgN10ubWFwKG4gPT4gKHsgdmFsdWU6IG4sIGxhYmVsOiBTdHJpbmcobikgfSkpO1xyXG5cclxuICAvKiogU3RhcnRzIHRydWUgc28gdGhlIHNldHRpbmdzIHNoaW1tZXIgaW5zdGVhZCBvZiBzaG93aW5nIGRlZmF1bHRzIHRoYXQgdGhlbiBqdW1wLiAqL1xyXG4gIGxvYWRpbmcgPSB0cnVlO1xyXG4gIHNhdmluZyA9IGZhbHNlO1xyXG4gIGxvYWRFcnJvciA9ICcnO1xyXG4gIC8qKiAvYXVkaXQvY29uZmlnL2dldCBmYWlsZWQ6IHNhdmluZyBub3cgd291bGQgb3ZlcndyaXRlIHRoZSBzdG9yZWQgcGFzcyBtYXJrIC8gYWNjZXNzIHNldHRpbmdzIHdpdGggZGVmYXVsdHMuICovXHJcbiAgYXVkaXRTZXR0aW5nc0xvYWRGYWlsZWQgPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBjbGllbnRJZCA9ICcnO1xyXG4gIC8qKiBUaGUgZ2V0Q29uZmlnRGV0YWlscyBwYXlsb2FkLCBzZW50IGJhY2sgd2hvbGUgb24gc2F2ZSAoYXMgdGhlIENoZWNrbGlzdCBDb25maWd1cmUgcGFnZSBkb2VzKS4gKi9cclxuICBwcml2YXRlIGNvbmZpZ0RhdGE6IGFueSA9IG51bGw7XHJcbiAgLyoqIFB1Ymxpc2ggLyBTYXZlIG5lZWQgdGhlIENoZWNrbGlzdCBlZGl0IHBlcm1pc3Npb24gKHRoZSBzYXZlIEFQSXMgY2hlY2sgaXQgdG9vKS4gKi9cclxuICBhY2Nlc3M6IEF1ZGl0QWNjZXNzID0geyBjYW5BZGQ6IGZhbHNlLCBjYW5FZGl0OiBmYWxzZSB9O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdHJheFNlcnZpY2U6IFRyYXhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSB0b2FzdDogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGF1ZGl0QWNjZXNzKHRoaXMuZ3MpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoYWNjZXNzID0+IHtcclxuICAgICAgdGhpcy5hY2Nlc3MgPSBhY2Nlc3M7XHJcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIHRoaXMub25PdXRzaWRlLCB0cnVlKTtcclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCB0aGlzLm9uT3V0c2lkZSwgdHJ1ZSk7XHJcbiAgICB0aGlzLmNoZWNrbGlzdElkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldCgnY2hlY2tsaXN0SWQnKSB8fCAnJztcclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgIGlmICghZGF0YT8uY2xpZW50IHx8IGRhdGEuY2xpZW50ID09PSB0aGlzLmNsaWVudElkKSB7IHJldHVybjsgfVxyXG4gICAgICB0aGlzLmNsaWVudElkID0gZGF0YS5jbGllbnQ7XHJcbiAgICAgIHRoaXMubG9hZCgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgdGhpcy5vbk91dHNpZGUsIHRydWUpO1xyXG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIHRoaXMub25PdXRzaWRlLCB0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEVzY2FwZSBjbG9zZXMgdGhlIG9wZW4gZHJvcGRvd24gLyBzdWdnZXN0aW9uIGxpc3QuICovXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUnKVxyXG4gIG9uRXNjYXBlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5vcGVuU2VsZWN0ID0gbnVsbDtcclxuICAgIHRoaXMub3BlbkNoaXBzID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgcHJlc3Mgb3IgZm9jdXMgb3V0c2lkZSB0aGUgb3BlbiBkcm9wZG93biAvIHN1Z2dlc3Rpb24gbGlzdCBjbG9zZXMgaXQuIExpc3RlbmVkIHRvIGluIHRoZVxyXG4gICAqIGNhcHR1cmUgcGhhc2UsIHNvIG5vIGVsZW1lbnQgdGhhdCBzdG9wcyBjbGljayBwcm9wYWdhdGlvbiBjYW4ga2VlcCBpdCBvcGVuLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgb25PdXRzaWRlID0gKGV2ZW50OiBFdmVudCk6IHZvaWQgPT4ge1xyXG4gICAgaWYgKCF0aGlzLm9wZW5TZWxlY3QgJiYgIXRoaXMub3BlbkNoaXBzKSB7IHJldHVybjsgfVxyXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcclxuICAgIGNvbnN0IGluc2lkZSA9IHRhcmdldCAmJiB0eXBlb2YgdGFyZ2V0LmNsb3Nlc3QgPT09ICdmdW5jdGlvbicgJiYgdGFyZ2V0LmNsb3Nlc3QoJy5jZi1zZWxlY3QuaXMtb3BlbiwgLmNmLWNoaXBib3guaXMtb3BlbicpO1xyXG4gICAgaWYgKGluc2lkZSkgeyByZXR1cm47IH1cclxuICAgIHRoaXMub3BlblNlbGVjdCA9IG51bGw7XHJcbiAgICB0aGlzLm9wZW5DaGlwcyA9IG51bGw7XHJcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICB9O1xyXG5cclxuICAvLyAtLS0tIGxvYWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHByaXZhdGUgbG9hZCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5jaGVja2xpc3RJZCkge1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5sb2FkRXJyb3IgPSAnTm8gYXVkaXQgc2VsZWN0ZWQuIE9wZW4gQ29uZmlndXJlIGZyb20gdGhlIE1hbmFnZSBwYWdlLic7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmxvYWRFcnJvciA9ICcnO1xyXG4gICAgdGhpcy5hdWRpdFNldHRpbmdzTG9hZEZhaWxlZCA9IGZhbHNlO1xyXG4gICAgLy8gQSBmYWlsZWQgY2FsbCByZXNvbHZlcyB0byB7IGZhaWxlZDogZXJyb3IgfSBzbyBlYWNoIHBhcnQgY2FuIHNheSB3aGF0IHdlbnQgd3JvbmcuXHJcbiAgICBjb25zdCBzYWZlID0gKG86IGFueSkgPT4gby5waXBlKGNhdGNoRXJyb3IoKGU6IGFueSkgPT4gb2YoeyBmYWlsZWQ6IGUgfSkpKTtcclxuICAgIGZvcmtKb2luKHtcclxuICAgICAgZGV0YWlsczogc2FmZSh0aGlzLnRyYXhTZXJ2aWNlLmF1ZGl0R2V0Q29uZmlnKHsgY2hlY2tMaXN0SWQ6IHRoaXMuY2hlY2tsaXN0SWQsIGNsaWVudElkOiB0aGlzLmNsaWVudElkIH0pKSxcclxuICAgICAgYXVkaXQ6IHNhZmUodGhpcy50cmF4U2VydmljZS5hdWRpdENvbmZpZ0dldCh7IGNsaWVudElkOiB0aGlzLmNsaWVudElkLCBjaGVja2xpc3RJZDogdGhpcy5jaGVja2xpc3RJZCB9KSksXHJcbiAgICAgIHVzZXJzOiBzYWZlKHRoaXMudHJheFNlcnZpY2UuZ2V0Q2xpZW50VXNlcih0aGlzLmNsaWVudElkKSksXHJcbiAgICAgIGxhYmVsczogc2FmZSh0aGlzLnRyYXhTZXJ2aWNlLmF1ZGl0U2V0dGluZ3NHZXQodGhpcy5jbGllbnRJZCkpXHJcbiAgICB9KS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh7IGRldGFpbHMsIGF1ZGl0LCB1c2VycywgbGFiZWxzIH06IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBjbGllbnRVc2VyczogYW55W10gPSB1c2Vycz8uY29kZSA9PT0gMjAwID8gdXNlcnMuZGF0YSB8fCBbXSA6IFtdO1xyXG4gICAgICAvLyBUaGUgY2xpZW50J3Mgc3VwZXJhZG1pbjogdGhlIGRlZmF1bHQgYXBwcm92ZXIgZm9yIFRhbmdvIHVzZXJzIGFuZCByb2xlICd1c2VyJyAodjEgQ29uZmlndXJlKS5cclxuICAgICAgY29uc3Qgc3VwZXJBZG1pbiA9IGNsaWVudFVzZXJzLmZpbmQoKHU6IGFueSkgPT4gdT8ucm9sZSA9PT0gJ3N1cGVyYWRtaW4nICYmIHU/LmVtYWlsKTtcclxuICAgICAgdGhpcy5zdXBlckFkbWluID0gc3VwZXJBZG1pbiA/IHRoaXMuY2hpcChzdXBlckFkbWluLnVzZXJOYW1lLCBzdXBlckFkbWluLmVtYWlsKSA6IG51bGw7XHJcbiAgICAgIHRoaXMudXNlcnMgPSBjbGllbnRVc2Vyc1xyXG4gICAgICAgIC5tYXAoKHU6IGFueSkgPT4gdGhpcy5jaGlwKHUudXNlck5hbWUsIHUuZW1haWwpKVxyXG4gICAgICAgIC5maWx0ZXIoKHU6IENoaXBVc2VyKSA9PiB1LmUpO1xyXG4gICAgICB0aGlzLnBhc3NMYWJlbCA9IGxhYmVscz8uZGF0YT8ucGFzc0xhYmVsIHx8ICdQYXNzJztcclxuICAgICAgdGhpcy5mYWlsTGFiZWwgPSBsYWJlbHM/LmRhdGE/LmZhaWxMYWJlbCB8fCAnRmFpbCc7XHJcblxyXG4gICAgICBjb25zdCBkID0gZGV0YWlscz8uY29kZSA9PT0gMjAwID8gZGV0YWlscy5kYXRhPy5jaGVja0xpc3REZXRhaWxzIDogbnVsbDtcclxuICAgICAgaWYgKCFkKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgLy8gVGhlIEFQSSBhbnN3ZXJzIDIwNCAobm8gYm9keSkgd2hlbiB0aGUgYXVkaXQgZG9lcyBub3QgZXhpc3Qgb3IgYmVsb25ncyB0byBhbm90aGVyIGNsaWVudC5cclxuICAgICAgICB0aGlzLmxvYWRFcnJvciA9IGRldGFpbHM/LmZhaWxlZFxyXG4gICAgICAgICAgPyB0aGlzLmFwaUVycm9yKGRldGFpbHMuZmFpbGVkLCAnQ291bGQgbm90IGxvYWQgdGhpcyBhdWRpdC4gUmVsb2FkIHRoZSBwYWdlIHRvIHRyeSBhZ2Fpbi4nLCBmYWxzZSlcclxuICAgICAgICAgIDogJ1RoaXMgYXVkaXQgd2FzIG5vdCBmb3VuZC4gSXQgbWF5IGhhdmUgYmVlbiBkZWxldGVkLiBPcGVuIENvbmZpZ3VyZSBhZ2FpbiBmcm9tIHRoZSBNYW5hZ2UgcGFnZS4nO1xyXG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNvbmZpZ0RhdGEgPSBkZXRhaWxzLmRhdGE7XHJcbiAgICAgIHRoaXMuYXBwbHlDaGVja2xpc3QoZCk7XHJcbiAgICAgIHRoaXMuYXBwbHlBc3NpZ25tZW50KGQpO1xyXG4gICAgICB0aGlzLmF1ZGl0U2V0dGluZ3NMb2FkRmFpbGVkID0gYXVkaXQ/LmNvZGUgIT09IDIwMDtcclxuICAgICAgdGhpcy5hcHBseUF1ZGl0KHRoaXMuYXVkaXRTZXR0aW5nc0xvYWRGYWlsZWQgPyBudWxsIDogYXVkaXQuZGF0YT8uY29uZmlnKTtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIGlmICh0aGlzLmF1ZGl0U2V0dGluZ3NMb2FkRmFpbGVkKSB7XHJcbiAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdDb3VsZCBub3QgbG9hZCB0aGUgc2NvcmluZywgZGlzcHV0ZSBhbmQgYWNjZXNzIHNldHRpbmdzIG9mIHRoaXMgYXVkaXQuIFJlbG9hZCB0aGUgcGFnZSBiZWZvcmUgc2F2aW5nLCBzbyB0aGV5IGFyZSBub3QgcmVzZXQuJyk7XHJcbiAgICAgIH0gZWxzZSBpZiAodXNlcnM/LmZhaWxlZCkge1xyXG4gICAgICAgIHRoaXMudG9hc3QuZ2V0V2FybmluZ1RvYXN0KCdDb3VsZCBub3QgbG9hZCB0aGUgdXNlcnMgb2YgdGhpcyBjbGllbnQsIHNvIHRoZSB1c2VyIHBpY2tlcnMgaGF2ZSBubyBzdWdnZXN0aW9ucy4gWW91IGNhbiBzdGlsbCBhZGQgYSB1c2VyIGJ5IHR5cGluZyB0aGVpciBmdWxsIGVtYWlsLicpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKiogZ2V0Q29uZmlnRGV0YWlscyBsaXN0cyB0aGUgYXNzaWdubWVudCBhcyB7IGlkLCB0eXBlIH0gcGFpcnMgKHN0b3JlcyAvIGNsdXN0ZXJzIG9yIHVzZXJzIC8gdGVhbXMpLiAqL1xyXG4gIHByaXZhdGUgYXBwbHlBc3NpZ25tZW50KGQ6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgY291bnQgPSAobGlzdDogYW55KSA9PiAoQXJyYXkuaXNBcnJheShsaXN0KSA/IGxpc3QubGVuZ3RoIDogMCk7XHJcbiAgICB0aGlzLmFzc2lnbmVkQ291bnQgPSBjb3VudChkLnNpbmdsZUFzc2lnbikgKyBjb3VudChkLmdyb3VwQXNzaWduKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlDaGVja2xpc3QoZDogYW55KTogdm9pZCB7XHJcbiAgICAvLyBOZXZlciBjb25maWd1cmVkIHlldDogbm8gc2NoZWR1bGUgd2luZG93IGhhcyBiZWVuIHNhdmVkIChjaGVja2VkIGJlZm9yZSB0aGUgZGVmYXVsdHMgYmVsb3cgZmlsbCBpdCkuXHJcbiAgICBjb25zdCBmaXJzdENvbmZpZ3VyZSA9ICFkLnNjaGVkdWxlU3RhcnRUaW1lO1xyXG4gICAgLy8gQSBuZXcgYXVkaXQgaGFzIG5vIHNjaGVkdWxlIHdpbmRvdywgYW5kIGNoZWNrbGlzdENvbmZpZ3VyZXYxIGNhbm5vdCBzdG9yZSBhbiBlbXB0eSBvbmU7XHJcbiAgICAvLyBzYW1lIGRlZmF1bHRzIHRoZSBDaGVja2xpc3QgQ29uZmlndXJlIHBhZ2UgYXBwbGllcyBvbiBsb2FkLlxyXG4gICAgaWYgKCFkLnNjaGVkdWxlU3RhcnRUaW1lKSB7IGQuc2NoZWR1bGVTdGFydFRpbWUgPSAnMTA6MDAgQU0nOyB9XHJcbiAgICBpZiAoIWQuc2NoZWR1bGVFbmRUaW1lKSB7IGQuc2NoZWR1bGVFbmRUaW1lID0gJzEwOjAwIFBNJzsgfVxyXG4gICAgdGhpcy5hdWRpdE5hbWUgPSBkLmNoZWNrTGlzdE5hbWUgfHwgJ+KAlCc7XHJcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gZC5jaGVja0xpc3REZXNjcmlwdGlvbiB8fCAnJztcclxuICAgIHRoaXMucHVibGlzaGVkID0gISFkLnB1Ymxpc2g7XHJcbiAgICB0aGlzLnNjaGVkdWxlID0gZC5zY2hlZHVsZVJlcGVhdGVkVHlwZSB8fCBkLnNjaGVkdWxlID8gdGhpcy50aXRsZUNhc2UoZC5zY2hlZHVsZVJlcGVhdGVkVHlwZSB8fCBkLnNjaGVkdWxlKSA6ICfigJQnO1xyXG4gICAgdGhpcy5zY2hlZHVsZVdpbmRvdyA9IGQuc2NoZWR1bGVTdGFydFRpbWUgJiYgZC5zY2hlZHVsZUVuZFRpbWUgPyBkLnNjaGVkdWxlU3RhcnRUaW1lICsgJyB0byAnICsgZC5zY2hlZHVsZUVuZFRpbWUgOiAn4oCUJztcclxuICAgIHRoaXMuc2VjdGlvbnMgPSAoZC5zZWN0aW9ucyB8fCBbXSkubWFwKChzZWM6IGFueSwgaTogbnVtYmVyKSA9PiAoe1xyXG4gICAgICBsYWJlbDogc2VjLm5hbWUgfHwgJ1NlY3Rpb24gJyArIChpICsgMSksXHJcbiAgICAgIGl0ZW1zOiAoc2VjLnF1ZXN0aW9ucyB8fCBbXSkubWFwKChxOiBhbnkpID0+IHE/LnFuYW1lIHx8IFN0cmluZyhxKSksXHJcbiAgICAgIG9wZW46IGkgPT09IDBcclxuICAgIH0pKTtcclxuXHJcbiAgICB0aGlzLm93bmVycyA9IHRoaXMuY2hpcHMoZC5vd25lcik7XHJcbiAgICAvLyBObyBvd25lciB5ZXQgKGF1ZGl0cyBjcmVhdGVkIGJlZm9yZSB0aGUgY3JlYXRvciB3YXMgc3RvcmVkIGFzIG9uZSk6IHRoZSBsb2dnZWQtaW4gdXNlciwgc2F2ZWQgd2l0aCB0aGUgcGFnZS5cclxuICAgIGlmICghdGhpcy5vd25lcnMubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IG1lID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlci1pbmZvJykgfHwgJ3t9Jyk7XHJcbiAgICAgIGlmIChtZT8uZW1haWwpIHsgdGhpcy5vd25lcnMgPSBbdGhpcy5jaGlwKG1lLnVzZXJOYW1lLCBtZS5lbWFpbCldOyB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmFwcHJvdmVycyA9IHRoaXMuY2hpcHMoZC5hcHByb3Zlcik7XHJcbiAgICAvLyB2MSBDb25maWd1cmUgZGVmYXVsdCBhcHByb3Zlciwgb24gdGhlIGZpcnN0IENvbmZpZ3VyZSBvbmx5IChsYXRlciBhbiBlbXB0eSBsaXN0IG1lYW5zIEFwcHJvdmVyIHdhcyB0dXJuZWRcclxuICAgIC8vIG9mZiBvbiBwdXJwb3NlKTogVGFuZ28gdXNlcnMgYW5kIGNsaWVudCB1c2VycyB3aXRoIHJvbGUgJ3VzZXInIGdldCB0aGUgY2xpZW50J3Mgc3VwZXJhZG1pbiwgb3RoZXJzIHRoZW1zZWx2ZXMuXHJcbiAgICBpZiAoZmlyc3RDb25maWd1cmUgJiYgIXRoaXMuYXBwcm92ZXJzLmxlbmd0aCkge1xyXG4gICAgICBjb25zdCBtZSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXItaW5mbycpIHx8ICd7fScpO1xyXG4gICAgICBjb25zdCB0b1N1cGVyQWRtaW4gPSBtZT8udXNlclR5cGUgPT09ICd0YW5nbycgfHwgKG1lPy51c2VyVHlwZSA9PT0gJ2NsaWVudCcgJiYgbWU/LnJvbGUgPT09ICd1c2VyJyk7XHJcbiAgICAgIGNvbnN0IGZhbGxiYWNrID0gdG9TdXBlckFkbWluID8gdGhpcy5zdXBlckFkbWluIDogKG1lPy5lbWFpbCA/IHRoaXMuY2hpcChtZS51c2VyTmFtZSwgbWUuZW1haWwpIDogbnVsbCk7XHJcbiAgICAgIGlmIChmYWxsYmFjaykgeyB0aGlzLmFwcHJvdmVycyA9IFtmYWxsYmFja107IH1cclxuICAgIH1cclxuICAgIHRoaXMuYXBwcm92ZXJPbiA9IHRoaXMuYXBwcm92ZXJzLmxlbmd0aCA+IDA7XHJcbiAgICAvLyBTdG9yZWQgYXMgbWludXRlcyAobnVtYmVycyk7IGtlZXAgdGhlIGtub3duIGludGVydmFscywgdW5pcXVlLCBhdCBtb3N0IHRocmVlLlxyXG4gICAgY29uc3Qgc3RvcmVkOiBudW1iZXJbXSA9IChBcnJheS5pc0FycmF5KGQucmVtYWluZGVyKSA/IGQucmVtYWluZGVyIDogW10pLm1hcCgobTogYW55KSA9PiBOdW1iZXIobSkpO1xyXG4gICAgdGhpcy5yZW1pbmRlcnMgPSBzdG9yZWQuZmlsdGVyKChtLCBpKSA9PiBSRU1JTkRFUl9NSU5VVEVTLmluY2x1ZGVzKG0pICYmIHN0b3JlZC5pbmRleE9mKG0pID09PSBpKS5zbGljZSgwLCBNQVhfUkVNSU5ERVJTKTtcclxuICAgIHRoaXMucmVtaW5kZXJPbiA9IHRoaXMucmVtaW5kZXJzLmxlbmd0aCA+IDA7XHJcbiAgICB0aGlzLnJlZnJlc2hSZW1pbmRlck9wdHMoKTtcclxuXHJcbiAgICBjb25zdCBuZiA9IGQubm90aWZ5RmxhZ3MgfHwge307XHJcbiAgICBjb25zdCBuZlR5cGVzOiBzdHJpbmdbXSA9IEFycmF5LmlzQXJyYXkobmYubm90aWZ5VHlwZSkgPyBuZi5ub3RpZnlUeXBlIDogW107XHJcbiAgICB0aGlzLm5vdGlmeUZsYWdzT24gPSBuZlR5cGVzLmxlbmd0aCA+IDA7XHJcbiAgICB0aGlzLm5vdGlmeVNlbmRBcHByb3ZlciA9IG5mVHlwZXMuaW5jbHVkZXMoJ2FwcHJvdmVyJykgfHwgIXRoaXMubm90aWZ5RmxhZ3NPbjtcclxuICAgIHRoaXMubm90aWZ5U2VuZEN1c3RvbSA9IG5mVHlwZXMuaW5jbHVkZXMoJ2N1c3RvbScpO1xyXG4gICAgdGhpcy5ub3RpZnlVc2VycyA9IHRoaXMuY2hpcHMobmYudXNlcnMpO1xyXG5cclxuICAgIGNvbnN0IHJmID0gZC5yZWN1cnJpbmdGbGFnIHx8IHt9O1xyXG4gICAgY29uc3QgcmZUeXBlczogc3RyaW5nW10gPSBBcnJheS5pc0FycmF5KHJmLm5vdGlmeVR5cGUpID8gcmYubm90aWZ5VHlwZSA6IFtdO1xyXG4gICAgdGhpcy5yZWN1cnJpbmdGbGFnc09uID0gcmZUeXBlcy5sZW5ndGggPiAwO1xyXG4gICAgdGhpcy5yZWN1cnJpbmdTZW5kQXBwcm92ZXIgPSByZlR5cGVzLmluY2x1ZGVzKCdhcHByb3ZlcicpIHx8ICF0aGlzLnJlY3VycmluZ0ZsYWdzT247XHJcbiAgICB0aGlzLnJlY3VycmluZ1NlbmRDdXN0b20gPSByZlR5cGVzLmluY2x1ZGVzKCdjdXN0b20nKTtcclxuICAgIHRoaXMucmVjdXJyaW5nU2FtZUFzTm90aWZ5ID0gcmZUeXBlcy5pbmNsdWRlcygnc2FtZUFzTm90aWZ5Jyk7XHJcbiAgICB0aGlzLnJlY3VycmluZ1VzZXJzID0gdGhpcy5jaGlwcyhyZi51c2Vycyk7XHJcbiAgICB0aGlzLnJlY3VycmluZ1RocmVzaG9sZCA9IE51bWJlcihyZi50aHJlc2hvbGQpIHx8IDM7XHJcblxyXG4gICAgY29uc3QgYWUgPSBkLmF1dG9FbWFpbCB8fCB7fTtcclxuICAgIGNvbnN0IGFlVHlwZXM6IHN0cmluZ1tdID0gQXJyYXkuaXNBcnJheShhZS50eXBlKSA/IGFlLnR5cGUgOiBbXTtcclxuICAgIHRoaXMuZGFpbHlSZXBvcnRPbiA9IGFlVHlwZXMubGVuZ3RoID4gMDtcclxuICAgIHRoaXMuZGFpbHlTZW5kQXBwcm92ZXIgPSBhZVR5cGVzLmluY2x1ZGVzKCdhcHByb3ZlcicpIHx8ICF0aGlzLmRhaWx5UmVwb3J0T247XHJcbiAgICB0aGlzLmRhaWx5U2VuZEN1c3RvbSA9IGFlVHlwZXMuaW5jbHVkZXMoJ2N1c3RvbScpO1xyXG4gICAgdGhpcy5kYWlseVVzZXJzID0gdGhpcy5jaGlwcyhhZS51c2Vycyk7XHJcbiAgICB0aGlzLnNoYXJlUG9zdEFwcHJvdmFsID0gISFkLnNoYXJlUmVwb3J0UG9zdEFwcHJvdmFsO1xyXG5cclxuICAgIHRoaXMuZXhwb3J0U3VibWlzc2lvbk9uID0gISFkLmV4cG9ydDtcclxuICAgIHRoaXMucmVkb1ZhbGlkRm9yID0gTnVtYmVyKGQucmVkb1ZhbGlkaXR5KSB8fCA3O1xyXG4gICAgdGhpcy5hdXRvQ3JlYXRlVGFza09uID0gISFkLmF1dG9DcmVhdGVUYXNrO1xyXG4gICAgLy8gRGVmYXVsdHMgbGlrZSB0aGUgQ2hlY2tsaXN0IENvbmZpZ3VyZSBwYWdlOyB3aXRob3V0IGFuIGFzc2lnbmVlIHRoZSBhcHByb3ZhbCByYWlzZXMgbm8gdGFzay5cclxuICAgIHRoaXMudGFza0Fzc2lnbmVlID0gZC50YXNrQXNzaWduZWUgPT09ICdzdG9yZScgfHwgZC50YXNrQXNzaWduZWUgPT09ICdzdG9yZXVzZXInID8gJ3N0b3JlJyA6ICdzdWJtaXR0ZXInO1xyXG4gICAgdGhpcy50YXNrVmFsaWRpdHkgPSBOdW1iZXIoZC50YXNrVmFsaWRpdHkpIHx8IDEwO1xyXG4gICAgdGhpcy5zaG93UmVzcG9uc2VJbkFwcCA9IGQuc2hvd0FwcHJvdmVkUmVzcG9uc2UgIT09IGZhbHNlO1xyXG4gICAgdGhpcy5yZXNwb25zZVZpc2liaWxpdHkgPSBkLnJlc3BvbnNlVmlzaWJpbGl0eSA9PT0gJ3ByZUFwcHJvdmFsJyA/ICdwcmUnIDogJ3Bvc3QnO1xyXG4gICAgdGhpcy5yZXNwRGVsYXkgPSBkLnJlc3BvbnNlVmlzaWJpbGl0eUhvdXJzID8/IDI7XHJcbiAgICB0aGlzLnJlcXVpcmVQaG90byA9ICEhZC51c2VyVmVyaWZpY2F0aW9uPy5yZXF1aXJlUGhvdG9DYXB0dXJlO1xyXG4gICAgdGhpcy5yZXF1aXJlQWNrbm93bGVkZ21lbnQgPSAhIWQudXNlclZlcmlmaWNhdGlvbj8ucmVxdWlyZVVzZXJBY2tub3dsZWRnbWVudDtcclxuICAgIHRoaXMucmVkb0V4dGVuc2lvbiA9IE51bWJlcihkLnJlZG9FeHRlbnNpb24pIHx8IDE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5QXVkaXQoY2ZnOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IHMgPSBjZmc/LnNldHRpbmdzIHx8IHt9O1xyXG4gICAgdGhpcy5wYXNzVGhyZXNob2xkID0gTnVtYmVyKGNmZz8ucGFzc01hcmspIHx8IDc1O1xyXG4gICAgdGhpcy5wYXNzRmFpbE9uID0gcy5wYXNzRmFpbE9uICE9PSBmYWxzZTtcclxuICAgIHRoaXMuZGlzcHV0ZU9uID0gcy5kaXNwdXRlT24gIT09IGZhbHNlO1xyXG4gICAgdGhpcy5kaXNwdXRlV2luZG93ID0gTnVtYmVyKHMuZGlzcHV0ZVdpbmRvdykgfHwgNDg7XHJcbiAgICB0aGlzLnByZVN1Ym1pc3Npb25BY2Nlc3NPbiA9ICEhcy5wcmVTdWJtaXNzaW9uQWNjZXNzT247XHJcbiAgICB0aGlzLnByZVN1Ym1pc3Npb25Vc2VycyA9IHRoaXMuY2hpcHMocy5wcmVTdWJtaXNzaW9uVXNlcnMpO1xyXG4gICAgdGhpcy5lZGl0U3VibWl0dGVkT24gPSAhIXMuZWRpdFN1Ym1pdHRlZE9uO1xyXG4gICAgdGhpcy5lZGl0VXNlcnMgPSB0aGlzLmNoaXBzKHMuZWRpdFVzZXJzKTtcclxuICB9XHJcblxyXG4gIC8qKiBBY2NlcHRzIGJvdGggdGhlIGNoZWNrbGlzdCBzaGFwZSB7IG5hbWUsIHZhbHVlIH0gYW5kIHRoZSBhdWRpdCBzaGFwZSB7IG4sIGUgfS4gKi9cclxuICBwcml2YXRlIGNoaXBzKGxpc3Q6IGFueSk6IENoaXBVc2VyW10ge1xyXG4gICAgcmV0dXJuIChBcnJheS5pc0FycmF5KGxpc3QpID8gbGlzdCA6IFtdKVxyXG4gICAgICAubWFwKCh1OiBhbnkpID0+IHRoaXMuY2hpcCh1Py5uYW1lID8/IHU/Lm4sIHU/LnZhbHVlID8/IHU/LmUgPz8gdT8uZW1haWwpKVxyXG4gICAgICAuZmlsdGVyKCh1OiBDaGlwVXNlcikgPT4gdS5lIHx8IHUubik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoaXAobmFtZTogc3RyaW5nLCBlbWFpbDogc3RyaW5nKTogQ2hpcFVzZXIge1xyXG4gICAgY29uc3QgbiA9IFN0cmluZyhuYW1lIHx8IGVtYWlsIHx8ICcnKS50cmltKCk7XHJcbiAgICBjb25zdCBwYXJ0cyA9IG4uc3BsaXQoL1xccysvKTtcclxuICAgIGNvbnN0IGkgPSAoKHBhcnRzWzBdPy5bMF0gfHwgJycpICsgKHBhcnRzWzFdPy5bMF0gfHwgcGFydHNbMF0/LlsxXSB8fCAnJykpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICByZXR1cm4geyBpLCBuLCBlOiBTdHJpbmcoZW1haWwgfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRpdGxlQ2FzZSh2OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHYgPyB2LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdi5zbGljZSgxKSA6IHY7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVTZWN0aW9uKHNlY3Rpb246IENvbmZpZ1NlY3Rpb24pOiB2b2lkIHtcclxuICAgIHNlY3Rpb24ub3BlbiA9ICFzZWN0aW9uLm9wZW47XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tIHJlbWluZGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAvKiogVHVybmluZyBSZW1pbmRlciBvbiBzdGFydHMgd2l0aCBvbmUgMzAtbWludXRlIHJlbWluZGVyLCBhcyB0aGUgQ2hlY2tsaXN0IENvbmZpZ3VyZSBwYWdlIGRvZXMuICovXHJcbiAgdG9nZ2xlUmVtaW5kZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlbWluZGVyT24gPSAhdGhpcy5yZW1pbmRlck9uO1xyXG4gICAgaWYgKHRoaXMucmVtaW5kZXJPbiAmJiAhdGhpcy5yZW1pbmRlcnMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMucmVtaW5kZXJzID0gW1JFTUlOREVSX01JTlVURVNbMF1dO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZWZyZXNoUmVtaW5kZXJPcHRzKCk7XHJcbiAgfVxyXG5cclxuICBzZXRSZW1pbmRlcihpbmRleDogbnVtYmVyLCB2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBtaW51dGVzID0gTnVtYmVyKHZhbHVlKTtcclxuICAgIGlmICghUkVNSU5ERVJfTUlOVVRFUy5pbmNsdWRlcyhtaW51dGVzKSkgeyByZXR1cm47IH1cclxuICAgIHRoaXMucmVtaW5kZXJzID0gdGhpcy5yZW1pbmRlcnMubWFwKChtLCBpKSA9PiAoaSA9PT0gaW5kZXggPyBtaW51dGVzIDogbSkpO1xyXG4gICAgdGhpcy5yZWZyZXNoUmVtaW5kZXJPcHRzKCk7XHJcbiAgfVxyXG5cclxuICAvKiogQWRkcyB0aGUgZmlyc3QgaW50ZXJ2YWwgbm90IHVzZWQgeWV0LiAqL1xyXG4gIGFkZFJlbWluZGVyKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbmV4dCA9IFJFTUlOREVSX01JTlVURVMuZmluZChtID0+ICF0aGlzLnJlbWluZGVycy5pbmNsdWRlcyhtKSk7XHJcbiAgICBpZiAobmV4dCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMucmVtaW5kZXJzLmxlbmd0aCA+PSBNQVhfUkVNSU5ERVJTKSB7IHJldHVybjsgfVxyXG4gICAgdGhpcy5yZW1pbmRlcnMgPSBbLi4udGhpcy5yZW1pbmRlcnMsIG5leHRdO1xyXG4gICAgdGhpcy5yZWZyZXNoUmVtaW5kZXJPcHRzKCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVSZW1pbmRlcihpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5yZW1pbmRlcnMubGVuZ3RoIDw9IDEpIHsgcmV0dXJuOyB9XHJcbiAgICB0aGlzLnJlbWluZGVycyA9IHRoaXMucmVtaW5kZXJzLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpO1xyXG4gICAgdGhpcy5yZWZyZXNoUmVtaW5kZXJPcHRzKCk7XHJcbiAgfVxyXG5cclxuICAvKiogXCIzMCwgNDUgYW5kIDYwIG1pbnNcIiBmb3IgdGhlIHN1bW1hcnkgbGluZS4gKi9cclxuICBnZXQgcmVtaW5kZXJTdW1tYXJ5KCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBsaXN0ID0gWy4uLnRoaXMucmVtaW5kZXJzXS5zb3J0KChhLCBiKSA9PiBhIC0gYikubWFwKFN0cmluZyk7XHJcbiAgICByZXR1cm4gbGlzdC5sZW5ndGggPiAxID8gbGlzdC5zbGljZSgwLCAtMSkuam9pbignLCAnKSArICcgYW5kICcgKyBsaXN0W2xpc3QubGVuZ3RoIC0gMV0gOiAobGlzdFswXSB8fCAnJyk7XHJcbiAgfVxyXG5cclxuICAvKiogRWFjaCByb3cgb2ZmZXJzIGl0cyBvd24gdmFsdWUgcGx1cyBldmVyeSBpbnRlcnZhbCBubyBvdGhlciByb3cgdXNlcyAocmVidWlsdCBvbmx5IG9uIGNoYW5nZSkuICovXHJcbiAgcHJpdmF0ZSByZWZyZXNoUmVtaW5kZXJPcHRzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZW1pbmRlck9wdHMgPSB0aGlzLnJlbWluZGVycy5tYXAoKG93biwgaW5kZXgpID0+IFJFTUlOREVSX01JTlVURVNcclxuICAgICAgLmZpbHRlcihtID0+IG0gPT09IG93biB8fCAhdGhpcy5yZW1pbmRlcnMuc29tZSgob3RoZXIsIGkpID0+IGkgIT09IGluZGV4ICYmIG90aGVyID09PSBtKSlcclxuICAgICAgLm1hcChtID0+ICh7IHZhbHVlOiBtLCBsYWJlbDogbSArICcgbWlucycgfSkpKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0gYXBwcm92ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qKiBBcHByb3ZlciBpcyBvbiBhbmQgaGFzIGF0IGxlYXN0IG9uZSB1c2VyOiB0aGUgb25seSBzdGF0ZSBpbiB3aGljaCBhbnl0aGluZyBjYW4gZ28gXCJ0byB0aGUgYXBwcm92ZXJcIi4gKi9cclxuICBnZXQgaGFzQXBwcm92ZXJzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYXBwcm92ZXJPbiAmJiB0aGlzLmFwcHJvdmVycy5sZW5ndGggPiAwO1xyXG4gIH1cclxuXHJcbiAgLyoqIFdoeSBcImFwcHJvdmVyXCIgY2Fubm90IGJlIHVzZWQgcmlnaHQgbm93ICgnJyB3aGVuIGl0IGNhbikuICovXHJcbiAgcHJpdmF0ZSBnZXQgYXBwcm92ZXJNaXNzaW5nVGV4dCgpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLmFwcHJvdmVyT24pIHsgcmV0dXJuICdBcHByb3ZlciBpcyB0dXJuZWQgb2ZmLiBUdXJuIG9uIEFwcHJvdmVyIGFuZCBhZGQgYXQgbGVhc3Qgb25lIGFwcHJvdmVyIGZpcnN0Lic7IH1cclxuICAgIGlmICghdGhpcy5hcHByb3ZlcnMubGVuZ3RoKSB7IHJldHVybiAnTm8gYXBwcm92ZXIgaGFzIGJlZW4gYWRkZWQgeWV0LiBBZGQgYXQgbGVhc3Qgb25lIGFwcHJvdmVyIHVuZGVyIEFwcHJvdmVyIGZpcnN0Lic7IH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIC8qKiBTaG93biB1bmRlciB0aGUgYXBwcm92ZXIgcGlja2VyIHdoaWxlIGl0IGlzIG9uIGJ1dCBlbXB0eSAoU2F2ZSBhcyBEcmFmdCBzdGlsbCB3b3JrczsgUHVibGlzaCBkb2VzIG5vdCkuICovXHJcbiAgZ2V0IGFwcHJvdmVyRXJyb3IoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmFwcHJvdmVyT24gJiYgIXRoaXMuYXBwcm92ZXJzLmxlbmd0aCA/ICdBZGQgYXQgbGVhc3Qgb25lIGFwcHJvdmVyLCBvciB0dXJuIEFwcHJvdmVyIG9mZiB0byBwdWJsaXNoIHdpdGhvdXQgYXBwcm92YWwuJyA6ICcnO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRoZSBwYXJ0cyBvZiB0aGUgcGFnZSB0aGF0IHNlbmQgdG8gLyByZWx5IG9uIHRoZSBhcHByb3ZlcnMgYW5kIGFyZSBzd2l0Y2hlZCBvbiBub3cuICovXHJcbiAgcHJpdmF0ZSBnZXQgYXBwcm92ZXJEZXBlbmRlbnRzKCk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IGxpc3Q6IHN0cmluZ1tdID0gW107XHJcbiAgICBpZiAodGhpcy5ub3RpZnlGbGFnc09uICYmIHRoaXMubm90aWZ5U2VuZEFwcHJvdmVyKSB7IGxpc3QucHVzaCgnTm90aWZ5IEZsYWdzJyk7IH1cclxuICAgIGlmICh0aGlzLnJlY3VycmluZ0ZsYWdzT24gJiYgdGhpcy5yZWN1cnJpbmdTZW5kQXBwcm92ZXIpIHsgbGlzdC5wdXNoKCdOb3RpZnkgb24gUmVjdXJyaW5nIEZsYWdzJyk7IH1cclxuICAgIGlmICh0aGlzLmRhaWx5UmVwb3J0T24gJiYgdGhpcy5kYWlseVNlbmRBcHByb3ZlcikgeyBsaXN0LnB1c2goJ0RhaWx5IFJlcG9ydCcpOyB9XHJcbiAgICBpZiAodGhpcy5lZGl0U3VibWl0dGVkT24pIHsgbGlzdC5wdXNoKCdFZGl0IFN1Ym1pdHRlZCBBdWRpdCcpOyB9XHJcbiAgICByZXR1cm4gbGlzdDtcclxuICB9XHJcblxyXG4gIC8qKiBUdXJuaW5nIEFwcHJvdmVyIG9mZiB3YXJucyBhYm91dCBldmVyeSBzZXR0aW5nIHRoYXQgc3RpbGwgc2VuZHMgdG8gLyByZWxpZXMgb24gdGhlIGFwcHJvdmVycy4gKi9cclxuICB0b2dnbGVBcHByb3ZlcigpOiB2b2lkIHtcclxuICAgIHRoaXMuYXBwcm92ZXJPbiA9ICF0aGlzLmFwcHJvdmVyT247XHJcbiAgICBjb25zdCBkZXBlbmRlbnRzID0gdGhpcy5hcHByb3ZlckRlcGVuZGVudHM7XHJcbiAgICBpZiAoIXRoaXMuYXBwcm92ZXJPbiAmJiBkZXBlbmRlbnRzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnRvYXN0LmdldFdhcm5pbmdUb2FzdCgnQXBwcm92ZXIgaXMgdHVybmVkIG9mZiwgYnV0ICcgKyBkZXBlbmRlbnRzLmpvaW4oJywgJykgKyAnIHN0aWxsIHVzZSB0aGUgYXBwcm92ZXJzLiBUdXJuIEFwcHJvdmVyIGJhY2sgb24gb3IgY2hhbmdlIHRob3NlIHNldHRpbmdzIGJlZm9yZSBzYXZpbmcuJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogU2VuZCBUbyA+IEFwcHJvdmVyIGNhbiBvbmx5IGJlIHRpY2tlZCB3aGVuIHRoZXJlIGlzIGFuIGFwcHJvdmVyIHRvIHNlbmQgdG8uICovXHJcbiAgdG9nZ2xlU2VuZEFwcHJvdmVyKGtleTogU2VuZEFwcHJvdmVyS2V5KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXNba2V5XSAmJiAhdGhpcy5oYXNBcHByb3ZlcnMpIHtcclxuICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KHRoaXMuYXBwcm92ZXJNaXNzaW5nVGV4dCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXNba2V5XSA9ICF0aGlzW2tleV07XHJcbiAgfVxyXG5cclxuICAvKiogU3dpdGNoaW5nIGEgZmxhZyAvIHJlcG9ydCBlbWFpbCBvbiB0aWNrcyBBcHByb3ZlciBvbmx5IHdoZW4gdGhlcmUgaXMgYW4gYXBwcm92ZXIgdG8gc2VuZCB0by4gKi9cclxuICB0b2dnbGVOb3RpZnlGbGFncygpOiB2b2lkIHtcclxuICAgIHRoaXMubm90aWZ5RmxhZ3NPbiA9ICF0aGlzLm5vdGlmeUZsYWdzT247XHJcbiAgICBpZiAodGhpcy5ub3RpZnlGbGFnc09uICYmICF0aGlzLmhhc0FwcHJvdmVycykgeyB0aGlzLm5vdGlmeVNlbmRBcHByb3ZlciA9IGZhbHNlOyB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVSZWN1cnJpbmdGbGFncygpOiB2b2lkIHtcclxuICAgIHRoaXMucmVjdXJyaW5nRmxhZ3NPbiA9ICF0aGlzLnJlY3VycmluZ0ZsYWdzT247XHJcbiAgICBpZiAodGhpcy5yZWN1cnJpbmdGbGFnc09uICYmICF0aGlzLmhhc0FwcHJvdmVycykgeyB0aGlzLnJlY3VycmluZ1NlbmRBcHByb3ZlciA9IGZhbHNlOyB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVEYWlseVJlcG9ydCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGFpbHlSZXBvcnRPbiA9ICF0aGlzLmRhaWx5UmVwb3J0T247XHJcbiAgICBpZiAodGhpcy5kYWlseVJlcG9ydE9uICYmICF0aGlzLmhhc0FwcHJvdmVycykgeyB0aGlzLmRhaWx5U2VuZEFwcHJvdmVyID0gZmFsc2U7IH1cclxuICB9XHJcblxyXG4gIC8qKiBFZGl0IFN1Ym1pdHRlZCBBdWRpdCBsZXRzIGFwcHJvdmVycyBjaGFuZ2Ugc3VibWlzc2lvbnMgYmVmb3JlIGFwcHJvdmluZywgc28gaXQgbmVlZHMgYXBwcm92ZXJzLiAqL1xyXG4gIHRvZ2dsZUVkaXRTdWJtaXR0ZWQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZWRpdFN1Ym1pdHRlZE9uICYmICF0aGlzLmhhc0FwcHJvdmVycykge1xyXG4gICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ0VkaXQgU3VibWl0dGVkIEF1ZGl0IGlzIGZvciBhcHByb3ZlcnMuICcgKyB0aGlzLmFwcHJvdmVyTWlzc2luZ1RleHQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmVkaXRTdWJtaXR0ZWRPbiA9ICF0aGlzLmVkaXRTdWJtaXR0ZWRPbjtcclxuICB9XHJcblxyXG4gIGdldCBlZGl0U3VibWl0dGVkRXJyb3IoKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5lZGl0U3VibWl0dGVkT24pIHsgcmV0dXJuICcnOyB9XHJcbiAgICBpZiAoIXRoaXMuaGFzQXBwcm92ZXJzKSB7IHJldHVybiAnRWRpdCBTdWJtaXR0ZWQgQXVkaXQgaXMgZm9yIGFwcHJvdmVycy4gJyArIHRoaXMuYXBwcm92ZXJNaXNzaW5nVGV4dCArICcgT3IgdHVybiBFZGl0IFN1Ym1pdHRlZCBBdWRpdCBvZmYuJzsgfVxyXG4gICAgaWYgKCF0aGlzLmVkaXRVc2Vycy5sZW5ndGgpIHsgcmV0dXJuICdBZGQgYXQgbGVhc3Qgb25lIHVzZXIgd2hvIGNhbiBlZGl0IHN1Ym1pdHRlZCBhdWRpdHMnOyB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tIG5vdGlmeSAvIHJlY3VycmluZyBmbGFnIHJlY2lwaWVudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qKlxyXG4gICAqIFRpY2tpbmcgQ3VzdG9tIHVuZGVyIFJlY3VycmluZyBGbGFncyBzdGFydHMgaXRzIHVzZXIgbGlzdCBmcm9tIHRoZSBOb3RpZnkgRmxhZ3MgY3VzdG9tIHVzZXJzLFxyXG4gICAqIHNvIHRoZSBzYW1lIHBlb3BsZSBhcmUgdXNlZCBieSBkZWZhdWx0OyB0aGUgbGlzdCBzdGF5cyBlZGl0YWJsZS5cclxuICAgKi9cclxuICB0b2dnbGVSZWN1cnJpbmdDdXN0b20oKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlY3VycmluZ1NlbmRDdXN0b20gPSAhdGhpcy5yZWN1cnJpbmdTZW5kQ3VzdG9tO1xyXG4gICAgaWYgKHRoaXMucmVjdXJyaW5nU2VuZEN1c3RvbSAmJiAhdGhpcy5yZWN1cnJpbmdVc2Vycy5sZW5ndGggJiYgdGhpcy5ub3RpZnlGbGFnc09uICYmIHRoaXMubm90aWZ5U2VuZEN1c3RvbSkge1xyXG4gICAgICB0aGlzLnJlY3VycmluZ1VzZXJzID0gWy4uLnRoaXMubm90aWZ5VXNlcnNdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIFdobyBcIlVzZSBzYW1lIHVzZXJzIGZyb20gTm90aWZ5IEZsYWdzXCIgcmVzb2x2ZXMgdG8gKHNob3duIHJlYWQtb25seSB1bmRlciB0aGUgb3B0aW9uKS4gKi9cclxuICBnZXQgbm90aWZ5UmVjaXBpZW50c0xhYmVsKCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRoaXMubm90aWZ5RmxhZ3NPbikgeyByZXR1cm4gJ05vdGlmeSBGbGFncyBpcyBvZmYsIHNvIG5vIG9uZSBpcyBhZGRlZCBmcm9tIGl0JzsgfVxyXG4gICAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XHJcbiAgICBpZiAodGhpcy5ub3RpZnlTZW5kQXBwcm92ZXIpIHsgcGFydHMucHVzaCh0aGlzLmFwcHJvdmVycy5sZW5ndGggPyAndGhlIGFwcHJvdmVycycgOiAndGhlIGFwcHJvdmVycyAobm9uZSBzZXQpJyk7IH1cclxuICAgIGlmICh0aGlzLm5vdGlmeVNlbmRDdXN0b20gJiYgdGhpcy5ub3RpZnlVc2Vycy5sZW5ndGgpIHsgcGFydHMucHVzaCh0aGlzLm5vdGlmeVVzZXJzLm1hcCh1ID0+IHUubikuam9pbignLCAnKSk7IH1cclxuICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPyAnQWxzbyBzZW5kcyB0byAnICsgcGFydHMuam9pbignIGFuZCAnKSA6ICdOb3RpZnkgRmxhZ3MgaGFzIG5vIHJlY2lwaWVudHMgeWV0JztcclxuICB9XHJcblxyXG4gIGdldCBub3RpZnlGbGFnc0Vycm9yKCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRoaXMubm90aWZ5RmxhZ3NPbikgeyByZXR1cm4gJyc7IH1cclxuICAgIGlmICghdGhpcy5ub3RpZnlTZW5kQXBwcm92ZXIgJiYgIXRoaXMubm90aWZ5U2VuZEN1c3RvbSkgeyByZXR1cm4gJ0Nob29zZSB3aG8gcmVjZWl2ZXMgdGhlIGZsYWcgZW1haWxzJzsgfVxyXG4gICAgaWYgKHRoaXMubm90aWZ5U2VuZEFwcHJvdmVyICYmICF0aGlzLmhhc0FwcHJvdmVycykgeyByZXR1cm4gJ05vdGlmeSBGbGFncyBzZW5kcyB0byB0aGUgYXBwcm92ZXIuICcgKyB0aGlzLmFwcHJvdmVyTWlzc2luZ1RleHQgKyAnIE9yIHVudGljayBBcHByb3ZlciBoZXJlLic7IH1cclxuICAgIGlmICh0aGlzLm5vdGlmeVNlbmRDdXN0b20gJiYgIXRoaXMubm90aWZ5VXNlcnMubGVuZ3RoKSB7IHJldHVybiAnQWRkIGF0IGxlYXN0IG9uZSBjdXN0b20gdXNlciBmb3IgTm90aWZ5IEZsYWdzJzsgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHJlY3VycmluZ0ZsYWdzRXJyb3IoKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5yZWN1cnJpbmdGbGFnc09uKSB7IHJldHVybiAnJzsgfVxyXG4gICAgaWYgKCF0aGlzLnJlY3VycmluZ1NlbmRBcHByb3ZlciAmJiAhdGhpcy5yZWN1cnJpbmdTZW5kQ3VzdG9tICYmICF0aGlzLnJlY3VycmluZ1NhbWVBc05vdGlmeSkgeyByZXR1cm4gJ0Nob29zZSB3aG8gcmVjZWl2ZXMgdGhlIHJlY3VycmluZyBmbGFnIGVtYWlscyc7IH1cclxuICAgIGlmICh0aGlzLnJlY3VycmluZ1NlbmRBcHByb3ZlciAmJiAhdGhpcy5oYXNBcHByb3ZlcnMpIHsgcmV0dXJuICdSZWN1cnJpbmcgRmxhZ3Mgc2VuZHMgdG8gdGhlIGFwcHJvdmVyLiAnICsgdGhpcy5hcHByb3Zlck1pc3NpbmdUZXh0ICsgJyBPciB1bnRpY2sgQXBwcm92ZXIgaGVyZS4nOyB9XHJcbiAgICBpZiAodGhpcy5yZWN1cnJpbmdTZW5kQ3VzdG9tICYmICF0aGlzLnJlY3VycmluZ1VzZXJzLmxlbmd0aCkgeyByZXR1cm4gJ0FkZCBhdCBsZWFzdCBvbmUgY3VzdG9tIHVzZXIgZm9yIFJlY3VycmluZyBGbGFncyc7IH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIGdldCBkYWlseVJlcG9ydEVycm9yKCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRoaXMuZGFpbHlSZXBvcnRPbikgeyByZXR1cm4gJyc7IH1cclxuICAgIGlmICghdGhpcy5kYWlseVNlbmRBcHByb3ZlciAmJiAhdGhpcy5kYWlseVNlbmRDdXN0b20pIHsgcmV0dXJuICdDaG9vc2Ugd2hvIHJlY2VpdmVzIHRoZSBkYWlseSByZXBvcnQnOyB9XHJcbiAgICBpZiAodGhpcy5kYWlseVNlbmRBcHByb3ZlciAmJiAhdGhpcy5oYXNBcHByb3ZlcnMpIHsgcmV0dXJuICdUaGUgZGFpbHkgcmVwb3J0IGlzIHNlbnQgdG8gdGhlIGFwcHJvdmVyLiAnICsgdGhpcy5hcHByb3Zlck1pc3NpbmdUZXh0ICsgJyBPciB1bnRpY2sgQXBwcm92ZXIgaGVyZS4nOyB9XHJcbiAgICBpZiAodGhpcy5kYWlseVNlbmRDdXN0b20gJiYgIXRoaXMuZGFpbHlVc2Vycy5sZW5ndGgpIHsgcmV0dXJuICdBZGQgYXQgbGVhc3Qgb25lIGN1c3RvbSB1c2VyIGZvciB0aGUgZGFpbHkgcmVwb3J0JzsgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLSBkcm9wZG93bnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgdG9nZ2xlU2VsZWN0KGtleTogU2VsZWN0S2V5LCBldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5vcGVuU2VsZWN0ID0gdGhpcy5vcGVuU2VsZWN0ID09PSBrZXkgPyBudWxsIDoga2V5O1xyXG4gICAgdGhpcy5vcGVuQ2hpcHMgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgcGljayhrZXk6IFNlbGVjdEtleSwgb3B0aW9uOiBTZWxlY3RPcHRpb24sIGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzW2tleV0gPSBvcHRpb24udmFsdWU7XHJcbiAgICB0aGlzLm9wZW5TZWxlY3QgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0TGFiZWwoa2V5OiBTZWxlY3RLZXksIG9wdGlvbnM6IFNlbGVjdE9wdGlvbltdKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHZhbHVlID0gdGhpc1trZXldO1xyXG4gICAgcmV0dXJuIG9wdGlvbnMuZmluZChvID0+IG8udmFsdWUgPT09IHZhbHVlKT8ubGFiZWwgPz8gU3RyaW5nKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGlzUGlja2VkKGtleTogU2VsZWN0S2V5LCBvcHRpb246IFNlbGVjdE9wdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXNba2V5XSA9PT0gb3B0aW9uLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8gVHlwZWQgYWNjZXNzb3JzIGZvciB0aGUgc2hhcmVkIHRlbXBsYXRlcyAodGhlaXIgY29udGV4dCB2YXJpYWJsZXMgYXJlIHVudHlwZWQsIGFuZCB0aGVcclxuICAvLyByb290IGFwcCdzIHN0cmljdCB0ZW1wbGF0ZSBjaGVjayByZWplY3RzIGB0aGlzW2xpc3RdYCAvIGBkcmFmdHNbbGlzdF1gKS5cclxuICBjaGlwc09mKGxpc3Q6IENoaXBMaXN0KTogQ2hpcFVzZXJbXSB7XHJcbiAgICByZXR1cm4gdGhpc1tsaXN0XTtcclxuICB9XHJcblxyXG4gIGRyYWZ0T2YobGlzdDogQ2hpcExpc3QpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZHJhZnRzW2xpc3RdO1xyXG4gIH1cclxuXHJcbiAgc2V0RHJhZnQobGlzdDogQ2hpcExpc3QsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuZHJhZnRzW2xpc3RdID0gdmFsdWUgPz8gJyc7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tIGNoaXAgcGlja2VycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qKiBDbGllbnQgdXNlcnMgbWF0Y2hpbmcgdGhlIHR5cGVkIHRleHQsIG1pbnVzIHRoZSBvbmVzIGFscmVhZHkgaW4gdGhlIGxpc3QuICovXHJcbiAgc3VnZ2VzdGlvbnMobGlzdDogQ2hpcExpc3QpOiBDaGlwVXNlcltdIHtcclxuICAgIGNvbnN0IHEgPSB0aGlzLmRyYWZ0c1tsaXN0XS50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgIGNvbnN0IGNob3NlbiA9IG5ldyBTZXQodGhpc1tsaXN0XS5tYXAodSA9PiB1LmUpKTtcclxuICAgIHJldHVybiB0aGlzLnVzZXJzXHJcbiAgICAgIC5maWx0ZXIodSA9PiAhY2hvc2VuLmhhcyh1LmUpICYmICghcSB8fCB1Lm4udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxKSB8fCB1LmUuaW5jbHVkZXMocSkpKVxyXG4gICAgICAuc2xpY2UoMCwgOCk7XHJcbiAgfVxyXG5cclxuICBmb2N1c0NoaXBzKGxpc3Q6IENoaXBMaXN0LCBldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5vcGVuQ2hpcHMgPSBsaXN0O1xyXG4gICAgdGhpcy5vcGVuU2VsZWN0ID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKiBBcHByb3ZlcnMgY2FuIG9ubHkgYmUgYWRkZWQgd2hpbGUgQXBwcm92ZXIgaXMgb24gKHRoZSBwaWNrZXIgaXMgaGlkZGVuIG90aGVyd2lzZTsgdGhpcyBndWFyZHMgaXQpLiAqL1xyXG4gIHByaXZhdGUgYXBwcm92ZXJMaXN0TG9ja2VkKGxpc3Q6IENoaXBMaXN0KTogYm9vbGVhbiB7XHJcbiAgICBpZiAobGlzdCAhPT0gJ2FwcHJvdmVycycgfHwgdGhpcy5hcHByb3Zlck9uKSB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdBcHByb3ZlciBpcyB0dXJuZWQgb2ZmLiBUdXJuIG9uIEFwcHJvdmVyIHRvIGFkZCBhcHByb3ZlcnMuJyk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGFkZFN1Z2dlc3Rpb24obGlzdDogQ2hpcExpc3QsIHVzZXI6IENoaXBVc2VyLCBldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgaWYgKHRoaXMuYXBwcm92ZXJMaXN0TG9ja2VkKGxpc3QpKSB7IHJldHVybjsgfVxyXG4gICAgaWYgKCF0aGlzW2xpc3RdLnNvbWUodSA9PiB1LmUgPT09IHVzZXIuZSkpIHtcclxuICAgICAgdGhpc1tsaXN0XSA9IFsuLi50aGlzW2xpc3RdLCB1c2VyXTtcclxuICAgIH1cclxuICAgIHRoaXMuZHJhZnRzW2xpc3RdID0gJyc7XHJcbiAgICB0aGlzLm9wZW5DaGlwcyA9IG51bGw7XHJcbiAgfVxyXG5cclxuICAvKiogRW50ZXIgdGFrZXMgdGhlIGZpcnN0IHN1Z2dlc3Rpb247IGFuIGV4YWN0IGVtYWlsIHdvcmtzIGV2ZW4gZm9yIGEgdXNlciBub3QgaW4gdGhlIGxpc3QuICovXHJcbiAgYWRkQ2hpcChsaXN0OiBDaGlwTGlzdCk6IHZvaWQge1xyXG4gICAgY29uc3QgcSA9IHRoaXMuZHJhZnRzW2xpc3RdLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgaWYgKCFxIHx8IHRoaXMuYXBwcm92ZXJMaXN0TG9ja2VkKGxpc3QpKSB7IHJldHVybjsgfVxyXG4gICAgY29uc3QgdHlwZWQgPSB0aGlzLmVzYyh0aGlzLmRyYWZ0c1tsaXN0XS50cmltKCkpO1xyXG4gICAgY29uc3QgaXNFbWFpbCA9IC9eW15cXHNAXStAW15cXHNAXStcXC5bXlxcc0BdKyQvLnRlc3QocSk7XHJcbiAgICBjb25zdCBtYXRjaCA9IHRoaXMuc3VnZ2VzdGlvbnMobGlzdClbMF0gfHwgKGlzRW1haWwgPyB0aGlzLmNoaXAocSwgcSkgOiBudWxsKTtcclxuICAgIGlmICghbWF0Y2gpIHtcclxuICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KHEuaW5jbHVkZXMoJ0AnKVxyXG4gICAgICAgID8gJ1wiJyArIHR5cGVkICsgJ1wiIGlzIG5vdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MuJ1xyXG4gICAgICAgIDogJ05vIHVzZXIgbWF0Y2hlcyBcIicgKyB0eXBlZCArICdcIi4gUGljayBhIHVzZXIgZnJvbSB0aGUgbGlzdCBvciB0eXBlIHRoZWlyIGZ1bGwgZW1haWwuJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzW2xpc3RdLnNvbWUodSA9PiB1LmUgPT09IG1hdGNoLmUpKSB7XHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCh0aGlzLmVzYyhtYXRjaC5uIHx8IG1hdGNoLmUpICsgJyBpcyBhbHJlYWR5IGFkZGVkLicpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzW2xpc3RdID0gWy4uLnRoaXNbbGlzdF0sIG1hdGNoXTtcclxuICAgIHRoaXMuZHJhZnRzW2xpc3RdID0gJyc7XHJcbiAgICB0aGlzLm9wZW5DaGlwcyA9IG51bGw7XHJcbiAgfVxyXG5cclxuICByZW1vdmVDaGlwKGxpc3Q6IENoaXBMaXN0LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzW2xpc3RdID0gdGhpc1tsaXN0XS5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGluZGV4KTtcclxuICB9XHJcblxyXG4gIC8qKiBXaGF0IHRoZSBjaGVja2xpc3Qga2VlcHMgYXMgYXNzaWduZWRVc2VycywgZXhhY3RseSBhcyB0aGUgQ2hlY2tsaXN0IENvbmZpZ3VyZSBwYWdlIHNlbmRzIGl0LiAqL1xyXG4gIHByaXZhdGUgYXNzaWduZWRVc2VycygpOiB7IGlkOiBzdHJpbmc7IHR5cGU6IHN0cmluZyB9W10ge1xyXG4gICAgY29uc3QgZCA9IHRoaXMuY29uZmlnRGF0YT8uY2hlY2tMaXN0RGV0YWlscyB8fCB7fTtcclxuICAgIHJldHVybiBbLi4uKGQuc2luZ2xlQXNzaWduIHx8IFtdKSwgLi4uKGQuZ3JvdXBBc3NpZ24gfHwgW10pXTtcclxuICB9XHJcblxyXG4gIGdldCBwcmVTdWJtaXNzaW9uRW1wdHkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5wcmVTdWJtaXNzaW9uQWNjZXNzT24gJiYgdGhpcy5wcmVTdWJtaXNzaW9uVXNlcnMubGVuZ3RoID09PSAwO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRpc3B1dGVBdmFpbGFibGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXNwb25zZVZpc2liaWxpdHkgPT09ICdwcmUnICYmIHRoaXMuZGlzcHV0ZU9uO1xyXG4gIH1cclxuXHJcbiAgLyoqIFdoeSBQdWJsaXNoIC8gU2F2ZSBhcmUgZGlzYWJsZWQgKGJ1dHRvbiB0aXRsZSksICcnIHdoZW4gdGhleSBhcmUgbm90LiAqL1xyXG4gIGdldCBzYXZlQmxvY2tlZFJlYXNvbigpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLmFjY2Vzcy5jYW5FZGl0KSB7IHJldHVybiAnWW91IGRvIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gY2hhbmdlIGF1ZGl0cyc7IH1cclxuICAgIGlmICh0aGlzLmF1ZGl0U2V0dGluZ3NMb2FkRmFpbGVkKSB7IHJldHVybiAnVGhlIHNjb3JpbmcgYW5kIGFjY2VzcyBzZXR0aW5ncyBjb3VsZCBub3QgYmUgbG9hZGVkLiBSZWxvYWQgdGhlIHBhZ2UgYmVmb3JlIHNhdmluZy4nOyB9XHJcbiAgICBpZiAodGhpcy5wYXNzRmFpbE9uICYmICh0aGlzLnBhc3NUaHJlc2hvbGQgPCAxIHx8IHRoaXMucGFzc1RocmVzaG9sZCA+IDEwMCkpIHsgcmV0dXJuICdQYXNzIG1hcmsgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDEwMCc7IH1cclxuICAgIGlmICh0aGlzLnByZVN1Ym1pc3Npb25FbXB0eSkgeyByZXR1cm4gJ0FkZCBhdCBsZWFzdCBvbmUgdXNlciBmb3IgcHJlLXN1Ym1pc3Npb24gYWNjZXNzJzsgfVxyXG4gICAgcmV0dXJuIHRoaXMuZWRpdFN1Ym1pdHRlZEVycm9yIHx8IHRoaXMubm90aWZ5RmxhZ3NFcnJvciB8fCB0aGlzLnJlY3VycmluZ0ZsYWdzRXJyb3IgfHwgdGhpcy5kYWlseVJlcG9ydEVycm9yO1xyXG4gIH1cclxuXHJcbiAgLyoqIFdoeSBQdWJsaXNoIHdvdWxkIGJlIHJlZnVzZWQgKCcnIHdoZW4gaXQgd291bGQgbm90KTsgY2hlY2tlZCBvbiBjbGljayBzbyB0aGUgdG9hc3QgY2FuIHNheSBzby4gKi9cclxuICBnZXQgcHVibGlzaEJsb2NrZWRSZWFzb24oKTogc3RyaW5nIHtcclxuICAgIC8vIEFwcHJvdmVycyBhcmUgbmVlZGVkIG9ubHkgd2hpbGUgQXBwcm92ZXIgaXMgb247IHdpdGggaXQgb2ZmIHRoZSBhdWRpdCBwdWJsaXNoZXMgd2l0aG91dCBhcHByb3ZhbC5cclxuICAgIGlmICh0aGlzLmFwcHJvdmVyT24gJiYgIXRoaXMuYXBwcm92ZXJzLmxlbmd0aCkgeyByZXR1cm4gJ0FwcHJvdmVyIGlzIHR1cm5lZCBvbi4gQWRkIGF0IGxlYXN0IG9uZSBhcHByb3Zlciwgb3IgdHVybiBBcHByb3ZlciBvZmYuJzsgfVxyXG4gICAgaWYgKCF0aGlzLnNlY3Rpb25zLnNvbWUocyA9PiBzLml0ZW1zLmxlbmd0aCkpIHsgcmV0dXJuICdUaGlzIGF1ZGl0IGhhcyBubyBxdWVzdGlvbnMuIEFkZCBhdCBsZWFzdCBvbmUgcXVlc3Rpb24gYmVmb3JlIHB1Ymxpc2hpbmcuJzsgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhblNhdmUoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5zYXZpbmcgfHwgdGhpcy5sb2FkaW5nIHx8ICF0aGlzLmNoZWNrbGlzdElkIHx8ICF0aGlzLmNvbmZpZ0RhdGEpIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICByZXR1cm4gIXRoaXMuc2F2ZUJsb2NrZWRSZWFzb247XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tIHNhdmUgLyBwdWJsaXNoIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHNhdmVEcmFmdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2F2ZShmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaXNoKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmNhblNhdmUpIHsgcmV0dXJuOyB9XHJcbiAgICBjb25zdCBibG9ja2VkID0gdGhpcy5wdWJsaXNoQmxvY2tlZFJlYXNvbjtcclxuICAgIGlmIChibG9ja2VkKSB7XHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChibG9ja2VkKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmFzc2lnbmVkQ291bnQpIHtcclxuICAgICAgLy8gU3RvcmVzIGFuZCBhdWRpdG9ycyBjb21lIGZyb20gc2NoZWR1bGUgcm93czsgcHVibGlzaGluZyB0aGUgc2NoZWR1bGUgcHVibGlzaGVzIHRoZSBhdWRpdC5cclxuICAgICAgdGhpcy5zY2hlZHVsZUFmdGVyU2F2ZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2F2ZShmYWxzZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc2F2ZSh0cnVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2F2ZShwdWJsaXNoOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuY2FuU2F2ZSkgeyB0aGlzLnNjaGVkdWxlQWZ0ZXJTYXZlID0gZmFsc2U7IHJldHVybjsgfVxyXG4gICAgdGhpcy53YXNQdWJsaXNoZWQgPSB0aGlzLnB1Ymxpc2hlZDtcclxuICAgIHRoaXMuc2F2aW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuc2F2ZUNoZWNrbGlzdChwdWJsaXNoKTtcclxuICB9XHJcblxyXG4gIC8qKiBcInB1Ymxpc2ggU3RvcmUgQXVkaXRcIiAvIFwic2F2ZSBTdG9yZSBBdWRpdFwiLCBmb3IgdGhlIGVycm9yIHRvYXN0cy4gKi9cclxuICBwcml2YXRlIGFjdGlvblRleHQocHVibGlzaDogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gKHB1Ymxpc2ggPyAncHVibGlzaCAnIDogJ3NhdmUgJykgKyB0aGlzLmVzYyh0aGlzLmF1ZGl0TmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKiogQSBzYXZlIHN0ZXAgZmFpbGVkOiBzdG9wLCBhbmQgZG8gbm90IG9wZW4gQ3JlYXRlIHNjaGVkdWxlIG9uIHRoZSBuZXh0IHBsYWluIHNhdmUuICovXHJcbiAgcHJpdmF0ZSBmYWlsU2F2ZShtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLnNjaGVkdWxlQWZ0ZXJTYXZlID0gZmFsc2U7XHJcbiAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QobWVzc2FnZSk7XHJcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBjaGVja2xpc3QgcGFydCAoY2hlY2tsaXN0Q29uZmlndXJldjE6IG5vdGlmaWNhdGlvbnMsIGFwcHJvdmVycywgcHVibGlzaCkgYW5kIHRoZSBhdWRpdC1vbmx5IHNldHRpbmdzXHJcbiAgICogKGNvbmZpZy9zYXZlOiBzY29yaW5nLCBkaXNwdXRlLCBhY2Nlc3MpIGRvIG5vdCBkZXBlbmQgb24gZWFjaCBvdGhlciwgc28gYm90aCBhcmUgc2VudCBhdCBvbmNlIGluc3RlYWQgb2Ygb25lXHJcbiAgICogYWZ0ZXIgdGhlIG90aGVyIChRQTogc2F2ZSAvIHB1Ymxpc2ggdG9vayBsb25nKS4gT3V0Y29tZXMgYXJlIHJlcG9ydGVkIGFzIGJlZm9yZTogdGhlIGNoZWNrbGlzdCBwYXJ0IGZpcnN0LlxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2F2ZUNoZWNrbGlzdChwdWJsaXNoOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBjb25zdCBmYWxsYmFjayA9ICdDb3VsZCBub3QgJyArIHRoaXMuYWN0aW9uVGV4dChwdWJsaXNoKSArICcuIFBsZWFzZSB0cnkgYWdhaW4uJztcclxuICAgIGNvbnN0IHNldHRsZSA9IChjYWxsOiBPYnNlcnZhYmxlPGFueT4pID0+IGNhbGwucGlwZShtYXAoKHJlczogYW55KSA9PiAoeyByZXMsIGVycjogbnVsbCB9KSksIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiBvZih7IHJlczogbnVsbCwgZXJyIH0pKSk7XHJcbiAgICBmb3JrSm9pbihbXHJcbiAgICAgIHNldHRsZSh0aGlzLnRyYXhTZXJ2aWNlLmF1ZGl0Q29uZmlnVXBkYXRlKHRoaXMuY2hlY2tsaXN0UGF5bG9hZChwdWJsaXNoKSkpLFxyXG4gICAgICBzZXR0bGUodGhpcy50cmF4U2VydmljZS5hdWRpdENvbmZpZ1NhdmUodGhpcy5leHRyYXNQYXlsb2FkKCkpKVxyXG4gICAgXSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoW21haW4sIGV4dHJhc10pID0+IHtcclxuICAgICAgaWYgKG1haW4uZXJyKSB7XHJcbiAgICAgICAgdGhpcy5mYWlsU2F2ZSh0aGlzLmFwaUVycm9yKG1haW4uZXJyLCBmYWxsYmFjaywgdHJ1ZSwgJ0NvdWxkIG5vdCAnICsgdGhpcy5hY3Rpb25UZXh0KHB1Ymxpc2gpICsgJzogJykpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAobWFpbi5yZXM/LmNvZGUgIT09IDIwMCkge1xyXG4gICAgICAgIC8vIDIwNCAobm8gYm9keSkgPSB0aGUgYXVkaXQgbm8gbG9uZ2VyIGV4aXN0cyBmb3IgdGhpcyBjbGllbnQuXHJcbiAgICAgICAgdGhpcy5mYWlsU2F2ZShtYWluLnJlcyA/IGZhbGxiYWNrIDogJ0NvdWxkIG5vdCAnICsgdGhpcy5hY3Rpb25UZXh0KHB1Ymxpc2gpICsgJzogdGhlIGF1ZGl0IHdhcyBub3QgZm91bmQuIEl0IG1heSBoYXZlIGJlZW4gZGVsZXRlZC4nKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHB1Ymxpc2gpIHsgdGhpcy5wdWJsaXNoZWQgPSB0cnVlOyB9XHJcbiAgICAgIGlmIChleHRyYXMuZXJyIHx8IGV4dHJhcy5yZXM/LmNvZGUgIT09IDIwMCkge1xyXG4gICAgICAgIGNvbnN0IHJlYXNvbiA9IGV4dHJhcy5lcnIgPyB0aGlzLmFwaUVycm9yKGV4dHJhcy5lcnIsICcnLCB0cnVlKSA6ICcnO1xyXG4gICAgICAgIHRoaXMuZmFpbFNhdmUoKHB1Ymxpc2ggPyB0aGlzLmVzYyh0aGlzLmF1ZGl0TmFtZSkgKyAnIHdhcyBwdWJsaXNoZWQnIDogJ1RoZSBub3RpZmljYXRpb24gYW5kIGFwcHJvdmVyIHNldHRpbmdzIHdlcmUgc2F2ZWQnKVxyXG4gICAgICAgICAgKyAnLCBidXQgdGhlIHNjb3JpbmcsIGRpc3B1dGUgYW5kIGFjY2VzcyBzZXR0aW5ncyB3ZXJlIG5vdCcgKyAocmVhc29uID8gJyAoJyArIHJlYXNvbiArICcpJyA6ICcnKSArICcuIFNhdmUgYWdhaW4gdG8ga2VlcCB0aGVtLicpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZpbmlzaFNhdmUocHVibGlzaCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKiBUaGUgYXVkaXQtb25seSBzZXR0aW5ncyBzYXZlZCBieSBjb25maWcvc2F2ZS4gKi9cclxuICBwcml2YXRlIGV4dHJhc1BheWxvYWQoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XHJcbiAgICBjb25zdCB0b1N0b3JlZCA9IChsaXN0OiBDaGlwVXNlcltdKSA9PiBsaXN0Lm1hcCh1ID0+ICh7IG46IHUubiwgZTogdS5lIH0pKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGNsaWVudElkOiB0aGlzLmNsaWVudElkLFxyXG4gICAgICBjaGVja2xpc3RJZDogdGhpcy5jaGVja2xpc3RJZCxcclxuICAgICAgcGFzc01hcms6IHRoaXMucGFzc0ZhaWxPbiA/IE51bWJlcih0aGlzLnBhc3NUaHJlc2hvbGQpIDogNzUsXHJcbiAgICAgIHNldHRpbmdzOiB7XHJcbiAgICAgICAgcGFzc0ZhaWxPbjogdGhpcy5wYXNzRmFpbE9uLFxyXG4gICAgICAgIGRpc3B1dGVPbjogdGhpcy5kaXNwdXRlT24sXHJcbiAgICAgICAgZGlzcHV0ZVdpbmRvdzogdGhpcy5kaXNwdXRlV2luZG93LFxyXG4gICAgICAgIHByZVN1Ym1pc3Npb25BY2Nlc3NPbjogdGhpcy5wcmVTdWJtaXNzaW9uQWNjZXNzT24sXHJcbiAgICAgICAgcHJlU3VibWlzc2lvblVzZXJzOiB0b1N0b3JlZCh0aGlzLnByZVN1Ym1pc3Npb25Vc2VycyksXHJcbiAgICAgICAgZWRpdFN1Ym1pdHRlZE9uOiB0aGlzLmVkaXRTdWJtaXR0ZWRPbixcclxuICAgICAgICBlZGl0VXNlcnM6IHRvU3RvcmVkKHRoaXMuZWRpdFVzZXJzKVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5pc2hTYXZlKHB1Ymxpc2g6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XHJcbiAgICBjb25zdCBuYW1lID0gdGhpcy5lc2ModGhpcy5hdWRpdE5hbWUpO1xyXG4gICAgaWYgKHRoaXMuc2NoZWR1bGVBZnRlclNhdmUpIHtcclxuICAgICAgdGhpcy5zY2hlZHVsZUFmdGVyU2F2ZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnRvYXN0LmdldFN1Y2Nlc3NUb2FzdChuYW1lICsgKHRoaXMucHVibGlzaGVkID8gJyBzYXZlZC4nIDogJyBzYXZlZCBhcyBkcmFmdC4nKSArICcgSXQgaGFzIG5vIHN0b3JlcyB5ZXQ6IGFkZCBzY2hlZHVsZSByb3dzLCB0aGVuIHB1Ymxpc2ggdGhlIHNjaGVkdWxlIHRvIHB1Ymxpc2ggdGhlIGF1ZGl0LicpO1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9tYW5hZ2UvdHJheC9hdWRpdC12Mi9tYW5hZ2UnXSwgeyBxdWVyeVBhcmFtczogeyB0YWI6ICdzY2hlZHVsZScsIHNjaGVkdWxlOiAnY3JlYXRlJywgYXVkaXQ6IHRoaXMuY2hlY2tsaXN0SWQgfSB9KTtcclxuICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChwdWJsaXNoKSB7XHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0U3VjY2Vzc1RvYXN0KHRoaXMud2FzUHVibGlzaGVkID8gJ0NoYW5nZXMgdG8gJyArIG5hbWUgKyAnIHNhdmVkIGFuZCBwdWJsaXNoZWQuJyA6IG5hbWUgKyAnIGhhcyBiZWVuIHB1Ymxpc2hlZC4nKTtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbWFuYWdlL3RyYXgvYXVkaXQtdjIvbWFuYWdlJ10pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gQSBkcmFmdCBzYXZlIG5ldmVyIHVucHVibGlzaGVzICh0aGUgQVBJIGtlZXBzIHRoZSBwdWJsaXNoIHN0YXRlKSwgc28gZG8gbm90IGNhbGwgYSBsaXZlIGF1ZGl0IGEgZHJhZnQuXHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0U3VjY2Vzc1RvYXN0KHRoaXMucHVibGlzaGVkID8gJ0NoYW5nZXMgdG8gJyArIG5hbWUgKyAnIHNhdmVkLiBUaGUgYXVkaXQgc3RheXMgcHVibGlzaGVkLicgOiBuYW1lICsgJyBzYXZlZCBhcyBkcmFmdC4nKTtcclxuICAgICAgLy8gUmVsb2FkIHNvIHRoZSBwYWdlIHNob3dzIGV4YWN0bHkgd2hhdCB0aGUgc2VydmVyIGtlcHQuXHJcbiAgICAgIHRoaXMubG9hZCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgbWVzc2FnZSB0byBzaG93IGZvciBhIGZhaWxlZCBjYWxsOiB0aGUgQVBJJ3Mgb3duIHRleHQgZm9yIGEgNHh4IChwcm9kdWN0aW9uIHNlbmRzIGl0IGFzXHJcbiAgICogYGVycm9yYCAodGV4dCBvciB7IG1lc3NhZ2UgfSksIHRoZSBsb2NhbCBkZXYgaGVscGVyIGFzIGBlcnJvcmAgdGV4dCBwbHVzIGBkZXRhaWxzYCksIGVsc2UgYGZhbGxiYWNrYC5cclxuICAgKiA1eHggYm9kaWVzIGNhcnJ5IHJhdyBleGNlcHRpb25zLCBzbyB0aGV5IGdldCB0aGUgZmFsbGJhY2suIGBwcmVmaXhgIGlzIHB1dCBiZWZvcmUgYW4gQVBJIHRleHQuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhcGlFcnJvcihlOiBhbnksIGZhbGxiYWNrOiBzdHJpbmcsIGVzY2FwZSA9IHRydWUsIHByZWZpeCA9ICcnKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHN0YXR1cyA9IE51bWJlcihlPy5zdGF0dXMpIHx8IDA7XHJcbiAgICBpZiAoc3RhdHVzID09PSA0MDMpIHsgcmV0dXJuICdZb3UgZG8gbm90IGhhdmUgcGVybWlzc2lvbiB0byB2aWV3IG9yIGNoYW5nZSB0aGlzIGF1ZGl0Lic7IH1cclxuICAgIGlmIChzdGF0dXMgPT09IDApIHsgcmV0dXJuIGZhbGxiYWNrID8gJ0NvdWxkIG5vdCByZWFjaCB0aGUgc2VydmVyLiBDaGVjayB5b3VyIGNvbm5lY3Rpb24gYW5kIHRyeSBhZ2Fpbi4nIDogJyc7IH1cclxuICAgIGlmIChzdGF0dXMgPj0gNTAwKSB7IHJldHVybiBmYWxsYmFjazsgfVxyXG4gICAgY29uc3QgYm9keSA9IGU/LmVycm9yO1xyXG4gICAgY29uc3QgZXJyID0gYm9keT8uZXJyb3I7XHJcbiAgICBjb25zdCByYXcgPSAodHlwZW9mIGVyciA9PT0gJ3N0cmluZycgPyBlcnIgOiBlcnI/Lm1lc3NhZ2UpIHx8IGJvZHk/LmRldGFpbHM/Lm1lc3NhZ2UgfHwgYm9keT8ubWVzc2FnZSB8fCAnJztcclxuICAgIGNvbnN0IHRleHQgPSBTdHJpbmcocmF3KS50cmltKCk7XHJcbiAgICBpZiAoIXRleHQpIHsgcmV0dXJuIGZhbGxiYWNrOyB9XHJcbiAgICByZXR1cm4gcHJlZml4ICsgKGVzY2FwZSA/IHRoaXMuZXNjKHRleHQpIDogdGV4dCk7XHJcbiAgfVxyXG5cclxuICAvKiogVG9hc3RzIHJlbmRlciB0aGVpciBtZXNzYWdlIGFzIEhUTUwsIHNvIG5hbWVzLCB0eXBlZCB0ZXh0IGFuZCBBUEkgbWVzc2FnZXMgYXJlIGVzY2FwZWQuICovXHJcbiAgcHJpdmF0ZSBlc2ModmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyAnJic6ICcmYW1wOycsICc8JzogJyZsdDsnLCAnPic6ICcmZ3Q7JywgJ1wiJzogJyZxdW90OycsICdcXCcnOiAnJiMzOTsnIH07XHJcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlID8/ICcnKS5yZXBsYWNlKC9bJjw+XCInXS9nLCBjID0+IG1hcFtjXSk7XHJcbiAgfVxyXG5cclxuICAvKiogVGhlIGdldENvbmZpZ0RldGFpbHMgcGF5bG9hZCB3aXRoIHRoaXMgcGFnZSdzIGZpZWxkcyB3cml0dGVuIGJhY2ssIGluIHRoZSBjaGVja2xpc3QncyBvd24gc2hhcGUuICovXHJcbiAgcHJpdmF0ZSBjaGVja2xpc3RQYXlsb2FkKHB1Ymxpc2g6IGJvb2xlYW4pOiBhbnkge1xyXG4gICAgY29uc3QgdG9TdG9yZWQgPSAobGlzdDogQ2hpcFVzZXJbXSkgPT4gbGlzdC5tYXAodSA9PiAoeyBuYW1lOiB1Lm4sIHZhbHVlOiB1LmUgfSkpO1xyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuY29uZmlnRGF0YTtcclxuICAgIGNvbnN0IGQgPSBkYXRhLmNoZWNrTGlzdERldGFpbHM7XHJcblxyXG4gICAgZC5jaGVja0xpc3REZXNjcmlwdGlvbiA9IHRoaXMuZGVzY3JpcHRpb24udHJpbSgpO1xyXG4gICAgZC5vd25lciA9IHRvU3RvcmVkKHRoaXMub3duZXJzKTtcclxuICAgIGQuYXBwcm92ZXIgPSB0aGlzLmFwcHJvdmVyT24gPyB0b1N0b3JlZCh0aGlzLmFwcHJvdmVycykgOiBbXTtcclxuICAgIC8vIE1pbnV0ZXMgYmVmb3JlIHRoZSBhdWRpdCBlbmQgdGltZSwgYXMgdGhlIENoZWNrbGlzdCBDb25maWd1cmUgcGFnZSBzdG9yZXMgdGhlbS5cclxuICAgIGQucmVtYWluZGVyID0gdGhpcy5yZW1pbmRlck9uID8gWy4uLnRoaXMucmVtaW5kZXJzXSA6IFtdO1xyXG5cclxuICAgIGNvbnN0IG5mVHlwZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBpZiAodGhpcy5ub3RpZnlGbGFnc09uICYmIHRoaXMubm90aWZ5U2VuZEFwcHJvdmVyKSB7IG5mVHlwZXMucHVzaCgnYXBwcm92ZXInKTsgfVxyXG4gICAgaWYgKHRoaXMubm90aWZ5RmxhZ3NPbiAmJiB0aGlzLm5vdGlmeVNlbmRDdXN0b20pIHsgbmZUeXBlcy5wdXNoKCdjdXN0b20nKTsgfVxyXG4gICAgZC5ub3RpZnlGbGFncyA9IHsgbm90aWZ5VHlwZTogbmZUeXBlcywgdXNlcnM6IHRoaXMubm90aWZ5RmxhZ3NPbiAmJiB0aGlzLm5vdGlmeVNlbmRDdXN0b20gPyB0b1N0b3JlZCh0aGlzLm5vdGlmeVVzZXJzKSA6IFtdIH07XHJcblxyXG4gICAgY29uc3QgcmZUeXBlczogc3RyaW5nW10gPSBbXTtcclxuICAgIGlmICh0aGlzLnJlY3VycmluZ0ZsYWdzT24gJiYgdGhpcy5yZWN1cnJpbmdTZW5kQXBwcm92ZXIpIHsgcmZUeXBlcy5wdXNoKCdhcHByb3ZlcicpOyB9XHJcbiAgICBpZiAodGhpcy5yZWN1cnJpbmdGbGFnc09uICYmIHRoaXMucmVjdXJyaW5nU2VuZEN1c3RvbSkgeyByZlR5cGVzLnB1c2goJ2N1c3RvbScpOyB9XHJcbiAgICAvLyBUaGUgc2VydmVyIHJlc29sdmVzICdzYW1lQXNOb3RpZnknIHRvIHRoZSBOb3RpZnkgRmxhZ3MgcmVjaXBpZW50cyB3aGVuIGl0IHNlbmRzIHRoZSBlbWFpbC5cclxuICAgIGlmICh0aGlzLnJlY3VycmluZ0ZsYWdzT24gJiYgdGhpcy5yZWN1cnJpbmdTYW1lQXNOb3RpZnkpIHsgcmZUeXBlcy5wdXNoKCdzYW1lQXNOb3RpZnknKTsgfVxyXG4gICAgY29uc3QgcmZVc2VycyA9IHRoaXMucmVjdXJyaW5nRmxhZ3NPbiAmJiB0aGlzLnJlY3VycmluZ1NlbmRDdXN0b20gPyB0b1N0b3JlZCh0aGlzLnJlY3VycmluZ1VzZXJzKSA6IFtdO1xyXG4gICAgZC5yZWN1cnJpbmdGbGFnID0geyBub3RpZnlUeXBlOiByZlR5cGVzLCB1c2VyczogcmZVc2VycywgdGhyZXNob2xkOiB0aGlzLnJlY3VycmluZ0ZsYWdzT24gPyB0aGlzLnJlY3VycmluZ1RocmVzaG9sZCA6IDAgfTtcclxuXHJcbiAgICBjb25zdCBhZVR5cGVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgaWYgKHRoaXMuZGFpbHlSZXBvcnRPbiAmJiB0aGlzLmRhaWx5U2VuZEFwcHJvdmVyKSB7IGFlVHlwZXMucHVzaCgnYXBwcm92ZXInKTsgfVxyXG4gICAgaWYgKHRoaXMuZGFpbHlSZXBvcnRPbiAmJiB0aGlzLmRhaWx5U2VuZEN1c3RvbSkgeyBhZVR5cGVzLnB1c2goJ2N1c3RvbScpOyB9XHJcbiAgICBkLmF1dG9FbWFpbCA9IHsgdHlwZTogYWVUeXBlcywgdXNlcnM6IHRoaXMuZGFpbHlTZW5kQ3VzdG9tID8gdG9TdG9yZWQodGhpcy5kYWlseVVzZXJzKSA6IFtdIH07XHJcbiAgICBkLnNoYXJlUmVwb3J0UG9zdEFwcHJvdmFsID0gdGhpcy5kYWlseVJlcG9ydE9uICYmIHRoaXMuc2hhcmVQb3N0QXBwcm92YWw7XHJcblxyXG4gICAgZC5leHBvcnQgPSB0aGlzLmV4cG9ydFN1Ym1pc3Npb25PbjtcclxuICAgIGQucmVkb1ZhbGlkaXR5ID0gdGhpcy5yZWRvVmFsaWRGb3I7XHJcbiAgICBkLmF1dG9DcmVhdGVUYXNrID0gdGhpcy5hdXRvQ3JlYXRlVGFza09uO1xyXG4gICAgZC50YXNrQXNzaWduZWUgPSB0aGlzLnRhc2tBc3NpZ25lZTtcclxuICAgIGQudGFza1ZhbGlkaXR5ID0gTnVtYmVyKHRoaXMudGFza1ZhbGlkaXR5KSB8fCAxMDtcclxuICAgIGQuc2hvd0FwcHJvdmVkUmVzcG9uc2UgPSB0aGlzLnNob3dSZXNwb25zZUluQXBwO1xyXG4gICAgZC5yZXNwb25zZVZpc2liaWxpdHkgPSB0aGlzLnJlc3BvbnNlVmlzaWJpbGl0eSA9PT0gJ3ByZScgPyAncHJlQXBwcm92YWwnIDogJ3Bvc3RBcHByb3ZhbCc7XHJcbiAgICBkLnJlc3BvbnNlVmlzaWJpbGl0eUhvdXJzID0gdGhpcy5yZXNwRGVsYXk7XHJcbiAgICBkLnVzZXJWZXJpZmljYXRpb24gPSB7IHJlcXVpcmVQaG90b0NhcHR1cmU6IHRoaXMucmVxdWlyZVBob3RvLCByZXF1aXJlVXNlckFja25vd2xlZGdtZW50OiB0aGlzLnJlcXVpcmVBY2tub3dsZWRnbWVudCB9O1xyXG4gICAgZC5yZWRvRXh0ZW5zaW9uID0gdGhpcy5yZWRvRXh0ZW5zaW9uO1xyXG5cclxuICAgIC8vIFdoYXQgdGhlIENoZWNrbGlzdCBDb25maWd1cmUgcGFnZSBzZW5kczogZXZlcnlvbmUgY3VycmVudGx5IGFzc2lnbmVkLCBhbmQgdGhlIHB1Ymxpc2ggc3RhdGUuXHJcbiAgICBkLmFzc2lnbmVkVXNlcnMgPSB0aGlzLmFzc2lnbmVkVXNlcnMoKTtcclxuICAgIGQuc3RvcmVDb3VudCA9IGQuYXNzaWduZWRVc2Vycy5sZW5ndGg7XHJcbiAgICBpZiAoIWQuY292ZXJhZ2UpIHsgZC5jb3ZlcmFnZSA9ICdzdG9yZSc7IH1cclxuICAgIGQucHVibGlzaCA9IHB1Ymxpc2ggPyB0cnVlIDogISFkLnB1Ymxpc2g7XHJcblxyXG4gICAgZGF0YS5jbGllbnRJZCA9IHRoaXMuY2xpZW50SWQ7XHJcbiAgICBkYXRhLnN1Ym1pdFR5cGUgPSBwdWJsaXNoID8gJ3B1Ymxpc2gnIDogJ3NhdmUnO1xyXG4gICAgZGF0YS5zaG93RWRpdCA9IGZhbHNlO1xyXG4gICAgZGF0YS51cGRhdGVDb25maWd1cmUgPSBmYWxzZTtcclxuICAgIGRhdGEudGltZVpvbmUgPSBkYXlqcy50ei5ndWVzcygpO1xyXG4gICAgLy8gQXNzaWdubWVudCBkaWZmIGZvciB0aGUgYWN0aXZpdHkgbG9nOyB0aGlzIHBhZ2UgbmV2ZXIgY2hhbmdlcyBhc3NpZ25tZW50cy5cclxuICAgIGRhdGEuYWRkZWQgPSBbXTtcclxuICAgIGRhdGEucmVtb3ZlZCA9IHsgdXNlcjogW10sIHN0b3JlOiBbXSB9O1xyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJhdjItcGFnZSBhdWRpdC1jb25maWd1cmVcIj5cclxuXHJcbiAgPCEtLSBCcmVhZGNydW1iIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJjZi1jcnVtYlwiPlxyXG4gICAgPGEgcm91dGVyTGluaz1cIi9tYW5hZ2UvdHJheC9hdWRpdC12Mi9tYW5hZ2VcIj5NYW5hZ2UgQXVkaXQ8L2E+IOKAuiBDb25maWd1cmVcclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBUaXRsZSArIGFjdGlvbnMgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImNmLWhlYWRlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNmLWhlYWRlci10ZXh0XCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiYXYyLXNrIGF2Mi1zay0tdGl0bGUgY2Ytc2stdGl0bGVcIiAqbmdJZj1cImxvYWRpbmdcIj48L3NwYW4+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjZi10aXRsZVwiICpuZ0lmPVwiIWxvYWRpbmdcIj57eyBhdWRpdE5hbWUgfHwgJ0F1ZGl0JyB9fTwvZGl2PlxyXG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImNmLWRlc2NcIiBwbGFjZWhvbGRlcj1cIkVudGVyIEF1ZGl0IERlc2NyaXB0aW9uXCIgWyhuZ01vZGVsKV09XCJkZXNjcmlwdGlvblwiPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYXYyLWdyb3dcIj48L2Rpdj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYXYyLWJ0biBhdjItYnRuLS1wcmltYXJ5IGNmLXB1Ymxpc2hcIiBbZGlzYWJsZWRdPVwiIWNhblNhdmVcIiBbdGl0bGVdPVwic2F2ZUJsb2NrZWRSZWFzb24gfHwgcHVibGlzaEJsb2NrZWRSZWFzb25cIiAoY2xpY2spPVwicHVibGlzaCgpXCI+XHJcbiAgICAgIHt7IHNhdmluZyA/ICdTYXZpbmfigKYnIDogKHB1Ymxpc2hlZCA/ICdTYXZlICYgUHVibGlzaCcgOiAnUHVibGlzaCcpIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYXYyLWJ0biBhdjItYnRuLS1naG9zdCBjZi1kcmFmdFwiIFtkaXNhYmxlZF09XCIhY2FuU2F2ZVwiIFt0aXRsZV09XCJzYXZlQmxvY2tlZFJlYXNvblwiIChjbGljayk9XCJzYXZlRHJhZnQoKVwiPlNhdmUgYXMgRHJhZnQ8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImNmLWVycm9yIGNmLWVycm9yLS1wYWdlXCIgKm5nSWY9XCJsb2FkRXJyb3JcIj5cclxuICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMTBcIj48L2NpcmNsZT48bGluZSB4MT1cIjEyXCIgeTE9XCI4XCIgeDI9XCIxMlwiIHkyPVwiMTJcIj48L2xpbmU+PGxpbmUgeDE9XCIxMlwiIHkxPVwiMTZcIiB4Mj1cIjEyLjAxXCIgeTI9XCIxNlwiPjwvbGluZT48L3N2Zz5cclxuICAgIHt7IGxvYWRFcnJvciB9fVxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIENoaXAgcGlja2VyOiBjaGlwcyArIGlucHV0ICsgc3VnZ2VzdGlvbiBsaXN0IChvbmUgdGVtcGxhdGUsIHVzZWQgZm9yIGV2ZXJ5IHVzZXIgbGlzdCkgLS0+XHJcbiAgPG5nLXRlbXBsYXRlICNjaGlwUGlja2VyIGxldC1saXN0PVwibGlzdFwiIGxldC1sYXJnZT1cImxhcmdlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2YtY2hpcGJveFwiIFtjbGFzcy5jZi1jaGlwYm94LS1sZ109XCJsYXJnZVwiIFtjbGFzcy5pcy1vcGVuXT1cIm9wZW5DaGlwcyA9PT0gbGlzdFwiIChjbGljayk9XCJmb2N1c0NoaXBzKGxpc3QsICRldmVudClcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJjZi1jaGlwXCIgW2NsYXNzLmNmLWNoaXAtLWxnXT1cImxhcmdlXCIgKm5nRm9yPVwibGV0IHUgb2YgY2hpcHNPZihsaXN0KTsgbGV0IGkgPSBpbmRleFwiIFt0aXRsZV09XCJ1LmVcIj5cclxuICAgICAgICA8c3BhbiBbY2xhc3NdPVwibGFyZ2UgPyAnY2YtY2hpcC10YWcnIDogJ2NmLWNoaXAtaW5pJ1wiPnt7IHUuaSB9fTwvc3Bhbj57eyB1Lm4gfX1cclxuICAgICAgICA8YSBjbGFzcz1cImNmLWNoaXAteFwiIChjbGljayk9XCJyZW1vdmVDaGlwKGxpc3QsIGkpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMi41XCJcclxuICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiPjxsaW5lIHgxPVwiNlwiIHkxPVwiNlwiIHgyPVwiMThcIiB5Mj1cIjE4XCI+PC9saW5lPjxsaW5lIHgxPVwiMThcIiB5MT1cIjZcIiB4Mj1cIjZcIiB5Mj1cIjE4XCI+PC9saW5lPjwvc3ZnPlxyXG4gICAgICAgIDwvYT5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImNmLWNoaXAtaW5wdXRcIiBbY2xhc3MuY2YtY2hpcC1pbnB1dC0tbGddPVwibGFyZ2VcIiBwbGFjZWhvbGRlcj1cIkFkZCB1c2VyLi4uXCJcclxuICAgICAgICBbbmdNb2RlbF09XCJkcmFmdE9mKGxpc3QpXCIgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RHJhZnQobGlzdCwgJGV2ZW50KVwiIChmb2N1cyk9XCJmb2N1c0NoaXBzKGxpc3QsICRldmVudClcIiAoa2V5dXAuZW50ZXIpPVwiYWRkQ2hpcChsaXN0KVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2Ytc3VnZ2VzdFwiICpuZ0lmPVwib3BlbkNoaXBzID09PSBsaXN0XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNmLXN1Z2dlc3QtaXRlbVwiICpuZ0Zvcj1cImxldCB1IG9mIHN1Z2dlc3Rpb25zKGxpc3QpXCIgKGNsaWNrKT1cImFkZFN1Z2dlc3Rpb24obGlzdCwgdSwgJGV2ZW50KVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1jaGlwLWluaVwiPnt7IHUuaSB9fTwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2Ytc3VnZ2VzdC1uYW1lXCI+e3sgdS5uIH19PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1zdWdnZXN0LW1haWxcIj57eyB1LmUgfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNmLXN1Z2dlc3QtZW1wdHlcIiAqbmdJZj1cIiFzdWdnZXN0aW9ucyhsaXN0KS5sZW5ndGhcIj5cclxuICAgICAgICAgIHt7IHVzZXJzLmxlbmd0aCA/ICdObyBtYXRjaGluZyB1c2VyJyA6ICdObyB1c2VycyBmb3IgdGhpcyBjbGllbnQnIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPCEtLSBEcm9wZG93bjogc3R5bGVkIGxpa2UgdGhlIHByb3RvdHlwZSBpbnN0ZWFkIG9mIHRoZSBicm93c2VyJ3MgbmF0aXZlIHNlbGVjdCAtLT5cclxuICA8bmctdGVtcGxhdGUgI2Ryb3Bkb3duIGxldC1rZXk9XCJrZXlcIiBsZXQtb3B0aW9ucz1cIm9wdGlvbnNcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY2Ytc2VsZWN0XCIgW2NsYXNzLmlzLW9wZW5dPVwib3BlblNlbGVjdCA9PT0ga2V5XCI+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2Ytc2VsZWN0LWJ0blwiIChjbGljayk9XCJ0b2dnbGVTZWxlY3Qoa2V5LCAkZXZlbnQpXCI+XHJcbiAgICAgICAge3sgc2VsZWN0TGFiZWwoa2V5LCBvcHRpb25zKSB9fVxyXG4gICAgICAgIDxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48cG9seWxpbmUgcG9pbnRzPVwiNiA5IDEyIDE1IDE4IDlcIj48L3BvbHlsaW5lPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNmLXNlbGVjdC1tZW51XCIgKm5nSWY9XCJvcGVuU2VsZWN0ID09PSBrZXlcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2Ytc2VsZWN0LWl0ZW1cIiAqbmdGb3I9XCJsZXQgbyBvZiBvcHRpb25zXCIgW2NsYXNzLmlzLW9uXT1cImlzUGlja2VkKGtleSwgbylcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInBpY2soa2V5LCBvLCAkZXZlbnQpXCI+e3sgby5sYWJlbCB9fTwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvc3Bhbj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiY2YtYm9keVwiICpuZ0lmPVwiIWxvYWRFcnJvclwiPlxyXG4gICAgPCEtLSBTZWN0aW9uIHRyZWUgLS0+XHJcbiAgICA8YXNpZGUgY2xhc3M9XCJjZi1sZWZ0XCI+XHJcbiAgICAgIDxsaWItYXVkaXQtdjItc2hpbW1lciAqbmdJZj1cImxvYWRpbmdcIiBbcm93c109XCIzXCI+PC9saWItYXVkaXQtdjItc2hpbW1lcj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZ1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2YtbGVmdC10aXRsZVwiPnt7IGF1ZGl0TmFtZSB8fCAnQXVkaXQnIH19PC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2YtaGludFwiICpuZ0lmPVwiIXNlY3Rpb25zLmxlbmd0aFwiPk5vIHF1ZXN0aW9ucyB5ZXQ8L2Rpdj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcyBvZiBzZWN0aW9uc1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZi1zZWN0aW9uXCIgW2NsYXNzLmlzLW9wZW5dPVwicy5vcGVuXCIgKGNsaWNrKT1cInRvZ2dsZVNlY3Rpb24ocylcIj5cclxuICAgICAgICAgIHt7IHMubGFiZWwgfX1cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2YtcnVsZVwiPjwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2YtY2hldlwiPlxyXG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIFtjbGFzcy5yb3RhdGVdPVwiIXMub3BlblwiPlxyXG4gICAgICAgICAgICAgIDxwb2x5bGluZSBwb2ludHM9XCI2IDkgMTIgMTUgMTggOVwiPjwvcG9seWxpbmU+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZi1pdGVtc1wiICpuZ0lmPVwicy5vcGVuICYmIHMuaXRlbXMubGVuZ3RoXCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdCBvZiBzLml0ZW1zXCI+e3sgaXQgfX08L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2Ytc2NoZWR1bGUtdGl0bGVcIj5TY2hlZHVsZTwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2Ytc2NoZWR1bGVcIj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjhcIlxyXG4gICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj5cclxuICAgICAgICAgICAgPHJlY3QgeD1cIjNcIiB5PVwiNVwiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxNlwiIHJ4PVwiMlwiPjwvcmVjdD5cclxuICAgICAgICAgICAgPGxpbmUgeDE9XCIzXCIgeTE9XCIxMFwiIHgyPVwiMjFcIiB5Mj1cIjEwXCI+PC9saW5lPlxyXG4gICAgICAgICAgICA8bGluZSB4MT1cIjhcIiB5MT1cIjNcIiB4Mj1cIjhcIiB5Mj1cIjZcIj48L2xpbmU+XHJcbiAgICAgICAgICAgIDxsaW5lIHgxPVwiMTZcIiB5MT1cIjNcIiB4Mj1cIjE2XCIgeTI9XCI2XCI+PC9saW5lPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICB7eyBzY2hlZHVsZSB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuOFwiXHJcbiAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPlxyXG4gICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjlcIj48L2NpcmNsZT5cclxuICAgICAgICAgICAgPHBvbHlsaW5lIHBvaW50cz1cIjEyIDcgMTIgMTIgMTUuNSAxNFwiPjwvcG9seWxpbmU+XHJcbiAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgIHt7IHNjaGVkdWxlV2luZG93IH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvYXNpZGU+XHJcblxyXG4gICAgPCEtLSBDb25maWd1cmF0aW9uIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNmLXJpZ2h0XCI+XHJcblxyXG4gICAgICA8c2VjdGlvbiBjbGFzcz1cImNmLWNhcmRcIiAqbmdJZj1cImxvYWRpbmdcIj5cclxuICAgICAgICA8bGliLWF1ZGl0LXYyLXNoaW1tZXIgW3Jvd3NdPVwiNFwiPjwvbGliLWF1ZGl0LXYyLXNoaW1tZXI+XHJcbiAgICAgIDwvc2VjdGlvbj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZ1wiPlxyXG5cclxuICAgICAgPCEtLSA9PT09PSBBZHZhbmNlIENvbmZpZ3VyYXRpb24gPT09PT0gLS0+XHJcbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2YtY2FyZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZi1ibG9jay1oZWFkXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNmLWJsb2NrLXRpdGxlXCI+QWR2YW5jZSBDb25maWd1cmF0aW9uPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1ydWxlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1jaGV2XCI+XHJcbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PHBvbHlsaW5lIHBvaW50cz1cIjYgOSAxMiAxNSAxOCA5XCI+PC9wb2x5bGluZT48L3N2Zz5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBBdWRpdCBPd25lciAtLT5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWxhYmVsXCI+QXVkaXQgT3duZXI8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1oaW50XCI+T3duZXJzIGdldCBhY2Nlc3MgdG8gbWFuYWdlIHRoZSBhdWRpdDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZi1yb3dcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2YtZmllbGRcIj5DYW4gYmUgbWFuYWdlZCBieTwvc3Bhbj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjaGlwUGlja2VyOyBjb250ZXh0OiB7IGxpc3Q6ICdvd25lcnMnLCBsYXJnZTogZmFsc2UgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIEFwcHJvdmVyIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZi10b2dnbGUtcm93XCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNmLWxhYmVsXCI+QXBwcm92ZXI8L3NwYW4+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNmLXN3aXRjaFwiIFtjbGFzcy5pcy1vbl09XCJhcHByb3Zlck9uXCIgKGNsaWNrKT1cInRvZ2dsZUFwcHJvdmVyKClcIj48c3Bhbj48L3NwYW4+PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNmLWhpbnQgY2YtaGludC0tdGlnaHRcIj5CeSBlbmFibGluZywgdGhlIHVzZXJzIHdpbGwgYmUgYWJsZSB0byBhcHByb3ZlIHRoZSBhdWRpdDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZi1yb3dcIiAqbmdJZj1cImFwcHJvdmVyT25cIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2YtZmllbGRcIj5UbyBiZSBhcHByb3ZlZCBieTwvc3Bhbj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjaGlwUGlja2VyOyBjb250ZXh0OiB7IGxpc3Q6ICdhcHByb3ZlcnMnLCBsYXJnZTogZmFsc2UgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZi1lcnJvclwiICpuZ0lmPVwiYXBwcm92ZXJFcnJvclwiPlxyXG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIxMlwiIHI9XCIxMFwiPjwvY2lyY2xlPjxsaW5lIHgxPVwiMTJcIiB5MT1cIjhcIiB4Mj1cIjEyXCIgeTI9XCIxMlwiPjwvbGluZT48bGluZSB4MT1cIjEyXCIgeTE9XCIxNlwiIHgyPVwiMTIuMDFcIiB5Mj1cIjE2XCI+PC9saW5lPjwvc3ZnPlxyXG4gICAgICAgICAge3sgYXBwcm92ZXJFcnJvciB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZi1pbmZvIGNmLWluZm8tLXdyYXBcIiAqbmdJZj1cIiFhcHByb3Zlck9uICYmIGFwcHJvdmVycy5sZW5ndGhcIj5cclxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMTBcIj48L2NpcmNsZT48bGluZSB4MT1cIjEyXCIgeTE9XCIxNlwiIHgyPVwiMTJcIiB5Mj1cIjEyXCI+PC9saW5lPjxsaW5lIHgxPVwiMTJcIiB5MT1cIjhcIiB4Mj1cIjEyLjAxXCIgeTI9XCI4XCI+PC9saW5lPjwvc3ZnPlxyXG4gICAgICAgICAgQXBwcm92ZXIgaXMgb2ZmLCBzbyB0aGUge3sgYXBwcm92ZXJzLmxlbmd0aCB9fSBhcHByb3Zlcnt7IGFwcHJvdmVycy5sZW5ndGggPT09IDEgPyAnJyA6ICdzJyB9fSBhZGRlZCB3aWxsIGJlIHJlbW92ZWQgd2hlbiB5b3Ugc2F2ZS4gVHVybiBBcHByb3ZlciBiYWNrIG9uIHRvIGtlZXAge3sgYXBwcm92ZXJzLmxlbmd0aCA9PT0gMSA/ICdpdCcgOiAndGhlbScgfX0uXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNmLWluZm8gY2YtaW5mby0td3JhcFwiICpuZ0lmPVwiIWFwcHJvdmVyT24gJiYgIWFwcHJvdmVycy5sZW5ndGhcIj5cclxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMTBcIj48L2NpcmNsZT48bGluZSB4MT1cIjEyXCIgeTE9XCIxNlwiIHgyPVwiMTJcIiB5Mj1cIjEyXCI+PC9saW5lPjxsaW5lIHgxPVwiMTJcIiB5MT1cIjhcIiB4Mj1cIjEyLjAxXCIgeTI9XCI4XCI+PC9saW5lPjwvc3ZnPlxyXG4gICAgICAgICAgQXBwcm92ZXIgaXMgb2ZmLCBzbyBzdWJtaXR0ZWQgYXVkaXRzIGFyZSBub3Qgc2VudCBmb3IgYXBwcm92YWwuIFR1cm4gaXQgb24gdG8gYWRkIGFwcHJvdmVycyBvciB0byBzZW5kIGZsYWdzIGFuZCByZXBvcnRzIHRvIHRoZW0uXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gUmVtaW5kZXIgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNmLXRvZ2dsZS1yb3dcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2YtbGFiZWxcIj5SZW1pbmRlcjwvc3Bhbj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2Ytc3dpdGNoXCIgW2NsYXNzLmlzLW9uXT1cInJlbWluZGVyT25cIiAoY2xpY2spPVwidG9nZ2xlUmVtaW5kZXIoKVwiPjxzcGFuPjwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtaGludCBjZi1oaW50LS10aWdodFwiPkJ5IGVuYWJsaW5nLCB0aGUgdXNlcnMgd2lsbCBiZSByZW1pbmRlZCBpbiB0aGUgc2VsZWN0ZWQgaW50ZXJ2YWw8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtaW5uZXJcIiAqbmdJZj1cInJlbWluZGVyT25cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1pbmxpbmVcIj5cclxuICAgICAgICAgICAgTm90aWZ5IHVzZXIgYmVmb3JlXHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2YtcmVtaW5kZXJcIiAqbmdGb3I9XCJsZXQgbSBvZiByZW1pbmRlcnM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICA8bGliLWF1ZGl0LXYyLXNlbGVjdCBjbGFzcz1cImNmLXJlbWluZGVyLXNlbGVjdFwiIFt2YWx1ZV09XCJtXCIgW29wdGlvbnNdPVwicmVtaW5kZXJPcHRzW2ldIHx8IFtdXCIgW3NlYXJjaGFibGVdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgW2FyaWFMYWJlbF09XCInUmVtaW5kZXIgJyArIChpICsgMSkgKyAnIGluIG1pbnV0ZXMnXCIgKGNoYW5nZWQpPVwic2V0UmVtaW5kZXIoaSwgJGV2ZW50LnRhcmdldC52YWx1ZSlcIj48L2xpYi1hdWRpdC12Mi1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjZi1jaGlwLXhcIiAqbmdJZj1cInJlbWluZGVycy5sZW5ndGggPiAxXCIgdGl0bGU9XCJSZW1vdmUgcmVtaW5kZXJcIiAoY2xpY2spPVwicmVtb3ZlUmVtaW5kZXIoaSlcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMi41XCJcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiPjxsaW5lIHgxPVwiNlwiIHkxPVwiNlwiIHgyPVwiMThcIiB5Mj1cIjE4XCI+PC9saW5lPjxsaW5lIHgxPVwiMThcIiB5MT1cIjZcIiB4Mj1cIjZcIiB5Mj1cIjE4XCI+PC9saW5lPjwvc3ZnPlxyXG4gICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNmLWljb24tYnRuXCIgKm5nSWY9XCJyZW1pbmRlcnMubGVuZ3RoIDwgbWF4UmVtaW5kZXJzXCIgdGl0bGU9XCJBZGQgcmVtaW5kZXJcIiAoY2xpY2spPVwiYWRkUmVtaW5kZXIoKVwiPlxyXG4gICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48bGluZSB4MT1cIjEyXCIgeTE9XCI1XCIgeDI9XCIxMlwiIHkyPVwiMTlcIj48L2xpbmU+PGxpbmUgeDE9XCI1XCIgeTE9XCIxMlwiIHgyPVwiMTlcIiB5Mj1cIjEyXCI+PC9saW5lPjwvc3ZnPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWluZm9cIj5cclxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjEwXCI+PC9jaXJjbGU+PGxpbmUgeDE9XCIxMlwiIHkxPVwiMTZcIiB4Mj1cIjEyXCIgeTI9XCIxMlwiPjwvbGluZT48bGluZSB4MT1cIjEyXCIgeTE9XCI4XCIgeDI9XCIxMi4wMVwiIHkyPVwiOFwiPjwvbGluZT48L3N2Zz5cclxuICAgICAgICAgICAgU2VuZCBhbGVydHMge3sgcmVtaW5kZXJTdW1tYXJ5IH19IG1pbnMgYmVmb3JlIHRoZSBhdWRpdCBlbmQgdGltZVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gTm90aWZ5IEZsYWdzIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZi10b2dnbGUtcm93XCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNmLWxhYmVsXCI+Tm90aWZ5IEZsYWdzPC9zcGFuPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjZi1zd2l0Y2hcIiBbY2xhc3MuaXMtb25dPVwibm90aWZ5RmxhZ3NPblwiIChjbGljayk9XCJ0b2dnbGVOb3RpZnlGbGFncygpXCI+PHNwYW4+PC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZi1oaW50IGNmLWhpbnQtLXRpZ2h0XCI+QnkgZW5hYmxpbmcsIGFsbCBmbGFncyB3aWxsIGJlIHNlbnQgYXMgYW4gZW1haWw8L2Rpdj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm90aWZ5RmxhZ3NPblwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWNoZWNrc1wiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNmLWNoZWNrcy1sYWJlbFwiPlNlbmQgVG88L3NwYW4+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNmLWNoZWNrXCIgW2NsYXNzLmlzLWJsb2NrZWRdPVwiIWhhc0FwcHJvdmVycyAmJiAhbm90aWZ5U2VuZEFwcHJvdmVyXCIgKGNsaWNrKT1cInRvZ2dsZVNlbmRBcHByb3Zlcignbm90aWZ5U2VuZEFwcHJvdmVyJylcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNmLWNoZWNrLWJveFwiIFtjbGFzcy5pcy1vbl09XCJub3RpZnlTZW5kQXBwcm92ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJub3RpZnlTZW5kQXBwcm92ZXJcIiB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTBcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PHBvbHlsaW5lIHBvaW50cz1cIjIwIDYgOSAxNyA0IDEyXCI+PC9wb2x5bGluZT48L3N2Zz5cclxuICAgICAgICAgICAgICA8L3NwYW4+QXBwcm92ZXJcclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2YtY2hlY2tcIiAoY2xpY2spPVwibm90aWZ5U2VuZEN1c3RvbSA9ICFub3RpZnlTZW5kQ3VzdG9tXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1jaGVjay1ib3hcIiBbY2xhc3MuaXMtb25dPVwibm90aWZ5U2VuZEN1c3RvbVwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIm5vdGlmeVNlbmRDdXN0b21cIiB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTBcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PHBvbHlsaW5lIHBvaW50cz1cIjIwIDYgOSAxNyA0IDEyXCI+PC9wb2x5bGluZT48L3N2Zz5cclxuICAgICAgICAgICAgICA8L3NwYW4+Q3VzdG9tXHJcbiAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub3RpZnlTZW5kQ3VzdG9tXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjaGlwUGlja2VyOyBjb250ZXh0OiB7IGxpc3Q6ICdub3RpZnlVc2VycycsIGxhcmdlOiBmYWxzZSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1lcnJvclwiICpuZ0lmPVwibm90aWZ5RmxhZ3NFcnJvclwiPlxyXG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMTBcIj48L2NpcmNsZT48bGluZSB4MT1cIjEyXCIgeTE9XCI4XCIgeDI9XCIxMlwiIHkyPVwiMTJcIj48L2xpbmU+PGxpbmUgeDE9XCIxMlwiIHkxPVwiMTZcIiB4Mj1cIjEyLjAxXCIgeTI9XCIxNlwiPjwvbGluZT48L3N2Zz5cclxuICAgICAgICAgICAge3sgbm90aWZ5RmxhZ3NFcnJvciB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwhLS0gTm90aWZ5IG9uIFJlY3VycmluZyBGbGFncyAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtdG9nZ2xlLXJvd1wiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1sYWJlbFwiPk5vdGlmeSBvbiBSZWN1cnJpbmcgRmxhZ3M8L3NwYW4+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNmLXN3aXRjaFwiIFtjbGFzcy5pcy1vbl09XCJyZWN1cnJpbmdGbGFnc09uXCIgKGNsaWNrKT1cInRvZ2dsZVJlY3VycmluZ0ZsYWdzKClcIj48c3Bhbj48L3NwYW4+PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNmLWhpbnQgY2YtaGludC0tdGlnaHRcIj5XaGVuIGVuYWJsZWQsIGVtYWlscyBhcmUgc2VudCBmb3IgcmVjdXJyaW5nIGZsYWdzIGJhc2VkIG9uIHRoZSBjb25maWd1cmVkIHRocmVzaG9sZDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtaW5uZXJcIiAqbmdJZj1cInJlY3VycmluZ0ZsYWdzT25cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1pbmxpbmVcIj5cclxuICAgICAgICAgICAgU2VuZCBFbWFpbCBpZiB0aGUgc2FtZSBxdWVzdGlvbiBpcyBmbGFnZ2VkXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93bjsgY29udGV4dDogeyBrZXk6ICdyZWN1cnJpbmdUaHJlc2hvbGQnLCBvcHRpb25zOiB0aHJlc2hvbGRPcHRzIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgdGltZXMgYnkgdGhlIHNhbWUgc3RvcmVcclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWluZm9cIj5cclxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjEwXCI+PC9jaXJjbGU+PGxpbmUgeDE9XCIxMlwiIHkxPVwiMTZcIiB4Mj1cIjEyXCIgeTI9XCIxMlwiPjwvbGluZT48bGluZSB4MT1cIjEyXCIgeTE9XCI4XCIgeDI9XCIxMi4wMVwiIHkyPVwiOFwiPjwvbGluZT48L3N2Zz5cclxuICAgICAgICAgICAgT25jZSB0aGUgdGhyZXNob2xkIGlzIHJlYWNoZWQgYW5kIGFuIGVtYWlsIGlzIHNlbnQsIHRoZSBmbGFnIGNvdW50IHJlc2V0cyB0byB6ZXJvXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVjdXJyaW5nRmxhZ3NPblwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWNoZWNrc1wiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNmLWNoZWNrcy1sYWJlbFwiPlNlbmQgVG88L3NwYW4+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNmLWNoZWNrXCIgW2NsYXNzLmlzLWJsb2NrZWRdPVwiIWhhc0FwcHJvdmVycyAmJiAhcmVjdXJyaW5nU2VuZEFwcHJvdmVyXCIgKGNsaWNrKT1cInRvZ2dsZVNlbmRBcHByb3ZlcigncmVjdXJyaW5nU2VuZEFwcHJvdmVyJylcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNmLWNoZWNrLWJveFwiIFtjbGFzcy5pcy1vbl09XCJyZWN1cnJpbmdTZW5kQXBwcm92ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJyZWN1cnJpbmdTZW5kQXBwcm92ZXJcIiB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTBcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PHBvbHlsaW5lIHBvaW50cz1cIjIwIDYgOSAxNyA0IDEyXCI+PC9wb2x5bGluZT48L3N2Zz5cclxuICAgICAgICAgICAgICA8L3NwYW4+QXBwcm92ZXJcclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2YtY2hlY2tcIiAoY2xpY2spPVwidG9nZ2xlUmVjdXJyaW5nQ3VzdG9tKClcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNmLWNoZWNrLWJveFwiIFtjbGFzcy5pcy1vbl09XCJyZWN1cnJpbmdTZW5kQ3VzdG9tXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwicmVjdXJyaW5nU2VuZEN1c3RvbVwiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48cG9seWxpbmUgcG9pbnRzPVwiMjAgNiA5IDE3IDQgMTJcIj48L3BvbHlsaW5lPjwvc3ZnPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5DdXN0b21cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2YtY2hlY2tcIiAoY2xpY2spPVwicmVjdXJyaW5nU2FtZUFzTm90aWZ5ID0gIXJlY3VycmluZ1NhbWVBc05vdGlmeVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2YtY2hlY2stYm94XCIgW2NsYXNzLmlzLW9uXT1cInJlY3VycmluZ1NhbWVBc05vdGlmeVwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cInJlY3VycmluZ1NhbWVBc05vdGlmeVwiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48cG9seWxpbmUgcG9pbnRzPVwiMjAgNiA5IDE3IDQgMTJcIj48L3BvbHlsaW5lPjwvc3ZnPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5Vc2Ugc2FtZSB1c2VycyBmcm9tIE5vdGlmeSBGbGFnc1xyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVjdXJyaW5nU2VuZEN1c3RvbVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2hpcFBpY2tlcjsgY29udGV4dDogeyBsaXN0OiAncmVjdXJyaW5nVXNlcnMnLCBsYXJnZTogZmFsc2UgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtaW5mb1wiICpuZ0lmPVwicmVjdXJyaW5nU2FtZUFzTm90aWZ5XCI+XHJcbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIxMlwiIHI9XCIxMFwiPjwvY2lyY2xlPjxsaW5lIHgxPVwiMTJcIiB5MT1cIjE2XCIgeDI9XCIxMlwiIHkyPVwiMTJcIj48L2xpbmU+PGxpbmUgeDE9XCIxMlwiIHkxPVwiOFwiIHgyPVwiMTIuMDFcIiB5Mj1cIjhcIj48L2xpbmU+PC9zdmc+XHJcbiAgICAgICAgICAgIHt7IG5vdGlmeVJlY2lwaWVudHNMYWJlbCB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtZXJyb3JcIiAqbmdJZj1cInJlY3VycmluZ0ZsYWdzRXJyb3JcIj5cclxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjEwXCI+PC9jaXJjbGU+PGxpbmUgeDE9XCIxMlwiIHkxPVwiOFwiIHgyPVwiMTJcIiB5Mj1cIjEyXCI+PC9saW5lPjxsaW5lIHgxPVwiMTJcIiB5MT1cIjE2XCIgeDI9XCIxMi4wMVwiIHkyPVwiMTZcIj48L2xpbmU+PC9zdmc+XHJcbiAgICAgICAgICAgIHt7IHJlY3VycmluZ0ZsYWdzRXJyb3IgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8IS0tIERhaWx5IHJlcG9ydCAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtdG9nZ2xlLXJvd1wiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1sYWJlbFwiPkVuYWJsZSAtIERhaWx5IFJlcG9ydDwvc3Bhbj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2Ytc3dpdGNoXCIgW2NsYXNzLmlzLW9uXT1cImRhaWx5UmVwb3J0T25cIiAoY2xpY2spPVwidG9nZ2xlRGFpbHlSZXBvcnQoKVwiPjxzcGFuPjwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtaGludCBjZi1oaW50LS10aWdodFwiPkJ5IEVuYWJsaW5nLCBjb21wbGlhbmNlIHNjb3JlIHdpbGwgYmUgc2VudCBhcyBhbiBlbWFpbCB0byB0aGUgYWJvdmUgdXNlcnM8L2Rpdj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGFpbHlSZXBvcnRPblwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWNoZWNrc1wiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNmLWNoZWNrcy1sYWJlbFwiPlNlbmQgVG88L3NwYW4+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNmLWNoZWNrXCIgW2NsYXNzLmlzLWJsb2NrZWRdPVwiIWhhc0FwcHJvdmVycyAmJiAhZGFpbHlTZW5kQXBwcm92ZXJcIiAoY2xpY2spPVwidG9nZ2xlU2VuZEFwcHJvdmVyKCdkYWlseVNlbmRBcHByb3ZlcicpXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1jaGVjay1ib3hcIiBbY2xhc3MuaXMtb25dPVwiZGFpbHlTZW5kQXBwcm92ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJkYWlseVNlbmRBcHByb3ZlclwiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48cG9seWxpbmUgcG9pbnRzPVwiMjAgNiA5IDE3IDQgMTJcIj48L3BvbHlsaW5lPjwvc3ZnPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5BcHByb3ZlclxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjZi1jaGVja1wiIChjbGljayk9XCJkYWlseVNlbmRDdXN0b20gPSAhZGFpbHlTZW5kQ3VzdG9tXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1jaGVjay1ib3hcIiBbY2xhc3MuaXMtb25dPVwiZGFpbHlTZW5kQ3VzdG9tXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiZGFpbHlTZW5kQ3VzdG9tXCIgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjxwb2x5bGluZSBwb2ludHM9XCIyMCA2IDkgMTcgNCAxMlwiPjwvcG9seWxpbmU+PC9zdmc+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPkN1c3RvbVxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGFpbHlTZW5kQ3VzdG9tXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjaGlwUGlja2VyOyBjb250ZXh0OiB7IGxpc3Q6ICdkYWlseVVzZXJzJywgbGFyZ2U6IGZhbHNlIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2YtY2hlY2tcIiAoY2xpY2spPVwic2hhcmVQb3N0QXBwcm92YWwgPSAhc2hhcmVQb3N0QXBwcm92YWxcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1jaGVjay1ib3hcIiBbY2xhc3MuaXMtb25dPVwic2hhcmVQb3N0QXBwcm92YWxcIj5cclxuICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwic2hhcmVQb3N0QXBwcm92YWxcIiB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTBcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjxwb2x5bGluZSBwb2ludHM9XCIyMCA2IDkgMTcgNCAxMlwiPjwvcG9seWxpbmU+PC9zdmc+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5TaGFyZSBSZXBvcnQgUG9zdCBBcHByb3ZhbFxyXG4gICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1lcnJvclwiICpuZ0lmPVwiZGFpbHlSZXBvcnRFcnJvclwiPlxyXG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMTBcIj48L2NpcmNsZT48bGluZSB4MT1cIjEyXCIgeTE9XCI4XCIgeDI9XCIxMlwiIHkyPVwiMTJcIj48L2xpbmU+PGxpbmUgeDE9XCIxMlwiIHkxPVwiMTZcIiB4Mj1cIjEyLjAxXCIgeTI9XCIxNlwiPjwvbGluZT48L3N2Zz5cclxuICAgICAgICAgICAge3sgZGFpbHlSZXBvcnRFcnJvciB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwhLS0gRXhwb3J0IHN1Ym1pc3Npb246IFRhbmdvIHVzZXJzIG9ubHksIGFzIHRoZSB2MSBDb25maWd1cmUgKGl0cyBzdG9yZWQgdmFsdWUgaXMga2VwdCBmb3IgZXZlcnlvbmUgZWxzZSkuIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZi1ncmlkMlwiICpuZ0lmPVwiYWNjZXNzLmlzVGFuZ29cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1zdGFjayBjZi1zdGFjay0tdGlnaHRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNmLXRvZ2dsZS1yb3dcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNmLWxhYmVsXCI+RXhwb3J0IFN1Ym1pc3Npb248L3NwYW4+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjZi1zd2l0Y2hcIiBbY2xhc3MuaXMtb25dPVwiZXhwb3J0U3VibWlzc2lvbk9uXCIgKGNsaWNrKT1cImV4cG9ydFN1Ym1pc3Npb25PbiA9ICFleHBvcnRTdWJtaXNzaW9uT25cIj48c3Bhbj48L3NwYW4+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtaGludFwiPkVuYWJsZSB0aGlzIHRvIGFsbG93IGF1ZGl0IHN1Ym1pdHRlcnMgdG8gZG93bmxvYWQgdGhlaXIgc3VibWlzc2lvbiBhcyBhIFBERiBmaWxlPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBSZWRvIHZhbGlkaXR5IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZi1ncmlkMlwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNmLXN0YWNrXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1sYWJlbFwiPlJlZG8gVmFsaWRpdHk8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWlubGluZVwiPlxyXG4gICAgICAgICAgICAgIFJlZG8gdmFsaWQgZm9yXHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duOyBjb250ZXh0OiB7IGtleTogJ3JlZG9WYWxpZEZvcicsIG9wdGlvbnM6IHJlZG9EYXlPcHRzIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICBEYXkgZnJvbSBSZWRvIGNyZWF0aW9uXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gQXV0byBjcmVhdGUgdGFzayAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtdG9nZ2xlLXJvd1wiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1sYWJlbFwiPkF1dG8gQ3JlYXRlIFRhc2sgZm9yIEZsYWdzPC9zcGFuPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjZi1zd2l0Y2hcIiBbY2xhc3MuaXMtb25dPVwiYXV0b0NyZWF0ZVRhc2tPblwiIChjbGljayk9XCJhdXRvQ3JlYXRlVGFza09uID0gIWF1dG9DcmVhdGVUYXNrT25cIj48c3Bhbj48L3NwYW4+PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNmLWhpbnQgY2YtaGludC0tdGlnaHRcIj5CeSBlbmFibGluZywgYSB0YXNrIGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBmb3IgZXZlcnkgZmxhZ2dlZCBxdWVzdGlvbiBpbiB0aGUgYXVkaXQ8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBXaG8gZ2V0cyB0aGUgdGFzayBhbmQgaG93IGxvbmcgaXQgc3RheXMgb3BlbiAoYXMgdGhlIENoZWNrbGlzdCBDb25maWd1cmUgcGFnZSkgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNmLWF1dG90YXNrXCIgKm5nSWY9XCJhdXRvQ3JlYXRlVGFza09uXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtYXV0b3Rhc2stdGl0bGVcIj5UYXNrIEFzc2lnbmVlPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtaGludCBjZi1oaW50LS10aWdodFwiPkNob29zZSB3aG8gdGhlIGZsYWdnZWQgdGFzayBpcyBhc3NpZ25lZCB0bzwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWF1dG90YXNrLWNob2ljZXNcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjZi1jaG9pY2VcIiBbY2xhc3MuaXMtb25dPVwidGFza0Fzc2lnbmVlID09PSAnc3VibWl0dGVyJ1wiIChjbGljayk9XCJ0YXNrQXNzaWduZWUgPSAnc3VibWl0dGVyJ1wiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2YtcmFkaW9cIiBbY2xhc3MuaXMtb25dPVwidGFza0Fzc2lnbmVlID09PSAnc3VibWl0dGVyJ1wiPjxzcGFuPjwvc3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1jaG9pY2UtdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1jaG9pY2UtdGl0bGVcIj5BdWRpdCBTdWJtaXR0ZXI8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNmLWNob2ljZS1zdWJcIj5UYXNrIGlzIGFzc2lnbmVkIHRvIHRoZSB1c2VyIHdobyBmaWxsZWQgdGhlIGF1ZGl0PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2YtY2hvaWNlXCIgW2NsYXNzLmlzLW9uXT1cInRhc2tBc3NpZ25lZSA9PT0gJ3N0b3JlJ1wiIChjbGljayk9XCJ0YXNrQXNzaWduZWUgPSAnc3RvcmUnXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1yYWRpb1wiIFtjbGFzcy5pcy1vbl09XCJ0YXNrQXNzaWduZWUgPT09ICdzdG9yZSdcIj48c3Bhbj48L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2YtY2hvaWNlLXRleHRcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2YtY2hvaWNlLXRpdGxlXCI+U3RvcmUgVXNlcjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2YtY2hvaWNlLXN1YlwiPlRhc2sgaXMgYXNzaWduZWQgdG8gdGhlIHVzZXIgbWFwcGVkIHRvIHRoZSBmbGFnZ2VkIHN0b3JlPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1hdXRvdGFzay10aXRsZVwiPlRhc2sgVmFsaWRpdHk8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1hdXRvdGFzay12YWxpZGl0eVwiPlxyXG4gICAgICAgICAgICA8c3Bhbj5UYXNrIHZhbGlkIGZvcjwvc3Bhbj5cclxuICAgICAgICAgICAgPGxpYi1hdWRpdC12Mi1zZWxlY3QgY2xhc3M9XCJjZi12YWxpZGl0eS1zZWxlY3RcIiBbKG5nTW9kZWwpXT1cInRhc2tWYWxpZGl0eVwiIFtvcHRpb25zXT1cInRhc2tWYWxpZGl0eU9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgIFtzZWFyY2hhYmxlXT1cImZhbHNlXCIgYXJpYUxhYmVsPVwiVGFzayB2YWxpZGl0eSBpbiBkYXlzXCI+PC9saWItYXVkaXQtdjItc2VsZWN0PlxyXG4gICAgICAgICAgICA8c3Bhbj5kYXlzIGZyb20gdGFzayBjcmVhdGlvbjwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L3NlY3Rpb24+XHJcblxyXG4gICAgICA8IS0tID09PT09IEF1ZGl0IENvbmZpZ3VyYXRpb24gPT09PT0gLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjZi1kaXZpZGVyLWhlYWRcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImNmLWJsb2NrLXRpdGxlXCI+QXVkaXQgQ29uZmlndXJhdGlvbjwvc3Bhbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImNmLXJ1bGVcIj48L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjZi1jYXJkIGNmLWNhcmQtLWxnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNmLWJsb2NrLXRpdGxlXCI+U3VibWlzc2lvbiAmYW1wOyBWaXNpYmlsaXR5PC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gY2YtYm94LS1vcGVuOiB0aGUgZGlzcHV0ZS13aW5kb3cgYW5kIHJlc3BvbnNlLWRlbGF5IG1lbnVzIG11c3Qgbm90IGJlIGNsaXBwZWQgYnkgdGhlIGJveCAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtYm94IGNmLWJveC0tb3BlblwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWJveC1yb3dcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjZi1zd2l0Y2ggY2Ytc3dpdGNoLS10b3BcIiBbY2xhc3MuaXMtb25dPVwic2hvd1Jlc3BvbnNlSW5BcHBcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJzaG93UmVzcG9uc2VJbkFwcCA9ICFzaG93UmVzcG9uc2VJbkFwcFwiPjxzcGFuPjwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNmLXN0YWNrIGNmLXN0YWNrLS14c1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1sYWJlbFwiPlNob3cgUmVzcG9uc2UgaW4gTW9iaWxlIEFwcDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1oaW50XCI+QnkgZW5hYmxpbmcgdGhpcyBvcHRpb24sIHN0b3JlIHVzZXJzIGNhbiB2aWV3IHRoZSBhdWRpdCByZXNwb25zZSBpbiB0aGUgTW9iaWxlIEFwcC48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtYm94LXN1YlwiICpuZ0lmPVwic2hvd1Jlc3BvbnNlSW5BcHBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNmLXN0YWNrIGNmLXN0YWNrLS14c1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1sYWJlbC1zbVwiPlJlc3BvbnNlIFZpc2liaWxpdHk8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtaGludFwiPkNob29zZSB3aGVuIHRoZSByZXNwb25zZSBiZWNvbWVzIHZpc2libGUgdG8gc3RvcmUgdXNlcnM8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2Ytb3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1vcHRpb25cIiBbY2xhc3MuaXMtb25dPVwicmVzcG9uc2VWaXNpYmlsaXR5ID09PSAncHJlJ1wiIChjbGljayk9XCJyZXNwb25zZVZpc2liaWxpdHkgPSAncHJlJ1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1yYWRpb1wiIFtjbGFzcy5pcy1vbl09XCJyZXNwb25zZVZpc2liaWxpdHkgPT09ICdwcmUnXCI+PHNwYW4+PC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1zdGFjayBjZi1zdGFjay0tc21cIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWxhYmVsLXNtXCI+UHJlLWFwcHJvdmFsPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1oaW50XCI+VGhlIGF1ZGl0IHJlc3BvbnNlIHdpbGwgYmUgdmlzaWJsZSB0byBzdG9yZSB1c2VycyBiZWZvcmUgaXQgaXMgYXBwcm92ZWQuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1pbmxpbmUgY2YtaW5saW5lLS10b3BcIj5cclxuICAgICAgICAgICAgICAgICAgICBTaG93IHJlc3BvbnNlXHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duOyBjb250ZXh0OiB7IGtleTogJ3Jlc3BEZWxheScsIG9wdGlvbnM6IHJlc3BEZWxheU9wdHMgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIGFmdGVyIHN1Ym1pc3Npb25cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2Ytb3B0aW9uXCIgW2NsYXNzLmlzLW9uXT1cInJlc3BvbnNlVmlzaWJpbGl0eSA9PT0gJ3Bvc3QnXCIgKGNsaWNrKT1cInJlc3BvbnNlVmlzaWJpbGl0eSA9ICdwb3N0J1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1yYWRpb1wiIFtjbGFzcy5pcy1vbl09XCJyZXNwb25zZVZpc2liaWxpdHkgPT09ICdwb3N0J1wiPjxzcGFuPjwvc3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2Ytc3RhY2sgY2Ytc3RhY2stLXNtXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1sYWJlbC1zbVwiIFtjbGFzcy5jZi1tdXRlZF09XCJyZXNwb25zZVZpc2liaWxpdHkgIT09ICdwb3N0J1wiPlBvc3QtYXBwcm92YWw8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWhpbnRcIj5PbmNlIHRoZSByZXNwb25zZSBpcyBhcHByb3ZlZCwgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGRpc3BsYXllZCBpbiB0aGUgTW9iaWxlIEFwcC4gU3RvcmUgdXNlcnMgY2Fubm90IHJhaXNlIGEgZGlzcHV0ZS48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1ib3gtc2VwXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlc3BvbnNlVmlzaWJpbGl0eSA9PT0gJ3ByZSdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1ib3gtcm93IGNmLWJveC1yb3ctLWZsdXNoXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2Ytc3dpdGNoIGNmLXN3aXRjaC0tdG9wXCIgW2NsYXNzLmlzLW9uXT1cImRpc3B1dGVPblwiIChjbGljayk9XCJkaXNwdXRlT24gPSAhZGlzcHV0ZU9uXCI+PHNwYW4+PC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2Ytc3RhY2sgY2Ytc3RhY2stLXhzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWxhYmVsLXNtXCI+RGlzcHV0ZSBDb25maWd1cmF0aW9uPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWhpbnQgY2YtaGludC0td3JhcFwiPldoZW4gZW5hYmxlZCwgdGhlIHN0b3JlIHRlYW0gY2FuIHJhaXNlIGEgZGlzcHV0ZSBhZ2FpbnN0IHRoZSBhdWRpdG9yJ3Mgc3VibWlzc2lvbiBvbmNlIHRoZSByZXNwb25zZSBiZWNvbWVzIHZpc2libGUgdG8gdGhlbS48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1ib3ggY2YtYm94LS1uZXN0ZWRcIiAqbmdJZj1cImRpc3B1dGVPblwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtaW5saW5lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgRGlzcHV0ZSB3aW5kb3dcclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZHJvcGRvd247IGNvbnRleHQ6IHsga2V5OiAnZGlzcHV0ZVdpbmRvdycsIG9wdGlvbnM6IGRpc3BXaW5kb3dPcHRzIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICBmcm9tIHdoZW4gdGhlIHJlc3BvbnNlIGJlY29tZXMgdmlzaWJsZVxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWluZm8gY2YtaW5mby0td3JhcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjEwXCI+PC9jaXJjbGU+PGxpbmUgeDE9XCIxMlwiIHkxPVwiMTZcIiB4Mj1cIjEyXCIgeTI9XCIxMlwiPjwvbGluZT48bGluZSB4MT1cIjEyXCIgeTE9XCI4XCIgeDI9XCIxMi4wMVwiIHkyPVwiOFwiPjwvbGluZT48L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICBEaXNwdXRlcyByYWlzZWQgaW5zaWRlIHRoaXMgd2luZG93IGdvIHRvIHRoZSBhcHByb3Zlci4gQXBwcm92ZWQgZGlzcHV0ZXMgcmV2aXNlIHRoZSBhbnN3ZXIgYW5kIHRoZSBjb21wbGlhbmNlIHNjb3JlLlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWVycm9yXCIgKm5nSWY9XCIhaGFzQXBwcm92ZXJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMTBcIj48L2NpcmNsZT48bGluZSB4MT1cIjEyXCIgeTE9XCI4XCIgeDI9XCIxMlwiIHkyPVwiMTJcIj48L2xpbmU+PGxpbmUgeDE9XCIxMlwiIHkxPVwiMTZcIiB4Mj1cIjEyLjAxXCIgeTI9XCIxNlwiPjwvbGluZT48L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICBObyBhcHByb3ZlciBpcyBzZXQsIHNvIG5vIG9uZSBjYW4gcmV2aWV3IGRpc3B1dGVzLiBUdXJuIG9uIEFwcHJvdmVyIGFuZCBhZGQgYW4gYXBwcm92ZXIuXHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlc3BvbnNlVmlzaWJpbGl0eSA9PT0gJ3Bvc3QnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2Ytc3RhY2sgY2Ytc3RhY2stLXNtXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1sYWJlbC1zbSBjZi1tdXRlZFwiPkRpc3B1dGUgQ29uZmlndXJhdGlvbjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtaW5mbyBjZi1pbmZvLS13cmFwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMTBcIj48L2NpcmNsZT48bGluZSB4MT1cIjEyXCIgeTE9XCIxNlwiIHgyPVwiMTJcIiB5Mj1cIjEyXCI+PC9saW5lPjxsaW5lIHgxPVwiMTJcIiB5MT1cIjhcIiB4Mj1cIjEyLjAxXCIgeTI9XCI4XCI+PC9saW5lPjwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgIERpc3B1dGVzIGFyZSBub3QgYXZhaWxhYmxlIHdoZW4gcmVzcG9uc2VzIGFyZSBzaG93biBwb3N0LWFwcHJvdmFsLlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIFByZS1zdWJtaXNzaW9uIGFjY2VzcyAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtYm94IGNmLWJveC0tcGFkXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtdG9nZ2xlLXJvd1wiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNmLWxhYmVsXCI+UHJlLVN1Ym1pc3Npb24gQWNjZXNzPC9zcGFuPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNmLXN3aXRjaFwiIFtjbGFzcy5pcy1vbl09XCJwcmVTdWJtaXNzaW9uQWNjZXNzT25cIiAoY2xpY2spPVwicHJlU3VibWlzc2lvbkFjY2Vzc09uID0gIXByZVN1Ym1pc3Npb25BY2Nlc3NPblwiPjxzcGFuPjwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWhpbnQgY2YtaGludC0td3JhcFwiPlVzZXJzIGFkZGVkIGhlcmUgY2FuIHZpZXcgT3BlbiBhbmQgSW4gUHJvZ3Jlc3MgYXVkaXRzIHVudGlsIHN1Ym1pc3Npb24uIFRoZSBTY2hlZHVsZSBJbmZvIHRhYiBpcyBhbHNvIHZpc2libGUgb25seSB0byB0aGVzZSB1c2Vycy48L2Rpdj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwcmVTdWJtaXNzaW9uQWNjZXNzT25cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNmLXJvdyBjZi1yb3ctLXRvcFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2YtZmllbGRcIj5WaXNpYmxlIHRvPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjaGlwUGlja2VyOyBjb250ZXh0OiB7IGxpc3Q6ICdwcmVTdWJtaXNzaW9uVXNlcnMnLCBsYXJnZTogZmFsc2UgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWVycm9yIGNmLWVycm9yLS1pbmRlbnRcIiAqbmdJZj1cInByZVN1Ym1pc3Npb25FbXB0eVwiPlxyXG4gICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjEwXCI+PC9jaXJjbGU+PGxpbmUgeDE9XCIxMlwiIHkxPVwiOFwiIHgyPVwiMTJcIiB5Mj1cIjEyXCI+PC9saW5lPjxsaW5lIHgxPVwiMTJcIiB5MT1cIjE2XCIgeDI9XCIxMi4wMVwiIHkyPVwiMTZcIj48L2xpbmU+PC9zdmc+XHJcbiAgICAgICAgICAgICAgQWRkIGF0IGxlYXN0IG9uZSB1c2VyXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvc2VjdGlvbj5cclxuXHJcbiAgICAgIDwhLS0gPT09PT0gU2NvcmluZyA9PT09PSAtLT5cclxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjZi1jYXJkIGNmLWNhcmQtLWxnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNmLWJsb2NrLXRpdGxlXCI+U2NvcmluZzwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZi1ib3ggY2YtYm94LS1wYWRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi10b2dnbGUtcm93XCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2YtbGFiZWxcIj5QYXNzL0ZhaWwgU2NvcmUgU2V0dXA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2Ytc3dpdGNoXCIgW2NsYXNzLmlzLW9uXT1cInBhc3NGYWlsT25cIiAoY2xpY2spPVwicGFzc0ZhaWxPbiA9ICFwYXNzRmFpbE9uXCI+PHNwYW4+PC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtaGludCBjZi1oaW50LS13cmFwXCI+U2V0IHRoZSBjb21wbGlhbmNlIHNjb3JlIGFuIGF1ZGl0IG11c3QgcmVhY2ggdG8gYmUgbWFya2VkIHt7IHBhc3NMYWJlbCB9fS4gQW55dGhpbmcgYmVsb3cgaXQgaXMgbWFya2VkIHt7IGZhaWxMYWJlbCB9fS48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1yb3cgY2Ytcm93LS13cmFwIGNmLXJvdy0tdG9wXCIgKm5nSWY9XCJwYXNzRmFpbE9uXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2YtZmllbGRcIj5NaW5pbXVtIHNjb3JlIHRvIHt7IHBhc3NMYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2YtbnVtXCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBtaW49XCIxXCIgbWF4PVwiMTAwXCIgWyhuZ01vZGVsKV09XCJwYXNzVGhyZXNob2xkXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4+JTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZi1waWxsIGNmLXBpbGwtLXBhc3NcIj57eyBwYXNzTGFiZWwgfX0g4omlIHt7IHBhc3NUaHJlc2hvbGQgfX0lPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNmLXBpbGwgY2YtcGlsbC0tZmFpbFwiPnt7IGZhaWxMYWJlbCB9fSAmbHQ7IHt7IHBhc3NUaHJlc2hvbGQgfX0lPC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvc2VjdGlvbj5cclxuXHJcbiAgICAgIDwhLS0gPT09PT0gQXBwcm92ZXIgQ29udHJvbHMgPT09PT0gLS0+XHJcbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2YtY2FyZCBjZi1jYXJkLS1sZ1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZi1ibG9jay10aXRsZVwiPkFwcHJvdmVyIENvbnRyb2xzPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNmLXN0YWNrXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtdG9nZ2xlLXJvd1wiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNmLWxhYmVsXCI+RWRpdCBTdWJtaXR0ZWQgQXVkaXQ8L3NwYW4+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2Ytc3dpdGNoXCIgW2NsYXNzLmlzLW9uXT1cImVkaXRTdWJtaXR0ZWRPblwiIChjbGljayk9XCJ0b2dnbGVFZGl0U3VibWl0dGVkKClcIj48c3Bhbj48L3NwYW4+PC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1oaW50IGNmLWhpbnQtLXRpZ2h0XCI+QWxsb3cgQXBwcm92ZXJzIHRvIGVkaXQgc3VibWl0dGVkIEF1ZGl0PC9kaXY+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZWRpdFN1Ym1pdHRlZE9uXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjaGlwUGlja2VyOyBjb250ZXh0OiB7IGxpc3Q6ICdlZGl0VXNlcnMnLCBsYXJnZTogdHJ1ZSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1lcnJvclwiICpuZ0lmPVwiZWRpdFN1Ym1pdHRlZEVycm9yXCI+XHJcbiAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMTBcIj48L2NpcmNsZT48bGluZSB4MT1cIjEyXCIgeTE9XCI4XCIgeDI9XCIxMlwiIHkyPVwiMTJcIj48L2xpbmU+PGxpbmUgeDE9XCIxMlwiIHkxPVwiMTZcIiB4Mj1cIjEyLjAxXCIgeTI9XCIxNlwiPjwvbGluZT48L3N2Zz5cclxuICAgICAgICAgICAgICB7eyBlZGl0U3VibWl0dGVkRXJyb3IgfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtZ3JpZDJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZi1zdGFja1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtbGFiZWxcIj5SZWRvIEV4dGVuc2lvbjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtaW5saW5lXCI+XHJcbiAgICAgICAgICAgICAgRXh0ZW5kIHJlZG8gdXAgdG9cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZHJvcGRvd247IGNvbnRleHQ6IHsga2V5OiAncmVkb0V4dGVuc2lvbicsIG9wdGlvbnM6IHJlZG9FeHRlbnNpb25PcHRzIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICBEYXlzIHRpbGwgYXBwcm92YWxcclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9zZWN0aW9uPlxyXG5cclxuICAgICAgPCEtLSA9PT09PSBVc2VyIFZlcmlmaWNhdGlvbiA9PT09PSAtLT5cclxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjZi1jYXJkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNmLWJsb2NrLXRpdGxlXCI+VXNlciBWZXJpZmljYXRpb24gQ29uZmlndXJhdGlvbjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZi1ib3ggY2YtYm94LS1yb3dcIj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2Ytc3dpdGNoIGNmLXN3aXRjaC0tdG9wXCIgW2NsYXNzLmlzLW9uXT1cInJlcXVpcmVQaG90b1wiIChjbGljayk9XCJyZXF1aXJlUGhvdG8gPSAhcmVxdWlyZVBob3RvXCI+PHNwYW4+PC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNmLXN0YWNrIGNmLXN0YWNrLS14c1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtbGFiZWxcIj5SZXF1aXJlIFBob3RvIENhcHR1cmU8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWhpbnRcIj5CeSBlbmFibGluZywgdXNlcnMgbXVzdCBjYXB0dXJlIHRoZWlyIHBob3RvIHRvIGNvbXBsZXRlIHN1Ym1pc3Npb248L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZi1ib3ggY2YtYm94LS1yb3dcIj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2Ytc3dpdGNoIGNmLXN3aXRjaC0tdG9wXCIgW2NsYXNzLmlzLW9uXT1cInJlcXVpcmVBY2tub3dsZWRnbWVudFwiIChjbGljayk9XCJyZXF1aXJlQWNrbm93bGVkZ21lbnQgPSAhcmVxdWlyZUFja25vd2xlZGdtZW50XCI+PHNwYW4+PC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNmLXN0YWNrIGNmLXN0YWNrLS14c1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2YtbGFiZWxcIj5SZXF1aXJlIFVzZXIgQWNrbm93bGVkZ21lbnQ8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNmLWhpbnRcIj5CeSBlbmFibGluZywgdXNlcnMgbXVzdCB0eXBlIHRoZWlyIG5hbWUgYXMgYWNrbm93bGVkZ21lbnQgdG8gY29tcGxldGUgc3VibWlzc2lvbjwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvc2VjdGlvbj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG48L2Rpdj5cclxuIl19