bways-report 0.1.4 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/core/services/index.mjs +2 -1
- package/esm2022/lib/core/services/report-storage.service.mjs +63 -0
- package/esm2022/lib/core/tokens/index.mjs +2 -1
- package/esm2022/lib/core/tokens/storage.token.mjs +128 -0
- package/esm2022/lib/data-access/adapters/local-storage-persistence.adapter.mjs +16 -44
- package/esm2022/lib/features/designer/components/component-palette/component-palette.component.mjs +3 -371
- package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +3 -1015
- package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +3 -679
- package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +3 -947
- package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +3 -549
- package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +10 -6
- package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +3 -421
- package/fesm2022/bways-report.mjs +1288 -5091
- package/fesm2022/bways-report.mjs.map +1 -1
- package/lib/core/services/index.d.ts +1 -0
- package/lib/core/services/report-storage.service.d.ts +26 -0
- package/lib/core/tokens/index.d.ts +2 -0
- package/lib/core/tokens/storage.token.d.ts +48 -0
- package/lib/data-access/adapters/local-storage-persistence.adapter.d.ts +1 -0
- package/lib/features/runtime/report-grid-bridge.component.d.ts +1 -0
- package/package.json +9 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, Component, computed, Directive, effect, inject, input, output, signal, ViewContainerRef, } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import { GRID_COMPONENT } from '../../core/tokens/reporting-config.token';
|
|
4
|
+
import { ReportStorageService } from '../../core/services/report-storage.service';
|
|
4
5
|
import { RptIconComponent } from '../../primitives/components/icon/rpt-icon.component';
|
|
5
6
|
import { humanizeIdentifier } from '../../core/utils/identifier-humanizer';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
@@ -106,15 +107,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
106
107
|
}], ctorParameters: () => [] });
|
|
107
108
|
export class ReportGridBridgeComponent {
|
|
108
109
|
injectedGrid = inject(GRID_COMPONENT, { optional: true });
|
|
110
|
+
storage = inject(ReportStorageService, { optional: true });
|
|
109
111
|
constructor() {
|
|
110
|
-
if (
|
|
112
|
+
if (this.storage) {
|
|
111
113
|
try {
|
|
112
|
-
const
|
|
113
|
-
if (
|
|
114
|
-
|
|
114
|
+
const legacyDefault = this.storage.getItem('bways_grid_report_state_default');
|
|
115
|
+
if (legacyDefault && !legacyDefault.includes('_version_')) {
|
|
116
|
+
this.storage.removeItem('bways_grid_report_state_default');
|
|
115
117
|
}
|
|
116
118
|
}
|
|
117
|
-
catch
|
|
119
|
+
catch {
|
|
120
|
+
// Silently ignore restricted storage environments (e.g. sandboxed iframes)
|
|
121
|
+
}
|
|
118
122
|
}
|
|
119
123
|
}
|
|
120
124
|
gridDefinition = input.required();
|
|
@@ -799,4 +803,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
799
803
|
</div>
|
|
800
804
|
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;width:100%;margin-top:16px;font-family:var(--rpt-font-family, inherit)}.rpt-grid-container{width:100%;min-height:480px;display:flex;flex-direction:column}:host ::ng-deep bways-grid{display:block;width:100%;height:480px;min-height:480px;--ug-footer-bg: var(--rpt-color-surface, #f8fafc);--ug-footer-color: var(--rpt-color-text-secondary, #334155);--ug-header-color: var(--rpt-color-text, #0f172a);--ug-border-color: var(--rpt-color-border, #cbd5e1);--ug-font-family: var(--rpt-font-family, inherit);--ug-font-size: var(--rpt-font-size-sm, .75rem);--ug-header-font-weight: 600}:host ::ng-deep .ug-wrapper{height:100%!important;min-height:480px!important}:host ::ng-deep .ug-viewport{min-height:350px!important}:host ::ng-deep .ug-bottom-bar,:host ::ng-deep ug-pagination{background-color:var(--rpt-color-surface, #f8fafc)!important;border-top:1px solid var(--rpt-color-border, #cbd5e1)!important;color:var(--rpt-color-text-muted, #64748b)!important;font-family:var(--rpt-font-family, inherit)!important;font-size:var(--rpt-font-size-sm, .75rem)!important}:host ::ng-deep .ug-status-bar-content,:host ::ng-deep .ug-pagination-info,:host ::ng-deep .ug-page-info{font-family:var(--rpt-font-family, inherit)!important;font-size:var(--rpt-font-size-sm, .75rem)!important;font-weight:500!important;color:var(--rpt-color-text-muted, #64748b)!important;font-variant-numeric:tabular-nums!important}:host ::ng-deep .ug-page-size{font-family:var(--rpt-font-family, inherit)!important;font-size:var(--rpt-font-size-sm, .75rem)!important;font-weight:500!important;color:var(--rpt-color-text-muted, #64748b)!important}:host ::ng-deep .ug-page-size select{font-family:var(--rpt-font-family, inherit)!important;font-size:var(--rpt-font-size-sm, .75rem)!important;color:var(--rpt-color-text, #0f172a)!important;border-color:var(--rpt-color-border, #cbd5e1)!important;background-color:var(--rpt-color-surface, #ffffff)!important;border-radius:var(--rpt-border-radius-sm, 4px)!important}:host ::ng-deep .ug-total-row{background-color:var(--rpt-color-surface, #f8fafc)!important;border-top:1px solid var(--rpt-color-border, #cbd5e1)!important;border-bottom:2px solid var(--rpt-color-border, #cbd5e1)!important;font-family:var(--rpt-font-family, inherit)!important;font-size:var(--rpt-font-size-sm, .75rem)!important;font-weight:600!important;color:var(--rpt-color-text, #0f172a)!important;font-variant-numeric:tabular-nums!important}:host ::ng-deep .ug-total-row-label{font-family:var(--rpt-font-family, inherit)!important;font-size:var(--rpt-font-size-xs, .6875rem)!important;font-weight:600!important;text-transform:uppercase!important;letter-spacing:.05em!important;color:var(--rpt-color-text-muted, #64748b)!important;background-color:var(--rpt-color-surface, #f8fafc)!important}:host ::ng-deep .ug-total-cell{font-family:var(--rpt-font-family, inherit)!important;font-size:var(--rpt-font-size-sm, .75rem)!important;font-weight:600!important;color:var(--rpt-color-text, #0f172a)!important;font-variant-numeric:tabular-nums!important}.rpt-table-card{background:var(--rpt-color-bg, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius-lg, 8px);box-shadow:var(--rpt-box-shadow, 0 1px 3px rgba(0, 0, 0, .05));overflow:hidden}.rpt-table-toolbar{padding:12px 16px;background-color:var(--rpt-color-surface, #f8fafc);border-bottom:1px solid var(--rpt-color-border, #cbd5e1);display:flex;align-items:center;justify-content:space-between}.rpt-table-title{font-size:var(--rpt-font-size-sm, .75rem);font-weight:600;color:var(--rpt-color-text-muted, #64748b);text-transform:uppercase;letter-spacing:.05em}.rpt-table-responsive{width:100%;overflow-x:auto}.rpt-table{width:100%;border-collapse:collapse;font-size:var(--rpt-font-size-base, .875rem);text-align:left}.rpt-th{background-color:var(--rpt-color-surface, #f8fafc);padding:10px 14px;font-weight:600;font-size:var(--rpt-font-size-sm, .75rem);color:var(--rpt-color-text-muted, #475569);border-bottom:1px solid var(--rpt-color-border, #cbd5e1);white-space:nowrap;-webkit-user-select:none;user-select:none}.rpt-th.sortable{cursor:pointer}.rpt-th.sortable:hover{background-color:var(--rpt-color-surface-hover, #f1f5f9)}.rpt-th-content{display:flex;align-items:center;gap:4px}.rpt-sort-indicator{display:inline-flex;align-items:center;color:var(--rpt-color-primary, #2563eb)}.rpt-th-num,.rpt-td-num{width:48px;text-align:center;color:var(--rpt-color-text-muted, #94a3b8);font-size:var(--rpt-font-size-sm, .75rem)}.rpt-th-cb,.rpt-td-cb{width:42px;min-width:42px;max-width:42px;text-align:center;padding:8px 10px}.rpt-checkbox{width:15px;height:15px;cursor:pointer;accent-color:var(--rpt-color-primary, #2563eb);border-radius:4px;vertical-align:middle;margin:0}.rpt-td{padding:10px 14px;border-bottom:1px solid var(--rpt-color-border, #e2e8f0);color:var(--rpt-color-text, #1e293b)}.rpt-tr:hover{background-color:var(--rpt-color-surface-hover, #f8fafc)}.rpt-tr.is-selected{background-color:#eff6ff}.rpt-tr.is-selected:hover{background-color:#dbeafe}.rpt-tr.is-clickable{cursor:pointer}.rpt-tr.is-clickable:hover{background-color:#f1f5f9}.rpt-td.is-clickable-cell{cursor:pointer}.rpt-cell-action-link{color:var(--rpt-color-primary, #2563eb);font-weight:600;text-decoration:underline;text-underline-offset:2px;cursor:pointer;transition:color .15s ease}.rpt-cell-action-link:hover{color:var(--rpt-color-primary-hover, #1d4ed8)}.rpt-empty-message{text-align:center;padding:40px 20px;color:var(--rpt-color-text-muted, #94a3b8);font-style:italic}.rpt-tfoot-row{background-color:var(--rpt-color-surface, #f8fafc);border-top:1px solid var(--rpt-color-border, #cbd5e1);border-bottom:2px solid var(--rpt-color-border, #cbd5e1)}.rpt-td-aggregate{padding:8px 14px;color:var(--rpt-color-text, #0f172a);font-size:var(--rpt-font-size-sm, .75rem);line-height:1.4}.rpt-aggregate-wrap{display:inline-flex;align-items:baseline;gap:6px}.rpt-aggregate-wrap.is-right{justify-content:flex-end;width:100%}.rpt-aggregate-wrap.is-center{justify-content:center;width:100%}.rpt-aggregate-label{font-size:var(--rpt-font-size-xs, .6875rem);font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--rpt-color-text-muted, #64748b)}.rpt-aggregate-value{font-size:var(--rpt-font-size-sm, .75rem);font-weight:600;color:var(--rpt-color-text, #0f172a);font-variant-numeric:tabular-nums;font-feature-settings:\"tnum\"}.rpt-pagination-bar{display:flex;justify-content:space-between;align-items:center;padding:10px 16px;border-top:1px solid var(--rpt-color-border-subtle, #e2e8f0);background-color:var(--rpt-color-surface, #f8fafc)}.rpt-page-info{font-size:var(--rpt-font-size-sm, .75rem);font-weight:500;color:var(--rpt-color-text-muted, #64748b);font-variant-numeric:tabular-nums}.rpt-page-buttons{display:flex;gap:8px}.rpt-page-btn{display:inline-flex;align-items:center;gap:5px;padding:4px 10px;font-size:var(--rpt-font-size-sm, .75rem);font-weight:500;color:var(--rpt-color-text-secondary, #334155);background-color:var(--rpt-color-surface, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius-sm, 4px);cursor:pointer;transition:all var(--rpt-transition-speed, .15s) ease}.rpt-page-btn:hover:not(:disabled){background-color:var(--rpt-color-surface-hover, #f1f5f9);border-color:var(--rpt-color-border-hover, #94a3b8);color:var(--rpt-color-text, #0f172a)}.rpt-page-btn:disabled{opacity:.5;cursor:not-allowed}\n"] }]
|
|
801
805
|
}], ctorParameters: () => [] });
|
|
802
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWdyaWQtYnJpZGdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2ZlYXR1cmVzL3J1bnRpbWUvcmVwb3J0LWdyaWQtYnJpZGdlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxRQUFRLEVBQ1IsU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFDTixNQUFNLEVBRU4sZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDdkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7O0FBTTNFLE1BQU0sT0FBTyxzQkFBc0I7SUFDaEIsR0FBRyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sR0FBNkIsSUFBSSxDQUFDO0lBQ3pDLElBQUksR0FBbUIsRUFBRSxDQUFDO0lBRXpCLGFBQWEsR0FBRyxLQUFLLENBQW1CLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLE1BQU0sR0FBRyxLQUFLLENBQTBCLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLGVBQWUsR0FBRyxNQUFNLEVBQU8sQ0FBQztJQUNoQyxnQkFBZ0IsR0FBRyxNQUFNLEVBQU8sQ0FBQztJQUNqQyxRQUFRLEdBQUcsTUFBTSxFQUErRCxDQUFDO0lBQ2pGLGVBQWUsR0FBRyxNQUFNLEVBQVMsQ0FBQztJQUUzQztRQUNFLE1BQU0sQ0FBQyxH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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0tULG1CQW1TZ0IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbXBvbmVudFJlZixcbiAgY29tcHV0ZWQsXG4gIERpcmVjdGl2ZSxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBPbkRlc3Ryb3ksXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxuICBUeXBlLFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEdSSURfQ09NUE9ORU5UIH0gZnJvbSAnLi4vLi4vY29yZS90b2tlbnMvcmVwb3J0aW5nLWNvbmZpZy50b2tlbic7XG5pbXBvcnQgeyBHcmlkQ29sdW1uRGVmaW5pdGlvbiwgUmVwb3J0R3JpZERlZmluaXRpb24gfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9yZXBvcnQtZ3JpZC5tb2RlbCc7XG5pbXBvcnQgeyBScHRJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcHJpbWl0aXZlcy9jb21wb25lbnRzL2ljb24vcnB0LWljb24uY29tcG9uZW50JztcbmltcG9ydCB7IGh1bWFuaXplSWRlbnRpZmllciB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvaWRlbnRpZmllci1odW1hbml6ZXInO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbcnB0R3JpZE91dGxldF0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBScHRHcmlkT3V0bGV0RGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSB2Y3IgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG4gIHByaXZhdGUgY29tcFJlZjogQ29tcG9uZW50UmVmPGFueT4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gIHJlYWRvbmx5IGNvbXBvbmVudFR5cGUgPSBpbnB1dDxUeXBlPGFueT4gfCBudWxsPihudWxsLCB7IGFsaWFzOiAncnB0R3JpZE91dGxldCcgfSk7XG4gIHJlYWRvbmx5IGlucHV0cyA9IGlucHV0PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih7fSk7XG4gIHJlYWRvbmx5IGdyaWRTdGF0ZUNoYW5nZSA9IG91dHB1dDxhbnk+KCk7XG4gIHJlYWRvbmx5IGNvbHVtbkRlZnNDaGFuZ2UgPSBvdXRwdXQ8YW55PigpO1xuICByZWFkb25seSByb3dDbGljayA9IG91dHB1dDx7IHJvdzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47IGNvbHVtbj86IGFueTsgZXZlbnQ/OiBhbnkgfT4oKTtcbiAgcmVhZG9ubHkgc2VsZWN0aW9uQ2hhbmdlID0gb3V0cHV0PGFueVtdPigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCB0eXBlID0gdGhpcy5jb21wb25lbnRUeXBlKCk7XG4gICAgICB0aGlzLnJlY3JlYXRlQ29tcG9uZW50KHR5cGUpO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRJbnB1dHMgPSB0aGlzLmlucHV0cygpO1xuICAgICAgaWYgKHRoaXMuY29tcFJlZikge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhjdXJyZW50SW5wdXRzKSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmNvbXBSZWYuc2V0SW5wdXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlY3JlYXRlQ29tcG9uZW50KHR5cGU6IFR5cGU8YW55PiB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyKCk7XG4gICAgaWYgKCF0eXBlKSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5jb21wUmVmID0gdGhpcy52Y3IuY3JlYXRlQ29tcG9uZW50KHR5cGUpO1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmNvbXBSZWYuaW5zdGFuY2UgYXMgYW55O1xuXG4gICAgICBpZiAoaW5zdGFuY2UuZ3JpZFN0YXRlQ2hhbmdlZCAmJiB0eXBlb2YgaW5zdGFuY2UuZ3JpZFN0YXRlQ2hhbmdlZC5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2goXG4gICAgICAgICAgaW5zdGFuY2UuZ3JpZFN0YXRlQ2hhbmdlZC5zdWJzY3JpYmUoKHN0YXRlOiBhbnkpID0+IHRoaXMuZ3JpZFN0YXRlQ2hhbmdlLmVtaXQoc3RhdGUpKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGluc3RhbmNlLnJlcG9ydFN0YXRlQ2hhbmdlICYmIHR5cGVvZiBpbnN0YW5jZS5yZXBvcnRTdGF0ZUNoYW5nZS5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2goXG4gICAgICAgICAgaW5zdGFuY2UucmVwb3J0U3RhdGVDaGFuZ2Uuc3Vic2NyaWJlKChzdGF0ZTogYW55KSA9PiB0aGlzLmdyaWRTdGF0ZUNoYW5nZS5lbWl0KHN0YXRlKSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChpbnN0YW5jZS5jb2x1bW5EZWZzQ2hhbmdlZCAmJiB0eXBlb2YgaW5zdGFuY2UuY29sdW1uRGVmc0NoYW5nZWQuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuc3Vicy5wdXNoKFxuICAgICAgICAgIGluc3RhbmNlLmNvbHVtbkRlZnNDaGFuZ2VkLnN1YnNjcmliZSgoZGVmczogYW55KSA9PiB0aGlzLmNvbHVtbkRlZnNDaGFuZ2UuZW1pdChkZWZzKSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZW1pdFJvdyA9IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgcm93ID0gZGF0YT8uZGF0YSA/PyBkYXRhPy5yb3cgPz8gZGF0YTtcbiAgICAgICAgY29uc3QgY29sID0gZGF0YT8uY29sRGVmID8/IGRhdGE/LmNvbHVtbjtcbiAgICAgICAgdGhpcy5yb3dDbGljay5lbWl0KHsgcm93LCBjb2x1bW46IGNvbCwgZXZlbnQ6IGRhdGE/LmV2ZW50IH0pO1xuICAgICAgfTtcblxuICAgICAgaWYgKGluc3RhbmNlLnJvd0NsaWNrZWQgJiYgdHlwZW9mIGluc3RhbmNlLnJvd0NsaWNrZWQuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuc3Vicy5wdXNoKGluc3RhbmNlLnJvd0NsaWNrZWQuc3Vic2NyaWJlKGVtaXRSb3cpKTtcbiAgICAgIH0gZWxzZSBpZiAoaW5zdGFuY2Uucm93Q2xpY2sgJiYgdHlwZW9mIGluc3RhbmNlLnJvd0NsaWNrLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChpbnN0YW5jZS5yb3dDbGljay5zdWJzY3JpYmUoZW1pdFJvdykpO1xuICAgICAgfSBlbHNlIGlmIChpbnN0YW5jZS5jZWxsQ2xpY2tlZCAmJiB0eXBlb2YgaW5zdGFuY2UuY2VsbENsaWNrZWQuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuc3Vicy5wdXNoKGluc3RhbmNlLmNlbGxDbGlja2VkLnN1YnNjcmliZShlbWl0Um93KSk7XG4gICAgICB9IGVsc2UgaWYgKGluc3RhbmNlLmNlbGxDbGljayAmJiB0eXBlb2YgaW5zdGFuY2UuY2VsbENsaWNrLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChpbnN0YW5jZS5jZWxsQ2xpY2suc3Vic2NyaWJlKGVtaXRSb3cpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGluc3RhbmNlLnNlbGVjdGlvbkNoYW5nZWQgJiYgdHlwZW9mIGluc3RhbmNlLnNlbGVjdGlvbkNoYW5nZWQuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuc3Vicy5wdXNoKFxuICAgICAgICAgIGluc3RhbmNlLnNlbGVjdGlvbkNoYW5nZWQuc3Vic2NyaWJlKChzZWxlY3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93cyA9IEFycmF5LmlzQXJyYXkoc2VsZWN0aW9uKSA/IHNlbGVjdGlvbiA6IChzZWxlY3Rpb24gPyBbc2VsZWN0aW9uXSA6IFtdKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQocm93cyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VycmVudElucHV0cyA9IHRoaXMuaW5wdXRzKCk7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhjdXJyZW50SW5wdXRzKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuY29tcFJlZi5zZXRJbnB1dChrZXksIHZhbHVlKTtcbiAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS53YXJuKCdbUnB0R3JpZE91dGxldERpcmVjdGl2ZV0gRmFpbGVkIHRvIGNyZWF0ZSBjdXN0b20gZ3JpZCBjb21wb25lbnQ6JywgZXJyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuc3Vicy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgIHRoaXMuc3VicyA9IFtdO1xuICAgIGlmICh0aGlzLmNvbXBSZWYpIHtcbiAgICAgIHRoaXMuY29tcFJlZi5kZXN0cm95KCk7XG4gICAgICB0aGlzLmNvbXBSZWYgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnZjci5jbGVhcigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhcigpO1xuICB9XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JwdC1ncmlkLWJyaWRnZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJwdEljb25Db21wb25lbnQsIFJwdEdyaWRPdXRsZXREaXJlY3RpdmVdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJycHQtZ3JpZC1jb250YWluZXJcIj5cbiAgICAgIEBpZiAoY3VzdG9tR3JpZENvbXBvbmVudCgpKSB7XG4gICAgICAgIDwhLS0gSG9zdC1wcm92aWRlZCBncmlkIGNvbXBvbmVudCAoZS5nLiBCV2F5cy1ncmlkIFVsdHJhR3JpZENvbXBvbmVudCkgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICBbcnB0R3JpZE91dGxldF09XCJjdXN0b21HcmlkQ29tcG9uZW50KClcIlxuICAgICAgICAgIFtpbnB1dHNdPVwiZ3JpZElucHV0cygpXCJcbiAgICAgICAgICAoZ3JpZFN0YXRlQ2hhbmdlKT1cImdyaWRTdGF0ZUNoYW5nZS5lbWl0KCRldmVudClcIlxuICAgICAgICAgIChjb2x1bW5EZWZzQ2hhbmdlKT1cImNvbHVtbkRlZnNDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAocm93Q2xpY2spPVwicm93Q2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAvPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDwhLS0gQnVpbHQtaW4gZmFsbGJhY2sgdGFibGUgd2hlbiBubyBleHRlcm5hbCBncmlkIGlzIHByb3ZpZGVkIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXRhYmxlLWNhcmRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXRhYmxlLXRvb2xiYXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LXRhYmxlLXRpdGxlXCI+UmVzdWx0cyAoe3sgZGF0YSgpLmxlbmd0aCB9fSByb3dzKTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtdGFibGUtcmVzcG9uc2l2ZVwiPlxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwicnB0LXRhYmxlXCI+XG4gICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICBAaWYgKHNob3dSb3dOdW1iZXJzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwicnB0LXRoIHJwdC10aC1udW1cIj4jPC90aD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBpZiAoaXNTZWxlY3Rpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwicnB0LXRoIHJwdC10aC1jYlwiPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZWZmZWN0aXZlUm93U2VsZWN0aW9uKCkgIT09ICdzaW5nbGUnICYmIGlzSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJwdC1jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQWxsU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cImlzUGFydGlhbGx5U2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIlNlbGVjdCBhbGwgcm93c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbCBvZiB2aXNpYmxlQ29sdW1ucygpOyB0cmFjayBjb2wuZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtdGhcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2wud2lkdGggfHwgJ2F1dG8nXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUudGV4dC1hbGlnbl09XCJjb2wuYWxpZ24gfHwgJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc29ydGFibGVdPVwiY29sLnNvcnRhYmxlICE9PSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNvcnQoY29sKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXRoLWNvbnRlbnRcIiBbc3R5bGUuanVzdGlmeS1jb250ZW50XT1cImdldEp1c3RpZnlDb250ZW50KGNvbC5hbGlnbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGNvbC5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoY29sLnNvcnRhYmxlICE9PSBmYWxzZSAmJiBzb3J0Q29sdW1uKCkgPT09IGNvbC5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1zb3J0LWluZGljYXRvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBbbmFtZV09XCJzb3J0RGlyZWN0aW9uKCkgPT09ICdhc2MnID8gJ2NoZXZyb24tdXAnIDogJ2NoZXZyb24tZG93bidcIiBbc2l6ZV09XCIxMlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgQGlmIChwYWdpbmF0ZWREYXRhKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cImNvbFNwYW4oKVwiIGNsYXNzPVwicnB0LWVtcHR5LW1lc3NhZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICBObyBkYXRhIGZvdW5kIG1hdGNoaW5nIGNyaXRlcmlhXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgQGZvciAocm93IG9mIHBhZ2luYXRlZERhdGEoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LXRyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtY2xpY2thYmxlXT1cImhhc1Jvd0NsaWNrQWN0aW9uKCkgfHwgaXNTZWxlY3Rpb25FbmFibGVkKClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1zZWxlY3RlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKHNob3dSb3dOdW1iZXJzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInJwdC10ZCBycHQtdGQtbnVtXCI+e3sgKGN1cnJlbnRQYWdlKCkgLSAxKSAqIHBhZ2VTaXplKCkgKyAkaW5kZXggKyAxIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChpc1NlbGVjdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwicnB0LXRkIHJwdC10ZC1jYlwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiZWZmZWN0aXZlUm93U2VsZWN0aW9uKCkgPT09ICdzaW5nbGUnID8gJ3JhZGlvJyA6ICdjaGVja2JveCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJycHQtZmFsbGJhY2stc2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJwdC1jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNSb3dTZWxlY3RlZChyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVJvd1NlbGVjdGlvbihyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgQGZvciAoY29sIG9mIHZpc2libGVDb2x1bW5zKCk7IHRyYWNrIGNvbC5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LXRkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnRleHQtYWxpZ25dPVwiY29sLmFsaWduIHx8ICdsZWZ0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1jbGlja2FibGUtY2VsbF09XCIhIWNvbC5hY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DZWxsQ2xpY2socm93LCBjb2wsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbC5hY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1jZWxsLWFjdGlvbi1saW5rXCI+e3sgZm9ybWF0VmFsdWUocm93W2NvbC5maWVsZF0sIGNvbCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdFZhbHVlKHJvd1tjb2wuZmllbGRdLCBjb2wpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgQGlmIChoYXNBZ2dyZWdhdGVzKCkpIHtcbiAgICAgICAgICAgICAgICA8dGZvb3Q+XG4gICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJycHQtdGZvb3Qtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd1Jvd051bWJlcnMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInJwdC10ZC1udW1cIj48L3RkPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoaXNTZWxlY3Rpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJycHQtdGQtY2JcIj48L3RkPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbCBvZiB2aXNpYmxlQ29sdW1ucygpOyB0cmFjayBjb2wuZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJycHQtdGQtYWdncmVnYXRlXCIgW3N0eWxlLnRleHQtYWxpZ25dPVwiY29sLmFsaWduIHx8ICdsZWZ0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChjb2wuYWdncmVnYXRlICYmIGNvbC5hZ2dyZWdhdGUgIT09ICdub25lJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWFnZ3JlZ2F0ZS13cmFwXCIgW2NsYXNzLmlzLXJpZ2h0XT1cImNvbC5hbGlnbiA9PT0gJ3JpZ2h0J1wiIFtjbGFzcy5pcy1jZW50ZXJdPVwiY29sLmFsaWduID09PSAnY2VudGVyJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LWFnZ3JlZ2F0ZS1sYWJlbFwiPnt7IGNvbC5hZ2dyZWdhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtYWdncmVnYXRlLXZhbHVlXCI+e3sgY29tcHV0ZUFnZ3JlZ2F0ZShjb2wpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvdGZvb3Q+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICBAaWYgKGlzUGFnaW5hdGlvbkVuYWJsZWQoKSAmJiB0b3RhbFBhZ2VzKCkgPiAxKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXBhZ2luYXRpb24tYmFyXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LXBhZ2UtaW5mb1wiPlxuICAgICAgICAgICAgICAgIFBhZ2Uge3sgY3VycmVudFBhZ2UoKSB9fSBvZiB7eyB0b3RhbFBhZ2VzKCkgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXBhZ2UtYnV0dG9uc1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtcGFnZS1idG5cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlKCkgPT09IDFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInByZXZQYWdlKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiYXJyb3ctbGVmdFwiIFtzaXplXT1cIjEyXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPlByZXZpb3VzPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtcGFnZS1idG5cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlKCkgPT09IHRvdGFsUGFnZXMoKVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwibmV4dFBhZ2UoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+TmV4dDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiYXJyb3ctcmlnaHRcIiBbc2l6ZV09XCIxMlwiIC8+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtYXJnaW4tdG9wOiAxNnB4O1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCk7XG4gICAgfVxuICAgIC5ycHQtZ3JpZC1jb250YWluZXIge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtaW4taGVpZ2h0OiA0ODBweDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIH1cbiAgICA6aG9zdCA6Om5nLWRlZXAgYndheXMtZ3JpZCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiA0ODBweDtcbiAgICAgIG1pbi1oZWlnaHQ6IDQ4MHB4O1xuICAgICAgLS11Zy1mb290ZXItYmc6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKTtcbiAgICAgIC0tdWctZm9vdGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1zZWNvbmRhcnksICMzMzQxNTUpO1xuICAgICAgLS11Zy1oZWFkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIC0tdWctYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIC0tdWctZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCk7XG4gICAgICAtLXVnLWZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgICAtLXVnLWhlYWRlci1mb250LXdlaWdodDogNjAwO1xuICAgIH1cbiAgICA6aG9zdCA6Om5nLWRlZXAgLnVnLXdyYXBwZXIge1xuICAgICAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgICBtaW4taGVpZ2h0OiA0ODBweCAhaW1wb3J0YW50O1xuICAgIH1cbiAgICA6aG9zdCA6Om5nLWRlZXAgLnVnLXZpZXdwb3J0IHtcbiAgICAgIG1pbi1oZWlnaHQ6IDM1MHB4ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIDpob3N0IDo6bmctZGVlcCAudWctYm90dG9tLWJhcixcbiAgICA6aG9zdCA6Om5nLWRlZXAgdWctcGFnaW5hdGlvbiB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2Y4ZmFmYykgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKSAhaW1wb3J0YW50O1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKSAhaW1wb3J0YW50O1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSkgIWltcG9ydGFudDtcbiAgICB9XG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy1zdGF0dXMtYmFyLWNvbnRlbnQsXG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy1wYWdpbmF0aW9uLWluZm8sXG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy1wYWdlLWluZm8ge1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDAgIWltcG9ydGFudDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4YikgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXMgIWltcG9ydGFudDtcbiAgICB9XG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy1wYWdlLXNpemUge1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDAgIWltcG9ydGFudDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4YikgIWltcG9ydGFudDtcbiAgICB9XG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy1wYWdlLXNpemUgc2VsZWN0IHtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pICFpbXBvcnRhbnQ7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpICFpbXBvcnRhbnQ7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpICFpbXBvcnRhbnQ7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2ZmZmZmZikgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLXNtLCA0cHgpICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIDpob3N0IDo6bmctZGVlcCAudWctdG90YWwtcm93IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKSAhaW1wb3J0YW50O1xuICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpICFpbXBvcnRhbnQ7XG4gICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXdlaWdodDogNjAwICFpbXBvcnRhbnQ7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIDpob3N0IDo6bmctZGVlcCAudWctdG90YWwtcm93LWxhYmVsIHtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUteHMsIDAuNjg3NXJlbSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2UgIWltcG9ydGFudDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA1ZW0gIWltcG9ydGFudDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4YikgIWltcG9ydGFudDtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKSAhaW1wb3J0YW50O1xuICAgIH1cbiAgICA6aG9zdCA6Om5nLWRlZXAgLnVnLXRvdGFsLWNlbGwge1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXMgIWltcG9ydGFudDtcbiAgICB9XG4gICAgLnJwdC10YWJsZS1jYXJkIHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1iZywgI2ZmZmZmZik7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLWxnLCA4cHgpO1xuICAgICAgYm94LXNoYWRvdzogdmFyKC0tcnB0LWJveC1zaGFkb3csIDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMDUpKTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgfVxuICAgIC5ycHQtdGFibGUtdG9vbGJhciB7XG4gICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2Y4ZmFmYyk7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICB9XG4gICAgLnJwdC10YWJsZS10aXRsZSB7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcbiAgICB9XG4gICAgLnJwdC10YWJsZS1yZXNwb25zaXZlIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICB9XG4gICAgLnJwdC10YWJsZSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtYmFzZSwgMC44NzVyZW0pO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICB9XG4gICAgLnJwdC10aCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2Y4ZmFmYyk7XG4gICAgICBwYWRkaW5nOiAxMHB4IDE0cHg7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzQ3NTU2OSk7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgfVxuICAgIC5ycHQtdGguc29ydGFibGUge1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIH1cbiAgICAucnB0LXRoLnNvcnRhYmxlOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLWhvdmVyLCAjZjFmNWY5KTtcbiAgICB9XG4gICAgLnJwdC10aC1jb250ZW50IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA0cHg7XG4gICAgfVxuICAgIC5ycHQtc29ydC1pbmRpY2F0b3Ige1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICB9XG4gICAgLnJwdC10aC1udW0sIC5ycHQtdGQtbnVtIHtcbiAgICAgIHdpZHRoOiA0OHB4O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjOTRhM2I4KTtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgfVxuICAgIC5ycHQtdGgtY2IsIC5ycHQtdGQtY2Ige1xuICAgICAgd2lkdGg6IDQycHg7XG4gICAgICBtaW4td2lkdGg6IDQycHg7XG4gICAgICBtYXgtd2lkdGg6IDQycHg7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBwYWRkaW5nOiA4cHggMTBweDtcbiAgICB9XG4gICAgLnJwdC1jaGVja2JveCB7XG4gICAgICB3aWR0aDogMTVweDtcbiAgICAgIGhlaWdodDogMTVweDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGFjY2VudC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgIG1hcmdpbjogMDtcbiAgICB9XG4gICAgLnJwdC10ZCB7XG4gICAgICBwYWRkaW5nOiAxMHB4IDE0cHg7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2UyZThmMCk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMxZTI5M2IpO1xuICAgIH1cbiAgICAucnB0LXRyOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLWhvdmVyLCAjZjhmYWZjKTtcbiAgICB9XG4gICAgLnJwdC10ci5pcy1zZWxlY3RlZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWZmNmZmO1xuICAgIH1cbiAgICAucnB0LXRyLmlzLXNlbGVjdGVkOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNkYmVhZmU7XG4gICAgfVxuICAgIC5ycHQtdHIuaXMtY2xpY2thYmxlIHtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG4gICAgLnJwdC10ci5pcy1jbGlja2FibGU6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjVmOTtcbiAgICB9XG4gICAgLnJwdC10ZC5pcy1jbGlja2FibGUtY2VsbCB7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuICAgIC5ycHQtY2VsbC1hY3Rpb24tbGluayB7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgICAgdGV4dC11bmRlcmxpbmUtb2Zmc2V0OiAycHg7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiBjb2xvciAxNTBtcyBlYXNlO1xuICAgIH1cbiAgICAucnB0LWNlbGwtYWN0aW9uLWxpbms6aG92ZXIge1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LWhvdmVyLCAjMWQ0ZWQ4KTtcbiAgICB9XG4gICAgLnJwdC1lbXB0eS1tZXNzYWdlIHtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIHBhZGRpbmc6IDQwcHggMjBweDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzk0YTNiOCk7XG4gICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgfVxuICAgIC5ycHQtdGZvb3Qtcm93IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKTtcbiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICB9XG4gICAgLnJwdC10ZC1hZ2dyZWdhdGUge1xuICAgICAgcGFkZGluZzogOHB4IDE0cHg7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gICAgfVxuICAgIC5ycHQtYWdncmVnYXRlLXdyYXAge1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7XG4gICAgICBnYXA6IDZweDtcbiAgICB9XG4gICAgLnJwdC1hZ2dyZWdhdGUtd3JhcC5pcy1yaWdodCB7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuICAgIC5ycHQtYWdncmVnYXRlLXdyYXAuaXMtY2VudGVyIHtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuICAgIC5ycHQtYWdncmVnYXRlLWxhYmVsIHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS14cywgMC42ODc1cmVtKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgfVxuICAgIC5ycHQtYWdncmVnYXRlLXZhbHVlIHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgICBmb250LWZlYXR1cmUtc2V0dGluZ3M6ICd0bnVtJztcbiAgICB9XG4gICAgLnJwdC1wYWdpbmF0aW9uLWJhciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIHBhZGRpbmc6IDEwcHggMTZweDtcbiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLXN1YnRsZSwgI2UyZThmMCk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2Y4ZmFmYyk7XG4gICAgfVxuICAgIC5ycHQtcGFnZS1pbmZvIHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgfVxuICAgIC5ycHQtcGFnZS1idXR0b25zIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBnYXA6IDhweDtcbiAgICB9XG4gICAgLnJwdC1wYWdlLWJ0biB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDVweDtcbiAgICAgIHBhZGRpbmc6IDRweCAxMHB4O1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtc2Vjb25kYXJ5LCAjMzM0MTU1KTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZmZmZmZmKTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMtc20sIDRweCk7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tcnB0LXRyYW5zaXRpb24tc3BlZWQsIDE1MG1zKSBlYXNlO1xuICAgIH1cbiAgICAucnB0LXBhZ2UtYnRuOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLWhvdmVyLCAjZjFmNWY5KTtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLWJvcmRlci1ob3ZlciwgIzk0YTNiOCk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgIH1cbiAgICAucnB0LXBhZ2UtYnRuOmRpc2FibGVkIHtcbiAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgfVxuICBgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFJlcG9ydEdyaWRCcmlkZ2VDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGluamVjdGVkR3JpZCA9IGluamVjdChHUklEX0NPTVBPTkVOVCwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmxvY2FsU3RvcmFnZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3RhbGVEZWZhdWx0ID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCdid2F5c19ncmlkX3JlcG9ydF9zdGF0ZV9kZWZhdWx0Jyk7XG4gICAgICAgIGlmIChzdGFsZURlZmF1bHQgJiYgKHN0YWxlRGVmYXVsdC5pbmNsdWRlcygnR0wgQUNOTycpIHx8IHN0YWxlRGVmYXVsdC5pbmNsdWRlcygnQUNDT1VOVCBJTkZPJykpKSB7XG4gICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdid2F5c19ncmlkX3JlcG9ydF9zdGF0ZV9kZWZhdWx0Jyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuICB9XG5cbiAgcmVhZG9ubHkgZ3JpZERlZmluaXRpb24gPSBpbnB1dC5yZXF1aXJlZDxSZXBvcnRHcmlkRGVmaW5pdGlvbj4oKTtcbiAgcmVhZG9ubHkgZGF0YSA9IGlucHV0PHVua25vd25bXT4oW10pO1xuXG4gIHJlYWRvbmx5IGdyaWRTdGF0ZUNoYW5nZSA9IG91dHB1dDxhbnk+KCk7XG4gIHJlYWRvbmx5IGNvbHVtbkRlZnNDaGFuZ2UgPSBvdXRwdXQ8YW55PigpO1xuICByZWFkb25seSByb3dDbGljayA9IG91dHB1dDx7IHJvdzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47IGNvbHVtbj86IEdyaWRDb2x1bW5EZWZpbml0aW9uOyBldmVudD86IE1vdXNlRXZlbnQgfT4oKTtcbiAgcmVhZG9ubHkgc2VsZWN0aW9uQ2hhbmdlID0gb3V0cHV0PGFueVtdPigpO1xuXG4gIHJlYWRvbmx5IGN1c3RvbUdyaWRDb21wb25lbnQgPSBjb21wdXRlZDxUeXBlPHVua25vd24+IHwgbnVsbD4oKCkgPT4gdGhpcy5pbmplY3RlZEdyaWQgPz8gbnVsbCk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkUm93cyA9IHNpZ25hbDxhbnlbXT4oW10pO1xuXG4gIHJlYWRvbmx5IGhhc1Jvd0NsaWNrQWN0aW9uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGRlZiA9IHRoaXMuZ3JpZERlZmluaXRpb24oKTtcbiAgICByZXR1cm4gISEoXG4gICAgICBkZWY/LnJvd0NsaWNrQWN0aW9uIHx8XG4gICAgICBkZWY/Lm9wdGlvbnM/LnJvd0NsaWNrQWN0aW9uIHx8XG4gICAgICB0aGlzLnZpc2libGVDb2x1bW5zKCkuc29tZSgoYykgPT4gISFjLmFjdGlvbilcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBpc0NoZWNrYm94U2VsZWN0aW9uRW5hYmxlZCA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpPy5vcHRpb25zO1xuICAgIGlmIChvcHRzPy5jaGVja2JveFNlbGVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gb3B0cy5jaGVja2JveFNlbGVjdGlvbjtcbiAgICB9XG4gICAgaWYgKG9wdHM/LnNlbGVjdGFibGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy52aXNpYmxlQ29sdW1ucygpLnNvbWUoKGMpID0+IGMuY2hlY2tib3hTZWxlY3Rpb24pO1xuICB9KTtcblxuICByZWFkb25seSBlZmZlY3RpdmVSb3dTZWxlY3Rpb24gPSBjb21wdXRlZDwnc2luZ2xlJyB8ICdtdWx0aXBsZSc+KCgpID0+IHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpPy5vcHRpb25zO1xuICAgIHJldHVybiBvcHRzPy5zZWxlY3Rpb25Nb2RlIHx8IG9wdHM/LnJvd1NlbGVjdGlvbiB8fCAnbXVsdGlwbGUnO1xuICB9KTtcblxuICByZWFkb25seSBpc0hlYWRlckNoZWNrYm94U2VsZWN0aW9uRW5hYmxlZCA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICBpZiAodGhpcy5lZmZlY3RpdmVSb3dTZWxlY3Rpb24oKSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3Qgb3B0cyA9IHRoaXMuZ3JpZERlZmluaXRpb24oKT8ub3B0aW9ucztcbiAgICBpZiAob3B0cz8uaGVhZGVyQ2hlY2tib3hTZWxlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG9wdHMuaGVhZGVyQ2hlY2tib3hTZWxlY3Rpb247XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmlzQ2hlY2tib3hTZWxlY3Rpb25FbmFibGVkKCk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGlzU2VsZWN0aW9uRW5hYmxlZCA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpPy5vcHRpb25zO1xuICAgIHJldHVybiAhIShvcHRzPy5zZWxlY3RhYmxlIHx8IG9wdHM/LmNoZWNrYm94U2VsZWN0aW9uIHx8IHRoaXMudmlzaWJsZUNvbHVtbnMoKS5zb21lKChjKSA9PiBjLmNoZWNrYm94U2VsZWN0aW9uKSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNvcnRDb2x1bW4gPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHNvcnREaXJlY3Rpb24gPSBzaWduYWw8J2FzYycgfCAnZGVzYyc+KCdhc2MnKTtcbiAgcmVhZG9ubHkgY3VycmVudFBhZ2UgPSBzaWduYWw8bnVtYmVyPigxKTtcbiAgcmVhZG9ubHkgdmlzaWJsZUNvbHVtbnMgPSBjb21wdXRlZDxHcmlkQ29sdW1uRGVmaW5pdGlvbltdPigoKSA9PiB7XG4gICAgY29uc3QgZGVmaW5lZCA9ICh0aGlzLmdyaWREZWZpbml0aW9uKCk/LmNvbHVtbnMgPz8gW10pLmZpbHRlcigoYykgPT4gYy52aXNpYmxlICE9PSBmYWxzZSk7XG4gICAgY29uc3Qgcm93cyA9IHRoaXMuZGF0YSgpO1xuICAgIGlmIChyb3dzICYmIHJvd3MubGVuZ3RoID4gMCAmJiB0eXBlb2Ygcm93c1swXSA9PT0gJ29iamVjdCcgJiYgcm93c1swXSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZmlyc3RSb3cgPSByb3dzWzBdIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGZpcnN0Um93KTtcbiAgICAgIGNvbnN0IG1hdGNoZXNBbnkgPSBkZWZpbmVkLnNvbWUoKGMpID0+IGtleXMuaW5jbHVkZXMoYy5maWVsZCkpO1xuICAgICAgLy8gSWYgbm8gY29sdW1ucyBhcmUgZGVmaW5lZCwgb3IgdGhlIGRlZmluZWQgY29sdW1ucyBkb24ndCBtYXRjaCBhbnkgZmllbGQgaW4gdGhlIGRhdGEgKGUuZy4gZHVtbXkgaWQvbmFtZSBkZWZhdWx0cyk6XG4gICAgICBpZiAoZGVmaW5lZC5sZW5ndGggPT09IDAgfHwgIW1hdGNoZXNBbnkpIHtcbiAgICAgICAgcmV0dXJuIGtleXMubWFwKChrKSA9PiAoe1xuICAgICAgICAgIGZpZWxkOiBrLFxuICAgICAgICAgIGxhYmVsOiBodW1hbml6ZUlkZW50aWZpZXIoayksXG4gICAgICAgICAgZGF0YVR5cGU6IHR5cGVvZiBmaXJzdFJvd1trXSA9PT0gJ251bWJlcicgPyAnbnVtYmVyJyA6IHR5cGVvZiBmaXJzdFJvd1trXSA9PT0gJ2Jvb2xlYW4nID8gJ2Jvb2xlYW4nIDogJ3N0cmluZycsXG4gICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGVmaW5lZDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgYnJpZGdlZENvbHVtbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgaXNHcmlkQ2hlY2tib3ggPSB0aGlzLmlzQ2hlY2tib3hTZWxlY3Rpb25FbmFibGVkKCk7XG4gICAgY29uc3QgaXNHcmlkSGVhZGVyQ2hlY2tib3ggPSB0aGlzLmlzSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb25FbmFibGVkKCk7XG4gICAgY29uc3QgaGFzRXhwbGljaXRDb2xDaGVja2JveCA9IHRoaXMudmlzaWJsZUNvbHVtbnMoKS5zb21lKChjKSA9PiBjLmNoZWNrYm94U2VsZWN0aW9uKTtcblxuICAgIHJldHVybiB0aGlzLnZpc2libGVDb2x1bW5zKCkubWFwKChjb2wsIGlkeCkgPT4ge1xuICAgICAgbGV0IHdpZHRoTnVtOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAodHlwZW9mIGNvbC53aWR0aCA9PT0gJ3N0cmluZycgJiYgY29sLndpZHRoLmVuZHNXaXRoKCdweCcpKSB7XG4gICAgICAgIHdpZHRoTnVtID0gcGFyc2VJbnQoY29sLndpZHRoLCAxMCk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiAoY29sLndpZHRoIGFzIHVua25vd24pID09PSAnbnVtYmVyJykge1xuICAgICAgICB3aWR0aE51bSA9IGNvbC53aWR0aCBhcyB1bmtub3duIGFzIG51bWJlcjtcbiAgICAgIH1cblxuICAgICAgbGV0IGNvbENoZWNrYm94U2VsZWN0aW9uOiBib29sZWFuIHwgdW5kZWZpbmVkID0gY29sLmNoZWNrYm94U2VsZWN0aW9uO1xuICAgICAgbGV0IGNvbEhlYWRlckNoZWNrYm94U2VsZWN0aW9uOiBib29sZWFuIHwgdW5kZWZpbmVkID0gY29sLmhlYWRlckNoZWNrYm94U2VsZWN0aW9uO1xuXG4gICAgICBpZiAoIWhhc0V4cGxpY2l0Q29sQ2hlY2tib3ggJiYgaXNHcmlkQ2hlY2tib3ggJiYgaWR4ID09PSAwKSB7XG4gICAgICAgIGNvbENoZWNrYm94U2VsZWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgY29sSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb24gPSBpc0dyaWRIZWFkZXJDaGVja2JveDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uY29sLFxuICAgICAgICBoZWFkZXJOYW1lOiBjb2wubGFiZWwsIC8vIEJXYXlzLWdyaWQgLyBBRyBHcmlkIHN0YW5kYXJkXG4gICAgICAgIGhlYWRlcjogY29sLmxhYmVsLFxuICAgICAgICB0aXRsZTogY29sLmxhYmVsLFxuICAgICAgICBoaWRlOiBjb2wudmlzaWJsZSA9PT0gZmFsc2UsXG4gICAgICAgIHdpZHRoOiB3aWR0aE51bSxcbiAgICAgICAgYWdnRnVuYzogY29sLmFnZ3JlZ2F0ZSAmJiBjb2wuYWdncmVnYXRlICE9PSAnbm9uZScgPyBjb2wuYWdncmVnYXRlIDogdW5kZWZpbmVkLFxuICAgICAgICBjaGVja2JveFNlbGVjdGlvbjogY29sQ2hlY2tib3hTZWxlY3Rpb24sXG4gICAgICAgIGhlYWRlckNoZWNrYm94U2VsZWN0aW9uOiBjb2xIZWFkZXJDaGVja2JveFNlbGVjdGlvbixcbiAgICAgIH07XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGdyaWRJbnN0YW5jZUtleSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBkcyA9IHRoaXMuZ3JpZERlZmluaXRpb24oKT8uZGF0YVNvdXJjZUlkIHx8ICdjdXN0b20nO1xuICAgIGNvbnN0IGNvbHMgPSB0aGlzLnZpc2libGVDb2x1bW5zKCkubWFwKChjKSA9PiBjLmZpZWxkKS5qb2luKCdfJyk7XG4gICAgcmV0dXJuIGAke2RzfV8ke2NvbHN9YDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZ3JpZFN0YXRlS2V5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGRzID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpPy5kYXRhU291cmNlSWQgfHwgJ2N1c3RvbSc7XG4gICAgY29uc3QgY29scyA9IHRoaXMudmlzaWJsZUNvbHVtbnMoKS5tYXAoKGMpID0+IGMuZmllbGQpLnNsaWNlKDAsIDUpLmpvaW4oJ18nKTtcbiAgICByZXR1cm4gYHJwdF8ke2RzfV8ke2NvbHMgfHwgJ2dyaWQnfWA7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGdyaWRDb25maWcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgb3B0cyA9IHRoaXMuZ3JpZERlZmluaXRpb24oKT8ub3B0aW9ucyB8fCB7fTtcbiAgICBjb25zdCByb3dTZWwgPSB0aGlzLmVmZmVjdGl2ZVJvd1NlbGVjdGlvbigpO1xuICAgIGNvbnN0IGhhc0NoZWNrYm94ID0gdGhpcy5pc0NoZWNrYm94U2VsZWN0aW9uRW5hYmxlZCgpO1xuICAgIGNvbnN0IGhhc0hlYWRlckNoZWNrYm94ID0gdGhpcy5pc0hlYWRlckNoZWNrYm94U2VsZWN0aW9uRW5hYmxlZCgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNpZGVCYXI6IG9wdHMuc2lkZUJhciAhPT0gdW5kZWZpbmVkID8gb3B0cy5zaWRlQmFyIDogdHJ1ZSxcbiAgICAgIHN0YXR1c0Jhcjogb3B0cy5zdGF0dXNCYXIgIT09IHVuZGVmaW5lZCA/IG9wdHMuc3RhdHVzQmFyIDogdHJ1ZSxcbiAgICAgIGdsb2JhbFNlYXJjaDogb3B0cy5nbG9iYWxTZWFyY2ggIT09IHVuZGVmaW5lZCA/IG9wdHMuZ2xvYmFsU2VhcmNoIDogdHJ1ZSxcbiAgICAgIC4uLm9wdHMsXG4gICAgICByb3dTZWxlY3Rpb246IHJvd1NlbCxcbiAgICAgIHNlbGVjdGlvbk1vZGU6IHJvd1NlbCxcbiAgICAgIGNoZWNrYm94U2VsZWN0aW9uOiBoYXNDaGVja2JveCxcbiAgICAgIGhlYWRlckNoZWNrYm94U2VsZWN0aW9uOiBoYXNIZWFkZXJDaGVja2JveCxcbiAgICAgIHN0YXRlS2V5OiB0aGlzLmdyaWRTdGF0ZUtleSgpLFxuICAgIH07XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGdyaWRSZXBvcnRTdGF0ZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpPy5vcHRpb25zO1xuICAgIHJldHVybiB7XG4gICAgICBjb2x1bW5Hcm91cERlZnM6IG51bGwsXG4gICAgICBjb2x1bW5EZWZzOiB0aGlzLmJyaWRnZWRDb2x1bW5zKCksXG4gICAgICBzb3J0TW9kZWw6IChvcHRzPy5zb3J0TW9kZWwgYXMgYW55KSB8fCBbXSxcbiAgICAgIGdyb3VwTW9kZWw6IG9wdHM/Lmdyb3VwTW9kZWwgfHwgW10sXG4gICAgICBhY3RpdmVGaWx0ZXJzOiB7fSxcbiAgICAgIGhpZ2hsaWdodFJ1bGVzOiBbXSxcbiAgICB9O1xuICB9KTtcblxuICByZWFkb25seSBncmlkSW5wdXRzID0gY29tcHV0ZWQoKCkgPT4gKHtcbiAgICBjb2x1bW5zOiB0aGlzLmJyaWRnZWRDb2x1bW5zKCksXG4gICAgY29sdW1uRGVmczogdGhpcy5icmlkZ2VkQ29sdW1ucygpLFxuICAgIHJvd0RhdGE6IHRoaXMuZGF0YSgpLFxuICAgIGNvbmZpZzogdGhpcy5ncmlkQ29uZmlnKCksXG4gICAgcmVwb3J0U3RhdGU6IHRoaXMuZ3JpZFJlcG9ydFN0YXRlKCksXG4gICAgcGFnaW5hdGlvbjogdGhpcy5ncmlkRGVmaW5pdGlvbigpLm9wdGlvbnM/LnBhZ2luYXRpb24gIT09IGZhbHNlLFxuICAgIHBhZ2VTaXplOiB0aGlzLmdyaWREZWZpbml0aW9uKCkub3B0aW9ucz8ucGFnZVNpemUgPz8gMTAsXG4gICAgcm93U2VsZWN0aW9uOiB0aGlzLmVmZmVjdGl2ZVJvd1NlbGVjdGlvbigpLFxuICB9KSk7XG5cbiAgcmVhZG9ubHkgc2hvd1Jvd051bWJlcnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuICEhdGhpcy5ncmlkRGVmaW5pdGlvbigpLm9wdGlvbnM/LnNob3dSb3dOdW1iZXJzO1xuICB9KTtcblxuICByZWFkb25seSBpc1BhZ2luYXRpb25FbmFibGVkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmdyaWREZWZpbml0aW9uKCkub3B0aW9ucz8ucGFnaW5hdGlvbiAhPT0gZmFsc2U7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHBhZ2VTaXplID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmdyaWREZWZpbml0aW9uKCkub3B0aW9ucz8ucGFnZVNpemUgPz8gMTA7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGNvbFNwYW4gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUNvbHVtbnMoKS5sZW5ndGggKyAodGhpcy5zaG93Um93TnVtYmVycygpID8gMSA6IDApICsgKHRoaXMuaXNTZWxlY3Rpb25FbmFibGVkKCkgPyAxIDogMCk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGhhc0FnZ3JlZ2F0ZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZ3JpZERlZmluaXRpb24oKS5vcHRpb25zPy5zaG93Rm9vdGVyICYmXG4gICAgICB0aGlzLnZpc2libGVDb2x1bW5zKCkuc29tZSgoYykgPT4gYy5hZ2dyZWdhdGUgJiYgYy5hZ2dyZWdhdGUgIT09ICdub25lJylcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzb3J0ZWREYXRhID0gY29tcHV0ZWQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj5bXT4oKCkgPT4ge1xuICAgIGNvbnN0IHJhdyA9ICh0aGlzLmRhdGEoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdKSB8fCBbXTtcbiAgICBjb25zdCBjb2wgPSB0aGlzLnNvcnRDb2x1bW4oKTtcbiAgICBjb25zdCBkaXIgPSB0aGlzLnNvcnREaXJlY3Rpb24oKTtcblxuICAgIGlmICghY29sKSByZXR1cm4gcmF3O1xuXG4gICAgcmV0dXJuIFsuLi5yYXddLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IHZhbEEgPSBhW2NvbF07XG4gICAgICBjb25zdCB2YWxCID0gYltjb2xdO1xuICAgICAgaWYgKHZhbEEgPT0gbnVsbCAmJiB2YWxCID09IG51bGwpIHJldHVybiAwO1xuICAgICAgaWYgKHZhbEEgPT0gbnVsbCkgcmV0dXJuIDE7XG4gICAgICBpZiAodmFsQiA9PSBudWxsKSByZXR1cm4gLTE7XG4gICAgICBpZiAodmFsQSA8IHZhbEIpIHJldHVybiBkaXIgPT09ICdhc2MnID8gLTEgOiAxO1xuICAgICAgaWYgKHZhbEEgPiB2YWxCKSByZXR1cm4gZGlyID09PSAnYXNjJyA/IDEgOiAtMTtcbiAgICAgIHJldHVybiAwO1xuICAgIH0pO1xuICB9KTtcblxuICByZWFkb25seSB0b3RhbFBhZ2VzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICghdGhpcy5pc1BhZ2luYXRpb25FbmFibGVkKCkpIHJldHVybiAxO1xuICAgIGNvbnN0IGxlbiA9IHRoaXMuc29ydGVkRGF0YSgpLmxlbmd0aDtcbiAgICByZXR1cm4gTWF0aC5tYXgoMSwgTWF0aC5jZWlsKGxlbiAvIHRoaXMucGFnZVNpemUoKSkpO1xuICB9KTtcblxuICByZWFkb25seSBwYWdpbmF0ZWREYXRhID0gY29tcHV0ZWQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj5bXT4oKCkgPT4ge1xuICAgIGNvbnN0IHNvcnRlZCA9IHRoaXMuc29ydGVkRGF0YSgpO1xuICAgIGlmICghdGhpcy5pc1BhZ2luYXRpb25FbmFibGVkKCkpIHtcbiAgICAgIHJldHVybiBzb3J0ZWQ7XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0ID0gKHRoaXMuY3VycmVudFBhZ2UoKSAtIDEpICogdGhpcy5wYWdlU2l6ZSgpO1xuICAgIHJldHVybiBzb3J0ZWQuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgdGhpcy5wYWdlU2l6ZSgpKTtcbiAgfSk7XG5cbiAgZ2V0SnVzdGlmeUNvbnRlbnQoYWxpZ24/OiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCcpOiBzdHJpbmcge1xuICAgIGlmIChhbGlnbiA9PT0gJ3JpZ2h0JykgcmV0dXJuICdmbGV4LWVuZCc7XG4gICAgaWYgKGFsaWduID09PSAnY2VudGVyJykgcmV0dXJuICdjZW50ZXInO1xuICAgIHJldHVybiAnZmxleC1zdGFydCc7XG4gIH1cblxuICB0b2dnbGVTb3J0KGNvbDogR3JpZENvbHVtbkRlZmluaXRpb24pOiB2b2lkIHtcbiAgICBpZiAoY29sLnNvcnRhYmxlID09PSBmYWxzZSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnNvcnRDb2x1bW4oKSA9PT0gY29sLmZpZWxkKSB7XG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24uc2V0KHRoaXMuc29ydERpcmVjdGlvbigpID09PSAnYXNjJyA/ICdkZXNjJyA6ICdhc2MnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zb3J0Q29sdW1uLnNldChjb2wuZmllbGQpO1xuICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uLnNldCgnYXNjJyk7XG4gICAgfVxuICAgIHRoaXMuY3VycmVudFBhZ2Uuc2V0KDEpO1xuICB9XG5cbiAgcHJldlBhZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UoKSA+IDEpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UudXBkYXRlKChwKSA9PiBwIC0gMSk7XG4gICAgfVxuICB9XG5cbiAgbmV4dFBhZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UoKSA8IHRoaXMudG90YWxQYWdlcygpKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlLnVwZGF0ZSgocCkgPT4gcCArIDEpO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdFZhbHVlKHZhbHVlOiB1bmtub3duLCBjb2w6IEdyaWRDb2x1bW5EZWZpbml0aW9uKTogc3RyaW5nIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuICcnO1xuICAgIGlmIChjb2wuZGF0YVR5cGUgPT09ICdjdXJyZW5jeScpIHtcbiAgICAgIGNvbnN0IG51bSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICByZXR1cm4gaXNOYU4obnVtKSA/IFN0cmluZyh2YWx1ZSkgOiBgJCR7bnVtLnRvTG9jYWxlU3RyaW5nKHVuZGVmaW5lZCwgeyBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDIsIG1heGltdW1GcmFjdGlvbkRpZ2l0czogMiB9KX1gO1xuICAgIH1cbiAgICBpZiAoY29sLmRhdGFUeXBlID09PSAnbnVtYmVyJykge1xuICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgIHJldHVybiBpc05hTihudW0pID8gU3RyaW5nKHZhbHVlKSA6IG51bS50b0xvY2FsZVN0cmluZygpO1xuICAgIH1cbiAgICBpZiAoY29sLmRhdGFUeXBlID09PSAnZGF0ZScgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgZCA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgIHJldHVybiBpc05hTihkLmdldFRpbWUoKSkgPyBTdHJpbmcodmFsdWUpIDogZC50b0xvY2FsZURhdGVTdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIH1cblxuICBjb21wdXRlQWdncmVnYXRlKGNvbDogR3JpZENvbHVtbkRlZmluaXRpb24pOiBzdHJpbmcge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnNvcnRlZERhdGEoKTtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHJldHVybiAnMCc7XG5cbiAgICBpZiAoY29sLmFnZ3JlZ2F0ZSA9PT0gJ2NvdW50Jykge1xuICAgICAgcmV0dXJuIFN0cmluZyhkYXRhLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgY29uc3QgbnVtYmVycyA9IGRhdGFcbiAgICAgIC5tYXAoKHJvdykgPT4gTnVtYmVyKHJvd1tjb2wuZmllbGRdKSlcbiAgICAgIC5maWx0ZXIoKG4pID0+ICFpc05hTihuKSk7XG5cbiAgICBpZiAobnVtYmVycy5sZW5ndGggPT09IDApIHJldHVybiAnMCc7XG5cbiAgICBpZiAoY29sLmFnZ3JlZ2F0ZSA9PT0gJ3N1bScpIHtcbiAgICAgIGNvbnN0IHN1bSA9IG51bWJlcnMucmVkdWNlKChhY2MsIG4pID0+IGFjYyArIG4sIDApO1xuICAgICAgcmV0dXJuIGNvbC5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5JyA/IGAkJHtzdW0udG9GaXhlZCgyKX1gIDogc3VtLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbC5hZ2dyZWdhdGUgPT09ICdhdmcnKSB7XG4gICAgICBjb25zdCBhdmcgPSBudW1iZXJzLnJlZHVjZSgoYWNjLCBuKSA9PiBhY2MgKyBuLCAwKSAvIG51bWJlcnMubGVuZ3RoO1xuICAgICAgcmV0dXJuIGNvbC5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5JyA/IGAkJHthdmcudG9GaXhlZCgyKX1gIDogYXZnLnRvRml4ZWQoMik7XG4gICAgfVxuXG4gICAgaWYgKGNvbC5hZ2dyZWdhdGUgPT09ICdtaW4nKSB7XG4gICAgICBjb25zdCBtaW4gPSBNYXRoLm1pbiguLi5udW1iZXJzKTtcbiAgICAgIHJldHVybiBjb2wuZGF0YVR5cGUgPT09ICdjdXJyZW5jeScgPyBgJCR7bWluLnRvRml4ZWQoMil9YCA6IFN0cmluZyhtaW4pO1xuICAgIH1cblxuICAgIGlmIChjb2wuYWdncmVnYXRlID09PSAnbWF4Jykge1xuICAgICAgY29uc3QgbWF4ID0gTWF0aC5tYXgoLi4ubnVtYmVycyk7XG4gICAgICByZXR1cm4gY29sLmRhdGFUeXBlID09PSAnY3VycmVuY3knID8gYCQke21heC50b0ZpeGVkKDIpfWAgOiBTdHJpbmcobWF4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvblNlbGVjdGlvbkNoYW5nZShzZWxlY3RlZDogYW55KTogdm9pZCB7XG4gICAgY29uc3Qgcm93cyA9IEFycmF5LmlzQXJyYXkoc2VsZWN0ZWQpID8gc2VsZWN0ZWQgOiAoc2VsZWN0ZWQgPyBbc2VsZWN0ZWRdIDogW10pO1xuICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnNldChyb3dzKTtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHJvd3MpO1xuICB9XG5cbiAgaXNSb3dTZWxlY3RlZChyb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRSb3dzKCkuaW5jbHVkZXMocm93KTtcbiAgfVxuXG4gIGlzQWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMucGFnaW5hdGVkRGF0YSgpO1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBkYXRhLmV2ZXJ5KChyKSA9PiB0aGlzLmlzUm93U2VsZWN0ZWQocikpO1xuICB9XG5cbiAgaXNQYXJ0aWFsbHlTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5wYWdpbmF0ZWREYXRhKCk7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgY291bnQgPSBkYXRhLmZpbHRlcigocikgPT4gdGhpcy5pc1Jvd1NlbGVjdGVkKHIpKS5sZW5ndGg7XG4gICAgcmV0dXJuIGNvdW50ID4gMCAmJiBjb3VudCA8IGRhdGEubGVuZ3RoO1xuICB9XG5cbiAgdG9nZ2xlU2VsZWN0QWxsKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGNoZWNrZWQgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQ7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuc2VsZWN0ZWRSb3dzKCk7XG4gICAgY29uc3QgcGFnZVJvd3MgPSB0aGlzLnBhZ2luYXRlZERhdGEoKTtcbiAgICBsZXQgbmV4dDogYW55W107XG4gICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgIGNvbnN0IHNldCA9IG5ldyBTZXQoWy4uLmN1cnJlbnQsIC4uLnBhZ2VSb3dzXSk7XG4gICAgICBuZXh0ID0gQXJyYXkuZnJvbShzZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0ID0gY3VycmVudC5maWx0ZXIoKHIpID0+ICFwYWdlUm93cy5pbmNsdWRlcyhyKSk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnNldChuZXh0KTtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KG5leHQpO1xuICB9XG5cbiAgdG9nZ2xlUm93U2VsZWN0aW9uKHJvdzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGNoZWNrZWQgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQ7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuc2VsZWN0ZWRSb3dzKCk7XG4gICAgY29uc3QgbW9kZSA9IHRoaXMuZWZmZWN0aXZlUm93U2VsZWN0aW9uKCk7XG4gICAgbGV0IG5leHQ6IGFueVtdO1xuICAgIGlmIChtb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgbmV4dCA9IGNoZWNrZWQgPyBbcm93XSA6IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgICBuZXh0ID0gY3VycmVudC5pbmNsdWRlcyhyb3cpID8gY3VycmVudCA6IFsuLi5jdXJyZW50LCByb3ddO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dCA9IGN1cnJlbnQuZmlsdGVyKChyKSA9PiByICE9PSByb3cpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkUm93cy5zZXQobmV4dCk7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChuZXh0KTtcbiAgfVxuXG4gIG9uUm93Q2xpY2socm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1NlbGVjdGlvbkVuYWJsZWQoKSkge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuc2VsZWN0ZWRSb3dzKCk7XG4gICAgICBjb25zdCBtb2RlID0gdGhpcy5lZmZlY3RpdmVSb3dTZWxlY3Rpb24oKTtcbiAgICAgIGxldCBuZXh0OiBhbnlbXTtcbiAgICAgIGlmIChtb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICBuZXh0ID0gW3Jvd107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0ID0gY3VycmVudC5pbmNsdWRlcyhyb3cpID8gY3VycmVudC5maWx0ZXIoKHIpID0+IHIgIT09IHJvdykgOiBbLi4uY3VycmVudCwgcm93XTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnNldChuZXh0KTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQobmV4dCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc1Jvd0NsaWNrQWN0aW9uKCkpIHtcbiAgICAgIHRoaXMucm93Q2xpY2suZW1pdCh7IHJvdywgZXZlbnQgfSk7XG4gICAgfVxuICB9XG5cbiAgb25DZWxsQ2xpY2socm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgY29sOiBHcmlkQ29sdW1uRGVmaW5pdGlvbiwgZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoY29sLmFjdGlvbikge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLnJvd0NsaWNrLmVtaXQoeyByb3csIGNvbHVtbjogY29sLCBldmVudCB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
806
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWdyaWQtYnJpZGdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2ZlYXR1cmVzL3J1bnRpbWUvcmVwb3J0LWdyaWQtYnJpZGdlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxRQUFRLEVBQ1IsU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFDTixNQUFNLEVBRU4sZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDMUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFbEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDdkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7O0FBTTNFLE1BQU0sT0FBTyxzQkFBc0I7SUFDaEIsR0FBRyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sR0FBNkIsSUFBSSxDQUFDO0lBQ3pDLElBQUksR0FBbUIsRUFBRSxDQUFDO0lBRXpCLGFBQWEsR0FBRyxLQUFLLENBQW1CLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLE1BQU0sR0FBRyxLQUFLLENBQTBCLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLGVBQWUsR0FBRyxNQUFNLEVBQU8sQ0FBQztJQUNoQyxnQkFBZ0IsR0FBRyxNQUFNLEVBQU8sQ0FBQztJQUNqQyxRQUFRLEdBQUcsTUFBTSxFQUErRCxDQUFDO0lBQ2pGLGVB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrS1QsbUJBbVNnQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50UmVmLFxuICBjb21wdXRlZCxcbiAgRGlyZWN0aXZlLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIFR5cGUsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgR1JJRF9DT01QT05FTlQgfSBmcm9tICcuLi8uLi9jb3JlL3Rva2Vucy9yZXBvcnRpbmctY29uZmlnLnRva2VuJztcbmltcG9ydCB7IFJlcG9ydFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9yZXBvcnQtc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IEdyaWRDb2x1bW5EZWZpbml0aW9uLCBSZXBvcnRHcmlkRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1ncmlkLm1vZGVsJztcbmltcG9ydCB7IFJwdEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9wcmltaXRpdmVzL2NvbXBvbmVudHMvaWNvbi9ycHQtaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgaHVtYW5pemVJZGVudGlmaWVyIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9pZGVudGlmaWVyLWh1bWFuaXplcic7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tycHRHcmlkT3V0bGV0XScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFJwdEdyaWRPdXRsZXREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IHZjciA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcbiAgcHJpdmF0ZSBjb21wUmVmOiBDb21wb25lbnRSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHN1YnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgcmVhZG9ubHkgY29tcG9uZW50VHlwZSA9IGlucHV0PFR5cGU8YW55PiB8IG51bGw+KG51bGwsIHsgYWxpYXM6ICdycHRHcmlkT3V0bGV0JyB9KTtcbiAgcmVhZG9ubHkgaW5wdXRzID0gaW5wdXQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHt9KTtcbiAgcmVhZG9ubHkgZ3JpZFN0YXRlQ2hhbmdlID0gb3V0cHV0PGFueT4oKTtcbiAgcmVhZG9ubHkgY29sdW1uRGVmc0NoYW5nZSA9IG91dHB1dDxhbnk+KCk7XG4gIHJlYWRvbmx5IHJvd0NsaWNrID0gb3V0cHV0PHsgcm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjsgY29sdW1uPzogYW55OyBldmVudD86IGFueSB9PigpO1xuICByZWFkb25seSBzZWxlY3Rpb25DaGFuZ2UgPSBvdXRwdXQ8YW55W10+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLmNvbXBvbmVudFR5cGUoKTtcbiAgICAgIHRoaXMucmVjcmVhdGVDb21wb25lbnQodHlwZSk7XG4gICAgfSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudElucHV0cyA9IHRoaXMuaW5wdXRzKCk7XG4gICAgICBpZiAodGhpcy5jb21wUmVmKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGN1cnJlbnRJbnB1dHMpKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuY29tcFJlZi5zZXRJbnB1dChrZXksIHZhbHVlKTtcbiAgICAgICAgICB9IGNhdGNoIHt9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjcmVhdGVDb21wb25lbnQodHlwZTogVHlwZTxhbnk+IHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgICBpZiAoIXR5cGUpIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmNvbXBSZWYgPSB0aGlzLnZjci5jcmVhdGVDb21wb25lbnQodHlwZSk7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuY29tcFJlZi5pbnN0YW5jZSBhcyBhbnk7XG5cbiAgICAgIGlmIChpbnN0YW5jZS5ncmlkU3RhdGVDaGFuZ2VkICYmIHR5cGVvZiBpbnN0YW5jZS5ncmlkU3RhdGVDaGFuZ2VkLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChcbiAgICAgICAgICBpbnN0YW5jZS5ncmlkU3RhdGVDaGFuZ2VkLnN1YnNjcmliZSgoc3RhdGU6IGFueSkgPT4gdGhpcy5ncmlkU3RhdGVDaGFuZ2UuZW1pdChzdGF0ZSkpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoaW5zdGFuY2UucmVwb3J0U3RhdGVDaGFuZ2UgJiYgdHlwZW9mIGluc3RhbmNlLnJlcG9ydFN0YXRlQ2hhbmdlLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChcbiAgICAgICAgICBpbnN0YW5jZS5yZXBvcnRTdGF0ZUNoYW5nZS5zdWJzY3JpYmUoKHN0YXRlOiBhbnkpID0+IHRoaXMuZ3JpZFN0YXRlQ2hhbmdlLmVtaXQoc3RhdGUpKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGluc3RhbmNlLmNvbHVtbkRlZnNDaGFuZ2VkICYmIHR5cGVvZiBpbnN0YW5jZS5jb2x1bW5EZWZzQ2hhbmdlZC5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2goXG4gICAgICAgICAgaW5zdGFuY2UuY29sdW1uRGVmc0NoYW5nZWQuc3Vic2NyaWJlKChkZWZzOiBhbnkpID0+IHRoaXMuY29sdW1uRGVmc0NoYW5nZS5lbWl0KGRlZnMpKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlbWl0Um93ID0gKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCByb3cgPSBkYXRhPy5kYXRhID8/IGRhdGE/LnJvdyA/PyBkYXRhO1xuICAgICAgICBjb25zdCBjb2wgPSBkYXRhPy5jb2xEZWYgPz8gZGF0YT8uY29sdW1uO1xuICAgICAgICB0aGlzLnJvd0NsaWNrLmVtaXQoeyByb3csIGNvbHVtbjogY29sLCBldmVudDogZGF0YT8uZXZlbnQgfSk7XG4gICAgICB9O1xuXG4gICAgICBpZiAoaW5zdGFuY2Uucm93Q2xpY2tlZCAmJiB0eXBlb2YgaW5zdGFuY2Uucm93Q2xpY2tlZC5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2goaW5zdGFuY2Uucm93Q2xpY2tlZC5zdWJzY3JpYmUoZW1pdFJvdykpO1xuICAgICAgfSBlbHNlIGlmIChpbnN0YW5jZS5yb3dDbGljayAmJiB0eXBlb2YgaW5zdGFuY2Uucm93Q2xpY2suc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuc3Vicy5wdXNoKGluc3RhbmNlLnJvd0NsaWNrLnN1YnNjcmliZShlbWl0Um93KSk7XG4gICAgICB9IGVsc2UgaWYgKGluc3RhbmNlLmNlbGxDbGlja2VkICYmIHR5cGVvZiBpbnN0YW5jZS5jZWxsQ2xpY2tlZC5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2goaW5zdGFuY2UuY2VsbENsaWNrZWQuc3Vic2NyaWJlKGVtaXRSb3cpKTtcbiAgICAgIH0gZWxzZSBpZiAoaW5zdGFuY2UuY2VsbENsaWNrICYmIHR5cGVvZiBpbnN0YW5jZS5jZWxsQ2xpY2suc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuc3Vicy5wdXNoKGluc3RhbmNlLmNlbGxDbGljay5zdWJzY3JpYmUoZW1pdFJvdykpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5zdGFuY2Uuc2VsZWN0aW9uQ2hhbmdlZCAmJiB0eXBlb2YgaW5zdGFuY2Uuc2VsZWN0aW9uQ2hhbmdlZC5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2goXG4gICAgICAgICAgaW5zdGFuY2Uuc2VsZWN0aW9uQ2hhbmdlZC5zdWJzY3JpYmUoKHNlbGVjdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3dzID0gQXJyYXkuaXNBcnJheShzZWxlY3Rpb24pID8gc2VsZWN0aW9uIDogKHNlbGVjdGlvbiA/IFtzZWxlY3Rpb25dIDogW10pO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChyb3dzKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50SW5wdXRzID0gdGhpcy5pbnB1dHMoKTtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGN1cnJlbnRJbnB1dHMpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5jb21wUmVmLnNldElucHV0KGtleSwgdmFsdWUpO1xuICAgICAgICB9IGNhdGNoIHt9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tScHRHcmlkT3V0bGV0RGlyZWN0aXZlXSBGYWlsZWQgdG8gY3JlYXRlIGN1c3RvbSBncmlkIGNvbXBvbmVudDonLCBlcnIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgdGhpcy5zdWJzID0gW107XG4gICAgaWYgKHRoaXMuY29tcFJlZikge1xuICAgICAgdGhpcy5jb21wUmVmLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuY29tcFJlZiA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMudmNyLmNsZWFyKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyKCk7XG4gIH1cbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnB0LWdyaWQtYnJpZGdlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUnB0SWNvbkNvbXBvbmVudCwgUnB0R3JpZE91dGxldERpcmVjdGl2ZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInJwdC1ncmlkLWNvbnRhaW5lclwiPlxuICAgICAgQGlmIChjdXN0b21HcmlkQ29tcG9uZW50KCkpIHtcbiAgICAgICAgPCEtLSBIb3N0LXByb3ZpZGVkIGdyaWQgY29tcG9uZW50IChlLmcuIEJXYXlzLWdyaWQgVWx0cmFHcmlkQ29tcG9uZW50KSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgIFtycHRHcmlkT3V0bGV0XT1cImN1c3RvbUdyaWRDb21wb25lbnQoKVwiXG4gICAgICAgICAgW2lucHV0c109XCJncmlkSW5wdXRzKClcIlxuICAgICAgICAgIChncmlkU3RhdGVDaGFuZ2UpPVwiZ3JpZFN0YXRlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgKGNvbHVtbkRlZnNDaGFuZ2UpPVwiY29sdW1uRGVmc0NoYW5nZS5lbWl0KCRldmVudClcIlxuICAgICAgICAgIChyb3dDbGljayk9XCJyb3dDbGljay5lbWl0KCRldmVudClcIlxuICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIC8+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPCEtLSBCdWlsdC1pbiBmYWxsYmFjayB0YWJsZSB3aGVuIG5vIGV4dGVybmFsIGdyaWQgaXMgcHJvdmlkZWQgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJycHQtdGFibGUtY2FyZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtdGFibGUtdG9vbGJhclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtdGFibGUtdGl0bGVcIj5SZXN1bHRzICh7eyBkYXRhKCkubGVuZ3RoIH19IHJvd3MpPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC10YWJsZS1yZXNwb25zaXZlXCI+XG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJycHQtdGFibGVcIj5cbiAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd1Jvd051bWJlcnMoKSkge1xuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJycHQtdGggcnB0LXRoLW51bVwiPiM8L3RoPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGlmIChpc1NlbGVjdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJycHQtdGggcnB0LXRoLWNiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChlZmZlY3RpdmVSb3dTZWxlY3Rpb24oKSAhPT0gJ3NpbmdsZScgJiYgaXNIZWFkZXJDaGVja2JveFNlbGVjdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNBbGxTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiaXNQYXJ0aWFsbHlTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVTZWxlY3RBbGwoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiU2VsZWN0IGFsbCByb3dzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGZvciAoY29sIG9mIHZpc2libGVDb2x1bW5zKCk7IHRyYWNrIGNvbC5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJwdC10aFwiXG4gICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbC53aWR0aCB8fCAnYXV0bydcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS50ZXh0LWFsaWduXT1cImNvbC5hbGlnbiB8fCAnbGVmdCdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zb3J0YWJsZV09XCJjb2wuc29ydGFibGUgIT09IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU29ydChjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtdGgtY29udGVudFwiIFtzdHlsZS5qdXN0aWZ5LWNvbnRlbnRdPVwiZ2V0SnVzdGlmeUNvbnRlbnQoY29sLmFsaWduKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY29sLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChjb2wuc29ydGFibGUgIT09IGZhbHNlICYmIHNvcnRDb2x1bW4oKSA9PT0gY29sLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LXNvcnQtaW5kaWNhdG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJwdC1pY29uIFtuYW1lXT1cInNvcnREaXJlY3Rpb24oKSA9PT0gJ2FzYycgPyAnY2hldnJvbi11cCcgOiAnY2hldnJvbi1kb3duJ1wiIFtzaXplXT1cIjEyXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICBAaWYgKHBhZ2luYXRlZERhdGEoKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwiY29sU3BhbigpXCIgY2xhc3M9XCJycHQtZW1wdHktbWVzc2FnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIE5vIGRhdGEgZm91bmQgbWF0Y2hpbmcgY3JpdGVyaWFcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICBAZm9yIChyb3cgb2YgcGFnaW5hdGVkRGF0YSgpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtdHJcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1jbGlja2FibGVdPVwiaGFzUm93Q2xpY2tBY3Rpb24oKSB8fCBpc1NlbGVjdGlvbkVuYWJsZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLXNlbGVjdGVkXT1cImlzUm93U2VsZWN0ZWQocm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2socm93LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd1Jvd051bWJlcnMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwicnB0LXRkIHJwdC10ZC1udW1cIj57eyAoY3VycmVudFBhZ2UoKSAtIDEpICogcGFnZVNpemUoKSArICRpbmRleCArIDEgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGlzU2VsZWN0aW9uRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJycHQtdGQgcnB0LXRkLWNiXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJlZmZlY3RpdmVSb3dTZWxlY3Rpb24oKSA9PT0gJ3NpbmdsZScgPyAncmFkaW8nIDogJ2NoZWNrYm94J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInJwdC1mYWxsYmFjay1zZWxlY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlUm93U2VsZWN0aW9uKHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBAZm9yIChjb2wgb2YgdmlzaWJsZUNvbHVtbnMoKTsgdHJhY2sgY29sLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtdGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUudGV4dC1hbGlnbl09XCJjb2wuYWxpZ24gfHwgJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLWNsaWNrYWJsZS1jZWxsXT1cIiEhY29sLmFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNlbGxDbGljayhyb3csIGNvbCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoY29sLmFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LWNlbGwtYWN0aW9uLWxpbmtcIj57eyBmb3JtYXRWYWx1ZShyb3dbY29sLmZpZWxkXSwgY29sKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybWF0VmFsdWUocm93W2NvbC5maWVsZF0sIGNvbCkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICBAaWYgKGhhc0FnZ3JlZ2F0ZXMoKSkge1xuICAgICAgICAgICAgICAgIDx0Zm9vdD5cbiAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInJwdC10Zm9vdC1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzaG93Um93TnVtYmVycygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwicnB0LXRkLW51bVwiPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChpc1NlbGVjdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInJwdC10ZC1jYlwiPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoY29sIG9mIHZpc2libGVDb2x1bW5zKCk7IHRyYWNrIGNvbC5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInJwdC10ZC1hZ2dyZWdhdGVcIiBbc3R5bGUudGV4dC1hbGlnbl09XCJjb2wuYWxpZ24gfHwgJ2xlZnQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbC5hZ2dyZWdhdGUgJiYgY29sLmFnZ3JlZ2F0ZSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtYWdncmVnYXRlLXdyYXBcIiBbY2xhc3MuaXMtcmlnaHRdPVwiY29sLmFsaWduID09PSAncmlnaHQnXCIgW2NsYXNzLmlzLWNlbnRlcl09XCJjb2wuYWxpZ24gPT09ICdjZW50ZXInXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtYWdncmVnYXRlLWxhYmVsXCI+e3sgY29sLmFnZ3JlZ2F0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1hZ2dyZWdhdGUtdmFsdWVcIj57eyBjb21wdXRlQWdncmVnYXRlKGNvbCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90Zm9vdD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIEBpZiAoaXNQYWdpbmF0aW9uRW5hYmxlZCgpICYmIHRvdGFsUGFnZXMoKSA+IDEpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtcGFnaW5hdGlvbi1iYXJcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtcGFnZS1pbmZvXCI+XG4gICAgICAgICAgICAgICAgUGFnZSB7eyBjdXJyZW50UGFnZSgpIH19IG9mIHt7IHRvdGFsUGFnZXMoKSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtcGFnZS1idXR0b25zXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInJwdC1wYWdlLWJ0blwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UoKSA9PT0gMVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicHJldlBhZ2UoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJhcnJvdy1sZWZ0XCIgW3NpemVdPVwiMTJcIiAvPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+UHJldmlvdXM8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInJwdC1wYWdlLWJ0blwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UoKSA9PT0gdG90YWxQYWdlcygpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJuZXh0UGFnZSgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5OZXh0PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJhcnJvdy1yaWdodFwiIFtzaXplXT1cIjEyXCIgLz5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIG1hcmdpbi10b3A6IDE2cHg7XG4gICAgICBmb250LWZhbWlseTogdmFyKC0tcnB0LWZvbnQtZmFtaWx5LCBpbmhlcml0KTtcbiAgICB9XG4gICAgLnJwdC1ncmlkLWNvbnRhaW5lciB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIG1pbi1oZWlnaHQ6IDQ4MHB4O1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgfVxuICAgIDpob3N0IDo6bmctZGVlcCBid2F5cy1ncmlkIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDQ4MHB4O1xuICAgICAgbWluLWhlaWdodDogNDgwcHg7XG4gICAgICAtLXVnLWZvb3Rlci1iZzogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmOGZhZmMpO1xuICAgICAgLS11Zy1mb290ZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LXNlY29uZGFyeSwgIzMzNDE1NSk7XG4gICAgICAtLXVnLWhlYWRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgICAgLS11Zy1ib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgLS11Zy1mb250LWZhbWlseTogdmFyKC0tcnB0LWZvbnQtZmFtaWx5LCBpbmhlcml0KTtcbiAgICAgIC0tdWctZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIC0tdWctaGVhZGVyLWZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgfVxuICAgIDpob3N0IDo6bmctZGVlcCAudWctd3JhcHBlciB7XG4gICAgICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcbiAgICAgIG1pbi1oZWlnaHQ6IDQ4MHB4ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIDpob3N0IDo6bmctZGVlcCAudWctdmlld3BvcnQge1xuICAgICAgbWluLWhlaWdodDogMzUwcHggIWltcG9ydGFudDtcbiAgICB9XG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy1ib3R0b20tYmFyLFxuICAgIDpob3N0IDo6bmctZGVlcCB1Zy1wYWdpbmF0aW9uIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKSAhaW1wb3J0YW50O1xuICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpICFpbXBvcnRhbnQ7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtbXV0ZWQsICM2NDc0OGIpICFpbXBvcnRhbnQ7XG4gICAgICBmb250LWZhbWlseTogdmFyKC0tcnB0LWZvbnQtZmFtaWx5LCBpbmhlcml0KSAhaW1wb3J0YW50O1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKSAhaW1wb3J0YW50O1xuICAgIH1cbiAgICA6aG9zdCA6Om5nLWRlZXAgLnVnLXN0YXR1cy1iYXItY29udGVudCxcbiAgICA6aG9zdCA6Om5nLWRlZXAgLnVnLXBhZ2luYXRpb24taW5mbyxcbiAgICA6aG9zdCA6Om5nLWRlZXAgLnVnLXBhZ2UtaW5mbyB7XG4gICAgICBmb250LWZhbWlseTogdmFyKC0tcnB0LWZvbnQtZmFtaWx5LCBpbmhlcml0KSAhaW1wb3J0YW50O1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKSAhaW1wb3J0YW50O1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMCAhaW1wb3J0YW50O1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKSAhaW1wb3J0YW50O1xuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcyAhaW1wb3J0YW50O1xuICAgIH1cbiAgICA6aG9zdCA6Om5nLWRlZXAgLnVnLXBhZ2Utc2l6ZSB7XG4gICAgICBmb250LWZhbWlseTogdmFyKC0tcnB0LWZvbnQtZmFtaWx5LCBpbmhlcml0KSAhaW1wb3J0YW50O1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKSAhaW1wb3J0YW50O1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMCAhaW1wb3J0YW50O1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKSAhaW1wb3J0YW50O1xuICAgIH1cbiAgICA6aG9zdCA6Om5nLWRlZXAgLnVnLXBhZ2Utc2l6ZSBzZWxlY3Qge1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSkgIWltcG9ydGFudDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSkgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSkgIWltcG9ydGFudDtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZmZmZmZmKSAhaW1wb3J0YW50O1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMtc20sIDRweCkgIWltcG9ydGFudDtcbiAgICB9XG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy10b3RhbC1yb3cge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmOGZhZmMpICFpbXBvcnRhbnQ7XG4gICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSkgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKSAhaW1wb3J0YW50O1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXMgIWltcG9ydGFudDtcbiAgICB9XG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy10b3RhbC1yb3ctbGFiZWwge1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS14cywgMC42ODc1cmVtKSAhaW1wb3J0YW50O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMCAhaW1wb3J0YW50O1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZSAhaW1wb3J0YW50O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbSAhaW1wb3J0YW50O1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKSAhaW1wb3J0YW50O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmOGZhZmMpICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIDpob3N0IDo6bmctZGVlcCAudWctdG90YWwtY2VsbCB7XG4gICAgICBmb250LWZhbWlseTogdmFyKC0tcnB0LWZvbnQtZmFtaWx5LCBpbmhlcml0KSAhaW1wb3J0YW50O1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKSAhaW1wb3J0YW50O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMCAhaW1wb3J0YW50O1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKSAhaW1wb3J0YW50O1xuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcyAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAucnB0LXRhYmxlLWNhcmQge1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLWJnLCAjZmZmZmZmKTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMtbGcsIDhweCk7XG4gICAgICBib3gtc2hhZG93OiB2YXIoLS1ycHQtYm94LXNoYWRvdywgMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wNSkpO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB9XG4gICAgLnJwdC10YWJsZS10b29sYmFyIHtcbiAgICAgIHBhZGRpbmc6IDEycHggMTZweDtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKTtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIH1cbiAgICAucnB0LXRhYmxlLXRpdGxlIHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtO1xuICAgIH1cbiAgICAucnB0LXRhYmxlLXJlc3BvbnNpdmUge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgIH1cbiAgICAucnB0LXRhYmxlIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1iYXNlLCAwLjg3NXJlbSk7XG4gICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIH1cbiAgICAucnB0LXRoIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKTtcbiAgICAgIHBhZGRpbmc6IDEwcHggMTRweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNDc1NTY5KTtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICB9XG4gICAgLnJwdC10aC5zb3J0YWJsZSB7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuICAgIC5ycHQtdGguc29ydGFibGU6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UtaG92ZXIsICNmMWY1ZjkpO1xuICAgIH1cbiAgICAucnB0LXRoLWNvbnRlbnQge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDRweDtcbiAgICB9XG4gICAgLnJwdC1zb3J0LWluZGljYXRvciB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgIH1cbiAgICAucnB0LXRoLW51bSwgLnJwdC10ZC1udW0ge1xuICAgICAgd2lkdGg6IDQ4cHg7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtbXV0ZWQsICM5NGEzYjgpO1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICB9XG4gICAgLnJwdC10aC1jYiwgLnJwdC10ZC1jYiB7XG4gICAgICB3aWR0aDogNDJweDtcbiAgICAgIG1pbi13aWR0aDogNDJweDtcbiAgICAgIG1heC13aWR0aDogNDJweDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIHBhZGRpbmc6IDhweCAxMHB4O1xuICAgIH1cbiAgICAucnB0LWNoZWNrYm94IHtcbiAgICAgIHdpZHRoOiAxNXB4O1xuICAgICAgaGVpZ2h0OiAxNXB4O1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgYWNjZW50LWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbiAgICAucnB0LXRkIHtcbiAgICAgIHBhZGRpbmc6IDEwcHggMTRweDtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjZTJlOGYwKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzFlMjkzYik7XG4gICAgfVxuICAgIC5ycHQtdHI6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UtaG92ZXIsICNmOGZhZmMpO1xuICAgIH1cbiAgICAucnB0LXRyLmlzLXNlbGVjdGVkIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlZmY2ZmY7XG4gICAgfVxuICAgIC5ycHQtdHIuaXMtc2VsZWN0ZWQ6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2RiZWFmZTtcbiAgICB9XG4gICAgLnJwdC10ci5pcy1jbGlja2FibGUge1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIH1cbiAgICAucnB0LXRyLmlzLWNsaWNrYWJsZTpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjFmNWY5O1xuICAgIH1cbiAgICAucnB0LXRkLmlzLWNsaWNrYWJsZS1jZWxsIHtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG4gICAgLnJwdC1jZWxsLWFjdGlvbi1saW5rIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgICB0ZXh0LXVuZGVybGluZS1vZmZzZXQ6IDJweDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHRyYW5zaXRpb246IGNvbG9yIDE1MG1zIGVhc2U7XG4gICAgfVxuICAgIC5ycHQtY2VsbC1hY3Rpb24tbGluazpob3ZlciB7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnktaG92ZXIsICMxZDRlZDgpO1xuICAgIH1cbiAgICAucnB0LWVtcHR5LW1lc3NhZ2Uge1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgcGFkZGluZzogNDBweCAyMHB4O1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjOTRhM2I4KTtcbiAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICB9XG4gICAgLnJwdC10Zm9vdC1yb3cge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmOGZhZmMpO1xuICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgIH1cbiAgICAucnB0LXRkLWFnZ3JlZ2F0ZSB7XG4gICAgICBwYWRkaW5nOiA4cHggMTRweDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgICB9XG4gICAgLnJwdC1hZ2dyZWdhdGUtd3JhcCB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgICAgIGdhcDogNnB4O1xuICAgIH1cbiAgICAucnB0LWFnZ3JlZ2F0ZS13cmFwLmlzLXJpZ2h0IHtcbiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gICAgLnJwdC1hZ2dyZWdhdGUtd3JhcC5pcy1jZW50ZXIge1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gICAgLnJwdC1hZ2dyZWdhdGUtbGFiZWwge1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXhzLCAwLjY4NzVyZW0pO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICB9XG4gICAgLnJwdC1hZ2dyZWdhdGUtdmFsdWUge1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICAgIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ3RudW0nO1xuICAgIH1cbiAgICAucnB0LXBhZ2luYXRpb24tYmFyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgcGFkZGluZzogMTBweCAxNnB4O1xuICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXItc3VidGxlLCAjZTJlOGYwKTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKTtcbiAgICB9XG4gICAgLnJwdC1wYWdlLWluZm8ge1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtbXV0ZWQsICM2NDc0OGIpO1xuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICB9XG4gICAgLnJwdC1wYWdlLWJ1dHRvbnMge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGdhcDogOHB4O1xuICAgIH1cbiAgICAucnB0LXBhZ2UtYnRuIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogNXB4O1xuICAgICAgcGFkZGluZzogNHB4IDEwcHg7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pO1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1zZWNvbmRhcnksICMzMzQxNTUpO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmZmZmZmYpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cy1zbSwgNHB4KTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHRyYW5zaXRpb246IGFsbCB2YXIoLS1ycHQtdHJhbnNpdGlvbi1zcGVlZCwgMTUwbXMpIGVhc2U7XG4gICAgfVxuICAgIC5ycHQtcGFnZS1idG46aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UtaG92ZXIsICNmMWY1ZjkpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLWhvdmVyLCAjOTRhM2I4KTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgfVxuICAgIC5ycHQtcGFnZS1idG46ZGlzYWJsZWQge1xuICAgICAgb3BhY2l0eTogMC41O1xuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICB9XG4gIGBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUmVwb3J0R3JpZEJyaWRnZUNvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0ZWRHcmlkID0gaW5qZWN0KEdSSURfQ09NUE9ORU5ULCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0b3JhZ2UgPSBpbmplY3QoUmVwb3J0U3RvcmFnZVNlcnZpY2UsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKHRoaXMuc3RvcmFnZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbGVnYWN5RGVmYXVsdCA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdid2F5c19ncmlkX3JlcG9ydF9zdGF0ZV9kZWZhdWx0Jyk7XG4gICAgICAgIGlmIChsZWdhY3lEZWZhdWx0ICYmICFsZWdhY3lEZWZhdWx0LmluY2x1ZGVzKCdfdmVyc2lvbl8nKSkge1xuICAgICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKCdid2F5c19ncmlkX3JlcG9ydF9zdGF0ZV9kZWZhdWx0Jyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBTaWxlbnRseSBpZ25vcmUgcmVzdHJpY3RlZCBzdG9yYWdlIGVudmlyb25tZW50cyAoZS5nLiBzYW5kYm94ZWQgaWZyYW1lcylcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWFkb25seSBncmlkRGVmaW5pdGlvbiA9IGlucHV0LnJlcXVpcmVkPFJlcG9ydEdyaWREZWZpbml0aW9uPigpO1xuICByZWFkb25seSBkYXRhID0gaW5wdXQ8dW5rbm93bltdPihbXSk7XG5cbiAgcmVhZG9ubHkgZ3JpZFN0YXRlQ2hhbmdlID0gb3V0cHV0PGFueT4oKTtcbiAgcmVhZG9ubHkgY29sdW1uRGVmc0NoYW5nZSA9IG91dHB1dDxhbnk+KCk7XG4gIHJlYWRvbmx5IHJvd0NsaWNrID0gb3V0cHV0PHsgcm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjsgY29sdW1uPzogR3JpZENvbHVtbkRlZmluaXRpb247IGV2ZW50PzogTW91c2VFdmVudCB9PigpO1xuICByZWFkb25seSBzZWxlY3Rpb25DaGFuZ2UgPSBvdXRwdXQ8YW55W10+KCk7XG5cbiAgcmVhZG9ubHkgY3VzdG9tR3JpZENvbXBvbmVudCA9IGNvbXB1dGVkPFR5cGU8dW5rbm93bj4gfCBudWxsPigoKSA9PiB0aGlzLmluamVjdGVkR3JpZCA/PyBudWxsKTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWRSb3dzID0gc2lnbmFsPGFueVtdPihbXSk7XG5cbiAgcmVhZG9ubHkgaGFzUm93Q2xpY2tBY3Rpb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZGVmID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpO1xuICAgIHJldHVybiAhIShcbiAgICAgIGRlZj8ucm93Q2xpY2tBY3Rpb24gfHxcbiAgICAgIGRlZj8ub3B0aW9ucz8ucm93Q2xpY2tBY3Rpb24gfHxcbiAgICAgIHRoaXMudmlzaWJsZUNvbHVtbnMoKS5zb21lKChjKSA9PiAhIWMuYWN0aW9uKVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGlzQ2hlY2tib3hTZWxlY3Rpb25FbmFibGVkID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLmdyaWREZWZpbml0aW9uKCk/Lm9wdGlvbnM7XG4gICAgaWYgKG9wdHM/LmNoZWNrYm94U2VsZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBvcHRzLmNoZWNrYm94U2VsZWN0aW9uO1xuICAgIH1cbiAgICBpZiAob3B0cz8uc2VsZWN0YWJsZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnZpc2libGVDb2x1bW5zKCkuc29tZSgoYykgPT4gYy5jaGVja2JveFNlbGVjdGlvbik7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGVmZmVjdGl2ZVJvd1NlbGVjdGlvbiA9IGNvbXB1dGVkPCdzaW5nbGUnIHwgJ211bHRpcGxlJz4oKCkgPT4ge1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLmdyaWREZWZpbml0aW9uKCk/Lm9wdGlvbnM7XG4gICAgcmV0dXJuIG9wdHM/LnNlbGVjdGlvbk1vZGUgfHwgb3B0cz8ucm93U2VsZWN0aW9uIHx8ICdtdWx0aXBsZSc7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGlzSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb25FbmFibGVkID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgIGlmICh0aGlzLmVmZmVjdGl2ZVJvd1NlbGVjdGlvbigpID09PSAnc2luZ2xlJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBvcHRzID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpPy5vcHRpb25zO1xuICAgIGlmIChvcHRzPy5oZWFkZXJDaGVja2JveFNlbGVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gb3B0cy5oZWFkZXJDaGVja2JveFNlbGVjdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaXNDaGVja2JveFNlbGVjdGlvbkVuYWJsZWQoKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgaXNTZWxlY3Rpb25FbmFibGVkID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLmdyaWREZWZpbml0aW9uKCk/Lm9wdGlvbnM7XG4gICAgcmV0dXJuICEhKG9wdHM/LnNlbGVjdGFibGUgfHwgb3B0cz8uY2hlY2tib3hTZWxlY3Rpb24gfHwgdGhpcy52aXNpYmxlQ29sdW1ucygpLnNvbWUoKGMpID0+IGMuY2hlY2tib3hTZWxlY3Rpb24pKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc29ydENvbHVtbiA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgc29ydERpcmVjdGlvbiA9IHNpZ25hbDwnYXNjJyB8ICdkZXNjJz4oJ2FzYycpO1xuICByZWFkb25seSBjdXJyZW50UGFnZSA9IHNpZ25hbDxudW1iZXI+KDEpO1xuICByZWFkb25seSB2aXNpYmxlQ29sdW1ucyA9IGNvbXB1dGVkPEdyaWRDb2x1bW5EZWZpbml0aW9uW10+KCgpID0+IHtcbiAgICBjb25zdCBkZWZpbmVkID0gKHRoaXMuZ3JpZERlZmluaXRpb24oKT8uY29sdW1ucyA/PyBbXSkuZmlsdGVyKChjKSA9PiBjLnZpc2libGUgIT09IGZhbHNlKTtcbiAgICBjb25zdCByb3dzID0gdGhpcy5kYXRhKCk7XG4gICAgaWYgKHJvd3MgJiYgcm93cy5sZW5ndGggPiAwICYmIHR5cGVvZiByb3dzWzBdID09PSAnb2JqZWN0JyAmJiByb3dzWzBdICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBmaXJzdFJvdyA9IHJvd3NbMF0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZmlyc3RSb3cpO1xuICAgICAgY29uc3QgbWF0Y2hlc0FueSA9IGRlZmluZWQuc29tZSgoYykgPT4ga2V5cy5pbmNsdWRlcyhjLmZpZWxkKSk7XG4gICAgICAvLyBJZiBubyBjb2x1bW5zIGFyZSBkZWZpbmVkLCBvciB0aGUgZGVmaW5lZCBjb2x1bW5zIGRvbid0IG1hdGNoIGFueSBmaWVsZCBpbiB0aGUgZGF0YSAoZS5nLiBkdW1teSBpZC9uYW1lIGRlZmF1bHRzKTpcbiAgICAgIGlmIChkZWZpbmVkLmxlbmd0aCA9PT0gMCB8fCAhbWF0Y2hlc0FueSkge1xuICAgICAgICByZXR1cm4ga2V5cy5tYXAoKGspID0+ICh7XG4gICAgICAgICAgZmllbGQ6IGssXG4gICAgICAgICAgbGFiZWw6IGh1bWFuaXplSWRlbnRpZmllcihrKSxcbiAgICAgICAgICBkYXRhVHlwZTogdHlwZW9mIGZpcnN0Um93W2tdID09PSAnbnVtYmVyJyA/ICdudW1iZXInIDogdHlwZW9mIGZpcnN0Um93W2tdID09PSAnYm9vbGVhbicgPyAnYm9vbGVhbicgOiAnc3RyaW5nJyxcbiAgICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkZWZpbmVkO1xuICB9KTtcblxuICByZWFkb25seSBicmlkZ2VkQ29sdW1ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBpc0dyaWRDaGVja2JveCA9IHRoaXMuaXNDaGVja2JveFNlbGVjdGlvbkVuYWJsZWQoKTtcbiAgICBjb25zdCBpc0dyaWRIZWFkZXJDaGVja2JveCA9IHRoaXMuaXNIZWFkZXJDaGVja2JveFNlbGVjdGlvbkVuYWJsZWQoKTtcbiAgICBjb25zdCBoYXNFeHBsaWNpdENvbENoZWNrYm94ID0gdGhpcy52aXNpYmxlQ29sdW1ucygpLnNvbWUoKGMpID0+IGMuY2hlY2tib3hTZWxlY3Rpb24pO1xuXG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUNvbHVtbnMoKS5tYXAoKGNvbCwgaWR4KSA9PiB7XG4gICAgICBsZXQgd2lkdGhOdW06IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgIGlmICh0eXBlb2YgY29sLndpZHRoID09PSAnc3RyaW5nJyAmJiBjb2wud2lkdGguZW5kc1dpdGgoJ3B4JykpIHtcbiAgICAgICAgd2lkdGhOdW0gPSBwYXJzZUludChjb2wud2lkdGgsIDEwKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIChjb2wud2lkdGggYXMgdW5rbm93bikgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHdpZHRoTnVtID0gY29sLndpZHRoIGFzIHVua25vd24gYXMgbnVtYmVyO1xuICAgICAgfVxuXG4gICAgICBsZXQgY29sQ2hlY2tib3hTZWxlY3Rpb246IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBjb2wuY2hlY2tib3hTZWxlY3Rpb247XG4gICAgICBsZXQgY29sSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb246IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBjb2wuaGVhZGVyQ2hlY2tib3hTZWxlY3Rpb247XG5cbiAgICAgIGlmICghaGFzRXhwbGljaXRDb2xDaGVja2JveCAmJiBpc0dyaWRDaGVja2JveCAmJiBpZHggPT09IDApIHtcbiAgICAgICAgY29sQ2hlY2tib3hTZWxlY3Rpb24gPSB0cnVlO1xuICAgICAgICBjb2xIZWFkZXJDaGVja2JveFNlbGVjdGlvbiA9IGlzR3JpZEhlYWRlckNoZWNrYm94O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5jb2wsXG4gICAgICAgIGhlYWRlck5hbWU6IGNvbC5sYWJlbCwgLy8gQldheXMtZ3JpZCAvIEFHIEdyaWQgc3RhbmRhcmRcbiAgICAgICAgaGVhZGVyOiBjb2wubGFiZWwsXG4gICAgICAgIHRpdGxlOiBjb2wubGFiZWwsXG4gICAgICAgIGhpZGU6IGNvbC52aXNpYmxlID09PSBmYWxzZSxcbiAgICAgICAgd2lkdGg6IHdpZHRoTnVtLFxuICAgICAgICBhZ2dGdW5jOiBjb2wuYWdncmVnYXRlICYmIGNvbC5hZ2dyZWdhdGUgIT09ICdub25lJyA/IGNvbC5hZ2dyZWdhdGUgOiB1bmRlZmluZWQsXG4gICAgICAgIGNoZWNrYm94U2VsZWN0aW9uOiBjb2xDaGVja2JveFNlbGVjdGlvbixcbiAgICAgICAgaGVhZGVyQ2hlY2tib3hTZWxlY3Rpb246IGNvbEhlYWRlckNoZWNrYm94U2VsZWN0aW9uLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZ3JpZEluc3RhbmNlS2V5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGRzID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpPy5kYXRhU291cmNlSWQgfHwgJ2N1c3RvbSc7XG4gICAgY29uc3QgY29scyA9IHRoaXMudmlzaWJsZUNvbHVtbnMoKS5tYXAoKGMpID0+IGMuZmllbGQpLmpvaW4oJ18nKTtcbiAgICByZXR1cm4gYCR7ZHN9XyR7Y29sc31gO1xuICB9KTtcblxuICByZWFkb25seSBncmlkU3RhdGVLZXkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZHMgPSB0aGlzLmdyaWREZWZpbml0aW9uKCk/LmRhdGFTb3VyY2VJZCB8fCAnY3VzdG9tJztcbiAgICBjb25zdCBjb2xzID0gdGhpcy52aXNpYmxlQ29sdW1ucygpLm1hcCgoYykgPT4gYy5maWVsZCkuc2xpY2UoMCwgNSkuam9pbignXycpO1xuICAgIHJldHVybiBgcnB0XyR7ZHN9XyR7Y29scyB8fCAnZ3JpZCd9YDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZ3JpZENvbmZpZyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpPy5vcHRpb25zIHx8IHt9O1xuICAgIGNvbnN0IHJvd1NlbCA9IHRoaXMuZWZmZWN0aXZlUm93U2VsZWN0aW9uKCk7XG4gICAgY29uc3QgaGFzQ2hlY2tib3ggPSB0aGlzLmlzQ2hlY2tib3hTZWxlY3Rpb25FbmFibGVkKCk7XG4gICAgY29uc3QgaGFzSGVhZGVyQ2hlY2tib3ggPSB0aGlzLmlzSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb25FbmFibGVkKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2lkZUJhcjogb3B0cy5zaWRlQmFyICE9PSB1bmRlZmluZWQgPyBvcHRzLnNpZGVCYXIgOiB0cnVlLFxuICAgICAgc3RhdHVzQmFyOiBvcHRzLnN0YXR1c0JhciAhPT0gdW5kZWZpbmVkID8gb3B0cy5zdGF0dXNCYXIgOiB0cnVlLFxuICAgICAgZ2xvYmFsU2VhcmNoOiBvcHRzLmdsb2JhbFNlYXJjaCAhPT0gdW5kZWZpbmVkID8gb3B0cy5nbG9iYWxTZWFyY2ggOiB0cnVlLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIHJvd1NlbGVjdGlvbjogcm93U2VsLFxuICAgICAgc2VsZWN0aW9uTW9kZTogcm93U2VsLFxuICAgICAgY2hlY2tib3hTZWxlY3Rpb246IGhhc0NoZWNrYm94LFxuICAgICAgaGVhZGVyQ2hlY2tib3hTZWxlY3Rpb246IGhhc0hlYWRlckNoZWNrYm94LFxuICAgICAgc3RhdGVLZXk6IHRoaXMuZ3JpZFN0YXRlS2V5KCksXG4gICAgfTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZ3JpZFJlcG9ydFN0YXRlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLmdyaWREZWZpbml0aW9uKCk/Lm9wdGlvbnM7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbHVtbkdyb3VwRGVmczogbnVsbCxcbiAgICAgIGNvbHVtbkRlZnM6IHRoaXMuYnJpZGdlZENvbHVtbnMoKSxcbiAgICAgIHNvcnRNb2RlbDogKG9wdHM/LnNvcnRNb2RlbCBhcyBhbnkpIHx8IFtdLFxuICAgICAgZ3JvdXBNb2RlbDogb3B0cz8uZ3JvdXBNb2RlbCB8fCBbXSxcbiAgICAgIGFjdGl2ZUZpbHRlcnM6IHt9LFxuICAgICAgaGlnaGxpZ2h0UnVsZXM6IFtdLFxuICAgIH07XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGdyaWRJbnB1dHMgPSBjb21wdXRlZCgoKSA9PiAoe1xuICAgIGNvbHVtbnM6IHRoaXMuYnJpZGdlZENvbHVtbnMoKSxcbiAgICBjb2x1bW5EZWZzOiB0aGlzLmJyaWRnZWRDb2x1bW5zKCksXG4gICAgcm93RGF0YTogdGhpcy5kYXRhKCksXG4gICAgY29uZmlnOiB0aGlzLmdyaWRDb25maWcoKSxcbiAgICByZXBvcnRTdGF0ZTogdGhpcy5ncmlkUmVwb3J0U3RhdGUoKSxcbiAgICBwYWdpbmF0aW9uOiB0aGlzLmdyaWREZWZpbml0aW9uKCkub3B0aW9ucz8ucGFnaW5hdGlvbiAhPT0gZmFsc2UsXG4gICAgcGFnZVNpemU6IHRoaXMuZ3JpZERlZmluaXRpb24oKS5vcHRpb25zPy5wYWdlU2l6ZSA/PyAxMCxcbiAgICByb3dTZWxlY3Rpb246IHRoaXMuZWZmZWN0aXZlUm93U2VsZWN0aW9uKCksXG4gIH0pKTtcblxuICByZWFkb25seSBzaG93Um93TnVtYmVycyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gISF0aGlzLmdyaWREZWZpbml0aW9uKCkub3B0aW9ucz8uc2hvd1Jvd051bWJlcnM7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGlzUGFnaW5hdGlvbkVuYWJsZWQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZ3JpZERlZmluaXRpb24oKS5vcHRpb25zPy5wYWdpbmF0aW9uICE9PSBmYWxzZTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcGFnZVNpemUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZ3JpZERlZmluaXRpb24oKS5vcHRpb25zPy5wYWdlU2l6ZSA/PyAxMDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgY29sU3BhbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlQ29sdW1ucygpLmxlbmd0aCArICh0aGlzLnNob3dSb3dOdW1iZXJzKCkgPyAxIDogMCkgKyAodGhpcy5pc1NlbGVjdGlvbkVuYWJsZWQoKSA/IDEgOiAwKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgaGFzQWdncmVnYXRlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5ncmlkRGVmaW5pdGlvbigpLm9wdGlvbnM/LnNob3dGb290ZXIgJiZcbiAgICAgIHRoaXMudmlzaWJsZUNvbHVtbnMoKS5zb21lKChjKSA9PiBjLmFnZ3JlZ2F0ZSAmJiBjLmFnZ3JlZ2F0ZSAhPT0gJ25vbmUnKVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNvcnRlZERhdGEgPSBjb21wdXRlZDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPigoKSA9PiB7XG4gICAgY29uc3QgcmF3ID0gKHRoaXMuZGF0YSgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+W10pIHx8IFtdO1xuICAgIGNvbnN0IGNvbCA9IHRoaXMuc29ydENvbHVtbigpO1xuICAgIGNvbnN0IGRpciA9IHRoaXMuc29ydERpcmVjdGlvbigpO1xuXG4gICAgaWYgKCFjb2wpIHJldHVybiByYXc7XG5cbiAgICByZXR1cm4gWy4uLnJhd10uc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgdmFsQSA9IGFbY29sXTtcbiAgICAgIGNvbnN0IHZhbEIgPSBiW2NvbF07XG4gICAgICBpZiAodmFsQSA9PSBudWxsICYmIHZhbEIgPT0gbnVsbCkgcmV0dXJuIDA7XG4gICAgICBpZiAodmFsQSA9PSBudWxsKSByZXR1cm4gMTtcbiAgICAgIGlmICh2YWxCID09IG51bGwpIHJldHVybiAtMTtcbiAgICAgIGlmICh2YWxBIDwgdmFsQikgcmV0dXJuIGRpciA9PT0gJ2FzYycgPyAtMSA6IDE7XG4gICAgICBpZiAodmFsQSA+IHZhbEIpIHJldHVybiBkaXIgPT09ICdhc2MnID8gMSA6IC0xO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHRvdGFsUGFnZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKCF0aGlzLmlzUGFnaW5hdGlvbkVuYWJsZWQoKSkgcmV0dXJuIDE7XG4gICAgY29uc3QgbGVuID0gdGhpcy5zb3J0ZWREYXRhKCkubGVuZ3RoO1xuICAgIHJldHVybiBNYXRoLm1heCgxLCBNYXRoLmNlaWwobGVuIC8gdGhpcy5wYWdlU2l6ZSgpKSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHBhZ2luYXRlZERhdGEgPSBjb21wdXRlZDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPigoKSA9PiB7XG4gICAgY29uc3Qgc29ydGVkID0gdGhpcy5zb3J0ZWREYXRhKCk7XG4gICAgaWYgKCF0aGlzLmlzUGFnaW5hdGlvbkVuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuIHNvcnRlZDtcbiAgICB9XG4gICAgY29uc3Qgc3RhcnQgPSAodGhpcy5jdXJyZW50UGFnZSgpIC0gMSkgKiB0aGlzLnBhZ2VTaXplKCk7XG4gICAgcmV0dXJuIHNvcnRlZC5zbGljZShzdGFydCwgc3RhcnQgKyB0aGlzLnBhZ2VTaXplKCkpO1xuICB9KTtcblxuICBnZXRKdXN0aWZ5Q29udGVudChhbGlnbj86ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0Jyk6IHN0cmluZyB7XG4gICAgaWYgKGFsaWduID09PSAncmlnaHQnKSByZXR1cm4gJ2ZsZXgtZW5kJztcbiAgICBpZiAoYWxpZ24gPT09ICdjZW50ZXInKSByZXR1cm4gJ2NlbnRlcic7XG4gICAgcmV0dXJuICdmbGV4LXN0YXJ0JztcbiAgfVxuXG4gIHRvZ2dsZVNvcnQoY29sOiBHcmlkQ29sdW1uRGVmaW5pdGlvbik6IHZvaWQge1xuICAgIGlmIChjb2wuc29ydGFibGUgPT09IGZhbHNlKSByZXR1cm47XG4gICAgaWYgKHRoaXMuc29ydENvbHVtbigpID09PSBjb2wuZmllbGQpIHtcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbi5zZXQodGhpcy5zb3J0RGlyZWN0aW9uKCkgPT09ICdhc2MnID8gJ2Rlc2MnIDogJ2FzYycpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNvcnRDb2x1bW4uc2V0KGNvbC5maWVsZCk7XG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24uc2V0KCdhc2MnKTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50UGFnZS5zZXQoMSk7XG4gIH1cblxuICBwcmV2UGFnZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZSgpID4gMSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZS51cGRhdGUoKHApID0+IHAgLSAxKTtcbiAgICB9XG4gIH1cblxuICBuZXh0UGFnZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZSgpIDwgdGhpcy50b3RhbFBhZ2VzKCkpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UudXBkYXRlKChwKSA9PiBwICsgMSk7XG4gICAgfVxuICB9XG5cbiAgZm9ybWF0VmFsdWUodmFsdWU6IHVua25vd24sIGNvbDogR3JpZENvbHVtbkRlZmluaXRpb24pOiBzdHJpbmcge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gJyc7XG4gICAgaWYgKGNvbC5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5Jykge1xuICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgIHJldHVybiBpc05hTihudW0pID8gU3RyaW5nKHZhbHVlKSA6IGAkJHtudW0udG9Mb2NhbGVTdHJpbmcodW5kZWZpbmVkLCB7IG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMiwgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAyIH0pfWA7XG4gICAgfVxuICAgIGlmIChjb2wuZGF0YVR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsdWUpO1xuICAgICAgcmV0dXJuIGlzTmFOKG51bSkgPyBTdHJpbmcodmFsdWUpIDogbnVtLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgfVxuICAgIGlmIChjb2wuZGF0YVR5cGUgPT09ICdkYXRlJyAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBkID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgcmV0dXJuIGlzTmFOKGQuZ2V0VGltZSgpKSA/IFN0cmluZyh2YWx1ZSkgOiBkLnRvTG9jYWxlRGF0ZVN0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfVxuXG4gIGNvbXB1dGVBZ2dyZWdhdGUoY29sOiBHcmlkQ29sdW1uRGVmaW5pdGlvbik6IHN0cmluZyB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuc29ydGVkRGF0YSgpO1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcwJztcblxuICAgIGlmIChjb2wuYWdncmVnYXRlID09PSAnY291bnQnKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKGRhdGEubGVuZ3RoKTtcbiAgICB9XG5cbiAgICBjb25zdCBudW1iZXJzID0gZGF0YVxuICAgICAgLm1hcCgocm93KSA9PiBOdW1iZXIocm93W2NvbC5maWVsZF0pKVxuICAgICAgLmZpbHRlcigobikgPT4gIWlzTmFOKG4pKTtcblxuICAgIGlmIChudW1iZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcwJztcblxuICAgIGlmIChjb2wuYWdncmVnYXRlID09PSAnc3VtJykge1xuICAgICAgY29uc3Qgc3VtID0gbnVtYmVycy5yZWR1Y2UoKGFjYywgbikgPT4gYWNjICsgbiwgMCk7XG4gICAgICByZXR1cm4gY29sLmRhdGFUeXBlID09PSAnY3VycmVuY3knID8gYCQke3N1bS50b0ZpeGVkKDIpfWAgOiBzdW0udG9Mb2NhbGVTdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoY29sLmFnZ3JlZ2F0ZSA9PT0gJ2F2ZycpIHtcbiAgICAgIGNvbnN0IGF2ZyA9IG51bWJlcnMucmVkdWNlKChhY2MsIG4pID0+IGFjYyArIG4sIDApIC8gbnVtYmVycy5sZW5ndGg7XG4gICAgICByZXR1cm4gY29sLmRhdGFUeXBlID09PSAnY3VycmVuY3knID8gYCQke2F2Zy50b0ZpeGVkKDIpfWAgOiBhdmcudG9GaXhlZCgyKTtcbiAgICB9XG5cbiAgICBpZiAoY29sLmFnZ3JlZ2F0ZSA9PT0gJ21pbicpIHtcbiAgICAgIGNvbnN0IG1pbiA9IE1hdGgubWluKC4uLm51bWJlcnMpO1xuICAgICAgcmV0dXJuIGNvbC5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5JyA/IGAkJHttaW4udG9GaXhlZCgyKX1gIDogU3RyaW5nKG1pbik7XG4gICAgfVxuXG4gICAgaWYgKGNvbC5hZ2dyZWdhdGUgPT09ICdtYXgnKSB7XG4gICAgICBjb25zdCBtYXggPSBNYXRoLm1heCguLi5udW1iZXJzKTtcbiAgICAgIHJldHVybiBjb2wuZGF0YVR5cGUgPT09ICdjdXJyZW5jeScgPyBgJCR7bWF4LnRvRml4ZWQoMil9YCA6IFN0cmluZyhtYXgpO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIG9uU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGVkOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCByb3dzID0gQXJyYXkuaXNBcnJheShzZWxlY3RlZCkgPyBzZWxlY3RlZCA6IChzZWxlY3RlZCA/IFtzZWxlY3RlZF0gOiBbXSk7XG4gICAgdGhpcy5zZWxlY3RlZFJvd3Muc2V0KHJvd3MpO1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQocm93cyk7XG4gIH1cblxuICBpc1Jvd1NlbGVjdGVkKHJvdzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFJvd3MoKS5pbmNsdWRlcyhyb3cpO1xuICB9XG5cbiAgaXNBbGxTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5wYWdpbmF0ZWREYXRhKCk7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGRhdGEuZXZlcnkoKHIpID0+IHRoaXMuaXNSb3dTZWxlY3RlZChyKSk7XG4gIH1cblxuICBpc1BhcnRpYWxseVNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnBhZ2luYXRlZERhdGEoKTtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBjb3VudCA9IGRhdGEuZmlsdGVyKChyKSA9PiB0aGlzLmlzUm93U2VsZWN0ZWQocikpLmxlbmd0aDtcbiAgICByZXR1cm4gY291bnQgPiAwICYmIGNvdW50IDwgZGF0YS5sZW5ndGg7XG4gIH1cblxuICB0b2dnbGVTZWxlY3RBbGwoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY2hlY2tlZCA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zZWxlY3RlZFJvd3MoKTtcbiAgICBjb25zdCBwYWdlUm93cyA9IHRoaXMucGFnaW5hdGVkRGF0YSgpO1xuICAgIGxldCBuZXh0OiBhbnlbXTtcbiAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgY29uc3Qgc2V0ID0gbmV3IFNldChbLi4uY3VycmVudCwgLi4ucGFnZVJvd3NdKTtcbiAgICAgIG5leHQgPSBBcnJheS5mcm9tKHNldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHQgPSBjdXJyZW50LmZpbHRlcigocikgPT4gIXBhZ2VSb3dzLmluY2x1ZGVzKHIpKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZFJvd3Muc2V0KG5leHQpO1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQobmV4dCk7XG4gIH1cblxuICB0b2dnbGVSb3dTZWxlY3Rpb24ocm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY2hlY2tlZCA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zZWxlY3RlZFJvd3MoKTtcbiAgICBjb25zdCBtb2RlID0gdGhpcy5lZmZlY3RpdmVSb3dTZWxlY3Rpb24oKTtcbiAgICBsZXQgbmV4dDogYW55W107XG4gICAgaWYgKG1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICBuZXh0ID0gY2hlY2tlZCA/IFtyb3ddIDogW107XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgIG5leHQgPSBjdXJyZW50LmluY2x1ZGVzKHJvdykgPyBjdXJyZW50IDogWy4uLmN1cnJlbnQsIHJvd107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0ID0gY3VycmVudC5maWx0ZXIoKHIpID0+IHIgIT09IHJvdyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnNldChuZXh0KTtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KG5leHQpO1xuICB9XG5cbiAgb25Sb3dDbGljayhyb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzU2VsZWN0aW9uRW5hYmxlZCgpKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zZWxlY3RlZFJvd3MoKTtcbiAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLmVmZmVjdGl2ZVJvd1NlbGVjdGlvbigpO1xuICAgICAgbGV0IG5leHQ6IGFueVtdO1xuICAgICAgaWYgKG1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgIG5leHQgPSBbcm93XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHQgPSBjdXJyZW50LmluY2x1ZGVzKHJvdykgPyBjdXJyZW50LmZpbHRlcigocikgPT4gciAhPT0gcm93KSA6IFsuLi5jdXJyZW50LCByb3ddO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3Muc2V0KG5leHQpO1xuICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChuZXh0KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzUm93Q2xpY2tBY3Rpb24oKSkge1xuICAgICAgdGhpcy5yb3dDbGljay5lbWl0KHsgcm93LCBldmVudCB9KTtcbiAgICB9XG4gIH1cblxuICBvbkNlbGxDbGljayhyb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBjb2w6IEdyaWRDb2x1bW5EZWZpbml0aW9uLCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmIChjb2wuYWN0aW9uKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMucm93Q2xpY2suZW1pdCh7IHJvdywgY29sdW1uOiBjb2wsIGV2ZW50IH0pO1xuICAgIH1cbiAgfVxufVxuIl19
|