@tiba-spark/client-shared-lib 26.3.0-206 → 26.3.0-219
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/esm2022/libraries/modules/facility/facility.service.mjs +13 -5
- package/esm2022/libraries/modules/facility/facility.state.mjs +67 -22
- package/esm2022/libraries/modules/park-manager/park-manager.state.mjs +9 -2
- package/esm2022/libraries/services/company.service.mjs +23 -3
- package/fesm2022/tiba-spark-client-shared-lib.mjs +108 -28
- package/fesm2022/tiba-spark-client-shared-lib.mjs.map +1 -1
- package/libraries/modules/facility/facility.service.d.ts.map +1 -1
- package/libraries/modules/facility/facility.state.d.ts.map +1 -1
- package/libraries/modules/park-manager/park-manager.state.d.ts.map +1 -1
- package/libraries/services/company.service.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -258,7 +258,12 @@ let FacilityState = class FacilityState {
|
|
|
258
258
|
}
|
|
259
259
|
onZoneChangedAction(ctx, { zone, parkId }) {
|
|
260
260
|
const selected = ctx.getState().selected;
|
|
261
|
-
|
|
261
|
+
// SPRK3-14984: ZoneChangedAction is a SignalR push, so it arrives regardless of
|
|
262
|
+
// whether a park is selected or its zones are loaded yet.
|
|
263
|
+
if (!selected?.zones) {
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
const zoneIndex = selected.zones.findIndex(item => item.id === zone.id && item.parkID === parkId);
|
|
262
267
|
zone.occupancy = zone.monthliesOccupancy + zone.transientsOccupancy;
|
|
263
268
|
zone.vacancy = zone.capacity - zone.occupancy;
|
|
264
269
|
switch (zone.rulesMode) {
|
|
@@ -283,7 +288,13 @@ let FacilityState = class FacilityState {
|
|
|
283
288
|
selected.zones = clone(selected.zones);
|
|
284
289
|
const facilityDictionary = ctx.getState().dictionary;
|
|
285
290
|
const guid = ctx.getState().guid;
|
|
286
|
-
|
|
291
|
+
// SPRK3-14984 (Sentry JAVASCRIPT-ANGULAR-35): dictionary defaults to {} and is
|
|
292
|
+
// always truthy, but dictionary[guid] is undefined until the tenant is hydrated
|
|
293
|
+
// and the park may not be under it. The selected/zones slices are still correct.
|
|
294
|
+
const storedFacility = facilityDictionary[guid]?.[selected.id];
|
|
295
|
+
if (storedFacility) {
|
|
296
|
+
storedFacility.zones = selected.zones;
|
|
297
|
+
}
|
|
287
298
|
ctx.patchState({
|
|
288
299
|
dictionary: facilityDictionary,
|
|
289
300
|
selected,
|
|
@@ -334,9 +345,17 @@ let FacilityState = class FacilityState {
|
|
|
334
345
|
servicesRunningStatusDictionary[guid] = servicesRunningStatus;
|
|
335
346
|
ctx.patchState({ servicesRunningStatusDictionary });
|
|
336
347
|
// Updating ParkConnectionStatus for parks
|
|
337
|
-
if (facilityDictionary)
|
|
348
|
+
// SPRK3-14836 (Sentry JAVASCRIPT-ANGULAR-1R): the old `if (facilityDictionary)`
|
|
349
|
+
// guarded the outer object, which defaults to {} and always passes, while
|
|
350
|
+
// Object.values(facilityDictionary[guid]) threw for an unhydrated tenant. The
|
|
351
|
+
// connectionStatusDictionary slice needs its own per-guid bucket for the same reason.
|
|
352
|
+
const parksForGuid = facilityDictionary?.[guid];
|
|
353
|
+
if (parksForGuid) {
|
|
338
354
|
const connectionStatusDictionary = cloneDeep(ctx.getState().connectionStatusDictionary);
|
|
339
|
-
|
|
355
|
+
if (!connectionStatusDictionary[guid]) {
|
|
356
|
+
connectionStatusDictionary[guid] = {};
|
|
357
|
+
}
|
|
358
|
+
const facilities = Object.values(parksForGuid);
|
|
340
359
|
for (const facility of facilities) {
|
|
341
360
|
connectionStatusDictionary[guid][facility.id] = this.globalErrorService.getParkConnectionStatus(guid, facility, servicesRunningStatus, facilityDictionary);
|
|
342
361
|
}
|
|
@@ -360,6 +379,9 @@ let FacilityState = class FacilityState {
|
|
|
360
379
|
}
|
|
361
380
|
// Updating ParkConnectionStatus for parks
|
|
362
381
|
const connectionStatusDictionary = cloneDeep(ctx.getState().connectionStatusDictionary);
|
|
382
|
+
if (!connectionStatusDictionary[guid]) {
|
|
383
|
+
connectionStatusDictionary[guid] = {};
|
|
384
|
+
}
|
|
363
385
|
const servicesRunningStatusDictionary = ctx.getState().servicesRunningStatusDictionary;
|
|
364
386
|
const facilities = Object.values(facilityDictionary[guid]);
|
|
365
387
|
for (const facility of facilities) {
|
|
@@ -465,7 +487,11 @@ let FacilityState = class FacilityState {
|
|
|
465
487
|
}
|
|
466
488
|
}
|
|
467
489
|
onFacilityRemoteCommandExecutedAction(ctx, { facilityRemoteCommandEvent }) {
|
|
468
|
-
|
|
490
|
+
// The command-executed push can name a tenant/park this client has not loaded.
|
|
491
|
+
const facility = ctx.getState().dictionary[facilityRemoteCommandEvent.guid]?.[facilityRemoteCommandEvent.parkId];
|
|
492
|
+
if (!facility) {
|
|
493
|
+
return;
|
|
494
|
+
}
|
|
469
495
|
const operationTypeKey = FacilityRemoteCommandsLocalizationKey[FacilityRemoteCommandTypes[facilityRemoteCommandEvent.type]];
|
|
470
496
|
const config = {
|
|
471
497
|
messages: [{ value: facility.name, class: NotificationClass.body }],
|
|
@@ -496,19 +522,36 @@ let FacilityState = class FacilityState {
|
|
|
496
522
|
const facilityDictionary = ctx.getState().dictionary;
|
|
497
523
|
const nowMoment = moment();
|
|
498
524
|
if (facilitiesMap) {
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
525
|
+
// Same class as the SPRK3-15108 guard in the else-branch below: neither the
|
|
526
|
+
// incoming map nor the stored dictionary is guaranteed to hold this guid, and a
|
|
527
|
+
// super-park map can name a child park the dictionary has not loaded.
|
|
528
|
+
const storedParks = facilityDictionary[guid];
|
|
529
|
+
facilitiesMap[guid]?.forEach(f => {
|
|
530
|
+
const storedFacility = storedParks?.[f.id];
|
|
531
|
+
if (!storedFacility) {
|
|
532
|
+
return;
|
|
533
|
+
}
|
|
534
|
+
f.cloudId = storedFacility.cloudId;
|
|
535
|
+
f.featurePermissions = storedFacility.featurePermissions;
|
|
536
|
+
f.permissions = storedFacility.permissions;
|
|
537
|
+
storedParks[f.id] = this.updateFacilityConnectivityFlags(storedFacility, f);
|
|
505
538
|
});
|
|
506
539
|
}
|
|
507
540
|
else {
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
541
|
+
// SPRK3-15108: getFacility can resolve with an empty payload, and the dictionary may hold
|
|
542
|
+
// no entry for this guid/facility yet. Either way there is nothing to merge, and the three
|
|
543
|
+
// reads below used to throw (Sentry JAVASCRIPT-ANGULAR-3F) — the `if (facility)` guard
|
|
544
|
+
// further down was added for the same class of crash but sits after the dereference.
|
|
545
|
+
const storedFacility = facility ? facilityDictionary[guid]?.[facility.id] : null;
|
|
546
|
+
if (!storedFacility) {
|
|
547
|
+
return;
|
|
548
|
+
}
|
|
549
|
+
facility.cloudId = storedFacility.cloudId;
|
|
550
|
+
facility.featurePermissions = storedFacility.featurePermissions;
|
|
551
|
+
facility.permissions = storedFacility.permissions;
|
|
552
|
+
// The guard above validated [facility.id]; parkId can differ for a super-park
|
|
553
|
+
// child, in which case [parkId] holds nothing to merge from.
|
|
554
|
+
facilityDictionary[guid][parkId] = this.updateFacilityConnectivityFlags(facilityDictionary[guid][parkId] ?? storedFacility, facility);
|
|
512
555
|
}
|
|
513
556
|
// Guard: a super-park facilities map may not contain the requested parkId
|
|
514
557
|
// (or the response may be empty). Skip the time-diff calc rather than
|
|
@@ -517,7 +560,7 @@ let FacilityState = class FacilityState {
|
|
|
517
560
|
clientServerDiffDictionary[guid] = this.getClientServerTimeDiff(facility, nowMoment);
|
|
518
561
|
this.patchDiffDictinaryToStore(ctx, clientServerDiffDictionary);
|
|
519
562
|
}
|
|
520
|
-
this.patchFacilitiesToStore(ctx, facilityDictionary, facilityDictionary[guid][parkId], appModule);
|
|
563
|
+
this.patchFacilitiesToStore(ctx, facilityDictionary, facilityDictionary[guid]?.[parkId], appModule);
|
|
521
564
|
}
|
|
522
565
|
updateFacilityConnectivityFlags(storedFacility, incomingFacility) {
|
|
523
566
|
const cloudDateTimeUtc = this.getCloudDateTimeUtc();
|
|
@@ -530,7 +573,7 @@ let FacilityState = class FacilityState {
|
|
|
530
573
|
ctx.patchState({
|
|
531
574
|
dictionary,
|
|
532
575
|
});
|
|
533
|
-
if (appModule === AppModule.Cc) {
|
|
576
|
+
if (appModule === AppModule.Cc && facility) {
|
|
534
577
|
const allowedActions = convertFeaturePermissionsToDictionary(facility.featurePermissions);
|
|
535
578
|
ctx.patchState({
|
|
536
579
|
selected: facility,
|
|
@@ -558,10 +601,12 @@ let FacilityState = class FacilityState {
|
|
|
558
601
|
}
|
|
559
602
|
updateServiceRunningStatusFlags(currentServicesRunningStatus, newServicesRunningStatus) {
|
|
560
603
|
const cloudDateTimeUtc = this.getCloudDateTimeUtc();
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
newServicesRunningStatus.
|
|
564
|
-
newServicesRunningStatus.
|
|
604
|
+
// The caller passes servicesRunningStatusDictionary[guid], which is absent on the
|
|
605
|
+
// first status push for a tenant -- fall back to "disconnected as of now".
|
|
606
|
+
newServicesRunningStatus.smartParkDisconnectedTimestamp = newServicesRunningStatus.isSmartParkConnected ? null : currentServicesRunningStatus?.smartParkDisconnectedTimestamp ?? cloudDateTimeUtc;
|
|
607
|
+
newServicesRunningStatus.smartParkCoreDisconnectedTimestamp = newServicesRunningStatus.isSmartParkCoreConnected ? null : currentServicesRunningStatus?.smartParkCoreDisconnectedTimestamp ?? cloudDateTimeUtc;
|
|
608
|
+
newServicesRunningStatus.sparkCloudDisconnectedTimestamp = newServicesRunningStatus.isSparkCloudConnected ? null : currentServicesRunningStatus?.sparkCloudDisconnectedTimestamp ?? cloudDateTimeUtc;
|
|
609
|
+
newServicesRunningStatus.sparkCoreDisconnectedTimestamp = newServicesRunningStatus.isSparkCoreConnected ? null : currentServicesRunningStatus?.sparkCoreDisconnectedTimestamp ?? cloudDateTimeUtc;
|
|
565
610
|
return newServicesRunningStatus;
|
|
566
611
|
}
|
|
567
612
|
assignFacility(storedFacility, incomingFacility) {
|
|
@@ -918,4 +963,4 @@ export { FacilityState };
|
|
|
918
963
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FacilityState, decorators: [{
|
|
919
964
|
type: Injectable
|
|
920
965
|
}], ctorParameters: () => [{ type: i1.Store }, { type: i2.BaseFacilityCommandsConfigService }, { type: i3.LocalStorageService }, { type: i4.FacilityMenuService }, { type: i5.FacilityRpcServiceProxy }, { type: i6.Rpc.RemoteCommandRpcServiceProxy }, { type: i5.ZoneRpcServiceProxy }, { type: i5.ZRpcServiceProxy }, { type: i7.GlobalErrorService }, { type: i8.CommandNotificationService }, { type: i9.TranslateService }, { type: i10.AppConfigService }], propDecorators: { onClearFacilityDictionary: [], onSetSmartparkBasicAllAction: [], onSetSmartparkBasicAction: [], onUpdateSmartparkNameAction: [], onRemoveSmartparkBasicAction: [], onLoadParkingLotAction: [], onLoadRemoteCommandsRefAction: [], onLoadFacilityRemoteCommandsRefAction: [], onLoadFacilityAction: [], onUnloadParkingLotAction: [], onSetDeviceRemoteCommandsMapAction: [], onSetFacilityRemoteCommandsMapAction: [], onZoneChangedAction: [], onServicesRunningStatusChangedAction: [], onFacilityChangedAction: [], onSetBasicMenuAction: [], onLoadReportsZonesAction: [], onLoadAccessProfileZZonesAction: [], onLoadCcMainZonesAction: [], onLoadZsAction: [], onClearZonesAction: [], onClearZsAction: [], onSetSelectedParkAction: [], onClearSelectedFacilityAction: [], onClearInactiveSelectedParkAction: [], onFacilityRemoteCommandExecutedAction: [], onLoadMacroCommandsAction: [], onClearMacroCommandsAction: [] } });
|
|
921
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjaWxpdHkuc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc2hhcmVkLWxpYi9zcmMvbGlicmFyaWVzL21vZHVsZXMvZmFjaWxpdHkvZmFjaWxpdHkuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBdUIsTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDMUMsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDdEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2xHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRWxGLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUE4QixlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUVySSxPQUFPLEVBQ3NCLFdBQVcsRUFDdEMsMEJBQTBCLEVBQTRELFNBQVMsRUFBRSwrQkFBK0IsRUFFakksTUFBTSx5Q0FBeUMsQ0FB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R1Y7QUFHYTtJQURiLFFBQVEsRUFBRTs2REFHVjtBQUdhO0lBRGIsUUFBUSxFQUFFOzRCQUdWO0FBR2E7SUFEYixRQUFRLEVBQUU7d0NBR1Y7QUF4SVUsYUFBYTtJQUp6QixLQUFLLENBQXFCO1FBQ3pCLElBQUksRUFBRSxVQUFVO1FBQ2hCLFFBQVE7S0FDVCxDQUFDO0dBQ1csYUFBYSxDQXc0QnpCOzs0RkF4NEJZLGFBQWE7a0JBTHpCLFVBQVU7NmRBZ0pULHlCQUF5QixNQU96Qiw0QkFBNEIsTUFNNUIseUJBQXlCLE1BS3pCLDJCQUEyQixNQVMzQiw0QkFBNEIsTUFXNUIsc0JBQXNCLE1BMEJ0Qiw2QkFBNkIsTUFlN0IscUNBQXFDLE1BaUJyQyxvQkFBb0IsTUFnQnBCLHdCQUF3QixNQVd4QixrQ0FBa0MsTUFZbEMsb0NBQW9DLE1BWXBDLG1CQUFtQixNQW9GbkIsb0NBQW9DLE1Bc0JwQyx1QkFBdUIsTUErQnZCLG9CQUFvQixNQUtwQix3QkFBd0IsTUFheEIsK0JBQStCLE1BYS9CLHVCQUF1QixNQWF2QixjQUFjLE1BaUNkLGtCQUFrQixNQU9sQixlQUFlLE1BT2YsdUJBQXVCLE1BYXZCLDZCQUE2QixNQVk3QixpQ0FBaUMsTUFrQmpDLHFDQUFxQyxNQW1CckMseUJBQXlCLE1BV3pCLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEFjdGlvbiwgU2VsZWN0b3IsIFN0YXRlLCBTdGF0ZUNvbnRleHQsIFN0b3JlIH0gZnJvbSAnQG5neHMvc3RvcmUnO1xuaW1wb3J0IHsgY2xvbmUsIGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgc3dpdGNoTWFwLCB0YXAsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbW1hbmROb3RpZmljYXRpb25Db25maWcsIENvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ub3RpZmljYXRpb24vY29tbWFuZC1ub3RpZmljYXRpb24nO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uQ2xhc3MgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb24tY29uZmlnJztcbmltcG9ydCB7IE9ORV9TRUNPTkRfSU5fTUlMTElTRUNPTkRTIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2dsb2JhbC1jb25zdGFudHMnO1xuaW1wb3J0IHsgRFlOQU1JQ19QUklDSU5HX0NPTkRJVElPTiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9rZXlzLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBBcHBUeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvYXBwLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBGYWNpbGl0eVJlbW90ZUNvbW1hbmRzTG9jYWxpemF0aW9uS2V5IH0gZnJvbSAnLi4vLi4vZW51bXMvZmFjaWxpdHktcmVtb3RlLWNvbW1hbmRzLmVudW0nO1xuaW1wb3J0IHsgUGFya0Nvbm5lY3Rpb25TdGF0dXNDbGFzcyB9IGZyb20gJy4uLy4uL2VudW1zL3ByaW9yaXR5LWxpbmstc3RhdHVzLmVudW0nO1xuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL21lbnUtaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUnBjIH0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eSc7XG5pbXBvcnQgeyBBcHBNb2R1bGUsIER5bmFtaWNQcmljaW5nQ29uZGl0aW9uRHRvLCBOb3RpZmljYXRpb25EdG8sIE5vdGlmaWNhdGlvblR5cGUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L2Nsb3VkLXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8sIFNtYXJ0cGFya0Jhc2ljRHRvIH0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9pZGVudGl0eS1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHtcbiAgRGV2aWNlUmVtb3RlQ29tbWFuZFJlZkR0bywgRmFjaWxpdHlEdG8sIEZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LCBGYWNpbGl0eVJlbW90ZUNvbW1hbmRSZWZEdG8sXG4gIEZhY2lsaXR5UmVtb3RlQ29tbWFuZFR5cGVzLCBGYWNpbGl0eVJwY1NlcnZpY2VQcm94eSwgTWFjcm9Db21tYW5kRHRvLCBQZXJtaXNzaW9uVHlwZSwgUnVsZXNNb2RlLCBTbWFydFpvbmVDb3VudGVyVmVoaWNsZUNsYXNzRHRvLFxuICBaRHRvLCBab25lRHRvLCBab25lUnBjU2VydmljZVByb3h5LCBaUnBjU2VydmljZVByb3h5XG59IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvcnBjLXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VGYWNpbGl0eUNvbW1hbmRzQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZhY2lsaXR5LWNvbW1hbmRzLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IEdsb2JhbEVycm9yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dsb2JhbC1lcnJvci5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgaXNUcnV0aHksIE51bWJlck1hcCwgU3RyaW5nTWFwIH0gZnJvbSAnLi4vLi4vdXRpbHMvbGFuZy51dGlsJztcbmltcG9ydCB7IGNvbnZlcnRGZWF0dXJlUGVybWlzc2lvbnNUb0RpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi91dGlscy9wZXJtaXNzaW9uLXR5cGUtbWFwcGVyLnV0aWwnO1xuaW1wb3J0IHsgb2JqZWN0S2V5c3RvTG93ZXJDYXNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvdGV4dC51dGlsJztcbmltcG9ydCB7IEhhbmRsZWROb3RpZmljYXRpb25BY3Rpb24gfSBmcm9tICcuLi9hbGVydHMtYW5kLW5vdGlmaWNhdGlvbnMvYWxlcnRzLWFuZC1ub3RpZmljYXRpb25zLmFjdGlvbnMnO1xuaW1wb3J0IHsgTWVudUxvYWRBY3Rpb24gfSBmcm9tICcuLi9zaWRlbmF2L3NpZGVuYXYuYWN0aW9ucyc7XG5pbXBvcnQgeyBTaWRlbmF2U3RhdGUgfSBmcm9tICcuLi9zaWRlbmF2L3NpZGVuYXYuc3RhdGUnO1xuaW1wb3J0IHsgUmVtb3ZlU21hcnRwYXJrQmFzaWNBY3Rpb24sIFNldFNtYXJ0UGFya0FjdGlvbiwgVXBkYXRlU21hcnRwYXJrTmFtZUFjdGlvbiB9IGZyb20gJy4uL3NtYXJ0cGFya3Mvc21hcnRwYXJrLmFjdGlvbnMnO1xuaW1wb3J0IHsgRmFjaWxpdHlNZW51U2VydmljZSB9IGZyb20gJy4vZmFjaWxpdHktbWVudS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIENsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5LCBDb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeSwgRGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5LCBGYWNpbGl0eURpY3Rpb25hcnksIEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5XG59IGZyb20gJy4vZmFjaWxpdHktbW9kYWwnO1xuaW1wb3J0IHtcbiAgQ2xlYXJGYWNpbGl0eURpY3Rpb25hcnlBY3Rpb24sIENsZWFySW5hY3RpdmVTZWxlY3RlZFBhcmtBY3Rpb24sXG4gIENsZWFyTWFjcm9Db21tYW5kc0FjdGlvbiwgQ2xlYXJTZWxlY3RlZEZhY2lsaXR5QWN0aW9uLCBDbGVhclpvbmVzQWN0aW9uLCBDbGVhclpzQWN0aW9uLFxuICBGYWNpbGl0eUNoYW5nZWRBY3Rpb24sIEZhY2lsaXR5UmVtb3RlQ29tbWFuZEV4ZWN1dGVkQWN0aW9uLFxuICBMb2FkQWNjZXNzUHJvZmlsZVpvbmVzQWN0aW9uLFxuICBMb2FkQ2NNYWluWm9uZXNBY3Rpb24sIExvYWRGYWNpbGl0eUFjdGlvbiwgTG9hZEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24sIExvYWRNYWNyb0NvbW1hbmRzQWN0aW9uLFxuICBMb2FkUGFya2luZ0xvdEFjdGlvbiwgTG9hZFJlbW90ZUNvbW1hbmRzUmVmQWN0aW9uLCBMb2FkUmVwb3J0c1pvbmVzQWN0aW9uLFxuICBMb2FkWnNBY3Rpb24sIFNlcnZpY2VzUnVubmluZ1N0YXR1c0NoYW5nZWRBY3Rpb24sIFNldEJhc2ljTWVudUFjdGlvbiwgU2V0RGV2aWNlUmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24sIFNldEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24sXG4gIFNldFNlbGVjdGVkUGFya0FjdGlvbiwgU2V0U21hcnRwYXJrQmFzaWNBY3Rpb24sIFNldFNtYXJ0cGFya0Jhc2ljQWxsQWN0aW9uLCBVbmxvYWRQYXJraW5nTG90QWN0aW9uLCBab25lQ2hhbmdlZEFjdGlvblxufSBmcm9tICcuL2ZhY2lsaXR5LmFjdGlvbnMnO1xuXG5pbXBvcnQgU21hcnRab25lQ291bnRlclZlaGljbGVUeXBlRHRvID0gUnBjLlNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlVHlwZUR0bztcblxuZXhwb3J0IGludGVyZmFjZSBGYWNpbGl0eVN0YXRlTW9kZWwge1xuICBndWlkOiBzdHJpbmc7XG4gIHBhcmtJZDogbnVtYmVyO1xuICBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeTogQ29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnk7XG4gIG11bHRpUGFya1BhcmVudElEOiBudW1iZXI7XG4gIHNlbGVjdGVkOiBGYWNpbGl0eUR0bztcbiAgZGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5O1xuICBzbWFydHBhcmtzQmFzZTogU21hcnRwYXJrQmFzaWNEdG9bXTtcbiAgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeTogU3RyaW5nTWFwPFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0bz47XG4gIHRpYmFLZXlzOiBTdHJpbmdNYXA8bnVtYmVyPjtcbiAgZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5OiBEZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnk7XG4gIGZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5OiBGYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTtcbiAgem9uZXM6IFpvbmVEdG9bXTtcbiAgejogWkR0b1tdO1xuICBhbGxvd2VkQWN0aW9uczogTnVtYmVyTWFwPGJvb2xlYW4+O1xuICBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeTogQ2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnk7XG4gIG1hY3JvQ29tbWFuZHM6IE1hY3JvQ29tbWFuZER0b1tdO1xufVxuXG5jb25zdCBkZWZhdWx0cyA9IHtcbiAgZ3VpZDogJycsXG4gIHBhcmtJZDogbnVsbCxcbiAgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnk6IHt9LFxuICBtdWx0aVBhcmtQYXJlbnRJRDogdW5kZWZpbmVkLFxuICBzZWxlY3RlZDogbnVsbCxcbiAgZGljdGlvbmFyeToge30sXG4gIHNtYXJ0cGFya3NCYXNlOiBbXSxcbiAgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeToge30sXG4gIHRpYmFLZXlzOiB7fSxcbiAgZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5OiB7fSxcbiAgZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnk6IHt9LFxuICB6b25lczogbnVsbCxcbiAgejogbnVsbCxcbiAgYWxsb3dlZEFjdGlvbnM6IHt9LFxuICBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeToge30sXG4gIG1hY3JvQ29tbWFuZHM6IFtdXG59O1xuXG5ASW5qZWN0YWJsZSgpXG5AU3RhdGU8RmFjaWxpdHlTdGF0ZU1vZGVsPih7XG4gIG5hbWU6ICdmYWNpbGl0eScsXG4gIGRlZmF1bHRzLFxufSlcbmV4cG9ydCBjbGFzcyBGYWNpbGl0eVN0YXRlIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZSxcbiAgICBwcml2YXRlIGZhY2lsaXR5Q29tbWFuZHNDb25maWdTZXJ2aWNlOiBCYXNlRmFjaWxpdHlDb21tYW5kc0NvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBsb2NhbFN0b3JhZ2VTZXJ2aWNlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmFjaWxpdHlNZW51U2VydmljZTogRmFjaWxpdHlNZW51U2VydmljZSxcbiAgICBwcml2YXRlIGZhY2lsaXR5U2VydmljZVByb3h5OiBGYWNpbGl0eVJwY1NlcnZpY2VQcm94eSxcbiAgICBwcml2YXRlIHJlbW90ZUNvbW1hbmRScGNTZXJ2aWNlUHJveHk6IFJwYy5SZW1vdGVDb21tYW5kUnBjU2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgem9uZVJwY1NlcnZpY2VQcm94eTogWm9uZVJwY1NlcnZpY2VQcm94eSxcbiAgICBwcml2YXRlIHpScGNTZXJ2aWNlUHJveHk6IFpScGNTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBnbG9iYWxFcnJvclNlcnZpY2U6IEdsb2JhbEVycm9yU2VydmljZSxcbiAgICBwcml2YXRlIGNvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlOiBDb21tYW5kTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBDb25maWc6IEFwcENvbmZpZ1NlcnZpY2VcbiAgKSB7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHNlbGVjdGVkKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBGYWNpbGl0eUR0byB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBpc0NoaWxkKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3RhdGUuc2VsZWN0ZWQubXVsdGlQYXJrUGFyZW50SUQgPiAwO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBmZWF0dXJlUGVybWlzc2lvbnMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IFBlcm1pc3Npb25UeXBlW10ge1xuICAgIHJldHVybiBzdGF0ZS5zZWxlY3RlZD8uZmVhdHVyZVBlcm1pc3Npb25zO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBhbGxvd2VkQWN0aW9ucyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogTnVtYmVyTWFwPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gc3RhdGUuYWxsb3dlZEFjdGlvbnM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGlzTXVsdGlQYXJrKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBudW1iZXIge1xuICAgIHJldHVybiBzdGF0ZS5zZWxlY3RlZD8uaXNNdWx0aVBhcms7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGNsb3VkSWQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkPy5jbG91ZElkO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyByYXdab25lcyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogWm9uZUR0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUuem9uZXM7XG4gIH1cblxuICBAU2VsZWN0b3IoW0ZhY2lsaXR5U3RhdGUucmF3Wm9uZXNdKVxuICBwdWJsaWMgc3RhdGljIHpvbmVzKHpvbmVzOiBab25lRHRvW10pOiBab25lRHRvW10ge1xuICAgIHJldHVybiB6b25lcz8uZmlsdGVyKHogPT4gei5ydWxlc01vZGUgIT09IFJ1bGVzTW9kZS5DQUxDVUxBVEVfQllfU01BUlRfQ09VTlRFUik7XG4gIH1cblxuICBAU2VsZWN0b3IoW0ZhY2lsaXR5U3RhdGUucmF3Wm9uZXNdKVxuICBwdWJsaWMgc3RhdGljIHNtYXJ0Wm9uZXMoem9uZXM6IFpvbmVEdG9bXSk6IFpvbmVEdG9bXSB7XG4gICAgcmV0dXJuIHpvbmVzPy5maWx0ZXIoeiA9PiB6LnJ1bGVzTW9kZSA9PT0gUnVsZXNNb2RlLkNBTENVTEFURV9CWV9TTUFSVF9DT1VOVEVSKTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgdGltZVpvbmUoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCkge1xuICAgIHJldHVybiBzdGF0ZS5zZWxlY3RlZC5zcFRpbWVab25lO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyB0aW1lRHJpZnQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCkge1xuICAgIHJldHVybiBzdGF0ZS5zZWxlY3RlZC50aW1lRHJpZnQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHBhcmtDb25uZWN0aW9uU3RhdHVzTWFwKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBDb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeSB7XG4gICAgcmV0dXJuIHN0YXRlLmNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5O1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBndWlkKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpIHtcbiAgICByZXR1cm4gc3RhdGUuZ3VpZDtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgcGFya0lkKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpIHtcbiAgICByZXR1cm4gc3RhdGUucGFya0lkO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBtdWx0aVBhcmtQYXJlbnRJRChzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKSB7XG4gICAgcmV0dXJuIHN0YXRlLm11bHRpUGFya1BhcmVudElEO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBmYWNpbGl0eURpY3Rpb25hcnkoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IEZhY2lsaXR5RGljdGlvbmFyeSB7XG4gICAgcmV0dXJuIHN0YXRlLmRpY3Rpb25hcnk7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHNtYXJ0cGFya3NCYXNlKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBTbWFydHBhcmtCYXNpY0R0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUuc21hcnRwYXJrc0Jhc2U7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5KHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBDbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSB7XG4gICAgcmV0dXJuIHN0YXRlLmNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5O1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5KHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBTdHJpbmdNYXA8U2VydmljZXNSdW5uaW5nU3RhdHVzRHRvPiB7XG4gICAgcmV0dXJuIHN0YXRlLnNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnk7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHRpYmFLZXlzKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBTdHJpbmdNYXA8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHN0YXRlLnRpYmFLZXlzO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBzZWxlY3RlZFBhcmtEZXZpY2VSZW1vdGVDb21tYW5kcyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogRGV2aWNlUmVtb3RlQ29tbWFuZFJlZkR0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUuZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W3N0YXRlLmd1aWRdID8gc3RhdGUuZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W3N0YXRlLmd1aWRdW3N0YXRlLnBhcmtJZF0gOiBbXTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgc2VsZWN0ZWRQYXJrRmFjaWxpdHlSZW1vdGVDb21tYW5kcyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogRmFjaWxpdHlSZW1vdGVDb21tYW5kUmVmRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5mYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeVtzdGF0ZS5ndWlkXSA/IHN0YXRlLmZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W3N0YXRlLmd1aWRdW3N0YXRlLnBhcmtJZF0gOiBbXTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgeihzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogWkR0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUuejtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgbWFjcm9Db21tYW5kcyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogTWFjcm9Db21tYW5kRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5tYWNyb0NvbW1hbmRzO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhckZhY2lsaXR5RGljdGlvbmFyeUFjdGlvbilcbiAgb25DbGVhckZhY2lsaXR5RGljdGlvbmFyeShjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBfOiBDbGVhckZhY2lsaXR5RGljdGlvbmFyeUFjdGlvbikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGRpY3Rpb25hcnk6IHt9XG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKFNldFNtYXJ0cGFya0Jhc2ljQWxsQWN0aW9uKVxuICBvblNldFNtYXJ0cGFya0Jhc2ljQWxsQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogU2V0U21hcnRwYXJrQmFzaWNBbGxBY3Rpb24pIHtcbiAgICBjdHguZGlzcGF0Y2gobmV3IFNldFNtYXJ0UGFya0FjdGlvbihhY3Rpb24uc21hcnRwYXJrV3JhcHBlciwgZmFsc2UpKTtcbiAgICByZXR1cm4gdGhpcy5wb3B1bGF0ZVNtYXJ0cGFya0Jhc2ljKGN0eCwgYWN0aW9uLnNtYXJ0cGFya1dyYXBwZXI/LmRhdGE/LnNtYXJ0UGFya3MpO1xuICB9XG5cbiAgQEFjdGlvbihTZXRTbWFydHBhcmtCYXNpY0FjdGlvbilcbiAgb25TZXRTbWFydHBhcmtCYXNpY0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IFNldFNtYXJ0cGFya0Jhc2ljQWN0aW9uKSB7XG4gICAgdGhpcy5wb3B1bGF0ZVNtYXJ0cGFya0Jhc2ljKGN0eCwgYWN0aW9uLnNtYXJ0cGFya1dyYXBwZXI/LmRhdGE/LnNtYXJ0UGFya3MpO1xuICB9XG5cbiAgQEFjdGlvbihVcGRhdGVTbWFydHBhcmtOYW1lQWN0aW9uKVxuICBvblVwZGF0ZVNtYXJ0cGFya05hbWVBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBzbWFydFBhcmtJZCwgbmFtZSB9OiBVcGRhdGVTbWFydHBhcmtOYW1lQWN0aW9uKSB7XG4gICAgY29uc3Qgc21hcnRwYXJrc0Jhc2UgPSAoY3R4LmdldFN0YXRlKCkuc21hcnRwYXJrc0Jhc2UgfHwgW10pLm1hcChzbWFydHBhcmsgPT5cbiAgICAgIHNtYXJ0cGFyay5pZCA9PT0gc21hcnRQYXJrSWRcbiAgICAgICAgPyBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHNtYXJ0cGFyaykpLCBzbWFydHBhcmssIHsgbmFtZSB9KVxuICAgICAgICA6IHNtYXJ0cGFyayk7XG4gICAgY3R4LnBhdGNoU3RhdGUoeyBzbWFydHBhcmtzQmFzZSB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oUmVtb3ZlU21hcnRwYXJrQmFzaWNBY3Rpb24pXG4gIG9uUmVtb3ZlU21hcnRwYXJrQmFzaWNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBndWlkIH06IFJlbW92ZVNtYXJ0cGFya0Jhc2ljQWN0aW9uKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBjdHguZ2V0U3RhdGUoKTtcbiAgICBjb25zdCBzbWFydHBhcmtzQmFzZSA9IChzdGF0ZS5zbWFydHBhcmtzQmFzZSB8fCBbXSkuZmlsdGVyKHNtYXJ0cGFyayA9PiBzbWFydHBhcmsuZ3VpZCAhPT0gZ3VpZCk7XG4gICAgY29uc3QgZGljdGlvbmFyeSA9IHsgLi4uc3RhdGUuZGljdGlvbmFyeSB9O1xuICAgIGRlbGV0ZSBkaWN0aW9uYXJ5W2d1aWRdO1xuICAgIGNvbnN0IGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5ID0geyAuLi5zdGF0ZS5jbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSB9O1xuICAgIGRlbGV0ZSBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeVtndWlkXTtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7IHNtYXJ0cGFya3NCYXNlLCBkaWN0aW9uYXJ5LCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZFBhcmtpbmdMb3RBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkUGFya2luZ0xvdEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IHBhcmtJZCwgdGliYUtleUluZGV4IH06IExvYWRQYXJraW5nTG90QWN0aW9uKSB7XG4gICAgY29uc3QgZ3VpZCA9IE9iamVjdC5rZXlzKGN0eC5nZXRTdGF0ZSgpLnRpYmFLZXlzKVt0aWJhS2V5SW5kZXhdO1xuICAgIGNvbnN0IGZhY2lsaXR5RGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmRpY3Rpb25hcnk7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF0gPyBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bcGFya0lkXSA6IG51bGw7XG5cbiAgICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYWxsb3dlZEFjdGlvbnMgPSBjb252ZXJ0RmVhdHVyZVBlcm1pc3Npb25zVG9EaWN0aW9uYXJ5KHNlbGVjdGVkLmZlYXR1cmVQZXJtaXNzaW9ucyk7XG5cbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBwYXJrSWQsXG4gICAgICBndWlkLFxuICAgICAgbXVsdGlQYXJrUGFyZW50SUQ6IHNlbGVjdGVkLm11bHRpUGFya1BhcmVudElELFxuICAgICAgc2VsZWN0ZWQsXG4gICAgICB6b25lczogc2VsZWN0ZWQuem9uZXMsXG4gICAgICBhbGxvd2VkQWN0aW9uc1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2lkZW5hdlN0YXRlLmFwcE1vZHVsZSkgPT09IEFwcE1vZHVsZS5DYykge1xuICAgICAgcmV0dXJuIGN0eC5kaXNwYXRjaChuZXcgTG9hZEZhY2lsaXR5QWN0aW9uKHBhcmtJZCwgZ3VpZCwgaXNUcnV0aHkoc2VsZWN0ZWQuaXNNdWx0aVBhcmspLCBBcHBNb2R1bGUuQ2MpKTtcbiAgICB9XG4gIH1cblxuICBAQWN0aW9uKExvYWRSZW1vdGVDb21tYW5kc1JlZkFjdGlvbiwgeyBjYW5jZWxVbmNvbXBsZXRlZDogdHJ1ZSB9KVxuICBvbkxvYWRSZW1vdGVDb21tYW5kc1JlZkFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IHBhcmtJZCwgdGliYUtleUluZGV4IH06IExvYWRSZW1vdGVDb21tYW5kc1JlZkFjdGlvbikge1xuICAgIGNvbnN0IGd1aWQgPSBPYmplY3Qua2V5cyhjdHguZ2V0U3RhdGUoKS50aWJhS2V5cylbdGliYUtleUluZGV4XTtcblxuICAgIC8vIFdlIGZldGNoIGZyb20gdGhlIHNlcnZlciBvbmx5IGlmIHdlIGRpZG4neSBmZXRjaCBiZWZvcmUgZm9yIHRoYXQgZ3VpZFxuICAgIGNvbnN0IHJlbW90ZUNvbW1hbmRzUmVmQWxsID0gY3R4LmdldFN0YXRlKCkuZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5O1xuICAgIGlmICghcmVtb3RlQ29tbWFuZHNSZWZBbGxbZ3VpZF0gfHwgIXJlbW90ZUNvbW1hbmRzUmVmQWxsW2d1aWRdW3BhcmtJZF0pIHtcbiAgICAgIGNvbnN0IHJlbW90ZUNvbW1hbmRzUmVmJCA9IHRoaXMucmVtb3RlQ29tbWFuZFJwY1NlcnZpY2VQcm94eS5nZXREZXZpY2VSZW1vdGVDb21tYW5kcyhndWlkLCBwYXJrSWQpO1xuXG4gICAgICByZXR1cm4gcmVtb3RlQ29tbWFuZHNSZWYkLnBpcGUodGFwKHJlbW90ZUNvbW1hbmRzUmVmID0+IHtcbiAgICAgICAgY3R4LmRpc3BhdGNoKG5ldyBTZXREZXZpY2VSZW1vdGVDb21tYW5kc01hcEFjdGlvbihyZW1vdGVDb21tYW5kc1JlZi5kYXRhLCBndWlkLCBwYXJrSWQpKTtcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1cblxuICBAQWN0aW9uKExvYWRGYWNpbGl0eVJlbW90ZUNvbW1hbmRzUmVmQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBwYXJrSWQsIHRpYmFLZXlJbmRleCB9OiBMb2FkRmFjaWxpdHlSZW1vdGVDb21tYW5kc1JlZkFjdGlvbikge1xuICAgIGNvbnN0IGd1aWQgPSBPYmplY3Qua2V5cyhjdHguZ2V0U3RhdGUoKS50aWJhS2V5cylbdGliYUtleUluZGV4XTtcblxuICAgIC8vIFdlIGZldGNoIGZyb20gdGhlIHNlcnZlciBvbmx5IGlmIHdlIGRpZG4neSBmZXRjaCBiZWZvcmUgZm9yIHRoYXQgZ3VpZFxuICAgIGNvbnN0IHJlbW90ZUNvbW1hbmRzUmVmQWxsID0gY3R4LmdldFN0YXRlKCkuZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnk7XG4gICAgaWYgKCFyZW1vdGVDb21tYW5kc1JlZkFsbFtndWlkXSB8fCAhcmVtb3RlQ29tbWFuZHNSZWZBbGxbZ3VpZF1bcGFya0lkXSkge1xuICAgICAgY29uc3QgcmVtb3RlQ29tbWFuZHNSZWYkID0gdGhpcy5yZW1vdGVDb21tYW5kUnBjU2VydmljZVByb3h5LmdldEZhY2lsaXR5UmVtb3RlQ29tbWFuZHMoZ3VpZCwgcGFya0lkKTtcblxuICAgICAgaWYgKHJlbW90ZUNvbW1hbmRzUmVmJCkge1xuICAgICAgICByZXR1cm4gcmVtb3RlQ29tbWFuZHNSZWYkLnBpcGUodGFwKHJlbW90ZUNvbW1hbmRzUmVmID0+IHtcbiAgICAgICAgICBjdHguZGlzcGF0Y2gobmV3IFNldEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24ocmVtb3RlQ29tbWFuZHNSZWYuZGF0YSwgZ3VpZCwgcGFya0lkKSk7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAQWN0aW9uKExvYWRGYWNpbGl0eUFjdGlvbiwgeyBjYW5jZWxVbmNvbXBsZXRlZDogdHJ1ZSB9KVxuICBvbkxvYWRGYWNpbGl0eUFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IHBhcmtJZCwgZ3VpZCwgaXNTdXBlclBhcmssIGFwcE1vZHVsZSB9OiBMb2FkRmFjaWxpdHlBY3Rpb24pIHtcbiAgICBpZiAoaXNTdXBlclBhcmspIHtcbiAgICAgIGNvbnN0IGFsbEd1aWRGYWNpbGl0aWVzJCA9IHRoaXMuZmFjaWxpdHlTZXJ2aWNlUHJveHkuZ2V0RmFjaWxpdGllcyhndWlkLCBwYXJrSWQpO1xuICAgICAgcmV0dXJuIGFsbEd1aWRGYWNpbGl0aWVzJC5waXBlKHRhcChmYWNpbGl0aWVzTWFwID0+IHtcbiAgICAgICAgY29uc3QgZmFjaWxpdHkgPSBmYWNpbGl0aWVzTWFwLmRhdGFbZ3VpZF0uZmluZChmID0+IGYuaWQgPT09IHBhcmtJZCk7XG4gICAgICAgIHRoaXMudXBkYXRlRmFjaWxpdGllcyhjdHgsIGd1aWQsIHBhcmtJZCwgYXBwTW9kdWxlLCBmYWNpbGl0eSwgZmFjaWxpdGllc01hcC5kYXRhKTtcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZnVsbEZhY2lsaXR5JCA9IHRoaXMuZmFjaWxpdHlTZXJ2aWNlUHJveHkuZ2V0RmFjaWxpdHkoZ3VpZCwgcGFya0lkKTtcbiAgICAgIHJldHVybiBmdWxsRmFjaWxpdHkkLnBpcGUodGFwKGZhY2lsaXR5ID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVGYWNpbGl0aWVzKGN0eCwgZ3VpZCwgcGFya0lkLCBhcHBNb2R1bGUsIGZhY2lsaXR5LmRhdGEpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oVW5sb2FkUGFya2luZ0xvdEFjdGlvbilcbiAgb25VbmxvYWRQYXJraW5nTG90QWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogVW5sb2FkUGFya2luZ0xvdEFjdGlvbikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGd1aWQ6ICcnLFxuICAgICAgcGFya0lkOiBudWxsLFxuICAgICAgc2VsZWN0ZWQ6IG51bGwsXG4gICAgICB6b25lczogbnVsbCxcbiAgICAgIGFsbG93ZWRBY3Rpb25zOiB7fSxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oU2V0RGV2aWNlUmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24pXG4gIG9uU2V0RGV2aWNlUmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBTZXREZXZpY2VSZW1vdGVDb21tYW5kc01hcEFjdGlvbikge1xuICAgIGNvbnN0IGRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTtcbiAgICBpZiAoIWRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeVthY3Rpb24uZ3VpZF0pIHtcbiAgICAgIGRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeVthY3Rpb24uZ3VpZF0gPSB7fTtcbiAgICB9XG4gICAgZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W2FjdGlvbi5ndWlkXVthY3Rpb24ucGFya0lkXSA9IGFjdGlvbi5yZW1vdGVDb21tYW5kc1thY3Rpb24uZ3VpZF07XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5LFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihTZXRGYWNpbGl0eVJlbW90ZUNvbW1hbmRzTWFwQWN0aW9uKVxuICBvblNldEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBTZXRGYWNpbGl0eVJlbW90ZUNvbW1hbmRzTWFwQWN0aW9uKSB7XG4gICAgY29uc3QgZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5mYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTtcbiAgICBpZiAoIWZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W2FjdGlvbi5ndWlkXSkge1xuICAgICAgZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbYWN0aW9uLmd1aWRdID0ge307XG4gICAgfVxuICAgIGZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W2FjdGlvbi5ndWlkXVthY3Rpb24ucGFya0lkXSA9IGFjdGlvbi5yZW1vdGVDb21tYW5kc1thY3Rpb24uZ3VpZF07XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnksXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKFpvbmVDaGFuZ2VkQWN0aW9uKVxuICBvblpvbmVDaGFuZ2VkQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgem9uZSwgcGFya0lkIH06IFpvbmVDaGFuZ2VkQWN0aW9uKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBjdHguZ2V0U3RhdGUoKS5zZWxlY3RlZDtcbiAgICBjb25zdCB6b25lSW5kZXggPSBzZWxlY3RlZC56b25lcz8uZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pZCA9PT0gem9uZS5pZCAmJiBpdGVtLnBhcmtJRCA9PT0gcGFya0lkKTtcbiAgICB6b25lLm9jY3VwYW5jeSA9IHpvbmUubW9udGhsaWVzT2NjdXBhbmN5ICsgem9uZS50cmFuc2llbnRzT2NjdXBhbmN5O1xuICAgIHpvbmUudmFjYW5jeSA9IHpvbmUuY2FwYWNpdHkgLSB6b25lLm9jY3VwYW5jeTtcblxuICAgIHN3aXRjaCAoem9uZS5ydWxlc01vZGUpIHtcbiAgICAgIGNhc2UgUnVsZXNNb2RlLkNBTENVTEFURV9CWV9TTUFSVF9DT1VOVEVSOlxuICAgICAgICB6b25lLmNhcGFjaXR5ID0gem9uZS5jYXBhY2l0eTtcbiAgICAgICAgem9uZS5vY2N1cGFuY3kgPSB6b25lLmxvb3BDb3VudDtcbiAgICAgICAgem9uZS52YWNhbmN5ID0gem9uZS5jYXBhY2l0eSAtIHpvbmUub2NjdXBhbmN5O1xuICAgICAgICB0aGlzLmhhbmRsZVNtYXJ0Q291bnRlcih6b25lKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUnVsZXNNb2RlLkNBTENVTEFURV9CWV9MT09QX0RFVEVDVE9SOlxuICAgICAgICB6b25lLmNhcGFjaXR5ID0gem9uZS5jYXBhY2l0eTtcbiAgICAgICAgem9uZS5vY2N1cGFuY3kgPSB6b25lLmxvb3BDb3VudDtcbiAgICAgICAgem9uZS52YWNhbmN5ID0gem9uZS5jYXBhY2l0eSAtIHpvbmUub2NjdXBhbmN5O1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgem9uZS5jYXBhY2l0eSA9IHpvbmUuY2FwYWNpdHk7XG4gICAgICAgIHpvbmUub2NjdXBhbmN5ID0gem9uZS5tb250aGxpZXNPY2N1cGFuY3kgKyB6b25lLnRyYW5zaWVudHNPY2N1cGFuY3k7XG4gICAgICAgIHpvbmUudmFjYW5jeSA9IHpvbmUuY2FwYWNpdHkgLSB6b25lLm9jY3VwYW5jeTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgc2VsZWN0ZWQuem9uZXNbem9uZUluZGV4XSA9IHpvbmU7XG4gICAgc2VsZWN0ZWQuem9uZXMgPSBjbG9uZShzZWxlY3RlZC56b25lcyk7XG5cbiAgICBjb25zdCBmYWNpbGl0eURpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5kaWN0aW9uYXJ5O1xuICAgIGNvbnN0IGd1aWQgPSBjdHguZ2V0U3RhdGUoKS5ndWlkO1xuICAgIGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtzZWxlY3RlZC5pZF0uem9uZXMgPSBzZWxlY3RlZC56b25lcztcblxuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGRpY3Rpb25hcnk6IGZhY2lsaXR5RGljdGlvbmFyeSxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgem9uZXM6IHNlbGVjdGVkLnpvbmVzLFxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlU21hcnRDb3VudGVyKHpvbmU6IFpvbmVEdG8pIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHpvbmU/LnNtYXJ0Q291bnRlclZlaGljbGVUeXBlSnNvbikge1xuICAgICAgICBjb25zdCBwYXJzZWRKc29uID0gSlNPTi5wYXJzZSh6b25lLnNtYXJ0Q291bnRlclZlaGljbGVUeXBlSnNvbik7XG4gICAgICAgIGNvbnN0IHNtYXJ0Q291bnRlclZlaGljbGVUeXBlID0gb2JqZWN0S2V5c3RvTG93ZXJDYXNlKHBhcnNlZEpzb24pO1xuXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShzbWFydENvdW50ZXJWZWhpY2xlVHlwZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcnNlZCBKU09OIHNtYXJ0Q291bnRlclZlaGljbGVUeXBlIGlzIG5vdCBhbiBhcnJheScpO1xuICAgICAgICB9XG5cbiAgICAgICAgem9uZS5zbWFydFpvbmVDb3VudGVyVmVoaWNsZVR5cGUgPSBzbWFydENvdW50ZXJWZWhpY2xlVHlwZS5tYXAoKHNjOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBzbWFydFpvbmVDb3VudGVyVmVoaWNsZVR5cGVEdG8gPSBuZXcgU21hcnRab25lQ291bnRlclZlaGljbGVUeXBlRHRvKCk7XG4gICAgICAgICAgc21hcnRab25lQ291bnRlclZlaGljbGVUeXBlRHRvLmNvdW50ZXIgPSBzYy5jb3VudGVyO1xuICAgICAgICAgIHNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlVHlwZUR0by56b25lSWQgPSB6b25lLmlkO1xuICAgICAgICAgIHNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlVHlwZUR0by52ZWhpY2xlVHlwZUlkID0gc2MudmVoaWNsZXR5cGVpZDtcbiAgICAgICAgICByZXR1cm4gc21hcnRab25lQ291bnRlclZlaGljbGVUeXBlRHRvO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHpvbmU/LnNtYXJ0Q291bnRlclZlaGljbGVDbGFzc0pzb24pIHtcbiAgICAgICAgY29uc3QgcGFyc2VkSnNvbiA9IEpTT04ucGFyc2Uoem9uZS5zbWFydENvdW50ZXJWZWhpY2xlQ2xhc3NKc29uKTtcbiAgICAgICAgY29uc3Qgc21hcnRDb3VudGVyVmVoaWNsZUNsYXNzID0gb2JqZWN0S2V5c3RvTG93ZXJDYXNlKHBhcnNlZEpzb24pO1xuXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShzbWFydENvdW50ZXJWZWhpY2xlQ2xhc3MpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJzZWQgSlNPTiBzbWFydENvdW50ZXJWZWhpY2xlQ2xhc3MgaXMgbm90IGFuIGFycmF5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICB6b25lLnNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlQ2xhc3MgPSBzbWFydENvdW50ZXJWZWhpY2xlQ2xhc3MubWFwKChzYzogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3Qgc21hcnRab25lQ291bnRlclZlaGljbGVDbGFzc0R0byA9IG5ldyBTbWFydFpvbmVDb3VudGVyVmVoaWNsZUNsYXNzRHRvKCk7XG4gICAgICAgICAgc21hcnRab25lQ291bnRlclZlaGljbGVDbGFzc0R0by5jb3VudGVyID0gc2MuY291bnRlcjtcbiAgICAgICAgICBzbWFydFpvbmVDb3VudGVyVmVoaWNsZUNsYXNzRHRvLnpvbmVJZCA9IHpvbmUuaWQ7XG4gICAgICAgICAgc21hcnRab25lQ291bnRlclZlaGljbGVDbGFzc0R0by52ZWhpY2xlQ2xhc3NJZCA9IHNjLnZlaGljbGVjbGFzc2lkO1xuICAgICAgICAgIHJldHVybiBzbWFydFpvbmVDb3VudGVyVmVoaWNsZUNsYXNzRHRvO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHNtYXJ0Q291bnRlckpzb246JywgZXJyb3IpO1xuICAgICAgem9uZS5zbWFydFpvbmVDb3VudGVyVmVoaWNsZUNsYXNzID0gW107XG4gICAgICB6b25lLnNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlVHlwZSA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oU2VydmljZXNSdW5uaW5nU3RhdHVzQ2hhbmdlZEFjdGlvbilcbiAgb25TZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sXG4gICAgeyBzZXJ2aWNlc1J1bm5pbmdTdGF0dXMsIGd1aWQgfTogU2VydmljZXNSdW5uaW5nU3RhdHVzQ2hhbmdlZEFjdGlvbikge1xuICAgIGNvbnN0IHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5zZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5O1xuICAgIGNvbnN0IGZhY2lsaXR5RGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmRpY3Rpb25hcnk7XG4gICAgc2VydmljZXNSdW5uaW5nU3RhdHVzID0gdGhpcy51cGRhdGVTZXJ2aWNlUnVubmluZ1N0YXR1c0ZsYWdzKHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnlbZ3VpZF0sIHNlcnZpY2VzUnVubmluZ1N0YXR1cyk7XG4gICAgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeVtndWlkXSA9IHNlcnZpY2VzUnVubmluZ1N0YXR1cztcbiAgICBjdHgucGF0Y2hTdGF0ZSh7IHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnkgfSk7XG5cbiAgICAvLyBVcGRhdGluZyBQYXJrQ29ubmVjdGlvblN0YXR1cyBmb3IgcGFya3NcbiAgICBpZiAoZmFjaWxpdHlEaWN0aW9uYXJ5KSB7XG4gICAgICBjb25zdCBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeSA9IGNsb25lRGVlcChjdHguZ2V0U3RhdGUoKS5jb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeSk7XG4gICAgICBjb25zdCBmYWNpbGl0aWVzOiBGYWNpbGl0eUR0b1tdID0gT2JqZWN0LnZhbHVlcyhmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF0pO1xuICAgICAgZm9yIChjb25zdCBmYWNpbGl0eSBvZiBmYWNpbGl0aWVzKSB7XG4gICAgICAgIGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5W2d1aWRdW2ZhY2lsaXR5LmlkXSA9IHRoaXMuZ2xvYmFsRXJyb3JTZXJ2aWNlLmdldFBhcmtDb25uZWN0aW9uU3RhdHVzKGd1aWQsIGZhY2lsaXR5LCBzZXJ2aWNlc1J1bm5pbmdTdGF0dXMsIGZhY2lsaXR5RGljdGlvbmFyeSk7XG4gICAgICB9XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7IGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5IH0pO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlTWVudUl0ZW1zUGFya0Nvbm5lY3Rpb25TdGF0dXMoY3R4KTtcbiAgfVxuXG4gIEBBY3Rpb24oRmFjaWxpdHlDaGFuZ2VkQWN0aW9uKVxuICBvbkZhY2lsaXR5Q2hhbmdlZEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IGZhY2lsaXR5LCBndWlkIH06IEZhY2lsaXR5Q2hhbmdlZEFjdGlvbikge1xuICAgIGNvbnN0IGZhY2lsaXR5RGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmRpY3Rpb25hcnk7XG4gICAgY29uc3Qgc2VsZWN0ZWRGYWNpbGl0eSA9IGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXSA/IGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmYWNpbGl0eS5pZF0gOiBudWxsO1xuICAgIGlmICghc2VsZWN0ZWRGYWNpbGl0eSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBsZXRlZEZhY2lsaXR5ID0gdGhpcy5hc3NpZ25GYWNpbGl0eShzZWxlY3RlZEZhY2lsaXR5LCBmYWNpbGl0eSk7XG4gICAgZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2ZhY2lsaXR5LmlkXSA9IGNvbXBsZXRlZEZhY2lsaXR5O1xuXG4gICAgY3R4LnBhdGNoU3RhdGUoeyBkaWN0aW9uYXJ5OiBjbG9uZURlZXAoZmFjaWxpdHlEaWN0aW9uYXJ5KSB9KTtcblxuICAgIGlmICh0aGlzLmlzUGFya0FjdGl2ZShjdHgsIGd1aWQsIGZhY2lsaXR5LmlkKSkge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBzZWxlY3RlZDogY29tcGxldGVkRmFjaWxpdHksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGluZyBQYXJrQ29ubmVjdGlvblN0YXR1cyBmb3IgcGFya3NcbiAgICBjb25zdCBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeSA9IGNsb25lRGVlcChjdHguZ2V0U3RhdGUoKS5jb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeSk7XG4gICAgY29uc3Qgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLnNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnk7XG4gICAgY29uc3QgZmFjaWxpdGllczogRmFjaWxpdHlEdG9bXSA9IE9iamVjdC52YWx1ZXMoZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdKTtcbiAgICBmb3IgKGNvbnN0IGZhY2lsaXR5IG9mIGZhY2lsaXRpZXMpIHtcbiAgICAgIGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5W2d1aWRdW2ZhY2lsaXR5LmlkXSA9IHRoaXMuZ2xvYmFsRXJyb3JTZXJ2aWNlLmdldFBhcmtDb25uZWN0aW9uU3RhdHVzKGd1aWQsIGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmYWNpbGl0eS5pZF0sIHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnlbZ3VpZF0sIGZhY2lsaXR5RGljdGlvbmFyeSk7XG4gICAgfVxuICAgIGN0eC5wYXRjaFN0YXRlKHsgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnkgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZU1lbnVJdGVtc1BhcmtDb25uZWN0aW9uU3RhdHVzKGN0eCk7XG4gIH1cblxuICBAQWN0aW9uKFNldEJhc2ljTWVudUFjdGlvbilcbiAgb25TZXRCYXNpY01lbnVBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBzbWFydHBhcmtNYXAsIGFwcE1vZHVsZSB9OiBTZXRCYXNpY01lbnVBY3Rpb24pIHtcbiAgICBjdHguZGlzcGF0Y2gobmV3IE1lbnVMb2FkQWN0aW9uKHRoaXMudG9CYXNpY01lbnVJdGVtcyhjdHgsIHNtYXJ0cGFya01hcCwgY3R4LmdldFN0YXRlKCkuZGljdGlvbmFyeSwgYXBwTW9kdWxlKSwgYXBwTW9kdWxlKSk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRSZXBvcnRzWm9uZXNBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkUmVwb3J0c1pvbmVzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogTG9hZFJlcG9ydHNab25lc0FjdGlvbikge1xuICAgIGNvbnN0IGdldFpvbmVzJCA9IHRoaXMuem9uZVJwY1NlcnZpY2VQcm94eS5nZXRab25lc0J5U2VhcmNoUGFyYW1zKGFjdGlvbi5ndWlkLCBhY3Rpb24ucGFya0lkLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5tYXhSZXN1bHRzLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8uc2VhcmNoVGVybSwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5jb2x1bW4sXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5Lm9yZGVyRGlyZWN0aW9uKTtcblxuICAgIHJldHVybiBnZXRab25lcyQucGlwZSh0YXAoem9uZXMgPT4ge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICB6b25lczogem9uZXMuZGF0YSxcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZEFjY2Vzc1Byb2ZpbGVab25lc0FjdGlvbiwgeyBjYW5jZWxVbmNvbXBsZXRlZDogdHJ1ZSB9KVxuICBvbkxvYWRBY2Nlc3NQcm9maWxlWlpvbmVzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogTG9hZEFjY2Vzc1Byb2ZpbGVab25lc0FjdGlvbikge1xuICAgIGNvbnN0IGdldFpvbmVzJCA9IHRoaXMuem9uZVJwY1NlcnZpY2VQcm94eS5nZXRab25lc0J5U2VhcmNoUGFyYW1zKGFjdGlvbi5ndWlkLCBhY3Rpb24ucGFya0lkLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5tYXhSZXN1bHRzLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8uc2VhcmNoVGVybSwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5jb2x1bW4sXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5Lm9yZGVyRGlyZWN0aW9uKTtcblxuICAgIHJldHVybiBnZXRab25lcyQucGlwZSh0YXAoem9uZXMgPT4ge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICB6b25lczogem9uZXMuZGF0YSxcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZENjTWFpblpvbmVzQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZENjTWFpblpvbmVzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogTG9hZENjTWFpblpvbmVzQWN0aW9uKSB7XG4gICAgY29uc3QgZ2V0Wm9uZXMkID0gdGhpcy56b25lUnBjU2VydmljZVByb3h5LmdldFpvbmVzQnlTZWFyY2hQYXJhbXMoYWN0aW9uLmd1aWQsIGFjdGlvbi5wYXJrSWQsIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm1heFJlc3VsdHMsXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5zZWFyY2hUZXJtLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5LmNvbHVtbixcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkub3JkZXJEaXJlY3Rpb24pO1xuXG4gICAgcmV0dXJuIGdldFpvbmVzJC5waXBlKHRhcCh6b25lcyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIHpvbmVzOiB6b25lcy5kYXRhLFxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkWnNBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkWnNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBMb2FkWnNBY3Rpb24pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICB6OiBudWxsLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYXBwTW9kdWxlOiBBcHBNb2R1bGUgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5hcHBNb2R1bGUpO1xuICAgIGxldCBnZXRacyQ6IE9ic2VydmFibGU8UnBjLlpEdG9JRW51bWVyYWJsZUh0dHBSZXNwb25zZURhdGE+O1xuICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgY2FzZSBhcHBNb2R1bGUgPT09IEFwcE1vZHVsZS5DYzpcbiAgICAgICAgZ2V0WnMkID0gdGhpcy56UnBjU2VydmljZVByb3h5LmdldENjWnMoYWN0aW9uLmd1aWQsIGFjdGlvbi5wYXJrSWQsIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm1heFJlc3VsdHMsXG4gICAgICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8uc2VhcmNoVGVybSwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5jb2x1bW4sXG4gICAgICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5vcmRlckRpcmVjdGlvbik7XG4gICAgICBicmVhaztcblxuICAgICAgY2FzZSBhcHBNb2R1bGUgPT09IEFwcE1vZHVsZS5SZXBvcnRzOlxuICAgICAgICBnZXRacyQgPSB0aGlzLnpScGNTZXJ2aWNlUHJveHkuZ2V0UmVwb3J0c1pzKGFjdGlvbi5ndWlkLCBhY3Rpb24ucGFya0lkLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5tYXhSZXN1bHRzLFxuICAgICAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/LnNlYXJjaFRlcm0sIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkuY29sdW1uLFxuICAgICAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkub3JkZXJEaXJlY3Rpb24pO1xuICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6IFxuICAgICAgY29uc29sZS5sb2coXCJ1bnN1cHBvcnRlZCBhcHBtb2R1bGUgZm9yIHpzXCIpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldFpzJC5waXBlKHRhcCh6ID0+IHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgejogei5kYXRhLFxuICAgICAgfSk7XG4gICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJab25lc0FjdGlvbilcbiAgb25DbGVhclpvbmVzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICB6b25lczogbnVsbCxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJac0FjdGlvbilcbiAgb25DbGVhclpzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICB6OiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihTZXRTZWxlY3RlZFBhcmtBY3Rpb24pXG4gIG9uU2V0U2VsZWN0ZWRQYXJrQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgZ3VpZCwgZmFjaWxpdHkgfTogU2V0U2VsZWN0ZWRQYXJrQWN0aW9uKSB7XG4gICAgY29uc3QgYWxsb3dlZEFjdGlvbnMgPSBjb252ZXJ0RmVhdHVyZVBlcm1pc3Npb25zVG9EaWN0aW9uYXJ5KGZhY2lsaXR5Py5mZWF0dXJlUGVybWlzc2lvbnMpO1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGd1aWQsXG4gICAgICBwYXJrSWQ6IGZhY2lsaXR5Py5pZCxcbiAgICAgIG11bHRpUGFya1BhcmVudElEOiBmYWNpbGl0eT8ubXVsdGlQYXJrUGFyZW50SUQsXG4gICAgICBzZWxlY3RlZDogZmFjaWxpdHksXG4gICAgICB6b25lczogZmFjaWxpdHk/LnpvbmVzLFxuICAgICAgYWxsb3dlZEFjdGlvbnNcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJTZWxlY3RlZEZhY2lsaXR5QWN0aW9uKVxuICBvbkNsZWFyU2VsZWN0ZWRGYWNpbGl0eUFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IH06IENsZWFyU2VsZWN0ZWRGYWNpbGl0eUFjdGlvbikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGd1aWQ6ICcnLFxuICAgICAgcGFya0lkOiBudWxsLFxuICAgICAgbXVsdGlQYXJrUGFyZW50SUQ6IG51bGwsXG4gICAgICBzZWxlY3RlZDogbnVsbCxcbiAgICAgIHpvbmVzOiBudWxsLFxuICAgICAgYWxsb3dlZEFjdGlvbnM6IHt9XG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKENsZWFySW5hY3RpdmVTZWxlY3RlZFBhcmtBY3Rpb24pXG4gIG9uQ2xlYXJJbmFjdGl2ZVNlbGVjdGVkUGFya0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IENsZWFySW5hY3RpdmVTZWxlY3RlZFBhcmtBY3Rpb24pIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IGN0eC5nZXRTdGF0ZSgpLnNlbGVjdGVkO1xuXG4gICAgLy8gSWYgdGhlIHNlbGVjdGVkIGZhY2lsaXR5IGlzIEluYWN0aXZlIGFuZCBub3QgYSBTdXBlcnBhcmssIHdlIGRlc2VsZWN0XG4gICAgLy8gVGhpcyBtZWFuIHdlIHdvbid0IGNhcnJ5IGFuIEluYWN0aXZlIHBhcmsgdG8gdGhlIG5leHQgbW9kdWxlIGFzIHNlbGVjdGVkXG4gICAgaWYgKCFzZWxlY3RlZD8uYWN0aXZlICYmICFzZWxlY3RlZD8uaXNNdWx0aVBhcmspIHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgZ3VpZDogJycsXG4gICAgICAgIHBhcmtJZDogbnVsbCxcbiAgICAgICAgbXVsdGlQYXJrUGFyZW50SUQ6IG51bGwsXG4gICAgICAgIHNlbGVjdGVkOiBudWxsLFxuICAgICAgICB6b25lczogbnVsbCxcbiAgICAgICAgYWxsb3dlZEFjdGlvbnM6IHt9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihGYWNpbGl0eVJlbW90ZUNvbW1hbmRFeGVjdXRlZEFjdGlvbilcbiAgb25GYWNpbGl0eVJlbW90ZUNvbW1hbmRFeGVjdXRlZEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50IH06IEZhY2lsaXR5UmVtb3RlQ29tbWFuZEV4ZWN1dGVkQWN0aW9uKSB7XG4gICAgY29uc3QgZmFjaWxpdHkgPSBjdHguZ2V0U3RhdGUoKS5kaWN0aW9uYXJ5W2ZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50Lmd1aWRdW2ZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LnBhcmtJZF07XG5cbiAgICBjb25zdCBvcGVyYXRpb25UeXBlS2V5ID0gRmFjaWxpdHlSZW1vdGVDb21tYW5kc0xvY2FsaXphdGlvbktleVtGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlc1tmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudC50eXBlXV07XG4gICAgY29uc3QgY29uZmlnOiBDb21tYW5kTm90aWZpY2F0aW9uQ29uZmlnID0ge1xuICAgICAgbWVzc2FnZXM6IFt7IHZhbHVlOiBmYWNpbGl0eS5uYW1lLCBjbGFzczogTm90aWZpY2F0aW9uQ2xhc3MuYm9keSB9XSxcbiAgICAgIGNvbW1hbmQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KG9wZXJhdGlvblR5cGVLZXkpXG4gICAgfTtcblxuICAgIGlmIChmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudC50eXBlID09PSBGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlcy5TZXRBY3RpdmVSYXRlKSB7XG4gICAgICB0aGlzLnByb2Nlc3NEeW5hbWljUHJpY2luZ1NldEFjdGl2ZVJhdGUoZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQsIGNvbmZpZyk7XG4gICAgfVxuXG4gICAgb2YoZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQpLnBpcGUoc3dpdGNoTWFwKGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50ID0+IHtcbiAgICAgIHJldHVybiBmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudC5zdWNjZXNzID8gb2YoZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQuc3VjY2VzcykgOiB0aHJvd0Vycm9yKCdGYWlsZWQgZXhlY3V0aW5nIGNvbW1hbmQnKTtcbiAgICB9KSwgdGhpcy5jb21tYW5kTm90aWZpY2F0aW9uU2VydmljZS5kaXNwbGF5KGNvbmZpZykpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkTWFjcm9Db21tYW5kc0FjdGlvbiwgeyBjYW5jZWxVbmNvbXBsZXRlZDogdHJ1ZSB9KVxuICBvbkxvYWRNYWNyb0NvbW1hbmRzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgcGFya0lkLCBndWlkIH06IExvYWRNYWNyb0NvbW1hbmRzQWN0aW9uKSB7XG4gICAgY29uc3QgbWFjcm9Db21tYW5kcyQgPSB0aGlzLnJlbW90ZUNvbW1hbmRScGNTZXJ2aWNlUHJveHkuZ2V0TWFjcm9Db21tYW5kcyhndWlkLCBwYXJrSWQpO1xuXG4gICAgcmV0dXJuIG1hY3JvQ29tbWFuZHMkLnBpcGUodGFwKG1hY3JvQ29tbWFuZHMgPT4ge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBtYWNyb0NvbW1hbmRzOiBtYWNyb0NvbW1hbmRzLmRhdGFcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJNYWNyb0NvbW1hbmRzQWN0aW9uKVxuICBvbkNsZWFyTWFjcm9Db21tYW5kc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgbWFjcm9Db21tYW5kczogW10sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZhY2lsaXRpZXMoY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgZ3VpZDogc3RyaW5nLCBwYXJrSWQ6IG51bWJlciwgYXBwTW9kdWxlOiBBcHBNb2R1bGUsXG4gICAgZmFjaWxpdHk6IEZhY2lsaXR5RHRvLCBmYWNpbGl0aWVzTWFwPzogU3RyaW5nTWFwPEZhY2lsaXR5RHRvW10+KSB7XG4gICAgY29uc3QgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5jbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeTtcbiAgICBjb25zdCBmYWNpbGl0eURpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5kaWN0aW9uYXJ5O1xuICAgIGNvbnN0IG5vd01vbWVudCA9IG1vbWVudCgpO1xuXG4gICAgaWYgKGZhY2lsaXRpZXNNYXApIHtcbiAgICAgIGZhY2lsaXRpZXNNYXBbZ3VpZF0uZm9yRWFjaChmID0+IHtcbiAgICAgICAgZi5jbG91ZElkID0gZi5jbG91ZElkID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2YuaWRdLmNsb3VkSWQ7XG4gICAgICAgIGYuZmVhdHVyZVBlcm1pc3Npb25zID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2YuaWRdLmZlYXR1cmVQZXJtaXNzaW9ucztcbiAgICAgICAgZi5wZXJtaXNzaW9ucyA9IGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmLmlkXS5wZXJtaXNzaW9ucztcbiAgICAgICAgZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2YuaWRdID0gdGhpcy51cGRhdGVGYWNpbGl0eUNvbm5lY3Rpdml0eUZsYWdzKGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmLmlkXSwgZik7XG4gICAgICAgIHJldHVybiBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZi5pZF07XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmFjaWxpdHkuY2xvdWRJZCA9IGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmYWNpbGl0eS5pZF0uY2xvdWRJZDtcbiAgICAgIGZhY2lsaXR5LmZlYXR1cmVQZXJtaXNzaW9ucyA9IGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmYWNpbGl0eS5pZF0uZmVhdHVyZVBlcm1pc3Npb25zO1xuICAgICAgZmFjaWxpdHkucGVybWlzc2lvbnMgPSBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZmFjaWxpdHkuaWRdLnBlcm1pc3Npb25zO1xuICAgICAgZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW3BhcmtJZF0gPSB0aGlzLnVwZGF0ZUZhY2lsaXR5Q29ubmVjdGl2aXR5RmxhZ3MoZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW3BhcmtJZF0sIGZhY2lsaXR5KTtcbiAgICB9XG5cbiAgICAvLyBHdWFyZDogYSBzdXBlci1wYXJrIGZhY2lsaXRpZXMgbWFwIG1heSBub3QgY29udGFpbiB0aGUgcmVxdWVzdGVkIHBhcmtJZFxuICAgIC8vIChvciB0aGUgcmVzcG9uc2UgbWF5IGJlIGVtcHR5KS4gU2tpcCB0aGUgdGltZS1kaWZmIGNhbGMgcmF0aGVyIHRoYW5cbiAgICAvLyBkZXJlZmVyZW5jaW5nIGFuIHVuZGVmaW5lZCBmYWNpbGl0eSAoU1BSSzMgLyBKQVZBU0NSSVBULUFOR1VMQVItMlcgY3Jhc2gpLlxuICAgIGlmIChmYWNpbGl0eSkge1xuICAgICAgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnlbZ3VpZF0gPSB0aGlzLmdldENsaWVudFNlcnZlclRpbWVEaWZmKGZhY2lsaXR5LCBub3dNb21lbnQpO1xuICAgICAgdGhpcy5wYXRjaERpZmZEaWN0aW5hcnlUb1N0b3JlKGN0eCwgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkpO1xuICAgIH1cbiAgICB0aGlzLnBhdGNoRmFjaWxpdGllc1RvU3RvcmUoY3R4LCBmYWNpbGl0eURpY3Rpb25hcnksIGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtwYXJrSWRdLCBhcHBNb2R1bGUpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGYWNpbGl0eUNvbm5lY3Rpdml0eUZsYWdzKHN0b3JlZEZhY2lsaXR5OiBGYWNpbGl0eUR0bywgaW5jb21pbmdGYWNpbGl0eTogRmFjaWxpdHlEdG8pIHtcbiAgICBjb25zdCBjbG91ZERhdGVUaW1lVXRjID0gdGhpcy5nZXRDbG91ZERhdGVUaW1lVXRjKCk7XG4gICAgaW5jb21pbmdGYWNpbGl0eS5scHJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBpbmNvbWluZ0ZhY2lsaXR5LmlzTFBSRW5hYmxlZCAmJiAhaW5jb21pbmdGYWNpbGl0eS5pc0xQUkNvbm5lY3RlZCA/IHN0b3JlZEZhY2lsaXR5LmxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/PyBjbG91ZERhdGVUaW1lVXRjIDogbnVsbDtcbiAgICBpbmNvbWluZ0ZhY2lsaXR5LmNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IGluY29taW5nRmFjaWxpdHkuaXNDcmVkaXRTZXJ2ZXJFbmFibGVkICYmICFpbmNvbWluZ0ZhY2lsaXR5LmlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkID8gc3RvcmVkRmFjaWxpdHkuY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGMgOiBudWxsO1xuICAgIGluY29taW5nRmFjaWxpdHkubWFpbkNvbnRyb2xsZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSAhaW5jb21pbmdGYWNpbGl0eS5pc01haW5Db250cm9sbGVyQ29ubmVjdGVkID8gc3RvcmVkRmFjaWxpdHkubWFpbkNvbnRyb2xsZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YyA6IG51bGw7XG4gICAgcmV0dXJuIGluY29taW5nRmFjaWxpdHk7XG4gIH1cblxuICBwcml2YXRlIHBhdGNoRmFjaWxpdGllc1RvU3RvcmUoY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgZGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5LCBmYWNpbGl0eTogRmFjaWxpdHlEdG8sIGFwcE1vZHVsZTogQXBwTW9kdWxlKSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZGljdGlvbmFyeSxcbiAgICB9KTtcblxuICAgIGlmIChhcHBNb2R1bGUgPT09IEFwcE1vZHVsZS5DYykge1xuICAgICAgY29uc3QgYWxsb3dlZEFjdGlvbnMgPSBjb252ZXJ0RmVhdHVyZVBlcm1pc3Npb25zVG9EaWN0aW9uYXJ5KGZhY2lsaXR5LmZlYXR1cmVQZXJtaXNzaW9ucyk7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIHNlbGVjdGVkOiBmYWNpbGl0eSxcbiAgICAgICAgem9uZXM6IGZhY2lsaXR5LnpvbmVzLFxuICAgICAgICBtdWx0aVBhcmtQYXJlbnRJRDogZmFjaWxpdHkubXVsdGlQYXJrUGFyZW50SUQsXG4gICAgICAgIGFsbG93ZWRBY3Rpb25zXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBhdGNoRGlmZkRpY3RpbmFyeVRvU3RvcmUoY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnk6IENsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENsaWVudFNlcnZlclRpbWVEaWZmKGZhY2lsaXR5OiBGYWNpbGl0eUR0bywgbm93TW9tZW50OiBtb21lbnQuTW9tZW50KTogbnVtYmVyIHtcbiAgICByZXR1cm4gbm93TW9tZW50LnR6KGZhY2lsaXR5LnNwVGltZVpvbmUpLmRpZmYodGhpcy5zeW5jU2VydmVyRGF0ZUdsb2JhbFdvcmxkVGltZVpvbmUoZmFjaWxpdHkpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3luY1NlcnZlckRhdGVHbG9iYWxXb3JsZFRpbWVab25lKGZhY2lsaXR5OiBGYWNpbGl0eUR0bykge1xuICAgIC8vIGZpeCBmb3Igc2VydmVycyB0aGF0IG5vdCBzeW5jIHRvIGdsb2JhbCB3b3JsZCBjbG9ja1xuICAgIGxldCBzZXJ2ZXJEYXRlVGltZTogc3RyaW5nID0gZmFjaWxpdHkuc2VydmVyRGF0ZVRpbWVbJ19pJ107XG4gICAgaWYgKCFzZXJ2ZXJEYXRlVGltZS5lbmRzV2l0aCgnKzAwOjAwJykpIHtcbiAgICAgIHNlcnZlckRhdGVUaW1lID0gc2VydmVyRGF0ZVRpbWUuc2xpY2UoMCwgc2VydmVyRGF0ZVRpbWUuaW5kZXhPZignLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIG1vbWVudC50eihzZXJ2ZXJEYXRlVGltZSwgZmFjaWxpdHkuc3BUaW1lWm9uZSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlcnZpY2VSdW5uaW5nU3RhdHVzRmxhZ3MoY3VycmVudFNlcnZpY2VzUnVubmluZ1N0YXR1czogU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvLCBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXM6IFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0byk6IFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0byB7XG4gICAgY29uc3QgY2xvdWREYXRlVGltZVV0YyA9IHRoaXMuZ2V0Q2xvdWREYXRlVGltZVV0YygpO1xuICAgIG5ld1NlcnZpY2VzUnVubmluZ1N0YXR1cy5zbWFydFBhcmtEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuaXNTbWFydFBhcmtDb25uZWN0ZWQgPyBudWxsIDogY3VycmVudFNlcnZpY2VzUnVubmluZ1N0YXR1cy5zbWFydFBhcmtEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YztcbiAgICBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc21hcnRQYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IG5ld1NlcnZpY2VzUnVubmluZ1N0YXR1cy5pc1NtYXJ0UGFya0NvcmVDb25uZWN0ZWQgPyBudWxsIDogY3VycmVudFNlcnZpY2VzUnVubmluZ1N0YXR1cy5zbWFydFBhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGM7XG4gICAgbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzLnNwYXJrQ2xvdWREaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuaXNTcGFya0Nsb3VkQ29ubmVjdGVkID8gbnVsbCA6IGN1cnJlbnRTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc3BhcmtDbG91ZERpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/PyBjbG91ZERhdGVUaW1lVXRjO1xuICAgIG5ld1NlcnZpY2VzUnVubmluZ1N0YXR1cy5zcGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuaXNTcGFya0NvcmVDb25uZWN0ZWQgPyBudWxsIDogY3VycmVudFNlcnZpY2VzUnVubmluZ1N0YXR1cy5zcGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YztcbiAgICByZXR1cm4gbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3NpZ25GYWNpbGl0eShzdG9yZWRGYWNpbGl0eTogRmFjaWxpdHlEdG8sIGluY29taW5nRmFjaWxpdHk6IEZhY2lsaXR5RHRvKTogRmFjaWxpdHlEdG8ge1xuICAgIGNvbnN0IGNsb3VkRGF0ZVRpbWVVdGMgPSB0aGlzLmdldENsb3VkRGF0ZVRpbWVVdGMoKTtcbiAgICBsZXQgY3VycmVudEZhY2lsaXR5ID0gbmV3IEZhY2lsaXR5RHRvKHN0b3JlZEZhY2lsaXR5KTtcbiAgICBjdXJyZW50RmFjaWxpdHkubmFtZSA9IGluY29taW5nRmFjaWxpdHkubmFtZTtcbiAgICBjdXJyZW50RmFjaWxpdHkuaXNMUFJFbmFibGVkID0gaW5jb21pbmdGYWNpbGl0eS5pc0xQUkVuYWJsZWQ7XG4gICAgY3VycmVudEZhY2lsaXR5LmlzTFBSQ29ubmVjdGVkID0gaW5jb21pbmdGYWNpbGl0eS5pc0xQUkNvbm5lY3RlZDtcbiAgICBjdXJyZW50RmFjaWxpdHkuaXNDcmVkaXRTZXJ2ZXJFbmFibGVkID0gaW5jb21pbmdGYWNpbGl0eS5pc0NyZWRpdFNlcnZlckVuYWJsZWQ7XG4gICAgY3VycmVudEZhY2lsaXR5LmlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkID0gaW5jb21pbmdGYWNpbGl0eS5pc0NyZWRpdFNlcnZlckNvbm5lY3RlZDtcbiAgICBjdXJyZW50RmFjaWxpdHkuaXNNYWluQ29udHJvbGxlckNvbm5lY3RlZCA9IGluY29taW5nRmFjaWxpdHkuaXNNYWluQ29udHJvbGxlckNvbm5lY3RlZDtcbiAgICBjdXJyZW50RmFjaWxpdHkuaXNNdWx0aVBhcmsgPSBpbmNvbWluZ0ZhY2lsaXR5LmlzTXVsdGlQYXJrO1xuICAgIGN1cnJlbnRGYWNpbGl0eS50aW1lRHJpZnQgPSBpbmNvbWluZ0ZhY2lsaXR5LnRpbWVEcmlmdDtcbiAgICBjdXJyZW50RmFjaWxpdHkuc21hcnRQYXJrUG9pbnRlciA9IGluY29taW5nRmFjaWxpdHkuc21hcnRQYXJrUG9pbnRlcjtcbiAgICBjdXJyZW50RmFjaWxpdHkubWFpbkNvbnRyb2xsZXJQb2ludGVyID0gaW5jb21pbmdGYWNpbGl0eS5tYWluQ29udHJvbGxlclBvaW50ZXI7XG4gICAgY3VycmVudEZhY2lsaXR5LmFjdGl2ZSA9IGluY29taW5nRmFjaWxpdHkuYWN0aXZlO1xuICAgIGN1cnJlbnRGYWNpbGl0eS50b3RhbFNwYWNlID0gaW5jb21pbmdGYWNpbGl0eS50b3RhbFNwYWNlO1xuICAgIGN1cnJlbnRGYWNpbGl0eS5scHJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBpbmNvbWluZ0ZhY2lsaXR5LmlzTFBSRW5hYmxlZCAmJiAhaW5jb21pbmdGYWNpbGl0eS5pc0xQUkNvbm5lY3RlZCA/IHN0b3JlZEZhY2lsaXR5LmxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/PyBjbG91ZERhdGVUaW1lVXRjIDogbnVsbDtcbiAgICBjdXJyZW50RmFjaWxpdHkuY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wID0gaW5jb21pbmdGYWNpbGl0eS5pc0NyZWRpdFNlcnZlckVuYWJsZWQgJiYgIWluY29taW5nRmFjaWxpdHkuaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWQgPyBzdG9yZWRGYWNpbGl0eS5jcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YyA6IG51bGw7XG4gICAgY3VycmVudEZhY2lsaXR5Lm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wID0gIWluY29taW5nRmFjaWxpdHkuaXNNYWluQ29udHJvbGxlckNvbm5lY3RlZCA/IHN0b3JlZEZhY2lsaXR5Lm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGMgOiBudWxsO1xuICAgIHJldHVybiBjdXJyZW50RmFjaWxpdHk7XG4gIH1cblxuICBwcml2YXRlIGdldENsb3VkRGF0ZVRpbWVVdGMoKSB7XG4gICAgY29uc3QgZ3VpZCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5ndWlkKTtcbiAgICBjb25zdCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5jbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSk7XG4gICAgcmV0dXJuIG1vbWVudC51dGMoKS5zdWJ0cmFjdChjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeVtndWlkXSwgJ21pbGxpc2Vjb25kcycpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b0Jhc2ljTWVudUl0ZW1zKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHNtYXJ0cGFya01hcDogU3RyaW5nTWFwPFNtYXJ0cGFya0Jhc2ljRHRvPiwgZmFjaWxpdHlEaWN0aW9uYXJ5OiBGYWNpbGl0eURpY3Rpb25hcnksIGFwcE1vZHVsZTogQXBwTW9kdWxlKTogTWVudUl0ZW1bXSB7XG4gICAgY29uc3QgdGliYUtleXMgPSBjdHguZ2V0U3RhdGUoKS50aWJhS2V5cztcbiAgICBjb25zdCBtZW51SXRlbXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGd1aWQgb2YgT2JqZWN0LmtleXMoc21hcnRwYXJrTWFwKSkge1xuICAgICAgY29uc3QgdGliYUtleSA9IHRpYmFLZXlzW2d1aWRdO1xuICAgICAgbWVudUl0ZW1zLnB1c2goLi4udGhpcy5jcmVhdGVNZW51SXRlbXMoc21hcnRwYXJrTWFwW2d1aWRdLCBndWlkLCB0aWJhS2V5LCBmYWNpbGl0eURpY3Rpb25hcnksIGFwcE1vZHVsZSkpO1xuICAgIH1cblxuICAgIHJldHVybiBtZW51SXRlbXM7XG4gIH1cblxuICBwcml2YXRlIGlzUGFya0FjdGl2ZSA9IChjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBndWlkOiBzdHJpbmcsIHBhcmtJZDogbnVtYmVyKSA9PlxuICAgIGN0eC5nZXRTdGF0ZSgpLnNlbGVjdGVkPy5pZCA9PT0gcGFya0lkICYmIGN0eC5nZXRTdGF0ZSgpLmd1aWQgPT09IGd1aWQ7XG5cbiAgcHJpdmF0ZSBjcmVhdGVNZW51SXRlbXMoc21hcnRwYXJrQmFzaWM6IFNtYXJ0cGFya0Jhc2ljRHRvLCBndWlkOiBzdHJpbmcsIHRpYmFLZXk6IG51bWJlciwgZmFjaWxpdHlEaWN0aW9uYXJ5OiBGYWNpbGl0eURpY3Rpb25hcnksIGFwcE1vZHVsZTogQXBwTW9kdWxlKTogTWVudUl0ZW1bXSB7XG4gICAgY29uc3QgbWVudUl0ZW1zOiBNZW51SXRlbVtdID0gW107XG4gICAgc21hcnRwYXJrQmFzaWMuZmFjaWxpdGllcy5mb3JFYWNoKGxvdCA9PiB7XG4gICAgICBpZiAobG90Lm11bHRpUGFya1BhcmVudElEID4gMCkge1xuICAgICAgICAvLyBkbyBub3QgcHVzaCBjaGlsZHJlbnMgdG8gbWVudSBpdGVtcyBhcnJheVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lbnVJdGVtID0gdGhpcy5mYWNpbGl0eU1lbnVTZXJ2aWNlLmNyZWF0ZU1lbnUoZ3VpZCwgdGliYUtleSwgc21hcnRwYXJrQmFzaWMsIGxvdCwgZmFjaWxpdHlEaWN0aW9uYXJ5LCBhcHBNb2R1bGUpO1xuICAgICAgbWVudUl0ZW1zLnB1c2gobWVudUl0ZW0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1lbnVJdGVtcztcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTWVudUl0ZW1zUGFya0Nvbm5lY3Rpb25TdGF0dXMoY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPik6IHZvaWQge1xuICAgIC8vIFdlIGRvbnQgcnVuIG1lbnUgdXBkYXRlIGlmIHdlIGFyZSBub3QgaW4gQ0NcbiAgICBjb25zdCBjdXJyZW50TW9kdWxlID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTaWRlbmF2U3RhdGUuYXBwTW9kdWxlKTtcbiAgICBjb25zdCBpc01vYmlsZUFwcE1vZGUgPSB0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKS5hcHBUeXBlID09PSBBcHBUeXBlLk1vYmlsZTtcbiAgICBpZiAoY3VycmVudE1vZHVsZSAhPT0gQXBwTW9kdWxlLkNjKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBtZW51SXRlbXMgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5tZW51SXRlbXMpO1xuICAgIGNvbnN0IGZhY2lsaXR5RGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmRpY3Rpb25hcnk7XG4gICAgY29uc3Qgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLnNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnk7XG5cbiAgICBmb3IgKGNvbnN0IFtndWlkLCBsb3RzTWFwXSBvZiBPYmplY3QuZW50cmllcyhmYWNpbGl0eURpY3Rpb25hcnkpKSB7XG4gICAgICBjb25zdCBmYWNpbGl0aWVzOiBGYWNpbGl0eUR0b1tdID0gT2JqZWN0LnZhbHVlcyhsb3RzTWFwKTtcbiAgICAgIGZvciAoY29uc3QgZmFjaWxpdHkgb2YgZmFjaWxpdGllcykge1xuICAgICAgICBsZXQgbWVudUl0ZW06IE1lbnVJdGVtO1xuXG4gICAgICAgIGlmIChmYWNpbGl0eS5tdWx0aVBhcmtQYXJlbnRJRCA+IDApIHtcbiAgICAgICAgICBtZW51SXRlbSA9IG1lbnVJdGVtc1xuICAgICAgICAgICAgLmZpbmQoaXRlbSA9PiBpdGVtLnByb3BlcnRpZXM/Lmd1aWQgPT09IGd1aWQpPy5jaGlsZHJlblxuICAgICAgICAgICAgLmZpbmQoc3ViSXRlbSA9PiBzdWJJdGVtLmlkID09PSBmYWNpbGl0eS5pZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWVudUl0ZW0gPSBtZW51SXRlbXMuZmluZChpdGVtID0+IGl0ZW0ucHJvcGVydGllcz8uZ3VpZCA9PT0gZ3VpZCAmJiBpdGVtLmlkID09PSBmYWNpbGl0eS5pZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWVudUl0ZW0pIHtcbiAgICAgICAgICBjb25zdCBiYWRnZUNsYXNzID0gdGhpcy5mYWNpbGl0eU1lbnVTZXJ2aWNlLmdldEJhZGdlUHJpb3JpdHkoZ3VpZCwgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeVtndWlkXSwgZmFjaWxpdHksIGZhY2lsaXR5RGljdGlvbmFyeSk7XG4gICAgICAgICAgbWVudUl0ZW0uaGFzQmFkZ2UgPSBiYWRnZUNsYXNzICE9PSBQYXJrQ29ubmVjdGlvblN0YXR1c0NsYXNzLkNvbm5lY3RlZDtcbiAgICAgICAgICBtZW51SXRlbS5iYWRnZUNsYXNzID0gYmFkZ2VDbGFzcztcbiAgICAgICAgICBtZW51SXRlbS5uYW1lID0gZmFjaWxpdHkubmFtZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghaXNNb2JpbGVBcHBNb2RlKSB7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBNZW51TG9hZEFjdGlvbihbLi4ubWVudUl0ZW1zXSwgQXBwTW9kdWxlLkNjKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTbWFydHBhcmtDb25uZWN0aW9uU3RhdHVzTWFwKHNtYXJ0cGFya01hcDogU3RyaW5nTWFwPFNtYXJ0cGFya0Jhc2ljRHRvPiwgZmFjaWxpdHlEaWN0aW9uYXJ5OiBGYWNpbGl0eURpY3Rpb25hcnkpIHtcbiAgICBjb25zdCBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5OiBTdHJpbmdNYXA8U2VydmljZXNSdW5uaW5nU3RhdHVzRHRvPiA9IHt9O1xuICAgIGNvbnN0IHBhcmtDb25uZWN0aW9uU3RhdHVzTWFwOiBDb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeSA9IHt9O1xuICAgIGZvciAoY29uc3QgZ3VpZCBvZiBPYmplY3Qua2V5cyhzbWFydHBhcmtNYXApKSB7XG4gICAgICBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5W2d1aWRdID0gc21hcnRwYXJrTWFwW2d1aWRdLnNlcnZpY2VzUnVubmluZ1N0YXR1cztcbiAgICAgIHBhcmtDb25uZWN0aW9uU3RhdHVzTWFwW2d1aWRdID0gc21hcnRwYXJrTWFwW2d1aWRdLmZhY2lsaXRpZXMucmVkdWNlKChmYWNpbGl0aWVzLCBsb3QpID0+IHtcbiAgICAgICAgY29uc3QgcGFya0Nvbm5lY3Rpb25TdGF0dXMgPSB0aGlzLmdsb2JhbEVycm9yU2VydmljZS5nZXRQYXJrQ29ubmVjdGlvblN0YXR1cyhndWlkLCBsb3QsIHNtYXJ0cGFya01hcFtndWlkXS5zZXJ2aWNlc1J1bm5pbmdTdGF0dXMsIGZhY2lsaXR5RGljdGlvbmFyeSk7XG4gICAgICAgIGZhY2lsaXRpZXNbbG90LmlkXSA9IHtcbiAgICAgICAgICBzdGF0dXM6IHBhcmtDb25uZWN0aW9uU3RhdHVzLnN0YXR1cyxcbiAgICAgICAgICBzdGFydERhdGU6IHBhcmtDb25uZWN0aW9uU3RhdHVzLnN0YXJ0RGF0ZVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZmFjaWxpdGllcztcbiAgICAgIH0sIHt9KTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5LCBwYXJrQ29ubmVjdGlvblN0YXR1c01hcCB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0VG9GYWNpbGl0eURpY3Rpb25hcnkoc21hcnRwYXJrTWFwOiBTdHJpbmdNYXA8U21hcnRwYXJrQmFzaWNEdG8+KTogeyBzbWFydHBhcmtzQmFzZTogU21hcnRwYXJrQmFzaWNEdG9bXSwgZGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5LCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeTogQ2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnk7IH0ge1xuICAgIGNvbnN0IHNtYXJ0cGFya3NCYXNlOiBTbWFydHBhcmtCYXNpY0R0b1tdID0gW107XG4gICAgY29uc3QgZmFjaWxpdHlEaWN0aW9uYXJ5OiBGYWNpbGl0eURpY3Rpb25hcnkgPSB7fTtcbiAgICBjb25zdCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeTogQ2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkgPSB7fTtcblxuICAgIGZvciAoY29uc3QgZ3VpZCBvZiBPYmplY3Qua2V5cyhzbWFydHBhcmtNYXApKSB7XG4gICAgICBzbWFydHBhcmtzQmFzZS5wdXNoKHNtYXJ0cGFya01hcFtndWlkXSk7XG5cbiAgICAgIGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXSA9IHt9O1xuICAgICAgZm9yIChjb25zdCBsb3Qgb2Ygc21hcnRwYXJrTWFwW2d1aWRdLmZhY2lsaXRpZXMpIHtcbiAgICAgICAgY29uc3QgY2xvdCA9IG5ldyBGYWNpbGl0eUR0bygpO1xuICAgICAgICBjbG90LmlkID0gbG90LmlkO1xuICAgICAgICBjbG90LmNsb3VkSWQgPSBsb3QuY2xvdWRJZDtcbiAgICAgICAgY2xvdC5hY3RpdmUgPSBsb3QuYWN0aXZlO1xuICAgICAgICBjbG90LmZlYXR1cmVQZXJtaXNzaW9ucyA9IGxvdC5mZWF0dXJlUGVybWlzc2lvbnM7XG4gICAgICAgIGNsb3QucGVybWlzc2lvbnMgPSBsb3QucGVybWlzc2lvbnM7XG4gICAgICAgIGNsb3QubmFtZSA9IGxvdC5uYW1lO1xuICAgICAgICBjbG90LnNpdGVDb2RlID0gbG90LnNpdGVDb2RlO1xuICAgICAgICBjbG90Lm11bHRpUGFya1BhcmVudElEID0gbG90Lm11bHRpUGFya1BhcmVudElEO1xuICAgICAgICBjbG90LmlzTWFpbkNvbnRyb2xsZXJDb25uZWN0ZWQgPSBsb3QuaXNNYWluQ29udHJvbGxlckNvbm5lY3RlZDtcbiAgICAgICAgY2xvdC5tYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IGxvdC5tYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcDtcbiAgICAgICAgY2xvdC5pc0NyZWRpdFNlcnZlckVuYWJsZWQgPSBsb3QuaXNDcmVkaXRTZXJ2ZXJFbmFibGVkO1xuICAgICAgICBjbG90LmlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkID0gbG90LmlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkO1xuICAgICAgICBjbG90LmNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IGxvdC5jcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXA7XG4gICAgICAgIGNsb3QuaXNMUFJDb25uZWN0ZWQgPSBsb3QuaXNMUFJDb25uZWN0ZWQ7XG4gICAgICAgIGNsb3QuaXNMUFJFbmFibGVkID0gbG90LmlzTFBSRW5hYmxlZDtcbiAgICAgICAgY2xvdC5pc1RpY2tldExlc3NFbmFibGVkID0gbG90LmlzVGlja2V0TGVzc0VuYWJsZWQ7XG4gICAgICAgIGNsb3QubHByRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbG90LmxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcDtcbiAgICAgICAgY2xvdC5pc0Jhc2ljID0gbG90LmlzQmFzaWM7XG4gICAgICAgIGNsb3QuaXNNdWx0aVBhcmsgPSBsb3QuaXNNdWx0aVBhcms7XG4gICAgICAgIGNsb3QudGltZURyaWZ0ID0gbG90LnRpbWVEcmlmdDtcbiAgICAgICAgY2xvdC5zcFRpbWVab25lID0gbG90LnNwVGltZVpvbmU7XG4gICAgICAgIGNsb3Quc2VydmVyRGF0ZVRpbWUgPSBsb3Quc2VydmVyRGF0ZVRpbWU7XG4gICAgICAgIGNsb3QudG90YWxTcGFjZSA9IGxvdC50b3RhbFNwYWNlO1xuICAgICAgICBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bbG90LmlkXSA9IGNsb3Q7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBkaWZmIG9mIDAgZm9yIGluaXRpYWwgc2V0dXBcbiAgICAgIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5W2d1aWRdID0gMDtcbiAgICB9XG5cbiAgICByZXR1cm4geyBzbWFydHBhcmtzQmFzZSwgZGljdGlvbmFyeTogZmFjaWxpdHlEaWN0aW9uYXJ5LCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSB9O1xuXG4gICAgXG4gIH1cblxuICBwcml2YXRlIHBvcHVsYXRlU21hcnRwYXJrQmFzaWMoY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgc21hcnRQYXJrczogU3RyaW5nTWFwPFNtYXJ0cGFya0Jhc2ljRHRvPikge1xuICAgIC8vIGtlZXAgZGVmYXVsdCB2YWx1ZXMgd2hlbiBuYXZpZ2F0ZSB0byBjb21tYW5kIGNlbnRlciBmb3J3YXJkIGFuZCBiYWNrLlxuICAgIGNvbnN0IHsgZ3VpZCwgcGFya0lkLCBtdWx0aVBhcmtQYXJlbnRJRCwgc2VsZWN0ZWQgfSA9IGN0eC5nZXRTdGF0ZSgpO1xuICAgIGRlZmF1bHRzLmd1aWQgPSBndWlkO1xuICAgIGRlZmF1bHRzLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgZGVmYXVsdHMucGFya0lkID0gcGFya0lkO1xuICAgIGRlZmF1bHRzLm11bHRpUGFya1BhcmVudElEID0gbXVsdGlQYXJrUGFyZW50SUQ7XG5cbiAgICBjdHguc2V0U3RhdGUoZGVmYXVsdHMpO1xuXG4gICAgY29uc3QgdGliYUtleXM6IFN0cmluZ01hcDxudW1iZXI+ID0gT2JqZWN0LmtleXMoc21hcnRQYXJrcykucmVkdWNlKChrZXlzLCBndWlkLCBpbmRleCkgPT4ge1xuICAgICAga2V5c1tndWlkXSA9IGluZGV4O1xuICAgICAgcmV0dXJuIGtleXM7XG4gICAgfSwge30pO1xuXG4gICAgY29uc3QgeyBzbWFydHBhcmtzQmFzZSwgZGljdGlvbmFyeSwgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkgfSA9IHRoaXMuY29udmVydFRvRmFjaWxpdHlEaWN0aW9uYXJ5KHNtYXJ0UGFya3MpO1xuXG4gICAgY29uc3Qgc3RhdGVVcGRhdGVzOiBQYXJ0aWFsPEZhY2lsaXR5U3RhdGVNb2RlbD4gPSB7XG4gICAgICB0aWJhS2V5cyxcbiAgICAgIGRpY3Rpb25hcnksXG4gICAgICBzbWFydHBhcmtzQmFzZSxcbiAgICAgIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5LFxuICAgIH07XG5cbiAgICBpZiAoIWRpY3Rpb25hcnlbZ3VpZF0gfHwgIWRpY3Rpb25hcnlbZ3VpZF1bcGFya0lkXSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihzdGF0ZVVwZGF0ZXMsIHtcbiAgICAgICAgZ3VpZDogJycsXG4gICAgICAgIHBhcmtJZDogbnVsbCxcbiAgICAgICAgbXVsdGlQYXJrUGFyZW50SUQ6IG51bGwsXG4gICAgICAgIHNlbGVjdGVkOiBudWxsLFxuICAgICAgICB6b25lczogbnVsbCxcbiAgICAgICAgYWxsb3dlZEFjdGlvbnM6IHt9LFxuICAgICAgfSk7XG4gICAgfVxuICAgIGN0eC5wYXRjaFN0YXRlKHN0YXRlVXBkYXRlcyk7XG5cbiAgICAvL3VzZXMgZmFjaWxpdHkgZGljdGlvbmFyeSBmcm9tIHN0b3JlLCB0aGVyZWZvcmUgcGxhY2VkIGFmdGVyXG4gICAgY29uc3QgeyBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5LCBwYXJrQ29ubmVjdGlvblN0YXR1c01hcCB9ID0gdGhpcy5nZXRTbWFydHBhcmtDb25uZWN0aW9uU3RhdHVzTWFwKHNtYXJ0UGFya3MsIGRpY3Rpb25hcnkpO1xuICAgIGN0eC5wYXRjaFN0YXRlKHsgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSwgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnk6IHBhcmtDb25uZWN0aW9uU3RhdHVzTWFwIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzRHluYW1pY1ByaWNpbmdTZXRBY3RpdmVSYXRlKGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50OiBGYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudCwgY29uZmlnOiBDb21tYW5kTm90aWZpY2F0aW9uQ29uZmlnKTogdm9pZCB7XG4gICAgY29uc3QgZHluYW1pY1ByaWNpbmdDb25kaXRpb25zTWFwOiBOdW1iZXJNYXA8RHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG8+ID0gSlNPTi5wYXJzZShcbiAgICAgIHRoaXMubG9jYWxTdG9yYWdlU2VydmljZS5nZXRJdGVtKERZTkFNSUNfUFJJQ0lOR19DT05ESVRJT04pXG4gICAgKSA/PyB7fTtcblxuICAgIGNvbnN0IGRwYzogRHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG8gPSBkeW5hbWljUHJpY2luZ0NvbmRpdGlvbnNNYXBbZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQuc291cmNlSWRlbnRpZmllcl07XG4gICAgaWYgKGRwYykge1xuICAgICAgY29uc3QgZmFjaWxpdHk6IEZhY2lsaXR5RHRvID0gbnVsbDtcbiAgICAgIGNvbmZpZy5kdXJhdGlvbiA9IDcgKiBPTkVfU0VDT05EX0lOX01JTExJU0VDT05EUztcbiAgICAgIGNvbmZpZy5tZXNzYWdlcyA9IHRoaXMuZmFjaWxpdHlDb21tYW5kc0NvbmZpZ1NlcnZpY2UuZ2V0Q29tbWFuZE5vdGlmaWNhdGlvbkNvbmZpZ01lc3NhZ2VzKFxuICAgICAgICBGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlcy5TZXRBY3RpdmVSYXRlLFxuICAgICAgICBmYWNpbGl0eSxcbiAgICAgICAgZHBjXG4gICAgICApO1xuXG4gICAgICAvLyBDbG9zZSBkeW5hbWljIHByaWNpbmcgbm90aWZpY2F0aW9uXG4gICAgICBjb25zdCBub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbkR0byA9IG5ldyBOb3RpZmljYXRpb25EdG8oKTtcbiAgICAgIG5vdGlmaWNhdGlvbi50eXBlID0gTm90aWZpY2F0aW9uVHlwZS5EeW5hbWljUHJpY2luZ0NvbmRpdGlvbjtcbiAgICAgIG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbiA9IGRwYztcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IEhhbmRsZWROb3RpZmljYXRpb25BY3Rpb24obm90aWZpY2F0aW9uLCBkcGMuZ3VpZCkpO1xuXG4gICAgICBkeW5hbWljUHJpY2luZ0NvbmRpdGlvbnNNYXBbZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQuZ3VpZF0gPSBudWxsO1xuICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oXG4gICAgICAgIERZTkFNSUNfUFJJQ0lOR19DT05ESVRJT04sXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KGR5bmFtaWNQcmljaW5nQ29uZGl0aW9uc01hcClcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
966
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjaWxpdHkuc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc2hhcmVkLWxpYi9zcmMvbGlicmFyaWVzL21vZHVsZXMvZmFjaWxpdHkvZmFjaWxpdHkuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBdUIsTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDMUMsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDdEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2xHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRWxGLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUE4QixlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUVySSxPQUFPLEVBQ3NCLFdBQVcsRUFDdEMsMEJBQTBCLEVBQTRELFNBQVMsRUFBRSwrQkFBK0IsRUFFakksTUFBTSx5Q0FBeUMsQ0FB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ekIsMkJBQTJCLE1BUzNCLDRCQUE0QixNQVc1QixzQkFBc0IsTUEwQnRCLDZCQUE2QixNQWU3QixxQ0FBcUMsTUFpQnJDLG9CQUFvQixNQWdCcEIsd0JBQXdCLE1BV3hCLGtDQUFrQyxNQVlsQyxvQ0FBb0MsTUFZcEMsbUJBQW1CLE1BK0ZuQixvQ0FBb0MsTUE4QnBDLHVCQUF1QixNQWtDdkIsb0JBQW9CLE1BS3BCLHdCQUF3QixNQWF4QiwrQkFBK0IsTUFhL0IsdUJBQXVCLE1BYXZCLGNBQWMsTUFpQ2Qsa0JBQWtCLE1BT2xCLGVBQWUsTUFPZix1QkFBdUIsTUFhdkIsNkJBQTZCLE1BWTdCLGlDQUFpQyxNQWtCakMscUNBQXFDLE1BdUJyQyx5QkFBeUIsTUFXekIsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9uLCBTZWxlY3RvciwgU3RhdGUsIFN0YXRlQ29udGV4dCwgU3RvcmUgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQgeyBjbG9uZSwgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBzd2l0Y2hNYXAsIHRhcCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29tbWFuZE5vdGlmaWNhdGlvbkNvbmZpZywgQ29tbWFuZE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi9jb21tYW5kLW5vdGlmaWNhdGlvbic7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25DbGFzcyB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL25vdGlmaWNhdGlvbi1jb25maWcnO1xuaW1wb3J0IHsgT05FX1NFQ09ORF9JTl9NSUxMSVNFQ09ORFMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZ2xvYmFsLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBEWU5BTUlDX1BSSUNJTkdfQ09ORElUSU9OIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2tleXMtY29uc3RhbnRzJztcbmltcG9ydCB7IEFwcFR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcy9hcHAtdHlwZS5lbnVtJztcbmltcG9ydCB7IEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNMb2NhbGl6YXRpb25LZXkgfSBmcm9tICcuLi8uLi9lbnVtcy9mYWNpbGl0eS1yZW1vdGUtY29tbWFuZHMuZW51bSc7XG5pbXBvcnQgeyBQYXJrQ29ubmVjdGlvblN0YXR1c0NsYXNzIH0gZnJvbSAnLi4vLi4vZW51bXMvcHJpb3JpdHktbGluay1zdGF0dXMuZW51bSc7XG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbWVudS1pdGVtLmludGVyZmFjZSc7XG5pbXBvcnQgeyBScGMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5JztcbmltcG9ydCB7IEFwcE1vZHVsZSwgRHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG8sIE5vdGlmaWNhdGlvbkR0bywgTm90aWZpY2F0aW9uVHlwZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvY2xvdWQtc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0bywgU21hcnRwYXJrQmFzaWNEdG8gfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L2lkZW50aXR5LXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQge1xuICBEZXZpY2VSZW1vdGVDb21tYW5kUmVmRHRvLCBGYWNpbGl0eUR0bywgRmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQsIEZhY2lsaXR5UmVtb3RlQ29tbWFuZFJlZkR0byxcbiAgRmFjaWxpdHlSZW1vdGVDb21tYW5kVHlwZXMsIEZhY2lsaXR5UnBjU2VydmljZVByb3h5LCBNYWNyb0NvbW1hbmREdG8sIFBlcm1pc3Npb25UeXBlLCBSdWxlc01vZGUsIFNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlQ2xhc3NEdG8sXG4gIFpEdG8sIFpvbmVEdG8sIFpvbmVScGNTZXJ2aWNlUHJveHksIFpScGNTZXJ2aWNlUHJveHlcbn0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9ycGMtc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHAtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFzZUZhY2lsaXR5Q29tbWFuZHNDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmFjaWxpdHktY29tbWFuZHMtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgR2xvYmFsRXJyb3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZ2xvYmFsLWVycm9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xvY2FsLXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBpc1RydXRoeSwgTnVtYmVyTWFwLCBTdHJpbmdNYXAgfSBmcm9tICcuLi8uLi91dGlscy9sYW5nLnV0aWwnO1xuaW1wb3J0IHsgY29udmVydEZlYXR1cmVQZXJtaXNzaW9uc1RvRGljdGlvbmFyeSB9IGZyb20gJy4uLy4uL3V0aWxzL3Blcm1pc3Npb24tdHlwZS1tYXBwZXIudXRpbCc7XG5pbXBvcnQgeyBvYmplY3RLZXlzdG9Mb3dlckNhc2UgfSBmcm9tICcuLi8uLi91dGlscy90ZXh0LnV0aWwnO1xuaW1wb3J0IHsgSGFuZGxlZE5vdGlmaWNhdGlvbkFjdGlvbiB9IGZyb20gJy4uL2FsZXJ0cy1hbmQtbm90aWZpY2F0aW9ucy9hbGVydHMtYW5kLW5vdGlmaWNhdGlvbnMuYWN0aW9ucyc7XG5pbXBvcnQgeyBNZW51TG9hZEFjdGlvbiB9IGZyb20gJy4uL3NpZGVuYXYvc2lkZW5hdi5hY3Rpb25zJztcbmltcG9ydCB7IFNpZGVuYXZTdGF0ZSB9IGZyb20gJy4uL3NpZGVuYXYvc2lkZW5hdi5zdGF0ZSc7XG5pbXBvcnQgeyBSZW1vdmVTbWFydHBhcmtCYXNpY0FjdGlvbiwgU2V0U21hcnRQYXJrQWN0aW9uLCBVcGRhdGVTbWFydHBhcmtOYW1lQWN0aW9uIH0gZnJvbSAnLi4vc21hcnRwYXJrcy9zbWFydHBhcmsuYWN0aW9ucyc7XG5pbXBvcnQgeyBGYWNpbGl0eU1lbnVTZXJ2aWNlIH0gZnJvbSAnLi9mYWNpbGl0eS1tZW51LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQ2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnksIENvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5LCBEZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnksIEZhY2lsaXR5RGljdGlvbmFyeSwgRmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlcbn0gZnJvbSAnLi9mYWNpbGl0eS1tb2RhbCc7XG5pbXBvcnQge1xuICBDbGVhckZhY2lsaXR5RGljdGlvbmFyeUFjdGlvbiwgQ2xlYXJJbmFjdGl2ZVNlbGVjdGVkUGFya0FjdGlvbixcbiAgQ2xlYXJNYWNyb0NvbW1hbmRzQWN0aW9uLCBDbGVhclNlbGVjdGVkRmFjaWxpdHlBY3Rpb24sIENsZWFyWm9uZXNBY3Rpb24sIENsZWFyWnNBY3Rpb24sXG4gIEZhY2lsaXR5Q2hhbmdlZEFjdGlvbiwgRmFjaWxpdHlSZW1vdGVDb21tYW5kRXhlY3V0ZWRBY3Rpb24sXG4gIExvYWRBY2Nlc3NQcm9maWxlWm9uZXNBY3Rpb24sXG4gIExvYWRDY01haW5ab25lc0FjdGlvbiwgTG9hZEZhY2lsaXR5QWN0aW9uLCBMb2FkRmFjaWxpdHlSZW1vdGVDb21tYW5kc1JlZkFjdGlvbiwgTG9hZE1hY3JvQ29tbWFuZHNBY3Rpb24sXG4gIExvYWRQYXJraW5nTG90QWN0aW9uLCBMb2FkUmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24sIExvYWRSZXBvcnRzWm9uZXNBY3Rpb24sXG4gIExvYWRac0FjdGlvbiwgU2VydmljZXNSdW5uaW5nU3RhdHVzQ2hhbmdlZEFjdGlvbiwgU2V0QmFzaWNNZW51QWN0aW9uLCBTZXREZXZpY2VSZW1vdGVDb21tYW5kc01hcEFjdGlvbiwgU2V0RmFjaWxpdHlSZW1vdGVDb21tYW5kc01hcEFjdGlvbixcbiAgU2V0U2VsZWN0ZWRQYXJrQWN0aW9uLCBTZXRTbWFydHBhcmtCYXNpY0FjdGlvbiwgU2V0U21hcnRwYXJrQmFzaWNBbGxBY3Rpb24sIFVubG9hZFBhcmtpbmdMb3RBY3Rpb24sIFpvbmVDaGFuZ2VkQWN0aW9uXG59IGZyb20gJy4vZmFjaWxpdHkuYWN0aW9ucyc7XG5cbmltcG9ydCBTbWFydFpvbmVDb3VudGVyVmVoaWNsZVR5cGVEdG8gPSBScGMuU21hcnRab25lQ291bnRlclZlaGljbGVUeXBlRHRvO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZhY2lsaXR5U3RhdGVNb2RlbCB7XG4gIGd1aWQ6IHN0cmluZztcbiAgcGFya0lkOiBudW1iZXI7XG4gIGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5OiBDb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeTtcbiAgbXVsdGlQYXJrUGFyZW50SUQ6IG51bWJlcjtcbiAgc2VsZWN0ZWQ6IEZhY2lsaXR5RHRvO1xuICBkaWN0aW9uYXJ5OiBGYWNpbGl0eURpY3Rpb25hcnk7XG4gIHNtYXJ0cGFya3NCYXNlOiBTbWFydHBhcmtCYXNpY0R0b1tdO1xuICBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5OiBTdHJpbmdNYXA8U2VydmljZXNSdW5uaW5nU3RhdHVzRHRvPjtcbiAgdGliYUtleXM6IFN0cmluZ01hcDxudW1iZXI+O1xuICBkZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnk6IERldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTtcbiAgZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnk6IEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5O1xuICB6b25lczogWm9uZUR0b1tdO1xuICB6OiBaRHRvW107XG4gIGFsbG93ZWRBY3Rpb25zOiBOdW1iZXJNYXA8Ym9vbGVhbj47XG4gIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5OiBDbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeTtcbiAgbWFjcm9Db21tYW5kczogTWFjcm9Db21tYW5kRHRvW107XG59XG5cbmNvbnN0IGRlZmF1bHRzID0ge1xuICBndWlkOiAnJyxcbiAgcGFya0lkOiBudWxsLFxuICBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeToge30sXG4gIG11bHRpUGFya1BhcmVudElEOiB1bmRlZmluZWQsXG4gIHNlbGVjdGVkOiBudWxsLFxuICBkaWN0aW9uYXJ5OiB7fSxcbiAgc21hcnRwYXJrc0Jhc2U6IFtdLFxuICBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5OiB7fSxcbiAgdGliYUtleXM6IHt9LFxuICBkZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnk6IHt9LFxuICBmYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeToge30sXG4gIHpvbmVzOiBudWxsLFxuICB6OiBudWxsLFxuICBhbGxvd2VkQWN0aW9uczoge30sXG4gIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5OiB7fSxcbiAgbWFjcm9Db21tYW5kczogW11cbn07XG5cbkBJbmplY3RhYmxlKClcbkBTdGF0ZTxGYWNpbGl0eVN0YXRlTW9kZWw+KHtcbiAgbmFtZTogJ2ZhY2lsaXR5JyxcbiAgZGVmYXVsdHMsXG59KVxuZXhwb3J0IGNsYXNzIEZhY2lsaXR5U3RhdGUge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlLFxuICAgIHByaXZhdGUgZmFjaWxpdHlDb21tYW5kc0NvbmZpZ1NlcnZpY2U6IEJhc2VGYWNpbGl0eUNvbW1hbmRzQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2FsU3RvcmFnZVNlcnZpY2U6IExvY2FsU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYWNpbGl0eU1lbnVTZXJ2aWNlOiBGYWNpbGl0eU1lbnVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmFjaWxpdHlTZXJ2aWNlUHJveHk6IEZhY2lsaXR5UnBjU2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgcmVtb3RlQ29tbWFuZFJwY1NlcnZpY2VQcm94eTogUnBjLlJlbW90ZUNvbW1hbmRScGNTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSB6b25lUnBjU2VydmljZVByb3h5OiBab25lUnBjU2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgelJwY1NlcnZpY2VQcm94eTogWlJwY1NlcnZpY2VQcm94eSxcbiAgICBwcml2YXRlIGdsb2JhbEVycm9yU2VydmljZTogR2xvYmFsRXJyb3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29tbWFuZE5vdGlmaWNhdGlvblNlcnZpY2U6IENvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGFwcENvbmZpZzogQXBwQ29uZmlnU2VydmljZVxuICApIHtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgc2VsZWN0ZWQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IEZhY2lsaXR5RHRvIHtcbiAgICByZXR1cm4gc3RhdGUuc2VsZWN0ZWQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGlzQ2hpbGQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdGF0ZS5zZWxlY3RlZC5tdWx0aVBhcmtQYXJlbnRJRCA+IDA7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGZlYXR1cmVQZXJtaXNzaW9ucyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogUGVybWlzc2lvblR5cGVbXSB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkPy5mZWF0dXJlUGVybWlzc2lvbnM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGFsbG93ZWRBY3Rpb25zKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBOdW1iZXJNYXA8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBzdGF0ZS5hbGxvd2VkQWN0aW9ucztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgaXNNdWx0aVBhcmsoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkPy5pc011bHRpUGFyaztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgY2xvdWRJZChzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogbnVtYmVyIHtcbiAgICByZXR1cm4gc3RhdGUuc2VsZWN0ZWQ/LmNsb3VkSWQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHJhd1pvbmVzKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBab25lRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS56b25lcztcbiAgfVxuXG4gIEBTZWxlY3RvcihbRmFjaWxpdHlTdGF0ZS5yYXdab25lc10pXG4gIHB1YmxpYyBzdGF0aWMgem9uZXMoem9uZXM6IFpvbmVEdG9bXSk6IFpvbmVEdG9bXSB7XG4gICAgcmV0dXJuIHpvbmVzPy5maWx0ZXIoeiA9PiB6LnJ1bGVzTW9kZSAhPT0gUnVsZXNNb2RlLkNBTENVTEFURV9CWV9TTUFSVF9DT1VOVEVSKTtcbiAgfVxuXG4gIEBTZWxlY3RvcihbRmFjaWxpdHlTdGF0ZS5yYXdab25lc10pXG4gIHB1YmxpYyBzdGF0aWMgc21hcnRab25lcyh6b25lczogWm9uZUR0b1tdKTogWm9uZUR0b1tdIHtcbiAgICByZXR1cm4gem9uZXM/LmZpbHRlcih6ID0+IHoucnVsZXNNb2RlID09PSBSdWxlc01vZGUuQ0FMQ1VMQVRFX0JZX1NNQVJUX0NPVU5URVIpO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyB0aW1lWm9uZShzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKSB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkLnNwVGltZVpvbmU7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHRpbWVEcmlmdChzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKSB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkLnRpbWVEcmlmdDtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgcGFya0Nvbm5lY3Rpb25TdGF0dXNNYXAoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IENvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5IHtcbiAgICByZXR1cm4gc3RhdGUuY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnk7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGd1aWQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCkge1xuICAgIHJldHVybiBzdGF0ZS5ndWlkO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBwYXJrSWQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCkge1xuICAgIHJldHVybiBzdGF0ZS5wYXJrSWQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIG11bHRpUGFya1BhcmVudElEKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpIHtcbiAgICByZXR1cm4gc3RhdGUubXVsdGlQYXJrUGFyZW50SUQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGZhY2lsaXR5RGljdGlvbmFyeShzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogRmFjaWxpdHlEaWN0aW9uYXJ5IHtcbiAgICByZXR1cm4gc3RhdGUuZGljdGlvbmFyeTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgc21hcnRwYXJrc0Jhc2Uoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IFNtYXJ0cGFya0Jhc2ljRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5zbWFydHBhcmtzQmFzZTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IENsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5IHtcbiAgICByZXR1cm4gc3RhdGUuY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnk7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnkoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IFN0cmluZ01hcDxTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8+IHtcbiAgICByZXR1cm4gc3RhdGUuc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgdGliYUtleXMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IFN0cmluZ01hcDxudW1iZXI+IHtcbiAgICByZXR1cm4gc3RhdGUudGliYUtleXM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHNlbGVjdGVkUGFya0RldmljZVJlbW90ZUNvbW1hbmRzKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBEZXZpY2VSZW1vdGVDb21tYW5kUmVmRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5kZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbc3RhdGUuZ3VpZF0gPyBzdGF0ZS5kZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbc3RhdGUuZ3VpZF1bc3RhdGUucGFya0lkXSA6IFtdO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBzZWxlY3RlZFBhcmtGYWNpbGl0eVJlbW90ZUNvbW1hbmRzKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBGYWNpbGl0eVJlbW90ZUNvbW1hbmRSZWZEdG9bXSB7XG4gICAgcmV0dXJuIHN0YXRlLmZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W3N0YXRlLmd1aWRdID8gc3RhdGUuZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbc3RhdGUuZ3VpZF1bc3RhdGUucGFya0lkXSA6IFtdO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyB6KHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBaRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS56O1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBtYWNyb0NvbW1hbmRzKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBNYWNyb0NvbW1hbmREdG9bXSB7XG4gICAgcmV0dXJuIHN0YXRlLm1hY3JvQ29tbWFuZHM7XG4gIH1cblxuICBAQWN0aW9uKENsZWFyRmFjaWxpdHlEaWN0aW9uYXJ5QWN0aW9uKVxuICBvbkNsZWFyRmFjaWxpdHlEaWN0aW9uYXJ5KGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIF86IENsZWFyRmFjaWxpdHlEaWN0aW9uYXJ5QWN0aW9uKSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZGljdGlvbmFyeToge31cbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oU2V0U21hcnRwYXJrQmFzaWNBbGxBY3Rpb24pXG4gIG9uU2V0U21hcnRwYXJrQmFzaWNBbGxBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBTZXRTbWFydHBhcmtCYXNpY0FsbEFjdGlvbikge1xuICAgIGN0eC5kaXNwYXRjaChuZXcgU2V0U21hcnRQYXJrQWN0aW9uKGFjdGlvbi5zbWFydHBhcmtXcmFwcGVyLCBmYWxzZSkpO1xuICAgIHJldHVybiB0aGlzLnBvcHVsYXRlU21hcnRwYXJrQmFzaWMoY3R4LCBhY3Rpb24uc21hcnRwYXJrV3JhcHBlcj8uZGF0YT8uc21hcnRQYXJrcyk7XG4gIH1cblxuICBAQWN0aW9uKFNldFNtYXJ0cGFya0Jhc2ljQWN0aW9uKVxuICBvblNldFNtYXJ0cGFya0Jhc2ljQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogU2V0U21hcnRwYXJrQmFzaWNBY3Rpb24pIHtcbiAgICB0aGlzLnBvcHVsYXRlU21hcnRwYXJrQmFzaWMoY3R4LCBhY3Rpb24uc21hcnRwYXJrV3JhcHBlcj8uZGF0YT8uc21hcnRQYXJrcyk7XG4gIH1cblxuICBAQWN0aW9uKFVwZGF0ZVNtYXJ0cGFya05hbWVBY3Rpb24pXG4gIG9uVXBkYXRlU21hcnRwYXJrTmFtZUFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IHNtYXJ0UGFya0lkLCBuYW1lIH06IFVwZGF0ZVNtYXJ0cGFya05hbWVBY3Rpb24pIHtcbiAgICBjb25zdCBzbWFydHBhcmtzQmFzZSA9IChjdHguZ2V0U3RhdGUoKS5zbWFydHBhcmtzQmFzZSB8fCBbXSkubWFwKHNtYXJ0cGFyayA9PlxuICAgICAgc21hcnRwYXJrLmlkID09PSBzbWFydFBhcmtJZFxuICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc21hcnRwYXJrKSksIHNtYXJ0cGFyaywgeyBuYW1lIH0pXG4gICAgICAgIDogc21hcnRwYXJrKTtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7IHNtYXJ0cGFya3NCYXNlIH0pO1xuICB9XG5cbiAgQEFjdGlvbihSZW1vdmVTbWFydHBhcmtCYXNpY0FjdGlvbilcbiAgb25SZW1vdmVTbWFydHBhcmtCYXNpY0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IGd1aWQgfTogUmVtb3ZlU21hcnRwYXJrQmFzaWNBY3Rpb24pIHtcbiAgICBjb25zdCBzdGF0ZSA9IGN0eC5nZXRTdGF0ZSgpO1xuICAgIGNvbnN0IHNtYXJ0cGFya3NCYXNlID0gKHN0YXRlLnNtYXJ0cGFya3NCYXNlIHx8IFtdKS5maWx0ZXIoc21hcnRwYXJrID0+IHNtYXJ0cGFyay5ndWlkICE9PSBndWlkKTtcbiAgICBjb25zdCBkaWN0aW9uYXJ5ID0geyAuLi5zdGF0ZS5kaWN0aW9uYXJ5IH07XG4gICAgZGVsZXRlIGRpY3Rpb25hcnlbZ3VpZF07XG4gICAgY29uc3QgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkgPSB7IC4uLnN0YXRlLmNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5IH07XG4gICAgZGVsZXRlIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5W2d1aWRdO1xuICAgIGN0eC5wYXRjaFN0YXRlKHsgc21hcnRwYXJrc0Jhc2UsIGRpY3Rpb25hcnksIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5IH0pO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkUGFya2luZ0xvdEFjdGlvbiwgeyBjYW5jZWxVbmNvbXBsZXRlZDogdHJ1ZSB9KVxuICBvbkxvYWRQYXJraW5nTG90QWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgcGFya0lkLCB0aWJhS2V5SW5kZXggfTogTG9hZFBhcmtpbmdMb3RBY3Rpb24pIHtcbiAgICBjb25zdCBndWlkID0gT2JqZWN0LmtleXMoY3R4LmdldFN0YXRlKCkudGliYUtleXMpW3RpYmFLZXlJbmRleF07XG4gICAgY29uc3QgZmFjaWxpdHlEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuZGljdGlvbmFyeTtcbiAgICBjb25zdCBzZWxlY3RlZCA9IGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXSA/IGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtwYXJrSWRdIDogbnVsbDtcblxuICAgIGlmICghc2VsZWN0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhbGxvd2VkQWN0aW9ucyA9IGNvbnZlcnRGZWF0dXJlUGVybWlzc2lvbnNUb0RpY3Rpb25hcnkoc2VsZWN0ZWQuZmVhdHVyZVBlcm1pc3Npb25zKTtcblxuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIHBhcmtJZCxcbiAgICAgIGd1aWQsXG4gICAgICBtdWx0aVBhcmtQYXJlbnRJRDogc2VsZWN0ZWQubXVsdGlQYXJrUGFyZW50SUQsXG4gICAgICBzZWxlY3RlZCxcbiAgICAgIHpvbmVzOiBzZWxlY3RlZC56b25lcyxcbiAgICAgIGFsbG93ZWRBY3Rpb25zXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTaWRlbmF2U3RhdGUuYXBwTW9kdWxlKSA9PT0gQXBwTW9kdWxlLkNjKSB7XG4gICAgICByZXR1cm4gY3R4LmRpc3BhdGNoKG5ldyBMb2FkRmFjaWxpdHlBY3Rpb24ocGFya0lkLCBndWlkLCBpc1RydXRoeShzZWxlY3RlZC5pc011bHRpUGFyayksIEFwcE1vZHVsZS5DYykpO1xuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oTG9hZFJlbW90ZUNvbW1hbmRzUmVmQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZFJlbW90ZUNvbW1hbmRzUmVmQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgcGFya0lkLCB0aWJhS2V5SW5kZXggfTogTG9hZFJlbW90ZUNvbW1hbmRzUmVmQWN0aW9uKSB7XG4gICAgY29uc3QgZ3VpZCA9IE9iamVjdC5rZXlzKGN0eC5nZXRTdGF0ZSgpLnRpYmFLZXlzKVt0aWJhS2V5SW5kZXhdO1xuXG4gICAgLy8gV2UgZmV0Y2ggZnJvbSB0aGUgc2VydmVyIG9ubHkgaWYgd2UgZGlkbid5IGZldGNoIGJlZm9yZSBmb3IgdGhhdCBndWlkXG4gICAgY29uc3QgcmVtb3RlQ29tbWFuZHNSZWZBbGwgPSBjdHguZ2V0U3RhdGUoKS5kZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnk7XG4gICAgaWYgKCFyZW1vdGVDb21tYW5kc1JlZkFsbFtndWlkXSB8fCAhcmVtb3RlQ29tbWFuZHNSZWZBbGxbZ3VpZF1bcGFya0lkXSkge1xuICAgICAgY29uc3QgcmVtb3RlQ29tbWFuZHNSZWYkID0gdGhpcy5yZW1vdGVDb21tYW5kUnBjU2VydmljZVByb3h5LmdldERldmljZVJlbW90ZUNvbW1hbmRzKGd1aWQsIHBhcmtJZCk7XG5cbiAgICAgIHJldHVybiByZW1vdGVDb21tYW5kc1JlZiQucGlwZSh0YXAocmVtb3RlQ29tbWFuZHNSZWYgPT4ge1xuICAgICAgICBjdHguZGlzcGF0Y2gobmV3IFNldERldmljZVJlbW90ZUNvbW1hbmRzTWFwQWN0aW9uKHJlbW90ZUNvbW1hbmRzUmVmLmRhdGEsIGd1aWQsIHBhcmtJZCkpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oTG9hZEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkRmFjaWxpdHlSZW1vdGVDb21tYW5kc1JlZkFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IHBhcmtJZCwgdGliYUtleUluZGV4IH06IExvYWRGYWNpbGl0eVJlbW90ZUNvbW1hbmRzUmVmQWN0aW9uKSB7XG4gICAgY29uc3QgZ3VpZCA9IE9iamVjdC5rZXlzKGN0eC5nZXRTdGF0ZSgpLnRpYmFLZXlzKVt0aWJhS2V5SW5kZXhdO1xuXG4gICAgLy8gV2UgZmV0Y2ggZnJvbSB0aGUgc2VydmVyIG9ubHkgaWYgd2UgZGlkbid5IGZldGNoIGJlZm9yZSBmb3IgdGhhdCBndWlkXG4gICAgY29uc3QgcmVtb3RlQ29tbWFuZHNSZWZBbGwgPSBjdHguZ2V0U3RhdGUoKS5mYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTtcbiAgICBpZiAoIXJlbW90ZUNvbW1hbmRzUmVmQWxsW2d1aWRdIHx8ICFyZW1vdGVDb21tYW5kc1JlZkFsbFtndWlkXVtwYXJrSWRdKSB7XG4gICAgICBjb25zdCByZW1vdGVDb21tYW5kc1JlZiQgPSB0aGlzLnJlbW90ZUNvbW1hbmRScGNTZXJ2aWNlUHJveHkuZ2V0RmFjaWxpdHlSZW1vdGVDb21tYW5kcyhndWlkLCBwYXJrSWQpO1xuXG4gICAgICBpZiAocmVtb3RlQ29tbWFuZHNSZWYkKSB7XG4gICAgICAgIHJldHVybiByZW1vdGVDb21tYW5kc1JlZiQucGlwZSh0YXAocmVtb3RlQ29tbWFuZHNSZWYgPT4ge1xuICAgICAgICAgIGN0eC5kaXNwYXRjaChuZXcgU2V0RmFjaWxpdHlSZW1vdGVDb21tYW5kc01hcEFjdGlvbihyZW1vdGVDb21tYW5kc1JlZi5kYXRhLCBndWlkLCBwYXJrSWQpKTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oTG9hZEZhY2lsaXR5QWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZEZhY2lsaXR5QWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgcGFya0lkLCBndWlkLCBpc1N1cGVyUGFyaywgYXBwTW9kdWxlIH06IExvYWRGYWNpbGl0eUFjdGlvbikge1xuICAgIGlmIChpc1N1cGVyUGFyaykge1xuICAgICAgY29uc3QgYWxsR3VpZEZhY2lsaXRpZXMkID0gdGhpcy5mYWNpbGl0eVNlcnZpY2VQcm94eS5nZXRGYWNpbGl0aWVzKGd1aWQsIHBhcmtJZCk7XG4gICAgICByZXR1cm4gYWxsR3VpZEZhY2lsaXRpZXMkLnBpcGUodGFwKGZhY2lsaXRpZXNNYXAgPT4ge1xuICAgICAgICBjb25zdCBmYWNpbGl0eSA9IGZhY2lsaXRpZXNNYXAuZGF0YVtndWlkXS5maW5kKGYgPT4gZi5pZCA9PT0gcGFya0lkKTtcbiAgICAgICAgdGhpcy51cGRhdGVGYWNpbGl0aWVzKGN0eCwgZ3VpZCwgcGFya0lkLCBhcHBNb2R1bGUsIGZhY2lsaXR5LCBmYWNpbGl0aWVzTWFwLmRhdGEpO1xuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmdWxsRmFjaWxpdHkkID0gdGhpcy5mYWNpbGl0eVNlcnZpY2VQcm94eS5nZXRGYWNpbGl0eShndWlkLCBwYXJrSWQpO1xuICAgICAgcmV0dXJuIGZ1bGxGYWNpbGl0eSQucGlwZSh0YXAoZmFjaWxpdHkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUZhY2lsaXRpZXMoY3R4LCBndWlkLCBwYXJrSWQsIGFwcE1vZHVsZSwgZmFjaWxpdHkuZGF0YSk7XG4gICAgICB9KSk7XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihVbmxvYWRQYXJraW5nTG90QWN0aW9uKVxuICBvblVubG9hZFBhcmtpbmdMb3RBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBVbmxvYWRQYXJraW5nTG90QWN0aW9uKSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZ3VpZDogJycsXG4gICAgICBwYXJrSWQ6IG51bGwsXG4gICAgICBzZWxlY3RlZDogbnVsbCxcbiAgICAgIHpvbmVzOiBudWxsLFxuICAgICAgYWxsb3dlZEFjdGlvbnM6IHt9LFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihTZXREZXZpY2VSZW1vdGVDb21tYW5kc01hcEFjdGlvbilcbiAgb25TZXREZXZpY2VSZW1vdGVDb21tYW5kc01hcEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IFNldERldmljZVJlbW90ZUNvbW1hbmRzTWFwQWN0aW9uKSB7XG4gICAgY29uc3QgZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5O1xuICAgIGlmICghZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W2FjdGlvbi5ndWlkXSkge1xuICAgICAgZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W2FjdGlvbi5ndWlkXSA9IHt9O1xuICAgIH1cbiAgICBkZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbYWN0aW9uLmd1aWRdW2FjdGlvbi5wYXJrSWRdID0gYWN0aW9uLnJlbW90ZUNvbW1hbmRzW2FjdGlvbi5ndWlkXTtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBkZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnksXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKFNldEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24pXG4gIG9uU2V0RmFjaWxpdHlSZW1vdGVDb21tYW5kc01hcEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IFNldEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24pIHtcbiAgICBjb25zdCBmYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5O1xuICAgIGlmICghZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbYWN0aW9uLmd1aWRdKSB7XG4gICAgICBmYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeVthY3Rpb24uZ3VpZF0gPSB7fTtcbiAgICB9XG4gICAgZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbYWN0aW9uLmd1aWRdW2FjdGlvbi5wYXJrSWRdID0gYWN0aW9uLnJlbW90ZUNvbW1hbmRzW2FjdGlvbi5ndWlkXTtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBmYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeSxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oWm9uZUNoYW5nZWRBY3Rpb24pXG4gIG9uWm9uZUNoYW5nZWRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyB6b25lLCBwYXJrSWQgfTogWm9uZUNoYW5nZWRBY3Rpb24pIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IGN0eC5nZXRTdGF0ZSgpLnNlbGVjdGVkO1xuICAgIC8vIFNQUkszLTE0OTg0OiBab25lQ2hhbmdlZEFjdGlvbiBpcyBhIFNpZ25hbFIgcHVzaCwgc28gaXQgYXJyaXZlcyByZWdhcmRsZXNzIG9mXG4gICAgLy8gd2hldGhlciBhIHBhcmsgaXMgc2VsZWN0ZWQgb3IgaXRzIHpvbmVzIGFyZSBsb2FkZWQgeWV0LlxuICAgIGlmICghc2VsZWN0ZWQ/LnpvbmVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHpvbmVJbmRleCA9IHNlbGVjdGVkLnpvbmVzLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT09IHpvbmUuaWQgJiYgaXRlbS5wYXJrSUQgPT09IHBhcmtJZCk7XG4gICAgem9uZS5vY2N1cGFuY3kgPSB6b25lLm1vbnRobGllc09jY3VwYW5jeSArIHpvbmUudHJhbnNpZW50c09jY3VwYW5jeTtcbiAgICB6b25lLnZhY2FuY3kgPSB6b25lLmNhcGFjaXR5IC0gem9uZS5vY2N1cGFuY3k7XG5cbiAgICBzd2l0Y2ggKHpvbmUucnVsZXNNb2RlKSB7XG4gICAgICBjYXNlIFJ1bGVzTW9kZS5DQUxDVUxBVEVfQllfU01BUlRfQ09VTlRFUjpcbiAgICAgICAgem9uZS5jYXBhY2l0eSA9IHpvbmUuY2FwYWNpdHk7XG4gICAgICAgIHpvbmUub2NjdXBhbmN5ID0gem9uZS5sb29wQ291bnQ7XG4gICAgICAgIHpvbmUudmFjYW5jeSA9IHpvbmUuY2FwYWNpdHkgLSB6b25lLm9jY3VwYW5jeTtcbiAgICAgICAgdGhpcy5oYW5kbGVTbWFydENvdW50ZXIoem9uZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJ1bGVzTW9kZS5DQUxDVUxBVEVfQllfTE9PUF9ERVRFQ1RPUjpcbiAgICAgICAgem9uZS5jYXBhY2l0eSA9IHpvbmUuY2FwYWNpdHk7XG4gICAgICAgIHpvbmUub2NjdXBhbmN5ID0gem9uZS5sb29wQ291bnQ7XG4gICAgICAgIHpvbmUudmFjYW5jeSA9IHpvbmUuY2FwYWNpdHkgLSB6b25lLm9jY3VwYW5jeTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHpvbmUuY2FwYWNpdHkgPSB6b25lLmNhcGFjaXR5O1xuICAgICAgICB6b25lLm9jY3VwYW5jeSA9IHpvbmUubW9udGhsaWVzT2NjdXBhbmN5ICsgem9uZS50cmFuc2llbnRzT2NjdXBhbmN5O1xuICAgICAgICB6b25lLnZhY2FuY3kgPSB6b25lLmNhcGFjaXR5IC0gem9uZS5vY2N1cGFuY3k7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHNlbGVjdGVkLnpvbmVzW3pvbmVJbmRleF0gPSB6b25lO1xuICAgIHNlbGVjdGVkLnpvbmVzID0gY2xvbmUoc2VsZWN0ZWQuem9uZXMpO1xuXG4gICAgY29uc3QgZmFjaWxpdHlEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuZGljdGlvbmFyeTtcbiAgICBjb25zdCBndWlkID0gY3R4LmdldFN0YXRlKCkuZ3VpZDtcbiAgICAvLyBTUFJLMy0xNDk4NCAoU2VudHJ5IEpBVkFTQ1JJUFQtQU5HVUxBUi0zNSk6IGRpY3Rpb25hcnkgZGVmYXVsdHMgdG8ge30gYW5kIGlzXG4gICAgLy8gYWx3YXlzIHRydXRoeSwgYnV0IGRpY3Rpb25hcnlbZ3VpZF0gaXMgdW5kZWZpbmVkIHVudGlsIHRoZSB0ZW5hbnQgaXMgaHlkcmF0ZWRcbiAgICAvLyBhbmQgdGhlIHBhcmsgbWF5IG5vdCBiZSB1bmRlciBpdC4gVGhlIHNlbGVjdGVkL3pvbmVzIHNsaWNlcyBhcmUgc3RpbGwgY29ycmVjdC5cbiAgICBjb25zdCBzdG9yZWRGYWNpbGl0eSA9IGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXT8uW3NlbGVjdGVkLmlkXTtcbiAgICBpZiAoc3RvcmVkRmFjaWxpdHkpIHtcbiAgICAgIHN0b3JlZEZhY2lsaXR5LnpvbmVzID0gc2VsZWN0ZWQuem9uZXM7XG4gICAgfVxuXG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZGljdGlvbmFyeTogZmFjaWxpdHlEaWN0aW9uYXJ5LFxuICAgICAgc2VsZWN0ZWQsXG4gICAgICB6b25lczogc2VsZWN0ZWQuem9uZXMsXG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVTbWFydENvdW50ZXIoem9uZTogWm9uZUR0bykge1xuICAgIHRyeSB7XG4gICAgICBpZiAoem9uZT8uc21hcnRDb3VudGVyVmVoaWNsZVR5cGVKc29uKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZEpzb24gPSBKU09OLnBhcnNlKHpvbmUuc21hcnRDb3VudGVyVmVoaWNsZVR5cGVKc29uKTtcbiAgICAgICAgY29uc3Qgc21hcnRDb3VudGVyVmVoaWNsZVR5cGUgPSBvYmplY3RLZXlzdG9Mb3dlckNhc2UocGFyc2VkSnNvbik7XG5cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHNtYXJ0Q291bnRlclZlaGljbGVUeXBlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyc2VkIEpTT04gc21hcnRDb3VudGVyVmVoaWNsZVR5cGUgaXMgbm90IGFuIGFycmF5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICB6b25lLnNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlVHlwZSA9IHNtYXJ0Q291bnRlclZlaGljbGVUeXBlLm1hcCgoc2M6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlVHlwZUR0byA9IG5ldyBTbWFydFpvbmVDb3VudGVyVmVoaWNsZVR5cGVEdG8oKTtcbiAgICAgICAgICBzbWFydFpvbmVDb3VudGVyVmVoaWNsZVR5cGVEdG8uY291bnRlciA9IHNjLmNvdW50ZXI7XG4gICAgICAgICAgc21hcnRab25lQ291bnRlclZlaGljbGVUeXBlRHRvLnpvbmVJZCA9IHpvbmUuaWQ7XG4gICAgICAgICAgc21hcnRab25lQ291bnRlclZlaGljbGVUeXBlRHRvLnZlaGljbGVUeXBlSWQgPSBzYy52ZWhpY2xldHlwZWlkO1xuICAgICAgICAgIHJldHVybiBzbWFydFpvbmVDb3VudGVyVmVoaWNsZVR5cGVEdG87XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoem9uZT8uc21hcnRDb3VudGVyVmVoaWNsZUNsYXNzSnNvbikge1xuICAgICAgICBjb25zdCBwYXJzZWRKc29uID0gSlNPTi5wYXJzZSh6b25lLnNtYXJ0Q291bnRlclZlaGljbGVDbGFzc0pzb24pO1xuICAgICAgICBjb25zdCBzbWFydENvdW50ZXJWZWhpY2xlQ2xhc3MgPSBvYmplY3RLZXlzdG9Mb3dlckNhc2UocGFyc2VkSnNvbik7XG5cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHNtYXJ0Q291bnRlclZlaGljbGVDbGFzcykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcnNlZCBKU09OIHNtYXJ0Q291bnRlclZlaGljbGVDbGFzcyBpcyBub3QgYW4gYXJyYXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHpvbmUuc21hcnRab25lQ291bnRlclZlaGljbGVDbGFzcyA9IHNtYXJ0Q291bnRlclZlaGljbGVDbGFzcy5tYXAoKHNjOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBzbWFydFpvbmVDb3VudGVyVmVoaWNsZUNsYXNzRHRvID0gbmV3IFNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlQ2xhc3NEdG8oKTtcbiAgICAgICAgICBzbWFydFpvbmVDb3VudGVyVmVoaWNsZUNsYXNzRHRvLmNvdW50ZXIgPSBzYy5jb3VudGVyO1xuICAgICAgICAgIHNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlQ2xhc3NEdG8uem9uZUlkID0gem9uZS5pZDtcbiAgICAgICAgICBzbWFydFpvbmVDb3VudGVyVmVoaWNsZUNsYXNzRHRvLnZlaGljbGVDbGFzc0lkID0gc2MudmVoaWNsZWNsYXNzaWQ7XG4gICAgICAgICAgcmV0dXJuIHNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlQ2xhc3NEdG87XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gcGFyc2Ugc21hcnRDb3VudGVySnNvbjonLCBlcnJvcik7XG4gICAgICB6b25lLnNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlQ2xhc3MgPSBbXTtcbiAgICAgIHpvbmUuc21hcnRab25lQ291bnRlclZlaGljbGVUeXBlID0gW107XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihTZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkQWN0aW9uKVxuICBvblNlcnZpY2VzUnVubmluZ1N0YXR1c0NoYW5nZWRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPixcbiAgICB7IHNlcnZpY2VzUnVubmluZ1N0YXR1cywgZ3VpZCB9OiBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkQWN0aW9uKSB7XG4gICAgY29uc3Qgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLnNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnk7XG4gICAgY29uc3QgZmFjaWxpdHlEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuZGljdGlvbmFyeTtcbiAgICBzZXJ2aWNlc1J1bm5pbmdTdGF0dXMgPSB0aGlzLnVwZGF0ZVNlcnZpY2VSdW5uaW5nU3RhdHVzRmxhZ3Moc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeVtndWlkXSwgc2VydmljZXNSdW5uaW5nU3RhdHVzKTtcbiAgICBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5W2d1aWRdID0gc2VydmljZXNSdW5uaW5nU3RhdHVzO1xuICAgIGN0eC5wYXRjaFN0YXRlKHsgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSB9KTtcblxuICAgIC8vIFVwZGF0aW5nIFBhcmtDb25uZWN0aW9uU3RhdHVzIGZvciBwYXJrc1xuICAgIC8vIFNQUkszLTE0ODM2IChTZW50cnkgSkFWQVNDUklQVC1BTkdVTEFSLTFSKTogdGhlIG9sZCBgaWYgKGZhY2lsaXR5RGljdGlvbmFyeSlgXG4gICAgLy8gZ3VhcmRlZCB0aGUgb3V0ZXIgb2JqZWN0LCB3aGljaCBkZWZhdWx0cyB0byB7fSBhbmQgYWx3YXlzIHBhc3Nlcywgd2hpbGVcbiAgICAvLyBPYmplY3QudmFsdWVzKGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXSkgdGhyZXcgZm9yIGFuIHVuaHlkcmF0ZWQgdGVuYW50LiBUaGVcbiAgICAvLyBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeSBzbGljZSBuZWVkcyBpdHMgb3duIHBlci1ndWlkIGJ1Y2tldCBmb3IgdGhlIHNhbWUgcmVhc29uLlxuICAgIGNvbnN0IHBhcmtzRm9yR3VpZCA9IGZhY2lsaXR5RGljdGlvbmFyeT8uW2d1aWRdO1xuICAgIGlmIChwYXJrc0Zvckd1aWQpIHtcbiAgICAgIGNvbnN0IGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5ID0gY2xvbmVEZWVwKGN0eC5nZXRTdGF0ZSgpLmNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5KTtcbiAgICAgIGlmICghY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnlbZ3VpZF0pIHtcbiAgICAgICAgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnlbZ3VpZF0gPSB7fTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZhY2lsaXRpZXM6IEZhY2lsaXR5RHRvW10gPSBPYmplY3QudmFsdWVzKHBhcmtzRm9yR3VpZCk7XG4gICAgICBmb3IgKGNvbnN0IGZhY2lsaXR5IG9mIGZhY2lsaXRpZXMpIHtcbiAgICAgICAgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnlbZ3VpZF1bZmFjaWxpdHkuaWRdID0gdGhpcy5nbG9iYWxFcnJvclNlcnZpY2UuZ2V0UGFya0Nvbm5lY3Rpb25TdGF0dXMoZ3VpZCwgZmFjaWxpdHksIHNlcnZpY2VzUnVubmluZ1N0YXR1cywgZmFjaWxpdHlEaWN0aW9uYXJ5KTtcbiAgICAgIH1cbiAgICAgIGN0eC5wYXRjaFN0YXRlKHsgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnkgfSk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVNZW51SXRlbXNQYXJrQ29ubmVjdGlvblN0YXR1cyhjdHgpO1xuICB9XG5cbiAgQEFjdGlvbihGYWNpbGl0eUNoYW5nZWRBY3Rpb24pXG4gIG9uRmFjaWxpdHlDaGFuZ2VkQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgZmFjaWxpdHksIGd1aWQgfTogRmFjaWxpdHlDaGFuZ2VkQWN0aW9uKSB7XG4gICAgY29uc3QgZmFjaWxpdHlEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuZGljdGlvbmFyeTtcbiAgICBjb25zdCBzZWxlY3RlZEZhY2lsaXR5ID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdID8gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2ZhY2lsaXR5LmlkXSA6IG51bGw7XG4gICAgaWYgKCFzZWxlY3RlZEZhY2lsaXR5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tcGxldGVkRmFjaWxpdHkgPSB0aGlzLmFzc2lnbkZhY2lsaXR5KHNlbGVjdGVkRmFjaWxpdHksIGZhY2lsaXR5KTtcbiAgICBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZmFjaWxpdHkuaWRdID0gY29tcGxldGVkRmFjaWxpdHk7XG5cbiAgICBjdHgucGF0Y2hTdGF0ZSh7IGRpY3Rpb25hcnk6IGNsb25lRGVlcChmYWNpbGl0eURpY3Rpb25hcnkpIH0pO1xuXG4gICAgaWYgKHRoaXMuaXNQYXJrQWN0aXZlKGN0eCwgZ3VpZCwgZmFjaWxpdHkuaWQpKSB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIHNlbGVjdGVkOiBjb21wbGV0ZWRGYWNpbGl0eSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFVwZGF0aW5nIFBhcmtDb25uZWN0aW9uU3RhdHVzIGZvciBwYXJrc1xuICAgIGNvbnN0IGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5ID0gY2xvbmVEZWVwKGN0eC5nZXRTdGF0ZSgpLmNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5KTtcbiAgICBpZiAoIWNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5W2d1aWRdKSB7XG4gICAgICBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeVtndWlkXSA9IHt9O1xuICAgIH1cbiAgICBjb25zdCBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeTtcbiAgICBjb25zdCBmYWNpbGl0aWVzOiBGYWNpbGl0eUR0b1tdID0gT2JqZWN0LnZhbHVlcyhmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF0pO1xuICAgIGZvciAoY29uc3QgZmFjaWxpdHkgb2YgZmFjaWxpdGllcykge1xuICAgICAgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnlbZ3VpZF1bZmFjaWxpdHkuaWRdID0gdGhpcy5nbG9iYWxFcnJvclNlcnZpY2UuZ2V0UGFya0Nvbm5lY3Rpb25TdGF0dXMoZ3VpZCwgZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2ZhY2lsaXR5LmlkXSwgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeVtndWlkXSwgZmFjaWxpdHlEaWN0aW9uYXJ5KTtcbiAgICB9XG4gICAgY3R4LnBhdGNoU3RhdGUoeyBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeSB9KTtcblxuICAgIHRoaXMudXBkYXRlTWVudUl0ZW1zUGFya0Nvbm5lY3Rpb25TdGF0dXMoY3R4KTtcbiAgfVxuXG4gIEBBY3Rpb24oU2V0QmFzaWNNZW51QWN0aW9uKVxuICBvblNldEJhc2ljTWVudUFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IHNtYXJ0cGFya01hcCwgYXBwTW9kdWxlIH06IFNldEJhc2ljTWVudUFjdGlvbikge1xuICAgIGN0eC5kaXNwYXRjaChuZXcgTWVudUxvYWRBY3Rpb24odGhpcy50b0Jhc2ljTWVudUl0ZW1zKGN0eCwgc21hcnRwYXJrTWFwLCBjdHguZ2V0U3RhdGUoKS5kaWN0aW9uYXJ5LCBhcHBNb2R1bGUpLCBhcHBNb2R1bGUpKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZFJlcG9ydHNab25lc0FjdGlvbiwgeyBjYW5jZWxVbmNvbXBsZXRlZDogdHJ1ZSB9KVxuICBvbkxvYWRSZXBvcnRzWm9uZXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBMb2FkUmVwb3J0c1pvbmVzQWN0aW9uKSB7XG4gICAgY29uc3QgZ2V0Wm9uZXMkID0gdGhpcy56b25lUnBjU2VydmljZVByb3h5LmdldFpvbmVzQnlTZWFyY2hQYXJhbXMoYWN0aW9uLmd1aWQsIGFjdGlvbi5wYXJrSWQsIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm1heFJlc3VsdHMsXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5zZWFyY2hUZXJtLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5LmNvbHVtbixcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkub3JkZXJEaXJlY3Rpb24pO1xuXG4gICAgcmV0dXJuIGdldFpvbmVzJC5waXBlKHRhcCh6b25lcyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIHpvbmVzOiB6b25lcy5kYXRhLFxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkQWNjZXNzUHJvZmlsZVpvbmVzQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZEFjY2Vzc1Byb2ZpbGVaWm9uZXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBMb2FkQWNjZXNzUHJvZmlsZVpvbmVzQWN0aW9uKSB7XG4gICAgY29uc3QgZ2V0Wm9uZXMkID0gdGhpcy56b25lUnBjU2VydmljZVByb3h5LmdldFpvbmVzQnlTZWFyY2hQYXJhbXMoYWN0aW9uLmd1aWQsIGFjdGlvbi5wYXJrSWQsIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm1heFJlc3VsdHMsXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5zZWFyY2hUZXJtLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5LmNvbHVtbixcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkub3JkZXJEaXJlY3Rpb24pO1xuXG4gICAgcmV0dXJuIGdldFpvbmVzJC5waXBlKHRhcCh6b25lcyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIHpvbmVzOiB6b25lcy5kYXRhLFxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkQ2NNYWluWm9uZXNBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkQ2NNYWluWm9uZXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBMb2FkQ2NNYWluWm9uZXNBY3Rpb24pIHtcbiAgICBjb25zdCBnZXRab25lcyQgPSB0aGlzLnpvbmVScGNTZXJ2aWNlUHJveHkuZ2V0Wm9uZXNCeVNlYXJjaFBhcmFtcyhhY3Rpb24uZ3VpZCwgYWN0aW9uLnBhcmtJZCwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ubWF4UmVzdWx0cyxcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/LnNlYXJjaFRlcm0sIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkuY29sdW1uLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5vcmRlckRpcmVjdGlvbik7XG5cbiAgICByZXR1cm4gZ2V0Wm9uZXMkLnBpcGUodGFwKHpvbmVzID0+IHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgem9uZXM6IHpvbmVzLmRhdGEsXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRac0FjdGlvbiwgeyBjYW5jZWxVbmNvbXBsZXRlZDogdHJ1ZSB9KVxuICBvbkxvYWRac0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IExvYWRac0FjdGlvbikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIHo6IG51bGwsXG4gICAgfSk7XG5cbiAgICBjb25zdCBhcHBNb2R1bGU6IEFwcE1vZHVsZSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2lkZW5hdlN0YXRlLmFwcE1vZHVsZSk7XG4gICAgbGV0IGdldFpzJDogT2JzZXJ2YWJsZTxScGMuWkR0b0lFbnVtZXJhYmxlSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICBjYXNlIGFwcE1vZHVsZSA9PT0gQXBwTW9kdWxlLkNjOlxuICAgICAgICBnZXRacyQgPSB0aGlzLnpScGNTZXJ2aWNlUHJveHkuZ2V0Q2NacyhhY3Rpb24uZ3VpZCwgYWN0aW9uLnBhcmtJZCwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ubWF4UmVzdWx0cyxcbiAgICAgICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5zZWFyY2hUZXJtLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5LmNvbHVtbixcbiAgICAgICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5Lm9yZGVyRGlyZWN0aW9uKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIGFwcE1vZHVsZSA9PT0gQXBwTW9kdWxlLlJlcG9ydHM6XG4gICAgICAgIGdldFpzJCA9IHRoaXMuelJwY1NlcnZpY2VQcm94eS5nZXRSZXBvcnRzWnMoYWN0aW9uLmd1aWQsIGFjdGlvbi5wYXJrSWQsIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm1heFJlc3VsdHMsXG4gICAgICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8uc2VhcmNoVGVybSwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5jb2x1bW4sXG4gICAgICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5vcmRlckRpcmVjdGlvbik7XG4gICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDogXG4gICAgICBjb25zb2xlLmxvZyhcInVuc3VwcG9ydGVkIGFwcG1vZHVsZSBmb3IgenNcIik7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0WnMkLnBpcGUodGFwKHogPT4ge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICB6OiB6LmRhdGEsXG4gICAgICB9KTtcbiAgICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhclpvbmVzQWN0aW9uKVxuICBvbkNsZWFyWm9uZXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIHpvbmVzOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhclpzQWN0aW9uKVxuICBvbkNsZWFyWnNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIHo6IG51bGwsXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKFNldFNlbGVjdGVkUGFya0FjdGlvbilcbiAgb25TZXRTZWxlY3RlZFBhcmtBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBndWlkLCBmYWNpbGl0eSB9OiBTZXRTZWxlY3RlZFBhcmtBY3Rpb24pIHtcbiAgICBjb25zdCBhbGxvd2VkQWN0aW9ucyA9IGNvbnZlcnRGZWF0dXJlUGVybWlzc2lvbnNUb0RpY3Rpb25hcnkoZmFjaWxpdHk/LmZlYXR1cmVQZXJtaXNzaW9ucyk7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZ3VpZCxcbiAgICAgIHBhcmtJZDogZmFjaWxpdHk/LmlkLFxuICAgICAgbXVsdGlQYXJrUGFyZW50SUQ6IGZhY2lsaXR5Py5tdWx0aVBhcmtQYXJlbnRJRCxcbiAgICAgIHNlbGVjdGVkOiBmYWNpbGl0eSxcbiAgICAgIHpvbmVzOiBmYWNpbGl0eT8uem9uZXMsXG4gICAgICBhbGxvd2VkQWN0aW9uc1xuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhclNlbGVjdGVkRmFjaWxpdHlBY3Rpb24pXG4gIG9uQ2xlYXJTZWxlY3RlZEZhY2lsaXR5QWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgfTogQ2xlYXJTZWxlY3RlZEZhY2lsaXR5QWN0aW9uKSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZ3VpZDogJycsXG4gICAgICBwYXJrSWQ6IG51bGwsXG4gICAgICBtdWx0aVBhcmtQYXJlbnRJRDogbnVsbCxcbiAgICAgIHNlbGVjdGVkOiBudWxsLFxuICAgICAgem9uZXM6IG51bGwsXG4gICAgICBhbGxvd2VkQWN0aW9uczoge31cbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJJbmFjdGl2ZVNlbGVjdGVkUGFya0FjdGlvbilcbiAgb25DbGVhckluYWN0aXZlU2VsZWN0ZWRQYXJrQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogQ2xlYXJJbmFjdGl2ZVNlbGVjdGVkUGFya0FjdGlvbikge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gY3R4LmdldFN0YXRlKCkuc2VsZWN0ZWQ7XG5cbiAgICAvLyBJZiB0aGUgc2VsZWN0ZWQgZmFjaWxpdHkgaXMgSW5hY3RpdmUgYW5kIG5vdCBhIFN1cGVycGFyaywgd2UgZGVzZWxlY3RcbiAgICAvLyBUaGlzIG1lYW4gd2Ugd29uJ3QgY2FycnkgYW4gSW5hY3RpdmUgcGFyayB0byB0aGUgbmV4dCBtb2R1bGUgYXMgc2VsZWN0ZWRcbiAgICBpZiAoIXNlbGVjdGVkPy5hY3RpdmUgJiYgIXNlbGVjdGVkPy5pc011bHRpUGFyaykge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBndWlkOiAnJyxcbiAgICAgICAgcGFya0lkOiBudWxsLFxuICAgICAgICBtdWx0aVBhcmtQYXJlbnRJRDogbnVsbCxcbiAgICAgICAgc2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgIHpvbmVzOiBudWxsLFxuICAgICAgICBhbGxvd2VkQWN0aW9uczoge30sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBAQWN0aW9uKEZhY2lsaXR5UmVtb3RlQ29tbWFuZEV4ZWN1dGVkQWN0aW9uKVxuICBvbkZhY2lsaXR5UmVtb3RlQ29tbWFuZEV4ZWN1dGVkQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQgfTogRmFjaWxpdHlSZW1vdGVDb21tYW5kRXhlY3V0ZWRBY3Rpb24pIHtcbiAgICAvLyBUaGUgY29tbWFuZC1leGVjdXRlZCBwdXNoIGNhbiBuYW1lIGEgdGVuYW50L3BhcmsgdGhpcyBjbGllbnQgaGFzIG5vdCBsb2FkZWQuXG4gICAgY29uc3QgZmFjaWxpdHkgPSBjdHguZ2V0U3RhdGUoKS5kaWN0aW9uYXJ5W2ZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50Lmd1aWRdPy5bZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQucGFya0lkXTtcbiAgICBpZiAoIWZhY2lsaXR5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb3BlcmF0aW9uVHlwZUtleSA9IEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNMb2NhbGl6YXRpb25LZXlbRmFjaWxpdHlSZW1vdGVDb21tYW5kVHlwZXNbZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQudHlwZV1dO1xuICAgIGNvbnN0IGNvbmZpZzogQ29tbWFuZE5vdGlmaWNhdGlvbkNvbmZpZyA9IHtcbiAgICAgIG1lc3NhZ2VzOiBbeyB2YWx1ZTogZmFjaWxpdHkubmFtZSwgY2xhc3M6IE5vdGlmaWNhdGlvbkNsYXNzLmJvZHkgfV0sXG4gICAgICBjb21tYW5kOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChvcGVyYXRpb25UeXBlS2V5KVxuICAgIH07XG5cbiAgICBpZiAoZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQudHlwZSA9PT0gRmFjaWxpdHlSZW1vdGVDb21tYW5kVHlwZXMuU2V0QWN0aXZlUmF0ZSkge1xuICAgICAgdGhpcy5wcm9jZXNzRHluYW1pY1ByaWNpbmdTZXRBY3RpdmVSYXRlKGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LCBjb25maWcpO1xuICAgIH1cblxuICAgIG9mKGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50KS5waXBlKHN3aXRjaE1hcChmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudCA9PiB7XG4gICAgICByZXR1cm4gZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQuc3VjY2VzcyA/IG9mKGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LnN1Y2Nlc3MpIDogdGhyb3dFcnJvcignRmFpbGVkIGV4ZWN1dGluZyBjb21tYW5kJyk7XG4gICAgfSksIHRoaXMuY29tbWFuZE5vdGlmaWNhdGlvblNlcnZpY2UuZGlzcGxheShjb25maWcpKS5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZE1hY3JvQ29tbWFuZHNBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkTWFjcm9Db21tYW5kc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IHBhcmtJZCwgZ3VpZCB9OiBMb2FkTWFjcm9Db21tYW5kc0FjdGlvbikge1xuICAgIGNvbnN0IG1hY3JvQ29tbWFuZHMkID0gdGhpcy5yZW1vdGVDb21tYW5kUnBjU2VydmljZVByb3h5LmdldE1hY3JvQ29tbWFuZHMoZ3VpZCwgcGFya0lkKTtcblxuICAgIHJldHVybiBtYWNyb0NvbW1hbmRzJC5waXBlKHRhcChtYWNyb0NvbW1hbmRzID0+IHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgbWFjcm9Db21tYW5kczogbWFjcm9Db21tYW5kcy5kYXRhXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKENsZWFyTWFjcm9Db21tYW5kc0FjdGlvbilcbiAgb25DbGVhck1hY3JvQ29tbWFuZHNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIG1hY3JvQ29tbWFuZHM6IFtdLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGYWNpbGl0aWVzKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGd1aWQ6IHN0cmluZywgcGFya0lkOiBudW1iZXIsIGFwcE1vZHVsZTogQXBwTW9kdWxlLFxuICAgIGZhY2lsaXR5OiBGYWNpbGl0eUR0bywgZmFjaWxpdGllc01hcD86IFN0cmluZ01hcDxGYWNpbGl0eUR0b1tdPikge1xuICAgIGNvbnN0IGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnk7XG4gICAgY29uc3QgZmFjaWxpdHlEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuZGljdGlvbmFyeTtcbiAgICBjb25zdCBub3dNb21lbnQgPSBtb21lbnQoKTtcblxuICAgIGlmIChmYWNpbGl0aWVzTWFwKSB7XG4gICAgICAvLyBTYW1lIGNsYXNzIGFzIHRoZSBTUFJLMy0xNTEwOCBndWFyZCBpbiB0aGUgZWxzZS1icmFuY2ggYmVsb3c6IG5laXRoZXIgdGhlXG4gICAgICAvLyBpbmNvbWluZyBtYXAgbm9yIHRoZSBzdG9yZWQgZGljdGlvbmFyeSBpcyBndWFyYW50ZWVkIHRvIGhvbGQgdGhpcyBndWlkLCBhbmQgYVxuICAgICAgLy8gc3VwZXItcGFyayBtYXAgY2FuIG5hbWUgYSBjaGlsZCBwYXJrIHRoZSBkaWN0aW9uYXJ5IGhhcyBub3QgbG9hZGVkLlxuICAgICAgY29uc3Qgc3RvcmVkUGFya3MgPSBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF07XG4gICAgICBmYWNpbGl0aWVzTWFwW2d1aWRdPy5mb3JFYWNoKGYgPT4ge1xuICAgICAgICBjb25zdCBzdG9yZWRGYWNpbGl0eSA9IHN0b3JlZFBhcmtzPy5bZi5pZF07XG4gICAgICAgIGlmICghc3RvcmVkRmFjaWxpdHkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZi5jbG91ZElkID0gc3RvcmVkRmFjaWxpdHkuY2xvdWRJZDtcbiAgICAgICAgZi5mZWF0dXJlUGVybWlzc2lvbnMgPSBzdG9yZWRGYWNpbGl0eS5mZWF0dXJlUGVybWlzc2lvbnM7XG4gICAgICAgIGYucGVybWlzc2lvbnMgPSBzdG9yZWRGYWNpbGl0eS5wZXJtaXNzaW9ucztcbiAgICAgICAgc3RvcmVkUGFya3NbZi5pZF0gPSB0aGlzLnVwZGF0ZUZhY2lsaXR5Q29ubmVjdGl2aXR5RmxhZ3Moc3RvcmVkRmFjaWxpdHksIGYpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNQUkszLTE1MTA4OiBnZXRGYWNpbGl0eSBjYW4gcmVzb2x2ZSB3aXRoIGFuIGVtcHR5IHBheWxvYWQsIGFuZCB0aGUgZGljdGlvbmFyeSBtYXkgaG9sZFxuICAgICAgLy8gbm8gZW50cnkgZm9yIHRoaXMgZ3VpZC9mYWNpbGl0eSB5ZXQuIEVpdGhlciB3YXkgdGhlcmUgaXMgbm90aGluZyB0byBtZXJnZSwgYW5kIHRoZSB0aHJlZVxuICAgICAgLy8gcmVhZHMgYmVsb3cgdXNlZCB0byB0aHJvdyAoU2VudHJ5IEpBVkFTQ1JJUFQtQU5HVUxBUi0zRikg4oCUIHRoZSBgaWYgKGZhY2lsaXR5KWAgZ3VhcmRcbiAgICAgIC8vIGZ1cnRoZXIgZG93biB3YXMgYWRkZWQgZm9yIHRoZSBzYW1lIGNsYXNzIG9mIGNyYXNoIGJ1dCBzaXRzIGFmdGVyIHRoZSBkZXJlZmVyZW5jZS5cbiAgICAgIGNvbnN0IHN0b3JlZEZhY2lsaXR5ID0gZmFjaWxpdHkgPyBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF0/LltmYWNpbGl0eS5pZF0gOiBudWxsO1xuICAgICAgaWYgKCFzdG9yZWRGYWNpbGl0eSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZhY2lsaXR5LmNsb3VkSWQgPSBzdG9yZWRGYWNpbGl0eS5jbG91ZElkO1xuICAgICAgZmFjaWxpdHkuZmVhdHVyZVBlcm1pc3Npb25zID0gc3RvcmVkRmFjaWxpdHkuZmVhdHVyZVBlcm1pc3Npb25zO1xuICAgICAgZmFjaWxpdHkucGVybWlzc2lvbnMgPSBzdG9yZWRGYWNpbGl0eS5wZXJtaXNzaW9ucztcbiAgICAgIC8vIFRoZSBndWFyZCBhYm92ZSB2YWxpZGF0ZWQgW2ZhY2lsaXR5LmlkXTsgcGFya0lkIGNhbiBkaWZmZXIgZm9yIGEgc3VwZXItcGFya1xuICAgICAgLy8gY2hpbGQsIGluIHdoaWNoIGNhc2UgW3BhcmtJZF0gaG9sZHMgbm90aGluZyB0byBtZXJnZSBmcm9tLlxuICAgICAgZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW3BhcmtJZF0gPSB0aGlzLnVwZGF0ZUZhY2lsaXR5Q29ubmVjdGl2aXR5RmxhZ3MoZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW3BhcmtJZF0gPz8gc3RvcmVkRmFjaWxpdHksIGZhY2lsaXR5KTtcbiAgICB9XG5cbiAgICAvLyBHdWFyZDogYSBzdXBlci1wYXJrIGZhY2lsaXRpZXMgbWFwIG1heSBub3QgY29udGFpbiB0aGUgcmVxdWVzdGVkIHBhcmtJZFxuICAgIC8vIChvciB0aGUgcmVzcG9uc2UgbWF5IGJlIGVtcHR5KS4gU2tpcCB0aGUgdGltZS1kaWZmIGNhbGMgcmF0aGVyIHRoYW5cbiAgICAvLyBkZXJlZmVyZW5jaW5nIGFuIHVuZGVmaW5lZCBmYWNpbGl0eSAoU1BSSzMgLyBKQVZBU0NSSVBULUFOR1VMQVItMlcgY3Jhc2gpLlxuICAgIGlmIChmYWNpbGl0eSkge1xuICAgICAgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnlbZ3VpZF0gPSB0aGlzLmdldENsaWVudFNlcnZlclRpbWVEaWZmKGZhY2lsaXR5LCBub3dNb21lbnQpO1xuICAgICAgdGhpcy5wYXRjaERpZmZEaWN0aW5hcnlUb1N0b3JlKGN0eCwgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkpO1xuICAgIH1cbiAgICB0aGlzLnBhdGNoRmFjaWxpdGllc1RvU3RvcmUoY3R4LCBmYWNpbGl0eURpY3Rpb25hcnksIGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXT8uW3BhcmtJZF0sIGFwcE1vZHVsZSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZhY2lsaXR5Q29ubmVjdGl2aXR5RmxhZ3Moc3RvcmVkRmFjaWxpdHk6IEZhY2lsaXR5RHRvLCBpbmNvbWluZ0ZhY2lsaXR5OiBGYWNpbGl0eUR0bykge1xuICAgIGNvbnN0IGNsb3VkRGF0ZVRpbWVVdGMgPSB0aGlzLmdldENsb3VkRGF0ZVRpbWVVdGMoKTtcbiAgICBpbmNvbWluZ0ZhY2lsaXR5LmxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IGluY29taW5nRmFjaWxpdHkuaXNMUFJFbmFibGVkICYmICFpbmNvbWluZ0ZhY2lsaXR5LmlzTFBSQ29ubmVjdGVkID8gc3RvcmVkRmFjaWxpdHkubHByRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGMgOiBudWxsO1xuICAgIGluY29taW5nRmFjaWxpdHkuY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wID0gaW5jb21pbmdGYWNpbGl0eS5pc0NyZWRpdFNlcnZlckVuYWJsZWQgJiYgIWluY29taW5nRmFjaWxpdHkuaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWQgPyBzdG9yZWRGYWNpbGl0eS5jcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YyA6IG51bGw7XG4gICAgaW5jb21pbmdGYWNpbGl0eS5tYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9ICFpbmNvbWluZ0ZhY2lsaXR5LmlzTWFpbkNvbnRyb2xsZXJDb25uZWN0ZWQgPyBzdG9yZWRGYWNpbGl0eS5tYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/PyBjbG91ZERhdGVUaW1lVXRjIDogbnVsbDtcbiAgICByZXR1cm4gaW5jb21pbmdGYWNpbGl0eTtcbiAgfVxuXG4gIHByaXZhdGUgcGF0Y2hGYWNpbGl0aWVzVG9TdG9yZShjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBkaWN0aW9uYXJ5OiBGYWNpbGl0eURpY3Rpb25hcnksIGZhY2lsaXR5OiBGYWNpbGl0eUR0bywgYXBwTW9kdWxlOiBBcHBNb2R1bGUpIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBkaWN0aW9uYXJ5LFxuICAgIH0pO1xuXG4gICAgaWYgKGFwcE1vZHVsZSA9PT0gQXBwTW9kdWxlLkNjICYmIGZhY2lsaXR5KSB7XG4gICAgICBjb25zdCBhbGxvd2VkQWN0aW9ucyA9IGNvbnZlcnRGZWF0dXJlUGVybWlzc2lvbnNUb0RpY3Rpb25hcnkoZmFjaWxpdHkuZmVhdHVyZVBlcm1pc3Npb25zKTtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgc2VsZWN0ZWQ6IGZhY2lsaXR5LFxuICAgICAgICB6b25lczogZmFjaWxpdHkuem9uZXMsXG4gICAgICAgIG11bHRpUGFya1BhcmVudElEOiBmYWNpbGl0eS5tdWx0aVBhcmtQYXJlbnRJRCxcbiAgICAgICAgYWxsb3dlZEFjdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGF0Y2hEaWZmRGljdGluYXJ5VG9TdG9yZShjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeTogQ2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkpIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2xpZW50U2VydmVyVGltZURpZmYoZmFjaWxpdHk6IEZhY2lsaXR5RHRvLCBub3dNb21lbnQ6IG1vbWVudC5Nb21lbnQpOiBudW1iZXIge1xuICAgIHJldHVybiBub3dNb21lbnQudHooZmFjaWxpdHkuc3BUaW1lWm9uZSkuZGlmZih0aGlzLnN5bmNTZXJ2ZXJEYXRlR2xvYmFsV29ybGRUaW1lWm9uZShmYWNpbGl0eSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzeW5jU2VydmVyRGF0ZUdsb2JhbFdvcmxkVGltZVpvbmUoZmFjaWxpdHk6IEZhY2lsaXR5RHRvKSB7XG4gICAgLy8gZml4IGZvciBzZXJ2ZXJzIHRoYXQgbm90IHN5bmMgdG8gZ2xvYmFsIHdvcmxkIGNsb2NrXG4gICAgbGV0IHNlcnZlckRhdGVUaW1lOiBzdHJpbmcgPSBmYWNpbGl0eS5zZXJ2ZXJEYXRlVGltZVsnX2knXTtcbiAgICBpZiAoIXNlcnZlckRhdGVUaW1lLmVuZHNXaXRoKCcrMDA6MDAnKSkge1xuICAgICAgc2VydmVyRGF0ZVRpbWUgPSBzZXJ2ZXJEYXRlVGltZS5zbGljZSgwLCBzZXJ2ZXJEYXRlVGltZS5pbmRleE9mKCcuJykpO1xuICAgIH1cbiAgICByZXR1cm4gbW9tZW50LnR6KHNlcnZlckRhdGVUaW1lLCBmYWNpbGl0eS5zcFRpbWVab25lKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VydmljZVJ1bm5pbmdTdGF0dXNGbGFncyhjdXJyZW50U2VydmljZXNSdW5uaW5nU3RhdHVzOiBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8sIG5ld1NlcnZpY2VzUnVubmluZ1N0YXR1czogU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvKTogU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvIHtcbiAgICBjb25zdCBjbG91ZERhdGVUaW1lVXRjID0gdGhpcy5nZXRDbG91ZERhdGVUaW1lVXRjKCk7XG4gICAgLy8gVGhlIGNhbGxlciBwYXNzZXMgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeVtndWlkXSwgd2hpY2ggaXMgYWJzZW50IG9uIHRoZVxuICAgIC8vIGZpcnN0IHN0YXR1cyBwdXNoIGZvciBhIHRlbmFudCAtLSBmYWxsIGJhY2sgdG8gXCJkaXNjb25uZWN0ZWQgYXMgb2Ygbm93XCIuXG4gICAgbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzLnNtYXJ0UGFya0Rpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IG5ld1NlcnZpY2VzUnVubmluZ1N0YXR1cy5pc1NtYXJ0UGFya0Nvbm5lY3RlZCA/IG51bGwgOiBjdXJyZW50U2VydmljZXNSdW5uaW5nU3RhdHVzPy5zbWFydFBhcmtEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YztcbiAgICBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc21hcnRQYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IG5ld1NlcnZpY2VzUnVubmluZ1N0YXR1cy5pc1NtYXJ0UGFya0NvcmVDb25uZWN0ZWQgPyBudWxsIDogY3VycmVudFNlcnZpY2VzUnVubmluZ1N0YXR1cz8uc21hcnRQYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/PyBjbG91ZERhdGVUaW1lVXRjO1xuICAgIG5ld1NlcnZpY2VzUnVubmluZ1N0YXR1cy5zcGFya0Nsb3VkRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzLmlzU3BhcmtDbG91ZENvbm5lY3RlZCA/IG51bGwgOiBjdXJyZW50U2VydmljZXNSdW5uaW5nU3RhdHVzPy5zcGFya0Nsb3VkRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGM7XG4gICAgbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzLnNwYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IG5ld1NlcnZpY2VzUnVubmluZ1N0YXR1cy5pc1NwYXJrQ29yZUNvbm5lY3RlZCA/IG51bGwgOiBjdXJyZW50U2VydmljZXNSdW5uaW5nU3RhdHVzPy5zcGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YztcbiAgICByZXR1cm4gbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3NpZ25GYWNpbGl0eShzdG9yZWRGYWNpbGl0eTogRmFjaWxpdHlEdG8sIGluY29taW5nRmFjaWxpdHk6IEZhY2lsaXR5RHRvKTogRmFjaWxpdHlEdG8ge1xuICAgIGNvbnN0IGNsb3VkRGF0ZVRpbWVVdGMgPSB0aGlzLmdldENsb3VkRGF0ZVRpbWVVdGMoKTtcbiAgICBsZXQgY3VycmVudEZhY2lsaXR5ID0gbmV3IEZhY2lsaXR5RHRvKHN0b3JlZEZhY2lsaXR5KTtcbiAgICBjdXJyZW50RmFjaWxpdHkubmFtZSA9IGluY29taW5nRmFjaWxpdHkubmFtZTtcbiAgICBjdXJyZW50RmFjaWxpdHkuaXNMUFJFbmFibGVkID0gaW5jb21pbmdGYWNpbGl0eS5pc0xQUkVuYWJsZWQ7XG4gICAgY3VycmVudEZhY2lsaXR5LmlzTFBSQ29ubmVjdGVkID0gaW5jb21pbmdGYWNpbGl0eS5pc0xQUkNvbm5lY3RlZDtcbiAgICBjdXJyZW50RmFjaWxpdHkuaXNDcmVkaXRTZXJ2ZXJFbmFibGVkID0gaW5jb21pbmdGYWNpbGl0eS5pc0NyZWRpdFNlcnZlckVuYWJsZWQ7XG4gICAgY3VycmVudEZhY2lsaXR5LmlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkID0gaW5jb21pbmdGYWNpbGl0eS5pc0NyZWRpdFNlcnZlckNvbm5lY3RlZDtcbiAgICBjdXJyZW50RmFjaWxpdHkuaXNNYWluQ29udHJvbGxlckNvbm5lY3RlZCA9IGluY29taW5nRmFjaWxpdHkuaXNNYWluQ29udHJvbGxlckNvbm5lY3RlZDtcbiAgICBjdXJyZW50RmFjaWxpdHkuaXNNdWx0aVBhcmsgPSBpbmNvbWluZ0ZhY2lsaXR5LmlzTXVsdGlQYXJrO1xuICAgIGN1cnJlbnRGYWNpbGl0eS50aW1lRHJpZnQgPSBpbmNvbWluZ0ZhY2lsaXR5LnRpbWVEcmlmdDtcbiAgICBjdXJyZW50RmFjaWxpdHkuc21hcnRQYXJrUG9pbnRlciA9IGluY29taW5nRmFjaWxpdHkuc21hcnRQYXJrUG9pbnRlcjtcbiAgICBjdXJyZW50RmFjaWxpdHkubWFpbkNvbnRyb2xsZXJQb2ludGVyID0gaW5jb21pbmdGYWNpbGl0eS5tYWluQ29udHJvbGxlclBvaW50ZXI7XG4gICAgY3VycmVudEZhY2lsaXR5LmFjdGl2ZSA9IGluY29taW5nRmFjaWxpdHkuYWN0aXZlO1xuICAgIGN1cnJlbnRGYWNpbGl0eS50b3RhbFNwYWNlID0gaW5jb21pbmdGYWNpbGl0eS50b3RhbFNwYWNlO1xuICAgIGN1cnJlbnRGYWNpbGl0eS5scHJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBpbmNvbWluZ0ZhY2lsaXR5LmlzTFBSRW5hYmxlZCAmJiAhaW5jb21pbmdGYWNpbGl0eS5pc0xQUkNvbm5lY3RlZCA/IHN0b3JlZEZhY2lsaXR5LmxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/PyBjbG91ZERhdGVUaW1lVXRjIDogbnVsbDtcbiAgICBjdXJyZW50RmFjaWxpdHkuY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wID0gaW5jb21pbmdGYWNpbGl0eS5pc0NyZWRpdFNlcnZlckVuYWJsZWQgJiYgIWluY29taW5nRmFjaWxpdHkuaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWQgPyBzdG9yZWRGYWNpbGl0eS5jcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YyA6IG51bGw7XG4gICAgY3VycmVudEZhY2lsaXR5Lm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wID0gIWluY29taW5nRmFjaWxpdHkuaXNNYWluQ29udHJvbGxlckNvbm5lY3RlZCA/IHN0b3JlZEZhY2lsaXR5Lm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGMgOiBudWxsO1xuICAgIHJldHVybiBjdXJyZW50RmFjaWxpdHk7XG4gIH1cblxuICBwcml2YXRlIGdldENsb3VkRGF0ZVRpbWVVdGMoKSB7XG4gICAgY29uc3QgZ3VpZCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5ndWlkKTtcbiAgICBjb25zdCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5jbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSk7XG4gICAgcmV0dXJuIG1vbWVudC51dGMoKS5zdWJ0cmFjdChjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeVtndWlkXSwgJ21pbGxpc2Vjb25kcycpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b0Jhc2ljTWVudUl0ZW1zKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHNtYXJ0cGFya01hcDogU3RyaW5nTWFwPFNtYXJ0cGFya0Jhc2ljRHRvPiwgZmFjaWxpdHlEaWN0aW9uYXJ5OiBGYWNpbGl0eURpY3Rpb25hcnksIGFwcE1vZHVsZTogQXBwTW9kdWxlKTogTWVudUl0ZW1bXSB7XG4gICAgY29uc3QgdGliYUtleXMgPSBjdHguZ2V0U3RhdGUoKS50aWJhS2V5cztcbiAgICBjb25zdCBtZW51SXRlbXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGd1aWQgb2YgT2JqZWN0LmtleXMoc21hcnRwYXJrTWFwKSkge1xuICAgICAgY29uc3QgdGliYUtleSA9IHRpYmFLZXlzW2d1aWRdO1xuICAgICAgbWVudUl0ZW1zLnB1c2goLi4udGhpcy5jcmVhdGVNZW51SXRlbXMoc21hcnRwYXJrTWFwW2d1aWRdLCBndWlkLCB0aWJhS2V5LCBmYWNpbGl0eURpY3Rpb25hcnksIGFwcE1vZHVsZSkpO1xuICAgIH1cblxuICAgIHJldHVybiBtZW51SXRlbXM7XG4gIH1cblxuICBwcml2YXRlIGlzUGFya0FjdGl2ZSA9IChjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBndWlkOiBzdHJpbmcsIHBhcmtJZDogbnVtYmVyKSA9PlxuICAgIGN0eC5nZXRTdGF0ZSgpLnNlbGVjdGVkPy5pZCA9PT0gcGFya0lkICYmIGN0eC5nZXRTdGF0ZSgpLmd1aWQgPT09IGd1aWQ7XG5cbiAgcHJpdmF0ZSBjcmVhdGVNZW51SXRlbXMoc21hcnRwYXJrQmFzaWM6IFNtYXJ0cGFya0Jhc2ljRHRvLCBndWlkOiBzdHJpbmcsIHRpYmFLZXk6IG51bWJlciwgZmFjaWxpdHlEaWN0aW9uYXJ5OiBGYWNpbGl0eURpY3Rpb25hcnksIGFwcE1vZHVsZTogQXBwTW9kdWxlKTogTWVudUl0ZW1bXSB7XG4gICAgY29uc3QgbWVudUl0ZW1zOiBNZW51SXRlbVtdID0gW107XG4gICAgc21hcnRwYXJrQmFzaWMuZmFjaWxpdGllcy5mb3JFYWNoKGxvdCA9PiB7XG4gICAgICBpZiAobG90Lm11bHRpUGFya1BhcmVudElEID4gMCkge1xuICAgICAgICAvLyBkbyBub3QgcHVzaCBjaGlsZHJlbnMgdG8gbWVudSBpdGVtcyBhcnJheVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lbnVJdGVtID0gdGhpcy5mYWNpbGl0eU1lbnVTZXJ2aWNlLmNyZWF0ZU1lbnUoZ3VpZCwgdGliYUtleSwgc21hcnRwYXJrQmFzaWMsIGxvdCwgZmFjaWxpdHlEaWN0aW9uYXJ5LCBhcHBNb2R1bGUpO1xuICAgICAgbWVudUl0ZW1zLnB1c2gobWVudUl0ZW0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1lbnVJdGVtcztcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTWVudUl0ZW1zUGFya0Nvbm5lY3Rpb25TdGF0dXMoY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPik6IHZvaWQge1xuICAgIC8vIFdlIGRvbnQgcnVuIG1lbnUgdXBkYXRlIGlmIHdlIGFyZSBub3QgaW4gQ0NcbiAgICBjb25zdCBjdXJyZW50TW9kdWxlID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTaWRlbmF2U3RhdGUuYXBwTW9kdWxlKTtcbiAgICBjb25zdCBpc01vYmlsZUFwcE1vZGUgPSB0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKS5hcHBUeXBlID09PSBBcHBUeXBlLk1vYmlsZTtcbiAgICBpZiAoY3VycmVudE1vZHVsZSAhPT0gQXBwTW9kdWxlLkNjKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBtZW51SXRlbXMgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5tZW51SXRlbXMpO1xuICAgIGNvbnN0IGZhY2lsaXR5RGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmRpY3Rpb25hcnk7XG4gICAgY29uc3Qgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLnNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnk7XG5cbiAgICBmb3IgKGNvbnN0IFtndWlkLCBsb3RzTWFwXSBvZiBPYmplY3QuZW50cmllcyhmYWNpbGl0eURpY3Rpb25hcnkpKSB7XG4gICAgICBjb25zdCBmYWNpbGl0aWVzOiBGYWNpbGl0eUR0b1tdID0gT2JqZWN0LnZhbHVlcyhsb3RzTWFwKTtcbiAgICAgIGZvciAoY29uc3QgZmFjaWxpdHkgb2YgZmFjaWxpdGllcykge1xuICAgICAgICBsZXQgbWVudUl0ZW06IE1lbnVJdGVtO1xuXG4gICAgICAgIGlmIChmYWNpbGl0eS5tdWx0aVBhcmtQYXJlbnRJRCA+IDApIHtcbiAgICAgICAgICBtZW51SXRlbSA9IG1lbnVJdGVtc1xuICAgICAgICAgICAgLmZpbmQoaXRlbSA9PiBpdGVtLnByb3BlcnRpZXM/Lmd1aWQgPT09IGd1aWQpPy5jaGlsZHJlblxuICAgICAgICAgICAgLmZpbmQoc3ViSXRlbSA9PiBzdWJJdGVtLmlkID09PSBmYWNpbGl0eS5pZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWVudUl0ZW0gPSBtZW51SXRlbXMuZmluZChpdGVtID0+IGl0ZW0ucHJvcGVydGllcz8uZ3VpZCA9PT0gZ3VpZCAmJiBpdGVtLmlkID09PSBmYWNpbGl0eS5pZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWVudUl0ZW0pIHtcbiAgICAgICAgICBjb25zdCBiYWRnZUNsYXNzID0gdGhpcy5mYWNpbGl0eU1lbnVTZXJ2aWNlLmdldEJhZGdlUHJpb3JpdHkoZ3VpZCwgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeVtndWlkXSwgZmFjaWxpdHksIGZhY2lsaXR5RGljdGlvbmFyeSk7XG4gICAgICAgICAgbWVudUl0ZW0uaGFzQmFkZ2UgPSBiYWRnZUNsYXNzICE9PSBQYXJrQ29ubmVjdGlvblN0YXR1c0NsYXNzLkNvbm5lY3RlZDtcbiAgICAgICAgICBtZW51SXRlbS5iYWRnZUNsYXNzID0gYmFkZ2VDbGFzcztcbiAgICAgICAgICBtZW51SXRlbS5uYW1lID0gZmFjaWxpdHkubmFtZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghaXNNb2JpbGVBcHBNb2RlKSB7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBNZW51TG9hZEFjdGlvbihbLi4ubWVudUl0ZW1zXSwgQXBwTW9kdWxlLkNjKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTbWFydHBhcmtDb25uZWN0aW9uU3RhdHVzTWFwKHNtYXJ0cGFya01hcDogU3RyaW5nTWFwPFNtYXJ0cGFya0Jhc2ljRHRvPiwgZmFjaWxpdHlEaWN0aW9uYXJ5OiBGYWNpbGl0eURpY3Rpb25hcnkpIHtcbiAgICBjb25zdCBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5OiBTdHJpbmdNYXA8U2VydmljZXNSdW5uaW5nU3RhdHVzRHRvPiA9IHt9O1xuICAgIGNvbnN0IHBhcmtDb25uZWN0aW9uU3RhdHVzTWFwOiBDb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeSA9IHt9O1xuICAgIGZvciAoY29uc3QgZ3VpZCBvZiBPYmplY3Qua2V5cyhzbWFydHBhcmtNYXApKSB7XG4gICAgICBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5W2d1aWRdID0gc21hcnRwYXJrTWFwW2d1aWRdLnNlcnZpY2VzUnVubmluZ1N0YXR1cztcbiAgICAgIHBhcmtDb25uZWN0aW9uU3RhdHVzTWFwW2d1aWRdID0gc21hcnRwYXJrTWFwW2d1aWRdLmZhY2lsaXRpZXMucmVkdWNlKChmYWNpbGl0aWVzLCBsb3QpID0+IHtcbiAgICAgICAgY29uc3QgcGFya0Nvbm5lY3Rpb25TdGF0dXMgPSB0aGlzLmdsb2JhbEVycm9yU2VydmljZS5nZXRQYXJrQ29ubmVjdGlvblN0YXR1cyhndWlkLCBsb3QsIHNtYXJ0cGFya01hcFtndWlkXS5zZXJ2aWNlc1J1bm5pbmdTdGF0dXMsIGZhY2lsaXR5RGljdGlvbmFyeSk7XG4gICAgICAgIGZhY2lsaXRpZXNbbG90LmlkXSA9IHtcbiAgICAgICAgICBzdGF0dXM6IHBhcmtDb25uZWN0aW9uU3RhdHVzLnN0YXR1cyxcbiAgICAgICAgICBzdGFydERhdGU6IHBhcmtDb25uZWN0aW9uU3RhdHVzLnN0YXJ0RGF0ZVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZmFjaWxpdGllcztcbiAgICAgIH0sIHt9KTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5LCBwYXJrQ29ubmVjdGlvblN0YXR1c01hcCB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0VG9GYWNpbGl0eURpY3Rpb25hcnkoc21hcnRwYXJrTWFwOiBTdHJpbmdNYXA8U21hcnRwYXJrQmFzaWNEdG8+KTogeyBzbWFydHBhcmtzQmFzZTogU21hcnRwYXJrQmFzaWNEdG9bXSwgZGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5LCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeTogQ2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnk7IH0ge1xuICAgIGNvbnN0IHNtYXJ0cGFya3NCYXNlOiBTbWFydHBhcmtCYXNpY0R0b1tdID0gW107XG4gICAgY29uc3QgZmFjaWxpdHlEaWN0aW9uYXJ5OiBGYWNpbGl0eURpY3Rpb25hcnkgPSB7fTtcbiAgICBjb25zdCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeTogQ2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkgPSB7fTtcblxuICAgIGZvciAoY29uc3QgZ3VpZCBvZiBPYmplY3Qua2V5cyhzbWFydHBhcmtNYXApKSB7XG4gICAgICBzbWFydHBhcmtzQmFzZS5wdXNoKHNtYXJ0cGFya01hcFtndWlkXSk7XG5cbiAgICAgIGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXSA9IHt9O1xuICAgICAgZm9yIChjb25zdCBsb3Qgb2Ygc21hcnRwYXJrTWFwW2d1aWRdLmZhY2lsaXRpZXMpIHtcbiAgICAgICAgY29uc3QgY2xvdCA9IG5ldyBGYWNpbGl0eUR0bygpO1xuICAgICAgICBjbG90LmlkID0gbG90LmlkO1xuICAgICAgICBjbG90LmNsb3VkSWQgPSBsb3QuY2xvdWRJZDtcbiAgICAgICAgY2xvdC5hY3RpdmUgPSBsb3QuYWN0aXZlO1xuICAgICAgICBjbG90LmZlYXR1cmVQZXJtaXNzaW9ucyA9IGxvdC5mZWF0dXJlUGVybWlzc2lvbnM7XG4gICAgICAgIGNsb3QucGVybWlzc2lvbnMgPSBsb3QucGVybWlzc2lvbnM7XG4gICAgICAgIGNsb3QubmFtZSA9IGxvdC5uYW1lO1xuICAgICAgICBjbG90LnNpdGVDb2RlID0gbG90LnNpdGVDb2RlO1xuICAgICAgICBjbG90Lm11bHRpUGFya1BhcmVudElEID0gbG90Lm11bHRpUGFya1BhcmVudElEO1xuICAgICAgICBjbG90LmlzTWFpbkNvbnRyb2xsZXJDb25uZWN0ZWQgPSBsb3QuaXNNYWluQ29udHJvbGxlckNvbm5lY3RlZDtcbiAgICAgICAgY2xvdC5tYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IGxvdC5tYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcDtcbiAgICAgICAgY2xvdC5pc0NyZWRpdFNlcnZlckVuYWJsZWQgPSBsb3QuaXNDcmVkaXRTZXJ2ZXJFbmFibGVkO1xuICAgICAgICBjbG90LmlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkID0gbG90LmlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkO1xuICAgICAgICBjbG90LmNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IGxvdC5jcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXA7XG4gICAgICAgIGNsb3QuaXNMUFJDb25uZWN0ZWQgPSBsb3QuaXNMUFJDb25uZWN0ZWQ7XG4gICAgICAgIGNsb3QuaXNMUFJFbmFibGVkID0gbG90LmlzTFBSRW5hYmxlZDtcbiAgICAgICAgY2xvdC5pc1RpY2tldExlc3NFbmFibGVkID0gbG90LmlzVGlja2V0TGVzc0VuYWJsZWQ7XG4gICAgICAgIGNsb3QubHByRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbG90LmxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcDtcbiAgICAgICAgY2xvdC5pc0Jhc2ljID0gbG90LmlzQmFzaWM7XG4gICAgICAgIGNsb3QuaXNNdWx0aVBhcmsgPSBsb3QuaXNNdWx0aVBhcms7XG4gICAgICAgIGNsb3QudGltZURyaWZ0ID0gbG90LnRpbWVEcmlmdDtcbiAgICAgICAgY2xvdC5zcFRpbWVab25lID0gbG90LnNwVGltZVpvbmU7XG4gICAgICAgIGNsb3Quc2VydmVyRGF0ZVRpbWUgPSBsb3Quc2VydmVyRGF0ZVRpbWU7XG4gICAgICAgIGNsb3QudG90YWxTcGFjZSA9IGxvdC50b3RhbFNwYWNlO1xuICAgICAgICBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bbG90LmlkXSA9IGNsb3Q7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBkaWZmIG9mIDAgZm9yIGluaXRpYWwgc2V0dXBcbiAgICAgIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5W2d1aWRdID0gMDtcbiAgICB9XG5cbiAgICByZXR1cm4geyBzbWFydHBhcmtzQmFzZSwgZGljdGlvbmFyeTogZmFjaWxpdHlEaWN0aW9uYXJ5LCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSB9O1xuXG4gICAgXG4gIH1cblxuICBwcml2YXRlIHBvcHVsYXRlU21hcnRwYXJrQmFzaWMoY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgc21hcnRQYXJrczogU3RyaW5nTWFwPFNtYXJ0cGFya0Jhc2ljRHRvPikge1xuICAgIC8vIGtlZXAgZGVmYXVsdCB2YWx1ZXMgd2hlbiBuYXZpZ2F0ZSB0byBjb21tYW5kIGNlbnRlciBmb3J3YXJkIGFuZCBiYWNrLlxuICAgIGNvbnN0IHsgZ3VpZCwgcGFya0lkLCBtdWx0aVBhcmtQYXJlbnRJRCwgc2VsZWN0ZWQgfSA9IGN0eC5nZXRTdGF0ZSgpO1xuICAgIGRlZmF1bHRzLmd1aWQgPSBndWlkO1xuICAgIGRlZmF1bHRzLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgZGVmYXVsdHMucGFya0lkID0gcGFya0lkO1xuICAgIGRlZmF1bHRzLm11bHRpUGFya1BhcmVudElEID0gbXVsdGlQYXJrUGFyZW50SUQ7XG5cbiAgICBjdHguc2V0U3RhdGUoZGVmYXVsdHMpO1xuXG4gICAgY29uc3QgdGliYUtleXM6IFN0cmluZ01hcDxudW1iZXI+ID0gT2JqZWN0LmtleXMoc21hcnRQYXJrcykucmVkdWNlKChrZXlzLCBndWlkLCBpbmRleCkgPT4ge1xuICAgICAga2V5c1tndWlkXSA9IGluZGV4O1xuICAgICAgcmV0dXJuIGtleXM7XG4gICAgfSwge30pO1xuXG4gICAgY29uc3QgeyBzbWFydHBhcmtzQmFzZSwgZGljdGlvbmFyeSwgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkgfSA9IHRoaXMuY29udmVydFRvRmFjaWxpdHlEaWN0aW9uYXJ5KHNtYXJ0UGFya3MpO1xuXG4gICAgY29uc3Qgc3RhdGVVcGRhdGVzOiBQYXJ0aWFsPEZhY2lsaXR5U3RhdGVNb2RlbD4gPSB7XG4gICAgICB0aWJhS2V5cyxcbiAgICAgIGRpY3Rpb25hcnksXG4gICAgICBzbWFydHBhcmtzQmFzZSxcbiAgICAgIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5LFxuICAgIH07XG5cbiAgICBpZiAoIWRpY3Rpb25hcnlbZ3VpZF0gfHwgIWRpY3Rpb25hcnlbZ3VpZF1bcGFya0lkXSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihzdGF0ZVVwZGF0ZXMsIHtcbiAgICAgICAgZ3VpZDogJycsXG4gICAgICAgIHBhcmtJZDogbnVsbCxcbiAgICAgICAgbXVsdGlQYXJrUGFyZW50SUQ6IG51bGwsXG4gICAgICAgIHNlbGVjdGVkOiBudWxsLFxuICAgICAgICB6b25lczogbnVsbCxcbiAgICAgICAgYWxsb3dlZEFjdGlvbnM6IHt9LFxuICAgICAgfSk7XG4gICAgfVxuICAgIGN0eC5wYXRjaFN0YXRlKHN0YXRlVXBkYXRlcyk7XG5cbiAgICAvL3VzZXMgZmFjaWxpdHkgZGljdGlvbmFyeSBmcm9tIHN0b3JlLCB0aGVyZWZvcmUgcGxhY2VkIGFmdGVyXG4gICAgY29uc3QgeyBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5LCBwYXJrQ29ubmVjdGlvblN0YXR1c01hcCB9ID0gdGhpcy5nZXRTbWFydHBhcmtDb25uZWN0aW9uU3RhdHVzTWFwKHNtYXJ0UGFya3MsIGRpY3Rpb25hcnkpO1xuICAgIGN0eC5wYXRjaFN0YXRlKHsgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSwgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnk6IHBhcmtDb25uZWN0aW9uU3RhdHVzTWFwIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzRHluYW1pY1ByaWNpbmdTZXRBY3RpdmVSYXRlKGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50OiBGYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudCwgY29uZmlnOiBDb21tYW5kTm90aWZpY2F0aW9uQ29uZmlnKTogdm9pZCB7XG4gICAgY29uc3QgZHluYW1pY1ByaWNpbmdDb25kaXRpb25zTWFwOiBOdW1iZXJNYXA8RHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG8+ID0gSlNPTi5wYXJzZShcbiAgICAgIHRoaXMubG9jYWxTdG9yYWdlU2VydmljZS5nZXRJdGVtKERZTkFNSUNfUFJJQ0lOR19DT05ESVRJT04pXG4gICAgKSA/PyB7fTtcblxuICAgIGNvbnN0IGRwYzogRHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG8gPSBkeW5hbWljUHJpY2luZ0NvbmRpdGlvbnNNYXBbZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQuc291cmNlSWRlbnRpZmllcl07XG4gICAgaWYgKGRwYykge1xuICAgICAgY29uc3QgZmFjaWxpdHk6IEZhY2lsaXR5RHRvID0gbnVsbDtcbiAgICAgIGNvbmZpZy5kdXJhdGlvbiA9IDcgKiBPTkVfU0VDT05EX0lOX01JTExJU0VDT05EUztcbiAgICAgIGNvbmZpZy5tZXNzYWdlcyA9IHRoaXMuZmFjaWxpdHlDb21tYW5kc0NvbmZpZ1NlcnZpY2UuZ2V0Q29tbWFuZE5vdGlmaWNhdGlvbkNvbmZpZ01lc3NhZ2VzKFxuICAgICAgICBGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlcy5TZXRBY3RpdmVSYXRlLFxuICAgICAgICBmYWNpbGl0eSxcbiAgICAgICAgZHBjXG4gICAgICApO1xuXG4gICAgICAvLyBDbG9zZSBkeW5hbWljIHByaWNpbmcgbm90aWZpY2F0aW9uXG4gICAgICBjb25zdCBub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbkR0byA9IG5ldyBOb3RpZmljYXRpb25EdG8oKTtcbiAgICAgIG5vdGlmaWNhdGlvbi50eXBlID0gTm90aWZpY2F0aW9uVHlwZS5EeW5hbWljUHJpY2luZ0NvbmRpdGlvbjtcbiAgICAgIG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbiA9IGRwYztcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IEhhbmRsZWROb3RpZmljYXRpb25BY3Rpb24obm90aWZpY2F0aW9uLCBkcGMuZ3VpZCkpO1xuXG4gICAgICBkeW5hbWljUHJpY2luZ0NvbmRpdGlvbnNNYXBbZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQuZ3VpZF0gPSBudWxsO1xuICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oXG4gICAgICAgIERZTkFNSUNfUFJJQ0lOR19DT05ESVRJT04sXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KGR5bmFtaWNQcmljaW5nQ29uZGl0aW9uc01hcClcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iXX0=
|