@openziti/ziti-console-lib 0.10.0 → 0.10.2
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/assets/fonts/icomoon.eot +0 -0
- package/assets/fonts/icomoon.svg +7 -1
- package/assets/fonts/icomoon.ttf +0 -0
- package/assets/fonts/icomoon.woff +0 -0
- package/assets/fonts/icomoon.woff2 +0 -0
- package/assets/styles/dark.css +2 -0
- package/assets/styles/global.scss +12 -4
- package/assets/styles/icons.css +3 -0
- package/assets/styles/ziti.css +13 -0
- package/esm2022/lib/features/confirm/confirm.component.mjs +3 -3
- package/esm2022/lib/features/creation-summary-dialog/creation-summary-dialog.component.mjs +1 -1
- package/esm2022/lib/features/data-table/data-table.component.mjs +14 -3
- package/esm2022/lib/features/json-view/json-view.component.mjs +2 -2
- package/esm2022/lib/features/loading-indicator/loading-indicator.component.mjs +2 -2
- package/esm2022/lib/features/preview-selections/preview-selections.component.mjs +1 -1
- package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.component.mjs +1 -1
- package/esm2022/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.mjs +1 -1
- package/esm2022/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.mjs +1 -1
- package/esm2022/lib/features/projectable-forms/config-type/config-type-form.component.mjs +1 -1
- package/esm2022/lib/features/projectable-forms/configuration/configuration-form.component.mjs +1 -1
- package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.component.mjs +1 -1
- package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.mjs +3 -3
- package/esm2022/lib/features/projectable-forms/form-field-container/form-field-container.component.mjs +6 -3
- package/esm2022/lib/features/projectable-forms/form-header/form-header.component.mjs +3 -3
- package/esm2022/lib/features/projectable-forms/identity/identity-form.component.mjs +3 -3
- package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.mjs +3 -3
- package/esm2022/lib/features/projectable-forms/posture-check/posture-check-form.component.mjs +3 -3
- package/esm2022/lib/features/projectable-forms/service/service-form.component.mjs +1 -1
- package/esm2022/lib/features/projectable-forms/service/simple-service/simple-service.component.mjs +1 -1
- package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.mjs +3 -3
- package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.component.mjs +3 -3
- package/esm2022/lib/features/projectable-forms/terminator/terminator-form.component.mjs +1 -1
- package/esm2022/lib/features/projectable-forms/transit-router/transit-router-form.component.mjs +228 -0
- package/esm2022/lib/features/projectable-forms/transit-router/transit-router-form.service.mjs +119 -0
- package/esm2022/lib/features/qr-code/qr-code.component.mjs +18 -3
- package/esm2022/lib/pages/identities/identities-page.component.mjs +11 -12
- package/esm2022/lib/pages/identities/identities-page.service.mjs +15 -1
- package/esm2022/lib/pages/jwt-signers/jwt-signers-page.component.mjs +49 -4
- package/esm2022/lib/pages/services/services-page.component.mjs +13 -4
- package/esm2022/lib/pages/services/services-page.service.mjs +7 -7
- package/esm2022/lib/pages/transit-routers/transit-routers-page.component.mjs +140 -0
- package/esm2022/lib/pages/transit-routers/transit-routers-page.service.mjs +248 -0
- package/esm2022/lib/services/node-data.service.mjs +21 -1
- package/esm2022/lib/services/ziti-controller-data.service.mjs +12 -1
- package/esm2022/lib/services/ziti-data.service.mjs +1 -1
- package/esm2022/lib/shared/list-page-component.class.mjs +14 -1
- package/esm2022/lib/ziti-console-lib.module.mjs +11 -1
- package/esm2022/public-api.mjs +5 -1
- package/fesm2022/openziti-ziti-console-lib.mjs +1504 -696
- package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
- package/lib/features/data-table/data-table.component.d.ts +1 -0
- package/lib/features/data-table/data-table.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/form-field-container/form-field-container.component.d.ts +2 -1
- package/lib/features/projectable-forms/form-field-container/form-field-container.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/identity/identity-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/transit-router/transit-router-form.component.d.ts +51 -0
- package/lib/features/projectable-forms/transit-router/transit-router-form.component.d.ts.map +1 -0
- package/lib/features/projectable-forms/transit-router/transit-router-form.service.d.ts +27 -0
- package/lib/features/projectable-forms/transit-router/transit-router-form.service.d.ts.map +1 -0
- package/lib/features/qr-code/qr-code.component.d.ts +4 -0
- package/lib/features/qr-code/qr-code.component.d.ts.map +1 -1
- package/lib/pages/identities/identities-page.component.d.ts.map +1 -1
- package/lib/pages/identities/identities-page.service.d.ts +1 -0
- package/lib/pages/identities/identities-page.service.d.ts.map +1 -1
- package/lib/pages/jwt-signers/jwt-signers-page.component.d.ts +2 -0
- package/lib/pages/jwt-signers/jwt-signers-page.component.d.ts.map +1 -1
- package/lib/pages/services/services-page.component.d.ts +3 -1
- package/lib/pages/services/services-page.component.d.ts.map +1 -1
- package/lib/pages/services/services-page.service.d.ts +2 -2
- package/lib/pages/services/services-page.service.d.ts.map +1 -1
- package/lib/pages/transit-routers/transit-routers-page.component.d.ts +37 -0
- package/lib/pages/transit-routers/transit-routers-page.component.d.ts.map +1 -0
- package/lib/pages/transit-routers/transit-routers-page.service.d.ts +50 -0
- package/lib/pages/transit-routers/transit-routers-page.service.d.ts.map +1 -0
- package/lib/services/node-data.service.d.ts +1 -0
- package/lib/services/node-data.service.d.ts.map +1 -1
- package/lib/services/ziti-controller-data.service.d.ts +1 -0
- package/lib/services/ziti-controller-data.service.d.ts.map +1 -1
- package/lib/services/ziti-data.service.d.ts +1 -0
- package/lib/services/ziti-data.service.d.ts.map +1 -1
- package/lib/shared/list-page-component.class.d.ts +1 -0
- package/lib/shared/list-page-component.class.d.ts.map +1 -1
- package/lib/ziti-console-lib.module.d.ts +79 -77
- package/lib/ziti-console-lib.module.d.ts.map +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +4 -0
- package/public-api.d.ts.map +1 -1
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import { Injectable, Inject } from "@angular/core";
|
|
2
|
+
import { isEmpty } from 'lodash';
|
|
3
|
+
import moment from 'moment';
|
|
4
|
+
import { ListPageServiceClass } from "../../shared/list-page-service.class";
|
|
5
|
+
import { TableColumnDefaultComponent } from "../../features/data-table/column-headers/table-column-default/table-column-default.component";
|
|
6
|
+
import { SETTINGS_SERVICE } from "../../services/settings.service";
|
|
7
|
+
import { ZITI_DATA_SERVICE } from "../../services/ziti-data.service";
|
|
8
|
+
import { EdgeRouter } from "../../models/edge-router";
|
|
9
|
+
import { GrowlerModel } from "../../features/messaging/growler.model";
|
|
10
|
+
import { SHAREDZ_EXTENSION } from "../../features/extendable/extensions-noop.service";
|
|
11
|
+
import { ConfirmComponent } from "../../features/confirm/confirm.component";
|
|
12
|
+
import { TableCellNameComponent } from "../../features/data-table/cells/table-cell-name/table-cell-name.component";
|
|
13
|
+
import * as i0 from "@angular/core";
|
|
14
|
+
import * as i1 from "../../features/data-table/data-table-filter.service";
|
|
15
|
+
import * as i2 from "../../services/csv-download.service";
|
|
16
|
+
import * as i3 from "../../features/messaging/growler.service";
|
|
17
|
+
import * as i4 from "@angular/material/dialog";
|
|
18
|
+
import * as i5 from "@angular/router";
|
|
19
|
+
import * as i6 from "../../services/settings-service.class";
|
|
20
|
+
import * as i7 from "../../services/ziti-data.service";
|
|
21
|
+
class TransitRoutersPageService extends ListPageServiceClass {
|
|
22
|
+
constructor(settings, filterService, zitiService, csvDownloadService, growlerService, dialogForm, extService, router) {
|
|
23
|
+
super(settings, filterService, csvDownloadService, extService, router);
|
|
24
|
+
this.zitiService = zitiService;
|
|
25
|
+
this.csvDownloadService = csvDownloadService;
|
|
26
|
+
this.growlerService = growlerService;
|
|
27
|
+
this.dialogForm = dialogForm;
|
|
28
|
+
this.extService = extService;
|
|
29
|
+
this.router = router;
|
|
30
|
+
this.paging = this.DEFAULT_PAGING;
|
|
31
|
+
this.modalType = 'edge-router';
|
|
32
|
+
this.CSV_COLUMNS = [
|
|
33
|
+
{ label: 'Name', path: 'name' },
|
|
34
|
+
{ label: 'Verified', path: 'isVerified' },
|
|
35
|
+
{ label: 'Online', path: 'isOnline' },
|
|
36
|
+
{ label: 'Created', path: 'createdAt' },
|
|
37
|
+
{ label: 'Token', path: 'enrollmentToken' },
|
|
38
|
+
{ label: 'No Traversal', path: 'noTraversal' },
|
|
39
|
+
{ label: 'Fingerprint', path: 'fingerprint' },
|
|
40
|
+
{ label: 'Disabled', path: 'disabled' },
|
|
41
|
+
{ label: 'Tunneler Enabled', path: 'isTunnelerEnabled' },
|
|
42
|
+
{ label: 'Unverified CertPem', path: 'unverifiedCertPem' },
|
|
43
|
+
{ label: 'Unverified Fingerprint', path: 'unverifiedFingerprint' },
|
|
44
|
+
{ label: 'ID', path: 'id' },
|
|
45
|
+
];
|
|
46
|
+
this.selectedEdgeRouter = new EdgeRouter();
|
|
47
|
+
this.columnFilters = {
|
|
48
|
+
name: '',
|
|
49
|
+
os: '',
|
|
50
|
+
createdAt: '',
|
|
51
|
+
};
|
|
52
|
+
this.menuItems = [
|
|
53
|
+
{ name: 'Edit', action: 'update' },
|
|
54
|
+
{ name: 'Download JWT', action: 'download-enrollment' },
|
|
55
|
+
{ name: 'Reset Enrollment', action: 'reset-enrollment' },
|
|
56
|
+
{ name: 'Re-Enroll', action: 're-enroll' },
|
|
57
|
+
{ name: 'Delete', action: 'delete' },
|
|
58
|
+
];
|
|
59
|
+
this.tableHeaderActions = [
|
|
60
|
+
{ name: 'Download All', action: 'download-all' },
|
|
61
|
+
{ name: 'Download Selected', action: 'download-selected' },
|
|
62
|
+
];
|
|
63
|
+
this.resourceType = 'transit-routers';
|
|
64
|
+
this.validate = (formData) => {
|
|
65
|
+
return Promise.resolve({ passed: true });
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
initTableColumns() {
|
|
69
|
+
this.initMenuActions();
|
|
70
|
+
const enrollmentTokenFormatter = (row) => {
|
|
71
|
+
const token = row?.data?.enrollmentToken;
|
|
72
|
+
if (token) {
|
|
73
|
+
if (moment(row?.data?.enrollmentExpiresAt).isBefore()) {
|
|
74
|
+
return 'Enrollment Expired';
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
return token;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
return '';
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
const columnFilters = this.columnFilters;
|
|
85
|
+
let tableColumns = [
|
|
86
|
+
{
|
|
87
|
+
colId: 'name',
|
|
88
|
+
field: 'name',
|
|
89
|
+
headerName: 'Name',
|
|
90
|
+
headerComponent: TableColumnDefaultComponent,
|
|
91
|
+
headerComponentParams: this.headerComponentParams,
|
|
92
|
+
cellRenderer: TableCellNameComponent,
|
|
93
|
+
cellRendererParams: { pathRoot: this.basePath, showRouterIcons: true },
|
|
94
|
+
onCellClicked: (data) => {
|
|
95
|
+
if (this.hasSelectedText()) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
this.openEditForm(data?.data?.id);
|
|
99
|
+
},
|
|
100
|
+
resizable: true,
|
|
101
|
+
cellClass: 'nf-cell-vert-align tCol',
|
|
102
|
+
sortable: true,
|
|
103
|
+
filter: true,
|
|
104
|
+
sortColumn: this.sort.bind(this),
|
|
105
|
+
sortDir: 'asc'
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
colId: 'verified',
|
|
109
|
+
field: 'isVerified',
|
|
110
|
+
headerName: 'Verified',
|
|
111
|
+
width: 100,
|
|
112
|
+
sortable: true,
|
|
113
|
+
headerComponent: TableColumnDefaultComponent,
|
|
114
|
+
resizable: true,
|
|
115
|
+
cellClass: 'nf-cell-vert-align tCol',
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
colId: 'online',
|
|
119
|
+
field: 'isOnline',
|
|
120
|
+
headerName: 'Online',
|
|
121
|
+
width: 100,
|
|
122
|
+
headerComponent: TableColumnDefaultComponent,
|
|
123
|
+
resizable: true,
|
|
124
|
+
cellClass: 'nf-cell-vert-align tCol',
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
colId: 'createdAt',
|
|
128
|
+
field: 'createdAt',
|
|
129
|
+
headerName: 'Created At',
|
|
130
|
+
headerComponent: TableColumnDefaultComponent,
|
|
131
|
+
valueFormatter: this.createdAtFormatter,
|
|
132
|
+
resizable: true,
|
|
133
|
+
sortable: true,
|
|
134
|
+
sortColumn: this.sort.bind(this),
|
|
135
|
+
cellClass: 'nf-cell-vert-align tCol',
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
colId: 'enrollmentToken',
|
|
139
|
+
field: 'enrollmentToken',
|
|
140
|
+
headerName: 'Token',
|
|
141
|
+
headerComponent: TableColumnDefaultComponent,
|
|
142
|
+
valueFormatter: enrollmentTokenFormatter,
|
|
143
|
+
resizable: true,
|
|
144
|
+
cellClass: 'nf-cell-vert-align tCol',
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
colId: 'jwt',
|
|
148
|
+
field: 'enrollmentJwt',
|
|
149
|
+
headerName: 'JWT',
|
|
150
|
+
headerComponent: TableColumnDefaultComponent,
|
|
151
|
+
cellRenderer: 'cellTokenComponent',
|
|
152
|
+
resizable: true,
|
|
153
|
+
cellClass: 'nf-cell-vert-align tCol',
|
|
154
|
+
}
|
|
155
|
+
];
|
|
156
|
+
if (this.extService.processTableColumns) {
|
|
157
|
+
tableColumns = this.extService.processTableColumns(tableColumns);
|
|
158
|
+
}
|
|
159
|
+
return tableColumns;
|
|
160
|
+
}
|
|
161
|
+
getData(filters, sort, page) {
|
|
162
|
+
// we can customize filters or sorting here before moving on...
|
|
163
|
+
this.paging.page = page || this.paging.page;
|
|
164
|
+
return super.getTableData('transit-routers', this.paging, filters, sort)
|
|
165
|
+
.then((results) => {
|
|
166
|
+
return this.processData(results);
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
processData(results) {
|
|
170
|
+
if (!isEmpty(results?.data)) {
|
|
171
|
+
//pre-process data before rendering
|
|
172
|
+
results.data = this.addActionsPerRow(results);
|
|
173
|
+
}
|
|
174
|
+
return results;
|
|
175
|
+
}
|
|
176
|
+
addActionsPerRow(results) {
|
|
177
|
+
return results.data.map((row) => {
|
|
178
|
+
row.actionList = ['update', 're-enroll', 'delete'];
|
|
179
|
+
if (this.hasEnrolmentToken(row)) {
|
|
180
|
+
row.actionList.push('download-enrollment');
|
|
181
|
+
}
|
|
182
|
+
this.addListItemExtensionActions(row);
|
|
183
|
+
return row;
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
hasEnrolmentToken(item) {
|
|
187
|
+
return !isEmpty(item?.enrollmentJwt);
|
|
188
|
+
}
|
|
189
|
+
getJWT(identity) {
|
|
190
|
+
return identity.enrollmentJwt;
|
|
191
|
+
}
|
|
192
|
+
downloadJWT(jwt, name) {
|
|
193
|
+
const element = document.createElement('a');
|
|
194
|
+
element.setAttribute('href', 'data:application/ziti-jwt;charset=utf-8,' + encodeURIComponent(jwt));
|
|
195
|
+
element.setAttribute('download', name + ".jwt");
|
|
196
|
+
element.style.display = 'none';
|
|
197
|
+
document.body.appendChild(element);
|
|
198
|
+
element.click();
|
|
199
|
+
document.body.removeChild(element);
|
|
200
|
+
}
|
|
201
|
+
reenroll(router) {
|
|
202
|
+
const data = {
|
|
203
|
+
appendId: 'ReenrollRouter',
|
|
204
|
+
title: 'Re-Enroll Router',
|
|
205
|
+
message: `<p>If the router is currently connected, it will be disconnected until the enrollment process is completed with the newly generated JWT. <p> Are you sure you want to re-enroll the selected router?`,
|
|
206
|
+
confirmLabel: 'Yes',
|
|
207
|
+
cancelLabel: 'Oops, no get me out of here',
|
|
208
|
+
showCancelLink: true
|
|
209
|
+
};
|
|
210
|
+
this.dialogRef = this.dialogForm.open(ConfirmComponent, {
|
|
211
|
+
data: data,
|
|
212
|
+
autoFocus: false,
|
|
213
|
+
});
|
|
214
|
+
return this.dialogRef.afterClosed().toPromise().then((result) => {
|
|
215
|
+
if (result?.confirmed) {
|
|
216
|
+
return this.zitiService.post(`transit-routers/${router.id}/re-enroll`, {}, true).then((result) => {
|
|
217
|
+
const growlerData = new GrowlerModel('success', 'Success', `Re-enroll Confirmed`, `Router re-enroll was sent. A new enrollment token is now available`);
|
|
218
|
+
this.growlerService.show(growlerData);
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
return Promise.resolve();
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
openUpdate(entity) {
|
|
227
|
+
//Deprecated: No-Op
|
|
228
|
+
}
|
|
229
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TransitRoutersPageService, deps: [{ token: SETTINGS_SERVICE }, { token: i1.DataTableFilterService }, { token: ZITI_DATA_SERVICE }, { token: i2.CsvDownloadService }, { token: i3.GrowlerService }, { token: i4.MatDialog }, { token: SHAREDZ_EXTENSION }, { token: i5.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
230
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TransitRoutersPageService, providedIn: 'root' }); }
|
|
231
|
+
}
|
|
232
|
+
export { TransitRoutersPageService };
|
|
233
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TransitRoutersPageService, decorators: [{
|
|
234
|
+
type: Injectable,
|
|
235
|
+
args: [{
|
|
236
|
+
providedIn: 'root'
|
|
237
|
+
}]
|
|
238
|
+
}], ctorParameters: function () { return [{ type: i6.SettingsServiceClass, decorators: [{
|
|
239
|
+
type: Inject,
|
|
240
|
+
args: [SETTINGS_SERVICE]
|
|
241
|
+
}] }, { type: i1.DataTableFilterService }, { type: i7.ZitiDataService, decorators: [{
|
|
242
|
+
type: Inject,
|
|
243
|
+
args: [ZITI_DATA_SERVICE]
|
|
244
|
+
}] }, { type: i2.CsvDownloadService }, { type: i3.GrowlerService }, { type: i4.MatDialog }, { type: undefined, decorators: [{
|
|
245
|
+
type: Inject,
|
|
246
|
+
args: [SHAREDZ_EXTENSION]
|
|
247
|
+
}] }, { type: i5.Router }]; } });
|
|
248
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNpdC1yb3V0ZXJzLXBhZ2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9wYWdlcy90cmFuc2l0LXJvdXRlcnMvdHJhbnNpdC1yb3V0ZXJzLXBhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQVksT0FBTyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzFDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUMxRSxPQUFPLEVBQ0gsMkJBQTJCLEVBQzlCLE1BQU0sOEZBQThGLENBQUM7QUFFdEcsT0FBTyxFQUFDLGdCQUFnQixFQUFrQixNQUFNLGlDQUFpQyxDQUFDO0FBQ2xGLE9BQU8sRUFBQyxpQkFBaUIsRUFBa0IsTUFBTSxrQ0FBa0MsQ0FBQztBQUVwRixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFLcEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBSXBFLE9BQU8sRUFBbUIsaUJBQWlCLEVBQUMsTUFBTSxtREFBbUQsQ0FBQztBQUN0RyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUUxRSxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSwyRUFBMkUsQ0FBQzs7Ozs7Ozs7O0FBRWpILE1BR2EseUJBQTBCLFNBQVEsb0JBQW9CO0lBMEMvRCxZQUM4QixRQUE4QixFQUN4RCxhQUFxQyxFQUNGLFdBQTRCLEVBQ3RELGtCQUFzQyxFQUN2QyxjQUE4QixFQUM5QixVQUFxQixFQUNNLFVBQTRCLEVBQzVDLE1BQWM7UUFFakMsS0FBSyxDQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBUHBDLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUN0RCx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3ZDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixlQUFVLEdBQVYsVUFBVSxDQUFXO1FBQ00sZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDNUMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQWhEN0IsV0FBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDOUIsY0FBUyxHQUFHLGFBQWEsQ0FBQztRQUV4QixnQkFBVyxHQUFHO1lBQ25CLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFDO1lBQzdCLEVBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFDO1lBQ3ZDLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFDO1lBQ25DLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFDO1lBQ3JDLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUM7WUFDekMsRUFBQyxLQUFLLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUM7WUFDNUMsRUFBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUM7WUFDM0MsRUFBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUM7WUFDckMsRUFBQyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFDO1lBQ3RELEVBQUMsS0FBSyxFQUFFLG9CQUFvQixFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBQztZQUN4RCxFQUFDLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxJQUFJLEVBQUUsdUJBQXVCLEVBQUM7WUFDaEUsRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUM7U0FDNUIsQ0FBQztRQUVGLHVCQUFrQixHQUFRLElBQUksVUFBVSxFQUFFLENBQUM7UUFDM0Msa0JBQWEsR0FBUTtZQUNqQixJQUFJLEVBQUUsRUFBRTtZQUNSLEVBQUUsRUFBRSxFQUFFO1lBQ04sU0FBUyxFQUFFLEVBQUU7U0FDaEIsQ0FBQztRQUVPLGNBQVMsR0FBRztZQUNqQixFQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBQztZQUNoQyxFQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFDO1lBQ3JELEVBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxrQkFBa0IsRUFBQztZQUN0RCxFQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBQztZQUN4QyxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBQztTQUNyQyxDQUFBO1FBRVEsdUJBQWtCLEdBQUc7WUFDMUIsRUFBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUM7WUFDOUMsRUFBQyxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixFQUFDO1NBQzNELENBQUE7UUFFRCxpQkFBWSxHQUFHLGlCQUFpQixDQUFDO1FBZWpDLGFBQVEsR0FBRyxDQUFDLFFBQVEsRUFBNEIsRUFBRTtZQUM5QyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUE7SUFKRCxDQUFDO0lBTUQsZ0JBQWdCO1FBQ1osSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXZCLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNyQyxNQUFNLEtBQUssR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLGVBQWUsQ0FBQztZQUN6QyxJQUFJLEtBQUssRUFBRTtnQkFDUCxJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7b0JBQ25ELE9BQU8sb0JBQW9CLENBQUM7aUJBQy9CO3FCQUFNO29CQUNILE9BQU8sS0FBSyxDQUFDO2lCQUNoQjthQUNKO2lCQUFNO2dCQUNILE9BQU8sRUFBRSxDQUFDO2FBQ2I7UUFDTCxDQUFDLENBQUM7UUFFRixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBR3pDLElBQUksWUFBWSxHQUFHO1lBQ2Y7Z0JBQ0ksS0FBSyxFQUFFLE1BQU07Z0JBQ2IsS0FBSyxFQUFFLE1BQU07Z0JBQ2IsVUFBVSxFQUFFLE1BQU07Z0JBQ2xCLGVBQWUsRUFBRSwyQkFBMkI7Z0JBQzVDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxxQkFBcUI7Z0JBQ2pELFlBQVksRUFBRSxzQkFBc0I7Z0JBQ3BDLGtCQUFrQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRTtnQkFDdEUsYUFBYSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQ3BCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFO3dCQUN4QixPQUFPO3FCQUNWO29CQUNELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDdEMsQ0FBQztnQkFDRCxTQUFTLEVBQUUsSUFBSTtnQkFDZixTQUFTLEVBQUUseUJBQXlCO2dCQUNwQyxRQUFRLEVBQUUsSUFBSTtnQkFDZCxNQUFNLEVBQUUsSUFBSTtnQkFDWixVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNoQyxPQUFPLEVBQUUsS0FBSzthQUNqQjtZQUNEO2dCQUNJLEtBQUssRUFBRSxVQUFVO2dCQUNqQixLQUFLLEVBQUUsWUFBWTtnQkFDbkIsVUFBVSxFQUFFLFVBQVU7Z0JBQ3RCLEtBQUssRUFBRSxHQUFHO2dCQUNWLFFBQVEsRUFBRSxJQUFJO2dCQUNkLGVBQWUsRUFBRSwyQkFBMkI7Z0JBQzVDLFNBQVMsRUFBRSxJQUFJO2dCQUNmLFNBQVMsRUFBRSx5QkFBeUI7YUFDdkM7WUFDRDtnQkFDSSxLQUFLLEVBQUUsUUFBUTtnQkFDZixLQUFLLEVBQUUsVUFBVTtnQkFDakIsVUFBVSxFQUFFLFFBQVE7Z0JBQ3BCLEtBQUssRUFBRSxHQUFHO2dCQUNWLGVBQWUsRUFBRSwyQkFBMkI7Z0JBQzVDLFNBQVMsRUFBRSxJQUFJO2dCQUNmLFNBQVMsRUFBRSx5QkFBeUI7YUFDdkM7WUFDRDtnQkFDSSxLQUFLLEVBQUUsV0FBVztnQkFDbEIsS0FBSyxFQUFFLFdBQVc7Z0JBQ2xCLFVBQVUsRUFBRSxZQUFZO2dCQUN4QixlQUFlLEVBQUUsMkJBQTJCO2dCQUM1QyxjQUFjLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtnQkFDdkMsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDaEMsU0FBUyxFQUFFLHlCQUF5QjthQUN2QztZQUNEO2dCQUNJLEtBQUssRUFBRSxpQkFBaUI7Z0JBQ3hCLEtBQUssRUFBRSxpQkFBaUI7Z0JBQ3hCLFVBQVUsRUFBRSxPQUFPO2dCQUNuQixlQUFlLEVBQUUsMkJBQTJCO2dCQUM1QyxjQUFjLEVBQUUsd0JBQXdCO2dCQUN4QyxTQUFTLEVBQUUsSUFBSTtnQkFDZixTQUFTLEVBQUUseUJBQXlCO2FBQ3ZDO1lBQ0Q7Z0JBQ0ksS0FBSyxFQUFFLEtBQUs7Z0JBQ1osS0FBSyxFQUFFLGVBQWU7Z0JBQ3RCLFVBQVUsRUFBRSxLQUFLO2dCQUNqQixlQUFlLEVBQUUsMkJBQTJCO2dCQUM1QyxZQUFZLEVBQUUsb0JBQW9CO2dCQUNsQyxTQUFTLEVBQUUsSUFBSTtnQkFDZixTQUFTLEVBQUUseUJBQXlCO2FBQ3ZDO1NBQ0osQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRTtZQUNyQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNwRTtRQUVELE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxPQUFPLENBQUMsT0FBcUIsRUFBRSxJQUFVLEVBQUUsSUFBVTtRQUNqRCwrREFBK0Q7UUFDL0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQzVDLE9BQU8sS0FBSyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUM7YUFDbkUsSUFBSSxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7WUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVPLFdBQVcsQ0FBQyxPQUFZO1FBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ3pCLG1DQUFtQztZQUNuQyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNqRDtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxPQUFZO1FBQ2pDLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUM1QixHQUFHLENBQUMsVUFBVSxHQUFHLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNuRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDN0IsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQzthQUM5QztZQUNELElBQUksQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0QyxPQUFPLEdBQUcsQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGlCQUFpQixDQUFDLElBQUk7UUFDbEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUdELE1BQU0sQ0FBQyxRQUFhO1FBQ2hCLE9BQU8sUUFBUSxDQUFDLGFBQWEsQ0FBQztJQUNsQyxDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJO1FBQ2pCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsMENBQTBDLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuRyxPQUFPLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxJQUFJLEdBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQy9CLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoQixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsUUFBUSxDQUFDLE1BQVc7UUFDaEIsTUFBTSxJQUFJLEdBQUc7WUFDVCxRQUFRLEVBQUUsZ0JBQWdCO1lBQzFCLEtBQUssRUFBRSxrQkFBa0I7WUFDekIsT0FBTyxFQUFFLHNNQUFzTTtZQUMvTSxZQUFZLEVBQUUsS0FBSztZQUNuQixXQUFXLEVBQUUsNkJBQTZCO1lBQzFDLGNBQWMsRUFBRSxJQUFJO1NBQ3ZCLENBQUM7UUFDRixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3BELElBQUksRUFBRSxJQUFJO1lBQ1YsU0FBUyxFQUFFLEtBQUs7U0FDbkIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzVELElBQUksTUFBTSxFQUFFLFNBQVMsRUFBRTtnQkFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsTUFBTSxDQUFDLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDN0YsTUFBTSxXQUFXLEdBQUcsSUFBSSxZQUFZLENBQ2hDLFNBQVMsRUFDVCxTQUFTLEVBQ1QscUJBQXFCLEVBQ3JCLG9FQUFvRSxDQUN2RSxDQUFDO29CQUNGLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUMxQyxDQUFDLENBQUMsQ0FBQzthQUNOO2lCQUFNO2dCQUNILE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQzVCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQVk7UUFDbkIsbUJBQW1CO0lBQ3ZCLENBQUM7K0dBNU9RLHlCQUF5QixrQkEyQ3RCLGdCQUFnQixtREFFaEIsaUJBQWlCLHNHQUlqQixpQkFBaUI7bUhBakRwQix5QkFBeUIsY0FGdEIsTUFBTTs7U0FFVCx5QkFBeUI7NEZBQXpCLHlCQUF5QjtrQkFIckMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQTRDUSxNQUFNOzJCQUFDLGdCQUFnQjs7MEJBRXZCLE1BQU07MkJBQUMsaUJBQWlCOzswQkFJeEIsTUFBTTsyQkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIEluamVjdCwgQ29tcG9uZW50fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtjbG9uZURlZXAsIGlzRW1wdHl9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQge0RhdGFUYWJsZUZpbHRlclNlcnZpY2UsIEZpbHRlck9ian0gZnJvbSBcIi4uLy4uL2ZlYXR1cmVzL2RhdGEtdGFibGUvZGF0YS10YWJsZS1maWx0ZXIuc2VydmljZVwiO1xuaW1wb3J0IHtMaXN0UGFnZVNlcnZpY2VDbGFzc30gZnJvbSBcIi4uLy4uL3NoYXJlZC9saXN0LXBhZ2Utc2VydmljZS5jbGFzc1wiO1xuaW1wb3J0IHtcbiAgICBUYWJsZUNvbHVtbkRlZmF1bHRDb21wb25lbnRcbn0gZnJvbSBcIi4uLy4uL2ZlYXR1cmVzL2RhdGEtdGFibGUvY29sdW1uLWhlYWRlcnMvdGFibGUtY29sdW1uLWRlZmF1bHQvdGFibGUtY29sdW1uLWRlZmF1bHQuY29tcG9uZW50XCI7XG5pbXBvcnQge0NhbGxiYWNrUmVzdWx0c30gZnJvbSBcIi4uLy4uL2ZlYXR1cmVzL2xpc3QtcGFnZS1mZWF0dXJlcy9saXN0LXBhZ2UtZm9ybS9saXN0LXBhZ2UtZm9ybS5jb21wb25lbnRcIjtcbmltcG9ydCB7U0VUVElOR1NfU0VSVklDRSwgU2V0dGluZ3NTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2V0dGluZ3Muc2VydmljZVwiO1xuaW1wb3J0IHtaSVRJX0RBVEFfU0VSVklDRSwgWml0aURhdGFTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMveml0aS1kYXRhLnNlcnZpY2VcIjtcbmltcG9ydCB7Q3N2RG93bmxvYWRTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvY3N2LWRvd25sb2FkLnNlcnZpY2VcIjtcbmltcG9ydCB7RWRnZVJvdXRlcn0gZnJvbSBcIi4uLy4uL21vZGVscy9lZGdlLXJvdXRlclwiO1xuaW1wb3J0IHt1bnNldCwgZm9yRWFjaH0gZnJvbSBcImxvZGFzaFwiO1xuaW1wb3J0IHtJVG9vbHRpcEFuZ3VsYXJDb21wfSBmcm9tIFwiYWctZ3JpZC1hbmd1bGFyXCI7XG5pbXBvcnQge0lUb29sdGlwUGFyYW1zfSBmcm9tIFwiYWctZ3JpZC1jb21tdW5pdHlcIjtcbmltcG9ydCB7T1NUb29sdGlwQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vZmVhdHVyZXMvZGF0YS10YWJsZS90b29sdGlwcy9vcy10b29sdGlwLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtHcm93bGVyTW9kZWx9IGZyb20gXCIuLi8uLi9mZWF0dXJlcy9tZXNzYWdpbmcvZ3Jvd2xlci5tb2RlbFwiO1xuaW1wb3J0IHtHcm93bGVyU2VydmljZX0gZnJvbSBcIi4uLy4uL2ZlYXR1cmVzL21lc3NhZ2luZy9ncm93bGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7TWF0RGlhbG9nfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XG5pbXBvcnQge1NldHRpbmdzU2VydmljZUNsYXNzfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2V0dGluZ3Mtc2VydmljZS5jbGFzc1wiO1xuaW1wb3J0IHtFeHRlbnNpb25TZXJ2aWNlLCBTSEFSRURaX0VYVEVOU0lPTn0gZnJvbSBcIi4uLy4uL2ZlYXR1cmVzL2V4dGVuZGFibGUvZXh0ZW5zaW9ucy1ub29wLnNlcnZpY2VcIjtcbmltcG9ydCB7Q29uZmlybUNvbXBvbmVudH0gZnJvbSBcIi4uLy4uL2ZlYXR1cmVzL2NvbmZpcm0vY29uZmlybS5jb21wb25lbnRcIjtcbmltcG9ydCB7Um91dGVyfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQge1RhYmxlQ2VsbE5hbWVDb21wb25lbnR9IGZyb20gXCIuLi8uLi9mZWF0dXJlcy9kYXRhLXRhYmxlL2NlbGxzL3RhYmxlLWNlbGwtbmFtZS90YWJsZS1jZWxsLW5hbWUuY29tcG9uZW50XCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVHJhbnNpdFJvdXRlcnNQYWdlU2VydmljZSBleHRlbmRzIExpc3RQYWdlU2VydmljZUNsYXNzIHtcblxuICAgIHByaXZhdGUgcGFnaW5nID0gdGhpcy5ERUZBVUxUX1BBR0lORztcbiAgICBwdWJsaWMgbW9kYWxUeXBlID0gJ2VkZ2Utcm91dGVyJztcblxuICAgIG92ZXJyaWRlIENTVl9DT0xVTU5TID0gW1xuICAgICAgICB7bGFiZWw6ICdOYW1lJywgcGF0aDogJ25hbWUnfSxcbiAgICAgICAge2xhYmVsOiAnVmVyaWZpZWQnLCBwYXRoOiAnaXNWZXJpZmllZCd9LFxuICAgICAgICB7bGFiZWw6ICdPbmxpbmUnLCBwYXRoOiAnaXNPbmxpbmUnfSxcbiAgICAgICAge2xhYmVsOiAnQ3JlYXRlZCcsIHBhdGg6ICdjcmVhdGVkQXQnfSxcbiAgICAgICAge2xhYmVsOiAnVG9rZW4nLCBwYXRoOiAnZW5yb2xsbWVudFRva2VuJ30sXG4gICAgICAgIHtsYWJlbDogJ05vIFRyYXZlcnNhbCcsIHBhdGg6ICdub1RyYXZlcnNhbCd9LFxuICAgICAgICB7bGFiZWw6ICdGaW5nZXJwcmludCcsIHBhdGg6ICdmaW5nZXJwcmludCd9LFxuICAgICAgICB7bGFiZWw6ICdEaXNhYmxlZCcsIHBhdGg6ICdkaXNhYmxlZCd9LFxuICAgICAgICB7bGFiZWw6ICdUdW5uZWxlciBFbmFibGVkJywgcGF0aDogJ2lzVHVubmVsZXJFbmFibGVkJ30sXG4gICAgICAgIHtsYWJlbDogJ1VudmVyaWZpZWQgQ2VydFBlbScsIHBhdGg6ICd1bnZlcmlmaWVkQ2VydFBlbSd9LFxuICAgICAgICB7bGFiZWw6ICdVbnZlcmlmaWVkIEZpbmdlcnByaW50JywgcGF0aDogJ3VudmVyaWZpZWRGaW5nZXJwcmludCd9LFxuICAgICAgICB7bGFiZWw6ICdJRCcsIHBhdGg6ICdpZCd9LFxuICAgIF07XG5cbiAgICBzZWxlY3RlZEVkZ2VSb3V0ZXI6IGFueSA9IG5ldyBFZGdlUm91dGVyKCk7XG4gICAgY29sdW1uRmlsdGVyczogYW55ID0ge1xuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgb3M6ICcnLFxuICAgICAgICBjcmVhdGVkQXQ6ICcnLFxuICAgIH07XG5cbiAgICBvdmVycmlkZSBtZW51SXRlbXMgPSBbXG4gICAgICAgIHtuYW1lOiAnRWRpdCcsIGFjdGlvbjogJ3VwZGF0ZSd9LFxuICAgICAgICB7bmFtZTogJ0Rvd25sb2FkIEpXVCcsIGFjdGlvbjogJ2Rvd25sb2FkLWVucm9sbG1lbnQnfSxcbiAgICAgICAge25hbWU6ICdSZXNldCBFbnJvbGxtZW50JywgYWN0aW9uOiAncmVzZXQtZW5yb2xsbWVudCd9LFxuICAgICAgICB7bmFtZTogJ1JlLUVucm9sbCcsIGFjdGlvbjogJ3JlLWVucm9sbCd9LFxuICAgICAgICB7bmFtZTogJ0RlbGV0ZScsIGFjdGlvbjogJ2RlbGV0ZSd9LFxuICAgIF1cblxuICAgIG92ZXJyaWRlIHRhYmxlSGVhZGVyQWN0aW9ucyA9IFtcbiAgICAgICAge25hbWU6ICdEb3dubG9hZCBBbGwnLCBhY3Rpb246ICdkb3dubG9hZC1hbGwnfSxcbiAgICAgICAge25hbWU6ICdEb3dubG9hZCBTZWxlY3RlZCcsIGFjdGlvbjogJ2Rvd25sb2FkLXNlbGVjdGVkJ30sXG4gICAgXVxuXG4gICAgcmVzb3VyY2VUeXBlID0gJ3RyYW5zaXQtcm91dGVycyc7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChTRVRUSU5HU19TRVJWSUNFKSBzZXR0aW5nczogU2V0dGluZ3NTZXJ2aWNlQ2xhc3MsXG4gICAgICAgIGZpbHRlclNlcnZpY2U6IERhdGFUYWJsZUZpbHRlclNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoWklUSV9EQVRBX1NFUlZJQ0UpIHByaXZhdGUgeml0aVNlcnZpY2U6IFppdGlEYXRhU2VydmljZSxcbiAgICAgICAgb3ZlcnJpZGUgY3N2RG93bmxvYWRTZXJ2aWNlOiBDc3ZEb3dubG9hZFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZ3Jvd2xlclNlcnZpY2U6IEdyb3dsZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGRpYWxvZ0Zvcm06IE1hdERpYWxvZyxcbiAgICAgICAgQEluamVjdChTSEFSRURaX0VYVEVOU0lPTikgcHJpdmF0ZSBleHRTZXJ2aWNlOiBFeHRlbnNpb25TZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcm91dGVyOiBSb3V0ZXJcbiAgICApIHtcbiAgICAgICAgc3VwZXIoc2V0dGluZ3MsIGZpbHRlclNlcnZpY2UsIGNzdkRvd25sb2FkU2VydmljZSwgZXh0U2VydmljZSwgcm91dGVyKTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZSA9IChmb3JtRGF0YSk6IFByb21pc2U8Q2FsbGJhY2tSZXN1bHRzPiA9PiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBwYXNzZWQ6IHRydWV9KTtcbiAgICB9XG5cbiAgICBpbml0VGFibGVDb2x1bW5zKCk6IGFueSB7XG4gICAgICAgIHRoaXMuaW5pdE1lbnVBY3Rpb25zKCk7XG5cbiAgICAgICAgY29uc3QgZW5yb2xsbWVudFRva2VuRm9ybWF0dGVyID0gKHJvdykgPT4ge1xuICAgICAgICAgICAgY29uc3QgdG9rZW4gPSByb3c/LmRhdGE/LmVucm9sbG1lbnRUb2tlbjtcbiAgICAgICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgICAgIGlmIChtb21lbnQocm93Py5kYXRhPy5lbnJvbGxtZW50RXhwaXJlc0F0KS5pc0JlZm9yZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnRW5yb2xsbWVudCBFeHBpcmVkJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgY29sdW1uRmlsdGVycyA9IHRoaXMuY29sdW1uRmlsdGVycztcblxuXG4gICAgICAgIGxldCB0YWJsZUNvbHVtbnMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29sSWQ6ICduYW1lJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogJ25hbWUnLFxuICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6ICdOYW1lJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJDb21wb25lbnQ6IFRhYmxlQ29sdW1uRGVmYXVsdENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICBoZWFkZXJDb21wb25lbnRQYXJhbXM6IHRoaXMuaGVhZGVyQ29tcG9uZW50UGFyYW1zLFxuICAgICAgICAgICAgICAgIGNlbGxSZW5kZXJlcjogVGFibGVDZWxsTmFtZUNvbXBvbmVudCxcbiAgICAgICAgICAgICAgICBjZWxsUmVuZGVyZXJQYXJhbXM6IHsgcGF0aFJvb3Q6IHRoaXMuYmFzZVBhdGgsIHNob3dSb3V0ZXJJY29uczogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgIG9uQ2VsbENsaWNrZWQ6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc1NlbGVjdGVkVGV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuRWRpdEZvcm0oZGF0YT8uZGF0YT8uaWQpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVzaXphYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNlbGxDbGFzczogJ25mLWNlbGwtdmVydC1hbGlnbiB0Q29sJyxcbiAgICAgICAgICAgICAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBmaWx0ZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgc29ydENvbHVtbjogdGhpcy5zb3J0LmJpbmQodGhpcyksXG4gICAgICAgICAgICAgICAgc29ydERpcjogJ2FzYydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29sSWQ6ICd2ZXJpZmllZCcsXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdpc1ZlcmlmaWVkJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiAnVmVyaWZpZWQnLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAsXG4gICAgICAgICAgICAgICAgc29ydGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgaGVhZGVyQ29tcG9uZW50OiBUYWJsZUNvbHVtbkRlZmF1bHRDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgcmVzaXphYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNlbGxDbGFzczogJ25mLWNlbGwtdmVydC1hbGlnbiB0Q29sJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29sSWQ6ICdvbmxpbmUnLFxuICAgICAgICAgICAgICAgIGZpZWxkOiAnaXNPbmxpbmUnLFxuICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6ICdPbmxpbmUnLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAsXG4gICAgICAgICAgICAgICAgaGVhZGVyQ29tcG9uZW50OiBUYWJsZUNvbHVtbkRlZmF1bHRDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgcmVzaXphYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNlbGxDbGFzczogJ25mLWNlbGwtdmVydC1hbGlnbiB0Q29sJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29sSWQ6ICdjcmVhdGVkQXQnLFxuICAgICAgICAgICAgICAgIGZpZWxkOiAnY3JlYXRlZEF0JyxcbiAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiAnQ3JlYXRlZCBBdCcsXG4gICAgICAgICAgICAgICAgaGVhZGVyQ29tcG9uZW50OiBUYWJsZUNvbHVtbkRlZmF1bHRDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgdmFsdWVGb3JtYXR0ZXI6IHRoaXMuY3JlYXRlZEF0Rm9ybWF0dGVyLFxuICAgICAgICAgICAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzb3J0Q29sdW1uOiB0aGlzLnNvcnQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICBjZWxsQ2xhc3M6ICduZi1jZWxsLXZlcnQtYWxpZ24gdENvbCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbElkOiAnZW5yb2xsbWVudFRva2VuJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2Vucm9sbG1lbnRUb2tlbicsXG4gICAgICAgICAgICAgICAgaGVhZGVyTmFtZTogJ1Rva2VuJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJDb21wb25lbnQ6IFRhYmxlQ29sdW1uRGVmYXVsdENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICB2YWx1ZUZvcm1hdHRlcjogZW5yb2xsbWVudFRva2VuRm9ybWF0dGVyLFxuICAgICAgICAgICAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjZWxsQ2xhc3M6ICduZi1jZWxsLXZlcnQtYWxpZ24gdENvbCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbElkOiAnand0JyxcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2Vucm9sbG1lbnRKd3QnLFxuICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6ICdKV1QnLFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbXBvbmVudDogVGFibGVDb2x1bW5EZWZhdWx0Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgIGNlbGxSZW5kZXJlcjogJ2NlbGxUb2tlbkNvbXBvbmVudCcsXG4gICAgICAgICAgICAgICAgcmVzaXphYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNlbGxDbGFzczogJ25mLWNlbGwtdmVydC1hbGlnbiB0Q29sJyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgXTtcblxuICAgICAgICBpZiAodGhpcy5leHRTZXJ2aWNlLnByb2Nlc3NUYWJsZUNvbHVtbnMpIHtcbiAgICAgICAgICAgIHRhYmxlQ29sdW1ucyA9IHRoaXMuZXh0U2VydmljZS5wcm9jZXNzVGFibGVDb2x1bW5zKHRhYmxlQ29sdW1ucyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGFibGVDb2x1bW5zO1xuICAgIH1cblxuICAgIGdldERhdGEoZmlsdGVycz86IEZpbHRlck9ialtdLCBzb3J0PzogYW55LCBwYWdlPzogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgLy8gd2UgY2FuIGN1c3RvbWl6ZSBmaWx0ZXJzIG9yIHNvcnRpbmcgaGVyZSBiZWZvcmUgbW92aW5nIG9uLi4uXG4gICAgICAgIHRoaXMucGFnaW5nLnBhZ2UgPSBwYWdlIHx8IHRoaXMucGFnaW5nLnBhZ2U7XG4gICAgICAgIHJldHVybiBzdXBlci5nZXRUYWJsZURhdGEoJ3RyYW5zaXQtcm91dGVycycsIHRoaXMucGFnaW5nLCBmaWx0ZXJzLCBzb3J0KVxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdHM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NEYXRhKHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9jZXNzRGF0YShyZXN1bHRzOiBhbnkpIHtcbiAgICAgICAgaWYgKCFpc0VtcHR5KHJlc3VsdHM/LmRhdGEpKSB7XG4gICAgICAgICAgICAvL3ByZS1wcm9jZXNzIGRhdGEgYmVmb3JlIHJlbmRlcmluZ1xuICAgICAgICAgICAgcmVzdWx0cy5kYXRhID0gdGhpcy5hZGRBY3Rpb25zUGVyUm93KHJlc3VsdHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkQWN0aW9uc1BlclJvdyhyZXN1bHRzOiBhbnkpOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiByZXN1bHRzLmRhdGEubWFwKChyb3cpID0+IHtcbiAgICAgICAgICAgIHJvdy5hY3Rpb25MaXN0ID0gWyd1cGRhdGUnLCAncmUtZW5yb2xsJywgJ2RlbGV0ZSddO1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzRW5yb2xtZW50VG9rZW4ocm93KSkge1xuICAgICAgICAgICAgICAgIHJvdy5hY3Rpb25MaXN0LnB1c2goJ2Rvd25sb2FkLWVucm9sbG1lbnQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYWRkTGlzdEl0ZW1FeHRlbnNpb25BY3Rpb25zKHJvdyk7XG4gICAgICAgICAgICByZXR1cm4gcm93O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBoYXNFbnJvbG1lbnRUb2tlbihpdGVtKSB7XG4gICAgICAgIHJldHVybiAhaXNFbXB0eShpdGVtPy5lbnJvbGxtZW50Snd0KTtcbiAgICB9XG5cblxuICAgIGdldEpXVChpZGVudGl0eTogYW55KSB7XG4gICAgICAgIHJldHVybiBpZGVudGl0eS5lbnJvbGxtZW50Snd0O1xuICAgIH1cblxuICAgIGRvd25sb2FkSldUKGp3dCwgbmFtZSkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnaHJlZicsICdkYXRhOmFwcGxpY2F0aW9uL3ppdGktand0O2NoYXJzZXQ9dXRmLTgsJyArIGVuY29kZVVSSUNvbXBvbmVudChqd3QpKTtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgbmFtZStcIi5qd3RcIik7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbGVtZW50KTtcbiAgICAgICAgZWxlbWVudC5jbGljaygpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJlZW5yb2xsKHJvdXRlcjogYW55KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICBhcHBlbmRJZDogJ1JlZW5yb2xsUm91dGVyJyxcbiAgICAgICAgICAgIHRpdGxlOiAnUmUtRW5yb2xsIFJvdXRlcicsXG4gICAgICAgICAgICBtZXNzYWdlOiBgPHA+SWYgdGhlIHJvdXRlciBpcyBjdXJyZW50bHkgY29ubmVjdGVkLCBpdCB3aWxsIGJlIGRpc2Nvbm5lY3RlZCB1bnRpbCB0aGUgZW5yb2xsbWVudCBwcm9jZXNzIGlzIGNvbXBsZXRlZCB3aXRoIHRoZSBuZXdseSBnZW5lcmF0ZWQgSldULiA8cD4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlLWVucm9sbCB0aGUgc2VsZWN0ZWQgcm91dGVyP2AsXG4gICAgICAgICAgICBjb25maXJtTGFiZWw6ICdZZXMnLFxuICAgICAgICAgICAgY2FuY2VsTGFiZWw6ICdPb3BzLCBubyBnZXQgbWUgb3V0IG9mIGhlcmUnLFxuICAgICAgICAgICAgc2hvd0NhbmNlbExpbms6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ0Zvcm0ub3BlbihDb25maXJtQ29tcG9uZW50LCB7XG4gICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdD8uY29uZmlybWVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMueml0aVNlcnZpY2UucG9zdChgdHJhbnNpdC1yb3V0ZXJzLyR7cm91dGVyLmlkfS9yZS1lbnJvbGxgLCB7fSwgdHJ1ZSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICAgICAgICAgICAgICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdTdWNjZXNzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGBSZS1lbnJvbGwgQ29uZmlybWVkYCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGBSb3V0ZXIgcmUtZW5yb2xsIHdhcyBzZW50LiBBIG5ldyBlbnJvbGxtZW50IHRva2VuIGlzIG5vdyBhdmFpbGFibGVgLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3dsZXJTZXJ2aWNlLnNob3coZ3Jvd2xlckRhdGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9wZW5VcGRhdGUoZW50aXR5PzogYW55KSB7XG4gICAgICAgIC8vRGVwcmVjYXRlZDogTm8tT3BcbiAgICB9XG59XG4iXX0=
|
|
@@ -190,6 +190,26 @@ class NodeDataService extends ZitiDataService {
|
|
|
190
190
|
return results;
|
|
191
191
|
})));
|
|
192
192
|
}
|
|
193
|
+
resetMFA(id) {
|
|
194
|
+
const nodeServerURL = window.location.origin;
|
|
195
|
+
const serviceUrl = nodeServerURL + '/api/mfa';
|
|
196
|
+
const options = {
|
|
197
|
+
body: {
|
|
198
|
+
id: id
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
return firstValueFrom(this.httpClient.delete(serviceUrl, options).pipe(catchError((err) => {
|
|
202
|
+
const error = "Server Not Accessible";
|
|
203
|
+
if (err.code != "ECONNREFUSED")
|
|
204
|
+
throw ({ error: err.code });
|
|
205
|
+
throw ({ error: error });
|
|
206
|
+
}), map((results) => {
|
|
207
|
+
if (!isEmpty(results.error)) {
|
|
208
|
+
throw ({ error: results.error });
|
|
209
|
+
}
|
|
210
|
+
return results;
|
|
211
|
+
})));
|
|
212
|
+
}
|
|
193
213
|
deleteSubdata(entityType, id, dataType, data) {
|
|
194
214
|
const nodeServerURL = window.location.origin;
|
|
195
215
|
const serviceUrl = nodeServerURL + '/api/subSave';
|
|
@@ -335,4 +355,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
335
355
|
type: Inject,
|
|
336
356
|
args: [SETTINGS_SERVICE]
|
|
337
357
|
}] }, { type: i3.HttpClient }, { type: i4.Router }]; } });
|
|
338
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1kYXRhLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvc2VydmljZXMvbm9kZS1kYXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0VBY0U7QUFFRixPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUlqRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQWtCLE1BQU0sb0JBQW9CLENBQUM7QUFDckUsT0FBTyxFQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRzFDLE9BQU8sRUFBQyxPQUFPLEVBQU8sT0FBTyxFQUFFLFFBQVEsRUFBTyxTQUFTLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDdkUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUN0RCxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7Ozs7Ozs7QUFFNUIsTUFHYSxlQUFnQixTQUFRLGVBQWU7SUFJaEQsWUFBcUIsTUFBcUIsRUFDckIsT0FBdUIsRUFDRyxlQUFnQyxFQUMxRCxVQUFzQixFQUN0QixNQUFjO1FBRS9CLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFOMUMsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUNHLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUMxRCxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFOMUIsb0JBQWUsR0FBRyxlQUFlLENB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InNvdXJjZXNDb250ZW50IjpbIi8qXG4gICAgQ29weXJpZ2h0IE5ldEZvdW5kcnkgSW5jLlxuXG4gICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSBcIi4uL2ZlYXR1cmVzL21lc3NhZ2luZy9sb2dnZXIuc2VydmljZVwiO1xuaW1wb3J0IHtHcm93bGVyU2VydmljZX0gZnJvbSBcIi4uL2ZlYXR1cmVzL21lc3NhZ2luZy9ncm93bGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7U0VUVElOR1NfU0VSVklDRSwgU2V0dGluZ3NTZXJ2aWNlfSBmcm9tIFwiLi9zZXR0aW5ncy5zZXJ2aWNlXCI7XG5pbXBvcnQge2ZpcnN0VmFsdWVGcm9tLCBtYXB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge2NhdGNoRXJyb3J9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCB7RmlsdGVyT2JqfSBmcm9tIFwiLi4vZmVhdHVyZXMvZGF0YS10YWJsZS9kYXRhLXRhYmxlLWZpbHRlci5zZXJ2aWNlXCI7XG5pbXBvcnQge2lzRW1wdHksIGdldCwgaXNBcnJheSwgaXNOdW1iZXIsIHNldCwgaXNCb29sZWFufSBmcm9tIFwibG9kYXNoXCI7XG5pbXBvcnQge1ppdGlEYXRhU2VydmljZX0gZnJvbSBcIi4veml0aS1kYXRhLnNlcnZpY2VcIjtcbmltcG9ydCB7UmVzb2x2ZXJ9IGZyb20gXCJAc3RvcGxpZ2h0L2pzb24tcmVmLXJlc29sdmVyXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBOb2RlRGF0YVNlcnZpY2UgZXh0ZW5kcyBaaXRpRGF0YVNlcnZpY2Uge1xuXG4gICAgb3ZlcnJpZGUgZGF0YVNlcnZpY2VUeXBlID0gWml0aURhdGFTZXJ2aWNlLk5PREVfREFUQV9TRVJWSUNFX1RZUEU7XG5cbiAgICBjb25zdHJ1Y3RvcihvdmVycmlkZSBsb2dnZXI6IExvZ2dlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgb3ZlcnJpZGUgZ3Jvd2xlcjogR3Jvd2xlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgQEluamVjdChTRVRUSU5HU19TRVJWSUNFKSBvdmVycmlkZSBzZXR0aW5nc1NlcnZpY2U6IFNldHRpbmdzU2VydmljZSxcbiAgICAgICAgICAgICAgICBvdmVycmlkZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICAgICAgICAgICAgICAgIG92ZXJyaWRlIHJvdXRlcjogUm91dGVyXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGxvZ2dlciwgZ3Jvd2xlciwgc2V0dGluZ3NTZXJ2aWNlLCBodHRwQ2xpZW50LCByb3V0ZXIpXG4gICAgfVxuXG4gICAgcG9zdCh0eXBlLCBtb2RlbCwgY2hhaW5lZCA9IGZhbHNlKSB7XG4gICAgICAgIGxldCBjbGllbnRTdWI7XG4gICAgICAgIGNvbnN0IG5vZGVTZXJ2ZXJVUkwgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xuICAgICAgICBjb25zdCBzZXJ2aWNlVXJsID0gbm9kZVNlcnZlclVSTCArICcvYXBpL2RhdGFTYXZlJztcbiAgICAgICAgY29uc3QgYm9keSA9IHtwYWdpbmc6IHRoaXMuREVGQVVMVF9QQUdJTkcsIHR5cGU6IHR5cGUsIHNhdmU6IG1vZGVsLCBjaGFpbmVkOiBjaGFpbmVkfTtcblxuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwQ2xpZW50LnBvc3Qoc2VydmljZVVybCxib2R5LHt9KS5waXBlKFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gXCJTZXJ2ZXIgTm90IEFjY2Vzc2libGVcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5jb2RlICE9PSBcIkVDT05OUkVGVVNFRFwiKSB0aHJvdyhlcnIpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyh7ZXJyb3I6IGVycm9yfSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWFwKChyZXN1bHRzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYoIWlzRW1wdHkocmVzdWx0cy5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93KHtlcnJvcjogcmVzdWx0cy5lcnJvcn0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHV0KHR5cGUsIG1vZGVsLCBpZCwgY2hhaW5lZCA9IGZhbHNlKSB7XG4gICAgICAgIGxldCBjbGllbnRTdWI7XG4gICAgICAgIGNvbnN0IG5vZGVTZXJ2ZXJVUkwgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xuICAgICAgICBjb25zdCBzZXJ2aWNlVXJsID0gbm9kZVNlcnZlclVSTCArICcvYXBpL2RhdGFTYXZlJztcbiAgICAgICAgY29uc3QgYm9keSA9IHtwYWdpbmc6IHRoaXMuREVGQVVMVF9QQUdJTkcsIHR5cGU6IHR5cGUsIHNhdmU6IG1vZGVsLCBpZDogaWQsIGNoYWluZWQ6IGNoYWluZWR9O1xuXG4gICAgICAgIHJldHVybiBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHBDbGllbnQucG9zdChzZXJ2aWNlVXJsLGJvZHkse30pLnBpcGUoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBcIlNlcnZlciBOb3QgQWNjZXNzaWJsZVwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT09IFwiRUNPTk5SRUZVU0VEXCIpIHRocm93KGVycik7XG4gICAgICAgICAgICAgICAgICAgIHRocm93KHtlcnJvcjogZXJyb3J9KTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3VsdHM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZighaXNFbXB0eShyZXN1bHRzLmVycm9yKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3coe2Vycm9yOiByZXN1bHRzLmVycm9yfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwYXRjaCh0eXBlLCBtb2RlbCwgaWQsIGNoYWluZWQgPSBmYWxzZSkge1xuICAgICAgICBsZXQgY2xpZW50U3ViO1xuICAgICAgICBjb25zdCBub2RlU2VydmVyVVJMID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICAgICAgY29uc3Qgc2VydmljZVVybCA9IG5vZGVTZXJ2ZXJVUkwgKyAnL2FwaS9kYXRhU2F2ZSc7XG4gICAgICAgIGNvbnN0IGJvZHkgPSB7cGFnaW5nOiB0aGlzLkRFRkFVTFRfUEFHSU5HLCB0eXBlOiB0eXBlLCBzYXZlOiBtb2RlbCwgaWQ6IGlkLCBjaGFpbmVkOiBjaGFpbmVkfTtcblxuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwQ2xpZW50LnBvc3Qoc2VydmljZVVybCxib2R5LHt9KS5waXBlKFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gXCJTZXJ2ZXIgTm90IEFjY2Vzc2libGVcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5jb2RlICE9PSBcIkVDT05OUkVGVVNFRFwiKSB0aHJvdyhlcnIpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyh7ZXJyb3I6IGVycm9yfSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWFwKChyZXN1bHRzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYoIWlzRW1wdHkocmVzdWx0cy5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93KHtlcnJvcjogcmVzdWx0cy5lcnJvcn0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0KHR5cGU6IHN0cmluZywgcGFnaW5nOiBhbnksIGZpbHRlcnM6IEZpbHRlck9ialtdID0gW10sIHVybD8pIHtcbiAgICAgICAgY29uc3Qgbm9kZVNlcnZlclVSTCA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgICAgIGNvbnN0IHNlcnZpY2VVcmwgPSBub2RlU2VydmVyVVJMICsgJy9hcGkvZGF0YSc7XG4gICAgICAgIGNvbnN0IHVybEZpbHRlciA9IHRoaXMuZ2V0VXJsRmlsdGVyKHBhZ2luZywgZmlsdGVycyk7XG4gICAgICAgIHBhZ2luZy5maWx0ZXIgPSB1cmxGaWx0ZXI7XG4gICAgICAgIGNvbnN0IGJvZHkgPSB7cGFnaW5nOiBwYWdpbmcsIHR5cGU6IHR5cGUsIHVybDogdXJsfTtcblxuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwQ2xpZW50LnBvc3Qoc2VydmljZVVybCxib2R5LHt9KS5waXBlKFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gXCJTZXJ2ZXIgTm90IEFjY2Vzc2libGVcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5jb2RlICE9IFwiRUNPTk5SRUZVU0VEXCIpIHRocm93KHtlcnJvcjogZXJyLmNvZGV9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3coe2Vycm9yOiBlcnJvcn0pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG1hcCgocmVzdWx0czogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKHJlc3VsdHMpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRTdWJkYXRhKGVudGl0eVR5cGU6IHN0cmluZywgaWQ6IGFueSwgZGF0YVR5cGU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBub2RlU2VydmVyVVJMID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICAgICAgY29uc3Qgc2VydmljZVVybCA9IG5vZGVTZXJ2ZXJVUkwgKyAnL2FwaS9zdWJkYXRhJztcbiAgICAgICAgY29uc3QgYm9keSA9IHt1cmw6YC4vJHtlbnRpdHlUeXBlfS8ke2lkfS8ke2RhdGFUeXBlfWAsIG5hbWU6IGVudGl0eVR5cGUsIHR5cGU6IGRhdGFUeXBlIH07XG4gICAgICAgIHJldHVybiBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHBDbGllbnQucG9zdChzZXJ2aWNlVXJsLCBib2R5LCB7fSkucGlwZShcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IFwiU2VydmVyIE5vdCBBY2Nlc3NpYmxlXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSAhPSBcIkVDT05OUkVGVVNFRFwiKSB0aHJvdyh7ZXJyb3I6IGVyci5jb2RlfSk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93KHtlcnJvcjogZXJyb3J9KTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3VsdHM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZighaXNFbXB0eShyZXN1bHRzLmVycm9yKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3coe2Vycm9yOiByZXN1bHRzLmVycm9yfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0cy5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihyZXN1bHRzKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzICYmICFyZXN1bHRzPy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLmRhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIHNhdmVTdWJkYXRhKGVudGl0eVR5cGU6IHN0cmluZywgaWQ6IGFueSwgZGF0YVR5cGU6IHN0cmluZywgZGF0YTogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3Qgbm9kZVNlcnZlclVSTCA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgICAgIGNvbnN0IHNlcnZpY2VVcmwgPSBub2RlU2VydmVyVVJMICsgJy9hcGkvc3ViU2F2ZSc7XG4gICAgICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgICAgICB0eXBlOiBkYXRhVHlwZSxcbiAgICAgICAgICAgIHBhcmVudFR5cGU6IGVudGl0eVR5cGUsXG4gICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICBkb2luZzogXCJQT1NUXCIsXG4gICAgICAgICAgICBzYXZlOiBkYXRhXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cENsaWVudC5wb3N0KHNlcnZpY2VVcmwsIGJvZHksIHt9KS5waXBlKFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gXCJTZXJ2ZXIgTm90IEFjY2Vzc2libGVcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5jb2RlICE9IFwiRUNPTk5SRUZVU0VEXCIpIHRocm93KHtlcnJvcjogZXJyLmNvZGV9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3coe2Vycm9yOiBlcnJvcn0pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG1hcCgocmVzdWx0czogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKCFpc0VtcHR5KHJlc3VsdHMuZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyh7ZXJyb3I6IHJlc3VsdHMuZXJyb3J9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIHJlc2V0RW5yb2xsbWVudChpZDogc3RyaW5nLCBkYXRlOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCBub2RlU2VydmVyVVJMID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICAgICAgY29uc3Qgc2VydmljZVVybCA9IG5vZGVTZXJ2ZXJVUkwgKyAnL2FwaS9yZXNldEVucm9sbCc7XG4gICAgICAgIGNvbnN0IGRhdGVTdHIgPSBtb21lbnQoZGF0ZSkuZm9ybWF0KFwiTS9EL1lZWVkgaGg6bW0gQVwiKTtcbiAgICAgICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgICAgIGRhdGU6IGRhdGVTdHIsXG4gICAgICAgICAgICBpZDogaWRcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwQ2xpZW50LnBvc3Qoc2VydmljZVVybCwgYm9keSwge30pLnBpcGUoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBcIlNlcnZlciBOb3QgQWNjZXNzaWJsZVwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT0gXCJFQ09OTlJFRlVTRURcIikgdGhyb3coe2Vycm9yOiBlcnIuY29kZX0pO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyh7ZXJyb3I6IGVycm9yfSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWFwKChyZXN1bHRzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYoIWlzRW1wdHkocmVzdWx0cy5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93KHtlcnJvcjogcmVzdWx0cy5lcnJvcn0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgcmVpc3N1ZUVucm9sbG1lbnQoaWQ6IHN0cmluZywgZGF0ZTogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3Qgbm9kZVNlcnZlclVSTCA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgICAgIGNvbnN0IHNlcnZpY2VVcmwgPSBub2RlU2VydmVyVVJMICsgJy9hcGkvcmVpc3N1ZUVucm9sbCc7XG4gICAgICAgIGNvbnN0IGRhdGVTdHIgPSBtb21lbnQoZGF0ZSkuZm9ybWF0KFwiTS9EL1lZWVkgaGg6bW0gQVwiKTtcbiAgICAgICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgICAgIGRhdGU6IGRhdGVTdHIsXG4gICAgICAgICAgICBpZDogaWRcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwQ2xpZW50LnBvc3Qoc2VydmljZVVybCwgYm9keSwge30pLnBpcGUoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBcIlNlcnZlciBOb3QgQWNjZXNzaWJsZVwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT0gXCJFQ09OTlJFRlVTRURcIikgdGhyb3coe2Vycm9yOiBlcnIuY29kZX0pO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyh7ZXJyb3I6IGVycm9yfSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWFwKChyZXN1bHRzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYoIWlzRW1wdHkocmVzdWx0cy5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93KHtlcnJvcjogcmVzdWx0cy5lcnJvcn0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgZGVsZXRlU3ViZGF0YShlbnRpdHlUeXBlOiBzdHJpbmcsIGlkOiBhbnksIGRhdGFUeXBlOiBzdHJpbmcsIGRhdGE6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGNvbnN0IG5vZGVTZXJ2ZXJVUkwgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xuICAgICAgICBjb25zdCBzZXJ2aWNlVXJsID0gbm9kZVNlcnZlclVSTCArICcvYXBpL3N1YlNhdmUnO1xuICAgICAgICBjb25zdCBib2R5ID0ge1xuICAgICAgICAgICAgdHlwZTogZGF0YVR5cGUsXG4gICAgICAgICAgICBwYXJlbnRUeXBlOiBlbnRpdHlUeXBlLFxuICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgZG9pbmc6IFwiREVMRVRFXCIsXG4gICAgICAgICAgICBzYXZlOiBkYXRhXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cENsaWVudC5wb3N0KHNlcnZpY2VVcmwsIGJvZHksIHt9KS5waXBlKFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gXCJTZXJ2ZXIgTm90IEFjY2Vzc2libGVcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5jb2RlICE9IFwiRUNPTk5SRUZVU0VEXCIpIHRocm93KHtlcnJvcjogZXJyLmNvZGV9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3coe2Vycm9yOiBlcnJvcn0pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG1hcCgocmVzdWx0czogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKCFpc0VtcHR5KHJlc3VsdHMuZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyh7ZXJyb3I6IHJlc3VsdHMuZXJyb3J9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGRlbGV0ZSh0eXBlOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgbm9kZVNlcnZlclVSTCA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgICAgIGNvbnN0IHNlcnZpY2VVcmwgPSBub2RlU2VydmVyVVJMICsgJy9hcGkvZGVsZXRlJztcbiAgICAgICAgY29uc3QgYm9keSA9IHtwYWdpbmc6IHRoaXMuREVGQVVMVF9QQUdJTkcsIHR5cGU6IHR5cGUsIGlkczogW2lkXX07XG5cbiAgICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cENsaWVudC5wb3N0KHNlcnZpY2VVcmwsYm9keSx7fSkucGlwZShcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IFwiU2VydmVyIE5vdCBBY2Nlc3NpYmxlXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSAhPSBcIkVDT05OUkVGVVNFRFwiKSB0aHJvdyh7ZXJyb3I6IGVyci5jb2RlfSk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93KHtlcnJvcjogZXJyb3J9KTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3VsdHM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZighaXNFbXB0eShyZXN1bHRzLmVycm9yKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3coe2Vycm9yOiByZXN1bHRzLmVycm9yfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBjYWxsKHVybCkge1xuICAgICAgICBjb25zdCBub2RlU2VydmVyVVJMID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICAgICAgY29uc3Qgc2VydmljZVVybCA9IG5vZGVTZXJ2ZXJVUkwgKyAnL2FwaS9jYWxsJztcbiAgICAgICAgY29uc3QgYm9keSA9IHt1cmw6IHVybH07XG5cbiAgICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cENsaWVudC5wb3N0KHNlcnZpY2VVcmwsYm9keSx7fSkucGlwZShcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IFwiU2VydmVyIE5vdCBBY2Nlc3NpYmxlXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSAhPSBcIkVDT05OUkVGVVNFRFwiKSB0aHJvdyh7ZXJyb3I6IGVyci5jb2RlfSk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93KHtlcnJvcjogZXJyb3J9KTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3VsdHM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZighaXNFbXB0eShyZXN1bHRzLmVycm9yKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3coe2Vycm9yOiByZXN1bHRzLmVycm9yfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzY2hlbWEoZGF0YTogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZXIgPSBuZXcgUmVzb2x2ZXIoKTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVyLnJlc29sdmUoZGF0YSkudGhlbigoc2NoZW1hKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hLnJlc3VsdFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFVybEZpbHRlcihwYWdpbmcsIGZpbHRlcnM6IGFueVtdKSB7XG4gICAgICAgIGxldCB1cmxGaWx0ZXIgPSAnJztcbiAgICAgICAgbGV0IHRvU2VhcmNoT24gPSBcIm5hbWVcIjtcbiAgICAgICAgbGV0IG5vU2VhcmNoID0gZmlsdGVycz8ubGVuZ3RoIDw9IDA7XG4gICAgICAgIGlmIChpc0VtcHR5KHBhZ2luZykpIHtcbiAgICAgICAgICAgIHBhZ2luZyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYWdpbmcgJiYgcGFnaW5nLnNvcnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHBhZ2luZy5zZWFyY2hPbikgdG9TZWFyY2hPbiA9IHBhZ2luZy5zZWFyY2hPbjtcbiAgICAgICAgICAgIGlmIChwYWdpbmcubm9TZWFyY2gpIG5vU2VhcmNoID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghcGFnaW5nLmZpbHRlcikgcGFnaW5nLmZpbHRlciA9IFwiXCI7XG4gICAgICAgICAgICBpZiAoIWlzQXJyYXkocGFnaW5nLmZpbHRlcikgJiYgaXNOYU4ocGFnaW5nLmZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICBwYWdpbmcuZmlsdGVyID0gcGFnaW5nLmZpbHRlci5zcGxpdCgnIycpLmpvaW4oJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZpbHRlcnMuZm9yRWFjaCgoZmlsdGVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgbGV0IGZpbHRlclZhbCA9ICcnO1xuICAgICAgICAgICAgc3dpdGNoIChmaWx0ZXIudHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ1RFWFRJTlBVVCc6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBmaWx0ZXIudmVyYiA/IGZpbHRlci52ZXJiIDogJ2NvbnRhaW5zJztcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyVmFsID0gYCR7ZmlsdGVyLmNvbHVtbklkfSAke3ZlcmJ9IFwiJHtmaWx0ZXIudmFsdWV9XCJgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyLnJhd0ZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFnaW5nLnJhd0ZpbHRlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnU0VMRUNUJzpcbiAgICAgICAgICAgICAgICBjYXNlICdDT01CTyc6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IGlzTnVtYmVyKGZpbHRlci52YWx1ZSkgfHwgaXNCb29sZWFuKGZpbHRlci52YWx1ZSkgPyBgJHtmaWx0ZXIudmFsdWV9YCA6IGBcIiR7ZmlsdGVyLnZhbHVlfVwiYDtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyVmFsID0gYCR7ZmlsdGVyLmNvbHVtbklkfSA9ICR7dmFsfWA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ0RBVEVUSU1FJzpcbiAgICAgICAgICAgICAgICAgICAgcGFnaW5nLnJhd0ZpbHRlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclZhbCA9IGAke2ZpbHRlci5jb2x1bW5JZH0gPj0gZGF0ZXRpbWUoJHtmaWx0ZXIudmFsdWVbMF19KSBhbmQgJHtmaWx0ZXIuY29sdW1uSWR9IDw9IGRhdGV0aW1lKCR7ZmlsdGVyLnZhbHVlWzFdfSlgO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdBVFRSSUJVVEUnOlxuICAgICAgICAgICAgICAgICAgICBwYWdpbmcucmF3RmlsdGVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyVmFsID0gdGhpcy5nZXRBdHRyaWJ1dGVGaWx0ZXIoZmlsdGVyLnZhbHVlLCBmaWx0ZXIuY29sdW1uSWQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJWYWwgPSBgJHtmaWx0ZXIuY29sdW1uSWR9IGNvbnRhaW5zIFwiJHtmaWx0ZXIudmFsdWV9XCJgO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbmRleCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgdXJsRmlsdGVyID0gYCR7ZmlsdGVyVmFsfWA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHVybEZpbHRlciArPSBgIGFuZCAke2ZpbHRlclZhbH1gXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB1cmxGaWx0ZXI7XG4gICAgfVxuXG4gICAgZ2V0QXR0cmlidXRlRmlsdGVyKHZhbCwgY29sdW1uSWQpIHtcbiAgICAgICAgbGV0IGZpbHRlciA9ICcnO1xuICAgICAgICBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICAgICAgICB2YWwuZm9yRWFjaCgoYXR0ciwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlciArPSAnIG9yICc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbHRlciArPSBgYW55T2YoJHtjb2x1bW5JZH0pID0gXCIke2F0dHJ9XCJgO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWx0ZXIgPSBgYW55T2YoJHtjb2x1bW5JZH0pID0gXCIke3ZhbH1cImA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICB9XG5cbiAgICBoYW5kbGVFcnJvcihyZXN1bHRzKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKHJlc3VsdHM/LmVycm9yKVxuICAgIH1cbn1cbiJdfQ==
|
|
358
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1kYXRhLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvc2VydmljZXMvbm9kZS1kYXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0VBY0U7QUFFRixPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUlqRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQWtCLE1BQU0sb0JBQW9CLENBQUM7QUFDckUsT0FBTyxFQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRzFDLE9BQU8sRUFBQyxPQUFPLEVBQU8sT0FBTyxFQUFFLFFBQVEsRUFBTyxTQUFTLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDdkUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUN0RCxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7Ozs7Ozs7QUFFNUIsTUFHYSxlQUFnQixTQUFRLGVBQWU7SUFJaEQsWUFBcUIsTUFBcUIsRUFDckIsT0FBdUIsRUFDRyxlQUFnQyxFQUMxRCxVQUFzQixFQUN0QixNQUFjO1FBRS9CLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFOMUMsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUNHLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUMxRCxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFOMUIsb0JBQWUsR0FBRyxlQUFlLENB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O2lCQUFNO2dCQUNILFNBQVMsSUFBSSxRQUFRLFNBQVMsRUFBRSxDQUFBO2FBQ25DO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBRUQsa0JBQWtCLENBQUMsR0FBRyxFQUFFLFFBQVE7UUFDNUIsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2QsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDeEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO29CQUNYLE1BQU0sSUFBSSxNQUFNLENBQUM7aUJBQ3BCO2dCQUNELE1BQU0sSUFBSSxTQUFTLFFBQVEsUUFBUSxJQUFJLEdBQUcsQ0FBQztZQUMvQyxDQUFDLENBQUMsQ0FBQztTQUNOO2FBQU07WUFDSCxNQUFNLEdBQUcsU0FBUyxRQUFRLFFBQVEsR0FBRyxHQUFHLENBQUM7U0FDNUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQU87UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDckMsQ0FBQzsrR0FqWFEsZUFBZSw2RUFNSixnQkFBZ0I7bUhBTjNCLGVBQWUsY0FGWixNQUFNOztTQUVULGVBQWU7NEZBQWYsZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQU9nQixNQUFNOzJCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gICAgQ29weXJpZ2h0IE5ldEZvdW5kcnkgSW5jLlxuXG4gICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSBcIi4uL2ZlYXR1cmVzL21lc3NhZ2luZy9sb2dnZXIuc2VydmljZVwiO1xuaW1wb3J0IHtHcm93bGVyU2VydmljZX0gZnJvbSBcIi4uL2ZlYXR1cmVzL21lc3NhZ2luZy9ncm93bGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7U0VUVElOR1NfU0VSVklDRSwgU2V0dGluZ3NTZXJ2aWNlfSBmcm9tIFwiLi9zZXR0aW5ncy5zZXJ2aWNlXCI7XG5pbXBvcnQge2ZpcnN0VmFsdWVGcm9tLCBtYXB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge2NhdGNoRXJyb3J9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCB7RmlsdGVyT2JqfSBmcm9tIFwiLi4vZmVhdHVyZXMvZGF0YS10YWJsZS9kYXRhLXRhYmxlLWZpbHRlci5zZXJ2aWNlXCI7XG5pbXBvcnQge2lzRW1wdHksIGdldCwgaXNBcnJheSwgaXNOdW1iZXIsIHNldCwgaXNCb29sZWFufSBmcm9tIFwibG9kYXNoXCI7XG5pbXBvcnQge1ppdGlEYXRhU2VydmljZX0gZnJvbSBcIi4veml0aS1kYXRhLnNlcnZpY2VcIjtcbmltcG9ydCB7UmVzb2x2ZXJ9IGZyb20gXCJAc3RvcGxpZ2h0L2pzb24tcmVmLXJlc29sdmVyXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBOb2RlRGF0YVNlcnZpY2UgZXh0ZW5kcyBaaXRpRGF0YVNlcnZpY2Uge1xuXG4gICAgb3ZlcnJpZGUgZGF0YVNlcnZpY2VUeXBlID0gWml0aURhdGFTZXJ2aWNlLk5PREVfREFUQV9TRVJWSUNFX1RZUEU7XG5cbiAgICBjb25zdHJ1Y3RvcihvdmVycmlkZSBsb2dnZXI6IExvZ2dlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgb3ZlcnJpZGUgZ3Jvd2xlcjogR3Jvd2xlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgQEluamVjdChTRVRUSU5HU19TRVJWSUNFKSBvdmVycmlkZSBzZXR0aW5nc1NlcnZpY2U6IFNldHRpbmdzU2VydmljZSxcbiAgICAgICAgICAgICAgICBvdmVycmlkZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICAgICAgICAgICAgICAgIG92ZXJyaWRlIHJvdXRlcjogUm91dGVyXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGxvZ2dlciwgZ3Jvd2xlciwgc2V0dGluZ3NTZXJ2aWNlLCBodHRwQ2xpZW50LCByb3V0ZXIpXG4gICAgfVxuXG4gICAgcG9zdCh0eXBlLCBtb2RlbCwgY2hhaW5lZCA9IGZhbHNlKSB7XG4gICAgICAgIGxldCBjbGllbnRTdWI7XG4gICAgICAgIGNvbnN0IG5vZGVTZXJ2ZXJVUkwgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xuICAgICAgICBjb25zdCBzZXJ2aWNlVXJsID0gbm9kZVNlcnZlclVSTCArICcvYXBpL2RhdGFTYXZlJztcbiAgICAgICAgY29uc3QgYm9keSA9IHtwYWdpbmc6IHRoaXMuREVGQVVMVF9QQUdJTkcsIHR5cGU6IHR5cGUsIHNhdmU6IG1vZGVsLCBjaGFpbmVkOiBjaGFpbmVkfTtcblxuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwQ2xpZW50LnBvc3Qoc2VydmljZVVybCxib2R5LHt9KS5waXBlKFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gXCJTZXJ2ZXIgTm90IEFjY2Vzc2libGVcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5jb2RlICE9PSBcIkVDT05OUkVGVVNFRFwiKSB0aHJvdyhlcnIpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyh7ZXJyb3I6IGVycm9yfSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWFwKChyZXN1bHRzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYoIWlzRW1wdHkocmVzdWx0cy5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93KHtlcnJvcjogcmVzdWx0cy5lcnJvcn0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHV0KHR5cGUsIG1vZGVsLCBpZCwgY2hhaW5lZCA9IGZhbHNlKSB7XG4gICAgICAgIGxldCBjbGllbnRTdWI7XG4gICAgICAgIGNvbnN0IG5vZGVTZXJ2ZXJVUkwgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xuICAgICAgICBjb25zdCBzZXJ2aWNlVXJsID0gbm9kZVNlcnZlclVSTCArICcvYXBpL2RhdGFTYXZlJztcbiAgICAgICAgY29uc3QgYm9keSA9IHtwYWdpbmc6IHRoaXMuREVGQVVMVF9QQUdJTkcsIHR5cGU6IHR5cGUsIHNhdmU6IG1vZGVsLCBpZDogaWQsIGNoYWluZWQ6IGNoYWluZWR9O1xuXG4gICAgICAgIHJldHVybiBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHBDbGllbnQucG9zdChzZXJ2aWNlVXJsLGJvZHkse30pLnBpcGUoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBcIlNlcnZlciBOb3QgQWNjZXNzaWJsZVwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT09IFwiRUNPTk5SRUZVU0VEXCIpIHRocm93KGVycik7XG4gICAgICAgICAgICAgICAgICAgIHRocm93KHtlcnJvcjogZXJyb3J9KTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3VsdHM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZighaXNFbXB0eShyZXN1bHRzLmVycm9yKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3coe2Vycm9yOiByZXN1bHRzLmVycm9yfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwYXRjaCh0eXBlLCBtb2RlbCwgaWQsIGNoYWluZWQgPSBmYWxzZSkge1xuICAgICAgICBsZXQgY2xpZW50U3ViO1xuICAgICAgICBjb25zdCBub2RlU2VydmVyVVJMID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICAgICAgY29uc3Qgc2VydmljZVVybCA9IG5vZGVTZXJ2ZXJVUkwgKyAnL2FwaS9kYXRhU2F2ZSc7XG4gICAgICAgIGNvbnN0IGJvZHkgPSB7cGFnaW5nOiB0aGlzLkRFRkFVTFRfUEFHSU5HLCB0eXBlOiB0eXBlLCBzYXZlOiBtb2RlbCwgaWQ6IGlkLCBjaGFpbmVkOiBjaGFpbmVkfTtcblxuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwQ2xpZW50LnBvc3Qoc2VydmljZVVybCxib2R5LHt9KS5waXBlKFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gXCJTZXJ2ZXIgTm90IEFjY2Vzc2libGVcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5jb2RlICE9PSBcIkVDT05OUkVGVVNFRFwiKSB0aHJvdyhlcnIpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyh7ZXJyb3I6IGVycm9yfSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWFwKChyZXN1bHRzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYoIWlzRW1wdHkocmVzdWx0cy5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93KHtlcnJvcjogcmVzdWx0cy5lcnJvcn0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0KHR5cGU6IHN0cmluZywgcGFnaW5nOiBhbnksIGZpbHRlcnM6IEZpbHRlck9ialtdID0gW10sIHVybD8pIHtcbiAgICAgICAgY29uc3Qgbm9kZVNlcnZlclVSTCA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgICAgIGNvbnN0IHNlcnZpY2VVcmwgPSBub2RlU2VydmVyVVJMICsgJy9hcGkvZGF0YSc7XG4gICAgICAgIGNvbnN0IHVybEZpbHRlciA9IHRoaXMuZ2V0VXJsRmlsdGVyKHBhZ2luZywgZmlsdGVycyk7XG4gICAgICAgIHBhZ2luZy5maWx0ZXIgPSB1cmxGaWx0ZXI7XG4gICAgICAgIGNvbnN0IGJvZHkgPSB7cGFnaW5nOiBwYWdpbmcsIHR5cGU6IHR5cGUsIHVybDogdXJsfTtcblxuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwQ2xpZW50LnBvc3Qoc2VydmljZVVybCxib2R5LHt9KS5waXBlKFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gXCJTZXJ2ZXIgTm90IEFjY2Vzc2libGVcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5jb2RlICE9IFwiRUNPTk5SRUZVU0VEXCIpIHRocm93KHtlcnJvcjogZXJyLmNvZGV9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3coe2Vycm9yOiBlcnJvcn0pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG1hcCgocmVzdWx0czogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKHJlc3VsdHMpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRTdWJkYXRhKGVudGl0eVR5cGU6IHN0cmluZywgaWQ6IGFueSwgZGF0YVR5cGU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBub2RlU2VydmVyVVJMID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICAgICAgY29uc3Qgc2VydmljZVVybCA9IG5vZGVTZXJ2ZXJVUkwgKyAnL2FwaS9zdWJkYXRhJztcbiAgICAgICAgY29uc3QgYm9keSA9IHt1cmw6YC4vJHtlbnRpdHlUeXBlfS8ke2lkfS8ke2RhdGFUeXBlfWAsIG5hbWU6IGVudGl0eVR5cGUsIHR5cGU6IGRhdGFUeXBlIH07XG4gICAgICAgIHJldHVybiBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHBDbGllbnQucG9zdChzZXJ2aWNlVXJsLCBib2R5LCB7fSkucGlwZShcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IFwiU2VydmVyIE5vdCBBY2Nlc3NpYmxlXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSAhPSBcIkVDT05OUkVGVVNFRFwiKSB0aHJvdyh7ZXJyb3I6IGVyci5jb2RlfSk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93KHtlcnJvcjogZXJyb3J9KTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3VsdHM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZighaXNFbXB0eShyZXN1bHRzLmVycm9yKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3coe2Vycm9yOiByZXN1bHRzLmVycm9yfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0cy5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihyZXN1bHRzKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzICYmICFyZXN1bHRzPy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLmRhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIHNhdmVTdWJkYXRhKGVudGl0eVR5cGU6IHN0cmluZywgaWQ6IGFueSwgZGF0YVR5cGU6IHN0cmluZywgZGF0YTogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3Qgbm9kZVNlcnZlclVSTCA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgICAgIGNvbnN0IHNlcnZpY2VVcmwgPSBub2RlU2VydmVyVVJMICsgJy9hcGkvc3ViU2F2ZSc7XG4gICAgICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgICAgICB0eXBlOiBkYXRhVHlwZSxcbiAgICAgICAgICAgIHBhcmVudFR5cGU6IGVudGl0eVR5cGUsXG4gICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICBkb2luZzogXCJQT1NUXCIsXG4gICAgICAgICAgICBzYXZlOiBkYXRhXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cENsaWVudC5wb3N0KHNlcnZpY2VVcmwsIGJvZHksIHt9KS5waXBlKFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gXCJTZXJ2ZXIgTm90IEFjY2Vzc2libGVcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5jb2RlICE9IFwiRUNPTk5SRUZVU0VEXCIpIHRocm93KHtlcnJvcjogZXJyLmNvZGV9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3coe2Vycm9yOiBlcnJvcn0pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG1hcCgocmVzdWx0czogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKCFpc0VtcHR5KHJlc3VsdHMuZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyh7ZXJyb3I6IHJlc3VsdHMuZXJyb3J9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIHJlc2V0RW5yb2xsbWVudChpZDogc3RyaW5nLCBkYXRlOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCBub2RlU2VydmVyVVJMID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICAgICAgY29uc3Qgc2VydmljZVVybCA9IG5vZGVTZXJ2ZXJVUkwgKyAnL2FwaS9yZXNldEVucm9sbCc7XG4gICAgICAgIGNvbnN0IGRhdGVTdHIgPSBtb21lbnQoZGF0ZSkuZm9ybWF0KFwiTS9EL1lZWVkgaGg6bW0gQVwiKTtcbiAgICAgICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgICAgIGRhdGU6IGRhdGVTdHIsXG4gICAgICAgICAgICBpZDogaWRcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwQ2xpZW50LnBvc3Qoc2VydmljZVVybCwgYm9keSwge30pLnBpcGUoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBcIlNlcnZlciBOb3QgQWNjZXNzaWJsZVwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT0gXCJFQ09OTlJFRlVTRURcIikgdGhyb3coe2Vycm9yOiBlcnIuY29kZX0pO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyh7ZXJyb3I6IGVycm9yfSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWFwKChyZXN1bHRzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYoIWlzRW1wdHkocmVzdWx0cy5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93KHtlcnJvcjogcmVzdWx0cy5lcnJvcn0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgcmVpc3N1ZUVucm9sbG1lbnQoaWQ6IHN0cmluZywgZGF0ZTogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3Qgbm9kZVNlcnZlclVSTCA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgICAgIGNvbnN0IHNlcnZpY2VVcmwgPSBub2RlU2VydmVyVVJMICsgJy9hcGkvcmVpc3N1ZUVucm9sbCc7XG4gICAgICAgIGNvbnN0IGRhdGVTdHIgPSBtb21lbnQoZGF0ZSkuZm9ybWF0KFwiTS9EL1lZWVkgaGg6bW0gQVwiKTtcbiAgICAgICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgICAgIGRhdGU6IGRhdGVTdHIsXG4gICAgICAgICAgICBpZDogaWRcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwQ2xpZW50LnBvc3Qoc2VydmljZVVybCwgYm9keSwge30pLnBpcGUoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBcIlNlcnZlciBOb3QgQWNjZXNzaWJsZVwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT0gXCJFQ09OTlJFRlVTRURcIikgdGhyb3coe2Vycm9yOiBlcnIuY29kZX0pO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyh7ZXJyb3I6IGVycm9yfSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWFwKChyZXN1bHRzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYoIWlzRW1wdHkocmVzdWx0cy5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93KHtlcnJvcjogcmVzdWx0cy5lcnJvcn0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmVzZXRNRkEoaWQpIHtcbiAgICAgICAgY29uc3Qgbm9kZVNlcnZlclVSTCA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgICAgIGNvbnN0IHNlcnZpY2VVcmwgPSBub2RlU2VydmVyVVJMICsgJy9hcGkvbWZhJztcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgICAgICBpZDogaWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cENsaWVudC5kZWxldGUoc2VydmljZVVybCwgb3B0aW9ucykucGlwZShcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IFwiU2VydmVyIE5vdCBBY2Nlc3NpYmxlXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSAhPSBcIkVDT05OUkVGVVNFRFwiKSB0aHJvdyh7ZXJyb3I6IGVyci5jb2RlfSk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93KHtlcnJvcjogZXJyb3J9KTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3VsdHM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZighaXNFbXB0eShyZXN1bHRzLmVycm9yKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3coe2Vycm9yOiByZXN1bHRzLmVycm9yfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBkZWxldGVTdWJkYXRhKGVudGl0eVR5cGU6IHN0cmluZywgaWQ6IGFueSwgZGF0YVR5cGU6IHN0cmluZywgZGF0YTogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3Qgbm9kZVNlcnZlclVSTCA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgICAgIGNvbnN0IHNlcnZpY2VVcmwgPSBub2RlU2VydmVyVVJMICsgJy9hcGkvc3ViU2F2ZSc7XG4gICAgICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgICAgICB0eXBlOiBkYXRhVHlwZSxcbiAgICAgICAgICAgIHBhcmVudFR5cGU6IGVudGl0eVR5cGUsXG4gICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICBkb2luZzogXCJERUxFVEVcIixcbiAgICAgICAgICAgIHNhdmU6IGRhdGFcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwQ2xpZW50LnBvc3Qoc2VydmljZVVybCwgYm9keSwge30pLnBpcGUoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBcIlNlcnZlciBOb3QgQWNjZXNzaWJsZVwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT0gXCJFQ09OTlJFRlVTRURcIikgdGhyb3coe2Vycm9yOiBlcnIuY29kZX0pO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyh7ZXJyb3I6IGVycm9yfSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWFwKChyZXN1bHRzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYoIWlzRW1wdHkocmVzdWx0cy5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93KHtlcnJvcjogcmVzdWx0cy5lcnJvcn0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZGVsZXRlKHR5cGU6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCBub2RlU2VydmVyVVJMID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICAgICAgY29uc3Qgc2VydmljZVVybCA9IG5vZGVTZXJ2ZXJVUkwgKyAnL2FwaS9kZWxldGUnO1xuICAgICAgICBjb25zdCBib2R5ID0ge3BhZ2luZzogdGhpcy5ERUZBVUxUX1BBR0lORywgdHlwZTogdHlwZSwgaWRzOiBbaWRdfTtcblxuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwQ2xpZW50LnBvc3Qoc2VydmljZVVybCxib2R5LHt9KS5waXBlKFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gXCJTZXJ2ZXIgTm90IEFjY2Vzc2libGVcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5jb2RlICE9IFwiRUNPTk5SRUZVU0VEXCIpIHRocm93KHtlcnJvcjogZXJyLmNvZGV9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3coe2Vycm9yOiBlcnJvcn0pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG1hcCgocmVzdWx0czogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKCFpc0VtcHR5KHJlc3VsdHMuZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyh7ZXJyb3I6IHJlc3VsdHMuZXJyb3J9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGNhbGwodXJsKSB7XG4gICAgICAgIGNvbnN0IG5vZGVTZXJ2ZXJVUkwgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xuICAgICAgICBjb25zdCBzZXJ2aWNlVXJsID0gbm9kZVNlcnZlclVSTCArICcvYXBpL2NhbGwnO1xuICAgICAgICBjb25zdCBib2R5ID0ge3VybDogdXJsfTtcblxuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwQ2xpZW50LnBvc3Qoc2VydmljZVVybCxib2R5LHt9KS5waXBlKFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gXCJTZXJ2ZXIgTm90IEFjY2Vzc2libGVcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5jb2RlICE9IFwiRUNPTk5SRUZVU0VEXCIpIHRocm93KHtlcnJvcjogZXJyLmNvZGV9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3coe2Vycm9yOiBlcnJvcn0pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG1hcCgocmVzdWx0czogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKCFpc0VtcHR5KHJlc3VsdHMuZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyh7ZXJyb3I6IHJlc3VsdHMuZXJyb3J9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHNjaGVtYShkYXRhOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCByZXNvbHZlciA9IG5ldyBSZXNvbHZlcigpO1xuICAgICAgICByZXR1cm4gcmVzb2x2ZXIucmVzb2x2ZShkYXRhKS50aGVuKChzY2hlbWEpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBzY2hlbWEucmVzdWx0XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VXJsRmlsdGVyKHBhZ2luZywgZmlsdGVyczogYW55W10pIHtcbiAgICAgICAgbGV0IHVybEZpbHRlciA9ICcnO1xuICAgICAgICBsZXQgdG9TZWFyY2hPbiA9IFwibmFtZVwiO1xuICAgICAgICBsZXQgbm9TZWFyY2ggPSBmaWx0ZXJzPy5sZW5ndGggPD0gMDtcbiAgICAgICAgaWYgKGlzRW1wdHkocGFnaW5nKSkge1xuICAgICAgICAgICAgcGFnaW5nID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhZ2luZyAmJiBwYWdpbmcuc29ydCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAocGFnaW5nLnNlYXJjaE9uKSB0b1NlYXJjaE9uID0gcGFnaW5nLnNlYXJjaE9uO1xuICAgICAgICAgICAgaWYgKHBhZ2luZy5ub1NlYXJjaCkgbm9TZWFyY2ggPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFwYWdpbmcuZmlsdGVyKSBwYWdpbmcuZmlsdGVyID0gXCJcIjtcbiAgICAgICAgICAgIGlmICghaXNBcnJheShwYWdpbmcuZmlsdGVyKSAmJiBpc05hTihwYWdpbmcuZmlsdGVyKSkge1xuICAgICAgICAgICAgICAgIHBhZ2luZy5maWx0ZXIgPSBwYWdpbmcuZmlsdGVyLnNwbGl0KCcjJykuam9pbignJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmlsdGVycy5mb3JFYWNoKChmaWx0ZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBsZXQgZmlsdGVyVmFsID0gJyc7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpbHRlci50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnVEVYVElOUFVUJzpcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVyYiA9IGZpbHRlci52ZXJiID8gZmlsdGVyLnZlcmIgOiAnY29udGFpbnMnO1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJWYWwgPSBgJHtmaWx0ZXIuY29sdW1uSWR9ICR7dmVyYn0gXCIke2ZpbHRlci52YWx1ZX1cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIucmF3RmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdpbmcucmF3RmlsdGVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdTRUxFQ1QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0NPTUJPJzpcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsID0gaXNOdW1iZXIoZmlsdGVyLnZhbHVlKSB8fCBpc0Jvb2xlYW4oZmlsdGVyLnZhbHVlKSA/IGAke2ZpbHRlci52YWx1ZX1gIDogYFwiJHtmaWx0ZXIudmFsdWV9XCJgO1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJWYWwgPSBgJHtmaWx0ZXIuY29sdW1uSWR9ID0gJHt2YWx9YDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnREFURVRJTUUnOlxuICAgICAgICAgICAgICAgICAgICBwYWdpbmcucmF3RmlsdGVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyVmFsID0gYCR7ZmlsdGVyLmNvbHVtbklkfSA+PSBkYXRldGltZSgke2ZpbHRlci52YWx1ZVswXX0pIGFuZCAke2ZpbHRlci5jb2x1bW5JZH0gPD0gZGF0ZXRpbWUoJHtmaWx0ZXIudmFsdWVbMV19KWA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ0FUVFJJQlVURSc6XG4gICAgICAgICAgICAgICAgICAgIHBhZ2luZy5yYXdGaWx0ZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJWYWwgPSB0aGlzLmdldEF0dHJpYnV0ZUZpbHRlcihmaWx0ZXIudmFsdWUsIGZpbHRlci5jb2x1bW5JZCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclZhbCA9IGAke2ZpbHRlci5jb2x1bW5JZH0gY29udGFpbnMgXCIke2ZpbHRlci52YWx1ZX1cImA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGluZGV4IDw9IDApIHtcbiAgICAgICAgICAgICAgICB1cmxGaWx0ZXIgPSBgJHtmaWx0ZXJWYWx9YDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdXJsRmlsdGVyICs9IGAgYW5kICR7ZmlsdGVyVmFsfWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHVybEZpbHRlcjtcbiAgICB9XG5cbiAgICBnZXRBdHRyaWJ1dGVGaWx0ZXIodmFsLCBjb2x1bW5JZCkge1xuICAgICAgICBsZXQgZmlsdGVyID0gJyc7XG4gICAgICAgIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgICAgICAgIHZhbC5mb3JFYWNoKChhdHRyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyICs9ICcgb3IgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmlsdGVyICs9IGBhbnlPZigke2NvbHVtbklkfSkgPSBcIiR7YXR0cn1cImA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpbHRlciA9IGBhbnlPZigke2NvbHVtbklkfSkgPSBcIiR7dmFsfVwiYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVyO1xuICAgIH1cblxuICAgIGhhbmRsZUVycm9yKHJlc3VsdHMpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IocmVzdWx0cz8uZXJyb3IpXG4gICAgfVxufVxuIl19
|