@senior-agronegocio/angular-components 0.0.68 → 0.0.70-origination
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/senior-agronegocio-angular-components.umd.js +105 -36
- package/bundles/senior-agronegocio-angular-components.umd.js.map +1 -1
- package/bundles/senior-agronegocio-angular-components.umd.min.js +2 -2
- package/bundles/senior-agronegocio-angular-components.umd.min.js.map +1 -1
- package/components/event-control-board/common/event-control-constants.d.ts +7 -2
- package/components/event-control-board/common/event-operation.d.ts +3 -1
- package/components/event-control-board/common/input-fields.d.ts +2 -1
- package/components/event-control-board/event-control-board.component.d.ts +7 -6
- package/esm2015/components/event-control-board/common/event-control-constants.js +5 -1
- package/esm2015/components/event-control-board/common/event-operation.js +3 -1
- package/esm2015/components/event-control-board/common/input-fields.js +2 -1
- package/esm2015/components/event-control-board/event-control-board.component.js +81 -34
- package/esm2015/services/i18n/en-US.js +7 -2
- package/esm2015/services/i18n/es-CO.js +7 -2
- package/esm2015/services/i18n/pt-BR.js +7 -2
- package/esm5/components/event-control-board/common/event-control-constants.js +5 -1
- package/esm5/components/event-control-board/common/event-operation.js +3 -1
- package/esm5/components/event-control-board/common/input-fields.js +2 -1
- package/esm5/components/event-control-board/event-control-board.component.js +81 -34
- package/esm5/services/i18n/en-US.js +7 -2
- package/esm5/services/i18n/es-CO.js +7 -2
- package/esm5/services/i18n/pt-BR.js +7 -2
- package/fesm2015/senior-agronegocio-angular-components.js +105 -36
- package/fesm2015/senior-agronegocio-angular-components.js.map +1 -1
- package/fesm5/senior-agronegocio-angular-components.js +105 -36
- package/fesm5/senior-agronegocio-angular-components.js.map +1 -1
- package/package.json +1 -1
- package/services/i18n/en-US.d.ts +5 -0
- package/services/i18n/es-CO.d.ts +5 -0
- package/services/i18n/pt-BR.d.ts +5 -0
|
@@ -68,11 +68,11 @@ var EventControlBoardComponent = /** @class */ (function () {
|
|
|
68
68
|
};
|
|
69
69
|
EventControlBoardComponent.prototype.updateCompanyAndBranchFormFields = function (changes) {
|
|
70
70
|
var _a, _b, _c, _d;
|
|
71
|
-
if (changes.
|
|
72
|
-
(_a = this.filterFormGroup.get('
|
|
71
|
+
if (changes.company && changes.company.currentValue !== changes.company.previousValue) {
|
|
72
|
+
(_a = this.filterFormGroup.get('company')) === null || _a === void 0 ? void 0 : _a.setValue((_b = changes.company.currentValue) !== null && _b !== void 0 ? _b : null);
|
|
73
73
|
}
|
|
74
|
-
if (changes.
|
|
75
|
-
(_c = this.filterFormGroup.get('
|
|
74
|
+
if (changes.branch && changes.branch.currentValue !== changes.branch.previousValue) {
|
|
75
|
+
(_c = this.filterFormGroup.get('branch')) === null || _c === void 0 ? void 0 : _c.setValue((_d = changes.branch.currentValue) !== null && _d !== void 0 ? _d : null);
|
|
76
76
|
}
|
|
77
77
|
};
|
|
78
78
|
EventControlBoardComponent.prototype.updateEventOriginAndControlCodeFormFields = function (changes) {
|
|
@@ -96,8 +96,8 @@ var EventControlBoardComponent = /** @class */ (function () {
|
|
|
96
96
|
EventControlBoardComponent.prototype.initializeFormGroup = function () {
|
|
97
97
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
98
98
|
this.filterFormGroup = this.formBuilder.group({
|
|
99
|
-
|
|
100
|
-
|
|
99
|
+
company: [{ value: (_a = this.company) !== null && _a !== void 0 ? _a : null, disabled: false }, Validators.compose([])],
|
|
100
|
+
branch: [{ value: (_b = this.branch) !== null && _b !== void 0 ? _b : null, disabled: false }, Validators.compose([])],
|
|
101
101
|
controlCode: [{ value: (_c = this.controlCode) !== null && _c !== void 0 ? _c : null, disabled: false }, Validators.compose([])],
|
|
102
102
|
externalId: [{ value: (_d = this.externalId) !== null && _d !== void 0 ? _d : null, disabled: false }, Validators.compose([])],
|
|
103
103
|
eventOrigin: [{ value: (_e = this.eventOrigin) !== null && _e !== void 0 ? _e : null, disabled: false }, Validators.compose([])],
|
|
@@ -108,11 +108,11 @@ var EventControlBoardComponent = /** @class */ (function () {
|
|
|
108
108
|
EventControlBoardComponent.prototype.setFormFields = function () {
|
|
109
109
|
this.filterFields = [
|
|
110
110
|
new FormField({
|
|
111
|
-
name: "
|
|
111
|
+
name: "company",
|
|
112
112
|
type: FieldType.Chips,
|
|
113
113
|
}),
|
|
114
114
|
new FormField({
|
|
115
|
-
name: "
|
|
115
|
+
name: "branch",
|
|
116
116
|
type: FieldType.Chips,
|
|
117
117
|
}),
|
|
118
118
|
new FormField({
|
|
@@ -139,8 +139,8 @@ var EventControlBoardComponent = /** @class */ (function () {
|
|
|
139
139
|
};
|
|
140
140
|
EventControlBoardComponent.prototype.setGridColumns = function () {
|
|
141
141
|
return [
|
|
142
|
-
{ field: '
|
|
143
|
-
{ field: '
|
|
142
|
+
{ field: 'company', header: this.translate.instant("agro.angular_components.company") },
|
|
143
|
+
{ field: 'branch', header: this.translate.instant("agro.angular_components.label_branch") },
|
|
144
144
|
{ field: 'eventOrigin', header: this.translate.instant("agro.angular_components.event_origin_label") },
|
|
145
145
|
{ field: 'controlCode', header: this.translate.instant("agro.angular_components.control_code") },
|
|
146
146
|
];
|
|
@@ -163,7 +163,9 @@ var EventControlBoardComponent = /** @class */ (function () {
|
|
|
163
163
|
var _a, _b;
|
|
164
164
|
var externalId = (_a = message === null || message === void 0 ? void 0 : message.data) === null || _a === void 0 ? void 0 : _a.externalId;
|
|
165
165
|
var filterData = _this.filterFormGroup.getRawValue();
|
|
166
|
-
if (!externalId
|
|
166
|
+
if (!externalId
|
|
167
|
+
|| _this.externalId === externalId
|
|
168
|
+
|| ((_b = _this.gridData) === null || _b === void 0 ? void 0 : _b.some(function (item) { return item.externalId === externalId; }))) {
|
|
167
169
|
_this.updateGrid({ filterData: filterData });
|
|
168
170
|
_this.processedEvent.emit(message);
|
|
169
171
|
}
|
|
@@ -262,7 +264,23 @@ var EventControlBoardComponent = /** @class */ (function () {
|
|
|
262
264
|
EventControlBoardComponent.prototype.getEventLabel = function (detail) {
|
|
263
265
|
var _a;
|
|
264
266
|
var eventLabel = (_a = this.eventItem.find(function (e) { return e.value === detail.eventOperation; })) === null || _a === void 0 ? void 0 : _a.label;
|
|
265
|
-
|
|
267
|
+
console.log('eventLabel', eventLabel, detail.eventOperation);
|
|
268
|
+
if (eventLabel) {
|
|
269
|
+
return this.translate.instant(eventLabel);
|
|
270
|
+
}
|
|
271
|
+
var localLabel = this.getEventOperationSubLocalLabel(detail);
|
|
272
|
+
if (localLabel) {
|
|
273
|
+
return localLabel;
|
|
274
|
+
}
|
|
275
|
+
return detail.eventOperation;
|
|
276
|
+
};
|
|
277
|
+
EventControlBoardComponent.prototype.getEventOperationSubLocalLabel = function (detail) {
|
|
278
|
+
var tranlsationKey = 'agro.angular_components.' + detail.eventOperation;
|
|
279
|
+
var translation = this.translate.instant(tranlsationKey);
|
|
280
|
+
if (translation !== tranlsationKey) {
|
|
281
|
+
return translation;
|
|
282
|
+
}
|
|
283
|
+
return null;
|
|
266
284
|
};
|
|
267
285
|
EventControlBoardComponent.prototype.getEventSubLabel = function (detail) {
|
|
268
286
|
var _a, _b;
|
|
@@ -270,7 +288,7 @@ var EventControlBoardComponent = /** @class */ (function () {
|
|
|
270
288
|
if (!field || !detail.input) {
|
|
271
289
|
return null;
|
|
272
290
|
}
|
|
273
|
-
var path = (_b = this.inputFieldsPath.find(function (f) { return f.field === field; })) === null || _b === void 0 ? void 0 : _b.path;
|
|
291
|
+
var path = (_b = this.inputFieldsPath.find(function (f) { return f.field === field && (!f.operation || f.operation === detail.eventOperation); })) === null || _b === void 0 ? void 0 : _b.path;
|
|
274
292
|
var fullPath = path ? path + "." + field : field;
|
|
275
293
|
var value = this.getValueFieldJsonFromPath(detail.input, fullPath);
|
|
276
294
|
return this.formatFieldValue(field, value);
|
|
@@ -290,6 +308,7 @@ var EventControlBoardComponent = /** @class */ (function () {
|
|
|
290
308
|
var _a;
|
|
291
309
|
switch (field) {
|
|
292
310
|
case InputFields.AGRO_INVOICE_TYPE:
|
|
311
|
+
case InputFields.INVOICE_TYPE:
|
|
293
312
|
var label = (_a = this.invoiceTypeTranslate.find(function (e) { return e.value === value; })) === null || _a === void 0 ? void 0 : _a.label;
|
|
294
313
|
return label ? this.translate.instant(label) : value;
|
|
295
314
|
default:
|
|
@@ -318,8 +337,8 @@ var EventControlBoardComponent = /** @class */ (function () {
|
|
|
318
337
|
var filterData = this.currentListParams.filterData;
|
|
319
338
|
var controlCode = filterData['controlCode'] && Array.isArray(filterData['controlCode']) ? filterData['controlCode'] : null;
|
|
320
339
|
var filter = {
|
|
321
|
-
companyId: (_b = (_a = filterData['
|
|
322
|
-
branchId: (_d = (_c = filterData['
|
|
340
|
+
companyId: (_b = (_a = filterData['company']) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : null,
|
|
341
|
+
branchId: (_d = (_c = filterData['branch']) === null || _c === void 0 ? void 0 : _c.id) !== null && _d !== void 0 ? _d : null,
|
|
323
342
|
controlCode: controlCode ? controlCode.map(function (code) { return parseInt(code); }) : null,
|
|
324
343
|
externalId: (_e = filterData['externalId']) !== null && _e !== void 0 ? _e : null,
|
|
325
344
|
eventOrigin: (_f = filterData['eventOrigin']) !== null && _f !== void 0 ? _f : null,
|
|
@@ -331,10 +350,10 @@ var EventControlBoardComponent = /** @class */ (function () {
|
|
|
331
350
|
};
|
|
332
351
|
EventControlBoardComponent.prototype.getFieldNameForSortRequest = function (name) {
|
|
333
352
|
switch (name) {
|
|
334
|
-
case '
|
|
335
|
-
return '
|
|
336
|
-
case '
|
|
337
|
-
return '
|
|
353
|
+
case 'company':
|
|
354
|
+
return 'company.nomEmp';
|
|
355
|
+
case 'branch':
|
|
356
|
+
return 'branch.nomFil';
|
|
338
357
|
default:
|
|
339
358
|
return name;
|
|
340
359
|
}
|
|
@@ -390,6 +409,22 @@ var EventControlBoardComponent = /** @class */ (function () {
|
|
|
390
409
|
}
|
|
391
410
|
return translatedErrorMessages;
|
|
392
411
|
};
|
|
412
|
+
EventControlBoardComponent.prototype.getProducerInvoiceIdFromParams = function (param) {
|
|
413
|
+
var _a, _b, _c, _d;
|
|
414
|
+
if ((param === null || param === void 0 ? void 0 : param.producerInvoiceIds) && (param === null || param === void 0 ? void 0 : param.producerInvoiceIds.length) > 0) {
|
|
415
|
+
return param === null || param === void 0 ? void 0 : param.producerInvoiceIds[0];
|
|
416
|
+
}
|
|
417
|
+
if ((_b = (_a = param === null || param === void 0 ? void 0 : param.invoice) === null || _a === void 0 ? void 0 : _a.generalData) === null || _b === void 0 ? void 0 : _b.transactionalId) {
|
|
418
|
+
return (_d = (_c = param === null || param === void 0 ? void 0 : param.invoice) === null || _c === void 0 ? void 0 : _c.generalData) === null || _d === void 0 ? void 0 : _d.transactionalId;
|
|
419
|
+
}
|
|
420
|
+
if (param === null || param === void 0 ? void 0 : param.producerInvoiceId) {
|
|
421
|
+
return param === null || param === void 0 ? void 0 : param.producerInvoiceId;
|
|
422
|
+
}
|
|
423
|
+
if (param === null || param === void 0 ? void 0 : param.externalId) {
|
|
424
|
+
return param === null || param === void 0 ? void 0 : param.externalId;
|
|
425
|
+
}
|
|
426
|
+
return null;
|
|
427
|
+
};
|
|
393
428
|
EventControlBoardComponent.prototype.stepSelected = function (event) {
|
|
394
429
|
var _this = this;
|
|
395
430
|
this.selectedStep = event.step;
|
|
@@ -399,17 +434,29 @@ var EventControlBoardComponent = /** @class */ (function () {
|
|
|
399
434
|
case EventOrigin.INVOICE:
|
|
400
435
|
case EventOrigin.CREATE_INVOICE:
|
|
401
436
|
this.sidebarLoading = true;
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
437
|
+
{
|
|
438
|
+
var param = JSON.parse(this.selectedStep.item.input);
|
|
439
|
+
console.log('param', param);
|
|
440
|
+
var producerInvoiceId = this.getProducerInvoiceIdFromParams(param);
|
|
441
|
+
if (!producerInvoiceId) {
|
|
442
|
+
this.sidebarLoading = false;
|
|
443
|
+
return;
|
|
444
|
+
}
|
|
445
|
+
this.eventControlBoardService.producerInvoiceService.list({
|
|
446
|
+
displayFields: ['*', 'producerBalanceEntryControl.*', 'producerBalanceEntryControl.producer.*'],
|
|
447
|
+
filterQuery: "id eq '" + producerInvoiceId + "'",
|
|
448
|
+
page: 0,
|
|
449
|
+
size: 1,
|
|
450
|
+
})
|
|
451
|
+
.pipe(takeUntil(this.ngUnsubscribe))
|
|
452
|
+
.subscribe(function (result) {
|
|
453
|
+
_this.producerInvoice = result === null || result === void 0 ? void 0 : result.contents[0];
|
|
454
|
+
console.log(_this.producerInvoice);
|
|
455
|
+
_this.sidebarLoading = false;
|
|
456
|
+
}, function () {
|
|
457
|
+
_this.sidebarLoading = false;
|
|
458
|
+
});
|
|
459
|
+
}
|
|
413
460
|
break;
|
|
414
461
|
case EventOrigin.FIXATION:
|
|
415
462
|
case EventOrigin.CANCEL_FIXATION:
|
|
@@ -488,10 +535,10 @@ var EventControlBoardComponent = /** @class */ (function () {
|
|
|
488
535
|
]; };
|
|
489
536
|
__decorate([
|
|
490
537
|
Input()
|
|
491
|
-
], EventControlBoardComponent.prototype, "
|
|
538
|
+
], EventControlBoardComponent.prototype, "company", void 0);
|
|
492
539
|
__decorate([
|
|
493
540
|
Input()
|
|
494
|
-
], EventControlBoardComponent.prototype, "
|
|
541
|
+
], EventControlBoardComponent.prototype, "branch", void 0);
|
|
495
542
|
__decorate([
|
|
496
543
|
Input()
|
|
497
544
|
], EventControlBoardComponent.prototype, "controlCode", void 0);
|
|
@@ -522,7 +569,7 @@ var EventControlBoardComponent = /** @class */ (function () {
|
|
|
522
569
|
EventControlBoardComponent = __decorate([
|
|
523
570
|
Component({
|
|
524
571
|
selector: 'event-control-board',
|
|
525
|
-
template: "<div class=\"ui-g\" *sLoadingState=\"gridLoading\">\r\n <div class=\"ui-g-12\">\r\n <p-panel>\r\n <p-header>\r\n {{ \"agro.angular_components.event_control_header\" | libTranslate }}\r\n </p-header>\r\n <div class=\"ui-g\">\r\n <div class=\"ui-g-12\">\r\n <s-button\r\n id=\"refresh-button\"\r\n [priority]=\"ButtonPriority.Primary\"\r\n iconClass=\"fa fa-refresh\"\r\n [label]=\"'agro.angular_components.refresh' | libTranslate\"\r\n (click)=\"onSearch()\"\r\n >\r\n </s-button>\r\n <s-button\r\n *ngIf=\"standalone && showCancelButton\"\r\n id=\"cancel-button-agro-events-lib\"\r\n iconClass=\"fa fa-times\"\r\n [label]=\"'agro.angular_components.cancel' | libTranslate\"\r\n (click)=\"openCancelModal()\"\r\n >\r\n </s-button>\r\n </div>\r\n </div>\r\n <div class=\"ui-g\">\r\n <div class=\"ui-g-12 ui-md-12\" *ngIf=\"!gridData || gridData?.length === 0\">\r\n <s-empty-state\r\n iconClass=\"fa fa-exclamation-triangle\"\r\n title=\"{{ 'agro.angular_components.nothing_found' | libTranslate }}\"\r\n [showPrimaryAction]=\"false\"\r\n description=\"{{ 'agro.angular_components.table_empty_description' | libTranslate }}\"\r\n >\r\n </s-empty-state>\r\n </div>\r\n <ng-container *ngIf=\"gridData?.length > 0\">\r\n <p-table\r\n stylelass=\"custom-table\"\r\n #eventControlTable\r\n [value]=\"gridDataResolved\"\r\n [columns]=\"gridColumns\"\r\n dataKey=\"id\"\r\n [lazy]=\"true\"\r\n [scrollable]=\"true\"\r\n [resizableColumns]=\"true\"\r\n [paginator]=\"!standalone\"\r\n [totalRecords]=\"gridTotalRecords\"\r\n [rows]=\"10\"\r\n [responsive]=\"true\"\r\n (onLazyLoad)=\"onGridChange($event)\"\r\n [sortOrder]=\"getSortOrder()\"\r\n [first]=\"getRowIndex()\"\r\n [lazyLoadOnInit]=\"false\"\r\n sortMode=\"multiple\"\r\n [rows]=\"getPageSize()\"\r\n [rowsPerPageOptions]=\"[10, 20, 50, 100]\"\r\n >\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <ng-container *ngIf=\"!standalone\">\r\n <th\r\n *ngFor=\"let col of columns\"\r\n class=\"ui-lg-1 ui-md-1\"\r\n [pSortableColumn]=\"col.field\"\r\n scope=\"col\"\r\n >\r\n <div class=\"senior-header\">\r\n <span class=\"senior-header-title\">{{\r\n col.header\r\n }}</span>\r\n <p-sortIcon [field]=\"col.field\"></p-sortIcon>\r\n </div>\r\n </th>\r\n </ng-container>\r\n <th class=\"ui-lg-8 ui-md-7\" scope=\"col\">\r\n {{ \"agro.angular_components.panel_title_events_events\" | libTranslate }}\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData>\r\n <tr>\r\n <ng-container *ngIf=\"!standalone\">\r\n <td class=\"ui-lg-1 ui-md-1\">\r\n {{ rowData.e070emp?.nomEmp }}\r\n </td>\r\n <td class=\"ui-lg-1 ui-md-1\">\r\n {{ rowData.e070fil?.nomFil }}\r\n </td>\r\n <td class=\"ui-lg-1 ui-md-1\">\r\n <ng-container [ngSwitch]=\"rowData.eventOrigin\">\r\n <span *ngSwitchCase=\"'BALANCE_ENTRY_CONTROL'\">\r\n {{\r\n \"agro.angular_components.balance_entry_control_event\"\r\n | libTranslate\r\n }}\r\n </span>\r\n <span *ngSwitchCase=\"'TICKET'\">\r\n {{\r\n \"agro.angular_components.ticket_maintenance_header\"\r\n | libTranslate\r\n }}\r\n </span>\r\n <span *ngSwitchCase=\"'TRANSFER'\">\r\n {{\r\n \"agro.angular_components.transfer_origin_event\"\r\n | libTranslate\r\n }}\r\n </span>\r\n <span *ngSwitchCase=\"'INVOICE'\">\r\n {{\r\n \"agro.angular_components.invoice_creating_event\"\r\n | libTranslate\r\n }}\r\n </span>\r\n <span *ngSwitchCase=\"'CHANGE_REQUEST'\">\r\n {{\r\n \"agro.angular_components.change_request_event\"\r\n | libTranslate\r\n }}\r\n </span>\r\n <span *ngSwitchCase=\"'FIXATION'\">\r\n {{\r\n \"agro.angular_components.fixation_event\"\r\n | libTranslate\r\n }}\r\n </span>\r\n <span *ngSwitchCase=\"'CANCEL_FIXATION'\">\r\n {{\r\n \"agro.angular_components.cancel_fixation_event\"\r\n | libTranslate\r\n }}\r\n </span>\r\n <span *ngSwitchCase=\"'TRANSFER_CANCELLATION'\">\r\n {{\r\n \"agro.angular_components.transfer_cancellation_event\"\r\n | libTranslate\r\n }}\r\n </span>\r\n </ng-container>\r\n </td>\r\n <td class=\"ui-lg-1 ui ui-md-1\">\r\n {{ rowData.controlCode || \"\" }}\r\n </td>\r\n </ng-container>\r\n <td class=\"ui-lg-8 ui-md-7\">\r\n <ng-container *ngFor=\"let group of rowData.groups\">\r\n <s-event-steps\r\n [steps]=\"group.steps || []\"\r\n [activeIndex]=\"group.activeIndex\"\r\n (stepSelected)=\"stepSelected($event)\"\r\n >\r\n </s-event-steps>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template\r\n *ngIf=\"!standalone\"\r\n pTemplate=\"paginatorright\"\r\n class=\"custom-table\"\r\n >\r\n <span>\r\n {{\r\n \"agro.angular_components.registers_found\"\r\n | libTranslate : { total: gridTotalRecords }\r\n }}\r\n </span>\r\n </ng-template>\r\n </p-table>\r\n </ng-container>\r\n </div>\r\n </p-panel>\r\n </div>\r\n</div>\r\n<s-sidebar [visible]=\"showSidebar\" (visibleChange)=\"closeSidebar()\" header=\"{{ 'agro.angular_components.event_details_header' | libTranslate }}\">\r\n <div class=\"ui-fluid\">\r\n <p-fieldset [legend]=\"sidebarTitle\" [toggleable]=\"false\">\r\n <div class=\"ui-g\">\r\n <div class=\"ui-g-4\">\r\n <span\r\n ><strong>{{\r\n \"agro.angular_components.event_origin_label\" | libTranslate\r\n }}</strong></span\r\n >\r\n <ng-container [ngSwitch]=\"selectedStep?.eventType\">\r\n <p *ngSwitchCase=\"'BALANCE_ENTRY_CONTROL'\">\r\n {{ \"agro.angular_components.balance_entry_control_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'TICKET'\">\r\n {{ \"agro.angular_components.ticket_maintenance_header\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'TRANSFER'\">\r\n {{ \"agro.angular_components.transfer_origin_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'INVOICE'\">\r\n {{ \"agro.angular_components.invoice_creating_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'CHANGE_REQUEST'\">\r\n {{ \"agro.angular_components.change_request_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'FIXATION'\">\r\n {{ \"agro.angular_components.fixation_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'CANCEL_FIXATION'\">\r\n {{ \"agro.angular_components.cancel_fixation_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'TRANSFER_CANCELLATION'\">\r\n {{ \"agro.angular_components.transfer_cancellation_event\" | libTranslate }}\r\n </p>\r\n </ng-container>\r\n </div>\r\n <div class=\"ui-g-4\" *ngIf=\"producerInvoice?.e001pes.nomPes\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.supplier\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ producerInvoice?.e001pes.nomPes }}</p>\r\n </div>\r\n <div class=\"ui-g-4\" *ngIf=\"producerInvoice?.ruralEstate.name\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.rural_estate\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ producerInvoice?.ruralEstate.name }}</p>\r\n </div>\r\n <div class=\"ui-g-4\" *ngIf=\"selectedStep?.controlCode\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.control_code\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ selectedStep?.controlCode }}</p>\r\n </div>\r\n <div class=\"ui-g-4\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.status_label\" | libTranslate }}</strong></span\r\n >\r\n <ng-container [ngSwitch]=\"selectedStep?.item.status\">\r\n <p *ngSwitchCase=\"'SUCCESS'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Green\"\r\n text=\"{{\r\n 'agro.angular_components.panel_title_events_completed_successfully'\r\n | libTranslate\r\n }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n <p *ngSwitchCase=\"'PROCESSING'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Orange\"\r\n text=\"{{ 'agro.angular_components.processing' | libTranslate }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n <p *ngSwitchCase=\"'FAILED'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Red\"\r\n text=\"{{\r\n 'agro.angular_components.panel_title_events_ended_with_error'\r\n | libTranslate\r\n }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n <p *ngSwitchCase=\"'PENDING'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Gray\"\r\n text=\"{{ 'agro.angular_components.pending' | libTranslate }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n </ng-container>\r\n </div>\r\n <div class=\"ui-g-4\">\r\n <span\r\n ><strong>{{\r\n \"agro.angular_components.last_update_date\" | libTranslate\r\n }}</strong></span\r\n >\r\n <p>{{ selectedStep?.item.lastModifiedDate | date : \"dd/MM/yyyy HH:mm:ss\" }}</p>\r\n </div>\r\n <div class=\"ui-g-4\" *ngIf=\"selectedStep?.item.status === 'FAILED'\">\r\n <span\r\n ><strong>{{\r\n \"agro.angular_components.event_error_message\" | libTranslate\r\n }}</strong></span\r\n >\r\n <p>{{ selectedStep?.item.message || \"-\" }}</p>\r\n </div>\r\n </div>\r\n </p-fieldset>\r\n </div>\r\n <s-footer>\r\n <div class=\"ui-g\">\r\n <div class=\"ui-g-12 width-fit\">\r\n <s-button\r\n id=\"sidebar-close-button\"\r\n [priority]=\"ButtonPriority.Primary\"\r\n [label]=\"'agro.angular_components.events_close' | libTranslate\"\r\n [auxiliary]=\"false\"\r\n (click)=\"closeSidebar()\"\r\n >\r\n </s-button>\r\n <s-button\r\n *ngIf=\"showReprocessButton\"\r\n id=\"sidebar-reprocess-button\"\r\n [priority]=\"ButtonPriority.Secondary\"\r\n iconClass=\"fa fa-refresh\"\r\n [label]=\"'agro.angular_components.reprocess_event' | libTranslate\"\r\n [auxiliary]=\"false\"\r\n (click)=\"openModal()\"\r\n >\r\n </s-button>\r\n </div>\r\n </div>\r\n </s-footer>\r\n</s-sidebar>\r\n\r\n<p-dialog [header]=\"'agro.angular_components.event_modal_title' | libTranslate\" [(visible)]=\"displayModal\" [modal]=\"true\" class=\"dialog\">\r\n <div class=\"event-modal-text\">{{ \"agro.angular_components.event_modal\" | libTranslate }}</div>\r\n <p-footer>\r\n <div class=\"ui-dialog-buttonpane ui-widget-content ui-helper-clearfix\">\r\n <button\r\n id=\"modal-yes\"\r\n type=\"button\"\r\n pButton\r\n icon=\"fa fa-check\"\r\n (click)=\"confirmModal()\"\r\n label=\"{{ 'agro.angular_components.yes' | libTranslate }}\"\r\n class=\"ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only\"\r\n ></button>\r\n <button\r\n id=\"modal-no\"\r\n type=\"button\"\r\n pButton\r\n icon=\"fa fa-close\"\r\n (click)=\"cancelModal()\"\r\n label=\"{{ 'agro.angular_components.no' | libTranslate }}\"\r\n class=\"ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only\"\r\n ></button>\r\n </div>\r\n </p-footer>\r\n</p-dialog>\r\n",
|
|
572
|
+
template: "<ng-container *sLoadingState=\"gridLoading\">\r\n <p-panel>\r\n <p-header>\r\n {{ \"agro.angular_components.event_control_header\" | libTranslate }}\r\n </p-header>\r\n <div class=\"ui-g\">\r\n <div class=\"ui-g-12\">\r\n <s-button\r\n id=\"refresh-button\"\r\n [priority]=\"ButtonPriority.Primary\"\r\n iconClass=\"fa fa-refresh\"\r\n [label]=\"'agro.angular_components.refresh' | libTranslate\"\r\n (click)=\"onSearch()\"\r\n >\r\n </s-button>\r\n <s-button\r\n *ngIf=\"standalone && showCancelButton\"\r\n id=\"cancel-button-agro-events-lib\"\r\n iconClass=\"fa fa-times\"\r\n [label]=\"'agro.angular_components.cancel' | libTranslate\"\r\n (click)=\"openCancelModal()\"\r\n >\r\n </s-button>\r\n </div>\r\n </div>\r\n <div class=\"ui-g\">\r\n <div class=\"ui-g-12 ui-md-12\" *ngIf=\"!gridData || gridData?.length === 0\">\r\n <s-empty-state\r\n iconClass=\"fa fa-exclamation-triangle\"\r\n title=\"{{ 'agro.angular_components.nothing_found' | libTranslate }}\"\r\n [showPrimaryAction]=\"false\"\r\n description=\"{{ 'agro.angular_components.table_empty_description' | libTranslate }}\"\r\n >\r\n </s-empty-state>\r\n </div>\r\n <ng-container *ngIf=\"gridData?.length > 0\">\r\n <p-table\r\n stylelass=\"custom-table\"\r\n #eventControlTable\r\n [value]=\"gridDataResolved\"\r\n [columns]=\"gridColumns\"\r\n dataKey=\"id\"\r\n [lazy]=\"true\"\r\n [scrollable]=\"true\"\r\n [resizableColumns]=\"true\"\r\n [paginator]=\"!standalone\"\r\n [totalRecords]=\"gridTotalRecords\"\r\n [rows]=\"10\"\r\n [responsive]=\"true\"\r\n (onLazyLoad)=\"onGridChange($event)\"\r\n [sortOrder]=\"getSortOrder()\"\r\n [first]=\"getRowIndex()\"\r\n [lazyLoadOnInit]=\"false\"\r\n sortMode=\"multiple\"\r\n [rows]=\"getPageSize()\"\r\n [rowsPerPageOptions]=\"[10, 20, 50, 100]\"\r\n >\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <ng-container *ngIf=\"!standalone\">\r\n <th\r\n *ngFor=\"let col of columns\"\r\n class=\"ui-lg-1 ui-md-1\"\r\n [pSortableColumn]=\"col.field\"\r\n scope=\"col\"\r\n >\r\n <div class=\"senior-header\">\r\n <span class=\"senior-header-title\">{{\r\n col.header\r\n }}</span>\r\n <p-sortIcon [field]=\"col.field\"></p-sortIcon>\r\n </div>\r\n </th>\r\n </ng-container>\r\n <th class=\"ui-lg-8 ui-md-7\" scope=\"col\">\r\n {{ \"agro.angular_components.panel_title_events_events\" | libTranslate }}\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData>\r\n <tr>\r\n <ng-container *ngIf=\"!standalone\">\r\n <td class=\"ui-lg-1 ui-md-1\">\r\n {{ rowData.e070emp?.nomEmp }}\r\n </td>\r\n <td class=\"ui-lg-1 ui-md-1\">\r\n {{ rowData.e070fil?.nomFil }}\r\n </td>\r\n <td class=\"ui-lg-1 ui-md-1\">\r\n <ng-container [ngSwitch]=\"rowData.eventOrigin\">\r\n <span *ngSwitchCase=\"'BALANCE_ENTRY_CONTROL'\">\r\n {{\r\n \"agro.angular_components.balance_entry_control_event\"\r\n | libTranslate\r\n }}\r\n </span>\r\n <span *ngSwitchCase=\"'TICKET'\">\r\n {{\r\n \"agro.angular_components.ticket_maintenance_header\"\r\n | libTranslate\r\n }}\r\n </span>\r\n <span *ngSwitchCase=\"'TRANSFER'\">\r\n {{\r\n \"agro.angular_components.transfer_origin_event\"\r\n | libTranslate\r\n }}\r\n </span>\r\n <span *ngSwitchCase=\"'INVOICE'\">\r\n {{\r\n \"agro.angular_components.invoice_creating_event\"\r\n | libTranslate\r\n }}\r\n </span>\r\n <span *ngSwitchCase=\"'CHANGE_REQUEST'\">\r\n {{\r\n \"agro.angular_components.change_request_event\"\r\n | libTranslate\r\n }}\r\n </span>\r\n <span *ngSwitchCase=\"'FIXATION'\">\r\n {{\r\n \"agro.angular_components.fixation_event\"\r\n | libTranslate\r\n }}\r\n </span>\r\n <span *ngSwitchCase=\"'CANCEL_FIXATION'\">\r\n {{\r\n \"agro.angular_components.cancel_fixation_event\"\r\n | libTranslate\r\n }}\r\n </span>\r\n <span *ngSwitchCase=\"'TRANSFER_CANCELLATION'\">\r\n {{\r\n \"agro.angular_components.transfer_cancellation_event\"\r\n | libTranslate\r\n }}\r\n </span>\r\n </ng-container>\r\n </td>\r\n <td class=\"ui-lg-1 ui ui-md-1\">\r\n {{ rowData.controlCode || \"\" }}\r\n </td>\r\n </ng-container>\r\n <td class=\"ui-lg-8 ui-md-7\">\r\n <ng-container *ngFor=\"let group of rowData.groups\">\r\n <s-event-steps\r\n [steps]=\"group.steps || []\"\r\n [activeIndex]=\"group.activeIndex\"\r\n (stepSelected)=\"stepSelected($event)\"\r\n >\r\n </s-event-steps>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template\r\n *ngIf=\"!standalone\"\r\n pTemplate=\"paginatorright\"\r\n class=\"custom-table\"\r\n >\r\n <span>\r\n {{\r\n \"agro.angular_components.registers_found\"\r\n | libTranslate : { total: gridTotalRecords }\r\n }}\r\n </span>\r\n </ng-template>\r\n </p-table>\r\n </ng-container>\r\n </div>\r\n </p-panel>\r\n</ng-container>\r\n<s-sidebar [visible]=\"showSidebar\" (visibleChange)=\"closeSidebar()\" header=\"{{ 'agro.angular_components.event_details_header' | libTranslate }}\">\r\n <div class=\"ui-fluid\">\r\n <p-fieldset [legend]=\"sidebarTitle\" [toggleable]=\"false\">\r\n <div class=\"ui-g\">\r\n <div class=\"ui-g-4\">\r\n <span\r\n ><strong>{{\r\n \"agro.angular_components.event_origin_label\" | libTranslate\r\n }}</strong></span\r\n >\r\n <ng-container [ngSwitch]=\"selectedStep?.eventType\">\r\n <p *ngSwitchCase=\"'BALANCE_ENTRY_CONTROL'\">\r\n {{ \"agro.angular_components.balance_entry_control_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'TICKET'\">\r\n {{ \"agro.angular_components.ticket_maintenance_header\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'TRANSFER'\">\r\n {{ \"agro.angular_components.transfer_origin_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'INVOICE'\">\r\n {{ \"agro.angular_components.invoice_creating_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'CHANGE_REQUEST'\">\r\n {{ \"agro.angular_components.change_request_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'FIXATION'\">\r\n {{ \"agro.angular_components.fixation_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'CANCEL_FIXATION'\">\r\n {{ \"agro.angular_components.cancel_fixation_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'TRANSFER_CANCELLATION'\">\r\n {{ \"agro.angular_components.transfer_cancellation_event\" | libTranslate }}\r\n </p>\r\n </ng-container>\r\n </div>\r\n <div class=\"ui-g-4\" *ngIf=\"producerInvoice?.producerBalanceEntryControl.producer.e001pes.nomPes\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.supplier\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ producerInvoice?.producerBalanceEntryControl.producer.e001pes.nomPes }}</p>\r\n </div>\r\n <div class=\"ui-g-4\" *ngIf=\"producerInvoice?.producerBalanceEntryControl.ruralEstate.name\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.rural_estate\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ producerInvoice?.producerBalanceEntryControl.ruralEstate.name }}</p>\r\n </div>\r\n <div class=\"ui-g-4\" *ngIf=\"selectedStep?.controlCode\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.control_code\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ selectedStep?.controlCode }}</p>\r\n </div>\r\n <div class=\"ui-g-4\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.status_label\" | libTranslate }}</strong></span\r\n >\r\n <ng-container [ngSwitch]=\"selectedStep?.item.status\">\r\n <p *ngSwitchCase=\"'SUCCESS'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Green\"\r\n text=\"{{\r\n 'agro.angular_components.panel_title_events_completed_successfully'\r\n | libTranslate\r\n }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n <p *ngSwitchCase=\"'PROCESSING'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Orange\"\r\n text=\"{{ 'agro.angular_components.processing' | libTranslate }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n <p *ngSwitchCase=\"'FAILED'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Red\"\r\n text=\"{{\r\n 'agro.angular_components.panel_title_events_ended_with_error'\r\n | libTranslate\r\n }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n <p *ngSwitchCase=\"'PENDING'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Gray\"\r\n text=\"{{ 'agro.angular_components.pending' | libTranslate }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n </ng-container>\r\n </div>\r\n <div class=\"ui-g-4\">\r\n <span\r\n ><strong>{{\r\n \"agro.angular_components.last_update_date\" | libTranslate\r\n }}</strong></span\r\n >\r\n <p>{{ selectedStep?.item.lastModifiedDate | date : \"dd/MM/yyyy HH:mm:ss\" }}</p>\r\n </div>\r\n <div class=\"ui-g-4\" *ngIf=\"selectedStep?.item.status === 'FAILED'\">\r\n <span\r\n ><strong>{{\r\n \"agro.angular_components.event_error_message\" | libTranslate\r\n }}</strong></span\r\n >\r\n <p>{{ selectedStep?.item.message || \"-\" }}</p>\r\n </div>\r\n </div>\r\n </p-fieldset>\r\n </div>\r\n <s-footer>\r\n <div class=\"ui-g\">\r\n <div class=\"ui-g-12 width-fit\">\r\n <s-button\r\n id=\"sidebar-close-button\"\r\n [priority]=\"ButtonPriority.Primary\"\r\n [label]=\"'agro.angular_components.events_close' | libTranslate\"\r\n [auxiliary]=\"false\"\r\n (click)=\"closeSidebar()\"\r\n >\r\n </s-button>\r\n <s-button\r\n *ngIf=\"showReprocessButton\"\r\n id=\"sidebar-reprocess-button\"\r\n [priority]=\"ButtonPriority.Secondary\"\r\n iconClass=\"fa fa-refresh\"\r\n [label]=\"'agro.angular_components.reprocess_event' | libTranslate\"\r\n [auxiliary]=\"false\"\r\n (click)=\"openModal()\"\r\n >\r\n </s-button>\r\n </div>\r\n </div>\r\n </s-footer>\r\n</s-sidebar>\r\n\r\n<p-dialog [header]=\"'agro.angular_components.event_modal_title' | libTranslate\" [(visible)]=\"displayModal\" [modal]=\"true\" class=\"dialog\">\r\n <div class=\"event-modal-text\">{{ \"agro.angular_components.event_modal\" | libTranslate }}</div>\r\n <p-footer>\r\n <div class=\"ui-dialog-buttonpane ui-widget-content ui-helper-clearfix\">\r\n <button\r\n id=\"modal-yes\"\r\n type=\"button\"\r\n pButton\r\n icon=\"fa fa-check\"\r\n (click)=\"confirmModal()\"\r\n label=\"{{ 'agro.angular_components.yes' | libTranslate }}\"\r\n class=\"ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only\"\r\n ></button>\r\n <button\r\n id=\"modal-no\"\r\n type=\"button\"\r\n pButton\r\n icon=\"fa fa-close\"\r\n (click)=\"cancelModal()\"\r\n label=\"{{ 'agro.angular_components.no' | libTranslate }}\"\r\n class=\"ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only\"\r\n ></button>\r\n </div>\r\n </p-footer>\r\n</p-dialog>\r\n",
|
|
526
573
|
providers: [
|
|
527
574
|
{ provide: LOCALE_ID, useValue: 'pt-BR' }
|
|
528
575
|
],
|
|
@@ -532,4 +579,4 @@ var EventControlBoardComponent = /** @class */ (function () {
|
|
|
532
579
|
return EventControlBoardComponent;
|
|
533
580
|
}());
|
|
534
581
|
export { EventControlBoardComponent };
|
|
535
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtY29udHJvbC1ib2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWFncm9uZWdvY2lvL2FuZ3VsYXItY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvZXZlbnQtY29udHJvbC1ib2FyZC9ldmVudC1jb250cm9sLWJvYXJkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxRQUFRLE1BQU0sNEJBQTRCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBZ0MsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUMvSCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFRLFNBQVMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hILE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFNUQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDbEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztB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QUFhLEVBQUU7WUFDbkYsTUFBQSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsMENBQUUsUUFBUSxPQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxtQ0FBSSxJQUFJLEVBQUU7U0FDdkY7UUFFRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEtBQUssT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7WUFDbkYsTUFBQSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsMENBQUUsUUFBUSxPQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxtQ0FBSSxJQUFJLEVBQUU7U0FDdkY7SUFDTCxDQUFDO0lBRU8sOEVBQXlDLEdBQWpELFVBQWtELE9BQXNCOztRQUNwRSxJQUFJLE9BQU8sQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxZQUFZLEtBQUssT0FBTyxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUU7WUFDL0YsTUFBQSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsMENBQUUsUUFBUSxPQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsWUFBWSxtQ0FBSSxJQUFJLEVBQUU7U0FDL0Y7UUFFRCxJQUFJLE9BQU8sQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxZQUFZLEtBQUssT0FBTyxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUU7WUFDL0YsTUFBQSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsMENBQUUsUUFBUSxPQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsWUFBWSxtQ0FBSSxJQUFJLEVBQUU7U0FDL0Y7SUFDTCxDQUFDO0lBRU8sOEVBQXlDLEdBQWpELFVBQWtELE9BQXNCOztRQUNwRSxJQUFJLE9BQU8sQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxZQUFZLEtBQUssT0FBTyxDQUFDLFdBQVcsQ0FBQyxh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UixLQUFLLEVBQUU7K0RBQW1CO0lBQ2xCO1FBQVIsS0FBSyxFQUFFO21FQUF3QjtJQUN2QjtRQUFSLEtBQUssRUFBRTttRUFBMkI7SUFDMUI7UUFBUixLQUFLLEVBQUU7bUVBQTJCO0lBQzFCO1FBQVIsS0FBSyxFQUFFO2tFQUFxQjtJQUNwQjtRQUFSLEtBQUssRUFBRTttRUFBb0I7SUFDbkI7UUFBUixLQUFLLEVBQUU7a0VBQXNCO0lBQ3JCO1FBQVIsS0FBSyxFQUFFO3dFQUE0QjtJQUMzQjtRQUFSLEtBQUssRUFBRTsrRUFBbUQ7SUFDakQ7UUFBVCxNQUFNLEVBQUU7c0VBQTREO0lBWjVELDBCQUEwQjtRQVJ0QyxTQUFTLENBQUM7WUFDUCxRQUFRLEVBQUUscUJBQXFCO1lBQy9CLDJ0bEJBQW1EO1lBRW5ELFNBQVMsRUFBRTtnQkFDUCxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTthQUM1Qzs7U0FDSixDQUFDO09BQ1csMEJBQTBCLENBMmZ0QztJQUFELGlDQUFDO0NBQUEsQUEzZkQsSUEyZkM7U0EzZlksMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVnaXN0ZXJMb2NhbGVEYXRhIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgbG9jYWxlUHQgZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9sb2NhbGVzL3B0XCI7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgTE9DQUxFX0lELCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBCYWRnZUNvbG9ycywgQnV0dG9uUHJpb3JpdHksIEZpZWxkVHlwZSwgRm9ybUZpZWxkLCBTdGVwLCBTdGVwU3RhdGUgfSBmcm9tIFwiQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50c1wiO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlLCBNZXNzYWdlU2VydmljZSB9IGZyb20gXCJwcmltZW5nXCI7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCB0YWtlVW50aWwgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgQUdST19OVU1CRVJTIH0gZnJvbSBcIi4uLy4uL2VudW1zL2Fncm8tbnVtYmVycy5lbnVtXCI7XHJcbmltcG9ydCB7IExpYlRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9saWItdHJhbnNsYXRpb24uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBXZWJzb2NrZXRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3dlYnNvY2tldFwiO1xyXG5pbXBvcnQgeyBDYW5jZWxFdmVudERpYWxvZ0NvbmZpZyB9IGZyb20gXCIuLi9jYW5jZWwtZXZlbnQtZGlhbG9nL2NhbmNlbC1ldmVudC1kaWFsb2ctY29uZmlnXCI7XHJcbmltcG9ydCB7IENhbmNlbEV2ZW50RGlhbG9nQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NhbmNlbC1ldmVudC1kaWFsb2cvY2FuY2VsLWV2ZW50LWRpYWxvZy5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgZXZlbnRJdGVtLCBpbnB1dEZpZWxkc1BhdGggfSBmcm9tIFwiLi9jb21tb24vZXZlbnQtY29udHJvbC1jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgRXZlbnRPcmlnaW4gfSBmcm9tIFwiLi9jb21tb24vZXZlbnQtb3JpZ2luXCI7XHJcbmltcG9ydCB7IEV2ZW50U3RhdHVzIH0gZnJvbSBcIi4vY29tbW9uL2V2ZW50LXN0YXR1c1wiO1xyXG5pbXBvcnQgeyBJbnB1dEZpZWxkcyB9IGZyb20gXCIuL2NvbW1vbi9pbnB1dC1maWVsZHNcIjtcclxuaW1wb3J0IHsgaW52b2ljZVR5cGVUcmFuc2xhdGUgfSBmcm9tIFwiLi9jb21tb24vaW5wdXQtZmllbGRzLXRyYW5zbGF0ZVwiO1xyXG5pbXBvcnQgeyBMb29rdXBFcnJvck1lc3NhZ2VzIH0gZnJvbSBcIi4vY29tbW9uL2xvb2t1cC1lcnJvci1tZXNzYWdlLmNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBFMDcwRW1wIH0gZnJvbSBcIi4vc2VydmljZS9lMDcwZW1wL2UwNzBlbXBcIjtcclxuaW1wb3J0IHsgRTA3MEZpbCB9IGZyb20gXCIuL3NlcnZpY2UvZTA3MGZpbC9lMDcwZmlsXCI7XHJcbmltcG9ydCB7IEV2ZW50Q29udHJvbEJvYXJkU2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2UvZXZlbnQtY29udHJvbC1ib2FyZC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEV2ZW50Q29udHJvbEl0ZW0gfSBmcm9tIFwiLi9zZXJ2aWNlL2V2ZW50LWNvbnRyb2wtaXRlbS9ldmVudC1jb250cm9sLWl0ZW1cIjtcclxuaW1wb3J0IHsgUmVwcm9jZXNzRmFpbGVkRXZlbnQgfSBmcm9tIFwiLi9zZXJ2aWNlL2V2ZW50LWNvbnRyb2wtaXRlbS9ldmVudC1jb250cm9sLWl0ZW0uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBFdmVudENvbnRyb2wgfSBmcm9tIFwiLi9zZXJ2aWNlL2V2ZW50LWNvbnRyb2wvZXZlbnQtY29udHJvbFwiO1xyXG5pbXBvcnQgeyBMaXN0RXZlbnRDb250cm9sV2l0aEZpbHRlcnNJbnB1dER0byB9IGZyb20gXCIuL3NlcnZpY2UvZXZlbnQtY29udHJvbC9ldmVudC1jb250cm9sLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUGFnaW5hdG9yU3RvcmFnZVNlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlL3BhZ2luYXRvci1zdG9yYWdlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUHJvZHVjZXJJbnZvaWNlRHRvIH0gZnJvbSBcIi4vc2VydmljZS9wcm9kdWNlci1pbnZvaWNlL3Byb2R1Y2VyLWludm9pY2UtZHRvXCI7XHJcbmNvbnN0IG1vbWVudCA9IHJlcXVpcmUoXCJtb21lbnRcIik7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnZXZlbnQtY29udHJvbC1ib2FyZCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZXZlbnQtY29udHJvbC1ib2FyZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9ldmVudC1jb250cm9sLWJvYXJkLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7IHByb3ZpZGU6IExPQ0FMRV9JRCwgdXNlVmFsdWU6ICdwdC1CUicgfVxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRXZlbnRDb250cm9sQm9hcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcclxuXHJcbiAgICBASW5wdXQoKSBlMDcwZW1wITogRTA3MEVtcDtcclxuICAgIEBJbnB1dCgpIGUwNzBmaWwhOiBFMDcwRmlsO1xyXG4gICAgQElucHV0KCkgY29udHJvbENvZGUhOiBzdHJpbmdbXTtcclxuICAgIEBJbnB1dCgpIGV2ZW50T3JpZ2luITogRXZlbnRPcmlnaW47XHJcbiAgICBASW5wdXQoKSBldmVudFN0YXR1cyE6IEV2ZW50U3RhdHVzO1xyXG4gICAgQElucHV0KCkgZXh0ZXJuYWxJZCE6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGNyZWF0ZWREYXRlITogRGF0ZTtcclxuICAgIEBJbnB1dCgpIHN0YW5kYWxvbmUhOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgc2hvd0NhbmNlbEJ1dHRvbiE6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBjYW5jZWxFdmVudERpYWxvZ0NvbmZpZyE6IENhbmNlbEV2ZW50RGlhbG9nQ29uZmlnO1xyXG4gICAgQE91dHB1dCgpIHByb2Nlc3NlZEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXHJcblxyXG4gICAgcHVibGljIHByb2R1Y2VySW52b2ljZSE6IFByb2R1Y2VySW52b2ljZUR0bztcclxuXHJcbiAgICBwdWJsaWMgc3RlcHM6IFN0ZXBbXSA9IFtdO1xyXG4gICAgcHVibGljIHNlbGVjdGVkU3RlcDogYW55O1xyXG4gICAgcHVibGljIGV2ZW50SWQhOiAnJztcclxuICAgIHB1YmxpYyBzaG93U2lkZWJhciA9IGZhbHNlO1xyXG4gICAgcHVibGljIHNob3dSZXByb2Nlc3NCdXR0b24gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzaWRlYmFyVGl0bGUhOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgc2lkZWJhckxvYWRpbmchOiBib29sZWFuO1xyXG5cclxuICAgIHB1YmxpYyBmaWx0ZXJGb3JtR3JvdXAhOiBGb3JtR3JvdXA7XHJcbiAgICBwdWJsaWMgZmlsdGVyRmllbGRzITogRm9ybUZpZWxkW107XHJcblxyXG4gICAgcHVibGljIGdyaWREYXRhITogYW55W107XHJcbiAgICBwdWJsaWMgZ3JpZERhdGFSZXNvbHZlZCE6IGFueVtdO1xyXG4gICAgcHVibGljIGdyaWRDb2x1bW5zITogYW55W107XHJcbiAgICBwdWJsaWMgZ3JpZFRvdGFsUmVjb3JkcyA9IEFHUk9fTlVNQkVSUy5aRVJPO1xyXG4gICAgcHVibGljIGdyaWRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZGlzcGxheU1vZGFsID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIEJ1dHRvblByaW9yaXR5ID0gQnV0dG9uUHJpb3JpdHk7XHJcbiAgICBwdWJsaWMgQmFkZ2VDb2xvcnMgPSBCYWRnZUNvbG9ycztcclxuXHJcbiAgICBwdWJsaWMgcGVybWlzc2lvbnM6IGFueSA9IHt9O1xyXG4gICAgcHVibGljIGxvY2FsZUNvbmZpZzogYW55ID0ge307XHJcblxyXG4gICAgcHVibGljIGN1cnJlbnRMaXN0UGFyYW1zOiBhbnkgPSB7IHBhZ2U6IEFHUk9fTlVNQkVSUy5aRVJPLCBzaXplOiBBR1JPX05VTUJFUlMuVEVOLCBzb3J0OiBbXSwgZmlsdGVyRGF0YToge30gfTtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdCgpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBldmVudEl0ZW0gPSBldmVudEl0ZW07XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGlucHV0RmllbGRzUGF0aCA9IGlucHV0RmllbGRzUGF0aDtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW52b2ljZVR5cGVUcmFuc2xhdGUgPSBpbnZvaWNlVHlwZVRyYW5zbGF0ZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZTogTGliVHJhbnNsYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgd2Vic29ja2V0U2VydmljZTogV2Vic29ja2V0U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50Q29udHJvbEJvYXJkU2VydmljZTogRXZlbnRDb250cm9sQm9hcmRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcGFnaW5hdG9yU3RvcmFnZVNlcnZpY2U6IFBhZ2luYXRvclN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgICkge1xyXG4gICAgICAgIHJlZ2lzdGVyTG9jYWxlRGF0YShsb2NhbGVQdCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuZ3JpZENvbHVtbnMgPSB0aGlzLnNldEdyaWRDb2x1bW5zKCk7XHJcbiAgICAgICAgdGhpcy5jYWxsV2Vic29ja2V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZmlsdGVyRm9ybUdyb3VwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm1Hcm91cCgpO1xyXG4gICAgICAgICAgICB0aGlzLnNldEZvcm1GaWVsZHMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQ29tcGFueUFuZEJyYW5jaEZvcm1GaWVsZHMoY2hhbmdlcyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVFdmVudE9yaWdpbkFuZENvbnRyb2xDb2RlRm9ybUZpZWxkcyhjaGFuZ2VzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUV2ZW50U3RhdHVzQW5kQ3JlYXRlZERhdGVGb3JtRmllbGRzKGNoYW5nZXMpO1xyXG4gICAgICAgIHRoaXMub25TZWFyY2goKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUNvbXBhbnlBbmRCcmFuY2hGb3JtRmllbGRzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgICAgICBpZiAoY2hhbmdlcy5lMDcwZW1wICYmIGNoYW5nZXMuZTA3MGVtcC5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXMuZTA3MGVtcC5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldCgnZTA3MGVtcCcpPy5zZXRWYWx1ZShjaGFuZ2VzLmUwNzBlbXAuY3VycmVudFZhbHVlID8/IG51bGwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNoYW5nZXMuZTA3MGZpbCAmJiBjaGFuZ2VzLmUwNzBmaWwuY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzLmUwNzBmaWwucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlckZvcm1Hcm91cC5nZXQoJ2UwNzBmaWwnKT8uc2V0VmFsdWUoY2hhbmdlcy5lMDcwZmlsLmN1cnJlbnRWYWx1ZSA/PyBudWxsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVFdmVudE9yaWdpbkFuZENvbnRyb2xDb2RlRm9ybUZpZWxkcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAgICAgaWYgKGNoYW5nZXMuZXZlbnRPcmlnaW4gJiYgY2hhbmdlcy5ldmVudE9yaWdpbi5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXMuZXZlbnRPcmlnaW4ucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlckZvcm1Hcm91cC5nZXQoJ2V2ZW50T3JpZ2luJyk/LnNldFZhbHVlKGNoYW5nZXMuZXZlbnRPcmlnaW4uY3VycmVudFZhbHVlID8/IG51bGwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNoYW5nZXMuY29udHJvbENvZGUgJiYgY2hhbmdlcy5jb250cm9sQ29kZS5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXMuY29udHJvbENvZGUucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlckZvcm1Hcm91cC5nZXQoJ2NvbnRyb2xDb2RlJyk/LnNldFZhbHVlKGNoYW5nZXMuY29udHJvbENvZGUuY3VycmVudFZhbHVlID8/IG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUV2ZW50U3RhdHVzQW5kQ3JlYXRlZERhdGVGb3JtRmllbGRzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgICAgICBpZiAoY2hhbmdlcy5ldmVudFN0YXR1cyAmJiBjaGFuZ2VzLmV2ZW50U3RhdHVzLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlcy5ldmVudFN0YXR1cy5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldCgnc3RhdHVzJyk/LnNldFZhbHVlKGNoYW5nZXMuZXZlbnRTdGF0dXMuY3VycmVudFZhbHVlID8/IG51bGwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNoYW5nZXMuY3JlYXRlZERhdGUgJiYgY2hhbmdlcy5jcmVhdGVkRGF0ZS5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXMuY3JlYXRlZERhdGUucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlckZvcm1Hcm91cC5nZXQoJ2NyZWF0ZWREYXRlJyk/LnNldFZhbHVlKGNoYW5nZXMuY3JlYXRlZERhdGUuY3VycmVudFZhbHVlID8/IG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRpYWxpemVGb3JtR3JvdXAoKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJGb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICAgICAgZTA3MGVtcDogW3sgdmFsdWU6IHRoaXMuZTA3MGVtcCA/PyBudWxsLCBkaXNhYmxlZDogZmFsc2UgfSwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXHJcbiAgICAgICAgICAgIGUwNzBmaWw6IFt7IHZhbHVlOiB0aGlzLmUwNzBmaWwgPz8gbnVsbCwgZGlzYWJsZWQ6IGZhbHNlIH0sIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxyXG4gICAgICAgICAgICBjb250cm9sQ29kZTogW3sgdmFsdWU6IHRoaXMuY29udHJvbENvZGUgPz8gbnVsbCwgZGlzYWJsZWQ6IGZhbHNlIH0sIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxyXG4gICAgICAgICAgICBleHRlcm5hbElkOiBbeyB2YWx1ZTogdGhpcy5leHRlcm5hbElkID8/IG51bGwsIGRpc2FibGVkOiBmYWxzZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcclxuICAgICAgICAgICAgZXZlbnRPcmlnaW46IFt7IHZhbHVlOiB0aGlzLmV2ZW50T3JpZ2luID8/IG51bGwsIGRpc2FibGVkOiBmYWxzZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcclxuICAgICAgICAgICAgc3RhdHVzOiBbeyB2YWx1ZTogdGhpcy5ldmVudFN0YXR1cyA/PyBudWxsLCBkaXNhYmxlZDogZmFsc2UgfSwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXHJcbiAgICAgICAgICAgIGNyZWF0ZWREYXRlOiBbeyB2YWx1ZTogdGhpcy5jcmVhdGVkRGF0ZSA/PyBudWxsLCBkaXNhYmxlZDogZmFsc2UgfSwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRGb3JtRmllbGRzKCkge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyRmllbGRzID0gW1xyXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiZTA3MGVtcFwiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkNoaXBzLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcImUwNzBmaWxcIixcclxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5DaGlwcyxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb250cm9sQ29kZVwiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkNoaXBzLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcImV4dGVybmFsSWRcIixcclxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiZXZlbnRPcmlnaW5cIixcclxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5FbnVtLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcInN0YXR1c1wiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkVudW0sXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiY3JlYXRlZERhdGVcIixcclxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5EYXRlLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0R3JpZENvbHVtbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgeyBmaWVsZDogJ2UwNzBlbXAnLCBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5jb21wYW55XCIpIH0sXHJcbiAgICAgICAgICAgIHsgZmllbGQ6ICdlMDcwZmlsJywgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMubGFiZWxfYnJhbmNoXCIpIH0sXHJcbiAgICAgICAgICAgIHsgZmllbGQ6ICdldmVudE9yaWdpbicsIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLmV2ZW50X29yaWdpbl9sYWJlbFwiKSB9LFxyXG4gICAgICAgICAgICB7IGZpZWxkOiAnY29udHJvbENvZGUnLCBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5jb250cm9sX2NvZGVcIikgfSxcclxuICAgICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xyXG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xyXG4gICAgICAgIHRoaXMud2Vic29ja2V0U2VydmljZS5kaXNjb25uZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhbGxXZWJzb2NrZXQoKSB7XHJcbiAgICAgICAgdGhpcy53ZWJzb2NrZXRTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5vbkV2ZW50PGFueT4oe1xyXG4gICAgICAgICAgICAgICAgZG9tYWluOiAnYWdybycsXHJcbiAgICAgICAgICAgICAgICBzZXJ2aWNlOiAnYWdyb19ldmVudHMnLFxyXG4gICAgICAgICAgICAgICAgcHJpbWl0aXZlOiBcInByb2Nlc3NlZEV2ZW50XCIsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChtZXNzYWdlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5hbElkID0gbWVzc2FnZT8uZGF0YT8uZXh0ZXJuYWxJZDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlckZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFleHRlcm5hbElkIHx8IHRoaXMuZ3JpZERhdGE/LnNvbWUoKGl0ZW06IGFueSkgPT4gaXRlbS5leHRlcm5hbElkID09PSBleHRlcm5hbElkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlR3JpZCh7IGZpbHRlckRhdGEgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzZWRFdmVudC5lbWl0KG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy53ZWJzb2NrZXRTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5vbkV2ZW50PGFueT4oe1xyXG4gICAgICAgICAgICAgICAgZG9tYWluOiAncGxhdGZvcm0nLFxyXG4gICAgICAgICAgICAgICAgc2VydmljZTogJ25vdGlmaWNhdGlvbnMnLFxyXG4gICAgICAgICAgICAgICAgcHJpbWl0aXZlOiBcInVzZXJOb3RpZmllZFwiLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJEYXRhID0gdGhpcy5maWx0ZXJGb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlR3JpZCh7IGZpbHRlckRhdGEgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblNlYXJjaCgpIHtcclxuICAgICAgICBjb25zdCBmaWx0ZXJEYXRhID0gdGhpcy5maWx0ZXJGb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcclxuICAgICAgICB0aGlzLmdyaWRMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlc2V0R3JpZCh7IGZpbHRlckRhdGEgfSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVHcmlkKHsgZmlsdGVyRGF0YSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzZXRHcmlkKGxpc3RQYXJhbXM/OiBhbnkpIHtcclxuICAgICAgICBpZiAobGlzdFBhcmFtcykge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zID0geyAuLi50aGlzLmN1cnJlbnRMaXN0UGFyYW1zLCAuLi5saXN0UGFyYW1zIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY3VycmVudExpc3RQYXJhbXMucGFnZSA9IEFHUk9fTlVNQkVSUy5aRVJPO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlR3JpZChsaXN0UGFyYW1zOiBhbnkgPSB7fSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudExpc3RQYXJhbXMgPSB7IC4uLnRoaXMuY3VycmVudExpc3RQYXJhbXMsIC4uLmxpc3RQYXJhbXMgfTtcclxuICAgICAgICBjb25zdCB7IHBhZ2UsIHNpemUgfSA9IHRoaXMuY3VycmVudExpc3RQYXJhbXM7XHJcbiAgICAgICAgY29uc3Qgb3JkZXIgPSB0aGlzLmdldFNvcnRlZEZpZWxkcygpO1xyXG4gICAgICAgIGNvbnN0IGlucHV0ID0geyAuLi50aGlzLmdldElucHV0KCksIHBhZ2UsIHNpemUsIG9yZGVyIH07XHJcblxyXG4gICAgICAgIHRoaXMuZXZlbnRDb250cm9sQm9hcmRTZXJ2aWNlLmV2ZW50Q29udHJvbFNlcnZpY2VcclxuICAgICAgICAgICAgLmdldExpc3RFdmVudENvbnRyb2xXaXRoRmlsdGVycyhpbnB1dClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcclxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkRGF0YSA9IGxpc3QuY29udGVudHM7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRUb3RhbFJlY29yZHMgPSBsaXN0LnRvdGFsRWxlbWVudHM7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZ3JpZERhdGEgfHwgdGhpcy5ncmlkRGF0YS5sZW5ndGggPD0gQUdST19OVU1CRVJTLlpFUk8pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzRXZlbnRDb250cm9sSXRlbXMoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBwcm9jZXNzRXZlbnRDb250cm9sSXRlbXMoKSB7XHJcbiAgICAgICAgdGhpcy5ncmlkRGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzb3J0ZWRJdGVtcyA9IGl0ZW0uZXZlbnRDb250cm9sSXRlbS5zb3J0KChhOiBFdmVudENvbnRyb2xJdGVtLCBiOiBFdmVudENvbnRyb2xJdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5zZXF1ZW5jZSAtIGIuc2VxdWVuY2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb25zdCBzdGVwcyA9IHNvcnRlZEl0ZW1zLm1hcCgoZGV0YWlsOiBFdmVudENvbnRyb2xJdGVtLCBpbmRleDogbnVtYmVyKSA9PiB0aGlzLmNyZWF0ZVN0ZXAoZGV0YWlsLCBpdGVtLCBpbmRleCkpO1xyXG4gICAgICAgICAgICBjb25zdCBhY3RpdmVJbmRleCA9IHRoaXMuY2FsY3VsYXRlQWN0aXZlSW5kZXgoc29ydGVkSXRlbXMpO1xyXG4gICAgICAgICAgICBpdGVtLmdyb3VwcyA9IFt7IHN0ZXBzLCBhY3RpdmVJbmRleCB9XTtcclxuICAgICAgICAgICAgaXRlbS5hY3RpdmVJbmRleCA9IGFjdGl2ZUluZGV4O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZ3JpZERhdGFSZXNvbHZlZCA9IHRoaXMuZ3JpZERhdGE7XHJcbiAgICAgICAgdGhpcy5ncmlkTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2FsY3VsYXRlQWN0aXZlSW5kZXgoZGV0YWlsczogRXZlbnRDb250cm9sSXRlbVtdKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBsYXN0QWN0aXZlID0gZGV0YWlscy5yZWR1Y2UoKGxhc3RJbmRleCwgZGV0YWlsLCBjdXJyZW50SW5kZXgpID0+XHJcbiAgICAgICAgICAgIGRldGFpbC5zdGF0dXMgIT09IEV2ZW50U3RhdHVzLlBFTkRJTkcgPyBjdXJyZW50SW5kZXggOiBsYXN0SW5kZXgsIC0xKTtcclxuICAgICAgICBpZiAobGFzdEFjdGl2ZSAhPT0gLTEgJiYgZGV0YWlsc1tsYXN0QWN0aXZlXS5zdGF0dXMgPT09IEV2ZW50U3RhdHVzLlNVQ0NFU1MpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxhc3RBY3RpdmUgKyAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbGFzdEFjdGl2ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZVN0ZXAoZGV0YWlsOiBFdmVudENvbnRyb2xJdGVtLCBpdGVtOiBFdmVudENvbnRyb2wsIGRldGFpbEluZGV4OiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBpdGVtOiBkZXRhaWwsXHJcbiAgICAgICAgICAgIGNvbnRyb2xDb2RlOiBpdGVtLmNvbnRyb2xDb2RlLFxyXG4gICAgICAgICAgICBldmVudFR5cGU6IGl0ZW0uZXZlbnRPcmlnaW4sXHJcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLmdldEV2ZW50TGFiZWwoZGV0YWlsKSxcclxuICAgICAgICAgICAgc3ViTGFiZWw6IHRoaXMuZ2V0RXZlbnRTdWJMYWJlbChkZXRhaWwpLFxyXG4gICAgICAgICAgICBkaXNhYmxlZDogZGV0YWlsLnN0YXR1cyA9PT0gRXZlbnRTdGF0dXMuUEVORElORyAmJiBkZXRhaWxJbmRleCAhPT0gdGhpcy5jYWxjdWxhdGVBY3RpdmVJbmRleChpdGVtLmV2ZW50Q29udHJvbEl0ZW0pLFxyXG4gICAgICAgICAgICB0b29sdGlwOiB0aGlzLmdldEV2ZW50TGFiZWwoZGV0YWlsKSxcclxuICAgICAgICAgICAgc3RhdGU6IHRoaXMuZGV0ZXJtaW5lU3RlcFN0YXRlKGRldGFpbClcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZGV0ZXJtaW5lU3RlcFN0YXRlKGRldGFpbDogeyBzdGF0dXM6IEV2ZW50U3RhdHVzIH0pOiBTdGVwU3RhdGUge1xyXG4gICAgICAgIGlmIChkZXRhaWwuc3RhdHVzID09PSBFdmVudFN0YXR1cy5TVUNDRVNTKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBTdGVwU3RhdGUuU3VjY2VzcztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRldGFpbC5zdGF0dXMgPT09IEV2ZW50U3RhdHVzLkZBSUxFRCkge1xyXG4gICAgICAgICAgICByZXR1cm4gU3RlcFN0YXRlLldhcm5pbmc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBTdGVwU3RhdGUuRGVmYXVsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEV2ZW50TGFiZWwoZGV0YWlsOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGV2ZW50TGFiZWwgPSB0aGlzLmV2ZW50SXRlbS5maW5kKGUgPT4gZS52YWx1ZSA9PT0gZGV0YWlsLmV2ZW50T3BlcmF0aW9uKT8ubGFiZWw7XHJcbiAgICAgICAgcmV0dXJuIGV2ZW50TGFiZWwgPyB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGV2ZW50TGFiZWwpIDogZGV0YWlsLmV2ZW50T3BlcmF0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0RXZlbnRTdWJMYWJlbChkZXRhaWw6IEV2ZW50Q29udHJvbEl0ZW0pOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuZXZlbnRJdGVtLmZpbmQoZSA9PiBlLnZhbHVlID09PSBkZXRhaWwuZXZlbnRPcGVyYXRpb24pPy5zdWJMYWJlbEZpZWxkO1xyXG4gICAgICAgIGlmICghZmllbGQgfHwgIWRldGFpbC5pbnB1dCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmlucHV0RmllbGRzUGF0aC5maW5kKGYgPT4gZi5maWVsZCA9PT0gZmllbGQpPy5wYXRoO1xyXG4gICAgICAgIHZhciBmdWxsUGF0aCA9IHBhdGggPyBgJHtwYXRofS4ke2ZpZWxkfWAgOiBmaWVsZDtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWVGaWVsZEpzb25Gcm9tUGF0aChkZXRhaWwuaW5wdXQsIGZ1bGxQYXRoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRGaWVsZFZhbHVlKGZpZWxkLCB2YWx1ZSlcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFZhbHVlRmllbGRKc29uRnJvbVBhdGgoanNvbjogc3RyaW5nLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEpzb24gPSBKU09OLnBhcnNlKGpzb24pO1xyXG4gICAgICAgICAgICBjb25zdCBrZXlzID0gcGF0aC5zcGxpdCgnLicpO1xyXG4gICAgICAgICAgICByZXR1cm4ga2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiBhY2MgJiYgYWNjW2tleV0sIHBhcnNlZEpzb24pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm8gYW8gYWNlc3NhciBvIG9iamV0byBwZWxvIHBhdGg6ICcgKyBwYXRoLCBlcnJvcik7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZvcm1hdEZpZWxkVmFsdWUoZmllbGQ6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHN3aXRjaCAoZmllbGQpIHtcclxuICAgICAgICAgICAgY2FzZSBJbnB1dEZpZWxkcy5BR1JPX0lOVk9JQ0VfVFlQRTpcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5pbnZvaWNlVHlwZVRyYW5zbGF0ZS5maW5kKGUgPT4gZS52YWx1ZSA9PT0gdmFsdWUpPy5sYWJlbDtcclxuICAgICAgICAgICAgICAgIHJldHVybiBsYWJlbCA/IHRoaXMudHJhbnNsYXRlLmluc3RhbnQobGFiZWwpIDogdmFsdWVcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRTb3J0ZWRGaWVsZHMoKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgb3JkZXIgPSAnJztcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50TGlzdFBhcmFtcy5zb3J0Py5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIG9yZGVyID0gdGhpcy5jdXJyZW50TGlzdFBhcmFtcy5zb3J0Lm1hcCgoc29ydEl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMuZ2V0RmllbGROYW1lRm9yU29ydFJlcXVlc3Qoc29ydEl0ZW0uZmllbGQpfSAke3NvcnRJdGVtLm9yZGVyID09PSBBR1JPX05VTUJFUlMuT05FID8gJ2FzYycgOiAnZGVzYyd9YDtcclxuICAgICAgICAgICAgfSkuam9pbignLCAnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhbmRhbG9uZSkge1xyXG4gICAgICAgICAgICBvcmRlciA9ICdjcmVhdGVkRGF0ZSBhc2MnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG9yZGVyID0gJ2xhc3RNb2RpZmllZERhdGUgZGVzYyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvcmRlcjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldElucHV0KCk6IExpc3RFdmVudENvbnRyb2xXaXRoRmlsdGVyc0lucHV0RHRvIHtcclxuICAgICAgICBjb25zdCB7IGZpbHRlckRhdGEgfSA9IHRoaXMuY3VycmVudExpc3RQYXJhbXM7XHJcbiAgICAgICAgY29uc3QgY29udHJvbENvZGUgPSBmaWx0ZXJEYXRhWydjb250cm9sQ29kZSddICYmIEFycmF5LmlzQXJyYXkoZmlsdGVyRGF0YVsnY29udHJvbENvZGUnXSkgPyBmaWx0ZXJEYXRhWydjb250cm9sQ29kZSddIDogbnVsbDtcclxuICAgICAgICBjb25zdCBmaWx0ZXIgPSB7XHJcbiAgICAgICAgICAgIGNvbXBhbnlJZDogZmlsdGVyRGF0YVsnZTA3MGVtcCddPy5pZCA/PyBudWxsLFxyXG4gICAgICAgICAgICBicmFuY2hJZDogZmlsdGVyRGF0YVsnZTA3MGZpbCddPy5pZCA/PyBudWxsLFxyXG4gICAgICAgICAgICBjb250cm9sQ29kZTogY29udHJvbENvZGUgPyBjb250cm9sQ29kZS5tYXAoKGNvZGU6IHN0cmluZykgPT4gcGFyc2VJbnQoY29kZSkpIDogbnVsbCxcclxuICAgICAgICAgICAgZXh0ZXJuYWxJZDogZmlsdGVyRGF0YVsnZXh0ZXJuYWxJZCddID8/IG51bGwsXHJcbiAgICAgICAgICAgIGV2ZW50T3JpZ2luOiBmaWx0ZXJEYXRhWydldmVudE9yaWdpbiddID8/IG51bGwsXHJcbiAgICAgICAgICAgIGV2ZW50U3RhdHVzOiBmaWx0ZXJEYXRhWydzdGF0dXMnXSA/PyBudWxsLFxyXG4gICAgICAgICAgICBjcmVhdGVkRGF0ZVN0YXJ0OiBmaWx0ZXJEYXRhWydjcmVhdGVkRGF0ZSddID8gdGhpcy5nZXRTdGFydERhdGUoZmlsdGVyRGF0YVsnY3JlYXRlZERhdGUnXSkgOiBudWxsLFxyXG4gICAgICAgICAgICBjcmVhdGVkRGF0ZUVuZDogZmlsdGVyRGF0YVsnY3JlYXRlZERhdGUnXSA/IHRoaXMuZ2V0RW5kRGF0ZShmaWx0ZXJEYXRhWydjcmVhdGVkRGF0ZSddKSA6IG51bGwsXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gZmlsdGVyO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0RmllbGROYW1lRm9yU29ydFJlcXVlc3QobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgICAgICAgY2FzZSAnZTA3MGVtcCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2UwNzBlbXAubm9tRW1wJztcclxuICAgICAgICAgICAgY2FzZSAnZTA3MGZpbCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2UwNzBmaWwubm9tRmlsJztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEVuZERhdGUodmFsdWU6IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgZW5kRGF0ZSA9IG1vbWVudCh2YWx1ZSkuZW5kT2YoJ2RheScpLmZvcm1hdChcIllZWVktTU0tRERUSEg6bW06c3NcIikgKyAnWic7XHJcbiAgICAgICAgcmV0dXJuIGVuZERhdGU7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldFN0YXJ0RGF0ZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBzdGFydERhdGUgPSBtb21lbnQodmFsdWUpLnN0YXJ0T2YoJ2RheScpLmZvcm1hdChcIllZWVktTU0tRERUSEg6bW06c3NcIikgKyAnWic7XHJcbiAgICAgICAgcmV0dXJuIHN0YXJ0RGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25HcmlkQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICBjb25zdCBzaXplID0gZXZlbnQ/LnJvd3M7XHJcbiAgICAgICAgY29uc3QgcGFnZSA9IGV2ZW50Py5maXJzdCAvIHNpemU7XHJcbiAgICAgICAgY29uc3Qgc29ydCA9IGV2ZW50Lm11bHRpU29ydE1ldGE7XHJcbiAgICAgICAgdGhpcy5ncmlkTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgaWYgKHNpemUgIT09IEFHUk9fTlVNQkVSUy5URU4gfHwgcGFnZSAhPT0gQUdST19OVU1CRVJTLlpFUk8gfHwgKHNvcnQgJiYgc29ydC5sZW5ndGggPiBBR1JPX05VTUJFUlMuWkVSTykpIHtcclxuICAgICAgICAgICAgdGhpcy5wYWdpbmF0b3JTdG9yYWdlU2VydmljZS5zdG9yZVBhZ2luYXRvcignRXZlbnRDb250cm9sQm9hcmRQYWdpbmF0b3InLCB7IHBhZ2UsIHNpemUsIHNvcnQgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVHcmlkKHsgcGFnZSwgc2l6ZSwgc29ydCB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UGFnZVNpemUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudExpc3RQYXJhbXMuc2l6ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Um93SW5kZXgoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudExpc3RQYXJhbXMucGFnZSAqIHRoaXMuY3VycmVudExpc3RQYXJhbXMuc2l6ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U29ydEZpZWxkKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50TGlzdFBhcmFtcy5zb3J0IHx8IHRoaXMuY3VycmVudExpc3RQYXJhbXMuc29ydC5sZW5ndGggPD0gQUdST19OVU1CRVJTLlpFUk8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZENvbHVtbnNbQUdST19OVU1CRVJTLlpFUk9dLmZpZWxkO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50TGlzdFBhcmFtcy5zb3J0W0FHUk9fTlVNQkVSUy5aRVJPXS5maWVsZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U29ydE9yZGVyKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50TGlzdFBhcmFtcy5zb3J0IHx8IHRoaXMuY3VycmVudExpc3RQYXJhbXMuc29ydC5sZW5ndGggPD0gQUdST19OVU1CRVJTLlpFUk8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIEFHUk9fTlVNQkVSUy5PTkU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50TGlzdFBhcmFtcy5zb3J0W0FHUk9fTlVNQkVSUy5aRVJPXS5vcmRlcjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RXJyb3JNZXNzYWdlcygpIHtcclxuICAgICAgICBjb25zdCB0cmFuc2xhdGVkRXJyb3JNZXNzYWdlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIExvb2t1cEVycm9yTWVzc2FnZXMpIHtcclxuICAgICAgICAgICAgaWYgKExvb2t1cEVycm9yTWVzc2FnZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUuZ2V0KExvb2t1cEVycm9yTWVzc2FnZXNba2V5XSkuc3Vic2NyaWJlKChyZXM6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRFcnJvck1lc3NhZ2VzW2tleV0gPSByZXM7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJhbnNsYXRlZEVycm9yTWVzc2FnZXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0ZXBTZWxlY3RlZChldmVudDogYW55KSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFN0ZXAgPSBldmVudC5zdGVwO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0ZWRTdGVwLmV2ZW50VHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIEV2ZW50T3JpZ2luLkJBTEFOQ0VfRU5UUllfQ09OVFJPTDpcclxuICAgICAgICAgICAgY2FzZSBFdmVudE9yaWdpbi5USUNLRVQ6XHJcbiAgICAgICAgICAgIGNhc2UgRXZlbnRPcmlnaW4uSU5WT0lDRTpcclxuICAgICAgICAgICAgY2FzZSBFdmVudE9yaWdpbi5DUkVBVEVfSU5WT0lDRTpcclxuICAgICAgICAgICAgICAgIHRoaXMuc2lkZWJhckxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyYW0gPSBKU09OLnBhcnNlKHRoaXMuc2VsZWN0ZWRTdGVwLml0ZW0uaW5wdXQpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb2R1Y2VySW52b2ljZUlkID0gcGFyYW0ucHJvZHVjZXJJbnZvaWNlSWRzID8gcGFyYW0ucHJvZHVjZXJJbnZvaWNlSWRzWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgOiBwYXJhbS5pbnZvaWNlLmdlbmVyYWxEYXRhLnRyYW5zYWN0aW9uYWxJZDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50Q29udHJvbEJvYXJkU2VydmljZS5wcm9kdWNlckludm9pY2VTZXJ2aWNlLmdldChwcm9kdWNlckludm9pY2VJZClcclxuICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcclxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2R1Y2VySW52b2ljZSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaWRlYmFyTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaWRlYmFyTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRXZlbnRPcmlnaW4uRklYQVRJT046XHJcbiAgICAgICAgICAgIGNhc2UgRXZlbnRPcmlnaW4uQ0FOQ0VMX0ZJWEFUSU9OOlxyXG4gICAgICAgICAgICBjYXNlIEV2ZW50T3JpZ2luLkNIQU5HRV9SRVFVRVNUOlxyXG4gICAgICAgICAgICBjYXNlIEV2ZW50T3JpZ2luLlRSQU5TRkVSOlxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNob3dSZXByb2Nlc3NCdXR0b24gPSBldmVudC5zdGVwLnN0YXRlID09PSBTdGVwU3RhdGUuV2FybmluZztcclxuICAgICAgICB0aGlzLnNpZGViYXJUaXRsZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2Fncm8uYW5ndWxhcl9jb21wb25lbnRzLmV2ZW50X3NpZGViYXJfdGl0bGUnLCB7IGV2ZW50OiBldmVudC5zdGVwLmxhYmVsIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnNob3dTaWRlYmFyID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVwcm9jZXNzRXZlbnQoKSB7XHJcbiAgICAgICAgY29uc3QgcmVwcm9jZXNzRXZlbnRPYmo6IFJlcHJvY2Vzc0ZhaWxlZEV2ZW50ID0ge1xyXG4gICAgICAgICAgICBldmVudENvbnRyb2xJdGVtSWQ6IHRoaXMuc2VsZWN0ZWRTdGVwLml0ZW0uaWRcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZXZlbnRDb250cm9sQm9hcmRTZXJ2aWNlLmV2ZW50Q29udHJvbEl0ZW1TZXJ2aWNlLnJlcHJvY2Vzc0ZhaWxlZEV2ZW50KHJlcHJvY2Vzc0V2ZW50T2JqKVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZE1lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgICAgICAgJ2luZm8nLFxyXG4gICAgICAgICAgICAgICAgICAgICdhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5yZXByb2Nlc3NpbmdfZXZlbnRfbWVzc2FnZV90aXRsZScsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2Fncm8uYW5ndWxhcl9jb21wb25lbnRzLnJlcHJvY2Vzc2luZ19ldmVudF9tZXNzYWdlX2Rlc2NyaXB0aW9uJyk7XHJcbiAgICAgICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkTWVzc2FnZShcclxuICAgICAgICAgICAgICAgICAgICAnZXJyb3InLFxyXG4gICAgICAgICAgICAgICAgICAgICdhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5lcnJvcl9yZXByb2Nlc3NpbmdfZXZlbnRfbWVzc2FnZV90aXRsZScsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2Fncm8uYW5ndWxhcl9jb21wb25lbnRzLmVycm9yX3JlcHJvY2Vzc2luZ19ldmVudF9tZXNzYWdlX2Rlc2NyaXB0aW9uJyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWRkTWVzc2FnZShzZXZlcml0eTogc3RyaW5nLCBzdW1tYXJ5OiBzdHJpbmcsIGRldGFpbDogc3RyaW5nLCBsaWZlID0gQUdST19OVU1CRVJTLkZJVkVfU0VDT05EUykge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgICAgc2V2ZXJpdHksXHJcbiAgICAgICAgICAgIHN1bW1hcnk6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoc3VtbWFyeSksXHJcbiAgICAgICAgICAgIGRldGFpbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChkZXRhaWwpLFxyXG4gICAgICAgICAgICBsaWZlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9wZW5Nb2RhbCgpIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlNb2RhbCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgYXN5bmMgb3BlbkNhbmNlbE1vZGFsKCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuY2FuY2VsRXZlbnREaWFsb2dDb25maWcuYmVmb3JlT3Blbj8uKCk7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oQ2FuY2VsRXZlbnREaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgaGVhZGVyOiB0aGlzLmNhbmNlbEV2ZW50RGlhbG9nQ29uZmlnPy5oZWFkZXIsXHJcbiAgICAgICAgICAgIGNvbnRlbnRTdHlsZTogeyBoZWlnaHQ6IFwiMTAwJVwiIH0sXHJcbiAgICAgICAgICAgIGNsb3NhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICBjbG9zZU9uRXNjYXBlOiBmYWxzZSxcclxuICAgICAgICAgICAgZGF0YTogeyBjYW5jZWxFdmVudERpYWxvZ0NvbmZpZzogdGhpcy5jYW5jZWxFdmVudERpYWxvZ0NvbmZpZyB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb25maXJtTW9kYWwoKSB7XHJcbiAgICAgICAgdGhpcy5yZXByb2Nlc3NFdmVudCgpO1xyXG4gICAgICAgIHRoaXMuZGlzcGxheU1vZGFsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zaG93U2lkZWJhciA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYW5jZWxNb2RhbCgpIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlNb2RhbCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbG9zZVNpZGViYXIoKSB7XHJcbiAgICAgICAgdGhpcy5zaG93U2lkZWJhciA9IGZhbHNlO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
582
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtY29udHJvbC1ib2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWFncm9uZWdvY2lvL2FuZ3VsYXItY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvZXZlbnQtY29udHJvbC1ib2FyZC9ldmVudC1jb250cm9sLWJvYXJkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxRQUFRLE1BQU0sNEJBQTRCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBZ0MsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUMvSCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFRLFNBQVMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hILE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFNUQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDbEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztB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QUFxQjtZQUMvQixtemxCQUFtRDtZQUVuRCxTQUFTLEVBQUU7Z0JBQ1AsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7YUFDNUM7O1NBQ0osQ0FBQztPQUNXLDBCQUEwQixDQTZpQnRDO0lBQUQsaUNBQUM7Q0FBQSxBQTdpQkQsSUE2aUJDO1NBN2lCWSwwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWdpc3RlckxvY2FsZURhdGEgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCBsb2NhbGVQdCBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2xvY2FsZXMvcHRcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBMT0NBTEVfSUQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IEJhZGdlQ29sb3JzLCBCdXR0b25Qcmlvcml0eSwgRmllbGRUeXBlLCBGb3JtRmllbGQsIFN0ZXAsIFN0ZXBTdGF0ZSB9IGZyb20gXCJAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzXCI7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSBcInByaW1lbmdcIjtcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBBR1JPX05VTUJFUlMgfSBmcm9tIFwiLi4vLi4vZW51bXMvYWdyby1udW1iZXJzLmVudW1cIjtcclxuaW1wb3J0IHsgTGliVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2xpYi10cmFuc2xhdGlvbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFdlYnNvY2tldFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvd2Vic29ja2V0XCI7XHJcbmltcG9ydCB7IENhbmNlbEV2ZW50RGlhbG9nQ29uZmlnIH0gZnJvbSBcIi4uL2NhbmNlbC1ldmVudC1kaWFsb2cvY2FuY2VsLWV2ZW50LWRpYWxvZy1jb25maWdcIjtcclxuaW1wb3J0IHsgQ2FuY2VsRXZlbnREaWFsb2dDb21wb25lbnQgfSBmcm9tIFwiLi4vY2FuY2VsLWV2ZW50LWRpYWxvZy9jYW5jZWwtZXZlbnQtZGlhbG9nLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBldmVudEl0ZW0sIGlucHV0RmllbGRzUGF0aCB9IGZyb20gXCIuL2NvbW1vbi9ldmVudC1jb250cm9sLWNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBFdmVudE9yaWdpbiB9IGZyb20gXCIuL2NvbW1vbi9ldmVudC1vcmlnaW5cIjtcclxuaW1wb3J0IHsgRXZlbnRTdGF0dXMgfSBmcm9tIFwiLi9jb21tb24vZXZlbnQtc3RhdHVzXCI7XHJcbmltcG9ydCB7IElucHV0RmllbGRzIH0gZnJvbSBcIi4vY29tbW9uL2lucHV0LWZpZWxkc1wiO1xyXG5pbXBvcnQgeyBpbnZvaWNlVHlwZVRyYW5zbGF0ZSB9IGZyb20gXCIuL2NvbW1vbi9pbnB1dC1maWVsZHMtdHJhbnNsYXRlXCI7XHJcbmltcG9ydCB7IExvb2t1cEVycm9yTWVzc2FnZXMgfSBmcm9tIFwiLi9jb21tb24vbG9va3VwLWVycm9yLW1lc3NhZ2UuY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IEV2ZW50Q29udHJvbEJvYXJkU2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2UvZXZlbnQtY29udHJvbC1ib2FyZC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEV2ZW50Q29udHJvbEl0ZW0gfSBmcm9tIFwiLi9zZXJ2aWNlL2V2ZW50LWNvbnRyb2wtaXRlbS9ldmVudC1jb250cm9sLWl0ZW1cIjtcclxuaW1wb3J0IHsgUmVwcm9jZXNzRmFpbGVkRXZlbnQgfSBmcm9tIFwiLi9zZXJ2aWNlL2V2ZW50LWNvbnRyb2wtaXRlbS9ldmVudC1jb250cm9sLWl0ZW0uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBFdmVudENvbnRyb2wgfSBmcm9tIFwiLi9zZXJ2aWNlL2V2ZW50LWNvbnRyb2wvZXZlbnQtY29udHJvbFwiO1xyXG5pbXBvcnQgeyBMaXN0RXZlbnRDb250cm9sV2l0aEZpbHRlcnNJbnB1dER0byB9IGZyb20gXCIuL3NlcnZpY2UvZXZlbnQtY29udHJvbC9ldmVudC1jb250cm9sLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUGFnaW5hdG9yU3RvcmFnZVNlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlL3BhZ2luYXRvci1zdG9yYWdlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUHJvZHVjZXJJbnZvaWNlRHRvIH0gZnJvbSBcIi4vc2VydmljZS9wcm9kdWNlci1pbnZvaWNlL3Byb2R1Y2VyLWludm9pY2UtZHRvXCI7XHJcbmltcG9ydCB7IEUwNzBFbXAgfSBmcm9tIFwiLi9zZXJ2aWNlL2UwNzBlbXAvZTA3MGVtcFwiO1xyXG5pbXBvcnQgeyBFMDcwRmlsIH0gZnJvbSBcIi4vc2VydmljZS9lMDcwZmlsL2UwNzBmaWxcIjtcclxuY29uc3QgbW9tZW50ID0gcmVxdWlyZShcIm1vbWVudFwiKTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdldmVudC1jb250cm9sLWJvYXJkJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9ldmVudC1jb250cm9sLWJvYXJkLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2V2ZW50LWNvbnRyb2wtYm9hcmQuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHsgcHJvdmlkZTogTE9DQUxFX0lELCB1c2VWYWx1ZTogJ3B0LUJSJyB9XHJcbiAgICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFdmVudENvbnRyb2xCb2FyZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xyXG5cclxuICAgIEBJbnB1dCgpIGNvbXBhbnkhOiBFMDcwRW1wO1xyXG4gICAgQElucHV0KCkgYnJhbmNoITogRTA3MEZpbDtcclxuICAgIEBJbnB1dCgpIGNvbnRyb2xDb2RlITogc3RyaW5nW107XHJcbiAgICBASW5wdXQoKSBldmVudE9yaWdpbiE6IEV2ZW50T3JpZ2luO1xyXG4gICAgQElucHV0KCkgZXZlbnRTdGF0dXMhOiBFdmVudFN0YXR1cztcclxuICAgIEBJbnB1dCgpIGV4dGVybmFsSWQhOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBjcmVhdGVkRGF0ZSE6IERhdGU7XHJcbiAgICBASW5wdXQoKSBzdGFuZGFsb25lITogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHNob3dDYW5jZWxCdXR0b24hOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgY2FuY2VsRXZlbnREaWFsb2dDb25maWchOiBDYW5jZWxFdmVudERpYWxvZ0NvbmZpZztcclxuICAgIEBPdXRwdXQoKSBwcm9jZXNzZWRFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxyXG5cclxuICAgIHB1YmxpYyBwcm9kdWNlckludm9pY2UhOiBhbnk7XHJcblxyXG4gICAgcHVibGljIHN0ZXBzOiBTdGVwW10gPSBbXTtcclxuICAgIHB1YmxpYyBzZWxlY3RlZFN0ZXA6IGFueTtcclxuICAgIHB1YmxpYyBldmVudElkITogJyc7XHJcbiAgICBwdWJsaWMgc2hvd1NpZGViYXIgPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzaG93UmVwcm9jZXNzQnV0dG9uID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgc2lkZWJhclRpdGxlITogc3RyaW5nO1xyXG4gICAgcHVibGljIHNpZGViYXJMb2FkaW5nITogYm9vbGVhbjtcclxuXHJcbiAgICBwdWJsaWMgZmlsdGVyRm9ybUdyb3VwITogRm9ybUdyb3VwO1xyXG4gICAgcHVibGljIGZpbHRlckZpZWxkcyE6IEZvcm1GaWVsZFtdO1xyXG5cclxuICAgIHB1YmxpYyBncmlkRGF0YSE6IGFueVtdO1xyXG4gICAgcHVibGljIGdyaWREYXRhUmVzb2x2ZWQhOiBhbnlbXTtcclxuICAgIHB1YmxpYyBncmlkQ29sdW1ucyE6IGFueVtdO1xyXG4gICAgcHVibGljIGdyaWRUb3RhbFJlY29yZHMgPSBBR1JPX05VTUJFUlMuWkVSTztcclxuICAgIHB1YmxpYyBncmlkTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgcHVibGljIGRpc3BsYXlNb2RhbCA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBCdXR0b25Qcmlvcml0eSA9IEJ1dHRvblByaW9yaXR5O1xyXG4gICAgcHVibGljIEJhZGdlQ29sb3JzID0gQmFkZ2VDb2xvcnM7XHJcblxyXG4gICAgcHVibGljIHBlcm1pc3Npb25zOiBhbnkgPSB7fTtcclxuICAgIHB1YmxpYyBsb2NhbGVDb25maWc6IGFueSA9IHt9O1xyXG5cclxuICAgIHB1YmxpYyBjdXJyZW50TGlzdFBhcmFtczogYW55ID0geyBwYWdlOiBBR1JPX05VTUJFUlMuWkVSTywgc2l6ZTogQUdST19OVU1CRVJTLlRFTiwgc29ydDogW10sIGZpbHRlckRhdGE6IHt9IH07XHJcblxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRJdGVtID0gZXZlbnRJdGVtO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbnB1dEZpZWxkc1BhdGggPSBpbnB1dEZpZWxkc1BhdGg7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGludm9pY2VUeXBlVHJhbnNsYXRlID0gaW52b2ljZVR5cGVUcmFuc2xhdGU7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGU6IExpYlRyYW5zbGF0aW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHdlYnNvY2tldFNlcnZpY2U6IFdlYnNvY2tldFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBldmVudENvbnRyb2xCb2FyZFNlcnZpY2U6IEV2ZW50Q29udHJvbEJvYXJkU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHBhZ2luYXRvclN0b3JhZ2VTZXJ2aWNlOiBQYWdpbmF0b3JTdG9yYWdlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICApIHtcclxuICAgICAgICByZWdpc3RlckxvY2FsZURhdGEobG9jYWxlUHQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmdyaWRDb2x1bW5zID0gdGhpcy5zZXRHcmlkQ29sdW1ucygpO1xyXG4gICAgICAgIHRoaXMuY2FsbFdlYnNvY2tldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZpbHRlckZvcm1Hcm91cCkge1xyXG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVGb3JtR3JvdXAoKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRGb3JtRmllbGRzKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUNvbXBhbnlBbmRCcmFuY2hGb3JtRmllbGRzKGNoYW5nZXMpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRXZlbnRPcmlnaW5BbmRDb250cm9sQ29kZUZvcm1GaWVsZHMoY2hhbmdlcyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVFdmVudFN0YXR1c0FuZENyZWF0ZWREYXRlRm9ybUZpZWxkcyhjaGFuZ2VzKTtcclxuICAgICAgICB0aGlzLm9uU2VhcmNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVDb21wYW55QW5kQnJhbmNoRm9ybUZpZWxkcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAgICAgaWYgKGNoYW5nZXMuY29tcGFueSAmJiBjaGFuZ2VzLmNvbXBhbnkuY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzLmNvbXBhbnkucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlckZvcm1Hcm91cC5nZXQoJ2NvbXBhbnknKT8uc2V0VmFsdWUoY2hhbmdlcy5jb21wYW55LmN1cnJlbnRWYWx1ZSA/PyBudWxsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjaGFuZ2VzLmJyYW5jaCAmJiBjaGFuZ2VzLmJyYW5jaC5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXMuYnJhbmNoLnByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJGb3JtR3JvdXAuZ2V0KCdicmFuY2gnKT8uc2V0VmFsdWUoY2hhbmdlcy5icmFuY2guY3VycmVudFZhbHVlID8/IG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUV2ZW50T3JpZ2luQW5kQ29udHJvbENvZGVGb3JtRmllbGRzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgICAgICBpZiAoY2hhbmdlcy5ldmVudE9yaWdpbiAmJiBjaGFuZ2VzLmV2ZW50T3JpZ2luLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlcy5ldmVudE9yaWdpbi5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldCgnZXZlbnRPcmlnaW4nKT8uc2V0VmFsdWUoY2hhbmdlcy5ldmVudE9yaWdpbi5jdXJyZW50VmFsdWUgPz8gbnVsbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2hhbmdlcy5jb250cm9sQ29kZSAmJiBjaGFuZ2VzLmNvbnRyb2xDb2RlLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlcy5jb250cm9sQ29kZS5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldCgnY29udHJvbENvZGUnKT8uc2V0VmFsdWUoY2hhbmdlcy5jb250cm9sQ29kZS5jdXJyZW50VmFsdWUgPz8gbnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlRXZlbnRTdGF0dXNBbmRDcmVhdGVkRGF0ZUZvcm1GaWVsZHMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgICAgIGlmIChjaGFuZ2VzLmV2ZW50U3RhdHVzICYmIGNoYW5nZXMuZXZlbnRTdGF0dXMuY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzLmV2ZW50U3RhdHVzLnByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJGb3JtR3JvdXAuZ2V0KCdzdGF0dXMnKT8uc2V0VmFsdWUoY2hhbmdlcy5ldmVudFN0YXR1cy5jdXJyZW50VmFsdWUgPz8gbnVsbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2hhbmdlcy5jcmVhdGVkRGF0ZSAmJiBjaGFuZ2VzLmNyZWF0ZWREYXRlLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlcy5jcmVhdGVkRGF0ZS5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldCgnY3JlYXRlZERhdGUnKT8uc2V0VmFsdWUoY2hhbmdlcy5jcmVhdGVkRGF0ZS5jdXJyZW50VmFsdWUgPz8gbnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZUZvcm1Hcm91cCgpIHtcclxuICAgICAgICB0aGlzLmZpbHRlckZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgICAgICBjb21wYW55OiBbeyB2YWx1ZTogdGhpcy5jb21wYW55ID8/IG51bGwsIGRpc2FibGVkOiBmYWxzZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcclxuICAgICAgICAgICAgYnJhbmNoOiBbeyB2YWx1ZTogdGhpcy5icmFuY2ggPz8gbnVsbCwgZGlzYWJsZWQ6IGZhbHNlIH0sIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxyXG4gICAgICAgICAgICBjb250cm9sQ29kZTogW3sgdmFsdWU6IHRoaXMuY29udHJvbENvZGUgPz8gbnVsbCwgZGlzYWJsZWQ6IGZhbHNlIH0sIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxyXG4gICAgICAgICAgICBleHRlcm5hbElkOiBbeyB2YWx1ZTogdGhpcy5leHRlcm5hbElkID8/IG51bGwsIGRpc2FibGVkOiBmYWxzZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcclxuICAgICAgICAgICAgZXZlbnRPcmlnaW46IFt7IHZhbHVlOiB0aGlzLmV2ZW50T3JpZ2luID8/IG51bGwsIGRpc2FibGVkOiBmYWxzZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcclxuICAgICAgICAgICAgc3RhdHVzOiBbeyB2YWx1ZTogdGhpcy5ldmVudFN0YXR1cyA/PyBudWxsLCBkaXNhYmxlZDogZmFsc2UgfSwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXHJcbiAgICAgICAgICAgIGNyZWF0ZWREYXRlOiBbeyB2YWx1ZTogdGhpcy5jcmVhdGVkRGF0ZSA/PyBudWxsLCBkaXNhYmxlZDogZmFsc2UgfSwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRGb3JtRmllbGRzKCkge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyRmllbGRzID0gW1xyXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29tcGFueVwiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkNoaXBzLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcImJyYW5jaFwiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkNoaXBzLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvbnRyb2xDb2RlXCIsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuQ2hpcHMsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiZXh0ZXJuYWxJZFwiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJldmVudE9yaWdpblwiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkVudW0sXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwic3RhdHVzXCIsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuRW51bSxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJjcmVhdGVkRGF0ZVwiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkRhdGUsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRHcmlkQ29sdW1ucygpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7IGZpZWxkOiAnY29tcGFueScsIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLmNvbXBhbnlcIikgfSxcclxuICAgICAgICAgICAgeyBmaWVsZDogJ2JyYW5jaCcsIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLmxhYmVsX2JyYW5jaFwiKSB9LFxyXG4gICAgICAgICAgICB7IGZpZWxkOiAnZXZlbnRPcmlnaW4nLCBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5ldmVudF9vcmlnaW5fbGFiZWxcIikgfSxcclxuICAgICAgICAgICAgeyBmaWVsZDogJ2NvbnRyb2xDb2RlJywgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuY29udHJvbF9jb2RlXCIpIH0sXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcclxuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcclxuICAgICAgICB0aGlzLndlYnNvY2tldFNlcnZpY2UuZGlzY29ubmVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYWxsV2Vic29ja2V0KCkge1xyXG4gICAgICAgIHRoaXMud2Vic29ja2V0U2VydmljZVxyXG4gICAgICAgICAgICAub25FdmVudDxhbnk+KHtcclxuICAgICAgICAgICAgICAgIGRvbWFpbjogJ2Fncm8nLFxyXG4gICAgICAgICAgICAgICAgc2VydmljZTogJ2Fncm9fZXZlbnRzJyxcclxuICAgICAgICAgICAgICAgIHByaW1pdGl2ZTogXCJwcm9jZXNzZWRFdmVudFwiLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgobWVzc2FnZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuYWxJZCA9IG1lc3NhZ2U/LmRhdGE/LmV4dGVybmFsSWQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJEYXRhID0gdGhpcy5maWx0ZXJGb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcclxuICAgICAgICAgICAgICAgIGlmICghZXh0ZXJuYWxJZCBcclxuICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLmV4dGVybmFsSWQgPT09IGV4dGVybmFsSWRcclxuICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLmdyaWREYXRhPy5zb21lKChpdGVtOiBhbnkpID0+IGl0ZW0uZXh0ZXJuYWxJZCA9PT0gZXh0ZXJuYWxJZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUdyaWQoeyBmaWx0ZXJEYXRhIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc2VkRXZlbnQuZW1pdChtZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMud2Vic29ja2V0U2VydmljZVxyXG4gICAgICAgICAgICAub25FdmVudDxhbnk+KHtcclxuICAgICAgICAgICAgICAgIGRvbWFpbjogJ3BsYXRmb3JtJyxcclxuICAgICAgICAgICAgICAgIHNlcnZpY2U6ICdub3RpZmljYXRpb25zJyxcclxuICAgICAgICAgICAgICAgIHByaW1pdGl2ZTogXCJ1c2VyTm90aWZpZWRcIixcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUdyaWQoeyBmaWx0ZXJEYXRhIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25TZWFyY2goKSB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XHJcbiAgICAgICAgdGhpcy5ncmlkTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yZXNldEdyaWQoeyBmaWx0ZXJEYXRhIH0pO1xyXG4gICAgICAgIHRoaXMudXBkYXRlR3JpZCh7IGZpbHRlckRhdGEgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlc2V0R3JpZChsaXN0UGFyYW1zPzogYW55KSB7XHJcbiAgICAgICAgaWYgKGxpc3RQYXJhbXMpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50TGlzdFBhcmFtcyA9IHsgLi4udGhpcy5jdXJyZW50TGlzdFBhcmFtcywgLi4ubGlzdFBhcmFtcyB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zLnBhZ2UgPSBBR1JPX05VTUJFUlMuWkVSTztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUdyaWQobGlzdFBhcmFtczogYW55ID0ge30pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zID0geyAuLi50aGlzLmN1cnJlbnRMaXN0UGFyYW1zLCAuLi5saXN0UGFyYW1zIH07XHJcbiAgICAgICAgY29uc3QgeyBwYWdlLCBzaXplIH0gPSB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zO1xyXG4gICAgICAgIGNvbnN0IG9yZGVyID0gdGhpcy5nZXRTb3J0ZWRGaWVsZHMoKTtcclxuICAgICAgICBjb25zdCBpbnB1dCA9IHsgLi4udGhpcy5nZXRJbnB1dCgpLCBwYWdlLCBzaXplLCBvcmRlciB9O1xyXG5cclxuICAgICAgICB0aGlzLmV2ZW50Q29udHJvbEJvYXJkU2VydmljZS5ldmVudENvbnRyb2xTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5nZXRMaXN0RXZlbnRDb250cm9sV2l0aEZpbHRlcnMoaW5wdXQpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXHJcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkVG90YWxSZWNvcmRzID0gbGlzdC50b3RhbEVsZW1lbnRzO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmdyaWREYXRhIHx8IHRoaXMuZ3JpZERhdGEubGVuZ3RoIDw9IEFHUk9fTlVNQkVSUy5aRVJPKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0V2ZW50Q29udHJvbEl0ZW1zKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcHJvY2Vzc0V2ZW50Q29udHJvbEl0ZW1zKCkge1xyXG4gICAgICAgIHRoaXMuZ3JpZERhdGEuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc29ydGVkSXRlbXMgPSBpdGVtLmV2ZW50Q29udHJvbEl0ZW0uc29ydCgoYTogRXZlbnRDb250cm9sSXRlbSwgYjogRXZlbnRDb250cm9sSXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuc2VxdWVuY2UgLSBiLnNlcXVlbmNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3Qgc3RlcHMgPSBzb3J0ZWRJdGVtcy5tYXAoKGRldGFpbDogRXZlbnRDb250cm9sSXRlbSwgaW5kZXg6IG51bWJlcikgPT4gdGhpcy5jcmVhdGVTdGVwKGRldGFpbCwgaXRlbSwgaW5kZXgpKTtcclxuICAgICAgICAgICAgY29uc3QgYWN0aXZlSW5kZXggPSB0aGlzLmNhbGN1bGF0ZUFjdGl2ZUluZGV4KHNvcnRlZEl0ZW1zKTtcclxuICAgICAgICAgICAgaXRlbS5ncm91cHMgPSBbeyBzdGVwcywgYWN0aXZlSW5kZXggfV07XHJcbiAgICAgICAgICAgIGl0ZW0uYWN0aXZlSW5kZXggPSBhY3RpdmVJbmRleDtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmdyaWREYXRhUmVzb2x2ZWQgPSB0aGlzLmdyaWREYXRhO1xyXG4gICAgICAgIHRoaXMuZ3JpZExvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNhbGN1bGF0ZUFjdGl2ZUluZGV4KGRldGFpbHM6IEV2ZW50Q29udHJvbEl0ZW1bXSk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgbGFzdEFjdGl2ZSA9IGRldGFpbHMucmVkdWNlKChsYXN0SW5kZXgsIGRldGFpbCwgY3VycmVudEluZGV4KSA9PlxyXG4gICAgICAgICAgICBkZXRhaWwuc3RhdHVzICE9PSBFdmVudFN0YXR1cy5QRU5ESU5HID8gY3VycmVudEluZGV4IDogbGFzdEluZGV4LCAtMSk7XHJcbiAgICAgICAgaWYgKGxhc3RBY3RpdmUgIT09IC0xICYmIGRldGFpbHNbbGFzdEFjdGl2ZV0uc3RhdHVzID09PSBFdmVudFN0YXR1cy5TVUNDRVNTKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBsYXN0QWN0aXZlICsgMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGxhc3RBY3RpdmU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVTdGVwKGRldGFpbDogRXZlbnRDb250cm9sSXRlbSwgaXRlbTogRXZlbnRDb250cm9sLCBkZXRhaWxJbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaXRlbTogZGV0YWlsLFxyXG4gICAgICAgICAgICBjb250cm9sQ29kZTogaXRlbS5jb250cm9sQ29kZSxcclxuICAgICAgICAgICAgZXZlbnRUeXBlOiBpdGVtLmV2ZW50T3JpZ2luLFxyXG4gICAgICAgICAgICBsYWJlbDogdGhpcy5nZXRFdmVudExhYmVsKGRldGFpbCksXHJcbiAgICAgICAgICAgIHN1YkxhYmVsOiB0aGlzLmdldEV2ZW50U3ViTGFiZWwoZGV0YWlsKSxcclxuICAgICAgICAgICAgZGlzYWJsZWQ6IGRldGFpbC5zdGF0dXMgPT09IEV2ZW50U3RhdHVzLlBFTkRJTkcgJiYgZGV0YWlsSW5kZXggIT09IHRoaXMuY2FsY3VsYXRlQWN0aXZlSW5kZXgoaXRlbS5ldmVudENvbnRyb2xJdGVtKSxcclxuICAgICAgICAgICAgdG9vbHRpcDogdGhpcy5nZXRFdmVudExhYmVsKGRldGFpbCksXHJcbiAgICAgICAgICAgIHN0YXRlOiB0aGlzLmRldGVybWluZVN0ZXBTdGF0ZShkZXRhaWwpXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRldGVybWluZVN0ZXBTdGF0ZShkZXRhaWw6IHsgc3RhdHVzOiBFdmVudFN0YXR1cyB9KTogU3RlcFN0YXRlIHtcclxuICAgICAgICBpZiAoZGV0YWlsLnN0YXR1cyA9PT0gRXZlbnRTdGF0dXMuU1VDQ0VTUykge1xyXG4gICAgICAgICAgICByZXR1cm4gU3RlcFN0YXRlLlN1Y2Nlc3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkZXRhaWwuc3RhdHVzID09PSBFdmVudFN0YXR1cy5GQUlMRUQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFN0ZXBTdGF0ZS5XYXJuaW5nO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gU3RlcFN0YXRlLkRlZmF1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRFdmVudExhYmVsKGRldGFpbDogYW55KTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBldmVudExhYmVsID0gdGhpcy5ldmVudEl0ZW0uZmluZChlID0+IGUudmFsdWUgPT09IGRldGFpbC5ldmVudE9wZXJhdGlvbik/LmxhYmVsO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdldmVudExhYmVsJywgZXZlbnRMYWJlbCwgZGV0YWlsLmV2ZW50T3BlcmF0aW9uKTtcclxuICAgICAgICBpZiAoZXZlbnRMYWJlbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudChldmVudExhYmVsKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBsb2NhbExhYmVsID0gdGhpcy5nZXRFdmVudE9wZXJhdGlvblN1YkxvY2FsTGFiZWwoZGV0YWlsKTtcclxuICAgICAgICBpZiAobG9jYWxMYWJlbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbG9jYWxMYWJlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRldGFpbC5ldmVudE9wZXJhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEV2ZW50T3BlcmF0aW9uU3ViTG9jYWxMYWJlbChkZXRhaWw6IEV2ZW50Q29udHJvbEl0ZW0pOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICBjb25zdCB0cmFubHNhdGlvbktleSA9ICdhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy4nICsgZGV0YWlsLmV2ZW50T3BlcmF0aW9uO1xyXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCh0cmFubHNhdGlvbktleSk7XHJcbiAgICAgICAgaWYgKHRyYW5zbGF0aW9uICE9PSB0cmFubHNhdGlvbktleSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJhbnNsYXRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0RXZlbnRTdWJMYWJlbChkZXRhaWw6IEV2ZW50Q29udHJvbEl0ZW0pOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuZXZlbnRJdGVtLmZpbmQoZSA9PiBlLnZhbHVlID09PSBkZXRhaWwuZXZlbnRPcGVyYXRpb24pPy5zdWJMYWJlbEZpZWxkO1xyXG4gICAgICAgIGlmICghZmllbGQgfHwgIWRldGFpbC5pbnB1dCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmlucHV0RmllbGRzUGF0aC5maW5kKGYgPT4gZi5maWVsZCA9PT0gZmllbGQgJiYgKCFmLm9wZXJhdGlvbiB8fCBmLm9wZXJhdGlvbiA9PT0gZGV0YWlsLmV2ZW50T3BlcmF0aW9uKSk/LnBhdGg7XHJcbiAgICAgICAgdmFyIGZ1bGxQYXRoID0gcGF0aCA/IGAke3BhdGh9LiR7ZmllbGR9YCA6IGZpZWxkO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZUZpZWxkSnNvbkZyb21QYXRoKGRldGFpbC5pbnB1dCwgZnVsbFBhdGgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdEZpZWxkVmFsdWUoZmllbGQsIHZhbHVlKVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VmFsdWVGaWVsZEpzb25Gcm9tUGF0aChqc29uOiBzdHJpbmcsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcGFyc2VkSnNvbiA9IEpTT04ucGFyc2UoanNvbik7XHJcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBwYXRoLnNwbGl0KCcuJyk7XHJcbiAgICAgICAgICAgIHJldHVybiBrZXlzLnJlZHVjZSgoYWNjLCBrZXkpID0+IGFjYyAmJiBhY2Nba2V5XSwgcGFyc2VkSnNvbik7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJybyBhbyBhY2Vzc2FyIG8gb2JqZXRvIHBlbG8gcGF0aDogJyArIHBhdGgsIGVycm9yKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZm9ybWF0RmllbGRWYWx1ZShmaWVsZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3dpdGNoIChmaWVsZCkge1xyXG4gICAgICAgICAgICBjYXNlIElucHV0RmllbGRzLkFHUk9fSU5WT0lDRV9UWVBFOlxyXG4gICAgICAgICAgICBjYXNlIElucHV0RmllbGRzLklOVk9JQ0VfVFlQRTpcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5pbnZvaWNlVHlwZVRyYW5zbGF0ZS5maW5kKGUgPT4gZS52YWx1ZSA9PT0gdmFsdWUpPy5sYWJlbDtcclxuICAgICAgICAgICAgICAgIHJldHVybiBsYWJlbCA/IHRoaXMudHJhbnNsYXRlLmluc3RhbnQobGFiZWwpIDogdmFsdWVcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRTb3J0ZWRGaWVsZHMoKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgb3JkZXIgPSAnJztcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50TGlzdFBhcmFtcy5zb3J0Py5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIG9yZGVyID0gdGhpcy5jdXJyZW50TGlzdFBhcmFtcy5zb3J0Lm1hcCgoc29ydEl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMuZ2V0RmllbGROYW1lRm9yU29ydFJlcXVlc3Qoc29ydEl0ZW0uZmllbGQpfSAke3NvcnRJdGVtLm9yZGVyID09PSBBR1JPX05VTUJFUlMuT05FID8gJ2FzYycgOiAnZGVzYyd9YDtcclxuICAgICAgICAgICAgfSkuam9pbignLCAnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhbmRhbG9uZSkge1xyXG4gICAgICAgICAgICBvcmRlciA9ICdjcmVhdGVkRGF0ZSBhc2MnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG9yZGVyID0gJ2xhc3RNb2RpZmllZERhdGUgZGVzYyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvcmRlcjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldElucHV0KCk6IExpc3RFdmVudENvbnRyb2xXaXRoRmlsdGVyc0lucHV0RHRvIHtcclxuICAgICAgICBjb25zdCB7IGZpbHRlckRhdGEgfSA9IHRoaXMuY3VycmVudExpc3RQYXJhbXM7XHJcbiAgICAgICAgY29uc3QgY29udHJvbENvZGUgPSBmaWx0ZXJEYXRhWydjb250cm9sQ29kZSddICYmIEFycmF5LmlzQXJyYXkoZmlsdGVyRGF0YVsnY29udHJvbENvZGUnXSkgPyBmaWx0ZXJEYXRhWydjb250cm9sQ29kZSddIDogbnVsbDtcclxuICAgICAgICBjb25zdCBmaWx0ZXIgPSB7XHJcbiAgICAgICAgICAgIGNvbXBhbnlJZDogZmlsdGVyRGF0YVsnY29tcGFueSddPy5pZCA/PyBudWxsLFxyXG4gICAgICAgICAgICBicmFuY2hJZDogZmlsdGVyRGF0YVsnYnJhbmNoJ10/LmlkID8/IG51bGwsXHJcbiAgICAgICAgICAgIGNvbnRyb2xDb2RlOiBjb250cm9sQ29kZSA/IGNvbnRyb2xDb2RlLm1hcCgoY29kZTogc3RyaW5nKSA9PiBwYXJzZUludChjb2RlKSkgOiBudWxsLFxyXG4gICAgICAgICAgICBleHRlcm5hbElkOiBmaWx0ZXJEYXRhWydleHRlcm5hbElkJ10gPz8gbnVsbCxcclxuICAgICAgICAgICAgZXZlbnRPcmlnaW46IGZpbHRlckRhdGFbJ2V2ZW50T3JpZ2luJ10gPz8gbnVsbCxcclxuICAgICAgICAgICAgZXZlbnRTdGF0dXM6IGZpbHRlckRhdGFbJ3N0YXR1cyddID8/IG51bGwsXHJcbiAgICAgICAgICAgIGNyZWF0ZWREYXRlU3RhcnQ6IGZpbHRlckRhdGFbJ2NyZWF0ZWREYXRlJ10gPyB0aGlzLmdldFN0YXJ0RGF0ZShmaWx0ZXJEYXRhWydjcmVhdGVkRGF0ZSddKSA6IG51bGwsXHJcbiAgICAgICAgICAgIGNyZWF0ZWREYXRlRW5kOiBmaWx0ZXJEYXRhWydjcmVhdGVkRGF0ZSddID8gdGhpcy5nZXRFbmREYXRlKGZpbHRlckRhdGFbJ2NyZWF0ZWREYXRlJ10pIDogbnVsbCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBmaWx0ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRGaWVsZE5hbWVGb3JTb3J0UmVxdWVzdChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHN3aXRjaCAobmFtZSkge1xyXG4gICAgICAgICAgICBjYXNlICdjb21wYW55JzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnY29tcGFueS5ub21FbXAnO1xyXG4gICAgICAgICAgICBjYXNlICdicmFuY2gnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdicmFuY2gubm9tRmlsJztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEVuZERhdGUodmFsdWU6IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgZW5kRGF0ZSA9IG1vbWVudCh2YWx1ZSkuZW5kT2YoJ2RheScpLmZvcm1hdChcIllZWVktTU0tRERUSEg6bW06c3NcIikgKyAnWic7XHJcbiAgICAgICAgcmV0dXJuIGVuZERhdGU7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldFN0YXJ0RGF0ZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBzdGFydERhdGUgPSBtb21lbnQodmFsdWUpLnN0YXJ0T2YoJ2RheScpLmZvcm1hdChcIllZWVktTU0tRERUSEg6bW06c3NcIikgKyAnWic7XHJcbiAgICAgICAgcmV0dXJuIHN0YXJ0RGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25HcmlkQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICBjb25zdCBzaXplID0gZXZlbnQ/LnJvd3M7XHJcbiAgICAgICAgY29uc3QgcGFnZSA9IGV2ZW50Py5maXJzdCAvIHNpemU7XHJcbiAgICAgICAgY29uc3Qgc29ydCA9IGV2ZW50Lm11bHRpU29ydE1ldGE7XHJcbiAgICAgICAgdGhpcy5ncmlkTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgaWYgKHNpemUgIT09IEFHUk9fTlVNQkVSUy5URU4gfHwgcGFnZSAhPT0gQUdST19OVU1CRVJTLlpFUk8gfHwgKHNvcnQgJiYgc29ydC5sZW5ndGggPiBBR1JPX05VTUJFUlMuWkVSTykpIHtcclxuICAgICAgICAgICAgdGhpcy5wYWdpbmF0b3JTdG9yYWdlU2VydmljZS5zdG9yZVBhZ2luYXRvcignRXZlbnRDb250cm9sQm9hcmRQYWdpbmF0b3InLCB7IHBhZ2UsIHNpemUsIHNvcnQgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVHcmlkKHsgcGFnZSwgc2l6ZSwgc29ydCB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UGFnZVNpemUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudExpc3RQYXJhbXMuc2l6ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Um93SW5kZXgoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudExpc3RQYXJhbXMucGFnZSAqIHRoaXMuY3VycmVudExpc3RQYXJhbXMuc2l6ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U29ydEZpZWxkKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50TGlzdFBhcmFtcy5zb3J0IHx8IHRoaXMuY3VycmVudExpc3RQYXJhbXMuc29ydC5sZW5ndGggPD0gQUdST19OVU1CRVJTLlpFUk8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZENvbHVtbnNbQUdST19OVU1CRVJTLlpFUk9dLmZpZWxkO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50TGlzdFBhcmFtcy5zb3J0W0FHUk9fTlVNQkVSUy5aRVJPXS5maWVsZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U29ydE9yZGVyKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50TGlzdFBhcmFtcy5zb3J0IHx8IHRoaXMuY3VycmVudExpc3RQYXJhbXMuc29ydC5sZW5ndGggPD0gQUdST19OVU1CRVJTLlpFUk8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIEFHUk9fTlVNQkVSUy5PTkU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50TGlzdFBhcmFtcy5zb3J0W0FHUk9fTlVNQkVSUy5aRVJPXS5vcmRlcjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RXJyb3JNZXNzYWdlcygpIHtcclxuICAgICAgICBjb25zdCB0cmFuc2xhdGVkRXJyb3JNZXNzYWdlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIExvb2t1cEVycm9yTWVzc2FnZXMpIHtcclxuICAgICAgICAgICAgaWYgKExvb2t1cEVycm9yTWVzc2FnZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUuZ2V0KExvb2t1cEVycm9yTWVzc2FnZXNba2V5XSkuc3Vic2NyaWJlKChyZXM6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRFcnJvck1lc3NhZ2VzW2tleV0gPSByZXM7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJhbnNsYXRlZEVycm9yTWVzc2FnZXM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UHJvZHVjZXJJbnZvaWNlSWRGcm9tUGFyYW1zKHBhcmFtOiBhbnkpIHtcclxuICAgICAgICBpZiAocGFyYW0/LnByb2R1Y2VySW52b2ljZUlkcyAmJiBwYXJhbT8ucHJvZHVjZXJJbnZvaWNlSWRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhcmFtPy5wcm9kdWNlckludm9pY2VJZHNbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGFyYW0/Lmludm9pY2U/LmdlbmVyYWxEYXRhPy50cmFuc2FjdGlvbmFsSWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhcmFtPy5pbnZvaWNlPy5nZW5lcmFsRGF0YT8udHJhbnNhY3Rpb25hbElkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHBhcmFtPy5wcm9kdWNlckludm9pY2VJZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyYW0/LnByb2R1Y2VySW52b2ljZUlkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHBhcmFtPy5leHRlcm5hbElkKSAge1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyYW0/LmV4dGVybmFsSWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGVwU2VsZWN0ZWQoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwID0gZXZlbnQuc3RlcDtcclxuXHJcbiAgICAgICAgc3dpdGNoICh0aGlzLnNlbGVjdGVkU3RlcC5ldmVudFR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBFdmVudE9yaWdpbi5CQUxBTkNFX0VOVFJZX0NPTlRST0w6XHJcbiAgICAgICAgICAgIGNhc2UgRXZlbnRPcmlnaW4uVElDS0VUOlxyXG4gICAgICAgICAgICBjYXNlIEV2ZW50T3JpZ2luLklOVk9JQ0U6XHJcbiAgICAgICAgICAgIGNhc2UgRXZlbnRPcmlnaW4uQ1JFQVRFX0lOVk9JQ0U6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNpZGViYXJMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJhbSA9IEpTT04ucGFyc2UodGhpcy5zZWxlY3RlZFN0ZXAuaXRlbS5pbnB1dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3BhcmFtJywgcGFyYW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2R1Y2VySW52b2ljZUlkID0gdGhpcy5nZXRQcm9kdWNlckludm9pY2VJZEZyb21QYXJhbXMocGFyYW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJvZHVjZXJJbnZvaWNlSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaWRlYmFyTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV2ZW50Q29udHJvbEJvYXJkU2VydmljZS5wcm9kdWNlckludm9pY2VTZXJ2aWNlLmxpc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5RmllbGRzOiBbJyonLCAncHJvZHVjZXJCYWxhbmNlRW50cnlDb250cm9sLionLCAncHJvZHVjZXJCYWxhbmNlRW50cnlDb250cm9sLnByb2R1Y2VyLionXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUXVlcnk6IGBpZCBlcSAnJHtwcm9kdWNlckludm9pY2VJZH0nYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogMSxcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjZXJJbnZvaWNlID0gcmVzdWx0Py5jb250ZW50c1swXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMucHJvZHVjZXJJbnZvaWNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2lkZWJhckxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaWRlYmFyTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEV2ZW50T3JpZ2luLkZJWEFUSU9OOlxyXG4gICAgICAgICAgICBjYXNlIEV2ZW50T3JpZ2luLkNBTkNFTF9GSVhBVElPTjpcclxuICAgICAgICAgICAgY2FzZSBFdmVudE9yaWdpbi5DSEFOR0VfUkVRVUVTVDpcclxuICAgICAgICAgICAgY2FzZSBFdmVudE9yaWdpbi5UUkFOU0ZFUjpcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zaG93UmVwcm9jZXNzQnV0dG9uID0gZXZlbnQuc3RlcC5zdGF0ZSA9PT0gU3RlcFN0YXRlLldhcm5pbmc7XHJcbiAgICAgICAgdGhpcy5zaWRlYmFyVGl0bGUgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5ldmVudF9zaWRlYmFyX3RpdGxlJywgeyBldmVudDogZXZlbnQuc3RlcC5sYWJlbCB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zaG93U2lkZWJhciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlcHJvY2Vzc0V2ZW50KCkge1xyXG4gICAgICAgIGNvbnN0IHJlcHJvY2Vzc0V2ZW50T2JqOiBSZXByb2Nlc3NGYWlsZWRFdmVudCA9IHtcclxuICAgICAgICAgICAgZXZlbnRDb250cm9sSXRlbUlkOiB0aGlzLnNlbGVjdGVkU3RlcC5pdGVtLmlkXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmV2ZW50Q29udHJvbEJvYXJkU2VydmljZS5ldmVudENvbnRyb2xJdGVtU2VydmljZS5yZXByb2Nlc3NGYWlsZWRFdmVudChyZXByb2Nlc3NFdmVudE9iailcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRNZXNzYWdlKFxyXG4gICAgICAgICAgICAgICAgICAgICdpbmZvJyxcclxuICAgICAgICAgICAgICAgICAgICAnYWdyby5hbmd1bGFyX2NvbXBvbmVudHMucmVwcm9jZXNzaW5nX2V2ZW50X21lc3NhZ2VfdGl0bGUnLFxyXG4gICAgICAgICAgICAgICAgICAgICdhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5yZXByb2Nlc3NpbmdfZXZlbnRfbWVzc2FnZV9kZXNjcmlwdGlvbicpO1xyXG4gICAgICAgICAgICB9LCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZE1lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgICAgICAgJ2Vycm9yJyxcclxuICAgICAgICAgICAgICAgICAgICAnYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuZXJyb3JfcmVwcm9jZXNzaW5nX2V2ZW50X21lc3NhZ2VfdGl0bGUnLFxyXG4gICAgICAgICAgICAgICAgICAgICdhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5lcnJvcl9yZXByb2Nlc3NpbmdfZXZlbnRfbWVzc2FnZV9kZXNjcmlwdGlvbicpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZE1lc3NhZ2Uoc2V2ZXJpdHk6IHN0cmluZywgc3VtbWFyeTogc3RyaW5nLCBkZXRhaWw6IHN0cmluZywgbGlmZSA9IEFHUk9fTlVNQkVSUy5GSVZFX1NFQ09ORFMpIHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgICAgIHNldmVyaXR5LFxyXG4gICAgICAgICAgICBzdW1tYXJ5OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHN1bW1hcnkpLFxyXG4gICAgICAgICAgICBkZXRhaWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZGV0YWlsKSxcclxuICAgICAgICAgICAgbGlmZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvcGVuTW9kYWwoKSB7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5TW9kYWwgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFzeW5jIG9wZW5DYW5jZWxNb2RhbCgpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLmNhbmNlbEV2ZW50RGlhbG9nQ29uZmlnLmJlZm9yZU9wZW4/LigpO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKENhbmNlbEV2ZW50RGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIGhlYWRlcjogdGhpcy5jYW5jZWxFdmVudERpYWxvZ0NvbmZpZz8uaGVhZGVyLFxyXG4gICAgICAgICAgICBjb250ZW50U3R5bGU6IHsgaGVpZ2h0OiBcIjEwMCVcIiB9LFxyXG4gICAgICAgICAgICBjbG9zYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgY2xvc2VPbkVzY2FwZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGRhdGE6IHsgY2FuY2VsRXZlbnREaWFsb2dDb25maWc6IHRoaXMuY2FuY2VsRXZlbnREaWFsb2dDb25maWcgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29uZmlybU1vZGFsKCkge1xyXG4gICAgICAgIHRoaXMucmVwcm9jZXNzRXZlbnQoKTtcclxuICAgICAgICB0aGlzLmRpc3BsYXlNb2RhbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2hvd1NpZGViYXIgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FuY2VsTW9kYWwoKSB7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5TW9kYWwgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xvc2VTaWRlYmFyKCkge1xyXG4gICAgICAgIHRoaXMuc2hvd1NpZGViYXIgPSBmYWxzZTtcclxuICAgIH1cclxufVxyXG4iXX0=
|