@universis/ngx-tables 6.0.3 → 6.1.0
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/bundles/universis-ngx-tables.umd.js +4 -4
- package/bundles/universis-ngx-tables.umd.js.map +1 -1
- package/bundles/universis-ngx-tables.umd.min.js +1 -1
- package/bundles/universis-ngx-tables.umd.min.js.map +1 -1
- package/esm2015/lib/components/advanced-table/advanced-table-search.component.js +3 -3
- package/esm2015/lib/components/column-selector/column-selector.component.js +2 -2
- package/esm5/lib/components/advanced-table/advanced-table-search.component.js +3 -3
- package/esm5/lib/components/column-selector/column-selector.component.js +2 -2
- package/fesm2015/universis-ngx-tables.js +4 -4
- package/fesm2015/universis-ngx-tables.js.map +1 -1
- package/fesm5/universis-ngx-tables.js +6 -6
- package/fesm5/universis-ngx-tables.js.map +1 -1
- package/package.json +1 -1
- package/universis-ngx-tables.metadata.json +1 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { __extends, __awaiter, __generator,
|
|
1
|
+
import { __extends, __values, __awaiter, __generator, __assign, __spread } from 'tslib';
|
|
2
2
|
import { template, at, cloneDeep, isEmpty } from 'lodash';
|
|
3
3
|
import { TranslateService, TranslatePipe, TranslateModule } from '@ngx-translate/core';
|
|
4
4
|
import { DatePipe, CommonModule } from '@angular/common';
|
|
5
5
|
import { getNativeName } from 'iso-639-1/build';
|
|
6
6
|
import { ActivatedRoute, Router, NavigationStart, NavigationEnd, RouterModule } from '@angular/router';
|
|
7
|
-
import { Injectable, Directive, Optional, Input, Pipe, Component, ElementRef, ViewChild, ViewEncapsulation, EventEmitter, Output,
|
|
7
|
+
import { Injectable, Directive, Optional, Input, Pipe, Component, ElementRef, ViewChild, ViewEncapsulation, EventEmitter, Output, defineInjectable, inject, NgModule, CUSTOM_ELEMENTS_SCHEMA, HostListener, ChangeDetectorRef, InjectionToken, Inject, Injector, ChangeDetectionStrategy } from '@angular/core';
|
|
8
8
|
import { TemplatePipe, ModalService, ConfigurationService, ErrorService, LoadingService, DIALOG_BUTTONS, ExportSpreadsheetService, UserActivityService, ToastService, UserStorageService, SharedModule } from '@universis/common';
|
|
9
9
|
import { FormControl, FormArray, FormBuilder, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
10
10
|
import { RouterModalOkCancel, RouterModalModule } from '@universis/common/routing';
|
|
@@ -1183,7 +1183,7 @@ var ColumnSelectorComponent = /** @class */ (function (_super) {
|
|
|
1183
1183
|
{ type: Component, args: [{
|
|
1184
1184
|
// tslint:disable-next-line:component-selector
|
|
1185
1185
|
selector: 'app-column-selector',
|
|
1186
|
-
template: "<div>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">{{'Tables.SelectColumns' | translate}}</h5>\n <button (click)=\"cancel()\"\n type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Cancel\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"modal-body pt-0\">\n <div class=\"row\">\n <div class=\"col-12\">\n <p [translate]=\"'Tables.SelectColumnHelp'\"></p>\n <p [translate]=\"'Tables.MoveColumnHelp'\"></p>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-4\">\n <select [formControl]=\"availableColumnsControl\" size=\"10\" class=\"form-select form-control\" multiple aria-label=\"multiple select example\">\n <ng-container *ngIf=\"columns\">\n <ng-container *ngFor=\"let column of columns | orderBy: ['title']\">\n <option class=\"text-wrap\" [value]=\"column.key\">{{column.title}}</option>\n </ng-container>\n </ng-container>\n </select>\n </div>\n <div class=\"col-4 d-flex justify-content-center align-items-center\">\n <div class=\"col-9\">\n <div>\n <button [disabled]=\"!(availableColumnsControl.value && availableColumnsControl.value.length)\" (click)=\"addColumns()\" type=\"button\" class=\"btn btn-primary btn-block\">\n <i class=\"fas fa-plus mr-2\"></i><span [translate]=\"'Tables.AddColumn'\"></span>\n </button>\n </div>\n <div class=\"mt-3\">\n <button [disabled]=\"!(selectedColumnsControl.value && selectedColumnsControl.value.length)\" (click)=\"removeColumns()\" type=\"button\" class=\"btn btn-secondary btn-block\">\n <i class=\"fas fa-minus mr-2\"></i><span [translate]=\"'Tables.RemoveColumn'\"></span>\n </button>\n </div>\n </div>\n </div>\n <div class=\"col-4\">\n <select [formControl]=\"selectedColumnsControl\" size=\"10\" class=\"form-select form-control\" multiple aria-label=\"multiple select example\">\n <ng-container *ngIf=\"selectedColumns\">\n <ng-container *ngFor=\"let column of selectedColumns\">\n <option class=\"text-wrap\" [value]=\"column.key\">{{column.title}}</option>\n </ng-container>\n </ng-container>\n </select>\n <div class=\"d-flex justify-content-center align-items-center\">\n <div class=\"btn-group mt-4\">\n <button #moveUpButton (click)=\"moveUp()\" type=\"button\" class=\"btn btn-primary\">\n <i class=\"fas fa-chevron-up mr-2\"></i><span [translate]=\"'Tables.MoveUp'\"></span>\n </button>\n <button #moveDownButton (click)=\"moveDown()\" type=\"button\" class=\"btn btn-primary ml-2\">\n <i class=\"fas fa-chevron-down mr-2\"></i><span [translate]=\"'Tables.MoveDown'\"></span>\n </button>\n </div>\n </div>\n </div>\n </div>\n
|
|
1186
|
+
template: "<div>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">{{'Tables.SelectColumns' | translate}}</h5>\n <button (click)=\"cancel()\"\n type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Cancel\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"modal-body pt-0\">\n <div class=\"row\">\n <div class=\"col-12\">\n <p [translate]=\"'Tables.SelectColumnHelp'\"></p>\n <p [translate]=\"'Tables.MoveColumnHelp'\"></p>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-4\">\n <select [formControl]=\"availableColumnsControl\" size=\"10\" class=\"form-select form-control\" multiple aria-label=\"multiple select example\">\n <ng-container *ngIf=\"columns\">\n <ng-container *ngFor=\"let column of columns | orderBy: ['title']\">\n <option class=\"text-wrap\" [value]=\"column.key\">{{column.title}}</option>\n </ng-container>\n </ng-container>\n </select>\n </div>\n <div class=\"col-4 d-flex justify-content-center align-items-center\">\n <div class=\"col-9\">\n <div>\n <button [disabled]=\"!(availableColumnsControl.value && availableColumnsControl.value.length)\" (click)=\"addColumns()\" type=\"button\" class=\"btn btn-primary btn-block\">\n <i class=\"fas fa-plus mr-2\"></i><span [translate]=\"'Tables.AddColumn'\"></span>\n </button>\n </div>\n <div class=\"mt-3\">\n <button [disabled]=\"!(selectedColumnsControl.value && selectedColumnsControl.value.length)\" (click)=\"removeColumns()\" type=\"button\" class=\"btn btn-secondary btn-block\">\n <i class=\"fas fa-minus mr-2\"></i><span [translate]=\"'Tables.RemoveColumn'\"></span>\n </button>\n </div>\n </div>\n </div>\n <div class=\"col-4\">\n <select [formControl]=\"selectedColumnsControl\" size=\"10\" class=\"form-select form-control\" multiple aria-label=\"multiple select example\">\n <ng-container *ngIf=\"selectedColumns\">\n <ng-container *ngFor=\"let column of selectedColumns\">\n <option class=\"text-wrap\" [value]=\"column.key\">{{column.title}}</option>\n </ng-container>\n </ng-container>\n </select>\n <div class=\"d-flex justify-content-center align-items-center\">\n <div class=\"btn-group mt-4\">\n <button #moveUpButton [disabled]=\"!(selectedColumnsControl.value && selectedColumnsControl.value.length)\" (click)=\"moveUp()\" type=\"button\" class=\"btn btn-primary\">\n <i class=\"fas fa-chevron-up mr-2\"></i><span [translate]=\"'Tables.MoveUp'\"></span>\n </button>\n <button #moveDownButton [disabled]=\"!(selectedColumnsControl.value && selectedColumnsControl.value.length)\" (click)=\"moveDown()\" type=\"button\" class=\"btn btn-primary ml-2\">\n <i class=\"fas fa-chevron-down mr-2\"></i><span [translate]=\"'Tables.MoveDown'\"></span>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n <div class=\"modal-footer justify-content-end\">\n\n <button [disabled]=\"okButtonDisabled\" (click)=\"ok()\"\n type=\"button\" class=\"btn btn-primary\">\n <i *ngIf=\"changing\" class=\"fa fa-spinner fa-spin mr-1\"></i>\n {{'OK' | translate}}\n </button>\n <button [disabled]=\"cancelButtonDisabled\"\n (click)=\"cancel()\" type=\"button\" [ngClass]=\"cancelButtonClass\" data-dismiss=\"modal\">\n {{'Cancel' | translate}}\n </button>\n </div>\n </div>\n\n",
|
|
1187
1187
|
encapsulation: ViewEncapsulation.Emulated,
|
|
1188
1188
|
styles: ["\n .form-select {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n padding: 5px;\n }\n .form-select * {\n padding: 5px 5px;\n }\n .btn.disabled, .btn:disabled {\n border-color: transparent !important;\n }\n "]
|
|
1189
1189
|
}] }
|
|
@@ -5336,7 +5336,7 @@ var AdvancedTableSearchComponent = /** @class */ (function (_super) {
|
|
|
5336
5336
|
table.query = query;
|
|
5337
5337
|
}
|
|
5338
5338
|
else {
|
|
5339
|
-
if (query != null) {
|
|
5339
|
+
if (query != null && query.getParams()['$filter']) {
|
|
5340
5340
|
/** @type {?} */
|
|
5341
5341
|
var params = query.getParams();
|
|
5342
5342
|
// otherwise set filter params
|
|
@@ -5734,7 +5734,7 @@ var AdvancedTableSearchComponent = /** @class */ (function (_super) {
|
|
|
5734
5734
|
queryParamsHandling: 'merge',
|
|
5735
5735
|
})];
|
|
5736
5736
|
}
|
|
5737
|
-
if (this.table.query) {
|
|
5737
|
+
if (this.table.query && query && query.getParams()['$filter']) {
|
|
5738
5738
|
this.table.query.setParam('$filter', query.getParams()['$filter']);
|
|
5739
5739
|
}
|
|
5740
5740
|
else {
|
|
@@ -7851,4 +7851,4 @@ var TablesModule = /** @class */ (function () {
|
|
|
7851
7851
|
|
|
7852
7852
|
export { AdvancedListComponent, AdvancedRowActionComponent, AdvancedSearchFormComponent, AdvancedSelectComponent, AdvancedSelectService, AdvancedTableConfigurationResolver, AdvancedSearchConfigurationResolver, AdvancedColumnFormatter, NestedPropertyFormatter, ButtonFormatter, LinkFormatter, ActionLinkFormatter, ActionButtonFormatter, ActionSplitButtonFormatter, SelectRowFormatter, TemplateFormatter, TrueFalseFormatter, TranslationFormatter, DateTimeFormatter, NgClassFormatter, LanguageFormatter, COLUMN_FORMATTERS, ExportLimitExceededError, AdvancedTableConfiguration, AdvancedTableComponent, AdvancedTableSettingsComponent, AdvancedTableSearchBaseComponent, AdvancedTableSearchComponent, FORMATTERS, AdvancedFilterValueProvider, AdvancedTableModalBaseTemplate, AdvancedTableModalBaseComponent, SimpleHeaderToolsComponent, TableSimpleHeaderComponent, AdvancedTableNotNullError, AdvancedTableEditorDirective, MAX_EXPORT_ITEMS, BtnExpDirective, AdvancedAggregatorComponent, AdvancedAggregatorListComponent, AddItemsComponent, AdvancedAggregatorPipe, ParseTitlePipe, AdvancedAggregatorService, TablesModule, ActivatedTableService, ColumnSelectorService, ColumnSelectorComponent, tableReducer, initialState, tableInitialState, tableReducers, featureName, getTablesState, selectTable, AdvancedSearchState as ɵa, AdvancedTableState as ɵc, AdvancedSearchRouterState as ɵd };
|
|
7853
7853
|
|
|
7854
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdmVyc2lzLW5neC10YWJsZXMuanMubWFwIiwic291cmNlcyI6WyJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtZmlsdGVyLXZhbHVlLXByb3ZpZGVyLnNlcnZpY2UudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9jb2x1bW4tc2VsZWN0b3IvY29sdW1uLXNlbGVjdG9yLmNvbXBvbmVudC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2NvbHVtbi1zZWxlY3Rvci9jb2x1bW4tc2VsZWN0b3Iuc2VydmljZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi90YWJsZXMuYWN0aXZhdGVkLXRhYmxlLnNlcnZpY2UudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvZGlyZWN0aXZlcy9idG5leHAuZGlyZWN0aXZlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtbGlzdC9hZHZhbmNlZC1saXN0LmNvbXBvbmVudC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLXJvdy1hY3Rpb24vYWR2YW5jZWQtcm93LWFjdGlvbi5jb21wb25lbnQudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1zZWFyY2gtYmFzZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLXNlYXJjaC1mb3JtL2FkdmFuY2VkLXNlYXJjaC1mb3JtLmNvbXBvbmVudC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlLW1vZGFsL2FkdmFuY2VkLXRhYmxlLW1vZGFsLWJhc2UuY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtc2VsZWN0L2FkdmFuY2VkLXNlbGVjdC5jb21wb25lbnQudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC1zZWxlY3QvYWR2YW5jZWQtc2VsZWN0LnNlcnZpY2UudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1yZXNvbHZlcnMudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1zZXR0aW5ncy5jb21wb25lbnQudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1zZWFyY2guY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuZm9ybWF0dGVycy5pbnRlcmZhY2UudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy90YWJsZS1zaW1wbGUtaGVhZGVyL3RhYmxlLXNpbXBsZS1oZWFkZXIuY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2RpcmVjdGl2ZXMvYWR2YW5jZWQtdGFibGUtZWRpdG9yLmRpcmVjdGl2ZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9zZXJ2aWNlcy9hZHZhbmNlZC1hZ2dyZWdhdG9yL2FkdmFuY2VkLWFnZ3JlZ2F0b3Iuc2VydmljZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLWFnZ3JlZ2F0b3IvYWR2YW5jZWQtYWdncmVnYXRvci5jb21wb25lbnQudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC1hZ2dyZWdhdG9yLWxpc3QvYWR2YW5jZWQtYWdncmVnYXRvci1saXN0LmNvbXBvbmVudC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkZC1pdGVtcy9hZGQtaXRlbXMuY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL3BpcGVzL2FkdmFuY2VkLWFnZ3JlZ2F0b3IucGlwZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9waXBlcy9hZHZhbnNlZC1hZ2dyZWdhdG9yLWxpc3QtdGl0bGUtcGFyc2UucGlwZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9pMThuL3RhYmxlcy5lbC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9pMThuL3RhYmxlcy5lbi50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9hY3Rpb25zL3RhYmxlLmFjdGlvbnMudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvcmVkdWNlcnMvaW5kZXgudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvZGlyZWN0aXZlcy9hZHZhbmNlLXRhYmxlLXN0YXRlLmRpcmVjdGl2ZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9kaXJlY3RpdmVzL2FkdmFuY2Utc2VhcmNoLXN0YXRlLmRpcmVjdGl2ZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9kaXJlY3RpdmVzL2FkdmFuY2VkLXNlYXJjaC1yb3V0ZXItc3RhdGUuZGlyZWN0aXZlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL3RhYmxlcy5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdGVtcGxhdGUsIGF0IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vYWR2YW5jZWQtdGFibGUuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0ICogYXMgSVNPNjM5MSBmcm9tICdpc28tNjM5LTEvYnVpbGQnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FeHRyYXMsIFJvdXRlciwgVXJsVHJlZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5kZWNsYXJlIHZhciBqUXVlcnk6IGFueTtcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciBpbXBsZW1lbnRzIFRhYmxlQ29sdW1uQ29uZmlndXJhdGlvbiB7XG5cbiAgcHVibGljIHN0YXRpYyB0ZW1wbGF0ZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIChkYXRhOiBhbnkpID0+IHN0cmluZz4oKTtcblxuICBwcm90ZWN0ZWQgaW5qZWN0b3I/OiBJbmplY3RvcjtcbiAgcHVibGljIGNsYXNzTmFtZT86IHN0cmluZztcbiAgcHVibGljIGRlZmF1bHRDb250ZW50Pzogc3RyaW5nO1xuICBwdWJsaWMgZm9ybWF0U3RyaW5nPzogc3RyaW5nO1xuICBwdWJsaWMgZm9ybWF0dGVyPzogc3RyaW5nO1xuICBwdWJsaWMgaGlkZGVuPzogYm9vbGVhbjtcbiAgcHVibGljIG5hbWU/OiBzdHJpbmc7XG4gIHB1YmxpYyBvcmRlcj86IHN0cmluZztcbiAgcHVibGljIHByb3BlcnR5Pzogc3RyaW5nO1xuICBwdWJsaWMgc29ydGFibGU/OiBib29sZWFuO1xuICBwdWJsaWMgdGl0bGUgPSAnJztcbiAgcHVibGljIGZvcm1hdE9wdGlvbnM/OiBhbnk7XG4gIHB1YmxpYyBhY3Rpb25zPzogQXJyYXk8YW55PjtcblxuICBwdWJsaWMgc3RhdGljIHRlbXBsYXRlKGV4cHI6IHN0cmluZyk6IChkYXRhOiBhbnkpID0+IHN0cmluZyB7XG4gICAgbGV0IHJlc3VsdCA9IEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyLnRlbXBsYXRlQ2FjaGUuZ2V0KGV4cHIpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICByZXN1bHQgPSB0ZW1wbGF0ZShleHByKTtcbiAgICBBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZUNhY2hlLnNldChleHByLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgYWJzdHJhY3QgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55O1xuXG4gIHByb3RlY3RlZCBjcmVhdGVVcmxUcmVlKGRhdGE6IGFueSwgb3B0aW9uczogeyBjb21tYW5kczogYW55W10sIG5hdmlnYXRpb25FeHRyYXM/OiBOYXZpZ2F0aW9uRXh0cmFzIH0pOiBVcmxUcmVlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLmNvbW1hbmRzKSAmJiB0aGlzLmluamVjdG9yKSB7XG4gICAgICBjb25zdCBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUgPSB0aGlzLmluamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgICBjb25zdCByb3V0ZXI6IFJvdXRlciA9IHRoaXMuaW5qZWN0b3IuZ2V0KFJvdXRlcik7XG4gICAgICBjb25zdCBjb21tYW5kcyA9IG9wdGlvbnMuY29tbWFuZHMubWFwKChjb21tYW5kKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgY29tbWFuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUoY29tbWFuZCkoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbW1hbmQub3V0bGV0cykge1xuICAgICAgICAgIGNvbnN0IGNvbW1hbmRPdXRsZXRzID0ge307XG4gICAgICAgICAgT2JqZWN0LmtleXMoY29tbWFuZC5vdXRsZXRzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29tbWFuZC5vdXRsZXRzLCBrZXkpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG91dGxldCA9IGNvbW1hbmQub3V0bGV0c1trZXldO1xuICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvdXRsZXQpKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbW1hbmRPdXRsZXRzLCBrZXksIHtcbiAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBvdXRsZXQubWFwKCh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZSh4KShkYXRhKTtcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb21tYW5kT3V0bGV0cywga2V5LCB7XG4gICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogb3V0bGV0LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG91dGxldHM6IGNvbW1hbmRPdXRsZXRzLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbW1hbmQ7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0ge307XG4gICAgICBsZXQgcmVwbGFjZVVybCA9IHRydWU7XG4gICAgICBjb25zdCBxdWVyeVBhcmFtRXh0cmFzID0gb3B0aW9ucy5uYXZpZ2F0aW9uRXh0cmFzICYmIG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcy5xdWVyeVBhcmFtcztcbiAgICAgIGlmIChxdWVyeVBhcmFtRXh0cmFzKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHF1ZXJ5UGFyYW1FeHRyYXMpLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgdGV4dCA9IHF1ZXJ5UGFyYW1FeHRyYXNba2V5XTtcbiAgICAgICAgICBxdWVyeVBhcmFtc1trZXldID0gQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUodGV4dCkoZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcyAmJiB0eXBlb2Ygb3B0aW9ucy5uYXZpZ2F0aW9uRXh0cmFzLnJlcGxhY2VVcmwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJlcGxhY2VVcmwgPSBvcHRpb25zLm5hdmlnYXRpb25FeHRyYXMucmVwbGFjZVVybDtcbiAgICAgIH1cbiAgICAgIGxldCBza2lwTG9jYXRpb25DaGFuZ2UgPSBmYWxzZTtcbiAgICAgIGlmIChvcHRpb25zLm5hdmlnYXRpb25FeHRyYXMgJiYgdHlwZW9mIG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcy5za2lwTG9jYXRpb25DaGFuZ2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHNraXBMb2NhdGlvbkNoYW5nZSA9IG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcy5za2lwTG9jYXRpb25DaGFuZ2U7XG4gICAgICB9XG5cbiAgICAgIGxldCBmcmFnbWVudDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcyAmJiB0eXBlb2Ygb3B0aW9ucy5uYXZpZ2F0aW9uRXh0cmFzLmZyYWdtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBmcmFnbWVudCA9IG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcy5mcmFnbWVudDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJvdXRlci5jcmVhdGVVcmxUcmVlKGNvbW1hbmRzLFxuICAgICAgICB7XG4gICAgICAgICAgZnJhZ21lbnQsXG4gICAgICAgICAgcmVsYXRpdmVUbzogYWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgICAgcmVwbGFjZVVybCxcbiAgICAgICAgICBza2lwTG9jYXRpb25DaGFuZ2UsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT25BZHZhbmNlZENvbHVtbkFmdGVyUmVuZGVyIHtcbiAgYWZ0ZXJSZW5kZXIoY2VsbDogYW55LCBjZWxsRGF0YTogYW55LCByb3dEYXRhOiBhbnksIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgTmVzdGVkUHJvcGVydHlGb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciB7XG4gIHB1YmxpYyByZW5kZXIoZGF0YSwgdHlwZSwgcm93LCBtZXRhKSB7XG4gICAgLy8gZ2V0IGNvbHVtblxuICAgIGNvbnN0IGNvbHVtbiA9IG1ldGEuc2V0dGluZ3MuYW9Db2x1bW5zW21ldGEuY29sXTtcbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5kYXRhKSB7XG4gICAgICByZXR1cm4gYXQocm93LCBjb2x1bW4uZGF0YS5yZXBsYWNlKC9cXC8vZywgJy4nKSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJ1dHRvbkZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgcHVibGljIHJlbmRlcihkYXRhLCB0eXBlLCByb3csIG1ldGEpIHtcbiAgICBpZiAoZGF0YSA9PSBudWxsIHx8IHRoaXMuaW5qZWN0b3IgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICAvLyBnZXQgZm9ybWF0IG9wdGlvbnNcbiAgICBjb25zdCBmb3JtYXRPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICBidXR0b25DbGFzczogJ2J0biBidG4tZGVmYXVsdCcsXG4gICAgfSwgdGhpcy5mb3JtYXRPcHRpb25zKTtcbiAgICAvLyBnZXQgdGV4dCBjb250ZW50XG4gICAgbGV0IGJ1dHRvblRleHQ6IHN0cmluZztcbiAgICBsZXQgYnV0dG9uVGl0bGUgPSAnJztcbiAgICBpZiAoZm9ybWF0T3B0aW9ucy5idXR0b25UZXh0KSB7XG4gICAgICBidXR0b25UZXh0ID0gdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudChmb3JtYXRPcHRpb25zLmJ1dHRvblRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBidXR0b25UZXh0ID0gZm9ybWF0T3B0aW9ucy5idXR0b25Db250ZW50O1xuICAgIH1cbiAgICBpZiAoZm9ybWF0T3B0aW9ucy5idXR0b25UaXRsZSkge1xuICAgICAgYnV0dG9uVGl0bGUgPSB0aGlzLmluamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKS5pbnN0YW50KGZvcm1hdE9wdGlvbnMuYnV0dG9uVGl0bGUpO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmZvcm1hdE9wdGlvbnMuY29tbWFuZHMpKSB7XG4gICAgICBjb25zdCByb3V0ZXJMaW5rID0gdGhpcy5jcmVhdGVVcmxUcmVlKHJvdywgdGhpcy5mb3JtYXRPcHRpb25zKTtcbiAgICAgIHJldHVybiBgPGEgY2xhc3M9XCIke2Zvcm1hdE9wdGlvbnMuYnV0dG9uQ2xhc3N9XCIgdGl0bGU9XCIke2J1dHRvblRpdGxlfVwiIGhyZWY9XCIjJHtyb3V0ZXJMaW5rfVwiPiR7YnV0dG9uVGV4dH08L2E+YDtcbiAgICB9XG4gICAgLy8gYW5kIHJldHVybiBidXR0b25cbiAgICBjb25zdCBocmVmID0gQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUodGhpcy5mb3JtYXRTdHJpbmcgYXMgc3RyaW5nKShyb3cpO1xuICAgIHJldHVybiBgPGEgY2xhc3M9XCIke2Zvcm1hdE9wdGlvbnMuYnV0dG9uQ2xhc3N9XCIgdGl0bGU9XCIke2J1dHRvblRpdGxlfVwiIGhyZWY9XCIke2hyZWZ9XCI+JHtidXR0b25UZXh0fTwvYT5gO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpbmtGb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciB7XG4gIHB1YmxpYyByZW5kZXIoZGF0YTogYW55LCB0eXBlOiBzdHJpbmcsIHJvdzogYW55LCBtZXRhOiBhbnkpOiBhbnkge1xuICAgIC8vIGdldCBjb2x1bW5cbiAgICBjb25zdCBjb2x1bW4gPSBtZXRhLnNldHRpbmdzLmFvQ29sdW1uc1ttZXRhLmNvbF07XG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4uZGF0YSkge1xuICAgICAgcmV0dXJuIGA8YSBocmVmPVwiJHsoQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUodGhpcy5mb3JtYXRTdHJpbmcgYXMgc3RyaW5nKShyb3cpKX1cIj4ke2RhdGF9PC9hPmA7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkxpbmtGb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlclxuICBpbXBsZW1lbnRzIE9uQWR2YW5jZWRDb2x1bW5BZnRlclJlbmRlciB7XG4gIHB1YmxpYyByZW5kZXIoZGF0YTogYW55LCB0eXBlOiBzdHJpbmcsIHJvdzogYW55LCBtZXRhOiBhbnkpOiBhbnkge1xuICAgIC8vIGdldCBjb2x1bW5cbiAgICBjb25zdCBjb2x1bW4gPSBtZXRhLnNldHRpbmdzLmFvQ29sdW1uc1ttZXRhLmNvbF07XG5cbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5kYXRhKSB7XG4gICAgICBjb25zdCBhY3Rpb25zID0gdGhpcy5hY3Rpb25zIHx8IFtdO1xuICAgICAgbGV0IGluZGV4ID0gMTtcbiAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihhY3Rpb24sIHtcbiAgICAgICAgICBuYW1lOiBhY3Rpb24ubmFtZSB8fCBgYWN0aW9uJHtpbmRleH1gLFxuICAgICAgICB9KTtcbiAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiB0aGUgZHJvcGRvd24gbWVudSB3aXRoIDMgZG90c1xuICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSdkcm9wZG93biBkZXRhaWxzLWNvbnRyb2wnIGRhdGEtaWQ9JyR7ZGF0YX0nIGRhdGEtdHlwZT0nc3R1ZGVudCcgPlxuICAgICAgICAgICAgICAgICAgICA8YSBpZD1cImRyb3Bkb3duTWVudUJ1dHRvbi0ke2RhdGF9XCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhLTJ4IHRleHQtZG90c1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiIGFyaWEtbGFiZWxsZWRieT1cImRyb3Bkb3duTWVudUJ1dHRvbi0ke2RhdGF9XCI+XG4gICAgICAgICAgICAgICAgICAgICAke2FjdGlvbnMubWFwKCh4KSA9PiB7XG4gICAgICAgIGlmICh4LnR5cGUgPT09ICdkaXZpZGVyJykge1xuICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWRpdmlkZXJcIj48L2Rpdj5gO1xuICAgICAgICB9XG4gICAgICAgIGlmICh4LmZvcm1hdE9wdGlvbnMgJiYgeC5mb3JtYXRPcHRpb25zLmNvbW1hbmRzKSB7XG4gICAgICAgICAgY29uc3QgdXJsVHJlZSA9IHRoaXMuY3JlYXRlVXJsVHJlZShyb3csIHguZm9ybWF0T3B0aW9ucyk7XG4gICAgICAgICAgcmV0dXJuIGA8YSBkYXRhLW5hbWU9JyR7eC5uYW1lfScgY2xhc3M9XCJkcm9wZG93bi1pdGVtJHt0eXBlb2YgeC5jbGFzc05hbWUgPT09ICdzdHJpbmcnICYmIHguY2xhc3NOYW1lLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gIGAgJHt4LmNsYXNzTmFtZS50cmltKCl9YCA6ICcnfVwiIGhyZWY9XCIjJHt1cmxUcmVlICYmIHVybFRyZWUudG9TdHJpbmcoKX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCh4LnRpdGxlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPmA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGA8YSBkYXRhLW5hbWU9JyR7eC5uYW1lfScgY2xhc3M9XCJkcm9wZG93bi1pdGVtJHt0eXBlb2YgeC5jbGFzc05hbWUgPT09ICdzdHJpbmcnICYmIHguY2xhc3NOYW1lLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IGAgJHt4LmNsYXNzTmFtZS50cmltKCl9YCA6ICcnfVwiIGhyZWY9XCIke0FkdmFuY2VkQ29sdW1uRm9ybWF0dGVyLnRlbXBsYXRlKHguaHJlZikocm93KX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmluamVjdG9yICYmIHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQoeC50aXRsZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+YDtcbiAgICAgIH0pXG4gICAgICAgICAgLmpvaW4oJycpfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgcHVibGljIGFmdGVyUmVuZGVyKGNlbGw6IGFueSwgY2VsbERhdGE6IGFueSwgcm93RGF0YTogYW55LCByb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgLy8gYXNzaWduIGJvb3RzdHJhcCBkcm9wZG93biAoPylcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uQnV0dG9uRm9ybWF0dGVyIGV4dGVuZHMgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXJcbiAgaW1wbGVtZW50cyBPbkFkdmFuY2VkQ29sdW1uQWZ0ZXJSZW5kZXIge1xuICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55IHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuXG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4uZGF0YSAmJiB0aGlzLmluamVjdG9yKSB7XG4gICAgICBjb25zdCBhY3Rpb25zID0gdGhpcy5hY3Rpb25zIHx8IFtdO1xuICAgICAgbGV0IGluZGV4ID0gMTtcbiAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihhY3Rpb24sIHtcbiAgICAgICAgICBuYW1lOiBhY3Rpb24ubmFtZSB8fCBgYWN0aW9uJHtpbmRleH1gLFxuICAgICAgICB9KTtcbiAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgIH1cbiAgICAgIGxldCBidXR0b25UZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAodGhpcy5mb3JtYXRPcHRpb25zICYmIHRoaXMuZm9ybWF0T3B0aW9ucy5idXR0b25UZXh0KSB7XG4gICAgICAgIC8vIGlmIGJ1dHRvbiB0ZXh0IGlzIGEgbGl0ZXJhbCBleHByZXNzaW9uXG4gICAgICAgIGlmICh0aGlzLmZvcm1hdE9wdGlvbnMuYnV0dG9uVGV4dC5pbmNsdWRlcygnJHsnKSkge1xuICAgICAgICAgIC8vIHVzZSB0ZW1wbGF0ZVxuICAgICAgICAgIGJ1dHRvblRleHQgPSBBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZSh0aGlzLmZvcm1hdE9wdGlvbnMuYnV0dG9uVGV4dCkocm93KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBvdGhlcndpc2UgdHJhbnNsYXRlIGl0XG4gICAgICAgICAgYnV0dG9uVGV4dCA9IHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQodGhpcy5mb3JtYXRPcHRpb25zLmJ1dHRvblRleHQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXQgYnV0dG9uVGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGlmICh0aGlzLmZvcm1hdE9wdGlvbnMgJiYgdGhpcy5mb3JtYXRPcHRpb25zLmJ1dHRvblRpdGxlKSB7XG4gICAgICAgIGJ1dHRvblRpdGxlID0gdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCh0aGlzLmZvcm1hdE9wdGlvbnMuYnV0dG9uVGJ1dHRvblRpdGxlZXh0KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJ1dHRvbkNsYXNzID0gKHRoaXMuZm9ybWF0T3B0aW9ucyAmJiB0aGlzLmZvcm1hdE9wdGlvbnMuYnV0dG9uQ2xhc3MpIHx8ICdidG4gYnRuLWxpZ2h0JztcbiAgICAgIC8vIHJldHVybiB0aGUgZHJvcGRvd24gbWVudSB3aXRoIDMgZG90c1xuICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSdkcm9wZG93biBkZXRhaWxzLWNvbnRyb2wnIGRhdGEtaWQ9JyR7ZGF0YX0nPlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cIiR7YnV0dG9uQ2xhc3N9IGRyb3Bkb3duLXRvZ2dsZVwiIGhyZWY9XCIjXCIgcm9sZT1cImJ1dHRvblwiIHRpdGxlPVwiJHtidXR0b25UaXRsZX1cIlxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwiZHJvcGRvd25NZW51QnV0dG9uLSR7ZGF0YX1cIiBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAke2J1dHRvblRleHR9XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93bk1lbnVCdXR0b24tJHtkYXRhfVwiPlxuICAgICAgICAgICAgICAgICAgICAgJHthY3Rpb25zLm1hcCgoeCkgPT4ge1xuICAgICAgICBpZiAoeC50eXBlID09PSAnZGl2aWRlcicpIHtcbiAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJkcm9wZG93bi1kaXZpZGVyXCI+PC9kaXY+YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeC5jb21tYW5kcykge1xuICAgICAgICAgIGNvbnN0IHVybFRyZWUgPSB0aGlzLmNyZWF0ZVVybFRyZWUocm93LCB4KTtcbiAgICAgICAgICByZXR1cm4gYDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjJHt1cmxUcmVlICYmIHVybFRyZWUudG9TdHJpbmcoKX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCh4LnRpdGxlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPmA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiJHtBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZSh4LmhyZWYpKHJvdyl9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5pbmplY3RvciAmJiB0aGlzLmluamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKS5pbnN0YW50KHgudGl0bGUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPmA7XG4gICAgICB9KVxuICAgICAgICAgIC5qb2luKCcnKX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIHB1YmxpYyBhZnRlclJlbmRlcihjZWxsOiBhbnksIGNlbGxEYXRhOiBhbnksIHJvd0RhdGE6IGFueSwgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIGFzc2lnbiBib290c3RyYXAgZHJvcGRvd24gKD8pXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvblNwbGl0QnV0dG9uRm9ybWF0dGVyIGV4dGVuZHMgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXJcbiAgaW1wbGVtZW50cyBPbkFkdmFuY2VkQ29sdW1uQWZ0ZXJSZW5kZXIge1xuICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55IHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuXG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4uZGF0YSkge1xuICAgICAgY29uc3QgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucyB8fCBbXTtcbiAgICAgIGxldCBpbmRleCA9IDE7XG4gICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiBhY3Rpb25zKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oYWN0aW9uLCB7XG4gICAgICAgICAgbmFtZTogYWN0aW9uLm5hbWUgfHwgYGFjdGlvbiR7aW5kZXh9YCxcbiAgICAgICAgfSk7XG4gICAgICAgIGluZGV4ICs9IDE7XG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgYnV0dG9uQ2xhc3MgPSAodGhpcy5mb3JtYXRPcHRpb25zICYmIHRoaXMuZm9ybWF0T3B0aW9ucy5idXR0b25DbGFzcykgfHwgJ2J0biBidG4tbGlnaHQnO1xuICAgICAgLy8gcmV0dXJuIHRoZSBkcm9wZG93biBtZW51IHdpdGggMyBkb3RzXG4gICAgICBjb25zdCBkZWZhdWx0QWN0aW9uID0gYWN0aW9uc1swXTtcbiAgICAgIGxldCBkZWZhdWx0QWN0aW9uSHJlZjogc3RyaW5nO1xuICAgICAgaWYgKGRlZmF1bHRBY3Rpb24gJiYgZGVmYXVsdEFjdGlvbi5jb21tYW5kcykge1xuICAgICAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5jcmVhdGVVcmxUcmVlKHJvdywgZGVmYXVsdEFjdGlvbik7XG4gICAgICAgIGRlZmF1bHRBY3Rpb25IcmVmID0gJyMnICsgKHVybFRyZWUgJiYgdXJsVHJlZS50b1N0cmluZygpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmF1bHRBY3Rpb25IcmVmID0gQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUoZGVmYXVsdEFjdGlvbi5ocmVmKShyb3cpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIiR7YnV0dG9uQ2xhc3N9XCIgaHJlZj1cIiR7ZGVmYXVsdEFjdGlvbkhyZWZ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmluamVjdG9yICYmIHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQoZGVmYXVsdEFjdGlvbi50aXRsZSl9XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCIke2J1dHRvbkNsYXNzfSBkcm9wZG93bi10b2dnbGUgZHJvcGRvd24tdG9nZ2xlLXNwbGl0XCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj4ke3RoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCgnVG9nZ2xlIERyb3Bkb3duJyl9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93bk1lbnVCdXR0b24tJHtkYXRhfVwiPlxuICAgICAgICAgICAgICAgICAgICAgJHthY3Rpb25zLm1hcCgoeCkgPT4ge1xuICAgICAgICBpZiAoeC50aXRsZSA9PT0gJy0nKSB7XG4gICAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tZGl2aWRlclwiPjwvZGl2PmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHguY29tbWFuZHMpIHtcbiAgICAgICAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5jcmVhdGVVcmxUcmVlKHJvdywgeCk7XG4gICAgICAgICAgcmV0dXJuIGA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiIyR7dXJsVHJlZSAmJiB1cmxUcmVlLnRvU3RyaW5nKCl9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmluamVjdG9yICYmIHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQoeC50aXRsZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIiR7QWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUoeC5ocmVmKShyb3cpfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCh4LnRpdGxlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5gO1xuICAgICAgfSlcbiAgICAgICAgICAuam9pbignJyl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuICBwdWJsaWMgYWZ0ZXJSZW5kZXIoY2VsbDogYW55LCBjZWxsRGF0YTogYW55LCByb3dEYXRhOiBhbnksIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyBhc3NpZ24gYm9vdHN0cmFwIGRyb3Bkb3duICg/KVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZWxlY3RSb3dGb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciB7XG4gIHB1YmxpYyByZW5kZXIoZGF0YSwgdHlwZSwgcm93LCBtZXRhKSB7XG4gICAgLy8gZ2V0IGNvbHVtblxuICAgIGNvbnN0IGNvbHVtbiA9IG1ldGEuc2V0dGluZ3MuYW9Db2x1bW5zW21ldGEuY29sXTtcbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5kYXRhKSB7XG4gICAgICBjb25zdCBfdHBsID0gYDxpbnB1dCBjbGFzcz1cImNoZWNrYm94IGNoZWNrYm94LXRoZW1lXCIgdHlwZT1cImNoZWNrYm94XCJcbiBpZD1cInMtJHttZXRhLnJvd31cIiAvPjxsYWJlbCBmb3I9XCJzLSR7bWV0YS5yb3d9XCI+Jm5ic3A7PC9sYWJlbD5gO1xuICAgICAgcmV0dXJuIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyLnRlbXBsYXRlKF90cGwpKHJvdyk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlRm9ybWF0dGVyIGV4dGVuZHMgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIge1xuICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55IHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLmRhdGEpIHtcbiAgICAgIHJldHVybiBBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZSh0aGlzLmZvcm1hdFN0cmluZyBhcyBzdHJpbmcpKHJvdyk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRydWVGYWxzZUZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcblxuICBwdWJsaWMgcmVuZGVyKGRhdGEsIHR5cGUsIHJvdywgbWV0YSkge1xuICAgIHJldHVybiBkYXRhID8gKHRoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCgnVHJ1ZUZhbHNlLmxvbmcuWWVzJykpIDpcbiAgICAgICh0aGlzLmluamVjdG9yICYmIHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQoJ1RydWVGYWxzZS5sb25nLk5vJykpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxufVxuXG5kZWNsYXJlIGludGVyZmFjZSBUcmFuc2xhdGlvbkZvcm1hdHRlclRlbXBsYXRlIHtcbiAgdHJhbnNsYXRlVGVtcGxhdGU/OiAoZGF0YTogYW55KSA9PiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvbkZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgcHVibGljIHJlbmRlcihkYXRhOiBhbnksIHR5cGU6IHN0cmluZywgcm93OiBhbnksIG1ldGE6IGFueSk6IGFueSB7XG4gICAgLy8gZ2V0IGNvbHVtblxuICAgIGNvbnN0IGNvbHVtbjogVHJhbnNsYXRpb25Gb3JtYXR0ZXJUZW1wbGF0ZSA9IG1ldGEuc2V0dGluZ3MuYW9Db2x1bW5zW21ldGEuY29sXTtcbiAgICBpZiAoY29sdW1uICYmIGRhdGEgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudChcbiAgICAgICAgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUodGhpcy5mb3JtYXRTdHJpbmcgYXMgc3RyaW5nKSh7XG4gICAgICAgICAgdmFsdWU6IGRhdGEsXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCgnVW5rbm93bicpO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGVUaW1lRm9ybWF0dGVyIGV4dGVuZHMgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIge1xuICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55IHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLmRhdGEgJiYgdGhpcy5pbmplY3Rvcikge1xuICAgICAgY29uc3QgZGF0ZVBpcGU6IERhdGVQaXBlID0gbmV3IERhdGVQaXBlKHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmN1cnJlbnRMYW5nKTtcbiAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycgJiYgL15cXGR7NH0tXFxkezJ9LVxcZHsyfVRcXGR7Mn06XFxkezJ9OlxcZHsyfVxcK1xcZHsyfSQvLnRlc3QoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIGRhdGVQaXBlLnRyYW5zZm9ybShuZXcgRGF0ZShkYXRhICsgJzowMCcpLCB0aGlzLmZvcm1hdFN0cmluZyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGEsIHRoaXMuZm9ybWF0U3RyaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTmdDbGFzc0Zvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgcHVibGljIHJlbmRlcihkYXRhLCB0eXBlLCByb3csIG1ldGEpIHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLmRhdGEpIHtcbiAgICAgIC8vIGdldCBmb3JtYXRPcHRpb25zXG4gICAgICBpZiAodGhpcy5mb3JtYXRPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IG5nQ2xhc3MgPSB0aGlzLmZvcm1hdE9wdGlvbnMubmdDbGFzcztcbiAgICAgICAgLy8gY2hlY2sgY29uZGl0aW9uIGZvciBlYWNoIGtleVxuICAgICAgICBjb2x1bW4ubmdDbGFzc1RlbXBsYXRlcyA9IGNvbHVtbi5uZ0NsYXNzVGVtcGxhdGVzIHx8IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhuZ0NsYXNzKSkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyLnRlbXBsYXRlKG5nQ2xhc3Nba2V5XSkocm93KTtcbiAgICAgICAgICBjb25zdCBmbiA9IG5ldyBGdW5jdGlvbihgcmV0dXJuICR7cmVzdWx0fTtgKTtcbiAgICAgICAgICAvLyBpZiBjb25kaXRpb24gcmV0dXJucyB0cnVlIGFkZCBjbGFzc1xuICAgICAgICAgIGlmIChmbigpID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwiJHtrZXl9XCI+JHtkYXRhfTwvc3Bhbj5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBMYW5ndWFnZUZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgcHVibGljIHJlbmRlcihkYXRhLCB0eXBlLCByb3csIG1ldGEpIHtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgcmV0dXJuIElTTzYzOTEuZ2V0TmF0aXZlTmFtZShkYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGVtcGxhdGVQaXBlIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXIge1xuXG4gIHB1YmxpYyB2YWx1ZXMgPSB7IH07XG4gIHByaXZhdGUgX3RlbXBsYXRlOiBUZW1wbGF0ZVBpcGU7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fdGVtcGxhdGUgPSBuZXcgVGVtcGxhdGVQaXBlKCk7XG4gIH1cblxuICBidWlsZEZpbHRlcihmaWx0ZXIpIHtcbiAgICBpZiAoZmlsdGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKGZpbHRlciwgdGhpcy52YWx1ZXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFzeW5jQnVpbGRGaWx0ZXIoZmlsdGVyKSB7XG4gICAgaWYgKGZpbHRlcikge1xuICAgICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybShmaWx0ZXIsIGF3YWl0IHRoaXMuZ2V0VmFsdWVzKCkpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFZhbHVlcygpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXM7XG4gIH1cblxufVxuIiwiLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgSW5wdXQsIEV2ZW50RW1pdHRlciwgVmlld0VuY2Fwc3VsYXRpb24sIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFJvdXRlck1vZGFsT2tDYW5jZWwgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbi9yb3V0aW5nJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWNvbHVtbi1zZWxlY3RvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2x1bW4tc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5FbXVsYXRlZCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgIC5mb3JtLXNlbGVjdCB7XG4gICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgICAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xuICAgICAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgICAgICBwYWRkaW5nOiA1cHg7XG4gICAgfVxuICAgIC5mb3JtLXNlbGVjdCAqIHtcbiAgICAgICAgcGFkZGluZzogNXB4IDVweDtcbiAgICB9XG4gICAgLmJ0bi5kaXNhYmxlZCwgLmJ0bjpkaXNhYmxlZCB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICB9XG4gICAgYFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIENvbHVtblNlbGVjdG9yQ29tcG9uZW50IGV4dGVuZHMgUm91dGVyTW9kYWxPa0NhbmNlbCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuXG4gICAgQElucHV0KCkgY29sdW1ucz86IHsga2V5OiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIHZpc2libGU6IGJvb2xlYW4sIGluZGV4OiBudW1iZXIgfVtdO1xuICAgIHB1YmxpYyBkaXNtaXNzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBJbnB1dCgpIHNlbGVjdGVkQ29sdW1ucz86IHsga2V5OiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgfVtdO1xuXG4gICAgQFZpZXdDaGlsZCgnbW92ZVVwQnV0dG9uJykgbW92ZVVwQnV0dG9uPzogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdtb3ZlRG93bkJ1dHRvbicpIG1vdmVEb3duQnV0dG9uPzogRWxlbWVudFJlZjtcblxuICAgIGF2YWlsYWJsZUNvbHVtbnNDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG4gICAgc2VsZWN0ZWRDb2x1bW5zQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuXG4gICAgcHVibGljIGNoYW5naW5nID0gZmFsc2U7XG5cbiAgICBvaygpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2luZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9tb2RhbFJlZi5oaWRlKCk7XG4gICAgICAgIH0sIDApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5hcHBseUNoYW5nZXMoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5naW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXNtaXNzLmVtaXQoJ29rJyk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoJ29rJyk7XG4gICAgfVxuICAgIGNhbmNlbCgpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICB0aGlzLl9tb2RhbFJlZi5oaWRlKCk7XG4gICAgICAgIHRoaXMuZGlzbWlzcy5lbWl0KCdjYW5jZWwnKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgnY2FuY2VsJyk7XG4gICAgfVxuXG4gIGNvbnN0cnVjdG9yKHJvdXRlcjogUm91dGVyLFxuICAgIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIF9tb2RhbFJlZjogQnNNb2RhbFJlZixcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICAgICAgc3VwZXIocm91dGVyLCBhY3RpdmF0ZWRSb3V0ZSk7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgLy9cbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIC8vXG4gICAgfVxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmNvbHVtbnMpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS52aXNpYmxlO1xuICAgICAgICAgICAgfSkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhLmluZGV4IDwgYi5pbmRleCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhLmluZGV4ID4gYi5pbmRleCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9KS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IGl0ZW0ua2V5LFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS50aXRsZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlDaGFuZ2VzKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnMgJiYgdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICAgICBsZXQgbW92ZUluZGV4ID0gdGhpcy5zZWxlY3RlZENvbHVtbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIHRoaXMuY29sdW1ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5rZXkgPT09IGNvbHVtbi5rZXk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGZpbmRJbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgbW92ZUluZGV4ICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5pbmRleCA9IG1vdmVJbmRleDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4udmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5pbmRleCA9IGZpbmRJbmRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW1vdmVDb2x1bW5zKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZENvbHVtbnNDb250cm9sLnZhbHVlIGFzIHN0cmluZ1tdO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5kSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuc3BsaWNlKGZpbmRJbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gcmVzZXQgY29sdW1uXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnNDb250cm9sLnJlc2V0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRDb2x1bW5zKCkge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW5zICYmIHRoaXMuc2VsZWN0ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuYXZhaWxhYmxlQ29sdW1uc0NvbnRyb2wudmFsdWUgYXMgc3RyaW5nW107XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2Ygc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluZENvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5rZXkgPT09IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmRDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmtleSA9PT0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaW5kSW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZmluZENvbHVtbi5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBmaW5kQ29sdW1uLnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gZmluZCB0aGUgbGFzdCBpbmRleCBvZiB0aGUgc2VsZWN0ZWQgaXRlbXNcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0U2VsZWN0ZWRJbmRleCA9IHRoaXMuY29sdW1ucy5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSBzZWxlY3RlZFtzZWxlY3RlZC5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyByZXNldCBjb250cm9sXG4gICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVDb2x1bW5zQ29udHJvbC5yZXNldCgpO1xuICAgICAgICAgICAgICAgIGlmIChsYXN0U2VsZWN0ZWRJbmRleCA+IC0xICYmIGxhc3RTZWxlY3RlZEluZGV4IDwgdGhpcy5jb2x1bW5zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVDb2x1bW5zQ29udHJvbC5wYXRjaFZhbHVlKFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uc1tsYXN0U2VsZWN0ZWRJbmRleCArIDFdLmtleVxuICAgICAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtb3ZlVXAoKSB7XG4gICAgICAgIGlmICh0aGlzLm1vdmVVcEJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5tb3ZlVXBCdXR0b24ubmF0aXZlRWxlbWVudC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zQ29udHJvbC52YWx1ZSBhcyBzdHJpbmdbXTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBzZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmtleSA9PT0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmluZEluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5zZWxlY3RlZENvbHVtbnNbZmluZEluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnNwbGljZShmaW5kSW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuc3BsaWNlKGZpbmRJbmRleCAtIDEgLCAwLCBjb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vdmVVcEJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5tb3ZlVXBCdXR0b24ubmF0aXZlRWxlbWVudC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbW92ZURvd24oKSB7XG4gICAgICAgIGlmICh0aGlzLm1vdmVEb3duQnV0dG9uKSB7XG4gICAgICAgICAgICB0aGlzLm1vdmVEb3duQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sdW1ucyAmJiB0aGlzLmNvbHVtbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZENvbHVtbnNDb250cm9sLnZhbHVlIGFzIHN0cmluZ1tdO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuY29sdW1ucy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5kSW5kZXggPj0gMCAmJiBmaW5kSW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zW2ZpbmRJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5zcGxpY2UoZmluZEluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnNwbGljZShmaW5kSW5kZXggKyAxICwgMCwgY29sdW1uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb3ZlRG93bkJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5tb3ZlRG93bkJ1dHRvbi5uYXRpdmVFbGVtZW50LmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RhbFNlcnZpY2UgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQgeyBDb2x1bW5TZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4vY29sdW1uLXNlbGVjdG9yLmNvbXBvbmVudCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb2x1bW5TZWxlY3RvclNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX21vZGFsOiBNb2RhbFNlcnZpY2UpIHtcbiAgICAvL1xuICB9XG5cbiAgc2VsZWN0Q29sdW1ucyhjb2x1bW5zOiB7IGtleTogc3RyaW5nLCB0aXRsZTogc3RyaW5nLCB2aXNpYmxlOiBib29sZWFuLCBpbmRleDogbnVtYmVyIH0pOlxuICAgIFByb21pc2U8e3Jlc3VsdDogc3RyaW5nLCBjb2x1bW5zPzogeyBrZXk6IHN0cmluZywgdGl0bGU6IHN0cmluZyxcbiAgICAgIHZpc2libGU6IGJvb2xlYW4sIGluZGV4OiBudW1iZXIgfVtdfT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMuX21vZGFsLm9wZW5Nb2RhbENvbXBvbmVudChDb2x1bW5TZWxlY3RvckNvbXBvbmVudCwge1xuICAgICAgICAgIGNsYXNzOiAnbW9kYWwtbGcgbW9kYWwtdGFibGUnLFxuICAgICAgICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWUsXG4gICAgICAgICAgYW5pbWF0ZWQ6IHRydWUsXG4gICAgICAgICAgaW5pdGlhbFN0YXRlOiB7XG4gICAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZjogQ29sdW1uU2VsZWN0b3JDb21wb25lbnQgPSBtb2RhbFJlZi5jb250ZW50O1xuICAgICAgICBjb21wb25lbnRSZWYuZGlzbWlzcy5zdWJzY3JpYmUoKHJlc3VsdDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gJ29rJykge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoe1xuICAgICAgICAgICAgICByZXN1bHQ6IHJlc3VsdCxcbiAgICAgICAgICAgICAgY29sdW1uczogY29tcG9uZW50UmVmLmNvbHVtbnNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh7XG4gICAgICAgICAgICByZXN1bHQ6IHJlc3VsdFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgTmF2aWdhdGlvblN0YXJ0LCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBza2lwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQWN0aXZhdGVkVGFibGVTZXJ2aWNlIHtcclxuICBwcml2YXRlIF9hY3RpdmVUYWJsZT86IEFkdmFuY2VkVGFibGVDb21wb25lbnQ7XHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBsYXN0IHRhYmxlIHRoYXQgd2FzIHNldCBhcyBhY3RpdmVcclxuICAgKiBOb3RlOiBFbWl0dGVkIHZhbHVlIG1heSBiZSB1bmRlZmluZWQgKGUuZy4gcmVzZXQgb24gcm91dGUgY2hhbmdlcylcclxuICAgKi9cclxuICBwdWJsaWMgcmVhZG9ubHkgbGFzdEFjdGl2ZVRhYmxlOlxyXG4gICAgQmVoYXZpb3JTdWJqZWN0PEFkdmFuY2VkVGFibGVDb21wb25lbnQgfCB1bmRlZmluZWQ+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBZHZhbmNlZFRhYmxlQ29tcG9uZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIC8qKlxyXG4gICAqIE9taXQgdGhlIGxhc3QgZW1pdHRlZCB2YWx1ZSB0byBvYnNlcnZlIG9ubHkgbmV3IGFjdGl2ZSB0YWJsZSBjaGFuZ2VzXHJcbiAgICogTm90ZTogRW1pdHRlZCB2YWx1ZSBtYXkgYmUgdW5kZWZpbmVkIChlLmcuIHJlc2V0IG9uIHJvdXRlIGNoYW5nZXMpXHJcbiAgICovXHJcbiAgcHVibGljIHJlYWRvbmx5IG5leHRBY3RpdmVUYWJsZTpcclxuICAgIE9ic2VydmFibGU8QWR2YW5jZWRUYWJsZUNvbXBvbmVudCB8IHVuZGVmaW5lZD4gPSB0aGlzLmxhc3RBY3RpdmVUYWJsZS5waXBlKHNraXAoMSkpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9yb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7XHJcbiAgICBfcm91dGVyLmV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xyXG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpIHtcclxuICAgICAgICBpZiAodGhpcy5fYWN0aXZlVGFibGUpIHtcclxuICAgICAgICAgIHRoaXMuYWN0aXZlVGFibGUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBhY3RpdmVUYWJsZSgpOiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9hY3RpdmVUYWJsZTtcclxuICB9XHJcblxyXG4gIHNldCBhY3RpdmVUYWJsZSh0YWJsZUNvbXBvbmVudDogQWR2YW5jZWRUYWJsZUNvbXBvbmVudCB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fYWN0aXZlVGFibGUgPSB0YWJsZUNvbXBvbmVudDtcclxuICAgIC8vIHByb3ZpZGUgY2hhbmdlIHRvIG9ic2VydmVyc1xyXG4gICAgdGhpcy5sYXN0QWN0aXZlVGFibGUubmV4dCh0aGlzLl9hY3RpdmVUYWJsZSk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7RGlyZWN0aXZlLCBIb3N0TGlzdGVuZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRUYWJsZVNlcnZpY2V9IGZyb20gJy4uL3RhYmxlcy5hY3RpdmF0ZWQtdGFibGUuc2VydmljZSc7XG5pbXBvcnQge0FuZ3VsYXJEYXRhQ29udGV4dH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XG5pbXBvcnQge0NvbmZpZ3VyYXRpb25TZXJ2aWNlLCBFcnJvclNlcnZpY2UsIExvYWRpbmdTZXJ2aWNlfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtDbGllbnREYXRhUXVlcnlhYmxlLCBSZXNwb25zZUVycm9yfSBmcm9tICdAdGhlbW9zdC9jbGllbnQnO1xuaW1wb3J0IHsgVGFibGVDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNvbnN0IE1BWF9FWFBPUlRfSVRFTVMgPSA1MDA7XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBFeHBvcnRMaW1pdENvbmZpZ3VyYXRpb24ge1xuICB0YWJsZXM/OiB7XG4gICAgZXhwb3J0TGltaXQ/OiBudW1iZXJcbiAgfTtcbn1cblxuQERpcmVjdGl2ZSh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICcudW5pdmVyc2lzLWJ0bi1leHBvcnQnXG59KVxuZXhwb3J0IGNsYXNzIEJ0bkV4cERpcmVjdGl2ZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2FjdGl2YXRlZFRhYmxlOiBBY3RpdmF0ZWRUYWJsZVNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NvbnRleHQ6IEFuZ3VsYXJEYXRhQ29udGV4dCxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfY29uZmlnOiBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9sb2FkaW5nU2VydmljZTogTG9hZGluZ1NlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2Vycm9yU2VydmljZTogRXJyb3JTZXJ2aWNlKSB7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIGFzeW5jIGNsaWNrRXZlbnQoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICh0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlLmV4cG9ydFZpZXcoKTtcbiAgICAgIC8qXG4gICAgICBjb25zdCBsYXN0UXVlcnkgPSB0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZS5sYXN0UXVlcnk7XG4gICAgICBjb25zdCB0YWJsZUNvbmZpZyA9IHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlLmNvbmZpZztcbiAgICAgIGNvbnN0IHNlcnZpY2VIZWFkZXJzID0gdGhpcy5fY29udGV4dC5nZXRTZXJ2aWNlKCkuZ2V0SGVhZGVycygpO1xuICAgICAgY29uc3QgcXVlcnlNb2RlbCA9IGxhc3RRdWVyeS5nZXRNb2RlbCgpO1xuICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5fY29udGV4dC5tb2RlbChxdWVyeU1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBsYXN0UXVlcnkuZ2V0UGFyYW1zKCk7XG4gICAgICBxdWVyeSA9IHRoaXMuY29uc3RydWN0UXVlcnkocXVlcnksIHF1ZXJ5UGFyYW1zLCB0YWJsZUNvbmZpZywgc2VydmljZUhlYWRlcnMpO1xuICAgICAgLy8gZ2V0IGV4cG9ydCBzZXR0aW5nc1xuICAgICAgY29uc3QgZXhwb3J0U2V0dGluZ3MgPSB0aGlzLl9jb25maWcuc2V0dGluZ3MgYXMgRXhwb3J0TGltaXRDb25maWd1cmF0aW9uO1xuICAgICAgLy8gZ2V0IGV4cG9ydCBsaW1pdFxuICAgICAgY29uc3QgbWF4RXhwb3J0SXRlbXMgPSBleHBvcnRTZXR0aW5ncyAmJiBleHBvcnRTZXR0aW5ncy50YWJsZXMgJiYgZXhwb3J0U2V0dGluZ3MudGFibGVzLmV4cG9ydExpbWl0O1xuICAgICAgaWYgKG1heEV4cG9ydEl0ZW1zICYmIHR5cGVvZiBtYXhFeHBvcnRJdGVtcyA9PT0gJ251bWJlcicgJiYgbWF4RXhwb3J0SXRlbXMgPiAwKSB7XG4gICAgICAgIHF1ZXJ5LnNraXAoMCkudGFrZShtYXhFeHBvcnRJdGVtcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWVyeS5za2lwKDApLnRha2UoTUFYX0VYUE9SVF9JVEVNUyk7XG4gICAgICB9XG4gICAgICAvLyBUaGlzIGNvbnN0cnVjdHMgdGhlIFVSSSBiYXNlZCBvbiB0aGUgd2F5IEB0aGVtb3N0IGRvZXNcbiAgICAgIGNvbnN0IHVybCA9IHRoaXMuY29uc3RydWN0VVJMKHF1ZXJ5KTtcbiAgICAgIHRoaXMuZG93bmxvYWRGaWxlKHVybCwgcXVlcnkuZ2V0U2VydmljZSgpLmdldEhlYWRlcnMoKSwgcXVlcnkuZ2V0TW9kZWwoKSk7ICovXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHBhcmFtZXRlcnMgdG8gdGhlIHF1ZXJ5IGJhc2VkIG9uXG4gICAqIHRoZSBhY3RpdmUgZmlsdGVycyBvZiB0aGUgYWN0aXZhdGVkIHRhYmxlXG4gICAqIEBwYXJhbSBxdWVyeVxuICAgKiBAcGFyYW0gcGFyYW1zOiBUaGUgZmlsdGVycyBvZiB0aGUgbGFzdCBxdWVyeSBvZiB0aGUgYWN0aXZhdGVkIHRhYmxlXG4gICAqIEByZXR1cm4gQ2xpZW50RGF0YVF1ZXJ5YWJsZVxuICAgKi9cbiAgc2V0UGFyYW1zKHF1ZXJ5OiBDbGllbnREYXRhUXVlcnlhYmxlLCBwYXJhbXMpOiBDbGllbnREYXRhUXVlcnlhYmxlIHtcbiAgICBpZiAocGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09ICdvYmplY3QnKSB7XG4gICAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBxdWVyeS5zZXRQYXJhbShrZXksIHBhcmFtc1trZXldKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgaGVhZGVycyB0byB0aGUgcXVlcnkgYmFzZWQgb25cbiAgICogdGhlIGRlZmF1bHQgaGVhZGVycyBvZiB0aGUgRGF0YUNvbnRleHRcbiAgICogYW5kIGFwcGVuZGluZyB0aGUgYWNjZXB0IGhlYWRlciB0byBnZXRcbiAgICogYW4geGxzeCBmaWxlIGZyb20gdGhlIEFQSVxuICAgKiBAcGFyYW0gcXVlcnlcbiAgICogQHBhcmFtIGhlYWRlcnM6IFRoZSBoZWFkZXJzIHRvIGFwcGVuZCB0byB0aGUgcXVlcnlcbiAgICogQHJldHVybiBDbGllbnREYXRhUXVlcnlhYmxlXG4gICAqL1xuICBzZXRIZWFkZXJzKHF1ZXJ5OiBDbGllbnREYXRhUXVlcnlhYmxlLCBoZWFkZXJzOiBIZWFkZXJzKTogQ2xpZW50RGF0YVF1ZXJ5YWJsZSB7XG4gICAgT2JqZWN0LmtleXMoaGVhZGVycykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoaGVhZGVycy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIHF1ZXJ5LmdldFNlcnZpY2UoKS5zZXRIZWFkZXIoa2V5LCBoZWFkZXJzW2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIHNldHMgYSBoZWFkZXIgdG8gYWNjZXB0IHhsc3ggZmlsZXNcbiAgICBxdWVyeS5nZXRTZXJ2aWNlKCkuc2V0SGVhZGVyKCdBY2NlcHQnLCAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnKTtcbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgc2VsZWN0IHBhcmFtZXRlciBvZiB0aGVcbiAgICogQ2xpZW50RGF0YVF1ZXJ5IGJ5IHJlcGxhY2luZyB0aGUgdGFyZ2V0IG5hbWVcbiAgICogb2YgdGhlIGZpZWxkIGJhc2VkIG9uIHRoZSBsb2NhbGl6ZWQgdHJhbnNsYXRpb25cbiAgICogb2YgdGhhdCBwcm9wZXJ0eSBvbiB0aGUgYWR2YW5jZWQgdGFibGVkXG4gICAqIEBwYXJhbSBxdWVyeVxuICAgKiBAcGFyYW0gdGFibGVDb25maWc6IFRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBhY3RpdmF0ZWQgdGFibGVcbiAgICogQHJldHVybiBDbGllbnREYXRhUXVlcnlhYmxlXG4gICAqL1xuICBjb25zdHJ1Y3RRdWVyeVBhcmFtKHF1ZXJ5OiBDbGllbnREYXRhUXVlcnlhYmxlLCB0YWJsZUNvbmZpZzogVGFibGVDb25maWd1cmF0aW9uKTogQ2xpZW50RGF0YVF1ZXJ5YWJsZSB7XG4gICAgbGV0IHNlbGVjdFF1ZXJ5ID0gcXVlcnkuZ2V0UGFyYW1zKCkuJHNlbGVjdDtcbiAgICBsZXQgc2VsZWN0UXVlcnlBcnJheSA9IHNlbGVjdFF1ZXJ5LnNwbGl0KCcsJyk7XG4gICAgc2VsZWN0UXVlcnlBcnJheSA9IHNlbGVjdFF1ZXJ5QXJyYXkubWFwKChzZWxlY3QpID0+IHtcbiAgICAgIGNvbnN0IHdvcmRzID0gc2VsZWN0LnNwbGl0KCcgJyk7XG4gICAgICBpZiAod29yZHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIGlmICh0YWJsZUNvbmZpZyAmJiB0YWJsZUNvbmZpZy5jb2x1bW5zKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgdGFibGVDb25maWcuY29sdW1ucykge1xuICAgICAgICAgICAgaWYgKGNvbHVtbi5wcm9wZXJ0eSA9PT0gd29yZHNbMl0gJiYgY29sdW1uLnRpdGxlKSB7XG4gICAgICAgICAgICAgIHdvcmRzWzJdID0gYFwiJHt0aGlzLl90cmFuc2xhdGUuaW5zdGFudChjb2x1bW4udGl0bGUpfVwiYDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnByb3BlcnR5ID09PSB3b3Jkc1syXSkge1xuICAgICAgICAgICAgICB3b3Jkc1syXSA9IGBcIiR7dGhpcy5fdHJhbnNsYXRlLmluc3RhbnQod29yZHNbMl0pfVwiYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh3b3Jkcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgaWYgKHRhYmxlQ29uZmlnICYmIHRhYmxlQ29uZmlnLmNvbHVtbnMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0YWJsZUNvbmZpZy5jb2x1bW5zKSB7XG4gICAgICAgICAgICBpZiAoY29sdW1uLm5hbWUgPT09IHdvcmRzWzBdICYmIGNvbHVtbi50aXRsZSkge1xuICAgICAgICAgICAgICB3b3Jkc1swXSA9IGAke3dvcmRzWzBdfSBhcyBcIiR7dGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoY29sdW1uLnRpdGxlKX1cImA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4ubmFtZSA9PT0gd29yZHNbMF0gJiYgY29sdW1uLnByb3BlcnR5KSB7XG4gICAgICAgICAgICAgIHdvcmRzWzBdID0gYCR7d29yZHNbMF19IGFzIFwiJHt0aGlzLl90cmFuc2xhdGUuaW5zdGFudChjb2x1bW4ucHJvcGVydHkpfVwiYDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdvcmRzWzBdID09PSBjb2x1bW4ubmFtZSAmJiB3b3Jkc1swXSA9PT0gJ2lkJyAmJiBjb2x1bW4uaGlkZGVuKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcbiAgICAgICAgICAgIH0gZWxzZSBpZiAod29yZHNbMF0gPT0gY29sdW1uLm5hbWUgfHwgd29yZHNbMF0gPT09IGNvbHVtbi5wcm9wZXJ0eSkge1xuICAgICAgICAgICAgICB3b3Jkc1swXSA9IGAke3dvcmRzWzBdfSBhcyBcIiR7dGhpcy5fdHJhbnNsYXRlLmluc3RhbnQod29yZHNbMF0pfVwiYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdvcmRzWzBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdvcmRzLmpvaW4oJyAnKTtcbiAgICB9KTtcbiAgICBzZWxlY3RRdWVyeSA9IHNlbGVjdFF1ZXJ5QXJyYXkuam9pbignLCcpO1xuICAgIHF1ZXJ5LnNldFBhcmFtKCckc2VsZWN0Jywgc2VsZWN0UXVlcnkgKTtcbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgZmV0Y2ggVVJMIGJhc2VkIHRoZSBxdWVyeSBwYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSBxdWVyeVxuICAgKiBAcmV0dXJuIFN0cmluZ1xuICAgKi9cbiAgY29uc3RydWN0VVJMKHF1ZXJ5KTogU3RyaW5nIHtcbiAgICBjb25zdCBiYXNlVVJMID0gcXVlcnkuZ2V0U2VydmljZSgpLmdldEJhc2UoKTtcbiAgICBsZXQgdXJsID0gYmFzZVVSTC5lbmRzV2l0aCgnLycpID8gKGJhc2VVUkwgKyBxdWVyeS5nZXRNb2RlbCgpICsgJz8nKSA6IChiYXNlVVJMICsgJy8nICsgcXVlcnkuZ2V0TW9kZWwoKSArICc/Jyk7XG4gICAgT2JqZWN0LmtleXMocXVlcnkuZ2V0UGFyYW1zKCkpLmZvckVhY2goKGtleSwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICB1cmwgKz0ga2V5ICsgJz0nICsgcXVlcnkuZ2V0UGFyYW1zKClba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybCArPSAnJicgKyBrZXkgKyAnPScgKyBxdWVyeS5nZXRQYXJhbXMoKVtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgcXVlcnkgYnkgc2V0dGluZyB0aGUgcGFyYW1ldGVycyBvZiB0aGVcbiAgICogYWR2YW5jZWQgdGFibGUncyBhY3RpdmUgZmlsdGVycywgc2V0cyB0aGUgbmVjZXNzYXJ5IGhlYWRlcnNcbiAgICogYW5kIGJ1aWxkIHRoZSBzZWxlY3QgcGFyYW1ldGVyIG9mIHRoZSBxdWVyeVxuICAgKiBAcGFyYW0gcXVlcnlcbiAgICogQHBhcmFtIHBhcmFtczogVGhlIGZpbHRlcnMgb2YgdGhlIGxhc3QgcXVlcnkgb2YgdGhlIGFjdGl2YXRlZCB0YWJsZVxuICAgKiBAcGFyYW0gdGFibGVDb25maWc6IFRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBhY3RpdmF0ZWQgdGFibGVcbiAgICogQHBhcmFtIGhlYWRlcnM6IFRoZSBoZWFkZXJzIHRvIGFwcGVuZCB0byB0aGUgcXVlcnlcbiAgICogQHJldHVybiBDbGllbnREYXRhUXVlcnlhYmxlXG4gICAqL1xuICBjb25zdHJ1Y3RRdWVyeShxdWVyeSwgcGFyYW1zLCB0YWJsZUNvbmZpZywgaGVhZGVyczogSGVhZGVycykge1xuICAgIGxldCBfcXVlcnkgPSB0aGlzLnNldFBhcmFtcyhxdWVyeSwgcGFyYW1zKTtcbiAgICBfcXVlcnkgPSB0aGlzLnNldEhlYWRlcnMoX3F1ZXJ5LCBoZWFkZXJzKTtcbiAgICBfcXVlcnkgPSB0aGlzLmNvbnN0cnVjdFF1ZXJ5UGFyYW0oX3F1ZXJ5LCB0YWJsZUNvbmZpZyk7XG4gICAgcmV0dXJuIF9xdWVyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGFuZCBzYXZlcyB0aGUgeGxzeCBmaWxlXG4gICAqIEBwYXJhbSB1cmxcbiAgICogQHBhcmFtIHNlcnZpY2VIZWFkZXJzOiBUaGUgaGVhZGVycyB0byBhcHBlbmQgdG8gdGhlIHF1ZXJ5XG4gICAqIEBwYXJhbSBtb2RlbE5hbWU6IFRoZSBtb2RlbCBuYW1lIG9mIHRoZSBhZHZhbmNlZCB0YWJsZVxuICAgKi9cbiAgZG93bmxvYWRGaWxlKHVybCwgc2VydmljZUhlYWRlcnM6IEhlYWRlcnMsIG1vZGVsTmFtZSkge1xuICAgIHRoaXMuX2xvYWRpbmdTZXJ2aWNlLnNob3dMb2FkaW5nKCk7XG4gICAgZmV0Y2goZW5jb2RlVVJJKHVybCksIHtcbiAgICAgIGhlYWRlcnM6IHNlcnZpY2VIZWFkZXJzLFxuICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJ1xuICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlICYmICFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgUmVzcG9uc2VFcnJvcihyZXNwb25zZS5zdGF0dXNUZXh0LCByZXNwb25zZS5zdGF0dXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlLmJsb2IoKTtcbiAgICB9KS50aGVuKGJsb2IgPT4ge1xuICAgICAgY29uc3Qgb2JqZWN0VXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcbiAgICAgIGEuc2V0QXR0cmlidXRlKCdzdHlsZScsICdkaXNwbGF5OiBub25lJyk7XG4gICAgICBhLmhyZWYgPSBvYmplY3RVcmw7XG4gICAgICBjb25zdCBkb3dubG9hZE5hbWUgPSBgJHttb2RlbE5hbWV9Lnhsc3hgO1xuICAgICAgYS5kb3dubG9hZCA9IGRvd25sb2FkTmFtZTtcbiAgICAgIC8vIHRoaXMgYWRkcyBzdXBwb3J0IGZvciBJRSBhbmQgTVMgRWRnZSAodXAgdG8gdmVyc2lvbiA0NC4xOTA0MSlcbiAgICAgIGlmICh3aW5kb3cubmF2aWdhdG9yICYmICh3aW5kb3cubmF2aWdhdG9yIGFzIGFueSkubXNTYXZlT3JPcGVuQmxvYikge1xuICAgICAgICAod2luZG93Lm5hdmlnYXRvciBhcyBhbnkpLm1zU2F2ZU9yT3BlbkJsb2IoYmxvYiwgZG93bmxvYWROYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGZvciBhbGwgb3RoZXIgYnJvd3NlcnNcbiAgICAgICAgYS5jbGljaygpO1xuICAgICAgfVxuICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwob2JqZWN0VXJsKTtcbiAgICAgIGEucmVtb3ZlKCk7XG4gICAgICB0aGlzLl9sb2FkaW5nU2VydmljZS5oaWRlTG9hZGluZygpO1xuICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICB0aGlzLl9sb2FkaW5nU2VydmljZS5oaWRlTG9hZGluZygpO1xuICAgICAgdGhpcy5fZXJyb3JTZXJ2aWNlLnNob3dFcnJvcihlcnIsIHtcbiAgICAgICAgY29udGludWVMaW5rOiAnLidcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbn1cbiIsImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5qZWN0b3IsXG4gIElucHV0LCBPbkRlc3Ryb3ksXG4gIE9uSW5pdCwgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FuZ3VsYXJEYXRhQ29udGV4dH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XG5pbXBvcnQge1RyYW5zbGF0ZVBpcGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7VGFibGVDb25maWd1cmF0aW9ufSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmludGVyZmFjZXMnO1xuaW1wb3J0IHtEYXRhU2VydmljZVF1ZXJ5UGFyYW1zfSBmcm9tICdAdGhlbW9zdC9jbGllbnQnO1xuaW1wb3J0IHtBZHZhbmNlZENvbHVtbkZvcm1hdHRlcn0gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzJztcbmltcG9ydCB7Q2xpZW50RGF0YVF1ZXJ5YWJsZX0gZnJvbSAnQHRoZW1vc3QvY2xpZW50JztcbmltcG9ydCB7QWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyfSBmcm9tICcuL2FkdmFuY2VkLWZpbHRlci12YWx1ZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7U3Vic2NyaXB0aW9uLCBCZWhhdmlvclN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtUZW1wbGF0ZVBpcGUsIExvYWRpbmdTZXJ2aWNlLCBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgTW9kYWxTZXJ2aWNlLCBESUFMT0dfQlVUVE9OUywgRXJyb3JTZXJ2aWNlLCBFeHBvcnRTcHJlYWRzaGVldFNlcnZpY2V9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcbmltcG9ydCB7SUFkdmFuY2VkVGFibGVGb3JtYXR0ZXJzfSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmZvcm1hdHRlcnMuaW50ZXJmYWNlJztcbi8vIGltcG9ydGFudCBub3RlOiB1c2UgdGhpcyBpbXBvcnQgdG8gYXZvaWQgQ2Fubm90IGNhbGwgYSBuYW1lc3BhY2UgKCdqcXVlcnknKSBlcnJvclxuaW1wb3J0ICogYXMgalF1ZXJ5XyBmcm9tICdqcXVlcnknO1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldCc7XG5pbXBvcnQge3RlbXBsYXRlfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldC1zY3JvbGxlcic7XG5pbXBvcnQgJ2RhdGF0YWJsZXMubmV0LWNvbHJlb3JkZXInO1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldC1idXR0b25zJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDb2x1bW5TZWxlY3RvclNlcnZpY2UgfSBmcm9tICcuLi9jb2x1bW4tc2VsZWN0b3IvY29sdW1uLXNlbGVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXhwb3J0TGltaXRDb25maWd1cmF0aW9uLCBNQVhfRVhQT1JUX0lURU1TIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9idG5leHAuZGlyZWN0aXZlJztcblxuLy8gcmVzdG9yZSBqcXVlcnkgaW1wb3J0IHRvIGF2b2lkIENhbm5vdCBjYWxsIGEgbmFtZXNwYWNlICgnanF1ZXJ5JykgZXJyb3JcbmNvbnN0IGpRdWVyeSA9IGpRdWVyeV87XG5leHBvcnQgaW50ZXJmYWNlIEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0IHtcbiAgcmVjb3Jkc1RvdGFsOiBudW1iZXI7XG4gIHJlY29yZHNGaWx0ZXJlZDogbnVtYmVyO1xuICBkYXRhOiBBcnJheTxhbnk+O1xufVxuXG5jb25zdCBEYXRhVGFibGVzQXBpOiBhbnkgPSBqUXVlcnkuZm4uZGF0YVRhYmxlLkFwaTtcbkRhdGFUYWJsZXNBcGkucmVnaXN0ZXIoICdwcm9jZXNzaW5nKCknLCBmdW5jdGlvbiggc2hvdzogYW55ICkge1xuICAgIHJldHVybiB0aGlzLml0ZXJhdG9yKCd0YWJsZScsICggY3R4OiBhbnkgKSA9PiB7XG4gICAgICAgIGN0eC5vQXBpLl9mblByb2Nlc3NpbmdEaXNwbGF5KCBjdHgsIHNob3cgKTtcbiAgICB9ICk7XG59KTtcblxuY29uc3QgRU1QVFlfREFUQVNFVCA9IHtcbiAgcmVjb3Jkc1RvdGFsOiAwLFxuICByZWNvcmRzRmlsdGVyZWQ6IDAsXG4gIGRhdGE6IFtdLFxufTtcblxuY2xhc3MgVGFibGVUcmFuc2xhdGlvbkNoYW5nZURldGVjdG9yIGV4dGVuZHMgQ2hhbmdlRGV0ZWN0b3JSZWYge1xuICBwdWJsaWMgY2hlY2tOb0NoYW5nZXMoKTogdm9pZCB7XG4gIH1cblxuICBwdWJsaWMgZGV0YWNoKCk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIGRldGVjdENoYW5nZXMoKTogdm9pZCB7XG4gIH1cblxuICBwdWJsaWMgbWFya0ZvckNoZWNrKCk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIHJlYXR0YWNoKCk6IHZvaWQge1xuICB9XG5cbn1cblxuZXhwb3J0IGxldCBDT0xVTU5fRk9STUFUVEVSUyA9IG5ldyBJbmplY3Rpb25Ub2tlbignY29sdW1uLmZvcm1hdHRlcnMnKTtcblxuZXhwb3J0IGNsYXNzIEV4cG9ydExpbWl0RXhjZWVkZWRFcnJvciBleHRlbmRzIFJhbmdlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnRXhwb3J0TGltaXRFeGNlZWRlZEVycm9yJztcbiAgfVxufVxuXG5jbGFzcyBDb2x1bW5Gb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIGNsYXNzPzogc3RyaW5nO1xuICBwdWJsaWMgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBwdWJsaWMgZGVmYXVsdENvbnRlbnQ/OiBzdHJpbmc7XG4gIHB1YmxpYyBmb3JtYXRTdHJpbmc/OiBzdHJpbmc7XG4gIHB1YmxpYyBmb3JtYXR0ZXI/OiBzdHJpbmc7XG4gIHB1YmxpYyBoaWRkZW4/OiBib29sZWFuO1xuICBwdWJsaWMgbmFtZT86IHN0cmluZztcbiAgcHVibGljIG9yZGVyPzogc3RyaW5nO1xuICBwdWJsaWMgcHJvcGVydHk/OiBzdHJpbmc7XG4gIHB1YmxpYyBzb3J0YWJsZT86IGJvb2xlYW47XG4gIHB1YmxpYyB0aXRsZSA9ICcnO1xuXG4gIHB1YmxpYyByZW5kZXIoZGF0YTogYW55LCB0eXBlOiBhbnksIHJvdzogYW55LCBtZXRhOiBhbnkpIHtcbiAgICAvL1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcmNlQ2FzdDxUPihpbnB1dDogYW55KTogVCB7XG4gIHJldHVybiBpbnB1dDtcbn1cblxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVDb25maWd1cmF0aW9uIHtcbiAgcHVibGljIHN0YXRpYyBjYXN0KGlucHV0OiBhbnksIGNsb25lPzogYm9vbGVhbik6IFRhYmxlQ29uZmlndXJhdGlvbiB7XG4gICAgaWYgKGNsb25lKSB7XG4gICAgICByZXR1cm4gZm9yY2VDYXN0PFRhYmxlQ29uZmlndXJhdGlvbj4oSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpbnB1dCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcmNlQ2FzdDxUYWJsZUNvbmZpZ3VyYXRpb24+KGlucHV0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRSYW5kb21JZGVudGlmaWVyKCkge1xuICByZXR1cm4gKFxuICAgIE51bWJlcihTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xpY2UoMikpXG4gICkudG9TdHJpbmcoMzYpO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtdGFibGUnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDx0YWJsZSAjdGFibGUgY2xhc3M9XCJkYXRhVGFibGVcIj5cbiAgICA8L3RhYmxlPlxuICAgIDxkaXYgI2VtcHR5VGFibGUgY2xhc3M9XCJkLW5vbmVcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY2lyY2xlIGJnLWdyYXktMzAwIGJvcmRlci1ncmF5LTEwMFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8aDQgY2xhc3M9XCJmb250LTN4bCB0ZXh0LWRhcmtcIiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuRW1wdHlUYWJsZVRpdGxlJ1wiPjwvaDQ+XG4gICAgICAgICAgPHAgY2xhc3M9XCJmb250LWxnIHRleHQtZGFya1wiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5FbXB0eVRhYmxlTWVzc2FnZSdcIj48L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAjZXJyb3JUZW1wbGF0ZSBjbGFzcz1cImQtbm9uZSBlcnJvci1tZXNzYWdlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jaXJjbGUgYmctZGFuZ2VyIGJvcmRlci1ncmF5LTEwMFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8aDQgY2xhc3M9XCJmb250LTN4bCB0ZXh0LXNlY29uZGFyeVwiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5EYXRhRXJyb3IuVGl0bGUnXCI+PC9oND5cbiAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtbGcgdGV4dC1zZWNvbmRhcnkgbWItMVwiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5EYXRhRXJyb3IuTWVzc2FnZSdcIj48L3A+XG4gICAgICAgICAgPHAgY2xhc3M9XCJmb250LWxnIHRleHQtc2Vjb25kYXJ5IGVycm9yLWlubmVyLW1lc3NhZ2VcIj5cbiAgICAgICAgICAgIDxzbWFsbD48L3NtYWxsPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgc3R5bGVVcmxzOiBbJy4vYWR2YW5jZWQtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuXG4gIHByaXZhdGUgX3F1ZXJ5PzogQ2xpZW50RGF0YVF1ZXJ5YWJsZTtcbiAgcHJpdmF0ZSBfY29uZmlnPzogVGFibGVDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIF9maXJzdExvYWQgPSB0cnVlO1xuICBwcml2YXRlIF9zaG93Rm9vdGVyID0gZmFsc2U7XG4gIHByaXZhdGUgX3Nob3dIZWFkZXIgPSB0cnVlO1xuICBwcml2YXRlIF9zaG93UGFnaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgX2lkID0gZ2V0UmFuZG9tSWRlbnRpZmllcigpO1xuICBwdWJsaWMgc21hcnRTZWxlY3QgPSBmYWxzZTtcbiAgcHVibGljIGNvbmZpZ0NoYW5nZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG5cbiAgQFZpZXdDaGlsZCgndGFibGUnKSBwdWJsaWMgdGFibGU/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdlbXB0eVRhYmxlJykgcHVibGljIGVtcHR5VGFibGU/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdlcnJvclRlbXBsYXRlJykgcHVibGljIGVycm9yVGVtcGxhdGU/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdsb2FkaW5nVGFibGUnKSBwdWJsaWMgbG9hZGluZ1RhYmxlPzogRWxlbWVudFJlZjtcbiAgQElucHV0KCkgcHVibGljIGhlaWdodCA9IDgwMDtcbiAgQElucHV0KCkgcHVibGljIHNob3dBY3Rpb25zID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIGF1dG9Mb2FkID0gdHJ1ZTtcbiAgQE91dHB1dCgnbG9hZCcpIHB1YmxpYyBsb2FkOiBFdmVudEVtaXR0ZXI8QWR2YW5jZWRUYWJsZURhdGFSZXN1bHQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdD4oKTtcbiAgQE91dHB1dCgnaW5pdCcpIHB1YmxpYyBpbml0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBASW5wdXQoJ3JlbG9hZCcpIHB1YmxpYyByZWxvYWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ3NlbGVjdCcpIHB1YmxpYyBzZWxlY3Q6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ2RyYXcnKSBwdWJsaWMgZHJhdzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgncGFnZScpIHB1YmxpYyBwYWdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdvcmRlcicpIHB1YmxpYyBvcmRlcjogRXZlbnRFbWl0dGVyPGFueVtdW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXVtdPigpO1xuICBAT3V0cHV0KCdzY3JvbGwnKSBwdWJsaWMgc2Nyb2xsOiBFdmVudEVtaXR0ZXI8eyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfT4oKTtcbiAgQE91dHB1dCgnc2VsZWN0ZWRJdGVtcycpIHB1YmxpYyBzZWxlY3RlZEl0ZW1zOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdsb2FkaW5nJykgcHVibGljIGxvYWRpbmc6IEV2ZW50RW1pdHRlcjx7XG4gICAgdGFyZ2V0OiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50XG4gIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgdGFyZ2V0OiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50XG4gIH0+KCk7XG5cbiAgQElucHV0KCkgcHVibGljIHNjcm9sbGFibGUgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgc2VydmVyU2lkZSA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBsZW5ndGhNZW51ID0gWzUwLCAxMDAsIDIwMCwgNTAwXTtcbiAgQElucHV0KCkgcHVibGljIHBhZ2luZyA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBwYWdlTGVuZ3RoID0gMjU7XG4gIEBJbnB1dCgpIHB1YmxpYyBjb2x1bW5PcmRlcmluZyA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgc3RhdGVTYXZlID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBzdGF0ZUxvYWRDYWxsYmFjaz86IChzZXR0aW5nczogYW55LCBjYWxsYmFjazogKHN0YXRlOiBhbnkpID0+IHZvaWQpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIHB1YmxpYyBzdGF0ZVNhdmVDYWxsYmFjaz86IChzZXR0aW5nczogYW55LCBzdGF0ZTogYW55KSA9PiB2b2lkO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBzY3JvbGxZID0gODAwO1xuICBASW5wdXQoKSBwdWJsaWMgc2Nyb2xsWCA9IHRydWU7XG4gIC8qKlxuICAgKiBFbmFibGVzIHJvdyBzZWxlY3Rpb24uIFRoZSBkZWZhdWxyIHZhbHVlIGlzIGZhbHNlXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0YWJsZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlIG11bHRpcGxlIHNlbGVjdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWVzIGlzIHRydWUuXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgbXVsdGlwbGVTZWxlY3Q6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSB0cnVlO1xuICAvKipcbiAgICogRW5hYmxlcyBjdXN0b20gc2VsZWN0aW9uIGFuZCBoaWRlcyBzZWxlY3QgY29sdW1uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21TZWxlY3QgPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIHNlbGVjdGVkOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgdW5zZWxlY3RlZDogYW55W10gPSBbXTtcbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIFVSTCB0byBsb2FkIHRhYmxlIGNvbmZpZ3VyYXRpb24gZnJvbVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGNvbmZpZ1NyYz86IHN0cmluZztcbiAgcHVibGljIGxhc3RFcnJvcjogYW55O1xuXG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGFibGUgY29uZmlndXJhdGlvblxuICAgKi9cbiAgQElucHV0KCdjb25maWcnKVxuICBwdWJsaWMgc2V0IGNvbmZpZyh2YWx1ZTogVGFibGVDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fY29uZmlnID0gdmFsdWU7XG4gICAgLy8gcmFpc2Ugc3Vic2NyaXB0aW9uXG4gICAgdGhpcy5jb25maWdDaGFuZ2VzLm5leHQodGhpcy5fY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcgYXMgVGFibGVDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVibGljIGdldCBsYXN0UXVlcnlUb3RhbEl0ZW1zKCkge1xuICAgIHJldHVybiB0aGlzLl9sYXN0UXVlcnlUb3RhbEl0ZW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRhYmxlIGZvb3RlciB3aWxsIGJlIHZpc2libGUgb3Igbm90XG4gICAqL1xuICBASW5wdXQoJ3Nob3dGb290ZXInKVxuICBwdWJsaWMgc2V0IHNob3dGb290ZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zaG93Rm9vdGVyID0gdmFsdWU7XG4gICAgLy8gc2hvdyBvciBoaWRlIGZvb3RlclxuICAgIGlmICh0aGlzLl9lbGVtZW50ICYmIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAucXVlcnlTZWxlY3RvcignLmRhdGFUYWJsZXNfaW5mbycpO1xuICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkLW5vbmUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzaG93Rm9vdGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9zaG93Rm9vdGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRhYmxlIGZvb3RlciB3aWxsIGJlIHZpc2libGUgb3Igbm90XG4gICAqL1xuICAgQElucHV0KCdzaG93SGVhZGVyJylcbiAgIHB1YmxpYyBzZXQgc2hvd0hlYWRlcih2YWx1ZTogYm9vbGVhbikge1xuICAgICB0aGlzLl9zaG93SGVhZGVyID0gdmFsdWU7XG4gICAgIC8vIHNob3cgb3IgaGlkZSBmb290ZXJcbiAgICAgaWYgKHRoaXMuX2VsZW1lbnQgJiYgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgY29uc3QgZWxlbWVudCA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGU+dGhlYWQnKTtcbiAgICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICAgICByZXR1cm47XG4gICAgICAgfVxuICAgICAgIGNvbnN0IGRhdGFUYWJsZSA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KS5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlJyk7XG4gICAgICAgaWYgKGRhdGFUYWJsZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgICB9XG4gICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2Qtbm9uZScpO1xuICAgICAgICAgLy8gYWRkIHRvcCBtYXJnaW5cbiAgICAgICAgIGRhdGFUYWJsZS5jbGFzc0xpc3QucmVtb3ZlKCdtdC0yJyk7XG4gICAgICAgfSBlbHNlIHtcbiAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG4gICAgICAgICAvLyByZW1vdmUgdG9wIG1hcmdpblxuICAgICAgICAgZGF0YVRhYmxlLmNsYXNzTGlzdC5hZGQoJ210LTInKTtcbiAgICAgICB9XG4gICAgIH1cbiAgIH1cblxuICAgcHVibGljIGdldCBzaG93SGVhZGVyKCkge1xuICAgICByZXR1cm4gdGhpcy5fc2hvd0hlYWRlcjtcbiAgIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgcGFnaW5nIGluZm9ybWF0aW9uIHdpbGwgYmUgdmlzaWJsZSBvciBub3RcbiAgICovXG4gIEBJbnB1dCgnc2hvd1BhZ2luZycpXG4gIHB1YmxpYyBzZXQgc2hvd1BhZ2luZyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3Nob3dQYWdpbmcgPSB2YWx1ZTtcbiAgICAvLyBzaG93IG9yIGhpZGUgZm9vdGVyXG4gICAgaWYgKHRoaXMuX2VsZW1lbnQgJiYgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gKCB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpXG4gICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlc19wYWdpbmF0ZScpO1xuICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgalF1ZXJ5KGVsZW1lbnQpLnNob3coKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGpRdWVyeShlbGVtZW50KS5oaWRlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzaG93UGFnaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9zaG93UGFnaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhbiBhY3RpdmUgcXVlcnkgZm9yIHRoaXMgdGFibGVcbiAgICovXG4gIEBJbnB1dCgncXVlcnknKVxuICBwdWJsaWMgc2V0IHF1ZXJ5KHZhbHVlOiBDbGllbnREYXRhUXVlcnlhYmxlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fcXVlcnkgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXJ5IGFzIENsaWVudERhdGFRdWVyeWFibGU7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgdHJhbnNsYXRvcjogVHJhbnNsYXRlUGlwZTtcbiAgcHVibGljIGRhdGFUYWJsZTogYW55O1xuICBwdWJsaWMgZHRPcHRpb25zOiBhbnk7XG4gIHByaXZhdGUgbGFzdFF1ZXJ5UGFyYW1zPzogRGF0YVNlcnZpY2VRdWVyeVBhcmFtcztcbiAgcHJpdmF0ZSBfbGFzdFF1ZXJ5VG90YWxJdGVtcyA9IDA7XG4gIHByaXZhdGUgcmVsb2FkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfY29udGV4dDogQW5ndWxhckRhdGFDb250ZXh0LFxuICAgICAgICAgICAgICBASW5qZWN0KENPTFVNTl9GT1JNQVRURVJTKSBwcml2YXRlIF9jb2x1bW5Gb3JtYXR0ZXJzOiBJQWR2YW5jZWRUYWJsZUZvcm1hdHRlcnMsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICAgICAgICBwcml2YXRlIF9hZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXI6IEFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdGVtcGxhdGU6IFRlbXBsYXRlUGlwZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfbG9hZGluZzogTG9hZGluZ1NlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2h0dHA6IEh0dHBDbGllbnQsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NvbHVtblNlbGVjdG9yOiBDb2x1bW5TZWxlY3RvclNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9leHBvcnRTcHJlYWRzaGVldDogRXhwb3J0U3ByZWFkc2hlZXRTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9tb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfZXJyb3JTZXJ2aWNlOiBFcnJvclNlcnZpY2UpIHtcbiAgICAvLyBpbml0aWFsaXplIHRyYW5zbGF0ZSBwaXBlXG4gICAgdGhpcy50cmFuc2xhdG9yID0gbmV3IFRyYW5zbGF0ZVBpcGUodGhpcy5fdHJhbnNsYXRlU2VydmljZSwgbmV3IFRhYmxlVHJhbnNsYXRpb25DaGFuZ2VEZXRlY3RvcigpKTtcbiAgICBqUXVlcnkuZm4uZGF0YVRhYmxlLmV4dC5jbGFzc2VzLnNQYWdlQnV0dG9uID0gJ2J0bic7XG4gICAgalF1ZXJ5LmZuLmRhdGFUYWJsZS5leHQuY2xhc3Nlcy5zUGFnZUJ1dHRvbkFjdGl2ZSA9ICdidG4gYnRuLWxpZ2h0JztcbiAgICB0aGlzLnJlbG9hZFN1YnNjcmlwdGlvbiA9IHRoaXMucmVsb2FkLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5mZXRjaCgpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gc2ltcGxlIHNlYXJjaFxuICBwdWJsaWMgc2VhcmNoKHNlYXJjaFRleHQpIHtcbiAgICB0aGlzLnF1ZXJ5ID0gdGhpcy5xdWVyeSB8fCB0aGlzLl9jb250ZXh0Lm1vZGVsKHRoaXMuY29uZmlnLm1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgIGlmICh0aGlzLnNlcnZlclNpZGUpIHtcbiAgICAgIGlmIChzZWFyY2hUZXh0ICYmIHRoaXMuY29uZmlnLnNlYXJjaEV4cHJlc3Npb24pIHtcbiAgICAgICAgLy8gdmFsaWRhdGUgc2VhcmNoIHRleHQgaW4gZG91YmxlIHF1b3Rlc1xuICAgICAgICBpZiAoL15cIiguKj8pXCIkLy50ZXN0KHNlYXJjaFRleHQpKSB7XG4gICAgICAgICAgdGhpcy5xdWVyeS5zZXRQYXJhbSgnJGZpbHRlcicsXG4gICAgICAgICAgICB0aGlzLl90ZW1wbGF0ZS50cmFuc2Zvcm0odGhpcy5jb25maWcuc2VhcmNoRXhwcmVzc2lvbiwge1xuICAgICAgICAgICAgICB0ZXh0OiBzZWFyY2hUZXh0LnJlcGxhY2UoL15cInxcIiQvZywgJycpLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHRyeSB0byBzcGxpdCB3b3Jkc1xuICAgICAgICAgIGNvbnN0IHdvcmRzID0gc2VhcmNoVGV4dC5zcGxpdCgnICcpO1xuICAgICAgICAgIC8vIGpvaW4gd29yZHMgdG8gYSBzaW5nbGUgZmlsdGVyXG4gICAgICAgICAgY29uc3QgZmlsdGVyID0gd29yZHMubWFwKCh3b3JkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKCh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5zZWFyY2hFeHByZXNzaW9uKSBhcyBzdHJpbmcsIHtcbiAgICAgICAgICAgICAgdGV4dDogd29yZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLmpvaW4oJyBhbmQgJyk7XG4gICAgICAgICAgLy8gc2V0IGZpbHRlclxuICAgICAgICAgIHRoaXMucXVlcnkuc2V0UGFyYW0oJyRmaWx0ZXInLCBmaWx0ZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjbGVhciBmaWx0ZXJcbiAgICAgICAgdGhpcy5xdWVyeS5zZXRQYXJhbSgnJGZpbHRlcicsIG51bGwpO1xuICAgICAgfVxuICAgICAgdGhpcy5fZmlyc3RMb2FkID0gZmFsc2U7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5kcmF3KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGVuc3VyZSBlbXB0eSB0YWJsZSBsYXlvdXRcbiAgICAgIHRoaXMucmVzZXRFbXB0eVRhYmxlKCk7XG4gICAgICAvLyBzZWFyY2ggbG9jYWxseVxuICAgICAgdGhpcy5kYXRhVGFibGUuc2VhcmNoKHNlYXJjaFRleHQudHJpbSgpKS5kcmF3KCk7XG4gICAgICAvLyBnZXQgaW5kZXhlcyBvZiBmaWx0ZXJlZCByb3dzXG4gICAgICBjb25zdCBpbmRleGVzID0gQXJyYXkuZnJvbSh0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLmFpRGlzcGxheSk7XG4gICAgICAvLyBzZXQgcmVjb3Jkc0ZpbHRlcmVkXG4gICAgICBjb25zdCByZWNvcmRzRmlsdGVyZWQgPSBpbmRleGVzLmxlbmd0aDtcbiAgICAgIC8vIHNldCByZWNvcmRzVG90YWxcbiAgICAgIGNvbnN0IHJlY29yZHNUb3RhbCA9IGluZGV4ZXMubGVuZ3RoO1xuICAgICAgLy8gcmV0cmlldmUgZGF0YSBmcm9tIGluZGV4ZXNcbiAgICAgIGNvbnN0IHJvd3MgPSBBcnJheS5mcm9tKHRoaXMuZGF0YVRhYmxlLnJvd3MoKS5kYXRhKCkpO1xuICAgICAgY29uc3QgZGF0YSA9IGluZGV4ZXMubWFwKGluZGV4ID0+IHJvd3NbPG51bWJlcj5pbmRleF0pO1xuICAgICAgLy8gZW1pdCByZXN1bHRzIHRvIGxvYWQgb3V0cHV0XG4gICAgICB0aGlzLmxvYWQuZW1pdCh7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIHJlY29yZHNGaWx0ZXJlZDogcmVjb3Jkc0ZpbHRlcmVkLFxuICAgICAgICByZWNvcmRzVG90YWw6IHJlY29yZHNUb3RhbFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZldGNoKGNsZWFyU2VsZWN0ZWQ/OiBib29sZWFuKSB7XG4gICAgLy8gaWYgZGF0YSB0YWJsZSBpcyBudWxsXG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlID09IG51bGwpIHtcbiAgICAgIC8vIGluaXRpYWxpemUgZGF0YSB0YWJsZVxuICAgICAgcmV0dXJuIHRoaXMubmdPbkluaXQoKTtcbiAgICB9XG4gICAgLy8gY2xlYXIgc2VsZWN0aW9uIGlmIHBhcmFtZXRlciBpcyBub3QgZGVjbGFyZWQgb3IgaXQncyB0cnVlXG4gICAgaWYgKGNsZWFyU2VsZWN0ZWQgPT0gbnVsbCB8fCBjbGVhclNlbGVjdGVkID09PSB0cnVlKSB7XG4gICAgICAvLyBzZXQgc21hcnQgc2VsZWN0IHRvIGZhbHNlXG4gICAgICB0aGlzLnNtYXJ0U2VsZWN0ID0gZmFsc2U7XG4gICAgICAvLyBjbGVhciBzZWxlY3RlZCBpdGVtc1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIC8vIGNsZWFyIHVuc2VsZWN0ZWQgaXRlbXNcbiAgICAgIGlmICh0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy51bnNlbGVjdGVkLmxlbmd0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBsb2FkIGRhdGEgb25seVxuICAgIHRoaXMuZGF0YVRhYmxlLmRyYXcoKTtcbiAgfVxuXG4gIHB1YmxpYyBkZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgdGhpcy5kYXRhVGFibGUuZGVzdHJveSgpO1xuICAgICAgdGhpcy5fZmlyc3RMb2FkID0gdHJ1ZTtcbiAgICAgIGlmICh0aGlzLnRhYmxlKSB7XG4gICAgICAgIGpRdWVyeSh0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQpLmVtcHR5KCk7XG4gICAgICB9XG4gICAgICB0aGlzLmRhdGFUYWJsZSA9IG51bGw7XG4gICAgICAvLyBjbGVhciBzZWxlY3RlZCBpdGVtc1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIC8vIGNsZWFyIHVuc2VsZWN0ZWQgaXRlbXNcbiAgICAgIGlmICh0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy51bnNlbGVjdGVkLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICAvLyBzZXQgc21hcnQgc2VsZWN0IHRvIGZhbHNlXG4gICAgICB0aGlzLnNtYXJ0U2VsZWN0ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdHMgdGhlIHNwZWNpZmllZCBkYXRhIHJvd1xuICAgKi9cbiAgcHVibGljIHNlbGVjdFJvdyhyb3c6IGFueSwgc2lsZW50PzogYm9vbGVhbikge1xuICAgIGlmIChyb3cpIHtcbiAgICAgIC8vIGdldCByb3dcbiAgICAgIGNvbnN0IHJvd05vZGUgPSByb3cubm9kZSgpO1xuICAgICAgLy8gaWYgbXVsdGlwbGUgc2VsZWN0IGlzIGZhbHNlXG4gICAgICBpZiAodGhpcy5tdWx0aXBsZVNlbGVjdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgICAgIC8vIGVudW1lcmF0ZSByb3dcbiAgICAgICAgICB0aGlzLmRhdGFUYWJsZS5yb3dzKCkubm9kZXMoKS5lYWNoKChub2RlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChub2RlICE9PSByb3dOb2RlKSB7XG4gICAgICAgICAgICAgIGpRdWVyeShub2RlKS5maW5kKCc6Y2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGF0YVRhYmxlLnJvd3MoJy5zZWxlY3RlZCcpLm5vZGVzKCkuZWFjaCgobm9kZTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAobm9kZSAhPT0gcm93Tm9kZSkge1xuICAgICAgICAgICAgICBqUXVlcnkobm9kZSkucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2xlYXIgc2VsZWN0ZWRcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgLy8gaWYgY3VzdG9tIHNlbGVjdCBtb2RlIGlzIG9mZlxuICAgICAgaWYgKHRoaXMuY3VzdG9tU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgICBqUXVlcnkocm93Tm9kZSkuZmluZCgnOmNoZWNrYm94JykucHJvcCgnY2hlY2tlZCcsIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gb3RoZXJ3aXNlIGFkZCBjbGFzc1xuICAgICAgICBqUXVlcnkocm93Lm5vZGUoKSkuYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgICB9XG4gICAgICAvLyBnZXQgcm93IGRhdGFcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHkgfHwgdGhpcy5jb25maWcuY29sdW1uc1swXS5uYW1lIHx8ICcnO1xuICAgICAgY29uc3QgZGF0YSA9IHJvdy5kYXRhKCk7XG4gICAgICAvLyBzZWFyY2ggc2VsZWN0ZWQgaXRlbXNcbiAgICAgIGxldCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBkYXRhW2tleV07XG4gICAgICB9KTtcbiAgICAgIGlmIChmaW5kSW5kZXggPj0gMCkge1xuICAgICAgICAvLyByZW1vdmUgcHJldmlvdXNseSBzZWxlY3RlZCByb3dcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoZmluZEluZGV4LCAxKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWQucHVzaChkYXRhKTtcbiAgICAgIC8vIHZhbGlkYXRlIHVuc2VsZWN0ZWQgZGF0YVxuICAgICAgZmluZEluZGV4ID0gdGhpcy51bnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBkYXRhW2tleV07XG4gICAgICB9KTtcbiAgICAgIGlmIChmaW5kSW5kZXggPj0gMCkge1xuICAgICAgICAvLyByZW1vdmUgcHJldmlvdXNseSBzZWxlY3RlZCByb3dcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkLnNwbGljZShmaW5kSW5kZXgsIDEpO1xuICAgICAgfVxuICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5zZWxlY3RzIHRoZSBzcGVjaWZpZWQgZGF0YSByb3cgaWYgaXQncyBzZWxlY3RlZFxuICAgKi9cbiAgcHVibGljIHVuU2VsZWN0Um93KHJvdzogYW55LCBzaWxlbnQ/OiBib29sZWFuKSB7XG4gICAgaWYgKHJvdykge1xuICAgICAgLy8gaWYgY3VzdG9tIHNlbGVjdCBtb2RlIGlzIG9mZlxuICAgICAgaWYgKHRoaXMuY3VzdG9tU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgICBqUXVlcnkocm93Lm5vZGUoKSkuZmluZCgnOmNoZWNrYm94JykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG90aGVyd2lzZSBhZGQgY2xhc3NcbiAgICAgICAgalF1ZXJ5KHJvdy5ub2RlKCkpLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpO1xuICAgICAgfVxuICAgICAgLy8gZ2V0IGZpcnN0IGNvbHVtbiBrZXlcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHkgfHwgdGhpcy5jb25maWcuY29sdW1uc1swXS5uYW1lIHx8ICcnO1xuICAgICAgY29uc3QgZGF0YSA9IHJvdy5kYXRhKCk7XG4gICAgICBjb25zdCBpZCA9IGRhdGFba2V5XTtcbiAgICAgIGxldCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBpZDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGZpbmRJbmRleCA+PSAwKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKGZpbmRJbmRleCwgMSk7XG4gICAgICAgIGlmICh0aGlzLnNtYXJ0U2VsZWN0KSB7XG4gICAgICAgICAgLy8gYWRkIHRoaXMgcm93IHRvIHVuc2VsZWN0ZWQgcm93c1xuICAgICAgICAgIGZpbmRJbmRleCA9IHRoaXMudW5zZWxlY3RlZC5maW5kSW5kZXgoKHgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB4W2tleV0gPT09IGlkO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChmaW5kSW5kZXggPCAwKSB7XG4gICAgICAgICAgICB0aGlzLnVuc2VsZWN0ZWQucHVzaChkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0QW55KCkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgIC8vIHNldCBzbWFydCBzZWxlY3QgZmxhZ1xuICAgICAgdGhpcy5zbWFydFNlbGVjdCA9IHRydWU7XG4gICAgICAvLyBzZWxlY3QgYW55IHJvd1xuICAgICAgdGhpcy5kYXRhVGFibGUucm93cygpLmV2ZXJ5KChpbmRleDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZGF0YVRhYmxlLnJvdyggaW5kZXggKTtcbiAgICAgICAgdGhpcy5zZWxlY3RSb3cocm93LCB0cnVlKTtcbiAgICAgIH0pO1xuICAgICAgLy8gZW1pdCBzZWxlY3Rpb24gZXZlbnRcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3ROb25lKCkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgIC8vIHNldCBzbWFydCBzZWxlY3QgZmxhZ1xuICAgICAgdGhpcy5zbWFydFNlbGVjdCA9IGZhbHNlO1xuICAgICAgdGhpcy51bnNlbGVjdGVkLnNwbGljZSgwLCB0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIC8vIHNlbGVjdCBhbnkgcm93XG4gICAgICB0aGlzLmRhdGFUYWJsZS5yb3dzKCkuZXZlcnkoKGluZGV4OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhVGFibGUucm93KCBpbmRleCApO1xuICAgICAgICB0aGlzLnVuU2VsZWN0Um93KHJvdywgdHJ1ZSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIC8vIGVtaXQgc2VsZWN0aW9uIGV2ZW50XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlU2VsZWN0Um93KHJvdzogYW55KSB7XG4gICAgaWYgKHJvdykge1xuICAgICAgY29uc3QgZGF0YSA9IHJvdy5kYXRhKCk7XG4gICAgICAvLyBnZXQgZmlyc3QgY29sdW1uIGtleVxuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eSB8fCB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLm5hbWUgfHwgJyc7XG4gICAgICAvLyBnZXQgaWRcbiAgICAgIGNvbnN0IGlkID0gZGF0YVtrZXldO1xuICAgICAgLy8gZmluZCBpZiByb3cgaXMgc2VsZWN0ZWRcbiAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWQuZmluZCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBpZDtcbiAgICAgIH0pO1xuICAgICAgLy8gaWYgcm93IGlzIHNlbGVjdGVkXG4gICAgICBpZiAoZmluZEluZGV4ID49IDApIHtcbiAgICAgICAgLy8gdW5zZWxlY3RcbiAgICAgICAgdGhpcy51blNlbGVjdFJvdyhyb3cpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RSb3cocm93KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub2luc3BlY3Rpb24gSlNNZXRob2RDYW5CZVN0YXRpY1xuICAvKipcbiAgICogRGF0YXRhYmxlcyBjb2x1bW4gcmVuZGVyZXIgZm9yIHNlbGVjdCBjaGVja2JveFxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcGFyYW0gdHlwZVxuICAgKiBAcGFyYW0gcm93XG4gICAqIEBwYXJhbSBtZXRhXG4gICAqL1xuICBwcml2YXRlIF9yZW5kZXJTZWxlY3QoZGF0YSwgdHlwZSwgcm93LCBtZXRhKSB7XG4gICAgLy8gZ2V0IGNvbHVtblxuICAgIGNvbnN0IGNvbHVtbiA9IG1ldGEuc2V0dGluZ3MuYW9Db2x1bW5zW21ldGEuY29sXTtcbiAgICBpZiAodHlwZW9mIGNvbHVtbi5zZWxlY3RUZW1wbGF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW4sIHtcbiAgICAgICAgc2VsZWN0VGVtcGxhdGU6IHRlbXBsYXRlKGA8aW5wdXQgY2xhc3M9XCJjaGVja2JveCBjaGVja2JveC10aGVtZSBzLXJvd1wiIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGlkPVwicy0ke3RoaXMuX2lkfS1cXCR7bWV0YS5yb3d9XCIgZGF0YS1pZD1cIlxcJHtkYXRhfVwiIC8+PGxhYmVsIGZvcj1cInMtJHt0aGlzLl9pZH0tXFwke21ldGEucm93fVwiPiZuYnNwOzwvbGFiZWw+XG4gICAgICAgIGApLFxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIHJlbmRlciB0ZW1wbGF0ZVxuICAgIHJldHVybiBjb2x1bW4uc2VsZWN0VGVtcGxhdGUoe1xuICAgICAgbWV0YSxcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICB0aGlzLmxvYWRpbmcuZW1pdCh7XG4gICAgICAgIHRhcmdldDogdGhpc1xuICAgICAgfSk7XG4gICAgICAvLyBwYXJzZSBwcm9wZXJ0aWVzXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29uZmlnLCAnc2VsZWN0YWJsZScpKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0YWJsZSA9IHRoaXMuY29uZmlnLnNlbGVjdGFibGU7XG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29uZmlnLCAnbXVsdGlwbGVTZWxlY3QnKSkge1xuICAgICAgICB0aGlzLm11bHRpcGxlU2VsZWN0ID0gdGhpcy5jb25maWcubXVsdGlwbGVTZWxlY3Q7XG4gICAgICB9XG4gICAgICAvLyBwcmVwYXJlIGNvbmZpZ3VyYXRpb24gZm9yIGNvbHVtbnNcbiAgICAgIGNvbnN0IHRhYmxlQ29sdW1ucyA9IHRoaXMuY29uZmlnLmNvbHVtbnNcbiAgICAgICAgLy8gZmlsdGVyIGFjdGlvbiBsaW5rIGNvbHVtblxuICAgICAgICAuZmlsdGVyKChjb2x1bW4pID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlciAmJiBjb2x1bW4uZm9ybWF0dGVyID09PSAnQWN0aW9uTGlua0Zvcm1hdHRlcicgJiYgdGhpcy5zaG93QWN0aW9ucyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pLm1hcCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgLy8gY29udmVydCBjb2x1bW4gdG8gYWR2YW5jZSB0YWJsZSBjb2x1bW5cbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgQ29sdW1uRm9ybWF0dGVyKHRoaXMuX2luamVjdG9yKSwgY29sdW1uKTtcbiAgICAgICAgfSkubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgICBjb25zdCBjb2x1bW5EZWZpbml0aW9uID0ge1xuICAgICAgICAgICAgZGF0YTogY29sdW1uLnByb3BlcnR5IHx8IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgZGVmYXVsdENvbnRlbnQ6IGNvbHVtbi5kZWZhdWx0Q29udGVudCAhPSBudWxsID8gY29sdW1uLmRlZmF1bHRDb250ZW50IDogJycsXG4gICAgICAgICAgICB0aXRsZTogdGhpcy50cmFuc2xhdG9yLnRyYW5zZm9ybShjb2x1bW4udGl0bGUpLFxuICAgICAgICAgICAgc29ydGFibGU6IGNvbHVtbi5oYXNPd25Qcm9wZXJ0eSgnc29ydGFibGUnKSA/IGNvbHVtbi5zb3J0YWJsZSA6IHRydWUsXG4gICAgICAgICAgICB2aXNpYmxlOiBjb2x1bW4uaGFzT3duUHJvcGVydHkoJ2hpZGRlbicpID8gIWNvbHVtbi5oaWRkZW4gOiB0cnVlLFxuICAgICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChjb2x1bW4uY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjb2x1bW4uY2xhc3NOYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICcnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXJzKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGRhdGE7XG4gICAgICAgICAgICAgICAgKGNvbHVtbi5mb3JtYXR0ZXJzIGFzIGFueVtdKS5mb3JFYWNoKChjb2x1bW5Gb3JtYXR0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHNlbGYuX2NvbHVtbkZvcm1hdHRlcnNbY29sdW1uRm9ybWF0dGVyLmZvcm1hdHRlcl07XG4gICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0dGVyICYmIHR5cGVvZiBmb3JtYXR0ZXIucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXRTdHJpbmcgPSBjb2x1bW5Gb3JtYXR0ZXIuZm9ybWF0U3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0T3B0aW9ucyA9IGNvbHVtbkZvcm1hdHRlci5mb3JtYXRPcHRpb25zO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZm9ybWF0dGVyLnJlbmRlci5iaW5kKGNvbHVtbikocmVzdWx0LCB0eXBlLCByb3csIG1ldGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBjb2x1bW4uZm9ybWF0U3RyaW5nO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBjb2x1bW4uZm9ybWF0T3B0aW9ucztcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBjaGVjayBpZiBjb2x1bW4gZm9ybWF0dGVycyBleHBvcnQgY3JlYXRlZENlbGwgZXZlbnRcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gY29sdW1uLmZvcm1hdHRlcnMuZmlsdGVyKChjb2x1bW5Gb3JtYXR0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGNvbHVtbkZvcm1hdHRlci5hZnRlclJlbmRlciA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgICAgICAgY3JlYXRlZENlbGwoY2VsbDogYW55LCBjZWxsRGF0YTogYW55LCByb3dEYXRhOiBhbnksIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goKGNvbHVtbkZvcm1hdHRlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBzZWxmLl9jb2x1bW5Gb3JtYXR0ZXJzW2NvbHVtbkZvcm1hdHRlci5mb3JtYXR0ZXJdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0dGVyICYmIHR5cGVvZiBmb3JtYXR0ZXIuYWZ0ZXJSZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXIuYWZ0ZXJSZW5kZXIuYmluZChjb2x1bW4pKGNlbGwsIGNlbGxEYXRhLCByb3dEYXRhLCByb3dJbmRleCwgY29sSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHNlbGYuX2NvbHVtbkZvcm1hdHRlcnNbY29sdW1uLmZvcm1hdHRlcl07XG4gICAgICAgICAgICBpZiAoZm9ybWF0dGVyICYmIHR5cGVvZiBmb3JtYXR0ZXIucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICAgIHJlbmRlcjogZm9ybWF0dGVyLnJlbmRlci5iaW5kKGNvbHVtbiksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZvcm1hdHRlciAmJiB0eXBlb2YgZm9ybWF0dGVyLmFmdGVyUmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICAgIHJlbmRlcjogZm9ybWF0dGVyLnJlbmRlci5iaW5kKGNvbHVtbiksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgICBjcmVhdGVkQ2VsbDogZm9ybWF0dGVyLmFmdGVyUmVuZGVyLmJpbmQoY29sdW1uKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjb2x1bW5EZWZpbml0aW9uO1xuICAgICAgICB9KTtcbiAgICAgIC8vIGdldCB0YWJsZSBlbGVtZW50XG4gICAgICBjb25zdCB0YWJsZUVsZW1lbnQgPSBqUXVlcnkodGhpcy50YWJsZSAmJiB0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgalF1ZXJ5KHdpbmRvdykub24oJ3Jlc2l6ZScsICgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFUYWJsZS5jb2x1bW5zLmFkanVzdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgMSk7XG4gICAgICB9KTtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tc2hhZG93ZWQtdmFyaWFibGVcbiAgICAgIHRhYmxlRWxlbWVudC5vbigncHJvY2Vzc2luZy5kdCcsIChldmVudCwgc2V0dGluZ3MsIHByb2Nlc3NpbmcpID0+IHtcbiAgICAgICAgaWYgKHByb2Nlc3NpbmcpIHtcbiAgICAgICAgICAvLyBjbGVhciBlbXB0eSB0YWJsZSBlbGVtZW50XG4gICAgICAgICAgdGFibGVFbGVtZW50LmZpbmQoJy5kYXRhVGFibGVzX2VtcHR5JykuaHRtbCgnJyk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0YWJsZUVsZW1lbnQuYWRkQ2xhc3MoJ3Byb2Nlc3NpbmcnKTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRhYmxlRWxlbWVudC5yZW1vdmVDbGFzcygncHJvY2Vzc2luZycpO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxldCBkcmF3SW5kZXggPSAxO1xuICAgICAgdGFibGVFbGVtZW50Lm9uKCdvcmRlci5kdCcsIChldmVudDogYW55KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgICAgIGNvbnN0IG9yZGVyID0gdGhpcy5kYXRhVGFibGUub3JkZXIoKTtcbiAgICAgICAgICBjb25zdCBjb2x1bW5zID0gdGFibGVDb2x1bW5zO1xuICAgICAgICAgIGlmIChvcmRlciAmJiBvcmRlci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMub3JkZXIuZW1pdChvcmRlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KS5vbignZHJhdy5kdCcsIChldmVudCkgPT4ge1xuICAgICAgICB0aGlzLmRyYXcuZW1pdCgpO1xuICAgICAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgICAgICBjb25zdCBpbmZvOiB7IHBhZ2U6IG51bWJlcjsgcGFnZXM6IG51bWJlciB9ID0gdGhpcy5kYXRhVGFibGUucGFnZS5pbmZvKCk7XG4gICAgICAgICAgdGhpcy5wYWdlLmVtaXQoaW5mbyk7XG4gICAgICAgICAgaWYgKGRyYXdJbmRleCA+IDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRyYXdJbmRleCsrO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7dGhpcy5kYXRhVGFibGUuY29sdW1ucy5hZGp1c3QoKTsgfSwgMSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFUlJPUicsICdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBhZGp1c3RpbmcgdGFibGUgY29sdW1ucycpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIGFsbG93IHNlbGVjdGlvblxuICAgICAgaWYgKHRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgICAvLyBnZXQgZmlyc3QgY29sdW1uIChhcyByb3cgcHJpbWFyeSBrZXkpXG4gICAgICAgIC8vIHRvZG86OmFsbG93IHJvdyBwcmltYXJ5IGtleSBjb25maWd1cmF0aW9uXG4gICAgICAgIGNvbnN0IGZpcnN0Q29sdW1uID0gdGhpcy5jb25maWcuY29sdW1uc1swXTtcbiAgICAgICAgLy8gYWRkIHNlbGVjdCBjb2x1bW5cbiAgICAgICAgY29uc3Qgc2VsZWN0Q29sdW1uRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICBjbGFzc05hbWU6ICd0ZXh0LWNlbnRlciBwbC00IHByLTAnLFxuICAgICAgICAgIGRhdGE6IGZpcnN0Q29sdW1uLnByb3BlcnR5IHx8IGZpcnN0Q29sdW1uLm5hbWUsXG4gICAgICAgICAgZGVmYXVsdENvbnRlbnQ6ICcnLFxuICAgICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgdmlzaWJsZTogIXRoaXMuY3VzdG9tU2VsZWN0LFxuICAgICAgICAgIG5hbWU6IGZpcnN0Q29sdW1uLm5hbWUsXG4gICAgICAgIH07XG4gICAgICAgIC8vIGFzc2lnbiByZW5kZXJlclxuICAgICAgICBPYmplY3QuYXNzaWduKHNlbGVjdENvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICByZW5kZXI6IHRoaXMuX3JlbmRlclNlbGVjdC5iaW5kKHRoaXMpLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gYW5kIGZpbmFsbHkgYWRkIGNvbHVtblxuICAgICAgICB0YWJsZUNvbHVtbnMudW5zaGlmdChzZWxlY3RDb2x1bW5EZWZpbml0aW9uKTtcbiAgICAgICAgLy8gdXNlciBpbnRlcmZhY2UgYWRkaXRpb25zXG4gICAgICAgIC8vIGhhbmRsZSBwYWdlIGNoYW5nZSBldmVudCAoYSB0cmljayBmb3IgZmlyaW5nIGRyYXcuZHQgZXZlbnRzKVxuICAgICAgICB0YWJsZUVsZW1lbnRcbiAgICAgICAgICAvLyBoYW5kbGUgZHJhdyBldmVudHNcbiAgICAgICAgICAub24oJ2RyYXcuZHQnLCAoKSA9PiB7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmN1c3RvbVNlbGVjdCkge1xuICAgICAgICAgICAgICAvLyBlbmFibGUgcm93IHNlbGVjdGlvbiBldmVudFxuICAgICAgICAgICAgICB0YWJsZUVsZW1lbnQuZmluZCgndGJvZHknKS5vbignY2xpY2snLCAndHInLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAvLyBzZWxlY3Qgcm93XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gc2VsZi5kYXRhVGFibGUucm93KHRoaXMpO1xuICAgICAgICAgICAgICAgIC8vIGFkZCByb3dcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdC5lbWl0KHJvdyk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSB0YWJsZUVsZW1lbnQuZmluZCgnaW5wdXQucy1yb3cnKTtcbiAgICAgICAgICAgIGVsZW1lbnRzLm9mZignY2xpY2snKS5vbignY2xpY2snLCB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgLy8gbWFrZSBzZWxlY3Rpb24gb24gY3VycmVudCBwYWdlXG4gICAgICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLnByb3BlcnR5IHx8ICcnO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAvLyBlbnVtZXJhdGUgc2VsZWN0ZWQgaXRlbXNcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZmluZCByb3cgaWRlbnRpZmllclxuICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gaXRlbVtrZXldO1xuICAgICAgICAgICAgICAgIC8vIGlmIGlkZW50aWZpZXIgaXMgZGVmaW5lZFxuICAgICAgICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAvLyB0cnkgdG8gZmluZCBjaGVjayBlbGVtZW50IHdpdGggdGhpcyBpZGVudGlmaWVyIGluIGF0dHJpYnV0ZSBkYXRhLWlkXG4gICAgICAgICAgICAgICAgICB0YWJsZUVsZW1lbnQuZmluZChgaW5wdXRbZGF0YS1pZD0nJHtpZH0nXWApLnByb3AoJ2NoZWNrZWQnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc21hcnRTZWxlY3QpIHtcbiAgICAgICAgICAgICAgLy8gc2VsZWN0IHJvd3MgdGhhdCBhcmUgbm90IHNlbGVjdGVkXG4gICAgICAgICAgICAgIC8vIGFuZCBkbyBub3QgaW5jbHVkZWQgaW4gdW5zZWxlY3RlZCBjb2xsZWN0aW9uXG4gICAgICAgICAgICAgIHRhYmxlRWxlbWVudC5maW5kKCdpbnB1dFtkYXRhLWlkXScpLmVhY2goKGluZGV4LCBlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZ2V0IGRhdGEgaWRcbiAgICAgICAgICAgICAgICBpZiAodGhpcy51bnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcbiAgICAgICAgICAgICAgICAgIHJldHVybiB4W2tleV0gPT0galF1ZXJ5KGVsZW1lbnQpLmF0dHIoJ2RhdGEtaWQnKTtcbiAgICAgICAgICAgICAgICB9KSA8IDApIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Um93KHRoaXMuZGF0YVRhYmxlLnJvdyhpbmRleCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIHRhYmxlRWxlbWVudC5maW5kKCdpbnB1dFtkYXRhLWlkXScpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAvLyBpbml0aWFsaXplIGRhdGEgdGFibGVcbiAgICAgIGNvbnN0IHNldHRpbmdzID0ge1xuICAgICAgICAvLyBzZXQgbGVuZ3RoIG1lbnVcbiAgICAgICAgbGVuZ3RoTWVudTogWzUsIDEwLCA1MCwgMTAwLCAyMDAsIDUwMF0sXG4gICAgICAgIC8vIGhpZGUgbGVuZ3RoIG1lbnVcbiAgICAgICAgbGVuZ3RoQ2hhbmdlOiBmYWxzZSxcbiAgICAgICAgLy8gZW5hYmxlIHNlYXJjaCBidXQgaGlkZSBzZWFyY2ggYm94IChjc3MpXG4gICAgICAgIHNlYXJjaGluZzogdHJ1ZSxcbiAgICAgICAgLy8gZW5hYmxlIGRhdGEgcHJvY2Vzc2luZ1xuICAgICAgICBwcm9jZXNzaW5nOiB0cnVlLFxuICAgICAgICAvLyBlbmFibGUgZ2V0dGluZyBzZXJ2ZXIgc2lkZSBkYXRhXG4gICAgICAgIHNlcnZlclNpZGU6IHRoaXMuc2VydmVyU2lkZSxcbiAgICAgICAgLy8gZW51bWVyYXRlIHRhYmxlIGNvbHVtbnNcbiAgICAgICAgY29sdW1uczogdGFibGVDb2x1bW5zLFxuICAgICAgICBjb2xSZW9yZGVyOiAgdGhpcy5jb2x1bW5PcmRlcmluZyxcbiAgICAgICAgb3JkZXI6IFtdLFxuICAgICAgICAvLyBzZXQgc2Nyb2xsIHhcbiAgICAgICAgc2Nyb2xsWDogdGhpcy5zY3JvbGxYLFxuICAgICAgICBkb206ICdCZnJ0aXAnLFxuICAgICAgICBhdXRvV2lkdGg6IGZhbHNlLFxuICAgICAgICBidXR0b25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZXh0ZW5kOiAnZXhjZWwnLFxuICAgICAgICAgICAgZmlsZW5hbWU6IHRoaXMuY29uZmlnLnRpdGxlLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiAnZC1ub25lJyxcbiAgICAgICAgICAgIGV4cG9ydE9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgY29sdW1uczogJ3RoOm5vdCg6Zmlyc3QtY2hpbGQpJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gZGVmaW5lIHNlcnZlciBkYXRhIGNhbGxiYWNrXG4gICAgICAgIGZuU2VydmVyRGF0YShzU291cmNlOiBhbnksIGFvRGF0YTogYW55LCBmbkNhbGxiYWNrOiBhbnksIG9TZXR0aW5nczogYW55KSB7XG4gICAgICAgICAgLy8gaWYgbWV0aG9kIGlzIGludm9rZWQgZm9yIHRoZSBmaXJzdCB0aW1lXG4gICAgICAgICAgaWYgKHNlbGYuX2ZpcnN0TG9hZCkge1xuICAgICAgICAgICAgLy8gZGlzYWJsZWQgZmlyc3QgbG9hZCBmbGFnXG4gICAgICAgICAgICBzZWxmLl9maXJzdExvYWQgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIGlmIGF1dG8gbG9hZCBpcyBkaXNhYmxlZFxuICAgICAgICAgICAgaWYgKHNlbGYuYXV0b0xvYWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVtcHR5RGF0YVNldCA9IHtcbiAgICAgICAgICAgICAgICByZWNvcmRzVG90YWw6IDAsXG4gICAgICAgICAgICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiAwLFxuICAgICAgICAgICAgICAgIGRhdGE6IFtdLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBzZWxmLl9sYXN0UXVlcnlUb3RhbEl0ZW1zID0gMDtcbiAgICAgICAgICAgICAgLy8gZW1pdCBlbXB0eSBkYXRhXG4gICAgICAgICAgICAgIHNlbGYubG9hZC5lbWl0KGVtcHR5RGF0YVNldCk7XG4gICAgICAgICAgICAgIC8vIHJldHVybiBlbXB0eSBkYXRhXG4gICAgICAgICAgICAgIHJldHVybiBmbkNhbGxiYWNrKGVtcHR5RGF0YVNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHJlc2V0IGVycm9yXG4gICAgICAgICAgc2VsZi50b2dnbGVFcnJvcigpO1xuICAgICAgICAgIC8vIGdldCBhY3RpdmF0ZWQgcm91dGUgcGFyYW1zXG4gICAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBzZWxmLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcztcbiAgICAgICAgICAvLyBnZXQgY29sdW1uc1xuICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSBhb0RhdGFbMV0udmFsdWU7XG4gICAgICAgICAgLy8gZ2V0IG9yZGVyIGV4cHJlc3Npb25cbiAgICAgICAgICBjb25zdCBvcmRlciA9IGFvRGF0YVsyXS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgc2tpcCByZWNvcmRzIHBhcmFtXG4gICAgICAgICAgY29uc3Qgc2tpcCA9IGFvRGF0YVszXS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgcGFnZSBzaXplIHBhcmFtXG4gICAgICAgICAgY29uc3QgdG9wID0gYW9EYXRhWzRdLnZhbHVlO1xuICAgICAgICAgIC8vIGdldCBzZWFyY2ggdmFsdWVcbiAgICAgICAgICBjb25zdCBzZWFyY2ggPSBhb0RhdGFbNV0udmFsdWU7XG4gICAgICAgICAgLy8gZ2V0IGRhdGEgcXVlcnlhYmxlXG4gICAgICAgICAgY29uc3QgcSA9IHNlbGYuX3F1ZXJ5IGluc3RhbmNlb2YgQ2xpZW50RGF0YVF1ZXJ5YWJsZSA/IHNlbGYuX3F1ZXJ5IDogc2VsZi5fY29udGV4dC5tb2RlbChzZWxmLmNvbmZpZy5tb2RlbCkuYXNRdWVyeWFibGUoKTtcbiAgICAgICAgICAvLyBhcHBseSBwYWdpbmcgcGFyYW1zXG4gICAgICAgICAgaWYgKHRvcCkge1xuICAgICAgICAgICAgcS50YWtlKHRvcCkuc2tpcChza2lwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gYXBwbHkgb3JkZXIgcGFyYW1zXG4gICAgICAgICAgaWYgKG9yZGVyICYmIG9yZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gZ2V0IG9yZGVyIHF1ZXJ5IGV4cHJlc3Npb25cbiAgICAgICAgICAgIGNvbnN0IG9yZGVyQnlTdHIgPSBvcmRlci5tYXAoKGV4cHI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBsZXQgY29sdW1uSW5kZXg6IG51bWJlcjtcbiAgICAgICAgICAgICAgaWYgKHNlbGYuY29sdW1uT3JkZXJpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uSW5kZXggPSBleHByLmNvbHVtbjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIGN1cnJlbnQgY29sdW1uIG9yZGVyIChmcm9tIGNvbFJlb3JkZXIpXG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uT3JkZXI6IG51bWJlcltdID0gc2VsZi5kYXRhVGFibGUuY29sUmVvcmRlci5vcmRlcigpO1xuICAgICAgICAgICAgICAgIC8vIGFuZCBtYXRjaCB0aGUgZGF0YVRhYmxlIGluZGV4IHRvIHRoZSBjb25maWcgY29sdW1ucyBpbmRleFxuICAgICAgICAgICAgICAgIC8vIGV4cHIuY29sdW1uIHNob3VsZCBhbHdheXMgYmUgdmFsaWQgKGUuZy4gaW4gcmFuZ2UpLCBidXQgcGVyZm9ybSBhIG1pbm9yIHZhbGlkYXRpb25cbiAgICAgICAgICAgICAgICBpZiAoZXhwci5jb2x1bW4gPj0gMCAmJiBleHByLmNvbHVtbiA8IGNvbHVtbk9yZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXggPSBjb2x1bW5PcmRlcltleHByLmNvbHVtbl07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIC8vIHVzZSB0aGUgZmlyc3QgY29sdW1uIGFzIGEgZmFsbGJhY2sgKHdvbid0IGhhcHBlbiwganVzdCBmb3Igc2FmZXR5KVxuICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdGFibGVDb2x1bW5zW2NvbHVtbkluZGV4XS5uYW1lICsgJyAnICsgZXhwci5kaXIgfHwgJ2FzYyc7XG4gICAgICAgICAgICB9KS5qb2luKCcsJyk7XG4gICAgICAgICAgICAvLyBzZXQgb3JkZXJcbiAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRvcmRlcmJ5Jywgb3JkZXJCeVN0cik7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGVuc3VyZSBzZWxmLnN0YXRlTG9hZENhbGxiYWNrXG4gICAgICAgICAgaWYgKHNlbGYuc3RhdGVMb2FkQ2FsbGJhY2sgPT0gbnVsbCkge1xuICAgICAgICAgICAgc2VsZi5zdGF0ZUxvYWRDYWxsYmFjayA9ICgoXywgY2FsbGJhY2spICA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZWxmLnN0YXRlTG9hZENhbGxiYWNrKG51bGwsIChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgLy8gY29uZmlndXJlICRzZWxlY3QgcGFyYW1ldGVyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3QgPSBzZWxmLmNvbmZpZy5jb2x1bW5zLmZpbHRlciggKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICBpZiAoY29sdW1uLnZpcnR1YWwgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGNvbHVtbi5vcHRpb25hbCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS5jb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRhYmxlQ29sdW1ucy5maW5kSW5kZXgoKHRhYmxlQ29sdW1uKSA9PiB0YWJsZUNvbHVtbi5uYW1lID09PSBjb2x1bW4ubmFtZSk7XG4gICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUuY29sdW1uc1tpbmRleF0udmlzaWJsZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSkubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgaWYgKGNvbHVtbi5wcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW4ubmFtZSArICcgYXMgJyArIGNvbHVtbi5wcm9wZXJ0eTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uLm5hbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcS5zZWxlY3QuYXBwbHkocSwgc2VsZWN0KTtcbiAgICAgICAgICAgIC8vIGNvbmZpZ3VyZSAkZmlsdGVyXG4gICAgICAgICAgICBpZiAocXVlcnlQYXJhbXMuJGZpbHRlciAmJiBxdWVyeVBhcmFtcy4kZmlsdGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAvLyBzZXQgcm91dGUgZmlsdGVyXG4gICAgICAgICAgICAgIGNvbnN0IHFQYXJhbXMgPSBxLmdldFBhcmFtcygpO1xuICAgICAgICAgICAgICBxLnNldFBhcmFtKCckZmlsdGVyJywgbnVsbCk7XG4gICAgICAgICAgICAgIGNvbnN0IGV4cHJlc3Npb25zID0gWyBxdWVyeVBhcmFtcy4kZmlsdGVyIF07XG4gICAgICAgICAgICAgIGlmIChxUGFyYW1zLiRmaWx0ZXIpIHsgZXhwcmVzc2lvbnMucHVzaCgnKCcgKyBxUGFyYW1zLiRmaWx0ZXIgKyAnKScgKTsgfVxuICAgICAgICAgICAgICBxLmZpbHRlcihleHByZXNzaW9ucy5qb2luKCcgYW5kICcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHF1ZXJ5IHBhcmFtZXRlcnMgY29udGFpbiBmaWx0ZXJcbiAgICAgICAgICAgIGlmIChxdWVyeVBhcmFtcy4kZXhwYW5kICYmIHF1ZXJ5UGFyYW1zLiRleHBhbmQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIC8vIHNldCByb3V0ZSAkZXhwYW5kXG4gICAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRleHBhbmQnLCBxdWVyeVBhcmFtcy4kZXhwYW5kKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZi5jb25maWcgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMuZXhwYW5kKSB7XG4gICAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRleHBhbmQnLCBzZWxmLmNvbmZpZy5kZWZhdWx0cy5leHBhbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFxLmdldFBhcmFtcygpWyckb3JkZXJieSddICYmIHNlbGYuY29uZmlnICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzLm9yZGVyQnkpIHtcbiAgICAgICAgICAgICAgcS5zZXRQYXJhbSgnJG9yZGVyYnknLCBzZWxmLmNvbmZpZy5kZWZhdWx0cy5vcmRlckJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cy5ncm91cEJ5KSB7XG4gICAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRncm91cGJ5Jywgc2VsZi5jb25maWcuZGVmYXVsdHMuZ3JvdXBCeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhcHBlbmQgZGVmYXVsdCBmaWx0ZXJcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cy5maWx0ZXIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2FkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlci5hc3luY0J1aWxkRmlsdGVyKHNlbGYuY29uZmlnLmRlZmF1bHRzLmZpbHRlcikudGhlbigoZGVmYXVsdEZpbHRlclN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0RmlsdGVyU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBxUGFyYW1zID0gcS5nZXRQYXJhbXMoKTtcbiAgICAgICAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRmaWx0ZXInLCBudWxsKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cHJlc3Npb25zID0gWyBkZWZhdWx0RmlsdGVyU3RyaW5nIF07XG4gICAgICAgICAgICAgICAgICBpZiAocVBhcmFtcy4kZmlsdGVyKSB7IGV4cHJlc3Npb25zLnB1c2goJygnICsgcVBhcmFtcy4kZmlsdGVyICsgJyknICk7IH1cbiAgICAgICAgICAgICAgICAgIHEuZmlsdGVyKGV4cHJlc3Npb25zLmpvaW4oJyBhbmQgJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZWxmLmxhc3RRdWVyeVBhcmFtcyA9IHEuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEuZ2V0TGlzdCgpLnRoZW4oKGl0ZW1zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFTZXQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVjb3Jkc1RvdGFsOiBpdGVtcy50b3RhbCxcbiAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzRmlsdGVyZWQ6IGl0ZW1zLnRvdGFsLFxuICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW1zLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl9sYXN0UXVlcnlUb3RhbEl0ZW1zID0gaXRlbXMudG90YWw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtcy50b3RhbCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVzZXRFbXB0eVRhYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gZW1pdCBsb2FkIGV2ZW50XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZC5lbWl0KGRhdGFTZXQpO1xuICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gZGF0YVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm5DYWxsYmFjayhkYXRhU2V0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGxvZyBlcnJvciB0byBjb25zb2xlXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVEFCTEVTJywgZXJyKTtcbiAgICAgICAgICAgICAgICAvLyBzaG93IGVycm9yXG4gICAgICAgICAgICAgICAgc2VsZi50b2dnbGVFcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIHNlbGYuX2xhc3RRdWVyeVRvdGFsSXRlbXMgPSAwO1xuICAgICAgICAgICAgICAgIC8vIGJ5IHJldHVybmluZyBlbXB0eSBkYXRhc2V0XG4gICAgICAgICAgICAgICAgc2VsZi5sb2FkLmVtaXQoRU1QVFlfREFUQVNFVCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuQ2FsbGJhY2soRU1QVFlfREFUQVNFVCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5sYXN0UXVlcnlQYXJhbXMgPSBxLmdldFBhcmFtcygpO1xuICAgICAgICAgICAgcS5nZXRMaXN0KCkudGhlbigoaXRlbXMpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZGF0YVNldCA9IHtcbiAgICAgICAgICAgICAgICByZWNvcmRzVG90YWw6IGl0ZW1zLnRvdGFsLFxuICAgICAgICAgICAgICAgIHJlY29yZHNGaWx0ZXJlZDogaXRlbXMudG90YWwsXG4gICAgICAgICAgICAgICAgZGF0YTogaXRlbXMudmFsdWUsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHNlbGYuX2xhc3RRdWVyeVRvdGFsSXRlbXMgPSBpdGVtcy50b3RhbDtcbiAgICAgICAgICAgICAgaWYgKGl0ZW1zLnRvdGFsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5yZXNldEVtcHR5VGFibGUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBlbWl0IGxvYWQgZXZlbnRcbiAgICAgICAgICAgICAgc2VsZi5sb2FkLmVtaXQoZGF0YVNldCk7XG4gICAgICAgICAgICAgIC8vIHJldHVybiBkYXRhXG4gICAgICAgICAgICAgIHJldHVybiBmbkNhbGxiYWNrKGRhdGFTZXQpO1xuICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAvLyBsb2cgZXJyb3IgdG8gY29uc29sZVxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUQUJMRVMnLCBlcnIpO1xuICAgICAgICAgICAgICAvLyBzaG93IGVycm9yXG4gICAgICAgICAgICAgIHNlbGYudG9nZ2xlRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgLy8gYnkgcmV0dXJuaW5nIGVtcHR5IGRhdGFzZXRcbiAgICAgICAgICAgICAgc2VsZi5sb2FkLmVtaXQoRU1QVFlfREFUQVNFVCk7XG4gICAgICAgICAgICAgIHJldHVybiBmbkNhbGxiYWNrKEVNUFRZX0RBVEFTRVQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGxhbmd1YWdlOiBPYmplY3QuYXNzaWduKHsgfSwgc2VsZi50cmFuc2xhdG9yLnRyYW5zZm9ybSgnVGFibGVzLkRhdGFUYWJsZScpLFxuICAgICAgICAgIHtlbXB0eVRhYmxlOiAnICcgfSksXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzdGF0ZVNldHRpbmdzID0ge1xuICAgICAgICBzdGF0ZVNhdmU6IHRoaXMuc3RhdGVTYXZlXG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMuc3RhdGVMb2FkQ2FsbGJhY2spIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzdGF0ZVNldHRpbmdzLCB7XG4gICAgICAgICAgc3RhdGVMb2FkQ2FsbGJhY2s6IHRoaXMuc3RhdGVMb2FkQ2FsbGJhY2tcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zdGF0ZVNhdmVDYWxsYmFjaykge1xuICAgICAgICBPYmplY3QuYXNzaWduKHN0YXRlU2V0dGluZ3MsIHtcbiAgICAgICAgICBzdGF0ZVNhdmVDYWxsYmFjazogdGhpcy5zdGF0ZVNhdmVDYWxsYmFja1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3MsIHN0YXRlU2V0dGluZ3MpO1xuXG4gICAgICBpZiAodGhpcy5zY3JvbGxhYmxlKSB7XG4gICAgICAgIC8vIHNldCBjb250aW51b3VzIHNjcm9sbGluZ1xuICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzLCB7XG4gICAgICAgICAgc2Nyb2xsWTogdGhpcy5zY3JvbGxZLFxuICAgICAgICAgIHNjcm9sbENvbGxhcHNlOiBmYWxzZSxcbiAgICAgICAgICBzY3JvbGxlcjoge1xuICAgICAgICAgICAgbG9hZGluZ0luZGljYXRvcjogZmFsc2UsXG4gICAgICAgICAgICBkaXNwbGF5QnVmZmVyOiAxMCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3MsIHtcbiAgICAgICAgICBzY3JvbGxZOiB0aGlzLnNjcm9sbFksXG4gICAgICAgICAgcGFnaW5nOiB0aGlzLnBhZ2luZyxcbiAgICAgICAgICBwYWdlTGVuZ3RoOiB0aGlzLnBhZ2VMZW5ndGgsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VsZWN0YWJsZSkge1xuXG4gICAgICB9XG4gICAgICAvLyBoYW5kbGUgaW5pdC5kdCBldmVudCBhbmQgZW1pdCBsb2NhbCBldmVudFxuICAgICAgdGhpcy5kYXRhVGFibGUgPSB0YWJsZUVsZW1lbnQub24oJ2luaXQuZHQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBqUXVlcnkoZXZlbnQudGFyZ2V0KS5wYXJlbnQoKTtcbiAgICAgICAgLy8gaGFuZGxlIHNjcm9sbGluZ1xuICAgICAgICBzY3JvbGxlci5vbignc2Nyb2xsJywgKHNjcm9sbEV2ZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0galF1ZXJ5KHNjcm9sbEV2ZW50LnRhcmdldCk7XG4gICAgICAgICAgY29uc3QgdG9wID0gdGFyZ2V0LnNjcm9sbFRvcCgpIGFzIG51bWJlcjtcbiAgICAgICAgICBjb25zdCBsZWZ0ID0gdGFyZ2V0LnNjcm9sbExlZnQoKSBhcyBudW1iZXI7XG4gICAgICAgICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbC5lbWl0KHtcbiAgICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgICBsZWZ0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSkuRGF0YVRhYmxlKHNldHRpbmdzKTtcbiAgICAgIHRoaXMuaW5pdC5lbWl0KCk7XG4gICAgICAvLyBzaG93IG9yIGhpZGUgaGVhZGVyXG4gICAgICBpZiAoIXRoaXMuc2hvd0hlYWRlciAmJiB0aGlzLl9lbGVtZW50ICYmIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICBjb25zdCBoaWRlU2VsZWN0b3IgPSAodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlPnRoZWFkJyk7XG4gICAgICAgIGlmIChoaWRlU2VsZWN0b3IpIHtcbiAgICAgICAgICBoaWRlU2VsZWN0b3IuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWRqdXN0U2VsZWN0b3IgPSAgKHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudClcbiAgICAgICAgICAucXVlcnlTZWxlY3RvcignLmRhdGFUYWJsZScpO1xuICAgICAgICBpZiAoYWRqdXN0U2VsZWN0b3IpIHtcbiAgICAgICAgICBhZGp1c3RTZWxlY3Rvci5jbGFzc0xpc3QuYWRkKCdtdC0yJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIHNob3cgb3IgaGlkZSBmb290ZXJcbiAgICAgIGlmICghdGhpcy5zaG93Rm9vdGVyICYmIHRoaXMuX2VsZW1lbnQgJiYgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGluZm9TZWxlY3RvciA9ICh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpXG4gICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGVzX2luZm8nKTtcbiAgICAgICAgaWYgKGluZm9TZWxlY3Rvcikge1xuICAgICAgICAgIGluZm9TZWxlY3Rvci5jbGFzc0xpc3QuYWRkKCdkLW5vbmUnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gc2hvdyBvciBoaWRlIHBhZ2VyXG4gICAgICBpZiAodGhpcy5zaG93UGFnaW5nKSB7XG4gICAgICAgIHRoaXMuc2hvd1BhZ2luZyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2Nyb2xsVG9wKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgIHRoaXMuZGF0YVRhYmxlLnBhcmVudCgpLnNjcm9sbFRvcCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgc2Nyb2xsTGVmdCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5wYXJlbnQoKS5zY3JvbGxMZWZ0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgbGFzdFF1ZXJ5KCk6IENsaWVudERhdGFRdWVyeWFibGUgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLmNvbmZpZyA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmxhc3RRdWVyeVBhcmFtcyA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHEgPSB0aGlzLl9jb250ZXh0Lm1vZGVsKHRoaXMuY29uZmlnLm1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgIE9iamVjdC5rZXlzKHRoaXMubGFzdFF1ZXJ5UGFyYW1zKS5mb3JFYWNoKCAoa2V5KSA9PiB7XG4gICAgICBxLnNldFBhcmFtKGtleSwgdGhpcy5sYXN0UXVlcnlQYXJhbXMgJiYgdGhpcy5sYXN0UXVlcnlQYXJhbXNba2V5XSk7XG4gICAgfSk7XG4gICAgLy8gcmV0dXJuIHF1ZXJ5XG4gICAgcmV0dXJuIHE7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBhbmQgdXBkYXRlcyBhIHNpbmdsZSByb3dcbiAgICogQHBhcmFtIGZpbmQgLSBBbnkgb2JqZWN0IHdoaWNoIGlzIGJlaW5nIGNvbnZlcnRlZCB0byBhIHF1ZXJ5XG4gICAqL1xuICBwdWJsaWMgZmV0Y2hPbmUoZmluZDogYW55KSB7XG4gICAgaWYgKGZpbmQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhVGFibGUgPT0gbnVsbCkge1xuICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmxhc3RRdWVyeVBhcmFtcyA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGdldCByb3dzXG4gICAgY29uc3Qgcm93cyA9IEFycmF5LmZyb20odGhpcy5kYXRhVGFibGUucm93cygpLmRhdGEoKSk7XG4gICAgaWYgKHJvd3MgJiYgcm93cy5sZW5ndGgpIHtcbiAgICAgIC8vIGZpbmQgcmVzdWx0XG4gICAgICBjb25zdCBmaW5kS2V5cyA9IE9iamVjdC5rZXlzKGZpbmQpO1xuICAgICAgaWYgKGZpbmRLZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIGZpbmQgcm93IGluZGV4IGJ5IHNlYXJjaGluZyBlYWNoIHByb3BlcnR5XG4gICAgICBjb25zdCByb3dJbmRleCA9IHJvd3MuZmluZEluZGV4KChyb3c6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gZmluZEtleXMubWFwKCAoa2V5KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJvd1trZXldID09PSBmaW5kW2tleV07XG4gICAgICAgIH0pLmZpbHRlciggKHJlcykgPT4ge1xuICAgICAgICAgIHJldHVybiByZXMgPT09IGZhbHNlO1xuICAgICAgICB9KS5sZW5ndGggPT09IDA7XG4gICAgICB9KTtcbiAgICAgIC8vIGlmIHJvdyBoYXMgYmVlbiBmb3VuZFxuICAgICAgaWYgKHJvd0luZGV4ID49IDApIHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLl9jb250ZXh0Lm1vZGVsKHRoaXMuY29uZmlnLm1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgICAgICAvLyBzZWxlY3QgYXR0cmlidXRlc1xuICAgICAgICBxdWVyeS5zZXRQYXJhbSgnJHNlbGVjdCcsIHRoaXMubGFzdFF1ZXJ5UGFyYW1zLiRzZWxlY3QpO1xuICAgICAgICBpZiAodGhpcy5sYXN0UXVlcnlQYXJhbXMuJGV4cGFuZCkge1xuICAgICAgICAgIC8vIGFwcGx5IGV4cGFuZCBhdHRyaWJ1dGVzXG4gICAgICAgICAgcXVlcnkuc2V0UGFyYW0oJyRleHBhbmQnLCB0aGlzLmxhc3RRdWVyeVBhcmFtcy4kZXhwYW5kKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhcHBseSBmaWx0ZXIgZm9yIHJvd1xuICAgICAgICBmaW5kS2V5cy5mb3JFYWNoKCAoa2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb25maWcuY29sdW1ucy5maW5kKCAoY29sKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY29sLnByb3BlcnR5ID09PSBrZXkgfHwgY29sLm5hbWUgPT09IGtleTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoY29sdW1uKSB7XG4gICAgICAgICAgICAvLyBnZXQgcHJvcGVydHkgb3IgbmFtZVxuICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSBjb2x1bW4ucHJvcGVydHkgfHwgY29sdW1uLm5hbWU7XG4gICAgICAgICAgICBxdWVyeS5hbmQocHJvcGVydHkgYXMgc3RyaW5nKS5lcXVhbChmaW5kW2tleV0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBxdWVyeS5hbmQoa2V5KS5lcXVhbChmaW5kW2tleV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGFuZCBmaW5hbGx5IGdldCBpdGVtXG4gICAgICAgIHJldHVybiBxdWVyeS5nZXRJdGVtKCkudGhlbiggKGl0ZW0pID0+IHtcbiAgICAgICAgICAvLyBpZiBpdGVtIGV4aXN0c1xuICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZGF0YVRhYmxlLnJvdyhyb3dJbmRleCk7XG4gICAgICAgICAgY29uc3QgY2hlY2tlZCA9IGpRdWVyeShyb3cubm9kZSgpKS5maW5kKCc6Y2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJyk7XG4gICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIC8vIHJlZHJhdyByb3dcbiAgICAgICAgICAgIHJvdy5kYXRhKGl0ZW0pO1xuICAgICAgICAgICAgalF1ZXJ5KHJvdy5ub2RlKCkpLmZpbmQoJzpjaGVja2JveCcpLm9mZignY2xpY2snKS5vbignY2xpY2snLCB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgLy8gaWYgcm93IGlzIGFscmVhZHkgc2VsZWN0ZWRcbiAgICAgICAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0Um93KHJvdywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWxvYWRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucmVsb2FkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBzZWxlY3Rpb24gY2hhbmdlXG4gICAqIEBwYXJhbSAkZXZlbnRcbiAgICovXG4gIHB1YmxpYyBvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpIHtcbiAgICBjb25zdCBpbnB1dCA9ICAkZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgZXhlY1JlZ2V4ID0gLy0oXFxkKykkL2cuZXhlYyhpbnB1dC5pZCk7XG4gICAgLy8gZ2V0IHJvdyBmcm9tIGlkXG4gICAgY29uc3Qgcm93SW5kZXggPSBwYXJzZUludCgoZXhlY1JlZ2V4ICYmIGV4ZWNSZWdleFsxXSkgYXMgc3RyaW5nLCAxMCk7XG4gICAgLy8gZ2V0IHJvd1xuICAgIGNvbnN0IHJvdyA9IHRoaXMuZGF0YVRhYmxlLnJvdyhyb3dJbmRleCkuZGF0YSgpO1xuICAgIC8vIGdldCByb3cgaWRlbnRpZmllclxuICAgIGlmIChyb3cpIHtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHkgfHwgJyc7XG4gICAgICBjb25zdCBpZCA9IHJvd1trZXldO1xuICAgICAgbGV0IGZpbmRJdGVtSW5kZXggPSB0aGlzLnNlbGVjdGVkLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbVtrZXldID09PSBpZDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGlucHV0LmNoZWNrZWQpIHtcbiAgICAgICAgaWYgKGZpbmRJdGVtSW5kZXggPCAwKSB7XG4gICAgICAgICAgLy8gYWRkIHJvdyB0byBzZWxlY3RlZCByb3dzXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZC5wdXNoKHJvdyk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmVtaXQodGhpcy5zZWxlY3RlZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmaW5kSXRlbUluZGV4ID49IDApIHtcbiAgICAgICAgICAvLyByZW1vdmUgc2VsZWN0ZWQgaXRlbVxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKGZpbmRJdGVtSW5kZXgsIDEpO1xuICAgICAgICAgIGlmICh0aGlzLnNtYXJ0U2VsZWN0KSB7XG4gICAgICAgICAgICAvLyBhZGQgcm93IHRvIHVuc2VsZWN0ZWQgcm93c1xuICAgICAgICAgICAgZmluZEl0ZW1JbmRleCA9IHRoaXMudW5zZWxlY3RlZC5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1ba2V5XSA9PT0gaWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChmaW5kSXRlbUluZGV4IDwgMCkge1xuICAgICAgICAgICAgICB0aGlzLnVuc2VsZWN0ZWQucHVzaChyb3cpO1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc2V0RW1wdHlUYWJsZSgpIHtcbiAgICAvLyB0aGlzIG9wZXJhdGlvbiBpcyBpbXBvcnRhbnRcbiAgICAvLyBkdWUgdG8gbmcgZGF0YSBiaW5kaW5nXG4gICAgLy8gZW1wdHkgdGFibGUgdGVtcGxhdGUgaGFzIG5vIHRyYW5zbGF0ZWQgdGV4dCBkdXJpbmcgbmdPbkluaXQoKVxuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdKSB7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zRW1wdHlUYWJsZSA9XG4gICAgICB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zWmVyb1JlY29yZHMgPSB0aGlzLmVtcHR5VGFibGUgJiYgdGhpcy5lbXB0eVRhYmxlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdG9nZ2xlRXJyb3IoZXJyPzogYW55KSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlICYmIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0pIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSAodGhpcy5lcnJvclRlbXBsYXRlICYmIHRoaXMuZXJyb3JUZW1wbGF0ZS5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KTtcbiAgICAgIGxldCBpbm5lck1lc3NhZ2U6IGFueTtcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIGlubmVyTWVzc2FnZSA9IGVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NtYWxsJykuaXRlbSgwKTtcbiAgICAgIH1cbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgdGhpcy5sYXN0RXJyb3IgPSBlcnI7XG4gICAgICAgIGlmIChpbm5lck1lc3NhZ2UpIHtcbiAgICAgICAgICBpbm5lck1lc3NhZ2UuaW5uZXJIVE1MID0gZXJyLmVycm9yICYmIGVyci5lcnJvci5tZXNzYWdlID8gZXJyLmVycm9yLm1lc3NhZ2UgOiBlcnIubWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zRW1wdHlUYWJsZSA9XG4gICAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNaZXJvUmVjb3JkcyA9IHRoaXMuZXJyb3JUZW1wbGF0ZSAmJiB0aGlzLmVycm9yVGVtcGxhdGUubmF0aXZlRWxlbWVudC5pbm5lckhUTUw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaW5uZXJNZXNzYWdlKSB7XG4gICAgICAgICAgaW5uZXJNZXNzYWdlLmlubmVySFRNTCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNFbXB0eVRhYmxlID0gdGhpcy5kYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc1plcm9SZWNvcmRzID0gJyc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckVtcHR5VGFibGUoKSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlICYmIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0pIHtcbiAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNFbXB0eVRhYmxlID0gdGhpcy5kYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc1plcm9SZWNvcmRzID0gJyc7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGV4cG9ydCgpIHtcbiAgICBjb25zdCBlbGVtZW50OiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kdC1idXR0b25zIC5idXR0b25zLWV4Y2VsJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgZWxlbWVudC5jbGljaygpO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUNvbHVtbnMoY29sdW1uc1RvU2hvdykge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5kYXRhVGFibGU7XG4gICAgdGhpcy5jb25maWcuY29sdW1ucy5zbGljZSgxKS5mb3JFYWNoKChjb2x1bW4sIGkpID0+IHtcbiAgICAgIGlmICghY29sdW1uLmhpZGRlbikge1xuICAgICAgICBpZiAoY29sdW1uc1RvU2hvdy5pbmNsdWRlcyhjb2x1bW4ubmFtZSkpIHtcbiAgICAgICAgICAvLyBub2luc3BlY3Rpb24gVHlwZVNjcmlwdFZhbGlkYXRlSlNUeXBlc1xuICAgICAgICAgIHRhYmxlLmNvbHVtbihjb2x1bW4ubmFtZSArICc6bmFtZScpLnZpc2libGUodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gbm9pbnNwZWN0aW9uIFR5cGVTY3JpcHRWYWxpZGF0ZUpTVHlwZXNcbiAgICAgICAgICB0YWJsZS5jb2x1bW4oY29sdW1uLm5hbWUgKyAnOm5hbWUnKS52aXNpYmxlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldENvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWc7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlcywgJ2NvbmZpZ1NyYycpKSB7XG4gICAgICBpZiAoY2hhbmdlcy5jb25maWdTcmMgIT0gbnVsbCkge1xuICAgICAgICAvLyBsb2FkIHRhYmxlIGNvbmZpZ3VyYXRpb24gb24gY2hhbmdlXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogdHJpcGxlLWVxdWFsc1xuICAgICAgICBpZiAoY2hhbmdlcy5jb25maWdTcmMuY3VycmVudFZhbHVlICYmIChjaGFuZ2VzLmNvbmZpZ1NyYy5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5jb25maWdTcmMucHJldmlvdXNWYWx1ZSkpIHtcbiAgICAgICAgICB0aGlzLl9odHRwLmdldChjaGFuZ2VzLmNvbmZpZ1NyYy5jdXJyZW50VmFsdWUpLnRvUHJvbWlzZSgpLnRoZW4oKGNvbmZpZzogVGFibGVDb25maWd1cmF0aW9uKSA9PiB7XG4gICAgICAgICAgICAvLyBzZXQgY29uZmlndXJhdGlvblxuICAgICAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIC8vIGZldGNoIGFuZCByZWRyYXdcbiAgICAgICAgICAgIHRoaXMuZmV0Y2goKTtcbiAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUQUJMRVMnLCAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgbG9hZGluZyB0YWJsZSBjb25maWd1cmF0aW9uLicpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlc2V0KGxvYWQ/OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB0aGlzLmF1dG9Mb2FkID0gISFsb2FkO1xuICAgIHRoaXMubmdPbkluaXQoKTtcbiAgfVxuXG4gIHNlbGVjdENvbHVtbnMoKSB7XG4gICAgLy8gZ2V0IGNvbHVtbiBvcmRlciBlLmcuIFswLCA0LCAxLCAyLCAzXVxuICAgIGNvbnN0IGNvbHVtbk9yZGVyOiBudW1iZXJbXSA9IHRoaXMuZGF0YVRhYmxlLmNvbFJlb3JkZXIub3JkZXIoKTtcbiAgICAvLyBnZXQgY29sdW1uIGRlZmluaXRpb25zXG4gICAgY29uc3QgY29sdW1uRGVmcyA9IHRoaXMuZGF0YVRhYmxlLnNldHRpbmdzKCkuaW5pdCgpLmNvbHVtbnM7XG4gICAgY29uc3QgY29sdW1ucyA9IGNvbHVtbkRlZnMubWFwKChcbiAgICAgIGNvbHVtbkRlZjogeyBrZXk6IHN0cmluZywgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCwgdmlzaWJsZTogYm9vbGVhbixcbiAgICAgICAgc29ydGFibGU6IGJvb2xlYW4sIGluZGV4OiBudW1iZXIgfSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBgY29sdW1uLSR7aX1gO1xuICAgICAgbGV0IHRpdGxlID0gY29sdW1uRGVmLnRpdGxlO1xuICAgICAgLy8gZ2V0IGNvbHVtbiBpbmRleFxuICAgICAgY29uc3QgaW5kZXggPSAgY29sdW1uT3JkZXIuaW5kZXhPZihpKTtcbiAgICAgIGNvbnN0IHZpc2libGUgPSB0aGlzLmRhdGFUYWJsZS5jb2x1bW4oaW5kZXgpLnZpc2libGUoKTtcbiAgICAgIC8vIHNldCB0aXRsZSBmb3Igc2VsZWN0IGNvbHVtblxuICAgICAgaWYgKGkgPT09IDAgJiYgdGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAgIHRpdGxlID0gJzwnICsgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdUYWJsZXMuU2VsZWN0Q29sdW1uJykgKyAnPic7XG4gICAgICB9XG4gICAgICAvLyBnZXQgY29sdW1uIHRpdGxlXG4gICAgICBpZiAodGl0bGUgIT0gbnVsbCAmJiB0aXRsZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGl0bGUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAodGl0bGUgPT0gbnVsbCkge1xuICAgICAgICAvLyB0cnkgdG8gZmluZCBjb2x1bW4gcGxhY2Vob2xkZXJcbiAgICAgICAgbGV0IHBsYWNlaG9sZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyID0gdGhpcy5jb25maWcuY29sdW1uc1tpIC0gMV0ucGxhY2Vob2xkZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBsYWNlaG9sZGVyID0gdGhpcy5jb25maWcuY29sdW1uc1tpXS5wbGFjZWhvbGRlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGxhY2Vob2xkZXIgIT0gbnVsbCkge1xuICAgICAgICAgIHRpdGxlID0gJzwnICsgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHBsYWNlaG9sZGVyKSArICc+JztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRpdGxlID09IG51bGwpIHtcbiAgICAgICAgdGl0bGUgPSAnPCcgKyB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5Vbmtub3duQ29sdW1uJykgKyAnPic7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXksXG4gICAgICAgIHRpdGxlLFxuICAgICAgICB2aXNpYmxlLFxuICAgICAgICBpbmRleFxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLl9jb2x1bW5TZWxlY3Rvci5zZWxlY3RDb2x1bW5zKGNvbHVtbnMpLnRoZW4oKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQucmVzdWx0ID09PSAnb2snKSB7XG4gICAgICAgIGNvbnN0IHNvcnRlZCA9IChldmVudC5jb2x1bW5zIGFzIGFueVtdKVxuICAgICAgICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAga2V5OiBjb2wua2V5LFxuICAgICAgICAgICAgICBpbmRleDogY29sLmluZGV4XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuaW5kZXggLSBiLmluZGV4KTtcbiAgICAgICAgLy8gZ2V0IGNvbHVtbiBvcmRlciBlLmcuIFszLCAxLCAyLCAwLCA0XVxuICAgICAgICBjb25zdCBpbmRleGVzID0gc29ydGVkXG4gICAgICAgIC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICByZXR1cm4gKGV2ZW50LmNvbHVtbnMgYXMgYW55W10pLmZpbmRJbmRleCgobmV4dCkgPT4gaXRlbS5rZXkgPT09IG5leHQua2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHJlc2V0IGNvbHVtbiB2aXNpYmlsdHlcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IChldmVudC5jb2x1bW5zIGFzIGFueVtdKS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gKGV2ZW50LmNvbHVtbnMgYXMgYW55W10pW2luZGV4XTtcbiAgICAgICAgICBjb25zdCBjb2xJbmRleCA9IGNvbHVtbk9yZGVyLmluZGV4T2YoaW5kZXgpO1xuICAgICAgICAgIC8vIHNldCB2aXNpYmlsdHkgd2l0aCByZWRyYXcgKD10cnVlKVxuICAgICAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbHVtbihjb2xJbmRleCkudmlzaWJsZShlbGVtZW50LnZpc2libGUsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGZpbmFsbHkgYXBwbHkgY29sdW1uIG9yZGVyXG4gICAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbFJlb3JkZXIub3JkZXIoaW5kZXhlcywgdHJ1ZSk7XG4gICAgICAgIC8vIHNpbXBseSByZWRyYXcgdGhlIHRhYmxlXG4gICAgICAgIHRoaXMuZGF0YVRhYmxlLmRyYXcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyB0byBwYXNzIGFuIGVycm9ySGFuZGxlciBjYWxsYmFjaywgaWYgZGVzaXJlZFxuICAgKiBAcmV0dXJucyB2b2lkXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZXhwb3J0VmlldyhvcHRpb25zPzoge2Vycm9ySGFuZGxlcj86IChyZWFzb24/OiBhbnkpID0+IGFueX0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5fbG9hZGluZy5zaG93TG9hZGluZygpO1xuICAgICAgLy8gdmFsaWRhdGUgcXVlcnkgaXRlbXMgYW5kIGNvbmZpZ1xuICAgICAgaWYgKCEodGhpcy5sYXN0UXVlcnkgJiYgdGhpcy5fbGFzdFF1ZXJ5VG90YWxJdGVtcyAmJiB0aGlzLmNvbmZpZykpIHtcbiAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBnZXQgZXhwb3J0IHNldHRpbmdzXG4gICAgICBjb25zdCBleHBvcnRTZXR0aW5ncyA9IHRoaXMuX2NvbmZpZ3VyYXRpb24uc2V0dGluZ3MgYXMgRXhwb3J0TGltaXRDb25maWd1cmF0aW9uO1xuICAgICAgLy8gYW5kIGV4cG9ydCBsaW1pdFxuICAgICAgY29uc3QgZXhwb3J0TGltaXQgPVxuICAgICAgICAoZXhwb3J0U2V0dGluZ3MgJiYgZXhwb3J0U2V0dGluZ3MudGFibGVzICYmIGV4cG9ydFNldHRpbmdzLnRhYmxlcy5leHBvcnRMaW1pdCAmJiBleHBvcnRTZXR0aW5ncy50YWJsZXMuZXhwb3J0TGltaXQgPiAwKVxuICAgICAgICA/IGV4cG9ydFNldHRpbmdzLnRhYmxlcy5leHBvcnRMaW1pdCA6IE1BWF9FWFBPUlRfSVRFTVM7XG4gICAgICAvLyBhbmQgdmFsaWRhdGUgaXRcbiAgICAgIGlmICh0aGlzLl9sYXN0UXVlcnlUb3RhbEl0ZW1zID4gZXhwb3J0TGltaXQpIHtcbiAgICAgICAgLy8gY2FsbCBlcnJvciBoYW5kbGVyXG4gICAgICAgIC8vIHByb3ZpZGUgYSByZWNvZ25pemlibGUgZXJyb3IgdHlwZVxuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmVycm9ySGFuZGxlcikge1xuICAgICAgICAgIG9wdGlvbnMuZXJyb3JIYW5kbGVyKG5ldyBFeHBvcnRMaW1pdEV4Y2VlZGVkRXJyb3IoJ0V4cG9ydCBsaW1pdCBleGNlZWRlZCcpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gb3Igc2hvdyB3YXJuaW5nIG1vZGFsIGFuZCBleGl0XG4gICAgICAgIHRoaXMuX21vZGFsU2VydmljZS5zaG93V2FybmluZ0RpYWxvZyh0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5FeHBvcnRMaXN0JyksXG4gICAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdUYWJsZXMuRXhwb3J0TGltaXRFeGNlZWRlZCcsXG4gICAgICAgICAgICB7ZGF0YUxlbmd0aDogdGhpcy5fbGFzdFF1ZXJ5VG90YWxJdGVtcywgZXhwb3J0TGltaXR9KSwgRElBTE9HX0JVVFRPTlMuT2spO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBnZXQgdG90YWwgZGlzcGxheWVkIGl0ZW1zXG4gICAgICBjb25zdCB0b3RhbERpc3BsYXllZEl0ZW1zID0gQXJyYXkuZnJvbSh0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLmFpRGlzcGxheSkubGVuZ3RoO1xuICAgICAgLy8gaWYgdGhleSBhbHJlYWR5IHNhdGlzZnkgdGhlIGxhc3QgcXVlcnkgdG90YWxcbiAgICAgIGlmICh0b3RhbERpc3BsYXllZEl0ZW1zID09PSB0aGlzLl9sYXN0UXVlcnlUb3RhbEl0ZW1zKSB7XG4gICAgICAgIC8vIHByZXBhcmUgZXhjZWwgZGF0YSBpbW1lZGlhdGVseVxuICAgICAgICBjb25zdCB7Ym9keSwgaGVhZGVyfSA9IHRoaXMuZ2V0RXhwb3J0YWJsZURhdGEoKTtcbiAgICAgICAgLy8gYW5kIGV4cG9ydCB0aGVtIHRvIGV4Y2VsXG4gICAgICAgIHRoaXMuX2V4cG9ydFNwcmVhZHNoZWV0LmV4cG9ydChib2R5LCBgJHt0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGhpcy5jb25maWcudGl0bGUgfHwgJ1RhYmxlcy5FeHBvcnRSZXN1bHRzJyl9Lnhsc3hgLCB7XG4gICAgICAgICAgICBoZWFkZXIsXG4gICAgICAgICAgICBza2lwSGVhZGVyOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIG1vcmUgZGF0YSBuZWVkIHRvIGJlIGZldGNoZWRcbiAgICAgICAgLy8gaG9sZCBwcmV2aW91cyBkYXRhIHN0YXRlXG4gICAgICAgIGNvbnN0IHByZXZpb3VzRGF0YVN0YXRlID0gdGhpcy5kYXRhVGFibGUucm93cygpLmRhdGEoKS50b0FycmF5KCk7XG4gICAgICAgIC8vIGdldCB0YXJnZXQgZGF0YSBzdGF0ZSBieSBleGVjdXRpbmcgdGhlIGxhc3QgcXVlcnlcbiAgICAgICAgLy8gbm90ZTogdGFraW5nIHRoZSBleHBvcnRMaW1pdCBhbW91bnQgb2YgaXRlbXMgd2lsbCBhbHdheXMgc2F0aXNmeSB0aGUgcmVzdWx0cyxcbiAgICAgICAgLy8gYmVjYXVzZSBpdCBoYXMgYmVlbiB2YWxpZGF0ZWRcbiAgICAgICAgY29uc3QgdGFyZ2V0RGF0YVN0YXRlID0gYXdhaXQgdGhpcy5sYXN0UXVlcnkudGFrZShleHBvcnRMaW1pdCkuZ2V0SXRlbXMoKTtcbiAgICAgICAgLy8gY2hhbmdlIHRhYmxlIGRhdGEgb24gdGhlIGZseSwgYnV0IGRvIG5vdCByZWRyYXdcbiAgICAgICAgdGhpcy5kYXRhVGFibGUuY2xlYXIoKS5yb3dzLmFkZCh0YXJnZXREYXRhU3RhdGUpO1xuICAgICAgICAvLyBwcmVwYXJlIGV4Y2VsIGRhdGFcbiAgICAgICAgY29uc3Qge2JvZHksIGhlYWRlcn0gPSB0aGlzLmdldEV4cG9ydGFibGVEYXRhKCk7XG4gICAgICAgIC8vIHJlc2V0IHRhYmxlIGRhdGFcbiAgICAgICAgdGhpcy5kYXRhVGFibGUuY2xlYXIoKS5yb3dzLmFkZChwcmV2aW91c0RhdGFTdGF0ZSk7XG4gICAgICAgIC8vIGFuZCBleHBvcnQgdGFyZ2V0IGRhdGEgdG8gZXhjZWxcbiAgICAgICAgdGhpcy5fZXhwb3J0U3ByZWFkc2hlZXQuZXhwb3J0KGJvZHksIGAke3RoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLmNvbmZpZy50aXRsZSB8fCAnVGFibGVzLkV4cG9ydFJlc3VsdHMnKX0ueGxzeGAsIHtcbiAgICAgICAgICAgIGhlYWRlcixcbiAgICAgICAgICAgIHNraXBIZWFkZXI6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gZXhpdFxuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gbG9nIGVycm9yXG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAvLyBjYWxsIGVycm9yIGhhbmRsZXIsIGlmIGRlZmluZWRcbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZXJyb3JIYW5kbGVyKSB7XG4gICAgICAgIG9wdGlvbnMuZXJyb3JIYW5kbGVyKGVycik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB1c2UgZGVmYXVsdCBlcnJvciBzZXJ2aWNlXG4gICAgICAgIHRoaXMuX2Vycm9yU2VydmljZS5zaG93RXJyb3IoZXJyLCB7XG4gICAgICAgICAgY29udGludWVMaW5rOiAnLidcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX2xvYWRpbmcuaGlkZUxvYWRpbmcoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0RXhwb3J0YWJsZURhdGEoKToge2JvZHk6IGFueVtdLCBoZWFkZXI6IGFueVtdfSB7XG4gICAgaWYgKCEodGhpcy5kYXRhVGFibGUgJiYgdGhpcy5kYXRhVGFibGUuYnV0dG9uc1xuICAgICAgJiYgdHlwZW9mIHRoaXMuZGF0YVRhYmxlLmJ1dHRvbnMuZXhwb3J0RGF0YSA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGlzLmNvbmZpZykpIHtcbiAgICAgIHJldHVybiB7Ym9keTogW10sIGhlYWRlcjogW119O1xuICAgIH1cbiAgICAvLyBmZXRjaCBleHBvcnRhYmxlIGV4Y2VsIGRhdGFcbiAgICBsZXQge2JvZHksIGhlYWRlcn0gPSB0aGlzLmRhdGFUYWJsZS5idXR0b25zLmV4cG9ydERhdGEoKTtcbiAgICBjb25zdCBjbGVhbnVwSW5kZXhlczogbnVtYmVyW10gPSBbXTtcbiAgICAvLyBjbGVhbiB1cCBoZWFkZXJzXG4gICAgaGVhZGVyID0gaGVhZGVyLmZpbHRlcigoaGVhZGVySXRlbTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAvLyBleGNsdWRlIGVtcHR5IGhlYWRlcnNcbiAgICAgIGlmIChoZWFkZXJJdGVtLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY2xlYW51cEluZGV4ZXMucHVzaChpbmRleCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIGV4Y2x1ZGUgaGlkZGVuIGNvbHVtbnNcbiAgICAgIC8vIG5vdGU6IHVzZSB0aGUgZGF0YXRhYmxlIHZpc2libGUoKSBmdW5jdGlvblxuICAgICAgLy8gaW5zdGVhZCBvZiB0aGUgaGlkZGVuIGNvbmZpZyBwcm9wZXJ0eSwgdG8gc2F0aXNmeSB0aGUgY29sdW1uIHNlbGVjdG9yXG4gICAgICBpZiAoIXRoaXMuZGF0YVRhYmxlLmNvbHVtbihpbmRleCkudmlzaWJsZSgpKSB7XG4gICAgICAgIGNsZWFudXBJbmRleGVzLnB1c2goaW5kZXgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgICAvLyBjbGVhbiB1cCBib2R5XG4gICAgYm9keSA9IGJvZHkubWFwKChyb3c6IGFueSBbXSkgPT4ge1xuICAgICAgcmV0dXJuIHJvdy5maWx0ZXIoKF8sIHJvd0luZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIGNsZWFudXBJbmRleGVzLmluZGV4T2Yocm93SW5kZXgpID09PSAtMTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiB7Ym9keSwgaGVhZGVyfTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCwgT25EZXN0cm95LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQW5ndWxhckRhdGFDb250ZXh0IH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50LCBBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdCwgQWR2YW5jZWRUYWJsZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRXJyb3JTZXJ2aWNlLCBESUFMT0dfQlVUVE9OUywgTW9kYWxTZXJ2aWNlLCBVc2VyQWN0aXZpdHlTZXJ2aWNlIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuaW1wb3J0IHsgUmVzcG9uc2VFcnJvciB9IGZyb20gJ0B0aGVtb3N0L2NsaWVudCc7XG5pbXBvcnQgeyBUYWJsZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5pbnRlcmZhY2VzJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZHZhbmNlZC1saXN0LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgcHVibGljIHJlY29yZHNUb3RhbD86IG51bWJlcjtcbiAgcHVibGljIGNvbmZpZz86IFRhYmxlQ29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZGF0YVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSByZWxvYWRTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIEBJbnB1dCgnZW50aXR5U2V0JykgZW50aXR5U2V0Pzogc3RyaW5nO1xuICBASW5wdXQoJ2NhdGVnb3J5JykgY2F0ZWdvcnk/OiBzdHJpbmc7XG4gIEBJbnB1dCgnZGVzY3JpcHRpb24nKSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgQElucHV0KCdsb25nRGVzY3JpcHRpb24nKSBsb25nRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIEBJbnB1dCgndGFibGVDb25maWd1cmF0aW9uJykgdGFibGVDb25maWd1cmF0aW9uOiBhbnk7XG4gIEBJbnB1dCgnc2VhcmNoQ29uZmlndXJhdGlvbicpIHNlYXJjaENvbmZpZ3VyYXRpb246IGFueTtcbiAgQFZpZXdDaGlsZCgndGFibGUnKSB0YWJsZT86IEFkdmFuY2VkVGFibGVDb21wb25lbnQ7XG4gIEBJbnB1dCgnYWxsb3dTYXZlT3B0aW9uJykgYWxsb3dTYXZlT3B0aW9uID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jb250ZXh0OiBBbmd1bGFyRGF0YUNvbnRleHQsXG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBfZXJyb3JTZXJ2aWNlOiBFcnJvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfdXNlckFjdGl2aXR5U2VydmljZTogVXNlckFjdGl2aXR5U2VydmljZVxuICAgICkgeyB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGFTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZGF0YVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5yZWxvYWRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucmVsb2FkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMudGFibGUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB0YWJsZSA9IHRoaXMudGFibGU7XG4gICAgICAvLyBnZXQgbWV0YWRhdGFcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gYXdhaXQgdGhpcy5fY29udGV4dC5nZXRNZXRhZGF0YSgpO1xuICAgICAgLy8gZ2V0IHJvdXRlIGRhdGFcbiAgICAgIHRoaXMuZGF0YVN1YnNjcmlwdGlvbiA9IHRoaXMuX2FjdGl2YXRlZFJvdXRlLmRhdGEuc3Vic2NyaWJlKCByb3V0ZURhdGEgPT4ge1xuICAgICAgICAvLyBnZXQgZW50aXR5VHlwZVxuICAgICAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAoYF4ke3JvdXRlRGF0YS5tb2RlbH0kYCwgJ2lnJyk7XG4gICAgICAgIGNvbnN0IGVudGl0eVNldCA9IG1ldGFkYXRhLkVudGl0eUNvbnRhaW5lci5FbnRpdHlTZXQuZmluZCggeCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlLnRlc3QoeC5OYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGlmIGVudGl0eSB0eXBlIGlzIG51bGxcbiAgICAgICAgaWYgKGVudGl0eVNldCA9PSBudWxsKSB7XG4gICAgICAgICAgLy8gbmF2aWdhdGUgdG8gZXJyb3JcbiAgICAgICAgICByZXR1cm4gdGhpcy5fZXJyb3JTZXJ2aWNlLm5hdmlnYXRlVG9FcnJvcihuZXcgUmVzcG9uc2VFcnJvcignRW50aXR5U2V0IE5vdCBGb3VuZCcsIDQwNCkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGdldCBlbnRpdHkgdHlwZVxuICAgICAgICBjb25zdCBlbnRpdHlUeXBlID0gbWV0YWRhdGEuRW50aXR5VHlwZS5maW5kKCB4ID0+IHtcbiAgICAgICAgICByZXR1cm4geC5OYW1lID09PSBlbnRpdHlTZXQuRW50aXR5VHlwZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChlbnRpdHlUeXBlID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fZXJyb3JTZXJ2aWNlLm5hdmlnYXRlVG9FcnJvcihuZXcgUmVzcG9uc2VFcnJvcignRW50aXR5VHlwZSBOb3QgRm91bmQnLCA0MDQpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm91dGVEYXRhLnNlYXJjaENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJvdXRlRGF0YS5zZWFyY2hDb25maWd1cmF0aW9uLCAnYWxsb3dTYXZlJykpIHtcbiAgICAgICAgICAgIHRoaXMuYWxsb3dTYXZlT3B0aW9uID0gcm91dGVEYXRhLnNlYXJjaENvbmZpZ3VyYXRpb24uYWxsb3dTYXZlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNlYXJjaENvbmZpZ3VyYXRpb24gPSByb3V0ZURhdGEuc2VhcmNoQ29uZmlndXJhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm91dGVEYXRhLnRhYmxlQ29uZmlndXJhdGlvbikge1xuICAgICAgICAgIHRoaXMudGFibGVDb25maWd1cmF0aW9uID0gcm91dGVEYXRhLnRhYmxlQ29uZmlndXJhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm91dGVEYXRhLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChyb3V0ZURhdGEuZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3V0ZURhdGEubG9uZ0Rlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgdGhpcy5sb25nRGVzY3JpcHRpb24gPSB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQocm91dGVEYXRhLmxvbmdEZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdXRlRGF0YS5jYXRlZ29yeSkge1xuICAgICAgICAgIHRoaXMuY2F0ZWdvcnkgPSB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQocm91dGVEYXRhLmNhdGVnb3J5KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjbG9uZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb25cbiAgICAgICAgY29uc3QgZGVmYXVsdENvbmZpZ3VyYXRpb24gPSBBZHZhbmNlZFRhYmxlQ29uZmlndXJhdGlvbi5jYXN0KHRoaXMudGFibGVDb25maWd1cmF0aW9uLCB0cnVlKTtcbiAgICAgICAgLy8gY29ycmVjdCBlZGl0IGJ1dHRvbiBsaW5rXG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IGRlZmF1bHRDb25maWd1cmF0aW9uLmNvbHVtbnMuZmluZCggY29sID0+IHtcbiAgICAgICAgICByZXR1cm4gY29sLmZvcm1hdHRlciA9PT0gJ0J1dHRvbkZvcm1hdHRlcicgJiYgY29sLmZvcm1hdFN0cmluZyA9PT0gJyhtb2RhbDplZGl0KSc7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY29sdW1uKSB7XG4gICAgICAgICAgY29uc3QgdXJsOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgICAgICAgdGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QucGF0aEZyb21Sb290LmZvckVhY2goIHJvdXRlID0+IHtcbiAgICAgICAgICAgIHVybC5wdXNoLmFwcGx5KHVybCwgcm91dGUudXJsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb2x1bW4uZm9ybWF0U3RyaW5nID0gYCMvJHt1cmwuam9pbignLycpfS8obW9kYWw6XFwkXFx7aWRcXH0vZWRpdClgO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNyZWF0ZSBsaXN0IGNvbmZpZ3VyYXRpb24gYnkgYXNzaWduaW5nIGxpc3QgZW50aXR5IHNldFxuICAgICAgICB0YWJsZS5jb25maWcgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICBtb2RlbDogZW50aXR5U2V0Lk5hbWVcbiAgICAgICAgfSwgZGVmYXVsdENvbmZpZ3VyYXRpb24pO1xuICAgICAgICAvLyBmZXRjaCBkYXRhXG4gICAgICAgIHRhYmxlLmZldGNoKHRydWUpO1xuICAgICAgICAvLyBkbyByZWxvYWQgYnkgdXNpbmcgaGlkZGVuIGZyYWdtZW50IGUuZy4gL2NsYXNzZXMjcmVsb2FkXG4gICAgICAgIHRoaXMucmVsb2FkU3Vic2NyaXB0aW9uID0gdGhpcy5fYWN0aXZhdGVkUm91dGUuZnJhZ21lbnQuc3Vic2NyaWJlKGZyYWdtZW50ID0+IHtcbiAgICAgICAgICBpZiAoZnJhZ21lbnQgJiYgZnJhZ21lbnQgPT09ICdyZWxvYWQnKSB7XG4gICAgICAgICAgICB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdyhcbiAgICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnU2V0dGluZ3MuT3BlcmF0aW9uQ29tcGxldGVkJylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0YWJsZS5mZXRjaCh0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBmaW5hbGx5IGFkZCB1c2VyIGFjdGl2aXR5XG4gICAgICAgIHRoaXMuX3VzZXJBY3Rpdml0eVNlcnZpY2Uuc2V0SXRlbSh7XG4gICAgICAgICAgY2F0ZWdvcnk6IHRoaXMuY2F0ZWdvcnkgYXMgc3RyaW5nLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uIGFzIHN0cmluZyxcbiAgICAgICAgICB1cmw6IHdpbmRvdy5sb2NhdGlvbi5oYXNoLnN1YnN0cmluZygxKSxcbiAgICAgICAgICBkYXRlQ3JlYXRlZDogbmV3IERhdGVcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIHJldHVybiB0aGlzLl9lcnJvclNlcnZpY2Uuc2hvd0Vycm9yKGVycik7XG4gICAgfVxuICB9XG5cblxuICAvKipcbiAgICogRGF0YSBsb2FkIGV2ZW50IGhhbmRsZXIgb2YgYWR2YW5jZWQgdGFibGUgY29tcG9uZW50XG4gICAqIEBwYXJhbSBkYXRhXG4gICAqL1xuICBvbkRhdGFMb2FkKGRhdGE6IEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0KSB7XG4gICAgdGhpcy5yZWNvcmRzVG90YWwgPSBkYXRhLnJlY29yZHNUb3RhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgc2VsZWN0ZWQgaXRlbXNcbiAgICovXG4gIHJlbW92ZSgpIHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMudGFibGU7XG4gICAgaWYgKHRhYmxlICYmIHRhYmxlLnNlbGVjdGVkICYmIHRhYmxlLnNlbGVjdGVkLmxlbmd0aCkge1xuICAgICAgLy8gZ2V0IGl0ZW1zIHRvIHJlbW92ZVxuICAgICAgY29uc3QgaXRlbXMgPSB0YWJsZS5zZWxlY3RlZDtcbiAgICAgIHJldHVybiB0aGlzLl9tb2RhbFNlcnZpY2Uuc2hvd1dhcm5pbmdEaWFsb2coXG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnVGFibGVzLlJlbW92ZUl0ZW1zVGl0bGUnKSxcbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdUYWJsZXMuUmVtb3ZlSXRlbXNNZXNzYWdlJyksXG4gICAgICAgIERJQUxPR19CVVRUT05TLk9rQ2FuY2VsKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gJ29rJykge1xuICAgICAgICAgICAgdGhpcy5fY29udGV4dC5tb2RlbCh0YWJsZS5jb25maWcubW9kZWwpLnJlbW92ZShpdGVtcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX3RvYXN0U2VydmljZS5zaG93KFxuICAgICAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gKyAnOicgKyB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5SZW1vdmVJdGVtTWVzc2FnZS50aXRsZScpLFxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgoaXRlbXMubGVuZ3RoID09PSAxID9cbiAgICAgICAgICAgICAgICAgICdUYWJsZXMuUmVtb3ZlSXRlbU1lc3NhZ2Uub25lJyA6ICdUYWJsZXMuUmVtb3ZlSXRlbU1lc3NhZ2UubWFueScpXG4gICAgICAgICAgICAgICAgICAsIHsgdmFsdWU6IGl0ZW1zLmxlbmd0aCB9KVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB0YWJsZS5mZXRjaCh0cnVlKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2Vycm9yU2VydmljZS5zaG93RXJyb3IoZXJyLCB7XG4gICAgICAgICAgICAgICAgY29udGludWVMaW5rOiAnLidcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95LCBJbnB1dCwgRXZlbnRFbWl0dGVyLFxuICAgIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgVmlld0VuY2Fwc3VsYXRpb24sIEFmdGVyVmlld0luaXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0ICdyeGpzL2FkZC9vYnNlcnZhYmxlL2NvbWJpbmVMYXRlc3QnO1xuaW1wb3J0IHtNb2RhbFNlcnZpY2V9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcbmltcG9ydCB7Um91dGVyTW9kYWxPa0NhbmNlbH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24vcm91dGluZyc7XG5pbXBvcnQge09ic2VydmFibGUsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0FkdmFuY2VkRm9ybUNvbXBvbmVudH0gZnJvbSAnQHVuaXZlcnNpcy9mb3Jtcyc7XG5pbXBvcnQgeyBQcm9ncmVzc2JhckNvbXBvbmVudCB9IGZyb20gJ25neC1ib290c3RyYXAvcHJvZ3Jlc3NiYXInO1xuXG5AQ29tcG9uZW50KHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtcm93LWFjdGlvbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FkdmFuY2VkLXJvdy1hY3Rpb24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlczogW1xuICAgICAgICBgXG4gICAgICAgIC5mYS0xXzV4IHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS41cmVtO1xuICAgICAgICB9XG4gICAgICAgIC5mb3JtLWNvbnRyb2w6ZGlzYWJsZWQsIC5mb3JtLWNvbnRyb2xbcmVhZG9ubHldIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7XG4gICAgICAgIH1cbiAgICAgICAgLmZvcm0tY2hlY2suY2hlY2tib3gge1xuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgICAgICB9XG4gICAgICAgIGBcbiAgICBdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRSb3dBY3Rpb25Db21wb25lbnQgZXh0ZW5kcyBSb3V0ZXJNb2RhbE9rQ2FuY2VsIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gIGludmFsaWRTdWJzY3JpcHRpb246IGFueTtcblxuXG4gICAgQElucHV0KCkgaXRlbXM6IGFueTtcbiAgICBASW5wdXQoKSBtb2RhbEljb24gPSAnZmFzIGZhLXByb2plY3QtZGlhZ3JhbSc7XG4gICAgQElucHV0KCkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgZm9ybVRlbXBsYXRlPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHByb2dyZXNzVHlwZSA9ICdpbmRpZ28nO1xuICAgIEBPdXRwdXQoKSBkYXRhOiBhbnk7XG4gICAgQElucHV0KCkgYWRkaXRpb25hbE1lc3NhZ2U/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgZXJyb3JNZXNzYWdlID0gJ1RhYmxlcy5BY3Rpb25zLkNvbXBsZXRlZFdpdGhFcnJvcnMnO1xuICAgIHB1YmxpYyBsYXN0RXJyb3I6IGFueTtcbiAgICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuICAgIEBWaWV3Q2hpbGQoJ3Byb2dyZXNzJykgcHJvZ3Jlc3NDb21wb25lbnQ/OiBQcm9ncmVzc2JhckNvbXBvbmVudDtcbiAgICBAVmlld0NoaWxkKCdwcm9ncmVzc0NvbnRhaW5lcicpIHByb2dyZXNzQ29udGFpbmVyPzogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdmb3JtQ29tcG9uZW50JykgZm9ybUNvbXBvbmVudD86IEFkdmFuY2VkRm9ybUNvbXBvbmVudDtcbiAgICBASW5wdXQoKSByZWZyZXNoOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBASW5wdXQoKSBleGVjdXRlPzogT2JzZXJ2YWJsZTxhbnk+O1xuICAgIHByaXZhdGUgcmVmcmVzaFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIGV4ZWN1dGVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgICBjb25zdHJ1Y3Rvcihyb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgICAgICAgICBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIF9tb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSkge1xuICAgICAgICBzdXBlcihyb3V0ZXIsIGFjdGl2YXRlZFJvdXRlKTtcbiAgICAgICAgLy8gc2V0IG1vZGFsIHNpemVcbiAgICAgICAgdGhpcy5tb2RhbENsYXNzID0gJ21vZGFsLWxnJztcbiAgICAgICAgLy8gc2V0IG1vZGFsIHRpdGxlXG4gICAgICAgIHRoaXMubW9kYWxUaXRsZSA9ICdUYWJsZXMuQWN0aW9ucy5MYWJlbCc7XG4gICAgICAgIC8vIGRpc2FibGUgb2sgYnV0dG9uXG4gICAgICAgIHRoaXMub2tCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAvLyBzZXQgYnV0dG9uIHRleHRcbiAgICAgICAgdGhpcy5va0J1dHRvblRleHQgPSAnVGFibGVzLkFjdGlvbnMuU3RhcnQnO1xuICAgIH1cblxuICAgIGdldCBmb3JtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybUNvbXBvbmVudDtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMucmVmcmVzaFN1YnNjcmlwdGlvbiA9IHRoaXMucmVmcmVzaC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcm9ncmVzc0NvbXBvbmVudCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLnByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgbGV0IHByb2dyZXNzID0gMDtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUucHJvZ3Jlc3MgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2dyZXNzID0gMDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLnByb2dyZXNzID4gMTAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2dyZXNzID0gMTAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2dyZXNzID0gdmFsdWUucHJvZ3Jlc3M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NDb21wb25lbnQudmFsdWUgPSBwcm9ncmVzcztcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dQcm9ncmVzcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLmZvcm1Db21wb25lbnQgJiYgdGhpcy5mb3JtQ29tcG9uZW50LmZvcm0pIHtcbiAgICAgICAgdGhpcy5va0J1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pbnZhbGlkU3Vic2NyaXB0aW9uID0gdGhpcy5mb3JtQ29tcG9uZW50LmZvcm0uY2hhbmdlLnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV2ZW50LCAnaXNWYWxpZCcpICYmIChldmVudC5jaGFuZ2VkICE9IG51bGwpKSB7XG4gICAgICAgICAgICAgIHRoaXMub2tCdXR0b25EaXNhYmxlZCA9ICFldmVudC5pc1ZhbGlkO1xuICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5yZWZyZXNoU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5leGVjdXRlU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbnZhbGlkU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmludmFsaWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNhbmNlbCgpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBpZiAodGhpcy5sb2FkaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2xvc2VcbiAgICAgICAgaWYgKHRoaXMuX21vZGFsU2VydmljZS5tb2RhbFJlZikge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9tb2RhbFNlcnZpY2UubW9kYWxSZWYuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICBhc3luYyBvaygpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmV4ZWN1dGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmxhc3RFcnJvciA9IG51bGw7XG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtQ29tcG9uZW50ICYmIHRoaXMuZm9ybUNvbXBvbmVudC5mb3JtICYmXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29tcG9uZW50LmZvcm0uZm9ybWlvICYmIHRoaXMuZm9ybUNvbXBvbmVudC5mb3JtLmZvcm1pby5kYXRhKSB7XG4gICAgICAgICAgICAgICAgLy8gc2V0IGRhdGFcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmZvcm1Db21wb25lbnQuZm9ybS5mb3JtaW8uZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRvIGFjdGlvblxuICAgICAgICAgICAgdGhpcy5leGVjdXRlLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzczogMTAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuZXJyb3JzICYmIHJlc3VsdC5lcnJvcnMgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNob3cgbWVzc2FnZSBmb3IgcGFydGlhbCBzdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZXJyb3JzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RFcnJvciA9IG5ldyBFcnJvcih0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5lcnJvck1lc3NhZ2V9LkRlc2NyaXB0aW9uLk9uZWApKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdEVycm9yID0gbmV3IEVycm9yKHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5lcnJvck1lc3NhZ2V9LkRlc2NyaXB0aW9uLk1hbnlgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzOiAxXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVQcm9ncmVzcygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tb2RhbFNlcnZpY2UubW9kYWxSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW9kYWxTZXJ2aWNlLm1vZGFsUmVmLmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0RXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzczogMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmxhc3RFcnJvciA9IGVycjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNob3dQcm9ncmVzcygpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvZ3Jlc3NDb250YWluZXIpIHtcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NDb250YWluZXIubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVwbGFjZSgnaW52aXNpYmxlJywgJ3Zpc2libGUnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhpZGVQcm9ncmVzcygpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvZ3Jlc3NDb250YWluZXIpIHtcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NDb250YWluZXIubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVwbGFjZSgndmlzaWJsZScsICdpbnZpc2libGUnKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuQENvbXBvbmVudCh7XG4gICAgdGVtcGxhdGU6ICcnXG4gIH0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZVNlYXJjaEJhc2VDb21wb25lbnQge1xuICAgIHByaXZhdGUgX2ZpbHRlcjogYW55O1xuICAgIEBPdXRwdXQoKSBmaWx0ZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCAgZmlsdGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVyO1xuICAgIH1cblxuICAgIHNldCBmaWx0ZXIodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fZmlsdGVyID0gdmFsdWU7XG4gICAgfVxuXG4gICAgb25LZXlFbnRlcihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh0aGlzLl9maWx0ZXIpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuaW1wb3J0IHtBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24sIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlc30gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Zvcm1pb0NvbXBvbmVudCwgRm9ybWlvRm9ybX0gZnJvbSAnYW5ndWxhci1mb3JtaW8nO1xuaW1wb3J0IHtBbmd1bGFyRGF0YUNvbnRleHR9IGZyb20gJ0B0aGVtb3N0L2FuZ3VsYXInO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7U2VydmljZVVybFByZVByb2Nlc3NvciwgVHJhbnNsYXRlUHJlUHJvY2Vzc29yfSBmcm9tICdAdW5pdmVyc2lzL2Zvcm1zJztcbmltcG9ydCB7QWR2YW5jZWRUYWJsZVNlYXJjaEJhc2VDb21wb25lbnR9IGZyb20gJy4uL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLXNlYXJjaC1iYXNlJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2FwcC1hZHZhbmNlZC1zZWFyY2gtZm9ybScsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInAtNFwiPlxuICAgICAgPGZvcm1pbyAjZm9ybWlvQ29tcG9uZW50IGNsYXNzPVwiZm9ybWlvLXNlYXJjaFwiXG4gICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5RW50ZXIoJGV2ZW50KVwiIChjaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiIChmb3JtTG9hZCk9XCJvbkZvcm1Mb2FkKCRldmVudClcIlxuICAgICAgICAgICAgICBbcmVmcmVzaF09XCJyZWZyZXNoRm9ybVwiIFtzdWJtaXNzaW9uXT1cInN1Ym1pc3Npb25cIiBbZm9ybV09XCJmb3JtXCI+PC9mb3JtaW8+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL2FkdmFuY2VkLXNlYXJjaC1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRTZWFyY2hGb3JtQ29tcG9uZW50IGV4dGVuZHMgQWR2YW5jZWRUYWJsZVNlYXJjaEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcblxuXG4gIEBWaWV3Q2hpbGQoJ2Zvcm1pb0NvbXBvbmVudCcpIGZvcm1Db21wb25lbnQ/OiBGb3JtaW9Db21wb25lbnQ7XG4gIEBJbnB1dCgpIGZvcm06IGFueSA9IHt9O1xuICBASW5wdXQoKSBmb3JtU3JjPzogc3RyaW5nO1xuICBAT3V0cHV0KCkgcmVmcmVzaEZvcm0gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGxvYWRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPHsgdGFyZ2V0OiBBZHZhbmNlZFNlYXJjaEZvcm1Db21wb25lbnR9PigpO1xuICBzdWJtaXNzaW9uOiBhbnkgPSB7IGRhdGE6IHt9IH07XG4gIHByaXZhdGUgZmlsdGVyU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgY29tcG9uZW50TG9hZGluZyA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfY29udGV4dDogQW5ndWxhckRhdGFDb250ZXh0LFxuICAgICAgICAgICAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2h0dHA6IEh0dHBDbGllbnRcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdmb3JtJykpIHtcbiAgICAgIGlmIChjaGFuZ2VzLmZvcm0gIT0gbnVsbCkge1xuICAgICAgICBpZiAoY2hhbmdlcy5mb3JtLmN1cnJlbnRWYWx1ZSAmJlxuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG4gICAgICAgICAgY2hhbmdlcy5mb3JtLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLmZvcm0ucHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgIHRoaXMubmdPbkluaXQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdmb3JtU3JjJykpIHtcbiAgICAgIGlmIChjaGFuZ2VzLmZvcm1TcmMgIT0gbnVsbCkge1xuICAgICAgICBpZiAoY2hhbmdlcy5mb3JtU3JjLmN1cnJlbnRWYWx1ZSAmJlxuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG4gICAgICAgICAgY2hhbmdlcy5mb3JtU3JjLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLmZvcm1TcmMucHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgIHRoaXMuX2h0dHAuZ2V0KGNoYW5nZXMuZm9ybVNyYy5jdXJyZW50VmFsdWUpLnRvUHJvbWlzZSgpLnRoZW4oKGZvcm0pID0+IHtcbiAgICAgICAgICAgIC8vIHNldCBmb3JtXG4gICAgICAgICAgICB0aGlzLmZvcm0gPSBmb3JtO1xuICAgICAgICAgICAgLy8gYW5kIGluaXRcbiAgICAgICAgICAgIHRoaXMubmdPbkluaXQoKTtcbiAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBsb2FkaW5nIHNlYXJjaCBjb25maWd1cmF0aW9uJyk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnZmlsdGVyJykpIHtcbiAgICAgIGlmIChjaGFuZ2VzLmZpbHRlciAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuc3VibWlzc2lvbi5kYXRhID0gY2hhbmdlcy5maWx0ZXIuY3VycmVudFZhbHVlIHx8IHt9O1xuICAgICAgICB0aGlzLnJlZnJlc2hGb3JtLmVtaXQoe1xuICAgICAgICAgIHN1Ym1pc3Npb246IHRoaXMuc3VibWlzc2lvblxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtKSB7XG4gICAgICBuZXcgU2VydmljZVVybFByZVByb2Nlc3Nvcih0aGlzLl9jb250ZXh0KS5wYXJzZSh0aGlzLmZvcm0pO1xuICAgICAgbmV3IFRyYW5zbGF0ZVByZVByb2Nlc3Nvcih0aGlzLl90cmFuc2xhdGVTZXJ2aWNlKS5wYXJzZSh0aGlzLmZvcm0pO1xuICAgICAgdGhpcy5zdWJtaXNzaW9uID0ge1xuICAgICAgICBkYXRhOiB0aGlzLmZpbHRlclxuICAgICAgfTtcbiAgICAgIHRoaXMubG9hZGluZy5lbWl0KHtcbiAgICAgICAgdGFyZ2V0OiB0aGlzXG4gICAgICB9KTtcbiAgICAgIHRoaXMucmVmcmVzaEZvcm0uZW1pdCh7XG4gICAgICAgIGZvcm06IHRoaXMuZm9ybVxuICAgICAgfSk7XG4gICAgICB0aGlzLmNvbXBvbmVudExvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuZmlsdGVyU3Vic2NyaXB0aW9uID0gdGhpcy5maWx0ZXJDaGFuZ2Uuc3Vic2NyaWJlKCBmaWx0ZXIgPT4ge1xuICAgICAgICB0aGlzLnN1Ym1pc3Npb24uZGF0YSA9IGZpbHRlcjtcbiAgICAgICAgdGhpcy5yZWZyZXNoRm9ybS5lbWl0KHtcbiAgICAgICAgICBzdWJtaXNzaW9uOiB0aGlzLnN1Ym1pc3Npb25cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvbkNoYW5nZShldmVudDogb2JqZWN0KSB7XG4gICAgaWYgKHRoaXMuZm9ybUNvbXBvbmVudCA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZvcm1Db21wb25lbnQgPSB0aGlzLmZvcm1Db21wb25lbnQ7XG4gICAgT2JqZWN0LmtleXMoZm9ybUNvbXBvbmVudC5zdWJtaXNzaW9uLmRhdGEpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZm9ybUNvbXBvbmVudC5zdWJtaXNzaW9uLmRhdGEsIGtleSkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBmb3JtQ29tcG9uZW50LnN1Ym1pc3Npb24uZGF0YVtrZXldO1xuICAgICAgICAvLyB0aGUgZmlsdGVyIHdpdGggdHlwZSBpcyBhIHN0cmluZyBhbmQgaXMgbm90IGVtcHR5XG4gICAgICAgIGNvbnN0IGlzRW1wdHlTdHJpbmcgPSAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPT09IDA7XG4gICAgICAgIC8vIGRvIG5vdCBpbmNsdWRlIGVtcHR5IG9iamVjdHMgaW4gZmlsdGVyXG4gICAgICAgIGNvbnN0IGlzRW1wdHlPYmplY3QgPSB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDA7XG4gICAgICAgIC8vIG1ha2UgaXNFbXB0eVN0cmluZywgaXNFbXB0eU9iamVjdCBtdXRleFxuICAgICAgICBpZiAoIWlzRW1wdHlTdHJpbmcgJiYgIWlzRW1wdHlPYmplY3QpIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5maWx0ZXIsIGtleSwge1xuICAgICAgICAgICAgY29uZmlndXJhYmxlIDogdHJ1ZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZSA6IHZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuZmlsdGVyW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uRm9ybUxvYWQoZm9ybTogRm9ybWlvRm9ybSkge1xuICAgIGlmICh0aGlzLmZvcm1Db21wb25lbnQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW50TGFuZyA9IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmc7XG4gICAgdGhpcy5mb3JtQ29tcG9uZW50LmZvcm1pby5pMThuZXh0Lm9wdGlvbnMucmVzb3VyY2VzW2N1cnJlbnRMYW5nXSA9IHsgdHJhbnNsYXRpb24gOiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYEZvcm1zYCkgfTtcbiAgICB0aGlzLmZvcm1Db21wb25lbnQuZm9ybWlvLmxhbmd1YWdlID0gY3VycmVudExhbmc7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLy9cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZpbHRlclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5maWx0ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQsIEFmdGVyVmlld0luaXQsIERvQ2hlY2sgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlck1vZGFsT2tDYW5jZWwgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbi9yb3V0aW5nJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVGFibGVDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVDb21wb25lbnQsIEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0IH0gZnJvbSAnLi4vYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IEFuZ3VsYXJEYXRhQ29udGV4dCB9IGZyb20gJ0B0aGVtb3N0L2FuZ3VsYXInO1xuaW1wb3J0IHsgQWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyIH0gZnJvbSAnLi8uLi9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC1maWx0ZXItdmFsdWUtcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBUZW1wbGF0ZVBpcGUgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgUGFnZUluZm8ge1xuICBwYWdlOiBudW1iZXI7XG4gIHBhZ2VzOiBudW1iZXI7XG4gIHN0YXJ0OiBudW1iZXI7XG4gIGVuZDogbnVtYmVyO1xuICBsZW5ndGg6IG51bWJlcjtcbiAgcmVjb3Jkc1RvdGFsOiBudW1iZXI7XG4gIHJlY29yZHNEaXNwbGF5OiBudW1iZXI7XG4gIHNlcnZlclNpZGU/OiBib29sZWFuO1xufVxuXG4vLyBpbXBvcnRhbnQ6IGV4cG9ydCB0aGlzIGNvbnN0IGR1ZSB0byBBT1QgY29tcGlsYXRpb24gZXJyb3JzXG4vLyBzZWUgbW9yZSBodHRwczovL2FuZ3VsYXIuaW8vZ3VpZGUvYW90LW1ldGFkYXRhLWVycm9ycyNvbmx5LWluaXRpYWxpemVkLXZhcmlhYmxlc1xuZXhwb3J0IGNvbnN0IEFkdmFuY2VkVGFibGVNb2RhbEJhc2VUZW1wbGF0ZSA9IGBcbjxkaXY+XG4gICAgPCEtLSBzZWFyY2ggLS0+XG4gICAgPGRpdiBjbGFzcz1cInJvdyBtdC0zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1sZy0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBtYi0zXCI+XG4gICAgICAgICAgPGlucHV0IHNwZWxsY2hlY2s9XCJmYWxzZVwiIHR5cGU9XCJ0ZXh0XCIgI3NlYXJjaEVsZW1lbnRcbiAgICAgICAgICAgICAgICAgKGtleXVwKT1cIm9uS2V5VXAoJGV2ZW50KVwiIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiXG4gICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGJnLWdyYXktMTAwIGJvcmRlci0wXCJcbiAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eydUYWJsZXMuU2VhcmNoUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlfX1cIiBhcmlhLWxhYmVsPVwiU2VhcmNoXCIgYXJpYS1kZXNjcmliZWRieT1cImJhc2ljLWFkZG9uMlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1hcHBlbmRcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYmctZ3JheS0xMDAgYm9yZGVyLTBcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uU2VhcmNoKClcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zZWFyY2ggdGV4dC1zZWNvbmRhcnlcIj48L2k+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgI2VtcHR5VGFibGUgY2xhc3M9XCJkLW5vbmVcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY2lyY2xlIGJnLWdyYXktMzAwIGJvcmRlci1ncmF5LTEwMFwiPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgICA8aDQgY2xhc3M9XCJmb250LTN4bCB0ZXh0LWRhcmtcIiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuRW1wdHlUYWJsZVRpdGxlJ1wiPjwvaDQ+XG4gICAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtbGcgdGV4dC1kYXJrXCIgW3RyYW5zbGF0ZV09XCInVGFibGVzLkVtcHR5VGFibGVNZXNzYWdlJ1wiPjwvcD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbGctNVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLXRvb2xiYXJcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1ncmF5LTEwMFwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zbGlkZXJzLWggcHItMiB0ZXh0LXNlY29uZGFyeVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT57eydUYWJsZXMuRmlsdGVycycgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxkaXYgI2Ryb3Bkb3duRmlsdGVyIGNsYXNzPVwiZHJvcGRvd24gbWwtM1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZ3JheS0xMDAgZHJvcGRvd24tdG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIGlkPVwiZHJvcGRvd25EZWZhdWx0RmlsdGVyc1wiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIiBkcm9wZG93blRvZ2dsZT5cbiAgICAgICAgICAgICAge3sgdGhpcy5kZWZhdWx0RmlsdGVyLm5hbWUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93bkRlZmF1bHRGaWx0ZXJzXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgZGVmYXVsdEZpbHRlcnNcIiAoY2xpY2spPVwib25GaWx0ZXJTZWxlY3QoZmlsdGVyKVwiPlxuICAgICAgICAgICAgICAgIHt7IGZpbHRlci5uYW1lIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIHRleHQtbGctcmlnaHQgbXQtMyBtdC1sZy0wIGQtbm9uZVwiPlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJ0cnVlXCIgY2xhc3M9XCJidG4gcm91bmRlZC1waWxsIGJ0bi1vdXRsaW5lLXRoZW1lXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJwci0yIGZvbnQtbGdcIj4rPC9zcGFuPjxzcGFuIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5BZGRJdGVtJ1wiPjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgW25nQ2xhc3NdPVwieyAnY29tcG9uZW50LWxvYWRpbmcnOiBsb2FkaW5nfVwiPlxuICAgICAgICA8YXBwLWFkdmFuY2VkLXRhYmxlICNhZHZhbmNlZFRhYmxlIChpbml0KT1cIm9uVGFibGVJbml0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb2FkKT1cIm9uRGF0YUxvYWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlU2VsZWN0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzY3JvbGxYXT1cImZhbHNlXCIgW3Njcm9sbFldPVwiMzIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFnZUxlbmd0aF09XCJwYWdlTGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2Nyb2xsYWJsZV09XCJmYWxzZVwiIFtzaG93Rm9vdGVyXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0FjdGlvbnNdPVwiZmFsc2VcIiBbbGVuZ3RoTWVudV09XCJsZW5ndGhNZW51XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cInRhYmxlQ29uZmlnXCIgW2NvbmZpZ1NyY109XCJ0YWJsZUNvbmZpZ1NyY1wiPjwvYXBwLWFkdmFuY2VkLXRhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJvdyBtdC0zIHRhYmxlLWN1c3RvbS1wYWdlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXhcIiAqbmdJZj1cInJlY29yZHNUb3RhbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBtbC1hdXRvIG1yLTMgdGV4dC1zZWNvbmRhcnlcIiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuUmVjb3Jkc1BlclBhZ2UnXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgI2Ryb3Bkb3duTGVuZ3RoIGNsYXNzPVwiZHJvcGRvd24gbXItM1wiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWdyYXktMTAwIGRyb3Bkb3duLXRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJkcm9wZG93blBhZ2VTaXplXCIgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXG4gICAgICAgICAgICAgICAgICBkcm9wZG93blRvZ2dsZT5cbiAgICAgICAgICAgIHt7cGFnZUxlbmd0aH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93blBhZ2VTaXplXCI+XG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzZXRMZW5ndGgoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gZHJvcGRvd24taXRlbS10aGVtZVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBsZW5ndGhNZW51XCI+e3tpdGVtfX08L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIG1yLTJcIiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuUGFnZUluZm8nXCIgW3RyYW5zbGF0ZVBhcmFtc109XCJwYWdlSW5mb1wiPjwvZGl2PlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJwYWdlSW5mbyAmJiBwYWdlSW5mby5wYWdlID09PSAwXCIgY2xhc3M9XCJidG4gdGV4dC1ub3dyYXBcIiAoY2xpY2spPVwiZmlyc3RQYWdlKClcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tbGVmdCB0ZXh0LWNvbG9yLXRoZW1lXCI+PC9pPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1sZWZ0IHRleHQtY29sb3ItdGhlbWVcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJwYWdlSW5mbyAmJiBwYWdlSW5mby5wYWdlPT09MFwiIGNsYXNzPVwiYnRuXCIgKGNsaWNrKT1cInByZXZpb3VzUGFnZSgpXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWxlZnQgdGV4dC1jb2xvci10aGVtZVwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cInBhZ2VJbmZvICYmIHBhZ2VJbmZvLnBhZ2U9PT1wYWdlSW5mby5wYWdlcy0xXCIgY2xhc3M9XCJidG5cIiAoY2xpY2spPVwibmV4dFBhZ2UoKVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1yaWdodCB0ZXh0LWNvbG9yLXRoZW1lXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwicGFnZUluZm8gJiYgcGFnZUluZm8ucGFnZT09PXBhZ2VJbmZvLnBhZ2VzLTFcIiBjbGFzcz1cImJ0biB0ZXh0LW5vd3JhcFwiIChjbGljayk9XCJsYXN0UGFnZSgpXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLXJpZ2h0IHRleHQtY29sb3ItdGhlbWVcIj48L2k+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLXJpZ2h0IHRleHQtY29sb3ItdGhlbWVcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuYDtcblxuLyoqXG4gKlxuICogQSBzcGVjaWZpYyB2YWx1ZSBmb3IgYSBjcml0ZXJpb25cbiAqXG4gKi9cbmludGVyZmFjZSBTZWFyY2hJdGVtIHtcbiAgZmlsdGVyOiBhbnk7XG4gIG5hbWU6IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLXRhYmxlLW1vZGFsJyxcbiAgdGVtcGxhdGU6IEFkdmFuY2VkVGFibGVNb2RhbEJhc2VUZW1wbGF0ZSxcbiAgc3R5bGVzOiBbXG4gICAgYFxuXG4gICAgYFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQgZXh0ZW5kcyBSb3V0ZXJNb2RhbE9rQ2FuY2VsIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zZWFyY2hFbGVtZW50ICYmIHRoaXMuc2VhcmNoRWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuc2VhcmNoRWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0FMTF9GSUxURVIgPSB7XG4gICAgbmFtZTogJ1RhYmxlcy5BbGwnLFxuICAgIGZpbHRlcjogbnVsbFxuICB9O1xuXG4gIEBWaWV3Q2hpbGQoJ2FkdmFuY2VkVGFibGUnKSBhZHZhbmNlZFRhYmxlPzogQWR2YW5jZWRUYWJsZUNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnZW1wdHlUYWJsZScpIGVtcHR5VGFibGU/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdkcm9wZG93bkZpbHRlcicpIGRyb3Bkb3duRmlsdGVyPzogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZHJvcGRvd25MZW5ndGgnKSBkcm9wZG93bkxlbmd0aD86IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaEVsZW1lbnQnKSBzZWFyY2hFbGVtZW50OiBhbnk7XG4gIEBJbnB1dCgndGFibGVDb25maWcnKSB0YWJsZUNvbmZpZz86IFRhYmxlQ29uZmlndXJhdGlvbjtcbiAgQElucHV0KCd0YWJsZUNvbmZpZ1NyYycpIHRhYmxlQ29uZmlnU3JjPzogc3RyaW5nO1xuICBASW5wdXQoJ3BhZ2VMZW5ndGgnKSBwYWdlTGVuZ3RoID0gMjU7XG4gIEBJbnB1dCgnc2VhcmNoVGV4dCcpIHNlYXJjaFRleHQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgnbGVuZ3RoTWVudScpIGxlbmd0aE1lbnU6IEFycmF5PG51bWJlcj4gPSBbNSwgMTAsIDI1LCA1MCwgMTAwXTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHB1YmxpYyByZWNvcmRzVG90YWwgPSAwO1xuICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuICBwdWJsaWMgcmVjb3Jkc0ZpbHRlcmVkID0gMDtcbiAgcHVibGljIGRlZmF1bHRGaWx0ZXJzOiBBcnJheTxhbnk+ID0gW0FkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQuREVGQVVMVF9BTExfRklMVEVSXTtcbiAgQElucHV0KCdkZWZhdWx0RmlsdGVyJykgZGVmYXVsdEZpbHRlciA9IEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQuREVGQVVMVF9BTExfRklMVEVSO1xuXG5cbiAgcHVibGljIHBhZ2VJbmZvID0gPFBhZ2VJbmZvPntcbiAgICBzZXJ2ZXJTaWRlOiB0cnVlXG4gIH07XG4gIHByaXZhdGUgX3RlbXBsYXRlOiBUZW1wbGF0ZVBpcGU7XG4gIGNvbmZpZ0NoYW5nZXNTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgX3JvdXRlcjogUm91dGVyLFxuICAgIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJvdGVjdGVkIF9jb250ZXh0OiBBbmd1bGFyRGF0YUNvbnRleHQsXG4gICAgcHJvdGVjdGVkIGFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcjogQWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyLFxuICAgIHByb3RlY3RlZCBkYXRlUGlwZTogRGF0ZVBpcGVcbiAgKSB7XG4gICAgc3VwZXIoX3JvdXRlciwgX2FjdGl2YXRlZFJvdXRlKTtcbiAgICB0aGlzLm1vZGFsQ2xhc3MgPSAnbW9kYWwteGwgbW9kYWwtdGFibGUnO1xuICAgIHRoaXMuX3RlbXBsYXRlID0gbmV3IFRlbXBsYXRlUGlwZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0SW5wdXRzKGNvbXBvbmVudFR5cGUpOiBBcnJheTxhbnk+IHtcbiAgICBjb25zdCBwcm9wcyA9IGNvbXBvbmVudFR5cGUuX19wcm9wX19tZXRhZGF0YV9fO1xuICAgIGNvbnN0IGlucHV0czogYW55W10gPSBbXTtcbiAgICBpZiAocHJvcHMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGlucHV0cztcbiAgICB9XG4gICAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICBjb25zdCBtZW1iZXIgPSBwcm9wc1twcm9wXVswXTtcbiAgICAgIGlmIChtZW1iZXIubmdNZXRhZGF0YU5hbWUgPT09ICdJbnB1dCcpIHtcbiAgICAgICAgaW5wdXRzLnB1c2gocHJvcCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGlucHV0cy5zb3J0KCk7XG4gIH1cblxuICBwdWJsaWMgaGFzSW5wdXRzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuXG4gICAgdGhpcy5va0J1dHRvblRleHQgPSAnVGFibGVzLkFwcGx5JztcbiAgICB0aGlzLmNhbmNlbEJ1dHRvblRleHQgPSAnVGFibGVzLkNhbmNlbCc7XG4gICAgLy8gZ2V0IHJvdXRlIGRhdGFcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuYWN0aXZhdGVkUm91dGUuZGF0YS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAvLyBzZXQgbW9kYWwgdGl0bGUgaWYgYW55XG4gICAgICBpZiAoZGF0YS50aXRsZSkge1xuICAgICAgICB0aGlzLm1vZGFsVGl0bGUgPSBkYXRhLnRpdGxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jb25maWcpIHtcbiAgICAgICAgdGhpcy50YWJsZUNvbmZpZyA9IGRhdGEuY29uZmlnO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudGFibGVDb25maWcpIHtcbiAgICAgICAgdGhpcy5kZWZhdWx0RmlsdGVycy5wdXNoLmFwcGx5KHRoaXMuZGVmYXVsdEZpbHRlcnMsIHRoaXMudGFibGVDb25maWcuc2VhcmNoZXMpO1xuICAgICAgfVxuICAgICAgLy8gaW1wb3J0YW50OiB1c2UgaGFzSW5wdXRzIGR1ZSB0byBBT1QgY29tcGlsYXRpb24uIE1ldGFkYXRhIHByb3BlcnRpZXMgY2Fubm90IGJlIHVzZWQgKGUuZy4gQElucHV0KCkpXG4gICAgICAvLyBiZWNhdXNlIHRoZXJlIGFyZSBlbXB0eSBkdXJpbmcgcnVudGltZVxuICAgICAgLy8gc28gd2UgbmVlZCB0byBkZWZpbmUgbWFudWFsbHkgaW5wdXQgcHJvcGVydGllcyB0aGF0IGFyZSBnb2luZyB0byBiZSBiaW5kIHRocm91Z2ggdGhpcyBwcm9jZXNzXG4gICAgICAvLyBiaW5kIGFsbCBpbnB1dHNcbiAgICAgIGNvbnN0IGlucHV0cyA9IHRoaXMuaGFzSW5wdXRzKCk7XG4gICAgICBpbnB1dHMuZm9yRWFjaChpbnB1dCA9PiB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGF0YSwgaW5wdXQpKSB7XG4gICAgICAgICAgdGhpc1tpbnB1dF0gPSBkYXRhW2lucHV0XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAodGhpcy5hZHZhbmNlZFRhYmxlKSB7XG4gICAgICAgIHRoaXMuY29uZmlnQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IHRoaXMuYWR2YW5jZWRUYWJsZS5jb25maWdDaGFuZ2VzLnN1YnNjcmliZSgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMudGFibGVDb25maWcpIHtcbiAgICAgICAgICAgIC8vIHJlc2V0IGRlZmF1bHQgZmlsdGVyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50LkRFRkFVTFRfQUxMX0ZJTFRFUjtcbiAgICAgICAgICAgIC8vIGluaXQgZmlsdGVyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRGaWx0ZXJzID0gW0FkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQuREVGQVVMVF9BTExfRklMVEVSXTtcbiAgICAgICAgICAgIC8vIGFkZCBleHRyYSBmaWx0ZXJzXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRGaWx0ZXJzLnB1c2guYXBwbHkodGhpcy5kZWZhdWx0RmlsdGVycywgdGhpcy50YWJsZUNvbmZpZy5zZWFyY2hlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNhbmNlbCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBvaygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgb25EYXRhTG9hZChkYXRhOiBBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdCkge1xuICAgIHRoaXMucmVjb3Jkc1RvdGFsID0gZGF0YS5yZWNvcmRzVG90YWw7XG4gICAgdGhpcy5yZWNvcmRzRmlsdGVyZWQgPSBkYXRhLnJlY29yZHNGaWx0ZXJlZDtcbiAgICAvLyBnZXQgZmlyc3QgcGFnZSBpbmZvIChiZWNhdXNlIHBhZ2UgaXMgbm90IGdvaW5nIHRvIGJlIGZpcmVkIGZvciBmaXJzdCBwYWdlKVxuICAgIGlmIChkYXRhLnJlY29yZHNUb3RhbCA+IDAgJiYgdGhpcy5wYWdlSW5mby5yZWNvcmRzVG90YWwgPT09IDApIHtcbiAgICAgIHRoaXMucGFnZUluZm8ucmVjb3Jkc1RvdGFsID0gZGF0YS5yZWNvcmRzVG90YWw7XG4gICAgfVxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICB9XG5cbiAgcHJldmlvdXNQYWdlKCkge1xuICAgIGlmICh0aGlzLmFkdmFuY2VkVGFibGUpIHtcbiAgICAgIC8vIGdvIHRvIG5leHQgcGFnZVxuICAgICAgLy8gbm9pbnNwZWN0aW9uIFR5cGVTY3JpcHRWYWxpZGF0ZUpTVHlwZXNcbiAgICAgIHRoaXMuYWR2YW5jZWRUYWJsZS5kYXRhVGFibGUucGFnZSgncHJldmlvdXMnKS5kcmF3KCdwYWdlJyk7XG4gICAgfVxuICB9XG5cbiAgbmV4dFBhZ2UoKSB7XG4gICAgaWYgKHRoaXMuYWR2YW5jZWRUYWJsZSkge1xuICAgICAgLy8gZ28gdG8gbmV4dCBwYWdlXG4gICAgICAvLyBub2luc3BlY3Rpb24gVHlwZVNjcmlwdFZhbGlkYXRlSlNUeXBlc1xuICAgICAgdGhpcy5hZHZhbmNlZFRhYmxlLmRhdGFUYWJsZS5wYWdlKCduZXh0JykuZHJhdygncGFnZScpO1xuICAgIH1cbiAgfVxuXG4gIG9uVGFibGVJbml0KCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGRhdGFUYWJsZSA9IHNlbGYuYWR2YW5jZWRUYWJsZSAmJiBzZWxmLmFkdmFuY2VkVGFibGUuZGF0YVRhYmxlO1xuICAgIC8vIGdldCBpbml0aWFsIHBhZ2UgaW5mb1xuICAgIGNvbnN0IGluaXRpYWxQYWdlSW5mbyA9IDxQYWdlSW5mbz5kYXRhVGFibGUucGFnZS5pbmZvKCk7XG4gICAgaW5pdGlhbFBhZ2VJbmZvLnN0YXJ0ICs9IDE7XG4gICAgc2VsZi5wYWdlSW5mbyA9IGluaXRpYWxQYWdlSW5mbztcbiAgICAvLyBjaGFuZ2UgZW1wdHlUYWJsZU1lc3NhZ2VcbiAgICBkYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc0VtcHR5VGFibGUgPSB0aGlzLmVtcHR5VGFibGUgJiYgdGhpcy5lbXB0eVRhYmxlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MO1xuICAgIC8vIGJpbmQgcGFnZSBjaGFuZ2UgZXZlbnRcbiAgICBkYXRhVGFibGUub24oJ3BhZ2UuZHQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYWdlSW5mbyA9IDxQYWdlSW5mbz5kYXRhVGFibGUucGFnZS5pbmZvKCk7XG4gICAgICBwYWdlSW5mby5zdGFydCArPSAxO1xuICAgICAgc2VsZi5wYWdlSW5mbyA9IHBhZ2VJbmZvO1xuICAgIH0pO1xuICAgIC8vIGJpbmQgZHJhdyBjaGFuZ2UgZXZlbnRcbiAgICBkYXRhVGFibGUub24oJ2RyYXcuZHQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBmb3IgZnV0dXJlIHVzZVxuICAgICAgc2VsZi5sb2FkaW5nID0gZmFsc2U7XG4gICAgICBjb25zdCBwYWdlSW5mbyA9IDxQYWdlSW5mbz5kYXRhVGFibGUucGFnZS5pbmZvKCk7XG4gICAgICBwYWdlSW5mby5zdGFydCArPSAxO1xuICAgICAgc2VsZi5wYWdlSW5mbyA9IHBhZ2VJbmZvO1xuICAgIH0pO1xuICB9XG5cbiAgZmlyc3RQYWdlKCkge1xuICAgIGlmICh0aGlzLmFkdmFuY2VkVGFibGUpIHtcbiAgICAgIC8vIGdvIHRvIGZpcnN0IHBhZ2VcbiAgICAgIC8vIG5vaW5zcGVjdGlvbiBUeXBlU2NyaXB0VmFsaWRhdGVKU1R5cGVzXG4gICAgICB0aGlzLmFkdmFuY2VkVGFibGUuZGF0YVRhYmxlLnBhZ2UoJ2ZpcnN0JykuZHJhdygncGFnZScpO1xuICAgIH1cbiAgfVxuXG4gIGxhc3RQYWdlKCkge1xuICAgIGlmICh0aGlzLmFkdmFuY2VkVGFibGUpIHtcbiAgICAgIC8vIGdvIHRvIGxhc3QgcGFnZVxuICAgICAgLy8gbm9pbnNwZWN0aW9uIFR5cGVTY3JpcHRWYWxpZGF0ZUpTVHlwZXNcbiAgICAgIHRoaXMuYWR2YW5jZWRUYWJsZS5kYXRhVGFibGUucGFnZSgnbGFzdCcpLmRyYXcoJ3BhZ2UnKTtcbiAgICB9XG4gIH1cblxuICBzZXRMZW5ndGgodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmFkdmFuY2VkVGFibGUpIHtcbiAgICAgIHRoaXMucGFnZUxlbmd0aCA9IHZhbHVlO1xuICAgICAgdGhpcy5hZHZhbmNlZFRhYmxlLmRhdGFUYWJsZS5wYWdlLmxlbih2YWx1ZSkuZHJhdygpO1xuICAgIH1cbiAgfVxuXG4gIG9uS2V5VXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJ1JldHVybicpIHtcbiAgICAgIGlmICh0aGlzLmFkdmFuY2VkVGFibGUpIHtcbiAgICAgICAgLy8gbG9hZGluZ1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmFkdmFuY2VkVGFibGUuc2VhcmNoKCg8SFRNTElucHV0RWxlbWVudD5ldmVudC50YXJnZXQpLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblNlYXJjaCgpIHtcbiAgICBpZiAodGhpcy5hZHZhbmNlZFRhYmxlKSB7XG4gICAgICAvLyBsb2FkaW5nXG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5hZHZhbmNlZFRhYmxlLnNlYXJjaCh0aGlzLnNlYXJjaFRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBSZWFkcyB0aGUgbW9kYWwgdGFibGUgYW5kIHJldHVybnMgYSBsaXN0IG9mIGZpbHRlcnMgdG8gdXNlIGluIHRoZSB0YWJsZVxuICAgKiBxdWVyeS5cbiAgICpcbiAgICogQHBhcmFtIHRhYmxlQ29uZmlnIHtvYmplY3R9IFRoZSB0YWJsZSBjb25maWd1cmF0aW9uIGZyb20ganNvbiBmaWxlXG4gICAqIEBwYXJhbSBkZWZhdWx0RmlsdGVyVmFsdWVzIHtvYmplY3R9IEEgbGlzdCBvZiBkZWZhdWx0IGZpbHRlcnNcbiAgICogQHBhcmFtIHNlYXJjaEl0ZW0gVGhlIHNlYXJjaEl0ZW0gdG8gdXNlXG4gICAqXG4gICAqL1xuICBnZXRGaWx0ZXJzKFxuICAgIHRhYmxlQ29uZmlnOiBhbnksXG4gICAgZGVmYXVsdEZpbHRlclZhbHVlcyA9IHt9LFxuICAgIHNlYXJjaEl0ZW06IGFueVxuICApOiBBcnJheTxzdHJpbmc+IHtcbiAgICAvLyBEbyBub3RoaW5nIGluIGFic2VuY2Ugb2YgY29uZmlndXJhdGlvbi5cbiAgICBpZiAoIXRhYmxlQ29uZmlnIHx8ICFBcnJheS5pc0FycmF5KHRhYmxlQ29uZmlnLmNyaXRlcmlhKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGlmIChzZWFyY2hJdGVtLmZpbHRlciA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2hlZENyaXRlcmlvbiA9IHRhYmxlQ29uZmlnLmNyaXRlcmlhLmZpbmQoY3JpdGVyaW9uID0+XG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2VhcmNoSXRlbS5maWx0ZXIsIGNyaXRlcmlvbi5uYW1lKVxuICAgICk7XG5cbiAgICBpZiAobWF0Y2hlZENyaXRlcmlvbiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBzZWFyY2hJdGVtLmZpbHRlclttYXRjaGVkQ3JpdGVyaW9uLm5hbWVdO1xuXG4gICAgY29uc3QgY3JpdGVyaW9uU2FmZU5hbWUgPSBtYXRjaGVkQ3JpdGVyaW9uLm5hbWUgIT09IG51bGxcbiAgICAgID8gbWF0Y2hlZENyaXRlcmlvbi5uYW1lLnRvU3RyaW5nKClcbiAgICAgIDogJyc7XG5cbiAgICBsZXQgYXBwbGljYWJsZUZpbHRlcjogc3RyaW5nO1xuXG4gICAgLy8gUmF3IGRhdGVzIHNob3VsZCBiZSB0cmFuc2Zvcm1lZCB0byBhIHNwZWNpZmljIGZvcm1hdFxuICAgIGlmIChjcml0ZXJpb25TYWZlTmFtZS5pbmNsdWRlcygnR01UJykpIHtcbiAgICAgIGNvbnN0IG5ld0RhdGUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShjcml0ZXJpb25TYWZlTmFtZSwgJ01NL2RkL3l5eXknKTtcbiAgICAgIGFwcGxpY2FibGVGaWx0ZXIgPSB0aGlzLl90ZW1wbGF0ZS50cmFuc2Zvcm0obWF0Y2hlZENyaXRlcmlvbi5maWx0ZXIsIHtcbiAgICAgICAgdmFsdWU6IG5ld0RhdGVcbiAgICAgIH0pO1xuXG4gICAgfSBlbHNlIGlmIChjcml0ZXJpb25TYWZlTmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGFwcGxpY2FibGVGaWx0ZXIgPSAodGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKG1hdGNoZWRDcml0ZXJpb24uZmlsdGVyLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICB9LCBkZWZhdWx0RmlsdGVyVmFsdWVzKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBsaWNhYmxlRmlsdGVyID0gJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIFthcHBsaWNhYmxlRmlsdGVyXTtcbiAgfVxuXG4gIG9uRmlsdGVyU2VsZWN0KHZhbHVlOiB7IGZpbHRlcjogYW55OyBuYW1lOiBzdHJpbmcgfSB8IGFueSkge1xuICAgIHRoaXMuYWR2YW5jZWRTZWFyY2godmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIFJ1bnMgYSBmaWx0ZXIgYWdhaW5zdCB0aGUgbW9kYWwgdGFibGVcbiAgICpcbiAgICogQHBhcmFtIGZpbHRlciBUaGUgZmlsdGVyIHRvIHVzZSBpbiB0aGUgc2VhcmNoXG4gICAqXG4gICAqL1xuICBhc3luYyBhZHZhbmNlZFNlYXJjaChmaWx0ZXIpOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIERvIG5vdGhpbmcgaW4gYWJzZW5jZSBvZiBjb25maWd1cmF0aW9uLlxuICAgIGlmICghdGhpcy50YWJsZUNvbmZpZyB8fCAhQXJyYXkuaXNBcnJheSh0aGlzLnRhYmxlQ29uZmlnLmNyaXRlcmlhKSB8fCAhdGhpcy5hZHZhbmNlZFRhYmxlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05vIHRhYmxlIGNvbmZpZ3VyYXRpb24gYXZhaWxhYmxlJywgdGhpcy50YWJsZUNvbmZpZyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQW4gYWR2YW5jZWQgdGFibGUgaGFzIHNvbWUgZmlsdGVycyBieSBkZWZhdWx0XG4gICAgbGV0IGRlZmF1bHRGaWx0ZXJWYWx1ZXM7XG4gICAgdHJ5IHtcbiAgICAgIGRlZmF1bHRGaWx0ZXJWYWx1ZXMgPSBhd2FpdCB0aGlzLmFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlci5nZXRWYWx1ZXMoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGRlZmF1bHRGaWx0ZXJWYWx1ZXMgPSB7fTtcbiAgICB9XG5cbiAgICBjb25zdCBleHByZXNzaW9uczogYW55W10gPSBbXTtcbiAgICBsZXQgcHJlZGVmaW5lZENyaXRlcmlhO1xuICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IGZpbHRlcjtcbiAgICAgIHByZWRlZmluZWRDcml0ZXJpYSA9IHRoaXMuZ2V0RmlsdGVycyhcbiAgICAgICAgdGhpcy50YWJsZUNvbmZpZyxcbiAgICAgICAgZGVmYXVsdEZpbHRlclZhbHVlcyxcbiAgICAgICAgZmlsdGVyXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFbXB0eSBhIGZhbHN5IGZpbHRlciByZXNldHMgdGhlIHJlc3VsdHNcbiAgICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQuREVGQVVMVF9BTExfRklMVEVSO1xuICAgIH1cblxuICAgIC8vIHNlYXJjaCBmaWx0ZXIgaXMgYXBwbGllZCBzZXBhcmF0ZWx5LCB0aGVyZSBpcyBubyBuZWVkIHRvIGFkZCBoZXJlLlxuICAgIGV4cHJlc3Npb25zLnB1c2gocHJlZGVmaW5lZENyaXRlcmlhKTtcblxuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5fY29udGV4dC5tb2RlbCh0aGlzLmFkdmFuY2VkVGFibGUuY29uZmlnLm1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgIHF1ZXJ5LnNldFBhcmFtKCdmaWx0ZXInLCBleHByZXNzaW9ucy5qb2luKCcgYW5kICcpKS5wcmVwYXJlKCk7XG4gICAgdGhpcy5hZHZhbmNlZFRhYmxlLnF1ZXJ5ID0gcXVlcnk7XG4gICAgdGhpcy5hZHZhbmNlZFRhYmxlLmZldGNoKCk7XG4gIH1cbn1cblxuIiwiaW1wb3J0IHsgQWR2YW5jZWRUYWJsZU1vZGFsQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2FkdmFuY2VkLXRhYmxlLW1vZGFsL2FkdmFuY2VkLXRhYmxlLW1vZGFsLWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyIH0gZnJvbSAnLi4vYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtZmlsdGVyLXZhbHVlLXByb3ZpZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQW5ndWxhckRhdGFDb250ZXh0IH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkdmFuY2VkLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAubW9kYWwtdGFibGUgLmRhdGFUYWJsZXNfd3JhcHBlciB7XG4gICAgICBoZWlnaHQ6IDUwdmg7XG4gICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIH1cbiAgICBgLFxuICBdLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFNlbGVjdENvbXBvbmVudCBleHRlbmRzIEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcblxuICBwdWJsaWMgZGlzbWlzczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaEVsZW1lbnQnKSBzZWFyY2hFbGVtZW50OiBhbnk7XG5cbiAgY29uc3RydWN0b3Iocm91dGVyOiBSb3V0ZXIsXG4gICAgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIGNvbnRleHQ6IEFuZ3VsYXJEYXRhQ29udGV4dCxcbiAgICBhZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXI6IEFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcixcbiAgICBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgcHJpdmF0ZSBfbW9kYWxSZWY6IEJzTW9kYWxSZWYsXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZikge1xuICAgIHN1cGVyKHJvdXRlciwgYWN0aXZhdGVkUm91dGUsIGNvbnRleHQsIGFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlciwgZGF0ZVBpcGUpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc2VhcmNoRWxlbWVudCAmJiB0aGlzLnNlYXJjaEVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB0aGlzLnNlYXJjaEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuICAgIH0sIDApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIG9rKCkge1xuICAgIHRoaXMuX21vZGFsUmVmLmhpZGUoKTtcbiAgICB0aGlzLmRpc21pc3MuZW1pdCgnb2snKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjYW5jZWwoKSB7XG4gICAgdGhpcy5fbW9kYWxSZWYuaGlkZSgpO1xuICAgIHRoaXMuZGlzbWlzcy5lbWl0KCdjYW5jZWwnKTtcbiAgfVxuXG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RhbFNlcnZpY2UgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQgeyBBZHZhbmNlZFNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4vYWR2YW5jZWQtc2VsZWN0LmNvbXBvbmVudCc7XG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRTZWxlY3RTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9tb2RhbDogTW9kYWxTZXJ2aWNlKSB7XG4gICAgLy9cbiAgfVxuXG4gIHNlbGVjdChpbml0aWFsU3RhdGU6IGFueSk6IFByb21pc2U8e3Jlc3VsdDogc3RyaW5nLCBpdGVtczogQXJyYXk8YW55Pn0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLl9tb2RhbC5vcGVuTW9kYWxDb21wb25lbnQoQWR2YW5jZWRTZWxlY3RDb21wb25lbnQsIHtcbiAgICAgICAgICBjbGFzczogJ21vZGFsLXhsIG1vZGFsLXRhYmxlJyxcbiAgICAgICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlLFxuICAgICAgICAgIGFuaW1hdGVkOiB0cnVlLFxuICAgICAgICAgIGluaXRpYWxTdGF0ZTogaW5pdGlhbFN0YXRlXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBjb21wb25lbnRSZWY6IEFkdmFuY2VkU2VsZWN0Q29tcG9uZW50ID0gbW9kYWxSZWYuY29udGVudDtcbiAgICAgICAgY29tcG9uZW50UmVmLmRpc21pc3Muc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh7XG4gICAgICAgICAgICByZXN1bHQ6IHJlc3VsdCxcbiAgICAgICAgICAgIGl0ZW1zOiAoY29tcG9uZW50UmVmLmFkdmFuY2VkVGFibGUgJiYgY29tcG9uZW50UmVmLmFkdmFuY2VkVGFibGUuc2VsZWN0ZWQpIGFzIGFueVtdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgUmVzb2x2ZSwgUm91dGVyU3RhdGVTbmFwc2hvdH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZUNvbmZpZ3VyYXRpb25SZXNvbHZlciBpbXBsZW1lbnRzIFJlc29sdmU8c3RyaW5nPiB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfaHR0cDogSHR0cENsaWVudCkge31cbiAgICByZXNvbHZlKFxuICAgICAgICByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgICAgICAgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3RcbiAgICApOiBQcm9taXNlPGFueT58YW55IHtcbiAgICAgICAgLy8gZ2V0IGxpc3RcbiAgICAgICAgY29uc3QgbGlzdCA9IHJvdXRlLmRhdGEubGlzdCB8fCByb3V0ZS5wYXJhbXMubGlzdDtcbiAgICAgICAgLy8gZ2V0IG1vZGVsXG4gICAgICAgIGNvbnN0IG1vZGVsID0gcm91dGUuZGF0YS5tb2RlbCB8fCByb3V0ZS5wYXJhbXMubW9kZWw7XG4gICAgICAgIC8vIGdldCBjb25maWd1cmF0aW9uXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldChgYXNzZXRzL2xpc3RzLyR7bW9kZWx9LyR7bGlzdH0uanNvbmApLnRvUHJvbWlzZSgpO1xuICAgIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkU2VhcmNoQ29uZmlndXJhdGlvblJlc29sdmVyIGltcGxlbWVudHMgUmVzb2x2ZTxzdHJpbmc+IHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9odHRwOiBIdHRwQ2xpZW50KSB7fVxuICAgIHJlc29sdmUoXG4gICAgICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICAgICAgICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdFxuICAgICk6IFByb21pc2U8YW55Pnxhbnkge1xuICAgICAgICAvLyBnZXQgbGlzdFxuICAgICAgICBjb25zdCBsaXN0ID0gcm91dGUuZGF0YS5saXN0IHx8IHJvdXRlLnBhcmFtcy5saXN0O1xuICAgICAgICAvLyBnZXQgbW9kZWxcbiAgICAgICAgY29uc3QgbW9kZWwgPSByb3V0ZS5kYXRhLm1vZGVsIHx8IHJvdXRlLnBhcmFtcy5tb2RlbDtcbiAgICAgICAgLy8gZ2V0IGNvbmZpZ3VyYXRpb25cbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0KGBhc3NldHMvbGlzdHMvJHttb2RlbH0vc2VhcmNoLiR7bGlzdH0uanNvbmApLnRvUHJvbWlzZSgpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVDb21wb25lbnQgfSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQW5ndWxhckRhdGFDb250ZXh0IH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XHJcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlLCBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFRhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3RhYmxlcy5hY3RpdmF0ZWQtdGFibGUuc2VydmljZSc7XHJcbmltcG9ydCB7IFVzZXJTdG9yYWdlU2VydmljZSB9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXHJcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtdGFibGUtc2V0dGluZ3MnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hZHZhbmNlZC10YWJsZS1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCcsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVTZXR0aW5nc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIHRhYmxlPzogQWR2YW5jZWRUYWJsZUNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKCdtb2RhbF9zZXR0aW5nc190ZW1wbGF0ZScpIG1vZGFsX3NldHRpbmdzX3RlbXBsYXRlPzogRWxlbWVudFJlZjtcclxuICBtb2RhbFJlZj86IEJzTW9kYWxSZWY7XHJcbiAgc3RvcmFnZUtleTogYW55O1xyXG4gIHBhcmFtczogYW55ID0gdGhpcy5fYWN0aXZhdGVkUm91dGUucGFyYW1zO1xyXG4gIHByaXZhdGUgc2F2ZWRUYWJsZVNldHRpbmdzOiBhbnk7XHJcbiAgZm9ybT86IEZvcm1Hcm91cDtcclxuICBjb2x1bW5zOiBhbnlbXSA9IFtdO1xyXG4gIHRhYmxlQ29sdW1uczogYW55O1xyXG4gIGFjdGl2ZVRhYmxlQ29uZmlnOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfY29udGV4dDogQW5ndWxhckRhdGFDb250ZXh0LFxyXG4gICAgICAgICAgICAgIHByb3RlY3RlZCBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTdG9yYWdlOiBVc2VyU3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfYWN0aXZhdGVkVGFibGU6IEFjdGl2YXRlZFRhYmxlU2VydmljZSkge1xyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICB9XHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5hY3RpdmVUYWJsZUNvbmZpZyA9IHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlICYmIHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlLmdldENvbmZpZygpO1xyXG4gICAgdGhpcy5zdG9yYWdlS2V5ID0gJ3JlZ2lzdHJhci9zZXR0aW5ncy8nICsgdGhpcy5hY3RpdmVUYWJsZUNvbmZpZy50aXRsZSArICcvdGFibGUvY29sdW1ucyc7XHJcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtjb2x1bW5zOiBuZXcgRm9ybUFycmF5KFtdLCB0aGlzLm1pblNlbGVjdGVkQ29sdW1ucygxKSl9KTtcclxuICAgIHRoaXMudXNlclN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXkpLnRoZW4oKGRhdGEpID0+IHtcclxuICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICB0aGlzLnNhdmVkVGFibGVTZXR0aW5ncyA9IGRhdGEudmFsdWU7XHJcbiAgICAgICAgaWYgKHRoaXMuc2F2ZWRUYWJsZVNldHRpbmdzKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5fYWN0aXZhdGVkVGFibGUuYWN0aXZlVGFibGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fYWN0aXZhdGVkVGFibGUuYWN0aXZlVGFibGUuaGFuZGxlQ29sdW1ucyh0aGlzLnNhdmVkVGFibGVTZXR0aW5ncyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWRkQ2hlY2tib3hlcygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBhZGRDaGVja2JveGVzKCkge1xyXG4gICAgdGhpcy50YWJsZUNvbHVtbnMgPSB0aGlzLmFjdGl2ZVRhYmxlQ29uZmlnLmNvbHVtbnMuc2xpY2UoMSk7XHJcbiAgICB0aGlzLnRhYmxlQ29sdW1ucy5mb3JFYWNoICgoY29sdW1uLCBpKSA9PiB7XHJcbiAgICAgIGlmICghY29sdW1uLmhpZGRlbikge1xyXG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB7XHJcbiAgICAgICAgICBpZDogY29sdW1uLm5hbWUsXHJcbiAgICAgICAgICBuYW1lOiBjb2x1bW4udGl0bGVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuY29sdW1ucy5wdXNoKGNvbnRyb2wpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmICh0aGlzLnNhdmVkVGFibGVTZXR0aW5ncykge1xyXG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCAoKGNvbHVtbiwgaSkgPT4ge1xyXG4gICAgICAgIGNvbHVtbi5jaGVjayA9IGZhbHNlO1xyXG4gICAgICAgIGNvbHVtbi5jaGVjayA9IHRoaXMuc2F2ZWRUYWJsZVNldHRpbmdzLmluY2x1ZGVzKGNvbHVtbi5pZCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmNvbHVtbnMubWFwKChjb2x1bW4sIGkpID0+IHtcclxuICAgICAgICBjb25zdCBjb250cm9sID0gbmV3IEZvcm1Db250cm9sKGNvbHVtbi5jaGVjayk7XHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybSkge1xyXG4gICAgICAgICAgKHRoaXMuZm9ybS5jb250cm9scy5jb2x1bW5zIGFzIEZvcm1BcnJheSkucHVzaChjb250cm9sKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3BlblRhYmxlU2V0dGluZ3ModGFibGVfc2V0dGluZ3NfbW9kYWw6IFRlbXBsYXRlUmVmPGFueT4pIHtcclxuICAgIHRoaXMubW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5zaG93KHRhYmxlX3NldHRpbmdzX21vZGFsKTtcclxuICB9XHJcblxyXG4gIHNhdmVUYWJsZVNldHRpbmdzKCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybSA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHNlbGVjdGVkQ29sdW1uc0lkcyA9IHRoaXMuZm9ybS52YWx1ZS5jb2x1bW5zXHJcbiAgICAgIC5tYXAoKHYsIGkpID0+IHYgPyB0aGlzLmNvbHVtbnNbaV0uaWQgOiBudWxsKVxyXG4gICAgICAuZmlsdGVyKHYgPT4gdiAhPT0gbnVsbCk7XHJcbiAgICB0aGlzLnVzZXJTdG9yYWdlLnNldEl0ZW0odGhpcy5zdG9yYWdlS2V5LCBzZWxlY3RlZENvbHVtbnNJZHMpO1xyXG4gICAgaWYgKHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlKSB7XHJcbiAgICAgIHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlLmhhbmRsZUNvbHVtbnMoc2VsZWN0ZWRDb2x1bW5zSWRzKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm1vZGFsUmVmKSB7XHJcbiAgICAgIHRoaXMubW9kYWxSZWYuaGlkZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGlzbWlzcygpIHtcclxuICAgIGlmICh0aGlzLm1vZGFsUmVmKSB7XHJcbiAgICAgIHRoaXMubW9kYWxSZWYuaGlkZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWluU2VsZWN0ZWRDb2x1bW5zKG1pbiA9IDEpIHtcclxuICAgIGNvbnN0IHZhbGlkYXRvcjogVmFsaWRhdG9yRm4gPSAoZm9ybUFycmF5OiBGb3JtQXJyYXkpID0+IHtcclxuICAgICAgY29uc3QgdG90YWxTZWxlY3RlZCA9IGZvcm1BcnJheS5jb250cm9sc1xyXG4gICAgICAgIC5tYXAoY29udHJvbCA9PiBjb250cm9sLnZhbHVlKVxyXG4gICAgICAgIC5yZWR1Y2UoKHByZXYsIG5leHQpID0+IG5leHQgPyBwcmV2ICsgbmV4dCA6IHByZXYsIDApO1xyXG5cclxuICAgICAgcmV0dXJuIHRvdGFsU2VsZWN0ZWQgPj0gbWluID8gbnVsbCA6IHsgcmVxdWlyZWQ6IHRydWUgfTtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHZhbGlkYXRvcjtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbiwgRXZlbnRFbWl0dGVyLCBBZnRlclZpZXdJbml0LCBUZW1wbGF0ZVJlZiwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVDb21wb25lbnQgfSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFuZ3VsYXJEYXRhQ29udGV4dCB9IGZyb20gJ0B0aGVtb3N0L2FuZ3VsYXInO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVXNlclN0b3JhZ2VTZXJ2aWNlLCBNb2RhbFNlcnZpY2UsIERJQUxPR19CVVRUT05TIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UsIEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7QWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyfSBmcm9tICcuL2FkdmFuY2VkLWZpbHRlci12YWx1ZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVTZWFyY2hCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS1zZWFyY2gtYmFzZSc7XG5pbXBvcnQge1RlbXBsYXRlUGlwZX0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUZXh0VXRpbHMgfSBmcm9tICdAdGhlbW9zdC9jbGllbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFkdmFuY2VkU2VhcmNoVmlld1N0YXR1cyB7XG4gIGFkdmFuY2VkVmlldzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZHZhbmNlZFNlYXJjaExpc3Qge1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2FwcC1hZHZhbmNlZC10YWJsZS1zZWFyY2gnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWR2YW5jZWQtdGFibGUtc2VhcmNoLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5cbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFRhYmxlU2VhcmNoQ29tcG9uZW50IGV4dGVuZHMgQWR2YW5jZWRUYWJsZVNlYXJjaEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSAge1xuXG4gIHByaXZhdGUgcXVlcnlQYXJhbVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBjb25maWdDaGFuZ2VzU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBASW5wdXQoKSBwdWJsaWMgdGFibGU/OiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50O1xuICBASW5wdXQoKSBwdWJsaWMgY29sbGFwc2VkID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIGFsbG93U2F2ZSA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBzaG93TW9yZSA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBtZXJnZVF1ZXJ5UGFyYW1zID0gZmFsc2U7XG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaFRleHQnKSBwdWJsaWMgc2VhcmNoVGV4dDogYW55O1xuICBAT3V0cHV0KCd2aWV3Q2hhbmdlJykgcHVibGljIHZpZXdDaGFuZ2U6IEV2ZW50RW1pdHRlcjxBZHZhbmNlZFNlYXJjaFZpZXdTdGF0dXM+ID0gbmV3IEV2ZW50RW1pdHRlcjxBZHZhbmNlZFNlYXJjaFZpZXdTdGF0dXM+KCk7XG4gIEBPdXRwdXQoJ2xpc3RDaGFuZ2UnKSBwdWJsaWMgbGlzdENoYW5nZTogRXZlbnRFbWl0dGVyPEFkdmFuY2VkU2VhcmNoTGlzdD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFkdmFuY2VkU2VhcmNoTGlzdD4oKTtcbiAgcHVibGljIHNldCB0ZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5zZWFyY2hUZXh0KSB7XG4gICAgICB0aGlzLnNlYXJjaFRleHQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiAodGhpcy5zZWFyY2hUZXh0ICYmIHRoaXMuc2VhcmNoVGV4dC5uYXRpdmVFbGVtZW50ICYmIHRoaXMuc2VhcmNoVGV4dC5uYXRpdmVFbGVtZW50LnZhbHVlKSBhcyBzdHJpbmc7XG4gIH1cblxuICBwdWJsaWMgbW9kYWxSZWY/OiBCc01vZGFsUmVmO1xuICBwdWJsaWMgc3RvcmFnZUtleTogYW55O1xuICBwdWJsaWMgc3RvcmFnZVZhbHVlOiBhbnk7XG4gIHB1YmxpYyB1c2VyU2VhcmNoTGlzdDogYW55ID0gW107XG4gIHB1YmxpYyBzZWxlY3RlZExpc3Q6IGFueSA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoIHByb3RlY3RlZCBfY29udGV4dDogQW5ndWxhckRhdGFDb250ZXh0LFxuICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgICAgICBwcm90ZWN0ZWQgZGF0ZVBpcGU6IERhdGVQaXBlLFxuICAgICAgICAgICAgICAgcHJpdmF0ZSBfbW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSxcbiAgICAgICAgICAgICAgIHByaXZhdGUgX3VzZXJTdG9yYWdlOiBVc2VyU3RvcmFnZVNlcnZpY2UsXG4gICAgICAgICAgICAgICBwcml2YXRlIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICBwcml2YXRlIF9hZHZhbmNlZFNlYXJjaFZhbHVlUHJvdmlkZXI6IEFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcixcbiAgICAgICAgICAgICAgIHByaXZhdGUgX3RlbXBsYXRlOiBUZW1wbGF0ZVBpcGUsXG4gICAgICAgICAgICAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgICAgICAgIHByaXZhdGUgX21vZGFsOiBNb2RhbFNlcnZpY2UpIHsgc3VwZXIoKTsgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50YWJsZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY29uZmlnQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IHRoaXMudGFibGUuY29uZmlnQ2hhbmdlcy5zdWJzY3JpYmUoKGNvbmZpZykgPT4ge1xuICAgICAgICBpZiAoY29uZmlnID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gbG9hZCB1c2VyIHNlYXJjaGVzXG4gICAgICAgIHRoaXMubG9hZFVzZXJTZWFyY2hMaXN0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgLy8gaWYgc2VhcmNoIGNvbXBvbmVudCBtZXJnZXMgcXVlcnkgcGFyYW1zXG4gICAgICAgICAgLy8gKHVzZXMgcXVlcnlQYXJhbXMgdG8gYXBwbHkgZmlsdGVyKVxuICAgICAgICAgIGlmICh0aGlzLm1lcmdlUXVlcnlQYXJhbXMpIHtcbiAgICAgICAgICAgIHRoaXMucXVlcnlQYXJhbVN1YnNjcmlwdGlvbiA9IHRoaXMuX2FjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocXVlcnlQYXJhbXMpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5hcHBseVF1ZXJ5UGFyYW1zKHF1ZXJ5UGFyYW1zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIHF1ZXJ5IGdpdmVuIGJ5IHRoZSBxdWVyeVBhcmFtcyBvZiB0aGUgYWN0aXZhdGVkIHJvdXRlXG4gICAqIEBwYXJhbSBxdWVyeVBhcmFtc1xuICAgKi9cbiAgcHJpdmF0ZSBhcHBseVF1ZXJ5UGFyYW1zKHF1ZXJ5UGFyYW1zOiBhbnkpIHtcbiAgICBpZiAodGhpcy50YWJsZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRhYmxlID0gdGhpcy50YWJsZTtcbiAgICB0aGlzLmZpbHRlciA9IHt9O1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocXVlcnlQYXJhbXMsICdxJykpIHtcbiAgICAgIC8vIHNldCBjb2xsYXBzZWRcbiAgICAgIHRoaXMuY29sbGFwc2VkID0gdHJ1ZTtcbiAgICAgIC8vIHNlYXJjaCB0ZXh0XG4gICAgICB0aGlzLnRleHQgPSBxdWVyeVBhcmFtcy5xO1xuICAgICAgcmV0dXJuIHRhYmxlLnNlYXJjaCh0aGlzLnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRleHQgPSAnJztcbiAgICB9XG5cbiAgICBsZXQgZmlsdGVyUGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSwgcXVlcnlQYXJhbXMpO1xuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChxdWVyeVBhcmFtcywgJ3MnKSkge1xuICAgICAgLy8gc2V0IGNvbGxhcHNlZFxuICAgICAgdGhpcy5jb2xsYXBzZWQgPSBmYWxzZTtcbiAgICAgIC8vIGZpbmQgdXNlciBzZWFyY2ggYnkgbmFtZVxuICAgICAgaWYgKHRoaXMudXNlclNlYXJjaExpc3QpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExpc3QgPSB0aGlzLnVzZXJTZWFyY2hMaXN0LmZpbmQoKGl0ZW0pID0+IHtcbiAgICAgICAgICByZXR1cm4gaXRlbS5uYW1lID09PSBxdWVyeVBhcmFtcy5zO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRMaXN0KSB7XG4gICAgICAgICAgZmlsdGVyUGFyYW1zID0gdGhpcy5zZWxlY3RlZExpc3QuZmlsdGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhmaWx0ZXJQYXJhbXMpLmZpbHRlcigoa2V5KSA9PiB7XG4gICAgICAvLyBzZWFyY2ggY3JpdGVyaWFcbiAgICAgIGlmICh0YWJsZS5jb25maWcgJiYgdGFibGUuY29uZmlnLmNyaXRlcmlhKSB7XG4gICAgICAgIHJldHVybiB0YWJsZS5jb25maWcuY3JpdGVyaWEuZmluZCgoaXRlbSkgPT4ge1xuICAgICAgICAgIHJldHVybiBpdGVtLm5hbWUgPT09IGtleTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSBmaWx0ZXJQYXJhbXNba2V5XTtcbiAgICAgIGlmIChUZXh0VXRpbHMuaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdChmaWx0ZXJQYXJhbXNba2V5XSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5maWx0ZXJba2V5XSAhPT0gdmFsdWUpIHtcbiAgICAgICAgLy8gc2V0IHZhbHVlXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLmZpbHRlciwga2V5LCB7XG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZmlsdGVyW2tleV0gIT0gbnVsbCkge1xuICAgICAgICB0aGlzLmNvbGxhcHNlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gY2FsbCBmaWx0ZXJDaGFuZ2UgZXZlbnQgdG8gYXBwbHkgY2hhbmdlIHRvIGFkdmFuY2VkIHNlYXJjaCBjaGlsZHJlblxuICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXIpO1xuICAgIC8vIGFwcGx5IHF1ZXJ5XG4gICAgdGhpcy5nZXRRdWVyeSgpLnRoZW4oKHF1ZXJ5KSA9PiB7XG4gICAgICAvLyBpZiB0YWJsZSBxdWVyeSBpcyBudWxsXG4gICAgICBpZiAodGFibGUucXVlcnkgPT0gbnVsbCkge1xuICAgICAgICAvLyBzZXQgcXVlcnlcbiAgICAgICAgdGFibGUucXVlcnkgPSBxdWVyeTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChxdWVyeSAhPSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgcGFyYW1zID0gcXVlcnkuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgLy8gb3RoZXJ3aXNlIHNldCBmaWx0ZXIgcGFyYW1zXG4gICAgICAgICAgdGFibGUucXVlcnkuc2V0UGFyYW0oJyRmaWx0ZXInLCBwYXJhbXMuJGZpbHRlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFibGUucXVlcnkuc2V0UGFyYW0oJyRmaWx0ZXInLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gYW5kIGZpbmFsbHkgZmV0Y2ggZGF0YVxuICAgICAgdGFibGUuZmV0Y2godHJ1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucXVlcnlQYXJhbVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5xdWVyeVBhcmFtU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbmZpZ0NoYW5nZXNTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuY29uZmlnQ2hhbmdlc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG5cbiAgfVxuXG4gIHB1YmxpYyBvblNlYXJjaEtleURvd24oZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLnRhYmxlICYmIGV2ZW50LmtleUNvZGUgPT09IDEzKSB7XG4gICAgICAvLyBnZXQgc2VhcmNoIHRleHRcbiAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSAoIGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICAgIC8vIG1lcmdlIHF1ZXJ5IHBhcmFtcyA/XG4gICAgICBpZiAodGhpcy5tZXJnZVF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0ge1xuICAgICAgICAgIHE6IHNlYXJjaFRleHQsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLnRhYmxlLmNvbmZpZyAmJiB0aGlzLnRhYmxlLmNvbmZpZy5jcml0ZXJpYSkge1xuICAgICAgICAgIHRoaXMudGFibGUuY29uZmlnLmNyaXRlcmlhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxdWVyeVBhcmFtcywgaXRlbS5uYW1lLCB7XG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRyeSB0byBhcHBseSBmaWx0ZXIgYnkgYXBwZW5kaW5nIHF1ZXJ5IHBhcmFtc1xuICAgICAgICByZXR1cm4gdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5fYWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHtcbiAgICAgICAgcTogc2VhcmNoVGV4dFxuICAgICAgfSk7XG4gICAgICAvLyBvdGhlcndpc2UgZG8gc2VhcmNoXG4gICAgICB0aGlzLnRhYmxlLnNlYXJjaChzZWFyY2hUZXh0KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdHJhbnNmb3JtRGF0ZShkYXRlKSB7XG4gICAgZGF0ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGUsICdNTS9kZC95eXl5Jyk7IC8vIHdoYXRldmVyIGZvcm1hdCB5b3UgbmVlZC5cbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBjb252ZXJ0VG9TdHJpbmcobmFtZUZpbHRlcikge1xuICAgIGxldCBuYW1lID0gJyc7XG4gICAgaWYgKG5hbWVGaWx0ZXIgIT0gbnVsbCkge1xuICAgICAgbmFtZSA9IG5hbWVGaWx0ZXIudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cblxuLy8gIExvYWQgc2F2ZWQgY3JpdGVyaWEgc2VhcmNoZXMgdXNlciBoYXMgc3RvcmVkIGJlZm9yZVxuICBwcml2YXRlIGxvYWRVc2VyU2VhcmNoTGlzdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy50YWJsZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIHRoaXMuc3RvcmFnZUtleSA9ICd0YWJsZXMvJyArIHRoaXMudGFibGUuY29uZmlnLm1vZGVsICsgJy9zZWFyY2hlcyc7XG4gICAgcmV0dXJuIHRoaXMuX3VzZXJTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlS2V5KS50aGVuKChkYXRhKSA9PiB7XG4gICAgICBjb25zdCBsaXN0ID0gZGF0YS52YWx1ZSB8fCBbXTtcbiAgICAgIC8vIGlmIHRhYmxlIGNvbmZpZ3VyYXRpb24gaGFzIHByZS1kZWZpbmVkIHNlYXJjaGVzXG4gICAgICBpZiAodGhpcy50YWJsZSAmJiB0aGlzLnRhYmxlLmNvbmZpZy5zZWFyY2hlcyAmJiB0aGlzLnRhYmxlLmNvbmZpZy5zZWFyY2hlcy5sZW5ndGgpIHtcbiAgICAgICAgLy8gYWRkIHByZS1kZWZpbmVkIGxpc3RzXG4gICAgICAgIGxpc3QucHVzaC5hcHBseShsaXN0LCB0aGlzLnRhYmxlLmNvbmZpZy5zZWFyY2hlcy5tYXAgKCAoeCkgPT4ge1xuICAgICAgICAgIHgucmVhZE9ubHkgPSB0cnVlOyAvLyBhcyByZWFkb25seVxuICAgICAgICAgIHgubmFtZSA9IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KHgubmFtZSk7XG4gICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICAgIC8vIHNldCB1c2VyIHNlYXJjaCBsaXN0XG4gICAgICB0aGlzLnVzZXJTZWFyY2hMaXN0ID0gbGlzdDtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAvLyBETyBOT1QgVEhST1cgRVJST1JcbiAgICAgIC8vIHRvZG86IG5vdGlmeSBjb21wb25lbnQgZm9yIHRoaXMgZXJyb3IgaW4gb3JkZXIgdG8gZGlzYWJsZSBzb21lIGFjdGlvbnNcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIGdldHRpbmcgdXNlciBzZWFyY2ggbGlzdCcpO1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uU2VsZWN0VXNlclNlYXJjaChldmVudDogYW55KTogYW55IHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZExpc3QgJiYgdGhpcy50YWJsZSkge1xuICAgICAgY29uc3QgbGlzdEZvdW5kID0gdGhpcy5zZWFyY2hJbkxpc3RCeU5hbWUodGhpcy5zZWxlY3RlZExpc3QubmFtZSk7XG4gICAgICBpZiAobGlzdEZvdW5kKSB7XG4gICAgICAgIGlmICh0aGlzLm1lcmdlUXVlcnlQYXJhbXMpIHtcbiAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHsgcTogbnVsbCwgczogdGhpcy5zZWxlY3RlZExpc3QubmFtZSB9O1xuICAgICAgICAgIC8vIGNsZWFyIGNyaXRlcmlhIGlmIGFueVxuICAgICAgICAgIHRoaXMudGFibGUuY29uZmlnLmNyaXRlcmlhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocXVlcnlQYXJhbXMsIGl0ZW0ubmFtZSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIC8vIHNldCBudWxsIHZhbHVlXG4gICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxdWVyeVBhcmFtcywgaXRlbS5uYW1lLCB7XG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMuX2FjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gbGlzdEZvdW5kO1xuICAgICAgICB0aGlzLmZpbHRlciA9IHRoaXMuc2VsZWN0ZWRMaXN0LmZpbHRlcjtcbiAgICAgICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh0aGlzLmZpbHRlcik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgIHJlbGF0aXZlVG86IHRoaXMuX2FjdGl2YXRlZFJvdXRlLFxuICAgICAgICBxdWVyeVBhcmFtczogeyBzOiBudWxsIH0sXG4gICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHNlYXJjaEluTGlzdEJ5TmFtZShuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICggQXJyYXkuaXNBcnJheSh0aGlzLnVzZXJTZWFyY2hMaXN0KSApIHtcbiAgICAgIGNvbnN0IGxpc3RGb3VuZCA9IHRoaXMudXNlclNlYXJjaExpc3QuZmluZCggKHgpID0+IHgubmFtZSA9PT0gbmFtZSk7XG4gICAgICBpZiAoIGxpc3RGb3VuZCApIHtcbiAgICAgICAgcmV0dXJuIGxpc3RGb3VuZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuLy8gIFVwZGF0ZSBsaXN0IGl0ZW0gY29udGVudHMgd2l0aCBnaXZlbiBjb250ZW50IChTZWFyY2ggYnkgb2JqZWN0IG5hbWUgcHJvcGVydHkpXG4gIHB1YmxpYyB1cGRhdGVTYXZlZFNlYXJjaExpc3RJdGVtQnlOYW1lKCBuYW1lOiBzdHJpbmcsIG5ld0l0ZW06IGFueSApIHtcbiAgICBjb25zdCBpdGVtSW5MaXN0ID0gdGhpcy51c2VyU2VhcmNoTGlzdC5maW5kKCAoeCkgPT4geC5uYW1lID09PSBuYW1lICk7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnVzZXJTZWFyY2hMaXN0LmluZGV4T2YoaXRlbUluTGlzdCk7XG4gICAgdGhpcy51c2VyU2VhcmNoTGlzdFtpbmRleF0gPSBuZXdJdGVtO1xuICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gdGhpcy51c2VyU2VhcmNoTGlzdFtpbmRleF07XG4gIH1cblxuLy8gIFVwZGF0ZSBsaXN0IGl0ZW0gY29udGVudHMgd2l0aCBnaXZlbiBjb250ZW50IChTZWFyY2ggYnkgb2JqZWN0KVxuICBwdWJsaWMgdXBkYXRlU2F2ZWRTZWFyY2hMaXN0SXRlbUJ5T2JqZWN0KCBpdGVtSW5MaXN0OiBhbnksIG5ld0l0ZW06IGFueSApIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMudXNlclNlYXJjaExpc3QuaW5kZXhPZihpdGVtSW5MaXN0KTtcbiAgICB0aGlzLnVzZXJTZWFyY2hMaXN0W2luZGV4XSA9IG5ld0l0ZW07XG4gICAgdGhpcy5zZWxlY3RlZExpc3QgPSB0aGlzLnVzZXJTZWFyY2hMaXN0W2luZGV4XTtcbiAgfVxuXG4vLyAgRGVsZXRlIGxpc3QgaXRlbSBmcm9tIGxpc3RcbiAgcHVibGljIGRlbGV0ZUl0ZW1Gcm9tU2F2ZWRTZWFyY2hMaXN0QnlPYmplY3QoIGl0ZW1Jbkxpc3Q6IGFueSkge1xuICAgIHRoaXMudXNlclNlYXJjaExpc3QgPSB0aGlzLnVzZXJTZWFyY2hMaXN0LmZpbHRlcigoaXRlbSkgPT4gaXRlbSAhPT0gaXRlbUluTGlzdCk7XG4gICAgdGhpcy5zZWxlY3RlZExpc3QgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyID0ge307XG4gICAgdGhpcy5hZHZhbmNlZFNlYXJjaCh0cnVlKTtcbiAgICB0aGlzLnVwbG9hZExpc3RPblVzZXJTdG9yYWdlKCk7XG4gIH1cblxuLy8gIFVzZXIgY2hvc2UgdG8gc2F2ZSBpdHMgYWR2YW5jZWQgZm9ybSBzZWFyY2ggY3JpdGVyaWFcbiAgcHVibGljIHNhdmVTZWFyY2goIHRlbXBsYXRlVG9Mb2FkOiBUZW1wbGF0ZVJlZjxhbnk+LCBuZXdMaXN0OiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGlmICh0aGlzLnRhYmxlICYmIHRoaXMudGFibGUuY29uZmlnLm1vZGVsKSB7XG4vLyAgICAgIFNldCB0aGUgY29ycmVzcG9uZGluZyBrZXkgdG8gaXRzIGxpc3QgYW5kIHNob3cgYSBjb25maXJtYXRpb24gbW9kYWwgd2luZG93XG4gICAgICB0aGlzLnN0b3JhZ2VLZXkgPSBgdGFibGVzLyR7dGhpcy50YWJsZS5jb25maWcubW9kZWx9L3NlYXJjaGVzYDtcbiAgICAgIGlmICh0aGlzLmZpbHRlciAmJiBPYmplY3Qua2V5cyh0aGlzLmZpbHRlcikubGVuZ3RoKSB7XG4vLyAgICAgIFVzZXIgd2FudHMgdG8gc2F2ZSBhbiBleGlzdGluZyBsaXN0IGZyb20gdGhlIGRyb3Bkb3duXG4gICAgICAgIGlmICggIW5ld0xpc3QgJiYgdGhpcy5zZWxlY3RlZExpc3QgKSB7XG4gICAgICAgICAgY29uc3QgbmV3SXRlbSA9IHsgbmFtZSA6ICB0aGlzLnNlbGVjdGVkTGlzdC5uYW1lLCBmaWx0ZXIgOiB7IC4uLiB0aGlzLmZpbHRlciB9IH07XG4gICAgICAgICAgdGhpcy51cGRhdGVTYXZlZFNlYXJjaExpc3RJdGVtQnlPYmplY3QgKCB0aGlzLnNlbGVjdGVkTGlzdCwgbmV3SXRlbSApO1xuICAgICAgICAgIHRoaXMudXBsb2FkTGlzdE9uVXNlclN0b3JhZ2UoKTtcbi8vICAgICAgVXNlciB3YW50cyB0byBzYXZlIGEgbmV3IGxpc3RcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm1vZGFsUmVmID0gdGhpcy5fbW9kYWxTZXJ2aWNlLnNob3codGVtcGxhdGVUb0xvYWQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuLy8gICAgICAgIFVzZXIgZGlkIG5vdCBkZWZpbmUgYW55IGNyaXRlcmlhXG4gICAgICAgIHRoaXMuX21vZGFsLnNob3dXYXJuaW5nRGlhbG9nKFxuICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdBZHZhbmNlZFNlYXJjaC5Nb2RhbC5UaXRsZScpLFxuICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdBZHZhbmNlZFNlYXJjaC5Nb2RhbC5FbXB0eUNyaXRlcmlhTGlzdCcpLFxuICAgICAgICAgIERJQUxPR19CVVRUT05TLk9rKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbW9kYWwuc2hvd1dhcm5pbmdEaWFsb2coXG4gICAgICAgICAgdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ0FkdmFuY2VkU2VhcmNoLk1vZGFsLlRpdGxlJyksXG4gICAgICAgICAgdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ0FkdmFuY2VkU2VhcmNoLk1vZGFsLk5vTGlzdERlZmluZWQnKSxcbiAgICAgICAgICBESUFMT0dfQlVUVE9OUy5Payk7XG4gICAgfVxuICB9XG5cbi8vICBVc2VyIEFjY2VwdGVkID0+IFNhdmUgbGlzdCBhbmQgQ2xvc2UgbW9kYWxcbiAgcHVibGljIGNvbmZpcm1Nb2RhbCggc2F2ZUZvcm1OYW1lICk6IHZvaWQge1xuLy8gICAgbmFtZSBnaXZlbiBhbmQgbGlzdCBuYW1lIGlzIHVuaXF1ZVxuICAgIGlmICggc2F2ZUZvcm1OYW1lICYmICEodGhpcy5zZWFyY2hJbkxpc3RCeU5hbWUoc2F2ZUZvcm1OYW1lKSkgKSB7XG4gICAgICBjb25zdCBuZXdJbnNlcnRlZFZhbHVlID0geyBuYW1lIDogIHNhdmVGb3JtTmFtZSwgZmlsdGVyIDogeyAuLi4gdGhpcy5maWx0ZXIgfSB9O1xuICAgICAgaWYgKCB0aGlzLnVzZXJTZWFyY2hMaXN0ICYmIHRoaXMudXNlclNlYXJjaExpc3QubGVuZ3RoICE9PSAwICkge1xuICAgICAgICB0aGlzLnVzZXJTZWFyY2hMaXN0LnB1c2gobmV3SW5zZXJ0ZWRWYWx1ZSk7XG4gICAgICAgIHRoaXMuc3RvcmFnZVZhbHVlID0gdGhpcy51c2VyU2VhcmNoTGlzdDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExpc3QgPSBuZXdJbnNlcnRlZFZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdG9yYWdlVmFsdWUgPSBbbmV3SW5zZXJ0ZWRWYWx1ZV07XG4gICAgICAgIHRoaXMudXNlclNlYXJjaExpc3QgPSB0aGlzLnN0b3JhZ2VWYWx1ZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExpc3QgPSBuZXdJbnNlcnRlZFZhbHVlO1xuICAgICAgfVxuICAgICAgdGhpcy51cGxvYWRMaXN0T25Vc2VyU3RvcmFnZSgpO1xuICAgICAgaWYgKHRoaXMubW9kYWxSZWYpIHtcbiAgICAgICAgdGhpcy5tb2RhbFJlZi5oaWRlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICggc2F2ZUZvcm1OYW1lICYmICh0aGlzLnNlYXJjaEluTGlzdEJ5TmFtZShzYXZlRm9ybU5hbWUpKSApIHtcbi8vICAgICAgVXNlciBzaG91bGQgaW5zZXJ0IGEgZGlmZmVyZW50IG5hbWUgY2F1c2UgdGhpcyBvbmUgaXMgYWxyZWFkeSBpbiB1c2VcbiAgICAgIGFsZXJ0KHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdBZHZhbmNlZFNlYXJjaC5Nb2RhbC5UaXRsZU9uTGlzdEFscmVhZHlDcmVhdGVkJykpO1xuICAgIH0gZWxzZSB7XG4vLyAgICAgIFVzZXIgZGlkIG5vdCBpbnNlcnQgYW55IHRleHRcbiAgICAgIGFsZXJ0KHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdBZHZhbmNlZFNlYXJjaC5Nb2RhbC5UaXRsZU9uVXNlckVycm9yJykpO1xuICAgIH1cbiAgfVxuXG4vLyAgVXNlciBkZWNsaW5lZCA9PiBDbG9zZSBtb2RhbFxuICBwdWJsaWMgY2xvc2VNb2RhbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tb2RhbFJlZikge1xuICAgICAgdGhpcy5tb2RhbFJlZi5oaWRlKCk7XG4gICAgfVxuICB9XG5cbi8vICBVcGxvYWQgdXNlcidzIGNyaXRlcmlhIG9uIFVzZXIgU3RvcmFnZVxuICBwdWJsaWMgdXBsb2FkTGlzdE9uVXNlclN0b3JhZ2UoKSB7XG4gICAgdGhpcy5fdXNlclN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXksIHRoaXMudXNlclNlYXJjaExpc3QuZmlsdGVyKCh4KSA9PiB7XG4gICAgICByZXR1cm4gIXgucmVhZE9ubHk7XG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGlzIGdvaW5nIHRvIGJlIGRlcHJlY2F0ZWQuIFVzZSBzZWFyY2goKSBtZXRob2QgaW5zdGVhZC5cbiAgICogQHBhcmFtIGV2ZW50XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYXN5bmNBZHZhbmNlZFNlYXJjaChldmVudD86IGFueSkge1xuICAgIGlmICggdGhpcy50YWJsZSAmJiB0aGlzLnRhYmxlLmNvbmZpZyAmJiBBcnJheS5pc0FycmF5KHRoaXMudGFibGUuY29uZmlnLmNyaXRlcmlhKSkge1xuICAgICAgY29uc3QgcXVlcnkgPSBhd2FpdCB0aGlzLmdldFF1ZXJ5KCk7XG4gICAgICBpZiAodGhpcy5tZXJnZVF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gbnVsbDtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBPYmplY3QuYXNzaWduKHsgcTogbnVsbCwgczogbnVsbCB9LCB0aGlzLmZpbHRlcik7XG4gICAgICAgIC8vIGVudW1lcmF0ZSBjcml0ZXJpYVxuICAgICAgICB0aGlzLnRhYmxlLmNvbmZpZy5jcml0ZXJpYS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChxdWVyeVBhcmFtcywgaXRlbS5uYW1lKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIC8vIHNldCBudWxsIHZhbHVlXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocXVlcnlQYXJhbXMsIGl0ZW0ubmFtZSwge1xuICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRhYmxlLnF1ZXJ5KSB7XG4gICAgICAgIHRoaXMudGFibGUucXVlcnkuc2V0UGFyYW0oJyRmaWx0ZXInLCBxdWVyeS5nZXRQYXJhbXMoKVsnJGZpbHRlciddKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGFibGUucXVlcnkgPSBxdWVyeTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXIpO1xuICAgICAgdGhpcy50YWJsZS5mZXRjaCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZWFyY2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuYXN5bmNBZHZhbmNlZFNlYXJjaCgpLnRoZW4oKCkgPT4ge1xuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFF1ZXJ5KCkge1xuICAgIC8vIG9uIHNpbXBsZSBzZWFyY2ggcmV0dXJuIG51bGxcbiAgICBpZiAodGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoIHRoaXMudGFibGUgJiYgdGhpcy50YWJsZS5jb25maWcgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnRhYmxlLmNvbmZpZy5jcml0ZXJpYSkpIHtcbiAgICAgIGNvbnN0IGV4cHJlc3Npb25zOiBhbnlbXSA9IFtdO1xuICAgICAgY29uc3QgdmFsdWVzID0gYXdhaXQgdGhpcy5fYWR2YW5jZWRTZWFyY2hWYWx1ZVByb3ZpZGVyLmdldFZhbHVlcygpO1xuICAgICAgdGhpcy50YWJsZS5jb25maWcuY3JpdGVyaWEuZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuZmlsdGVyLCB4Lm5hbWUpKSB7XG4gICAgICAgICAgY29uc3QgbmFtZUZpbHRlciA9IHRoaXMuY29udmVydFRvU3RyaW5nKHRoaXMuZmlsdGVyW3gubmFtZV0pO1xuICAgICAgICAgIGlmIChuYW1lRmlsdGVyLmluY2x1ZGVzKCdHTVQnKSkge1xuICAgICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IHRoaXMudHJhbnNmb3JtRGF0ZSh0aGlzLmZpbHRlclt4Lm5hbWVdKTtcbiAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2godGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKHguZmlsdGVyLCB7XG4gICAgICAgICAgICAgIHZhbHVlOiBuZXdEYXRlLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5maWx0ZXJbeC5uYW1lXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2godGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKHguZmlsdGVyLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyW3gubmFtZV0sXG4gICAgICAgICAgICB9LCB2YWx1ZXMpKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxldCBxdWVyeTtcbiAgICAgIGlmIChleHByZXNzaW9ucyAmJiBleHByZXNzaW9ucy5sZW5ndGgpIHtcbiAgICAgICAgLy8gY3JlYXRlIGNsaWVudCBxdWVyeVxuICAgICAgICBxdWVyeSA9IHRoaXMuX2NvbnRleHQubW9kZWwodGhpcy50YWJsZS5jb25maWcubW9kZWwpLmFzUXVlcnlhYmxlKCk7XG4gICAgICAgIHF1ZXJ5LnNldFBhcmFtKCdmaWx0ZXInLCBleHByZXNzaW9ucy5qb2luKCcgYW5kICcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXJ5ID0gdGhpcy5fY29udGV4dC5tb2RlbCh0aGlzLnRhYmxlLmNvbmZpZy5tb2RlbCkuYXNRdWVyeWFibGUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBxdWVyeTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWR2YW5jZWRTZWFyY2goZXZlbnQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmFzeW5jQWR2YW5jZWRTZWFyY2goZXZlbnQpO1xuICB9XG5cbiAgcHVibGljIGNsZWFyKCkge1xuICAgIGlmICh0aGlzLm1lcmdlUXVlcnlQYXJhbXMgJiYgdGhpcy50YWJsZSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IG51bGw7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0geyBxOiBudWxsLCBzOiBudWxsIH07XG4gICAgICAgIC8vIGVudW1lcmF0ZSBjcml0ZXJpYVxuICAgICAgICB0aGlzLnRhYmxlLmNvbmZpZy5jcml0ZXJpYS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChxdWVyeVBhcmFtcywgaXRlbS5uYW1lKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIC8vIHNldCBudWxsIHZhbHVlXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocXVlcnlQYXJhbXMsIGl0ZW0ubmFtZSwge1xuICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAvLyBjbGVhciBmaWx0ZXJcbiAgICAgIHRoaXMuZmlsdGVyID0ge307XG4gICAgICAvLyBjbGVhciBsaXN0XG4gICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IG51bGw7XG4gICAgICAvLyByYWlzZSBmaWx0ZXIgY2hhbmdlIGV2ZW50XG4gICAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHRoaXMuZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdmlldyBzdGF0ZSBvZiBzZWFyY2ggY29udHJvbFxuICAgKi9cbiAgcHVibGljIGdldCB2aWV3U3RhdGUoKTogQWR2YW5jZWRTZWFyY2hWaWV3U3RhdHVzIHtcbiAgICByZXR1cm4ge1xuICAgICAgYWR2YW5jZWRWaWV3OiAhdGhpcy5jb2xsYXBzZWQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTd2l0Y2hlcyB2aWV3IGJldHdlZW4gc2ltcGxlIGFuZCBhZHZhbmNlZCBzZWFyY2hcbiAgICovXG4gIHB1YmxpYyBhc3luYyB0b2dnbGVWaWV3KCkge1xuICAgIHRoaXMuY29sbGFwc2VkID0gIXRoaXMuY29sbGFwc2VkO1xuICAgIC8vIGVtaXQgZXZlbnQgZm9yIHZpZXcgc3RhdHVzIGNoYW5nZVxuICAgIHRoaXMudmlld0NoYW5nZS5lbWl0KHRoaXMudmlld1N0YXRlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgQWN0aW9uTGlua0Zvcm1hdHRlciwgQnV0dG9uRm9ybWF0dGVyLCBEYXRlVGltZUZvcm1hdHRlciwgTGFuZ3VhZ2VGb3JtYXR0ZXIsXG4gIExpbmtGb3JtYXR0ZXIsXG4gIE5lc3RlZFByb3BlcnR5Rm9ybWF0dGVyLCBOZ0NsYXNzRm9ybWF0dGVyLCBTZWxlY3RSb3dGb3JtYXR0ZXIsXG4gIFRlbXBsYXRlRm9ybWF0dGVyLCBUcmFuc2xhdGlvbkZvcm1hdHRlcixcbiAgVHJ1ZUZhbHNlRm9ybWF0dGVyLCBBY3Rpb25CdXR0b25Gb3JtYXR0ZXIsIEFjdGlvblNwbGl0QnV0dG9uRm9ybWF0dGVyLFxufSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmZvcm1hdHRlcnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElBZHZhbmNlZFRhYmxlRm9ybWF0dGVycyB7XG4gIEFjdGlvbkxpbmtGb3JtYXR0ZXI/OiBBY3Rpb25MaW5rRm9ybWF0dGVyO1xuICBCdXR0b25Gb3JtYXR0ZXI/OiBCdXR0b25Gb3JtYXR0ZXI7XG4gIERhdGVUaW1lRm9ybWF0dGVyPzogRGF0ZVRpbWVGb3JtYXR0ZXI7XG4gIExhbmd1YWdlRm9ybWF0dGVyPzogTGFuZ3VhZ2VGb3JtYXR0ZXI7XG4gIExpbmtGb3JtYXR0ZXI/OiBMaW5rRm9ybWF0dGVyO1xuICBOZXN0ZWRQcm9wZXJ0eUZvcm1hdHRlcj86IE5lc3RlZFByb3BlcnR5Rm9ybWF0dGVyO1xuICBOZ0NsYXNzRm9ybWF0dGVyPzogTmdDbGFzc0Zvcm1hdHRlcjtcbiAgU2VsZWN0Um93Rm9ybWF0dGVyPzogU2VsZWN0Um93Rm9ybWF0dGVyO1xuICBUZW1wbGF0ZUZvcm1hdHRlcj86IFRlbXBsYXRlRm9ybWF0dGVyO1xuICBUcmFuc2xhdGlvbkZvcm1hdHRlcj86IFRyYW5zbGF0aW9uRm9ybWF0dGVyO1xuICBUcnVlRmFsc2VGb3JtYXR0ZXI/OiBUcnVlRmFsc2VGb3JtYXR0ZXI7XG4gIEFjdGlvbkJ1dHRvbkZvcm1hdHRlcj86IEFjdGlvbkJ1dHRvbkZvcm1hdHRlcjtcbiAgQWN0aW9uU3BsaXRCdXR0b25Gb3JtYXR0ZXI/OiBBY3Rpb25TcGxpdEJ1dHRvbkZvcm1hdHRlcjtcbn1cbmV4cG9ydCBjb25zdCBGT1JNQVRURVJTOiBJQWR2YW5jZWRUYWJsZUZvcm1hdHRlcnMgPSB7XG4gICAgICBBY3Rpb25MaW5rRm9ybWF0dGVyOiBuZXcgQWN0aW9uTGlua0Zvcm1hdHRlcigpLFxuICAgICAgQnV0dG9uRm9ybWF0dGVyOiBuZXcgQnV0dG9uRm9ybWF0dGVyKCksXG4gICAgICBEYXRlVGltZUZvcm1hdHRlcjogbmV3IERhdGVUaW1lRm9ybWF0dGVyKCksXG4gICAgICBMYW5ndWFnZUZvcm1hdHRlcjogbmV3IExhbmd1YWdlRm9ybWF0dGVyKCksXG4gICAgICBMaW5rRm9ybWF0dGVyOiBuZXcgTGlua0Zvcm1hdHRlcigpLFxuICAgICAgTmVzdGVkUHJvcGVydHlGb3JtYXR0ZXI6IG5ldyBOZXN0ZWRQcm9wZXJ0eUZvcm1hdHRlcigpLFxuICAgICAgTmdDbGFzc0Zvcm1hdHRlcjogbmV3IE5nQ2xhc3NGb3JtYXR0ZXIoKSxcbiAgICAgIFNlbGVjdFJvd0Zvcm1hdHRlcjogbmV3IFNlbGVjdFJvd0Zvcm1hdHRlcigpLFxuICAgICAgVGVtcGxhdGVGb3JtYXR0ZXI6IG5ldyBUZW1wbGF0ZUZvcm1hdHRlcigpLFxuICAgICAgVHJhbnNsYXRpb25Gb3JtYXR0ZXI6IG5ldyBUcmFuc2xhdGlvbkZvcm1hdHRlcigpLFxuICAgICAgVHJ1ZUZhbHNlRm9ybWF0dGVyOiBuZXcgVHJ1ZUZhbHNlRm9ybWF0dGVyKCksXG4gICAgICBBY3Rpb25CdXR0b25Gb3JtYXR0ZXI6IG5ldyBBY3Rpb25CdXR0b25Gb3JtYXR0ZXIoKSxcbiAgICAgIEFjdGlvblNwbGl0QnV0dG9uRm9ybWF0dGVyOiBuZXcgQWN0aW9uU3BsaXRCdXR0b25Gb3JtYXR0ZXIoKSxcbn07XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50LCBBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdCB9IGZyb20gJy4uL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICd0YWJsZS1zaW1wbGUtaGVhZGVyLXRvb2xzJyxcbiAgdGVtcGxhdGU6IGBcbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICBgLFxuICBzdHlsZXM6IFtdXG59KVxuZXhwb3J0IGNsYXNzIFNpbXBsZUhlYWRlclRvb2xzQ29tcG9uZW50IHtcbiAgLy9cbn1cblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtdGFibGUtc2ltcGxlLWhlYWRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1zaW1wbGUtaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbXVxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZVNpbXBsZUhlYWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMudGFibGUpIHtcbiAgICAgIGlmIChjaGFuZ2VzLnRhYmxlLmN1cnJlbnRWYWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGFMb2FkU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgdGhpcy5kYXRhTG9hZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcbiAgICAgIGlmIChjaGFuZ2VzLnRhYmxlLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLnRhYmxlLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgdGhpcy5kYXRhTG9hZFN1YnNjcmlwdGlvbiA9IGNoYW5nZXMudGFibGUuY3VycmVudFZhbHVlLmxvYWQuc3Vic2NyaWJlKChkYXRhOiBBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdCkgPT4ge1xuICAgICAgICAgIHRoaXMucmVjb3Jkc1RvdGFsID0gZGF0YS5yZWNvcmRzVG90YWw7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhTG9hZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5kYXRhTG9hZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpIHRhYmxlPzogQWR2YW5jZWRUYWJsZUNvbXBvbmVudDtcbiAgcHVibGljIHJlY29yZHNUb3RhbD86IG51bWJlcjtcbiAgcHVibGljIGRhdGFMb2FkU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vXG4gIH1cblxufVxuIiwiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLCBPdXRwdXQsIEV2ZW50RW1pdHRlcixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQnO1xuXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZU5vdE51bGxFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ0FkdmFuY2VkIHRhYmxlIGNvbXBvbmVudCBjYW5ub3QgYmUgZW1wdHkgYXQgdGhpcyBjb250ZXh0LicpO1xuICB9XG59XG5cbkBEaXJlY3RpdmUoXG4ge1xuICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBkaXJlY3RpdmUtc2VsZWN0b3JcbiAgIHNlbGVjdG9yOiAnW3RhYmxlRWRpdG9yXScsXG4gfSxcbilcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFRhYmxlRWRpdG9yRGlyZWN0aXZlIHtcblxuICBwdWJsaWMgZGlydHkgPSBmYWxzZTtcbiAgQE91dHB1dCgpIHB1YmxpYyBkaXJ0eUNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPihmYWxzZSk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0YWJsZTogQWR2YW5jZWRUYWJsZUNvbXBvbmVudCkge1xuICAgIC8vXG4gIH1cblxuICAvKipcbiAgICogQWRkIHJvd3MgdG8gdGFibGUgYW5kIG1hcmsgdGhlbSBhcyBhZGRlZCByb3dzXG4gICAqL1xuICBwdWJsaWMgYWRkKC4uLmFkZEl0ZW1zOiBhbnlbXSkge1xuICAgIGlmICh0aGlzLnRhYmxlID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBBZHZhbmNlZFRhYmxlTm90TnVsbEVycm9yKCk7XG4gICAgfVxuICAgIC8vIGRlY29yYXRlIGl0ZW1zXG4gICAgY29uc3Qga2V5ID0gdGhpcy50YWJsZS5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eSB8fCB0aGlzLnRhYmxlLmNvbmZpZy5jb2x1bW5zWzBdLm5hbWUgfHwgJyc7XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGFkZEl0ZW1zKSB7XG4gICAgICBsZXQgdHIgPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCc6aGFzKGlucHV0W2RhdGEtaWQ9XCInICsgZWxlbWVudFtrZXldICsgJ1wiXSknKS5ub2RlcygpLnRvJCgpO1xuICAgICAgaWYgKHRyLmhhc0NsYXNzKCdyZW1vdmVkJykpIHtcbiAgICAgICAgdHIudG9nZ2xlQ2xhc3MoJ3JlbW92ZWQgdGV4dC1ncmF5LTQwMCB0ZXh0LWRlY29yYXRpb24tbGluZS10aHJvdWdoJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzLmFkZChbZWxlbWVudF0pO1xuICAgICAgICB0ciA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJzpoYXMoaW5wdXRbZGF0YS1pZD1cIicgKyBlbGVtZW50W2tleV0gKyAnXCJdKScpLm5vZGVzKCkudG8kKCk7XG4gICAgICAgIHRyLnRvZ2dsZUNsYXNzKCdhZGRlZCBmb250LXdlaWdodC1ib2xkIHRleHQtc3VjY2VzcycpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnRhYmxlLmRhdGFUYWJsZS5kcmF3KCk7XG4gICAgLy8gZmluZCByZW1vdmVkXG4gICAgY29uc3QgcmVtb3ZlZExlbmd0aCA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJy5yZW1vdmVkJylbMF0ubGVuZ3RoO1xuICAgIC8vIGZpbmQgYWRkZWRcbiAgICBjb25zdCBhZGRlZExlbmd0aCA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJy5hZGRlZCcpWzBdLmxlbmd0aDtcbiAgICAvLyBhbmQgZW1pdCBldmVudFxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygpLmRhdGEoKTtcbiAgICB0aGlzLnRhYmxlLmxvYWQuZW1pdCh7XG4gICAgICBkYXRhOiBpdGVtcyxcbiAgICAgIHJlY29yZHNGaWx0ZXJlZDogaXRlbXMubGVuZ3RoIC0gcmVtb3ZlZExlbmd0aCxcbiAgICAgIHJlY29yZHNUb3RhbDogaXRlbXMubGVuZ3RoIC0gcmVtb3ZlZExlbmd0aCxcbiAgICB9KTtcbiAgICB0aGlzLmRpcnR5ID0gKHJlbW92ZWRMZW5ndGggPiAwIHx8IGFkZGVkTGVuZ3RoID4gMCk7XG4gICAgdGhpcy5kaXJ0eUNoYW5nZS5lbWl0KHRoaXMuZGlydHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcmtzIHJvd3MgYXMgcmVtb3ZlZCByb3dzXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlKC4uLnJlbW92ZUl0ZW1zOiBhbnlbXSkge1xuICAgIGlmICh0aGlzLnRhYmxlID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBBZHZhbmNlZFRhYmxlTm90TnVsbEVycm9yKCk7XG4gICAgfVxuICAgIC8vIGdldCBrZXlcbiAgICBjb25zdCBrZXkgPSB0aGlzLnRhYmxlLmNvbmZpZy5jb2x1bW5zWzBdLnByb3BlcnR5IHx8IHRoaXMudGFibGUuY29uZmlnLmNvbHVtbnNbMF0ubmFtZSB8fCAnJztcbiAgICAvLyBsb29wIGl0ZW1zXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHJlbW92ZUl0ZW1zKSB7XG4gICAgICAgIGNvbnN0IHRyID0gdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygnOmhhcyhpbnB1dFtkYXRhLWlkPVwiJyArIGVsZW1lbnRba2V5XSArICdcIl0pJykubm9kZXMoKS50byQoKTtcbiAgICAgICAgLy8gaWYgcm93IGlzIG1hcmtlZCBhcyBhZGRlZFxuICAgICAgICBpZiAodHIuaGFzQ2xhc3MoJ2FkZGVkJykpIHtcbiAgICAgICAgICAvLyByZW1vdmUgdGhpcyBkaXJ0eSByb3dcbiAgICAgICAgICB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKHRyKS5yZW1vdmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBvdGhlcndpc2UgdW5tYXJrZWQgcm93XG4gICAgICAgICAgdHIudG9nZ2xlQ2xhc3MoJ3JlbW92ZWQgdGV4dC1ncmF5LTQwMCB0ZXh0LWRlY29yYXRpb24tbGluZS10aHJvdWdoJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2hlY2sgaWYgaXRlbSBpcyBzZWxlY3RlZFxuICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gdGhpcy50YWJsZS5zZWxlY3RlZC5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICByZXR1cm4gaXRlbVtrZXldID09PSBlbGVtZW50W2tleV07XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBhbmQgcmVtb3ZlIGl0IGZyb20gc2VsZWN0ZWQgY29sbGVjdGlvblxuICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCA+PSAwKSB7XG4gICAgICAgICAgdGhpcy50YWJsZS5zZWxlY3RlZC5zcGxpY2Uoc2VsZWN0ZWRJbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIHJlLWRyYXcgdGFibGVcbiAgICB0aGlzLnRhYmxlLmRhdGFUYWJsZS5kcmF3KCk7XG4gICAgICAvLyBnZXQgbnVtYmVyIG9mIHRhYmxlIGl0ZW1zXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCkuZGF0YSgpO1xuICAgICAgLy8gZ2V0IG51bWJlciBvZiByZW1vdmVkIGl0ZW1zXG4gICAgY29uc3QgcmVtb3ZlZExlbmd0aCA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJy5yZW1vdmVkJylbMF0ubGVuZ3RoO1xuICAgICAgLy8gZ2V0IG51bWJlciBvZiBhZGRlZCBpdGVtc1xuICAgIGNvbnN0IGFkZGVkTGVuZ3RoID0gdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygnLmFkZGVkJylbMF0ubGVuZ3RoO1xuICAgICAgLy8gcmVmcmVzaFxuICAgIHRoaXMudGFibGUubG9hZC5lbWl0KHtcbiAgICAgICAgZGF0YTogaXRlbXMsXG4gICAgICAgIHJlY29yZHNGaWx0ZXJlZDogaXRlbXMubGVuZ3RoIC0gcmVtb3ZlZExlbmd0aCxcbiAgICAgICAgcmVjb3Jkc1RvdGFsOiBpdGVtcy5sZW5ndGggLSByZW1vdmVkTGVuZ3RoLFxuICAgICAgfSk7XG4gICAgdGhpcy5kaXJ0eSA9IChyZW1vdmVkTGVuZ3RoID4gMCB8fCBhZGRlZExlbmd0aCA+IDApO1xuICAgIHRoaXMuZGlydHlDaGFuZ2UuZW1pdCh0aGlzLmRpcnR5KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQoaXRlbXM6IGFueVtdKSB7XG4gICAgaWYgKHRoaXMudGFibGUgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEFkdmFuY2VkVGFibGVOb3ROdWxsRXJyb3IoKTtcbiAgICB9XG4gICAgLy8gY2xlYXIgcm93c1xuICAgIHRoaXMudGFibGUuc2VsZWN0ZWQgPSBbXTtcbiAgICB0aGlzLnRhYmxlLmRhdGFUYWJsZS5jbGVhcigpO1xuICAgIC8vIHNldCBpdGVtc1xuICAgIHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MuYWRkKGl0ZW1zKS5kcmF3KCk7XG4gICAgdGhpcy50YWJsZS5sb2FkLmVtaXQoe1xuICAgICAgZGF0YTogaXRlbXMsXG4gICAgICByZWNvcmRzRmlsdGVyZWQ6IGl0ZW1zLmxlbmd0aCxcbiAgICAgIHJlY29yZHNUb3RhbDogaXRlbXMubGVuZ3RoLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuZG8gY2hhbmdlc1xuICAgKi9cbiAgcHVibGljIHVuZG8oKSB7XG4gICAgaWYgKHRoaXMudGFibGUgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEFkdmFuY2VkVGFibGVOb3ROdWxsRXJyb3IoKTtcbiAgICB9XG4gICAgLy8gcmVzZXQgcmVtb3ZlZCByb3dzXG4gICAgdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygnLnJlbW92ZWQnKS5ub2RlcygpLnRvJCgpLnRvZ2dsZUNsYXNzKCdyZW1vdmVkIHRleHQtZ3JheS00MDAgdGV4dC1kZWNvcmF0aW9uLWxpbmUtdGhyb3VnaCcpO1xuICAgIC8vIHJlbW92ZSBhZGRlZCByb3dzXG4gICAgdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygnLmFkZGVkJykucmVtb3ZlKCk7XG4gICAgLy8gY2xlYXIgc2VsZWN0ZWQgaXRlbXNcbiAgICB0aGlzLnRhYmxlLnNlbGVjdGVkID0gW107XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCkuZGF0YSgpO1xuICAgIHRoaXMudGFibGUuZGF0YVRhYmxlLmRyYXcoKTtcbiAgICB0aGlzLnRhYmxlLmxvYWQuZW1pdCh7XG4gICAgICBkYXRhOiBpdGVtcyxcbiAgICAgIHJlY29yZHNGaWx0ZXJlZDogaXRlbXMubGVuZ3RoLFxuICAgICAgcmVjb3Jkc1RvdGFsOiBpdGVtcy5sZW5ndGgsXG4gICAgfSk7XG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIHRoaXMuZGlydHlDaGFuZ2UuZW1pdCh0aGlzLmRpcnR5KTtcbiAgfVxuXG4gIHB1YmxpYyByb3dzKCkge1xuICAgIGlmICh0aGlzLnRhYmxlID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBBZHZhbmNlZFRhYmxlTm90TnVsbEVycm9yKCk7XG4gICAgfVxuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJzpub3QoLnJlbW92ZWQpJykuZGF0YSgpKTtcbiAgfVxuXG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBbmd1bGFyRGF0YUNvbnRleHQgfSBmcm9tICdAdGhlbW9zdC9hbmd1bGFyJztcbmltcG9ydCB7IFRlbXBsYXRlUGlwZSB9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRBZ2dyZWdhdG9yU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfY29udGV4dDogQW5ndWxhckRhdGFDb250ZXh0LFxuICAgIHByaXZhdGUgX3RlbXBsYXRlOiBUZW1wbGF0ZVBpcGVcbiAgKSB7IH1cblxuICAvKipcbiAgICpcbiAgICogRm9ybWF0cyBhbmQgZXhlY3V0ZXMgdGhlIGRhdGEgcXVlcnlcbiAgICpcbiAgICogQHBhcmFtIG1vZGVsIFRoZSB0YXJnZXQgbW9kZWxcbiAgICogQHBhcmFtIGZpeGVkUGFyYW1zIFBhaXJzIG9mIHBhcmFtZXRlcnMgdG8gYWx3YXlzIGJlIGFwcGxpZWRcbiAgICogQHBhcmFtIHF1ZXJ5U3RhdGVtZW50IFRoZSBkZWZhdWx0IHF1ZXJ5IHRvIHVzZSBmb3IgZmV0Y2hpbmcgdGhlIGRhdGEgKGUuZy4gZXhwYW5kcyBldGMpXG4gICAqIEBwYXJhbSBmaWx0ZXJzIEEgbGlzdCBvZiBmaWx0ZXIgZXhwcmVzc2lvbnMgdG8gYXBwZW5kIGF0IHRoZSBxdWVyeVxuICAgKiBAcGFyYW0gc2VhcmNoVGVtcGxhdGUgVGhlIHRlbXBsYXRlIHRvIHVzZSBmb3Igc2VhcmNoaW5nIGV4cHJlc3Npb25zXG4gICAqIEBwYXJhbSBzZWFyY2hWYWx1ZSBUaGUgdmFsdWUgb2YgdGhlIHVzZXIgc2VhcmNoXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSByZXNwb25zZSBvZiB0aGUgcXVlcnkgZXhlY3V0aW9uXG4gICAqL1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gIGFzeW5jIGZldGNoRGF0YShtb2RlbDogc3RyaW5nLCBmaXhlZFBhcmFtczogb2JqZWN0LCBxdWVyeVN0YXRlbWVudDogc3RyaW5nID0gJycsIGZpbHRlcnM6IHN0cmluZ1tdLCBzZWFyY2hUZW1wbGF0ZT86IHN0cmluZywgc2VhcmNoVmFsdWU/OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5fY29udGV4dC5tb2RlbChtb2RlbCkuYXNRdWVyeWFibGUoKTtcblxuICAgIGlmICghZml4ZWRQYXJhbXMgfHwgdHlwZW9mIGZpeGVkUGFyYW1zICE9PSAnb2JqZWN0Jykge1xuICAgICAgZml4ZWRQYXJhbXMgPSB7fTtcbiAgICB9XG5cbiAgICBsZXQgZmlsdGVyRXhwcmVzc2lvbnM6IGFueVtdID0gW107XG5cbiAgICBpZiAoZml4ZWRQYXJhbXMpIHtcbiAgICAgIGZvciAoY29uc3QgcGFyYW0gb2YgT2JqZWN0LmtleXMoZml4ZWRQYXJhbXMpKSB7XG4gICAgICAgIGZpbHRlckV4cHJlc3Npb25zLnB1c2goYCR7cGFyYW19IGVxICR7Zml4ZWRQYXJhbXNbcGFyYW1dfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmaWx0ZXJzICYmIEFycmF5LmlzQXJyYXkoZmlsdGVycykpIHtcbiAgICAgIGZpbHRlckV4cHJlc3Npb25zID0gW1xuICAgICAgICAuLi5maWx0ZXJFeHByZXNzaW9ucyxcbiAgICAgICAgLi4uZmlsdGVyc1xuICAgICAgXTtcbiAgICB9XG5cbiAgICBpZiAoc2VhcmNoVGVtcGxhdGUgJiYgc2VhcmNoVmFsdWUpIHtcbiAgICAgIGxldCBldmFsdWF0ZWRTZWFyY2g7XG4gICAgICBpZiAoL15cIiguKj8pXCIkLy50ZXN0KHNlYXJjaFZhbHVlKSkgeyAvLyB2YWxpZGF0ZSBzZWFyY2ggdGV4dCBpbiBkb3VibGUgcXVvdGVzXG4gICAgICAgIGV2YWx1YXRlZFNlYXJjaCA9IHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybShzZWFyY2hUZW1wbGF0ZSwge1xuICAgICAgICAgIC4uLmZpeGVkUGFyYW1zLFxuICAgICAgICAgIHRleHQ6IHNlYXJjaFZhbHVlLnJlcGxhY2UoL15cInxcIiQvZywgJycpXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdHJ5IHRvIHNwbGl0IHdvcmRzXG4gICAgICAgIGNvbnN0IHdvcmRzID0gc2VhcmNoVmFsdWUuc3BsaXQoJyAnKTtcbiAgICAgICAgLy8gam9pbiB3b3JkcyB0byBhIHNpbmdsZSBmaWx0ZXJcbiAgICAgICAgZXZhbHVhdGVkU2VhcmNoID0gd29yZHMubWFwKHdvcmQgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZS50cmFuc2Zvcm0oc2VhcmNoVGVtcGxhdGUsIHtcbiAgICAgICAgICAgIC4uLmZpeGVkUGFyYW1zLFxuICAgICAgICAgICAgdGV4dDogd29yZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KS5qb2luKCcgYW5kICcpO1xuXG4gICAgICB9XG4gICAgICBmaWx0ZXJFeHByZXNzaW9ucy5wdXNoKGV2YWx1YXRlZFNlYXJjaCk7XG4gICAgfVxuXG4gICAgcXVlcnkuc2V0UGFyYW0oJyRmaWx0ZXInLCBmaWx0ZXJFeHByZXNzaW9ucy5qb2luKCdhbmQnKSk7XG4gICAgcmV0dXJuIHF1ZXJ5LmV4cGFuZChxdWVyeVN0YXRlbWVudCkudGFrZSgtMSkuZ2V0SXRlbXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBGb3JtYXRzIHRoZSByZWNlaXZlZCBkYXRhIHRvIHVzZSBmbGF0IGtleXNcbiAgICpcbiAgICogQHBhcmFtIGNvbmZpZyBUaGUgYXBwbGllZCBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSBkYXRhIFRoZSByYXcgZGF0YVxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgZmxhdC1rZXkgb2JqZWN0IGxpc3RcbiAgICpcbiAgICovXG4gIGZvcm1hdERhdGEoY29uZmlnLCBkYXRhKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBkYXRhLm1hcCgoZW50cnkpID0+IHtcbiAgICAgICAgaWYgKGVudHJ5LnN1Yml0ZW1zICYmIEFycmF5LmlzQXJyYXkoZW50cnkuc3ViaXRlbXMpKSB7XG4gICAgICAgICAgZW50cnkuc3ViaXRlbXMgPSB0aGlzLmZvcm1hdERhdGEoY29uZmlnLCBlbnRyeS5zdWJpdGVtcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW50cnlPYmplY3QgPSB7fSBhcyBhbnk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlnLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBrZXlzID0gY29uZmlnLmNvbHVtbnNbaV0ubmFtZS5zcGxpdCgnLycpO1xuICAgICAgICAgIGxldCBoZWxwZXJPYmplY3QgPSBlbnRyeVtrZXlzWzBdXTtcblxuICAgICAgICAgIGlmIChoZWxwZXJPYmplY3QgJiYga2V5cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tc2hhZG93ZWQtdmFyaWFibGVcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBpZiAoaGVscGVyT2JqZWN0ID09PSB1bmRlZmluZWQgfHwgaGVscGVyT2JqZWN0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaGVscGVyT2JqZWN0ID0gaGVscGVyT2JqZWN0W2tleXNbaV1dICE9PSB1bmRlZmluZWQgJiYgaGVscGVyT2JqZWN0W2tleXNbaV1dICE9PSBudWxsXG4gICAgICAgICAgICAgICAgICA/IGhlbHBlck9iamVjdFtrZXlzW2ldXVxuICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlbnRyeU9iamVjdFtjb25maWcuY29sdW1uc1tpXS5uYW1lXSA9IGhlbHBlck9iamVjdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbnRyeS5zdWJpdGVtcykge1xuICAgICAgICAgIGVudHJ5T2JqZWN0LnN1Yml0ZW1zID0gZW50cnkuc3ViaXRlbXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZW50cnlPYmplY3Q7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uRGVzdHJveSwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBZHZhbmNlZEFnZ3JlZ2F0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWR2YW5jZWQtYWdncmVnYXRvci9hZHZhbmNlZC1hZ2dyZWdhdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWR2YW5jZWRBZ2dyZWdhdG9yQ29uZmlnLCBBZHZhbmNlZEFnZ3JlZ2F0b3JGaWx0ZXJzIH0gZnJvbSAnLi4vLi4vYWR2YW5jZWQtYWdncmVnYXRvcic7XG5pbXBvcnQgeyBMb2FkaW5nU2VydmljZSB9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcblxuLyoqXG4gKlxuICogXG4gKiAgQGNsYXNzZGVzYyBBbiBhZHZhbmNlZCBsaXN0IHdpdGggdGhlIGNhcGFiaWxpdHkgb2YgYWdncmVnYXRlIGRhdGEgYmFzZWQgb24gY29uZmlndXJhYmxlIGZpbHRlcnNcbiAqXG4gKi9cblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtYWdncmVnYXRvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZHZhbmNlZC1hZ2dyZWdhdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkQWdncmVnYXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBwcml2YXRlIF9jb25maWc/OiBBZHZhbmNlZEFnZ3JlZ2F0b3JDb25maWc7XG4gIHByaXZhdGUgX2FnZ3JlZ2F0b3JzO1xuICBwcml2YXRlIF9wb3N0UHJvY2Vzc29ycztcblxuICBwdWJsaWMgYm9keTtcbiAgcHVibGljIGdyb3VwczogYW55W10gPSBbXTtcblxuICBASW5wdXQoJ2NvbmZpZycpXG4gIHB1YmxpYyBzZXQgY29uZmlnKHZhbHVlOiBBZHZhbmNlZEFnZ3JlZ2F0b3JDb25maWcpIHtcbiAgICB0aGlzLl9jb25maWcgPSB2YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgnYWdncmVnYXRvcnMnKVxuICBwdWJsaWMgc2V0IGFnZ3JlZ2F0b3JzKHZhbHVlKSB7XG4gICAgdGhpcy5fYWdncmVnYXRvcnMgPSB2YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgncG9zdFByb2Nlc3NvcnMnKVxuICBwdWJsaWMgc2V0IHBvc3RQcm9jZXNzb3JzKHZhbHVlKSB7XG4gICAgdGhpcy5fcG9zdFByb2Nlc3NvcnMgPSB2YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgncGFyYW1zJykgcGFyYW1zO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8taW5wdXQtcmVuYW1lXG4gIEBJbnB1dCgnc2VsZWN0ZWRHcm91cHMnKSBzZWxlY3RlZEdyb3VwcyQ7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1pbnB1dC1yZW5hbWVcbiAgQElucHV0KCdmaWx0ZXJzJykgZmlsdGVycyQ7XG4gIEBJbnB1dCgnc2VhcmNoRXhwcmVzc2lvbicpIHNlYXJjaEV4cHJlc3Npb24/OiBzdHJpbmc7XG5cbiAgQE91dHB1dCgpIGV2ZW50SGFuZGxlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBfYWR2YW5jZWRBZ2dyZWdhdG9yU2VydmljZTogQWR2YW5jZWRBZ2dyZWdhdG9yU2VydmljZSxcbiAgICBwcml2YXRlIF9sb2FkaW5nU2VydmljZTogTG9hZGluZ1NlcnZpY2VcbiAgKSB7IH1cblxuICBwdWJsaWMgZ2V0IGNvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnIGFzIEFkdmFuY2VkQWdncmVnYXRvckNvbmZpZztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYWdncmVnYXRvcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FnZ3JlZ2F0b3JzO1xuICB9XG5cbiAgcHVibGljIGdldCBwb3N0UHJvY2Vzc29ycygpIHtcbiAgICByZXR1cm4gdGhpcy5fcG9zdFByb2Nlc3NvcnM7XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBzJC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgIHRoaXMuZ3JvdXBzID0gZGF0YTtcbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5maWx0ZXJzJC5zdWJzY3JpYmUoYXN5bmMgKGZpbHRlcnM6IEFkdmFuY2VkQWdncmVnYXRvckZpbHRlcnMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZmV0Y2goZmlsdGVycyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwcyQudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmZpbHRlcnMkLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogUmV0cmlldmVzIHRoZSBkYXRhXG4gICAqXG4gICAqL1xuICBhc3luYyBmZXRjaChmaWx0ZXJzOiBBZHZhbmNlZEFnZ3JlZ2F0b3JGaWx0ZXJzKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX2xvYWRpbmdTZXJ2aWNlLnNob3dMb2FkaW5nKCk7XG4gICAgICBsZXQgZGF0YSA9IGF3YWl0IHRoaXMuX2FkdmFuY2VkQWdncmVnYXRvclNlcnZpY2UuZmV0Y2hEYXRhKHRoaXMuY29uZmlnLm1vZGVsLFxuICAgICAgICB0aGlzLnBhcmFtcyxcbiAgICAgICAgdGhpcy5jb25maWcucXVlcnksXG4gICAgICAgIGZpbHRlcnMuZmlsdGVycyxcbiAgICAgICAgdGhpcy5zZWFyY2hFeHByZXNzaW9uLFxuICAgICAgICBmaWx0ZXJzLnRleHRcbiAgICAgICk7XG5cbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICAgIGlmICh0aGlzLnBvc3RQcm9jZXNzb3JzICYmIE9iamVjdC5rZXlzKHRoaXMucG9zdFByb2Nlc3NvcnMpLmxlbmd0aCA+IDAgJiYgdGhpcy5jb25maWcucG9zdFByb2Nlc3NvcnMgJiYgdGhpcy5jb25maWcucG9zdFByb2Nlc3NvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29uZmlnLnBvc3RQcm9jZXNzb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgZGF0YSA9IGF3YWl0IHRoaXMucG9zdFByb2Nlc3NvcnNbdGhpcy5jb25maWcucG9zdFByb2Nlc3NvcnNbaV0ubmFtZV0oZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5ib2R5ID0gdGhpcy5fYWR2YW5jZWRBZ2dyZWdhdG9yU2VydmljZS5mb3JtYXREYXRhKHRoaXMuY29uZmlnLCBkYXRhKTtcbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9sb2FkaW5nU2VydmljZS5oaWRlTG9hZGluZygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBUcmlnZ2VycyB0aGUgZXZlbnQgaGFuZGxlciBldmVudFxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IGRhdGFcbiAgICpcbiAgICovXG4gIG9uQWN0aW9uRXZlbnQoZXZlbnQpIHtcbiAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0KGV2ZW50KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGVtcGxhdGVQaXBlfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5cbmVudW0gTGVuZ3RocyB7XG4gIFhMPSAneGwnLFxuICBMRz0gJ2xnJyxcbiAgTUQ9ICdtZCcsXG4gIFNNPSAnc20nLFxuICBYUz0gJ3hzJ1xufVxuXG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLWFnZ3JlZ2F0b3ItbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZHZhbmNlZC1hZ2dyZWdhdG9yLWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkQWdncmVnYXRvckxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkge0FkdmFuY2VkQWdncmVnYXRvckNvbmZpZ30gY29uZmlnIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdCB0byB1c2VcbiAgICovXG4gIEBJbnB1dCgpIGNvbmZpZzogYW55O1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkge0FycmF5PEFycmF5PGFueT4+fSBib2R5IFRoZSBsaXN0IG9mIGRhdGEgZW50cmllcyB0byBzaG93IGFzIHRoZSBsaXN0IGJvZHlcbiAgICovXG4gIEBJbnB1dCgpIGJvZHk7XG5cbiAgQE91dHB1dCgpIGNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfdGVtcGxhdGU6IFRlbXBsYXRlUGlwZSkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jb25maWcuY29sdW1ucy5mb3JFYWNoKHggPT4ge1xuICAgICAgeC5sZW5ndGggPSBPYmplY3QudmFsdWVzKExlbmd0aHMpLmluY2x1ZGVzKHgubGVuZ3RoKSA/IHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybShgc2lzLS1saXN0LWdyb3VwLWl0ZW1fJHt4Lmxlbmd0aH1fY29sdW1uYCwgeCApIDpcbiAgICAgICAgIXgubGVuZ3RoID8gJ3Npcy0tbGlzdC1ncm91cC1pdGVtX3NtX2NvbHVtbicgOiB4Lmxlbmd0aCA7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogVHJpZ2dlcnMgdGhlIG91dHB1dCBldmVudCBlbWl0dGVyXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBldmVudCBhcyBpdCdzIGRlY2xhcmVkIGluIHRoZSBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSBpdGVtIFRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBpdGVtXG4gICAqIH1cbiAgICovXG4gIGNhbGxDYWxsYmFjayh0eXBlOiBzdHJpbmcsIGRhdGE6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY2xpY2tFdmVudC5lbWl0KHtcbiAgICAgIHR5cGUsXG4gICAgICBkYXRhXG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JvdXRlck1vZGFsT2tDYW5jZWx9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uL3JvdXRpbmcnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50fSBmcm9tICcuLi9hZHZhbmNlZC10YWJsZS1tb2RhbC9hZHZhbmNlZC10YWJsZS1tb2RhbC1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQge0FkdmFuY2VkRm9ybUNvbXBvbmVudH0gZnJvbSAnQHVuaXZlcnNpcy9mb3Jtcyc7XG5pbXBvcnQge0xvYWRpbmdTZXJ2aWNlLCBNb2RhbFNlcnZpY2V9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWRkLWl0ZW1zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkZC1pdGVtcy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQWRkSXRlbXNDb21wb25lbnQgZXh0ZW5kcyBSb3V0ZXJNb2RhbE9rQ2FuY2VsIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIHB1YmxpYyBsb2FkaW5nID0gZmFsc2U7XG4gIHB1YmxpYyBsYXN0RXJyb3I7XG4gIEBJbnB1dCgpIGV4ZWN1dGU/OiBPYnNlcnZhYmxlPGFueT47XG4gIEBJbnB1dCgpIGl0ZW1zOiBBcnJheTxhbnk+ID0gW107XG4gIEBJbnB1dCgpIHRhcmdldDogYW55O1xuICAvLyBASW5wdXQoKSBzZWxlY3RlZDogYW55O1xuICBASW5wdXQoKSB0YWJsZUNvbmZpZ3VyYXRpb246IGFueTtcbiAgQElucHV0KCkgZm9ybU5hbWU6IGFueTtcbiAgQElucHV0KCkgbWVzc2FnZXM6IEFycmF5PGFueT4gPSBbXTtcbiAgQFZpZXdDaGlsZCgnZm9ybUNvbXBvbmVudCcpIGZvcm1Db21wb25lbnQ/OiBBZHZhbmNlZEZvcm1Db21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdENvbXBvbmVudCcpIHNlbGVjdENvbXBvbmVudD86IEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQ7XG4gIHByaXZhdGUgZm9ybUxvYWRTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZm9ybUNoYW5nZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBzZWxlY3RlZFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihyb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgICAgICAgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9tb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfbG9hZGluZ1NlcnZpY2U6IExvYWRpbmdTZXJ2aWNlKSB7XG4gICAgc3VwZXIocm91dGVyLCBhY3RpdmF0ZWRSb3V0ZSk7XG4gICAgLy8gc2V0IG1vZGFsIHNpemVcbiAgICB0aGlzLm1vZGFsQ2xhc3MgPSAnbW9kYWwtbGcnO1xuICAgIHRoaXMub2tCdXR0b25EaXNhYmxlZCA9IHRydWU7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RDb21wb25lbnQgJiYgdGhpcy5zZWxlY3RDb21wb25lbnQuYWR2YW5jZWRUYWJsZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFN1YnNjcmlwdGlvbiA9IHRoaXMuc2VsZWN0Q29tcG9uZW50LmFkdmFuY2VkVGFibGUuc2VsZWN0ZWRJdGVtcy5zdWJzY3JpYmUoKGl0ZW1zKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmZvcm1OYW1lID09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLm9rQnV0dG9uRGlzYWJsZWQgPSBpdGVtcy5sZW5ndGggPT09IDA7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5mb3JtTmFtZSAhPSBudWxsICYmIHRoaXMuZm9ybUNvbXBvbmVudCkge1xuICAgICAgdGhpcy5mb3JtQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5mb3JtQ29tcG9uZW50LmZvcm0uY2hhbmdlLnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV2ZW50LCAnaXNWYWxpZCcpKSB7XG4gICAgICAgICAgLy8gZW5hYmxlIG9yIGRpc2FibGUgYnV0dG9uIGJhc2VkIG9uIGZvcm0gc3RhdHVzXG4gICAgICAgICAgdGhpcy5va0J1dHRvbkRpc2FibGVkID0gKCFldmVudC5pc1ZhbGlkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGFyZ2V0KSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnRhcmdldDtcbiAgICB9XG4gIH1cblxuICBjYW5jZWwoKTogUHJvbWlzZTxhbnk+IHtcbiAgICB0aGlzLmNsZWFyTWVzc2FnZXMoKTtcbiAgICBpZiAodGhpcy5sb2FkaW5nKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIC8vIGNsb3NlXG4gICAgaWYgKHRoaXMuX21vZGFsU2VydmljZS5tb2RhbFJlZikge1xuICAgICAgcmV0dXJuIHRoaXMuX21vZGFsU2VydmljZS5tb2RhbFJlZi5oaWRlKCk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvcm1Mb2FkU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmZvcm1Mb2FkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmZvcm1DaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZm9ybUNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3RlZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zZWxlY3RlZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gICAgLy8gZ2V0IGZvcm0gZGF0YVxuICBwcml2YXRlIGV4ZWN1dGVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHVibGljIGdldCBmb3JtRGF0YSgpOiBhbnkge1xuICAgICAgaWYgKHRoaXMuZm9ybUNvbXBvbmVudCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQgJiYgdGhpcy5mb3JtQ29tcG9uZW50LmZvcm0uZm9ybWlvLmRhdGE7XG4gICAgfVxuXG4gICAgb2soKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuY2xlYXJNZXNzYWdlcygpO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RDb21wb25lbnQgPT0gbnVsbCB8fCB0aGlzLnNlbGVjdENvbXBvbmVudC5hZHZhbmNlZFRhYmxlID09IG51bGwgfHwgdGhpcy5leGVjdXRlID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmxhc3RFcnJvciA9IG51bGw7XG4gICAgICAgICAgLy8gc2V0IGNvdXJzZXNcbiAgICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5zZWxlY3RDb21wb25lbnQuYWR2YW5jZWRUYWJsZS5zZWxlY3RlZDtcbiAgICAgICAgICAvLyBleGVjdXRlIGFkZFxuICAgICAgICAgIHRoaXMuZXhlY3V0ZVN1YnNjcmlwdGlvbiA9IHRoaXMuZXhlY3V0ZS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5leGVjdXRlU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgIHRoaXMuZXhlY3V0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY2xvc2UgbW9kYWxcbiAgICAgICAgICAgIGlmICh0aGlzLl9tb2RhbFNlcnZpY2UubW9kYWxSZWYpIHtcbiAgICAgICAgICAgICAgdGhpcy5fbW9kYWxTZXJ2aWNlLm1vZGFsUmVmLmhpZGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKG51bGwpO1xuICAgICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gZW5zdXJlIHRoYXQgbG9hZGluZyBpcyBoaWRkZW5cbiAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdTZXJ2aWNlLmhpZGVMb2FkaW5nKCk7XG4gICAgICAgICAgICAvLyBzZXQgbGFzdCBlcnJvclxuICAgICAgICAgICAgdGhpcy5sYXN0RXJyb3IgPSBlcnI7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5fbG9hZGluZ1NlcnZpY2UuaGlkZUxvYWRpbmcoKTtcbiAgICAgIHRoaXMubGFzdEVycm9yID0gZXJyO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2hhbmdlKCRldmVudDogYW55KSB7fVxuXG4gIGNsZWFyTWVzc2FnZXMoKSB7XG4gICAgdGhpcy5tZXNzYWdlcyA9IFtdO1xuICB9XG5cbiAgb25GaWx0ZXJDaGFuZ2UoZXZlbnQ6ICB7IG5hbWU6IHN0cmluZywgZW1pdDogYm9vbGVhbiB9KSB7fVxufVxuIiwiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqXG4gKlxuICogQGNsYXNzZGVzYyBHaXZlbiBhIGxpc3Qgb2YgaXRlbXMgcnVucyBhIHVzZXIgZGVmaW5lZCBmdW5jdGlvbiBhZ2FpbnN0IHRoYXQgbGlzdFxuICpcbiAqL1xuXG5AUGlwZSh7XG4gIG5hbWU6ICdjYWxsQWdncmVnYXRvcidcbn0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRBZ2dyZWdhdG9yUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gIC8qKlxuICAgKlxuICAgKiBAb3ZlcnJpZGVcbiAgICpcbiAgICogQHBhcmFtIGl0ZW1zIFRoZSBsaXN0IG9mIGl0ZW1zIHRvIHJ1biB0aGUgYWdncmVnYXRvciBhZ2FpbnN0XG4gICAqIEBwYXJhbSBmdW5jdGlvblBvb2wgVGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgbGlzdCBjYWxsZXJcbiAgICogQHBhcmFtIGZ1bmN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSB2YWx1ZSB0byBzaG93IGF0IHRoZSBVSVxuICAgKlxuICAgKi9cbiAgdHJhbnNmb3JtKGl0ZW1zOiBhbnlbXSwgZnVuY3Rpb25Qb29sOiBhbnksIGZ1bmN0aW9uTmFtZTogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtcykgJiYgZnVuY3Rpb25OYW1lICYmIGZ1bmN0aW9uTmFtZSBpbiBmdW5jdGlvblBvb2wpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvblBvb2xbZnVuY3Rpb25OYW1lXShpdGVtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbi8qKlxuICpcbiAqIFxuICogQGNsYXNzZGVzYyBHaXZlbiBhIHRpdGxlIG9mIGFuIGFnZ3JlZ2F0b3IgbGlzdCwgdHJhbnNsYXRlcyBhbmQgZXZhbHVhdGVzIHRoZSBwYXJhbWV0ZXIgaWYgYW55XG4gKlxuICovXG5cbkBQaXBlKHtcbiAgbmFtZTogJ2FnZ3JlZ2F0b3JMaXN0VGl0bGUnXG59KVxuZXhwb3J0IGNsYXNzIFBhcnNlVGl0bGVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZVxuICApIHt9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBvdmVycmlkZVxuICAgKlxuICAgKiBAcGFyYW0gdGl0bGUgVGhlIHRpdGxlIG9mIHRoZSBsaXN0XG4gICAqIEBwYXJhbSBrZXkgVGhlIGN1cnJlbnQgbGlzdCBrZXkgdGhhdCBpcyBiZWluZyB1c2VkXG4gICAqXG4gICAqL1xuICB0cmFuc2Zvcm0odGl0bGU6IHN0cmluZywga2V5OiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICghdGl0bGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gbnVsbCB8fCBrZXkgPT09ICd1bmRlZmluZWQnIHx8IGtleSA9PT0gJ251bGwnKSB7XG4gICAgICAgIGtleSA9IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnVGFibGVzLk5vdERlZmluZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aXRsZS5zcGxpdCgnICcpXG4gICAgICAgIC5tYXAoKHBhcnQpID0+IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChwYXJ0KSlcbiAgICAgICAgLm1hcCgocGFydCkgPT4gcGFydC5yZXBsYWNlKCcke3BhcmFtfScsIGtleSkpXG4gICAgICAgIC5qb2luKCcgJyk7XG4gICAgfVxuICB9XG59XG4iLCIvLyB0c2xpbnQ6ZGlzYWJsZTogcXVvdGVtYXJrXG4vLyB0c2xpbnQ6ZGlzYWJsZTogbWF4LWxpbmUtbGVuZ3RoXG5leHBvcnQgY29uc3QgVEFCTEVTX0VMID0ge1xuICAgIFwiVGFibGVzXCI6IHtcbiAgICAgICAgXCJFeHBvcnRcIjogXCLOlc6+zrHOs8+JzrPOrlwiLFxuICAgICAgICBcIk1vcmVcIjogXCLOoM61z4HOuc+Dz4PPjM+EzrXPgc6xXCIsXG4gICAgICAgIFwiU2VhcmNoXCI6IFwizpHOvc6xzrbOrs+EzrfPg863XCIsXG4gICAgICAgIFwiU2VhcmNoUGxhY2Vob2xkZXJcIjogXCLOkc69zrHOts6uz4TOt8+DzrcuLi5cIixcbiAgICAgICAgXCJHcm91cEJ5XCI6IFwizp/OvM6xzrTOv8+Azr/Or863z4POtyDOsc69zqxcIixcbiAgICAgICAgXCJOb3REZWZpbmVkXCI6IFwizpzOtyDPgM+Bzr/Pg860zrnOv8+BzrnPg868zq3Ovc6/XCIsXG4gICAgICAgIFwiRGF0YVRhYmxlXCI6IHtcbiAgICAgICAgICAgIFwicGFnaW5hdGVcIjoge1xuICAgICAgICAgICAgICAgIFwiZmlyc3RcIjogXCLOoM+Bz47PhM63IM+DzrXOu86vzrTOsVwiLFxuICAgICAgICAgICAgICAgIFwibGFzdFwiOiBcIs6kzrXOu861z4TOsc6vzrEgz4POtc67zq/OtM6xXCIsXG4gICAgICAgICAgICAgICAgXCJuZXh0XCI6IFwizpXPgM+MzrzOtc69zrdcIixcbiAgICAgICAgICAgICAgICBcInByZXZpb3VzXCI6IFwizqDPgc6/zrfOs86/z43OvM61zr3Ot1wiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJpbmZvXCI6IFwizpXOvM+GzqzOvc65z4POtyBfU1RBUlRfIM6tz4nPgiBfRU5EXyDOsc+Az4wgX1RPVEFMXyDOtc6zzrPPgc6xz4bOrc+CXCIsXG4gICAgICAgICAgICBcImluZm9FbXB0eVwiOiBcIs6UzrXOvSDOss+Bzq3OuM63zrrOsc69IM61zrPOs8+BzrHPhs6tz4JcIixcbiAgICAgICAgICAgIFwibG9hZGluZ1wiOiBcIs6VzrzPhs6szr3Ouc+DzrcgzrTOtc60zr/OvM6tzr3Pic69Li4uXCIsXG4gICAgICAgICAgICBcInByb2Nlc3NpbmdcIjogXCLOoM6xz4HOsc67zrHOss6uIM60zrXOtM6/zrzOrc69z4nOvS4uLlwiLFxuICAgICAgICAgICAgXCJlbXB0eVRhYmxlXCI6IFwizpTOtc69IM6yz4HOrc64zrfOus6xzr0gzrHPgM6/z4TOtc67zq3Pg868zrHPhM6xLlwiXG4gICAgICAgIH0sXG4gICAgICBcIkNvbHVtbkRpc3BsYXlcIjogXCLOlc+AzrnOu86/zrPOriDOlc68z4bOrM69zrnPg863z4Igz4PPhM63zrvPjs69XCIsXG4gICAgICBcIkNvbHVtbkRpc3BsYXlJbmZvXCI6IFwizpXPgM65zrvOrc6+z4TOtSDPhM65z4Igz4PPhM6uzrvOtc+CIM+Azr/PhSDOuM6tzrvOtc+EzrUgzr3OsSDOtc68z4bOsc69zq/Ots6/zr3PhM6xzrkuXCIsXG4gICAgICBcIlNhdmVcIjogXCLOlc+GzrHPgc68zr/Os86uXCIsXG4gICAgICBcIkFwcGx5XCI6IFwizpXPhs6xz4HOvM6/zrPOrlwiLFxuICAgICAgXCJDYW5jZWxcIjogXCLOkc66z43Pgc+Jz4POt1wiLFxuICAgICAgXCJSZWNvcmRzUGVyUGFnZVwiOiBcIs6VzrPOs8+BzrHPhs6tz4IgzrHOvc6sIM+DzrXOu86vzrTOsVwiLFxuICAgICAgXCJQYWdlSW5mb1wiOiBcInt7c3RhcnR9fS17e2VuZH19IM6xz4DPjCB7e3JlY29yZHNUb3RhbH19XCIsXG4gICAgICBcIlNlYXJjaExpc3RQbGFjZWhvbGRlclwiOiBcIs6Rzr3Osc62zrfPhM6uz4PPhM61IM+Dz4TOtyDOu86vz4PPhM6xLi4uXCIsXG4gICAgICBcIkZpbHRlcnNcIjogXCLOps6vzrvPhM+BzrFcIixcbiAgICAgIFwiQWxsXCI6IFwizozOu86xXCIsXG4gICAgICAgIFwiQWRkSXRlbVwiOiBcIs6gz4HOv8+DzrjOrs66zrcgz4PPhM6/zrnPh861zq/Ov8+FXCIsXG4gICAgICAgIFwiRW1wdHlUYWJsZVRpdGxlXCI6IFwizpTOtc69IM6yz4HOrc64zrfOus6xzr0gzrHPgM6/z4TOtc67zq3Pg868zrHPhM6xLlwiLFxuICAgICAgICBcIkVtcHR5VGFibGVNZXNzYWdlXCI6IFwizqDPgc6/z4PPgM6xzrjOrs+Dz4TOtSDOvc6xIM+Hz4HOt8+DzrnOvM6/z4DOv865zq7Pg861z4TOtSDOrM67zrvOtc+CIM67zq3Ovs61zrnPgiDOus67zrXOuc60zrnOrC5cIixcbiAgICAgICAgXCJSZW1vdmVJdGVtXCI6IFwizpTOuc6xzrPPgc6xz4bOriDPg8+Ezr/Ouc+HzrXOr86/z4VcIixcbiAgICAgICAgXCJJdGVtc1wiOiBcIs+Dz4TOv865z4fOtc6vzrFcIixcbiAgICAgICAgXCJJdGVtXCI6IFwiz4PPhM6/zrnPh861zq/Ov1wiLFxuICAgICAgICBcIkFkZEl0ZW1NZXNzYWdlXCI6IHtcbiAgICAgICAgICAgIFwidGl0bGVcIjogXCLOoM+Bzr/Pg864zq7Ous63IM+Dz4TOv865z4fOtc6vz4nOvVwiLFxuICAgICAgICAgICAgXCJvbmVcIjogXCLOiM69zrEgzr3Orc6/IM+Dz4TOv865z4fOtc6vzr8gz4DPgc6/z4PPhM6tzrjOt866zrUgzrzOtSDOtc+AzrnPhM+Fz4fOr86xLlwiLFxuICAgICAgICAgICAgXCJtYW55XCI6IFwie3t2YWx1ZX19IM69zq3OsSDPg8+Ezr/Ouc+HzrXOr86xIM+Az4HOv8+Dz4TOrc64zrfOus6xzr0gzrzOtSDOtc+AzrnPhM+Fz4fOr86xLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgXCJSZW1vdmVJdGVtTWVzc2FnZVwiOiB7XG4gICAgICAgICAgICBcInRpdGxlXCI6IFwizpHPhs6xzq/Pgc61z4POtyDPg8+Ezr/Ouc+HzrXOr8+Jzr1cIixcbiAgICAgICAgICAgIFwib25lXCI6IFwizojOvc6xIM+Dz4TOv865z4fOtc6vzr8gzrHPhs6xzrnPgc6tzrjOt866zrUgzrzOtSDOtc+AzrnPhM+Fz4fOr86xLlwiLFxuICAgICAgICAgICAgXCJtYW55XCI6IFwie3t2YWx1ZX19IM+Dz4TOv865z4fOtc6vzrEgzrHPhs6xzrnPgc6tzrjOt866zrHOvSDOvM61IM61z4DOuc+Ez4XPh86vzrEuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJSZW1vdmVJdGVtc1RpdGxlXCI6IFwizpTOuc6xzrPPgc6xz4bOriDPg8+Ezr/Ouc+HzrXOr86/z4VcIixcbiAgICAgICAgXCJSZW1vdmVJdGVtc01lc3NhZ2VcIjogXCLOoM+Bz4zOus61zrnPhM6xzrkgzr3OsSDOtM65zrHOs8+BzqzPiM61z4TOtSDOrc69zrEgzq4gz4DOtc+BzrnPg8+Dz4zPhM61z4HOsSDPg8+Ezr/Ouc+HzrXOr86xLiDOmM6tzrvOtc+EzrUgzr3OsSDPgM+Bzr/Ph8+Jz4HOrs+DzrXPhM61P1wiLFxuICAgICAgICBcIlNlbGVjdEFsbFwiOiBcIs6Vz4DOuc67zr/Os86uIM+MzrvPic69XCIsXG4gICAgICAgIFwiQ2xlYXJTZWxlY3Rpb25cIjogXCLOkc69zrHOr8+BzrXPg863IM61z4DOuc67zr/Os86uz4JcIixcbiAgICAgIFwiQWN0aW9uc1wiOiB7XG4gICAgICAgIFwiTGFiZWxcIjogXCLOlc+AzrXOvs61z4HOs86xz4POr86xXCIsXG4gICAgICAgIFwiU3RhcnRcIjogXCLOiM69zrHPgc6+zrdcIixcbiAgICAgICAgXCJBY3Rpb25NZXNzYWdlXCI6IHtcbiAgICAgICAgICBcIk5vbmVcIjogXCLOlM61zr0gzq3Ph861z4TOtSDOtc+AzrnOu86tzr7Otc65IM66zrHOvc6tzr3OsSDPg8+Ezr/Ouc+HzrXOr86/IM+Azr/PhSDOvc6xIM6xzrrOv867zr/Phc64zrXOryDPhM65z4Igz4DPgc6/z4vPgM6/zrjOrc+DzrXOuc+CIM+EzrfPgiDOtc69zq3Pgc6zzrXOuc6xz4IuXCIsXG4gICAgICAgICAgXCJPbmVcIjogXCLOiM+HzrXPhM61IM61z4DOuc67zq3Ovs61zrkgzq3Ovc6xIM+Dz4TOv865z4fOtc6vzr8gz4DOv8+FIM6xzrrOv867zr/Phc64zrXOryDPhM65z4Igz4DPgc6/z4vPgM6/zrjOrc+DzrXOuc+CIM+EzrfPgiDOtc69zq3Pgc6zzrXOuc6xz4IuIM6gzrHPhM6uz4PPhM61IM+Ezr8gz4DOu86uzrrPhM+Bzr8gzojOvc6xz4HOvs63IM6zzrnOsSDOvc6xIM6+zrXOus65zr3Ors+DzrXOuSDOtyDOtM65zrHOtM65zrrOsc+Dzq/OsS5cIixcbiAgICAgICAgICBcIk1hbnlcIjogXCLOiM+HzrXPhM61IM61z4DOuc67zq3Ovs61zrkge3tsZW5ndGh9fSDPg8+Ezr/Ouc+HzrXOr86xIM+Azr/PhSDOsc66zr/Ou86/z4XOuM6/z43OvSDPhM65z4Igz4DPgc6/z4vPgM6/zrjOrc+DzrXOuc+CIM+EzrfPgiDOtc69zq3Pgc6zzrXOuc6xz4IuIM6gzrHPhM6uz4PPhM61IM+Ezr8gz4DOu86uzrrPhM+Bzr8gzojOvc6xz4HOvs63IM6zzrnOsSDOvc6xIM6+zrXOus65zr3Ors+DzrXOuSDOtyDOtM65zrHOtM65zrrOsc+Dzq/OsS5cIlxuICAgICAgICB9LFxuICAgICAgICBcIkNvbXBsZXRlZFdpdGhFcnJvcnNcIjoge1xuICAgICAgICAgIFwiVGl0bGVcIjogXCLOlyDOtM65zrHOtM65zrrOsc+Dzq/OsSDOv867zr/Ous67zrfPgc+OzrjOt866zrUgzrzOtSDPg8+GzqzOu868zrHPhM6xLlwiLFxuICAgICAgICAgIFwiRGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgICAgXCJPbmVcIjogXCLOiM69zrEgz4PPhM6/zrnPh861zq/OvyDOtM61zr0gzrHOvc6xzr3Otc+OzrjOt866zrUgzrvPjM6zz4kgzrXOvc+Mz4Igz4PPhs6szrvOvM6xz4TOv8+CIM+Azr/PhSDPg8+Fzr3Orc6yzrcgzrrOsc+Ezqwgz4TOt869IM61zrrPhM6tzrvOtc+Dzrcgz4TOt8+CIM60zrnOsc60zrnOus6xz4POr86xz4IuXCIsXG4gICAgICAgICAgICBcIk1hbnlcIjogXCJ7e2Vycm9yc319IM+Dz4TOv865z4fOtc6vzrEgzrTOtc69IM6xzr3Osc69zrXPjs64zrfOus6xzr0gzrvPjM6zz4kgzrXOvc+Mz4Igz4PPhs6szrvOvM6xz4TOv8+CIM+Azr/PhSDPg8+Fzr3Orc6yzrcgzrrOsc+Ezqwgz4TOt869IM61zrrPhM6tzrvOtc+Dzrcgz4TOt8+CIM60zrnOsc60zrnOus6xz4POr86xz4IuXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiQ29tcGxldGVkV2l0aFN1Y2Nlc3NcIjoge1xuICAgICAgICAgIFwiVGl0bGVcIjogXCLOlyDOtM65zrHOtM65zrrOsc+Dzq/OsSDOv867zr/Ous67zrfPgc+OzrjOt866zrUgzrzOtSDOtc+AzrnPhM+Fz4fOr86xLlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcIlNlbGVjdENvbHVtbnNcIjogXCLOlc+AzrnOu86/zrPOriDPg8+EzrfOu8+Ozr1cIixcbiAgICAgIFwiTW92ZVVwXCI6IFwizpXPgM6szr3PiVwiLFxuICAgICAgXCJNb3ZlRG93blwiOiBcIs6azqzPhM+JXCIsXG4gICAgICBcIkFkZENvbHVtblwiOiBcIs6Vz4DOuc67zr/Os86uXCIsXG4gICAgICBcIlJlbW92ZUNvbHVtblwiOiBcIs6Rz4bOsc6vz4HOtc+DzrdcIixcbiAgICAgIFwiU2VsZWN0Q29sdW1uSGVscFwiOiBcIs6Vz4DOuc67zq3Ovs+EzrUgzrzOr86xIM6uIM+AzrXPgc65z4PPg8+Mz4TOtc+BzrXPgiDOsc+Az4wgz4TOuc+CIM60zrnOsc64zq3Pg865zrzOtc+CIM+Dz4TOrs67zrXPgiDOus6xzrkgz4DOsc+Ezq7Pg8+EzrUgz4TOvyDPgM67zq7Ous+Ez4HOvyAnzpXPgM65zrvOv86zzq4nIM6zzrnOsSDOvc6xIM+EzrnPgiDOtc68z4bOsc69zq/Pg861z4TOtS4gzqfPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtSDPhM6/IM+AzrvOrs66z4TPgc6/ICfOkc+GzrHOr8+BzrXPg863JyDOs865zrEgzr3OsSDOsc+GzrHOuc+Bzq3Pg861z4TOtSDPhM65z4IgzrXPgM65zrvOtc6zzrzOrc69zrXPgiDPg8+Ezq7Ou861z4IuXCIsXG4gICAgICBcIk1vdmVDb2x1bW5IZWxwXCI6IFwizqfPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtSDPhM6xIM+AzrvOrs66z4TPgc6xICfOlc+AzqzOvc+JJyDOus6xzrkgJ86azqzPhM+JJyDOs865zrEgzr3OsSDOsc67zrvOrM6+zrXPhM61IM+EzrfOvSDPg861zrnPgc6sIM61zrzPhs6szr3Ouc+DzrfPgiDPhM+Jzr0gz4PPhM63zrvPjs69IM+Ezr/PhSDPgM6vzr3Osc66zrEuXCIsXG4gICAgICBcIlVua25vd25Db2x1bW5cIjogXCLOhs6zzr3Pic+Dz4TOv1wiLFxuICAgICAgXCJTZWxlY3RDb2x1bW5cIjogXCLOlc+AzrnOu86/zrPOrlwiLFxuICAgICAgXCJBY3Rpb25MaW5rQ29sdW1uXCI6IFwizpXOvc6tz4HOs861zrnOtc+CXCIsXG4gICAgICBcIkRhdGFFcnJvclwiOiB7XG4gICAgICAgIFwiVGl0bGVcIjogXCLOo8+GzqzOu868zrEgzrrOsc+Ezqwgz4TOt869IM+AzrHPgc6xzrvOsc6yzq4gz4TPic69IM60zrXOtM6/zrzOrc69z4nOvVwiLFxuICAgICAgICBcIk1lc3NhZ2VcIjogXCLOo8+Fzr3Orc6yzrcgz4PPhs6szrvOvM6xIM66zrHPhM6sIM+EzrfOvSDPgM6xz4HOsc67zrHOss6uIM+Ez4nOvSDOtM61zrTOv868zq3Ovc+Jzr0uIM6gz4HOv8+Dz4DOsc64zq7Pg8+EzrUgzr7Osc69zqwgzq4gz4TPgc6/z4DOv8+Azr/Ouc6uz4PPhM61IM+EzrEgz4PPhM6/zrnPh861zq/OsSDOsc69zrHOts6uz4TOt8+DzrfPgi5cIlxuICAgICAgfSxcbiAgICAgIFwiRXhwb3J0TGlzdFwiOiBcIs6Vzr7Osc6zz4nOs86uIM67zq/Pg8+EzrHPglwiLFxuICAgICAgXCJFeHBvcnRMaW1pdEV4Y2VlZGVkXCI6IFwizqTOvyDPgM67zq7OuM6/z4Igz4TPic69IM+Dz4TOv865z4fOtc6vz4nOvSDPgM+Bzr/PgiDOtc6+zrHOs8+JzrPOriAoe3tkYXRhTGVuZ3RofX0pIM6+zrXPgM61z4HOvc6szrXOuSDPhM6/IM68zq3Os865z4PPhM6/IM61z4DOuc+Ez4HOtc+Az4TPjCAoe3tleHBvcnRMaW1pdH19KS4gzqDOsc+BzrHOus6xzrvOv8+NzrzOtSDPgM+Bzr/Pg86xz4HOvM+Mz4PPhM61IM+EzrEgz4bOr867z4TPgc6xIM+EzrfPgiDOsc69zrHOts6uz4TOt8+DzrfPgiDOus6xzrkgz4DPgc6/z4PPgM6xzrjOrs+Dz4TOtSDOvs6xzr3OrC5cIixcbiAgICAgIFwiRXhwb3J0UmVzdWx0c1wiOiBcIs6UzrXOtM6/zrzOrc69zrEgzrvOr8+Dz4TOsc+CXCJcbiAgICB9LFxuICAgIFwiVHJ1ZUZhbHNlXCI6IHtcbiAgICAgICAgXCJsb25nXCI6IHtcbiAgICAgICAgICAgIFwiWWVzXCI6IFwizp3Osc65XCIsXG4gICAgICAgICAgICBcIk5vXCI6IFwizozPh865XCJcbiAgICAgICAgfVxuICAgIH0sXG4gICAgXCJTZXR0aW5nc1wiOiB7XG4gICAgICBcIk9wZXJhdGlvbkNvbXBsZXRlZFwiOiBcIs6XIM60zrnOsc60zrnOus6xz4POr86xIM6/zrvOv866zrvOt8+Bz47OuM63zrrOtSDOvM61IM61z4DOuc+Ez4XPh86vzrEuXCJcbiAgICB9LFxuICAgIFwiQWR2YW5jZWRTZWFyY2hcIjoge1xuICAgICAgICBcIkNob29zZVwiOiBcIjzOlc+AzrnOu86tzr7PhM61IM68zrnOsSDOsc69zrHOts6uz4TOt8+Dzrc+XCIsXG4gICAgICAgIFwiQ2hvb3NlRGF0ZVwiOiBcIs6Vz4DOuc67zr/Os86uIM63zrzOtc+Bzr/OvM63zr3Or86xz4JcIixcbiAgICAgICAgXCJTYXZlZFNlYXJjaGVzXCI6IFwizpHPgM6/zrjOt866zrXPhc68zq3Ovc61z4IgzrHOvc6xzrbOt8+Ezq7Pg861zrnPglwiLFxuICAgICAgICBcIlRvZ2dsZURyb3Bkb3duXCIgOiBcIs6VzrzPhs6szr3Ouc+DzrcgzrvOr8+Dz4TOsc+CXCIsXG4gICAgICAgIFwiU2F2ZUN1cnJlbnRTZWFyY2hcIjogXCLOkc+Azr/OuM6uzrrOtc+Fz4POtyDOsc69zrHOts6uz4TOt8+DzrfPglwiLFxuICAgICAgICBcIlNhdmVBc1wiIDogXCLOkc+Azr/OuM6uzrrOtc+Fz4POtyDPic+CXCIsXG4gICAgICAgIFwiU2F2ZVwiIDogXCLOkc+Azr/OuM6uzrrOtc+Fz4POt1wiLFxuICAgICAgICBcIkRlbGV0ZVwiIDogXCLOlM65zrHOs8+BzrHPhs6uXCIsXG4gICAgICAgIFwiTW9yZVwiOiBcIs6gzrXPgc65z4PPg8+Mz4TOtc+BzrFcIixcbiAgICAgICAgXCJMZXNzXCI6IFwizpvOuc6zz4zPhM61z4HOsVwiLFxuICAgICAgICBcIk1vZGFsXCIgOiB7XG4gICAgICAgICAgICBcIlRpdGxlXCIgOiBcIs6Rz4DOv864zq7Ous61z4XPg863IM66z4HOuc+EzrfPgc6vz4nOvSDOsc69zrHOts6uz4TOt8+DzrfPglwiLFxuICAgICAgICAgICAgXCJIZWxwXCIgOiBcIs6fz4HOr8+Dz4TOtSDOrc69zrHOvSDPhM6vz4TOu86/IM6zzrnOsSDPhM6xIM61z4DOuc67zrXOs868zq3Ovc6xIM66z4HOuc+Ezq7Pgc65zrEgzrHOvc6xzrbOrs+EzrfPg863z4IuIM6Rz4XPhM+Mz4Igzr8gz4TOr8+EzrvOv8+CIM64zrEgz4POsc+CIM6yzr/Ot864zq7Pg861zrkgzr3OsSDPhM6xIM+Hz4HOt8+DzrnOvM6/z4DOv865zq7Pg861z4TOtSDOvs6xzr3OrCDPg8+Ezr8gzrzOrc67zrvOv869LlwiLFxuICAgICAgICAgICAgXCJUaXRsZU9uVXNlckVycm9yXCIgOiBcIs6gzrHPgc6xzrrOsc67z44gzrXOuc+DzqzOs861z4TOtSDOrc69zrHOvSDPhM6vz4TOu86/XCIsXG4gICAgICAgICAgICBcIlRpdGxlT25MaXN0QWxyZWFkeUNyZWF0ZWRcIiA6IFwizqTOvyDPjM69zr/OvM6xIM6xz4XPhM+MIM+Hz4HOt8+DzrnOvM6/z4DOv865zrXOr8+EzrHOuSDOrs60zrcuIM6UzrnOsc67zq3Ovs+EzrUgzq3Ovc6xIM60zrnOsc+Gzr/Pgc61z4TOuc66z4wuXCIsXG4gICAgICAgICAgICBcIk5vTGlzdERlZmluZWRcIiA6IFwizpTOtc69IM6tz4fOtc65IM6/z4HOuc+Dz4TOtc6vIM+Ezr8gz4POt868zrXOr86/IM6xz4DOv864zq7Ous61z4XPg863z4Igz4TOt8+CIM67zq/Pg8+EzrHPglwiLFxuICAgICAgICAgICAgXCJFbXB0eUNyaXRlcmlhTGlzdFwiIDogXCLOlM61zr0gzq3Ph861z4TOtSDOus6xzrjOv8+Bzq/Pg861zrkgzrrOsc69zq3Ovc6xIM66z4HOuc+Ezq7Pgc65zr8gzrPOuc6xIM6xz4DOv864zq7Ous61z4XPg863XCIsXG4gICAgICAgICAgICBcIlNhdmVOYW1lTGFiZWxcIiA6IFwizp/Ovc6/zrzOsc+Dzq/OsSDOu86vz4PPhM6xz4JcIixcbiAgICAgICAgICAgIFwiU2F2ZU5hbWVQbGFjZWhvbGRlclwiIDogXCLOlc65z4POrM6zzrXPhM61IM6tzr3Osc69IM+Ezq/PhM67zr9cIixcbiAgICAgICAgICAgIFwiQWNjZXB0XCIgOiBcIs6Rz4DOv864zq7Ous61z4XPg863XCIsXG4gICAgICAgICAgICBcIkRlY2xpbmVcIiA6IFwizpHPgM+Mz4HPgc65z4jOt1wiLFxuICAgICAgICAgICAgXCJDbG9zZVwiIDogXCLOms67zrXOr8+DzrnOvM6/XCJcbiAgICAgICAgfVxuICAgIH0sXG4gICAgXCJBZGRJdGVtc1wiIDoge1xuICAgICAgXCJTZWxlY3RJdGVtc1wiOiBcIs6Vz4DOuc67zq3Ovs+EzrUgz4PPhM6/zrnPh861zq/OsVwiLFxuICAgIH1cbn07XG4iLCIvLyB0c2xpbnQ6ZGlzYWJsZTogcXVvdGVtYXJrXG4vLyB0c2xpbnQ6ZGlzYWJsZTogbWF4LWxpbmUtbGVuZ3RoXG5leHBvcnQgY29uc3QgVEFCTEVTX0VOID0ge1xuICAgIFwiVGFibGVzXCI6IHtcbiAgICAgIFwiRXhwb3J0XCI6IFwiRXhwb3J0XCIsXG4gICAgICAgIFwiTW9yZVwiOiBcIk1vcmVcIixcbiAgICAgICAgXCJTZWFyY2hcIjogXCJTZWFyY2hcIixcbiAgICAgICAgXCJTZWFyY2hQbGFjZWhvbGRlclwiOiBcIlNlYXJjaC4uLlwiLFxuICAgICAgICBcIkdyb3VwQnlcIjogXCJHcm91cCBieVwiLFxuICAgICAgICBcIk5vdERlZmluZWRcIjogXCJOb3QgZGVmaW5lZFwiLFxuICAgICAgICBcIkRhdGFUYWJsZVwiOiB7XG4gICAgICAgICAgICBcInBhZ2luYXRlXCI6IHtcbiAgICAgICAgICAgICAgICBcImZpcnN0XCI6IFwiRmlyc3RcIixcbiAgICAgICAgICAgICAgICBcImxhc3RcIjogXCJMYXN0XCIsXG4gICAgICAgICAgICAgICAgXCJuZXh0XCI6IFwiTmV4dFwiLFxuICAgICAgICAgICAgICAgIFwicHJldmlvdXNcIjogXCJQcmV2aW91c1wiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJpbmZvXCI6IFwiU2hvd2luZyBfU1RBUlRfIHRvIF9FTkRfIG9mIF9UT1RBTF8gZW50cmllc1wiLFxuICAgICAgICAgICAgXCJpbmZvRW1wdHlcIjogXCJTaG93aW5nIDAgdG8gMCBvZiAwIGVudHJpZXNcIixcbiAgICAgICAgICAgIFwicHJvY2Vzc2luZ1wiOiBcIlByb2Nlc3NpbmcgZGF0YS4uLlwiLFxuICAgICAgICAgICAgXCJlbXB0eVRhYmxlXCI6IFwiVGhlcmUgYXJlIG5vIG1hdGNoaW5nIHJlY29yZHMuXCJcbiAgICAgICAgfSxcbiAgICAgIFwiQ29sdW1uRGlzcGxheVwiOiBcIkNvbHVtbiBEaXNwbGF5XCIsXG4gICAgICBcIkNvbHVtbkRpc3BsYXlJbmZvXCI6IFwizpXPgM65zrvOrc6+z4TOtSDPhM65z4Igz4PPhM6uzrvOtc+CIM+Azr/PhSDOuM6tzrvOtc+EzrUgzr3OsSDOtc68z4bOsc69zq/Ots6/zr3PhM6xzrkuXCIsXG4gICAgICBcIlNhdmVcIjogXCJTYXZlXCIsXG4gICAgICBcIkFwcGx5XCI6IFwiQXBwbHlcIixcbiAgICAgIFwiQ2FuY2VsXCI6IFwiQ2FuY2VsXCIsXG4gICAgICBcIlJlY29yZHNQZXJQYWdlXCI6IFwiSXRlbXMgcGVyIHBhZ2VcIixcbiAgICAgIFwiUGFnZUluZm9cIjogXCJ7e3N0YXJ0fX0te3tlbmR9fSBvZiB7e3JlY29yZHNUb3RhbH19XCIsXG4gICAgICBcIlNlYXJjaExpc3RQbGFjZUhvbGRlclwiOiBcIlNlYXJjaCBpbiBsaXN0Li4uXCIsXG4gICAgICBcIkZpbHRlcnNcIjogXCJGaWx0ZXJzXCIsXG4gICAgICBcIkFsbFwiOiBcIkFsbFwiLFxuICAgICAgXCJBZGRJdGVtXCI6IFwiQWRkIGl0ZW1cIixcbiAgICAgIFwiRW1wdHlUYWJsZVRpdGxlXCI6IFwiVGhlcmUgYXJlIG5vIG1hdGNoaW5nIHJlY29yZHMuXCIsXG4gICAgICBcIkVtcHR5VGFibGVNZXNzYWdlXCI6IFwiUGxlYXNlIHRyeSB0byB1c2Ugb3RoZXIga2V5d29yZHMgb3Igc2VhcmNoIHBhcmFtZXRlcnMuXCIsXG4gICAgICBcIlJlbW92ZUl0ZW1cIjogXCJSZW1vdmUgaXRlbVwiLFxuICAgICAgXCJJdGVtc1wiOiBcIml0ZW1zXCIsXG4gICAgICBcIkl0ZW1cIjogXCJpdGVtXCIsXG4gICAgXCJBZGRJdGVtTWVzc2FnZVwiOiB7XG4gICAgICBcInRpdGxlXCI6IFwiQWRkIGl0ZW1cIixcbiAgICAgIFwib25lXCI6IFwiQSBuZXcgaXRlbSBoYXMgYmVlbiBhZGRlZCBzdWNjZXNzZnVsbHkuXCIsXG4gICAgICBcIm1hbnlcIjogXCJ7e3ZhbHVlfX0gbmV3IGl0ZW1zIGhhdmUgYmVlbiBhZGRlZCBzdWNjZXNzZnVsbHkuXCJcbiAgICB9LFxuICAgIFwiUmVtb3ZlSXRlbU1lc3NhZ2VcIjoge1xuICAgICAgXCJ0aXRsZVwiOiBcIlJlbW92ZSBpdGVtc1wiLFxuICAgICAgXCJvbmVcIjogXCJBbiBpdGVtIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSByZW1vdmVkLlwiLFxuICAgICAgXCJtYW55XCI6IFwie3t2YWx1ZX19IGl0ZW1zIGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgcmVtb3ZlZC5cIlxuICAgIH0sXG4gICAgXCJSZW1vdmVJdGVtc1RpdGxlXCI6IFwiUmVtb3ZlIGl0ZW1zXCIsXG4gICAgXCJSZW1vdmVJdGVtc01lc3NhZ2VcIjogXCJZb3UgYXJlIGdvaW5nIHRvIHJlbW92ZSBvbmUgb3IgbW9yZSBpbnN0cnVjdG9yIGNvdXJzZXMuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/XCIsXG4gICAgICBcIlNlbGVjdEFsbFwiOiBcIlNlbGVjdCBhbGxcIixcbiAgICAgIFwiQ2xlYXJTZWxlY3Rpb25cIjogXCJDbGVhciBzZWxlY3Rpb25cIixcbiAgICAgIFwiQWN0aW9uc1wiOiB7XG4gICAgICAgIFwiTGFiZWxcIjogXCJFZGl0XCIsXG4gICAgICAgIFwiU3RhcnRcIjogXCJTdGFydFwiLFxuICAgICAgICBcIkFjdGlvbk1lc3NhZ2VcIjoge1xuICAgICAgICAgIFwiTm9uZVwiOiBcIlRoZXJlIGlzIG5vIHNlbGVjdGVkIGl0ZW0gdGhhdCBtZWV0cyBhY3Rpb24gcmVxdWlyZW1lbnRzLlwiLFxuICAgICAgICAgIFwiT25lXCI6IFwiWW91IGhhdmUgc2VsZWN0ZWQgb25lIGl0ZW0gdGhhdCBtZWV0cyBhY3Rpb24gcmVxdWlyZW1lbnRzLlwiLFxuICAgICAgICAgIFwiTWFueVwiOiBcIllvdSBoYXZlIHNlbGVjdGVkIHt7bGVuZ3RofX0gaXRlbXMgdGhhdCBtZWV0IGFjdGlvbiByZXF1aXJlbWVudHMuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJDb21wbGV0ZWRXaXRoRXJyb3JzXCI6IHtcbiAgICAgICAgICBcIlRpdGxlXCI6IFwiVGhlIG9wZXJhdGlvbiB3YXMgY29tcGxldGVkIHdpdGggZXJyb3JzLlwiLFxuICAgICAgICAgIFwiRGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgICAgXCJPbmVcIjogXCJPbmUgaXRlbSBoYXMgbm90IGJlZW4gdXBkYXRlZCBkdWUgdG8gYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZXhlY3V0aW5nIHByb2Nlc3MuXCIsXG4gICAgICAgICAgICBcIk1hbnlcIjogXCJ7e2Vycm9yc319IGl0ZW1zIGhhdmUgbm90IGJlZW4gdXBkYXRlZCBkdWUgdG8gYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZXhlY3V0aW5nIHByb2Nlc3MuXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiQ29tcGxldGVkV2l0aFN1Y2Nlc3NcIjoge1xuICAgICAgICAgIFwiVGl0bGVcIjogXCJUaGUgb3BlcmF0aW9uIHdhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcIlNlbGVjdENvbHVtbnNcIjogXCJTZWxlY3QgY29sdW1uc1wiLFxuICAgICAgXCJNb3ZlVXBcIjogXCJNb3ZlIHVwXCIsXG4gICAgICBcIk1vdmVEb3duXCI6IFwiTW92ZSBkb3duXCIsXG4gICAgICBcIkFkZENvbHVtblwiOiBcIkFkZFwiLFxuICAgICAgXCJSZW1vdmVDb2x1bW5cIjogXCJSZW1vdmVcIixcbiAgICAgIFwiU2VsZWN0Q29sdW1uSGVscFwiOiBcIlNlbGVjdCBvbmUgb3IgbW9yZSBjb2x1bW5zIGFuZCBwcmVzcyAnQWRkJyBidXR0b24gdG8gaW5jbHVkZSB0aGVtIGluIHRhYmxlLiBVc2UgJ1JlbW92ZScgYnV0dG9uIHRvIGV4Y2x1ZGUgb25lIG9yIG1vcmUgY29sdW1ucyBmcm9tIHZpZXcuXCIsXG4gICAgICBcIk1vdmVDb2x1bW5IZWxwXCI6IFwiVXNlICdNb3ZlIHVwJyBhbmQgJ01vdmUgZG93bicgYnV0dG9ucyB0byBjaGFuZ2UgY29sdW1uIG9yZGVyLlwiLFxuICAgICAgXCJVbmtub3duQ29sdW1uXCI6IFwiVW5rbm93blwiLFxuICAgICAgXCJTZWxlY3RDb2x1bW5cIjogXCJTZWxlY3RcIixcbiAgICAgIFwiQWN0aW9uTGlua0NvbHVtblwiOiBcIkFjdGlvbnNcIixcbiAgICAgIFwiRGF0YUVycm9yXCI6IHtcbiAgICAgICAgXCJUaXRsZVwiOiBcIkVycm9yIHdoaWxlIGdldHRpbmcgZGF0YVwiLFxuICAgICAgICBcIk1lc3NhZ2VcIjogXCJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBnZXR0aW5nIGRhdGEuIFBsZWFzZSB0cnkgYWdhaW4gb3IgY2hhbmdlIHlvdXIgY3JpdGVyaWEuXCJcbiAgICAgIH0sXG4gICAgICBcIkV4cG9ydExpc3RcIjogXCJFeHBvcnQgbGlzdFwiLFxuICAgICAgXCJFeHBvcnRMaW1pdEV4Y2VlZGVkXCI6IFwiVGhlIG51bWJlciBvZiBpdGVtcyB0aGF0IGFyZSB0byBiZSBleHBvcnRlZCAoe3tkYXRhTGVuZ3RofX0pIGV4Y2VlZHMgdGhlIGV4cG9ydCBsaW1pdCAoe3tleHBvcnRMaW1pdH19KS4gUGxlYXNlIGFwcGx5IG1vcmUgc3BlY2lmaWMgZmlsdGVycyB0byB0aGUgc2VhcmNoLlwiLFxuICAgICAgXCJFeHBvcnRSZXN1bHRzXCI6IFwiRXhwb3J0ZWQgbGlzdFwiXG4gICAgfSxcbiAgICBcIlRydWVGYWxzZVwiOiB7XG4gICAgICAgIFwibG9uZ1wiOiB7XG4gICAgICAgICAgICBcIlllc1wiOiBcIlllc1wiLFxuICAgICAgICAgICAgXCJOb1wiOiBcIk5vXCJcbiAgICAgICAgfVxuICAgIH0sXG4gICAgXCJTZXR0aW5nc1wiOiB7XG4gICAgICBcIk9wZXJhdGlvbkNvbXBsZXRlZFwiOiBcIlRoZSBvcGVyYXRpb24gd2FzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCJcbiAgICB9LFxuICAgIFwiQWR2YW5jZWRTZWFyY2hcIjoge1xuICAgICAgICBcIkNob29zZVwiOiBcIjxTZWxlY3QgYSBzYXZlZCBzZWFyY2g+XCIsXG4gICAgICAgIFwiQ2hvb3NlRGF0ZVwiOiBcIkNob29zZSBkYXRlXCIsXG4gICAgICAgIFwiU2F2ZWRTZWFyY2hlc1wiOiBcIlNhdmVkIHNlYXJjaGVzXCIsXG4gICAgICAgIFwiVG9nZ2xlRHJvcGRvd25cIiA6IFwiVG9nZ2xlIERyb3Bkb3duXCIsXG4gICAgICAgIFwiU2F2ZUN1cnJlbnRTZWFyY2hcIjogXCJTYXZlIHNlYXJjaFwiLFxuICAgICAgICBcIlNhdmVBc1wiIDogXCJTYXZlIGFzLi4uXCIsXG4gICAgICAgIFwiU2F2ZVwiIDogXCJTYXZlXCIsXG4gICAgICAgIFwiRGVsZXRlXCIgOiBcIlJlbW92ZVwiLFxuICAgICAgICBcIk1vcmVcIjogXCJNb3JlXCIsXG4gICAgICAgIFwiTGVzc1wiOiBcIkxlc3NcIixcbiAgICAgICAgXCJNb2RhbFwiIDoge1xuICAgICAgICAgICAgXCJUaXRsZVwiIDogXCJTYXZlIGN1cnJlbnQgc2VhcmNoIGNyaXRlcmlhXCIsXG4gICAgICAgICAgICBcIkhlbHBcIiA6IFwiUGxlYXNlIGFkZCBhIHRpdGxlIGZvciB0aGUgZ2l2ZW4gc2VhcmNoIGNyaXRlcmlhLiBUaGlzIHRpdGxlIHdpbGwgaGVscCB5b3UgdG8gdXNlIHRob3NlIGNyaXRlcmlhIGFnYWluIGluIHRoZSBmdXR1cmUuXCIsXG4gICAgICAgICAgICBcIlRpdGxlT25Vc2VyRXJyb3JcIiA6IFwiUGxlYXNlIHVzZSBhIHZhbGlkIG5hbWUgZm9yIHlvdXIgbGlzdFwiLFxuICAgICAgICAgICAgXCJUaXRsZU9uTGlzdEFscmVhZHlDcmVhdGVkXCIgOiBcIk5hbWUgYWxyZWFkeSBpbiB1c2UuIFBsZWFzZSBjaG9vc2UgYSBkaWZmZXJlbnQgb25lXCIsXG4gICAgICAgICAgICBcIk5vTGlzdERlZmluZWRcIiA6IFwiQ2Fubm90IGRlZmluZSB1c2VyIHN0b3JhZ2Uga2V5LlwiLFxuICAgICAgICAgICAgXCJFbXB0eUNyaXRlcmlhTGlzdFwiIDogXCJQbGVhc2UgZGVmaW5lIHNlYXJjaCBjcml0ZXJpYSBiZWZvcmUgc2F2ZS5cIixcbiAgICAgICAgICAgIFwiU2F2ZU5hbWVMYWJlbFwiIDogXCJMaXN0IG5hbWVcIixcbiAgICAgICAgICAgIFwiU2F2ZU5hbWVQbGFjZWhvbGRlclwiIDogXCJUeXBlIGEgdGl0bGUgaGVyZS4uLlwiLFxuICAgICAgICAgICAgXCJBY2NlcHRcIiA6IFwiU2F2ZVwiLFxuICAgICAgICAgICAgXCJEZWNsaW5lXCIgOiBcIkRlY2xpbmVcIixcbiAgICAgICAgICAgIFwiQ2xvc2VcIiA6IFwiQ2xvc2VcIlxuICAgICAgICB9XG4gICAgfSxcbiAgXCJBZGRJdGVtc1wiIDoge1xuICAgIFwiU2VsZWN0SXRlbXNcIjogXCJTZWxlY3QgaXRlbXNcIixcbiAgfVxufTtcbiIsImltcG9ydCB7IEFjdGlvbiB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcblxuZXhwb3J0IGVudW0gVGFibGVBY3Rpb25UeXBlcyB7XG4gIExvYWRGaWx0ZXIgPSAnW1RhYmxlXSBMb2FkIEZpbHRlcicsXG4gIEFwcGVuZEZpbHRlciA9ICdbVGFibGVdIEFwcGVuZCBGaWx0ZXInLFxuICBBcHBlbmRTdGF0ZSA9ICdbVGFibGVdIEFwcGVuZCBTdGF0ZSdcbn1cblxuZXhwb3J0IGNsYXNzIExvYWRGaWx0ZXIgaW1wbGVtZW50cyBBY3Rpb24ge1xuICByZWFkb25seSB0eXBlID0gVGFibGVBY3Rpb25UeXBlcy5Mb2FkRmlsdGVyO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZykge31cbn1cblxuZXhwb3J0IGNsYXNzIEFwcGVuZEZpbHRlciBpbXBsZW1lbnRzIEFjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBUYWJsZUFjdGlvblR5cGVzLkFwcGVuZEZpbHRlcjtcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGlkOiBzdHJpbmcsIHB1YmxpYyByZWFkb25seSBmaWx0ZXI6IGFueSkge31cbn1cblxuZXhwb3J0IGNsYXNzIEFwcGVuZFN0YXRlIGltcGxlbWVudHMgQWN0aW9uIHtcbiAgcmVhZG9ubHkgdHlwZSA9IFRhYmxlQWN0aW9uVHlwZXMuQXBwZW5kU3RhdGU7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBpZDogc3RyaW5nLCBwdWJsaWMgcmVhZG9ubHkgZGF0YTogYW55KSB7fVxufVxuXG5leHBvcnQgdHlwZSBUYWJsZUFjdGlvbnMgPSBMb2FkRmlsdGVyIHwgQXBwZW5kRmlsdGVyIHwgQXBwZW5kU3RhdGU7XG4iLCJpbXBvcnQge1xuICBBY3Rpb25SZWR1Y2VyTWFwLFxuICBjcmVhdGVGZWF0dXJlU2VsZWN0b3IsXG4gIGNyZWF0ZVNlbGVjdG9yLFxufSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgVGFibGVBY3Rpb25zLCBUYWJsZUFjdGlvblR5cGVzIH0gZnJvbSAnLi4vYWN0aW9ucy90YWJsZS5hY3Rpb25zJztcblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZVN0YXRlIHtcbiAgZmlsdGVyPzogYW55O1xuICBvcmRlcj86IGFueTtcbiAgdGFibGU/OiBhbnk7XG59XG5cbmV4cG9ydCBjb25zdCBpbml0aWFsU3RhdGUgPSB7XG59O1xuXG5leHBvcnQgY29uc3QgdGFibGVJbml0aWFsU3RhdGU6IFRhYmxlU3RhdGUgPSB7XG4gIGZpbHRlcjoge30sXG4gIG9yZGVyOiBbXVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRhYmxlUmVkdWNlcihzdGF0ZSA9IGluaXRpYWxTdGF0ZSwgYWN0aW9uOiBUYWJsZUFjdGlvbnMpOiB7IFtpZDogc3RyaW5nXTogVGFibGVTdGF0ZTsgfSB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcblxuICAgIGNhc2UgVGFibGVBY3Rpb25UeXBlcy5Mb2FkRmlsdGVyOlxuICAgICAgcmV0dXJuIHN0YXRlW2FjdGlvbi5pZF07XG4gICAgY2FzZSBUYWJsZUFjdGlvblR5cGVzLkFwcGVuZEZpbHRlcjpcbiAgICAgICAgc3RhdGVbYWN0aW9uLmlkXSA9IHtcbiAgICAgICAgICAuLi5zdGF0ZVthY3Rpb24uaWRdLFxuICAgICAgICAgIGZpbHRlcjogY2xvbmVEZWVwKGFjdGlvbi5maWx0ZXIpXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzdGF0ZTtcblxuICAgIGNhc2UgVGFibGVBY3Rpb25UeXBlcy5BcHBlbmRTdGF0ZTpcbiAgICAgICAgICBzdGF0ZVthY3Rpb24uaWRdID0ge1xuICAgICAgICAgICAgLi4uc3RhdGVbYWN0aW9uLmlkXSxcbiAgICAgICAgICAgIHRhYmxlOiBhY3Rpb24uZGF0YVxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3hUYWJsZXNTdGF0ZSB7XG4gIHRhYmxlczoge1xuICAgIFtpZDogc3RyaW5nXTogVGFibGVTdGF0ZTtcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IHRhYmxlUmVkdWNlcnM6IEFjdGlvblJlZHVjZXJNYXA8Tmd4VGFibGVzU3RhdGU+ID0ge1xuICB0YWJsZXM6IHRhYmxlUmVkdWNlcixcbn07XG5cbmV4cG9ydCBjb25zdCBmZWF0dXJlTmFtZSA9ICd0YWJsZXMnO1xuXG5leHBvcnQgY29uc3QgZ2V0VGFibGVzU3RhdGUgPSBjcmVhdGVGZWF0dXJlU2VsZWN0b3IoZmVhdHVyZU5hbWUpO1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0VGFibGUgPSBjcmVhdGVTZWxlY3RvcihcbiAgZ2V0VGFibGVzU3RhdGUsXG4gIChzdGF0ZTogTmd4VGFibGVzU3RhdGUsIHByb3BzOiB7IGlkOiBzdHJpbmcgfSkgPT4ge1xuICAgIHJldHVybiBzdGF0ZS50YWJsZXNbcHJvcHMuaWRdO1xuICB9XG4pO1xuIiwiaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsIE9wdGlvbmFsLCBJbnB1dCwgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHNlbGVjdCwgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBOZ3hUYWJsZXNTdGF0ZSB9IGZyb20gJy4uL3JlZHVjZXJzJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgKiBhcyBmcm9tVGFibGVzIGZyb20gJy4uL3JlZHVjZXJzJztcbmltcG9ydCB7IGZpcnN0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXBwZW5kU3RhdGUgfSBmcm9tICcuLi9hY3Rpb25zL3RhYmxlLmFjdGlvbnMnO1xuXG5ARGlyZWN0aXZlKFxuICAgIHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBkaXJlY3RpdmUtc2VsZWN0b3JcbiAgICAgICAgc2VsZWN0b3I6ICdbdGFibGVTdGF0ZV0nLFxuICAgIH0sXG4pXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVTdGF0ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBASW5wdXQoKSB0YWJsZVN0YXRlPzogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB0YWJsZTogQWR2YW5jZWRUYWJsZUNvbXBvbmVudCxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBzdG9yZTogU3RvcmU8Tmd4VGFibGVzU3RhdGU+KSB7XG4gICAgfVxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zdG9yZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50YWJsZS5zdGF0ZVNhdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLnRhYmxlLnN0YXRlTG9hZENhbGxiYWNrID0gKHNldHRpbmdzLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5waXBlKHNlbGVjdChmcm9tVGFibGVzLnNlbGVjdFRhYmxlLCB7IGlkOiB0aGlzLnRhYmxlU3RhdGUgYXMgc3RyaW5nIH0pLCBmaXJzdCgpKS5zdWJzY3JpYmUoKHN0YXRlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhzdGF0ZSAmJiBzdGF0ZS50YWJsZSk7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLnRhYmxlICYmIHN0YXRlLnRhYmxlLkNvbFJlb3JkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZS5kYXRhVGFibGUuY29sUmVvcmRlci5vcmRlcihzdGF0ZS50YWJsZS5Db2xSZW9yZGVyLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IGZpcnN0RHJhdyA9IHRydWU7XG4gICAgICAgIHRoaXMudGFibGUuZHJhdy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGZpcnN0RHJhdyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy50YWJsZS5kYXRhVGFibGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpcnN0RHJhdyA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgbG9hZGVTdGF0ZVNldHRpbmdzOiB7XG4gICAgICAgICAgICAgICAgb1NhdmVkU3RhdGU/OiB7XG4gICAgICAgICAgICAgICAgICAgIENvbFJlb3JkZXI/OiBudW1iZXJbXTtcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcFJvdzogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVNjcm9sbFRvcDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVJvd1RvcDogbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9ID0gdGhpcy50YWJsZS5kYXRhVGFibGUuc2V0dGluZ3MoKVswXTtcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyU2V0dGluZ3MgPSBsb2FkZVN0YXRlU2V0dGluZ3Mub1NhdmVkU3RhdGUgJiZcbiAgICAgICAgICAgICAgICBsb2FkZVN0YXRlU2V0dGluZ3Mub1NhdmVkU3RhdGUuc2Nyb2xsZXI7XG4gICAgICAgICAgICBpZiAoc2Nyb2xsZXJTZXR0aW5ncyAmJiBzY3JvbGxlclNldHRpbmdzLnRvcFJvdykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy50YWJsZS5kYXRhVGFibGUuc2Nyb2xsZXIoKTtcbiAgICAgICAgICAgICAgICBzY3JvbGxlci5zY3JvbGxUb1JvdyhzY3JvbGxlclNldHRpbmdzLnRvcFJvdywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRhYmxlLnN0YXRlU2F2ZUNhbGxiYWNrID0gKHNldHRpbmdzLCBkYXRhKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBBcHBlbmRTdGF0ZSh0aGlzLnRhYmxlU3RhdGUgYXMgc3RyaW5nLCBkYXRhKSk7XG4gICAgICAgIH07XG4gICAgfVxufVxuIiwiaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsIE9wdGlvbmFsLCBJbnB1dCwgT25Jbml0LCBPbkRlc3Ryb3lcbiAgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHNlbGVjdCwgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBBcHBlbmRGaWx0ZXIgfSBmcm9tICcuLi9hY3Rpb25zL3RhYmxlLmFjdGlvbnMnO1xuaW1wb3J0IHsgQWR2YW5jZWRUYWJsZVNlYXJjaENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUtc2VhcmNoLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ3hUYWJsZXNTdGF0ZSwgc2VsZWN0VGFibGUgfSBmcm9tICcuLi9yZWR1Y2Vycyc7XG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVTdGF0ZSB9IGZyb20gJy4vYWR2YW5jZS10YWJsZS1zdGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSAnbG9kYXNoJztcblxuICBleHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZVNlYXJjaENvbXBvbmVudE5vdE51bGwgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICBzdXBlcignQWR2YW5jZWQgdGFibGUgc2VhcmNoIGNvbXBvbmVudCBjYW5ub3QgYmUgZW1wdHkgYXQgdGhpcyBjb250ZXh0LicpO1xuICAgIH1cbiAgfVxuXG4gIEBEaXJlY3RpdmUoXG4gICB7XG4gICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogZGlyZWN0aXZlLXNlbGVjdG9yXG4gICAgIHNlbGVjdG9yOiAnW3NlYXJjaFN0YXRlXScsXG4gICB9LFxuICApXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkaXJlY3RpdmUtY2xhc3Mtc3VmZml4XG4gIGV4cG9ydCBjbGFzcyBBZHZhbmNlZFNlYXJjaFN0YXRlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQElucHV0KCkgc2VhcmNoU3RhdGU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBmaWx0ZXJDaGFuZ2VTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSB0YWJsZUluaXRTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgc2VhcmNoOiBBZHZhbmNlZFRhYmxlU2VhcmNoQ29tcG9uZW50LFxuICAgICAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgc3RvcmU6IFN0b3JlPE5neFRhYmxlc1N0YXRlPikge1xuICAgIH1cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLnN0b3JlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VhcmNoID09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQWR2YW5jZWRUYWJsZVNlYXJjaENvbXBvbmVudE5vdE51bGwoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNlYXJjaC50YWJsZSkge1xuICAgICAgICAgIC8vIHNldCBhdXRvIGxvYWQgdG8gZmFsc2VcbiAgICAgICAgICB0aGlzLnNlYXJjaC50YWJsZS5hdXRvTG9hZCA9IGZhbHNlO1xuICAgICAgICAgIC8vIGhhbmRsZSBmaWx0ZXJpbmdcbiAgICAgICAgICB0aGlzLmZpbHRlckNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuc2VhcmNoLmZpbHRlckNoYW5nZS5zdWJzY3JpYmUoKGZpbHRlcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblNlYXJjaEZpbHRlcihmaWx0ZXIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIC8vIGFwcGx5IHRhYmxlIHN0YXRlXG4gICAgICAgICAgdGhpcy5hcHBseVRhYmxlU3RhdGUoKTtcbiAgICAgICAgICAvLyBoYW5kbGUgdGFibGUgaW5pdFxuICAgICAgICAgIHRoaXMudGFibGVJbml0U3Vic2NyaXB0aW9uID0gdGhpcy5zZWFyY2gudGFibGUuaW5pdC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub25UYWJsZUluaXQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXBwbHlUYWJsZVN0YXRlKCkge1xuICAgICAgaWYgKHRoaXMuc2VhcmNoLnRhYmxlKSB7XG4gICAgICAgIC8vIGhhbmRsZSB0YWJsZSBzdGF0ZSAodmlhIGRpcmVjdGl2ZSlcbiAgICAgICAgY29uc3QgdGFibGVTdGF0ZSA9IG5ldyBBZHZhbmNlZFRhYmxlU3RhdGUodGhpcy5zZWFyY2gudGFibGUsIHRoaXMuc3RvcmUpO1xuICAgICAgICB0YWJsZVN0YXRlLnRhYmxlU3RhdGUgPSB0aGlzLnNlYXJjaFN0YXRlIGFzIHN0cmluZztcbiAgICAgICAgdGFibGVTdGF0ZS5uZ09uSW5pdCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblRhYmxlSW5pdCgpIHtcbiAgICAgIHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2VsZWN0VGFibGUsIHsgaWQ6IHRoaXMuc2VhcmNoU3RhdGUgYXMgc3RyaW5nfSksIGZpcnN0KCkpLnN1YnNjcmliZSgoc3RhdGU6IGFueSkgPT4ge1xuICAgICAgICAvLyB1c2Ugb3JkZXJcbiAgICAgICAgaWYgKHN0YXRlKSB7XG4gICAgICAgICAgaWYgKHN0YXRlLm9yZGVyICYmIHN0YXRlLm9yZGVyLmxlbmd0aCAmJiB0aGlzLnNlYXJjaC50YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2gudGFibGUuZGF0YVRhYmxlLm9yZGVyKHN0YXRlLm9yZGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gdXNlIHRleHQgc2VhcmNoXG4gICAgICAgICAgaWYgKHN0YXRlLmZpbHRlciAmJiBzdGF0ZS5maWx0ZXIucSAmJiB0aGlzLnNlYXJjaC50YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2gudGV4dCA9IHN0YXRlLmZpbHRlci5xO1xuICAgICAgICAgICAgdGhpcy5zZWFyY2guY29sbGFwc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlYXJjaC50YWJsZS5zZWFyY2godGhpcy5zZWFyY2gudGV4dCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHVzZSBwcmVkZWZpbmVkIHNlYXJjaFxuICAgICAgICAgIGlmIChzdGF0ZS5maWx0ZXIgJiYgc3RhdGUuZmlsdGVyLnMpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoLnNlbGVjdGVkTGlzdCA9IHRoaXMuc2VhcmNoLnVzZXJTZWFyY2hMaXN0LmZpbmQoKGl0ZW06IHsgbmFtZTogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ubmFtZSA9PT0gc3RhdGUuZmlsdGVyLnM7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlYXJjaC5zZWFyY2goKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN0YXRlLmZpbHRlcikge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHN0YXRlLmZpbHRlcikubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIC8vIHNldCBjb2xsYXBzZWQgdG8gZmFsc2UgKGFkdmFuY2VkIHNlYXJjaClcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2guY29sbGFwc2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMuc2VhcmNoLmZpbHRlciA9IHN0YXRlLmZpbHRlcjtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoLnNlYXJjaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBlbnN1cmUgZW1wdHkgZmlsdGVyIGF0IHRoaXMgbW9tZW50XG4gICAgICAgICAgLy8gYmVjYXVzZSBzZWFyY2goKSBmdW5jdGlvbiB0cmlnZ2VycyBhIHN0b3JlIGRpc3BhdGNoXG4gICAgICAgICAgdGhpcy5zZWFyY2guZmlsdGVyID0ge307XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoLnNlYXJjaCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uU2VhcmNoRmlsdGVyKGZpbHRlcjogYW55KSB7XG4gICAgICBmaWx0ZXIgPSBpc0VtcHR5KGZpbHRlcikgPyBudWxsIDogZmlsdGVyO1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgQXBwZW5kRmlsdGVyKHRoaXMuc2VhcmNoU3RhdGUgYXMgc3RyaW5nLCBmaWx0ZXIpKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLmZpbHRlckNoYW5nZVN1YnNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLmZpbHRlckNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudGFibGVJbml0U3Vic2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMudGFibGVJbml0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgRGlyZWN0aXZlLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIE5hdmlnYXRpb25TdGFydCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlU2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1zZWFyY2guY29tcG9uZW50JztcbmltcG9ydCB7IE5neFRhYmxlc1N0YXRlIH0gZnJvbSAnLi4vcmVkdWNlcnMnO1xuaW1wb3J0IHsgQWR2YW5jZWRTZWFyY2hTdGF0ZSB9IGZyb20gJy4vYWR2YW5jZS1zZWFyY2gtc3RhdGUuZGlyZWN0aXZlJztcblxuQERpcmVjdGl2ZSh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogZGlyZWN0aXZlLXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnW3JvdXRlclNlYXJjaFN0YXRlXSdcbn0pXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkU2VhcmNoUm91dGVyU3RhdGUgZXh0ZW5kcyBBZHZhbmNlZFNlYXJjaFN0YXRlIGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xuICBwcml2YXRlIF9yb3V0ZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBfZW50ZXJpbmdTdGF0ZSA9IHRydWU7XG4gIHByaXZhdGUgX2FwcGx5U3RhdGUgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgc2VhcmNoOiBBZHZhbmNlZFRhYmxlU2VhcmNoQ29tcG9uZW50LFxuICAgIEBPcHRpb25hbCgpIHByb3RlY3RlZCBzdG9yZTogU3RvcmU8Tmd4VGFibGVzU3RhdGU+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3JvdXRlcjogUm91dGVyXG4gICkge1xuICAgIC8vIGNhbGwgc3VwZXIgY29uc3RydWN0b3JcbiAgICBzdXBlcihzZWFyY2gsIHN0b3JlKTtcbiAgICAvLyBzZXQgc2VhcmNoIHN0YXRlIGR5bmFtaWNhbGx5IGFjY29yZGluZyB0byByb3V0ZVxuICAgIHRoaXMuX3JvdXRlclN1YnNjcmlwdGlvbiA9IHRoaXMuX3JvdXRlci5ldmVudHNcbiAgICAgIC5waXBlKGZpbHRlcigoZXZlbnQpID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0IHx8IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpXG4gICAgICAuc3Vic2NyaWJlKChldmVudDogTmF2aWdhdGlvblN0YXJ0IHwgTmF2aWdhdGlvbkVuZCkgPT4ge1xuICAgICAgICAvLyBjYXB0dXJlIHVybHMgcmVnYXJkaW5nIHRhYiBjaGFuZ2luZyB3aGlsZSB0aGUgY29tcG9uZW50IGlzIGFjdGl2ZVxuICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQgJiYgIXRoaXMuX2VudGVyaW5nU3RhdGUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gc2V0IHNlYXJjaCBzdGF0ZVxuICAgICAgICAgICAgdGhpcy5zZWFyY2hTdGF0ZSA9IG5ldyBVUkwoZXZlbnQudXJsLCBsb2NhdGlvbi5vcmlnaW4pLnBhdGhuYW1lO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSB0cnlpbmcgdG8gc2V0IHNlYXJjaCBzdGF0ZSBmb3IgdGhlIGN1cnJlbnQgdGFibGUnLCBlcnIpO1xuICAgICAgICAgICAgLy8gZmFsbGJhY2sgdG8gZXZlbnQgdXJsXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFN0YXRlID0gZXZlbnQudXJsO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB0b29nbGUgYXBwbHlTdGF0ZVxuICAgICAgICAgIHRoaXMuX2FwcGx5U3RhdGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNhcHR1cmUgdXJsIG9mIHRoZSBmaXJzdCBhY3RpdmF0aW9uIG9mIHRoZSBjb21wb25lbnQgKGUuZy4gY29taW5nIGZyb20gYW5vdGhlciByb3V0ZSlcbiAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCAmJiB0aGlzLl9lbnRlcmluZ1N0YXRlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIHNldCBzZWFyY2ggc3RhdGVcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoU3RhdGUgPSBuZXcgVVJMKGV2ZW50LnVybEFmdGVyUmVkaXJlY3RzLCBsb2NhdGlvbi5vcmlnaW4pLnBhdGhuYW1lO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSB0cnlpbmcgdG8gc2V0IHNlYXJjaCBzdGF0ZSBmb3IgdGhlIGN1cnJlbnQgdGFibGUnLCBlcnIpO1xuICAgICAgICAgICAgLy8gZmFsbGJhY2sgdG8gZXZlbnQgdXJsQWZ0ZXJSZWRpcmVjdHNcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoU3RhdGUgPSBldmVudC51cmxBZnRlclJlZGlyZWN0cztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gdG9nZ2xlIGVudGVyaW5nU3RhdGVcbiAgICAgICAgICB0aGlzLl9lbnRlcmluZ1N0YXRlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2FwcGx5U3RhdGUpIHtcbiAgICAgICAgICAvLyBhcHBseSBuZXcgdGFibGUgc3RhdGVcbiAgICAgICAgICBzdXBlci5hcHBseVRhYmxlU3RhdGUoKTtcbiAgICAgICAgICB0aGlzLl9hcHBseVN0YXRlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8gZGVzdHJveSBvd24gc3Vic2NyaXB0aW9uc1xuICAgIGlmICh0aGlzLl9yb3V0ZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX3JvdXRlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICAvLyBkZXN0cm95IHBhcmVudCBzdWJzY3JpcHRpb25zXG4gICAgcmV0dXJuIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gIH1cbn1cbiIsImltcG9ydCB7TmdNb2R1bGUsIE9uSW5pdCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7QWR2YW5jZWRUYWJsZUNvbXBvbmVudCwgQ09MVU1OX0ZPUk1BVFRFUlN9IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtBZHZhbmNlZFRhYmxlU2VhcmNoQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUtc2VhcmNoLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtCdG5FeHBEaXJlY3RpdmV9IGZyb20gJy4vZGlyZWN0aXZlcy9idG5leHAuZGlyZWN0aXZlJztcbmltcG9ydCB7QWR2YW5jZWRUYWJsZVNldHRpbmdzQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUtc2V0dGluZ3MuY29tcG9uZW50JztcbmltcG9ydCB7U2hhcmVkTW9kdWxlLCBUZW1wbGF0ZVBpcGV9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUtbW9kYWwvYWR2YW5jZWQtdGFibGUtbW9kYWwtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHtSb3V0ZXJNb2RhbE1vZHVsZX0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24vcm91dGluZyc7XG5pbXBvcnQgeyBBZHZhbmNlZFNlYXJjaEZvcm1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtc2VhcmNoLWZvcm0vYWR2YW5jZWQtc2VhcmNoLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7QWR2YW5jZWRGb3Jtc01vZHVsZX0gZnJvbSAnQHVuaXZlcnNpcy9mb3Jtcyc7XG5pbXBvcnQge0Zvcm1pb01vZHVsZX0gZnJvbSAnYW5ndWxhci1mb3JtaW8nO1xuaW1wb3J0IHsgQWR2YW5jZWRMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLWxpc3QvYWR2YW5jZWQtbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHtSb3V0ZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICAgIEFkdmFuY2VkU2VhcmNoQ29uZmlndXJhdGlvblJlc29sdmVyLFxuICAgIEFkdmFuY2VkVGFibGVDb25maWd1cmF0aW9uUmVzb2x2ZXJcbn0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLXJlc29sdmVycyc7XG5pbXBvcnQge0FkdmFuY2VkUm93QWN0aW9uQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtcm93LWFjdGlvbi9hZHZhbmNlZC1yb3ctYWN0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQge0ZPUk1BVFRFUlN9IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzLmludGVyZmFjZSc7XG5cbmltcG9ydCB7VEFCTEVTX0VMfSBmcm9tICcuL2kxOG4vdGFibGVzLmVsJztcbmltcG9ydCB7VEFCTEVTX0VOfSBmcm9tICcuL2kxOG4vdGFibGVzLmVuJztcbmltcG9ydCB7IFRhYmxlU2ltcGxlSGVhZGVyQ29tcG9uZW50LCBTaW1wbGVIZWFkZXJUb29sc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90YWJsZS1zaW1wbGUtaGVhZGVyL3RhYmxlLXNpbXBsZS1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IE1vZGFsTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBQcm9ncmVzc2Jhck1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvcHJvZ3Jlc3NiYXInO1xuaW1wb3J0IHsgQWR2YW5jZWRTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtc2VsZWN0L2FkdmFuY2VkLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWR2YW5jZWRTZWxlY3RTZXJ2aWNlIH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLXNlbGVjdC9hZHZhbmNlZC1zZWxlY3Quc2VydmljZSc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlRWRpdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2FkdmFuY2VkLXRhYmxlLWVkaXRvci5kaXJlY3RpdmUnO1xuaW1wb3J0IHtBZHZhbmNlZEFnZ3JlZ2F0b3JDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC1hZ2dyZWdhdG9yL2FkdmFuY2VkLWFnZ3JlZ2F0b3IuY29tcG9uZW50JztcbmltcG9ydCB7QWR2YW5jZWRBZ2dyZWdhdG9yTGlzdENvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLWFnZ3JlZ2F0b3ItbGlzdC9hZHZhbmNlZC1hZ2dyZWdhdG9yLWxpc3QuY29tcG9uZW50JztcbmltcG9ydCB7QWR2YW5jZWRBZ2dyZWdhdG9yU2VydmljZX0gZnJvbSAnLi9zZXJ2aWNlcy9hZHZhbmNlZC1hZ2dyZWdhdG9yL2FkdmFuY2VkLWFnZ3JlZ2F0b3Iuc2VydmljZSc7XG5pbXBvcnQge0FkdmFuY2VkQWdncmVnYXRvclBpcGV9IGZyb20gJy4vcGlwZXMvYWR2YW5jZWQtYWdncmVnYXRvci5waXBlJztcbmltcG9ydCB7R3JvdXBCeVBpcGUsIE5nUGlwZXNNb2R1bGV9IGZyb20gJ25neC1waXBlcyc7XG5pbXBvcnQge1BhcnNlVGl0bGVQaXBlfSBmcm9tICcuL3BpcGVzL2FkdmFuc2VkLWFnZ3JlZ2F0b3ItbGlzdC10aXRsZS1wYXJzZS5waXBlJztcbmltcG9ydCB7QWRkSXRlbXNDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9hZGQtaXRlbXMvYWRkLWl0ZW1zLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBZHZhbmNlZFNlYXJjaFN0YXRlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2FkdmFuY2Utc2VhcmNoLXN0YXRlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlU3RhdGUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvYWR2YW5jZS10YWJsZS1zdGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQWR2YW5jZWRTZWFyY2hSb3V0ZXJTdGF0ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9hZHZhbmNlZC1zZWFyY2gtcm91dGVyLXN0YXRlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlU2VhcmNoQmFzZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1zZWFyY2gtYmFzZSc7XG5pbXBvcnQgeyBDb2x1bW5TZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jb2x1bW4tc2VsZWN0b3IvY29sdW1uLXNlbGVjdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb2x1bW5TZWxlY3RvclNlcnZpY2UgfSBmcm9tICcuL2NvbXBvbmVudHMvY29sdW1uLXNlbGVjdG9yL2NvbHVtbi1zZWxlY3Rvci5zZXJ2aWNlJztcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgU2hhcmVkTW9kdWxlLFxuICAgICAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBSb3V0ZXJNb2R1bGUsXG4gICAgICAgIFJvdXRlck1vZGFsTW9kdWxlLFxuICAgICAgICBGb3JtaW9Nb2R1bGUsXG4gICAgICAgIEFkdmFuY2VkRm9ybXNNb2R1bGUsXG4gICAgICAgIFNoYXJlZE1vZHVsZSxcbiAgICAgICAgTW9kYWxNb2R1bGUsXG4gICAgICAgIFByb2dyZXNzYmFyTW9kdWxlLFxuICAgICAgICBOZ1BpcGVzTW9kdWxlXG4gICAgXSxcbiAgICBwcm92aWRlcnM6IFtEYXRlUGlwZSwgVGVtcGxhdGVQaXBlLFxuICAgICAge1xuICAgICAgICBwcm92aWRlOiBDT0xVTU5fRk9STUFUVEVSUyxcbiAgICAgICAgdXNlVmFsdWU6IEZPUk1BVFRFUlNcbiAgICAgIH0sXG5cbiAgICAgIEFkdmFuY2VkVGFibGVDb25maWd1cmF0aW9uUmVzb2x2ZXIsXG4gICAgICAgIEFkdmFuY2VkU2VhcmNoQ29uZmlndXJhdGlvblJlc29sdmVyLFxuICAgICAgICBBZHZhbmNlZFNlbGVjdFNlcnZpY2UsXG4gICAgICAgIEFkdmFuY2VkQWdncmVnYXRvclNlcnZpY2UsXG4gICAgICAgIENvbHVtblNlbGVjdG9yU2VydmljZSxcbiAgICAgICAgR3JvdXBCeVBpcGVcbiAgICAgIF0sXG4gICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgIEFkdmFuY2VkVGFibGVDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkVGFibGVTZWFyY2hCYXNlQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFRhYmxlU2VhcmNoQ29tcG9uZW50LFxuICAgICAgICBCdG5FeHBEaXJlY3RpdmUsXG4gICAgICAgIEFkdmFuY2VkVGFibGVTZXR0aW5nc0NvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRUYWJsZU1vZGFsQmFzZUNvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRTZWFyY2hGb3JtQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZExpc3RDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkUm93QWN0aW9uQ29tcG9uZW50LFxuICAgICAgICBUYWJsZVNpbXBsZUhlYWRlckNvbXBvbmVudCxcbiAgICAgICAgU2ltcGxlSGVhZGVyVG9vbHNDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkU2VsZWN0Q29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFRhYmxlRWRpdG9yRGlyZWN0aXZlLFxuICAgICAgICBBZHZhbmNlZEFnZ3JlZ2F0b3JDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkQWdncmVnYXRvckxpc3RDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkQWdncmVnYXRvclBpcGUsXG4gICAgICAgIFBhcnNlVGl0bGVQaXBlLFxuICAgICAgICBBZGRJdGVtc0NvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRTZWFyY2hTdGF0ZSxcbiAgICAgICAgQWR2YW5jZWRUYWJsZVN0YXRlLFxuICAgICAgICBBZHZhbmNlZFNlYXJjaFJvdXRlclN0YXRlLFxuICAgICAgICBDb2x1bW5TZWxlY3RvckNvbXBvbmVudFxuICAgIF0sXG4gICAgZXhwb3J0czogW1xuICAgICAgICBBZHZhbmNlZFRhYmxlQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFRhYmxlU2VhcmNoQ29tcG9uZW50LFxuICAgICAgICBCdG5FeHBEaXJlY3RpdmUsXG4gICAgICAgIEFkdmFuY2VkVGFibGVTZXR0aW5nc0NvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRTZWFyY2hGb3JtQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZExpc3RDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkUm93QWN0aW9uQ29tcG9uZW50LFxuICAgICAgICBUYWJsZVNpbXBsZUhlYWRlckNvbXBvbmVudCxcbiAgICAgICAgU2ltcGxlSGVhZGVyVG9vbHNDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkU2VsZWN0Q29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFRhYmxlRWRpdG9yRGlyZWN0aXZlLFxuICAgICAgICBBZHZhbmNlZEFnZ3JlZ2F0b3JDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkQWdncmVnYXRvckxpc3RDb21wb25lbnQsXG4gICAgICAgIEFkZEl0ZW1zQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFNlYXJjaFN0YXRlLFxuICAgICAgICBBZHZhbmNlZFRhYmxlU3RhdGUsXG4gICAgICAgIEFkdmFuY2VkU2VhcmNoUm91dGVyU3RhdGUsXG4gICAgICAgIENvbHVtblNlbGVjdG9yQ29tcG9uZW50XG4gICAgXSxcbiAgICBlbnRyeUNvbXBvbmVudHM6IFtcbiAgICAgICAgQWR2YW5jZWRUYWJsZU1vZGFsQmFzZUNvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRUYWJsZVNldHRpbmdzQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFJvd0FjdGlvbkNvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRTZWxlY3RDb21wb25lbnQsXG4gICAgICAgIEFkZEl0ZW1zQ29tcG9uZW50LFxuICAgICAgICBDb2x1bW5TZWxlY3RvckNvbXBvbmVudFxuICAgIF0sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlc01vZHVsZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSkge1xuICAgICAgICB0aGlzLm5nT25Jbml0KCkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIGxvYWRpbmcgdGFibGVzIG1vZHVsZScpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5zZXRUcmFuc2xhdGlvbignZW4nLCBUQUJMRVNfRU4sIHRydWUpO1xuICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLnNldFRyYW5zbGF0aW9uKCdlbCcsIFRBQkxFU19FTCwgdHJ1ZSk7XG4gICAgfVxuXG59XG4iXSwibmFtZXMiOlsidHNsaWJfMS5fX2V4dGVuZHMiLCJ0c2xpYl8xLl9fdmFsdWVzIiwiSVNPNjM5MS5nZXROYXRpdmVOYW1lIiwiZmlsdGVyIiwic2VsZWN0Iiwic2tpcCIsImZyb21UYWJsZXMuc2VsZWN0VGFibGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7cUJBc0JpQixFQUFFOzs7Ozs7SUFJSCxnQ0FBUTs7OztjQUFDLElBQVk7O1FBQ2pDLElBQUksTUFBTSxHQUFHLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0QsSUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUU7WUFDaEMsT0FBTyxNQUFNLENBQUM7U0FDZjtRQUNELE1BQU0sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsdUJBQXVCLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDeEQsT0FBTyxNQUFNLENBQUM7Ozs7Ozs7SUFLTiwrQ0FBYTs7Ozs7SUFBdkIsVUFBd0IsSUFBUyxFQUFFLE9BQWlFO1FBQ2xHLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTs7WUFDcEQsSUFBTSxjQUFjLEdBQW1CLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDOztZQUN6RSxJQUFNLE1BQU0sR0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7WUFDakQsSUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBQyxPQUFPO2dCQUM1QyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsRUFBRTtvQkFDL0IsT0FBTyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7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
|
|
7854
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdmVyc2lzLW5neC10YWJsZXMuanMubWFwIiwic291cmNlcyI6WyJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtZmlsdGVyLXZhbHVlLXByb3ZpZGVyLnNlcnZpY2UudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9jb2x1bW4tc2VsZWN0b3IvY29sdW1uLXNlbGVjdG9yLmNvbXBvbmVudC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2NvbHVtbi1zZWxlY3Rvci9jb2x1bW4tc2VsZWN0b3Iuc2VydmljZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi90YWJsZXMuYWN0aXZhdGVkLXRhYmxlLnNlcnZpY2UudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvZGlyZWN0aXZlcy9idG5leHAuZGlyZWN0aXZlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtbGlzdC9hZHZhbmNlZC1saXN0LmNvbXBvbmVudC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLXJvdy1hY3Rpb24vYWR2YW5jZWQtcm93LWFjdGlvbi5jb21wb25lbnQudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1zZWFyY2gtYmFzZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLXNlYXJjaC1mb3JtL2FkdmFuY2VkLXNlYXJjaC1mb3JtLmNvbXBvbmVudC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlLW1vZGFsL2FkdmFuY2VkLXRhYmxlLW1vZGFsLWJhc2UuY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtc2VsZWN0L2FkdmFuY2VkLXNlbGVjdC5jb21wb25lbnQudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC1zZWxlY3QvYWR2YW5jZWQtc2VsZWN0LnNlcnZpY2UudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1yZXNvbHZlcnMudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1zZXR0aW5ncy5jb21wb25lbnQudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1zZWFyY2guY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuZm9ybWF0dGVycy5pbnRlcmZhY2UudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy90YWJsZS1zaW1wbGUtaGVhZGVyL3RhYmxlLXNpbXBsZS1oZWFkZXIuY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2RpcmVjdGl2ZXMvYWR2YW5jZWQtdGFibGUtZWRpdG9yLmRpcmVjdGl2ZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9zZXJ2aWNlcy9hZHZhbmNlZC1hZ2dyZWdhdG9yL2FkdmFuY2VkLWFnZ3JlZ2F0b3Iuc2VydmljZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLWFnZ3JlZ2F0b3IvYWR2YW5jZWQtYWdncmVnYXRvci5jb21wb25lbnQudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC1hZ2dyZWdhdG9yLWxpc3QvYWR2YW5jZWQtYWdncmVnYXRvci1saXN0LmNvbXBvbmVudC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkZC1pdGVtcy9hZGQtaXRlbXMuY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL3BpcGVzL2FkdmFuY2VkLWFnZ3JlZ2F0b3IucGlwZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9waXBlcy9hZHZhbnNlZC1hZ2dyZWdhdG9yLWxpc3QtdGl0bGUtcGFyc2UucGlwZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9pMThuL3RhYmxlcy5lbC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9pMThuL3RhYmxlcy5lbi50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9hY3Rpb25zL3RhYmxlLmFjdGlvbnMudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvcmVkdWNlcnMvaW5kZXgudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvZGlyZWN0aXZlcy9hZHZhbmNlLXRhYmxlLXN0YXRlLmRpcmVjdGl2ZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9kaXJlY3RpdmVzL2FkdmFuY2Utc2VhcmNoLXN0YXRlLmRpcmVjdGl2ZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9kaXJlY3RpdmVzL2FkdmFuY2VkLXNlYXJjaC1yb3V0ZXItc3RhdGUuZGlyZWN0aXZlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL3RhYmxlcy5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdGVtcGxhdGUsIGF0IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vYWR2YW5jZWQtdGFibGUuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0ICogYXMgSVNPNjM5MSBmcm9tICdpc28tNjM5LTEvYnVpbGQnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FeHRyYXMsIFJvdXRlciwgVXJsVHJlZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5kZWNsYXJlIHZhciBqUXVlcnk6IGFueTtcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciBpbXBsZW1lbnRzIFRhYmxlQ29sdW1uQ29uZmlndXJhdGlvbiB7XG5cbiAgcHVibGljIHN0YXRpYyB0ZW1wbGF0ZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIChkYXRhOiBhbnkpID0+IHN0cmluZz4oKTtcblxuICBwcm90ZWN0ZWQgaW5qZWN0b3I/OiBJbmplY3RvcjtcbiAgcHVibGljIGNsYXNzTmFtZT86IHN0cmluZztcbiAgcHVibGljIGRlZmF1bHRDb250ZW50Pzogc3RyaW5nO1xuICBwdWJsaWMgZm9ybWF0U3RyaW5nPzogc3RyaW5nO1xuICBwdWJsaWMgZm9ybWF0dGVyPzogc3RyaW5nO1xuICBwdWJsaWMgaGlkZGVuPzogYm9vbGVhbjtcbiAgcHVibGljIG5hbWU/OiBzdHJpbmc7XG4gIHB1YmxpYyBvcmRlcj86IHN0cmluZztcbiAgcHVibGljIHByb3BlcnR5Pzogc3RyaW5nO1xuICBwdWJsaWMgc29ydGFibGU/OiBib29sZWFuO1xuICBwdWJsaWMgdGl0bGUgPSAnJztcbiAgcHVibGljIGZvcm1hdE9wdGlvbnM/OiBhbnk7XG4gIHB1YmxpYyBhY3Rpb25zPzogQXJyYXk8YW55PjtcblxuICBwdWJsaWMgc3RhdGljIHRlbXBsYXRlKGV4cHI6IHN0cmluZyk6IChkYXRhOiBhbnkpID0+IHN0cmluZyB7XG4gICAgbGV0IHJlc3VsdCA9IEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyLnRlbXBsYXRlQ2FjaGUuZ2V0KGV4cHIpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICByZXN1bHQgPSB0ZW1wbGF0ZShleHByKTtcbiAgICBBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZUNhY2hlLnNldChleHByLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgYWJzdHJhY3QgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55O1xuXG4gIHByb3RlY3RlZCBjcmVhdGVVcmxUcmVlKGRhdGE6IGFueSwgb3B0aW9uczogeyBjb21tYW5kczogYW55W10sIG5hdmlnYXRpb25FeHRyYXM/OiBOYXZpZ2F0aW9uRXh0cmFzIH0pOiBVcmxUcmVlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLmNvbW1hbmRzKSAmJiB0aGlzLmluamVjdG9yKSB7XG4gICAgICBjb25zdCBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUgPSB0aGlzLmluamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgICBjb25zdCByb3V0ZXI6IFJvdXRlciA9IHRoaXMuaW5qZWN0b3IuZ2V0KFJvdXRlcik7XG4gICAgICBjb25zdCBjb21tYW5kcyA9IG9wdGlvbnMuY29tbWFuZHMubWFwKChjb21tYW5kKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgY29tbWFuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUoY29tbWFuZCkoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbW1hbmQub3V0bGV0cykge1xuICAgICAgICAgIGNvbnN0IGNvbW1hbmRPdXRsZXRzID0ge307XG4gICAgICAgICAgT2JqZWN0LmtleXMoY29tbWFuZC5vdXRsZXRzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29tbWFuZC5vdXRsZXRzLCBrZXkpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG91dGxldCA9IGNvbW1hbmQub3V0bGV0c1trZXldO1xuICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvdXRsZXQpKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbW1hbmRPdXRsZXRzLCBrZXksIHtcbiAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBvdXRsZXQubWFwKCh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZSh4KShkYXRhKTtcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb21tYW5kT3V0bGV0cywga2V5LCB7XG4gICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogb3V0bGV0LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG91dGxldHM6IGNvbW1hbmRPdXRsZXRzLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbW1hbmQ7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0ge307XG4gICAgICBsZXQgcmVwbGFjZVVybCA9IHRydWU7XG4gICAgICBjb25zdCBxdWVyeVBhcmFtRXh0cmFzID0gb3B0aW9ucy5uYXZpZ2F0aW9uRXh0cmFzICYmIG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcy5xdWVyeVBhcmFtcztcbiAgICAgIGlmIChxdWVyeVBhcmFtRXh0cmFzKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHF1ZXJ5UGFyYW1FeHRyYXMpLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgdGV4dCA9IHF1ZXJ5UGFyYW1FeHRyYXNba2V5XTtcbiAgICAgICAgICBxdWVyeVBhcmFtc1trZXldID0gQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUodGV4dCkoZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcyAmJiB0eXBlb2Ygb3B0aW9ucy5uYXZpZ2F0aW9uRXh0cmFzLnJlcGxhY2VVcmwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJlcGxhY2VVcmwgPSBvcHRpb25zLm5hdmlnYXRpb25FeHRyYXMucmVwbGFjZVVybDtcbiAgICAgIH1cbiAgICAgIGxldCBza2lwTG9jYXRpb25DaGFuZ2UgPSBmYWxzZTtcbiAgICAgIGlmIChvcHRpb25zLm5hdmlnYXRpb25FeHRyYXMgJiYgdHlwZW9mIG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcy5za2lwTG9jYXRpb25DaGFuZ2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHNraXBMb2NhdGlvbkNoYW5nZSA9IG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcy5za2lwTG9jYXRpb25DaGFuZ2U7XG4gICAgICB9XG5cbiAgICAgIGxldCBmcmFnbWVudDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcyAmJiB0eXBlb2Ygb3B0aW9ucy5uYXZpZ2F0aW9uRXh0cmFzLmZyYWdtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBmcmFnbWVudCA9IG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcy5mcmFnbWVudDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJvdXRlci5jcmVhdGVVcmxUcmVlKGNvbW1hbmRzLFxuICAgICAgICB7XG4gICAgICAgICAgZnJhZ21lbnQsXG4gICAgICAgICAgcmVsYXRpdmVUbzogYWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgICAgcmVwbGFjZVVybCxcbiAgICAgICAgICBza2lwTG9jYXRpb25DaGFuZ2UsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT25BZHZhbmNlZENvbHVtbkFmdGVyUmVuZGVyIHtcbiAgYWZ0ZXJSZW5kZXIoY2VsbDogYW55LCBjZWxsRGF0YTogYW55LCByb3dEYXRhOiBhbnksIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgTmVzdGVkUHJvcGVydHlGb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciB7XG4gIHB1YmxpYyByZW5kZXIoZGF0YSwgdHlwZSwgcm93LCBtZXRhKSB7XG4gICAgLy8gZ2V0IGNvbHVtblxuICAgIGNvbnN0IGNvbHVtbiA9IG1ldGEuc2V0dGluZ3MuYW9Db2x1bW5zW21ldGEuY29sXTtcbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5kYXRhKSB7XG4gICAgICByZXR1cm4gYXQocm93LCBjb2x1bW4uZGF0YS5yZXBsYWNlKC9cXC8vZywgJy4nKSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJ1dHRvbkZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgcHVibGljIHJlbmRlcihkYXRhLCB0eXBlLCByb3csIG1ldGEpIHtcbiAgICBpZiAoZGF0YSA9PSBudWxsIHx8IHRoaXMuaW5qZWN0b3IgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICAvLyBnZXQgZm9ybWF0IG9wdGlvbnNcbiAgICBjb25zdCBmb3JtYXRPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICBidXR0b25DbGFzczogJ2J0biBidG4tZGVmYXVsdCcsXG4gICAgfSwgdGhpcy5mb3JtYXRPcHRpb25zKTtcbiAgICAvLyBnZXQgdGV4dCBjb250ZW50XG4gICAgbGV0IGJ1dHRvblRleHQ6IHN0cmluZztcbiAgICBsZXQgYnV0dG9uVGl0bGUgPSAnJztcbiAgICBpZiAoZm9ybWF0T3B0aW9ucy5idXR0b25UZXh0KSB7XG4gICAgICBidXR0b25UZXh0ID0gdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudChmb3JtYXRPcHRpb25zLmJ1dHRvblRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBidXR0b25UZXh0ID0gZm9ybWF0T3B0aW9ucy5idXR0b25Db250ZW50O1xuICAgIH1cbiAgICBpZiAoZm9ybWF0T3B0aW9ucy5idXR0b25UaXRsZSkge1xuICAgICAgYnV0dG9uVGl0bGUgPSB0aGlzLmluamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKS5pbnN0YW50KGZvcm1hdE9wdGlvbnMuYnV0dG9uVGl0bGUpO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmZvcm1hdE9wdGlvbnMuY29tbWFuZHMpKSB7XG4gICAgICBjb25zdCByb3V0ZXJMaW5rID0gdGhpcy5jcmVhdGVVcmxUcmVlKHJvdywgdGhpcy5mb3JtYXRPcHRpb25zKTtcbiAgICAgIHJldHVybiBgPGEgY2xhc3M9XCIke2Zvcm1hdE9wdGlvbnMuYnV0dG9uQ2xhc3N9XCIgdGl0bGU9XCIke2J1dHRvblRpdGxlfVwiIGhyZWY9XCIjJHtyb3V0ZXJMaW5rfVwiPiR7YnV0dG9uVGV4dH08L2E+YDtcbiAgICB9XG4gICAgLy8gYW5kIHJldHVybiBidXR0b25cbiAgICBjb25zdCBocmVmID0gQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUodGhpcy5mb3JtYXRTdHJpbmcgYXMgc3RyaW5nKShyb3cpO1xuICAgIHJldHVybiBgPGEgY2xhc3M9XCIke2Zvcm1hdE9wdGlvbnMuYnV0dG9uQ2xhc3N9XCIgdGl0bGU9XCIke2J1dHRvblRpdGxlfVwiIGhyZWY9XCIke2hyZWZ9XCI+JHtidXR0b25UZXh0fTwvYT5gO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpbmtGb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciB7XG4gIHB1YmxpYyByZW5kZXIoZGF0YTogYW55LCB0eXBlOiBzdHJpbmcsIHJvdzogYW55LCBtZXRhOiBhbnkpOiBhbnkge1xuICAgIC8vIGdldCBjb2x1bW5cbiAgICBjb25zdCBjb2x1bW4gPSBtZXRhLnNldHRpbmdzLmFvQ29sdW1uc1ttZXRhLmNvbF07XG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4uZGF0YSkge1xuICAgICAgcmV0dXJuIGA8YSBocmVmPVwiJHsoQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUodGhpcy5mb3JtYXRTdHJpbmcgYXMgc3RyaW5nKShyb3cpKX1cIj4ke2RhdGF9PC9hPmA7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkxpbmtGb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlclxuICBpbXBsZW1lbnRzIE9uQWR2YW5jZWRDb2x1bW5BZnRlclJlbmRlciB7XG4gIHB1YmxpYyByZW5kZXIoZGF0YTogYW55LCB0eXBlOiBzdHJpbmcsIHJvdzogYW55LCBtZXRhOiBhbnkpOiBhbnkge1xuICAgIC8vIGdldCBjb2x1bW5cbiAgICBjb25zdCBjb2x1bW4gPSBtZXRhLnNldHRpbmdzLmFvQ29sdW1uc1ttZXRhLmNvbF07XG5cbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5kYXRhKSB7XG4gICAgICBjb25zdCBhY3Rpb25zID0gdGhpcy5hY3Rpb25zIHx8IFtdO1xuICAgICAgbGV0IGluZGV4ID0gMTtcbiAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihhY3Rpb24sIHtcbiAgICAgICAgICBuYW1lOiBhY3Rpb24ubmFtZSB8fCBgYWN0aW9uJHtpbmRleH1gLFxuICAgICAgICB9KTtcbiAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiB0aGUgZHJvcGRvd24gbWVudSB3aXRoIDMgZG90c1xuICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSdkcm9wZG93biBkZXRhaWxzLWNvbnRyb2wnIGRhdGEtaWQ9JyR7ZGF0YX0nIGRhdGEtdHlwZT0nc3R1ZGVudCcgPlxuICAgICAgICAgICAgICAgICAgICA8YSBpZD1cImRyb3Bkb3duTWVudUJ1dHRvbi0ke2RhdGF9XCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhLTJ4IHRleHQtZG90c1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiIGFyaWEtbGFiZWxsZWRieT1cImRyb3Bkb3duTWVudUJ1dHRvbi0ke2RhdGF9XCI+XG4gICAgICAgICAgICAgICAgICAgICAke2FjdGlvbnMubWFwKCh4KSA9PiB7XG4gICAgICAgIGlmICh4LnR5cGUgPT09ICdkaXZpZGVyJykge1xuICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWRpdmlkZXJcIj48L2Rpdj5gO1xuICAgICAgICB9XG4gICAgICAgIGlmICh4LmZvcm1hdE9wdGlvbnMgJiYgeC5mb3JtYXRPcHRpb25zLmNvbW1hbmRzKSB7XG4gICAgICAgICAgY29uc3QgdXJsVHJlZSA9IHRoaXMuY3JlYXRlVXJsVHJlZShyb3csIHguZm9ybWF0T3B0aW9ucyk7XG4gICAgICAgICAgcmV0dXJuIGA8YSBkYXRhLW5hbWU9JyR7eC5uYW1lfScgY2xhc3M9XCJkcm9wZG93bi1pdGVtJHt0eXBlb2YgeC5jbGFzc05hbWUgPT09ICdzdHJpbmcnICYmIHguY2xhc3NOYW1lLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gIGAgJHt4LmNsYXNzTmFtZS50cmltKCl9YCA6ICcnfVwiIGhyZWY9XCIjJHt1cmxUcmVlICYmIHVybFRyZWUudG9TdHJpbmcoKX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCh4LnRpdGxlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPmA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGA8YSBkYXRhLW5hbWU9JyR7eC5uYW1lfScgY2xhc3M9XCJkcm9wZG93bi1pdGVtJHt0eXBlb2YgeC5jbGFzc05hbWUgPT09ICdzdHJpbmcnICYmIHguY2xhc3NOYW1lLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IGAgJHt4LmNsYXNzTmFtZS50cmltKCl9YCA6ICcnfVwiIGhyZWY9XCIke0FkdmFuY2VkQ29sdW1uRm9ybWF0dGVyLnRlbXBsYXRlKHguaHJlZikocm93KX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmluamVjdG9yICYmIHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQoeC50aXRsZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+YDtcbiAgICAgIH0pXG4gICAgICAgICAgLmpvaW4oJycpfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgcHVibGljIGFmdGVyUmVuZGVyKGNlbGw6IGFueSwgY2VsbERhdGE6IGFueSwgcm93RGF0YTogYW55LCByb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgLy8gYXNzaWduIGJvb3RzdHJhcCBkcm9wZG93biAoPylcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uQnV0dG9uRm9ybWF0dGVyIGV4dGVuZHMgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXJcbiAgaW1wbGVtZW50cyBPbkFkdmFuY2VkQ29sdW1uQWZ0ZXJSZW5kZXIge1xuICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55IHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuXG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4uZGF0YSAmJiB0aGlzLmluamVjdG9yKSB7XG4gICAgICBjb25zdCBhY3Rpb25zID0gdGhpcy5hY3Rpb25zIHx8IFtdO1xuICAgICAgbGV0IGluZGV4ID0gMTtcbiAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihhY3Rpb24sIHtcbiAgICAgICAgICBuYW1lOiBhY3Rpb24ubmFtZSB8fCBgYWN0aW9uJHtpbmRleH1gLFxuICAgICAgICB9KTtcbiAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgIH1cbiAgICAgIGxldCBidXR0b25UZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAodGhpcy5mb3JtYXRPcHRpb25zICYmIHRoaXMuZm9ybWF0T3B0aW9ucy5idXR0b25UZXh0KSB7XG4gICAgICAgIC8vIGlmIGJ1dHRvbiB0ZXh0IGlzIGEgbGl0ZXJhbCBleHByZXNzaW9uXG4gICAgICAgIGlmICh0aGlzLmZvcm1hdE9wdGlvbnMuYnV0dG9uVGV4dC5pbmNsdWRlcygnJHsnKSkge1xuICAgICAgICAgIC8vIHVzZSB0ZW1wbGF0ZVxuICAgICAgICAgIGJ1dHRvblRleHQgPSBBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZSh0aGlzLmZvcm1hdE9wdGlvbnMuYnV0dG9uVGV4dCkocm93KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBvdGhlcndpc2UgdHJhbnNsYXRlIGl0XG4gICAgICAgICAgYnV0dG9uVGV4dCA9IHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQodGhpcy5mb3JtYXRPcHRpb25zLmJ1dHRvblRleHQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXQgYnV0dG9uVGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGlmICh0aGlzLmZvcm1hdE9wdGlvbnMgJiYgdGhpcy5mb3JtYXRPcHRpb25zLmJ1dHRvblRpdGxlKSB7XG4gICAgICAgIGJ1dHRvblRpdGxlID0gdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCh0aGlzLmZvcm1hdE9wdGlvbnMuYnV0dG9uVGJ1dHRvblRpdGxlZXh0KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJ1dHRvbkNsYXNzID0gKHRoaXMuZm9ybWF0T3B0aW9ucyAmJiB0aGlzLmZvcm1hdE9wdGlvbnMuYnV0dG9uQ2xhc3MpIHx8ICdidG4gYnRuLWxpZ2h0JztcbiAgICAgIC8vIHJldHVybiB0aGUgZHJvcGRvd24gbWVudSB3aXRoIDMgZG90c1xuICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSdkcm9wZG93biBkZXRhaWxzLWNvbnRyb2wnIGRhdGEtaWQ9JyR7ZGF0YX0nPlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cIiR7YnV0dG9uQ2xhc3N9IGRyb3Bkb3duLXRvZ2dsZVwiIGhyZWY9XCIjXCIgcm9sZT1cImJ1dHRvblwiIHRpdGxlPVwiJHtidXR0b25UaXRsZX1cIlxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwiZHJvcGRvd25NZW51QnV0dG9uLSR7ZGF0YX1cIiBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAke2J1dHRvblRleHR9XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93bk1lbnVCdXR0b24tJHtkYXRhfVwiPlxuICAgICAgICAgICAgICAgICAgICAgJHthY3Rpb25zLm1hcCgoeCkgPT4ge1xuICAgICAgICBpZiAoeC50eXBlID09PSAnZGl2aWRlcicpIHtcbiAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJkcm9wZG93bi1kaXZpZGVyXCI+PC9kaXY+YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeC5jb21tYW5kcykge1xuICAgICAgICAgIGNvbnN0IHVybFRyZWUgPSB0aGlzLmNyZWF0ZVVybFRyZWUocm93LCB4KTtcbiAgICAgICAgICByZXR1cm4gYDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjJHt1cmxUcmVlICYmIHVybFRyZWUudG9TdHJpbmcoKX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCh4LnRpdGxlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPmA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiJHtBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZSh4LmhyZWYpKHJvdyl9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5pbmplY3RvciAmJiB0aGlzLmluamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKS5pbnN0YW50KHgudGl0bGUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPmA7XG4gICAgICB9KVxuICAgICAgICAgIC5qb2luKCcnKX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIHB1YmxpYyBhZnRlclJlbmRlcihjZWxsOiBhbnksIGNlbGxEYXRhOiBhbnksIHJvd0RhdGE6IGFueSwgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIGFzc2lnbiBib290c3RyYXAgZHJvcGRvd24gKD8pXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvblNwbGl0QnV0dG9uRm9ybWF0dGVyIGV4dGVuZHMgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXJcbiAgaW1wbGVtZW50cyBPbkFkdmFuY2VkQ29sdW1uQWZ0ZXJSZW5kZXIge1xuICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55IHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuXG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4uZGF0YSkge1xuICAgICAgY29uc3QgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucyB8fCBbXTtcbiAgICAgIGxldCBpbmRleCA9IDE7XG4gICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiBhY3Rpb25zKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oYWN0aW9uLCB7XG4gICAgICAgICAgbmFtZTogYWN0aW9uLm5hbWUgfHwgYGFjdGlvbiR7aW5kZXh9YCxcbiAgICAgICAgfSk7XG4gICAgICAgIGluZGV4ICs9IDE7XG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgYnV0dG9uQ2xhc3MgPSAodGhpcy5mb3JtYXRPcHRpb25zICYmIHRoaXMuZm9ybWF0T3B0aW9ucy5idXR0b25DbGFzcykgfHwgJ2J0biBidG4tbGlnaHQnO1xuICAgICAgLy8gcmV0dXJuIHRoZSBkcm9wZG93biBtZW51IHdpdGggMyBkb3RzXG4gICAgICBjb25zdCBkZWZhdWx0QWN0aW9uID0gYWN0aW9uc1swXTtcbiAgICAgIGxldCBkZWZhdWx0QWN0aW9uSHJlZjogc3RyaW5nO1xuICAgICAgaWYgKGRlZmF1bHRBY3Rpb24gJiYgZGVmYXVsdEFjdGlvbi5jb21tYW5kcykge1xuICAgICAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5jcmVhdGVVcmxUcmVlKHJvdywgZGVmYXVsdEFjdGlvbik7XG4gICAgICAgIGRlZmF1bHRBY3Rpb25IcmVmID0gJyMnICsgKHVybFRyZWUgJiYgdXJsVHJlZS50b1N0cmluZygpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmF1bHRBY3Rpb25IcmVmID0gQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUoZGVmYXVsdEFjdGlvbi5ocmVmKShyb3cpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIiR7YnV0dG9uQ2xhc3N9XCIgaHJlZj1cIiR7ZGVmYXVsdEFjdGlvbkhyZWZ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmluamVjdG9yICYmIHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQoZGVmYXVsdEFjdGlvbi50aXRsZSl9XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCIke2J1dHRvbkNsYXNzfSBkcm9wZG93bi10b2dnbGUgZHJvcGRvd24tdG9nZ2xlLXNwbGl0XCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj4ke3RoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCgnVG9nZ2xlIERyb3Bkb3duJyl9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93bk1lbnVCdXR0b24tJHtkYXRhfVwiPlxuICAgICAgICAgICAgICAgICAgICAgJHthY3Rpb25zLm1hcCgoeCkgPT4ge1xuICAgICAgICBpZiAoeC50aXRsZSA9PT0gJy0nKSB7XG4gICAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tZGl2aWRlclwiPjwvZGl2PmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHguY29tbWFuZHMpIHtcbiAgICAgICAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5jcmVhdGVVcmxUcmVlKHJvdywgeCk7XG4gICAgICAgICAgcmV0dXJuIGA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiIyR7dXJsVHJlZSAmJiB1cmxUcmVlLnRvU3RyaW5nKCl9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmluamVjdG9yICYmIHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQoeC50aXRsZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIiR7QWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUoeC5ocmVmKShyb3cpfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCh4LnRpdGxlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5gO1xuICAgICAgfSlcbiAgICAgICAgICAuam9pbignJyl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuICBwdWJsaWMgYWZ0ZXJSZW5kZXIoY2VsbDogYW55LCBjZWxsRGF0YTogYW55LCByb3dEYXRhOiBhbnksIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyBhc3NpZ24gYm9vdHN0cmFwIGRyb3Bkb3duICg/KVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZWxlY3RSb3dGb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciB7XG4gIHB1YmxpYyByZW5kZXIoZGF0YSwgdHlwZSwgcm93LCBtZXRhKSB7XG4gICAgLy8gZ2V0IGNvbHVtblxuICAgIGNvbnN0IGNvbHVtbiA9IG1ldGEuc2V0dGluZ3MuYW9Db2x1bW5zW21ldGEuY29sXTtcbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5kYXRhKSB7XG4gICAgICBjb25zdCBfdHBsID0gYDxpbnB1dCBjbGFzcz1cImNoZWNrYm94IGNoZWNrYm94LXRoZW1lXCIgdHlwZT1cImNoZWNrYm94XCJcbiBpZD1cInMtJHttZXRhLnJvd31cIiAvPjxsYWJlbCBmb3I9XCJzLSR7bWV0YS5yb3d9XCI+Jm5ic3A7PC9sYWJlbD5gO1xuICAgICAgcmV0dXJuIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyLnRlbXBsYXRlKF90cGwpKHJvdyk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlRm9ybWF0dGVyIGV4dGVuZHMgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIge1xuICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55IHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLmRhdGEpIHtcbiAgICAgIHJldHVybiBBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZSh0aGlzLmZvcm1hdFN0cmluZyBhcyBzdHJpbmcpKHJvdyk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRydWVGYWxzZUZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcblxuICBwdWJsaWMgcmVuZGVyKGRhdGEsIHR5cGUsIHJvdywgbWV0YSkge1xuICAgIHJldHVybiBkYXRhID8gKHRoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCgnVHJ1ZUZhbHNlLmxvbmcuWWVzJykpIDpcbiAgICAgICh0aGlzLmluamVjdG9yICYmIHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQoJ1RydWVGYWxzZS5sb25nLk5vJykpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxufVxuXG5kZWNsYXJlIGludGVyZmFjZSBUcmFuc2xhdGlvbkZvcm1hdHRlclRlbXBsYXRlIHtcbiAgdHJhbnNsYXRlVGVtcGxhdGU/OiAoZGF0YTogYW55KSA9PiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvbkZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgcHVibGljIHJlbmRlcihkYXRhOiBhbnksIHR5cGU6IHN0cmluZywgcm93OiBhbnksIG1ldGE6IGFueSk6IGFueSB7XG4gICAgLy8gZ2V0IGNvbHVtblxuICAgIGNvbnN0IGNvbHVtbjogVHJhbnNsYXRpb25Gb3JtYXR0ZXJUZW1wbGF0ZSA9IG1ldGEuc2V0dGluZ3MuYW9Db2x1bW5zW21ldGEuY29sXTtcbiAgICBpZiAoY29sdW1uICYmIGRhdGEgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudChcbiAgICAgICAgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUodGhpcy5mb3JtYXRTdHJpbmcgYXMgc3RyaW5nKSh7XG4gICAgICAgICAgdmFsdWU6IGRhdGEsXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCgnVW5rbm93bicpO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGVUaW1lRm9ybWF0dGVyIGV4dGVuZHMgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIge1xuICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55IHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLmRhdGEgJiYgdGhpcy5pbmplY3Rvcikge1xuICAgICAgY29uc3QgZGF0ZVBpcGU6IERhdGVQaXBlID0gbmV3IERhdGVQaXBlKHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmN1cnJlbnRMYW5nKTtcbiAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycgJiYgL15cXGR7NH0tXFxkezJ9LVxcZHsyfVRcXGR7Mn06XFxkezJ9OlxcZHsyfVxcK1xcZHsyfSQvLnRlc3QoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIGRhdGVQaXBlLnRyYW5zZm9ybShuZXcgRGF0ZShkYXRhICsgJzowMCcpLCB0aGlzLmZvcm1hdFN0cmluZyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGEsIHRoaXMuZm9ybWF0U3RyaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTmdDbGFzc0Zvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgcHVibGljIHJlbmRlcihkYXRhLCB0eXBlLCByb3csIG1ldGEpIHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLmRhdGEpIHtcbiAgICAgIC8vIGdldCBmb3JtYXRPcHRpb25zXG4gICAgICBpZiAodGhpcy5mb3JtYXRPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IG5nQ2xhc3MgPSB0aGlzLmZvcm1hdE9wdGlvbnMubmdDbGFzcztcbiAgICAgICAgLy8gY2hlY2sgY29uZGl0aW9uIGZvciBlYWNoIGtleVxuICAgICAgICBjb2x1bW4ubmdDbGFzc1RlbXBsYXRlcyA9IGNvbHVtbi5uZ0NsYXNzVGVtcGxhdGVzIHx8IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhuZ0NsYXNzKSkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyLnRlbXBsYXRlKG5nQ2xhc3Nba2V5XSkocm93KTtcbiAgICAgICAgICBjb25zdCBmbiA9IG5ldyBGdW5jdGlvbihgcmV0dXJuICR7cmVzdWx0fTtgKTtcbiAgICAgICAgICAvLyBpZiBjb25kaXRpb24gcmV0dXJucyB0cnVlIGFkZCBjbGFzc1xuICAgICAgICAgIGlmIChmbigpID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwiJHtrZXl9XCI+JHtkYXRhfTwvc3Bhbj5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBMYW5ndWFnZUZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgcHVibGljIHJlbmRlcihkYXRhLCB0eXBlLCByb3csIG1ldGEpIHtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgcmV0dXJuIElTTzYzOTEuZ2V0TmF0aXZlTmFtZShkYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGVtcGxhdGVQaXBlIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXIge1xuXG4gIHB1YmxpYyB2YWx1ZXMgPSB7IH07XG4gIHByaXZhdGUgX3RlbXBsYXRlOiBUZW1wbGF0ZVBpcGU7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fdGVtcGxhdGUgPSBuZXcgVGVtcGxhdGVQaXBlKCk7XG4gIH1cblxuICBidWlsZEZpbHRlcihmaWx0ZXIpIHtcbiAgICBpZiAoZmlsdGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKGZpbHRlciwgdGhpcy52YWx1ZXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFzeW5jQnVpbGRGaWx0ZXIoZmlsdGVyKSB7XG4gICAgaWYgKGZpbHRlcikge1xuICAgICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybShmaWx0ZXIsIGF3YWl0IHRoaXMuZ2V0VmFsdWVzKCkpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFZhbHVlcygpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXM7XG4gIH1cblxufVxuIiwiLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgSW5wdXQsIEV2ZW50RW1pdHRlciwgVmlld0VuY2Fwc3VsYXRpb24sIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFJvdXRlck1vZGFsT2tDYW5jZWwgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbi9yb3V0aW5nJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWNvbHVtbi1zZWxlY3RvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2x1bW4tc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5FbXVsYXRlZCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgIC5mb3JtLXNlbGVjdCB7XG4gICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgICAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xuICAgICAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgICAgICBwYWRkaW5nOiA1cHg7XG4gICAgfVxuICAgIC5mb3JtLXNlbGVjdCAqIHtcbiAgICAgICAgcGFkZGluZzogNXB4IDVweDtcbiAgICB9XG4gICAgLmJ0bi5kaXNhYmxlZCwgLmJ0bjpkaXNhYmxlZCB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICB9XG4gICAgYFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIENvbHVtblNlbGVjdG9yQ29tcG9uZW50IGV4dGVuZHMgUm91dGVyTW9kYWxPa0NhbmNlbCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuXG4gICAgQElucHV0KCkgY29sdW1ucz86IHsga2V5OiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIHZpc2libGU6IGJvb2xlYW4sIGluZGV4OiBudW1iZXIgfVtdO1xuICAgIHB1YmxpYyBkaXNtaXNzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBJbnB1dCgpIHNlbGVjdGVkQ29sdW1ucz86IHsga2V5OiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgfVtdO1xuXG4gICAgQFZpZXdDaGlsZCgnbW92ZVVwQnV0dG9uJykgbW92ZVVwQnV0dG9uPzogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdtb3ZlRG93bkJ1dHRvbicpIG1vdmVEb3duQnV0dG9uPzogRWxlbWVudFJlZjtcblxuICAgIGF2YWlsYWJsZUNvbHVtbnNDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG4gICAgc2VsZWN0ZWRDb2x1bW5zQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuXG4gICAgcHVibGljIGNoYW5naW5nID0gZmFsc2U7XG5cbiAgICBvaygpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2luZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9tb2RhbFJlZi5oaWRlKCk7XG4gICAgICAgIH0sIDApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5hcHBseUNoYW5nZXMoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5naW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXNtaXNzLmVtaXQoJ29rJyk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoJ29rJyk7XG4gICAgfVxuICAgIGNhbmNlbCgpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICB0aGlzLl9tb2RhbFJlZi5oaWRlKCk7XG4gICAgICAgIHRoaXMuZGlzbWlzcy5lbWl0KCdjYW5jZWwnKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgnY2FuY2VsJyk7XG4gICAgfVxuXG4gIGNvbnN0cnVjdG9yKHJvdXRlcjogUm91dGVyLFxuICAgIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIF9tb2RhbFJlZjogQnNNb2RhbFJlZixcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICAgICAgc3VwZXIocm91dGVyLCBhY3RpdmF0ZWRSb3V0ZSk7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgLy9cbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIC8vXG4gICAgfVxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmNvbHVtbnMpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS52aXNpYmxlO1xuICAgICAgICAgICAgfSkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhLmluZGV4IDwgYi5pbmRleCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhLmluZGV4ID4gYi5pbmRleCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9KS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IGl0ZW0ua2V5LFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS50aXRsZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlDaGFuZ2VzKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnMgJiYgdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICAgICBsZXQgbW92ZUluZGV4ID0gdGhpcy5zZWxlY3RlZENvbHVtbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIHRoaXMuY29sdW1ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5rZXkgPT09IGNvbHVtbi5rZXk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGZpbmRJbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgbW92ZUluZGV4ICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5pbmRleCA9IG1vdmVJbmRleDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4udmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5pbmRleCA9IGZpbmRJbmRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW1vdmVDb2x1bW5zKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZENvbHVtbnNDb250cm9sLnZhbHVlIGFzIHN0cmluZ1tdO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5kSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuc3BsaWNlKGZpbmRJbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gcmVzZXQgY29sdW1uXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnNDb250cm9sLnJlc2V0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRDb2x1bW5zKCkge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW5zICYmIHRoaXMuc2VsZWN0ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuYXZhaWxhYmxlQ29sdW1uc0NvbnRyb2wudmFsdWUgYXMgc3RyaW5nW107XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2Ygc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluZENvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5rZXkgPT09IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmRDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmtleSA9PT0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaW5kSW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZmluZENvbHVtbi5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBmaW5kQ29sdW1uLnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gZmluZCB0aGUgbGFzdCBpbmRleCBvZiB0aGUgc2VsZWN0ZWQgaXRlbXNcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0U2VsZWN0ZWRJbmRleCA9IHRoaXMuY29sdW1ucy5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSBzZWxlY3RlZFtzZWxlY3RlZC5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyByZXNldCBjb250cm9sXG4gICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVDb2x1bW5zQ29udHJvbC5yZXNldCgpO1xuICAgICAgICAgICAgICAgIGlmIChsYXN0U2VsZWN0ZWRJbmRleCA+IC0xICYmIGxhc3RTZWxlY3RlZEluZGV4IDwgdGhpcy5jb2x1bW5zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVDb2x1bW5zQ29udHJvbC5wYXRjaFZhbHVlKFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uc1tsYXN0U2VsZWN0ZWRJbmRleCArIDFdLmtleVxuICAgICAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtb3ZlVXAoKSB7XG4gICAgICAgIGlmICh0aGlzLm1vdmVVcEJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5tb3ZlVXBCdXR0b24ubmF0aXZlRWxlbWVudC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zQ29udHJvbC52YWx1ZSBhcyBzdHJpbmdbXTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBzZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmtleSA9PT0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmluZEluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5zZWxlY3RlZENvbHVtbnNbZmluZEluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnNwbGljZShmaW5kSW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuc3BsaWNlKGZpbmRJbmRleCAtIDEgLCAwLCBjb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vdmVVcEJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5tb3ZlVXBCdXR0b24ubmF0aXZlRWxlbWVudC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbW92ZURvd24oKSB7XG4gICAgICAgIGlmICh0aGlzLm1vdmVEb3duQnV0dG9uKSB7XG4gICAgICAgICAgICB0aGlzLm1vdmVEb3duQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sdW1ucyAmJiB0aGlzLmNvbHVtbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZENvbHVtbnNDb250cm9sLnZhbHVlIGFzIHN0cmluZ1tdO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuY29sdW1ucy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5kSW5kZXggPj0gMCAmJiBmaW5kSW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zW2ZpbmRJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5zcGxpY2UoZmluZEluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnNwbGljZShmaW5kSW5kZXggKyAxICwgMCwgY29sdW1uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb3ZlRG93bkJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5tb3ZlRG93bkJ1dHRvbi5uYXRpdmVFbGVtZW50LmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RhbFNlcnZpY2UgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQgeyBDb2x1bW5TZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4vY29sdW1uLXNlbGVjdG9yLmNvbXBvbmVudCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb2x1bW5TZWxlY3RvclNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX21vZGFsOiBNb2RhbFNlcnZpY2UpIHtcbiAgICAvL1xuICB9XG5cbiAgc2VsZWN0Q29sdW1ucyhjb2x1bW5zOiB7IGtleTogc3RyaW5nLCB0aXRsZTogc3RyaW5nLCB2aXNpYmxlOiBib29sZWFuLCBpbmRleDogbnVtYmVyIH0pOlxuICAgIFByb21pc2U8e3Jlc3VsdDogc3RyaW5nLCBjb2x1bW5zPzogeyBrZXk6IHN0cmluZywgdGl0bGU6IHN0cmluZyxcbiAgICAgIHZpc2libGU6IGJvb2xlYW4sIGluZGV4OiBudW1iZXIgfVtdfT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMuX21vZGFsLm9wZW5Nb2RhbENvbXBvbmVudChDb2x1bW5TZWxlY3RvckNvbXBvbmVudCwge1xuICAgICAgICAgIGNsYXNzOiAnbW9kYWwtbGcgbW9kYWwtdGFibGUnLFxuICAgICAgICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWUsXG4gICAgICAgICAgYW5pbWF0ZWQ6IHRydWUsXG4gICAgICAgICAgaW5pdGlhbFN0YXRlOiB7XG4gICAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZjogQ29sdW1uU2VsZWN0b3JDb21wb25lbnQgPSBtb2RhbFJlZi5jb250ZW50O1xuICAgICAgICBjb21wb25lbnRSZWYuZGlzbWlzcy5zdWJzY3JpYmUoKHJlc3VsdDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gJ29rJykge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoe1xuICAgICAgICAgICAgICByZXN1bHQ6IHJlc3VsdCxcbiAgICAgICAgICAgICAgY29sdW1uczogY29tcG9uZW50UmVmLmNvbHVtbnNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh7XG4gICAgICAgICAgICByZXN1bHQ6IHJlc3VsdFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgTmF2aWdhdGlvblN0YXJ0LCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBza2lwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQWN0aXZhdGVkVGFibGVTZXJ2aWNlIHtcclxuICBwcml2YXRlIF9hY3RpdmVUYWJsZT86IEFkdmFuY2VkVGFibGVDb21wb25lbnQ7XHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBsYXN0IHRhYmxlIHRoYXQgd2FzIHNldCBhcyBhY3RpdmVcclxuICAgKiBOb3RlOiBFbWl0dGVkIHZhbHVlIG1heSBiZSB1bmRlZmluZWQgKGUuZy4gcmVzZXQgb24gcm91dGUgY2hhbmdlcylcclxuICAgKi9cclxuICBwdWJsaWMgcmVhZG9ubHkgbGFzdEFjdGl2ZVRhYmxlOlxyXG4gICAgQmVoYXZpb3JTdWJqZWN0PEFkdmFuY2VkVGFibGVDb21wb25lbnQgfCB1bmRlZmluZWQ+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBZHZhbmNlZFRhYmxlQ29tcG9uZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIC8qKlxyXG4gICAqIE9taXQgdGhlIGxhc3QgZW1pdHRlZCB2YWx1ZSB0byBvYnNlcnZlIG9ubHkgbmV3IGFjdGl2ZSB0YWJsZSBjaGFuZ2VzXHJcbiAgICogTm90ZTogRW1pdHRlZCB2YWx1ZSBtYXkgYmUgdW5kZWZpbmVkIChlLmcuIHJlc2V0IG9uIHJvdXRlIGNoYW5nZXMpXHJcbiAgICovXHJcbiAgcHVibGljIHJlYWRvbmx5IG5leHRBY3RpdmVUYWJsZTpcclxuICAgIE9ic2VydmFibGU8QWR2YW5jZWRUYWJsZUNvbXBvbmVudCB8IHVuZGVmaW5lZD4gPSB0aGlzLmxhc3RBY3RpdmVUYWJsZS5waXBlKHNraXAoMSkpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9yb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7XHJcbiAgICBfcm91dGVyLmV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xyXG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpIHtcclxuICAgICAgICBpZiAodGhpcy5fYWN0aXZlVGFibGUpIHtcclxuICAgICAgICAgIHRoaXMuYWN0aXZlVGFibGUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBhY3RpdmVUYWJsZSgpOiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9hY3RpdmVUYWJsZTtcclxuICB9XHJcblxyXG4gIHNldCBhY3RpdmVUYWJsZSh0YWJsZUNvbXBvbmVudDogQWR2YW5jZWRUYWJsZUNvbXBvbmVudCB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fYWN0aXZlVGFibGUgPSB0YWJsZUNvbXBvbmVudDtcclxuICAgIC8vIHByb3ZpZGUgY2hhbmdlIHRvIG9ic2VydmVyc1xyXG4gICAgdGhpcy5sYXN0QWN0aXZlVGFibGUubmV4dCh0aGlzLl9hY3RpdmVUYWJsZSk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7RGlyZWN0aXZlLCBIb3N0TGlzdGVuZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRUYWJsZVNlcnZpY2V9IGZyb20gJy4uL3RhYmxlcy5hY3RpdmF0ZWQtdGFibGUuc2VydmljZSc7XG5pbXBvcnQge0FuZ3VsYXJEYXRhQ29udGV4dH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XG5pbXBvcnQge0NvbmZpZ3VyYXRpb25TZXJ2aWNlLCBFcnJvclNlcnZpY2UsIExvYWRpbmdTZXJ2aWNlfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtDbGllbnREYXRhUXVlcnlhYmxlLCBSZXNwb25zZUVycm9yfSBmcm9tICdAdGhlbW9zdC9jbGllbnQnO1xuaW1wb3J0IHsgVGFibGVDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNvbnN0IE1BWF9FWFBPUlRfSVRFTVMgPSA1MDA7XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBFeHBvcnRMaW1pdENvbmZpZ3VyYXRpb24ge1xuICB0YWJsZXM/OiB7XG4gICAgZXhwb3J0TGltaXQ/OiBudW1iZXJcbiAgfTtcbn1cblxuQERpcmVjdGl2ZSh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICcudW5pdmVyc2lzLWJ0bi1leHBvcnQnXG59KVxuZXhwb3J0IGNsYXNzIEJ0bkV4cERpcmVjdGl2ZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2FjdGl2YXRlZFRhYmxlOiBBY3RpdmF0ZWRUYWJsZVNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NvbnRleHQ6IEFuZ3VsYXJEYXRhQ29udGV4dCxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfY29uZmlnOiBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9sb2FkaW5nU2VydmljZTogTG9hZGluZ1NlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2Vycm9yU2VydmljZTogRXJyb3JTZXJ2aWNlKSB7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIGFzeW5jIGNsaWNrRXZlbnQoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICh0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlLmV4cG9ydFZpZXcoKTtcbiAgICAgIC8qXG4gICAgICBjb25zdCBsYXN0UXVlcnkgPSB0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZS5sYXN0UXVlcnk7XG4gICAgICBjb25zdCB0YWJsZUNvbmZpZyA9IHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlLmNvbmZpZztcbiAgICAgIGNvbnN0IHNlcnZpY2VIZWFkZXJzID0gdGhpcy5fY29udGV4dC5nZXRTZXJ2aWNlKCkuZ2V0SGVhZGVycygpO1xuICAgICAgY29uc3QgcXVlcnlNb2RlbCA9IGxhc3RRdWVyeS5nZXRNb2RlbCgpO1xuICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5fY29udGV4dC5tb2RlbChxdWVyeU1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBsYXN0UXVlcnkuZ2V0UGFyYW1zKCk7XG4gICAgICBxdWVyeSA9IHRoaXMuY29uc3RydWN0UXVlcnkocXVlcnksIHF1ZXJ5UGFyYW1zLCB0YWJsZUNvbmZpZywgc2VydmljZUhlYWRlcnMpO1xuICAgICAgLy8gZ2V0IGV4cG9ydCBzZXR0aW5nc1xuICAgICAgY29uc3QgZXhwb3J0U2V0dGluZ3MgPSB0aGlzLl9jb25maWcuc2V0dGluZ3MgYXMgRXhwb3J0TGltaXRDb25maWd1cmF0aW9uO1xuICAgICAgLy8gZ2V0IGV4cG9ydCBsaW1pdFxuICAgICAgY29uc3QgbWF4RXhwb3J0SXRlbXMgPSBleHBvcnRTZXR0aW5ncyAmJiBleHBvcnRTZXR0aW5ncy50YWJsZXMgJiYgZXhwb3J0U2V0dGluZ3MudGFibGVzLmV4cG9ydExpbWl0O1xuICAgICAgaWYgKG1heEV4cG9ydEl0ZW1zICYmIHR5cGVvZiBtYXhFeHBvcnRJdGVtcyA9PT0gJ251bWJlcicgJiYgbWF4RXhwb3J0SXRlbXMgPiAwKSB7XG4gICAgICAgIHF1ZXJ5LnNraXAoMCkudGFrZShtYXhFeHBvcnRJdGVtcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWVyeS5za2lwKDApLnRha2UoTUFYX0VYUE9SVF9JVEVNUyk7XG4gICAgICB9XG4gICAgICAvLyBUaGlzIGNvbnN0cnVjdHMgdGhlIFVSSSBiYXNlZCBvbiB0aGUgd2F5IEB0aGVtb3N0IGRvZXNcbiAgICAgIGNvbnN0IHVybCA9IHRoaXMuY29uc3RydWN0VVJMKHF1ZXJ5KTtcbiAgICAgIHRoaXMuZG93bmxvYWRGaWxlKHVybCwgcXVlcnkuZ2V0U2VydmljZSgpLmdldEhlYWRlcnMoKSwgcXVlcnkuZ2V0TW9kZWwoKSk7ICovXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHBhcmFtZXRlcnMgdG8gdGhlIHF1ZXJ5IGJhc2VkIG9uXG4gICAqIHRoZSBhY3RpdmUgZmlsdGVycyBvZiB0aGUgYWN0aXZhdGVkIHRhYmxlXG4gICAqIEBwYXJhbSBxdWVyeVxuICAgKiBAcGFyYW0gcGFyYW1zOiBUaGUgZmlsdGVycyBvZiB0aGUgbGFzdCBxdWVyeSBvZiB0aGUgYWN0aXZhdGVkIHRhYmxlXG4gICAqIEByZXR1cm4gQ2xpZW50RGF0YVF1ZXJ5YWJsZVxuICAgKi9cbiAgc2V0UGFyYW1zKHF1ZXJ5OiBDbGllbnREYXRhUXVlcnlhYmxlLCBwYXJhbXMpOiBDbGllbnREYXRhUXVlcnlhYmxlIHtcbiAgICBpZiAocGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09ICdvYmplY3QnKSB7XG4gICAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBxdWVyeS5zZXRQYXJhbShrZXksIHBhcmFtc1trZXldKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgaGVhZGVycyB0byB0aGUgcXVlcnkgYmFzZWQgb25cbiAgICogdGhlIGRlZmF1bHQgaGVhZGVycyBvZiB0aGUgRGF0YUNvbnRleHRcbiAgICogYW5kIGFwcGVuZGluZyB0aGUgYWNjZXB0IGhlYWRlciB0byBnZXRcbiAgICogYW4geGxzeCBmaWxlIGZyb20gdGhlIEFQSVxuICAgKiBAcGFyYW0gcXVlcnlcbiAgICogQHBhcmFtIGhlYWRlcnM6IFRoZSBoZWFkZXJzIHRvIGFwcGVuZCB0byB0aGUgcXVlcnlcbiAgICogQHJldHVybiBDbGllbnREYXRhUXVlcnlhYmxlXG4gICAqL1xuICBzZXRIZWFkZXJzKHF1ZXJ5OiBDbGllbnREYXRhUXVlcnlhYmxlLCBoZWFkZXJzOiBIZWFkZXJzKTogQ2xpZW50RGF0YVF1ZXJ5YWJsZSB7XG4gICAgT2JqZWN0LmtleXMoaGVhZGVycykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoaGVhZGVycy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIHF1ZXJ5LmdldFNlcnZpY2UoKS5zZXRIZWFkZXIoa2V5LCBoZWFkZXJzW2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIHNldHMgYSBoZWFkZXIgdG8gYWNjZXB0IHhsc3ggZmlsZXNcbiAgICBxdWVyeS5nZXRTZXJ2aWNlKCkuc2V0SGVhZGVyKCdBY2NlcHQnLCAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnKTtcbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgc2VsZWN0IHBhcmFtZXRlciBvZiB0aGVcbiAgICogQ2xpZW50RGF0YVF1ZXJ5IGJ5IHJlcGxhY2luZyB0aGUgdGFyZ2V0IG5hbWVcbiAgICogb2YgdGhlIGZpZWxkIGJhc2VkIG9uIHRoZSBsb2NhbGl6ZWQgdHJhbnNsYXRpb25cbiAgICogb2YgdGhhdCBwcm9wZXJ0eSBvbiB0aGUgYWR2YW5jZWQgdGFibGVkXG4gICAqIEBwYXJhbSBxdWVyeVxuICAgKiBAcGFyYW0gdGFibGVDb25maWc6IFRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBhY3RpdmF0ZWQgdGFibGVcbiAgICogQHJldHVybiBDbGllbnREYXRhUXVlcnlhYmxlXG4gICAqL1xuICBjb25zdHJ1Y3RRdWVyeVBhcmFtKHF1ZXJ5OiBDbGllbnREYXRhUXVlcnlhYmxlLCB0YWJsZUNvbmZpZzogVGFibGVDb25maWd1cmF0aW9uKTogQ2xpZW50RGF0YVF1ZXJ5YWJsZSB7XG4gICAgbGV0IHNlbGVjdFF1ZXJ5ID0gcXVlcnkuZ2V0UGFyYW1zKCkuJHNlbGVjdDtcbiAgICBsZXQgc2VsZWN0UXVlcnlBcnJheSA9IHNlbGVjdFF1ZXJ5LnNwbGl0KCcsJyk7XG4gICAgc2VsZWN0UXVlcnlBcnJheSA9IHNlbGVjdFF1ZXJ5QXJyYXkubWFwKChzZWxlY3QpID0+IHtcbiAgICAgIGNvbnN0IHdvcmRzID0gc2VsZWN0LnNwbGl0KCcgJyk7XG4gICAgICBpZiAod29yZHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIGlmICh0YWJsZUNvbmZpZyAmJiB0YWJsZUNvbmZpZy5jb2x1bW5zKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgdGFibGVDb25maWcuY29sdW1ucykge1xuICAgICAgICAgICAgaWYgKGNvbHVtbi5wcm9wZXJ0eSA9PT0gd29yZHNbMl0gJiYgY29sdW1uLnRpdGxlKSB7XG4gICAgICAgICAgICAgIHdvcmRzWzJdID0gYFwiJHt0aGlzLl90cmFuc2xhdGUuaW5zdGFudChjb2x1bW4udGl0bGUpfVwiYDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnByb3BlcnR5ID09PSB3b3Jkc1syXSkge1xuICAgICAgICAgICAgICB3b3Jkc1syXSA9IGBcIiR7dGhpcy5fdHJhbnNsYXRlLmluc3RhbnQod29yZHNbMl0pfVwiYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh3b3Jkcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgaWYgKHRhYmxlQ29uZmlnICYmIHRhYmxlQ29uZmlnLmNvbHVtbnMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0YWJsZUNvbmZpZy5jb2x1bW5zKSB7XG4gICAgICAgICAgICBpZiAoY29sdW1uLm5hbWUgPT09IHdvcmRzWzBdICYmIGNvbHVtbi50aXRsZSkge1xuICAgICAgICAgICAgICB3b3Jkc1swXSA9IGAke3dvcmRzWzBdfSBhcyBcIiR7dGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoY29sdW1uLnRpdGxlKX1cImA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4ubmFtZSA9PT0gd29yZHNbMF0gJiYgY29sdW1uLnByb3BlcnR5KSB7XG4gICAgICAgICAgICAgIHdvcmRzWzBdID0gYCR7d29yZHNbMF19IGFzIFwiJHt0aGlzLl90cmFuc2xhdGUuaW5zdGFudChjb2x1bW4ucHJvcGVydHkpfVwiYDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdvcmRzWzBdID09PSBjb2x1bW4ubmFtZSAmJiB3b3Jkc1swXSA9PT0gJ2lkJyAmJiBjb2x1bW4uaGlkZGVuKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcbiAgICAgICAgICAgIH0gZWxzZSBpZiAod29yZHNbMF0gPT0gY29sdW1uLm5hbWUgfHwgd29yZHNbMF0gPT09IGNvbHVtbi5wcm9wZXJ0eSkge1xuICAgICAgICAgICAgICB3b3Jkc1swXSA9IGAke3dvcmRzWzBdfSBhcyBcIiR7dGhpcy5fdHJhbnNsYXRlLmluc3RhbnQod29yZHNbMF0pfVwiYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdvcmRzWzBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdvcmRzLmpvaW4oJyAnKTtcbiAgICB9KTtcbiAgICBzZWxlY3RRdWVyeSA9IHNlbGVjdFF1ZXJ5QXJyYXkuam9pbignLCcpO1xuICAgIHF1ZXJ5LnNldFBhcmFtKCckc2VsZWN0Jywgc2VsZWN0UXVlcnkgKTtcbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgZmV0Y2ggVVJMIGJhc2VkIHRoZSBxdWVyeSBwYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSBxdWVyeVxuICAgKiBAcmV0dXJuIFN0cmluZ1xuICAgKi9cbiAgY29uc3RydWN0VVJMKHF1ZXJ5KTogU3RyaW5nIHtcbiAgICBjb25zdCBiYXNlVVJMID0gcXVlcnkuZ2V0U2VydmljZSgpLmdldEJhc2UoKTtcbiAgICBsZXQgdXJsID0gYmFzZVVSTC5lbmRzV2l0aCgnLycpID8gKGJhc2VVUkwgKyBxdWVyeS5nZXRNb2RlbCgpICsgJz8nKSA6IChiYXNlVVJMICsgJy8nICsgcXVlcnkuZ2V0TW9kZWwoKSArICc/Jyk7XG4gICAgT2JqZWN0LmtleXMocXVlcnkuZ2V0UGFyYW1zKCkpLmZvckVhY2goKGtleSwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICB1cmwgKz0ga2V5ICsgJz0nICsgcXVlcnkuZ2V0UGFyYW1zKClba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybCArPSAnJicgKyBrZXkgKyAnPScgKyBxdWVyeS5nZXRQYXJhbXMoKVtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgcXVlcnkgYnkgc2V0dGluZyB0aGUgcGFyYW1ldGVycyBvZiB0aGVcbiAgICogYWR2YW5jZWQgdGFibGUncyBhY3RpdmUgZmlsdGVycywgc2V0cyB0aGUgbmVjZXNzYXJ5IGhlYWRlcnNcbiAgICogYW5kIGJ1aWxkIHRoZSBzZWxlY3QgcGFyYW1ldGVyIG9mIHRoZSBxdWVyeVxuICAgKiBAcGFyYW0gcXVlcnlcbiAgICogQHBhcmFtIHBhcmFtczogVGhlIGZpbHRlcnMgb2YgdGhlIGxhc3QgcXVlcnkgb2YgdGhlIGFjdGl2YXRlZCB0YWJsZVxuICAgKiBAcGFyYW0gdGFibGVDb25maWc6IFRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBhY3RpdmF0ZWQgdGFibGVcbiAgICogQHBhcmFtIGhlYWRlcnM6IFRoZSBoZWFkZXJzIHRvIGFwcGVuZCB0byB0aGUgcXVlcnlcbiAgICogQHJldHVybiBDbGllbnREYXRhUXVlcnlhYmxlXG4gICAqL1xuICBjb25zdHJ1Y3RRdWVyeShxdWVyeSwgcGFyYW1zLCB0YWJsZUNvbmZpZywgaGVhZGVyczogSGVhZGVycykge1xuICAgIGxldCBfcXVlcnkgPSB0aGlzLnNldFBhcmFtcyhxdWVyeSwgcGFyYW1zKTtcbiAgICBfcXVlcnkgPSB0aGlzLnNldEhlYWRlcnMoX3F1ZXJ5LCBoZWFkZXJzKTtcbiAgICBfcXVlcnkgPSB0aGlzLmNvbnN0cnVjdFF1ZXJ5UGFyYW0oX3F1ZXJ5LCB0YWJsZUNvbmZpZyk7XG4gICAgcmV0dXJuIF9xdWVyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGFuZCBzYXZlcyB0aGUgeGxzeCBmaWxlXG4gICAqIEBwYXJhbSB1cmxcbiAgICogQHBhcmFtIHNlcnZpY2VIZWFkZXJzOiBUaGUgaGVhZGVycyB0byBhcHBlbmQgdG8gdGhlIHF1ZXJ5XG4gICAqIEBwYXJhbSBtb2RlbE5hbWU6IFRoZSBtb2RlbCBuYW1lIG9mIHRoZSBhZHZhbmNlZCB0YWJsZVxuICAgKi9cbiAgZG93bmxvYWRGaWxlKHVybCwgc2VydmljZUhlYWRlcnM6IEhlYWRlcnMsIG1vZGVsTmFtZSkge1xuICAgIHRoaXMuX2xvYWRpbmdTZXJ2aWNlLnNob3dMb2FkaW5nKCk7XG4gICAgZmV0Y2goZW5jb2RlVVJJKHVybCksIHtcbiAgICAgIGhlYWRlcnM6IHNlcnZpY2VIZWFkZXJzLFxuICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJ1xuICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlICYmICFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgUmVzcG9uc2VFcnJvcihyZXNwb25zZS5zdGF0dXNUZXh0LCByZXNwb25zZS5zdGF0dXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlLmJsb2IoKTtcbiAgICB9KS50aGVuKGJsb2IgPT4ge1xuICAgICAgY29uc3Qgb2JqZWN0VXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcbiAgICAgIGEuc2V0QXR0cmlidXRlKCdzdHlsZScsICdkaXNwbGF5OiBub25lJyk7XG4gICAgICBhLmhyZWYgPSBvYmplY3RVcmw7XG4gICAgICBjb25zdCBkb3dubG9hZE5hbWUgPSBgJHttb2RlbE5hbWV9Lnhsc3hgO1xuICAgICAgYS5kb3dubG9hZCA9IGRvd25sb2FkTmFtZTtcbiAgICAgIC8vIHRoaXMgYWRkcyBzdXBwb3J0IGZvciBJRSBhbmQgTVMgRWRnZSAodXAgdG8gdmVyc2lvbiA0NC4xOTA0MSlcbiAgICAgIGlmICh3aW5kb3cubmF2aWdhdG9yICYmICh3aW5kb3cubmF2aWdhdG9yIGFzIGFueSkubXNTYXZlT3JPcGVuQmxvYikge1xuICAgICAgICAod2luZG93Lm5hdmlnYXRvciBhcyBhbnkpLm1zU2F2ZU9yT3BlbkJsb2IoYmxvYiwgZG93bmxvYWROYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGZvciBhbGwgb3RoZXIgYnJvd3NlcnNcbiAgICAgICAgYS5jbGljaygpO1xuICAgICAgfVxuICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwob2JqZWN0VXJsKTtcbiAgICAgIGEucmVtb3ZlKCk7XG4gICAgICB0aGlzLl9sb2FkaW5nU2VydmljZS5oaWRlTG9hZGluZygpO1xuICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICB0aGlzLl9sb2FkaW5nU2VydmljZS5oaWRlTG9hZGluZygpO1xuICAgICAgdGhpcy5fZXJyb3JTZXJ2aWNlLnNob3dFcnJvcihlcnIsIHtcbiAgICAgICAgY29udGludWVMaW5rOiAnLidcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbn1cbiIsImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5qZWN0b3IsXG4gIElucHV0LCBPbkRlc3Ryb3ksXG4gIE9uSW5pdCwgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FuZ3VsYXJEYXRhQ29udGV4dH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XG5pbXBvcnQge1RyYW5zbGF0ZVBpcGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7VGFibGVDb25maWd1cmF0aW9ufSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmludGVyZmFjZXMnO1xuaW1wb3J0IHtEYXRhU2VydmljZVF1ZXJ5UGFyYW1zfSBmcm9tICdAdGhlbW9zdC9jbGllbnQnO1xuaW1wb3J0IHtBZHZhbmNlZENvbHVtbkZvcm1hdHRlcn0gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzJztcbmltcG9ydCB7Q2xpZW50RGF0YVF1ZXJ5YWJsZX0gZnJvbSAnQHRoZW1vc3QvY2xpZW50JztcbmltcG9ydCB7QWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyfSBmcm9tICcuL2FkdmFuY2VkLWZpbHRlci12YWx1ZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7U3Vic2NyaXB0aW9uLCBCZWhhdmlvclN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtUZW1wbGF0ZVBpcGUsIExvYWRpbmdTZXJ2aWNlLCBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgTW9kYWxTZXJ2aWNlLCBESUFMT0dfQlVUVE9OUywgRXJyb3JTZXJ2aWNlLCBFeHBvcnRTcHJlYWRzaGVldFNlcnZpY2V9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcbmltcG9ydCB7SUFkdmFuY2VkVGFibGVGb3JtYXR0ZXJzfSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmZvcm1hdHRlcnMuaW50ZXJmYWNlJztcbi8vIGltcG9ydGFudCBub3RlOiB1c2UgdGhpcyBpbXBvcnQgdG8gYXZvaWQgQ2Fubm90IGNhbGwgYSBuYW1lc3BhY2UgKCdqcXVlcnknKSBlcnJvclxuaW1wb3J0ICogYXMgalF1ZXJ5XyBmcm9tICdqcXVlcnknO1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldCc7XG5pbXBvcnQge3RlbXBsYXRlfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldC1zY3JvbGxlcic7XG5pbXBvcnQgJ2RhdGF0YWJsZXMubmV0LWNvbHJlb3JkZXInO1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldC1idXR0b25zJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDb2x1bW5TZWxlY3RvclNlcnZpY2UgfSBmcm9tICcuLi9jb2x1bW4tc2VsZWN0b3IvY29sdW1uLXNlbGVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXhwb3J0TGltaXRDb25maWd1cmF0aW9uLCBNQVhfRVhQT1JUX0lURU1TIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9idG5leHAuZGlyZWN0aXZlJztcblxuLy8gcmVzdG9yZSBqcXVlcnkgaW1wb3J0IHRvIGF2b2lkIENhbm5vdCBjYWxsIGEgbmFtZXNwYWNlICgnanF1ZXJ5JykgZXJyb3JcbmNvbnN0IGpRdWVyeSA9IGpRdWVyeV87XG5leHBvcnQgaW50ZXJmYWNlIEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0IHtcbiAgcmVjb3Jkc1RvdGFsOiBudW1iZXI7XG4gIHJlY29yZHNGaWx0ZXJlZDogbnVtYmVyO1xuICBkYXRhOiBBcnJheTxhbnk+O1xufVxuXG5jb25zdCBEYXRhVGFibGVzQXBpOiBhbnkgPSBqUXVlcnkuZm4uZGF0YVRhYmxlLkFwaTtcbkRhdGFUYWJsZXNBcGkucmVnaXN0ZXIoICdwcm9jZXNzaW5nKCknLCBmdW5jdGlvbiggc2hvdzogYW55ICkge1xuICAgIHJldHVybiB0aGlzLml0ZXJhdG9yKCd0YWJsZScsICggY3R4OiBhbnkgKSA9PiB7XG4gICAgICAgIGN0eC5vQXBpLl9mblByb2Nlc3NpbmdEaXNwbGF5KCBjdHgsIHNob3cgKTtcbiAgICB9ICk7XG59KTtcblxuY29uc3QgRU1QVFlfREFUQVNFVCA9IHtcbiAgcmVjb3Jkc1RvdGFsOiAwLFxuICByZWNvcmRzRmlsdGVyZWQ6IDAsXG4gIGRhdGE6IFtdLFxufTtcblxuY2xhc3MgVGFibGVUcmFuc2xhdGlvbkNoYW5nZURldGVjdG9yIGV4dGVuZHMgQ2hhbmdlRGV0ZWN0b3JSZWYge1xuICBwdWJsaWMgY2hlY2tOb0NoYW5nZXMoKTogdm9pZCB7XG4gIH1cblxuICBwdWJsaWMgZGV0YWNoKCk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIGRldGVjdENoYW5nZXMoKTogdm9pZCB7XG4gIH1cblxuICBwdWJsaWMgbWFya0ZvckNoZWNrKCk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIHJlYXR0YWNoKCk6IHZvaWQge1xuICB9XG5cbn1cblxuZXhwb3J0IGxldCBDT0xVTU5fRk9STUFUVEVSUyA9IG5ldyBJbmplY3Rpb25Ub2tlbignY29sdW1uLmZvcm1hdHRlcnMnKTtcblxuZXhwb3J0IGNsYXNzIEV4cG9ydExpbWl0RXhjZWVkZWRFcnJvciBleHRlbmRzIFJhbmdlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnRXhwb3J0TGltaXRFeGNlZWRlZEVycm9yJztcbiAgfVxufVxuXG5jbGFzcyBDb2x1bW5Gb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIGNsYXNzPzogc3RyaW5nO1xuICBwdWJsaWMgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBwdWJsaWMgZGVmYXVsdENvbnRlbnQ/OiBzdHJpbmc7XG4gIHB1YmxpYyBmb3JtYXRTdHJpbmc/OiBzdHJpbmc7XG4gIHB1YmxpYyBmb3JtYXR0ZXI/OiBzdHJpbmc7XG4gIHB1YmxpYyBoaWRkZW4/OiBib29sZWFuO1xuICBwdWJsaWMgbmFtZT86IHN0cmluZztcbiAgcHVibGljIG9yZGVyPzogc3RyaW5nO1xuICBwdWJsaWMgcHJvcGVydHk/OiBzdHJpbmc7XG4gIHB1YmxpYyBzb3J0YWJsZT86IGJvb2xlYW47XG4gIHB1YmxpYyB0aXRsZSA9ICcnO1xuXG4gIHB1YmxpYyByZW5kZXIoZGF0YTogYW55LCB0eXBlOiBhbnksIHJvdzogYW55LCBtZXRhOiBhbnkpIHtcbiAgICAvL1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcmNlQ2FzdDxUPihpbnB1dDogYW55KTogVCB7XG4gIHJldHVybiBpbnB1dDtcbn1cblxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVDb25maWd1cmF0aW9uIHtcbiAgcHVibGljIHN0YXRpYyBjYXN0KGlucHV0OiBhbnksIGNsb25lPzogYm9vbGVhbik6IFRhYmxlQ29uZmlndXJhdGlvbiB7XG4gICAgaWYgKGNsb25lKSB7XG4gICAgICByZXR1cm4gZm9yY2VDYXN0PFRhYmxlQ29uZmlndXJhdGlvbj4oSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpbnB1dCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcmNlQ2FzdDxUYWJsZUNvbmZpZ3VyYXRpb24+KGlucHV0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRSYW5kb21JZGVudGlmaWVyKCkge1xuICByZXR1cm4gKFxuICAgIE51bWJlcihTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xpY2UoMikpXG4gICkudG9TdHJpbmcoMzYpO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtdGFibGUnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDx0YWJsZSAjdGFibGUgY2xhc3M9XCJkYXRhVGFibGVcIj5cbiAgICA8L3RhYmxlPlxuICAgIDxkaXYgI2VtcHR5VGFibGUgY2xhc3M9XCJkLW5vbmVcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY2lyY2xlIGJnLWdyYXktMzAwIGJvcmRlci1ncmF5LTEwMFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8aDQgY2xhc3M9XCJmb250LTN4bCB0ZXh0LWRhcmtcIiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuRW1wdHlUYWJsZVRpdGxlJ1wiPjwvaDQ+XG4gICAgICAgICAgPHAgY2xhc3M9XCJmb250LWxnIHRleHQtZGFya1wiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5FbXB0eVRhYmxlTWVzc2FnZSdcIj48L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAjZXJyb3JUZW1wbGF0ZSBjbGFzcz1cImQtbm9uZSBlcnJvci1tZXNzYWdlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jaXJjbGUgYmctZGFuZ2VyIGJvcmRlci1ncmF5LTEwMFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8aDQgY2xhc3M9XCJmb250LTN4bCB0ZXh0LXNlY29uZGFyeVwiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5EYXRhRXJyb3IuVGl0bGUnXCI+PC9oND5cbiAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtbGcgdGV4dC1zZWNvbmRhcnkgbWItMVwiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5EYXRhRXJyb3IuTWVzc2FnZSdcIj48L3A+XG4gICAgICAgICAgPHAgY2xhc3M9XCJmb250LWxnIHRleHQtc2Vjb25kYXJ5IGVycm9yLWlubmVyLW1lc3NhZ2VcIj5cbiAgICAgICAgICAgIDxzbWFsbD48L3NtYWxsPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgc3R5bGVVcmxzOiBbJy4vYWR2YW5jZWQtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuXG4gIHByaXZhdGUgX3F1ZXJ5PzogQ2xpZW50RGF0YVF1ZXJ5YWJsZTtcbiAgcHJpdmF0ZSBfY29uZmlnPzogVGFibGVDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIF9maXJzdExvYWQgPSB0cnVlO1xuICBwcml2YXRlIF9zaG93Rm9vdGVyID0gZmFsc2U7XG4gIHByaXZhdGUgX3Nob3dIZWFkZXIgPSB0cnVlO1xuICBwcml2YXRlIF9zaG93UGFnaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgX2lkID0gZ2V0UmFuZG9tSWRlbnRpZmllcigpO1xuICBwdWJsaWMgc21hcnRTZWxlY3QgPSBmYWxzZTtcbiAgcHVibGljIGNvbmZpZ0NoYW5nZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG5cbiAgQFZpZXdDaGlsZCgndGFibGUnKSBwdWJsaWMgdGFibGU/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdlbXB0eVRhYmxlJykgcHVibGljIGVtcHR5VGFibGU/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdlcnJvclRlbXBsYXRlJykgcHVibGljIGVycm9yVGVtcGxhdGU/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdsb2FkaW5nVGFibGUnKSBwdWJsaWMgbG9hZGluZ1RhYmxlPzogRWxlbWVudFJlZjtcbiAgQElucHV0KCkgcHVibGljIGhlaWdodCA9IDgwMDtcbiAgQElucHV0KCkgcHVibGljIHNob3dBY3Rpb25zID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIGF1dG9Mb2FkID0gdHJ1ZTtcbiAgQE91dHB1dCgnbG9hZCcpIHB1YmxpYyBsb2FkOiBFdmVudEVtaXR0ZXI8QWR2YW5jZWRUYWJsZURhdGFSZXN1bHQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdD4oKTtcbiAgQE91dHB1dCgnaW5pdCcpIHB1YmxpYyBpbml0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBASW5wdXQoJ3JlbG9hZCcpIHB1YmxpYyByZWxvYWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ3NlbGVjdCcpIHB1YmxpYyBzZWxlY3Q6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ2RyYXcnKSBwdWJsaWMgZHJhdzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgncGFnZScpIHB1YmxpYyBwYWdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdvcmRlcicpIHB1YmxpYyBvcmRlcjogRXZlbnRFbWl0dGVyPGFueVtdW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXVtdPigpO1xuICBAT3V0cHV0KCdzY3JvbGwnKSBwdWJsaWMgc2Nyb2xsOiBFdmVudEVtaXR0ZXI8eyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfT4oKTtcbiAgQE91dHB1dCgnc2VsZWN0ZWRJdGVtcycpIHB1YmxpYyBzZWxlY3RlZEl0ZW1zOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdsb2FkaW5nJykgcHVibGljIGxvYWRpbmc6IEV2ZW50RW1pdHRlcjx7XG4gICAgdGFyZ2V0OiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50XG4gIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgdGFyZ2V0OiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50XG4gIH0+KCk7XG5cbiAgQElucHV0KCkgcHVibGljIHNjcm9sbGFibGUgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgc2VydmVyU2lkZSA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBsZW5ndGhNZW51ID0gWzUwLCAxMDAsIDIwMCwgNTAwXTtcbiAgQElucHV0KCkgcHVibGljIHBhZ2luZyA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBwYWdlTGVuZ3RoID0gMjU7XG4gIEBJbnB1dCgpIHB1YmxpYyBjb2x1bW5PcmRlcmluZyA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgc3RhdGVTYXZlID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBzdGF0ZUxvYWRDYWxsYmFjaz86IChzZXR0aW5nczogYW55LCBjYWxsYmFjazogKHN0YXRlOiBhbnkpID0+IHZvaWQpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIHB1YmxpYyBzdGF0ZVNhdmVDYWxsYmFjaz86IChzZXR0aW5nczogYW55LCBzdGF0ZTogYW55KSA9PiB2b2lkO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBzY3JvbGxZID0gODAwO1xuICBASW5wdXQoKSBwdWJsaWMgc2Nyb2xsWCA9IHRydWU7XG4gIC8qKlxuICAgKiBFbmFibGVzIHJvdyBzZWxlY3Rpb24uIFRoZSBkZWZhdWxyIHZhbHVlIGlzIGZhbHNlXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0YWJsZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlIG11bHRpcGxlIHNlbGVjdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWVzIGlzIHRydWUuXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgbXVsdGlwbGVTZWxlY3Q6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSB0cnVlO1xuICAvKipcbiAgICogRW5hYmxlcyBjdXN0b20gc2VsZWN0aW9uIGFuZCBoaWRlcyBzZWxlY3QgY29sdW1uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21TZWxlY3QgPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIHNlbGVjdGVkOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgdW5zZWxlY3RlZDogYW55W10gPSBbXTtcbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIFVSTCB0byBsb2FkIHRhYmxlIGNvbmZpZ3VyYXRpb24gZnJvbVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGNvbmZpZ1NyYz86IHN0cmluZztcbiAgcHVibGljIGxhc3RFcnJvcjogYW55O1xuXG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGFibGUgY29uZmlndXJhdGlvblxuICAgKi9cbiAgQElucHV0KCdjb25maWcnKVxuICBwdWJsaWMgc2V0IGNvbmZpZyh2YWx1ZTogVGFibGVDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fY29uZmlnID0gdmFsdWU7XG4gICAgLy8gcmFpc2Ugc3Vic2NyaXB0aW9uXG4gICAgdGhpcy5jb25maWdDaGFuZ2VzLm5leHQodGhpcy5fY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcgYXMgVGFibGVDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVibGljIGdldCBsYXN0UXVlcnlUb3RhbEl0ZW1zKCkge1xuICAgIHJldHVybiB0aGlzLl9sYXN0UXVlcnlUb3RhbEl0ZW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRhYmxlIGZvb3RlciB3aWxsIGJlIHZpc2libGUgb3Igbm90XG4gICAqL1xuICBASW5wdXQoJ3Nob3dGb290ZXInKVxuICBwdWJsaWMgc2V0IHNob3dGb290ZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zaG93Rm9vdGVyID0gdmFsdWU7XG4gICAgLy8gc2hvdyBvciBoaWRlIGZvb3RlclxuICAgIGlmICh0aGlzLl9lbGVtZW50ICYmIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAucXVlcnlTZWxlY3RvcignLmRhdGFUYWJsZXNfaW5mbycpO1xuICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkLW5vbmUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzaG93Rm9vdGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9zaG93Rm9vdGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRhYmxlIGZvb3RlciB3aWxsIGJlIHZpc2libGUgb3Igbm90XG4gICAqL1xuICAgQElucHV0KCdzaG93SGVhZGVyJylcbiAgIHB1YmxpYyBzZXQgc2hvd0hlYWRlcih2YWx1ZTogYm9vbGVhbikge1xuICAgICB0aGlzLl9zaG93SGVhZGVyID0gdmFsdWU7XG4gICAgIC8vIHNob3cgb3IgaGlkZSBmb290ZXJcbiAgICAgaWYgKHRoaXMuX2VsZW1lbnQgJiYgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgY29uc3QgZWxlbWVudCA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGU+dGhlYWQnKTtcbiAgICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICAgICByZXR1cm47XG4gICAgICAgfVxuICAgICAgIGNvbnN0IGRhdGFUYWJsZSA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KS5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlJyk7XG4gICAgICAgaWYgKGRhdGFUYWJsZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgICB9XG4gICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2Qtbm9uZScpO1xuICAgICAgICAgLy8gYWRkIHRvcCBtYXJnaW5cbiAgICAgICAgIGRhdGFUYWJsZS5jbGFzc0xpc3QucmVtb3ZlKCdtdC0yJyk7XG4gICAgICAgfSBlbHNlIHtcbiAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG4gICAgICAgICAvLyByZW1vdmUgdG9wIG1hcmdpblxuICAgICAgICAgZGF0YVRhYmxlLmNsYXNzTGlzdC5hZGQoJ210LTInKTtcbiAgICAgICB9XG4gICAgIH1cbiAgIH1cblxuICAgcHVibGljIGdldCBzaG93SGVhZGVyKCkge1xuICAgICByZXR1cm4gdGhpcy5fc2hvd0hlYWRlcjtcbiAgIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgcGFnaW5nIGluZm9ybWF0aW9uIHdpbGwgYmUgdmlzaWJsZSBvciBub3RcbiAgICovXG4gIEBJbnB1dCgnc2hvd1BhZ2luZycpXG4gIHB1YmxpYyBzZXQgc2hvd1BhZ2luZyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3Nob3dQYWdpbmcgPSB2YWx1ZTtcbiAgICAvLyBzaG93IG9yIGhpZGUgZm9vdGVyXG4gICAgaWYgKHRoaXMuX2VsZW1lbnQgJiYgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gKCB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpXG4gICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlc19wYWdpbmF0ZScpO1xuICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgalF1ZXJ5KGVsZW1lbnQpLnNob3coKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGpRdWVyeShlbGVtZW50KS5oaWRlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzaG93UGFnaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9zaG93UGFnaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhbiBhY3RpdmUgcXVlcnkgZm9yIHRoaXMgdGFibGVcbiAgICovXG4gIEBJbnB1dCgncXVlcnknKVxuICBwdWJsaWMgc2V0IHF1ZXJ5KHZhbHVlOiBDbGllbnREYXRhUXVlcnlhYmxlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fcXVlcnkgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXJ5IGFzIENsaWVudERhdGFRdWVyeWFibGU7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgdHJhbnNsYXRvcjogVHJhbnNsYXRlUGlwZTtcbiAgcHVibGljIGRhdGFUYWJsZTogYW55O1xuICBwdWJsaWMgZHRPcHRpb25zOiBhbnk7XG4gIHByaXZhdGUgbGFzdFF1ZXJ5UGFyYW1zPzogRGF0YVNlcnZpY2VRdWVyeVBhcmFtcztcbiAgcHJpdmF0ZSBfbGFzdFF1ZXJ5VG90YWxJdGVtcyA9IDA7XG4gIHByaXZhdGUgcmVsb2FkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfY29udGV4dDogQW5ndWxhckRhdGFDb250ZXh0LFxuICAgICAgICAgICAgICBASW5qZWN0KENPTFVNTl9GT1JNQVRURVJTKSBwcml2YXRlIF9jb2x1bW5Gb3JtYXR0ZXJzOiBJQWR2YW5jZWRUYWJsZUZvcm1hdHRlcnMsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICAgICAgICBwcml2YXRlIF9hZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXI6IEFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdGVtcGxhdGU6IFRlbXBsYXRlUGlwZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfbG9hZGluZzogTG9hZGluZ1NlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2h0dHA6IEh0dHBDbGllbnQsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NvbHVtblNlbGVjdG9yOiBDb2x1bW5TZWxlY3RvclNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9leHBvcnRTcHJlYWRzaGVldDogRXhwb3J0U3ByZWFkc2hlZXRTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9tb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfZXJyb3JTZXJ2aWNlOiBFcnJvclNlcnZpY2UpIHtcbiAgICAvLyBpbml0aWFsaXplIHRyYW5zbGF0ZSBwaXBlXG4gICAgdGhpcy50cmFuc2xhdG9yID0gbmV3IFRyYW5zbGF0ZVBpcGUodGhpcy5fdHJhbnNsYXRlU2VydmljZSwgbmV3IFRhYmxlVHJhbnNsYXRpb25DaGFuZ2VEZXRlY3RvcigpKTtcbiAgICBqUXVlcnkuZm4uZGF0YVRhYmxlLmV4dC5jbGFzc2VzLnNQYWdlQnV0dG9uID0gJ2J0bic7XG4gICAgalF1ZXJ5LmZuLmRhdGFUYWJsZS5leHQuY2xhc3Nlcy5zUGFnZUJ1dHRvbkFjdGl2ZSA9ICdidG4gYnRuLWxpZ2h0JztcbiAgICB0aGlzLnJlbG9hZFN1YnNjcmlwdGlvbiA9IHRoaXMucmVsb2FkLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5mZXRjaCgpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gc2ltcGxlIHNlYXJjaFxuICBwdWJsaWMgc2VhcmNoKHNlYXJjaFRleHQpIHtcbiAgICB0aGlzLnF1ZXJ5ID0gdGhpcy5xdWVyeSB8fCB0aGlzLl9jb250ZXh0Lm1vZGVsKHRoaXMuY29uZmlnLm1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgIGlmICh0aGlzLnNlcnZlclNpZGUpIHtcbiAgICAgIGlmIChzZWFyY2hUZXh0ICYmIHRoaXMuY29uZmlnLnNlYXJjaEV4cHJlc3Npb24pIHtcbiAgICAgICAgLy8gdmFsaWRhdGUgc2VhcmNoIHRleHQgaW4gZG91YmxlIHF1b3Rlc1xuICAgICAgICBpZiAoL15cIiguKj8pXCIkLy50ZXN0KHNlYXJjaFRleHQpKSB7XG4gICAgICAgICAgdGhpcy5xdWVyeS5zZXRQYXJhbSgnJGZpbHRlcicsXG4gICAgICAgICAgICB0aGlzLl90ZW1wbGF0ZS50cmFuc2Zvcm0odGhpcy5jb25maWcuc2VhcmNoRXhwcmVzc2lvbiwge1xuICAgICAgICAgICAgICB0ZXh0OiBzZWFyY2hUZXh0LnJlcGxhY2UoL15cInxcIiQvZywgJycpLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHRyeSB0byBzcGxpdCB3b3Jkc1xuICAgICAgICAgIGNvbnN0IHdvcmRzID0gc2VhcmNoVGV4dC5zcGxpdCgnICcpO1xuICAgICAgICAgIC8vIGpvaW4gd29yZHMgdG8gYSBzaW5nbGUgZmlsdGVyXG4gICAgICAgICAgY29uc3QgZmlsdGVyID0gd29yZHMubWFwKCh3b3JkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKCh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5zZWFyY2hFeHByZXNzaW9uKSBhcyBzdHJpbmcsIHtcbiAgICAgICAgICAgICAgdGV4dDogd29yZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLmpvaW4oJyBhbmQgJyk7XG4gICAgICAgICAgLy8gc2V0IGZpbHRlclxuICAgICAgICAgIHRoaXMucXVlcnkuc2V0UGFyYW0oJyRmaWx0ZXInLCBmaWx0ZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjbGVhciBmaWx0ZXJcbiAgICAgICAgdGhpcy5xdWVyeS5zZXRQYXJhbSgnJGZpbHRlcicsIG51bGwpO1xuICAgICAgfVxuICAgICAgdGhpcy5fZmlyc3RMb2FkID0gZmFsc2U7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5kcmF3KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGVuc3VyZSBlbXB0eSB0YWJsZSBsYXlvdXRcbiAgICAgIHRoaXMucmVzZXRFbXB0eVRhYmxlKCk7XG4gICAgICAvLyBzZWFyY2ggbG9jYWxseVxuICAgICAgdGhpcy5kYXRhVGFibGUuc2VhcmNoKHNlYXJjaFRleHQudHJpbSgpKS5kcmF3KCk7XG4gICAgICAvLyBnZXQgaW5kZXhlcyBvZiBmaWx0ZXJlZCByb3dzXG4gICAgICBjb25zdCBpbmRleGVzID0gQXJyYXkuZnJvbSh0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLmFpRGlzcGxheSk7XG4gICAgICAvLyBzZXQgcmVjb3Jkc0ZpbHRlcmVkXG4gICAgICBjb25zdCByZWNvcmRzRmlsdGVyZWQgPSBpbmRleGVzLmxlbmd0aDtcbiAgICAgIC8vIHNldCByZWNvcmRzVG90YWxcbiAgICAgIGNvbnN0IHJlY29yZHNUb3RhbCA9IGluZGV4ZXMubGVuZ3RoO1xuICAgICAgLy8gcmV0cmlldmUgZGF0YSBmcm9tIGluZGV4ZXNcbiAgICAgIGNvbnN0IHJvd3MgPSBBcnJheS5mcm9tKHRoaXMuZGF0YVRhYmxlLnJvd3MoKS5kYXRhKCkpO1xuICAgICAgY29uc3QgZGF0YSA9IGluZGV4ZXMubWFwKGluZGV4ID0+IHJvd3NbPG51bWJlcj5pbmRleF0pO1xuICAgICAgLy8gZW1pdCByZXN1bHRzIHRvIGxvYWQgb3V0cHV0XG4gICAgICB0aGlzLmxvYWQuZW1pdCh7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIHJlY29yZHNGaWx0ZXJlZDogcmVjb3Jkc0ZpbHRlcmVkLFxuICAgICAgICByZWNvcmRzVG90YWw6IHJlY29yZHNUb3RhbFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZldGNoKGNsZWFyU2VsZWN0ZWQ/OiBib29sZWFuKSB7XG4gICAgLy8gaWYgZGF0YSB0YWJsZSBpcyBudWxsXG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlID09IG51bGwpIHtcbiAgICAgIC8vIGluaXRpYWxpemUgZGF0YSB0YWJsZVxuICAgICAgcmV0dXJuIHRoaXMubmdPbkluaXQoKTtcbiAgICB9XG4gICAgLy8gY2xlYXIgc2VsZWN0aW9uIGlmIHBhcmFtZXRlciBpcyBub3QgZGVjbGFyZWQgb3IgaXQncyB0cnVlXG4gICAgaWYgKGNsZWFyU2VsZWN0ZWQgPT0gbnVsbCB8fCBjbGVhclNlbGVjdGVkID09PSB0cnVlKSB7XG4gICAgICAvLyBzZXQgc21hcnQgc2VsZWN0IHRvIGZhbHNlXG4gICAgICB0aGlzLnNtYXJ0U2VsZWN0ID0gZmFsc2U7XG4gICAgICAvLyBjbGVhciBzZWxlY3RlZCBpdGVtc1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIC8vIGNsZWFyIHVuc2VsZWN0ZWQgaXRlbXNcbiAgICAgIGlmICh0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy51bnNlbGVjdGVkLmxlbmd0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBsb2FkIGRhdGEgb25seVxuICAgIHRoaXMuZGF0YVRhYmxlLmRyYXcoKTtcbiAgfVxuXG4gIHB1YmxpYyBkZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgdGhpcy5kYXRhVGFibGUuZGVzdHJveSgpO1xuICAgICAgdGhpcy5fZmlyc3RMb2FkID0gdHJ1ZTtcbiAgICAgIGlmICh0aGlzLnRhYmxlKSB7XG4gICAgICAgIGpRdWVyeSh0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQpLmVtcHR5KCk7XG4gICAgICB9XG4gICAgICB0aGlzLmRhdGFUYWJsZSA9IG51bGw7XG4gICAgICAvLyBjbGVhciBzZWxlY3RlZCBpdGVtc1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIC8vIGNsZWFyIHVuc2VsZWN0ZWQgaXRlbXNcbiAgICAgIGlmICh0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy51bnNlbGVjdGVkLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICAvLyBzZXQgc21hcnQgc2VsZWN0IHRvIGZhbHNlXG4gICAgICB0aGlzLnNtYXJ0U2VsZWN0ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdHMgdGhlIHNwZWNpZmllZCBkYXRhIHJvd1xuICAgKi9cbiAgcHVibGljIHNlbGVjdFJvdyhyb3c6IGFueSwgc2lsZW50PzogYm9vbGVhbikge1xuICAgIGlmIChyb3cpIHtcbiAgICAgIC8vIGdldCByb3dcbiAgICAgIGNvbnN0IHJvd05vZGUgPSByb3cubm9kZSgpO1xuICAgICAgLy8gaWYgbXVsdGlwbGUgc2VsZWN0IGlzIGZhbHNlXG4gICAgICBpZiAodGhpcy5tdWx0aXBsZVNlbGVjdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgICAgIC8vIGVudW1lcmF0ZSByb3dcbiAgICAgICAgICB0aGlzLmRhdGFUYWJsZS5yb3dzKCkubm9kZXMoKS5lYWNoKChub2RlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChub2RlICE9PSByb3dOb2RlKSB7XG4gICAgICAgICAgICAgIGpRdWVyeShub2RlKS5maW5kKCc6Y2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGF0YVRhYmxlLnJvd3MoJy5zZWxlY3RlZCcpLm5vZGVzKCkuZWFjaCgobm9kZTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAobm9kZSAhPT0gcm93Tm9kZSkge1xuICAgICAgICAgICAgICBqUXVlcnkobm9kZSkucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2xlYXIgc2VsZWN0ZWRcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgLy8gaWYgY3VzdG9tIHNlbGVjdCBtb2RlIGlzIG9mZlxuICAgICAgaWYgKHRoaXMuY3VzdG9tU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgICBqUXVlcnkocm93Tm9kZSkuZmluZCgnOmNoZWNrYm94JykucHJvcCgnY2hlY2tlZCcsIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gb3RoZXJ3aXNlIGFkZCBjbGFzc1xuICAgICAgICBqUXVlcnkocm93Lm5vZGUoKSkuYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgICB9XG4gICAgICAvLyBnZXQgcm93IGRhdGFcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHkgfHwgdGhpcy5jb25maWcuY29sdW1uc1swXS5uYW1lIHx8ICcnO1xuICAgICAgY29uc3QgZGF0YSA9IHJvdy5kYXRhKCk7XG4gICAgICAvLyBzZWFyY2ggc2VsZWN0ZWQgaXRlbXNcbiAgICAgIGxldCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBkYXRhW2tleV07XG4gICAgICB9KTtcbiAgICAgIGlmIChmaW5kSW5kZXggPj0gMCkge1xuICAgICAgICAvLyByZW1vdmUgcHJldmlvdXNseSBzZWxlY3RlZCByb3dcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoZmluZEluZGV4LCAxKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWQucHVzaChkYXRhKTtcbiAgICAgIC8vIHZhbGlkYXRlIHVuc2VsZWN0ZWQgZGF0YVxuICAgICAgZmluZEluZGV4ID0gdGhpcy51bnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBkYXRhW2tleV07XG4gICAgICB9KTtcbiAgICAgIGlmIChmaW5kSW5kZXggPj0gMCkge1xuICAgICAgICAvLyByZW1vdmUgcHJldmlvdXNseSBzZWxlY3RlZCByb3dcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkLnNwbGljZShmaW5kSW5kZXgsIDEpO1xuICAgICAgfVxuICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5zZWxlY3RzIHRoZSBzcGVjaWZpZWQgZGF0YSByb3cgaWYgaXQncyBzZWxlY3RlZFxuICAgKi9cbiAgcHVibGljIHVuU2VsZWN0Um93KHJvdzogYW55LCBzaWxlbnQ/OiBib29sZWFuKSB7XG4gICAgaWYgKHJvdykge1xuICAgICAgLy8gaWYgY3VzdG9tIHNlbGVjdCBtb2RlIGlzIG9mZlxuICAgICAgaWYgKHRoaXMuY3VzdG9tU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgICBqUXVlcnkocm93Lm5vZGUoKSkuZmluZCgnOmNoZWNrYm94JykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG90aGVyd2lzZSBhZGQgY2xhc3NcbiAgICAgICAgalF1ZXJ5KHJvdy5ub2RlKCkpLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpO1xuICAgICAgfVxuICAgICAgLy8gZ2V0IGZpcnN0IGNvbHVtbiBrZXlcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHkgfHwgdGhpcy5jb25maWcuY29sdW1uc1swXS5uYW1lIHx8ICcnO1xuICAgICAgY29uc3QgZGF0YSA9IHJvdy5kYXRhKCk7XG4gICAgICBjb25zdCBpZCA9IGRhdGFba2V5XTtcbiAgICAgIGxldCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBpZDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGZpbmRJbmRleCA+PSAwKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKGZpbmRJbmRleCwgMSk7XG4gICAgICAgIGlmICh0aGlzLnNtYXJ0U2VsZWN0KSB7XG4gICAgICAgICAgLy8gYWRkIHRoaXMgcm93IHRvIHVuc2VsZWN0ZWQgcm93c1xuICAgICAgICAgIGZpbmRJbmRleCA9IHRoaXMudW5zZWxlY3RlZC5maW5kSW5kZXgoKHgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB4W2tleV0gPT09IGlkO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChmaW5kSW5kZXggPCAwKSB7XG4gICAgICAgICAgICB0aGlzLnVuc2VsZWN0ZWQucHVzaChkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0QW55KCkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgIC8vIHNldCBzbWFydCBzZWxlY3QgZmxhZ1xuICAgICAgdGhpcy5zbWFydFNlbGVjdCA9IHRydWU7XG4gICAgICAvLyBzZWxlY3QgYW55IHJvd1xuICAgICAgdGhpcy5kYXRhVGFibGUucm93cygpLmV2ZXJ5KChpbmRleDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZGF0YVRhYmxlLnJvdyggaW5kZXggKTtcbiAgICAgICAgdGhpcy5zZWxlY3RSb3cocm93LCB0cnVlKTtcbiAgICAgIH0pO1xuICAgICAgLy8gZW1pdCBzZWxlY3Rpb24gZXZlbnRcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3ROb25lKCkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgIC8vIHNldCBzbWFydCBzZWxlY3QgZmxhZ1xuICAgICAgdGhpcy5zbWFydFNlbGVjdCA9IGZhbHNlO1xuICAgICAgdGhpcy51bnNlbGVjdGVkLnNwbGljZSgwLCB0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIC8vIHNlbGVjdCBhbnkgcm93XG4gICAgICB0aGlzLmRhdGFUYWJsZS5yb3dzKCkuZXZlcnkoKGluZGV4OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhVGFibGUucm93KCBpbmRleCApO1xuICAgICAgICB0aGlzLnVuU2VsZWN0Um93KHJvdywgdHJ1ZSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIC8vIGVtaXQgc2VsZWN0aW9uIGV2ZW50XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlU2VsZWN0Um93KHJvdzogYW55KSB7XG4gICAgaWYgKHJvdykge1xuICAgICAgY29uc3QgZGF0YSA9IHJvdy5kYXRhKCk7XG4gICAgICAvLyBnZXQgZmlyc3QgY29sdW1uIGtleVxuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eSB8fCB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLm5hbWUgfHwgJyc7XG4gICAgICAvLyBnZXQgaWRcbiAgICAgIGNvbnN0IGlkID0gZGF0YVtrZXldO1xuICAgICAgLy8gZmluZCBpZiByb3cgaXMgc2VsZWN0ZWRcbiAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWQuZmluZCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBpZDtcbiAgICAgIH0pO1xuICAgICAgLy8gaWYgcm93IGlzIHNlbGVjdGVkXG4gICAgICBpZiAoZmluZEluZGV4ID49IDApIHtcbiAgICAgICAgLy8gdW5zZWxlY3RcbiAgICAgICAgdGhpcy51blNlbGVjdFJvdyhyb3cpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RSb3cocm93KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub2luc3BlY3Rpb24gSlNNZXRob2RDYW5CZVN0YXRpY1xuICAvKipcbiAgICogRGF0YXRhYmxlcyBjb2x1bW4gcmVuZGVyZXIgZm9yIHNlbGVjdCBjaGVja2JveFxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcGFyYW0gdHlwZVxuICAgKiBAcGFyYW0gcm93XG4gICAqIEBwYXJhbSBtZXRhXG4gICAqL1xuICBwcml2YXRlIF9yZW5kZXJTZWxlY3QoZGF0YSwgdHlwZSwgcm93LCBtZXRhKSB7XG4gICAgLy8gZ2V0IGNvbHVtblxuICAgIGNvbnN0IGNvbHVtbiA9IG1ldGEuc2V0dGluZ3MuYW9Db2x1bW5zW21ldGEuY29sXTtcbiAgICBpZiAodHlwZW9mIGNvbHVtbi5zZWxlY3RUZW1wbGF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW4sIHtcbiAgICAgICAgc2VsZWN0VGVtcGxhdGU6IHRlbXBsYXRlKGA8aW5wdXQgY2xhc3M9XCJjaGVja2JveCBjaGVja2JveC10aGVtZSBzLXJvd1wiIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGlkPVwicy0ke3RoaXMuX2lkfS1cXCR7bWV0YS5yb3d9XCIgZGF0YS1pZD1cIlxcJHtkYXRhfVwiIC8+PGxhYmVsIGZvcj1cInMtJHt0aGlzLl9pZH0tXFwke21ldGEucm93fVwiPiZuYnNwOzwvbGFiZWw+XG4gICAgICAgIGApLFxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIHJlbmRlciB0ZW1wbGF0ZVxuICAgIHJldHVybiBjb2x1bW4uc2VsZWN0VGVtcGxhdGUoe1xuICAgICAgbWV0YSxcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICB0aGlzLmxvYWRpbmcuZW1pdCh7XG4gICAgICAgIHRhcmdldDogdGhpc1xuICAgICAgfSk7XG4gICAgICAvLyBwYXJzZSBwcm9wZXJ0aWVzXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29uZmlnLCAnc2VsZWN0YWJsZScpKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0YWJsZSA9IHRoaXMuY29uZmlnLnNlbGVjdGFibGU7XG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29uZmlnLCAnbXVsdGlwbGVTZWxlY3QnKSkge1xuICAgICAgICB0aGlzLm11bHRpcGxlU2VsZWN0ID0gdGhpcy5jb25maWcubXVsdGlwbGVTZWxlY3Q7XG4gICAgICB9XG4gICAgICAvLyBwcmVwYXJlIGNvbmZpZ3VyYXRpb24gZm9yIGNvbHVtbnNcbiAgICAgIGNvbnN0IHRhYmxlQ29sdW1ucyA9IHRoaXMuY29uZmlnLmNvbHVtbnNcbiAgICAgICAgLy8gZmlsdGVyIGFjdGlvbiBsaW5rIGNvbHVtblxuICAgICAgICAuZmlsdGVyKChjb2x1bW4pID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlciAmJiBjb2x1bW4uZm9ybWF0dGVyID09PSAnQWN0aW9uTGlua0Zvcm1hdHRlcicgJiYgdGhpcy5zaG93QWN0aW9ucyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pLm1hcCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgLy8gY29udmVydCBjb2x1bW4gdG8gYWR2YW5jZSB0YWJsZSBjb2x1bW5cbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgQ29sdW1uRm9ybWF0dGVyKHRoaXMuX2luamVjdG9yKSwgY29sdW1uKTtcbiAgICAgICAgfSkubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgICBjb25zdCBjb2x1bW5EZWZpbml0aW9uID0ge1xuICAgICAgICAgICAgZGF0YTogY29sdW1uLnByb3BlcnR5IHx8IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgZGVmYXVsdENvbnRlbnQ6IGNvbHVtbi5kZWZhdWx0Q29udGVudCAhPSBudWxsID8gY29sdW1uLmRlZmF1bHRDb250ZW50IDogJycsXG4gICAgICAgICAgICB0aXRsZTogdGhpcy50cmFuc2xhdG9yLnRyYW5zZm9ybShjb2x1bW4udGl0bGUpLFxuICAgICAgICAgICAgc29ydGFibGU6IGNvbHVtbi5oYXNPd25Qcm9wZXJ0eSgnc29ydGFibGUnKSA/IGNvbHVtbi5zb3J0YWJsZSA6IHRydWUsXG4gICAgICAgICAgICB2aXNpYmxlOiBjb2x1bW4uaGFzT3duUHJvcGVydHkoJ2hpZGRlbicpID8gIWNvbHVtbi5oaWRkZW4gOiB0cnVlLFxuICAgICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChjb2x1bW4uY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjb2x1bW4uY2xhc3NOYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICcnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXJzKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGRhdGE7XG4gICAgICAgICAgICAgICAgKGNvbHVtbi5mb3JtYXR0ZXJzIGFzIGFueVtdKS5mb3JFYWNoKChjb2x1bW5Gb3JtYXR0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHNlbGYuX2NvbHVtbkZvcm1hdHRlcnNbY29sdW1uRm9ybWF0dGVyLmZvcm1hdHRlcl07XG4gICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0dGVyICYmIHR5cGVvZiBmb3JtYXR0ZXIucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXRTdHJpbmcgPSBjb2x1bW5Gb3JtYXR0ZXIuZm9ybWF0U3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0T3B0aW9ucyA9IGNvbHVtbkZvcm1hdHRlci5mb3JtYXRPcHRpb25zO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZm9ybWF0dGVyLnJlbmRlci5iaW5kKGNvbHVtbikocmVzdWx0LCB0eXBlLCByb3csIG1ldGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBjb2x1bW4uZm9ybWF0U3RyaW5nO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBjb2x1bW4uZm9ybWF0T3B0aW9ucztcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBjaGVjayBpZiBjb2x1bW4gZm9ybWF0dGVycyBleHBvcnQgY3JlYXRlZENlbGwgZXZlbnRcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gY29sdW1uLmZvcm1hdHRlcnMuZmlsdGVyKChjb2x1bW5Gb3JtYXR0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGNvbHVtbkZvcm1hdHRlci5hZnRlclJlbmRlciA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgICAgICAgY3JlYXRlZENlbGwoY2VsbDogYW55LCBjZWxsRGF0YTogYW55LCByb3dEYXRhOiBhbnksIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goKGNvbHVtbkZvcm1hdHRlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBzZWxmLl9jb2x1bW5Gb3JtYXR0ZXJzW2NvbHVtbkZvcm1hdHRlci5mb3JtYXR0ZXJdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0dGVyICYmIHR5cGVvZiBmb3JtYXR0ZXIuYWZ0ZXJSZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXIuYWZ0ZXJSZW5kZXIuYmluZChjb2x1bW4pKGNlbGwsIGNlbGxEYXRhLCByb3dEYXRhLCByb3dJbmRleCwgY29sSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHNlbGYuX2NvbHVtbkZvcm1hdHRlcnNbY29sdW1uLmZvcm1hdHRlcl07XG4gICAgICAgICAgICBpZiAoZm9ybWF0dGVyICYmIHR5cGVvZiBmb3JtYXR0ZXIucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICAgIHJlbmRlcjogZm9ybWF0dGVyLnJlbmRlci5iaW5kKGNvbHVtbiksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZvcm1hdHRlciAmJiB0eXBlb2YgZm9ybWF0dGVyLmFmdGVyUmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICAgIHJlbmRlcjogZm9ybWF0dGVyLnJlbmRlci5iaW5kKGNvbHVtbiksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgICBjcmVhdGVkQ2VsbDogZm9ybWF0dGVyLmFmdGVyUmVuZGVyLmJpbmQoY29sdW1uKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjb2x1bW5EZWZpbml0aW9uO1xuICAgICAgICB9KTtcbiAgICAgIC8vIGdldCB0YWJsZSBlbGVtZW50XG4gICAgICBjb25zdCB0YWJsZUVsZW1lbnQgPSBqUXVlcnkodGhpcy50YWJsZSAmJiB0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgalF1ZXJ5KHdpbmRvdykub24oJ3Jlc2l6ZScsICgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFUYWJsZS5jb2x1bW5zLmFkanVzdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgMSk7XG4gICAgICB9KTtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tc2hhZG93ZWQtdmFyaWFibGVcbiAgICAgIHRhYmxlRWxlbWVudC5vbigncHJvY2Vzc2luZy5kdCcsIChldmVudCwgc2V0dGluZ3MsIHByb2Nlc3NpbmcpID0+IHtcbiAgICAgICAgaWYgKHByb2Nlc3NpbmcpIHtcbiAgICAgICAgICAvLyBjbGVhciBlbXB0eSB0YWJsZSBlbGVtZW50XG4gICAgICAgICAgdGFibGVFbGVtZW50LmZpbmQoJy5kYXRhVGFibGVzX2VtcHR5JykuaHRtbCgnJyk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0YWJsZUVsZW1lbnQuYWRkQ2xhc3MoJ3Byb2Nlc3NpbmcnKTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRhYmxlRWxlbWVudC5yZW1vdmVDbGFzcygncHJvY2Vzc2luZycpO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxldCBkcmF3SW5kZXggPSAxO1xuICAgICAgdGFibGVFbGVtZW50Lm9uKCdvcmRlci5kdCcsIChldmVudDogYW55KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgICAgIGNvbnN0IG9yZGVyID0gdGhpcy5kYXRhVGFibGUub3JkZXIoKTtcbiAgICAgICAgICBjb25zdCBjb2x1bW5zID0gdGFibGVDb2x1bW5zO1xuICAgICAgICAgIGlmIChvcmRlciAmJiBvcmRlci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMub3JkZXIuZW1pdChvcmRlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KS5vbignZHJhdy5kdCcsIChldmVudCkgPT4ge1xuICAgICAgICB0aGlzLmRyYXcuZW1pdCgpO1xuICAgICAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgICAgICBjb25zdCBpbmZvOiB7IHBhZ2U6IG51bWJlcjsgcGFnZXM6IG51bWJlciB9ID0gdGhpcy5kYXRhVGFibGUucGFnZS5pbmZvKCk7XG4gICAgICAgICAgdGhpcy5wYWdlLmVtaXQoaW5mbyk7XG4gICAgICAgICAgaWYgKGRyYXdJbmRleCA+IDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRyYXdJbmRleCsrO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7dGhpcy5kYXRhVGFibGUuY29sdW1ucy5hZGp1c3QoKTsgfSwgMSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFUlJPUicsICdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBhZGp1c3RpbmcgdGFibGUgY29sdW1ucycpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIGFsbG93IHNlbGVjdGlvblxuICAgICAgaWYgKHRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgICAvLyBnZXQgZmlyc3QgY29sdW1uIChhcyByb3cgcHJpbWFyeSBrZXkpXG4gICAgICAgIC8vIHRvZG86OmFsbG93IHJvdyBwcmltYXJ5IGtleSBjb25maWd1cmF0aW9uXG4gICAgICAgIGNvbnN0IGZpcnN0Q29sdW1uID0gdGhpcy5jb25maWcuY29sdW1uc1swXTtcbiAgICAgICAgLy8gYWRkIHNlbGVjdCBjb2x1bW5cbiAgICAgICAgY29uc3Qgc2VsZWN0Q29sdW1uRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICBjbGFzc05hbWU6ICd0ZXh0LWNlbnRlciBwbC00IHByLTAnLFxuICAgICAgICAgIGRhdGE6IGZpcnN0Q29sdW1uLnByb3BlcnR5IHx8IGZpcnN0Q29sdW1uLm5hbWUsXG4gICAgICAgICAgZGVmYXVsdENvbnRlbnQ6ICcnLFxuICAgICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgdmlzaWJsZTogIXRoaXMuY3VzdG9tU2VsZWN0LFxuICAgICAgICAgIG5hbWU6IGZpcnN0Q29sdW1uLm5hbWUsXG4gICAgICAgIH07XG4gICAgICAgIC8vIGFzc2lnbiByZW5kZXJlclxuICAgICAgICBPYmplY3QuYXNzaWduKHNlbGVjdENvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICByZW5kZXI6IHRoaXMuX3JlbmRlclNlbGVjdC5iaW5kKHRoaXMpLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gYW5kIGZpbmFsbHkgYWRkIGNvbHVtblxuICAgICAgICB0YWJsZUNvbHVtbnMudW5zaGlmdChzZWxlY3RDb2x1bW5EZWZpbml0aW9uKTtcbiAgICAgICAgLy8gdXNlciBpbnRlcmZhY2UgYWRkaXRpb25zXG4gICAgICAgIC8vIGhhbmRsZSBwYWdlIGNoYW5nZSBldmVudCAoYSB0cmljayBmb3IgZmlyaW5nIGRyYXcuZHQgZXZlbnRzKVxuICAgICAgICB0YWJsZUVsZW1lbnRcbiAgICAgICAgICAvLyBoYW5kbGUgZHJhdyBldmVudHNcbiAgICAgICAgICAub24oJ2RyYXcuZHQnLCAoKSA9PiB7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmN1c3RvbVNlbGVjdCkge1xuICAgICAgICAgICAgICAvLyBlbmFibGUgcm93IHNlbGVjdGlvbiBldmVudFxuICAgICAgICAgICAgICB0YWJsZUVsZW1lbnQuZmluZCgndGJvZHknKS5vbignY2xpY2snLCAndHInLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAvLyBzZWxlY3Qgcm93XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gc2VsZi5kYXRhVGFibGUucm93KHRoaXMpO1xuICAgICAgICAgICAgICAgIC8vIGFkZCByb3dcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdC5lbWl0KHJvdyk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSB0YWJsZUVsZW1lbnQuZmluZCgnaW5wdXQucy1yb3cnKTtcbiAgICAgICAgICAgIGVsZW1lbnRzLm9mZignY2xpY2snKS5vbignY2xpY2snLCB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgLy8gbWFrZSBzZWxlY3Rpb24gb24gY3VycmVudCBwYWdlXG4gICAgICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLnByb3BlcnR5IHx8ICcnO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAvLyBlbnVtZXJhdGUgc2VsZWN0ZWQgaXRlbXNcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZmluZCByb3cgaWRlbnRpZmllclxuICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gaXRlbVtrZXldO1xuICAgICAgICAgICAgICAgIC8vIGlmIGlkZW50aWZpZXIgaXMgZGVmaW5lZFxuICAgICAgICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAvLyB0cnkgdG8gZmluZCBjaGVjayBlbGVtZW50IHdpdGggdGhpcyBpZGVudGlmaWVyIGluIGF0dHJpYnV0ZSBkYXRhLWlkXG4gICAgICAgICAgICAgICAgICB0YWJsZUVsZW1lbnQuZmluZChgaW5wdXRbZGF0YS1pZD0nJHtpZH0nXWApLnByb3AoJ2NoZWNrZWQnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc21hcnRTZWxlY3QpIHtcbiAgICAgICAgICAgICAgLy8gc2VsZWN0IHJvd3MgdGhhdCBhcmUgbm90IHNlbGVjdGVkXG4gICAgICAgICAgICAgIC8vIGFuZCBkbyBub3QgaW5jbHVkZWQgaW4gdW5zZWxlY3RlZCBjb2xsZWN0aW9uXG4gICAgICAgICAgICAgIHRhYmxlRWxlbWVudC5maW5kKCdpbnB1dFtkYXRhLWlkXScpLmVhY2goKGluZGV4LCBlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZ2V0IGRhdGEgaWRcbiAgICAgICAgICAgICAgICBpZiAodGhpcy51bnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcbiAgICAgICAgICAgICAgICAgIHJldHVybiB4W2tleV0gPT0galF1ZXJ5KGVsZW1lbnQpLmF0dHIoJ2RhdGEtaWQnKTtcbiAgICAgICAgICAgICAgICB9KSA8IDApIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Um93KHRoaXMuZGF0YVRhYmxlLnJvdyhpbmRleCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIHRhYmxlRWxlbWVudC5maW5kKCdpbnB1dFtkYXRhLWlkXScpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAvLyBpbml0aWFsaXplIGRhdGEgdGFibGVcbiAgICAgIGNvbnN0IHNldHRpbmdzID0ge1xuICAgICAgICAvLyBzZXQgbGVuZ3RoIG1lbnVcbiAgICAgICAgbGVuZ3RoTWVudTogWzUsIDEwLCA1MCwgMTAwLCAyMDAsIDUwMF0sXG4gICAgICAgIC8vIGhpZGUgbGVuZ3RoIG1lbnVcbiAgICAgICAgbGVuZ3RoQ2hhbmdlOiBmYWxzZSxcbiAgICAgICAgLy8gZW5hYmxlIHNlYXJjaCBidXQgaGlkZSBzZWFyY2ggYm94IChjc3MpXG4gICAgICAgIHNlYXJjaGluZzogdHJ1ZSxcbiAgICAgICAgLy8gZW5hYmxlIGRhdGEgcHJvY2Vzc2luZ1xuICAgICAgICBwcm9jZXNzaW5nOiB0cnVlLFxuICAgICAgICAvLyBlbmFibGUgZ2V0dGluZyBzZXJ2ZXIgc2lkZSBkYXRhXG4gICAgICAgIHNlcnZlclNpZGU6IHRoaXMuc2VydmVyU2lkZSxcbiAgICAgICAgLy8gZW51bWVyYXRlIHRhYmxlIGNvbHVtbnNcbiAgICAgICAgY29sdW1uczogdGFibGVDb2x1bW5zLFxuICAgICAgICBjb2xSZW9yZGVyOiAgdGhpcy5jb2x1bW5PcmRlcmluZyxcbiAgICAgICAgb3JkZXI6IFtdLFxuICAgICAgICAvLyBzZXQgc2Nyb2xsIHhcbiAgICAgICAgc2Nyb2xsWDogdGhpcy5zY3JvbGxYLFxuICAgICAgICBkb206ICdCZnJ0aXAnLFxuICAgICAgICBhdXRvV2lkdGg6IGZhbHNlLFxuICAgICAgICBidXR0b25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZXh0ZW5kOiAnZXhjZWwnLFxuICAgICAgICAgICAgZmlsZW5hbWU6IHRoaXMuY29uZmlnLnRpdGxlLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiAnZC1ub25lJyxcbiAgICAgICAgICAgIGV4cG9ydE9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgY29sdW1uczogJ3RoOm5vdCg6Zmlyc3QtY2hpbGQpJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gZGVmaW5lIHNlcnZlciBkYXRhIGNhbGxiYWNrXG4gICAgICAgIGZuU2VydmVyRGF0YShzU291cmNlOiBhbnksIGFvRGF0YTogYW55LCBmbkNhbGxiYWNrOiBhbnksIG9TZXR0aW5nczogYW55KSB7XG4gICAgICAgICAgLy8gaWYgbWV0aG9kIGlzIGludm9rZWQgZm9yIHRoZSBmaXJzdCB0aW1lXG4gICAgICAgICAgaWYgKHNlbGYuX2ZpcnN0TG9hZCkge1xuICAgICAgICAgICAgLy8gZGlzYWJsZWQgZmlyc3QgbG9hZCBmbGFnXG4gICAgICAgICAgICBzZWxmLl9maXJzdExvYWQgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIGlmIGF1dG8gbG9hZCBpcyBkaXNhYmxlZFxuICAgICAgICAgICAgaWYgKHNlbGYuYXV0b0xvYWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVtcHR5RGF0YVNldCA9IHtcbiAgICAgICAgICAgICAgICByZWNvcmRzVG90YWw6IDAsXG4gICAgICAgICAgICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiAwLFxuICAgICAgICAgICAgICAgIGRhdGE6IFtdLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBzZWxmLl9sYXN0UXVlcnlUb3RhbEl0ZW1zID0gMDtcbiAgICAgICAgICAgICAgLy8gZW1pdCBlbXB0eSBkYXRhXG4gICAgICAgICAgICAgIHNlbGYubG9hZC5lbWl0KGVtcHR5RGF0YVNldCk7XG4gICAgICAgICAgICAgIC8vIHJldHVybiBlbXB0eSBkYXRhXG4gICAgICAgICAgICAgIHJldHVybiBmbkNhbGxiYWNrKGVtcHR5RGF0YVNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHJlc2V0IGVycm9yXG4gICAgICAgICAgc2VsZi50b2dnbGVFcnJvcigpO1xuICAgICAgICAgIC8vIGdldCBhY3RpdmF0ZWQgcm91dGUgcGFyYW1zXG4gICAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBzZWxmLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcztcbiAgICAgICAgICAvLyBnZXQgY29sdW1uc1xuICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSBhb0RhdGFbMV0udmFsdWU7XG4gICAgICAgICAgLy8gZ2V0IG9yZGVyIGV4cHJlc3Npb25cbiAgICAgICAgICBjb25zdCBvcmRlciA9IGFvRGF0YVsyXS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgc2tpcCByZWNvcmRzIHBhcmFtXG4gICAgICAgICAgY29uc3Qgc2tpcCA9IGFvRGF0YVszXS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgcGFnZSBzaXplIHBhcmFtXG4gICAgICAgICAgY29uc3QgdG9wID0gYW9EYXRhWzRdLnZhbHVlO1xuICAgICAgICAgIC8vIGdldCBzZWFyY2ggdmFsdWVcbiAgICAgICAgICBjb25zdCBzZWFyY2ggPSBhb0RhdGFbNV0udmFsdWU7XG4gICAgICAgICAgLy8gZ2V0IGRhdGEgcXVlcnlhYmxlXG4gICAgICAgICAgY29uc3QgcSA9IHNlbGYuX3F1ZXJ5IGluc3RhbmNlb2YgQ2xpZW50RGF0YVF1ZXJ5YWJsZSA/IHNlbGYuX3F1ZXJ5IDogc2VsZi5fY29udGV4dC5tb2RlbChzZWxmLmNvbmZpZy5tb2RlbCkuYXNRdWVyeWFibGUoKTtcbiAgICAgICAgICAvLyBhcHBseSBwYWdpbmcgcGFyYW1zXG4gICAgICAgICAgaWYgKHRvcCkge1xuICAgICAgICAgICAgcS50YWtlKHRvcCkuc2tpcChza2lwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gYXBwbHkgb3JkZXIgcGFyYW1zXG4gICAgICAgICAgaWYgKG9yZGVyICYmIG9yZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gZ2V0IG9yZGVyIHF1ZXJ5IGV4cHJlc3Npb25cbiAgICAgICAgICAgIGNvbnN0IG9yZGVyQnlTdHIgPSBvcmRlci5tYXAoKGV4cHI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBsZXQgY29sdW1uSW5kZXg6IG51bWJlcjtcbiAgICAgICAgICAgICAgaWYgKHNlbGYuY29sdW1uT3JkZXJpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uSW5kZXggPSBleHByLmNvbHVtbjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIGN1cnJlbnQgY29sdW1uIG9yZGVyIChmcm9tIGNvbFJlb3JkZXIpXG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uT3JkZXI6IG51bWJlcltdID0gc2VsZi5kYXRhVGFibGUuY29sUmVvcmRlci5vcmRlcigpO1xuICAgICAgICAgICAgICAgIC8vIGFuZCBtYXRjaCB0aGUgZGF0YVRhYmxlIGluZGV4IHRvIHRoZSBjb25maWcgY29sdW1ucyBpbmRleFxuICAgICAgICAgICAgICAgIC8vIGV4cHIuY29sdW1uIHNob3VsZCBhbHdheXMgYmUgdmFsaWQgKGUuZy4gaW4gcmFuZ2UpLCBidXQgcGVyZm9ybSBhIG1pbm9yIHZhbGlkYXRpb25cbiAgICAgICAgICAgICAgICBpZiAoZXhwci5jb2x1bW4gPj0gMCAmJiBleHByLmNvbHVtbiA8IGNvbHVtbk9yZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXggPSBjb2x1bW5PcmRlcltleHByLmNvbHVtbl07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIC8vIHVzZSB0aGUgZmlyc3QgY29sdW1uIGFzIGEgZmFsbGJhY2sgKHdvbid0IGhhcHBlbiwganVzdCBmb3Igc2FmZXR5KVxuICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdGFibGVDb2x1bW5zW2NvbHVtbkluZGV4XS5uYW1lICsgJyAnICsgZXhwci5kaXIgfHwgJ2FzYyc7XG4gICAgICAgICAgICB9KS5qb2luKCcsJyk7XG4gICAgICAgICAgICAvLyBzZXQgb3JkZXJcbiAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRvcmRlcmJ5Jywgb3JkZXJCeVN0cik7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGVuc3VyZSBzZWxmLnN0YXRlTG9hZENhbGxiYWNrXG4gICAgICAgICAgaWYgKHNlbGYuc3RhdGVMb2FkQ2FsbGJhY2sgPT0gbnVsbCkge1xuICAgICAgICAgICAgc2VsZi5zdGF0ZUxvYWRDYWxsYmFjayA9ICgoXywgY2FsbGJhY2spICA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZWxmLnN0YXRlTG9hZENhbGxiYWNrKG51bGwsIChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgLy8gY29uZmlndXJlICRzZWxlY3QgcGFyYW1ldGVyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3QgPSBzZWxmLmNvbmZpZy5jb2x1bW5zLmZpbHRlciggKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICBpZiAoY29sdW1uLnZpcnR1YWwgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGNvbHVtbi5vcHRpb25hbCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS5jb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRhYmxlQ29sdW1ucy5maW5kSW5kZXgoKHRhYmxlQ29sdW1uKSA9PiB0YWJsZUNvbHVtbi5uYW1lID09PSBjb2x1bW4ubmFtZSk7XG4gICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUuY29sdW1uc1tpbmRleF0udmlzaWJsZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSkubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgaWYgKGNvbHVtbi5wcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW4ubmFtZSArICcgYXMgJyArIGNvbHVtbi5wcm9wZXJ0eTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uLm5hbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcS5zZWxlY3QuYXBwbHkocSwgc2VsZWN0KTtcbiAgICAgICAgICAgIC8vIGNvbmZpZ3VyZSAkZmlsdGVyXG4gICAgICAgICAgICBpZiAocXVlcnlQYXJhbXMuJGZpbHRlciAmJiBxdWVyeVBhcmFtcy4kZmlsdGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAvLyBzZXQgcm91dGUgZmlsdGVyXG4gICAgICAgICAgICAgIGNvbnN0IHFQYXJhbXMgPSBxLmdldFBhcmFtcygpO1xuICAgICAgICAgICAgICBxLnNldFBhcmFtKCckZmlsdGVyJywgbnVsbCk7XG4gICAgICAgICAgICAgIGNvbnN0IGV4cHJlc3Npb25zID0gWyBxdWVyeVBhcmFtcy4kZmlsdGVyIF07XG4gICAgICAgICAgICAgIGlmIChxUGFyYW1zLiRmaWx0ZXIpIHsgZXhwcmVzc2lvbnMucHVzaCgnKCcgKyBxUGFyYW1zLiRmaWx0ZXIgKyAnKScgKTsgfVxuICAgICAgICAgICAgICBxLmZpbHRlcihleHByZXNzaW9ucy5qb2luKCcgYW5kICcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHF1ZXJ5IHBhcmFtZXRlcnMgY29udGFpbiBmaWx0ZXJcbiAgICAgICAgICAgIGlmIChxdWVyeVBhcmFtcy4kZXhwYW5kICYmIHF1ZXJ5UGFyYW1zLiRleHBhbmQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIC8vIHNldCByb3V0ZSAkZXhwYW5kXG4gICAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRleHBhbmQnLCBxdWVyeVBhcmFtcy4kZXhwYW5kKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZi5jb25maWcgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMuZXhwYW5kKSB7XG4gICAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRleHBhbmQnLCBzZWxmLmNvbmZpZy5kZWZhdWx0cy5leHBhbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFxLmdldFBhcmFtcygpWyckb3JkZXJieSddICYmIHNlbGYuY29uZmlnICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzLm9yZGVyQnkpIHtcbiAgICAgICAgICAgICAgcS5zZXRQYXJhbSgnJG9yZGVyYnknLCBzZWxmLmNvbmZpZy5kZWZhdWx0cy5vcmRlckJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cy5ncm91cEJ5KSB7XG4gICAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRncm91cGJ5Jywgc2VsZi5jb25maWcuZGVmYXVsdHMuZ3JvdXBCeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhcHBlbmQgZGVmYXVsdCBmaWx0ZXJcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cy5maWx0ZXIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2FkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlci5hc3luY0J1aWxkRmlsdGVyKHNlbGYuY29uZmlnLmRlZmF1bHRzLmZpbHRlcikudGhlbigoZGVmYXVsdEZpbHRlclN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0RmlsdGVyU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBxUGFyYW1zID0gcS5nZXRQYXJhbXMoKTtcbiAgICAgICAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRmaWx0ZXInLCBudWxsKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cHJlc3Npb25zID0gWyBkZWZhdWx0RmlsdGVyU3RyaW5nIF07XG4gICAgICAgICAgICAgICAgICBpZiAocVBhcmFtcy4kZmlsdGVyKSB7IGV4cHJlc3Npb25zLnB1c2goJygnICsgcVBhcmFtcy4kZmlsdGVyICsgJyknICk7IH1cbiAgICAgICAgICAgICAgICAgIHEuZmlsdGVyKGV4cHJlc3Npb25zLmpvaW4oJyBhbmQgJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZWxmLmxhc3RRdWVyeVBhcmFtcyA9IHEuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEuZ2V0TGlzdCgpLnRoZW4oKGl0ZW1zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFTZXQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVjb3Jkc1RvdGFsOiBpdGVtcy50b3RhbCxcbiAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzRmlsdGVyZWQ6IGl0ZW1zLnRvdGFsLFxuICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW1zLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl9sYXN0UXVlcnlUb3RhbEl0ZW1zID0gaXRlbXMudG90YWw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtcy50b3RhbCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVzZXRFbXB0eVRhYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gZW1pdCBsb2FkIGV2ZW50XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZC5lbWl0KGRhdGFTZXQpO1xuICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gZGF0YVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm5DYWxsYmFjayhkYXRhU2V0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGxvZyBlcnJvciB0byBjb25zb2xlXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVEFCTEVTJywgZXJyKTtcbiAgICAgICAgICAgICAgICAvLyBzaG93IGVycm9yXG4gICAgICAgICAgICAgICAgc2VsZi50b2dnbGVFcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIHNlbGYuX2xhc3RRdWVyeVRvdGFsSXRlbXMgPSAwO1xuICAgICAgICAgICAgICAgIC8vIGJ5IHJldHVybmluZyBlbXB0eSBkYXRhc2V0XG4gICAgICAgICAgICAgICAgc2VsZi5sb2FkLmVtaXQoRU1QVFlfREFUQVNFVCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuQ2FsbGJhY2soRU1QVFlfREFUQVNFVCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5sYXN0UXVlcnlQYXJhbXMgPSBxLmdldFBhcmFtcygpO1xuICAgICAgICAgICAgcS5nZXRMaXN0KCkudGhlbigoaXRlbXMpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZGF0YVNldCA9IHtcbiAgICAgICAgICAgICAgICByZWNvcmRzVG90YWw6IGl0ZW1zLnRvdGFsLFxuICAgICAgICAgICAgICAgIHJlY29yZHNGaWx0ZXJlZDogaXRlbXMudG90YWwsXG4gICAgICAgICAgICAgICAgZGF0YTogaXRlbXMudmFsdWUsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHNlbGYuX2xhc3RRdWVyeVRvdGFsSXRlbXMgPSBpdGVtcy50b3RhbDtcbiAgICAgICAgICAgICAgaWYgKGl0ZW1zLnRvdGFsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5yZXNldEVtcHR5VGFibGUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBlbWl0IGxvYWQgZXZlbnRcbiAgICAgICAgICAgICAgc2VsZi5sb2FkLmVtaXQoZGF0YVNldCk7XG4gICAgICAgICAgICAgIC8vIHJldHVybiBkYXRhXG4gICAgICAgICAgICAgIHJldHVybiBmbkNhbGxiYWNrKGRhdGFTZXQpO1xuICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAvLyBsb2cgZXJyb3IgdG8gY29uc29sZVxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUQUJMRVMnLCBlcnIpO1xuICAgICAgICAgICAgICAvLyBzaG93IGVycm9yXG4gICAgICAgICAgICAgIHNlbGYudG9nZ2xlRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgLy8gYnkgcmV0dXJuaW5nIGVtcHR5IGRhdGFzZXRcbiAgICAgICAgICAgICAgc2VsZi5sb2FkLmVtaXQoRU1QVFlfREFUQVNFVCk7XG4gICAgICAgICAgICAgIHJldHVybiBmbkNhbGxiYWNrKEVNUFRZX0RBVEFTRVQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGxhbmd1YWdlOiBPYmplY3QuYXNzaWduKHsgfSwgc2VsZi50cmFuc2xhdG9yLnRyYW5zZm9ybSgnVGFibGVzLkRhdGFUYWJsZScpLFxuICAgICAgICAgIHtlbXB0eVRhYmxlOiAnICcgfSksXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzdGF0ZVNldHRpbmdzID0ge1xuICAgICAgICBzdGF0ZVNhdmU6IHRoaXMuc3RhdGVTYXZlXG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMuc3RhdGVMb2FkQ2FsbGJhY2spIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzdGF0ZVNldHRpbmdzLCB7XG4gICAgICAgICAgc3RhdGVMb2FkQ2FsbGJhY2s6IHRoaXMuc3RhdGVMb2FkQ2FsbGJhY2tcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zdGF0ZVNhdmVDYWxsYmFjaykge1xuICAgICAgICBPYmplY3QuYXNzaWduKHN0YXRlU2V0dGluZ3MsIHtcbiAgICAgICAgICBzdGF0ZVNhdmVDYWxsYmFjazogdGhpcy5zdGF0ZVNhdmVDYWxsYmFja1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3MsIHN0YXRlU2V0dGluZ3MpO1xuXG4gICAgICBpZiAodGhpcy5zY3JvbGxhYmxlKSB7XG4gICAgICAgIC8vIHNldCBjb250aW51b3VzIHNjcm9sbGluZ1xuICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzLCB7XG4gICAgICAgICAgc2Nyb2xsWTogdGhpcy5zY3JvbGxZLFxuICAgICAgICAgIHNjcm9sbENvbGxhcHNlOiBmYWxzZSxcbiAgICAgICAgICBzY3JvbGxlcjoge1xuICAgICAgICAgICAgbG9hZGluZ0luZGljYXRvcjogZmFsc2UsXG4gICAgICAgICAgICBkaXNwbGF5QnVmZmVyOiAxMCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3MsIHtcbiAgICAgICAgICBzY3JvbGxZOiB0aGlzLnNjcm9sbFksXG4gICAgICAgICAgcGFnaW5nOiB0aGlzLnBhZ2luZyxcbiAgICAgICAgICBwYWdlTGVuZ3RoOiB0aGlzLnBhZ2VMZW5ndGgsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VsZWN0YWJsZSkge1xuXG4gICAgICB9XG4gICAgICAvLyBoYW5kbGUgaW5pdC5kdCBldmVudCBhbmQgZW1pdCBsb2NhbCBldmVudFxuICAgICAgdGhpcy5kYXRhVGFibGUgPSB0YWJsZUVsZW1lbnQub24oJ2luaXQuZHQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBqUXVlcnkoZXZlbnQudGFyZ2V0KS5wYXJlbnQoKTtcbiAgICAgICAgLy8gaGFuZGxlIHNjcm9sbGluZ1xuICAgICAgICBzY3JvbGxlci5vbignc2Nyb2xsJywgKHNjcm9sbEV2ZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0galF1ZXJ5KHNjcm9sbEV2ZW50LnRhcmdldCk7XG4gICAgICAgICAgY29uc3QgdG9wID0gdGFyZ2V0LnNjcm9sbFRvcCgpIGFzIG51bWJlcjtcbiAgICAgICAgICBjb25zdCBsZWZ0ID0gdGFyZ2V0LnNjcm9sbExlZnQoKSBhcyBudW1iZXI7XG4gICAgICAgICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbC5lbWl0KHtcbiAgICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgICBsZWZ0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSkuRGF0YVRhYmxlKHNldHRpbmdzKTtcbiAgICAgIHRoaXMuaW5pdC5lbWl0KCk7XG4gICAgICAvLyBzaG93IG9yIGhpZGUgaGVhZGVyXG4gICAgICBpZiAoIXRoaXMuc2hvd0hlYWRlciAmJiB0aGlzLl9lbGVtZW50ICYmIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICBjb25zdCBoaWRlU2VsZWN0b3IgPSAodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlPnRoZWFkJyk7XG4gICAgICAgIGlmIChoaWRlU2VsZWN0b3IpIHtcbiAgICAgICAgICBoaWRlU2VsZWN0b3IuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWRqdXN0U2VsZWN0b3IgPSAgKHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudClcbiAgICAgICAgICAucXVlcnlTZWxlY3RvcignLmRhdGFUYWJsZScpO1xuICAgICAgICBpZiAoYWRqdXN0U2VsZWN0b3IpIHtcbiAgICAgICAgICBhZGp1c3RTZWxlY3Rvci5jbGFzc0xpc3QuYWRkKCdtdC0yJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIHNob3cgb3IgaGlkZSBmb290ZXJcbiAgICAgIGlmICghdGhpcy5zaG93Rm9vdGVyICYmIHRoaXMuX2VsZW1lbnQgJiYgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGluZm9TZWxlY3RvciA9ICh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpXG4gICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGVzX2luZm8nKTtcbiAgICAgICAgaWYgKGluZm9TZWxlY3Rvcikge1xuICAgICAgICAgIGluZm9TZWxlY3Rvci5jbGFzc0xpc3QuYWRkKCdkLW5vbmUnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gc2hvdyBvciBoaWRlIHBhZ2VyXG4gICAgICBpZiAodGhpcy5zaG93UGFnaW5nKSB7XG4gICAgICAgIHRoaXMuc2hvd1BhZ2luZyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2Nyb2xsVG9wKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgIHRoaXMuZGF0YVRhYmxlLnBhcmVudCgpLnNjcm9sbFRvcCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgc2Nyb2xsTGVmdCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5wYXJlbnQoKS5zY3JvbGxMZWZ0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgbGFzdFF1ZXJ5KCk6IENsaWVudERhdGFRdWVyeWFibGUgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLmNvbmZpZyA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmxhc3RRdWVyeVBhcmFtcyA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHEgPSB0aGlzLl9jb250ZXh0Lm1vZGVsKHRoaXMuY29uZmlnLm1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgIE9iamVjdC5rZXlzKHRoaXMubGFzdFF1ZXJ5UGFyYW1zKS5mb3JFYWNoKCAoa2V5KSA9PiB7XG4gICAgICBxLnNldFBhcmFtKGtleSwgdGhpcy5sYXN0UXVlcnlQYXJhbXMgJiYgdGhpcy5sYXN0UXVlcnlQYXJhbXNba2V5XSk7XG4gICAgfSk7XG4gICAgLy8gcmV0dXJuIHF1ZXJ5XG4gICAgcmV0dXJuIHE7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBhbmQgdXBkYXRlcyBhIHNpbmdsZSByb3dcbiAgICogQHBhcmFtIGZpbmQgLSBBbnkgb2JqZWN0IHdoaWNoIGlzIGJlaW5nIGNvbnZlcnRlZCB0byBhIHF1ZXJ5XG4gICAqL1xuICBwdWJsaWMgZmV0Y2hPbmUoZmluZDogYW55KSB7XG4gICAgaWYgKGZpbmQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhVGFibGUgPT0gbnVsbCkge1xuICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmxhc3RRdWVyeVBhcmFtcyA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGdldCByb3dzXG4gICAgY29uc3Qgcm93cyA9IEFycmF5LmZyb20odGhpcy5kYXRhVGFibGUucm93cygpLmRhdGEoKSk7XG4gICAgaWYgKHJvd3MgJiYgcm93cy5sZW5ndGgpIHtcbiAgICAgIC8vIGZpbmQgcmVzdWx0XG4gICAgICBjb25zdCBmaW5kS2V5cyA9IE9iamVjdC5rZXlzKGZpbmQpO1xuICAgICAgaWYgKGZpbmRLZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIGZpbmQgcm93IGluZGV4IGJ5IHNlYXJjaGluZyBlYWNoIHByb3BlcnR5XG4gICAgICBjb25zdCByb3dJbmRleCA9IHJvd3MuZmluZEluZGV4KChyb3c6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gZmluZEtleXMubWFwKCAoa2V5KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJvd1trZXldID09PSBmaW5kW2tleV07XG4gICAgICAgIH0pLmZpbHRlciggKHJlcykgPT4ge1xuICAgICAgICAgIHJldHVybiByZXMgPT09IGZhbHNlO1xuICAgICAgICB9KS5sZW5ndGggPT09IDA7XG4gICAgICB9KTtcbiAgICAgIC8vIGlmIHJvdyBoYXMgYmVlbiBmb3VuZFxuICAgICAgaWYgKHJvd0luZGV4ID49IDApIHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLl9jb250ZXh0Lm1vZGVsKHRoaXMuY29uZmlnLm1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgICAgICAvLyBzZWxlY3QgYXR0cmlidXRlc1xuICAgICAgICBxdWVyeS5zZXRQYXJhbSgnJHNlbGVjdCcsIHRoaXMubGFzdFF1ZXJ5UGFyYW1zLiRzZWxlY3QpO1xuICAgICAgICBpZiAodGhpcy5sYXN0UXVlcnlQYXJhbXMuJGV4cGFuZCkge1xuICAgICAgICAgIC8vIGFwcGx5IGV4cGFuZCBhdHRyaWJ1dGVzXG4gICAgICAgICAgcXVlcnkuc2V0UGFyYW0oJyRleHBhbmQnLCB0aGlzLmxhc3RRdWVyeVBhcmFtcy4kZXhwYW5kKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhcHBseSBmaWx0ZXIgZm9yIHJvd1xuICAgICAgICBmaW5kS2V5cy5mb3JFYWNoKCAoa2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb25maWcuY29sdW1ucy5maW5kKCAoY29sKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY29sLnByb3BlcnR5ID09PSBrZXkgfHwgY29sLm5hbWUgPT09IGtleTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoY29sdW1uKSB7XG4gICAgICAgICAgICAvLyBnZXQgcHJvcGVydHkgb3IgbmFtZVxuICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSBjb2x1bW4ucHJvcGVydHkgfHwgY29sdW1uLm5hbWU7XG4gICAgICAgICAgICBxdWVyeS5hbmQocHJvcGVydHkgYXMgc3RyaW5nKS5lcXVhbChmaW5kW2tleV0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBxdWVyeS5hbmQoa2V5KS5lcXVhbChmaW5kW2tleV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGFuZCBmaW5hbGx5IGdldCBpdGVtXG4gICAgICAgIHJldHVybiBxdWVyeS5nZXRJdGVtKCkudGhlbiggKGl0ZW0pID0+IHtcbiAgICAgICAgICAvLyBpZiBpdGVtIGV4aXN0c1xuICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZGF0YVRhYmxlLnJvdyhyb3dJbmRleCk7XG4gICAgICAgICAgY29uc3QgY2hlY2tlZCA9IGpRdWVyeShyb3cubm9kZSgpKS5maW5kKCc6Y2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJyk7XG4gICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIC8vIHJlZHJhdyByb3dcbiAgICAgICAgICAgIHJvdy5kYXRhKGl0ZW0pO1xuICAgICAgICAgICAgalF1ZXJ5KHJvdy5ub2RlKCkpLmZpbmQoJzpjaGVja2JveCcpLm9mZignY2xpY2snKS5vbignY2xpY2snLCB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgLy8gaWYgcm93IGlzIGFscmVhZHkgc2VsZWN0ZWRcbiAgICAgICAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0Um93KHJvdywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWxvYWRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucmVsb2FkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBzZWxlY3Rpb24gY2hhbmdlXG4gICAqIEBwYXJhbSAkZXZlbnRcbiAgICovXG4gIHB1YmxpYyBvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpIHtcbiAgICBjb25zdCBpbnB1dCA9ICAkZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgZXhlY1JlZ2V4ID0gLy0oXFxkKykkL2cuZXhlYyhpbnB1dC5pZCk7XG4gICAgLy8gZ2V0IHJvdyBmcm9tIGlkXG4gICAgY29uc3Qgcm93SW5kZXggPSBwYXJzZUludCgoZXhlY1JlZ2V4ICYmIGV4ZWNSZWdleFsxXSkgYXMgc3RyaW5nLCAxMCk7XG4gICAgLy8gZ2V0IHJvd1xuICAgIGNvbnN0IHJvdyA9IHRoaXMuZGF0YVRhYmxlLnJvdyhyb3dJbmRleCkuZGF0YSgpO1xuICAgIC8vIGdldCByb3cgaWRlbnRpZmllclxuICAgIGlmIChyb3cpIHtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHkgfHwgJyc7XG4gICAgICBjb25zdCBpZCA9IHJvd1trZXldO1xuICAgICAgbGV0IGZpbmRJdGVtSW5kZXggPSB0aGlzLnNlbGVjdGVkLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbVtrZXldID09PSBpZDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGlucHV0LmNoZWNrZWQpIHtcbiAgICAgICAgaWYgKGZpbmRJdGVtSW5kZXggPCAwKSB7XG4gICAgICAgICAgLy8gYWRkIHJvdyB0byBzZWxlY3RlZCByb3dzXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZC5wdXNoKHJvdyk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmVtaXQodGhpcy5zZWxlY3RlZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmaW5kSXRlbUluZGV4ID49IDApIHtcbiAgICAgICAgICAvLyByZW1vdmUgc2VsZWN0ZWQgaXRlbVxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKGZpbmRJdGVtSW5kZXgsIDEpO1xuICAgICAgICAgIGlmICh0aGlzLnNtYXJ0U2VsZWN0KSB7XG4gICAgICAgICAgICAvLyBhZGQgcm93IHRvIHVuc2VsZWN0ZWQgcm93c1xuICAgICAgICAgICAgZmluZEl0ZW1JbmRleCA9IHRoaXMudW5zZWxlY3RlZC5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1ba2V5XSA9PT0gaWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChmaW5kSXRlbUluZGV4IDwgMCkge1xuICAgICAgICAgICAgICB0aGlzLnVuc2VsZWN0ZWQucHVzaChyb3cpO1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc2V0RW1wdHlUYWJsZSgpIHtcbiAgICAvLyB0aGlzIG9wZXJhdGlvbiBpcyBpbXBvcnRhbnRcbiAgICAvLyBkdWUgdG8gbmcgZGF0YSBiaW5kaW5nXG4gICAgLy8gZW1wdHkgdGFibGUgdGVtcGxhdGUgaGFzIG5vIHRyYW5zbGF0ZWQgdGV4dCBkdXJpbmcgbmdPbkluaXQoKVxuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdKSB7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zRW1wdHlUYWJsZSA9XG4gICAgICB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zWmVyb1JlY29yZHMgPSB0aGlzLmVtcHR5VGFibGUgJiYgdGhpcy5lbXB0eVRhYmxlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdG9nZ2xlRXJyb3IoZXJyPzogYW55KSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlICYmIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0pIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSAodGhpcy5lcnJvclRlbXBsYXRlICYmIHRoaXMuZXJyb3JUZW1wbGF0ZS5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KTtcbiAgICAgIGxldCBpbm5lck1lc3NhZ2U6IGFueTtcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIGlubmVyTWVzc2FnZSA9IGVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NtYWxsJykuaXRlbSgwKTtcbiAgICAgIH1cbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgdGhpcy5sYXN0RXJyb3IgPSBlcnI7XG4gICAgICAgIGlmIChpbm5lck1lc3NhZ2UpIHtcbiAgICAgICAgICBpbm5lck1lc3NhZ2UuaW5uZXJIVE1MID0gZXJyLmVycm9yICYmIGVyci5lcnJvci5tZXNzYWdlID8gZXJyLmVycm9yLm1lc3NhZ2UgOiBlcnIubWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zRW1wdHlUYWJsZSA9XG4gICAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNaZXJvUmVjb3JkcyA9IHRoaXMuZXJyb3JUZW1wbGF0ZSAmJiB0aGlzLmVycm9yVGVtcGxhdGUubmF0aXZlRWxlbWVudC5pbm5lckhUTUw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaW5uZXJNZXNzYWdlKSB7XG4gICAgICAgICAgaW5uZXJNZXNzYWdlLmlubmVySFRNTCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNFbXB0eVRhYmxlID0gdGhpcy5kYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc1plcm9SZWNvcmRzID0gJyc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckVtcHR5VGFibGUoKSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlICYmIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0pIHtcbiAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNFbXB0eVRhYmxlID0gdGhpcy5kYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc1plcm9SZWNvcmRzID0gJyc7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGV4cG9ydCgpIHtcbiAgICBjb25zdCBlbGVtZW50OiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kdC1idXR0b25zIC5idXR0b25zLWV4Y2VsJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgZWxlbWVudC5jbGljaygpO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUNvbHVtbnMoY29sdW1uc1RvU2hvdykge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5kYXRhVGFibGU7XG4gICAgdGhpcy5jb25maWcuY29sdW1ucy5zbGljZSgxKS5mb3JFYWNoKChjb2x1bW4sIGkpID0+IHtcbiAgICAgIGlmICghY29sdW1uLmhpZGRlbikge1xuICAgICAgICBpZiAoY29sdW1uc1RvU2hvdy5pbmNsdWRlcyhjb2x1bW4ubmFtZSkpIHtcbiAgICAgICAgICAvLyBub2luc3BlY3Rpb24gVHlwZVNjcmlwdFZhbGlkYXRlSlNUeXBlc1xuICAgICAgICAgIHRhYmxlLmNvbHVtbihjb2x1bW4ubmFtZSArICc6bmFtZScpLnZpc2libGUodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gbm9pbnNwZWN0aW9uIFR5cGVTY3JpcHRWYWxpZGF0ZUpTVHlwZXNcbiAgICAgICAgICB0YWJsZS5jb2x1bW4oY29sdW1uLm5hbWUgKyAnOm5hbWUnKS52aXNpYmxlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldENvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWc7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlcywgJ2NvbmZpZ1NyYycpKSB7XG4gICAgICBpZiAoY2hhbmdlcy5jb25maWdTcmMgIT0gbnVsbCkge1xuICAgICAgICAvLyBsb2FkIHRhYmxlIGNvbmZpZ3VyYXRpb24gb24gY2hhbmdlXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogdHJpcGxlLWVxdWFsc1xuICAgICAgICBpZiAoY2hhbmdlcy5jb25maWdTcmMuY3VycmVudFZhbHVlICYmIChjaGFuZ2VzLmNvbmZpZ1NyYy5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5jb25maWdTcmMucHJldmlvdXNWYWx1ZSkpIHtcbiAgICAgICAgICB0aGlzLl9odHRwLmdldChjaGFuZ2VzLmNvbmZpZ1NyYy5jdXJyZW50VmFsdWUpLnRvUHJvbWlzZSgpLnRoZW4oKGNvbmZpZzogVGFibGVDb25maWd1cmF0aW9uKSA9PiB7XG4gICAgICAgICAgICAvLyBzZXQgY29uZmlndXJhdGlvblxuICAgICAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIC8vIGZldGNoIGFuZCByZWRyYXdcbiAgICAgICAgICAgIHRoaXMuZmV0Y2goKTtcbiAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUQUJMRVMnLCAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgbG9hZGluZyB0YWJsZSBjb25maWd1cmF0aW9uLicpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlc2V0KGxvYWQ/OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB0aGlzLmF1dG9Mb2FkID0gISFsb2FkO1xuICAgIHRoaXMubmdPbkluaXQoKTtcbiAgfVxuXG4gIHNlbGVjdENvbHVtbnMoKSB7XG4gICAgLy8gZ2V0IGNvbHVtbiBvcmRlciBlLmcuIFswLCA0LCAxLCAyLCAzXVxuICAgIGNvbnN0IGNvbHVtbk9yZGVyOiBudW1iZXJbXSA9IHRoaXMuZGF0YVRhYmxlLmNvbFJlb3JkZXIub3JkZXIoKTtcbiAgICAvLyBnZXQgY29sdW1uIGRlZmluaXRpb25zXG4gICAgY29uc3QgY29sdW1uRGVmcyA9IHRoaXMuZGF0YVRhYmxlLnNldHRpbmdzKCkuaW5pdCgpLmNvbHVtbnM7XG4gICAgY29uc3QgY29sdW1ucyA9IGNvbHVtbkRlZnMubWFwKChcbiAgICAgIGNvbHVtbkRlZjogeyBrZXk6IHN0cmluZywgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCwgdmlzaWJsZTogYm9vbGVhbixcbiAgICAgICAgc29ydGFibGU6IGJvb2xlYW4sIGluZGV4OiBudW1iZXIgfSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBgY29sdW1uLSR7aX1gO1xuICAgICAgbGV0IHRpdGxlID0gY29sdW1uRGVmLnRpdGxlO1xuICAgICAgLy8gZ2V0IGNvbHVtbiBpbmRleFxuICAgICAgY29uc3QgaW5kZXggPSAgY29sdW1uT3JkZXIuaW5kZXhPZihpKTtcbiAgICAgIGNvbnN0IHZpc2libGUgPSB0aGlzLmRhdGFUYWJsZS5jb2x1bW4oaW5kZXgpLnZpc2libGUoKTtcbiAgICAgIC8vIHNldCB0aXRsZSBmb3Igc2VsZWN0IGNvbHVtblxuICAgICAgaWYgKGkgPT09IDAgJiYgdGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAgIHRpdGxlID0gJzwnICsgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdUYWJsZXMuU2VsZWN0Q29sdW1uJykgKyAnPic7XG4gICAgICB9XG4gICAgICAvLyBnZXQgY29sdW1uIHRpdGxlXG4gICAgICBpZiAodGl0bGUgIT0gbnVsbCAmJiB0aXRsZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGl0bGUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAodGl0bGUgPT0gbnVsbCkge1xuICAgICAgICAvLyB0cnkgdG8gZmluZCBjb2x1bW4gcGxhY2Vob2xkZXJcbiAgICAgICAgbGV0IHBsYWNlaG9sZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyID0gdGhpcy5jb25maWcuY29sdW1uc1tpIC0gMV0ucGxhY2Vob2xkZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBsYWNlaG9sZGVyID0gdGhpcy5jb25maWcuY29sdW1uc1tpXS5wbGFjZWhvbGRlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGxhY2Vob2xkZXIgIT0gbnVsbCkge1xuICAgICAgICAgIHRpdGxlID0gJzwnICsgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHBsYWNlaG9sZGVyKSArICc+JztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRpdGxlID09IG51bGwpIHtcbiAgICAgICAgdGl0bGUgPSAnPCcgKyB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5Vbmtub3duQ29sdW1uJykgKyAnPic7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXksXG4gICAgICAgIHRpdGxlLFxuICAgICAgICB2aXNpYmxlLFxuICAgICAgICBpbmRleFxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLl9jb2x1bW5TZWxlY3Rvci5zZWxlY3RDb2x1bW5zKGNvbHVtbnMpLnRoZW4oKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQucmVzdWx0ID09PSAnb2snKSB7XG4gICAgICAgIGNvbnN0IHNvcnRlZCA9IChldmVudC5jb2x1bW5zIGFzIGFueVtdKVxuICAgICAgICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAga2V5OiBjb2wua2V5LFxuICAgICAgICAgICAgICBpbmRleDogY29sLmluZGV4XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuaW5kZXggLSBiLmluZGV4KTtcbiAgICAgICAgLy8gZ2V0IGNvbHVtbiBvcmRlciBlLmcuIFszLCAxLCAyLCAwLCA0XVxuICAgICAgICBjb25zdCBpbmRleGVzID0gc29ydGVkXG4gICAgICAgIC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICByZXR1cm4gKGV2ZW50LmNvbHVtbnMgYXMgYW55W10pLmZpbmRJbmRleCgobmV4dCkgPT4gaXRlbS5rZXkgPT09IG5leHQua2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHJlc2V0IGNvbHVtbiB2aXNpYmlsdHlcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IChldmVudC5jb2x1bW5zIGFzIGFueVtdKS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gKGV2ZW50LmNvbHVtbnMgYXMgYW55W10pW2luZGV4XTtcbiAgICAgICAgICBjb25zdCBjb2xJbmRleCA9IGNvbHVtbk9yZGVyLmluZGV4T2YoaW5kZXgpO1xuICAgICAgICAgIC8vIHNldCB2aXNpYmlsdHkgd2l0aCByZWRyYXcgKD10cnVlKVxuICAgICAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbHVtbihjb2xJbmRleCkudmlzaWJsZShlbGVtZW50LnZpc2libGUsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGZpbmFsbHkgYXBwbHkgY29sdW1uIG9yZGVyXG4gICAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbFJlb3JkZXIub3JkZXIoaW5kZXhlcywgdHJ1ZSk7XG4gICAgICAgIC8vIHNpbXBseSByZWRyYXcgdGhlIHRhYmxlXG4gICAgICAgIHRoaXMuZGF0YVRhYmxlLmRyYXcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyB0byBwYXNzIGFuIGVycm9ySGFuZGxlciBjYWxsYmFjaywgaWYgZGVzaXJlZFxuICAgKiBAcmV0dXJucyB2b2lkXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZXhwb3J0VmlldyhvcHRpb25zPzoge2Vycm9ySGFuZGxlcj86IChyZWFzb24/OiBhbnkpID0+IGFueX0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5fbG9hZGluZy5zaG93TG9hZGluZygpO1xuICAgICAgLy8gdmFsaWRhdGUgcXVlcnkgaXRlbXMgYW5kIGNvbmZpZ1xuICAgICAgaWYgKCEodGhpcy5sYXN0UXVlcnkgJiYgdGhpcy5fbGFzdFF1ZXJ5VG90YWxJdGVtcyAmJiB0aGlzLmNvbmZpZykpIHtcbiAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBnZXQgZXhwb3J0IHNldHRpbmdzXG4gICAgICBjb25zdCBleHBvcnRTZXR0aW5ncyA9IHRoaXMuX2NvbmZpZ3VyYXRpb24uc2V0dGluZ3MgYXMgRXhwb3J0TGltaXRDb25maWd1cmF0aW9uO1xuICAgICAgLy8gYW5kIGV4cG9ydCBsaW1pdFxuICAgICAgY29uc3QgZXhwb3J0TGltaXQgPVxuICAgICAgICAoZXhwb3J0U2V0dGluZ3MgJiYgZXhwb3J0U2V0dGluZ3MudGFibGVzICYmIGV4cG9ydFNldHRpbmdzLnRhYmxlcy5leHBvcnRMaW1pdCAmJiBleHBvcnRTZXR0aW5ncy50YWJsZXMuZXhwb3J0TGltaXQgPiAwKVxuICAgICAgICA/IGV4cG9ydFNldHRpbmdzLnRhYmxlcy5leHBvcnRMaW1pdCA6IE1BWF9FWFBPUlRfSVRFTVM7XG4gICAgICAvLyBhbmQgdmFsaWRhdGUgaXRcbiAgICAgIGlmICh0aGlzLl9sYXN0UXVlcnlUb3RhbEl0ZW1zID4gZXhwb3J0TGltaXQpIHtcbiAgICAgICAgLy8gY2FsbCBlcnJvciBoYW5kbGVyXG4gICAgICAgIC8vIHByb3ZpZGUgYSByZWNvZ25pemlibGUgZXJyb3IgdHlwZVxuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmVycm9ySGFuZGxlcikge1xuICAgICAgICAgIG9wdGlvbnMuZXJyb3JIYW5kbGVyKG5ldyBFeHBvcnRMaW1pdEV4Y2VlZGVkRXJyb3IoJ0V4cG9ydCBsaW1pdCBleGNlZWRlZCcpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gb3Igc2hvdyB3YXJuaW5nIG1vZGFsIGFuZCBleGl0XG4gICAgICAgIHRoaXMuX21vZGFsU2VydmljZS5zaG93V2FybmluZ0RpYWxvZyh0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5FeHBvcnRMaXN0JyksXG4gICAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdUYWJsZXMuRXhwb3J0TGltaXRFeGNlZWRlZCcsXG4gICAgICAgICAgICB7ZGF0YUxlbmd0aDogdGhpcy5fbGFzdFF1ZXJ5VG90YWxJdGVtcywgZXhwb3J0TGltaXR9KSwgRElBTE9HX0JVVFRPTlMuT2spO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBnZXQgdG90YWwgZGlzcGxheWVkIGl0ZW1zXG4gICAgICBjb25zdCB0b3RhbERpc3BsYXllZEl0ZW1zID0gQXJyYXkuZnJvbSh0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLmFpRGlzcGxheSkubGVuZ3RoO1xuICAgICAgLy8gaWYgdGhleSBhbHJlYWR5IHNhdGlzZnkgdGhlIGxhc3QgcXVlcnkgdG90YWxcbiAgICAgIGlmICh0b3RhbERpc3BsYXllZEl0ZW1zID09PSB0aGlzLl9sYXN0UXVlcnlUb3RhbEl0ZW1zKSB7XG4gICAgICAgIC8vIHByZXBhcmUgZXhjZWwgZGF0YSBpbW1lZGlhdGVseVxuICAgICAgICBjb25zdCB7Ym9keSwgaGVhZGVyfSA9IHRoaXMuZ2V0RXhwb3J0YWJsZURhdGEoKTtcbiAgICAgICAgLy8gYW5kIGV4cG9ydCB0aGVtIHRvIGV4Y2VsXG4gICAgICAgIHRoaXMuX2V4cG9ydFNwcmVhZHNoZWV0LmV4cG9ydChib2R5LCBgJHt0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGhpcy5jb25maWcudGl0bGUgfHwgJ1RhYmxlcy5FeHBvcnRSZXN1bHRzJyl9Lnhsc3hgLCB7XG4gICAgICAgICAgICBoZWFkZXIsXG4gICAgICAgICAgICBza2lwSGVhZGVyOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIG1vcmUgZGF0YSBuZWVkIHRvIGJlIGZldGNoZWRcbiAgICAgICAgLy8gaG9sZCBwcmV2aW91cyBkYXRhIHN0YXRlXG4gICAgICAgIGNvbnN0IHByZXZpb3VzRGF0YVN0YXRlID0gdGhpcy5kYXRhVGFibGUucm93cygpLmRhdGEoKS50b0FycmF5KCk7XG4gICAgICAgIC8vIGdldCB0YXJnZXQgZGF0YSBzdGF0ZSBieSBleGVjdXRpbmcgdGhlIGxhc3QgcXVlcnlcbiAgICAgICAgLy8gbm90ZTogdGFraW5nIHRoZSBleHBvcnRMaW1pdCBhbW91bnQgb2YgaXRlbXMgd2lsbCBhbHdheXMgc2F0aXNmeSB0aGUgcmVzdWx0cyxcbiAgICAgICAgLy8gYmVjYXVzZSBpdCBoYXMgYmVlbiB2YWxpZGF0ZWRcbiAgICAgICAgY29uc3QgdGFyZ2V0RGF0YVN0YXRlID0gYXdhaXQgdGhpcy5sYXN0UXVlcnkudGFrZShleHBvcnRMaW1pdCkuZ2V0SXRlbXMoKTtcbiAgICAgICAgLy8gY2hhbmdlIHRhYmxlIGRhdGEgb24gdGhlIGZseSwgYnV0IGRvIG5vdCByZWRyYXdcbiAgICAgICAgdGhpcy5kYXRhVGFibGUuY2xlYXIoKS5yb3dzLmFkZCh0YXJnZXREYXRhU3RhdGUpO1xuICAgICAgICAvLyBwcmVwYXJlIGV4Y2VsIGRhdGFcbiAgICAgICAgY29uc3Qge2JvZHksIGhlYWRlcn0gPSB0aGlzLmdldEV4cG9ydGFibGVEYXRhKCk7XG4gICAgICAgIC8vIHJlc2V0IHRhYmxlIGRhdGFcbiAgICAgICAgdGhpcy5kYXRhVGFibGUuY2xlYXIoKS5yb3dzLmFkZChwcmV2aW91c0RhdGFTdGF0ZSk7XG4gICAgICAgIC8vIGFuZCBleHBvcnQgdGFyZ2V0IGRhdGEgdG8gZXhjZWxcbiAgICAgICAgdGhpcy5fZXhwb3J0U3ByZWFkc2hlZXQuZXhwb3J0KGJvZHksIGAke3RoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLmNvbmZpZy50aXRsZSB8fCAnVGFibGVzLkV4cG9ydFJlc3VsdHMnKX0ueGxzeGAsIHtcbiAgICAgICAgICAgIGhlYWRlcixcbiAgICAgICAgICAgIHNraXBIZWFkZXI6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gZXhpdFxuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gbG9nIGVycm9yXG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAvLyBjYWxsIGVycm9yIGhhbmRsZXIsIGlmIGRlZmluZWRcbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZXJyb3JIYW5kbGVyKSB7XG4gICAgICAgIG9wdGlvbnMuZXJyb3JIYW5kbGVyKGVycik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB1c2UgZGVmYXVsdCBlcnJvciBzZXJ2aWNlXG4gICAgICAgIHRoaXMuX2Vycm9yU2VydmljZS5zaG93RXJyb3IoZXJyLCB7XG4gICAgICAgICAgY29udGludWVMaW5rOiAnLidcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX2xvYWRpbmcuaGlkZUxvYWRpbmcoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0RXhwb3J0YWJsZURhdGEoKToge2JvZHk6IGFueVtdLCBoZWFkZXI6IGFueVtdfSB7XG4gICAgaWYgKCEodGhpcy5kYXRhVGFibGUgJiYgdGhpcy5kYXRhVGFibGUuYnV0dG9uc1xuICAgICAgJiYgdHlwZW9mIHRoaXMuZGF0YVRhYmxlLmJ1dHRvbnMuZXhwb3J0RGF0YSA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGlzLmNvbmZpZykpIHtcbiAgICAgIHJldHVybiB7Ym9keTogW10sIGhlYWRlcjogW119O1xuICAgIH1cbiAgICAvLyBmZXRjaCBleHBvcnRhYmxlIGV4Y2VsIGRhdGFcbiAgICBsZXQge2JvZHksIGhlYWRlcn0gPSB0aGlzLmRhdGFUYWJsZS5idXR0b25zLmV4cG9ydERhdGEoKTtcbiAgICBjb25zdCBjbGVhbnVwSW5kZXhlczogbnVtYmVyW10gPSBbXTtcbiAgICAvLyBjbGVhbiB1cCBoZWFkZXJzXG4gICAgaGVhZGVyID0gaGVhZGVyLmZpbHRlcigoaGVhZGVySXRlbTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAvLyBleGNsdWRlIGVtcHR5IGhlYWRlcnNcbiAgICAgIGlmIChoZWFkZXJJdGVtLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY2xlYW51cEluZGV4ZXMucHVzaChpbmRleCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIGV4Y2x1ZGUgaGlkZGVuIGNvbHVtbnNcbiAgICAgIC8vIG5vdGU6IHVzZSB0aGUgZGF0YXRhYmxlIHZpc2libGUoKSBmdW5jdGlvblxuICAgICAgLy8gaW5zdGVhZCBvZiB0aGUgaGlkZGVuIGNvbmZpZyBwcm9wZXJ0eSwgdG8gc2F0aXNmeSB0aGUgY29sdW1uIHNlbGVjdG9yXG4gICAgICBpZiAoIXRoaXMuZGF0YVRhYmxlLmNvbHVtbihpbmRleCkudmlzaWJsZSgpKSB7XG4gICAgICAgIGNsZWFudXBJbmRleGVzLnB1c2goaW5kZXgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgICAvLyBjbGVhbiB1cCBib2R5XG4gICAgYm9keSA9IGJvZHkubWFwKChyb3c6IGFueSBbXSkgPT4ge1xuICAgICAgcmV0dXJuIHJvdy5maWx0ZXIoKF8sIHJvd0luZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIGNsZWFudXBJbmRleGVzLmluZGV4T2Yocm93SW5kZXgpID09PSAtMTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiB7Ym9keSwgaGVhZGVyfTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCwgT25EZXN0cm95LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQW5ndWxhckRhdGFDb250ZXh0IH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50LCBBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdCwgQWR2YW5jZWRUYWJsZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRXJyb3JTZXJ2aWNlLCBESUFMT0dfQlVUVE9OUywgTW9kYWxTZXJ2aWNlLCBVc2VyQWN0aXZpdHlTZXJ2aWNlIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuaW1wb3J0IHsgUmVzcG9uc2VFcnJvciB9IGZyb20gJ0B0aGVtb3N0L2NsaWVudCc7XG5pbXBvcnQgeyBUYWJsZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5pbnRlcmZhY2VzJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZHZhbmNlZC1saXN0LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgcHVibGljIHJlY29yZHNUb3RhbD86IG51bWJlcjtcbiAgcHVibGljIGNvbmZpZz86IFRhYmxlQ29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZGF0YVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSByZWxvYWRTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIEBJbnB1dCgnZW50aXR5U2V0JykgZW50aXR5U2V0Pzogc3RyaW5nO1xuICBASW5wdXQoJ2NhdGVnb3J5JykgY2F0ZWdvcnk/OiBzdHJpbmc7XG4gIEBJbnB1dCgnZGVzY3JpcHRpb24nKSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgQElucHV0KCdsb25nRGVzY3JpcHRpb24nKSBsb25nRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIEBJbnB1dCgndGFibGVDb25maWd1cmF0aW9uJykgdGFibGVDb25maWd1cmF0aW9uOiBhbnk7XG4gIEBJbnB1dCgnc2VhcmNoQ29uZmlndXJhdGlvbicpIHNlYXJjaENvbmZpZ3VyYXRpb246IGFueTtcbiAgQFZpZXdDaGlsZCgndGFibGUnKSB0YWJsZT86IEFkdmFuY2VkVGFibGVDb21wb25lbnQ7XG4gIEBJbnB1dCgnYWxsb3dTYXZlT3B0aW9uJykgYWxsb3dTYXZlT3B0aW9uID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jb250ZXh0OiBBbmd1bGFyRGF0YUNvbnRleHQsXG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBfZXJyb3JTZXJ2aWNlOiBFcnJvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfdXNlckFjdGl2aXR5U2VydmljZTogVXNlckFjdGl2aXR5U2VydmljZVxuICAgICkgeyB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGFTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZGF0YVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5yZWxvYWRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucmVsb2FkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMudGFibGUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB0YWJsZSA9IHRoaXMudGFibGU7XG4gICAgICAvLyBnZXQgbWV0YWRhdGFcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gYXdhaXQgdGhpcy5fY29udGV4dC5nZXRNZXRhZGF0YSgpO1xuICAgICAgLy8gZ2V0IHJvdXRlIGRhdGFcbiAgICAgIHRoaXMuZGF0YVN1YnNjcmlwdGlvbiA9IHRoaXMuX2FjdGl2YXRlZFJvdXRlLmRhdGEuc3Vic2NyaWJlKCByb3V0ZURhdGEgPT4ge1xuICAgICAgICAvLyBnZXQgZW50aXR5VHlwZVxuICAgICAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAoYF4ke3JvdXRlRGF0YS5tb2RlbH0kYCwgJ2lnJyk7XG4gICAgICAgIGNvbnN0IGVudGl0eVNldCA9IG1ldGFkYXRhLkVudGl0eUNvbnRhaW5lci5FbnRpdHlTZXQuZmluZCggeCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlLnRlc3QoeC5OYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGlmIGVudGl0eSB0eXBlIGlzIG51bGxcbiAgICAgICAgaWYgKGVudGl0eVNldCA9PSBudWxsKSB7XG4gICAgICAgICAgLy8gbmF2aWdhdGUgdG8gZXJyb3JcbiAgICAgICAgICByZXR1cm4gdGhpcy5fZXJyb3JTZXJ2aWNlLm5hdmlnYXRlVG9FcnJvcihuZXcgUmVzcG9uc2VFcnJvcignRW50aXR5U2V0IE5vdCBGb3VuZCcsIDQwNCkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGdldCBlbnRpdHkgdHlwZVxuICAgICAgICBjb25zdCBlbnRpdHlUeXBlID0gbWV0YWRhdGEuRW50aXR5VHlwZS5maW5kKCB4ID0+IHtcbiAgICAgICAgICByZXR1cm4geC5OYW1lID09PSBlbnRpdHlTZXQuRW50aXR5VHlwZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChlbnRpdHlUeXBlID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fZXJyb3JTZXJ2aWNlLm5hdmlnYXRlVG9FcnJvcihuZXcgUmVzcG9uc2VFcnJvcignRW50aXR5VHlwZSBOb3QgRm91bmQnLCA0MDQpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm91dGVEYXRhLnNlYXJjaENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJvdXRlRGF0YS5zZWFyY2hDb25maWd1cmF0aW9uLCAnYWxsb3dTYXZlJykpIHtcbiAgICAgICAgICAgIHRoaXMuYWxsb3dTYXZlT3B0aW9uID0gcm91dGVEYXRhLnNlYXJjaENvbmZpZ3VyYXRpb24uYWxsb3dTYXZlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNlYXJjaENvbmZpZ3VyYXRpb24gPSByb3V0ZURhdGEuc2VhcmNoQ29uZmlndXJhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm91dGVEYXRhLnRhYmxlQ29uZmlndXJhdGlvbikge1xuICAgICAgICAgIHRoaXMudGFibGVDb25maWd1cmF0aW9uID0gcm91dGVEYXRhLnRhYmxlQ29uZmlndXJhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm91dGVEYXRhLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChyb3V0ZURhdGEuZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3V0ZURhdGEubG9uZ0Rlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgdGhpcy5sb25nRGVzY3JpcHRpb24gPSB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQocm91dGVEYXRhLmxvbmdEZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdXRlRGF0YS5jYXRlZ29yeSkge1xuICAgICAgICAgIHRoaXMuY2F0ZWdvcnkgPSB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQocm91dGVEYXRhLmNhdGVnb3J5KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjbG9uZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb25cbiAgICAgICAgY29uc3QgZGVmYXVsdENvbmZpZ3VyYXRpb24gPSBBZHZhbmNlZFRhYmxlQ29uZmlndXJhdGlvbi5jYXN0KHRoaXMudGFibGVDb25maWd1cmF0aW9uLCB0cnVlKTtcbiAgICAgICAgLy8gY29ycmVjdCBlZGl0IGJ1dHRvbiBsaW5rXG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IGRlZmF1bHRDb25maWd1cmF0aW9uLmNvbHVtbnMuZmluZCggY29sID0+IHtcbiAgICAgICAgICByZXR1cm4gY29sLmZvcm1hdHRlciA9PT0gJ0J1dHRvbkZvcm1hdHRlcicgJiYgY29sLmZvcm1hdFN0cmluZyA9PT0gJyhtb2RhbDplZGl0KSc7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY29sdW1uKSB7XG4gICAgICAgICAgY29uc3QgdXJsOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgICAgICAgdGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QucGF0aEZyb21Sb290LmZvckVhY2goIHJvdXRlID0+IHtcbiAgICAgICAgICAgIHVybC5wdXNoLmFwcGx5KHVybCwgcm91dGUudXJsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb2x1bW4uZm9ybWF0U3RyaW5nID0gYCMvJHt1cmwuam9pbignLycpfS8obW9kYWw6XFwkXFx7aWRcXH0vZWRpdClgO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNyZWF0ZSBsaXN0IGNvbmZpZ3VyYXRpb24gYnkgYXNzaWduaW5nIGxpc3QgZW50aXR5IHNldFxuICAgICAgICB0YWJsZS5jb25maWcgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICBtb2RlbDogZW50aXR5U2V0Lk5hbWVcbiAgICAgICAgfSwgZGVmYXVsdENvbmZpZ3VyYXRpb24pO1xuICAgICAgICAvLyBmZXRjaCBkYXRhXG4gICAgICAgIHRhYmxlLmZldGNoKHRydWUpO1xuICAgICAgICAvLyBkbyByZWxvYWQgYnkgdXNpbmcgaGlkZGVuIGZyYWdtZW50IGUuZy4gL2NsYXNzZXMjcmVsb2FkXG4gICAgICAgIHRoaXMucmVsb2FkU3Vic2NyaXB0aW9uID0gdGhpcy5fYWN0aXZhdGVkUm91dGUuZnJhZ21lbnQuc3Vic2NyaWJlKGZyYWdtZW50ID0+IHtcbiAgICAgICAgICBpZiAoZnJhZ21lbnQgJiYgZnJhZ21lbnQgPT09ICdyZWxvYWQnKSB7XG4gICAgICAgICAgICB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdyhcbiAgICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnU2V0dGluZ3MuT3BlcmF0aW9uQ29tcGxldGVkJylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0YWJsZS5mZXRjaCh0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBmaW5hbGx5IGFkZCB1c2VyIGFjdGl2aXR5XG4gICAgICAgIHRoaXMuX3VzZXJBY3Rpdml0eVNlcnZpY2Uuc2V0SXRlbSh7XG4gICAgICAgICAgY2F0ZWdvcnk6IHRoaXMuY2F0ZWdvcnkgYXMgc3RyaW5nLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uIGFzIHN0cmluZyxcbiAgICAgICAgICB1cmw6IHdpbmRvdy5sb2NhdGlvbi5oYXNoLnN1YnN0cmluZygxKSxcbiAgICAgICAgICBkYXRlQ3JlYXRlZDogbmV3IERhdGVcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIHJldHVybiB0aGlzLl9lcnJvclNlcnZpY2Uuc2hvd0Vycm9yKGVycik7XG4gICAgfVxuICB9XG5cblxuICAvKipcbiAgICogRGF0YSBsb2FkIGV2ZW50IGhhbmRsZXIgb2YgYWR2YW5jZWQgdGFibGUgY29tcG9uZW50XG4gICAqIEBwYXJhbSBkYXRhXG4gICAqL1xuICBvbkRhdGFMb2FkKGRhdGE6IEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0KSB7XG4gICAgdGhpcy5yZWNvcmRzVG90YWwgPSBkYXRhLnJlY29yZHNUb3RhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgc2VsZWN0ZWQgaXRlbXNcbiAgICovXG4gIHJlbW92ZSgpIHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMudGFibGU7XG4gICAgaWYgKHRhYmxlICYmIHRhYmxlLnNlbGVjdGVkICYmIHRhYmxlLnNlbGVjdGVkLmxlbmd0aCkge1xuICAgICAgLy8gZ2V0IGl0ZW1zIHRvIHJlbW92ZVxuICAgICAgY29uc3QgaXRlbXMgPSB0YWJsZS5zZWxlY3RlZDtcbiAgICAgIHJldHVybiB0aGlzLl9tb2RhbFNlcnZpY2Uuc2hvd1dhcm5pbmdEaWFsb2coXG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnVGFibGVzLlJlbW92ZUl0ZW1zVGl0bGUnKSxcbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdUYWJsZXMuUmVtb3ZlSXRlbXNNZXNzYWdlJyksXG4gICAgICAgIERJQUxPR19CVVRUT05TLk9rQ2FuY2VsKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gJ29rJykge1xuICAgICAgICAgICAgdGhpcy5fY29udGV4dC5tb2RlbCh0YWJsZS5jb25maWcubW9kZWwpLnJlbW92ZShpdGVtcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX3RvYXN0U2VydmljZS5zaG93KFxuICAgICAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gKyAnOicgKyB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5SZW1vdmVJdGVtTWVzc2FnZS50aXRsZScpLFxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgoaXRlbXMubGVuZ3RoID09PSAxID9cbiAgICAgICAgICAgICAgICAgICdUYWJsZXMuUmVtb3ZlSXRlbU1lc3NhZ2Uub25lJyA6ICdUYWJsZXMuUmVtb3ZlSXRlbU1lc3NhZ2UubWFueScpXG4gICAgICAgICAgICAgICAgICAsIHsgdmFsdWU6IGl0ZW1zLmxlbmd0aCB9KVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB0YWJsZS5mZXRjaCh0cnVlKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2Vycm9yU2VydmljZS5zaG93RXJyb3IoZXJyLCB7XG4gICAgICAgICAgICAgICAgY29udGludWVMaW5rOiAnLidcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95LCBJbnB1dCwgRXZlbnRFbWl0dGVyLFxuICAgIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgVmlld0VuY2Fwc3VsYXRpb24sIEFmdGVyVmlld0luaXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0ICdyeGpzL2FkZC9vYnNlcnZhYmxlL2NvbWJpbmVMYXRlc3QnO1xuaW1wb3J0IHtNb2RhbFNlcnZpY2V9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcbmltcG9ydCB7Um91dGVyTW9kYWxPa0NhbmNlbH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24vcm91dGluZyc7XG5pbXBvcnQge09ic2VydmFibGUsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0FkdmFuY2VkRm9ybUNvbXBvbmVudH0gZnJvbSAnQHVuaXZlcnNpcy9mb3Jtcyc7XG5pbXBvcnQgeyBQcm9ncmVzc2JhckNvbXBvbmVudCB9IGZyb20gJ25neC1ib290c3RyYXAvcHJvZ3Jlc3NiYXInO1xuXG5AQ29tcG9uZW50KHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtcm93LWFjdGlvbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FkdmFuY2VkLXJvdy1hY3Rpb24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlczogW1xuICAgICAgICBgXG4gICAgICAgIC5mYS0xXzV4IHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS41cmVtO1xuICAgICAgICB9XG4gICAgICAgIC5mb3JtLWNvbnRyb2w6ZGlzYWJsZWQsIC5mb3JtLWNvbnRyb2xbcmVhZG9ubHldIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7XG4gICAgICAgIH1cbiAgICAgICAgLmZvcm0tY2hlY2suY2hlY2tib3gge1xuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgICAgICB9XG4gICAgICAgIGBcbiAgICBdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRSb3dBY3Rpb25Db21wb25lbnQgZXh0ZW5kcyBSb3V0ZXJNb2RhbE9rQ2FuY2VsIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gIGludmFsaWRTdWJzY3JpcHRpb246IGFueTtcblxuXG4gICAgQElucHV0KCkgaXRlbXM6IGFueTtcbiAgICBASW5wdXQoKSBtb2RhbEljb24gPSAnZmFzIGZhLXByb2plY3QtZGlhZ3JhbSc7XG4gICAgQElucHV0KCkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgZm9ybVRlbXBsYXRlPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHByb2dyZXNzVHlwZSA9ICdpbmRpZ28nO1xuICAgIEBPdXRwdXQoKSBkYXRhOiBhbnk7XG4gICAgQElucHV0KCkgYWRkaXRpb25hbE1lc3NhZ2U/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgZXJyb3JNZXNzYWdlID0gJ1RhYmxlcy5BY3Rpb25zLkNvbXBsZXRlZFdpdGhFcnJvcnMnO1xuICAgIHB1YmxpYyBsYXN0RXJyb3I6IGFueTtcbiAgICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuICAgIEBWaWV3Q2hpbGQoJ3Byb2dyZXNzJykgcHJvZ3Jlc3NDb21wb25lbnQ/OiBQcm9ncmVzc2JhckNvbXBvbmVudDtcbiAgICBAVmlld0NoaWxkKCdwcm9ncmVzc0NvbnRhaW5lcicpIHByb2dyZXNzQ29udGFpbmVyPzogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdmb3JtQ29tcG9uZW50JykgZm9ybUNvbXBvbmVudD86IEFkdmFuY2VkRm9ybUNvbXBvbmVudDtcbiAgICBASW5wdXQoKSByZWZyZXNoOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBASW5wdXQoKSBleGVjdXRlPzogT2JzZXJ2YWJsZTxhbnk+O1xuICAgIHByaXZhdGUgcmVmcmVzaFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIGV4ZWN1dGVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgICBjb25zdHJ1Y3Rvcihyb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgICAgICAgICBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIF9tb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSkge1xuICAgICAgICBzdXBlcihyb3V0ZXIsIGFjdGl2YXRlZFJvdXRlKTtcbiAgICAgICAgLy8gc2V0IG1vZGFsIHNpemVcbiAgICAgICAgdGhpcy5tb2RhbENsYXNzID0gJ21vZGFsLWxnJztcbiAgICAgICAgLy8gc2V0IG1vZGFsIHRpdGxlXG4gICAgICAgIHRoaXMubW9kYWxUaXRsZSA9ICdUYWJsZXMuQWN0aW9ucy5MYWJlbCc7XG4gICAgICAgIC8vIGRpc2FibGUgb2sgYnV0dG9uXG4gICAgICAgIHRoaXMub2tCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAvLyBzZXQgYnV0dG9uIHRleHRcbiAgICAgICAgdGhpcy5va0J1dHRvblRleHQgPSAnVGFibGVzLkFjdGlvbnMuU3RhcnQnO1xuICAgIH1cblxuICAgIGdldCBmb3JtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybUNvbXBvbmVudDtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMucmVmcmVzaFN1YnNjcmlwdGlvbiA9IHRoaXMucmVmcmVzaC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcm9ncmVzc0NvbXBvbmVudCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLnByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgbGV0IHByb2dyZXNzID0gMDtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUucHJvZ3Jlc3MgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2dyZXNzID0gMDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLnByb2dyZXNzID4gMTAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2dyZXNzID0gMTAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2dyZXNzID0gdmFsdWUucHJvZ3Jlc3M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NDb21wb25lbnQudmFsdWUgPSBwcm9ncmVzcztcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dQcm9ncmVzcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLmZvcm1Db21wb25lbnQgJiYgdGhpcy5mb3JtQ29tcG9uZW50LmZvcm0pIHtcbiAgICAgICAgdGhpcy5va0J1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pbnZhbGlkU3Vic2NyaXB0aW9uID0gdGhpcy5mb3JtQ29tcG9uZW50LmZvcm0uY2hhbmdlLnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV2ZW50LCAnaXNWYWxpZCcpICYmIChldmVudC5jaGFuZ2VkICE9IG51bGwpKSB7XG4gICAgICAgICAgICAgIHRoaXMub2tCdXR0b25EaXNhYmxlZCA9ICFldmVudC5pc1ZhbGlkO1xuICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5yZWZyZXNoU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5leGVjdXRlU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbnZhbGlkU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmludmFsaWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNhbmNlbCgpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBpZiAodGhpcy5sb2FkaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2xvc2VcbiAgICAgICAgaWYgKHRoaXMuX21vZGFsU2VydmljZS5tb2RhbFJlZikge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9tb2RhbFNlcnZpY2UubW9kYWxSZWYuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICBhc3luYyBvaygpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmV4ZWN1dGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmxhc3RFcnJvciA9IG51bGw7XG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtQ29tcG9uZW50ICYmIHRoaXMuZm9ybUNvbXBvbmVudC5mb3JtICYmXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29tcG9uZW50LmZvcm0uZm9ybWlvICYmIHRoaXMuZm9ybUNvbXBvbmVudC5mb3JtLmZvcm1pby5kYXRhKSB7XG4gICAgICAgICAgICAgICAgLy8gc2V0IGRhdGFcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmZvcm1Db21wb25lbnQuZm9ybS5mb3JtaW8uZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRvIGFjdGlvblxuICAgICAgICAgICAgdGhpcy5leGVjdXRlLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzczogMTAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuZXJyb3JzICYmIHJlc3VsdC5lcnJvcnMgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNob3cgbWVzc2FnZSBmb3IgcGFydGlhbCBzdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZXJyb3JzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RFcnJvciA9IG5ldyBFcnJvcih0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5lcnJvck1lc3NhZ2V9LkRlc2NyaXB0aW9uLk9uZWApKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdEVycm9yID0gbmV3IEVycm9yKHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5lcnJvck1lc3NhZ2V9LkRlc2NyaXB0aW9uLk1hbnlgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzOiAxXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVQcm9ncmVzcygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tb2RhbFNlcnZpY2UubW9kYWxSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW9kYWxTZXJ2aWNlLm1vZGFsUmVmLmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0RXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzczogMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmxhc3RFcnJvciA9IGVycjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNob3dQcm9ncmVzcygpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvZ3Jlc3NDb250YWluZXIpIHtcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NDb250YWluZXIubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVwbGFjZSgnaW52aXNpYmxlJywgJ3Zpc2libGUnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhpZGVQcm9ncmVzcygpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvZ3Jlc3NDb250YWluZXIpIHtcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NDb250YWluZXIubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVwbGFjZSgndmlzaWJsZScsICdpbnZpc2libGUnKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuQENvbXBvbmVudCh7XG4gICAgdGVtcGxhdGU6ICcnXG4gIH0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZVNlYXJjaEJhc2VDb21wb25lbnQge1xuICAgIHByaXZhdGUgX2ZpbHRlcjogYW55O1xuICAgIEBPdXRwdXQoKSBmaWx0ZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCAgZmlsdGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVyO1xuICAgIH1cblxuICAgIHNldCBmaWx0ZXIodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fZmlsdGVyID0gdmFsdWU7XG4gICAgfVxuXG4gICAgb25LZXlFbnRlcihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh0aGlzLl9maWx0ZXIpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuaW1wb3J0IHtBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24sIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlc30gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Zvcm1pb0NvbXBvbmVudCwgRm9ybWlvRm9ybX0gZnJvbSAnYW5ndWxhci1mb3JtaW8nO1xuaW1wb3J0IHtBbmd1bGFyRGF0YUNvbnRleHR9IGZyb20gJ0B0aGVtb3N0L2FuZ3VsYXInO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7U2VydmljZVVybFByZVByb2Nlc3NvciwgVHJhbnNsYXRlUHJlUHJvY2Vzc29yfSBmcm9tICdAdW5pdmVyc2lzL2Zvcm1zJztcbmltcG9ydCB7QWR2YW5jZWRUYWJsZVNlYXJjaEJhc2VDb21wb25lbnR9IGZyb20gJy4uL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLXNlYXJjaC1iYXNlJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2FwcC1hZHZhbmNlZC1zZWFyY2gtZm9ybScsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInAtNFwiPlxuICAgICAgPGZvcm1pbyAjZm9ybWlvQ29tcG9uZW50IGNsYXNzPVwiZm9ybWlvLXNlYXJjaFwiXG4gICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5RW50ZXIoJGV2ZW50KVwiIChjaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiIChmb3JtTG9hZCk9XCJvbkZvcm1Mb2FkKCRldmVudClcIlxuICAgICAgICAgICAgICBbcmVmcmVzaF09XCJyZWZyZXNoRm9ybVwiIFtzdWJtaXNzaW9uXT1cInN1Ym1pc3Npb25cIiBbZm9ybV09XCJmb3JtXCI+PC9mb3JtaW8+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL2FkdmFuY2VkLXNlYXJjaC1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRTZWFyY2hGb3JtQ29tcG9uZW50IGV4dGVuZHMgQWR2YW5jZWRUYWJsZVNlYXJjaEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcblxuXG4gIEBWaWV3Q2hpbGQoJ2Zvcm1pb0NvbXBvbmVudCcpIGZvcm1Db21wb25lbnQ/OiBGb3JtaW9Db21wb25lbnQ7XG4gIEBJbnB1dCgpIGZvcm06IGFueSA9IHt9O1xuICBASW5wdXQoKSBmb3JtU3JjPzogc3RyaW5nO1xuICBAT3V0cHV0KCkgcmVmcmVzaEZvcm0gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGxvYWRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPHsgdGFyZ2V0OiBBZHZhbmNlZFNlYXJjaEZvcm1Db21wb25lbnR9PigpO1xuICBzdWJtaXNzaW9uOiBhbnkgPSB7IGRhdGE6IHt9IH07XG4gIHByaXZhdGUgZmlsdGVyU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgY29tcG9uZW50TG9hZGluZyA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfY29udGV4dDogQW5ndWxhckRhdGFDb250ZXh0LFxuICAgICAgICAgICAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2h0dHA6IEh0dHBDbGllbnRcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdmb3JtJykpIHtcbiAgICAgIGlmIChjaGFuZ2VzLmZvcm0gIT0gbnVsbCkge1xuICAgICAgICBpZiAoY2hhbmdlcy5mb3JtLmN1cnJlbnRWYWx1ZSAmJlxuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG4gICAgICAgICAgY2hhbmdlcy5mb3JtLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLmZvcm0ucHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgIHRoaXMubmdPbkluaXQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdmb3JtU3JjJykpIHtcbiAgICAgIGlmIChjaGFuZ2VzLmZvcm1TcmMgIT0gbnVsbCkge1xuICAgICAgICBpZiAoY2hhbmdlcy5mb3JtU3JjLmN1cnJlbnRWYWx1ZSAmJlxuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG4gICAgICAgICAgY2hhbmdlcy5mb3JtU3JjLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLmZvcm1TcmMucHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgIHRoaXMuX2h0dHAuZ2V0KGNoYW5nZXMuZm9ybVNyYy5jdXJyZW50VmFsdWUpLnRvUHJvbWlzZSgpLnRoZW4oKGZvcm0pID0+IHtcbiAgICAgICAgICAgIC8vIHNldCBmb3JtXG4gICAgICAgICAgICB0aGlzLmZvcm0gPSBmb3JtO1xuICAgICAgICAgICAgLy8gYW5kIGluaXRcbiAgICAgICAgICAgIHRoaXMubmdPbkluaXQoKTtcbiAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBsb2FkaW5nIHNlYXJjaCBjb25maWd1cmF0aW9uJyk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnZmlsdGVyJykpIHtcbiAgICAgIGlmIChjaGFuZ2VzLmZpbHRlciAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuc3VibWlzc2lvbi5kYXRhID0gY2hhbmdlcy5maWx0ZXIuY3VycmVudFZhbHVlIHx8IHt9O1xuICAgICAgICB0aGlzLnJlZnJlc2hGb3JtLmVtaXQoe1xuICAgICAgICAgIHN1Ym1pc3Npb246IHRoaXMuc3VibWlzc2lvblxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtKSB7XG4gICAgICBuZXcgU2VydmljZVVybFByZVByb2Nlc3Nvcih0aGlzLl9jb250ZXh0KS5wYXJzZSh0aGlzLmZvcm0pO1xuICAgICAgbmV3IFRyYW5zbGF0ZVByZVByb2Nlc3Nvcih0aGlzLl90cmFuc2xhdGVTZXJ2aWNlKS5wYXJzZSh0aGlzLmZvcm0pO1xuICAgICAgdGhpcy5zdWJtaXNzaW9uID0ge1xuICAgICAgICBkYXRhOiB0aGlzLmZpbHRlclxuICAgICAgfTtcbiAgICAgIHRoaXMubG9hZGluZy5lbWl0KHtcbiAgICAgICAgdGFyZ2V0OiB0aGlzXG4gICAgICB9KTtcbiAgICAgIHRoaXMucmVmcmVzaEZvcm0uZW1pdCh7XG4gICAgICAgIGZvcm06IHRoaXMuZm9ybVxuICAgICAgfSk7XG4gICAgICB0aGlzLmNvbXBvbmVudExvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuZmlsdGVyU3Vic2NyaXB0aW9uID0gdGhpcy5maWx0ZXJDaGFuZ2Uuc3Vic2NyaWJlKCBmaWx0ZXIgPT4ge1xuICAgICAgICB0aGlzLnN1Ym1pc3Npb24uZGF0YSA9IGZpbHRlcjtcbiAgICAgICAgdGhpcy5yZWZyZXNoRm9ybS5lbWl0KHtcbiAgICAgICAgICBzdWJtaXNzaW9uOiB0aGlzLnN1Ym1pc3Npb25cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvbkNoYW5nZShldmVudDogb2JqZWN0KSB7XG4gICAgaWYgKHRoaXMuZm9ybUNvbXBvbmVudCA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZvcm1Db21wb25lbnQgPSB0aGlzLmZvcm1Db21wb25lbnQ7XG4gICAgT2JqZWN0LmtleXMoZm9ybUNvbXBvbmVudC5zdWJtaXNzaW9uLmRhdGEpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZm9ybUNvbXBvbmVudC5zdWJtaXNzaW9uLmRhdGEsIGtleSkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBmb3JtQ29tcG9uZW50LnN1Ym1pc3Npb24uZGF0YVtrZXldO1xuICAgICAgICAvLyB0aGUgZmlsdGVyIHdpdGggdHlwZSBpcyBhIHN0cmluZyBhbmQgaXMgbm90IGVtcHR5XG4gICAgICAgIGNvbnN0IGlzRW1wdHlTdHJpbmcgPSAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPT09IDA7XG4gICAgICAgIC8vIGRvIG5vdCBpbmNsdWRlIGVtcHR5IG9iamVjdHMgaW4gZmlsdGVyXG4gICAgICAgIGNvbnN0IGlzRW1wdHlPYmplY3QgPSB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDA7XG4gICAgICAgIC8vIG1ha2UgaXNFbXB0eVN0cmluZywgaXNFbXB0eU9iamVjdCBtdXRleFxuICAgICAgICBpZiAoIWlzRW1wdHlTdHJpbmcgJiYgIWlzRW1wdHlPYmplY3QpIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5maWx0ZXIsIGtleSwge1xuICAgICAgICAgICAgY29uZmlndXJhYmxlIDogdHJ1ZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZSA6IHZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuZmlsdGVyW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uRm9ybUxvYWQoZm9ybTogRm9ybWlvRm9ybSkge1xuICAgIGlmICh0aGlzLmZvcm1Db21wb25lbnQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW50TGFuZyA9IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmc7XG4gICAgdGhpcy5mb3JtQ29tcG9uZW50LmZvcm1pby5pMThuZXh0Lm9wdGlvbnMucmVzb3VyY2VzW2N1cnJlbnRMYW5nXSA9IHsgdHJhbnNsYXRpb24gOiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYEZvcm1zYCkgfTtcbiAgICB0aGlzLmZvcm1Db21wb25lbnQuZm9ybWlvLmxhbmd1YWdlID0gY3VycmVudExhbmc7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLy9cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZpbHRlclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5maWx0ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQsIEFmdGVyVmlld0luaXQsIERvQ2hlY2sgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlck1vZGFsT2tDYW5jZWwgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbi9yb3V0aW5nJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVGFibGVDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVDb21wb25lbnQsIEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0IH0gZnJvbSAnLi4vYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IEFuZ3VsYXJEYXRhQ29udGV4dCB9IGZyb20gJ0B0aGVtb3N0L2FuZ3VsYXInO1xuaW1wb3J0IHsgQWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyIH0gZnJvbSAnLi8uLi9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC1maWx0ZXItdmFsdWUtcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBUZW1wbGF0ZVBpcGUgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgUGFnZUluZm8ge1xuICBwYWdlOiBudW1iZXI7XG4gIHBhZ2VzOiBudW1iZXI7XG4gIHN0YXJ0OiBudW1iZXI7XG4gIGVuZDogbnVtYmVyO1xuICBsZW5ndGg6IG51bWJlcjtcbiAgcmVjb3Jkc1RvdGFsOiBudW1iZXI7XG4gIHJlY29yZHNEaXNwbGF5OiBudW1iZXI7XG4gIHNlcnZlclNpZGU/OiBib29sZWFuO1xufVxuXG4vLyBpbXBvcnRhbnQ6IGV4cG9ydCB0aGlzIGNvbnN0IGR1ZSB0byBBT1QgY29tcGlsYXRpb24gZXJyb3JzXG4vLyBzZWUgbW9yZSBodHRwczovL2FuZ3VsYXIuaW8vZ3VpZGUvYW90LW1ldGFkYXRhLWVycm9ycyNvbmx5LWluaXRpYWxpemVkLXZhcmlhYmxlc1xuZXhwb3J0IGNvbnN0IEFkdmFuY2VkVGFibGVNb2RhbEJhc2VUZW1wbGF0ZSA9IGBcbjxkaXY+XG4gICAgPCEtLSBzZWFyY2ggLS0+XG4gICAgPGRpdiBjbGFzcz1cInJvdyBtdC0zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1sZy0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBtYi0zXCI+XG4gICAgICAgICAgPGlucHV0IHNwZWxsY2hlY2s9XCJmYWxzZVwiIHR5cGU9XCJ0ZXh0XCIgI3NlYXJjaEVsZW1lbnRcbiAgICAgICAgICAgICAgICAgKGtleXVwKT1cIm9uS2V5VXAoJGV2ZW50KVwiIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiXG4gICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGJnLWdyYXktMTAwIGJvcmRlci0wXCJcbiAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eydUYWJsZXMuU2VhcmNoUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlfX1cIiBhcmlhLWxhYmVsPVwiU2VhcmNoXCIgYXJpYS1kZXNjcmliZWRieT1cImJhc2ljLWFkZG9uMlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1hcHBlbmRcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYmctZ3JheS0xMDAgYm9yZGVyLTBcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uU2VhcmNoKClcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zZWFyY2ggdGV4dC1zZWNvbmRhcnlcIj48L2k+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgI2VtcHR5VGFibGUgY2xhc3M9XCJkLW5vbmVcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY2lyY2xlIGJnLWdyYXktMzAwIGJvcmRlci1ncmF5LTEwMFwiPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgICA8aDQgY2xhc3M9XCJmb250LTN4bCB0ZXh0LWRhcmtcIiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuRW1wdHlUYWJsZVRpdGxlJ1wiPjwvaDQ+XG4gICAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtbGcgdGV4dC1kYXJrXCIgW3RyYW5zbGF0ZV09XCInVGFibGVzLkVtcHR5VGFibGVNZXNzYWdlJ1wiPjwvcD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbGctNVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLXRvb2xiYXJcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1ncmF5LTEwMFwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zbGlkZXJzLWggcHItMiB0ZXh0LXNlY29uZGFyeVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT57eydUYWJsZXMuRmlsdGVycycgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxkaXYgI2Ryb3Bkb3duRmlsdGVyIGNsYXNzPVwiZHJvcGRvd24gbWwtM1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZ3JheS0xMDAgZHJvcGRvd24tdG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIGlkPVwiZHJvcGRvd25EZWZhdWx0RmlsdGVyc1wiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIiBkcm9wZG93blRvZ2dsZT5cbiAgICAgICAgICAgICAge3sgdGhpcy5kZWZhdWx0RmlsdGVyLm5hbWUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93bkRlZmF1bHRGaWx0ZXJzXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgZGVmYXVsdEZpbHRlcnNcIiAoY2xpY2spPVwib25GaWx0ZXJTZWxlY3QoZmlsdGVyKVwiPlxuICAgICAgICAgICAgICAgIHt7IGZpbHRlci5uYW1lIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIHRleHQtbGctcmlnaHQgbXQtMyBtdC1sZy0wIGQtbm9uZVwiPlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJ0cnVlXCIgY2xhc3M9XCJidG4gcm91bmRlZC1waWxsIGJ0bi1vdXRsaW5lLXRoZW1lXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJwci0yIGZvbnQtbGdcIj4rPC9zcGFuPjxzcGFuIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5BZGRJdGVtJ1wiPjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgW25nQ2xhc3NdPVwieyAnY29tcG9uZW50LWxvYWRpbmcnOiBsb2FkaW5nfVwiPlxuICAgICAgICA8YXBwLWFkdmFuY2VkLXRhYmxlICNhZHZhbmNlZFRhYmxlIChpbml0KT1cIm9uVGFibGVJbml0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb2FkKT1cIm9uRGF0YUxvYWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlU2VsZWN0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzY3JvbGxYXT1cImZhbHNlXCIgW3Njcm9sbFldPVwiMzIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFnZUxlbmd0aF09XCJwYWdlTGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2Nyb2xsYWJsZV09XCJmYWxzZVwiIFtzaG93Rm9vdGVyXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0FjdGlvbnNdPVwiZmFsc2VcIiBbbGVuZ3RoTWVudV09XCJsZW5ndGhNZW51XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cInRhYmxlQ29uZmlnXCIgW2NvbmZpZ1NyY109XCJ0YWJsZUNvbmZpZ1NyY1wiPjwvYXBwLWFkdmFuY2VkLXRhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJvdyBtdC0zIHRhYmxlLWN1c3RvbS1wYWdlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXhcIiAqbmdJZj1cInJlY29yZHNUb3RhbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBtbC1hdXRvIG1yLTMgdGV4dC1zZWNvbmRhcnlcIiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuUmVjb3Jkc1BlclBhZ2UnXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgI2Ryb3Bkb3duTGVuZ3RoIGNsYXNzPVwiZHJvcGRvd24gbXItM1wiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWdyYXktMTAwIGRyb3Bkb3duLXRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJkcm9wZG93blBhZ2VTaXplXCIgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXG4gICAgICAgICAgICAgICAgICBkcm9wZG93blRvZ2dsZT5cbiAgICAgICAgICAgIHt7cGFnZUxlbmd0aH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93blBhZ2VTaXplXCI+XG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzZXRMZW5ndGgoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gZHJvcGRvd24taXRlbS10aGVtZVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBsZW5ndGhNZW51XCI+e3tpdGVtfX08L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIG1yLTJcIiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuUGFnZUluZm8nXCIgW3RyYW5zbGF0ZVBhcmFtc109XCJwYWdlSW5mb1wiPjwvZGl2PlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJwYWdlSW5mbyAmJiBwYWdlSW5mby5wYWdlID09PSAwXCIgY2xhc3M9XCJidG4gdGV4dC1ub3dyYXBcIiAoY2xpY2spPVwiZmlyc3RQYWdlKClcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tbGVmdCB0ZXh0LWNvbG9yLXRoZW1lXCI+PC9pPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1sZWZ0IHRleHQtY29sb3ItdGhlbWVcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJwYWdlSW5mbyAmJiBwYWdlSW5mby5wYWdlPT09MFwiIGNsYXNzPVwiYnRuXCIgKGNsaWNrKT1cInByZXZpb3VzUGFnZSgpXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWxlZnQgdGV4dC1jb2xvci10aGVtZVwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cInBhZ2VJbmZvICYmIHBhZ2VJbmZvLnBhZ2U9PT1wYWdlSW5mby5wYWdlcy0xXCIgY2xhc3M9XCJidG5cIiAoY2xpY2spPVwibmV4dFBhZ2UoKVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1yaWdodCB0ZXh0LWNvbG9yLXRoZW1lXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwicGFnZUluZm8gJiYgcGFnZUluZm8ucGFnZT09PXBhZ2VJbmZvLnBhZ2VzLTFcIiBjbGFzcz1cImJ0biB0ZXh0LW5vd3JhcFwiIChjbGljayk9XCJsYXN0UGFnZSgpXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLXJpZ2h0IHRleHQtY29sb3ItdGhlbWVcIj48L2k+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLXJpZ2h0IHRleHQtY29sb3ItdGhlbWVcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuYDtcblxuLyoqXG4gKlxuICogQSBzcGVjaWZpYyB2YWx1ZSBmb3IgYSBjcml0ZXJpb25cbiAqXG4gKi9cbmludGVyZmFjZSBTZWFyY2hJdGVtIHtcbiAgZmlsdGVyOiBhbnk7XG4gIG5hbWU6IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLXRhYmxlLW1vZGFsJyxcbiAgdGVtcGxhdGU6IEFkdmFuY2VkVGFibGVNb2RhbEJhc2VUZW1wbGF0ZSxcbiAgc3R5bGVzOiBbXG4gICAgYFxuXG4gICAgYFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQgZXh0ZW5kcyBSb3V0ZXJNb2RhbE9rQ2FuY2VsIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zZWFyY2hFbGVtZW50ICYmIHRoaXMuc2VhcmNoRWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuc2VhcmNoRWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0FMTF9GSUxURVIgPSB7XG4gICAgbmFtZTogJ1RhYmxlcy5BbGwnLFxuICAgIGZpbHRlcjogbnVsbFxuICB9O1xuXG4gIEBWaWV3Q2hpbGQoJ2FkdmFuY2VkVGFibGUnKSBhZHZhbmNlZFRhYmxlPzogQWR2YW5jZWRUYWJsZUNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnZW1wdHlUYWJsZScpIGVtcHR5VGFibGU/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdkcm9wZG93bkZpbHRlcicpIGRyb3Bkb3duRmlsdGVyPzogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZHJvcGRvd25MZW5ndGgnKSBkcm9wZG93bkxlbmd0aD86IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaEVsZW1lbnQnKSBzZWFyY2hFbGVtZW50OiBhbnk7XG4gIEBJbnB1dCgndGFibGVDb25maWcnKSB0YWJsZUNvbmZpZz86IFRhYmxlQ29uZmlndXJhdGlvbjtcbiAgQElucHV0KCd0YWJsZUNvbmZpZ1NyYycpIHRhYmxlQ29uZmlnU3JjPzogc3RyaW5nO1xuICBASW5wdXQoJ3BhZ2VMZW5ndGgnKSBwYWdlTGVuZ3RoID0gMjU7XG4gIEBJbnB1dCgnc2VhcmNoVGV4dCcpIHNlYXJjaFRleHQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgnbGVuZ3RoTWVudScpIGxlbmd0aE1lbnU6IEFycmF5PG51bWJlcj4gPSBbNSwgMTAsIDI1LCA1MCwgMTAwXTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHB1YmxpYyByZWNvcmRzVG90YWwgPSAwO1xuICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuICBwdWJsaWMgcmVjb3Jkc0ZpbHRlcmVkID0gMDtcbiAgcHVibGljIGRlZmF1bHRGaWx0ZXJzOiBBcnJheTxhbnk+ID0gW0FkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQuREVGQVVMVF9BTExfRklMVEVSXTtcbiAgQElucHV0KCdkZWZhdWx0RmlsdGVyJykgZGVmYXVsdEZpbHRlciA9IEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQuREVGQVVMVF9BTExfRklMVEVSO1xuXG5cbiAgcHVibGljIHBhZ2VJbmZvID0gPFBhZ2VJbmZvPntcbiAgICBzZXJ2ZXJTaWRlOiB0cnVlXG4gIH07XG4gIHByaXZhdGUgX3RlbXBsYXRlOiBUZW1wbGF0ZVBpcGU7XG4gIGNvbmZpZ0NoYW5nZXNTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgX3JvdXRlcjogUm91dGVyLFxuICAgIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJvdGVjdGVkIF9jb250ZXh0OiBBbmd1bGFyRGF0YUNvbnRleHQsXG4gICAgcHJvdGVjdGVkIGFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcjogQWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyLFxuICAgIHByb3RlY3RlZCBkYXRlUGlwZTogRGF0ZVBpcGVcbiAgKSB7XG4gICAgc3VwZXIoX3JvdXRlciwgX2FjdGl2YXRlZFJvdXRlKTtcbiAgICB0aGlzLm1vZGFsQ2xhc3MgPSAnbW9kYWwteGwgbW9kYWwtdGFibGUnO1xuICAgIHRoaXMuX3RlbXBsYXRlID0gbmV3IFRlbXBsYXRlUGlwZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0SW5wdXRzKGNvbXBvbmVudFR5cGUpOiBBcnJheTxhbnk+IHtcbiAgICBjb25zdCBwcm9wcyA9IGNvbXBvbmVudFR5cGUuX19wcm9wX19tZXRhZGF0YV9fO1xuICAgIGNvbnN0IGlucHV0czogYW55W10gPSBbXTtcbiAgICBpZiAocHJvcHMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGlucHV0cztcbiAgICB9XG4gICAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICBjb25zdCBtZW1iZXIgPSBwcm9wc1twcm9wXVswXTtcbiAgICAgIGlmIChtZW1iZXIubmdNZXRhZGF0YU5hbWUgPT09ICdJbnB1dCcpIHtcbiAgICAgICAgaW5wdXRzLnB1c2gocHJvcCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGlucHV0cy5zb3J0KCk7XG4gIH1cblxuICBwdWJsaWMgaGFzSW5wdXRzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuXG4gICAgdGhpcy5va0J1dHRvblRleHQgPSAnVGFibGVzLkFwcGx5JztcbiAgICB0aGlzLmNhbmNlbEJ1dHRvblRleHQgPSAnVGFibGVzLkNhbmNlbCc7XG4gICAgLy8gZ2V0IHJvdXRlIGRhdGFcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuYWN0aXZhdGVkUm91dGUuZGF0YS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAvLyBzZXQgbW9kYWwgdGl0bGUgaWYgYW55XG4gICAgICBpZiAoZGF0YS50aXRsZSkge1xuICAgICAgICB0aGlzLm1vZGFsVGl0bGUgPSBkYXRhLnRpdGxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jb25maWcpIHtcbiAgICAgICAgdGhpcy50YWJsZUNvbmZpZyA9IGRhdGEuY29uZmlnO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudGFibGVDb25maWcpIHtcbiAgICAgICAgdGhpcy5kZWZhdWx0RmlsdGVycy5wdXNoLmFwcGx5KHRoaXMuZGVmYXVsdEZpbHRlcnMsIHRoaXMudGFibGVDb25maWcuc2VhcmNoZXMpO1xuICAgICAgfVxuICAgICAgLy8gaW1wb3J0YW50OiB1c2UgaGFzSW5wdXRzIGR1ZSB0byBBT1QgY29tcGlsYXRpb24uIE1ldGFkYXRhIHByb3BlcnRpZXMgY2Fubm90IGJlIHVzZWQgKGUuZy4gQElucHV0KCkpXG4gICAgICAvLyBiZWNhdXNlIHRoZXJlIGFyZSBlbXB0eSBkdXJpbmcgcnVudGltZVxuICAgICAgLy8gc28gd2UgbmVlZCB0byBkZWZpbmUgbWFudWFsbHkgaW5wdXQgcHJvcGVydGllcyB0aGF0IGFyZSBnb2luZyB0byBiZSBiaW5kIHRocm91Z2ggdGhpcyBwcm9jZXNzXG4gICAgICAvLyBiaW5kIGFsbCBpbnB1dHNcbiAgICAgIGNvbnN0IGlucHV0cyA9IHRoaXMuaGFzSW5wdXRzKCk7XG4gICAgICBpbnB1dHMuZm9yRWFjaChpbnB1dCA9PiB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGF0YSwgaW5wdXQpKSB7XG4gICAgICAgICAgdGhpc1tpbnB1dF0gPSBkYXRhW2lucHV0XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAodGhpcy5hZHZhbmNlZFRhYmxlKSB7XG4gICAgICAgIHRoaXMuY29uZmlnQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IHRoaXMuYWR2YW5jZWRUYWJsZS5jb25maWdDaGFuZ2VzLnN1YnNjcmliZSgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMudGFibGVDb25maWcpIHtcbiAgICAgICAgICAgIC8vIHJlc2V0IGRlZmF1bHQgZmlsdGVyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50LkRFRkFVTFRfQUxMX0ZJTFRFUjtcbiAgICAgICAgICAgIC8vIGluaXQgZmlsdGVyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRGaWx0ZXJzID0gW0FkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQuREVGQVVMVF9BTExfRklMVEVSXTtcbiAgICAgICAgICAgIC8vIGFkZCBleHRyYSBmaWx0ZXJzXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRGaWx0ZXJzLnB1c2guYXBwbHkodGhpcy5kZWZhdWx0RmlsdGVycywgdGhpcy50YWJsZUNvbmZpZy5zZWFyY2hlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNhbmNlbCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBvaygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgb25EYXRhTG9hZChkYXRhOiBBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdCkge1xuICAgIHRoaXMucmVjb3Jkc1RvdGFsID0gZGF0YS5yZWNvcmRzVG90YWw7XG4gICAgdGhpcy5yZWNvcmRzRmlsdGVyZWQgPSBkYXRhLnJlY29yZHNGaWx0ZXJlZDtcbiAgICAvLyBnZXQgZmlyc3QgcGFnZSBpbmZvIChiZWNhdXNlIHBhZ2UgaXMgbm90IGdvaW5nIHRvIGJlIGZpcmVkIGZvciBmaXJzdCBwYWdlKVxuICAgIGlmIChkYXRhLnJlY29yZHNUb3RhbCA+IDAgJiYgdGhpcy5wYWdlSW5mby5yZWNvcmRzVG90YWwgPT09IDApIHtcbiAgICAgIHRoaXMucGFnZUluZm8ucmVjb3Jkc1RvdGFsID0gZGF0YS5yZWNvcmRzVG90YWw7XG4gICAgfVxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICB9XG5cbiAgcHJldmlvdXNQYWdlKCkge1xuICAgIGlmICh0aGlzLmFkdmFuY2VkVGFibGUpIHtcbiAgICAgIC8vIGdvIHRvIG5leHQgcGFnZVxuICAgICAgLy8gbm9pbnNwZWN0aW9uIFR5cGVTY3JpcHRWYWxpZGF0ZUpTVHlwZXNcbiAgICAgIHRoaXMuYWR2YW5jZWRUYWJsZS5kYXRhVGFibGUucGFnZSgncHJldmlvdXMnKS5kcmF3KCdwYWdlJyk7XG4gICAgfVxuICB9XG5cbiAgbmV4dFBhZ2UoKSB7XG4gICAgaWYgKHRoaXMuYWR2YW5jZWRUYWJsZSkge1xuICAgICAgLy8gZ28gdG8gbmV4dCBwYWdlXG4gICAgICAvLyBub2luc3BlY3Rpb24gVHlwZVNjcmlwdFZhbGlkYXRlSlNUeXBlc1xuICAgICAgdGhpcy5hZHZhbmNlZFRhYmxlLmRhdGFUYWJsZS5wYWdlKCduZXh0JykuZHJhdygncGFnZScpO1xuICAgIH1cbiAgfVxuXG4gIG9uVGFibGVJbml0KCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGRhdGFUYWJsZSA9IHNlbGYuYWR2YW5jZWRUYWJsZSAmJiBzZWxmLmFkdmFuY2VkVGFibGUuZGF0YVRhYmxlO1xuICAgIC8vIGdldCBpbml0aWFsIHBhZ2UgaW5mb1xuICAgIGNvbnN0IGluaXRpYWxQYWdlSW5mbyA9IDxQYWdlSW5mbz5kYXRhVGFibGUucGFnZS5pbmZvKCk7XG4gICAgaW5pdGlhbFBhZ2VJbmZvLnN0YXJ0ICs9IDE7XG4gICAgc2VsZi5wYWdlSW5mbyA9IGluaXRpYWxQYWdlSW5mbztcbiAgICAvLyBjaGFuZ2UgZW1wdHlUYWJsZU1lc3NhZ2VcbiAgICBkYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc0VtcHR5VGFibGUgPSB0aGlzLmVtcHR5VGFibGUgJiYgdGhpcy5lbXB0eVRhYmxlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MO1xuICAgIC8vIGJpbmQgcGFnZSBjaGFuZ2UgZXZlbnRcbiAgICBkYXRhVGFibGUub24oJ3BhZ2UuZHQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYWdlSW5mbyA9IDxQYWdlSW5mbz5kYXRhVGFibGUucGFnZS5pbmZvKCk7XG4gICAgICBwYWdlSW5mby5zdGFydCArPSAxO1xuICAgICAgc2VsZi5wYWdlSW5mbyA9IHBhZ2VJbmZvO1xuICAgIH0pO1xuICAgIC8vIGJpbmQgZHJhdyBjaGFuZ2UgZXZlbnRcbiAgICBkYXRhVGFibGUub24oJ2RyYXcuZHQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBmb3IgZnV0dXJlIHVzZVxuICAgICAgc2VsZi5sb2FkaW5nID0gZmFsc2U7XG4gICAgICBjb25zdCBwYWdlSW5mbyA9IDxQYWdlSW5mbz5kYXRhVGFibGUucGFnZS5pbmZvKCk7XG4gICAgICBwYWdlSW5mby5zdGFydCArPSAxO1xuICAgICAgc2VsZi5wYWdlSW5mbyA9IHBhZ2VJbmZvO1xuICAgIH0pO1xuICB9XG5cbiAgZmlyc3RQYWdlKCkge1xuICAgIGlmICh0aGlzLmFkdmFuY2VkVGFibGUpIHtcbiAgICAgIC8vIGdvIHRvIGZpcnN0IHBhZ2VcbiAgICAgIC8vIG5vaW5zcGVjdGlvbiBUeXBlU2NyaXB0VmFsaWRhdGVKU1R5cGVzXG4gICAgICB0aGlzLmFkdmFuY2VkVGFibGUuZGF0YVRhYmxlLnBhZ2UoJ2ZpcnN0JykuZHJhdygncGFnZScpO1xuICAgIH1cbiAgfVxuXG4gIGxhc3RQYWdlKCkge1xuICAgIGlmICh0aGlzLmFkdmFuY2VkVGFibGUpIHtcbiAgICAgIC8vIGdvIHRvIGxhc3QgcGFnZVxuICAgICAgLy8gbm9pbnNwZWN0aW9uIFR5cGVTY3JpcHRWYWxpZGF0ZUpTVHlwZXNcbiAgICAgIHRoaXMuYWR2YW5jZWRUYWJsZS5kYXRhVGFibGUucGFnZSgnbGFzdCcpLmRyYXcoJ3BhZ2UnKTtcbiAgICB9XG4gIH1cblxuICBzZXRMZW5ndGgodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmFkdmFuY2VkVGFibGUpIHtcbiAgICAgIHRoaXMucGFnZUxlbmd0aCA9IHZhbHVlO1xuICAgICAgdGhpcy5hZHZhbmNlZFRhYmxlLmRhdGFUYWJsZS5wYWdlLmxlbih2YWx1ZSkuZHJhdygpO1xuICAgIH1cbiAgfVxuXG4gIG9uS2V5VXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJ1JldHVybicpIHtcbiAgICAgIGlmICh0aGlzLmFkdmFuY2VkVGFibGUpIHtcbiAgICAgICAgLy8gbG9hZGluZ1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmFkdmFuY2VkVGFibGUuc2VhcmNoKCg8SFRNTElucHV0RWxlbWVudD5ldmVudC50YXJnZXQpLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblNlYXJjaCgpIHtcbiAgICBpZiAodGhpcy5hZHZhbmNlZFRhYmxlKSB7XG4gICAgICAvLyBsb2FkaW5nXG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5hZHZhbmNlZFRhYmxlLnNlYXJjaCh0aGlzLnNlYXJjaFRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBSZWFkcyB0aGUgbW9kYWwgdGFibGUgYW5kIHJldHVybnMgYSBsaXN0IG9mIGZpbHRlcnMgdG8gdXNlIGluIHRoZSB0YWJsZVxuICAgKiBxdWVyeS5cbiAgICpcbiAgICogQHBhcmFtIHRhYmxlQ29uZmlnIHtvYmplY3R9IFRoZSB0YWJsZSBjb25maWd1cmF0aW9uIGZyb20ganNvbiBmaWxlXG4gICAqIEBwYXJhbSBkZWZhdWx0RmlsdGVyVmFsdWVzIHtvYmplY3R9IEEgbGlzdCBvZiBkZWZhdWx0IGZpbHRlcnNcbiAgICogQHBhcmFtIHNlYXJjaEl0ZW0gVGhlIHNlYXJjaEl0ZW0gdG8gdXNlXG4gICAqXG4gICAqL1xuICBnZXRGaWx0ZXJzKFxuICAgIHRhYmxlQ29uZmlnOiBhbnksXG4gICAgZGVmYXVsdEZpbHRlclZhbHVlcyA9IHt9LFxuICAgIHNlYXJjaEl0ZW06IGFueVxuICApOiBBcnJheTxzdHJpbmc+IHtcbiAgICAvLyBEbyBub3RoaW5nIGluIGFic2VuY2Ugb2YgY29uZmlndXJhdGlvbi5cbiAgICBpZiAoIXRhYmxlQ29uZmlnIHx8ICFBcnJheS5pc0FycmF5KHRhYmxlQ29uZmlnLmNyaXRlcmlhKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGlmIChzZWFyY2hJdGVtLmZpbHRlciA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2hlZENyaXRlcmlvbiA9IHRhYmxlQ29uZmlnLmNyaXRlcmlhLmZpbmQoY3JpdGVyaW9uID0+XG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2VhcmNoSXRlbS5maWx0ZXIsIGNyaXRlcmlvbi5uYW1lKVxuICAgICk7XG5cbiAgICBpZiAobWF0Y2hlZENyaXRlcmlvbiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBzZWFyY2hJdGVtLmZpbHRlclttYXRjaGVkQ3JpdGVyaW9uLm5hbWVdO1xuXG4gICAgY29uc3QgY3JpdGVyaW9uU2FmZU5hbWUgPSBtYXRjaGVkQ3JpdGVyaW9uLm5hbWUgIT09IG51bGxcbiAgICAgID8gbWF0Y2hlZENyaXRlcmlvbi5uYW1lLnRvU3RyaW5nKClcbiAgICAgIDogJyc7XG5cbiAgICBsZXQgYXBwbGljYWJsZUZpbHRlcjogc3RyaW5nO1xuXG4gICAgLy8gUmF3IGRhdGVzIHNob3VsZCBiZSB0cmFuc2Zvcm1lZCB0byBhIHNwZWNpZmljIGZvcm1hdFxuICAgIGlmIChjcml0ZXJpb25TYWZlTmFtZS5pbmNsdWRlcygnR01UJykpIHtcbiAgICAgIGNvbnN0IG5ld0RhdGUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShjcml0ZXJpb25TYWZlTmFtZSwgJ01NL2RkL3l5eXknKTtcbiAgICAgIGFwcGxpY2FibGVGaWx0ZXIgPSB0aGlzLl90ZW1wbGF0ZS50cmFuc2Zvcm0obWF0Y2hlZENyaXRlcmlvbi5maWx0ZXIsIHtcbiAgICAgICAgdmFsdWU6IG5ld0RhdGVcbiAgICAgIH0pO1xuXG4gICAgfSBlbHNlIGlmIChjcml0ZXJpb25TYWZlTmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGFwcGxpY2FibGVGaWx0ZXIgPSAodGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKG1hdGNoZWRDcml0ZXJpb24uZmlsdGVyLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICB9LCBkZWZhdWx0RmlsdGVyVmFsdWVzKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBsaWNhYmxlRmlsdGVyID0gJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIFthcHBsaWNhYmxlRmlsdGVyXTtcbiAgfVxuXG4gIG9uRmlsdGVyU2VsZWN0KHZhbHVlOiB7IGZpbHRlcjogYW55OyBuYW1lOiBzdHJpbmcgfSB8IGFueSkge1xuICAgIHRoaXMuYWR2YW5jZWRTZWFyY2godmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIFJ1bnMgYSBmaWx0ZXIgYWdhaW5zdCB0aGUgbW9kYWwgdGFibGVcbiAgICpcbiAgICogQHBhcmFtIGZpbHRlciBUaGUgZmlsdGVyIHRvIHVzZSBpbiB0aGUgc2VhcmNoXG4gICAqXG4gICAqL1xuICBhc3luYyBhZHZhbmNlZFNlYXJjaChmaWx0ZXIpOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIERvIG5vdGhpbmcgaW4gYWJzZW5jZSBvZiBjb25maWd1cmF0aW9uLlxuICAgIGlmICghdGhpcy50YWJsZUNvbmZpZyB8fCAhQXJyYXkuaXNBcnJheSh0aGlzLnRhYmxlQ29uZmlnLmNyaXRlcmlhKSB8fCAhdGhpcy5hZHZhbmNlZFRhYmxlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05vIHRhYmxlIGNvbmZpZ3VyYXRpb24gYXZhaWxhYmxlJywgdGhpcy50YWJsZUNvbmZpZyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQW4gYWR2YW5jZWQgdGFibGUgaGFzIHNvbWUgZmlsdGVycyBieSBkZWZhdWx0XG4gICAgbGV0IGRlZmF1bHRGaWx0ZXJWYWx1ZXM7XG4gICAgdHJ5IHtcbiAgICAgIGRlZmF1bHRGaWx0ZXJWYWx1ZXMgPSBhd2FpdCB0aGlzLmFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlci5nZXRWYWx1ZXMoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGRlZmF1bHRGaWx0ZXJWYWx1ZXMgPSB7fTtcbiAgICB9XG5cbiAgICBjb25zdCBleHByZXNzaW9uczogYW55W10gPSBbXTtcbiAgICBsZXQgcHJlZGVmaW5lZENyaXRlcmlhO1xuICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IGZpbHRlcjtcbiAgICAgIHByZWRlZmluZWRDcml0ZXJpYSA9IHRoaXMuZ2V0RmlsdGVycyhcbiAgICAgICAgdGhpcy50YWJsZUNvbmZpZyxcbiAgICAgICAgZGVmYXVsdEZpbHRlclZhbHVlcyxcbiAgICAgICAgZmlsdGVyXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFbXB0eSBhIGZhbHN5IGZpbHRlciByZXNldHMgdGhlIHJlc3VsdHNcbiAgICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQuREVGQVVMVF9BTExfRklMVEVSO1xuICAgIH1cblxuICAgIC8vIHNlYXJjaCBmaWx0ZXIgaXMgYXBwbGllZCBzZXBhcmF0ZWx5LCB0aGVyZSBpcyBubyBuZWVkIHRvIGFkZCBoZXJlLlxuICAgIGV4cHJlc3Npb25zLnB1c2gocHJlZGVmaW5lZENyaXRlcmlhKTtcblxuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5fY29udGV4dC5tb2RlbCh0aGlzLmFkdmFuY2VkVGFibGUuY29uZmlnLm1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgIHF1ZXJ5LnNldFBhcmFtKCdmaWx0ZXInLCBleHByZXNzaW9ucy5qb2luKCcgYW5kICcpKS5wcmVwYXJlKCk7XG4gICAgdGhpcy5hZHZhbmNlZFRhYmxlLnF1ZXJ5ID0gcXVlcnk7XG4gICAgdGhpcy5hZHZhbmNlZFRhYmxlLmZldGNoKCk7XG4gIH1cbn1cblxuIiwiaW1wb3J0IHsgQWR2YW5jZWRUYWJsZU1vZGFsQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2FkdmFuY2VkLXRhYmxlLW1vZGFsL2FkdmFuY2VkLXRhYmxlLW1vZGFsLWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyIH0gZnJvbSAnLi4vYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtZmlsdGVyLXZhbHVlLXByb3ZpZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQW5ndWxhckRhdGFDb250ZXh0IH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkdmFuY2VkLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAubW9kYWwtdGFibGUgLmRhdGFUYWJsZXNfd3JhcHBlciB7XG4gICAgICBoZWlnaHQ6IDUwdmg7XG4gICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIH1cbiAgICBgLFxuICBdLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFNlbGVjdENvbXBvbmVudCBleHRlbmRzIEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcblxuICBwdWJsaWMgZGlzbWlzczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaEVsZW1lbnQnKSBzZWFyY2hFbGVtZW50OiBhbnk7XG5cbiAgY29uc3RydWN0b3Iocm91dGVyOiBSb3V0ZXIsXG4gICAgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIGNvbnRleHQ6IEFuZ3VsYXJEYXRhQ29udGV4dCxcbiAgICBhZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXI6IEFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcixcbiAgICBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgcHJpdmF0ZSBfbW9kYWxSZWY6IEJzTW9kYWxSZWYsXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZikge1xuICAgIHN1cGVyKHJvdXRlciwgYWN0aXZhdGVkUm91dGUsIGNvbnRleHQsIGFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlciwgZGF0ZVBpcGUpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc2VhcmNoRWxlbWVudCAmJiB0aGlzLnNlYXJjaEVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB0aGlzLnNlYXJjaEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuICAgIH0sIDApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIG9rKCkge1xuICAgIHRoaXMuX21vZGFsUmVmLmhpZGUoKTtcbiAgICB0aGlzLmRpc21pc3MuZW1pdCgnb2snKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjYW5jZWwoKSB7XG4gICAgdGhpcy5fbW9kYWxSZWYuaGlkZSgpO1xuICAgIHRoaXMuZGlzbWlzcy5lbWl0KCdjYW5jZWwnKTtcbiAgfVxuXG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RhbFNlcnZpY2UgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQgeyBBZHZhbmNlZFNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4vYWR2YW5jZWQtc2VsZWN0LmNvbXBvbmVudCc7XG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRTZWxlY3RTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9tb2RhbDogTW9kYWxTZXJ2aWNlKSB7XG4gICAgLy9cbiAgfVxuXG4gIHNlbGVjdChpbml0aWFsU3RhdGU6IGFueSk6IFByb21pc2U8e3Jlc3VsdDogc3RyaW5nLCBpdGVtczogQXJyYXk8YW55Pn0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLl9tb2RhbC5vcGVuTW9kYWxDb21wb25lbnQoQWR2YW5jZWRTZWxlY3RDb21wb25lbnQsIHtcbiAgICAgICAgICBjbGFzczogJ21vZGFsLXhsIG1vZGFsLXRhYmxlJyxcbiAgICAgICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlLFxuICAgICAgICAgIGFuaW1hdGVkOiB0cnVlLFxuICAgICAgICAgIGluaXRpYWxTdGF0ZTogaW5pdGlhbFN0YXRlXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBjb21wb25lbnRSZWY6IEFkdmFuY2VkU2VsZWN0Q29tcG9uZW50ID0gbW9kYWxSZWYuY29udGVudDtcbiAgICAgICAgY29tcG9uZW50UmVmLmRpc21pc3Muc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh7XG4gICAgICAgICAgICByZXN1bHQ6IHJlc3VsdCxcbiAgICAgICAgICAgIGl0ZW1zOiAoY29tcG9uZW50UmVmLmFkdmFuY2VkVGFibGUgJiYgY29tcG9uZW50UmVmLmFkdmFuY2VkVGFibGUuc2VsZWN0ZWQpIGFzIGFueVtdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgUmVzb2x2ZSwgUm91dGVyU3RhdGVTbmFwc2hvdH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZUNvbmZpZ3VyYXRpb25SZXNvbHZlciBpbXBsZW1lbnRzIFJlc29sdmU8c3RyaW5nPiB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfaHR0cDogSHR0cENsaWVudCkge31cbiAgICByZXNvbHZlKFxuICAgICAgICByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgICAgICAgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3RcbiAgICApOiBQcm9taXNlPGFueT58YW55IHtcbiAgICAgICAgLy8gZ2V0IGxpc3RcbiAgICAgICAgY29uc3QgbGlzdCA9IHJvdXRlLmRhdGEubGlzdCB8fCByb3V0ZS5wYXJhbXMubGlzdDtcbiAgICAgICAgLy8gZ2V0IG1vZGVsXG4gICAgICAgIGNvbnN0IG1vZGVsID0gcm91dGUuZGF0YS5tb2RlbCB8fCByb3V0ZS5wYXJhbXMubW9kZWw7XG4gICAgICAgIC8vIGdldCBjb25maWd1cmF0aW9uXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldChgYXNzZXRzL2xpc3RzLyR7bW9kZWx9LyR7bGlzdH0uanNvbmApLnRvUHJvbWlzZSgpO1xuICAgIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkU2VhcmNoQ29uZmlndXJhdGlvblJlc29sdmVyIGltcGxlbWVudHMgUmVzb2x2ZTxzdHJpbmc+IHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9odHRwOiBIdHRwQ2xpZW50KSB7fVxuICAgIHJlc29sdmUoXG4gICAgICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICAgICAgICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdFxuICAgICk6IFByb21pc2U8YW55Pnxhbnkge1xuICAgICAgICAvLyBnZXQgbGlzdFxuICAgICAgICBjb25zdCBsaXN0ID0gcm91dGUuZGF0YS5saXN0IHx8IHJvdXRlLnBhcmFtcy5saXN0O1xuICAgICAgICAvLyBnZXQgbW9kZWxcbiAgICAgICAgY29uc3QgbW9kZWwgPSByb3V0ZS5kYXRhLm1vZGVsIHx8IHJvdXRlLnBhcmFtcy5tb2RlbDtcbiAgICAgICAgLy8gZ2V0IGNvbmZpZ3VyYXRpb25cbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0KGBhc3NldHMvbGlzdHMvJHttb2RlbH0vc2VhcmNoLiR7bGlzdH0uanNvbmApLnRvUHJvbWlzZSgpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVDb21wb25lbnQgfSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQW5ndWxhckRhdGFDb250ZXh0IH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XHJcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlLCBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFRhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3RhYmxlcy5hY3RpdmF0ZWQtdGFibGUuc2VydmljZSc7XHJcbmltcG9ydCB7IFVzZXJTdG9yYWdlU2VydmljZSB9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXHJcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtdGFibGUtc2V0dGluZ3MnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hZHZhbmNlZC10YWJsZS1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCcsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVTZXR0aW5nc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIHRhYmxlPzogQWR2YW5jZWRUYWJsZUNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKCdtb2RhbF9zZXR0aW5nc190ZW1wbGF0ZScpIG1vZGFsX3NldHRpbmdzX3RlbXBsYXRlPzogRWxlbWVudFJlZjtcclxuICBtb2RhbFJlZj86IEJzTW9kYWxSZWY7XHJcbiAgc3RvcmFnZUtleTogYW55O1xyXG4gIHBhcmFtczogYW55ID0gdGhpcy5fYWN0aXZhdGVkUm91dGUucGFyYW1zO1xyXG4gIHByaXZhdGUgc2F2ZWRUYWJsZVNldHRpbmdzOiBhbnk7XHJcbiAgZm9ybT86IEZvcm1Hcm91cDtcclxuICBjb2x1bW5zOiBhbnlbXSA9IFtdO1xyXG4gIHRhYmxlQ29sdW1uczogYW55O1xyXG4gIGFjdGl2ZVRhYmxlQ29uZmlnOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfY29udGV4dDogQW5ndWxhckRhdGFDb250ZXh0LFxyXG4gICAgICAgICAgICAgIHByb3RlY3RlZCBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTdG9yYWdlOiBVc2VyU3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfYWN0aXZhdGVkVGFibGU6IEFjdGl2YXRlZFRhYmxlU2VydmljZSkge1xyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICB9XHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5hY3RpdmVUYWJsZUNvbmZpZyA9IHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlICYmIHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlLmdldENvbmZpZygpO1xyXG4gICAgdGhpcy5zdG9yYWdlS2V5ID0gJ3JlZ2lzdHJhci9zZXR0aW5ncy8nICsgdGhpcy5hY3RpdmVUYWJsZUNvbmZpZy50aXRsZSArICcvdGFibGUvY29sdW1ucyc7XHJcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtjb2x1bW5zOiBuZXcgRm9ybUFycmF5KFtdLCB0aGlzLm1pblNlbGVjdGVkQ29sdW1ucygxKSl9KTtcclxuICAgIHRoaXMudXNlclN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXkpLnRoZW4oKGRhdGEpID0+IHtcclxuICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICB0aGlzLnNhdmVkVGFibGVTZXR0aW5ncyA9IGRhdGEudmFsdWU7XHJcbiAgICAgICAgaWYgKHRoaXMuc2F2ZWRUYWJsZVNldHRpbmdzKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5fYWN0aXZhdGVkVGFibGUuYWN0aXZlVGFibGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fYWN0aXZhdGVkVGFibGUuYWN0aXZlVGFibGUuaGFuZGxlQ29sdW1ucyh0aGlzLnNhdmVkVGFibGVTZXR0aW5ncyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWRkQ2hlY2tib3hlcygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBhZGRDaGVja2JveGVzKCkge1xyXG4gICAgdGhpcy50YWJsZUNvbHVtbnMgPSB0aGlzLmFjdGl2ZVRhYmxlQ29uZmlnLmNvbHVtbnMuc2xpY2UoMSk7XHJcbiAgICB0aGlzLnRhYmxlQ29sdW1ucy5mb3JFYWNoICgoY29sdW1uLCBpKSA9PiB7XHJcbiAgICAgIGlmICghY29sdW1uLmhpZGRlbikge1xyXG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB7XHJcbiAgICAgICAgICBpZDogY29sdW1uLm5hbWUsXHJcbiAgICAgICAgICBuYW1lOiBjb2x1bW4udGl0bGVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuY29sdW1ucy5wdXNoKGNvbnRyb2wpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmICh0aGlzLnNhdmVkVGFibGVTZXR0aW5ncykge1xyXG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCAoKGNvbHVtbiwgaSkgPT4ge1xyXG4gICAgICAgIGNvbHVtbi5jaGVjayA9IGZhbHNlO1xyXG4gICAgICAgIGNvbHVtbi5jaGVjayA9IHRoaXMuc2F2ZWRUYWJsZVNldHRpbmdzLmluY2x1ZGVzKGNvbHVtbi5pZCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmNvbHVtbnMubWFwKChjb2x1bW4sIGkpID0+IHtcclxuICAgICAgICBjb25zdCBjb250cm9sID0gbmV3IEZvcm1Db250cm9sKGNvbHVtbi5jaGVjayk7XHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybSkge1xyXG4gICAgICAgICAgKHRoaXMuZm9ybS5jb250cm9scy5jb2x1bW5zIGFzIEZvcm1BcnJheSkucHVzaChjb250cm9sKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3BlblRhYmxlU2V0dGluZ3ModGFibGVfc2V0dGluZ3NfbW9kYWw6IFRlbXBsYXRlUmVmPGFueT4pIHtcclxuICAgIHRoaXMubW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5zaG93KHRhYmxlX3NldHRpbmdzX21vZGFsKTtcclxuICB9XHJcblxyXG4gIHNhdmVUYWJsZVNldHRpbmdzKCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybSA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHNlbGVjdGVkQ29sdW1uc0lkcyA9IHRoaXMuZm9ybS52YWx1ZS5jb2x1bW5zXHJcbiAgICAgIC5tYXAoKHYsIGkpID0+IHYgPyB0aGlzLmNvbHVtbnNbaV0uaWQgOiBudWxsKVxyXG4gICAgICAuZmlsdGVyKHYgPT4gdiAhPT0gbnVsbCk7XHJcbiAgICB0aGlzLnVzZXJTdG9yYWdlLnNldEl0ZW0odGhpcy5zdG9yYWdlS2V5LCBzZWxlY3RlZENvbHVtbnNJZHMpO1xyXG4gICAgaWYgKHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlKSB7XHJcbiAgICAgIHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlLmhhbmRsZUNvbHVtbnMoc2VsZWN0ZWRDb2x1bW5zSWRzKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm1vZGFsUmVmKSB7XHJcbiAgICAgIHRoaXMubW9kYWxSZWYuaGlkZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGlzbWlzcygpIHtcclxuICAgIGlmICh0aGlzLm1vZGFsUmVmKSB7XHJcbiAgICAgIHRoaXMubW9kYWxSZWYuaGlkZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWluU2VsZWN0ZWRDb2x1bW5zKG1pbiA9IDEpIHtcclxuICAgIGNvbnN0IHZhbGlkYXRvcjogVmFsaWRhdG9yRm4gPSAoZm9ybUFycmF5OiBGb3JtQXJyYXkpID0+IHtcclxuICAgICAgY29uc3QgdG90YWxTZWxlY3RlZCA9IGZvcm1BcnJheS5jb250cm9sc1xyXG4gICAgICAgIC5tYXAoY29udHJvbCA9PiBjb250cm9sLnZhbHVlKVxyXG4gICAgICAgIC5yZWR1Y2UoKHByZXYsIG5leHQpID0+IG5leHQgPyBwcmV2ICsgbmV4dCA6IHByZXYsIDApO1xyXG5cclxuICAgICAgcmV0dXJuIHRvdGFsU2VsZWN0ZWQgPj0gbWluID8gbnVsbCA6IHsgcmVxdWlyZWQ6IHRydWUgfTtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHZhbGlkYXRvcjtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbiwgRXZlbnRFbWl0dGVyLCBBZnRlclZpZXdJbml0LCBUZW1wbGF0ZVJlZiwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVDb21wb25lbnQgfSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFuZ3VsYXJEYXRhQ29udGV4dCB9IGZyb20gJ0B0aGVtb3N0L2FuZ3VsYXInO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVXNlclN0b3JhZ2VTZXJ2aWNlLCBNb2RhbFNlcnZpY2UsIERJQUxPR19CVVRUT05TIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UsIEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7QWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyfSBmcm9tICcuL2FkdmFuY2VkLWZpbHRlci12YWx1ZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVTZWFyY2hCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS1zZWFyY2gtYmFzZSc7XG5pbXBvcnQge1RlbXBsYXRlUGlwZX0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUZXh0VXRpbHMgfSBmcm9tICdAdGhlbW9zdC9jbGllbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFkdmFuY2VkU2VhcmNoVmlld1N0YXR1cyB7XG4gIGFkdmFuY2VkVmlldzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZHZhbmNlZFNlYXJjaExpc3Qge1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2FwcC1hZHZhbmNlZC10YWJsZS1zZWFyY2gnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWR2YW5jZWQtdGFibGUtc2VhcmNoLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5cbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFRhYmxlU2VhcmNoQ29tcG9uZW50IGV4dGVuZHMgQWR2YW5jZWRUYWJsZVNlYXJjaEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSAge1xuXG4gIHByaXZhdGUgcXVlcnlQYXJhbVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBjb25maWdDaGFuZ2VzU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBASW5wdXQoKSBwdWJsaWMgdGFibGU/OiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50O1xuICBASW5wdXQoKSBwdWJsaWMgY29sbGFwc2VkID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIGFsbG93U2F2ZSA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBzaG93TW9yZSA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBtZXJnZVF1ZXJ5UGFyYW1zID0gZmFsc2U7XG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaFRleHQnKSBwdWJsaWMgc2VhcmNoVGV4dDogYW55O1xuICBAT3V0cHV0KCd2aWV3Q2hhbmdlJykgcHVibGljIHZpZXdDaGFuZ2U6IEV2ZW50RW1pdHRlcjxBZHZhbmNlZFNlYXJjaFZpZXdTdGF0dXM+ID0gbmV3IEV2ZW50RW1pdHRlcjxBZHZhbmNlZFNlYXJjaFZpZXdTdGF0dXM+KCk7XG4gIEBPdXRwdXQoJ2xpc3RDaGFuZ2UnKSBwdWJsaWMgbGlzdENoYW5nZTogRXZlbnRFbWl0dGVyPEFkdmFuY2VkU2VhcmNoTGlzdD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFkdmFuY2VkU2VhcmNoTGlzdD4oKTtcbiAgcHVibGljIHNldCB0ZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5zZWFyY2hUZXh0KSB7XG4gICAgICB0aGlzLnNlYXJjaFRleHQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiAodGhpcy5zZWFyY2hUZXh0ICYmIHRoaXMuc2VhcmNoVGV4dC5uYXRpdmVFbGVtZW50ICYmIHRoaXMuc2VhcmNoVGV4dC5uYXRpdmVFbGVtZW50LnZhbHVlKSBhcyBzdHJpbmc7XG4gIH1cblxuICBwdWJsaWMgbW9kYWxSZWY/OiBCc01vZGFsUmVmO1xuICBwdWJsaWMgc3RvcmFnZUtleTogYW55O1xuICBwdWJsaWMgc3RvcmFnZVZhbHVlOiBhbnk7XG4gIHB1YmxpYyB1c2VyU2VhcmNoTGlzdDogYW55ID0gW107XG4gIHB1YmxpYyBzZWxlY3RlZExpc3Q6IGFueSA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoIHByb3RlY3RlZCBfY29udGV4dDogQW5ndWxhckRhdGFDb250ZXh0LFxuICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgICAgICBwcm90ZWN0ZWQgZGF0ZVBpcGU6IERhdGVQaXBlLFxuICAgICAgICAgICAgICAgcHJpdmF0ZSBfbW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSxcbiAgICAgICAgICAgICAgIHByaXZhdGUgX3VzZXJTdG9yYWdlOiBVc2VyU3RvcmFnZVNlcnZpY2UsXG4gICAgICAgICAgICAgICBwcml2YXRlIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICBwcml2YXRlIF9hZHZhbmNlZFNlYXJjaFZhbHVlUHJvdmlkZXI6IEFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcixcbiAgICAgICAgICAgICAgIHByaXZhdGUgX3RlbXBsYXRlOiBUZW1wbGF0ZVBpcGUsXG4gICAgICAgICAgICAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgICAgICAgIHByaXZhdGUgX21vZGFsOiBNb2RhbFNlcnZpY2UpIHsgc3VwZXIoKTsgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50YWJsZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY29uZmlnQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IHRoaXMudGFibGUuY29uZmlnQ2hhbmdlcy5zdWJzY3JpYmUoKGNvbmZpZykgPT4ge1xuICAgICAgICBpZiAoY29uZmlnID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gbG9hZCB1c2VyIHNlYXJjaGVzXG4gICAgICAgIHRoaXMubG9hZFVzZXJTZWFyY2hMaXN0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgLy8gaWYgc2VhcmNoIGNvbXBvbmVudCBtZXJnZXMgcXVlcnkgcGFyYW1zXG4gICAgICAgICAgLy8gKHVzZXMgcXVlcnlQYXJhbXMgdG8gYXBwbHkgZmlsdGVyKVxuICAgICAgICAgIGlmICh0aGlzLm1lcmdlUXVlcnlQYXJhbXMpIHtcbiAgICAgICAgICAgIHRoaXMucXVlcnlQYXJhbVN1YnNjcmlwdGlvbiA9IHRoaXMuX2FjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocXVlcnlQYXJhbXMpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5hcHBseVF1ZXJ5UGFyYW1zKHF1ZXJ5UGFyYW1zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIHF1ZXJ5IGdpdmVuIGJ5IHRoZSBxdWVyeVBhcmFtcyBvZiB0aGUgYWN0aXZhdGVkIHJvdXRlXG4gICAqIEBwYXJhbSBxdWVyeVBhcmFtc1xuICAgKi9cbiAgcHJpdmF0ZSBhcHBseVF1ZXJ5UGFyYW1zKHF1ZXJ5UGFyYW1zOiBhbnkpIHtcbiAgICBpZiAodGhpcy50YWJsZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRhYmxlID0gdGhpcy50YWJsZTtcbiAgICB0aGlzLmZpbHRlciA9IHt9O1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocXVlcnlQYXJhbXMsICdxJykpIHtcbiAgICAgIC8vIHNldCBjb2xsYXBzZWRcbiAgICAgIHRoaXMuY29sbGFwc2VkID0gdHJ1ZTtcbiAgICAgIC8vIHNlYXJjaCB0ZXh0XG4gICAgICB0aGlzLnRleHQgPSBxdWVyeVBhcmFtcy5xO1xuICAgICAgcmV0dXJuIHRhYmxlLnNlYXJjaCh0aGlzLnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRleHQgPSAnJztcbiAgICB9XG5cbiAgICBsZXQgZmlsdGVyUGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSwgcXVlcnlQYXJhbXMpO1xuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChxdWVyeVBhcmFtcywgJ3MnKSkge1xuICAgICAgLy8gc2V0IGNvbGxhcHNlZFxuICAgICAgdGhpcy5jb2xsYXBzZWQgPSBmYWxzZTtcbiAgICAgIC8vIGZpbmQgdXNlciBzZWFyY2ggYnkgbmFtZVxuICAgICAgaWYgKHRoaXMudXNlclNlYXJjaExpc3QpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExpc3QgPSB0aGlzLnVzZXJTZWFyY2hMaXN0LmZpbmQoKGl0ZW0pID0+IHtcbiAgICAgICAgICByZXR1cm4gaXRlbS5uYW1lID09PSBxdWVyeVBhcmFtcy5zO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRMaXN0KSB7XG4gICAgICAgICAgZmlsdGVyUGFyYW1zID0gdGhpcy5zZWxlY3RlZExpc3QuZmlsdGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhmaWx0ZXJQYXJhbXMpLmZpbHRlcigoa2V5KSA9PiB7XG4gICAgICAvLyBzZWFyY2ggY3JpdGVyaWFcbiAgICAgIGlmICh0YWJsZS5jb25maWcgJiYgdGFibGUuY29uZmlnLmNyaXRlcmlhKSB7XG4gICAgICAgIHJldHVybiB0YWJsZS5jb25maWcuY3JpdGVyaWEuZmluZCgoaXRlbSkgPT4ge1xuICAgICAgICAgIHJldHVybiBpdGVtLm5hbWUgPT09IGtleTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSBmaWx0ZXJQYXJhbXNba2V5XTtcbiAgICAgIGlmIChUZXh0VXRpbHMuaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdChmaWx0ZXJQYXJhbXNba2V5XSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5maWx0ZXJba2V5XSAhPT0gdmFsdWUpIHtcbiAgICAgICAgLy8gc2V0IHZhbHVlXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLmZpbHRlciwga2V5LCB7XG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZmlsdGVyW2tleV0gIT0gbnVsbCkge1xuICAgICAgICB0aGlzLmNvbGxhcHNlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gY2FsbCBmaWx0ZXJDaGFuZ2UgZXZlbnQgdG8gYXBwbHkgY2hhbmdlIHRvIGFkdmFuY2VkIHNlYXJjaCBjaGlsZHJlblxuICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXIpO1xuICAgIC8vIGFwcGx5IHF1ZXJ5XG4gICAgdGhpcy5nZXRRdWVyeSgpLnRoZW4oKHF1ZXJ5KSA9PiB7XG4gICAgICAvLyBpZiB0YWJsZSBxdWVyeSBpcyBudWxsXG4gICAgICBpZiAodGFibGUucXVlcnkgPT0gbnVsbCkge1xuICAgICAgICAvLyBzZXQgcXVlcnlcbiAgICAgICAgdGFibGUucXVlcnkgPSBxdWVyeTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChxdWVyeSAhPSBudWxsICYmIHF1ZXJ5LmdldFBhcmFtcygpWyckZmlsdGVyJ10pIHtcbiAgICAgICAgICBjb25zdCBwYXJhbXMgPSBxdWVyeS5nZXRQYXJhbXMoKTtcbiAgICAgICAgICAvLyBvdGhlcndpc2Ugc2V0IGZpbHRlciBwYXJhbXNcbiAgICAgICAgICB0YWJsZS5xdWVyeS5zZXRQYXJhbSgnJGZpbHRlcicsIHBhcmFtcy4kZmlsdGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YWJsZS5xdWVyeS5zZXRQYXJhbSgnJGZpbHRlcicsIG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBhbmQgZmluYWxseSBmZXRjaCBkYXRhXG4gICAgICB0YWJsZS5mZXRjaCh0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5xdWVyeVBhcmFtU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnF1ZXJ5UGFyYW1TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29uZmlnQ2hhbmdlc1N1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5jb25maWdDaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcblxuICB9XG5cbiAgcHVibGljIG9uU2VhcmNoS2V5RG93bihldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMudGFibGUgJiYgZXZlbnQua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgIC8vIGdldCBzZWFyY2ggdGV4dFxuICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9ICggZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgICAgLy8gbWVyZ2UgcXVlcnkgcGFyYW1zID9cbiAgICAgIGlmICh0aGlzLm1lcmdlUXVlcnlQYXJhbXMpIHtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB7XG4gICAgICAgICAgcTogc2VhcmNoVGV4dCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMudGFibGUuY29uZmlnICYmIHRoaXMudGFibGUuY29uZmlnLmNyaXRlcmlhKSB7XG4gICAgICAgICAgdGhpcy50YWJsZS5jb25maWcuY3JpdGVyaWEuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHF1ZXJ5UGFyYW1zLCBpdGVtLm5hbWUsIHtcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdHJ5IHRvIGFwcGx5IGZpbHRlciBieSBhcHBlbmRpbmcgcXVlcnkgcGFyYW1zXG4gICAgICAgIHJldHVybiB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQoe1xuICAgICAgICBxOiBzZWFyY2hUZXh0XG4gICAgICB9KTtcbiAgICAgIC8vIG90aGVyd2lzZSBkbyBzZWFyY2hcbiAgICAgIHRoaXMudGFibGUuc2VhcmNoKHNlYXJjaFRleHQpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB0cmFuc2Zvcm1EYXRlKGRhdGUpIHtcbiAgICBkYXRlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgJ01NL2RkL3l5eXknKTsgLy8gd2hhdGV2ZXIgZm9ybWF0IHlvdSBuZWVkLlxuICAgIHJldHVybiBkYXRlO1xuICB9XG5cbiAgcHVibGljIGNvbnZlcnRUb1N0cmluZyhuYW1lRmlsdGVyKSB7XG4gICAgbGV0IG5hbWUgPSAnJztcbiAgICBpZiAobmFtZUZpbHRlciAhPSBudWxsKSB7XG4gICAgICBuYW1lID0gbmFtZUZpbHRlci50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZTtcbiAgfVxuXG4vLyAgTG9hZCBzYXZlZCBjcml0ZXJpYSBzZWFyY2hlcyB1c2VyIGhhcyBzdG9yZWQgYmVmb3JlXG4gIHByaXZhdGUgbG9hZFVzZXJTZWFyY2hMaXN0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnRhYmxlID09IG51bGwpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgdGhpcy5zdG9yYWdlS2V5ID0gJ3RhYmxlcy8nICsgdGhpcy50YWJsZS5jb25maWcubW9kZWwgKyAnL3NlYXJjaGVzJztcbiAgICByZXR1cm4gdGhpcy5fdXNlclN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXkpLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IGxpc3QgPSBkYXRhLnZhbHVlIHx8IFtdO1xuICAgICAgLy8gaWYgdGFibGUgY29uZmlndXJhdGlvbiBoYXMgcHJlLWRlZmluZWQgc2VhcmNoZXNcbiAgICAgIGlmICh0aGlzLnRhYmxlICYmIHRoaXMudGFibGUuY29uZmlnLnNlYXJjaGVzICYmIHRoaXMudGFibGUuY29uZmlnLnNlYXJjaGVzLmxlbmd0aCkge1xuICAgICAgICAvLyBhZGQgcHJlLWRlZmluZWQgbGlzdHNcbiAgICAgICAgbGlzdC5wdXNoLmFwcGx5KGxpc3QsIHRoaXMudGFibGUuY29uZmlnLnNlYXJjaGVzLm1hcCAoICh4KSA9PiB7XG4gICAgICAgICAgeC5yZWFkT25seSA9IHRydWU7IC8vIGFzIHJlYWRvbmx5XG4gICAgICAgICAgeC5uYW1lID0gdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoeC5uYW1lKTtcbiAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgLy8gc2V0IHVzZXIgc2VhcmNoIGxpc3RcbiAgICAgIHRoaXMudXNlclNlYXJjaExpc3QgPSBsaXN0O1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIC8vIERPIE5PVCBUSFJPVyBFUlJPUlxuICAgICAgLy8gdG9kbzogbm90aWZ5IGNvbXBvbmVudCBmb3IgdGhpcyBlcnJvciBpbiBvcmRlciB0byBkaXNhYmxlIHNvbWUgYWN0aW9uc1xuICAgICAgY29uc29sZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZ2V0dGluZyB1c2VyIHNlYXJjaCBsaXN0Jyk7XG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25TZWxlY3RVc2VyU2VhcmNoKGV2ZW50OiBhbnkpOiBhbnkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkTGlzdCAmJiB0aGlzLnRhYmxlKSB7XG4gICAgICBjb25zdCBsaXN0Rm91bmQgPSB0aGlzLnNlYXJjaEluTGlzdEJ5TmFtZSh0aGlzLnNlbGVjdGVkTGlzdC5uYW1lKTtcbiAgICAgIGlmIChsaXN0Rm91bmQpIHtcbiAgICAgICAgaWYgKHRoaXMubWVyZ2VRdWVyeVBhcmFtcykge1xuICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0geyBxOiBudWxsLCBzOiB0aGlzLnNlbGVjdGVkTGlzdC5uYW1lIH07XG4gICAgICAgICAgLy8gY2xlYXIgY3JpdGVyaWEgaWYgYW55XG4gICAgICAgICAgdGhpcy50YWJsZS5jb25maWcuY3JpdGVyaWEuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChxdWVyeVBhcmFtcywgaXRlbS5uYW1lKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgLy8gc2V0IG51bGwgdmFsdWVcbiAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHF1ZXJ5UGFyYW1zLCBpdGVtLm5hbWUsIHtcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5fYWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZExpc3QgPSBsaXN0Rm91bmQ7XG4gICAgICAgIHRoaXMuZmlsdGVyID0gdGhpcy5zZWxlY3RlZExpc3QuZmlsdGVyO1xuICAgICAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHRoaXMuZmlsdGVyKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5fYWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHF1ZXJ5UGFyYW1zOiB7IHM6IG51bGwgfSxcbiAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgc2VhcmNoSW5MaXN0QnlOYW1lKG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKCBBcnJheS5pc0FycmF5KHRoaXMudXNlclNlYXJjaExpc3QpICkge1xuICAgICAgY29uc3QgbGlzdEZvdW5kID0gdGhpcy51c2VyU2VhcmNoTGlzdC5maW5kKCAoeCkgPT4geC5uYW1lID09PSBuYW1lKTtcbiAgICAgIGlmICggbGlzdEZvdW5kICkge1xuICAgICAgICByZXR1cm4gbGlzdEZvdW5kO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4vLyAgVXBkYXRlIGxpc3QgaXRlbSBjb250ZW50cyB3aXRoIGdpdmVuIGNvbnRlbnQgKFNlYXJjaCBieSBvYmplY3QgbmFtZSBwcm9wZXJ0eSlcbiAgcHVibGljIHVwZGF0ZVNhdmVkU2VhcmNoTGlzdEl0ZW1CeU5hbWUoIG5hbWU6IHN0cmluZywgbmV3SXRlbTogYW55ICkge1xuICAgIGNvbnN0IGl0ZW1Jbkxpc3QgPSB0aGlzLnVzZXJTZWFyY2hMaXN0LmZpbmQoICh4KSA9PiB4Lm5hbWUgPT09IG5hbWUgKTtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMudXNlclNlYXJjaExpc3QuaW5kZXhPZihpdGVtSW5MaXN0KTtcbiAgICB0aGlzLnVzZXJTZWFyY2hMaXN0W2luZGV4XSA9IG5ld0l0ZW07XG4gICAgdGhpcy5zZWxlY3RlZExpc3QgPSB0aGlzLnVzZXJTZWFyY2hMaXN0W2luZGV4XTtcbiAgfVxuXG4vLyAgVXBkYXRlIGxpc3QgaXRlbSBjb250ZW50cyB3aXRoIGdpdmVuIGNvbnRlbnQgKFNlYXJjaCBieSBvYmplY3QpXG4gIHB1YmxpYyB1cGRhdGVTYXZlZFNlYXJjaExpc3RJdGVtQnlPYmplY3QoIGl0ZW1Jbkxpc3Q6IGFueSwgbmV3SXRlbTogYW55ICkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy51c2VyU2VhcmNoTGlzdC5pbmRleE9mKGl0ZW1Jbkxpc3QpO1xuICAgIHRoaXMudXNlclNlYXJjaExpc3RbaW5kZXhdID0gbmV3SXRlbTtcbiAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IHRoaXMudXNlclNlYXJjaExpc3RbaW5kZXhdO1xuICB9XG5cbi8vICBEZWxldGUgbGlzdCBpdGVtIGZyb20gbGlzdFxuICBwdWJsaWMgZGVsZXRlSXRlbUZyb21TYXZlZFNlYXJjaExpc3RCeU9iamVjdCggaXRlbUluTGlzdDogYW55KSB7XG4gICAgdGhpcy51c2VyU2VhcmNoTGlzdCA9IHRoaXMudXNlclNlYXJjaExpc3QuZmlsdGVyKChpdGVtKSA9PiBpdGVtICE9PSBpdGVtSW5MaXN0KTtcbiAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXIgPSB7fTtcbiAgICB0aGlzLmFkdmFuY2VkU2VhcmNoKHRydWUpO1xuICAgIHRoaXMudXBsb2FkTGlzdE9uVXNlclN0b3JhZ2UoKTtcbiAgfVxuXG4vLyAgVXNlciBjaG9zZSB0byBzYXZlIGl0cyBhZHZhbmNlZCBmb3JtIHNlYXJjaCBjcml0ZXJpYVxuICBwdWJsaWMgc2F2ZVNlYXJjaCggdGVtcGxhdGVUb0xvYWQ6IFRlbXBsYXRlUmVmPGFueT4sIG5ld0xpc3Q6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgaWYgKHRoaXMudGFibGUgJiYgdGhpcy50YWJsZS5jb25maWcubW9kZWwpIHtcbi8vICAgICAgU2V0IHRoZSBjb3JyZXNwb25kaW5nIGtleSB0byBpdHMgbGlzdCBhbmQgc2hvdyBhIGNvbmZpcm1hdGlvbiBtb2RhbCB3aW5kb3dcbiAgICAgIHRoaXMuc3RvcmFnZUtleSA9IGB0YWJsZXMvJHt0aGlzLnRhYmxlLmNvbmZpZy5tb2RlbH0vc2VhcmNoZXNgO1xuICAgICAgaWYgKHRoaXMuZmlsdGVyICYmIE9iamVjdC5rZXlzKHRoaXMuZmlsdGVyKS5sZW5ndGgpIHtcbi8vICAgICAgVXNlciB3YW50cyB0byBzYXZlIGFuIGV4aXN0aW5nIGxpc3QgZnJvbSB0aGUgZHJvcGRvd25cbiAgICAgICAgaWYgKCAhbmV3TGlzdCAmJiB0aGlzLnNlbGVjdGVkTGlzdCApIHtcbiAgICAgICAgICBjb25zdCBuZXdJdGVtID0geyBuYW1lIDogIHRoaXMuc2VsZWN0ZWRMaXN0Lm5hbWUsIGZpbHRlciA6IHsgLi4uIHRoaXMuZmlsdGVyIH0gfTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVNhdmVkU2VhcmNoTGlzdEl0ZW1CeU9iamVjdCAoIHRoaXMuc2VsZWN0ZWRMaXN0LCBuZXdJdGVtICk7XG4gICAgICAgICAgdGhpcy51cGxvYWRMaXN0T25Vc2VyU3RvcmFnZSgpO1xuLy8gICAgICBVc2VyIHdhbnRzIHRvIHNhdmUgYSBuZXcgbGlzdFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubW9kYWxSZWYgPSB0aGlzLl9tb2RhbFNlcnZpY2Uuc2hvdyh0ZW1wbGF0ZVRvTG9hZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4vLyAgICAgICAgVXNlciBkaWQgbm90IGRlZmluZSBhbnkgY3JpdGVyaWFcbiAgICAgICAgdGhpcy5fbW9kYWwuc2hvd1dhcm5pbmdEaWFsb2coXG4gICAgICAgICAgdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ0FkdmFuY2VkU2VhcmNoLk1vZGFsLlRpdGxlJyksXG4gICAgICAgICAgdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ0FkdmFuY2VkU2VhcmNoLk1vZGFsLkVtcHR5Q3JpdGVyaWFMaXN0JyksXG4gICAgICAgICAgRElBTE9HX0JVVFRPTlMuT2spO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9tb2RhbC5zaG93V2FybmluZ0RpYWxvZyhcbiAgICAgICAgICB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnQWR2YW5jZWRTZWFyY2guTW9kYWwuVGl0bGUnKSxcbiAgICAgICAgICB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnQWR2YW5jZWRTZWFyY2guTW9kYWwuTm9MaXN0RGVmaW5lZCcpLFxuICAgICAgICAgIERJQUxPR19CVVRUT05TLk9rKTtcbiAgICB9XG4gIH1cblxuLy8gIFVzZXIgQWNjZXB0ZWQgPT4gU2F2ZSBsaXN0IGFuZCBDbG9zZSBtb2RhbFxuICBwdWJsaWMgY29uZmlybU1vZGFsKCBzYXZlRm9ybU5hbWUgKTogdm9pZCB7XG4vLyAgICBuYW1lIGdpdmVuIGFuZCBsaXN0IG5hbWUgaXMgdW5pcXVlXG4gICAgaWYgKCBzYXZlRm9ybU5hbWUgJiYgISh0aGlzLnNlYXJjaEluTGlzdEJ5TmFtZShzYXZlRm9ybU5hbWUpKSApIHtcbiAgICAgIGNvbnN0IG5ld0luc2VydGVkVmFsdWUgPSB7IG5hbWUgOiAgc2F2ZUZvcm1OYW1lLCBmaWx0ZXIgOiB7IC4uLiB0aGlzLmZpbHRlciB9IH07XG4gICAgICBpZiAoIHRoaXMudXNlclNlYXJjaExpc3QgJiYgdGhpcy51c2VyU2VhcmNoTGlzdC5sZW5ndGggIT09IDAgKSB7XG4gICAgICAgIHRoaXMudXNlclNlYXJjaExpc3QucHVzaChuZXdJbnNlcnRlZFZhbHVlKTtcbiAgICAgICAgdGhpcy5zdG9yYWdlVmFsdWUgPSB0aGlzLnVzZXJTZWFyY2hMaXN0O1xuICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IG5ld0luc2VydGVkVmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0b3JhZ2VWYWx1ZSA9IFtuZXdJbnNlcnRlZFZhbHVlXTtcbiAgICAgICAgdGhpcy51c2VyU2VhcmNoTGlzdCA9IHRoaXMuc3RvcmFnZVZhbHVlO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IG5ld0luc2VydGVkVmFsdWU7XG4gICAgICB9XG4gICAgICB0aGlzLnVwbG9hZExpc3RPblVzZXJTdG9yYWdlKCk7XG4gICAgICBpZiAodGhpcy5tb2RhbFJlZikge1xuICAgICAgICB0aGlzLm1vZGFsUmVmLmhpZGUoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCBzYXZlRm9ybU5hbWUgJiYgKHRoaXMuc2VhcmNoSW5MaXN0QnlOYW1lKHNhdmVGb3JtTmFtZSkpICkge1xuLy8gICAgICBVc2VyIHNob3VsZCBpbnNlcnQgYSBkaWZmZXJlbnQgbmFtZSBjYXVzZSB0aGlzIG9uZSBpcyBhbHJlYWR5IGluIHVzZVxuICAgICAgYWxlcnQodGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ0FkdmFuY2VkU2VhcmNoLk1vZGFsLlRpdGxlT25MaXN0QWxyZWFkeUNyZWF0ZWQnKSk7XG4gICAgfSBlbHNlIHtcbi8vICAgICAgVXNlciBkaWQgbm90IGluc2VydCBhbnkgdGV4dFxuICAgICAgYWxlcnQodGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ0FkdmFuY2VkU2VhcmNoLk1vZGFsLlRpdGxlT25Vc2VyRXJyb3InKSk7XG4gICAgfVxuICB9XG5cbi8vICBVc2VyIGRlY2xpbmVkID0+IENsb3NlIG1vZGFsXG4gIHB1YmxpYyBjbG9zZU1vZGFsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1vZGFsUmVmKSB7XG4gICAgICB0aGlzLm1vZGFsUmVmLmhpZGUoKTtcbiAgICB9XG4gIH1cblxuLy8gIFVwbG9hZCB1c2VyJ3MgY3JpdGVyaWEgb24gVXNlciBTdG9yYWdlXG4gIHB1YmxpYyB1cGxvYWRMaXN0T25Vc2VyU3RvcmFnZSgpIHtcbiAgICB0aGlzLl91c2VyU3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZUtleSwgdGhpcy51c2VyU2VhcmNoTGlzdC5maWx0ZXIoKHgpID0+IHtcbiAgICAgIHJldHVybiAheC5yZWFkT25seTtcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaXMgZ29pbmcgdG8gYmUgZGVwcmVjYXRlZC4gVXNlIHNlYXJjaCgpIG1ldGhvZCBpbnN0ZWFkLlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICovXG4gIHB1YmxpYyBhc3luYyBhc3luY0FkdmFuY2VkU2VhcmNoKGV2ZW50PzogYW55KSB7XG4gICAgaWYgKCB0aGlzLnRhYmxlICYmIHRoaXMudGFibGUuY29uZmlnICYmIEFycmF5LmlzQXJyYXkodGhpcy50YWJsZS5jb25maWcuY3JpdGVyaWEpKSB7XG4gICAgICBjb25zdCBxdWVyeSA9IGF3YWl0IHRoaXMuZ2V0UXVlcnkoKTtcbiAgICAgIGlmICh0aGlzLm1lcmdlUXVlcnlQYXJhbXMpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExpc3QgPSBudWxsO1xuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IE9iamVjdC5hc3NpZ24oeyBxOiBudWxsLCBzOiBudWxsIH0sIHRoaXMuZmlsdGVyKTtcbiAgICAgICAgLy8gZW51bWVyYXRlIGNyaXRlcmlhXG4gICAgICAgIHRoaXMudGFibGUuY29uZmlnLmNyaXRlcmlhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHF1ZXJ5UGFyYW1zLCBpdGVtLm5hbWUpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgLy8gc2V0IG51bGwgdmFsdWVcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxdWVyeVBhcmFtcywgaXRlbS5uYW1lLCB7XG4gICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMuX2FjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy50YWJsZS5xdWVyeSAmJiBxdWVyeSAmJiBxdWVyeS5nZXRQYXJhbXMoKVsnJGZpbHRlciddKSB7XG4gICAgICAgIHRoaXMudGFibGUucXVlcnkuc2V0UGFyYW0oJyRmaWx0ZXInLCBxdWVyeS5nZXRQYXJhbXMoKVsnJGZpbHRlciddKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGFibGUucXVlcnkgPSBxdWVyeTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXIpO1xuICAgICAgdGhpcy50YWJsZS5mZXRjaCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZWFyY2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuYXN5bmNBZHZhbmNlZFNlYXJjaCgpLnRoZW4oKCkgPT4ge1xuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFF1ZXJ5KCkge1xuICAgIC8vIG9uIHNpbXBsZSBzZWFyY2ggcmV0dXJuIG51bGxcbiAgICBpZiAodGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoIHRoaXMudGFibGUgJiYgdGhpcy50YWJsZS5jb25maWcgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnRhYmxlLmNvbmZpZy5jcml0ZXJpYSkpIHtcbiAgICAgIGNvbnN0IGV4cHJlc3Npb25zOiBhbnlbXSA9IFtdO1xuICAgICAgY29uc3QgdmFsdWVzID0gYXdhaXQgdGhpcy5fYWR2YW5jZWRTZWFyY2hWYWx1ZVByb3ZpZGVyLmdldFZhbHVlcygpO1xuICAgICAgdGhpcy50YWJsZS5jb25maWcuY3JpdGVyaWEuZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuZmlsdGVyLCB4Lm5hbWUpKSB7XG4gICAgICAgICAgY29uc3QgbmFtZUZpbHRlciA9IHRoaXMuY29udmVydFRvU3RyaW5nKHRoaXMuZmlsdGVyW3gubmFtZV0pO1xuICAgICAgICAgIGlmIChuYW1lRmlsdGVyLmluY2x1ZGVzKCdHTVQnKSkge1xuICAgICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IHRoaXMudHJhbnNmb3JtRGF0ZSh0aGlzLmZpbHRlclt4Lm5hbWVdKTtcbiAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2godGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKHguZmlsdGVyLCB7XG4gICAgICAgICAgICAgIHZhbHVlOiBuZXdEYXRlLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5maWx0ZXJbeC5uYW1lXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2godGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKHguZmlsdGVyLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyW3gubmFtZV0sXG4gICAgICAgICAgICB9LCB2YWx1ZXMpKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxldCBxdWVyeTtcbiAgICAgIGlmIChleHByZXNzaW9ucyAmJiBleHByZXNzaW9ucy5sZW5ndGgpIHtcbiAgICAgICAgLy8gY3JlYXRlIGNsaWVudCBxdWVyeVxuICAgICAgICBxdWVyeSA9IHRoaXMuX2NvbnRleHQubW9kZWwodGhpcy50YWJsZS5jb25maWcubW9kZWwpLmFzUXVlcnlhYmxlKCk7XG4gICAgICAgIHF1ZXJ5LnNldFBhcmFtKCdmaWx0ZXInLCBleHByZXNzaW9ucy5qb2luKCcgYW5kICcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXJ5ID0gdGhpcy5fY29udGV4dC5tb2RlbCh0aGlzLnRhYmxlLmNvbmZpZy5tb2RlbCkuYXNRdWVyeWFibGUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBxdWVyeTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWR2YW5jZWRTZWFyY2goZXZlbnQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmFzeW5jQWR2YW5jZWRTZWFyY2goZXZlbnQpO1xuICB9XG5cbiAgcHVibGljIGNsZWFyKCkge1xuICAgIGlmICh0aGlzLm1lcmdlUXVlcnlQYXJhbXMgJiYgdGhpcy50YWJsZSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IG51bGw7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0geyBxOiBudWxsLCBzOiBudWxsIH07XG4gICAgICAgIC8vIGVudW1lcmF0ZSBjcml0ZXJpYVxuICAgICAgICB0aGlzLnRhYmxlLmNvbmZpZy5jcml0ZXJpYS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChxdWVyeVBhcmFtcywgaXRlbS5uYW1lKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIC8vIHNldCBudWxsIHZhbHVlXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocXVlcnlQYXJhbXMsIGl0ZW0ubmFtZSwge1xuICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAvLyBjbGVhciBmaWx0ZXJcbiAgICAgIHRoaXMuZmlsdGVyID0ge307XG4gICAgICAvLyBjbGVhciBsaXN0XG4gICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IG51bGw7XG4gICAgICAvLyByYWlzZSBmaWx0ZXIgY2hhbmdlIGV2ZW50XG4gICAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHRoaXMuZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdmlldyBzdGF0ZSBvZiBzZWFyY2ggY29udHJvbFxuICAgKi9cbiAgcHVibGljIGdldCB2aWV3U3RhdGUoKTogQWR2YW5jZWRTZWFyY2hWaWV3U3RhdHVzIHtcbiAgICByZXR1cm4ge1xuICAgICAgYWR2YW5jZWRWaWV3OiAhdGhpcy5jb2xsYXBzZWQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTd2l0Y2hlcyB2aWV3IGJldHdlZW4gc2ltcGxlIGFuZCBhZHZhbmNlZCBzZWFyY2hcbiAgICovXG4gIHB1YmxpYyBhc3luYyB0b2dnbGVWaWV3KCkge1xuICAgIHRoaXMuY29sbGFwc2VkID0gIXRoaXMuY29sbGFwc2VkO1xuICAgIC8vIGVtaXQgZXZlbnQgZm9yIHZpZXcgc3RhdHVzIGNoYW5nZVxuICAgIHRoaXMudmlld0NoYW5nZS5lbWl0KHRoaXMudmlld1N0YXRlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgQWN0aW9uTGlua0Zvcm1hdHRlciwgQnV0dG9uRm9ybWF0dGVyLCBEYXRlVGltZUZvcm1hdHRlciwgTGFuZ3VhZ2VGb3JtYXR0ZXIsXG4gIExpbmtGb3JtYXR0ZXIsXG4gIE5lc3RlZFByb3BlcnR5Rm9ybWF0dGVyLCBOZ0NsYXNzRm9ybWF0dGVyLCBTZWxlY3RSb3dGb3JtYXR0ZXIsXG4gIFRlbXBsYXRlRm9ybWF0dGVyLCBUcmFuc2xhdGlvbkZvcm1hdHRlcixcbiAgVHJ1ZUZhbHNlRm9ybWF0dGVyLCBBY3Rpb25CdXR0b25Gb3JtYXR0ZXIsIEFjdGlvblNwbGl0QnV0dG9uRm9ybWF0dGVyLFxufSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmZvcm1hdHRlcnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElBZHZhbmNlZFRhYmxlRm9ybWF0dGVycyB7XG4gIEFjdGlvbkxpbmtGb3JtYXR0ZXI/OiBBY3Rpb25MaW5rRm9ybWF0dGVyO1xuICBCdXR0b25Gb3JtYXR0ZXI/OiBCdXR0b25Gb3JtYXR0ZXI7XG4gIERhdGVUaW1lRm9ybWF0dGVyPzogRGF0ZVRpbWVGb3JtYXR0ZXI7XG4gIExhbmd1YWdlRm9ybWF0dGVyPzogTGFuZ3VhZ2VGb3JtYXR0ZXI7XG4gIExpbmtGb3JtYXR0ZXI/OiBMaW5rRm9ybWF0dGVyO1xuICBOZXN0ZWRQcm9wZXJ0eUZvcm1hdHRlcj86IE5lc3RlZFByb3BlcnR5Rm9ybWF0dGVyO1xuICBOZ0NsYXNzRm9ybWF0dGVyPzogTmdDbGFzc0Zvcm1hdHRlcjtcbiAgU2VsZWN0Um93Rm9ybWF0dGVyPzogU2VsZWN0Um93Rm9ybWF0dGVyO1xuICBUZW1wbGF0ZUZvcm1hdHRlcj86IFRlbXBsYXRlRm9ybWF0dGVyO1xuICBUcmFuc2xhdGlvbkZvcm1hdHRlcj86IFRyYW5zbGF0aW9uRm9ybWF0dGVyO1xuICBUcnVlRmFsc2VGb3JtYXR0ZXI/OiBUcnVlRmFsc2VGb3JtYXR0ZXI7XG4gIEFjdGlvbkJ1dHRvbkZvcm1hdHRlcj86IEFjdGlvbkJ1dHRvbkZvcm1hdHRlcjtcbiAgQWN0aW9uU3BsaXRCdXR0b25Gb3JtYXR0ZXI/OiBBY3Rpb25TcGxpdEJ1dHRvbkZvcm1hdHRlcjtcbn1cbmV4cG9ydCBjb25zdCBGT1JNQVRURVJTOiBJQWR2YW5jZWRUYWJsZUZvcm1hdHRlcnMgPSB7XG4gICAgICBBY3Rpb25MaW5rRm9ybWF0dGVyOiBuZXcgQWN0aW9uTGlua0Zvcm1hdHRlcigpLFxuICAgICAgQnV0dG9uRm9ybWF0dGVyOiBuZXcgQnV0dG9uRm9ybWF0dGVyKCksXG4gICAgICBEYXRlVGltZUZvcm1hdHRlcjogbmV3IERhdGVUaW1lRm9ybWF0dGVyKCksXG4gICAgICBMYW5ndWFnZUZvcm1hdHRlcjogbmV3IExhbmd1YWdlRm9ybWF0dGVyKCksXG4gICAgICBMaW5rRm9ybWF0dGVyOiBuZXcgTGlua0Zvcm1hdHRlcigpLFxuICAgICAgTmVzdGVkUHJvcGVydHlGb3JtYXR0ZXI6IG5ldyBOZXN0ZWRQcm9wZXJ0eUZvcm1hdHRlcigpLFxuICAgICAgTmdDbGFzc0Zvcm1hdHRlcjogbmV3IE5nQ2xhc3NGb3JtYXR0ZXIoKSxcbiAgICAgIFNlbGVjdFJvd0Zvcm1hdHRlcjogbmV3IFNlbGVjdFJvd0Zvcm1hdHRlcigpLFxuICAgICAgVGVtcGxhdGVGb3JtYXR0ZXI6IG5ldyBUZW1wbGF0ZUZvcm1hdHRlcigpLFxuICAgICAgVHJhbnNsYXRpb25Gb3JtYXR0ZXI6IG5ldyBUcmFuc2xhdGlvbkZvcm1hdHRlcigpLFxuICAgICAgVHJ1ZUZhbHNlRm9ybWF0dGVyOiBuZXcgVHJ1ZUZhbHNlRm9ybWF0dGVyKCksXG4gICAgICBBY3Rpb25CdXR0b25Gb3JtYXR0ZXI6IG5ldyBBY3Rpb25CdXR0b25Gb3JtYXR0ZXIoKSxcbiAgICAgIEFjdGlvblNwbGl0QnV0dG9uRm9ybWF0dGVyOiBuZXcgQWN0aW9uU3BsaXRCdXR0b25Gb3JtYXR0ZXIoKSxcbn07XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50LCBBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdCB9IGZyb20gJy4uL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICd0YWJsZS1zaW1wbGUtaGVhZGVyLXRvb2xzJyxcbiAgdGVtcGxhdGU6IGBcbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICBgLFxuICBzdHlsZXM6IFtdXG59KVxuZXhwb3J0IGNsYXNzIFNpbXBsZUhlYWRlclRvb2xzQ29tcG9uZW50IHtcbiAgLy9cbn1cblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtdGFibGUtc2ltcGxlLWhlYWRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1zaW1wbGUtaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbXVxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZVNpbXBsZUhlYWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMudGFibGUpIHtcbiAgICAgIGlmIChjaGFuZ2VzLnRhYmxlLmN1cnJlbnRWYWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGFMb2FkU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgdGhpcy5kYXRhTG9hZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcbiAgICAgIGlmIChjaGFuZ2VzLnRhYmxlLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLnRhYmxlLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgdGhpcy5kYXRhTG9hZFN1YnNjcmlwdGlvbiA9IGNoYW5nZXMudGFibGUuY3VycmVudFZhbHVlLmxvYWQuc3Vic2NyaWJlKChkYXRhOiBBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdCkgPT4ge1xuICAgICAgICAgIHRoaXMucmVjb3Jkc1RvdGFsID0gZGF0YS5yZWNvcmRzVG90YWw7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhTG9hZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5kYXRhTG9hZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpIHRhYmxlPzogQWR2YW5jZWRUYWJsZUNvbXBvbmVudDtcbiAgcHVibGljIHJlY29yZHNUb3RhbD86IG51bWJlcjtcbiAgcHVibGljIGRhdGFMb2FkU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vXG4gIH1cblxufVxuIiwiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLCBPdXRwdXQsIEV2ZW50RW1pdHRlcixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQnO1xuXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZU5vdE51bGxFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ0FkdmFuY2VkIHRhYmxlIGNvbXBvbmVudCBjYW5ub3QgYmUgZW1wdHkgYXQgdGhpcyBjb250ZXh0LicpO1xuICB9XG59XG5cbkBEaXJlY3RpdmUoXG4ge1xuICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBkaXJlY3RpdmUtc2VsZWN0b3JcbiAgIHNlbGVjdG9yOiAnW3RhYmxlRWRpdG9yXScsXG4gfSxcbilcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFRhYmxlRWRpdG9yRGlyZWN0aXZlIHtcblxuICBwdWJsaWMgZGlydHkgPSBmYWxzZTtcbiAgQE91dHB1dCgpIHB1YmxpYyBkaXJ0eUNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPihmYWxzZSk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0YWJsZTogQWR2YW5jZWRUYWJsZUNvbXBvbmVudCkge1xuICAgIC8vXG4gIH1cblxuICAvKipcbiAgICogQWRkIHJvd3MgdG8gdGFibGUgYW5kIG1hcmsgdGhlbSBhcyBhZGRlZCByb3dzXG4gICAqL1xuICBwdWJsaWMgYWRkKC4uLmFkZEl0ZW1zOiBhbnlbXSkge1xuICAgIGlmICh0aGlzLnRhYmxlID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBBZHZhbmNlZFRhYmxlTm90TnVsbEVycm9yKCk7XG4gICAgfVxuICAgIC8vIGRlY29yYXRlIGl0ZW1zXG4gICAgY29uc3Qga2V5ID0gdGhpcy50YWJsZS5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eSB8fCB0aGlzLnRhYmxlLmNvbmZpZy5jb2x1bW5zWzBdLm5hbWUgfHwgJyc7XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGFkZEl0ZW1zKSB7XG4gICAgICBsZXQgdHIgPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCc6aGFzKGlucHV0W2RhdGEtaWQ9XCInICsgZWxlbWVudFtrZXldICsgJ1wiXSknKS5ub2RlcygpLnRvJCgpO1xuICAgICAgaWYgKHRyLmhhc0NsYXNzKCdyZW1vdmVkJykpIHtcbiAgICAgICAgdHIudG9nZ2xlQ2xhc3MoJ3JlbW92ZWQgdGV4dC1ncmF5LTQwMCB0ZXh0LWRlY29yYXRpb24tbGluZS10aHJvdWdoJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzLmFkZChbZWxlbWVudF0pO1xuICAgICAgICB0ciA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJzpoYXMoaW5wdXRbZGF0YS1pZD1cIicgKyBlbGVtZW50W2tleV0gKyAnXCJdKScpLm5vZGVzKCkudG8kKCk7XG4gICAgICAgIHRyLnRvZ2dsZUNsYXNzKCdhZGRlZCBmb250LXdlaWdodC1ib2xkIHRleHQtc3VjY2VzcycpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnRhYmxlLmRhdGFUYWJsZS5kcmF3KCk7XG4gICAgLy8gZmluZCByZW1vdmVkXG4gICAgY29uc3QgcmVtb3ZlZExlbmd0aCA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJy5yZW1vdmVkJylbMF0ubGVuZ3RoO1xuICAgIC8vIGZpbmQgYWRkZWRcbiAgICBjb25zdCBhZGRlZExlbmd0aCA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJy5hZGRlZCcpWzBdLmxlbmd0aDtcbiAgICAvLyBhbmQgZW1pdCBldmVudFxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygpLmRhdGEoKTtcbiAgICB0aGlzLnRhYmxlLmxvYWQuZW1pdCh7XG4gICAgICBkYXRhOiBpdGVtcyxcbiAgICAgIHJlY29yZHNGaWx0ZXJlZDogaXRlbXMubGVuZ3RoIC0gcmVtb3ZlZExlbmd0aCxcbiAgICAgIHJlY29yZHNUb3RhbDogaXRlbXMubGVuZ3RoIC0gcmVtb3ZlZExlbmd0aCxcbiAgICB9KTtcbiAgICB0aGlzLmRpcnR5ID0gKHJlbW92ZWRMZW5ndGggPiAwIHx8IGFkZGVkTGVuZ3RoID4gMCk7XG4gICAgdGhpcy5kaXJ0eUNoYW5nZS5lbWl0KHRoaXMuZGlydHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcmtzIHJvd3MgYXMgcmVtb3ZlZCByb3dzXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlKC4uLnJlbW92ZUl0ZW1zOiBhbnlbXSkge1xuICAgIGlmICh0aGlzLnRhYmxlID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBBZHZhbmNlZFRhYmxlTm90TnVsbEVycm9yKCk7XG4gICAgfVxuICAgIC8vIGdldCBrZXlcbiAgICBjb25zdCBrZXkgPSB0aGlzLnRhYmxlLmNvbmZpZy5jb2x1bW5zWzBdLnByb3BlcnR5IHx8IHRoaXMudGFibGUuY29uZmlnLmNvbHVtbnNbMF0ubmFtZSB8fCAnJztcbiAgICAvLyBsb29wIGl0ZW1zXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHJlbW92ZUl0ZW1zKSB7XG4gICAgICAgIGNvbnN0IHRyID0gdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygnOmhhcyhpbnB1dFtkYXRhLWlkPVwiJyArIGVsZW1lbnRba2V5XSArICdcIl0pJykubm9kZXMoKS50byQoKTtcbiAgICAgICAgLy8gaWYgcm93IGlzIG1hcmtlZCBhcyBhZGRlZFxuICAgICAgICBpZiAodHIuaGFzQ2xhc3MoJ2FkZGVkJykpIHtcbiAgICAgICAgICAvLyByZW1vdmUgdGhpcyBkaXJ0eSByb3dcbiAgICAgICAgICB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKHRyKS5yZW1vdmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBvdGhlcndpc2UgdW5tYXJrZWQgcm93XG4gICAgICAgICAgdHIudG9nZ2xlQ2xhc3MoJ3JlbW92ZWQgdGV4dC1ncmF5LTQwMCB0ZXh0LWRlY29yYXRpb24tbGluZS10aHJvdWdoJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2hlY2sgaWYgaXRlbSBpcyBzZWxlY3RlZFxuICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gdGhpcy50YWJsZS5zZWxlY3RlZC5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICByZXR1cm4gaXRlbVtrZXldID09PSBlbGVtZW50W2tleV07XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBhbmQgcmVtb3ZlIGl0IGZyb20gc2VsZWN0ZWQgY29sbGVjdGlvblxuICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCA+PSAwKSB7XG4gICAgICAgICAgdGhpcy50YWJsZS5zZWxlY3RlZC5zcGxpY2Uoc2VsZWN0ZWRJbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIHJlLWRyYXcgdGFibGVcbiAgICB0aGlzLnRhYmxlLmRhdGFUYWJsZS5kcmF3KCk7XG4gICAgICAvLyBnZXQgbnVtYmVyIG9mIHRhYmxlIGl0ZW1zXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCkuZGF0YSgpO1xuICAgICAgLy8gZ2V0IG51bWJlciBvZiByZW1vdmVkIGl0ZW1zXG4gICAgY29uc3QgcmVtb3ZlZExlbmd0aCA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJy5yZW1vdmVkJylbMF0ubGVuZ3RoO1xuICAgICAgLy8gZ2V0IG51bWJlciBvZiBhZGRlZCBpdGVtc1xuICAgIGNvbnN0IGFkZGVkTGVuZ3RoID0gdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygnLmFkZGVkJylbMF0ubGVuZ3RoO1xuICAgICAgLy8gcmVmcmVzaFxuICAgIHRoaXMudGFibGUubG9hZC5lbWl0KHtcbiAgICAgICAgZGF0YTogaXRlbXMsXG4gICAgICAgIHJlY29yZHNGaWx0ZXJlZDogaXRlbXMubGVuZ3RoIC0gcmVtb3ZlZExlbmd0aCxcbiAgICAgICAgcmVjb3Jkc1RvdGFsOiBpdGVtcy5sZW5ndGggLSByZW1vdmVkTGVuZ3RoLFxuICAgICAgfSk7XG4gICAgdGhpcy5kaXJ0eSA9IChyZW1vdmVkTGVuZ3RoID4gMCB8fCBhZGRlZExlbmd0aCA+IDApO1xuICAgIHRoaXMuZGlydHlDaGFuZ2UuZW1pdCh0aGlzLmRpcnR5KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQoaXRlbXM6IGFueVtdKSB7XG4gICAgaWYgKHRoaXMudGFibGUgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEFkdmFuY2VkVGFibGVOb3ROdWxsRXJyb3IoKTtcbiAgICB9XG4gICAgLy8gY2xlYXIgcm93c1xuICAgIHRoaXMudGFibGUuc2VsZWN0ZWQgPSBbXTtcbiAgICB0aGlzLnRhYmxlLmRhdGFUYWJsZS5jbGVhcigpO1xuICAgIC8vIHNldCBpdGVtc1xuICAgIHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MuYWRkKGl0ZW1zKS5kcmF3KCk7XG4gICAgdGhpcy50YWJsZS5sb2FkLmVtaXQoe1xuICAgICAgZGF0YTogaXRlbXMsXG4gICAgICByZWNvcmRzRmlsdGVyZWQ6IGl0ZW1zLmxlbmd0aCxcbiAgICAgIHJlY29yZHNUb3RhbDogaXRlbXMubGVuZ3RoLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuZG8gY2hhbmdlc1xuICAgKi9cbiAgcHVibGljIHVuZG8oKSB7XG4gICAgaWYgKHRoaXMudGFibGUgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEFkdmFuY2VkVGFibGVOb3ROdWxsRXJyb3IoKTtcbiAgICB9XG4gICAgLy8gcmVzZXQgcmVtb3ZlZCByb3dzXG4gICAgdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygnLnJlbW92ZWQnKS5ub2RlcygpLnRvJCgpLnRvZ2dsZUNsYXNzKCdyZW1vdmVkIHRleHQtZ3JheS00MDAgdGV4dC1kZWNvcmF0aW9uLWxpbmUtdGhyb3VnaCcpO1xuICAgIC8vIHJlbW92ZSBhZGRlZCByb3dzXG4gICAgdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygnLmFkZGVkJykucmVtb3ZlKCk7XG4gICAgLy8gY2xlYXIgc2VsZWN0ZWQgaXRlbXNcbiAgICB0aGlzLnRhYmxlLnNlbGVjdGVkID0gW107XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCkuZGF0YSgpO1xuICAgIHRoaXMudGFibGUuZGF0YVRhYmxlLmRyYXcoKTtcbiAgICB0aGlzLnRhYmxlLmxvYWQuZW1pdCh7XG4gICAgICBkYXRhOiBpdGVtcyxcbiAgICAgIHJlY29yZHNGaWx0ZXJlZDogaXRlbXMubGVuZ3RoLFxuICAgICAgcmVjb3Jkc1RvdGFsOiBpdGVtcy5sZW5ndGgsXG4gICAgfSk7XG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIHRoaXMuZGlydHlDaGFuZ2UuZW1pdCh0aGlzLmRpcnR5KTtcbiAgfVxuXG4gIHB1YmxpYyByb3dzKCkge1xuICAgIGlmICh0aGlzLnRhYmxlID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBBZHZhbmNlZFRhYmxlTm90TnVsbEVycm9yKCk7XG4gICAgfVxuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJzpub3QoLnJlbW92ZWQpJykuZGF0YSgpKTtcbiAgfVxuXG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBbmd1bGFyRGF0YUNvbnRleHQgfSBmcm9tICdAdGhlbW9zdC9hbmd1bGFyJztcbmltcG9ydCB7IFRlbXBsYXRlUGlwZSB9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRBZ2dyZWdhdG9yU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfY29udGV4dDogQW5ndWxhckRhdGFDb250ZXh0LFxuICAgIHByaXZhdGUgX3RlbXBsYXRlOiBUZW1wbGF0ZVBpcGVcbiAgKSB7IH1cblxuICAvKipcbiAgICpcbiAgICogRm9ybWF0cyBhbmQgZXhlY3V0ZXMgdGhlIGRhdGEgcXVlcnlcbiAgICpcbiAgICogQHBhcmFtIG1vZGVsIFRoZSB0YXJnZXQgbW9kZWxcbiAgICogQHBhcmFtIGZpeGVkUGFyYW1zIFBhaXJzIG9mIHBhcmFtZXRlcnMgdG8gYWx3YXlzIGJlIGFwcGxpZWRcbiAgICogQHBhcmFtIHF1ZXJ5U3RhdGVtZW50IFRoZSBkZWZhdWx0IHF1ZXJ5IHRvIHVzZSBmb3IgZmV0Y2hpbmcgdGhlIGRhdGEgKGUuZy4gZXhwYW5kcyBldGMpXG4gICAqIEBwYXJhbSBmaWx0ZXJzIEEgbGlzdCBvZiBmaWx0ZXIgZXhwcmVzc2lvbnMgdG8gYXBwZW5kIGF0IHRoZSBxdWVyeVxuICAgKiBAcGFyYW0gc2VhcmNoVGVtcGxhdGUgVGhlIHRlbXBsYXRlIHRvIHVzZSBmb3Igc2VhcmNoaW5nIGV4cHJlc3Npb25zXG4gICAqIEBwYXJhbSBzZWFyY2hWYWx1ZSBUaGUgdmFsdWUgb2YgdGhlIHVzZXIgc2VhcmNoXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSByZXNwb25zZSBvZiB0aGUgcXVlcnkgZXhlY3V0aW9uXG4gICAqL1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gIGFzeW5jIGZldGNoRGF0YShtb2RlbDogc3RyaW5nLCBmaXhlZFBhcmFtczogb2JqZWN0LCBxdWVyeVN0YXRlbWVudDogc3RyaW5nID0gJycsIGZpbHRlcnM6IHN0cmluZ1tdLCBzZWFyY2hUZW1wbGF0ZT86IHN0cmluZywgc2VhcmNoVmFsdWU/OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5fY29udGV4dC5tb2RlbChtb2RlbCkuYXNRdWVyeWFibGUoKTtcblxuICAgIGlmICghZml4ZWRQYXJhbXMgfHwgdHlwZW9mIGZpeGVkUGFyYW1zICE9PSAnb2JqZWN0Jykge1xuICAgICAgZml4ZWRQYXJhbXMgPSB7fTtcbiAgICB9XG5cbiAgICBsZXQgZmlsdGVyRXhwcmVzc2lvbnM6IGFueVtdID0gW107XG5cbiAgICBpZiAoZml4ZWRQYXJhbXMpIHtcbiAgICAgIGZvciAoY29uc3QgcGFyYW0gb2YgT2JqZWN0LmtleXMoZml4ZWRQYXJhbXMpKSB7XG4gICAgICAgIGZpbHRlckV4cHJlc3Npb25zLnB1c2goYCR7cGFyYW19IGVxICR7Zml4ZWRQYXJhbXNbcGFyYW1dfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmaWx0ZXJzICYmIEFycmF5LmlzQXJyYXkoZmlsdGVycykpIHtcbiAgICAgIGZpbHRlckV4cHJlc3Npb25zID0gW1xuICAgICAgICAuLi5maWx0ZXJFeHByZXNzaW9ucyxcbiAgICAgICAgLi4uZmlsdGVyc1xuICAgICAgXTtcbiAgICB9XG5cbiAgICBpZiAoc2VhcmNoVGVtcGxhdGUgJiYgc2VhcmNoVmFsdWUpIHtcbiAgICAgIGxldCBldmFsdWF0ZWRTZWFyY2g7XG4gICAgICBpZiAoL15cIiguKj8pXCIkLy50ZXN0KHNlYXJjaFZhbHVlKSkgeyAvLyB2YWxpZGF0ZSBzZWFyY2ggdGV4dCBpbiBkb3VibGUgcXVvdGVzXG4gICAgICAgIGV2YWx1YXRlZFNlYXJjaCA9IHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybShzZWFyY2hUZW1wbGF0ZSwge1xuICAgICAgICAgIC4uLmZpeGVkUGFyYW1zLFxuICAgICAgICAgIHRleHQ6IHNlYXJjaFZhbHVlLnJlcGxhY2UoL15cInxcIiQvZywgJycpXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdHJ5IHRvIHNwbGl0IHdvcmRzXG4gICAgICAgIGNvbnN0IHdvcmRzID0gc2VhcmNoVmFsdWUuc3BsaXQoJyAnKTtcbiAgICAgICAgLy8gam9pbiB3b3JkcyB0byBhIHNpbmdsZSBmaWx0ZXJcbiAgICAgICAgZXZhbHVhdGVkU2VhcmNoID0gd29yZHMubWFwKHdvcmQgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZS50cmFuc2Zvcm0oc2VhcmNoVGVtcGxhdGUsIHtcbiAgICAgICAgICAgIC4uLmZpeGVkUGFyYW1zLFxuICAgICAgICAgICAgdGV4dDogd29yZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KS5qb2luKCcgYW5kICcpO1xuXG4gICAgICB9XG4gICAgICBmaWx0ZXJFeHByZXNzaW9ucy5wdXNoKGV2YWx1YXRlZFNlYXJjaCk7XG4gICAgfVxuXG4gICAgcXVlcnkuc2V0UGFyYW0oJyRmaWx0ZXInLCBmaWx0ZXJFeHByZXNzaW9ucy5qb2luKCdhbmQnKSk7XG4gICAgcmV0dXJuIHF1ZXJ5LmV4cGFuZChxdWVyeVN0YXRlbWVudCkudGFrZSgtMSkuZ2V0SXRlbXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBGb3JtYXRzIHRoZSByZWNlaXZlZCBkYXRhIHRvIHVzZSBmbGF0IGtleXNcbiAgICpcbiAgICogQHBhcmFtIGNvbmZpZyBUaGUgYXBwbGllZCBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSBkYXRhIFRoZSByYXcgZGF0YVxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgZmxhdC1rZXkgb2JqZWN0IGxpc3RcbiAgICpcbiAgICovXG4gIGZvcm1hdERhdGEoY29uZmlnLCBkYXRhKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBkYXRhLm1hcCgoZW50cnkpID0+IHtcbiAgICAgICAgaWYgKGVudHJ5LnN1Yml0ZW1zICYmIEFycmF5LmlzQXJyYXkoZW50cnkuc3ViaXRlbXMpKSB7XG4gICAgICAgICAgZW50cnkuc3ViaXRlbXMgPSB0aGlzLmZvcm1hdERhdGEoY29uZmlnLCBlbnRyeS5zdWJpdGVtcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW50cnlPYmplY3QgPSB7fSBhcyBhbnk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlnLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBrZXlzID0gY29uZmlnLmNvbHVtbnNbaV0ubmFtZS5zcGxpdCgnLycpO1xuICAgICAgICAgIGxldCBoZWxwZXJPYmplY3QgPSBlbnRyeVtrZXlzWzBdXTtcblxuICAgICAgICAgIGlmIChoZWxwZXJPYmplY3QgJiYga2V5cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tc2hhZG93ZWQtdmFyaWFibGVcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBpZiAoaGVscGVyT2JqZWN0ID09PSB1bmRlZmluZWQgfHwgaGVscGVyT2JqZWN0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaGVscGVyT2JqZWN0ID0gaGVscGVyT2JqZWN0W2tleXNbaV1dICE9PSB1bmRlZmluZWQgJiYgaGVscGVyT2JqZWN0W2tleXNbaV1dICE9PSBudWxsXG4gICAgICAgICAgICAgICAgICA/IGhlbHBlck9iamVjdFtrZXlzW2ldXVxuICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlbnRyeU9iamVjdFtjb25maWcuY29sdW1uc1tpXS5uYW1lXSA9IGhlbHBlck9iamVjdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbnRyeS5zdWJpdGVtcykge1xuICAgICAgICAgIGVudHJ5T2JqZWN0LnN1Yml0ZW1zID0gZW50cnkuc3ViaXRlbXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZW50cnlPYmplY3Q7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uRGVzdHJveSwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBZHZhbmNlZEFnZ3JlZ2F0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWR2YW5jZWQtYWdncmVnYXRvci9hZHZhbmNlZC1hZ2dyZWdhdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWR2YW5jZWRBZ2dyZWdhdG9yQ29uZmlnLCBBZHZhbmNlZEFnZ3JlZ2F0b3JGaWx0ZXJzIH0gZnJvbSAnLi4vLi4vYWR2YW5jZWQtYWdncmVnYXRvcic7XG5pbXBvcnQgeyBMb2FkaW5nU2VydmljZSB9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcblxuLyoqXG4gKlxuICogXG4gKiAgQGNsYXNzZGVzYyBBbiBhZHZhbmNlZCBsaXN0IHdpdGggdGhlIGNhcGFiaWxpdHkgb2YgYWdncmVnYXRlIGRhdGEgYmFzZWQgb24gY29uZmlndXJhYmxlIGZpbHRlcnNcbiAqXG4gKi9cblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtYWdncmVnYXRvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZHZhbmNlZC1hZ2dyZWdhdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkQWdncmVnYXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBwcml2YXRlIF9jb25maWc/OiBBZHZhbmNlZEFnZ3JlZ2F0b3JDb25maWc7XG4gIHByaXZhdGUgX2FnZ3JlZ2F0b3JzO1xuICBwcml2YXRlIF9wb3N0UHJvY2Vzc29ycztcblxuICBwdWJsaWMgYm9keTtcbiAgcHVibGljIGdyb3VwczogYW55W10gPSBbXTtcblxuICBASW5wdXQoJ2NvbmZpZycpXG4gIHB1YmxpYyBzZXQgY29uZmlnKHZhbHVlOiBBZHZhbmNlZEFnZ3JlZ2F0b3JDb25maWcpIHtcbiAgICB0aGlzLl9jb25maWcgPSB2YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgnYWdncmVnYXRvcnMnKVxuICBwdWJsaWMgc2V0IGFnZ3JlZ2F0b3JzKHZhbHVlKSB7XG4gICAgdGhpcy5fYWdncmVnYXRvcnMgPSB2YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgncG9zdFByb2Nlc3NvcnMnKVxuICBwdWJsaWMgc2V0IHBvc3RQcm9jZXNzb3JzKHZhbHVlKSB7XG4gICAgdGhpcy5fcG9zdFByb2Nlc3NvcnMgPSB2YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgncGFyYW1zJykgcGFyYW1zO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8taW5wdXQtcmVuYW1lXG4gIEBJbnB1dCgnc2VsZWN0ZWRHcm91cHMnKSBzZWxlY3RlZEdyb3VwcyQ7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1pbnB1dC1yZW5hbWVcbiAgQElucHV0KCdmaWx0ZXJzJykgZmlsdGVycyQ7XG4gIEBJbnB1dCgnc2VhcmNoRXhwcmVzc2lvbicpIHNlYXJjaEV4cHJlc3Npb24/OiBzdHJpbmc7XG5cbiAgQE91dHB1dCgpIGV2ZW50SGFuZGxlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBfYWR2YW5jZWRBZ2dyZWdhdG9yU2VydmljZTogQWR2YW5jZWRBZ2dyZWdhdG9yU2VydmljZSxcbiAgICBwcml2YXRlIF9sb2FkaW5nU2VydmljZTogTG9hZGluZ1NlcnZpY2VcbiAgKSB7IH1cblxuICBwdWJsaWMgZ2V0IGNvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnIGFzIEFkdmFuY2VkQWdncmVnYXRvckNvbmZpZztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYWdncmVnYXRvcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FnZ3JlZ2F0b3JzO1xuICB9XG5cbiAgcHVibGljIGdldCBwb3N0UHJvY2Vzc29ycygpIHtcbiAgICByZXR1cm4gdGhpcy5fcG9zdFByb2Nlc3NvcnM7XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBzJC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgIHRoaXMuZ3JvdXBzID0gZGF0YTtcbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5maWx0ZXJzJC5zdWJzY3JpYmUoYXN5bmMgKGZpbHRlcnM6IEFkdmFuY2VkQWdncmVnYXRvckZpbHRlcnMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZmV0Y2goZmlsdGVycyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwcyQudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmZpbHRlcnMkLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogUmV0cmlldmVzIHRoZSBkYXRhXG4gICAqXG4gICAqL1xuICBhc3luYyBmZXRjaChmaWx0ZXJzOiBBZHZhbmNlZEFnZ3JlZ2F0b3JGaWx0ZXJzKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX2xvYWRpbmdTZXJ2aWNlLnNob3dMb2FkaW5nKCk7XG4gICAgICBsZXQgZGF0YSA9IGF3YWl0IHRoaXMuX2FkdmFuY2VkQWdncmVnYXRvclNlcnZpY2UuZmV0Y2hEYXRhKHRoaXMuY29uZmlnLm1vZGVsLFxuICAgICAgICB0aGlzLnBhcmFtcyxcbiAgICAgICAgdGhpcy5jb25maWcucXVlcnksXG4gICAgICAgIGZpbHRlcnMuZmlsdGVycyxcbiAgICAgICAgdGhpcy5zZWFyY2hFeHByZXNzaW9uLFxuICAgICAgICBmaWx0ZXJzLnRleHRcbiAgICAgICk7XG5cbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICAgIGlmICh0aGlzLnBvc3RQcm9jZXNzb3JzICYmIE9iamVjdC5rZXlzKHRoaXMucG9zdFByb2Nlc3NvcnMpLmxlbmd0aCA+IDAgJiYgdGhpcy5jb25maWcucG9zdFByb2Nlc3NvcnMgJiYgdGhpcy5jb25maWcucG9zdFByb2Nlc3NvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29uZmlnLnBvc3RQcm9jZXNzb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgZGF0YSA9IGF3YWl0IHRoaXMucG9zdFByb2Nlc3NvcnNbdGhpcy5jb25maWcucG9zdFByb2Nlc3NvcnNbaV0ubmFtZV0oZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5ib2R5ID0gdGhpcy5fYWR2YW5jZWRBZ2dyZWdhdG9yU2VydmljZS5mb3JtYXREYXRhKHRoaXMuY29uZmlnLCBkYXRhKTtcbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9sb2FkaW5nU2VydmljZS5oaWRlTG9hZGluZygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBUcmlnZ2VycyB0aGUgZXZlbnQgaGFuZGxlciBldmVudFxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IGRhdGFcbiAgICpcbiAgICovXG4gIG9uQWN0aW9uRXZlbnQoZXZlbnQpIHtcbiAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0KGV2ZW50KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGVtcGxhdGVQaXBlfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5cbmVudW0gTGVuZ3RocyB7XG4gIFhMPSAneGwnLFxuICBMRz0gJ2xnJyxcbiAgTUQ9ICdtZCcsXG4gIFNNPSAnc20nLFxuICBYUz0gJ3hzJ1xufVxuXG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLWFnZ3JlZ2F0b3ItbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZHZhbmNlZC1hZ2dyZWdhdG9yLWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkQWdncmVnYXRvckxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkge0FkdmFuY2VkQWdncmVnYXRvckNvbmZpZ30gY29uZmlnIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdCB0byB1c2VcbiAgICovXG4gIEBJbnB1dCgpIGNvbmZpZzogYW55O1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkge0FycmF5PEFycmF5PGFueT4+fSBib2R5IFRoZSBsaXN0IG9mIGRhdGEgZW50cmllcyB0byBzaG93IGFzIHRoZSBsaXN0IGJvZHlcbiAgICovXG4gIEBJbnB1dCgpIGJvZHk7XG5cbiAgQE91dHB1dCgpIGNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfdGVtcGxhdGU6IFRlbXBsYXRlUGlwZSkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jb25maWcuY29sdW1ucy5mb3JFYWNoKHggPT4ge1xuICAgICAgeC5sZW5ndGggPSBPYmplY3QudmFsdWVzKExlbmd0aHMpLmluY2x1ZGVzKHgubGVuZ3RoKSA/IHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybShgc2lzLS1saXN0LWdyb3VwLWl0ZW1fJHt4Lmxlbmd0aH1fY29sdW1uYCwgeCApIDpcbiAgICAgICAgIXgubGVuZ3RoID8gJ3Npcy0tbGlzdC1ncm91cC1pdGVtX3NtX2NvbHVtbicgOiB4Lmxlbmd0aCA7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogVHJpZ2dlcnMgdGhlIG91dHB1dCBldmVudCBlbWl0dGVyXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBldmVudCBhcyBpdCdzIGRlY2xhcmVkIGluIHRoZSBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSBpdGVtIFRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBpdGVtXG4gICAqIH1cbiAgICovXG4gIGNhbGxDYWxsYmFjayh0eXBlOiBzdHJpbmcsIGRhdGE6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY2xpY2tFdmVudC5lbWl0KHtcbiAgICAgIHR5cGUsXG4gICAgICBkYXRhXG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JvdXRlck1vZGFsT2tDYW5jZWx9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uL3JvdXRpbmcnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50fSBmcm9tICcuLi9hZHZhbmNlZC10YWJsZS1tb2RhbC9hZHZhbmNlZC10YWJsZS1tb2RhbC1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQge0FkdmFuY2VkRm9ybUNvbXBvbmVudH0gZnJvbSAnQHVuaXZlcnNpcy9mb3Jtcyc7XG5pbXBvcnQge0xvYWRpbmdTZXJ2aWNlLCBNb2RhbFNlcnZpY2V9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWRkLWl0ZW1zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkZC1pdGVtcy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQWRkSXRlbXNDb21wb25lbnQgZXh0ZW5kcyBSb3V0ZXJNb2RhbE9rQ2FuY2VsIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIHB1YmxpYyBsb2FkaW5nID0gZmFsc2U7XG4gIHB1YmxpYyBsYXN0RXJyb3I7XG4gIEBJbnB1dCgpIGV4ZWN1dGU/OiBPYnNlcnZhYmxlPGFueT47XG4gIEBJbnB1dCgpIGl0ZW1zOiBBcnJheTxhbnk+ID0gW107XG4gIEBJbnB1dCgpIHRhcmdldDogYW55O1xuICAvLyBASW5wdXQoKSBzZWxlY3RlZDogYW55O1xuICBASW5wdXQoKSB0YWJsZUNvbmZpZ3VyYXRpb246IGFueTtcbiAgQElucHV0KCkgZm9ybU5hbWU6IGFueTtcbiAgQElucHV0KCkgbWVzc2FnZXM6IEFycmF5PGFueT4gPSBbXTtcbiAgQFZpZXdDaGlsZCgnZm9ybUNvbXBvbmVudCcpIGZvcm1Db21wb25lbnQ/OiBBZHZhbmNlZEZvcm1Db21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdENvbXBvbmVudCcpIHNlbGVjdENvbXBvbmVudD86IEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQ7XG4gIHByaXZhdGUgZm9ybUxvYWRTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZm9ybUNoYW5nZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBzZWxlY3RlZFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihyb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgICAgICAgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9tb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfbG9hZGluZ1NlcnZpY2U6IExvYWRpbmdTZXJ2aWNlKSB7XG4gICAgc3VwZXIocm91dGVyLCBhY3RpdmF0ZWRSb3V0ZSk7XG4gICAgLy8gc2V0IG1vZGFsIHNpemVcbiAgICB0aGlzLm1vZGFsQ2xhc3MgPSAnbW9kYWwtbGcnO1xuICAgIHRoaXMub2tCdXR0b25EaXNhYmxlZCA9IHRydWU7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RDb21wb25lbnQgJiYgdGhpcy5zZWxlY3RDb21wb25lbnQuYWR2YW5jZWRUYWJsZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFN1YnNjcmlwdGlvbiA9IHRoaXMuc2VsZWN0Q29tcG9uZW50LmFkdmFuY2VkVGFibGUuc2VsZWN0ZWRJdGVtcy5zdWJzY3JpYmUoKGl0ZW1zKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmZvcm1OYW1lID09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLm9rQnV0dG9uRGlzYWJsZWQgPSBpdGVtcy5sZW5ndGggPT09IDA7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5mb3JtTmFtZSAhPSBudWxsICYmIHRoaXMuZm9ybUNvbXBvbmVudCkge1xuICAgICAgdGhpcy5mb3JtQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5mb3JtQ29tcG9uZW50LmZvcm0uY2hhbmdlLnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV2ZW50LCAnaXNWYWxpZCcpKSB7XG4gICAgICAgICAgLy8gZW5hYmxlIG9yIGRpc2FibGUgYnV0dG9uIGJhc2VkIG9uIGZvcm0gc3RhdHVzXG4gICAgICAgICAgdGhpcy5va0J1dHRvbkRpc2FibGVkID0gKCFldmVudC5pc1ZhbGlkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGFyZ2V0KSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnRhcmdldDtcbiAgICB9XG4gIH1cblxuICBjYW5jZWwoKTogUHJvbWlzZTxhbnk+IHtcbiAgICB0aGlzLmNsZWFyTWVzc2FnZXMoKTtcbiAgICBpZiAodGhpcy5sb2FkaW5nKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIC8vIGNsb3NlXG4gICAgaWYgKHRoaXMuX21vZGFsU2VydmljZS5tb2RhbFJlZikge1xuICAgICAgcmV0dXJuIHRoaXMuX21vZGFsU2VydmljZS5tb2RhbFJlZi5oaWRlKCk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvcm1Mb2FkU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmZvcm1Mb2FkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmZvcm1DaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZm9ybUNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3RlZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zZWxlY3RlZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gICAgLy8gZ2V0IGZvcm0gZGF0YVxuICBwcml2YXRlIGV4ZWN1dGVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHVibGljIGdldCBmb3JtRGF0YSgpOiBhbnkge1xuICAgICAgaWYgKHRoaXMuZm9ybUNvbXBvbmVudCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQgJiYgdGhpcy5mb3JtQ29tcG9uZW50LmZvcm0uZm9ybWlvLmRhdGE7XG4gICAgfVxuXG4gICAgb2soKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuY2xlYXJNZXNzYWdlcygpO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RDb21wb25lbnQgPT0gbnVsbCB8fCB0aGlzLnNlbGVjdENvbXBvbmVudC5hZHZhbmNlZFRhYmxlID09IG51bGwgfHwgdGhpcy5leGVjdXRlID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmxhc3RFcnJvciA9IG51bGw7XG4gICAgICAgICAgLy8gc2V0IGNvdXJzZXNcbiAgICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5zZWxlY3RDb21wb25lbnQuYWR2YW5jZWRUYWJsZS5zZWxlY3RlZDtcbiAgICAgICAgICAvLyBleGVjdXRlIGFkZFxuICAgICAgICAgIHRoaXMuZXhlY3V0ZVN1YnNjcmlwdGlvbiA9IHRoaXMuZXhlY3V0ZS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5leGVjdXRlU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgIHRoaXMuZXhlY3V0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY2xvc2UgbW9kYWxcbiAgICAgICAgICAgIGlmICh0aGlzLl9tb2RhbFNlcnZpY2UubW9kYWxSZWYpIHtcbiAgICAgICAgICAgICAgdGhpcy5fbW9kYWxTZXJ2aWNlLm1vZGFsUmVmLmhpZGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKG51bGwpO1xuICAgICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gZW5zdXJlIHRoYXQgbG9hZGluZyBpcyBoaWRkZW5cbiAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdTZXJ2aWNlLmhpZGVMb2FkaW5nKCk7XG4gICAgICAgICAgICAvLyBzZXQgbGFzdCBlcnJvclxuICAgICAgICAgICAgdGhpcy5sYXN0RXJyb3IgPSBlcnI7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5fbG9hZGluZ1NlcnZpY2UuaGlkZUxvYWRpbmcoKTtcbiAgICAgIHRoaXMubGFzdEVycm9yID0gZXJyO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2hhbmdlKCRldmVudDogYW55KSB7fVxuXG4gIGNsZWFyTWVzc2FnZXMoKSB7XG4gICAgdGhpcy5tZXNzYWdlcyA9IFtdO1xuICB9XG5cbiAgb25GaWx0ZXJDaGFuZ2UoZXZlbnQ6ICB7IG5hbWU6IHN0cmluZywgZW1pdDogYm9vbGVhbiB9KSB7fVxufVxuIiwiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqXG4gKlxuICogQGNsYXNzZGVzYyBHaXZlbiBhIGxpc3Qgb2YgaXRlbXMgcnVucyBhIHVzZXIgZGVmaW5lZCBmdW5jdGlvbiBhZ2FpbnN0IHRoYXQgbGlzdFxuICpcbiAqL1xuXG5AUGlwZSh7XG4gIG5hbWU6ICdjYWxsQWdncmVnYXRvcidcbn0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRBZ2dyZWdhdG9yUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gIC8qKlxuICAgKlxuICAgKiBAb3ZlcnJpZGVcbiAgICpcbiAgICogQHBhcmFtIGl0ZW1zIFRoZSBsaXN0IG9mIGl0ZW1zIHRvIHJ1biB0aGUgYWdncmVnYXRvciBhZ2FpbnN0XG4gICAqIEBwYXJhbSBmdW5jdGlvblBvb2wgVGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgbGlzdCBjYWxsZXJcbiAgICogQHBhcmFtIGZ1bmN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSB2YWx1ZSB0byBzaG93IGF0IHRoZSBVSVxuICAgKlxuICAgKi9cbiAgdHJhbnNmb3JtKGl0ZW1zOiBhbnlbXSwgZnVuY3Rpb25Qb29sOiBhbnksIGZ1bmN0aW9uTmFtZTogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtcykgJiYgZnVuY3Rpb25OYW1lICYmIGZ1bmN0aW9uTmFtZSBpbiBmdW5jdGlvblBvb2wpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvblBvb2xbZnVuY3Rpb25OYW1lXShpdGVtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbi8qKlxuICpcbiAqIFxuICogQGNsYXNzZGVzYyBHaXZlbiBhIHRpdGxlIG9mIGFuIGFnZ3JlZ2F0b3IgbGlzdCwgdHJhbnNsYXRlcyBhbmQgZXZhbHVhdGVzIHRoZSBwYXJhbWV0ZXIgaWYgYW55XG4gKlxuICovXG5cbkBQaXBlKHtcbiAgbmFtZTogJ2FnZ3JlZ2F0b3JMaXN0VGl0bGUnXG59KVxuZXhwb3J0IGNsYXNzIFBhcnNlVGl0bGVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZVxuICApIHt9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBvdmVycmlkZVxuICAgKlxuICAgKiBAcGFyYW0gdGl0bGUgVGhlIHRpdGxlIG9mIHRoZSBsaXN0XG4gICAqIEBwYXJhbSBrZXkgVGhlIGN1cnJlbnQgbGlzdCBrZXkgdGhhdCBpcyBiZWluZyB1c2VkXG4gICAqXG4gICAqL1xuICB0cmFuc2Zvcm0odGl0bGU6IHN0cmluZywga2V5OiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICghdGl0bGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gbnVsbCB8fCBrZXkgPT09ICd1bmRlZmluZWQnIHx8IGtleSA9PT0gJ251bGwnKSB7XG4gICAgICAgIGtleSA9IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnVGFibGVzLk5vdERlZmluZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aXRsZS5zcGxpdCgnICcpXG4gICAgICAgIC5tYXAoKHBhcnQpID0+IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChwYXJ0KSlcbiAgICAgICAgLm1hcCgocGFydCkgPT4gcGFydC5yZXBsYWNlKCcke3BhcmFtfScsIGtleSkpXG4gICAgICAgIC5qb2luKCcgJyk7XG4gICAgfVxuICB9XG59XG4iLCIvLyB0c2xpbnQ6ZGlzYWJsZTogcXVvdGVtYXJrXG4vLyB0c2xpbnQ6ZGlzYWJsZTogbWF4LWxpbmUtbGVuZ3RoXG5leHBvcnQgY29uc3QgVEFCTEVTX0VMID0ge1xuICAgIFwiVGFibGVzXCI6IHtcbiAgICAgICAgXCJFeHBvcnRcIjogXCLOlc6+zrHOs8+JzrPOrlwiLFxuICAgICAgICBcIk1vcmVcIjogXCLOoM61z4HOuc+Dz4PPjM+EzrXPgc6xXCIsXG4gICAgICAgIFwiU2VhcmNoXCI6IFwizpHOvc6xzrbOrs+EzrfPg863XCIsXG4gICAgICAgIFwiU2VhcmNoUGxhY2Vob2xkZXJcIjogXCLOkc69zrHOts6uz4TOt8+DzrcuLi5cIixcbiAgICAgICAgXCJHcm91cEJ5XCI6IFwizp/OvM6xzrTOv8+Azr/Or863z4POtyDOsc69zqxcIixcbiAgICAgICAgXCJOb3REZWZpbmVkXCI6IFwizpzOtyDPgM+Bzr/Pg860zrnOv8+BzrnPg868zq3Ovc6/XCIsXG4gICAgICAgIFwiRGF0YVRhYmxlXCI6IHtcbiAgICAgICAgICAgIFwicGFnaW5hdGVcIjoge1xuICAgICAgICAgICAgICAgIFwiZmlyc3RcIjogXCLOoM+Bz47PhM63IM+DzrXOu86vzrTOsVwiLFxuICAgICAgICAgICAgICAgIFwibGFzdFwiOiBcIs6kzrXOu861z4TOsc6vzrEgz4POtc67zq/OtM6xXCIsXG4gICAgICAgICAgICAgICAgXCJuZXh0XCI6IFwizpXPgM+MzrzOtc69zrdcIixcbiAgICAgICAgICAgICAgICBcInByZXZpb3VzXCI6IFwizqDPgc6/zrfOs86/z43OvM61zr3Ot1wiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJpbmZvXCI6IFwizpXOvM+GzqzOvc65z4POtyBfU1RBUlRfIM6tz4nPgiBfRU5EXyDOsc+Az4wgX1RPVEFMXyDOtc6zzrPPgc6xz4bOrc+CXCIsXG4gICAgICAgICAgICBcImluZm9FbXB0eVwiOiBcIs6UzrXOvSDOss+Bzq3OuM63zrrOsc69IM61zrPOs8+BzrHPhs6tz4JcIixcbiAgICAgICAgICAgIFwibG9hZGluZ1wiOiBcIs6VzrzPhs6szr3Ouc+DzrcgzrTOtc60zr/OvM6tzr3Pic69Li4uXCIsXG4gICAgICAgICAgICBcInByb2Nlc3NpbmdcIjogXCLOoM6xz4HOsc67zrHOss6uIM60zrXOtM6/zrzOrc69z4nOvS4uLlwiLFxuICAgICAgICAgICAgXCJlbXB0eVRhYmxlXCI6IFwizpTOtc69IM6yz4HOrc64zrfOus6xzr0gzrHPgM6/z4TOtc67zq3Pg868zrHPhM6xLlwiXG4gICAgICAgIH0sXG4gICAgICBcIkNvbHVtbkRpc3BsYXlcIjogXCLOlc+AzrnOu86/zrPOriDOlc68z4bOrM69zrnPg863z4Igz4PPhM63zrvPjs69XCIsXG4gICAgICBcIkNvbHVtbkRpc3BsYXlJbmZvXCI6IFwizpXPgM65zrvOrc6+z4TOtSDPhM65z4Igz4PPhM6uzrvOtc+CIM+Azr/PhSDOuM6tzrvOtc+EzrUgzr3OsSDOtc68z4bOsc69zq/Ots6/zr3PhM6xzrkuXCIsXG4gICAgICBcIlNhdmVcIjogXCLOlc+GzrHPgc68zr/Os86uXCIsXG4gICAgICBcIkFwcGx5XCI6IFwizpXPhs6xz4HOvM6/zrPOrlwiLFxuICAgICAgXCJDYW5jZWxcIjogXCLOkc66z43Pgc+Jz4POt1wiLFxuICAgICAgXCJSZWNvcmRzUGVyUGFnZVwiOiBcIs6VzrPOs8+BzrHPhs6tz4IgzrHOvc6sIM+DzrXOu86vzrTOsVwiLFxuICAgICAgXCJQYWdlSW5mb1wiOiBcInt7c3RhcnR9fS17e2VuZH19IM6xz4DPjCB7e3JlY29yZHNUb3RhbH19XCIsXG4gICAgICBcIlNlYXJjaExpc3RQbGFjZWhvbGRlclwiOiBcIs6Rzr3Osc62zrfPhM6uz4PPhM61IM+Dz4TOtyDOu86vz4PPhM6xLi4uXCIsXG4gICAgICBcIkZpbHRlcnNcIjogXCLOps6vzrvPhM+BzrFcIixcbiAgICAgIFwiQWxsXCI6IFwizozOu86xXCIsXG4gICAgICAgIFwiQWRkSXRlbVwiOiBcIs6gz4HOv8+DzrjOrs66zrcgz4PPhM6/zrnPh861zq/Ov8+FXCIsXG4gICAgICAgIFwiRW1wdHlUYWJsZVRpdGxlXCI6IFwizpTOtc69IM6yz4HOrc64zrfOus6xzr0gzrHPgM6/z4TOtc67zq3Pg868zrHPhM6xLlwiLFxuICAgICAgICBcIkVtcHR5VGFibGVNZXNzYWdlXCI6IFwizqDPgc6/z4PPgM6xzrjOrs+Dz4TOtSDOvc6xIM+Hz4HOt8+DzrnOvM6/z4DOv865zq7Pg861z4TOtSDOrM67zrvOtc+CIM67zq3Ovs61zrnPgiDOus67zrXOuc60zrnOrC5cIixcbiAgICAgICAgXCJSZW1vdmVJdGVtXCI6IFwizpTOuc6xzrPPgc6xz4bOriDPg8+Ezr/Ouc+HzrXOr86/z4VcIixcbiAgICAgICAgXCJJdGVtc1wiOiBcIs+Dz4TOv865z4fOtc6vzrFcIixcbiAgICAgICAgXCJJdGVtXCI6IFwiz4PPhM6/zrnPh861zq/Ov1wiLFxuICAgICAgICBcIkFkZEl0ZW1NZXNzYWdlXCI6IHtcbiAgICAgICAgICAgIFwidGl0bGVcIjogXCLOoM+Bzr/Pg864zq7Ous63IM+Dz4TOv865z4fOtc6vz4nOvVwiLFxuICAgICAgICAgICAgXCJvbmVcIjogXCLOiM69zrEgzr3Orc6/IM+Dz4TOv865z4fOtc6vzr8gz4DPgc6/z4PPhM6tzrjOt866zrUgzrzOtSDOtc+AzrnPhM+Fz4fOr86xLlwiLFxuICAgICAgICAgICAgXCJtYW55XCI6IFwie3t2YWx1ZX19IM69zq3OsSDPg8+Ezr/Ouc+HzrXOr86xIM+Az4HOv8+Dz4TOrc64zrfOus6xzr0gzrzOtSDOtc+AzrnPhM+Fz4fOr86xLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgXCJSZW1vdmVJdGVtTWVzc2FnZVwiOiB7XG4gICAgICAgICAgICBcInRpdGxlXCI6IFwizpHPhs6xzq/Pgc61z4POtyDPg8+Ezr/Ouc+HzrXOr8+Jzr1cIixcbiAgICAgICAgICAgIFwib25lXCI6IFwizojOvc6xIM+Dz4TOv865z4fOtc6vzr8gzrHPhs6xzrnPgc6tzrjOt866zrUgzrzOtSDOtc+AzrnPhM+Fz4fOr86xLlwiLFxuICAgICAgICAgICAgXCJtYW55XCI6IFwie3t2YWx1ZX19IM+Dz4TOv865z4fOtc6vzrEgzrHPhs6xzrnPgc6tzrjOt866zrHOvSDOvM61IM61z4DOuc+Ez4XPh86vzrEuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJSZW1vdmVJdGVtc1RpdGxlXCI6IFwizpTOuc6xzrPPgc6xz4bOriDPg8+Ezr/Ouc+HzrXOr86/z4VcIixcbiAgICAgICAgXCJSZW1vdmVJdGVtc01lc3NhZ2VcIjogXCLOoM+Bz4zOus61zrnPhM6xzrkgzr3OsSDOtM65zrHOs8+BzqzPiM61z4TOtSDOrc69zrEgzq4gz4DOtc+BzrnPg8+Dz4zPhM61z4HOsSDPg8+Ezr/Ouc+HzrXOr86xLiDOmM6tzrvOtc+EzrUgzr3OsSDPgM+Bzr/Ph8+Jz4HOrs+DzrXPhM61P1wiLFxuICAgICAgICBcIlNlbGVjdEFsbFwiOiBcIs6Vz4DOuc67zr/Os86uIM+MzrvPic69XCIsXG4gICAgICAgIFwiQ2xlYXJTZWxlY3Rpb25cIjogXCLOkc69zrHOr8+BzrXPg863IM61z4DOuc67zr/Os86uz4JcIixcbiAgICAgIFwiQWN0aW9uc1wiOiB7XG4gICAgICAgIFwiTGFiZWxcIjogXCLOlc+AzrXOvs61z4HOs86xz4POr86xXCIsXG4gICAgICAgIFwiU3RhcnRcIjogXCLOiM69zrHPgc6+zrdcIixcbiAgICAgICAgXCJBY3Rpb25NZXNzYWdlXCI6IHtcbiAgICAgICAgICBcIk5vbmVcIjogXCLOlM61zr0gzq3Ph861z4TOtSDOtc+AzrnOu86tzr7Otc65IM66zrHOvc6tzr3OsSDPg8+Ezr/Ouc+HzrXOr86/IM+Azr/PhSDOvc6xIM6xzrrOv867zr/Phc64zrXOryDPhM65z4Igz4DPgc6/z4vPgM6/zrjOrc+DzrXOuc+CIM+EzrfPgiDOtc69zq3Pgc6zzrXOuc6xz4IuXCIsXG4gICAgICAgICAgXCJPbmVcIjogXCLOiM+HzrXPhM61IM61z4DOuc67zq3Ovs61zrkgzq3Ovc6xIM+Dz4TOv865z4fOtc6vzr8gz4DOv8+FIM6xzrrOv867zr/Phc64zrXOryDPhM65z4Igz4DPgc6/z4vPgM6/zrjOrc+DzrXOuc+CIM+EzrfPgiDOtc69zq3Pgc6zzrXOuc6xz4IuIM6gzrHPhM6uz4PPhM61IM+Ezr8gz4DOu86uzrrPhM+Bzr8gzojOvc6xz4HOvs63IM6zzrnOsSDOvc6xIM6+zrXOus65zr3Ors+DzrXOuSDOtyDOtM65zrHOtM65zrrOsc+Dzq/OsS5cIixcbiAgICAgICAgICBcIk1hbnlcIjogXCLOiM+HzrXPhM61IM61z4DOuc67zq3Ovs61zrkge3tsZW5ndGh9fSDPg8+Ezr/Ouc+HzrXOr86xIM+Azr/PhSDOsc66zr/Ou86/z4XOuM6/z43OvSDPhM65z4Igz4DPgc6/z4vPgM6/zrjOrc+DzrXOuc+CIM+EzrfPgiDOtc69zq3Pgc6zzrXOuc6xz4IuIM6gzrHPhM6uz4PPhM61IM+Ezr8gz4DOu86uzrrPhM+Bzr8gzojOvc6xz4HOvs63IM6zzrnOsSDOvc6xIM6+zrXOus65zr3Ors+DzrXOuSDOtyDOtM65zrHOtM65zrrOsc+Dzq/OsS5cIlxuICAgICAgICB9LFxuICAgICAgICBcIkNvbXBsZXRlZFdpdGhFcnJvcnNcIjoge1xuICAgICAgICAgIFwiVGl0bGVcIjogXCLOlyDOtM65zrHOtM65zrrOsc+Dzq/OsSDOv867zr/Ous67zrfPgc+OzrjOt866zrUgzrzOtSDPg8+GzqzOu868zrHPhM6xLlwiLFxuICAgICAgICAgIFwiRGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgICAgXCJPbmVcIjogXCLOiM69zrEgz4PPhM6/zrnPh861zq/OvyDOtM61zr0gzrHOvc6xzr3Otc+OzrjOt866zrUgzrvPjM6zz4kgzrXOvc+Mz4Igz4PPhs6szrvOvM6xz4TOv8+CIM+Azr/PhSDPg8+Fzr3Orc6yzrcgzrrOsc+Ezqwgz4TOt869IM61zrrPhM6tzrvOtc+Dzrcgz4TOt8+CIM60zrnOsc60zrnOus6xz4POr86xz4IuXCIsXG4gICAgICAgICAgICBcIk1hbnlcIjogXCJ7e2Vycm9yc319IM+Dz4TOv865z4fOtc6vzrEgzrTOtc69IM6xzr3Osc69zrXPjs64zrfOus6xzr0gzrvPjM6zz4kgzrXOvc+Mz4Igz4PPhs6szrvOvM6xz4TOv8+CIM+Azr/PhSDPg8+Fzr3Orc6yzrcgzrrOsc+Ezqwgz4TOt869IM61zrrPhM6tzrvOtc+Dzrcgz4TOt8+CIM60zrnOsc60zrnOus6xz4POr86xz4IuXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiQ29tcGxldGVkV2l0aFN1Y2Nlc3NcIjoge1xuICAgICAgICAgIFwiVGl0bGVcIjogXCLOlyDOtM65zrHOtM65zrrOsc+Dzq/OsSDOv867zr/Ous67zrfPgc+OzrjOt866zrUgzrzOtSDOtc+AzrnPhM+Fz4fOr86xLlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcIlNlbGVjdENvbHVtbnNcIjogXCLOlc+AzrnOu86/zrPOriDPg8+EzrfOu8+Ozr1cIixcbiAgICAgIFwiTW92ZVVwXCI6IFwizpXPgM6szr3PiVwiLFxuICAgICAgXCJNb3ZlRG93blwiOiBcIs6azqzPhM+JXCIsXG4gICAgICBcIkFkZENvbHVtblwiOiBcIs6Vz4DOuc67zr/Os86uXCIsXG4gICAgICBcIlJlbW92ZUNvbHVtblwiOiBcIs6Rz4bOsc6vz4HOtc+DzrdcIixcbiAgICAgIFwiU2VsZWN0Q29sdW1uSGVscFwiOiBcIs6Vz4DOuc67zq3Ovs+EzrUgzrzOr86xIM6uIM+AzrXPgc65z4PPg8+Mz4TOtc+BzrXPgiDOsc+Az4wgz4TOuc+CIM60zrnOsc64zq3Pg865zrzOtc+CIM+Dz4TOrs67zrXPgiDOus6xzrkgz4DOsc+Ezq7Pg8+EzrUgz4TOvyDPgM67zq7Ous+Ez4HOvyAnzpXPgM65zrvOv86zzq4nIM6zzrnOsSDOvc6xIM+EzrnPgiDOtc68z4bOsc69zq/Pg861z4TOtS4gzqfPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtSDPhM6/IM+AzrvOrs66z4TPgc6/ICfOkc+GzrHOr8+BzrXPg863JyDOs865zrEgzr3OsSDOsc+GzrHOuc+Bzq3Pg861z4TOtSDPhM65z4IgzrXPgM65zrvOtc6zzrzOrc69zrXPgiDPg8+Ezq7Ou861z4IuXCIsXG4gICAgICBcIk1vdmVDb2x1bW5IZWxwXCI6IFwizqfPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtSDPhM6xIM+AzrvOrs66z4TPgc6xICfOlc+AzqzOvc+JJyDOus6xzrkgJ86azqzPhM+JJyDOs865zrEgzr3OsSDOsc67zrvOrM6+zrXPhM61IM+EzrfOvSDPg861zrnPgc6sIM61zrzPhs6szr3Ouc+DzrfPgiDPhM+Jzr0gz4PPhM63zrvPjs69IM+Ezr/PhSDPgM6vzr3Osc66zrEuXCIsXG4gICAgICBcIlVua25vd25Db2x1bW5cIjogXCLOhs6zzr3Pic+Dz4TOv1wiLFxuICAgICAgXCJTZWxlY3RDb2x1bW5cIjogXCLOlc+AzrnOu86/zrPOrlwiLFxuICAgICAgXCJBY3Rpb25MaW5rQ29sdW1uXCI6IFwizpXOvc6tz4HOs861zrnOtc+CXCIsXG4gICAgICBcIkRhdGFFcnJvclwiOiB7XG4gICAgICAgIFwiVGl0bGVcIjogXCLOo8+GzqzOu868zrEgzrrOsc+Ezqwgz4TOt869IM+AzrHPgc6xzrvOsc6yzq4gz4TPic69IM60zrXOtM6/zrzOrc69z4nOvVwiLFxuICAgICAgICBcIk1lc3NhZ2VcIjogXCLOo8+Fzr3Orc6yzrcgz4PPhs6szrvOvM6xIM66zrHPhM6sIM+EzrfOvSDPgM6xz4HOsc67zrHOss6uIM+Ez4nOvSDOtM61zrTOv868zq3Ovc+Jzr0uIM6gz4HOv8+Dz4DOsc64zq7Pg8+EzrUgzr7Osc69zqwgzq4gz4TPgc6/z4DOv8+Azr/Ouc6uz4PPhM61IM+EzrEgz4PPhM6/zrnPh861zq/OsSDOsc69zrHOts6uz4TOt8+DzrfPgi5cIlxuICAgICAgfSxcbiAgICAgIFwiRXhwb3J0TGlzdFwiOiBcIs6Vzr7Osc6zz4nOs86uIM67zq/Pg8+EzrHPglwiLFxuICAgICAgXCJFeHBvcnRMaW1pdEV4Y2VlZGVkXCI6IFwizqTOvyDPgM67zq7OuM6/z4Igz4TPic69IM+Dz4TOv865z4fOtc6vz4nOvSDPgM+Bzr/PgiDOtc6+zrHOs8+JzrPOriAoe3tkYXRhTGVuZ3RofX0pIM6+zrXPgM61z4HOvc6szrXOuSDPhM6/IM68zq3Os865z4PPhM6/IM61z4DOuc+Ez4HOtc+Az4TPjCAoe3tleHBvcnRMaW1pdH19KS4gzqDOsc+BzrHOus6xzrvOv8+NzrzOtSDPgM+Bzr/Pg86xz4HOvM+Mz4PPhM61IM+EzrEgz4bOr867z4TPgc6xIM+EzrfPgiDOsc69zrHOts6uz4TOt8+DzrfPgiDOus6xzrkgz4DPgc6/z4PPgM6xzrjOrs+Dz4TOtSDOvs6xzr3OrC5cIixcbiAgICAgIFwiRXhwb3J0UmVzdWx0c1wiOiBcIs6UzrXOtM6/zrzOrc69zrEgzrvOr8+Dz4TOsc+CXCJcbiAgICB9LFxuICAgIFwiVHJ1ZUZhbHNlXCI6IHtcbiAgICAgICAgXCJsb25nXCI6IHtcbiAgICAgICAgICAgIFwiWWVzXCI6IFwizp3Osc65XCIsXG4gICAgICAgICAgICBcIk5vXCI6IFwizozPh865XCJcbiAgICAgICAgfVxuICAgIH0sXG4gICAgXCJTZXR0aW5nc1wiOiB7XG4gICAgICBcIk9wZXJhdGlvbkNvbXBsZXRlZFwiOiBcIs6XIM60zrnOsc60zrnOus6xz4POr86xIM6/zrvOv866zrvOt8+Bz47OuM63zrrOtSDOvM61IM61z4DOuc+Ez4XPh86vzrEuXCJcbiAgICB9LFxuICAgIFwiQWR2YW5jZWRTZWFyY2hcIjoge1xuICAgICAgICBcIkNob29zZVwiOiBcIjzOlc+AzrnOu86tzr7PhM61IM68zrnOsSDOsc69zrHOts6uz4TOt8+Dzrc+XCIsXG4gICAgICAgIFwiQ2hvb3NlRGF0ZVwiOiBcIs6Vz4DOuc67zr/Os86uIM63zrzOtc+Bzr/OvM63zr3Or86xz4JcIixcbiAgICAgICAgXCJTYXZlZFNlYXJjaGVzXCI6IFwizpHPgM6/zrjOt866zrXPhc68zq3Ovc61z4IgzrHOvc6xzrbOt8+Ezq7Pg861zrnPglwiLFxuICAgICAgICBcIlRvZ2dsZURyb3Bkb3duXCIgOiBcIs6VzrzPhs6szr3Ouc+DzrcgzrvOr8+Dz4TOsc+CXCIsXG4gICAgICAgIFwiU2F2ZUN1cnJlbnRTZWFyY2hcIjogXCLOkc+Azr/OuM6uzrrOtc+Fz4POtyDOsc69zrHOts6uz4TOt8+DzrfPglwiLFxuICAgICAgICBcIlNhdmVBc1wiIDogXCLOkc+Azr/OuM6uzrrOtc+Fz4POtyDPic+CXCIsXG4gICAgICAgIFwiU2F2ZVwiIDogXCLOkc+Azr/OuM6uzrrOtc+Fz4POt1wiLFxuICAgICAgICBcIkRlbGV0ZVwiIDogXCLOlM65zrHOs8+BzrHPhs6uXCIsXG4gICAgICAgIFwiTW9yZVwiOiBcIs6gzrXPgc65z4PPg8+Mz4TOtc+BzrFcIixcbiAgICAgICAgXCJMZXNzXCI6IFwizpvOuc6zz4zPhM61z4HOsVwiLFxuICAgICAgICBcIk1vZGFsXCIgOiB7XG4gICAgICAgICAgICBcIlRpdGxlXCIgOiBcIs6Rz4DOv864zq7Ous61z4XPg863IM66z4HOuc+EzrfPgc6vz4nOvSDOsc69zrHOts6uz4TOt8+DzrfPglwiLFxuICAgICAgICAgICAgXCJIZWxwXCIgOiBcIs6fz4HOr8+Dz4TOtSDOrc69zrHOvSDPhM6vz4TOu86/IM6zzrnOsSDPhM6xIM61z4DOuc67zrXOs868zq3Ovc6xIM66z4HOuc+Ezq7Pgc65zrEgzrHOvc6xzrbOrs+EzrfPg863z4IuIM6Rz4XPhM+Mz4Igzr8gz4TOr8+EzrvOv8+CIM64zrEgz4POsc+CIM6yzr/Ot864zq7Pg861zrkgzr3OsSDPhM6xIM+Hz4HOt8+DzrnOvM6/z4DOv865zq7Pg861z4TOtSDOvs6xzr3OrCDPg8+Ezr8gzrzOrc67zrvOv869LlwiLFxuICAgICAgICAgICAgXCJUaXRsZU9uVXNlckVycm9yXCIgOiBcIs6gzrHPgc6xzrrOsc67z44gzrXOuc+DzqzOs861z4TOtSDOrc69zrHOvSDPhM6vz4TOu86/XCIsXG4gICAgICAgICAgICBcIlRpdGxlT25MaXN0QWxyZWFkeUNyZWF0ZWRcIiA6IFwizqTOvyDPjM69zr/OvM6xIM6xz4XPhM+MIM+Hz4HOt8+DzrnOvM6/z4DOv865zrXOr8+EzrHOuSDOrs60zrcuIM6UzrnOsc67zq3Ovs+EzrUgzq3Ovc6xIM60zrnOsc+Gzr/Pgc61z4TOuc66z4wuXCIsXG4gICAgICAgICAgICBcIk5vTGlzdERlZmluZWRcIiA6IFwizpTOtc69IM6tz4fOtc65IM6/z4HOuc+Dz4TOtc6vIM+Ezr8gz4POt868zrXOr86/IM6xz4DOv864zq7Ous61z4XPg863z4Igz4TOt8+CIM67zq/Pg8+EzrHPglwiLFxuICAgICAgICAgICAgXCJFbXB0eUNyaXRlcmlhTGlzdFwiIDogXCLOlM61zr0gzq3Ph861z4TOtSDOus6xzrjOv8+Bzq/Pg861zrkgzrrOsc69zq3Ovc6xIM66z4HOuc+Ezq7Pgc65zr8gzrPOuc6xIM6xz4DOv864zq7Ous61z4XPg863XCIsXG4gICAgICAgICAgICBcIlNhdmVOYW1lTGFiZWxcIiA6IFwizp/Ovc6/zrzOsc+Dzq/OsSDOu86vz4PPhM6xz4JcIixcbiAgICAgICAgICAgIFwiU2F2ZU5hbWVQbGFjZWhvbGRlclwiIDogXCLOlc65z4POrM6zzrXPhM61IM6tzr3Osc69IM+Ezq/PhM67zr9cIixcbiAgICAgICAgICAgIFwiQWNjZXB0XCIgOiBcIs6Rz4DOv864zq7Ous61z4XPg863XCIsXG4gICAgICAgICAgICBcIkRlY2xpbmVcIiA6IFwizpHPgM+Mz4HPgc65z4jOt1wiLFxuICAgICAgICAgICAgXCJDbG9zZVwiIDogXCLOms67zrXOr8+DzrnOvM6/XCJcbiAgICAgICAgfVxuICAgIH0sXG4gICAgXCJBZGRJdGVtc1wiIDoge1xuICAgICAgXCJTZWxlY3RJdGVtc1wiOiBcIs6Vz4DOuc67zq3Ovs+EzrUgz4PPhM6/zrnPh861zq/OsVwiLFxuICAgIH1cbn07XG4iLCIvLyB0c2xpbnQ6ZGlzYWJsZTogcXVvdGVtYXJrXG4vLyB0c2xpbnQ6ZGlzYWJsZTogbWF4LWxpbmUtbGVuZ3RoXG5leHBvcnQgY29uc3QgVEFCTEVTX0VOID0ge1xuICAgIFwiVGFibGVzXCI6IHtcbiAgICAgIFwiRXhwb3J0XCI6IFwiRXhwb3J0XCIsXG4gICAgICAgIFwiTW9yZVwiOiBcIk1vcmVcIixcbiAgICAgICAgXCJTZWFyY2hcIjogXCJTZWFyY2hcIixcbiAgICAgICAgXCJTZWFyY2hQbGFjZWhvbGRlclwiOiBcIlNlYXJjaC4uLlwiLFxuICAgICAgICBcIkdyb3VwQnlcIjogXCJHcm91cCBieVwiLFxuICAgICAgICBcIk5vdERlZmluZWRcIjogXCJOb3QgZGVmaW5lZFwiLFxuICAgICAgICBcIkRhdGFUYWJsZVwiOiB7XG4gICAgICAgICAgICBcInBhZ2luYXRlXCI6IHtcbiAgICAgICAgICAgICAgICBcImZpcnN0XCI6IFwiRmlyc3RcIixcbiAgICAgICAgICAgICAgICBcImxhc3RcIjogXCJMYXN0XCIsXG4gICAgICAgICAgICAgICAgXCJuZXh0XCI6IFwiTmV4dFwiLFxuICAgICAgICAgICAgICAgIFwicHJldmlvdXNcIjogXCJQcmV2aW91c1wiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJpbmZvXCI6IFwiU2hvd2luZyBfU1RBUlRfIHRvIF9FTkRfIG9mIF9UT1RBTF8gZW50cmllc1wiLFxuICAgICAgICAgICAgXCJpbmZvRW1wdHlcIjogXCJTaG93aW5nIDAgdG8gMCBvZiAwIGVudHJpZXNcIixcbiAgICAgICAgICAgIFwicHJvY2Vzc2luZ1wiOiBcIlByb2Nlc3NpbmcgZGF0YS4uLlwiLFxuICAgICAgICAgICAgXCJlbXB0eVRhYmxlXCI6IFwiVGhlcmUgYXJlIG5vIG1hdGNoaW5nIHJlY29yZHMuXCJcbiAgICAgICAgfSxcbiAgICAgIFwiQ29sdW1uRGlzcGxheVwiOiBcIkNvbHVtbiBEaXNwbGF5XCIsXG4gICAgICBcIkNvbHVtbkRpc3BsYXlJbmZvXCI6IFwizpXPgM65zrvOrc6+z4TOtSDPhM65z4Igz4PPhM6uzrvOtc+CIM+Azr/PhSDOuM6tzrvOtc+EzrUgzr3OsSDOtc68z4bOsc69zq/Ots6/zr3PhM6xzrkuXCIsXG4gICAgICBcIlNhdmVcIjogXCJTYXZlXCIsXG4gICAgICBcIkFwcGx5XCI6IFwiQXBwbHlcIixcbiAgICAgIFwiQ2FuY2VsXCI6IFwiQ2FuY2VsXCIsXG4gICAgICBcIlJlY29yZHNQZXJQYWdlXCI6IFwiSXRlbXMgcGVyIHBhZ2VcIixcbiAgICAgIFwiUGFnZUluZm9cIjogXCJ7e3N0YXJ0fX0te3tlbmR9fSBvZiB7e3JlY29yZHNUb3RhbH19XCIsXG4gICAgICBcIlNlYXJjaExpc3RQbGFjZUhvbGRlclwiOiBcIlNlYXJjaCBpbiBsaXN0Li4uXCIsXG4gICAgICBcIkZpbHRlcnNcIjogXCJGaWx0ZXJzXCIsXG4gICAgICBcIkFsbFwiOiBcIkFsbFwiLFxuICAgICAgXCJBZGRJdGVtXCI6IFwiQWRkIGl0ZW1cIixcbiAgICAgIFwiRW1wdHlUYWJsZVRpdGxlXCI6IFwiVGhlcmUgYXJlIG5vIG1hdGNoaW5nIHJlY29yZHMuXCIsXG4gICAgICBcIkVtcHR5VGFibGVNZXNzYWdlXCI6IFwiUGxlYXNlIHRyeSB0byB1c2Ugb3RoZXIga2V5d29yZHMgb3Igc2VhcmNoIHBhcmFtZXRlcnMuXCIsXG4gICAgICBcIlJlbW92ZUl0ZW1cIjogXCJSZW1vdmUgaXRlbVwiLFxuICAgICAgXCJJdGVtc1wiOiBcIml0ZW1zXCIsXG4gICAgICBcIkl0ZW1cIjogXCJpdGVtXCIsXG4gICAgXCJBZGRJdGVtTWVzc2FnZVwiOiB7XG4gICAgICBcInRpdGxlXCI6IFwiQWRkIGl0ZW1cIixcbiAgICAgIFwib25lXCI6IFwiQSBuZXcgaXRlbSBoYXMgYmVlbiBhZGRlZCBzdWNjZXNzZnVsbHkuXCIsXG4gICAgICBcIm1hbnlcIjogXCJ7e3ZhbHVlfX0gbmV3IGl0ZW1zIGhhdmUgYmVlbiBhZGRlZCBzdWNjZXNzZnVsbHkuXCJcbiAgICB9LFxuICAgIFwiUmVtb3ZlSXRlbU1lc3NhZ2VcIjoge1xuICAgICAgXCJ0aXRsZVwiOiBcIlJlbW92ZSBpdGVtc1wiLFxuICAgICAgXCJvbmVcIjogXCJBbiBpdGVtIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSByZW1vdmVkLlwiLFxuICAgICAgXCJtYW55XCI6IFwie3t2YWx1ZX19IGl0ZW1zIGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgcmVtb3ZlZC5cIlxuICAgIH0sXG4gICAgXCJSZW1vdmVJdGVtc1RpdGxlXCI6IFwiUmVtb3ZlIGl0ZW1zXCIsXG4gICAgXCJSZW1vdmVJdGVtc01lc3NhZ2VcIjogXCJZb3UgYXJlIGdvaW5nIHRvIHJlbW92ZSBvbmUgb3IgbW9yZSBpbnN0cnVjdG9yIGNvdXJzZXMuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/XCIsXG4gICAgICBcIlNlbGVjdEFsbFwiOiBcIlNlbGVjdCBhbGxcIixcbiAgICAgIFwiQ2xlYXJTZWxlY3Rpb25cIjogXCJDbGVhciBzZWxlY3Rpb25cIixcbiAgICAgIFwiQWN0aW9uc1wiOiB7XG4gICAgICAgIFwiTGFiZWxcIjogXCJFZGl0XCIsXG4gICAgICAgIFwiU3RhcnRcIjogXCJTdGFydFwiLFxuICAgICAgICBcIkFjdGlvbk1lc3NhZ2VcIjoge1xuICAgICAgICAgIFwiTm9uZVwiOiBcIlRoZXJlIGlzIG5vIHNlbGVjdGVkIGl0ZW0gdGhhdCBtZWV0cyBhY3Rpb24gcmVxdWlyZW1lbnRzLlwiLFxuICAgICAgICAgIFwiT25lXCI6IFwiWW91IGhhdmUgc2VsZWN0ZWQgb25lIGl0ZW0gdGhhdCBtZWV0cyBhY3Rpb24gcmVxdWlyZW1lbnRzLlwiLFxuICAgICAgICAgIFwiTWFueVwiOiBcIllvdSBoYXZlIHNlbGVjdGVkIHt7bGVuZ3RofX0gaXRlbXMgdGhhdCBtZWV0IGFjdGlvbiByZXF1aXJlbWVudHMuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJDb21wbGV0ZWRXaXRoRXJyb3JzXCI6IHtcbiAgICAgICAgICBcIlRpdGxlXCI6IFwiVGhlIG9wZXJhdGlvbiB3YXMgY29tcGxldGVkIHdpdGggZXJyb3JzLlwiLFxuICAgICAgICAgIFwiRGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgICAgXCJPbmVcIjogXCJPbmUgaXRlbSBoYXMgbm90IGJlZW4gdXBkYXRlZCBkdWUgdG8gYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZXhlY3V0aW5nIHByb2Nlc3MuXCIsXG4gICAgICAgICAgICBcIk1hbnlcIjogXCJ7e2Vycm9yc319IGl0ZW1zIGhhdmUgbm90IGJlZW4gdXBkYXRlZCBkdWUgdG8gYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZXhlY3V0aW5nIHByb2Nlc3MuXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiQ29tcGxldGVkV2l0aFN1Y2Nlc3NcIjoge1xuICAgICAgICAgIFwiVGl0bGVcIjogXCJUaGUgb3BlcmF0aW9uIHdhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcIlNlbGVjdENvbHVtbnNcIjogXCJTZWxlY3QgY29sdW1uc1wiLFxuICAgICAgXCJNb3ZlVXBcIjogXCJNb3ZlIHVwXCIsXG4gICAgICBcIk1vdmVEb3duXCI6IFwiTW92ZSBkb3duXCIsXG4gICAgICBcIkFkZENvbHVtblwiOiBcIkFkZFwiLFxuICAgICAgXCJSZW1vdmVDb2x1bW5cIjogXCJSZW1vdmVcIixcbiAgICAgIFwiU2VsZWN0Q29sdW1uSGVscFwiOiBcIlNlbGVjdCBvbmUgb3IgbW9yZSBjb2x1bW5zIGFuZCBwcmVzcyAnQWRkJyBidXR0b24gdG8gaW5jbHVkZSB0aGVtIGluIHRhYmxlLiBVc2UgJ1JlbW92ZScgYnV0dG9uIHRvIGV4Y2x1ZGUgb25lIG9yIG1vcmUgY29sdW1ucyBmcm9tIHZpZXcuXCIsXG4gICAgICBcIk1vdmVDb2x1bW5IZWxwXCI6IFwiVXNlICdNb3ZlIHVwJyBhbmQgJ01vdmUgZG93bicgYnV0dG9ucyB0byBjaGFuZ2UgY29sdW1uIG9yZGVyLlwiLFxuICAgICAgXCJVbmtub3duQ29sdW1uXCI6IFwiVW5rbm93blwiLFxuICAgICAgXCJTZWxlY3RDb2x1bW5cIjogXCJTZWxlY3RcIixcbiAgICAgIFwiQWN0aW9uTGlua0NvbHVtblwiOiBcIkFjdGlvbnNcIixcbiAgICAgIFwiRGF0YUVycm9yXCI6IHtcbiAgICAgICAgXCJUaXRsZVwiOiBcIkVycm9yIHdoaWxlIGdldHRpbmcgZGF0YVwiLFxuICAgICAgICBcIk1lc3NhZ2VcIjogXCJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBnZXR0aW5nIGRhdGEuIFBsZWFzZSB0cnkgYWdhaW4gb3IgY2hhbmdlIHlvdXIgY3JpdGVyaWEuXCJcbiAgICAgIH0sXG4gICAgICBcIkV4cG9ydExpc3RcIjogXCJFeHBvcnQgbGlzdFwiLFxuICAgICAgXCJFeHBvcnRMaW1pdEV4Y2VlZGVkXCI6IFwiVGhlIG51bWJlciBvZiBpdGVtcyB0aGF0IGFyZSB0byBiZSBleHBvcnRlZCAoe3tkYXRhTGVuZ3RofX0pIGV4Y2VlZHMgdGhlIGV4cG9ydCBsaW1pdCAoe3tleHBvcnRMaW1pdH19KS4gUGxlYXNlIGFwcGx5IG1vcmUgc3BlY2lmaWMgZmlsdGVycyB0byB0aGUgc2VhcmNoLlwiLFxuICAgICAgXCJFeHBvcnRSZXN1bHRzXCI6IFwiRXhwb3J0ZWQgbGlzdFwiXG4gICAgfSxcbiAgICBcIlRydWVGYWxzZVwiOiB7XG4gICAgICAgIFwibG9uZ1wiOiB7XG4gICAgICAgICAgICBcIlllc1wiOiBcIlllc1wiLFxuICAgICAgICAgICAgXCJOb1wiOiBcIk5vXCJcbiAgICAgICAgfVxuICAgIH0sXG4gICAgXCJTZXR0aW5nc1wiOiB7XG4gICAgICBcIk9wZXJhdGlvbkNvbXBsZXRlZFwiOiBcIlRoZSBvcGVyYXRpb24gd2FzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCJcbiAgICB9LFxuICAgIFwiQWR2YW5jZWRTZWFyY2hcIjoge1xuICAgICAgICBcIkNob29zZVwiOiBcIjxTZWxlY3QgYSBzYXZlZCBzZWFyY2g+XCIsXG4gICAgICAgIFwiQ2hvb3NlRGF0ZVwiOiBcIkNob29zZSBkYXRlXCIsXG4gICAgICAgIFwiU2F2ZWRTZWFyY2hlc1wiOiBcIlNhdmVkIHNlYXJjaGVzXCIsXG4gICAgICAgIFwiVG9nZ2xlRHJvcGRvd25cIiA6IFwiVG9nZ2xlIERyb3Bkb3duXCIsXG4gICAgICAgIFwiU2F2ZUN1cnJlbnRTZWFyY2hcIjogXCJTYXZlIHNlYXJjaFwiLFxuICAgICAgICBcIlNhdmVBc1wiIDogXCJTYXZlIGFzLi4uXCIsXG4gICAgICAgIFwiU2F2ZVwiIDogXCJTYXZlXCIsXG4gICAgICAgIFwiRGVsZXRlXCIgOiBcIlJlbW92ZVwiLFxuICAgICAgICBcIk1vcmVcIjogXCJNb3JlXCIsXG4gICAgICAgIFwiTGVzc1wiOiBcIkxlc3NcIixcbiAgICAgICAgXCJNb2RhbFwiIDoge1xuICAgICAgICAgICAgXCJUaXRsZVwiIDogXCJTYXZlIGN1cnJlbnQgc2VhcmNoIGNyaXRlcmlhXCIsXG4gICAgICAgICAgICBcIkhlbHBcIiA6IFwiUGxlYXNlIGFkZCBhIHRpdGxlIGZvciB0aGUgZ2l2ZW4gc2VhcmNoIGNyaXRlcmlhLiBUaGlzIHRpdGxlIHdpbGwgaGVscCB5b3UgdG8gdXNlIHRob3NlIGNyaXRlcmlhIGFnYWluIGluIHRoZSBmdXR1cmUuXCIsXG4gICAgICAgICAgICBcIlRpdGxlT25Vc2VyRXJyb3JcIiA6IFwiUGxlYXNlIHVzZSBhIHZhbGlkIG5hbWUgZm9yIHlvdXIgbGlzdFwiLFxuICAgICAgICAgICAgXCJUaXRsZU9uTGlzdEFscmVhZHlDcmVhdGVkXCIgOiBcIk5hbWUgYWxyZWFkeSBpbiB1c2UuIFBsZWFzZSBjaG9vc2UgYSBkaWZmZXJlbnQgb25lXCIsXG4gICAgICAgICAgICBcIk5vTGlzdERlZmluZWRcIiA6IFwiQ2Fubm90IGRlZmluZSB1c2VyIHN0b3JhZ2Uga2V5LlwiLFxuICAgICAgICAgICAgXCJFbXB0eUNyaXRlcmlhTGlzdFwiIDogXCJQbGVhc2UgZGVmaW5lIHNlYXJjaCBjcml0ZXJpYSBiZWZvcmUgc2F2ZS5cIixcbiAgICAgICAgICAgIFwiU2F2ZU5hbWVMYWJlbFwiIDogXCJMaXN0IG5hbWVcIixcbiAgICAgICAgICAgIFwiU2F2ZU5hbWVQbGFjZWhvbGRlclwiIDogXCJUeXBlIGEgdGl0bGUgaGVyZS4uLlwiLFxuICAgICAgICAgICAgXCJBY2NlcHRcIiA6IFwiU2F2ZVwiLFxuICAgICAgICAgICAgXCJEZWNsaW5lXCIgOiBcIkRlY2xpbmVcIixcbiAgICAgICAgICAgIFwiQ2xvc2VcIiA6IFwiQ2xvc2VcIlxuICAgICAgICB9XG4gICAgfSxcbiAgXCJBZGRJdGVtc1wiIDoge1xuICAgIFwiU2VsZWN0SXRlbXNcIjogXCJTZWxlY3QgaXRlbXNcIixcbiAgfVxufTtcbiIsImltcG9ydCB7IEFjdGlvbiB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcblxuZXhwb3J0IGVudW0gVGFibGVBY3Rpb25UeXBlcyB7XG4gIExvYWRGaWx0ZXIgPSAnW1RhYmxlXSBMb2FkIEZpbHRlcicsXG4gIEFwcGVuZEZpbHRlciA9ICdbVGFibGVdIEFwcGVuZCBGaWx0ZXInLFxuICBBcHBlbmRTdGF0ZSA9ICdbVGFibGVdIEFwcGVuZCBTdGF0ZSdcbn1cblxuZXhwb3J0IGNsYXNzIExvYWRGaWx0ZXIgaW1wbGVtZW50cyBBY3Rpb24ge1xuICByZWFkb25seSB0eXBlID0gVGFibGVBY3Rpb25UeXBlcy5Mb2FkRmlsdGVyO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZykge31cbn1cblxuZXhwb3J0IGNsYXNzIEFwcGVuZEZpbHRlciBpbXBsZW1lbnRzIEFjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBUYWJsZUFjdGlvblR5cGVzLkFwcGVuZEZpbHRlcjtcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGlkOiBzdHJpbmcsIHB1YmxpYyByZWFkb25seSBmaWx0ZXI6IGFueSkge31cbn1cblxuZXhwb3J0IGNsYXNzIEFwcGVuZFN0YXRlIGltcGxlbWVudHMgQWN0aW9uIHtcbiAgcmVhZG9ubHkgdHlwZSA9IFRhYmxlQWN0aW9uVHlwZXMuQXBwZW5kU3RhdGU7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBpZDogc3RyaW5nLCBwdWJsaWMgcmVhZG9ubHkgZGF0YTogYW55KSB7fVxufVxuXG5leHBvcnQgdHlwZSBUYWJsZUFjdGlvbnMgPSBMb2FkRmlsdGVyIHwgQXBwZW5kRmlsdGVyIHwgQXBwZW5kU3RhdGU7XG4iLCJpbXBvcnQge1xuICBBY3Rpb25SZWR1Y2VyTWFwLFxuICBjcmVhdGVGZWF0dXJlU2VsZWN0b3IsXG4gIGNyZWF0ZVNlbGVjdG9yLFxufSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgVGFibGVBY3Rpb25zLCBUYWJsZUFjdGlvblR5cGVzIH0gZnJvbSAnLi4vYWN0aW9ucy90YWJsZS5hY3Rpb25zJztcblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZVN0YXRlIHtcbiAgZmlsdGVyPzogYW55O1xuICBvcmRlcj86IGFueTtcbiAgdGFibGU/OiBhbnk7XG59XG5cbmV4cG9ydCBjb25zdCBpbml0aWFsU3RhdGUgPSB7XG59O1xuXG5leHBvcnQgY29uc3QgdGFibGVJbml0aWFsU3RhdGU6IFRhYmxlU3RhdGUgPSB7XG4gIGZpbHRlcjoge30sXG4gIG9yZGVyOiBbXVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRhYmxlUmVkdWNlcihzdGF0ZSA9IGluaXRpYWxTdGF0ZSwgYWN0aW9uOiBUYWJsZUFjdGlvbnMpOiB7IFtpZDogc3RyaW5nXTogVGFibGVTdGF0ZTsgfSB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcblxuICAgIGNhc2UgVGFibGVBY3Rpb25UeXBlcy5Mb2FkRmlsdGVyOlxuICAgICAgcmV0dXJuIHN0YXRlW2FjdGlvbi5pZF07XG4gICAgY2FzZSBUYWJsZUFjdGlvblR5cGVzLkFwcGVuZEZpbHRlcjpcbiAgICAgICAgc3RhdGVbYWN0aW9uLmlkXSA9IHtcbiAgICAgICAgICAuLi5zdGF0ZVthY3Rpb24uaWRdLFxuICAgICAgICAgIGZpbHRlcjogY2xvbmVEZWVwKGFjdGlvbi5maWx0ZXIpXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzdGF0ZTtcblxuICAgIGNhc2UgVGFibGVBY3Rpb25UeXBlcy5BcHBlbmRTdGF0ZTpcbiAgICAgICAgICBzdGF0ZVthY3Rpb24uaWRdID0ge1xuICAgICAgICAgICAgLi4uc3RhdGVbYWN0aW9uLmlkXSxcbiAgICAgICAgICAgIHRhYmxlOiBhY3Rpb24uZGF0YVxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3hUYWJsZXNTdGF0ZSB7XG4gIHRhYmxlczoge1xuICAgIFtpZDogc3RyaW5nXTogVGFibGVTdGF0ZTtcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IHRhYmxlUmVkdWNlcnM6IEFjdGlvblJlZHVjZXJNYXA8Tmd4VGFibGVzU3RhdGU+ID0ge1xuICB0YWJsZXM6IHRhYmxlUmVkdWNlcixcbn07XG5cbmV4cG9ydCBjb25zdCBmZWF0dXJlTmFtZSA9ICd0YWJsZXMnO1xuXG5leHBvcnQgY29uc3QgZ2V0VGFibGVzU3RhdGUgPSBjcmVhdGVGZWF0dXJlU2VsZWN0b3IoZmVhdHVyZU5hbWUpO1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0VGFibGUgPSBjcmVhdGVTZWxlY3RvcihcbiAgZ2V0VGFibGVzU3RhdGUsXG4gIChzdGF0ZTogTmd4VGFibGVzU3RhdGUsIHByb3BzOiB7IGlkOiBzdHJpbmcgfSkgPT4ge1xuICAgIHJldHVybiBzdGF0ZS50YWJsZXNbcHJvcHMuaWRdO1xuICB9XG4pO1xuIiwiaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsIE9wdGlvbmFsLCBJbnB1dCwgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHNlbGVjdCwgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBOZ3hUYWJsZXNTdGF0ZSB9IGZyb20gJy4uL3JlZHVjZXJzJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgKiBhcyBmcm9tVGFibGVzIGZyb20gJy4uL3JlZHVjZXJzJztcbmltcG9ydCB7IGZpcnN0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXBwZW5kU3RhdGUgfSBmcm9tICcuLi9hY3Rpb25zL3RhYmxlLmFjdGlvbnMnO1xuXG5ARGlyZWN0aXZlKFxuICAgIHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBkaXJlY3RpdmUtc2VsZWN0b3JcbiAgICAgICAgc2VsZWN0b3I6ICdbdGFibGVTdGF0ZV0nLFxuICAgIH0sXG4pXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVTdGF0ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBASW5wdXQoKSB0YWJsZVN0YXRlPzogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB0YWJsZTogQWR2YW5jZWRUYWJsZUNvbXBvbmVudCxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBzdG9yZTogU3RvcmU8Tmd4VGFibGVzU3RhdGU+KSB7XG4gICAgfVxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zdG9yZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50YWJsZS5zdGF0ZVNhdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLnRhYmxlLnN0YXRlTG9hZENhbGxiYWNrID0gKHNldHRpbmdzLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5waXBlKHNlbGVjdChmcm9tVGFibGVzLnNlbGVjdFRhYmxlLCB7IGlkOiB0aGlzLnRhYmxlU3RhdGUgYXMgc3RyaW5nIH0pLCBmaXJzdCgpKS5zdWJzY3JpYmUoKHN0YXRlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhzdGF0ZSAmJiBzdGF0ZS50YWJsZSk7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLnRhYmxlICYmIHN0YXRlLnRhYmxlLkNvbFJlb3JkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZS5kYXRhVGFibGUuY29sUmVvcmRlci5vcmRlcihzdGF0ZS50YWJsZS5Db2xSZW9yZGVyLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IGZpcnN0RHJhdyA9IHRydWU7XG4gICAgICAgIHRoaXMudGFibGUuZHJhdy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGZpcnN0RHJhdyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy50YWJsZS5kYXRhVGFibGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpcnN0RHJhdyA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgbG9hZGVTdGF0ZVNldHRpbmdzOiB7XG4gICAgICAgICAgICAgICAgb1NhdmVkU3RhdGU/OiB7XG4gICAgICAgICAgICAgICAgICAgIENvbFJlb3JkZXI/OiBudW1iZXJbXTtcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcFJvdzogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVNjcm9sbFRvcDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVJvd1RvcDogbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9ID0gdGhpcy50YWJsZS5kYXRhVGFibGUuc2V0dGluZ3MoKVswXTtcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyU2V0dGluZ3MgPSBsb2FkZVN0YXRlU2V0dGluZ3Mub1NhdmVkU3RhdGUgJiZcbiAgICAgICAgICAgICAgICBsb2FkZVN0YXRlU2V0dGluZ3Mub1NhdmVkU3RhdGUuc2Nyb2xsZXI7XG4gICAgICAgICAgICBpZiAoc2Nyb2xsZXJTZXR0aW5ncyAmJiBzY3JvbGxlclNldHRpbmdzLnRvcFJvdykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy50YWJsZS5kYXRhVGFibGUuc2Nyb2xsZXIoKTtcbiAgICAgICAgICAgICAgICBzY3JvbGxlci5zY3JvbGxUb1JvdyhzY3JvbGxlclNldHRpbmdzLnRvcFJvdywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRhYmxlLnN0YXRlU2F2ZUNhbGxiYWNrID0gKHNldHRpbmdzLCBkYXRhKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBBcHBlbmRTdGF0ZSh0aGlzLnRhYmxlU3RhdGUgYXMgc3RyaW5nLCBkYXRhKSk7XG4gICAgICAgIH07XG4gICAgfVxufVxuIiwiaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsIE9wdGlvbmFsLCBJbnB1dCwgT25Jbml0LCBPbkRlc3Ryb3lcbiAgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHNlbGVjdCwgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBBcHBlbmRGaWx0ZXIgfSBmcm9tICcuLi9hY3Rpb25zL3RhYmxlLmFjdGlvbnMnO1xuaW1wb3J0IHsgQWR2YW5jZWRUYWJsZVNlYXJjaENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUtc2VhcmNoLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ3hUYWJsZXNTdGF0ZSwgc2VsZWN0VGFibGUgfSBmcm9tICcuLi9yZWR1Y2Vycyc7XG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVTdGF0ZSB9IGZyb20gJy4vYWR2YW5jZS10YWJsZS1zdGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSAnbG9kYXNoJztcblxuICBleHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZVNlYXJjaENvbXBvbmVudE5vdE51bGwgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICBzdXBlcignQWR2YW5jZWQgdGFibGUgc2VhcmNoIGNvbXBvbmVudCBjYW5ub3QgYmUgZW1wdHkgYXQgdGhpcyBjb250ZXh0LicpO1xuICAgIH1cbiAgfVxuXG4gIEBEaXJlY3RpdmUoXG4gICB7XG4gICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogZGlyZWN0aXZlLXNlbGVjdG9yXG4gICAgIHNlbGVjdG9yOiAnW3NlYXJjaFN0YXRlXScsXG4gICB9LFxuICApXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkaXJlY3RpdmUtY2xhc3Mtc3VmZml4XG4gIGV4cG9ydCBjbGFzcyBBZHZhbmNlZFNlYXJjaFN0YXRlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQElucHV0KCkgc2VhcmNoU3RhdGU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBmaWx0ZXJDaGFuZ2VTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSB0YWJsZUluaXRTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgc2VhcmNoOiBBZHZhbmNlZFRhYmxlU2VhcmNoQ29tcG9uZW50LFxuICAgICAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgc3RvcmU6IFN0b3JlPE5neFRhYmxlc1N0YXRlPikge1xuICAgIH1cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLnN0b3JlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VhcmNoID09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQWR2YW5jZWRUYWJsZVNlYXJjaENvbXBvbmVudE5vdE51bGwoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNlYXJjaC50YWJsZSkge1xuICAgICAgICAgIC8vIHNldCBhdXRvIGxvYWQgdG8gZmFsc2VcbiAgICAgICAgICB0aGlzLnNlYXJjaC50YWJsZS5hdXRvTG9hZCA9IGZhbHNlO1xuICAgICAgICAgIC8vIGhhbmRsZSBmaWx0ZXJpbmdcbiAgICAgICAgICB0aGlzLmZpbHRlckNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuc2VhcmNoLmZpbHRlckNoYW5nZS5zdWJzY3JpYmUoKGZpbHRlcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblNlYXJjaEZpbHRlcihmaWx0ZXIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIC8vIGFwcGx5IHRhYmxlIHN0YXRlXG4gICAgICAgICAgdGhpcy5hcHBseVRhYmxlU3RhdGUoKTtcbiAgICAgICAgICAvLyBoYW5kbGUgdGFibGUgaW5pdFxuICAgICAgICAgIHRoaXMudGFibGVJbml0U3Vic2NyaXB0aW9uID0gdGhpcy5zZWFyY2gudGFibGUuaW5pdC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub25UYWJsZUluaXQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXBwbHlUYWJsZVN0YXRlKCkge1xuICAgICAgaWYgKHRoaXMuc2VhcmNoLnRhYmxlKSB7XG4gICAgICAgIC8vIGhhbmRsZSB0YWJsZSBzdGF0ZSAodmlhIGRpcmVjdGl2ZSlcbiAgICAgICAgY29uc3QgdGFibGVTdGF0ZSA9IG5ldyBBZHZhbmNlZFRhYmxlU3RhdGUodGhpcy5zZWFyY2gudGFibGUsIHRoaXMuc3RvcmUpO1xuICAgICAgICB0YWJsZVN0YXRlLnRhYmxlU3RhdGUgPSB0aGlzLnNlYXJjaFN0YXRlIGFzIHN0cmluZztcbiAgICAgICAgdGFibGVTdGF0ZS5uZ09uSW5pdCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblRhYmxlSW5pdCgpIHtcbiAgICAgIHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2VsZWN0VGFibGUsIHsgaWQ6IHRoaXMuc2VhcmNoU3RhdGUgYXMgc3RyaW5nfSksIGZpcnN0KCkpLnN1YnNjcmliZSgoc3RhdGU6IGFueSkgPT4ge1xuICAgICAgICAvLyB1c2Ugb3JkZXJcbiAgICAgICAgaWYgKHN0YXRlKSB7XG4gICAgICAgICAgaWYgKHN0YXRlLm9yZGVyICYmIHN0YXRlLm9yZGVyLmxlbmd0aCAmJiB0aGlzLnNlYXJjaC50YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2gudGFibGUuZGF0YVRhYmxlLm9yZGVyKHN0YXRlLm9yZGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gdXNlIHRleHQgc2VhcmNoXG4gICAgICAgICAgaWYgKHN0YXRlLmZpbHRlciAmJiBzdGF0ZS5maWx0ZXIucSAmJiB0aGlzLnNlYXJjaC50YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2gudGV4dCA9IHN0YXRlLmZpbHRlci5xO1xuICAgICAgICAgICAgdGhpcy5zZWFyY2guY29sbGFwc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlYXJjaC50YWJsZS5zZWFyY2godGhpcy5zZWFyY2gudGV4dCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHVzZSBwcmVkZWZpbmVkIHNlYXJjaFxuICAgICAgICAgIGlmIChzdGF0ZS5maWx0ZXIgJiYgc3RhdGUuZmlsdGVyLnMpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoLnNlbGVjdGVkTGlzdCA9IHRoaXMuc2VhcmNoLnVzZXJTZWFyY2hMaXN0LmZpbmQoKGl0ZW06IHsgbmFtZTogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ubmFtZSA9PT0gc3RhdGUuZmlsdGVyLnM7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlYXJjaC5zZWFyY2goKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN0YXRlLmZpbHRlcikge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHN0YXRlLmZpbHRlcikubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIC8vIHNldCBjb2xsYXBzZWQgdG8gZmFsc2UgKGFkdmFuY2VkIHNlYXJjaClcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2guY29sbGFwc2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMuc2VhcmNoLmZpbHRlciA9IHN0YXRlLmZpbHRlcjtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoLnNlYXJjaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBlbnN1cmUgZW1wdHkgZmlsdGVyIGF0IHRoaXMgbW9tZW50XG4gICAgICAgICAgLy8gYmVjYXVzZSBzZWFyY2goKSBmdW5jdGlvbiB0cmlnZ2VycyBhIHN0b3JlIGRpc3BhdGNoXG4gICAgICAgICAgdGhpcy5zZWFyY2guZmlsdGVyID0ge307XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoLnNlYXJjaCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uU2VhcmNoRmlsdGVyKGZpbHRlcjogYW55KSB7XG4gICAgICBmaWx0ZXIgPSBpc0VtcHR5KGZpbHRlcikgPyBudWxsIDogZmlsdGVyO1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgQXBwZW5kRmlsdGVyKHRoaXMuc2VhcmNoU3RhdGUgYXMgc3RyaW5nLCBmaWx0ZXIpKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLmZpbHRlckNoYW5nZVN1YnNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLmZpbHRlckNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudGFibGVJbml0U3Vic2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMudGFibGVJbml0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgRGlyZWN0aXZlLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIE5hdmlnYXRpb25TdGFydCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlU2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1zZWFyY2guY29tcG9uZW50JztcbmltcG9ydCB7IE5neFRhYmxlc1N0YXRlIH0gZnJvbSAnLi4vcmVkdWNlcnMnO1xuaW1wb3J0IHsgQWR2YW5jZWRTZWFyY2hTdGF0ZSB9IGZyb20gJy4vYWR2YW5jZS1zZWFyY2gtc3RhdGUuZGlyZWN0aXZlJztcblxuQERpcmVjdGl2ZSh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogZGlyZWN0aXZlLXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnW3JvdXRlclNlYXJjaFN0YXRlXSdcbn0pXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkU2VhcmNoUm91dGVyU3RhdGUgZXh0ZW5kcyBBZHZhbmNlZFNlYXJjaFN0YXRlIGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xuICBwcml2YXRlIF9yb3V0ZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBfZW50ZXJpbmdTdGF0ZSA9IHRydWU7XG4gIHByaXZhdGUgX2FwcGx5U3RhdGUgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgc2VhcmNoOiBBZHZhbmNlZFRhYmxlU2VhcmNoQ29tcG9uZW50LFxuICAgIEBPcHRpb25hbCgpIHByb3RlY3RlZCBzdG9yZTogU3RvcmU8Tmd4VGFibGVzU3RhdGU+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3JvdXRlcjogUm91dGVyXG4gICkge1xuICAgIC8vIGNhbGwgc3VwZXIgY29uc3RydWN0b3JcbiAgICBzdXBlcihzZWFyY2gsIHN0b3JlKTtcbiAgICAvLyBzZXQgc2VhcmNoIHN0YXRlIGR5bmFtaWNhbGx5IGFjY29yZGluZyB0byByb3V0ZVxuICAgIHRoaXMuX3JvdXRlclN1YnNjcmlwdGlvbiA9IHRoaXMuX3JvdXRlci5ldmVudHNcbiAgICAgIC5waXBlKGZpbHRlcigoZXZlbnQpID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0IHx8IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpXG4gICAgICAuc3Vic2NyaWJlKChldmVudDogTmF2aWdhdGlvblN0YXJ0IHwgTmF2aWdhdGlvbkVuZCkgPT4ge1xuICAgICAgICAvLyBjYXB0dXJlIHVybHMgcmVnYXJkaW5nIHRhYiBjaGFuZ2luZyB3aGlsZSB0aGUgY29tcG9uZW50IGlzIGFjdGl2ZVxuICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQgJiYgIXRoaXMuX2VudGVyaW5nU3RhdGUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gc2V0IHNlYXJjaCBzdGF0ZVxuICAgICAgICAgICAgdGhpcy5zZWFyY2hTdGF0ZSA9IG5ldyBVUkwoZXZlbnQudXJsLCBsb2NhdGlvbi5vcmlnaW4pLnBhdGhuYW1lO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSB0cnlpbmcgdG8gc2V0IHNlYXJjaCBzdGF0ZSBmb3IgdGhlIGN1cnJlbnQgdGFibGUnLCBlcnIpO1xuICAgICAgICAgICAgLy8gZmFsbGJhY2sgdG8gZXZlbnQgdXJsXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFN0YXRlID0gZXZlbnQudXJsO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB0b29nbGUgYXBwbHlTdGF0ZVxuICAgICAgICAgIHRoaXMuX2FwcGx5U3RhdGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNhcHR1cmUgdXJsIG9mIHRoZSBmaXJzdCBhY3RpdmF0aW9uIG9mIHRoZSBjb21wb25lbnQgKGUuZy4gY29taW5nIGZyb20gYW5vdGhlciByb3V0ZSlcbiAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCAmJiB0aGlzLl9lbnRlcmluZ1N0YXRlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIHNldCBzZWFyY2ggc3RhdGVcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoU3RhdGUgPSBuZXcgVVJMKGV2ZW50LnVybEFmdGVyUmVkaXJlY3RzLCBsb2NhdGlvbi5vcmlnaW4pLnBhdGhuYW1lO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSB0cnlpbmcgdG8gc2V0IHNlYXJjaCBzdGF0ZSBmb3IgdGhlIGN1cnJlbnQgdGFibGUnLCBlcnIpO1xuICAgICAgICAgICAgLy8gZmFsbGJhY2sgdG8gZXZlbnQgdXJsQWZ0ZXJSZWRpcmVjdHNcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoU3RhdGUgPSBldmVudC51cmxBZnRlclJlZGlyZWN0cztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gdG9nZ2xlIGVudGVyaW5nU3RhdGVcbiAgICAgICAgICB0aGlzLl9lbnRlcmluZ1N0YXRlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2FwcGx5U3RhdGUpIHtcbiAgICAgICAgICAvLyBhcHBseSBuZXcgdGFibGUgc3RhdGVcbiAgICAgICAgICBzdXBlci5hcHBseVRhYmxlU3RhdGUoKTtcbiAgICAgICAgICB0aGlzLl9hcHBseVN0YXRlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8gZGVzdHJveSBvd24gc3Vic2NyaXB0aW9uc1xuICAgIGlmICh0aGlzLl9yb3V0ZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX3JvdXRlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICAvLyBkZXN0cm95IHBhcmVudCBzdWJzY3JpcHRpb25zXG4gICAgcmV0dXJuIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gIH1cbn1cbiIsImltcG9ydCB7TmdNb2R1bGUsIE9uSW5pdCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7QWR2YW5jZWRUYWJsZUNvbXBvbmVudCwgQ09MVU1OX0ZPUk1BVFRFUlN9IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtBZHZhbmNlZFRhYmxlU2VhcmNoQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUtc2VhcmNoLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtCdG5FeHBEaXJlY3RpdmV9IGZyb20gJy4vZGlyZWN0aXZlcy9idG5leHAuZGlyZWN0aXZlJztcbmltcG9ydCB7QWR2YW5jZWRUYWJsZVNldHRpbmdzQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUtc2V0dGluZ3MuY29tcG9uZW50JztcbmltcG9ydCB7U2hhcmVkTW9kdWxlLCBUZW1wbGF0ZVBpcGV9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUtbW9kYWwvYWR2YW5jZWQtdGFibGUtbW9kYWwtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHtSb3V0ZXJNb2RhbE1vZHVsZX0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24vcm91dGluZyc7XG5pbXBvcnQgeyBBZHZhbmNlZFNlYXJjaEZvcm1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtc2VhcmNoLWZvcm0vYWR2YW5jZWQtc2VhcmNoLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7QWR2YW5jZWRGb3Jtc01vZHVsZX0gZnJvbSAnQHVuaXZlcnNpcy9mb3Jtcyc7XG5pbXBvcnQge0Zvcm1pb01vZHVsZX0gZnJvbSAnYW5ndWxhci1mb3JtaW8nO1xuaW1wb3J0IHsgQWR2YW5jZWRMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLWxpc3QvYWR2YW5jZWQtbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHtSb3V0ZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICAgIEFkdmFuY2VkU2VhcmNoQ29uZmlndXJhdGlvblJlc29sdmVyLFxuICAgIEFkdmFuY2VkVGFibGVDb25maWd1cmF0aW9uUmVzb2x2ZXJcbn0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLXJlc29sdmVycyc7XG5pbXBvcnQge0FkdmFuY2VkUm93QWN0aW9uQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtcm93LWFjdGlvbi9hZHZhbmNlZC1yb3ctYWN0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQge0ZPUk1BVFRFUlN9IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzLmludGVyZmFjZSc7XG5cbmltcG9ydCB7VEFCTEVTX0VMfSBmcm9tICcuL2kxOG4vdGFibGVzLmVsJztcbmltcG9ydCB7VEFCTEVTX0VOfSBmcm9tICcuL2kxOG4vdGFibGVzLmVuJztcbmltcG9ydCB7IFRhYmxlU2ltcGxlSGVhZGVyQ29tcG9uZW50LCBTaW1wbGVIZWFkZXJUb29sc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90YWJsZS1zaW1wbGUtaGVhZGVyL3RhYmxlLXNpbXBsZS1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IE1vZGFsTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBQcm9ncmVzc2Jhck1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvcHJvZ3Jlc3NiYXInO1xuaW1wb3J0IHsgQWR2YW5jZWRTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtc2VsZWN0L2FkdmFuY2VkLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWR2YW5jZWRTZWxlY3RTZXJ2aWNlIH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLXNlbGVjdC9hZHZhbmNlZC1zZWxlY3Quc2VydmljZSc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlRWRpdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2FkdmFuY2VkLXRhYmxlLWVkaXRvci5kaXJlY3RpdmUnO1xuaW1wb3J0IHtBZHZhbmNlZEFnZ3JlZ2F0b3JDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC1hZ2dyZWdhdG9yL2FkdmFuY2VkLWFnZ3JlZ2F0b3IuY29tcG9uZW50JztcbmltcG9ydCB7QWR2YW5jZWRBZ2dyZWdhdG9yTGlzdENvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLWFnZ3JlZ2F0b3ItbGlzdC9hZHZhbmNlZC1hZ2dyZWdhdG9yLWxpc3QuY29tcG9uZW50JztcbmltcG9ydCB7QWR2YW5jZWRBZ2dyZWdhdG9yU2VydmljZX0gZnJvbSAnLi9zZXJ2aWNlcy9hZHZhbmNlZC1hZ2dyZWdhdG9yL2FkdmFuY2VkLWFnZ3JlZ2F0b3Iuc2VydmljZSc7XG5pbXBvcnQge0FkdmFuY2VkQWdncmVnYXRvclBpcGV9IGZyb20gJy4vcGlwZXMvYWR2YW5jZWQtYWdncmVnYXRvci5waXBlJztcbmltcG9ydCB7R3JvdXBCeVBpcGUsIE5nUGlwZXNNb2R1bGV9IGZyb20gJ25neC1waXBlcyc7XG5pbXBvcnQge1BhcnNlVGl0bGVQaXBlfSBmcm9tICcuL3BpcGVzL2FkdmFuc2VkLWFnZ3JlZ2F0b3ItbGlzdC10aXRsZS1wYXJzZS5waXBlJztcbmltcG9ydCB7QWRkSXRlbXNDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9hZGQtaXRlbXMvYWRkLWl0ZW1zLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBZHZhbmNlZFNlYXJjaFN0YXRlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2FkdmFuY2Utc2VhcmNoLXN0YXRlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlU3RhdGUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvYWR2YW5jZS10YWJsZS1zdGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQWR2YW5jZWRTZWFyY2hSb3V0ZXJTdGF0ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9hZHZhbmNlZC1zZWFyY2gtcm91dGVyLXN0YXRlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlU2VhcmNoQmFzZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1zZWFyY2gtYmFzZSc7XG5pbXBvcnQgeyBDb2x1bW5TZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jb2x1bW4tc2VsZWN0b3IvY29sdW1uLXNlbGVjdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb2x1bW5TZWxlY3RvclNlcnZpY2UgfSBmcm9tICcuL2NvbXBvbmVudHMvY29sdW1uLXNlbGVjdG9yL2NvbHVtbi1zZWxlY3Rvci5zZXJ2aWNlJztcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgU2hhcmVkTW9kdWxlLFxuICAgICAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBSb3V0ZXJNb2R1bGUsXG4gICAgICAgIFJvdXRlck1vZGFsTW9kdWxlLFxuICAgICAgICBGb3JtaW9Nb2R1bGUsXG4gICAgICAgIEFkdmFuY2VkRm9ybXNNb2R1bGUsXG4gICAgICAgIFNoYXJlZE1vZHVsZSxcbiAgICAgICAgTW9kYWxNb2R1bGUsXG4gICAgICAgIFByb2dyZXNzYmFyTW9kdWxlLFxuICAgICAgICBOZ1BpcGVzTW9kdWxlXG4gICAgXSxcbiAgICBwcm92aWRlcnM6IFtEYXRlUGlwZSwgVGVtcGxhdGVQaXBlLFxuICAgICAge1xuICAgICAgICBwcm92aWRlOiBDT0xVTU5fRk9STUFUVEVSUyxcbiAgICAgICAgdXNlVmFsdWU6IEZPUk1BVFRFUlNcbiAgICAgIH0sXG5cbiAgICAgIEFkdmFuY2VkVGFibGVDb25maWd1cmF0aW9uUmVzb2x2ZXIsXG4gICAgICAgIEFkdmFuY2VkU2VhcmNoQ29uZmlndXJhdGlvblJlc29sdmVyLFxuICAgICAgICBBZHZhbmNlZFNlbGVjdFNlcnZpY2UsXG4gICAgICAgIEFkdmFuY2VkQWdncmVnYXRvclNlcnZpY2UsXG4gICAgICAgIENvbHVtblNlbGVjdG9yU2VydmljZSxcbiAgICAgICAgR3JvdXBCeVBpcGVcbiAgICAgIF0sXG4gICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgIEFkdmFuY2VkVGFibGVDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkVGFibGVTZWFyY2hCYXNlQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFRhYmxlU2VhcmNoQ29tcG9uZW50LFxuICAgICAgICBCdG5FeHBEaXJlY3RpdmUsXG4gICAgICAgIEFkdmFuY2VkVGFibGVTZXR0aW5nc0NvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRUYWJsZU1vZGFsQmFzZUNvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRTZWFyY2hGb3JtQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZExpc3RDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkUm93QWN0aW9uQ29tcG9uZW50LFxuICAgICAgICBUYWJsZVNpbXBsZUhlYWRlckNvbXBvbmVudCxcbiAgICAgICAgU2ltcGxlSGVhZGVyVG9vbHNDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkU2VsZWN0Q29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFRhYmxlRWRpdG9yRGlyZWN0aXZlLFxuICAgICAgICBBZHZhbmNlZEFnZ3JlZ2F0b3JDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkQWdncmVnYXRvckxpc3RDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkQWdncmVnYXRvclBpcGUsXG4gICAgICAgIFBhcnNlVGl0bGVQaXBlLFxuICAgICAgICBBZGRJdGVtc0NvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRTZWFyY2hTdGF0ZSxcbiAgICAgICAgQWR2YW5jZWRUYWJsZVN0YXRlLFxuICAgICAgICBBZHZhbmNlZFNlYXJjaFJvdXRlclN0YXRlLFxuICAgICAgICBDb2x1bW5TZWxlY3RvckNvbXBvbmVudFxuICAgIF0sXG4gICAgZXhwb3J0czogW1xuICAgICAgICBBZHZhbmNlZFRhYmxlQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFRhYmxlU2VhcmNoQ29tcG9uZW50LFxuICAgICAgICBCdG5FeHBEaXJlY3RpdmUsXG4gICAgICAgIEFkdmFuY2VkVGFibGVTZXR0aW5nc0NvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRTZWFyY2hGb3JtQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZExpc3RDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkUm93QWN0aW9uQ29tcG9uZW50LFxuICAgICAgICBUYWJsZVNpbXBsZUhlYWRlckNvbXBvbmVudCxcbiAgICAgICAgU2ltcGxlSGVhZGVyVG9vbHNDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkU2VsZWN0Q29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFRhYmxlRWRpdG9yRGlyZWN0aXZlLFxuICAgICAgICBBZHZhbmNlZEFnZ3JlZ2F0b3JDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkQWdncmVnYXRvckxpc3RDb21wb25lbnQsXG4gICAgICAgIEFkZEl0ZW1zQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFNlYXJjaFN0YXRlLFxuICAgICAgICBBZHZhbmNlZFRhYmxlU3RhdGUsXG4gICAgICAgIEFkdmFuY2VkU2VhcmNoUm91dGVyU3RhdGUsXG4gICAgICAgIENvbHVtblNlbGVjdG9yQ29tcG9uZW50XG4gICAgXSxcbiAgICBlbnRyeUNvbXBvbmVudHM6IFtcbiAgICAgICAgQWR2YW5jZWRUYWJsZU1vZGFsQmFzZUNvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRUYWJsZVNldHRpbmdzQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFJvd0FjdGlvbkNvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRTZWxlY3RDb21wb25lbnQsXG4gICAgICAgIEFkZEl0ZW1zQ29tcG9uZW50LFxuICAgICAgICBDb2x1bW5TZWxlY3RvckNvbXBvbmVudFxuICAgIF0sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlc01vZHVsZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSkge1xuICAgICAgICB0aGlzLm5nT25Jbml0KCkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIGxvYWRpbmcgdGFibGVzIG1vZHVsZScpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5zZXRUcmFuc2xhdGlvbignZW4nLCBUQUJMRVNfRU4sIHRydWUpO1xuICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLnNldFRyYW5zbGF0aW9uKCdlbCcsIFRBQkxFU19FTCwgdHJ1ZSk7XG4gICAgfVxuXG59XG4iXSwibmFtZXMiOlsidHNsaWJfMS5fX2V4dGVuZHMiLCJ0c2xpYl8xLl9fdmFsdWVzIiwiSVNPNjM5MS5nZXROYXRpdmVOYW1lIiwiZmlsdGVyIiwic2VsZWN0Iiwic2tpcCIsImZyb21UYWJsZXMuc2VsZWN0VGFibGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7cUJBc0JpQixFQUFFOzs7Ozs7SUFJSCxnQ0FBUTs7OztjQUFDLElBQVk7O1FBQ2pDLElBQUksTUFBTSxHQUFHLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0QsSUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUU7WUFDaEMsT0FBTyxNQUFNLENBQUM7U0FDZjtRQUNELE1BQU0sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsdUJBQXVCLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDeEQsT0FBTyxNQUFNLENBQUM7Ozs7Ozs7SUFLTiwrQ0FBYTs7Ozs7SUFBdkIsVUFBd0IsSUFBUyxFQUFFLE9BQWlFO1FBQ2xHLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTs7WUFDcEQsSUFBTSxjQUFjLEdBQW1CLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDOztZQUN6RSxJQUFNLE1BQU0sR0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7WUFDakQsSUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBQyxPQUFPO2dCQUM1QyxJQUFJLE9BQU8sT0FBTyxLQUFL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QyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7eUJBQ3JDOzt3QkFFRCxJQUFJLFdBQVcsZUFBWSxXQUFXLFlBQVMsTUFBTSxFQUFFOzs0QkFFckQsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsV0FBVyxZQUFTLENBQUM7eUJBQzVDOzZCQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7NEJBQzdFLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3lCQUNwRDt3QkFDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFOzRCQUNyRyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQzt5QkFDdEQ7d0JBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTs0QkFDdkUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7eUJBQ3REOzt3QkFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFOzRCQUN0RSxPQUFPLElBQUks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
|