commons-assessment 12.0.39-dev.4 → 12.0.40

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.
@@ -162,7 +162,7 @@ export class ProctoringResultComponent {
162
162
  }
163
163
  }
164
164
  ProctoringResultComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ProctoringResultComponent, deps: [{ token: i1.MatDialogRef }, { token: i2.AssessmentTakerService }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
165
- ProctoringResultComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ProctoringResultComponent, selector: "lib-proctoring-result", ngImport: i0, template: "<div class=\"d-flex flex-column h-100 overflow-hidden assessment-bg-white\">\r\n\r\n <!-- Header -->\r\n <div class=\"d-flex align-items-start justify-content-between gap-3 p-3 px-md-4 border-bottom\">\r\n <div class=\"flex-grow-1\">\r\n <p class=\"assessment-text-semibold-16 assessment-text-grey-ten mb-1\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.RESULT_TITLE'] }}\r\n </p>\r\n <p class=\"assessment-text-regular-12 assessment-text-grey-seven mb-0\">\r\n <span *ngIf=\"assesseeName\">{{ assesseeName }} \u00B7 </span>{{ totalElements }} {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.SESSIONS_COUNT'] }}\r\n </p>\r\n </div>\r\n <button type=\"button\" class=\"btn-close\" (click)=\"close()\" aria-label=\"Close\"></button>\r\n </div>\r\n\r\n <!-- Body -->\r\n <div class=\"flex-grow-1 overflow-auto p-3 px-md-4\">\r\n\r\n <!-- Loading (initial) -->\r\n <div *ngIf=\"loading && !sessions.length\" class=\"d-flex align-items-center justify-content-center gap-2 py-5 assessment-text-regular-13 assessment-text-grey-seven\">\r\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.SESSIONS_LOADING'] }}\r\n </div>\r\n\r\n <!-- Error -->\r\n <div *ngIf=\"errored && !sessions.length\" class=\"text-center py-5\">\r\n <p class=\"assessment-text-regular-13 assessment-text-danger mb-3\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.SESSIONS_ERROR'] }}</p>\r\n <button type=\"button\" (click)=\"loadSessions()\"\r\n class=\"assessment-btn-primary-transparent assessment-border-radius-two assessment-text-semibold-13 px-3 py-2\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORTS_RETRY'] }}\r\n </button>\r\n </div>\r\n\r\n <!-- Empty -->\r\n <div *ngIf=\"!loading && !errored && !sessions.length\" class=\"text-center py-5 assessment-text-regular-13 assessment-text-grey-seven\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.SESSIONS_EMPTY'] }}\r\n </div>\r\n\r\n <!-- Sessions accordion -->\r\n <mat-accordion class=\"d-block\" *ngIf=\"sessions.length\">\r\n <mat-expansion-panel *ngFor=\"let session of sessions; trackBy: trackBySessionId\"\r\n class=\"shadow-none assessment-border-radius-two assessment-panel border mb-2\" (opened)=\"loadReport(session)\">\r\n\r\n <mat-expansion-panel-header class=\"proctoring-panel-header p-3\">\r\n <mat-panel-title class=\"d-flex flex-column my-1 align-items-start\">\r\n <span class=\"assessment-text-semibold-13 assessment-text-grey-ten\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_SESSION'] }} {{ session.id }}\r\n </span>\r\n <span class=\"d-flex align-items-center gap-2 mt-1\">\r\n <span *ngIf=\"session.status\" class=\"badge rounded-pill text-capitalize assessment-text-medium-10\" [ngClass]=\"statusBadgeClass(session.status)\">\r\n {{ session.status }}\r\n </span>\r\n <span *ngIf=\"session?.integritySummary?.integrityFlagged\"\r\n class=\"badge rounded-pill assessment-bg-danger assessment-text-white assessment-text-medium-10\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_FLAGGED'] }}\r\n </span>\r\n </span>\r\n </mat-panel-title>\r\n <mat-panel-description class=\"justify-content-end align-items-center me-3\">\r\n <span *ngIf=\"toMillis(session.startedAt) as started\" class=\"assessment-text-regular-11 assessment-text-grey-seven\">\r\n {{ started | date:'dd MMM, HH:mm' }}\r\n </span>\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n\r\n <!-- Report is fetched when the panel opens -->\r\n <ng-template matExpansionPanelContent>\r\n <div class=\"p-3 pt-1\" [ngSwitch]=\"reportState[session.id!]\">\r\n\r\n <!-- Loading -->\r\n <div *ngSwitchCase=\"'loading'\" class=\"d-flex align-items-center gap-2 py-3 assessment-text-regular-13 assessment-text-grey-seven\">\r\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_LOADING'] }}\r\n </div>\r\n\r\n <!-- Error -->\r\n <div *ngSwitchCase=\"'error'\" class=\"py-3\">\r\n <p class=\"assessment-text-regular-13 assessment-text-danger mb-2\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_ERROR'] }}</p>\r\n <button type=\"button\" (click)=\"loadReport(session)\"\r\n class=\"assessment-btn-primary-transparent assessment-border-radius-two assessment-text-semibold-13 px-3 py-2\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORTS_RETRY'] }}\r\n </button>\r\n </div>\r\n\r\n <!-- No report yet -->\r\n <div *ngSwitchCase=\"'empty'\" class=\"py-3 assessment-text-regular-13 assessment-text-grey-seven\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_EMPTY'] }}\r\n </div>\r\n\r\n <!-- Loaded report -->\r\n <ng-container *ngSwitchCase=\"'loaded'\">\r\n <ng-container *ngIf=\"reportBySession[session.id!] as report\">\r\n\r\n <!-- Integrity summary (report top-level) -->\r\n <div class=\"row g-2\">\r\n <div class=\"col-6\">\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven text-uppercase mb-1\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_INTEGRITY_SCORE'] }}</p>\r\n <p class=\"assessment-text-regular-13 assessment-text-grey-ten mb-0\" [class.assessment-text-danger]=\"report.integrityFlagged\">\r\n {{ report.integrityScore }}<span *ngIf=\"report.integrityLevel\"> ({{ report.integrityLevel }})</span>\r\n </p>\r\n </div>\r\n <div class=\"col-6\" *ngIf=\"report.identityMatch\">\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven text-uppercase mb-1\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_IDENTITY_MATCH'] }}</p>\r\n <p class=\"assessment-text-regular-13 assessment-text-grey-ten mb-0\">{{ report.identityMatch }}</p>\r\n </div>\r\n <div class=\"col-12\" *ngIf=\"report.failureReason\">\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven text-uppercase mb-1\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_FAILURE_REASON'] }}</p>\r\n <p class=\"assessment-text-regular-13 assessment-text-danger mb-0\">{{ report.failureReason }}</p>\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"getParsedPayload(report) as p; else rawPayload\">\r\n\r\n <!-- Summary meta -->\r\n <div class=\"d-flex flex-wrap align-items-center gap-2 mt-3 assessment-text-regular-12 assessment-text-grey-seven\">\r\n <span *ngIf=\"p.duration_seconds != null\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_DURATION'] }}: {{ formatDuration(p.duration_seconds) }}</span>\r\n <span *ngIf=\"p.started_at\">\u00B7 {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_STARTED'] }}: {{ p.started_at | date:'dd MMM, HH:mm:ss' }}</span>\r\n <span *ngIf=\"p.ended_at\">\u00B7 {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_ENDED'] }}: {{ p.ended_at | date:'HH:mm:ss' }}</span>\r\n </div>\r\n\r\n <!-- Reasons -->\r\n <div *ngIf=\"p.integrity?.reasons?.length\" class=\"d-flex flex-column gap-2 mt-2\">\r\n <div *ngFor=\"let r of p.integrity?.reasons; trackBy: trackByIndex\" class=\"border rounded p-2\">\r\n <div class=\"d-flex align-items-center justify-content-between gap-2\">\r\n <span class=\"assessment-text-semibold-12 assessment-text-grey-ten\">{{ reasonCodeLabel(r.code) }}</span>\r\n <span *ngIf=\"r.weight != null\" class=\"badge rounded-pill assessment-text-white\" [ngClass]=\"(r.weight || 0) < 0 ? 'assessment-bg-danger' : 'assessment-bg-success'\">{{ (r.weight || 0) > 0 ? '+' : '' }}{{ r.weight }}</span>\r\n </div>\r\n <p class=\"assessment-text-regular-12 assessment-text-grey-seven mb-0 mt-1\">{{ r.detail }}</p>\r\n </div>\r\n </div>\r\n\r\n <!-- Stat tiles: face analysis -->\r\n <p class=\"assessment-text-semibold-13 assessment-text-grey-ten mt-3 mb-2\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_ANALYSIS'] }}</p>\r\n <div class=\"row row-cols-2 row-cols-md-4 g-2 text-center\">\r\n <div class=\"col\">\r\n <div class=\"border rounded p-2 h-100\">\r\n <p class=\"assessment-text-semibold-18 mb-1\">{{ p.face_analysis?.frames_checked ?? 0 }}</p>\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven mb-0\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_FRAMES'] }}</p>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"border rounded p-2 h-100\">\r\n <p class=\"assessment-text-semibold-18 mb-1\" [class.assessment-text-danger]=\"(p.face_analysis?.no_face_frames || 0) > 0\">{{ p.face_analysis?.no_face_frames ?? 0 }}</p>\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven mb-0\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_NO_FACE'] }}</p>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"border rounded p-2 h-100\">\r\n <p class=\"assessment-text-semibold-18 mb-1\" [class.assessment-text-danger]=\"(p.face_analysis?.multi_face_frames || 0) > 0\">{{ p.face_analysis?.multi_face_frames ?? 0 }}</p>\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven mb-0\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_MULTI_FACE'] }}</p>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"border rounded p-2 h-100\">\r\n <p class=\"assessment-text-semibold-18 mb-1\" [class.assessment-text-danger]=\"(p.face_analysis?.impersonation_frames || 0) > 0\">{{ p.face_analysis?.impersonation_frames ?? 0 }}</p>\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven mb-0\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_IMPERSONATION'] }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Activity breakdown -->\r\n <div *ngIf=\"p.activity?.by_type\" class=\"d-flex flex-wrap gap-2 mt-3\">\r\n <span *ngFor=\"let item of (p.activity?.by_type | keyvalue); trackBy: trackByIndex\"\r\n class=\"badge rounded-pill assessment-bg-palette-EDF3FD assessment-text-grey-ten assessment-text-medium-12\">\r\n {{ eventTypeLabel(item.key) }} <span class=\"assessment-text-semibold-12\">{{ item.value }}</span>\r\n </span>\r\n </div>\r\n\r\n <!-- Evidence images -->\r\n <ng-container *ngIf=\"p.evidence?.length\">\r\n <p class=\"assessment-text-semibold-13 assessment-text-grey-ten mt-3 mb-2\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_EVIDENCE'] }}</p>\r\n <div class=\"d-flex flex-wrap gap-3\">\r\n <a *ngFor=\"let ev of p.evidence; trackBy: trackByIndex\" class=\"text-center text-decoration-none\"\r\n [href]=\"ev.image_url\" target=\"_blank\" rel=\"noopener\">\r\n <img class=\"proctoring-evi-img rounded border\" [src]=\"ev.image_url\" [attr.alt]=\"'frame ' + ev.seq\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/user.svg')\" />\r\n <span class=\"d-block assessment-text-regular-11 assessment-text-grey-seven mt-1\">\r\n <span *ngIf=\"ev.is_reference\" class=\"badge rounded-pill assessment-bg-primary-one assessment-text-white me-1\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_REFERENCE'] }}</span>\r\n #{{ ev.seq }} \u00B7 {{ ev.captured_at | date:'HH:mm:ss' }}\r\n </span>\r\n </a>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Timeline -->\r\n <ng-container *ngIf=\"p.timeline?.length\">\r\n <p class=\"assessment-text-semibold-13 assessment-text-grey-ten mt-3 mb-2\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_TIMELINE'] }} ({{ p.timeline?.length }})\r\n </p>\r\n <div class=\"proctoring-log assessment-bg-grey-ten assessment-text-grey-one font-monospace small rounded p-3 overflow-auto\">\r\n <div *ngFor=\"let ev of p.timeline; trackBy: trackByIndex\" class=\"text-nowrap\" [class.fw-semibold]=\"isNoteworthy(ev.type)\">\r\n <span class=\"assessment-text-grey-five me-2\">#{{ ev.seq }}</span>\r\n <span [class.assessment-text-palette-ADC9F6]=\"isNoteworthy(ev.type)\">{{ eventTypeLabel(ev.type) }}</span>\r\n <span class=\"assessment-text-grey-five ms-2\">{{ ev.at | date:'HH:mm:ss' }} ({{ ev.source }})</span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n <!-- Fallback: raw payload if it isn't parseable JSON -->\r\n <ng-template #rawPayload>\r\n <pre *ngIf=\"report.reportPayload\" class=\"proctoring-payload assessment-bg-grey-ten assessment-text-grey-one small rounded p-3 overflow-auto mb-0 mt-3\">{{ report.reportPayload }}</pre>\r\n </ng-template>\r\n\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n </ng-template>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n\r\n <!-- Load more -->\r\n <div *ngIf=\"sessions.length && !last\" class=\"text-center mt-3\">\r\n <button type=\"button\" (click)=\"loadMore()\" [disabled]=\"loading\"\r\n class=\"assessment-btn-primary-transparent assessment-border-radius-two assessment-text-semibold-13 px-3 py-2 d-inline-flex align-items-center gap-2\">\r\n <span *ngIf=\"loading\" class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.LOAD_MORE'] }}\r\n </button>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.assessment-text-grey-ten{color:var(--assessment-grey-ten)!important}.assessment-bg-grey-ten{background-color:var(--assessment-grey-ten)!important}.assessment-text-grey-nine{color:var(--assessment-grey-nine)!important}.assessment-bg-grey-nine{background-color:var(--assessment-grey-nine)!important}.assessment-text-grey-eight{color:var(--assessment-grey-eight)!important}.assessment-bg-grey-eight{background-color:var(--assessment-grey-eight)!important}.assessment-text-grey-seven{color:var(--assessment-grey-seven)!important}.assessment-bg-grey-seven{background-color:var(--assessment-grey-seven)!important}.assessment-text-grey-six{color:var(--assessment-grey-six)!important}.assessment-bg-grey-six{background-color:var(--assessment-grey-six)!important}.assessment-text-grey-five{color:var(--assessment-grey-five)!important}.assessment-bg-grey-five{background-color:var(--assessment-grey-five)!important}.assessment-text-grey-four{color:var(--assessment-grey-four)!important}.assessment-bg-grey-four{background-color:var(--assessment-grey-four)!important}.assessment-text-grey-three{color:var(--assessment-grey-three)!important}.assessment-bg-grey-three{background-color:var(--assessment-grey-three)!important}.assessment-text-grey-two{color:var(--assessment-grey-two)!important}.assessment-bg-grey-two{background-color:var(--assessment-grey-two)!important}.assessment-text-grey-one{color:var(--assessment-grey-one)!important}.assessment-bg-grey-one{background-color:var(--assessment-grey-one)!important}.assessment-text-white{color:var(--assessment-white)!important}.assessment-bg-white{background-color:var(--assessment-white)!important}.assessment-text-black{color:var(--assessment-black)!important}.assessment-bg-black{background-color:var(--assessment-black)!important}.assessment-text-danger{color:var(--assessment-danger)!important}.assessment-bg-danger{background-color:var(--assessment-danger)!important}.assessment-text-danger-bg{color:var(--assessment-danger-bg)!important}.assessment-bg-danger-bg{background-color:var(--assessment-danger-bg)!important}.assessment-text-success{color:var(--assessment-success)!important}.assessment-bg-success{background-color:var(--assessment-success)!important}.assessment-text-success-bg{color:var(--assessment-success-bg)!important}.assessment-bg-success-bg{background-color:var(--assessment-success-bg)!important}.assessment-text-warning{color:var(--assessment-warning)!important}.assessment-bg-warning{background-color:var(--assessment-warning)!important}.assessment-text-warning-bg{color:var(--assessment-warning-bg)!important}.assessment-bg-warning-bg{background-color:var(--assessment-warning-bg)!important}.assessment-text-primary-one{color:var(--assessment-primary-one)!important}.assessment-bg-primary-one{background-color:var(--assessment-primary-one)!important}.assessment-text-primary-four{color:var(--assessment-primary-four)!important}.assessment-bg-primary-four{background-color:var(--assessment-primary-four)!important}.assessment-text-palette-EDF3FD{color:var(--assessment-palette-EDF3FD)!important}.assessment-bg-palette-EDF3FD{background-color:var(--assessment-palette-EDF3FD)!important}.assessment-text-palette-C8DAF9{color:var(--assessment-palette-C8DAF9)!important}.assessment-bg-palette-C8DAF9{background-color:var(--assessment-palette-C8DAF9)!important}.assessment-text-palette-ADC9F6{color:var(--assessment-palette-ADC9F6)!important}.assessment-bg-palette-ADC9F6{background-color:var(--assessment-palette-ADC9F6)!important}.assessment-text-palette-FEF9F1{color:var(--assessment-palette-FEF9F1)!important}.assessment-bg-palette-FEF9F1{background-color:var(--assessment-palette-FEF9F1)!important}.assessment-text-palette-F9DAA6{color:var(--assessment-palette-F9DAA6)!important}.assessment-bg-palette-F9DAA6{background-color:var(--assessment-palette-F9DAA6)!important}.assessment-text-palette-E8F7F0{color:var(--assessment-palette-E8F7F0)!important}.assessment-bg-palette-E8F7F0{background-color:var(--assessment-palette-E8F7F0)!important}.assessment-text-palette-B7E7CF{color:var(--assessment-palette-B7E7CF)!important}.assessment-bg-palette-B7E7CF{background-color:var(--assessment-palette-B7E7CF)!important}.assessment-text-palette-FEF1E8{color:var(--assessment-palette-FEF1E8)!important}.assessment-bg-palette-FEF1E8{background-color:var(--assessment-palette-FEF1E8)!important}.assessment-text-palette-FAD2B9{color:var(--assessment-palette-FAD2B9)!important}.assessment-bg-palette-FAD2B9{background-color:var(--assessment-palette-FAD2B9)!important}.assessment-box-shadow-one{box-shadow:var(--assessment-box-shadow-one)!important}.assessment-border-radius-one{border-radius:var(--assessment-border-radius-one)!important}.assessment-border-radius-two{border-radius:var(--assessment-border-radius-two)!important}.assessment-border-radius-three{border-radius:var(--assessment-border-radius-three)!important}.assessment-border-radius-four{border-radius:var(--assessment-border-radius-four)!important}.assessment-border-radius-five{border-radius:var(--assessment-border-radius-five)!important}.assessment-border-radius-six{border-radius:var(--assessment-border-radius-six)!important}.assessment-input-border-one{border:var(--assessment-input-border-one)!important}.assessment-input-border-invalid{border:var(--assessment-input-border-invalid)!important}.assessment-input-focus-border{border:var(--assessment-input-focus-border)!important}.assessment-border-two{border:var(--assessment-border-two)!important}.assessment-card-border{border:var(--assessment-card-border)!important}.assessment-tooltip-border{border:var(--assessment-tooltip-border)!important}.assessment-box-shadow-tooltip{box-shadow:var(--assessment-box-shadow-tooltip)!important}.assessment-input-focus-box-shadow{box-shadow:var(--assessment-input-focus-box-shadow)!important}.assessment-button-padding{padding:var(--assessment-button-padding)!important}.assessment-button-padding-large{padding:var(--assessment-button-padding-large)!important}.assessment-input-padding{padding:var(--assessment-input-padding)!important}.assessment-text-font-family{color:var(--assessment-font-family)!important}.assessment-bg-font-family{background-color:var(--assessment-font-family)!important}.assessment-text-regular-12{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-semibold-12{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-medium-11{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.assessment-text-medium-10{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.42rem + .2vw);line-height:calc(.72rem + .2vw)}.assessment-text-regular-11{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.assessment-text-medium-12{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-regular-13{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-semibold-13{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-medium-13{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-medium-14{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw)!important;line-height:calc(1.2rem + .2vw)!important}.assessment-text-semibold-14{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw);line-height:calc(1.2rem + .2vw)}.assessment-text-regular-15{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.85rem + .1vw);line-height:calc(1.4rem + .1vw)}.assessment-text-medium-15{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-semibold-15{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-semibold-16{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-medium-16{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-medium-18{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .1vw)!important}.assessment-text-semibold-18{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .1vw)!important}@media (min-height: 100vw) and (orientation: portrait){.assessment-text-medium-18,.assessment-text-semibold-18{font-size:calc(1rem + .1vh)!important;line-height:calc(1.6rem + .1vh)!important}.assessment-text-medium-16,.assessment-text-semibold-16{font-size:calc(.9rem + .2vh)!important;line-height:calc(1.4rem + .2vh)!important}.assessment-text-regular-15,.assessment-text-semibold-15{font-size:calc(.8rem + .2vh);line-height:calc(1.27rem + .2vh)}.assessment-text-medium-15{font-size:calc(.82rem + .2vh);line-height:calc(1.27rem + .2vh)}.assessment-text-medium-12,.assessment-text-regular-12,.assessment-text-semibold-12{font-size:calc(.5rem + .4vh);line-height:calc(.8rem + .4vh)}.assessment-text-medium-14,.assessment-text-semibold-14{font-size:calc(.8rem + .1vh)!important;line-height:calc(1.2rem + .2vh)!important}.assessment-text-regular-13,.assessment-text-medium-13,.assessment-text-semibold-13{font-size:calc(.7rem + .2vh)!important;line-height:calc(1rem + .3vh)!important}.assessment-text-regular-11,.assessment-text-medium-11{font-size:calc(.5rem + .2vh)!important;line-height:calc(.8rem + .2vh)!important}.assessment-text-medium-10{font-size:calc(.45rem + .2vh)!important;line-height:calc(.72rem + .2vh)!important}}.assessment-btn-primary{background-color:var(--assessment-primary-one);color:var(--assessment-white);border:.064rem solid var(--assessment-primary-one);border-radius:var(--assessment-border-radius-two)}.assessment-btn-primary-transparent{background-color:var(--assessment-white);color:var(--assessment-primary-one);border-radius:var(--assessment-border-radius-two);border:.064rem solid var(--assessment-primary-one)}.assessment-zoom-animation{transition:transform .2s ease;transform:translateZ(0);text-rendering:optimizeLegibility}.assessment-zoom-animation:hover{transform:scale(1.03)}.assessment-zoom-animation:active{transform:scale(1)}.assessment-zoom-animation:disabled{transform:none!important}.change-direction{transform:rotate(180deg);transition:.3s ease-out}.change-direction-reverse{transform:rotate(0);transition:.3s ease-out}.outline-0{outline:none}.cursor-grab{cursor:grab}.cursor-pointer{cursor:pointer}.action-icon{width:1.2rem}.mat-menu-item,.mat-mdc-menu-item{height:inherit;min-height:unset;--mat-menu-item-label-text-font: var(--assessment-font-family) !important;--mat-menu-item-label-text-size: 14px !important;--mat-menu-item-label-text-weight: 600 !important;--mat-menu-item-label-text-line-height: inherit !important}.skill-chip{width:-moz-fit-content;width:fit-content;background:var(--assessment-palette-EDF3FD);border:.064rem solid var(--assessment-palette-C8DAF9)}.assessment-form-check-input-primary-one{min-height:unset}.assessment-form-check-input-primary-one .form-check-input{width:1rem;height:1rem}.assessment-form-check-input-primary-one .form-check-input:checked{background-color:var(--assessment-primary-one);color:var(--assessment-primary-one)}.assessment-form-check-input-primary-one .form-check-input:disabled{opacity:.8}.form-check-input:checked{background-color:var(--assessment-primary-one);border-color:var(--assessment-primary-one)}.form-check-input:focus{border-color:var(--assessment-primary-one);box-shadow:none}.badge{font-weight:500}.proctoring-panel-header{height:auto!important}.proctoring-log{max-height:16rem}.proctoring-payload{max-height:18rem;white-space:pre-wrap;word-break:break-word}.proctoring-evi-img{width:5rem;height:5rem;object-fit:cover}\n"], components: [{ type: i3.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { type: i3.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.MatAccordion, selector: "mat-accordion", inputs: ["multi", "displayMode", "togglePosition", "hideToggle"], exportAs: ["matAccordion"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.MatExpansionPanelTitle, selector: "mat-panel-title" }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.MatExpansionPanelDescription, selector: "mat-panel-description" }, { type: i3.MatExpansionPanelContent, selector: "ng-template[matExpansionPanelContent]" }, { type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }], pipes: { "date": i4.DatePipe, "keyvalue": i4.KeyValuePipe } });
165
+ ProctoringResultComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ProctoringResultComponent, selector: "lib-proctoring-result", ngImport: i0, template: "<div class=\"d-flex flex-column h-100 overflow-hidden assessment-bg-white\">\r\n\r\n <!-- Header -->\r\n <div class=\"d-flex align-items-start justify-content-between gap-3 p-3 px-md-4 border-bottom\">\r\n <div class=\"flex-grow-1\">\r\n <p class=\"assessment-text-semibold-16 assessment-text-grey-ten mb-1\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.RESULT_TITLE'] }}\r\n </p>\r\n <p class=\"assessment-text-regular-12 assessment-text-grey-seven mb-0\">\r\n <span *ngIf=\"assesseeName\">{{ assesseeName }} \u00B7 </span>{{ totalElements }} {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.SESSIONS_COUNT'] }}\r\n </p>\r\n </div>\r\n <button type=\"button\" class=\"btn-close\" (click)=\"close()\" aria-label=\"Close\"></button>\r\n </div>\r\n\r\n <!-- Body -->\r\n <div class=\"flex-grow-1 overflow-auto p-3 px-md-4\">\r\n\r\n <!-- Loading (initial) -->\r\n <div *ngIf=\"loading && !sessions.length\" class=\"d-flex align-items-center justify-content-center gap-2 py-5 assessment-text-regular-13 assessment-text-grey-seven\">\r\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.SESSIONS_LOADING'] }}\r\n </div>\r\n\r\n <!-- Error -->\r\n <div *ngIf=\"errored && !sessions.length\" class=\"text-center py-5\">\r\n <p class=\"assessment-text-regular-13 assessment-text-danger mb-3\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.SESSIONS_ERROR'] }}</p>\r\n <button type=\"button\" (click)=\"loadSessions()\"\r\n class=\"assessment-btn-primary-transparent assessment-border-radius-two assessment-text-semibold-13 px-3 py-2\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORTS_RETRY'] }}\r\n </button>\r\n </div>\r\n\r\n <!-- Empty -->\r\n <div *ngIf=\"!loading && !errored && !sessions.length\" class=\"text-center py-5 assessment-text-regular-13 assessment-text-grey-seven\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.SESSIONS_EMPTY'] }}\r\n </div>\r\n\r\n <!-- Sessions accordion -->\r\n <mat-accordion class=\"d-block\" *ngIf=\"sessions.length\">\r\n <mat-expansion-panel *ngFor=\"let session of sessions; let i = index; trackBy: trackBySessionId\"\r\n class=\"shadow-none assessment-border-radius-two assessment-panel border mb-2\" (opened)=\"loadReport(session)\">\r\n\r\n <mat-expansion-panel-header class=\"proctoring-panel-header p-3\">\r\n <mat-panel-title class=\"d-flex flex-column my-1 align-items-start\">\r\n <span class=\"assessment-text-semibold-13 assessment-text-grey-ten\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_SESSION'] }} {{ totalElements - i }}\r\n </span>\r\n <span class=\"d-flex align-items-center gap-2 mt-1\">\r\n <span *ngIf=\"session.status\" class=\"badge rounded-pill text-capitalize assessment-text-medium-10\" [ngClass]=\"statusBadgeClass(session.status)\">\r\n {{ session.status }}\r\n </span>\r\n <span *ngIf=\"session?.integritySummary?.integrityFlagged\"\r\n class=\"badge rounded-pill assessment-bg-danger assessment-text-white assessment-text-medium-10\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_FLAGGED'] }}\r\n </span>\r\n </span>\r\n </mat-panel-title>\r\n <mat-panel-description class=\"justify-content-end align-items-center me-3\">\r\n <span *ngIf=\"toMillis(session.startedAt) as started\" class=\"assessment-text-regular-11 assessment-text-grey-seven\">\r\n {{ started | date:'dd MMM, HH:mm' }}\r\n </span>\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n\r\n <!-- Report is fetched when the panel opens -->\r\n <ng-template matExpansionPanelContent>\r\n <div class=\"p-3 pt-1\" [ngSwitch]=\"reportState[session.id!]\">\r\n\r\n <!-- Loading -->\r\n <div *ngSwitchCase=\"'loading'\" class=\"d-flex align-items-center gap-2 py-3 assessment-text-regular-13 assessment-text-grey-seven\">\r\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_LOADING'] }}\r\n </div>\r\n\r\n <!-- Error -->\r\n <div *ngSwitchCase=\"'error'\" class=\"py-3\">\r\n <p class=\"assessment-text-regular-13 assessment-text-danger mb-2\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_ERROR'] }}</p>\r\n <button type=\"button\" (click)=\"loadReport(session)\"\r\n class=\"assessment-btn-primary-transparent assessment-border-radius-two assessment-text-semibold-13 px-3 py-2\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORTS_RETRY'] }}\r\n </button>\r\n </div>\r\n\r\n <!-- No report yet -->\r\n <div *ngSwitchCase=\"'empty'\" class=\"py-3 assessment-text-regular-13 assessment-text-grey-seven\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_EMPTY'] }}\r\n </div>\r\n\r\n <!-- Loaded report -->\r\n <ng-container *ngSwitchCase=\"'loaded'\">\r\n <ng-container *ngIf=\"reportBySession[session.id!] as report\">\r\n\r\n <!-- Integrity summary (report top-level) -->\r\n <div class=\"row g-2\">\r\n <div class=\"col-6\">\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven text-uppercase mb-1\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_INTEGRITY_SCORE'] }}</p>\r\n <p class=\"assessment-text-regular-13 assessment-text-grey-ten mb-0\" [class.assessment-text-danger]=\"report.integrityFlagged\">\r\n {{ report.integrityScore }}<span *ngIf=\"report.integrityLevel\"> ({{ report.integrityLevel }})</span>\r\n </p>\r\n </div>\r\n <div class=\"col-6\" *ngIf=\"report.identityMatch\">\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven text-uppercase mb-1\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_IDENTITY_MATCH'] }}</p>\r\n <p class=\"assessment-text-regular-13 assessment-text-grey-ten mb-0\">{{ report.identityMatch }}</p>\r\n </div>\r\n <div class=\"col-12\" *ngIf=\"report.failureReason\">\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven text-uppercase mb-1\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_FAILURE_REASON'] }}</p>\r\n <p class=\"assessment-text-regular-13 assessment-text-danger mb-0\">{{ report.failureReason }}</p>\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"getParsedPayload(report) as p; else rawPayload\">\r\n\r\n <!-- Summary meta -->\r\n <div class=\"d-flex flex-wrap align-items-center gap-2 mt-3 assessment-text-regular-12 assessment-text-grey-seven\">\r\n <span *ngIf=\"p.duration_seconds != null\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_DURATION'] }}: {{ formatDuration(p.duration_seconds) }}</span>\r\n <span *ngIf=\"p.started_at\">\u00B7 {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_STARTED'] }}: {{ p.started_at | date:'dd MMM, HH:mm:ss' }}</span>\r\n <span *ngIf=\"p.ended_at\">\u00B7 {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_ENDED'] }}: {{ p.ended_at | date:'HH:mm:ss' }}</span>\r\n </div>\r\n\r\n <!-- Reasons -->\r\n <div *ngIf=\"p.integrity?.reasons?.length\" class=\"d-flex flex-column gap-2 mt-2\">\r\n <div *ngFor=\"let r of p.integrity?.reasons; trackBy: trackByIndex\" class=\"border rounded p-2\">\r\n <div class=\"d-flex align-items-center justify-content-between gap-2\">\r\n <span class=\"assessment-text-semibold-12 assessment-text-grey-ten\">{{ reasonCodeLabel(r.code) }}</span>\r\n <span *ngIf=\"r.weight != null\" class=\"badge rounded-pill assessment-text-white\" [ngClass]=\"(r.weight || 0) < 0 ? 'assessment-bg-danger' : 'assessment-bg-success'\">{{ (r.weight || 0) > 0 ? '+' : '' }}{{ r.weight }}</span>\r\n </div>\r\n <p class=\"assessment-text-regular-12 assessment-text-grey-seven mb-0 mt-1\">{{ r.detail }}</p>\r\n </div>\r\n </div>\r\n\r\n <!-- Stat tiles: face analysis -->\r\n <p class=\"assessment-text-semibold-13 assessment-text-grey-ten mt-3 mb-2\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_ANALYSIS'] }}</p>\r\n <div class=\"row row-cols-2 row-cols-md-4 g-2 text-center\">\r\n <div class=\"col\">\r\n <div class=\"border rounded p-2 h-100\">\r\n <p class=\"assessment-text-semibold-18 mb-1\">{{ p.face_analysis?.frames_checked ?? 0 }}</p>\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven mb-0\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_FRAMES'] }}</p>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"border rounded p-2 h-100\">\r\n <p class=\"assessment-text-semibold-18 mb-1\" [class.assessment-text-danger]=\"(p.face_analysis?.no_face_frames || 0) > 0\">{{ p.face_analysis?.no_face_frames ?? 0 }}</p>\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven mb-0\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_NO_FACE'] }}</p>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"border rounded p-2 h-100\">\r\n <p class=\"assessment-text-semibold-18 mb-1\" [class.assessment-text-danger]=\"(p.face_analysis?.multi_face_frames || 0) > 0\">{{ p.face_analysis?.multi_face_frames ?? 0 }}</p>\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven mb-0\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_MULTI_FACE'] }}</p>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"border rounded p-2 h-100\">\r\n <p class=\"assessment-text-semibold-18 mb-1\" [class.assessment-text-danger]=\"(p.face_analysis?.impersonation_frames || 0) > 0\">{{ p.face_analysis?.impersonation_frames ?? 0 }}</p>\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven mb-0\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_IMPERSONATION'] }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Activity breakdown -->\r\n <div *ngIf=\"p.activity?.by_type\" class=\"d-flex flex-wrap gap-2 mt-3\">\r\n <span *ngFor=\"let item of (p.activity?.by_type | keyvalue); trackBy: trackByIndex\"\r\n class=\"badge rounded-pill assessment-bg-palette-EDF3FD assessment-text-grey-ten assessment-text-medium-12\">\r\n {{ eventTypeLabel(item.key) }} <span class=\"assessment-text-semibold-12\">{{ item.value }}</span>\r\n </span>\r\n </div>\r\n\r\n <!-- Evidence images -->\r\n <ng-container *ngIf=\"p.evidence?.length\">\r\n <p class=\"assessment-text-semibold-13 assessment-text-grey-ten mt-3 mb-2\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_EVIDENCE'] }}</p>\r\n <div class=\"d-flex flex-wrap gap-3\">\r\n <a *ngFor=\"let ev of p.evidence; trackBy: trackByIndex\" class=\"text-center text-decoration-none\"\r\n [href]=\"ev.image_url\" target=\"_blank\" rel=\"noopener\">\r\n <img class=\"proctoring-evi-img rounded border\" [src]=\"ev.image_url\" [attr.alt]=\"'frame ' + ev.seq\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/user.svg')\" />\r\n <span class=\"d-block assessment-text-regular-11 assessment-text-grey-seven mt-1\">\r\n <span *ngIf=\"ev.is_reference\" class=\"badge rounded-pill assessment-bg-primary-one assessment-text-white me-1\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_REFERENCE'] }}</span>\r\n #{{ ev.seq }} \u00B7 {{ ev.captured_at | date:'HH:mm:ss' }}\r\n </span>\r\n </a>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Timeline -->\r\n <ng-container *ngIf=\"p.timeline?.length\">\r\n <p class=\"assessment-text-semibold-13 assessment-text-grey-ten mt-3 mb-2\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_TIMELINE'] }} ({{ p.timeline?.length }})\r\n </p>\r\n <div class=\"proctoring-log assessment-bg-grey-ten assessment-text-grey-one font-monospace small rounded p-3 overflow-auto\">\r\n <div *ngFor=\"let ev of p.timeline; trackBy: trackByIndex\" class=\"text-nowrap\" [class.fw-semibold]=\"isNoteworthy(ev.type)\">\r\n <span class=\"assessment-text-grey-five me-2\">#{{ ev.seq }}</span>\r\n <span [class.assessment-text-palette-ADC9F6]=\"isNoteworthy(ev.type)\">{{ eventTypeLabel(ev.type) }}</span>\r\n <span class=\"assessment-text-grey-five ms-2\">{{ ev.at | date:'HH:mm:ss' }} ({{ ev.source }})</span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n <!-- Fallback: raw payload if it isn't parseable JSON -->\r\n <ng-template #rawPayload>\r\n <pre *ngIf=\"report.reportPayload\" class=\"proctoring-payload assessment-bg-grey-ten assessment-text-grey-one small rounded p-3 overflow-auto mb-0 mt-3\">{{ report.reportPayload }}</pre>\r\n </ng-template>\r\n\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n </ng-template>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n\r\n <!-- Load more -->\r\n <div *ngIf=\"sessions.length && !last\" class=\"text-center mt-3\">\r\n <button type=\"button\" (click)=\"loadMore()\" [disabled]=\"loading\"\r\n class=\"assessment-btn-primary-transparent assessment-border-radius-two assessment-text-semibold-13 px-3 py-2 d-inline-flex align-items-center gap-2\">\r\n <span *ngIf=\"loading\" class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.LOAD_MORE'] }}\r\n </button>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.assessment-text-grey-ten{color:var(--assessment-grey-ten)!important}.assessment-bg-grey-ten{background-color:var(--assessment-grey-ten)!important}.assessment-text-grey-nine{color:var(--assessment-grey-nine)!important}.assessment-bg-grey-nine{background-color:var(--assessment-grey-nine)!important}.assessment-text-grey-eight{color:var(--assessment-grey-eight)!important}.assessment-bg-grey-eight{background-color:var(--assessment-grey-eight)!important}.assessment-text-grey-seven{color:var(--assessment-grey-seven)!important}.assessment-bg-grey-seven{background-color:var(--assessment-grey-seven)!important}.assessment-text-grey-six{color:var(--assessment-grey-six)!important}.assessment-bg-grey-six{background-color:var(--assessment-grey-six)!important}.assessment-text-grey-five{color:var(--assessment-grey-five)!important}.assessment-bg-grey-five{background-color:var(--assessment-grey-five)!important}.assessment-text-grey-four{color:var(--assessment-grey-four)!important}.assessment-bg-grey-four{background-color:var(--assessment-grey-four)!important}.assessment-text-grey-three{color:var(--assessment-grey-three)!important}.assessment-bg-grey-three{background-color:var(--assessment-grey-three)!important}.assessment-text-grey-two{color:var(--assessment-grey-two)!important}.assessment-bg-grey-two{background-color:var(--assessment-grey-two)!important}.assessment-text-grey-one{color:var(--assessment-grey-one)!important}.assessment-bg-grey-one{background-color:var(--assessment-grey-one)!important}.assessment-text-white{color:var(--assessment-white)!important}.assessment-bg-white{background-color:var(--assessment-white)!important}.assessment-text-black{color:var(--assessment-black)!important}.assessment-bg-black{background-color:var(--assessment-black)!important}.assessment-text-danger{color:var(--assessment-danger)!important}.assessment-bg-danger{background-color:var(--assessment-danger)!important}.assessment-text-danger-bg{color:var(--assessment-danger-bg)!important}.assessment-bg-danger-bg{background-color:var(--assessment-danger-bg)!important}.assessment-text-success{color:var(--assessment-success)!important}.assessment-bg-success{background-color:var(--assessment-success)!important}.assessment-text-success-bg{color:var(--assessment-success-bg)!important}.assessment-bg-success-bg{background-color:var(--assessment-success-bg)!important}.assessment-text-warning{color:var(--assessment-warning)!important}.assessment-bg-warning{background-color:var(--assessment-warning)!important}.assessment-text-warning-bg{color:var(--assessment-warning-bg)!important}.assessment-bg-warning-bg{background-color:var(--assessment-warning-bg)!important}.assessment-text-primary-one{color:var(--assessment-primary-one)!important}.assessment-bg-primary-one{background-color:var(--assessment-primary-one)!important}.assessment-text-primary-four{color:var(--assessment-primary-four)!important}.assessment-bg-primary-four{background-color:var(--assessment-primary-four)!important}.assessment-text-palette-EDF3FD{color:var(--assessment-palette-EDF3FD)!important}.assessment-bg-palette-EDF3FD{background-color:var(--assessment-palette-EDF3FD)!important}.assessment-text-palette-C8DAF9{color:var(--assessment-palette-C8DAF9)!important}.assessment-bg-palette-C8DAF9{background-color:var(--assessment-palette-C8DAF9)!important}.assessment-text-palette-ADC9F6{color:var(--assessment-palette-ADC9F6)!important}.assessment-bg-palette-ADC9F6{background-color:var(--assessment-palette-ADC9F6)!important}.assessment-text-palette-FEF9F1{color:var(--assessment-palette-FEF9F1)!important}.assessment-bg-palette-FEF9F1{background-color:var(--assessment-palette-FEF9F1)!important}.assessment-text-palette-F9DAA6{color:var(--assessment-palette-F9DAA6)!important}.assessment-bg-palette-F9DAA6{background-color:var(--assessment-palette-F9DAA6)!important}.assessment-text-palette-E8F7F0{color:var(--assessment-palette-E8F7F0)!important}.assessment-bg-palette-E8F7F0{background-color:var(--assessment-palette-E8F7F0)!important}.assessment-text-palette-B7E7CF{color:var(--assessment-palette-B7E7CF)!important}.assessment-bg-palette-B7E7CF{background-color:var(--assessment-palette-B7E7CF)!important}.assessment-text-palette-FEF1E8{color:var(--assessment-palette-FEF1E8)!important}.assessment-bg-palette-FEF1E8{background-color:var(--assessment-palette-FEF1E8)!important}.assessment-text-palette-FAD2B9{color:var(--assessment-palette-FAD2B9)!important}.assessment-bg-palette-FAD2B9{background-color:var(--assessment-palette-FAD2B9)!important}.assessment-box-shadow-one{box-shadow:var(--assessment-box-shadow-one)!important}.assessment-border-radius-one{border-radius:var(--assessment-border-radius-one)!important}.assessment-border-radius-two{border-radius:var(--assessment-border-radius-two)!important}.assessment-border-radius-three{border-radius:var(--assessment-border-radius-three)!important}.assessment-border-radius-four{border-radius:var(--assessment-border-radius-four)!important}.assessment-border-radius-five{border-radius:var(--assessment-border-radius-five)!important}.assessment-border-radius-six{border-radius:var(--assessment-border-radius-six)!important}.assessment-input-border-one{border:var(--assessment-input-border-one)!important}.assessment-input-border-invalid{border:var(--assessment-input-border-invalid)!important}.assessment-input-focus-border{border:var(--assessment-input-focus-border)!important}.assessment-border-two{border:var(--assessment-border-two)!important}.assessment-card-border{border:var(--assessment-card-border)!important}.assessment-tooltip-border{border:var(--assessment-tooltip-border)!important}.assessment-box-shadow-tooltip{box-shadow:var(--assessment-box-shadow-tooltip)!important}.assessment-input-focus-box-shadow{box-shadow:var(--assessment-input-focus-box-shadow)!important}.assessment-button-padding{padding:var(--assessment-button-padding)!important}.assessment-button-padding-large{padding:var(--assessment-button-padding-large)!important}.assessment-input-padding{padding:var(--assessment-input-padding)!important}.assessment-text-font-family{color:var(--assessment-font-family)!important}.assessment-bg-font-family{background-color:var(--assessment-font-family)!important}.assessment-text-regular-12{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-semibold-12{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-medium-11{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.assessment-text-medium-10{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.42rem + .2vw);line-height:calc(.72rem + .2vw)}.assessment-text-regular-11{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.assessment-text-medium-12{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-regular-13{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-semibold-13{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-medium-13{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-medium-14{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw)!important;line-height:calc(1.2rem + .2vw)!important}.assessment-text-semibold-14{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw);line-height:calc(1.2rem + .2vw)}.assessment-text-regular-15{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.85rem + .1vw);line-height:calc(1.4rem + .1vw)}.assessment-text-medium-15{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-semibold-15{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-semibold-16{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-medium-16{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-medium-18{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .1vw)!important}.assessment-text-semibold-18{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .1vw)!important}@media (min-height: 100vw) and (orientation: portrait){.assessment-text-medium-18,.assessment-text-semibold-18{font-size:calc(1rem + .1vh)!important;line-height:calc(1.6rem + .1vh)!important}.assessment-text-medium-16,.assessment-text-semibold-16{font-size:calc(.9rem + .2vh)!important;line-height:calc(1.4rem + .2vh)!important}.assessment-text-regular-15,.assessment-text-semibold-15{font-size:calc(.8rem + .2vh);line-height:calc(1.27rem + .2vh)}.assessment-text-medium-15{font-size:calc(.82rem + .2vh);line-height:calc(1.27rem + .2vh)}.assessment-text-medium-12,.assessment-text-regular-12,.assessment-text-semibold-12{font-size:calc(.5rem + .4vh);line-height:calc(.8rem + .4vh)}.assessment-text-medium-14,.assessment-text-semibold-14{font-size:calc(.8rem + .1vh)!important;line-height:calc(1.2rem + .2vh)!important}.assessment-text-regular-13,.assessment-text-medium-13,.assessment-text-semibold-13{font-size:calc(.7rem + .2vh)!important;line-height:calc(1rem + .3vh)!important}.assessment-text-regular-11,.assessment-text-medium-11{font-size:calc(.5rem + .2vh)!important;line-height:calc(.8rem + .2vh)!important}.assessment-text-medium-10{font-size:calc(.45rem + .2vh)!important;line-height:calc(.72rem + .2vh)!important}}.assessment-btn-primary{background-color:var(--assessment-primary-one);color:var(--assessment-white);border:.064rem solid var(--assessment-primary-one);border-radius:var(--assessment-border-radius-two)}.assessment-btn-primary-transparent{background-color:var(--assessment-white);color:var(--assessment-primary-one);border-radius:var(--assessment-border-radius-two);border:.064rem solid var(--assessment-primary-one)}.assessment-zoom-animation{transition:transform .2s ease;transform:translateZ(0);text-rendering:optimizeLegibility}.assessment-zoom-animation:hover{transform:scale(1.03)}.assessment-zoom-animation:active{transform:scale(1)}.assessment-zoom-animation:disabled{transform:none!important}.change-direction{transform:rotate(180deg);transition:.3s ease-out}.change-direction-reverse{transform:rotate(0);transition:.3s ease-out}.outline-0{outline:none}.cursor-grab{cursor:grab}.cursor-pointer{cursor:pointer}.action-icon{width:1.2rem}.mat-menu-item,.mat-mdc-menu-item{height:inherit;min-height:unset;--mat-menu-item-label-text-font: var(--assessment-font-family) !important;--mat-menu-item-label-text-size: 14px !important;--mat-menu-item-label-text-weight: 600 !important;--mat-menu-item-label-text-line-height: inherit !important}.skill-chip{width:-moz-fit-content;width:fit-content;background:var(--assessment-palette-EDF3FD);border:.064rem solid var(--assessment-palette-C8DAF9)}.assessment-form-check-input-primary-one{min-height:unset}.assessment-form-check-input-primary-one .form-check-input{width:1rem;height:1rem}.assessment-form-check-input-primary-one .form-check-input:checked{background-color:var(--assessment-primary-one);color:var(--assessment-primary-one)}.assessment-form-check-input-primary-one .form-check-input:disabled{opacity:.8}.form-check-input:checked{background-color:var(--assessment-primary-one);border-color:var(--assessment-primary-one)}.form-check-input:focus{border-color:var(--assessment-primary-one);box-shadow:none}.badge{font-weight:500}.proctoring-panel-header{height:auto!important}.proctoring-log{max-height:16rem}.proctoring-payload{max-height:18rem;white-space:pre-wrap;word-break:break-word}.proctoring-evi-img{width:5rem;height:5rem;object-fit:cover}\n"], components: [{ type: i3.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { type: i3.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.MatAccordion, selector: "mat-accordion", inputs: ["multi", "displayMode", "togglePosition", "hideToggle"], exportAs: ["matAccordion"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.MatExpansionPanelTitle, selector: "mat-panel-title" }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.MatExpansionPanelDescription, selector: "mat-panel-description" }, { type: i3.MatExpansionPanelContent, selector: "ng-template[matExpansionPanelContent]" }, { type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }], pipes: { "date": i4.DatePipe, "keyvalue": i4.KeyValuePipe } });
166
166
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ProctoringResultComponent, decorators: [{
167
167
  type: Component,
168
168
  args: [{
@@ -174,4 +174,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
174
174
  type: Inject,
175
175
  args: [MAT_DIALOG_DATA]
176
176
  }] }]; } });
177
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY3RvcmluZy1yZXN1bHQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9ucy1hc3Nlc3NtZW50L3NyYy9saWIvbW9kdWxlcy9hc3Nlc3NtZW50LXRha2VyL2NvbXBvbmVudHMvcHJvY3RvcmluZy1yZXN1bHQvcHJvY3RvcmluZy1yZXN1bHQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9ucy1hc3Nlc3NtZW50L3NyYy9saWIvbW9kdWxlcy9hc3Nlc3NtZW50LXRha2VyL2NvbXBvbmVudHMvcHJvY3RvcmluZy1yZXN1bHQvcHJvY3RvcmluZy1yZXN1bHQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7O0FBV3pFLE1BQU0sT0FBTyx5QkFBeUI7SUFtQnBDLFlBQ1MsU0FBa0QsRUFDakQsc0JBQThDLEVBQ3RCLElBSy9CO1FBUE0sY0FBUyxHQUFULFNBQVMsQ0FBeUM7UUFDakQsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUN0QixTQUFJLEdBQUosSUFBSSxDQUtuQztRQXJCSCxhQUFRLEdBQStCLEVBQUUsQ0FBQztRQUMxQyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFDbEIsU0FBSSxHQUFHLElBQUksQ0FBQztRQUNKLFNBQUksR0FBRyxDQUFDLENBQUM7UUFDQSxTQUFJLEdBQUcsRUFBRSxDQUFDO1FBRTNCLDZEQUE2RDtRQUM3RCxvQkFBZSxHQUE4QyxFQUFFLENBQUM7UUFDaEUsZ0JBQVcsR0FBeUMsRUFBRSxDQUFD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LENBQUMsS0FBVSxFQUFFLFFBQWdCO1FBQzVDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQztJQUM5QixDQUFDOzt1SEF4S1UseUJBQXlCLG9GQXNCMUIsZUFBZTsyR0F0QmQseUJBQXlCLDZEQ1p0QyxzbGVBZ09BOzRGRHBOYSx5QkFBeUI7a0JBTHJDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsV0FBVyxFQUFFLG9DQUFvQztvQkFDakQsU0FBUyxFQUFFLENBQUMsb0NBQW9DLENBQUM7aUJBQ2xEOzswQkF1QkksTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRUYWtlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hc3Nlc3NtZW50LXRha2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm9jdG9yaW5nUGF5bG9hZCwgUHJvY3RvcmluZ1JlcG9ydCwgUHJvY3RvcmluZ1Nlc3Npb25TdW1tYXJ5IH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2ludGVyZmFjZXMvcHJvY3RvcmluZy5pbnRlcmZhY2UnO1xyXG5cclxudHlwZSBSZXBvcnRTdGF0ZSA9ICdsb2FkaW5nJyB8ICdsb2FkZWQnIHwgJ2VtcHR5JyB8ICdlcnJvcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1wcm9jdG9yaW5nLXJlc3VsdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb2N0b3JpbmctcmVzdWx0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9wcm9jdG9yaW5nLXJlc3VsdC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcm9jdG9yaW5nUmVzdWx0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBsYWJlbENvbmZpZzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcclxuICBpbWFnZUNvbmZpZzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcclxuICBhc3Nlc3NlZUlkOiBudW1iZXI7XHJcbiAgYXNzZXNzZWVOYW1lOiBzdHJpbmc7XHJcblxyXG4gIHNlc3Npb25zOiBQcm9jdG9yaW5nU2Vzc2lvblN1bW1hcnlbXSA9IFtdO1xyXG4gIGxvYWRpbmcgPSBmYWxzZTtcclxuICBlcnJvcmVkID0gZmFsc2U7XHJcbiAgdG90YWxFbGVtZW50cyA9IDA7XHJcbiAgbGFzdCA9IHRydWU7XHJcbiAgcHJpdmF0ZSBwYWdlID0gMDtcclxuICBwcml2YXRlIHJlYWRvbmx5IHNpemUgPSAyMDtcclxuXHJcbiAgLy8gcGVyLXNlc3Npb24gbGF6eSByZXBvcnQgZGF0YSArIHN0YXRlIChrZXllZCBieSBzZXNzaW9uIGlkKVxyXG4gIHJlcG9ydEJ5U2Vzc2lvbjogeyBbc2Vzc2lvbklkOiBudW1iZXJdOiBQcm9jdG9yaW5nUmVwb3J0IH0gPSB7fTtcclxuICByZXBvcnRTdGF0ZTogeyBbc2Vzc2lvbklkOiBudW1iZXJdOiBSZXBvcnRTdGF0ZSB9ID0ge307XHJcbiAgcHJpdmF0ZSBwYXJzZWRDYWNoZTogeyBbcmVwb3J0SWQ6IG51bWJlcl06IFByb2N0b3JpbmdQYXlsb2FkIHwgbnVsbCB9ID0ge307XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFByb2N0b3JpbmdSZXN1bHRDb21wb25lbnQ+LFxyXG4gICAgcHJpdmF0ZSBhc3Nlc3NtZW50VGFrZXJTZXJ2aWNlOiBBc3Nlc3NtZW50VGFrZXJTZXJ2aWNlLFxyXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiB7XHJcbiAgICAgIGxhYmVsQ29uZmlnPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcclxuICAgICAgaW1hZ2VDb25maWc/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xyXG4gICAgICBhc3Nlc3NlZUlkPzogbnVtYmVyO1xyXG4gICAgICBhc3Nlc3NlZU5hbWU/OiBzdHJpbmc7XHJcbiAgICB9XHJcbiAgKSB7XHJcbiAgICB0aGlzLmxhYmVsQ29uZmlnID0gZGF0YT8ubGFiZWxDb25maWcgfHwge307XHJcbiAgICB0aGlzLmltYWdlQ29uZmlnID0gZGF0YT8uaW1hZ2VDb25maWcgfHwge307XHJcbiAgICB0aGlzLmFzc2Vzc2VlSWQgPSBkYXRhPy5hc3Nlc3NlZUlkIGFzIG51bWJlcjtcclxuICAgIHRoaXMuYXNzZXNzZWVOYW1lID0gZGF0YT8uYXNzZXNzZWVOYW1lIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmxvYWRTZXNzaW9ucygpO1xyXG4gIH1cclxuXHJcbiAgbG9hZFNlc3Npb25zKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmFzc2Vzc2VlSWQgfHwgdGhpcy5sb2FkaW5nKSB7XHJcbiAgICAgIGlmICghdGhpcy5hc3Nlc3NlZUlkKSB7IHRoaXMuZXJyb3JlZCA9IHRydWU7IH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuZXJyb3JlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5hc3Nlc3NtZW50VGFrZXJTZXJ2aWNlXHJcbiAgICAgIC5nZXRQcm9jdG9yaW5nU2Vzc2lvbnModGhpcy5hc3Nlc3NlZUlkLCB7IGRpcmVjdGlvbjogJ2Rlc2MnLCBwYWdlOiB0aGlzLnBhZ2UsIHNpemU6IHRoaXMuc2l6ZSwgc29ydEJ5OiAnaWQnIH0pXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZXNzaW9ucyA9IFsuLi50aGlzLnNlc3Npb25zLCAuLi4ocmVzPy5jb250ZW50IHx8IFtdKV07XHJcbiAgICAgICAgICB0aGlzLnRvdGFsRWxlbWVudHMgPSByZXM/LnRvdGFsRWxlbWVudHMgPz8gdGhpcy5zZXNzaW9ucy5sZW5ndGg7XHJcbiAgICAgICAgICB0aGlzLmxhc3QgPSByZXM/Lmxhc3QgPz8gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5lcnJvcmVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZE1vcmUoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMubGFzdCAmJiAhdGhpcy5sb2FkaW5nKSB7XHJcbiAgICAgIHRoaXMucGFnZSsrO1xyXG4gICAgICB0aGlzLmxvYWRTZXNzaW9ucygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIEZldGNoZXMgdGhlIHJlcG9ydCBmb3IgYSBzZXNzaW9uIHRoZSBmaXJzdCB0aW1lIGl0cyBwYW5lbCBpcyBleHBhbmRlZC4gKi9cclxuICBsb2FkUmVwb3J0KHNlc3Npb246IFByb2N0b3JpbmdTZXNzaW9uU3VtbWFyeSk6IHZvaWQge1xyXG4gICAgY29uc3QgaWQgPSBzZXNzaW9uPy5pZDtcclxuICAgIGlmIChpZCA9PSBudWxsIHx8IHRoaXMucmVwb3J0U3RhdGVbaWRdID09PSAnbG9hZGluZycgfHwgdGhpcy5yZXBvcnRTdGF0ZVtpZF0gPT09ICdsb2FkZWQnKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMucmVwb3J0U3RhdGVbaWRdID0gJ2xvYWRpbmcnO1xyXG4gICAgdGhpcy5hc3Nlc3NtZW50VGFrZXJTZXJ2aWNlLmdldFByb2N0b3JpbmdSZXBvcnRCeVNlc3Npb24oaWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICghcmVzIHx8IHR5cGVvZiByZXMgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICB0aGlzLnJlcG9ydFN0YXRlW2lkXSA9ICdlbXB0eSc7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVwb3J0QnlTZXNzaW9uW2lkXSA9IHJlcztcclxuICAgICAgICB0aGlzLnJlcG9ydFN0YXRlW2lkXSA9ICdsb2FkZWQnO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gbm8gcmVwb3J0IHlldCAoZS5nLiBzZXNzaW9uIG5vdCB2YWxpZGF0ZWQpIOKGkiBlbXB0eTsgYW55dGhpbmcgZWxzZSDihpIgZXJyb3JcclxuICAgICAgICB0aGlzLnJlcG9ydFN0YXRlW2lkXSA9IGVycj8uc3RhdHVzID09PSA0MDQgPyAnZW1wdHknIDogJ2Vycm9yJztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0cmFja0J5U2Vzc2lvbklkKF9pbmRleDogbnVtYmVyLCBzZXNzaW9uOiBQcm9jdG9yaW5nU2Vzc2lvblN1bW1hcnkpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHNlc3Npb24/LmlkID8/IF9pbmRleDtcclxuICB9XHJcblxyXG4gIHRyYWNrQnlJbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBpbmRleDtcclxuICB9XHJcblxyXG4gIC8qKiBQYXJzZXMgKGFuZCBjYWNoZXMpIHRoZSByZXBvcnRQYXlsb2FkIEpTT04uIFJldHVybnMgbnVsbCBpZiBhYnNlbnQgb3Igbm90IHZhbGlkIEpTT04uICovXHJcbiAgZ2V0UGFyc2VkUGF5bG9hZChyZXBvcnQ6IFByb2N0b3JpbmdSZXBvcnQpOiBQcm9jdG9yaW5nUGF5bG9hZCB8IG51bGwge1xyXG4gICAgY29uc3QgaWQgPSByZXBvcnQ/LmlkID8/IC0xO1xyXG4gICAgaWYgKCEoaWQgaW4gdGhpcy5wYXJzZWRDYWNoZSkpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLnBhcnNlZENhY2hlW2lkXSA9IHJlcG9ydD8ucmVwb3J0UGF5bG9hZCA/IEpTT04ucGFyc2UocmVwb3J0LnJlcG9ydFBheWxvYWQpIDogbnVsbDtcclxuICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgdGhpcy5wYXJzZWRDYWNoZVtpZF0gPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5wYXJzZWRDYWNoZVtpZF07XHJcbiAgfVxyXG5cclxuICAvKiogRm9ybWF0cyBhIGR1cmF0aW9uIGluIHNlY29uZHMgYXMgYE1tIFNzYCAob3IgYFNzYCB1bmRlciBhIG1pbnV0ZSkuICovXHJcbiAgZm9ybWF0RHVyYXRpb24oc2Vjb25kcz86IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBpZiAoc2Vjb25kcyA9PSBudWxsKSB7IHJldHVybiAnJzsgfVxyXG4gICAgY29uc3QgbSA9IE1hdGguZmxvb3Ioc2Vjb25kcyAvIDYwKTtcclxuICAgIGNvbnN0IHMgPSBzZWNvbmRzICUgNjA7XHJcbiAgICByZXR1cm4gbSA+IDAgPyBgJHttfW0gJHtzfXNgIDogYCR7c31zYDtcclxuICB9XHJcblxyXG4gIC8qKiBTZXNzaW9uIHRpbWVzdGFtcHMgYXJlIGVwb2NoIG1pbGxpc2Vjb25kcyBhbHJlYWR5OyBndWFyZCAwL3VuZGVmaW5lZCBzbyBub3RoaW5nIHJlbmRlcnMuICovXHJcbiAgdG9NaWxsaXMoZXBvY2hNaWxsaXM/OiBudW1iZXIpOiBudW1iZXIgfCBudWxsIHtcclxuICAgIHJldHVybiBlcG9jaE1pbGxpcyA/IGVwb2NoTWlsbGlzIDogbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZW1lIGJhZGdlIGNsYXNzZXMgZm9yIGEgc2Vzc2lvbiBzdGF0dXMuXHJcbiAgICogQUNUSVZFID0gcnVubmluZywgVkFMSURBVElORyA9IHJlcG9ydCBpbiBwcm9ncmVzcywgVkFMSURBVEVEID0gcmVwb3J0IHJlYWR5LFxyXG4gICAqIEVOREVEID0gc3RvcHBlZC9pbnZhbGlkYXRlZCwgRkFJTEVEID0gZXJyb3JlZC5cclxuICAgKi9cclxuICBzdGF0dXNCYWRnZUNsYXNzKHN0YXR1cz86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBzd2l0Y2ggKChzdGF0dXMgfHwgJycpLnRvVXBwZXJDYXNlKCkpIHtcclxuICAgICAgY2FzZSAnQUNUSVZFJzogcmV0dXJuICdhc3Nlc3NtZW50LWJnLXByaW1hcnktb25lIGFzc2Vzc21lbnQtdGV4dC13aGl0ZSc7XHJcbiAgICAgIGNhc2UgJ1ZBTElEQVRJTkcnOiByZXR1cm4gJ2Fzc2Vzc21lbnQtYmctd2FybmluZyBhc3Nlc3NtZW50LXRleHQtd2hpdGUnO1xyXG4gICAgICBjYXNlICdWQUxJREFURUQnOiByZXR1cm4gJ2Fzc2Vzc21lbnQtYmctc3VjY2VzcyBhc3Nlc3NtZW50LXRleHQtd2hpdGUnO1xyXG4gICAgICBjYXNlICdGQUlMRUQnOiByZXR1cm4gJ2Fzc2Vzc21lbnQtYmctZGFuZ2VyIGFzc2Vzc21lbnQtdGV4dC13aGl0ZSc7XHJcbiAgICAgIGNhc2UgJ0VOREVEJzpcclxuICAgICAgZGVmYXVsdDogcmV0dXJuICdhc3Nlc3NtZW50LWJnLWdyZXktc2l4IGFzc2Vzc21lbnQtdGV4dC13aGl0ZSc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogTWFwcyBhIHJhdyBldmVudCBjb2RlIChlLmcuIGB0YWIuaGlkZGVuYCkgdG8gYSBmcmllbmRseSBsYWJlbCwgZmFsbGluZyBiYWNrIHRvIHRoZSByYXcgY29kZS4gKi9cclxuICBldmVudFR5cGVMYWJlbCh0eXBlPzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghdHlwZSkgeyByZXR1cm4gJyc7IH1cclxuICAgIHJldHVybiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUFJPQ1RPUklORy5FVkVOVC4nICsgdHlwZV0gfHwgdHlwZTtcclxuICB9XHJcblxyXG4gIC8qKiBNYXBzIGEgcmF3IHJlYXNvbiBjb2RlIChlLmcuIGBicm93c2VyX2FjdGl2aXR5YCkgdG8gYSBmcmllbmRseSBsYWJlbCwgZmFsbGluZyBiYWNrIHRvIHRoZSByYXcgY29kZS4gKi9cclxuICByZWFzb25Db2RlTGFiZWwoY29kZT86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIWNvZGUpIHsgcmV0dXJuICcnOyB9XHJcbiAgICByZXR1cm4gdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBST0NUT1JJTkcuUkVBU09OLicgKyBjb2RlXSB8fCBjb2RlO1xyXG4gIH1cclxuXHJcbiAgLyoqIEhpZ2hsaWdodHMgaW50ZWdyaXR5LXJlbGV2YW50IHRpbWVsaW5lIGV2ZW50cyAodGFiIHN3aXRjaGVzLCBmYWNlIGlzc3Vlcywgc2Vzc2lvbiBtYXJrZXJzKS4gKi9cclxuICBpc05vdGV3b3J0aHkodHlwZT86IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0eXBlKSB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgcmV0dXJuIHR5cGUuaW5jbHVkZXMoJ3RhYi4nKSB8fCB0eXBlLmluY2x1ZGVzKCdub19mYWNlJykgfHwgdHlwZS5pbmNsdWRlcygnbXVsdGlfZmFjZScpXHJcbiAgICAgIHx8IHR5cGUuaW5jbHVkZXMoJ3Nlc3Npb24uJykgfHwgdHlwZS5pbmNsdWRlcygnY2FtZXJhLicpIHx8IHR5cGUuaW5jbHVkZXMoJ2NsaXBib2FyZCcpXHJcbiAgICAgIHx8IHR5cGUuaW5jbHVkZXMoJ2Z1bGxzY3JlZW4nKTtcclxuICB9XHJcblxyXG4gIGNsb3NlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIGltYWdlRXJyb3JIYW5kbGVyKGV2ZW50OiBhbnksIGZpbGVQYXRoOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGV2ZW50LnRhcmdldC5zcmMgPSBmaWxlUGF0aDtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBoLTEwMCBvdmVyZmxvdy1oaWRkZW4gYXNzZXNzbWVudC1iZy13aGl0ZVwiPlxyXG5cclxuICA8IS0tIEhlYWRlciAtLT5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLXN0YXJ0IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGdhcC0zIHAtMyBweC1tZC00IGJvcmRlci1ib3R0b21cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMVwiPlxyXG4gICAgICA8cCBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xNiBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW4gbWItMVwiPlxyXG4gICAgICAgIHt7IGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUFJPQ1RPUklORy5SRVNVTFRfVElUTEUnXSB9fVxyXG4gICAgICA8L3A+XHJcbiAgICAgIDxwIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW4gbWItMFwiPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiYXNzZXNzZWVOYW1lXCI+e3sgYXNzZXNzZWVOYW1lIH19IMK3IDwvc3Bhbj57eyB0b3RhbEVsZW1lbnRzIH19IHt7IGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUFJPQ1RPUklORy5TRVNTSU9OU19DT1VOVCddIH19XHJcbiAgICAgIDwvcD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiAoY2xpY2spPVwiY2xvc2UoKVwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPjwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIEJvZHkgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIG92ZXJmbG93LWF1dG8gcC0zIHB4LW1kLTRcIj5cclxuXHJcbiAgICA8IS0tIExvYWRpbmcgKGluaXRpYWwpIC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cImxvYWRpbmcgJiYgIXNlc3Npb25zLmxlbmd0aFwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0yIHB5LTUgYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW5cIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzcGlubmVyLWJvcmRlciBzcGlubmVyLWJvcmRlci1zbVwiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XHJcbiAgICAgIHt7IGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUFJPQ1RPUklORy5TRVNTSU9OU19MT0FESU5HJ10gfX1cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gRXJyb3IgLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiZXJyb3JlZCAmJiAhc2Vzc2lvbnMubGVuZ3RoXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlciBweS01XCI+XHJcbiAgICAgIDxwIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTMgYXNzZXNzbWVudC10ZXh0LWRhbmdlciBtYi0zXCI+e3sgbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QUk9DVE9SSU5HLlNFU1NJT05TX0VSUk9SJ10gfX08L3A+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJsb2FkU2Vzc2lvbnMoKVwiXHJcbiAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LWJ0bi1wcmltYXJ5LXRyYW5zcGFyZW50IGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEzIHB4LTMgcHktMlwiPlxyXG4gICAgICAgIHt7IGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUFJPQ1RPUklORy5SRVBPUlRTX1JFVFJZJ10gfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIEVtcHR5IC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cIiFsb2FkaW5nICYmICFlcnJvcmVkICYmICFzZXNzaW9ucy5sZW5ndGhcIiBjbGFzcz1cInRleHQtY2VudGVyIHB5LTUgYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW5cIj5cclxuICAgICAge3sgbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QUk9DVE9SSU5HLlNFU1NJT05TX0VNUFRZJ10gfX1cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gU2Vzc2lvbnMgYWNjb3JkaW9uIC0tPlxyXG4gICAgPG1hdC1hY2NvcmRpb24gY2xhc3M9XCJkLWJsb2NrXCIgKm5nSWY9XCJzZXNzaW9ucy5sZW5ndGhcIj5cclxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgKm5nRm9yPVwibGV0IHNlc3Npb24gb2Ygc2Vzc2lvbnM7IHRyYWNrQnk6IHRyYWNrQnlTZXNzaW9uSWRcIlxyXG4gICAgICAgIGNsYXNzPVwic2hhZG93LW5vbmUgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBhc3Nlc3NtZW50LXBhbmVsIGJvcmRlciBtYi0yXCIgKG9wZW5lZCk9XCJsb2FkUmVwb3J0KHNlc3Npb24pXCI+XHJcblxyXG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBjbGFzcz1cInByb2N0b3JpbmctcGFuZWwtaGVhZGVyIHAtM1wiPlxyXG4gICAgICAgICAgPG1hdC1wYW5lbC10aXRsZSBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBteS0xIGFsaWduLWl0ZW1zLXN0YXJ0XCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPlxyXG4gICAgICAgICAgICAgIHt7IGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUFJPQ1RPUklORy5SRVBPUlRfU0VTU0lPTiddIH19IHt7IHNlc3Npb24uaWQgfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgbXQtMVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2Vzc2lvbi5zdGF0dXNcIiBjbGFzcz1cImJhZGdlIHJvdW5kZWQtcGlsbCB0ZXh0LWNhcGl0YWxpemUgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMFwiIFtuZ0NsYXNzXT1cInN0YXR1c0JhZGdlQ2xhc3Moc2Vzc2lvbi5zdGF0dXMpXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBzZXNzaW9uLnN0YXR1cyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNlc3Npb24/LmludGVncml0eVN1bW1hcnk/LmludGVncml0eUZsYWdnZWRcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJiYWRnZSByb3VuZGVkLXBpbGwgYXNzZXNzbWVudC1iZy1kYW5nZXIgYXNzZXNzbWVudC10ZXh0LXdoaXRlIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTBcIj5cclxuICAgICAgICAgICAgICAgIHt7IGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUFJPQ1RPUklORy5SRVBPUlRfRkxBR0dFRCddIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgIDxtYXQtcGFuZWwtZGVzY3JpcHRpb24gY2xhc3M9XCJqdXN0aWZ5LWNvbnRlbnQtZW5kIGFsaWduLWl0ZW1zLWNlbnRlciBtZS0zXCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidG9NaWxsaXMoc2Vzc2lvbi5zdGFydGVkQXQpIGFzIHN0YXJ0ZWRcIiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTExIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXNldmVuXCI+XHJcbiAgICAgICAgICAgICAge3sgc3RhcnRlZCB8IGRhdGU6J2RkIE1NTSwgSEg6bW0nIH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvbWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxyXG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcblxyXG4gICAgICAgIDwhLS0gUmVwb3J0IGlzIGZldGNoZWQgd2hlbiB0aGUgcGFuZWwgb3BlbnMgLS0+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIG1hdEV4cGFuc2lvblBhbmVsQ29udGVudD5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTMgcHQtMVwiIFtuZ1N3aXRjaF09XCJyZXBvcnRTdGF0ZVtzZXNzaW9uLmlkIV1cIj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gTG9hZGluZyAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2xvYWRpbmcnXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHB5LTMgYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW5cIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHNwaW5uZXItYm9yZGVyLXNtXCIgcm9sZT1cInN0YXR1c1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICB7eyBsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBST0NUT1JJTkcuUkVQT1JUX0xPQURJTkcnXSB9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gRXJyb3IgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidlcnJvcidcIiBjbGFzcz1cInB5LTNcIj5cclxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEzIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbWItMlwiPnt7IGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUFJPQ1RPUklORy5SRVBPUlRfRVJST1InXSB9fTwvcD5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwibG9hZFJlcG9ydChzZXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtYnRuLXByaW1hcnktdHJhbnNwYXJlbnQgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTMgcHgtMyBweS0yXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBST0NUT1JJTkcuUkVQT1JUU19SRVRSWSddIH19XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBObyByZXBvcnQgeWV0IC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInZW1wdHknXCIgY2xhc3M9XCJweS0zIGFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXNldmVuXCI+XHJcbiAgICAgICAgICAgICAge3sgbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QUk9DVE9SSU5HLlJFUE9SVF9FTVBUWSddIH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBMb2FkZWQgcmVwb3J0IC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbG9hZGVkJ1wiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyZXBvcnRCeVNlc3Npb25bc2Vzc2lvbi5pZCFdIGFzIHJlcG9ydFwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gSW50ZWdyaXR5IHN1bW1hcnkgKHJlcG9ydCB0b3AtbGV2ZWwpIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBnLTJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMSBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlbiB0ZXh0LXVwcGVyY2FzZSBtYi0xXCI+e3sgbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QUk9DVE9SSU5HLlJFUE9SVF9JTlRFR1JJVFlfU0NPUkUnXSB9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlbiBtYi0wXCIgW2NsYXNzLmFzc2Vzc21lbnQtdGV4dC1kYW5nZXJdPVwicmVwb3J0LmludGVncml0eUZsYWdnZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IHJlcG9ydC5pbnRlZ3JpdHlTY29yZSB9fTxzcGFuICpuZ0lmPVwicmVwb3J0LmludGVncml0eUxldmVsXCI+ICh7eyByZXBvcnQuaW50ZWdyaXR5TGV2ZWwgfX0pPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiICpuZ0lmPVwicmVwb3J0LmlkZW50aXR5TWF0Y2hcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTExIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXNldmVuIHRleHQtdXBwZXJjYXNlIG1iLTFcIj57eyBsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBST0NUT1JJTkcuUkVQT1JUX0lERU5USVRZX01BVENIJ10gfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW4gbWItMFwiPnt7IHJlcG9ydC5pZGVudGl0eU1hdGNoIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiICpuZ0lmPVwicmVwb3J0LmZhaWx1cmVSZWFzb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTExIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXNldmVuIHRleHQtdXBwZXJjYXNlIG1iLTFcIj57eyBsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBST0NUT1JJTkcuUkVQT1JUX0ZBSUxVUkVfUkVBU09OJ10gfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMyBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyIG1iLTBcIj57eyByZXBvcnQuZmFpbHVyZVJlYXNvbiB9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0UGFyc2VkUGF5bG9hZChyZXBvcnQpIGFzIHA7IGVsc2UgcmF3UGF5bG9hZFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPCEtLSBTdW1tYXJ5IG1ldGEgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC13cmFwIGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBtdC0zIGFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXNldmVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwLmR1cmF0aW9uX3NlY29uZHMgIT0gbnVsbFwiPnt7IGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUFJPQ1RPUklORy5SRVBPUlRfRFVSQVRJT04nXSB9fToge3sgZm9ybWF0RHVyYXRpb24ocC5kdXJhdGlvbl9zZWNvbmRzKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInAuc3RhcnRlZF9hdFwiPsK3IHt7IGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUFJPQ1RPUklORy5SRVBPUlRfU1RBUlRFRCddIH19OiB7eyBwLnN0YXJ0ZWRfYXQgfCBkYXRlOidkZCBNTU0sIEhIOm1tOnNzJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInAuZW5kZWRfYXRcIj7CtyB7eyBsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBST0NUT1JJTkcuUkVQT1JUX0VOREVEJ10gfX06IHt7IHAuZW5kZWRfYXQgfCBkYXRlOidISDptbTpzcycgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPCEtLSBSZWFzb25zIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicC5pbnRlZ3JpdHk/LnJlYXNvbnM/Lmxlbmd0aFwiIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGdhcC0yIG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCByIG9mIHAuaW50ZWdyaXR5Py5yZWFzb25zOyB0cmFja0J5OiB0cmFja0J5SW5kZXhcIiBjbGFzcz1cImJvcmRlciByb3VuZGVkIHAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTIgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+e3sgcmVhc29uQ29kZUxhYmVsKHIuY29kZSkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwici53ZWlnaHQgIT0gbnVsbFwiIGNsYXNzPVwiYmFkZ2Ugcm91bmRlZC1waWxsIGFzc2Vzc21lbnQtdGV4dC13aGl0ZVwiIFtuZ0NsYXNzXT1cIihyLndlaWdodCB8fCAwKSA8IDAgPyAnYXNzZXNzbWVudC1iZy1kYW5nZXInIDogJ2Fzc2Vzc21lbnQtYmctc3VjY2VzcydcIj57eyAoci53ZWlnaHQgfHwgMCkgPiAwID8gJysnIDogJycgfX17eyByLndlaWdodCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlbiBtYi0wIG10LTFcIj57eyByLmRldGFpbCB9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8IS0tIFN0YXQgdGlsZXM6IGZhY2UgYW5hbHlzaXMgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlbiBtdC0zIG1iLTJcIj57eyBsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBST0NUT1JJTkcuUkVQT1JUX0FOQUxZU0lTJ10gfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcm93LWNvbHMtMiByb3ctY29scy1tZC00IGctMiB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcm91bmRlZCBwLTIgaC0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTggbWItMVwiPnt7IHAuZmFjZV9hbmFseXNpcz8uZnJhbWVzX2NoZWNrZWQgPz8gMCB9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMSBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlbiBtYi0wXCI+e3sgbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QUk9DVE9SSU5HLlJFUE9SVF9GUkFNRVMnXSB9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcm91bmRlZCBwLTIgaC0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTggbWItMVwiIFtjbGFzcy5hc3Nlc3NtZW50LXRleHQtZGFuZ2VyXT1cIihwLmZhY2VfYW5hbHlzaXM/Lm5vX2ZhY2VfZnJhbWVzIHx8IDApID4gMFwiPnt7IHAuZmFjZV9hbmFseXNpcz8ubm9fZmFjZV9mcmFtZXMgPz8gMCB9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMSBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlbiBtYi0wXCI+e3sgbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QUk9DVE9SSU5HLlJFUE9SVF9OT19GQUNFJ10gfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIHJvdW5kZWQgcC0yIGgtMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTE4IG1iLTFcIiBbY2xhc3MuYXNzZXNzbWVudC10ZXh0LWRhbmdlcl09XCIocC5mYWNlX2FuYWx5c2lzPy5tdWx0aV9mYWNlX2ZyYW1lcyB8fCAwKSA+IDBcIj57eyBwLmZhY2VfYW5hbHlzaXM/Lm11bHRpX2ZhY2VfZnJhbWVzID8/IDAgfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTEgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW4gbWItMFwiPnt7IGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUFJPQ1RPUklORy5SRVBPUlRfTVVMVElfRkFDRSddIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkIHAtMiBoLTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xOCBtYi0xXCIgW2NsYXNzLmFzc2Vzc21lbnQtdGV4dC1kYW5nZXJdPVwiKHAuZmFjZV9hbmFseXNpcz8uaW1wZXJzb25hdGlvbl9mcmFtZXMgfHwgMCkgPiAwXCI+e3sgcC5mYWNlX2FuYWx5c2lzPy5pbXBlcnNvbmF0aW9uX2ZyYW1lcyA/PyAwIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTExIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXNldmVuIG1iLTBcIj57eyBsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBST0NUT1JJTkcuUkVQT1JUX0lNUEVSU09OQVRJT04nXSB9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gQWN0aXZpdHkgYnJlYWtkb3duIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicC5hY3Rpdml0eT8uYnlfdHlwZVwiIGNsYXNzPVwiZC1mbGV4IGZsZXgtd3JhcCBnYXAtMiBtdC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IGl0ZW0gb2YgKHAuYWN0aXZpdHk/LmJ5X3R5cGUgfCBrZXl2YWx1ZSk7IHRyYWNrQnk6IHRyYWNrQnlJbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJhZGdlIHJvdW5kZWQtcGlsbCBhc3Nlc3NtZW50LWJnLXBhbGV0dGUtRURGM0ZEIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlbiBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBldmVudFR5cGVMYWJlbChpdGVtLmtleSkgfX0gPHNwYW4gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTJcIj57eyBpdGVtLnZhbHVlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8IS0tIEV2aWRlbmNlIGltYWdlcyAtLT5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInAuZXZpZGVuY2U/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlbiBtdC0zIG1iLTJcIj57eyBsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBST0NUT1JJTkcuUkVQT1JUX0VWSURFTkNFJ10gfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXdyYXAgZ2FwLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhICpuZ0Zvcj1cImxldCBldiBvZiBwLmV2aWRlbmNlOyB0cmFja0J5OiB0cmFja0J5SW5kZXhcIiBjbGFzcz1cInRleHQtY2VudGVyIHRleHQtZGVjb3JhdGlvbi1ub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwiZXYuaW1hZ2VfdXJsXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cInByb2N0b3JpbmctZXZpLWltZyByb3VuZGVkIGJvcmRlclwiIFtzcmNdPVwiZXYuaW1hZ2VfdXJsXCIgW2F0dHIuYWx0XT1cIidmcmFtZSAnICsgZXYuc2VxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvdXNlci5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1ibG9jayBhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMSBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlbiBtdC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJldi5pc19yZWZlcmVuY2VcIiBjbGFzcz1cImJhZGdlIHJvdW5kZWQtcGlsbCBhc3Nlc3NtZW50LWJnLXByaW1hcnktb25lIGFzc2Vzc21lbnQtdGV4dC13aGl0ZSBtZS0xXCI+e3sgbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QUk9DVE9SSU5HLlJFUE9SVF9SRUZFUkVOQ0UnXSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAje3sgZXYuc2VxIH19IMK3IHt7IGV2LmNhcHR1cmVkX2F0IHwgZGF0ZTonSEg6bW06c3MnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8IS0tIFRpbWVsaW5lIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicC50aW1lbGluZT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuIG10LTMgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QUk9DVE9SSU5HLlJFUE9SVF9USU1FTElORSddIH19ICh7eyBwLnRpbWVsaW5lPy5sZW5ndGggfX0pXHJcbiAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9jdG9yaW5nLWxvZyBhc3Nlc3NtZW50LWJnLWdyZXktdGVuIGFzc2Vzc21lbnQtdGV4dC1ncmV5LW9uZSBmb250LW1vbm9zcGFjZSBzbWFsbCByb3VuZGVkIHAtMyBvdmVyZmxvdy1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBldiBvZiBwLnRpbWVsaW5lOyB0cmFja0J5OiB0cmFja0J5SW5kZXhcIiBjbGFzcz1cInRleHQtbm93cmFwXCIgW2NsYXNzLmZ3LXNlbWlib2xkXT1cImlzTm90ZXdvcnRoeShldi50eXBlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1ncmV5LWZpdmUgbWUtMlwiPiN7eyBldi5zZXEgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzcy5hc3Nlc3NtZW50LXRleHQtcGFsZXR0ZS1BREM5RjZdPVwiaXNOb3Rld29ydGh5KGV2LnR5cGUpXCI+e3sgZXZlbnRUeXBlTGFiZWwoZXYudHlwZSkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LWdyZXktZml2ZSBtcy0yXCI+e3sgZXYuYXQgfCBkYXRlOidISDptbTpzcycgfX0gKHt7IGV2LnNvdXJjZSB9fSk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBGYWxsYmFjazogcmF3IHBheWxvYWQgaWYgaXQgaXNuJ3QgcGFyc2VhYmxlIEpTT04gLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3Jhd1BheWxvYWQ+XHJcbiAgICAgICAgICAgICAgICAgIDxwcmUgKm5nSWY9XCJyZXBvcnQucmVwb3J0UGF5bG9hZFwiIGNsYXNzPVwicHJvY3RvcmluZy1wYXlsb2FkIGFzc2Vzc21lbnQtYmctZ3JleS10ZW4gYXNzZXNzbWVudC10ZXh0LWdyZXktb25lIHNtYWxsIHJvdW5kZWQgcC0zIG92ZXJmbG93LWF1dG8gbWItMCBtdC0zXCI+e3sgcmVwb3J0LnJlcG9ydFBheWxvYWQgfX08L3ByZT5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICA8L21hdC1hY2NvcmRpb24+XHJcblxyXG4gICAgPCEtLSBMb2FkIG1vcmUgLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwic2Vzc2lvbnMubGVuZ3RoICYmICFsYXN0XCIgY2xhc3M9XCJ0ZXh0LWNlbnRlciBtdC0zXCI+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJsb2FkTW9yZSgpXCIgW2Rpc2FibGVkXT1cImxvYWRpbmdcIlxyXG4gICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC1idG4tcHJpbWFyeS10cmFuc3BhcmVudCBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xMyBweC0zIHB5LTIgZC1pbmxpbmUtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cImxvYWRpbmdcIiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHNwaW5uZXItYm9yZGVyLXNtXCIgcm9sZT1cInN0YXR1c1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cclxuICAgICAgICB7eyBsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBST0NUT1JJTkcuTE9BRF9NT1JFJ10gfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
177
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY3RvcmluZy1yZXN1bHQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9ucy1hc3Nlc3NtZW50L3NyYy9saWIvbW9kdWxlcy9hc3Nlc3NtZW50LXRha2VyL2NvbXBvbmVudHMvcHJvY3RvcmluZy1yZXN1bHQvcHJvY3RvcmluZy1yZXN1bHQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9ucy1hc3Nlc3NtZW50L3NyYy9saWIvbW9kdWxlcy9hc3Nlc3NtZW50LXRha2VyL2NvbXBvbmVudHMvcHJvY3RvcmluZy1yZXN1bHQvcHJvY3RvcmluZy1yZXN1bHQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7O0FBV3pFLE1BQU0sT0FBTyx5QkFBeUI7SUFtQnBDLFlBQ1MsU0FBa0QsRUFDakQsc0JBQThDLEVBQ3RCLElBSy9CO1FBUE0sY0FBUyxHQUFULFNBQVMsQ0FBeUM7UUFDakQsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUN0QixTQUFJLEdBQUosSUFBSSxDQUtuQztRQXJCSCxhQUFRLEdBQStCLEVBQUUsQ0FBQztRQUMxQyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFDbEIsU0FBSSxHQUFHLElBQUksQ0FBQztRQUNKLFNBQUksR0FBRyxDQUFDLENBQUM7UUFDQSxTQUFJLEdBQUcsRUFBRSxDQUFDO1FBRTNCLDZEQUE2RDtRQUM3RCxvQkFBZSxHQUE4QyxFQUFFLENBQUM7UUFDaEUsZ0JBQVcsR0FBeUMsRUFBRSxDQUFD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LENBQUMsS0FBVSxFQUFFLFFBQWdCO1FBQzVDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQztJQUM5QixDQUFDOzt1SEF4S1UseUJBQXlCLG9GQXNCMUIsZUFBZTsyR0F0QmQseUJBQXlCLDZEQ1p0Qyw0bWVBZ09BOzRGRHBOYSx5QkFBeUI7a0JBTHJDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsV0FBVyxFQUFFLG9DQUFvQztvQkFDakQsU0FBUyxFQUFFLENBQUMsb0NBQW9DLENBQUM7aUJBQ2xEOzswQkF1QkksTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRUYWtlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hc3Nlc3NtZW50LXRha2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm9jdG9yaW5nUGF5bG9hZCwgUHJvY3RvcmluZ1JlcG9ydCwgUHJvY3RvcmluZ1Nlc3Npb25TdW1tYXJ5IH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2ludGVyZmFjZXMvcHJvY3RvcmluZy5pbnRlcmZhY2UnO1xyXG5cclxudHlwZSBSZXBvcnRTdGF0ZSA9ICdsb2FkaW5nJyB8ICdsb2FkZWQnIHwgJ2VtcHR5JyB8ICdlcnJvcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1wcm9jdG9yaW5nLXJlc3VsdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb2N0b3JpbmctcmVzdWx0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9wcm9jdG9yaW5nLXJlc3VsdC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcm9jdG9yaW5nUmVzdWx0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBsYWJlbENvbmZpZzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcclxuICBpbWFnZUNvbmZpZzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcclxuICBhc3Nlc3NlZUlkOiBudW1iZXI7XHJcbiAgYXNzZXNzZWVOYW1lOiBzdHJpbmc7XHJcblxyXG4gIHNlc3Npb25zOiBQcm9jdG9yaW5nU2Vzc2lvblN1bW1hcnlbXSA9IFtdO1xyXG4gIGxvYWRpbmcgPSBmYWxzZTtcclxuICBlcnJvcmVkID0gZmFsc2U7XHJcbiAgdG90YWxFbGVtZW50cyA9IDA7XHJcbiAgbGFzdCA9IHRydWU7XHJcbiAgcHJpdmF0ZSBwYWdlID0gMDtcclxuICBwcml2YXRlIHJlYWRvbmx5IHNpemUgPSAyMDtcclxuXHJcbiAgLy8gcGVyLXNlc3Npb24gbGF6eSByZXBvcnQgZGF0YSArIHN0YXRlIChrZXllZCBieSBzZXNzaW9uIGlkKVxyXG4gIHJlcG9ydEJ5U2Vzc2lvbjogeyBbc2Vzc2lvbklkOiBudW1iZXJdOiBQcm9jdG9yaW5nUmVwb3J0IH0gPSB7fTtcclxuICByZXBvcnRTdGF0ZTogeyBbc2Vzc2lvbklkOiBudW1iZXJdOiBSZXBvcnRTdGF0ZSB9ID0ge307XHJcbiAgcHJpdmF0ZSBwYXJzZWRDYWNoZTogeyBbcmVwb3J0SWQ6IG51bWJlcl06IFByb2N0b3JpbmdQYXlsb2FkIHwgbnVsbCB9ID0ge307XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFByb2N0b3JpbmdSZXN1bHRDb21wb25lbnQ+LFxyXG4gICAgcHJpdmF0ZSBhc3Nlc3NtZW50VGFrZXJTZXJ2aWNlOiBBc3Nlc3NtZW50VGFrZXJTZXJ2aWNlLFxyXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiB7XHJcbiAgICAgIGxhYmVsQ29uZmlnPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcclxuICAgICAgaW1hZ2VDb25maWc/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xyXG4gICAgICBhc3Nlc3NlZUlkPzogbnVtYmVyO1xyXG4gICAgICBhc3Nlc3NlZU5hbWU/OiBzdHJpbmc7XHJcbiAgICB9XHJcbiAgKSB7XHJcbiAgICB0aGlzLmxhYmVsQ29uZmlnID0gZGF0YT8ubGFiZWxDb25maWcgfHwge307XHJcbiAgICB0aGlzLmltYWdlQ29uZmlnID0gZGF0YT8uaW1hZ2VDb25maWcgfHwge307XHJcbiAgICB0aGlzLmFzc2Vzc2VlSWQgPSBkYXRhPy5hc3Nlc3NlZUlkIGFzIG51bWJlcjtcclxuICAgIHRoaXMuYXNzZXNzZWVOYW1lID0gZGF0YT8uYXNzZXNzZWVOYW1lIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmxvYWRTZXNzaW9ucygpO1xyXG4gIH1cclxuXHJcbiAgbG9hZFNlc3Npb25zKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmFzc2Vzc2VlSWQgfHwgdGhpcy5sb2FkaW5nKSB7XHJcbiAgICAgIGlmICghdGhpcy5hc3Nlc3NlZUlkKSB7IHRoaXMuZXJyb3JlZCA9IHRydWU7IH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuZXJyb3JlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5hc3Nlc3NtZW50VGFrZXJTZXJ2aWNlXHJcbiAgICAgIC5nZXRQcm9jdG9yaW5nU2Vzc2lvbnModGhpcy5hc3Nlc3NlZUlkLCB7IGRpcmVjdGlvbjogJ2Rlc2MnLCBwYWdlOiB0aGlzLnBhZ2UsIHNpemU6IHRoaXMuc2l6ZSwgc29ydEJ5OiAnaWQnIH0pXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZXNzaW9ucyA9IFsuLi50aGlzLnNlc3Npb25zLCAuLi4ocmVzPy5jb250ZW50IHx8IFtdKV07XHJcbiAgICAgICAgICB0aGlzLnRvdGFsRWxlbWVudHMgPSByZXM/LnRvdGFsRWxlbWVudHMgPz8gdGhpcy5zZXNzaW9ucy5sZW5ndGg7XHJcbiAgICAgICAgICB0aGlzLmxhc3QgPSByZXM/Lmxhc3QgPz8gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5lcnJvcmVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZE1vcmUoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMubGFzdCAmJiAhdGhpcy5sb2FkaW5nKSB7XHJcbiAgICAgIHRoaXMucGFnZSsrO1xyXG4gICAgICB0aGlzLmxvYWRTZXNzaW9ucygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIEZldGNoZXMgdGhlIHJlcG9ydCBmb3IgYSBzZXNzaW9uIHRoZSBmaXJzdCB0aW1lIGl0cyBwYW5lbCBpcyBleHBhbmRlZC4gKi9cclxuICBsb2FkUmVwb3J0KHNlc3Npb246IFByb2N0b3JpbmdTZXNzaW9uU3VtbWFyeSk6IHZvaWQge1xyXG4gICAgY29uc3QgaWQgPSBzZXNzaW9uPy5pZDtcclxuICAgIGlmIChpZCA9PSBudWxsIHx8IHRoaXMucmVwb3J0U3RhdGVbaWRdID09PSAnbG9hZGluZycgfHwgdGhpcy5yZXBvcnRTdGF0ZVtpZF0gPT09ICdsb2FkZWQnKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMucmVwb3J0U3RhdGVbaWRdID0gJ2xvYWRpbmcnO1xyXG4gICAgdGhpcy5hc3Nlc3NtZW50VGFrZXJTZXJ2aWNlLmdldFByb2N0b3JpbmdSZXBvcnRCeVNlc3Npb24oaWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICghcmVzIHx8IHR5cGVvZiByZXMgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICB0aGlzLnJlcG9ydFN0YXRlW2lkXSA9ICdlbXB0eSc7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVwb3J0QnlTZXNzaW9uW2lkXSA9IHJlcztcclxuICAgICAgICB0aGlzLnJlcG9ydFN0YXRlW2lkXSA9ICdsb2FkZWQnO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gbm8gcmVwb3J0IHlldCAoZS5nLiBzZXNzaW9uIG5vdCB2YWxpZGF0ZWQpIOKGkiBlbXB0eTsgYW55dGhpbmcgZWxzZSDihpIgZXJyb3JcclxuICAgICAgICB0aGlzLnJlcG9ydFN0YXRlW2lkXSA9IGVycj8uc3RhdHVzID09PSA0MDQgPyAnZW1wdHknIDogJ2Vycm9yJztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0cmFja0J5U2Vzc2lvbklkKF9pbmRleDogbnVtYmVyLCBzZXNzaW9uOiBQcm9jdG9yaW5nU2Vzc2lvblN1bW1hcnkpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHNlc3Npb24/LmlkID8/IF9pbmRleDtcclxuICB9XHJcblxyXG4gIHRyYWNrQnlJbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBpbmRleDtcclxuICB9XHJcblxyXG4gIC8qKiBQYXJzZXMgKGFuZCBjYWNoZXMpIHRoZSByZXBvcnRQYXlsb2FkIEpTT04uIFJldHVybnMgbnVsbCBpZiBhYnNlbnQgb3Igbm90IHZhbGlkIEpTT04uICovXHJcbiAgZ2V0UGFyc2VkUGF5bG9hZChyZXBvcnQ6IFByb2N0b3JpbmdSZXBvcnQpOiBQcm9jdG9yaW5nUGF5bG9hZCB8IG51bGwge1xyXG4gICAgY29uc3QgaWQgPSByZXBvcnQ/LmlkID8/IC0xO1xyXG4gICAgaWYgKCEoaWQgaW4gdGhpcy5wYXJzZWRDYWNoZSkpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLnBhcnNlZENhY2hlW2lkXSA9IHJlcG9ydD8ucmVwb3J0UGF5bG9hZCA/IEpTT04ucGFyc2UocmVwb3J0LnJlcG9ydFBheWxvYWQpIDogbnVsbDtcclxuICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgdGhpcy5wYXJzZWRDYWNoZVtpZF0gPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5wYXJzZWRDYWNoZVtpZF07XHJcbiAgfVxyXG5cclxuICAvKiogRm9ybWF0cyBhIGR1cmF0aW9uIGluIHNlY29uZHMgYXMgYE1tIFNzYCAob3IgYFNzYCB1bmRlciBhIG1pbnV0ZSkuICovXHJcbiAgZm9ybWF0RHVyYXRpb24oc2Vjb25kcz86IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBpZiAoc2Vjb25kcyA9PSBudWxsKSB7IHJldHVybiAnJzsgfVxyXG4gICAgY29uc3QgbSA9IE1hdGguZmxvb3Ioc2Vjb25kcyAvIDYwKTtcclxuICAgIGNvbnN0IHMgPSBzZWNvbmRzICUgNjA7XHJcbiAgICByZXR1cm4gbSA+IDAgPyBgJHttfW0gJHtzfXNgIDogYCR7c31zYDtcclxuICB9XHJcblxyXG4gIC8qKiBTZXNzaW9uIHRpbWVzdGFtcHMgYXJlIGVwb2NoIG1pbGxpc2Vjb25kcyBhbHJlYWR5OyBndWFyZCAwL3VuZGVmaW5lZCBzbyBub3RoaW5nIHJlbmRlcnMuICovXHJcbiAgdG9NaWxsaXMoZXBvY2hNaWxsaXM/OiBudW1iZXIpOiBudW1iZXIgfCBudWxsIHtcclxuICAgIHJldHVybiBlcG9jaE1pbGxpcyA/IGVwb2NoTWlsbGlzIDogbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZW1lIGJhZGdlIGNsYXNzZXMgZm9yIGEgc2Vzc2lvbiBzdGF0dXMuXHJcbiAgICogQUNUSVZFID0gcnVubmluZywgVkFMSURBVElORyA9IHJlcG9ydCBpbiBwcm9ncmVzcywgVkFMSURBVEVEID0gcmVwb3J0IHJlYWR5LFxyXG4gICAqIEVOREVEID0gc3RvcHBlZC9pbnZhbGlkYXRlZCwgRkFJTEVEID0gZXJyb3JlZC5cclxuICAgKi9cclxuICBzdGF0dXNCYWRnZUNsYXNzKHN0YXR1cz86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBzd2l0Y2ggKChzdGF0dXMgfHwgJycpLnRvVXBwZXJDYXNlKCkpIHtcclxuICAgICAgY2FzZSAnQUNUSVZFJzogcmV0dXJuICdhc3Nlc3NtZW50LWJnLXByaW1hcnktb25lIGFzc2Vzc21lbnQtdGV4dC13aGl0ZSc7XHJcbiAgICAgIGNhc2UgJ1ZBTElEQVRJTkcnOiByZXR1cm4gJ2Fzc2Vzc21lbnQtYmctd2FybmluZyBhc3Nlc3NtZW50LXRleHQtd2hpdGUnO1xyXG4gICAgICBjYXNlICdWQUxJREFURUQnOiByZXR1cm4gJ2Fzc2Vzc21lbnQtYmctc3VjY2VzcyBhc3Nlc3NtZW50LXRleHQtd2hpdGUnO1xyXG4gICAgICBjYXNlICdGQUlMRUQnOiByZXR1cm4gJ2Fzc2Vzc21lbnQtYmctZGFuZ2VyIGFzc2Vzc21lbnQtdGV4dC13aGl0ZSc7XHJcbiAgICAgIGNhc2UgJ0VOREVEJzpcclxuICAgICAgZGVmYXVsdDogcmV0dXJuICdhc3Nlc3NtZW50LWJnLWdyZXktc2l4IGFzc2Vzc21lbnQtdGV4dC13aGl0ZSc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogTWFwcyBhIHJhdyBldmVudCBjb2RlIChlLmcuIGB0YWIuaGlkZGVuYCkgdG8gYSBmcmllbmRseSBsYWJlbCwgZmFsbGluZyBiYWNrIHRvIHRoZSByYXcgY29kZS4gKi9cclxuICBldmVudFR5cGVMYWJlbCh0eXBlPzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghdHlwZSkgeyByZXR1cm4gJyc7IH1cclxuICAgIHJldHVybiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUFJPQ1RPUklORy5FVkVOVC4nICsgdHlwZV0gfHwgdHlwZTtcclxuICB9XHJcblxyXG4gIC8qKiBNYXBzIGEgcmF3IHJlYXNvbiBjb2RlIChlLmcuIGBicm93c2VyX2FjdGl2aXR5YCkgdG8gYSBmcmllbmRseSBsYWJlbCwgZmFsbGluZyBiYWNrIHRvIHRoZSByYXcgY29kZS4gKi9cclxuICByZWFzb25Db2RlTGFiZWwoY29kZT86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIWNvZGUpIHsgcmV0dXJuICcnOyB9XHJcbiAgICByZXR1cm4gdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBST0NUT1JJTkcuUkVBU09OLicgKyBjb2RlXSB8fCBjb2RlO1xyXG4gIH1cclxuXHJcbiAgLyoqIEhpZ2hsaWdodHMgaW50ZWdyaXR5LXJlbGV2YW50IHRpbWVsaW5lIGV2ZW50cyAodGFiIHN3aXRjaGVzLCBmYWNlIGlzc3Vlcywgc2Vzc2lvbiBtYXJrZXJzKS4gKi9cclxuICBpc05vdGV3b3J0aHkodHlwZT86IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0eXBlKSB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgcmV0dXJuIHR5cGUuaW5jbHVkZXMoJ3RhYi4nKSB8fCB0eXBlLmluY2x1ZGVzKCdub19mYWNlJykgfHwgdHlwZS5pbmNsdWRlcygnbXVsdGlfZmFjZScpXHJcbiAgICAgIHx8IHR5cGUuaW5jbHVkZXMoJ3Nlc3Npb24uJykgfHwgdHlwZS5pbmNsdWRlcygnY2FtZXJhLicpIHx8IHR5cGUuaW5jbHVkZXMoJ2NsaXBib2FyZCcpXHJcbiAgICAgIHx8IHR5cGUuaW5jbHVkZXMoJ2Z1bGxzY3JlZW4nKTtcclxuICB9XHJcblxyXG4gIGNsb3NlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIGltYWdlRXJyb3JIYW5kbGVyKGV2ZW50OiBhbnksIGZpbGVQYXRoOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGV2ZW50LnRhcmdldC5zcmMgPSBmaWxlUGF0aDtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBoLTEwMCBvdmVyZmxvdy1oaWRkZW4gYXNzZXNzbWVudC1iZy13aGl0ZVwiPlxyXG5cclxuICA8IS0tIEhlYWRlciAtLT5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLXN0YXJ0IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGdhcC0zIHAtMyBweC1tZC00IGJvcmRlci1ib3R0b21cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMVwiPlxyXG4gICAgICA8cCBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xNiBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW4gbWItMVwiPlxyXG4gICAgICAgIHt7IGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUFJPQ1RPUklORy5SRVNVTFRfVElUTEUnXSB9fVxyXG4gICAgICA8L3A+XHJcbiAgICAgIDxwIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW4gbWItMFwiPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiYXNzZXNzZWVOYW1lXCI+e3sgYXNzZXNzZWVOYW1lIH19IMK3IDwvc3Bhbj57eyB0b3RhbEVsZW1lbnRzIH19IHt7IGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUFJPQ1RPUklORy5TRVNTSU9OU19DT1VOVCddIH19XHJcbiAgICAgIDwvcD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiAoY2xpY2spPVwiY2xvc2UoKVwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPjwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIEJvZHkgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIG92ZXJmbG93LWF1dG8gcC0zIHB4LW1kLTRcIj5cclxuXHJcbiAgICA8IS0tIExvYWRpbmcgKGluaXRpYWwpIC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cImxvYWRpbmcgJiYgIXNlc3Npb25zLmxlbmd0aFwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0yIHB5LTUgYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW5cIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzcGlubmVyLWJvcmRlciBzcGlubmVyLWJvcmRlci1zbVwiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XHJcbiAgICAgIHt7IGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUFJPQ1RPUklORy5TRVNTSU9OU19MT0FESU5HJ10gfX1cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gRXJyb3IgLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiZXJyb3JlZCAmJiAhc2Vzc2lvbnMubGVuZ3RoXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlciBweS01XCI+XHJcbiAgICAgIDxwIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTMgYXNzZXNzbWVudC10ZXh0LWRhbmdlciBtYi0zXCI+e3sgbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QUk9DVE9SSU5HLlNFU1NJT05TX0VSUk9SJ10gfX08L3A+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJsb2FkU2Vzc2lvbnMoKVwiXHJcbiAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LWJ0bi1wcmltYXJ5LXRyYW5zcGFyZW50IGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEzIHB4LTMgcHktMlwiPlxyXG4gICAgICAgIHt7IGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUFJPQ1RPUklORy5SRVBPUlRTX1JFVFJZJ10gfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIEVtcHR5IC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cIiFsb2FkaW5nICYmICFlcnJvcmVkICYmICFzZXNzaW9ucy5sZW5ndGhcIiBjbGFzcz1cInRleHQtY2VudGVyIHB5LTUgYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW5cIj5cclxuICAgICAge3sgbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QUk9DVE9SSU5HLlNFU1NJT05TX0VNUFRZJ10gfX1cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gU2Vzc2lvbnMgYWNjb3JkaW9uIC0tPlxyXG4gICAgPG1hdC1hY2NvcmRpb24gY2xhc3M9XCJkLWJsb2NrXCIgKm5nSWY9XCJzZXNzaW9ucy5sZW5ndGhcIj5cclxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgKm5nRm9yPVwibGV0IHNlc3Npb24gb2Ygc2Vzc2lvbnM7IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlTZXNzaW9uSWRcIlxyXG4gICAgICAgIGNsYXNzPVwic2hhZG93LW5vbmUgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBhc3Nlc3NtZW50LXBhbmVsIGJvcmRlciBtYi0yXCIgKG9wZW5lZCk9XCJsb2FkUmVwb3J0KHNlc3Npb24pXCI+XHJcblxyXG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBjbGFzcz1cInByb2N0b3JpbmctcGFuZWwtaGVhZGVyIHAtM1wiPlxyXG4gICAgICAgICAgPG1hdC1wYW5lbC10aXRsZSBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBteS0xIGFsaWduLWl0ZW1zLXN0YXJ0XCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPlxyXG4gICAgICAgICAgICAgIHt7IGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUFJPQ1RPUklORy5SRVBPUlRfU0VTU0lPTiddIH19IHt7IHRvdGFsRWxlbWVudHMgLSBpIH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIG10LTFcIj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNlc3Npb24uc3RhdHVzXCIgY2xhc3M9XCJiYWRnZSByb3VuZGVkLXBpbGwgdGV4dC1jYXBpdGFsaXplIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTBcIiBbbmdDbGFzc109XCJzdGF0dXNCYWRnZUNsYXNzKHNlc3Npb24uc3RhdHVzKVwiPlxyXG4gICAgICAgICAgICAgICAge3sgc2Vzc2lvbi5zdGF0dXMgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzZXNzaW9uPy5pbnRlZ3JpdHlTdW1tYXJ5Py5pbnRlZ3JpdHlGbGFnZ2VkXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2Ugcm91bmRlZC1waWxsIGFzc2Vzc21lbnQtYmctZGFuZ2VyIGFzc2Vzc21lbnQtdGV4dC13aGl0ZSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEwXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBST0NUT1JJTkcuUkVQT1JUX0ZMQUdHRUQnXSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICA8bWF0LXBhbmVsLWRlc2NyaXB0aW9uIGNsYXNzPVwianVzdGlmeS1jb250ZW50LWVuZCBhbGlnbi1pdGVtcy1jZW50ZXIgbWUtM1wiPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInRvTWlsbGlzKHNlc3Npb24uc3RhcnRlZEF0KSBhcyBzdGFydGVkXCIgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMSBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlblwiPlxyXG4gICAgICAgICAgICAgIHt7IHN0YXJ0ZWQgfCBkYXRlOidkZCBNTU0sIEhIOm1tJyB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L21hdC1wYW5lbC1kZXNjcmlwdGlvbj5cclxuICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG5cclxuICAgICAgICA8IS0tIFJlcG9ydCBpcyBmZXRjaGVkIHdoZW4gdGhlIHBhbmVsIG9wZW5zIC0tPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0zIHB0LTFcIiBbbmdTd2l0Y2hdPVwicmVwb3J0U3RhdGVbc2Vzc2lvbi5pZCFdXCI+XHJcblxyXG4gICAgICAgICAgICA8IS0tIExvYWRpbmcgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidsb2FkaW5nJ1wiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBweS0zIGFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXNldmVuXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzcGlubmVyLWJvcmRlciBzcGlubmVyLWJvcmRlci1zbVwiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAge3sgbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QUk9DVE9SSU5HLlJFUE9SVF9MT0FESU5HJ10gfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEVycm9yIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInZXJyb3InXCIgY2xhc3M9XCJweS0zXCI+XHJcbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMyBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyIG1iLTJcIj57eyBsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBST0NUT1JJTkcuUkVQT1JUX0VSUk9SJ10gfX08L3A+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImxvYWRSZXBvcnQoc2Vzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LWJ0bi1wcmltYXJ5LXRyYW5zcGFyZW50IGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEzIHB4LTMgcHktMlwiPlxyXG4gICAgICAgICAgICAgICAge3sgbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QUk9DVE9SSU5HLlJFUE9SVFNfUkVUUlknXSB9fVxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gTm8gcmVwb3J0IHlldCAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2VtcHR5J1wiIGNsYXNzPVwicHktMyBhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlblwiPlxyXG4gICAgICAgICAgICAgIHt7IGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUFJPQ1RPUklORy5SRVBPUlRfRU1QVFknXSB9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gTG9hZGVkIHJlcG9ydCAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2xvYWRlZCdcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVwb3J0QnlTZXNzaW9uW3Nlc3Npb24uaWQhXSBhcyByZXBvcnRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIEludGVncml0eSBzdW1tYXJ5IChyZXBvcnQgdG9wLWxldmVsKSAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZy0yXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTEgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW4gdGV4dC11cHBlcmNhc2UgbWItMVwiPnt7IGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUFJPQ1RPUklORy5SRVBPUlRfSU5URUdSSVRZX1NDT1JFJ10gfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW4gbWItMFwiIFtjbGFzcy5hc3Nlc3NtZW50LXRleHQtZGFuZ2VyXT1cInJlcG9ydC5pbnRlZ3JpdHlGbGFnZ2VkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyByZXBvcnQuaW50ZWdyaXR5U2NvcmUgfX08c3BhbiAqbmdJZj1cInJlcG9ydC5pbnRlZ3JpdHlMZXZlbFwiPiAoe3sgcmVwb3J0LmludGVncml0eUxldmVsIH19KTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIiAqbmdJZj1cInJlcG9ydC5pZGVudGl0eU1hdGNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMSBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlbiB0ZXh0LXVwcGVyY2FzZSBtYi0xXCI+e3sgbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QUk9DVE9SSU5HLlJFUE9SVF9JREVOVElUWV9NQVRDSCddIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuIG1iLTBcIj57eyByZXBvcnQuaWRlbnRpdHlNYXRjaCB9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiAqbmdJZj1cInJlcG9ydC5mYWlsdXJlUmVhc29uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMSBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlbiB0ZXh0LXVwcGVyY2FzZSBtYi0xXCI+e3sgbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QUk9DVE9SSU5HLlJFUE9SVF9GQUlMVVJFX1JFQVNPTiddIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTMgYXNzZXNzbWVudC10ZXh0LWRhbmdlciBtYi0wXCI+e3sgcmVwb3J0LmZhaWx1cmVSZWFzb24gfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldFBhcnNlZFBheWxvYWQocmVwb3J0KSBhcyBwOyBlbHNlIHJhd1BheWxvYWRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gU3VtbWFyeSBtZXRhIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtd3JhcCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgbXQtMyBhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicC5kdXJhdGlvbl9zZWNvbmRzICE9IG51bGxcIj57eyBsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBST0NUT1JJTkcuUkVQT1JUX0RVUkFUSU9OJ10gfX06IHt7IGZvcm1hdER1cmF0aW9uKHAuZHVyYXRpb25fc2Vjb25kcykgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwLnN0YXJ0ZWRfYXRcIj7CtyB7eyBsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBST0NUT1JJTkcuUkVQT1JUX1NUQVJURUQnXSB9fToge3sgcC5zdGFydGVkX2F0IHwgZGF0ZTonZGQgTU1NLCBISDptbTpzcycgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwLmVuZGVkX2F0XCI+wrcge3sgbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QUk9DVE9SSU5HLlJFUE9SVF9FTkRFRCddIH19OiB7eyBwLmVuZGVkX2F0IHwgZGF0ZTonSEg6bW06c3MnIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gUmVhc29ucyAtLT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInAuaW50ZWdyaXR5Py5yZWFzb25zPy5sZW5ndGhcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBnYXAtMiBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgciBvZiBwLmludGVncml0eT8ucmVhc29uczsgdHJhY2tCeTogdHJhY2tCeUluZGV4XCIgY2xhc3M9XCJib3JkZXIgcm91bmRlZCBwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEyIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPnt7IHJlYXNvbkNvZGVMYWJlbChyLmNvZGUpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInIud2VpZ2h0ICE9IG51bGxcIiBjbGFzcz1cImJhZGdlIHJvdW5kZWQtcGlsbCBhc3Nlc3NtZW50LXRleHQtd2hpdGVcIiBbbmdDbGFzc109XCIoci53ZWlnaHQgfHwgMCkgPCAwID8gJ2Fzc2Vzc21lbnQtYmctZGFuZ2VyJyA6ICdhc3Nlc3NtZW50LWJnLXN1Y2Nlc3MnXCI+e3sgKHIud2VpZ2h0IHx8IDApID4gMCA/ICcrJyA6ICcnIH19e3sgci53ZWlnaHQgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW4gbWItMCBtdC0xXCI+e3sgci5kZXRhaWwgfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPCEtLSBTdGF0IHRpbGVzOiBmYWNlIGFuYWx5c2lzIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW4gbXQtMyBtYi0yXCI+e3sgbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QUk9DVE9SSU5HLlJFUE9SVF9BTkFMWVNJUyddIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHJvdy1jb2xzLTIgcm93LWNvbHMtbWQtNCBnLTIgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIHJvdW5kZWQgcC0yIGgtMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTE4IG1iLTFcIj57eyBwLmZhY2VfYW5hbHlzaXM/LmZyYW1lc19jaGVja2VkID8/IDAgfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTEgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW4gbWItMFwiPnt7IGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUFJPQ1RPUklORy5SRVBPUlRfRlJBTUVTJ10gfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIHJvdW5kZWQgcC0yIGgtMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTE4IG1iLTFcIiBbY2xhc3MuYXNzZXNzbWVudC10ZXh0LWRhbmdlcl09XCIocC5mYWNlX2FuYWx5c2lzPy5ub19mYWNlX2ZyYW1lcyB8fCAwKSA+IDBcIj57eyBwLmZhY2VfYW5hbHlzaXM/Lm5vX2ZhY2VfZnJhbWVzID8/IDAgfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTEgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW4gbWItMFwiPnt7IGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUFJPQ1RPUklORy5SRVBPUlRfTk9fRkFDRSddIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkIHAtMiBoLTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xOCBtYi0xXCIgW2NsYXNzLmFzc2Vzc21lbnQtdGV4dC1kYW5nZXJdPVwiKHAuZmFjZV9hbmFseXNpcz8ubXVsdGlfZmFjZV9mcmFtZXMgfHwgMCkgPiAwXCI+e3sgcC5mYWNlX2FuYWx5c2lzPy5tdWx0aV9mYWNlX2ZyYW1lcyA/PyAwIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTExIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXNldmVuIG1iLTBcIj57eyBsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBST0NUT1JJTkcuUkVQT1JUX01VTFRJX0ZBQ0UnXSB9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcm91bmRlZCBwLTIgaC0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTggbWItMVwiIFtjbGFzcy5hc3Nlc3NtZW50LXRleHQtZGFuZ2VyXT1cIihwLmZhY2VfYW5hbHlzaXM/LmltcGVyc29uYXRpb25fZnJhbWVzIHx8IDApID4gMFwiPnt7IHAuZmFjZV9hbmFseXNpcz8uaW1wZXJzb25hdGlvbl9mcmFtZXMgPz8gMCB9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMSBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlbiBtYi0wXCI+e3sgbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QUk9DVE9SSU5HLlJFUE9SVF9JTVBFUlNPTkFUSU9OJ10gfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8IS0tIEFjdGl2aXR5IGJyZWFrZG93biAtLT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInAuYWN0aXZpdHk/LmJ5X3R5cGVcIiBjbGFzcz1cImQtZmxleCBmbGV4LXdyYXAgZ2FwLTIgbXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBpdGVtIG9mIChwLmFjdGl2aXR5Py5ieV90eXBlIHwga2V5dmFsdWUpOyB0cmFja0J5OiB0cmFja0J5SW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJiYWRnZSByb3VuZGVkLXBpbGwgYXNzZXNzbWVudC1iZy1wYWxldHRlLUVERjNGRCBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW4gYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgZXZlbnRUeXBlTGFiZWwoaXRlbS5rZXkpIH19IDxzcGFuIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEyXCI+e3sgaXRlbS52YWx1ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPCEtLSBFdmlkZW5jZSBpbWFnZXMgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwLmV2aWRlbmNlPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW4gbXQtMyBtYi0yXCI+e3sgbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QUk9DVE9SSU5HLlJFUE9SVF9FVklERU5DRSddIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC13cmFwIGdhcC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YSAqbmdGb3I9XCJsZXQgZXYgb2YgcC5ldmlkZW5jZTsgdHJhY2tCeTogdHJhY2tCeUluZGV4XCIgY2xhc3M9XCJ0ZXh0LWNlbnRlciB0ZXh0LWRlY29yYXRpb24tbm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cImV2LmltYWdlX3VybFwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJwcm9jdG9yaW5nLWV2aS1pbWcgcm91bmRlZCBib3JkZXJcIiBbc3JjXT1cImV2LmltYWdlX3VybFwiIFthdHRyLmFsdF09XCInZnJhbWUgJyArIGV2LnNlcVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL3VzZXIuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImQtYmxvY2sgYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTEgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW4gbXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZXYuaXNfcmVmZXJlbmNlXCIgY2xhc3M9XCJiYWRnZSByb3VuZGVkLXBpbGwgYXNzZXNzbWVudC1iZy1wcmltYXJ5LW9uZSBhc3Nlc3NtZW50LXRleHQtd2hpdGUgbWUtMVwiPnt7IGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUFJPQ1RPUklORy5SRVBPUlRfUkVGRVJFTkNFJ10gfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgI3t7IGV2LnNlcSB9fSDCtyB7eyBldi5jYXB0dXJlZF9hdCB8IGRhdGU6J0hIOm1tOnNzJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPCEtLSBUaW1lbGluZSAtLT5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInAudGltZWxpbmU/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlbiBtdC0zIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUFJPQ1RPUklORy5SRVBPUlRfVElNRUxJTkUnXSB9fSAoe3sgcC50aW1lbGluZT8ubGVuZ3RoIH19KVxyXG4gICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvY3RvcmluZy1sb2cgYXNzZXNzbWVudC1iZy1ncmV5LXRlbiBhc3Nlc3NtZW50LXRleHQtZ3JleS1vbmUgZm9udC1tb25vc3BhY2Ugc21hbGwgcm91bmRlZCBwLTMgb3ZlcmZsb3ctYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZXYgb2YgcC50aW1lbGluZTsgdHJhY2tCeTogdHJhY2tCeUluZGV4XCIgY2xhc3M9XCJ0ZXh0LW5vd3JhcFwiIFtjbGFzcy5mdy1zZW1pYm9sZF09XCJpc05vdGV3b3J0aHkoZXYudHlwZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtZ3JleS1maXZlIG1lLTJcIj4je3sgZXYuc2VxIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3MuYXNzZXNzbWVudC10ZXh0LXBhbGV0dGUtQURDOUY2XT1cImlzTm90ZXdvcnRoeShldi50eXBlKVwiPnt7IGV2ZW50VHlwZUxhYmVsKGV2LnR5cGUpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1ncmV5LWZpdmUgbXMtMlwiPnt7IGV2LmF0IHwgZGF0ZTonSEg6bW06c3MnIH19ICh7eyBldi5zb3VyY2UgfX0pPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gRmFsbGJhY2s6IHJhdyBwYXlsb2FkIGlmIGl0IGlzbid0IHBhcnNlYWJsZSBKU09OIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyYXdQYXlsb2FkPlxyXG4gICAgICAgICAgICAgICAgICA8cHJlICpuZ0lmPVwicmVwb3J0LnJlcG9ydFBheWxvYWRcIiBjbGFzcz1cInByb2N0b3JpbmctcGF5bG9hZCBhc3Nlc3NtZW50LWJnLWdyZXktdGVuIGFzc2Vzc21lbnQtdGV4dC1ncmV5LW9uZSBzbWFsbCByb3VuZGVkIHAtMyBvdmVyZmxvdy1hdXRvIG1iLTAgbXQtM1wiPnt7IHJlcG9ydC5yZXBvcnRQYXlsb2FkIH19PC9wcmU+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgPC9tYXQtYWNjb3JkaW9uPlxyXG5cclxuICAgIDwhLS0gTG9hZCBtb3JlIC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cInNlc3Npb25zLmxlbmd0aCAmJiAhbGFzdFwiIGNsYXNzPVwidGV4dC1jZW50ZXIgbXQtM1wiPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwibG9hZE1vcmUoKVwiIFtkaXNhYmxlZF09XCJsb2FkaW5nXCJcclxuICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtYnRuLXByaW1hcnktdHJhbnNwYXJlbnQgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTMgcHgtMyBweS0yIGQtaW5saW5lLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJsb2FkaW5nXCIgY2xhc3M9XCJzcGlubmVyLWJvcmRlciBzcGlubmVyLWJvcmRlci1zbVwiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XHJcbiAgICAgICAge3sgbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QUk9DVE9SSU5HLkxPQURfTU9SRSddIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
@@ -7,8 +7,9 @@ export class OrderByPipe {
7
7
  }
8
8
  return [...array].sort((a, b) => {
9
9
  var _a, _b;
10
- const valA = (_a = a === null || a === void 0 ? void 0 : a[field]) !== null && _a !== void 0 ? _a : 0;
11
- const valB = (_b = b === null || b === void 0 ? void 0 : b[field]) !== null && _b !== void 0 ? _b : 0;
10
+ // objects sort by the given field; primitive arrays (e.g. id lists) sort by value
11
+ const valA = a !== null && typeof a === 'object' ? ((_a = a === null || a === void 0 ? void 0 : a[field]) !== null && _a !== void 0 ? _a : 0) : a;
12
+ const valB = b !== null && typeof b === 'object' ? ((_b = b === null || b === void 0 ? void 0 : b[field]) !== null && _b !== void 0 ? _b : 0) : b;
12
13
  return valA - valB;
13
14
  });
14
15
  }
@@ -22,4 +23,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
22
23
  pure: true
23
24
  }]
24
25
  }] });
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItYnkucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbnMtYXNzZXNzbWVudC9zcmMvbGliL3NoYXJlZC9waXBlcy9vcmRlci1ieS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQU1wRCxNQUFNLE9BQU8sV0FBVztJQUNwQixTQUFTLENBQUMsS0FBK0IsRUFBRSxRQUFnQixTQUFTO1FBQ2hFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3ZCLE9BQU8sS0FBSyxJQUFJLEVBQUUsQ0FBQztTQUN0QjtRQUVELE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxDQUFNLEVBQUUsRUFBRTs7WUFDdEMsTUFBTSxJQUFJLEdBQUcsTUFBQSxDQUFDLGFBQUQsQ0FBQyx1QkFBRCxDQUFDLENBQUcsS0FBSyxDQUFDLG1DQUFJLENBQUMsQ0FBQztZQUM3QixNQUFNLElBQUksR0FBRyxNQUFBLENBQUMsYUFBRCxDQUFDLHVCQUFELENBQUMsQ0FBRyxLQUFLLENBQUMsbUNBQUksQ0FBQyxDQUFDO1lBQzdCLE9BQU8sSUFBSSxHQUFHLElBQUksQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7O3lHQVhRLFdBQVc7dUdBQVgsV0FBVzs0RkFBWCxXQUFXO2tCQUp2QixJQUFJO21CQUFDO29CQUNGLElBQUksRUFBRSxTQUFTO29CQUNmLElBQUksRUFBRSxJQUFJO2lCQUNiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQFBpcGUoe1xyXG4gICAgbmFtZTogJ29yZGVyQnknLFxyXG4gICAgcHVyZTogdHJ1ZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgT3JkZXJCeVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcclxuICAgIHRyYW5zZm9ybShhcnJheTogYW55W10gfCBudWxsIHwgdW5kZWZpbmVkLCBmaWVsZDogc3RyaW5nID0gJ29yZGVyTm8nKTogYW55W10ge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFycmF5IHx8IFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFsuLi5hcnJheV0uc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdmFsQSA9IGE/LltmaWVsZF0gPz8gMDtcclxuICAgICAgICAgICAgY29uc3QgdmFsQiA9IGI/LltmaWVsZF0gPz8gMDtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbEEgLSB2YWxCO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItYnkucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbnMtYXNzZXNzbWVudC9zcmMvbGliL3NoYXJlZC9waXBlcy9vcmRlci1ieS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQU1wRCxNQUFNLE9BQU8sV0FBVztJQUNwQixTQUFTLENBQUMsS0FBK0IsRUFBRSxRQUFnQixTQUFTO1FBQ2hFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3ZCLE9BQU8sS0FBSyxJQUFJLEVBQUUsQ0FBQztTQUN0QjtRQUVELE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxDQUFNLEVBQUUsRUFBRTs7WUFDdEMsa0ZBQWtGO1lBQ2xGLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQUEsQ0FBQyxhQUFELENBQUMsdUJBQUQsQ0FBQyxDQUFHLEtBQUssQ0FBQyxtQ0FBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pFLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQUEsQ0FBQyxhQUFELENBQUMsdUJBQUQsQ0FBQyxDQUFHLEtBQUssQ0FBQyxtQ0FBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pFLE9BQU8sSUFBSSxHQUFHLElBQUksQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7O3lHQVpRLFdBQVc7dUdBQVgsV0FBVzs0RkFBWCxXQUFXO2tCQUp2QixJQUFJO21CQUFDO29CQUNGLElBQUksRUFBRSxTQUFTO29CQUNmLElBQUksRUFBRSxJQUFJO2lCQUNiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQFBpcGUoe1xyXG4gICAgbmFtZTogJ29yZGVyQnknLFxyXG4gICAgcHVyZTogdHJ1ZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgT3JkZXJCeVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcclxuICAgIHRyYW5zZm9ybShhcnJheTogYW55W10gfCBudWxsIHwgdW5kZWZpbmVkLCBmaWVsZDogc3RyaW5nID0gJ29yZGVyTm8nKTogYW55W10ge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFycmF5IHx8IFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFsuLi5hcnJheV0uc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgLy8gb2JqZWN0cyBzb3J0IGJ5IHRoZSBnaXZlbiBmaWVsZDsgcHJpbWl0aXZlIGFycmF5cyAoZS5nLiBpZCBsaXN0cykgc29ydCBieSB2YWx1ZVxyXG4gICAgICAgICAgICBjb25zdCB2YWxBID0gYSAhPT0gbnVsbCAmJiB0eXBlb2YgYSA9PT0gJ29iamVjdCcgPyAoYT8uW2ZpZWxkXSA/PyAwKSA6IGE7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbEIgPSBiICE9PSBudWxsICYmIHR5cGVvZiBiID09PSAnb2JqZWN0JyA/IChiPy5bZmllbGRdID8/IDApIDogYjtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbEEgLSB2YWxCO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==