ngx-render-material-forms 1.4.8 → 1.5.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/esm2020/lib/components/add-on-products/add-on-products.component.mjs +329 -0
- package/esm2020/lib/components/button/button.component.mjs +15 -11
- package/esm2020/lib/components/common.service.mjs +85 -0
- package/esm2020/lib/components/datagrid/datagrid.component.mjs +223 -19
- package/esm2020/lib/components/select/select.component.mjs +99 -127
- package/esm2020/lib/ngx-render-material-forms.module.mjs +16 -6
- package/fesm2015/ngx-render-material-forms.js +747 -163
- package/fesm2015/ngx-render-material-forms.mjs.map +1 -1
- package/fesm2020/ngx-render-material-forms.js +737 -163
- package/fesm2020/ngx-render-material-forms.mjs.map +1 -1
- package/lib/components/add-on-products/add-on-products.component.d.ts +76 -0
- package/lib/components/button/button.component.d.ts +6 -0
- package/lib/components/common.service.d.ts +23 -0
- package/lib/components/datagrid/datagrid.component.d.ts +21 -1
- package/lib/components/select/select.component.d.ts +2 -2
- package/lib/ngx-render-material-forms.module.d.ts +29 -27
- package/package.json +1 -1
|
@@ -5,6 +5,9 @@ import _ from 'lodash';
|
|
|
5
5
|
import { FormControl } from '@angular/forms';
|
|
6
6
|
import { Subject } from 'rxjs';
|
|
7
7
|
import { debounceTime, distinctUntilChanged, takeUntil } from 'rxjs/operators';
|
|
8
|
+
import { HttpHeaders } from '@angular/common/http';
|
|
9
|
+
import * as CryptoJS from 'crypto-js';
|
|
10
|
+
import { isNullOrUndefined } from 'util';
|
|
8
11
|
import * as i0 from "@angular/core";
|
|
9
12
|
import * as i1 from "@angular/common/http";
|
|
10
13
|
import * as i2 from "@angular/common";
|
|
@@ -39,8 +42,8 @@ export class MaterialSelectComponent extends MaterialComponent {
|
|
|
39
42
|
// Variable to hold the reference to the current panel element
|
|
40
43
|
this.currentPanelElement = null;
|
|
41
44
|
this.openCounter = 1;
|
|
42
|
-
|
|
43
|
-
|
|
45
|
+
this.holy = CryptoJS.enc.Base64.parse('8F/2+T2NXqUBQERR12R4sw==');
|
|
46
|
+
this.grail = CryptoJS.enc.Base64.parse('yE0CgQbYzK5wqeoKTVzhOQ==');
|
|
44
47
|
}
|
|
45
48
|
onInputChange(event) {
|
|
46
49
|
if (this.instance.component.key.toLowerCase() === 'vendorproductid' && event.target.value === '') {
|
|
@@ -52,29 +55,28 @@ export class MaterialSelectComponent extends MaterialComponent {
|
|
|
52
55
|
this.onClearAll();
|
|
53
56
|
}
|
|
54
57
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
// }
|
|
58
|
+
scrumble(msg) {
|
|
59
|
+
if (!isNullOrUndefined(msg)) {
|
|
60
|
+
var conceal = this.getcampaign(msg, this.holy, this.grail);
|
|
61
|
+
var sha256 = CryptoJS.HmacSHA256(CryptoJS.enc.Base64.stringify(this.grail) + conceal.toString(), CryptoJS.enc.Base64.stringify(this.holy));
|
|
62
|
+
var hashInBase64 = CryptoJS.enc.Base64.stringify(sha256);
|
|
63
|
+
let keyValue = {
|
|
64
|
+
"value": conceal.toString(),
|
|
65
|
+
"mac": hashInBase64
|
|
66
|
+
};
|
|
67
|
+
var result = JSON.stringify(keyValue);
|
|
68
|
+
var jumbled = CryptoJS.enc.Utf8.parse(result);
|
|
69
|
+
return CryptoJS.enc.Base64.stringify(jumbled);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
getcampaign(data, holy, grail) {
|
|
73
|
+
return CryptoJS.AES.encrypt(data.toString(), holy, {
|
|
74
|
+
blockSize: 128,
|
|
75
|
+
iv: grail,
|
|
76
|
+
mode: CryptoJS.mode.CBC,
|
|
77
|
+
padding: CryptoJS.pad.Pkcs7
|
|
78
|
+
});
|
|
79
|
+
}
|
|
78
80
|
registerPanelScrollEvent(selectElem) {
|
|
79
81
|
const panelElement = selectElem.panel.nativeElement;
|
|
80
82
|
panelElement.addEventListener('scroll', this.onScroll.bind(this));
|
|
@@ -113,78 +115,74 @@ export class MaterialSelectComponent extends MaterialComponent {
|
|
|
113
115
|
return item ? item.value : null;
|
|
114
116
|
}
|
|
115
117
|
loadData(pageNumber, pageSize, searchQuery) {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
// if
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
//
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
//
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
// }, 250);
|
|
185
|
-
// }
|
|
186
|
-
// }
|
|
187
|
-
// });
|
|
118
|
+
const paramsData = JSON.parse(localStorage.getItem('productPickerParams'));
|
|
119
|
+
const includeDescription = this.getValueByKey(paramsData, 'includeDescription');
|
|
120
|
+
const vendorId = this.getValueByKey(paramsData, 'vendorId');
|
|
121
|
+
const onlyActive = this.getValueByKey(paramsData, 'onlyActive');
|
|
122
|
+
var currentUser = JSON.parse(localStorage.getItem('currentUser'));
|
|
123
|
+
let headers;
|
|
124
|
+
if (currentUser && currentUser.Tokens && currentUser.Tokens.AccessToken) {
|
|
125
|
+
var accessToken = currentUser.Tokens.AccessToken;
|
|
126
|
+
headers = new HttpHeaders({
|
|
127
|
+
'Content-Type': 'application/json',
|
|
128
|
+
'Authorization': 'Bearer ' + accessToken
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
console.error('User not authenticated or tokens missing.');
|
|
133
|
+
}
|
|
134
|
+
const envendorId = this.scrumble(vendorId);
|
|
135
|
+
const enpageNumber = this.scrumble(pageNumber);
|
|
136
|
+
const enpageSize = this.scrumble(pageSize);
|
|
137
|
+
const ensearchQuery = this.scrumble(searchQuery);
|
|
138
|
+
let enactive = this.scrumble(onlyActive);
|
|
139
|
+
//Check if enactive is undefined, null, or blank
|
|
140
|
+
if (enactive === undefined || enactive === null || enactive === '') {
|
|
141
|
+
enactive = this.scrumble(true); // Set default value to true
|
|
142
|
+
}
|
|
143
|
+
// Scrumble and handle the includeDescription parameter
|
|
144
|
+
let endescription = this.scrumble(includeDescription);
|
|
145
|
+
if (!endescription) {
|
|
146
|
+
endescription = this.scrumble(false); // Set to 'false' if undefined, null, or blank
|
|
147
|
+
}
|
|
148
|
+
const baseUrlMapping = {
|
|
149
|
+
'localhost': 'http://localhost:58504',
|
|
150
|
+
'lincoln.vartopia.com': 'https://lincoln-api.vartopia.com',
|
|
151
|
+
'stage.vartopia.com': 'https://stage-api.vartopia.com',
|
|
152
|
+
'my.vartopia.com': 'https://reagan-api.vartopia.com',
|
|
153
|
+
'jackson.vartopia.com': 'https://jackson-api.vartopia.com'
|
|
154
|
+
};
|
|
155
|
+
// Get the current hostname
|
|
156
|
+
const hostname = window.location.hostname;
|
|
157
|
+
const baseApiUrl = baseUrlMapping[hostname] || null;
|
|
158
|
+
this.http.get(`${baseApiUrl}/api/VendorFormBuilder/GetVendorProducts?vendorId=${envendorId}&pageNumber=${enpageNumber}&pageSize=${enpageSize}&search=${ensearchQuery}&onlyActive=${enactive}&includeDescription=${endescription}`, { headers }).subscribe(response => {
|
|
159
|
+
if (response && response.code === 200) {
|
|
160
|
+
if (this.instance.component.key.toLowerCase() === 'vendorproductid') {
|
|
161
|
+
this.totalPages = response?.data?.totalPages;
|
|
162
|
+
const data = response.data.dataSource;
|
|
163
|
+
this.filteredOptionsLength = data.length;
|
|
164
|
+
if (this.productList.length > 0) {
|
|
165
|
+
data.map(item => {
|
|
166
|
+
return item;
|
|
167
|
+
}).forEach(i => this.productList.push(i));
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
this.productList = data;
|
|
171
|
+
}
|
|
172
|
+
// Update filteredOptions with transformedData
|
|
173
|
+
var allProductList = this.transformResponseData(this.productList);
|
|
174
|
+
this.filteredOptions = Promise.resolve(allProductList);
|
|
175
|
+
this.searching = false;
|
|
176
|
+
this.productsloadingFlag = true;
|
|
177
|
+
setTimeout(() => {
|
|
178
|
+
const ele = this.selectElem.panel.nativeElement;
|
|
179
|
+
const trackHeight = ele.scrollHeight - ele.offsetHeight;
|
|
180
|
+
const middlePosition = trackHeight / 2 - 50;
|
|
181
|
+
ele.scrollTo({ top: middlePosition, behavior: 'auto' });
|
|
182
|
+
}, 250);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
});
|
|
188
186
|
}
|
|
189
187
|
// Utility function to transform response data
|
|
190
188
|
transformResponseData(data) {
|
|
@@ -236,7 +234,7 @@ export class MaterialSelectComponent extends MaterialComponent {
|
|
|
236
234
|
if (this.instance.component.key.toLowerCase() === 'vendorproductid') {
|
|
237
235
|
this.selectElem.openedChange.subscribe((isOpen) => {
|
|
238
236
|
if (isOpen) {
|
|
239
|
-
this.pageNumber =
|
|
237
|
+
this.pageNumber = 2;
|
|
240
238
|
this.pageSize = 20;
|
|
241
239
|
this.searchQuery = '';
|
|
242
240
|
this.searching = false;
|
|
@@ -295,32 +293,6 @@ export class MaterialSelectComponent extends MaterialComponent {
|
|
|
295
293
|
});
|
|
296
294
|
this.filteredOptions = this.selectOptions;
|
|
297
295
|
}
|
|
298
|
-
isError() {
|
|
299
|
-
if (this.instance.error) {
|
|
300
|
-
this.control.setErrors(this.instance.component.validate);
|
|
301
|
-
return true;
|
|
302
|
-
}
|
|
303
|
-
else {
|
|
304
|
-
return false;
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
getErrorMessage() {
|
|
308
|
-
if (this.instance.error && this.instance.error.messages) {
|
|
309
|
-
const { messages } = this.instance.error;
|
|
310
|
-
if (messages.length) {
|
|
311
|
-
for (const msg of messages) {
|
|
312
|
-
if (msg.context) {
|
|
313
|
-
if (this.instance && this.instance.parent && this.instance.parent._data) {
|
|
314
|
-
if (this.instance.parent._data.submit) {
|
|
315
|
-
this.control.markAllAsTouched();
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
return this.instance.error ? this.instance.error.message : '';
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
296
|
compareObjects(o1, o2) {
|
|
325
297
|
return _.isEqual(o1, o2);
|
|
326
298
|
}
|
|
@@ -363,7 +335,7 @@ MaterialSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
|
|
|
363
335
|
<span *ngIf="instance.component.suffix" matSuffix>
|
|
364
336
|
{{ instance.component.suffix }}
|
|
365
337
|
</span>
|
|
366
|
-
|
|
338
|
+
<mat-error *ngIf="instance.error">{{ instance.error.message }}</mat-error>
|
|
367
339
|
</mat-form-field>
|
|
368
340
|
</ng-template>
|
|
369
341
|
`, isInline: true, styles: [".example-viewport{height:200px}.product-picker{overflow-x:hidden}.virtual-full-view{height:auto!important;white-space:normal!important;line-height:1.4!important;text-overflow:initial!important;min-height:48px!important;overflow:visible!important;overflow:initial!important;padding-top:10px!important;padding-bottom:10px!important}::ng-deep .product-picker .cdk-virtual-scroll-content-wrapper{width:100%!important}.virtual-full-view .mat-pseudo-checkbox{align-self:top!important}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatPrefix, selector: "[matPrefix]" }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix]" }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "component", type: i9.MatSelectSearchComponent, selector: "ngx-mat-select-search", inputs: ["placeholderLabel", "type", "closeIcon", "closeSvgIcon", "noEntriesFoundLabel", "indexAndLengthScreenReaderText", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toogleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti"], outputs: ["toggleAll"] }, { kind: "directive", type: i9.MatSelectSearchClearDirective, selector: "[ngxMatSelectSearchClear]" }, { kind: "component", type: i10.FormioFormFieldComponent, selector: "mat-formio-form-field", inputs: ["labelTemplate", "renderTopLabel", "showDescription", "renderElementOnly", "instance", "componentTemplate"] }, { kind: "component", type: i11.LabelComponent, selector: "span[matFormioLabel]", inputs: ["instance"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] });
|
|
@@ -406,7 +378,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
|
|
|
406
378
|
<span *ngIf="instance.component.suffix" matSuffix>
|
|
407
379
|
{{ instance.component.suffix }}
|
|
408
380
|
</span>
|
|
409
|
-
|
|
381
|
+
<mat-error *ngIf="instance.error">{{ instance.error.message }}</mat-error>
|
|
410
382
|
</mat-form-field>
|
|
411
383
|
</ng-template>
|
|
412
384
|
`, styles: [".example-viewport{height:200px}.product-picker{overflow-x:hidden}.virtual-full-view{height:auto!important;white-space:normal!important;line-height:1.4!important;text-overflow:initial!important;min-height:48px!important;overflow:visible!important;overflow:initial!important;padding-top:10px!important;padding-bottom:10px!important}::ng-deep .product-picker .cdk-virtual-scroll-content-wrapper{width:100%!important}.virtual-full-view .mat-pseudo-checkbox{align-self:top!important}\n"] }]
|
|
@@ -427,4 +399,4 @@ SelectComponent.prototype.setItems = function (...args) {
|
|
|
427
399
|
}
|
|
428
400
|
};
|
|
429
401
|
export { SelectComponent };
|
|
430
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZW5kZXItbWF0ZXJpYWwtZm9ybXMvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0MsU0FBUyxFQUE0QyxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakksT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxlQUFlLE1BQU0sc0NBQXNDLENBQUM7QUFDbkUsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQVUsU0FBUyxFQUFPLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7QUE4RTVGLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxpQkFBaUI7SUF1QjVELFlBQW1CLE9BQW1CLEVBQVMsR0FBc0IsRUFBUyxJQUFnQjtRQUM1RixLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBREgsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUFTLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQVMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQWxCdkYscUJBQWdCLEdBQWdCLElBQUksV0FBVyxFQUFFLENBQUM7UUFDbEQsMkJBQXNCLEdBQWdCLElBQUksV0FBVyxFQUFFLENBQUM7UUFFckQsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFFckMsZ0NBQWdDO1FBQ2hDLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2QsZUFBVSxH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dUJBQUMsZUFBZTs7QUE4VTVCLGVBQWUsQ0FBQyxpQkFBaUIsR0FBRyx1QkFBdUIsQ0FBQztBQUU1RCxzRkFBc0Y7QUFDdEYsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDcEQsZUFBZSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxHQUFHLElBQUk7SUFDcEQsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUM3QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsb0JBQW9CLEVBQUU7UUFDekUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztLQUNqRTtBQUNILENBQUMsQ0FBQztBQUVGLE9BQU8sRUFBRSxlQUFlLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgT25Jbml0LCBSZW5kZXJlcjIsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRlcmlhbENvbXBvbmVudCB9IGZyb20gJy4uL01hdGVyaWFsQ29tcG9uZW50JztcclxuaW1wb3J0IFNlbGVjdENvbXBvbmVudCBmcm9tICdmb3JtaW9qcy9jb21wb25lbnRzL3NlbGVjdC9TZWxlY3QuanMnO1xyXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3QgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0ICogYXMgQ3J5cHRvSlMgZnJvbSAnY3J5cHRvLWpzJztcclxuaW1wb3J0IHsgaXNOdWxsT3JVbmRlZmluZWQgfSBmcm9tICd1dGlsJztcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdtYXQtZm9ybWlvLXNlbGVjdCcsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxtYXQtZm9ybWlvLWZvcm0tZmllbGQgW2luc3RhbmNlXT1cImluc3RhbmNlXCIgW2NvbXBvbmVudFRlbXBsYXRlXT1cImNvbXBvbmVudFRlbXBsYXRlXCI+PC9tYXQtZm9ybWlvLWZvcm0tZmllbGQ+XHJcbiAgICA8bmctdGVtcGxhdGUgI2NvbXBvbmVudFRlbXBsYXRlIGxldC1oYXNMYWJlbD5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmlsbD5cclxuXHJcbiAgICAgICAgPG1hdC1sYWJlbCAqbmdJZj1cImhhc0xhYmVsXCI+XHJcbiAgICAgICAgICA8c3BhbiBbaW5zdGFuY2VdPVwiaW5zdGFuY2VcIiBtYXRGb3JtaW9MYWJlbD48L3NwYW4+XHJcbiAgICAgICAgPC9tYXQtbGFiZWw+XHJcblxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaW5zdGFuY2UuY29tcG9uZW50LnByZWZpeFwiIG1hdFByZWZpeD5cclxuICAgICAgICAgIHt7IGluc3RhbmNlLmNvbXBvbmVudC5wcmVmaXggfX0mbmJzcDtcclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPG1hdC1zZWxlY3RcclxuICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJpbnN0YW5jZS5jb21wb25lbnQubXVsdGlwbGVcIlxyXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImluc3RhbmNlLmNvbXBvbmVudC5wbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIlxyXG4gICAgICAgICAgICAgICAgW2NvbXBhcmVXaXRoXT1cImNvbXBhcmVPYmplY3RzXCJcclxuICAgICAgICAgICAgICAgICNwcm9kdWN0U2VsZWN0XHJcbiAgICAgICAgPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uPlxyXG4gICAgICAgIDxuZ3gtbWF0LXNlbGVjdC1zZWFyY2ggW3NlYXJjaGluZ109XCJpbnN0YW5jZS5jb21wb25lbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICd2ZW5kb3Jwcm9kdWN0aWQnID8gc2VhcmNoaW5nIDogZmFsc2VcIiAoaW5wdXQpPVwib25JbnB1dENoYW5nZSgkZXZlbnQpXCIgcGxhY2Vob2xkZXJMYWJlbD1cIlR5cGUgdG8gc2VhcmNoXCIgW2Zvcm1Db250cm9sXT1cIndlYnNpdGVNdWx0aUZpbHRlckN0cmxcIj4gXHJcbiAgICAgICAgPG1hdC1pY29uIG5neE1hdFNlbGVjdFNlYXJjaENsZWFyIChjbGljayk9XCJjbGVhclByb2R1Y3RzKClcIj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9uZ3gtbWF0LXNlbGVjdC1zZWFyY2g+XHJcbiAgICAgIDwvbWF0LW9wdGlvbj5cclxuXHJcbiAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zIHwgYXN5bmNcIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCIgY2xhc3M9XCJ2aXJ0dWFsLWZ1bGwtdmlld1wiPlxyXG4gICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJvcHRpb24ubGFiZWxcIj48L3NwYW4+XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPiAgIFxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCIhZmlsdGVyZWRPcHRpb25zTGVuZ3RoXCIgZGlzYWJsZWQ+XHJcbiAgICAgICAgICAgIDxzcGFuPk5vdGhpbmcgd2FzIGZvdW5kPC9zcGFuPlxyXG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cclxuXHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJpbnN0YW5jZS5jb21wb25lbnQuc3VmZml4XCIgbWF0U3VmZml4PlxyXG4gICAgICAgICAge3sgaW5zdGFuY2UuY29tcG9uZW50LnN1ZmZpeCB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJpc0Vycm9yKClcIiA+e3sgZ2V0RXJyb3JNZXNzYWdlKCkgfX08L21hdC1lcnJvcj5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtgXHJcbiAgLmV4YW1wbGUtdmlld3BvcnQge1xyXG4gICAgaGVpZ2h0OiAyMDBweDtcclxuICB9XHJcbiAgXHJcbiAgLnByb2R1Y3QtcGlja2VyIHtcclxuICAgIG92ZXJmbG93LXg6IGhpZGRlbjsgLyogRGlzYWJsZSBob3Jpem9udGFsIHNjcm9sbGluZyAqL1xyXG4gIH1cclxuXHJcbiAgLnZpcnR1YWwtZnVsbC12aWV3IHtcclxuICAgIGhlaWdodDogYXV0byAhaW1wb3J0YW50O1xyXG4gICAgd2hpdGUtc3BhY2U6IG5vcm1hbCAhaW1wb3J0YW50O1xyXG4gICAgbGluZS1oZWlnaHQ6IDEuNCAhaW1wb3J0YW50O1xyXG4gICAgdGV4dC1vdmVyZmxvdzogaW5pdGlhbCAhaW1wb3J0YW50O1xyXG4gICAgbWluLWhlaWdodDogNDhweCAhaW1wb3J0YW50O1xyXG4gICAgb3ZlcmZsb3c6IGluaXRpYWwgIWltcG9ydGFudDtcclxuICAgIHBhZGRpbmctdG9wOiAxMHB4ICFpbXBvcnRhbnQ7XHJcbiAgICBwYWRkaW5nLWJvdHRvbTogMTBweCAhaW1wb3J0YW50O1xyXG4gIH1cclxuXHJcbiAgOjpuZy1kZWVwIC5wcm9kdWN0LXBpY2tlciAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlciB7XHJcbiAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XHJcbiAgfVxyXG5cclxuICAudmlydHVhbC1mdWxsLXZpZXcgLm1hdC1wc2V1ZG8tY2hlY2tib3gge1xyXG4gICAgYWxpZ24tc2VsZjogdG9wICFpbXBvcnRhbnQ7XHJcbiAgfVxyXG5cclxuYF1cclxufSlcclxuZXhwb3J0IGNsYXNzIE1hdGVyaWFsU2VsZWN0Q29tcG9uZW50IGV4dGVuZHMgTWF0ZXJpYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgc2VsZWN0T3B0aW9uczogUHJvbWlzZTxhbnlbXT47XHJcbiAgZmlsdGVyZWRPcHRpb25zOiBQcm9taXNlPGFueVtdPjtcclxuICBmaWx0ZXJlZE9wdGlvbnNMZW5ndGg6IG51bWJlcjtcclxuICBzZWxlY3RPcHRpb25zUmVzb2x2ZTogYW55O1xyXG4gIHB1YmxpYyB3ZWJzaXRlTXVsdGlDdHJsOiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG4gIHB1YmxpYyB3ZWJzaXRlTXVsdGlGaWx0ZXJDdHJsOiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG4gIEBWaWV3Q2hpbGQoJ211bHRpU2VsZWN0JywgeyBzdGF0aWM6IHRydWUgfSkgbXVsdGlTZWxlY3Q6IE1hdFNlbGVjdDtcclxuICBwcm90ZWN0ZWQgX29uRGVzdHJveSA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgQFZpZXdDaGlsZCgncHJvZHVjdFNlbGVjdCcpIHNlbGVjdEVsZW06IE1hdFNlbGVjdDtcclxuICAvLyBWYXJpYWJsZXMgdG8gdHJhY2sgcGFnaW5hdGlvblxyXG4gIHBhZ2VOdW1iZXIgPSAxO1xyXG4gIHBhZ2VTaXplID0gMjA7XHJcbiAgdG90YWxQYWdlcyA9IDA7XHJcbiAgc2VhcmNoUXVlcnkgPSAnJztcclxuICBob2x5OiBhbnkgPSAnJztcclxuICBncmFpbDogYW55ID0gJyc7XHJcbiAgcHJvZHVjdHNsb2FkaW5nRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzZWFyY2hpbmcgPSBmYWxzZTtcclxuICBwcm9kdWN0TGlzdDogYW55W10gPSBbXTtcclxuICAvLyBWYXJpYWJsZSB0byBob2xkIHRoZSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcGFuZWwgZWxlbWVudFxyXG4gIHByaXZhdGUgY3VycmVudFBhbmVsRWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcclxuICBvcGVuQ291bnRlcjogbnVtYmVyID0gMVxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50OiBFbGVtZW50UmVmLCBwdWJsaWMgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHVibGljIGh0dHA6IEh0dHBDbGllbnQpIHtcclxuICAgIHN1cGVyKGVsZW1lbnQsIHJlZik7XHJcbiAgICAvLyB0aGlzLmhvbHkgPSBDcnlwdG9KUy5lbmMuQmFzZTY0LnBhcnNlKCc4Ri8yK1QyTlhxVUJRRVJSMTJSNHN3PT0nKTtcclxuICAgIC8vIHRoaXMuZ3JhaWwgPSBDcnlwdG9KUy5lbmMuQmFzZTY0LnBhcnNlKCd5RTBDZ1FiWXpLNXdxZW9LVFZ6aE9RPT0nKTtcclxuICB9XHJcblxyXG4gIG9uSW5wdXRDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuaW5zdGFuY2UuY29tcG9uZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAndmVuZG9ycHJvZHVjdGlkJyAmJiBldmVudC50YXJnZXQudmFsdWUgPT09ICcnKSB7XHJcbiAgICAgIHRoaXMub25DbGVhckFsbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xlYXJQcm9kdWN0cygpIHtcclxuICAgIGlmICh0aGlzLmluc3RhbmNlLmNvbXBvbmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3ZlbmRvcnByb2R1Y3RpZCcpIHtcclxuICAgICAgdGhpcy5vbkNsZWFyQWxsKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gc2NydW1ibGUobXNnKSB7XHJcbiAgLy8gICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKG1zZykpIHtcclxuICAvLyAgICAgdmFyIGNvbmNlYWwgPSB0aGlzLmdldGNhbXBhaWduKG1zZywgdGhpcy5ob2x5LCB0aGlzLmdyYWlsKTtcclxuICAvLyAgICAgdmFyIHNoYTI1NiA9IENyeXB0b0pTLkhtYWNTSEEyNTYoQ3J5cHRvSlMuZW5jLkJhc2U2NC5zdHJpbmdpZnkodGhpcy5ncmFpbCkgKyBjb25jZWFsLnRvU3RyaW5nKCksIENyeXB0b0pTLmVuYy5CYXNlNjQuc3RyaW5naWZ5KHRoaXMuaG9seSkpO1xyXG4gIC8vICAgICB2YXIgaGFzaEluQmFzZTY0ID0gQ3J5cHRvSlMuZW5jLkJhc2U2NC5zdHJpbmdpZnkoc2hhMjU2KTtcclxuICAvLyAgICAgbGV0IGtleVZhbHVlID0ge1xyXG4gIC8vICAgICAgIFwidmFsdWVcIjogY29uY2VhbC50b1N0cmluZygpLFxyXG4gIC8vICAgICAgIFwibWFjXCI6IGhhc2hJbkJhc2U2NFxyXG4gIC8vICAgICB9O1xyXG4gIC8vICAgICB2YXIgcmVzdWx0ID0gSlNPTi5zdHJpbmdpZnkoa2V5VmFsdWUpO1xyXG4gIC8vICAgICB2YXIganVtYmxlZCA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKHJlc3VsdCk7XHJcbiAgLy8gICAgIHJldHVybiBDcnlwdG9KUy5lbmMuQmFzZTY0LnN0cmluZ2lmeShqdW1ibGVkKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIC8vIGdldGNhbXBhaWduKGRhdGE6IGFueSwgaG9seTogYW55LCBncmFpbDogYW55KSB7XHJcbiAgLy8gICByZXR1cm4gQ3J5cHRvSlMuQUVTLmVuY3J5cHQoZGF0YS50b1N0cmluZygpLCBob2x5LFxyXG4gIC8vICAgICB7XHJcbiAgLy8gICAgICAgYmxvY2tTaXplOiAxMjgsXHJcbiAgLy8gICAgICAgaXY6IGdyYWlsLFxyXG4gIC8vICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxyXG4gIC8vICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xyXG4gIC8vICAgICB9KTtcclxuICAvLyB9XHJcblxyXG5cclxuICByZWdpc3RlclBhbmVsU2Nyb2xsRXZlbnQoc2VsZWN0RWxlbTogTWF0U2VsZWN0KSB7XHJcbiAgICBjb25zdCBwYW5lbEVsZW1lbnQgPSBzZWxlY3RFbGVtLnBhbmVsLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBwYW5lbEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblNjcm9sbC5iaW5kKHRoaXMpKTtcclxuXHJcbiAgfVxyXG5cclxuICBvblNjcm9sbChldmVudCkge1xyXG4gICAgaWYgKHRoaXMuaW5zdGFuY2UuY29tcG9uZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAndmVuZG9ycHJvZHVjdGlkJykge1xyXG4gICAgICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xyXG4gICAgICBjb25zdCB0cmFja0hlaWdodCA9IHNjcm9sbEVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsRWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgIGlmICh0aGlzLm9wZW5Db3VudGVyIDwgMikge1xyXG4gICAgICAgIGNvbnN0IHJldHJpZXZlZE9iamVjdCA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3N0b3JhZ2VPYmplY3QnKSk7XHJcbiAgICAgICAgdGhpcy50b3RhbFBhZ2VzID0gTnVtYmVyKHJldHJpZXZlZE9iamVjdD8udG90YWxQYWdlcyk7XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0c2xvYWRpbmdGbGFnID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnByb2R1Y3RMaXN0ID0gcmV0cmlldmVkT2JqZWN0Py5kYXRhU291cmNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnByb2R1Y3RzbG9hZGluZ0ZsYWcgJiYgTWF0aC5mbG9vcihzY3JvbGxFbGVtZW50LnNjcm9sbFRvcCAvIHRyYWNrSGVpZ2h0ICogMTAwKSA+IDUwKSB7XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0c2xvYWRpbmdGbGFnID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5vcGVuQ291bnRlciA9IHRoaXMub3BlbkNvdW50ZXIgKyAxO1xyXG4gICAgICAgIGlmICh0aGlzLnBhZ2VOdW1iZXIgPCB0aGlzLnRvdGFsUGFnZXMpIHtcclxuICAgICAgICAgIHRoaXMucGFnZU51bWJlciA9IHRoaXMucGFnZU51bWJlciArIDE7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmxvYWREYXRhKHRoaXMucGFnZU51bWJlciwgdGhpcy5wYWdlU2l6ZSwgdGhpcy5zZWFyY2hRdWVyeSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5wcm9kdWN0c2xvYWRpbmdGbGFnID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBGdW5jdGlvbiB0byBnZXQgdmFsdWUgYnkga2V5IGZyb20gdGhlIGFycmF5XHJcbiAgZ2V0VmFsdWVCeUtleShkYXRhLCBrZXkpIHtcclxuICAgIGlmICghZGF0YSB8fCBkYXRhLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gbnVsbDsgLy8gUmV0dXJuIG51bGwgaWYgZGF0YSBpcyBlbXB0eSBvciB1bmRlZmluZWRcclxuICAgIH1cclxuICAgIGNvbnN0IGl0ZW0gPSBkYXRhLmZpbmQoa3YgPT4ga3Yua2V5LnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpKTtcclxuICAgIHJldHVybiBpdGVtID8gaXRlbS52YWx1ZSA6IG51bGw7XHJcbiAgfVxyXG5cclxuXHJcbiAgbG9hZERhdGEocGFnZU51bWJlciwgcGFnZVNpemUsIHNlYXJjaFF1ZXJ5KSB7XHJcbiAgICAvLyBjb25zdCBwYXJhbXNEYXRhID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncHJvZHVjdFBpY2tlclBhcmFtcycpKTtcclxuICAgIC8vIGNvbnN0IGluY2x1ZGVEZXNjcmlwdGlvbiA9IHRoaXMuZ2V0VmFsdWVCeUtleShwYXJhbXNEYXRhLCAnaW5jbHVkZURlc2NyaXB0aW9uJyk7XHJcbiAgICAvLyBjb25zdCB2ZW5kb3JJZCA9IHRoaXMuZ2V0VmFsdWVCeUtleShwYXJhbXNEYXRhLCAndmVuZG9ySWQnKTtcclxuICAgIC8vIGNvbnN0IG9ubHlBY3RpdmUgPSB0aGlzLmdldFZhbHVlQnlLZXkocGFyYW1zRGF0YSwgJ29ubHlBY3RpdmUnKTtcclxuICAgIC8vIHZhciBjdXJyZW50VXNlciA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2N1cnJlbnRVc2VyJykpO1xyXG4gICAgLy8gbGV0IGhlYWRlcnM7XHJcbiAgICAvLyBpZiAoY3VycmVudFVzZXIgJiYgY3VycmVudFVzZXIuVG9rZW5zICYmIGN1cnJlbnRVc2VyLlRva2Vucy5BY2Nlc3NUb2tlbikge1xyXG4gICAgLy8gICB2YXIgYWNjZXNzVG9rZW4gPSBjdXJyZW50VXNlci5Ub2tlbnMuQWNjZXNzVG9rZW47XHJcbiAgICAvLyAgIGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgLy8gICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAvLyAgICAgJ0F1dGhvcml6YXRpb24nOiAnQmVhcmVyICcgKyBhY2Nlc3NUb2tlblxyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIH0gZWxzZSB7XHJcbiAgICAvLyAgIGNvbnNvbGUuZXJyb3IoJ1VzZXIgbm90IGF1dGhlbnRpY2F0ZWQgb3IgdG9rZW5zIG1pc3NpbmcuJyk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gY29uc3QgZW52ZW5kb3JJZCA9IHRoaXMuc2NydW1ibGUodmVuZG9ySWQpXHJcbiAgICAvLyBjb25zdCBlbnBhZ2VOdW1iZXIgPSB0aGlzLnNjcnVtYmxlKHBhZ2VOdW1iZXIpXHJcbiAgICAvLyBjb25zdCBlbnBhZ2VTaXplID0gdGhpcy5zY3J1bWJsZShwYWdlU2l6ZSk7XHJcbiAgICAvLyBjb25zdCBlbnNlYXJjaFF1ZXJ5ID0gdGhpcy5zY3J1bWJsZShzZWFyY2hRdWVyeSk7XHJcbiAgICAvLyBsZXQgZW5hY3RpdmUgPSB0aGlzLnNjcnVtYmxlKG9ubHlBY3RpdmUpO1xyXG4gICAgLy8gLy9DaGVjayBpZiBlbmFjdGl2ZSBpcyB1bmRlZmluZWQsIG51bGwsIG9yIGJsYW5rXHJcbiAgICAvLyBpZiAoZW5hY3RpdmUgPT09IHVuZGVmaW5lZCB8fCBlbmFjdGl2ZSA9PT0gbnVsbCB8fCBlbmFjdGl2ZSA9PT0gJycpIHtcclxuICAgIC8vICAgZW5hY3RpdmUgPSB0aGlzLnNjcnVtYmxlKHRydWUpOyAvLyBTZXQgZGVmYXVsdCB2YWx1ZSB0byB0cnVlXHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gLy8gU2NydW1ibGUgYW5kIGhhbmRsZSB0aGUgaW5jbHVkZURlc2NyaXB0aW9uIHBhcmFtZXRlclxyXG4gICAgLy8gbGV0IGVuZGVzY3JpcHRpb24gPSB0aGlzLnNjcnVtYmxlKGluY2x1ZGVEZXNjcmlwdGlvbik7XHJcbiAgICAvLyBpZiAoIWVuZGVzY3JpcHRpb24pIHtcclxuICAgIC8vICAgZW5kZXNjcmlwdGlvbiA9IHRoaXMuc2NydW1ibGUoZmFsc2UpOyAgLy8gU2V0IHRvICdmYWxzZScgaWYgdW5kZWZpbmVkLCBudWxsLCBvciBibGFua1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIGNvbnN0IGJhc2VVcmxNYXBwaW5nID0ge1xyXG4gICAgLy8gICAnbG9jYWxob3N0JzogJ2h0dHA6Ly9sb2NhbGhvc3Q6NTg1MDQnLFxyXG4gICAgLy8gICAnbGluY29sbi52YXJ0b3BpYS5jb20nOiAnaHR0cHM6Ly9saW5jb2xuLWFwaS52YXJ0b3BpYS5jb20nLFxyXG4gICAgLy8gICAnc3RhZ2UudmFydG9waWEuY29tJzogJ2h0dHBzOi8vc3RhZ2UtYXBpLnZhcnRvcGlhLmNvbScsXHJcbiAgICAvLyAgICdteS52YXJ0b3BpYS5jb20nOiAnaHR0cHM6Ly9yZWFnYW4tYXBpLnZhcnRvcGlhLmNvbScsXHJcbiAgICAvLyAgICdqYWNrc29uLnZhcnRvcGlhLmNvbSc6ICdodHRwczovL2phY2tzb24tYXBpLnZhcnRvcGlhLmNvbSdcclxuICAgIC8vIH07XHJcbiAgICAvLyAvLyBHZXQgdGhlIGN1cnJlbnQgaG9zdG5hbWVcclxuICAgIC8vIGNvbnN0IGhvc3RuYW1lID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xyXG4gICAgLy8gY29uc3QgYmFzZUFwaVVybCA9IGJhc2VVcmxNYXBwaW5nW2hvc3RuYW1lXSB8fCBudWxsO1xyXG4gICAgLy8gaW50ZXJmYWNlIFZlbmRvclByb2R1Y3RzUmVzcG9uc2Uge1xyXG4gICAgLy8gICBjb2RlOiBudW1iZXI7XHJcbiAgICAvLyAgIGRhdGE6IGFueTtcclxuICAgIC8vICAgbWVzc2FnZTogc3RyaW5nO1xyXG4gICAgLy8gICBzdGF0dXNDb2RlOiBudW1iZXI7XHJcbiAgICAvLyB9XHJcbiAgICAvLyB0aGlzLmh0dHAuZ2V0PFZlbmRvclByb2R1Y3RzUmVzcG9uc2U+KGAke2Jhc2VBcGlVcmx9L2FwaS9WZW5kb3JGb3JtQnVpbGRlci9HZXRWZW5kb3JQcm9kdWN0cz92ZW5kb3JJZD0ke2VudmVuZG9ySWR9JnBhZ2VOdW1iZXI9JHtlbnBhZ2VOdW1iZXJ9JnBhZ2VTaXplPSR7ZW5wYWdlU2l6ZX0mc2VhcmNoPSR7ZW5zZWFyY2hRdWVyeX0mb25seUFjdGl2ZT0ke2VuYWN0aXZlfSZpbmNsdWRlRGVzY3JpcHRpb249JHtlbmRlc2NyaXB0aW9ufWAsIHsgaGVhZGVycyB9KS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgLy8gICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAvLyAgICAgaWYgKHRoaXMuaW5zdGFuY2UuY29tcG9uZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAndmVuZG9ycHJvZHVjdGlkJykge1xyXG4gICAgLy8gICAgICAgdGhpcy50b3RhbFBhZ2VzID0gcmVzcG9uc2U/LmRhdGE/LnRvdGFsUGFnZXM7XHJcbiAgICAvLyAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2UuZGF0YS5kYXRhU291cmNlO1xyXG4gICAgLy8gICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnNMZW5ndGggPSBkYXRhLmxlbmd0aDtcclxuICAgIC8vICAgICAgIGlmICh0aGlzLnByb2R1Y3RMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgIC8vICAgICAgICAgZGF0YS5tYXAoaXRlbSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgcmV0dXJuIGl0ZW1cclxuICAgIC8vICAgICAgICAgfSkuZm9yRWFjaChpID0+IHRoaXMucHJvZHVjdExpc3QucHVzaChpKSlcclxuICAgIC8vICAgICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgIHRoaXMucHJvZHVjdExpc3QgPSBkYXRhO1xyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgICAgLy8gVXBkYXRlIGZpbHRlcmVkT3B0aW9ucyB3aXRoIHRyYW5zZm9ybWVkRGF0YVxyXG4gICAgLy8gICAgICAgdmFyIGFsbFByb2R1Y3RMaXN0ID0gdGhpcy50cmFuc2Zvcm1SZXNwb25zZURhdGEodGhpcy5wcm9kdWN0TGlzdCk7XHJcbiAgICAvLyAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IFByb21pc2UucmVzb2x2ZShhbGxQcm9kdWN0TGlzdCk7XHJcbiAgICAvLyAgICAgICB0aGlzLnNlYXJjaGluZyA9IGZhbHNlO1xyXG4gICAgLy8gICAgICAgdGhpcy5wcm9kdWN0c2xvYWRpbmdGbGFnID0gdHJ1ZTtcclxuICAgIC8vICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICBjb25zdCBlbGUgPSB0aGlzLnNlbGVjdEVsZW0ucGFuZWwubmF0aXZlRWxlbWVudDtcclxuICAgIC8vICAgICAgICAgY29uc3QgdHJhY2tIZWlnaHQgPSBlbGUuc2Nyb2xsSGVpZ2h0IC0gZWxlLm9mZnNldEhlaWdodFxyXG4gICAgLy8gICAgICAgICBjb25zdCBtaWRkbGVQb3NpdGlvbiA9IHRyYWNrSGVpZ2h0IC8gMiAtIDUwO1xyXG4gICAgLy8gICAgICAgICBlbGUuc2Nyb2xsVG8oeyB0b3A6IG1pZGRsZVBvc2l0aW9uLCBiZWhhdmlvcjogJ2F1dG8nIH0pO1xyXG4gICAgLy8gICAgICAgfSwgMjUwKTtcclxuICAgIC8vICAgICB9XHJcblxyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9KTtcclxuICB9XHJcblxyXG4gIC8vIFV0aWxpdHkgZnVuY3Rpb24gdG8gdHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcclxuICB0cmFuc2Zvcm1SZXNwb25zZURhdGEoZGF0YTogQXJyYXk8eyB0ZXh0OiBhbnksIHZhbHVlOiBhbnksIGRhdGU6IGFueSB9PiB8IG51bGwgfCB1bmRlZmluZWQpOiBBcnJheTx7IGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIsIGRhdGU6IHN0cmluZyB9PiB7XHJcbiAgICAvLyBDaGVjayBpZiBkYXRhIGlzIG5vdCBudWxsLCB1bmRlZmluZWQsIGFuZCBpcyBhbiBhcnJheSB3aXRoIGVsZW1lbnRzXHJcbiAgICBpZiAoZGF0YSAmJiBBcnJheS5pc0FycmF5KGRhdGEpICYmIGRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gZGF0YS5tYXAoaXRlbSA9PiAoe1xyXG4gICAgICAgIGxhYmVsOiBpdGVtLnRleHQsXHJcbiAgICAgICAgdmFsdWU6IGl0ZW0udmFsdWUsXHJcbiAgICAgICAgZGF0ZTogaXRlbS5kYXRlXHJcbiAgICAgIH0pKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFJldHVybiBhbiBlbXB0eSBhcnJheSBpZiBkYXRhIGlzIG51bGwsIHVuZGVmaW5lZCwgb3IgZW1wdHlcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBmaWx0ZXJXZWJzaXRlTXVsdGkoKSB7XHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0T3B0aW9ucykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgc2VhcmNoID0gdGhpcy53ZWJzaXRlTXVsdGlGaWx0ZXJDdHJsLnZhbHVlO1xyXG4gICAgc2VhcmNoID0gc2VhcmNoLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMuc2VsZWN0T3B0aW9ucy50aGVuKChvcHRpb25zKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZpbHRlcmVkID0gb3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLmxhYmVsLnJlcGxhY2UoLzxcXC8/c3BhbltePl0qPi9nLCBcIlwiKS50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoKSAhPT0gLTEpO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkT3B0aW9uc0xlbmd0aCA9IGZpbHRlcmVkLmxlbmd0aDtcclxuICAgICAgcmV0dXJuIGZpbHRlcmVkO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLl9vbkRlc3Ryb3kubmV4dCgnJyk7XHJcbiAgICB0aGlzLl9vbkRlc3Ryb3kuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG5cclxuICAvKkVuZCovXHJcbiAgc2V0SW5zdGFuY2UoaW5zdGFuY2U6IGFueSkge1xyXG4gICAgc3VwZXIuc2V0SW5zdGFuY2UoaW5zdGFuY2UpO1xyXG4gICAgdGhpcy5pbnN0YW5jZS50cmlnZ2VyVXBkYXRlKCk7XHJcbiAgfVxyXG5cclxuICBvbkNsZWFyQWxsKCkge1xyXG4gICAgaWYgKHRoaXMuaW5zdGFuY2UuY29tcG9uZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAndmVuZG9ycHJvZHVjdGlkJykge1xyXG4gICAgICB0aGlzLnBhZ2VOdW1iZXIgPSAxO1xyXG4gICAgICB0aGlzLnBhZ2VTaXplID0gMjA7XHJcbiAgICAgIHRoaXMuc2VhcmNoUXVlcnkgPSAnJztcclxuICAgICAgdGhpcy5zZWFyY2hpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5wcm9kdWN0TGlzdCA9IFtdO1xyXG4gICAgICB0aGlzLmxvYWREYXRhKHRoaXMucGFnZU51bWJlciwgdGhpcy5wYWdlU2l6ZSwgdGhpcy5zZWFyY2hRdWVyeSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBpZiAodGhpcy5pbnN0YW5jZS5jb21wb25lbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICd2ZW5kb3Jwcm9kdWN0aWQnKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0RWxlbS5vcGVuZWRDaGFuZ2Uuc3Vic2NyaWJlKChpc09wZW46IGJvb2xlYW4pID0+IHtcclxuICAgICAgICBpZiAoaXNPcGVuKSB7XHJcbiAgICAgICAgICB0aGlzLnBhZ2VOdW1iZXIgPSAxO1xyXG4gICAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IDIwO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hRdWVyeSA9ICcnO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIC8vdGhpcy5sb2FkRGF0YSh0aGlzLnBhZ2VOdW1iZXIsIHRoaXMucGFnZVNpemUsIHRoaXMuc2VhcmNoUXVlcnkpO1xyXG4gICAgICAgICAgdGhpcy5yZWdpc3RlclBhbmVsU2Nyb2xsRXZlbnQodGhpcy5zZWxlY3RFbGVtKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5yZW1vdmVQYW5lbFNjcm9sbEV2ZW50KCk7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgbGV0IHNlbGVjdGVkVmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRWYWx1ZS50b1N0cmluZygpLmxlbmd0aCA9PSAwICYmIHRoaXMuc2VhcmNoUXVlcnkgPT0gJycpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9kdWN0TGlzdCA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWREYXRhKHRoaXMucGFnZU51bWJlciwgdGhpcy5wYWdlU2l6ZSwgdGhpcy5zZWFyY2hRdWVyeSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZVBhbmVsU2Nyb2xsRXZlbnQoKSB7XHJcbiAgICAvLyBSZW1vdmUgdGhlIHNjcm9sbCBldmVudCBsaXN0ZW5lclxyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhbmVsRWxlbWVudCkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRQYW5lbEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblNjcm9sbC5iaW5kKHRoaXMpKTtcclxuICAgICAgdGhpcy5jdXJyZW50UGFuZWxFbGVtZW50ID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgLypuZXcgbG9naWMgKi9cclxuICAgIGlmICh0aGlzLmluc3RhbmNlLmNvbXBvbmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3ZlbmRvcnByb2R1Y3RpZCcpIHtcclxuICAgICAgdGhpcy53ZWJzaXRlTXVsdGlGaWx0ZXJDdHJsLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDEwMDApLCAvLyBUaW1lIGluIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIGtleSBldmVudHNcclxuICAgICAgICAgIC8vICB0YXAoKCkgPT4gdGhpcy5zZWFyY2hpbmcgPSB0cnVlKSxcclxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95KSlcclxuICAgICAgICAuc3Vic2NyaWJlKChzZWFyY2hRdWVyeSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHNlYXJjaFF1ZXJ5ICE9ICcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFnZU51bWJlciA9IDE7XHJcbiAgICAgICAgICAgIHRoaXMucGFnZVNpemUgPSAyMDtcclxuICAgICAgICAgICAgdGhpcy5wcm9kdWN0TGlzdCA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZERhdGEodGhpcy5wYWdlTnVtYmVyLCB0aGlzLnBhZ2VTaXplLCBzZWFyY2hRdWVyeSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLndlYnNpdGVNdWx0aUZpbHRlckN0cmwudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95KSlcclxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyV2Vic2l0ZU11bHRpKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKkVuZCAqL1xyXG4gICAgdGhpcy5zZWxlY3RPcHRpb25zID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgdGhpcy5zZWxlY3RPcHRpb25zUmVzb2x2ZSA9IHJlc29sdmU7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2VsZWN0T3B0aW9ucy50aGVuKChvcHRpb25zKSA9PiB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zTGVuZ3RoID0gb3B0aW9ucy5sZW5ndGg7XHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5zZWxlY3RPcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgaXNFcnJvcigpIHtcclxuICAgIGlmICh0aGlzLmluc3RhbmNlLmVycm9yKSB7XHJcbiAgICAgIHRoaXMuY29udHJvbC5zZXRFcnJvcnModGhpcy5pbnN0YW5jZS5jb21wb25lbnQudmFsaWRhdGUpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRFcnJvck1lc3NhZ2UoKSB7XHJcbiAgICBpZiAodGhpcy5pbnN0YW5jZS5lcnJvciAmJiB0aGlzLmluc3RhbmNlLmVycm9yLm1lc3NhZ2VzKSB7XHJcbiAgICAgIGNvbnN0IHsgbWVzc2FnZXMgfSA9IHRoaXMuaW5zdGFuY2UuZXJyb3I7XHJcblxyXG4gICAgICBpZiAobWVzc2FnZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBtc2cgb2YgbWVzc2FnZXMpIHtcclxuICAgICAgICAgIGlmIChtc2cuY29udGV4dCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZSAmJiB0aGlzLmluc3RhbmNlLnBhcmVudCAmJiB0aGlzLmluc3RhbmNlLnBhcmVudC5fZGF0YSkge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmluc3RhbmNlLnBhcmVudC5fZGF0YS5zdWJtaXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlLmVycm9yID8gdGhpcy5pbnN0YW5jZS5lcnJvci5tZXNzYWdlIDogJyc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb21wYXJlT2JqZWN0cyhvMTogYW55LCBvMjogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gXy5pc0VxdWFsKG8xLCBvMik7XHJcbiAgfVxyXG59XHJcblNlbGVjdENvbXBvbmVudC5NYXRlcmlhbENvbXBvbmVudCA9IE1hdGVyaWFsU2VsZWN0Q29tcG9uZW50O1xyXG5cclxuLy8gTWFrZSBzdXJlIHdlIGRldGVjdCBjaGFuZ2VzIHdoZW4gbmV3IGl0ZW1zIG1ha2UgdGhlaXIgd2F5IGludG8gdGhlIHNlbGVjdCBkcm9wZG93bi5cclxuY29uc3Qgc2V0SXRlbXMgPSBTZWxlY3RDb21wb25lbnQucHJvdG90eXBlLnNldEl0ZW1zO1xyXG5TZWxlY3RDb21wb25lbnQucHJvdG90eXBlLnNldEl0ZW1zID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcclxuICBzZXRJdGVtcy5jYWxsKHRoaXMsIC4uLmFyZ3MpO1xyXG4gIGlmICh0aGlzLm1hdGVyaWFsQ29tcG9uZW50ICYmIHRoaXMubWF0ZXJpYWxDb21wb25lbnQuc2VsZWN0T3B0aW9uc1Jlc29sdmUpIHtcclxuICAgIHRoaXMubWF0ZXJpYWxDb21wb25lbnQuc2VsZWN0T3B0aW9uc1Jlc29sdmUodGhpcy5zZWxlY3RPcHRpb25zKTtcclxuICB9XHJcbn07XHJcblxyXG5leHBvcnQgeyBTZWxlY3RDb21wb25lbnQgfTtcclxuIl19
|
|
402
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZW5kZXItbWF0ZXJpYWwtZm9ybXMvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0MsU0FBUyxFQUE0QyxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakksT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxlQUFlLE1BQU0sc0NBQXNDLENBQUM7QUFDbkUsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQVUsU0FBUyxFQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUYsT0FBTyxFQUFjLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7OztBQTBFekMsTUFBTSxPQUFPLHVCQUF3QixTQUFRLGlCQUFpQjtJQXVCNUQsWUFBbUIsT0FBbUIsRUFBUyxHQUFzQixFQUFTLElBQWdCO1FBQzVGLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFESCxZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQVMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBUyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBbEJ2RixxQkFBZ0IsR0FBZ0IsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNsRCwyQkFBc0IsR0FBZ0IsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUVyRCxlQUFVLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUVyQyxnQ0FBZ0M7UUFDaEMsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUNmLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsU0FBSSxHQUFRLEVBQUUsQ0FBQztRQUNmLFVBQUssR0FBUSxFQUFFLENBQUM7UUFDaEIsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBQzlCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDekIsZ0JBQVcsR0FBVSxFQUFFLENBQUM7UUFDeEIsOERBQThEO1FBQ3RELHdCQUFtQixHQUF1QixJQUFJLENBQUM7UUFDdkQsZ0JBQVcsR0FBVyxDQUFDLENBQUE7UUFHckIsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBVTtRQUN0QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxpQkFBaUIsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxFQUFFLEVBQUU7WUFDaEcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ25CO0lBQ0gsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxpQkFBaUIsRUFBRTtZQUNuRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDbkI7SUFDSCxDQUFDO0lBR0QsUUFBUSxDQUFDLEdBQUc7UUFDVixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0QsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDM0ksSUFBSSxZQUFZLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3pELElBQUksUUFBUSxHQUFHO2dCQUNiLE9BQU8sRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFO2dCQUMzQixLQUFLLEVBQUUsWUFBWTthQUNwQixDQUFDO1lBQ0YsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0QyxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUMsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDL0M7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQVMsRUFBRSxJQUFTLEVBQUUsS0FBVTtRQUMxQyxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQy9DO1lBQ0UsU0FBUyxFQUFFLEdBQUc7WUFDZCxFQUFFLEVBQUUsS0FBSztZQUNULElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUc7WUFDdkIsT0FBTyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSztTQUM1QixDQUFDLENBQUM7SUFDUCxDQUFDO0lBR0Qsd0JBQXdCLENBQUMsVUFBcUI7UUFDNUMsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7UUFDcEQsWUFBWSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRXBFLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBSztRQUNaLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLGlCQUFpQixFQUFFO1lBQ25FLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDbkMsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLFlBQVksR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDO1lBQzVFLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUU7Z0JBQ3hCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO2dCQUMxRSxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxXQUFXLEdBQUcsZUFBZSxFQUFFLFVBQVUsQ0FBQzthQUNoRDtZQUNELElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxXQUFXLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUM1RixJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO2dCQUNqQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRTtvQkFDckMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtpQkFDaEU7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztvQkFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7aUJBQ3hCO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFFRCw4Q0FBOEM7SUFDOUMsYUFBYSxDQUFDLElBQUksRUFBRSxHQUFHO1FBQ3JCLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDOUIsT0FBTyxJQUFJLENBQUMsQ0FBQyw0Q0FBNEM7U0FDMUQ7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN6RSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2xDLENBQUM7SUFHRCxRQUFRLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxXQUFXO1FBQ3hDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7UUFDM0UsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2hFLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLElBQUksT0FBTyxDQUFDO1FBQ1osSUFBSSxXQUFXLElBQUksV0FBVyxDQUFDLE1BQU0sSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTtZQUN2RSxJQUFJLFdBQVcsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztZQUNqRCxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7Z0JBQ3hCLGNBQWMsRUFBRSxrQkFBa0I7Z0JBQ2xDLGVBQWUsRUFBRSxTQUFTLEdBQUcsV0FBVzthQUN6QyxDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1NBQzVEO1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUMxQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQzlDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0MsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pDLGdEQUFnRDtRQUNoRCxJQUFJLFFBQVEsS0FBSyxTQUFTLElBQUksUUFBUSxLQUFLLElBQUksSUFBSSxRQUFRLEtBQUssRUFBRSxFQUFFO1lBQ2xFLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsNEJBQTRCO1NBQzdEO1FBRUQsdURBQXVEO1FBQ3ZELElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ2xCLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUUsOENBQThDO1NBQ3RGO1FBRUQsTUFBTSxjQUFjLEdBQUc7WUFDckIsV0FBVyxFQUFFLHdCQUF3QjtZQUNyQyxzQkFBc0IsRUFBRSxrQ0FBa0M7WUFDMUQsb0JBQW9CLEVBQUUsZ0NBQWdDO1lBQ3RELGlCQUFpQixFQUFFLGlDQUFpQztZQUNwRCxzQkFBc0IsRUFBRSxrQ0FBa0M7U0FDM0QsQ0FBQztRQUNGLDJCQUEyQjtRQUMzQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUMxQyxNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDO1FBT3BELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUF5QixHQUFHLFVBQVUscURBQXFELFVBQVUsZUFBZSxZQUFZLGFBQWEsVUFBVSxXQUFXLGFBQWEsZUFBZSxRQUFRLHVCQUF1QixhQUFhLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzNSLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFO2dCQUNyQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxpQkFBaUIsRUFBRTtvQkFDbkUsSUFBSSxDQUFDLFVBQVUsR0FBRyxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQztvQkFDN0MsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO29CQUN6QyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTs0QkFDZCxPQUFPLElBQUksQ0FBQTt3QkFDYixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO3FCQUMxQzt5QkFBTTt3QkFDTCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztxQkFDekI7b0JBQ0QsOENBQThDO29CQUM5QyxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUNsRSxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7b0JBQ3ZELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO29CQUN2QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO29CQUNoQyxVQUFVLENBQUMsR0FBRyxFQUFFO3dCQUNkLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQzt3QkFDaEQsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFBO3dCQUN2RCxNQUFNLGNBQWMsR0FBRyxXQUFXLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDNUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7b0JBQzFELENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztpQkFDVDthQUVGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsOENBQThDO0lBQzlDLHFCQUFxQixDQUFDLElBQW9FO1FBQ3hGLHNFQUFzRTtRQUN0RSxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2xELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDaEIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO2dCQUNqQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7YUFDaEIsQ0FBQyxDQUFDLENBQUM7U0FDTDthQUFNO1lBQ0wsNkRBQTZEO1lBQzdELE9BQU8sRUFBRSxDQUFDO1NBQ1g7SUFDSCxDQUFDO0lBSUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3ZCLE9BQU87U0FDUjtRQUNELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUM7UUFDL0MsTUFBTSxHQUFHLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDekQsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUgsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDN0MsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBR0QsV0FBVztRQUNULElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUdELE9BQU87SUFDUCxXQUFXLENBQUMsUUFBYTtRQUN2QixLQUFLLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxpQkFBaUIsRUFBRTtZQUNuRSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztZQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDakU7SUFFSCxDQUFDO0lBQ0QsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLGlCQUFpQixFQUFFO1lBQ25FLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQWUsRUFBRSxFQUFFO2dCQUN6RCxJQUFJLE1BQU0sRUFBRTtvQkFDVixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztvQkFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7b0JBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO29CQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztvQkFDdkIsa0VBQWtFO29CQUNsRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUNoRDtxQkFBTTtvQkFDTCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7b0JBQ3ZCLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDcEMsSUFBSSxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUUsRUFBRTt3QkFDbEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7d0JBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztxQkFDakU7aUJBQ0Y7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELHNCQUFzQjtRQUNwQixtQ0FBbUM7UUFDbkMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDNUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2pGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7U0FDakM7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLGNBQWM7UUFDZCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxpQkFBaUIsRUFBRTtZQUNuRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWTtpQkFDckMsSUFBSSxDQUNILFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSwwQ0FBMEM7WUFDOUQscUNBQXFDO1lBQ3JDLG9CQUFvQixFQUFFLEVBQ3RCLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQzVCLFNBQVMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUN6QixJQUFJLFdBQVcsSUFBSSxFQUFFLEVBQUU7b0JBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO29CQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztvQkFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO29CQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztpQkFDNUQ7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNOO2FBQU07WUFDTCxJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWTtpQkFDckMsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQzVCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDNUIsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUNELFFBQVE7UUFDUixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDM0MsSUFBSSxDQUFDLG9CQUFvQixHQUFHLE9BQU8sQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDbEMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUMsQ0FBQztJQUVELGNBQWMsQ0FBQyxFQUFPLEVBQUUsRUFBTztRQUM3QixPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzNCLENBQUM7O29IQXhUVSx1QkFBdUI7d0dBQXZCLHVCQUF1Qix3U0F2RXhCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0NUOzJGQStCVSx1QkFBdUI7a0JBekVuQyxTQUFTOytCQUNFLG1CQUFtQixZQUNuQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdDVDswSkFzQzJDLFdBQVc7c0JBQXRELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFZCxVQUFVO3NCQUFyQyxTQUFTO3VCQUFDLGVBQWU7O0FBaVQ1QixlQUFlLENBQUMsaUJBQWlCLEdBQUcsdUJBQXVCLENBQUM7QUFFNUQsc0ZBQXNGO0FBQ3RGLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO0FBQ3BELGVBQWUsQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLFVBQVUsR0FBRyxJQUFJO0lBQ3BELFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDN0IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLG9CQUFvQixFQUFFO1FBQ3pFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7S0FDakU7QUFDSCxDQUFDLENBQUM7QUFFRixPQUFPLEVBQUUsZUFBZSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksIE9uSW5pdCwgUmVuZGVyZXIyLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0ZXJpYWxDb21wb25lbnQgfSBmcm9tICcuLi9NYXRlcmlhbENvbXBvbmVudCc7XHJcbmltcG9ydCBTZWxlY3RDb21wb25lbnQgZnJvbSAnZm9ybWlvanMvY29tcG9uZW50cy9zZWxlY3QvU2VsZWN0LmpzJztcclxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgTWF0U2VsZWN0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCAqIGFzIENyeXB0b0pTIGZyb20gJ2NyeXB0by1qcyc7XHJcbmltcG9ydCB7IGlzTnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAndXRpbCc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbWF0LWZvcm1pby1zZWxlY3QnLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8bWF0LWZvcm1pby1mb3JtLWZpZWxkIFtpbnN0YW5jZV09XCJpbnN0YW5jZVwiIFtjb21wb25lbnRUZW1wbGF0ZV09XCJjb21wb25lbnRUZW1wbGF0ZVwiPjwvbWF0LWZvcm1pby1mb3JtLWZpZWxkPlxyXG4gICAgPG5nLXRlbXBsYXRlICNjb21wb25lbnRUZW1wbGF0ZSBsZXQtaGFzTGFiZWw+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZpbGw+XHJcblxyXG4gICAgICAgIDxtYXQtbGFiZWwgKm5nSWY9XCJoYXNMYWJlbFwiPlxyXG4gICAgICAgICAgPHNwYW4gW2luc3RhbmNlXT1cImluc3RhbmNlXCIgbWF0Rm9ybWlvTGFiZWw+PC9zcGFuPlxyXG4gICAgICAgIDwvbWF0LWxhYmVsPlxyXG5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cImluc3RhbmNlLmNvbXBvbmVudC5wcmVmaXhcIiBtYXRQcmVmaXg+XHJcbiAgICAgICAgICB7eyBpbnN0YW5jZS5jb21wb25lbnQucHJlZml4IH19Jm5ic3A7XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwiaW5zdGFuY2UuY29tcG9uZW50Lm11bHRpcGxlXCJcclxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcclxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJpbnN0YW5jZS5jb21wb25lbnQucGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkNoYW5nZSgpXCJcclxuICAgICAgICAgICAgICAgIFtjb21wYXJlV2l0aF09XCJjb21wYXJlT2JqZWN0c1wiXHJcbiAgICAgICAgICAgICAgICAjcHJvZHVjdFNlbGVjdFxyXG4gICAgICAgID5cclxuICAgICAgICA8bWF0LW9wdGlvbj5cclxuICAgICAgICA8bmd4LW1hdC1zZWxlY3Qtc2VhcmNoIFtzZWFyY2hpbmddPVwiaW5zdGFuY2UuY29tcG9uZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAndmVuZG9ycHJvZHVjdGlkJyA/IHNlYXJjaGluZyA6IGZhbHNlXCIgKGlucHV0KT1cIm9uSW5wdXRDaGFuZ2UoJGV2ZW50KVwiIHBsYWNlaG9sZGVyTGFiZWw9XCJUeXBlIHRvIHNlYXJjaFwiIFtmb3JtQ29udHJvbF09XCJ3ZWJzaXRlTXVsdGlGaWx0ZXJDdHJsXCI+IFxyXG4gICAgICAgIDxtYXQtaWNvbiBuZ3hNYXRTZWxlY3RTZWFyY2hDbGVhciAoY2xpY2spPVwiY2xlYXJQcm9kdWN0cygpXCI+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgIDwvbmd4LW1hdC1zZWxlY3Qtc2VhcmNoPlxyXG4gICAgICA8L21hdC1vcHRpb24+XHJcblxyXG4gICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGZpbHRlcmVkT3B0aW9ucyB8IGFzeW5jXCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiIGNsYXNzPVwidmlydHVhbC1mdWxsLXZpZXdcIj5cclxuICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwib3B0aW9uLmxhYmVsXCI+PC9zcGFuPlxyXG4gICAgICAgIDwvbWF0LW9wdGlvbj4gICBcclxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwiIWZpbHRlcmVkT3B0aW9uc0xlbmd0aFwiIGRpc2FibGVkPlxyXG4gICAgICAgICAgICA8c3Bhbj5Ob3RoaW5nIHdhcyBmb3VuZDwvc3Bhbj5cclxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8L21hdC1zZWxlY3Q+XHJcblxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaW5zdGFuY2UuY29tcG9uZW50LnN1ZmZpeFwiIG1hdFN1ZmZpeD5cclxuICAgICAgICAgIHt7IGluc3RhbmNlLmNvbXBvbmVudC5zdWZmaXggfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImluc3RhbmNlLmVycm9yXCI+e3sgaW5zdGFuY2UuZXJyb3IubWVzc2FnZSB9fTwvbWF0LWVycm9yPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICBgLFxyXG4gIHN0eWxlczogW2BcclxuICAuZXhhbXBsZS12aWV3cG9ydCB7XHJcbiAgICBoZWlnaHQ6IDIwMHB4O1xyXG4gIH1cclxuICBcclxuICAucHJvZHVjdC1waWNrZXIge1xyXG4gICAgb3ZlcmZsb3cteDogaGlkZGVuOyAvKiBEaXNhYmxlIGhvcml6b250YWwgc2Nyb2xsaW5nICovXHJcbiAgfVxyXG5cclxuICAudmlydHVhbC1mdWxsLXZpZXcge1xyXG4gICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XHJcbiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsICFpbXBvcnRhbnQ7XHJcbiAgICBsaW5lLWhlaWdodDogMS40ICFpbXBvcnRhbnQ7XHJcbiAgICB0ZXh0LW92ZXJmbG93OiBpbml0aWFsICFpbXBvcnRhbnQ7XHJcbiAgICBtaW4taGVpZ2h0OiA0OHB4ICFpbXBvcnRhbnQ7XHJcbiAgICBvdmVyZmxvdzogaW5pdGlhbCAhaW1wb3J0YW50O1xyXG4gICAgcGFkZGluZy10b3A6IDEwcHggIWltcG9ydGFudDtcclxuICAgIHBhZGRpbmctYm90dG9tOiAxMHB4ICFpbXBvcnRhbnQ7XHJcbiAgfVxyXG5cclxuICA6Om5nLWRlZXAgLnByb2R1Y3QtcGlja2VyIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyIHtcclxuICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcclxuICB9XHJcblxyXG4gIC52aXJ0dWFsLWZ1bGwtdmlldyAubWF0LXBzZXVkby1jaGVja2JveCB7XHJcbiAgICBhbGlnbi1zZWxmOiB0b3AgIWltcG9ydGFudDtcclxuICB9XHJcblxyXG5gXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWF0ZXJpYWxTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBNYXRlcmlhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBzZWxlY3RPcHRpb25zOiBQcm9taXNlPGFueVtdPjtcclxuICBmaWx0ZXJlZE9wdGlvbnM6IFByb21pc2U8YW55W10+O1xyXG4gIGZpbHRlcmVkT3B0aW9uc0xlbmd0aDogbnVtYmVyO1xyXG4gIHNlbGVjdE9wdGlvbnNSZXNvbHZlOiBhbnk7XHJcbiAgcHVibGljIHdlYnNpdGVNdWx0aUN0cmw6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcbiAgcHVibGljIHdlYnNpdGVNdWx0aUZpbHRlckN0cmw6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcbiAgQFZpZXdDaGlsZCgnbXVsdGlTZWxlY3QnLCB7IHN0YXRpYzogdHJ1ZSB9KSBtdWx0aVNlbGVjdDogTWF0U2VsZWN0O1xyXG4gIHByb3RlY3RlZCBfb25EZXN0cm95ID0gbmV3IFN1YmplY3QoKTtcclxuICBAVmlld0NoaWxkKCdwcm9kdWN0U2VsZWN0Jykgc2VsZWN0RWxlbTogTWF0U2VsZWN0O1xyXG4gIC8vIFZhcmlhYmxlcyB0byB0cmFjayBwYWdpbmF0aW9uXHJcbiAgcGFnZU51bWJlciA9IDE7XHJcbiAgcGFnZVNpemUgPSAyMDtcclxuICB0b3RhbFBhZ2VzID0gMDtcclxuICBzZWFyY2hRdWVyeSA9ICcnO1xyXG4gIGhvbHk6IGFueSA9ICcnO1xyXG4gIGdyYWlsOiBhbnkgPSAnJztcclxuICBwcm9kdWN0c2xvYWRpbmdGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNlYXJjaGluZyA9IGZhbHNlO1xyXG4gIHByb2R1Y3RMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIC8vIFZhcmlhYmxlIHRvIGhvbGQgdGhlIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBwYW5lbCBlbGVtZW50XHJcbiAgcHJpdmF0ZSBjdXJyZW50UGFuZWxFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG4gIG9wZW5Db3VudGVyOiBudW1iZXIgPSAxXHJcbiAgY29uc3RydWN0b3IocHVibGljIGVsZW1lbnQ6IEVsZW1lbnRSZWYsIHB1YmxpYyByZWY6IENoYW5nZURldGVjdG9yUmVmLCBwdWJsaWMgaHR0cDogSHR0cENsaWVudCkge1xyXG4gICAgc3VwZXIoZWxlbWVudCwgcmVmKTtcclxuICAgIHRoaXMuaG9seSA9IENyeXB0b0pTLmVuYy5CYXNlNjQucGFyc2UoJzhGLzIrVDJOWHFVQlFFUlIxMlI0c3c9PScpO1xyXG4gICAgdGhpcy5ncmFpbCA9IENyeXB0b0pTLmVuYy5CYXNlNjQucGFyc2UoJ3lFMENnUWJZeks1d3Flb0tUVnpoT1E9PScpO1xyXG4gIH1cclxuXHJcbiAgb25JbnB1dENoYW5nZShldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5pbnN0YW5jZS5jb21wb25lbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICd2ZW5kb3Jwcm9kdWN0aWQnICYmIGV2ZW50LnRhcmdldC52YWx1ZSA9PT0gJycpIHtcclxuICAgICAgdGhpcy5vbkNsZWFyQWxsKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGVhclByb2R1Y3RzKCkge1xyXG4gICAgaWYgKHRoaXMuaW5zdGFuY2UuY29tcG9uZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAndmVuZG9ycHJvZHVjdGlkJykge1xyXG4gICAgICB0aGlzLm9uQ2xlYXJBbGwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBzY3J1bWJsZShtc2cpIHtcclxuICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQobXNnKSkge1xyXG4gICAgICB2YXIgY29uY2VhbCA9IHRoaXMuZ2V0Y2FtcGFpZ24obXNnLCB0aGlzLmhvbHksIHRoaXMuZ3JhaWwpO1xyXG4gICAgICB2YXIgc2hhMjU2ID0gQ3J5cHRvSlMuSG1hY1NIQTI1NihDcnlwdG9KUy5lbmMuQmFzZTY0LnN0cmluZ2lmeSh0aGlzLmdyYWlsKSArIGNvbmNlYWwudG9TdHJpbmcoKSwgQ3J5cHRvSlMuZW5jLkJhc2U2NC5zdHJpbmdpZnkodGhpcy5ob2x5KSk7XHJcbiAgICAgIHZhciBoYXNoSW5CYXNlNjQgPSBDcnlwdG9KUy5lbmMuQmFzZTY0LnN0cmluZ2lmeShzaGEyNTYpO1xyXG4gICAgICBsZXQga2V5VmFsdWUgPSB7XHJcbiAgICAgICAgXCJ2YWx1ZVwiOiBjb25jZWFsLnRvU3RyaW5nKCksXHJcbiAgICAgICAgXCJtYWNcIjogaGFzaEluQmFzZTY0XHJcbiAgICAgIH07XHJcbiAgICAgIHZhciByZXN1bHQgPSBKU09OLnN0cmluZ2lmeShrZXlWYWx1ZSk7XHJcbiAgICAgIHZhciBqdW1ibGVkID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UocmVzdWx0KTtcclxuICAgICAgcmV0dXJuIENyeXB0b0pTLmVuYy5CYXNlNjQuc3RyaW5naWZ5KGp1bWJsZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Y2FtcGFpZ24oZGF0YTogYW55LCBob2x5OiBhbnksIGdyYWlsOiBhbnkpIHtcclxuICAgIHJldHVybiBDcnlwdG9KUy5BRVMuZW5jcnlwdChkYXRhLnRvU3RyaW5nKCksIGhvbHksXHJcbiAgICAgIHtcclxuICAgICAgICBibG9ja1NpemU6IDEyOCxcclxuICAgICAgICBpdjogZ3JhaWwsXHJcbiAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsXHJcbiAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIHJlZ2lzdGVyUGFuZWxTY3JvbGxFdmVudChzZWxlY3RFbGVtOiBNYXRTZWxlY3QpIHtcclxuICAgIGNvbnN0IHBhbmVsRWxlbWVudCA9IHNlbGVjdEVsZW0ucGFuZWwubmF0aXZlRWxlbWVudDtcclxuICAgIHBhbmVsRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uU2Nyb2xsLmJpbmQodGhpcykpO1xyXG5cclxuICB9XHJcblxyXG4gIG9uU2Nyb2xsKGV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5pbnN0YW5jZS5jb21wb25lbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICd2ZW5kb3Jwcm9kdWN0aWQnKSB7XHJcbiAgICAgIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgIGNvbnN0IHRyYWNrSGVpZ2h0ID0gc2Nyb2xsRWxlbWVudC5zY3JvbGxIZWlnaHQgLSBzY3JvbGxFbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgICAgaWYgKHRoaXMub3BlbkNvdW50ZXIgPCAyKSB7XHJcbiAgICAgICAgY29uc3QgcmV0cmlldmVkT2JqZWN0ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc3RvcmFnZU9iamVjdCcpKTtcclxuICAgICAgICB0aGlzLnRvdGFsUGFnZXMgPSBOdW1iZXIocmV0cmlldmVkT2JqZWN0Py50b3RhbFBhZ2VzKTtcclxuICAgICAgICB0aGlzLnByb2R1Y3RzbG9hZGluZ0ZsYWcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucHJvZHVjdExpc3QgPSByZXRyaWV2ZWRPYmplY3Q/LmRhdGFTb3VyY2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMucHJvZHVjdHNsb2FkaW5nRmxhZyAmJiBNYXRoLmZsb29yKHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wIC8gdHJhY2tIZWlnaHQgKiAxMDApID4gNTApIHtcclxuICAgICAgICB0aGlzLnByb2R1Y3RzbG9hZGluZ0ZsYWcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm9wZW5Db3VudGVyID0gdGhpcy5vcGVuQ291bnRlciArIDE7XHJcbiAgICAgICAgaWYgKHRoaXMucGFnZU51bWJlciA8IHRoaXMudG90YWxQYWdlcykge1xyXG4gICAgICAgICAgdGhpcy5wYWdlTnVtYmVyID0gdGhpcy5wYWdlTnVtYmVyICsgMTtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMubG9hZERhdGEodGhpcy5wYWdlTnVtYmVyLCB0aGlzLnBhZ2VTaXplLCB0aGlzLnNlYXJjaFF1ZXJ5KVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnByb2R1Y3RzbG9hZGluZ0ZsYWcgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEZ1bmN0aW9uIHRvIGdldCB2YWx1ZSBieSBrZXkgZnJvbSB0aGUgYXJyYXlcclxuICBnZXRWYWx1ZUJ5S2V5KGRhdGEsIGtleSkge1xyXG4gICAgaWYgKCFkYXRhIHx8IGRhdGEubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBudWxsOyAvLyBSZXR1cm4gbnVsbCBpZiBkYXRhIGlzIGVtcHR5IG9yIHVuZGVmaW5lZFxyXG4gICAgfVxyXG4gICAgY29uc3QgaXRlbSA9IGRhdGEuZmluZChrdiA9PiBrdi5rZXkudG9Mb3dlckNhc2UoKSA9PT0ga2V5LnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgcmV0dXJuIGl0ZW0gPyBpdGVtLnZhbHVlIDogbnVsbDtcclxuICB9XHJcblxyXG5cclxuICBsb2FkRGF0YShwYWdlTnVtYmVyLCBwYWdlU2l6ZSwgc2VhcmNoUXVlcnkpIHtcclxuICAgIGNvbnN0IHBhcmFtc0RhdGEgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdwcm9kdWN0UGlja2VyUGFyYW1zJykpO1xyXG4gICAgY29uc3QgaW5jbHVkZURlc2NyaXB0aW9uID0gdGhpcy5nZXRWYWx1ZUJ5S2V5KHBhcmFtc0RhdGEsICdpbmNsdWRlRGVzY3JpcHRpb24nKTtcclxuICAgIGNvbnN0IHZlbmRvcklkID0gdGhpcy5nZXRWYWx1ZUJ5S2V5KHBhcmFtc0RhdGEsICd2ZW5kb3JJZCcpO1xyXG4gICAgY29uc3Qgb25seUFjdGl2ZSA9IHRoaXMuZ2V0VmFsdWVCeUtleShwYXJhbXNEYXRhLCAnb25seUFjdGl2ZScpO1xyXG4gICAgdmFyIGN1cnJlbnRVc2VyID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY3VycmVudFVzZXInKSk7XHJcbiAgICBsZXQgaGVhZGVycztcclxuICAgIGlmIChjdXJyZW50VXNlciAmJiBjdXJyZW50VXNlci5Ub2tlbnMgJiYgY3VycmVudFVzZXIuVG9rZW5zLkFjY2Vzc1Rva2VuKSB7XHJcbiAgICAgIHZhciBhY2Nlc3NUb2tlbiA9IGN1cnJlbnRVc2VyLlRva2Vucy5BY2Nlc3NUb2tlbjtcclxuICAgICAgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArIGFjY2Vzc1Rva2VuXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVXNlciBub3QgYXV0aGVudGljYXRlZCBvciB0b2tlbnMgbWlzc2luZy4nKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBlbnZlbmRvcklkID0gdGhpcy5zY3J1bWJsZSh2ZW5kb3JJZClcclxuICAgIGNvbnN0IGVucGFnZU51bWJlciA9IHRoaXMuc2NydW1ibGUocGFnZU51bWJlcilcclxuICAgIGNvbnN0IGVucGFnZVNpemUgPSB0aGlzLnNjcnVtYmxlKHBhZ2VTaXplKTtcclxuICAgIGNvbnN0IGVuc2VhcmNoUXVlcnkgPSB0aGlzLnNjcnVtYmxlKHNlYXJjaFF1ZXJ5KTtcclxuICAgIGxldCBlbmFjdGl2ZSA9IHRoaXMuc2NydW1ibGUob25seUFjdGl2ZSk7XHJcbiAgICAvL0NoZWNrIGlmIGVuYWN0aXZlIGlzIHVuZGVmaW5lZCwgbnVsbCwgb3IgYmxhbmtcclxuICAgIGlmIChlbmFjdGl2ZSA9PT0gdW5kZWZpbmVkIHx8IGVuYWN0aXZlID09PSBudWxsIHx8IGVuYWN0aXZlID09PSAnJykge1xyXG4gICAgICBlbmFjdGl2ZSA9IHRoaXMuc2NydW1ibGUodHJ1ZSk7IC8vIFNldCBkZWZhdWx0IHZhbHVlIHRvIHRydWVcclxuICAgIH1cclxuXHJcbiAgICAvLyBTY3J1bWJsZSBhbmQgaGFuZGxlIHRoZSBpbmNsdWRlRGVzY3JpcHRpb24gcGFyYW1ldGVyXHJcbiAgICBsZXQgZW5kZXNjcmlwdGlvbiA9IHRoaXMuc2NydW1ibGUoaW5jbHVkZURlc2NyaXB0aW9uKTtcclxuICAgIGlmICghZW5kZXNjcmlwdGlvbikge1xyXG4gICAgICBlbmRlc2NyaXB0aW9uID0gdGhpcy5zY3J1bWJsZShmYWxzZSk7ICAvLyBTZXQgdG8gJ2ZhbHNlJyBpZiB1bmRlZmluZWQsIG51bGwsIG9yIGJsYW5rXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYmFzZVVybE1hcHBpbmcgPSB7XHJcbiAgICAgICdsb2NhbGhvc3QnOiAnaHR0cDovL2xvY2FsaG9zdDo1ODUwNCcsXHJcbiAgICAgICdsaW5jb2xuLnZhcnRvcGlhLmNvbSc6ICdodHRwczovL2xpbmNvbG4tYXBpLnZhcnRvcGlhLmNvbScsXHJcbiAgICAgICdzdGFnZS52YXJ0b3BpYS5jb20nOiAnaHR0cHM6Ly9zdGFnZS1hcGkudmFydG9waWEuY29tJyxcclxuICAgICAgJ215LnZhcnRvcGlhLmNvbSc6ICdodHRwczovL3JlYWdhbi1hcGkudmFydG9waWEuY29tJyxcclxuICAgICAgJ2phY2tzb24udmFydG9waWEuY29tJzogJ2h0dHBzOi8vamFja3Nvbi1hcGkudmFydG9waWEuY29tJ1xyXG4gICAgfTtcclxuICAgIC8vIEdldCB0aGUgY3VycmVudCBob3N0bmFtZVxyXG4gICAgY29uc3QgaG9zdG5hbWUgPSB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7XHJcbiAgICBjb25zdCBiYXNlQXBpVXJsID0gYmFzZVVybE1hcHBpbmdbaG9zdG5hbWVdIHx8IG51bGw7XHJcbiAgICBpbnRlcmZhY2UgVmVuZG9yUHJvZHVjdHNSZXNwb25zZSB7XHJcbiAgICAgIGNvZGU6IG51bWJlcjtcclxuICAgICAgZGF0YTogYW55O1xyXG4gICAgICBtZXNzYWdlOiBzdHJpbmc7XHJcbiAgICAgIHN0YXR1c0NvZGU6IG51bWJlcjtcclxuICAgIH1cclxuICAgIHRoaXMuaHR0cC5nZXQ8VmVuZG9yUHJvZHVjdHNSZXNwb25zZT4oYCR7YmFzZUFwaVVybH0vYXBpL1ZlbmRvckZvcm1CdWlsZGVyL0dldFZlbmRvclByb2R1Y3RzP3ZlbmRvcklkPSR7ZW52ZW5kb3JJZH0mcGFnZU51bWJlcj0ke2VucGFnZU51bWJlcn0mcGFnZVNpemU9JHtlbnBhZ2VTaXplfSZzZWFyY2g9JHtlbnNlYXJjaFF1ZXJ5fSZvbmx5QWN0aXZlPSR7ZW5hY3RpdmV9JmluY2x1ZGVEZXNjcmlwdGlvbj0ke2VuZGVzY3JpcHRpb259YCwgeyBoZWFkZXJzIH0pLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5jb2RlID09PSAyMDApIHtcclxuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZS5jb21wb25lbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICd2ZW5kb3Jwcm9kdWN0aWQnKSB7XHJcbiAgICAgICAgICB0aGlzLnRvdGFsUGFnZXMgPSByZXNwb25zZT8uZGF0YT8udG90YWxQYWdlcztcclxuICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZS5kYXRhLmRhdGFTb3VyY2U7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9uc0xlbmd0aCA9IGRhdGEubGVuZ3RoO1xyXG4gICAgICAgICAgaWYgKHRoaXMucHJvZHVjdExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBkYXRhLm1hcChpdGVtID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gaXRlbVxyXG4gICAgICAgICAgICB9KS5mb3JFYWNoKGkgPT4gdGhpcy5wcm9kdWN0TGlzdC5wdXNoKGkpKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9kdWN0TGlzdCA9IGRhdGE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBVcGRhdGUgZmlsdGVyZWRPcHRpb25zIHdpdGggdHJhbnNmb3JtZWREYXRhXHJcbiAgICAgICAgICB2YXIgYWxsUHJvZHVjdExpc3QgPSB0aGlzLnRyYW5zZm9ybVJlc3BvbnNlRGF0YSh0aGlzLnByb2R1Y3RMaXN0KTtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gUHJvbWlzZS5yZXNvbHZlKGFsbFByb2R1Y3RMaXN0KTtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnByb2R1Y3RzbG9hZGluZ0ZsYWcgPSB0cnVlO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZSA9IHRoaXMuc2VsZWN0RWxlbS5wYW5lbC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgICAgICBjb25zdCB0cmFja0hlaWdodCA9IGVsZS5zY3JvbGxIZWlnaHQgLSBlbGUub2Zmc2V0SGVpZ2h0XHJcbiAgICAgICAgICAgIGNvbnN0IG1pZGRsZVBvc2l0aW9uID0gdHJhY2tIZWlnaHQgLyAyIC0gNTA7XHJcbiAgICAgICAgICAgIGVsZS5zY3JvbGxUbyh7IHRvcDogbWlkZGxlUG9zaXRpb24sIGJlaGF2aW9yOiAnYXV0bycgfSk7XHJcbiAgICAgICAgICB9LCAyNTApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gVXRpbGl0eSBmdW5jdGlvbiB0byB0cmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxyXG4gIHRyYW5zZm9ybVJlc3BvbnNlRGF0YShkYXRhOiBBcnJheTx7IHRleHQ6IGFueSwgdmFsdWU6IGFueSwgZGF0ZTogYW55IH0+IHwgbnVsbCB8IHVuZGVmaW5lZCk6IEFycmF5PHsgbGFiZWw6IHN0cmluZywgdmFsdWU6IG51bWJlciwgZGF0ZTogc3RyaW5nIH0+IHtcclxuICAgIC8vIENoZWNrIGlmIGRhdGEgaXMgbm90IG51bGwsIHVuZGVmaW5lZCwgYW5kIGlzIGFuIGFycmF5IHdpdGggZWxlbWVudHNcclxuICAgIGlmIChkYXRhICYmIEFycmF5LmlzQXJyYXkoZGF0YSkgJiYgZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiBkYXRhLm1hcChpdGVtID0+ICh7XHJcbiAgICAgICAgbGFiZWw6IGl0ZW0udGV4dCxcclxuICAgICAgICB2YWx1ZTogaXRlbS52YWx1ZSxcclxuICAgICAgICBkYXRlOiBpdGVtLmRhdGVcclxuICAgICAgfSkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gUmV0dXJuIGFuIGVtcHR5IGFycmF5IGlmIGRhdGEgaXMgbnVsbCwgdW5kZWZpbmVkLCBvciBlbXB0eVxyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGZpbHRlcldlYnNpdGVNdWx0aSgpIHtcclxuICAgIGlmICghdGhpcy5zZWxlY3RPcHRpb25zKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBzZWFyY2ggPSB0aGlzLndlYnNpdGVNdWx0aUZpbHRlckN0cmwudmFsdWU7XHJcbiAgICBzZWFyY2ggPSBzZWFyY2gudG9Mb3dlckNhc2UoKTtcclxuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5zZWxlY3RPcHRpb25zLnRoZW4oKG9wdGlvbnMpID0+IHtcclxuICAgICAgY29uc3QgZmlsdGVyZWQgPSBvcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiBvcHRpb24ubGFiZWwucmVwbGFjZSgvPFxcLz9zcGFuW14+XSo+L2csIFwiXCIpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2gpICE9PSAtMSk7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zTGVuZ3RoID0gZmlsdGVyZWQubGVuZ3RoO1xyXG4gICAgICByZXR1cm4gZmlsdGVyZWQ7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuX29uRGVzdHJveS5uZXh0KCcnKTtcclxuICAgIHRoaXMuX29uRGVzdHJveS5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qRW5kKi9cclxuICBzZXRJbnN0YW5jZShpbnN0YW5jZTogYW55KSB7XHJcbiAgICBzdXBlci5zZXRJbnN0YW5jZShpbnN0YW5jZSk7XHJcbiAgICB0aGlzLmluc3RhbmNlLnRyaWdnZXJVcGRhdGUoKTtcclxuICB9XHJcblxyXG4gIG9uQ2xlYXJBbGwoKSB7XHJcbiAgICBpZiAodGhpcy5pbnN0YW5jZS5jb21wb25lbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICd2ZW5kb3Jwcm9kdWN0aWQnKSB7XHJcbiAgICAgIHRoaXMucGFnZU51bWJlciA9IDE7XHJcbiAgICAgIHRoaXMucGFnZVNpemUgPSAyMDtcclxuICAgICAgdGhpcy5zZWFyY2hRdWVyeSA9ICcnO1xyXG4gICAgICB0aGlzLnNlYXJjaGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnByb2R1Y3RMaXN0ID0gW107XHJcbiAgICAgIHRoaXMubG9hZERhdGEodGhpcy5wYWdlTnVtYmVyLCB0aGlzLnBhZ2VTaXplLCB0aGlzLnNlYXJjaFF1ZXJ5KTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGlmICh0aGlzLmluc3RhbmNlLmNvbXBvbmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3ZlbmRvcnByb2R1Y3RpZCcpIHtcclxuICAgICAgdGhpcy5zZWxlY3RFbGVtLm9wZW5lZENoYW5nZS5zdWJzY3JpYmUoKGlzT3BlbjogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChpc09wZW4pIHtcclxuICAgICAgICAgIHRoaXMucGFnZU51bWJlciA9IDI7XHJcbiAgICAgICAgICB0aGlzLnBhZ2VTaXplID0gMjA7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gJyc7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgLy90aGlzLmxvYWREYXRhKHRoaXMucGFnZU51bWJlciwgdGhpcy5wYWdlU2l6ZSwgdGhpcy5zZWFyY2hRdWVyeSk7XHJcbiAgICAgICAgICB0aGlzLnJlZ2lzdGVyUGFuZWxTY3JvbGxFdmVudCh0aGlzLnNlbGVjdEVsZW0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJlbW92ZVBhbmVsU2Nyb2xsRXZlbnQoKTtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBsZXQgc2VsZWN0ZWRWYWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcclxuICAgICAgICAgIGlmIChzZWxlY3RlZFZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoID09IDAgJiYgdGhpcy5zZWFyY2hRdWVyeSA9PSAnJykge1xyXG4gICAgICAgICAgICB0aGlzLnByb2R1Y3RMaXN0ID0gW107XHJcbiAgICAgICAgICAgIHRoaXMubG9hZERhdGEodGhpcy5wYWdlTnVtYmVyLCB0aGlzLnBhZ2VTaXplLCB0aGlzLnNlYXJjaFF1ZXJ5KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlUGFuZWxTY3JvbGxFdmVudCgpIHtcclxuICAgIC8vIFJlbW92ZSB0aGUgc2Nyb2xsIGV2ZW50IGxpc3RlbmVyXHJcbiAgICBpZiAodGhpcy5jdXJyZW50UGFuZWxFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhbmVsRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uU2Nyb2xsLmJpbmQodGhpcykpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRQYW5lbEVsZW1lbnQgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICAvKm5ldyBsb2dpYyAqL1xyXG4gICAgaWYgKHRoaXMuaW5zdGFuY2UuY29tcG9uZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAndmVuZG9ycHJvZHVjdGlkJykge1xyXG4gICAgICB0aGlzLndlYnNpdGVNdWx0aUZpbHRlckN0cmwudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMTAwMCksIC8vIFRpbWUgaW4gbWlsbGlzZWNvbmRzIGJldHdlZW4ga2V5IGV2ZW50c1xyXG4gICAgICAgICAgLy8gIHRhcCgoKSA9PiB0aGlzLnNlYXJjaGluZyA9IHRydWUpLFxyXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHNlYXJjaFF1ZXJ5KSA9PiB7XHJcbiAgICAgICAgICBpZiAoc2VhcmNoUXVlcnkgIT0gJycpIHtcclxuICAgICAgICAgICAgdGhpcy5wYWdlTnVtYmVyID0gMTtcclxuICAgICAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IDIwO1xyXG4gICAgICAgICAgICB0aGlzLnByb2R1Y3RMaXN0ID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkRGF0YSh0aGlzLnBhZ2VOdW1iZXIsIHRoaXMucGFnZVNpemUsIHNlYXJjaFF1ZXJ5KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMud2Vic2l0ZU11bHRpRmlsdGVyQ3RybC52YWx1ZUNoYW5nZXNcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJXZWJzaXRlTXVsdGkoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qRW5kICovXHJcbiAgICB0aGlzLnNlbGVjdE9wdGlvbnMgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICB0aGlzLnNlbGVjdE9wdGlvbnNSZXNvbHZlID0gcmVzb2x2ZTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5zZWxlY3RPcHRpb25zLnRoZW4oKG9wdGlvbnMpID0+IHtcclxuICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnNMZW5ndGggPSBvcHRpb25zLmxlbmd0aDtcclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLnNlbGVjdE9wdGlvbnM7XHJcbiAgfVxyXG5cclxuICBjb21wYXJlT2JqZWN0cyhvMTogYW55LCBvMjogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gXy5pc0VxdWFsKG8xLCBvMik7XHJcbiAgfVxyXG59XHJcblNlbGVjdENvbXBvbmVudC5NYXRlcmlhbENvbXBvbmVudCA9IE1hdGVyaWFsU2VsZWN0Q29tcG9uZW50O1xyXG5cclxuLy8gTWFrZSBzdXJlIHdlIGRldGVjdCBjaGFuZ2VzIHdoZW4gbmV3IGl0ZW1zIG1ha2UgdGhlaXIgd2F5IGludG8gdGhlIHNlbGVjdCBkcm9wZG93bi5cclxuY29uc3Qgc2V0SXRlbXMgPSBTZWxlY3RDb21wb25lbnQucHJvdG90eXBlLnNldEl0ZW1zO1xyXG5TZWxlY3RDb21wb25lbnQucHJvdG90eXBlLnNldEl0ZW1zID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcclxuICBzZXRJdGVtcy5jYWxsKHRoaXMsIC4uLmFyZ3MpO1xyXG4gIGlmICh0aGlzLm1hdGVyaWFsQ29tcG9uZW50ICYmIHRoaXMubWF0ZXJpYWxDb21wb25lbnQuc2VsZWN0T3B0aW9uc1Jlc29sdmUpIHtcclxuICAgIHRoaXMubWF0ZXJpYWxDb21wb25lbnQuc2VsZWN0T3B0aW9uc1Jlc29sdmUodGhpcy5zZWxlY3RPcHRpb25zKTtcclxuICB9XHJcbn07XHJcblxyXG5leHBvcnQgeyBTZWxlY3RDb21wb25lbnQgfTtcclxuIl19
|