@colijnit/transaction 256.1.38 → 256.1.40
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/colijnit-transaction.umd.js +482 -248
- package/bundles/colijnit-transaction.umd.js.map +1 -1
- package/colijnit-transaction.metadata.json +1 -1
- package/esm2015/lib/component/delivery-planning/delivery-planning.component.js +8 -4
- package/esm2015/lib/component/delivery-planning/service/delivery-planning.service.js +15 -40
- package/esm2015/lib/component/delivery-planning-main/component/delivery-planning-overview/component/delivery-planning-overview-popup/delivery-planning-overview-popup.component.js +53 -53
- package/esm2015/lib/component/delivery-planning-main/component/delivery-planning-overview/component/delivery-planning-overview-tile/delivery-planning-overview-tile.component.js +48 -12
- package/esm2015/lib/component/delivery-planning-main/component/delivery-planning-overview/component/delivery-planning-overview-tile-settings-popup/delivery-planning-overview-tile-settings-popup.component.js +96 -136
- package/esm2015/lib/component/delivery-planning-main/component/delivery-planning-overview/delivery-planning-overview.component.js +82 -60
- package/esm2015/lib/component/delivery-planning-main/component/delivery-planning-selection/delivery-planning-selection.component.js +36 -21
- package/esm2015/lib/component/delivery-planning-main/delivery-planning-main.component.js +8 -2
- package/esm2015/lib/component/transaction-cash-register-dialog/transaction-cash-register-dialog.component.js +31 -16
- package/esm2015/lib/component/transaction-line/transaction-planning-line/transaction-planning-line.component.js +49 -35
- package/esm2015/lib/component/transaction-quick-access/transaction-quick-access-overview/transaction-quick-access-overview.component.js +6 -2
- package/esm2015/lib/component/transaction-quick-access/transaction-quick-access-send-method-base.component.js +24 -1
- package/esm2015/lib/component/transaction-search/service/transaction-search.service.js +7 -2
- package/esm2015/lib/component/transaction-search/transaction-search-result/transaction-search-result.component.js +103 -89
- package/esm2015/lib/enum/transaction-cfg-name.enum.js +3 -1
- package/esm2015/lib/service/transaction-connector-adapter.service.js +13 -1
- package/esm2015/lib/service/transaction-connector.service.js +6 -1
- package/esm2015/lib/service/transaction.service.js +6 -1
- package/esm2015/lib/transaction-version.js +3 -3
- package/fesm2015/colijnit-transaction.js +523 -415
- package/fesm2015/colijnit-transaction.js.map +1 -1
- package/lib/component/delivery-planning/delivery-planning.component.d.ts +3 -0
- package/lib/component/delivery-planning/service/delivery-planning.service.d.ts +18 -20
- package/lib/component/delivery-planning-main/component/delivery-planning-overview/component/delivery-planning-overview-popup/delivery-planning-overview-popup.component.d.ts +2 -2
- package/lib/component/delivery-planning-main/component/delivery-planning-overview/component/delivery-planning-overview-tile/delivery-planning-overview-tile.component.d.ts +9 -4
- package/lib/component/delivery-planning-main/component/delivery-planning-overview/component/delivery-planning-overview-tile-settings-popup/delivery-planning-overview-tile-settings-popup.component.d.ts +12 -16
- package/lib/component/delivery-planning-main/component/delivery-planning-overview/delivery-planning-overview.component.d.ts +27 -25
- package/lib/component/delivery-planning-main/component/delivery-planning-selection/delivery-planning-selection.component.d.ts +11 -6
- package/lib/component/delivery-planning-main/delivery-planning-main.component.d.ts +3 -1
- package/lib/component/transaction-cash-register-dialog/transaction-cash-register-dialog.component.d.ts +18 -3
- package/lib/component/transaction-line/transaction-planning-line/transaction-planning-line.component.d.ts +5 -2
- package/lib/component/transaction-quick-access/transaction-quick-access-send-method-base.component.d.ts +8 -1
- package/lib/component/transaction-search/service/transaction-search.service.d.ts +3 -2
- package/lib/component/transaction-search/transaction-search-result/transaction-search-result.component.d.ts +8 -6
- package/lib/enum/transaction-cfg-name.enum.d.ts +3 -1
- package/lib/service/transaction-connector-adapter.service.d.ts +1 -0
- package/lib/service/transaction-connector.service.d.ts +1 -0
- package/lib/service/transaction.service.d.ts +1 -0
- package/package.json +1 -1
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
|
-
import { ChangeDetectorRef, Component, EventEmitter, HostBinding, HostListener, Input, Output, ViewChild, ViewChildren, ViewEncapsulation } from
|
|
2
|
+
import { ChangeDetectorRef, Component, EventEmitter, HostBinding, HostListener, Input, Output, ViewChild, ViewChildren, ViewEncapsulation } from '@angular/core';
|
|
3
3
|
import { CalendarView } from '@colijnit/sharedcomponents';
|
|
4
|
-
import { DeliveryPlanningCalendarModes } from
|
|
5
|
-
import { DeliveryPlanningViewModes } from
|
|
6
|
-
import { DeliveryPlanningService } from
|
|
7
|
-
import { TransactionService } from
|
|
8
|
-
import { TransactionConnectorService } from
|
|
9
|
-
import { GetTransportOrdersRequest } from
|
|
10
|
-
import { PlanningFilterObject } from
|
|
11
|
-
import { TransactionDialogService } from
|
|
12
|
-
import { OrderLinesPlannedRequest } from
|
|
13
|
-
import { DeliveryPlanningOverviewTileComponent } from
|
|
14
|
-
import { IconCacheService } from
|
|
15
|
-
import { Icon } from
|
|
16
|
-
import { DeliveryPlanningTileModes } from
|
|
17
|
-
import { DeliveryPlanningUpdateActions } from
|
|
18
|
-
import { DictionaryService } from
|
|
4
|
+
import { DeliveryPlanningCalendarModes } from '../../../../enum/delivery-planning-calendar-modes.enum';
|
|
5
|
+
import { DeliveryPlanningViewModes } from '../../../../enum/delivery-planning-view-modes.enum';
|
|
6
|
+
import { DeliveryPlanningService } from '../../../delivery-planning/service/delivery-planning.service';
|
|
7
|
+
import { TransactionService } from '../../../../service/transaction.service';
|
|
8
|
+
import { TransactionConnectorService } from '../../../../service/transaction-connector.service';
|
|
9
|
+
import { GetTransportOrdersRequest } from '@colijnit/transactionapi/build/model/get-transport-orders-request.bo';
|
|
10
|
+
import { PlanningFilterObject } from '@colijnit/transactionapi/build/model/planning-filter-object.bo';
|
|
11
|
+
import { TransactionDialogService } from '../../../../service/transaction-dialog.service';
|
|
12
|
+
import { OrderLinesPlannedRequest } from '@colijnit/transactionapi/build/model/order-lines-planned-request.bo';
|
|
13
|
+
import { DeliveryPlanningOverviewTileComponent } from './component/delivery-planning-overview-tile/delivery-planning-overview-tile.component';
|
|
14
|
+
import { IconCacheService } from '../../../../service/icon-cache.service';
|
|
15
|
+
import { Icon } from '../../../../enum/icon.enum';
|
|
16
|
+
import { DeliveryPlanningTileModes } from '../../../../enum/delivery-planning-tile-modes.enum';
|
|
17
|
+
import { DeliveryPlanningUpdateActions } from '../../../../enum/delivery-planning-update-actions.enum';
|
|
18
|
+
import { DictionaryService } from '../../../../service/dictionary.service';
|
|
19
19
|
export class DeliveryPlanningOverviewComponent {
|
|
20
20
|
constructor(_deliveryPlanningService, _transaction, _transactionCon, _dialog, _changeDetector, _dictionary, iconCacheService) {
|
|
21
21
|
this._deliveryPlanningService = _deliveryPlanningService;
|
|
@@ -30,16 +30,16 @@ export class DeliveryPlanningOverviewComponent {
|
|
|
30
30
|
this.tileModes = DeliveryPlanningTileModes;
|
|
31
31
|
this.deliveryPlanningViewModes = DeliveryPlanningViewModes;
|
|
32
32
|
this.availability = [];
|
|
33
|
+
this.available = false;
|
|
34
|
+
this.showNoteDialog = false;
|
|
35
|
+
this.showSettingsDialog = false;
|
|
36
|
+
this._subs = [];
|
|
33
37
|
this.columnNum = 3; //initial count
|
|
34
38
|
this.currentMode = DeliveryPlanningCalendarModes.Week;
|
|
35
39
|
this.currentViewMode = CalendarView.WeekView;
|
|
36
40
|
this.currentPlanningViewMode = this.deliveryPlanningViewModes.Fullscreen;
|
|
37
41
|
this.updatePlanningTransportEvent = new EventEmitter();
|
|
38
42
|
this.resetPlanningTransportEvent = new EventEmitter();
|
|
39
|
-
this.tileSize = 300; //one tile should have this width
|
|
40
|
-
this.available = false;
|
|
41
|
-
this.showNoteDialog = false;
|
|
42
|
-
this.showSettingsDialog = false;
|
|
43
43
|
}
|
|
44
44
|
set tiles(tiles) {
|
|
45
45
|
this.tilesQueryList = tiles;
|
|
@@ -68,6 +68,18 @@ export class DeliveryPlanningOverviewComponent {
|
|
|
68
68
|
ngAfterViewChecked() {
|
|
69
69
|
this.setColNum();
|
|
70
70
|
}
|
|
71
|
+
ngOnInit() {
|
|
72
|
+
this._subs.push(this._deliveryPlanningService.availabilityResetEvent.subscribe(event => {
|
|
73
|
+
this.availability = [];
|
|
74
|
+
this._changeDetector.markForCheck();
|
|
75
|
+
this._changeDetector.detectChanges();
|
|
76
|
+
}));
|
|
77
|
+
}
|
|
78
|
+
ngOnDestroy() {
|
|
79
|
+
this._subs.forEach((sub) => {
|
|
80
|
+
sub.unsubscribe();
|
|
81
|
+
});
|
|
82
|
+
}
|
|
71
83
|
showClass() {
|
|
72
84
|
return true;
|
|
73
85
|
}
|
|
@@ -81,39 +93,44 @@ export class DeliveryPlanningOverviewComponent {
|
|
|
81
93
|
ev.preventDefault();
|
|
82
94
|
ev.stopPropagation();
|
|
83
95
|
this._deliveryPlanningService.dragging = false;
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
let tile = this.tilesQueryList.get(index);
|
|
87
|
-
if (!tile.expanded) {
|
|
88
|
-
tile.expanded = true;
|
|
96
|
+
if (this.checkAvailable(transportDay)) {
|
|
97
|
+
yield this._dialog.showError(this._dictionary.get('ORDER_CAN_NOT_BE_PLANNED_ON_RESOURCE'), true);
|
|
89
98
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
99
|
+
else {
|
|
100
|
+
const data = ev.dataTransfer.getData('text');
|
|
101
|
+
let index = transportDays.indexOf(transportDay);
|
|
102
|
+
let tile = this.tilesQueryList.get(index);
|
|
103
|
+
if (!tile.expanded) {
|
|
104
|
+
tile.expanded = true;
|
|
105
|
+
}
|
|
106
|
+
if (data != 'lines' && !this._deliveryPlanningService.movingTransId) {
|
|
107
|
+
if (data && parseInt(data)) {
|
|
108
|
+
yield this._transaction.getTransactionById(parseInt(data));
|
|
109
|
+
const order = this._transaction.currentTransaction;
|
|
110
|
+
if (((_b = (_a = order.transactionInfo) === null || _a === void 0 ? void 0 : _a.headerInfoStatus) === null || _b === void 0 ? void 0 : _b.quantityPlanningFinal) === 0) {
|
|
111
|
+
const planOrder = yield this._transactionCon.getPlanOrder(parseInt(data));
|
|
112
|
+
if (planOrder) {
|
|
113
|
+
this.openPlanningPopup(planOrder, transportDay, week);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
yield this._dialog.showError(this._dictionary.get('ORDER_HAS_ALREADY_BEEN_PLANNED'), true);
|
|
98
118
|
}
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
yield this._dialog.showError(this._dictionary.get("ORDER_HAS_ALREADY_BEEN_PLANNED"), true);
|
|
102
119
|
}
|
|
103
120
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
121
|
+
else if (data != 'lines' && this._deliveryPlanningService.movingTransId) {
|
|
122
|
+
// await this.handleMoveNormalEvent(data, transportDay, week, this.planTransportWeekArr);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
yield this.planSelectedLines(transportDay, week);
|
|
126
|
+
}
|
|
110
127
|
}
|
|
111
128
|
});
|
|
112
129
|
}
|
|
113
130
|
allowDrop(ev, transportDay) {
|
|
114
131
|
ev.preventDefault();
|
|
115
132
|
if (this._deliveryPlanningService.dragging && transportDay.maxMinutes > 0 && transportDay.availableOnDate) {
|
|
116
|
-
return transportDay.minutes + transportDay.minutes < transportDay.maxMinutes && transportDay.maxOrderAmount < transportDay.orderAmount && transportDay.availableOnDate;
|
|
133
|
+
return transportDay.minutes + transportDay.minutes < transportDay.maxMinutes && transportDay.maxOrderAmount < transportDay.orderAmount && transportDay.availableOnDate && this.checkAvailable(transportDay);
|
|
117
134
|
}
|
|
118
135
|
}
|
|
119
136
|
setColNum() {
|
|
@@ -152,7 +169,7 @@ export class DeliveryPlanningOverviewComponent {
|
|
|
152
169
|
});
|
|
153
170
|
}
|
|
154
171
|
else {
|
|
155
|
-
yield this._dialog.showError(
|
|
172
|
+
yield this._dialog.showError('NO_LINES_TO_DELETE', true);
|
|
156
173
|
}
|
|
157
174
|
}
|
|
158
175
|
});
|
|
@@ -243,7 +260,7 @@ export class DeliveryPlanningOverviewComponent {
|
|
|
243
260
|
});
|
|
244
261
|
}
|
|
245
262
|
else {
|
|
246
|
-
yield this._dialog.showError(
|
|
263
|
+
yield this._dialog.showError('NO_LINES_TO_PLAN', true);
|
|
247
264
|
}
|
|
248
265
|
});
|
|
249
266
|
}
|
|
@@ -267,12 +284,12 @@ export class DeliveryPlanningOverviewComponent {
|
|
|
267
284
|
}
|
|
268
285
|
});
|
|
269
286
|
if (cantPlanSelectedLines.length === planOrder.lines.length) {
|
|
270
|
-
yield this._dialog.showError(
|
|
287
|
+
yield this._dialog.showError('NO_LINES_TO_PLAN', true);
|
|
271
288
|
return;
|
|
272
289
|
}
|
|
273
290
|
}
|
|
274
291
|
else {
|
|
275
|
-
yield this._dialog.showError(
|
|
292
|
+
yield this._dialog.showError('NO_LINES_SELECTED', true);
|
|
276
293
|
return;
|
|
277
294
|
}
|
|
278
295
|
let plannedOrder = transportDay.plannedOrders.find((plannedOrder) => plannedOrder.transId === planOrder.transId);
|
|
@@ -308,7 +325,7 @@ export class DeliveryPlanningOverviewComponent {
|
|
|
308
325
|
}
|
|
309
326
|
handleSettingsSave(changed) {
|
|
310
327
|
if (changed) {
|
|
311
|
-
|
|
328
|
+
this.updatePlanningTransportEvent.emit();
|
|
312
329
|
}
|
|
313
330
|
}
|
|
314
331
|
openSettingsDialog(transportDay) {
|
|
@@ -321,12 +338,16 @@ export class DeliveryPlanningOverviewComponent {
|
|
|
321
338
|
var _a;
|
|
322
339
|
return __awaiter(this, void 0, void 0, function* () {
|
|
323
340
|
let planOrder;
|
|
324
|
-
if (data.data ===
|
|
341
|
+
if (data.data === 'false' && this._deliveryPlanningService.currentTransId) {
|
|
325
342
|
planOrder = yield this._transactionCon.getPlanOrder((_a = this._deliveryPlanningService) === null || _a === void 0 ? void 0 : _a.currentTransId);
|
|
326
343
|
}
|
|
327
344
|
else {
|
|
328
345
|
planOrder = yield this._transactionCon.getPlanOrder(parseInt(data.data));
|
|
329
346
|
}
|
|
347
|
+
if (transportWeekDay.plannedOrders.find((plannedOrder) => plannedOrder.transId === planOrder.transId)) {
|
|
348
|
+
yield this._dialog.showError(this._dictionary.get('ORDER_HAS_ALREADY_BEEN_PLANNED'), true);
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
330
351
|
if (planOrder && data.currentHour) {
|
|
331
352
|
planOrder.startTime = this.calculateStartTime(transportWeekDay, data.currentHour);
|
|
332
353
|
planOrder.endTime = this.calculateEndTime(planOrder.startTime, data.currentHour, planOrder);
|
|
@@ -334,7 +355,7 @@ export class DeliveryPlanningOverviewComponent {
|
|
|
334
355
|
yield this.getSequenceOrderValue(planOrder);
|
|
335
356
|
yield this.getOrderLinesPlanned(planOrder);
|
|
336
357
|
yield this.planOrderLines(planOrder, transportWeekDay, week);
|
|
337
|
-
if (data.data ===
|
|
358
|
+
if (data.data === 'false' && this._transaction.currentTransaction.transactionInfo.uuid) {
|
|
338
359
|
yield this._transaction.getTransactionById(this._deliveryPlanningService.currentTransId);
|
|
339
360
|
yield this._transaction.saveTransaction();
|
|
340
361
|
yield this._transaction.checkRefTransaction();
|
|
@@ -344,17 +365,17 @@ export class DeliveryPlanningOverviewComponent {
|
|
|
344
365
|
}
|
|
345
366
|
calculateStartTime(transportWeekDay, currentHour) {
|
|
346
367
|
let startDate = new Date(transportWeekDay.date);
|
|
347
|
-
let startTime = parseInt(currentHour.split(
|
|
368
|
+
let startTime = parseInt(currentHour.split(':')[0]);
|
|
348
369
|
startDate.setHours(startTime);
|
|
349
|
-
startDate.setMinutes(parseInt(currentHour.split(
|
|
370
|
+
startDate.setMinutes(parseInt(currentHour.split(':')[1]) > 0 ? parseInt(currentHour.split(':')[1]) : 0);
|
|
350
371
|
startDate.setSeconds(0);
|
|
351
372
|
return startDate;
|
|
352
373
|
}
|
|
353
374
|
calculateEndTime(startDate, currentHour, planOrder) {
|
|
354
375
|
let endTime = new Date(startDate);
|
|
355
|
-
let splitHour = currentHour.split(
|
|
356
|
-
const newEndMinutes = splitHour[1] ===
|
|
357
|
-
const newEndHour = splitHour[1] ===
|
|
376
|
+
let splitHour = currentHour.split(':');
|
|
377
|
+
const newEndMinutes = splitHour[1] === '00' ? 30 : 0;
|
|
378
|
+
const newEndHour = splitHour[1] === '30' ? (parseInt(splitHour[0]) + 1) : parseInt(splitHour[0]);
|
|
358
379
|
endTime.setHours(newEndHour);
|
|
359
380
|
endTime.setMinutes(newEndMinutes);
|
|
360
381
|
let assemblyTime = this._deliveryPlanningService.totalAssemblyTime(planOrder) * 60 * 1000;
|
|
@@ -403,7 +424,7 @@ export class DeliveryPlanningOverviewComponent {
|
|
|
403
424
|
yield this._transactionCon.restoreDeliverySettings([planOrder]);
|
|
404
425
|
//set new date for order and plan it on new transport
|
|
405
426
|
let newDate = new Date(transport.date);
|
|
406
|
-
let splitTime = moveData.hour.split(
|
|
427
|
+
let splitTime = moveData.hour.split(':');
|
|
407
428
|
newDate.setHours(parseInt(splitTime[0]));
|
|
408
429
|
newDate.setMinutes(parseInt(splitTime[1]));
|
|
409
430
|
newDate.setSeconds(0);
|
|
@@ -445,13 +466,13 @@ export class DeliveryPlanningOverviewComponent {
|
|
|
445
466
|
}
|
|
446
467
|
DeliveryPlanningOverviewComponent.decorators = [
|
|
447
468
|
{ type: Component, args: [{
|
|
448
|
-
selector:
|
|
469
|
+
selector: 'co-delivery-planning-overview',
|
|
449
470
|
template: `
|
|
450
471
|
<div class="delivery-planning-wrapper">
|
|
451
472
|
<co-delivery-planning-overview-popup #planningPopup *ngIf="showNoteDialog" (closeEvent)="showNoteDialog = false"
|
|
452
473
|
(onSucceededPlanAction)="handlePopupPlanEvent($event)"></co-delivery-planning-overview-popup>
|
|
453
474
|
<co-delivery-planning-overview-tile-settings-popup *ngIf="showSettingsDialog" [transportDay]="selectedTransportDay"
|
|
454
|
-
|
|
475
|
+
|
|
455
476
|
(onSaveAction)="handleSettingsSave($event)"
|
|
456
477
|
(closeEvent)="showSettingsDialog = false"></co-delivery-planning-overview-tile-settings-popup>
|
|
457
478
|
<div class="delivery-overview-wrapper" [class.sidebar]="currentViewMode === 'DAYS_AROUND'">
|
|
@@ -483,6 +504,7 @@ DeliveryPlanningOverviewComponent.decorators = [
|
|
|
483
504
|
(deleteOrderLineEvent)="handleDeleteLine($event, transPortDay, transportWeekRow)"
|
|
484
505
|
(editOrderEvent)="handleEditPlannedOrder($event, transPortDay, transportWeekRow)"
|
|
485
506
|
(moveEvent)="handleMoveEvent($event,transPortDay, transportWeekRow, planTransportWeekArr)"
|
|
507
|
+
(availabilityChecked)="handleAvailabilityChecked($event)"
|
|
486
508
|
|
|
487
509
|
|
|
488
510
|
></co-delivery-planning-overview-tile>
|
|
@@ -519,7 +541,7 @@ DeliveryPlanningOverviewComponent.propDecorators = {
|
|
|
519
541
|
currentPlanningViewMode: [{ type: Input }],
|
|
520
542
|
updatePlanningTransportEvent: [{ type: Output }],
|
|
521
543
|
resetPlanningTransportEvent: [{ type: Output }],
|
|
522
|
-
showClass: [{ type: HostBinding, args: [
|
|
544
|
+
showClass: [{ type: HostBinding, args: ['class.co-delivery-planning-overview',] }],
|
|
523
545
|
onResize: [{ type: HostListener, args: ['window:resize', ['$event'],] }]
|
|
524
546
|
};
|
|
525
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsaXZlcnktcGxhbm5pbmctb3ZlcnZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJhbnNhY3Rpb24vc3JjL2xpYi9jb21wb25lbnQvZGVsaXZlcnktcGxhbm5pbmctbWFpbi9jb21wb25lbnQvZGVsaXZlcnktcGxhbm5pbmctb3ZlcnZpZXcvZGVsaXZlcnktcGxhbm5pbmctb3ZlcnZpZXcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUVOLFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSx3REFBd0QsQ0FBQztBQUNyRyxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxvREFBb0QsQ0FBQztBQUM3RixPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw4REFBOEQsQ0FBQztBQUNyRyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUMzRSxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxtREFBbUQsQ0FBQztBQUc5RixPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxzRUFBc0UsQ0FBQztBQUMvRyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxnRUFBZ0UsQ0FBQztBQUNwRyxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUN4RixPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxxRUFBcUUsQ0FBQztBQUk3RyxPQUFPLEVBQ0wscUNBQXFDLEVBQ3RDLE1BQU0sdUZB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aGVja2VkLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdEJpbmRpbmcsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBRdWVyeUxpc3QsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDaGlsZHJlbixcclxuICBWaWV3RW5jYXBzdWxhdGlvblxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5pbXBvcnQge0NhbGVuZGFyVmlld30gZnJvbSAnQGNvbGlqbml0L3NoYXJlZGNvbXBvbmVudHMnO1xyXG5pbXBvcnQge0RlbGl2ZXJ5UGxhbm5pbmdDYWxlbmRhck1vZGVzfSBmcm9tIFwiLi4vLi4vLi4vLi4vZW51bS9kZWxpdmVyeS1wbGFubmluZy1jYWxlbmRhci1tb2Rlcy5lbnVtXCI7XHJcbmltcG9ydCB7RGVsaXZlcnlQbGFubmluZ1ZpZXdNb2Rlc30gZnJvbSBcIi4uLy4uLy4uLy4uL2VudW0vZGVsaXZlcnktcGxhbm5pbmctdmlldy1tb2Rlcy5lbnVtXCI7XHJcbmltcG9ydCB7RGVsaXZlcnlQbGFubmluZ1NlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9kZWxpdmVyeS1wbGFubmluZy9zZXJ2aWNlL2RlbGl2ZXJ5LXBsYW5uaW5nLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtUcmFuc2FjdGlvblNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlL3RyYW5zYWN0aW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtUcmFuc2FjdGlvbkNvbm5lY3RvclNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlL3RyYW5zYWN0aW9uLWNvbm5lY3Rvci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7UGxhbm5pbmdUcmFuc3BvcnRXZWVrRGF5fSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3BsYW5uaW5nLXRyYW5zcG9ydC13ZWVrLWRheS5ib1wiO1xyXG5pbXBvcnQge1BsYW5PcmRlcn0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wbGFuLW9yZGVyLmJvXCI7XHJcbmltcG9ydCB7R2V0VHJhbnNwb3J0T3JkZXJzUmVxdWVzdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9nZXQtdHJhbnNwb3J0LW9yZGVycy1yZXF1ZXN0LmJvXCI7XHJcbmltcG9ydCB7UGxhbm5pbmdGaWx0ZXJPYmplY3R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcGxhbm5pbmctZmlsdGVyLW9iamVjdC5ib1wiO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uRGlhbG9nU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uLy4uL3NlcnZpY2UvdHJhbnNhY3Rpb24tZGlhbG9nLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtPcmRlckxpbmVzUGxhbm5lZFJlcXVlc3R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvb3JkZXItbGluZXMtcGxhbm5lZC1yZXF1ZXN0LmJvXCI7XHJcbmltcG9ydCB7XHJcbiAgRGVsaXZlcnlQbGFubmluZ092ZXJ2aWV3UG9wdXBDb21wb25lbnRcclxufSBmcm9tIFwiLi9jb21wb25lbnQvZGVsaXZlcnktcGxhbm5pbmctb3ZlcnZpZXctcG9wdXAvZGVsaXZlcnktcGxhbm5pbmctb3ZlcnZpZXctcG9wdXAuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7XHJcbiAgRGVsaXZlcnlQbGFubmluZ092ZXJ2aWV3VGlsZUNvbXBvbmVudFxyXG59IGZyb20gXCIuL2NvbXBvbmVudC9kZWxpdmVyeS1wbGFubmluZy1vdmVydmlldy10aWxlL2RlbGl2ZXJ5LXBsYW5uaW5nLW92ZXJ2aWV3LXRpbGUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7SWNvbkNhY2hlU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uLy4uL3NlcnZpY2UvaWNvbi1jYWNoZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7SWNvbn0gZnJvbSBcIi4uLy4uLy4uLy4uL2VudW0vaWNvbi5lbnVtXCI7XHJcbmltcG9ydCB7RGVsaXZlcnlQbGFubmluZ1RpbGVNb2Rlc30gZnJvbSBcIi4uLy4uLy4uLy4uL2VudW0vZGVsaXZlcnktcGxhbm5pbmctdGlsZS1tb2Rlcy5lbnVtXCI7XHJcbmltcG9ydCB7RGVsaXZlcnlQbGFubmluZ1VwZGF0ZUFjdGlvbnN9IGZyb20gXCIuLi8uLi8uLi8uLi9lbnVtL2RlbGl2ZXJ5LXBsYW5uaW5nLXVwZGF0ZS1hY3Rpb25zLmVudW1cIjtcclxuaW1wb3J0IHtQbGFuT3JkZXJMaW5lfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3BsYW4tb3JkZXItbGluZS5ib1wiO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWluZm8tcmVzcG9uc2UuYm9cIjtcclxuaW1wb3J0IHtEaWN0aW9uYXJ5U2VydmljZX0gZnJvbSBcIi4uLy4uLy4uLy4uL3NlcnZpY2UvZGljdGlvbmFyeS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25MaW5lSW5mb30gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1saW5lLWluZm8uYm9cIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImNvLWRlbGl2ZXJ5LXBsYW5uaW5nLW92ZXJ2aWV3XCIsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgICAgPGRpdiBjbGFzcz1cImRlbGl2ZXJ5LXBsYW5uaW5nLXdyYXBwZXJcIj5cclxuICAgICAgICAgIDxjby1kZWxpdmVyeS1wbGFubmluZy1vdmVydmlldy1wb3B1cCAjcGxhbm5pbmdQb3B1cCAqbmdJZj1cInNob3dOb3RlRGlhbG9nXCIgKGNsb3NlRXZlbnQpPVwic2hvd05vdGVEaWFsb2cgPSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uU3VjY2VlZGVkUGxhbkFjdGlvbik9XCJoYW5kbGVQb3B1cFBsYW5FdmVudCgkZXZlbnQpXCI+PC9jby1kZWxpdmVyeS1wbGFubmluZy1vdmVydmlldy1wb3B1cD5cclxuICAgICAgICAgIDxjby1kZWxpdmVyeS1wbGFubmluZy1vdmVydmlldy10aWxlLXNldHRpbmdzLXBvcHVwICpuZ0lmPVwic2hvd1NldHRpbmdzRGlhbG9nXCIgW3RyYW5zcG9ydERheV09XCJzZWxlY3RlZFRyYW5zcG9ydERheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXZhaWxhYmlsaXR5Q2hlY2tlZCk9XCJoYW5kbGVBdmFpbGFiaWxpdHlDaGVja2VkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uU2F2ZUFjdGlvbik9XCJoYW5kbGVTZXR0aW5nc1NhdmUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xvc2VFdmVudCk9XCJzaG93U2V0dGluZ3NEaWFsb2cgPSBmYWxzZVwiPjwvY28tZGVsaXZlcnktcGxhbm5pbmctb3ZlcnZpZXctdGlsZS1zZXR0aW5ncy1wb3B1cD5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZWxpdmVyeS1vdmVydmlldy13cmFwcGVyXCIgW2NsYXNzLnNpZGViYXJdPVwiY3VycmVudFZpZXdNb2RlID09PSAnREFZU19BUk9VTkQnXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbGUtdmlldy1tb2RlcyByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgPGNvLWljb24gKGNsaWNrKT1cImN1cnJlbnRUaWxlTW9kZSA9IHRpbGVNb2Rlcy5Ob3JtYWxcIiBbY2xhc3MuYWN0aXZlXT1cImN1cnJlbnRUaWxlTW9kZSA9PT0gdGlsZU1vZGVzLk5vcm1hbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uRGF0YV09XCJpY29uQ2FjaGVTZXJ2aWNlLmdldEljb24oaWNvbnMuQ2FsZW5kYXJMaW5lc1JlZ3VsYXIpXCI+PC9jby1pY29uPlxyXG4gICAgICAgICAgICAgICAgICA8Y28taWNvbiAoY2xpY2spPVwiY3VycmVudFRpbGVNb2RlID0gdGlsZU1vZGVzLkNhbGVuZGFyXCIgW2NsYXNzLmFjdGl2ZV09XCJjdXJyZW50VGlsZU1vZGUgPT09IHRpbGVNb2Rlcy5DYWxlbmRhclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uRGF0YV09XCJpY29uQ2FjaGVTZXJ2aWNlLmdldEljb24oaWNvbnMuQ2FsZW5kYXJEYXlSZWd1bGFyKVwiPjwvY28taWNvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGxhbm5pbmctY29tcG9uZW50LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGNvLWRhdGUtcGxhbm5pbmcgW3ZpZXddPVwiY3VycmVudFZpZXdNb2RlXCIgW3NlbGVjdGVkRGF0ZV09XCJjdXJyZW50RGF0ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJhbmdlQ2hhbmdlKT1cImhhbmRsZURhdGVSYW5nZUNoYW5nZSgkZXZlbnQpXCI+PC9jby1kYXRlLXBsYW5uaW5nPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGRhdGUtcGxhbm5pbmdcIiBbY2xhc3MuZW1wbG95ZWUtdmlld109XCJlbXBsb3llZVZpZXdcIiAjcm93Q29udGFpbmVyICpuZ0Zvcj1cImxldCB0cmFuc3BvcnRXZWVrUm93IG9mIHBsYW5UcmFuc3BvcnRXZWVrQXJyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5cIiAjY29sdW1uRWxlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB0cmFuc1BvcnREYXkgb2YgZmlsdGVyV2Vla0FycmF5KHRyYW5zcG9ydFdlZWtSb3cpOyBpbmRleCBhcyBpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8Y28tZGVsaXZlcnktcGxhbm5pbmctb3ZlcnZpZXctdGlsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiIXRyYW5zUG9ydERheS5hdmFpbGFibGVPbkRhdGUgfHwgdHJhbnNQb3J0RGF5Lm1heE1pbnV0ZXMgPT09IDAgfHwgY2hlY2tBdmFpbGFibGUodHJhbnNQb3J0RGF5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhdHJhbnNQb3J0RGF5LmF2YWlsYWJsZU9uRGF0ZSB8fCB0cmFuc1BvcnREYXkubWF4TWludXRlcyA9PT0gMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkcmFnb3Zlcik9XCJhbGxvd0Ryb3AoJGV2ZW50LCB0cmFuc1BvcnREYXkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRyb3ApPVwiZHJvcHBlZCgkZXZlbnQsIHRyYW5zcG9ydFdlZWtSb3csIHRyYW5zUG9ydERheSwgZmlsdGVyV2Vla0FycmF5KHRyYW5zcG9ydFdlZWtSb3cpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkcmFnZW5kKT1cImRyYWdFbmQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0cmFuc3BvcnREYXldPVwidHJhbnNQb3J0RGF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlbGV0ZU9yZGVyRXZlbnQpPVwiaGFuZGxlRGVsZXRlT3JkZXIoJGV2ZW50LCB0cmFuc3BvcnRXZWVrUm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aW1lQ2hhbmdlRXZlbnQpPVwiaGFuZGxlVGltZUNoYW5nZUV2ZW50KHRyYW5zUG9ydERheSwgdHJhbnNwb3J0V2Vla1JvdywkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wZW5TZXR0aW5nc0RpYWxvZ0V2ZW50KT1cIm9wZW5TZXR0aW5nc0RpYWxvZygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhbGVuZGFyUGxhbkV2ZW50KT1cImhhbmRsZUNhbGVuZGFyUGxhbkV2ZW50KCRldmVudCwgdHJhbnNQb3J0RGF5LCB0cmFuc3BvcnRXZWVrUm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWxldGVPcmRlckxpbmVFdmVudCk9XCJoYW5kbGVEZWxldGVMaW5lKCRldmVudCwgdHJhbnNQb3J0RGF5LCB0cmFuc3BvcnRXZWVrUm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlZGl0T3JkZXJFdmVudCk9XCJoYW5kbGVFZGl0UGxhbm5lZE9yZGVyKCRldmVudCwgdHJhbnNQb3J0RGF5LCB0cmFuc3BvcnRXZWVrUm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3ZlRXZlbnQpPVwiaGFuZGxlTW92ZUV2ZW50KCRldmVudCx0cmFuc1BvcnREYXksIHRyYW5zcG9ydFdlZWtSb3csIHBsYW5UcmFuc3BvcnRXZWVrQXJyKVwiXHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgID48L2NvLWRlbGl2ZXJ5LXBsYW5uaW5nLW92ZXJ2aWV3LXRpbGU+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgYCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEZWxpdmVyeVBsYW5uaW5nT3ZlcnZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdDaGVja2VkIHtcclxuICBwdWJsaWMgcmVhZG9ubHkgaWNvbnM6IHR5cGVvZiBJY29uID0gSWNvbjtcclxuICBwdWJsaWMgcmVhZG9ubHkgcGxhbm5pbmdBY3Rpb25zOiB0eXBlb2YgRGVsaXZlcnlQbGFubmluZ1VwZGF0ZUFjdGlvbnMgPSBEZWxpdmVyeVBsYW5uaW5nVXBkYXRlQWN0aW9ucztcclxuICBwdWJsaWMgcmVhZG9ubHkgdGlsZU1vZGVzOiB0eXBlb2YgRGVsaXZlcnlQbGFubmluZ1RpbGVNb2RlcyA9IERlbGl2ZXJ5UGxhbm5pbmdUaWxlTW9kZXM7XHJcbiAgcHVibGljIGRlbGl2ZXJ5UGxhbm5pbmdWaWV3TW9kZXM6IHR5cGVvZiBEZWxpdmVyeVBsYW5uaW5nVmlld01vZGVzID0gRGVsaXZlcnlQbGFubmluZ1ZpZXdNb2RlcztcclxuXHJcbiAgcHVibGljIGF2YWlsYWJpbGl0eTogeyB0cmFuc3BvcnREYXk6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheSwgYXZhaWxhYmxlOiBib29sZWFuIH1bXSA9IFtdO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKERlbGl2ZXJ5UGxhbm5pbmdPdmVydmlld1RpbGVDb21wb25lbnQpXHJcbiAgcHVibGljIHNldCB0aWxlcyh0aWxlczogUXVlcnlMaXN0PERlbGl2ZXJ5UGxhbm5pbmdPdmVydmlld1RpbGVDb21wb25lbnQ+KSB7XHJcbiAgICB0aGlzLnRpbGVzUXVlcnlMaXN0ID0gdGlsZXM7XHJcbiAgfTtcclxuXHJcbiAgQFZpZXdDaGlsZCgncm93Q29udGFpbmVyJykgcm93Q29udGFpbmVyOiBIVE1MRGl2RWxlbWVudDtcclxuXHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2NvbHVtbkVsZW0nKSBjb2x1bW5FbGVtOiBIVE1MRGl2RWxlbWVudDtcclxuICBwdWJsaWMgY29sdW1uTnVtID0gMzsgLy9pbml0aWFsIGNvdW50XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3BsYW5uaW5nUG9wdXAnKVxyXG4gIHB1YmxpYyBzZXQgcGxhbm5pbmdQb3B1cENvbXBvbmVudCh2YWx1ZTogRGVsaXZlcnlQbGFubmluZ092ZXJ2aWV3UG9wdXBDb21wb25lbnQpIHtcclxuICAgIHRoaXMucGxhbm5pbmdQb3B1cFJlZiA9IHZhbHVlO1xyXG4gIH07XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBlbXBsb3llZVZpZXcoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGVsaXZlcnlQbGFubmluZ1NlcnZpY2UuZW1wbG95ZWVWaWV3O1xyXG4gIH1cclxuXHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGN1cnJlbnRNb2RlOiBEZWxpdmVyeVBsYW5uaW5nQ2FsZW5kYXJNb2RlcyA9IERlbGl2ZXJ5UGxhbm5pbmdDYWxlbmRhck1vZGVzLldlZWs7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGN1cnJlbnRWaWV3TW9kZTogQ2FsZW5kYXJWaWV3ID0gQ2FsZW5kYXJWaWV3LldlZWtWaWV3O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBjdXJyZW50UGxhbm5pbmdWaWV3TW9kZTogRGVsaXZlcnlQbGFubmluZ1ZpZXdNb2RlcyA9IHRoaXMuZGVsaXZlcnlQbGFubmluZ1ZpZXdNb2Rlcy5GdWxsc2NyZWVuO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgdXBkYXRlUGxhbm5pbmdUcmFuc3BvcnRFdmVudDogRXZlbnRFbWl0dGVyPHtcclxuICAgIG9sZFdlZWs6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheVtdLFxyXG4gICAgd2VlazogUGxhbm5pbmdUcmFuc3BvcnRXZWVrRGF5W10sXHJcbiAgICBhY3Rpb246IERlbGl2ZXJ5UGxhbm5pbmdVcGRhdGVBY3Rpb25zXHJcbiAgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHtcclxuICAgIG9sZFdlZWs6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheVtdLFxyXG4gICAgd2VlazogUGxhbm5pbmdUcmFuc3BvcnRXZWVrRGF5W10sXHJcbiAgICBhY3Rpb246IERlbGl2ZXJ5UGxhbm5pbmdVcGRhdGVBY3Rpb25zXHJcbiAgfT4oKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIHJlc2V0UGxhbm5pbmdUcmFuc3BvcnRFdmVudDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICBwdWJsaWMgdGlsZVNpemUgPSAzMDA7IC8vb25lIHRpbGUgc2hvdWxkIGhhdmUgdGhpcyB3aWR0aFxyXG4gIHB1YmxpYyBwbGFubmluZ1BvcHVwUmVmOiBEZWxpdmVyeVBsYW5uaW5nT3ZlcnZpZXdQb3B1cENvbXBvbmVudDtcclxuXHJcbiAgcHVibGljIGF2YWlsYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93Tm90ZURpYWxvZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93U2V0dGluZ3NEaWFsb2c6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgdGlsZXNRdWVyeUxpc3Q6IFF1ZXJ5TGlzdDxEZWxpdmVyeVBsYW5uaW5nT3ZlcnZpZXdUaWxlQ29tcG9uZW50PjtcclxuICBwdWJsaWMgc2VsZWN0ZWRUcmFuc3BvcnREYXk6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheTtcclxuXHJcblxyXG4gIHB1YmxpYyBnZXQgcGxhblRyYW5zcG9ydFdlZWtBcnIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGVsaXZlcnlQbGFubmluZ1NlcnZpY2UucGxhblRyYW5zcG9ydFdlZWtBcnI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGN1cnJlbnRUaWxlTW9kZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9kZWxpdmVyeVBsYW5uaW5nU2VydmljZS5jdXJyZW50VGlsZU1vZGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGN1cnJlbnRUaWxlTW9kZSh0aWxlTW9kZTogRGVsaXZlcnlQbGFubmluZ1RpbGVNb2Rlcykge1xyXG4gICAgdGhpcy5fZGVsaXZlcnlQbGFubmluZ1NlcnZpY2UuY3VycmVudFRpbGVNb2RlID0gdGlsZU1vZGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3VycmVudERhdGUoKTogRGF0ZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGVsaXZlcnlQbGFubmluZ1NlcnZpY2UuY3VycmVudFN0YXJ0RGF0ZTtcclxuICB9XHJcblxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9kZWxpdmVyeVBsYW5uaW5nU2VydmljZTogRGVsaXZlcnlQbGFubmluZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIF90cmFuc2FjdGlvbkNvbjogVHJhbnNhY3Rpb25Db25uZWN0b3JTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgX2RpYWxvZzogVHJhbnNhY3Rpb25EaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICAgICAgICBwcml2YXRlIF9kaWN0aW9uYXJ5OiBEaWN0aW9uYXJ5U2VydmljZSxcclxuICAgICAgICAgICAgICBwdWJsaWMgaWNvbkNhY2hlU2VydmljZTogSWNvbkNhY2hlU2VydmljZSxcclxuICApIHtcclxuICB9XHJcblxyXG4gIC8vY2FsY3VsYXRpbmcgdXBvbiBsb2FkaW5nXHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xyXG4gICAgdGhpcy5zZXRDb2xOdW0oKTtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZyhcImNsYXNzLmNvLWRlbGl2ZXJ5LXBsYW5uaW5nLW92ZXJ2aWV3XCIpXHJcbiAgcHVibGljIHNob3dDbGFzcygpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vcmVjYWxjdWxhdGluZyB1cG9uIGJyb3dzZXIgd2luZG93IHJlc2l6ZVxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxyXG4gIG9uUmVzaXplKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICB0aGlzLnNldENvbE51bSgpO1xyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBhc3luYyBkcm9wcGVkKGV2OiBEcmFnRXZlbnQsIHdlZWs6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheVtdLCB0cmFuc3BvcnREYXk6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheSwgdHJhbnNwb3J0RGF5czogUGxhbm5pbmdUcmFuc3BvcnRXZWVrRGF5W10pIHtcclxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICB0aGlzLl9kZWxpdmVyeVBsYW5uaW5nU2VydmljZS5kcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgY29uc3QgZGF0YSA9IGV2LmRhdGFUcmFuc2Zlci5nZXREYXRhKFwidGV4dFwiKTtcclxuICAgIGxldCBpbmRleCA9IHRyYW5zcG9ydERheXMuaW5kZXhPZih0cmFuc3BvcnREYXkpXHJcbiAgICBsZXQgdGlsZSA9IHRoaXMudGlsZXNRdWVyeUxpc3QuZ2V0KGluZGV4KTtcclxuICAgIGlmICghdGlsZS5leHBhbmRlZCkge1xyXG4gICAgICB0aWxlLmV4cGFuZGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChkYXRhICE9IFwibGluZXNcIiAmJiAhdGhpcy5fZGVsaXZlcnlQbGFubmluZ1NlcnZpY2UubW92aW5nVHJhbnNJZCkge1xyXG4gICAgICBpZiAoZGF0YSAmJiBwYXJzZUludChkYXRhKSkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3RyYW5zYWN0aW9uLmdldFRyYW5zYWN0aW9uQnlJZChwYXJzZUludChkYXRhKSk7XHJcbiAgICAgICAgY29uc3Qgb3JkZXI6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gdGhpcy5fdHJhbnNhY3Rpb24uY3VycmVudFRyYW5zYWN0aW9uO1xyXG4gICAgICAgIGlmIChvcmRlci50cmFuc2FjdGlvbkluZm8/LmhlYWRlckluZm9TdGF0dXM/LnF1YW50aXR5UGxhbm5pbmdGaW5hbCA9PT0gMCkge1xyXG4gICAgICAgICAgY29uc3QgcGxhbk9yZGVyID0gYXdhaXQgdGhpcy5fdHJhbnNhY3Rpb25Db24uZ2V0UGxhbk9yZGVyKHBhcnNlSW50KGRhdGEpKVxyXG4gICAgICAgICAgaWYgKHBsYW5PcmRlcikge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5QbGFubmluZ1BvcHVwKHBsYW5PcmRlciwgdHJhbnNwb3J0RGF5LCB3ZWVrKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5fZGlhbG9nLnNob3dFcnJvcih0aGlzLl9kaWN0aW9uYXJ5LmdldChcIk9SREVSX0hBU19BTFJFQURZX0JFRU5fUExBTk5FRFwiKSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGRhdGEgIT0gXCJsaW5lc1wiICYmIHRoaXMuX2RlbGl2ZXJ5UGxhbm5pbmdTZXJ2aWNlLm1vdmluZ1RyYW5zSWQpIHtcclxuICAgICAgLy8gYXdhaXQgdGhpcy5oYW5kbGVNb3ZlTm9ybWFsRXZlbnQoZGF0YSwgdHJhbnNwb3J0RGF5LCB3ZWVrLCB0aGlzLnBsYW5UcmFuc3BvcnRXZWVrQXJyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGF3YWl0IHRoaXMucGxhblNlbGVjdGVkTGluZXModHJhbnNwb3J0RGF5LCB3ZWVrKVxyXG4gICAgfVxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWxsb3dEcm9wKGV2OiBEcmFnRXZlbnQsIHRyYW5zcG9ydERheTogUGxhbm5pbmdUcmFuc3BvcnRXZWVrRGF5KSB7XHJcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgaWYgKHRoaXMuX2RlbGl2ZXJ5UGxhbm5pbmdTZXJ2aWNlLmRyYWdnaW5nICYmIHRyYW5zcG9ydERheS5tYXhNaW51dGVzID4gMCAmJiB0cmFuc3BvcnREYXkuYXZhaWxhYmxlT25EYXRlKSB7XHJcbiAgICAgIHJldHVybiB0cmFuc3BvcnREYXkubWludXRlcyArIHRyYW5zcG9ydERheS5taW51dGVzIDwgdHJhbnNwb3J0RGF5Lm1heE1pbnV0ZXMgJiYgdHJhbnNwb3J0RGF5Lm1heE9yZGVyQW1vdW50IDwgdHJhbnNwb3J0RGF5Lm9yZGVyQW1vdW50ICYmIHRyYW5zcG9ydERheS5hdmFpbGFibGVPbkRhdGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIHNldENvbE51bSgpIHtcclxuICAgIGlmICh0aGlzLl9kZWxpdmVyeVBsYW5uaW5nU2VydmljZS52aWV3TW9kZSA9PT0gRGVsaXZlcnlQbGFubmluZ1ZpZXdNb2Rlcy5TaWRlYmFyKSB7XHJcbiAgICAgIHRoaXMuY29sdW1uTnVtID0gMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29sdW1uTnVtID0gMztcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgZHJhZ0VuZChldjogRHJhZ0V2ZW50KSB7XHJcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy5fZGVsaXZlcnlQbGFubmluZ1NlcnZpY2UuZHJhZ2dpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmaWx0ZXJXZWVrQXJyYXkod2Vla0FycmF5OiBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXlbXSkge1xyXG4gICAgcmV0dXJuIHdlZWtBcnJheS5zbGljZSgwLCB0aGlzLmNvbHVtbk51bSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlRGF0ZVJhbmdlQ2hhbmdlKG5ld0RhdGU6IERhdGUpIHtcclxuICAgIHRoaXMuX2RlbGl2ZXJ5UGxhbm5pbmdTZXJ2aWNlLmN1cnJlbnRTdGFydERhdGUgPSBuZXdEYXRlO1xyXG4gICAgdGhpcy5yZXNldFBsYW5uaW5nVHJhbnNwb3J0RXZlbnQuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGhhbmRsZURlbGV0ZU9yZGVyKGRlbGV0ZVJlc3VsdDogW1BsYW5PcmRlciwgUGxhbm5pbmdUcmFuc3BvcnRXZWVrRGF5XSwgcGxhbm5pbmdUcmFuc3BvcnRXZWVrOiBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXlbXSkge1xyXG4gICAgbGV0IG9sZFdlZWs6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheVtdID0gcGxhbm5pbmdUcmFuc3BvcnRXZWVrO1xyXG4gICAgbGV0IG9yZGVyID0gZGVsZXRlUmVzdWx0WzBdO1xyXG4gICAgaWYgKG9yZGVyKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuZ2V0VHJhbnNwb3J0T3JkZXJzKGRlbGV0ZVJlc3VsdFsxXSk7XHJcbiAgICAgIGF3YWl0IHRoaXMuZ2V0T3JkZXJMaW5lc1BsYW5uZWQob3JkZXIpO1xyXG4gICAgICBpZiAoZGVsZXRlUmVzdWx0WzBdLmxpbmVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLl9kZWxpdmVyeVBsYW5uaW5nU2VydmljZS5kZWxldGluZ09yZGVyID0gb3JkZXI7XHJcbiAgICAgICAgZGVsZXRlUmVzdWx0WzFdLnBsYW5uZWRPcmRlcnMuc3BsaWNlKGRlbGV0ZVJlc3VsdFsxXS5wbGFubmVkT3JkZXJzLmluZGV4T2Yob3JkZXIpLCAxKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVBsYW5uaW5nVHJhbnNwb3J0RXZlbnQuZW1pdCh7XHJcbiAgICAgICAgICBvbGRXZWVrOiBvbGRXZWVrLFxyXG4gICAgICAgICAgd2VlazogcGxhbm5pbmdUcmFuc3BvcnRXZWVrLFxyXG4gICAgICAgICAgYWN0aW9uOiBEZWxpdmVyeVBsYW5uaW5nVXBkYXRlQWN0aW9ucy5EZWxldGVQbGFubmVkT3JkZXJcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhd2FpdCB0aGlzLl9kaWFsb2cuc2hvd0Vycm9yKFwiTk9fTElORVNfVE9fREVMRVRFXCIsIHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlRGVsZXRlTGluZShkZWxldGVSZXN1bHQ6IHtcclxuICAgIG9yZGVyOiBQbGFuT3JkZXIsXHJcbiAgICBsaW5lOiBQbGFuT3JkZXJMaW5lXHJcbiAgfSwgd2Vla0RheTogUGxhbm5pbmdUcmFuc3BvcnRXZWVrRGF5LCB0cmFuc3BvcnRXZWVrUm93OiBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXlbXSkge1xyXG4gICAgbGV0IG9sZFdlZWsgPSB0cmFuc3BvcnRXZWVrUm93O1xyXG4gICAgbGV0IG9yZGVyID0gd2Vla0RheS5wbGFubmVkT3JkZXJzLmZpbmQob3JkZXIgPT4gb3JkZXIudHJhbnNJZCA9PT0gZGVsZXRlUmVzdWx0Lm9yZGVyLnRyYW5zSWQpO1xyXG4gICAgb3JkZXIubGluZXMgPSBvcmRlci5saW5lcy5maWx0ZXIobGluZSA9PiBsaW5lLm9yaWdpbmFsTGluZU5yICE9PSBkZWxldGVSZXN1bHQubGluZS5vcmlnaW5hbExpbmVOcik7XHJcbiAgICBpZiAob3JkZXIubGluZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHdlZWtEYXkucGxhbm5lZE9yZGVycy5zcGxpY2Uod2Vla0RheS5wbGFubmVkT3JkZXJzLmluZGV4T2Yob3JkZXIpLCAxKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2RlbGl2ZXJ5UGxhbm5pbmdTZXJ2aWNlLmRlbGV0aW5nT3JkZXIgPSBvcmRlcjtcclxuICAgIHRoaXMudXBkYXRlUGxhbm5pbmdUcmFuc3BvcnRFdmVudC5lbWl0KHtcclxuICAgICAgb2xkV2Vlazogb2xkV2VlayxcclxuICAgICAgd2VlazogdHJhbnNwb3J0V2Vla1JvdyxcclxuICAgICAgYWN0aW9uOiBEZWxpdmVyeVBsYW5uaW5nVXBkYXRlQWN0aW9ucy5EZWxldGVQbGFubmVkTGluZXNcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldE9yZGVyTGluZXNQbGFubmVkKG9yZGVyOiBQbGFuT3JkZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCByZXF1ZXN0OiBPcmRlckxpbmVzUGxhbm5lZFJlcXVlc3QgPSBuZXcgT3JkZXJMaW5lc1BsYW5uZWRSZXF1ZXN0KCk7XHJcbiAgICBsZXQgZmlsdGVyT2JqOiBQbGFubmluZ0ZpbHRlck9iamVjdCA9IG5ldyBQbGFubmluZ0ZpbHRlck9iamVjdCgpO1xyXG4gICAgcmVxdWVzdC5wbGFubmVkID0gdHJ1ZTtcclxuICAgIHJlcXVlc3QucGxhbm5pbmdJZCA9IHRoaXMuX2RlbGl2ZXJ5UGxhbm5pbmdTZXJ2aWNlLmN1cnJlbnRQbGFubmluZy5wbGFubmluZ0lkO1xyXG4gICAgcmVxdWVzdC50cmFuc0lkID0gb3JkZXIudHJhbnNJZDtcclxuICAgIHJlcXVlc3QucGxhbm5lZExpbmVJZCA9IG9yZGVyLnBsYW5uZWRMaW5lSWQ7XHJcbiAgICBmaWx0ZXJPYmoub25seUN1cnJlbnRXZWVrID0gdHJ1ZTtcclxuICAgIGZpbHRlck9iai5iZWdpbkN1cnJlbnRXZWVrID0gbmV3IERhdGUoKTtcclxuICAgIGZpbHRlck9iai5jaGVja09yZGVyTGluZXMgPSAxO1xyXG4gICAgcmVxdWVzdC5maWx0ZXJPYmplY3QgPSBmaWx0ZXJPYmo7XHJcbiAgICBpZiAoIW9yZGVyLmxpbmVzKSB7XHJcbiAgICAgIG9yZGVyLmxpbmVzID0gW107XHJcbiAgICB9XHJcbiAgICBvcmRlci5saW5lcy5wdXNoKC4uLmF3YWl0IHRoaXMuX3RyYW5zYWN0aW9uQ29uLmdldE9yZGVyTGluZXNQbGFubmVkKHJlcXVlc3QpKTtcclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0VHJhbnNwb3J0T3JkZXJzKCB0cmFuc3BvcnREYXk6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IHJlcXVlc3Q6IEdldFRyYW5zcG9ydE9yZGVyc1JlcXVlc3QgPSBuZXcgR2V0VHJhbnNwb3J0T3JkZXJzUmVxdWVzdCgpO1xyXG4gICAgcmVxdWVzdC5wbGFubmluZ0lkID0gdGhpcy5fZGVsaXZlcnlQbGFubmluZ1NlcnZpY2UuY3VycmVudFBsYW5uaW5nLnBsYW5uaW5nSWQ7XHJcbiAgICByZXF1ZXN0LmRhdGUgPSB0cmFuc3BvcnREYXkuZGF0ZTtcclxuICAgIHJlcXVlc3QudHJhbnNwb3J0SWQgPSB0cmFuc3BvcnREYXkudHJhbnNwb3J0LnRyYW5zcG9ydElkO1xyXG4gICAgdHJhbnNwb3J0RGF5LnBsYW5uZWRPcmRlcnMgPSBhd2FpdCB0aGlzLl90cmFuc2FjdGlvbkNvbi5nZXRUcmFuc3BvcnRPcmRlcnMocmVxdWVzdCk7XHJcbiAgICB0cmFuc3BvcnREYXkub3JkZXJzTG9hZGVkID0gdHJ1ZTtcclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcGxhbk9yZGVyTGluZXMob3JkZXI6IFBsYW5PcmRlciwgdHJhbnNwb3J0RGF5OiBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXksIHdlZWs6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheVtdKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgb2xkV2VlazogUGxhbm5pbmdUcmFuc3BvcnRXZWVrRGF5W10gPSB3ZWVrO1xyXG4gICAgaWYgKG9yZGVyLmxpbmVzPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIG9yZGVyLmxpbmVzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgb3JkZXIudGFza3MgPSBbXTtcclxuICAgICAgb3JkZXIudGFza3NMb2FkZWQgPSB0cnVlO1xyXG4gICAgICBvcmRlci5saW5lcy5mb3JFYWNoKGxpbmUgPT4ge1xyXG4gICAgICAgIGxpbmUuc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKCF0cmFuc3BvcnREYXkucGxhbm5lZE9yZGVycykge1xyXG4gICAgICAgIHRyYW5zcG9ydERheS5wbGFubmVkT3JkZXJzID0gW29yZGVyXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIXRyYW5zcG9ydERheS5wbGFubmVkT3JkZXJzLmZpbmQoKHBsYW5uZWRPcmRlcjogUGxhbk9yZGVyKSA9PiBwbGFubmVkT3JkZXIudHJhbnNJZCA9PT0gb3JkZXIudHJhbnNJZCkpIHtcclxuICAgICAgICAgIHRyYW5zcG9ydERheS5wbGFubmVkT3JkZXJzLnB1c2gob3JkZXIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgcGxhbm5lZE9yZGVyOiBQbGFuT3JkZXIgPSB0cmFuc3BvcnREYXkucGxhbm5lZE9yZGVycy5maW5kKCAocGxhbm5lZE9yZGVyOiBQbGFuT3JkZXIpID0+IHBsYW5uZWRPcmRlci50cmFuc0lkID09PSBvcmRlci50cmFuc0lkKTtcclxuICAgICAgICAgIGlmIChvcmRlci5zdGFydFRpbWUgIT09IHRyYW5zcG9ydERheS5wbGFubmVkT3JkZXJzLmZpbmQoKHBsYW5uZWRPcmRlcjogUGxhbk9yZGVyKSA9PiBwbGFubmVkT3JkZXIudHJhbnNJZCA9PT0gb3JkZXIudHJhbnNJZCkuc3RhcnRUaW1lKSB7XHJcblxyXG4gICAgICAgICAgICBpZighb3JkZXIucGFydERlbGl2ZXJ5KSB7XHJcbiAgICAgICAgICAgICAgb3JkZXIuc3RhcnRUaW1lID0gcGxhbm5lZE9yZGVyLnN0YXJ0VGltZTtcclxuICAgICAgICAgICAgICBvcmRlci5lbmRUaW1lID0gcGxhbm5lZE9yZGVyLmVuZFRpbWU7XHJcbiAgICAgICAgICAgICAgdHJhbnNwb3J0RGF5LnBsYW5uZWRPcmRlcnMuc3BsaWNlKHRyYW5zcG9ydERheS5wbGFubmVkT3JkZXJzLmluZGV4T2YocGxhbm5lZE9yZGVyKSk7XHJcbiAgICAgICAgICAgICAgdHJhbnNwb3J0RGF5LnBsYW5uZWRPcmRlcnMucHVzaChvcmRlcik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdHJhbnNwb3J0RGF5LnBsYW5uZWRPcmRlcnMucHVzaChvcmRlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRyYW5zcG9ydERheS5wbGFubmVkT3JkZXJzLnNwbGljZSh0cmFuc3BvcnREYXkucGxhbm5lZE9yZGVycy5pbmRleE9mKHRyYW5zcG9ydERheS5wbGFubmVkT3JkZXJzLmZpbmQoKHBsYW5uZWRPcmRlcjogUGxhbk9yZGVyKSA9PiBwbGFubmVkT3JkZXIudHJhbnNJZCA9PT0gb3JkZXIudHJhbnNJZCkpLCAxKTtcclxuICAgICAgICAgICAgdHJhbnNwb3J0RGF5LnBsYW5uZWRPcmRlcnMucHVzaChvcmRlcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXBkYXRlUGxhbm5pbmdUcmFuc3BvcnRFdmVudC5lbWl0KHtcclxuICAgICAgICBvbGRXZWVrOiBvbGRXZWVrLFxyXG4gICAgICAgIHdlZWs6IHdlZWssXHJcbiAgICAgICAgYWN0aW9uOiBEZWxpdmVyeVBsYW5uaW5nVXBkYXRlQWN0aW9ucy5QbGFuTGluZXNcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBhd2FpdCB0aGlzLl9kaWFsb2cuc2hvd0Vycm9yKFwiTk9fTElORVNfVE9fUExBTlwiLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBwbGFuU2VsZWN0ZWRMaW5lcyh0cmFuc3BvcnREYXk6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheSwgd2VlazogUGxhbm5pbmdUcmFuc3BvcnRXZWVrRGF5W10pOiBQcm9taXNlPHZvaWQ+IHtcclxuXHJcbiAgICBsZXQgcGxhbk9yZGVyID0gYXdhaXQgdGhpcy5fdHJhbnNhY3Rpb25Db24uZ2V0UGxhbk9yZGVyKHRoaXMuX3RyYW5zYWN0aW9uLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQpO1xyXG4gICAgYXdhaXQgdGhpcy5nZXRTZXF1ZW5jZU9yZGVyVmFsdWUocGxhbk9yZGVyKTtcclxuICAgIGF3YWl0IHRoaXMuZ2V0T3JkZXJMaW5lc1BsYW5uZWQocGxhbk9yZGVyKTtcclxuXHJcblxyXG4gICAgaWYocGxhbk9yZGVyLnBhcnREZWxpdmVyeSkge1xyXG5cclxuICAgICAgbGV0IHNlbGVjdGVkTGluZXM6IFRyYW5zYWN0aW9uTGluZUluZm9bXSA9IHRoaXMuX3RyYW5zYWN0aW9uLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkxpbmVzLmZpbHRlcigodHJhbnNMaW5lczogVHJhbnNhY3Rpb25MaW5lSW5mbykgPT4gdHJhbnNMaW5lcy5zZWxlY3RlZCk7XHJcblxyXG5cclxuICAgICAgLy9Eb2VzIHRoZSBvcmRlciBhbHJlYWR5IGV4aXN0P1xyXG4gICAgICBpZiAodHJhbnNwb3J0RGF5Py5wbGFubmVkT3JkZXJzPy5maW5kKG9yZGVyID0+IG9yZGVyLnRyYW5zSWQgPT09IHBsYW5PcmRlci50cmFuc0lkKSkge1xyXG4gICAgICAgIC8vWWVzIHRoZSBvcmRlciBleGlzdHNcclxuXHJcbiAgICAgICAgLy9JZiB0aGUgbGluZShzKSB3ZSdyZSB0cnlpbmcgdG8gcGxhbiBhbHJlYWR5IGFyZSBwbGFubmVkIHdlIG5lZWQgdG8gdmFsaWRhdGUgaWYgd2UgbmVlZCB0byBwbGFuIGFueXdheVxyXG4gICAgICAgIGxldCBjYW50UGxhblNlbGVjdGVkTGluZXM6IFBsYW5PcmRlckxpbmVbXSA9IFtdO1xyXG4gICAgICAgIGlmIChzZWxlY3RlZExpbmVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRyYW5zcG9ydERheS5wbGFubmVkT3JkZXJzLmZpbmQoKHBsYW5uZWRPcmRlcjogUGxhbk9yZGVyKSA9PiBwbGFubmVkT3JkZXIudHJhbnNJZCA9PT0gcGxhbk9yZGVyLnRyYW5zSWQpLmxpbmVzLmZvckVhY2goKHBsYW5uZWRMaW5lOiBQbGFuT3JkZXJMaW5lKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZExpbmVzLmZpbmQoKHNlbGVjdGVkTGluZTogVHJhbnNhY3Rpb25MaW5lSW5mbykgPT4gc2VsZWN0ZWRMaW5lLmxpbmVOciA9PT0gcGxhbm5lZExpbmUub3JpZ2luYWxMaW5lTnIpKSB7XHJcbiAgICAgICAgICAgICAgY2FudFBsYW5TZWxlY3RlZExpbmVzLnB1c2gocGxhbm5lZExpbmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBpZiAoY2FudFBsYW5TZWxlY3RlZExpbmVzLmxlbmd0aCA9PT0gcGxhbk9yZGVyLmxpbmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9kaWFsb2cuc2hvd0Vycm9yKFwiTk9fTElORVNfVE9fUExBTlwiLCB0cnVlKTtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuX2RpYWxvZy5zaG93RXJyb3IoXCJOT19MSU5FU19TRUxFQ1RFRFwiLCB0cnVlKTtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHBsYW5uZWRPcmRlcjogUGxhbk9yZGVyID0gdHJhbnNwb3J0RGF5LnBsYW5uZWRPcmRlcnMuZmluZCgocGxhbm5lZE9yZGVyOiBQbGFuT3JkZXIpID0+IHBsYW5uZWRPcmRlci50cmFuc0lkID09PSBwbGFuT3JkZXIudHJhbnNJZCk7XHJcblxyXG4gICAgICAgIC8vQWxsIGxpbmVzIHRoYXQgbmVlZCB0byBiZSBwbGFubmVkIGZvciBhbiBvcmRlciBhcmUgaW4gcGxhbk9yZGVyIG5vd1xyXG4gICAgICAgIC8vV2hpY2ggbWVhbnMgdGhhdCB3ZSBqdXN0IGZpbHRlciB0aGUgbGluZXMgb3V0IHRoYXQgRE9OJ1QgbWF0Y2ggYSBzZWxlY3RlZCBsaW5lIEFORCBhcmUgcGxhbm5lZFxyXG4gICAgICAgIHBsYW5PcmRlci5saW5lcy5maWx0ZXIoXHJcbiAgICAgICAgICAodG9QbGFuTGluZTogUGxhbk9yZGVyTGluZSkgPT4gIXBsYW5uZWRPcmRlci5saW5lcy5maW5kKChwbGFubmVkT3JkZXJMaW5lOiBQbGFuT3JkZXJMaW5lKSA9PiBwbGFubmVkT3JkZXJMaW5lLm9yaWdpbmFsTGluZU5yID09PSB0b1BsYW5MaW5lLm9yaWdpbmFsTGluZU5yKVxyXG4gICAgICAgICAgICAmJiAhc2VsZWN0ZWRMaW5lcy5maW5kKChzZWxlY3RlZExpbmU6IFRyYW5zYWN0aW9uTGluZUluZm8pID0+IHNlbGVjdGVkTGluZS5saW5lTnIgPT09IHRvUGxhbkxpbmUub3JpZ2luYWxMaW5lTnIpKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvL09yZGVyIGRvZXMgbm90IGV4aXN0LCBsZXRzIHByZXBhcmUgaXQgd2l0aCB0aGUgc2VsZWN0ZWQgbGluZXNcclxuICAgICAgICAvL0ZpbHRlciB0aGUgbGluZXMgZm9yIG9ubHkgdGhlIHNlbGVjdGVkIG9uZXNcclxuICAgICAgICBwbGFuT3JkZXIubGluZXMgPSBwbGFuT3JkZXIubGluZXMuZmlsdGVyKHBsYW5uZWRPcmRlckxpbmUgPT4gc2VsZWN0ZWRMaW5lcy5maW5kKChzZWxlY3RlZExpbmU6IFRyYW5zYWN0aW9uTGluZUluZm8pID0+IHBsYW5uZWRPcmRlckxpbmUub3JpZ2luYWxMaW5lTnIgPT09IHNlbGVjdGVkTGluZS5saW5lTnIpKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL1NlbmQgdGhlIHByZXBhcmVkIG9yZGVyIHRvIHRoZVxyXG4gICAgdGhpcy5vcGVuUGxhbm5pbmdQb3B1cChwbGFuT3JkZXIsIHRyYW5zcG9ydERheSwgd2Vlayk7XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFNlcXVlbmNlT3JkZXJWYWx1ZShvcmRlcjogUGxhbk9yZGVyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBvcmRlci5wbGFubmVkTGluZUlkID0gYXdhaXQgdGhpcy5fZGVsaXZlcnlQbGFubmluZ1NlcnZpY2UuZ2V0T3JkZXJTZXF1ZW5jZVZhbHVlKCk7XHJcbiAgICBvcmRlci5jaGFpbmVkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIGFzeW5jIGhhbmRsZVBvcHVwUGxhbkV2ZW50KGV2ZW50OiBbUGxhbk9yZGVyLCBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXksIFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheVtdXSkge1xyXG5cclxuXHJcbiAgICB0aGlzLnNob3dOb3RlRGlhbG9nID0gZmFsc2U7XHJcbiAgICBhd2FpdCB0aGlzLmdldFRyYW5zcG9ydE9yZGVycyhldmVudFsxXSk7XHJcbiAgICBhd2FpdCB0aGlzLmdldFNlcXVlbmNlT3JkZXJWYWx1ZShldmVudFswXSlcclxuICAgIGF3YWl0IHRoaXMuZ2V0T3JkZXJMaW5lc1BsYW5uZWQoZXZlbnRbMF0pXHJcbiAgICBhd2FpdCB0aGlzLnBsYW5PcmRlckxpbmVzKGV2ZW50WzBdLCBldmVudFsxXSwgZXZlbnRbMl0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZVNldHRpbmdzU2F2ZShjaGFuZ2VkOiBib29sZWFuKSB7XHJcbiAgICBpZiAoY2hhbmdlZCkge1xyXG4gICAgICAvLyB0aGlzLnVwZGF0ZVBsYW5uaW5nVHJhbnNwb3J0RXZlbnQuZW1pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9wZW5TZXR0aW5nc0RpYWxvZyh0cmFuc3BvcnREYXk6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFRyYW5zcG9ydERheSA9IHRyYW5zcG9ydERheTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkVHJhbnNwb3J0RGF5KSB7XHJcbiAgICAgIHRoaXMuc2hvd1NldHRpbmdzRGlhbG9nID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBoYW5kbGVDYWxlbmRhclBsYW5FdmVudChkYXRhOiB7XHJcbiAgICBjdXJyZW50SG91cjogc3RyaW5nLFxyXG4gICAgZGF0YTogc3RyaW5nXHJcbiAgfSwgdHJhbnNwb3J0V2Vla0RheTogUGxhbm5pbmdUcmFuc3BvcnRXZWVrRGF5LCB3ZWVrOiBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXlbXSkge1xyXG4gICAgbGV0IHBsYW5PcmRlcjogUGxhbk9yZGVyO1xyXG4gICAgaWYgKGRhdGEuZGF0YSA9PT0gXCJmYWxzZVwiICYmIHRoaXMuX2RlbGl2ZXJ5UGxhbm5pbmdTZXJ2aWNlLmN1cnJlbnRUcmFuc0lkKSB7XHJcbiAgICAgIHBsYW5PcmRlciA9IGF3YWl0IHRoaXMuX3RyYW5zYWN0aW9uQ29uLmdldFBsYW5PcmRlcih0aGlzLl9kZWxpdmVyeVBsYW5uaW5nU2VydmljZT8uY3VycmVudFRyYW5zSWQpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwbGFuT3JkZXIgPSBhd2FpdCB0aGlzLl90cmFuc2FjdGlvbkNvbi5nZXRQbGFuT3JkZXIocGFyc2VJbnQoZGF0YS5kYXRhKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBsYW5PcmRlciAmJiBkYXRhLmN1cnJlbnRIb3VyKSB7XHJcblxyXG5cclxuICAgICAgcGxhbk9yZGVyLnN0YXJ0VGltZSA9IHRoaXMuY2FsY3VsYXRlU3RhcnRUaW1lKHRyYW5zcG9ydFdlZWtEYXksIGRhdGEuY3VycmVudEhvdXIpO1xyXG4gICAgICBwbGFuT3JkZXIuZW5kVGltZSA9IHRoaXMuY2FsY3VsYXRlRW5kVGltZShwbGFuT3JkZXIuc3RhcnRUaW1lLCBkYXRhLmN1cnJlbnRIb3VyLCBwbGFuT3JkZXIpO1xyXG5cclxuICAgICAgYXdhaXQgdGhpcy5nZXRUcmFuc3BvcnRPcmRlcnModHJhbnNwb3J0V2Vla0RheSk7XHJcbiAgICAgIGF3YWl0IHRoaXMuZ2V0U2VxdWVuY2VPcmRlclZhbHVlKHBsYW5PcmRlcilcclxuICAgICAgYXdhaXQgdGhpcy5nZXRPcmRlckxpbmVzUGxhbm5lZChwbGFuT3JkZXIpXHJcbiAgICAgIGF3YWl0IHRoaXMucGxhbk9yZGVyTGluZXMocGxhbk9yZGVyLCB0cmFuc3BvcnRXZWVrRGF5LCB3ZWVrKTtcclxuICAgICAgaWYgKGRhdGEuZGF0YSA9PT0gXCJmYWxzZVwiICYmIHRoaXMuX3RyYW5zYWN0aW9uLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udXVpZCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3RyYW5zYWN0aW9uLmdldFRyYW5zYWN0aW9uQnlJZCh0aGlzLl9kZWxpdmVyeVBsYW5uaW5nU2VydmljZS5jdXJyZW50VHJhbnNJZCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fdHJhbnNhY3Rpb24uc2F2ZVRyYW5zYWN0aW9uKCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fdHJhbnNhY3Rpb24uY2hlY2tSZWZUcmFuc2FjdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FsY3VsYXRlU3RhcnRUaW1lKHRyYW5zcG9ydFdlZWtEYXk6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheSwgY3VycmVudEhvdXI6IHN0cmluZyk6IERhdGUge1xyXG4gICAgbGV0IHN0YXJ0RGF0ZTogRGF0ZSA9IG5ldyBEYXRlKHRyYW5zcG9ydFdlZWtEYXkuZGF0ZSk7XHJcbiAgICBsZXQgc3RhcnRUaW1lOiBudW1iZXIgPSBwYXJzZUludChjdXJyZW50SG91ci5zcGxpdChcIjpcIilbMF0pXHJcbiAgICBzdGFydERhdGUuc2V0SG91cnMoc3RhcnRUaW1lKTtcclxuICAgIHN0YXJ0RGF0ZS5zZXRNaW51dGVzKHBhcnNlSW50KGN1cnJlbnRIb3VyLnNwbGl0KFwiOlwiKVsxXSkgPiAwID8gcGFyc2VJbnQoY3VycmVudEhvdXIuc3BsaXQoXCI6XCIpWzFdKSA6IDApO1xyXG4gICAgc3RhcnREYXRlLnNldFNlY29uZHMoMCk7XHJcblxyXG4gICAgcmV0dXJuIHN0YXJ0RGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYWxjdWxhdGVFbmRUaW1lKHN0YXJ0RGF0ZTogRGF0ZSwgY3VycmVudEhvdXI6IHN0cmluZywgcGxhbk9yZGVyOiBQbGFuT3JkZXIpOiBEYXRlIHtcclxuICAgIGxldCBlbmRUaW1lOiBEYXRlID0gbmV3IERhdGUoc3RhcnREYXRlKTtcclxuXHJcbiAgICBsZXQgc3BsaXRIb3VyID0gY3VycmVudEhvdXIuc3BsaXQoXCI6XCIpO1xyXG4gICAgY29uc3QgbmV3RW5kTWludXRlcyA9IHNwbGl0SG91clsxXSA9PT0gXCIwMFwiID8gMzAgOiAwO1xyXG4gICAgY29uc3QgbmV3RW5kSG91ciA9IHNwbGl0SG91clsxXSA9PT0gXCIzMFwiID8gKHBhcnNlSW50KHNwbGl0SG91clswXSkgKyAxKSA6IHBhcnNlSW50KHNwbGl0SG91clswXSk7XHJcbiAgICBlbmRUaW1lLnNldEhvdXJzKG5ld0VuZEhvdXIpO1xyXG4gICAgZW5kVGltZS5zZXRNaW51dGVzKG5ld0VuZE1pbnV0ZXMpO1xyXG4gICAgbGV0IGFzc2VtYmx5VGltZSA9IHRoaXMuX2RlbGl2ZXJ5UGxhbm5pbmdTZXJ2aWNlLnRvdGFsQXNzZW1ibHlUaW1lKHBsYW5PcmRlcikgKiA2MCAqIDEwMDA7XHJcbiAgICBlbmRUaW1lLnNldFRpbWUoZW5kVGltZS5nZXRUaW1lKCkgKyBhc3NlbWJseVRpbWUpO1xyXG5cclxuICAgIHJldHVybiBlbmRUaW1lO1xyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBvcGVuUGxhbm5pbmdQb3B1cChwbGFuT3JkZXI6IFBsYW5PcmRlciwgdHJhbnNwb3J0RGF5OiBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXksIHdlZWs6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheVtdKSB7XHJcbiAgICB0aGlzLnNob3dOb3RlRGlhbG9nID0gdHJ1ZTtcclxuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgaWYgKHRoaXMucGxhbm5pbmdQb3B1cFJlZikge1xyXG4gICAgICB0aGlzLnBsYW5uaW5nUG9wdXBSZWYucGxhbk9yZGVyID0gcGxhbk9yZGVyO1xyXG4gICAgICB0aGlzLnBsYW5uaW5nUG9wdXBSZWYudHJhbnNwb3J0RGF5ID0gdHJhbnNwb3J0RGF5O1xyXG4gICAgICB0aGlzLnBsYW5uaW5nUG9wdXBSZWYud2VlayA9IHdlZWs7XHJcbiAgICAgIHRoaXMucGxhbm5pbmdQb3B1cFJlZi50cmFuc2FjdGlvbiA9IHRoaXMuX3RyYW5zYWN0aW9uLmN1cnJlbnRUcmFuc2FjdGlvbjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVBdmFpbGFiaWxpdHlDaGVja2VkKHZhbHVlOiB7IHRyYW5zcG9ydERheTogUGxhbm5pbmdUcmFuc3BvcnRXZWVrRGF5LCBhdmFpbGFibGU6IGJvb2xlYW4gfSkge1xyXG4gICAgdGhpcy5hdmFpbGFiaWxpdHkucHVzaCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2hlY2tBdmFpbGFibGUodHJhbnNwb3J0RGF5OiBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXkpIHtcclxuICAgIGxldCB0cmFuc3BvcnQgPSB0aGlzLmF2YWlsYWJpbGl0eS5maW5kKHRyYW5zcG9ydE9iamVjdCA9PiB0cmFuc3BvcnRPYmplY3QudHJhbnNwb3J0RGF5ID09PSB0cmFuc3BvcnREYXkpO1xyXG4gICAgcmV0dXJuIHRyYW5zcG9ydCAmJiAhdHJhbnNwb3J0LmF2YWlsYWJsZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVUaW1lQ2hhbmdlRXZlbnQodHJhbnNwb3J0RGF5OiBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXksIHdlZWs6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheVtdLCBvYmo6IFBsYW5PcmRlcikge1xyXG4gICAgbGV0IG9sZFdlZWs6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheVtdID0gd2VlaztcclxuICAgIGxldCBvcmRlcjogUGxhbk9yZGVyID0gdHJhbnNwb3J0RGF5LnBsYW5uZWRPcmRlcnMuZmluZChwbGFuT3JkZXIgPT4gcGxhbk9yZGVyLnRyYW5zSWQgPT09IG9iai50cmFuc0lkKTtcclxuICAgIG9yZGVyLnN0YXJ0VGltZSA9IG5ldyBEYXRlKG9ialsnc3RhcnRUaW1lJ10pO1xyXG4gICAgb3JkZXIuZW5kVGltZSA9IG5ldyBEYXRlKG9ialsnZW5kVGltZSddKTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVBsYW5uaW5nVHJhbnNwb3J0RXZlbnQuZW1pdCh7b2xkV2Vlazogb2xkV2Vlaywgd2Vlazogd2VlaywgYWN0aW9uOiB0aGlzLnBsYW5uaW5nQWN0aW9ucy5QbGFuT3JkZXJ9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBoYW5kbGVNb3ZlRXZlbnQobW92ZURhdGE6IHtcclxuICAgIGhvdXI6IHN0cmluZyxcclxuICAgIHNjaGVkdWxlZE9iamVjdDogT2JqZWN0XHJcbiAgfSwgdHJhbnNwb3J0OiBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXksIHdlZWs6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheVtdLCB3ZWVrQXJyOiBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXlbXVtdKSB7XHJcbiAgICBsZXQgcGxhbk9yZGVyOiBQbGFuT3JkZXIgPSBhd2FpdCB0aGlzLl90cmFuc2FjdGlvbkNvbi5nZXRQbGFuT3JkZXIobW92ZURhdGEuc2NoZWR1bGVkT2JqZWN0WydvYmonXVsnaWQnXSk7XHJcbiAgICAvL3JlbW92ZSBmcm9tIG9sZCB0cmFuc3BvcnRcclxuICAgIHdlZWtBcnIuZm9yRWFjaCgoKHJvdzogUGxhbm5pbmdUcmFuc3BvcnRXZWVrRGF5W10pID0+IHtcclxuICAgICAgcm93LmZvckVhY2goKHdlZWtEYXk6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheSkgPT4ge1xyXG4gICAgICAgIGlmICh3ZWVrRGF5Py5wbGFubmVkT3JkZXJzPy5maW5kKG9yZGVyID0+IG9yZGVyLnRyYW5zSWQgPT09IHBsYW5PcmRlci50cmFuc0lkKSkge1xyXG4gICAgICAgICAgd2Vla0RheS5wbGFubmVkT3JkZXJzLnNwbGljZSh3ZWVrRGF5LnBsYW5uZWRPcmRlcnMuaW5kZXhPZihwbGFuT3JkZXIpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSkpXHJcblxyXG4gICAgaWYgKHBsYW5PcmRlcikge1xyXG4gICAgICAvL3Jlc3RvcmUgb3JkZXJcclxuICAgICAgYXdhaXQgdGhpcy5fdHJhbnNhY3Rpb25Db24ucmVzdG9yZURlbGl2ZXJ5U2V0dGluZ3MoW3BsYW5PcmRlcl0pO1xyXG5cclxuICAgICAgLy9zZXQgbmV3IGRhdGUgZm9yIG9yZGVyIGFuZCBwbGFuIGl0IG9uIG5ldyB0cmFuc3BvcnRcclxuICAgICAgbGV0IG5ld0RhdGU6IERhdGUgPSBuZXcgRGF0ZSh0cmFuc3BvcnQuZGF0ZSk7XHJcbiAgICAgIGxldCBzcGxpdFRpbWU6IHN0cmluZ1tdID0gbW92ZURhdGEuaG91ci5zcGxpdChcIjpcIik7XHJcbiAgICAgIG5ld0RhdGUuc2V0SG91cnMocGFyc2VJbnQoc3BsaXRUaW1lWzBdKSk7XHJcbiAgICAgIG5ld0RhdGUuc2V0TWludXRlcyhwYXJzZUludChzcGxpdFRpbWVbMV0pKTtcclxuICAgICAgbmV3RGF0ZS5zZXRTZWNvbmRzKDApO1xyXG4gICAgICBwbGFuT3JkZXIuc3RhcnRUaW1lID0gbmV3RGF0ZTtcclxuICAgICAgbGV0IGVuZERhdGUgPSBuZXcgRGF0ZShwbGFuT3JkZXIuc3RhcnRUaW1lKTtcclxuICAgICAgcGxhbk9yZGVyLmVuZFRpbWUgPSB0aGlzLl9kZWxpdmVyeVBsYW5uaW5nU2VydmljZS5hZGRNaW51dGVzKGVuZERhdGUsIG1vdmVEYXRhLnNjaGVkdWxlZE9iamVjdFsnb2JqJ11bJ2hlaWdodCddKTtcclxuICAgICAgYXdhaXQgdGhpcy5nZXRUcmFuc3BvcnRPcmRlcnModHJhbnNwb3J0KTtcclxuICAgICAgYXdhaXQgdGhpcy5nZXRTZXF1ZW5jZU9yZGVyVmFsdWUocGxhbk9yZGVyKVxyXG4gICAgICBhd2FpdCB0aGlzLmdldE9yZGVyTGluZXNQbGFubmVkKHBsYW5PcmRlcilcclxuICAgICAgYXdhaXQgdGhpcy5wbGFuT3JkZXJMaW5lcyhwbGFuT3JkZXIsIHRyYW5zcG9ydCwgd2Vlayk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgaGFuZGxlTW92ZU5vcm1hbEV2ZW50KHRyYW5zSWQ6IHN0cmluZywgdHJhbnNwb3J0OiBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXksIHdlZWs6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheVtdLCB3ZWVrQXJyOiBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXlbXVtdKSB7XHJcbiAgICBsZXQgcGxhbk9yZGVyOiBQbGFuT3JkZXIgPSBhd2FpdCB0aGlzLl90cmFuc2FjdGlvbkNvbi5nZXRQbGFuT3JkZXIocGFyc2VJbnQodHJhbnNJZCkpO1xyXG4gICAgLy9yZW1vdmUgZnJvbSBvbGQgdHJhbnNwb3J0XHJcbiAgICB3ZWVrQXJyLmZvckVhY2goKChyb3c6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheVtdKSA9PiB7XHJcbiAgICAgIHJvdy5mb3JFYWNoKCh3ZWVrRGF5OiBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXkpID0+IHtcclxuICAgICAgICBpZiAod2Vla0RheT8ucGxhbm5lZE9yZGVycz8uZmluZChvcmRlciA9PiBvcmRlci50cmFuc0lkID09PSBwbGFuT3JkZXIudHJhbnNJZCkpIHtcclxuICAgICAgICAgIHdlZWtEYXkucGxhbm5lZE9yZGVycy5zcGxpY2Uod2Vla0RheS5wbGFubmVkT3JkZXJzLmluZGV4T2YocGxhbk9yZGVyKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pKVxyXG5cclxuICAgIGlmIChwbGFuT3JkZXIpIHtcclxuICAgICAgLy9yZXN0b3JlIG9yZGVyXHJcbiAgICAgIGF3YWl0IHRoaXMuX3RyYW5zYWN0aW9uQ29uLnJlc3RvcmVEZWxpdmVyeVNldHRpbmdzKFtwbGFuT3JkZXJdKTtcclxuICAgICAgYXdhaXQgdGhpcy5nZXRUcmFuc3BvcnRPcmRlcnModHJhbnNwb3J0KTtcclxuICAgICAgYXdhaXQgdGhpcy5nZXRTZXF1ZW5jZU9yZGVyVmFsdWUocGxhbk9yZGVyKVxyXG4gICAgICBhd2FpdCB0aGlzLmdldE9yZGVyTGluZXNQbGFubmVkKHBsYW5PcmRlcilcclxuICAgICAgYXdhaXQgdGhpcy5wbGFuT3JkZXJMaW5lcyhwbGFuT3JkZXIsIHRyYW5zcG9ydCwgd2Vlayk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIGhhbmRsZUVkaXRQbGFubmVkT3JkZXIocGxhbk9yZGVyOiBQbGFuT3JkZXIsIHRyYW5zcG9ydERheTogUGxhbm5pbmdUcmFuc3BvcnRXZWVrRGF5LCB3ZWVrOiBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXlbXSkge1xyXG4gICAgdGhpcy5vcGVuUGxhbm5pbmdQb3B1cChwbGFuT3JkZXIsIHRyYW5zcG9ydERheSwgd2Vlayk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
547
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsaXZlcnktcGxhbm5pbmctb3ZlcnZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJhbnNhY3Rpb24vc3JjL2xpYi9jb21wb25lbnQvZGVsaXZlcnktcGxhbm5pbmctbWFpbi9jb21wb25lbnQvZGVsaXZlcnktcGxhbm5pbmctb3ZlcnZpZXcvZGVsaXZlcnktcGxhbm5pbmctb3ZlcnZpZXcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUVOLFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSx3REFBd0QsQ0FBQztBQUNyRyxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxvREFBb0QsQ0FBQztBQUM3RixPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw4REFBOEQsQ0FBQztBQUNyRyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUMzRSxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxtREFBbUQsQ0FBQztBQUc5RixPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxzRUFBc0UsQ0FBQztBQUMvRyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxnRUFBZ0UsQ0FBQztBQUNwRyxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUN4RixPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxxRUFBcUUsQ0FBQztBQUk3RyxPQUFPLEVBQ0wscUNBQXFDLEVBQ3RDLE1BQU0sdUZBQXVGLENBQUM7QUFDL0YsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFDeEUsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ2hELE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLG9EQUFvRCxDQUFDO0FBQzdGLE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLHdEQUF3RCxDQUFDO0FBR3JHLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBMkR6RSxNQUFNLE9BQU8saUNBQWlDO0lBNkU1QyxZQUFvQix3QkFBaUQsRUFDM0QsWUFBZ0MsRUFDaEMsZUFBNEMsRUFDNUMsT0FBaUMsRUFDakMsZUFBa0MsRUFDbEMsV0FBOEIsRUFDL0IsZ0JBQWtDO1FBTnZCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBeUI7UUFDM0QsaUJBQVksR0FBWixZQUFZLENBQW9CO1FBQ2hDLG9CQUFlLEdBQWYsZUFBZSxDQUE2QjtRQUM1QyxZQUFPLEdBQVAsT0FBTyxDQUEwQjtRQUNqQyxvQkFBZSxHQUFmLGVBQWUsQ0FBbUI7UUFDbEMsZ0JBQVcsR0FBWCxXQUFXLENBQW1CO1FBQy9CLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFsRjNCLFVBQUssR0FBZ0IsSUFBSSxDQUFDO1FBQzFCLG9CQUFlLEdBQXlDLDZCQUE2QixDQUFDO1FBQ3RGLGNBQVMsR0FBcUMseUJBQXlCLENBQUM7UUFDakYsOEJBQXlCLEdBQXFDLHlCQUF5QixDQUFDO1FBRXhGLGlCQUFZLEdBQXFFLEVBQUUsQ0FBQztRQUlwRixjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLHVCQUFrQixHQUFZLEtBQUssQ0FBQztRQUluQyxVQUFLLEdBQW1CLEVBQUUsQ0FBQztRQVU1QixjQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsZUFBZTtRQWE5QixnQkFBVyxHQUFrQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUM7UUFHaEYsb0JBQWUsR0FBaUIsWUFBWSxDQUFDLFFBQVEsQ0FBQztRQUd0RCw0QkFBdUIsR0FBOEIsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFVBQVUsQ0FBQztRQUcvRixpQ0FBNEIsR0FJOUIsSUFBSSxZQUFZLEVBSWpCLENBQUM7UUFHRSxnQ0FBMkIsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQTBCbEYsQ0FBQztJQW5FRCxJQUNXLEtBQUssQ0FBQyxLQUF1RDtRQUN0RSxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBQUEsQ0FBQztJQU9GLElBQ1csc0JBQXNCLENBQUMsS0FBNkM7UUFDN0UsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBQUEsQ0FBQztJQUVGLElBQ1csWUFBWTtRQUNyQixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxZQUFZLENBQUM7SUFDcEQsQ0FBQztJQXlCRCxJQUFXLG9CQUFvQjtRQUM3QixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxvQkFBb0IsQ0FBQztJQUM1RCxDQUFDO0lBRUQsSUFBVyxlQUFlO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLGVBQWUsQ0FBQztJQUN2RCxDQUFDO0lBRUQsSUFBVyxlQUFlLENBQUMsUUFBbUM7UUFDNUQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUM7SUFDM0QsQ0FBQztJQUVNLFdBQVc7UUFDaEIsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsZ0JBQWdCLENBQUM7SUFDeEQsQ0FBQztJQVlELDBCQUEwQjtJQUMxQixrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNyRixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFpQixFQUFFLEVBQUU7WUFDdkMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUdNLFNBQVM7UUFDZCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCwwQ0FBMEM7SUFFMUMsUUFBUSxDQUFDLEtBQWlCO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRVksT0FBTyxDQUFDLEVBQWEsRUFBRSxJQUFnQyxFQUFFLFlBQXNDLEVBQUUsYUFBeUM7OztZQUNySixFQUFFLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDcEIsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBRXJCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBRS9DLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDckMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxzQ0FBc0MsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ2xHO2lCQUFNO2dCQUNMLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLEtBQUssR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNoRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7b0JBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2lCQUN0QjtnQkFDRCxJQUFJLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxFQUFFO29CQUNuRSxJQUFJLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7d0JBQzFCLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDM0QsTUFBTSxLQUFLLEdBQTRCLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUM7d0JBQzVFLElBQUksQ0FBQSxNQUFBLE1BQUEsS0FBSyxDQUFDLGVBQWUsMENBQUUsZ0JBQWdCLDBDQUFFLHFCQUFxQixNQUFLLENBQUMsRUFBRTs0QkFDeEUsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzs0QkFDMUUsSUFBSSxTQUFTLEVBQUU7Z0NBQ2IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7NkJBQ3ZEO3lCQUNGOzZCQUFNOzRCQUNMLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQzt5QkFDNUY7cUJBQ0Y7aUJBQ0Y7cUJBQU0sSUFBSSxJQUFJLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLEVBQUU7b0JBQ3pFLHlGQUF5RjtpQkFDMUY7cUJBQU07b0JBQ0wsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUNsRDthQUVGOztLQUVGO0lBRU0sU0FBUyxDQUFDLEVBQWEsRUFBRSxZQUFzQztRQUNwRSxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDcEIsSUFBSSxJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxJQUFJLFlBQVksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLFlBQVksQ0FBQyxlQUFlLEVBQUU7WUFDekcsT0FBTyxZQUFZLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDLFVBQVUsSUFBSSxZQUFZLENBQUMsY0FBYyxHQUFHLFlBQVksQ0FBQyxXQUFXLElBQUksWUFBWSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQzdNO0lBQ0gsQ0FBQztJQUVNLFNBQVM7UUFDZCxJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLEtBQUsseUJBQXlCLENBQUMsT0FBTyxFQUFFO1lBQ2hGLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1NBQ3BCO2FBQU07WUFDTCxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztTQUNwQjtJQUNILENBQUM7SUFFTSxPQUFPLENBQUMsRUFBYTtRQUMxQixFQUFFLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakQsQ0FBQztJQUVNLGVBQWUsQ0FBQyxTQUFxQztRQUMxRCxPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU0scUJBQXFCLENBQUMsT0FBYTtRQUN4QyxJQUFJLENBQUMsd0JBQXdCLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDO1FBQ3pELElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRVksaUJBQWlCLENBQUMsWUFBbUQsRUFBRSxxQkFBaUQ7O1lBQ25JLElBQUksT0FBTyxHQUErQixxQkFBcUIsQ0FBQztZQUNoRSxJQUFJLEtBQUssR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQy9DLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDcEMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7b0JBQ3BELFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN0RixJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDO3dCQUNyQyxPQUFPLEVBQUUsT0FBTzt3QkFDaEIsSUFBSSxFQUFFLHFCQUFxQjt3QkFDM0IsTUFBTSxFQUFFLDZCQUE2QixDQUFDLGtCQUFrQjtxQkFDekQsQ0FBQyxDQUFDO2lCQUNKO3FCQUFNO29CQUNMLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQzFEO2FBQ0Y7UUFDSCxDQUFDO0tBQUE7SUFFTSxnQkFBZ0IsQ0FBQyxZQUd2QixFQUFFLE9BQWlDLEVBQUUsZ0JBQTRDO1FBQ2hGLElBQUksT0FBTyxHQUFHLGdCQUFnQixDQUFDO1FBQy9CLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlGLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxLQUFLLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbkcsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDNUIsT0FBTyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDdkU7UUFDRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUNwRCxJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDO1lBQ3JDLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLElBQUksRUFBRSxnQkFBZ0I7WUFDdEIsTUFBTSxFQUFFLDZCQUE2QixDQUFDLGtCQUFrQjtTQUN6RCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVksb0JBQW9CLENBQUMsS0FBZ0I7O1lBQ2hELElBQUksT0FBTyxHQUE2QixJQUFJLHdCQUF3QixFQUFFLENBQUM7WUFDdkUsSUFBSSxTQUFTLEdBQXlCLElBQUksb0JBQW9CLEVBQUUsQ0FBQztZQUNqRSxPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUN2QixPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDO1lBQzlFLE9BQU8sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUNoQyxPQUFPLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUM7WUFDNUMsU0FBUyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDakMsU0FBUyxDQUFDLGdCQUFnQixHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDeEMsU0FBUyxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7WUFDOUIsT0FBTyxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7WUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUU7Z0JBQ2hCLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO2FBQ2xCO1lBQ0QsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNoRixDQUFDO0tBQUE7SUFFWSxrQkFBa0IsQ0FBQyxZQUFzQzs7WUFDcEUsSUFBSSxPQUFPLEdBQThCLElBQUkseUJBQXlCLEVBQUUsQ0FBQztZQUN6RSxPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDO1lBQzlFLE9BQU8sQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQztZQUNqQyxPQUFPLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO1lBQ3pELFlBQVksQ0FBQyxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BGLFlBQVksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBRW5DLENBQUM7S0FBQTtJQUVZLGNBQWMsQ0FBQyxLQUFnQixFQUFFLFlBQXNDLEVBQUUsSUFBZ0M7OztZQUNwSCxJQUFJLE9BQU8sR0FBK0IsSUFBSSxDQUFDO1lBQy9DLElBQUksQ0FBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLE1BQU0sSUFBRyxDQUFDLEVBQUU7Z0JBQzNCLEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2dCQUN6QixLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDakIsS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7Z0JBQ3pCLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDdkIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUU7b0JBQy9CLFlBQVksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDdEM7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBdUIsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUU7d0JBQ3pHLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUN4Qzt5QkFBTTt3QkFDTCxJQUFJLFlBQVksR0FBYyxZQUFZLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQXVCLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUNuSSxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssWUFBWSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUF1QixFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUU7NEJBRXRJLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFO2dDQUN2QixLQUFLLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUM7Z0NBQ3pDLEtBQUssQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQztnQ0FDckMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztnQ0FDcEYsWUFBWSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7NkJBQ3hDO2lDQUFNO2dDQUNMLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDOzZCQUN4Qzt5QkFDRjs2QkFBTTs0QkFDTCxZQUFZLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQXVCLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7NEJBQy9LLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3lCQUN4QztxQkFDRjtpQkFDRjtnQkFDRCxJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDO29CQUNyQyxPQUFPLEVBQUUsT0FBTztvQkFDaEIsSUFBSSxFQUFFLElBQUk7b0JBQ1YsTUFBTSxFQUFFLDZCQUE2QixDQUFDLFNBQVM7aUJBQ2hELENBQUMsQ0FBQzthQUNKO2lCQUFNO2dCQUNMLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDeEQ7O0tBQ0Y7SUFFWSxpQkFBaUIsQ0FBQyxZQUFzQyxFQUFFLElBQWdDOzs7WUFFckcsSUFBSSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNqSCxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM1QyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUUzQyxJQUFJLFNBQVMsQ0FBQyxZQUFZLEVBQUU7Z0JBRTFCLElBQUksYUFBYSxHQUEwQixJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQStCLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFbEssK0JBQStCO2dCQUMvQixJQUFJLE1BQUEsWUFBWSxhQUFaLFlBQVksdUJBQVosWUFBWSxDQUFFLGFBQWEsMENBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ25GLHNCQUFzQjtvQkFFdEIsdUdBQXVHO29CQUN2RyxJQUFJLHFCQUFxQixHQUFvQixFQUFFLENBQUM7b0JBQ2hELElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQzVCLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBdUIsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQTBCLEVBQUUsRUFBRTs0QkFDcEosSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBaUMsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sS0FBSyxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUU7Z0NBQ2pILHFCQUFxQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzs2QkFDekM7d0JBQ0gsQ0FBQyxDQUFDLENBQUM7d0JBRUgsSUFBSSxxQkFBcUIsQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7NEJBQzNELE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7NEJBQ3ZELE9BQU87eUJBQ1I7cUJBQ0Y7eUJBQU07d0JBQ0wsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FBQzt3QkFDeEQsT0FBTztxQkFDUjtvQkFFRCxJQUFJLFlBQVksR0FBYyxZQUFZLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQXVCLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUV2SSxxRUFBcUU7b0JBQ3JFLGdHQUFnRztvQkFDaEcsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQ3BCLENBQUMsVUFBeUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLGdCQUErQixFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEtBQUssVUFBVSxDQUFDLGNBQWMsQ0FBQzsyQkFDdEosQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBaUMsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sS0FBSyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztpQkFDdkg7cUJBQU07b0JBQ0wsK0RBQStEO29CQUMvRCw2Q0FBNkM7b0JBQzdDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFpQyxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEtBQUssWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7aUJBQ2xMO2FBRUY7WUFFRCxnQ0FBZ0M7WUFDaEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7O0tBRXZEO0lBRVkscUJBQXFCLENBQUMsS0FBZ0I7O1lBQ2pELEtBQUssQ0FBQyxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUNsRixLQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUN4QixDQUFDO0tBQUE7SUFFWSxvQkFBb0IsQ0FBQyxLQUF3RTs7WUFFeEcsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7WUFDNUIsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEMsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0MsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUQsQ0FBQztLQUFBO0lBRU0sa0JBQWtCLENBQUMsT0FBZ0I7UUFDeEMsSUFBSSxPQUFPLEVBQUU7WUFDWCxJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDMUM7SUFDSCxDQUFDO0lBRU0sa0JBQWtCLENBQUMsWUFBc0M7UUFDOUQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFlBQVksQ0FBQztRQUN6QyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUM3QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQztJQUVZLHVCQUF1QixDQUFDLElBR3BDLEVBQUUsZ0JBQTBDLEVBQUUsSUFBZ0M7OztZQUM3RSxJQUFJLFNBQW9CLENBQUM7WUFDekIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsd0JBQXdCLENBQUMsY0FBYyxFQUFFO2dCQUN6RSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxNQUFBLElBQUksQ0FBQyx3QkFBd0IsMENBQUUsY0FBYyxDQUFDLENBQUM7YUFDcEc7aUJBQU07Z0JBQ0wsU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQzFFO1lBRUQsSUFBSSxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBdUIsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ2hILE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDM0YsT0FBTzthQUNSO1lBRUQsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFFakMsU0FBUyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNsRixTQUFTLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBRTVGLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQ2hELE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUM1QyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDM0MsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUU7b0JBQ3RGLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsY0FBYyxDQUFDLENBQUM7b0JBQ3pGLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDMUMsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLENBQUM7aUJBQy9DO2FBQ0Y7O0tBQ0Y7SUFFTSxrQkFBa0IsQ0FBQyxnQkFBMEMsRUFBRSxXQUFtQjtRQUN2RixJQUFJLFNBQVMsR0FBUyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RCxJQUFJLFNBQVMsR0FBVyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVELFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUIsU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV4QixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRU0sZ0JBQWdCLENBQUMsU0FBZSxFQUFFLFdBQW1CLEVBQUUsU0FBb0I7UUFDaEYsSUFBSSxPQUFPLEdBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFeEMsSUFBSSxTQUFTLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRCxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pHLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0IsT0FBTyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsQyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztRQUMxRixPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxZQUFZLENBQUMsQ0FBQztRQUVsRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRU0saUJBQWlCLENBQUMsU0FBb0IsRUFBRSxZQUFzQyxFQUFFLElBQWdDO1FBQ3JILElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztZQUM1QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztZQUNsRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNsQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUM7U0FDMUU7SUFDSCxDQUFDO0lBRU0seUJBQXlCLENBQUMsS0FBcUU7UUFDcEcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVNLGNBQWMsQ0FBQyxZQUFzQztRQUMxRCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEtBQUssWUFBWSxDQUFDLENBQUM7UUFDekcsT0FBTyxTQUFTLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO0lBQzNDLENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxZQUFzQyxFQUFFLElBQWdDLEVBQUUsR0FBYztRQUNuSCxJQUFJLE9BQU8sR0FBK0IsSUFBSSxDQUFDO1FBQy9DLElBQUksS0FBSyxHQUFjLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sS0FBSyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkcsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUM3QyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBRXpDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsRUFBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQztJQUNqSCxDQUFDO0lBRVksZUFBZSxDQUFDLFFBRzVCLEVBQUUsU0FBbUMsRUFBRSxJQUFnQyxFQUFFLE9BQXFDOztZQUM3RyxJQUFJLFNBQVMsR0FBYyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUMxRywyQkFBMkI7WUFDM0IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBK0IsRUFBRSxFQUFFO2dCQUNuRCxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBaUMsRUFBRSxFQUFFOztvQkFDaEQsSUFBSSxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxhQUFhLDBDQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO3dCQUM5RSxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO3FCQUN4RTtnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFSixJQUFJLFNBQVMsRUFBRTtnQkFDYixlQUFlO2dCQUNmLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBRWhFLHFEQUFxRDtnQkFDckQsSUFBSSxPQUFPLEdBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLFNBQVMsR0FBYSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbkQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDM0MsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEIsU0FBUyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7Z0JBQzlCLElBQUksT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDNUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pILE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN6QyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDNUMsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzNDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ3ZEO1FBQ0gsQ0FBQztLQUFBO0lBRVkscUJBQXFCLENBQUMsT0FBZSxFQUFFLFNBQW1DLEVBQUUsSUFBZ0MsRUFBRSxPQUFxQzs7WUFDOUosSUFBSSxTQUFTLEdBQWMsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUN0RiwyQkFBMkI7WUFDM0IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBK0IsRUFBRSxFQUFFO2dCQUNuRCxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBaUMsRUFBRSxFQUFFOztvQkFDaEQsSUFBSSxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxhQUFhLDBDQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO3dCQUM5RSxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO3FCQUN4RTtnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFSixJQUFJLFNBQVMsRUFBRTtnQkFDYixlQUFlO2dCQUNmLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN6QyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDNUMsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzNDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ3ZEO1FBQ0gsQ0FBQztLQUFBO0lBRU0sc0JBQXNCLENBQUMsU0FBb0IsRUFBRSxZQUFzQyxFQUFFLElBQWdDO1FBQzFILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3hELENBQUM7OztZQXpqQkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSwrQkFBK0I7Z0JBQ3pDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrRFQ7Z0JBQ0QsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7YUFDdEM7OztZQS9FTyx1QkFBdUI7WUFDdkIsa0JBQWtCO1lBQ2xCLDJCQUEyQjtZQUszQix3QkFBd0I7WUF2QjlCLGlCQUFpQjtZQXFDWCxpQkFBaUI7WUFOakIsZ0JBQWdCOzs7b0JBbUZyQixZQUFZLFNBQUMscUNBQXFDOzJCQUtsRCxTQUFTLFNBQUMsY0FBYzt5QkFDeEIsU0FBUyxTQUFDLFlBQVk7cUNBSXRCLFNBQVMsU0FBQyxlQUFlOzJCQUt6QixLQUFLOzBCQUtMLEtBQUs7OEJBR0wsS0FBSztzQ0FHTCxLQUFLOzJDQUdMLE1BQU07MENBV04sTUFBTTt3QkFnRE4sV0FBVyxTQUFDLHFDQUFxQzt1QkFNakQsWUFBWSxTQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEhvc3RCaW5kaW5nLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQge0NhbGVuZGFyVmlld30gZnJvbSAnQGNvbGlqbml0L3NoYXJlZGNvbXBvbmVudHMnO1xyXG5pbXBvcnQge0RlbGl2ZXJ5UGxhbm5pbmdDYWxlbmRhck1vZGVzfSBmcm9tICcuLi8uLi8uLi8uLi9lbnVtL2RlbGl2ZXJ5LXBsYW5uaW5nLWNhbGVuZGFyLW1vZGVzLmVudW0nO1xyXG5pbXBvcnQge0RlbGl2ZXJ5UGxhbm5pbmdWaWV3TW9kZXN9IGZyb20gJy4uLy4uLy4uLy4uL2VudW0vZGVsaXZlcnktcGxhbm5pbmctdmlldy1tb2Rlcy5lbnVtJztcclxuaW1wb3J0IHtEZWxpdmVyeVBsYW5uaW5nU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vZGVsaXZlcnktcGxhbm5pbmcvc2VydmljZS9kZWxpdmVyeS1wbGFubmluZy5zZXJ2aWNlJztcclxuaW1wb3J0IHtUcmFuc2FjdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2UvdHJhbnNhY3Rpb24uc2VydmljZSc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25Db25uZWN0b3JTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlL3RyYW5zYWN0aW9uLWNvbm5lY3Rvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXl9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wbGFubmluZy10cmFuc3BvcnQtd2Vlay1kYXkuYm8nO1xyXG5pbXBvcnQge1BsYW5PcmRlcn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3BsYW4tb3JkZXIuYm8nO1xyXG5pbXBvcnQge0dldFRyYW5zcG9ydE9yZGVyc1JlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9nZXQtdHJhbnNwb3J0LW9yZGVycy1yZXF1ZXN0LmJvJztcclxuaW1wb3J0IHtQbGFubmluZ0ZpbHRlck9iamVjdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3BsYW5uaW5nLWZpbHRlci1vYmplY3QuYm8nO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uRGlhbG9nU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZS90cmFuc2FjdGlvbi1kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7T3JkZXJMaW5lc1BsYW5uZWRSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvb3JkZXItbGluZXMtcGxhbm5lZC1yZXF1ZXN0LmJvJztcclxuaW1wb3J0IHtcclxuICBEZWxpdmVyeVBsYW5uaW5nT3ZlcnZpZXdQb3B1cENvbXBvbmVudFxyXG59IGZyb20gJy4vY29tcG9uZW50L2RlbGl2ZXJ5LXBsYW5uaW5nLW92ZXJ2aWV3LXBvcHVwL2RlbGl2ZXJ5LXBsYW5uaW5nLW92ZXJ2aWV3LXBvcHVwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgRGVsaXZlcnlQbGFubmluZ092ZXJ2aWV3VGlsZUNvbXBvbmVudFxyXG59IGZyb20gJy4vY29tcG9uZW50L2RlbGl2ZXJ5LXBsYW5uaW5nLW92ZXJ2aWV3LXRpbGUvZGVsaXZlcnktcGxhbm5pbmctb3ZlcnZpZXctdGlsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQge0ljb25DYWNoZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2UvaWNvbi1jYWNoZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtJY29ufSBmcm9tICcuLi8uLi8uLi8uLi9lbnVtL2ljb24uZW51bSc7XHJcbmltcG9ydCB7RGVsaXZlcnlQbGFubmluZ1RpbGVNb2Rlc30gZnJvbSAnLi4vLi4vLi4vLi4vZW51bS9kZWxpdmVyeS1wbGFubmluZy10aWxlLW1vZGVzLmVudW0nO1xyXG5pbXBvcnQge0RlbGl2ZXJ5UGxhbm5pbmdVcGRhdGVBY3Rpb25zfSBmcm9tICcuLi8uLi8uLi8uLi9lbnVtL2RlbGl2ZXJ5LXBsYW5uaW5nLXVwZGF0ZS1hY3Rpb25zLmVudW0nO1xyXG5pbXBvcnQge1BsYW5PcmRlckxpbmV9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wbGFuLW9yZGVyLWxpbmUuYm8nO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24taW5mby1yZXNwb25zZS5ibyc7XHJcbmltcG9ydCB7RGljdGlvbmFyeVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2UvZGljdGlvbmFyeS5zZXJ2aWNlJztcclxuaW1wb3J0IHtUcmFuc2FjdGlvbkxpbmVJbmZvfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24tbGluZS1pbmZvLmJvJztcclxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjby1kZWxpdmVyeS1wbGFubmluZy1vdmVydmlldycsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgICAgPGRpdiBjbGFzcz1cImRlbGl2ZXJ5LXBsYW5uaW5nLXdyYXBwZXJcIj5cclxuICAgICAgICAgIDxjby1kZWxpdmVyeS1wbGFubmluZy1vdmVydmlldy1wb3B1cCAjcGxhbm5pbmdQb3B1cCAqbmdJZj1cInNob3dOb3RlRGlhbG9nXCIgKGNsb3NlRXZlbnQpPVwic2hvd05vdGVEaWFsb2cgPSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uU3VjY2VlZGVkUGxhbkFjdGlvbik9XCJoYW5kbGVQb3B1cFBsYW5FdmVudCgkZXZlbnQpXCI+PC9jby1kZWxpdmVyeS1wbGFubmluZy1vdmVydmlldy1wb3B1cD5cclxuICAgICAgICAgIDxjby1kZWxpdmVyeS1wbGFubmluZy1vdmVydmlldy10aWxlLXNldHRpbmdzLXBvcHVwICpuZ0lmPVwic2hvd1NldHRpbmdzRGlhbG9nXCIgW3RyYW5zcG9ydERheV09XCJzZWxlY3RlZFRyYW5zcG9ydERheVwiXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uU2F2ZUFjdGlvbik9XCJoYW5kbGVTZXR0aW5nc1NhdmUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xvc2VFdmVudCk9XCJzaG93U2V0dGluZ3NEaWFsb2cgPSBmYWxzZVwiPjwvY28tZGVsaXZlcnktcGxhbm5pbmctb3ZlcnZpZXctdGlsZS1zZXR0aW5ncy1wb3B1cD5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZWxpdmVyeS1vdmVydmlldy13cmFwcGVyXCIgW2NsYXNzLnNpZGViYXJdPVwiY3VycmVudFZpZXdNb2RlID09PSAnREFZU19BUk9VTkQnXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbGUtdmlldy1tb2RlcyByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgPGNvLWljb24gKGNsaWNrKT1cImN1cnJlbnRUaWxlTW9kZSA9IHRpbGVNb2Rlcy5Ob3JtYWxcIiBbY2xhc3MuYWN0aXZlXT1cImN1cnJlbnRUaWxlTW9kZSA9PT0gdGlsZU1vZGVzLk5vcm1hbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uRGF0YV09XCJpY29uQ2FjaGVTZXJ2aWNlLmdldEljb24oaWNvbnMuQ2FsZW5kYXJMaW5lc1JlZ3VsYXIpXCI+PC9jby1pY29uPlxyXG4gICAgICAgICAgICAgICAgICA8Y28taWNvbiAoY2xpY2spPVwiY3VycmVudFRpbGVNb2RlID0gdGlsZU1vZGVzLkNhbGVuZGFyXCIgW2NsYXNzLmFjdGl2ZV09XCJjdXJyZW50VGlsZU1vZGUgPT09IHRpbGVNb2Rlcy5DYWxlbmRhclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uRGF0YV09XCJpY29uQ2FjaGVTZXJ2aWNlLmdldEljb24oaWNvbnMuQ2FsZW5kYXJEYXlSZWd1bGFyKVwiPjwvY28taWNvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGxhbm5pbmctY29tcG9uZW50LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGNvLWRhdGUtcGxhbm5pbmcgW3ZpZXddPVwiY3VycmVudFZpZXdNb2RlXCIgW3NlbGVjdGVkRGF0ZV09XCJjdXJyZW50RGF0ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJhbmdlQ2hhbmdlKT1cImhhbmRsZURhdGVSYW5nZUNoYW5nZSgkZXZlbnQpXCI+PC9jby1kYXRlLXBsYW5uaW5nPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGRhdGUtcGxhbm5pbmdcIiBbY2xhc3MuZW1wbG95ZWUtdmlld109XCJlbXBsb3llZVZpZXdcIiAjcm93Q29udGFpbmVyICpuZ0Zvcj1cImxldCB0cmFuc3BvcnRXZWVrUm93IG9mIHBsYW5UcmFuc3BvcnRXZWVrQXJyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5cIiAjY29sdW1uRWxlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB0cmFuc1BvcnREYXkgb2YgZmlsdGVyV2Vla0FycmF5KHRyYW5zcG9ydFdlZWtSb3cpOyBpbmRleCBhcyBpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8Y28tZGVsaXZlcnktcGxhbm5pbmctb3ZlcnZpZXctdGlsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiIXRyYW5zUG9ydERheS5hdmFpbGFibGVPbkRhdGUgfHwgdHJhbnNQb3J0RGF5Lm1heE1pbnV0ZXMgPT09IDAgfHwgY2hlY2tBdmFpbGFibGUodHJhbnNQb3J0RGF5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhdHJhbnNQb3J0RGF5LmF2YWlsYWJsZU9uRGF0ZSB8fCB0cmFuc1BvcnREYXkubWF4TWludXRlcyA9PT0gMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkcmFnb3Zlcik9XCJhbGxvd0Ryb3AoJGV2ZW50LCB0cmFuc1BvcnREYXkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRyb3ApPVwiZHJvcHBlZCgkZXZlbnQsIHRyYW5zcG9ydFdlZWtSb3csIHRyYW5zUG9ydERheSwgZmlsdGVyV2Vla0FycmF5KHRyYW5zcG9ydFdlZWtSb3cpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkcmFnZW5kKT1cImRyYWdFbmQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0cmFuc3BvcnREYXldPVwidHJhbnNQb3J0RGF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlbGV0ZU9yZGVyRXZlbnQpPVwiaGFuZGxlRGVsZXRlT3JkZXIoJGV2ZW50LCB0cmFuc3BvcnRXZWVrUm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aW1lQ2hhbmdlRXZlbnQpPVwiaGFuZGxlVGltZUNoYW5nZUV2ZW50KHRyYW5zUG9ydERheSwgdHJhbnNwb3J0V2Vla1JvdywkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wZW5TZXR0aW5nc0RpYWxvZ0V2ZW50KT1cIm9wZW5TZXR0aW5nc0RpYWxvZygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhbGVuZGFyUGxhbkV2ZW50KT1cImhhbmRsZUNhbGVuZGFyUGxhbkV2ZW50KCRldmVudCwgdHJhbnNQb3J0RGF5LCB0cmFuc3BvcnRXZWVrUm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWxldGVPcmRlckxpbmVFdmVudCk9XCJoYW5kbGVEZWxldGVMaW5lKCRldmVudCwgdHJhbnNQb3J0RGF5LCB0cmFuc3BvcnRXZWVrUm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlZGl0T3JkZXJFdmVudCk9XCJoYW5kbGVFZGl0UGxhbm5lZE9yZGVyKCRldmVudCwgdHJhbnNQb3J0RGF5LCB0cmFuc3BvcnRXZWVrUm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3ZlRXZlbnQpPVwiaGFuZGxlTW92ZUV2ZW50KCRldmVudCx0cmFuc1BvcnREYXksIHRyYW5zcG9ydFdlZWtSb3csIHBsYW5UcmFuc3BvcnRXZWVrQXJyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhdmFpbGFiaWxpdHlDaGVja2VkKT1cImhhbmRsZUF2YWlsYWJpbGl0eUNoZWNrZWQoJGV2ZW50KVwiXHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgID48L2NvLWRlbGl2ZXJ5LXBsYW5uaW5nLW92ZXJ2aWV3LXRpbGU+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgYCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEZWxpdmVyeVBsYW5uaW5nT3ZlcnZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdDaGVja2VkLCBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHVibGljIHJlYWRvbmx5IGljb25zOiB0eXBlb2YgSWNvbiA9IEljb247XHJcbiAgcHVibGljIHJlYWRvbmx5IHBsYW5uaW5nQWN0aW9uczogdHlwZW9mIERlbGl2ZXJ5UGxhbm5pbmdVcGRhdGVBY3Rpb25zID0gRGVsaXZlcnlQbGFubmluZ1VwZGF0ZUFjdGlvbnM7XHJcbiAgcHVibGljIHJlYWRvbmx5IHRpbGVNb2RlczogdHlwZW9mIERlbGl2ZXJ5UGxhbm5pbmdUaWxlTW9kZXMgPSBEZWxpdmVyeVBsYW5uaW5nVGlsZU1vZGVzO1xyXG4gIHB1YmxpYyBkZWxpdmVyeVBsYW5uaW5nVmlld01vZGVzOiB0eXBlb2YgRGVsaXZlcnlQbGFubmluZ1ZpZXdNb2RlcyA9IERlbGl2ZXJ5UGxhbm5pbmdWaWV3TW9kZXM7XHJcblxyXG4gIHB1YmxpYyBhdmFpbGFiaWxpdHk6IHsgdHJhbnNwb3J0RGF5OiBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXksIGF2YWlsYWJsZTogYm9vbGVhbiB9W10gPSBbXTtcclxuXHJcbiAgcHVibGljIHBsYW5uaW5nUG9wdXBSZWY6IERlbGl2ZXJ5UGxhbm5pbmdPdmVydmlld1BvcHVwQ29tcG9uZW50O1xyXG5cclxuICBwdWJsaWMgYXZhaWxhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dOb3RlRGlhbG9nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dTZXR0aW5nc0RpYWxvZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB0aWxlc1F1ZXJ5TGlzdDogUXVlcnlMaXN0PERlbGl2ZXJ5UGxhbm5pbmdPdmVydmlld1RpbGVDb21wb25lbnQ+O1xyXG4gIHB1YmxpYyBzZWxlY3RlZFRyYW5zcG9ydERheTogUGxhbm5pbmdUcmFuc3BvcnRXZWVrRGF5O1xyXG5cclxuICBwcml2YXRlIF9zdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKERlbGl2ZXJ5UGxhbm5pbmdPdmVydmlld1RpbGVDb21wb25lbnQpXHJcbiAgcHVibGljIHNldCB0aWxlcyh0aWxlczogUXVlcnlMaXN0PERlbGl2ZXJ5UGxhbm5pbmdPdmVydmlld1RpbGVDb21wb25lbnQ+KSB7XHJcbiAgICB0aGlzLnRpbGVzUXVlcnlMaXN0ID0gdGlsZXM7XHJcbiAgfTtcclxuXHJcbiAgQFZpZXdDaGlsZCgncm93Q29udGFpbmVyJykgcm93Q29udGFpbmVyOiBIVE1MRGl2RWxlbWVudDtcclxuICBAVmlld0NoaWxkKCdjb2x1bW5FbGVtJykgY29sdW1uRWxlbTogSFRNTERpdkVsZW1lbnQ7XHJcblxyXG4gIHB1YmxpYyBjb2x1bW5OdW0gPSAzOyAvL2luaXRpYWwgY291bnRcclxuXHJcbiAgQFZpZXdDaGlsZCgncGxhbm5pbmdQb3B1cCcpXHJcbiAgcHVibGljIHNldCBwbGFubmluZ1BvcHVwQ29tcG9uZW50KHZhbHVlOiBEZWxpdmVyeVBsYW5uaW5nT3ZlcnZpZXdQb3B1cENvbXBvbmVudCkge1xyXG4gICAgdGhpcy5wbGFubmluZ1BvcHVwUmVmID0gdmFsdWU7XHJcbiAgfTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IGVtcGxveWVlVmlldygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9kZWxpdmVyeVBsYW5uaW5nU2VydmljZS5lbXBsb3llZVZpZXc7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBjdXJyZW50TW9kZTogRGVsaXZlcnlQbGFubmluZ0NhbGVuZGFyTW9kZXMgPSBEZWxpdmVyeVBsYW5uaW5nQ2FsZW5kYXJNb2Rlcy5XZWVrO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBjdXJyZW50Vmlld01vZGU6IENhbGVuZGFyVmlldyA9IENhbGVuZGFyVmlldy5XZWVrVmlldztcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgY3VycmVudFBsYW5uaW5nVmlld01vZGU6IERlbGl2ZXJ5UGxhbm5pbmdWaWV3TW9kZXMgPSB0aGlzLmRlbGl2ZXJ5UGxhbm5pbmdWaWV3TW9kZXMuRnVsbHNjcmVlbjtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIHVwZGF0ZVBsYW5uaW5nVHJhbnNwb3J0RXZlbnQ6IEV2ZW50RW1pdHRlcjx7XHJcbiAgICBvbGRXZWVrOiBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXlbXSxcclxuICAgIHdlZWs6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheVtdLFxyXG4gICAgYWN0aW9uOiBEZWxpdmVyeVBsYW5uaW5nVXBkYXRlQWN0aW9uc1xyXG4gIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7XHJcbiAgICBvbGRXZWVrOiBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXlbXSxcclxuICAgIHdlZWs6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheVtdLFxyXG4gICAgYWN0aW9uOiBEZWxpdmVyeVBsYW5uaW5nVXBkYXRlQWN0aW9uc1xyXG4gIH0+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyByZXNldFBsYW5uaW5nVHJhbnNwb3J0RXZlbnQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgcHVibGljIGdldCBwbGFuVHJhbnNwb3J0V2Vla0FycigpIHtcclxuICAgIHJldHVybiB0aGlzLl9kZWxpdmVyeVBsYW5uaW5nU2VydmljZS5wbGFuVHJhbnNwb3J0V2Vla0FycjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY3VycmVudFRpbGVNb2RlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RlbGl2ZXJ5UGxhbm5pbmdTZXJ2aWNlLmN1cnJlbnRUaWxlTW9kZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgY3VycmVudFRpbGVNb2RlKHRpbGVNb2RlOiBEZWxpdmVyeVBsYW5uaW5nVGlsZU1vZGVzKSB7XHJcbiAgICB0aGlzLl9kZWxpdmVyeVBsYW5uaW5nU2VydmljZS5jdXJyZW50VGlsZU1vZGUgPSB0aWxlTW9kZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjdXJyZW50RGF0ZSgpOiBEYXRlIHtcclxuICAgIHJldHVybiB0aGlzLl9kZWxpdmVyeVBsYW5uaW5nU2VydmljZS5jdXJyZW50U3RhcnREYXRlO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfZGVsaXZlcnlQbGFubmluZ1NlcnZpY2U6IERlbGl2ZXJ5UGxhbm5pbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX3RyYW5zYWN0aW9uQ29uOiBUcmFuc2FjdGlvbkNvbm5lY3RvclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kaWFsb2c6IFRyYW5zYWN0aW9uRGlhbG9nU2VydmljZSxcclxuICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgX2RpY3Rpb25hcnk6IERpY3Rpb25hcnlTZXJ2aWNlLFxyXG4gICAgcHVibGljIGljb25DYWNoZVNlcnZpY2U6IEljb25DYWNoZVNlcnZpY2VcclxuICApIHtcclxuICB9XHJcblxyXG4gIC8vY2FsY3VsYXRpbmcgdXBvbiBsb2FkaW5nXHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xyXG4gICAgdGhpcy5zZXRDb2xOdW0oKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3Vicy5wdXNoKHRoaXMuX2RlbGl2ZXJ5UGxhbm5pbmdTZXJ2aWNlLmF2YWlsYWJpbGl0eVJlc2V0RXZlbnQuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgdGhpcy5hdmFpbGFiaWxpdHkgPSBbXTtcclxuICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3Vicy5mb3JFYWNoKChzdWI6IFN1YnNjcmlwdGlvbikgPT4ge1xyXG4gICAgICBzdWIudW5zdWJzY3JpYmUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jby1kZWxpdmVyeS1wbGFubmluZy1vdmVydmlldycpXHJcbiAgcHVibGljIHNob3dDbGFzcygpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy9yZWNhbGN1bGF0aW5nIHVwb24gYnJvd3NlciB3aW5kb3cgcmVzaXplXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXHJcbiAgb25SZXNpemUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIHRoaXMuc2V0Q29sTnVtKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZHJvcHBlZChldjogRHJhZ0V2ZW50LCB3ZWVrOiBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXlbXSwgdHJhbnNwb3J0RGF5OiBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXksIHRyYW5zcG9ydERheXM6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheVtdKSB7XHJcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgdGhpcy5fZGVsaXZlcnlQbGFubmluZ1NlcnZpY2UuZHJhZ2dpbmcgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5jaGVja0F2YWlsYWJsZSh0cmFuc3BvcnREYXkpKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuX2RpYWxvZy5zaG93RXJyb3IodGhpcy5fZGljdGlvbmFyeS5nZXQoJ09SREVSX0NBTl9OT1RfQkVfUExBTk5FRF9PTl9SRVNPVVJDRScpLCB0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSBldi5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgndGV4dCcpO1xyXG4gICAgICBsZXQgaW5kZXggPSB0cmFuc3BvcnREYXlzLmluZGV4T2YodHJhbnNwb3J0RGF5KTtcclxuICAgICAgbGV0IHRpbGUgPSB0aGlzLnRpbGVzUXVlcnlMaXN0LmdldChpbmRleCk7XHJcbiAgICAgIGlmICghdGlsZS5leHBhbmRlZCkge1xyXG4gICAgICAgIHRpbGUuZXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChkYXRhICE9ICdsaW5lcycgJiYgIXRoaXMuX2RlbGl2ZXJ5UGxhbm5pbmdTZXJ2aWNlLm1vdmluZ1RyYW5zSWQpIHtcclxuICAgICAgICBpZiAoZGF0YSAmJiBwYXJzZUludChkYXRhKSkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5fdHJhbnNhY3Rpb24uZ2V0VHJhbnNhY3Rpb25CeUlkKHBhcnNlSW50KGRhdGEpKTtcclxuICAgICAgICAgIGNvbnN0IG9yZGVyOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IHRoaXMuX3RyYW5zYWN0aW9uLmN1cnJlbnRUcmFuc2FjdGlvbjtcclxuICAgICAgICAgIGlmIChvcmRlci50cmFuc2FjdGlvbkluZm8/LmhlYWRlckluZm9TdGF0dXM/LnF1YW50aXR5UGxhbm5pbmdGaW5hbCA9PT0gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBwbGFuT3JkZXIgPSBhd2FpdCB0aGlzLl90cmFuc2FjdGlvbkNvbi5nZXRQbGFuT3JkZXIocGFyc2VJbnQoZGF0YSkpO1xyXG4gICAgICAgICAgICBpZiAocGxhbk9yZGVyKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5vcGVuUGxhbm5pbmdQb3B1cChwbGFuT3JkZXIsIHRyYW5zcG9ydERheSwgd2Vlayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2RpYWxvZy5zaG93RXJyb3IodGhpcy5fZGljdGlvbmFyeS5nZXQoJ09SREVSX0hBU19BTFJFQURZX0JFRU5fUExBTk5FRCcpLCB0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSAhPSAnbGluZXMnICYmIHRoaXMuX2RlbGl2ZXJ5UGxhbm5pbmdTZXJ2aWNlLm1vdmluZ1RyYW5zSWQpIHtcclxuICAgICAgICAvLyBhd2FpdCB0aGlzLmhhbmRsZU1vdmVOb3JtYWxFdmVudChkYXRhLCB0cmFuc3BvcnREYXksIHdlZWssIHRoaXMucGxhblRyYW5zcG9ydFdlZWtBcnIpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGF3YWl0IHRoaXMucGxhblNlbGVjdGVkTGluZXModHJhbnNwb3J0RGF5LCB3ZWVrKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWxsb3dEcm9wKGV2OiBEcmFnRXZlbnQsIHRyYW5zcG9ydERheTogUGxhbm5pbmdUcmFuc3BvcnRXZWVrRGF5KSB7XHJcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgaWYgKHRoaXMuX2RlbGl2ZXJ5UGxhbm5pbmdTZXJ2aWNlLmRyYWdnaW5nICYmIHRyYW5zcG9ydERheS5tYXhNaW51dGVzID4gMCAmJiB0cmFuc3BvcnREYXkuYXZhaWxhYmxlT25EYXRlKSB7XHJcbiAgICAgIHJldHVybiB0cmFuc3BvcnREYXkubWludXRlcyArIHRyYW5zcG9ydERheS5taW51dGVzIDwgdHJhbnNwb3J0RGF5Lm1heE1pbnV0ZXMgJiYgdHJhbnNwb3J0RGF5Lm1heE9yZGVyQW1vdW50IDwgdHJhbnNwb3J0RGF5Lm9yZGVyQW1vdW50ICYmIHRyYW5zcG9ydERheS5hdmFpbGFibGVPbkRhdGUgJiYgdGhpcy5jaGVja0F2YWlsYWJsZSh0cmFuc3BvcnREYXkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldENvbE51bSgpIHtcclxuICAgIGlmICh0aGlzLl9kZWxpdmVyeVBsYW5uaW5nU2VydmljZS52aWV3TW9kZSA9PT0gRGVsaXZlcnlQbGFubmluZ1ZpZXdNb2Rlcy5TaWRlYmFyKSB7XHJcbiAgICAgIHRoaXMuY29sdW1uTnVtID0gMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29sdW1uTnVtID0gMztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBkcmFnRW5kKGV2OiBEcmFnRXZlbnQpIHtcclxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB0aGlzLl9kZWxpdmVyeVBsYW5uaW5nU2VydmljZS5kcmFnZ2luZyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGZpbHRlcldlZWtBcnJheSh3ZWVrQXJyYXk6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheVtdKSB7XHJcbiAgICByZXR1cm4gd2Vla0FycmF5LnNsaWNlKDAsIHRoaXMuY29sdW1uTnVtKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVEYXRlUmFuZ2VDaGFuZ2UobmV3RGF0ZTogRGF0ZSkge1xyXG4gICAgdGhpcy5fZGVsaXZlcnlQbGFubmluZ1NlcnZpY2UuY3VycmVudFN0YXJ0RGF0ZSA9IG5ld0RhdGU7XHJcbiAgICB0aGlzLnJlc2V0UGxhbm5pbmdUcmFuc3BvcnRFdmVudC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgaGFuZGxlRGVsZXRlT3JkZXIoZGVsZXRlUmVzdWx0OiBbUGxhbk9yZGVyLCBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXldLCBwbGFubmluZ1RyYW5zcG9ydFdlZWs6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheVtdKSB7XHJcbiAgICBsZXQgb2xkV2VlazogUGxhbm5pbmdUcmFuc3BvcnRXZWVrRGF5W10gPSBwbGFubmluZ1RyYW5zcG9ydFdlZWs7XHJcbiAgICBsZXQgb3JkZXIgPSBkZWxldGVSZXN1bHRbMF07XHJcbiAgICBpZiAob3JkZXIpIHtcclxuICAgICAgYXdhaXQgdGhpcy5nZXRUcmFuc3BvcnRPcmRlcnMoZGVsZXRlUmVzdWx0WzFdKTtcclxuICAgICAgYXdhaXQgdGhpcy5nZXRPcmRlckxpbmVzUGxhbm5lZChvcmRlcik7XHJcbiAgICAgIGlmIChkZWxldGVSZXN1bHRbMF0ubGluZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuX2RlbGl2ZXJ5UGxhbm5pbmdTZXJ2aWNlLmRlbGV0aW5nT3JkZXIgPSBvcmRlcjtcclxuICAgICAgICBkZWxldGVSZXN1bHRbMV0ucGxhbm5lZE9yZGVycy5zcGxpY2UoZGVsZXRlUmVzdWx0WzFdLnBsYW5uZWRPcmRlcnMuaW5kZXhPZihvcmRlciksIDEpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlUGxhbm5pbmdUcmFuc3BvcnRFdmVudC5lbWl0KHtcclxuICAgICAgICAgIG9sZFdlZWs6IG9sZFdlZWssXHJcbiAgICAgICAgICB3ZWVrOiBwbGFubmluZ1RyYW5zcG9ydFdlZWssXHJcbiAgICAgICAgICBhY3Rpb246IERlbGl2ZXJ5UGxhbm5pbmdVcGRhdGVBY3Rpb25zLkRlbGV0ZVBsYW5uZWRPcmRlclxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX2RpYWxvZy5zaG93RXJyb3IoJ05PX0xJTkVTX1RPX0RFTEVURScsIHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlRGVsZXRlTGluZShkZWxldGVSZXN1bHQ6IHtcclxuICAgIG9yZGVyOiBQbGFuT3JkZXIsXHJcbiAgICBsaW5lOiBQbGFuT3JkZXJMaW5lXHJcbiAgfSwgd2Vla0RheTogUGxhbm5pbmdUcmFuc3BvcnRXZWVrRGF5LCB0cmFuc3BvcnRXZWVrUm93OiBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXlbXSkge1xyXG4gICAgbGV0IG9sZFdlZWsgPSB0cmFuc3BvcnRXZWVrUm93O1xyXG4gICAgbGV0IG9yZGVyID0gd2Vla0RheS5wbGFubmVkT3JkZXJzLmZpbmQob3JkZXIgPT4gb3JkZXIudHJhbnNJZCA9PT0gZGVsZXRlUmVzdWx0Lm9yZGVyLnRyYW5zSWQpO1xyXG4gICAgb3JkZXIubGluZXMgPSBvcmRlci5saW5lcy5maWx0ZXIobGluZSA9PiBsaW5lLm9yaWdpbmFsTGluZU5yICE9PSBkZWxldGVSZXN1bHQubGluZS5vcmlnaW5hbExpbmVOcik7XHJcbiAgICBpZiAob3JkZXIubGluZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHdlZWtEYXkucGxhbm5lZE9yZGVycy5zcGxpY2Uod2Vla0RheS5wbGFubmVkT3JkZXJzLmluZGV4T2Yob3JkZXIpLCAxKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2RlbGl2ZXJ5UGxhbm5pbmdTZXJ2aWNlLmRlbGV0aW5nT3JkZXIgPSBvcmRlcjtcclxuICAgIHRoaXMudXBkYXRlUGxhbm5pbmdUcmFuc3BvcnRFdmVudC5lbWl0KHtcclxuICAgICAgb2xkV2Vlazogb2xkV2VlayxcclxuICAgICAgd2VlazogdHJhbnNwb3J0V2Vla1JvdyxcclxuICAgICAgYWN0aW9uOiBEZWxpdmVyeVBsYW5uaW5nVXBkYXRlQWN0aW9ucy5EZWxldGVQbGFubmVkTGluZXNcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldE9yZGVyTGluZXNQbGFubmVkKG9yZGVyOiBQbGFuT3JkZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCByZXF1ZXN0OiBPcmRlckxpbmVzUGxhbm5lZFJlcXVlc3QgPSBuZXcgT3JkZXJMaW5lc1BsYW5uZWRSZXF1ZXN0KCk7XHJcbiAgICBsZXQgZmlsdGVyT2JqOiBQbGFubmluZ0ZpbHRlck9iamVjdCA9IG5ldyBQbGFubmluZ0ZpbHRlck9iamVjdCgpO1xyXG4gICAgcmVxdWVzdC5wbGFubmVkID0gdHJ1ZTtcclxuICAgIHJlcXVlc3QucGxhbm5pbmdJZCA9IHRoaXMuX2RlbGl2ZXJ5UGxhbm5pbmdTZXJ2aWNlLmN1cnJlbnRQbGFubmluZy5wbGFubmluZ0lkO1xyXG4gICAgcmVxdWVzdC50cmFuc0lkID0gb3JkZXIudHJhbnNJZDtcclxuICAgIHJlcXVlc3QucGxhbm5lZExpbmVJZCA9IG9yZGVyLnBsYW5uZWRMaW5lSWQ7XHJcbiAgICBmaWx0ZXJPYmoub25seUN1cnJlbnRXZWVrID0gdHJ1ZTtcclxuICAgIGZpbHRlck9iai5iZWdpbkN1cnJlbnRXZWVrID0gbmV3IERhdGUoKTtcclxuICAgIGZpbHRlck9iai5jaGVja09yZGVyTGluZXMgPSAxO1xyXG4gICAgcmVxdWVzdC5maWx0ZXJPYmplY3QgPSBmaWx0ZXJPYmo7XHJcbiAgICBpZiAoIW9yZGVyLmxpbmVzKSB7XHJcbiAgICAgIG9yZGVyLmxpbmVzID0gW107XHJcbiAgICB9XHJcbiAgICBvcmRlci5saW5lcy5wdXNoKC4uLmF3YWl0IHRoaXMuX3RyYW5zYWN0aW9uQ29uLmdldE9yZGVyTGluZXNQbGFubmVkKHJlcXVlc3QpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRUcmFuc3BvcnRPcmRlcnModHJhbnNwb3J0RGF5OiBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCByZXF1ZXN0OiBHZXRUcmFuc3BvcnRPcmRlcnNSZXF1ZXN0ID0gbmV3IEdldFRyYW5zcG9ydE9yZGVyc1JlcXVlc3QoKTtcclxuICAgIHJlcXVlc3QucGxhbm5pbmdJZCA9IHRoaXMuX2RlbGl2ZXJ5UGxhbm5pbmdTZXJ2aWNlLmN1cnJlbnRQbGFubmluZy5wbGFubmluZ0lkO1xyXG4gICAgcmVxdWVzdC5kYXRlID0gdHJhbnNwb3J0RGF5LmRhdGU7XHJcbiAgICByZXF1ZXN0LnRyYW5zcG9ydElkID0gdHJhbnNwb3J0RGF5LnRyYW5zcG9ydC50cmFuc3BvcnRJZDtcclxuICAgIHRyYW5zcG9ydERheS5wbGFubmVkT3JkZXJzID0gYXdhaXQgdGhpcy5fdHJhbnNhY3Rpb25Db24uZ2V0VHJhbnNwb3J0T3JkZXJzKHJlcXVlc3QpO1xyXG4gICAgdHJhbnNwb3J0RGF5Lm9yZGVyc0xvYWRlZCA9IHRydWU7XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHBsYW5PcmRlckxpbmVzKG9yZGVyOiBQbGFuT3JkZXIsIHRyYW5zcG9ydERheTogUGxhbm5pbmdUcmFuc3BvcnRXZWVrRGF5LCB3ZWVrOiBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXlbXSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IG9sZFdlZWs6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheVtdID0gd2VlaztcclxuICAgIGlmIChvcmRlci5saW5lcz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICBvcmRlci5saW5lc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgIG9yZGVyLnRhc2tzID0gW107XHJcbiAgICAgIG9yZGVyLnRhc2tzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgb3JkZXIubGluZXMuZm9yRWFjaChsaW5lID0+IHtcclxuICAgICAgICBsaW5lLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmICghdHJhbnNwb3J0RGF5LnBsYW5uZWRPcmRlcnMpIHtcclxuICAgICAgICB0cmFuc3BvcnREYXkucGxhbm5lZE9yZGVycyA9IFtvcmRlcl07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCF0cmFuc3BvcnREYXkucGxhbm5lZE9yZGVycy5maW5kKChwbGFubmVkT3JkZXI6IFBsYW5PcmRlcikgPT4gcGxhbm5lZE9yZGVyLnRyYW5zSWQgPT09IG9yZGVyLnRyYW5zSWQpKSB7XHJcbiAgICAgICAgICB0cmFuc3BvcnREYXkucGxhbm5lZE9yZGVycy5wdXNoKG9yZGVyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IHBsYW5uZWRPcmRlcjogUGxhbk9yZGVyID0gdHJhbnNwb3J0RGF5LnBsYW5uZWRPcmRlcnMuZmluZCgocGxhbm5lZE9yZGVyOiBQbGFuT3JkZXIpID0+IHBsYW5uZWRPcmRlci50cmFuc0lkID09PSBvcmRlci50cmFuc0lkKTtcclxuICAgICAgICAgIGlmIChvcmRlci5zdGFydFRpbWUgIT09IHRyYW5zcG9ydERheS5wbGFubmVkT3JkZXJzLmZpbmQoKHBsYW5uZWRPcmRlcjogUGxhbk9yZGVyKSA9PiBwbGFubmVkT3JkZXIudHJhbnNJZCA9PT0gb3JkZXIudHJhbnNJZCkuc3RhcnRUaW1lKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoIW9yZGVyLnBhcnREZWxpdmVyeSkge1xyXG4gICAgICAgICAgICAgIG9yZGVyLnN0YXJ0VGltZSA9IHBsYW5uZWRPcmRlci5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgICAgb3JkZXIuZW5kVGltZSA9IHBsYW5uZWRPcmRlci5lbmRUaW1lO1xyXG4gICAgICAgICAgICAgIHRyYW5zcG9ydERheS5wbGFubmVkT3JkZXJzLnNwbGljZSh0cmFuc3BvcnREYXkucGxhbm5lZE9yZGVycy5pbmRleE9mKHBsYW5uZWRPcmRlcikpO1xyXG4gICAgICAgICAgICAgIHRyYW5zcG9ydERheS5wbGFubmVkT3JkZXJzLnB1c2gob3JkZXIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRyYW5zcG9ydERheS5wbGFubmVkT3JkZXJzLnB1c2gob3JkZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0cmFuc3BvcnREYXkucGxhbm5lZE9yZGVycy5zcGxpY2UodHJhbnNwb3J0RGF5LnBsYW5uZWRPcmRlcnMuaW5kZXhPZih0cmFuc3BvcnREYXkucGxhbm5lZE9yZGVycy5maW5kKChwbGFubmVkT3JkZXI6IFBsYW5PcmRlcikgPT4gcGxhbm5lZE9yZGVyLnRyYW5zSWQgPT09IG9yZGVyLnRyYW5zSWQpKSwgMSk7XHJcbiAgICAgICAgICAgIHRyYW5zcG9ydERheS5wbGFubmVkT3JkZXJzLnB1c2gob3JkZXIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnVwZGF0ZVBsYW5uaW5nVHJhbnNwb3J0RXZlbnQuZW1pdCh7XHJcbiAgICAgICAgb2xkV2Vlazogb2xkV2VlayxcclxuICAgICAgICB3ZWVrOiB3ZWVrLFxyXG4gICAgICAgIGFjdGlvbjogRGVsaXZlcnlQbGFubmluZ1VwZGF0ZUFjdGlvbnMuUGxhbkxpbmVzXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYXdhaXQgdGhpcy5fZGlhbG9nLnNob3dFcnJvcignTk9fTElORVNfVE9fUExBTicsIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHBsYW5TZWxlY3RlZExpbmVzKHRyYW5zcG9ydERheTogUGxhbm5pbmdUcmFuc3BvcnRXZWVrRGF5LCB3ZWVrOiBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXlbXSk6IFByb21pc2U8dm9pZD4ge1xyXG5cclxuICAgIGxldCBwbGFuT3JkZXIgPSBhd2FpdCB0aGlzLl90cmFuc2FjdGlvbkNvbi5nZXRQbGFuT3JkZXIodGhpcy5fdHJhbnNhY3Rpb24uY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCk7XHJcbiAgICBhd2FpdCB0aGlzLmdldFNlcXVlbmNlT3JkZXJWYWx1ZShwbGFuT3JkZXIpO1xyXG4gICAgYXdhaXQgdGhpcy5nZXRPcmRlckxpbmVzUGxhbm5lZChwbGFuT3JkZXIpO1xyXG5cclxuICAgIGlmIChwbGFuT3JkZXIucGFydERlbGl2ZXJ5KSB7XHJcblxyXG4gICAgICBsZXQgc2VsZWN0ZWRMaW5lczogVHJhbnNhY3Rpb25MaW5lSW5mb1tdID0gdGhpcy5fdHJhbnNhY3Rpb24uY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uTGluZXMuZmlsdGVyKCh0cmFuc0xpbmVzOiBUcmFuc2FjdGlvbkxpbmVJbmZvKSA9PiB0cmFuc0xpbmVzLnNlbGVjdGVkKTtcclxuXHJcbiAgICAgIC8vRG9lcyB0aGUgb3JkZXIgYWxyZWFkeSBleGlzdD9cclxuICAgICAgaWYgKHRyYW5zcG9ydERheT8ucGxhbm5lZE9yZGVycz8uZmluZChvcmRlciA9PiBvcmRlci50cmFuc0lkID09PSBwbGFuT3JkZXIudHJhbnNJZCkpIHtcclxuICAgICAgICAvL1llcyB0aGUgb3JkZXIgZXhpc3RzXHJcblxyXG4gICAgICAgIC8vSWYgdGhlIGxpbmUocykgd2UncmUgdHJ5aW5nIHRvIHBsYW4gYWxyZWFkeSBhcmUgcGxhbm5lZCB3ZSBuZWVkIHRvIHZhbGlkYXRlIGlmIHdlIG5lZWQgdG8gcGxhbiBhbnl3YXlcclxuICAgICAgICBsZXQgY2FudFBsYW5TZWxlY3RlZExpbmVzOiBQbGFuT3JkZXJMaW5lW10gPSBbXTtcclxuICAgICAgICBpZiAoc2VsZWN0ZWRMaW5lcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0cmFuc3BvcnREYXkucGxhbm5lZE9yZGVycy5maW5kKChwbGFubmVkT3JkZXI6IFBsYW5PcmRlcikgPT4gcGxhbm5lZE9yZGVyLnRyYW5zSWQgPT09IHBsYW5PcmRlci50cmFuc0lkKS5saW5lcy5mb3JFYWNoKChwbGFubmVkTGluZTogUGxhbk9yZGVyTGluZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRMaW5lcy5maW5kKChzZWxlY3RlZExpbmU6IFRyYW5zYWN0aW9uTGluZUluZm8pID0+IHNlbGVjdGVkTGluZS5saW5lTnIgPT09IHBsYW5uZWRMaW5lLm9yaWdpbmFsTGluZU5yKSkge1xyXG4gICAgICAgICAgICAgIGNhbnRQbGFuU2VsZWN0ZWRMaW5lcy5wdXNoKHBsYW5uZWRMaW5lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgaWYgKGNhbnRQbGFuU2VsZWN0ZWRMaW5lcy5sZW5ndGggPT09IHBsYW5PcmRlci5saW5lcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGlhbG9nLnNob3dFcnJvcignTk9fTElORVNfVE9fUExBTicsIHRydWUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuX2RpYWxvZy5zaG93RXJyb3IoJ05PX0xJTkVTX1NFTEVDVEVEJywgdHJ1ZSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcGxhbm5lZE9yZGVyOiBQbGFuT3JkZXIgPSB0cmFuc3BvcnREYXkucGxhbm5lZE9yZGVycy5maW5kKChwbGFubmVkT3JkZXI6IFBsYW5PcmRlcikgPT4gcGxhbm5lZE9yZGVyLnRyYW5zSWQgPT09IHBsYW5PcmRlci50cmFuc0lkKTtcclxuXHJcbiAgICAgICAgLy9BbGwgbGluZXMgdGhhdCBuZWVkIHRvIGJlIHBsYW5uZWQgZm9yIGFuIG9yZGVyIGFyZSBpbiBwbGFuT3JkZXIgbm93XHJcbiAgICAgICAgLy9XaGljaCBtZWFucyB0aGF0IHdlIGp1c3QgZmlsdGVyIHRoZSBsaW5lcyBvdXQgdGhhdCBET04nVCBtYXRjaCBhIHNlbGVjdGVkIGxpbmUgQU5EIGFyZSBwbGFubmVkXHJcbiAgICAgICAgcGxhbk9yZGVyLmxpbmVzLmZpbHRlcihcclxuICAgICAgICAgICh0b1BsYW5MaW5lOiBQbGFuT3JkZXJMaW5lKSA9PiAhcGxhbm5lZE9yZGVyLmxpbmVzLmZpbmQoKHBsYW5uZWRPcmRlckxpbmU6IFBsYW5PcmRlckxpbmUpID0+IHBsYW5uZWRPcmRlckxpbmUub3JpZ2luYWxMaW5lTnIgPT09IHRvUGxhbkxpbmUub3JpZ2luYWxMaW5lTnIpXHJcbiAgICAgICAgICAgICYmICFzZWxlY3RlZExpbmVzLmZpbmQoKHNlbGVjdGVkTGluZTogVHJhbnNhY3Rpb25MaW5lSW5mbykgPT4gc2VsZWN0ZWRMaW5lLmxpbmVOciA9PT0gdG9QbGFuTGluZS5vcmlnaW5hbExpbmVOcikpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vT3JkZXIgZG9lcyBub3QgZXhpc3QsIGxldHMgcHJlcGFyZSBpdCB3aXRoIHRoZSBzZWxlY3RlZCBsaW5lc1xyXG4gICAgICAgIC8vRmlsdGVyIHRoZSBsaW5lcyBmb3Igb25seSB0aGUgc2VsZWN0ZWQgb25lc1xyXG4gICAgICAgIHBsYW5PcmRlci5saW5lcyA9IHBsYW5PcmRlci5saW5lcy5maWx0ZXIocGxhbm5lZE9yZGVyTGluZSA9PiBzZWxlY3RlZExpbmVzLmZpbmQoKHNlbGVjdGVkTGluZTogVHJhbnNhY3Rpb25MaW5lSW5mbykgPT4gcGxhbm5lZE9yZGVyTGluZS5vcmlnaW5hbExpbmVOciA9PT0gc2VsZWN0ZWRMaW5lLmxpbmVOcikpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vU2VuZCB0aGUgcHJlcGFyZWQgb3JkZXIgdG8gdGhlXHJcbiAgICB0aGlzLm9wZW5QbGFubmluZ1BvcHVwKHBsYW5PcmRlciwgdHJhbnNwb3J0RGF5LCB3ZWVrKTtcclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0U2VxdWVuY2VPcmRlclZhbHVlKG9yZGVyOiBQbGFuT3JkZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIG9yZGVyLnBsYW5uZWRMaW5lSWQgPSBhd2FpdCB0aGlzLl9kZWxpdmVyeVBsYW5uaW5nU2VydmljZS5nZXRPcmRlclNlcXVlbmNlVmFsdWUoKTtcclxuICAgIG9yZGVyLmNoYWluZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBoYW5kbGVQb3B1cFBsYW5FdmVudChldmVudDogW1BsYW5PcmRlciwgUGxhbm5pbmdUcmFuc3BvcnRXZWVrRGF5LCBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXlbXV0pIHtcclxuXHJcbiAgICB0aGlzLnNob3dOb3RlRGlhbG9nID0gZmFsc2U7XHJcbiAgICBhd2FpdCB0aGlzLmdldFRyYW5zcG9ydE9yZGVycyhldmVudFsxXSk7XHJcbiAgICBhd2FpdCB0aGlzLmdldFNlcXVlbmNlT3JkZXJWYWx1ZShldmVudFswXSk7XHJcbiAgICBhd2FpdCB0aGlzLmdldE9yZGVyTGluZXNQbGFubmVkKGV2ZW50WzBdKTtcclxuICAgIGF3YWl0IHRoaXMucGxhbk9yZGVyTGluZXMoZXZlbnRbMF0sIGV2ZW50WzFdLCBldmVudFsyXSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlU2V0dGluZ3NTYXZlKGNoYW5nZWQ6IGJvb2xlYW4pIHtcclxuICAgIGlmIChjaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlUGxhbm5pbmdUcmFuc3BvcnRFdmVudC5lbWl0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb3BlblNldHRpbmdzRGlhbG9nKHRyYW5zcG9ydERheTogUGxhbm5pbmdUcmFuc3BvcnRXZWVrRGF5KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkVHJhbnNwb3J0RGF5ID0gdHJhbnNwb3J0RGF5O1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRUcmFuc3BvcnREYXkpIHtcclxuICAgICAgdGhpcy5zaG93U2V0dGluZ3NEaWFsb2cgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGhhbmRsZUNhbGVuZGFyUGxhbkV2ZW50KGRhdGE6IHtcclxuICAgIGN1cnJlbnRIb3VyOiBzdHJpbmcsXHJcbiAgICBkYXRhOiBzdHJpbmdcclxuICB9LCB0cmFuc3BvcnRXZWVrRGF5OiBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXksIHdlZWs6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheVtdKSB7XHJcbiAgICBsZXQgcGxhbk9yZGVyOiBQbGFuT3JkZXI7XHJcbiAgICBpZiAoZGF0YS5kYXRhID09PSAnZmFsc2UnICYmIHRoaXMuX2RlbGl2ZXJ5UGxhbm5pbmdTZXJ2aWNlLmN1cnJlbnRUcmFuc0lkKSB7XHJcbiAgICAgIHBsYW5PcmRlciA9IGF3YWl0IHRoaXMuX3RyYW5zYWN0aW9uQ29uLmdldFBsYW5PcmRlcih0aGlzLl9kZWxpdmVyeVBsYW5uaW5nU2VydmljZT8uY3VycmVudFRyYW5zSWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGxhbk9yZGVyID0gYXdhaXQgdGhpcy5fdHJhbnNhY3Rpb25Db24uZ2V0UGxhbk9yZGVyKHBhcnNlSW50KGRhdGEuZGF0YSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0cmFuc3BvcnRXZWVrRGF5LnBsYW5uZWRPcmRlcnMuZmluZCgocGxhbm5lZE9yZGVyOiBQbGFuT3JkZXIpID0+IHBsYW5uZWRPcmRlci50cmFuc0lkID09PSBwbGFuT3JkZXIudHJhbnNJZCkpIHtcclxuICAgICAgYXdhaXQgdGhpcy5fZGlhbG9nLnNob3dFcnJvcih0aGlzLl9kaWN0aW9uYXJ5LmdldCgnT1JERVJfSEFTX0FMUkVBRFlfQkVFTl9QTEFOTkVEJyksIHRydWUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBsYW5PcmRlciAmJiBkYXRhLmN1cnJlbnRIb3VyKSB7XHJcblxyXG4gICAgICBwbGFuT3JkZXIuc3RhcnRUaW1lID0gdGhpcy5jYWxjdWxhdGVTdGFydFRpbWUodHJhbnNwb3J0V2Vla0RheSwgZGF0YS5jdXJyZW50SG91cik7XHJcbiAgICAgIHBsYW5PcmRlci5lbmRUaW1lID0gdGhpcy5jYWxjdWxhdGVFbmRUaW1lKHBsYW5PcmRlci5zdGFydFRpbWUsIGRhdGEuY3VycmVudEhvdXIsIHBsYW5PcmRlcik7XHJcblxyXG4gICAgICBhd2FpdCB0aGlzLmdldFRyYW5zcG9ydE9yZGVycyh0cmFuc3BvcnRXZWVrRGF5KTtcclxuICAgICAgYXdhaXQgdGhpcy5nZXRTZXF1ZW5jZU9yZGVyVmFsdWUocGxhbk9yZGVyKTtcclxuICAgICAgYXdhaXQgdGhpcy5nZXRPcmRlckxpbmVzUGxhbm5lZChwbGFuT3JkZXIpO1xyXG4gICAgICBhd2FpdCB0aGlzLnBsYW5PcmRlckxpbmVzKHBsYW5PcmRlciwgdHJhbnNwb3J0V2Vla0RheSwgd2Vlayk7XHJcbiAgICAgIGlmIChkYXRhLmRhdGEgPT09ICdmYWxzZScgJiYgdGhpcy5fdHJhbnNhY3Rpb24uY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby51dWlkKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fdHJhbnNhY3Rpb24uZ2V0VHJhbnNhY3Rpb25CeUlkKHRoaXMuX2RlbGl2ZXJ5UGxhbm5pbmdTZXJ2aWNlLmN1cnJlbnRUcmFuc0lkKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl90cmFuc2FjdGlvbi5zYXZlVHJhbnNhY3Rpb24oKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl90cmFuc2FjdGlvbi5jaGVja1JlZlRyYW5zYWN0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYWxjdWxhdGVTdGFydFRpbWUodHJhbnNwb3J0V2Vla0RheTogUGxhbm5pbmdUcmFuc3BvcnRXZWVrRGF5LCBjdXJyZW50SG91cjogc3RyaW5nKTogRGF0ZSB7XHJcbiAgICBsZXQgc3RhcnREYXRlOiBEYXRlID0gbmV3IERhdGUodHJhbnNwb3J0V2Vla0RheS5kYXRlKTtcclxuICAgIGxldCBzdGFydFRpbWU6IG51bWJlciA9IHBhcnNlSW50KGN1cnJlbnRIb3VyLnNwbGl0KCc6JylbMF0pO1xyXG4gICAgc3RhcnREYXRlLnNldEhvdXJzKHN0YXJ0VGltZSk7XHJcbiAgICBzdGFydERhdGUuc2V0TWludXRlcyhwYXJzZUludChjdXJyZW50SG91ci5zcGxpdCgnOicpWzFdKSA+IDAgPyBwYXJzZUludChjdXJyZW50SG91ci5zcGxpdCgnOicpWzFdKSA6IDApO1xyXG4gICAgc3RhcnREYXRlLnNldFNlY29uZHMoMCk7XHJcblxyXG4gICAgcmV0dXJuIHN0YXJ0RGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYWxjdWxhdGVFbmRUaW1lKHN0YXJ0RGF0ZTogRGF0ZSwgY3VycmVudEhvdXI6IHN0cmluZywgcGxhbk9yZGVyOiBQbGFuT3JkZXIpOiBEYXRlIHtcclxuICAgIGxldCBlbmRUaW1lOiBEYXRlID0gbmV3IERhdGUoc3RhcnREYXRlKTtcclxuXHJcbiAgICBsZXQgc3BsaXRIb3VyID0gY3VycmVudEhvdXIuc3BsaXQoJzonKTtcclxuICAgIGNvbnN0IG5ld0VuZE1pbnV0ZXMgPSBzcGxpdEhvdXJbMV0gPT09ICcwMCcgPyAzMCA6IDA7XHJcbiAgICBjb25zdCBuZXdFbmRIb3VyID0gc3BsaXRIb3VyWzFdID09PSAnMzAnID8gKHBhcnNlSW50KHNwbGl0SG91clswXSkgKyAxKSA6IHBhcnNlSW50KHNwbGl0SG91clswXSk7XHJcbiAgICBlbmRUaW1lLnNldEhvdXJzKG5ld0VuZEhvdXIpO1xyXG4gICAgZW5kVGltZS5zZXRNaW51dGVzKG5ld0VuZE1pbnV0ZXMpO1xyXG4gICAgbGV0IGFzc2VtYmx5VGltZSA9IHRoaXMuX2RlbGl2ZXJ5UGxhbm5pbmdTZXJ2aWNlLnRvdGFsQXNzZW1ibHlUaW1lKHBsYW5PcmRlcikgKiA2MCAqIDEwMDA7XHJcbiAgICBlbmRUaW1lLnNldFRpbWUoZW5kVGltZS5nZXRUaW1lKCkgKyBhc3NlbWJseVRpbWUpO1xyXG5cclxuICAgIHJldHVybiBlbmRUaW1lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9wZW5QbGFubmluZ1BvcHVwKHBsYW5PcmRlcjogUGxhbk9yZGVyLCB0cmFuc3BvcnREYXk6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheSwgd2VlazogUGxhbm5pbmdUcmFuc3BvcnRXZWVrRGF5W10pIHtcclxuICAgIHRoaXMuc2hvd05vdGVEaWFsb2cgPSB0cnVlO1xyXG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICBpZiAodGhpcy5wbGFubmluZ1BvcHVwUmVmKSB7XHJcbiAgICAgIHRoaXMucGxhbm5pbmdQb3B1cFJlZi5wbGFuT3JkZXIgPSBwbGFuT3JkZXI7XHJcbiAgICAgIHRoaXMucGxhbm5pbmdQb3B1cFJlZi50cmFuc3BvcnREYXkgPSB0cmFuc3BvcnREYXk7XHJcbiAgICAgIHRoaXMucGxhbm5pbmdQb3B1cFJlZi53ZWVrID0gd2VlaztcclxuICAgICAgdGhpcy5wbGFubmluZ1BvcHVwUmVmLnRyYW5zYWN0aW9uID0gdGhpcy5fdHJhbnNhY3Rpb24uY3VycmVudFRyYW5zYWN0aW9uO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUF2YWlsYWJpbGl0eUNoZWNrZWQodmFsdWU6IHsgdHJhbnNwb3J0RGF5OiBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXksIGF2YWlsYWJsZTogYm9vbGVhbiB9KSB7XHJcbiAgICB0aGlzLmF2YWlsYWJpbGl0eS5wdXNoKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjaGVja0F2YWlsYWJsZSh0cmFuc3BvcnREYXk6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheSkge1xyXG4gICAgbGV0IHRyYW5zcG9ydCA9IHRoaXMuYXZhaWxhYmlsaXR5LmZpbmQodHJhbnNwb3J0T2JqZWN0ID0+IHRyYW5zcG9ydE9iamVjdC50cmFuc3BvcnREYXkgPT09IHRyYW5zcG9ydERheSk7XHJcbiAgICByZXR1cm4gdHJhbnNwb3J0ICYmICF0cmFuc3BvcnQuYXZhaWxhYmxlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZVRpbWVDaGFuZ2VFdmVudCh0cmFuc3BvcnREYXk6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheSwgd2VlazogUGxhbm5pbmdUcmFuc3BvcnRXZWVrRGF5W10sIG9iajogUGxhbk9yZGVyKSB7XHJcbiAgICBsZXQgb2xkV2VlazogUGxhbm5pbmdUcmFuc3BvcnRXZWVrRGF5W10gPSB3ZWVrO1xyXG4gICAgbGV0IG9yZGVyOiBQbGFuT3JkZXIgPSB0cmFuc3BvcnREYXkucGxhbm5lZE9yZGVycy5maW5kKHBsYW5PcmRlciA9PiBwbGFuT3JkZXIudHJhbnNJZCA9PT0gb2JqLnRyYW5zSWQpO1xyXG4gICAgb3JkZXIuc3RhcnRUaW1lID0gbmV3IERhdGUob2JqWydzdGFydFRpbWUnXSk7XHJcbiAgICBvcmRlci5lbmRUaW1lID0gbmV3IERhdGUob2JqWydlbmRUaW1lJ10pO1xyXG5cclxuICAgIHRoaXMudXBkYXRlUGxhbm5pbmdUcmFuc3BvcnRFdmVudC5lbWl0KHtvbGRXZWVrOiBvbGRXZWVrLCB3ZWVrOiB3ZWVrLCBhY3Rpb246IHRoaXMucGxhbm5pbmdBY3Rpb25zLlBsYW5PcmRlcn0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGhhbmRsZU1vdmVFdmVudChtb3ZlRGF0YToge1xyXG4gICAgaG91cjogc3RyaW5nLFxyXG4gICAgc2NoZWR1bGVkT2JqZWN0OiBPYmplY3RcclxuICB9LCB0cmFuc3BvcnQ6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheSwgd2VlazogUGxhbm5pbmdUcmFuc3BvcnRXZWVrRGF5W10sIHdlZWtBcnI6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheVtdW10pIHtcclxuICAgIGxldCBwbGFuT3JkZXI6IFBsYW5PcmRlciA9IGF3YWl0IHRoaXMuX3RyYW5zYWN0aW9uQ29uLmdldFBsYW5PcmRlcihtb3ZlRGF0YS5zY2hlZHVsZWRPYmplY3RbJ29iaiddWydpZCddKTtcclxuICAgIC8vcmVtb3ZlIGZyb20gb2xkIHRyYW5zcG9ydFxyXG4gICAgd2Vla0Fyci5mb3JFYWNoKCgocm93OiBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXlbXSkgPT4ge1xyXG4gICAgICByb3cuZm9yRWFjaCgod2Vla0RheTogUGxhbm5pbmdUcmFuc3BvcnRXZWVrRGF5KSA9PiB7XHJcbiAgICAgICAgaWYgKHdlZWtEYXk/LnBsYW5uZWRPcmRlcnM/LmZpbmQob3JkZXIgPT4gb3JkZXIudHJhbnNJZCA9PT0gcGxhbk9yZGVyLnRyYW5zSWQpKSB7XHJcbiAgICAgICAgICB3ZWVrRGF5LnBsYW5uZWRPcmRlcnMuc3BsaWNlKHdlZWtEYXkucGxhbm5lZE9yZGVycy5pbmRleE9mKHBsYW5PcmRlcikpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KSk7XHJcblxyXG4gICAgaWYgKHBsYW5PcmRlcikge1xyXG4gICAgICAvL3Jlc3RvcmUgb3JkZXJcclxuICAgICAgYXdhaXQgdGhpcy5fdHJhbnNhY3Rpb25Db24ucmVzdG9yZURlbGl2ZXJ5U2V0dGluZ3MoW3BsYW5PcmRlcl0pO1xyXG5cclxuICAgICAgLy9zZXQgbmV3IGRhdGUgZm9yIG9yZGVyIGFuZCBwbGFuIGl0IG9uIG5ldyB0cmFuc3BvcnRcclxuICAgICAgbGV0IG5ld0RhdGU6IERhdGUgPSBuZXcgRGF0ZSh0cmFuc3BvcnQuZGF0ZSk7XHJcbiAgICAgIGxldCBzcGxpdFRpbWU6IHN0cmluZ1tdID0gbW92ZURhdGEuaG91ci5zcGxpdCgnOicpO1xyXG4gICAgICBuZXdEYXRlLnNldEhvdXJzKHBhcnNlSW50KHNwbGl0VGltZVswXSkpO1xyXG4gICAgICBuZXdEYXRlLnNldE1pbnV0ZXMocGFyc2VJbnQoc3BsaXRUaW1lWzFdKSk7XHJcbiAgICAgIG5ld0RhdGUuc2V0U2Vjb25kcygwKTtcclxuICAgICAgcGxhbk9yZGVyLnN0YXJ0VGltZSA9IG5ld0RhdGU7XHJcbiAgICAgIGxldCBlbmREYXRlID0gbmV3IERhdGUocGxhbk9yZGVyLnN0YXJ0VGltZSk7XHJcbiAgICAgIHBsYW5PcmRlci5lbmRUaW1lID0gdGhpcy5fZGVsaXZlcnlQbGFubmluZ1NlcnZpY2UuYWRkTWludXRlcyhlbmREYXRlLCBtb3ZlRGF0YS5zY2hlZHVsZWRPYmplY3RbJ29iaiddWydoZWlnaHQnXSk7XHJcbiAgICAgIGF3YWl0IHRoaXMuZ2V0VHJhbnNwb3J0T3JkZXJzKHRyYW5zcG9ydCk7XHJcbiAgICAgIGF3YWl0IHRoaXMuZ2V0U2VxdWVuY2VPcmRlclZhbHVlKHBsYW5PcmRlcik7XHJcbiAgICAgIGF3YWl0IHRoaXMuZ2V0T3JkZXJMaW5lc1BsYW5uZWQocGxhbk9yZGVyKTtcclxuICAgICAgYXdhaXQgdGhpcy5wbGFuT3JkZXJMaW5lcyhwbGFuT3JkZXIsIHRyYW5zcG9ydCwgd2Vlayk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgaGFuZGxlTW92ZU5vcm1hbEV2ZW50KHRyYW5zSWQ6IHN0cmluZywgdHJhbnNwb3J0OiBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXksIHdlZWs6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheVtdLCB3ZWVrQXJyOiBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXlbXVtdKSB7XHJcbiAgICBsZXQgcGxhbk9yZGVyOiBQbGFuT3JkZXIgPSBhd2FpdCB0aGlzLl90cmFuc2FjdGlvbkNvbi5nZXRQbGFuT3JkZXIocGFyc2VJbnQodHJhbnNJZCkpO1xyXG4gICAgLy9yZW1vdmUgZnJvbSBvbGQgdHJhbnNwb3J0XHJcbiAgICB3ZWVrQXJyLmZvckVhY2goKChyb3c6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheVtdKSA9PiB7XHJcbiAgICAgIHJvdy5mb3JFYWNoKCh3ZWVrRGF5OiBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXkpID0+IHtcclxuICAgICAgICBpZiAod2Vla0RheT8ucGxhbm5lZE9yZGVycz8uZmluZChvcmRlciA9PiBvcmRlci50cmFuc0lkID09PSBwbGFuT3JkZXIudHJhbnNJZCkpIHtcclxuICAgICAgICAgIHdlZWtEYXkucGxhbm5lZE9yZGVycy5zcGxpY2Uod2Vla0RheS5wbGFubmVkT3JkZXJzLmluZGV4T2YocGxhbk9yZGVyKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pKTtcclxuXHJcbiAgICBpZiAocGxhbk9yZGVyKSB7XHJcbiAgICAgIC8vcmVzdG9yZSBvcmRlclxyXG4gICAgICBhd2FpdCB0aGlzLl90cmFuc2FjdGlvbkNvbi5yZXN0b3JlRGVsaXZlcnlTZXR0aW5ncyhbcGxhbk9yZGVyXSk7XHJcbiAgICAgIGF3YWl0IHRoaXMuZ2V0VHJhbnNwb3J0T3JkZXJzKHRyYW5zcG9ydCk7XHJcbiAgICAgIGF3YWl0IHRoaXMuZ2V0U2VxdWVuY2VPcmRlclZhbHVlKHBsYW5PcmRlcik7XHJcbiAgICAgIGF3YWl0IHRoaXMuZ2V0T3JkZXJMaW5lc1BsYW5uZWQocGxhbk9yZGVyKTtcclxuICAgICAgYXdhaXQgdGhpcy5wbGFuT3JkZXJMaW5lcyhwbGFuT3JkZXIsIHRyYW5zcG9ydCwgd2Vlayk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlRWRpdFBsYW5uZWRPcmRlcihwbGFuT3JkZXI6IFBsYW5PcmRlciwgdHJhbnNwb3J0RGF5OiBQbGFubmluZ1RyYW5zcG9ydFdlZWtEYXksIHdlZWs6IFBsYW5uaW5nVHJhbnNwb3J0V2Vla0RheVtdKSB7XHJcbiAgICB0aGlzLm9wZW5QbGFubmluZ1BvcHVwKHBsYW5PcmRlciwgdHJhbnNwb3J0RGF5LCB3ZWVrKTtcclxuICB9XHJcbn1cclxuIl19
|