@tiba-spark/client-shared-lib 25.1.0-1066 → 25.1.0-1070

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.
@@ -248,7 +248,7 @@ let NotificationsState = class NotificationsState {
248
248
  notificationsMap,
249
249
  config: this.notificationsService.convertNotificationsToNotificationsConfig(filteredNotifications),
250
250
  });
251
- // Close relevent open modals
251
+ // Close relevant open modals
252
252
  this.closeDialogById(`notification-modal-${alertPK}`);
253
253
  this.closeDialogById(`lpr-mismatch-modal-${alertPK}`);
254
254
  this.closeDialogById(`lost-ticket-modal-${alertPK}`);
@@ -270,7 +270,7 @@ let NotificationsState = class NotificationsState {
270
270
  notificationsMap,
271
271
  config: this.notificationsService.convertNotificationsToNotificationsConfig(filteredNotifications),
272
272
  });
273
- // Close relevent open modals
273
+ // Close relevant open modals
274
274
  this.closeDialogById(`notification-modal-${notificationPK}`);
275
275
  this.closeDialogById(`dynamic-pricing-confirmation-modal-${notificationPK}`);
276
276
  }
@@ -290,7 +290,7 @@ let NotificationsState = class NotificationsState {
290
290
  notificationsMap,
291
291
  config: this.notificationsService.convertNotificationsToNotificationsConfig(filteredNotifications),
292
292
  });
293
- // Close relevent open modals
293
+ // Close relevant open modals
294
294
  this.closeDialogById(`notification-modal-${notificationPK}`);
295
295
  this.closeDialogById(`dynamic-pricing-confirmation-modal-${notificationPK}`);
296
296
  this.closeDialogById(`lpr-mismatch-modal-${notificationPK}`);
@@ -308,7 +308,7 @@ let NotificationsState = class NotificationsState {
308
308
  for (const dp of dynamicPricingNotificationExists) {
309
309
  const notificationPK = this.notificationPK(dp, guid);
310
310
  delete notificationsMap[notificationPK];
311
- // Close relevent open modals
311
+ // Close relevant open modals
312
312
  this.closeDialogById(`notification-modal-${notificationPK}`);
313
313
  this.closeDialogById(`dynamic-pricing-confirmation-modal-${notificationPK}`);
314
314
  }
@@ -419,20 +419,7 @@ let NotificationsState = class NotificationsState {
419
419
  onDyanmicPricingConditionChange(ctx, notification, guid) {
420
420
  this.handleNotificationForClosing(ctx, notification, guid);
421
421
  this.handleTriggeredDynamicPricingConditionNotification(ctx, notification, guid);
422
- let isFallenBackToDefaultRate = !notification.dynamicPricingCondition.isTriggered;
423
- let isAutomaticSwitchRate = notification.dynamicPricingCondition.triggerAction === DynamicPricingTriggerAction.AutomaticSwitchRate;
424
- if (isFallenBackToDefaultRate) {
425
- if (notification.dynamicPricingCondition.isActivated) {
426
- // handle notification indicating the rate has fallen back to the default rate
427
- this.showRateFallenBackToDefaultRateToastMessage(notification).then();
428
- }
429
- }
430
- else if (isAutomaticSwitchRate) {
431
- // handle notification indicating the rate has automatic switch
432
- this.showRateAutomaticSwitchToastMessage(notification).then();
433
- this.closeTriggeredDynamicPricingConditions(ctx, notification, guid);
434
- }
435
- else {
422
+ if (notification.dynamicPricingCondition.isTriggered) {
436
423
  // We do not open the notification if user does not have permission
437
424
  const hasPermission = this.facilityService.hasPermissionTypeByPark(PermissionType.LotConfigurationDynamicPricing, notification.guid, notification.dynamicPricingCondition.parkingLotId);
438
425
  // We do not open the notification in mobile mode
@@ -449,6 +436,15 @@ let NotificationsState = class NotificationsState {
449
436
  });
450
437
  }
451
438
  }
439
+ else if (notification.dynamicPricingCondition.isActivated) {
440
+ // handle notification indicating the rate has fallen back to the default rate
441
+ this.showRateFallenBackToDefaultRateToastMessage(notification).then();
442
+ }
443
+ else if (notification.dynamicPricingCondition.triggerAction === DynamicPricingTriggerAction.AutomaticSwitchRate) {
444
+ // handle notification indicating the rate has automatic switch
445
+ this.showRateAutomaticSwitchToastMessage(notification).then();
446
+ this.closeTriggeredDynamicPricingConditions(ctx, notification, guid);
447
+ }
452
448
  }
453
449
  onAlertChange(ctx, notification, guid) {
454
450
  const alert = notification?.alert;
@@ -555,4 +551,4 @@ export { NotificationsState };
555
551
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NotificationsState, decorators: [{
556
552
  type: Injectable
557
553
  }], ctorParameters: function () { return [{ type: i1.ModalService }, { type: i2.TranslateService }, { type: i3.Store }, { type: i4.NotificationServiceProxy }, { type: i5.AlertNotificationService }, { type: i6.NotificationsService }, { type: i7.CommandNotificationService }, { type: i8.BaseFacilityCommandsService }, { type: i9.FacilityService }, { type: i10.ZoneServiceProxy }, { type: i10.RateServiceProxy }, { type: i11.AppConfigService }]; }, propDecorators: { onUpdateUserAlertsPreferencesAction: [], onLoadNotificationsAction: [], onClearNotificationsAction: [], onSetConfigAction: [], onHandleNotificationForClosing: [], onNotificationChangeAction: [], onHandleNotificationAction: [] } });
558
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9ucy5zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1zaGFyZWQtbGliL3NyYy9saWJyYXJpZXMvbW9kdWxlcy9ub3RpZmljYXRpb25zL25vdGlmaWNhdGlvbnMuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUF1QixNQUFNLGFBQWEsQ0FBQztBQUMzRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFFbkgsT0FBTyxFQUFFLDhCQUE4QixFQUE2Qix1QkFBdUIsRUFBRSxNQUFNLGdGQUFnRixDQUFDO0FBQ3BMLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG1GQUFtRixDQUFDO0FBRWpJLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3RJLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTdELE9BQU8sRUFBeUMsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSwyQkFBMkIsRUFBRSwwQkFB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O21FQVkvQjtBQUdEO0lBREMsTUFBTSxDQUFDLHdCQUF3QixDQUFDO29FQVdoQztBQUdEO0lBREMsTUFBTSxDQUFDLDRCQUE0QixDQUFDOzJEQUtwQztBQUdEO0lBREMsTUFBTSxDQUFDLDRCQUE0QixDQUFDO3dFQUdwQztBQUdLO0lBREwsTUFBTSxDQUFDLHdCQUF3QixDQUFDO29FQWVoQztBQUdEO0lBREMsTUFBTSxDQUFDLHdCQUF3QixDQUFDO29FQU9oQztBQTdFTTtJQUROLFFBQVEsRUFBRTtzQ0FHVjtBQXBCVSxrQkFBa0I7SUFiOUIsS0FBSyxDQUFxQjtRQUN6QixJQUFJLEVBQUUsZUFBZTtRQUNyQixRQUFRLEVBQUU7WUFDUixNQUFNLEVBQUU7Z0JBQ04sYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLDhCQUE4QixFQUFFLG9CQUFvQixDQUFDLEdBQUc7Z0JBQ3hELFVBQVUsRUFBRSxDQUFDO2dCQUNiLFlBQVksRUFBRSxLQUFLO2FBQ3BCO1lBQ0QsZ0JBQWdCLEVBQUUsRUFBRTtTQUNyQjtLQUNGLENBQUM7R0FFVyxrQkFBa0IsQ0E4akI5QjtTQTlqQlksa0JBQWtCOzRGQUFsQixrQkFBa0I7a0JBRDlCLFVBQVU7d2RBd0JULG1DQUFtQyxNQVVuQyx5QkFBeUIsTUFjekIsMEJBQTBCLE1BYTFCLGlCQUFpQixNQU9qQiw4QkFBOEIsTUFLeEIsMEJBQTBCLE1BaUJoQywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBBY3Rpb24sIFNlbGVjdG9yLCBTdGF0ZSwgU3RhdGVDb250ZXh0LCBTdG9yZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDbG91ZENvbmZpcm1EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2Nsb3VkLWNvbmZpcm0tZGlhbG9nL2Nsb3VkLWNvbmZpcm0tZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBbGVydE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi9hbGVydC1ub3RpZmljYXRpb24vYWxlcnQtbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tbWFuZE5vdGlmaWNhdGlvbkJvcmRlckNsYXNzLCBDb21tYW5kTm90aWZpY2F0aW9uQ29uZmlnLCBDb21tYW5kTm90aWZpY2F0aW9uVHlwZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uLWNvbmZpZyc7XG5pbXBvcnQgeyBDb21tYW5kTm90aWZpY2F0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ub3RpZmljYXRpb24vY29tbWFuZC1ub3RpZmljYXRpb24vY29tbWFuZC1ub3RpZmljYXRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IENvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ub3RpZmljYXRpb24vY29tbWFuZC1ub3RpZmljYXRpb24vY29tbWFuZC1ub3RpZmljYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25DbGFzcywgTm90aWZpY2F0aW9uSFBvc2l0aW9ucywgTm90aWZpY2F0aW9uVlBvc2l0aW9ucyB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL25vdGlmaWNhdGlvbi1jb25maWcnO1xuaW1wb3J0IHsgT05FX1NFQ09ORF9JTl9NSUxMSVNFQ09ORFMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZ2xvYmFsLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBWRVJTSU9OXzlfMl8wIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3ZlcnNpb24tY29uc3RhbnRzJztcbmltcG9ydCB7IERldmljZVR5cGVzQWxlcnRzTWFwcGluZyB9IGZyb20gJy4uLy4uL2VudW1zL2FsZXJ0cy1kZXZpY2UtdHlwZS5lbnVtJztcbmltcG9ydCB7IEFwcFR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcy9hcHAtdHlwZS5lbnVtJztcbmltcG9ydCB7IExvY2FsaXphdGlvbiB9IGZyb20gJy4uLy4uL2VudW1zL2xvY2FsaXphdGlvbi5lbnVtJztcbmltcG9ydCB7IENsb3VkQ29uZmlybURpYWxvZ0RhdGEgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2Nsb3VkLWNvbmZpcm0tZGlhbG9nLWRhdGEuaW50ZXJmYWNlJztcbmltcG9ydCB7IEFsZXJ0RHRvLCBBbGVydFByZWZlcmVuY2VzU2V0dGluZ3NEdG8sIEFsZXJ0c0RldmljZVR5cGUsIEFwcE1vZHVsZSwgRGV2aWNlVHlwZSwgRHluYW1pY1ByaWNpbmdUcmlnZ2VyQWN0aW9uLCBGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlcywgSGFuZGxpbmdBbGVydER0bywgSGFuZGxpbmdEeW5hbWljUHJpY2luZ0NvbmRpdGlvbkR0bywgTm90aWZpY2F0aW9uRHRvLCBOb3RpZmljYXRpb25TZXJ2aWNlUHJveHksIE5vdGlmaWNhdGlvblNldmVyaXR5LCBOb3RpZmljYXRpb25UeXBlLCBQZXJpcGhlcmFsRXF1aXBtZW50RXJyb3IsIFBlcm1pc3Npb25UeXBlLCBTZXR0aW5nc0NhdGVnb3J5LCBTcGFya1NldHRpbmdzRHRvIH0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9jbG91ZC1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgUmF0ZVNlcnZpY2VQcm94eSwgWm9uZVNlcnZpY2VQcm94eSB9IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvZWRnZS1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgQmFzZUZhY2lsaXR5Q29tbWFuZHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBNb2RhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tb2RhbC5zZXJ2aWNlJztcbmltcG9ydCB7IE51bWJlck1hcCB9IGZyb20gJy4uLy4uL3V0aWxzL2xhbmcudXRpbCc7XG5pbXBvcnQgeyBpc1ZlcnNpb25HcmVhdGVyVGhhbkVxdWFsIH0gZnJvbSAnLi4vLi4vdXRpbHMvc3VwcG9ydC12ZXJzaW9uLnV0aWwnO1xuaW1wb3J0IHsgU2Vzc2lvblN0YXRlIH0gZnJvbSAnLi4vYXV0aC9zZXNzaW9uLnN0YXRlJztcbmltcG9ydCB7IEZhY2lsaXR5U2VydmljZSB9IGZyb20gJy4uL2ZhY2lsaXR5JztcbmltcG9ydCB7IEZhY2lsaXR5U3RhdGUgfSBmcm9tICcuLi9mYWNpbGl0eS9mYWNpbGl0eS5zdGF0ZSc7XG5pbXBvcnQgeyBQYXJrTWFuYWdlclN0YXRlIH0gZnJvbSAnLi4vcGFyay1tYW5hZ2VyL3BhcmstbWFuYWdlci5zdGF0ZSc7XG5pbXBvcnQgeyBTaWRlbmF2U3RhdGUgfSBmcm9tICcuLi9zaWRlbmF2L3NpZGVuYXYuc3RhdGUnO1xuaW1wb3J0IHsgVXBkYXRlVXNlclNldHRpbmdzQWN0aW9uIH0gZnJvbSAnLi4vdXNlci1zZXR0aW5ncy91c2VyLXNldHRpbmdzLmFjdGlvbnMnO1xuaW1wb3J0IHtcbiAgQ2xlYXJOb3RpZmljYXRpb25zQWN0aW9uLCBIYW5kbGVOb3RpZmljYXRpb25BY3Rpb24sIEhhbmRsZU5vdGlmaWNhdGlvbkZvckNsb3NpbmcsIExvYWROb3RpZmljYXRpb25zQWN0aW9uLFxuICBOb3RpZmljYXRpb25DaGFuZ2VBY3Rpb24sXG4gIFNldE5vdGlmaWNhdGlvbnNDb25maWdBY3Rpb24sIFVwZGF0ZVVzZXJBbGVydHNQcmVmZXJlbmNlc0FjdGlvblxufSBmcm9tICcuL25vdGlmaWNhdGlvbnMuYWN0aW9ucyc7XG5pbXBvcnQgeyBBbGVydHNQcmVmZXJlbmNlc01hcCwgQWxlcnRUeXBlUHJlZmVyZW5jZXNNYXAsIEZhY2lsaXR5UHJlZmVyZW5jZXNNYXAsIE5vdGlmaWNhdGlvbnNDb25maWcgfSBmcm9tICcuL25vdGlmaWNhdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi9ub3RpZmljYXRpb25zLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWNhdGlvbnNNb2RlbCB7XG4gIGNvbmZpZzogTm90aWZpY2F0aW9uc0NvbmZpZztcbiAgbm90aWZpY2F0aW9uc01hcDogTnVtYmVyTWFwPG51bWJlcj47XG59XG5cbkBTdGF0ZTxOb3RpZmljYXRpb25zTW9kZWw+KHtcbiAgbmFtZTogJ25vdGlmaWNhdGlvbnMnLFxuICBkZWZhdWx0czoge1xuICAgIGNvbmZpZzoge1xuICAgICAgbm90aWZpY2F0aW9uczogW10sXG4gICAgICBhZ2dyZWdhdGVkTm90aWZpY2F0aW9uU2V2ZXJpdHk6IE5vdGlmaWNhdGlvblNldmVyaXR5LkxvdyxcbiAgICAgIGJhZGdlVmFsdWU6IDAsXG4gICAgICBkaXNwbGF5QmFkZ2U6IGZhbHNlLFxuICAgIH0sXG4gICAgbm90aWZpY2F0aW9uc01hcDoge30sXG4gIH0sXG59KVxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvbnNTdGF0ZSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmUsXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlUHJveHk6IE5vdGlmaWNhdGlvblNlcnZpY2VQcm94eSxcbiAgICBwcml2YXRlIGFsZXJ0Tm90aWZpY2F0aW9uU2VydmljZTogQWxlcnROb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uc1NlcnZpY2U6IE5vdGlmaWNhdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29tbWFuZE5vdGlmaWNhdGlvblNlcnZpY2U6IENvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZmFjaWxpdHlDb21tYW5kc1NlcnZpY2U6IEJhc2VGYWNpbGl0eUNvbW1hbmRzU2VydmljZSxcbiAgICBwcml2YXRlIGZhY2lsaXR5U2VydmljZTogRmFjaWxpdHlTZXJ2aWNlLFxuICAgIHByaXZhdGUgem9uZVNlcnZpY2VQcm94eTogWm9uZVNlcnZpY2VQcm94eSxcbiAgICBwcml2YXRlIHJhdGVTZXJ2aWNlUHJveHk6IFJhdGVTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBhcHBDb25maWdTZXJ2aWNlOiBBcHBDb25maWdTZXJ2aWNlKSB7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgY29uZmlnKHN0YXRlOiBOb3RpZmljYXRpb25zTW9kZWwpOiBOb3RpZmljYXRpb25zQ29uZmlnIHtcbiAgICByZXR1cm4gc3RhdGUuY29uZmlnO1xuICB9XG5cbiAgQEFjdGlvbihVcGRhdGVVc2VyQWxlcnRzUHJlZmVyZW5jZXNBY3Rpb24pXG4gIG9uVXBkYXRlVXNlckFsZXJ0c1ByZWZlcmVuY2VzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PE5vdGlmaWNhdGlvbnNNb2RlbD4sIGFjdGlvbjogVXBkYXRlVXNlckFsZXJ0c1ByZWZlcmVuY2VzQWN0aW9uKSB7XG4gICAgY29uc3Qgc2V0dGluZzogU3BhcmtTZXR0aW5nc0R0byA9IG5ldyBTcGFya1NldHRpbmdzRHRvKHtcbiAgICAgIGNhdGVnb3J5OiBTZXR0aW5nc0NhdGVnb3J5LkFsZXJ0c1ByZWZlcmVuY2VzLFxuICAgICAgc2V0dGluZ3NKc29uOiBKU09OLnN0cmluZ2lmeShhY3Rpb24udXNlck5vdGlmaWNhdGlvbnNQcmVmZXJlbmNlcyksXG4gICAgfSk7XG5cbiAgICBjdHguZGlzcGF0Y2gobmV3IFVwZGF0ZVVzZXJTZXR0aW5nc0FjdGlvbihzZXR0aW5nKSk7XG4gIH1cblxuICBAQWN0aW9uKExvYWROb3RpZmljYXRpb25zQWN0aW9uKVxuICBvbkxvYWROb3RpZmljYXRpb25zQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PE5vdGlmaWNhdGlvbnNNb2RlbD4sIHsgbWludXRlc0FnbyB9OiBMb2FkTm90aWZpY2F0aW9uc0FjdGlvbikge1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnMkID0gdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlUHJveHkuZ2V0QWxsTm90aWZpY2F0aW9ucyhtaW51dGVzQWdvKTtcblxuICAgIHJldHVybiBub3RpZmljYXRpb25zJC5waXBlKHRhcChhc3luYyBub3RpZmljYXRpb25zID0+IHtcbiAgICAgIGNvbnN0IHBvcHVsYXRlTm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uRHRvW10gPSBhd2FpdCB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLnBvcHVsYXRlTm90aWZpY2F0aW9ucyhub3RpZmljYXRpb25zLmRhdGEpO1xuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uc0NvbmZpZzogTm90aWZpY2F0aW9uc0NvbmZpZyA9IHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UuY29udmVydE5vdGlmaWNhdGlvbnNUb05vdGlmaWNhdGlvbnNDb25maWcocG9wdWxhdGVOb3RpZmljYXRpb25zKTtcblxuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBjb25maWc6IG5vdGlmaWNhdGlvbnNDb25maWcsXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKENsZWFyTm90aWZpY2F0aW9uc0FjdGlvbilcbiAgb25DbGVhck5vdGlmaWNhdGlvbnNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8Tm90aWZpY2F0aW9uc01vZGVsPiwgYWN0aW9uOiBDbGVhck5vdGlmaWNhdGlvbnNBY3Rpb24pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBjb25maWc6IHtcbiAgICAgICAgbm90aWZpY2F0aW9uczogW10sXG4gICAgICAgIGFnZ3JlZ2F0ZWROb3RpZmljYXRpb25TZXZlcml0eTogTm90aWZpY2F0aW9uU2V2ZXJpdHkuTG93LFxuICAgICAgICBiYWRnZVZhbHVlOiAwLFxuICAgICAgICBkaXNwbGF5QmFkZ2U6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIG5vdGlmaWNhdGlvbnNNYXA6IHt9LFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihTZXROb3RpZmljYXRpb25zQ29uZmlnQWN0aW9uKVxuICBvblNldENvbmZpZ0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxOb3RpZmljYXRpb25zTW9kZWw+LCBhY3Rpb246IFNldE5vdGlmaWNhdGlvbnNDb25maWdBY3Rpb24pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBjb25maWc6IGFjdGlvbi5ub3RpZmljYXRpb25zQ29uZmlnLFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihIYW5kbGVOb3RpZmljYXRpb25Gb3JDbG9zaW5nKVxuICBvbkhhbmRsZU5vdGlmaWNhdGlvbkZvckNsb3NpbmcoY3R4OiBTdGF0ZUNvbnRleHQ8Tm90aWZpY2F0aW9uc01vZGVsPiwgeyBub3RpZmljYXRpb24sIGd1aWQgfTogSGFuZGxlTm90aWZpY2F0aW9uRm9yQ2xvc2luZykge1xuICAgIHRoaXMuaGFuZGxlTm90aWZpY2F0aW9uRm9yQ2xvc2luZyhjdHgsIG5vdGlmaWNhdGlvbiwgZ3VpZCk7XG4gIH1cblxuICBAQWN0aW9uKE5vdGlmaWNhdGlvbkNoYW5nZUFjdGlvbilcbiAgYXN5bmMgb25Ob3RpZmljYXRpb25DaGFuZ2VBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8Tm90aWZpY2F0aW9uc01vZGVsPiwgeyBub3RpZmljYXRpb24sIGd1aWQgfTogTm90aWZpY2F0aW9uQ2hhbmdlQWN0aW9uKSB7XG4gICAgc3dpdGNoIChub3RpZmljYXRpb24udHlwZSkge1xuICAgICAgY2FzZSBOb3RpZmljYXRpb25UeXBlLkFsZXJ0OlxuICAgICAgICB0aGlzLm9uQWxlcnRDaGFuZ2UoY3R4LCBub3RpZmljYXRpb24sIGd1aWQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBOb3RpZmljYXRpb25UeXBlLkR5bmFtaWNQcmljaW5nQ29uZGl0aW9uOlxuICAgICAgICB0aGlzLm9uRHlhbm1pY1ByaWNpbmdDb25kaXRpb25DaGFuZ2UoY3R4LCBub3RpZmljYXRpb24sIGd1aWQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS5sb2coXCJ1bnN1cHBvcnRlZCBub3RpZmljYXRpb24gdHlwZVwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihIYW5kbGVOb3RpZmljYXRpb25BY3Rpb24pXG4gIG9uSGFuZGxlTm90aWZpY2F0aW9uQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PE5vdGlmaWNhdGlvbnNNb2RlbD4sIHsgbm90aWZpY2F0aW9uRHRvLCBndWlkIH06IEhhbmRsZU5vdGlmaWNhdGlvbkFjdGlvbikge1xuICAgIGlmIChub3RpZmljYXRpb25EdG8uZHluYW1pY1ByaWNpbmdDb25kaXRpb24/LmhhbmRsZWRCeVVzZXJJZCA+IDApIHtcbiAgICAgIHRoaXMuaGFuZGxlTm90aWZpY2F0aW9uRm9yQ2xvc2luZyhjdHgsIG5vdGlmaWNhdGlvbkR0bywgZ3VpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvY2Vzc05vdGlmaWNhdGlvblVwZGF0ZShjdHgsIG5vdGlmaWNhdGlvbkR0bywgZ3VpZCk7XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc05vdGlmaWNhdGlvblVwZGF0ZShjdHg6IFN0YXRlQ29udGV4dDxOb3RpZmljYXRpb25zTW9kZWw+LCBub3RpZmljYXRpb25EdG86IE5vdGlmaWNhdGlvbkR0bywgZ3VpZDogc3RyaW5nKSB7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9ucyA9IHsgLi4uY3R4LmdldFN0YXRlKCkuY29uZmlnIH0ubm90aWZpY2F0aW9ucztcbiAgICBjb25zdCBub3RpZmljYXRpb25QSyA9IHRoaXMubm90aWZpY2F0aW9uUEsobm90aWZpY2F0aW9uRHRvLCBndWlkKTtcblxuICAgIC8vIFVwZGF0ZSB0aGUgbm90aWZpY2F0aW9uIHdpdGggdGhlIGhhbmRsZSB1c2VyIC0gYW5kIHNhdmUgaW4gc3RhdGVcbiAgICBsZXQgZXhpc3ROb3RpZmljYXRpb25EdG86IE5vdGlmaWNhdGlvbkR0bztcbiAgICBzd2l0Y2ggKG5vdGlmaWNhdGlvbkR0by50eXBlKSB7XG4gICAgICBjYXNlIE5vdGlmaWNhdGlvblR5cGUuRHluYW1pY1ByaWNpbmdDb25kaXRpb246XG4gICAgICAgIGV4aXN0Tm90aWZpY2F0aW9uRHRvID0gbm90aWZpY2F0aW9ucy5maW5kKG5vdGlmaWNhdGlvbiA9PiB0aGlzLnBrTWF0Y2hlcyhub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvblBLKSk7XG4gICAgICAgIHRoaXMuY2xvc2VEaWFsb2dCeUlkKGBkeW5hbWljLXByaWNpbmctY29uZmlybWF0aW9uLW1vZGFsLSR7bm90aWZpY2F0aW9uUEt9YCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIE5vdGlmaWNhdGlvblR5cGUuQWxlcnQ6XG4gICAgICAgIGV4aXN0Tm90aWZpY2F0aW9uRHRvID0gbm90aWZpY2F0aW9ucy5maW5kKG5vdGlmaWNhdGlvbiA9PiB0aGlzLnBrTWF0Y2hlcyhub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvblBLKSAmJlxuICAgICAgICAgIHRoaXMuc3RhdGVNYXRjaGVzKG5vdGlmaWNhdGlvbi5hbGVydCwgbm90aWZpY2F0aW9uRHRvLmFsZXJ0LmV2ZW50U3RhdGUpKTtcblxuICAgICAgICB0aGlzLmNsb3NlRGlhbG9nQnlJZChgbHByLW1pc21hdGNoLW1vZGFsLSR7bm90aWZpY2F0aW9uUEt9YCk7XG4gICAgICAgIHRoaXMuY2xvc2VEaWFsb2dCeUlkKGBsb3N0LXRpY2tldC1tb2RhbC0ke25vdGlmaWNhdGlvblBLfWApO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS5sb2coXCJ1bnN1cHBvcnRlZCBub3RpZmljYXRpb24gdHlwZVwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKGV4aXN0Tm90aWZpY2F0aW9uRHRvKSB7XG4gICAgICBleGlzdE5vdGlmaWNhdGlvbkR0by5oYW5kbGluZ0J5VXNlciA9IG5vdGlmaWNhdGlvbkR0by5oYW5kbGluZ0J5VXNlcjtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgY29uZmlnOiB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmNvbnZlcnROb3RpZmljYXRpb25zVG9Ob3RpZmljYXRpb25zQ29uZmlnKG5vdGlmaWNhdGlvbnMpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ2xvc2UgY3JpdGljYWwgYWxlcnQgbW9kYWxcbiAgICB0aGlzLmNsb3NlRGlhbG9nQnlJZChgbm90aWZpY2F0aW9uLW1vZGFsLSR7bm90aWZpY2F0aW9uUEt9YCk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5Dcml0aWNhbEFsZXJ0RGlhbG9nKGFsZXJ0OiBBbGVydER0bywgZ3VpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgYWxlcnRUeXBlTmFtZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFBlcmlwaGVyYWxFcXVpcG1lbnRFcnJvclthbGVydC5ldmVudERlc2NyaXB0aW9uXSk7XG4gICAgY29uc3QgY2xvdWRDb25maXJtRGlhbG9nRGF0YTogQ2xvdWRDb25maXJtRGlhbG9nRGF0YSA9IHtcbiAgICAgIGNvbmZpcm1NZXNzYWdlczogW3RoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5jcml0aWNhbF9hbGVydF9tZXNzYWdlLCB7XG4gICAgICAgIGFsZXJ0VHlwZU5hbWVcbiAgICAgIH0pXSxcbiAgICAgIGNvbmZpcm1UaXRsZTogYWxlcnRUeXBlTmFtZSxcbiAgICAgIG9rVGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLnllcyksXG4gICAgICBjYW5jZWxUZXh0OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uY2FuY2VsKSxcbiAgICAgIGRldmljZToge1xuICAgICAgICBjb21tSWQ6IGFsZXJ0LnJlYWRlcklELnRvU3RyaW5nKCksXG4gICAgICAgIG5hbWU6IGFsZXJ0LmRldmljZU5hbWVcbiAgICAgIH0sXG4gICAgICBwYXJrTmFtZTogYWxlcnQucGFya05hbWUsXG4gICAgICB6b25lTmFtZTogYWxlcnQucGFya1pvbmVOYW1lLFxuICAgICAgbm90aWZpY2F0aW9uU2V2ZXJpdHk6IE5vdGlmaWNhdGlvblNldmVyaXR5LkNyaXRpY2FsLFxuICAgICAgbm90aWZpY2F0aW9uU2V2ZXJpdHlJbnZlcnQ6IHRydWVcbiAgICB9O1xuXG4gICAgY29uc3QgYWxlcnRQSyA9IHRoaXMuYWxlcnRQSyhhbGVydCwgZ3VpZCk7XG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbjxib29sZWFuPihDbG91ZENvbmZpcm1EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIHBhbmVsQ2xhc3M6IGB0Yi1jcml0aWNhbC1tb2RhbC0ke2FsZXJ0UEt9YCxcbiAgICAgIGRhdGE6IGNsb3VkQ29uZmlybURpYWxvZ0RhdGEsXG4gICAgICBpZDogYG5vdGlmaWNhdGlvbi1tb2RhbC0ke2FsZXJ0UEt9YCxcbiAgICAgIGVuYWJsZWRNaW5pbWl6ZWQ6IHRydWUsXG4gICAgfSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IHVzZXJJbmZvID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTZXNzaW9uU3RhdGUudXNlckluZm8pO1xuICAgICAgICBjb25zdCBoYW5kbGVBbGVydDogSGFuZGxpbmdBbGVydER0byA9IG5ldyBIYW5kbGluZ0FsZXJ0RHRvKHtcbiAgICAgICAgICBndWlkOiBndWlkLFxuICAgICAgICAgIHBhcmtJZDogYWxlcnQucGFya0lkLFxuICAgICAgICAgIHBhcmtOYW1lOiBhbGVydC5wYXJrTmFtZSxcbiAgICAgICAgICBkZXZpY2VJZDogYWxlcnQuZGV2aWNlSUQsXG4gICAgICAgICAgZXZlbnREZXNjcmlwdGlvbjogYWxlcnQuZXZlbnREZXNjcmlwdGlvbixcbiAgICAgICAgICB1c2VyRnVsbE5hbWU6IHVzZXJJbmZvLmRpc3BsYXlOYW1lLFxuICAgICAgICAgIGlkOiBhbGVydC5pZCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZVByb3h5LmhhbmRsZUFsZXJ0Tm90aWZpY2F0aW9uKGhhbmRsZUFsZXJ0KS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLnRyaWdnZXJBbGVydFRvYXN0RXZlbnQocmVzLmRhdGEgfHwgYWxlcnQsIGd1aWQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkR5bmFtaWNQcmljaW5nQ29uZGl0aW9uTm90aWZpY2F0aW9uRGlhbG9nKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjbG91ZENvbmZpcm1EaWFsb2dEYXRhOiBDbG91ZENvbmZpcm1EaWFsb2dEYXRhID0ge1xuICAgICAgY29uZmlybU1lc3NhZ2VzOiBbdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmR5bmFtaWNfcHJpY2luZ19hbGVydF9tZXNzYWdlKV0sXG4gICAgICBjb25maXJtVGl0bGU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5keW5hbWljX3ByaWNpbmdfYWxlcnRfdGl0bGUpLFxuICAgICAgY29uZmlybVN1YlRpdGxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uZHluYW1pY19wcmljaW5nX2FsZXJ0X3N1Yl90aXRsZSwgeyBjb25kaXRpb25OYW1lOiBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24uY29uZGl0aW9uTmFtZSB9KSxcbiAgICAgIG9rVGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLnllcyksXG4gICAgICBjYW5jZWxUZXh0OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uY2FuY2VsKSxcbiAgICB9O1xuXG4gICAgY29uc3Qgbm90aWZpY2F0aW9uUEsgPSB0aGlzLm5vdGlmaWNhdGlvblBLKG5vdGlmaWNhdGlvbiwgZ3VpZCk7XG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbjxib29sZWFuPihDbG91ZENvbmZpcm1EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIHBhbmVsQ2xhc3M6IGB0Yi1keW5hbWljLXByaWNpbmctY29uZGl0aW9uLW1vZGFsLSR7bm90aWZpY2F0aW9uLmlkfWAsXG4gICAgICBkYXRhOiBjbG91ZENvbmZpcm1EaWFsb2dEYXRhLFxuICAgICAgaWQ6IGBub3RpZmljYXRpb24tbW9kYWwtJHtub3RpZmljYXRpb25QS31gLFxuICAgICAgZW5hYmxlZE1pbmltaXplZDogdHJ1ZSxcbiAgICB9KS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgY29uc3QgdXNlckluZm8gPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNlc3Npb25TdGF0ZS51c2VySW5mbyk7XG4gICAgICAgIGNvbnN0IGhhbmRsaW5nRHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG86IEhhbmRsaW5nRHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG8gPSBuZXcgSGFuZGxpbmdEeW5hbWljUHJpY2luZ0NvbmRpdGlvbkR0byh7XG4gICAgICAgICAgY2xvdWRQYXJrSWQ6IG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5jbG91ZFBhcmtJZCxcbiAgICAgICAgICB1c2VyRnVsbE5hbWU6IHVzZXJJbmZvLmRpc3BsYXlOYW1lLFxuICAgICAgICAgIGlkOiBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24uaWQsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2VQcm94eS5oYW5kbGVEeW5hbWljUHJpY2luZ0NvbmRpdGlvbk5vdGlmaWNhdGlvbihoYW5kbGluZ0R5bmFtaWNQcmljaW5nQ29uZGl0aW9uRHRvKS5zdWJzY3JpYmUoYXN5bmMgcmVzID0+IHtcbiAgICAgICAgICBjb25zdCBkcGMgPSByZXMuZGF0YSB8fCBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb247XG4gICAgICAgICAgY29uc3QgcmF0ZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMucmF0ZVNlcnZpY2VQcm94eS5nZXRSYXRlQnlJZChkcGMucmF0ZUlkLCBkcGMuZ3VpZCkpO1xuICAgICAgICAgIGRwYy5yYXRlTmFtZSA9IHJhdGU/LmRhdGE/Lm5hbWU7XG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS50cmlnZ2VyRHluYW1pY1ByaWNpbmdUb2FzdEV2ZW50KHJlcy5kYXRhIHx8IG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwbGF5QWxlcnQoY3R4OiBTdGF0ZUNvbnRleHQ8Tm90aWZpY2F0aW9uc01vZGVsPiwgYWxlcnQ6IEFsZXJ0RHRvLCBndWlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBub3RpZmljYXRpb24gPSB0aGlzLmFsZXJ0Tm90aWZpY2F0aW9uU2VydmljZS5kaXNwbGF5QWxlcnQoYWxlcnQpO1xuICAgIGlmIChub3RpZmljYXRpb24pIHtcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbnNNYXAgPSB7IC4uLmN0eC5nZXRTdGF0ZSgpLm5vdGlmaWNhdGlvbnNNYXAgfTtcbiAgICAgIGNvbnN0IGFsZXJ0UEsgPSB0aGlzLmFsZXJ0UEsoYWxlcnQsIGd1aWQpO1xuICAgICAgbm90aWZpY2F0aW9uc01hcFthbGVydFBLXSA9IG5vdGlmaWNhdGlvbi50b2FzdElkO1xuXG4gICAgICBub3RpZmljYXRpb24ub25UYXAucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLnRyaWdnZXJBbGVydFRvYXN0RXZlbnQoYWxlcnQsIGd1aWQpO1xuICAgICAgfSk7XG5cbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgbm90aWZpY2F0aW9uc01hcCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VEaWFsb2dCeUlkKGRpYWxvZ0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBvcGVuRGlhbG9ncyA9IHRoaXMubW9kYWxTZXJ2aWNlLmdldE9wZW5EaWFsb2dzKCk7XG4gICAgY29uc3QgZGlhbG9nID0gb3BlbkRpYWxvZ3MuZmluZChkaWFsb2cgPT4gZGlhbG9nLmlkID09PSBkaWFsb2dJZCk7XG5cbiAgICBpZiAoZGlhbG9nKSB7XG4gICAgICBkaWFsb2cuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUFsZXJ0Rm9yQ2xvc2luZyhjdHg6IFN0YXRlQ29udGV4dDxOb3RpZmljYXRpb25zTW9kZWw+LCBhbGVydER0bzogQWxlcnREdG8sIGd1aWQ6IHN0cmluZykge1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSB7IC4uLmN0eC5nZXRTdGF0ZSgpLmNvbmZpZyB9Lm5vdGlmaWNhdGlvbnM7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uc01hcCA9IHsgLi4uY3R4LmdldFN0YXRlKCkubm90aWZpY2F0aW9uc01hcCB9O1xuICAgIGNvbnN0IGFsZXJ0UEsgPSB0aGlzLmFsZXJ0UEsoYWxlcnREdG8sIGd1aWQpO1xuXG4gICAgLy8gV2hldGhlciB3ZSB3YW50IHRvIGNsb3NlIG9yIGhhdmUgYSBkdXBsaWNhdGUgYWxlcnRcbiAgICBjb25zdCBhbGVydEV4aXN0cyA9IG5vdGlmaWNhdGlvbnMuZmluZChub3RpZmljYXRpb24gPT5cbiAgICAgIHRoaXMucGtNYXRjaGVzKG5vdGlmaWNhdGlvbiwgYWxlcnRQSykgJiYgdGhpcy5zdGF0ZU1hdGNoZXMobm90aWZpY2F0aW9uLmFsZXJ0LCBhbGVydER0by5ldmVudFN0YXRlKVxuICAgICk7XG4gICAgaWYgKCFhbGVydER0by5ldmVudFN0YXRlIHx8IGFsZXJ0RXhpc3RzKSB7XG4gICAgICBjb25zdCB0b2FzdElkID0gbm90aWZpY2F0aW9uc01hcFthbGVydFBLXTtcbiAgICAgIHRoaXMuYWxlcnROb3RpZmljYXRpb25TZXJ2aWNlLmNsZWFyVG9hc3RzKHRvYXN0SWQpO1xuICAgICAgZGVsZXRlIG5vdGlmaWNhdGlvbnNNYXBbYWxlcnRQS107XG5cbiAgICAgIGNvbnN0IGZpbHRlcmVkTm90aWZpY2F0aW9ucyA9IG5vdGlmaWNhdGlvbnMuZmlsdGVyKG5vdGlmaWNhdGlvbiA9PiAhbm90aWZpY2F0aW9uLmFsZXJ0IHx8ICEodGhpcy5hbGVydFBLKG5vdGlmaWNhdGlvbi5hbGVydCwgbm90aWZpY2F0aW9uLmd1aWQpID09PSBhbGVydFBLKSk7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIG5vdGlmaWNhdGlvbnNNYXAsXG4gICAgICAgIGNvbmZpZzogdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5jb252ZXJ0Tm90aWZpY2F0aW9uc1RvTm90aWZpY2F0aW9uc0NvbmZpZyhmaWx0ZXJlZE5vdGlmaWNhdGlvbnMpLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIENsb3NlIHJlbGV2ZW50IG9wZW4gbW9kYWxzXG4gICAgICB0aGlzLmNsb3NlRGlhbG9nQnlJZChgbm90aWZpY2F0aW9uLW1vZGFsLSR7YWxlcnRQS31gKTtcbiAgICAgIHRoaXMuY2xvc2VEaWFsb2dCeUlkKGBscHItbWlzbWF0Y2gtbW9kYWwtJHthbGVydFBLfWApO1xuICAgICAgdGhpcy5jbG9zZURpYWxvZ0J5SWQoYGxvc3QtdGlja2V0LW1vZGFsLSR7YWxlcnRQS31gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVRyaWdnZXJlZER5bmFtaWNQcmljaW5nQ29uZGl0aW9uTm90aWZpY2F0aW9uKGN0eDogU3RhdGVDb250ZXh0PE5vdGlmaWNhdGlvbnNNb2RlbD4sIG5vdGlmaWNhdGlvbkR0bzogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBub3RpZmljYXRpb25zID0geyAuLi5jdHguZ2V0U3RhdGUoKS5jb25maWcgfS5ub3RpZmljYXRpb25zO1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnNNYXAgPSB7IC4uLmN0eC5nZXRTdGF0ZSgpLm5vdGlmaWNhdGlvbnNNYXAgfTtcblxuICAgIC8vIFdoZXRoZXIgd2Ugd2FudCB0byBjbG9zZSBvciBoYXZlIGEgZHVwbGljYXRlIGFsZXJ0XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uRXhpc3RzID0gbm90aWZpY2F0aW9ucy5maW5kKG5vdGlmaWNhdGlvbiA9PiBub3RpZmljYXRpb24uZ3VpZCA9PT0gbm90aWZpY2F0aW9uRHRvLmd1aWQgJiZcbiAgICAgIG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbj8uY2xvdWRQYXJrSWQgPT09IG5vdGlmaWNhdGlvbkR0by5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5jbG91ZFBhcmtJZCk7XG4gICAgaWYgKG5vdGlmaWNhdGlvbkV4aXN0cykge1xuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uUEsgPSB0aGlzLm5vdGlmaWNhdGlvblBLKG5vdGlmaWNhdGlvbkV4aXN0cywgZ3VpZCk7XG4gICAgICBjb25zdCB0b2FzdElkID0gbm90aWZpY2F0aW9uc01hcFtub3RpZmljYXRpb25QS107XG4gICAgICB0aGlzLmFsZXJ0Tm90aWZpY2F0aW9uU2VydmljZS5jbGVhclRvYXN0cyh0b2FzdElkKTtcbiAgICAgIGRlbGV0ZSBub3RpZmljYXRpb25zTWFwW25vdGlmaWNhdGlvblBLXTtcblxuICAgICAgY29uc3QgZmlsdGVyZWROb3RpZmljYXRpb25zID0gbm90aWZpY2F0aW9ucy5maWx0ZXIobm90aWZpY2F0aW9uID0+XG4gICAgICAgICEodGhpcy5ub3RpZmljYXRpb25QSyhub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5ndWlkKSA9PT0gbm90aWZpY2F0aW9uUEspKTtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgbm90aWZpY2F0aW9uc01hcCxcbiAgICAgICAgY29uZmlnOiB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmNvbnZlcnROb3RpZmljYXRpb25zVG9Ob3RpZmljYXRpb25zQ29uZmlnKGZpbHRlcmVkTm90aWZpY2F0aW9ucyksXG4gICAgICB9KTtcblxuICAgICAgLy8gQ2xvc2UgcmVsZXZlbnQgb3BlbiBtb2RhbHNcbiAgICAgIHRoaXMuY2xvc2VEaWFsb2dCeUlkKGBub3RpZmljYXRpb24tbW9kYWwtJHtub3RpZmljYXRpb25QS31gKTtcbiAgICAgIHRoaXMuY2xvc2VEaWFsb2dCeUlkKGBkeW5hbWljLXByaWNpbmctY29uZmlybWF0aW9uLW1vZGFsLSR7bm90aWZpY2F0aW9uUEt9YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVOb3RpZmljYXRpb25Gb3JDbG9zaW5nKGN0eDogU3RhdGVDb250ZXh0PE5vdGlmaWNhdGlvbnNNb2RlbD4sIG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBub3RpZmljYXRpb25zID0geyAuLi5jdHguZ2V0U3RhdGUoKS5jb25maWcgfS5ub3RpZmljYXRpb25zO1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnNNYXAgPSB7IC4uLmN0eC5nZXRTdGF0ZSgpLm5vdGlmaWNhdGlvbnNNYXAgfTtcbiAgICBjb25zdCBub3RpZmljYXRpb25QSyA9IHRoaXMubm90aWZpY2F0aW9uUEsobm90aWZpY2F0aW9uLCBndWlkKTtcblxuICAgIC8vIFdoZXRoZXIgd2Ugd2FudCB0byBjbG9zZSBvciBoYXZlIGEgZHVwbGljYXRlIGFsZXJ0XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uRXhpc3RzID0gbm90aWZpY2F0aW9ucy5maW5kKG5vdGlmaWNhdGlvbiA9PiB0aGlzLnBrTWF0Y2hlcyhub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvblBLKSk7XG4gICAgaWYgKG5vdGlmaWNhdGlvbkV4aXN0cykge1xuICAgICAgY29uc3QgdG9hc3RJZCA9IG5vdGlmaWNhdGlvbnNNYXBbbm90aWZpY2F0aW9uUEtdO1xuICAgICAgdGhpcy5hbGVydE5vdGlmaWNhdGlvblNlcnZpY2UuY2xlYXJUb2FzdHModG9hc3RJZCk7XG4gICAgICBkZWxldGUgbm90aWZpY2F0aW9uc01hcFtub3RpZmljYXRpb25QS107XG5cbiAgICAgIGNvbnN0IGZpbHRlcmVkTm90aWZpY2F0aW9ucyA9IG5vdGlmaWNhdGlvbnMuZmlsdGVyKG5vdGlmaWNhdGlvbiA9PlxuICAgICAgICAhKHRoaXMubm90aWZpY2F0aW9uUEsobm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ3VpZCkgPT09IG5vdGlmaWNhdGlvblBLKSk7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIG5vdGlmaWNhdGlvbnNNYXAsXG4gICAgICAgIGNvbmZpZzogdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5jb252ZXJ0Tm90aWZpY2F0aW9uc1RvTm90aWZpY2F0aW9uc0NvbmZpZyhmaWx0ZXJlZE5vdGlmaWNhdGlvbnMpLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIENsb3NlIHJlbGV2ZW50IG9wZW4gbW9kYWxzXG4gICAgICB0aGlzLmNsb3NlRGlhbG9nQnlJZChgbm90aWZpY2F0aW9uLW1vZGFsLSR7bm90aWZpY2F0aW9uUEt9YCk7XG4gICAgICB0aGlzLmNsb3NlRGlhbG9nQnlJZChgZHluYW1pYy1wcmljaW5nLWNvbmZpcm1hdGlvbi1tb2RhbC0ke25vdGlmaWNhdGlvblBLfWApO1xuICAgICAgdGhpcy5jbG9zZURpYWxvZ0J5SWQoYGxwci1taXNtYXRjaC1tb2RhbC0ke25vdGlmaWNhdGlvblBLfWApO1xuICAgICAgdGhpcy5jbG9zZURpYWxvZ0J5SWQoYGxvc3QtdGlja2V0LW1vZGFsLSR7bm90aWZpY2F0aW9uUEt9YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZVRyaWdnZXJlZER5bmFtaWNQcmljaW5nQ29uZGl0aW9ucyhjdHg6IFN0YXRlQ29udGV4dDxOb3RpZmljYXRpb25zTW9kZWw+LCBub3RpZmljYXRpb25EdG86IE5vdGlmaWNhdGlvbkR0bywgZ3VpZDogc3RyaW5nKSB7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9ucyA9IHsgLi4uY3R4LmdldFN0YXRlKCkuY29uZmlnIH0ubm90aWZpY2F0aW9ucztcbiAgICBjb25zdCBub3RpZmljYXRpb25zTWFwID0geyAuLi5jdHguZ2V0U3RhdGUoKS5ub3RpZmljYXRpb25zTWFwIH07XG4gICAgY29uc3QgcGFya0lkID0gbm90aWZpY2F0aW9uRHRvPy5keW5hbWljUHJpY2luZ0NvbmRpdGlvbj8ucGFya0lkO1xuXG4gICAgLy8gZmluZCBhbGwgdGhlIGR5bmFtaWMgcHJpY2luZyB0cmlnZ2VyZWQgY29uZGl0aW9ucyBvZiBzYW1lIGd1aWQgYW5kIHBhcmtJZCB0byBiZSBjbG9zZVxuICAgIGNvbnN0IGR5bmFtaWNQcmljaW5nTm90aWZpY2F0aW9uRXhpc3RzID0gbm90aWZpY2F0aW9ucy5maWx0ZXIobm90aWZpY2F0aW9uID0+ICEhbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uICYmIFxuICAgICAgbm90aWZpY2F0aW9uLmd1aWQgPT09IGd1aWQgJiYgbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLnBhcmtJZCA9PT0gcGFya0lkKTtcbiAgICAgIFxuICAgIGlmIChkeW5hbWljUHJpY2luZ05vdGlmaWNhdGlvbkV4aXN0cy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IGRwIG9mIGR5bmFtaWNQcmljaW5nTm90aWZpY2F0aW9uRXhpc3RzKSB7XG4gICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvblBLID0gdGhpcy5ub3RpZmljYXRpb25QSyhkcCwgZ3VpZCk7XG4gICAgICAgIGRlbGV0ZSBub3RpZmljYXRpb25zTWFwW25vdGlmaWNhdGlvblBLXTtcblxuICAgICAgICAvLyBDbG9zZSByZWxldmVudCBvcGVuIG1vZGFsc1xuICAgICAgICB0aGlzLmNsb3NlRGlhbG9nQnlJZChgbm90aWZpY2F0aW9uLW1vZGFsLSR7bm90aWZpY2F0aW9uUEt9YCk7XG4gICAgICAgIHRoaXMuY2xvc2VEaWFsb2dCeUlkKGBkeW5hbWljLXByaWNpbmctY29uZmlybWF0aW9uLW1vZGFsLSR7bm90aWZpY2F0aW9uUEt9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbHRlcmVkTm90aWZpY2F0aW9ucyA9IG5vdGlmaWNhdGlvbnMuZmlsdGVyKG5vdGlmaWNhdGlvbiA9PiAhbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uIHx8ICEobm90aWZpY2F0aW9uLmd1aWQgPT09IGd1aWQgJiYgbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLnBhcmtJZCA9PT0gcGFya0lkKSk7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIG5vdGlmaWNhdGlvbnNNYXAsXG4gICAgICAgIGNvbmZpZzogdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5jb252ZXJ0Tm90aWZpY2F0aW9uc1RvTm90aWZpY2F0aW9uc0NvbmZpZyhmaWx0ZXJlZE5vdGlmaWNhdGlvbnMpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzaG93UmF0ZUF1dG9tYXRpY1N3aXRjaFRvYXN0TWVzc2FnZShub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbkR0bykge1xuICAgIGNvbnN0IGRwYyA9IG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbjtcbiAgICBjb25zdCByYXRlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5yYXRlU2VydmljZVByb3h5LmdldFJhdGVCeUlkKGRwYy5yYXRlSWQsIGRwYy5ndWlkKSk7XG4gICAgZHBjLnJhdGVOYW1lID0gcmF0ZT8uZGF0YT8ubmFtZTtcbiAgICBjb25zdCBtZXNzYWdlcyA9IHRoaXMuZmFjaWxpdHlDb21tYW5kc1NlcnZpY2UuZ2V0Q29tbWFuZE5vdGlmaWNhdGlvbkNvbmZpZ01lc3NhZ2VzKEZhY2lsaXR5UmVtb3RlQ29tbWFuZFR5cGVzLlNldEFjdGl2ZVJhdGUsIG51bGwsIGRwYyk7XG4gICAgY29uc3QgY29uZmlnOiBDb21tYW5kTm90aWZpY2F0aW9uQ29uZmlnID0ge1xuICAgICAgbWVzc2FnZXMsXG4gICAgICBjb21tYW5kOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uZmFjaWxpdHlfcmVtb3RlX2NvbW1hbmRfc2V0X2FjdGl2ZV9yYXRlKSxcbiAgICAgIGhQb3NpdGlvbjogTm90aWZpY2F0aW9uSFBvc2l0aW9ucy5SaWdodCxcbiAgICAgIHZQb3NpdGlvbjogTm90aWZpY2F0aW9uVlBvc2l0aW9ucy5Cb3R0b20sXG4gICAgICBkdXJhdGlvbjogNyAqIE9ORV9TRUNPTkRfSU5fTUlMTElTRUNPTkRTLFxuICAgICAgY2xhc3M6IENvbW1hbmROb3RpZmljYXRpb25Cb3JkZXJDbGFzcy5TdWNjZXNzLFxuICAgICAgdHlwZTogQ29tbWFuZE5vdGlmaWNhdGlvblR5cGUuU3VjY2Vzc1xuICAgIH07XG5cbiAgICB0aGlzLmNvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlLnNob3coY29uZmlnLCBDb21tYW5kTm90aWZpY2F0aW9uQ29tcG9uZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2hvd1JhdGVGYWxsZW5CYWNrVG9EZWZhdWx0UmF0ZVRvYXN0TWVzc2FnZShub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbkR0bykge1xuICAgIGNvbnN0IGRwYyA9IG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbjtcbiAgICBjb25zdCB0aXRsZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5keW5hbWljX3ByaWNpbmdfcmV2ZXJ0ZWRfdG9fZGVmYXVsdF9yYXRlKTtcbiAgICBjb25zdCBzdWJUaXRsZSA9IGAke2RwYy5wYXJraW5nTG90TmFtZX0ke2RwYy56b25lPy5uYW1lID8gJyB8ICcgKyBkcGMuem9uZT8ubmFtZSA6ICcnfWA7XG4gICAgY29uc3QgY29uZmlnOiBDb21tYW5kTm90aWZpY2F0aW9uQ29uZmlnID0ge1xuICAgICAgbWVzc2FnZXM6IFt7XG4gICAgICAgIHZhbHVlOiB0aXRsZSxcbiAgICAgICAgY2xhc3M6IE5vdGlmaWNhdGlvbkNsYXNzLnRpdGxlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IHN1YlRpdGxlLFxuICAgICAgICBjbGFzczogTm90aWZpY2F0aW9uQ2xhc3Muc3ViVGl0bGUsXG4gICAgICB9XSxcbiAgICAgIGNvbW1hbmQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5mYWNpbGl0eV9yZW1vdGVfY29tbWFuZF9zZXRfYWN0aXZlX3JhdGUpLFxuICAgICAgaFBvc2l0aW9uOiBOb3RpZmljYXRpb25IUG9zaXRpb25zLlJpZ2h0LFxuICAgICAgdlBvc2l0aW9uOiBOb3RpZmljYXRpb25WUG9zaXRpb25zLkJvdHRvbSxcbiAgICAgIGR1cmF0aW9uOiA3ICogT05FX1NFQ09ORF9JTl9NSUxMSVNFQ09ORFMsXG4gICAgICBjbGFzczogQ29tbWFuZE5vdGlmaWNhdGlvbkJvcmRlckNsYXNzLlN1Y2Nlc3MsXG4gICAgICB0eXBlOiBDb21tYW5kTm90aWZpY2F0aW9uVHlwZS5TdWNjZXNzXG4gICAgfTtcblxuICAgIHRoaXMuY29tbWFuZE5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvdyhjb25maWcsIENvbW1hbmROb3RpZmljYXRpb25Db21wb25lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0FsZXJ0RW5hYmxlZEZvclVzZXIoYWxlcnQ6IEFsZXJ0RHRvLCBndWlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBsZXQgaXNBbGVydEVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgY29uc3QgdXNlclNldHRpbmdzID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTZXNzaW9uU3RhdGUubWFwcGVkVXNlclNldHRpbmdzKTtcbiAgICBjb25zdCB1c2VyQWxlcnRzUHJlZmVyZW5jZXM6IEFsZXJ0UHJlZmVyZW5jZXNTZXR0aW5nc0R0byA9IHVzZXJTZXR0aW5ncy5nZXQoU2V0dGluZ3NDYXRlZ29yeS5BbGVydHNQcmVmZXJlbmNlcyk7XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBubyB1c2VyQWxlcnRzUHJlZmVyZW5jZXMgd2UgZG9uJ3QgZmlsdGVyIGF0IGFsbFxuICAgIGlmICghIXVzZXJBbGVydHNQcmVmZXJlbmNlcykge1xuICAgICAgLy8gSWYgdGhlIHVzZXIgZW5hYmxlZCB0aGUgbm90aWZpY2F0aW9uc1xuICAgICAgLy8gRWxzZSB0aGUgdXNlciBkaXNhYmxlZCBhbGwgdGhlIG5vdGlmaWNhdGlvbnNcbiAgICAgIGlmICh1c2VyQWxlcnRzUHJlZmVyZW5jZXMuaXNFbmFibGVkKSB7XG4gICAgICAgIGNvbnN0IHNwYXJrVmVyc2lvbiA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoKHsgc21hcnRwYXJrOiB7IHZlcnNpb25zIH0gfSkgPT4gdmVyc2lvbnNbZ3VpZF0pO1xuICAgICAgICBjb25zdCBpc0FsZXJ0RmlsdGVyVmVyc2lvblN1cHBvcnRlZCA9IGlzVmVyc2lvbkdyZWF0ZXJUaGFuRXF1YWwoc3BhcmtWZXJzaW9uLCBWRVJTSU9OXzlfMl8wKTtcblxuICAgICAgICAvLyBJZiB0aGUgdmVyc2lvbiBpcyA5LjEuMCBvciBiZWxvdywgYWxsIG5vdGlmaWNhdGlvbnMgYXJlIGVuYWJsZWRcbiAgICAgICAgLy8gSWYgdGhlIHZlcnNpb24gaXMgOS4yLjAgYW5kIGFib3ZlLCB3ZSBmaWx0ZXIgYnkgdGhlIHByZWZlcmVuY2VzXG4gICAgICAgIGlzQWxlcnRFbmFibGVkID0gIWlzQWxlcnRGaWx0ZXJWZXJzaW9uU3VwcG9ydGVkIHx8IHRoaXMuaXNBbGVydEVuYWJsZWRJblByZWZlcmVuY2VzKGFsZXJ0LCBndWlkLCB1c2VyQWxlcnRzUHJlZmVyZW5jZXMucHJlZmVyZW5jZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNBbGVydEVuYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaXNBbGVydEVuYWJsZWQ7XG4gIH1cblxuICBwcml2YXRlIGlzQWxlcnRFbmFibGVkSW5QcmVmZXJlbmNlcyhhbGVydDogQWxlcnREdG8sIGd1aWQ6IHN0cmluZywgdXNlckFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwOiBBbGVydHNQcmVmZXJlbmNlc01hcCkge1xuICAgIGxldCBpc0FsZXJ0RW5hYmxlZDogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvLyBJZiB3ZSBoYXZlIGFueSBmYWNpbGl0eSBzZWxlY3RlZCwgd2UgY29udGludWUgdG8gY2hlY2tcbiAgICAvLyBFbHNlIHdlIGFsbG93IGFsbCB0byBwYXNzIGFzIHRoZSB1c2VyIGRpZG4ndCBzZXQgcHJlZmVyZW5jZXMgeWV0XG4gICAgaWYgKE9iamVjdC5rZXlzKHVzZXJBbGVydFR5cGVQcmVmZXJlbmNlc01hcCkubGVuZ3RoKSB7XG4gICAgICBpc0FsZXJ0RW5hYmxlZCA9IGZhbHNlO1xuXG4gICAgICAvLyBHZXRzIHRoZSB0cmVlSWQgb2YgdGhlIHRlbmFudCAtIEluIGNhc2UgdGhlIHVzZXIgc2VsZWN0ZWQgXCJBbGwgVGVuYW50IFBhcmtpbmcgTG90c1wiXG4gICAgICBjb25zdCB0ZW5hbnRUcmVlSWQgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNlc3Npb25TdGF0ZS50ZW5hbnRJbmZvKT8udHJlZUlkO1xuXG4gICAgICAvLyBHZXRzIHRoZSB0cmVlIHBhcmsgSWQgb2YgdGhlIGFsZXJ0XG4gICAgICBjb25zdCBhbGVydFRyZWVQYXJrSWQgPSB0aGlzLmdldENsb3VkUGFya0lkKGFsZXJ0LCBndWlkKTtcblxuICAgICAgLy8gV2UgR2V0IHRoZSBzZXR0aW5nIG9mIHRoZSBQYXJrLCBQYXJlbnRQYXJrIG9yIFBhcmtzVHJlZVJvb3RcbiAgICAgIGNvbnN0IGZhY2lsaXR5UHJlZmVyZW5jZXNNYXA6IEZhY2lsaXR5UHJlZmVyZW5jZXNNYXAgPSB1c2VyQWxlcnRUeXBlUHJlZmVyZW5jZXNNYXBbYWxlcnRUcmVlUGFya0lkXSB8fCB1c2VyQWxlcnRUeXBlUHJlZmVyZW5jZXNNYXBbdGVuYW50VHJlZUlkXTtcblxuICAgICAgLy8gV2UgY2hlY2sgaWYgdGhlIGZhY2lsaXR5IHdhcyBzZWxlY3RlZFxuICAgICAgaWYgKGZhY2lsaXR5UHJlZmVyZW5jZXNNYXApIHtcbiAgICAgICAgY29uc3QgYWxlcnRUeXBlUHJlZmVyZW5jZXNNYXA6IEFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwID0gZmFjaWxpdHlQcmVmZXJlbmNlc01hcFthbGVydC5ldmVudERlc2NyaXB0aW9uXTtcblxuICAgICAgICAvLyBXZSBjaGVjayBpZiB0aGUgYWxlcnQgdHlwZSB3YXMgc2VsZWN0ZWRcbiAgICAgICAgaWYgKGFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwKSB7XG4gICAgICAgICAgY29uc3QgYWxlcnREZXZpY2VUeXBlOiBBbGVydHNEZXZpY2VUeXBlID0gdGhpcy5nZXRBbGVydHNEZXZpY2VUeXBlKGFsZXJ0KVxuXG4gICAgICAgICAgLy8gV2UgY2hlY2sgdGhlIGlmIHRoZSBkZXZpY2UgdHlwZSB3YXMgc2VsZWN0ZWRcbiAgICAgICAgICBpc0FsZXJ0RW5hYmxlZCA9IGFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwW2FsZXJ0RGV2aWNlVHlwZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaXNBbGVydEVuYWJsZWQ7XG4gIH1cblxuICBwcml2YXRlIGdldEFsZXJ0c0RldmljZVR5cGUoYWxlcnQ6IEFsZXJ0RHRvKTogQWxlcnRzRGV2aWNlVHlwZSB7XG4gICAgbGV0IGFsZXJ0RGV2aWNlVHlwZTogQWxlcnRzRGV2aWNlVHlwZTtcbiAgICBjb25zdCBhbGVydHNEZXZpY2VUeXBlOiBBbGVydHNEZXZpY2VUeXBlW10gPSBEZXZpY2VUeXBlc0FsZXJ0c01hcHBpbmcuZ2V0KGFsZXJ0LmRldmljZVR5cGUpO1xuXG4gICAgc3dpdGNoIChhbGVydC5kZXZpY2VUeXBlKSB7XG4gICAgICBjYXNlIERldmljZVR5cGUuQ2FzaDpcbiAgICAgICAgYWxlcnREZXZpY2VUeXBlID0gYWxlcnQucmVhZGVySUQgPT09IDAgPyBBbGVydHNEZXZpY2VUeXBlLk1hc3RlciA6IEFsZXJ0c0RldmljZVR5cGUuQ2FzaFJlZ2lzdGVyO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFsZXJ0RGV2aWNlVHlwZSA9IGFsZXJ0c0RldmljZVR5cGU/LlswXTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFsZXJ0RGV2aWNlVHlwZTtcbiAgfVxuXG4gIHByaXZhdGUgb25EeWFubWljUHJpY2luZ0NvbmRpdGlvbkNoYW5nZShjdHg6IFN0YXRlQ29udGV4dDxOb3RpZmljYXRpb25zTW9kZWw+LCBub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbkR0bywgZ3VpZDogc3RyaW5nKSB7XG4gICAgdGhpcy5oYW5kbGVOb3RpZmljYXRpb25Gb3JDbG9zaW5nKGN0eCwgbm90aWZpY2F0aW9uLCBndWlkKTtcbiAgICB0aGlzLmhhbmRsZVRyaWdnZXJlZER5bmFtaWNQcmljaW5nQ29uZGl0aW9uTm90aWZpY2F0aW9uKGN0eCwgbm90aWZpY2F0aW9uLCBndWlkKTtcblxuICAgIGxldCBpc0ZhbGxlbkJhY2tUb0RlZmF1bHRSYXRlID0gIW5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5pc1RyaWdnZXJlZDtcbiAgICBsZXQgaXNBdXRvbWF0aWNTd2l0Y2hSYXRlID0gbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLnRyaWdnZXJBY3Rpb24gPT09IER5bmFtaWNQcmljaW5nVHJpZ2dlckFjdGlvbi5BdXRvbWF0aWNTd2l0Y2hSYXRlO1xuICAgIGlmIChpc0ZhbGxlbkJhY2tUb0RlZmF1bHRSYXRlKSB7XG4gICAgICBpZiAobm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLmlzQWN0aXZhdGVkKSB7XG4gICAgICAgIC8vIGhhbmRsZSBub3RpZmljYXRpb24gaW5kaWNhdGluZyB0aGUgcmF0ZSBoYXMgZmFsbGVuIGJhY2sgdG8gdGhlIGRlZmF1bHQgcmF0ZVxuICAgICAgICB0aGlzLnNob3dSYXRlRmFsbGVuQmFja1RvRGVmYXVsdFJhdGVUb2FzdE1lc3NhZ2Uobm90aWZpY2F0aW9uKS50aGVuKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0F1dG9tYXRpY1N3aXRjaFJhdGUpIHtcbiAgICAgIC8vIGhhbmRsZSBub3RpZmljYXRpb24gaW5kaWNhdGluZyB0aGUgcmF0ZSBoYXMgYXV0b21hdGljIHN3aXRjaFxuICAgICAgdGhpcy5zaG93UmF0ZUF1dG9tYXRpY1N3aXRjaFRvYXN0TWVzc2FnZShub3RpZmljYXRpb24pLnRoZW4oKTtcbiAgICAgIHRoaXMuY2xvc2VUcmlnZ2VyZWREeW5hbWljUHJpY2luZ0NvbmRpdGlvbnMoY3R4LCBub3RpZmljYXRpb24sIGd1aWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXZSBkbyBub3Qgb3BlbiB0aGUgbm90aWZpY2F0aW9uIGlmIHVzZXIgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uXG4gICAgICBjb25zdCBoYXNQZXJtaXNzaW9uID0gdGhpcy5mYWNpbGl0eVNlcnZpY2UuaGFzUGVybWlzc2lvblR5cGVCeVBhcmsoXG4gICAgICAgIFBlcm1pc3Npb25UeXBlLkxvdENvbmZpZ3VyYXRpb25EeW5hbWljUHJpY2luZywgbm90aWZpY2F0aW9uLmd1aWQsIG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5wYXJraW5nTG90SWRcbiAgICAgICk7XG4gICAgICAvLyBXZSBkbyBub3Qgb3BlbiB0aGUgbm90aWZpY2F0aW9uIGluIG1vYmlsZSBtb2RlXG4gICAgICBjb25zdCBpc01vYmlsZUFwcE1vZGUgPSB0aGlzLmFwcENvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuYXBwVHlwZSA9PT0gQXBwVHlwZS5Nb2JpbGU7XG4gICAgICBjb25zdCBpc0NjTW9kdWxlID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTaWRlbmF2U3RhdGUuYXBwTW9kdWxlKSA9PT0gQXBwTW9kdWxlLkNjO1xuICAgICAgaWYgKCFpc01vYmlsZUFwcE1vZGUgJiYgaXNDY01vZHVsZSAmJiBoYXNQZXJtaXNzaW9uKSB7XG4gICAgICAgIHRoaXMub3BlbkR5bmFtaWNQcmljaW5nQ29uZGl0aW9uTm90aWZpY2F0aW9uRGlhbG9nKG5vdGlmaWNhdGlvbiwgZ3VpZCk7XG5cbiAgICAgICAgLy8gUHVzaCB0aGUgbmV3IG5vdGlmaWNhdGlvbiB0byB0aGUgYXJyYXkgYW5kIHNhdmUgaW4gc3RhdGVcbiAgICAgICAgbm90aWZpY2F0aW9uLnRpbWVBZ29JblNlY29uZHMgPSB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmdldFRpbWVBZ29JblNlY29uZHMobm90aWZpY2F0aW9uKTtcbiAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9ucyA9IHsgLi4uY3R4LmdldFN0YXRlKCkuY29uZmlnIH0ubm90aWZpY2F0aW9ucztcbiAgICAgICAgbm90aWZpY2F0aW9ucy51bnNoaWZ0KG5vdGlmaWNhdGlvbik7XG5cbiAgICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICAgIGNvbmZpZzogdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5jb252ZXJ0Tm90aWZpY2F0aW9uc1RvTm90aWZpY2F0aW9uc0NvbmZpZyhub3RpZmljYXRpb25zKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvbkFsZXJ0Q2hhbmdlKGN0eDogU3RhdGVDb250ZXh0PE5vdGlmaWNhdGlvbnNNb2RlbD4sIG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhbGVydCA9IG5vdGlmaWNhdGlvbj8uYWxlcnQ7XG4gICAgaWYgKGFsZXJ0ICYmIHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UuaXNBbGVydFR5cGVEZWZpbmVkKGFsZXJ0LmV2ZW50RGVzY3JpcHRpb24pKSB7XG4gICAgICB0aGlzLmhhbmRsZUFsZXJ0Rm9yQ2xvc2luZyhjdHgsIGFsZXJ0LCBndWlkKTtcblxuICAgICAgaWYgKGFsZXJ0LmV2ZW50U3RhdGUgJiYgdGhpcy5pc0FsZXJ0RW5hYmxlZEZvclVzZXIoYWxlcnQsIGd1aWQpKSB7XG4gICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSB7IC4uLmN0eC5nZXRTdGF0ZSgpLmNvbmZpZyB9Lm5vdGlmaWNhdGlvbnM7XG5cbiAgICAgICAgaWYgKCFhbGVydC5kZXZpY2VOYW1lKSB7XG4gICAgICAgICAgY29uc3QgcGFya0RldmljZXMgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFBhcmtNYW5hZ2VyU3RhdGUuZGV2aWNlcyk7XG4gICAgICAgICAgYWxlcnQuZGV2aWNlTmFtZSA9IHBhcmtEZXZpY2VzPy5maW5kKGQgPT4gZC5pZCA9PT0gYWxlcnQuZGV2aWNlSUQpPy5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFhbGVydC5wYXJrTmFtZSkge1xuICAgICAgICAgIGNvbnN0IGxvdHNNYXAgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuZmFjaWxpdHlEaWN0aW9uYXJ5KVtndWlkXTtcbiAgICAgICAgICBpZiAobG90c01hcCkge1xuICAgICAgICAgICAgYWxlcnQucGFya05hbWUgPSBsb3RzTWFwW2FsZXJ0LnBhcmtJZF0/Lm5hbWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYWxlcnQucGFya1pvbmVOYW1lID0gXCJcIjtcblxuICAgICAgICAvLyBXZSBkbyBub3Qgb3BlbiB0aGUgbm90aWZpY2F0aW9uIGluIG1vYmlsZSBtb2RlXG4gICAgICAgIGNvbnN0IGlzTW9iaWxlQXBwTW9kZSA9IHRoaXMuYXBwQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5hcHBUeXBlID09PSBBcHBUeXBlLk1vYmlsZTtcbiAgICAgICAgY29uc3QgaXNDY01vZHVsZSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2lkZW5hdlN0YXRlLmFwcE1vZHVsZSkgPT09IEFwcE1vZHVsZS5DYztcbiAgICAgICAgaWYgKCFpc01vYmlsZUFwcE1vZGUgJiYgaXNDY01vZHVsZSkge1xuICAgICAgICAgIHN3aXRjaCAoYWxlcnQuZXZlbnREZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgY2FzZSBQZXJpcGhlcmFsRXF1aXBtZW50RXJyb3IuTE9TVF9USUNLRVQ6XG4gICAgICAgICAgICBjYXNlIFBlcmlwaGVyYWxFcXVpcG1lbnRFcnJvci5MUlBfTk9UX01BVENIOlxuICAgICAgICAgICAgICB0aGlzLm9wZW5Dcml0aWNhbEFsZXJ0RGlhbG9nKGFsZXJ0LCBndWlkKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlBbGVydChjdHgsIGFsZXJ0LCBndWlkKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHVzaCB0aGUgbmV3IGFsZXJ0IHRvIHRoZSBhcnJheSBhbmQgc2F2ZSBpbiBzdGF0ZVxuICAgICAgICBub3RpZmljYXRpb24udGltZUFnb0luU2Vjb25kcyA9IHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UuZ2V0VGltZUFnb0luU2Vjb25kcyhub3RpZmljYXRpb24pO1xuICAgICAgICBub3RpZmljYXRpb25zLnVuc2hpZnQobm90aWZpY2F0aW9uKTtcblxuICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgICAgY29uZmlnOiB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmNvbnZlcnROb3RpZmljYXRpb25zVG9Ob3RpZmljYXRpb25zQ29uZmlnKG5vdGlmaWNhdGlvbnMpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldENsb3VkUGFya0lkKGFsZXJ0OiBBbGVydER0bywgZ3VpZDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBhbGVydFBhcmtJZCA9IGFsZXJ0Lm11bHRpUGFya1BhcmVudElkID4gMCA/IGFsZXJ0Lm11bHRpUGFya1BhcmVudElkIDogYWxlcnQucGFya0lkO1xuICAgIGNvbnN0IGxvdHNNYXAgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuZmFjaWxpdHlEaWN0aW9uYXJ5KVtndWlkXTtcbiAgICByZXR1cm4gbG90c01hcFthbGVydFBhcmtJZF0/LmNsb3VkSWQ7XG4gIH1cblxuICBwcml2YXRlIHBrTWF0Y2hlcyA9IChub3RpZmljYXRpb25EdG86IE5vdGlmaWNhdGlvbkR0bywgbm90aWZpY2F0aW9uUEs6IHN0cmluZykgPT4gdGhpcy5ub3RpZmljYXRpb25QSyhub3RpZmljYXRpb25EdG8sIG5vdGlmaWNhdGlvbkR0by5ndWlkKSA9PT0gbm90aWZpY2F0aW9uUEs7XG4gIHByaXZhdGUgc3RhdGVNYXRjaGVzID0gKGFsZXJ0RHRvOiBBbGVydER0bywgZXZlbnRTdGF0ZTogYm9vbGVhbikgPT4gYWxlcnREdG8uZXZlbnRTdGF0ZSA9PT0gZXZlbnRTdGF0ZTtcbiAgcHJpdmF0ZSBhbGVydFBLID0gKGFsZXJ0RHRvOiBBbGVydER0bywgZ3VpZDogc3RyaW5nKSA9PlxuICAgIGAke2d1aWR9XyR7YWxlcnREdG8ucGFya0lkfV8ke2FsZXJ0RHRvLnJlYWRlcklEfV8ke2FsZXJ0RHRvLmRldmljZUlEfV8ke2FsZXJ0RHRvLmV2ZW50RGVzY3JpcHRpb259YDtcbiAgcHJpdmF0ZSBub3RpZmljYXRpb25QSyhub3RpZmljYXRpb25EdG86IE5vdGlmaWNhdGlvbkR0bywgZ3VpZDogc3RyaW5nKSB7XG4gICAgbGV0IGtleTogc3RyaW5nID0gJyc7XG4gICAgc3dpdGNoIChub3RpZmljYXRpb25EdG8udHlwZSkge1xuICAgICAgY2FzZSBOb3RpZmljYXRpb25UeXBlLkFsZXJ0OlxuICAgICAgICBrZXkgPSB0aGlzLmFsZXJ0UEsobm90aWZpY2F0aW9uRHRvLmFsZXJ0LCBndWlkKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uVHlwZS5EeW5hbWljUHJpY2luZ0NvbmRpdGlvbjpcbiAgICAgICAga2V5ID0gYCR7Z3VpZH1fJHtub3RpZmljYXRpb25EdG8uZHluYW1pY1ByaWNpbmdDb25kaXRpb24uaWR9YDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUubG9nKFwidW5zdXBwb3J0ZWQgbm90aWZpY2F0aW9uIHR5cGVcIik7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBrZXk7XG4gIH1cbn1cbiJdfQ==
554
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9ucy5zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1zaGFyZWQtbGliL3NyYy9saWJyYXJpZXMvbW9kdWxlcy9ub3RpZmljYXRpb25zL25vdGlmaWNhdGlvbnMuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUF1QixNQUFNLGFBQWEsQ0FBQztBQUMzRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFFbkgsT0FBTyxFQUFFLDhCQUE4QixFQUE2Qix1QkFBdUIsRUFBRSxNQUFNLGdGQUFnRixDQUFDO0FBQ3BMLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG1GQUFtRixDQUFDO0FBRWpJLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3RJLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTdELE9BQU8sRUFBeUMsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSwyQkFBMkIsRUFBRSwwQkFB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QUdEO0lBREMsTUFBTSxDQUFDLDRCQUE0QixDQUFDO3dFQUdwQztBQUdLO0lBREwsTUFBTSxDQUFDLHdCQUF3QixDQUFDO29FQWVoQztBQUdEO0lBREMsTUFBTSxDQUFDLHdCQUF3QixDQUFDO29FQU9oQztBQTdFTTtJQUROLFFBQVEsRUFBRTtzQ0FHVjtBQXBCVSxrQkFBa0I7SUFiOUIsS0FBSyxDQUFxQjtRQUN6QixJQUFJLEVBQUUsZUFBZTtRQUNyQixRQUFRLEVBQUU7WUFDUixNQUFNLEVBQUU7Z0JBQ04sYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLDhCQUE4QixFQUFFLG9CQUFvQixDQUFDLEdBQUc7Z0JBQ3hELFVBQVUsRUFBRSxDQUFDO2dCQUNiLFlBQVksRUFBRSxLQUFLO2FBQ3BCO1lBQ0QsZ0JBQWdCLEVBQUUsRUFBRTtTQUNyQjtLQUNGLENBQUM7R0FFVyxrQkFBa0IsQ0EyakI5QjtTQTNqQlksa0JBQWtCOzRGQUFsQixrQkFBa0I7a0JBRDlCLFVBQVU7d2RBd0JULG1DQUFtQyxNQVVuQyx5QkFBeUIsTUFjekIsMEJBQTBCLE1BYTFCLGlCQUFpQixNQU9qQiw4QkFBOEIsTUFLeEIsMEJBQTBCLE1BaUJoQywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBBY3Rpb24sIFNlbGVjdG9yLCBTdGF0ZSwgU3RhdGVDb250ZXh0LCBTdG9yZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDbG91ZENvbmZpcm1EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2Nsb3VkLWNvbmZpcm0tZGlhbG9nL2Nsb3VkLWNvbmZpcm0tZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBbGVydE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi9hbGVydC1ub3RpZmljYXRpb24vYWxlcnQtbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tbWFuZE5vdGlmaWNhdGlvbkJvcmRlckNsYXNzLCBDb21tYW5kTm90aWZpY2F0aW9uQ29uZmlnLCBDb21tYW5kTm90aWZpY2F0aW9uVHlwZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uLWNvbmZpZyc7XG5pbXBvcnQgeyBDb21tYW5kTm90aWZpY2F0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ub3RpZmljYXRpb24vY29tbWFuZC1ub3RpZmljYXRpb24vY29tbWFuZC1ub3RpZmljYXRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IENvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ub3RpZmljYXRpb24vY29tbWFuZC1ub3RpZmljYXRpb24vY29tbWFuZC1ub3RpZmljYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25DbGFzcywgTm90aWZpY2F0aW9uSFBvc2l0aW9ucywgTm90aWZpY2F0aW9uVlBvc2l0aW9ucyB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL25vdGlmaWNhdGlvbi1jb25maWcnO1xuaW1wb3J0IHsgT05FX1NFQ09ORF9JTl9NSUxMSVNFQ09ORFMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZ2xvYmFsLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBWRVJTSU9OXzlfMl8wIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3ZlcnNpb24tY29uc3RhbnRzJztcbmltcG9ydCB7IERldmljZVR5cGVzQWxlcnRzTWFwcGluZyB9IGZyb20gJy4uLy4uL2VudW1zL2FsZXJ0cy1kZXZpY2UtdHlwZS5lbnVtJztcbmltcG9ydCB7IEFwcFR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcy9hcHAtdHlwZS5lbnVtJztcbmltcG9ydCB7IExvY2FsaXphdGlvbiB9IGZyb20gJy4uLy4uL2VudW1zL2xvY2FsaXphdGlvbi5lbnVtJztcbmltcG9ydCB7IENsb3VkQ29uZmlybURpYWxvZ0RhdGEgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2Nsb3VkLWNvbmZpcm0tZGlhbG9nLWRhdGEuaW50ZXJmYWNlJztcbmltcG9ydCB7IEFsZXJ0RHRvLCBBbGVydFByZWZlcmVuY2VzU2V0dGluZ3NEdG8sIEFsZXJ0c0RldmljZVR5cGUsIEFwcE1vZHVsZSwgRGV2aWNlVHlwZSwgRHluYW1pY1ByaWNpbmdUcmlnZ2VyQWN0aW9uLCBGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlcywgSGFuZGxpbmdBbGVydER0bywgSGFuZGxpbmdEeW5hbWljUHJpY2luZ0NvbmRpdGlvbkR0bywgTm90aWZpY2F0aW9uRHRvLCBOb3RpZmljYXRpb25TZXJ2aWNlUHJveHksIE5vdGlmaWNhdGlvblNldmVyaXR5LCBOb3RpZmljYXRpb25UeXBlLCBQZXJpcGhlcmFsRXF1aXBtZW50RXJyb3IsIFBlcm1pc3Npb25UeXBlLCBTZXR0aW5nc0NhdGVnb3J5LCBTcGFya1NldHRpbmdzRHRvIH0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9jbG91ZC1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgUmF0ZVNlcnZpY2VQcm94eSwgWm9uZVNlcnZpY2VQcm94eSB9IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvZWRnZS1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgQmFzZUZhY2lsaXR5Q29tbWFuZHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBNb2RhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tb2RhbC5zZXJ2aWNlJztcbmltcG9ydCB7IE51bWJlck1hcCB9IGZyb20gJy4uLy4uL3V0aWxzL2xhbmcudXRpbCc7XG5pbXBvcnQgeyBpc1ZlcnNpb25HcmVhdGVyVGhhbkVxdWFsIH0gZnJvbSAnLi4vLi4vdXRpbHMvc3VwcG9ydC12ZXJzaW9uLnV0aWwnO1xuaW1wb3J0IHsgU2Vzc2lvblN0YXRlIH0gZnJvbSAnLi4vYXV0aC9zZXNzaW9uLnN0YXRlJztcbmltcG9ydCB7IEZhY2lsaXR5U2VydmljZSB9IGZyb20gJy4uL2ZhY2lsaXR5JztcbmltcG9ydCB7IEZhY2lsaXR5U3RhdGUgfSBmcm9tICcuLi9mYWNpbGl0eS9mYWNpbGl0eS5zdGF0ZSc7XG5pbXBvcnQgeyBQYXJrTWFuYWdlclN0YXRlIH0gZnJvbSAnLi4vcGFyay1tYW5hZ2VyL3BhcmstbWFuYWdlci5zdGF0ZSc7XG5pbXBvcnQgeyBTaWRlbmF2U3RhdGUgfSBmcm9tICcuLi9zaWRlbmF2L3NpZGVuYXYuc3RhdGUnO1xuaW1wb3J0IHsgVXBkYXRlVXNlclNldHRpbmdzQWN0aW9uIH0gZnJvbSAnLi4vdXNlci1zZXR0aW5ncy91c2VyLXNldHRpbmdzLmFjdGlvbnMnO1xuaW1wb3J0IHtcbiAgQ2xlYXJOb3RpZmljYXRpb25zQWN0aW9uLCBIYW5kbGVOb3RpZmljYXRpb25BY3Rpb24sIEhhbmRsZU5vdGlmaWNhdGlvbkZvckNsb3NpbmcsIExvYWROb3RpZmljYXRpb25zQWN0aW9uLFxuICBOb3RpZmljYXRpb25DaGFuZ2VBY3Rpb24sXG4gIFNldE5vdGlmaWNhdGlvbnNDb25maWdBY3Rpb24sIFVwZGF0ZVVzZXJBbGVydHNQcmVmZXJlbmNlc0FjdGlvblxufSBmcm9tICcuL25vdGlmaWNhdGlvbnMuYWN0aW9ucyc7XG5pbXBvcnQgeyBBbGVydHNQcmVmZXJlbmNlc01hcCwgQWxlcnRUeXBlUHJlZmVyZW5jZXNNYXAsIEZhY2lsaXR5UHJlZmVyZW5jZXNNYXAsIE5vdGlmaWNhdGlvbnNDb25maWcgfSBmcm9tICcuL25vdGlmaWNhdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi9ub3RpZmljYXRpb25zLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWNhdGlvbnNNb2RlbCB7XG4gIGNvbmZpZzogTm90aWZpY2F0aW9uc0NvbmZpZztcbiAgbm90aWZpY2F0aW9uc01hcDogTnVtYmVyTWFwPG51bWJlcj47XG59XG5cbkBTdGF0ZTxOb3RpZmljYXRpb25zTW9kZWw+KHtcbiAgbmFtZTogJ25vdGlmaWNhdGlvbnMnLFxuICBkZWZhdWx0czoge1xuICAgIGNvbmZpZzoge1xuICAgICAgbm90aWZpY2F0aW9uczogW10sXG4gICAgICBhZ2dyZWdhdGVkTm90aWZpY2F0aW9uU2V2ZXJpdHk6IE5vdGlmaWNhdGlvblNldmVyaXR5LkxvdyxcbiAgICAgIGJhZGdlVmFsdWU6IDAsXG4gICAgICBkaXNwbGF5QmFkZ2U6IGZhbHNlLFxuICAgIH0sXG4gICAgbm90aWZpY2F0aW9uc01hcDoge30sXG4gIH0sXG59KVxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvbnNTdGF0ZSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmUsXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlUHJveHk6IE5vdGlmaWNhdGlvblNlcnZpY2VQcm94eSxcbiAgICBwcml2YXRlIGFsZXJ0Tm90aWZpY2F0aW9uU2VydmljZTogQWxlcnROb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uc1NlcnZpY2U6IE5vdGlmaWNhdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29tbWFuZE5vdGlmaWNhdGlvblNlcnZpY2U6IENvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZmFjaWxpdHlDb21tYW5kc1NlcnZpY2U6IEJhc2VGYWNpbGl0eUNvbW1hbmRzU2VydmljZSxcbiAgICBwcml2YXRlIGZhY2lsaXR5U2VydmljZTogRmFjaWxpdHlTZXJ2aWNlLFxuICAgIHByaXZhdGUgem9uZVNlcnZpY2VQcm94eTogWm9uZVNlcnZpY2VQcm94eSxcbiAgICBwcml2YXRlIHJhdGVTZXJ2aWNlUHJveHk6IFJhdGVTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBhcHBDb25maWdTZXJ2aWNlOiBBcHBDb25maWdTZXJ2aWNlKSB7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgY29uZmlnKHN0YXRlOiBOb3RpZmljYXRpb25zTW9kZWwpOiBOb3RpZmljYXRpb25zQ29uZmlnIHtcbiAgICByZXR1cm4gc3RhdGUuY29uZmlnO1xuICB9XG5cbiAgQEFjdGlvbihVcGRhdGVVc2VyQWxlcnRzUHJlZmVyZW5jZXNBY3Rpb24pXG4gIG9uVXBkYXRlVXNlckFsZXJ0c1ByZWZlcmVuY2VzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PE5vdGlmaWNhdGlvbnNNb2RlbD4sIGFjdGlvbjogVXBkYXRlVXNlckFsZXJ0c1ByZWZlcmVuY2VzQWN0aW9uKSB7XG4gICAgY29uc3Qgc2V0dGluZzogU3BhcmtTZXR0aW5nc0R0byA9IG5ldyBTcGFya1NldHRpbmdzRHRvKHtcbiAgICAgIGNhdGVnb3J5OiBTZXR0aW5nc0NhdGVnb3J5LkFsZXJ0c1ByZWZlcmVuY2VzLFxuICAgICAgc2V0dGluZ3NKc29uOiBKU09OLnN0cmluZ2lmeShhY3Rpb24udXNlck5vdGlmaWNhdGlvbnNQcmVmZXJlbmNlcyksXG4gICAgfSk7XG5cbiAgICBjdHguZGlzcGF0Y2gobmV3IFVwZGF0ZVVzZXJTZXR0aW5nc0FjdGlvbihzZXR0aW5nKSk7XG4gIH1cblxuICBAQWN0aW9uKExvYWROb3RpZmljYXRpb25zQWN0aW9uKVxuICBvbkxvYWROb3RpZmljYXRpb25zQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PE5vdGlmaWNhdGlvbnNNb2RlbD4sIHsgbWludXRlc0FnbyB9OiBMb2FkTm90aWZpY2F0aW9uc0FjdGlvbikge1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnMkID0gdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlUHJveHkuZ2V0QWxsTm90aWZpY2F0aW9ucyhtaW51dGVzQWdvKTtcblxuICAgIHJldHVybiBub3RpZmljYXRpb25zJC5waXBlKHRhcChhc3luYyBub3RpZmljYXRpb25zID0+IHtcbiAgICAgIGNvbnN0IHBvcHVsYXRlTm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uRHRvW10gPSBhd2FpdCB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLnBvcHVsYXRlTm90aWZpY2F0aW9ucyhub3RpZmljYXRpb25zLmRhdGEpO1xuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uc0NvbmZpZzogTm90aWZpY2F0aW9uc0NvbmZpZyA9IHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UuY29udmVydE5vdGlmaWNhdGlvbnNUb05vdGlmaWNhdGlvbnNDb25maWcocG9wdWxhdGVOb3RpZmljYXRpb25zKTtcblxuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBjb25maWc6IG5vdGlmaWNhdGlvbnNDb25maWcsXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKENsZWFyTm90aWZpY2F0aW9uc0FjdGlvbilcbiAgb25DbGVhck5vdGlmaWNhdGlvbnNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8Tm90aWZpY2F0aW9uc01vZGVsPiwgYWN0aW9uOiBDbGVhck5vdGlmaWNhdGlvbnNBY3Rpb24pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBjb25maWc6IHtcbiAgICAgICAgbm90aWZpY2F0aW9uczogW10sXG4gICAgICAgIGFnZ3JlZ2F0ZWROb3RpZmljYXRpb25TZXZlcml0eTogTm90aWZpY2F0aW9uU2V2ZXJpdHkuTG93LFxuICAgICAgICBiYWRnZVZhbHVlOiAwLFxuICAgICAgICBkaXNwbGF5QmFkZ2U6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIG5vdGlmaWNhdGlvbnNNYXA6IHt9LFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihTZXROb3RpZmljYXRpb25zQ29uZmlnQWN0aW9uKVxuICBvblNldENvbmZpZ0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxOb3RpZmljYXRpb25zTW9kZWw+LCBhY3Rpb246IFNldE5vdGlmaWNhdGlvbnNDb25maWdBY3Rpb24pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBjb25maWc6IGFjdGlvbi5ub3RpZmljYXRpb25zQ29uZmlnLFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihIYW5kbGVOb3RpZmljYXRpb25Gb3JDbG9zaW5nKVxuICBvbkhhbmRsZU5vdGlmaWNhdGlvbkZvckNsb3NpbmcoY3R4OiBTdGF0ZUNvbnRleHQ8Tm90aWZpY2F0aW9uc01vZGVsPiwgeyBub3RpZmljYXRpb24sIGd1aWQgfTogSGFuZGxlTm90aWZpY2F0aW9uRm9yQ2xvc2luZykge1xuICAgIHRoaXMuaGFuZGxlTm90aWZpY2F0aW9uRm9yQ2xvc2luZyhjdHgsIG5vdGlmaWNhdGlvbiwgZ3VpZCk7XG4gIH1cblxuICBAQWN0aW9uKE5vdGlmaWNhdGlvbkNoYW5nZUFjdGlvbilcbiAgYXN5bmMgb25Ob3RpZmljYXRpb25DaGFuZ2VBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8Tm90aWZpY2F0aW9uc01vZGVsPiwgeyBub3RpZmljYXRpb24sIGd1aWQgfTogTm90aWZpY2F0aW9uQ2hhbmdlQWN0aW9uKSB7XG4gICAgc3dpdGNoIChub3RpZmljYXRpb24udHlwZSkge1xuICAgICAgY2FzZSBOb3RpZmljYXRpb25UeXBlLkFsZXJ0OlxuICAgICAgICB0aGlzLm9uQWxlcnRDaGFuZ2UoY3R4LCBub3RpZmljYXRpb24sIGd1aWQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBOb3RpZmljYXRpb25UeXBlLkR5bmFtaWNQcmljaW5nQ29uZGl0aW9uOlxuICAgICAgICB0aGlzLm9uRHlhbm1pY1ByaWNpbmdDb25kaXRpb25DaGFuZ2UoY3R4LCBub3RpZmljYXRpb24sIGd1aWQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS5sb2coXCJ1bnN1cHBvcnRlZCBub3RpZmljYXRpb24gdHlwZVwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihIYW5kbGVOb3RpZmljYXRpb25BY3Rpb24pXG4gIG9uSGFuZGxlTm90aWZpY2F0aW9uQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PE5vdGlmaWNhdGlvbnNNb2RlbD4sIHsgbm90aWZpY2F0aW9uRHRvLCBndWlkIH06IEhhbmRsZU5vdGlmaWNhdGlvbkFjdGlvbikge1xuICAgIGlmIChub3RpZmljYXRpb25EdG8uZHluYW1pY1ByaWNpbmdDb25kaXRpb24/LmhhbmRsZWRCeVVzZXJJZCA+IDApIHtcbiAgICAgIHRoaXMuaGFuZGxlTm90aWZpY2F0aW9uRm9yQ2xvc2luZyhjdHgsIG5vdGlmaWNhdGlvbkR0bywgZ3VpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvY2Vzc05vdGlmaWNhdGlvblVwZGF0ZShjdHgsIG5vdGlmaWNhdGlvbkR0bywgZ3VpZCk7XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc05vdGlmaWNhdGlvblVwZGF0ZShjdHg6IFN0YXRlQ29udGV4dDxOb3RpZmljYXRpb25zTW9kZWw+LCBub3RpZmljYXRpb25EdG86IE5vdGlmaWNhdGlvbkR0bywgZ3VpZDogc3RyaW5nKSB7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9ucyA9IHsgLi4uY3R4LmdldFN0YXRlKCkuY29uZmlnIH0ubm90aWZpY2F0aW9ucztcbiAgICBjb25zdCBub3RpZmljYXRpb25QSyA9IHRoaXMubm90aWZpY2F0aW9uUEsobm90aWZpY2F0aW9uRHRvLCBndWlkKTtcblxuICAgIC8vIFVwZGF0ZSB0aGUgbm90aWZpY2F0aW9uIHdpdGggdGhlIGhhbmRsZSB1c2VyIC0gYW5kIHNhdmUgaW4gc3RhdGVcbiAgICBsZXQgZXhpc3ROb3RpZmljYXRpb25EdG86IE5vdGlmaWNhdGlvbkR0bztcbiAgICBzd2l0Y2ggKG5vdGlmaWNhdGlvbkR0by50eXBlKSB7XG4gICAgICBjYXNlIE5vdGlmaWNhdGlvblR5cGUuRHluYW1pY1ByaWNpbmdDb25kaXRpb246XG4gICAgICAgIGV4aXN0Tm90aWZpY2F0aW9uRHRvID0gbm90aWZpY2F0aW9ucy5maW5kKG5vdGlmaWNhdGlvbiA9PiB0aGlzLnBrTWF0Y2hlcyhub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvblBLKSk7XG4gICAgICAgIHRoaXMuY2xvc2VEaWFsb2dCeUlkKGBkeW5hbWljLXByaWNpbmctY29uZmlybWF0aW9uLW1vZGFsLSR7bm90aWZpY2F0aW9uUEt9YCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIE5vdGlmaWNhdGlvblR5cGUuQWxlcnQ6XG4gICAgICAgIGV4aXN0Tm90aWZpY2F0aW9uRHRvID0gbm90aWZpY2F0aW9ucy5maW5kKG5vdGlmaWNhdGlvbiA9PiB0aGlzLnBrTWF0Y2hlcyhub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvblBLKSAmJlxuICAgICAgICAgIHRoaXMuc3RhdGVNYXRjaGVzKG5vdGlmaWNhdGlvbi5hbGVydCwgbm90aWZpY2F0aW9uRHRvLmFsZXJ0LmV2ZW50U3RhdGUpKTtcblxuICAgICAgICB0aGlzLmNsb3NlRGlhbG9nQnlJZChgbHByLW1pc21hdGNoLW1vZGFsLSR7bm90aWZpY2F0aW9uUEt9YCk7XG4gICAgICAgIHRoaXMuY2xvc2VEaWFsb2dCeUlkKGBsb3N0LXRpY2tldC1tb2RhbC0ke25vdGlmaWNhdGlvblBLfWApO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS5sb2coXCJ1bnN1cHBvcnRlZCBub3RpZmljYXRpb24gdHlwZVwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKGV4aXN0Tm90aWZpY2F0aW9uRHRvKSB7XG4gICAgICBleGlzdE5vdGlmaWNhdGlvbkR0by5oYW5kbGluZ0J5VXNlciA9IG5vdGlmaWNhdGlvbkR0by5oYW5kbGluZ0J5VXNlcjtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgY29uZmlnOiB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmNvbnZlcnROb3RpZmljYXRpb25zVG9Ob3RpZmljYXRpb25zQ29uZmlnKG5vdGlmaWNhdGlvbnMpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ2xvc2UgY3JpdGljYWwgYWxlcnQgbW9kYWxcbiAgICB0aGlzLmNsb3NlRGlhbG9nQnlJZChgbm90aWZpY2F0aW9uLW1vZGFsLSR7bm90aWZpY2F0aW9uUEt9YCk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5Dcml0aWNhbEFsZXJ0RGlhbG9nKGFsZXJ0OiBBbGVydER0bywgZ3VpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgYWxlcnRUeXBlTmFtZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFBlcmlwaGVyYWxFcXVpcG1lbnRFcnJvclthbGVydC5ldmVudERlc2NyaXB0aW9uXSk7XG4gICAgY29uc3QgY2xvdWRDb25maXJtRGlhbG9nRGF0YTogQ2xvdWRDb25maXJtRGlhbG9nRGF0YSA9IHtcbiAgICAgIGNvbmZpcm1NZXNzYWdlczogW3RoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5jcml0aWNhbF9hbGVydF9tZXNzYWdlLCB7XG4gICAgICAgIGFsZXJ0VHlwZU5hbWVcbiAgICAgIH0pXSxcbiAgICAgIGNvbmZpcm1UaXRsZTogYWxlcnRUeXBlTmFtZSxcbiAgICAgIG9rVGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLnllcyksXG4gICAgICBjYW5jZWxUZXh0OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uY2FuY2VsKSxcbiAgICAgIGRldmljZToge1xuICAgICAgICBjb21tSWQ6IGFsZXJ0LnJlYWRlcklELnRvU3RyaW5nKCksXG4gICAgICAgIG5hbWU6IGFsZXJ0LmRldmljZU5hbWVcbiAgICAgIH0sXG4gICAgICBwYXJrTmFtZTogYWxlcnQucGFya05hbWUsXG4gICAgICB6b25lTmFtZTogYWxlcnQucGFya1pvbmVOYW1lLFxuICAgICAgbm90aWZpY2F0aW9uU2V2ZXJpdHk6IE5vdGlmaWNhdGlvblNldmVyaXR5LkNyaXRpY2FsLFxuICAgICAgbm90aWZpY2F0aW9uU2V2ZXJpdHlJbnZlcnQ6IHRydWVcbiAgICB9O1xuXG4gICAgY29uc3QgYWxlcnRQSyA9IHRoaXMuYWxlcnRQSyhhbGVydCwgZ3VpZCk7XG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbjxib29sZWFuPihDbG91ZENvbmZpcm1EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIHBhbmVsQ2xhc3M6IGB0Yi1jcml0aWNhbC1tb2RhbC0ke2FsZXJ0UEt9YCxcbiAgICAgIGRhdGE6IGNsb3VkQ29uZmlybURpYWxvZ0RhdGEsXG4gICAgICBpZDogYG5vdGlmaWNhdGlvbi1tb2RhbC0ke2FsZXJ0UEt9YCxcbiAgICAgIGVuYWJsZWRNaW5pbWl6ZWQ6IHRydWUsXG4gICAgfSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IHVzZXJJbmZvID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTZXNzaW9uU3RhdGUudXNlckluZm8pO1xuICAgICAgICBjb25zdCBoYW5kbGVBbGVydDogSGFuZGxpbmdBbGVydER0byA9IG5ldyBIYW5kbGluZ0FsZXJ0RHRvKHtcbiAgICAgICAgICBndWlkOiBndWlkLFxuICAgICAgICAgIHBhcmtJZDogYWxlcnQucGFya0lkLFxuICAgICAgICAgIHBhcmtOYW1lOiBhbGVydC5wYXJrTmFtZSxcbiAgICAgICAgICBkZXZpY2VJZDogYWxlcnQuZGV2aWNlSUQsXG4gICAgICAgICAgZXZlbnREZXNjcmlwdGlvbjogYWxlcnQuZXZlbnREZXNjcmlwdGlvbixcbiAgICAgICAgICB1c2VyRnVsbE5hbWU6IHVzZXJJbmZvLmRpc3BsYXlOYW1lLFxuICAgICAgICAgIGlkOiBhbGVydC5pZCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZVByb3h5LmhhbmRsZUFsZXJ0Tm90aWZpY2F0aW9uKGhhbmRsZUFsZXJ0KS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLnRyaWdnZXJBbGVydFRvYXN0RXZlbnQocmVzLmRhdGEgfHwgYWxlcnQsIGd1aWQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkR5bmFtaWNQcmljaW5nQ29uZGl0aW9uTm90aWZpY2F0aW9uRGlhbG9nKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjbG91ZENvbmZpcm1EaWFsb2dEYXRhOiBDbG91ZENvbmZpcm1EaWFsb2dEYXRhID0ge1xuICAgICAgY29uZmlybU1lc3NhZ2VzOiBbdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmR5bmFtaWNfcHJpY2luZ19hbGVydF9tZXNzYWdlKV0sXG4gICAgICBjb25maXJtVGl0bGU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5keW5hbWljX3ByaWNpbmdfYWxlcnRfdGl0bGUpLFxuICAgICAgY29uZmlybVN1YlRpdGxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uZHluYW1pY19wcmljaW5nX2FsZXJ0X3N1Yl90aXRsZSwgeyBjb25kaXRpb25OYW1lOiBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24uY29uZGl0aW9uTmFtZSB9KSxcbiAgICAgIG9rVGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLnllcyksXG4gICAgICBjYW5jZWxUZXh0OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uY2FuY2VsKSxcbiAgICB9O1xuXG4gICAgY29uc3Qgbm90aWZpY2F0aW9uUEsgPSB0aGlzLm5vdGlmaWNhdGlvblBLKG5vdGlmaWNhdGlvbiwgZ3VpZCk7XG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbjxib29sZWFuPihDbG91ZENvbmZpcm1EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIHBhbmVsQ2xhc3M6IGB0Yi1keW5hbWljLXByaWNpbmctY29uZGl0aW9uLW1vZGFsLSR7bm90aWZpY2F0aW9uLmlkfWAsXG4gICAgICBkYXRhOiBjbG91ZENvbmZpcm1EaWFsb2dEYXRhLFxuICAgICAgaWQ6IGBub3RpZmljYXRpb24tbW9kYWwtJHtub3RpZmljYXRpb25QS31gLFxuICAgICAgZW5hYmxlZE1pbmltaXplZDogdHJ1ZSxcbiAgICB9KS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgY29uc3QgdXNlckluZm8gPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNlc3Npb25TdGF0ZS51c2VySW5mbyk7XG4gICAgICAgIGNvbnN0IGhhbmRsaW5nRHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG86IEhhbmRsaW5nRHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG8gPSBuZXcgSGFuZGxpbmdEeW5hbWljUHJpY2luZ0NvbmRpdGlvbkR0byh7XG4gICAgICAgICAgY2xvdWRQYXJrSWQ6IG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5jbG91ZFBhcmtJZCxcbiAgICAgICAgICB1c2VyRnVsbE5hbWU6IHVzZXJJbmZvLmRpc3BsYXlOYW1lLFxuICAgICAgICAgIGlkOiBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24uaWQsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2VQcm94eS5oYW5kbGVEeW5hbWljUHJpY2luZ0NvbmRpdGlvbk5vdGlmaWNhdGlvbihoYW5kbGluZ0R5bmFtaWNQcmljaW5nQ29uZGl0aW9uRHRvKS5zdWJzY3JpYmUoYXN5bmMgcmVzID0+IHtcbiAgICAgICAgICBjb25zdCBkcGMgPSByZXMuZGF0YSB8fCBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb247XG4gICAgICAgICAgY29uc3QgcmF0ZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMucmF0ZVNlcnZpY2VQcm94eS5nZXRSYXRlQnlJZChkcGMucmF0ZUlkLCBkcGMuZ3VpZCkpO1xuICAgICAgICAgIGRwYy5yYXRlTmFtZSA9IHJhdGU/LmRhdGE/Lm5hbWU7XG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS50cmlnZ2VyRHluYW1pY1ByaWNpbmdUb2FzdEV2ZW50KHJlcy5kYXRhIHx8IG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwbGF5QWxlcnQoY3R4OiBTdGF0ZUNvbnRleHQ8Tm90aWZpY2F0aW9uc01vZGVsPiwgYWxlcnQ6IEFsZXJ0RHRvLCBndWlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBub3RpZmljYXRpb24gPSB0aGlzLmFsZXJ0Tm90aWZpY2F0aW9uU2VydmljZS5kaXNwbGF5QWxlcnQoYWxlcnQpO1xuICAgIGlmIChub3RpZmljYXRpb24pIHtcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbnNNYXAgPSB7IC4uLmN0eC5nZXRTdGF0ZSgpLm5vdGlmaWNhdGlvbnNNYXAgfTtcbiAgICAgIGNvbnN0IGFsZXJ0UEsgPSB0aGlzLmFsZXJ0UEsoYWxlcnQsIGd1aWQpO1xuICAgICAgbm90aWZpY2F0aW9uc01hcFthbGVydFBLXSA9IG5vdGlmaWNhdGlvbi50b2FzdElkO1xuXG4gICAgICBub3RpZmljYXRpb24ub25UYXAucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLnRyaWdnZXJBbGVydFRvYXN0RXZlbnQoYWxlcnQsIGd1aWQpO1xuICAgICAgfSk7XG5cbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgbm90aWZpY2F0aW9uc01hcCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VEaWFsb2dCeUlkKGRpYWxvZ0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBvcGVuRGlhbG9ncyA9IHRoaXMubW9kYWxTZXJ2aWNlLmdldE9wZW5EaWFsb2dzKCk7XG4gICAgY29uc3QgZGlhbG9nID0gb3BlbkRpYWxvZ3MuZmluZChkaWFsb2cgPT4gZGlhbG9nLmlkID09PSBkaWFsb2dJZCk7XG5cbiAgICBpZiAoZGlhbG9nKSB7XG4gICAgICBkaWFsb2cuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUFsZXJ0Rm9yQ2xvc2luZyhjdHg6IFN0YXRlQ29udGV4dDxOb3RpZmljYXRpb25zTW9kZWw+LCBhbGVydER0bzogQWxlcnREdG8sIGd1aWQ6IHN0cmluZykge1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSB7IC4uLmN0eC5nZXRTdGF0ZSgpLmNvbmZpZyB9Lm5vdGlmaWNhdGlvbnM7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uc01hcCA9IHsgLi4uY3R4LmdldFN0YXRlKCkubm90aWZpY2F0aW9uc01hcCB9O1xuICAgIGNvbnN0IGFsZXJ0UEsgPSB0aGlzLmFsZXJ0UEsoYWxlcnREdG8sIGd1aWQpO1xuXG4gICAgLy8gV2hldGhlciB3ZSB3YW50IHRvIGNsb3NlIG9yIGhhdmUgYSBkdXBsaWNhdGUgYWxlcnRcbiAgICBjb25zdCBhbGVydEV4aXN0cyA9IG5vdGlmaWNhdGlvbnMuZmluZChub3RpZmljYXRpb24gPT5cbiAgICAgIHRoaXMucGtNYXRjaGVzKG5vdGlmaWNhdGlvbiwgYWxlcnRQSykgJiYgdGhpcy5zdGF0ZU1hdGNoZXMobm90aWZpY2F0aW9uLmFsZXJ0LCBhbGVydER0by5ldmVudFN0YXRlKVxuICAgICk7XG4gICAgaWYgKCFhbGVydER0by5ldmVudFN0YXRlIHx8IGFsZXJ0RXhpc3RzKSB7XG4gICAgICBjb25zdCB0b2FzdElkID0gbm90aWZpY2F0aW9uc01hcFthbGVydFBLXTtcbiAgICAgIHRoaXMuYWxlcnROb3RpZmljYXRpb25TZXJ2aWNlLmNsZWFyVG9hc3RzKHRvYXN0SWQpO1xuICAgICAgZGVsZXRlIG5vdGlmaWNhdGlvbnNNYXBbYWxlcnRQS107XG5cbiAgICAgIGNvbnN0IGZpbHRlcmVkTm90aWZpY2F0aW9ucyA9IG5vdGlmaWNhdGlvbnMuZmlsdGVyKG5vdGlmaWNhdGlvbiA9PiAhbm90aWZpY2F0aW9uLmFsZXJ0IHx8ICEodGhpcy5hbGVydFBLKG5vdGlmaWNhdGlvbi5hbGVydCwgbm90aWZpY2F0aW9uLmd1aWQpID09PSBhbGVydFBLKSk7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIG5vdGlmaWNhdGlvbnNNYXAsXG4gICAgICAgIGNvbmZpZzogdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5jb252ZXJ0Tm90aWZpY2F0aW9uc1RvTm90aWZpY2F0aW9uc0NvbmZpZyhmaWx0ZXJlZE5vdGlmaWNhdGlvbnMpLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIENsb3NlIHJlbGV2YW50IG9wZW4gbW9kYWxzXG4gICAgICB0aGlzLmNsb3NlRGlhbG9nQnlJZChgbm90aWZpY2F0aW9uLW1vZGFsLSR7YWxlcnRQS31gKTtcbiAgICAgIHRoaXMuY2xvc2VEaWFsb2dCeUlkKGBscHItbWlzbWF0Y2gtbW9kYWwtJHthbGVydFBLfWApO1xuICAgICAgdGhpcy5jbG9zZURpYWxvZ0J5SWQoYGxvc3QtdGlja2V0LW1vZGFsLSR7YWxlcnRQS31gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVRyaWdnZXJlZER5bmFtaWNQcmljaW5nQ29uZGl0aW9uTm90aWZpY2F0aW9uKGN0eDogU3RhdGVDb250ZXh0PE5vdGlmaWNhdGlvbnNNb2RlbD4sIG5vdGlmaWNhdGlvbkR0bzogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBub3RpZmljYXRpb25zID0geyAuLi5jdHguZ2V0U3RhdGUoKS5jb25maWcgfS5ub3RpZmljYXRpb25zO1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnNNYXAgPSB7IC4uLmN0eC5nZXRTdGF0ZSgpLm5vdGlmaWNhdGlvbnNNYXAgfTtcblxuICAgIC8vIFdoZXRoZXIgd2Ugd2FudCB0byBjbG9zZSBvciBoYXZlIGEgZHVwbGljYXRlIGFsZXJ0XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uRXhpc3RzID0gbm90aWZpY2F0aW9ucy5maW5kKG5vdGlmaWNhdGlvbiA9PiBub3RpZmljYXRpb24uZ3VpZCA9PT0gbm90aWZpY2F0aW9uRHRvLmd1aWQgJiZcbiAgICAgIG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbj8uY2xvdWRQYXJrSWQgPT09IG5vdGlmaWNhdGlvbkR0by5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5jbG91ZFBhcmtJZCk7XG4gICAgaWYgKG5vdGlmaWNhdGlvbkV4aXN0cykge1xuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uUEsgPSB0aGlzLm5vdGlmaWNhdGlvblBLKG5vdGlmaWNhdGlvbkV4aXN0cywgZ3VpZCk7XG4gICAgICBjb25zdCB0b2FzdElkID0gbm90aWZpY2F0aW9uc01hcFtub3RpZmljYXRpb25QS107XG4gICAgICB0aGlzLmFsZXJ0Tm90aWZpY2F0aW9uU2VydmljZS5jbGVhclRvYXN0cyh0b2FzdElkKTtcbiAgICAgIGRlbGV0ZSBub3RpZmljYXRpb25zTWFwW25vdGlmaWNhdGlvblBLXTtcblxuICAgICAgY29uc3QgZmlsdGVyZWROb3RpZmljYXRpb25zID0gbm90aWZpY2F0aW9ucy5maWx0ZXIobm90aWZpY2F0aW9uID0+XG4gICAgICAgICEodGhpcy5ub3RpZmljYXRpb25QSyhub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5ndWlkKSA9PT0gbm90aWZpY2F0aW9uUEspKTtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgbm90aWZpY2F0aW9uc01hcCxcbiAgICAgICAgY29uZmlnOiB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmNvbnZlcnROb3RpZmljYXRpb25zVG9Ob3RpZmljYXRpb25zQ29uZmlnKGZpbHRlcmVkTm90aWZpY2F0aW9ucyksXG4gICAgICB9KTtcblxuICAgICAgLy8gQ2xvc2UgcmVsZXZhbnQgb3BlbiBtb2RhbHNcbiAgICAgIHRoaXMuY2xvc2VEaWFsb2dCeUlkKGBub3RpZmljYXRpb24tbW9kYWwtJHtub3RpZmljYXRpb25QS31gKTtcbiAgICAgIHRoaXMuY2xvc2VEaWFsb2dCeUlkKGBkeW5hbWljLXByaWNpbmctY29uZmlybWF0aW9uLW1vZGFsLSR7bm90aWZpY2F0aW9uUEt9YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVOb3RpZmljYXRpb25Gb3JDbG9zaW5nKGN0eDogU3RhdGVDb250ZXh0PE5vdGlmaWNhdGlvbnNNb2RlbD4sIG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBub3RpZmljYXRpb25zID0geyAuLi5jdHguZ2V0U3RhdGUoKS5jb25maWcgfS5ub3RpZmljYXRpb25zO1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnNNYXAgPSB7IC4uLmN0eC5nZXRTdGF0ZSgpLm5vdGlmaWNhdGlvbnNNYXAgfTtcbiAgICBjb25zdCBub3RpZmljYXRpb25QSyA9IHRoaXMubm90aWZpY2F0aW9uUEsobm90aWZpY2F0aW9uLCBndWlkKTtcblxuICAgIC8vIFdoZXRoZXIgd2Ugd2FudCB0byBjbG9zZSBvciBoYXZlIGEgZHVwbGljYXRlIGFsZXJ0XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uRXhpc3RzID0gbm90aWZpY2F0aW9ucy5maW5kKG5vdGlmaWNhdGlvbiA9PiB0aGlzLnBrTWF0Y2hlcyhub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvblBLKSk7XG4gICAgaWYgKG5vdGlmaWNhdGlvbkV4aXN0cykge1xuICAgICAgY29uc3QgdG9hc3RJZCA9IG5vdGlmaWNhdGlvbnNNYXBbbm90aWZpY2F0aW9uUEtdO1xuICAgICAgdGhpcy5hbGVydE5vdGlmaWNhdGlvblNlcnZpY2UuY2xlYXJUb2FzdHModG9hc3RJZCk7XG4gICAgICBkZWxldGUgbm90aWZpY2F0aW9uc01hcFtub3RpZmljYXRpb25QS107XG5cbiAgICAgIGNvbnN0IGZpbHRlcmVkTm90aWZpY2F0aW9ucyA9IG5vdGlmaWNhdGlvbnMuZmlsdGVyKG5vdGlmaWNhdGlvbiA9PlxuICAgICAgICAhKHRoaXMubm90aWZpY2F0aW9uUEsobm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ3VpZCkgPT09IG5vdGlmaWNhdGlvblBLKSk7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIG5vdGlmaWNhdGlvbnNNYXAsXG4gICAgICAgIGNvbmZpZzogdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5jb252ZXJ0Tm90aWZpY2F0aW9uc1RvTm90aWZpY2F0aW9uc0NvbmZpZyhmaWx0ZXJlZE5vdGlmaWNhdGlvbnMpLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIENsb3NlIHJlbGV2YW50IG9wZW4gbW9kYWxzXG4gICAgICB0aGlzLmNsb3NlRGlhbG9nQnlJZChgbm90aWZpY2F0aW9uLW1vZGFsLSR7bm90aWZpY2F0aW9uUEt9YCk7XG4gICAgICB0aGlzLmNsb3NlRGlhbG9nQnlJZChgZHluYW1pYy1wcmljaW5nLWNvbmZpcm1hdGlvbi1tb2RhbC0ke25vdGlmaWNhdGlvblBLfWApO1xuICAgICAgdGhpcy5jbG9zZURpYWxvZ0J5SWQoYGxwci1taXNtYXRjaC1tb2RhbC0ke25vdGlmaWNhdGlvblBLfWApO1xuICAgICAgdGhpcy5jbG9zZURpYWxvZ0J5SWQoYGxvc3QtdGlja2V0LW1vZGFsLSR7bm90aWZpY2F0aW9uUEt9YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZVRyaWdnZXJlZER5bmFtaWNQcmljaW5nQ29uZGl0aW9ucyhjdHg6IFN0YXRlQ29udGV4dDxOb3RpZmljYXRpb25zTW9kZWw+LCBub3RpZmljYXRpb25EdG86IE5vdGlmaWNhdGlvbkR0bywgZ3VpZDogc3RyaW5nKSB7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9ucyA9IHsgLi4uY3R4LmdldFN0YXRlKCkuY29uZmlnIH0ubm90aWZpY2F0aW9ucztcbiAgICBjb25zdCBub3RpZmljYXRpb25zTWFwID0geyAuLi5jdHguZ2V0U3RhdGUoKS5ub3RpZmljYXRpb25zTWFwIH07XG4gICAgY29uc3QgcGFya0lkID0gbm90aWZpY2F0aW9uRHRvPy5keW5hbWljUHJpY2luZ0NvbmRpdGlvbj8ucGFya0lkO1xuXG4gICAgLy8gZmluZCBhbGwgdGhlIGR5bmFtaWMgcHJpY2luZyB0cmlnZ2VyZWQgY29uZGl0aW9ucyBvZiBzYW1lIGd1aWQgYW5kIHBhcmtJZCB0byBiZSBjbG9zZVxuICAgIGNvbnN0IGR5bmFtaWNQcmljaW5nTm90aWZpY2F0aW9uRXhpc3RzID0gbm90aWZpY2F0aW9ucy5maWx0ZXIobm90aWZpY2F0aW9uID0+ICEhbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uICYmXG4gICAgICBub3RpZmljYXRpb24uZ3VpZCA9PT0gZ3VpZCAmJiBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24ucGFya0lkID09PSBwYXJrSWQpO1xuXG4gICAgaWYgKGR5bmFtaWNQcmljaW5nTm90aWZpY2F0aW9uRXhpc3RzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgZHAgb2YgZHluYW1pY1ByaWNpbmdOb3RpZmljYXRpb25FeGlzdHMpIHtcbiAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uUEsgPSB0aGlzLm5vdGlmaWNhdGlvblBLKGRwLCBndWlkKTtcbiAgICAgICAgZGVsZXRlIG5vdGlmaWNhdGlvbnNNYXBbbm90aWZpY2F0aW9uUEtdO1xuXG4gICAgICAgIC8vIENsb3NlIHJlbGV2YW50IG9wZW4gbW9kYWxzXG4gICAgICAgIHRoaXMuY2xvc2VEaWFsb2dCeUlkKGBub3RpZmljYXRpb24tbW9kYWwtJHtub3RpZmljYXRpb25QS31gKTtcbiAgICAgICAgdGhpcy5jbG9zZURpYWxvZ0J5SWQoYGR5bmFtaWMtcHJpY2luZy1jb25maXJtYXRpb24tbW9kYWwtJHtub3RpZmljYXRpb25QS31gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsdGVyZWROb3RpZmljYXRpb25zID0gbm90aWZpY2F0aW9ucy5maWx0ZXIobm90aWZpY2F0aW9uID0+ICFub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24gfHwgIShub3RpZmljYXRpb24uZ3VpZCA9PT0gZ3VpZCAmJiBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24ucGFya0lkID09PSBwYXJrSWQpKTtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgbm90aWZpY2F0aW9uc01hcCxcbiAgICAgICAgY29uZmlnOiB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmNvbnZlcnROb3RpZmljYXRpb25zVG9Ob3RpZmljYXRpb25zQ29uZmlnKGZpbHRlcmVkTm90aWZpY2F0aW9ucyksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNob3dSYXRlQXV0b21hdGljU3dpdGNoVG9hc3RNZXNzYWdlKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uRHRvKSB7XG4gICAgY29uc3QgZHBjID0gbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uO1xuICAgIGNvbnN0IHJhdGUgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLnJhdGVTZXJ2aWNlUHJveHkuZ2V0UmF0ZUJ5SWQoZHBjLnJhdGVJZCwgZHBjLmd1aWQpKTtcbiAgICBkcGMucmF0ZU5hbWUgPSByYXRlPy5kYXRhPy5uYW1lO1xuICAgIGNvbnN0IG1lc3NhZ2VzID0gdGhpcy5mYWNpbGl0eUNvbW1hbmRzU2VydmljZS5nZXRDb21tYW5kTm90aWZpY2F0aW9uQ29uZmlnTWVzc2FnZXMoRmFjaWxpdHlSZW1vdGVDb21tYW5kVHlwZXMuU2V0QWN0aXZlUmF0ZSwgbnVsbCwgZHBjKTtcbiAgICBjb25zdCBjb25maWc6IENvbW1hbmROb3RpZmljYXRpb25Db25maWcgPSB7XG4gICAgICBtZXNzYWdlcyxcbiAgICAgIGNvbW1hbmQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5mYWNpbGl0eV9yZW1vdGVfY29tbWFuZF9zZXRfYWN0aXZlX3JhdGUpLFxuICAgICAgaFBvc2l0aW9uOiBOb3RpZmljYXRpb25IUG9zaXRpb25zLlJpZ2h0LFxuICAgICAgdlBvc2l0aW9uOiBOb3RpZmljYXRpb25WUG9zaXRpb25zLkJvdHRvbSxcbiAgICAgIGR1cmF0aW9uOiA3ICogT05FX1NFQ09ORF9JTl9NSUxMSVNFQ09ORFMsXG4gICAgICBjbGFzczogQ29tbWFuZE5vdGlmaWNhdGlvbkJvcmRlckNsYXNzLlN1Y2Nlc3MsXG4gICAgICB0eXBlOiBDb21tYW5kTm90aWZpY2F0aW9uVHlwZS5TdWNjZXNzXG4gICAgfTtcblxuICAgIHRoaXMuY29tbWFuZE5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvdyhjb25maWcsIENvbW1hbmROb3RpZmljYXRpb25Db21wb25lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzaG93UmF0ZUZhbGxlbkJhY2tUb0RlZmF1bHRSYXRlVG9hc3RNZXNzYWdlKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uRHRvKSB7XG4gICAgY29uc3QgZHBjID0gbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uO1xuICAgIGNvbnN0IHRpdGxlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmR5bmFtaWNfcHJpY2luZ19yZXZlcnRlZF90b19kZWZhdWx0X3JhdGUpO1xuICAgIGNvbnN0IHN1YlRpdGxlID0gYCR7ZHBjLnBhcmtpbmdMb3ROYW1lfSR7ZHBjLnpvbmU/Lm5hbWUgPyAnIHwgJyArIGRwYy56b25lPy5uYW1lIDogJyd9YDtcbiAgICBjb25zdCBjb25maWc6IENvbW1hbmROb3RpZmljYXRpb25Db25maWcgPSB7XG4gICAgICBtZXNzYWdlczogW3tcbiAgICAgICAgdmFsdWU6IHRpdGxlLFxuICAgICAgICBjbGFzczogTm90aWZpY2F0aW9uQ2xhc3MudGl0bGUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB2YWx1ZTogc3ViVGl0bGUsXG4gICAgICAgIGNsYXNzOiBOb3RpZmljYXRpb25DbGFzcy5zdWJUaXRsZSxcbiAgICAgIH1dLFxuICAgICAgY29tbWFuZDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmZhY2lsaXR5X3JlbW90ZV9jb21tYW5kX3NldF9hY3RpdmVfcmF0ZSksXG4gICAgICBoUG9zaXRpb246IE5vdGlmaWNhdGlvbkhQb3NpdGlvbnMuUmlnaHQsXG4gICAgICB2UG9zaXRpb246IE5vdGlmaWNhdGlvblZQb3NpdGlvbnMuQm90dG9tLFxuICAgICAgZHVyYXRpb246IDcgKiBPTkVfU0VDT05EX0lOX01JTExJU0VDT05EUyxcbiAgICAgIGNsYXNzOiBDb21tYW5kTm90aWZpY2F0aW9uQm9yZGVyQ2xhc3MuU3VjY2VzcyxcbiAgICAgIHR5cGU6IENvbW1hbmROb3RpZmljYXRpb25UeXBlLlN1Y2Nlc3NcbiAgICB9O1xuXG4gICAgdGhpcy5jb21tYW5kTm90aWZpY2F0aW9uU2VydmljZS5zaG93KGNvbmZpZywgQ29tbWFuZE5vdGlmaWNhdGlvbkNvbXBvbmVudCk7XG4gIH1cblxuICBwcml2YXRlIGlzQWxlcnRFbmFibGVkRm9yVXNlcihhbGVydDogQWxlcnREdG8sIGd1aWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGxldCBpc0FsZXJ0RW5hYmxlZDogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBjb25zdCB1c2VyU2V0dGluZ3MgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNlc3Npb25TdGF0ZS5tYXBwZWRVc2VyU2V0dGluZ3MpO1xuICAgIGNvbnN0IHVzZXJBbGVydHNQcmVmZXJlbmNlczogQWxlcnRQcmVmZXJlbmNlc1NldHRpbmdzRHRvID0gdXNlclNldHRpbmdzLmdldChTZXR0aW5nc0NhdGVnb3J5LkFsZXJ0c1ByZWZlcmVuY2VzKTtcblxuICAgIC8vIElmIHRoZXJlIGlzIG5vIHVzZXJBbGVydHNQcmVmZXJlbmNlcyB3ZSBkb24ndCBmaWx0ZXIgYXQgYWxsXG4gICAgaWYgKCEhdXNlckFsZXJ0c1ByZWZlcmVuY2VzKSB7XG4gICAgICAvLyBJZiB0aGUgdXNlciBlbmFibGVkIHRoZSBub3RpZmljYXRpb25zXG4gICAgICAvLyBFbHNlIHRoZSB1c2VyIGRpc2FibGVkIGFsbCB0aGUgbm90aWZpY2F0aW9uc1xuICAgICAgaWYgKHVzZXJBbGVydHNQcmVmZXJlbmNlcy5pc0VuYWJsZWQpIHtcbiAgICAgICAgY29uc3Qgc3BhcmtWZXJzaW9uID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdCgoeyBzbWFydHBhcms6IHsgdmVyc2lvbnMgfSB9KSA9PiB2ZXJzaW9uc1tndWlkXSk7XG4gICAgICAgIGNvbnN0IGlzQWxlcnRGaWx0ZXJWZXJzaW9uU3VwcG9ydGVkID0gaXNWZXJzaW9uR3JlYXRlclRoYW5FcXVhbChzcGFya1ZlcnNpb24sIFZFUlNJT05fOV8yXzApO1xuXG4gICAgICAgIC8vIElmIHRoZSB2ZXJzaW9uIGlzIDkuMS4wIG9yIGJlbG93LCBhbGwgbm90aWZpY2F0aW9ucyBhcmUgZW5hYmxlZFxuICAgICAgICAvLyBJZiB0aGUgdmVyc2lvbiBpcyA5LjIuMCBhbmQgYWJvdmUsIHdlIGZpbHRlciBieSB0aGUgcHJlZmVyZW5jZXNcbiAgICAgICAgaXNBbGVydEVuYWJsZWQgPSAhaXNBbGVydEZpbHRlclZlcnNpb25TdXBwb3J0ZWQgfHwgdGhpcy5pc0FsZXJ0RW5hYmxlZEluUHJlZmVyZW5jZXMoYWxlcnQsIGd1aWQsIHVzZXJBbGVydHNQcmVmZXJlbmNlcy5wcmVmZXJlbmNlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpc0FsZXJ0RW5hYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpc0FsZXJ0RW5hYmxlZDtcbiAgfVxuXG4gIHByaXZhdGUgaXNBbGVydEVuYWJsZWRJblByZWZlcmVuY2VzKGFsZXJ0OiBBbGVydER0bywgZ3VpZDogc3RyaW5nLCB1c2VyQWxlcnRUeXBlUHJlZmVyZW5jZXNNYXA6IEFsZXJ0c1ByZWZlcmVuY2VzTWFwKSB7XG4gICAgbGV0IGlzQWxlcnRFbmFibGVkOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8vIElmIHdlIGhhdmUgYW55IGZhY2lsaXR5IHNlbGVjdGVkLCB3ZSBjb250aW51ZSB0byBjaGVja1xuICAgIC8vIEVsc2Ugd2UgYWxsb3cgYWxsIHRvIHBhc3MgYXMgdGhlIHVzZXIgZGlkbid0IHNldCBwcmVmZXJlbmNlcyB5ZXRcbiAgICBpZiAoT2JqZWN0LmtleXModXNlckFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwKS5sZW5ndGgpIHtcbiAgICAgIGlzQWxlcnRFbmFibGVkID0gZmFsc2U7XG5cbiAgICAgIC8vIEdldHMgdGhlIHRyZWVJZCBvZiB0aGUgdGVuYW50IC0gSW4gY2FzZSB0aGUgdXNlciBzZWxlY3RlZCBcIkFsbCBUZW5hbnQgUGFya2luZyBMb3RzXCJcbiAgICAgIGNvbnN0IHRlbmFudFRyZWVJZCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2Vzc2lvblN0YXRlLnRlbmFudEluZm8pPy50cmVlSWQ7XG5cbiAgICAgIC8vIEdldHMgdGhlIHRyZWUgcGFyayBJZCBvZiB0aGUgYWxlcnRcbiAgICAgIGNvbnN0IGFsZXJ0VHJlZVBhcmtJZCA9IHRoaXMuZ2V0Q2xvdWRQYXJrSWQoYWxlcnQsIGd1aWQpO1xuXG4gICAgICAvLyBXZSBHZXQgdGhlIHNldHRpbmcgb2YgdGhlIFBhcmssIFBhcmVudFBhcmsgb3IgUGFya3NUcmVlUm9vdFxuICAgICAgY29uc3QgZmFjaWxpdHlQcmVmZXJlbmNlc01hcDogRmFjaWxpdHlQcmVmZXJlbmNlc01hcCA9IHVzZXJBbGVydFR5cGVQcmVmZXJlbmNlc01hcFthbGVydFRyZWVQYXJrSWRdIHx8IHVzZXJBbGVydFR5cGVQcmVmZXJlbmNlc01hcFt0ZW5hbnRUcmVlSWRdO1xuXG4gICAgICAvLyBXZSBjaGVjayBpZiB0aGUgZmFjaWxpdHkgd2FzIHNlbGVjdGVkXG4gICAgICBpZiAoZmFjaWxpdHlQcmVmZXJlbmNlc01hcCkge1xuICAgICAgICBjb25zdCBhbGVydFR5cGVQcmVmZXJlbmNlc01hcDogQWxlcnRUeXBlUHJlZmVyZW5jZXNNYXAgPSBmYWNpbGl0eVByZWZlcmVuY2VzTWFwW2FsZXJ0LmV2ZW50RGVzY3JpcHRpb25dO1xuXG4gICAgICAgIC8vIFdlIGNoZWNrIGlmIHRoZSBhbGVydCB0eXBlIHdhcyBzZWxlY3RlZFxuICAgICAgICBpZiAoYWxlcnRUeXBlUHJlZmVyZW5jZXNNYXApIHtcbiAgICAgICAgICBjb25zdCBhbGVydERldmljZVR5cGU6IEFsZXJ0c0RldmljZVR5cGUgPSB0aGlzLmdldEFsZXJ0c0RldmljZVR5cGUoYWxlcnQpO1xuXG4gICAgICAgICAgLy8gV2UgY2hlY2sgdGhlIGlmIHRoZSBkZXZpY2UgdHlwZSB3YXMgc2VsZWN0ZWRcbiAgICAgICAgICBpc0FsZXJ0RW5hYmxlZCA9IGFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwW2FsZXJ0RGV2aWNlVHlwZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaXNBbGVydEVuYWJsZWQ7XG4gIH1cblxuICBwcml2YXRlIGdldEFsZXJ0c0RldmljZVR5cGUoYWxlcnQ6IEFsZXJ0RHRvKTogQWxlcnRzRGV2aWNlVHlwZSB7XG4gICAgbGV0IGFsZXJ0RGV2aWNlVHlwZTogQWxlcnRzRGV2aWNlVHlwZTtcbiAgICBjb25zdCBhbGVydHNEZXZpY2VUeXBlOiBBbGVydHNEZXZpY2VUeXBlW10gPSBEZXZpY2VUeXBlc0FsZXJ0c01hcHBpbmcuZ2V0KGFsZXJ0LmRldmljZVR5cGUpO1xuXG4gICAgc3dpdGNoIChhbGVydC5kZXZpY2VUeXBlKSB7XG4gICAgICBjYXNlIERldmljZVR5cGUuQ2FzaDpcbiAgICAgICAgYWxlcnREZXZpY2VUeXBlID0gYWxlcnQucmVhZGVySUQgPT09IDAgPyBBbGVydHNEZXZpY2VUeXBlLk1hc3RlciA6IEFsZXJ0c0RldmljZVR5cGUuQ2FzaFJlZ2lzdGVyO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFsZXJ0RGV2aWNlVHlwZSA9IGFsZXJ0c0RldmljZVR5cGU/LlswXTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFsZXJ0RGV2aWNlVHlwZTtcbiAgfVxuXG4gIHByaXZhdGUgb25EeWFubWljUHJpY2luZ0NvbmRpdGlvbkNoYW5nZShjdHg6IFN0YXRlQ29udGV4dDxOb3RpZmljYXRpb25zTW9kZWw+LCBub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbkR0bywgZ3VpZDogc3RyaW5nKSB7XG4gICAgdGhpcy5oYW5kbGVOb3RpZmljYXRpb25Gb3JDbG9zaW5nKGN0eCwgbm90aWZpY2F0aW9uLCBndWlkKTtcbiAgICB0aGlzLmhhbmRsZVRyaWdnZXJlZER5bmFtaWNQcmljaW5nQ29uZGl0aW9uTm90aWZpY2F0aW9uKGN0eCwgbm90aWZpY2F0aW9uLCBndWlkKTtcblxuICAgIGlmIChub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24uaXNUcmlnZ2VyZWQpIHtcbiAgICAgIC8vIFdlIGRvIG5vdCBvcGVuIHRoZSBub3RpZmljYXRpb24gaWYgdXNlciBkb2VzIG5vdCBoYXZlIHBlcm1pc3Npb25cbiAgICAgIGNvbnN0IGhhc1Blcm1pc3Npb24gPSB0aGlzLmZhY2lsaXR5U2VydmljZS5oYXNQZXJtaXNzaW9uVHlwZUJ5UGFyayhcbiAgICAgICAgUGVybWlzc2lvblR5cGUuTG90Q29uZmlndXJhdGlvbkR5bmFtaWNQcmljaW5nLCBub3RpZmljYXRpb24uZ3VpZCwgbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLnBhcmtpbmdMb3RJZFxuICAgICAgKTtcblxuICAgICAgLy8gV2UgZG8gbm90IG9wZW4gdGhlIG5vdGlmaWNhdGlvbiBpbiBtb2JpbGUgbW9kZVxuICAgICAgY29uc3QgaXNNb2JpbGVBcHBNb2RlID0gdGhpcy5hcHBDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmFwcFR5cGUgPT09IEFwcFR5cGUuTW9iaWxlO1xuICAgICAgY29uc3QgaXNDY01vZHVsZSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2lkZW5hdlN0YXRlLmFwcE1vZHVsZSkgPT09IEFwcE1vZHVsZS5DYztcbiAgICAgIGlmICghaXNNb2JpbGVBcHBNb2RlICYmIGlzQ2NNb2R1bGUgJiYgaGFzUGVybWlzc2lvbikge1xuICAgICAgICB0aGlzLm9wZW5EeW5hbWljUHJpY2luZ0NvbmRpdGlvbk5vdGlmaWNhdGlvbkRpYWxvZyhub3RpZmljYXRpb24sIGd1aWQpO1xuXG4gICAgICAgIC8vIFB1c2ggdGhlIG5ldyBub3RpZmljYXRpb24gdG8gdGhlIGFycmF5IGFuZCBzYXZlIGluIHN0YXRlXG4gICAgICAgIG5vdGlmaWNhdGlvbi50aW1lQWdvSW5TZWNvbmRzID0gdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5nZXRUaW1lQWdvSW5TZWNvbmRzKG5vdGlmaWNhdGlvbik7XG4gICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSB7IC4uLmN0eC5nZXRTdGF0ZSgpLmNvbmZpZyB9Lm5vdGlmaWNhdGlvbnM7XG4gICAgICAgIG5vdGlmaWNhdGlvbnMudW5zaGlmdChub3RpZmljYXRpb24pO1xuXG4gICAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgICBjb25maWc6IHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UuY29udmVydE5vdGlmaWNhdGlvbnNUb05vdGlmaWNhdGlvbnNDb25maWcobm90aWZpY2F0aW9ucyksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLmlzQWN0aXZhdGVkKSB7XG4gICAgICAvLyBoYW5kbGUgbm90aWZpY2F0aW9uIGluZGljYXRpbmcgdGhlIHJhdGUgaGFzIGZhbGxlbiBiYWNrIHRvIHRoZSBkZWZhdWx0IHJhdGVcbiAgICAgIHRoaXMuc2hvd1JhdGVGYWxsZW5CYWNrVG9EZWZhdWx0UmF0ZVRvYXN0TWVzc2FnZShub3RpZmljYXRpb24pLnRoZW4oKTtcbiAgICB9IGVsc2UgaWYgKG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi50cmlnZ2VyQWN0aW9uID09PSBEeW5hbWljUHJpY2luZ1RyaWdnZXJBY3Rpb24uQXV0b21hdGljU3dpdGNoUmF0ZSkge1xuICAgICAgLy8gaGFuZGxlIG5vdGlmaWNhdGlvbiBpbmRpY2F0aW5nIHRoZSByYXRlIGhhcyBhdXRvbWF0aWMgc3dpdGNoXG4gICAgICB0aGlzLnNob3dSYXRlQXV0b21hdGljU3dpdGNoVG9hc3RNZXNzYWdlKG5vdGlmaWNhdGlvbikudGhlbigpO1xuICAgICAgdGhpcy5jbG9zZVRyaWdnZXJlZER5bmFtaWNQcmljaW5nQ29uZGl0aW9ucyhjdHgsIG5vdGlmaWNhdGlvbiwgZ3VpZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvbkFsZXJ0Q2hhbmdlKGN0eDogU3RhdGVDb250ZXh0PE5vdGlmaWNhdGlvbnNNb2RlbD4sIG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhbGVydCA9IG5vdGlmaWNhdGlvbj8uYWxlcnQ7XG4gICAgaWYgKGFsZXJ0ICYmIHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UuaXNBbGVydFR5cGVEZWZpbmVkKGFsZXJ0LmV2ZW50RGVzY3JpcHRpb24pKSB7XG4gICAgICB0aGlzLmhhbmRsZUFsZXJ0Rm9yQ2xvc2luZyhjdHgsIGFsZXJ0LCBndWlkKTtcblxuICAgICAgaWYgKGFsZXJ0LmV2ZW50U3RhdGUgJiYgdGhpcy5pc0FsZXJ0RW5hYmxlZEZvclVzZXIoYWxlcnQsIGd1aWQpKSB7XG4gICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSB7IC4uLmN0eC5nZXRTdGF0ZSgpLmNvbmZpZyB9Lm5vdGlmaWNhdGlvbnM7XG5cbiAgICAgICAgaWYgKCFhbGVydC5kZXZpY2VOYW1lKSB7XG4gICAgICAgICAgY29uc3QgcGFya0RldmljZXMgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFBhcmtNYW5hZ2VyU3RhdGUuZGV2aWNlcyk7XG4gICAgICAgICAgYWxlcnQuZGV2aWNlTmFtZSA9IHBhcmtEZXZpY2VzPy5maW5kKGQgPT4gZC5pZCA9PT0gYWxlcnQuZGV2aWNlSUQpPy5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFhbGVydC5wYXJrTmFtZSkge1xuICAgICAgICAgIGNvbnN0IGxvdHNNYXAgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuZmFjaWxpdHlEaWN0aW9uYXJ5KVtndWlkXTtcbiAgICAgICAgICBpZiAobG90c01hcCkge1xuICAgICAgICAgICAgYWxlcnQucGFya05hbWUgPSBsb3RzTWFwW2FsZXJ0LnBhcmtJZF0/Lm5hbWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYWxlcnQucGFya1pvbmVOYW1lID0gXCJcIjtcblxuICAgICAgICAvLyBXZSBkbyBub3Qgb3BlbiB0aGUgbm90aWZpY2F0aW9uIGluIG1vYmlsZSBtb2RlXG4gICAgICAgIGNvbnN0IGlzTW9iaWxlQXBwTW9kZSA9IHRoaXMuYXBwQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5hcHBUeXBlID09PSBBcHBUeXBlLk1vYmlsZTtcbiAgICAgICAgY29uc3QgaXNDY01vZHVsZSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2lkZW5hdlN0YXRlLmFwcE1vZHVsZSkgPT09IEFwcE1vZHVsZS5DYztcbiAgICAgICAgaWYgKCFpc01vYmlsZUFwcE1vZGUgJiYgaXNDY01vZHVsZSkge1xuICAgICAgICAgIHN3aXRjaCAoYWxlcnQuZXZlbnREZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgY2FzZSBQZXJpcGhlcmFsRXF1aXBtZW50RXJyb3IuTE9TVF9USUNLRVQ6XG4gICAgICAgICAgICBjYXNlIFBlcmlwaGVyYWxFcXVpcG1lbnRFcnJvci5MUlBfTk9UX01BVENIOlxuICAgICAgICAgICAgICB0aGlzLm9wZW5Dcml0aWNhbEFsZXJ0RGlhbG9nKGFsZXJ0LCBndWlkKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlBbGVydChjdHgsIGFsZXJ0LCBndWlkKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHVzaCB0aGUgbmV3IGFsZXJ0IHRvIHRoZSBhcnJheSBhbmQgc2F2ZSBpbiBzdGF0ZVxuICAgICAgICBub3RpZmljYXRpb24udGltZUFnb0luU2Vjb25kcyA9IHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UuZ2V0VGltZUFnb0luU2Vjb25kcyhub3RpZmljYXRpb24pO1xuICAgICAgICBub3RpZmljYXRpb25zLnVuc2hpZnQobm90aWZpY2F0aW9uKTtcblxuICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgICAgY29uZmlnOiB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmNvbnZlcnROb3RpZmljYXRpb25zVG9Ob3RpZmljYXRpb25zQ29uZmlnKG5vdGlmaWNhdGlvbnMpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldENsb3VkUGFya0lkKGFsZXJ0OiBBbGVydER0bywgZ3VpZDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBhbGVydFBhcmtJZCA9IGFsZXJ0Lm11bHRpUGFya1BhcmVudElkID4gMCA/IGFsZXJ0Lm11bHRpUGFya1BhcmVudElkIDogYWxlcnQucGFya0lkO1xuICAgIGNvbnN0IGxvdHNNYXAgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuZmFjaWxpdHlEaWN0aW9uYXJ5KVtndWlkXTtcbiAgICByZXR1cm4gbG90c01hcFthbGVydFBhcmtJZF0/LmNsb3VkSWQ7XG4gIH1cblxuICBwcml2YXRlIHBrTWF0Y2hlcyA9IChub3RpZmljYXRpb25EdG86IE5vdGlmaWNhdGlvbkR0bywgbm90aWZpY2F0aW9uUEs6IHN0cmluZykgPT4gdGhpcy5ub3RpZmljYXRpb25QSyhub3RpZmljYXRpb25EdG8sIG5vdGlmaWNhdGlvbkR0by5ndWlkKSA9PT0gbm90aWZpY2F0aW9uUEs7XG4gIHByaXZhdGUgc3RhdGVNYXRjaGVzID0gKGFsZXJ0RHRvOiBBbGVydER0bywgZXZlbnRTdGF0ZTogYm9vbGVhbikgPT4gYWxlcnREdG8uZXZlbnRTdGF0ZSA9PT0gZXZlbnRTdGF0ZTtcbiAgcHJpdmF0ZSBhbGVydFBLID0gKGFsZXJ0RHRvOiBBbGVydER0bywgZ3VpZDogc3RyaW5nKSA9PlxuICAgIGAke2d1aWR9XyR7YWxlcnREdG8ucGFya0lkfV8ke2FsZXJ0RHRvLnJlYWRlcklEfV8ke2FsZXJ0RHRvLmRldmljZUlEfV8ke2FsZXJ0RHRvLmV2ZW50RGVzY3JpcHRpb259YDtcbiAgcHJpdmF0ZSBub3RpZmljYXRpb25QSyhub3RpZmljYXRpb25EdG86IE5vdGlmaWNhdGlvbkR0bywgZ3VpZDogc3RyaW5nKSB7XG4gICAgbGV0IGtleTogc3RyaW5nID0gJyc7XG4gICAgc3dpdGNoIChub3RpZmljYXRpb25EdG8udHlwZSkge1xuICAgICAgY2FzZSBOb3RpZmljYXRpb25UeXBlLkFsZXJ0OlxuICAgICAgICBrZXkgPSB0aGlzLmFsZXJ0UEsobm90aWZpY2F0aW9uRHRvLmFsZXJ0LCBndWlkKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uVHlwZS5EeW5hbWljUHJpY2luZ0NvbmRpdGlvbjpcbiAgICAgICAga2V5ID0gYCR7Z3VpZH1fJHtub3RpZmljYXRpb25EdG8uZHluYW1pY1ByaWNpbmdDb25kaXRpb24uaWR9YDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUubG9nKFwidW5zdXBwb3J0ZWQgbm90aWZpY2F0aW9uIHR5cGVcIik7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBrZXk7XG4gIH1cbn1cbiJdfQ==